Index: trunk/DOCU/CHANGELOG
===================================================================
--- trunk/DOCU/CHANGELOG	(nonexistent)
+++ trunk/DOCU/CHANGELOG	(revision 2)
@@ -0,0 +1,5 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ follow the changelog at http://project.websitebaker.org/  please!!
+ there you can see anything what's changed and also how exactely it's done
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
Index: trunk/DOCU/README.EN
===================================================================
--- trunk/DOCU/README.EN	(nonexistent)
+++ trunk/DOCU/README.EN	(revision 2)
@@ -0,0 +1,81 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[1] General Information about version 2.10.x
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+WB-2.10 is the compatible follow up of all previous WB-2.8.3 releases.
+This packet includes all you need to run a website. In addition to the core you get a basic
+collection of add-ons.
+You also get all needed 3rd party packages like PHPMailer, pclzip, phplib, Twig, JQuery and more.
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[2] Requirements
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+WebsiteBaker is developed in a Linux & Apache environment, therefore we can not give any
+guarantee that it will work without any problem in a Windows(r) Environment.
+
+Operating system: Linux (recommended), Windows (maybe)
+Database        : MySQL 5.5 / MariaDB 5.5 and up
+Webserver       : Apache
+PHP             : 5.6 and up, PHP-7 up (FastCGI, FPM) recommended
+   !!! PHP running as Apache-Module (mod_php) can produce malfunctions in WebsiteBaker !!!
+Diskspace       : 25MB and up
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[3] Instructions for Installing WebsiteBaker 2.10
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+This install pack includes a complete WebsiteBaker version 2.10.0 and can be installed
+on all compatible hosts.
+
+a) Check that your webspace meets the requirements described above!
+
+b) Make sure that you have a MySQL database available and obtain the access data!
+
+c) Download the packet to your workstation and unzip all into an empty folder.
+
+d) Move all to your webspace using ftp and 'overwrite all' setting.
+
+e) switch the PHP version to 5.6 or 7.x if it's not already done.
+
+f) now simply call your installation like  http://example.com/ and follow the
+   instructions of the install script.
+
+
+Enjoy your new WebsiteBaker installation!
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[4] Upgrade WebsiteBaker from any versions of WB-2.8.3
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+This install pack includes a complete WebsiteBaker version 2.10.0 and can be installed
+on all previously published WB 2.8.3 versions (with or without Service Pack). Additional
+Instructions for upgrading WebsiteBaker versions older than 2.8.3 can be found at [5].
+
+a) IMPORTANT::  in any case make a backup of your webspace and the database too !!!
+
+b) Download the packet to your workstation and unzip all into an empty folder.
+
+c) Move all to your webspace using ftp and 'overwrite all' setting.
+
+d) switch the PHP version to 5.6 or 7.x if it's not already done.
+
+e) now start the upgrade-script.php file and follow possible instructions.
+
+f) some add-on pakets are not delivered with this version and must be upgraded manually.
+   Some new versions are available on http://addon.websitebaker.org/
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[5] Upgrade WebsiteBaker from older versions before WB-2.8.3
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Before you upgrade from an older version, first you must upgrade to [WB 2.8.3 from Feb.2012].
+That version is downloadable from either of these links:
+http://addon.websitebaker.org/pages/en/browse-add-ons.php?id=0EA85F12    or
+http://wiki.websitebaker.org/doku.php/en/downloads#websitebaker_283
+
+Instructions for upgrading to WB-2.8.3 can be found in our forum:
+english: http://forum.websitebaker.org/index.php/topic,23412
+german:  http://forum.websitebaker.org/index.php/topic,23658
+
+
Index: trunk/DOCU/README.NL
===================================================================
--- trunk/DOCU/README.NL	(nonexistent)
+++ trunk/DOCU/README.NL	(revision 2)
@@ -0,0 +1,99 @@
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[1] Algemene informatie over WebsiteBaker versie 2.10.x
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+WB-2.10 is de compatibel opvolger van alle voorgaande WB-2.8.3-versies.
+Dit pakket bevat alles wat u nodig heeft om een website op te zetten. 
+Behalve de basis van het CMS bevat dit pakket tevens een collectie add-ons. 
+Ook de benodigde 'third-party' pakketten als PHPMailer, pclzip, Twig, 
+JQuery etc. zijn in deze softwarebundel opgenomen.
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[2] Vereisten
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+WebsiteBaker is ontwikkeld in een Linux + Apache-omgeving. Er kunnen geen 
+garanties worden gegeven dat het CMS probleemloos zal werken in een 
+Windows-omgeving.
+
+Besturingssysteem: Linux (aanbevolen), Windows (misschien)
+Database         : mySQL 5.6 en hoger
+Webserver        : Apache
+PHP              : 5.6 en hoger, PHP-7 en hoger aanbevolen
+                   Als PHP draait als Apache-module kan dit een verstoorde 
+                   werking van WebsiteBaker veroorzaken!!
+Schijfruimte     : 25MB en hoger
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[3] Instructies voor het installeren van WebsiteBaker 2.10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Dit installatiepakket bevat een complete versie van WebsiteBaker 2.10 en 
+kan worden geïnstalleerd op elke compatible host.
+
+a) Verzeker u ervan dat uw webruimte voldoet aan de eisen die hierboven 
+   beschreven staan!
+
+b) Verzeker u ervan dat u een MySQL-database beschikbaar hebt en dat u 
+   beschikt over de databasenaam, servernaam, gebruiker en wachtwoord.
+
+c) Download het pakket naar uw eigen PC en pak het ZIP-bestand uit in een
+   nieuwe, lege map.
+
+d) Kopieer alle bestanden via FTP naar uw webruimte en verzeker u ervan 
+   dat daarbij eventuele bestaande bestanden worden overschreven.
+
+e) Zet de PHP-versie van uw webhosting naar 5.6 of 7.x (aanbevolen!) als
+   dat al niet is gedaan.
+
+f) Ga met een webbrowser naar het domein (bijv. http://www.uwdomein.nl) 
+   en het installatiescript zal automatisch starten.
+
+
+Veel plezier van uw nieuwe WebsiteBaker-installatie!
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[4] WebsiteBaker upgraden vanaf elke versie van WB-2.8.3
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Dit installatiepakket bevat een complete WebsiteBaker versie 2.10 en kan 
+worden geïnstalleerd op elke voorgaand uitgebrachte WB 2.8.3-versie (met 
+of zonder Service Pack). Aanvullende instructies voor het upgraden van 
+WebsiteBaker-versies ouder dan 2.8.3 kunt u lezen onder [5].
+
+a) BELANGRIJK: maak een backup van de bestanden in uw webruimte en de 
+   database!
+
+b) Download het pakket naar uw eigen PC en pak het ZIP-bestand uit in een 
+   nieuwe, lege map.
+
+c) Kopieer alle bestanden via FTP naar uw webruimte en verzeker u ervan 
+   dat daarbij eventuele bestaande bestanden worden overschreven.
+
+d) Zet de PHP-versie van uw webhosting naar 5.6 of 7.x (aanbevolen!) als
+   dat al niet is gedaan.
+
+e) Ga met een webbrowser naar http:/www.uwdomein.nl/upgrade-script.php en
+   volg de instructies.
+
+f) Sommige aanvullende pakketten worden niet meegeleverd met deze versie
+   en moeten handmatig worden bijgewerkt. Eventuele nieuwe versies kunt u
+   vinden op http://addon.websitebaker.org/
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[5] WebsiteBaker upgraden van oudere versies (voor WB-2.8.3)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+Voordat u vanaf een oudere versie kunt upgraden naar WB-2.1.0, moet u uw
+installatie bijwerken naar WB-2.8.3 (van februari 2012).
+Deze versie is te downloaden van de volgende links:
+http://addon.websitebaker.org/pages/en/browse-add-ons.php?id=0EA85F12   of
+http://wiki.websitebaker.org/doku.php/en/downloads#websitebaker_283
+
+Instructies voor het upgraden naar WB-2.8.3 kunnen worden gevonden in ons
+forum:
+Engels: http://forum.websitebaker.org/index.php/topic,23412
+Duits:  http://forum.websitebaker.org/index.php/topic,23658
+
+
+
Index: trunk/account/details.php
===================================================================
--- trunk/account/details.php	(nonexistent)
+++ trunk/account/details.php	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+// sanitize entered values
+    $display_name = strip_tags( $wb->StripCodeFromText($wb->get_post('display_name')));
+    $display_name = ( $display_name == '' ? $wb->get_display_name() : $display_name );
+    $language = preg_match('/^[a-z]{2}$/si', $wb->get_post('language'))
+                ? $wb->get_post('language') : 'EN';
+    $user_time = true;
+// timezone must be between -12 and +13  or -20 as system_default
+    $timezone         = $wb->get_post('timezone');
+    $timezone         = (is_numeric($timezone) ? $timezone : DEFAULT_TIMEZONE/3600);
+    $timezone         = (($timezone >= -12 && $timezone <= 13) ? $timezone : DEFAULT_TIMEZONE/3600) * 3600;
+
+/*
+    $timezone    = $wb->get_post('timezone');
+    $timezone    = is_numeric($wb->get_post('timezone')) ? $wb->get_post('timezone')*3600 : 0;
+    $timezone    = (is_numeric($timezone) ? $timezone : DEFAULT_TIMEZONE/3600);
+    $timezone    = (($timezone >= -12 && $timezone <= 13) ? $timezone : DEFAULT_TIMEZONE/3600) * 3600;
+*/
+    $date_format = $wb->get_post('date_format');
+    $time_format = $wb->get_post('time_format');
+    // check that display_name is unique in whoole system (prevents from User-faking)
+    $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE `user_id` <> '.(int)$wb->get_user_id().' AND `display_name` LIKE \''.$display_name.'\'';
+    if ($database->get_one($sql)) {
+        $error[] = ( @$oTrans->MESSAGE_USERS_DISPLAYNAME_TAKEN ?:$oTrans->MESSAGE_MEDIA_BLANK_NAME.' ('.$oTrans->TEXT_DISPLAY_NAME.')');
+    } else {
+// Update the database
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'users` SET '
+          .     '`display_name` = \''.$database->escapeString($display_name).'\', '
+          .     '`language` = \''.$database->escapeString($language).'\', '
+          .     '`timezone` = \''.$database->escapeString($timezone).'\', '
+          .     '`date_format` = \''.$database->escapeString($date_format).'\', '
+          .     '`time_format` = \''.$database->escapeString($time_format).'\' '
+          . 'WHERE `user_id` = \''.$wb->get_user_id().'\'';
+          $database->query($sql);
+          if($database->is_error()) {
+              $error[] = $database->get_error();
+          } else {
+              $success[] = $oTrans->MOD_PREFERENCE_DETAILS_SAVED;
+              $_SESSION['DISPLAY_NAME'] = $display_name;
+              $_SESSION['LANGUAGE'] = $language;
+              $_SESSION['TIMEZONE'] = $timezone;
+          // Update date format
+              if($date_format != '') {
+                  $_SESSION['DATE_FORMAT'] = $date_format;
+                  if(isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) { unset($_SESSION['USE_DEFAULT_DATE_FORMAT']); }
+              } else {
+                  $_SESSION['USE_DEFAULT_DATE_FORMAT'] = true;
+                  if(isset($_SESSION['DATE_FORMAT'])) { unset($_SESSION['DATE_FORMAT']); }
+              }
+
+        // Update time format
+            if($time_format != '') {
+                $_SESSION['TIME_FORMAT'] = $time_format;
+                if(isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) { unset($_SESSION['USE_DEFAULT_TIME_FORMAT']); }
+            } else {
+                $_SESSION['USE_DEFAULT_TIME_FORMAT'] = true;
+                if(isset($_SESSION['TIME_FORMAT'])) { unset($_SESSION['TIME_FORMAT']); }
+            }
+        }
+    }

Property changes on: trunk/account/details.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/email.php
===================================================================
--- trunk/account/email.php	(nonexistent)
+++ trunk/account/email.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// Get entered values
+    $password = $wb->get_post('current_password');
+    $email = $wb->get_post('email');
+// validate password
+    $sql  = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+          . 'WHERE `user_id` = '.$wb->get_user_id().' AND `password` = \''.md5($password).'\'';
+    $rowset = $database->query($sql);
+// Validate values
+    if($rowset->numRows() == 0) {
+        $error[] = $MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'];
+    }else {
+        if(!$wb->validate_email($email)) {
+            $error[] = $MESSAGE['USERS_INVALID_EMAIL'];
+        }else {
+            $email = $wb->add_slashes($email);
+// Update the database
+            $sql  = 'UPDATE `'.TABLE_PREFIX.'users` '
+                  . 'SET `email` = \''.$database->escapeString($email).'\' '
+                  . 'WHERE `user_id` = \''.$wb->get_user_id().'\'';
+             $database->query($sql);
+            if($database->is_error()) {
+                $error[] = $database->get_error();
+            } else {
+                $success[] = $MESSAGE['PREFERENCES_EMAIL_UPDATED'];
+                $_SESSION['EMAIL'] = $email;
+            }
+        }
+    }

Property changes on: trunk/account/email.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/forgot.php
===================================================================
--- trunk/account/forgot.php	(nonexistent)
+++ trunk/account/forgot.php	(revision 2)
@@ -0,0 +1,50 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require(dirname(__DIR__).'/config.php'); }
+if ( !class_exists('frontend')) { require(WB_PATH.'/framework/class.frontend.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) { $wb = new frontend(); }
+
+$page_id = @$_SESSION['PAGE_ID'] ?: 0;
+
+// Required page details
+// $page_id = 0;
+$page_description = '';
+$page_keywords = '';
+define('PAGE_ID', $page_id);
+define('ROOT_PARENT', 0);
+define('PARENT', 0);
+define('LEVEL', 0);
+define('PAGE_TITLE', $MENU['FORGOT']);
+define('MENU_TITLE', $MENU['FORGOT']);
+define('VISIBILITY', 'public');
+
+if(!FRONTEND_LOGIN) {
+    header('Location: '.WB_URL.'/index.php');
+    exit(0);
+}
+
+// Set the page content include file
+define('PAGE_CONTENT', WB_PATH.'/account/forgot_form.php');
+
+// Set auto authentication to false
+$auto_auth = false;
+
+// Include the index (wrapper) file
+require(WB_PATH.'/index.php');

Property changes on: trunk/account/forgot.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/forgot_form.php
===================================================================
--- trunk/account/forgot_form.php	(nonexistent)
+++ trunk/account/forgot_form.php	(revision 2)
@@ -0,0 +1,129 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+// Check if the user has already submitted the form, otherwise show it
+$sCallingScript = WB_URL;
+$redirect_url = ((isset($_SESSION['HTTP_REFERER']) && $_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : $sCallingScript );
+$redirect_url = ( isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+$message = $MESSAGE['FORGOT_PASS_NO_DATA'];
+$errMsg ='';
+if(isset($_POST['email']) && $_POST['email'] != "" )
+{
+    $email = strip_tags($_POST['email']);
+    if($admin->validate_email($email) == false)
+    {
+        $errMsg = $MESSAGE['USERS_INVALID_EMAIL'];
+        $email = '';
+    } else {
+// Check if the email exists in the database
+    $sql  = 'SELECT `user_id`,`username`,`display_name`,`email`,`last_reset`,`password` '.
+            'FROM `'.TABLE_PREFIX.'users` '.
+            'WHERE `email`=\''.$database->escapeString($email).'\'';
+    if(($results = $database->query($sql)))
+    {
+        if(($results_array = $results->fetchRow()))
+        { // Get the id, username, email, and last_reset from the above db query
+        // Check if the password has been reset in the last 2 hours
+            if( (time() - (int)$results_array['last_reset']) < (2 * 3600) ) {
+            // Tell the user that their password cannot be reset more than once per hour
+                $errMsg = $MESSAGE['FORGOT_PASS_ALREADY_RESET'];
+            } else {
+                require_once(WB_PATH.'/framework/PasswordHash.php');
+                $pwh = new PasswordHash(0, true);
+                $old_pass = $results_array['password'];
+            // Generate a random password then update the database with it
+                $new_pass = $pwh->NewPassword();
+                $sql  = 'UPDATE `'.TABLE_PREFIX.'users` SET '
+                      . '`password`=\''.$database->escapeString($pwh->HashPassword($new_pass, true)).'\', '
+                      . '`last_reset`='.time().' '
+                      . 'WHERE `user_id`='.(int)$results_array['user_id'];
+                unset($pwh); // destroy $pwh-Object
+                if($database->query($sql))
+                { // Setup email to send
+                    $mail_to = $email;
+                    $mail_subject = $MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'];
+                // Replace placeholders from language variable with values
+                    $search = array('{LOGIN_DISPLAY_NAME}', '{LOGIN_WEBSITE_TITLE}', '{LOGIN_NAME}', '{LOGIN_PASSWORD}');
+                    $replace = array($results_array['display_name'], WEBSITE_TITLE, $results_array['username'], $new_pass);
+                    $mail_message = str_replace($search, $replace, $MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT']);
+                // Try sending the email
+                    if($wb->mail(SERVER_EMAIL,$mail_to,$mail_subject,$mail_message)) {
+                        $message = $MESSAGE['FORGOT_PASS_PASSWORD_RESET'];
+                        $display_form = false;
+                    }else { // snd mail failed, rollback
+                        $sql = 'UPDATE `'.TABLE_PREFIX.'users` '.
+                               'SET `password`=\''.$database->escapeString($old_pass).'\' '.
+                               'WHERE `user_id`='.(int)$results_array['user_id'];
+                        $database->query($sql);
+                        $errMsg = $MESSAGE['FORGOT_PASS_CANNOT_EMAIL'];
+                    }
+                }else { // Error updating database
+                    $errMsg = $MESSAGE['RECORD_MODIFIED_FAILED'];
+                    if(DEBUG) {
+                        $message .= '<br />'.$database->get_error();
+                        $message .= '<br />'.$sql;
+                    }
+                }
+            }
+        }else { // no record found - Email doesn't exist, so tell the user
+            $errMsg = $MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'];
+        }
+    } else { // Query failed
+        $errMsg = 'SystemError:: Database query failed!';
+        if(DEBUG) {
+            $errMsg .= '<br />'.$database->get_error();
+            $errMsg .= '<br />'.$sql;
+        }
+    }
+    }
+} else {
+    $email = '';
+}
+
+if( ($errMsg=='') && ($message != '')) {
+    // $message = $MESSAGE['FORGOT_PASS_NO_DATA'];
+    $message_color = '000000';
+} else {
+    $message = $errMsg;
+    $message_color = 'ff0000';
+}
+?>
+<div style="margin: 1em auto;">
+    <button type="button" value="cancel" onclick="window.location = '<?php echo $redirect_url; ?>';"><?php print $TEXT['CANCEL'] ?></button>
+</div>
+<h1 style="text-align: center;"><?php echo $MENU['FORGOT']; ?></h1>
+<form name="forgot_pass" action="<?php echo WB_URL.'/account/forgot.php'; ?>" method="post" class="account">
+        <table >
+        <tr>
+            <td height="40" align="center" style="color: #<?php echo $message_color; ?>;" colspan="3">
+            <strong><?php echo $message; ?></strong>
+            </td>
+        </tr>
+<?php if(!isset($display_form) OR $display_form != false) { ?>
+        <tr>
+            <td height="10" colspan="2"></td>
+        </tr>
+        <tr>
+            <td width="165" height="30" align="right"><?php echo $TEXT['EMAIL']; ?>:</td>
+            <td><input type="text" maxlength="255" name="email" value="<?php echo $email; ?>" style="width: 180px;" /></td>
+            <td><input type="submit" name="submit" value="<?php echo $TEXT['SEND_DETAILS']; ?>" style="width: 180px; font-size: 10px; color: #003366; border: 1px solid #336699; background-color: #DDDDDD; padding: 3px; text-transform: uppercase;" /></td>
+        </tr>
+<?php } ?>
+        </table>
+</form>
\ No newline at end of file

Property changes on: trunk/account/forgot_form.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/frontend.css
===================================================================
--- trunk/account/frontend.css	(nonexistent)
+++ trunk/account/frontend.css	(revision 2)
@@ -0,0 +1,29 @@
+/* <![CDATA[ */
+/*
+  CSS definition for Website Baker module: WB-Preferences
+  Copyright (C) 2008, Werner von der Decken
+  Contact me: wkl(at)isteam.de, http://isteam.de
+
+  This CSS file is free software. You can redistribute it and/or modify it
+  under the terms of the GNU General Public License  - version 2 or later,
+  as published by the Free Software Foundation: http://www.gnu.org/licenses/gpl.html.
+
+  This CSS file 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 General Public License for more details.
+*/
+    .mod_preferences_error {
+        background-color:#ffb0b0;
+        padding:5px;
+        border:dotted 1px #ff0000;
+        color:#ff0000;
+    }
+    .mod_preferences_success {
+        background-color:#b0ffb0;
+        padding:5px;
+        border:dotted 1px #303030;
+        color:#303030;
+    }
+table.account tr { line-height: 2.525; }
+
Index: trunk/account/languages/DE.php
===================================================================
--- trunk/account/languages/DE.php	(nonexistent)
+++ trunk/account/languages/DE.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+/**
+  Module developed for the Open Source Content Management System Website Baker (http://websitebaker.org)
+  Copyright (C) 2008, ISTeam, Werner von der Decken
+  Contact me: wkl(at)isteam.de, http://isteam.de
+
+  This module is free software. You can redistribute it and/or modify it
+  under the terms of the GNU General Public License  - version 2 or later,
+  as published by the Free Software Foundation: http://www.gnu.org/licenses/gpl.html.
+
+  This module 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 General Public License for more details.
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS PREFERENCES MODUL
+ -----------------------------------------------------------------------------------------
+    UPDATE HISTORY:
+    Werner von der Decken; 17.05.2008
+     + erstes release der Deutschen Sprachdatei
+ -----------------------------------------------------------------------------------------
+**/
+
+// Array fuer alle sprachabhaengigen Textausgaben im Front- und Backend
+// Hinweis: Verwende nachfolgende Namenskonvention fr die Sprachausgabe des Moduls: $MOD_MODULE_DIRECTORY
+$MOD_PREFERENCE = array(
+    'PLEASE_SELECT' => 'bitte w&auml;hlen',
+    'DETAILS_SAVED'    => 'allgemeine Einstellungen ge&auml;ndert',
+    'SAVE_SETTINGS' => 'Einstellungen speichern',
+    'SAVE_EMAIL' => 'Email speichern',
+    'SAVE_PASSWORD' => 'Passwort speichern',
+);
+$MESSAGE['USERS_DISPLAYNAME_TAKEN'] = 'Der angegebene Anzeigename wird bereits verwendet';
+$TEXT['FULL_NAME'] = '&Ouml;ffentlich sichtbarer Name';

Property changes on: trunk/account/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/languages/EN.php
===================================================================
--- trunk/account/languages/EN.php	(nonexistent)
+++ trunk/account/languages/EN.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+/**
+  Module developed for the Open Source Content Management System Website Baker (http://websitebaker.org)
+  Copyright (C) 2008, ISTeam, Werner von der Decken
+  Contact me: wkl(at)isteam.de, http://isteam.de
+
+  This module is free software. You can redistribute it and/or modify it
+  under the terms of the GNU General Public License  - version 2 or later,
+  as published by the Free Software Foundation: http://www.gnu.org/licenses/gpl.html.
+
+  This module 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 General Public License for more details.
+
+ -----------------------------------------------------------------------------------------
+  ENGLISH LANGUAGE FILE FOR THE PREFERENCES MODULE
+ -----------------------------------------------------------------------------------------
+    UPDATE HISTORY:
+    Werner von der Decken; 17.05.2008
+     + initial release of the English language file
+ -----------------------------------------------------------------------------------------
+**/
+// array for all language dependen text outputs in the front- and backend
+// Note: stick to the naming convention: $MOD_MODULE_DIRECTORY
+$MOD_PREFERENCE = array(
+    'PLEASE_SELECT' => 'please select',
+    'DETAILS_SAVED'    => 'details successfully saved',
+    'SAVE_SETTINGS' => 'save details',
+    'SAVE_EMAIL'    => 'save email',
+    'SAVE_PASSWORD' => 'save password',
+);
+$MESSAGE['USERS_DISPLAYNAME_TAKEN'] = 'The displayname you entered is already taken';
+$TEXT['FULL_NAME'] = 'Publicly visible name';

Property changes on: trunk/account/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/login.php
===================================================================
--- trunk/account/login.php	(nonexistent)
+++ trunk/account/login.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require(dirname(__DIR__).'/config.php'); }
+if ( !class_exists('frontend')) { require(WB_PATH.'/framework/class.frontend.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) { $wb = new frontend(); }
+
+// Make sure the login is enabled
+if(!FRONTEND_LOGIN) {
+    if(INTRO_PAGE) {
+        header('Location: '.WB_URL.'/index.php');
+        exit(0);
+    } else {
+        header('Location: '.WB_URL.'/index.php');
+        exit(0);
+          if ( $wb->get_user_id() && $wb->ami_group_member( '1' ) ) {
+          } else {
+              $wb->print_missing_frontend_login();
+          }
+          exit(0);
+    }
+}
+
+$page_id = @$_SESSION['PAGE_ID'] ?: 0;
+
+// Required page details
+// $page_id = 0;
+$page_description = '';
+$page_keywords = '';
+define('PAGE_ID', $page_id);
+define('ROOT_PARENT', 0);
+define('PARENT', 0);
+define('LEVEL', 0);
+define('PAGE_TITLE', $TEXT['PLEASE_LOGIN']);
+define('MENU_TITLE', $TEXT['PLEASE_LOGIN']);
+define('VISIBILITY', 'public');
+// Set the page content include file
+define('PAGE_CONTENT', WB_PATH.'/account/login_form.php');
+
+require_once(WB_PATH.'/framework/Login.php');
+require_once(WB_PATH.'/framework/class.frontend.php');
+
+// Create new frontend object
+//$wb = new frontend();
+
+// Create new login app
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$redirect  = strip_tags(isset(${$requestMethod}['redirect']) ? ${$requestMethod}['redirect'] : '');
+$redirect = ((isset($_SERVER['HTTP_REFERER']) && empty($redirect)) ?  $_SERVER['HTTP_REFERER'] : $redirect);
+$_SESSION['HTTP_REFERER'] = str_replace(WB_URL,'',$redirect);
+
+$loginUrl  = WB_URL.'/account/login.php';
+$loginUrl .= (!empty($redirect) ? '?redirect=' .$_SESSION['HTTP_REFERER'] : '');
+
+$ThemeUrl  = WB_URL.$wb->correct_theme_source('warning.html');
+// Setup template object, parse vars to it, then parse it
+$ThemePath = realpath(WB_PATH.$wb->correct_theme_source('login.htt'));
+
+$thisApp = new Login(
+                array(
+                        "MAX_ATTEMPS" => "3",
+                        "WARNING_URL" => $ThemeUrl."/warning.html",
+                        "USERNAME_FIELDNAME" => 'username',
+                        "PASSWORD_FIELDNAME" => 'password',
+                        "REMEMBER_ME_OPTION" => SMART_LOGIN,
+                        "MIN_USERNAME_LEN" => "2",
+                        "MIN_PASSWORD_LEN" => "2",
+                        "MAX_USERNAME_LEN" => "30",
+                        "MAX_PASSWORD_LEN" => "30",
+                        "LOGIN_URL" => $loginUrl,
+                        "DEFAULT_URL" => WB_URL."/index.php",
+                        "TEMPLATE_DIR" => $ThemePath,
+                        "TEMPLATE_FILE" => "login.htt",
+                        "FRONTEND" => true,
+                        "FORGOTTEN_DETAILS_APP" => WB_URL."/account/forgot.php",
+                        "USERS_TABLE" => TABLE_PREFIX."users",
+                        "GROUPS_TABLE" => TABLE_PREFIX."groups",
+                        "REDIRECT_URL" => $redirect
+                )
+        );
+
+// Set extra outsider var
+$globals[] = 'thisApp';
+
+// Include the index (wrapper) file
+require(WB_PATH.'/index.php');

Property changes on: trunk/account/login.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/login_form.php
===================================================================
--- trunk/account/login_form.php	(nonexistent)
+++ trunk/account/login_form.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+$username_fieldname = 'username';
+$password_fieldname = 'password';
+if(defined('SMART_LOGIN') && SMART_LOGIN == 'true') {
+    $sTmp = '_'.substr(md5(microtime()), -8);
+    $username_fieldname .= $sTmp;
+    $password_fieldname .= $sTmp;
+}
+
+$thisApp->redirect_url = (isset($thisApp->redirect_url) && ($thisApp->redirect_url!='')  ? $thisApp->redirect_url : $_SESSION['HTTP_REFERER'] );
+
+?>
+<div style="margin: 1em auto;">
+    <button type="button" value="cancel" onclick="javascript: window.location = '<?php print $_SESSION['HTTP_REFERER'] ?>';"><?php print $TEXT['CANCEL'] ?></button>
+</div>
+<h1>&nbsp;Login</h1>
+&nbsp;<?php
+
+    echo $thisApp->getMessage();
+?>
+<br />
+<br />
+
+<form class="login-box account" action="<?php echo WB_URL.'/account/login.php'; ?>" method="post">
+<input type="hidden" name="username_fieldname" value="<?php echo $username_fieldname; ?>" />
+<input type="hidden" name="password_fieldname" value="<?php echo $password_fieldname; ?>" />
+<input type="hidden" name="redirect" value="<?php echo $thisApp->redirect_url;?>" />
+
+<table >
+<tr>
+    <td style="width:100px"><?php echo $TEXT['USERNAME']; ?>:</td>
+    <td class="value_input">
+        <input type="text" name="<?php echo $username_fieldname; ?>" maxlength="30" style="width:220px;"/>
+        <script type="text/javascript">
+        // document.login.<?php echo $username_fieldname; ?>.focus();
+        var ref= document.getElementById("<?php echo $username_fieldname; ?>");
+        if (ref) ref.focus();
+        </script>
+    </td>
+</tr>
+<tr>
+    <td style="width:100px"><?php echo $TEXT['PASSWORD']; ?>:</td>
+    <td class="value_input">
+        <input type="password" name="<?php echo $password_fieldname; ?>" maxlength="30" style="width:220px;"/>
+    </td>
+</tr>
+<?php if($username_fieldname != 'username') { ?>
+<tr>
+    <td>&nbsp;</td>
+    <td>
+        <input type="checkbox" name="remember" id="remember" value="true"/>
+        <label for="remember"><?php echo $TEXT['REMEMBER_ME']; ?></label>
+    </td>
+</tr>
+<?php } ?>
+<tr>
+    <td>&nbsp;</td>
+    <td>
+        <input type="submit" name="submit" value="<?php echo $TEXT['LOGIN']; ?>"  />
+        <input type="reset" name="reset" value="<?php echo $TEXT['RESET']; ?>"  />
+    </td>
+</tr>
+</table>
+
+</form>
+
+<br />
+
+<a href="<?php echo WB_URL; ?>/account/forgot.php"><?php echo $TEXT['FORGOTTEN_DETAILS']; ?></a>
\ No newline at end of file

Property changes on: trunk/account/login_form.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/logout.php
===================================================================
--- trunk/account/logout.php	(nonexistent)
+++ trunk/account/logout.php	(revision 2)
@@ -0,0 +1,47 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if( !defined( 'WB_PATH' ) ){ require(dirname(__DIR__).'/config.php'); }
+
+if(isset($_COOKIE['REMEMBER_KEY'])) {
+    setcookie('REMEMBER_KEY', '', time()-3600, '/');
+}
+$redirect_url = ((isset($_SESSION['HTTP_REFERER']) && $_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : WB_URL );
+$redirect_url = ( isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+$page_id = @$_SESSION['PAGE_ID'] ?: 0;
+
+$_SESSION['USER_ID'] = null;
+$_SESSION['GROUP_ID'] = null;
+$_SESSION['GROUPS_ID'] = null;
+$_SESSION['USERNAME'] = null;
+$_SESSION['PAGE_PERMISSIONS'] = null;
+$_SESSION['SYSTEM_PERMISSIONS'] = null;
+$_SESSION = array();
+
+session_unset();
+unset($_COOKIE[session_name()]);
+session_destroy();
+
+if( !FRONTEND_LOGIN && INTRO_PAGE) {
+    header('Location: '.WB_URL.'/index.php');
+    exit;
+} else {
+    $no_intro = true;
+    require(WB_PATH.'/index.php');
+}
+

Property changes on: trunk/account/logout.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/password.php
===================================================================
--- trunk/account/password.php	(nonexistent)
+++ trunk/account/password.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2012, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// Get entered values
+    $iMinPassLength = 6;
+    $sCurrentPassword = $wb->get_post('current_password');
+    $sCurrentPassword = (is_null($sCurrentPassword) ? '' : $sCurrentPassword);
+    $sNewPassword = $wb->get_post('new_password');
+    $sNewPassword = is_null($sNewPassword) ? '' : $sNewPassword;
+    $sNewPasswordRetyped = $wb->get_post('new_password2');
+    $sNewPasswordRetyped= is_null($sNewPasswordRetyped) ? '' : $sNewPasswordRetyped;
+// Check existing password
+    $sql  = 'SELECT `password` ';
+    $sql .= 'FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE `user_id` = '.$wb->get_user_id();
+// Validate values
+    if (md5($sCurrentPassword) != $database->get_one($sql)) {
+        $error[] = $MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'];
+    }else {
+        if(strlen($sNewPassword) < $iMinPassLength) {
+            $error[] = $MESSAGE['USERS_PASSWORD_TOO_SHORT'];
+        }else {
+            if($sNewPassword != $sNewPasswordRetyped) {
+                $error[] = $MESSAGE['USERS_PASSWORD_MISMATCH'];
+            }else {
+                $pattern = '/[^'.$wb->password_chars.']/';
+                if (preg_match($pattern, $sNewPassword)) {
+                    $error[] = $MESSAGE['PREFERENCES_INVALID_CHARS'];
+                }else {
+// generate new password hash
+                    $sPwHashNew = md5($sNewPassword);
+// Update the database
+                    $sql  = 'UPDATE `'.TABLE_PREFIX.'users` '
+                          . 'SET `password`=\''.$database->escapeString($sPwHashNew).'\' '
+                          . 'WHERE `user_id`='.$wb->get_user_id();
+                    if ($database->query($sql)) {
+                        $success[] = $MESSAGE['PREFERENCES_PASSWORD_CHANGED'];
+                    }else {
+                        $error[] = $database->get_error();
+                    }
+                }
+            }
+        }
+    }

Property changes on: trunk/account/password.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/preferences.php
===================================================================
--- trunk/account/preferences.php	(nonexistent)
+++ trunk/account/preferences.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if (!defined( 'WB_PATH')){ require(dirname(__DIR__).'/config.php'); }
+if (!class_exists('frontend')) {require(WB_PATH.'/framework/class.frontend.php');}
+
+require_once(WB_PATH.'/framework/functions.php');
+
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) {
+  $wb = new frontend();
+}
+
+if(!FRONTEND_LOGIN) {
+    header('Location: '.WB_URL.'/index.php');
+    exit(0);
+}
+
+if ($wb->is_authenticated()==false) {
+    header('Location: '.WB_URL.'/account/login.php');
+    exit(0);
+}
+$redirect_url = ((isset($_SESSION['HTTP_REFERER']) && $_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : WB_URL );
+$redirect_url = ( isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+$page_id = @$_SESSION['PAGE_ID'] ?: PAGE_ID;
+/*
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$redirect  = strip_tags(isset(${$requestMethod}['redirect']) ? ${$requestMethod}['redirect'] : '');
+$redirect = ((isset($_SERVER['HTTP_REFERER']) && empty($redirect)) ?  $_SERVER['HTTP_REFERER'] : $redirect);
+$_SESSION['HTTP_REFERER'] = str_replace(WB_URL,'',$redirect);
+*/
+
+// Required page details
+$page_description = '';
+$page_keywords = '';
+define('PAGE_ID', $page_id);
+define('ROOT_PARENT', 0);
+define('PARENT', 0);
+define('LEVEL', 0);
+
+define('PAGE_TITLE', $MENU['PREFERENCES']);
+define('MENU_TITLE', $MENU['PREFERENCES']);
+define('MODULE', '');
+define('VISIBILITY', 'public');
+
+define('PAGE_CONTENT', WB_PATH.'/account/preferences_form.php');
+// Include the index (wrapper) file
+$no_intro = true;
+require(WB_PATH.'/index.php');

Property changes on: trunk/account/preferences.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/preferences_form.php
===================================================================
--- trunk/account/preferences_form.php	(nonexistent)
+++ trunk/account/preferences_form.php	(revision 2)
@@ -0,0 +1,237 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// prevent this file from being accesses directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+$sCallingScript = WB_URL;
+
+$redirect_url = (isset($_SESSION['HTTP_REFERER']) && ($_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : $sCallingScript );
+$redirect_url = (isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.$page_id.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $redirect_url ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+    if($wb->is_authenticated() === false) {
+// User needs to login first
+        header("Location: ".WB_URL."/account/login.php?redirect=".$wb->link);
+        exit(0);
+    }
+// load module default language file (EN)
+$sAddonName = basename(__DIR__);
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon('account');
+
+//require(WB_PATH .'/'.$sAddonName.'/languages/EN.php');
+//if(file_exists(WB_PATH .'/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+//    require(WB_PATH .'/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+//}
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+/*
+    echo '<style type="text/css">';
+    include(WB_PATH .'/account/frontend.css');
+    echo "\n</style>\n";
+*/
+
+    $user_time = true;
+    require(ADMIN_PATH.'/interface/timezones.php');
+    require(ADMIN_PATH.'/interface/date_formats.php');
+    require(ADMIN_PATH.'/interface/time_formats.php');
+    $error = array();
+    $success = array();
+    $template = new Template(WB_PATH .'/account','remove');
+    switch($wb->get_post('action')):
+        case 'details':
+            require_once(WB_PATH .'/account/details.php');
+            break;
+        case 'email':
+            require_once(WB_PATH .'/account/email.php');
+            break;
+        case 'password':
+            require_once(WB_PATH .'/account/password.php');
+            break;
+        default:
+            // do nothing
+    endswitch; // switch
+// show template
+    $template->set_file('page', 'template.htt');
+    $template->set_block('page', 'main_block', 'main');
+// get existing values from database
+    $sql = "SELECT `display_name`,`email` FROM `".TABLE_PREFIX."users` WHERE `user_id` = '".$wb->get_user_id()."'";
+    $rowset = $database->query($sql);
+    if($database->is_error()) { $error[] = $database->get_error(); }
+    $row = $rowset->fetchRow(MYSQLI_ASSOC);
+// insert values into form
+    $template->set_var('DISPLAY_NAME', $row['display_name']);
+    $template->set_var('EMAIL', $row['email']);
+// read available languages from table addons and assign it to the template
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
+    $sql .= 'WHERE `type` = \'language\' ORDER BY `directory`';
+    if( $res_lang = $database->query($sql) ) {
+        $template->set_block('main_block', 'language_list_block', 'language_list');
+        $iCurrentLanguage = (@$_SESSION['LANGUAGE'] ? : LANGUAGE);
+        while( $rec_lang = $res_lang->fetchRow(MYSQLI_ASSOC) )
+        {
+            $langIcons = (empty($rec_lang['directory'])) ? 'none' : strtolower($rec_lang['directory']);
+            $template->set_var('CODE',        $rec_lang['directory']);
+            $template->set_var('NAME',        $rec_lang['name']);
+            $template->set_var('FLAG',        THEME_URL.'/images/flags/'.$langIcons);
+            $template->set_var('SELECTED',    ($iCurrentLanguage == $rec_lang['directory'] ? ' selected="selected"' : '') );
+            $template->parse('language_list', 'language_list_block', true);
+        }
+    }
+// Insert default timezone values
+    $template->set_block('main_block', 'timezone_list_block', 'timezone_list');
+    if( isset($_SESSION['TIMEZONE'])) {
+        $actual_time = time()+ $_SESSION['TIMEZONE'];
+        foreach($TIME_FORMATS as $key => &$val) {
+            if($key == "system_default") {
+                if(isset($oTrans->TEXT_SYSTEM_DEFAULT)) {
+                    $TIME_FORMATS['system_default'] = gmdate(DEFAULT_TIME_FORMAT, $actual_time).' ('.$oTrans->TEXT_SYSTEM_DEFAULT.')';
+                } else {
+                    $TIME_FORMATS['system_default'] = gmdate(DEFAULT_TIME_FORMAT, $actual_time).' (System Default)';
+                }
+            } else {
+                $format = str_replace("|", " ", $key);
+                $TIME_FORMATS[ $key ] = gmdate( $format, $actual_time);
+            }
+        }
+        // Keep in mind we've also update the Date! (± one day)
+        foreach($DATE_FORMATS as $key => &$val) {
+            if($key == "system_default") {
+                if(isset($oTrans->TEXT_SYSTEM_DEFAULT)) {
+                    $DATE_FORMATS['system_default'] = gmdate(DEFAULT_DATE_FORMAT, $actual_time).' ('.$oTrans->TEXT_SYSTEM_DEFAULT.')';
+                } else {
+                    $DATE_FORMATS['system_default'] = gmdate(DEFAULT_DATE_FORMAT, $actual_time).' (System Default)';
+                }
+            } else {
+                $format = str_replace("|", " ", $key);
+                $DATE_FORMATS[ $key ] = gmdate( $format, $actual_time);
+            }
+        }
+    }
+
+    $iActualTimezone = ((DEFAULT_TIMEZONE <> 0)  ? DEFAULT_TIMEZONE : 0);
+    $iActualTimezone = (($iActualTimezone == $wb->get_timezone())? 'system_default':$wb->get_timezone());
+    $iCurrentTimeZone = intval(@$_SESSION['TIMEZONE'] ? : $iActualTimezone);
+    foreach($TIMEZONES AS $hour_offset => $title) {
+        $iTmpOffset = (is_numeric($hour_offset)?$hour_offset*3600:$hour_offset);
+        $template->set_var('VALUE',    $hour_offset);
+        $template->set_var('NAME',     $title);
+        $template->set_var('SELECTED', (($iTmpOffset === $iActualTimezone) ? ' selected="selected"' : ''));
+/*
+        $template->set_var('VALUE', $hour_offset);
+        $template->set_var('NAME', $title);
+        if($iCurrentTimeZone == $hour_offset*3600) {
+            $template->set_var('SELECTED', 'selected="selected"');
+        } else {
+            $template->set_var('SELECTED', '');
+        }
+*/
+        $template->parse('timezone_list', 'timezone_list_block', true);
+    }
+// Insert date format list
+    $template->set_block('main_block', 'date_format_list_block', 'date_format_list');
+    $sTempDateFormat = (@$_SESSION['DATE_FORMAT'] ?: DATE_FORMAT);
+    foreach($DATE_FORMATS AS $format => $title) {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        if($format != 'system_default') {
+            $template->set_var('VALUE', $format);
+        } else {
+            $template->set_var('VALUE', '');
+        }
+        $template->set_var('NAME', $title);
+        if($sTempDateFormat == $format AND !isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) {
+            $template->set_var('SELECTED', 'selected="selected"');
+        } elseif($format == 'system_default' AND isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) {
+            $template->set_var('SELECTED', 'selected="selected"');
+        } else {
+            $template->set_var('SELECTED', '');
+        }
+        $template->parse('date_format_list', 'date_format_list_block', true);
+    }
+// Insert time format list
+    $template->set_block('main_block', 'time_format_list_block', 'time_format_list');
+    $sTimeFormat = (@$_SESSION['TIME_FORMAT'] ? : TIME_FORMAT );
+    foreach($TIME_FORMATS AS $format => $title) {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        if($format != 'system_default') {
+            $template->set_var('VALUE', $format);
+        } else {
+            $template->set_var('VALUE', '');
+        }
+        $template->set_var('NAME', $title);
+        if($sTimeFormat == $format AND !isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) {
+            $template->set_var('SELECTED', 'selected="selected"');
+        } elseif($format == 'system_default' AND isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) {
+            $template->set_var('SELECTED', 'selected="selected"');
+        } else {
+            $template->set_var('SELECTED', '');
+        }
+        $template->parse('time_format_list', 'time_format_list_block', true);
+    }
+// insert all translations
+    $template->set_var($oTrans->getLangArray());
+    $template->set_var('HTTP_REFERER', $redirect_url); //$_SESSION['HTTP_REFERER'],
+// Insert language headings
+//    $template->set_var(array(
+//                                'HEADING_MY_SETTINGS' => $oTrans->HEADING_MY_SETTINGS,
+//                                'HEADING_MY_EMAIL'    => $oTrans->HEADING_MY_EMAIL,
+//                                'HEADING_MY_PASSWORD' => $oTrans->HEADING_MY_PASSWORD
+//                                )
+//                        );
+//// Insert language text and messages
+//    $template->set_var(array(
+//                                'TEXT_SAVE'    => $oTrans->TEXT_SAVE,
+//                                'TEXT_RESET' => $oTrans->TEXT_RESET,
+//                                'TEXT_CANCEL' => $oTrans->TEXT_CANCEL,
+//                                'TEXT_DISPLAY_NAME'    => $oTrans->TEXT_DISPLAY_NAME,
+//                                'TEXT_EMAIL' => $oTrans->TEXT_EMAIL,
+//                                'TEXT_LANGUAGE' => $oTrans->TEXT_LANGUAGE,
+//                                'TEXT_TIMEZONE' => $oTrans->TEXT_TIMEZONE,
+//                                'TEXT_DATE_FORMAT' => $oTrans->TEXT_DATE_FORMAT,
+//                                'TEXT_TIME_FORMAT' => $oTrans->TEXT_TIME_FORMAT,
+//                                'TEXT_CURRENT_PASSWORD' => $oTrans->TEXT_CURRENT_PASSWORD,
+//                                'TEXT_NEW_PASSWORD' => $oTrans->TEXT_NEW_PASSWORD,
+//                                'TEXT_RETYPE_NEW_PASSWORD' => $oTrans->TEXT_RETYPE_NEW_PASSWORD
+//                                )
+//                        );
+//// Insert module releated language text and messages
+//    $template->set_var(array(
+//                                'MOD_PREFERENCE_PLEASE_SELECT'    => $oTrans->MOD_PREFERENCE_PLEASE_SELECT,
+//                                'MOD_PREFERENCE_SAVE_SETTINGS'    => $oTrans->MOD_PREFERENCE_SAVE_SETTINGS,
+//                                'MOD_PREFERENCE_SAVE_EMAIL'            => $oTrans->MOD_PREFERENCE_SAVE_EMAIL,
+//                                'MOD_PREFERENCE_SAVE_PASSWORD'    => $oTrans->MOD_PREFERENCE_SAVE_PASSWORD,
+//                                )
+//                        );
+// Insert error and/or success messages
+    $template->set_block('main_block', 'error_block', 'error_list');
+    if(sizeof($error)>0){
+        foreach($error AS $value){
+            $template->set_var('ERROR_VALUE', $value);
+            $template->parse('error_list', 'error_block', true);
+        }
+    }
+    $template->set_block('main_block', 'success_block', 'success_list');
+    if(sizeof($success)!=0){
+        foreach($success AS $value){
+            $template->set_var('SUCCESS_VALUE', $value);
+            $template->parse('success_list', 'success_block', true);
+        }
+    }
+// Parse template for preferences form
+    $template->parse('main', 'main_block', false);
+    $template->pparse('output', 'page');

Property changes on: trunk/account/preferences_form.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/signup.php
===================================================================
--- trunk/account/signup.php	(nonexistent)
+++ trunk/account/signup.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require(dirname(__DIR__).'/config.php'); }
+
+if (!(int)FRONTEND_SIGNUP || (int)($_SESSION['USER_ID'] ?: 0)) {
+    if(INTRO_PAGE) {
+        $no_intro = true;
+    }
+    include dirname(__DIR__).'/index.php';
+}
+
+if(ENABLED_ASP && isset($_POST['username']) && ( // form faked? Check the honeypot-fields.
+    (!isset($_POST['submitted_when']) OR !isset($_SESSION['submitted_when'])) OR
+    ($_POST['submitted_when'] != $_SESSION['submitted_when']) OR
+    (!isset($_POST['email-address']) OR $_POST['email-address']) OR
+    (!isset($_POST['name']) OR $_POST['name']) OR
+    (!isset($_POST['full_name']) OR $_POST['full_name'])
+)) {
+    exit(header("Location: ".WB_URL."/index.php"));
+}
+
+// Load the language file
+if(!file_exists(WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php')) {
+    exit('Error loading language file '.DEFAULT_LANGUAGE.', please check configuration');
+} else {
+    require_once(WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php');
+    $load_language = false;
+}
+$_SESSION['display_form'] = true;
+
+$page_id = (int)($_SESSION['PAGE_ID'] ?: 0);
+
+// Required page details
+// $page_id = 0;
+$page_description = '';
+$page_keywords = '';
+define('PAGE_ID', $page_id);
+define('ROOT_PARENT', 0);
+define('PARENT', 0);
+define('LEVEL', 0);
+define('PAGE_TITLE', $TEXT['SIGNUP']);
+define('MENU_TITLE', $TEXT['SIGNUP']);
+define('MODULE', '');
+define('VISIBILITY', 'public');
+
+// Set the page content include file
+    define('PAGE_CONTENT', WB_PATH.'/account/signup_form.php');
+
+// Set auto authentication to false
+$auto_auth = false;
+
+// Include the index (wrapper) file
+require(WB_PATH.'/index.php');

Property changes on: trunk/account/signup.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/signup2.php
===================================================================
--- trunk/account/signup2.php	(nonexistent)
+++ trunk/account/signup2.php	(revision 2)
@@ -0,0 +1,152 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) {
+    if( !class_exists('wb', false) ){ require(WB_PATH."/framework/class.wb.php"); }
+    $wb = new frontend();
+}
+
+/*
+if (!$wb->checkFTAN())
+{
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, '.'.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $error[] =  $sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS']."\n";
+    return;
+}
+*/
+
+// Get details entered
+$groups_id = FRONTEND_SIGNUP;
+$active = 1;
+$username = strtolower(strip_tags($wb->get_post('username')));
+$display_name = strip_tags($wb->get_post('display_name'));
+$email = $wb->get_post('email');
+/*
+// Check values
+if($groups_id == "") {
+    $wb->print_error($MESSAGE['USERS_NO_GROUP'], $js_back, false);
+}
+*/
+
+// Check if username already exists
+$sql = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+     . 'WHERE `username` = \''.$database->escapeString($username).'\'';
+if ($database->get_one($sql)) {
+    $error[] = $MESSAGE['USERS_USERNAME_TAKEN']."\n";
+}
+if(!preg_match('/^[a-z]{1}[a-z0-9_-]{2,}$/i', $username)) {
+    $error[] =  $MESSAGE['USERS_NAME_INVALID_CHARS']."\n";
+}
+$sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` '
+     . 'WHERE  `display_name` LIKE \''.$database->escapeString(addcslashes($display_name, '_%')).'\'';
+if ($database->get_one($sql) > 0) {
+    $error[] = $MESSAGE['USERS_DISPLAYNAME_TAKEN'].'';
+}
+if($email != "") {
+    if($wb->validate_email($email) == false) {
+        $error[] = $MESSAGE['USERS_INVALID_EMAIL']."\n";
+    }
+} else {
+    $error[] = $MESSAGE['SIGNUP_NO_EMAIL']."\n";
+}
+
+$search = array('{SERVER_EMAIL}');
+$replace = array( SERVER_EMAIL);
+// Captcha
+if(ENABLED_CAPTCHA) {
+    $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = str_replace($search,$replace,$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA']);
+    if(isset($_POST['captcha']) AND $_POST['captcha'] != ''){
+        // Check for a mismatch
+        if(!isset($_POST['captcha']) OR !isset($_SESSION['captcha']) OR $_POST['captcha'] != $_SESSION['captcha']) {
+            $error[] = $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA']."\n";
+        }
+    } else {
+        $error[] = $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA']."\n";
+    }
+}
+if(isset($_SESSION['captcha'])) { unset($_SESSION['captcha']); }
+
+// Generate a random password then update the database with it
+$new_pass = '';
+$salt = "abchefghjkmnpqrstuvwxyz0123456789";
+srand((double)microtime()*1000000);
+$i = 0;
+while ($i <= 7) {
+    $num = rand() % 33;
+    $tmp = substr($salt, $num, 1);
+    $new_pass = $new_pass . $tmp;
+    $i++;
+}
+$md5_password = md5($new_pass);
+// Check if the email already exists
+$sql = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+     . 'WHERE `email` = \''.$database->escapeString($email).'\'';
+if ($database->get_one($sql)) {
+    if(isset($MESSAGE['USERS_EMAIL_TAKEN'])) {
+        $error[] = $MESSAGE['USERS_EMAIL_TAKEN']."\n";
+    } else {
+        $error[] = $MESSAGE['USERS_INVALID_EMAIL']."\n";
+    }
+}
+
+if(sizeof($error)==0){
+    // MD5 supplied password
+    $md5_password = md5($new_pass);
+    // Insert the user into the database
+    $sql  = 'INSERT INTO `'.TABLE_PREFIX.'users` SET '
+          . '`group_id` = '.$database->escapeString($groups_id).', '
+          . '`groups_id` = \''.$database->escapeString($groups_id).'\', '
+          . '`active` = '.$database->escapeString($active).', '
+          . '`username` = \''.$database->escapeString($username).'\', '
+          . '`password` = \''.$database->escapeString($md5_password).'\', '
+          . '`display_name` = \''.$database->escapeString($display_name).'\', '
+          . '`home_folder` = \'\', '
+          . '`email` = \''.$database->escapeString($email).'\', '
+          . '`timezone` = \''.$database->escapeString(DEFAULT_TIMEZONE).'\', '
+          . '`language` = \''.$database->escapeString(DEFAULT_LANGUAGE).'\''
+          .'';
+    $database->query($sql);
+    if($database->is_error()) {
+        // Error updating database
+        $message = $database->get_error();
+    } else {
+        // Setup email to send
+        $mail_to = $email;
+        $mail_subject = $MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'];
+
+        // Replace placeholders from language variable with values
+        $search = array('{LOGIN_DISPLAY_NAME}', '{LOGIN_WEBSITE_TITLE}', '{LOGIN_NAME}', '{LOGIN_PASSWORD}');
+        $replace = array($display_name, WEBSITE_TITLE, $username, $new_pass);
+        $mail_message = str_replace($search, $replace, $MESSAGE['SIGNUP2_BODY_LOGIN_INFO']);
+
+        // Try sending the email
+        if($wb->mail(SERVER_EMAIL,$mail_to,$mail_subject,$mail_message)) {
+            $display_form = false;
+            $success[] = $MESSAGE['FORGOT_PASS_PASSWORD_RESET'];
+        } else {
+            $sql = 'DELETE FROM `'.TABLE_PREFIX.'users` '
+                 . 'WHERE `username` = \''.$database->escapeString($username).'\'';
+            $database->query($sql);
+            $error[] = $MESSAGE['FORGOT_PASS_CANNOT_EMAIL']."\n";
+        }
+    }
+}

Property changes on: trunk/account/signup2.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/signup_form.php
===================================================================
--- trunk/account/signup_form.php	(nonexistent)
+++ trunk/account/signup_form.php	(revision 2)
@@ -0,0 +1,135 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         account
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+$sCallingScript = WB_URL;
+$redirect_url = ((isset($_SESSION['HTTP_REFERER']) && $_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : $sCallingScript );
+$redirect_url = ( isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+require_once(WB_PATH.'/include/captcha/captcha.php');
+/**
+ * echo '<style type="text/css">';
+ * include(WB_PATH .'/account/frontend.css');
+ * echo "\n</style>\n";
+ */
+
+$error = array();
+$success = array();
+
+$sAddonName = basename(__DIR__);
+if(file_exists(WB_PATH .'/'.$sAddonName.'/languages/EN.php')) {require(WB_PATH .'/'.$sAddonName.'/languages/EN.php');}
+if(file_exists(WB_PATH .'/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {require(WB_PATH .'/'.$sAddonName.'/languages/'.LANGUAGE .'.php');}
+
+if(isset($_POST['action']) && $_POST['action']=='send') {
+    require(dirname(__FILE__).'/signup2.php');
+}
+if(sizeof($success)>0){
+//$_SESSION['display_form'] = false;
+?>
+<p class="mod_preferences_success">
+<?php
+   foreach($success AS $value){ ?>
+    <?php echo nl2br($value); ?>
+<?php } ?>
+</p>
+<?php }
+
+if($_SESSION['display_form']){
+    if(sizeof($error)>0){
+?>
+    <p class="mod_preferences_error">
+<?php
+        echo implode('<br />', $error);
+?>
+    </p>
+<?php }?>
+
+    <div style="margin: 1em auto;">
+        <button type="button" value="cancel" onclick="window.location = '<?php echo $redirect_url; ?>';"><?php print $TEXT['CANCEL'] ?></button>
+    </div>
+<?php if(!isset($display_form) || $display_form != false) { ?>
+    <h1>&nbsp;<?php echo $TEXT['SIGNUP']; ?></h1>
+    <form name="user" action="#" method="post" class="account">
+        <?php echo $wb->getFTAN(); ?>
+        <input type="hidden" name="action" value="send" />
+        <input type="hidden" name="redirect" value="<?php echo $redirect_url; ?>" />
+        <?php if(ENABLED_ASP) { // add some honeypot-fields
+        ?>
+        <div style="display:none;">
+        <input type="hidden" name="submitted_when" value="<?php $t=time(); echo $t; $_SESSION['submitted_when']=$t; ?>" />
+        <p class="nixhier">
+        email-address:
+        <label for="email-address">Leave this field email-address blank:</label>
+        <input id="email-address" name="email-address" size="60" value="" /><br />
+        username (id):
+        <label for="name">Leave this field name blank:</label>
+        <input id="name" name="name" size="60" value="" /><br />
+        Full Name:
+        <label for="full_name">Leave this field full_name blank:</label>
+        <input id="full_name" name="full_name" size="60" value="" /><br />
+        </p>
+        <?php } ?>
+        </div>
+        <table class="account">
+            <tbody>
+                <tr>
+                    <td style="width: 180px;"><?php echo $TEXT['USERNAME']; ?>:</td>
+                    <td class="value_input">
+                        <input type="text" name="username" maxlength="30" style="width:300px;"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td><?php echo $TEXT['DISPLAY_NAME']; ?>:</td>
+                    <td class="value_input">
+                        <input type="text" name="display_name" maxlength="255" style="width:300px;" />
+                        <label> (<?php echo $TEXT['FULL_NAME']; ?>)</label>
+                    </td>
+                </tr>
+                <tr>
+                    <td><?php echo $TEXT['EMAIL']; ?>:</td>
+                    <td class="value_input">
+                        <input type="text" name="email" maxlength="255" style="width:300px;"/>
+                    </td>
+                </tr>
+<?php
+// Captcha
+    if(ENABLED_CAPTCHA) {
+?>
+                <tr>
+                    <td class="field_title"><?php echo $TEXT['VERIFICATION']; ?>:</td>
+                    <td><?php call_captcha(); ?></td>
+                </tr>
+<?php
+    }
+?>
+                <tr>
+                    <td>&nbsp;</td>
+                    <td>
+                        <input type="submit" name="submit" value="<?php echo $TEXT['SIGNUP']; ?>" />
+                        <input type="reset" name="reset" value="<?php echo $TEXT['RESET']; ?>" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </form>
+    <br />
+    &nbsp;
+<?php
+    }
+}

Property changes on: trunk/account/signup_form.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/account/template.htt
===================================================================
--- trunk/account/template.htt	(nonexistent)
+++ trunk/account/template.htt	(revision 2)
@@ -0,0 +1,138 @@
+<!-- begin settings_modify.html -->
+<!-- BEGIN main_block -->
+<!-- BEGIN success_block -->
+<p class="mod_preferences_success">
+    {SUCCESS_VALUE}
+</p>
+<!-- END success_block -->
+<!-- BEGIN error_block -->
+<p class="mod_preferences_error">
+    {ERROR_VALUE}
+</p>
+<!-- END error_block -->
+<div style="margin: 1em auto;">
+    <button type="button" value="cancel" onClick="javascript: window.location='{HTTP_REFERER}';">{TEXT_CANCEL}</button>
+</div>
+<br>
+<form name="details" action="" method="post" class="account" >
+    <h3>{HEADING_MY_SETTINGS}</h3>
+    <table >
+        <tr>
+            <td width="160">{TEXT_DISPLAY_NAME}:</td>
+            <td>
+                <input type="text" name="display_name" value="{DISPLAY_NAME}" style="width: 98%;"  />
+            </td>
+        </tr>
+        <tr>
+            <td>{TEXT_LANGUAGE}:</td>
+            <td>
+                <select name="language" id="language">
+                    <!-- BEGIN language_list_block -->
+                        <option value="{CODE}"{SELECTED} style="background: url({FLAG}.png) no-repeat center left; padding-left: 20px;">{NAME} ({CODE})</option>
+                    <!-- END language_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td>{TEXT_TIMEZONE}:</td>
+            <td>
+                <select name="timezone" style="width: 98%;">
+                    <option value="-20">{MOD_PREFERENCE_PLEASE_SELECT}</option>
+<!-- BEGIN timezone_list_block -->
+                    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+<!-- END timezone_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td>{TEXT_DATE_FORMAT}:</td>
+            <td>
+                <select name="date_format" style="width: 98%;">
+                    <option value="">{MOD_PREFERENCE_PLEASE_SELECT}</option>
+<!-- BEGIN date_format_list_block -->
+                    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+<!-- END date_format_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td>{TEXT_TIME_FORMAT}:</td>
+            <td>
+                <select name="time_format" style="width: 98%;">
+                    <option value="">{MOD_PREFERENCE_PLEASE_SELECT}</option>
+<!-- BEGIN time_format_list_block -->
+                    <option value="{VALUE}" {SELECTED}>{NAME}</option>
+<!-- END time_format_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td>&nbsp;</td>
+            <td>
+                <button type="reset" name="reset" value="reset">{TEXT_RESET}</button>
+                <button type="submit" name="action" value="details">{MOD_PREFERENCE_SAVE_SETTINGS}</button>
+            </td>
+        </tr>
+    </table>
+</form>
+<br>
+<form name="email" action="" method="post" style="width: 100%;">
+    <h3>{HEADING_MY_EMAIL}</h3>
+    <table>
+        <tr>
+            <td>{TEXT_EMAIL}:</td>
+            <td>
+                <input type="text" name="email" value="{EMAIL}" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td width="160">{TEXT_CURRENT_PASSWORD}:</td>
+            <td>
+                <input type="password" name="current_password" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td>&nbsp;</td>
+            <td>
+                <button type="reset" name="reset" value="reset">{TEXT_RESET}</button>
+                <button type="submit" name="action" value="email">{MOD_PREFERENCE_SAVE_EMAIL}</button>
+            </td>
+        </tr>
+    </table>
+</form>
+<br>
+<form name="password" action="" method="post" style="width: 100%;">
+    <h3>{HEADING_MY_PASSWORD}</h3>
+    <table>
+        <tr>
+            <td width="160">{TEXT_CURRENT_PASSWORD}:</td>
+            <td>
+                <input type="password" name="current_password" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td width="160">{TEXT_NEW_PASSWORD}:</td>
+            <td>
+                <input type="password" name="new_password" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td width="160">{TEXT_RETYPE_NEW_PASSWORD}:</td>
+            <td>
+                <input type="password" name="new_password2" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td>&nbsp;</td>
+            <td>
+                <button type="reset" name="reset" value="reset">{TEXT_RESET}</button>
+                <button type="submit" name="action" value="password">{MOD_PREFERENCE_SAVE_PASSWORD}</button>
+            </td>
+        </tr>
+    </table>
+</form>
+<div style="margin: 1em auto;">
+    <button type="button" value="cancel" onClick="javascript: window.location = '{HTTP_REFERER}';">{TEXT_CANCEL}</button>
+</div>
+<!-- END main_block -->
+<!-- end settings_modify.html -->
Index: trunk/admin/access/index.php
===================================================================
--- trunk/admin/access/index.php	(nonexistent)
+++ trunk/admin/access/index.php	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         access
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @author          Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Access', 'access');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('access.htt')));
+// $template->debug = true;
+$template->set_file('page', 'access.htt');
+
+$template->set_block('page', 'main_block', 'main');
+
+// Insert values into the template object
+$template->set_var(array(
+        'ADMIN_URL' => ADMIN_URL,
+        'THEME_URL' => THEME_URL,
+        'WB_URL' => WB_URL
+    )
+);
+
+/**
+ *    Insert permission values into the template object
+ *    Deprecated - as we are using blocks.
+ */
+$display_none = 'style="display: none;"';
+if($admin->get_permission('users') != true) { $template->set_var('DISPLAY_USERS', $display_none);}
+if($admin->get_permission('groups') != true){ $template->set_var('DISPLAY_GROUPS', $display_none);}
+
+$template->set_block('main_block', 'users_block', 'user');
+// Insert section names and descriptions
+$template->set_var(array(
+        'USERS' => $MENU['USERS'],
+        'USERS_OVERVIEW' => $OVERVIEW['USERS'],
+        'ACCESS' => $MENU['ACCESS'],
+    )
+);
+if ( $admin->get_permission('users') == true ){
+$template->parse('main_block', "users_block", true);
+} else {
+    $template->set_block('users', '');
+}
+
+$template->set_block('main_block', 'groups_block', 'group');
+$template->set_var(array(
+        'GROUPS' => $MENU['GROUPS'],
+        'ACCESS' => $MENU['ACCESS'],
+        'GROUPS_OVERVIEW' => $OVERVIEW['GROUPS'],
+    )
+);
+if ( $admin->get_permission('groups') == true ){
+$template->parse('main_block', "groups_block", true);
+} else {
+    $template->set_block('groups', '');
+}
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/access/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/addons/index.php
===================================================================
--- trunk/admin/addons/index.php	(nonexistent)
+++ trunk/admin/addons/index.php	(revision 2)
@@ -0,0 +1,97 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         addons
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @author          Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Addons', 'addons');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('addons.htt')));
+$template->set_file('page', 'addons.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Insert values into the template object
+$template->set_var(array(
+        'ADMIN_URL' => ADMIN_URL,
+        'THEME_URL' => THEME_URL,
+        'WB_URL' => WB_URL
+    )
+);
+
+/**
+ *    Setting up the blocks
+ */
+$template->set_block('main_block', "modules_block", "modules");
+$template->set_block('main_block', "templates_block", "templates");
+$template->set_block('main_block', "languages_block", "languages");
+$template->set_block('main_block', "reload_block", "reload");
+
+/**
+ *    Insert permission values into the template object
+ *    Obsolete as we are using blocks ... see "parsing the blocks" section
+ */
+$display_none = 'style="display: none;"';
+if($admin->get_permission('modules') != true)   { $template->set_var('DISPLAY_MODULES', $display_none); }
+if($admin->get_permission('templates') != true) { $template->set_var('DISPLAY_TEMPLATES', $display_none); }
+if($admin->get_permission('languages') != true) { $template->set_var('DISPLAY_LANGUAGES', $display_none); }
+if($admin->get_permission('admintools') != true){ $template->set_var('DISPLAY_ADVANCED', $display_none); }
+
+if(!isset($_GET['advanced']) || $admin->get_permission('admintools') != true)
+    $template->set_var('DISPLAY_RELOAD', $display_none);
+
+/**
+ *    Insert section names and descriptions
+ */
+$template->set_var(array(
+    'ADDONS_OVERVIEW' => $MENU['ADDONS'],
+    'MODULES' => $MENU['MODULES'],
+    'TEMPLATES' => $MENU['TEMPLATES'],
+    'LANGUAGES' => $MENU['LANGUAGES'],
+    'MODULES_OVERVIEW' => $OVERVIEW['MODULES'],
+    'TEMPLATES_OVERVIEW' => $OVERVIEW['TEMPLATES'],
+    'LANGUAGES_OVERVIEW' => $OVERVIEW['LANGUAGES'],
+    'TXT_ADMIN_SETTINGS' => $TEXT['ADMIN'] . ' ' . $TEXT['SETTINGS'],
+    'MESSAGE_RELOAD_ADDONS' => $MESSAGE['ADDON']['RELOAD'],
+    'TEXT_RELOAD' => $TEXT['RELOAD'],
+    'RELOAD_URL' => ADMIN_URL . '/addons/reload.php',
+    'URL_ADVANCED' => $admin->get_permission('admintools')? ADMIN_URL . '/addons/index.php?advanced' : '',
+    'ADVANCED_URL' => $admin->get_permission('admintools') ? ADMIN_URL . '/addons/index.php' : '',
+    'TEXT_ADVANCED' => $TEXT['ADVANCED'],
+    'FTAN'            => $admin->getFTAN()
+    )
+);
+
+/**
+ *    Parsing the blocks ...
+ */
+if ( $admin->get_permission('modules') == true) $template->parse('main_block', "modules_block", true);
+if ( $admin->get_permission('templates') == true) $template->parse('main_block', "templates_block", true);
+if ( $admin->get_permission('languages') == true) $template->parse('main_block', "languages_block", true);
+if ( isset($_GET['advanced']) AND $admin->get_permission('admintools') == true) $template->parse('main_block', "reload_block", true);
+
+/**
+ *    Parse template object
+ */
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+/**
+ *    Print admin footer
+ */
+$admin->print_footer();

Property changes on: trunk/admin/addons/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/addons/reload.php
===================================================================
--- trunk/admin/addons/reload.php	(nonexistent)
+++ trunk/admin/addons/reload.php	(revision 2)
@@ -0,0 +1,141 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         addons
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/**
+ * check if there is anything to do
+ */
+$post_check = array('reload_modules', 'reload_templates', 'reload_languages');
+foreach ($post_check as $index => $key) {
+    if (!isset($_POST[$key])) unset($post_check[$index]);
+}
+if (count($post_check) == 0) die(header('Location: index.php?advanced'));
+
+/**
+ * check if user has permissions to access this file
+ */
+// include WB configuration file and WB admin class
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// check user permissions for admintools (redirect users with wrong permissions)
+$admin = new admin('Admintools', 'admintools', false, false);
+
+if ($admin->get_permission('admintools') == false) die(header('Location: ../../index.php'));
+
+// check if the referer URL if available
+$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] :
+    (isset($HTTP_SERVER_VARS['HTTP_REFERER']) ? $HTTP_SERVER_VARS['HTTP_REFERER'] : '');
+$referer = '';
+// if referer is set, check if script was invoked from "admin/modules/index.php"
+$required_url = ADMIN_URL . '/addons/index.php';
+if ($referer != '' && (!(strpos($referer, $required_url) !== false || strpos($referer, $required_url) !== false)))
+    die(header('Location: ../../index.php'));
+
+// include WB functions file
+require_once(WB_PATH . '/framework/functions.php');
+
+// load WB language file
+require_once(WB_PATH . '/languages/' . LANGUAGE .'.php');
+
+// create Admin object with admin header
+$admin = new admin('Addons', '', false, false);
+$js_back = ADMIN_URL . '/addons/index.php?advanced';
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL);
+}
+
+/**
+ * delete no existing addons in table
+ */
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+      . 'ORDER BY `type`, `directory` ';
+if ( $oAddons = $database->query( $sql ) ) {
+    while ( $aAddon = $oAddons->fetchRow( MYSQLI_ASSOC ) ) {
+        $delAddon = 'DELETE  FROM `'.TABLE_PREFIX.'addons` WHERE `addon_id`='.(int)$aAddon['addon_id'];
+        $sAddonFile = WB_PATH.'/'.$aAddon['type'].'s/'.$aAddon['directory'];
+        switch ($aAddon['type']):
+            case 'language':
+                if ( !file_exists( $sAddonFile.'.php' ) )
+                { 
+                    $oDelResult = $database->query( $delAddon );
+                }
+                break;
+            default:
+                if ( !file_exists( $sAddonFile ) )
+                { 
+                    $oDelResult = $database->query( $delAddon );
+//                    echo $sAddonFile.'<br />';
+                }
+            break;
+        endswitch;
+    }
+}
+/**
+ * 
+ * Reload all specified Addons
+ */
+$msg = array();
+$table = TABLE_PREFIX . 'addons';
+
+foreach ($post_check as $key) {
+    switch ($key) {
+        case 'reload_modules':
+            $aAddonList = glob(WB_PATH.'/modules/*', GLOB_ONLYDIR );
+            foreach( $aAddonList as $sAddonFile ) {
+                if (is_readable( $sAddonFile )) {
+                    load_module( $sAddonFile );
+                }
+            }
+            // add success message
+            $msg[] = $MESSAGE['ADDON_MODULES_RELOADED'];
+            unset($aAddonList);
+            break;
+
+        case 'reload_templates':
+            $aAddonList = glob(WB_PATH.'/templates/*', GLOB_ONLYDIR );
+            foreach( $aAddonList as $sAddonFile ) {
+                if (is_readable( $sAddonFile )) {
+                    load_template( $sAddonFile );
+                }
+            }
+            // add success message
+            $msg[] = $MESSAGE['ADDON_TEMPLATES_RELOADED'];
+            unset($aAddonList);
+            break;
+
+        case 'reload_languages':
+            $aAddonList = glob(WB_PATH.'/languages/*.php' );
+            foreach( $aAddonList as $sAddonFile ) {
+                if (is_readable( $sAddonFile )) {
+                    load_language( $sAddonFile );
+                }
+            }
+            // add success message
+            $msg[] = $MESSAGE['ADDON_LANGUAGES_RELOADED'];
+            unset($aAddonList);
+            break;
+
+    }
+}
+
+// output success message
+$admin->print_header();
+$admin->print_success(implode($msg, '<br />'), $js_back);
+$admin->print_footer();

Property changes on: trunk/admin/addons/reload.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/admintools/index.php
===================================================================
--- trunk/admin/admintools/index.php	(nonexistent)
+++ trunk/admin/admintools/index.php	(revision 2)
@@ -0,0 +1,72 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @author          Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('admintools', 'admintools');
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('admintools.htt')));
+// $template->debug = true;
+$template->set_file('page', 'admintools.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Insert required template variables
+$template->set_var('ADMIN_URL', ADMIN_URL);
+$template->set_var('THEME_URL', THEME_URL);
+$template->set_var('HEADING_ADMINISTRATION_TOOLS', $HEADING['ADMINISTRATION_TOOLS']);
+
+// Insert tools into tool list
+$template->set_block('main_block', 'tool_list_block', 'tool_list');
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'addons` WHERE `type` = \'module\' AND `function` = \'tool\' order by `name`';
+$results = $database->query($sql);
+
+if($results->numRows() > 0) {
+    while($tool = $results->fetchRow()) {
+      if( $admin->get_permission($tool['directory'], 'module' ) ) {
+        $template->set_var('TOOL_NAME', $tool['name']);
+        $template->set_var('TOOL_DIR', $tool['directory']);
+        // check if a module description exists for the displayed backend language
+        $tool_description = false;
+        if(function_exists('file_get_contents') && file_exists(WB_PATH.'/modules/'.$tool['directory'].'/languages/'.LANGUAGE .'.php')) {
+            // read contents of the module language file into string
+            $data = @file_get_contents(WB_PATH .'/modules/' .$tool['directory'] .'/languages/' .LANGUAGE .'.php');
+            $tool_description = get_variable_content('module_description', $data, true, false);
+        }
+        if (is_readable(WB_PATH.'/modules/' .$tool['directory'].'/tool_icon.png'))
+        {
+            $template->set_var('TOOL_ICON', WB_URL.'/modules/' .$tool['directory'].'/tool_icon.png');
+        } else {
+            $template->set_var('TOOL_ICON', THEME_URL.'/icons/admintools.png');
+        }
+        $template->set_var('TOOL_DESCRIPTION', ($tool_description === False)? $tool['description'] :$tool_description);
+        $template->parse('tool_list', 'tool_list_block', true);
+      }
+    }
+} else {
+    $template->set_var('TOOL_LIST', $TEXT['NONE_FOUND']);
+}
+
+// Parse template objects output
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+$admin->print_footer();

Property changes on: trunk/admin/admintools/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/admintools/tool.php
===================================================================
--- trunk/admin/admintools/tool.php	(nonexistent)
+++ trunk/admin/admintools/tool.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @author          Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+require_once(WB_PATH.'/framework/functions.php');
+
+    $toolDir = (isset($_GET['tool']) && (trim($_GET['tool']) != '') ? trim($_GET['tool']) : '');
+    $doSave = (isset($_POST['save_settings']) || (isset($_POST['action']) && strtolower($_POST['action']) == 'save'));
+// test for valid tool name
+
+    if(preg_match('/^[a-z][a-z_\-0-9]{2,}$/i', $toolDir)) {
+    // Check if tool is installed
+        $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '.
+               'WHERE `type`=\'module\' AND `function`=\'tool\' '.
+                      'AND `directory`=\''.$database->escapeString($toolDir).'\'';
+        if(($toolName = $database->get_one($sql))) {
+        // create admin-object and print header if FTAN is NOT supported AND function 'save' is requested
+            $admin_header = !(is_file(WB_PATH.'/modules/'.$toolDir.'/FTAN_SUPPORTED') && $doSave);
+            $admin = new admin('admintools', 'admintools', $admin_header );
+            if(!$doSave) {
+            // show title if not function 'save' is requested
+                print '<h4><a href="'.ADMIN_URL.'/admintools/index.php" '.
+                      'title="'.$HEADING['ADMINISTRATION_TOOLS'].'">'.
+                      $HEADING['ADMINISTRATION_TOOLS'].'</a>'.
+                      '&nbsp;&raquo;&nbsp;'.$toolName.'</h4>'."\n";
+            }
+            // include modules tool.php
+            require(WB_PATH.'/modules/'.$toolDir.'/tool.php');
+            $admin->print_footer();
+        }else {
+        // no installed module found, jump to index.php of admintools
+            header('location: '.ADMIN_URL.'/admintools/index.php');
+            exit(0);
+        }
+    }else {
+    // invalid module name requested, jump to index.php of admintools
+        header('location: '.ADMIN_URL.'/admintools/index.php');
+        exit(0);
+    }

Property changes on: trunk/admin/admintools/tool.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/groups/add.php
===================================================================
--- trunk/admin/groups/add.php	(nonexistent)
+++ trunk/admin/groups/add.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         groups
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Access', 'groups_add', false);
+$requestMethod = '_'.($GLOBALS['_SERVER']['REQUEST_METHOD']);
+$aRequestVars  = (@(${$requestMethod}) ? : null);
+
+$bAdvanced       = intval(@$aRequestVars['advanced'] ?: 0);
+$bAdvancedSave   = intval(@$aRequestVars['advanced_extended'] ?: 0);
+$bResetSystem    = intval(@$aRequestVars['reset_system'] ?: 0);
+$bResetModules   = intval(@$aRequestVars['reset_modules'] ?: 0);
+$bResetTemplates = intval(@$aRequestVars['reset_templates'] ?: 0);
+// Create a javascript back link
+$js_back = ADMIN_URL.'/groups/index.php';
+$action = 'save';
+$action = (isset($_POST['cancel']) ? 'cancel' : $action );
+    switch ($action):
+        case 'cancel':
+            header('HTTP/1.1 301 Moved Permanently');
+            header('Location: '.$js_back);
+            exit;
+        default:
+
+        break;
+    endswitch;
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL);
+}
+// After check print the header
+$admin->print_header();
+
+// Gather details entered
+$group_name = preg_replace('/[^a-z0-9_-]/i', "", $admin->get_post('group_name'));
+$group_name = $admin->StripCodeFromText($group_name);
+
+// Check values
+if($group_name == "") {
+    $admin->print_error($MESSAGE['GROUPS_GROUP_NAME_BLANK'], $js_back);
+}
+$sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'groups` '
+     . 'WHERE `name`=\''.$group_name.'\'';
+if ($database->get_one($sql)) {
+    $admin->print_error($MESSAGE['GROUPS_GROUP_NAME_EXISTS'], $js_back);
+}
+$system_permissions = array();
+// Get system and module permissions
+require(ADMIN_PATH.'/groups/get_permissions.php');
+
+// Update the database
+$sql = 'INSERT INTO `'.TABLE_PREFIX.'groups` SET '
+     .     '`name`=\''.$database->escapeString($group_name).'\', '
+     .     '`system_permissions`=\''.$database->escapeString($system_permissions).'\', '
+     .     '`module_permissions`=\''.$database->escapeString($module_permissions).'\', '
+     .     '`template_permissions`=\''.$database->escapeString($template_permissions).'\'';
+
+if (($database->query($sql))) {
+    $group_id = $admin->getIDKEY($database->getLastInsertId());
+    $modifyUrl = ADMIN_URL.'/groups/groups.php?modify=&group_id='.$group_id.'&advanced='.!$bAdvanced;
+    $admin->print_success($MESSAGE['GROUPS_ADDED'], $modifyUrl);
+} else {
+    $admin->print_error($database->get_error(), $js_back);
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/groups/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/groups/get_permissions.php
===================================================================
--- trunk/admin/groups/get_permissions.php	(nonexistent)
+++ trunk/admin/groups/get_permissions.php	(revision 2)
@@ -0,0 +1,110 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         groups
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/*---------------------------------------------------------------------------------------------------------------*/
+if(defined('WB_PATH') == false)
+{
+    die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly');
+} else {
+/*---------------------------------------------------------------------------------------------------------------*/
+// merge extended system_permission
+    $system_permissions = array_flip($system_permissions);
+// Get system permissions
+    $system_permissions = (@$bResetSystem?array():$system_permissions);
+    function getSystemDefaultPermission(){
+        global $database;
+        $sqlAdmin = 'SELECT `system_permissions` FROM `'.TABLE_PREFIX.'groups` '
+                  . 'WHERE `group_id`=\'1\' ';
+        $sPermissions = $database->get_one($sqlAdmin);
+        return (@$database->get_error()?:$sPermissions);
+    }
+/*---------------------------------------------------------------------------------------------------------------*/
+    function getSystemFromRequest($aRequestVars=null)
+    {
+        global $bResetSystem;
+        if ($bResetSystem){return null;}
+        $aPermissions = array_flip(explode(',', getSystemDefaultPermission()));
+        // define Lambda-Callback for sanitize POST arguments   secunia 2010-92-2
+        $cbSanitize = (function($sValue) { $sValue = preg_replace('/[^a-z0-9_-]/i', '', $sValue); return $sValue;});
+        $aPermissions = (is_array($aPermissions) ? $aPermissions : array());
+        $aPermissions = array_map($cbSanitize, $aPermissions);
+        $aPermissions = array_intersect_key($aRequestVars, $aPermissions);
+        return $aPermissions;
+    }
+/*---------------------------------------------------------------------------------------------------------------*/
+    function getSystemPermissions($aRequestVars=null)
+    {
+        $aPermissions = array();
+        if (!$aRequestVars){return $aPermissions;}
+        $aValidType = $aValidView = $aValidAddons = $aValidAccess = $aValidSettings = array();
+        $aTmpPermissions  = getSystemFromRequest($aRequestVars);
+        if (($aTmpPermissions)){
+            $aValidType     = preg_replace('/^(.*?)_.*$/', '\1', array_keys($aTmpPermissions));
+            $aValidView     = preg_replace('/^(.*)/', '\1_view', $aValidType);
+            $aValidAddons   = preg_replace('/^(modules.*|templates.*|languages.*)$/', 'addons', $aValidView);
+            $aValidAccess   = preg_replace('/^(groups.*|users.*)$/', 'access', $aValidView);
+            $aValidSettings = preg_replace('/^(settings.*)$/', 'settings_basic', $aValidView);
+            $aPermissions   = array_merge(
+                              $aTmpPermissions,
+                              array_flip($aValidType),
+                              array_flip($aValidView),
+                              array_flip($aValidAccess),
+                              array_flip($aValidAddons),
+                              array_flip($aValidSettings)
+                              );
+            $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+            ksort ($aPermissions, $iSortFlags);
+        }
+        return $aPermissions;
+    }
+    $aRequestSystemPermissions = getSystemPermissions($aRequestVars);
+/* WB283 SP4 Fixes ***************************************************/
+    // clean up system_permission
+    $system_permissions = ($bAdvancedSave ? array_intersect_key($aRequestSystemPermissions, $system_permissions):$system_permissions);
+    $aSystemPermissions = array_merge($aRequestSystemPermissions, $system_permissions);
+    $aSystemPermissions = (@$bResetSystem?array():$aSystemPermissions);
+    $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+    ksort ($aSystemPermissions, $iSortFlags);
+    // Implode system permissions
+    $aAllowedSystemPermissions = array();
+/*------------------------------------------------------------------------------------------------------------*/
+    foreach ($aSystemPermissions as $sName => $sValue) {
+        $aAllowedSystemPermissions[] = $sName;
+    }
+    $system_permissions = implode(',', $aAllowedSystemPermissions);
+/*------------------------------------------------------------------------------------------------------------*/
+    function getPermissionsFromPost($sType, $bReset=false)
+    {
+        // define Lambda-Callback for sanitize POST arguments   secunia 2010-92-2
+        $cbSanitize = function($sValue) { $sValue = preg_replace('/[^a-z0-9_-]/i', '', $sValue); return $sValue; };
+        $aPermissions = $GLOBALS['admin']->get_post($sType.'_permissions');
+        $aPermissions = is_array($aPermissions) ? $aPermissions : array();
+        $aPermissions = array_map($cbSanitize, $aPermissions);
+        $sOldWorkingDir = getcwd();
+        chdir(WB_PATH.'/'.$sType.'s/');
+        $aAvailableItemsList = glob('*', GLOB_ONLYDIR|GLOB_NOSORT);
+        chdir($sOldWorkingDir);
+        $aPermissions = (@$bReset?array():$aPermissions);
+        $aUncheckedItems = array_diff($aAvailableItemsList, $aPermissions);
+        return implode(',', $aUncheckedItems);
+    }
+    // Get module permissions
+    $module_permissions   = getPermissionsFromPost('module', $bResetModules);
+    // Get template permissions
+    $template_permissions = getPermissionsFromPost('template', $bResetTemplates);
+
+}

Property changes on: trunk/admin/groups/get_permissions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/groups/groups.php
===================================================================
--- trunk/admin/groups/groups.php	(nonexistent)
+++ trunk/admin/groups/groups.php	(revision 2)
@@ -0,0 +1,292 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         groups
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/*---------------------------------------------------------------------------------------------------------*/
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Set parameter 'action' as alternative to javascript mechanism
+$js_back = ADMIN_URL.'/groups/index.php';
+$requestMethod = '_'.($GLOBALS['_SERVER']['REQUEST_METHOD']);
+$aRequestVars  = (@(${$requestMethod}) ? : null);
+
+$bAdvanced = intval (@$aRequestVars['advanced'] ?: 0);
+$bAdvancedSave   = intval(@$aRequestVars['advanced_exented'] ?: 0);
+$sDefaultModules   = array();
+$sDefaultTemplates = array();
+
+$action = 'cancel';
+// Set parameter 'action' as alternative to javascript mechanism
+$action = (isset($aRequestVars['action']) && ($aRequestVars['action'] ='modify') ? 'modify' : $action );
+$action = (isset($aRequestVars['modify']) ? 'modify' : $action );
+$action = (isset($aRequestVars['delete']) ? 'delete' : $action );
+/*-------------------------------------------------------------------------------------------------------*/
+switch ($action):
+    case 'cancel' :
+            header('HTTP/1.1 301 Moved Permanently');
+            header('Location: '.$js_back);
+            exit;
+    case 'modify' :
+            // Create new admin object
+            $admin = new admin('Access', 'groups_modify' );
+            // Check if group group_id is a valid number and doesnt equal 1
+            $group_id = intval($admin->checkIDKEY('group_id', false, $_SERVER['REQUEST_METHOD']));
+            if($group_id === false){
+                $admin->print_error($MESSAGE['USERS_NO_GROUP'], $js_back);
+            }
+            if( ($group_id < 2 ) )
+            {
+                // if($admin_header) { $admin->print_header(); }
+                $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'_'.$group_id.'_::');
+                $sDEBUG=(@DEBUG?$sInfo:'');
+                $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+            }
+            // Get existing values
+            $sql  = 'SELECT * FROM  `'.TABLE_PREFIX.'groups` '
+                  . 'WHERE `group_id` = '.$group_id;
+            $results = $database->query($sql);
+            $group = $results->fetchRow(MYSQLI_ASSOC);
+            // Setup template object, parse vars to it, then parse it
+            // Create new template object
+            $template = new Template(dirname($admin->correct_theme_source('groups_form.htt')), 'remove');
+            // $template->debug = true;
+            //$template->set_unknowns('keep');
+            $template->set_file('page', 'groups_form.htt');
+            $template->set_block('page', 'main_block', 'main');
+            $template->set_var(array(
+                                'ADMIN_URL' => ADMIN_URL,
+                                'WB_URL' => WB_URL,
+                                'THEME_URL' => THEME_URL,
+                                'ACTION_URL' => ADMIN_URL.'/groups/save.php',
+                                'SUBMIT_TITLE' => $TEXT['SAVE'],
+                                'GROUP_ID' => $admin->getIDKEY($group['group_id']),
+                                'GROUP_NAME' => $group['name'],
+                                'ADVANCED_LINK' => ADMIN_URL.'/groups/groups.php',
+                                'CANCEL_LINK' => ADMIN_URL.'/groups/index.php',
+                                'FTAN' => $admin->getFTAN(),
+                                ));
+            // Tell the browser whether or not to show advanced options
+            $template->set_block('main_block', 'groups_basic_block', 'groups_basic');
+            $template->set_block('main_block', 'groups_extended_block', 'groups_extended');
+            // Explode system permissions
+            if ($group['system_permissions']) {
+                $system_permissions = explode(',', $group['system_permissions']);
+                // Check system permissions boxes
+                foreach($system_permissions as $name) {
+//                    echo (@DEBUG?$name.'_checked':'');
+//                    $template->set_var($name.'_checked', '');
+                    $template->set_var($name.'_checked', ($admin->get_permission($name) ?' checked="checked"':''));
+                }
+          }
+          if($bAdvanced)
+          {
+              $template->set_var('DISPLAY_ADVANCED', '');
+              $template->set_var('DISPLAY_BASIC', 'display:none;');
+              $template->set_var('ADVANCED_VALUE', 0);
+              $template->set_var('ADVANCED_BUTTON', '&laquo; '.$TEXT['HIDE_ADVANCED']);
+              $template->parse('groups_extended', 'groups_extended_block', true);
+              $template->set_block('groups_basic', '', '');
+          } else {
+              $template->set_var('DISPLAY_ADVANCED', 'display:none;');
+              $template->set_var('DISPLAY_BASIC', '');
+              $template->set_var('ADVANCED_VALUE', 1);
+              $template->set_var('ADVANCED_BUTTON', $TEXT['SHOW_ADVANCED'].' &raquo;');
+              $template->parse('groups_basic', 'groups_basic_block', true);
+              $template->set_block('groups_extended', '');
+          }
+          // Explode module permissions
+          $module_permissions = explode(',', $group['module_permissions']);
+          $module_permissions = array_diff($module_permissions, $sDefaultModules);
+          // Explode template permissions
+          $template_permissions = explode(',', $group['template_permissions']);
+          $template_permissions = array_diff($template_permissions, $sDefaultTemplates);
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert values into module list
+    $template->set_block('main_block', 'module_list_block', 'module_list');
+    $template->set_block('main_block', 'module_group_block', 'module_group');
+    $aTmp = [];
+    $aCheckedList = array();
+    $GroupsFunction = '';
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'module\' '
+          .   'AND `function` IN (\'page\', \'tool\') '
+          . 'ORDER BY `function`, `name`';
+    if($result = $database->query($sql))
+    {
+        $i=0;
+        while($addon = $result->fetchRow(MYSQLI_ASSOC)) {
+            $template->set_var('OPTGROUP', '');
+            $template->set_block('module_function', '');
+            if (!is_readable(WB_PATH.'/modules/'.$addon['directory'])){
+                $aTmp[] = $addon['directory'];
+                continue;
+            }
+            if (strcasecmp($addon['function'], $GroupsFunction)!== 0){
+                $template->set_var('OPTGROUP', ucwords($addon['function']));
+                $template->parse('module_group', 'module_group_block', true);
+            }
+            $template->set_var('VALUE', $addon['directory']);
+            $template->set_var('NAME', (($addon['function'] == 'page') ? $addon['name'] :''.$addon['name']));
+            if (!is_numeric(array_search($addon['directory'], $module_permissions)) )
+            {
+                $template->set_var('CHECKED', ' checked="checked"');
+                $aCheckedList[$i]['directory'] = $addon['directory'];
+                $aCheckedList[$i]['name'] = $addon['name'];
+                ++$i;
+            } else {
+                $template->set_var('CHECKED', '');
+            }
+            $GroupsFunction = $addon['function'];
+            $template->parse('module_list', 'module_list_block', true);
+        }
+    }
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert values into template list
+    $template->set_block('main_block', 'template_list_block', 'template_list');
+    $template->set_block('main_block', 'template_group_block', 'template_group');
+    $aTmp = [];
+    $aCheckedList = array();
+    $GroupsFunction = '';
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'template\' '
+          . 'ORDER BY `function`, `name`';
+    if($result = $database->query($sql))
+    {
+        $i=0;
+        while( $addon = $result->fetchRow(MYSQLI_ASSOC)) {
+            $template->set_var('OPTGROUP', '');
+            $template->set_block('template_function', '');
+            if (!is_readable(WB_PATH.'/templates/'.$addon['directory'])){
+                $aTmp[] = $addon['directory'];
+                continue;
+            }
+            if (strcasecmp($addon['function'], $GroupsFunction)!== 0){
+                $template->set_var('OPTGROUP', ucwords($addon['function']));
+                $template->parse('template_group', 'template_group_block', true);
+            }
+            $template->set_var('VALUE', $addon['directory']);
+            $template->set_var('NAME', $addon['name']   );
+            if(!is_numeric(array_search($addon['directory'], $template_permissions)))
+            {
+                $template->set_var('CHECKED', ' checked="checked"');
+                $aCheckedList[$i]['directory'] = $addon['directory'];
+                $aCheckedList[$i]['name'] = $addon['name'];
+                ++$i;
+            } else {
+                $template->set_var('CHECKED', '');
+            }
+            $GroupsFunction = $addon['function'];
+            $template->parse('template_list', 'template_list_block', true);
+        }
+    }
+/*-------------------------------------------------------------------------------------------------------*/
+            // Insert language text and messages
+            $template->set_var(array(
+                        'TEXT_CANCEL' => $TEXT['CANCEL'],
+                        'TEXT_RESET' => $TEXT['RESET'],
+                        'TEXT_FILESYSTEM_PERMISSIONS' => $TEXT['FILESYSTEM_PERMISSIONS'],
+                        'TEXT_ACTIVE' => $TEXT['ACTIVE'],
+                        'TEXT_DISABLED' => $TEXT['DISABLED'],
+                        'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+                        'TEXT_USERNAME' => $TEXT['USERNAME'],
+                        'TEXT_PASSWORD' => $TEXT['PASSWORD'],
+                        'TEXT_RETYPE_PASSWORD' => $TEXT['RETYPE_PASSWORD'],
+                        'TEXT_DISPLAY_NAME' => $TEXT['DISPLAY_NAME'],
+                        'TEXT_EMAIL' => $TEXT['EMAIL'],
+                        'TEXT_GROUP' => $TEXT['GROUP'],
+                        'TEXT_GROUPS' => $MENU['GROUPS'],
+                        'TEXT_SYSTEM_PERMISSIONS' => $TEXT['SYSTEM_PERMISSIONS'],
+                        'TEXT_MODULE_PERMISSIONS' => $TEXT['MODULE_PERMISSIONS'],
+                        'TEXT_TEMPLATE_PERMISSIONS' => $TEXT['TEMPLATE_PERMISSIONS'],
+                        'TEXT_NAME' => $TEXT['NAME'],
+                        'SECTION_PAGES' => $MENU['PAGES'],
+                        'SECTION_MEDIA' => $MENU['MEDIA'],
+                        'SECTION_MODULES' => $MENU['MODULES'],
+                        'SECTION_TEMPLATES' => $MENU['TEMPLATES'],
+                        'SECTION_LANGUAGES' => $MENU['LANGUAGES'],
+                        'SECTION_SETTINGS' => $MENU['SETTINGS'],
+                        'SECTION_USERS' => $MENU['USERS'],
+                        'SECTION_GROUPS' => $MENU['GROUPS'],
+                        'SECTION_ADMINTOOLS' => $MENU['ADMINTOOLS'],
+                        'TEXT_VIEW' => $TEXT['VIEW'],
+                        'TEXT_ADD' => $TEXT['ADD'],
+                        'TEXT_LEVEL' => $TEXT['LEVEL'],
+                        'TEXT_MODIFY' => $TEXT['MODIFY'],
+                        'TEXT_DELETE' => $TEXT['DELETE'],
+                        'TEXT_MODIFY_CONTENT' => $TEXT['MODIFY_CONTENT'],
+                        'TEXT_MODIFY_SETTINGS' => $TEXT['MODIFY_SETTINGS'],
+                        'HEADING_MODIFY_INTRO_PAGE' => $TEXT['INTRO_PAGE'],
+                        'TEXT_CREATE_FOLDER' => $TEXT['CREATE_FOLDER'],
+                        'TEXT_RENAME' => $TEXT['RENAME'],
+                        'TEXT_UPLOAD_FILES' => $TEXT['UPLOAD_FILES'],
+                        'TEXT_BASIC' => $TEXT['BASIC'],
+                        'TEXT_ADVANCED' => $TEXT['ADVANCED'],
+                        'CHANGING_PASSWORD' => $MESSAGE['USERS_CHANGING_PASSWORD'],
+                        'DISPLAY_EXTRA' => 'display:block;',
+                        'HEADING_MODIFY_GROUP' => $HEADING['MODIFY_GROUP'],
+                        'DEBUG_MSG'=>(@$DebugOLutput?:'')
+                    ));
+/*-------------------------------------------------------------------------------------------------------*/
+            // Parse template object
+            $template->parse('main', 'main_block', false);
+            $template->pparse('output', 'page');
+            // Print admin footer
+            $admin->print_footer();
+            break;
+        case 'delete' :
+            // Create new admin object
+            $admin = new admin('Access', 'groups_delete', false);
+            $group_id = intval($admin->checkIDKEY('group_id', false, $_SERVER['REQUEST_METHOD']));
+            if($group_id === false){
+                $admin->print_header();
+                $admin->print_error($MESSAGE['USERS_NO_GROUP'], $js_back);  //  GENERIC_CANNOT_UNINSTALL
+            }
+            // Check if user id is a valid number and doesnt equal 1
+            if( ($group_id < 2 ) )
+            {
+                $admin->print_header();
+                $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'_idkey::');
+                $sDEBUG=(@DEBUG?$sInfo:'');
+                $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+            }
+            // Print header
+            $admin->print_header();
+            $sql  = 'SELECT `name` FROM `'.TABLE_PREFIX.'groups` '
+                  .'WHERE `group_id`='.(int)$group_id.''
+                  .'';
+            if ( ($group_name = $database->get_one($sql)) ) { }
+            $query = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` '
+                   . 'WHERE `groups_id` like \'%'.$group_id.'%\'';
+            if ( $database->get_one($query) == 0 ) {
+                // Delete the group
+            $sql  = 'DELETE FROM `'.TABLE_PREFIX.'groups` '
+                  .'WHERE `group_id`='.(int)$group_id.''
+                  .'';
+                $database->query($sql);
+                if($database->is_error()) {
+                    $admin->print_error($database->get_error());
+                } else {
+                        $admin->print_success($MESSAGE['GROUPS_DELETED'], $js_back);
+                }
+            } else {
+              $admin->print_error('('.$TEXT['GROUP'].' '.$group_name.') '.$MESSAGE['GENERIC_CANNOT_UNINSTALL'], $js_back);
+            }
+            $admin->print_footer();
+            break;
+    default:
+            break;
+endswitch;

Property changes on: trunk/admin/groups/groups.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/groups/index.php
===================================================================
--- trunk/admin/groups/index.php	(nonexistent)
+++ trunk/admin/groups/index.php	(revision 2)
@@ -0,0 +1,292 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         groups
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Access', 'groups');
+$requestMethod = '_'.($GLOBALS['_SERVER']['REQUEST_METHOD']);
+$aRequestVars  = (@(${$requestMethod}) ? : null);
+
+$bAdvanced = intval (@$aRequestVars['advanced'] ?: 0);
+$sDefaultModules   = array('wysiwyg','menu_link','jsadmin');
+$sDefaultTemplates = array('DefaultTheme','DefaultTemplate');
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('groups.htt')));
+// $template->debug = true;
+$template->set_file('page', 'groups.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_block('main_block', 'manage_users_block', 'users');
+// insert urls
+$ftan = $admin->getFTAN();
+$template->set_var(array(
+    'ADMIN_URL' => ADMIN_URL,
+    'WB_URL' => WB_URL,
+    'THEME_URL' => THEME_URL,
+    'FTAN' => $ftan
+    )
+);
+/*-------------------------------------------------------------------------------------------------------*/
+// Get existing value from database
+$query = 'SELECT `group_id`, `name` FROM `'.TABLE_PREFIX.'groups` WHERE `group_id` != 1';
+$results = $database->query($query);
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), 'index.php');
+}
+// Insert values into the modify/remove menu
+$template->set_block('main_block', 'list_block', 'list');
+if($results->numRows() > 0) {
+    // Insert first value to say please select
+    $template->set_var('VALUE', '');
+    $template->set_var('NAME', $TEXT['PLEASE_SELECT'].'...');
+    $template->parse('list', 'list_block', true);
+    // Loop through groups
+    while($group = $results->fetchRow(MYSQLI_ASSOC)) {
+        $template->set_var('VALUE',$admin->getIDKEY($group['group_id']));
+        $template->set_var('NAME', $group['name']);
+        $template->parse('list', 'list_block', true);
+    }
+} else {
+    // Insert single value to say no groups were found
+    $template->set_var('NAME', $TEXT['NONE_FOUND']);
+    $template->parse('list', 'list_block', true);
+}
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert permissions values
+if($admin->get_permission('groups_add') != true) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+}
+if($admin->get_permission('groups_modify') != true) {
+    $template->set_var('DISPLAY_MODIFY', 'hide');
+}
+if($admin->get_permission('groups_delete') != true) {
+    $template->set_var('DISPLAY_DELETE', 'hide');
+}
+// Insert language headings
+$template->set_var(array(
+    'HEADING_MODIFY_DELETE_GROUP' => $HEADING['MODIFY_DELETE_GROUP'],
+    'HEADING_ADD_GROUP' => $HEADING['ADD_GROUP']
+    )
+);
+// Insert language text and messages
+$template->set_var(array(
+    'TEXT_MODIFY' => $TEXT['MODIFY'],
+    'TEXT_DELETE' => $TEXT['DELETE'],
+    'TEXT_MANAGE_USERS' => ( $admin->get_permission('users') == true ) ? $TEXT['MANAGE_USERS']: "",
+    'CONFIRM_DELETE' => $TEXT['GROUP'].' '.$TEXT['DELETE'].', '.$TEXT['ARE_YOU_SURE']
+    )
+);
+if ( $admin->get_permission('users') == true ) $template->parse("users", "manage_users_block", true);
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+/*-------------------------------------------------------------------------------------------------------*/
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('groups_form.htt')));
+// $template->debug = true;
+//$template->set_unknowns('keep');
+$template->set_file('page', 'groups_form.htt');
+$template->set_block('page', 'main_block', 'main');
+/*-------------------------------------------------------------------------------------------------------*/
+$template->set_var('DISPLAY_EXTRA', 'display:none;');
+$template->set_var('GROUP_NAME', '');
+$template->set_var('ACTION_URL', ADMIN_URL.'/groups/add.php');
+$template->set_var('SUBMIT_TITLE', $TEXT['ADD']);
+$template->set_var('ADVANCED_LINK', ADMIN_URL.'/groups/index.php');
+$template->set_var('CANCEL_LINK', ADMIN_URL.'/access/index.php');
+/*-------------------------------------------------------------------------------------------------------*/
+// Tell the browser whether or not to show advanced options
+$template->set_block('main_block', 'groups_basic_block', 'groups_basic');
+$template->set_block('main_block', 'groups_extended_block', 'groups_extended');
+if($bAdvanced)
+{
+    $template->set_var('DISPLAY_ADVANCED', '');
+    $template->set_var('DISPLAY_BASIC', 'display:none;');
+    $template->set_var('ADVANCED_VALUE', 0);
+    $template->set_var('ADVANCED_BUTTON', '&laquo; '.$TEXT['HIDE_ADVANCED']);
+    $template->parse('groups_extended', 'groups_extended_block', true);
+    $template->set_block('groups_basic', '', '');
+} else {
+    $template->set_var('DISPLAY_ADVANCED', 'display:none;');
+    $template->set_var('DISPLAY_BASIC', '');
+    $template->set_var('ADVANCED_VALUE', 1);
+    $template->set_var('ADVANCED_BUTTON', $TEXT['SHOW_ADVANCED'].' &raquo;');
+    $template->parse('groups_basic', 'groups_basic_block', true);
+    $template->set_block('groups_extended', '');
+}
+/*
+*/
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert permissions values
+if($admin->get_permission('groups_add') != true) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+}
+/*-------------------------------------------------------------------------------------------------------*/
+    $sPermissions = array();
+    $system_permissions   = array();
+    // Check system permissions boxes
+    $sOldWorkingDir = getcwd();
+    // Explode module permissions
+    chdir(WB_PATH.'/modules/');
+    $aAvailableItemsList = glob('*', GLOB_ONLYDIR|GLOB_NOSORT);
+    $module_permissions = array_diff($aAvailableItemsList, $sDefaultModules);
+    // Explode template permissions
+    chdir(WB_PATH.'/templates/');
+    $aAvailableItemsList = glob('*', GLOB_ONLYDIR|GLOB_NOSORT);
+    $template_permissions = array_diff($aAvailableItemsList, $sDefaultTemplates);
+    chdir($sOldWorkingDir);
+
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert values into module list
+    $template->set_block('main_block', 'module_list_block', 'module_list');
+    $template->set_block('main_block', 'module_group_block', 'module_group');
+    $aTmp = array();
+    $aCheckedList = array();
+    $GroupsFunction = '';
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'module\' '
+          .   'AND `function` IN (\'page\', \'tool\') '
+//                  . 'GROUP BY `function` '
+          . 'ORDER BY `function`, `name`';
+    if($result = $database->query($sql))
+    {
+        $i=0;
+        while($addon = $result->fetchRow(MYSQLI_ASSOC)) {
+            $template->set_var('OPTGROUP', '');
+            $template->set_block('module_group_block', '');
+            if (strcasecmp($addon['function'], $GroupsFunction)!== 0){
+                $template->set_var('OPTGROUP', ucwords($addon['function']));
+                $template->parse('module_group', 'module_group_block', true);
+            }
+            if (!is_readable(WB_PATH.'/modules/'.$addon['directory'])){
+                $aTmp[] = $addon['directory'];
+                continue;
+            }
+            $template->set_var('VALUE', $addon['directory']);
+            $template->set_var('NAME', (($addon['function'] == 'page') ? $addon['name'] :''.$addon['name']));
+            if (!is_numeric(array_search($addon['directory'], $module_permissions)) )
+            {
+                $template->set_var('CHECKED', ' checked="checked"');
+                $aCheckedList[$i]['directory'] = $addon['directory'];
+                $aCheckedList[$i]['name'] = $addon['name'];
+                ++$i;
+            } else {
+                $template->set_var('CHECKED', '');
+            }
+            $GroupsFunction = $addon['function'];
+            $template->parse('module_list', 'module_list_block', true);
+        }
+    }
+
+// Insert values into template list
+    $template->set_block('main_block', 'template_list_block', 'template_list');
+    $template->set_block('main_block', 'template_group_block', 'template_group');
+    $aTmp = array();
+    $aCheckedList = array();
+    $GroupsFunction = '';
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'template\' '
+          . 'ORDER BY `function`, `name`';
+    if($result = $database->query($sql))
+    {
+        $i=0;
+        while( $addon = $result->fetchRow(MYSQLI_ASSOC)) {
+            $template->set_var('OPTGROUP', '');
+            $template->set_block('template_function', '');
+            if (strcasecmp($addon['function'], $GroupsFunction)!== 0){
+                $template->set_var('OPTGROUP', ucwords($addon['function']));
+                $template->parse('template_group', 'template_group_block', true);
+            }
+            if (!is_readable(WB_PATH.'/templates/'.$addon['directory'])){
+                $aTmp[] = $addon['directory'];
+                continue;
+            }
+            $template->set_var('VALUE', $addon['directory']);
+            $template->set_var('NAME', $addon['name']   );
+            if(!is_numeric(array_search($addon['directory'], $template_permissions)))
+            {
+                $template->set_var('CHECKED', ' checked="checked"');
+                $aCheckedList[$i]['directory'] = $addon['directory'];
+                $aCheckedList[$i]['name'] = $addon['name'];
+                ++$i;
+            } else {
+                $template->set_var('CHECKED', '');
+            }
+            $GroupsFunction = $addon['function'];
+            $template->parse('template_list', 'template_list_block', true);
+        }
+    }
+/*-------------------------------------------------------------------------------------------------------*/
+// Insert language text and messages
+$template->set_var(array(
+            'TEXT_CANCEL' => $TEXT['CANCEL'],
+            'TEXT_RESET' => $TEXT['RESET'],
+            'TEXT_FILESYSTEM_PERMISSIONS' => $TEXT['FILESYSTEM_PERMISSIONS'],
+            'TEXT_ACTIVE' => $TEXT['ACTIVE'],
+            'TEXT_DISABLED' => $TEXT['DISABLED'],
+            'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+            'TEXT_USERNAME' => $TEXT['USERNAME'],
+            'TEXT_PASSWORD' => $TEXT['PASSWORD'],
+            'TEXT_RETYPE_PASSWORD' => $TEXT['RETYPE_PASSWORD'],
+            'TEXT_DISPLAY_NAME' => $TEXT['DISPLAY_NAME'],
+            'TEXT_EMAIL' => $TEXT['EMAIL'],
+            'TEXT_GROUP' => $TEXT['GROUP'],
+            'TEXT_GROUPS' => $MENU['GROUPS'],
+            'TEXT_SYSTEM_PERMISSIONS' => $TEXT['SYSTEM_PERMISSIONS'],
+            'TEXT_MODULE_PERMISSIONS' => $TEXT['MODULE_PERMISSIONS'],
+            'TEXT_TEMPLATE_PERMISSIONS' => $TEXT['TEMPLATE_PERMISSIONS'],
+            'TEXT_NAME' => $TEXT['NAME'],
+            'SECTION_PAGES' => $MENU['PAGES'],
+            'SECTION_MEDIA' => $MENU['MEDIA'],
+            'SECTION_MODULES' => $MENU['MODULES'],
+            'SECTION_TEMPLATES' => $MENU['TEMPLATES'],
+            'SECTION_SETTINGS' => $MENU['SETTINGS'],
+            'SECTION_LANGUAGES' => $MENU['LANGUAGES'],
+            'SECTION_USERS' => $MENU['USERS'],
+            'SECTION_GROUPS' => $MENU['GROUPS'],
+            'SECTION_ADMINTOOLS' => $MENU['ADMINTOOLS'],
+            'TEXT_VIEW' => $TEXT['VIEW'],
+            'TEXT_ADD' => $TEXT['ADD'],
+            'TEXT_LEVEL' => $TEXT['LEVEL'],
+            'TEXT_MODIFY' => $TEXT['MODIFY'],
+            'TEXT_DELETE' => $TEXT['DELETE'],
+            'TEXT_MODIFY_CONTENT' => $TEXT['MODIFY_CONTENT'],
+            'TEXT_MODIFY_SETTINGS' => $TEXT['MODIFY_SETTINGS'],
+            'HEADING_MODIFY_INTRO_PAGE' => $TEXT['INTRO_PAGE'],//$HEADING['MODIFY_INTRO_PAGE'],
+            'TEXT_CREATE_FOLDER' => $TEXT['CREATE_FOLDER'],
+            'TEXT_RENAME' => $TEXT['RENAME'],
+            'TEXT_UPLOAD_FILES' => $TEXT['UPLOAD_FILES'],
+            'TEXT_BASIC' => $TEXT['BASIC'],
+            'TEXT_ADVANCED' => $TEXT['ADVANCED'],
+            'CHANGING_PASSWORD' => $MESSAGE['USERS_CHANGING_PASSWORD'],
+//                                'CHECKED' => ' checked="checked"',
+            'ADMIN_URL' => ADMIN_URL,
+            'WB_URL' => WB_URL,
+            'THEME_URL' => THEME_URL,
+            'FTAN' => $ftan,
+            'DEBUG_MSG'=>(@$DebugOLutput?:'')
+            )
+                );
+
+// Parse template for add group form
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print the admin footer
+$admin->print_footer();

Property changes on: trunk/admin/groups/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/groups/save.php
===================================================================
--- trunk/admin/groups/save.php	(nonexistent)
+++ trunk/admin/groups/save.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         groups
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+    if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+    if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+    $admin = new admin('Access', 'groups_modify', false);
+    $requestMethod = '_'.($GLOBALS['_SERVER']['REQUEST_METHOD']);
+    $aRequestVars  = (@(${$requestMethod}) ? : null);
+
+    $bAdvanced       = intval(@$aRequestVars['advanced'] ?: 0);
+    $bAdvancedSave   = intval(@$aRequestVars['advanced_extended'] ?: 0);
+    $bResetSystem    = intval(@$aRequestVars['reset_system'] ?: 0);
+    $bResetModules   = intval(@$aRequestVars['reset_modules'] ?: 0);
+    $bResetTemplates = intval(@$aRequestVars['reset_templates'] ?: 0);
+    $js_back = ADMIN_URL.'/groups/index.php';
+    $action = 'save';
+    $action = (isset($aRequestVars['cancel']) ? 'cancel' : $action );
+    switch ($action):
+        case 'cancel':
+            header('HTTP/1.1 301 Moved Permanently');
+            header('Location: '.$js_back);
+            exit;
+        default:
+
+        break;
+    endswitch;
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+
+// Check if group group_id is a valid number and doesnt equal 1
+$group_id = intval($admin->checkIDKEY('group_id', 0, $_SERVER['REQUEST_METHOD']));
+if( ($group_id < 2 ) )
+{
+    // if($admin_header) { $admin->print_header(); }
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// Gather details entered
+$group_name = preg_replace('/[^a-z0-9_-]/i', "", $admin->get_post('group_name'));
+$group_name = $admin->StripCodeFromText($group_name);
+// Check values
+if($group_name == "") {
+    $admin->print_error($MESSAGE['GROUPS_GROUP_NAME_BLANK'], $js_back);
+}
+
+// After check print the header
+$admin->print_header();
+
+$system_permissions = array();
+$query = 'SELECT `system_permissions` FROM `'.TABLE_PREFIX.'groups` '
+       . 'WHERE `group_id` = '.$group_id;
+if ($sSystemPermissions = $database->get_one($query)) {
+//    $aRes = $oRes->fetchRow(MYSQLI_ASSOC);
+    $system_permissions = (explode(',', $sSystemPermissions));
+}
+
+// Get system permissions
+require(ADMIN_PATH.'/groups/get_permissions.php');
+
+// Update the database
+$sql  = 'UPDATE `'.TABLE_PREFIX.'groups` SET '
+      .'`name` = \''.$group_name.'\', '
+      .'`system_permissions` = \''.$database->escapeString($system_permissions).'\', '
+      .'`module_permissions` = \''.$database->escapeString($module_permissions).'\', '
+      .'`template_permissions` = \''.$database->escapeString($template_permissions).'\' '
+      .'WHERE `group_id` = '.intval($group_id);
+$database->query($sql);
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), $js_back);
+} else {
+    $group_id = $admin->getIDKEY($group_id);
+    $modifyUrl = ADMIN_URL.'/groups/groups.php?modify=&group_id='.$group_id.'&advanced='.!$bAdvanced;
+    $admin->print_success($MESSAGE['GROUPS_SAVED'], $modifyUrl);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/groups/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/images/README.txt
===================================================================
--- trunk/admin/images/README.txt	(nonexistent)
+++ trunk/admin/images/README.txt	(revision 2)
@@ -0,0 +1,10 @@
+The folder admin/images isn't needed for WB 2.8. anymore.
+
+It remains only to keep backward compatibility to old modules
+wich make use of the images from this folder.
+
+Modules should be adapted as soon as possible to use images
+from the backend themes instead.
+
+If you are shure you have only Modules wich uses images from
+backend themes, this folder can be deleted.
\ No newline at end of file
Index: trunk/admin/images/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/admin/images/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/admin/images/clock_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/clock_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/clock_del_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/clock_del_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/clock_red_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/clock_red_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/delete_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/delete_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/deleted_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/deleted_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/down_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/down_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/folder_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/folder_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/hidden_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/hidden_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/minus_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/minus_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/modify.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/modify.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/noclock_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/noclock_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/plus_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/plus_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/private_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/private_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/reload_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/reload_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/restore_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/restore_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/up_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/up_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/up_folder_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/up_folder_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/view_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/view_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/images/visible_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/admin/images/visible_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/admin/index.php
===================================================================
--- trunk/admin/index.php	(nonexistent)
+++ trunk/admin/index.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+// Include config file
+if(!defined('WB_URL') && file_exists(realpath('../config.php'))) {
+    require('../config.php');
+}
+
+// Check if the config file has been set-up
+if(!defined('WB_PATH')) {
+    header("Location: ../install/index.php");
+} else {
+    header('Location: '.ADMIN_URL.'/start/index.php');
+}

Property changes on: trunk/admin/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/charsets.php
===================================================================
--- trunk/admin/interface/charsets.php	(nonexistent)
+++ trunk/admin/interface/charsets.php	(revision 2)
@@ -0,0 +1,45 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ * Charset list file
+ * This file is used to generate a list of charsets for the user to select
+ *
+ */
+
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+
+// Create array
+$CHARSETS = array();
+$CHARSETS['utf-8'] = 'Unicode (utf-8)';
+$CHARSETS['iso-8859-1'] = 'Latin-1 Western European (iso-8859-1)';
+$CHARSETS['iso-8859-2'] = 'Latin-2 Central European (iso-8859-2)';
+$CHARSETS['iso-8859-3'] = 'Latin-3 Southern European (iso-8859-3)';
+$CHARSETS['iso-8859-4'] = 'Latin-4 Baltic (iso-8859-4)';
+$CHARSETS['iso-8859-5'] = 'Cyrillic (iso-8859-5)';
+$CHARSETS['iso-8859-6'] = 'Arabic (iso-8859-6)';
+$CHARSETS['iso-8859-7'] = 'Greek (iso-8859-7)';
+$CHARSETS['iso-8859-8'] = 'Hebrew (iso-8859-8)';
+$CHARSETS['iso-8859-9'] = 'Latin-5 Turkish (iso-8859-9)';
+$CHARSETS['iso-8859-10'] = 'Latin-6 Nordic (iso-8859-10)';
+$CHARSETS['iso-8859-11'] = 'Thai (iso-8859-11)';
+$CHARSETS['gb2312'] = 'Chinese Simplified (gb2312)';
+$CHARSETS['big5'] = 'Chinese Traditional (big5)';
+$CHARSETS['iso-2022-jp'] = 'Japanese (iso-2022-jp)';
+$CHARSETS['iso-2022-kr'] = 'Korean (iso-2022-kr)';
+

Property changes on: trunk/admin/interface/charsets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/date_formats.php
===================================================================
--- trunk/admin/interface/date_formats.php	(nonexistent)
+++ trunk/admin/interface/date_formats.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ * Date format list file
+ * This file is used to generate a list of date formats for the user to select
+ *
+ */
+
+if(!defined('WB_URL')) {
+    header('Location: ../../../index.php');
+    exit(0);
+}
+
+// Define that this file is loaded
+if(!defined('DATE_FORMATS_LOADED')) {
+    define('DATE_FORMATS_LOADED', true);
+}
+
+// Create array
+$DATE_FORMATS = array();
+
+// Get the current time (in the users timezone if required)
+$actual_time = time()+ ((isset($user_time) && $user_time == true) ? TIMEZONE : DEFAULT_TIMEZONE);
+
+// Add values to list
+$DATE_FORMATS['l,|jS|F,|Y'] = gmdate('l, jS F, Y', $actual_time);
+$DATE_FORMATS['jS|F,|Y'] = gmdate('jS F, Y', $actual_time);
+$DATE_FORMATS['d|M|Y'] = gmdate('d M Y', $actual_time);
+$DATE_FORMATS['M|d|Y'] = gmdate('M d Y', $actual_time);
+$DATE_FORMATS['D|M|d,|Y'] = gmdate('D M d, Y', $actual_time);
+$DATE_FORMATS['d-m-Y'] = gmdate('d-m-Y', $actual_time).' (D-M-Y)';
+$DATE_FORMATS['m-d-Y'] = gmdate('m-d-Y', $actual_time).' (M-D-Y)';
+$DATE_FORMATS['d.m.Y'] = gmdate('d.m.Y', $actual_time).' (D.M.Y)';
+$DATE_FORMATS['m.d.Y'] = gmdate('m.d.Y', $actual_time).' (M.D.Y)';
+$DATE_FORMATS['d/m/Y'] = gmdate('d/m/Y', $actual_time).' (D/M/Y)';
+$DATE_FORMATS['m/d/Y'] = gmdate('m/d/Y', $actual_time).' (M/D/Y)';
+$DATE_FORMATS['j.n.Y'] = gmdate('j.n.Y', $actual_time).' (j.n.Y)';
+
+// Add "System Default" to list (if we need to)
+if(isset($user_time) && $user_time == true)
+{
+    if(isset($TEXT['SYSTEM_DEFAULT']))
+    {
+        $DATE_FORMATS['system_default'] = gmdate(DEFAULT_DATE_FORMAT, $actual_time).' ('.$TEXT['SYSTEM_DEFAULT'].')';
+    } else {
+        $DATE_FORMATS['system_default'] = gmdate(DEFAULT_DATE_FORMAT, $actual_time).' (System Default)';
+    }
+}
+
+// Reverse array so "System Default" is at the top
+$DATE_FORMATS = array_reverse($DATE_FORMATS, true);
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/interface/date_formats.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/er_levels.php
===================================================================
--- trunk/admin/interface/er_levels.php	(nonexistent)
+++ trunk/admin/interface/er_levels.php	(revision 2)
@@ -0,0 +1,47 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ * Error Reporting Level's list file
+ * This file is used to generate a list of PHP
+ * Error Reporting Level's for the user to select
+ *
+ */
+
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+
+// Define that this file is loaded
+if(!defined('ERROR_REPORTING_LEVELS_LOADED')) {
+    define('ERROR_REPORTING_LEVELS_LOADED', true);
+}
+
+// Create array
+$ER_LEVELS = array();
+
+// Add values to list
+if(isset($TEXT['SYSTEM_DEFAULT'])) {
+    $ER_LEVELS[''] = $TEXT['SYSTEM_DEFAULT'];
+} else {
+    $ER_LEVELS[''] = 'System Default';
+}
+$ER_LEVELS['6135'] = 'E_ALL^E_NOTICE'; // standard: E_ALL without E_NOTICE
+$ER_LEVELS['0'] = 'E_NONE';
+$ER_LEVELS['6143'] = 'E_ALL';
+$ER_LEVELS['8191'] = htmlentities('E_ALL&E_STRICT'); // for programmers
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/interface/er_levels.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/time_formats.php
===================================================================
--- trunk/admin/interface/time_formats.php	(nonexistent)
+++ trunk/admin/interface/time_formats.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ * Time format list file
+ * This file is used to generate a list of time formats for the user to select
+ *
+ */
+
+if(!defined('WB_URL')) {
+    header('Location: ../../../index.php');
+    exit(0);
+}
+
+// Define that this file is loaded
+if(!defined('TIME_FORMATS_LOADED')) {
+    define('TIME_FORMATS_LOADED', true);
+}
+
+// Create array
+$TIME_FORMATS = array();
+
+// Get the current time (in the users timezone if required)
+$actual_time = time()+ ((isset($user_time) AND $user_time == true) ? TIMEZONE : DEFAULT_TIMEZONE);
+
+// Add values to list
+$TIME_FORMATS['g:i|A'] = gmdate('g:i A', $actual_time);
+$TIME_FORMATS['g:i|a'] = gmdate('g:i a', $actual_time);
+$TIME_FORMATS['H:i:s'] = gmdate('H:i:s', $actual_time);
+$TIME_FORMATS['H:i'] = gmdate('H:i', $actual_time);
+
+// Add "System Default" to list (if we need to)
+if(isset($user_time) AND $user_time == true) {
+    if(isset($TEXT['SYSTEM_DEFAULT'])) {
+        $TIME_FORMATS['system_default'] = gmdate(DEFAULT_TIME_FORMAT, $actual_time).' ('.$TEXT['SYSTEM_DEFAULT'].')';
+    } else {
+        $TIME_FORMATS['system_default'] = gmdate(DEFAULT_TIME_FORMAT, $actual_time).' (System Default)';
+    }
+}
+
+// Reverse array so "System Default" is at the top
+$TIME_FORMATS = array_reverse($TIME_FORMATS, true);
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/interface/time_formats.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/timezones.php
===================================================================
--- trunk/admin/interface/timezones.php	(nonexistent)
+++ trunk/admin/interface/timezones.php	(revision 2)
@@ -0,0 +1,78 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ * Timezone list file
+ * This file is used to generate a list of timezones for the user to select
+ *
+ */
+
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+
+// Create array
+$TIMEZONES = array();
+$actual_timezone = ( DEFAULT_TIMEZONE <> 0 ) ? DEFAULT_TIMEZONE/3600 : 0;
+
+$TIMEZONES['-12']  = 'GMT -12 Hours';
+$TIMEZONES['-11']  = 'GMT -11 Hours';
+$TIMEZONES['-10']  = 'GMT -10 Hours';
+$TIMEZONES['-9']   = 'GMT -9 Hours';
+$TIMEZONES['-8']   = 'GMT -8 Hours - Pacific Standard';
+$TIMEZONES['-7']   = 'GMT -7 Hours - Mountain Standard / Pacific Daylight';
+$TIMEZONES['-6']   = 'GMT -6 Hours - Central Standard / Mountain Daylight';
+$TIMEZONES['-5']   = 'GMT -5 Hours - Eastern Standard / Central Daylight';
+$TIMEZONES['-4']   = 'GMT -4 Hours - Atlantic Standard / Eastern Daylight';
+$TIMEZONES['-3.5'] = 'GMT -3.5 Hours - Newfoundland Standard';
+$TIMEZONES['-3']   = 'GMT -3 Hours - Atlantic Daylight';
+$TIMEZONES['-2.5'] = 'GMT -2.5 Hours - Newfoundland Daylight';
+$TIMEZONES['-2']  = 'GMT -2 Hours';
+$TIMEZONES['-1']  = 'GMT -1 Hour';
+$TIMEZONES['0']   = 'GMT/UTC';
+$TIMEZONES['1']   = 'GMT +1 Hour';
+$TIMEZONES['2']   = 'GMT +2 Hours';
+$TIMEZONES['3']   = 'GMT +3 Hours';
+$TIMEZONES['3.5'] = 'GMT +3.5 Hours';
+$TIMEZONES['4']   = 'GMT +4 Hours';
+$TIMEZONES['4.5'] = 'GMT +4.5 Hours';
+$TIMEZONES['5']   = 'GMT +5 Hours';
+$TIMEZONES['5.5'] = 'GMT +5.5 Hours';
+$TIMEZONES['6']   = 'GMT +6 Hours';
+$TIMEZONES['6.5'] = 'GMT +6.5 Hours';
+$TIMEZONES['7']   = 'GMT +7 Hours';
+$TIMEZONES['8']   = 'GMT +8 Hours';
+$TIMEZONES['9']   = 'GMT +9 Hours';
+$TIMEZONES['9.5'] = 'GMT +9.5 Hours';
+$TIMEZONES['10']  = 'GMT +10 Hours';
+$TIMEZONES['11']  = 'GMT +11 Hours';
+$TIMEZONES['12']  = 'GMT +12 Hours';
+$TIMEZONES['13']  = 'GMT +13 Hours';
+
+// Add "System Default" to list (if we need to)
+if(isset($user_time) && $user_time == true)
+{
+    if(isset($TEXT['SYSTEM_DEFAULT']))
+    {
+        $TIMEZONES['system_default'] = $TIMEZONES[$actual_timezone].' ('.$TEXT['SYSTEM_DEFAULT'].')';
+    } else {
+        $TIMEZONES['system_default'] = $TIMEZONES[$actual_timezone].' (System Default)';
+    }
+}
+
+// Reverse array so "System Default" is at the top
+$TIMEZONES = array_reverse($TIMEZONES, true);
+

Property changes on: trunk/admin/interface/timezones.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/interface/version.php
===================================================================
--- trunk/admin/interface/version.php	(nonexistent)
+++ trunk/admin/interface/version.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+/**
+ * About WebsiteBaker
+ *
+ * Website Baker is a PHP-based Content Management System (CMS)
+ * designed with one goal in mind: to enable its users to produce websites
+ * with ease.
+ *
+ * LICENSE INFORMATION
+ *
+ * WebsiteBaker is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * WebsiteBaker 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * WebsiteBaker Extra Information
+ *
+ * This file is where the WB release version is stored.
+ *
+ *
+ * @category        admin
+ * @package         interface
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @revision        $Revision$
+ * @version         $Id$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+// check if defined to avoid errors during installation (redirect to admin panel fails if PHP error/warnings are enabled)
+if(!defined('VERSION')) { define('VERSION', '2.10.1-dev'); }
+if(!defined('REVISION')) { define('REVISION', '103'); }
+if(!defined('SP')) { define('SP', ''); }
+

Property changes on: trunk/admin/interface/version.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/languages/details.php
===================================================================
--- trunk/admin/languages/details.php	(nonexistent)
+++ trunk/admin/languages/details.php	(revision 2)
@@ -0,0 +1,118 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ *
+ */
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Addons', 'languages_view', false);
+
+$js_back = ADMIN_URL.'/languages/index.php';
+
+if (!$admin->checkFTAN()){
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// After check print the header
+$admin->print_header();
+/*
+// Get language name
+if(!isset($_POST['code']) OR $_POST['code'] == "") {
+    $code = '';
+    $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+} else {
+    $code = preg_replace('/[^a-z0-9_-]/i', "", $_POST['code']);  // fix secunia 2010-92-2
+}
+*/
+
+// Get module name
+    $code = '';
+    if (!isset($_POST['code']) || $_POST['code'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('code',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get module directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($code = $database->get_one($sqlAddons)) {
+        // fix secunia 2010-93-2
+        if (!preg_match('/^[A-Z]{2}$/', $code) && $code!='' ) {
+            $admin->print_error( $MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+        }
+    }
+
+// Check if the language exists
+if(!file_exists(WB_PATH.'/languages/'.$code.'.php')) {
+    $admin->print_error($MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+}
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('languages_details.htt')));
+// $template->debug = true;
+$template->set_file('page', 'languages_details.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Insert values
+require(WB_PATH.'/languages/'.$code.'.php');
+$template->set_var(array(
+                                'CODE' => $language_code,
+                                'NAME' => $language_name,
+                                'AUTHOR' => $language_author,
+                                'VERSION' => $language_version,
+                                'DESIGNED_FOR' => $language_platform,
+                                'ADMIN_URL' => ADMIN_URL,
+                                'WB_URL' => WB_URL,
+                                'THEME_URL' => THEME_URL
+                                )
+                        );
+
+// Restore language to original code
+require(WB_PATH.'/languages/'.LANGUAGE.'.php');
+
+// Insert language headings
+$template->set_var(array(
+                                'HEADING_LANGUAGE_DETAILS' => $HEADING['LANGUAGE_DETAILS']
+                                )
+                        );
+// Insert language text and messages
+$template->set_var(array(
+                                'TEXT_CODE' => $TEXT['CODE'],
+                                'TEXT_NAME' => $TEXT['NAME'],
+                                'TEXT_TYPE' => $TEXT['TYPE'],
+                                'TEXT_AUTHOR' => $TEXT['AUTHOR'],
+                                'TEXT_VERSION' => $TEXT['VERSION'],
+                                'TEXT_DESIGNED_FOR' => $TEXT['DESIGNED_FOR'],
+                                'TEXT_BACK' => $TEXT['BACK']
+                                )
+                        );
+
+// Parse language object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/languages/details.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/languages/index.php
===================================================================
--- trunk/admin/languages/index.php	(nonexistent)
+++ trunk/admin/languages/index.php	(revision 2)
@@ -0,0 +1,134 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Addons', 'languages');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('languages.htt')));
+// $template->debug = true;
+$template->set_file('page', 'languages.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Insert values into language list
+    $template->set_block('main_block', 'language_detail_block', 'language_detail');
+    $template->set_block('language_detail_block', 'language_detail_select_block', 'language_detail_select');
+    $template->set_block('main_block', 'language_uninstall_block', 'language_uninstall');
+    $template->set_block('language_uninstall_block', 'language_uninstall_select_block', 'language_uninstall_select');
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` =\'language\''
+          . 'ORDER BY `directory`';
+    if($oAddons = $database->query($sql)) {
+        while($aAddon = $oAddons->fetchRow(MYSQLI_ASSOC)){
+            if( !$admin->get_permission( $aAddon['directory'], 'language' )) { continue; }
+            $aAddonIdKey = $admin->getIDKEY($aAddon['addon_id']);
+            $template->set_var('VALUE', $aAddonIdKey);
+            $template->set_var('NAME', $aAddon['name'].' ('.$aAddon['directory'].')');
+            $template->parse('language_detail_select', 'language_detail_select_block', true);
+        }
+        $oAddons->rewind();
+        while($aAddon = $oAddons->fetchRow(MYSQLI_ASSOC)) {
+            if( !$admin->get_permission( $aAddon['directory'], 'language' )) { continue; }
+            $aAddonIdKey = $admin->getIDKEY($aAddon['addon_id']);
+            $template->set_var('VALUE', $aAddonIdKey);
+            $template->set_var('NAME', $aAddon['name'].' ('.$aAddon['directory'].')');
+            $template->parse('language_uninstall_select', 'language_uninstall_select_block', true);
+        }
+    }
+
+// Insert permissions values
+$template->set_block('main_block', 'language_install_block', 'language_install');
+if($admin->get_permission('languages_install') != true) {
+    $template->set_var('DISPLAY_INSTALL', '');
+    $template->set_block('language_install', '');
+} else {
+    $template->parse('language_install', 'language_install_block', true);
+}
+if($admin->get_permission('languages_uninstall') != true) {
+    $template->set_var('DISPLAY_UNINSTALL', '');
+    $template->set_block('language_uninstall', '');
+} else {
+    $template->parse('language_uninstall', 'language_uninstall_block', true);
+}
+if($admin->get_permission('languages_view') != true) {
+    $template->set_var('DISPLAY_LIST', '');
+    $template->set_block('language_detail', '');
+} else {
+    $template->parse('language_detail', 'language_detail_block', true);
+}
+
+$template->set_block('main_block', 'addon_template_block', 'addon_template');
+if($admin->get_permission('templates_view') != true) {
+    $template->set_block ('addon_template', '');
+} else {
+    $template->parse('addon_template', 'addon_template_block', true);
+}
+
+$template->set_block('main_block', 'addon_module_block', 'addon_module');
+if($admin->get_permission('modules_view') != true) {
+    $template->set_block ('addon_module', '');
+} else {
+    $template->parse('addon_module', 'addon_module_block', true);
+}
+
+$template->set_block('main_block', 'addon_language_block', 'addon_language');
+if($admin->get_permission('admintools') != true) {
+    $template->set_block ('addon_language', '');
+} else {
+    $template->parse('addon_language', 'addon_language_block', true);
+}
+
+// Insert language headings
+$template->set_var(array(
+                'HEADING_INSTALL_LANGUAGE' => $HEADING['INSTALL_LANGUAGE'],
+                'HEADING_UNINSTALL_LANGUAGE' => $HEADING['UNINSTALL_LANGUAGE'],
+                'HEADING_LANGUAGE_DETAILS' => $HEADING['LANGUAGE_DETAILS']
+            )
+        );
+// insert urls
+$template->set_var(array(
+                'ADMIN_URL' => ADMIN_URL,
+                'WB_URL' => WB_URL,
+                'THEME_URL' => THEME_URL,
+                'FTAN' => $admin->getFTAN()
+            )
+        );
+// Insert language text and messages
+$template->set_var(array(
+    'URL_MODULES' => $admin->get_permission('modules') ? ADMIN_URL . '/modules/index.php' : '#',
+    'URL_TEMPLATES' => $admin->get_permission('templates') ? ADMIN_URL . '/templates/index.php' : '#',
+    'URL_ADVANCED' => '&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;',
+    'MENU_MODULES' => $admin->get_permission('modules') ? $MENU['MODULES'] : '&#160;&#160;&#160;',
+    'MENU_TEMPLATES' => $admin->get_permission('templates') ? $MENU['TEMPLATES'] : '&#160;&#160;&#160;',
+    'TEXT_INSTALL' => $TEXT['INSTALL'],
+    'TEXT_UNINSTALL' => $TEXT['UNINSTALL'],
+    'TEXT_VIEW_DETAILS' => $TEXT['VIEW_DETAILS'],
+    'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT']
+    )
+);
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/languages/install.php
===================================================================
--- trunk/admin/languages/install.php	(nonexistent)
+++ trunk/admin/languages/install.php	(revision 2)
@@ -0,0 +1,131 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ *
+ */
+
+// do not display notices and warnings during installation
+error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Addons', 'languages_install', false);
+
+$js_back = ADMIN_URL.'/languages/index.php';
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// After check print the header
+$admin->print_header();
+
+// Check if user uploaded a file
+if(!isset($_FILES['userfile'])) {
+    $admin->print_error($MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Create temp string
+$temp_string = '';
+$salt = "abchefghjkmnpqrstuvwxyz0123456789";
+srand((double)microtime()*1000000);
+$i = 0;
+while ($i <= 7) {
+    $num = rand() % 33;
+    $tmp = substr($salt, $num, 1);
+    $temp_string = $temp_string . $tmp;
+    $i++;
+}
+
+// Set temp vars
+$temp_dir = WB_PATH.'/temp/';
+$temp_file = $temp_dir . 'language'.$temp_string;
+
+// Check if language dir is writable
+if(!is_writable(WB_PATH.'/languages/')) {
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['GENERIC_BAD_PERMISSIONS']);
+}
+
+// Try to upload the file to the temp dir
+if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $temp_file)) {
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UPLOAD']);
+}
+
+// Check if uploaded file is a valid language file (no binary file etc.)
+$content = file_get_contents($temp_file);
+if (strpos($content, '<?php') === false) $admin->print_error($MESSAGE['GENERIC_INVALID_LANGUAGE_FILE']);
+// Remove any vars with name "language_code"
+if (isset($language_code)){unset($language_code);}
+
+// Include precheck files for versionCompare routine
+require(WB_PATH . '/framework/addon.precheck.inc.php');
+
+// Read the temp file and look for a language code
+require($temp_file);
+$new_language_version=$language_version;
+
+// Check if the file is valid
+if(!isset($language_code)) {
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    // Restore to correct language
+    require(WB_PATH.'/languages/'.LANGUAGE.'.php');
+    $admin->print_error($MESSAGE['GENERIC_INVALID_LANGUAGE_FILE']);
+}
+
+// Set destination for language file
+$language_file = WB_PATH.'/languages/'.$language_code.'.php';
+$action="install";
+
+// Move to new location
+if (file_exists($language_file)) {
+    require($language_file);
+    if (versionCompare($language_version, $new_language_version, '>=')) {
+        // Restore to correct language
+        require(WB_PATH . '/languages/' . LANGUAGE . '.php');
+        $admin->print_error($MESSAGE['GENERIC_ALREADY_INSTALLED']);
+    }
+    $action="upgrade";
+    unlink($language_file);
+}
+
+rename($temp_file, $language_file);
+
+// Chmod the file
+change_mode($language_file, 'file');
+
+// Load language info into DB
+load_language($language_file);
+
+// Restore to correct language
+require(WB_PATH.'/languages/'.LANGUAGE.'.php');
+rm_full_dir(WB_PATH.'/temp', true);
+// Print success message
+if ($action=="install") {
+    $admin->print_success($MESSAGE['GENERIC_INSTALLED']);
+} else {
+    $admin->print_success($MESSAGE['GENERIC_UPGRADED']);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/languages/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/languages/uninstall.php
===================================================================
--- trunk/admin/languages/uninstall.php	(nonexistent)
+++ trunk/admin/languages/uninstall.php	(revision 2)
@@ -0,0 +1,92 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ *
+ */
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Addons', 'languages_uninstall', false);
+
+$js_back = ADMIN_URL.'/languages/index.php';
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// After check print the header
+$admin->print_header();
+
+// Get module name
+    $code = '';
+    if (!isset($_POST['code']) || $_POST['code'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('code',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get module directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($code = $database->get_one($sqlAddons)) {
+        // fix secunia 2010-93-2
+        if (!preg_match('/^[A-Z]{2}$/', $code) && $code!='' ) {
+            $admin->print_error( $MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+        }
+    }
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Check if the language exists
+if(!file_exists(WB_PATH.'/languages/'.$code.'.php')) {
+    $admin->print_error($MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+}
+
+// Check if the language is in use
+if($code == DEFAULT_LANGUAGE OR $code == LANGUAGE) {
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE']);
+} else {
+    $query_users = $database->query("SELECT `user_id` FROM `".TABLE_PREFIX."users` WHERE `language` = '".$code."' LIMIT 1");
+    if($query_users->numRows() > 0) {
+        $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE']);
+    }
+}
+
+// Try to delete the language code
+if (!unlink(WB_PATH.'/languages/'.$code.'.php')) {
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL']);
+} else {
+    // Remove entry from DB
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `directory` = \''.$code.'\' '
+          .   'AND `type` = \'language\'';
+    $database->query($sql);
+}
+
+// Print success message
+$admin->print_success($MESSAGE['GENERIC_UNINSTALLED']);
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/languages/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/login/forgot/index.php
===================================================================
--- trunk/admin/login/forgot/index.php	(nonexistent)
+++ trunk/admin/login/forgot/index.php	(revision 2)
@@ -0,0 +1,151 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         login
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+// Include the configuration file
+if ( !defined('WB_PATH') ){ require(dirname(dirname(dirname(__DIR__)))."/config.php"); }
+// Include the language file
+require(WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php');
+// Include the database class file and initiate an object
+require(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Start', 'start', false, false);
+// Check if the user has already submitted the form, otherwise show it
+if(isset($_POST['email']) && $_POST['email'] != "") {
+    $email = htmlspecialchars($_POST['email'],ENT_QUOTES);
+    // Check if the email exists in the database
+    $query = 'SELECT `user_id`, `username`, `display_name`, `email`, `last_reset`, `password` FROM `'.TABLE_PREFIX.'users` '
+    . 'WHERE `email` = \''.$database->escapeString($_POST['email']).'\'';
+    $oRes = $database->query($query);
+    if($oRes->numRows() > 0) {
+        // Get the id, username, email, and last_reset from the above db query
+        $results_array = $oRes->fetchRow(MYSQLI_ASSOC);
+        // Check if the password has been reset in the last 2 hours
+        $last_reset = $results_array['last_reset'];
+        $time_diff = time()-$last_reset; // Time since last reset in seconds
+        $time_diff = $time_diff/60/60; // Time since last reset in hours
+        if($time_diff < 2) {
+            // Tell the user that their password cannot be reset more than once per hour
+            $message = $MESSAGE['FORGOT_PASS_ALREADY_RESET'];
+        } else {
+            $old_pass = $results_array['password'];
+            // Generate a random password then update the database with it
+            $new_pass = '';
+            $salt = "abchefghjkmnpqrstuvwxyz0123456789";
+            srand((double)microtime()*1000000);
+            $i = 0;
+            while ($i <= 7) {
+                $num = rand() % 33;
+                $tmp = substr($salt, $num, 1);
+                $new_pass = $new_pass . $tmp;
+                $i++;
+            }
+
+            $sql  = 'UPDATE `'.TABLE_PREFIX.'users` SET '
+                  . '`password` = \''.$database->escapeString(md5($new_pass)).'\', '
+                  . '`last_reset` = '.time().' '
+                  . 'WHERE `user_id` = '.$results_array['user_id'].'';
+            $database->query($sql);
+            if($database->is_error()) {
+                // Error updating database
+                $message = $database->get_error();
+            } else {
+                // Setup email to send
+                $mail_to = $email;
+                $mail_subject = $MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'];
+                // Replace placeholders from language variable with values
+                $search = array('{LOGIN_DISPLAY_NAME}', '{LOGIN_WEBSITE_TITLE}', '{LOGIN_NAME}', '{LOGIN_PASSWORD}');
+                $replace = array($results_array['display_name'], WEBSITE_TITLE, 'xxxxxxxxxx', $new_pass); 
+                $mail_message = str_replace($search, $replace, $MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT']);
+                // Try sending the email
+                if($admin->mail( SERVER_EMAIL, $mail_to, $mail_subject, $mail_message )) { 
+                    $message = $MESSAGE['FORGOT_PASS_PASSWORD_RESET'];
+                    $display_form = false;
+                } else {
+                    $sql = 'UPDATE `'.TABLE_PREFIX.'users` SET '
+                    . '`password` = \''.$database->escapeString($old_pass).'\' '
+                    . 'WHERE `user_id` = '.$results_array['user_id'].'';
+//                    $database->query("UPDATE ".TABLE_PREFIX."users SET password = '".$old_pass."' WHERE user_id = '".$results_array['user_id']."'");
+                    $database->query($sql);
+                    $message = $MESSAGE['FORGOT_PASS_CANNOT_EMAIL'];
+                }
+            }
+        }
+    } else {
+        // Email doesn't exist, so tell the user
+        $message = $MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'];
+        // and delete the wrong Email
+        $email = '';
+    }
+} else {
+    $email = '';
+}
+
+if(!isset($message)) {
+    $message = $MESSAGE['FORGOT_PASS_NO_DATA'];
+    $message_color = '000000';
+} else {
+    $message_color = 'FF0000';
+}
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('login_forgot.htt')));
+$template->set_file('page', 'login_forgot.htt');
+$template->set_block('page', 'main_block', 'main');
+if(defined('FRONTEND')) {
+    $template->set_var('ACTION_URL', 'forgot.php');
+} else {
+    $template->set_var('ACTION_URL', 'index.php');
+}
+$template->set_var('EMAIL', $email);
+
+if(isset($display_form)) {
+    $template->set_var('DISPLAY_FORM', 'display:none;');
+}
+
+$template->set_var(array(
+                'SECTION_FORGOT' => $MENU['FORGOT'],
+                'MESSAGE_COLOR' => $message_color,
+                'MESSAGE' => $message,
+                'WB_URL' => WB_URL,
+                'ADMIN_URL' => ADMIN_URL,
+                'THEME_URL' => THEME_URL,
+                'LANGUAGE' => strtolower(LANGUAGE),
+                'TEXT_EMAIL' => $TEXT['EMAIL'],
+                'TEXT_SEND_DETAILS' => $TEXT['SEND_DETAILS'],
+                'TEXT_HOME' => $TEXT['HOME'],
+                'TEXT_NEED_TO_LOGIN' => $TEXT['NEED_TO_LOGIN'],
+                'TEXT_SAVE' => $TEXT['SAVE'],
+                'TEXT_RESET' => $TEXT['RESET'],
+                )
+          );
+
+if(defined('FRONTEND')) {
+    $template->set_var('LOGIN_URL', WB_URL.'/account/login.php');
+} else {
+    $template->set_var('LOGIN_URL', ADMIN_URL.'/login/index.php');
+}
+$template->set_var('INTERFACE_URL', ADMIN_URL.'/interface');
+
+if(defined('DEFAULT_CHARSET')) {
+    $charset=DEFAULT_CHARSET;
+} else {
+    $charset='utf-8';
+}
+
+$template->set_var('CHARSET', $charset);    
+
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');

Property changes on: trunk/admin/login/forgot/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/login/index.php
===================================================================
--- trunk/admin/login/index.php	(nonexistent)
+++ trunk/admin/login/index.php	(revision 2)
@@ -0,0 +1,58 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         login
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+if ( !defined('WB_PATH') ){ require(dirname(dirname(__DIR__))."/config.php"); }
+if( !class_exists('Login', false) ){ require(WB_PATH."/framework/Login.php"); }
+if( !class_exists('frontend', false) ){ require(WB_PATH."/framework/class.frontend.php"); }
+
+$username_fieldname = 'username';
+$password_fieldname = 'password';
+if(defined('SMART_LOGIN') && SMART_LOGIN == 'true') {
+    $sTmp = '_'.substr(md5(microtime()), -8);
+    $username_fieldname .= $sTmp;
+    $password_fieldname .= $sTmp;
+}
+
+$admin = new frontend();
+
+// Setup template object, parse vars to it, then parse it
+$WarnUrl = str_replace(WB_PATH,WB_URL,$admin->correct_theme_source('warning.html'));
+$LoginTpl = 'login.htt';
+$ThemePath = dirname($admin->correct_theme_source($LoginTpl));
+
+$thisApp = new Login( array(
+        'MAX_ATTEMPS'           => 3,
+        'WARNING_URL'           => $WarnUrl,
+        'USERNAME_FIELDNAME'    => $username_fieldname,
+        'PASSWORD_FIELDNAME'    => $password_fieldname,
+        'REMEMBER_ME_OPTION'    => SMART_LOGIN,
+        'MIN_USERNAME_LEN'      => 2,
+        'MIN_PASSWORD_LEN'      => 3,
+        'MAX_USERNAME_LEN'      => 100,
+        'MAX_PASSWORD_LEN'      => 100,
+        'LOGIN_URL'             => ADMIN_URL."/login/index.php",
+        'DEFAULT_URL'           => ADMIN_URL."/start/index.php",
+//        'REDIRECT_URL'          => ADMIN_URL."/pages/index.php",
+        'TEMPLATE_DIR'          => $ThemePath,
+        'TEMPLATE_FILE'         => $LoginTpl,
+        'FRONTEND'              => false,
+        'FORGOTTEN_DETAILS_APP' => ADMIN_URL."/login/forgot/index.php",
+        'USERS_TABLE'           => TABLE_PREFIX."users",
+        'GROUPS_TABLE'          => TABLE_PREFIX."groups",
+    )
+);
+

Property changes on: trunk/admin/login/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/logout/index.php
===================================================================
--- trunk/admin/logout/index.php	(nonexistent)
+++ trunk/admin/logout/index.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         logout
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require('../../config.php');
+
+// delete remember key of current user from database
+if (isset($_SESSION['USER_ID']) && isset($database)) {
+    $table = TABLE_PREFIX . 'users';
+    $sql = "UPDATE `$table` SET `remember_key` = '' WHERE `user_id` = '" . (int) $_SESSION['USER_ID'] . "'";
+    $database->query($sql);
+}
+
+// delete remember key cookie if set
+if (isset($_COOKIE['REMEMBER_KEY'])) {
+    setcookie('REMEMBER_KEY', '', time() - 3600, '/');
+}
+
+// delete most critical session variables manually
+$_SESSION['USER_ID'] = null;
+$_SESSION['GROUP_ID'] = null;
+$_SESSION['GROUPS_ID'] = null;
+$_SESSION['USERNAME'] = null;
+$_SESSION['PAGE_PERMISSIONS'] = null;
+$_SESSION['SYSTEM_PERMISSIONS'] = null;
+
+// overwrite session array
+$_SESSION = array();
+
+// delete session cookie if set
+if (isset($_COOKIE[session_name()])) {
+    setcookie(session_name(), '', time() - 42000, '/');
+}
+
+// delete the session itself
+session_destroy();
+
+// redirect to admin login
+die(header('Location: ' . ADMIN_URL . '/login/index.php'));
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/logout/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/MediaBlackList
===================================================================
--- trunk/admin/media/MediaBlackList	(nonexistent)
+++ trunk/admin/media/MediaBlackList	(revision 2)
@@ -0,0 +1,29 @@
+addons
+groups
+mod_addon_file_editor
+mod_bookmarks_groups
+mod_bookmarks_links
+mod_bookmarks_settings
+mod_captcha_control
+mod_download_gallery_file_ext
+mod_download_gallery_settings
+mod_droplets
+mod_form_fields
+mod_form_settings
+mod_jsadmin
+mod_menu_link
+mod_mpform_fields
+od_mpform_settings
+mod_news_settings
+mod_output_filter
+mod_section_pick
+mod_topics_settings
+mod_addons
+mod_wbanner_groups
+mod_wbanner_stats
+mod_wrapper
+pages
+search
+sections
+settings
+users
Index: trunk/admin/media/MediaWhiteList
===================================================================
--- trunk/admin/media/MediaWhiteList	(nonexistent)
+++ trunk/admin/media/MediaWhiteList	(revision 2)
@@ -0,0 +1,33 @@
+mod_addon_file_editor
+mod_bookmarks_groups
+mod_bookmarks_links
+mod_bookmarks_settings
+mod_brax_highslide_images
+mod_brax_highslide_settings
+mod_capslider_groups
+mod_capslider_slide
+mod_captcha_control
+mod_code
+mod_color4code
+mod_download_gallery_files
+mod_download_gallery_settings
+mod_droplets
+mod_form_fields
+mod_form_settings
+mod_form_submissions
+mod_mpform_settings
+mod_mpform_submissions
+mod_news_comments
+mod_news_groups
+mod_news_posts
+mod_news_settings
+mod_output_filter
+mod_section_pick
+mod_topics
+mod_topics_comments
+mod_topics_settings
+mod_addons
+mod_wbanner_banner
+mod_wrapper
+mod_wysiwyg
+mod_wysiwyg_hist
Index: trunk/admin/media/browse.php
===================================================================
--- trunk/admin/media/browse.php	(nonexistent)
+++ trunk/admin/media/browse.php	(revision 2)
@@ -0,0 +1,382 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+
+$admin = new admin('Media', 'media', false);
+
+$starttime = explode(" ", microtime());
+$starttime = $starttime[0]+$starttime[1];
+
+// Include the WB functions file
+if(!function_exists('check_media_path')) { require(WB_PATH.'/framework/functions.php'); }
+include ('parameters.php');
+
+// check if theme language file exists for the language set by the user (e.g. DE, EN)
+if(file_exists(THEME_PATH .'/languages/EN.php')) {
+require(THEME_PATH .'/languages/EN.php');
+}
+if(file_exists(THEME_PATH .'/languages/'.LANGUAGE .'.php')) {
+    require(THEME_PATH .'/languages/'.LANGUAGE .'.php');
+}
+
+// Byte convert for filesize
+function byte_convert($bytes) {
+    $symbol = array(' bytes', ' KB', ' MB', ' GB', ' TB');
+    $exp = 0;
+    $converted_value = 0;
+    if( $bytes > 0 ) {
+        $exp = floor( log($bytes)/log(1024) );
+        $converted_value = ( $bytes/pow(1024,floor($exp)) );
+    }
+    return sprintf( '%.2f '.$symbol[$exp], $converted_value );
+}
+
+// Get file extension
+function get_filetype($fname) {
+    $pathinfo = pathinfo($fname);
+    $extension = (isset($pathinfo['extension'])) ? strtolower($pathinfo['extension']) : '';
+    return $extension;
+}
+
+// Get file extension for icons
+function get_filetype_icon($fname) {
+    $pathinfo = pathinfo($fname);
+    $extension = (isset($pathinfo['extension'])) ? strtolower($pathinfo['extension']) : '';
+    if (file_exists(THEME_PATH.'/images/files/'.$extension.'.png')) {
+        return $extension;
+    } else {
+        return 'blank_16';
+    }
+}
+
+function ToolTip($name, $detail = '')
+{
+//    parse_str($name, $array);
+//    $name = $array['img'];
+    $parts = explode(".", $name);
+    $ext = strtolower( end($parts));
+    if (strpos('.gif.jpg.jpeg.png.bmp.', $ext))
+    {
+        $retVal = 'onmouseover="return overlib('.
+            '\'<img src=\\\''.($name).'\\\''.
+            'alt=\\\'\\\' '.
+            'maxwidth=\\\'300\\\' '.
+            'maxheight=\\\'300\\\' />\','.
+//            '>\','.
+//            'CAPTION,\''.basename($name).'\','.
+            'FGCOLOR,\'#ffffff\','.
+            'BGCOLOR,\'#557c9e\','.
+            'BORDER,1,'.
+            'FGCOLOR, \'#ffffff\','.
+            'BGCOLOR,\'#557c9e\','.
+            'CAPTIONSIZE,\'12px\','.
+            'CLOSETEXT,\'X\','.
+            'CLOSECOLOR,\'#ffffff\','.
+            'CLOSESIZE,\'14px\','.
+            'VAUTO,'.
+            'HAUTO,'.
+            ''.
+//            'STICKY,'.
+            'MOUSEOFF,'.
+            'WRAP,'.
+            'CELLPAD,5'.
+            ''.
+            ''.
+            ''.
+            ')" onmouseout="return nd()"';
+        return $retVal;
+//        return ('onmouseover="return overlib(\'<img src=\\\''.($name).'\\\' maxwidth=\\\'600\\\'  maxheight=\\\'600\\\'>\',BORDER,1,FGCOLOR, \'#ffffff\',VAUTO,WIDTH)" onmouseout="return nd()" ');
+    } else {
+        return '';
+    }
+}
+
+function fsize($size) {
+   if($size == 0) return("0 Bytes");
+   $filesizename = array(" bytes", " kB", " MB", " GB", " TB");
+   return round($size/pow(1024, ($i = floor(log($size, 1024)))), 1) . $filesizename[$i];
+}
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('media_browse.htt')));
+$template->set_file('page', 'media_browse.htt');
+$template->set_block('page', 'main_block', 'main');
+// Get the current dir
+//$currentHome = $admin->get_home_folder();
+$currentHome = (defined('HOME_FOLDERS') && HOME_FOLDERS) ? $admin->get_home_folder() : '';
+
+// set directory if you call from menu
+$directory =    (($currentHome) AND (!array_key_exists('dir',$_GET)))
+                ?
+                $currentHome
+                :
+                $admin->strip_slashes($admin->get_get('dir')) ;
+
+// check for correct directory
+if ($currentHome && stripos(WB_PATH.MEDIA_DIRECTORY.$directory,WB_PATH.MEDIA_DIRECTORY.$currentHome)===false) {
+    $directory = $currentHome;
+}
+if($directory == '/' OR $directory == '\\') {$directory = '';}
+
+$sBackLink = WB_PATH.MEDIA_DIRECTORY.$directory;
+if(!is_readable( $sBackLink )) {
+$directory = dirname($directory);
+// reload parent page to rebuild the dropdowns
+echo "<script type=\"text/javascript\">
+<!--
+// Get the location object
+var locationObj = document.location;
+// Set the value of the location object
+parent.document.location = 'index.php';
+-->
+</script>";
+}
+
+$dir_backlink = 'browse.php?dir='.$directory;
+
+// Check to see if it contains ../
+if (!check_media_path($directory)) {
+    // $admin->print_header();
+    $admin->print_error($MESSAGE['MEDIA_DIR_DOT_DOT_SLASH']);
+}
+
+if(!file_exists(WB_PATH.MEDIA_DIRECTORY.$directory)) {
+    // $admin->print_header();
+    $admin->print_error($MESSAGE['MEDIA_DIR_DOES_NOT_EXIST']);
+}
+
+// Check to see if the user wanted to go up a directory into the parent folder
+if($admin->get_get('up') == 1) {
+    $parent_directory = dirname($directory);
+    header("Location: browse.php?dir=$parent_directory");
+    exit(0);
+}
+
+if ($_SESSION['GROUP_ID'] != 1 && (isset($pathsettings['global']['admin_only']) && $pathsettings['global']['admin_only']) ) { // Only show admin the settings link
+    $template->set_var('DISPLAY_SETTINGS', 'hide');
+}
+
+// Workout the parent dir link
+$parent_dir_link = ADMIN_URL.'/media/browse.php?dir='.$directory.'&amp;up=1';
+// Workout if the up arrow should be shown
+if(($directory == '') or ($directory==$currentHome)) {
+    $display_up_arrow = 'hide';
+} else {
+    $display_up_arrow = '';
+}
+
+// Insert values
+$template->set_var(array(
+                    'THEME_URL' => THEME_URL,
+                    // 'THEME_URL' => '',
+                    'CURRENT_DIR' => $directory,
+                    'PARENT_DIR_LINK' => $parent_dir_link,
+                    'DISPLAY_UP_ARROW' => $display_up_arrow,
+                    'INCLUDE_PATH' => WB_URL.'/include'
+                )
+            );
+
+// Get home folder not to show
+//$home_folders = get_home_folders();
+$home_folders = (defined('HOME_FOLDERS') && HOME_FOLDERS) ? get_home_folders() : array();
+
+// Generate list
+$template->set_block('main_block', 'list_block', 'list');
+
+$usedFiles = array();
+// require_once(ADMIN_PATH.'/media/dse.php');
+// $filename =  $currentdir;
+if(!empty($currentdir)) {
+    $usedFiles = $Dse->getMatchesFromDir( $currentdir, DseTwo::RETURN_USED);
+}
+
+$DIR  = array();
+$FILE = array();
+// Check for potentially malicious files
+$forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+if($handle = opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$directory)) {
+    // Loop through the files and dirs an add to list
+   while (false !== ($file = readdir($handle))) {
+        $info = pathinfo($file);
+        $ext = isset($info['extension']) ? $info['extension'] : '';
+        if(substr($file, 0, 1) != '.' AND $file != '.svn' AND $file != 'index.php') {
+            if( !preg_match('/'.$forbidden_file_types.'$/i', $ext) ) {
+                if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
+//                    if( !isset($home_folders[$directory.'/'.$file]) ) {
+                    if(!isset($home_folders[$directory.'/'.$file]) || $currentHome =='' )
+                    {
+                        $DIR[] = $file;
+                    }
+                } else {
+                    $FILE[] = $file;
+                }
+            }
+        }
+    }
+closedir($handle);
+}
+    $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+    sort($DIR, $iSortFlags);
+    sort($FILE, $iSortFlags);
+    $aListDir = array_merge($DIR,$FILE);
+    // Now parse these values to the template
+    $temp_id = 0;
+    $row_bg_color = 'FFF';
+    if(isset($aListDir)) {
+        foreach($aListDir AS $name)
+        {
+            $sFileName = WB_PATH.'/'.MEDIA_DIRECTORY.$directory.'/'.$name;
+            if (is_dir($sFileName)){
+            $link_name = str_replace(' ', '%20', $name);
+            $temp_id++;
+            $template->set_var(array(
+                                'NAME' => $name,
+                                'NAME_SLASHED' => addslashes($name),
+                                'TEMP_ID' => $admin->getIDKEY($temp_id),
+                                // 'TEMP_ID' => $temp_id,
+                                'LINK' => "browse.php?dir=$directory/$link_name",
+                                'LINK_TARGET' => '_self',
+                                'ROW_BG_COLOR' => $row_bg_color,
+                                'FT_ICON' => THEME_URL.'/images/folder_16.png',
+                                'FILETYPE_ICON' => THEME_URL.'/images/folder_16.png',
+                                'MOUSEOVER' => '',
+                                'IMAGEDETAIL' => '',
+                                'SIZE' => '--',
+                                'DATE' => '',
+                                'PREVIEW' => '',
+                                'IMAGE_TITLE' => $name,
+                                'IMAGE_EXIST' => 'blank_16.gif'
+                            )
+                        );
+            $template->parse('list', 'list_block', true);
+            // Code to alternate row colors
+            $row_bg_color = (($row_bg_color == 'FFF') ?'ECF1F3':'FFF');
+    }else {
+        $filepreview = array('jpg','gif','tif','tiff','png','txt','css','js','cfg','conf','pdf','zip','gz','doc');
+            $size = filesize(WB_PATH.'/'.MEDIA_DIRECTORY.$directory.'/'.$name);
+            $bytes = byte_convert($size);
+            $fdate = filemtime(WB_PATH.'/'.MEDIA_DIRECTORY.$directory.'/'.$name);
+            $date = gmdate(DATE_FORMAT.' '.TIME_FORMAT, $fdate);
+            $filetypeicon = get_filetype_icon(WB_URL.MEDIA_DIRECTORY.$directory.'/'.$name);
+            $filetype = get_filetype(WB_URL.MEDIA_DIRECTORY.$directory.'/'.$name);
+
+            if (in_array($filetype, $filepreview)) {
+                $preview = 'preview';
+            } else {
+                $preview = '';
+            }
+            $temp_id++;
+            $imgdetail = '';
+            // $icon = THEME_URL.'/images/blank_16.gif';
+            $icon = '';
+            $tooltip = '';
+            if (!$pathsettings['global']['show_thumbs']) {
+                $info = getimagesize(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$name);
+                if ($info[0]) {
+                    $imgdetail = fsize(filesize(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$name)).'<br /> '.$info[0].' x '.$info[1].' px';
+                    $icon = 'thumb.php?t=1&amp;img='.$directory.'/'.$name;
+                    $tooltip = ToolTip('thumb.php?t=2&amp;img='.$directory.'/'.$name);
+                }
+            }
+            $filetype_url = THEME_URL.'/images/files/'.$filetypeicon.'.png';
+            $template->set_var(array(
+                                'NAME' => $name,
+                                'NAME_SLASHED' => addslashes($name),
+                                'TEMP_ID' => $admin->getIDKEY($temp_id),
+                                // 'TEMP_ID' => $temp_id,
+                                'LINK' => WB_URL.MEDIA_DIRECTORY.$directory.'/'.$name,
+                                'LINK_TARGET' => '_blank',
+                                'ROW_BG_COLOR' => $row_bg_color,
+                                'FT_ICON' => empty($icon) ? $filetype_url : $icon,
+                                'FILETYPE_ICON' => $filetype_url,
+                                'MOUSEOVER' => $tooltip,
+                                'IMAGEDETAIL' => $imgdetail,
+                                'SIZE' => $bytes,
+                                'DATE' => $date,
+                                'PREVIEW' => $preview,
+                                'IMAGE_TITLE' => $name,
+                                'IMAGE_EXIST' =>  'blank_16.gif'
+                            )
+                        );
+            $template->parse('list', 'list_block', true);
+            // Code to alternate row colors
+            if($row_bg_color == 'FFF') {
+                $row_bg_color = 'ECF1F3';
+            } else {
+                $row_bg_color = 'FFF';
+            }
+    }
+        } #foreach
+    }
+
+// If no files are in the media folder say so
+if($temp_id == 0) {
+    $template->set_var('DISPLAY_LIST_TABLE', 'hide');
+} else {
+    $template->set_var('DISPLAY_NONE_FOUND', 'hide');
+}
+
+//if($currentHome=='') {
+if( !in_array($admin->get_username(), explode('/',$directory)) ) {
+// Insert permissions values
+    if($admin->get_permission('media_rename') != true) {
+        $template->set_var('DISPLAY_RENAME', 'hide');
+    }
+    if($admin->get_permission('media_delete') != true) {
+        $template->set_var('DISPLAY_DELETE', 'hide');
+    }
+}
+
+// Insert language text and messages
+$template->set_var(array(
+                    'MEDIA_DIRECTORY' => MEDIA_DIRECTORY,
+                    'TEXT_CURRENT_FOLDER' => $TEXT['CURRENT_FOLDER'],
+                    'TEXT_RELOAD' => $TEXT['RELOAD'],
+                    'TEXT_RENAME' => $TEXT['RENAME'],
+                    'TEXT_DELETE' => $TEXT['DELETE'],
+                    'TEXT_SIZE' => $TEXT['SIZE'],
+                    'TEXT_DATE' => $TEXT['DATE'],
+                    'TEXT_NAME' => $TEXT['NAME'],
+                    'TEXT_TYPE' => $TEXT['TYPE'],
+                    'TEXT_UP' => $TEXT['UP'],
+                    'NONE_FOUND' => $MESSAGE['MEDIA_NONE_FOUND'],
+                    'CHANGE_SETTINGS' => $TEXT['MODIFY_SETTINGS'],
+                    'CONFIRM_DELETE' => $MESSAGE['MEDIA_CONFIRM_DELETE']
+                )
+            );
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+/*
+$endtime=explode(" ", microtime());
+$endtime=$endtime[0]+$endtime[1];
+$debugVMsg = '';
+if($admin->ami_group_member('1') ) {
+    $debugVMsg  = "<p>Mask loaded in ".round($endtime - $starttime,6)." Sec,&nbsp;&nbsp;";
+    $debugVMsg .= "Memory in use ".number_format(memory_get_usage(true), 0, ',', '.')."&nbsp;Byte,&nbsp;&nbsp;";
+    $debugVMsg .= sizeof(get_included_files())."&nbsp;included files</p>";
+    // $debugVMsg = print_message($debugVMsg,'#','debug',-1,false);
+    print $debugVMsg.'<br />';
+ }
+*/
\ No newline at end of file

Property changes on: trunk/admin/media/browse.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/create.php
===================================================================
--- trunk/admin/media/create.php	(nonexistent)
+++ trunk/admin/media/create.php	(revision 2)
@@ -0,0 +1,78 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Include the WB functions file
+if( !defined('createFolderProtectFile') ){ require(WB_PATH.'/framework/functions.php');  }
+
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Media', 'media_create', false);
+
+// Get dir name and target location
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$name = (isset(${$requestMethod}['name'])) ? ${$requestMethod}['name'] : '';
+
+// Check to see if name or target contains ../
+if(strstr($name, '..')) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['MEDIA_NAME_DOT_DOT_SLASH']);
+}
+
+// Remove bad characters
+$name = trim(media_filename($name),'.');
+
+// Target location
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$target = (isset(${$requestMethod}['target'])) ? ${$requestMethod}['target'] : '';
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+// After check print the header
+$admin->print_header();
+
+if (!check_media_path($target, false)) {
+    $admin->print_error($MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH']);
+}
+
+// Create relative path of the new dir name
+$directory = WB_PATH.$target.'/'.$name;
+
+// Check to see if the folder already exists
+if(file_exists($directory)) {
+    $admin->print_error($MESSAGE['MEDIA_DIR_EXISTS']);
+}
+
+//if ( sizeof(createFolderProtectFile( $directory )) )
+if ( !make_dir( $directory ) )
+{
+    $admin->print_error($MESSAGE['MEDIA_DIR_NOT_MADE']);
+} else {
+//    createFolderProtectFile($directory);
+    $usedFiles = array();
+    // feature freeze
+    // require_once(ADMIN_PATH.'/media/dse.php');
+    $admin->print_success($MESSAGE['MEDIA_DIR_MADE']);
+}
+
+// Print admin
+$admin->print_footer();

Property changes on: trunk/admin/media/create.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/delete.php
===================================================================
--- trunk/admin/media/delete.php	(nonexistent)
+++ trunk/admin/media/delete.php	(revision 2)
@@ -0,0 +1,125 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require(dirname(dirname(__DIR__)).'/config.php');
+// Create admin object
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Media', 'media_delete', false);
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get the current dir
+$directory = $admin->get_get('dir');
+$directory = ($directory == '/') ?  '' : $directory;
+
+$dirlink = 'browse.php?dir='.$directory;
+$rootlink = 'browse.php?dir=';
+
+// Check to see if it contains ..
+if (!check_media_path($directory)) {
+    // $admin->print_header();
+    $admin->print_error($MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'],$rootlink,false );
+}
+
+// Get the file id
+$file_id = intval($admin->checkIDKEY('id', false, $_SERVER['REQUEST_METHOD']))-1;
+if ($file_id===false) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $dirlink,false);
+}
+
+// Get home folder not to show
+$home_folders = get_home_folders();
+$usedFiles = array();
+// feature freeze
+// require_once(ADMIN_PATH.'/media/dse.php');
+/*
+
+if(!empty($currentdir)) {
+    $usedFiles = $Dse->getMatchesFromDir( $directory, DseTwo::RETURN_USED);
+}
+*/
+
+$DIR  = array();
+$FILE = array();
+// Check for potentially malicious files
+$forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+//$aDirList = glob (WB_PATH.MEDIA_DIRECTORY.'/'.$directory.'/*',GLOB_MARK|GLOB_NOSORT);
+// Figure out what folder name the temp id is
+if($handle = opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$directory)) {
+    // Loop through the files and dirs an add to list
+   while (false !== ($file = readdir($handle))) {
+        $info = pathinfo($file);
+        $ext = isset($info['extension']) ? $info['extension'] : '';
+        if(substr($file, 0, 1) != '.' AND $file != '.svn' AND $file != 'index.php') {
+            if( !preg_match('/'.$forbidden_file_types.'$/i', $ext) ) {
+                if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
+                    if(!isset($home_folders[$directory.'/'.$file])) {
+                        $DIR[] = $file;
+                    }
+                } else {
+                    $FILE[] = $file;
+                }
+            }
+        }
+    }
+closedir($handle);
+}
+
+    $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+    sort($DIR, $iSortFlags);
+    sort($FILE, $iSortFlags);
+    $aListDir = array_merge($DIR,$FILE);
+    $temp_id = 0;
+    if(isset($aListDir)) {
+        foreach($aListDir AS $name) {
+            if(!isset($delete_file) AND $file_id == $temp_id) {
+                $delete_file = $name;
+                $type = is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$delete_file)?'folder':'file';
+            }
+            $temp_id++;
+        }
+    }
+
+// Check to see if we could find an id to match
+if(!isset($delete_file)) {
+    $admin->print_error($MESSAGE['MEDIA_FILE_NOT_FOUND'], $dirlink, false);
+}
+$relative_path = WB_PATH.MEDIA_DIRECTORY.'/'.$directory.'/'.$delete_file;
+// Check if the file/folder exists
+if(!file_exists($relative_path)) {
+    $admin->print_error($MESSAGE['MEDIA_FILE_NOT_FOUND'], $dirlink, false);
+}
+
+// Find out whether its a file or folder
+/**/
+if($type == 'folder') {
+    // Try and delete the directory
+    if(rm_full_dir($relative_path)) {
+        $admin->print_success($MESSAGE['MEDIA_DELETED_DIR'], $dirlink);
+    } else {
+        $admin->print_error($MESSAGE['MEDIA_CANNOT_DELETE_DIR'], $dirlink, false);
+    }
+} else {
+    // Try and delete the file
+    if(unlink($relative_path)) {
+        $admin->print_success($MESSAGE['MEDIA_DELETED_FILE'], $dirlink);
+    } else {
+        $admin->print_error($MESSAGE['MEDIA_CANNOT_DELETE_FILE'], $dirlink, false);
+    }
+}

Property changes on: trunk/admin/media/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/dse.php
===================================================================
--- trunk/admin/media/dse.php	(nonexistent)
+++ trunk/admin/media/dse.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+if (!defined('WB_PATH')) die(header('Location: index.php'));
+
+/*
+$DB_HOST = DB_HOST;
+$DB_NAME = DB_NAME ;
+$DB_USER = DB_USERNAME;
+$DB_PASS = DB_PASSWORD;
+$link = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
+mysql_select_db ( $DB_NAME, $link );
+*/
+require_once(WB_PATH.'/framework/DseTwo.php');
+
+$CachePath = WB_PATH.'/temp/mediacache';
+// $ListFile = ADMIN_PATH.'/media/MediaBlackList'; // WhiteList   BlackList
+$ListFile = ADMIN_PATH.'/media/MediaWhiteList'; // WhiteList   BlackList
+
+$link = $database->db_handle;
+$Dse = new DseTwo();
+$Dse->db_handle = $link;
+$Dse->db_name = DB_NAME;
+$Dse->base_dir = WB_PATH.MEDIA_DIRECTORY;
+$Dse->table_prefix = TABLE_PREFIX;
+$Dse->cache_dir = $CachePath;
+
+$Dse->addControllList($ListFile, DseTwo::USE_WHITELIST );  // $type const USE_ALL / USE_BLACKLIST / USE_WHITELIST
+
+if(!empty($directory)) {
+    $usedFiles = $Dse->getMatchesFromDir( $directory, DseTwo::RETURN_USED);
+}
+

Property changes on: trunk/admin/media/dse.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/inc/GdThumb.inc.php
===================================================================
--- trunk/admin/media/inc/GdThumb.inc.php	(nonexistent)
+++ trunk/admin/media/inc/GdThumb.inc.php	(revision 2)
@@ -0,0 +1,1185 @@
+<?php
+/**
+ * PhpThumb GD Thumb Class Definition File
+ * 
+ * This file contains the definition for the GdThumb object
+ * 
+ * PHP Version 5 with GD 2.0+
+ * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
+ * Copyright (c) 2009, Ian Selby/Gen X Design
+ * 
+ * Author(s): Ian Selby <ian@gen-x-design.com>
+ * 
+ * Licensed under the MIT License
+ * Redistributions of files must retain the above copyright notice.
+ * 
+ * @author Ian Selby <ian@gen-x-design.com>
+ * @copyright Copyright (c) 2009 Gen X Design
+ * @link http://phpthumb.gxdlabs.com
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @version 3.0
+ * @package PhpThumb
+ * @filesource
+ */
+
+/**
+ * GdThumb Class Definition
+ * 
+ * This is the GD Implementation of the PHP Thumb library.
+ * 
+ * @package PhpThumb
+ * @subpackage Core
+ */
+class GdThumb extends ThumbBase
+{
+    /**
+     * The prior image (before manipulation)
+     * 
+     * @var resource
+     */
+    protected $oldImage;
+    /**
+     * The working image (used during manipulation)
+     * 
+     * @var resource
+     */
+    protected $workingImage;
+    /**
+     * The current dimensions of the image
+     * 
+     * @var array
+     */
+    protected $currentDimensions;
+    /**
+     * The new, calculated dimensions of the image
+     * 
+     * @var array
+     */
+    protected $newDimensions;
+    /**
+     * The options for this class
+     * 
+     * This array contains various options that determine the behavior in
+     * various functions throughout the class.  Functions note which specific 
+     * option key / values are used in their documentation
+     * 
+     * @var array
+     */
+    protected $options;
+    /**
+     * The maximum width an image can be after resizing (in pixels)
+     * 
+     * @var int
+     */
+    protected $maxWidth;
+    /**
+     * The maximum height an image can be after resizing (in pixels)
+     * 
+     * @var int
+     */
+    protected $maxHeight;
+    /**
+     * The percentage to resize the image by
+     * 
+     * @var int
+     */
+    protected $percent;
+    
+    /**
+     * Class Constructor
+     * 
+     * @return GdThumb 
+     * @param string $fileName
+     */
+    public function __construct ($fileName, $options = array(), $isDataStream = false)
+    {
+        parent::__construct($fileName, $isDataStream);
+        
+        $this->determineFormat();
+        
+        if ($this->isDataStream === false)
+        {
+            $this->verifyFormatCompatiblity();
+        }
+        
+        switch ($this->format)
+        {
+            case 'GIF':
+                $this->oldImage = imagecreatefromgif($this->fileName);
+                break;
+            case 'JPG':
+                $this->oldImage = imagecreatefromjpeg($this->fileName);
+                break;
+            case 'PNG':
+                $this->oldImage = imagecreatefrompng($this->fileName);
+                break;
+            case 'STRING':
+                $this->oldImage = imagecreatefromstring($this->fileName);
+                break;
+        }
+    
+        $this->currentDimensions = array
+        (
+            'width'     => imagesx($this->oldImage),
+            'height'    => imagesy($this->oldImage)
+        );
+        
+        $this->setOptions($options);
+        
+        // TODO: Port gatherImageMeta to a separate function that can be called to extract exif data
+    }
+    
+    /**
+     * Class Destructor
+     * 
+     */
+    public function __destruct ()
+    {
+        if (is_resource($this->oldImage))
+        {
+            imagedestroy($this->oldImage);
+        }
+        
+        if (is_resource($this->workingImage))
+        {
+            imagedestroy($this->workingImage);
+        }
+    }
+    
+    ##############################
+    # ----- API FUNCTIONS ------ #
+    ##############################
+    
+    /**
+     * Resizes an image to be no larger than $maxWidth or $maxHeight
+     * 
+     * If either param is set to zero, then that dimension will not be considered as a part of the resize.
+     * Additionally, if $this->options['resizeUp'] is set to true (false by default), then this function will
+     * also scale the image up to the maximum dimensions provided.
+     * 
+     * @param int $maxWidth The maximum width of the image in pixels
+     * @param int $maxHeight The maximum height of the image in pixels
+     * @return GdThumb
+     */
+    public function resize ($maxWidth = 0, $maxHeight = 0)
+    {
+        // make sure our arguments are valid
+        if (!is_numeric($maxWidth))
+        {
+            throw new InvalidArgumentException('$maxWidth must be numeric');
+        }
+        
+        if (!is_numeric($maxHeight))
+        {
+            throw new InvalidArgumentException('$maxHeight must be numeric');
+        }
+        
+        // make sure we're not exceeding our image size if we're not supposed to
+        if ($this->options['resizeUp'] === false)
+        {
+            $this->maxHeight    = (intval($maxHeight) > $this->currentDimensions['height']) ? $this->currentDimensions['height'] : $maxHeight;
+            $this->maxWidth        = (intval($maxWidth) > $this->currentDimensions['width']) ? $this->currentDimensions['width'] : $maxWidth;
+        }
+        else
+        {
+            $this->maxHeight    = intval($maxHeight);
+            $this->maxWidth        = intval($maxWidth);
+        }
+        
+        // get the new dimensions...
+        $this->calcImageSize($this->currentDimensions['width'], $this->currentDimensions['height']);
+        
+        // create the working image
+        if (function_exists('imagecreatetruecolor'))
+        {
+            $this->workingImage = imagecreatetruecolor($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
+        }
+        else
+        {
+            $this->workingImage = imagecreate($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
+        }
+        
+        $this->preserveAlpha();        
+        
+        // and create the newly sized image
+        imagecopyresampled
+        (
+            $this->workingImage,
+            $this->oldImage,
+            0,
+            0,
+            0,
+            0,
+            $this->newDimensions['newWidth'],
+            $this->newDimensions['newHeight'],
+            $this->currentDimensions['width'],
+            $this->currentDimensions['height']
+        );
+
+        // update all the variables and resources to be correct
+        $this->oldImage                     = $this->workingImage;
+        $this->currentDimensions['width']     = $this->newDimensions['newWidth'];
+        $this->currentDimensions['height']     = $this->newDimensions['newHeight'];
+        
+        return $this;
+    }
+    
+    /**
+     * Adaptively Resizes the Image
+     * 
+     * This function attempts to get the image to as close to the provided dimensions as possible, and then crops the 
+     * remaining overflow (from the center) to get the image to be the size specified
+     * 
+     * @param int $maxWidth
+     * @param int $maxHeight
+     * @return GdThumb
+     */
+    public function adaptiveResize ($width, $height)
+    {
+        // make sure our arguments are valid
+        if (!is_numeric($width) || $width  == 0)
+        {
+            throw new InvalidArgumentException('$width must be numeric and greater than zero');
+        }
+        
+        if (!is_numeric($height) || $height == 0)
+        {
+            throw new InvalidArgumentException('$height must be numeric and greater than zero');
+        }
+        
+        // make sure we're not exceeding our image size if we're not supposed to
+        if ($this->options['resizeUp'] === false)
+        {
+            $this->maxHeight    = (intval($height) > $this->currentDimensions['height']) ? $this->currentDimensions['height'] : $height;
+            $this->maxWidth        = (intval($width) > $this->currentDimensions['width']) ? $this->currentDimensions['width'] : $width;
+        }
+        else
+        {
+            $this->maxHeight    = intval($height);
+            $this->maxWidth        = intval($width);
+        }
+        
+        $this->calcImageSizeStrict($this->currentDimensions['width'], $this->currentDimensions['height']);
+        
+        // resize the image to be close to our desired dimensions
+        $this->resize($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
+        
+        // reset the max dimensions...
+        if ($this->options['resizeUp'] === false)
+        {
+            $this->maxHeight    = (intval($height) > $this->currentDimensions['height']) ? $this->currentDimensions['height'] : $height;
+            $this->maxWidth        = (intval($width) > $this->currentDimensions['width']) ? $this->currentDimensions['width'] : $width;
+        }
+        else
+        {
+            $this->maxHeight    = intval($height);
+            $this->maxWidth        = intval($width);
+        }
+        
+        // create the working image
+        if (function_exists('imagecreatetruecolor'))
+        {
+            $this->workingImage = imagecreatetruecolor($this->maxWidth, $this->maxHeight);
+        }
+        else
+        {
+            $this->workingImage = imagecreate($this->maxWidth, $this->maxHeight);
+        }
+        
+        $this->preserveAlpha();
+        
+        $cropWidth    = $this->maxWidth;
+        $cropHeight    = $this->maxHeight;
+        $cropX         = 0;
+        $cropY         = 0;
+        
+        // now, figure out how to crop the rest of the image...
+        if ($this->currentDimensions['width'] > $this->maxWidth)
+        {
+            $cropX = intval(($this->currentDimensions['width'] - $this->maxWidth) / 2);
+        }
+        elseif ($this->currentDimensions['height'] > $this->maxHeight)
+        {
+            $cropY = intval(($this->currentDimensions['height'] - $this->maxHeight) / 2);
+        }
+        
+        imagecopyresampled
+        (
+            $this->workingImage,
+            $this->oldImage,
+            0,
+            0,
+            $cropX,
+            $cropY,
+            $cropWidth,
+            $cropHeight,
+            $cropWidth,
+            $cropHeight
+        );
+        
+        // update all the variables and resources to be correct
+        $this->oldImage                     = $this->workingImage;
+        $this->currentDimensions['width']     = $this->maxWidth;
+        $this->currentDimensions['height']     = $this->maxHeight;
+        
+        return $this;
+    }
+    
+    /**
+     * Resizes an image by a given percent uniformly
+     * 
+     * Percentage should be whole number representation (i.e. 1-100)
+     * 
+     * @param int $percent
+     * @return GdThumb
+     */
+    public function resizePercent ($percent = 0)
+    {
+        if (!is_numeric($percent))
+        {
+            throw new InvalidArgumentException ('$percent must be numeric');
+        }
+        
+        $this->percent = intval($percent);
+        
+        $this->calcImageSizePercent($this->currentDimensions['width'], $this->currentDimensions['height']);
+        
+        if (function_exists('imagecreatetruecolor'))
+        {
+            $this->workingImage = imagecreatetruecolor($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
+        }
+        else
+        {
+            $this->workingImage = imagecreate($this->newDimensions['newWidth'], $this->newDimensions['newHeight']);
+        }
+        
+        $this->preserveAlpha();
+        
+        ImageCopyResampled(
+            $this->workingImage,
+            $this->oldImage,
+            0,
+            0,
+            0,
+            0,
+            $this->newDimensions['newWidth'],
+            $this->newDimensions['newHeight'],
+            $this->currentDimensions['width'],
+            $this->currentDimensions['height']
+        );
+
+        $this->oldImage                     = $this->workingImage;
+        $this->currentDimensions['width']     = $this->newDimensions['newWidth'];
+        $this->currentDimensions['height']     = $this->newDimensions['newHeight'];
+        
+        return $this;
+    }
+    
+    /**
+     * Crops an image from the center with provided dimensions
+     * 
+     * If no height is given, the width will be used as a height, thus creating a square crop
+     * 
+     * @param int $cropWidth
+     * @param int $cropHeight
+     * @return GdThumb
+     */
+    public function cropFromCenter ($cropWidth, $cropHeight = null)
+    {
+        if (!is_numeric($cropWidth))
+        {
+            throw new InvalidArgumentException('$cropWidth must be numeric');
+        }
+        
+        if ($cropHeight !== null && !is_numeric($cropHeight))
+        {
+            throw new InvalidArgumentException('$cropHeight must be numeric');
+        }
+        
+        if ($cropHeight === null)
+        {
+            $cropHeight = $cropWidth;
+        }
+        
+        $cropWidth    = ($this->currentDimensions['width'] < $cropWidth) ? $this->currentDimensions['width'] : $cropWidth;
+        $cropHeight = ($this->currentDimensions['height'] < $cropHeight) ? $this->currentDimensions['height'] : $cropHeight;
+        
+        $cropX = intval(($this->currentDimensions['width'] - $cropWidth) / 2);
+        $cropY = intval(($this->currentDimensions['height'] - $cropHeight) / 2);
+        
+        $this->crop($cropX, $cropY, $cropWidth, $cropHeight);
+        
+        return $this;
+    }
+    
+    /**
+     * Vanilla Cropping - Crops from x,y with specified width and height
+     * 
+     * @param int $startX
+     * @param int $startY
+     * @param int $cropWidth
+     * @param int $cropHeight
+     * @return GdThumb
+     */
+    public function crop ($startX, $startY, $cropWidth, $cropHeight)
+    {
+        // validate input
+        if (!is_numeric($startX))
+        {
+            throw new InvalidArgumentException('$startX must be numeric');
+        }
+        
+        if (!is_numeric($startY))
+        {
+            throw new InvalidArgumentException('$startY must be numeric');
+        }
+        
+        if (!is_numeric($cropWidth))
+        {
+            throw new InvalidArgumentException('$cropWidth must be numeric');
+        }
+        
+        if (!is_numeric($cropHeight))
+        {
+            throw new InvalidArgumentException('$cropHeight must be numeric');
+        }
+        
+        // do some calculations
+        $cropWidth    = ($this->currentDimensions['width'] < $cropWidth) ? $this->currentDimensions['width'] : $cropWidth;
+        $cropHeight = ($this->currentDimensions['height'] < $cropHeight) ? $this->currentDimensions['height'] : $cropHeight;
+        
+        // ensure everything's in bounds
+        if (($startX + $cropWidth) > $this->currentDimensions['width'])
+        {
+            $startX = ($this->currentDimensions['width'] - $cropWidth);
+            
+        }
+        
+        if (($startY + $cropHeight) > $this->currentDimensions['height'])
+        {
+            $startY = ($this->currentDimensions['height'] - $cropHeight);
+        }
+        
+        if ($startX < 0) 
+        {
+            $startX = 0;
+        }
+        
+        if ($startY < 0) 
+        {
+            $startY = 0;
+        }
+        
+        // create the working image
+        if (function_exists('imagecreatetruecolor'))
+        {
+            $this->workingImage = imagecreatetruecolor($cropWidth, $cropHeight);
+        }
+        else
+        {
+            $this->workingImage = imagecreate($cropWidth, $cropHeight);
+        }
+        
+        $this->preserveAlpha();
+        
+        imagecopyresampled
+        (
+            $this->workingImage,
+            $this->oldImage,
+            0,
+            0,
+            $startX,
+            $startY,
+            $cropWidth,
+            $cropHeight,
+            $cropWidth,
+            $cropHeight
+        );
+        
+        $this->oldImage                     = $this->workingImage;
+        $this->currentDimensions['width']     = $cropWidth;
+        $this->currentDimensions['height']     = $cropHeight;
+        
+        return $this;
+    }
+    
+    /**
+     * Rotates image either 90 degrees clockwise or counter-clockwise
+     * 
+     * @param string $direction
+     * @retunrn GdThumb
+     */
+    public function rotateImage ($direction = 'CW') 
+    {
+        if ($direction == 'CW') 
+        {
+            $this->rotateImageNDegrees(90);
+        }
+        else 
+        {
+            $this->rotateImageNDegrees(-90);
+        }
+        
+        return $this;
+    }
+    
+    /**
+     * Rotates image specified number of degrees
+     * 
+     * @param int $degrees
+     * @return GdThumb
+     */
+    public function rotateImageNDegrees ($degrees)
+    {
+        if (!is_numeric($degrees))
+        {
+            throw new InvalidArgumentException('$degrees must be numeric');
+        }
+        
+        if (!function_exists('imagerotate'))
+        {
+            throw new RuntimeException('Your version of GD does not support image rotation.');
+        }
+        
+        $this->workingImage = imagerotate($this->oldImage, $degrees, 0);
+        
+        $newWidth                             = $this->currentDimensions['height'];
+        $newHeight                             = $this->currentDimensions['width'];
+        $this->oldImage                     = $this->workingImage;
+        $this->currentDimensions['width']     = $newWidth;
+        $this->currentDimensions['height']     = $newHeight;
+        
+        return $this;
+    }
+    
+    /**
+     * Shows an image
+     * 
+     * This function will show the current image by first sending the appropriate header
+     * for the format, and then outputting the image data. If headers have already been sent, 
+     * a runtime exception will be thrown 
+     * 
+     * @param bool $rawData Whether or not the raw image stream should be output
+     * @return GdThumb
+     */
+    public function show ($rawData = false) 
+    {
+        if (headers_sent())
+        {
+            throw new RuntimeException('Cannot show image, headers have already been sent');
+        }
+        
+        switch ($this->format) 
+        {
+            case 'GIF':
+                if ($rawData === false) 
+                { 
+                    header('Content-type: image/gif'); 
+                }
+                imagegif($this->oldImage);
+                break;
+            case 'JPG':
+                if ($rawData === false) 
+                { 
+                    header('Content-type: image/jpeg'); 
+                }
+                imagejpeg($this->oldImage, null, $this->options['jpegQuality']);
+                break;
+            case 'PNG':
+            case 'STRING':
+                if ($rawData === false) 
+                { 
+                    header('Content-type: image/png'); 
+                }
+                imagepng($this->oldImage);
+                break;
+        }
+        
+        return $this;
+    }
+    
+    /**
+     * Returns the Working Image as a String
+     *
+     * This function is useful for getting the raw image data as a string for storage in
+     * a database, or other similar things.
+     *
+     * @return string
+     */
+    public function getImageAsString ()
+    {
+        $data = null;
+        ob_start();
+        $this->show(true);
+        $data = ob_get_contents();
+        ob_end_clean();
+        
+        return $data;
+    }
+    
+    /**
+     * Saves an image
+     * 
+     * This function will make sure the target directory is writeable, and then save the image.
+     * 
+     * If the target directory is not writeable, the function will try to correct the permissions (if allowed, this
+     * is set as an option ($this->options['correctPermissions']).  If the target cannot be made writeable, then a
+     * RuntimeException is thrown.
+     * 
+     * TODO: Create additional paramter for color matte when saving images with alpha to non-alpha formats (i.e. PNG => JPG)
+     * 
+     * @param string $fileName The full path and filename of the image to save
+     * @param string $format The format to save the image in (optional, must be one of [GIF,JPG,PNG]
+     * @return GdThumb
+     */
+    public function save ($fileName, $format = null)
+    {
+        $validFormats = array('GIF', 'JPG', 'PNG');
+        $format = ($format !== null) ? strtoupper($format) : $this->format;
+
+        if (!in_array($format, $validFormats))
+        {
+            throw new InvalidArgumentException ('Invalid format type specified in save function: ' . $format);
+        }
+        
+        // make sure the directory is writeable
+        if (!is_writeable(dirname($fileName)))
+        {
+            // try to correct the permissions
+            if ($this->options['correctPermissions'] === true)
+            {
+                @chmod(dirname($fileName), 0777);
+                
+                // throw an exception if not writeable
+                if (!is_writeable(dirname($fileName)))
+                {
+                    throw new RuntimeException ('File is not writeable, and could not correct permissions: ' . $fileName);
+                }
+            }
+            // throw an exception if not writeable
+            else
+            {
+                throw new RuntimeException ('File not writeable: ' . $fileName);
+            }
+        }
+        
+        switch ($format) 
+        {
+            case 'GIF':
+                imagegif($this->oldImage, $fileName);
+                break;
+            case 'JPG':
+                imagejpeg($this->oldImage, $fileName, $this->options['jpegQuality']);
+                break;
+            case 'PNG':
+                imagepng($this->oldImage, $fileName);
+                break;
+        }
+        
+        return $this;
+    }
+    
+    #################################
+    # ----- GETTERS / SETTERS ----- #
+    #################################
+    
+    /**
+     * Sets $this->options to $options
+     * 
+     * @param array $options
+     */
+    public function setOptions ($options = array())
+    {
+        // make sure we've got an array for $this->options (could be null)
+        if (!is_array($this->options))
+        {
+            $this->options = array();
+        }
+        
+        // make sure we've gotten a proper argument
+        if (!is_array($options))
+        {
+            throw new InvalidArgumentException ('setOptions requires an array');
+        }
+        
+        // we've yet to init the default options, so create them here
+        if (sizeof($this->options) == 0)
+        {
+            $defaultOptions = array 
+            (
+                'resizeUp'                => false,
+                'jpegQuality'            => 100,
+                'correctPermissions'    => true,
+                'preserveAlpha'            => true,
+                'alphaMaskColor'        => array (255, 255, 255),
+                'preserveTransparency'    => true,
+                'transparencyMaskColor'    => array (0, 0, 0)
+            );
+        }
+        // otherwise, let's use what we've got already
+        else
+        {
+            $defaultOptions = $this->options;
+        }
+        
+        $this->options = array_merge($defaultOptions, $options);
+    }
+    
+    /**
+     * Returns $currentDimensions.
+     *
+     * @see GdThumb::$currentDimensions
+     */
+    public function getCurrentDimensions ()
+    {
+        return $this->currentDimensions;
+    }
+    
+    /**
+     * Sets $currentDimensions.
+     *
+     * @param object $currentDimensions
+     * @see GdThumb::$currentDimensions
+     */
+    public function setCurrentDimensions ($currentDimensions)
+    {
+        $this->currentDimensions = $currentDimensions;
+    }
+    
+    /**
+     * Returns $maxHeight.
+     *
+     * @see GdThumb::$maxHeight
+     */
+    public function getMaxHeight ()
+    {
+        return $this->maxHeight;
+    }
+    
+    /**
+     * Sets $maxHeight.
+     *
+     * @param object $maxHeight
+     * @see GdThumb::$maxHeight
+     */
+    public function setMaxHeight ($maxHeight)
+    {
+        $this->maxHeight = $maxHeight;
+    }
+    
+    /**
+     * Returns $maxWidth.
+     *
+     * @see GdThumb::$maxWidth
+     */
+    public function getMaxWidth ()
+    {
+        return $this->maxWidth;
+    }
+    
+    /**
+     * Sets $maxWidth.
+     *
+     * @param object $maxWidth
+     * @see GdThumb::$maxWidth
+     */
+    public function setMaxWidth ($maxWidth)
+    {
+        $this->maxWidth = $maxWidth;
+    }
+    
+    /**
+     * Returns $newDimensions.
+     *
+     * @see GdThumb::$newDimensions
+     */
+    public function getNewDimensions ()
+    {
+        return $this->newDimensions;
+    }
+    
+    /**
+     * Sets $newDimensions.
+     *
+     * @param object $newDimensions
+     * @see GdThumb::$newDimensions
+     */
+    public function setNewDimensions ($newDimensions)
+    {
+        $this->newDimensions = $newDimensions;
+    }
+    
+    /**
+     * Returns $options.
+     *
+     * @see GdThumb::$options
+     */
+    public function getOptions ()
+    {
+        return $this->options;
+    }
+    
+    /**
+     * Returns $percent.
+     *
+     * @see GdThumb::$percent
+     */
+    public function getPercent ()
+    {
+        return $this->percent;
+    }
+    
+    /**
+     * Sets $percent.
+     *
+     * @param object $percent
+     * @see GdThumb::$percent
+     */
+    public function setPercent ($percent)
+    {
+        $this->percent = $percent;
+    } 
+    
+    /**
+     * Returns $oldImage.
+     *
+     * @see GdThumb::$oldImage
+     */
+    public function getOldImage ()
+    {
+        return $this->oldImage;
+    }
+    
+    /**
+     * Sets $oldImage.
+     *
+     * @param object $oldImage
+     * @see GdThumb::$oldImage
+     */
+    public function setOldImage ($oldImage)
+    {
+        $this->oldImage = $oldImage;
+    }
+    
+    /**
+     * Returns $workingImage.
+     *
+     * @see GdThumb::$workingImage
+     */
+    public function getWorkingImage ()
+    {
+        return $this->workingImage;
+    }
+    
+    /**
+     * Sets $workingImage.
+     *
+     * @param object $workingImage
+     * @see GdThumb::$workingImage
+     */
+    public function setWorkingImage ($workingImage)
+    {
+        $this->workingImage = $workingImage;
+    } 
+    
+    
+    #################################
+    # ----- UTILITY FUNCTIONS ----- #
+    #################################
+    
+    /**
+     * Calculates a new width and height for the image based on $this->maxWidth and the provided dimensions
+     * 
+     * @return array 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcWidth ($width, $height)
+    {
+        $newWidthPercentage    = (100 * $this->maxWidth) / $width;
+        $newHeight            = ($height * $newWidthPercentage) / 100;
+        
+        return array
+        (
+            'newWidth'    => intval($this->maxWidth),
+            'newHeight'    => intval($newHeight)
+        );
+    }
+    
+    /**
+     * Calculates a new width and height for the image based on $this->maxWidth and the provided dimensions
+     * 
+     * @return array 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcHeight ($width, $height)
+    {
+        $newHeightPercentage    = (100 * $this->maxHeight) / $height;
+        $newWidth                 = ($width * $newHeightPercentage) / 100;
+        
+        return array
+        (
+            'newWidth'    => ceil($newWidth),
+            'newHeight'    => ceil($this->maxHeight)
+        );
+    }
+    
+    /**
+     * Calculates a new width and height for the image based on $this->percent and the provided dimensions
+     * 
+     * @return array 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcPercent ($width, $height)
+    {
+        $newWidth    = ($width * $this->percent) / 100;
+        $newHeight    = ($height * $this->percent) / 100;
+        
+        return array 
+        (
+            'newWidth'    => ceil($newWidth),
+            'newHeight'    => ceil($newHeight)
+        );
+    }
+    
+    /**
+     * Calculates the new image dimensions
+     * 
+     * These calculations are based on both the provided dimensions and $this->maxWidth and $this->maxHeight
+     * 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcImageSize ($width, $height)
+    {
+        $newSize = array
+        (
+            'newWidth'    => $width,
+            'newHeight'    => $height
+        );
+        
+        if ($this->maxWidth > 0)
+        {
+            $newSize = $this->calcWidth($width, $height);
+            
+            if ($this->maxHeight > 0 && $newSize['newHeight'] > $this->maxHeight)
+            {
+                $newSize = $this->calcHeight($newSize['newWidth'], $newSize['newHeight']);
+            }
+        }
+        
+        if ($this->maxHeight > 0)
+        {
+            $newSize = $this->calcHeight($width, $height);
+            
+            if ($this->maxWidth > 0 && $newSize['newWidth'] > $this->maxWidth)
+            {
+                $newSize = $this->calcWidth($newSize['newWidth'], $newSize['newHeight']);
+            }
+        }
+        
+        $this->newDimensions = $newSize;
+    }
+    
+    /**
+     * Calculates new image dimensions, not allowing the width and height to be less than either the max width or height 
+     * 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcImageSizeStrict ($width, $height)
+    {
+        // first, we need to determine what the longest resize dimension is..
+        if ($this->maxWidth >= $this->maxHeight)
+        {
+            // and determine the longest original dimension
+            if ($width > $height)
+            {
+                $newDimensions = $this->calcHeight($width, $height);
+                
+                if ($newDimensions['newWidth'] < $this->maxWidth)
+                {
+                    $newDimensions = $this->calcWidth($width, $height);
+                }
+            }
+            elseif ($height >= $width)
+            {
+                $newDimensions = $this->calcWidth($width, $height);
+                
+                if ($newDimensions['newHeight'] < $this->maxHeight)
+                {
+                    $newDimensions = $this->calcHeight($width, $height);
+                }
+            }
+        }
+        elseif ($this->maxHeight > $this->maxWidth)
+        {
+            if ($width >= $height)
+            {
+                $newDimensions = $this->calcWidth($width, $height);
+                
+                if ($newDimensions['newHeight'] < $this->maxHeight)
+                {
+                    $newDimensions = $this->calcHeight($width, $height);
+                }
+            }
+            elseif ($height > $width)
+            {
+                $newDimensions = $this->calcHeight($width, $height);
+                
+                if ($newDimensions['newWidth'] < $this->maxWidth)
+                {
+                    $newDimensions = $this->calcWidth($width, $height);
+                }
+            }
+        }
+        
+        $this->newDimensions = $newDimensions;
+    }
+    
+    /**
+     * Calculates new dimensions based on $this->percent and the provided dimensions
+     * 
+     * @param int $width
+     * @param int $height
+     */
+    protected function calcImageSizePercent ($width, $height)
+    {
+        if ($this->percent > 0)
+        {
+            $this->newDimensions = $this->calcPercent($width, $height);
+        }
+    }
+    
+    /**
+     * Determines the file format by mime-type
+     * 
+     * This function will throw exceptions for invalid images / mime-types
+     * 
+     */
+    protected function determineFormat ()
+    {
+        if ($this->isDataStream === true)
+        {
+            $this->format = 'STRING';
+            return;
+        }
+        
+        $formatInfo = getimagesize($this->fileName);
+        
+        // non-image files will return false
+        if ($formatInfo === false)
+        {
+            if ($this->remoteImage)
+            {
+                $this->triggerError('Could not determine format of remote image: ' . $this->fileName);
+            }
+            else
+            {
+                $this->triggerError('File is not a valid image: ' . $this->fileName);
+            }
+            
+            // make sure we really stop execution
+            return;
+        }
+        
+        $mimeType = isset($formatInfo['mime']) ? $formatInfo['mime'] : null;
+        
+        switch ($mimeType)
+        {
+            case 'image/gif':
+                $this->format = 'GIF';
+                break;
+            case 'image/jpeg':
+                $this->format = 'JPG';
+                break;
+            case 'image/png':
+                $this->format = 'PNG';
+                break;
+            default:
+                $this->triggerError('Image format not supported: ' . $mimeType);
+        }
+    }
+    
+    /**
+     * Makes sure the correct GD implementation exists for the file type
+     * 
+     */
+    protected function verifyFormatCompatiblity ()
+    {
+        $isCompatible     = true;
+        $gdInfo            = gd_info();
+        
+        switch ($this->format)
+        {
+            case 'GIF':
+                $isCompatible = $gdInfo['GIF Create Support'];
+                break;
+            case 'JPG':
+                $isCompatible = (isset($gdInfo['JPG Support']) || isset($gdInfo['JPEG Support'])) ? true : false;
+                break;
+            case 'PNG':
+                $isCompatible = $gdInfo[$this->format . ' Support'];
+                break;
+            default:
+                $isCompatible = false;
+        }
+        
+        if (!$isCompatible)
+        {
+            // one last check for "JPEG" instead
+            $isCompatible = $gdInfo['JPEG Support'];
+            
+            if (!$isCompatible)
+            {
+                $this->triggerError('Your GD installation does not support ' . $this->format . ' image types');
+            }
+        }
+    }
+    
+    /**
+     * Preserves the alpha or transparency for PNG and GIF files
+     * 
+     * Alpha / transparency will not be preserved if the appropriate options are set to false.
+     * Also, the GIF transparency is pretty skunky (the results aren't awesome), but it works like a 
+     * champ... that's the nature of GIFs tho, so no huge surprise.
+     * 
+     * This functionality was originally suggested by commenter Aimi (no links / site provided) - Thanks! :)
+     *   
+     */
+    protected function preserveAlpha ()
+    {
+        if ($this->format == 'PNG' && $this->options['preserveAlpha'] === true)
+        {
+            imagealphablending($this->workingImage, false);
+            
+            $colorTransparent = imagecolorallocatealpha
+            (
+                $this->workingImage, 
+                $this->options['alphaMaskColor'][0], 
+                $this->options['alphaMaskColor'][1], 
+                $this->options['alphaMaskColor'][2], 
+                0
+            );
+            
+            imagefill($this->workingImage, 0, 0, $colorTransparent);
+            imagesavealpha($this->workingImage, true);
+        }
+        // preserve transparency in GIFs... this is usually pretty rough tho
+        if ($this->format == 'GIF' && $this->options['preserveTransparency'] === true)
+        {
+            $colorTransparent = imagecolorallocate
+            (
+                $this->workingImage, 
+                $this->options['transparencyMaskColor'][0], 
+                $this->options['transparencyMaskColor'][1], 
+                $this->options['transparencyMaskColor'][2] 
+            );
+            
+            imagecolortransparent($this->workingImage, $colorTransparent);
+            imagetruecolortopalette($this->workingImage, true, 256);
+        }
+    }
+}
\ No newline at end of file

Property changes on: trunk/admin/media/inc/GdThumb.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/inc/PhpThumb.inc.php
===================================================================
--- trunk/admin/media/inc/PhpThumb.inc.php	(nonexistent)
+++ trunk/admin/media/inc/PhpThumb.inc.php	(revision 2)
@@ -0,0 +1,247 @@
+<?php
+/**
+ * PhpThumb Library Definition File
+ * 
+ * This file contains the definitions for the PhpThumb class.
+ * 
+ * PHP Version 5 with GD 2.0+
+ * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
+ * Copyright (c) 2009, Ian Selby/Gen X Design
+ * 
+ * Author(s): Ian Selby <ian@gen-x-design.com>
+ * 
+ * Licensed under the MIT License
+ * Redistributions of files must retain the above copyright notice.
+ * 
+ * @author Ian Selby <ian@gen-x-design.com>
+ * @copyright Copyright (c) 2009 Gen X Design
+ * @link http://phpthumb.gxdlabs.com
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @version 3.0
+ * @package PhpThumb
+ * @filesource
+ */
+
+
+
+/**
+ * PhpThumb Object
+ * 
+ * This singleton object is essentially a function library that helps with core validation 
+ * and loading of the core classes and plugins.  There isn't really any need to access it directly, 
+ * unless you're developing a plugin and need to take advantage of any of the functionality contained 
+ * within.
+ * 
+ * If you're not familiar with singleton patterns, here's how you get an instance of this class (since you 
+ * can't create one via the new keyword):
+ * <code>$pt = PhpThumb::getInstance();</code>
+ * 
+ * It's that simple!  Outside of that, there's no need to modify anything within this class, unless you're doing 
+ * some crazy customization... then knock yourself out! :)
+ * 
+ * @package PhpThumb
+ * @subpackage Core
+ */
+class PhpThumb
+{
+    /**
+     * Instance of self
+     * 
+     * @var object PhpThumb
+     */
+    protected static $_instance;
+    /**
+     * The plugin registry
+     * 
+     * This is where all plugins to be loaded are stored.  Data about the plugin is 
+     * provided, and currently consists of:
+     *  - loaded: true/false
+     *  - implementation: gd/imagick/both
+     * 
+     * @var array
+     */
+    protected $_registry;
+    /**
+     * What implementations are available
+     * 
+     * This stores what implementations are available based on the loaded 
+     * extensions in PHP, NOT whether or not the class files are present.
+     * 
+     * @var array
+     */
+    protected $_implementations;
+    
+    /**
+     * Returns an instance of self
+     * 
+     * This is the usual singleton function that returns / instantiates the object
+     * 
+     * @return PhpThumb
+     */
+    public static function getInstance ()
+    {
+        if(!(self::$_instance instanceof self))
+        {
+            self::$_instance = new self();
+        }
+
+        return self::$_instance;
+    }
+    
+    /**
+     * Class constructor
+     * 
+     * Initializes all the variables, and does some preliminary validation / checking of stuff
+     * 
+     */
+    private function __construct ()
+    {
+        $this->_registry        = array();
+        $this->_implementations    = array('gd' => false, 'imagick' => false);
+        
+        $this->getImplementations();
+    }
+    
+    /**
+     * Finds out what implementations are available
+     * 
+     * This function loops over $this->_implementations and validates that the required extensions are loaded.
+     * 
+     * I had planned on attempting to load them dynamically via dl(), but that would provide more overhead than I 
+     * was comfortable with (and would probably fail 99% of the time anyway)
+     * 
+     */
+    private function getImplementations ()
+    {
+        foreach($this->_implementations as $extension => $loaded)
+        {
+            if($loaded)
+            {
+                continue;
+            }
+            
+            if(extension_loaded($extension))
+            {
+                $this->_implementations[$extension] = true;
+            }
+        }
+    }
+    
+    /**
+     * Returns whether or not $implementation is valid (available)
+     * 
+     * If 'all' is passed, true is only returned if ALL implementations are available.
+     * 
+     * You can also pass 'n/a', which always returns true
+     * 
+     * @return bool 
+     * @param string $implementation
+     */
+    public function isValidImplementation ($implementation)
+    {
+        if ($implementation == 'n/a')
+        {
+            return true;
+        }
+        
+        if ($implementation == 'all')
+        {
+            foreach ($this->_implementations as $imp => $value)
+            {
+                if ($value == false)
+                {
+                    return false;
+                }
+            }
+            
+            return true;
+        }
+        
+        if (array_key_exists($implementation, $this->_implementations))
+        {
+            return $this->_implementations[$implementation];
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Registers a plugin in the registry
+     * 
+     * Adds a plugin to the registry if it isn't already loaded, and if the provided 
+     * implementation is valid.  Note that you can pass the following special keywords 
+     * for implementation:
+     *  - all - Requires that all implementations be available
+     *  - n/a - Doesn't require any implementation
+     *  
+     * When a plugin is added to the registry, it's added as a key on $this->_registry with the value 
+     * being an array containing the following keys:
+     *  - loaded - whether or not the plugin has been "loaded" into the core class
+     *  - implementation - what implementation this plugin is valid for
+     * 
+     * @return bool
+     * @param string $pluginName
+     * @param string $implementation
+     */
+    public function registerPlugin ($pluginName, $implementation)
+    {
+        if (!array_key_exists($pluginName, $this->_registry) && $this->isValidImplementation($implementation))
+        {
+            $this->_registry[$pluginName] = array('loaded' => false, 'implementation' => $implementation);
+            return true;
+        }
+        
+        return false;
+    }
+    
+    /**
+     * Loads all the plugins in $pluginPath
+     * 
+     * All this function does is include all files inside the $pluginPath directory.  The plugins themselves 
+     * will not be added to the registry unless you've properly added the code to do so inside your plugin file.
+     * 
+     * @param string $pluginPath
+     */
+    public function loadPlugins ($pluginPath)
+    {
+        // strip the trailing slash if present
+        if (substr($pluginPath, strlen($pluginPath) - 1, 1) == '/')
+        {
+            $pluginPath = substr($pluginPath, 0, strlen($pluginPath) - 1);
+        }
+        
+        if ($handle = opendir($pluginPath))
+        {
+            while (false !== ($file = readdir($handle)))
+            {
+                if ($file == '.' || $file == '..' || $file == '.svn')
+                {
+                    continue;
+                }
+                
+                include_once($pluginPath . '/' . $file);
+            }
+        }
+    }
+    
+    /**
+     * Returns the plugin registry for the supplied implementation
+     * 
+     * @return array
+     * @param string $implementation
+     */
+    public function getPluginRegistry ($implementation)
+    {
+        $returnArray = array();
+        
+        foreach ($this->_registry as $plugin => $meta)
+        {
+            if ($meta['implementation'] == 'n/a' || $meta['implementation'] == $implementation)
+            {
+                $returnArray[$plugin] = $meta;
+            }
+        }
+        
+        return $returnArray;
+    }
+}

Property changes on: trunk/admin/media/inc/PhpThumb.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/inc/README
===================================================================
--- trunk/admin/media/inc/README	(nonexistent)
+++ trunk/admin/media/inc/README	(revision 2)
@@ -0,0 +1,13 @@
+# PHP Thumb
+
+PHP Thumb is a light-weight image manipulation library 
+aimed at thumbnail generation. It features the ability to 
+resize by width, height, and percentage, create custom crops, 
+or square crops from the center, and rotate the image. You can 
+also easily add custom functionality to the library through plugins. 
+It also features the ability to perform multiple manipulations per 
+instance (also known as chaining), without the need to save and 
+re-initialize the class with every manipulation.
+
+More information and documentation is available at the project's 
+homepage: [http://phpthumb.gxdlabs.com](http://phpthumb.gxdlabs.com)
Index: trunk/admin/media/inc/ThumbBase.inc.php
===================================================================
--- trunk/admin/media/inc/ThumbBase.inc.php	(nonexistent)
+++ trunk/admin/media/inc/ThumbBase.inc.php	(revision 2)
@@ -0,0 +1,323 @@
+<?php
+/**
+ * PhpThumb Base Class Definition File
+ * 
+ * This file contains the definition for the ThumbBase object
+ * 
+ * PHP Version 5 with GD 2.0+
+ * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
+ * Copyright (c) 2009, Ian Selby/Gen X Design
+ * 
+ * Author(s): Ian Selby <ian@gen-x-design.com>
+ * 
+ * Licensed under the MIT License
+ * Redistributions of files must retain the above copyright notice.
+ * 
+ * @author Ian Selby <ian@gen-x-design.com>
+ * @copyright Copyright (c) 2009 Gen X Design
+ * @link http://phpthumb.gxdlabs.com
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @version 3.0
+ * @package PhpThumb
+ * @filesource
+ */
+
+/**
+ * ThumbBase Class Definition
+ * 
+ * This is the base class that all implementations must extend.  It contains the 
+ * core variables and functionality common to all implementations, as well as the functions that 
+ * allow plugins to augment those classes.
+ * 
+ * @package PhpThumb
+ * @subpackage Core
+ */
+abstract class ThumbBase 
+{
+    /**
+     * All imported objects
+     * 
+     * An array of imported plugin objects
+     * 
+     * @var array
+     */
+    protected $imported;
+    /**
+     * All imported object functions
+     * 
+     * An array of all methods added to this class by imported plugin objects
+     * 
+     * @var array
+     */
+    protected $importedFunctions;
+    /**
+     * The last error message raised
+     * 
+     * @var string
+     */
+    protected $errorMessage;
+    /**
+     * Whether or not the current instance has any errors
+     * 
+     * @var bool
+     */
+    protected $hasError;
+    /**
+     * The name of the file we're manipulating
+     * 
+     * This must include the path to the file (absolute paths recommended)
+     * 
+     * @var string
+     */
+    protected $fileName;
+    /**
+     * What the file format is (mime-type)
+     * 
+     * @var string
+     */
+    protected $format;
+    /**
+     * Whether or not the image is hosted remotely
+     * 
+     * @var bool
+     */
+    protected $remoteImage;
+    /**
+     * Whether or not the current image is an actual file, or the raw file data
+     *
+     * By "raw file data" it's meant that we're actually passing the result of something
+     * like file_get_contents() or perhaps from a database blob
+     * 
+     * @var bool
+     */
+    protected $isDataStream;
+    
+    /**
+     * Class constructor
+     * 
+     * @return ThumbBase
+     */
+    public function __construct ($fileName, $isDataStream = false)
+    {
+        $this->imported                = array();
+        $this->importedFunctions    = array();
+        $this->errorMessage            = null;
+        $this->hasError                = false;
+        $this->fileName                = $fileName;
+        $this->remoteImage            = false;
+        $this->isDataStream            = $isDataStream;
+        
+        $this->fileExistsAndReadable();
+    }
+    
+    /**
+     * Imports plugins in $registry to the class
+     * 
+     * @param array $registry
+     */
+    public function importPlugins ($registry)
+    {
+        foreach ($registry as $plugin => $meta)
+        {
+            $this->imports($plugin);
+        }
+    }
+    
+    /**
+     * Imports a plugin
+     * 
+     * This is where all the plugins magic happens!  This function "loads" the plugin functions, making them available as 
+     * methods on the class.
+     * 
+     * @param string $object The name of the object to import / "load"
+     */
+    protected function imports ($object)
+    {
+        // the new object to import
+        $newImport             = new $object();
+        // the name of the new object (class name)
+        $importName            = get_class($newImport);
+        // the new functions to import
+        $importFunctions     = get_class_methods($newImport);
+        
+        // add the object to the registry
+        array_push($this->imported, array($importName, $newImport));
+        
+        // add the methods to the registry
+        foreach ($importFunctions as $key => $functionName)
+        {
+            $this->importedFunctions[$functionName] = &$newImport;
+        }
+    }
+    
+    /**
+     * Checks to see if $this->fileName exists and is readable
+     * 
+     */
+    protected function fileExistsAndReadable ()
+    {
+        if ($this->isDataStream === true)
+        {
+            return;
+        }
+        
+        if (stristr($this->fileName, 'http://') !== false)
+        {
+            $this->remoteImage = true;
+            return;
+        }
+        
+        if (!file_exists($this->fileName))
+        {
+            $this->triggerError('Image file not found: ' . $this->fileName);
+        }
+        elseif (!is_readable($this->fileName))
+        {
+            $this->triggerError('Image file not readable: ' . $this->fileName);
+        }
+    }
+    
+    /**
+     * Sets $this->errorMessage to $errorMessage and throws an exception
+     * 
+     * Also sets $this->hasError to true, so even if the exceptions are caught, we don't
+     * attempt to proceed with any other functions
+     * 
+     * @param string $errorMessage
+     */
+    protected function triggerError ($errorMessage)
+    {
+        $this->hasError     = true;
+        $this->errorMessage    = $errorMessage;
+        
+        throw new Exception ($errorMessage);
+    }
+    
+    /**
+     * Calls plugin / imported functions
+     * 
+     * This is also where a fair amount of plugins magaic happens.  This magic method is called whenever an "undefined" class 
+     * method is called in code, and we use that to call an imported function. 
+     * 
+     * You should NEVER EVER EVER invoke this function manually.  The universe will implode if you do... seriously ;)
+     * 
+     * @param string $method
+     * @param array $args
+     */
+    public function __call ($method, $args)
+    {
+        if( array_key_exists($method, $this->importedFunctions))
+        {
+            $args[] = $this;
+            return call_user_func_array(array($this->importedFunctions[$method], $method), $args);
+        }
+        
+        throw new BadMethodCallException ('Call to undefined method/class function: ' . $method);
+    }
+
+    /**
+     * Returns $imported.
+     * @see ThumbBase::$imported
+     * @return array
+     */
+    public function getImported ()
+    {
+        return $this->imported;
+    }
+    
+    /**
+     * Returns $importedFunctions.
+     * @see ThumbBase::$importedFunctions
+     * @return array
+     */
+    public function getImportedFunctions ()
+    {
+        return $this->importedFunctions;
+    }
+    
+    /**
+     * Returns $errorMessage.
+     *
+     * @see ThumbBase::$errorMessage
+     */
+    public function getErrorMessage ()
+    {
+        return $this->errorMessage;
+    }
+    
+    /**
+     * Sets $errorMessage.
+     *
+     * @param object $errorMessage
+     * @see ThumbBase::$errorMessage
+     */
+    public function setErrorMessage ($errorMessage)
+    {
+        $this->errorMessage = $errorMessage;
+    }
+    
+    /**
+     * Returns $fileName.
+     *
+     * @see ThumbBase::$fileName
+     */
+    public function getFileName ()
+    {
+        return $this->fileName;
+    }
+    
+    /**
+     * Sets $fileName.
+     *
+     * @param object $fileName
+     * @see ThumbBase::$fileName
+     */
+    public function setFileName ($fileName)
+    {
+        $this->fileName = $fileName;
+    }
+    
+    /**
+     * Returns $format.
+     *
+     * @see ThumbBase::$format
+     */
+    public function getFormat ()
+    {
+        return $this->format;
+    }
+    
+    /**
+     * Sets $format.
+     *
+     * @param object $format
+     * @see ThumbBase::$format
+     */
+    public function setFormat ($format)
+    {
+        $this->format = $format;
+    }
+    
+    /**
+     * Returns $hasError.
+     *
+     * @see ThumbBase::$hasError
+     */
+    public function getHasError ()
+    {
+        return $this->hasError;
+    }
+    
+    /**
+     * Sets $hasError.
+     *
+     * @param object $hasError
+     * @see ThumbBase::$hasError
+     */
+    public function setHasError ($hasError)
+    {
+        $this->hasError = $hasError;
+    } 
+    
+
+}

Property changes on: trunk/admin/media/inc/ThumbBase.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/inc/ThumbLib.inc.php
===================================================================
--- trunk/admin/media/inc/ThumbLib.inc.php	(nonexistent)
+++ trunk/admin/media/inc/ThumbLib.inc.php	(revision 2)
@@ -0,0 +1,146 @@
+<?php
+/**
+ * PhpThumb Library Definition File
+ * 
+ * This file contains the definitions for the PhpThumbFactory class.
+ * It also includes the other required base class files.
+ * 
+ * If you've got some auto-loading magic going on elsewhere in your code, feel free to
+ * remove the include_once statements at the beginning of this file... just make sure that
+ * these files get included one way or another in your code.
+ * 
+ * PHP Version 5 with GD 2.0+
+ * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
+ * Copyright (c) 2009, Ian Selby/Gen X Design
+ * 
+ * Author(s): Ian Selby <ian@gen-x-design.com>
+ * 
+ * Licensed under the MIT License
+ * Redistributions of files must retain the above copyright notice.
+ * 
+ * @author Ian Selby <ian@gen-x-design.com>
+ * @copyright Copyright (c) 2009 Gen X Design
+ * @link http://phpthumb.gxdlabs.com
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @version 3.0
+ * @package PhpThumb
+ * @filesource
+ */
+
+// define some useful constants
+define('THUMBLIB_BASE_PATH', str_replace('\\','/',dirname(__FILE__)) );
+define('THUMBLIB_PLUGIN_PATH', THUMBLIB_BASE_PATH . '/thumb_plugins/');
+define('DEFAULT_THUMBLIB_IMPLEMENTATION', 'gd');
+
+/**
+ * Include the PhpThumb Class
+ */
+require_once THUMBLIB_BASE_PATH . '/PhpThumb.inc.php';
+/**
+ * Include the ThumbBase Class
+ */
+require_once THUMBLIB_BASE_PATH . '/ThumbBase.inc.php';
+/**
+ * Include the GdThumb Class
+ */
+require_once THUMBLIB_BASE_PATH . '/GdThumb.inc.php';
+
+/**
+ * PhpThumbFactory Object
+ * 
+ * This class is responsible for making sure everything is set up and initialized properly,
+ * and returning the appropriate thumbnail class instance.  It is the only recommended way 
+ * of using this library, and if you try and circumvent it, the sky will fall on your head :)
+ * 
+ * Basic use is easy enough.  First, make sure all the settings meet your needs and environment...
+ * these are the static variables defined at the beginning of the class.
+ * 
+ * Once that's all set, usage is pretty easy.  You can simply do something like:
+ * <code>$thumb = PhpThumbFactory::create('/path/to/file.png');</code>
+ * 
+ * Refer to the documentation for the create function for more information
+ * 
+ * @package PhpThumb
+ * @subpackage Core
+ */
+class PhpThumbFactory
+{
+    /**
+     * Which implemenation of the class should be used by default
+     * 
+     * Currently, valid options are:
+     *  - imagick
+     *  - gd
+     *  
+     * These are defined in the implementation map variable, inside the create function
+     * 
+     * @var string
+     */
+    public static $defaultImplemenation = DEFAULT_THUMBLIB_IMPLEMENTATION;
+    /**
+     * Where the plugins can be loaded from
+     * 
+     * Note, it's important that this path is properly defined.  It is very likely that you'll 
+     * have to change this, as the assumption here is based on a relative path.
+     * 
+     * @var string
+     */
+    public static $pluginPath = THUMBLIB_PLUGIN_PATH;
+    
+    /**
+     * Factory Function
+     * 
+     * This function returns the correct thumbnail object, augmented with any appropriate plugins.  
+     * It does so by doing the following:
+     *  - Getting an instance of PhpThumb
+     *  - Loading plugins
+     *  - Validating the default implemenation
+     *  - Returning the desired default implementation if possible
+     *  - Returning the GD implemenation if the default isn't available
+     *  - Throwing an exception if no required libraries are present
+     * 
+     * @return GdThumb
+     * @uses PhpThumb
+     * @param string $filename The path and file to load [optional]
+     */
+    public static function create ($filename = null, $options = array(), $isDataStream = false)
+    {
+        // map our implementation to their class names
+        $implementationMap = array
+        (
+            'imagick'    => 'ImagickThumb',
+            'gd'         => 'GdThumb'
+        );
+        
+        // grab an instance of PhpThumb
+        $pt = PhpThumb::getInstance();
+        // load the plugins
+        $pt->loadPlugins(self::$pluginPath);
+        
+        $toReturn = null;
+        $implementation = self::$defaultImplemenation;
+        
+        // attempt to load the default implementation
+        if ($pt->isValidImplementation(self::$defaultImplemenation))
+        {
+            $imp = $implementationMap[self::$defaultImplemenation];
+            $toReturn = new $imp($filename, $options, $isDataStream);
+        }
+        // load the gd implementation if default failed
+        else if ($pt->isValidImplementation('gd'))
+        {
+            $imp = $implementationMap['gd'];
+            $implementation = 'gd';
+            $toReturn = new $imp($filename, $options, $isDataStream);
+        }
+        // throw an exception if we can't load
+        else
+        {
+            throw new Exception('You must have either the GD or iMagick extension loaded to use this library');
+        }
+        
+        $registry = $pt->getPluginRegistry($implementation);
+        $toReturn->importPlugins($registry);
+        return $toReturn;
+    }
+}
\ No newline at end of file

Property changes on: trunk/admin/media/inc/ThumbLib.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/inc/thumb_plugins/gd_reflection.inc.php
===================================================================
--- trunk/admin/media/inc/thumb_plugins/gd_reflection.inc.php	(nonexistent)
+++ trunk/admin/media/inc/thumb_plugins/gd_reflection.inc.php	(revision 2)
@@ -0,0 +1,180 @@
+<?php
+/**
+ * GD Reflection Lib Plugin Definition File
+ * 
+ * This file contains the plugin definition for the GD Reflection Lib for PHP Thumb
+ * 
+ * PHP Version 5 with GD 2.0+
+ * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
+ * Copyright (c) 2009, Ian Selby/Gen X Design
+ * 
+ * Author(s): Ian Selby <ian@gen-x-design.com>
+ * 
+ * Licensed under the MIT License
+ * Redistributions of files must retain the above copyright notice.
+ * 
+ * @author Ian Selby <ian@gen-x-design.com>
+ * @copyright Copyright (c) 2009 Gen X Design
+ * @link http://phpthumb.gxdlabs.com
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @version 3.0
+ * @package PhpThumb
+ * @filesource
+ */
+
+/**
+ * GD Reflection Lib Plugin
+ * 
+ * This plugin allows you to create those fun Apple(tm)-style reflections in your images
+ * 
+ * @package PhpThumb
+ * @subpackage Plugins
+ */
+class GdReflectionLib
+{
+    /**
+     * Instance of GdThumb passed to this class
+     * 
+     * @var GdThumb
+     */
+    protected $parentInstance;
+    protected $currentDimensions;
+    protected $workingImage;
+    protected $newImage;
+    protected $options;
+    
+    public function createReflection ($percent, $reflection, $white, $border, $borderColor, &$that)
+    {
+        // bring stuff from the parent class into this class...
+        $this->parentInstance         = $that;
+        $this->currentDimensions     = $this->parentInstance->getCurrentDimensions();
+        $this->workingImage            = $this->parentInstance->getWorkingImage();
+        $this->newImage                = $this->parentInstance->getOldImage();
+        $this->options                = $this->parentInstance->getOptions();
+        
+        $width                = $this->currentDimensions['width'];
+        $height                = $this->currentDimensions['height'];
+        $reflectionHeight     = intval($height * ($reflection / 100));
+        $newHeight            = $height + $reflectionHeight;
+        $reflectedPart        = $height * ($percent / 100);
+        
+        $this->workingImage = imagecreatetruecolor($width, $newHeight);
+        
+        imagealphablending($this->workingImage, true);
+        
+        $colorToPaint = imagecolorallocatealpha($this->workingImage,255,255,255,0);
+        imagefilledrectangle($this->workingImage,0,0,$width,$newHeight,$colorToPaint);
+        
+        imagecopyresampled
+        (
+            $this->workingImage,
+            $this->newImage,
+            0,
+            0,
+            0,
+            $reflectedPart,
+            $width,
+            $reflectionHeight,
+            $width,
+            ($height - $reflectedPart)
+        );
+        
+        $this->imageFlipVertical();
+        
+        imagecopy($this->workingImage, $this->newImage, 0, 0, 0, 0, $width, $height);
+        
+        imagealphablending($this->workingImage, true);
+        
+        for ($i = 0; $i < $reflectionHeight; $i++) 
+        {
+            $colorToPaint = imagecolorallocatealpha($this->workingImage, 255, 255, 255, ($i/$reflectionHeight*-1+1)*$white);
+            
+            imagefilledrectangle($this->workingImage, 0, $height + $i, $width, $height + $i, $colorToPaint);
+        }
+        
+        if($border == true) 
+        {
+            $rgb             = $this->hex2rgb($borderColor, false);
+            $colorToPaint     = imagecolorallocate($this->workingImage, $rgb[0], $rgb[1], $rgb[2]);
+            
+            imageline($this->workingImage, 0, 0, $width, 0, $colorToPaint); //top line
+            imageline($this->workingImage, 0, $height, $width, $height, $colorToPaint); //bottom line
+            imageline($this->workingImage, 0, 0, 0, $height, $colorToPaint); //left line
+            imageline($this->workingImage, $width-1, 0, $width-1, $height, $colorToPaint); //right line
+        }
+        
+        if ($this->parentInstance->getFormat() == 'PNG')
+        {
+            $colorTransparent = imagecolorallocatealpha
+            (
+                $this->workingImage, 
+                $this->options['alphaMaskColor'][0], 
+                $this->options['alphaMaskColor'][1], 
+                $this->options['alphaMaskColor'][2], 
+                0
+            );
+            
+            imagefill($this->workingImage, 0, 0, $colorTransparent);
+            imagesavealpha($this->workingImage, true);
+        }
+        
+        $this->parentInstance->setOldImage($this->workingImage);
+        $this->currentDimensions['width']     = $width;
+        $this->currentDimensions['height']    = $newHeight;
+        $this->parentInstance->setCurrentDimensions($this->currentDimensions);
+        
+        return $that;
+    }
+    
+    /**
+     * Flips the image vertically
+     * 
+     */
+    protected function imageFlipVertical ()
+    {
+        $x_i = imagesx($this->workingImage);
+        $y_i = imagesy($this->workingImage);
+
+        for ($x = 0; $x < $x_i; $x++) 
+        {
+            for ($y = 0; $y < $y_i; $y++) 
+            {
+                imagecopy($this->workingImage, $this->workingImage, $x, $y_i - $y - 1, $x, $y, 1, 1);
+            }
+        }
+    }
+    
+    /**
+     * Converts a hex color to rgb tuples
+     * 
+     * @return mixed 
+     * @param string $hex
+     * @param bool $asString
+     */
+    protected function hex2rgb ($hex, $asString = false) 
+    {
+        // strip off any leading #
+        if (0 === strpos($hex, '#')) 
+        {
+           $hex = substr($hex, 1);
+        } 
+        elseif (0 === strpos($hex, '&H')) 
+        {
+           $hex = substr($hex, 2);
+        }
+
+        // break into hex 3-tuple
+        $cutpoint = ceil(strlen($hex) / 2)-1;
+        $rgb = explode(':', wordwrap($hex, $cutpoint, ':', $cutpoint), 3);
+
+        // convert each tuple to decimal
+        $rgb[0] = (isset($rgb[0]) ? hexdec($rgb[0]) : 0);
+        $rgb[1] = (isset($rgb[1]) ? hexdec($rgb[1]) : 0);
+        $rgb[2] = (isset($rgb[2]) ? hexdec($rgb[2]) : 0);
+
+        return ($asString ? "{$rgb[0]} {$rgb[1]} {$rgb[2]}" : $rgb);
+    }
+}
+
+$pt = PhpThumb::getInstance();
+$pt->registerPlugin('GdReflectionLib', 'gd');
\ No newline at end of file

Property changes on: trunk/admin/media/inc/thumb_plugins/gd_reflection.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/index.php
===================================================================
--- trunk/admin/media/index.php	(nonexistent)
+++ trunk/admin/media/index.php	(revision 2)
@@ -0,0 +1,115 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Media', 'media');
+
+$starttime = explode(" ", microtime());
+$starttime = $starttime[0]+$starttime[1];
+include ('parameters.php');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('media.htt')));
+$template->set_file('page', 'media.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get home folder not to show
+$home_folders = get_home_folders();
+
+// Insert values
+$template->set_block('main_block', 'dir_list_block', 'dir_list');
+$dirs = directory_list(WB_PATH.MEDIA_DIRECTORY);
+$currentHome = $admin->get_home_folder();
+
+if ($currentHome){
+    $dirs = directory_list(WB_PATH.MEDIA_DIRECTORY.$currentHome);
+}
+else
+{
+    $dirs = directory_list(WB_PATH.MEDIA_DIRECTORY);
+}
+$array_lowercase = array_map('strtolower', $dirs);
+array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $dirs);
+foreach($dirs AS $name) {
+    if(!isset($home_folders[str_replace(WB_PATH.MEDIA_DIRECTORY, '', $name)])) {
+        $template->set_var('NAME', str_replace(WB_PATH, '', $name));
+        $template->parse('dir_list', 'dir_list_block', true);
+    }
+}
+
+// Insert permissions values
+if($admin->get_permission('media_create') != true) {
+    $template->set_var('DISPLAY_CREATE', 'hide');
+}
+if($admin->get_permission('media_upload') != true) {
+    $template->set_var('DISPLAY_UPLOAD', 'hide');
+}
+if ($_SESSION['GROUP_ID'] != 1 && $pathsettings['global']['admin_only']) { // Only show admin the settings link
+    $template->set_var('DISPLAY_SETTINGS', 'hide');
+}
+// Workout if the up arrow should be shown
+if(($dirs == '') or ($dirs==$currentHome) or (!array_key_exists('dir', $_GET))) {
+    $display_up_arrow = 'hide';
+} else {
+    $display_up_arrow = '';
+}
+
+// Insert language headings
+$template->set_var(array(
+                    'HEADING_BROWSE_MEDIA' => $HEADING['BROWSE_MEDIA'],
+                    'HOME_DIRECTORY' => $currentHome,
+                    'DISPLAY_UP_ARROW' => $display_up_arrow, // **!
+                    'HEADING_CREATE_FOLDER' => $HEADING['CREATE_FOLDER'],
+                    'HEADING_UPLOAD_FILES' => $HEADING['UPLOAD_FILES'],
+                )
+            );
+// insert urls
+$template->set_var(array(
+                    'ADMIN_URL' => ADMIN_URL,
+                    'WB_URL' => WB_URL,
+                    'THEME_URL' => THEME_URL
+                )
+            );
+// Insert language text and messages
+$template->set_var(array(
+                    'MEDIA_DIRECTORY' => MEDIA_DIRECTORY,
+                    'TEXT_NAME' => $TEXT['TITLE'],
+                    'TEXT_RELOAD' => $TEXT['RELOAD'],
+                    'TEXT_TARGET_FOLDER' => $TEXT['TARGET_FOLDER'],
+                    'TEXT_OVERWRITE_EXISTING' => $TEXT['OVERWRITE_EXISTING'],
+                    'TEXT_FILES' => $TEXT['FILES'],
+                    'TEXT_CREATE_FOLDER' => $TEXT['CREATE_FOLDER'],
+                    'TEXT_UPLOAD_FILES' => $TEXT['UPLOAD_FILES'],
+                    'CHANGE_SETTINGS' => $TEXT['MODIFY_SETTINGS'],
+                    'OPTIONS' => $TEXT['OPTION'],
+                    'TEXT_UNZIP_FILE' => $TEXT['UNZIP_FILE'],
+                    'TEXT_DELETE_ZIP' => $TEXT['DELETE_ZIP'],
+                    'FTAN' => $admin->getFTAN()
+                )
+            );
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+$admin->print_footer();

Property changes on: trunk/admin/media/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/nopreview.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/admin/media/nopreview.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/admin/media/overlib.js
===================================================================
--- trunk/admin/media/overlib.js	(nonexistent)
+++ trunk/admin/media/overlib.js	(revision 2)
@@ -0,0 +1,1491 @@
+//\/////
+//\  overLIB 4.21 - You may not remove or change this notice.
+//\  Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\
+//\  Contributors are listed on the homepage.
+//\  This file might be old, always check for the latest version at:
+//\  http://www.bosrup.com/web/overlib/
+//\
+//\  Please read the license agreement (available through the link above)
+//\  before using overLIB. Direct any licensing questions to erik@bosrup.com.
+//\
+//\  Do not sell this as your own work or remove this copyright notice. 
+//\  For full details on copying or changing this script please read the
+//\  license agreement at the link above. Please give credit on sites that
+//\  use overLIB and submit changes of the script so other people can use
+//\  them as well.
+//   $Revision: 65 $                $Date: 2017-03-03 22:38:16 +0100 (Fr, 03. Mrz 2017) $
+//\/////
+//\mini
+
+////////
+// PRE-INIT
+// Ignore these lines, configuration is below.
+////////
+var olLoaded = 0;var pmStart = 10000000; var pmUpper = 10001000; var pmCount = pmStart+1; var pmt=''; var pms = new Array(); var olInfo = new Info('4.21', 1);
+var FREPLACE = 0; var FBEFORE = 1; var FAFTER = 2; var FALTERNATE = 3; var FCHAIN=4;
+var olHideForm=0;  // parameter for hiding SELECT and ActiveX elements in IE5.5+ 
+var olHautoFlag = 0;  // flags for over-riding VAUTO and HAUTO if corresponding
+var olVautoFlag = 0;  // positioning commands are used on the command line
+var hookPts = new Array(), postParse = new Array(), cmdLine = new Array(), runTime = new Array();
+// for plugins
+registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
+
+////////
+// DEFAULT CONFIGURATION
+// Settings you want everywhere are set here. All of this can also be
+// changed on your html page or through an overLIB call.
+////////
+if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#ffffff";
+if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#cccccc";
+if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
+if (typeof ol_capcolor=='undefined') var ol_capcolor="#000000";
+if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
+if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
+if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
+if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
+if (typeof ol_textsize=='undefined') var ol_textsize="1";
+if (typeof ol_captionsize=='undefined') var ol_captionsize="1";
+if (typeof ol_closesize=='undefined') var ol_closesize="1";
+if (typeof ol_width=='undefined') var ol_width="200";
+if (typeof ol_border=='undefined') var ol_border="1";
+if (typeof ol_cellpad=='undefined') var ol_cellpad=7;
+if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
+if (typeof ol_offsety=='undefined') var ol_offsety=10;
+if (typeof ol_text=='undefined') var ol_text="";
+if (typeof ol_cap=='undefined') var ol_cap="";
+if (typeof ol_sticky=='undefined') var ol_sticky=0;
+if (typeof ol_background=='undefined') var ol_background="";
+if (typeof ol_close=='undefined') var ol_close="Close";
+if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;
+if (typeof ol_status=='undefined') var ol_status="";
+if (typeof ol_autostatus=='undefined') var ol_autostatus=0;
+if (typeof ol_height=='undefined') var ol_height=-1;
+if (typeof ol_snapx=='undefined') var ol_snapx=0;
+if (typeof ol_snapy=='undefined') var ol_snapy=0;
+if (typeof ol_fixx=='undefined') var ol_fixx=-1;
+if (typeof ol_fixy=='undefined') var ol_fixy=-1;
+if (typeof ol_relx=='undefined') var ol_relx=null;
+if (typeof ol_rely=='undefined') var ol_rely=null;
+if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";
+if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";
+if (typeof ol_padxl=='undefined') var ol_padxl=1;
+if (typeof ol_padxr=='undefined') var ol_padxr=1;
+if (typeof ol_padyt=='undefined') var ol_padyt=1;
+if (typeof ol_padyb=='undefined') var ol_padyb=1;
+if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;
+if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;
+if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;
+if (typeof ol_capicon=='undefined') var ol_capicon="";
+if (typeof ol_frame=='undefined') var ol_frame=self;
+if (typeof ol_timeout=='undefined') var ol_timeout=0;
+if (typeof ol_function=='undefined') var ol_function=null;
+if (typeof ol_delay=='undefined') var ol_delay=0;
+if (typeof ol_hauto=='undefined') var ol_hauto=0;
+if (typeof ol_vauto=='undefined') var ol_vauto=0;
+if (typeof ol_closeclick=='undefined') var ol_closeclick=0;
+if (typeof ol_wrap=='undefined') var ol_wrap=0;
+if (typeof ol_followmouse=='undefined') var ol_followmouse=1;
+if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;
+if (typeof ol_closetitle=='undefined') var ol_closetitle='Close';
+if (typeof ol_compatmode=='undefined') var ol_compatmode=0;
+if (typeof ol_css=='undefined') var ol_css=CSSOFF;
+if (typeof ol_fgclass=='undefined') var ol_fgclass="";
+if (typeof ol_bgclass=='undefined') var ol_bgclass="";
+if (typeof ol_textfontclass=='undefined') var ol_textfontclass="";
+if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass="";
+if (typeof ol_closefontclass=='undefined') var ol_closefontclass="";
+
+////////
+// ARRAY CONFIGURATION
+////////
+
+// You can use these arrays to store popup text here instead of in the html.
+if (typeof ol_texts=='undefined') var ol_texts = new Array("Text 0", "Text 1");
+if (typeof ol_caps=='undefined') var ol_caps = new Array("Caption 0", "Caption 1");
+
+////////
+// END OF CONFIGURATION
+// Don't change anything below this line, all configuration is above.
+////////
+
+
+
+
+
+////////
+// INIT
+////////
+// Runtime variables init. Don't change for config!
+var o3_text="";
+var o3_cap="";
+var o3_sticky=0;
+var o3_background="";
+var o3_close="Close";
+var o3_hpos=RIGHT;
+var o3_offsetx=2;
+var o3_offsety=2;
+var o3_fgcolor="";
+var o3_bgcolor="";
+var o3_textcolor="";
+var o3_capcolor="";
+var o3_closecolor="";
+var o3_width=100;
+var o3_border=1;
+var o3_cellpad=2;
+var o3_status="";
+var o3_autostatus=0;
+var o3_height=-1;
+var o3_snapx=0;
+var o3_snapy=0;
+var o3_fixx=-1;
+var o3_fixy=-1;
+var o3_relx=null;
+var o3_rely=null;
+var o3_fgbackground="";
+var o3_bgbackground="";
+var o3_padxl=0;
+var o3_padxr=0;
+var o3_padyt=0;
+var o3_padyb=0;
+var o3_fullhtml=0;
+var o3_vpos=BELOW;
+var o3_aboveheight=0;
+var o3_capicon="";
+var o3_textfont="Verdana,Arial,Helvetica";
+var o3_captionfont="Verdana,Arial,Helvetica";
+var o3_closefont="Verdana,Arial,Helvetica";
+var o3_textsize="1";
+var o3_captionsize="1";
+var o3_closesize="1";
+var o3_frame=self;
+var o3_timeout=0;
+var o3_timerid=0;
+var o3_allowmove=0;
+var o3_function=null; 
+var o3_delay=0;
+var o3_delayid=0;
+var o3_hauto=0;
+var o3_vauto=0;
+var o3_closeclick=0;
+var o3_wrap=0;
+var o3_followmouse=1;
+var o3_mouseoff=0;
+var o3_closetitle='';
+var o3_compatmode=0;
+var o3_css=CSSOFF;
+var o3_fgclass="";
+var o3_bgclass="";
+var o3_textfontclass="";
+var o3_captionfontclass="";
+var o3_closefontclass="";
+
+// Display state variables
+var o3_x = 0;
+var o3_y = 0;
+var o3_showingsticky = 0;
+var o3_removecounter = 0;
+
+// Our layer
+var over = null;
+var fnRef, hoveringSwitch = false;
+var olHideDelay;
+
+// Decide browser version
+var isMac = (navigator.userAgent.indexOf("Mac") != -1);
+var olOp = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);  // Opera 7
+var olNs4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
+var olNs6 = (document.getElementById) ? true : false;
+var olKq = (olNs6 && /konqueror/i.test(navigator.userAgent));
+var olIe4 = (document.all) ? true : false;
+var olIe5 = false; 
+var olIe55 = false; // Added additional variable to identify IE5.5+
+var docRoot = 'document.body';
+
+// Resize fix for NS4.x to keep track of layer
+if (olNs4) {
+    var oW = window.innerWidth;
+    var oH = window.innerHeight;
+    window.onresize = function() { if (oW != window.innerWidth || oH != window.innerHeight) location.reload(); }
+}
+
+// Microsoft Stupidity Check(tm).
+if (olIe4) {
+    var agent = navigator.userAgent;
+    if (/MSIE/.test(agent)) {
+        var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
+        if (versNum >= 5){
+            olIe5=true;
+            olIe55=(versNum>=5.5&&!olOp) ? true : false;
+            if (olNs6) olNs6=false;
+        }
+    }
+    if (olNs6) olIe4 = false;
+}
+
+// Check for compatability mode.
+if (document.compatMode && document.compatMode == 'CSS1Compat') {
+    docRoot= ((olIe4 && !olOp) ? 'document.documentElement' : docRoot);
+}
+
+// Add window onload handlers to indicate when all modules have been loaded
+// For Netscape 6+ and Mozilla, uses addEventListener method on the window object
+// For IE it uses the attachEvent method of the window object and for Netscape 4.x
+// it sets the window.onload handler to the OLonload_handler function for Bubbling
+if(window.addEventListener) window.addEventListener("load",OLonLoad_handler,false);
+else if (window.attachEvent) window.attachEvent("onload",OLonLoad_handler);
+
+var capExtent;
+
+////////
+// PUBLIC FUNCTIONS
+////////
+
+// overlib(arg0,...,argN)
+// Loads parameters into global runtime variables.
+function overlib() {
+    if (!olLoaded || isExclusive(overlib.arguments)) return true;
+    if (olCheckMouseCapture) olMouseCapture();
+    if (over) {
+        over = (typeof over.id != 'string') ? o3_frame.document.all['overDiv'] : over;
+        cClick();
+    }
+
+    // Load defaults to runtime.
+  olHideDelay=0;
+    o3_text=ol_text;
+    o3_cap=ol_cap;
+    o3_sticky=ol_sticky;
+    o3_background=ol_background;
+    o3_close=ol_close;
+    o3_hpos=ol_hpos;
+    o3_offsetx=ol_offsetx;
+    o3_offsety=ol_offsety;
+    o3_fgcolor=ol_fgcolor;
+    o3_bgcolor=ol_bgcolor;
+    o3_textcolor=ol_textcolor;
+    o3_capcolor=ol_capcolor;
+    o3_closecolor=ol_closecolor;
+    o3_width=ol_width;
+    o3_border=ol_border;
+    o3_cellpad=ol_cellpad;
+    o3_status=ol_status;
+    o3_autostatus=ol_autostatus;
+    o3_height=ol_height;
+    o3_snapx=ol_snapx;
+    o3_snapy=ol_snapy;
+    o3_fixx=ol_fixx;
+    o3_fixy=ol_fixy;
+    o3_relx=ol_relx;
+    o3_rely=ol_rely;
+    o3_fgbackground=ol_fgbackground;
+    o3_bgbackground=ol_bgbackground;
+    o3_padxl=ol_padxl;
+    o3_padxr=ol_padxr;
+    o3_padyt=ol_padyt;
+    o3_padyb=ol_padyb;
+    o3_fullhtml=ol_fullhtml;
+    o3_vpos=ol_vpos;
+    o3_aboveheight=ol_aboveheight;
+    o3_capicon=ol_capicon;
+    o3_textfont=ol_textfont;
+    o3_captionfont=ol_captionfont;
+    o3_closefont=ol_closefont;
+    o3_textsize=ol_textsize;
+    o3_captionsize=ol_captionsize;
+    o3_closesize=ol_closesize;
+    o3_timeout=ol_timeout;
+    o3_function=ol_function;
+    o3_delay=ol_delay;
+    o3_hauto=ol_hauto;
+    o3_vauto=ol_vauto;
+    o3_closeclick=ol_closeclick;
+    o3_wrap=ol_wrap;    
+    o3_followmouse=ol_followmouse;
+    o3_mouseoff=ol_mouseoff;
+    o3_closetitle=ol_closetitle;
+    o3_css=ol_css;
+    o3_compatmode=ol_compatmode;
+    o3_fgclass=ol_fgclass;
+    o3_bgclass=ol_bgclass;
+    o3_textfontclass=ol_textfontclass;
+    o3_captionfontclass=ol_captionfontclass;
+    o3_closefontclass=ol_closefontclass;
+    
+    setRunTimeVariables();
+    
+    fnRef = '';
+    
+    // Special for frame support, over must be reset...
+    o3_frame = ol_frame;
+    
+    if(!(over=createDivContainer())) return false;
+
+    parseTokens('o3_', overlib.arguments);
+    if (!postParseChecks()) return false;
+
+    if (o3_delay == 0) {
+        return runHook("olMain", FREPLACE);
+     } else {
+        o3_delayid = setTimeout("runHook('olMain', FREPLACE)", o3_delay);
+        return false;
+    }
+}
+
+// Clears popups if appropriate
+function nd(time) {
+    if (olLoaded && !isExclusive()) {
+        hideDelay(time);  // delay popup close if time specified
+
+        if (o3_removecounter >= 1) { o3_showingsticky = 0 };
+        
+        if (o3_showingsticky == 0) {
+            o3_allowmove = 0;
+            if (over != null && o3_timerid == 0) runHook("hideObject", FREPLACE, over);
+        } else {
+            o3_removecounter++;
+        }
+    }
+    
+    return true;
+}
+
+// The Close onMouseOver function for stickies
+function cClick() {
+    if (olLoaded) {
+        runHook("hideObject", FREPLACE, over);
+        o3_showingsticky = 0;    
+    }    
+    return false;
+}
+
+// Method for setting page specific defaults.
+function overlib_pagedefaults() {
+    parseTokens('ol_', overlib_pagedefaults.arguments);
+}
+
+
+////////
+// OVERLIB MAIN FUNCTION
+////////
+
+// This function decides what it is we want to display and how we want it done.
+function olMain() {
+    var layerhtml, styleType;
+     runHook("olMain", FBEFORE);
+     
+    if (o3_background!="" || o3_fullhtml) {
+        // Use background instead of box.
+        layerhtml = runHook('ol_content_background', FALTERNATE, o3_css, o3_text, o3_background, o3_fullhtml);
+    } else {
+        // They want a popup box.
+        styleType = (pms[o3_css-1-pmStart] == "cssoff" || pms[o3_css-1-pmStart] == "cssclass");
+
+        // Prepare popup background
+        if (o3_fgbackground != "") o3_fgbackground = "background=\""+o3_fgbackground+"\"";
+        if (o3_bgbackground != "") o3_bgbackground = (styleType ? "background=\""+o3_bgbackground+"\"" : o3_bgbackground);
+
+        // Prepare popup colors
+        if (o3_fgcolor != "") o3_fgcolor = (styleType ? "bgcolor=\""+o3_fgcolor+"\"" : o3_fgcolor);
+        if (o3_bgcolor != "") o3_bgcolor = (styleType ? "bgcolor=\""+o3_bgcolor+"\"" : o3_bgcolor);
+
+        // Prepare popup height
+        if (o3_height > 0) o3_height = (styleType ? "height=\""+o3_height+"\"" : o3_height);
+        else o3_height = "";
+
+        // Decide which kinda box.
+        if (o3_cap=="") {
+            // Plain
+            layerhtml = runHook('ol_content_simple', FALTERNATE, o3_css, o3_text);
+        } else {
+            // With caption
+            if (o3_sticky) {
+                // Show close text
+                layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, o3_close);
+            } else {
+                // No close text
+                layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, "");
+            }
+        }
+    }    
+
+    // We want it to stick!
+    if (o3_sticky) {
+        if (o3_timerid > 0) {
+            clearTimeout(o3_timerid);
+            o3_timerid = 0;
+        }
+        o3_showingsticky = 1;
+        o3_removecounter = 0;
+    }
+
+    // Created a separate routine to generate the popup to make it easier
+    // to implement a plugin capability
+    if (!runHook("createPopup", FREPLACE, layerhtml)) return false;
+
+    // Prepare status bar
+    if (o3_autostatus > 0) {
+        o3_status = o3_text;
+        if (o3_autostatus > 1) o3_status = o3_cap;
+    }
+
+    // When placing the layer the first time, even stickies may be moved.
+    o3_allowmove = 0;
+
+    // Initiate a timer for timeout
+    if (o3_timeout > 0) {          
+        if (o3_timerid > 0) clearTimeout(o3_timerid);
+        o3_timerid = setTimeout("cClick()", o3_timeout);
+    }
+
+    // Show layer
+    runHook("disp", FREPLACE, o3_status);
+    runHook("olMain", FAFTER);
+
+    return (olOp && event && event.type == 'mouseover' && !o3_status) ? '' : (o3_status != '');
+}
+
+////////
+// LAYER GENERATION FUNCTIONS
+////////
+// These functions just handle popup content with tags that should adhere to the W3C standards specification.
+
+// Makes simple table without caption
+function ol_content_simple(text) {
+    var cpIsMultiple = /,/.test(o3_cellpad);
+    var txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' : ((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
+
+    set_background("");
+    return txt;
+}
+
+// Makes table with caption and optional close link
+function ol_content_caption(text,title,close) {
+    var nameId, txt, cpIsMultiple = /,/.test(o3_cellpad);
+    var closing, closeevent;
+
+    closing = "";
+    closeevent = "onmouseover";
+    if (o3_closeclick == 1) closeevent = (o3_closetitle ? "title='" + o3_closetitle +"'" : "") + " onclick";
+    if (o3_capicon != "") {
+      nameId = ' hspace = \"5\"'+' align = \"middle\" alt = \"\"';
+      if (typeof o3_dragimg != 'undefined' && o3_dragimg) nameId =' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';
+      o3_capicon = '<img src=\"'+o3_capicon+'\"'+nameId+' />';
+    }
+
+    if (close != "")
+        closing = '<td '+(!o3_compatmode && o3_closefontclass ? 'class="'+o3_closefontclass : 'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode && o3_closefontclass) ? ' class="' + o3_closefontclass + '" ' : ' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass ? '' : wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass ? '' : wrapStr(1,o3_closesize,'close'))+'</a></td>';
+    txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass ? ' class="'+o3_captionfontclass+'">' : '>')+(o3_captionfontclass ? '' : '<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass ? '' : wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize)) + '</td></tr></table></td></tr></table>';
+
+    set_background("");
+    return txt;
+}
+
+// Sets the background picture,padding and lots more. :)
+function ol_content_background(text,picture,hasfullhtml) {
+    if (hasfullhtml) {
+        txt=text;
+    } else {
+        txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass ? '" class="'+o3_textfontclass : '')+'">'+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';
+    }
+
+    set_background(picture);
+    return txt;
+}
+
+// Loads a picture into the div.
+function set_background(pic) {
+    if (pic == "") {
+        if (olNs4) {
+            over.background.src = null; 
+        } else if (over.style) {
+            over.style.backgroundImage = "none";
+        }
+    } else {
+        if (olNs4) {
+            over.background.src = pic;
+        } else if (over.style) {
+            over.style.width=o3_width + 'px';
+            over.style.backgroundImage = "url("+pic+")";
+        }
+    }
+}
+
+////////
+// HANDLING FUNCTIONS
+////////
+var olShowId=-1;
+
+// Displays the popup
+function disp(statustext) {
+    runHook("disp", FBEFORE);
+    
+    if (o3_allowmove == 0) {
+        runHook("placeLayer", FREPLACE);
+        (olNs6&&olShowId<0) ? olShowId=setTimeout("runHook('showObject', FREPLACE, over)", 1) : runHook("showObject", FREPLACE, over);
+        o3_allowmove = (o3_sticky || o3_followmouse==0) ? 0 : 1;
+    }
+    
+    runHook("disp", FAFTER);
+
+    if (statustext != "") self.status = statustext;
+}
+
+// Creates the actual popup structure
+function createPopup(lyrContent){
+    runHook("createPopup", FBEFORE);
+    
+    if (o3_wrap) {
+        var wd,ww,theObj = (olNs4 ? over : over.style);
+        theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0);
+        layerWrite(lyrContent);
+        wd = (olNs4 ? over.clip.width : over.offsetWidth);
+        if (wd > (ww=windowWidth())) {
+            lyrContent=lyrContent.replace(/\&nbsp;/g, ' ');
+            o3_width=ww;
+            o3_wrap=0;
+        } 
+    }
+
+    layerWrite(lyrContent);
+    
+    // Have to set o3_width for placeLayer() routine if o3_wrap is turned on
+    if (o3_wrap) o3_width=(olNs4 ? over.clip.width : over.offsetWidth);
+    
+    runHook("createPopup", FAFTER, lyrContent);
+
+    return true;
+}
+
+// Decides where we want the popup.
+function placeLayer() {
+    var placeX, placeY, widthFix = 0;
+    
+    // HORIZONTAL PLACEMENT, re-arranged to work in Safari
+    if (o3_frame.innerWidth) widthFix=18; 
+    iwidth = windowWidth();
+
+    // Horizontal scroll offset
+    winoffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollLeft') : o3_frame.pageXOffset;
+
+    placeX = runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
+
+    // VERTICAL PLACEMENT, re-arranged to work in Safari
+    if (o3_frame.innerHeight) {
+        iheight=o3_frame.innerHeight;
+    } else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) { 
+        iheight=eval('o3_frame.'+docRoot+'.clientHeight');
+    }            
+
+    // Vertical scroll offset
+    scrolloffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollTop') : o3_frame.pageYOffset;
+    placeY = runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
+
+    // Actually move the object.
+    repositionTo(over, placeX, placeY);
+}
+
+// Moves the layer
+function olMouseMove(e) {
+    var e = (e) ? e : event;
+
+    if (e.pageX) {
+        o3_x = e.pageX;
+        o3_y = e.pageY;
+    } else if (e.clientX) {
+        o3_x = eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');
+        o3_y = eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');
+    }
+    
+    if (o3_allowmove == 1) runHook("placeLayer", FREPLACE);
+
+    // MouseOut handler
+    if (hoveringSwitch && !olNs4 && runHook("cursorOff", FREPLACE)) {
+        (olHideDelay ? hideDelay(olHideDelay) : cClick());
+        hoveringSwitch = !hoveringSwitch;
+    }
+}
+
+// Fake function for 3.0 users.
+function no_overlib() { return ver3fix; }
+
+// Capture the mouse and chain other scripts.
+function olMouseCapture() {
+    capExtent = document;
+    var fN, str = '', l, k, f, wMv, sS, mseHandler = olMouseMove;
+    var re = /function[ ]*(\w*)\(/;
+    
+    wMv = (!olIe4 && window.onmousemove);
+    if (document.onmousemove || wMv) {
+        if (wMv) capExtent = window;
+        f = capExtent.onmousemove.toString();
+        fN = f.match(re);
+        if (fN == null) {
+            str = f+'(e); ';
+        } else if (fN[1] == 'anonymous' || fN[1] == 'olMouseMove' || (wMv && fN[1] == 'onmousemove')) {
+            if (!olOp && wMv) {
+                l = f.indexOf('{')+1;
+                k = f.lastIndexOf('}');
+                sS = f.substring(l,k);
+                if ((l = sS.indexOf('(')) != -1) {
+                    sS = sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');
+                    if (eval("typeof " + sS + " == 'undefined'")) window.onmousemove = null;
+                    else str = sS + '(e);';
+                }
+            }
+            if (!str) {
+                olCheckMouseCapture = false;
+                return;
+            }
+        } else {
+            if (fN[1]) str = fN[1]+'(e); ';
+            else {
+                l = f.indexOf('{')+1;
+                k = f.lastIndexOf('}');
+                str = f.substring(l,k) + '\n';
+            }
+        }
+        str += 'olMouseMove(e); ';
+        mseHandler = new Function('e', str);
+    }
+
+    capExtent.onmousemove = mseHandler;
+    if (olNs4) capExtent.captureEvents(Event.MOUSEMOVE);
+}
+
+////////
+// PARSING FUNCTIONS
+////////
+
+// Does the actual command parsing.
+function parseTokens(pf, ar) {
+    // What the next argument is expected to be.
+    var v, i, mode=-1, par = (pf != 'ol_');    
+    var fnMark = (par && !ar.length ? 1 : 0);
+
+    for (i = 0; i < ar.length; i++) {
+        if (mode < 0) {
+            // Arg is maintext,unless its a number between pmStart and pmUpper
+            // then its a command.
+            if (typeof ar[i] == 'number' && ar[i] > pmStart && ar[i] < pmUpper) {
+                fnMark = (par ? 1 : 0);
+                i--;   // backup one so that the next block can parse it
+            } else {
+                switch(pf) {
+                    case 'ol_':
+                        ol_text = ar[i].toString();
+                        break;
+                    default:
+                        o3_text=ar[i].toString();  
+                }
+            }
+            mode = 0;
+        } else {
+            // Note: NS4 doesn't like switch cases with vars.
+            if (ar[i] >= pmCount || ar[i]==DONOTHING) { continue; }
+            if (ar[i]==INARRAY) { fnMark = 0; eval(pf+'text=ol_texts['+ar[++i]+'].toString()'); continue; }
+            if (ar[i]==CAPARRAY) { eval(pf+'cap=ol_caps['+ar[++i]+'].toString()'); continue; }
+            if (ar[i]==STICKY) { if (pf!='ol_') eval(pf+'sticky=1'); continue; }
+            if (ar[i]==BACKGROUND) { eval(pf+'background="'+ar[++i]+'"'); continue; }
+            if (ar[i]==NOCLOSE) { if (pf!='ol_') opt_NOCLOSE(); continue; }
+            if (ar[i]==CAPTION) { eval(pf+"cap='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==CENTER || ar[i]==LEFT || ar[i]==RIGHT) { eval(pf+'hpos='+ar[i]); if(pf!='ol_') olHautoFlag=1; continue; }
+            if (ar[i]==OFFSETX) { eval(pf+'offsetx='+ar[++i]); continue; }
+            if (ar[i]==OFFSETY) { eval(pf+'offsety='+ar[++i]); continue; }
+            if (ar[i]==FGCOLOR) { eval(pf+'fgcolor="'+ar[++i]+'"'); continue; }
+            if (ar[i]==BGCOLOR) { eval(pf+'bgcolor="'+ar[++i]+'"'); continue; }
+            if (ar[i]==TEXTCOLOR) { eval(pf+'textcolor="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CAPCOLOR) { eval(pf+'capcolor="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CLOSECOLOR) { eval(pf+'closecolor="'+ar[++i]+'"'); continue; }
+            if (ar[i]==WIDTH) { eval(pf+'width='+ar[++i]); continue; }
+            if (ar[i]==BORDER) { eval(pf+'border='+ar[++i]); continue; }
+            if (ar[i]==CELLPAD) { i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad')); continue; }
+            if (ar[i]==STATUS) { eval(pf+"status='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==AUTOSTATUS) { eval(pf +'autostatus=('+pf+'autostatus == 1) ? 0 : 1'); continue; }
+            if (ar[i]==AUTOSTATUSCAP) { eval(pf +'autostatus=('+pf+'autostatus == 2) ? 0 : 2'); continue; }
+            if (ar[i]==HEIGHT) { eval(pf+'height='+pf+'aboveheight='+ar[++i]); continue; } // Same param again.
+            if (ar[i]==CLOSETEXT) { eval(pf+"close='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==SNAPX) { eval(pf+'snapx='+ar[++i]); continue; }
+            if (ar[i]==SNAPY) { eval(pf+'snapy='+ar[++i]); continue; }
+            if (ar[i]==FIXX) { eval(pf+'fixx='+ar[++i]); continue; }
+            if (ar[i]==FIXY) { eval(pf+'fixy='+ar[++i]); continue; }
+            if (ar[i]==RELX) { eval(pf+'relx='+ar[++i]); continue; }
+            if (ar[i]==RELY) { eval(pf+'rely='+ar[++i]); continue; }
+            if (ar[i]==FGBACKGROUND) { eval(pf+'fgbackground="'+ar[++i]+'"'); continue; }
+            if (ar[i]==BGBACKGROUND) { eval(pf+'bgbackground="'+ar[++i]+'"'); continue; }
+            if (ar[i]==PADX) { eval(pf+'padxl='+ar[++i]); eval(pf+'padxr='+ar[++i]); continue; }
+            if (ar[i]==PADY) { eval(pf+'padyt='+ar[++i]); eval(pf+'padyb='+ar[++i]); continue; }
+            if (ar[i]==FULLHTML) { if (pf!='ol_') eval(pf+'fullhtml=1'); continue; }
+            if (ar[i]==BELOW || ar[i]==ABOVE) { eval(pf+'vpos='+ar[i]); if (pf!='ol_') olVautoFlag=1; continue; }
+            if (ar[i]==CAPICON) { eval(pf+'capicon="'+ar[++i]+'"'); continue; }
+            if (ar[i]==TEXTFONT) { eval(pf+"textfont='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==CAPTIONFONT) { eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==CLOSEFONT) { eval(pf+"closefont='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==TEXTSIZE) { eval(pf+'textsize="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CAPTIONSIZE) { eval(pf+'captionsize="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CLOSESIZE) { eval(pf+'closesize="'+ar[++i]+'"'); continue; }
+            if (ar[i]==TIMEOUT) { eval(pf+'timeout='+ar[++i]); continue; }
+            if (ar[i]==FUNCTION) { if (pf=='ol_') { if (typeof ar[i+1]!='number') { v=ar[++i]; ol_function=(typeof v=='function' ? v : null); }} else {fnMark = 0; v = null; if (typeof ar[i+1]!='number') v = ar[++i];  opt_FUNCTION(v); } continue; }
+            if (ar[i]==DELAY) { eval(pf+'delay='+ar[++i]); continue; }
+            if (ar[i]==HAUTO) { eval(pf+'hauto=('+pf+'hauto == 0) ? 1 : 0'); continue; }
+            if (ar[i]==VAUTO) { eval(pf+'vauto=('+pf+'vauto == 0) ? 1 : 0'); continue; }
+            if (ar[i]==CLOSECLICK) { eval(pf +'closeclick=('+pf+'closeclick == 0) ? 1 : 0'); continue; }
+            if (ar[i]==WRAP) { eval(pf +'wrap=('+pf+'wrap == 0) ? 1 : 0'); continue; }
+            if (ar[i]==FOLLOWMOUSE) { eval(pf +'followmouse=('+pf+'followmouse == 1) ? 0 : 1'); continue; }
+            if (ar[i]==MOUSEOFF) { eval(pf +'mouseoff=('+pf+'mouseoff==0) ? 1 : 0'); v=ar[i+1]; if (pf != 'ol_' && eval(pf+'mouseoff') && typeof v == 'number' && (v < pmStart || v > pmUpper)) olHideDelay=ar[++i]; continue; }
+            if (ar[i]==CLOSETITLE) { eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'"); continue; }
+            if (ar[i]==CSSOFF||ar[i]==CSSCLASS) { eval(pf+'css='+ar[i]); continue; }
+            if (ar[i]==COMPATMODE) { eval(pf+'compatmode=('+pf+'compatmode==0) ? 1 : 0'); continue; }
+            if (ar[i]==FGCLASS) { eval(pf+'fgclass="'+ar[++i]+'"'); continue; }
+            if (ar[i]==BGCLASS) { eval(pf+'bgclass="'+ar[++i]+'"'); continue; }
+            if (ar[i]==TEXTFONTCLASS) { eval(pf+'textfontclass="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CAPTIONFONTCLASS) { eval(pf+'captionfontclass="'+ar[++i]+'"'); continue; }
+            if (ar[i]==CLOSEFONTCLASS) { eval(pf+'closefontclass="'+ar[++i]+'"'); continue; }
+            i = parseCmdLine(pf, i, ar);
+        }
+    }
+
+    if (fnMark && o3_function) o3_text = o3_function();
+    
+    if ((pf == 'o3_') && o3_wrap) {
+        o3_width = 0;
+        
+        var tReg=/<.*\n*>/ig;
+        if (!tReg.test(o3_text)) o3_text = o3_text.replace(/[ ]+/g, '&nbsp;');
+        if (!tReg.test(o3_cap))o3_cap = o3_cap.replace(/[ ]+/g, '&nbsp;');
+    }
+    if ((pf == 'o3_') && o3_sticky) {
+        if (!o3_close && (o3_frame != ol_frame)) o3_close = ol_close;
+        if (o3_mouseoff && (o3_frame == ol_frame)) opt_NOCLOSE(' ');
+    }
+}
+
+
+////////
+// LAYER FUNCTIONS
+////////
+
+// Writes to a layer
+function layerWrite(txt) {
+    txt += "\n";
+    if (olNs4) {
+        var lyr = o3_frame.document.layers['overDiv'].document
+        lyr.write(txt)
+        lyr.close()
+    } else if (typeof over.innerHTML != 'undefined') {
+        if (olIe5 && isMac) over.innerHTML = '';
+        over.innerHTML = txt;
+    } else {
+        range = o3_frame.document.createRange();
+        range.setStartAfter(over);
+        domfrag = range.createContextualFragment(txt);
+        
+        while (over.hasChildNodes()) {
+            over.removeChild(over.lastChild);
+        }
+        
+        over.appendChild(domfrag);
+    }
+}
+
+// Make an object visible
+function showObject(obj) {
+    runHook("showObject", FBEFORE);
+
+    var theObj=(olNs4 ? obj : obj.style);
+    theObj.visibility = 'visible';
+
+    runHook("showObject", FAFTER);
+}
+
+// Hides an object
+function hideObject(obj) {
+    runHook("hideObject", FBEFORE);
+
+    var theObj=(olNs4 ? obj : obj.style);
+    if (olNs6 && olShowId>0) { clearTimeout(olShowId); olShowId=0; }
+    theObj.visibility = 'hidden';
+    theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0);
+
+    if (o3_timerid > 0) clearTimeout(o3_timerid);
+    if (o3_delayid > 0) clearTimeout(o3_delayid);
+
+    o3_timerid = 0;
+    o3_delayid = 0;
+    self.status = "";
+
+    if (obj.onmouseout||obj.onmouseover) {
+        if (olNs4) obj.releaseEvents(Event.MOUSEOUT || Event.MOUSEOVER);
+        obj.onmouseout = obj.onmouseover = null;
+    }
+
+    runHook("hideObject", FAFTER);
+}
+
+// Move a layer
+function repositionTo(obj, xL, yL) {
+    var theObj=(olNs4 ? obj : obj.style);
+    theObj.left = xL + (!olNs4 ? 'px' : 0);
+    theObj.top = yL + (!olNs4 ? 'px' : 0);
+}
+
+// Check position of cursor relative to overDiv DIVision; mouseOut function
+function cursorOff() {
+    var left = parseInt(over.style.left);
+    var top = parseInt(over.style.top);
+    var right = left + (over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width));
+    var bottom = top + (over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight);
+
+    if (o3_x < left || o3_x > right || o3_y < top || o3_y > bottom) return true;
+
+    return false;
+}
+
+
+////////
+// COMMAND FUNCTIONS
+////////
+
+// Calls callme or the default function.
+function opt_FUNCTION(callme) {
+    o3_text = (callme ? (typeof callme=='string' ? (/.+\(.*\)/.test(callme) ? eval(callme) : callme) : callme()) : (o3_function ? o3_function() : 'No Function'));
+
+    return 0;
+}
+
+// Handle hovering
+function opt_NOCLOSE(unused) {
+    if (!unused) o3_close = "";
+
+    if (olNs4) {
+        over.captureEvents(Event.MOUSEOUT || Event.MOUSEOVER);
+        over.onmouseover = function () { if (o3_timerid > 0) { clearTimeout(o3_timerid); o3_timerid = 0; } }
+        over.onmouseout = function (e) { if (olHideDelay) hideDelay(olHideDelay); else cClick(e); }
+    } else {
+        over.onmouseover = function () {hoveringSwitch = true; if (o3_timerid > 0) { clearTimeout(o3_timerid); o3_timerid =0; } }
+    }
+
+    return 0;
+}
+
+// Function to scan command line arguments for multiples
+function opt_MULTIPLEARGS(i, args, parameter) {
+  var k=i, re, pV, str='';
+
+  for(k=i; k<args.length; k++) {
+        if(typeof args[k] == 'number' && args[k]>pmStart) break;
+        str += args[k] + ',';
+    }
+    if (str) str = str.substring(0,--str.length);
+
+    k--;  // reduce by one so the for loop this is in works correctly
+    pV=(olNs4 && /cellpad/i.test(parameter)) ? str.split(',')[0] : str;
+    eval(parameter + '="' + pV + '"');
+
+    return k;
+}
+
+// Remove &nbsp; in texts when done.
+function nbspCleanup() {
+    if (o3_wrap) {
+        o3_text = o3_text.replace(/\&nbsp;/g, ' ');
+        o3_cap = o3_cap.replace(/\&nbsp;/g, ' ');
+    }
+}
+
+// Escape embedded single quotes in text strings
+function escSglQuote(str) {
+  return str.toString().replace(/'/g,"\\'");
+}
+
+// Onload handler for window onload event
+function OLonLoad_handler(e) {
+    var re = /\w+\(.*\)[;\s]+/g, olre = /overlib\(|nd\(|cClick\(/, fn, l, i;
+
+    if(!olLoaded) olLoaded=1;
+
+  // Remove it for Gecko based browsers
+    if(window.removeEventListener && e.eventPhase == 3) window.removeEventListener("load",OLonLoad_handler,false);
+    else if(window.detachEvent) { // and for IE and Opera 4.x but execute calls to overlib, nd, or cClick()
+        window.detachEvent("onload",OLonLoad_handler);
+        var fN = document.body.getAttribute('onload');
+        if (fN) {
+            fN=fN.toString().match(re);
+            if (fN && fN.length) {
+                for (i=0; i<fN.length; i++) {
+                    if (/anonymous/.test(fN[i])) continue;
+                    while((l=fN[i].search(/\)[;\s]+/)) != -1) {
+                        fn=fN[i].substring(0,l+1);
+                        fN[i] = fN[i].substring(l+2);
+                        if (olre.test(fn)) eval(fn);
+                    }
+                }
+            }
+        }
+    }
+}
+
+// Wraps strings in Layer Generation Functions with the correct tags
+//    endWrap true(if end tag) or false if start tag
+//    fontSizeStr - font size string such as '1' or '10px'
+//    whichString is being wrapped -- 'text', 'caption', or 'close'
+function wrapStr(endWrap,fontSizeStr,whichString) {
+    var fontStr, fontColor, isClose=((whichString=='close') ? 1 : 0), hasDims=/[%\-a-z]+$/.test(fontSizeStr);
+    fontSizeStr = (olNs4) ? (!hasDims ? fontSizeStr : '1') : fontSizeStr;
+    if (endWrap) return (hasDims&&!olNs4) ? (isClose ? '</span>' : '</div>') : '</font>';
+    else {
+        fontStr='o3_'+whichString+'font';
+        fontColor='o3_'+((whichString=='caption')? 'cap' : whichString)+'color';
+        return (hasDims&&!olNs4) ? (isClose ? '<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">' : '<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">') : '<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7 ? '7' : fontSizeStr)+'">';
+    }
+}
+
+// Quotes Multi word font names; needed for CSS Standards adherence in font-family
+function quoteMultiNameFonts(theFont) {
+    var v, pM=theFont.split(',');
+    for (var i=0; i<pM.length; i++) {
+        v=pM[i];
+        v=v.replace(/^\s+/,'').replace(/\s+$/,'');
+        if(/\s/.test(v) && !/['"]/.test(v)) {
+            v="\'"+v+"\'";
+            pM[i]=v;
+        }
+    }
+    return pM.join();
+}
+
+// dummy function which will be overridden 
+function isExclusive(args) {
+    return false;
+}
+
+// Sets cellpadding style string value
+function setCellPadStr(parameter) {
+    var Str='', j=0, ary = new Array(), top, bottom, left, right;
+
+    Str+='padding: ';
+    ary=parameter.replace(/\s+/g,'').split(',');
+
+    switch(ary.length) {
+        case 2:
+            top=bottom=ary[j];
+            left=right=ary[++j];
+            break;
+        case 3:
+            top=ary[j];
+            left=right=ary[++j];
+            bottom=ary[++j];
+            break;
+        case 4:
+            top=ary[j];
+            right=ary[++j];
+            bottom=ary[++j];
+            left=ary[++j];
+            break;
+    }
+
+    Str+= ((ary.length==1) ? ary[0] + 'px;' : top + 'px ' + right + 'px ' + bottom + 'px ' + left + 'px;');
+
+    return Str;
+}
+
+// function will delay close by time milliseconds
+function hideDelay(time) {
+    if (time&&!o3_delay) {
+        if (o3_timerid > 0) clearTimeout(o3_timerid);
+
+        o3_timerid=setTimeout("cClick()",(o3_timeout=time));
+    }
+}
+
+// Was originally in the placeLayer() routine; separated out for future ease
+function horizontalPlacement(browserWidth, horizontalScrollAmount, widthFix) {
+    var placeX, iwidth=browserWidth, winoffset=horizontalScrollAmount;
+    var parsedWidth = parseInt(o3_width);
+
+    if (o3_fixx > -1 || o3_relx != null) {
+        // Fixed position
+        placeX=(o3_relx != null ? ( o3_relx < 0 ? winoffset +o3_relx+ iwidth - parsedWidth - widthFix : winoffset+o3_relx) : o3_fixx);
+    } else {  
+        // If HAUTO, decide what to use.
+        if (o3_hauto == 1) {
+            if ((o3_x - winoffset) > (iwidth / 2)) {
+                o3_hpos = LEFT;
+            } else {
+                o3_hpos = RIGHT;
+            }
+        }          
+
+        // From mouse
+        if (o3_hpos == CENTER) { // Center
+            placeX = o3_x+o3_offsetx-(parsedWidth/2);
+
+            if (placeX < winoffset) placeX = winoffset;
+        }
+
+        if (o3_hpos == RIGHT) { // Right
+            placeX = o3_x+o3_offsetx;
+
+            if ((placeX+parsedWidth) > (winoffset+iwidth - widthFix)) {
+                placeX = iwidth+winoffset - parsedWidth - widthFix;
+                if (placeX < 0) placeX = 0;
+            }
+        }
+        if (o3_hpos == LEFT) { // Left
+            placeX = o3_x-o3_offsetx-parsedWidth;
+            if (placeX < winoffset) placeX = winoffset;
+        }      
+
+        // Snapping!
+        if (o3_snapx > 1) {
+            var snapping = placeX % o3_snapx;
+
+            if (o3_hpos == LEFT) {
+                placeX = placeX - (o3_snapx+snapping);
+            } else {
+                // CENTER and RIGHT
+                placeX = placeX+(o3_snapx - snapping);
+            }
+
+            if (placeX < winoffset) placeX = winoffset;
+        }
+    }    
+
+    return placeX;
+}
+
+// was originally in the placeLayer() routine; separated out for future ease
+function verticalPlacement(browserHeight,verticalScrollAmount) {
+    var placeY, iheight=browserHeight, scrolloffset=verticalScrollAmount;
+    var parsedHeight=(o3_aboveheight ? parseInt(o3_aboveheight) : (olNs4 ? over.clip.height : over.offsetHeight));
+
+    if (o3_fixy > -1 || o3_rely != null) {
+        // Fixed position
+        placeY=(o3_rely != null ? (o3_rely < 0 ? scrolloffset+o3_rely+iheight - parsedHeight : scrolloffset+o3_rely) : o3_fixy);
+    } else {
+        // If VAUTO, decide what to use.
+        if (o3_vauto == 1) {
+            if ((o3_y - scrolloffset) > (iheight / 2) && o3_vpos == BELOW && (o3_y + parsedHeight + o3_offsety - (scrolloffset + iheight) > 0)) {
+                o3_vpos = ABOVE;
+            } else if (o3_vpos == ABOVE && (o3_y - (parsedHeight + o3_offsety) - scrolloffset < 0)) {
+                o3_vpos = BELOW;
+            }
+        }
+
+        // From mouse
+        if (o3_vpos == ABOVE) {
+            if (o3_aboveheight == 0) o3_aboveheight = parsedHeight; 
+
+            placeY = o3_y - (o3_aboveheight+o3_offsety);
+            if (placeY < scrolloffset) placeY = scrolloffset;
+        } else {
+            // BELOW
+            placeY = o3_y+o3_offsety;
+        } 
+
+        // Snapping!
+        if (o3_snapy > 1) {
+            var snapping = placeY % o3_snapy;              
+
+            if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
+                placeY = placeY - (o3_snapy+snapping);
+            } else {
+                placeY = placeY+(o3_snapy - snapping);
+            }             
+
+            if (placeY < scrolloffset) placeY = scrolloffset;
+        }
+    }
+
+    return placeY;
+}
+
+// checks positioning flags
+function checkPositionFlags() {
+    if (olHautoFlag) olHautoFlag = o3_hauto=0;
+    if (olVautoFlag) olVautoFlag = o3_vauto=0;
+    return true;
+}
+
+// get Browser window width
+function windowWidth() {
+    var w;
+    if (o3_frame.innerWidth) w=o3_frame.innerWidth;
+    else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth')) 
+        w=eval('o3_frame.'+docRoot+'.clientWidth');
+    return w;            
+}
+
+// create the div container for popup content if it doesn't exist
+function createDivContainer(id,frm,zValue) {
+    id = (id || 'overDiv'), frm = (frm || o3_frame), zValue = (zValue || 1000);
+    var objRef, divContainer = layerReference(id);
+
+    if (divContainer == null) {
+        if (olNs4) {
+            divContainer = frm.document.layers[id] = new Layer(window.innerWidth, frm);
+            objRef = divContainer;
+        } else {
+            var body = (olIe4 ? frm.document.all.tags('BODY')[0] : frm.document.getElementsByTagName("BODY")[0]);
+            if (olIe4&&!document.getElementById) {
+                body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>');
+                divContainer=layerReference(id);
+            } else {
+                divContainer = frm.document.createElement("DIV");
+                divContainer.id = id;
+                body.appendChild(divContainer);
+            }
+            objRef = divContainer.style;
+        }
+
+        objRef.position = 'absolute';
+        objRef.visibility = 'hidden';
+        objRef.zIndex = zValue;
+        if (olIe4&&!olOp) objRef.left = objRef.top = '0px';
+        else objRef.left = objRef.top =  -10000 + (!olNs4 ? 'px' : 0);
+    }
+
+    return divContainer;
+}
+
+// get reference to a layer with ID=id
+function layerReference(id) {
+    return (olNs4 ? o3_frame.document.layers[id] : (document.all ? o3_frame.document.all[id] : o3_frame.document.getElementById(id)));
+}
+////////
+//  UTILITY FUNCTIONS
+////////
+
+// Checks if something is a function.
+function isFunction(fnRef) {
+    var rtn = true;
+
+    if (typeof fnRef == 'object') {
+        for (var i = 0; i < fnRef.length; i++) {
+            if (typeof fnRef[i]=='function') continue;
+            rtn = false;
+            break;
+        }
+    } else if (typeof fnRef != 'function') {
+        rtn = false;
+    }
+    
+    return rtn;
+}
+
+// Converts an array into an argument string for use in eval.
+function argToString(array, strtInd, argName) {
+    var jS = strtInd, aS = '', ar = array;
+    argName=(argName ? argName : 'ar');
+    
+    if (ar.length > jS) {
+        for (var k = jS; k < ar.length; k++) aS += argName+'['+k+'], ';
+        aS = aS.substring(0, aS.length-2);
+    }
+    
+    return aS;
+}
+
+// Places a hook in the correct position in a hook point.
+function reOrder(hookPt, fnRef, order) {
+    var newPt = new Array(), match, i, j;
+
+    if (!order || typeof order == 'undefined' || typeof order == 'number') return hookPt;
+    
+    if (typeof order=='function') {
+        if (typeof fnRef=='object') {
+            newPt = newPt.concat(fnRef);
+        } else {
+            newPt[newPt.length++]=fnRef;
+        }
+        
+        for (i = 0; i < hookPt.length; i++) {
+            match = false;
+            if (typeof fnRef == 'function' && hookPt[i] == fnRef) {
+                continue;
+            } else {
+                for(j = 0; j < fnRef.length; j++) if (hookPt[i] == fnRef[j]) {
+                    match = true;
+                    break;
+                }
+            }
+            if (!match) newPt[newPt.length++] = hookPt[i];
+        }
+
+        newPt[newPt.length++] = order;
+
+    } else if (typeof order == 'object') {
+        if (typeof fnRef == 'object') {
+            newPt = newPt.concat(fnRef);
+        } else {
+            newPt[newPt.length++] = fnRef;
+        }
+        
+        for (j = 0; j < hookPt.length; j++) {
+            match = false;
+            if (typeof fnRef == 'function' && hookPt[j] == fnRef) {
+                continue;
+            } else {
+                for (i = 0; i < fnRef.length; i++) if (hookPt[j] == fnRef[i]) {
+                    match = true;
+                    break;
+                }
+            }
+            if (!match) newPt[newPt.length++]=hookPt[j];
+        }
+
+        for (i = 0; i < newPt.length; i++) hookPt[i] = newPt[i];
+        newPt.length = 0;
+        
+        for (j = 0; j < hookPt.length; j++) {
+            match = false;
+            for (i = 0; i < order.length; i++) {
+                if (hookPt[j] == order[i]) {
+                    match = true;
+                    break;
+                }
+            }
+            if (!match) newPt[newPt.length++] = hookPt[j];
+        }
+        newPt = newPt.concat(order);
+    }
+
+    hookPt = newPt;
+
+    return hookPt;
+}
+
+////////
+//  PLUGIN ACTIVATION FUNCTIONS
+////////
+
+// Runs plugin functions to set runtime variables.
+function setRunTimeVariables(){
+    if (typeof runTime != 'undefined' && runTime.length) {
+        for (var k = 0; k < runTime.length; k++) {
+            runTime[k]();
+        }
+    }
+}
+
+// Runs plugin functions to parse commands.
+function parseCmdLine(pf, i, args) {
+    if (typeof cmdLine != 'undefined' && cmdLine.length) { 
+        for (var k = 0; k < cmdLine.length; k++) { 
+            var j = cmdLine[k](pf, i, args);
+            if (j >- 1) {
+                i = j;
+                break;
+            }
+        }
+    }
+
+    return i;
+}
+
+// Runs plugin functions to do things after parse.
+function postParseChecks(pf,args){
+    if (typeof postParse != 'undefined' && postParse.length) {
+        for (var k = 0; k < postParse.length; k++) {
+            if (postParse[k](pf,args)) continue;
+            return false;  // end now since have an error
+        }
+    }
+    return true;
+}
+
+
+////////
+//  PLUGIN REGISTRATION FUNCTIONS
+////////
+
+// Registers commands and creates constants.
+function registerCommands(cmdStr) {
+    if (typeof cmdStr!='string') return;
+
+    var pM = cmdStr.split(',');
+    pms = pms.concat(pM);
+
+    for (var i = 0; i< pM.length; i++) {
+        eval(pM[i].toUpperCase()+'='+pmCount++);
+    }
+}
+
+// Registers no-parameter commands
+function registerNoParameterCommands(cmdStr) {
+    if (!cmdStr && typeof cmdStr != 'string') return;
+    pmt=(!pmt) ? cmdStr : pmt + ',' + cmdStr;
+}
+
+// Register a function to hook at a certain point.
+function registerHook(fnHookTo, fnRef, hookType, optPm) {
+    var hookPt, last = typeof optPm;
+    
+    if (fnHookTo == 'plgIn'||fnHookTo == 'postParse') return;
+    if (typeof hookPts[fnHookTo] == 'undefined') hookPts[fnHookTo] = new FunctionReference();
+
+    hookPt = hookPts[fnHookTo];
+
+    if (hookType != null) {
+        if (hookType == FREPLACE) {
+            hookPt.ovload = fnRef;  // replace normal overlib routine
+            if (fnHookTo.indexOf('ol_content_') > -1) hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef; 
+
+        } else if (hookType == FBEFORE || hookType == FAFTER) {
+            var hookPt=(hookType == 1 ? hookPt.before : hookPt.after);
+
+            if (typeof fnRef == 'object') {
+                hookPt = hookPt.concat(fnRef);
+            } else {
+                hookPt[hookPt.length++] = fnRef;
+            }
+
+            if (optPm) hookPt = reOrder(hookPt, fnRef, optPm);
+
+        } else if (hookType == FALTERNATE) {
+            if (last=='number') hookPt.alt[pms[optPm-1-pmStart]] = fnRef;
+        } else if (hookType == FCHAIN) {
+            hookPt = hookPt.chain; 
+            if (typeof fnRef=='object') hookPt=hookPt.concat(fnRef); // add other functions 
+            else hookPt[hookPt.length++]=fnRef;
+        }
+
+        return;
+    }
+}
+
+// Register a function that will set runtime variables.
+function registerRunTimeFunction(fn) {
+    if (isFunction(fn)) {
+        if (typeof fn == 'object') {
+            runTime = runTime.concat(fn);
+        } else {
+            runTime[runTime.length++] = fn;
+        }
+    }
+}
+
+// Register a function that will handle command parsing.
+function registerCmdLineFunction(fn){
+    if (isFunction(fn)) {
+        if (typeof fn == 'object') {
+            cmdLine = cmdLine.concat(fn);
+        } else {
+            cmdLine[cmdLine.length++] = fn;
+        }
+    }
+}
+
+// Register a function that does things after command parsing. 
+function registerPostParseFunction(fn){
+    if (isFunction(fn)) {
+        if (typeof fn == 'object') {
+            postParse = postParse.concat(fn);
+        } else {
+            postParse[postParse.length++] = fn;
+        }
+    }
+}
+
+////////
+//  PLUGIN REGISTRATION FUNCTIONS
+////////
+
+// Runs any hooks registered.
+function runHook(fnHookTo, hookType) {
+    var l = hookPts[fnHookTo], k, rtnVal = null, optPm, arS, ar = runHook.arguments;
+
+    if (hookType == FREPLACE) {
+        arS = argToString(ar, 2);
+
+        if (typeof l == 'undefined' || !(l = l.ovload)) rtnVal = eval(fnHookTo+'('+arS+')');
+        else rtnVal = eval('l('+arS+')');
+
+    } else if (hookType == FBEFORE || hookType == FAFTER) {
+        if (typeof l != 'undefined') {
+            l=(hookType == 1 ? l.before : l.after);
+    
+            if (l.length) {
+                arS = argToString(ar, 2);
+                for (var k = 0; k < l.length; k++) eval('l[k]('+arS+')');
+            }
+        }
+    } else if (hookType == FALTERNATE) {
+        optPm = ar[2];
+        arS = argToString(ar, 3);
+
+        if (typeof l == 'undefined' || (l = l.alt[pms[optPm-1-pmStart]]) == 'undefined') {
+            rtnVal = eval(fnHookTo+'('+arS+')');
+        } else {
+            rtnVal = eval('l('+arS+')');
+        }
+    } else if (hookType == FCHAIN) {
+        arS=argToString(ar,2);
+        l=l.chain;
+
+        for (k=l.length; k > 0; k--) if((rtnVal=eval('l[k-1]('+arS+')'))!=void(0)) break;
+    }
+
+    return rtnVal;
+}
+
+////////
+// OBJECT CONSTRUCTORS
+////////
+
+// Object for handling hooks.
+function FunctionReference() {
+    this.ovload = null;
+    this.before = new Array();
+    this.after = new Array();
+    this.alt = new Array();
+    this.chain = new Array();
+}
+
+// Object for simple access to the overLIB version used.
+// Examples: simpleversion:351 major:3 minor:5 revision:1
+function Info(version, prerelease) {
+    this.version = version;
+    this.prerelease = prerelease;
+
+    this.simpleversion = Math.round(this.version*100);
+    this.major = parseInt(this.simpleversion / 100);
+    this.minor = parseInt(this.simpleversion / 10) - this.major * 10;
+    this.revision = parseInt(this.simpleversion) - this.major * 100 - this.minor * 10;
+    this.meets = meets;
+}
+
+// checks for Core Version required
+function meets(reqdVersion) {
+    return (!reqdVersion) ? false : this.simpleversion >= Math.round(100*parseFloat(reqdVersion));
+}
+
+
+////////
+// STANDARD REGISTRATIONS
+////////
+registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSOFF);
+registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSOFF);
+registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSOFF);
+registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSCLASS);
+registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSCLASS);
+registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSCLASS);
+registerPostParseFunction(checkPositionFlags);
+registerHook("hideObject", nbspCleanup, FAFTER);
+registerHook("horizontalPlacement", horizontalPlacement, FCHAIN);
+registerHook("verticalPlacement", verticalPlacement, FCHAIN);
+if (olNs4||(olIe5&&isMac)||olKq) olLoaded=1;
+registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
+///////
+// ESTABLISH MOUSECAPTURING
+///////
+
+// Capture events, alt. diffuses the overlib function.
+var olCheckMouseCapture=true;
+if ((olNs4 || olNs6 || olIe4)) {
+    olMouseCapture();
+} else {
+    overlib = no_overlib;
+    nd = no_overlib;
+    ver3fix = true;
+}
Index: trunk/admin/media/parameters.php
===================================================================
--- trunk/admin/media/parameters.php	(nonexistent)
+++ trunk/admin/media/parameters.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+function __unserialize($sObject) {  // found in php manual :-)
+    $_ret = preg_replace_callback(
+                    '!s:(\d+):"(.*?)";!', 
+                    function($matches) {return 's:'.strlen($matches[2]).':"'.$matches[2].'";';}, 
+                    $sObject 
+             );
+    return unserialize($_ret);
+}
+$pathsettings = array();
+if(DEFAULT_THEME != ' wb_theme') {
+    $query = $database->query ( "SELECT * FROM ".TABLE_PREFIX."settings where `name`='mediasettings'" );
+    if ($query && $query->numRows() > 0) {
+        $settings = $query->fetchRow();
+        $pathsettings = __unserialize($settings['value']);
+    } else {
+        $database->query ( "INSERT INTO ".TABLE_PREFIX."settings (`name`,`value`) VALUES ('mediasettings','')" );
+    }
+}
+

Property changes on: trunk/admin/media/parameters.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/rename.php
===================================================================
--- trunk/admin/media/rename.php	(nonexistent)
+++ trunk/admin/media/rename.php	(revision 2)
@@ -0,0 +1,158 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require(dirname(dirname(__DIR__)).'/config.php');
+
+// Create admin object
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Media', 'media_rename', false);
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get the current dir
+$directory = $admin->get_get('dir');
+$directory = ($directory == '/') ?  '' : $directory;
+
+$dirlink = 'browse.php?dir='.$directory;
+$rootlink = 'browse.php?dir=';
+// $file_id = intval($admin->get_get('id'));
+
+// first Check to see if it contains ..
+if (!check_media_path($directory)) {
+    $admin->print_error($MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'],$rootlink, false);
+}
+
+// Get the temp id
+$file_id = intval($admin->checkIDKEY('id', false, $_SERVER['REQUEST_METHOD']))-1;
+if ($file_id===false) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],$dirlink, false);
+}
+
+$DIR  = array();
+$FILE = array();
+// Get home folder not to show
+$home_folders = get_home_folders();
+// Check for potentially malicious files
+$forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+// Figure out what folder name the temp id is
+if($handle = opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$directory)) {
+    // Loop through the files and dirs an add to list
+   while (false !== ($file = readdir($handle))) {
+        $info = pathinfo($file);
+        $ext = isset($info['extension']) ? $info['extension'] : '';
+        if(substr($file, 0, 1) != '.' AND $file != '.svn' AND $file != 'index.php') {
+            if( !preg_match('/'.$forbidden_file_types.'$/i', $ext) ) {
+                if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
+                    if(!isset($home_folders[$directory.'/'.$file])) {
+                        $DIR[] = $file;
+                    }
+                } else {
+                    $FILE[] = $file;
+                }
+            }
+        }
+    }
+closedir($handle);
+}
+
+    $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+    sort($DIR, $iSortFlags);
+    sort($FILE, $iSortFlags);
+    $aListDir = array_merge($DIR,$FILE);
+    $temp_id = 0;
+    if(isset($aListDir)) {
+        foreach($aListDir AS $name)
+        {
+            if(!isset($rename_file)&& ($file_id == $temp_id)) {
+                $rename_file = $name;
+                $type = is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$rename_file)?'folder':'file';
+            }
+            $temp_id++;
+        }
+    }
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.$file_id.'=='.$temp_id.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $rename_file.' '.$type ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $aListDir ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+
+if(!isset($rename_file)) {
+    $admin->print_error($MESSAGE['MEDIA_FILE_NOT_FOUND'], $dirlink, false);
+}
+
+$sExtension = '';
+$sBasename = $rename_file;
+preg_match (
+    '/^(?:.*?[\/])?([^\/]*?)\.([^\.]*)$/iU',
+    str_replace('\\', '/', $rename_file),
+    $aMatches
+);
+if (sizeof($aMatches) == 3) {
+    $sBasename  = $aMatches[1];
+    $sExtension = $aMatches[2];
+}
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('media_rename.htt')));
+$template->set_file('page', 'media_rename.htt');
+$template->set_block('page', 'main_block', 'main');
+//echo WB_PATH.'/media/'.$directory.'/'.$rename_file;
+if($type == 'folder') {
+    $template->set_var('DISPlAY_EXTENSION', 'hide');
+    $extension = '';
+} else {
+    $template->set_var('DISPlAY_EXTENSION', '');
+    $extension = strstr($rename_file, '.');
+}
+
+if($type == 'folder') {
+    $type = $TEXT['FOLDER'];
+} else {
+    $type = $TEXT['FILE'];
+}
+
+$template->set_var(array(
+                    'THEME_URL' => THEME_URL,
+                    'FILENAME' => $rename_file,
+                    'BASENAME' => $sBasename,
+                    'DIR' => $directory,
+                    'FILE_ID' => $admin->getIDKEY($file_id),
+                    // 'FILE_ID' => $file_id,
+                    'TYPE' => $type,
+                    'EXTENSION' => $sExtension,
+                    'FTAN' => $admin->getFTAN()
+                )
+            );
+
+
+// Insert language text and messages
+$template->set_var(array(
+                    'TEXT_TO' => $TEXT['TO'],
+                    'TEXT_RENAME' => $TEXT['RENAME'],
+                    'TEXT_CANCEL' => $TEXT['CANCEL'],
+                    'TEXT_UP' => $TEXT['UP'],
+                    'TEXT_OVERWRITE_EXISTING' => $TEXT['OVERWRITE_EXISTING']
+                )
+            );
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');

Property changes on: trunk/admin/media/rename.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/rename2.php
===================================================================
--- trunk/admin/media/rename2.php	(nonexistent)
+++ trunk/admin/media/rename2.php	(revision 2)
@@ -0,0 +1,172 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Create admin object
+$admin = new admin('Media', 'media_rename', false);
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get the current dir
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$directory = (isset(${$requestMethod}['dir'])) ? ${$requestMethod}['dir'] : '';
+$directory = ($directory == '/') ?  '' : $directory;
+
+$dirlink = 'browse.php?dir='.$directory;
+$rootlink = 'browse.php?dir=';
+// $file_id = intval($admin->get_post('id'));
+
+// first Check to see if it contains ..
+if (!check_media_path($directory)) {
+    $admin->print_error($MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'],$rootlink, false);
+}
+
+// Get the temp id
+$iFileId = $file_id = intval($admin->checkIDKEY('id', false, $_SERVER['REQUEST_METHOD']));
+if ($file_id===false) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],$dirlink, false);
+}
+
+$DIR  = array();
+$FILE = array();
+// Check for potentially malicious files
+$forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+// Get home folder not to show
+$home_folders = get_home_folders();
+
+// Figure out what folder name the temp id is
+if($handle = opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$directory)) {
+    // Loop through the files and dirs an add to list
+    $temp_id = 0;
+    while (false !== ($file = readdir($handle))) {
+        if(substr($file, 0, 1) != '.' AND $file != '.svn' AND $file != 'index.php') {
+            $info = pathinfo($file);
+            $ext = isset($info['extension']) ? $info['extension'] : '';
+            if( !preg_match('/'.$forbidden_file_types.'$/i', $ext) ) {
+                if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file)) {
+                    if(!isset($home_folders[$directory.'/'.$file])) {
+                        $DIR[] = $file;
+                    }
+                } else {
+                    $FILE[] = $file;
+                }
+            }
+        }
+    }
+closedir($handle);
+}
+
+    $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+    sort($DIR,  $iSortFlags);
+    sort($FILE, $iSortFlags);
+    $aListDir = array_merge($DIR,$FILE);
+    $temp_id = 0;
+    if(isset($aListDir)) {
+//        sort($aListDir, SORT_REGULAR|SORT_FLAG_CASE);
+        foreach($aListDir AS $name)
+        {
+            if(!isset($rename_file)&& ($file_id == $temp_id)) {
+                $rename_file = $name;
+                $type = is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$rename_file)?'folder':'file';
+            }
+            $temp_id++;
+        }
+    }
+
+$file_id = $admin->getIDKEY($file_id);
+
+if(!isset($rename_file)) {
+    $admin->print_error($MESSAGE['MEDIA_FILE_NOT_FOUND'], $dirlink, false);
+}
+
+// Check if they entered a new name
+if(media_filename($admin->get_post('name')) == "") {
+    $admin->print_error($MESSAGE['MEDIA_BLANK_NAME'], "rename.php?dir=$directory&id=$file_id", false);
+} else {
+    $old_name = $admin->get_post('old_name');
+    $new_name =  media_filename($admin->get_post('name'));
+}
+
+// Check if they entered an extension
+if($type == 'file') {
+    if (strstr($new_name,'.')){
+        $new_name = str_replace('.', '_', $new_name);
+    }
+    if(media_filename($admin->get_post('extension')) == "") {
+        $name = $new_name;
+    } else {
+        $extension = media_filename($admin->get_post('extension'));
+        $name = $new_name.'.'.trim($extension,'.');
+    }
+} elseif($type == 'folder') {
+    $extension = '';
+    $name = $new_name;
+}
+
+// Join new name and extension
+
+$info = pathinfo(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$name);
+$ext = isset($info['extension']) ? $info['extension'] : '';
+$dots = (substr($info['basename'], 0, 1) == '.') || (substr($info['basename'], -1, 1) == '.');
+
+if( preg_match('/'.$forbidden_file_types.'$/i', $ext) || $dots == '.' ) {
+    $admin->print_error($MESSAGE['MEDIA_CANNOT_RENAME'], "rename.php?dir=$directory&id=$file_id", false);
+}
+
+// Check if the name contains ..
+if(strstr($name, '..')) {
+    $admin->print_error($MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'], "rename.php?dir=$directory&id=$file_id", false);
+}
+
+// Check if the name is index.php
+if($name == 'index.php') {
+    $admin->print_error($MESSAGE['MEDIA_NAME_INDEX_PHP'], "rename.php?dir=$directory&id=$file_id", false);
+}
+
+// Check that the name still has a value
+if($name == '') {
+    $admin->print_error($MESSAGE['MEDIA_BLANK_NAME'], "rename.php?dir=$directory&id=$file_id", false);
+}
+
+$info = pathinfo(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$rename_file);
+$ext = isset($info['extension']) ? $info['extension'] : '';
+$dots = (substr($info['basename'], 0, 1) == '.') || (substr($info['basename'], -1, 1) == '.');
+
+if( preg_match('/'.$forbidden_file_types.'$/i', $ext) || $dots == '.' ) {
+    $admin->print_error($MESSAGE['MEDIA_CANNOT_RENAME'], "rename.php?dir=$directory&id=$file_id", false);
+}
+
+// Check if we should overwrite or not
+if($admin->get_post('overwrite') != 'yes' AND file_exists(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$name) == true) {
+    if($type == 'folder') {
+        $admin->print_error($MESSAGE['MEDIA_DIR_EXISTS'], "rename.php?dir=$directory&id=$file_id", false);
+    } else {
+        $admin->print_error($MESSAGE['MEDIA_FILE_EXISTS'], "rename.php?dir=$directory&id=$file_id", false);
+    }
+}
+
+// Try and rename the file/folder
+if(rename(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$rename_file, WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$name)) {
+    $usedFiles = array();
+    // feature freeze
+    // require_once(ADMIN_PATH.'/media/dse.php');
+    $admin->print_success($MESSAGE['MEDIA_RENAMED'], $dirlink);
+} else {
+    $admin->print_error($MESSAGE['MEDIA_CANNOT_RENAME'], "rename.php?dir=$directory&id=$file_id", false);
+}

Property changes on: trunk/admin/media/rename2.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/resize_img.php
===================================================================
--- trunk/admin/media/resize_img.php	(nonexistent)
+++ trunk/admin/media/resize_img.php	(revision 2)
@@ -0,0 +1,285 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+    /**
+     * Image Resizer.
+     * @author : Harish Chauhan
+     * @copyright : Freeware
+     * About :This PHP script will resize the given image and can show on the fly or save as image file.
+     *
+     */
+
+
+    define("HAR_AUTO_NAME",1);
+    Class RESIZEIMAGE
+    {
+        var $imgFile="";
+        var $imgWidth=0;
+        var $imgHeight=0;
+        var $imgType="";
+        var $imgAttr="";
+        var $type=NULL;
+        var $_img=NULL;
+        var $_error="";
+
+        /**
+         * Constructor
+         *
+         * @param [String $imgFile] Image File Name
+         * @return RESIZEIMAGE (Class Object)
+         */
+
+        public function __construct($imgFile="")
+        {
+            if (!function_exists("imagecreate"))
+            {
+                $this->_error="Error: GD Library is not available.";
+                return false;
+            }
+
+            $this->type=Array(1 => 'GIF', 2 => 'JPG', 3 => 'PNG', 4 => 'SWF', 5 => 'PSD', 6 => 'BMP', 7 => 'TIFF', 8 => 'TIFF', 9 => 'JPC', 10 => 'JP2', 11 => 'JPX', 12 => 'JB2', 13 => 'SWC', 14 => 'IFF', 15 => 'WBMP', 16 => 'XBM');
+            if(!empty($imgFile))
+                $this->setImage($imgFile);
+        }
+        /**
+         * Error occured while resizing the image.
+         *
+         * @return String
+         */
+        function error()
+        {
+            return $this->_error;
+        }
+
+        /**
+         * Set image file name
+         *
+         * @param String $imgFile
+         * @return void
+         */
+        function setImage($imgFile)
+        {
+            $this->imgFile=$imgFile;
+            return $this->_createImage();
+        }
+        /**
+         *
+         * @return void
+         */
+        function close()
+        {
+            return @imagedestroy($this->_img);
+        }
+        /**
+         * Resize a image to given width and height and keep it's current width and height ratio
+         *
+         * @param Number $imgwidth
+         * @param Numnber $imgheight
+         * @param String $newfile
+         */
+        function resize_limitwh($imgwidth,$imgheight,$newfile=NULL)
+        {
+            $image_per = 100;
+            list($width, $height, $type, $attr) = @getimagesize($this->imgFile);
+            if($width > $imgwidth && $imgwidth > 0)
+                $image_per = (double)(($imgwidth * 100) / $width);
+
+            if(floor(($height * $image_per)/100)>$imgheight && $imgheight > 0)
+                $image_per = (double)(($imgheight * 100) / $height);
+
+            $this->resize_percentage($image_per,$newfile);
+
+        }
+        /**
+         * Resize an image to given percentage.
+         *
+         * @param Number $percent
+         * @param String $newfile
+         * @return Boolean
+         */
+        function resize_percentage($percent=100,$newfile=NULL)
+        {
+            $newWidth=($this->imgWidth*$percent)/100;
+            $newHeight=($this->imgHeight*$percent)/100;
+            return $this->resize($newWidth,$newHeight,$newfile);
+        }
+        /**
+         * Resize an image to given X and Y percentage.
+         *
+         * @param Number $xpercent
+         * @param Number $ypercent
+         * @param String $newfile
+         * @return Boolean
+         */
+        function resize_xypercentage($xpercent=100,$ypercent=100,$newfile=NULL)
+        {
+            $newWidth=($this->imgWidth*$xpercent)/100;
+            $newHeight=($this->imgHeight*$ypercent)/100;
+            return $this->resize($newWidth,$newHeight,$newfile);
+        }
+
+        /**
+         * Resize an image to given width and height
+         *
+         * @param Number $width
+         * @param Number $height
+         * @param String $newfile
+         * @return Boolean
+         */
+        function resize($width,$height,$newfile=NULL)
+        {
+            if(empty($this->imgFile))
+            {
+                $this->_error="File name is not initialised.";
+                return false;
+            }
+            if($this->imgWidth<=0 || $this->imgHeight<=0)
+            {
+                $this->_error="Could not resize given image";
+                return false;
+            }
+            if($width<=0)
+                $width=$this->imgWidth;
+            if($height<=0)
+                $height=$this->imgHeight;
+
+            return $this->_resize($width,$height,$newfile);
+        }
+
+        /**
+         * Get the image attributes
+         * @access Private
+         *
+         */
+        function _getImageInfo()
+        {
+            @list($this->imgWidth,$this->imgHeight,$type,$this->imgAttr)=@getimagesize($this->imgFile);
+            $this->imgType=$this->type[$type];
+        }
+
+        /**
+         * Create the image resource
+         * @access Private
+         * @return Boolean
+         */
+        function _createImage()
+        {
+            $this->_getImageInfo($this->imgFile);
+            if($this->imgType=='GIF')
+            {
+                $this->_img=@imagecreatefromgif($this->imgFile);
+            }
+            elseif($this->imgType=='JPG')
+            {
+                $this->_img=@imagecreatefromjpeg($this->imgFile);
+            }
+            elseif($this->imgType=='PNG')
+            {
+                $this->_img=@imagecreatefrompng($this->imgFile);
+            }
+            if(!$this->_img || !@is_resource($this->_img))
+            {
+                $this->_error="Error loading ".$this->imgFile;
+                return false;
+            }
+            return true;
+        }
+
+        /**
+         * Function is used to resize the image
+         *
+         * @access Private
+         * @param Number $width
+         * @param Number $height
+         * @param String $newfile
+         * @return Boolean
+         */
+        function _resize($width,$height,$newfile=NULL)
+        {
+            if (!function_exists("imagecreate"))
+            {
+                $this->_error="Error: GD Library is not available.";
+                return false;
+            }
+
+            $newimg=@imagecreatetruecolor($width,$height);
+            //imagecolortransparent( $newimg, imagecolorat( $newimg, 0, 0 ) );
+
+            if($this->imgType=='GIF' || $this->imgType=='PNG')
+            {
+                /** Code to keep transparency of image **/
+                $colorcount = imagecolorstotal($this->_img);
+                if ($colorcount == 0) $colorcount = 256;
+                imagetruecolortopalette($newimg,true,$colorcount);
+                imagepalettecopy($newimg,$this->_img);
+                $transparentcolor = imagecolortransparent($this->_img);
+                imagefill($newimg,0,0,$transparentcolor);
+                imagecolortransparent($newimg,$transparentcolor);
+            }
+
+            @imagecopyresampled ( $newimg, $this->_img, 0,0,0,0, $width, $height, $this->imgWidth,$this->imgHeight);
+
+
+
+            if($newfile===HAR_AUTO_NAME)
+            {
+                if(@preg_match("/\..*+$/",@basename($this->imgFile),$matches))
+                       $newfile=@substr_replace($this->imgFile,"_har",-@strlen($matches[0]),0);
+            }
+            elseif(!empty($newfile))
+            {
+                if(!@preg_match("/\..*+$/",@basename($newfile)))
+                {
+                    if(@preg_match("/\..*+$/",@basename($this->imgFile),$matches))
+                       $newfile=$newfile.$matches[0];
+                }
+            }
+
+            if($this->imgType=='GIF')
+            {
+                if(!empty($newfile))
+                    @imagegif($newimg,$newfile);
+                else
+                {
+                    @header("Content-type: image/gif");
+                    @imagegif($newimg);
+                }
+            }
+            elseif($this->imgType=='JPG')
+            {
+                if(!empty($newfile))
+                    @imagejpeg($newimg,$newfile,85);
+                else
+                {
+                    @header("Content-type: image/jpeg");
+                    @imagejpeg($newimg);
+                }
+            }
+            elseif($this->imgType=='PNG')
+            {
+                if(!empty($newfile))
+                    @imagepng($newimg,$newfile);
+                else
+                {
+                    @header("Content-type: image/png");
+                    @imagepng($newimg);
+                }
+            }
+            @imagedestroy($newimg);
+        }
+    }

Property changes on: trunk/admin/media/resize_img.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/setparameter.php
===================================================================
--- trunk/admin/media/setparameter.php	(nonexistent)
+++ trunk/admin/media/setparameter.php	(revision 2)
@@ -0,0 +1,133 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Media', 'media', false);
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// check if theme language file exists for the language set by the user (e.g. DE, EN)
+if(file_exists(THEME_PATH .'/languages/EN.php')) {
+require(THEME_PATH .'/languages/EN.php');
+}
+if(file_exists(THEME_PATH .'/languages/'.LANGUAGE .'.php')) {
+    require(THEME_PATH .'/languages/'.LANGUAGE .'.php');
+}
+//Save post vars to the parameters file
+if ( !is_null($admin->get_post("save"))) {
+/*
+    if (!$admin->checkFTAN())
+    {
+        $admin->print_error('::'.$MESSAGE['GENERIC_SECURITY_ACCESS'],'browse.php',false);
+    }
+*/
+
+    if(DEFAULT_THEME != ' wb_theme') {
+        //Check for existing settings entry, if not existing, create a record first!
+        if (!$database->query ( "SELECT * FROM ".TABLE_PREFIX."settings where `name`='mediasettings'" )) {
+            $database->query ( "INSERT INTO ".TABLE_PREFIX."settings (`name`,`value`) VALUES ('mediasettings','')" );
+        }
+    } else {
+        $pathsettings = array();
+    }
+
+    $dirs = directory_list(WB_PATH.MEDIA_DIRECTORY);
+    $dirs[] = WB_PATH.MEDIA_DIRECTORY;
+    foreach($dirs AS $name) {
+        $r = str_replace(WB_PATH, '', $name);
+        $r = str_replace(array('/',' '),'_',$r);
+        $w = (int)$admin->get_post($r.'-w');
+        $h = (int)$admin->get_post($r.'-h');
+        $pathsettings[$r]['width']=$w;
+        $pathsettings[$r]['height']=$h;
+    }
+    $pathsettings['global']['admin_only'] = ($admin->get_post('admin_only')!=''?'checked':'');
+    $pathsettings['global']['show_thumbs'] = ($admin->get_post('show_thumbs')!=''?'checked':'');
+    $fieldSerialized = serialize($pathsettings);
+    $database->query ( "UPDATE ".TABLE_PREFIX."settings SET `value` = '$fieldSerialized' WHERE `name`='mediasettings'" );
+    header ("Location: browse.php");
+}
+
+include ('parameters.php');
+if ($_SESSION['GROUP_ID'] != 1 && $pathsettings['global']['admin_only']) {
+    echo "Sorry, settings not available";
+    exit();
+}
+
+// Read data to display
+$caller = "setparameter";
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('setparameter.htt')));
+$template->set_file('page', 'setparameter.htt');
+$template->set_block('page', 'main_block', 'main');
+if ($_SESSION['GROUP_ID'] != 1) {
+    $template->set_var('DISPLAY_ADMIN', 'hide');
+}
+$template->set_var(array(
+                'TEXT_HEADER' => $TEXT['TEXT_HEADER'],
+                'SAVE_TEXT' => $TEXT['SAVE'],
+                'BACK' => $TEXT['BACK'],
+            )
+        );
+
+$template->set_block('main_block', 'list_block', 'list');
+$row_bg_color = '';
+$dirs = directory_list(WB_PATH.MEDIA_DIRECTORY);
+$dirs[] = WB_PATH.MEDIA_DIRECTORY;
+
+$array_lowercase = array_map('strtolower', $dirs);
+array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $dirs);
+$id=0;
+foreach($dirs AS $name) {
+    $relative = str_replace(WB_PATH, '', $name);
+    $safepath = str_replace(array('/',' '),'_',$relative);
+    $cur_width = $cur_height = '';
+    if (isset($pathsettings[$safepath]['width'])) $cur_width = $pathsettings[$safepath]['width'];
+    if (isset($pathsettings[$safepath]['height'])) $cur_height = $pathsettings[$safepath]['height'];
+    $cur_width = ($cur_width ? (int)$cur_width : '-');
+    $cur_height = ($cur_height ? (int)$cur_height : '-');
+    $id++;
+
+    if($row_bg_color == 'DEDEDE') $row_bg_color = 'EEEEEE';
+    else $row_bg_color = 'DEDEDE';
+    $template->set_var(array(
+                    'ADMIN_URL' => ADMIN_URL,
+                    'PATH_NAME' => $relative,
+                    'WIDTH' => $TEXT['WIDTH'],
+                    'HEIGHT' => $TEXT['HEIGHT'],
+                    'FIELD_NAME_W' => $safepath.'-w',
+                    'FIELD_NAME_H' => $safepath.'-h',
+                    'CUR_WIDTH' => $cur_width,
+                    'CUR_HEIGHT' => $cur_height,
+                    'SETTINGS' => $TEXT['SETTINGS'],
+                    'ADMIN_ONLY' => $TEXT['ADMIN_ONLY'],
+                    'ADMIN_ONLY_SELECTED' => $pathsettings['global']['admin_only'],
+                    'NO_SHOW_THUMBS' => $TEXT['NO_SHOW_THUMBS'],
+                    'NO_SHOW_THUMBS_SELECTED' => $pathsettings['global']['show_thumbs'],
+                    'ROW_BG_COLOR' => $row_bg_color,
+                    'FTAN' => $admin->getFTAN(),
+                    'FILE_ID' => $id,
+                )
+        );
+    $template->parse('list', 'list_block', true);
+}
+
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
\ No newline at end of file

Property changes on: trunk/admin/media/setparameter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/thumb.php
===================================================================
--- trunk/admin/media/thumb.php	(nonexistent)
+++ trunk/admin/media/thumb.php	(revision 2)
@@ -0,0 +1,58 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         admintools
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if(!defined('WB_URL'))
+{
+    $config_file = realpath('../../config.php');
+    if(file_exists($config_file) && !defined('WB_URL'))
+    {
+        require($config_file);
+    }
+}
+//if(!class_exists('admin', false)){ include(WB_PATH.'/framework/class.admin.php'); }
+$modulePath = dirname(__FILE__);
+
+/*
+// Get image
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $image = (isset(${$requestMethod}['img']) ? ${$requestMethod}['img'] : '');
+print '<pre style="text-align: left;"><strong>function '.__FUNCTION__.'( '.''.' );</strong>  basename: '.basename(__FILE__).'  line: '.__LINE__.' -> <br />';
+print_r( $_GET ); print '</pre>';  die(); // flush ();sleep(10);
+*/
+
+if (isset($_GET['img']) && isset($_GET['t'])) {
+    if(!class_exists('PhpThumbFactory', false)){ include($modulePath.'/inc/ThumbLib.inc.php'); }
+//    require_once($modulePath.'/inc/ThumbLib.inc.php');
+    $image = addslashes($_GET['img']);
+    $type = intval($_GET['t']);
+//    $media = WB_PATH.MEDIA_DIRECTORY.'/';
+    $thumb = PhpThumbFactory::create(WB_PATH.MEDIA_DIRECTORY.'/'.$image);
+
+    if ($type == 1) {
+        $thumb->adaptiveResize(20,20);
+//        $thumb->resize(30,30);
+//        $thumb->cropFromCenter(80,50);
+//         $thumb->resizePercent(40);
+    } else {
+        $thumb->Resize(300,300);
+//         $thumb->resizePercent(25);
+//        $thumb->cropFromCenter(80,50);
+    }
+    $thumb->show();
+
+ }

Property changes on: trunk/admin/media/thumb.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/media/upload.php
===================================================================
--- trunk/admin/media/upload.php	(nonexistent)
+++ trunk/admin/media/upload.php	(revision 2)
@@ -0,0 +1,180 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         media
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+include_once('resize_img.php');
+include_once('parameters.php');
+
+require_once(WB_PATH.'/framework/class.admin.php');
+// require_once(WB_PATH.'/include/pclzip/pclzip.lib.php');    // Required to unzip file.
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Media', 'media_upload', false);
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+// After check print the header
+$admin->print_header();
+
+// Target location
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$target = (isset(${$requestMethod}['target'])) ? ${$requestMethod}['target'] : '';
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+$directory = ($target == '/') ?  '' : $target;
+$dirlink = 'index.php?dir='.$directory;
+$rootlink = 'index.php?dir=';
+
+// Check to see if target contains ../
+if (!check_media_path($target, false))
+{
+    $admin->print_error($MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] );
+}
+
+// Create relative path of the target location for the file
+$relative = WB_PATH.$target.'/';
+$resizepath = str_replace(array('/',' '),'_',$target);
+
+// Find out whether we should replace files or give an error
+$overwrite = ($admin->get_post('overwrite') != '') ? true : false;
+
+// Get list of file types to which we're supposed to append 'txt'
+$get_result=$database->query("SELECT value FROM ".TABLE_PREFIX."settings WHERE name='rename_files_on_upload'");
+$file_extension_string='';
+if ($get_result->numRows()>0) {
+    $fetch_result=$get_result->fetchRow();
+    $file_extension_string=$fetch_result['value'];
+}
+
+$file_extensions=explode(",",$file_extension_string);
+// get from settings and add to forbidden list
+$forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+// Loop through the files
+$good_uploads = 0;
+$sum_dirs = 0;
+$sum_files = 0;
+for($count = 1; $count <= 10; $count++)
+{
+    // If file was upload to tmp
+    if(isset($_FILES["file$count"]['name']))
+    {
+        // Remove bad characters
+        $filename = trim(media_filename($_FILES["file$count"]['name']),'.') ;
+        // Check if there is still a filename left
+        // if($filename != '') {
+        $info = pathinfo($filename);
+        $ext = isset($info['extension']) ? $info['extension'] : '';
+
+        if ( ($filename != '') && !preg_match("/" . $forbidden_file_types . "$/i", $ext) )
+        {
+            // Move to relative path (in media folder)
+            if(file_exists($relative.$filename) AND $overwrite == true) {
+                if(move_uploaded_file($_FILES["file$count"]['tmp_name'], $relative.$filename)) {
+                    $good_uploads++;
+                    $sum_files++;
+                    // Chmod the uploaded file
+                    change_mode($relative.$filename);
+                }
+            } elseif(!file_exists($relative.$filename)) {
+                if(move_uploaded_file($_FILES["file$count"]['tmp_name'], $relative.$filename)) {
+                    $good_uploads++;
+                    $sum_files++;
+                    // Chmod the uploaded file
+                    change_mode($relative.$filename);
+                }
+            }
+
+            if(file_exists($relative.$filename)) {
+                if ($pathsettings[$resizepath]['width'] || $pathsettings[$resizepath]['height'] ) {
+                    $rimg=new RESIZEIMAGE($relative.$filename);
+                    $rimg->resize_limitwh($pathsettings[$resizepath]['width'],$pathsettings[$resizepath]['height'],$relative.$filename);
+                    $rimg->close();
+                }
+            }
+
+            // store file name of first file for possible unzip action
+            if ($count == 1) {
+                $filename1 = $relative . $filename;
+            }
+        }
+    }
+}
+/*
+ * Callback function to skip files in black-list
+ */
+function pclzipCheckValidFile($p_event, &$p_header)
+{
+    //  return 1;
+// Check for potentially malicious files
+    $forbidden_file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',RENAME_FILES_ON_UPLOAD);
+    $info = pathinfo($p_header['filename']);
+    $ext = isset($info['extension']) ? $info['extension'] : '';
+    $dots = (substr($info['basename'], 0, 1) == '.') || (substr($info['basename'], -1, 1) == '.');
+    if( !preg_match('/'.$forbidden_file_types.'$/i', $ext) && $dots != '.' )
+    {    // ----- allowed file types are extracted
+      return 1;
+    }else
+    {    // ----- all other files are skiped
+      return 0;
+    }
+}
+/* ********************************* */
+
+// If the user chose to unzip the first file, unzip into the current folder
+if (isset($_POST['unzip']) && isset($filename1) && file_exists($filename1) ) {
+    // Required to unzip file.
+    require_once(WB_PATH.'/include/pclzip/pclzip.lib.php');
+    $archive = new PclZip($filename1);
+    $list = $archive->extract(PCLZIP_OPT_PATH, $relative,PCLZIP_CB_PRE_EXTRACT, 'pclzipCheckValidFile');
+
+    if($list == 0) {
+        // error while trying to extract the archive (most likely wrong format)
+        $admin->print_error('UNABLE TO UNZIP FILE' . $archive -> errorInfo(true));
+    }
+    $sum_files = 0;
+    // rename executable files!
+    foreach ($list as $key => $val) {
+        if( ($val['folder'] ) && change_mode($val['filename']) ) {
+           $sum_dirs++;
+        } elseif( is_writable($val['filename']) && ($val['status'] == 'ok') && change_mode($val['filename']) )  {
+            $sum_files++;
+        }
+    }
+    if (isset($_POST['delzip'])) { unlink($filename1); }
+    $dir = dirname($filename1);
+    if(file_exists($dir)) {
+        $array = createFolderProtectFile($dir);
+    }
+}
+unset($list);
+
+if($sum_files == 1) {
+    $admin->print_success($sum_files.' '.$MESSAGE['MEDIA']['SINGLE_UPLOADED'] );
+} elseif($sum_files > 1) {
+    $admin->print_success($sum_files.' '.$MESSAGE['MEDIA']['UPLOADED'] );
+} else {
+    $admin->print_error($MESSAGE['MEDIA_NO_FILE_UPLOADED'] );
+}
+
+// Print admin
+$admin->print_footer();

Property changes on: trunk/admin/media/upload.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/modules/details.php
===================================================================
--- trunk/admin/modules/details.php	(nonexistent)
+++ trunk/admin/modules/details.php	(revision 2)
@@ -0,0 +1,155 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+require_once(WB_PATH .'/framework/functions.php');
+// No print admin header
+$admin = new admin('Addons', 'modules_view', false);
+
+$js_back = ADMIN_URL.'/modules/index.php';
+
+if( !$admin->checkFTAN()){
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+$admin->print_header();
+
+// Get module name
+    $file = '';
+    if (!isset($_POST['file']) || $_POST['file'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('file',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get module directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($file = $database->get_one($sqlAddons)) {
+        $file = preg_replace('/[^a-z0-9_-]/i', "", $file);  // fix secunia 2010-92-2
+    }
+
+// Check if the module exists
+if (!file_exists(WB_PATH.'/modules/'.$file)) {
+    $admin->print_error(' ('.$file.') '.$MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+}
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('modules_details.htt')));
+// $template->debug = true;
+$template->set_file('page', 'modules_details.htt');
+$template->set_block('page', 'main_block', 'main');
+
+
+// Insert values
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+.'WHERE `type` = \'module\' '
+.'AND `directory` = \''.$file.'\'';
+if($result = $database->query($sql)) {
+    $module = $result->fetchRow(MYSQLI_ASSOC);
+}
+
+// check if a module description exists for the displayed backend language
+$tool_description = false;
+if(function_exists('file_get_contents') && file_exists(WB_PATH.'/modules/'.$file.'/languages/'.LANGUAGE .'.php')) {
+    // read contents of the module language file into string
+    $data = @file_get_contents(WB_PATH .'/modules/' .$file .'/languages/' .LANGUAGE .'.php');
+    // use regular expressions to fetch the content of the variable from the string
+    $tool_description = get_variable_content('module_description', $data, false, false);
+    // replace optional placeholder {WB_URL} with value stored in config.php
+    if($tool_description !== false && strlen(trim($tool_description)) != 0) {
+        $tool_description = str_replace('{WB_URL}', WB_URL, $tool_description);
+    } else {
+        $tool_description = false;
+    }
+}
+if($tool_description !== false) {
+    // Override the module-description with correct desription in users language
+    $module['description'] = $tool_description;
+}
+
+$template->set_var(array(
+                      'NAME' => $module['name'],
+                      'AUTHOR' => $module['author'],
+                      'DESCRIPTION' => $module['description'],
+                      'VERSION' => $module['version'],
+                      'DESIGNED_FOR' => $module['platform'],
+                      'ADMIN_URL' => ADMIN_URL,
+                      'WB_URL' => WB_URL,
+                      'THEME_URL' => THEME_URL
+                      )
+                        );
+
+switch ($module['function']) {
+    case NULL:
+        $type_name = $TEXT['UNKNOWN'];
+        break;
+    case 'page':
+        $type_name = $TEXT['PAGE'];
+        break;
+    case 'wysiwyg':
+        $type_name = $TEXT['WYSIWYG_EDITOR'];
+        break;
+    case 'tool':
+        $type_name = $TEXT['ADMINISTRATION_TOOL'];
+        break;
+    case 'admin':
+        $type_name = $TEXT['ADMIN'];
+        break;
+    case 'administration':
+        $type_name = $TEXT['ADMINISTRATION'];
+        break;
+    case 'snippet':
+        $type_name = $TEXT['CODE_SNIPPET'];
+        break;
+    default:
+        $type_name = $TEXT['UNKNOWN'];
+}
+$template->set_var('TYPE', $type_name);
+
+// Insert language headings
+$template->set_var(array(
+                                'HEADING_MODULE_DETAILS' => $HEADING['MODULE_DETAILS']
+                                )
+                        );
+// Insert language text and messages
+$template->set_var(array(
+                                'TEXT_NAME' => $TEXT['NAME'],
+                                'TEXT_TYPE' => $TEXT['TYPE'],
+                                'TEXT_AUTHOR' => $TEXT['AUTHOR'],
+                                'TEXT_VERSION' => $TEXT['VERSION'],
+                                'TEXT_DESIGNED_FOR' => $TEXT['DESIGNED_FOR'],
+                                'TEXT_DESCRIPTION' => $TEXT['DESCRIPTION'],
+                                'TEXT_BACK' => $TEXT['BACK']
+                                )
+                        );
+
+// Parse module object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/modules/details.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/modules/index.php
===================================================================
--- trunk/admin/modules/index.php	(nonexistent)
+++ trunk/admin/modules/index.php	(revision 2)
@@ -0,0 +1,210 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Addons', 'modules');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('modules.htt')));
+// $template->debug = true;
+$template->set_file ('page', 'modules.htt');
+$template->set_block('page', 'main_block', 'main');
+
+$template->set_block('main_block', 'module_install_block', 'module_install');
+// Insert values into module list
+$template->set_block('main_block', 'module_detail_block', 'module_detail');
+$template->set_block('module_detail_block', 'module_detail_select_block', 'module_detail_select');
+
+$template->set_block('main_block', 'module_uninstall_block', 'module_uninstall');
+$template->set_block('module_uninstall_block', 'module_uninstall_select_block', 'module_uninstall_select');
+$aPreventFromUninstall = array ( 'captcha_control', 'jsadmin', 'output_filter', 'wysiwyg', 'menu_link' );
+
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+      . 'WHERE `type`=\'module\' '
+      . 'ORDER BY `name`'
+      . '';
+if($oAddons = $database->query($sql)) {
+    while ($aAddon = $oAddons->fetchRow( MYSQLI_ASSOC )) {
+        if (!$admin->get_permission( $aAddon['directory'], 'module' )) { continue; }
+        $aAddonIdKey = $admin->getIDKEY($aAddon['addon_id']);
+        $sAddsonsPath = WB_PATH.'/modules/'.$aAddon['directory'];
+        $template->set_var('VALUE', $aAddonIdKey);
+        $template->set_var('NAME', $aAddon['name']);
+        $template->parse('module_detail_select', 'module_detail_select_block', true);
+        if (is_readable($sAddsonsPath.'/uninstall.php') && is_readable($sAddsonsPath . '/info.php')) {
+            if (!preg_match('/'.$aAddon['directory'].'/si', implode('|', $aPreventFromUninstall))) {
+                $template->set_var('UNINSTALL_VALUE', $aAddonIdKey);
+                $template->set_var('UNINSTALL_NAME', $aAddon['name']);
+                $template->parse('module_uninstall_select', 'module_uninstall_select_block', true);
+            }
+        }
+    }
+}
+
+$show_block = false;
+$template->set_block('main_block', 'module_advanced_block', 'module_advanced');
+$template->set_block('module_advanced_block', 'manuell_install_block', 'manuell_install');
+$template->set_block('module_advanced_block', 'manuell_upgrade_block', 'manuell_upgrade');
+$template->set_block('module_advanced_block', 'manuell_uninstall_block', 'manuell_uninstall');
+// Insert modules which includes a install.php file to install list
+$template->set_block('manuell_install_block', 'manuell_install_select_block', 'manuell_install_select');
+$module_files = glob(WB_PATH . '/modules/*', GLOB_ONLYDIR|GLOB_NOSORT );
+natcasesort($module_files);
+foreach ($module_files as $index => $sAddsonsPath)
+{
+    if( !$admin->get_permission( basename($sAddsonsPath), 'module' )) { continue; }
+    if (is_dir($sAddsonsPath)) {
+        if (is_readable($sAddsonsPath . '/install.php') && is_readable($sAddsonsPath . '/info.php')) {
+            require $sAddsonsPath . '/info.php';
+            $show_block = true;
+            $AddonIdKey = $admin->getIDKEY(basename($sAddsonsPath),'');
+            $template->set_var('INSTALL_VISIBLE', '');
+            $template->set_var('INSTALL_VALUE', $AddonIdKey);
+            $template->set_var('INSTALL_NAME', ( @$module_name ?: basename($sAddsonsPath)) );
+            $template->parse('manuell_install_select', 'manuell_install_select_block', true);
+        } else {
+//          echo ''.basename($sAddsonsPath).'/install.php<br />';
+        }
+    } else {
+        unset($module_files[$index]);
+    }
+}
+    $template->set_block('manuell_upgrade_block', 'manuell_upgrade_select_block', 'manuell_upgrade_select');
+    $template->set_block('manuell_uninstall_block', 'manuell_uninstall_select_block', 'manuell_uninstall_select');
+    $oAddons->rewind();
+    while ($aAddon = $oAddons->fetchRow( MYSQLI_ASSOC )) {
+        if( !$admin->get_permission( $aAddon['directory'], 'module' )) { continue; }
+        $aAddonIdKey = $admin->getIDKEY($aAddon['addon_id']);
+        $sAddsonsPath = WB_PATH.'/modules/'.$aAddon['directory'];
+        if (is_readable($sAddsonsPath.'/upgrade.php') && is_readable($sAddsonsPath . '/info.php')) {
+            $show_block = true;
+            $template->set_var('UPGRADE_VISIBLE', '');
+            $template->set_var('UPGRADE_VALUE', $aAddonIdKey);
+            $template->set_var('UPGRADE_NAME', $aAddon['name']);
+            $template->parse('manuell_upgrade_select', 'manuell_upgrade_select_block', true);
+        } else {
+//          echo ''.$sAddsonsPath.'/upgrade.php<br />';
+        }
+        if (is_readable($sAddsonsPath.'/uninstall.php') && is_readable($sAddsonsPath . '/info.php')) {
+            if (!preg_match('/'.$aAddon['directory'].'/si', implode('|', $aPreventFromUninstall))) {
+                $show_block = true;
+                $template->set_var('UNINSTALL_VISIBLE', '');
+                $template->set_var('UNINSTALL_VALUE', $aAddonIdKey);
+                $template->set_var('UNINSTALL_NAME', $aAddon['name']);
+                $template->parse('manuell_uninstall_select', 'manuell_uninstall_select_block', true);
+            }
+        } else {
+//          echo ''.$sAddsonsPath.'/uninstall.php<br />';
+        }
+    }
+
+// Insert permissions values and show or hidden blocks
+if($admin->get_permission('modules_install') != true) {
+    $template->set_block ('module_install', '');
+    $template->set_block ('manuell_install', '');
+} else {
+    $template->parse('module_install', 'module_install_block', true);
+    $template->parse('manuell_install', 'manuell_install_block', true);
+}
+if($admin->get_permission('modules_uninstall') != true) {
+    $template->set_block ('module_uninstall', '');
+    $template->set_block ('manuell_uninstall', '');
+} else {
+    $template->parse('module_uninstall', 'module_uninstall_block', true);
+    $template->parse('manuell_uninstall', 'manuell_uninstall_block', true);
+}
+if($admin->get_permission('modules_view') != true) {
+    $template->set_block('module_detail', '');
+    $template->set_block('manuell_upgrade', '');
+} else {
+    $template->parse('module_detail', 'module_detail_block', true);
+    $template->parse('manuell_upgrade', 'manuell_upgrade_block', true);
+}
+// only show block if there is something to show
+if(!$show_block || count($module_files) == 0 || !isset($_GET['advanced']) || $admin->get_permission('admintools') != true) {
+    $template->set_block('module_advanced', '');
+} else {
+    $template->parse('module_advanced', 'module_advanced_block', true);
+}
+
+$template->set_block('main_block', 'addon_template_block', 'addon_template');
+if($admin->get_permission('templates_view') != true) {
+    $template->set_block ('addon_template', '');
+} else {
+    $template->parse('addon_template', 'addon_template_block', true);
+}
+
+$template->set_block('main_block', 'addon_language_block', 'addon_language');
+if($admin->get_permission('languages_view') != true) {
+    $template->set_block ('addon_language', '');
+} else {
+    $template->parse('addon_language', 'addon_language_block', true);
+}
+
+$template->set_block('main_block', 'addon_module_block', 'addon_module');
+if($admin->get_permission('admintools') != true) {
+    $template->set_block ('addon_module', '');
+} else {
+    $template->parse('addon_module', 'addon_module_block', true);
+}
+
+// Insert language headings
+$template->set_var(array(
+                    'HEADING_INSTALL_MODULE' => $HEADING['INSTALL_MODULE'],
+                    'HEADING_UNINSTALL_MODULE' => $HEADING['UNINSTALL_MODULE'],
+                    'OVERWRITE_NEWER_FILES' => $MESSAGE['ADDON_OVERWRITE_NEWER_FILES'],
+                    'HEADING_MODULE_DETAILS' => $HEADING['MODULE_DETAILS'],
+                    'HEADING_INVOKE_MODULE_FILES' => $HEADING['INVOKE_MODULE_FILES']
+                    )
+                );
+// insert urls
+$template->set_var(array(
+                    'ADMIN_URL' => ADMIN_URL,
+                    'WB_URL' => WB_URL,
+                    'THEME_URL' => THEME_URL,
+                    'FTAN' => $admin->getFTAN()
+                    )
+                );
+// Insert language text and messages
+$template->set_var(array(
+    'URL_TEMPLATES'  => $admin->get_permission('templates') ? ADMIN_URL . '/templates/index.php' : '#',
+    'URL_LANGUAGES'  => $admin->get_permission('languages') ? ADMIN_URL . '/languages/index.php'  : '#',
+    'URL_ADVANCED'   => $admin->get_permission('admintools') ? ADMIN_URL . '/modules/index.php?advanced' : '#',
+    'MENU_LANGUAGES' => $admin->get_permission('languages') ? $MENU['LANGUAGES'] : '&#160;&#160;&#160;',
+    'MENU_TEMPLATES' => $admin->get_permission('templates') ? $MENU['TEMPLATES'] : '&#160;&#160;&#160;',
+    'TEXT_ADVANCED'  => $admin->get_permission('admintools') ? $TEXT['ADVANCED'] : '&#160;&#160;&#160;',
+    'TEXT_INSTALL'   => $TEXT['INSTALL'],
+    'TEXT_UNINSTALL' => $TEXT['UNINSTALL'],
+    'TEXT_VIEW_DETAILS'  => $TEXT['VIEW_DETAILS'],
+    'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+    'TEXT_MANUAL_INSTALLATION' => $MESSAGE['ADDON_MANUAL_INSTALLATION'],
+    'TEXT_MANUAL_INSTALLATION_WARNING' => $MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'],
+    'TEXT_EXECUTE' => $TEXT['EXECUTE'],
+    'TEXT_FILE'    => $TEXT['FILE']
+    )
+);
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/modules/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/modules/install.php
===================================================================
--- trunk/admin/modules/install.php	(nonexistent)
+++ trunk/admin/modules/install.php	(revision 2)
@@ -0,0 +1,197 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// do not display notices and warnings during installation
+error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Addons', 'modules_install', false);
+
+$js_back = ADMIN_URL.'/modules/index.php';
+
+if (!$admin->checkFTAN()){
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// After check print the header
+$admin->print_header();
+
+// Check if user uploaded a file
+if(!isset($_FILES['userfile'])) {
+    $admin->print_error($MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Set temp vars
+$temp_dir = WB_PATH.'/temp/';
+$temp_file = $temp_dir . $_FILES['userfile']['name'];
+$temp_unzip = WB_PATH.'/temp/unzip/';
+
+if(!$_FILES['userfile']['error']) {
+    // Try to upload the file to the temp dir
+    if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $temp_file))
+    {
+        $admin->print_error($MESSAGE['GENERIC_BAD_PERMISSIONS']);
+    }
+} else {
+// index for language files
+    $key = 'UNKNOW_UPLOAD_ERROR';
+    switch ($_FILES['userfile']['error']) {
+        case UPLOAD_ERR_INI_SIZE:
+            $key = 'UPLOAD_ERR_INI_SIZE';
+        case UPLOAD_ERR_FORM_SIZE:
+            $key = 'UPLOAD_ERR_FORM_SIZE';
+        case UPLOAD_ERR_PARTIAL:
+            $key = 'UPLOAD_ERR_PARTIAL';
+        case UPLOAD_ERR_NO_FILE:
+            $key = 'UPLOAD_ERR_NO_FILE';
+        case UPLOAD_ERR_NO_TMP_DIR:
+            $key = 'UPLOAD_ERR_NO_TMP_DIR';
+        case UPLOAD_ERR_CANT_WRITE:
+            $key = 'UPLOAD_ERR_CANT_WRITE';
+        case UPLOAD_ERR_EXTENSION:
+            $key = 'UPLOAD_ERR_EXTENSION';
+        default:
+            $key = 'UNKNOW_UPLOAD_ERROR';
+    }
+    $admin->print_error($MESSAGE[$key].'<br />'.$MESSAGE['GENERIC_CANNOT_UPLOAD']);
+}
+
+// Include the PclZip class file (thanks to
+require_once(WB_PATH.'/include/pclzip/pclzip.lib.php');
+
+// Remove any vars with name "module_directory"
+if (isset($module_directory)){unset($module_directory);}
+
+// Setup the PclZip object
+$archive = new PclZip($temp_file);
+// Unzip the files to the temp unzip folder
+$list = $archive->extract(PCLZIP_OPT_PATH, $temp_unzip);
+
+// Check if uploaded file is a valid Add-On zip file
+if (!($list && file_exists($temp_unzip . 'info.php')))
+{
+  $admin->print_error($MESSAGE['GENERIC_INVALID_ADDON_FILE']);
+}
+
+// Include the modules info file
+require($temp_unzip.'info.php');
+
+// Perform Add-on requirement checks before proceeding
+require(WB_PATH . '/framework/addon.precheck.inc.php');
+preCheckAddon($temp_file);
+// Delete the temp unzip directory
+rm_full_dir($temp_unzip);
+
+// Check if the file is valid
+if(!isset($module_directory))
+{
+    if (file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['GENERIC_INVALID']);
+}
+
+// Check if this module is already installed
+// and compare versions if so
+$new_module_version = $module_version;
+$action="install";
+if(is_dir(WB_PATH.'/modules/'.$module_directory))
+{
+    if(file_exists(WB_PATH.'/modules/'.$module_directory.'/info.php'))
+    {
+        require(WB_PATH.'/modules/'.$module_directory.'/info.php');
+        // Version to be installed is older than currently installed version
+        if (versionCompare($module_version, $new_module_version, '>='))
+        {
+            if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+            $admin->print_error($MESSAGE['GENERIC_ALREADY_INSTALLED']);
+        }
+        $action="upgrade";
+    }
+}
+
+// Check if module dir is writable
+if(!is_writable(WB_PATH.'/modules/'))
+{
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['GENERIC_BAD_PERMISSIONS']);
+}
+
+// Set module directory
+$module_dir = WB_PATH.'/modules/'.$module_directory;
+
+// Make sure the module dir exists, and chmod if needed
+make_dir($module_dir);
+
+// Unzip module to the module dir
+if(isset($_POST['overwrite'])){
+    $list = (int)$archive->extract(PCLZIP_OPT_PATH, $module_dir, PCLZIP_OPT_REPLACE_NEWER );
+} else {
+    $list = (int)$archive->extract(PCLZIP_OPT_PATH, $module_dir );
+}
+
+if ($list==0)
+{
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNZIP']);
+}
+/*
+
+if ($list == 0) {
+  $admin->print_error("ERROR : ".$archive->errorInfo(true));
+}
+*/
+// Delete the temp zip file
+if(file_exists($temp_file)) { unlink($temp_file); }
+
+// Chmod all the uploaded files
+$dir = dir($module_dir);
+while (false !== $entry = $dir->read())
+{
+    // Skip pointers
+    if(substr($entry, 0, 1) != '.' AND $entry != '.svn' AND !is_dir($module_dir.'/'.$entry))
+    {
+        // Chmod file
+        change_mode($module_dir.'/'.$entry, 'file');
+    }
+}
+/* */
+// Run the modules install // upgrade script if there is one
+if(file_exists($module_dir.'/'.$action.'.php'))
+{
+    require($module_dir.'/'.$action.'.php');
+}
+
+// Print success message
+if ($action=="install")
+{
+    // Load module info into DB
+    load_module(WB_PATH.'/modules/'.$module_directory, false);
+    $admin->print_success($MESSAGE['GENERIC_INSTALLED']);
+} elseif ($action=="upgrade")
+{
+
+    upgrade_module($module_directory, false);
+    $admin->print_success($MESSAGE['GENERIC_UPGRADED']);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/modules/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/modules/manual_install.php
===================================================================
--- trunk/admin/modules/manual_install.php	(nonexistent)
+++ trunk/admin/modules/manual_install.php	(revision 2)
@@ -0,0 +1,155 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         modules
+ * @author          Ryan Djurovich, Christian Sommer, WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/**
+ * check if there is anything to do
+ */
+
+/**
+ * check if user has permissions to access this file
+ */
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Include the WB functions file
+if ( !function_exists( 'get_modul_version' ) ) { require(WB_PATH.'/framework/functions.php'); }
+if (!function_exists("replace_all")) {
+    function replace_all ($aStr = "", &$aArray ) {
+        foreach($aArray as $k=>$v) $aStr = str_replace("{{".$k."}}", $v, $aStr);
+        return $aStr;
+    }
+}
+
+// check user permissions for admintools (redirect users with wrong permissions)
+$admin = new admin('Admintools', 'admintools', false, false);
+/*
+if (!(isset($_POST['action']) && in_array($_POST['action'], array('install', 'upgrade', 'uninstall')))) { die(header('Location: index.php?advanced')); }
+if (!(isset($_POST['file']) && $_POST['file'] != '' && (strpos($_POST['file'], '..') === false))){  die(header('Location: index.php?advanced'));  }
+*/
+$sCallingScript = $_SERVER["SCRIPT_NAME"];
+
+$js_back = ADMIN_URL . '/modules/index.php?advanced';
+
+if( !$admin->checkFTAN() ){
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back);
+}
+
+if ($admin->get_permission('admintools') == false) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'], $js_back);
+  }
+
+
+// check if the referer URL if available
+$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] :
+    (isset($HTTP_SERVER_VARS['HTTP_REFERER']) ? $HTTP_SERVER_VARS['HTTP_REFERER'] : '');
+$referer = '';
+// if referer is set, check if script was invoked from "admin/modules/index.php"
+$required_url = ADMIN_URL . '/modules/index.php';
+if ($referer != '' && (!(strpos($referer, $required_url) !== false || strpos($referer, $required_url) !== false)))
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back);
+}
+
+// include WB functions file
+require_once(WB_PATH . '/framework/functions.php');
+
+// load WB language file
+require_once(WB_PATH . '/languages/' . LANGUAGE .'.php');
+
+// create Admin object with admin header
+$admin = new admin('Addons', '', true, false);
+$aValideActions = array( 'uninstall', 'install', 'upgrade' );
+
+$sAction = $admin->StripCodeFromText($_POST['action']);
+$sAction = ( in_array($sAction, $aValideActions) ? $sAction : 'upgrade' );
+/**
+ * Manually execute the specified module file (install.php, upgrade.php or uninstall.php)
+ */
+    $sAddonName = '';
+    if (!isset($_POST['file']) || $_POST['file'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('file',0);
+    }
+
+    if ( is_numeric($iAddonId)&&($iAddonId == 0)){
+        $admin->print_error($iAddonId.' '.$MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+// Get module directory
+    if ($sAction != 'install') {
+        $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+                   . 'WHERE `addon_id`='.(int)$iAddonId.' '
+                   . ''.'';
+        if ($sAddonName = $database->get_one($sqlAddons)) {
+            $sAddonName = preg_replace('/[^a-z0-9_-]/i', "", $sAddonName);  // fix secunia 2010-92-2
+        }
+    } else {
+        $sAddonName = preg_replace('/[^a-z0-9_-]/i', "", $iAddonId);  // fix secunia 2010-92-2
+    }
+// Extra protection
+if(trim($sAddonName) == '') {
+    $admin->print_error($MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+}
+
+// check whether the module is needed in core
+$aPreventFromUninstall = array ( 'captcha_control', 'jsadmin', 'output_filter', 'wysiwyg', 'menu_link' );
+if(
+    $sAction == 'uninstall' &&
+    preg_match('/'.$sAddonsFile.'/si', implode('|', $aPreventFromUninstall ))
+) {
+    $temp = array ('name' => $file );
+    $msg = replace_all( $MESSAGE['MEDIA_CANNOT_DELETE_DIR'], $temp );
+    $admin->print_error( $msg );
+}
+
+// check if specified module folder exists
+$sAddonRelPath = '/modules/'.$sAddonName;
+// let the old variablename if module use it
+
+if (!file_exists( WB_PATH.$sAddonRelPath.'/'.$sAction. '.php')){
+    $admin->print_header();
+    $admin->print_error($TEXT['NOT_FOUND'].': <tt>"'.$sAddonName.'/'.$sAction.'.php"</tt> ', $js_back);
+}
+// include modules install.php script
+if( in_array($sAction, $aValideActions) ) {
+    require(WB_PATH.$sAddonRelPath . '/' . $sAction . '.php');
+}
+// load module info into database and output status message
+load_module(WB_PATH.$sAddonRelPath, false);
+$msg = $TEXT['EXECUTE'] . ': <tt>"'.$sAddonName.'/'.$sAction.'.php"</tt>';
+
+switch ($sAction)
+{
+    case 'install':
+        $admin->print_success($msg, $js_back);
+        break;
+
+    case 'upgrade':
+        upgrade_module($sAddonName, false);
+        $admin->print_success($msg, $js_back);
+        break;
+
+    case 'uninstall':
+        $admin->print_success($msg, $js_back);
+        break;
+}

Property changes on: trunk/admin/modules/manual_install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/modules/uninstall.php
===================================================================
--- trunk/admin/modules/uninstall.php	(nonexistent)
+++ trunk/admin/modules/uninstall.php	(revision 2)
@@ -0,0 +1,149 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Include the WB functions file
+if ( !function_exists( 'get_modul_version' ) ) { require(WB_PATH.'/framework/functions.php'); }
+
+if (!function_exists("replace_all")) {
+    function replace_all ($aStr = "", &$aArray ) {
+        foreach($aArray as $k=>$v) $aStr = str_replace("{{".$k."}}", $v, $aStr);
+        return $aStr;
+    }
+}
+
+$admin = new admin('Addons', 'modules_uninstall', false);
+
+$js_back = ADMIN_URL.'/modules/index.php';
+
+    if (!$admin->checkFTAN() ){
+        $admin->print_header();
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+// After check print the header
+    $admin->print_header();
+
+    $sAddonsFile = '';
+// Check if user selected template
+    if (!isset($_POST['file']) || $_POST['file'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('file',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get module directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($sAddonsFile = $database->get_one($sqlAddons)) {
+        $sAddonsFile = preg_replace('/[^a-z0-9_-]/i', "", $sAddonsFile);  // fix secunia 2010-92-2
+    }
+
+// check whether the module is core
+$aPreventFromUninstall = array ( 'captcha_control', 'jsadmin', 'output_filter', 'wysiwyg', 'menu_link' );
+if(
+    preg_match('/'.$sAddonsFile.'/si', implode('|', $aPreventFromUninstall ))
+) {
+    $temp = array ('name' => $file );
+    $msg = replace_all( $MESSAGE['MEDIA_CANNOT_DELETE_DIR'], $temp );
+    $admin->print_error( $msg );
+}
+// Check if the module exists
+if (!is_dir(WB_PATH.'/modules/'.$sAddonsFile) ) {
+    $admin->print_error($MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+}
+$sql  = 'SELECT `section_id`, `page_id` FROM `'.TABLE_PREFIX.'sections` '
+      . 'WHERE `module`=\''.$database->escapeString($sAddonsFile).'\'';
+if( $oAddon = $database->query($sql)) {
+
+    if ($oAddon->numRows() > 0) {
+
+        /**
+        *    Modul is in use, so we have to warn the user
+        */
+        if (!array_key_exists("CANNOT_UNINSTALL_IN_USE_TMPL", $MESSAGE['GENERIC'])) {
+            $add = $oAddon->numRows() == 1 ? "this page" : "these pages";
+            $msg_template_str  = "<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled because it is still in use on {{pages}}";
+            $msg_template_str .= ":<br /><i>click for editing.</i><br /><br />";
+        } else {
+            $msg_template_str = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'];
+            $temp = explode(";",$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES']);
+            $add = $oAddon->numRows() == 1 ? $temp[0] : $temp[1];
+        }
+        /**
+        *    The template-string for displaying the Page-Titles ... in this case as a link
+        */
+        $page_template_str = "- <b><a href='../pages/sections.php?page_id={{id}}'>{{title}}</a></b><br />";
+
+        $values = array ('type' => 'Modul', 'type_name' => $sAddonsFile, 'pages' => $add );
+        $msg = replace_all ( $msg_template_str,  $values );
+
+        $page_names = "";
+
+        while ($data = $oAddon->fetchRow(MYSQLI_ASSOC) ) {
+            $sql  = 'SELECT `page_title` FROM `'.TABLE_PREFIX.'pages` '
+                  . 'WHERE `page_id`= '.(int)$data['page_id'];
+            $oPage = $database->query($sql);
+            $aPage = $oPage->fetchRow( MYSQLI_ASSOC );
+            $aPageInfo = array(
+                'id'    => $data['page_id'],
+                'title' => $aPage['page_title']
+            );
+
+            $page_names .= replace_all ( $page_template_str, $aPageInfo );
+        }
+
+        /**
+        *    Printing out the error-message and die().
+        */
+        $admin->print_error(str_replace ($TEXT['FILE'], "Modul", $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE']).$msg.$page_names);
+    }
+} else {
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL']);
+}
+// Check if we have permissions on the directory
+if (!is_writable(WB_PATH.'/modules/'.$sAddonsFile)) {
+    $admin->print_error(' ('.$sAddonsFile.') '.$MESSAGE['GENERIC_CANNOT_UNINSTALL']);
+}
+
+// Run the modules uninstall script if there is one
+if(file_exists(WB_PATH.'/modules/'.$sAddonsFile.'/uninstall.php')) {
+    require(WB_PATH.'/modules/'.$sAddonsFile.'/uninstall.php');
+}
+
+// Try to delete the module dir
+if (!rm_full_dir(WB_PATH.'/modules/'.$sAddonsFile)) {
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL']);
+} else {
+    // Remove entry from DB
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'module\' '
+          .   'AND `directory` = \''.$database->escapeString($sAddonsFile).'\' ';
+    $database->query($sql);
+}
+// Print success message
+$admin->print_success($MESSAGE['GENERIC_UNINSTALLED']);
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/modules/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/add.php
===================================================================
--- trunk/admin/pages/add.php	(nonexistent)
+++ trunk/admin/pages/add.php	(revision 2)
@@ -0,0 +1,256 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object and print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Pages', 'pages_add', false);
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get values
+$title = $admin->get_post('title');
+$title = htmlspecialchars($title);
+$module = preg_replace('/[^a-z0-9_-]/i', "", $admin->get_post('type')); // fix secunia 2010-93-4
+$parent = intval($admin->get_post('parent')); // fix secunia 2010-91-2
+$visibility = $admin->get_post('visibility');
+if (!in_array($visibility, array('public', 'private', 'registered', 'hidden', 'none'))) {$visibility = 'public';} // fix secunia 2010-91-2
+$admin_groups = $admin->get_post('admin_groups');
+$viewing_groups = $admin->get_post('viewing_groups');
+
+// Work-out if we should check for existing page_code
+$field_set = $database->field_exists(TABLE_PREFIX.'pages', 'page_code');
+
+// add Admin to admin and viewing-groups
+$admin_groups[] = 1;
+$viewing_groups[] = 1;
+
+// After check print the header
+$admin->print_header();
+// check parent page permissions:
+if ($parent!=0) {
+    if (!$admin->get_page_permission($parent,'admin'))
+    {
+        $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+    }
+
+} elseif (!$admin->get_permission('pages_add_l0','system'))
+{
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}    
+
+// check module permissions:
+if (!$admin->get_permission($module, 'module'))
+{
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}    
+
+// Validate data
+if($title == '' || substr($title,0,1)=='.')
+{
+    $admin->print_error($MESSAGE['PAGES_BLANK_PAGE_TITLE']);
+}
+
+// Check to see if page created has needed permissions
+if(!in_array(1, $admin->get_groups_id()))
+{
+    $admin_perm_ok = false;
+    foreach ($admin_groups as $adm_group)
+    {
+        if (in_array($adm_group, $admin->get_groups_id()))
+        {
+            $admin_perm_ok = true;
+        } 
+    }
+    if ($admin_perm_ok == false)
+    {
+        $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+    }
+    $admin_perm_ok = false;
+    foreach ($viewing_groups as $view_group)
+    {
+        if (in_array($view_group, $admin->get_groups_id()))
+        {
+            $admin_perm_ok = true;
+        }
+    }
+    if ($admin_perm_ok == false)
+    {
+        $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+    }
+}
+
+$admin_groups = implode(',', $admin_groups);
+$viewing_groups = implode(',', $viewing_groups);
+
+// Work-out what the link and page filename should be
+if($parent == '0')
+{
+    $link = '/'.page_filename($title);
+    // rename menu titles: index && intro to prevent clashes with intro page feature and WB core file /pages/index.php
+    if($link == '/index' || $link == '/intro')
+    {
+        $link .= '_0';
+        $filename = WB_PATH .PAGES_DIRECTORY .'/' .page_filename($title) .'_0' .PAGE_EXTENSION;
+    } else {
+        $filename = WB_PATH.PAGES_DIRECTORY.'/'.page_filename($title).PAGE_EXTENSION;
+    }
+} else {
+    $parent_section = '';
+    $parent_titles = array_reverse(get_parent_titles($parent));
+    foreach($parent_titles AS $parent_title)
+    {
+        $parent_section .= page_filename($parent_title).'/';
+    }
+    if($parent_section == '/') { $parent_section = ''; }
+    $link = '/'.$parent_section.page_filename($title);
+    $filename = WB_PATH.PAGES_DIRECTORY.'/'.$parent_section.page_filename($title).PAGE_EXTENSION;
+    make_dir(WB_PATH.PAGES_DIRECTORY.'/'.$parent_section);
+}
+
+// Check if a page with same page filename exists
+$sql = 'SELECT `page_id` FROM `'.TABLE_PREFIX.'pages` '
+     . 'WHERE `link`=\''.$link.'\'';
+$get_same_page = $database->get_one($sql);
+if (
+    $get_same_page OR
+    file_exists(WB_PATH.PAGES_DIRECTORY.$link.PAGE_EXTENSION) OR
+    file_exists(WB_PATH.PAGES_DIRECTORY.$link.'/')
+) {
+    $admin->print_error($MESSAGE['PAGES']['PAGE_EXISTS']);
+}
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+$order = new order(TABLE_PREFIX.'pages', 'position', 'page_id', 'parent');
+// First clean order
+$order->clean($parent);
+// Get new order
+$position = $order->get_new($parent);
+
+// Work-out if the page parent (if selected) has a seperate template or language to the default
+$sql='SELECT `template`, `language` FROM `'.TABLE_PREFIX.'pages` '
+    . 'WHERE `page_id` = '.(int)$parent;
+$query_parent = $database->query($sql);
+if ($query_parent->numRows() > 0) {
+    $fetch_parent = $query_parent->fetchRow( MYSQLI_ASSOC );
+    $template = $fetch_parent['template'];
+    $language = $fetch_parent['language'];
+} else {
+    $template = '';
+    $language = DEFAULT_LANGUAGE;
+}
+
+// Insert page into pages table
+$sql = 'INSERT INTO `'.TABLE_PREFIX.'pages` '
+     . 'SET `parent`='.(int)$parent.', '
+     .     '`link` = \'\', '
+     .     '`description`=\'\', '
+     .     '`keywords`=\'\', '
+     .     '`page_trail`=\'\', '
+     .     '`admin_users`=\'\', '
+     .     '`viewing_users`=\'\', '
+     .     '`target`=\'_top\', '
+     .     '`page_title`=\''.$database->escapeString($title).'\', '
+     .     '`menu_title`=\''.$database->escapeString($title).'\', '
+     .     '`template`=\''.$database->escapeString($template).'\', '
+     .     '`visibility`=\''.$database->escapeString($visibility).'\', '
+     .     '`position`='.(int)$position.', '
+     .     '`menu`=1, '
+     .     '`language`=\''.$database->escapeString($language).'\', '
+     .     '`searching`=1, '
+     .     '`modified_when`='.time().', '
+     .     '`modified_by`='.(int)$admin->get_user_id().', '
+     .     '`admin_groups`=\''.$database->escapeString($admin_groups).'\', '
+     .     '`viewing_groups`=\''.$database->escapeString($viewing_groups).'\'';
+if (!$database->query($sql)) {
+    $admin->print_error($database->get_error());
+}
+// Get the new page id
+$page_id = $database->getLastInsertId();
+// Work out level
+$level = level_count($page_id);
+// Work out root parent
+$root_parent = root_parent($page_id);
+// Work out page trail
+$page_trail = get_page_trail($page_id);
+// Update page with new level and link
+$sql  = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+      . '`root_parent` = '.(int)$root_parent.', '
+      . '`level` = '.(int)$level.', '
+      . '`link` = \''.$database->escapeString($link).'\', '
+      . ((defined('PAGE_LANGUAGES') && PAGE_LANGUAGES)
+                 && $field_set
+                 && ($language == DEFAULT_LANGUAGE)
+                 && (file_exists(WB_PATH.'/modules/mod_multilingual/update_keys.php')
+         )
+         ? '`page_code` = '.(int)$page_id.', ' : '')
+.     '`page_trail`=\''.$database->escapeString($page_trail).'\' '
+      . 'WHERE `page_id` = '.$page_id;
+    if (!$database->query($sql)) {
+    $admin->print_error($database->get_error());
+}
+// Create a new file in the /pages dir
+create_access_file($filename, $page_id, $level);
+
+// add position 1 to new page
+$position = 1;
+
+// Add new record into the sections table
+$sql = 'INSERT INTO `'.TABLE_PREFIX.'sections` '
+     . 'SET `page_id`='.(int)$page_id.', '
+     .     '`position`='.(int)$position.', '
+     .     '`module`=\''.$database->escapeString($module).'\', '
+     .     '`block`=1';
+if (!$database->query($sql)) {
+    $admin->print_error($database->get_error());
+}
+// Get the section id
+if (!($section_id = $database->getLastInsertId())) {
+    $admin->print_error($database->get_error());
+}
+// Include the selected modules add file if it exists
+if (
+    file_exists(WB_PATH.'/modules/'.$module.'/addon.php') &&
+    file_exists(WB_PATH.'/modules/'.$module.'/cmd/cmdModify.inc')
+) {
+    $sCommand = 'modify';
+//    require WB_PATH.'/modules/'.$module.'/addon.php';
+    $admin->print_success($MESSAGE['PAGES_ADDED'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+} else {
+    if (file_exists(WB_PATH.'/modules/'.$module.'/add.php')) {
+        require WB_PATH.'/modules/'.$module.'/add.php';
+    }
+    $admin->print_success($MESSAGE['PAGES_ADDED'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+/*
+// Include the selected modules add file if it exists
+if(file_exists(WB_PATH.'/modules/'.$module.'/add.php')) {
+    require(WB_PATH.'/modules/'.$module.'/add.php');
+}
+$admin->print_success($MESSAGE['PAGES']['ADDED'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+*/
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/delete.php
===================================================================
--- trunk/admin/pages/delete.php	(nonexistent)
+++ trunk/admin/pages/delete.php	(revision 2)
@@ -0,0 +1,118 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+
+// Create new admin object and print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_delete');
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+
+if( (!($page_id = $admin->checkIDKEY('page_id', 0, $_SERVER['REQUEST_METHOD']))) )
+{
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+    exit();
+}
+
+// Get perms
+if (!$admin->get_page_permission($page_id,'admin')) {
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}
+
+// Find out more about the page
+$query = "SELECT * FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
+$results = $database->query($query);
+if($database->is_error()) {
+    $admin->print_error($database->get_error());
+}
+if($results->numRows() == 0) {
+    $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+}
+
+$results_array = $results->fetchRow();
+
+$visibility = $results_array['visibility'];
+
+// Check if we should delete it or just set the visibility to 'deleted'
+if(PAGE_TRASH != 'disabled' AND $visibility != 'deleted') {
+    // Page trash is enabled and page has not yet been deleted
+    // Function to change all child pages visibility to deleted
+    function trash_subs($parent = 0) {
+        global $database;
+        // Query pages
+
+        $sql = 'SELECT `page_id` FROM `'.TABLE_PREFIX.'pages` '
+              .'WHERE `parent` = '.$parent.' '
+              .'ORDER BY `position` ASC';
+        if($oRes = $database->query($sql)) {
+            // Check if there are any pages to show
+            if($oRes->numRows() > 0) {
+                // Loop through pages
+                while($page = $oRes->fetchRow(MYSQLI_ASSOC)) {
+                    // Update the page visibility to 'deleted'
+                    $sql = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+                          .'`visibility` = \'deleted\' '
+                          .'WHERE `page_id` = '.$page['page_id'].' '
+                          .'';
+                    $database->query($sql);
+
+                    if($database->is_error()) {
+                        $admin->print_error($database->get_error());
+                    }
+                    // Run this function again for all sub-pages
+                    trash_subs($page['page_id']);
+                }
+            }
+        }
+    }
+    // Update the page visibility to 'deleted'
+    $sql = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+                      .'`visibility` = \'deleted\' '
+                      .'WHERE `page_id` = '.$page_id.' '
+                      .'';
+                $database->query($sql);
+
+                if($database->is_error()) {
+                    $admin->print_error($database->get_error());
+                }
+    //
+    // Run trash subs for this page
+    trash_subs($page_id);
+} else {
+    // Really dump the page
+    // Delete page subs
+    $sub_pages = get_subs($page_id, array());
+    foreach($sub_pages AS $sub_page_id) {
+        delete_page($sub_page_id);
+    }
+    // Delete page
+    delete_page($page_id);
+}
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error());
+} else {
+    $admin->print_success($MESSAGE['PAGES_DELETED']);
+}
+
+// Print admin footer
+$admin->print_footer();
\ No newline at end of file

Property changes on: trunk/admin/pages/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/eggsurplus.js
===================================================================
--- trunk/admin/pages/eggsurplus.js	(nonexistent)
+++ trunk/admin/pages/eggsurplus.js	(revision 2)
@@ -0,0 +1,16 @@
+    function add_child_page(page_id)
+    {
+        //find and select the page in the parent dropdown
+        var selectBox = document.add.parent;
+console.info(selectBox);
+        for (var i = 0; i < selectBox.options.length; i++)
+        {
+              if (selectBox.options[i].value == page_id)
+              {
+                    selectBox.selectedIndex = i;
+                    break;
+              }
+        }
+        //set focus to add form
+        document.add.title.focus();
+    }
Index: trunk/admin/pages/empty_trash.php
===================================================================
--- trunk/admin/pages/empty_trash.php	(nonexistent)
+++ trunk/admin/pages/empty_trash.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require('../../config.php');
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages');
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get page list from database
+// $database = new database();
+$query = "SELECT * FROM ".TABLE_PREFIX."pages WHERE visibility = 'deleted' ORDER BY level DESC";
+$get_pages = $database->query($query);
+
+// Insert values into main page list
+if($get_pages->numRows() > 0)    {
+    while($page = $get_pages->fetchRow()) {
+        // Delete page subs
+        $sub_pages = get_subs($page['page_id'], array());
+        foreach($sub_pages AS $sub_page_id) {
+            delete_page($sub_page_id);
+        }    
+        // Delete page
+        delete_page($page['page_id']);
+    }
+}
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error());
+} else {
+    $admin->print_success($TEXT['TRASH_EMPTIED']);
+}
+
+// Print admin 
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/pages/empty_trash.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/html.php
===================================================================
--- trunk/admin/pages/html.php	(nonexistent)
+++ trunk/admin/pages/html.php	(revision 2)
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML>
+<?php
+/**
+ *
+ * @author     WebsiteBaker Project
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    1.1.0
+ * @platform   Website Baker 2.8.2+
+ *
+ *
+ * This html default only loaded if intro.php is not created
+ *
+ */
+
+// TEMPLATE CODE STARTS BELOW
+?><html lang="en">
+<head>
+  <meta charset="utf-8" />
+  <title></title>
+  <meta name="description" content="tmp" />
+  <meta name="keywords" content="tmp" />
+<!-- meta information for search engines -->
+    <meta http-equiv="imagetoolbar" content="no" />
+    <meta name="description" content="" />
+    <meta name="keywords" content="" />
+    <meta name="robots" content="index,follow" />
+    <meta http-equiv="Content-Encoding" content="gzip" />
+    <meta http-equiv="Accept-Encoding" content="gzip, deflate" />
+<!-- site stylesheet (site colors and layout definitions) -->
+    <link rel="stylesheet" type="text/css" href="" media="screen" />
+    <script src="" ></script>
+</head>
+<body>
+    <div class="content">
+        <h3>Put your content here</h3>
+    </div>
+</body>
+</html>
\ No newline at end of file

Property changes on: trunk/admin/pages/html.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/index.php
===================================================================
--- trunk/admin/pages/index.php	(nonexistent)
+++ trunk/admin/pages/index.php	(revision 2)
@@ -0,0 +1,640 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages');
+//$admin->clearIDKEY();
+// Include the WB functions file
+require(WB_PATH.'/framework/functions.php');
+// eggsurplus: add child pages for a specific page
+?>
+<script type="text/javascript" src="<?php print ADMIN_URL; ?>/pages/eggsurplus.js"></script>
+<?php
+// fixes A URI contains impermissible characters or quotes around the URI are not closed.
+$MESSAGE['PAGES_DELETE_CONFIRM'] = ($MESSAGE['PAGES_DELETE_CONFIRM']);
+
+/**
+ * set_node()
+ *
+ * @return
+ */
+function set_node ($parent,& $par)
+{
+    $retval = '';
+    if($par['num_subs'] )
+    {
+        $retval .= "\n".'<ul id="p'.$parent.'"';
+        if ($parent != 0)
+        {
+            $retval .= ' class="page_list draggable"';
+            if (isset ($_COOKIE['p'.$parent]) && $_COOKIE['p'.$parent] == '1')
+            {
+                 $retval .= ' style="display:block"';
+            }
+        } else {
+            $retval .= ' class="draggable"';
+        }
+        $retval .= '>';
+    }
+    $retval .= ''."\n";
+    return $retval;
+}
+
+/**
+ * make_list()
+ *
+ * @return
+ */
+function make_list($parent = 0, $editable_pages = 0) {
+    // Get objects and vars from outside this function
+    global $admin, $template, $database, $TEXT, $MESSAGE, $HEADING, $par;
+    print set_node ($parent,$par);
+    // Get page list from database
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '
+         .'WHERE `parent` = '.$parent.' '
+         . ((PAGE_TRASH != 'inline') ?  'AND `visibility` != \'deleted\' ' : ' ' )
+         . 'ORDER BY `position` ASC';
+    $get_pages = $database->query($sql);
+    // Insert values into main page list
+    if($get_pages->numRows() > 0)
+    {
+        while($page = $get_pages->fetchRow(MYSQLI_ASSOC))
+        {
+            // Get user perms
+            $admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+            $admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+            $in_group = FALSE;
+            foreach($admin->get_groups_id() as $cur_gid)
+            {
+                if (in_array($cur_gid, $admin_groups))
+                {
+                    $in_group = TRUE;
+                }
+            }
+            if(($in_group) || is_numeric(array_search($admin->get_user_id(), $admin_users)))
+            {
+                if($page['visibility'] == 'deleted')
+                {
+                    if(PAGE_TRASH == 'inline')
+                    {
+                        $can_modify = true;
+                        $editable_pages = $editable_pages+1;
+                    } else {
+                        $can_modify = false;
+                    }
+                } elseif($page['visibility'] != 'deleted')
+                {
+                    $can_modify = true;
+                    $editable_pages = $editable_pages+1;
+                }
+            } else {
+                if($page['visibility'] == 'private')
+                {
+                    continue;
+                } else {
+                    $can_modify = false;
+                }
+            }
+            // Work out if we should show a plus or not
+            $sql = 'SELECT `page_id`,`admin_groups`,`admin_users` FROM `'.TABLE_PREFIX.'pages` WHERE `parent` = '.$page['page_id'].' ';
+            $sql .= (PAGE_TRASH != 'inline') ?  'AND `visibility` != \'deleted\' ' : ' ';
+            // $sql .= ' ORDER BY `position` ASC';
+            $get_page_subs = $database->query($sql);
+            $num_subs = $get_page_subs->numRows();
+            $par['num_subs'] = $num_subs;
+/*
+            if(PAGE_TRASH != 'inline')
+            {
+                $get_page_subs = $database->query("SELECT page_id,admin_groups,admin_users FROM ".TABLE_PREFIX."pages WHERE parent = '".$page['page_id']."' AND visibility!='deleted'");
+            } else {
+                $get_page_subs = $database->query("SELECT page_id,admin_groups,admin_users FROM ".TABLE_PREFIX."pages WHERE parent = '".$page['page_id']."'");
+            }
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $page ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+            if($get_page_subs->numRows() > 0)
+            {
+                $display_plus = true;
+            } else {
+                $display_plus = false;
+            }
+            // Work out how many pages there are for this parent
+            $num_pages = $get_pages->numRows();
+            ?>
+            <li class="p<?php echo $page['parent']; ?>">
+              <table title="<?php echo $TEXT['EXPAND'].'/'.$TEXT['COLLAPSE']; ?>" class="pages_view" >
+                <tbody>
+                <tr>
+                    <td class="level_<?php echo $page['level']; ?>" style="width: 0.99525em; padding-left: <?php if($page['level'] > 0){ echo $page['level']*20; } else { echo '0'; } ?>px;">
+                        <?php
+                        if($display_plus == true) {
+                              $img = 'none';
+                              if (isset($_COOKIE['p'.$page['page_id']]) && $_COOKIE['p'.$page['page_id']] == '1')
+                                { $img = 'minus'; } else { $img = 'plus'; };
+                        ?>
+                        <a onclick="toggle_visibility('p<?php echo $page['page_id']; ?>');" title="<?php echo $TEXT['EXPAND'].'/'.$TEXT['COLLAPSE']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/<?php echo $img; ?>_16.png" onclick="toggle_plus_minus('<?php echo $page['page_id']; ?>');" id="plus_minus_<?php echo $page['page_id']; ?>" alt="+" />
+                        </a>
+                        <?php
+                        } else {
+                        ?>
+                        <img  src="<?php echo THEME_URL; ?>/images/blank.gif" alt="" width="16" />
+                        <?php
+                        }
+                        ?>
+                    </td>
+                    <?php if ($admin->get_permission('pages_modify') && ($can_modify == true)) { ?>
+                    <td class="list_menu_title">
+                        <a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo  $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+                            <?php if($page['visibility'] == 'public') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/visible_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PUBLIC']; ?>" class="page_list_rights" />
+                            <?php } elseif($page['visibility'] == 'private') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/private_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PRIVATE']; ?>" class="page_list_rights" />
+                            <?php } elseif($page['visibility'] == 'registered') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/keys_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['REGISTERED']; ?>" class="page_list_rights" />
+                            <?php } elseif($page['visibility'] == 'hidden') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/hidden_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['HIDDEN']; ?>" class="page_list_rights" />
+                            <?php } elseif($page['visibility'] == 'none') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/none_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['NONE']; ?>" class="page_list_rights" />
+                            <?php } elseif($page['visibility'] == 'deleted') { ?>
+                                <img src="<?php echo THEME_URL; ?>/images/deleted_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['DELETED']; ?>" class="page_list_rights" />
+                            <?php }
+                            echo '<span class="modify_link">'.($page['menu_title']).'</span>'; ?>
+                        </a>
+                    </td>
+                    <?php } else { ?>
+                    <td class="list_menu_title">
+                        <?php if($page['visibility'] == 'public') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/visible_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PUBLIC']; ?>" class="page_list_rights" />
+                        <?php } elseif($page['visibility'] == 'private') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/private_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PRIVATE']; ?>" class="page_list_rights" />
+                        <?php } elseif($page['visibility'] == 'registered') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/keys_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['REGISTERED']; ?>" class="page_list_rights" />
+                        <?php } elseif($page['visibility'] == 'hidden') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/hidden_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['HIDDEN']; ?>" class="page_list_rights" />
+                        <?php } elseif($page['visibility'] == 'none') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/none_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['NONE']; ?>" class="page_list_rights" />
+                        <?php } elseif($page['visibility'] == 'deleted') { ?>
+                            <img src="<?php echo THEME_URL; ?>/images/deleted_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['DELETED']; ?>" class="page_list_rights" />
+                        <?php }
+                        echo ($page['menu_title']); ?>
+                    </td>
+                    <?php } ?>
+                    <td class="list_page_title">
+                        <?php echo ($page['page_title']); ?>
+                    </td>
+                    <td class="list_page_id">
+                        <?php echo $page['page_id']; ?>
+                    </td>
+                    <td class="list_actions">
+                        <?php if($page['visibility'] != 'deleted' && $page['visibility'] != 'none') { ?>
+                        <a href="<?php echo $admin->page_link($page['link']); ?>" target="_blank" title="<?php echo $TEXT['VIEW']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/view_16.png" alt="<?php echo $TEXT['VIEW']; ?>" />
+                        </a>
+                        <?php } ?>
+                    </td>
+                    <td class="list_actions">
+                        <?php if ($page['visibility'] != 'deleted') { ?>
+                            <?php if ($admin->get_permission('pages_settings') && ($can_modify == true)) { ?>
+                            <a href="<?php echo ADMIN_URL; ?>/pages/settings.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['SETTINGS']; ?>">
+                                <img src="<?php echo THEME_URL; ?>/images/modify_16.png" alt="<?php echo $TEXT['SETTINGS']; ?>" />
+                            </a>
+                            <?php } ?>
+                        <?php } else { ?>
+                            <a href="<?php echo ADMIN_URL; ?>/pages/restore.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['RESTORE']; ?>">
+                                <img src="<?php echo THEME_URL; ?>/images/restore_16.png" alt="<?php echo $TEXT['RESTORE']; ?>" />
+                            </a>
+                        <?php } ?>
+                    </td>
+                    <!-- MANAGE SECTIONS AND DATES BUTTONS -->
+                    <td class="list_actions">
+                    <?php
+                    // Work-out if we should show the "manage dates" link
+                    if(MANAGE_SECTIONS == 'enabled' && $admin->get_permission('pages_modify')==true && $can_modify==true)
+                    {
+                        $bShowSection = false;
+                        $sql  = 'SELECT `publ_start`, `publ_end` FROM `'.TABLE_PREFIX.'sections` '
+                              . 'WHERE `page_id` = '.$page['page_id'].' AND `module` != \'menu_link\' ';
+                        // $query_sections = $database->query("SELECT publ_start, publ_end FROM ".TABLE_PREFIX."sections WHERE page_id = '{$page['page_id']}' AND module != 'menu_link'");
+                        if( ($query_sections = $database->query($sql)) )
+                        {
+                            $mdate_display=false;
+                            while($mdate_res = $query_sections->fetchRow(MYSQLI_ASSOC))
+                            {
+                                $bShowSection = true;
+                                if($mdate_res['publ_start']!='0' || $mdate_res['publ_end']!='0')
+                                {
+                                    $mdate_display=true;
+                                    break;
+                                }
+                            }
+                            if ($bShowSection) {
+                            if($mdate_display==1)
+                            {
+                                $file=$admin->page_is_active($page)?"clock_16.png":"clock_red_16.png";
+                                ?>
+                                <a href="<?php echo ADMIN_URL; ?>/pages/sections.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $HEADING['MANAGE_SECTIONS']; ?>">
+                                <img src="<?php echo THEME_URL."/images/$file"; ?>" alt="<?php echo $HEADING['MANAGE_SECTIONS']; ?>" />
+                                </a>
+                            <?php } else { ?>
+                                <a href="<?php echo ADMIN_URL; ?>/pages/sections.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $HEADING['MANAGE_SECTIONS']; ?>">
+                                <img src="<?php echo THEME_URL; ?>/images/noclock_16.png" alt="<?php echo $HEADING['MANAGE_SECTIONS']; ?>" /></a>
+                            <?php }} ?>
+                        <?php } ?>
+                    <?php } ?>
+                    </td>
+                    <td class="list_actions">
+                    <?php if($page['position'] != 1) { ?>
+                        <?php if($page['visibility'] != 'deleted') { ?>
+                            <?php if($admin->get_permission('pages_settings') == true && $can_modify == true) { ?>
+                            <a href="<?php echo ADMIN_URL; ?>/pages/move_up.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                                <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="<?php echo $TEXT['MOVE_UP']; ?>" />
+                            </a>
+                            <?php } ?>
+                        <?php } ?>
+                    <?php } ?>
+                    </td>
+                    <td class="list_actions">
+                    <?php if($page['position'] != $num_pages) { ?>
+                        <?php if($page['visibility'] != 'deleted') { ?>
+                            <?php if($admin->get_permission('pages_settings') == true && $can_modify == true) { ?>
+                            <a href="<?php echo ADMIN_URL; ?>/pages/move_down.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                                <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="<?php echo $TEXT['MOVE_DOWN']; ?>" />
+                            </a>
+                            <?php } ?>
+                        <?php } ?>
+                    <?php } ?>
+                    </td>
+                    <td class="list_actions">
+                        <?php if($admin->get_permission('pages_delete') && $can_modify == true) { // add IdKey ?>
+                        <a onclick="confirm_link('<?php echo $MESSAGE['PAGES_DELETE_CONFIRM']; ?>?','<?php echo ADMIN_URL; ?>/pages/delete.php?page_id=<?php echo $admin->getIDKEY($page['page_id']); ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="<?php echo $TEXT['DELETE']; ?>" />
+                        </a>
+                        <?php } ?>
+                    </td>
+                    <?php
+                    // eggsurplus: Add action to add a page as a child
+                    ?>
+                    <td class="list_actions">
+                        <?php if (($admin->get_permission('pages_add') && ($page['visibility'] != 'deleted'))) { ?>
+                        <a onclick="add_child_page('<?php echo $page['page_id']; ?>');" title="<?php echo $HEADING['ADD_CHILD_PAGE']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/siteadd.png" id="addpage_<?php echo $page['page_id']; ?>" alt="Add Child Page" />
+                        </a>
+                        <?php } ?>
+                    </td>
+                    <td class="list_actions">
+                        <?php echo $page['language']; ?>
+                    </td>
+    <?php if (@DEBUG) { ?>
+    <!--
+                    <td class="list_actions">
+                        <?php echo $page['position']; ?>
+                    </td>
+    -->
+<?php
+    }
+                    // end [IC] jeggers 2009/10/14: Add action to add a page as a child
+?>
+                </tr>
+                </tbody>
+              </table>
+            <?php
+            if ( $page['parent'] == 0)
+            {
+                $page_tmp_id = $page['page_id'];
+            }
+            // Get subs
+            $editable_pages =  make_list($page['page_id'], $editable_pages);
+            print ''."\n";
+?>
+            </li>
+<?php
+        }
+    }
+    $output = ($par['num_subs'] )? '</ul>'."\n" : '';
+    $par['num_subs'] = (empty($output) ) ?  1 : $par['num_subs'];
+    print $output;
+    return $editable_pages;
+}
+
+// Generate pages list
+if($admin->get_permission('pages_view') == true) {
+    ?>
+    <div class="jsadmin hide"></div>
+    <div class="pages_tree">
+    <h2 ><?php echo $HEADING['MODIFY_DELETE_PAGE']; ?></h2>
+    <div class="pages_list block-outer" >
+    <table class="pages_list">
+    <thead>
+    <tr class="pages_list_header">
+        <th class="header_list_menu_title">
+            <?php echo $TEXT['VISIBILITY'] .' / ' .$TEXT['MENU_TITLE']; ?>:
+        </th>
+        <th class="header_list_page_title">
+            <?php echo $TEXT['PAGE_TITLE']; ?>:
+        </th>
+        <th class="header_list_page_id">
+            PID:
+        </th>
+        <th class="header_list_actions">
+            <?php echo $TEXT['ACTIONS']; ?>:
+        </th>
+        <th >
+
+        </th>
+    </tr>
+    </thead>
+    </table>
+    <?php
+    // Work-out if we should check for existing page_code
+    $field_set = $database->field_exists(TABLE_PREFIX.'pages', 'page_code');
+
+    $par = array();
+    $par['num_subs'] = 1;
+    $editable_pages = make_list(0, 0);
+} else {
+    $editable_pages = 0;
+}
+ ?></div><?php
+
+if(intval($editable_pages) == 0 ) {
+    ?>
+    <div class="empty_list">
+        <?php echo $TEXT['NONE_FOUND']; ?>
+    </div>
+    <?php
+}
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('pages.htt')));
+// $template->debug = true;
+$template->set_file('page', 'pages.htt');
+$template->set_block('page', 'main_block', 'main');
+// Insert values into the add page form
+$template->set_var('FTAN', $admin->getFTAN());
+
+// Group list 1
+
+    $query = "SELECT * FROM ".TABLE_PREFIX."groups";
+    $get_groups = $database->query($query);
+    $template->set_block('main_block', 'group_list_block', 'group_list');
+    // Insert admin group and current group first
+    $admin_group_name = $get_groups->fetchRow(MYSQLI_ASSOC);
+    $template->set_var(array(
+                                    'ID' => 1,
+                                    'TOGGLE' => '1',
+                                    'DISABLED' => ' disabled="disabled"',
+                                    'LINK_COLOR' => '000000',
+                                    'CURSOR' => 'default',
+                                    'NAME' => $admin_group_name['name'],
+                                    'CHECKED' => ' checked="checked"'
+                                    )
+                            );
+    $template->parse('group_list', 'group_list_block', true);
+
+    while($group = $get_groups->fetchRow(MYSQLI_ASSOC)) {
+        // check if the user is a member of this group
+        $flag_disabled = '';
+        $flag_checked =  '';
+        $flag_cursor =   'pointer';
+        $flag_color =    '';
+        if (in_array($group["group_id"], $admin->get_groups_id())) {
+            $flag_disabled = ''; //' disabled';
+            $flag_checked =  ' checked="checked"';
+            $flag_cursor =   'default';
+            $flag_color =    '000000';
+        }
+
+        // Check if the group is allowed to edit pages
+        $system_permissions = explode(',', $group['system_permissions']);
+        if(is_numeric(array_search('pages_modify', $system_permissions))) {
+            $template->set_var(array(
+                                            'ID' => $group['group_id'],
+                                            'TOGGLE' => $group['group_id'],
+                                            'CHECKED' => $flag_checked,
+                                            'DISABLED' => $flag_disabled,
+                                            'LINK_COLOR' => $flag_color,
+                                            'CURSOR' => $flag_checked,
+                                            'NAME' => $group['name'],
+                                            )
+                                    );
+            $template->parse('group_list', 'group_list_block', true);
+        }
+    }
+// Group list 2
+
+    $query = "SELECT * FROM ".TABLE_PREFIX."groups";
+
+    $get_groups = $database->query($query);
+    $template->set_block('main_block', 'group_list_block2', 'group_list2');
+    // Insert admin group and current group first
+    $admin_group_name = $get_groups->fetchRow(MYSQLI_ASSOC);
+    $template->set_var(array(
+                                    'ID' => 1,
+                                    'TOGGLE' => '1',
+                                    'DISABLED' => ' disabled="disabled"',
+                                    'LINK_COLOR' => '000000',
+                                    'CURSOR' => 'default',
+                                    'NAME' => $admin_group_name['name'],
+                                    'CHECKED' => ' checked="checked"'
+                                    )
+                            );
+    $template->parse('group_list2', 'group_list_block2', true);
+
+    while($group = $get_groups->fetchRow(MYSQLI_ASSOC)) {
+        // check if the user is a member of this group
+        $flag_disabled = '';
+        $flag_checked =  '';
+        $flag_cursor =   'pointer';
+        $flag_color =    '';
+        if (in_array($group["group_id"], $admin->get_groups_id())) {
+            $flag_disabled = ''; //' disabled';
+            $flag_checked =  ' checked="checked"';
+            $flag_cursor =   'default';
+            $flag_color =    '000000';
+        }
+
+        $template->set_var(array(
+                                        'ID' => $group['group_id'],
+                                        'TOGGLE' => $group['group_id'],
+                                        'CHECKED' => $flag_checked,
+                                        'DISABLED' => $flag_disabled,
+                                        'LINK_COLOR' => $flag_color,
+                                        'CURSOR' => $flag_cursor,
+                                        'NAME' => $group['name'],
+                                        )
+                                );
+        $template->parse('group_list2', 'group_list_block2', true);
+    }
+
+
+// Parent page list
+// $database = new database();
+/**
+ * parent_list()
+ *
+ * @return
+ */
+function parent_list($parent)
+{
+    global $admin, $database, $template, $field_set;
+    $query = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '
+          . 'WHERE `parent` = '.$parent.' '
+          .   'AND `visibility` !=\'deleted\' '
+          . 'ORDER BY `position` ';
+    $get_pages = $database->query($query);
+    while($page = $get_pages->fetchRow(MYSQLI_ASSOC)) {
+        if($admin->page_is_visible($page)==false) {continue;}
+        // if parent = 0 set flag_icon
+        $template->set_var('FLAG_ROOT_ICON',' none ');
+        if( $page['parent'] == 0 && $field_set) {
+            $template->set_var('FLAG_ROOT_ICON','url('.THEME_URL.'/images/flags/'.strtolower($page['language']).'.png)');
+        }
+        // Stop users from adding pages with a level of more than the set page level limit
+        if( $page['level'] <= PAGE_LEVEL_LIMIT + 1 ) {
+            // Get user perms
+            $admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+            $admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+
+            $in_group = FALSE;
+            foreach($admin->get_groups_id() as $cur_gid) {
+                if (in_array($cur_gid, $admin_groups)) {
+                    $in_group = TRUE;
+                }
+            }
+            if(($in_group) || is_numeric(array_search($admin->get_user_id(), $admin_users))) {
+                $can_modify = true;
+            } else {
+                $can_modify = false;
+            }
+            // Title -'s prefix
+            $title_prefix = '';
+            for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - - &nbsp;'; }
+                $template->set_var(array(
+                                        'ID' => $page['page_id'],
+                                        'TITLE' => ($title_prefix.$page['menu_title']),
+                                        'MENU-TITLE' => ($title_prefix.$page['menu_title']),
+                                        'PAGE-TITLE' => ($title_prefix.$page['page_title'])
+                                        ));
+                if($can_modify == true) {
+                    $template->set_var('DISABLED', '');
+                } else {
+                    $template->set_var('DISABLED', ' disabled="disabled" class="disabled"');
+                }
+                $template->parse('page_list2', 'page_list_block2', true);
+        }
+        parent_list($page['page_id']);
+    }
+}
+$template->set_block('main_block', 'page_list_block2', 'page_list2');
+if($admin->get_permission('pages_add_l0') == true) {
+    $template->set_var(
+                        array(
+                            'ID' => '0',
+                            'TITLE' => $TEXT['NONE'],
+                            'SELECTED' => ' selected="selected"',
+                            'DISABLED' => ''
+                        )
+                );
+    $template->parse('page_list2', 'page_list_block2', true);
+}
+parent_list(0);
+// Explode module permissions
+$module_permissions = $_SESSION['MODULE_PERMISSIONS'];
+// Modules list
+$template->set_block('main_block', 'module_list_block', 'module_list');
+$result = $database->query("SELECT * FROM `".TABLE_PREFIX."addons` WHERE `type` = 'module' AND `function` = 'page' ORDER BY `name`");
+if($result->numRows() > 0) {
+    while ($module = $result->fetchRow(MYSQLI_ASSOC)) {
+        // Check if user is allowed to use this module
+        if(!is_numeric(array_search($module['directory'], $module_permissions))) {
+            $template->set_var('VALUE', $module['directory']);
+            $template->set_var('NAME', $module['name']);
+            if($module['directory'] == 'wysiwyg') {
+                $template->set_var('SELECTED', ' selected="selected"');
+            } else {
+                $template->set_var('SELECTED', '');
+            }
+            $template->parse('module_list', 'module_list_block', true);
+        }
+    }
+}
+// Insert urls
+$template->set_var(array(
+                                'THEME_URL' => THEME_URL,
+                                'WB_URL' => WB_URL,
+                                'ADMIN_URL' => ADMIN_URL,
+                                )
+                        );
+// Insert language headings
+$template->set_var(array(
+                                'HEADING_ADD_PAGE' => $HEADING['ADD_PAGE'],
+                                'HEADING_MODIFY_INTRO_PAGE' => $HEADING['MODIFY_INTRO_PAGE']
+                                )
+                        );
+// Insert language text and messages
+$template->set_var(array(
+                                'TEXT_TITLE' => $TEXT['TITLE'],
+                                'TEXT_TYPE' => $TEXT['TYPE'],
+                                'TEXT_PARENT' => $TEXT['PARENT'],
+                                'TEXT_VISIBILITY' => $TEXT['VISIBILITY'],
+                                'TEXT_PUBLIC' => $TEXT['PUBLIC'],
+                                'TEXT_PRIVATE' => $TEXT['PRIVATE'],
+                                'TEXT_REGISTERED' => $TEXT['REGISTERED'],
+                                'TEXT_HIDDEN' => $TEXT['HIDDEN'],
+                                'TEXT_NONE' => $TEXT['NONE'],
+                                'TEXT_NONE_FOUND' => $TEXT['NONE_FOUND'],
+                                'TEXT_ADD' => $TEXT['ADD'],
+                                'TEXT_RESET' => $TEXT['RESET'],
+                                'TEXT_ADMINISTRATORS' => $TEXT['ADMINISTRATORS'],
+                                'TEXT_PRIVATE_VIEWERS' => $TEXT['PRIVATE_VIEWERS'],
+                                'TEXT_REGISTERED_VIEWERS' => $TEXT['REGISTERED_VIEWERS'],
+                                'INTRO_LINK' => $MESSAGE['PAGES']['INTRO_LINK'],
+                                )
+                        );
+$template->set_block('main_block', 'add_block', 'add');
+$template->set_block('main_block', 'intro_block', 'intro');
+// Insert permissions values
+if($admin->get_permission('pages_add') != true) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+    $template->set_block('add', '', '');
+} elseif($admin->get_permission('pages_add_l0') != true && $editable_pages == 0) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+    $template->set_block('add', '', '');
+} else {
+    $template->parse('add', 'add_block', true);
+}
+if($admin->get_permission('pages_intro') != true || INTRO_PAGE != 'enabled') {
+    $template->set_var('DISPLAY_INTRO', 'hide');
+    $template->set_block('intro', '', '');
+} else {
+    $template->parse('intro', 'intro_block', true);
+}
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// include the required file for Javascript admin
+/*
+if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php'))
+{
+    include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+}
+*/
+// Print admin
+$admin->print_footer(true);

Property changes on: trunk/admin/pages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/intro.php
===================================================================
--- trunk/admin/pages/intro.php	(nonexistent)
+++ trunk/admin/pages/intro.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_intro');
+$content = '';
+
+$filename = WB_PATH.PAGES_DIRECTORY.'/intro'.PAGE_EXTENSION;
+
+if(file_exists($filename) && filesize($filename) > 0) {
+    $content = file_get_contents( $filename ) ;
+} else {
+    $content = file_get_contents( ADMIN_PATH.'/pages/html.php' ) ;
+}
+
+require_once(WB_PATH . '/include/editarea/wb_wrapper_edit_area.php');
+$toolbar = 'search, fullscreen, |, undo, redo, |, select_font, syntax_selection,|,word_wrap, highlight, reset_highlight, |,charmap, |, help';
+echo registerEditArea ('content','php',true,'both',true,true,600,450,$toolbar);
+function show_wysiwyg_editor($name,$id,$content,$width,$height) {
+    echo '<textarea name="'.$name.'" id="'.$id.'" style="width: '.$width.'; height: '.$height.';">'.$content.'</textarea>';
+}
+?>
+<form action="intro2.php" method="post">
+<?php print $admin->getFTAN(); ?>
+<input type="hidden" name="page_id" value="{PAGE_ID}" />
+<table cellpadding="0" cellspacing="0" border="0" class="form_submit">
+    <tr>
+        <td colspan="2">
+        <?php
+            show_wysiwyg_editor('content','content',$content,'100%','500px');
+        ?>
+        </td>
+    </tr>
+    <tr>
+        <td class="left">
+            <input type="submit" value="<?php echo $TEXT['SAVE'];?>" class="submit" />
+        </td>
+        <td class="right">
+            <input type="button" value="<?php echo $TEXT['CANCEL'];?>" onclick="javascript: window.location = 'index.php';" class="submit" />
+        </td>
+    </tr>
+</table>
+
+</form>
+<?php
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/intro.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/intro2.php
===================================================================
--- trunk/admin/pages/intro2.php	(nonexistent)
+++ trunk/admin/pages/intro2.php	(revision 2)
@@ -0,0 +1,55 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_intro',false);
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+
+// Get posted content
+if(!isset($_POST['content'])) {
+    $admin->print_error($MESSAGE['PAGES_NOT_SAVED']);
+    exit(0);
+} else {
+    $content = $admin->strip_slashes($_POST['content']);
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+$admin->print_header();
+// Write new content
+$filename = WB_PATH.PAGES_DIRECTORY.'/intro'.PAGE_EXTENSION;
+if(! file_put_contents( $filename, $content )){
+    $admin->print_error($MESSAGE['PAGES_NOT_SAVED']);
+} else {
+    change_mode($filename);
+    $admin->print_success($MESSAGE['PAGES']['INTRO_SAVED']);
+}
+if(!is_writable($filename)) {
+    $admin->print_error($MESSAGE['PAGES']['INTRO_NOT_WRITABLE']);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/intro2.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/modify.php
===================================================================
--- trunk/admin/pages/modify.php	(nonexistent)
+++ trunk/admin/pages/modify.php	(revision 2)
@@ -0,0 +1,227 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+// Create new admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Pages', 'pages_modify');
+// Get page id
+
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $page_id = intval(isset(${$requestMethod}['page_id']) ? ${$requestMethod}['page_id'] : 0);
+    if( ($page_id == 0) || !is_numeric($page_id) ) {
+        $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, '.'.PAGE_EXTENSION)).'::';
+        $sDEBUG=(@DEBUG?$sInfo:'');
+        $admin->print_error($sDEBUG.$MESSAGE['PAGES_NOT_FOUND'], ADMIN_URL.'/pages/index.php' );
+    }
+
+/*
+if( (!($page_id = $admin->checkIDKEY('page_id', $page_id, $_SERVER['REQUEST_METHOD']))) )
+{
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+*/
+
+// Get perms
+if(!$admin->get_page_permission($page_id,'admin')) {
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'], ADMIN_URL );
+}
+
+$sectionId = isset($_GET['wysiwyg']) ? htmlspecialchars($admin->get_get('wysiwyg')) : NULL;
+
+// Get page details
+$results_array=$admin->get_page_details($page_id);
+
+// Get display name of person who last modified the page
+$user=$admin->get_user_details($results_array['modified_by']);
+
+// Convert the unix ts for modified_when to human a readable form
+
+$modified_ts = ($results_array['modified_when'] != 0)
+        ? $modified_ts = date(TIME_FORMAT.', '.DATE_FORMAT, $results_array['modified_when']+TIMEZONE)
+        : 'Unknown';
+// $ftan_module = $GLOBALS['ftan_module'];
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('pages_modify.htt')));
+// $template->debug = true;
+$template->set_file('page', 'pages_modify.htt');
+$template->set_block('page', 'main_block', 'main');
+// $template->set_var('FTAN', $admin->getFTAN() );
+
+$template->set_var(array(
+            'PAGE_ID' => $results_array['page_id'],
+            // 'PAGE_IDKEY' => $admin->getIDKEY($results_array['page_id']),
+            'PAGE_IDKEY' => $results_array['page_id'],
+            'PAGE_TITLE' => ($results_array['page_title']),
+            'MENU_TITLE' => ($results_array['menu_title']),
+            'ADMIN_URL' => ADMIN_URL,
+            'WB_URL' => WB_URL,
+            'THEME_URL' => THEME_URL
+            ));
+
+$template->set_var(array(
+            'MODIFIED_BY' => $user['display_name'],
+            'MODIFIED_BY_USERNAME' => $user['username'],
+            'MODIFIED_WHEN' => $modified_ts,
+            'LAST_MODIFIED' => $MESSAGE['PAGES']['LAST_MODIFIED'],
+            ));
+
+$template->set_block('main_block', 'show_modify_block', 'show_modify');
+if($modified_ts == 'Unknown')
+{
+    $template->set_block('show_modify', '');
+    $template->set_var('CLASS_DISPLAY_MODIFIED', 'hide');
+
+} else {
+    $template->set_var('CLASS_DISPLAY_MODIFIED', '');
+    $template->parse('show_modify', 'show_modify_block', true);
+}
+
+// Work-out if we should show the "manage sections" link
+$sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'sections` '
+     . 'WHERE `page_id`='.(int)$page_id.' AND `module`=\'menu_link\'';
+$query_sections = $database->get_one($sql);
+
+$template->set_block('main_block', 'show_section_block', 'show_section');
+if($query_sections) {
+    $template->set_block('show_section', '');
+    $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+} elseif(MANAGE_SECTIONS == 'enabled') {
+    $template->set_var('TEXT_MANAGE_SECTIONS', $HEADING['MANAGE_SECTIONS']);
+    $template->parse('show_section', 'show_section_block', true);
+} else {
+    $template->set_block('show_section', '');
+    $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+}
+
+// Insert language TEXT
+$template->set_var(array(
+                'TEXT_CURRENT_PAGE' => $TEXT['CURRENT_PAGE'],
+                'TEXT_CHANGE_SETTINGS' => $TEXT['CHANGE_SETTINGS'],
+                'HEADING_MODIFY_PAGE' => $HEADING['MODIFY_PAGE']
+                ));
+
+// Parse and print header template
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// get template used for the displayed page (for displaying block details)
+if (SECTION_BLOCKS)
+{
+    $sql = 'SELECT `template` FROM `'.TABLE_PREFIX.'pages` '
+         . 'WHERE `page_id`='.(int)$page_id;
+    if (($sTemplate = $database->get_one($sql)) !== null) {
+        $page_template = ($sTemplate == '') ? DEFAULT_TEMPLATE : $sTemplate;
+        // include template info file if exists
+        if (is_readable(WB_PATH.'/templates/'.$page_template.'/info.php')) {
+            include_once(WB_PATH.'/templates/'.$page_template.'/info.php');
+        }
+    }
+}
+
+// Get sections for this page
+$module_permissions = $_SESSION['MODULE_PERMISSIONS'];
+// workout for edit only one section for faster pageloading
+// Constant later set in wb_settings, in meantime defined in framework/initialize.php
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'sections` ';
+$sql .= (defined('EDIT_ONE_SECTION') && EDIT_ONE_SECTION && is_numeric($sectionId))
+        ? 'WHERE `section_id` = '.(int)$sectionId
+        : 'WHERE `page_id` = '.(int)$page_id;
+$sql .= ' ORDER BY position ASC';
+$query_sections = $database->query($sql);
+if($query_sections->numRows() > 0)
+{
+    while($section = $query_sections->fetchRow(MYSQLI_ASSOC))
+    {
+        $now = time();
+        $bSectionInactive = !(($now<=$section['publ_end'] || $section['publ_end']==0) && ($now>=$section['publ_start'] || $section['publ_start']==0));
+        $section_id = $section['section_id'];
+        $module = $section['module'];
+        //Have permission?
+        if(!is_numeric(array_search($module, $module_permissions)))
+        {
+            // Include the modules editing script if it exists
+            if (!is_readable(WB_PATH.'/modules/'.$module.'/modify.php')){
+                $admin->print_error($MESSAGE['GENERIC_MODULE_VERSION_ERROR'],ADMIN_URL.'/pages/settings.php?page_id='.(int)$page_id);
+            } else {
+//                print /* '<a name="'.$section_id.'"></a>'. */"\n";
+                $sSectionBlock = '<div class="block-outer">'."\n";
+// set container if SECTION_BLOCKS disabled
+//                $sSectionInfoLine  = ($bSectionInactive ? false: true);
+                $sSectionInfoLine  = ($bSectionInactive ? 'inactive': 'active');
+//                $sSectionInfoLine  = ($bSectionInactive ? '<div class="section-inactive">': '<div class="section-active">')."\n" ;
+                // output block name if blocks are enabled
+//                if (SECTION_BLOCKS) {
+                    if (isset($block[$section['block']]) && trim(strip_tags(($block[$section['block']]))) != '')
+                    {
+                        $block_name = htmlentities(strip_tags($block[$section['block']]));
+                    } else {
+                        if ($section['block'] == 1)
+                        {
+                            $block_name = $TEXT['MAIN'];
+                        } else {
+                            $block_name = '#' . (int) $section['block'];
+                        }
+                    }
+
+                    ob_start() ;
+                    require(WB_PATH.'/modules/'.$module.'/modify.php');
+                    $content = ob_get_clean() ;
+                    if($content != '')
+                    {
+                      echo $sSectionBlock;//block-outer
+                      $sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : '' );
+                      $data = array();
+                      $tpl = new Template(dirname($admin->correct_theme_source('SectionInfoLine.htt')),'keep');
+                      // $template->debug = true;
+                      $tpl->set_file('page', 'SectionInfoLine.htt');
+                      $tpl->set_block('page', 'main_block', 'main');
+                      $tpl->set_block('main_block', 'section_block', 'section_save');
+                      $data['aTarget.SectionIdPrefix'] = $sSectionIdPrefix.$section_id;
+                      $data['aTarget.SectionInfoLine'] = $sSectionInfoLine;
+                      $data['aTarget.sectionBlock'] = $section['block'];
+                      $data['aTarget.SectionId'] = $section_id;
+                      $data['aTarget.pageId'] = $page_id;
+                      $data['aTarget.FTAN'] = $admin->getFTAN();
+                      $data['aTarget.BlockName'] = $block_name;
+                      $data['aTarget.sectionUrl'] = ADMIN_URL.'/pages/';
+                      $data['aTarget.sectionModule'] = $section['module'];
+                      $data['aTarget.title'] = $section['title'];
+                      $data['aTarget.Content'] = '';
+                      if( $admin->get_permission('pages_settings') ) {
+                        $data['lang.TEXT_SUBMIT'] = $TEXT['SAVE'];
+                          $tpl->parse('section_save', 'section_block');
+                      } else {
+                          $tpl->parse('section_save', '');
+                      }
+                      $tpl->set_var($data);
+                      $tpl->parse('main', 'main_block', false);
+                      $tpl->pparse('output', 'page');
+                      unset($tpl);
+                     $sAfterContent = '</div>'."\n" ;
+                     $content = $content."\n".$sAfterContent;
+                     echo $content;
+                }
+            }
+        }
+    }
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/move_down.php
===================================================================
--- trunk/admin/pages/move_down.php	(nonexistent)
+++ trunk/admin/pages/move_down.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require('../../config.php');
+
+// Get id
+if(isset($_GET['page_id']) AND is_numeric($_GET['page_id'])) {
+    if(isset($_GET['section_id']) AND is_numeric($_GET['section_id'])) {
+        $page_id = $_GET['page_id'];
+        $id = $_GET['section_id'];
+        $id_field = 'section_id';
+        $common_field = 'page_id';
+        $table = TABLE_PREFIX.'sections';
+    } else {
+        $id = $_GET['page_id'];
+        $id_field = 'page_id';
+        $common_field = 'parent';
+        $table = TABLE_PREFIX.'pages';
+    }
+} else {
+    header("Location: index.php");
+    exit(0);
+}
+
+// Create new admin object and print admin header
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages_settings');
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+
+// Create new order object an reorder
+$order = new order($table, 'position', $id_field, $common_field);
+if($id_field == 'page_id') {
+    if($order->move_down($id)) {
+        $admin->print_success($MESSAGE['PAGES']['REORDERED']);
+    } else {
+        $admin->print_error($MESSAGE['PAGES']['CANNOT_REORDER']);
+    }
+} else {
+    if($order->move_down($id)) {
+        $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/sections.php?page_id='.$page_id);
+    } else {
+        $admin->print_error($TEXT['ERROR'], ADMIN_URL.'/pages/sections.php?page_id='.$page_id);
+    }
+}
+
+// Print admin footer
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/pages/move_down.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/move_up.php
===================================================================
--- trunk/admin/pages/move_up.php	(nonexistent)
+++ trunk/admin/pages/move_up.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require('../../config.php');
+
+// Get id
+if(isset($_GET['page_id']) AND is_numeric($_GET['page_id'])) {
+    if(isset($_GET['section_id']) AND is_numeric($_GET['section_id'])) {
+        $page_id = $_GET['page_id'];
+        $id = $_GET['section_id'];
+        $id_field = 'section_id';
+        $common_field = 'page_id';
+        $table = TABLE_PREFIX.'sections';
+    } else {
+        $id = $_GET['page_id'];
+        $id_field = 'page_id';
+        $common_field = 'parent';
+        $table = TABLE_PREFIX.'pages';
+    }
+} else {
+    header("Location: index.php");
+    exit(0);
+}
+
+// Create new admin object and print admin header
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages_settings');
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+
+// Create new order object an reorder
+$order = new order($table, 'position', $id_field, $common_field);
+if($id_field == 'page_id') {
+    if($order->move_up($id)) {
+        $admin->print_success($MESSAGE['PAGES']['REORDERED']);
+    } else {
+        $admin->print_error($MESSAGE['PAGES']['CANNOT_REORDER']);
+    }
+} else {
+    if($order->move_up($id)) {
+        $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/sections.php?page_id='.$page_id);
+    } else {
+        $admin->print_error($TEXT['ERROR'], ADMIN_URL.'/pages/sections.php?page_id='.$page_id);
+    }
+}
+
+// Print admin footer
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/pages/move_up.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/page_calendar.js
===================================================================
--- trunk/admin/pages/page_calendar.js	(nonexistent)
+++ trunk/admin/pages/page_calendar.js	(revision 2)
@@ -0,0 +1,27 @@
+Calendar.setup(
+    {
+    inputField  : start_date,
+    ifFormat    : jscal_ifformat,
+    button      : trigger_start,
+    firstDay    : jscal_firstday,
+    showsTime   : showsTime,
+    timeFormat  : timeFormat,
+    date        : jscal_today,
+    range       : [1970, 2037],
+    step        : 1
+    }
+);
+
+Calendar.setup(
+    {
+    inputField  : end_date,
+    ifFormat    : jscal_ifformat,
+    button      : trigger_end,
+    firstDay    : jscal_firstday,
+    showsTime   : showsTime,
+    timeFormat  : timeFormat,
+    date        : jscal_today,
+    range       : [1970, 2037],
+    step        : 1
+    }
+);
Index: trunk/admin/pages/page_index.js
===================================================================
--- trunk/admin/pages/page_index.js	(nonexistent)
+++ trunk/admin/pages/page_index.js	(revision 2)
@@ -0,0 +1,35 @@
+/*-- Addition for remembering expanded state of pages --*/
+function writeSessionCookie (cookieName, cookieValue) {
+    document.cookie = escape(cookieName) + "=" + escape(cookieValue) + ";";
+}
+
+function toggle_viewers() {
+    if(document.add.visibility.value == 'private') {
+        document.getElementById('viewers').style.display = 'block';
+    } else if(document.add.visibility.value == 'registered') {
+        document.getElementById('viewers').style.display = 'block';
+    } else {
+        document.getElementById('viewers').style.display = 'none';
+    }
+}
+function toggle_visibility(id){
+    if(document.getElementById(id).style.display == "block") {
+        document.getElementById(id).style.display = "none";
+        writeSessionCookie (id, "0");//Addition for remembering expanded state of pages
+    } else {
+        document.getElementById(id).style.display = "block";
+        writeSessionCookie (id, "1");//Addition for remembering expanded state of pages
+    }
+}
+var plus = new Image;
+plus.src = THEME_URL+"/images/plus_16.png";
+var minus = new Image;
+minus.src = THEME_URL+"/images/minus_16.png";
+function toggle_plus_minus(id) {
+    var img_src = document.images['plus_minus_' + id].src;
+    if(img_src == plus.src) {
+        document.images['plus_minus_' + id].src = minus.src;
+    } else {
+        document.images['plus_minus_' + id].src = plus.src;
+    }
+}
\ No newline at end of file
Index: trunk/admin/pages/page_settings.js
===================================================================
--- trunk/admin/pages/page_settings.js	(nonexistent)
+++ trunk/admin/pages/page_settings.js	(revision 2)
@@ -0,0 +1,26 @@
+function toggle_viewers() {
+    if(document.settings.visibility.value == 'private' || document.settings.visibility.value == 'registered') {
+        document.getElementById('allowed_viewers').style.display = 'block';
+    } else {
+        document.getElementById('allowed_viewers').style.display = 'none';
+    }
+}
+var lastselectedindex = new Array();
+
+function disabled_hack_for_ie(sel) {
+    var sels = document.getElementsByTagName("select");
+    var i;
+    var sel_num_in_doc = 0;
+    for (i = 0; i <sels.length; i++) {
+        if (sel == sels[i]) {
+            sel_num_in_doc = i;
+        }
+    }
+    // never true for browsers that support option.disabled
+    if (sel.options[sel.selectedIndex].disabled) {
+        sel.selectedIndex = lastselectedindex[sel_num_in_doc];
+    } else {
+        lastselectedindex[sel_num_in_doc] = sel.selectedIndex;
+    }
+    return true;
+}
\ No newline at end of file
Index: trunk/admin/pages/page_trash.js
===================================================================
--- trunk/admin/pages/page_trash.js	(nonexistent)
+++ trunk/admin/pages/page_trash.js	(revision 2)
@@ -0,0 +1,32 @@
+function toggle_viewers() {
+    if(document.add.visibility.value == 'private') {
+        document.getElementById('private_viewers').style.display = 'block';
+        document.getElementById('registered_viewers').style.display = 'none';
+    } else if(document.add.visibility.value == 'registered') {
+        document.getElementById('private_viewers').style.display = 'none';
+        document.getElementById('registered_viewers').style.display = 'block';
+    } else {
+        document.getElementById('private_viewers').style.display = 'none';
+        document.getElementById('registered_viewers').style.display = 'none';
+    }
+}
+
+function toggle_visibility(id){
+    if(document.getElementById(id).style.display == "block") {
+        document.getElementById(id).style.display = "none";
+    } else {
+        document.getElementById(id).style.display = "block";
+    }
+}
+var plus = new Image;
+plus.src = "<?php echo THEME_URL; ?>/images/plus_16.png";
+var minus = new Image;
+minus.src = "<?php echo THEME_URL; ?>/images/minus_16.png";
+function toggle_plus_minus(id) {
+    var img_src = document.images['plus_minus_' + id].src;
+    if(img_src == plus.src) {
+        document.images['plus_minus_' + id].src = minus.src;
+    } else {
+        document.images['plus_minus_' + id].src = plus.src;
+    }
+}
\ No newline at end of file
Index: trunk/admin/pages/rebuildAccessFiles.php
===================================================================
--- trunk/admin/pages/rebuildAccessFiles.php	(nonexistent)
+++ trunk/admin/pages/rebuildAccessFiles.php	(revision 2)
@@ -0,0 +1,121 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        core
+ * @package         test
+ * @subpackage      test
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.4
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @created         2016-02-17
+ *
+ */
+
+ // Create new admin object and print admin header
+require( dirname(dirname((__DIR__))).'/config.php' );
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+if ( !class_exists( 'order', false ) ) { require(WB_PATH.'/framework/class.order.php'); }
+
+// suppress to print the header, so no new FTAN will be set
+//$admin = new admin('Pages', 'pages_settings',false);
+
+if ( !function_exists( 'create_access_file' ) ) { require(WB_PATH.'/framework/functions.php'); }
+require (WB_PATH.'/modules/SimpleRegister.php');
+
+//$target_url = ADMIN_URL.'/pages/settings.php?page_id='.$page_id;
+//$pagetree_url = ADMIN_URL.'/pages/index.php';
+
+    function _makeSql($iParentKey = 0)
+    {
+        global $oDb, $oReg;
+        $iParentKey = intval($iParentKey);
+        $sql  = 'SELECT ( SELECT COUNT(*) '
+              .          'FROM `'.$oReg->TablePrefix.'pages` `x` '
+              .          'WHERE x.`parent`=p.`page_id`'
+              .        ') `children`, '
+              .        's.`module`, MAX(s.`publ_start` + s.`publ_end`) published, p.`link`, '
+              .        '(SELECT MAX(`position`) FROM `'.$oReg->TablePrefix.'pages` '
+              .        'WHERE `parent`='.$iParentKey.') max_position, '
+              .        '0 min_position, '
+              .        'p.`position`, '
+              .        'p.`page_id`, p.`parent`, p.`level`, p.`language`, p.`admin_groups`, '
+              .        'p.`admin_users`, p.`viewing_groups`, p.`viewing_users`, p.`visibility`, '
+              .        'p.`menu_title`, p.`page_title`, p.`page_trail`, p.`modified_when`, '
+              .        'GROUP_CONCAT(CAST(CONCAT(s.`section_id`, \' - \', s.`module`) AS CHAR) ORDER BY s.`position` SEPARATOR \'\n\') `section_list` '
+              . 'FROM `'.$oReg->TablePrefix.'pages` p '
+              .    'INNER JOIN `'.$oReg->TablePrefix.'sections` s '
+              .    'ON p.`page_id`=s.`page_id` '
+              . 'WHERE `parent`='.$iParentKey.' '
+              .    (($oReg->PageTrash != 'inline') ? 'AND `visibility`!=\'deleted\' ' : '')
+              . 'GROUP BY p.`page_id` '
+              . 'ORDER BY p.`position` ASC';
+        return $sql;
+    }
+
+    function _IterateTree($iParent = 0)
+    {
+        global $oDb, $oReg, $_queries, $index,$aOutput;
+      // Get page list from database
+        if(($oPages = $oDb->query(_makeSql($iParent))))
+        {
+            $_queries++;
+            $iMinPosition = 1;
+            while($aPage = $oPages->fetchRow(MYSQLI_ASSOC))
+            { // iterate through the current branch
+                if($oReg->PageLevelLimit && ($aPage['level'] > $oReg->PageLevelLimit)) {
+                    break;
+                }
+
+                // array for sitemap
+                $aOutput[$aPage['page_id']] = array(
+                'loc' => $oReg->AppUrl.$oReg->PagesDir.trim($aPage['link'],'/').$oReg->PageExtension,
+                'lastmod' => date(DATE_W3C, (int)$aPage['modified_when']),
+                'changefreq' => 'monthly',
+                'priority' => '0.5'
+                );
+
+                // array to create accessfiles
+                $aOutput[$aPage['page_id']] = $aPage;
+                // could not use oReg, we are needing backslashes to create access files
+                $sPageFile = WB_PATH.PAGES_DIRECTORY.'/'.trim($aPage['link'],'/').$oReg->PageExtension;
+                if( is_writeable( $sPageFile ) || !file_exists( $sPageFile ) ) {
+                    create_access_file( $sPageFile, $aPage['page_id'], $aPage['level']);
+                    $index++; //
+                }
+
+                if((int)$aPage['children'] > 0 ) {
+                    _IterateTree($aPage['page_id']);
+                }
+          }
+        }
+        return $aOutput;
+    }
+
+      $_queries  = $index = 0;
+      $iTreeRoot = 0;
+      $aOutput   = array();
+      $aPageTree = array();
+
+      $aPageTree = _IterateTree($iTreeRoot);
+
+      echo '<h3>Creating '.$index.' access files</h3>';

Property changes on: trunk/admin/pages/rebuildAccessFiles.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/restore.php
===================================================================
--- trunk/admin/pages/restore.php	(nonexistent)
+++ trunk/admin/pages/restore.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Get page id
+if(!isset($_GET['page_id']) OR !is_numeric($_GET['page_id'])) {
+    header("Location: index.php");
+    exit(0);
+} else {
+    $page_id = $_GET['page_id'];
+}
+
+// Create new admin object and print admin header
+require('../../config.php');
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages_delete');
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get perms
+$results = $database->query("SELECT admin_groups,admin_users FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'");
+$results_array = $results->fetchRow();
+
+// Find out more about the page
+$query = "SELECT * FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'";
+$results = $database->query($query);
+if($database->is_error()) {
+    $admin->print_error($database->get_error());
+}
+if($results->numRows() == 0) {
+    $admin->print_error($MESSAGE['PAGES']['NOT_FOUND']);
+}
+$results_array = $results->fetchRow();
+$old_admin_groups = explode(',', str_replace('_', '', $results_array['admin_groups']));
+$old_admin_users = explode(',', str_replace('_', '', $results_array['admin_users']));
+
+$in_old_group = FALSE;
+foreach($admin->get_groups_id() as $cur_gid){
+    if (in_array($cur_gid, $old_admin_groups)) {
+    $in_old_group = TRUE;
+    }
+}
+if((!$in_old_group) AND !is_numeric(array_search($admin->get_user_id(), $old_admin_users))) {
+    $admin->print_error($MESSAGE['PAGES']['INSUFFICIENT_PERMISSIONS']);
+}
+
+$visibility = $results_array['visibility'];
+
+if(PAGE_TRASH) {
+    if($visibility == 'deleted') {    
+        // Function to change all child pages visibility to deleted
+        function restore_subs($parent = 0) {
+            global $database;
+            // Query pages
+            $query_menu = $database->query("SELECT page_id FROM ".TABLE_PREFIX."pages WHERE parent = '$parent' ORDER BY position ASC");
+            // Check if there are any pages to show
+            if($query_menu->numRows() > 0) {
+                // Loop through pages
+                while($page = $query_menu->fetchRow()) {
+                    // Update the page visibility to 'deleted'
+                    $database->query("UPDATE ".TABLE_PREFIX."pages SET visibility = 'public' WHERE page_id = '".$page['page_id']."' LIMIT 1");
+                    // Run this function again for all sub-pages
+                    restore_subs($page['page_id']);
+                }
+            }
+        }
+        
+        // Update the page visibility to 'deleted'
+        $database->query("UPDATE ".TABLE_PREFIX."pages SET visibility = 'public' WHERE page_id = '$page_id.' LIMIT 1");
+        
+        // Run trash subs for this page
+        restore_subs($page_id);
+        
+    }
+}
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error());
+} else {
+    $admin->print_success($MESSAGE['PAGES']['RESTORED']);
+}
+
+// Print admin footer
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/pages/restore.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/save.php
===================================================================
--- trunk/admin/pages/save.php	(nonexistent)
+++ trunk/admin/pages/save.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/*
+*/
+// Create new admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Pages', 'pages_modify', false);
+
+// Get page & section id
+if(!isset($_POST['page_id']) || !is_numeric($_POST['page_id'])) {
+    header("Location: index.php");
+    exit(0);
+} else {
+    $page_id = intval($_POST['page_id']);
+}
+
+if(!isset($_POST['section_id']) || !is_numeric($_POST['section_id'])) {
+    header("Location: index.php");
+    exit(0);
+} else {
+    $section_id = intval($_POST['section_id']);
+}
+// $js_back = "javascript: history.go(-1);";
+$js_back = ADMIN_URL.'/pages/modify.php?page_id='.$page_id;
+$bBackLink = isset($_POST['pagetree']);
+if ( $bBackLink ) {
+  $js_back = ADMIN_URL.'/pages/index.php';
+}
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, '.'.PAGE_EXTENSION)).'';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+// After check print the header
+$admin->print_header();
+
+// Get perms
+$sql = 'SELECT `admin_groups`,`admin_users` '
+     . 'FROM `'.TABLE_PREFIX.'pages` '
+     . 'WHERE `page_id` = '.$page_id;
+$results = $database->query($sql);
+$results_array = $results->fetchRow();
+if(!$admin->ami_group_member($results_array['admin_users']) &&
+   !$admin->is_group_match($admin->get_groups_id(), $results_array['admin_groups']))
+{
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, '.'.PAGE_EXTENSION));
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}
+// Get page module
+$sql = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` '
+     . 'WHERE `page_id`='.$page_id.' AND `section_id`='.$section_id;
+$module = $database->get_one($sql);
+if(!$module)
+{
+    $admin->print_error( $database->is_error() ? $database->get_error() : $MESSAGE['PAGES_NOT_FOUND']);
+}
+/*
+// Update the pages table
+$now = time();
+$sql = 'UPDATE `'.TABLE_PREFIX.'pages` '
+     . 'SET `modified_when`='.$now.', '
+     .     '`modified_by`='.$admin->get_user_id().' '
+     . 'WHERE `page_id`='.$page_id;
+$database->query($sql);
+*/
+// Include the modules saving script if it exists
+if(file_exists(WB_PATH.'/modules/'.$module.'/save.php'))
+{
+    include(WB_PATH.'/modules/'.$module.'/save.php');
+}
+// Check if there is a db error, otherwise say successful
+if($database->is_error())
+{
+    $admin->print_error($database->get_error(), $js_back );
+} else {
+    $admin->print_success($MESSAGE['PAGES_SAVED'], $js_back );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/sections.php
===================================================================
--- trunk/admin/pages/sections.php	(nonexistent)
+++ trunk/admin/pages/sections.php	(revision 2)
@@ -0,0 +1,590 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Make sure people are allowed to access this page
+if(MANAGE_SECTIONS != 'enabled')
+{
+    header('Location: '.ADMIN_URL.'/pages/index.php');
+    exit(0);
+}
+/* */
+$bDebug = false; // to show position and section_id
+if(!defined('PAGE_DEBUG')) { define('PAGE_DEBUG',$bDebug);}
+// Include the WB functions file
+if ( !function_exists( 'create_access_file' ) ) { require(WB_PATH.'/framework/functions.php'); }
+// Create new admin object
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_modify', false);
+$action = 'show';
+//$echo = $myPath;  //
+// Get page id
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$page_id = intval((isset(${$requestMethod}['page_id'])) ? ${$requestMethod}['page_id'] : 0);
+$action = ($page_id ? 'show' : $action);
+// Get section id if there is one
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$section_id = ((isset(${$requestMethod}['section_id'])) ? ${$requestMethod}['section_id']  : 0);
+$action = ($section_id ? 'delete' : $action);
+// Get module if there is one
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$module = ((isset(${$requestMethod}['module'])) ? ${$requestMethod}['module']  : 0);
+$action = ($module != '' ? 'add' : $action);
+$admin_header = true;
+$backlink = ADMIN_URL.'/pages/sections.php?page_id='.(int)$page_id;
+switch ($action):
+    case 'delete' :
+        if( (!($section_id = intval($admin->checkIDKEY('section_id', 0, $_SERVER['REQUEST_METHOD'])))) )
+        {
+            if($admin_header) { $admin->print_header(); }
+            $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'_idkey::';
+            $sDEBUG=(@DEBUG?$sInfo:'');
+            $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $backlink);
+        }
+        $action = 'show';
+        $sql  = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` ';
+        $sql .= ' WHERE `section_id` ='.$section_id;
+        if( ( ($modulname = $database->get_one($sql)) == $module) && ($section_id > 0 ) ) {
+            // Include the modules delete file if it exists
+            if(file_exists(WB_PATH.'/modules/'.$modulname.'/delete.php'))
+            {
+                require(WB_PATH.'/modules/'.$modulname.'/delete.php');
+            }
+            $sql  = 'DELETE FROM `'.TABLE_PREFIX.'sections` ';
+            $sql .= 'WHERE `section_id` ='.(int)$section_id;
+            if( !$database->query($sql) ) {
+                if($admin_header) { $admin->print_header(); }
+                $admin->print_error($database->get_error(),$backlink);
+            }  else {
+                if ( !class_exists( 'order', false ) ) { require(WB_PATH.'/framework/class.order.php'); }
+                $order = new order(TABLE_PREFIX.'sections', 'position', 'section_id', 'page_id');
+                $order->clean($page_id);
+                $format = $TEXT['SECTION'].' %d  %s %s '.strtolower( $TEXT['DELETED']);
+                $message = sprintf ($format,$section_id,strtoupper($modulname),strtolower($TEXT['SUCCESS']));
+                if($admin_header) { $admin->print_header(); }
+                $admin_header = false;
+                unset($_POST);
+                $admin->print_success($message, $backlink );
+            }
+        } else {
+            if($admin_header) { $admin->print_header(); }
+            $admin->print_error($module.' '.strtolower($TEXT['NOT_FOUND']), $backlink);
+        }
+
+        break;
+    case 'add' :
+        if (!$admin->checkFTAN())
+        {
+            $admin->print_header();
+            $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+            $sDEBUG=(@DEBUG?$sInfo:'');
+            $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $backlink);
+        }
+        $action = 'show';
+        $module = preg_replace('/\W/', '', $module );  // fix secunia 2010-91-4
+        require_once(WB_PATH.'/framework/class.order.php');
+        // Get new order
+        $order = new order(TABLE_PREFIX.'sections', 'position', 'section_id', 'page_id');
+        $position = $order->get_new($page_id);
+        // Insert module into DB
+        $sql  = 'INSERT INTO `'.TABLE_PREFIX.'sections` SET '
+              . '`page_id` = '.(int)$page_id.', '
+              . '`module` = \''.$module.'\', '
+              . '`position` = '.(int)$position.', '
+              . '`block` = 1';
+        if($database->query($sql)) {
+            // Get the section id
+            $section_id = $database->get_one("SELECT LAST_INSERT_ID()");
+            // Include the selected modules add file if it exists
+            if (
+                file_exists(WB_PATH.'/modules/'.$module.'/addon.php') &&
+                file_exists(WB_PATH.'/modules/'.$module.'/cmd/cmdModify.inc')
+            ) { break; }
+            if(file_exists(WB_PATH.'/modules/'.$module.'/add.php'))
+            {
+                require(WB_PATH.'/modules/'.$module.'/add.php');
+            }
+        } elseif ($database->is_error())  {
+            if($admin_header) { $admin->print_header(); }
+            $admin->print_error($database->get_error());
+        }
+        break;
+    default:
+        break;
+endswitch;
+
+switch ($action):
+    default:
+        if($admin_header) { $admin->print_header(); }
+        // Get perms
+        $sql  = 'SELECT `admin_groups`,`admin_users` FROM `'.TABLE_PREFIX.'pages` '
+              . 'WHERE `page_id` = '.$page_id;
+        $oPages = $database->query($sql);
+        $aPages = $oPages->fetchRow(MYSQLI_ASSOC);
+        $in_old_group = $admin->is_group_match($aPages['admin_groups'],$admin->get_groups_id());
+/*
+        $old_admin_groups = explode(',', $aPages['admin_groups']);
+        $old_admin_users  = explode(',', $aPages['admin_users']);
+        $in_old_group = false;
+        foreach($admin->get_groups_id() as $cur_gid)
+        {
+            if (in_array($cur_gid, $old_admin_groups))
+            {
+                $in_old_group = true;
+            }
+        }
+*/
+        if ((!$in_old_group) && !is_numeric(array_search($admin->get_user_id(), $old_admin_users)))
+        {
+            $admin->print_header();
+            $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+            $sDEBUG=(@DEBUG?$sInfo:'');
+            $admin->print_error($sDEBUG.$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+        }
+        // Get page details
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '
+              . 'WHERE `page_id` = '.$page_id;
+        $results = $database->query($sql);
+        if($database->is_error())
+        {
+            // $admin->print_header();
+            $admin->print_error($database->get_error());
+        }
+        if($results->numRows() == 0)
+        {
+            // $admin->print_header();
+            $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+        }
+        $results_array = $results->fetchRow(MYSQLI_ASSOC);
+        // Set module permissions
+        $aAllowedModules = array();
+        $sAllowedModules = '';
+        $module_permissions = $_SESSION['MODULE_PERMISSIONS'];
+        $sAllowedModules = implode(', ',
+                           array_map(function(&$item) use ($database){
+                                         return '\''.$database->escapeString($item) .'\'';
+                                     }, $module_permissions));
+        $sqlAddons  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+                    . 'WHERE `type` = \'module\' '
+                    .   ($sAllowedModules?'AND `directory` NOT IN ('.$sAllowedModules.')' :'')
+                    . 'ORDER BY `name`';
+        if($oAddons = $database->query($sqlAddons))
+        {
+            while($aAddons = $oAddons->fetchRow(MYSQLI_ASSOC))
+            {
+               $aAllowedModules[] = $aAddons['directory'];
+            }
+        }
+
+        $sAllowedModules = '';
+        $sAllowedModules = implode(', ',
+                           array_map(function(&$item) use ($database){
+                                         return '\''.$database->escapeString($item) .'\'';
+                                     }, $aAllowedModules));
+        // Unset block var
+        unset($block);
+        // Include template info file (if it exists)
+        if($results_array['template'] != '')
+        {
+            $template_location = WB_PATH.'/templates/'.$results_array['template'].'/info.php';
+        } else {
+            $template_location = WB_PATH.'/templates/'.DEFAULT_TEMPLATE.'/info.php';
+        }
+        if(file_exists($template_location))
+        {
+            require($template_location);
+        }
+        // Check if $menu is set
+        if(!isset($block[1]) || $block[1] == '')
+        {
+            // Make our own menu list
+            $block[1] = $TEXT['MAIN'];
+        }
+        // Get display name of person who last modified the page
+        $user=$admin->get_user_details($results_array['modified_by']);
+        // Convert the unix ts for modified_when to human a readable form
+        if($results_array['modified_when'] != 0)
+        {
+            $modified_ts = gmdate(TIME_FORMAT.', '.DATE_FORMAT, $results_array['modified_when']+TIMEZONE);
+        } else {
+            $modified_ts = 'Unknown';
+        }
+        /*-- load css files with jquery --*/
+        // include jscalendar-setup
+        $jscal_use_time = true; // whether to use a clock, too
+        require_once(WB_PATH."/include/jscalendar/wb-setup.php");
+        // Setup template object, parse vars to it, then parse it
+        // Create new template object
+        $tpl = new Template(dirname($admin->correct_theme_source('pages_sections.htt')));
+        // $template->debug = true;
+        $tpl->set_file('page', 'pages_sections.htt');
+        $tpl->set_block('page', 'main_block', 'main');
+        $tpl->set_block('main_block', 'module_block', 'module_list');
+        $tpl->set_block('main_block', 'show_section_block', 'show_section');
+        $tpl->set_block('main_block', 'calendar_block', 'calendar_list');
+        $tpl->set_var('FTAN', $admin->getFTAN());
+        // setting trash only if more than one section exists
+        $tpl->set_block('show_section_block', 'can_delete_block', 'can_delete');
+        $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'sections` '
+             . 'WHERE `page_id`='.intval($page_id).' '
+             .   'AND `module` IN ('.$sAllowedModules.')';
+        $bSectionCanDelete = ($database->get_one($sql) > 1);
+        // set first defaults and messages
+        $tpl->set_var(array(
+                        'PAGE_ID' => $results_array['page_id'],
+                        // 'PAGE_IDKEY' => $admin->getIDKEY($results_array['page_id']),
+                        'PAGE_IDKEY' => $results_array['page_id'],
+                        'TEXT_PAGE' => $TEXT['PAGE'],
+                        'TIMEZONE' => 'TIMEZONE',
+                        'PAGE_TITLE' => ($results_array['page_title']),
+                        'MENU_TITLE' => ($results_array['menu_title']),
+                        'TEXT_CURRENT_PAGE' => $TEXT['CURRENT_PAGE'],
+                        'HEADING_MANAGE_SECTIONS' => $HEADING['MANAGE_SECTIONS'],
+                        'HEADING_MODIFY_PAGE' => $HEADING['MODIFY_PAGE'],
+                        'TEXT_CHANGE_SETTINGS' => $TEXT['CHANGE_SETTINGS'],
+                        'TEXT_ADD_SECTION' => $TEXT['ADD_SECTION'],
+                        'TEXT_ID' => 'ID',
+                        'TEXT_TYPE' => $TEXT['TYPE'],
+                        'TEXT_BLOCK' => $TEXT['BLOCK'],
+                        'TEXT_PUBL_START_DATE' => $TEXT{'PUBL_START_DATE'},
+                        'TEXT_PUBL_END_DATE' => $TEXT['PUBL_END_DATE'],
+                        'TEXT_ACTIONS' => $TEXT['ACTIONS'],
+                        'TEXT_MODIFY' => $TEXT['MODIFY'],
+                        'TEXT_MODIFY_PAGE' => $HEADING['MODIFY_PAGE'],
+                        'LAST_MODIFIED' => $MESSAGE['PAGES']['LAST_MODIFIED'],
+                        'MODIFIED_BY' => $user['display_name'],
+                        'MODIFIED_BY_USERNAME' => $user['username'],
+                        'MODIFIED_WHEN' => $modified_ts,
+                        'ADMIN_URL' => ADMIN_URL,
+                        'WB_URL' => WB_URL,
+                        'THEME_URL' => THEME_URL
+                        )
+                    );
+        // Insert variables
+        $tpl->set_var(array(
+                        'PAGE_ID' => $results_array['page_id'],
+                        // 'PAGE_IDKEY' => $admin->getIDKEY($results_array['page_id']),
+                        'PAGE_IDKEY' => $results_array['page_id'],
+                        'VAR_PAGE_TITLE' => $results_array['page_title'],
+                        'SETTINGS_LINK' => ADMIN_URL.'/pages/settings.php?page_id='.$results_array['page_id'],
+                        'MODIFY_LINK' => ADMIN_URL.'/pages/modify.php?page_id='.$results_array['page_id']
+                        )
+                    );
+        $tpl->set_block('show_section_block', 'section_list_block', 'section_list');
+        $tpl->set_block('show_section_block', 'section_title_block', 'section_title');
+        $sqlSections  = 'SELECT * FROM `'.TABLE_PREFIX.'sections` '
+                      . 'WHERE `page_id` = '.(int)$page_id.' '
+                      . 'ORDER BY `position`';
+//        $query_sections = $database->query($sql);
+        if ($query_sections = $database->query($sqlSections))
+        {
+            $num_sections = $query_sections->numRows();
+            $section = array();
+            while($section = $query_sections->fetchRow(MYSQLI_ASSOC))
+            {
+                if(!is_numeric(array_search($section['module'], $module_permissions)))
+                {
+                    // Get the modules real name
+                    $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '
+                         . 'WHERE `directory` = "'.$section['module'].'"';
+                    if(!$database->get_one($sql) || !file_exists(WB_PATH.'/modules/'.$section['module']))
+                    {
+                        $edit_page = '<span class="module_disabled">'.$section['module'].'</span>';
+                        $section['title'] = $MESSAGE['GENERIC_NOT_INSTALLED'];
+                    }else
+                    {
+                        $edit_page = '';
+                    }
+                    $sec_anchor = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : '');
+                    $edit_page_0 = '<a id="sid'.$section['section_id'].'" href="'.ADMIN_URL.'/pages/modify.php?page_id='.$results_array['page_id'];
+                    $edit_page_1  = ($sec_anchor!='') ? '#'.$sec_anchor.$section['section_id'].'">' : '">';
+                    $edit_page_1 .= $section['module'].'</a>';
+
+                    if ($section['title']!='') {
+                        $sSectionTitle  =  ((mb_strlen($section['title']) > 35) ? mb_substr($section['title'], 0, 34).'…' : $section['title']);
+                        $tpl->set_var('SECTION_TITLE', $sSectionTitle);
+                        $tpl->set_var('SEC_TAG_TITLE', $section['title']);
+                        $tpl->parse('section_title', 'section_title_block', false);
+                    } else {
+                        $tpl->parse('section_title', '');
+                    }
+
+                    if(SECTION_BLOCKS)
+                    {
+                        if($edit_page == '')
+                        {
+                            if(defined('EDIT_ONE_SECTION') && EDIT_ONE_SECTION)
+                            {
+                                $edit_page = $edit_page_0.'&amp;wysiwyg='.$section['section_id'].$edit_page_1;
+                            } else {
+                                $edit_page = $edit_page_0.$edit_page_1;
+                            }
+                        }
+                        $input_attribute = 'input_normal';
+                        $tpl->set_var(array(
+                                'STYLE_DISPLAY_SECTION_BLOCK' => ' style="visibility:visible;"',
+                                'NAME_SIZE' => 300,
+                                'INPUT_ATTRIBUTE' => $input_attribute,
+                                'VAR_SECTION_ID' => $section['section_id'],
+                                'VAR_SECTION_IDKEY' => $admin->getIDKEY($section['section_id']),
+                                // 'VAR_SECTION_IDKEY' => $section['section_id'],
+                                'VAR_POSITION' => $section['position'],
+                                'LINK_MODIFY_URL_VAR_MODUL_NAME' => $edit_page,
+                                'SELECT' => '',
+                                'SET_NONE_DISPLAY_OPTION' => ''
+                                )
+                            );
+                        // Add block options to the section_list
+                        $tpl->clear_var('section_list');
+
+                        foreach($block AS $number => $name)
+                        {
+                            $tpl->set_var('NAME', htmlentities(strip_tags($name)));
+                            $tpl->set_var('VALUE', $number);
+                            $tpl->set_var('SIZE', 1);
+                            if($section['block'] == $number)
+                            {
+                                $tpl->set_var('SELECTED', ' selected="selected"');
+                            } else {
+                                $tpl->set_var('SELECTED', '');
+                            }
+                            $tpl->parse('section_list', 'section_list_block', true);
+                        }
+                    } else {
+                        if($edit_page == '')
+                        {
+                            $edit_page = $edit_page_0.'#wb_'.$edit_page_1;
+                        }
+
+                        $input_attribute = 'input_normal';
+                        $tpl->set_var(array(
+                                'STYLE_DISPLAY_SECTION_BLOCK' => ' style="visibility:hidden;"',
+                                'NAME_SIZE' => 300,
+                                'INPUT_ATTRIBUTE' => $input_attribute,
+                                'VAR_SECTION_ID' => $section['section_id'],
+                                'VAR_SECTION_IDKEY' => $admin->getIDKEY($section['section_id']),
+                                // 'VAR_SECTION_IDKEY' => $section['section_id'],
+                                'VAR_POSITION' => $section['position'],
+                                'LINK_MODIFY_URL_VAR_MODUL_NAME' => $edit_page,
+                                'NAME' => htmlentities(strip_tags($block[1])),
+                                'VALUE' => 1,
+                                'SET_NONE_DISPLAY_OPTION' => ''
+                                )
+                            );
+                    }
+                    // Insert icon and images
+                    $tpl->set_var(array(
+                                'CLOCK_16_PNG' => 'clock_16.png',
+                                'CLOCK_DEL_16_PNG' => 'clock_del_16.png',
+                                'DELETE_16_PNG' => 'delete_16.png'
+                                )
+                            );
+                    // set calendar start values
+                    if($section['publ_start']==0)
+                    {
+                        $tpl->set_var('VALUE_PUBL_START', '');
+                    } else {
+                        $tpl->set_var('VALUE_PUBL_START', date($jscal_format, $section['publ_start']+TIMEZONE));
+                    }
+                    // set calendar start values
+                    if($section['publ_end']==0)
+                    {
+                        $tpl->set_var('VALUE_PUBL_END', '');
+                    } else {
+                        $tpl->set_var('VALUE_PUBL_END', date($jscal_format, $section['publ_end']+TIMEZONE));
+                    }
+                    // Insert icons up and down
+                    if($section['position'] != 1 )
+                    {
+                        $tpl->set_var(
+                                    'VAR_MOVE_UP_URL',
+                                    '<a href="'.ADMIN_URL.'/pages/move_up.php?page_id='.$page_id.'&amp;section_id='.$section['section_id'].'">
+                                    <img src="'.THEME_URL.'/images/up_16.png" alt="up" />
+                                    </a>' );
+                    } else {
+                        $tpl->set_var(array(
+                                    'VAR_MOVE_UP_URL' => ''
+                                    )
+                                );
+                    }
+                    if($section['position'] != $num_sections ) {
+                        $tpl->set_var(
+                                    'VAR_MOVE_DOWN_URL',
+                                    '<a href="'.ADMIN_URL.'/pages/move_down.php?page_id='.$page_id.'&amp;section_id='.$section['section_id'].'">
+                                    <img src="'.THEME_URL.'/images/down_16.png" alt="down" />
+                                    </a>' );
+                    } else {
+                        $tpl->set_var(array(
+                                    'VAR_MOVE_DOWN_URL' => ''
+                                    )
+                                );
+                    }
+                } else {
+                  continue;
+                }
+                    $tpl->set_var(array(
+                                    'DISPLAY_DEBUG' => ' style="visibility="visible;"',
+                                    'TEXT_SID' => 'SID',
+                                    'DEBUG_COLSPAN_SIZE' => 9
+                                    )
+                                );
+                if($bDebug)
+                {
+                    $tpl->set_var(array(
+                                    'DISPLAY_DEBUG' => ' style="visibility="visible;"',
+                                    'TEXT_PID' => 'PID',
+                                    'TEXT_SID' => 'SID',
+                                    'POSITION' => $section['position']
+                                    )
+                                );
+                } else {
+                    $tpl->set_var(array(
+                                    'DISPLAY_DEBUG' => ' style="display:none;"',
+                                    'TEXT_PID' => '',
+                                    'POSITION' => ''
+                                    )
+                                );
+                }
+            if($bSectionCanDelete) {
+                $tpl->parse('can_delete', 'can_delete_block', false);
+            } else {
+//                $tpl->parse('can_delete', '', false);
+                $tpl->set_block('can_delete_block', '');
+            }
+            $tpl->parse('show_section', 'show_section_block', true);
+            }
+        }
+
+        // now add the calendars -- remember to to set the range to [1970, 2037] if the date is used as timestamp!
+        // the loop is simply a copy from above.
+        $sql  = 'SELECT `section_id`,`module` FROM `'.TABLE_PREFIX.'sections` ';
+        $sql .= 'WHERE page_id = '.$page_id.' ';
+        $sql .= 'ORDER BY `position` ASC';
+        $query_sections = $database->query($sql);
+
+        if($query_sections->numRows() > 0)
+        {
+            $num_sections = $query_sections->numRows();
+            while($section = $query_sections->fetchRow())
+            {
+                // Get the modules real name
+                $sql  = 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '
+                      . 'WHERE `directory` = "'.$section['module'].'"';
+                $module_name = $database->get_one($sql);
+
+                if(!is_numeric(array_search($section['module'], $module_permissions)))
+                {
+                    $tpl->set_var(array(
+                                'jscal_ifformat' => $jscal_ifformat,
+                                'jscal_firstday' => $jscal_firstday,
+                                'jscal_today' => $jscal_today,
+                                'start_date' => 'start_date'.$section['section_id'],
+                                'end_date' => 'end_date'.$section['section_id'],
+                                'trigger_start' => 'trigger_start'.$section['section_id'],
+                                'trigger_end' => 'trigger_stop'.$section['section_id']
+                                )
+                            );
+                    if(isset($jscal_use_time) && $jscal_use_time==TRUE) {
+                        $tpl->set_var(array(
+                                'showsTime' => "true",
+                                'timeFormat' => "24"
+                                )
+                            );
+                    }  else {
+                        $tpl->set_var(array(
+                                'showsTime' => "false",
+                                'timeFormat' => "24"
+                                )
+                            );
+                    }
+                }
+                $tpl->parse('calendar_list', 'calendar_block', true);
+            }
+        }
+
+        // Work-out if we should show the "Add Section" form
+        $sql  = 'SELECT `section_id` FROM `'.TABLE_PREFIX.'sections` '
+              . 'WHERE `page_id` = '.$page_id.' AND `module` = "menu_link"';
+        $query_sections = $database->query($sql);
+        if($query_sections->numRows() == 0)
+        {
+            // Modules list
+            $sql  = 'SELECT `name`,`directory`,`type` FROM `'.TABLE_PREFIX.'addons` '
+                  . 'WHERE `type` = \'module\' '
+                  .   'AND `function` = \'page\' '
+                  .   'AND `directory` != \'menu_link\' '
+                  . 'ORDER BY `name`';
+            $result = $database->query($sql);
+        // if(DEBUG && $database->is_error()) { $admin->print_error($database->get_error()); }
+            if($result->numRows() > 0)
+            {
+                while ($module = $result->fetchRow(MYSQLI_ASSOC))
+                {
+                    // Check if user is allowed to use this module   echo  $module['directory'],'<br />';
+                    if(!is_numeric(array_search($module['directory'], $module_permissions)))
+                    {
+                        $tpl->set_var('VALUE', $module['directory']);
+                        $tpl->set_var('NAME', $module['name']);
+                        if($module['directory'] == 'wysiwyg')
+                        {
+                            $tpl->set_var('SELECTED', ' selected="selected"');
+                        } else {
+                            $tpl->set_var('SELECTED', '');
+                        }
+                        $tpl->parse('module_list', 'module_block', true);
+                    } else {
+                      continue;
+                    }
+                }
+            }
+        }
+        // Insert language text and messages
+        $tpl->set_var(array(
+                            'TEXT_MANAGE_SECTIONS' => $HEADING['MANAGE_SECTIONS'],
+                            'TEXT_ARE_YOU_SURE' => $TEXT['ARE_YOU_SURE'],
+                            'TEXT_TYPE' => $TEXT['TYPE'],
+                            'TEXT_ADD' => $TEXT['ADD'],
+                            'TEXT_SAVE' =>  $TEXT['SAVE'],
+                            'TEXTLINK_MODIFY_PAGE' => $HEADING['MODIFY_PAGE'],
+                            'TEXT_CALENDAR' => $TEXT['CALENDAR'],
+                            'TEXT_DELETE_DATE' => $TEXT['DELETE_DATE'],
+                            'TEXT_ADD_SECTION' => $TEXT['ADD_SECTION'],
+                            'TEXT_MOVE_UP' => $TEXT['MOVE_UP'],
+                            'TEXT_MOVE_DOWN' => $TEXT['MOVE_DOWN']
+                            )
+                        );
+        $tpl->set_block('main_block', 'show_settings_block', 'show_settings');
+        if ($admin->get_permission('pages_settings')) {
+            $tpl->parse('show_settings', 'show_settings_block', true);
+        } else {
+            $tpl->set_block('show_settings', '');
+        }
+        $tpl->parse('main', 'main_block', false);
+        $tpl->pparse('output', 'page');
+        // include the required file for Javascript admin
+        if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php'))
+        {
+            include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+        }
+        break;
+endswitch;
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/sections.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/sections_save.php
===================================================================
--- trunk/admin/pages/sections_save.php	(nonexistent)
+++ trunk/admin/pages/sections_save.php	(revision 2)
@@ -0,0 +1,171 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$aRequestVars = (isset(${$requestMethod})) ? ${$requestMethod} : null;
+// Make sure people are allowed to access this page
+if(MANAGE_SECTIONS != 'enabled') {
+    header('Location: '.ADMIN_URL.'/pages/index.php');
+    exit(0);
+}
+
+require_once(WB_PATH."/include/jscalendar/jscalendar-functions.php");
+/**/
+// Create new admin object
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Pages', 'pages_modify',false);
+
+// Get page id
+if(!isset($aRequestVars['page_id']) || !is_numeric($aRequestVars['page_id'])) {
+    $sInfo = __LINE__.') '.strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+    exit(0);
+} else {
+    $iPageId = $page_id = (int)$aRequestVars['page_id'];
+}
+
+$callingScript = $_SERVER['HTTP_REFERER'];
+$sBackLink = $callingScript.'?page_id='.$iPageId;
+//$sBackLink = ADMIN_URL.'/pages/sections.php?page_id='.$iPageId;
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = __LINE__.') '.strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL);
+}
+/*
+if( (!($page_id = $admin->checkIDKEY('page_id', 0, $_SERVER['REQUEST_METHOD']))) )
+{
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS']);
+    exit();
+}
+*/
+// Get perms
+$sql  = 'SELECT `admin_groups`,`admin_users` FROM `'.TABLE_PREFIX.'pages` '
+      . ' WHERE `page_id` = '.(int)$page_id. '';
+$results = $database->query($sql);
+$results_array = $results->fetchRow(MYSQLI_ASSOC);
+$old_admin_groups = explode(',', $results_array['admin_groups']);
+$old_admin_users = explode(',', $results_array['admin_users']);
+$in_old_group = FALSE;
+foreach($admin->get_groups_id() as $cur_gid){
+    if (in_array($cur_gid, $old_admin_groups)) {
+        $in_old_group = TRUE;
+    }
+}
+if((!$in_old_group) && !is_numeric(array_search($admin->get_user_id(), $old_admin_users))) {
+    $sInfo = __LINE__.') '.(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}
+
+// Get page details
+$query = 'SELECT COUNT(`page_id`) `numRows` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.(int)$page_id.'';
+$numRows = $database->get_one($query);
+if($database->is_error()) {
+    $admin->print_header();
+    $sInfo = __LINE__.') '.strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'_DATABASE_ERROR::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$database->get_error());
+}
+if($numRows == 0) {
+    $admin->print_header();
+    $sInfo = __LINE__.') '.strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['PAGES_NOT_FOUND']);
+}
+// After check print the header
+$admin->print_header();
+
+$results_array = $results->fetchRow(MYSQLI_ASSOC);
+// Set module permissions
+$module_permissions = $_SESSION['MODULE_PERMISSIONS'];
+
+$aSql = array();
+$section_id = intval($admin->get_post('section_id') );
+$sTitle  = $admin->StripCodeFromText( $admin->get_post('title_'.$section_id ) );
+$bSaveTitle = isset( $aRequestVars['inputSection'] );
+if( $bSaveTitle ) {
+  $aSql[]  = 'UPDATE `'.TABLE_PREFIX.'sections` SET '
+         . '`title`=\''.$database->escapeString($sTitle).'\' '
+         . 'WHERE `section_id`='.(int)$section_id;
+  foreach( $aSql as $sSql ) {
+      if(!$database->query($sSql)) {
+      }
+ }
+
+} else {
+// Loop through sections
+    $sql  = 'SELECT `section_id`,`module`,`position` FROM `'.TABLE_PREFIX.'sections` '
+          . 'WHERE `page_id` = '.(int)$page_id.' '
+          . 'ORDER BY `position` ';
+    if($query_sections = $database->query($sql))
+    {
+        $num_sections = $query_sections->numRows();
+        while($section = $query_sections->fetchRow(MYSQLI_ASSOC)) {
+            if(!is_numeric(array_search($section['module'], $module_permissions))) {
+                // Update the section record with properties
+                $section_id = $section['section_id'];
+                $sql = ''; $publ_start = 0; $publ_end = 0;
+                $dst = date("I")?" DST":""; // daylight saving time?
+                if(isset($_POST['block'.$section_id]) && $_POST['block'.$section_id] != '') {
+                    $sql = "block = '".$admin->add_slashes($_POST['block'.$section_id])."'";
+                }
+                // update publ_start and publ_end, trying to make use of the strtotime()-features like "next week", "+1 month", ...
+                if(isset($_POST['start_date'.$section_id]) && isset($_POST['end_date'.$section_id])) {
+                    if(trim($_POST['start_date'.$section_id]) == '0' || trim($_POST['start_date'.$section_id]) == '') {
+                        $publ_start = 0;
+                    } else {
+                        $publ_start = jscalendar_to_timestamp($_POST['start_date'.$section_id]);
+                    }
+                    if(trim($_POST['end_date'.$section_id]) == '0' || trim($_POST['end_date'.$section_id]) == '') {
+                        $publ_end = 0;
+                    } else {
+                        $publ_end = jscalendar_to_timestamp($_POST['end_date'.$section_id], $publ_start);
+                    }
+                    if($sql != ''){$sql .= ",";}
+                    $sql .= " publ_start = '".$database->escapeString($publ_start)."'";
+                    $sql .= ", publ_end = '".$database->escapeString($publ_end)."'";
+                }
+
+                $query = "UPDATE ".TABLE_PREFIX."sections SET $sql WHERE section_id = '$section_id'";
+                if($sql != '') {
+                    $database->query($query);
+                }
+            }
+        }
+    }
+  }
+// Check for error or print success message
+if($database->is_error()) {
+    $sInfo = __LINE__.') '.strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$database->get_error(), ADMIN_URL.'/pages/sections.php?page_id='.$page_id );
+} else {
+    $admin->print_success($MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'], $sBackLink );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/sections_save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/settings-x.php
===================================================================
--- trunk/admin/pages/settings-x.php	(nonexistent)
+++ trunk/admin/pages/settings-x.php	(revision 2)
@@ -0,0 +1,156 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object
+    if (!defined('WB_PATH')) { require dirname(dirname((__DIR__))).'/config.php'; }
+    if (!class_exists('admin', false)) { require WB_PATH.'/framework/class.admin.php'; }
+    $admin = new admin('Pages', 'pages_settings');
+// Include the WB functions file
+    include __DIR__.'/settings_helper.php';
+// Get page id from  HTML request and sanitize it
+    if (!($page_id = intval(@$_GET['page_id']?:0))) {
+        $admin->print_header();
+        $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+    }
+// load requested page
+    $aPage = null;
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.$page_id;
+    if (($oResult = $database->query($sql))) {
+        $aPage = $oResult->fetchRow(MSQL_ASSOC);
+    }
+    if (!$aPage) {
+// throw error if no valid page received
+        $admin->print_header();
+        $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+    }
+// check if current user has admin rights to that page
+    if (!($admin->ami_group_member($aPage['admin_groups']) ||
+         $admin->is_group_match($aPage['admin_users'], $admin->get_user_id()))
+    ) {
+        $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+    }
+// check if user has owner rights for this page
+    $bHasOwnerRight = ($admin->get_user_id() == $aPage['page_owner'] || $admin->get_user_id() == 1);
+// restore SEO title from page-link
+    $aPage['seo_title'] = basename($aPage['link']);
+// add user data array to page
+    $aPage['modified_by'] = $admin->get_user_details($aPage['modified_by']);
+
+// prepare template data -------------------------------------------------------
+    $aTmplDataGlobal = array();
+    $aTmplData = array();
+    $aTmplDataGlobal['page'] = $aPage;
+    $aTmplDataGlobal['user'] = $admin->get_user_details($admin->get_user_id());
+    $aTmplDataGlobal['user']['owner'] = $bHasOwnerRight;
+
+// get sorted group lists ------------------------------------------------------
+    $aAdmins = explode(',', $aPage['admin_groups']);
+    $aViewers = explode(',', $aPage['viewing_groups']);
+    $aList = array();
+    $sql = 'SELECT `group_id` `id`, `name` '
+         . 'FROM `'.TABLE_PREFIX.'groups` '
+         . 'ORDER BY `name`';
+    $oRecords = $database->query($sql);
+    while ($aRecord = $oRecords->fetchRow(MYSQLI_ASSOC)) {
+    // if group is set as admin to this page
+        $aRecord['admin'] = in_array($aRecord['id'], $aAdmins);
+    // if group ist set as viewer to this page
+        $aRecord['viewer'] = in_array($aRecord['id'], $aViewers);
+        $aList[] = $aRecord;
+    }
+// sort groups by admins
+    $aTmplData['GroupListAdmin'] = SettingsHelper::doMultiSort($aList, 'admin', 'name');
+// sort groups by viewers
+    $aTmplData['GroupListViewer'] = SettingsHelper::doMultiSort($aList, 'viewer', 'name');
+// get sorted user lists -------------------------------------------------------
+    $aAdmins = explode(',', $aPage['admin_users']);
+    $aViewers = explode(',', $aPage['viewing_users']);
+    $aList = array();
+    $sql = 'SELECT `user_id` `id`, `display_name` `name` '
+         . 'FROM `'.TABLE_PREFIX.'users` '
+         . 'ORDER BY `name`';
+    $oRecords = $database->query($sql);
+    while ($aRecord = $oRecords->fetchRow(MYSQLI_ASSOC)) {
+    // if user is set as admin to this page
+        $aRecord['admin'] = in_array($aRecord['id'], $aAdmins);
+    // if user is set as viewer to this page
+        $aRecord['viewer'] = in_array($aRecord['id'], $aViewers);
+        $aList[] = $aRecord;
+    }
+// sort groups by admins
+    $aTmplData['UserListAdmin'] = SettingsHelper::doMultiSort($aList, 'admin', 'name');
+// sort groups by viewers
+    $aTmplData['UserListViewer'] = SettingsHelper::doMultiSort($aList, 'viewer', 'name');
+// clean up memory
+    unset($aAdmins, $aViewers, $oRecords, $aRecord, $aList, $doMultiSort);
+// add list of possible parent pages -------------------------------------------
+    $aParentPages = SettingsHelper::getParentPagesList($aTmplDataGlobal['page']['page_id'], $iCurrentPage, $admin, $database);
+// check for permission to add a level-0 page
+    if ($admin->get_permission('pages_add_l0') || $results_array['level'] == 0) {
+// add the option to choose level-0
+        $aPage['id']       = 0;
+        $aPage['title']    = $aLang['TEXT_NONE'];
+        $aPage['language'] = '';
+        $aPage['active']   = !$results_array['parent'];
+        array_unshift($aParentPages, $aPage);
+    }
+    $aTmplData['ParentPages'] = $aParentPages;
+// add list of linking targets -------------------------------------------------
+    $aTmplData['LinkTargets'] = array(
+        array('target' => '_top', 'caption' => $TEXT['TOP_FRAME']),
+        array('target' => '_self', 'caption' => $TEXT['SAME_WINDOW']),
+        array('target' => '_blank', 'caption' => $TEXT['NEW_WINDOW'])
+    );
+// build list of available templates -------------------------------------------
+    $aTemplatesList = array();
+    $sql = 'SELECT `directory`, `name`, `version` FROM `'.TABLE_PREFIX.'addons` '
+         . 'WHERE `function` = \'template\' '
+         . 'ORDER BY `name`';
+    if (($oAddons = $database->query($sql))) {
+        while (($aAddon = $oAddon->fetchRow(MYSQLI_ASSOC))) {
+            $aTemplatesList[] = $aAddon;
+        }
+    }
+    if (!$aTemplatesList) {
+        $aTemplatesList[] = array('directory'=>'', 'name'=>'System Default', 'version'=>'');
+    }
+    $aTmplData['Templates'] = $aTemplatesList;
+// get available menues from active template -----------------------------------
+    $sTpl = WB_PATH.'/templates/'
+          .($aPage['template'] ?: DEFAULT_TEMPLATE)
+          .'/info.php';
+    $aTemplateInfo = getContentFromInfoPhp(
+        WB_PATH.'/templates/'.($aPage['template'] ?: DEFAULT_TEMPLATE).'/info.php'
+    );
+    if (!isset($aTemplateInfo['menu'])) {
+        $aTemplateInfo['menu'] = array(1 => 'Main');
+    }
+    $aTmplData['Menues'] = $aTemplateInfo['menu'];
+// get list of available languages ---------------------------------------------
+    $sql = 'SELECT `directory`, `name`, `version` FROM `'.TABLE_PREFIX.'addons` '
+         . 'WHERE `type` = \'language\' '
+         . 'ORDER BY `name`';
+    if (($oAddons = $database->query($sql))) {
+        while (($aAddon = $oAddon->fetchRow(MYSQLI_ASSOC))) {
+            $aLanguageList[] = $aAddon;
+        }
+    }
+    $aTmplData['Languages'] = $aLanguageList;
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/settings-x.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/settings.php
===================================================================
--- trunk/admin/pages/settings.php	(nonexistent)
+++ trunk/admin/pages/settings.php	(revision 2)
@@ -0,0 +1,592 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_settings');
+// Include the WB functions file
+
+// Get page id
+if(!isset($_GET['page_id']) || !is_numeric($_GET['page_id']))
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+} else {
+    $page_id = intval($_GET['page_id']);
+}
+
+//if ( !function_exists( 'create_access_file' ) ) { require(WB_PATH.'/framework/functions.php'); }
+if ( !function_exists( 'entities_to_7bit' ) ) { require(WB_PATH.'/framework/functions-utf8.php'); }
+/*
+if( (!($page_id = $admin->checkIDKEY('page_id', 0, $_SERVER['REQUEST_METHOD']))) )
+{
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS']);
+    exit();
+}
+*/
+$field_set = $database->field_add(TABLE_PREFIX.'pages', 'page_code', 'INT(11) NOT NULL AFTER `modified_by`');
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.$page_id;
+$results = $database->query($sql);
+$results_array = $results->fetchRow(MYSQLI_ASSOC);
+$old_admin_groups = explode(',', $results_array['admin_groups']);
+$old_admin_users = explode(',', $results_array['admin_users']);
+// Work-out if we should check for existing page_code
+$field_set = $database->field_exists(TABLE_PREFIX.'pages', 'page_code');
+
+$in_old_group = FALSE;
+foreach($admin->get_groups_id() as $cur_gid)
+{
+    if (in_array($cur_gid, $old_admin_groups))
+    {
+        $in_old_group = TRUE;
+    }
+}
+if((!$in_old_group) && !is_numeric(array_search($admin->get_user_id(), $old_admin_users)))
+{
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']);
+}
+// Get page details
+/* $database = new database();  */
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.$page_id;
+$results = $database->query($sql);
+if($database->is_error()) {
+    $admin->print_header();
+    $admin->print_error($database->get_error());
+}
+if($results->numRows() == 0) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+}
+$results_array = $results->fetchRow(MYSQLI_ASSOC);
+$aCurrentPage['seo_title'] = basename($results_array['link']);
+// Get display name of person who last modified the page
+$user=$admin->get_user_details($results_array['modified_by']);
+// Convert the unix ts for modified_when to human a readable form
+if($results_array['modified_when'] != 0)
+{
+    $modified_ts = gmdate(TIME_FORMAT.', '.DATE_FORMAT, $results_array['modified_when']+TIMEZONE);
+} else {
+    $modified_ts = 'Unknown';
+}
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('pages_settings.htt')));
+// $template->debug = true;
+$template->set_file('page', 'pages_settings.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_var('FTAN', $admin->getFTAN());
+$template->set_var(array(
+                'PAGE_ID'              => $results_array['page_id'],
+                // 'PAGE_IDKEY' => $admin->getIDKEY($aCurrentPage['page_id']),
+                'PAGE_IDKEY'           => $results_array['page_id'],
+                'PAGE_TITLE'           => ($results_array['page_title']),
+                'MENU_TITLE'           => ($results_array['menu_title']),
+                'SEO_TITLE'            => ($aCurrentPage['seo_title']=='') ? $results_array['menu_title'] : $aCurrentPage['seo_title'],
+                'DESCRIPTION'          => ($results_array['description']),
+                'KEYWORDS'             => ($results_array['keywords']),
+                'MODIFIED_BY'          => $user['display_name'],
+                'MODIFIED_BY_USERNAME' => $user['username'],
+                'MODIFIED_WHEN'        => $modified_ts,
+                'ADMIN_URL' => ADMIN_URL,
+                'WB_URL' => WB_URL,
+                'THEME_URL' => THEME_URL
+                )
+        );
+$template->set_block('main_block', 'show_section_block', 'show_section');
+// Work-out if we should show the "manage sections" link
+$sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.$page_id.' AND `module`="menu_link"';
+$sections_available = (intval($database->get_one($sql)) != 0);
+if ($sections_available)
+{
+    $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+    $template->parse('show_section', '');
+} elseif(MANAGE_SECTIONS == 'enabled')
+{
+    $template->set_var('TEXT_MANAGE_SECTIONS', $HEADING['MANAGE_SECTIONS']);
+    $template->parse('show_section', 'show_section_block', true);
+} else {
+    $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+    $template->parse('show_section', '');
+}
+// Visibility
+if($results_array['visibility'] == 'public') {
+    $template->set_var('PUBLIC_SELECTED', ' selected="selected"');
+} elseif($results_array['visibility'] == 'private') {
+    $template->set_var('PRIVATE_SELECTED', ' selected="selected"');
+} elseif($results_array['visibility'] == 'registered') {
+    $template->set_var('REGISTERED_SELECTED', ' selected="selected"');
+} elseif($results_array['visibility'] == 'hidden') {
+    $template->set_var('HIDDEN_SELECTED', ' selected="selected"');
+} elseif($results_array['visibility'] == 'none') {
+    $template->set_var('NO_VIS_SELECTED', ' selected="selected"');
+}
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'groups`';
+    $get_groups = $database->query($sql);
+    $template->set_block('main_block', 'group_list_block', 'group_list');
+    // Insert admin group and current group first
+    $admin_group_name = $get_groups->fetchRow(MYSQLI_ASSOC);
+    $template->set_var(array(
+                                    'ID' => 1,
+                                    'TOGGLE' => '',
+                                    'DISABLED' => ' disabled="disabled"',
+                                    'LINK_COLOR' => '000000',
+                                    'CURSOR' => 'default',
+                                    'NAME' => $admin_group_name['name'],
+                                    'CHECKED' => ' checked="checked"'
+                                    )
+                            );
+    $template->parse('group_list', 'group_list_block', true);
+    while($group = $get_groups->fetchRow(MYSQLI_ASSOC)) {
+        // check if the user is a member of this group
+        $flag_disabled = '';
+        $flag_checked =  '';
+        $flag_cursor =   'pointer';
+        $flag_color =    '';
+        if (in_array($group["group_id"], $admin->get_groups_id())) {
+            $flag_disabled = ''; //' disabled';
+            $flag_checked =  ''; //' checked';
+            $flag_cursor =   'default';
+            $flag_color =    '000000';
+        }
+// Group list 1 (admin_groups)
+//    $admin_groups = explode(',', str_replace('_', '', $results_array['admin_groups']));
+        // Check if the group is allowed to edit pages
+//        $system_permissions = explode(',', $group['system_permissions']);
+//        if(is_numeric(array_search('pages_modify', $system_permissions))) {
+        if ($admin->get_permission('pages_modify')) {
+            $template->set_var(array(
+                                            'ID' => $group['group_id'],
+                                            'TOGGLE' => $group['group_id'],
+                                            'DISABLED' => $flag_disabled,
+                                            'LINK_COLOR' => $flag_color,
+                                            'CURSOR' => $flag_cursor,
+                                            'NAME' => $group['name'],
+                                            'CHECKED' => $flag_checked
+                                            )
+                                    );
+//            if(is_numeric(array_search($group['group_id'], $admin_groups))) {
+            if ($admin->is_group_match($group['group_id'], $results_array['admin_groups'])) {
+                $template->set_var('CHECKED', ' checked="checked"');
+            } else {
+                if (!$flag_checked) $template->set_var('CHECKED', '');
+            }
+            $template->parse('group_list', 'group_list_block', true);
+        }
+    }
+// Group list 2 (viewing_groups)
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'groups`';
+    $get_groups = $database->query($sql);
+    $template->set_block('main_block', 'group_list_block2', 'group_list2');
+    // Insert admin group and current group first
+    $admin_group_name = $get_groups->fetchRow(MYSQLI_ASSOC);
+    $template->set_var(array(
+                                    'ID' => 1,
+                                    'TOGGLE' => '',
+                                    'DISABLED' => ' disabled="disabled"',
+                                    'LINK_COLOR' => '000000',
+                                    'CURSOR' => 'default',
+                                    'NAME' => $admin_group_name['name'],
+                                    'CHECKED' => ' checked="checked"'
+                                    )
+                            );
+    $template->parse('group_list2', 'group_list_block2', true);
+    while($group = $get_groups->fetchRow(MYSQLI_ASSOC))
+    {
+        // check if the user is a member of this group
+        $flag_disabled = '';
+        $flag_checked =  '';
+        $flag_cursor =   'pointer';
+        $flag_color =    '';
+        if (in_array($group["group_id"], $admin->get_groups_id()))
+        {
+            $flag_disabled = ''; //' disabled';
+            $flag_checked =  ''; //' checked';
+            $flag_cursor =   'default';
+            $flag_color =    '000000';
+        }
+        $template->set_var(array(
+                                        'ID' => $group['group_id'],
+                                        'TOGGLE' => $group['group_id'],
+                                        'DISABLED' => $flag_disabled,
+                                        'LINK_COLOR' => $flag_color,
+                                        'CURSOR' => $flag_cursor,
+                                        'NAME' => $group['name'],
+                                        'CHECKED' => $flag_checked
+                                        )
+                                );
+//        $viewing_groups = explode(',', str_replace('_', '', $results_array['viewing_groups']));
+//        if(is_numeric(array_search($group['group_id'], $viewing_groups)))
+        if ($admin->is_group_match($group['group_id'], $results_array['viewing_groups']))
+        {
+            $template->set_var('CHECKED', 'checked="checked"');
+        } else {
+            if (!$flag_checked) {$template->set_var('CHECKED', '');}
+        }
+        $template->parse('group_list2', 'group_list_block2', true);
+    }
+// Show private viewers
+if($results_array['visibility'] == 'private' OR $results_array['visibility'] == 'registered')
+{
+    $template->set_var('DISPLAY_VIEWERS', '');
+} else {
+    $template->set_var('DISPLAY_VIEWERS', 'display:none;');
+}
+//-- insert page_code 20090904-->
+$template->set_var('DISPLAY_CODE_PAGE_LIST', ' id="multi_lingual" style="display:none;"');
+// Work-out if page languages feature is enabled
+if (
+    (defined('PAGE_LANGUAGES') && PAGE_LANGUAGES) &&
+      $field_set &&
+      file_exists(WB_PATH.'/modules/mod_multilingual/update_keys.php')
+    ) {
+    // workout field is set but module missing
+    $TEXT['PAGE_CODE'] = empty($TEXT['PAGE_CODE']) ? 'Pagecode' : $TEXT['PAGE_CODE'];
+    $template->set_var( array(
+            'DISPLAY_CODE_PAGE_LIST' => ' id="multi_lingual"',
+            'TEXT_PAGE_CODE' => '<a href="'.WB_URL.'/modules/mod_multilingual/update_keys.php?page_id='.$page_id.'">'.$TEXT['PAGE_CODE'].'</a>'
+        )
+    );
+    // Page_code list
+   /*     $database = new database();  */
+    function page_code_list($parent)
+    {
+        global $admin, $database, $template, $results_array, $pageCode;
+        $default_language = DEFAULT_LANGUAGE;
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `parent` = '.$parent.' AND `language` = "'.$default_language.'" ORDER BY `position` ASC';
+        $get_pages = $database->query($sql);
+        while($page = $get_pages->fetchRow(MYSQLI_ASSOC))
+        {
+            if(($admin->page_is_visible($page)==false) && ($page['visibility'] <> 'none') ) { continue; }
+            $template->set_var('FLAG_CODE_ICON',' none ');
+            if( $page['parent'] == 0 )
+            {
+                $template->set_var('FLAG_CODE_ICON','url('.THEME_URL.'/images/flags/'.strtolower($page['language']).'.png)');
+            }
+            // If the current page cannot be parent, then its children neither
+            $list_next_level = true;
+            // Stop users from adding pages with a level of more than the set page level limit
+            if($page['level']+1 < PAGE_LEVEL_LIMIT)
+            {
+                // Get user perms
+                $admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+                $admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+                $in_group = FALSE;
+                foreach($admin->get_groups_id() as $cur_gid)
+                {
+                    if (in_array($cur_gid, $admin_groups))
+                    {
+                        $in_group = TRUE;
+                    }
+                }
+                if(($in_group) OR is_numeric(array_search($admin->get_user_id(), $admin_users)))
+                {
+                    $can_modify = true;
+                } else {
+                    $can_modify = false;
+                }
+                $title_prefix = '';
+                for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - - &nbsp;'; }
+                // $space = str_repeat('&nbsp;', 3);  $space.'&lt;'..'&gt;'
+                $template->set_var(array(
+                                        'VALUE' => $page['page_code'],
+                                        'PAGE_VALUE' => $title_prefix.$page['menu_title'],
+                                        'PAGE_CODE' => $title_prefix.$page['page_id']
+                                        )
+                                );
+                if($results_array['page_code'] == $page['page_code'])
+                {
+                    $template->set_var('SELECTED', ' selected="selected"');
+                } elseif($can_modify != true)
+                {
+                    $template->set_var('SELECTED', ' disabled="disabled" class="disabled"');
+                } else {
+                    $template->set_var('SELECTED', '');
+                }
+                $template->parse('page_code_list', 'page_code_list_block', true);
+            }
+            if ($list_next_level)
+                page_code_list($page['page_id']);
+        }
+    } // end page_code_list
+    // Insert code_page values from page to modify
+    $template->set_block('main_block', 'page_code_list_block', 'page_code_list');
+
+    if($admin->get_permission('pages_add_l0') == true OR $results_array['level'] == 0)
+    {
+        if($results_array['parent'] == 0) { $selected = ' selected'; } else { $selected = ''; }
+        $aPageCodeList = array(
+                'VALUE' => '',
+                'PAGE_CODE' => $TEXT['NONE'],
+                'PAGE_VALUE' => '',
+                'SELECTED' => $selected
+              );
+        $template->set_var($aPageCodeList);
+        $template->parse('page_code_list', 'page_code_list_block', true);
+    }
+    // get pagecode form this page_id
+       page_code_list(0);
+}
+//-- page code -->
+// Parent page list
+/* $database = new database();  */
+function parent_list($parent)
+{
+    global $admin, $database, $template, $results_array,$field_set;
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `parent` = '.$parent.' ORDER BY `position` ASC';
+    $get_pages = $database->query($sql);
+    while($page = $get_pages->fetchRow(MYSQLI_ASSOC))
+    {
+        if($admin->page_is_visible($page)==false)
+        {
+          continue;
+        }
+        // if parent = 0 set flag_icon
+        $template->set_var('FLAG_ROOT_ICON',' none ');
+        if( $page['parent'] == 0  && $field_set)
+        {
+            $template->set_var('FLAG_ROOT_ICON','url('.THEME_URL.'/images/flags/'.strtolower($page['language']).'.png)');
+        }
+        // If the current page cannot be parent, then its children neither
+        $list_next_level = true;
+        // Stop users from adding pages with a level of more than the set page level limit
+        if( $page['level']+1 < PAGE_LEVEL_LIMIT +1 )
+        {
+            // Get user perms
+            $admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+            $admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+            $in_group = FALSE;
+            foreach($admin->get_groups_id() as $cur_gid)
+            {
+                if (in_array($cur_gid, $admin_groups))
+                {
+                    $in_group = TRUE;
+                }
+            }
+            if(($in_group) OR is_numeric(array_search($admin->get_user_id(), $admin_users)))
+            {
+                $can_modify = true;
+            } else {
+                $can_modify = false;
+            }
+            // Title -'s prefix
+            $title_prefix = '';
+            for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - - &nbsp;'; }
+            $template->set_var(array(
+                                'ID' => $page['page_id'],
+                                'TITLE' => ($title_prefix.$page['menu_title']),
+                                'PAGE-TITLE' => ($title_prefix.$page['page_title']),
+                                'MENU-TITLE' => ($title_prefix.$page['menu_title']),
+                                'FLAG_ICON' => ' none ',
+                                ));
+            if($results_array['parent'] == $page['page_id'])
+            {
+                $template->set_var('SELECTED', ' selected="selected"');
+            } elseif($results_array['page_id'] == $page['page_id'])
+            {
+                $template->set_var('SELECTED', ' disabled="disabled" class="disabled"');
+                $list_next_level=false;
+            } elseif($can_modify != true)
+            {
+                $template->set_var('SELECTED', ' disabled="disabled" class="disabled"');
+            } else {
+                $template->set_var('SELECTED', '');
+            }
+            $template->parse('page_list2', 'page_list_block2', true);
+        }
+        if ($list_next_level)
+        {
+          parent_list($page['page_id']);
+        }
+    }
+}
+$template->set_block('main_block', 'page_list_block2', 'page_list2');
+if($admin->get_permission('pages_add_l0') == true OR $results_array['level'] == 0) {
+    if($results_array['parent'] == 0)
+    {
+        $selected = ' selected="selected"';
+    } else {
+        $selected = '';
+    }
+    $template->set_var(array(
+                        'ID' => '0',
+                        'TITLE' => $TEXT['NONE'],
+                        'SELECTED' => $selected
+                        ) );
+    $template->parse('page_list2', 'page_list_block2', true);
+}
+parent_list(0);
+if($modified_ts == 'Unknown')
+{
+    $template->set_var('DISPLAY_MODIFIED', 'hide');
+} else {
+    $template->set_var('DISPLAY_MODIFIED', '');
+}
+// Templates list
+$template->set_block('main_block', 'template_list_block', 'template_list');
+
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'addons` WHERE `type` = "template" AND `function` = "template" order by `name`';
+if( ($res_templates = $database->query($sql)) )
+{
+    while($rec_template = $res_templates->fetchRow(MYSQLI_ASSOC))
+    {
+        // Check if the user has perms to use this template
+        if($rec_template['directory'] == $results_array['template'] OR $admin->get_permission($rec_template['directory'], 'template') == true)
+        {
+            $template->set_var('VALUE', $rec_template['directory']);
+            $template->set_var('NAME', $rec_template['name']);
+            if($rec_template['directory'] == $results_array['template'])
+            {
+                $template->set_var('SELECTED', ' selected="selected"');
+            } else {
+                $template->set_var('SELECTED', '');
+            }
+            $template->parse('template_list', 'template_list_block', true);
+        }
+    }
+}
+// Menu list
+if(MULTIPLE_MENUS == false)
+{
+    $template->set_var('DISPLAY_MENU_LIST', 'display:none;');
+}
+// Include template info file (if it exists)
+if($results_array['template'] != '')
+{
+    $template_location = WB_PATH.'/templates/'.$results_array['template'].'/info.php';
+} else {
+    $template_location = WB_PATH.'/templates/'.DEFAULT_TEMPLATE.'/info.php';
+}
+if(file_exists($template_location))
+{
+    require($template_location);
+}
+// Check if $menu is set
+if(!isset($menu[1]) OR $menu[1] == '')
+{
+    // Make our own menu list
+    $menu[1] = $TEXT['MAIN'];
+}
+// Add menu options to the list
+$template->set_block('main_block', 'menu_list_block', 'menu_list');
+foreach($menu AS $number => $name)
+{
+    $template->set_var('NAME', $name);
+    $template->set_var('VALUE', $number);
+    if($results_array['menu'] == $number)
+    {
+        $template->set_var('SELECTED', ' selected="selected"');
+    } else {
+        $template->set_var('SELECTED', '');
+    }
+    $template->parse('menu_list', 'menu_list_block', true);
+}
+// Insert language values
+$template->set_block('main_block', 'language_list_block', 'language_list');
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'addons` WHERE `type` = "language" ORDER BY `name`';
+if( ($res_languages = $database->query($sql)) )
+{
+    while($rec_language = $res_languages->fetchRow(MYSQLI_ASSOC))
+    {
+        $l_codes[$rec_language['name']] = $rec_language['directory'];
+        $l_names[$rec_language['name']] = entities_to_7bit($rec_language['name']); // sorting-problem workaround
+    }
+    asort($l_names);
+    foreach($l_names as $l_name=>$v)
+    {
+        $langIcons = (empty($l_codes[$l_name])) ? 'none' : strtolower($l_codes[$l_name]);
+        // Insert code and name
+        $template->set_var(array(
+                                'VALUE' => $l_codes[$l_name],
+                                'NAME' => $l_name,
+                                'FLAG_LANG_ICONS' => 'url('.THEME_URL.'/images/flags/'.$langIcons.'.png)',
+                                ));
+        // Check if it is selected
+        if($results_array['language'] == $l_codes[$l_name])
+        {
+            $template->set_var('SELECTED', ' selected="selected"');
+        } else {
+            $template->set_var('SELECTED', '');
+        }
+        $template->parse('language_list', 'language_list_block', true);
+    }
+}
+// Select disabled if searching is disabled
+if($results_array['searching'] == 0)
+{
+    $template->set_var('SEARCHING_DISABLED', ' selected="selected"');
+}
+// Select what the page target is
+switch ($results_array['target'])
+{
+    case '_top':
+        $template->set_var('TOP_SELECTED', ' selected="selected"');
+        break;
+    case '_self':
+        $template->set_var('SELF_SELECTED', ' selected="selected"');
+        break;
+    case '_blank':
+        $template->set_var('BLANK_SELECTED', ' selected="selected"');
+        break;
+}
+// Insert language text
+$template->set_var(array(
+                'DISPLAY_ADVANCED' => ' disabled="disabled"',
+                'HEADING_MODIFY_PAGE_SETTINGS' => $HEADING['MODIFY_PAGE_SETTINGS'],
+                'TEXT_CURRENT_PAGE' => $TEXT['CURRENT_PAGE'],
+                'TEXT_MODIFY' => $TEXT['MODIFY'],
+                'TEXT_MODIFY_PAGE' => $HEADING['MODIFY_PAGE'],
+                'LAST_MODIFIED' => $MESSAGE['PAGES']['LAST_MODIFIED'],
+                'TEXT_PAGE_TITLE' => $TEXT['PAGE_TITLE'],
+                'TEXT_MENU_TITLE' => $TEXT['MENU_TITLE'],
+                'TEXT_SEO_TITLE' => $TEXT['FILE'].'-'.$TEXT['LINK'],
+                'TEXT_TYPE' => $TEXT['TYPE'],
+                'TEXT_MENU' => $TEXT['MENU'],
+                'TEXT_PARENT' => $TEXT['PARENT'],
+                'TEXT_VISIBILITY' => $TEXT['VISIBILITY'],
+                'TEXT_PUBLIC' => $TEXT['PUBLIC'],
+                'TEXT_PRIVATE' => $TEXT['PRIVATE'],
+                'TEXT_REGISTERED' => $TEXT['REGISTERED'],
+                'TEXT_NONE' => $TEXT['NONE'],
+                'TEXT_HIDDEN' => $TEXT['HIDDEN'],
+                'TEXT_TEMPLATE' => $TEXT['TEMPLATE'],
+                'TEXT_TARGET' => $TEXT['TARGET'],
+                'TEXT_SYSTEM_DEFAULT' => $TEXT['SYSTEM_DEFAULT'],
+                'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+                'TEXT_NEW_WINDOW' => $TEXT['NEW_WINDOW'],
+                'TEXT_SAME_WINDOW' => $TEXT['SAME_WINDOW'],
+                'TEXT_TOP_FRAME' => $TEXT['TOP_FRAME'],
+                'TEXT_ADMINISTRATORS' => $TEXT['ADMINISTRATORS'],
+                'TEXT_ALLOWED_VIEWERS' => $TEXT['ALLOWED_VIEWERS'],
+                'TEXT_DESCRIPTION' => $TEXT['DESCRIPTION'],
+                'TEXT_KEYWORDS' => $TEXT['KEYWORDS'],
+                'TEXT_SEARCHING' => $TEXT['SEARCHING'],
+                'TEXT_LANGUAGE' => $TEXT['LANGUAGE'],
+                'TEXT_ENABLED' => $TEXT['ENABLED'],
+                'TEXT_DISABLED' => $TEXT['DISABLED'],
+                'TEXT_SAVE' => $TEXT['SAVE'],
+                'TEXT_BACK' => $TEXT['BACK'],
+                'TEXT_RESET' => $TEXT['RESET'],
+                'LAST_MODIFIED' => $MESSAGE['PAGES']['LAST_MODIFIED'],
+                'HEADING_MODIFY_PAGE' => $HEADING['MODIFY_PAGE'],
+                'TEXT_PAGE_REORG' => ' Reorgansition'
+            ) );
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/settings.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/settings2.php
===================================================================
--- trunk/admin/pages/settings2.php	(nonexistent)
+++ trunk/admin/pages/settings2.php	(revision 2)
@@ -0,0 +1,381 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* ****************************************************************** */
+// Function to fix page trail of subs
+function fix_page_trail($parent,$root_parent)
+{
+    // Get objects and vars from outside this function
+    global $admin, $template, $database, $TEXT, $MESSAGE;
+    // Get page list from database
+    // $database = new database();
+    $sql = 'SELECT `page_id` FROM `'.TABLE_PREFIX.'pages` '
+         . 'WHERE `parent`='.(int)$parent;
+    // Insert values into main page list
+    if (($get_pages = $database->query($sql))) {
+    // Insert values into main page list
+        while($page = $get_pages->fetchRow(MYSQLI_ASSOC)) {
+            // Fix page trail
+            $sql = 'UPDATE `'.TABLE_PREFIX.'pages` '
+                 . 'SET `page_trail`=\''.get_page_trail($page['page_id']).'\' '
+                 .     ($root_parent != 0 ? ',`root_parent`='.(int)$root_parent.' ' : '')
+                 . 'WHERE `page_id`='.(int)$page['page_id'];
+            $database->query($sql);
+            // Run this query on subs
+            fix_page_trail($page['page_id'],$root_parent);
+        }
+    }
+}
+/* ****************************************************************** */
+// inherit settings to subpages
+// <Subpages should inherit settings.>
+/*
+ * inheritable settings:
+ *   template
+ *   language
+ *   menu
+ *   searching
+ *   visibility
+ *   - admin_groups
+ *   - admin_users
+ *   - viewing_groups
+ *   - viewing_users
+ */
+
+function doInheritSettings($database, $page_id, array $aSettings)
+{
+    // deactivate doInheritSettings
+    if (sizeof($aSettings)==0){return false;}
+    $sqlSet = '';
+    foreach ($aSettings as $sFieldname=>$sValue) {
+        $sqlSet .= '`'.$sFieldname.'`=\''.$database->escapeString($sValue).'\', ';
+    }
+    $sqlSet = rtrim($sqlSet, ' ,');
+    if ($sqlSet) {
+        $aListOfChildren = array();
+        $aMatches = array($page_id);
+        // search all children
+        do {
+            $sql = 'SELECT `page_id` FROM `'.TABLE_PREFIX.'pages` '
+                 . 'WHERE `parent` IN('.implode(',', $aMatches).')';
+            if (($oChildren = $database->query($sql))) {
+                $aMatches = array();
+                while (($aChild = $oChildren->fetchRow(MYSQL_ASSOC))) {
+                    $aMatches[] = $aChild['page_id'];
+                }
+                $aListOfChildren = array_merge($aListOfChildren, $aMatches);
+            }
+        } while (sizeof($aMatches) > 0);
+        $sqlSet = 'UPDATE `'.TABLE_PREFIX.'pages` SET '.$sqlSet.' '
+                . 'WHERE `page_id` IN('.implode(',', $aListOfChildren).')';
+        $database->query($sqlSet);
+    }
+}
+/* ****************************************************************** */
+
+// Create new admin object and print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Pages', 'pages_settings',false);
+// Get page id
+if(!isset($_POST['page_id']) || !is_numeric($_POST['page_id']))
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['PAGES_NOT_FOUND']);
+} else {
+    $page_id = (int)$_POST['page_id'];
+}
+$target_url = ADMIN_URL.'/pages/settings.php?page_id='.$page_id;
+$pagetree_url = ADMIN_URL.'/pages/index.php';
+$bBackLink = isset($_POST['pagetree']);
+/*
+if( (!($page_id = $admin->checkIDKEY('page_id', 0, $_SERVER['REQUEST_METHOD']))) )
+{
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS']);
+}
+*/
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION)).'::';
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $target_url);
+}
+// After FTAN check print the header
+$admin->print_header();
+// Include the WB functions file
+if ( !function_exists( 'create_access_file' ) ) { require(WB_PATH.'/framework/functions.php'); }
+// Get values
+$page_title = $admin->StripCodeFromText($admin->get_post('page_title'));
+$menu_title = $admin->StripCodeFromText($admin->get_post('menu_title'));
+$seo_title = $admin->StripCodeFromText($admin->get_post('seo_title'));
+$page_code = intval($admin->get_post('page_code')) ;
+$description = $admin->StripCodeFromText($admin->get_post('description'));
+$keywords = $admin->StripCodeFromText($admin->get_post('keywords'));
+$parent = intval($admin->get_post('parent')); // fix secunia 2010-91-3
+$visibility = $admin->StripCodeFromText($admin->get_post('visibility'));
+if (!in_array($visibility, array('public', 'private', 'registered', 'hidden', 'none'))) {$visibility = 'public';} // fix secunia 2010-93-3
+$template = preg_replace('/[^a-z0-9_-]/i', "", $admin->get_post('template')); // fix secunia 2010-93-3
+$template = (($template == DEFAULT_TEMPLATE ) ? '' : $template);
+$target = preg_replace("/\W/", "", $admin->get_post('target'));
+$admin_groups = ($admin->get_post('admin_groups'));
+$viewing_groups = ($admin->get_post('viewing_groups'));
+$searching = intval($admin->get_post('searching'));
+$language = $admin->StripCodeFromText(strtoupper($admin->get_post('language')));
+$language = (preg_match('/^[A-Z]{2}$/', $language) ? $language : DEFAULT_LANGUAGE);
+$menu = intval($admin->get_post('menu')); // fix secunia 2010-91-3
+// Validate data
+if($menu_title == '' || substr($menu_title,0,1)=='.'){
+    $admin->print_error($MESSAGE['PAGES_BLANK_MENU_TITLE']);
+}
+if ( $page_title  == '' || substr( $page_title, 0, 1) == '.') { $page_title = $menu_title; }
+if ( $seo_title   == '' || substr( $seo_title, 0, 1)  == '.') { $seo_title  = $menu_title; }
+// fetch old datas
+$sql = 'SELECT `level`,`root_parent`, `parent`,`page_trail`,`link`,`position`,`admin_groups`,`admin_users` FROM `'.TABLE_PREFIX.'pages` '
+     . 'WHERE `page_id`='.$page_id;
+$oPages = $database->query($sql);
+$results_array = $oPages->fetchRow(MYSQLI_ASSOC);
+$old_parent   = $results_array['parent'];
+$old_link     = $results_array['link'];
+$old_position = $results_array['position'];
+$old_admin_groups = explode(',', str_replace('_', '', $results_array['admin_groups']));
+$old_admin_users  = explode(',', str_replace('_', '', $results_array['admin_users']));
+// Work-out if we should check for existing page_code
+$field_set = $database->field_exists(TABLE_PREFIX.'pages', 'page_code');
+$in_old_group = FALSE;
+foreach($admin->get_groups_id() as $cur_gid){
+    if (in_array($cur_gid, $old_admin_groups)) { $in_old_group = TRUE; }
+}
+if ((!$in_old_group) && !is_numeric(array_search($admin->get_user_id(), $old_admin_users))){
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'], $target_url );
+}
+// Setup admin groups
+$admin_groups[] = 1;
+//if(!in_array(1, $admin->get_groups_id())) {
+//    $admin_groups[] = implode(",",$admin->get_groups_id());
+//}
+$admin_groups = preg_replace("/[^\d,]/", "", implode(',', $admin_groups));
+// Setup viewing groups
+$viewing_groups[] = 1;
+//if(!in_array(1, $admin->get_groups_id())) {
+//    $viewing_groups[] = implode(",",$admin->get_groups_id());
+//}
+$viewing_groups = preg_replace("/[^\d,]/", "", implode(',', $viewing_groups));
+// If needed, get new order
+if($parent != $old_parent){
+    // Include ordering class
+if ( !class_exists( 'order', false ) ) { require(WB_PATH.'/framework/class.order.php'); }
+    $order = new order(TABLE_PREFIX.'pages', 'position', 'page_id', 'parent');
+    // Get new order
+    $position = $order->get_new($parent);
+    // Clean new order
+    $order->clean($parent);
+} else {
+    $position = $old_position;
+}
+
+// Work out level and root parent
+$level = '0';
+$root_parent = '0';
+if ($parent!='0'){
+    $level = level_count($parent)+1;
+    $root_parent = root_parent($parent);
+}
+// Work-out what the link should be
+if($parent == '0'){
+    $link = '/'.page_filename( $seo_title);
+//    $link = '/'.page_filename($menu_title);
+    // rename menu titles: index && intro to prevent clashes with intro page feature and WB core file /pages/index.php
+    if($link == '/index' || $link == '/intro')
+    {
+        $filename = WB_PATH.PAGES_DIRECTORY.'/'.page_filename($seo_title).'_'.$page_id .PAGE_EXTENSION;
+        $link .= '_' .$page_id;
+    } else {
+        $filename = WB_PATH.PAGES_DIRECTORY.'/'.page_filename($seo_title).PAGE_EXTENSION;
+    }
+} else {
+    $parent_section = '';
+    $parent_titles = array_reverse(get_parent_titles($parent));
+    foreach($parent_titles as $parent_title) {
+        $parent_section .= page_filename($parent_title).'/';
+    }
+    if( $parent_section == '/' ) { $parent_section = ''; }
+    $link = '/'.$parent_section.page_filename($seo_title);
+    $filename = WB_PATH.PAGES_DIRECTORY.'/'.$parent_section.page_filename($seo_title).PAGE_EXTENSION;
+}
+
+// Check if a page with same page filename exists $oGetSamePage
+$sql = 'SELECT  COUNT(*) FROM `'.TABLE_PREFIX.'pages` '
+     . 'WHERE `link` = "'.$database->escapeString($link).'" '
+     .       'AND `page_id` != '.(int)$page_id;
+if( $database->get_one($sql) > 0 ) {
+    $admin->print_error( $MESSAGE['PAGES_PAGE_EXISTS'] );
+}
+// Update page with new order
+$sql = 'UPDATE `'.TABLE_PREFIX.'pages` '
+     . 'SET `parent`='.(int)$parent.', `position`='.(int)$position.' '
+     . 'WHERE `page_id`='.(int)$page_id;
+// $database = new database();
+$database->query($sql);
+// Get page trail
+$page_trail = get_page_trail($page_id);
+$target_url = ADMIN_URL.'/pages/settings.php?page_id='.$page_id;
+// Update page settings in the pages table
+$sql  = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+      . '`parent` = '.(int)$parent.', '
+      . '`page_title` = \''.$database->escapeString($page_title).'\', '
+      . '`menu_title` = \''.$database->escapeString($menu_title).'\', '
+      . '`menu` = '.(int)$menu.', '
+      . '`level` = '.(int)$level.', '
+      . '`page_trail` = \''.$database->escapeString($page_trail).'\', '
+      . '`root_parent` = '.(int)$root_parent.', '
+      . '`link` = \''.$database->escapeString($link).'\', '
+      . '`template` = \''.$database->escapeString($template).'\', '
+      . '`target` = \''.$database->escapeString($target).'\', '
+      . '`description` = \''.$database->escapeString($description).'\', '
+      . '`keywords` = \''.$database->escapeString($keywords).'\', '
+      . '`position` = '.(int)$position.', '
+      . '`visibility` = \''.$database->escapeString($visibility).'\', '
+      . '`searching` = '.(int)$searching.', '
+      . '`language` = \''.$database->escapeString($language).'\', '
+      . '`admin_groups` = \''.$database->escapeString($admin_groups).'\', '
+      . '`viewing_groups` = \''.$database->escapeString($viewing_groups).'\' '
+      .  (defined('PAGE_LANGUAGES') && PAGE_LANGUAGES && $field_set  ? ', `page_code` = '.(int)$page_code.' ' : ' ')
+      . 'WHERE `page_id` = '.(int)$page_id;
+if(!$database->query($sql)) {
+    if($database->is_error())
+    {
+        $admin->print_error($database->get_error(), $target_url );
+    }
+}
+/* *** inherit settings to subpages ********************************* */
+if (isset($_POST['inherit'])) {
+    // make sure, $aPost is am array
+    $aPost = (is_array($_POST['inherit'])
+              // use the array itself
+              ? $_POST['inherit']
+              // split the string into an array
+              : preg_split("/[\s,;\|]+/", $_POST['inherit'], -1, PREG_SPLIT_NO_EMPTY));
+    // define possible fields to inherit
+    $aInherit = array('template','menu','language','searching','visibility');
+    // define additional fields to 'visibility'
+    $aVisibilities = array('admin_groups','admin_users','viewing_groups','viewing_users');
+    // if 'all' is not selected
+    if (!in_array('all', $aPost)) {
+        // remove all not selected fields
+        $aInherit = array_intersect($aInherit, $aPost);
+    }
+    // if 'visibility' is selected
+    if (in_array('visibility', $aInherit)) {
+        // add the additional fields
+        $aInherit = array_merge($aInherit, $aVisibilities);
+    }
+    // flip array and set all values to ''
+    $aInherit = array_fill_keys($aInherit, '');
+    // iterate all existing fields
+    foreach ($aInherit as $key=>$value) {
+        // fill with real values (i.e.  $aInherit['template'] = $template)
+        $aInherit[$key] = isset(${$key}) ? ${$key} : '';
+    }
+    // update database
+    doInheritSettings($database, $page_id, array());// $aInherit
+}
+/* ****************************************************************** */
+
+// Clean old order if needed
+if($parent != $old_parent)
+{
+    $order->clean($old_parent);
+}
+/* BEGIN page "access file" code */
+// Create a new file in the /pages dir if title changed
+if(!is_writable(WB_PATH.PAGES_DIRECTORY.'/'))
+{
+    $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+} else {
+
+    $old_filename = WB_PATH.PAGES_DIRECTORY.$old_link.PAGE_EXTENSION;
+    // First check if we need to create a new file
+    if(($old_link != $link) || (!file_exists($old_filename)))
+    {
+        // Delete old file
+        $old_filename = WB_PATH.PAGES_DIRECTORY.$old_link.PAGE_EXTENSION;
+        if(file_exists($old_filename))
+        {
+            @unlink($old_filename);
+        }
+        // Create access file
+        create_access_file($filename,$page_id,$level);
+        // Move a directory for this page
+        if(file_exists(WB_PATH.PAGES_DIRECTORY.$old_link.'/') && is_dir(WB_PATH.PAGES_DIRECTORY.$old_link.'/'))
+        {
+            @rename(WB_PATH.PAGES_DIRECTORY.$old_link.'/', WB_PATH.PAGES_DIRECTORY.$link.'/');
+        }
+        // Update any pages that had the old link with the new one
+        $old_link_len = strlen($old_link);
+        $sql = 'SELECT `page_id`,`link`,`level` FROM `'.TABLE_PREFIX.'pages` '
+             . 'WHERE `link` LIKE \'%'.addcslashes($old_link, '%_').'/%\' '
+             . 'ORDER BY `level` ASC';
+        if (($query_subs = $database->query($sql))) {
+            while($sub = $query_subs->fetchRow(MYSQLI_ASSOC))
+            {
+                // Double-check to see if it contains old link
+                if(substr($sub['link'], 0, $old_link_len) == $old_link)
+                {
+                    // Get new link
+                    $replace_this = $old_link;
+                    $old_sub_link_len =strlen($sub['link']);
+                    $new_sub_link = $link.'/'.substr($sub['link'],$old_link_len+1,$old_sub_link_len);
+                    // Work out level
+                    $new_sub_level = level_count($sub['page_id']);
+                    // Update level and link
+                    $sql  = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+                          . '`link` = \''.$database->escapeString($new_sub_link).'\', '
+                          . '`level` = '.(int)$new_sub_level.' '
+                          . 'WHERE `page_id` = '.(int)$sub['page_id'];
+                    $database->query( $sql );
+                    // Re-write the access file for this page
+                    $old_subpage_file = WB_PATH.PAGES_DIRECTORY.$new_sub_link.PAGE_EXTENSION;
+                    if(file_exists($old_subpage_file))
+                    {
+                        @unlink($old_subpage_file);
+                    }
+                    create_access_file(WB_PATH.PAGES_DIRECTORY.$new_sub_link.PAGE_EXTENSION, $sub['page_id'], $new_sub_level);
+                }
+            }
+        }
+    }
+}
+
+// Fix sub-pages page trail
+fix_page_trail($page_id,$root_parent);
+
+/* END page "access file" code */
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error())
+{
+    $admin->print_error($database->get_error(), $target_url );
+} elseif ( $bBackLink ) {
+    $admin->print_success($MESSAGE['PAGES_SAVED_SETTINGS'], $pagetree_url );
+} else {
+    $admin->print_success($MESSAGE['PAGES_SAVED_SETTINGS'], $target_url );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/pages/settings2.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/settings_helper.php
===================================================================
--- trunk/admin/pages/settings_helper.php	(nonexistent)
+++ trunk/admin/pages/settings_helper.php	(revision 2)
@@ -0,0 +1,145 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * Description of settings_helper
+ *
+ * @category     Core
+ * @package      Core package
+ * @subpackage   Name of subpackage if needed
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      GNU General Public License 3.0
+ * @version      0.0.0
+ * @revision     $Revision$
+ * @lastmodified $Date$
+ * @since        File available since 18.05.2016
+ * @deprecated   no / since 0000/00/00
+ * @description  xxx
+ */
+
+class SettingsHelper
+{
+
+/**
+ * get a list of possible allowed parent pages
+ * @param integer $iParent
+ * @param integer $iCurrentPage
+ * @param object $admin
+ * @param object $database
+ * @return array
+ */
+    static public function getParentPagesList($iParent, $iCurrentPage, $admin, $database)
+    {
+        $aRetval = array();
+        $aNeededFields = array('id', 'title', 'language', 'active');
+        $sql = 'SELECT *, `page_id` `id`, `menu_title` `title` '
+             . 'FROM `'.TABLE_PREFIX.'pages` '
+             . 'WHERE `parent`='.$iParent.' AND '
+             .       '`level`<'.(PAGE_LEVEL_LIMIT - 1).', AND '
+             .       '(SELECT FIND_IN_SET('.$iCurrentPage.', `page_trail`))<(`level`+1) '
+             . 'ORDER BY `position` ASC';
+        if (($oPages = $database->query($sql))) {
+            while (($aPage = $oPages->fetchRow(MYSQLI_ASSOC))) {
+                // skip this page and its children if page is not visible for current user
+                if (!$admin->page_is_visible($aPage)) { continue; }
+                // check if current user has admin or owner permissions for this page
+                $aPage['active'] = (bool)(
+                    $admin->ami_group_member($aPage['admin_groups'])
+                    || $admin->is_group_match($admin->get_user_id(), $aPage['admin_users'])
+                    || $aPage['page_owner'] == $admin->get_user_id()
+                );
+                // Title -'s prefix
+                $aPage['title'] = str_repeat('- ', $aPage['level']).$aPage['title'];
+                // if parent = 0 set flag_icon
+                $aPage['language'] = $aPage['parent'] ? '' : $aPage['language'];
+                // remove unneeded fields from record and add record to retval
+                $aRetval[] = array_intersect_key($aPage, $aNeededFields);
+                // check for children
+                $aRetval = array_merge(
+                    $aRetval,
+                    self::getParentPagesList($aPage['id'], $iCurrentPage, $admin, $database)
+                );
+            }
+        }
+        return $aRetval;
+    } // end of method getParentPagesList()
+/**
+ * get a list of possible language reference pages
+ * @param integer $iParent
+ * @param string $sCurrentPageLanguage
+ * @param object $admin
+ * @param object $database
+ * @return array
+ */
+    static public function getPageCodeList($iParent, $sCurrentPageLanguage, $admin, $database)
+    {
+        $aRetval = array();
+        // there is no intlRef to choose if current page is set to DEFAULT_LANGUAGE
+        if (DEFAULT_LANGUAGE != $sCurrentPageLanguage) {
+            $aNeededFields = array('id', 'title', 'language', 'active', 'intlRef');
+            $sql = 'SELECT *, `page_id` `id`, `menu_title` `title`, `page_code` `intlRef` '
+                 . 'FROM `'.TABLE_PREFIX.'pages` '
+                 . 'WHERE `parent`='.$iParent.' AND '
+                 .       '`level`<'.(PAGE_LEVEL_LIMIT - 1).', AND '
+                 .       '`language`=\''.DEFAULT_LANGUAGE.'\' '
+                 . 'ORDER BY `position` ASC';
+            if (($oPages = $database->query($sql))) {
+                while (($aPage = $oPages->fetchRow(MYSQLI_ASSOC))) {
+                    // skip this page and its children if page is not visible for current user
+                    if (!$admin->page_is_visible($aPage)) { continue; }
+                    // check if current user has admin or owner permissions for this page
+                    $aPage['active'] = (bool)(
+                        $admin->ami_group_member($aPage['admin_groups'])
+                        || $admin->is_group_match($admin->get_user_id(), $aPage['admin_users'])
+                        || $aPage['page_owner'] == $admin->get_user_id()
+                    );
+                    // Title -'s prefix
+                    $aPage['title'] = str_repeat('- ', $aPage['level']).$aPage['title'];
+                    // if parent = 0 set flag_icon
+                    $aPage['language'] = $aPage['parent'] ? '' : $aPage['language'];
+                    // remove unneeded fields from record and add record to retval
+                    $aRetval[] = array_intersect_key($aPage, $aNeededFields);
+                    // check for children
+                    $aRetval = array_merge(
+                        $aRetval,
+                        self::getPageCodeList($aPage['id'], $sCurrentPageLanguage, $admin, $database)
+                    );
+                }
+            }
+        }
+        return $aRetval;
+    } // end of method getPageCodeList()
+/**
+ *
+ * @param array $aList
+ * @param string $sSortBy1
+ * @param string $sSortBy2
+ * @return array  the sorted array
+ */
+
+    static function orderByColumn($aList)
+    {
+        $args = func_get_args();
+        array_shift($args);
+
+    }
+
+
+    static function doMultiSort($aList, $sSortBy1, $sSortBy2)
+    {
+        foreach ($aList as $key => $row) {
+            ${$sSortBy1}[$key] = $row[$sSortBy1];
+            ${$sSortBy2}[$key] = $row[$sSortBy2];
+        }
+        $iSortFlags = ((version_compare(PHP_VERSION, '5.4.0', '<'))?SORT_REGULAR:SORT_NATURAL|SORT_FLAG_CASE);
+        array_multisort(${$sSortBy1}, SORT_DESC, ${$sSortBy2}, SORT_ASC, $iSortFlags, $aList);
+        return $aList;
+    } // end of method doMultiSort()
+
+} // end of class SettingsHelper

Property changes on: trunk/admin/pages/settings_helper.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/pages/trash.php
===================================================================
--- trunk/admin/pages/trash.php	(nonexistent)
+++ trunk/admin/pages/trash.php	(revision 2)
@@ -0,0 +1,282 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         pages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+require('../../config.php');
+require_once(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages');
+
+?>
+<script type="text/javascript" language="javascript">
+function toggle_viewers() {
+    if(document.add.visibility.value == 'private') {
+        document.getElementById('private_viewers').style.display = 'block';
+        document.getElementById('registered_viewers').style.display = 'none';
+    } else if(document.add.visibility.value == 'registered') {
+        document.getElementById('private_viewers').style.display = 'none';
+        document.getElementById('registered_viewers').style.display = 'block';
+    } else {
+        document.getElementById('private_viewers').style.display = 'none';
+        document.getElementById('registered_viewers').style.display = 'none';
+    }
+}
+function toggle_visibility(id){
+    if(document.getElementById(id).style.display == "block") {
+        document.getElementById(id).style.display = "none";
+    } else {
+        document.getElementById(id).style.display = "block";
+    }
+}
+var plus = new Image;
+plus.src = "<?php echo THEME_URL; ?>/images/plus_16.png";
+var minus = new Image;
+minus.src = "<?php echo THEME_URL; ?>/images/minus_16.png";
+function toggle_plus_minus(id) {
+    var img_src = document.images['plus_minus_' + id].src;
+    if(img_src == plus.src) {
+        document.images['plus_minus_' + id].src = minus.src;
+    } else {
+        document.images['plus_minus_' + id].src = plus.src;
+    }
+}
+</script>
+
+<?php
+
+function make_list($parent, $editable_pages) {
+    // Get objects and vars from outside this function
+    global $admin, $template, $database, $TEXT, $MESSAGE;
+    ?>
+    <ul id="p<?php echo $parent; ?>" <?php if($parent != 0) { echo 'class="page_list"'; } ?>>
+    <?php    
+    // Get page list from database
+    // $database = new database();
+    $query = "SELECT * FROM ".TABLE_PREFIX."pages WHERE parent = '$parent' AND visibility = 'deleted' ORDER BY position ASC";
+    $get_pages = $database->query($query);
+    
+    // Insert values into main page list
+    if($get_pages->numRows() > 0)    {
+        while($page = $get_pages->fetchRow()) {
+            // Get user perms
+            $admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+            $admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+            $in_old_group = FALSE;
+            foreach($admin->get_groups_id() as $cur_gid){
+                if (in_array($cur_gid, $old_admin_groups)) {
+                $in_old_group = TRUE;
+                }
+            }
+            if((!$in_old_group) OR is_numeric(array_search($admin->get_user_id(), $admin_users))) {
+                if($page['visibility'] == 'deleted') {
+                    $can_modify = true;
+                    $editable_pages = $editable_pages+1;
+                } else {
+                    $can_modify = false;
+                }
+            } else {
+                $can_modify = false;
+            }
+                        
+            // Work out if we should show a plus or not
+            $get_page_subs = $database->query("SELECT page_id,admin_groups,admin_users FROM ".TABLE_PREFIX."pages WHERE parent = '".$page['page_id']."'");
+            if($get_page_subs->numRows() > 0) {
+                $display_plus = true;
+            } else {
+                $display_plus = false;
+            }
+            
+            // Work out how many pages there are for this parent
+            $num_pages = $get_pages->numRows();
+            ?>
+            
+            <li id="p<?php echo $page['parent']; ?>">
+            <table cellpadding="0" cellspacing="0" border="0">
+            <tr>
+                <td width="20" style="padding-left: <?php echo $page['level']*20; ?>px;">
+                    <?php
+                    if($display_plus == true) {
+                    ?>
+                    <a href="javascript: toggle_visibility('p<?php echo $page['page_id']; ?>');" title="<?php echo $TEXT['EXPAND'].'/'.$TEXT['COLLAPSE']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/plus_16.png" onclick="toggle_plus_minus('<?php echo $page['page_id']; ?>');" name="plus_minus_<?php echo $page['page_id']; ?>" border="0" alt="+" />
+                    </a>
+                    <?php
+                    }
+                    ?>
+                </td>
+                <?php if($admin->get_permission('pages_modify') == true AND $can_modify == true AND $page['visibility'] != 'heading') { ?>
+                <td>
+                    <a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>"><?php echo ($page['page_title']); ?></a>
+                </td>
+                <?php } else { ?>
+                <td>
+                    <?php
+                    if($page['visibility'] != 'heading') {
+                        echo ($page['page_title']);
+                    } else {
+                        echo '<b>'.($page['page_title']).'</b>';
+                    }
+                    ?>
+                </td>
+                <?php } ?>
+                <td align="left" width="232">
+                    <font color="#999999"><?php echo $page['menu_title']; ?></font>
+                </td>
+                <td align="right" valign="middle" width="30" class="icon_col">
+                <?php if($page['visibility'] == 'public') { ?>
+                    <img src="<?php echo THEME_URL; ?>/images/visible_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PUBLIC']; ?>" border="0" />
+                <?php } elseif($page['visibility'] == 'private') { ?>
+                    <img src="<?php echo THEME_URL; ?>/images/private_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['PRIVATE']; ?>" border="0" />
+                <?php } elseif($page['visibility'] == 'registered') { ?>
+                    <img src="<?php echo THEME_URL; ?>/images/keys_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['REGISTERED']; ?>" border="0" />
+                <?php } elseif($page['visibility'] == 'none') { ?>
+                    <img src="<?php echo THEME_URL; ?>/images/hidden_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['NONE']; ?>" border="0" />
+                <?php } elseif($page['visibility'] == 'deleted') { ?>
+                    <img src="<?php echo THEME_URL; ?>/images/deleted_16.png" alt="<?php echo $TEXT['VISIBILITY']; ?>: <?php echo $TEXT['DELETED']; ?>" border="0" />
+                <?php } ?>
+                </td>
+                <td width="20">
+                    <?php if($page['visibility'] != 'deleted') { ?>
+                        <?php if($admin->get_permission('pages_settings') == true AND $can_modify == true) { ?>
+                        <a href="<?php echo ADMIN_URL; ?>/pages/settings.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['SETTINGS']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/modify_16.png" border="0" alt="<?php echo $TEXT['SETTINGS']; ?>" />
+                        </a>
+                        <?php } ?>
+                    <?php } else { ?>
+                        <a href="<?php echo ADMIN_URL; ?>/pages/restore.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['RESTORE']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/restore_16.png" border="0" alt="<?php echo $TEXT['RESTORE']; ?>" />
+                        </a>
+                    <?php } ?>
+                </td>
+                <td width="20">
+                <?php if($page['position'] != 1) { ?>
+                    <?php if($page['visibility'] != 'deleted') { ?>
+                        <?php if($admin->get_permission('pages_settings') == true AND $can_modify == true) { ?>
+                        <a href="<?php echo ADMIN_URL; ?>/pages/move_up.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/up_16.png" border="0" alt="^" />
+                        </a>
+                        <?php } ?>
+                    <?php } ?>
+                <?php } ?>
+                </td>
+                <td width="20">
+                <?php if($page['position'] != $num_pages) { ?>
+                    <?php if($page['visibility'] != 'deleted') { ?>
+                        <?php if($admin->get_permission('pages_settings') == true AND $can_modify == true) { ?>
+                        <a href="<?php echo ADMIN_URL; ?>/pages/move_down.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                            <img src="<?php echo THEME_URL; ?>/images/down_16.png" border="0" alt="v" />
+                        </a>
+                        <?php } ?>
+                    <?php } ?>
+                <?php } ?>
+                </td>
+                <td width="20">
+                    <?php if($admin->get_permission('pages_delete') == true AND $can_modify == true) { ?>
+                    <a href="javascript: confirm_link('<?php echo $MESSAGE['PAGES']['DELETE_CONFIRM']; ?>?', '<?php echo ADMIN_URL; ?>/pages/delete.php?page_id=<?php echo $page['page_id']; ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/delete_16.png" border="0" alt="X" />
+                    </a>
+                    <?php } ?>
+                </td>
+            </tr>
+            </table>
+            </li>
+                            
+            <?php
+            // Get subs
+            make_list($page['page_id'], $editable_pages);
+        }
+
+    }
+    ?>
+    </ul>
+    <?php
+    return $editable_pages;
+}
+
+// Generate pages list
+if($admin->get_permission('pages_view') == true) {
+    ?>
+    <table cellpadding="0" cellspacing="0" width="100%" border="0">
+    <tr>
+        <td>
+            <h2><?php echo $HEADING['DELETED_PAGES']; ?></h2>
+        </td>
+        <td align="right">
+                <a href="<?php echo ADMIN_URL; ?>/pages/empty_trash.php">
+                <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="<?php echo $TEXT['PAGE_TRASH']; ?>" border="0" />
+                <?php echo $TEXT['EMPTY_TRASH']; ?></a>
+        </td>
+    </tr>
+    </table>
+    <div class="pages_list">
+    <table cellpadding="1" cellspacing="0" width="720" border="0">
+    <tr>
+        <td width="20">
+            &nbsp;
+        </td>
+        <td>
+            <?php echo $TEXT['PAGE_TITLE']; ?>:
+        </td>
+        <td width="198" align="left">
+            <?php echo $TEXT['MENU_TITLE']; ?>:
+        </td>
+        <td width="80" align="center">
+            <?php echo $TEXT['VISIBILITY']; ?>:
+        </td>
+        <td width="90" align="center">
+            <?php echo $TEXT['ACTIONS']; ?>:
+        </td>        
+    </tr>
+    </table>
+    <?php
+    $editable_pages = make_list(0, 0);
+    ?>
+    </div>
+    <div class="empty_list">
+        <?php echo $TEXT['NONE_FOUND']; ?>
+    </div>
+    <?php
+} else {
+    $editable_pages = 0;
+}
+
+// Figure out if the no pages found message should be shown or not
+if($editable_pages == 0) {
+    ?>
+    <style type="text/css">
+    .pages_list {
+        display: none;
+    }
+    </style>
+    <?php
+} else {
+    ?>
+    <style type="text/css">
+    .empty_list {
+        display: none;
+    }
+    </style>
+    <?php
+}
+
+?>
+<br />< <a href="<?php echo ADMIN_URL; ?>/pages/index.php"><?php echo $MESSAGE['PAGES']['RETURN_TO_PAGES']; ?></a>
+<?php
+
+// Print admin 
+$admin->print_footer();
+
+?>
\ No newline at end of file

Property changes on: trunk/admin/pages/trash.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/preferences/index.php
===================================================================
--- trunk/admin/preferences/index.php	(nonexistent)
+++ trunk/admin/preferences/index.php	(revision 2)
@@ -0,0 +1,157 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         preferences
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent this file from being accessed directly
+//if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+//Workaround if this is first page (WBAdmin in use)
+
+// put all inside a function to prevent global vars
+function build_page( &$admin, &$database )
+{
+    global $HEADING, $TEXT;
+    include_once(WB_PATH.'/framework/functions-utf8.php');
+    // Setup template object, parse vars to it, then parse it
+    // Setup template object, parse vars to it, then parse it
+    // Create new template object
+    $template = new Template(dirname($admin->correct_theme_source('preferences.htt')));
+    $template->set_file( 'page', 'preferences.htt' );
+    $template->set_block( 'page', 'main_block', 'main' );
+// read user-info from table users and assign it to template
+    $sql  = 'SELECT `display_name`, `username`, `email` FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE `user_id` = '.(int)$admin->get_user_id();
+    if( $res_user = $database->query($sql) )
+    {
+        if( $rec_user = $res_user->fetchRow() )
+        {
+            $template->set_var('DISPLAY_NAME', $rec_user['display_name']);
+            $template->set_var('USERNAME',     $rec_user['username']);
+            $template->set_var('EMAIL',        $rec_user['email']);
+            $template->set_var('ADMIN_URL',    ADMIN_URL);
+        }
+    }
+// read available languages from table addons and assign it to the template
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
+    $sql .= 'WHERE `type` = \'language\' ORDER BY `directory`';
+    if( $res_lang = $database->query($sql) )
+    {
+        $template->set_block('main_block', 'language_list_block', 'language_list');
+        while( $rec_lang = $res_lang->fetchRow() )
+        {
+            $langIcons = (empty($rec_lang['directory'])) ? 'none' : strtolower($rec_lang['directory']);
+            $template->set_var('CODE',        $rec_lang['directory']);
+            $template->set_var('NAME',        $rec_lang['name']);
+            $template->set_var('FLAG',        THEME_URL.'/images/flags/'.$langIcons);
+            $template->set_var('SELECTED',    (LANGUAGE == $rec_lang['directory'] ? ' selected="selected"' : '') );
+            $template->parse('language_list', 'language_list_block', true);
+        }
+    }
+// Insert default timezone values
+    $user_time = true;
+    include_once( ADMIN_PATH.'/interface/timezones.php' );
+    $template->set_block('main_block', 'timezone_list_block', 'timezone_list');
+    $iActualTimezone = ((DEFAULT_TIMEZONE <> 0)  ? DEFAULT_TIMEZONE : 0);
+    $iActualTimezone = (($iActualTimezone == $admin->get_timezone())? 'system_default':$admin->get_timezone());
+    $iActualTimezone = (($iActualTimezone!='system_default')?intval($iActualTimezone):$iActualTimezone);
+    foreach( $TIMEZONES AS $hour_offset => $title )
+    {
+        $iTmpOffset = (is_numeric($hour_offset)?$hour_offset*3600:$hour_offset);
+        $template->set_var('VALUE',    $hour_offset);
+        $template->set_var('NAME',     $title);
+        $template->set_var('SELECTED', (($iTmpOffset === $iActualTimezone) ? ' selected="selected"' : ''));
+        $template->parse('timezone_list', 'timezone_list_block', true);
+    }
+// Insert date format list
+    include_once( ADMIN_PATH.'/interface/date_formats.php' );
+    $template->set_block('main_block', 'date_format_list_block', 'date_format_list');
+    foreach( $DATE_FORMATS AS $format => $title )
+    {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        $template->set_var( 'VALUE', ($format != 'system_default' ? $format : 'system_default') );
+        $template->set_var( 'NAME',  $title );
+        if( (DATE_FORMAT == $format && !isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) ||
+            ('system_default' == $format && isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) )
+        {
+            $template->set_var('SELECTED', ' selected="selected"');
+        }else {
+            $template->set_var('SELECTED', '');
+        }
+        $template->parse('date_format_list', 'date_format_list_block', true);
+    }
+// Insert time format list
+    include_once( ADMIN_PATH.'/interface/time_formats.php' );
+    $template->set_block('main_block', 'time_format_list_block', 'time_format_list');
+    foreach( $TIME_FORMATS AS $format => $title )
+    {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        $template->set_var('VALUE', $format != 'system_default' ? $format : 'system_default' );
+        $template->set_var('NAME',  $title);
+        if( (TIME_FORMAT == $format && !isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) ||
+            ('system_default' == $format && isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) )
+        {
+            $template->set_var('SELECTED', ' selected="selected"');
+        } else {
+            $template->set_var('SELECTED', '');
+        }
+        $template->parse('time_format_list', 'time_format_list_block', true);
+    }
+
+// assign systemvars to template
+    $template->set_var(array( 'ADMIN_URL'  => ADMIN_URL,
+                              'WB_URL'     => WB_URL,
+                              'THEME_URL'  => THEME_URL,
+                              'ACTION_URL' => ADMIN_URL.'/preferences/save.php'
+                            )
+                      );
+    $template->set_var('FTAN', $admin->getFTAN());
+    $template->set_var('FORM_NAME', 'preferences_save');
+// assign language vars
+    $template->set_var(array( 'HEADING_MY_SETTINGS'      => $HEADING['MY_SETTINGS'],
+                              'HEADING_MY_EMAIL'         => $HEADING['MY_EMAIL'],
+                              'HEADING_MY_PASSWORD'      => $HEADING['MY_PASSWORD'],
+                              'TEXT_SAVE'                => $TEXT['SAVE'],
+                              'TEXT_RESET'               => $TEXT['RESET'],
+                              'TEXT_DISPLAY_NAME'        => $TEXT['DISPLAY_NAME'],
+                              'TEXT_USERNAME'            => $TEXT['USERNAME'],
+                              'TEXT_EMAIL'               => $TEXT['EMAIL'],
+                              'TEXT_LANGUAGE'            => $TEXT['LANGUAGE'],
+                              'TEXT_TIMEZONE'            => $TEXT['TIMEZONE'],
+                              'TEXT_DATE_FORMAT'         => $TEXT['DATE_FORMAT'],
+                              'TEXT_TIME_FORMAT'         => $TEXT['TIME_FORMAT'],
+                              'TEXT_CURRENT_PASSWORD'    => $TEXT['CURRENT_PASSWORD'],
+                              'TEXT_NEW_PASSWORD'        => $TEXT['NEW_PASSWORD'],
+                              'TEXT_RETYPE_NEW_PASSWORD' => $TEXT['RETYPE_NEW_PASSWORD'],
+                              'TEXT_NEW_PASSWORD'        => $TEXT['NEW_PASSWORD'],
+                              'TEXT_RETYPE_NEW_PASSWORD' => $TEXT['RETYPE_NEW_PASSWORD'],
+                              'TEXT_NEED_CURRENT_PASSWORD' => $TEXT['NEED_CURRENT_PASSWORD'],
+                              'EMPTY_STRING'             => ''
+                            )
+                      );
+// Parse template for preferences form
+    $template->parse('main', 'main_block', false);
+    $output = $template->finish($template->parse('output', 'page'));
+    return $output;
+}
+// test if valid $admin-object already exists (bit complicated about PHP4 Compatibility)
+if( !(isset($admin) && is_object($admin) && (get_class($admin) == 'admin')) )
+{
+    require( '../../config.php' );
+    require_once( WB_PATH.'/framework/class.admin.php' );
+    $admin = new admin('Preferences');
+}
+echo build_page($admin, $database);
+$admin->print_footer();

Property changes on: trunk/admin/preferences/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/preferences/save.php
===================================================================
--- trunk/admin/preferences/save.php	(nonexistent)
+++ trunk/admin/preferences/save.php	(revision 2)
@@ -0,0 +1,193 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         preferences
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+
+// Print admin header
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Preferences','start', false);
+
+function save_preferences( $admin, $database)
+{
+    global $MESSAGE;
+    $err_msg = array();
+    $iMinPassLength = 6;
+    $bPassRequest = false;
+    $bMailHasChanged = false;
+// first check form-tan
+    if(!$admin->checkFTAN()){ $err_msg[] = $MESSAGE['GENERIC_SECURITY_ACCESS']; }
+    $sLanguagesAddonDefaultFile = WB_PATH.'/account/languages/EN.php';
+    if (is_readable($sLanguagesAddonDefaultFile)){include $sLanguagesAddonDefaultFile;}
+    $sLanguagesAddonFile = WB_PATH.'/account/languages/'.LANGUAGE.'.php';
+    if (is_readable($sLanguagesAddonFile)){include $sLanguagesAddonFile;}
+// Get entered values and validate all
+    // remove any dangerouse chars from display_name
+//    $display_name     = $admin->add_slashes(strip_tags(trim($admin->get_post('display_name'))));
+    $display_name = strip_tags( $admin->StripCodeFromText($admin->get_post('display_name')));
+    $display_name     = ( $display_name == '' ? $admin->get_display_name() : $display_name );
+    // check that display_name is unique in whoole system (prevents from User-faking)
+    $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE `user_id` <> '.(int)$admin->get_user_id().' AND `display_name` LIKE "'.$display_name.'"';
+    if( $database->get_one($sql) > 0 ){ $err_msg[] = ( @$MESSAGE['USERS_DISPLAYNAME_TAKEN']?:$MESSAGE['MEDIA_BLANK_NAME'].' ('.$TEXT['DISPLAY_NAME'].')'); }
+// language must be 2 upercase letters only
+    $language         = strtoupper($admin->get_post('language'));
+    $language         = (preg_match('/^[A-Z]{2}$/', $language) ? $language : DEFAULT_LANGUAGE);
+    $user_time = true;
+// timezone must be between -12 and +13  or -20 as system_default
+    $timezone         = $admin->get_post('timezone');
+    $timezone         = (is_numeric($timezone) ? $timezone : DEFAULT_TIMEZONE/3600);
+    $timezone         = (($timezone >= -12 && $timezone <= 13) ? $timezone : DEFAULT_TIMEZONE/3600) * 3600;
+
+// date_format must be a key from /interface/date_formats
+    $date_format      = $admin->get_post('date_format');
+    $date_format_key  = str_replace(' ', '|', $date_format);
+    include( ADMIN_PATH.'/interface/date_formats.php' );
+    $date_format = (array_key_exists($date_format_key, $DATE_FORMATS) ? $date_format : 'system_default');
+    $date_format = ($date_format == 'system_default' ? '' : $date_format);
+    unset($DATE_FORMATS);
+// time_format must be a key from /interface/time_formats
+    $time_format      = $admin->get_post('time_format');
+    $time_format_key  = str_replace(' ', '|', $time_format);
+    $user_time = true;
+    include( ADMIN_PATH.'/interface/time_formats.php' );
+    $time_format = (array_key_exists($time_format_key, $TIME_FORMATS) ? $time_format : 'system_default');
+    $time_format = ($time_format == 'system_default' ? '' : $time_format);
+    unset($TIME_FORMATS);
+
+// email should be validatet by core
+    $email = trim( $admin->get_post('email') == null ? '' : $admin->get_post('email') );
+    if( (!$admin->validate_email($email)) )
+    {
+        $email = '';
+        $err_msg[] = $MESSAGE['USERS_INVALID_EMAIL'];
+    }else {
+        if($email != '') {
+            $sql = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                 . 'WHERE `user_id` = '.(int)$admin->get_user_id().' AND `email` LIKE \''.$email.'\'';
+            $IsOldMail = $database->get_one($sql);
+        // check that email is unique in whoole system
+            $email = $admin->add_slashes($email);
+            $sql = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                 . 'WHERE `user_id` <> '.(int)$admin->get_user_id().' AND `email` LIKE \''.$email.'\'';
+            $checkMail = $database->get_one($sql);
+
+            if( $checkMail == $email ){ $err_msg[] = $MESSAGE['USERS_EMAIL_TAKEN']; }
+            $bMailHasChanged = ($email != $IsOldMail);
+        }
+    }
+// receive password vars and calculate needed action
+    $sCurrentPassword = $admin->get_post('current_password');
+    $sCurrentPassword = (is_null($sCurrentPassword) ? '' : $sCurrentPassword);
+    $sNewPassword = $admin->get_post('new_password_1');
+    $sNewPassword = (is_null($sNewPassword) ? '' : $sNewPassword);
+    $sNewPasswordRetyped = $admin->get_post('new_password_2');
+    $sNewPasswordRetyped= (is_null($sNewPasswordRetyped) ? '' : $sNewPasswordRetyped);
+
+    if($bMailHasChanged == true)
+    {
+        $bPassRequest = $bMailHasChanged;
+    } else {
+        $bPassRequest = ( ( $sCurrentPassword != '') || ($sNewPassword != '') || ($sNewPasswordRetyped != '') ) ? true : false;
+    }
+
+// Check existing password
+    $sql  = 'SELECT `password` ';
+    $sql .= 'FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE `user_id` = '.$admin->get_user_id();
+    if ( $bPassRequest && md5($sCurrentPassword) != $database->get_one($sql)) {
+// access denied
+        $err_msg[] = $MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'];
+    }else {
+// validate new password
+        $sPwHashNew = false;
+        if($sNewPassword != '') {
+            if(strlen($sNewPassword) < $iMinPassLength) {
+                $err_msg[] = $MESSAGE['USERS_PASSWORD_TOO_SHORT'];
+            }else {
+                if($sNewPassword != $sNewPasswordRetyped) {
+                    $err_msg[] = $MESSAGE['USERS_PASSWORD_MISMATCH'];
+                }else {
+                    $pattern = '/[^'.$admin->password_chars.']/';
+                    if (preg_match($pattern, $sNewPassword)) {
+                        $err_msg[] = $MESSAGE['PREFERENCES_INVALID_CHARS'];
+                    }else {
+                        $sPwHashNew = md5($sNewPassword);
+                    }
+                }
+            }
+        }
+// if no validation errors, try to update the database, otherwise return errormessages
+        if(sizeof($err_msg) == 0)
+        {
+            $sql  = 'UPDATE `'.TABLE_PREFIX.'users` ';
+            $sql .= 'SET `display_name`=\''.$database->escapeString($display_name).'\', ';
+            if($sPwHashNew) {
+                $sql .=     '`password`=\''.$database->escapeString($sPwHashNew).'\', ';
+            }
+            if($email != '') {
+                $sql .=     '`email`=\''.$database->escapeString($email).'\', ';
+            }
+            $sql .= '`language`=\''.$database->escapeString($language).'\', '
+                  . '`timezone`=\''.$database->escapeString($timezone).'\', '
+                  . '`date_format`=\''.$database->escapeString($date_format).'\', '
+                  . '`time_format`=\''.$database->escapeString($time_format).'\' '
+                  . 'WHERE `user_id`='.(int)$admin->get_user_id();
+            if( $database->query($sql) )
+            {
+                // update successfull, takeover values into the session
+                $_SESSION['DISPLAY_NAME'] = $display_name;
+                $_SESSION['LANGUAGE'] = $language;
+                $_SESSION['TIMEZONE'] = $timezone;
+                $_SESSION['EMAIL'] = $email;
+                // Update date format
+                if($date_format != '') {
+                    $_SESSION['DATE_FORMAT'] = $date_format;
+                    if(isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) { unset($_SESSION['USE_DEFAULT_DATE_FORMAT']); }
+                } else {
+                    $_SESSION['USE_DEFAULT_DATE_FORMAT'] = true;
+                    if(isset($_SESSION['DATE_FORMAT'])) { unset($_SESSION['DATE_FORMAT']); }
+                }
+                // Update time format
+                if($time_format != '') {
+                    $_SESSION['TIME_FORMAT'] = $time_format;
+                    if(isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) { unset($_SESSION['USE_DEFAULT_TIME_FORMAT']); }
+                } else {
+                    $_SESSION['USE_DEFAULT_TIME_FORMAT'] = true;
+                    if(isset($_SESSION['TIME_FORMAT'])) { unset($_SESSION['TIME_FORMAT']); }
+                }
+            }else {
+                $err_msg[] = 'invalid database UPDATE call in '.__FILE__.'::'.__FUNCTION__.'before line '.__LINE__;
+            }
+        }
+    }
+    return ( (sizeof($err_msg) > 0) ? implode('<br />', $err_msg) : '' );
+}
+$retval = save_preferences($admin, $database);
+if( $retval == '')
+{
+    // print the header
+    $admin->print_header();
+    $admin->print_success($MESSAGE['PREFERENCES_DETAILS_SAVED']);
+    $admin->print_footer();
+}else {
+    // print the header
+    $admin->print_header();
+    $admin->print_error($retval);
+}

Property changes on: trunk/admin/preferences/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/settings/index.php
===================================================================
--- trunk/admin/settings/index.php	(nonexistent)
+++ trunk/admin/settings/index.php	(revision 2)
@@ -0,0 +1,844 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         settings
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+/*---------------------------------------------------------------------------------------------------*/
+$bAdvanced = intval ((@intval($_GET['advanced'])) ?: 0);
+if($bAdvanced) {
+    $admin = new admin('Settings', 'settings_advanced');
+} else {
+    $admin = new admin('Settings', 'settings_basic');
+}
+/*---------------------------------------------------------------------------------------------------*/
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+require_once(WB_PATH.'/framework/functions-utf8.php');
+$cfg = array(
+    'website_signature' => (defined('WEBSITE_SIGNATURE')?WEBSITE_SIGNATURE:'')
+);
+foreach($cfg as $key=>$value) {
+    db_update_key_value('settings', $key, $value);
+}
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+    $template = new Template(dirname($admin->correct_theme_source('settings.htt')), 'remove');
+// $template->debug = true;
+    $template->set_file('page',  'settings.htt');
+    $template->set_block('page', 'main_block', 'main');
+/*---------------------------------------------------------------------------------------------------*/
+    $template->set_block('main_block', 'show_page_level_limit_block', 'show_page_level_limit');
+    $template->set_block('main_block', 'show_checkbox_1_block',       'show_checkbox_1');
+    $template->set_block('main_block', 'show_checkbox_2_block',       'show_checkbox_2');
+    $template->set_block('main_block', 'show_checkbox_3_block',       'show_checkbox_3');
+    $template->set_block('main_block', 'show_redirect_timer_block',   'show_redirect_timer');
+    $template->set_block('main_block', 'show_php_error_level_block',  'show_php_error_level');
+    $template->set_block('main_block', 'show_wysiwyg_block',          'show_wysiwyg');
+    $template->set_block('main_block', 'show_charset_block',          'show_charset');
+    $template->set_block('main_block', 'show_search_block',           'show_search');
+    $template->set_block('main_block', 'show_access_block',           'show_access');
+    $template->set_block('main_block', 'show_chmod_js_block',         'show_chmod_js');
+    $template->set_block('main_block', 'show_setting_js_block',       'show_setting_js');
+/*---------------------------------------------------------------------------------------------------*/
+    if (!$oTrans) {
+        $oTrans = Translate::getInstance();
+    }
+    $oTrans->enableAddon('templates\\'.basename(THEME_PATH));
+    $aLang = $oTrans->getLangArray();
+    $template->set_var($aLang);
+// Query current settings in the db, then loop through them and print them
+$query = "SELECT * FROM `".TABLE_PREFIX."settings`";
+if($results = $database->query($query)) {
+    $aSetting = array();
+    $settings = array();
+    while($aSetting = $results->fetchRow(MYSQLI_ASSOC))
+    {
+        $setting_name  = $aSetting['name'];
+        $setting_value = $aSetting['value'];
+        switch ($setting_name) :
+            case 'wbmailer_smtp_password':
+                break;
+            default :
+                $sFilterApi = WB_PATH.'/modules/output_filter/OutputFilterApi.php';
+                if (is_readable($sFilterApi)) {
+                    require_once($sFilterApi);
+                    $setting_value = OutputFilterApi('ReplaceSysvar', $setting_value);
+                }
+                $setting_value = htmlspecialchars($setting_value);
+                break;
+        endswitch;
+//        $setting_value = ( $setting_name != 'wbmailer_smtp_password' ) ? htmlspecialchars($aSetting['value']) : $aSetting['value'];
+        $settings[$setting_name] = $setting_value;
+        $template->set_var(strtoupper($setting_name),$setting_value);
+    }
+} else {
+
+}
+$SecureTokenLifeTime = $admin->getTokenLifeTime();
+array_walk(
+    $SecureTokenLifeTime,
+    function (&$aItem) {
+        $aItem /= 60;
+    }
+);
+$template->set_var( $SecureTokenLifeTime );
+/*---------------------------------------------------------------------------------------------------*/
+$template->set_var('EDITOR_WEBSITE_HEADER', '');
+$template->set_var('EDITOR_WEBSITE_FOOTER', '');
+$template->set_var('EDITOR_WEBSITE_SIGNATURE', '');
+if (defined('WYSIWYG_EDITOR') && is_readable(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include1.php'))
+{
+    require(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include.php');
+    $template->set_block('main_block', 'show_website_header_block', 'show_website_header');
+    if (defined('WYSIWYG_EDITOR')) {
+        $template->set_block('show_website_header', '');
+        $WebsiteHeader = show_wysiwyg_editor('website_header','content_header', WEBSITE_HEADER,'100%','200', 'WB_Mini', true);
+        $template->set_var('EDITOR_WEBSITE_HEADER', $WebsiteHeader);
+    } else {
+        $template->parse('show_website_header','show_website_header_block',true);
+    }
+    $template->set_block('main_block', 'show_website_footer_block', 'show_website_footer');
+    if (defined('WYSIWYG_EDITOR')) {
+        $template->set_block('show_website_footer', '');
+        $WebsiteFooter = show_wysiwyg_editor('website_footer','content_footer', WEBSITE_FOOTER, '100%','200', 'WB_Mini', true);
+        $template->set_var('EDITOR_WEBSITE_FOOTER', $WebsiteFooter);
+    } else {
+        $template->parse('show_website_footer','show_website_footer_block',true);
+    }
+//
+    $template->set_block('main_block', 'show_website_signature_block', 'show_website_signature');
+    if (defined('WYSIWYG_EDITOR')) {
+        $template->set_block('show_website_signature', '');
+        $WebsiteSignature = show_wysiwyg_editor('website_header','content_header', WEBSITE_SIGNATURE,'100%','200', 'WB_Mini', true);
+        $template->set_var('EDITOR_WEBSITE_SIGNATURE', $WebsiteSignature);
+    } else {
+        $template->parse('show_website_signature','show_website_signature_block',true);
+    }
+}
+/*---------------------------------------------------------------------------------------------------*/
+// Do the same for settings stored in config file as with ones in db
+$database_type = '';
+$is_advanced = (boolean)$bAdvanced;
+// Tell the browser whether or not to show advanced options
+if($is_advanced)
+{
+    $template->set_var('DISPLAY_ADVANCED', '');
+    $template->set_var('ADVANCED_FILE_PERMS_ID', 'file_perms_box');
+    $template->set_var('BASIC_FILE_PERMS_ID', 'hide');
+    $template->set_var('ADVANCED_VALUE', 1);
+    $template->set_var('ADVANCED_BUTTON', '&lt;&lt; '.$TEXT['HIDE_ADVANCED']);
+    $template->set_var('ADVANCED_LINK', 'index.php?advanced=0');
+} else {
+    $template->set_var('DISPLAY_ADVANCED', ' style="display: none;"');
+    $template->set_var('BASIC_FILE_PERMS_ID', 'file_perms_box');
+    $template->set_var('ADVANCED_FILE_PERMS_ID', 'hide');
+    $template->set_var('ADVANCED_VALUE', 0);
+    $template->set_var('ADVANCED_BUTTON', $TEXT['SHOW_ADVANCED'].' &gt;&gt;');
+    $template->set_var('ADVANCED_LINK', 'index.php?advanced=1');
+}
+/*---------------------------------------------------------------------------------------------------*/
+    $query = 'SELECT * FROM `'.TABLE_PREFIX.'search` WHERE `extra` = \'\'';
+    $results = $database->query($query);
+    // Query current settings in the db, then loop through them and print them
+    while($aSearch = $results->fetchRow(MYSQLI_ASSOC))
+    {
+        $search_name = $aSearch['name'];
+        $search_value = htmlspecialchars(($aSearch['value']));
+        switch($search_name) {
+            // Search header
+            case 'header':
+                $template->set_var('SEARCH_HEADER', $search_value);
+            break;
+            // Search results header
+            case 'results_header':
+                $template->set_var('SEARCH_RESULTS_HEADER', $search_value);
+            break;
+            // Search results loop
+            case 'results_loop':
+                $template->set_var('SEARCH_RESULTS_LOOP', $search_value);
+            break;
+            // Search results footer
+            case 'results_footer':
+                $template->set_var('SEARCH_RESULTS_FOOTER', $search_value);
+            break;
+            // Search no results
+            case 'no_results':
+                $template->set_var('SEARCH_NO_RESULTS', $search_value);
+            break;
+            // Search footer
+            case 'footer':
+                $template->set_var('SEARCH_FOOTER', $search_value);
+            break;
+            // Search module-order
+            case 'module_order':
+                $template->set_var('SEARCH_MODULE_ORDER', $search_value);
+            break;
+            // Search max lines of excerpt
+            case 'max_excerpt':
+                $template->set_var('SEARCH_MAX_EXCERPT', $search_value);
+            break;
+            // time-limit
+            case 'time_limit':
+                $template->set_var('SEARCH_TIME_LIMIT', $search_value);
+            break;
+            // Search template
+            case 'template':
+                $search_template = $search_value;
+            break;
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    $template->set_var(array(
+                        'WB_URL' => WB_URL,
+                        'THEME_URL' => THEME_URL,
+                        'ADMIN_URL' => ADMIN_URL,
+                     ));
+    $template->set_var('FTAN', $admin->getFTAN());
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert page level limits
+    $template->set_block('show_page_level_limit_block', 'page_level_limit_list_block', 'page_level_limit_list');
+    $template->set_var('PAGE_LEVEL_LIMIT', $settings['page_level_limit']);
+    // if select list
+    for($i = 1; $i <= 10; $i++)
+    {
+        $template->set_var('NUMBER', $i);
+        $template->set_var('SELECTED', ((PAGE_LEVEL_LIMIT == $i) ? ' selected="selected"' : '') );
+        $template->parse('page_level_limit_list', 'page_level_limit_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert groups into signup list
+    $template->set_block('main_block', 'group_list_block', 'group_list');
+    $sqlGroup = 'SELECT `group_id`, `name` FROM `'.TABLE_PREFIX.'groups` '
+              . 'WHERE `group_id` != 1'
+              . '';
+    if($results = $database->query($sqlGroup))
+    {
+        while($group = $results->fetchRow(MYSQLI_ASSOC))
+        {
+            $template->set_var('ID', $group['group_id']);
+            $template->set_var('NAME', $group['name']);
+            $template->set_var('SELECTED', ((FRONTEND_SIGNUP == $group['group_id']) ? ' selected="selected"' : '') );
+            $template->parse('group_list', 'group_list_block', true);
+        }
+    } else {
+        $template->set_var('ID', 'disabled');
+        $template->set_var('NAME', $MESSAGE['GROUPS']['NO_GROUPS_FOUND']);
+        $template->parse('group_list', 'group_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert default error reporting values
+    $template->set_block('show_php_error_level_block', 'error_reporting_list_block',  'error_reporting_list');
+    require(ADMIN_PATH.'/interface/er_levels.php');
+    foreach($ER_LEVELS AS $value => $title)
+    {
+        $template->set_var('VALUE', $value);
+        $template->set_var('NAME', $title);
+        $template->set_var('SELECTED', ((ER_LEVEL == $value) ? ' selected="selected"' : '') );
+        $template->parse('error_reporting_list', 'error_reporting_list_block', true);
+    }
+/*-------------------------------------------------------------------------------------*/
+    // Insert WYSIWYG modules
+    $template->set_block('show_wysiwyg_block', 'wysiwyg_list_block', 'wysiwyg_list');
+    $file='none';
+    $module_name=$TEXT['NONE'];
+    $template->set_var('FILE', $file);
+    $template->set_var('NAME', $module_name);
+    $template->set_var('SELECTED', ((!defined('WYSIWYG_EDITOR') || $file == WYSIWYG_EDITOR) ? ' selected="selected"' : '') );
+    $template->parse('wysiwyg_list', 'wysiwyg_list_block', true);
+    $sqlEditor  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type` = \'module\' '
+          .   'AND `function` = \'wysiwyg\' '
+          . 'ORDER BY `name`';
+    if($result = $database->query($sqlEditor))
+    {
+        while($aWysiwyg = $result->fetchRow(MYSQLI_ASSOC))
+        {
+            $template->set_var('FILE', $aWysiwyg['directory']);
+            $template->set_var('NAME', $aWysiwyg['name']);
+            $template->set_var('SELECTED', ((!defined('WYSIWYG_EDITOR') || $aWysiwyg['directory'] == WYSIWYG_EDITOR) ? ' selected="selected"' : '') );
+            $template->parse('wysiwyg_list', 'wysiwyg_list_block', true);
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert language values
+    $template->set_block('main_block', 'language_list_block', 'language_list');
+    $sqlLang  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+              . 'WHERE `type` = \'language\' '
+              . 'ORDER BY `directory`';
+    if($result = $database->query($sqlLang))
+    {
+        while($aLang = $result->fetchRow(MYSQLI_ASSOC)) {
+            $langIcons = (empty($aLang['directory']) ? 'none' : strtolower($aLang['directory']));
+            $template->set_var('CODE',        $aLang['directory']);
+            $template->set_var('NAME',        $aLang['name']);
+            $template->set_var('FLAG',        THEME_URL.'/images/flags/'.$langIcons);
+            $template->set_var('SELECTED',    (DEFAULT_LANGUAGE == $aLang['directory'] ? ' selected="selected"' : '') );
+            $template->parse('language_list', 'language_list_block', true);
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert default timezone values
+    $template->set_block('main_block', 'timezone_list_block', 'timezone_list');
+    require(ADMIN_PATH.'/interface/timezones.php');
+    foreach($TIMEZONES AS $hour_offset => $title)
+    {
+        // Make sure we dont list "System Default" as we are setting this value!
+        if($hour_offset != '-20') {
+            $template->set_var('VALUE', $hour_offset);
+            $template->set_var('NAME', $title);
+            $template->set_var('SELECTED', ( (DEFAULT_TIMEZONE == $hour_offset*60*60)?' selected="selected"':'' ) );
+            $template->parse('timezone_list', 'timezone_list_block', true);
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert default charset values
+    $template->set_block('show_charset_block', 'charset_list_block', 'charset_list');
+    require(ADMIN_PATH.'/interface/charsets.php');
+    foreach($CHARSETS AS $code => $title) {
+        $template->set_var('VALUE', $code);
+        $template->set_var('NAME', $title);
+        $template->set_var('SELECTED', ( (DEFAULT_CHARSET == $code)?' selected="selected"':'' ) );
+        $template->parse('charset_list', 'charset_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert date format list
+    $template->set_block('main_block', 'date_format_list_block', 'date_format_list');
+    require(ADMIN_PATH.'/interface/date_formats.php');
+    foreach($DATE_FORMATS AS $format => $title) {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        if($format != 'system_default') {
+            $template->set_var('VALUE', $format);
+        } else {
+            $template->set_var('VALUE', '');
+        }
+        $template->set_var('NAME', $title);
+        $template->set_var('SELECTED', ( (DEFAULT_DATE_FORMAT == $format)?' selected="selected"':'' ) );
+        $template->parse('date_format_list', 'date_format_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert time format list
+    $template->set_block('main_block', 'time_format_list_block', 'time_format_list');
+    require(ADMIN_PATH.'/interface/time_formats.php');
+    foreach($TIME_FORMATS AS $format => $title) {
+        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
+        if($format != 'system_default') {
+            $template->set_var('VALUE', $format);
+        } else {
+            $template->set_var('VALUE', '');
+        }
+        $template->set_var('NAME', $title);
+        $template->set_var('SELECTED', ( (DEFAULT_TIME_FORMAT == $format)?' selected="selected"':'' ) );
+        $template->parse('time_format_list', 'time_format_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert templates
+    $template->set_block('main_block', 'template_list_block', 'template_list');
+    $sqlTheme = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+              . 'WHERE `type` = \'template\' '
+              .   'AND `function` != \'theme\' '
+              . 'ORDER BY `name`';
+    if($result = $database->query($sqlTheme)) {
+//    $result = $database->query("SELECT * FROM `".TABLE_PREFIX."addons` WHERE `type` = 'template' AND `function` != 'theme' ORDER BY `name`");
+//    if($result->numRows() > 0) {
+        while($addon = $result->fetchRow( MYSQLI_ASSOC )) {
+            $template->set_var('FILE', $addon['directory']);
+            $template->set_var('NAME', $addon['name']);
+            $template->set_var('SELECTED', (($addon['directory'] == DEFAULT_TEMPLATE)?' selected="selected"':'') );
+            $template->parse('template_list', 'template_list_block', true);
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert backend theme
+    $template->set_block('main_block', 'theme_list_block', 'theme_list');
+    $sqlTheme = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+              . 'WHERE `type` = \'template\' '
+              .   'AND `function` = \'theme\' '
+              . 'ORDER BY `name`';
+    if($result = $database->query($sqlTheme)) {
+        while($addon = $result->fetchRow( MYSQLI_ASSOC )) {
+            $template->set_var('FILE', $addon['directory']);
+            $template->set_var('NAME', $addon['name']);
+            $template->set_var('SELECTED', (($addon['directory'] == DEFAULT_THEME)?' selected="selected"':'') );
+            $template->parse('theme_list', 'theme_list_block', true);
+        }
+    }
+/*---------------------------------------------------------------------------------------------------*/
+// Insert templates for search settings
+    $template->set_block('main_block', 'search_template_list_block', 'search_template_list');
+    $search_template = ( ($search_template == DEFAULT_TEMPLATE) || ($search_template == '') ) ? '' : $search_template;
+    $selected = ( ($search_template != DEFAULT_TEMPLATE) ) ?  ' selected="selected"' : '';
+    $template->set_var(array(
+            'FILE' => '',
+            'NAME' => $TEXT['SYSTEM_DEFAULT'],
+            'SELECTED' => $selected
+        ));
+    $template->parse('search_template_list', 'search_template_list_block', true);
+    $sqlSearch = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+              . ' WHERE `type` = \'template\' '
+              .    'AND `function` =\'template\' '
+              . 'ORDER BY `name`';
+    if ($result = $database->query($sqlSearch))
+    {
+        while($addon = $result->fetchRow(MYSQLI_ASSOC))
+        {
+            $template->set_var('FILE', $addon['directory']);
+            $template->set_var('NAME', $addon['name']);
+            $template->set_var('SELECTED', (($addon['directory'] == $search_template) ? ' selected="selected"' :  '') );
+            $template->parse('search_template_list', 'search_template_list_block', true);
+        }
+    }
+/*--------------------------------------------------------------------------------------------------------*/
+    // Insert permissions values
+    if($admin->get_permission('settings_advanced') != true)
+    {
+        $template->set_var('DISPLAY_ADVANCED_BUTTON', 'hide');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if multiple menus feature is enabled
+    if(defined('MULTIPLE_MENUS') && MULTIPLE_MENUS == true)
+    {
+        $template->set_var('MULTIPLE_MENUS_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('MULTIPLE_MENUS_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if page languages feature is enabled
+    if(defined('PAGE_LANGUAGES') && PAGE_LANGUAGES == true)
+    {
+            $template->set_var('PAGE_LANGUAGES_ENABLED', ' checked="checked"');
+    } else {
+            $template->set_var('PAGE_LANGUAGES_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if warn_page_leave feature is enabled
+    if (defined('WARN_PAGE_LEAVE') && WARN_PAGE_LEAVE == true)
+    {
+        $template->set_var('WARN_PAGE_LEAVE_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('WARN_PAGE_LEAVE_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if smart login feature is enabled
+    if(defined('SMART_LOGIN') && SMART_LOGIN == true)
+    {
+        $template->set_var('SMART_LOGIN_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('SMART_LOGIN_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    /* Make's sure GD library is installed */
+    if(extension_loaded('gd') && function_exists('imageCreateFromJpeg'))
+    {
+        $template->set_var('GD_EXTENSION_ENABLED', '');
+    } else {
+        $template->set_var('GD_EXTENSION_ENABLED', ' style="display: none;"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if section blocks feature is enabled
+    if(defined('SECTION_BLOCKS') && SECTION_BLOCKS == true)
+    {
+        $template->set_var('SECTION_BLOCKS_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('SECTION_BLOCKS_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if homepage redirection feature is enabled
+    if(defined('HOMEPAGE_REDIRECTION') && HOMEPAGE_REDIRECTION == true)
+    {
+        $template->set_var('HOMEPAGE_REDIRECTION_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('HOMEPAGE_REDIRECTION_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if debug mode feature is enabled
+    if(defined('DEBUG') && DEBUG == true)
+    {
+        $template->set_var('DEBUG_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('DEBUG_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if token_fingerprint feature is enabled
+    if(defined('SEC_TOKEN_FINGERPRINT') && SEC_TOKEN_FINGERPRINT == true)
+    {
+        $template->set_var('FINGERPRINT_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('FINGERPRINT_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out which server os should be checked   {DISPLAY_CHMOD}
+    if(OPERATING_SYSTEM == 'linux')
+    {
+        $template->set_var('LINUX_SELECTED', ' checked="checked"');
+        $template->set_var('DISPLAY_CHMOD', ' style="display: block;"');
+    } elseif(OPERATING_SYSTEM == 'windows') {
+        $template->set_var('WINDOWS_SELECTED', ' checked="checked"');
+        $template->set_var('DISPLAY_CHMOD', ' style="display: none;"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if manage sections feature is enabled
+    if(MANAGE_SECTIONS)
+    {
+        $template->set_var('MANAGE_SECTIONS_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('MANAGE_SECTIONS_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out which wbmailer routine should be checked
+    $template->set_var(array(
+                'TEXT_WBMAILER_DEFAULT_SETTINGS_NOTICE' => $TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'],
+                'TEXT_WBMAILER_DEFAULT_SENDER_MAIL' => $TEXT['WBMAILER_DEFAULT_SENDER_MAIL'],
+                'TEXT_WBMAILER_DEFAULT_SENDER_NAME' => $TEXT['WBMAILER_DEFAULT_SENDER_NAME'],
+                'TEXT_WBMAILER_NOTICE' => $TEXT['WBMAILER_NOTICE'],
+                'TEXT_WBMAILER_FUNCTION' => $TEXT['WBMAILER_FUNCTION'],
+                'TEXT_WBMAILER_SMTP_HOST' => $TEXT['WBMAILER_SMTP_HOST'],
+                'TEXT_WBMAILER_PHP' => $TEXT['WBMAILER_PHP'],
+                'TEXT_WBMAILER_SMTP' => $TEXT['WBMAILER_SMTP'],
+                'TEXT_WBMAILER_SMTP_AUTH' => $TEXT['WBMAILER_SMTP_AUTH'],
+                'TEXT_WBMAILER_SMTP_AUTH_NOTICE' => $TEXT['REQUIRED'].' '.$TEXT['WBMAILER_SMTP_AUTH'],
+                'TEXT_WBMAILER_SMTP_USERNAME' => $TEXT['WBMAILER_SMTP_USERNAME'],
+                'TEXT_WBMAILER_SMTP_PASSWORD' => $TEXT['WBMAILER_SMTP_PASSWORD'],
+                'SMTP_AUTH_SELECTED' => ' checked="checked"'
+                ));
+    if(WBMAILER_ROUTINE == 'phpmail')
+    {
+        $template->set_var('PHPMAIL_SELECTED', ' checked="checked"');
+        $template->set_var('SMTP_VISIBILITY', ' style="display: none;"');
+        $template->set_var('SMTP_VISIBILITY_AUTH', '');
+        // $template->set_var('SMTP_AUTH_SELECTED', '');
+    } elseif(WBMAILER_ROUTINE == 'smtp')
+    {
+        $template->set_var('SMTPMAIL_SELECTED', ' checked="checked"');
+        $template->set_var('SMTP_VISIBILITY', '');
+        $template->set_var('SMTP_VISIBILITY_AUTH', '');
+    }
+//$template->set_var('SMTP_AUTH_SELECTED',( (WBMAILER_SMTP_AUTH === true) ?' checked="checked"':'') );
+    $template->set_block('show_access_block', 'smtp_port_list_block', 'smtp_port_list');
+    $aSmtpPorts = array( '25', '465', '587', '2525');
+    foreach($aSmtpPorts as $sPort)
+    {
+        $template->set_var('VALUE', $sPort);
+        $template->set_var('PNAME', $sPort);
+        $template->set_var('SELECTED', ((WBMAILER_SMTP_PORT == $sPort) ? ' selected="selected"' : '') );
+        $template->parse('smtp_port_list', 'smtp_port_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    $template->set_block('show_access_block', 'smtp_secure_list_block', 'smtp_secure_list');
+    $aSmtpSecure = array( 'TLS', 'SSL' );
+    foreach($aSmtpSecure as $sSecure)
+    {
+        $template->set_var('VALUE', $sSecure);
+        $template->set_var('SNAME', $sSecure);
+        $template->set_var('SELECTED', ((WBMAILER_SMTP_SECURE == $sSecure) ? ' selected="selected"' : '') );
+        $template->parse('smtp_secure_list', 'smtp_secure_list_block', true);
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if intro feature is enabled
+    if(INTRO_PAGE)
+    {
+        $template->set_var('INTRO_PAGE_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('INTRO_PAGE_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if frontend login feature is enabled
+    if(FRONTEND_LOGIN)
+    {
+        $template->set_var('PRIVATE_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('PRIVATE_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if page trash feature is disabled, in-line, or separate
+    if(PAGE_TRASH == 'disabled')
+    {
+        $template->set_var('PAGE_TRASH_DISABLED', ' checked="checked"');
+        $template->set_var('DISPLAY_PAGE_TRASH_SEPARATE', 'display: none;');
+    } elseif(PAGE_TRASH == 'inline')
+    {
+        $template->set_var('PAGE_TRASH_INLINE', ' checked="checked"');
+        $template->set_var('DISPLAY_PAGE_TRASH_SEPARATE', 'display: none;');
+    } elseif(PAGE_TRASH == 'separate')
+    {
+        $template->set_var('PAGE_TRASH_SEPARATE', ' checked="checked"');
+        $template->set_var('DISPLAY_PAGE_TRASH_SEPARATE', 'display: inline;');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if media home folde feature is enabled
+    if(HOME_FOLDERS)
+    {
+        $template->set_var('HOME_FOLDERS_ENABLED', ' checked="checked"');
+    } else {
+        $template->set_var('HOME_FOLDERS_DISABLED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert search select
+    if(SEARCH == 'private')
+    {
+        $template->set_var('PRIVATE_SEARCH', ' selected="selected"');
+    } elseif(SEARCH == 'registered') {
+        $template->set_var('REGISTERED_SEARCH', ' selected="selected"');
+    } elseif(SEARCH == 'none') {
+        $template->set_var('NONE_SEARCH', ' selected="selected"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out if 777 permissions are set
+    if(STRING_FILE_MODE == '0777' AND STRING_DIR_MODE == '0777')
+    {
+        $template->set_var('WORLD_WRITEABLE_SELECTED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out which file mode boxes are checked
+    if(extract_permission(STRING_FILE_MODE, 'u', 'r'))
+    {
+        $template->set_var('FILE_U_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'u', 'w'))
+    {
+        $template->set_var('FILE_U_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'u', 'e'))
+    {
+        $template->set_var('FILE_U_E_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'g', 'r'))
+    {
+        $template->set_var('FILE_G_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'g', 'w'))
+    {
+        $template->set_var('FILE_G_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'g', 'e'))
+    {
+        $template->set_var('FILE_G_E_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'o', 'r'))
+    {
+        $template->set_var('FILE_O_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'o', 'w'))
+    {
+        $template->set_var('FILE_O_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_FILE_MODE, 'o', 'e'))
+    {
+        $template->set_var('FILE_O_E_CHECKED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Work-out which dir mode boxes are checked
+    if(extract_permission(STRING_DIR_MODE, 'u', 'r'))
+    {
+        $template->set_var('DIR_U_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'u', 'w'))
+    {
+        $template->set_var('DIR_U_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'u', 'e'))
+    {
+        $template->set_var('DIR_U_E_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'g', 'r'))
+    {
+        $template->set_var('DIR_G_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'g', 'w'))
+    {
+        $template->set_var('DIR_G_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'g', 'e'))
+    {
+        $template->set_var('DIR_G_E_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'o', 'r'))
+    {
+        $template->set_var('DIR_O_R_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'o', 'w'))
+    {
+        $template->set_var('DIR_O_W_CHECKED', ' checked="checked"');
+    }
+    if(extract_permission(STRING_DIR_MODE, 'o', 'e'))
+    {
+        $template->set_var('DIR_O_E_CHECKED', ' checked="checked"');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    $template->set_var(array(
+                        'PAGES_DIRECTORY' => PAGES_DIRECTORY,
+                        'MEDIA_DIRECTORY' => MEDIA_DIRECTORY,
+                        'PAGE_EXTENSION' => PAGE_EXTENSION,
+                        'PAGE_SPACER' => PAGE_SPACER,
+                        'TABLE_PREFIX' => TABLE_PREFIX
+                     ));
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert Server Email value into template
+    $template->set_var('SERVER_EMAIL', SERVER_EMAIL);
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert language headings
+    $template->set_var(array(
+                    'HEADING_GENERAL_SETTINGS' => $HEADING['GENERAL_SETTINGS'],
+                    'HEADING_DEFAULT_SETTINGS' => $HEADING['DEFAULT_SETTINGS'],
+                    'HEADING_SEARCH_SETTINGS' => $HEADING['SEARCH_SETTINGS'],
+                    'HEADING_SERVER_SETTINGS' => $HEADING['SERVER_SETTINGS'],
+                    'HEADING_WBMAILER_SETTINGS' => $HEADING['WBMAILER_SETTINGS'],
+                    'HEADING_ADMINISTRATION_TOOLS' => $HEADING['ADMINISTRATION_TOOLS']
+                    )
+            );
+/*---------------------------------------------------------------------------------------------------*/
+    $template->set_block('show_access_block', 'input_pages_directory_block', 'input_pages_directory');
+    $template->set_block('show_access_block', 'show_pages_directory_block',  'show_pages_directory');
+    $sql = 'SELECT COUNT(`page_id`) `numRows` FROM `'.TABLE_PREFIX.'pages` ';
+    if (!$database->get_one($sql) ) {
+        $template->parse('input_pages_directory', 'input_pages_directory_block', true);
+        $template->set_block('show_pages_directory', '');
+    } else {
+        $template->parse('show_pages_directory', 'show_pages_directory_block', true);
+        $template->set_block('input_pages_directory', '');
+    }
+/*---------------------------------------------------------------------------------------------------*/
+    // Insert language text and messages
+    $template->set_var(array(
+                    'TEXT_WEBSITE_TITLE' => $TEXT['WEBSITE_TITLE'],
+                    'TEXT_WEBSITE_DESCRIPTION' => $TEXT['WEBSITE_DESCRIPTION'],
+                    'TEXT_WEBSITE_KEYWORDS' => $TEXT['WEBSITE_KEYWORDS'],
+                    'TEXT_WEBSITE_HEADER' => $TEXT['WEBSITE_HEADER'],
+                    'TEXT_WEBSITE_FOOTER' => $TEXT['WEBSITE_FOOTER'],
+                    'TEXT_WEBSITE_SIGNATURE' => 'Signature',
+                    'TEXT_HEADER' => $TEXT['HEADER'],
+                    'TEXT_FOOTER' => $TEXT['FOOTER'],
+                    'TEXT_VISIBILITY' => $TEXT['VISIBILITY'],
+                    'TEXT_RESULTS_HEADER' => $TEXT['RESULTS_HEADER'],
+                    'TEXT_RESULTS_LOOP' => $TEXT['RESULTS_LOOP'],
+                    'TEXT_RESULTS_FOOTER' => $TEXT['RESULTS_FOOTER'],
+                    'TEXT_NO_RESULTS' => $TEXT['NO_RESULTS'],
+                    'TEXT_TEXT' => $TEXT['TEXT'],
+                    'TEXT_DEFAULT' => $TEXT['DEFAULT'],
+                    'TEXT_LANGUAGE' => $TEXT['LANGUAGE'],
+                    'TEXT_TIMEZONE' => $TEXT['TIMEZONE'],
+                    'TEXT_CHARSET' => $TEXT['CHARSET'],
+                    'TEXT_DATE_FORMAT' => $TEXT['DATE_FORMAT'],
+                    'TEXT_TIME_FORMAT' => $TEXT['TIME_FORMAT'],
+                    'TEXT_TEMPLATE' => $TEXT['TEMPLATE'],
+                    'TEXT_THEME' => $TEXT['THEME'],
+                    'TEXT_WYSIWYG_EDITOR' => $TEXT['WYSIWYG_EDITOR'],
+                    'TEXT_PAGE_LEVEL_LIMIT' => $TEXT['PAGE_LEVEL_LIMIT'],
+                    'TEXT_INTRO_PAGE' => $TEXT['INTRO_PAGE'],
+                    'TEXT_FRONTEND' => $TEXT['FRONTEND'],
+                    'TEXT_LOGIN' => $TEXT['LOGIN'],
+                    'TEXT_REDIRECT_AFTER' => $TEXT['REDIRECT_AFTER'],
+                    'TEXT_SIGNUP' => $TEXT['SIGNUP'],
+                    'TEXT_PHP_ERROR_LEVEL' => $TEXT['PHP_ERROR_LEVEL'],
+                    'TEXT_PAGES_DIRECTORY' => $TEXT['PAGES_DIRECTORY'],
+                    'TEXT_MEDIA_DIRECTORY' => $TEXT['MEDIA_DIRECTORY'],
+                    'TEXT_PAGE_EXTENSION' => $TEXT['PAGE_EXTENSION'],
+                    'TEXT_PAGE_SPACER' => $TEXT['PAGE_SPACER'],
+                    'TEXT_RENAME_FILES_ON_UPLOAD' => $TEXT['RENAME_FILES_ON_UPLOAD'],
+                    'TEXT_APP_NAME' => $TEXT['APP_NAME'],
+                    'TEXT_SESSION_IDENTIFIER' => $TEXT['SESSION_IDENTIFIER'],
+                    'TEXT_SEC_ANCHOR' => $TEXT['SEC_ANCHOR'],
+                    'TEXT_SERVER_OPERATING_SYSTEM' => $TEXT['SERVER_OPERATING_SYSTEM'],
+                    'TEXT_LINUX_UNIX_BASED' => $TEXT['LINUX_UNIX_BASED'],
+                    'TEXT_WINDOWS' => $TEXT['WINDOWS'],
+                    'TEXT_ADMIN' => $TEXT['ADMIN'],
+                    'TEXT_TYPE' => $TEXT['TYPE'],
+                    'TEXT_DATABASE' => $TEXT['DATABASE'],
+                    'TEXT_HOST' => $TEXT['HOST'],
+                    'TEXT_USERNAME' => $TEXT['USERNAME'],
+                    'TEXT_PASSWORD' => $TEXT['PASSWORD'],
+                    'TEXT_NAME' => $TEXT['NAME'],
+                    'TEXT_TABLE_PREFIX' => $TEXT['TABLE_PREFIX'],
+                    'TEXT_SAVE' => $TEXT['SAVE'],
+                    'TEXT_RESET' => $TEXT['RESET'],
+                    'TEXT_CHANGES' => $TEXT['CHANGES'],
+                    'TEXT_ENABLED' => $TEXT['ENABLED'],
+                    'TEXT_DISABLED' => $TEXT['DISABLED'],
+                    'TEXT_MANAGE_SECTIONS' => $HEADING['MANAGE_SECTIONS'],
+                    'TEXT_MANAGE' => $TEXT['MANAGE'],
+                    'TEXT_SEARCH' => $TEXT['SEARCH'],
+                    'TEXT_PUBLIC' => $TEXT['PUBLIC'],
+                    'TEXT_PRIVATE' => $TEXT['PRIVATE'],
+                    'TEXT_REGISTERED' => $TEXT['REGISTERED'],
+                    'TEXT_NONE' => $TEXT['NONE'],
+                    'TEXT_FILES' => strtoupper(substr($TEXT['FILES'], 0, 1)).substr($TEXT['FILES'], 1),
+                    'TEXT_DIRECTORIES' => $TEXT['DIRECTORIES'],
+                    'TEXT_FILESYSTEM_PERMISSIONS' => $TEXT['FILESYSTEM_PERMISSIONS'],
+                    'TEXT_USER' => $TEXT['USER'],
+                    'TEXT_GROUP' => $TEXT['GROUP'],
+                    'TEXT_OTHERS' => $TEXT['OTHERS'],
+                    'TEXT_READ' => $TEXT['READ'],
+                    'TEXT_WRITE' => $TEXT['WRITE'],
+                    'TEXT_EXECUTE' => $TEXT['EXECUTE'],
+                    'TEXT_WARN_PAGE_LEAVE' => '',
+                    'TEXT_SMART_LOGIN' => $TEXT['SMART_LOGIN'],
+                    'TEXT_MULTIPLE_MENUS' => $TEXT['MULTIPLE_MENUS'],
+                    'TEXT_HOMEPAGE_REDIRECTION' => $TEXT['HOMEPAGE_REDIRECTION'],
+                    'TEXT_SECTION_BLOCKS' => $TEXT['SECTION_BLOCKS'],
+                    'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+                    'TEXT_PAGE_TRASH' => $TEXT['PAGE_TRASH'],
+                    'TEXT_PAGE_LANGUAGES' => $TEXT['PAGE_LANGUAGES'],
+                    'TEXT_INLINE' => $TEXT['INLINE'],
+                    'TEXT_SEPARATE' => $TEXT['SEPARATE'],
+                    'TEXT_HOME_FOLDERS' => $TEXT['HOME_FOLDERS'],
+                    'TEXT_WYSIWYG_STYLE' => $TEXT['WYSIWYG_STYLE'],
+                    'TEXT_WORLD_WRITEABLE_FILE_PERMISSIONS' => $TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'],
+                    'MODE_SWITCH_WARNING' => $MESSAGE['SETTINGS']['MODE_SWITCH_WARNING'],
+                    'WORLD_WRITEABLE_WARNING' => $MESSAGE['SETTINGS']['WORLD_WRITEABLE_WARNING'],
+                    'TEXT_MODULE_ORDER' => $TEXT['MODULE_ORDER'],
+                    'TEXT_MAX_EXCERPT' => $TEXT['MAX_EXCERPT'],
+                    'TEXT_TIME_LIMIT' => $TEXT['TIME_LIMIT']
+                    ));
+/*---------------------------------------------------------------------------------------------------*/
+if($is_advanced)
+{
+    $template->parse('show_page_level_limit', 'show_page_level_limit_block', true);
+    $template->parse('show_checkbox_1',       'show_checkbox_1_block', true);
+    $template->parse('show_checkbox_2',       'show_checkbox_2_block', true);
+    $template->parse('show_checkbox_3',       'show_checkbox_3_block', true);
+    $template->set_block('show_php_error_level', '');
+    $template->set_block('show_charset', '');
+    $template->parse('show_wysiwyg',          'show_wysiwyg_block', true);
+    $template->parse('show_search',           'show_search_block', true);
+    $template->parse('show_redirect_timer',   'show_redirect_timer_block', true);
+}else {
+    $template->set_block('show_page_level_limit', '');
+    $template->set_block('show_checkbox_1', '');
+    $template->set_block('show_checkbox_2', '');
+    $template->set_block('show_checkbox_3', '');
+    $template->set_block('show_php_error_level', '');
+    $template->set_block('show_charset', '');
+    $template->set_block('show_wysiwyg', '');
+    $template->set_block('show_search', '');
+    $template->set_block('show_redirect_timer', '');
+}
+if($is_advanced && $admin->get_user_id()=='1')
+{
+    $template->parse('show_access', 'show_access_block', true);
+    $template->parse('show_chmod_js', 'show_chmod_js_block', true);
+    $template->parse('show_setting_js', 'show_setting_js_block', true);
+}else {
+    $template->set_block('show_access_block', '');
+    $template->set_block('show_chmod_js_block', '');
+    $template->set_block('show_setting_js_block', '');
+}
+/*---------------------------------------------------------------------------------------------------*/
+// Parse template objects output
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+$admin->print_footer();

Property changes on: trunk/admin/settings/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/settings/locking.php
===================================================================
--- trunk/admin/settings/locking.php	(nonexistent)
+++ trunk/admin/settings/locking.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         login
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.4
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if (!defined('WB_PATH')) {
+    $sStartupFile = dirname(dirname(__DIR__)).'/config.php';
+    if (is_readable($sStartupFile)) {
+        require($sStartupFile);
+    } else {
+        throw new Exception(
+                            'tried to read a nonexisting or not readable startup file ['
+                          . basename(dirname($sStartupFile)).'/'.basename($sStartupFile).']!!'
+        );
+    }
+}
+$oDb = $GLOBALS['database'];
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon(ADMIN_DIRECTORY.'\\settings');
+
+if (!class_exists('admin', false)) {require (WB_PATH.'/framework/class.admin.php');}
+$admin = new admin('Start', 'settings', false, false);
+
+if ($admin->get_user_id() == 1) {
+    $val = (((int)(defined('SYSTEM_LOCKED') ? SYSTEM_LOCKED : 0)) + 1) % 2;
+    db_update_key_value('settings', 'system_locked', $val);
+}
+// redirect to backend
+header('Location: ' . ADMIN_URL . '/index.php');
+exit();

Property changes on: trunk/admin/settings/locking.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/settings/save.php
===================================================================
--- trunk/admin/settings/save.php	(nonexistent)
+++ trunk/admin/settings/save.php	(revision 2)
@@ -0,0 +1,305 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         settings
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent this file from being accessed directly in the browser (would set all entries in DB settings table to '')
+//if(!isset($_POST['default_language']) || $_POST['default_language'] == '') die(header('Location: index.php'));
+
+// Find out if the user was view advanced options or not
+$bAdvanced = intval ((@intval($_POST['advanced'])) ?: 0);
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+// suppress to print the header, so no new FTAN will be set
+if(!$bAdvanced)
+{
+    $admin = new admin('Settings', 'settings_basic',false);
+} else {
+    $admin = new admin('Settings', 'settings_advanced',false);
+}
+
+// Create a javascript back link
+$js_back = ADMIN_URL.'/settings/index.php?advanced='.($bAdvanced);
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+$admin->print_header();
+
+$TOKENS = unserialize($_SESSION['TOKENS']);
+$array  = $_POST;
+ksort($array);
+
+$aInputs = array();
+$aOutputs = array();
+
+$sql = 'SELECT `name`, `value` FROM `'.TABLE_PREFIX.'settings` '
+     . 'ORDER BY `name`';
+if($oSettings = $database->query($sql)) {
+    while($aSetting = $oSettings->fetchRow( MYSQLI_ASSOC )) {
+      $aOutputs['_POST'][$aSetting['name']] = $aSetting['value'];
+    }
+}
+// After check print the header
+
+// Work-out file mode
+if( !$bAdvanced )
+{
+    // Check if should be set to 777 or left alone
+    if(isset($_POST['world_writeable']) && $_POST['world_writeable'] == 'true')
+    {
+        $file_mode = '0777';
+        $dir_mode  = '0777';
+    } else {
+        $file_mode = STRING_FILE_MODE;
+        $dir_mode  = STRING_DIR_MODE;
+    }
+} else {
+    $file_mode = STRING_FILE_MODE;
+    $dir_mode  = STRING_DIR_MODE;
+
+    if($admin->get_user_id()=='1')
+    {
+        // Work-out the octal value for file mode
+        $u = 0;
+        if(isset($_POST['file_u_r']) && $_POST['file_u_r'] == 'true') {
+            $u = $u+4;
+        }
+        if(isset($_POST['file_u_w']) && $_POST['file_u_w'] == 'true') {
+            $u = $u+2;
+        }
+        if(isset($_POST['file_u_e']) && $_POST['file_u_e'] == 'true') {
+            $u = $u+1;
+        }
+        $g = 0;
+        if(isset($_POST['file_g_r']) && $_POST['file_g_r'] == 'true') {
+            $g = $g+4;
+        }
+        if(isset($_POST['file_g_w']) && $_POST['file_g_w'] == 'true') {
+            $g = $g+2;
+        }
+        if(isset($_POST['file_g_e']) && $_POST['file_g_e'] == 'true') {
+            $g = $g+1;
+        }
+        $o = 0;
+        if(isset($_POST['file_o_r']) && $_POST['file_o_r'] == 'true') {
+            $o = $o+4;
+        }
+        if(isset($_POST['file_o_w']) && $_POST['file_o_w'] == 'true') {
+            $o = $o+2;
+        }
+        if(isset($_POST['file_o_e']) && $_POST['file_o_e'] == 'true') {
+            $o = $o+1;
+        }
+        $file_mode = "0".$u.$g.$o;
+        // Work-out the octal value for dir mode
+        $u = 0;
+        if(isset($_POST['dir_u_r']) && $_POST['dir_u_r'] == 'true') {
+            $u = $u+4;
+        }
+        if(isset($_POST['dir_u_w']) && $_POST['dir_u_w'] == 'true') {
+            $u = $u+2;
+        }
+        if(isset($_POST['dir_u_e']) && $_POST['dir_u_e'] == 'true') {
+            $u = $u+1;
+        }
+        $g = 0;
+        if(isset($_POST['dir_g_r']) && $_POST['dir_g_r'] == 'true') {
+            $g = $g+4;
+        }
+        if(isset($_POST['dir_g_w']) && $_POST['dir_g_w'] == 'true') {
+            $g = $g+2;
+        }
+        if(isset($_POST['dir_g_e']) && $_POST['dir_g_e'] == 'true') {
+            $g = $g+1;
+        }
+        $o = 0;
+        if(isset($_POST['dir_o_r']) && $_POST['dir_o_r'] == 'true') {
+            $o = $o+4;
+        }
+        if(isset($_POST['dir_o_w']) && $_POST['dir_o_w'] == 'true') {
+            $o = $o+2;
+        }
+        if(isset($_POST['dir_o_e']) && $_POST['dir_o_e'] == 'true') {
+            $o = $o+1;
+        }
+        $dir_mode = "0".$u.$g.$o;
+    }
+// Ensure that the specified default email is formally valid
+    if(isset($_POST['server_email']))
+    {
+        $_POST['server_email'] = strip_tags($_POST['server_email']);
+        // $pattern = '/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9]([-a-z0-9_]?[a-z0-9])*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z]{2})|([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(\.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3})(:[0-9]{1,5})?\r/im';
+        $pattern = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,6}))$/';
+        if(false == preg_match($pattern, $_POST['server_email']))
+        {
+            $admin->print_error($MESSAGE['USERS_INVALID_EMAIL'].
+                '<br /><strong>Email: '.htmlentities($_POST['server_email']).'</strong>', $js_back);
+        }
+    }
+
+    if(isset($_POST['wbmailer_routine']) && ($_POST['wbmailer_routine']=='smtp')) {
+
+        $checkSmtpHost = (isset($_POST['wbmailer_smtp_host']) && ($_POST['wbmailer_smtp_host']=='') ? false : true);
+        $checkSmtpUser = (isset($_POST['wbmailer_smtp_username']) && ($_POST['wbmailer_smtp_username']=='') ? false : true);
+        $checkSmtpPassword = (isset($_POST['wbmailer_smtp_password']) && ($_POST['wbmailer_smtp_password']=='') ? false : true);
+        if(!$checkSmtpHost || !$checkSmtpUser || !$checkSmtpPassword) {
+            $admin->print_error($TEXT['REQUIRED'].' '.$TEXT['WBMAILER_SMTP_AUTH'].
+                '<br /><strong>'.$MESSAGE['GENERIC_FILL_IN_ALL'].'</strong>', $js_back);
+        }
+
+    }
+}
+
+$allow_tags_in_fields = array('website_header', 'website_footer','website_signature');
+$allow_empty_values   = array('website_header','website_footer','website_signature','sec_anchor','pages_directory','page_spacer','wbmailer_smtp_secure');
+$disallow_in_fields   = array('pages_directory', 'media_directory','wb_version');
+
+// Query current settings in the db, then loop through them and update the db with the new value
+$settings = array();
+$old_settings = array();
+// Query current settings in the db, then loop through them to get old values
+$sql  = 'SELECT `name`, `value` FROM `'.TABLE_PREFIX.'settings` '
+      . 'ORDER BY `name`';
+if($res_settings = $database->query($sql)) {
+    $passed = false;
+    while($setting = $res_settings->fetchRow(MYSQLI_ASSOC)) :
+        $old_settings[$setting['name']] = $setting['value'];
+        $setting_name = $setting['name'];
+        if($setting_name=='wb_version') { continue; }
+        $value = $admin->get_post($setting_name);
+        $value = is_null($value) ? '' : $value;
+        $value = isset($_POST[$setting_name]) ? $value : $old_settings[$setting_name] ;
+        switch ($setting_name) :
+            case 'website_header':
+            case 'website_footer':
+            case 'website_signature':
+                $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+                $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+                $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+                $aPatterns = array(
+                    '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+                    '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+                );
+                $aReplacements = array(
+                    '\1'.$sDocumentRootUrl.'/\3',
+                    '$1{SYSVAR:MEDIA_REL}$3'
+                );
+                $value = preg_replace($aPatterns, $aReplacements, $value);
+                $passed = true;
+                break;
+            case 'default_timezone':
+                $value=$value*60*60;
+                $passed = true;
+                break;
+            case 'string_dir_mode':
+                $value=$dir_mode;
+                $passed = true;
+                break;
+            case 'string_file_mode':
+                $value=$file_mode;
+                $passed = true;
+            break;
+            case 'pages_directory':
+                break;
+            case 'wbmailer_smtp_auth':
+                // $value = isset($_POST[$setting_name]) ? $_POST[$setting_name] : '' ;
+                $value = true ;
+                $passed = true;
+                break;
+            case 'sec_token_netmask4':
+                $iValue = intval( $value );
+                $value  = (($iValue > 32) || ( $iValue < 0 ) ? '24' : $value);
+                $passed = true;
+                break;
+            case 'sec_token_netmask6':
+                $iValue = intval( $value );
+                $value  = (($iValue > 128) || ( $iValue < 0 ) ? '64' : $value);
+                $passed = true;
+                break;
+            case 'sec_token_life_time':
+                $value = $admin->sanitizeLifeTime(intval( $value ) * 60 );
+                $passed = true;
+                break;
+            case 'wb_version':
+                continue;
+                break;
+            default :
+                $passed = in_array($setting_name, $allow_empty_values);
+                break;
+        endswitch;
+        if(is_array($value)){ $value = $value['0']; }
+        if ( !in_array($setting_name, $allow_tags_in_fields)) {
+          $value = strip_tags($value);
+        } else {
+
+        }
+        if ( (!in_array($value, $disallow_in_fields) && (isset($_POST[$setting_name])) || $passed == true)) {
+            $sIdentifier = trim($database->escapeString($setting_name));
+            $value = trim($database->escapeString($value));
+            if (!db_update_key_value('settings',$sIdentifier,$value)) {
+                $admin->print_error($database->get_error, $js_back );
+            }
+/*
+            $sql = 'UPDATE `'.TABLE_PREFIX.'settings` SET '
+                 . '`value`=\''.$value.'\' '
+                 . 'WHERE  `name`=\''.$database->escapeString($setting_name).'\'';
+            if (!$database->query($sql)) {
+                $admin->print_error($database->get_error, $js_back );
+                break;
+            }
+*/
+        }
+    endwhile;
+}
+
+// Query current search settings in the db, then loop through them and update the db with the new value
+$sql = 'SELECT `name`, `value` FROM `'.TABLE_PREFIX.'search` '
+     . 'WHERE `extra`=\'\'';
+if (!($res_search = $database->query($sql))) {
+    $admin->print_error($database->is_error(), $js_back );
+}
+while($search_setting = $res_search->fetchRow()) :
+    $old_value = $search_setting['value'];
+    $setting_name = $search_setting['name'];
+    $post_name = 'search_'.$search_setting['name'];
+
+    // hold old value if post is empty
+    // check search template
+    $value = (($admin->get_post($post_name) == '') && ($setting_name != 'template'))
+             ? $old_value
+             : $admin->get_post($post_name);
+    if (isset($value)) {
+        $value = $database->escapeString($value);
+        $sql = 'UPDATE `'.TABLE_PREFIX.'search` '
+             . 'SET `value`=\''.$value.'\' '
+             . 'WHERE `name`=\''.$setting_name.'\' AND `extra`=\'\'';
+        if(!($database->query($sql))) {
+            $admin->print_error( TABLE_PREFIX.'search :: '.$MESSAGE['GENERIC_NOT_UPGRADED'].'<br />'.$database->get_error, $js_back );
+            break;
+        }
+        // $sql_info = mysql_info($database->db_handle); //->> nicht mehr erforderlich
+    }
+endwhile;
+
+$admin->print_success($MESSAGE['SETTINGS_SAVED'], $js_back );
+$admin->print_footer();
+

Property changes on: trunk/admin/settings/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/start/index.php
===================================================================
--- trunk/admin/start/index.php	(nonexistent)
+++ trunk/admin/start/index.php	(revision 2)
@@ -0,0 +1,195 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         start
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Start','start');
+// ---------------------------------------
+
+if(defined('FINALIZE_SETUP')) {
+    require_once(WB_PATH.'/framework/functions.php');
+    $dirs = array( 'modules'   => WB_PATH.'/modules/',
+                   'templates' => WB_PATH.'/templates/',
+                   'languages' => WB_PATH.'/languages/'
+                 );
+    foreach($dirs AS $type => $dir) {
+        if( ($handle = opendir($dir)) ) {
+            while(false !== ($file = readdir($handle))) {
+                if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'admin.php' AND $file != 'index.php') {
+                    // Get addon type
+                    if($type == 'modules') {
+                        load_module($dir.'/'.$file, true);
+                        // Pretty ugly hack to let modules run $admin->set_error
+                        // See dummy class definition admin_dummy above
+                        if(isset($admin->error) && $admin->error != '') {
+                            $admin->print_error($admin->error);
+                        }
+                    } elseif($type == 'templates') {
+                        load_template($dir.'/'.$file);
+                    } elseif($type == 'languages') {
+                        load_language($dir.'/'.$file);
+                    }
+                }
+            }
+        closedir($handle);
+        }
+    }
+    $sql = 'DELETE FROM `'.TABLE_PREFIX.'settings` WHERE `name`=\'FINALIZE_SETUP\'';
+    if($database->query($sql)) { }
+}
+// ---------------------------------------
+$msg  = '<br />';
+// check if it is neccessary to start the uograde-script
+if(($admin->ami_group_member('1')) && file_exists(WB_PATH.'/upgrade-script.php')) {
+    // check if it is neccessary to start the uograde-script
+    $oldVersion = '';
+/*
+    $oldVersion  = ''.WB_VERSION.(@WB_SP ? : '');
+    $newVersion  = ''.VERSION.( @SP ? : '');
+*/
+    $oldVersion  = trim(''.WB_VERSION.'+'.WB_REVISION.'+'.( defined('WB_SP') ? WB_SP : ''), '+');
+    $newVersion  = trim(''.VERSION.'+'.REVISION.'+'.( defined('SP') ? SP : ''), '+');
+    if ( version_compare($oldVersion, $newVersion, '<') === true ) {
+        if(!headers_sent()) {
+            header('Location: '.WB_URL.'/upgrade-script.php');
+            exit;
+        } else {
+            echo "<p style=\"text-align:center;\"> The <strong>upgrade script</strong> could not be start automatically.\n" .
+                 "Please click <a style=\"font-weight:bold;\" " .
+                 "href=\"".WB_URL."/upgrade-script.php\">on this link</a> to start the script!</p>\n";
+            exit;
+        }
+    }
+//    $msg .= ''.$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'].'<br />';
+}
+
+/**
+ * delete stored ip adresses default after 60 days
+ */
+$sql = 'UPDATE `'.TABLE_PREFIX.'users` SET `login_ip` = \'\' WHERE `login_when` < '.(time()-(60*84600));
+$database->query($sql);
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('start.htt')));
+$template->set_file('page', 'start.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Insert values into the template object
+$template->set_var(array(
+                    'WELCOME_MESSAGE' => $MESSAGE['START_WELCOME_MESSAGE'],
+                    'CURRENT_USER' => $MESSAGE['START_CURRENT_USER'],
+                    'DISPLAY_NAME' => $admin->get_display_name(),
+                    'ADMIN_URL' => ADMIN_URL,
+                    'WB_URL' => WB_URL,
+                    'THEME_URL' => THEME_URL,
+                    'WB_VERSION' => WB_VERSION,
+                    'START_LIST' => ' '
+                )
+            );
+// Insert permission values into the template object
+$get_permission = (function($type='preferences', $ParentBlock='main_block') use ($admin, $template){
+    $template->set_block($ParentBlock, 'show_'.$type.'_block', 'show_'.$type);
+    if ($admin->get_permission($type) != true) {
+        $template->set_block('show_'.$type, '');
+        return false;
+    } else {
+        $template->parse('show_'.$type, 'show_'.$type.'_block', true);
+    }
+    return true;
+});
+$get_permission ('pages');
+$get_permission ('media');
+$get_permission ('addons');
+$get_permission ('settings');
+$get_permission ('admintools');
+$get_permission ('access');
+
+//$msg .= (file_exists(WB_PATH.'/install/')) ?  $MESSAGE['START_INSTALL_DIR_EXISTS'] : $msg;
+
+// Check if installation directory still exists
+if (file_exists(WB_PATH.'/upgrade-script.php') ) {
+// Check if user is part of Adminstrators group / better be a Systemadministrator
+//    if ($admin->ami_group_member(1)){
+    if ($admin->get_user_id() == 1) {
+        $template->set_var('WARNING', $msg );
+    } else {
+        $template->set_var('DISPLAY_WARNING', 'display:none;');
+    }
+} else {
+    $template->set_var('DISPLAY_WARNING', 'display:none;');
+}
+
+// Insert "Add-ons" section overview (pretty complex compared to normal)
+$addons_overview = $TEXT['MANAGE'].' ';
+$addons_count = 0;
+if($admin->get_permission('modules') == true)
+{
+    $addons_overview .= '<a href="'.ADMIN_URL.'/modules/index.php">'.$MENU['MODULES'].'</a>';
+    $addons_count = 1;
+}
+if($admin->get_permission('templates') == true)
+{
+    if($addons_count == 1) { $addons_overview .= ', '; }
+    $addons_overview .= '<a href="'.ADMIN_URL.'/templates/index.php">'.$MENU['TEMPLATES'].'</a>';
+    $addons_count = 1;
+}
+if($admin->get_permission('languages') == true)
+{
+    if($addons_count == 1) { $addons_overview .= ', '; }
+    $addons_overview .= '<a href="'.ADMIN_URL.'/languages/index.php">'.$MENU['LANGUAGES'].'</a>';
+}
+
+// Insert "Access" section overview (pretty complex compared to normal)
+$access_overview = $TEXT['MANAGE'].' ';
+$access_count = 0;
+if($admin->get_permission('users') == true) {
+    $access_overview .= '<a href="'.ADMIN_URL.'/users/index.php">'.$MENU['USERS'].'</a>';
+    $access_count = 1;
+}
+if($admin->get_permission('groups') == true) {
+    if($access_count == 1) { $access_overview .= ', '; }
+    $access_overview .= '<a href="'.ADMIN_URL.'/groups/index.php">'.$MENU['GROUPS'].'</a>';
+    $access_count = 1;
+}
+
+// Insert section names and descriptions
+$template->set_var(array(
+                    'PAGES' => $MENU['PAGES'],
+                    'MEDIA' => $MENU['MEDIA'],
+                    'ADDONS' => $MENU['ADDONS'],
+                    'ACCESS' => $MENU['ACCESS'],
+                    'PREFERENCES' => $MENU['PREFERENCES'],
+                    'SETTINGS' => $MENU['SETTINGS'],
+                    'ADMINTOOLS' => $MENU['ADMINTOOLS'],
+                    'HOME_OVERVIEW' => $OVERVIEW['START'],
+                    'PAGES_OVERVIEW' => $OVERVIEW['PAGES'],
+                    'MEDIA_OVERVIEW' => $OVERVIEW['MEDIA'],
+                    'ADDONS_OVERVIEW' => $addons_overview,
+                    'ACCESS_OVERVIEW' => $access_overview,
+                    'PREFERENCES_OVERVIEW' => $OVERVIEW['PREFERENCES'],
+                    'SETTINGS_OVERVIEW' => $OVERVIEW['SETTINGS'],
+                    'ADMINTOOLS_OVERVIEW' => $OVERVIEW['ADMINTOOLS']
+                )
+            );
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/start/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/templates/details.php
===================================================================
--- trunk/admin/templates/details.php	(nonexistent)
+++ trunk/admin/templates/details.php	(revision 2)
@@ -0,0 +1,126 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         templates
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+require_once(WB_PATH .'/framework/functions.php');
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Addons', 'templates_view', false);
+
+$js_back = ADMIN_URL.'/templates/index.php';
+
+    if( !$admin->checkFTAN() ){
+        $admin->print_header();
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+    }
+    $admin->print_header();
+
+    $file = '';
+// Check if user selected template
+    if (!isset($_POST['file']) || $_POST['file'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('file',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get template directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($file = $database->get_one($sqlAddons)) {
+        $file = preg_replace('/[^a-z0-9_-]/i', "", $file);  // fix secunia 2010-92-2
+    }
+
+// Check if the template exists
+    if (!is_readable(WB_PATH.'/templates/'.$file)) {
+        $admin->print_error($MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+    }
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('templates_details.htt')));
+// $template->debug = true;
+$template->set_file('page', 'templates_details.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_var('FTAN', $admin->getFTAN());
+
+// Insert values
+    $sqlAddons  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+                . 'WHERE `type` = \'template\' '
+                . 'AND `directory` = \''.$file.'\'';
+    if($result = $database->query($sqlAddons)) {
+        $row = $result->fetchRow(MYSQLI_ASSOC);
+    }
+
+// check if a template description exists for the displayed backend language
+$tool_description = false;
+if(function_exists('file_get_contents') && file_exists(WB_PATH.'/templates/'.$file.'/languages/'.LANGUAGE .'.php')) {
+    // read contents of the template language file into string
+    $data = @file_get_contents(WB_PATH .'/templates/' .$file .'/languages/' .LANGUAGE .'.php');
+    // use regular expressions to fetch the content of the variable from the string
+    $tool_description = get_variable_content('template_description', $data, false, false);
+    // replace optional placeholder {WB_URL} with value stored in config.php
+    if($tool_description !== false && strlen(trim($tool_description)) != 0) {
+        $tool_description = str_replace('{WB_URL}', WB_URL, $tool_description);
+    } else {
+        $tool_description = false;
+    }
+}
+if($tool_description !== false) {
+    // Override the template-description with correct desription in users language
+    $row['description'] = $tool_description;
+}
+
+$template->set_var(array(
+                                'NAME' => $row['name'],
+                                'TYPE' => $row['function'],
+                                'AUTHOR' => $row['author'],
+                                'DESCRIPTION' => $row['description'],
+                                'VERSION' => $row['version'],
+                                'DESIGNED_FOR' => $row['platform']
+                                )
+                        );
+
+// Insert language headings
+$template->set_var(array(
+                                'HEADING_TEMPLATE_DETAILS' => $HEADING['TEMPLATE_DETAILS']
+                                )
+                        );
+// Insert language text and messages
+$template->set_var(array(
+                                'TEXT_NAME' => $TEXT['NAME'],
+                                'TEXT_TYPE' => $TEXT['TYPE'],
+                                'TEXT_AUTHOR' => $TEXT['AUTHOR'],
+                                'TEXT_VERSION' => $TEXT['VERSION'],
+                                'TEXT_DESIGNED_FOR' => $TEXT['DESIGNED_FOR'],
+                                'TEXT_DESCRIPTION' => $TEXT['DESCRIPTION'],
+                                'TEXT_BACK' => $TEXT['BACK']
+                                )
+                        );
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/templates/details.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/templates/index.php
===================================================================
--- trunk/admin/templates/index.php	(nonexistent)
+++ trunk/admin/templates/index.php	(revision 2)
@@ -0,0 +1,135 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         templates
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Addons', 'templates');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('templates.htt')));
+// $template->debug = true;
+$template->set_file('page', 'templates.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_var('FTAN', $admin->getFTAN());
+
+// Insert values into template list
+$template->set_block('main_block', 'template_detail_block', 'template_detail');
+$template->set_block('template_detail_block', 'template_detail_select_block', 'template_detail_select');
+$template->set_block('main_block', 'template_uninstall_block', 'template_uninstall');
+$template->set_block('template_uninstall_block', 'template_uninstall_select_block', 'template_uninstall_select');
+$aPreventFromUninstall = array (' wb_theme ', ' WbTheme ', ' default ', ' default_theme ', ' DefaultTheme ');
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` '
+      . 'WHERE `type` = \'template\' '
+      . 'ORDER BY `name`';
+if($oAddons = $database->query( $sql )) {
+    while($aAddon = $oAddons->fetchRow( MYSQLI_ASSOC )) {
+        if( !$admin->get_permission( $aAddon['directory'], 'template' )) { continue; }
+        $aAddonIdKey = $admin->getIDKEY($aAddon['addon_id']);
+        $template->set_var('DETAIL_VALUE',  $aAddonIdKey);
+        $template->set_var('DETAIL_NAME', $aAddon['name']);
+        $template->parse('template_detail_select', 'template_detail_select_block', true);
+        if (!preg_match('/'.$aAddon['directory'].'/si', implode('|', $aPreventFromUninstall))) {
+            $template->set_var('UNINSTALL_VALUE', $aAddonIdKey);
+            $template->set_var('UNINSTALL_NAME', $aAddon['name']);
+            $template->parse('template_uninstall_select', 'template_uninstall_select_block', true);
+        }
+    }
+}
+
+// Insert permissions values
+$template->set_block('main_block', 'template_install_block', 'template_install');
+if($admin->get_permission('templates_install') != true) {
+    $template->set_var('DISPLAY_INSTALL', '');
+    $template->set_block('template_install', '');
+} else {
+    $template->parse('template_install', 'template_install_block', true);
+}
+if($admin->get_permission('templates_uninstall') != true) {
+    $template->set_var('DISPLAY_UNINSTALL', '');
+    $template->set_block('template_uninstall', '');
+} else {
+    $template->parse('template_uninstall', 'template_uninstall_block', true);
+}
+if($admin->get_permission('templates_view') != true) {
+    $template->set_var('DISPLAY_LIST', '');
+    $template->set_block('template_detail', '');
+} else {
+    $template->parse('template_detail', 'template_detail_block', true);
+}
+
+$template->set_block('main_block', 'addon_module_block', 'addon_module');
+if($admin->get_permission('modules_view') != true) {
+    $template->set_block ('addon_module', '');
+} else {
+    $template->parse('addon_module', 'addon_module_block', true);
+}
+
+$template->set_block('main_block', 'addon_language_block', 'addon_language');
+if($admin->get_permission('languages_view') != true) {
+    $template->set_block ('addon_language', '');
+} else {
+    $template->parse('addon_language', 'addon_language_block', true);
+}
+
+$template->set_block('main_block', 'addon_template_block', 'addon_template');
+if($admin->get_permission('admintools') != true) {
+    $template->set_block ('addon_template', '');
+} else {
+    $template->parse('addon_template', 'addon_template_block', true);
+}
+
+
+
+// Insert language headings
+$template->set_var(array(
+                    'HEADING_INSTALL_TEMPLATE' => $HEADING['INSTALL_TEMPLATE'],
+                    'HEADING_UNINSTALL_TEMPLATE' => $HEADING['UNINSTALL_TEMPLATE'],
+                    'HEADING_TEMPLATE_DETAILS' => $HEADING['TEMPLATE_DETAILS']
+                )
+            );
+// insert urls
+$template->set_var(array(
+                    'ADMIN_URL' => ADMIN_URL,
+                    'WB_URL' => WB_URL,
+                    'THEME_URL' => THEME_URL,
+                    'FTAN' => $admin->getFTAN()
+                )
+            );
+// Insert language text and messages
+$template->set_var(array(
+    'URL_MODULES' => $admin->get_permission('modules') ? ADMIN_URL . '/modules/index.php'  : '',
+    'URL_LANGUAGES' => $admin->get_permission('languages') ? ADMIN_URL . '/languages/index.php'  : '',
+    'URL_ADVANCED' => '&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;',
+    'MENU_LANGUAGES' => $admin->get_permission('languages') ? $MENU['LANGUAGES'] : '&#160;&#160;&#160;',
+    'MENU_MODULES' => $admin->get_permission('modules') ? $MENU['MODULES'] : '&#160;&#160;&#160;',
+    'TEXT_INSTALL' => $TEXT['INSTALL'],
+    'TEXT_UNINSTALL' => $TEXT['UNINSTALL'],
+    'TEXT_VIEW_DETAILS' => $TEXT['VIEW_DETAILS'],
+    'TEXT_PLEASE_SELECT' => $TEXT['PLEASE_SELECT'],
+    'CHANGE_TEMPLATE_NOTICE' => $MESSAGE['TEMPLATES']['CHANGE_TEMPLATE_NOTICE']
+    )
+);
+
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/templates/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/templates/install.php
===================================================================
--- trunk/admin/templates/install.php	(nonexistent)
+++ trunk/admin/templates/install.php	(revision 2)
@@ -0,0 +1,161 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         templates
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// do not display notices and warnings during installation
+error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
+
+// Include config file and admin class file
+if (!defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if (!class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Addons', 'templates_install', false);
+
+$js_back = ADMIN_URL.'/templates/index.php';
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+}
+// After check print the header
+$admin->print_header();
+
+// Check if user uploaded a file
+if(!isset($_FILES['userfile'])) {
+    $admin->print_error($MESSAGE['GENERIC_ERROR_OPENING_FILE'], $js_back );
+}
+
+// Include the WB functions file
+if (!function_exists('load_template')){require(WB_PATH.'/framework/functions.php');}
+
+// Set temp vars
+$temp_dir = WB_PATH.'/temp/';
+$temp_file = $temp_dir . $_FILES['userfile']['name'];
+$temp_unzip = WB_PATH.'/temp/unzip/';
+
+// Try to upload the file to the temp dir
+if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $temp_file)) {
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UPLOAD'], $js_back );
+}
+
+// Include the PclZip class file (thanks to
+if(!class_exists('PclZip')){ require(WB_PATH.'/include/pclzip/pclzip.lib.php');}
+
+// Remove any vars with name "template_directory" and "theme_directory"
+if (isset($template_directory)){unset($template_directory);}
+if (isset($theme_directory)){unset($theme_directory);}
+
+// Setup the PclZip object
+$archive = new PclZip($temp_file);
+// Unzip the files to the temp unzip folder
+$list = $archive->extract(PCLZIP_OPT_PATH, $temp_unzip);
+// Check if uploaded file is a valid Add-On zip file
+if (!($list || !file_exists($temp_unzip . 'info.php'))) {
+  $admin->print_error($MESSAGE['GENERIC_INVALID_ADDON_FILE']);
+}
+
+// Include the templates info file
+require($temp_unzip.'info.php');
+
+// Perform Add-on requirement checks before proceeding
+require(WB_PATH . '/framework/addon.precheck.inc.php');
+preCheckAddon($temp_file);
+
+// Delete the temp unzip directory
+rm_full_dir($temp_unzip);
+
+// Check if the file is valid
+if(!isset($template_directory)) {
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['GENERIC_INVALID']);
+}
+// Check if this module is already installed
+// and compare versions if so
+$new_template_version = $template_version;
+unset($template_version);
+$success_message = $MESSAGE['GENERIC_MODULE_VERSION_ERROR'];
+
+if (is_dir(WB_PATH.'/templates/'.$template_directory)) {
+
+    if (file_exists(WB_PATH.'/templates/'.$template_directory.'/info.php')) {
+        require(WB_PATH.'/templates/'.$template_directory.'/info.php');
+        $sql  = 'SELECT `version` FROM `'.TABLE_PREFIX.'addons` '
+              . 'WHERE `directory`=\''.$template_directory.'\'';
+        $old_template_version = $database->get_one($sql);
+        // Version to be installed is older than currently installed version
+        if (versionCompare($old_template_version, $new_template_version, '>=')) {
+            if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+            $admin->print_error($template_directory.'<br />'.$MESSAGE['GENERIC_ALREADY_INSTALLED'].'<br />'.'Version '.$old_template_version);
+        } else {
+          if (is_readable(WB_PATH.'/templates/'.$template_directory.'/upgrade.php')) {
+              require(WB_PATH.'/templates/'.$template_directory.'/upgrade.php');
+          }
+          $success_message = $MESSAGE['GENERIC_UPGRADED'];
+
+        }
+    }
+} else {
+    $success_message = $MESSAGE['GENERIC_INSTALLED'];
+}
+
+// Check if template dir is writable
+if(!is_writable(WB_PATH.'/templates/')) {
+    if(file_exists($temp_file)) { unlink($temp_file); } // Remove temp file
+    $admin->print_error($MESSAGE['TEMPLATES_BAD_PERMISSIONS']);
+}
+
+// Set template dir
+$template_dir = WB_PATH.'/templates/'.$template_directory;
+
+// Make sure the template dir exists, and chmod if needed
+if(!file_exists($template_dir)) {
+    make_dir($template_dir);
+} else {
+    change_mode($template_dir, 'dir');
+}
+
+// Unzip template to the template dir
+$list = (int)$archive->extract(PCLZIP_OPT_PATH, $template_dir, PCLZIP_OPT_REPLACE_NEWER);
+if ($list==0)
+{
+    $admin->print_error($MESSAGE['GENERIC_CANNOT_UNZIP']);
+}
+
+// Delete the temp zip file
+if (file_exists($temp_file)) { unlink($temp_file); }
+
+// Chmod all the uploaded files
+$dir = dir($template_dir);
+while(false !== $entry = $dir->read()) {
+    // Skip pointers
+    if(substr($entry, 0, 1) != '.' AND $entry != '.svn' AND !is_dir($template_dir.'/'.$entry)) {
+        // Chmod file
+        change_mode($template_dir.'/'.$entry);
+    }
+}
+
+// Load template info into DB
+if (load_template($template_dir)===true){
+// Print success message
+    $admin->print_success($success_message);
+} else {
+    $admin->print_error($MESSAGE['GENERIC_ALREADY_INSTALLED']);
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/templates/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/templates/uninstall.php
===================================================================
--- trunk/admin/templates/uninstall.php	(nonexistent)
+++ trunk/admin/templates/uninstall.php	(revision 2)
@@ -0,0 +1,170 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         templates
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// Include the WB functions file
+if ( !function_exists( 'get_modul_version' ) ) { require(WB_PATH.'/framework/functions.php'); }
+if (!function_exists("replace_all")) {
+    function replace_all ($aStr = "", &$aArray ) {
+        foreach($aArray as $k=>$v) $aStr = str_replace("{{".$k."}}", $v, $aStr);
+        return $aStr;
+    }
+}
+
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Addons', 'templates_uninstall', false);
+
+$js_back = ADMIN_URL.'/templates/index.php';
+
+    if( !$admin->checkFTAN() ){
+        $admin->print_header();
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+    // After check print the header
+    $admin->print_header();
+
+    $file = '';
+// Check if user selected template
+    if (!isset($_POST['file']) || $_POST['file'] == false) {
+        $iAddonId = 0;
+        $admin->print_error( $MESSAGE['GENERIC_FORGOT_OPTIONS'], $js_back );
+    } else {
+        $iAddonId = $admin->checkIDKEY('file',0);
+    }
+    if ($iAddonId == 0){
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+// Get template directory
+    $sqlAddons = 'SELECT `directory` FROM `'.TABLE_PREFIX.'addons` '
+               . 'WHERE `addon_id`='.(int)$iAddonId.' '
+               . ''.'';
+    if ($file = $database->get_one($sqlAddons)) {
+        $file = preg_replace('/[^a-z0-9_-]/i', "", $file);  // fix secunia 2010-92-2
+    }
+
+// check whether the template is used as default wb theme
+$aPreventFromUninstall = array ('wb_theme', 'WbTheme', 'default_theme', 'DefaultTheme', 'default' );
+if(
+    $file == DEFAULT_THEME ||
+    preg_match('/'.$file.'/si', implode('|', $aPreventFromUninstall ))
+) {
+    $temp = array ('name' => $file );
+    $msg = replace_all( $MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'], $temp );
+    $admin->print_error( $msg );
+}
+// Check if the template exists
+if (!is_dir(WB_PATH.'/templates/'.$file)) {
+    $admin->print_error($MESSAGE['GENERIC_NOT_INSTALLED'], $js_back );
+}
+/**
+*    Check if the template is the standard-template or still in use
+*/
+if (!array_key_exists('CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE', $MESSAGE['GENERIC'] ) )
+    $MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = "Can't uninstall this template <b>{{name}}</b> because it's the standardtemplate!";
+
+// check whether the template is used as default wb theme
+if($file == DEFAULT_THEME) {
+    $temp = array ('name' => $file );
+    $msg = replace_all( $MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'], $temp );
+    $admin->print_error( $msg );
+}
+
+if ($file == DEFAULT_TEMPLATE) {
+    $temp = array ('name' => $file );
+    $msg = replace_all( $MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'], $temp );
+    $admin->print_error( $msg );
+
+} else {
+
+    /**
+    *    Check if the template is still in use by a page ...
+    */
+
+    $sqlPage = 'SELECT `page_id`, `page_title` FROM `'.TABLE_PREFIX.'pages` '
+             . 'WHERE `template`=\''.$file.'\' '
+             . 'ORDER BY `page_title`'.' ';
+    $info = $database->query($sqlPage);
+    if ($info->numRows() > 0) {
+        /**
+        *    Template is still in use, so we're collecting the page-titles
+        */
+
+        /**
+        *    The base-message template-string for the top of the message
+        */
+        if (!array_key_exists("CANNOT_UNINSTALL_IN_USE_TMPL", $MESSAGE['GENERIC'])) {
+            $add = $info->numRows() == 1 ? "this page" : "these pages";
+            $msg_template_str  = "<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled because it is still in use by {{pages}}";
+            $msg_template_str .= ":<br /><i>click for editing.</i><br /><br />";
+        } else {
+            $msg_template_str = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'];
+            $temp = explode(";",$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES']);
+            $add = $info->numRows() == 1 ? $temp[0] : $temp[1];
+        }
+        /**
+        *    The template-string for displaying the Page-Titles ... in this case as a link
+        */
+        $page_template_str = "- <b><a href='../pages/settings.php?page_id={{id}}'>{{title}}</a></b><br />";
+        $values = array ('type' => 'Template', 'type_name' => $file, 'pages' => $add);
+        $msg = replace_all ( $msg_template_str,  $values );
+        $page_names = "";
+
+        while ($data = $info->fetchRow() ) {
+            $page_info = array(
+                'id'    => $data['page_id'],
+                'title' => $data['page_title']
+            );
+            $page_names .= replace_all ( $page_template_str, $page_info );
+        }
+
+        /**
+        *    Printing out the error-message and die().
+        */
+        $admin->print_error($MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'].$msg.$page_names);
+    }
+}
+
+// Check if we have permissions on the directory
+    if (!is_writable(WB_PATH.'/templates/'.$file)) {
+        $admin->print_error(' ('.$file.') '.$MESSAGE['GENERIC_CANNOT_UNINSTALL'], $js_back);
+    }
+// Try to delete the template dir
+    if (!rm_full_dir(WB_PATH.'/templates/'.$file)) {
+        $admin->print_error(' ('.$file.') '.$MESSAGE['GENERIC_CANNOT_UNINSTALL'], $js_back);
+    } else {
+        // Remove entry from DB
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'addons`'
+          . 'WHERE `directory` = \''.$file.'\' '
+          .   'AND  type = \'template\' ';
+    $database->query($sql);
+    }
+
+// Update pages that use this template with default template
+    $sql  = 'UPDATE '.TABLE_PREFIX.'pages SET '
+          . 'template = '.DEFAULT_TEMPLATE.''
+          . 'WHERE template = \''.$file.'\'';
+    if (!$database->query($sql)){}
+// Print success message
+    $admin->print_success(' ('.$file.') '.$MESSAGE['GENERIC_UNINSTALLED'], $js_back);
+
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/templates/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/themes/templates/SectionInfoLine.htt
===================================================================
--- trunk/admin/themes/templates/SectionInfoLine.htt	(nonexistent)
+++ trunk/admin/themes/templates/SectionInfoLine.htt	(revision 2)
@@ -0,0 +1,22 @@
+<!--
+ @version         $Id: SectionInfoLine.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div style="position: relative;" class="section-{aTarget.SectionInfoLine}">
+<form name="form_properties" action="{aTarget.sectionUrl}sections_save.php" method="post">
+  <input type="hidden" name="section_id" value="{aTarget.SectionId}" />
+  <input type="hidden" name="page_id" value="{aTarget.pageId}" />
+  <input type="hidden" name="inputSection" value="1" />
+  <a id="{aTarget.SectionIdPrefix}" ></a>
+  <div class="section-info ">
+  <b>Block:</b> {aTarget.BlockName} ( {aTarget.sectionBlock} ) <b>Modul:</b> {aTarget.sectionModule} <b>ID:</b> {aTarget.SectionId}
+   <b style="margin-left: 1.225em;">Title:</b>
+   <input type="text" name="title_{aTarget.SectionId}" value="{aTarget.title}" style="width: 30%; margin-left: 1.225em;" class="" />
+<!-- BEGIN section_block -->
+      {aTarget.FTAN}
+      <input type="submit" name="save" value="{lang.TEXT_SUBMIT}" class="section_{aTarget.SectionId} submit btn btn-default" />
+<!-- END section_block -->
+  </div>
+</form>
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/access.htt
===================================================================
--- trunk/admin/themes/templates/access.htt	(nonexistent)
+++ trunk/admin/themes/templates/access.htt	(revision 2)
@@ -0,0 +1,45 @@
+<!--
+ @version         $Id: access.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div id="access">
+    <h2 style="margin-bottom: 0.0em;">{ACCESS}</h2>
+    <ul>
+        <li>{ACCESS_LIST}</li>
+        <li>&nbsp;
+    <!-- BEGIN users_block -->
+            <table class="section" style="{DISPLAY_USERS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/users/index.php"> <img src="{THEME_URL}/icons/users.png" alt="{USERS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/users/index.php"><span class="title">{USERS}</span></a>
+                    {USERS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END users_block -->
+        </li>
+        <li>&nbsp;
+    <!-- BEGIN groups_block -->
+            <table class="section" style="{DISPLAY_GROUPS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/groups/index.php"> <img src="{THEME_URL}/icons/groups.png" alt="{GROUPS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/groups/index.php"><span class="title">{GROUPS}</span></a>
+                    {GROUPS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END groups_block -->
+        </li>
+    </ul>
+</div>
+<!-- END main_block -->
Index: trunk/admin/themes/templates/addons.htt
===================================================================
--- trunk/admin/themes/templates/addons.htt	(nonexistent)
+++ trunk/admin/themes/templates/addons.htt	(revision 2)
@@ -0,0 +1,97 @@
+<!--
+ @version         $Id: addons.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div id="addons">
+    <table style="margin-bottom: 10px; width: 100%;">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2>{ADDONS_OVERVIEW}</h2></td>
+                <td style="float: right; line-height: 3.225em;"><a class="button" href="{URL_ADVANCED}">{TEXT_ADVANCED}</a></td>
+            </tr>
+        </tbody>
+    </table>
+    <ul>
+        <li>{ADDONS_LIST}</li>
+        <li>
+    <!-- BEGIN modules_block -->
+            <table class="section" style="{DISPLAY_MODULES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/modules/index.php"> <img src="{THEME_URL}/icons/modules.png" alt="{MODULES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/modules/index.php"><span class="title">{MODULES}</span></a>
+                    {MODULES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END modules_block -->
+        </li>
+        <li>
+    <!-- BEGIN templates_block -->
+            <table class="section" style="{DISPLAY_MODULES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/templates/index.php"> <img src="{THEME_URL}/icons/templates.png" alt="{TEMPLATES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/templates/index.php"><span class="title">{TEMPLATES}</span></a>
+                    {TEMPLATES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END templates_block -->
+        </li>
+        <li>
+    <!-- BEGIN languages_block -->
+            <table class="section" style="{DISPLAY_LANGUAGES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/languages/index.php"> <img src="{THEME_URL}/icons/languages.png" alt="{LANGUAGES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/languages/index.php"><span class="title">{LANGUAGES}</span></a>
+                    {LANGUAGES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END languages_block -->
+        </li>
+    </ul>
+<!-- BEGIN reload_block -->
+    <table class="section" {DISPLAY_RELOAD} >
+        <tbody>
+        <tr>
+            <td class="graphic" ><img src="{THEME_URL}/icons/admintools.png" alt="{TXT_ADMIN_SETTINGS}" /> </td>
+            <td class="description"><span class="title">{TXT_ADMIN_SETTINGS}</span>
+                <form action="{RELOAD_URL}" method="post">
+                {FTAN}
+                    {MESSAGE_RELOAD_ADDONS}
+                    <br style="margin-bottom: 0.5em" />
+
+                    <input {DISPLAY_MODULES} type="checkbox" name="reload_modules" id="reload_modules" value="true" />
+                    <label {DISPLAY_MODULES} for="reload_modules">{MODULES}</label>
+
+                    <input {DISPLAY_TEMPLATES} type="checkbox" name="reload_templates" id="reload_templates" value="true" />
+                    <label {DISPLAY_TEMPLATES} for="reload_templates">{TEMPLATES}</label>
+
+                    <input {DISPLAY_LANGUAGES} type="checkbox" name="reload_languages" id="reload_languages" value="true" />
+                    <label {DISPLAY_LANGUAGES} for="reload_languages">{LANGUAGES}</label>
+
+                    <input type="submit" name="submit" value="{TEXT_RELOAD}" />
+                </form>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+<!-- END reload_block -->
+
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/admintools.htt
===================================================================
--- trunk/admin/themes/templates/admintools.htt	(nonexistent)
+++ trunk/admin/themes/templates/admintools.htt	(revision 2)
@@ -0,0 +1,27 @@
+<!--
+ @version         $Id: admintools.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<h2>{HEADING_ADMINISTRATION_TOOLS} </h2>
+<div id="admintools">
+    <ul>
+    <!-- BEGIN tool_list_block -->
+    <li>
+        <table class="section" >
+        <tbody>
+        <tr>
+            <td class="graphic" >
+                <a class= "title" href="{ADMIN_URL}/admintools/tool.php?tool={TOOL_DIR}"><img src="{TOOL_ICON}" alt="{TOOL_NAME}" /></a>
+            </td>
+            <td class="description" style=" white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
+                <a href="{ADMIN_URL}/admintools/tool.php?tool={TOOL_DIR}"><span class="title">{TOOL_NAME}</span></a><span>{TOOL_DESCRIPTION}</span>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </li>
+    <!-- END tool_list_block -->
+    </ul>
+    {TOOL_LIST}
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/error.htt
===================================================================
--- trunk/admin/themes/templates/error.htt	(nonexistent)
+++ trunk/admin/themes/templates/error.htt	(revision 2)
@@ -0,0 +1,9 @@
+<!--
+ @version         $Id: error.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div class="error-box rounded" style="margin: 1.225em auto;">
+    <p>{MESSAGE}</p>
+<input type="button" name="submit" value="{BACK}" onclick="window.location = '{LINK}';" />
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/footer.htt
===================================================================
--- trunk/admin/themes/templates/footer.htt	(nonexistent)
+++ trunk/admin/themes/templates/footer.htt	(revision 2)
@@ -0,0 +1,23 @@
+<!--
+ @version         $Id: footer.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN footer_block -->
+    </td>
+</tr>
+</table>
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="100%" style="padding: 10px 0px 10px 0px;">
+<tr>
+    <td style="font-size: 12px; text-align:center;">
+      <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+      <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+      <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+      <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+    </td>
+</tr>
+</table>
+<script src="{THEME_URL}/jquery/jquery-plugins.js" type="text/javascript"></script>
+{BACKEND_BODY_MODULE_JS}
+</body>
+</html>
+<!-- END footer_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/groups.htt
===================================================================
--- trunk/admin/themes/templates/groups.htt	(nonexistent)
+++ trunk/admin/themes/templates/groups.htt	(revision 2)
@@ -0,0 +1,31 @@
+<!--
+ @version         $Id: groups.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<form name="groups" action="groups.php" method="post">
+ {FTAN}
+    <table style="margin-bottom:10px; width: 100%; border-collapse: collapse; white-space-collapsing: collapse; ">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2 class="page_titel">{HEADING_MODIFY_DELETE_GROUP}</h2></td>
+                <td style="float: right; line-height: 3.225em;" >
+                <!-- BEGIN manage_users_block -->
+                    <span><a class="button" href="{ADMIN_URL}/users/index.php">{TEXT_MANAGE_USERS}</a></span>
+                <!-- END manage_users_block -->
+                </td>
+             </tr>
+        </tbody>
+    </table>
+    <button type="button" name="status" title="{TEXT_GROUPS}" style="width: 1.825em; " value="{USER_STATUS}"  class="status {DISPLAY_MODIFY}" >&nbsp;</button>
+    <select name="group_id" style="width: 41.855em;">
+        <!-- BEGIN list_block -->
+        <option value="{VALUE}">
+        {NAME}
+        </option>
+        <!-- END list_block -->
+    </select>
+    <input type="submit" name="modify" style="width: 100px;" value="{TEXT_MODIFY}" class="{DISPLAY_MODIFY}" />
+    <input type="submit" name="delete" style="width: 100px;" value="{TEXT_DELETE}" onclick="return confirm('{CONFIRM_DELETE}');" class="{DISPLAY_DELETE}" />
+</form>
+<h2 style="margin-top: 1.825em;" class="{DISPLAY_ADD}">{HEADING_ADD_GROUP}</h2>
+<!-- END main_block -->
Index: trunk/admin/themes/templates/groups_form.htt
===================================================================
--- trunk/admin/themes/templates/groups_form.htt	(nonexistent)
+++ trunk/admin/themes/templates/groups_form.htt	(revision 2)
@@ -0,0 +1,402 @@
+<!--
+ @version         $Id: groups_form.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<h2 style="{DISPLAY_EXTRA}">{HEADING_MODIFY_GROUP}</h2>
+<div class="block-outer" style="padding: 0.825em;">
+<div class="access-wrapper" style="width: 100%; margin: auto 2.225em;" >
+<form name="group" action="{ACTION_URL}" method="post" class="{DISPLAY_ADD}">
+<input type="hidden" name="advanced" value="{ADVANCED_VALUE}" />
+<input type="hidden" name="group_id" value="{GROUP_ID}" />
+{FTAN}
+<div>{DEBUG_MSG}</div>
+<table style="margin-bottom:10px; width: 43.5%; border-collapse: collapse; white-space-collapsing: collapse; ">
+<tr>
+    <td style="9.225em; text-align: right; padding-right: 0.825em;"><h3>{TEXT_NAME}:</h3></td>
+    <td>
+        <input type="text" name="group_name" maxlength="255" value="{GROUP_NAME}" style="width:98%" />
+    </td>
+</tr>
+</table>
+<!-- BEGIN groups_basic_block -->
+<input type="hidden" name="advanced_extended" value="0" />
+<table class="groups_basic" style="{DISPLAY_BASIC} width: 100%; ">
+<caption style="text-align: left;"><h3>{TEXT_SYSTEM_PERMISSIONS}
+<button class="" type="submit" name="reset_system" value="1">{TEXT_RESET}</button></h3>
+</caption>
+<thead>
+<tr>
+    <th style="width: 5.525em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 8.225em;"></th>
+</tr>
+</thead>
+    <tbody>
+        <tr>
+            <td colspan="">&nbsp;</td>
+            <td>
+                <input type="checkbox" name="pages_view" id="pages_view" value="1" {pages_checked} />
+                <label for="pages_view">{SECTION_PAGES}</label>
+            </td>
+            <td>
+                <input type="checkbox" name="media_view" id="media_view" value="1" {media_checked} />
+                <label for="media_view">{SECTION_MEDIA}</label>
+            </td>
+            <td>
+                <input type="checkbox" name="modules_view" id="modules_view" value="1" {modules_checked} />
+                <label for="modules_view">{SECTION_MODULES}</label>
+            </td>
+            <td>
+                <input type="checkbox" name="templates_view" id="templates_view" value="1" {templates_checked} />
+                <label for="templates_view">{SECTION_TEMPLATES}</label>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="">&nbsp;</td>
+            <td>
+                <input type="checkbox" name="languages_view" id="languages_view" value="1" {languages_checked} />
+                <label for="languages_view">{SECTION_LANGUAGES}</label>
+            </td>
+            <td>        
+                <input type="checkbox" name="settings_basic" id="settings_basic" value="1" {settings_checked} />
+                <label for="settings_basic">{SECTION_SETTINGS}</label>
+            </td>
+            <td>
+                <input type="checkbox" name="users_view" id="users_view" value="1" {users_checked} />
+                <label for="users_view">{SECTION_USERS}</label>
+            </td>
+            <td>
+                <input type="checkbox" name="groups_view" id="groups_view" value="1" {groups_checked} />
+                <label for="groups_view">{SECTION_GROUPS}</label>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="">&nbsp;</td>
+            <td colspan="4">
+                <input type="checkbox" name="admintools" id="admintools" value="1" {admintools_checked} />
+                <label for="admintools">{SECTION_ADMINTOOLS}</label>
+            </td>
+        </tr>
+    </tbody>
+</table>
+<!-- END groups_basic_block -->
+<!-- BEGIN groups_extended_block -->
+<input type="hidden" name="advanced_extended" value="1" />
+<?php  if(@DEBUG){ ?>
+<table style="padding-top: 15px; padding-bottom: 5px;width: 100%; border-collapse: collapse;">
+<tbody>
+<tr style="width:100%; line-height: ;: 1.225em auto;">
+    <td colspan="5">&nbsp;</td>
+</tr>
+<tr style="text-align:center;width:100%; margin: 1.225em auto;">
+    <td colspan="" style="text-align:right;">
+        <input type="submit" name="save" value="{SUBMIT_TITLE}" />
+    </td>
+    <td style="text-align:left;">
+        <input type="reset" name="reset" value="{TEXT_RESET}" />
+    </td>
+    <td>
+        <input type="submit" name="cancel" value="{TEXT_CANCEL}" />
+    </td>
+</tr>
+</tbody>
+</table>
+<?php } ?>
+<table class="groups_adv" style="width: 100%; border-collapse: collapse;">
+<caption style="text-align: left;"><h3>{TEXT_SYSTEM_PERMISSIONS}
+<button class="href" type="submit" name="reset_system" value="1">({TEXT_RESET})</button></h3>
+</caption>
+<thead>
+<tr>
+    <th style="width: 9.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 0.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 0.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 0.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 0.225em;"></th>
+    <th style="width: 8.225em;"></th>
+    <th style="width: 0.225em;"></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_PAGES}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="pages_view" id="pages_view" type="checkbox" value="1" {pages_view_checked} />
+    <label for="pages_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="pages_add" id="pages_add" type="checkbox" value="1" {pages_add_checked} />
+    <label for="pages_add">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="pages_add_l0" id="pages_add_l0" type="checkbox" value="1" {pages_add_l0_checked} />
+    <label for="pages_add_l0">{TEXT_LEVEL} 0</label></td>
+    <td ></td>
+    <td><input name="pages_settings" id="pages_settings" type="checkbox" value="1" {pages_settings_checked} />
+    <label for="pages_settings">{TEXT_MODIFY_SETTINGS}</label></td>
+    <td></td>
+    <td><input name="pages_modify" id="pages_modify" type="checkbox" value="1" {pages_modify_checked} />
+    <label for="pages_modify">{TEXT_MODIFY_CONTENT}</label></td>
+    <td></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="pages_intro" id="pages_intro" type="checkbox" value="1" {pages_intro_checked} /><label for="pages_intro">{HEADING_MODIFY_INTRO_PAGE}</label></td>
+    <td></td>
+    <td><input name="pages_delete" id="pages_delete" type="checkbox" value="1" {pages_delete_checked} /><label for="pages_delete">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="6">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_MEDIA}</h3></td>
+</tr>
+<tr>
+    <td>&nbsp;</td>
+    <td><input name="media_view" id="media_view" type="checkbox" value="1" {media_view_checked} /><label for="media_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="media_upload" id="media_upload" type="checkbox" value="1" {media_upload_checked} /><label for="media_upload">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="media_rename" id="media_rename" type="checkbox" value="1" {media_rename_checked} /><label for="media_rename">{TEXT_RENAME}</label></td>
+    <td></td>
+    <td><input name="media_create" id="media_create" type="checkbox" value="1" {media_create_checked} /><label for="media_create">{TEXT_CREATE_FOLDER}</label></td>
+    <td></td>
+    <td><input name="media_delete" id="media_delete" type="checkbox" value="1" {media_delete_checked} /><label for="media_delete">{TEXT_DELETE}</label></td>
+    <td></td>
+</tr>
+<tr>
+    <td>&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_MODULES}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="modules_view" id="modules_view" type="checkbox" value="1" {modules_view_checked} /><label for="modules_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="modules_install" id="modules_install" type="checkbox" value="1" {modules_install_checked} /><label for="modules_install">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="modules_uninstall" id="modules_uninstall" type="checkbox" value="1" {modules_uninstall_checked} /><label for="modules_uninstall">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="4">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_TEMPLATES}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="templates_view" id="templates_view" type="checkbox" value="1" {templates_view_checked} /><label for="templates_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="templates_install" id="templates_install" type="checkbox" value="1" {templates_install_checked} /><label for="templates_install">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="templates_uninstall" id="templates_uninstall" type="checkbox" value="1" {templates_uninstall_checked} /><label for="templates_uninstall">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="4">&nbsp;</td>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_LANGUAGES}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td>
+    <input name="languages_view" id="languages_view" type="checkbox" value="1" {languages_view_checked} />
+    <label for="languages_view">{TEXT_VIEW}</label>
+    </td>
+    <td></td>
+    <td><input name="languages_install" id="languages_install" type="checkbox" value="1" {languages_install_checked} /><label for="languages_install">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="languages_uninstall" id="languages_uninstall" type="checkbox" value="1" {languages_uninstall_checked} /><label for="languages_uninstall">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="4">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_SETTINGS}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="settings_basic" id="settings_basic" type="checkbox" value="1" {settings_basic_checked} /><label for="settings_basic">{TEXT_BASIC}</label></td>
+    <td></td>
+    <td><input name="settings_advanced" id="settings_advanced" type="checkbox" value="1" {settings_advanced_checked} /><label for="settings_advanced">{TEXT_ADVANCED}</label></td>
+    <td></td>
+    <td colspan="6">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_ADMINTOOLS}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="admintools" id="admintools_settings" type="checkbox" value="1" {admintools_checked} />
+    <label for="admintools_settings">{TEXT_MODIFY_SETTINGS}</label></td>
+    <td></td>
+    <td colspan="8">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_USERS}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="users_view" id="users_view" type="checkbox" value="1" {users_view_checked} />
+    <label for="users_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="users_add" id="users_add" type="checkbox" value="1" {users_add_checked} /><label for="users_add">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="users_modify" id="users_modify" type="checkbox" value="1" {users_modify_checked} /><label for="users_modify">{TEXT_MODIFY}</label></td>
+    <td></td>
+    <td><input name="users_delete" id="users_delete" type="checkbox" value="1" {users_delete_checked} /><label for="users_delete">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="2">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td colspan="10"><h3>{SECTION_GROUPS}</h3></td>
+</tr>
+<tr>
+    <td colspan="">&nbsp;</td>
+    <td><input name="groups_view" id="groups_view" type="checkbox" value="1" {groups_view_checked} />
+    <label for="groups_view">{TEXT_VIEW}</label></td>
+    <td></td>
+    <td><input name="groups_add" id="groups_add" type="checkbox" value="1" {groups_add_checked} /><label for="groups_add">{TEXT_ADD}</label></td>
+    <td></td>
+    <td><input name="groups_modify" id="groups_modify" type="checkbox" value="1" {groups_modify_checked} /><label for="groups_modify">{TEXT_MODIFY}</label></td>
+    <td></td>
+    <td><input name="groups_delete" id="groups_delete" type="checkbox" value="1" {groups_delete_checked} /><label for="groups_delete">{TEXT_DELETE}</label></td>
+    <td></td>
+    <td colspan="2">&nbsp;</td>
+</tr>
+<tr style="width:100%; line-height: ;: 1.225em auto;">
+    <td colspan="11">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table style="padding-top: 15px; padding-bottom: 5px;width: 100%; border-collapse: collapse;">
+<tbody>
+<tr style="width:100%; line-height: ;: 1.225em auto;">
+    <td colspan="5">&nbsp;</td>
+</tr>
+<tr style="text-align:center;width:100%; margin: 1.225em auto;">
+    <td colspan="2" style="text-align:right;">
+        <input type="submit" name="save" value="{SUBMIT_TITLE}" />
+    </td>
+    <td style="text-align:left;">
+        <input type="reset" name="reset" value="{TEXT_RESET}" />
+    </td>
+    <td>
+        <input type="submit" name="cancel" value="{TEXT_CANCEL}" />
+    </td>
+</tr>
+<tr style="width:100%; line-height: ;: 1.225em auto;">
+    <td colspan="5">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<!-- END groups_extended_block -->
+</div>
+</div>
+<div class="block-outer" style="padding: 0.825em;">
+<div class="access-wrapper" style="width: 100%; margin: auto 2.225em;" >
+<table style="padding-top: 15px; padding-bottom: 5px; border-collapse: collapse; float: left;">
+<tbody>
+<tr>
+    <td colspan="3">
+      <h3>{TEXT_MODULE_PERMISSIONS}:
+      <button class="" type="submit" name="reset_modules" value="1">{TEXT_RESET}</button></h3>
+      
+    </td>
+</tr>
+<tr>
+    <td style=" padding-left: 11.225em;">&nbsp;</td>
+    <td>
+        <ul style="margin: 0; padding: 0; list-style: none;">
+            <!-- BEGIN module_list_block -->
+                <!-- BEGIN module_group_block -->
+                <li class="group-title">
+                    {OPTGROUP}
+                </li>
+                <!-- END module_group_block -->
+                <li>
+                    <input type="checkbox" name="module_permissions[]" id="m_{VALUE}" value="{VALUE}" {CHECKED} />
+                    <label for="m_{VALUE}">{NAME}</label>
+                </li>
+            <!-- END module_list_block -->
+        </ul>
+    </td>
+</tr>
+</tbody>
+</table>
+
+<table style="padding-top: 15px; padding-bottom: 5px;width: 48%; border-collapse: collapse;float: none;">
+<tbody>
+<tr>
+    <td colspan="3">
+       <h3>{TEXT_TEMPLATE_PERMISSIONS}:
+      <button class="" type="submit" name="reset_templates" value="1">{TEXT_RESET}</button></h3>
+    </td>
+</tr>
+<tr>
+    <td style=" padding-left: 11.225em;">&nbsp;</td>
+    <td>
+        <ul style="margin: 0; padding: 0; list-style: none;">
+            <!-- BEGIN template_list_block -->
+                <!-- BEGIN template_group_block -->
+                <li class="group-title">
+                    {OPTGROUP}
+                </li>
+                <!-- END template_group_block -->
+            <li>
+                <input type="checkbox" name="template_permissions[]" id="t_{VALUE}" value="{VALUE}" {CHECKED} />
+                <label for="t_{VALUE}">{NAME}</label>
+            </li>
+            <!-- END template_list_block -->
+        </ul>
+    </td>
+</tr>
+</tbody>
+</table>
+</div>
+<table style="padding-top: 15px; padding-bottom: 5px;width: 100%; border-collapse: collapse;">
+<tbody>
+<tr style="width:100%; line-height: ;: 1.225em auto;">
+    <td colspan="5">&nbsp;</td>
+</tr>
+<tr style="text-align:center;width:100%; margin: 1.225em auto;">
+    <td colspan="" style="text-align:right;">
+        <input type="submit" name="save" value="{SUBMIT_TITLE}" />
+    </td>
+    <td style="text-align:left;">
+        <input type="reset" name="reset" value="{TEXT_RESET}" />
+    </td>
+    <td>
+        <input type="submit" name="cancel" value="{TEXT_CANCEL}" />
+    </td>
+</tr>
+</tbody>
+</table>
+</form>
+</div>
+
+<form name="advanced" action="{ADVANCED_LINK}" method="post">
+    <input type="hidden" name="group_id" value="{GROUP_ID}" />
+    <input type="hidden" name="action" value="modify" />
+    {FTAN}
+    <table style="width: 100%; border-collapse: collapse;" >
+<tr style="text-align:center;width:100%; margin: 1.225em auto;">
+    <td colspan="">&nbsp;</td>
+</tr>
+    <tr>
+        <td style="text-align:left;">
+            <button type="submit" name="advanced" onclick="window.location = '{ADVANCED_LINK}';" value="{ADVANCED_VALUE}" >{ADVANCED_BUTTON}</button>
+        </td>
+    </tr>
+    </table>
+    </form>
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/header.htt
===================================================================
--- trunk/admin/themes/templates/header.htt	(nonexistent)
+++ trunk/admin/themes/templates/header.htt	(revision 2)
@@ -0,0 +1,75 @@
+<!-- BEGIN header_block -->
+<!DOCTYPE HTML>
+<html lang="{LANGUAGE}">
+<!--
+ @version         $Id: header.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<meta charset="utf-8" />
+<title>{WEBSITE_TITLE} >> {TEXT_ADMINISTRATION} - {SECTION_NAME}</title>
+<meta name="description" content="{TEXT_ADMINISTRATION}" />
+<meta name="keywords" content="{TEXT_ADMINISTRATION}" />
+<meta name="author" content="WebsiteBaker Org e.V." />
+<meta http-equiv="Content-Encoding" content="gzip" />
+<meta http-equiv="Accept-Encoding" content="gzip, deflate" />
+<link href="{THEME_URL}/theme.css" rel="stylesheet" type="text/css" />
+{BACKEND_MODULE_CSS}
+<script type="text/javascript">
+var WB_URL = '{WB_URL}';
+var THEME_URL = '{THEME_URL}';
+var TEMPLATE = '{TEMPLATE}';
+var ADMIN_URL = '{ADMIN_URL}';
+var EDITOR = '{EDITOR}';
+</script>
+<script src="{WB_URL}/include/jquery/domReady.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/LoadOnFly.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-min.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-insert.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-include.js" type="text/javascript"></script>
+<!--[if lt IE 7]><script type="text/javascript" src="{WB_URL}/include/jquery/plugins/jquery-pngFix.js"></script><![endif]-->
+{BACKEND_MODULE_JS}
+</head>
+<table summary="" class="header">
+<tr>
+    <td>
+        <a href="{ADMIN_URL}" title="{TITLE_START}"><img src="{THEME_URL}/images/logo.png"  alt="Logo" /></a>
+    </td>
+    <td>&nbsp;</td>
+    <td class="menue" style="white-space: nowrap;">
+         <a href="{ADMIN_URL}" title="{TITLE_START}"><img src="{THEME_URL}/images/home.png" alt="{TITLE_START}" /></a>
+         &nbsp;&nbsp;<a href="{URL_VIEW}" target="_blank" title="{TITLE_VIEW}"><img src="{THEME_URL}/images/view.png" alt="{WB_URL}" /></a>
+         &nbsp; <a href="{URL_HELP}" target="_blank" title="{TITLE_HELP}"><img src="{THEME_URL}/images/help.png" alt="{TITLE_HELP}" /></a>
+         &nbsp; <a href="{ADMIN_URL}/logout" title="{TITLE_LOGOUT}"><img src="{THEME_URL}/images/dl.png" alt="{TITLE_LOGOUT}" /></a>
+    </td>
+    <td class="version" style="white-space: normal; float: right; margin-top: 1.5em;">
+      <!-- BEGIN infoBlockBasis -->
+      <ul class="infoBlockBasis" style="width: 23.5em;">
+          <li>WB Version {VERSION}+{SP}</li>
+          <li></li>
+          <li>{SERVER_ADDR1}</li>
+      </ul>
+      <!-- END infoBlockBasis -->
+      <!-- BEGIN infoBlockExented -->
+      <ul class="infoBlockExented" >
+          <li>WB Version {VERSION}+{SP}</li>
+          <li>PHP Version {PHP_VERSION}</li>
+          <li>SQL Server Version {MYSQLI_VERSION} ( {MYSQLSTRICT} )</li>
+      </ul>
+      <!-- END infoBlockExented -->
+    </td>
+</tr>
+</table>
+
+<table summary="" class="container">
+<tr>
+    <td>
+        <ul class="menu">
+            <!-- BEGIN linkBlock -->
+            <li class="{CLASS}"><a href="{LINK}" target="{TARGET}">{TITLE}</a></li>
+            <!-- END linkBlock -->
+        </ul>
+    </td>
+</tr>
+<tr>
+    <td class="content">
+<!-- END header_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/languages.htt
===================================================================
--- trunk/admin/themes/templates/languages.htt	(nonexistent)
+++ trunk/admin/themes/templates/languages.htt	(revision 2)
@@ -0,0 +1,99 @@
+<!--
+ @version         $Id: languages.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: left;">{CHANGE_TEMPLATE_NOTICE}</td>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_template_block -->
+                <span><a class="button" href="{URL_TEMPLATES}">{MENU_TEMPLATES}</a> </span>
+                -
+    <!-- END addon_template_block -->
+    <!-- BEGIN addon_module_block -->
+                <span><a class="button" href="{URL_MODULES}">{MENU_MODULES}</a> </span>
+                -
+    <!-- END addon_module_block -->
+    <!-- BEGIN addon_language_block -->
+                <span class="button" style="min-width: 8.525em;">{URL_ADVANCED}</span>
+    <!-- END addon_language_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+
+<!-- BEGIN language_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+{FTAN}
+    <h2>{HEADING_INSTALL_LANGUAGE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td style="line-height: 3.525em;">
+                <input type="file" name="userfile" size="97" />
+                <script type="text/javascript">
+                document.install.userfile.focus();
+                </script>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_INSTALL}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_install_block -->
+
+<!-- BEGIN language_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+    <h2>{HEADING_UNINSTALL_LANGUAGE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select name="code" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN language_uninstall_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END language_uninstall_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_UNINSTALL}"  style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_uninstall_block -->
+
+<!-- BEGIN language_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+    <h2>{HEADING_LANGUAGE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select name="code" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN language_detail_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END language_detail_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_detail_block -->
+
+<!-- END main_block -->
Index: trunk/admin/themes/templates/languages_details.htt
===================================================================
--- trunk/admin/themes/templates/languages_details.htt	(nonexistent)
+++ trunk/admin/themes/templates/languages_details.htt	(revision 2)
@@ -0,0 +1,35 @@
+<!--
+ @version         $Id: languages_details.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_LANGUAGE_DETAILS}</h2>
+
+<table summary="" cellpadding="5" cellspacing="0" border="0">
+<tr>
+    <td width="100">{TEXT_NAME}:</td>
+    <td>{NAME}</td>
+</tr>
+<tr>
+    <td>{TEXT_CODE}:</td>
+    <td>{CODE}</td>
+</tr>
+<tr>
+    <td>{TEXT_AUTHOR}:</td>
+    <td>{AUTHOR}</td>
+</tr>
+<tr>
+    <td>{TEXT_VERSION}:</td>
+    <td>{VERSION}</td>
+</tr>
+<tr>
+    <td>{TEXT_DESIGNED_FOR}:</td>
+    <td>Website Baker {DESIGNED_FOR}</td>
+</tr>
+</table>
+
+<br />
+
+<button onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/login.htt
===================================================================
--- trunk/admin/themes/templates/login.htt	(nonexistent)
+++ trunk/admin/themes/templates/login.htt	(revision 2)
@@ -0,0 +1,114 @@
+<!-- BEGIN mainBlock -->
+<!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">
+<!--
+ @version         $Id: login.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>{TEXT_LOGIN}</title>
+<meta http-equiv="content-type" content="text/html; charset={CHARSET}" />
+<meta http-equiv="content-language" content="{LANGUAGE}" />
+<meta name="description" content="{TEXT_LOGIN}" />
+<meta name="keywords" content="{TEXT_LOGIN}" />
+<link href="{THEME_URL}/theme.css" rel="stylesheet" type="text/css" />
+</head>
+<body onload="document.login.{USERNAME_FIELDNAME}.focus();">
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="770" align="center">
+<tr>
+    <td width="60" valign="top">
+        <img src="{THEME_URL}/images/logo.png" alt="Logo" />
+    </td>
+    <td width="5">&nbsp;</td>
+    <td>&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="3">&nbsp;</td>
+</tr>
+<tr>
+    <td colspan="3" style="font-size: 20px; text-align: center; ">
+        <span style="color: #003366;">{SECTION_LOGIN}</span>
+    </td>
+</tr>
+</table>
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="770" align="center" style="margin-top: 30px;" class="container">
+<tr>
+    <td class="content">
+    <form name="login" action="{ACTION_URL}" method="post">
+    <input type="hidden" name="url" value="{URL}" />
+    <input type="hidden" name="username_fieldname" value="{USERNAME_FIELDNAME}" />
+    <input type="hidden" name="password_fieldname" value="{PASSWORD_FIELDNAME}" />
+        <table summary="" cellpadding="5" cellspacing="0" border="0" align="center" width="500">
+        <tr>
+            <td height="40" align="center" colspan="2">{MESSAGE}</td>
+        </tr>
+        <tr>
+            <td height="10" colspan="2"></td>
+        </tr>
+        <tr>
+            <td width="170" height="30" align="right">{TEXT_USERNAME}:</td>
+            <td><input type="text" maxlength="{MAX_USERNAME_LEN}" name="{USERNAME_FIELDNAME}" value="{USERNAME}" style="width: 180px;" /></td>
+        </tr>
+        <tr>
+            <td width="170" height="30" align="right">{TEXT_PASSWORD}:</td>
+            <td><input type="password" maxlength="{MAX_PASSWORD_LEN}" name="{PASSWORD_FIELDNAME}" style="width: 180px;" /></td>
+        </tr>
+        <tr style="{DISPLAY_REMEMBER_ME}">
+            <td>&nbsp;</td>
+            <td>
+                <input type="checkbox" name="remember" id="remember" value="true" />
+                <label for="remember">
+                    {TEXT_REMEMBER_ME}
+                </label>
+            </td>
+        </tr>
+        <tr>
+            <td>&nbsp;</td>
+            <td><input type="submit" name="submit" value="{TEXT_LOGIN}" style="width: 180px; font-size: 10px; text-transform: uppercase; color: #003366; border: 1px solid #336699; background-color: #DDDDDD; padding: 3px;" /></td>
+        </tr>
+        <tr>
+            <td height="10" colspan="2"></td>
+        </tr>
+        </table>
+    </form>
+
+    <center>
+        <a href="{FORGOTTEN_DETAILS_APP}">{TEXT_FORGOTTEN_DETAILS}</a>
+        <br />
+        <br />
+        <br />
+        <a target="_blank" href="{WB_URL}/">{TEXT_HOME}</a>
+    </center>
+
+    </td>
+</tr>
+</table>
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="100%" style="padding: 10px 0px 10px 0px;">
+<tr>
+    <td style="font-size:12px;text-align:center;">
+      <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+      <a href="http://www.websitebaker2.org/" title="external">WebsiteBaker</a> is released under the
+      <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+      <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+    </td>
+</tr>
+</table>
+<script type="text/javascript">
+<!--
+    elm = document.getElementsByTagName('form');
+    console.info(elm);
+      for (i=0; elm[i]; i++) {
+        if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+            elm[i].setAttribute('autocomplete', 'off');
+        }
+        if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+            elm[i].setAttribute('accept-charset', 'utf-8');
+        }
+      }
+-->
+</script>
+</body>
+</html>
+<!-- END mainBlock -->
\ No newline at end of file
Index: trunk/admin/themes/templates/login_forgot.htt
===================================================================
--- trunk/admin/themes/templates/login_forgot.htt	(nonexistent)
+++ trunk/admin/themes/templates/login_forgot.htt	(revision 2)
@@ -0,0 +1,99 @@
+<!-- BEGIN main_block -->
+<!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">
+<!--
+ @version         $Id: login_forgot.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>Retrieve Login Details</title>
+<meta http-equiv="content-type" content="text/html; charset={CHARSET}" />
+<meta http-equiv="content-language" content="{LANGUAGE}" />
+<meta name="description" content="Retrieve Login Details" />
+<meta name="keywords" content="Retrieve Login Details" />
+<link href="{THEME_URL}/theme.css" rel="stylesheet" type="text/css" />
+</head>
+<body onload="document.forgot_pass.email.focus();">
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="770" align="center">
+<tr>
+   <td width="60" valign="top">
+      <img src="{THEME_URL}/images/logo.png" alt="Logo" />
+   </td>
+   <td width="5">&nbsp;</td>
+   <td>&nbsp;</td>
+</tr>
+<tr>
+   <td colspan="3">&nbsp;</td>
+</tr>
+<tr>
+   <td colspan="3" style="font-size: 20px; text-align: center;">
+      <font style="color: #003366;">{SECTION_FORGOT}</font>
+   </td>
+</tr>
+</table>
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="770" align="center" style="margin-top: 30px;" class="container">
+<tr>
+   <td class="content">
+
+   <form name="forgot_pass" action="{ACTION_URL}" method="post">
+   <input type="hidden" name="url" value="{URL}" />
+      <table summary="" cellpadding="5" cellspacing="0" border="0" align="center" width="500">
+      <tr>
+         <td height="40" align="center" style="color: #{MESSAGE_COLOR}" colspan="2">{MESSAGE}</td>
+      </tr>
+      <tr style="{DISPLAY_FORM}">
+         <td height="10" colspan="2"></td>
+      </tr>
+      <tr style="{DISPLAY_FORM}">
+         <td width="165" height="30" align="right">{TEXT_EMAIL}:</td>
+         <td><input type="text" maxlength="255" name="email" value="{EMAIL}" style="width: 180px;" /></td>
+      </tr>
+      <tr style="{DISPLAY_FORM}" height="30">
+         <td>&nbsp;</td>
+         <td><input type="submit" name="submit" value="{TEXT_SEND_DETAILS}" style="width: 180px; font-size: 10px; text-transform: uppercase; color: #003366; border: 1px solid #336699; background-color: #DDDDDD; padding: 3px;"></td>
+      </tr>
+      <tr style="{DISPLAY_FORM}">
+         <td height="10" colspan="2"></td>
+      </tr>
+      </table>
+   </form>
+
+   <center>
+      <a href="{LOGIN_URL}">{TEXT_NEED_TO_LOGIN}</a>
+      <br />
+      <br />
+      <a href="{WB_URL}/">{TEXT_HOME}</a>
+   </center>
+
+   </td>
+</tr>
+</table>
+
+<table summary="" cellpadding="0" cellspacing="0" border="0" width="100%" style="padding: 10px 0px 10px 0px;">
+<tr>
+   <td style="font-size:12px;text-align:center;">
+      <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+      <a href="http://www.websitebaker2.org/" title="external">WebsiteBaker</a> is released under the
+      <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+      <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+   </td>
+</tr>
+</table>
+<script type="text/javascript">
+<!--
+    elm = document.getElementsByTagName('form');
+    console.info(elm);
+      for (i=0; elm[i]; i++) {
+        if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+            elm[i].setAttribute('autocomplete', 'off');
+        }
+        if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+            elm[i].setAttribute('accept-charset', 'utf-8');
+        }
+      }
+-->
+</script>
+</body>
+</html>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/media.htt
===================================================================
--- trunk/admin/themes/templates/media.htt	(nonexistent)
+++ trunk/admin/themes/templates/media.htt	(revision 2)
@@ -0,0 +1,126 @@
+<!--
+ @version         $Id: media.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<script src="{THEME_URL}/jquery/toggle_zip.js" type="text/javascript"></script>
+
+<table  style="width:100%;">
+  <tr>
+    <td style="width: 40%;" >
+    <h2>{HEADING_UPLOAD_FILES}</h2>
+      <form name="upload" action="upload.php" method="post" enctype="multipart/form-data" class="{DISPLAY_UPLOAD}">
+        {FTAN}
+        <table style="width: 90%;">
+          <tr>
+            <td>{TEXT_TARGET_FOLDER}:<br />
+              <select name="target" id="target" style="width:100%;"
+           onchange="browse.location.href='browse.php?dir=' +
+               document.upload.target.value.substr(6,100);
+           document.create.target.value = document.upload.target.value;">
+                <option value="{MEDIA_DIRECTORY}{HOME_DIRECTORY}" selected="selected">{MEDIA_DIRECTORY}{HOME_DIRECTORY}</option>
+                <!-- BEGIN dir_list_block -->
+                <option value="{NAME}">{NAME}</option>
+                <!-- END dir_list_block -->
+              </select>
+            </td>
+          </tr>
+        </table>
+        <table  style="width: 90%;">
+          <tr>
+              <td >
+                <input type="checkbox" name="unzip" id="unzip"  onclick="toggle();" />
+                <label for="unzip">{TEXT_UNZIP_FILE}</label>
+                <span id="delzip" style="display: none;"><br />
+                <input type="checkbox" name="delzip" id="deletezip" />
+                <label for="deletezip">{TEXT_DELETE_ZIP}</label></span>
+            </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file1" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file2" id="file2" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file3" id="file3" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file4" id="file4" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file5" id="file5" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file6" id="file6" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file7" id="file7" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file8" id="file8" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file9" id="file9" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file10" id="file10" style="visibility: visible;" /> </td>
+          </tr>
+        </table>
+
+        <table  style="width: 90%;">
+          <tr>
+            <td colspan="2"><input type="checkbox" name="overwrite" id="overwrite" value="yes" />
+              <label for="overwrite">{TEXT_OVERWRITE_EXISTING} {TEXT_FILES}</label><br />
+              <input type="submit" name="submit" value="{TEXT_UPLOAD_FILES}" style="width:160px; margin-top:5px; " />
+            </td>
+          </tr>
+        </table>
+      </form>
+<!--
+If you want to HIDE the option of creating folders in the Media-folder (for your clients, for example),
+please set the class below to "hide", else to "show".
+-->
+      <div class="show">
+      <br /><br />
+        <form name="create" action="create.php" method="post" class="{DISPLAY_CREATE}">
+        {FTAN}
+          <h2>{HEADING_CREATE_FOLDER}</h2>
+          <table  style="width: 92%;">
+            <tr>
+              <td>{TEXT_NAME}:<br />
+              <input type="text" name="name" style="width: 98%;" /></td>
+            </tr>
+          </table>
+          <table style="width: 90%;">
+            <tr>
+              <td>{TEXT_TARGET_FOLDER}:<br />
+                <select name="target" style="width: 100%;">
+                  <option value="{MEDIA_DIRECTORY}{HOME_DIRECTORY}" selected="selected">{MEDIA_DIRECTORY}{HOME_DIRECTORY}</option>
+                  <!-- BEGIN dir_list_block -->
+                  <option value="{NAME}">{NAME} </option>
+                  <!-- END dir_list_block -->
+                </select>
+              </td>
+            </tr>
+          </table>
+          <table >
+            <tr>
+              <td><input type="submit" name="submit" value="{TEXT_CREATE_FOLDER}" style="width:160px;" />
+              </td>
+            </tr>
+          </table>
+        </form>
+      </div>
+      <!-- END main_block -->
+    </td>
+    <td >&nbsp;</td>
+    <td class="media_right" style="width: 100%; float: right;">
+    <h2 style="padding-left:3px;">{HEADING_BROWSE_MEDIA}</h2>
+    <span class="{DISPLAY_SETTINGS}" style="margin-bottom:2px;">{OPTIONS}:&nbsp;
+    <a class="{DISPLAY_SETTINGS}" href="setparameter.php" target="browse">{CHANGE_SETTINGS}</a>&nbsp;&nbsp;|&nbsp;
+    <a href="browse.php?dir={CURRENT_DIR}" target="browse">{TEXT_RELOAD}</a>
+    </span>
+    <iframe name="browse" width="99%" height="550" src="browse.php" scrolling="yes" frameborder="0" style="border:1px solid #333;"></iframe>
+    </td>
+  </tr>
+</table>
Index: trunk/admin/themes/templates/media_browse.htt
===================================================================
--- trunk/admin/themes/templates/media_browse.htt	(nonexistent)
+++ trunk/admin/themes/templates/media_browse.htt	(revision 2)
@@ -0,0 +1,65 @@
+<!--
+ @version         $Id: media_browse.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<!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>Browse Media</title>
+<link href="{THEME_URL}/browse.css" rel="stylesheet" type="text/css" />
+<script type="text/javascript">
+function confirm_link(message, url) {
+    if(confirm(message)) location.href = url;
+}
+</script>
+<script type="text/javascript" src="overlib.js"></script>
+</head>
+<body onload="parent.document.create.target.value = '{MEDIA_DIRECTORY}{CURRENT_DIR}'; parent.document.upload.target.value = '{MEDIA_DIRECTORY}{CURRENT_DIR}';">
+
+<table style="border-bottom: 1px solid #666;width: 100%; height: 1.9525em; border-collapse: collapse;">
+    <tbody style="position: relative; width: 100%; height: 2.225em; padding: 0.925em 0; ">
+        <tr style="background-color: #DDD; width: 100%;">
+            <td  style="text-align: left; padding: 0.925em 0; padding-left: 1.0525em; width: 1.725em; ">
+                <a href="{PARENT_DIR_LINK}"><img src="{THEME_URL}/images/up_folder_16.png"  class="{DISPLAY_UP_ARROW}" alt="^" /></a>
+            </td>
+            <td style="width: 10%;padding: 0.925em 0;">
+                <a href="{PARENT_DIR_LINK}" class="{DISPLAY_UP_ARROW}">{TEXT_UP}</a>
+            </td>
+            <td style="float: left; padding: 0.925em 0; padding-left: 0.725em; ">
+                <strong>{TEXT_CURRENT_FOLDER}: {MEDIA_DIRECTORY}{CURRENT_DIR}</strong>
+            </td>
+        </tr>
+    </tbody>
+</table>
+<div style="position: fixed;"></div>
+<table class="{DISPLAY_LIST_TABLE}" style="width: 100%; position: relative;">
+<tbody>
+<!-- BEGIN list_block -->
+<tr style="background-color: #{ROW_BG_COLOR};">
+    <td width="18" style="padding-left: 10px;">
+        <a href="{LINK}" target="{LINK_TARGET}"><img {MOUSEOVER} src="{FT_ICON}" class="{DISPLAY_ICON}"  alt="" /></a>
+    </td>
+    <td>
+        <a {MOUSEOVER} href="{LINK}" target="{LINK_TARGET}">{NAME}</a>
+    </td>
+    <td width="120">
+        <small>{IMAGEDETAIL}<br />{DATE}</small>
+    </td>
+    <td width="60" align="right" class="{DISPLAY_RENAME}">
+        <a href="rename.php?dir={CURRENT_DIR}&amp;id={TEMP_ID}"><img src="{THEME_URL}/images/modify_16.png" alt="{TEXT_RENAME}" /> </a> &nbsp;&nbsp;
+        <a href="#" onclick="javascript: confirm_link('{CONFIRM_DELETE}\n {NAME_SLASHED}', 'delete.php?dir={CURRENT_DIR}&amp;id={TEMP_ID}');"><img src="{THEME_URL}/images/delete_16.png" alt="{TEXT_DELETE}"  /></a>&nbsp;&nbsp;
+    </td>
+   <td width="16" align="right" class="">
+       <img src="{THEME_URL}/images/{IMAGE_EXIST}" title="{IMAGE_TITLE}" alt="{IMAGE_TITLE}" />
+   </td>
+</tr>
+<!-- END list_block -->
+</tbody>
+</table>
+
+<font class="{DISPLAY_NONE_FOUND}"><br />&nbsp;&nbsp;{NONE_FOUND}</font>
+</body>
+</html>
+
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/media_rename.htt
===================================================================
--- trunk/admin/themes/templates/media_rename.htt	(nonexistent)
+++ trunk/admin/themes/templates/media_rename.htt	(revision 2)
@@ -0,0 +1,57 @@
+<!--
+ @version         $Id: media_rename.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<!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>Rename Media</title>
+<link href="{THEME_URL}/media.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+
+<!-- BEGIN main_block -->
+
+<style>
+.hide {display:none;}
+</style>
+
+<form name="rename" action="rename2.php" method="post">
+<input type="hidden" name="dir" value="{DIR}" />
+<input type="hidden" name="old_name" value="{FILENAME}" />
+<input type="hidden" name="id" value="{FILE_ID}" />
+<input type="hidden" name="extension" value="{EXTENSION}" />
+{FTAN}
+<table summary="" cellpadding="5" cellspacing="0" border="0" width="400" align="center">
+<tr>
+    <td align="center" colspan="2">{TEXT_RENAME} '{FILENAME}' {TEXT_TO}:</td>
+</tr>
+<tr>
+    <td>
+        <input type="text" name="name" style="width: 100%;" value="{BASENAME}" />
+        <script type="text/javascript">
+        document.rename.name.focus();
+        </script>
+    </td>
+    <td class="{DISPlAY_EXTENSION}" style="width: 10%;">
+        <span>{EXTENSION}</span>
+    </td>
+</tr>
+<tr>
+    <td colspan="2">
+        <input type="submit" name="submit" value="{TEXT_RENAME}" style="width: 49%;" />
+        <input type="button" name="cancel" value="{TEXT_CANCEL}" style="width: 49%;" onclick="javascript: window.location = 'browse.php?dir={DIR}';" />
+    </td>
+</tr>
+</table>
+
+</form>
+
+</td>
+</tr>
+</table>
+
+</body>
+</html>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/modules.htt
===================================================================
--- trunk/admin/themes/templates/modules.htt	(nonexistent)
+++ trunk/admin/themes/templates/modules.htt	(revision 2)
@@ -0,0 +1,177 @@
+<!--
+ @version         $Id: modules.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_template_block -->
+                <span><a class="button" href="{URL_TEMPLATES}">{MENU_TEMPLATES}</a> </span>
+                -
+    <!-- END addon_template_block -->
+    <!-- BEGIN addon_language_block -->
+                <span ><a class="button" href="{URL_LANGUAGES}">{MENU_LANGUAGES}</a></span>
+                -
+    <!-- END addon_language_block -->
+    <!-- BEGIN addon_module_block -->
+                <span ><a class="button" href="{URL_ADVANCED}">{TEXT_ADVANCED}</a></span>
+    <!-- END addon_module_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+
+<!-- BEGIN module_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+{FTAN}
+    <h2>{HEADING_INSTALL_MODULE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td >
+                <input type="file" name="userfile" size="97" />
+                <script type="text/javascript">
+                document.install.userfile.focus();
+                </script><br />
+                <input type="checkbox" name="overwrite" value="false"  />
+                <span>{OVERWRITE_NEWER_FILES}</span>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_INSTALL}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_install_block -->
+
+<!-- BEGIN module_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+    <h2>{HEADING_UNINSTALL_MODULE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select name="file" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN module_uninstall_select_block -->
+                    <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                  <!-- END module_uninstall_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_UNINSTALL}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_uninstall_block -->
+
+<!-- BEGIN module_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+    <h2>{HEADING_MODULE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select name="file" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN module_detail_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END module_detail_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_detail_block -->
+
+<!-- BEGIN module_advanced_block -->
+<div class="{DISPLAY_MANUAL_INSTALL}">
+    <h2>{HEADING_INVOKE_MODULE_FILES}</h2>
+    <p>{TEXT_MANUAL_INSTALLATION}</p>
+<!-- BEGIN manuell_install_block -->
+    <form name="manual_install" action="manual_install.php" method="post" class="{INSTALL_VISIBLE}">
+{FTAN}
+    <table style="width: 80%;">
+        <tbody>
+            <tr>
+              <td style="width: 15%; white-space: nowrap;">{TEXT_FILE}: "install.php"</td>
+              <td>
+                  <input type="hidden" name="action" value="install" />
+                  <select name="file" style="width: 40%;">
+                  <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                  <!-- BEGIN manuell_install_select_block -->
+                  <option value="{INSTALL_VALUE}">{INSTALL_NAME}</option>
+                  <!-- END manuell_install_select_block -->
+                  </select>
+                  <input type="submit" name="submit" value="{TEXT_EXECUTE}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    </form>
+<!-- END manuell_install_block -->
+
+<!-- BEGIN manuell_upgrade_block -->
+    <form name="manual_upgrade" action="manual_install.php" method="post" class="{UPGRADE_VISIBLE}">
+{FTAN}
+    <table style="width: 80%;">
+        <tbody>
+            <tr>
+              <td style="width: 15%; white-space: nowrap;">{TEXT_FILE}: "upgrade.php"</td>
+              <td >
+                  <input type="hidden" name="action" value="upgrade" />
+                  <select name="file" style="width: 40%;">
+                  <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                  <!-- BEGIN manuell_upgrade_select_block -->
+                  <option value="{UPGRADE_VALUE}">{UPGRADE_NAME}</option>
+                  <!-- END manuell_upgrade_select_block -->
+                  </select>
+                  <input type="submit" name="submit" value="{TEXT_EXECUTE}" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    </form>
+<!-- END manuell_upgrade_block -->
+
+<!-- BEGIN manuell_uninstall_block -->
+    <form name="manual_uninstall" action="manual_install.php" method="post" class="{UNINSTALL_VISIBLE}">
+{FTAN}
+    <table style="width: 80%;">
+        <tbody>
+            <tr>
+              <td style="width: 15%; white-space: nowrap;">{TEXT_FILE}: "uninstall.php"</td>
+              <td>
+                  <input type="hidden" name="action" value="uninstall" />
+                  <select name="file" style="width: 40%;">
+                  <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                  <!-- BEGIN manuell_uninstall_select_block -->
+                  <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                  <!-- END manuell_uninstall_select_block -->
+                  </select>
+                  <input type="submit" name="submit" value="{TEXT_EXECUTE}" style="min-width: 8.525em;" />
+                  </td>
+            </tr>
+        </tbody>
+    </table>
+    </form>
+<!-- END manuell_uninstall_block -->
+
+  <p style="color:red;">{TEXT_MANUAL_INSTALLATION_WARNING}</p>
+</div>
+<!-- END module_advanced_block -->
+
+<!-- END main_block -->
Index: trunk/admin/themes/templates/modules_details.htt
===================================================================
--- trunk/admin/themes/templates/modules_details.htt	(nonexistent)
+++ trunk/admin/themes/templates/modules_details.htt	(revision 2)
@@ -0,0 +1,39 @@
+<!--
+ @version         $Id: modules_details.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_MODULE_DETAILS}</h2>
+
+<table summary="" cellpadding="5" cellspacing="0" border="0">
+<tr>
+    <td width="100">{TEXT_NAME}:</td>
+    <td>{NAME}</td>
+</tr>
+<tr>
+    <td>{TEXT_TYPE}:</td>
+    <td>{TYPE}</td>
+</tr>
+<tr>
+    <td>{TEXT_AUTHOR}:</td>
+    <td>{AUTHOR}</td>
+</tr>
+<tr>
+    <td>{TEXT_VERSION}:</td>
+    <td>{VERSION}</td>
+</tr>
+<tr>
+    <td>{TEXT_DESIGNED_FOR}:</td>
+    <td>Website Baker {DESIGNED_FOR}</td>
+</tr>
+<tr>
+    <td valign="top">{TEXT_DESCRIPTION}:</td>
+    <td style="text-align: justify;">{DESCRIPTION}</td>
+</tr>
+</table>
+
+<br />
+
+<button onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/pages.htt
===================================================================
--- trunk/admin/themes/templates/pages.htt	(nonexistent)
+++ trunk/admin/themes/templates/pages.htt	(revision 2)
@@ -0,0 +1,112 @@
+<!--
+ @version         $Id: pages.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<!-- BEGIN add_block -->
+<h2>{HEADING_ADD_PAGE}</h2>
+<div class="{DISPLAY_ADD} block-outer" style="float: left; width: 100%; padding-top: 1.925em;">
+<form name="add" action="add.php" method="post">
+{FTAN}
+    <table style="border-collapse: separate; width: 40%; float: left;" class="pages_add" >
+        <tbody>
+            <tr style="margin: 0.525em 0;">
+              <td  style="width: 13.525em;">{TEXT_TITLE}:</td>
+              <td  style="width: 20.525em;"><input type="text" name="title" style="width: 20.525em;" /></td>
+            </tr>
+            <tr>
+              <td >{TEXT_TYPE}:</td>
+              <td >
+                  <select name="type" style="width: 20.525em;">
+                      <!-- BEGIN module_list_block -->
+                          <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                      <!-- END module_list_block -->
+                  </select>
+              </td>
+            </tr>
+            <tr>
+              <td >{TEXT_PARENT}:</td>
+              <td >
+                  <select  name="parent" style="width: 20.525em;" onchange="return disabled_hack_for_ie(this);">
+                      <!-- BEGIN page_list_block2 -->
+                      <option value="{ID}"{DISABLED} style="background: {FLAG_ROOT_ICON} no-repeat center left; padding-left: 20px;">{TITLE}</option>
+                      <!-- END page_list_block2 -->
+                  </select>
+              </td>
+            </tr>
+            <tr>
+              <td >{TEXT_VISIBILITY}:</td>
+              <td >
+                  <select name="visibility" onchange="javascript: toggle_viewers();" style="width: 20.525em;">
+                      <option value="public"{SELECTED}>{TEXT_PUBLIC}</option>
+                      <option value="private">{TEXT_PRIVATE}</option>
+                      <option value="registered">{TEXT_REGISTERED}</option>
+                      <option value="hidden">{TEXT_HIDDEN}</option>
+                      <option value="none">{TEXT_NONE}</option>
+                  </select>
+              </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td>&nbsp;</td>
+            </tr>
+            <tr>
+              <td >&nbsp;</td>
+              <td>
+                  <input type="submit" name="submit" value="{TEXT_ADD}" style="min-width: 7.525em; padding: 0 0.9525em;" />
+                  <input  type="reset" name="reset" value="{TEXT_RESET}" style="min-width: 7.525em; padding: 0 0.9525em;" />
+              </td>
+            </tr>
+            <tr>
+              <td>&nbsp;</td>
+              <td>&nbsp;</td>
+            </tr>
+        </tbody>
+    </table>
+    <table style="border-collapse: separate; width: 58%; padding-left: 1.225em;" class="pages_groups" >
+        <tbody>
+            <tr>
+              <td style=" width: 55%; vertical-align: top;">{TEXT_ADMINISTRATORS}:
+                  <ul style="list-style-type: none; margin: 0; padding: 0;">
+                      <!-- BEGIN group_list_block -->
+                      <li>
+                      <input type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                      <label for="admin_group_{TOGGLE}">{NAME}</label>
+                      </li>
+                      <!-- END group_list_block -->
+                  </ul>
+              </td>
+              <td style=" vertical-align: top;">
+                  <div id="viewers" style="display: none;">{TEXT_REGISTERED_VIEWERS}:
+                      <ul style="list-style-type: none; margin: 0; padding: 0;">
+                          <!-- BEGIN group_list_block2 -->
+                          <li>
+                          <input type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                          <label for="viewing_group_{TOGGLE}">{NAME}</label>
+                          </li>
+                          <!-- END group_list_block2 -->
+                      </ul>
+                  </div>
+              </td>
+            </tr>
+        </tbody>
+    </table>
+</form>
+</div>
+<!-- END add_block -->
+
+<!-- BEGIN intro_block -->
+<div class="{DISPLAY_INTRO}" style="padding-top: 10px;">
+<br />
+<h2>{HEADING_MODIFY_INTRO_PAGE}</h2>
+<a href="intro.php">{INTRO_LINK}</a>
+</div>
+<!-- END intro_block -->
+</div> <!-- end div of pages_tree -->
+
+<!-- Addition for remembering expanded state of pages -->
+<script type="text/javascript">
+var THEME_URL = '{THEME_URL}';
+var WB_URL = '{WB_URL}';
+</script>
+<script src="{ADMIN_URL}/pages/page_index.js" type="text/javascript"></script>
+<!-- END main_block -->
Index: trunk/admin/themes/templates/pages_modify.htt
===================================================================
--- trunk/admin/themes/templates/pages_modify.htt	(nonexistent)
+++ trunk/admin/themes/templates/pages_modify.htt	(revision 2)
@@ -0,0 +1,26 @@
+<!--
+ @version         $Id: pages_modify.htt 96 2017-04-11 15:31:04Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<table class="header-info">
+    <tbody>
+        <tr >
+           <td class="header-modify-page" ><h2>{HEADING_MODIFY_PAGE}</h2></td>
+           <td class="header-page_id" style="">ID: {PAGE_ID}</td>
+           <td class="header-current-page">{TEXT_CURRENT_PAGE}:<b title="{PAGE_TITLE}">{MENU_TITLE}</b>
+        <!-- BEGIN show_settings_block -->
+              <span style="{DISPLAY_MANAGE_MODIFY}">-</span>
+              <a href="{ADMIN_URL}/pages/settings.php?page_id={PAGE_IDKEY}">{TEXT_CHANGE_SETTINGS}</a>
+        <!-- END show_settings_block -->
+        <!-- BEGIN show_section_block -->
+              <span style="{DISPLAY_MANAGE_MODIFY}">-</span>
+              <a href="{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}">{TEXT_MANAGE_SECTIONS}</a>
+        <!-- END show_section_block -->
+              <span style="color:#999;" class="{CLASS_DISPLAY_MODIFIED}"><br />
+              {LAST_MODIFIED} {MODIFIED_BY}, {MODIFIED_WHEN}
+              </span>
+           </td>
+        </tr>
+    </tbody>
+</table>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/pages_sections.htt
===================================================================
--- trunk/admin/themes/templates/pages_sections.htt	(nonexistent)
+++ trunk/admin/themes/templates/pages_sections.htt	(revision 2)
@@ -0,0 +1,141 @@
+<!--
+ @version         $Id: pages_sections.htt 96 2017-04-11 15:31:04Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<table class="header-info">
+    <tbody>
+        <tr >
+           <td class="header-modify-page" ><h2>{HEADING_MODIFY_PAGE}</h2></td>
+           <td class="header-page_id" style="">ID: {PAGE_ID}</td>
+           <td class="header-current-page">{TEXT_CURRENT_PAGE}:<b title="{PAGE_TITLE}">{MENU_TITLE}</b>
+        <!-- BEGIN show_settings_block -->
+              <span style="{DISPLAY_MANAGE_MODIFY}">-</span>
+              <a href="{ADMIN_URL}/pages/settings.php?page_id={PAGE_IDKEY}">{TEXT_CHANGE_SETTINGS}</a>
+        <!-- END show_settings_block -->
+        <!-- BEGIN show_modify_block -->
+              -
+              <a href="{ADMIN_URL}/pages/modify.php?page_id={PAGE_IDKEY}" style="{}">{HEADING_MODIFY_PAGE}</a>
+        <!-- END show_modify_block -->
+              <span style="color:#999;" class="{CLASS_DISPLAY_MODIFIED}"><br />
+              {LAST_MODIFIED} {MODIFIED_BY}, {MODIFIED_WHEN}
+              </span>
+           </td>
+        </tr>
+    </tbody>
+</table>
+<form name="section_properties" action="{ADMIN_URL}/pages/sections_save.php?page_id={PAGE_IDKEY}" method="post">
+{FTAN}
+    <div class="jsadmin jcalendar hide"></div>
+    <div class="block-outer">
+        <table  class="img_noborder pages_section" >
+            <thead>
+                <tr class="sections_list">
+                    <th class="header_list_type" style="width: 40%;">{TEXT_TYPE}</th>
+                    <th class="header_list_block"><span {STYLE_DISPLAY_SECTION_BLOCK}>{TEXT_BLOCK}&nbsp;</span></th>
+                    <th colspan="3" class="header_list_pubdate_start">{TEXT_PUBL_START_DATE}</th>
+                    <th colspan="3" class="header_list_pubdate_end">{TEXT_PUBL_END_DATE}</th>
+                    <th colspan="3" class="header_list_sections_actions" >{TEXT_ACTIONS}</th>
+                    <th class="header_list_section_id">ID</th>
+                    <th {DISPLAY_DEBUG}>{TEXT_PID}</th>
+                </tr>
+            </thead>
+            <tbody>
+    <!-- BEGIN show_section_block -->
+                <tr class="sectionrow" title="{SEC_TAG_TITLE}">
+                    <td style="display:none; float: right;">
+                      <input type="hidden" name="page_id" value="{PAGE_IDKEY}"  />
+                      <input type="hidden" name="section_id" value="{VAR_SECTION_ID}"  />
+                      {VAR_SECTION_ID}
+                    </td>
+                    <td class="modify_link">{LINK_MODIFY_URL_VAR_MODUL_NAME}
+                <!-- BEGIN section_title_block -->
+                    <span class="sec_title" title="{SEC_TAG_TITLE}" style="font-weight: normal;">[ {SECTION_TITLE} ]</span>
+                  <!-- END section_title_block -->
+                    </td>
+
+                    <td class="{INPUT_ATTRIBUTE}"><span {STYLE_DISPLAY_SECTION_BLOCK}>
+                        <select class="input_normal w3-border" name="block{VAR_SECTION_ID}" style="width: 100%;">
+                        {SET_NONE_DISPLAY_OPTION}
+                        <!-- BEGIN section_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END section_list_block -->
+                        </select></span>&nbsp;
+                    </td>
+
+                    <td class="list_pubdate_start">
+                        <input class="w3-input w3-border" style="height: 1.665em;" type="text" id="start_date{VAR_SECTION_ID}" name="start_date{VAR_SECTION_ID}" value="{VALUE_PUBL_START}" />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/calendar_16.png" id="trigger_start{VAR_SECTION_ID}" style="cursor:pointer;" title="{TEXT_CALENDAR}" alt="{TEXT_CALENDAR}"  />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.start_date{VAR_SECTION_ID}.value=''" />
+                    </td>
+                    <td class="list_pubdate_end">
+                        <input class="w3-input w3-border" style="height: 1.665em;" type="text" id="end_date{VAR_SECTION_ID}" name="end_date{VAR_SECTION_ID}" value="{VALUE_PUBL_END}" />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/calendar_16.png" id="trigger_stop{VAR_SECTION_ID}" alt="{TEXT_CALENDAR}" style="cursor: pointer;" title="{TEXT_CALENDAR}"  />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.end_date{VAR_SECTION_ID}.value=''" />
+                    </td>
+                    <td>{VAR_MOVE_UP_URL}</td>
+
+                    <td>{VAR_MOVE_DOWN_URL}</td>
+                    <td>
+          <!-- BEGIN can_delete_block -->
+                        <a href="#" onclick="javascript: confirm_link('{TEXT_ARE_YOU_SURE}', '{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}&amp;section_id={VAR_SECTION_IDKEY}');">
+                        <img src="{THEME_URL}/images/{DELETE_16_PNG}" alt="{TEXT_DELETE}" />
+                        </a>
+          <!-- END can_delete_block -->
+                    </td>
+                    <td class="list_section_id">{VAR_SECTION_ID}</td>
+                    <!--
+                    <td {DISPLAY_DEBUG}>{POSITION}</td>
+                    -->
+                </tr>
+    <!-- END show_section_block -->
+            </tbody>
+        </table>
+    </div>
+    <div>
+        <label style="float: left;" ></label>
+        <input type="submit" name="save" value="{TEXT_SAVE}" class="btn btn-default" />
+    </div>
+</form>
+<br />
+<h2>{TEXT_ADD_SECTION}</h2>
+<form name="add" action="{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}" method="post">
+    <input type="hidden" name="page_id" value="{PAGE_IDKEY}"  />
+    {FTAN}
+    <table>
+    <tr>
+        <td style="width: 50%;">
+            <select name="module" class="w3-border input_large">
+            <!-- BEGIN module_block -->
+             <option value="{VALUE}"{SELECTED}>{NAME}</option>
+             <!-- END module_block -->
+            </select>
+            &nbsp;&nbsp;
+            <input class="btn btn-default" type="submit" name="submit" value="{TEXT_ADD}"  />
+         </td>
+    </tr>
+     </table>
+</form>
+    <!-- BEGIN calendar_block -->
+    <script type="text/javascript" >
+         var section_id = '{VAR_SECTION_ID}';
+         var start_date = '{start_date}';
+         var end_date = '{end_date}';
+         var trigger_start = '{trigger_start}';
+         var trigger_end = '{trigger_end}';
+         var jscal_today = '{jscal_today}';
+         var jscal_ifformat = '{jscal_ifformat}';
+         var jscal_firstday = {jscal_firstday};
+         var showsTime = {showsTime};
+         var timeFormat = {timeFormat};
+    </script>
+    <script type="text/javascript" src="{ADMIN_URL}/pages/page_calendar.js" ></script>
+    <!-- END calendar_block -->
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/pages_settings.htt
===================================================================
--- trunk/admin/themes/templates/pages_settings.htt	(nonexistent)
+++ trunk/admin/themes/templates/pages_settings.htt	(revision 2)
@@ -0,0 +1,258 @@
+<!--
+ @version         $Id: pages_settings.htt 96 2017-04-11 15:31:04Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<!--
+ *   template
+ *   visibility
+ *   language
+ *   searching
+ *   admin_groups
+ *   admin_users
+ *   viewing_groups
+ *   viewing_users
+ -->
+<table class="header-info">
+    <tbody>
+        <tr >
+           <td class="header-modify-page" ><h2>{HEADING_MODIFY_PAGE}</h2></td>
+           <td class="header-page_id" style="">ID: {PAGE_ID}</td>
+           <td class="header-current-page">{TEXT_CURRENT_PAGE}:<b title="{PAGE_TITLE}">{MENU_TITLE}</b>
+        <!-- BEGIN show_section_block -->
+              <span >-</span>
+              <a href="{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}">{TEXT_MANAGE_SECTIONS}</a>
+        <!-- END show_section_block -->
+        <!-- BEGIN show_modify_block -->
+              -
+              <a href="{ADMIN_URL}/pages/modify.php?page_id={PAGE_IDKEY}" style="{}">{HEADING_MODIFY_PAGE}</a>
+        <!-- END show_modify_block -->
+              <span style="color:#999;" class="{CLASS_DISPLAY_MODIFIED}"><br />
+              {LAST_MODIFIED} {MODIFIED_BY}, {MODIFIED_WHEN}
+              </span>
+           </td>
+        </tr>
+    </tbody>
+</table>
+
+        <!-- BEGIN show_settings_block -->
+        <!-- END show_settings_block -->
+<form name="settings" action="settings2.php" method="post">
+{FTAN}
+    <input type="hidden" name="page_id" value="{PAGE_ID}" />
+    <div class="block-outer col" style="width: 45%; min-width: 30.225em; float: left;padding: 0.825em;min-height: 43.00225em;">
+        <table class="table pages-settings" >
+            <thead>
+                <tr>
+                    <th></th>
+                    <th></th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>
+                        <label>{TEXT_PAGE_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input type="text" name="page_title" value="{PAGE_TITLE}" style="width: 99%;" />
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_MENU_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input type="text" name="menu_title" value="{MENU_TITLE}" style="width: 99%;" />
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label for="parent">{TEXT_PARENT}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <select name="parent" style="width: 100%;" onchange="return disabled_hack_for_ie(this);">
+                            <!-- BEGIN page_list_block2 -->
+                            <option value="{ID}"{SELECTED} style="background: {FLAG_ROOT_ICON} no-repeat center left; padding-left: 20px;">{TITLE}</option>
+                            <!-- END page_list_block2 -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_SEO_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input type="text" id="seo_title" name="seo_title" value="{SEO_TITLE}" style="width: 99%;"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_DESCRIPTION}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <textarea name="description" rows="3" cols="1" style="width: 99%; ">{DESCRIPTION}</textarea>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_KEYWORDS}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <textarea name="keywords" rows="3" cols="1" style="width: 99%; ">{KEYWORDS}</textarea>
+                    </td>
+                </tr>
+                <tr class="border">
+                    <td>
+                        <label for="visibilities">{TEXT_VISIBILITY}</label>
+                        <input id="visibilities" name="inherit[]" type="checkbox" value="visibility" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select name="visibility" onchange="javascript: toggle_viewers();" style="width: 100%;">
+                            <option value="public"{PUBLIC_SELECTED}>{TEXT_PUBLIC}</option>
+                            <option value="private"{PRIVATE_SELECTED}>{TEXT_PRIVATE}</option>
+                            <option value="registered"{REGISTERED_SELECTED}>{TEXT_REGISTERED}</option>
+                            <option value="hidden"{HIDDEN_SELECTED}>{TEXT_HIDDEN}</option>
+                            <option value="none"{NO_VIS_SELECTED}>{TEXT_NONE}</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_TARGET}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <select name="target" style="width: 100%;" ><!--  value="{TARGET}" -->
+                            <option value="_blank"{BLANK_SELECTED}>{TEXT_NEW_WINDOW}</option>
+                            <option value="_self"{SELF_SELECTED}>{TEXT_SAME_WINDOW}</option>
+                            <option value="_top"{TOP_SELECTED}>{TEXT_TOP_FRAME}</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label for="template">{TEXT_TEMPLATE}</label>
+                        <input id="template" name="inherit[]" type="checkbox" value="template" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select name="template" style="width: 100%;">
+                            <option value="">{TEXT_SYSTEM_DEFAULT}</option>
+                            <option value="">----------------------</option>
+                            <!-- BEGIN template_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                            <!-- END template_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr style="{DISPLAY_MENU_LIST}">
+                    <td>
+                        <label for="menu">{TEXT_MENU}</label>
+                        <input id="menu" name="inherit[]" type="checkbox" value="menu" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select name="menu" style="width: 100%;">
+                            <!-- BEGIN menu_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                            <!-- END menu_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr style="{DISPLAY_LANGUAGE_LIST}">
+                    <td >
+                        <label for="language">{TEXT_LANGUAGE}</label>
+                        <input id="language" name="inherit[]" type="checkbox" value="language" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td >
+                        <select name="language" style="width: 100%;">
+                            <!-- BEGIN language_list_block -->
+                            <option value="{VALUE}"{SELECTED} style="background: {FLAG_LANG_ICONS} no-repeat center left; padding-left: 20px;">{NAME}</option>
+                            <!-- END language_list_block -->
+                        </select>
+                    </td>
+                </tr>
+            <!-- insert page_code 20090904-->
+                <tr{DISPLAY_CODE_PAGE_LIST}>
+                    <td >
+                        <label title="{TEXT_LANGUAGE} {TEXT_PAGE_REORG}">{TEXT_PAGE_CODE}</label>
+                        <span></span>
+                    </td>
+                    <td class="list_page_code">
+                        <select name="page_code" class="value_page_code" style="width: 100%;">
+                            <!-- BEGIN page_code_list_block -->
+                            <option value="{VALUE}"{SELECTED} style="background: {FLAG_CODE_ICON} no-repeat center left; padding-left: 20px;">&nbsp;{PAGE_VALUE}</option>
+                            <!-- END page_code_list_block -->
+                        </select>
+                    </td>
+                </tr>
+            <!-- page code -->
+                <tr>
+                    <td>
+                        <label for="searching">{TEXT_SEARCHING}</label>
+                        <input id="searching" name="inherit[]" type="checkbox" value="searching" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select name="searching" style="width: 100%;">
+                            <option value="1">{TEXT_ENABLED}</option>
+                            <option value="0"{SEARCHING_DISABLED}>{TEXT_DISABLED}</option>
+                        </select>
+                    </td>
+                </tr>
+<!--
+                <tr>
+                    <td>Inherit Settings:</td>
+                    <td><input name="inherit" type="checkbox" value="all"></td>
+                </tr>
+-->
+                <tr class="submit">
+                    <td >
+                        <input type="submit" name="submit" value="{TEXT_SAVE} {SECTION_SETTINGS}" style="width: 117px;" />
+                    </td>
+                    <td colspan="4">
+                        <input name="pagetree" type="submit" value="{TEXT_SAVE} &amp; {TEXT_BACK}" style="min-width: 100px; margin-top: 5px;" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" style="width: 117px;" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+
+    <div class="block-outer col" style="width: 45%; float: left; min-width: 30.225em; min-height: 47.425em; margin-left: 3.225em;">
+        <table class="access pages-settings"  style="width: 100%;">
+            <tbody>
+            <tr>
+            <td style="padding-left: 0.925em; padding-top: 0.525em; width: 48%;">
+                <label class="access" for="admin_groups">{TEXT_ADMINISTRATORS}</label>
+                <ul style="list-style-type: none; margin: 0; padding: 0;">
+                    <!-- BEGIN group_list_block -->
+                    <li>
+                    <input type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                    <label for="admin_group_{TOGGLE}">{NAME}</label>
+                    </li>
+                    <!-- END group_list_block -->
+                </ul>
+            </td>
+            <td style="padding-left: 0.925em; padding-top: 0.525em; border-left: solid .0125em #ccc; width: 49%;">
+                <div id="allowed_viewers" style="{DISPLAY_VIEWERS}">
+                    <label class="access" for="viewing_groups">{TEXT_ALLOWED_VIEWERS}</label>
+                    <ul style="list-style-type:none;margin:0;padding:0;">
+                        <!-- BEGIN group_list_block2 -->
+                        <li>
+                        <input type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                        <label for="viewing_group_{TOGGLE}">{NAME}</label>
+                        </li>
+                        <!-- END group_list_block2 -->
+                    </ul>
+                </div>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </div>
+</form>
+<script src="{ADMIN_URL}/pages/page_settings.js" type="text/javascript"></script>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/preferences.htt
===================================================================
--- trunk/admin/themes/templates/preferences.htt	(nonexistent)
+++ trunk/admin/themes/templates/preferences.htt	(revision 2)
@@ -0,0 +1,119 @@
+<!--
+ @version         $Id: preferences.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<h2>{HEADING_MY_SETTINGS}</h2>
+<div class="block-outer" style="padding: 0.825em;">
+<div class="content_box">
+    <form name="{FORM_NAME}" id="{FORM_NAME}" action="{ACTION_URL}" method="post">
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_USERNAME}:</label><br />
+                </div>
+                <div class="c60l">
+                    <div id="username">{USERNAME}</div><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_DISPLAY_NAME}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input type="text" id="display_name" name="display_name" value="{DISPLAY_NAME}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_LANGUAGE}:</label><br />
+                </div>
+                <div class="c60l">
+                <select name="language" id="language">
+                    <!-- BEGIN language_list_block -->
+                        <option value="{CODE}"{SELECTED} style="background: url({FLAG}.png) no-repeat center left; padding-left: 20px;">{NAME} ({CODE})</option>
+                    <!-- END language_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_TIMEZONE}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select name="timezone" id="timezone">
+                        <!-- BEGIN timezone_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END timezone_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_DATE_FORMAT}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select name="date_format" id="date_format">
+                        <!-- BEGIN date_format_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END date_format_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_TIME_FORMAT}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select name="time_format" id="time_format">
+                        <!-- BEGIN time_format_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END time_format_list_block -->
+                    </select>
+                </div>
+            </div>
+
+            <hr />
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_EMAIL}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input type="text" id="email" name="email" value="{EMAIL}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_NEW_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input type="password" id="new_password_1" name="new_password_1" value="{EMPTY_STRING}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_RETYPE_NEW_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input type="password" id="new_password_2" name="new_password_2" value="{EMPTY_STRING}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_NEED_CURRENT_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input type="password" id="current_password" name="current_password" value="{EMPTY_STRING}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns save_section">
+                <div class="c60l">
+                    <input type="submit" class="submitBtn" id="submitBtn" name="submit" value="{TEXT_SAVE}" />
+                    <input type="reset" class="submitBtn" id="resetBtn" name="reset" value="{TEXT_RESET}" />
+                </div>
+                <div class="c25l">&nbsp;</div>
+            </div>
+        {FTAN}
+    </form>
+</div>
+</div>
+
+<!-- END main_block -->
Index: trunk/admin/themes/templates/setparameter.htt
===================================================================
--- trunk/admin/themes/templates/setparameter.htt	(nonexistent)
+++ trunk/admin/themes/templates/setparameter.htt	(revision 2)
@@ -0,0 +1,99 @@
+<!--
+ @version         $Id: setparameter.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8" />
+<title>Set Upload Parameters</title>
+
+
+<style type="text/css">
+body,td,th,input,textarea {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 10px;
+}
+body {
+    background-color: #FFF;
+    margin: 0px;
+}
+hr {
+    margin: 0px;
+    color: #003366;
+    height: 1px;
+}
+.hide {
+    display: none;
+}
+a:link, a:visited, a:active {
+    color: #003366;
+    text-decoration: none;
+}
+a:hover {
+    text-decoration: none;
+    color: #336699;
+}
+</style>
+</head>
+<body>
+
+<table style="border-bottom: 1px solid #666; width: 100%;">
+<tr style="background-color: #DDD;">
+    <td style="text-align: center;">{TEXT_HEADER}</td>
+</tr>
+</table>
+<form method="post" action="{ADMIN_URL}/media/setparameter.php" id="myForm">
+    {FTAN}
+<table  class="{DISPLAY_LIST_TABLE}" style="width: 100%;">
+    <tr><td>{SETTINGS}</td><td><input type="checkbox" name="show_thumbs" {NO_SHOW_THUMBS_SELECTED}> {NO_SHOW_THUMBS}</td></tr>
+    <tr class="{DISPLAY_ADMIN}"><td></td>&nbsp;<td><input type="checkbox" name="admin_only" {ADMIN_ONLY_SELECTED}> {ADMIN_ONLY}</td></tr>
+    <tr><td colspan="2" style="border-bottom: 1px solid #666; line-height: 1px;">&nbsp;</td></tr>
+</table>
+<table  class="{DISPLAY_LIST_TABLE}" style="width: 100%;">
+<!-- BEGIN list_block -->
+    <tr style="background-color: #{ROW_BG_COLOR};">
+        <td>{PATH_NAME}</td>
+        <td>
+        {WIDTH}<input size="5" type="text" name="{FIELD_NAME_W}" value="{CUR_WIDTH}" id="W{FILE_ID}" onblur="BlurFunction(this.id)" onfocus="FocusFunction(this.id)" />
+        {HEIGHT}<input size="5" type="text" name="{FIELD_NAME_H}" value="{CUR_HEIGHT}" id="H{FILE_ID}" onblur="BlurFunction(this.id)" onfocus="FocusFunction(this.id)" />
+        </td>
+    </tr>
+<!-- END list_block -->
+    <tr>
+        <td><input type="button" onclick="window.location = 'browse.php'" value="{BACK}"/></td>
+        <td><input type="submit" name="save" value="{SAVE_TEXT}"/></td>
+    </tr>
+</table>
+</form>
+<script>
+/*
+var x = document.getElementById("myForm");
+x.addEventListener("focus", FocusFunction, true);
+x.addEventListener("blur", BlurFunction, true);
+*/
+function FocusFunction(id) {
+//    document.getElementById("myInput").style.backgroundColor = "yellow";
+    var el2 = document.getElementById(id),
+        tmp = el2.value;
+    el2.style.backgroundColor  = '';
+    if (tmp === '-'){
+        el2.value  = ''
+    }
+}
+
+function BlurFunction(id) {
+    var el1 = document.getElementById(id);
+        tmp = el1.value;
+    el1.style.backgroundColor  = '';
+    if (tmp === ''){
+        el1.value  = '-'
+    }
+}
+</script>
+
+</body>
+</html>
+
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/settings.htt
===================================================================
--- trunk/admin/themes/templates/settings.htt	(nonexistent)
+++ trunk/admin/themes/templates/settings.htt	(revision 2)
@@ -0,0 +1,725 @@
+<!--
+ @version         $Id: settings.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<form name="settings" action="save.php" method="post">
+    <input type="hidden" name="advanced" value="{ADVANCED_VALUE}" />
+    <input type="hidden" name="wbmailer_smtp_auth" id="wbmailer_smtp_auth" value="true"  />
+    {FTAN}
+
+<div class="block-outer" style="padding: 0.825em;">
+    <table class="settings_table">
+        <tbody>
+        <tr>
+            <td colspan="3"><h2>{HEADING_GENERAL_SETTINGS}</h2></td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_TITLE}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="website_title" value="{WEBSITE_TITLE}" />
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_DESCRIPTION}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="website_description" cols="50" rows="3">{WEBSITE_DESCRIPTION}</textarea>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_KEYWORDS}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="website_keywords" cols="50" rows="3" >{WEBSITE_KEYWORDS}</textarea>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_HEADER}:</td>
+            <td class="setting_value" colspan="2">
+        <!-- BEGIN show_website_header_block -->
+                <textarea name="website_header" cols="50" rows="3">{WEBSITE_HEADER}</textarea>
+        <!-- END show_website_header_block -->
+             {EDITOR_WEBSITE_HEADER}
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_FOOTER}:</td>
+            <td class="setting_value" colspan="2">
+        <!-- BEGIN show_website_footer_block -->
+                <textarea name="website_footer" cols="50" rows="5">{WEBSITE_FOOTER}</textarea>
+        <!-- END show_website_footer_block -->
+             {EDITOR_WEBSITE_FOOTER}
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WEBSITE_SIGNATURE}:</td>
+            <td class="setting_value" colspan="2">
+        <!-- BEGIN show_website_signature_block -->
+                <textarea name="website_signature" cols="50" rows="5">{WEBSITE_SIGNATURE}</textarea>
+        <!-- END show_website_signature_block -->
+             {EDITOR_WEBSITE_SIGNATURE}
+            </td>
+        </tr>
+        <!-- BEGIN show_page_level_limit_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_PAGE_LEVEL_LIMIT}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="page_level_limit">
+                <!-- BEGIN page_level_limit_list_block -->
+                    <option value="{NUMBER}"{SELECTED}>{NUMBER}</option>
+                <!-- END page_level_limit_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- END show_page_level_limit_block -->
+        <tr>
+            <td class="setting_name">{TEXT_PAGE_TRASH}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="page_trash" id="page_trash_inline" style="width: 14px; height: 14px;" value="inline"{PAGE_TRASH_INLINE} />
+                <label for="page_trash_inline">{TEXT_ENABLED}</label>
+                <input type="radio" name="page_trash" id="page_trash_disabled" style="width: 14px; height: 14px;" value="disabled"{PAGE_TRASH_DISABLED} />
+                <label for="page_trash_disabled">{TEXT_DISABLED}</label>
+                <div style="margin: 0; padding: 0;{DISPLAY_PAGE_TRASH_SEPARATE}">
+                    <input type="radio" name="page_trash" id="page_trash_separate" style="width: 14px; height: 14px;" value="separate"{PAGE_TRASH_SEPARATE} />
+                    <label for="page_trash_separate">{TEXT_SEPARATE}</label>
+                </div>
+            </td>
+        </tr>
+        <!-- BEGIN show_checkbox_1_block -->
+        <tr{DISPLAY_ADVANCED}>
+                <td class="setting_name">{TEXT_PAGE_LANGUAGES}:</td>
+                <td class="setting_value" colspan="2">
+                        <input type="radio" name="page_languages" id="page_languages_true" style="width: 14px; height: 14px;" value="true"{PAGE_LANGUAGES_ENABLED} />
+                        <label for="page_languages_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="page_languages" id="page_languages_false" style="width: 14px; height: 14px;" value="false"{PAGE_LANGUAGES_DISABLED} />
+                        <label for="page_languages_false">{TEXT_DISABLED}</label>
+                </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_MULTIPLE_MENUS}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="multiple_menus" id="multiple_menus_true" style="width: 14px; height: 14px;" value="true"{MULTIPLE_MENUS_ENABLED} />
+                <label for="multiple_menus_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="multiple_menus" id="multiple_menus_false" style="width: 14px; height: 14px;" value="false"{MULTIPLE_MENUS_DISABLED} />
+                <label for="multiple_menus_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- END show_checkbox_1_block -->
+        <tr>
+            <td class="setting_name">{TEXT_HOME_FOLDERS}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="home_folders" id="home_folders_true" style="width: 14px; height: 14px;" value="true"{HOME_FOLDERS_ENABLED} />
+                <label for="home_folders_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="home_folders" id="home_folders_false" style="width: 14px; height: 14px;" value="false"{HOME_FOLDERS_DISABLED} />
+                <label for="home_folders_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- BEGIN show_checkbox_2_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_MANAGE_SECTIONS}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="manage_sections" id="manage_sections_true" style="width: 14px; height: 14px;" value="true"{MANAGE_SECTIONS_ENABLED} />
+                <label for="manage_sections_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="manage_sections" id="manage_sections_false" style="width: 14px; height: 14px;" value="false"{MANAGE_SECTIONS_DISABLED} />
+                <label for="manage_sections_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_SECTION_BLOCKS}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="section_blocks" id="section_blocks_true" style="width: 14px; height: 14px;" value="true"{SECTION_BLOCKS_ENABLED} />
+                <label for="section_blocks_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="section_blocks" id="section_blocks_false" style="width: 14px; height: 14px;" value="false"{SECTION_BLOCKS_DISABLED} />
+                <label for="section_blocks_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- END show_checkbox_2_block -->
+        <tr>
+            <td class="setting_name">{TEXT_INTRO_PAGE}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="intro_page" id="intro_page_true" style="width: 14px; height: 14px;" value="true"{INTRO_PAGE_ENABLED} />
+                <label for="intro_page_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="intro_page" id="intro_page_false" style="width: 14px; height: 14px;" value="false"{INTRO_PAGE_DISABLED} />
+                <label for="intro_page_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- BEGIN show_checkbox_3_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_HOMEPAGE_REDIRECTION}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="homepage_redirection" id="homepage_redirection_true" style="width: 14px; height: 14px;" value="true"{HOMEPAGE_REDIRECTION_ENABLED} />
+                <label for="homepage_redirection_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="homepage_redirection" id="homepage_redirection_false" style="width: 14px; height: 14px;" value="false"{HOMEPAGE_REDIRECTION_DISABLED} />
+                <label for="homepage_redirection_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_SMART_LOGIN}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="smart_login" id="smart_login_true" style="width: 14px; height: 14px;" value="true"{SMART_LOGIN_ENABLED} />
+                <label for="smart_login_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="smart_login" id="smart_login_false" style="width: 14px; height: 14px;" value="false"{SMART_LOGIN_DISABLED} />
+                <label for="smart_login_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- END show_checkbox_3_block -->
+        <tr>
+            <td class="setting_name">{TEXT_LOGIN}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="frontend_login" id="frontend_login_true" style="width: 14px; height: 14px;" value="true"{PRIVATE_ENABLED} />
+                <label for="frontend_login_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="frontend_login" id="frontend_login_false" style="width: 14px; height: 14px;" value="false"{PRIVATE_DISABLED} />
+                <label for="frontend_login_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <!-- BEGIN show_redirect_timer_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_REDIRECT_AFTER}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="redirect_timer" value="{REDIRECT_TIMER}" style="width:50%;" />
+                <label>&nbsp;&nbsp;( <strong>-1</strong> = {TEXT_DISABLED}, <strong>0 -10000</strong> )</label><br />
+            </td>
+        </tr>
+        <!-- END show_redirect_timer_block -->
+        <tr>
+            <td class="setting_name">{TEXT_SIGNUP}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="frontend_signup">
+                    <option value="false">{TEXT_DISABLED}</option>
+                    <!-- BEGIN group_list_block -->
+                        <option value="{ID}" {SELECTED}>{NAME}</option>
+                    <!-- END group_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- BEGIN show_php_error_level_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_PHP_ERROR_LEVEL}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="er_level">
+                    <option value="">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN error_reporting_list_block -->
+                        <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                    <!-- END error_reporting_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- END show_php_error_level_block -->
+        <!-- BEGIN show_wysiwyg_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_WYSIWYG_STYLE}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="wysiwyg_style" value="{WYSIWYG_STYLE}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_WYSIWYG_EDITOR}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="wysiwyg_editor">
+                <!-- BEGIN wysiwyg_list_block -->
+                    <option value="{FILE}"{SELECTED}>{NAME}</option>
+                <!-- END wysiwyg_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- END show_wysiwyg_block -->
+        <tr>
+            <td class="setting_name">&nbsp;</td>
+            <td class="setting_value_permissions">
+                <input type="submit" name="submit" value="{TEXT_SAVE}" class="save" />
+                <input type="reset" name="reset" value="{TEXT_RESET}" class="reset" />
+            </td>
+            <td class="setting_value_permissions" style="text-align: right;">
+                <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON}">{ADVANCED_BUTTON}</button>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+<div class="block-outer" style="padding: 0.825em;">
+    <table class="settings_table">
+        <tbody>
+        <tr>
+            <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_DEFAULT_SETTINGS}</h2></td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_LANGUAGE}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_language">
+                    <!-- BEGIN language_list_block -->
+                    <option value="{CODE}"{SELECTED} style="background: url({FLAG}.png) no-repeat center left; padding-left: 20px;">{NAME} ({CODE})</option>
+                    <!-- END language_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- BEGIN show_charset_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_CHARSET}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_charset">
+                        <option value="">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN charset_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                    <!-- END charset_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- END show_charset_block -->
+        <tr>
+            <td class="setting_name">{TEXT_TIMEZONE}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_timezone">
+                    <option value="0">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN timezone_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                    <!-- END timezone_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_DATE_FORMAT}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_date_format">
+                    <option value="M d Y">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN date_format_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                    <!-- END date_format_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_TIME_FORMAT}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_time_format">
+                    <option value="g:i A">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN time_format_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                    <!-- END time_format_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_TEMPLATE}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_template">
+                <!-- BEGIN template_list_block -->
+                    <option value="{FILE}"{SELECTED}>{NAME}</option>
+                <!-- END template_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_THEME}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="default_theme">
+                <!-- BEGIN theme_list_block -->
+                    <option value="{FILE}"{SELECTED}>{NAME}</option>
+                <!-- END theme_list_block -->
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">&nbsp;</td>
+            <td class="setting_value_permissions">
+                <input type="submit" name="submit" value="{TEXT_SAVE}" class="save" />
+                <input type="reset" name="reset" value="{TEXT_RESET}" class="reset" />
+            </td>
+            <td class="setting_value_permissions" style="text-align: right;">
+                <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON}">{ADVANCED_BUTTON}</button>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+<div class="block-outer" style="padding: 0.825em;">
+    <table class="settings_table">
+        <tbody>
+        <tr>
+            <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_SEARCH_SETTINGS}</h2></td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_VISIBILITY}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="search">
+                    <option value="public">{TEXT_PUBLIC}</option>
+                    <option value="private" {PRIVATE_SEARCH}>{TEXT_PRIVATE}</option>
+                    <option value="registered" {REGISTERED_SEARCH}>{TEXT_REGISTERED}</option>
+                    <option value="none" {NONE_SEARCH}>{TEXT_NONE}</option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_TEMPLATE}:</td>
+            <td class="setting_value" colspan="2">
+                <select name="search_template">
+                <!-- BEGIN search_template_list_block -->
+                    <option value="{FILE}"{SELECTED}>{NAME}</option>
+                <!-- END search_template_list_block -->
+                </select>
+            </td>
+        </tr>
+        <!-- BEGIN show_search_block -->
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_HEADER}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="search_header" style="height: 100px;" cols="50" rows="3">{SEARCH_HEADER}</textarea>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_RESULTS_HEADER}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="search_results_header" cols="50" rows="3">{SEARCH_RESULTS_HEADER}</textarea>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_RESULTS_LOOP}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="search_results_loop" cols="50" rows="3">{SEARCH_RESULTS_LOOP}</textarea>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_RESULTS_FOOTER}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="search_results_footer" cols="50" rows="3">{SEARCH_RESULTS_FOOTER}</textarea>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_NO_RESULTS}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="search_no_results" value="{SEARCH_NO_RESULTS}" />
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_FOOTER}:</td>
+            <td class="setting_value" colspan="2">
+                <textarea name="search_footer" cols="50" rows="3">{SEARCH_FOOTER}</textarea>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_MODULE_ORDER}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="search_module_order" value="{SEARCH_MODULE_ORDER}" />
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_MAX_EXCERPT}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="search_max_excerpt" value="{SEARCH_MAX_EXCERPT}" />
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_TIME_LIMIT}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="text" name="search_time_limit" value="{SEARCH_TIME_LIMIT}" />
+            </td>
+        </tr>
+        <!-- END show_search_block -->
+        <!-- BEGIN show_access_block -->
+        <tr>
+            <td class="setting_name">&nbsp;</td>
+            <td class="setting_value_permissions">
+                <input type="submit" name="submit" value="{TEXT_SAVE}" class="save" />
+                <input type="reset" name="reset" value="{TEXT_RESET}" class="reset" />
+            </td>
+            <td class="setting_value_permissions" style="text-align: right;">
+                <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON}">{ADVANCED_BUTTON}</button>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+<div class="block-outer" style="padding: 0.825em;">
+    <table class="settings_table">
+        <tbody>
+        <tr>
+            <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_SERVER_SETTINGS}</h2></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">Debug Mode:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="debug" id="debug_true" style="width: 14px; height: 14px;" value="true"{DEBUG_ENABLED} />
+                <label for="debug_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="debug" id="debug_false" style="width: 14px; height: 14px;" value="false"{DEBUG_DISABLED} />
+                <label for="debug_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">Token_Fingerprint:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="sec_token_fingerprint" id="sec_token_fingerprint_true" style="width: 14px; height: 14px;" value="true"{FINGERPRINT_ENABLED} />
+                <label for="sec_token_fingerprint_true">{TEXT_ENABLED}</label>
+                <input type="radio" name="sec_token_fingerprint" id="sec_token_fingerprint_false" style="width: 14px; height: 14px;" value="false"{FINGERPRINT_DISABLED} />
+                <label for="sec_token_fingerprint_false">{TEXT_DISABLED}</label>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">Token_Netmask4:</td>
+            <td class="setting_value" colspan="2">
+                <input style="width: 10%;" type="text" name="sec_token_netmask4" value="{SEC_TOKEN_NETMASK4}" /> <span> (0-32 // 0 = off  default = 24) </span>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">Token_Netmask6:</td>
+            <td class="setting_value" colspan="2">
+                <input style="width: 10%;" type="text" name="sec_token_netmask6" value="{SEC_TOKEN_NETMASK6}" /> <span> (0-128 // 0 = off  default = 64) </span>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">Token_Life_Time:</td>
+            <td class="setting_value" colspan="2">
+                <input style="width: 10%;" type="text" name="sec_token_life_time" value="{value}" /> <span>  ( 30min | 45min | 60min[default] | 120min ) </span>
+        </tr>
+        <tr>
+        <td colspan="3"></td>
+        </tr>
+
+        <tr>
+            <td class="setting_name">{TEXT_SERVER_OPERATING_SYSTEM}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="operating_system" id="operating_system_linux"  style="width: 14px; height: 14px;" value="linux"{LINUX_SELECTED} />
+                <label for="operating_system_linux" >{TEXT_LINUX_UNIX_BASED}</label>
+                <input type="radio" name="operating_system" id="operating_system_windows"  style="width: 14px; height: 14px;" value="windows"{WINDOWS_SELECTED} />
+                <label for="operating_system_windows" >{TEXT_WINDOWS}</label>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name"><div id="{BASIC_FILE_PERMS_ID}1" style="margin: 0; padding: 0;">&nbsp;</div></td>
+            <td class="setting_value" colspan="2">
+                <div id="{BASIC_FILE_PERMS_ID}2" style="margin: 0; padding: 0;">
+                    <input type="checkbox" name="world_writeable" id="world_writeable" style="width: 14px; height: 14px;" value="true"{WORLD_WRITEABLE_SELECTED} />
+                    <label for="world_writeable">
+                        {TEXT_WORLD_WRITEABLE_FILE_PERMISSIONS} (777)
+                    </label>
+                    <span class="warning">({WORLD_WRITEABLE_WARNING})</span>
+                </div>
+                <div id="{BASIC_FILE_PERMS_ID}3" style="margin: 0; padding: 0;"></div>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name"><div id="{ADVANCED_FILE_PERMS_ID}1" style="margin: 0; padding: 0;">{TEXT_FILESYSTEM_PERMISSIONS}:</div></td>
+            <td class="setting_value_permissions" id="file_mode">
+                <table summary="" cellpadding="2" cellspacing="0" width="90%" border="0" id="{ADVANCED_FILE_PERMS_ID}2"{DISPLAY_CHMOD}>
+                <tr>
+                    <td colspan="3" style="text-align: center; font-weight: bold;">{TEXT_FILES}: {STRING_FILE_MODE}</td>
+                </tr>
+                <tr>
+                    <td>{TEXT_USER}:</td>
+                    <td>{TEXT_GROUP}:</td>
+                    <td>{TEXT_OTHERS}:</td>
+                </tr>
+                <tr>
+                    <td>
+                        <input type="checkbox" name="file_u_r" id="file_u_r" value="true"{FILE_U_R_CHECKED} />
+                        <label for="file_u_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="file_u_w" id="file_u_w" value="true"{FILE_U_W_CHECKED} />
+                        <label for="file_u_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="file_u_e" id="file_u_e" value="true"{FILE_U_E_CHECKED} />
+                        <label for="file_u_e">{TEXT_EXECUTE}</label>
+                    </td>
+                    <td>
+                        <input type="checkbox" name="file_g_r" id="file_g_r" value="true"{FILE_G_R_CHECKED} />
+                        <label for="file_g_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="file_g_w" id="file_g_w" value="true"{FILE_G_W_CHECKED} />
+                        <label for="file_g_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="file_g_e" id="file_g_e" value="true"{FILE_G_E_CHECKED} />
+                        <label for="file_g_e">{TEXT_EXECUTE}</label>
+                    </td>
+                    <td>
+                        <input type="checkbox" name="file_o_r" id="file_o_r" value="true"{FILE_O_R_CHECKED} />
+                        <label for="file_o_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="file_o_w" id="file_o_w" value="true"{FILE_O_W_CHECKED} />
+                        <label for="file_o_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="file_o_e" id="file_o_e" value="true"{FILE_O_E_CHECKED} />
+                        <label for="file_o_e">{TEXT_EXECUTE}</label>
+                    </td>
+                </tr>
+                </table>
+            </td>
+            <td class="setting_value_permissions" id="dir_mode" style="text-align: right;">
+                <table summary="" cellpadding="2" cellspacing="0" width="90%" border="0" id="{ADVANCED_FILE_PERMS_ID}3"{DISPLAY_CHMOD}>
+                <tr>
+                    <td colspan="3" style="text-align: center; font-weight: bold;">{TEXT_DIRECTORIES}: {STRING_DIR_MODE}</td>
+                </tr>
+                <tr>
+                    <td>{TEXT_USER}:</td>
+                    <td>{TEXT_GROUP}:</td>
+                    <td>{TEXT_OTHERS}:</td>
+                </tr>
+                <tr>
+                    <td>
+                        <input type="checkbox" name="dir_u_r" id="dir_u_r" value="true"{DIR_U_R_CHECKED} />
+                        <label for="dir_u_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="dir_u_w" id="dir_u_w" value="true"{DIR_U_W_CHECKED} />
+                        <label for="dir_u_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="dir_u_e" id="dir_u_e" value="true"{DIR_U_E_CHECKED} />
+                        <label for="dir_u_e">{TEXT_EXECUTE}</label>
+                    </td>
+                    <td>
+                        <input type="checkbox" name="dir_g_r" id="dir_g_r" value="true"{DIR_G_R_CHECKED} />
+                        <label for="dir_g_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="dir_g_w" id="dir_g_w" value="true"{DIR_G_W_CHECKED} />
+                        <label for="dir_g_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="dir_g_e" id="dir_g_e" value="true"{DIR_G_E_CHECKED} />
+                        <label for="dir_g_e">{TEXT_EXECUTE}</label>
+                    </td>
+                    <td>
+                        <input type="checkbox" name="dir_o_r" id="dir_o_r" value="true"{DIR_O_R_CHECKED} />
+                        <label for="dir_o_r">{TEXT_READ}</label>
+                        <br />
+                        <input type="checkbox" name="dir_o_w" id="dir_o_w" value="true"{DIR_O_W_CHECKED} />
+                        <label for="dir_o_w">{TEXT_WRITE}</label>
+                        <br />
+                        <input type="checkbox" name="dir_o_e" id="dir_o_e" value="true"{DIR_O_E_CHECKED} />
+                        <label for="dir_o_e">{TEXT_EXECUTE}</label>
+                    </td>
+                </tr>
+                </table>
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_PAGES_DIRECTORY}:</td>
+            <td class="setting_value" colspan="2">
+        <!-- BEGIN input_pages_directory_block -->
+            <input type="text" name="pages_directory" value="{PAGES_DIRECTORY}" />
+        <!-- END input_pages_directory_block -->
+        <!-- BEGIN show_pages_directory_block -->
+            <button type="button" style="width: 100%; text-align: left; padding: 0; cursor: text; line-height: 1.925em; " >{PAGES_DIRECTORY}</button>
+        <!-- END show_pages_directory_block -->
+            </td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_MEDIA_DIRECTORY}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="media_directory" value="{MEDIA_DIRECTORY}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_PAGE_EXTENSION}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="page_extension" value="{PAGE_EXTENSION}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_PAGE_SPACER}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="page_spacer" value="{PAGE_SPACER}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_RENAME_FILES_ON_UPLOAD}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="rename_files_on_upload" value="{RENAME_FILES_ON_UPLOAD}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_SESSION_IDENTIFIER}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="app_name" value="{APP_NAME}" /></td>
+        </tr>
+        <tr{DISPLAY_ADVANCED}>
+            <td class="setting_name">{TEXT_SEC_ANCHOR}:</td>
+            <td class="setting_value" colspan="2"><input type="text" name="sec_anchor" value="{SEC_ANCHOR}" /></td>
+        </tr>
+        <!-- BASIC MAILER SETTINGS -->
+        <!-- https://de.ssl-tools.net/mailservers -->
+        <tr>
+            <td colspan="3" style="padding-top: 10px;">
+                <h2>{HEADING_WBMAILER_SETTINGS}</h2>
+                <p style="line-height: 1.4em; margin-top: 0;">{TEXT_WBMAILER_DEFAULT_SETTINGS_NOTICE}</p>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WBMAILER_DEFAULT_SENDER_MAIL}:</td>
+            <td class="setting_value" colspan="2"><input type="text" style="width: 250px" name="server_email" value="{SERVER_EMAIL}" /></td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WBMAILER_DEFAULT_SENDER_NAME}:</td>
+            <td class="setting_value" colspan="2"><input type="text" style="width: 250px" name="wbmailer_default_sendername" value="{WBMAILER_DEFAULT_SENDERNAME}" /></td>
+        </tr>
+        <tr>
+            <td class="setting_name">{TEXT_WBMAILER_FUNCTION}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="radio" name="wbmailer_routine" id="wbmailer_routine_phpmail" style="width: 14px; " value="phpmail"{PHPMAIL_SELECTED} />
+                <label for="wbmailer_routine_phpmail" >{TEXT_WBMAILER_PHP}</label>
+                <input type="radio" name="wbmailer_routine" id="wbmailer_routine_smtp" style="width: 14px; " value="smtp"{SMTPMAIL_SELECTED} />
+                <label for="wbmailer_routine_smtp" >{TEXT_WBMAILER_SMTP}</label>
+            </td>
+        </tr>
+        <!-- MORE ADVANCED SMTP MAILER SETTINGS -->
+        <tr id="row_wbmailer_smtp_settings"{SMTP_VISIBILITY}>
+            <td colspan="3" style="padding-top: 10px;">
+            <p style="line-height: 1.4em; margin-top: 0;">{TEXT_WBMAILER_NOTICE}</p>
+            </td>
+        </tr>
+        <tr id="row_wbmailer_smtp_host"{SMTP_VISIBILITY}>
+            <td class="setting_name">{TEXT_WBMAILER_SMTP_HOST}:</td>
+            <td class="setting_value" colspan="2">
+            <input type="text" style="width: 250px" name="wbmailer_smtp_host" value="{WBMAILER_SMTP_HOST}" />
+            </td>
+        </tr>
+
+        <tr id="row_wbmailer_smtp_port"{SMTP_VISIBILITY}>
+            <td class="setting_name">Smtp Port:</td>
+            <td class="setting_value" >
+                <select name="wbmailer_smtp_port" id="wbmailer_smtp_port" style="width: 255px;">
+                    <option value="25">{TEXT_PLEASE_SELECT}</option>
+                    <!-- BEGIN smtp_port_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{PNAME}</option>
+                    <!-- END smtp_port_list_block -->
+                </select>
+            </td>
+            <td></td>
+        </tr>
+        <!--  -->
+        <tr id="row_wbmailer_smtp_auth_mode"{SMTP_VISIBILITY}>
+            <td class="setting_name">{TEXT_WBMAILER_SMTP_AUTH}:</td>
+            <td class="setting_value" colspan="2">
+                <input type="checkbox" disabled="disabled" name="wbmailer_smtp_auth" id="wbmailer_smtp_auth" value="1" {SMTP_AUTH_SELECTED} style="width: 14px; " />
+                <label for="wbmailer_smtp_auth">({TEXT_WBMAILER_SMTP_AUTH_NOTICE})</label>
+            </td>
+        </tr>
+
+        <tr id="row_wbmailer_smtp_secure"{SMTP_VISIBILITY}>
+            <td class="setting_name">Smtp Secure:</td>
+            <td class="setting_value" >
+                <select name="wbmailer_smtp_secure" id="wbmailer_smtp_secure" style="width: 255px;">
+                    <option value="">{TEXT_PLEASE_SELECT}</option>
+                    <!-- BEGIN smtp_secure_list_block -->
+                        <option value="{VALUE}" {SELECTED}>{SNAME}</option>
+                    <!-- END smtp_secure_list_block -->
+                </select>
+            </td>
+            <td></td>
+        </tr>
+
+        <tr id="row_wbmailer_smtp_username"{SMTP_VISIBILITY}>
+            <td class="setting_name">{TEXT_WBMAILER_SMTP_USERNAME}:</td>
+            <td class="setting_value" colspan="2">
+            <input type="text" style="width: 250px" name="wbmailer_smtp_username" value="{WBMAILER_SMTP_USERNAME}" />
+            </td>
+        </tr>
+        <tr id="row_wbmailer_smtp_password"{SMTP_VISIBILITY}>
+            <td class="setting_name">{TEXT_WBMAILER_SMTP_PASSWORD}:</td>
+            <td class="setting_value" colspan="2">
+            <input type="password" style="width: 250px" name="wbmailer_smtp_password" value="{WBMAILER_SMTP_PASSWORD}" />
+            </td>
+        </tr>
+        <!-- END show_access_block -->
+        <tr>
+            <td class="setting_name">&nbsp;</td>
+            <td class="">
+                <input type="submit" name="submit" value="{TEXT_SAVE}" class="save" />
+                <input type="reset" name="reset" value="{TEXT_RESET}" class="reset" />
+            </td>
+            <td class="setting_value_permissions" style="text-align: right;">
+                <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="btn  btn-default {DISPLAY_ADVANCED_BUTTON}">{ADVANCED_BUTTON}</button>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+</form>
+<hr />
+<div style="min-height: 2.225em; width: 100%; ">
+<button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON}">{ADVANCED_BUTTON}</button>
+<span class="warning" style="position: relative; width: 100%; margin: auto; font-size: 0.885em;">{MODE_SWITCH_WARNING}</span>
+</div>
+<script src="{THEME_URL}/js/setting.js" type="text/javascript"></script>
+<!-- END main_block -->
Index: trunk/admin/themes/templates/start.htt
===================================================================
--- trunk/admin/themes/templates/start.htt	(nonexistent)
+++ trunk/admin/themes/templates/start.htt	(revision 2)
@@ -0,0 +1,131 @@
+<!--
+ @version         $Id: start.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div id="start-block">
+    <h5 style="text-align: center;">{WELCOME_MESSAGE}. {CURRENT_USER} {DISPLAY_NAME}</h5>
+    <p class="warnung" style="color: #FF0000; font-weight: bold; text-align: center;">{WARNING}</p>
+    <ul class="start-block">
+    <!-- BEGIN show_pages_block -->
+        <li>
+            <table class="section" style="{DISPLAY_PAGES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/pages/index.php"> <img src="{THEME_URL}/icons/pages.png" alt="{PAGES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/pages/index.php"><span class="title">{PAGES}</span></a>
+                    {PAGES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_pages_block -->
+    <!-- BEGIN show_media_block -->
+        <li>
+            <table class="section" style="{DISPLAY_MEDIA};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/media/index.php"> <img src="{THEME_URL}/icons/media.png" alt="{MEDIA}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/media/index.php"><span class="title">{MEDIA}</span></a>
+                    {MEDIA_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_media_block -->
+    <!-- BEGIN show_addons_block -->
+        <li>
+            <table class="section" style="{DISPLAY_ADDONS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/addons/index.php"> <img src="{THEME_URL}/icons/addons.png" alt="{ADDONS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/addons/index.php"><span class="title">{ADDONS}</span></a>
+                    {ADDONS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_addons_block -->
+    <!-- BEGIN show_preferences_block -->
+        <li>
+            <table class="section" style="{DISPLAY_PREFERENCES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/preferences/index.php"> <img src="{THEME_URL}/icons/preferences.png" alt="{PREFERENCES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/preferences/index.php"><span class="title">{PREFERENCES}</span></a>
+                    {PREFERENCES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_preferences_block -->
+    <!-- BEGIN show_settings_block -->
+        <li>
+            <table class="section" style="{DISPLAY_SETTINGS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/settings/index.php"> <img src="{THEME_URL}/icons/settings.png" alt="{SETTINGS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/settings/index.php"><span class="title">{SETTINGS}</span></a>
+                    {SETTINGS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_settings_block -->
+    <!-- BEGIN show_admintools_block -->
+        <li>
+            <table class="section" style="{DISPLAY_ADMINTOOLS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/admintools/index.php"> <img src="{THEME_URL}/icons/admintools.png" alt="{ADMINTOOLS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/admintools/index.php"><span class="title">{ADMINTOOLS}</span></a>
+                    {ADMINTOOLS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_admintools_block -->
+    <!-- BEGIN show_access_block -->
+        <li>
+            <table class="section" style="{DISPLAY_ACCESS};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+              <a href="{ADMIN_URL}/access/index.php"> <img src="{THEME_URL}/icons/access.png" alt="{ACCESS}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/access/index.php"><span class="title">{ACCESS}</span></a>
+                    {ACCESS_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+        </li>
+    <!-- END show_access_block -->
+        <li style="min-height: 1.525em;">{START_LIST}</li>
+    </ul>
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/success.htt
===================================================================
--- trunk/admin/themes/templates/success.htt	(nonexistent)
+++ trunk/admin/themes/templates/success.htt	(revision 2)
@@ -0,0 +1,14 @@
+<!--
+ @version         $Id: success.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<div class="msg-box rounded" style="margin: 1.225em auto;">
+    <p>{MESSAGE}</p>
+<!-- BEGIN show_redirect_block -->
+ <script type="text/javascript">
+  setTimeout("location.href='{REDIRECT}'", {REDIRECT_TIMER});
+ </script>
+<!-- END show_redirect_block -->
+<input type="button" name="submit" value="{BACK}" onclick="window.location = '{REDIRECT}';" />
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/templates.htt
===================================================================
--- trunk/admin/themes/templates/templates.htt	(nonexistent)
+++ trunk/admin/themes/templates/templates.htt	(revision 2)
@@ -0,0 +1,99 @@
+<!--
+ @version         $Id: templates.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: left;"></td>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_module_block -->
+                <span ><a class="button" href="{URL_MODULES}">{MENU_MODULES}</a></span>
+                -
+    <!-- END addon_module_block -->
+    <!-- BEGIN addon_language_block -->
+                <span ><a class="button" href="{URL_LANGUAGES}">{MENU_LANGUAGES}</a></span>
+                -
+    <!-- END addon_language_block -->
+    <!-- BEGIN addon_template_block -->
+                <span class="button" style="min-width: 8.525em;">{URL_ADVANCED}</span>
+    <!-- END addon_template_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+
+<!-- BEGIN template_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+{FTAN}
+<h2>{HEADING_INSTALL_TEMPLATE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td style="line-height: 3.525em;">
+                    <input type="file" name="userfile" size="82" />
+                    <script type="text/javascript">
+                    document.install.userfile.focus();
+                    </script>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_INSTALL}" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_install_block -->
+
+<!-- BEGIN template_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+<h2>{HEADING_UNINSTALL_TEMPLATE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td>
+                    <select name="file" style="width: 75%;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN template_uninstall_select_block -->
+                        <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                    <!-- END template_uninstall_select_block -->
+                    </select>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_UNINSTALL}" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_uninstall_block -->
+
+<!-- BEGIN template_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+<h2>{HEADING_TEMPLATE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td>
+                    <select name="file" style="width: 75%;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN template_detail_select_block -->
+                        <option value="{DETAIL_VALUE}">{DETAIL_NAME}</option>
+                    <!-- END template_detail_select_block -->
+                    </select>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_detail_block -->
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/templates_details.htt
===================================================================
--- trunk/admin/themes/templates/templates_details.htt	(nonexistent)
+++ trunk/admin/themes/templates/templates_details.htt	(revision 2)
@@ -0,0 +1,35 @@
+<!--
+ @version         $Id: templates_details.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_TEMPLATE_DETAILS}</h2>
+
+<table style="width: ;">
+<tr>
+    <td width="100">{TEXT_NAME}:</td>
+    <td>{NAME}</td>
+</tr>
+<tr>
+    <td>{TEXT_AUTHOR}:</td>
+    <td>{AUTHOR}</td>
+</tr>
+<tr>
+    <td>{TEXT_VERSION}:</td>
+    <td>{VERSION}</td>
+</tr>
+<tr>
+    <td>{TEXT_DESIGNED_FOR}:</td>
+    <td>Website Baker {DESIGNED_FOR}</td>
+</tr>
+<tr>
+    <td valign="top">{TEXT_DESCRIPTION}:</td>
+    <td style="text-align: justify;">{DESCRIPTION}</td>
+</tr>
+</table>
+
+<br />
+
+<button onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/users.htt
===================================================================
--- trunk/admin/themes/templates/users.htt	(nonexistent)
+++ trunk/admin/themes/templates/users.htt	(revision 2)
@@ -0,0 +1,31 @@
+<!--
+ @version         $Id: users.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<form name="users" action="{ADMIN_URL}/users/users.php" method="post">
+    <input type="hidden" name="userstatus" value="{USER_STATUS}" />
+{FTAN}
+    <table style="margin-bottom:10px; width: 100%; border-collapse: collapse; white-space-collapsing: collapse; ">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2 class="page_titel">{HEADING_MODIFY_DELETE_USER}</h2></td>
+                <td style="float: right; line-height: 3.225em;">
+                <!-- BEGIN manage_groups_block -->
+                    <span><a class="button" href="{ADMIN_URL}/groups/index.php">{TEXT_MANAGE_GROUPS}</a></span>
+                <!-- END manage_groups_block -->
+                </td>
+             </tr>
+        </tbody>
+    </table>
+    <button type="button" name="status" title="{TEXT_USERS}" style="width: 1.825em; background: {STATUS_ICON} no-repeat center" value="{USER_STATUS}" onclick="window.location = 'index.php?status={USER_STATUS}';" class="status {DISPLAY_MODIFY}" >&nbsp;</button>
+    <select name="user_id" style="width: 41.855em;">
+<!-- BEGIN list_block -->
+        <option value="{VALUE}" {STATUS}>{NAME}</option>
+<!-- END list_block -->
+    </select>
+    <input type="submit" name="modify" style="width: 100px;" value="{TEXT_MODIFY}" class="{DISPLAY_MODIFY}" />
+    <input type="submit" name="delete" style="width: 100px;" value="{TEXT_DELETE}" onclick="return confirm('{CONFIRM_DELETE}');" class="{DISPLAY_DELETE}" />
+</form>
+<h2 style="margin-top: 1.825em;" class="{DISPLAY_ADD}">{HEADING_ADD_USER}</h2>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/users_form.htt
===================================================================
--- trunk/admin/themes/templates/users_form.htt	(nonexistent)
+++ trunk/admin/themes/templates/users_form.htt	(revision 2)
@@ -0,0 +1,169 @@
+<!--
+ @version         $Id: users_form.htt 75 2017-03-10 10:47:06Z manu $
+-->
+<!-- BEGIN main_block -->
+<form name="user" action="{ACTION_URL}" method="post" class="{DISPLAY_ADD} access" style="margin: auto; width: 100%;" >
+    <input type="hidden" name="user_id" value="{USER_ID}" />
+    <input type="hidden" name="username_fieldname" value="{USERNAME_FIELDNAME}" />
+    {FTAN}
+    <h2 style="{DISPLAY_EXTRA}">{HEADING_MODIFY_USER}</h2>
+    <div class="block-outer" style="padding: 0.825em;">
+    <table style=" border-collapse: collapse; border-spacing: 0; width: 100%;" >
+        <thead class="value_label">
+        <tr>
+        <th></th>
+        <th style=" width: 70%;"></th>
+        </tr>
+        </thead>
+        <tbody class="value_label">
+            <tr>
+                <td>{TEXT_USERNAME}:</td>
+                <td class="value_input">
+            <!-- BEGIN user_add_block -->
+                    <input type="text" name="{USERNAME_FIELDNAME}" maxlength="30" value="{USERNAME}" style="width: 52%;" />
+            <!-- END user_add_block -->
+            <!-- BEGIN user_display_block -->
+                    <div id="username" style="width: 52%;" >{USERNAME}</div>
+            <!-- END user_display_block -->
+                </td>
+            
+            </tr>
+            <tr class="ui-helper-clearfix">
+                <td class="setting_name">
+                    <label for="pwLen" >Passwordlength:</label>
+                </td>
+                <td class="value_input">
+                  <input type="text" onchange="onChange(this);" id="pwLen" value="8" name="length" style="width: 15%;" />
+                </td>
+            </tr>
+            
+            <tr>
+                <td>{TEXT_PASSWORD}:</td>
+                <td class="value_input">
+                    <input type="text" id="password" name="password" maxlength="30" value="" style="width: 52%;" />
+                    <input type="button" value="generate" onclick="onClick(this);" style="width: 15%;" />
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_RETYPE_PASSWORD}:</td>
+                <td class="value_input">
+                    <input type="password" id="password2" name="password2" maxlength="30" value="" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr style="{DISPLAY_EXTRA}">
+                <td>&nbsp;</td>
+                <td class="warning" style="text-align: left; width: 52%;">
+                    {CHANGING_PASSWORD}
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_DISPLAY_NAME}:</td>
+                <td class="value_input">
+                    <input type="text" name="display_name" maxlength="255" value="{DISPLAY_NAME}" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_EMAIL}:</td>
+                <td class="value_input">
+                    <input type="text" name="email" maxlength="255" value="{EMAIL}" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr style="{DISPLAY_HOME_FOLDERS}">
+                <td>{TEXT_HOME_FOLDER}:</td>
+                <td class="value_input">
+                    <select name="home_folder" style="width: 53%;" >
+                        <option value="">{TEXT_NONE}</option>
+                        <!-- BEGIN folder_list_block -->
+                        <option value="{FOLDER}"{SELECTED}>{NAME}</option>
+                        <!-- END folder_list_block -->
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_GROUP}:</td>
+                <td class="value_input">
+                    <select name="groups[]" multiple="multiple" size="5" style="width: 53%;" >
+                    <!-- BEGIN group_list_block -->
+                        <option value="{ID}" {SELECTED}>{NAME}</option>
+                    <!-- END group_list_block -->
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td style="text-align: left;">
+                    <input type="radio" name="active[]" id="active" value="1" {ACTIVE_CHECKED} />
+                    <label for="active">{TEXT_ACTIVE}</label>
+                    <input type="radio" name="active[]" id="disabled" value="0" {DISABLED_CHECKED} />
+                    <label for="disabled">{TEXT_DISABLED}</label>
+                </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td style="text-align: left;">
+                    <input type="submit" name="submit" value="{SUBMIT_TITLE}" />
+                    <input type="reset" name="reset" value="{TEXT_RESET}" />
+                    <input type="button" style="width: 100px; margin-top: 5px;" onclick="javascript: window.location = 'index.php';" value="{TEXT_CANCEL}">
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    </div>
+</form>
+<script type="text/javascript">
+    function toggle_radio(radio_on, radio_off) {
+       document.getElementById(radio_on).checked = true;
+       document.getElementById(radio_off).checked = true;
+    }
+</script>
+<script src="{ADMIN_URL}/users/PasswordGenerator.js"></script>
+<script>
+    var _options = _options || window._options || { };
+            _options.length = 8;
+            _options.lowercase = true;
+            _options.uppercase = true;
+            _options.numbers = true;
+            _options.special_character = true;
+            _options.brackets = true;
+            _options.minus = true;
+            _options.underscore = true;
+            _options.space = true;
+/*
+    passwort.set({
+        length: 50,
+        lowercase: false,
+        uppercase: false,
+        numbers: false,
+        special_character: true,
+        brackets: false,
+        minus: false,
+        underscore: false,
+        space: false
+    });
+ */
+    
+    _options.el   = document.querySelector('#password');
+    _options.el2  = document.querySelector('#password2');
+    var passwort  = new PasswordGenerator(_options);
+console.info( _options.el );
+console.info( _options.el2 );
+console.info( passwort.get() );
+//    passwort.render();
+    //set option with onChange event
+    function onChange(e) {
+        var obj = {};
+        if(e.name == 'length') {
+            obj[e.name] = parseInt(e.value);
+        } else {
+            obj[e.name] = e.checked ? true : false;
+        }
+        passwort.set(obj);
+        passwort.render();
+    }
+    function onClick(e){
+        passwort.render();
+        return false;
+    }
+</script>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/admin/themes/templates/warning.html
===================================================================
--- trunk/admin/themes/templates/warning.html	(nonexistent)
+++ trunk/admin/themes/templates/warning.html	(revision 2)
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<!--
+ @version         $Id: warning.html 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>Maximum Invalid Login Attemps Exceeded</title>
+<style type="text/css"><!--
+body,td,th {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    color: #000000;
+}
+body {
+    margin: 0px;
+  background: #A8BCCB url(../images/background.png) ;
+  background-repeat:repeat-x;
+}
+a:link, a:visited, a:active {
+    color: #003366;
+    text-decoration: none;
+}
+a:hover {
+    text-decoration: underline;
+    color: #336699;
+}
+h1 {
+    text-align: center;
+    font-size: 18px;
+    margin-top: 0;
+    color: #000;
+    text-transform: uppercase;
+}
+hr {
+    height: 1px;
+    color: #336699;
+    background-color: #336699;
+    border: 0;
+}
+div#message {
+    margin: 0 auto;
+    height: 80px;
+    padding: 0;
+    text-align: center;
+}
+--></style></head>
+<body>
+
+<div id='message'>
+    <h1>Excessive Invalid Logins</h1>
+    You have attempted to login too many times
+</div>
+
+</body>
+</html>
\ No newline at end of file
Index: trunk/admin/users/PasswordGenerator.js
===================================================================
--- trunk/admin/users/PasswordGenerator.js	(nonexistent)
+++ trunk/admin/users/PasswordGenerator.js	(revision 2)
@@ -0,0 +1,120 @@
+/**
+ * https://github.com/webdynamik/password-generator
+ */
+// passwort-generator.js
+// http://passwort-generieren.de
+// (c) 2014 Jan Krause
+(function() {
+    "use strict";
+
+    var root = this;
+
+    var PasswordGenerator = function(options) {
+        if(!options){
+            options = {};
+            options.el = document.body;
+console.info( options );
+        }
+
+        this.options = this.extend(options, this.default_options);
+    };
+
+    // Export the object for **Node.js**
+    if (typeof exports !== 'undefined') {
+        if (typeof module !== 'undefined' && module.exports) {
+            exports = module.exports = PasswordGenerator;
+        }
+        exports.PasswordGenerator = PasswordGenerator;
+    } else {
+        root.PasswordGenerator = PasswordGenerator;
+    }
+
+    PasswordGenerator.prototype = {
+        options: {},
+        default_options: {
+            length: 8,
+            lowercase: true,
+            uppercase: true,
+            numbers: true,
+            special_character: true,
+            brackets: true,
+            minus: true,
+            underscore: true,
+            space: true
+        },
+        _passwort: '',
+
+        extend: function(options,defaults){
+            var extended = {};
+            var prop;
+            for (prop in defaults) {
+                if (Object.prototype.hasOwnProperty.call(defaults, prop)) {
+                    extended[prop] = defaults[prop];
+                }
+            }
+            for (prop in options) {
+                if (Object.prototype.hasOwnProperty.call(options, prop)) {
+                    extended[prop] = options[prop];
+                }
+            }
+            return extended;
+        },
+
+        generate: function() {
+            var _i, _len, _passwortString = '';
+
+            if(this.options.lowercase){
+                _passwortString += 'abcdefghijklmnopqrstuvwxyz';
+            }
+
+            if(this.options.uppercase){
+                _passwortString += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+            }
+
+            if(this.options.numbers){
+                _passwortString += '0123456789';
+            }
+
+            if(this.options.special_character){
+                _passwortString += ',.;:#+~*=&%$§!|/€@""^°`´\'\\';
+            }
+
+            if(this.options.brackets){
+                _passwortString += '<>[](){}';
+            }
+
+            if(this.options.minus){
+                _passwortString += '-';
+            }
+
+            if(this.options.underscore){
+                _passwortString += '_';
+            }
+
+            if(this.options.space){
+                _passwortString += ' ';
+            }
+
+            this._passwort = '';
+            for (_i = 0, _len = this.options.length; _i < _len; _i++) {
+                this._passwort += _passwortString.charAt(Math.floor(Math.random() * _passwortString.length));
+            }
+        },
+
+        set: function(param) {
+            this.options = this.extend(param,this.options);
+console.info( this.options );
+        },
+
+        get: function() {
+            this.generate();
+            return this._passwort;
+        },
+
+        render: function() {
+            this.options.el.value  = this.get();
+            this.options.el2.value = ''; //this._passwort;
+        }
+    };
+
+}.call(this));
\ No newline at end of file
Index: trunk/admin/users/add.php
===================================================================
--- trunk/admin/users/add.php	(nonexistent)
+++ trunk/admin/users/add.php	(revision 2)
@@ -0,0 +1,153 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         users
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Access', 'users_add',false);
+$aErrorMessage = array();
+
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon(ADMIN_DIRECTORY.'\\users');
+// Create a javascript back link
+$js_back = ADMIN_URL.'/users/index.php';
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $js_back );
+}
+// After check print the header
+$admin->print_header();
+/**
+
+ * $sLanguagesAddonDefaultFile = WB_PATH.'/account/languages/EN.php';
+ * if (is_readable($sLanguagesAddonDefaultFile)){include $sLanguagesAddonDefaultFile;}
+ * $sLanguagesAddonFile = WB_PATH.'/account/languages/'.LANGUAGE.'.php';
+ * if (is_readable($sLanguagesAddonFile)){include $sLanguagesAddonFile;}
+ */
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $oTrans ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+$aInputs = array();
+$aInputs = array_merge( $_POST );
+// Get details entered
+$groups_id = ( isset($aInputs['groups']) ? implode(",", $aInputs['groups']) : '');
+$active = intval( is_array($aInputs['active'])  ?($aInputs['active'][0]):$aInputs['active']);
+$username_fieldname = $admin->get_post('username_fieldname');
+$username = strtolower($admin->get_post($username_fieldname));
+$password = $admin->get_post('password');
+$password2 = $admin->get_post('password2');
+$display_name = $admin->StripCodeFromText($admin->get_post('display_name'));
+$email = $admin->StripCodeFromText($admin->get_post('email'));
+$home_folder = $admin->get_post('home_folder');
+$default_language = DEFAULT_LANGUAGE;
+$default_timezone = DEFAULT_TIMEZONE;
+/*----------------------------------------------------------------------------------------------------*/
+    // Check values
+    // Check if username already exists
+    $sql  = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+          . 'WHERE `username` = \''.$username.'\' ';
+    if ($database->get_one($sql)) {
+        $aErrorMessage[] = $oTrans->MESSAGE_USERS_USERNAME_TAKEN;
+    }
+    if(!preg_match('/^[a-z]{1}[a-z0-9_-]{2,}$/i', $username)) {
+        $aErrorMessage[] = $oTrans->MESSAGE_USERS_NAME_INVALID_CHARS.' / '
+                         . $oTrans->MESSAGE_USERS_USERNAME_TOO_SHORT;
+    }
+    if(strlen($password) < 2) {
+        $aErrorMessage[] = $oTrans->MESSAGE_USERS_PASSWORD_TOO_SHORT;
+    }
+    if($password != $password2) {
+        $aErrorMessage[] = $oTrans->MESSAGE_USERS_PASSWORD_MISMATCH;
+    }
+    $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` ';
+    $sql .= 'WHERE  `display_name` LIKE \''.$display_name.'\'';
+    if ($database->get_one($sql) > 0) {
+        $aErrorMessage[] = ( @$oTrans->MESSAGE_USERS_DISPLAYNAME_TAKEN?:$oTrans->MESSAGE_MEDIA_BLANK_NAME.' ('.$oTrans->TEXT_DISPLAY_NAME.')');
+    }
+    if($email != '')
+    {
+        // Check if the email already exists
+        $sql  = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+              . 'WHERE `email` = \''.$email.'\' ';
+        if ($database->get_one($sql))
+        {
+            if(isset($oTrans->MESSAGE_USERS_EMAIL_TAKEN))
+            {
+                $aErrorMessage[] = $oTrans->MESSAGE_USERS_EMAIL_TAKEN;
+            }
+            if($admin->validate_email($email) == false)
+            {
+                $aErrorMessage[] = $oTrans->MESSAGE_USERS_INVALID_EMAIL;
+            }
+        }
+    } else { // e-mail must be present
+        $aErrorMessage[] = $oTrans->MESSAGE_SIGNUP_NO_EMAIL;
+    }
+    if($groups_id == '') {
+        $aErrorMessage[] = $oTrans->MESSAGE_USERS_NO_GROUP;
+    }
+/*----------------------------------------------------------------------------------------------------*/
+// choose group_id from groups_id - workaround for still remaining calls to group_id (to be cleaned-up)
+$gid_tmp = explode(',', $groups_id);
+if(in_array('1', $gid_tmp)) $group_id = '1'; // if user is in administrator-group, get this group
+else $group_id = $gid_tmp[0]; // else just get the first one
+unset($gid_tmp);
+
+if (!sizeof($aErrorMessage)) {
+// MD5 supplied password
+$md5_password = md5($password);
+$now = time();
+// Insert the user into the database
+$sql = // add the Admin user
+     'INSERT INTO `'.TABLE_PREFIX.'users` SET '
+    .    '`group_id`='.intval($group_id).', '
+    .    '`groups_id`=\''.$database->escapeString($groups_id).'\', '
+    .    '`active`=\''.$database->escapeString($active).'\', '
+    .    '`username`=\''.$database->escapeString($username).'\', '
+    .    '`password`=\''.$database->escapeString($md5_password).'\', '
+    .    '`remember_key`=\'\', '
+    .    '`last_reset`=0, '
+    .    '`display_name`=\''.$database->escapeString($display_name).'\', '
+    .    '`email`=\''.$database->escapeString($email).'\', '
+    .    '`timezone`=\''.$database->escapeString($default_timezone).'\', '
+    .    '`date_format`=\''.DEFAULT_DATE_FORMAT.'\', '
+    .    '`time_format`=\''.DEFAULT_TIME_FORMAT.'\', '
+    .    '`language`=\''.$database->escapeString($default_language).'\', '
+    .    '`home_folder`=\''.$database->escapeString($home_folder).'\', '
+    .    '`login_when`=\''.time().'\', '
+    .    '`login_ip`=\'\' '
+    .    '';
+    if (!$database->query($sql)) {
+        if($database->is_error()) {
+            $aErrorMessage[] = $database->get_error();
+        }
+    }
+}
+if (sizeof($aErrorMessage)) {
+    $admin->print_error(implode('<br />', $aErrorMessage), $js_back);
+} else {
+    $admin->print_success($oTrans->MESSAGE_USERS_ADDED, $js_back);
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/users/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/users/index.php
===================================================================
--- trunk/admin/users/index.php	(nonexistent)
+++ trunk/admin/users/index.php	(revision 2)
@@ -0,0 +1,243 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         users
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$admin = new admin('Access', 'users');
+
+$iUserStatus = 1;
+$iUserStatus = ( ( $admin->get_get('status')==1 ) ? 0 : $iUserStatus );
+unset($_GET);
+
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon(ADMIN_DIRECTORY.'\\users');
+/**
+
+ * print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+ * print_r( $oTrans ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+ */
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('users.htt')));
+// $template->debug = true;
+
+$template->set_file('page', 'users.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_block("main_block", "manage_groups_block", "groups");
+$template->set_var('ADMIN_URL', ADMIN_URL);
+$template->set_var('FTAN', $admin->getFTAN());
+$template->set_var('USER_STATUS', $iUserStatus );
+
+$UserStatusActive = 'url('.THEME_URL.'/images/user.png)';
+$UserStatusInactive = 'url('.THEME_URL.'/images/user_red.png)';
+
+$sUserTitle = ($iUserStatus == 0) ? $oTrans->MENU_USERS.' '.strtolower($oTrans->TEXT_ACTIVE) : $oTrans->MENU_USERS.' '.strtolower($oTrans->TEXT_DEACTIVED) ;
+
+$template->set_var('TEXT_USERS', $sUserTitle.' '.$oTrans->TEXT_SHOW );
+$template->set_var('STATUS_ICON', ( ($iUserStatus==0) ? $UserStatusActive : $UserStatusInactive) );
+
+// Get existing value from database
+$sql  = 'SELECT `user_id`, `username`, `display_name`, `active` FROM `'.TABLE_PREFIX.'users` ' ;
+$sql .= 'WHERE user_id != 1 ';
+$sql .=   'AND active = '.$iUserStatus.' ';
+$sql .= 'ORDER BY `display_name`,`username`';
+
+$results = $database->query($sql);
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), 'index.php');
+}
+
+$sUserList  = $oTrans->TEXT_LIST_OPTIONS.' ';
+$sUserList .= ($iUserStatus == 1) ? $oTrans->MENU_USERS.' '.strtolower($oTrans->TEXT_ACTIVE) : $oTrans->MENU_USERS.' '.strtolower($oTrans->TEXT_DEACTIVED) ;
+// Insert values into the modify/remove menu
+$template->set_block('main_block', 'list_block', 'list');
+if($results->numRows() > 0) {
+    // Insert first value to say please select
+    $template->set_var('VALUE', '');
+    $template->set_var('NAME', $sUserList);
+    $template->set_var('STATUS', 'class="user-active"' );
+    $template->parse('list', 'list_block', true);
+    // Loop through users
+    while($user = $results->fetchRow()) {
+        $template->set_var('VALUE',$admin->getIDKEY($user['user_id']));
+        $template->set_var('STATUS', ($user['active']==false ? 'class="user-inactive"' : 'class="user-active"') );
+        $template->set_var('NAME', $user['display_name'].' ('.$user['username'].')');
+        $template->parse('list', 'list_block', true);
+    }
+} else {
+    // Insert single value to say no users were found
+    $template->set_var('NAME', $oTrans->TEXT_NONE_FOUND);
+    $template->parse('list', 'list_block', true);
+}
+
+// Insert permissions values
+if($admin->get_permission('users_add') != true) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+}
+if($admin->get_permission('users_modify') != true) {
+    $template->set_var('DISPLAY_MODIFY', 'hide');
+}
+if($admin->get_permission('users_delete') != true) {
+    $template->set_var('DISPLAY_DELETE', 'hide');
+}
+$HeaderTitle  = (($iUserStatus == 1) ? $oTrans->HEADING_MODIFY_ACTIVE_USER.' ' : $oTrans->HEADING_MODIFY_DELETE_USER.' ');
+$HeaderTitle .= (($iUserStatus == 1) ? strtolower($oTrans->TEXT_ACTIVE) : strtolower($oTrans->TEXT_DEACTIVED));
+// Insert language headings
+$template->set_var(array(
+        'HEADING_MODIFY_DELETE_USER' => $HeaderTitle,
+        'HEADING_ADD_USER' => $oTrans->HEADING_ADD_USER
+        )
+);
+// insert urls
+$template->set_var(array(
+        'ADMIN_URL' => ADMIN_URL,
+        'WB_URL' => WB_URL,
+        'THEME_URL' => THEME_URL
+        )
+);
+// Insert language text and messages
+$template->set_var(array(
+        'TEXT_MODIFY' => $oTrans->TEXT_MODIFY,
+        'TEXT_DELETE' => (($iUserStatus == 1) ? $oTrans->TEXT_DEACTIVE:$oTrans->TEXT_DELETE),
+        'TEXT_MANAGE_GROUPS' => ( $admin->get_permission('groups') == true ) ? $oTrans->TEXT_MANAGE_GROUPS : "**",
+        'CONFIRM_DELETE' => (($iUserStatus == 1) ? $oTrans->TEXT_ARE_YOU_SURE : $oTrans->MESSAGE_USERS_CONFIRM_DELETE)
+        )
+);
+if ( $admin->get_permission('groups') == true ) $template->parse("groups", "manage_groups_block", true);
+// Parse template object
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+// Setup template object, parse vars to it, then parse it
+// Create new template object
+$template = new Template(dirname($admin->correct_theme_source('users_form.htt')), 'remove');
+// $template->debug = true;
+$template->set_file('page', 'users_form.htt');
+$template->set_block('page', 'main_block', 'main');
+$template->set_block('main_block', 'user_display_block', 'user_display');
+
+$template->set_var('DISPLAY_EXTRA', 'display:none;');
+$template->set_var('ACTIVE_CHECKED', ' checked="checked"');
+$template->set_var('ACTION_URL', ADMIN_URL.'/users/add.php');
+$template->set_var('SUBMIT_TITLE', $oTrans->TEXT_ADD);
+$template->set_var('FTAN', $admin->getFTAN());
+// {READONLY}
+$template->set_var('READONLY', '' );
+
+// insert urls
+$template->set_var(array(
+        'ADMIN_URL' => ADMIN_URL,
+        'WB_URL' => WB_URL,
+        'THEME_URL' => THEME_URL
+        )
+);
+$template->set_var('USERNAME', '');
+
+// Add groups to list
+$template->set_block('main_block', 'group_list_block', 'group_list');
+$results = $database->query("SELECT group_id, name FROM ".TABLE_PREFIX."groups WHERE group_id != '1'");
+if($results->numRows() > 0) {
+    $template->set_var('ID', '');
+    $template->set_var('NAME', $oTrans->TEXT_PLEASE_SELECT.'...');
+    $template->set_var('SELECTED', ' selected="selected"');
+    $template->parse('group_list', 'group_list_block', true);
+    while($group = $results->fetchRow()) {
+        $template->set_var('ID', $group['group_id']);
+        $template->set_var('NAME', $group['name']);
+        $template->set_var('SELECTED', '');
+        $template->parse('group_list', 'group_list_block', true);
+    }
+}
+// Only allow the user to add a user to the Administrators group if they belong to it
+if(in_array(1, $admin->get_groups_id())) {
+    $users_groups = $admin->get_groups_name();
+    $template->set_var('ID', '1');
+    $template->set_var('NAME', $users_groups[1]);
+    $template->set_var('SELECTED', '');
+    $template->parse('group_list', 'group_list_block', true);
+} else {
+    if($results->numRows() == 0) {
+        $template->set_var('ID', '');
+        $template->set_var('NAME', $oTrans->TEXT_NONE_FOUND);
+        $template->parse('group_list', 'group_list_block', true);
+    }
+}
+
+// Insert permissions values
+
+if($admin->get_permission('users_add') != true) {
+    $template->set_var('DISPLAY_ADD', 'hide');
+}
+
+// Generate username field name
+$username_fieldname = 'username_';
+$salt = "abchefghjkmnpqrstuvwxyz0123456789";
+srand((double)microtime()*1000000);
+$i = 0;
+while ($i <= 7) {
+    $num = rand() % 33;
+    $tmp = substr($salt, $num, 1);
+    $username_fieldname = $username_fieldname . $tmp;
+    $i++;
+}
+
+// Work-out if home folder should be shown
+if(!HOME_FOLDERS) {
+    $template->set_var('DISPLAY_HOME_FOLDERS', 'display:none;');
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Add media folders to home folder list
+$template->set_block('main_block', 'folder_list_block', 'folder_list');
+foreach(directory_list(WB_PATH.MEDIA_DIRECTORY) AS $name) {
+    $template->set_var('NAME', str_replace(WB_PATH, '', $name));
+    $template->set_var('FOLDER', str_replace(WB_PATH.MEDIA_DIRECTORY, '', $name));
+    $template->set_var('SELECTED', ' ');
+    $template->parse('folder_list', 'folder_list_block', true);
+}
+
+// Insert language text and messages
+$template->set_var(array(
+            'TEXT_CANCEL' => $oTrans->TEXT_CANCEL,
+            'TEXT_RESET' => $oTrans->TEXT_RESET,
+            'TEXT_ACTIVE' => $oTrans->TEXT_ACTIVE,
+            'TEXT_DISABLED' => $oTrans->TEXT_DISABLED,
+            'TEXT_PLEASE_SELECT' => $oTrans->TEXT_PLEASE_SELECT,
+            'TEXT_USERNAME' => $oTrans->TEXT_USERNAME,
+            'TEXT_PASSWORD' => $oTrans->TEXT_PASSWORD,
+            'TEXT_RETYPE_PASSWORD' => $oTrans->TEXT_RETYPE_PASSWORD,
+            'TEXT_DISPLAY_NAME' => $oTrans->TEXT_DISPLAY_NAME,
+            'TEXT_EMAIL' => $oTrans->TEXT_EMAIL,
+            'TEXT_GROUP' => $oTrans->TEXT_GROUP,
+            'TEXT_NONE' => $oTrans->TEXT_NONE,
+            'TEXT_HOME_FOLDER' => $oTrans->TEXT_HOME_FOLDER,
+            'USERNAME_FIELDNAME' => $username_fieldname,
+            'CHANGING_PASSWORD' => $oTrans->MESSAGE_USERS_CHANGING_PASSWORD,
+            'CANCEL_LINK' => ADMIN_URL.'/access/index.php',
+            )
+    );
+$template->set_block( 'user_display_block', '');
+
+// Parse template for add user form
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page');
+
+$admin->print_footer();

Property changes on: trunk/admin/users/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/users/languages/DE.php
===================================================================
--- trunk/admin/users/languages/DE.php	(nonexistent)
+++ trunk/admin/users/languages/DE.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+/****************************************************************************************
+ * extended language definition for WebsiteBaker                                        *
+ * ACP-module  users                                                                    *
+ * deutsch                                                                              *
+ ****************************************************************************************/
+
+$HEADING['ADD_USER'] = 'Benutzer hinzufügen';
+$HEADING['MODIFY_USER'] = 'Benutzer ändern';
+$HEADING['MODIFY_ACTIVE_USER'] = 'Ändern/Deaktivieren von Benutzern'; // new
+$HEADING['MODIFY_DELETE_USER'] = 'Ändern/Löschen von Benutzern';
+
+$MENU['USERS'] = 'Benutzer';
+
+$MESSAGE['GENERIC_FILL_IN_ALL']  = 'Bitte alle Felder ausfüllen';
+$MESSAGE['GENERIC_FORGOT_OPTIONS']  = 'Sie haben keine Auswahl getroffen!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' nicht möglich';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Aktualisierung nicht möglich';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Sicherheitsverletzung!! Zugriff wurde verweigert!';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Das Verzeichnis wurde erfolgreich angelegt';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Das Verzeichnis konnte nicht angelegt werden';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Das Umbenennen war nicht erfolgreich';
+$MESSAGE['MEDIA_RENAMED'] = 'Das Umbenennen war erfolgreich';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Es wurden ungültige Zeichen für des Passwort verwendet';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Das Passwort wurde erfolgreich geändert';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Bitte geben Sie eine E-Mail Adresse an';
+$MESSAGE['USERS_ADDED'] = 'Der Benutzer wurde erfolgreich hinzugefügt';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Bitte beachten Sie: Sie sollten in die obigen Felder nur Werte eingeben, wenn Sie das Passwort dieses Benutzers ändern möchten';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Sind Sie sicher, dass Sie den ausgewählten Benutzer löschen möchten?';
+$MESSAGE['USERS_DELETED'] = 'Der Benutzer wurde erfolgreich gelöscht';
+$MESSAGE['USERS_DEACTIVATED'] = 'Der Benutzer wurde erfolgreich deaktiviert';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Die angegebene E-Mail Adresse wird bereits verwendet';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Die angegebene E-Mail Adresse ist ungültig';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Es wurden ungültige Zeichen für den Loginnamen verwendet';
+$MESSAGE['USERS_NO_GROUP'] = 'Es wurde keine Gruppe ausgewählt';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Das angegebene Passwort ist ungültig';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Das eingegebene Passwort war zu kurz';
+$MESSAGE['USERS_SAVED'] = 'Der Benutzer wurde erfolgreich gespeichert';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'Der angegebene Loginname wird bereits verwendet';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'Der eingegebene Loginname war zu kurz';
+$MESSAGE['USERS_WAITING_ACTIVATION'] = 'Erwarte Benutzer Aktivierung'; // new
+
+$TEXT['ACTIVE'] = 'Aktiv';
+$TEXT['ACTIVATE'] = 'Aktivieren';
+$TEXT['DEACTIVE'] = 'Deaktiveren'; // new
+$TEXT['DEACTIVED'] = 'Deaktiviert'; // new
+$TEXT['ADD'] = 'Hinzufügen';
+$TEXT['ARE_YOU_SURE'] = 'Sind Sie sicher?';
+$TEXT['BACK'] = 'Zurück';
+$TEXT['CANCEL'] = 'Abbrechen';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Kann sich selber löschen';
+$TEXT['CHANGE'] = 'Ändern';
+$TEXT['CHANGES'] = 'Änderungen';
+$TEXT['DELETE'] = 'Entfernen';
+$TEXT['DELETED'] = 'Deaktiviert';
+$TEXT['DISABLED'] = 'Ausgeschaltet';
+$TEXT['DISPLAY_NAME'] = 'Angezeigter Name';
+$TEXT['EMAIL'] = 'E-Mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-Mail Adresse';
+$TEXT['ENABLED'] = 'Eingeschaltet';
+$TEXT['ERROR'] = 'Fehler';
+$TEXT['FULL_NAME'] = 'Voller Name';
+$TEXT['GROUP'] = 'Gruppe';
+$TEXT['HOME_FOLDER'] = 'Persönlicher Ordner';
+$TEXT['HOME_FOLDERS'] = 'Persönliche Ordner';
+$TEXT['INACTIVE'] = 'Inaktiv'; // new
+$TEXT['LIST_OPTIONS'] = 'Auswahlliste';
+$TEXT['MANAGE_GROUPS'] = 'Gruppen verwalten';
+$TEXT['MODIFY'] = 'Ändern';
+$TEXT['NONE'] = 'Keine';
+$TEXT['NONE_FOUND'] = 'Keine gefunden';
+$TEXT['NO_RESULTS'] = 'Keine Ergebnisse';
+$TEXT['NO_SELECTION'] = 'Keine Auswahl';
+$TEXT['PASSWORD'] = 'Passwort';
+$TEXT['PLEASE_SELECT'] = 'Bitte auswählen';
+$TEXT['RESET'] = 'Zurücksetzen';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Neues Passwort wiederholen';
+$TEXT['RETYPE_PASSWORD'] = 'Passwort wiederholen';
+$TEXT['SAVE'] = 'Speichern';
+$TEXT['SHOW'] = 'zeigen';
+$TEXT['USER'] = 'Benutzer';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'Benutzer ist aktiv';
+$TEXT['USERS_CAN_SELFDELETE'] = 'Selbstlöschung möglich';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Benutzer kann eigene Einstellungen ändern';
+$TEXT['USERS_DELETED'] = 'Der Benutzer wurde erfolgreich gelöscht';
+$TEXT['USERS_MARKED_DELETED'] = 'Benutzer ist als gelöscht markiert'; // new

Property changes on: trunk/admin/users/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/users/languages/EN.php
===================================================================
--- trunk/admin/users/languages/EN.php	(nonexistent)
+++ trunk/admin/users/languages/EN.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+/****************************************************************************************
+ * extended language definition for WebsiteBaker                                        *
+ * ACP-module  users                                                                    *
+ * english (GB)                                                                         *
+ ****************************************************************************************/
+
+$HEADING['ADD_USER'] = 'Add User';
+$HEADING['MODIFY_USER'] = 'Change User';
+$HEADING['MODIFY_ACTIVE_USER'] = 'Changing/disabling users'; // new
+$HEADING['MODIFY_DELETE_USER'] = 'Changing/deleting users';
+
+$MENU['USERS'] = 'Users';
+
+$MESSAGE['GENERIC_FILL_IN_ALL']  = 'Please fill in all fields';
+$MESSAGE['GENERIC_FORGOT_OPTIONS']  = 'You have not made a selection!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possible';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Can not Update';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security breach! Access is denied!';
+$MESSAGE['MEDIA_DIR_MADE'] = 'The directory was created successfully';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'The directory could not be created';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'The rename was not successful';
+$MESSAGE['MEDIA_RENAMED'] = 'The renaming was successful';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid characters were used for the password';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'The password has been changed successfully';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Please enter an email address';
+$MESSAGE['USERS_ADDED'] = 'The user was successfully added';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Please note: You should only enter values ​​in the fields above, if you want to change the password of this user';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Are you sure you want to delete the selected user?';
+$MESSAGE['USERS_DELETED'] = 'The user was successfully deleted';
+$MESSAGE['USERS_DEACTIVATED'] = 'The user was successfully deactivated';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'The given e-mail address is already in use';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'The e-mail address is invalid';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid characters were used for login names';
+$MESSAGE['USERS_NO_GROUP'] = 'There was no group selected';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'The specified password is invalid';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'The password you entered was too short';
+$MESSAGE['USERS_SAVED'] = 'The user has been successfully saved';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The specified login name is already in use';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The entered login name was too short';
+$MESSAGE['USERS_WAITING_ACTIVATION'] = 'Awaiting user activation'; // new
+
+$TEXT['ACTIVE'] = 'Activ';
+$TEXT['ACTIVATE'] = 'Activate';
+$TEXT['DEACTIVE'] = 'Deactivate'; // new
+$TEXT['DEACTIVED'] = 'Disabled'; // new
+$TEXT['ADD'] = 'Add';
+$TEXT['ARE_YOU_SURE'] = 'Are you sure?';
+$TEXT['BACK'] = 'Back';
+$TEXT['CANCEL'] = 'Cancel';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete itself';
+$TEXT['CHANGE'] = 'Changing';
+$TEXT['CHANGES'] = 'Changes';
+$TEXT['DELETE'] = 'Remove';
+$TEXT['DELETED'] = 'Deleted';
+$TEXT['DISABLED'] = 'Disabled';
+$TEXT['DISPLAY_NAME'] = 'Display Name';
+$TEXT['EMAIL'] = 'E-Mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-Mail Adress';
+$TEXT['ENABLED'] = 'Enabled';
+$TEXT['ERROR'] = 'Error';
+$TEXT['FULL_NAME'] = 'Full Name';
+$TEXT['GROUP'] = 'Group';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['INACTIVE'] = 'Inactiv'; // new
+$TEXT['LIST_OPTIONS'] = 'Shortlist';
+$TEXT['MANAGE_GROUPS'] = 'Manage Groups';
+$TEXT['MODIFY'] = 'Changing';
+$TEXT['NONE'] = 'None';
+$TEXT['NONE_FOUND'] = 'Not found';
+$TEXT['NO_RESULTS'] = 'No results';
+$TEXT['NO_SELECTION'] = 'No selection';
+$TEXT['PASSWORD'] = 'Password';
+$TEXT['PLEASE_SELECT'] = 'Please select';
+$TEXT['RESET'] = 'Reset';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Repeat new password';
+$TEXT['RETYPE_PASSWORD'] = 'Repeat Password';
+$TEXT['SAVE'] = 'Save';
+$TEXT['SHOW'] = 'Show';
+$TEXT['USER'] = 'User';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'Self-deleting possible';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Users can change their own settings';
+$TEXT['USERS_DELETED'] = 'The user was successfully deleted';
+$TEXT['USERS_MARKED_DELETED'] = 'User is marked as deleted'; // new
\ No newline at end of file

Property changes on: trunk/admin/users/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/users/save.php
===================================================================
--- trunk/admin/users/save.php	(nonexistent)
+++ trunk/admin/users/save.php	(revision 2)
@@ -0,0 +1,130 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         users
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Print admin header
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+// suppress to print the header, so no new FTAN will be set
+$admin = new admin('Access', 'users_modify', false);
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon(ADMIN_DIRECTORY.'\\users');
+
+// Create a javascript back link
+$js_back = ADMIN_URL.'/users/index.php';
+
+if( !$admin->checkFTAN() )
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $js_back );
+}
+
+// After check print the header
+$admin->print_header();
+/*
+$sLanguagesAddonDefaultFile = WB_PATH.'/account/languages/EN.php';
+if (is_readable($sLanguagesAddonDefaultFile)){include $sLanguagesAddonDefaultFile;}
+$sLanguagesAddonFile = WB_PATH.'/account/languages/'.LANGUAGE.'.php';
+if (is_readable($sLanguagesAddonFile)){include $sLanguagesAddonFile;}
+*/
+$aInputs = array();
+$aErrorMessage = array();
+$aInputs = array_merge( $_POST );
+// Check if user id is a valid number and doesnt equal 1
+if(!isset($aInputs['user_id']) OR !is_numeric($aInputs['user_id']) OR $aInputs['user_id'] == 1) {
+    header("Location: index.php");
+    exit(0);
+} else {
+    $user_id = intval($aInputs['user_id']);
+}
+// Gather details entered
+$groups_id = ( isset($aInputs['groups']) ? implode(",", $aInputs['groups']) : '');
+$active = intval( is_array($aInputs['active'])  ?($aInputs['active'][0]):$aInputs['active']);
+
+$password = $admin->get_post('password');
+$password2 = $admin->get_post('password2');
+$display_name = $admin->StripCodeFromText(($admin->get_post('display_name')));
+$email = $admin->StripCodeFromText($admin->get_post('email'));
+$home_folder = $admin->get_post('home_folder');
+// Check values
+if($groups_id == "") {
+    $aErrorMessage[] = ($oTrans->MESSAGE_USERS_NO_GROUP);
+}
+
+if($password != "") {
+    if(strlen($password) < 2) {
+        $aErrorMessage[] = ($oTrans->MESSAGE_USERS_PASSWORD_TOO_SHORT);
+    }
+    if($password != $password2) {
+        $aErrorMessage[] = ($oTrans->MESSAGE_USERS_PASSWORD_MISMATCH);
+    }
+}
+    $md5_password =  md5($password);
+
+if($email != "")
+{
+    if($admin->validate_email($email) == false)
+    {
+        $aErrorMessage[] = ($oTrans->MESSAGE_USERS_INVALID_EMAIL);
+    }
+} else { // e-mail must be present
+    $aErrorMessage[] = ($oTrans->MESSAGE_SIGNUP_NO_EMAIL);
+}
+
+// Check if the email already exists
+$sql  = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` '
+      . 'WHERE `email` = \''.$email.'\' '
+      .   'AND `user_id` <> '.$user_id;
+if($database->get_one($sql))
+{
+    if(isset($oTrans->MESSAGE_USERS_EMAIL_TAKEN))
+    {
+        $aErrorMessage[] = ($oTrans->MESSAGE_USERS_EMAIL_TAKEN);
+    }
+}
+$sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` ';
+$sql .= 'WHERE `user_id` <> '.$user_id.' AND `display_name` LIKE \''.$display_name.'\'';
+if ($numRow=$database->get_one($sql)) {
+   $aErrorMessage[] = ( @$oTrans->MESSAGE_USERS_DISPLAYNAME_TAKEN?:$oTrans->MESSAGE_MEDIA_BLANK_NAME.' ('.$oTrans->TEXT_DISPLAY_NAME.')');
+}
+
+if (!sizeof($aErrorMessage)) {
+// Update the database
+$sql  = 'UPDATE `'.TABLE_PREFIX.'users` SET '
+      . '`groups_id` = \''.$database->escapeString($groups_id).'\', '
+      . '`active` = '.$database->escapeString($active).', '
+      . '`display_name` = \''.$database->escapeString($display_name).'\', '
+      . '`home_folder` = \''.$database->escapeString($home_folder).'\', '
+      . '`email` = \''.$database->escapeString($email).'\''
+      . ( ($password == "") ? ' ': ', `password` = \''.$database->escapeString($md5_password).'\' ' )
+      . 'WHERE `user_id` = '.$database->escapeString($user_id);
+
+    if (!$database->query($sql)) {
+        if($database->is_error()) {
+            $aErrorMessage[] = $database->get_error();
+        }
+    }
+}
+if (sizeof($aErrorMessage)) {
+    $admin->print_error(implode('<br />', $aErrorMessage), $js_back);
+} else {
+    $admin->print_success($oTrans->MESSAGE_USERS_SAVED, $js_back);
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/admin/users/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/admin/users/users.php
===================================================================
--- trunk/admin/users/users.php	(nonexistent)
+++ trunk/admin/users/users.php	(revision 2)
@@ -0,0 +1,231 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         users
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+ // Include config file and admin class file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+$action = 'cancel';
+// Set parameter 'action' as alternative to javascript mechanism
+$action = (isset($_POST['modify']) ? 'modify' : $action );
+$action = (isset($_POST['delete']) ? 'delete' : $action );
+
+$oTrans = Translate::getInstance();
+$oTrans->enableAddon(ADMIN_DIRECTORY.'\\users');
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $oTrans ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+
+switch ($action):
+    case 'modify' :
+            // Print header
+            $admin = new admin('Access', 'users_modify');
+            $user_id = intval($admin->checkIDKEY('user_id', 0, $_SERVER['REQUEST_METHOD']));
+            // Check if user id is a valid number and doesnt equal 1
+            if($user_id == 0){
+            $admin->print_error($oTrans->MESSAGE_GENERIC_FORGOT_OPTIONS );
+            }
+            if( ($user_id < 2 ) )
+            {
+                // if($admin_header) { $admin->print_header(); }
+                $admin->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, ADMIN_URL );
+            }
+            // Get existing values
+
+            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'users` ' ;
+            $sql .= 'WHERE user_id != 1 ';
+            $sql .=   'AND user_id = '.$user_id.' ';
+
+            $results = $database->query($sql);
+
+            $user = $results->fetchRow(MYSQLI_ASSOC);
+            // Setup template object, parse vars to it, then parse it
+            // Create new template object
+            $template = new Template(dirname($admin->correct_theme_source('users_form.htt')), 'remove');
+            // $template->debug = true;
+            $template->set_file('page', 'users_form.htt');
+            $template->set_block('page', 'main_block', 'main');
+            $template->set_block('main_block', 'user_add_block', 'user_add');
+
+            $template->set_var(array(
+                                'ACTION_URL' => ADMIN_URL.'/users/save.php',
+                                'SUBMIT_TITLE' => $oTrans->TEXT_SAVE,
+                                'USER_ID' => $user['user_id'],
+                                'USERNAME' => $user['username'],
+                                'DISPLAY_NAME' => $user['display_name'],
+                                'EMAIL' => $user['email'],
+                                'ADMIN_URL' => ADMIN_URL,
+                                'WB_URL' => WB_URL,
+                                'THEME_URL' => THEME_URL
+                                )
+                        );
+
+            $template->set_var('FTAN', $admin->getFTAN());
+            $template->set_var('READONLY', 'readonly="readonly"' );
+            if($user['active'] == 1) {
+                $template->set_var('ACTIVE_CHECKED', ' checked="checked"');
+            } else {
+                $template->set_var('DISABLED_CHECKED', ' checked="checked"');
+            }
+            // Add groups to list
+            $template->set_block('main_block', 'group_list_block', 'group_list');
+            $sql  = 'SELECT `group_id`, `name` FROM `'.TABLE_PREFIX.'groups` '
+                  . 'WHERE `group_id` != 1 '
+                  . 'ORDER BY `name`';
+            $results = $database->query($sql);
+            if ($database->query($sql))
+            {
+                $template->set_var('ID', '');
+                $template->set_var('NAME', $oTrans->TEXT_PLEASE_SELECT.'...');
+                $template->set_var('SELECTED', '');
+                $template->parse('group_list', 'group_list_block', true);
+                while($group = $results->fetchRow(MYSQLI_ASSOC))
+                {
+                    $template->set_var('ID', $group['group_id']);
+                    $template->set_var('NAME', $group['name']);
+                    $template->set_var('SELECTED', '');
+                    if ($admin->is_group_match($group['group_id'], $user['groups_id']))
+                    {
+                        $template->set_var('SELECTED', ' selected="selected"');
+                    }
+                    $template->parse('group_list', 'group_list_block', true);
+                }
+            }
+
+            // Only allow the user to add a user to the Administrators group if they belong to it
+            if ($admin->ami_group_member('1'))
+            {
+                $template->set_var('ID', '1');
+                $users_groups = $admin->get_groups_name();
+                $template->set_var('NAME', $users_groups[1]);
+                if ($admin->is_group_match('1', $user['groups_id']))
+                {
+                    $template->set_var('SELECTED', ' selected="selected"');
+                } else {
+                    $template->set_var('SELECTED', '');
+                }
+                $template->parse('group_list', 'group_list_block', true);
+            } else {
+                if($results->numRows() == 0)
+                {
+                    $template->set_var('ID', '');
+                    $template->set_var('NAME', $oTrans->TEXT_NONE_FOUND);
+                    $template->set_var('SELECTED', ' selected="selected"');
+                    $template->parse('group_list', 'group_list_block', true);
+                }
+            }
+
+            // Generate username field name
+            $username_fieldname = 'username_';
+            $salt = "abchefghjkmnpqrstuvwxyz0123456789";
+            srand((double)microtime()*1000000);
+            $i = 0;
+            while ($i <= 7) {
+                $num = rand() % 33;
+                $tmp = substr($salt, $num, 1);
+                $username_fieldname = $username_fieldname . $tmp;
+                $i++;
+            }
+
+            // Work-out if home folder should be shown
+            if(!HOME_FOLDERS) {
+                $template->set_var('DISPLAY_HOME_FOLDERS', 'display:none;');
+            }
+
+            // Include the WB functions file
+            require_once(WB_PATH.'/framework/functions.php');
+
+            // Add media folders to home folder list
+            $template->set_block('main_block', 'folder_list_block', 'folder_list');
+            foreach(directory_list(WB_PATH.MEDIA_DIRECTORY) AS $name)
+            {
+                $template->set_var('NAME', str_replace(WB_PATH, '', $name));
+                $template->set_var('FOLDER', str_replace(WB_PATH.MEDIA_DIRECTORY, '', $name));
+                if($user['home_folder'] == str_replace(WB_PATH.MEDIA_DIRECTORY, '', $name)) {
+                    $template->set_var('SELECTED', ' selected="selected"');
+                } else {
+                    $template->set_var('SELECTED', ' ');
+                }
+                $template->parse('folder_list', 'folder_list_block', true);
+            }
+
+            // Insert language text and messages
+            $template->set_var(array(
+                                'TEXT_RESET' => $oTrans->TEXT_RESET,
+                                'TEXT_CANCEL' => $oTrans->TEXT_CANCEL,
+                                'TEXT_ACTIVE' => $oTrans->TEXT_ACTIVE,
+                                'TEXT_DISABLED' => $oTrans->TEXT_DISABLED,
+                                'TEXT_PLEASE_SELECT' => $oTrans->TEXT_PLEASE_SELECT,
+                                'TEXT_USERNAME' => $oTrans->TEXT_USERNAME,
+                                'TEXT_PASSWORD' => $oTrans->TEXT_PASSWORD,
+                                'TEXT_RETYPE_PASSWORD' => $oTrans->TEXT_RETYPE_PASSWORD,
+                                'TEXT_DISPLAY_NAME' => $oTrans->TEXT_DISPLAY_NAME,
+                                'TEXT_EMAIL' => $oTrans->TEXT_EMAIL,
+                                'TEXT_GROUP' => $oTrans->TEXT_GROUP,
+                                'TEXT_NONE' => $oTrans->TEXT_NONE,
+                                'TEXT_HOME_FOLDER' => $oTrans->TEXT_HOME_FOLDER,
+                                'USERNAME_FIELDNAME' => $username_fieldname,
+                                'CHANGING_PASSWORD' => $oTrans->MESSAGE_USERS_CHANGING_PASSWORD,
+                                'HEADING_MODIFY_USER' => $oTrans->HEADING_MODIFY_USER,
+                                'CANCEL_LINK' => ADMIN_URL.'/users/index.php',
+                                )
+                        );
+
+            $template->set_block( 'user_add_block', '');
+            // Parse template object
+            $template->parse('main', 'main_block', false);
+            $template->pparse('output', 'page');
+            // Print admin footer
+            $admin->print_footer();
+            break;
+        case 'delete' :
+            // Print header
+            $admin = new admin('Access', 'users_delete');
+            $user_id = intval($admin->checkIDKEY('user_id', 0, $_SERVER['REQUEST_METHOD']));
+            // Check if user id is a valid number and doesnt equal 1
+            if($user_id == 0){
+            $admin->print_error($oTrans->MESSAGE_GENERIC_FORGOT_OPTIONS );
+            }
+            if( ($user_id < 2 ) )
+            {
+                // if($admin_header) { $admin->print_header(); }
+                $admin->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, ADMIN_URL  );
+            }
+            $sql  = 'SELECT `active` FROM `'.TABLE_PREFIX.'users` ';
+            $sql .= 'WHERE `user_id` = '.$user_id.'';
+            if( ($iDeleteUser = $database->get_one($sql)) == 1 ) {
+                $sMessage = $oTrans->MESSAGE_USERS_DEACTIVATED;
+                // Delete the user
+                $database->query("UPDATE `".TABLE_PREFIX."users` SET `active` = 0 WHERE `user_id` = '".$user_id."' ");
+            } else {
+                $sMessage = $oTrans->MESSAGE_USERS_DELETED;
+                $database->query("DELETE FROM `".TABLE_PREFIX."users` WHERE `user_id` = ".$user_id);
+            }
+
+            if($database->is_error()) {
+                $admin->print_error($database->get_error());
+            } else {
+                $admin->print_success($sMessage);
+            }
+            // Print admin footer
+            $admin->print_footer();
+            break;
+    default:
+            break;
+endswitch;

Property changes on: trunk/admin/users/users.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/config.php.new
===================================================================
--- trunk/config.php.new	(nonexistent)
+++ trunk/config.php.new	(revision 2)
@@ -0,0 +1 @@
+<?php
Index: trunk/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/favicon.ico
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/framework/DseTwo.php
===================================================================
--- trunk/framework/DseTwo.php	(nonexistent)
+++ trunk/framework/DseTwo.php	(revision 2)
@@ -0,0 +1,325 @@
+<?php
+/**
+ * @category        ISTeasy
+ * @package         DatabaseSearchEngine 1
+ * @author          Werner von der Decken
+ * @copyright       2011, ISTeasy-project
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @description     Searchengine to browse whoole database for text.
+ *                  Black- or whitelist is possible
+ *                  min requirements: PHP 5.3.6, mySQL 5.1
+ *                  this is a authorisised GPL-lizensed derivate from the original
+ *                  ISTeasy class DseOne which is available under a cc-by-sa-3.0 license
+*/
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+class DseTwo {
+
+    const USE_ALL       = 0;
+    const USE_BLACKLIST = 1;
+    const USE_WHITELIST = 2;
+
+    const RETURN_UNUSED = 0;
+    const RETURN_USED   = 1;
+    /**
+     *
+     * @var res database handle
+     */
+    private $_db;
+    /**
+     * @var object Database object
+     */
+    private $_oDb = null;
+    /**
+     *
+     * @var string prefix of tables to search for
+     */
+    private $_TablePrefix;
+    /**
+     *
+     * @var string name of the database
+     */
+    private $_db_name;
+    /**
+     *
+     * @var array list of unneeded tables.fields
+     */
+    private $_ControllList;
+    private $_ControllListTyp;
+    private $_ControllListTypen = array('All','BlackList','WhiteList');
+
+    private $_Queries;
+    private $_BasePath = '';
+    private $_CachePath = '';
+    private $_TCacheFile = '';
+    private $_DCachePrefix = '';
+    private $_bUseCache = true;
+    /**
+     *
+     * @param object $database global database object
+     */
+    public function __construct()
+    {
+        $this->_oDb = $GLOBALS['database'];
+        $this->_ControllList = array();
+        $this->_TCacheFile = 'Ie'.__CLASS__.'CacheTables';
+        $this->_DCachePrefix = 'Ie'.__CLASS__.'CacheDir';
+        $this->_Queries = array();
+    }
+    /**
+     *
+     * @param string $name name of the property
+     *        (db_handle, db_name, table_prefix, base_dir, cache_dir, use_cache)
+     * @param mixed $value value of the property
+     */
+    public function  __set($name, $value) {
+
+        switch(strtolower($name)):
+            case 'db_handle':
+                if($value) { $this->_db = $value; }
+                break;
+            case 'db_name':
+                if($value != '') { $this->_db_name = $value; }
+                break;
+            case 'table_prefix':
+                if($value != '') { $this->_TablePrefix = $value; }
+                break;
+            case 'base_dir':
+                if($value != '') {
+                    $this->_BasePath = rtrim(str_replace('\\', '/', $value) , '/');
+                }
+                break;
+            case 'cache_dir':
+                $value = rtrim(str_replace('\\', '/', $value) , '/');
+                if(!is_dir($value)) {
+                    if(!mkdir($value, 0777, true)) {
+                        $this->_CachePath = '';
+                        $this->_bUseCache = false;
+                        break;
+                    }
+                }
+                if(is_writable($value)) {
+                    $this->_CachePath = $value;
+                    $this->_bUseCache = true;
+                }else {
+                    $this->_CachePath = '';
+                    $this->_bUseCache = false;
+                }
+                break;
+            default:
+                throw new InvalidArgumentException( __CLASS__.'::'.$name );
+                break;
+        endswitch;
+    }
+
+    /**
+     * delete all table cache files
+     */
+    public function clearCache()
+    {
+        foreach($this->_ControllListTypen as $type) {
+            $cFile = $this->_CachePath.'/'.$this->_TCacheFile.$type;
+            if(file_exists($cFile)) { @unlink($cFile); }
+        }
+    }
+    /**
+     *
+     * @param string $blacklist path/filename of the blacklist
+     * @param int $type const USE_NO_LIST / USE_BLACKLIST / USE_WHITELIST
+     * @return bool false if no or empty list is available
+     */
+    public function addControllList($sControllList, $type = self::USE_BLACKLIST)
+    {
+        $this->_ControllList = array();
+        $this->_ControllListTyp = $type;
+        if(is_readable($sControllList)) {
+            if(($list = file($sControllList, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)) !== false)
+            {
+                $list = preg_grep('/^\s*?[^#;]/', $list);
+                $this->_ControllList = preg_replace('/^\s*?(.*)\s*?$/', $this->_TablePrefix.'$1', $list);
+                unset($list);
+            }
+        }else {
+            $this->_ControllListTyp = self::USE_ALL;
+        }
+        if(($type == self::USE_BLACKLIST) && (sizeof($this->_ControllList) > 0)) {
+            $this->_ControllListTyp = self::USE_ALL;
+        }
+        return (sizeof($this->_ControllList) > 0);
+    }
+    /**
+     *
+     * @param string $sDirToSearch directory to scan (relative to base_dir)
+     * @param integer $bRetunMode select matching or unmatching files
+     * @return array list of matching files
+     */
+    public function getMatchesFromDir($sDirToSearch, $bRetunMode = self::RETURN_USED)
+    {
+        $aResultFileList = array();
+        $aNewFileList = array();
+        $sDirToSearch = trim(str_replace('\\', '/', $sDirToSearch) , '/');
+        $sPathToSearch = $this->_BasePath.'/'.$sDirToSearch;
+        $sCacheFile = $this->_DCachePrefix.$bRetunMode.urlencode('/'.$sDirToSearch);
+        $sCacheFile = $this->_CachePath.'/'.$sCacheFile;
+        if(sizeof($this->_Queries) <= 0) { $this->_getTableQueries(); }
+        // read fileList from directory
+        try{
+            foreach( new DirectoryIterator($sPathToSearch) as $fileinfo ) {
+            // at first collect all files from target directory
+                $fileName = $fileinfo->getFilename();
+                if(($fileinfo->isFile()) &&
+                   (!$fileinfo->isDot()) &&
+                   ($fileinfo->getFilename() != 'index.php')) {
+                   $aNewFileList[] = $fileinfo->getFilename();
+                }
+            }
+        }catch(UnexpectedValueException $e) {}
+        // make checksum of current directory
+        $bCacheValid = false;
+        if($this->_bUseCache) {
+            $checkSum = crc32(serialize($aNewFileList));
+            if(is_readable($sCacheFile)){
+            // read cachefile if available
+                $aResultFileList = unserialize(file_get_contents($sCacheFile));
+                if($checkSum == array_shift($aResultFileList)) {
+                // compare new checksum against checksum from cachefile
+                    $bCacheValid = true;
+                }
+            }
+        }
+        if(!$bCacheValid) {
+        // skip this loop if valid cache is available
+            $aResultFileList = array();
+            while (list( , $sFilename) = each($aNewFileList)) {
+                // iterate all tables and search for filename
+                if( $this->_getMatch($sDirToSearch.'/'.$sFilename) !== false) {
+                    if($bRetunMode == self::RETURN_USED) { $aResultFileList[] = $sFilename; }
+                }else {
+                    if($bRetunMode == self::RETURN_UNUSED) { $aResultFileList[] = $sFilename; }
+                }
+            }
+            // calculate new checksum
+            $newCheckSum = crc32(serialize($aResultFileList));
+            // add checksum to array
+            array_unshift($aResultFileList,  $newCheckSum);
+            // try to write serialized array into new cachefile
+            if(file_put_contents($sCacheFile, serialize($aResultFileList)) === false) {
+                throw new RuntimeException();
+            }
+            // remove checksum again
+            array_shift($aResultFileList);
+        }
+        unset($aNewFileList);
+        return $aResultFileList;
+    }
+    /**
+     *
+     * @param <type> $sFilename
+     * @return bool true if file found in db
+     */
+    private function _getMatch($sFilename)
+    {
+        $result = 0;
+        $sFilename = str_replace('_', '\_', $sFilename);
+        $sSearch = '%'.str_replace('/', '_', $sFilename).'%';
+        while (list( , $sQuery) = each($this->_Queries)) {
+            $sql = sprintf($sQuery, $sSearch);
+            if( ($res = $this->_oDb->query($sql)) ) {
+                if( ($result = intval($res->fetchRow(MYSQL_ASSOC))) > 0 )  { break; }
+            }
+        }
+        return ($result != 0);
+    }
+    /**
+     *
+     */
+    private function _getTableQueries()
+    {
+        if($this->_bUseCache) {
+        // try to read queries from cace
+            $sCacheFile = $this->_CachePath.'/'.$this->_TCacheFile.$this->_ControllListTypen[$this->_ControllListTyp];
+            try {
+                if(is_readable($sCacheFile)) {
+                    $this->_Queries = unserialize(file_get_contents($sCacheFile));
+                }
+            }catch(Exception $e) {
+                $this->_Queries = array();
+            }
+        }
+        if(sizeof($this->_Queries) > 0) { return; } // queries alreade loaded from cache
+        $TP = str_replace('_','\_', $this->_TablePrefix);
+        $sql  = 'SELECT TABLE_NAME `table`, COLUMN_NAME `column` ';
+        $sql .= 'FROM INFORMATION_SCHEMA.COLUMNS ';
+        $sql .= 'WHERE `table_schema` = \''.$this->_db_name.'\' AND ';
+        $sql .=        '`table_name` LIKE \''.$TP.'%\' AND ';
+        $sql .=        '(`data_type` LIKE \'%text\' OR ';
+        $sql .=           '(`data_type` = \'varchar\' AND `character_maximum_length` > 20)';
+        $sql .=        ')' ;
+        $sql .= 'ORDER BY `table`, `column`';
+        if(($res = $this->_oDb->query($sql))) {
+            $lastTable = '';
+            $aOrStatements = array();
+            $sPrefix = '';
+            while($rec = $res->fetchRow(MYSQL_ASSOC))
+            { // loop through all found tables/fields
+                $sTableColumn = $rec['table'].'.'.$rec['column'];
+                switch($this->_ControllListTyp):
+                // test against controll list
+                    case self::USE_BLACKLIST:
+                        $needRecord = true;
+                        if(in_array($rec['table'], $this->_ControllList) ||
+                           in_array($sTableColumn, $this->_ControllList))
+                        {
+                            $needRecord = false;
+                        }
+                        break;
+                    case self::USE_WHITELIST:
+                        $needRecord = false;
+                        if(in_array($rec['table'], $this->_ControllList) ||
+                           in_array($sTableColumn, $this->_ControllList))
+                        {
+                            $needRecord = true;
+                        }
+                        break;
+                    default: // self::USE_ALL
+                        $needRecord = true;
+                        break;
+                endswitch;
+                if($needRecord) {
+                    if($lastTable != $rec['table']) {
+                        if(sizeof($aOrStatements)!= 0){
+                        // close previous table
+                            $this->_Queries[] = $sPrefix.implode(') OR (', $aOrStatements).')';
+                        }
+                    // start a new table
+                        $sPrefix = 'SELECT COUNT(*) `count` FROM `'.$rec['table'].'` WHERE( ';
+                        $aOrStatements = array();
+                        $lastTable = $rec['table'];
+                    }
+                    // add table.column to query
+                    $aOrStatements[] = '`'.$rec['table'].'`.`'.$rec['column'].'` LIKE \'%1$s\'';
+                }
+            }
+            if(sizeof($aOrStatements)!= 0){
+            // close last table
+                $this->_Queries[] = $sPrefix.implode(') OR (', $aOrStatements).')';
+            }
+            unset($res);
+        }
+        if($this->_bUseCache) {
+        // try to write queries into the cache
+            if(file_put_contents($sCacheFile, serialize($this->_Queries)) === false) {
+                throw new RuntimeException('unable to write file ['.$sCacheFile.']');
+            }
+        }
+    }
+
+}

Property changes on: trunk/framework/DseTwo.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/Login.php
===================================================================
--- trunk/framework/Login.php	(nonexistent)
+++ trunk/framework/Login.php	(revision 2)
@@ -0,0 +1,383 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         backend login
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+define('LOGIN_CLASS_LOADED', true);
+
+// Load the other required class files if they are not already loaded
+require_once(WB_PATH."/framework/class.admin.php");
+// Get WB version
+require_once(ADMIN_PATH.'/interface/version.php');
+
+class Login extends admin {
+
+    const PASS_CHARS = '[\,w!#$%&*+\-.:=?@\|]';
+    const USER_CHARS = '[a-z0-9&\-.=@_]';
+
+    protected $aConfig = array();
+    protected $oDb     = null;
+    protected $oTrans  = null;
+
+    public function __construct($config_array) {
+        // Get language vars
+/*        global $MESSAGE, $database; */
+        $this->oDb    = $GLOBALS['database'];
+        $this->oTrans = $GLOBALS['MESSAGE'];
+        parent::__construct();
+    // Get configuration values
+        while(list($key, $value) = each($config_array)) {
+//            $this->{(strtolower($key))} = $value;
+            $this->aConfig[strtolower($key)] = $value;
+        }
+        if (!isset($this->frontend)) { $this->frontend = false; }
+        if (!isset($this->redirect_url)) { $this->redirect_url = ''; }
+
+    // calculate redirect URL
+    // begin new routine
+        $sProtokol = ((!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ) ? 'http' : 'https') . '://';;
+        $sInstallFolderRel = dirname(dirname($_SERVER['SCRIPT_NAME']));
+        $sServerUrl = $sProtokol.$_SERVER['HTTP_HOST'].($_SERVER['SERVER_PORT'] == 80 ? '' : $_SERVER['SERVER_PORT'].':').'/'.$sInstallFolderRel;
+    // end new routine
+/*
+        $aRedirecthUrl = null;
+        $sServerUrl = $_SERVER['SERVER_NAME'];
+        $aServerUrl = $this->mb_parse_url(WB_URL);
+        $sServerScheme = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : isset($aServerUrl['scheme']) ? $aServerUrl['scheme'] : ' http';
+        $sServerPath = $_SERVER['SCRIPT_NAME'];
+*/
+
+        // If the url is blank, set it to the default url
+        $this->url = @$this->get_post('url')?:@$this->get_post('redirect')?:$this->default_url;
+/*
+        if ( !$this->frontend ){ $this->redirect_url = ( @$this->url ? : '' );}
+        if ( $this->frontend ){ $this->url = ( @$this->redirect_url ? : null );}
+*/
+        if (preg_match('/%0d|%0a|\s/i', $this->url)) {
+            throw new Exception('Warning: possible intruder detected on login');
+        }
+/*
+        $aUrl = $this->mb_parse_url( $this->url );
+        if ($this->redirect_url!='') {
+            $aRedirecthUrl = $this->mb_parse_url( $this->redirect_url );
+            $this->redirect_url = isset($aRedirecthUrl['host']) &&($sServerUrl==$aRedirecthUrl['host']) ? $this->redirect_url:$sServerScheme.'://'.$sServerUrl;
+            $this->url = $this->redirect_url;
+        }
+        $this->url = isset($aRedirecthUrl['host']) &&($sServerUrl==$aUrl['host']) ? $this->url:ADMIN_URL.'/start/index.php';
+        if(strlen($this->url) < 2) {
+            $aDefaultUrl = $this->mb_parse_url( $this->default_url );
+            $this->default_url = isset($aDefaultUrl['host']) &&($sServerUrl==$aDefaultUrl['host']) ? $this->default_url:$sServerScheme.'://'.$sServerUrl;
+            $this->url = $this->default_url;
+        }
+*/
+    // get username & password and validate it
+        $username_fieldname = (string)$this->get_post('username_fieldname');
+        $username_fieldname = (preg_match('/^_?[a-z][\w]+$/i', $username_fieldname) ? $username_fieldname : 'username');
+        $sUsername = strtolower(trim((string)$this->get_post($username_fieldname)));
+        $this->username = (preg_match(
+            '/^'.self::USER_CHARS.'{'.$this->min_username_len.','.$this->max_username_len.'}$/is',
+            $sUsername
+        ) ? $sUsername : '');
+        $password_fieldname = (string)$this->get_post('password_fieldname');
+        $password_fieldname = (preg_match('/^_?[a-z][\w]+$/i', $password_fieldname) ? $password_fieldname : 'password');
+
+        if ($this->username) {
+/** @TODO implement crypting */
+            $this->password = md5(trim((string)$this->get_post($password_fieldname)));
+            // Figure out if the "remember me" option has been checked
+            $this->remember = (@$_POST['remember'] == 'true' ? true : false);
+        // try to authenticate
+            $bSuccess = false;
+            if (!($bSuccess = $this->is_authenticated())) {
+                if ($this->is_remembered()) {
+                    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'users` '
+                         . 'WHERE `user_id`='.$this->get_safe_remember_key();
+                    if (($oUsers = $this->oDb->query($sql))) {
+                        if (($aUser = $oUsers->fetchRow(MYSQLI_ASSOC))) {
+                            $this->username = $aUser['username'];
+                            $this->password = $aUser['password'];
+                            // Check if the user exists (authenticate them)
+                            $bSuccess = $this->authenticate();
+                        }
+                    }
+                } else {
+                    // Check if the user exists (authenticate them)
+                    $bSuccess = $this->authenticate();
+                }
+            }
+            if ($bSuccess) {
+                // Authentication successful
+                $this->send_header($this->url);
+            } else {
+                $this->message = $this->_oTrans->MESSAGE_LOGIN_AUTHENTICATION_FAILED;
+                $this->increase_attemps();
+            }
+        } else {
+            $this->message = $this->_oTrans->MESSAGE_LOGIN_BOTH_BLANK;
+            $this->display_login();
+        }
+    }
+
+    public function __isset($name)
+    {
+        return isset($this->aConfig[$name]);
+    }
+
+    public function __set($name, $value)
+    {
+         return $this->aConfig[$name] = $value;
+    }
+
+   public function __get ($name){
+        $retval = null;
+        if ($this->__isset($name)) {
+            $retval = $this->aConfig[$name];
+        }
+        return $retval;
+    }
+
+    // Authenticate the user (check if they exist in the database)
+    public function authenticate()
+    {
+        // Get user information
+        $loginname = ( preg_match('/^'.self::USER_CHARS.'+$/s',$this->username) ? $this->username : '0');
+        $aSettings = array();
+        $aSettings['SYSTEM_PERMISSIONS']   = array();
+        $aSettings['MODULE_PERMISSIONS']   = array();
+        $aSettings['TEMPLATE_PERMISSIONS'] = array();
+        $bRetval = false;
+
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'users` '
+             . 'WHERE `username`=\''.$this->oDb->escapeString($loginname).'\'';
+        if (($oUser = $this->oDb->query($sql))) {
+            if (($aUser = $oUser->fetchRow(MYSQLI_ASSOC))) {
+                if (
+                    $aUser['password'] == $this->password &&
+                    $aUser['active'] == 1
+                ) {
+                // valide authentcation !!
+                    $user_id                   = $aUser['user_id'];
+                    $this->user_id             = $user_id;
+                    $aSettings['USER_ID']      = $user_id;
+                    $aSettings['GROUP_ID']     = $aUser['group_id'];
+                    $aSettings['GROUPS_ID']    = $aUser['groups_id'];
+                    $aSettings['USERNAME']     = $aUser['username'];
+                    $aSettings['DISPLAY_NAME'] = $aUser['display_name'];
+                    $aSettings['EMAIL']        = $aUser['email'];
+                    $aSettings['HOME_FOLDER']  = $aUser['home_folder'];
+                    // Run remember function if needed
+                    if($this->remember == true) { $this->remember($this->user_id); }
+                    // Set language
+                    if($aUser['language'] != '') {
+                        $aSettings['LANGUAGE'] = $aUser['language'];
+                    }
+                    // Set timezone
+                    if($aUser['timezone'] != '-72000') {
+                        $aSettings['TIMEZONE'] = $aUser['timezone'];
+                    } else {
+                        // Set a session var so apps can tell user is using default tz
+                        $aSettings['USE_DEFAULT_TIMEZONE'] = true;
+                    }
+                    // Set date format
+                    if($aUser['date_format'] != '') {
+                        $aSettings['DATE_FORMAT'] = $aUser['date_format'];
+                    } else {
+                        // Set a session var so apps can tell user is using default date format
+                        $aSettings['USE_DEFAULT_DATE_FORMAT'] = true;
+                    }
+                    // Set time format
+                    if($aUser['time_format'] != '') {
+                        $aSettings['TIME_FORMAT'] = $aUser['time_format'];
+                    } else {
+                        // Set a session var so apps can tell user is using default time format
+                        $aSettings['USE_DEFAULT_TIME_FORMAT'] = true;
+                    }
+                    // Get group information
+                    $aSettings['GROUP_NAME'] = array();
+                    $bOnlyAdminGroup = $this->ami_group_member('1') && (sizeof($aGroupsIds) == 1);
+                    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'groups` '
+                         . 'WHERE `group_id` IN ('.$aUser['groups_id'].',0) '
+                         . 'ORDER BY `group_id`';
+
+                    if (($oGroups = $this->oDb->query($sql))) {
+                        while (($aGroup = $oGroups->fetchRow( MYSQLI_ASSOC ))) {
+                            $aSettings['GROUP_NAME'][$aGroup['group_id']] = $aGroup['name'];
+                        // collect system_permissions (additively)
+                            $aSettings['SYSTEM_PERMISSIONS'] = array_merge(
+                                $aSettings['SYSTEM_PERMISSIONS'],
+                                explode(',', $aGroup['system_permissions'])
+                            );
+                        // collect module_permission (subtractive)
+                            if (!sizeof($aSettings['MODULE_PERMISSIONS'])) {
+                                $aSettings['MODULE_PERMISSIONS'] = explode(',', $aGroup['module_permissions']);
+                            } else {
+                                $aSettings['MODULE_PERMISSIONS'] = array_intersect(
+                                    $aSettings['MODULE_PERMISSIONS'],
+                                    preg_split('/\s*[,;\|\+]/', $aGroup['module_permissions'], -1, PREG_SPLIT_NO_EMPTY)
+                                );
+                            }
+                        // collect template_permission (subtractive)
+                            if (!sizeof($aSettings['TEMPLATE_PERMISSIONS'])) {
+                                $aSettings['TEMPLATE_PERMISSIONS'] = explode(',', $aGroup['template_permissions']);
+                            } else {
+                                $aSettings['TEMPLATE_PERMISSIONS'] = array_intersect(
+                                    $aSettings['TEMPLATE_PERMISSIONS'],
+                                    preg_split('/\s*[,;\|\+]/', $aGroup['template_permissions'], -1, PREG_SPLIT_NO_EMPTY)
+                                );
+                            }
+                        }
+                    }
+                    // Update the users table with current ip and timestamp
+                    $sRemoteAddress = @$_SERVER['REMOTE_ADDR'] ?: 'unknown';
+                    $sql = 'UPDATE `'.TABLE_PREFIX.'users` '
+                         . 'SET `login_when`='.time().', '
+                         .     '`login_ip`=\''.$sRemoteAddress.'\' '
+                         . 'WHERE `user_id`=\''.$user_id.'\'';
+                    $this->oDb->query($sql);
+                    $bRetval = true;
+                }
+            }
+        }
+        // merge settings into $_SESSION and overwrite older one values
+        $_SESSION = array_merge($_SESSION, $aSettings);
+        // Return if the user exists or not
+        return $bRetval;
+    }
+
+    // Increase the count for login attemps
+    protected function increase_attemps()
+    {
+        $_SESSION['ATTEMPS'] = (isset($_SESSION['ATTEMPS']) ? $_SESSION['ATTEMPS']++ : 0);
+        $this->display_login();
+    }
+
+
+    public function getMessage ( ) {
+      return $this->message;
+    }
+
+    // Function to set a "remembering" cookie for the user - removed
+   protected function remember($user_id)
+    {
+        return true;
+    }
+
+    // Function to check if a user has been remembered - removed
+    protected function is_remembered()
+    {
+        return false;
+    }
+
+    // Display the login screen
+    protected function display_login() {
+        // Get language vars
+        global $MESSAGE;
+        global $MENU;
+        global $TEXT;
+
+        $Trans = $GLOBALS['oTrans'];
+        $ThemeName = (defined('DEFAULT_THEME')?DEFAULT_THEME:'DefaultTheme');
+        $Trans->enableAddon('templates\\'.$ThemeName);
+        $aLang = $Trans->getLangArray();
+        // If attemps more than allowed, warn the user
+        if($this->get_session('ATTEMPS') > $this->max_attemps) {
+            $this->warn();
+        }
+        // Show the login form
+        if($this->frontend != true) {
+//            require_once(WB_PATH.'/include/phplib/template.inc');
+            $aWebsiteTitle['value'] = WEBSITE_TITLE;
+            $sql = 'SELECT `value` FROM `'.TABLE_PREFIX.'settings` '
+                 . 'WHERE `name`=\'website_title\'';
+            if ($get_title = $this->oDb->query($sql)){
+                $aWebsiteTitle= $get_title->fetchRow( MYSQLI_ASSOC );
+            }
+            // Setup template object, parse vars to it, then parse it
+            $template = new Template(dirname($this->correct_theme_source($this->template_file)));
+            $template->set_file('page', $this->template_file);
+            $template->set_block('page', 'mainBlock', 'main');
+            $template->set_var('DISPLAY_REMEMBER_ME', ($this->remember_me_option ? '' : 'display: none;'));
+
+            $template->set_var(
+                array(
+                    'ACTION_URL' => $this->login_url,
+                    'ATTEMPS' => $this->get_session('ATTEMPS'),
+                    'USERNAME' => $this->username,
+                    'USERNAME_FIELDNAME' => $this->username_fieldname,
+                    'PASSWORD_FIELDNAME' => $this->password_fieldname,
+                    'MESSAGE' => $this->message,
+                    'INTERFACE_DIR_URL' =>  ADMIN_URL.'/interface',
+                    'MAX_USERNAME_LEN' => $this->max_username_len,
+                    'MAX_PASSWORD_LEN' => $this->max_password_len,
+                    'ADMIN_URL' => ADMIN_URL,
+                    'WB_URL' => WB_URL,
+                    'URL' => $this->redirect_url,
+                    'THEME_URL' => THEME_URL,
+                    'VERSION' => VERSION,
+                    'REVISION' => REVISION,
+                    'LANGUAGE' => strtolower(LANGUAGE),
+                    'FORGOTTEN_DETAILS_APP' => $this->forgotten_details_app,
+                    'WEBSITE_TITLE'       => ($aWebsiteTitle['value']),
+                    'TEXT_ADMINISTRATION' => $TEXT['ADMINISTRATION'],
+//                    'TEXT_FORGOTTEN_DETAILS' => $Trans->TEXT_FORGOTTEN_DETAILS,
+                    'TEXT_USERNAME' => $TEXT['USERNAME'],
+                    'TEXT_PASSWORD' => $TEXT['PASSWORD'],
+                    'TEXT_REMEMBER_ME' => $TEXT['REMEMBER_ME'],
+                    'TEXT_LOGIN' => $TEXT['LOGIN'],
+                    'TEXT_SAVE' => $TEXT['SAVE'],
+                    'TEXT_RESET' => $TEXT['RESET'],
+                    'TEXT_HOME' => $TEXT['HOME'],
+                    'PAGES_DIRECTORY' => PAGES_DIRECTORY,
+                    'SECTION_LOGIN' => $MENU['LOGIN'],
+                    'LOGIN_DISPLAY_HIDDEN'   => !$this->is_authenticated() ? 'hidden' : '',
+                    'LOGIN_DISPLAY_NONE'     => !$this->is_authenticated() ? 'none' : '',
+                    'LOGIN_LINK'             => $_SERVER['SCRIPT_NAME'],
+                    'LOGIN_ICON'             => 'login',
+                    'START_ICON'             => 'blank',
+                    'URL_HELP'               => 'http://wiki.websitebaker.org/',
+                    )
+            );
+            $template->set_var($aLang);
+            $template->set_var('CHARSET', (defined('DEFAULT_CHARSET') ? DEFAULT_CHARSET : 'utf-8'));
+            $template->parse('main', 'mainBlock', false);
+            $template->pparse('output', 'page');
+        }
+    }
+
+    // sanities the REMEMBER_KEY cookie to avoid SQL injection
+    protected function get_safe_remember_key()
+    {
+        $iMatches = 0;
+        if (isset($_COOKIE['REMEMBER_KEY'])) {
+            $sRetval = preg_replace('/^([0-9]{11})_([0-9a-f]{11})$/i', '\1\2', $_COOKIE['REMEMBER_KEY'], -1, $iMatches);
+        }
+        return ($iMatches ? $sRetval : '');
+    }
+
+    // Warn user that they have had to many login attemps
+    protected function warn()
+    {
+//      header('Location: '.$this->warning_url);
+        $this->send_header($this->warning_url);
+        exit;
+    }
+
+}

Property changes on: trunk/framework/Login.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/LoginInterface.php
===================================================================
--- trunk/framework/LoginInterface.php	(nonexistent)
+++ trunk/framework/LoginInterface.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Description of Translate
+ *
+ * @category     Core
+ * @package      Core package
+ * @subpackage   Name of subpackage if needed
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker@org>
+ * @license      GNU General Public License 3.0
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @lastmodified $Date$
+ * @since        File available since 06.06.2016
+ * @deprecated   no / since 0000/00/00
+ * @description  xxx
+ */
+class LoginInterface
+{
+
+
+}
+
+// end of file
\ No newline at end of file

Property changes on: trunk/framework/LoginInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/Pagination.php
===================================================================
--- trunk/framework/Pagination.php	(nonexistent)
+++ trunk/framework/Pagination.php	(revision 2)
@@ -0,0 +1,231 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * Unbenannt 3
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @subpackage
+ * @copyright       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker@org>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker@org>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ * @created      2016-12-3
+ */
+
+class Pagination {
+
+    protected $oReg    = null;
+    protected $oDb     = null;
+    protected $oTrans  = null;
+    protected $oApp    = null;
+
+    protected $error   = null;
+    protected $Debug   = false;
+    protected $aConfig = array();
+/*
+    protected $oTpl      = null;
+    protected $Twig      = null;
+    protected $loader    = null;
+    protected $aTwigData = array();
+*/
+    public function __construct($aOptions) { $this->init($aOptions);}
+
+    public function __destruct()
+    {
+        ini_restore('memory_limit');
+    }
+
+    public function __isset($name)
+    {
+        return isset($this->aConfig[$name]);
+    }
+
+     public function __set($name, $value)
+     {
+//         throw new Exception('Tried to set a readonly or nonexisting property ['.$name.']!!');
+         return $this->aConfig[$name] = $value;
+     }
+
+    public function __get($name)
+    {
+        $retval = null;
+        if (!$this->__isset($name)) {
+            throw new Exception('Tried to get nonexisting property ['.$name.']');
+        }
+            $retval = $this->aConfig[$name];
+        return $retval;
+    }
+
+/*********************************************************************************************/
+
+/*********************************************************************************************/
+
+    public function set($name, $value = '')
+    {
+        $this->aConfig[$name] = $value;
+    }
+
+    public function get($name)
+    {
+        if (!$this->aConfig[$name]){throw new Exception('Tried to get nonexisting property ['.$name.']');;}
+        return $this->aConfig[$name];
+    }
+
+    public function removeExtension ($sFilename){
+        $sRetval = '';
+        return preg_replace('#^.*?([^/]*?)\.[^\.]*$#i', '\1', $sFilename);
+    }
+
+    public function isError() {
+        return sizeof($this->error);
+    }
+
+    protected function setError($Message) {
+        $this->error[] = $message;
+    }
+
+    protected function getError() {
+        return $this->error;
+    }
+
+    public function convertToArray ($sList)
+    {
+        $retVal = $sList;
+        if (!is_array($sList)){
+            $retVal = preg_split('/[\s,=+\;\:\.\|]+/', $sList, -1, PREG_SPLIT_NO_EMPTY);
+        }
+        return $retVal;
+    }
+
+    protected function init($aOptions)
+    {
+        $this->oReg   = ($GLOBALS['oReg']?:null);
+        $this->oDb    = ($GLOBALS['database']?:null);
+        $this->oTrans = ($GLOBALS['MESSAGE']?:null);
+        foreach ($aOptions AS $name=>$value){
+            switch ($name):
+                case 'ItemPerPage':
+                case 'CurrentPage':
+                case 'TotalValues':
+                    $this->aConfig[$name] = $value;
+                    break;
+                case 'Style':
+                    $this->aConfig[$name] = $value.'.css';
+                    break;
+                default:
+                    $this->setError('Tried to set a not allowed property ['.$name.']!!');
+            endswitch;
+        }
+
+        $this->aConfig['bStart'] = TotalValues > $max;
+        $this->aConfig['bCrump'] = TotalValues > $max;
+
+    }
+
+
+} // end of class
+
+/* Old oding
+
+
+if (isset($_GET['pPage'])) {
+    $max = $_GET['pPage'];
+} elseif (isset($_POST['pPage'])) {
+    $max = $_POST['pPage'];
+} else {
+    $max = 20;
+}
+
+
+<form action="<?php echo $module_edit_link ?>" method="get" name="filterform" >
+    <input type="hidden" name="tool" value="wb_addons" />
+    <table class="row_a" style="width: 100%;">
+        <thead>
+
+        </thead>
+        <tbody>
+            <tr style="line-height: 1.5; vertical-align: middle;">
+                <td style="width: 15%; white-space: nowrap;">
+                    <label>Addons per Page</label>
+                </td>
+                <td style="width: 20%;">
+                    <select class="pPage" name="pPage">
+                      <option value="'.$value.'" '.$sSelected.'>'.$name.'</option>
+
+        </tbody>
+    </table>
+</form>
+
+
+table of data items if existst
+
+
+
+
+//Pagination
+$page = 1;
+if (isset($_GET['page'])) $page = $_GET['page'];
+$total = get_itemcount($addon_type,-1,0,$filter,$new_upl);
+$npage = 0;
+
+$aPerPage = array('10'=>10,'20'=>20,'30'=>30,'50'=>50,'100'=>100,'All Add-ons'=>$total);
+//$PagStart = PHP_EOL.''.PHP_EOL;
+$sDataPerPage  = "\t\t\t\t".'<tr style="height: 4.225em;">'.PHP_EOL;
+$sDataPerPage  = "".'<select class="pPage" name="pPage">'.PHP_EOL;
+foreach($aPerPage as $name=>$value){
+    $sSelected = (($max==$value)?' selected="selected"':'');
+    $sDataPerPage .= "\t\t\t\t\t\t\t\t".'<option value="'.$value.'" '.$sSelected.'>'.$name.'</option>'.PHP_EOL;
+}
+$sDataPerPage .= "\t\t\t\t\t\t\t".'</select>'.PHP_EOL;
+$links = '';
+if ($total > $max) {
+// start Pagination
+    $links  = "\t\t\t\t\t".'<td  colspan="4">'.PHP_EOL;
+    $links .= '<div class="w3-center">';
+    $links .= '<ul class="w3-pagination pagination">'.PHP_EOL;
+    if ($page > 1) {
+        $ypage = $page - 1;
+        $links .= "\t\t\t\t\t\t"."<li><a class=\"w3-hover-green\" href=\"$module_edit_link$urlfilter&page=$ypage&pPage=$max\">Previous page &laquo; </a></li>";
+    } else {
+        $links .= "\t\t\t\t\t\t".'<li><a class="w3-disabled">Previous page &laquo; </a></li>';
+    }
+    for ($x=0;$x < $total; $x=$x+$max) {
+        $npage++;
+        $sCurrent = ($npage==($page)?'current':'');
+        $links .= "\t\t\t\t\t\t"."<li><a class=\"w3-hover-green ".($sCurrent)."\" href=\"$module_edit_link$urlfilter&page=$npage&pPage=$max\">$npage</a></li>";
+    }
+    if ($page < $npage) {
+        $xpage = $page + 1;
+        $links .= "\t\t\t\t\t\t"."<li><a class=\"w3-hover-green\" href=\"$module_edit_link$urlfilter&page=$xpage&pPage=$max\"> &raquo; Next Page</a></li>";
+    } else {
+        $links .= '<li> <a class="w3-disabled ">&raquo; Next Page</a></li>';
+    }
+    $links .= '</ul>'.PHP_EOL;
+    $links .= '</div>';
+    $links .= "\t\t\t\t\t".'</td>'.PHP_EOL;
+// End Pagination
+
+*/
+
+// end of file

Property changes on: trunk/framework/Pagination.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/PasswordHash.php
===================================================================
--- trunk/framework/PasswordHash.php	(nonexistent)
+++ trunk/framework/PasswordHash.php	(revision 2)
@@ -0,0 +1,234 @@
+<?php
+/**
+ * @category     Core
+ * @package      Core_security
+ * @author       Werner v.d.Decken
+ * @copyright    ISTeasy-project(http://isteasy.de/)
+ * @license      Creative Commons BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/
+ * @version      $Id$
+ * @filesource   $HeadURL$
+ * @since        Datei vorhanden seit Release 2.8.2
+ * @lastmodified $Date$
+ *
+ * this class works with salted md5-hashes with several rounds. 
+ * For backward compatibility it can compare normal md5-hashes also.
+ * Minimum requirements: PHP 5.2.2 or higher
+ *
+ * *****************************************************************************
+ * This class is based on the Portable PHP password hashing framework.
+ * Version 0.3 / genuine. Written by Solar Designer <solar at openwall.com>
+ * in 2004-2006 and placed in the public domain. Revised in subsequent years,
+ * still public domain. There's absolutely no warranty.
+ * The homepage URL for this framework is: http://www.openwall.com/phpass/
+ * *****************************************************************************
+ */
+class PasswordHash {
+
+    const SECURITY_WEAK      = 6;
+    const SECURITY_MEDIUM    = 8;
+    const SECURITY_NORMAL    = 10;
+    const SECURITY_STRONG    = 12;
+    const SECURITY_STRONGER  = 16;
+
+    private $_itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+    private $_iterationCountLog2 = 8;
+    private $_portableHashes = true;
+    private $_randomState = '';
+    
+    /**
+     * @param int $iterationCountLog2 number of iterations as exponent of 2
+     * @param bool $portableHashes TRUE = use MD5 only | FALSE = automatic
+     */
+    public function __construct($iterationCountLog2, $portableHashes = true)
+    {
+
+        if ($iterationCountLog2 < 4 || $iterationCountLog2 > 31) {
+            $iterationCountLog2 = 8;
+        }
+        $this->_iterationCountLog2 = $iterationCountLog2;
+        $this->_portableHashes = $portableHashes;
+        $this->_randomState = microtime();
+        if (function_exists('getmypid')) {
+            $this->_randomState .= getmypid();
+        }
+    }
+
+
+    private function _getRandomBytes($count)
+    {
+        $output = '';
+        if (is_readable('/dev/urandom') && ($fh = @fopen('/dev/urandom', 'rb'))) {
+            $output = fread($fh, $count);
+            fclose($fh);
+        }
+        if (strlen($output) < $count) {
+            $output = '';
+            for ($i = 0; $i < $count; $i += 16) {
+                $this->_randomState = md5(microtime() . $this->_randomState);
+                $output .= pack('H*', md5($this->_randomState));
+            }
+            $output = substr($output, 0, $count);
+        }
+        return $output;
+    }
+
+    private function _Encode64($input, $count)
+    {
+        $output = '';
+        $i = 0;
+        do {
+            $value = ord($input[$i++]);
+            $output .= $this->_itoa64[$value & 0x3f];
+            if ($i < $count) {
+                $value |= ord($input[$i]) << 8;
+            }
+            $output .= $this->_itoa64[($value >> 6) & 0x3f];
+            if ($i++ >= $count) { break; }
+            if ($i < $count) {
+                $value |= ord($input[$i]) << 16;
+            }
+            $output .= $this->_itoa64[($value >> 12) & 0x3f];
+            if ($i++ >= $count) { break; }
+            $output .= $this->_itoa64[($value >> 18) & 0x3f];
+        } while ($i < $count);
+        return $output;
+    }
+
+    private function _GenSaltPrivate($input)
+    {
+        $output = '$P$';
+        $output .= $this->_itoa64[min($this->_iterationCountLog2 + 5, 30)];
+        $output .= $this->_Encode64($input, 6);
+        return $output;
+    }
+
+    private function _CryptPrivate($password, $setting)
+    {
+        $output = '*0';
+        if (substr($setting, 0, 2) == $output) {
+            $output = '*1';
+        }
+        $id = substr($setting, 0, 3);
+        # We use "$P$", phpBB3 uses "$H$" for the same thing
+        if ($id != '$P$' && $id != '$H$') {
+            return $output;
+        }
+        $count_log2 = strpos($this->_itoa64, $setting[3]);
+        if ($count_log2 < 7 || $count_log2 > 30) {
+            return $output;
+        }
+        $count = 1 << $count_log2;
+        $salt = substr($setting, 4, 8);
+        if (strlen($salt) != 8) {
+            return $output;
+        }
+        # We're kind of forced to use MD5 here since it's the only
+        # cryptographic primitive available in all versions of PHP
+        # currently in use.  To implement our own low-level crypto
+        # in PHP would result in much worse performance and
+        # consequently in lower iteration counts and hashes that are
+        # quicker to crack (by non-PHP code).
+        $hash = md5($salt . $password, TRUE);
+        do {
+            $hash = md5($hash . $password, TRUE);
+        } while (--$count);
+        $output = substr($setting, 0, 12);
+        $output .= $this->_Encode64($hash, 16);
+        return $output;
+    }
+
+    /**
+     * calculate the hash from a given password
+     * @param string $password password as original string
+     * @return string generated hash | '*' on error
+     */
+    public function HashPassword($password, $md5 = false)
+    {
+        if ($md5) { return(md5($password)); }
+        $random = '';
+        if (strlen($random) < 6) {
+            $random = $this->_getRandomBytes(6);
+        }
+        $hash = $this->_CryptPrivate($password, $this->_GenSaltPrivate($random));
+        if (strlen($hash) == 34) {
+            return $hash;
+        }
+        # Returning '*' on error is safe here, but would _not_ be safe
+        # in a crypt(3)-like function used _both_ for generating new
+        # hashes and for validating passwords against existing hashes.
+        return '*';
+    }
+
+    /**
+     * encodes the password and compare it against the given hash
+     * @param string $password clear password
+     * @param string $stored_hash the hash to compare against
+     * @return bool
+     */
+    public function CheckPassword($password, $stored_hash)
+    {
+    // compare against a normal, simple md5-hash
+        if(preg_match('/^[0-9a-f]{32}$/i', $stored_hash)) {
+            return md5($password) == $stored_hash;
+        }
+    // compare against a rounded, salted md5-hash
+        $hash = $this->_CryptPrivate($password, $stored_hash);
+        if ($hash[0] == '*') {
+            $hash = crypt($password, $stored_hash);
+        }
+        return $hash == $stored_hash;
+    }
+    /**
+     * generate a case sensitive mnemonic password including numbers and special chars
+     * makes no use of lowercase 'l', uppercase 'I', 'O' or number '0'
+     * @param int $length length of the generated password. default = 8
+     * @return string
+     */
+    public static function NewPassword($length = self::SECURITY_MEDIUM)
+    {
+        $chars = array(
+            array('b','c','d','f','g','h','j','k','l','m','n','p','r','s','t','v','w','x','y','z'),
+            array('a','e','i','o','u'),
+            array('!','-','@','_',':','.','+','%','/','*')
+        );
+        if($length < self::SECURITY_WEAK) { $length = self::SECURITY_WEAK; }
+        $length = ceil($length / 2);
+        $Password = array();
+    // at first fill array alternating with vowels and consonants
+        for($x = 0; $x < $length; $x++) {
+            $char = $chars[0][rand(1000, 10000) % sizeof($chars[0])];
+            $Password[] = $char == 'l' ? 'L' : $char;
+            $Password[] = $chars[1][rand(1000, 10000) % sizeof($chars[1])];
+        }
+    // transform some random chars into uppercase
+        $pos = ((rand(1000, 10000) % 3) + 1);
+        while($pos < sizeof($Password)) {
+            $Password[$pos] = ($Password[$pos] == 'i' || $Password[$pos] == 'o')
+                              ? $Password[$pos] : strtoupper($Password[$pos]);
+            $pos += ((rand(1000, 10000) % 3) + 1);
+        }
+    // insert some numeric chars, between 1 and 9
+        $specialChars = array();
+        $specialCharsCount = floor(sizeof($Password) / 4);
+        while(sizeof($specialChars) < $specialCharsCount) {
+            $key = (rand(1000, 10000) % sizeof($Password));
+            if(!isset($specialChars[$key])) {
+                $specialChars[$key] = (rand(1000, 10000) % 9) + 1;
+            }
+        }
+    // insert some punctuation chars, but not leading or trailing
+        $specialCharsCount += floor((sizeof($Password)-1) / 6);
+        while(sizeof($specialChars) < $specialCharsCount) {
+            $key = (rand(1000, 10000) % (sizeof($Password)-2))+1;
+            if(!isset($specialChars[$key])) {
+                $specialChars[$key] = $chars[2][(rand(1000, 10000) % sizeof($chars[2]))];
+            }
+        }
+        foreach($specialChars as $key=>$val) {
+            $Password[$key] = $val;
+        }
+
+        return implode($Password);
+    }
+
+} // end of class

Property changes on: trunk/framework/PasswordHash.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/Sanitize.php
===================================================================
--- trunk/framework/Sanitize.php	(nonexistent)
+++ trunk/framework/Sanitize.php	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Sanitize.php
+ *
+ * @category     Security
+ * @package      Security_Sanitize
+ * @subpackage   Name of the subpackage if needed
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        File available since 10.03.2016
+ * @description  this class provides several methods for sanitizing.
+ */
+class Sanitize {
+
+    /* constants for StripFromText */
+    const REMOVE_PHP     =  1;    // BIT #0 - remove all PHP-Code
+    const REMOVE_DROPLET =  2;    // BIT #1 - remove Droplet tags
+    const REMOVE_COMMENT =  4;    // BIT #2 - remove HTML Comments
+    const REMOVE_SCRIPT  =  8;    // BIT #3 - remove external and internal Javascript (no inline events)
+    const REMOVE_STYLES  = 16;    // BIT #4 - remove external and internal style sheets (no inline)
+    const REMOVE_DEFAULT = 26;    // a combination of BITS #1 + #3 + #4
+
+    /** constructor */
+    protected function __construct() {
+        ;
+    }
+/**
+ * remove complex elements from strings
+ * @param mixed $mText string or array of strings
+ * @param integer $iFlags all flags of needed functions
+ * @return mixed
+ */
+    public static function StripFromText($mText, $iFlags = self::REMOVE_PHP)
+    {
+        if (is_string($mText) || is_array($mText)) {
+            $aPatterns = array(
+                self::REMOVE_PHP     => '/<\?php\s+.*\?>/si',
+                self::REMOVE_DROPLET => '/\[\[.*?\]\]/si',
+                self::REMOVE_COMMENT => '/<!--\s+.*?-->/si',
+                self::REMOVE_SCRIPT  => '/<script[^>]*?\/>|<script[^>]*?>.*?<\/script>/si',
+                self::REMOVE_STYLES  =>
+                    '/<style[^>]*?\/>|<style[^>]*?>.*?<\/style>|'.
+                    '<link[^>]*?(\"text\/css\")?(\"stylesheet\")?[^>]*?\/?>|<link[^>]*?(\"text\/css\")?(\"stylesheet\")?[^>]*?>.*?<\/style>/si',
+            );
+            $iFlags = intval($iFlags);
+            $aSearches = array();
+            for ($i = 0; $i < sizeof($aPatterns); $i++) {
+                if ((pow(2, $i) & $iFlags) != 0) {
+                    $aSearches[] = $aPatterns[pow(2, $i)];
+                }
+            }
+            $mText = preg_replace($aSearches, '', $mText);
+        }
+        return $mText;
+    }
+
+}
+
+// end of class Sanitize

Property changes on: trunk/framework/Sanitize.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/SecureTokens.php
===================================================================
--- trunk/framework/SecureTokens.php	(nonexistent)
+++ trunk/framework/SecureTokens.php	(revision 2)
@@ -0,0 +1,571 @@
+<?php
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SecureTokens.php
+ *
+ * @category      Core
+ * @package       Core_Security
+ * @subpackage    WB-2.8.4 and up
+ * @copyright     Manuela v.d.Decken <manuela@isteam.de>
+ * @author        Manuela v.d.Decken <manuela@isteam.de>
+ * @license       http://www.gnu.org/licenses/gpl.html   GPL License
+ * @
+ * @version       0.1.2
+ * @revision      $Revision$
+ * @link          $HeadURL$
+ * @lastmodified $Date$
+ * @since         File available since 12.09.2015
+ * @description
+ * This class is a replacement for the former class SecureForm using the SecureTokensInterface
+ *
+ * Settings for this class
+ * TYPE    KONSTANTE                    REGISTY-VAR                       DEFAULTWERT
+ * boolean SEC_TOKEN_FINGERPRINT        ($oReg->SecTokenFingerprint)      [default=true]
+ * integer SEC_TOKEN_IPV4_NETMASK       ($oReg->SecTokenIpv4Netmask)      0-255 [default=24]
+ * integer SEC_TOKEN_IPV6_PREFIX_LENGTH ($oReg->SecTokenIpv6PrefixLength) 0-128 [default=64]
+ * integer SEC_TOKEN_LIFE_TIME          ($oReg->SecTokenLifeTime)         1800 | 2700 | 3600[default] | 7200
+*/
+
+class SecureTokens
+{
+/**
+ * possible settings for TokenLifeTime in seconds
+ * @description seconds for 30min / 45min / 1h / 75min / 90min / 105min / 2h
+ */
+/** minimum lifetime in seconds */
+    const LIFETIME_MIN  = 1800; // 30min
+/** maximum lifetime in seconds */
+    const LIFETIME_MAX  = 7200; // 120min (2h)
+/** stepwidth between min and max */
+    const LIFETIME_STEP =  900; // 15min
+/** lifetime in seconds to use in DEBUG mode if negative value is given (-1) */
+    const DEBUG_LIFETIME = 300; // 5
+/** array to hold all tokens from the session */
+    private $aTokens = array(
+        'default' => array('value' => 0, 'expire' => 0, 'instance' => 0)
+    );
+/** the salt for this instance */
+    private $sSalt             = '';
+/** fingerprint of the current connection */
+    private $sFingerprint      = '';
+/** the FTAN token which is valid for this instance */
+    private $aLastCreatedFtan  = null;
+/** the time when tokens expired if they created in this instance */
+    private $iExpireTime       = 0;
+/** remove selected tokens only and update all others */
+    private $bPreserveAllOtherTokens = false;
+/** id of the current instance */
+    private $sCurrentInstance  = null;
+/** id of the instance to remove */
+    private $sInstanceToDelete = null;
+/** id of the instance to update expire time */
+    private $sInstanceToUpdate = null;
+/* --- settings for SecureTokens ------------------------------------------------------ */
+/** use fingerprinting to encode */
+    private $bUseFingerprint   = true;
+/** maximum lifetime of a token in seconds */
+    private $iTokenLifeTime    = 1800; // between LIFETIME_MIN and LIFETIME_MAX (default = 30min)
+/** bit length of the IPv4 Netmask (0-32 // 0 = off  default = 24) */
+    private $iNetmaskLengthV4  = 0;
+/** bit length of the IPv6 Netmask (0-128 // 0 = off  default = 64) */
+    private $iNetmaskLengthV6  = 0;
+
+    private static $oInstance = null;
+/**
+ * constructor
+ * @param (void)
+ */
+    protected function __construct()
+    {
+    // load settings if available
+        $this->getSettings();
+    // generate salt for calculations in this instance
+        $this->sSalt            = $this->generateSalt();
+    // generate fingerprint for the current connection
+        $this->sFingerprint     = $this->buildFingerprint();
+    // define the expiretime for this instance
+        $this->iExpireTime      = time() + $this->iTokenLifeTime;
+    // calculate the instance id for this instance
+        $this->sCurrentInstance = $this->encodeHash(md5($this->iExpireTime.$this->sSalt));
+    // load array of tokens from session
+        $this->loadTokens();
+    // at first of all remove expired tokens
+        $this->removeExpiredTokens();
+    }
+
+    public static function getInstance()
+    {
+        if (self::$oInstance == null) {
+            $sClass = __CLASS__;
+            self::$oInstance = new $sClass();
+        }
+        return self::$oInstance;
+    }
+
+    private function __clone() {}
+
+/**
+ * destructor
+ */
+    final public function __destruct()
+    {
+        foreach ($this->aTokens as $sKey => $aToken) {
+            if ($aToken['instance'] == $this->sInstanceToUpdate) {
+                $this->aTokens[$sKey]['instance'] = $this->sCurrentInstance;
+                $this->aTokens[$sKey]['expire']   = $this->iExpireTime;
+            } elseif ($aToken['instance'] == $this->sInstanceToDelete) {
+                unset($this->aTokens[$sKey]);
+            }
+        }
+        $this->saveTokens();
+    }
+
+/**
+ * returns the current FTAN
+ * @param bool $mode: true or POST returns a complete prepared, hidden HTML-Input-Tag (default)
+ *                     false or GET returns an GET argument 'key=value'
+ * @return mixed:     array or string
+ * @deprecated the param $mMode is set deprecated
+ *              string retvals are set deprecated. From versions after 2.8.4 retval will be array only
+ */
+    final public function getFTAN($mMode = 'POST')
+    {
+        if (is_null($this->aLastCreatedFtan)) {
+            $sFtan = md5($this->sSalt);
+            $this->aLastCreatedFtan = $this->addToken(
+                substr($sFtan, rand(0,15), 16),
+                substr($sFtan, rand(0,15), 16)
+            );
+        }
+        $aFtan = $this->aTokens[$this->aLastCreatedFtan];
+        $aFtan['name']  = $this->aLastCreatedFtan;
+        $aFtan['value'] = $this->encodeHash(md5($aFtan['value'].$this->sFingerprint));
+        if (is_string($mMode)) {
+            $mMode = strtoupper($mMode);
+        } else {
+            $mMode = $mMode === true ? 'POST' : 'GET';
+        }
+        switch ($mMode):
+            case 'POST':
+                return '<input type="hidden" name="'.$aFtan['name'].'" value="'
+                      .$aFtan['value'].'" title="">';
+                break;
+            case 'GET':
+                return $aFtan['name'].'='.$aFtan['value'];
+                break;
+            default:
+                return array('name' => $aFtan['name'], 'value' => $aFtan['value']);
+        endswitch;
+    }
+
+/**
+ * checks received form-transactionnumbers against session-stored one
+ * @param string $mode: requestmethode POST(default) or GET
+ * @param bool $bPreserve (default=false)
+ * @return bool:    true if numbers matches against stored ones
+ *
+ * requirements: an active session must be available
+ * this check will prevent from multiple sending a form. history.back() also will never work
+ */
+    final public function checkFTAN($mMode = 'POST')
+    {
+        $bRetval = false;
+        // get the POST/GET arguments
+        $aArguments = (strtoupper($mMode) == 'POST' ? $_POST : $_GET);
+        // encode the value of all matching tokens
+        $aMatchingTokens = array_map(
+            array($this, 'checkFtanCallback'),
+    //            function ($aToken) {
+    //                return $this->encode64(md5($aToken['value'].$this->sFingerprint));
+    //            },
+                // extract all matching tokens from $this->aTokens
+                array_intersect_key($this->aTokens, $aArguments)
+        );
+//echo "<pre>".print_r(debug_backtrace(0),true)."</pre>";
+        // extract all matching arguments from $aArguments
+        $aMatchingArguments = array_intersect_key($aArguments, $this->aTokens);
+        // get all tokens with matching values from match lists
+        $aHits = array_intersect($aMatchingTokens, $aMatchingArguments);
+        foreach ($aHits as $sTokenName => $sValue) {
+            $bRetval = true;
+            $this->removeToken($sTokenName);
+        }
+        return $bRetval;
+    }
+/**
+ * store value in session and returns an accesskey to it
+ * @param mixed $mValue can be numeric, string or array
+ * @return string
+ */
+    final public function getIDKEY($mValue)
+    {
+        if (is_array($mValue) == true) {
+            // serialize value, if it's an array
+            $mValue = serialize($mValue);
+        }
+        // crypt value with salt into md5-hash and return a 16-digit block from random start position
+        $sTokenName = $this->addToken(
+            substr(md5($this->sSalt.(string)$mValue), rand(0,15), 16),
+            $mValue
+        );
+        return $sTokenName;
+    }
+
+/*
+ * search for key in session and returns the original value
+ * @param string $sFieldname: name of the POST/GET-Field containing the key or hex-key itself
+ * @param mixed $mDefault: returnvalue if key not exist (default 0)
+ * @param string $sRequest: requestmethode can be POST or GET or '' (default POST)
+ * @param bool $bPreserve (default=false)
+ * @return mixed: the original value (string, numeric, array) or DEFAULT if request fails
+ * @description: each IDKEY can be checked only once. Unused Keys stay in list until they expire
+ */
+    final public function checkIDKEY($sFieldname, $mDefault = 0, $sRequest = 'POST', $bPreserve = false)
+    {
+        $mReturnValue = $mDefault; // set returnvalue to default
+        $this->bPreserveAllOtherTokens = $bPreserve ?: $this->bPreserveAllOtherTokens;
+        $sRequest = strtoupper($sRequest);
+        switch ($sRequest) {
+            case 'POST':
+                $sTokenName = $_POST[$sFieldname] ?: $sFieldname;
+                break;
+            case 'GET':
+                $sTokenName = $_GET[$sFieldname] ?: $sFieldname;
+                break;
+            default:
+                $sTokenName = $sFieldname;
+        }
+        if (preg_match('/^[0-9a-f]{16}$/i', $sTokenName)) {
+        // key must be a 16-digit hexvalue
+            if (array_key_exists($sTokenName, $this->aTokens)) {
+            // check if key is stored in IDKEYs-list
+                $mReturnValue = $this->aTokens[$sTokenName]['value']; // get stored value
+                $this->removeToken($sTokenName);   // remove from list to prevent multiuse
+                if (preg_match('/.*(?<!\{).*(\d:\{.*;\}).*(?!\}).*/', $mReturnValue)) {
+                // if value is a serialized array, then deserialize it
+                    $mReturnValue = unserialize($mReturnValue);
+                }
+            }
+        }
+        return $mReturnValue;
+    }
+
+/**
+ * make a valid LifeTime value from given integer on the rules of class SecureTokens
+ * @param integer  $iLifeTime
+ * @return integer
+ */
+    final public function sanitizeLifeTime($iLifeTime)
+    {
+        $iLifeTime = intval($iLifeTime);
+        for ($i = self::LIFETIME_MIN; $i <= self::LIFETIME_MAX; $i += self::LIFETIME_STEP) {
+            $aLifeTimes[] = $i;
+        }
+        $iRetval = array_pop($aLifeTimes);
+        foreach ($aLifeTimes as $iValue) {
+            if ($iLifeTime <= $iValue) {
+                $iRetval = $iValue;
+                break;
+            }
+        }
+        return $iRetval;
+    }
+
+/**
+ * returns all TokenLifeTime values
+ * @return array
+ */
+    final public function getTokenLifeTime()
+    {
+        return array(
+            'min'   => self::LIFETIME_MIN,
+            'max'   => self::LIFETIME_MAX,
+            'step'  => self::LIFETIME_STEP,
+            'value' => $this->iTokenLifeTime
+        );
+    }
+
+/* ************************************************************************************ */
+/* *** from here private methods only                                               *** */
+/* ************************************************************************************ */
+/**
+ * load all tokens from session
+ */
+    private function loadTokens()
+    {
+        if (isset($_SESSION['TOKENS'])) {
+            $this->aTokens = unserialize($_SESSION['TOKENS']);
+        } else {
+            $this->saveTokens();
+        }
+    }
+
+/**
+ * save all tokens into session
+ */
+    private function saveTokens()
+    {
+        $_SESSION['TOKENS'] = serialize($this->aTokens);
+    }
+
+/**
+ * add new token to the list
+ * @param string $sTokenName
+ * @param string $sValue
+ * @return string  name(index) of the token
+ */
+    private function addToken($sTokenName, $sValue)
+    {
+        // limit TokenName to 16 digits
+        $sTokenName = substr(str_pad($sTokenName, 16, '0', STR_PAD_LEFT), -16);
+        // make sure, first digit is a alpha char [a-f]
+        $sTokenName[0] = dechex(10 + (hexdec($sTokenName[0]) % 5));
+        // loop as long the generated TokenName already exists in list
+        while (isset($this->aTokens[$sTokenName])) {
+            // split TokenName into 4 words
+            $aWords = str_split($sTokenName, 4);
+            // get lowest word and increment it
+            $iWord = hexdec($aWords[3]) + 1;
+            // reformat integer into a 4 digit hex string
+            $aWords[3] = sprintf('%04x', ($iWord > 0xffff ? 1 : $iWord));
+            // rebuild the TokenName
+            $sTokenName = implode('', $aWords);
+        }
+        // store Token in list
+        $this->aTokens[$sTokenName] = array(
+            'value'    => $sValue,
+            'expire'   => $this->iExpireTime,
+            'instance' => $this->sCurrentInstance
+        );
+        return $sTokenName;
+    }
+
+/**
+ * remove the token, called sTokenName from list
+ * @param type $sTokenName
+ */
+    private function removeToken($sTokenName)
+    {
+        if (isset($this->aTokens[$sTokenName])) {
+            if ($this->bPreserveAllOtherTokens) {
+                if ($this->sInstanceToDelete) {
+                    $this->sInstanceToUpdate = $this->sInstanceToDelete;
+                    $this->sInstanceToDelete = null;
+                } else {
+                    $this->sInstanceToUpdate = $this->aTokens[$sTokenName]['instance'];
+                }
+            } else {
+                $this->sInstanceToDelete = $this->aTokens[$sTokenName]['instance'];
+            }
+            unset($this->aTokens[$sTokenName]);
+        }
+    }
+
+/**
+ * remove all expired tokens from list
+ */
+    private function removeExpiredTokens()
+    {
+        $iTimestamp = time();
+        foreach ($this->aTokens as $sTokenName => $aToken) {
+            if ($aToken['expire'] <= $iTimestamp && $aToken['expire'] != 0){
+                unset($this->aTokens[$sTokenName]);
+            }
+        }
+    }
+
+/**
+ * generate a runtime depended hash
+ * @return string  md5 hash
+ */
+    private function generateSalt()
+    {
+        list($fUsec, $fSec) = explode(" ", microtime());
+        $sSalt = (string)rand(10000, 99999)
+               . (string)((float)$fUsec + (float)$fSec)
+               . (string)rand(10000, 99999);
+        return md5($sSalt);
+    }
+
+/**
+ * build a simple fingerprint
+ * @return string
+ */
+    private function buildFingerprint()
+    {
+        if (!$this->bUseFingerprint) { return md5('this_is_a_dummy_only'); }
+        $sClientIp = '127.0.0.1';
+        if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
+            $aTmp = preg_split('/\s*,\s*/', $_SERVER['HTTP_X_FORWARDED_FOR'], null, PREG_SPLIT_NO_EMPTY);
+            $sClientIp = array_pop($aTmp);
+        }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
+            $sClientIp = $_SERVER['REMOTE_ADDR'];
+        }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
+            $sClientIp = $_SERVER['HTTP_CLIENT_IP'];
+        }
+        $aTmp = array_chunk(stat(__FILE__), 11);
+        unset($aTmp[0][8]);
+        return md5(
+            __FILE__ . PHP_VERSION . implode('', $aTmp[0])
+            . (array_key_exists('HTTP_USER_AGENT', $_SERVER) ? $_SERVER['HTTP_USER_AGENT'] : 'AGENT')
+            . $this->calcClientIpHash($sClientIp)
+        );
+    }
+
+/**
+ * mask IPv4 as well IPv6 addresses with netmask and make a md5 hash from
+ * @param string $sClientIp IP as string from $_SERVER['REMOTE_ADDR']
+ * @return md5 value of masked ip
+ * @description this method does not accept the IPv6/IPv4 mixed format
+ *               like "2222:3333:4444:5555:6666:7777:192.168.1.200"
+ */
+    private function calcClientIpHash($sRawIp)
+    {
+        // clean address from netmask/prefix and port
+        $sPattern = '/^\[?([.:a-f0-9]*)(?:\/[0-1]*)?(?:\]?.*)$/im';
+        $sRawIp = preg_replace($sPattern, '$1', $sRawIp);
+        if (strpos($sRawIp, ':') === false) {
+// sanitize IPv4 ---------------------------------------------------------------------- //
+            $iIpV4 = ip2long($sRawIp);
+            // calculate netmask
+            $iMask = ($this->iNetmaskLengthV4 < 1)
+                ? 0
+                : bindec(
+                    str_repeat('1', $this->iNetmaskLengthV4).
+                    str_repeat('0', 32 - $this->iNetmaskLengthV4)
+                );
+            // apply mask and reformat to IPv4 string notation.
+            $sIp = long2ip($iIpV4 & $iMask);
+        } else {
+// sanitize IPv6 ---------------------------------------------------------------------- //
+            // check if IP includes a IPv4 part and convert this into IPv6 format
+            $sPattern = '/^([:a-f0-9]*?)\:([0-9]{1,3}(?:\.[0-9]{1,3}){3})$/is';
+            if (preg_match($sPattern, $sRawIp, $aMatches)) {
+                // convert IPv4 into full size 32bit binary string
+                $sIpV4Bin = str_pad((string)decbin(ip2long($aMatches[2])), 32, '0', STR_PAD_LEFT) ;
+                // split into 2 parts of 16bit
+                $aIpV6Hex = str_split($sIpV4Bin, 16);
+                // concate the IPv6/96 part and hex of both IPv4 parts
+                $sRawIp = $aMatches[1].':'.dechex(bindec($aIpV6Hex[0])).':'.dechex(bindec($aIpV6Hex[1]));
+            }
+            // calculate number of missing IPv6 words
+            $iWords = 8 - count(preg_split('/:/', $sRawIp, null, PREG_SPLIT_NO_EMPTY));
+            // build multiple ':0000:' replacements for '::'
+            $sReplacement = $iWords ? implode(':', array_fill(0, $iWords, '0000')) : '';
+            // insert replacements and remove trailing/leading ':'
+            $sClientIp = trim(preg_replace('/\:\:/', ':'.$sReplacement.':', $sRawIp), ':');
+            // split all 8 parts from IP into an array
+            $aIpV6 = array_map(
+                function($sPart) {
+                    // expand all parts to 4 hex digits using leading '0'
+                    return str_pad($sPart, 4, '0', STR_PAD_LEFT);
+                },
+                preg_split('/:/', $sClientIp)
+            );
+            // build binary netmask from iNetmaskLengthV6
+            // and split all 8 parts into an array
+            if ($this->iNetmaskLengthV6 < 1) {
+                $aMask = array_fill(0, 8, str_repeat('0', 16));
+            } else {
+                $aMask = str_split(
+                    str_repeat('1', $this->iNetmaskLengthV6).
+                    str_repeat('0', 128 - $this->iNetmaskLengthV6),
+                    16
+                );
+            }
+            // iterate all IP parts, apply its mask and reformat to IPv6 string notation.
+            array_walk(
+                $aIpV6,
+                function(&$sWord, $iIndex) use ($aMask) {
+                    $sWord = sprintf('%04x', hexdec($sWord) & bindec($aMask[$iIndex]));
+                }
+            );
+            // reformat to IPv6 string notation.
+            $sIp = implode(':', $aIpV6);
+// ------------------------------------------------------------------------------------ //
+        }
+        return md5($sIp); // return the hashed IP string
+    }
+
+/**
+ * encode a hex string into a 64char based string
+ * @param string $sMd5Hash
+ * @return string
+ * @description reduce the 32char length of a MD5 to 22 chars
+ */
+    private function encodeHash($sMd5Hash)
+    {
+         return preg_replace('/[^a-zA-Z0-9]/', '_', rtrim(base64_encode(pack('h*',$sMd5Hash)), '='));
+//        return rtrim(base64_encode(pack('h*',$sMd5Hash)), '+-= ');
+    }
+
+// callback method, needed for PHP-5.3.x only
+    private function checkFtanCallback($aToken)
+    {
+        return $this->encodeHash(md5($aToken['value'].$this->sFingerprint));
+    }
+
+/**
+ * read settings if available
+ */
+    private function getSettings()
+    {
+        if (!class_exists('WbAdaptor', false)) {
+        // for WB before 2.8.4
+            $this->bUseFingerprint  = defined('SEC_TOKEN_FINGERPRINT')
+                                      ? SEC_TOKEN_FINGERPRINT
+                                      : $this->bUseFingerprint;
+            $this->iNetmaskLengthV4 = defined('SEC_TOKEN_NETMASK4')
+                                      ? SEC_TOKEN_NETMASK4
+                                      : $this->iNetmaskLengthV4;
+            $this->iNetmaskLengthV6 = defined('SEC_TOKEN_NETMASK6')
+                                      ? SEC_TOKEN_NETMASK6
+                                      : $this->iNetmaskLengthV6;
+            $this->iTokenLifeTime   = defined('SEC_TOKEN_LIFE_TIME')
+                                      ? SEC_TOKEN_LIFE_TIME
+                                      : $this->iTokenLifeTime;
+        } else {
+        // for WB from 2.8.4 and up
+            $oReg = WbAdaptor::getInstance();
+            $this->bUseFingerprint  = isset($oReg->SecTokenFingerprint)
+                                      ? $oReg->SecTokenFingerprint
+                                      : $this->bUseFingerprint;
+            $this->iNetmaskLengthV4 = isset($oReg->SecTokenIpv4Netmask)
+                                      ? $oReg->SecTokenIpv4Netmask
+                                      : $this->iNetmaskLengthV4;
+            $this->iNetmaskLengthV6 = isset($oReg->SecTokenIpv6PrefixLength)
+                                      ? $oReg->SecTokenIpv6PrefixLength
+                                      : $this->iNetmaskLengthV6;
+            $this->iTokenLifeTime   = isset($oReg->SecTokenLifeTime)
+                                      ? $oReg->SecTokenLifeTime
+                                      : $this->iTokenLifeTime;
+        }
+        $this->iNetmaskLengthV4 = ($this->iNetmaskLengthV4 < 1 || $this->iNetmaskLengthV4 > 32)
+                                  ? 0 :$this->iNetmaskLengthV4;
+        $this->iNetmaskLengthV6 = ($this->iNetmaskLengthV6 < 1 || $this->iNetmaskLengthV6 > 128)
+                                  ? 0 :$this->iNetmaskLengthV6;
+        $this->iTokenLifeTime   = $this->sanitizeLifeTime($this->iTokenLifeTime);
+        if ($this->iTokenLifeTime <= self::LIFETIME_MIN && DEBUG) {
+            $this->iTokenLifeTime = self::DEBUG_LIFETIME;
+        }
+    }
+
+
+} // end of class SecureTokens

Property changes on: trunk/framework/SecureTokens.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/SecureTokensInterface.php
===================================================================
--- trunk/framework/SecureTokensInterface.php	(nonexistent)
+++ trunk/framework/SecureTokensInterface.php	(revision 2)
@@ -0,0 +1,135 @@
+<?php
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SecureTokensInterface.php
+ *
+ * @category     Core
+ * @package      Core_package
+ * @subpackage   Name of the subpackage if needed
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        File available since 13.02.2016
+ * @description  xyz
+ */
+class SecureTokensInterface {
+
+    /** int first private property */
+    private $oSecTok = null;
+
+    /** constructor */
+    public function __construct() {
+        $this->oSecTok = SecureTokens::getInstance();
+    }
+
+/**
+ * Dummy method for backward compatibility
+ * @return void
+ * @deprecated from WB-2.8.3-SP5
+ */
+    final public function createFTAN()
+    {
+        trigger_error('Deprecated function call: '.__CLASS__.'::'.__METHOD__, E_USER_DEPRECATED);
+    } // do nothing
+
+/**
+ * Dummy method for backward compatibility
+ * @return void
+ * @deprecated from WB-2.8.3-SP5
+ */
+    final public function clearIDKEY()
+    {
+        trigger_error('Deprecated function call: '.__CLASS__.'::'.__METHOD__, E_USER_DEPRECATED);
+    } // do nothing
+
+/**
+ * returns the current FTAN
+ * @param bool $mode: true or POST returns a complete prepared, hidden HTML-Input-Tag (default)
+ *                     false or GET returns an GET argument 'key=value'
+ * @return mixed:     array or string
+ * @deprecated the param $mMode is set deprecated
+ *              string retvals are set deprecated. From versions after 2.8.4 retval will be array only
+ */
+    final public function getFTAN($mMode = 'POST')
+    {
+        return $this->oSecTok->getFTAN($mMode);
+    }
+
+/**
+ * checks received form-transactionnumbers against session-stored one
+ * @param string $mode: requestmethode POST(default) or GET
+ * @param bool $bPreserve (default=false)
+ * @return bool:    true if numbers matches against stored ones
+ *
+ * requirements: an active session must be available
+ * this check will prevent from multiple sending a form. history.back() also will never work
+ */
+    final public function checkFTAN($mMode = 'POST', $bPreserve = false)
+    {
+        return $this->oSecTok->checkFTAN($mMode, $bPreserve);
+    }
+/**
+ * store value in session and returns an accesskey to it
+ * @param mixed $mValue can be numeric, string or array
+ * @return string
+ */
+    final public function getIDKEY($mValue)
+    {
+        return $this->oSecTok->getIDKEY($mValue);
+    }
+
+/*
+ * search for key in session and returns the original value
+ * @param string $sFieldname: name of the POST/GET-Field containing the key or hex-key itself
+ * @param mixed $mDefault: returnvalue if key not exist (default 0)
+ * @param string $sRequest: requestmethode can be POST or GET or '' (default POST)
+ * @param bool $bPreserve (default=false)
+ * @return mixed: the original value (string, numeric, array) or DEFAULT if request fails
+ * @description: each IDKEY can be checked only once. Unused Keys stay in list until they expire
+ */
+    final public function checkIDKEY($sFieldname, $mDefault = 0, $sRequest = 'POST', $bPreserve = false)
+    {
+        return $this->oSecTok->checkIDKEY($sFieldname, $mDefault, $sRequest, $bPreserve);
+    }
+
+/**
+ * make a valid LifeTime value from given integer on the rules of class SecureTokens
+ * @param integer  $iLifeTime
+ * @return integer
+ */
+    final public function sanitizeLifeTime($iLifeTime)
+    {
+        return $this->oSecTok->sanitizeLifeTime($iLifeTime);
+    }
+
+/**
+ * returns all TokenLifeTime values
+ * @return array
+ */
+    final public function getTokenLifeTime()
+    {
+        return $this->oSecTok->getTokenLifeTime();
+    }
+
+} // end of class SecureTokensInterface

Property changes on: trunk/framework/SecureTokensInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/SysInfo.php
===================================================================
--- trunk/framework/SysInfo.php	(nonexistent)
+++ trunk/framework/SysInfo.php	(revision 2)
@@ -0,0 +1,172 @@
+<?php
+
+/*
+ * Copyright (C) 2016 Manuela v.d.Decken <manuela@isteam.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+/**
+ * Description of SysInfo
+ *
+ * @category     Core
+ * @package      Core_SystemInfo
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      GNU General Public License 3.0
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @lastmodified $Date$
+ * @since        File available since 18.07.2016
+ * @deprecated   no / since 0000/00/00
+ * @description  xxx
+ */
+class SysInfo
+{
+    const DIR_INCLUDE = false;
+    const DIR_EXCLUDE = true;
+
+    protected $bWbDbType    = true;
+    protected $oDb          = null;
+    protected $sTablePrefix = '';
+    protected $getOne       = '';
+
+    public function __construct()
+    {
+        if (class_exists('WbDdatabase', false)) {
+            $this->oDb = WbDatabase::getInstance();
+            $this->sTablePrefix = $this->oDb->TablePrefix;
+            $this->getOne      = 'getOne';
+        } else {
+            $this->oDb = $GLOBALS['database'];
+            $this->sTablePrefix = TABLE_PREFIX;
+            $this->getOne      = 'get_one';
+        }
+    }
+
+    public function getInterface()
+    {
+        return PHP_SAPI;
+    }
+
+    public function isCgi()
+    {
+        return (stripos(PHP_SAPI, 'cgi') !== false);
+    }
+
+   public function getWbVersion($bShowRev = false)
+    {
+        return VERSION
+             . (defined('WB_SP') ? ' '.WB_SP :'')
+             . ($bShowRev ? '-r'.REVISION : '');
+    }
+
+    public function getPhpVersion()
+    {
+        return $this->stripNumber(PHP_VERSION);
+    }
+
+    /**
+     * SysInfo::getOsVersion()
+     *
+     * @param bool $bFull
+     * 'a': This is the default. Contains all modes in the sequence "s n r v m".
+     * 's': Operating system name. eg. FreeBSD.
+     * 'n': Host name. eg. localhost.example.com.
+     * 'r': Release name. eg. 5.1.2-RELEASE.
+     * 'v': Version information. Varies a lot between operating systems.
+     * 'm': Machine type. eg. i386.
+     * @return string
+     */
+    public function getOsVersion($bFull = false)
+    {
+        $sRetval = php_uname();
+        $x = array();
+        if (!$bFull) {
+            $xs = php_uname('s');
+            $xn = php_uname('n');
+            $xr = php_uname('r');
+            $xv = php_uname('v');
+            $xm = php_uname('m');
+            if (stristr($xv, 'ubuntu')!==false) {
+                $xs = preg_replace('/^[^\~]*\~([^\s]+).*$/', '$1', $xv);
+            }
+            $sRetval = $xs;
+        }
+        return $sRetval;
+    }
+
+    public function getSqlServer()
+    {
+//         5.5.5-10.1.14-MariaDB
+        $sRetval = 'unknown';
+        $sql = 'SELECT VERSION( )';
+        if (($sValue = $this->oDb->{$this->getOne}($sql))) {
+            $sRetval = $sValue;
+        }
+        $sql = 'SELECT LOWER(@@global.sql_mode) AS strictinfo';
+        if (($sValue = $this->oDb->{$this->getOne}($sql))) {
+            $sRetval .= (stristr($sValue, 'strict') !== false) ? ' [STRICT]' : '';
+        }
+        return $sRetval;
+    }
+
+    public function checkFolders(array $aFoldersList = null, $bMode = self::DIR_INCLUDE)
+    {
+        // get install folder of application
+        $sInstallFolder = str_replace('\\', '/', dirname(__DIR__)).'/';
+        // Callback sanitize path
+        $cleanPath = function(&$sValue) { $sValue = rtrim(str_replace('\\', '/', $sValue), '/').'/'; };
+        // sanitize list of given folders
+        if (!$aFoldersList) { $aFoldersList = array(); }
+        // sanitize folders in list
+        array_walk($aFoldersList, $cleanPath);
+        // save old working dir
+        $sOldWorkDir = getcwd();
+        // change working dir
+        chdir($sInstallFolder);
+        $aFoundFolders = glob('*', GLOB_MARK|GLOB_ONLYDIR);
+        // sanitize folders in list
+        array_walk($aFoundFolders, $cleanPath);
+        // restore old working dir
+        chdir($sOldWorkDir);
+        if ($bMode != self::DIR_INCLUDE) {
+        // leave only from $aFoldersList to test
+            $aFoldersToTest = array_diff($aFoundFolders, $aFoldersList);
+        } else {
+        // remove all folders in $aFoldersList for test
+            $aFoldersToTest = array_intersect($aFoundFolders, $aFoldersList);
+        }
+        // exchange  key<=>value
+        $aFoldersToTest = array_flip($aFoldersToTest);
+        // set all values to false
+        array_walk($aFoldersToTest, function(&$value) { $value = false; });
+        // set value to true if folder is writeable
+        array_walk(
+            $aFoldersToTest,
+            function(&$value, $key) use ($sInstallFolder) { $value = is_writable($sInstallFolder.$key); }
+        );
+        return $aFoldersToTest;
+    }
+
+/* ************************************************************************** */
+/*                                                                            */
+/* ************************************************************************** */
+    protected function stripNumber($sValue)
+    {
+        return preg_replace('/^([0-9.]+).*$/', '$1', $sValue);
+    }
+}
+

Property changes on: trunk/framework/SysInfo.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/Translate.php
===================================================================
--- trunk/framework/Translate.php	(nonexistent)
+++ trunk/framework/Translate.php	(revision 2)
@@ -0,0 +1,270 @@
+<?php
+
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Description of Translate
+ *
+ * @category     Core
+ * @package      Core_Security
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      GNU General Public License 3.0
+ * @version      0.0.2
+ * @revision     $Revision$
+ * @lastmodified $Date$
+ * @since        File available since 23.05.2016
+ * @deprecated   no / since 0000/00/00
+ * @description  handling of security tokens to prevent cross side scripting on manipulating requests
+ */
+class Translate
+{
+/** holds the active singleton instance */
+    private static $oInstance      = null;
+/** translations of the core */
+    protected $aTranslations       = array();
+/** translations of current module */
+    protected $aAddonTranslations  = array();
+/** path to the cache files */
+    protected $sCachePath          = '';
+/** switch the cache on/off */
+    protected $bUseCache           = false;
+/** list of languages to load */
+    protected $aLanguages          = array('EN');
+/** stack of loaded addons */
+    protected $aAddonStack         = array();
+// -----------------------------------------------------------------------------
+/** prevent class from public instancing and get an object to hold extensions */
+    protected function  __construct() {}
+// -----------------------------------------------------------------------------
+/** prevent from cloning existing instance */
+    private function __clone() {}
+// -----------------------------------------------------------------------------
+/**
+ * get a valid instance of this class
+ * @return object
+ */
+    static public function getInstance() {
+        if( is_null(self::$oInstance) ) {
+            $c = __CLASS__;
+            self::$oInstance = new $c;
+        }
+        return self::$oInstance;
+    }
+// -----------------------------------------------------------------------------
+/**
+ * initialize class and load core translations
+ * @param string $sCachePath
+ */
+    public function initialize($mLanguages, $sCachePath = '')
+    {
+        if ($this->sCachePath == '') {
+            if ($sCachePath == '') {
+                $sCachePath = dirname(__DIR__).'/temp/';
+            }
+            $sCachePath = rtrim(str_replace('\\', '/', $sCachePath), '/').'/';
+            $this->bUseCache = (is_writeable($sCachePath));
+            $this->sCachePath = $sCachePath;
+            if (!is_array($mLanguages)) {
+                $mLanguages = preg_split('/\s*?[,;|\s]\s*?/', $mLanguages);
+            }
+            $this->aLanguages = $mLanguages;
+            $this->aTranslations = array();
+            $this->aTranslations = $this->readFiles('core');
+        }
+    }
+// -----------------------------------------------------------------------------
+/**
+ * load translations of an addon
+ * @param string $sDomain   i.e 'modules\\news' or 'admin\\pages'
+ */
+    public function addAddon($sDomain)
+    {
+        if ($sDomain) {
+            $this->aAddonTranslations = array();
+            $this->aAddonTranslations = $this->readFiles($sDomain);
+        }
+    }
+// -----------------------------------------------------------------------------
+/**
+ * ALIAS for addAddon()
+ * @param string $sDomain   i.e 'modules\\news' or 'admin\\pages'
+ */
+    public function enableAddon($sDomain)
+    {
+        $this->addAddon($sDomain);
+        array_push($this->aAddonStack, $sDomain);
+    }
+// -----------------------------------------------------------------------------
+/**
+ * remove translations of an addon
+ */
+    public function disableAddon()
+    {
+        if (isset($this->aAddonTranslations)) {
+            $this->aAddonTranslations = array();
+            if (($sDomain = array_pop($this->aAddonStack)) != null) {
+                $this->addAddon($sDomain);
+            }
+        }
+    }
+// -----------------------------------------------------------------------------
+/**
+ * clear all translation cache files
+ */
+   public function clearCache()
+    {
+        $sMask = $this->sCachePath.'*.transcache';
+        $aFiles = glob($sMask, GLOB_NOSORT);
+        foreach ($aFiles as $sFile) {
+            if (is_writable($sFile)) {
+              unlink($sFile);
+            }
+        }
+    }// -----------------------------------------------------------------------------
+/**
+ * Return complete table of translations
+ * @return array containing all loaded translations
+ * @deprecated for backward compatibility to PHPLIB only. Will be removed shortly
+ */
+    public function getLangArray()
+    {
+        $aRetval = array_merge($this->aTranslations, $this->aAddonTranslations);
+        return $aRetval;
+    }
+// -----------------------------------------------------------------------------
+/* *** method group used by Twig ******************************************** */
+/**
+ * check if a entry exists
+ * @param string $sKeyword
+ * @return boolean
+ */
+    public function __isset($sKeyword)
+    {
+        return (
+            isset($this->aAddonTranslations[$sKeyword]) ||
+            isset($this->aTranslations[$sKeyword])
+        );
+    }
+// -----------------------------------------------------------------------------
+/**
+ * return value of an existing entry
+ * @param string $sKeyword
+ * @return string
+ */
+    public function __get($sKeyword)
+    {
+        if (isset($this->aAddonTranslations[$sKeyword])) {
+            $sRetval = $this->aAddonTranslations[$sKeyword];
+        } elseif (isset($this->aTranslations[$sKeyword])) {
+            $sRetval = $this->aTranslations[$sKeyword];
+        } else {
+            $sRetval = '#'.$sKeyword.'#';
+        }
+        return $sRetval;
+    }
+// -----------------------------------------------------------------------------
+/**
+ * try to set a new entry
+ * @param string $sKeyword
+ * @param string $value
+ */
+    public function __set($sKeyword, $value)
+    {
+        throw new RuntimeException('illegal action ['.__CLASS__.'::__set(\''.$sKeyword.'\', \''.$value.'\')]!! ');
+    }
+// -----------------------------------------------------------------------------
+/**
+ * read translation files of given domain
+ * @param string $sDomain
+ * @return array of translations
+ */
+    protected function readFiles($sDomain)
+    {
+        $aTranslations = array();
+        $sSourcePath = str_replace('\\', '/', dirname(__DIR__).'/'.($sDomain == 'core' ? '' : $sDomain.'/'));
+        $sCacheFile = $this->sCachePath.md5($sDomain.implode('', $this->aLanguages)).'.transcache';
+        if (!is_readable($sCacheFile)) {
+            $sLoadedLanguages = '';
+            $sCurrentLang = '';
+            foreach ($this->aLanguages as $sLanguage) {
+                // Avoid that a language is proceeded several times in a row
+                if ($sCurrentLang == $sLanguage) { continue; }
+                $sCurrentLang = $sLanguage;
+                $sLoadedLanguages .= $sLanguage.', ';
+                $sFile = $sSourcePath.'languages/'.$sLanguage.'.php';
+                if (is_readable($sFile)) {
+                    $aTranslations = array_merge($aTranslations, $this->importArrays($sFile));
+                }
+                reset($aTranslations);
+            }
+            // create cache file
+            $sOutput = '<?php'.PHP_EOL.'// *** autogenerated cachefile '.PHP_EOL
+                     . '// *** Domain:    '.$sDomain.PHP_EOL
+                     . '// *** Languages: '.rtrim($sLoadedLanguages, ' ,').PHP_EOL
+                     . '// ***************************'.PHP_EOL;
+            while (list($key, $value) = each($aTranslations)) {
+                $sOutput .= '$aTranslations[\''.$key.'\']=\''.str_replace("'", "\'", $value).'\';'.PHP_EOL;
+            }
+            $sOutput .= PHP_EOL;
+            // save cache file
+            if ($this->bUseCache && is_writeable($this->sCachePath)) {
+                file_put_contents($sCacheFile, $sOutput); //, LOCK_EX);
+            }
+        } else {
+            // include chache file
+            include($sCacheFile);
+        }
+        return $aTranslations;
+    }
+// -----------------------------------------------------------------------------
+/**
+ * Import language definitions into array
+ * @param string load language from filename
+ * @return array contains all found translations
+ */
+    protected function importArrays($sLanguageFile)
+    {
+        // get all available loaded vars of this method
+        $aOldVarlist = array();
+        $aOldVarlist = get_defined_vars();
+        // include the file
+        include $sLanguageFile;
+        $aCurrVarlist = array_diff_key(get_defined_vars(), $aOldVarlist);
+        $aLangSections = array();
+        $aLanguageTable = array();
+        foreach ($aCurrVarlist as $key=>$value) {
+        // extract the names of arrays from language file
+            if (is_array($value)) {
+                $aLangSections[] = $key;
+            }
+        }
+        foreach ($aLangSections as $sSection) {
+        // walk through all arrays
+            foreach (${$sSection} as $key => $value) {
+            // and import all found translations
+                if (!is_array($value)) {
+                // skip all multiarray definitions from compatibility mode
+                    $aLanguageTable[$sSection.'_'.$key] = $value;
+                }
+            }
+        }
+        return $aLanguageTable;
+    }
+// -----------------------------------------------------------------------------
+} // end of class Translation()

Property changes on: trunk/framework/Translate.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/addon.precheck.inc.php
===================================================================
--- trunk/framework/addon.precheck.inc.php	(nonexistent)
+++ trunk/framework/addon.precheck.inc.php	(revision 2)
@@ -0,0 +1,335 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         precheck
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once((__DIR__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+function getVersion($version, $strip_suffix = true)
+{
+    /**
+     * This funtion creates a version string following the major.minor.revision convention
+     * The minor and revision part of the version may not exceed 999 (three digits)
+     * An optional suffix part can be added after revision (requires $strip_suffix = false)
+     *
+     * EXAMPLES: input --> output
+     *    5 --> 5.000000; 5.0 --> 5.000000; 5.0.0 --> 5.000000
+     *     5.2 --> 5.002000; 5.20 --> 5.002000; 5.2.0 --> 5.002000
+     *     5.21 --> 5.002001; 5.2.1 --> 5.002001;
+     *     5.27.1 --> 5.027001; 5.2.71 --> 5.002071;
+     *     5.27.1 rc1 --> 5.027001_RC1 ($strip_suffix:= false)
+     */
+    // replace comma by decimal point
+    $version = str_replace(',', '.', $version);
+
+    // convert version into major.minor.revision numbering system
+    list($major, $minor, $revision) = explode('.', $version, 3);
+
+    // convert versioning style 5.21 into 5.2.1
+    if ($revision == '' && strlen(intval($minor)) == 2) {
+        $revision = substr($minor, -1);
+        $minor = substr($minor, 0, 1);
+    }
+
+    // extract possible non numerical suffix from revision part (e.g. Alpha, Beta, RC1)
+    $suffix = strtoupper(trim(substr($revision, strlen(intval($revision)))));
+
+/*
+    return (int)$major . '.' . sprintf('%03d', (int)$minor) . sprintf('%03d', (int)$revision) .
+        (($strip_suffix == false && $suffix != '') ? '_' . $suffix : '');
+*/
+    // return standard version number (minor and revision numbers may not exceed 999)
+    return sprintf('%d.%03d.%03d%s', (int)$major, (int)minor, (int)$revision,
+    (($strip_suffix == false && $suffix != '') ? '_' . $suffix : ''));
+}
+
+/**
+ *    As "version_compare" it self seems only got trouble
+ *    within words like "Alpha", "Beta" a.s.o. this function
+ *    only modify the version-string in the way that these words are replaced by values/numbers.
+ *
+ *    E.g:    "1.2.3 Beta2" => "1.2.322"
+ *            "0.1.1 ALPHA" => "0.1.11"
+ *
+ *    Notice:    Please keep in mind, that this will not correct the way "version_control"
+ *            handel "1 < 1.0 < 1.0.0 < 1.0.0.0" and will not correct missformed version-strings
+ *            below 2.7, e.g. "1.002 released candidate 2.3"
+ *
+ *    @since    2.8.0 RC2
+ *
+ *    @param    string    A versionstring
+ *    @return    string    The modificated versionstring
+ *
+ */
+function getVersion2 ($version="") {
+
+    $states = array (
+        '1' => "alpha",
+        '2' => "beta",
+        '4' => "rc",
+        '8' => "final"
+    );
+
+    $version = strtolower($version);
+
+    foreach($states as $value=>$keys) $version = str_replace($keys, $value, $version);
+
+    $version = str_replace(" ", "", $version);
+
+    return $version;
+}
+
+function versionCompare($version1, $version2, $operator = '>=')
+{
+    /**
+     * This funtion performs a comparison of two provided version strings
+     * The versions are first converted into a string following the major.minor.revision
+     * convention and performs a version_compare afterwards.
+     */
+    // return version_compare(getVersion($version1), getVersion($version2), $operator);
+    return version_compare(getVersion2($version1), getVersion2($version2), $operator);
+}
+
+function sortPreCheckArray($precheck_array)
+{
+    /**
+     * This funtion sorts the precheck array to a common format
+     */
+    // define desired precheck order
+    $key_order = array('WB_VERSION', 'WB_ADDONS', 'PHP_VERSION', 'PHP_EXTENSIONS', 'PHP_SETTINGS', 'CUSTOM_CHECKS');
+
+    $temp_array = array();
+    foreach($key_order as $key) {
+        if (!isset($precheck_array[$key])) continue;
+        $temp_array[$key] = $precheck_array[$key];
+    }
+    return $temp_array;
+}
+
+function preCheckAddon($temp_addon_file)
+{
+    /**
+     * This funtion performs pretest upfront of the Add-On installation process.
+     * The requirements can be specified via the array $PRECHECK which needs to
+     * be defined in the optional Add-on file precheck.php.
+     */
+    global $database, $admin, $TEXT, $HEADING, $MESSAGE;
+
+    // path to the temporary Add-on folder
+    $temp_path = WB_PATH . '/temp/unzip';
+
+    // check if file precheck.php exists for the Add-On uploaded via WB installation routine
+    if (!file_exists($temp_path . '/precheck.php')) return;
+
+    // unset any previous declared PRECHECK array
+    unset($PRECHECK);
+
+    // include Add-On precheck.php file
+    include($temp_path . '/precheck.php');
+
+    // check if there are any Add-On requirements to check for
+    if (!(isset($PRECHECK) && count($PRECHECK) > 0)) return;
+
+    // sort precheck array
+    $PRECHECK = sortPreCheckArray($PRECHECK);
+
+    $failed_checks = 0;
+    $msg = array();
+    // check if specified addon requirements are fullfilled
+    foreach ($PRECHECK as $key => $value) {
+        switch ($key) {
+            case 'WB_VERSION':
+                if (isset($value['VERSION'])) {
+                    // obtain operator for string comparison if exist
+                    $operator = (isset($value['OPERATOR']) &&  trim($value['OPERATOR']) != '') ? $value['OPERATOR'] : '>=';
+
+                    // compare versions and extract actual status
+                    $status = versionCompare(WB_VERSION, $value['VERSION'], $operator);
+                    $msg[] = array(
+                        'check'        => 'WB-' . $TEXT['VERSION'] .': ',
+                        'required'    => htmlentities($operator) . $value['VERSION'],
+                        'actual'    => WB_VERSION,
+                        'status'    => $status
+                    );
+
+                    // increase counter if required
+                    if (!$status) $failed_checks++;
+                }
+                break;
+
+            case 'WB_ADDONS':
+                if (is_array($PRECHECK['WB_ADDONS'])) {
+                    foreach($PRECHECK['WB_ADDONS'] as $addon => $values) {
+                        if (is_array($values)) {
+                            // extract module version and operator
+                            $version = (isset($values['VERSION']) &&  trim($values['VERSION']) != '') ? $values['VERSION'] : '';
+                            $operator = (isset($values['OPERATOR']) &&  trim($values['OPERATOR']) != '') ? $values['OPERATOR'] : '>=';
+                        } else {
+                            // no version and operator specified (only check if addon exists)
+                            $addon = strip_tags($values);
+                            $version = ''; $operator = '';
+                        }
+
+                        // check if addon is listed in WB database
+                        $table = TABLE_PREFIX . 'addons';
+                        $sql = "SELECT * FROM `$table` WHERE `directory` = '" . $database->escapeString($addon) . "'";
+                        $results = $database->query($sql);
+
+                        $status = false; $addon_status = $TEXT['NOT_INSTALLED'];
+                        if ($results && $row = $results->fetchRow()) {
+                            $status = true;
+                            $addon_status = $TEXT['INSTALLED'];
+
+                            // compare version if required
+                            if ($version != '') {
+                                $status = versionCompare($row['version'], $version, $operator);
+                                $addon_status = $row['version'];
+                            }
+                        }
+
+                        // provide addon status
+                        $msg[] = array(
+                            'check'        => '&nbsp; ' . $TEXT['ADDON'] . ': ' . htmlentities($addon),
+                            'required'    => ($version != '') ? $operator . '&nbsp;' . $version : $TEXT['INSTALLED'],
+                            'actual'    => $addon_status,
+                            'status'    => $status
+                        );
+
+                        // increase counter if required
+                        if (!$status) $failed_checks++;
+                    }
+                }
+                break;
+
+            case 'PHP_VERSION':
+                if (isset($value['VERSION'])) {
+                    // obtain operator for string comparison if exist
+                    $operator = (isset($value['OPERATOR']) &&  trim($value['OPERATOR']) != '') ? $value['OPERATOR'] : '>=';
+
+                    // compare versions and extract actual status
+                    $status = versionCompare(PHP_VERSION, $value['VERSION'], $operator);
+                    $msg[] = array(
+                        'check'        => 'PHP-' . $TEXT['VERSION'] .': ',
+                        'required'    => htmlentities($operator) . '&nbsp;' . $value['VERSION'],
+                        'actual'    => PHP_VERSION,
+                        'status'    => $status
+                    );
+
+                    // increase counter if required
+                    if (!$status) $failed_checks++;
+
+                }
+                break;
+
+            case 'PHP_EXTENSIONS':
+                if (is_array($PRECHECK['PHP_EXTENSIONS'])) {
+                    foreach($PRECHECK['PHP_EXTENSIONS'] as $extension) {
+                        $status = extension_loaded(strtolower($extension));
+                        $msg[] = array(
+                            'check'        => '&nbsp; ' . $TEXT['EXTENSION'] . ': ' . htmlentities($extension),
+                            'required'    => $TEXT['INSTALLED'],
+                            'actual'    => ($status) ? $TEXT['INSTALLED'] : $TEXT['NOT_INSTALLED'],
+                            'status'    => $status
+                        );
+
+                        // increase counter if required
+                        if (!$status) $failed_checks++;
+                    }
+                }
+                break;
+
+            case 'PHP_SETTINGS':
+                if (is_array($PRECHECK['PHP_SETTINGS'])) {
+                    foreach($PRECHECK['PHP_SETTINGS'] as $setting => $value) {
+                        $actual_setting = ($temp = ini_get($setting)) ? $temp : 0;
+                        $status = ($actual_setting == $value);
+
+                        $msg[] = array(
+                            'check'        => '&nbsp; '. ($setting),
+                            'required'    => $value,
+                            'actual'    => $actual_setting,
+                            'status'    => $status
+                        );
+
+                        // increase counter if required
+                        if (!$status) $failed_checks++;
+                    }
+                }
+                break;
+
+            case 'CUSTOM_CHECKS':
+                if (is_array($PRECHECK['CUSTOM_CHECKS'])) {
+                    foreach($PRECHECK['CUSTOM_CHECKS'] as $key => $values) {
+                        $status = (true === array_key_exists('STATUS', $values )) ? $values['STATUS'] : false;
+                        $msg[] = array(
+                            'check'        => $key,
+                            'required'    => $values['REQUIRED'],
+                            'actual'    => $values['ACTUAL'],
+                            'status'    => $status
+                        );
+                    }
+
+                    // increase counter if required
+                    if (!$status) $failed_checks++;
+                }
+                break;
+        }
+    }
+
+    // leave if all requirements are fullfilled
+    if ($failed_checks == 0) return;
+
+    // output summary table with requirements not fullfilled
+    echo <<< EOT
+    <h2>{$HEADING['ADDON_PRECHECK_FAILED']}</h2>
+    <p>{$MESSAGE['ADDON']['PRECHECK_FAILED']}</p>
+
+    <table width="700px" cellpadding="4" border="0" style="margin: 0.5em; border-collapse: collapse; border: 1px solid silver;">
+    <tr>
+        <th>{$TEXT['REQUIREMENT']}:</th>
+        <th>{$TEXT['REQUIRED']}:</th>
+        <th>{$TEXT['CURRENT']}:</th>
+    </tr>
+EOT;
+
+    foreach($msg as $check) {
+        echo '<tr>';
+        $style = $check['status'] ? 'color: #46882B;' : 'color: #C00;';
+        foreach($check as $key => $value) {
+            if ($key == 'status') continue;
+
+            echo '<td style="' . $style . '">' . $value . '</td>';
+        }
+        echo '</tr>';
+    }
+    echo '</table>';
+
+    // delete the temp unzip directory
+    rm_full_dir($temp_path);
+
+    // delete the temporary zip file of the Add-on
+    if(file_exists($temp_addon_file)) { unlink($temp_addon_file); }
+
+    // output status message and die
+    $admin->print_error('');
+}
+
+?>
\ No newline at end of file

Property changes on: trunk/framework/addon.precheck.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/charsets_table.php
===================================================================
--- trunk/framework/charsets_table.php	(nonexistent)
+++ trunk/framework/charsets_table.php	(revision 2)
@@ -0,0 +1,1022 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+global $iso_8859_2_to_utf8;
+$iso_8859_2_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xc4\x84","\xa2"=>"\xcb\x98","\xa3"=>"\xc5\x81","\xa4"=>"\xc2\xa4","\xa5"=>"\xc4\xbd","\xa6"=>"\xc5\x9a","\xa7"=>"\xc2\xa7",
+    "\xa8"=>"\xc2\xa8","\xa9"=>"\xc5\xa0","\xaa"=>"\xc5\x9e","\xab"=>"\xc5\xa4","\xac"=>"\xc5\xb9","\xad"=>"\xc2\xad","\xae"=>"\xc5\xbd","\xaf"=>"\xc5\xbb",
+    "\xb0"=>"\xc2\xb0","\xb1"=>"\xc4\x85","\xb2"=>"\xcb\x9b","\xb3"=>"\xc5\x82","\xb4"=>"\xc2\xb4","\xb5"=>"\xc4\xbe","\xb6"=>"\xc5\x9b","\xb7"=>"\xcb\x87",
+    "\xb8"=>"\xc2\xb8","\xb9"=>"\xc5\xa1","\xba"=>"\xc5\x9f","\xbb"=>"\xc5\xa5","\xbc"=>"\xc5\xba","\xbd"=>"\xcb\x9d","\xbe"=>"\xc5\xbe","\xbf"=>"\xc5\xbc",
+    "\xc0"=>"\xc5\x94","\xc1"=>"\xc3\x81","\xc2"=>"\xc3\x82","\xc3"=>"\xc4\x82","\xc4"=>"\xc3\x84","\xc5"=>"\xc4\xb9","\xc6"=>"\xc4\x86","\xc7"=>"\xc3\x87",
+    "\xc8"=>"\xc4\x8c","\xc9"=>"\xc3\x89","\xca"=>"\xc4\x98","\xcb"=>"\xc3\x8b","\xcc"=>"\xc4\x9a","\xcd"=>"\xc3\x8d","\xce"=>"\xc3\x8e","\xcf"=>"\xc4\x8e",
+    "\xd0"=>"\xc4\x90","\xd1"=>"\xc5\x83","\xd2"=>"\xc5\x87","\xd3"=>"\xc3\x93","\xd4"=>"\xc3\x94","\xd5"=>"\xc5\x90","\xd6"=>"\xc3\x96","\xd7"=>"\xc3\x97",
+    "\xd8"=>"\xc5\x98","\xd9"=>"\xc5\xae","\xda"=>"\xc3\x9a","\xdb"=>"\xc5\xb0","\xdc"=>"\xc3\x9c","\xdd"=>"\xc3\x9d","\xde"=>"\xc5\xa2","\xdf"=>"\xc3\x9f",
+    "\xe0"=>"\xc5\x95","\xe1"=>"\xc3\xa1","\xe2"=>"\xc3\xa2","\xe3"=>"\xc4\x83","\xe4"=>"\xc3\xa4","\xe5"=>"\xc4\xba","\xe6"=>"\xc4\x87","\xe7"=>"\xc3\xa7",
+    "\xe8"=>"\xc4\x8d","\xe9"=>"\xc3\xa9","\xea"=>"\xc4\x99","\xeb"=>"\xc3\xab","\xec"=>"\xc4\x9b","\xed"=>"\xc3\xad","\xee"=>"\xc3\xae","\xef"=>"\xc4\x8f",
+    "\xf0"=>"\xc4\x91","\xf1"=>"\xc5\x84","\xf2"=>"\xc5\x88","\xf3"=>"\xc3\xb3","\xf4"=>"\xc3\xb4","\xf5"=>"\xc5\x91","\xf6"=>"\xc3\xb6","\xf7"=>"\xc3\xb7",
+    "\xf8"=>"\xc5\x99","\xf9"=>"\xc5\xaf","\xfa"=>"\xc3\xba","\xfb"=>"\xc5\xb1","\xfc"=>"\xc3\xbc","\xfd"=>"\xc3\xbd","\xfe"=>"\xc5\xa3","\xff"=>"\xcb\x99"
+);
+global $utf8_to_iso_8859_2;
+$utf8_to_iso_8859_2 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc4\x84"=>"\xa1","\xcb\x98"=>"\xa2","\xc5\x81"=>"\xa3","\xc2\xa4"=>"\xa4","\xc4\xbd"=>"\xa5","\xc5\x9a"=>"\xa6","\xc2\xa7"=>"\xa7",
+    "\xc2\xa8"=>"\xa8","\xc5\xa0"=>"\xa9","\xc5\x9e"=>"\xaa","\xc5\xa4"=>"\xab","\xc5\xb9"=>"\xac","\xc2\xad"=>"\xad","\xc5\xbd"=>"\xae","\xc5\xbb"=>"\xaf",
+    "\xc2\xb0"=>"\xb0","\xc4\x85"=>"\xb1","\xcb\x9b"=>"\xb2","\xc5\x82"=>"\xb3","\xc2\xb4"=>"\xb4","\xc4\xbe"=>"\xb5","\xc5\x9b"=>"\xb6","\xcb\x87"=>"\xb7",
+    "\xc2\xb8"=>"\xb8","\xc5\xa1"=>"\xb9","\xc5\x9f"=>"\xba","\xc5\xa5"=>"\xbb","\xc5\xba"=>"\xbc","\xcb\x9d"=>"\xbd","\xc5\xbe"=>"\xbe","\xc5\xbc"=>"\xbf",
+    "\xc5\x94"=>"\xc0","\xc3\x81"=>"\xc1","\xc3\x82"=>"\xc2","\xc4\x82"=>"\xc3","\xc3\x84"=>"\xc4","\xc4\xb9"=>"\xc5","\xc4\x86"=>"\xc6","\xc3\x87"=>"\xc7",
+    "\xc4\x8c"=>"\xc8","\xc3\x89"=>"\xc9","\xc4\x98"=>"\xca","\xc3\x8b"=>"\xcb","\xc4\x9a"=>"\xcc","\xc3\x8d"=>"\xcd","\xc3\x8e"=>"\xce","\xc4\x8e"=>"\xcf",
+    "\xc4\x90"=>"\xd0","\xc5\x83"=>"\xd1","\xc5\x87"=>"\xd2","\xc3\x93"=>"\xd3","\xc3\x94"=>"\xd4","\xc5\x90"=>"\xd5","\xc3\x96"=>"\xd6","\xc3\x97"=>"\xd7",
+    "\xc5\x98"=>"\xd8","\xc5\xae"=>"\xd9","\xc3\x9a"=>"\xda","\xc5\xb0"=>"\xdb","\xc3\x9c"=>"\xdc","\xc3\x9d"=>"\xdd","\xc5\xa2"=>"\xde","\xc3\x9f"=>"\xdf",
+    "\xc5\x95"=>"\xe0","\xc3\xa1"=>"\xe1","\xc3\xa2"=>"\xe2","\xc4\x83"=>"\xe3","\xc3\xa4"=>"\xe4","\xc4\xba"=>"\xe5","\xc4\x87"=>"\xe6","\xc3\xa7"=>"\xe7",
+    "\xc4\x8d"=>"\xe8","\xc3\xa9"=>"\xe9","\xc4\x99"=>"\xea","\xc3\xab"=>"\xeb","\xc4\x9b"=>"\xec","\xc3\xad"=>"\xed","\xc3\xae"=>"\xee","\xc4\x8f"=>"\xef",
+    "\xc4\x91"=>"\xf0","\xc5\x84"=>"\xf1","\xc5\x88"=>"\xf2","\xc3\xb3"=>"\xf3","\xc3\xb4"=>"\xf4","\xc5\x91"=>"\xf5","\xc3\xb6"=>"\xf6","\xc3\xb7"=>"\xf7",
+    "\xc5\x99"=>"\xf8","\xc5\xaf"=>"\xf9","\xc3\xba"=>"\xfa","\xc5\xb1"=>"\xfb","\xc3\xbc"=>"\xfc","\xc3\xbd"=>"\xfd","\xc5\xa3"=>"\xfe","\xcb\x99"=>"\xff"
+);
+global $iso_8859_3_to_utf8;
+$iso_8859_3_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xc4\xa6","\xa2"=>"\xcb\x98","\xa3"=>"\xc2\xa3","\xa4"=>"\xc2\xa4","\xa5"=>"\xc4\xa8","\xa6"=>"\xc4\xa4","\xa7"=>"\xc2\xa7",
+    "\xa8"=>"\xc2\xa8","\xa9"=>"\xc4\xb0","\xaa"=>"\xc5\x9e","\xab"=>"\xc4\x9e","\xac"=>"\xc4\xb4","\xad"=>"\xc2\xad","\xaf"=>"\xc5\xbb","\xb0"=>"\xc2\xb0",
+    "\xb1"=>"\xc4\xa7","\xb2"=>"\xc2\xb2","\xb3"=>"\xc2\xb3","\xb4"=>"\xc2\xb4","\xb5"=>"\xc2\xb5","\xb6"=>"\xc4\xa5","\xb7"=>"\xc2\xb7","\xb8"=>"\xc2\xb8",
+    "\xb9"=>"\xc4\xb1","\xba"=>"\xc5\x9f","\xbb"=>"\xc4\x9f","\xbc"=>"\xc4\xb5","\xbd"=>"\xc2\xbd","\xbf"=>"\xc5\xbc","\xc0"=>"\xc3\x80","\xc1"=>"\xc3\x81",
+    "\xc2"=>"\xc3\x82","\xc4"=>"\xc3\x84","\xc5"=>"\xc4\x8a","\xc6"=>"\xc4\x88","\xc7"=>"\xc3\x87","\xc8"=>"\xc3\x88","\xc9"=>"\xc3\x89","\xca"=>"\xc3\x8a",
+    "\xcb"=>"\xc3\x8b","\xcc"=>"\xc3\x8c","\xcd"=>"\xc3\x8d","\xce"=>"\xc3\x8e","\xcf"=>"\xc3\x8f","\xd1"=>"\xc3\x91","\xd2"=>"\xc3\x92","\xd3"=>"\xc3\x93",
+    "\xd4"=>"\xc3\x94","\xd5"=>"\xc4\xa0","\xd6"=>"\xc3\x96","\xd7"=>"\xc3\x97","\xd8"=>"\xc4\x9c","\xd9"=>"\xc3\x99","\xda"=>"\xc3\x9a","\xdb"=>"\xc3\x9b",
+    "\xdc"=>"\xc3\x9c","\xdd"=>"\xc5\xac","\xde"=>"\xc5\x9c","\xdf"=>"\xc3\x9f","\xe0"=>"\xc3\xa0","\xe1"=>"\xc3\xa1","\xe2"=>"\xc3\xa2","\xe4"=>"\xc3\xa4",
+    "\xe5"=>"\xc4\x8b","\xe6"=>"\xc4\x89","\xe7"=>"\xc3\xa7","\xe8"=>"\xc3\xa8","\xe9"=>"\xc3\xa9","\xea"=>"\xc3\xaa","\xeb"=>"\xc3\xab","\xec"=>"\xc3\xac",
+    "\xed"=>"\xc3\xad","\xee"=>"\xc3\xae","\xef"=>"\xc3\xaf","\xf1"=>"\xc3\xb1","\xf2"=>"\xc3\xb2","\xf3"=>"\xc3\xb3","\xf4"=>"\xc3\xb4","\xf5"=>"\xc4\xa1",
+    "\xf6"=>"\xc3\xb6","\xf7"=>"\xc3\xb7","\xf8"=>"\xc4\x9d","\xf9"=>"\xc3\xb9","\xfa"=>"\xc3\xba","\xfb"=>"\xc3\xbb","\xfc"=>"\xc3\xbc","\xfd"=>"\xc5\xad",
+    "\xfe"=>"\xc5\x9d","\xff"=>"\xcb\x99"
+);
+global $utf8_to_iso_8859_3;
+$utf8_to_iso_8859_3 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc4\xa6"=>"\xa1","\xcb\x98"=>"\xa2","\xc2\xa3"=>"\xa3","\xc2\xa4"=>"\xa4","\xc4\xa8"=>"\xa5","\xc4\xa4"=>"\xa6","\xc2\xa7"=>"\xa7",
+    "\xc2\xa8"=>"\xa8","\xc4\xb0"=>"\xa9","\xc5\x9e"=>"\xaa","\xc4\x9e"=>"\xab","\xc4\xb4"=>"\xac","\xc2\xad"=>"\xad","\xc5\xbb"=>"\xaf","\xc2\xb0"=>"\xb0",
+    "\xc4\xa7"=>"\xb1","\xc2\xb2"=>"\xb2","\xc2\xb3"=>"\xb3","\xc2\xb4"=>"\xb4","\xc2\xb5"=>"\xb5","\xc4\xa5"=>"\xb6","\xc2\xb7"=>"\xb7","\xc2\xb8"=>"\xb8",
+    "\xc4\xb1"=>"\xb9","\xc5\x9f"=>"\xba","\xc4\x9f"=>"\xbb","\xc4\xb5"=>"\xbc","\xc2\xbd"=>"\xbd","\xc5\xbc"=>"\xbf","\xc3\x80"=>"\xc0","\xc3\x81"=>"\xc1",
+    "\xc3\x82"=>"\xc2","\xc3\x84"=>"\xc4","\xc4\x8a"=>"\xc5","\xc4\x88"=>"\xc6","\xc3\x87"=>"\xc7","\xc3\x88"=>"\xc8","\xc3\x89"=>"\xc9","\xc3\x8a"=>"\xca",
+    "\xc3\x8b"=>"\xcb","\xc3\x8c"=>"\xcc","\xc3\x8d"=>"\xcd","\xc3\x8e"=>"\xce","\xc3\x8f"=>"\xcf","\xc3\x91"=>"\xd1","\xc3\x92"=>"\xd2","\xc3\x93"=>"\xd3",
+    "\xc3\x94"=>"\xd4","\xc4\xa0"=>"\xd5","\xc3\x96"=>"\xd6","\xc3\x97"=>"\xd7","\xc4\x9c"=>"\xd8","\xc3\x99"=>"\xd9","\xc3\x9a"=>"\xda","\xc3\x9b"=>"\xdb",
+    "\xc3\x9c"=>"\xdc","\xc5\xac"=>"\xdd","\xc5\x9c"=>"\xde","\xc3\x9f"=>"\xdf","\xc3\xa0"=>"\xe0","\xc3\xa1"=>"\xe1","\xc3\xa2"=>"\xe2","\xc3\xa4"=>"\xe4",
+    "\xc4\x8b"=>"\xe5","\xc4\x89"=>"\xe6","\xc3\xa7"=>"\xe7","\xc3\xa8"=>"\xe8","\xc3\xa9"=>"\xe9","\xc3\xaa"=>"\xea","\xc3\xab"=>"\xeb","\xc3\xac"=>"\xec",
+    "\xc3\xad"=>"\xed","\xc3\xae"=>"\xee","\xc3\xaf"=>"\xef","\xc3\xb1"=>"\xf1","\xc3\xb2"=>"\xf2","\xc3\xb3"=>"\xf3","\xc3\xb4"=>"\xf4","\xc4\xa1"=>"\xf5",
+    "\xc3\xb6"=>"\xf6","\xc3\xb7"=>"\xf7","\xc4\x9d"=>"\xf8","\xc3\xb9"=>"\xf9","\xc3\xba"=>"\xfa","\xc3\xbb"=>"\xfb","\xc3\xbc"=>"\xfc","\xc5\xad"=>"\xfd",
+    "\xc5\x9d"=>"\xfe","\xcb\x99"=>"\xff"
+);
+global $iso_8859_4_to_utf8;
+$iso_8859_4_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xc4\x84","\xa2"=>"\xc4\xb8","\xa3"=>"\xc5\x96","\xa4"=>"\xc2\xa4","\xa5"=>"\xc4\xa8","\xa6"=>"\xc4\xbb","\xa7"=>"\xc2\xa7",
+    "\xa8"=>"\xc2\xa8","\xa9"=>"\xc5\xa0","\xaa"=>"\xc4\x92","\xab"=>"\xc4\xa2","\xac"=>"\xc5\xa6","\xad"=>"\xc2\xad","\xae"=>"\xc5\xbd","\xaf"=>"\xc2\xaf",
+    "\xb0"=>"\xc2\xb0","\xb1"=>"\xc4\x85","\xb2"=>"\xcb\x9b","\xb3"=>"\xc5\x97","\xb4"=>"\xc2\xb4","\xb5"=>"\xc4\xa9","\xb6"=>"\xc4\xbc","\xb7"=>"\xcb\x87",
+    "\xb8"=>"\xc2\xb8","\xb9"=>"\xc5\xa1","\xba"=>"\xc4\x93","\xbb"=>"\xc4\xa3","\xbc"=>"\xc5\xa7","\xbd"=>"\xc5\x8a","\xbe"=>"\xc5\xbe","\xbf"=>"\xc5\x8b",
+    "\xc0"=>"\xc4\x80","\xc1"=>"\xc3\x81","\xc2"=>"\xc3\x82","\xc3"=>"\xc3\x83","\xc4"=>"\xc3\x84","\xc5"=>"\xc3\x85","\xc6"=>"\xc3\x86","\xc7"=>"\xc4\xae",
+    "\xc8"=>"\xc4\x8c","\xc9"=>"\xc3\x89","\xca"=>"\xc4\x98","\xcb"=>"\xc3\x8b","\xcc"=>"\xc4\x96","\xcd"=>"\xc3\x8d","\xce"=>"\xc3\x8e","\xcf"=>"\xc4\xaa",
+    "\xd0"=>"\xc4\x90","\xd1"=>"\xc5\x85","\xd2"=>"\xc5\x8c","\xd3"=>"\xc4\xb6","\xd4"=>"\xc3\x94","\xd5"=>"\xc3\x95","\xd6"=>"\xc3\x96","\xd7"=>"\xc3\x97",
+    "\xd8"=>"\xc3\x98","\xd9"=>"\xc5\xb2","\xda"=>"\xc3\x9a","\xdb"=>"\xc3\x9b","\xdc"=>"\xc3\x9c","\xdd"=>"\xc5\xa8","\xde"=>"\xc5\xaa","\xdf"=>"\xc3\x9f",
+    "\xe0"=>"\xc4\x81","\xe1"=>"\xc3\xa1","\xe2"=>"\xc3\xa2","\xe3"=>"\xc3\xa3","\xe4"=>"\xc3\xa4","\xe5"=>"\xc3\xa5","\xe6"=>"\xc3\xa6","\xe7"=>"\xc4\xaf",
+    "\xe8"=>"\xc4\x8d","\xe9"=>"\xc3\xa9","\xea"=>"\xc4\x99","\xeb"=>"\xc3\xab","\xec"=>"\xc4\x97","\xed"=>"\xc3\xad","\xee"=>"\xc3\xae","\xef"=>"\xc4\xab",
+    "\xf0"=>"\xc4\x91","\xf1"=>"\xc5\x86","\xf2"=>"\xc5\x8d","\xf3"=>"\xc4\xb7","\xf4"=>"\xc3\xb4","\xf5"=>"\xc3\xb5","\xf6"=>"\xc3\xb6","\xf7"=>"\xc3\xb7",
+    "\xf8"=>"\xc3\xb8","\xf9"=>"\xc5\xb3","\xfa"=>"\xc3\xba","\xfb"=>"\xc3\xbb","\xfc"=>"\xc3\xbc","\xfd"=>"\xc5\xa9","\xfe"=>"\xc5\xab","\xff"=>"\xcb\x99"
+);
+global $utf8_to_iso_8859_4;
+$utf8_to_iso_8859_4 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc4\x84"=>"\xa1","\xc4\xb8"=>"\xa2","\xc5\x96"=>"\xa3","\xc2\xa4"=>"\xa4","\xc4\xa8"=>"\xa5","\xc4\xbb"=>"\xa6","\xc2\xa7"=>"\xa7",
+    "\xc2\xa8"=>"\xa8","\xc5\xa0"=>"\xa9","\xc4\x92"=>"\xaa","\xc4\xa2"=>"\xab","\xc5\xa6"=>"\xac","\xc2\xad"=>"\xad","\xc5\xbd"=>"\xae","\xc2\xaf"=>"\xaf",
+    "\xc2\xb0"=>"\xb0","\xc4\x85"=>"\xb1","\xcb\x9b"=>"\xb2","\xc5\x97"=>"\xb3","\xc2\xb4"=>"\xb4","\xc4\xa9"=>"\xb5","\xc4\xbc"=>"\xb6","\xcb\x87"=>"\xb7",
+    "\xc2\xb8"=>"\xb8","\xc5\xa1"=>"\xb9","\xc4\x93"=>"\xba","\xc4\xa3"=>"\xbb","\xc5\xa7"=>"\xbc","\xc5\x8a"=>"\xbd","\xc5\xbe"=>"\xbe","\xc5\x8b"=>"\xbf",
+    "\xc4\x80"=>"\xc0","\xc3\x81"=>"\xc1","\xc3\x82"=>"\xc2","\xc3\x83"=>"\xc3","\xc3\x84"=>"\xc4","\xc3\x85"=>"\xc5","\xc3\x86"=>"\xc6","\xc4\xae"=>"\xc7",
+    "\xc4\x8c"=>"\xc8","\xc3\x89"=>"\xc9","\xc4\x98"=>"\xca","\xc3\x8b"=>"\xcb","\xc4\x96"=>"\xcc","\xc3\x8d"=>"\xcd","\xc3\x8e"=>"\xce","\xc4\xaa"=>"\xcf",
+    "\xc4\x90"=>"\xd0","\xc5\x85"=>"\xd1","\xc5\x8c"=>"\xd2","\xc4\xb6"=>"\xd3","\xc3\x94"=>"\xd4","\xc3\x95"=>"\xd5","\xc3\x96"=>"\xd6","\xc3\x97"=>"\xd7",
+    "\xc3\x98"=>"\xd8","\xc5\xb2"=>"\xd9","\xc3\x9a"=>"\xda","\xc3\x9b"=>"\xdb","\xc3\x9c"=>"\xdc","\xc5\xa8"=>"\xdd","\xc5\xaa"=>"\xde","\xc3\x9f"=>"\xdf",
+    "\xc4\x81"=>"\xe0","\xc3\xa1"=>"\xe1","\xc3\xa2"=>"\xe2","\xc3\xa3"=>"\xe3","\xc3\xa4"=>"\xe4","\xc3\xa5"=>"\xe5","\xc3\xa6"=>"\xe6","\xc4\xaf"=>"\xe7",
+    "\xc4\x8d"=>"\xe8","\xc3\xa9"=>"\xe9","\xc4\x99"=>"\xea","\xc3\xab"=>"\xeb","\xc4\x97"=>"\xec","\xc3\xad"=>"\xed","\xc3\xae"=>"\xee","\xc4\xab"=>"\xef",
+    "\xc4\x91"=>"\xf0","\xc5\x86"=>"\xf1","\xc5\x8d"=>"\xf2","\xc4\xb7"=>"\xf3","\xc3\xb4"=>"\xf4","\xc3\xb5"=>"\xf5","\xc3\xb6"=>"\xf6","\xc3\xb7"=>"\xf7",
+    "\xc3\xb8"=>"\xf8","\xc5\xb3"=>"\xf9","\xc3\xba"=>"\xfa","\xc3\xbb"=>"\xfb","\xc3\xbc"=>"\xfc","\xc5\xa9"=>"\xfd","\xc5\xab"=>"\xfe","\xcb\x99"=>"\xff"
+);
+
+global $iso_8859_5_to_utf8;
+$iso_8859_5_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xd0\x81","\xa2"=>"\xd0\x82","\xa3"=>"\xd0\x83","\xa4"=>"\xd0\x84","\xa5"=>"\xd0\x85","\xa6"=>"\xd0\x86","\xa7"=>"\xd0\x87",
+    "\xa8"=>"\xd0\x88","\xa9"=>"\xd0\x89","\xaa"=>"\xd0\x8a","\xab"=>"\xd0\x8b","\xac"=>"\xd0\x8c","\xad"=>"\xc2\xad","\xae"=>"\xd0\x8e","\xaf"=>"\xd0\x8f",
+    "\xb0"=>"\xd0\x90","\xb1"=>"\xd0\x91","\xb2"=>"\xd0\x92","\xb3"=>"\xd0\x93","\xb4"=>"\xd0\x94","\xb5"=>"\xd0\x95","\xb6"=>"\xd0\x96","\xb7"=>"\xd0\x97",
+    "\xb8"=>"\xd0\x98","\xb9"=>"\xd0\x99","\xba"=>"\xd0\x9a","\xbb"=>"\xd0\x9b","\xbc"=>"\xd0\x9c","\xbd"=>"\xd0\x9d","\xbe"=>"\xd0\x9e","\xbf"=>"\xd0\x9f",
+    "\xc0"=>"\xd0\xa0","\xc1"=>"\xd0\xa1","\xc2"=>"\xd0\xa2","\xc3"=>"\xd0\xa3","\xc4"=>"\xd0\xa4","\xc5"=>"\xd0\xa5","\xc6"=>"\xd0\xa6","\xc7"=>"\xd0\xa7",
+    "\xc8"=>"\xd0\xa8","\xc9"=>"\xd0\xa9","\xca"=>"\xd0\xaa","\xcb"=>"\xd0\xab","\xcc"=>"\xd0\xac","\xcd"=>"\xd0\xad","\xce"=>"\xd0\xae","\xcf"=>"\xd0\xaf",
+    "\xd0"=>"\xd0\xb0","\xd1"=>"\xd0\xb1","\xd2"=>"\xd0\xb2","\xd3"=>"\xd0\xb3","\xd4"=>"\xd0\xb4","\xd5"=>"\xd0\xb5","\xd6"=>"\xd0\xb6","\xd7"=>"\xd0\xb7",
+    "\xd8"=>"\xd0\xb8","\xd9"=>"\xd0\xb9","\xda"=>"\xd0\xba","\xdb"=>"\xd0\xbb","\xdc"=>"\xd0\xbc","\xdd"=>"\xd0\xbd","\xde"=>"\xd0\xbe","\xdf"=>"\xd0\xbf",
+    "\xe0"=>"\xd1\x80","\xe1"=>"\xd1\x81","\xe2"=>"\xd1\x82","\xe3"=>"\xd1\x83","\xe4"=>"\xd1\x84","\xe5"=>"\xd1\x85","\xe6"=>"\xd1\x86","\xe7"=>"\xd1\x87",
+    "\xe8"=>"\xd1\x88","\xe9"=>"\xd1\x89","\xea"=>"\xd1\x8a","\xeb"=>"\xd1\x8b","\xec"=>"\xd1\x8c","\xed"=>"\xd1\x8d","\xee"=>"\xd1\x8e","\xef"=>"\xd1\x8f",
+    "\xf0"=>"\xe2\x84\x96","\xf1"=>"\xd1\x91","\xf2"=>"\xd1\x92","\xf3"=>"\xd1\x93","\xf4"=>"\xd1\x94","\xf5"=>"\xd1\x95","\xf6"=>"\xd1\x96","\xf7"=>"\xd1\x97",
+    "\xf8"=>"\xd1\x98","\xf9"=>"\xd1\x99","\xfa"=>"\xd1\x9a","\xfb"=>"\xd1\x9b","\xfc"=>"\xd1\x9c","\xfd"=>"\xc2\xa7","\xfe"=>"\xd1\x9e","\xff"=>"\xd1\x9f"
+);
+
+global $utf8_to_iso_8859_5;
+$utf8_to_iso_8859_5 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xd0\x81"=>"\xa1","\xd0\x82"=>"\xa2","\xd0\x83"=>"\xa3","\xd0\x84"=>"\xa4","\xd0\x85"=>"\xa5","\xd0\x86"=>"\xa6","\xd0\x87"=>"\xa7",
+    "\xd0\x88"=>"\xa8","\xd0\x89"=>"\xa9","\xd0\x8a"=>"\xaa","\xd0\x8b"=>"\xab","\xd0\x8c"=>"\xac","\xc2\xad"=>"\xad","\xd0\x8e"=>"\xae","\xd0\x8f"=>"\xaf",
+    "\xd0\x90"=>"\xb0","\xd0\x91"=>"\xb1","\xd0\x92"=>"\xb2","\xd0\x93"=>"\xb3","\xd0\x94"=>"\xb4","\xd0\x95"=>"\xb5","\xd0\x96"=>"\xb6","\xd0\x97"=>"\xb7",
+    "\xd0\x98"=>"\xb8","\xd0\x99"=>"\xb9","\xd0\x9a"=>"\xba","\xd0\x9b"=>"\xbb","\xd0\x9c"=>"\xbc","\xd0\x9d"=>"\xbd","\xd0\x9e"=>"\xbe","\xd0\x9f"=>"\xbf",
+    "\xd0\xa0"=>"\xc0","\xd0\xa1"=>"\xc1","\xd0\xa2"=>"\xc2","\xd0\xa3"=>"\xc3","\xd0\xa4"=>"\xc4","\xd0\xa5"=>"\xc5","\xd0\xa6"=>"\xc6","\xd0\xa7"=>"\xc7",
+    "\xd0\xa8"=>"\xc8","\xd0\xa9"=>"\xc9","\xd0\xaa"=>"\xca","\xd0\xab"=>"\xcb","\xd0\xac"=>"\xcc","\xd0\xad"=>"\xcd","\xd0\xae"=>"\xce","\xd0\xaf"=>"\xcf",
+    "\xd0\xb0"=>"\xd0","\xd0\xb1"=>"\xd1","\xd0\xb2"=>"\xd2","\xd0\xb3"=>"\xd3","\xd0\xb4"=>"\xd4","\xd0\xb5"=>"\xd5","\xd0\xb6"=>"\xd6","\xd0\xb7"=>"\xd7",
+    "\xd0\xb8"=>"\xd8","\xd0\xb9"=>"\xd9","\xd0\xba"=>"\xda","\xd0\xbb"=>"\xdb","\xd0\xbc"=>"\xdc","\xd0\xbd"=>"\xdd","\xd0\xbe"=>"\xde","\xd0\xbf"=>"\xdf",
+    "\xd1\x80"=>"\xe0","\xd1\x81"=>"\xe1","\xd1\x82"=>"\xe2","\xd1\x83"=>"\xe3","\xd1\x84"=>"\xe4","\xd1\x85"=>"\xe5","\xd1\x86"=>"\xe6","\xd1\x87"=>"\xe7",
+    "\xd1\x88"=>"\xe8","\xd1\x89"=>"\xe9","\xd1\x8a"=>"\xea","\xd1\x8b"=>"\xeb","\xd1\x8c"=>"\xec","\xd1\x8d"=>"\xed","\xd1\x8e"=>"\xee","\xd1\x8f"=>"\xef",
+    "\xe2\x84\x96"=>"\xf0","\xd1\x91"=>"\xf1","\xd1\x92"=>"\xf2","\xd1\x93"=>"\xf3","\xd1\x94"=>"\xf4","\xd1\x95"=>"\xf5","\xd1\x96"=>"\xf6","\xd1\x97"=>"\xf7",
+    "\xd1\x98"=>"\xf8","\xd1\x99"=>"\xf9","\xd1\x9a"=>"\xfa","\xd1\x9b"=>"\xfb","\xd1\x9c"=>"\xfc","\xc2\xa7"=>"\xfd","\xd1\x9e"=>"\xfe","\xd1\x9f"=>"\xff"
+);
+global $iso_8859_6_to_utf8;
+$iso_8859_6_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa4"=>"\xc2\xa4","\xac"=>"\xd8\x8c","\xad"=>"\xc2\xad","\xbb"=>"\xd8\x9b","\xbf"=>"\xd8\x9f","\xc1"=>"\xd8\xa1","\xc2"=>"\xd8\xa2",
+    "\xc3"=>"\xd8\xa3","\xc4"=>"\xd8\xa4","\xc5"=>"\xd8\xa5","\xc6"=>"\xd8\xa6","\xc7"=>"\xd8\xa7","\xc8"=>"\xd8\xa8","\xc9"=>"\xd8\xa9","\xca"=>"\xd8\xaa",
+    "\xcb"=>"\xd8\xab","\xcc"=>"\xd8\xac","\xcd"=>"\xd8\xad","\xce"=>"\xd8\xae","\xcf"=>"\xd8\xaf","\xd0"=>"\xd8\xb0","\xd1"=>"\xd8\xb1","\xd2"=>"\xd8\xb2",
+    "\xd3"=>"\xd8\xb3","\xd4"=>"\xd8\xb4","\xd5"=>"\xd8\xb5","\xd6"=>"\xd8\xb6","\xd7"=>"\xd8\xb7","\xd8"=>"\xd8\xb8","\xd9"=>"\xd8\xb9","\xda"=>"\xd8\xba",
+    "\xe0"=>"\xd9\x80","\xe1"=>"\xd9\x81","\xe2"=>"\xd9\x82","\xe3"=>"\xd9\x83","\xe4"=>"\xd9\x84","\xe5"=>"\xd9\x85","\xe6"=>"\xd9\x86","\xe7"=>"\xd9\x87",
+    "\xe8"=>"\xd9\x88","\xe9"=>"\xd9\x89","\xea"=>"\xd9\x8a","\xeb"=>"\xd9\x8b","\xec"=>"\xd9\x8c","\xed"=>"\xd9\x8d","\xee"=>"\xd9\x8e","\xef"=>"\xd9\x8f",
+    "\xf0"=>"\xd9\x90","\xf1"=>"\xd9\x91","\xf2"=>"\xd9\x92"
+);
+global $utf8_to_iso_8859_6;
+$utf8_to_iso_8859_6 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc2\xa4"=>"\xa4","\xd8\x8c"=>"\xac","\xc2\xad"=>"\xad","\xd8\x9b"=>"\xbb","\xd8\x9f"=>"\xbf","\xd8\xa1"=>"\xc1","\xd8\xa2"=>"\xc2",
+    "\xd8\xa3"=>"\xc3","\xd8\xa4"=>"\xc4","\xd8\xa5"=>"\xc5","\xd8\xa6"=>"\xc6","\xd8\xa7"=>"\xc7","\xd8\xa8"=>"\xc8","\xd8\xa9"=>"\xc9","\xd8\xaa"=>"\xca",
+    "\xd8\xab"=>"\xcb","\xd8\xac"=>"\xcc","\xd8\xad"=>"\xcd","\xd8\xae"=>"\xce","\xd8\xaf"=>"\xcf","\xd8\xb0"=>"\xd0","\xd8\xb1"=>"\xd1","\xd8\xb2"=>"\xd2",
+    "\xd8\xb3"=>"\xd3","\xd8\xb4"=>"\xd4","\xd8\xb5"=>"\xd5","\xd8\xb6"=>"\xd6","\xd8\xb7"=>"\xd7","\xd8\xb8"=>"\xd8","\xd8\xb9"=>"\xd9","\xd8\xba"=>"\xda",
+    "\xd9\x80"=>"\xe0","\xd9\x81"=>"\xe1","\xd9\x82"=>"\xe2","\xd9\x83"=>"\xe3","\xd9\x84"=>"\xe4","\xd9\x85"=>"\xe5","\xd9\x86"=>"\xe6","\xd9\x87"=>"\xe7",
+    "\xd9\x88"=>"\xe8","\xd9\x89"=>"\xe9","\xd9\x8a"=>"\xea","\xd9\x8b"=>"\xeb","\xd9\x8c"=>"\xec","\xd9\x8d"=>"\xed","\xd9\x8e"=>"\xee","\xd9\x8f"=>"\xef",
+    "\xd9\x90"=>"\xf0","\xd9\x91"=>"\xf1","\xd9\x92"=>"\xf2"
+);
+global $iso_8859_7_to_utf8;
+$iso_8859_7_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xe2\x80\x98","\xa2"=>"\xe2\x80\x99","\xa3"=>"\xc2\xa3","\xa6"=>"\xc2\xa6","\xa7"=>"\xc2\xa7","\xa8"=>"\xc2\xa8","\xa9"=>"\xc2\xa9",
+    "\xab"=>"\xc2\xab","\xac"=>"\xc2\xac","\xad"=>"\xc2\xad","\xaf"=>"\xe2\x80\x95","\xb0"=>"\xc2\xb0","\xb1"=>"\xc2\xb1","\xb2"=>"\xc2\xb2","\xb3"=>"\xc2\xb3",
+    "\xb4"=>"\xce\x84","\xb5"=>"\xce\x85","\xb6"=>"\xce\x86","\xb7"=>"\xc2\xb7","\xb8"=>"\xce\x88","\xb9"=>"\xce\x89","\xba"=>"\xce\x8a","\xbb"=>"\xc2\xbb",
+    "\xbc"=>"\xce\x8c","\xbd"=>"\xc2\xbd","\xbe"=>"\xce\x8e","\xbf"=>"\xce\x8f","\xc0"=>"\xce\x90","\xc1"=>"\xce\x91","\xc2"=>"\xce\x92","\xc3"=>"\xce\x93",
+    "\xc4"=>"\xce\x94","\xc5"=>"\xce\x95","\xc6"=>"\xce\x96","\xc7"=>"\xce\x97","\xc8"=>"\xce\x98","\xc9"=>"\xce\x99","\xca"=>"\xce\x9a","\xcb"=>"\xce\x9b",
+    "\xcc"=>"\xce\x9c","\xcd"=>"\xce\x9d","\xce"=>"\xce\x9e","\xcf"=>"\xce\x9f","\xd0"=>"\xce\xa0","\xd1"=>"\xce\xa1","\xd3"=>"\xce\xa3","\xd4"=>"\xce\xa4",
+    "\xd5"=>"\xce\xa5","\xd6"=>"\xce\xa6","\xd7"=>"\xce\xa7","\xd8"=>"\xce\xa8","\xd9"=>"\xce\xa9","\xda"=>"\xce\xaa","\xdb"=>"\xce\xab","\xdc"=>"\xce\xac",
+    "\xdd"=>"\xce\xad","\xde"=>"\xce\xae","\xdf"=>"\xce\xaf","\xe0"=>"\xce\xb0","\xe1"=>"\xce\xb1","\xe2"=>"\xce\xb2","\xe3"=>"\xce\xb3","\xe4"=>"\xce\xb4",
+    "\xe5"=>"\xce\xb5","\xe6"=>"\xce\xb6","\xe7"=>"\xce\xb7","\xe8"=>"\xce\xb8","\xe9"=>"\xce\xb9","\xea"=>"\xce\xba","\xeb"=>"\xce\xbb","\xec"=>"\xce\xbc",
+    "\xed"=>"\xce\xbd","\xee"=>"\xce\xbe","\xef"=>"\xce\xbf","\xf0"=>"\xcf\x80","\xf1"=>"\xcf\x81","\xf2"=>"\xcf\x82","\xf3"=>"\xcf\x83","\xf4"=>"\xcf\x84",
+    "\xf5"=>"\xcf\x85","\xf6"=>"\xcf\x86","\xf7"=>"\xcf\x87","\xf8"=>"\xcf\x88","\xf9"=>"\xcf\x89","\xfa"=>"\xcf\x8a","\xfb"=>"\xcf\x8b","\xfc"=>"\xcf\x8c",
+    "\xfd"=>"\xcf\x8d","\xfe"=>"\xcf\x8e"
+);
+global $utf8_to_iso_8859_7;
+$utf8_to_iso_8859_7 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xe2\x80\x98"=>"\xa1","\xe2\x80\x99"=>"\xa2","\xc2\xa3"=>"\xa3","\xc2\xa6"=>"\xa6","\xc2\xa7"=>"\xa7","\xc2\xa8"=>"\xa8","\xc2\xa9"=>"\xa9",
+    "\xc2\xab"=>"\xab","\xc2\xac"=>"\xac","\xc2\xad"=>"\xad","\xe2\x80\x95"=>"\xaf","\xc2\xb0"=>"\xb0","\xc2\xb1"=>"\xb1","\xc2\xb2"=>"\xb2","\xc2\xb3"=>"\xb3",
+    "\xce\x84"=>"\xb4","\xce\x85"=>"\xb5","\xce\x86"=>"\xb6","\xc2\xb7"=>"\xb7","\xce\x88"=>"\xb8","\xce\x89"=>"\xb9","\xce\x8a"=>"\xba","\xc2\xbb"=>"\xbb",
+    "\xce\x8c"=>"\xbc","\xc2\xbd"=>"\xbd","\xce\x8e"=>"\xbe","\xce\x8f"=>"\xbf","\xce\x90"=>"\xc0","\xce\x91"=>"\xc1","\xce\x92"=>"\xc2","\xce\x93"=>"\xc3",
+    "\xce\x94"=>"\xc4","\xce\x95"=>"\xc5","\xce\x96"=>"\xc6","\xce\x97"=>"\xc7","\xce\x98"=>"\xc8","\xce\x99"=>"\xc9","\xce\x9a"=>"\xca","\xce\x9b"=>"\xcb",
+    "\xce\x9c"=>"\xcc","\xce\x9d"=>"\xcd","\xce\x9e"=>"\xce","\xce\x9f"=>"\xcf","\xce\xa0"=>"\xd0","\xce\xa1"=>"\xd1","\xce\xa3"=>"\xd3","\xce\xa4"=>"\xd4",
+    "\xce\xa5"=>"\xd5","\xce\xa6"=>"\xd6","\xce\xa7"=>"\xd7","\xce\xa8"=>"\xd8","\xce\xa9"=>"\xd9","\xce\xaa"=>"\xda","\xce\xab"=>"\xdb","\xce\xac"=>"\xdc",
+    "\xce\xad"=>"\xdd","\xce\xae"=>"\xde","\xce\xaf"=>"\xdf","\xce\xb0"=>"\xe0","\xce\xb1"=>"\xe1","\xce\xb2"=>"\xe2","\xce\xb3"=>"\xe3","\xce\xb4"=>"\xe4",
+    "\xce\xb5"=>"\xe5","\xce\xb6"=>"\xe6","\xce\xb7"=>"\xe7","\xce\xb8"=>"\xe8","\xce\xb9"=>"\xe9","\xce\xba"=>"\xea","\xce\xbb"=>"\xeb","\xce\xbc"=>"\xec",
+    "\xce\xbd"=>"\xed","\xce\xbe"=>"\xee","\xce\xbf"=>"\xef","\xcf\x80"=>"\xf0","\xcf\x81"=>"\xf1","\xcf\x82"=>"\xf2","\xcf\x83"=>"\xf3","\xcf\x84"=>"\xf4",
+    "\xcf\x85"=>"\xf5","\xcf\x86"=>"\xf6","\xcf\x87"=>"\xf7","\xcf\x88"=>"\xf8","\xcf\x89"=>"\xf9","\xcf\x8a"=>"\xfa","\xcf\x8b"=>"\xfb","\xcf\x8c"=>"\xfc",
+    "\xcf\x8d"=>"\xfd","\xcf\x8e"=>"\xfe"
+);
+global $iso_8859_8_to_utf8;
+$iso_8859_8_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa2"=>"\xc2\xa2","\xa3"=>"\xc2\xa3","\xa4"=>"\xc2\xa4","\xa5"=>"\xc2\xa5","\xa6"=>"\xc2\xa6","\xa7"=>"\xc2\xa7","\xa8"=>"\xc2\xa8",
+    "\xa9"=>"\xc2\xa9","\xaa"=>"\xc3\x97","\xab"=>"\xc2\xab","\xac"=>"\xc2\xac","\xad"=>"\xc2\xad","\xae"=>"\xc2\xae","\xaf"=>"\xc2\xaf","\xb0"=>"\xc2\xb0",
+    "\xb1"=>"\xc2\xb1","\xb2"=>"\xc2\xb2","\xb3"=>"\xc2\xb3","\xb4"=>"\xc2\xb4","\xb5"=>"\xc2\xb5","\xb6"=>"\xc2\xb6","\xb7"=>"\xc2\xb7","\xb8"=>"\xc2\xb8",
+    "\xb9"=>"\xc2\xb9","\xba"=>"\xc3\xb7","\xbb"=>"\xc2\xbb","\xbc"=>"\xc2\xbc","\xbd"=>"\xc2\xbd","\xbe"=>"\xc2\xbe","\xdf"=>"\xe2\x80\x97","\xe0"=>"\xd7\x90",
+    "\xe1"=>"\xd7\x91","\xe2"=>"\xd7\x92","\xe3"=>"\xd7\x93","\xe4"=>"\xd7\x94","\xe5"=>"\xd7\x95","\xe6"=>"\xd7\x96","\xe7"=>"\xd7\x97","\xe8"=>"\xd7\x98",
+    "\xe9"=>"\xd7\x99","\xea"=>"\xd7\x9a","\xeb"=>"\xd7\x9b","\xec"=>"\xd7\x9c","\xed"=>"\xd7\x9d","\xee"=>"\xd7\x9e","\xef"=>"\xd7\x9f","\xf0"=>"\xd7\xa0",
+    "\xf1"=>"\xd7\xa1","\xf2"=>"\xd7\xa2","\xf3"=>"\xd7\xa3","\xf4"=>"\xd7\xa4","\xf5"=>"\xd7\xa5","\xf6"=>"\xd7\xa6","\xf7"=>"\xd7\xa7","\xf8"=>"\xd7\xa8",
+    "\xf9"=>"\xd7\xa9","\xfa"=>"\xd7\xaa","\xfd"=>"\xe2\x80\x8e","\xfe"=>"\xe2\x80\x8f"
+);
+global $utf8_to_iso_8859_8;
+$utf8_to_iso_8859_8 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc2\xa2"=>"\xa2","\xc2\xa3"=>"\xa3","\xc2\xa4"=>"\xa4","\xc2\xa5"=>"\xa5","\xc2\xa6"=>"\xa6","\xc2\xa7"=>"\xa7","\xc2\xa8"=>"\xa8",
+    "\xc2\xa9"=>"\xa9","\xc3\x97"=>"\xaa","\xc2\xab"=>"\xab","\xc2\xac"=>"\xac","\xc2\xad"=>"\xad","\xc2\xae"=>"\xae","\xc2\xaf"=>"\xaf","\xc2\xb0"=>"\xb0",
+    "\xc2\xb1"=>"\xb1","\xc2\xb2"=>"\xb2","\xc2\xb3"=>"\xb3","\xc2\xb4"=>"\xb4","\xc2\xb5"=>"\xb5","\xc2\xb6"=>"\xb6","\xc2\xb7"=>"\xb7","\xc2\xb8"=>"\xb8",
+    "\xc2\xb9"=>"\xb9","\xc3\xb7"=>"\xba","\xc2\xbb"=>"\xbb","\xc2\xbc"=>"\xbc","\xc2\xbd"=>"\xbd","\xc2\xbe"=>"\xbe","\xe2\x80\x97"=>"\xdf","\xd7\x90"=>"\xe0",
+    "\xd7\x91"=>"\xe1","\xd7\x92"=>"\xe2","\xd7\x93"=>"\xe3","\xd7\x94"=>"\xe4","\xd7\x95"=>"\xe5","\xd7\x96"=>"\xe6","\xd7\x97"=>"\xe7","\xd7\x98"=>"\xe8",
+    "\xd7\x99"=>"\xe9","\xd7\x9a"=>"\xea","\xd7\x9b"=>"\xeb","\xd7\x9c"=>"\xec","\xd7\x9d"=>"\xed","\xd7\x9e"=>"\xee","\xd7\x9f"=>"\xef","\xd7\xa0"=>"\xf0",
+    "\xd7\xa1"=>"\xf1","\xd7\xa2"=>"\xf2","\xd7\xa3"=>"\xf3","\xd7\xa4"=>"\xf4","\xd7\xa5"=>"\xf5","\xd7\xa6"=>"\xf6","\xd7\xa7"=>"\xf7","\xd7\xa8"=>"\xf8",
+    "\xd7\xa9"=>"\xf9","\xd7\xaa"=>"\xfa","\xe2\x80\x8e"=>"\xfd","\xe2\x80\x8f"=>"\xfe"
+);
+global $iso_8859_9_to_utf8;
+$iso_8859_9_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xc2\xa1","\xa2"=>"\xc2\xa2","\xa3"=>"\xc2\xa3","\xa4"=>"\xc2\xa4","\xa5"=>"\xc2\xa5","\xa6"=>"\xc2\xa6","\xa7"=>"\xc2\xa7",
+    "\xa8"=>"\xc2\xa8","\xa9"=>"\xc2\xa9","\xaa"=>"\xc2\xaa","\xab"=>"\xc2\xab","\xac"=>"\xc2\xac","\xad"=>"\xc2\xad","\xae"=>"\xc2\xae","\xaf"=>"\xc2\xaf",
+    "\xb0"=>"\xc2\xb0","\xb1"=>"\xc2\xb1","\xb2"=>"\xc2\xb2","\xb3"=>"\xc2\xb3","\xb4"=>"\xc2\xb4","\xb5"=>"\xc2\xb5","\xb6"=>"\xc2\xb6","\xb7"=>"\xc2\xb7",
+    "\xb8"=>"\xc2\xb8","\xb9"=>"\xc2\xb9","\xba"=>"\xc2\xba","\xbb"=>"\xc2\xbb","\xbc"=>"\xc2\xbc","\xbd"=>"\xc2\xbd","\xbe"=>"\xc2\xbe","\xbf"=>"\xc2\xbf",
+    "\xc0"=>"\xc3\x80","\xc1"=>"\xc3\x81","\xc2"=>"\xc3\x82","\xc3"=>"\xc3\x83","\xc4"=>"\xc3\x84","\xc5"=>"\xc3\x85","\xc6"=>"\xc3\x86","\xc7"=>"\xc3\x87",
+    "\xc8"=>"\xc3\x88","\xc9"=>"\xc3\x89","\xca"=>"\xc3\x8a","\xcb"=>"\xc3\x8b","\xcc"=>"\xc3\x8c","\xcd"=>"\xc3\x8d","\xce"=>"\xc3\x8e","\xcf"=>"\xc3\x8f",
+    "\xd0"=>"\xc4\x9e","\xd1"=>"\xc3\x91","\xd2"=>"\xc3\x92","\xd3"=>"\xc3\x93","\xd4"=>"\xc3\x94","\xd5"=>"\xc3\x95","\xd6"=>"\xc3\x96","\xd7"=>"\xc3\x97",
+    "\xd8"=>"\xc3\x98","\xd9"=>"\xc3\x99","\xda"=>"\xc3\x9a","\xdb"=>"\xc3\x9b","\xdc"=>"\xc3\x9c","\xdd"=>"\xc4\xb0","\xde"=>"\xc5\x9e","\xdf"=>"\xc3\x9f",
+    "\xe0"=>"\xc3\xa0","\xe1"=>"\xc3\xa1","\xe2"=>"\xc3\xa2","\xe3"=>"\xc3\xa3","\xe4"=>"\xc3\xa4","\xe5"=>"\xc3\xa5","\xe6"=>"\xc3\xa6","\xe7"=>"\xc3\xa7",
+    "\xe8"=>"\xc3\xa8","\xe9"=>"\xc3\xa9","\xea"=>"\xc3\xaa","\xeb"=>"\xc3\xab","\xec"=>"\xc3\xac","\xed"=>"\xc3\xad","\xee"=>"\xc3\xae","\xef"=>"\xc3\xaf",
+    "\xf0"=>"\xc4\x9f","\xf1"=>"\xc3\xb1","\xf2"=>"\xc3\xb2","\xf3"=>"\xc3\xb3","\xf4"=>"\xc3\xb4","\xf5"=>"\xc3\xb5","\xf6"=>"\xc3\xb6","\xf7"=>"\xc3\xb7",
+    "\xf8"=>"\xc3\xb8","\xf9"=>"\xc3\xb9","\xfa"=>"\xc3\xba","\xfb"=>"\xc3\xbb","\xfc"=>"\xc3\xbc","\xfd"=>"\xc4\xb1","\xfe"=>"\xc5\x9f","\xff"=>"\xc3\xbf"
+);
+global $utf8_to_iso_8859_9;
+$utf8_to_iso_8859_9 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc2\xa1"=>"\xa1","\xc2\xa2"=>"\xa2","\xc2\xa3"=>"\xa3","\xc2\xa4"=>"\xa4","\xc2\xa5"=>"\xa5","\xc2\xa6"=>"\xa6","\xc2\xa7"=>"\xa7",
+    "\xc2\xa8"=>"\xa8","\xc2\xa9"=>"\xa9","\xc2\xaa"=>"\xaa","\xc2\xab"=>"\xab","\xc2\xac"=>"\xac","\xc2\xad"=>"\xad","\xc2\xae"=>"\xae","\xc2\xaf"=>"\xaf",
+    "\xc2\xb0"=>"\xb0","\xc2\xb1"=>"\xb1","\xc2\xb2"=>"\xb2","\xc2\xb3"=>"\xb3","\xc2\xb4"=>"\xb4","\xc2\xb5"=>"\xb5","\xc2\xb6"=>"\xb6","\xc2\xb7"=>"\xb7",
+    "\xc2\xb8"=>"\xb8","\xc2\xb9"=>"\xb9","\xc2\xba"=>"\xba","\xc2\xbb"=>"\xbb","\xc2\xbc"=>"\xbc","\xc2\xbd"=>"\xbd","\xc2\xbe"=>"\xbe","\xc2\xbf"=>"\xbf",
+    "\xc3\x80"=>"\xc0","\xc3\x81"=>"\xc1","\xc3\x82"=>"\xc2","\xc3\x83"=>"\xc3","\xc3\x84"=>"\xc4","\xc3\x85"=>"\xc5","\xc3\x86"=>"\xc6","\xc3\x87"=>"\xc7",
+    "\xc3\x88"=>"\xc8","\xc3\x89"=>"\xc9","\xc3\x8a"=>"\xca","\xc3\x8b"=>"\xcb","\xc3\x8c"=>"\xcc","\xc3\x8d"=>"\xcd","\xc3\x8e"=>"\xce","\xc3\x8f"=>"\xcf",
+    "\xc4\x9e"=>"\xd0","\xc3\x91"=>"\xd1","\xc3\x92"=>"\xd2","\xc3\x93"=>"\xd3","\xc3\x94"=>"\xd4","\xc3\x95"=>"\xd5","\xc3\x96"=>"\xd6","\xc3\x97"=>"\xd7",
+    "\xc3\x98"=>"\xd8","\xc3\x99"=>"\xd9","\xc3\x9a"=>"\xda","\xc3\x9b"=>"\xdb","\xc3\x9c"=>"\xdc","\xc4\xb0"=>"\xdd","\xc5\x9e"=>"\xde","\xc3\x9f"=>"\xdf",
+    "\xc3\xa0"=>"\xe0","\xc3\xa1"=>"\xe1","\xc3\xa2"=>"\xe2","\xc3\xa3"=>"\xe3","\xc3\xa4"=>"\xe4","\xc3\xa5"=>"\xe5","\xc3\xa6"=>"\xe6","\xc3\xa7"=>"\xe7",
+    "\xc3\xa8"=>"\xe8","\xc3\xa9"=>"\xe9","\xc3\xaa"=>"\xea","\xc3\xab"=>"\xeb","\xc3\xac"=>"\xec","\xc3\xad"=>"\xed","\xc3\xae"=>"\xee","\xc3\xaf"=>"\xef",
+    "\xc4\x9f"=>"\xf0","\xc3\xb1"=>"\xf1","\xc3\xb2"=>"\xf2","\xc3\xb3"=>"\xf3","\xc3\xb4"=>"\xf4","\xc3\xb5"=>"\xf5","\xc3\xb6"=>"\xf6","\xc3\xb7"=>"\xf7",
+    "\xc3\xb8"=>"\xf8","\xc3\xb9"=>"\xf9","\xc3\xba"=>"\xfa","\xc3\xbb"=>"\xfb","\xc3\xbc"=>"\xfc","\xc4\xb1"=>"\xfd","\xc5\x9f"=>"\xfe","\xc3\xbf"=>"\xff"
+);
+global $iso_8859_10_to_utf8;
+$iso_8859_10_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xc4\x84","\xa2"=>"\xc4\x92","\xa3"=>"\xc4\xa2","\xa4"=>"\xc4\xaa","\xa5"=>"\xc4\xa8","\xa6"=>"\xc4\xb6","\xa7"=>"\xc2\xa7",
+    "\xa8"=>"\xc4\xbb","\xa9"=>"\xc4\x90","\xaa"=>"\xc5\xa0","\xab"=>"\xc5\xa6","\xac"=>"\xc5\xbd","\xad"=>"\xc2\xad","\xae"=>"\xc5\xaa","\xaf"=>"\xc5\x8a",
+    "\xb0"=>"\xc2\xb0","\xb1"=>"\xc4\x85","\xb2"=>"\xc4\x93","\xb3"=>"\xc4\xa3","\xb4"=>"\xc4\xab","\xb5"=>"\xc4\xa9","\xb6"=>"\xc4\xb7","\xb7"=>"\xc2\xb7",
+    "\xb8"=>"\xc4\xbc","\xb9"=>"\xc4\x91","\xba"=>"\xc5\xa1","\xbb"=>"\xc5\xa7","\xbc"=>"\xc5\xbe","\xbd"=>"\xe2\x80\x95","\xbe"=>"\xc5\xab","\xbf"=>"\xc5\x8b",
+    "\xc0"=>"\xc4\x80","\xc1"=>"\xc3\x81","\xc2"=>"\xc3\x82","\xc3"=>"\xc3\x83","\xc4"=>"\xc3\x84","\xc5"=>"\xc3\x85","\xc6"=>"\xc3\x86","\xc7"=>"\xc4\xae",
+    "\xc8"=>"\xc4\x8c","\xc9"=>"\xc3\x89","\xca"=>"\xc4\x98","\xcb"=>"\xc3\x8b","\xcc"=>"\xc4\x96","\xcd"=>"\xc3\x8d","\xce"=>"\xc3\x8e","\xcf"=>"\xc3\x8f",
+    "\xd0"=>"\xc3\x90","\xd1"=>"\xc5\x85","\xd2"=>"\xc5\x8c","\xd3"=>"\xc3\x93","\xd4"=>"\xc3\x94","\xd5"=>"\xc3\x95","\xd6"=>"\xc3\x96","\xd7"=>"\xc5\xa8",
+    "\xd8"=>"\xc3\x98","\xd9"=>"\xc5\xb2","\xda"=>"\xc3\x9a","\xdb"=>"\xc3\x9b","\xdc"=>"\xc3\x9c","\xdd"=>"\xc3\x9d","\xde"=>"\xc3\x9e","\xdf"=>"\xc3\x9f",
+    "\xe0"=>"\xc4\x81","\xe1"=>"\xc3\xa1","\xe2"=>"\xc3\xa2","\xe3"=>"\xc3\xa3","\xe4"=>"\xc3\xa4","\xe5"=>"\xc3\xa5","\xe6"=>"\xc3\xa6","\xe7"=>"\xc4\xaf",
+    "\xe8"=>"\xc4\x8d","\xe9"=>"\xc3\xa9","\xea"=>"\xc4\x99","\xeb"=>"\xc3\xab","\xec"=>"\xc4\x97","\xed"=>"\xc3\xad","\xee"=>"\xc3\xae","\xef"=>"\xc3\xaf",
+    "\xf0"=>"\xc3\xb0","\xf1"=>"\xc5\x86","\xf2"=>"\xc5\x8d","\xf3"=>"\xc3\xb3","\xf4"=>"\xc3\xb4","\xf5"=>"\xc3\xb5","\xf6"=>"\xc3\xb6","\xf7"=>"\xc5\xa9",
+    "\xf8"=>"\xc3\xb8","\xf9"=>"\xc5\xb3","\xfa"=>"\xc3\xba","\xfb"=>"\xc3\xbb","\xfc"=>"\xc3\xbc","\xfd"=>"\xc3\xbd","\xfe"=>"\xc3\xbe","\xff"=>"\xc4\xb8"
+);
+global $utf8_to_iso_8859_10;
+$utf8_to_iso_8859_10 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xc4\x84"=>"\xa1","\xc4\x92"=>"\xa2","\xc4\xa2"=>"\xa3","\xc4\xaa"=>"\xa4","\xc4\xa8"=>"\xa5","\xc4\xb6"=>"\xa6","\xc2\xa7"=>"\xa7",
+    "\xc4\xbb"=>"\xa8","\xc4\x90"=>"\xa9","\xc5\xa0"=>"\xaa","\xc5\xa6"=>"\xab","\xc5\xbd"=>"\xac","\xc2\xad"=>"\xad","\xc5\xaa"=>"\xae","\xc5\x8a"=>"\xaf",
+    "\xc2\xb0"=>"\xb0","\xc4\x85"=>"\xb1","\xc4\x93"=>"\xb2","\xc4\xa3"=>"\xb3","\xc4\xab"=>"\xb4","\xc4\xa9"=>"\xb5","\xc4\xb7"=>"\xb6","\xc2\xb7"=>"\xb7",
+    "\xc4\xbc"=>"\xb8","\xc4\x91"=>"\xb9","\xc5\xa1"=>"\xba","\xc5\xa7"=>"\xbb","\xc5\xbe"=>"\xbc","\xe2\x80\x95"=>"\xbd","\xc5\xab"=>"\xbe","\xc5\x8b"=>"\xbf",
+    "\xc4\x80"=>"\xc0","\xc3\x81"=>"\xc1","\xc3\x82"=>"\xc2","\xc3\x83"=>"\xc3","\xc3\x84"=>"\xc4","\xc3\x85"=>"\xc5","\xc3\x86"=>"\xc6","\xc4\xae"=>"\xc7",
+    "\xc4\x8c"=>"\xc8","\xc3\x89"=>"\xc9","\xc4\x98"=>"\xca","\xc3\x8b"=>"\xcb","\xc4\x96"=>"\xcc","\xc3\x8d"=>"\xcd","\xc3\x8e"=>"\xce","\xc3\x8f"=>"\xcf",
+    "\xc3\x90"=>"\xd0","\xc5\x85"=>"\xd1","\xc5\x8c"=>"\xd2","\xc3\x93"=>"\xd3","\xc3\x94"=>"\xd4","\xc3\x95"=>"\xd5","\xc3\x96"=>"\xd6","\xc5\xa8"=>"\xd7",
+    "\xc3\x98"=>"\xd8","\xc5\xb2"=>"\xd9","\xc3\x9a"=>"\xda","\xc3\x9b"=>"\xdb","\xc3\x9c"=>"\xdc","\xc3\x9d"=>"\xdd","\xc3\x9e"=>"\xde","\xc3\x9f"=>"\xdf",
+    "\xc4\x81"=>"\xe0","\xc3\xa1"=>"\xe1","\xc3\xa2"=>"\xe2","\xc3\xa3"=>"\xe3","\xc3\xa4"=>"\xe4","\xc3\xa5"=>"\xe5","\xc3\xa6"=>"\xe6","\xc4\xaf"=>"\xe7",
+    "\xc4\x8d"=>"\xe8","\xc3\xa9"=>"\xe9","\xc4\x99"=>"\xea","\xc3\xab"=>"\xeb","\xc4\x97"=>"\xec","\xc3\xad"=>"\xed","\xc3\xae"=>"\xee","\xc3\xaf"=>"\xef",
+    "\xc3\xb0"=>"\xf0","\xc5\x86"=>"\xf1","\xc5\x8d"=>"\xf2","\xc3\xb3"=>"\xf3","\xc3\xb4"=>"\xf4","\xc3\xb5"=>"\xf5","\xc3\xb6"=>"\xf6","\xc5\xa9"=>"\xf7",
+    "\xc3\xb8"=>"\xf8","\xc5\xb3"=>"\xf9","\xc3\xba"=>"\xfa","\xc3\xbb"=>"\xfb","\xc3\xbc"=>"\xfc","\xc3\xbd"=>"\xfd","\xc3\xbe"=>"\xfe","\xc4\xb8"=>"\xff"
+);
+global $iso_8859_11_to_utf8;
+$iso_8859_11_to_utf8 = array(
+    "\x80"=>"\xc2\x80","\x81"=>"\xc2\x81","\x82"=>"\xc2\x82","\x83"=>"\xc2\x83","\x84"=>"\xc2\x84","\x85"=>"\xc2\x85","\x86"=>"\xc2\x86","\x87"=>"\xc2\x87",
+    "\x88"=>"\xc2\x88","\x89"=>"\xc2\x89","\x8a"=>"\xc2\x8a","\x8b"=>"\xc2\x8b","\x8c"=>"\xc2\x8c","\x8d"=>"\xc2\x8d","\x8e"=>"\xc2\x8e","\x8f"=>"\xc2\x8f",
+    "\x90"=>"\xc2\x90","\x91"=>"\xc2\x91","\x92"=>"\xc2\x92","\x93"=>"\xc2\x93","\x94"=>"\xc2\x94","\x95"=>"\xc2\x95","\x96"=>"\xc2\x96","\x97"=>"\xc2\x97",
+    "\x98"=>"\xc2\x98","\x99"=>"\xc2\x99","\x9a"=>"\xc2\x9a","\x9b"=>"\xc2\x9b","\x9c"=>"\xc2\x9c","\x9d"=>"\xc2\x9d","\x9e"=>"\xc2\x9e","\x9f"=>"\xc2\x9f",
+    "\xa0"=>"\xc2\xa0","\xa1"=>"\xe0\xb8\x81","\xa2"=>"\xe0\xb8\x82","\xa3"=>"\xe0\xb8\x83","\xa4"=>"\xe0\xb8\x84","\xa5"=>"\xe0\xb8\x85","\xa6"=>"\xe0\xb8\x86","\xa7"=>"\xe0\xb8\x87",
+    "\xa8"=>"\xe0\xb8\x88","\xa9"=>"\xe0\xb8\x89","\xaa"=>"\xe0\xb8\x8a","\xab"=>"\xe0\xb8\x8b","\xac"=>"\xe0\xb8\x8c","\xad"=>"\xe0\xb8\x8d","\xae"=>"\xe0\xb8\x8e","\xaf"=>"\xe0\xb8\x8f",
+    "\xb0"=>"\xe0\xb8\x90","\xb1"=>"\xe0\xb8\x91","\xb2"=>"\xe0\xb8\x92","\xb3"=>"\xe0\xb8\x93","\xb4"=>"\xe0\xb8\x94","\xb5"=>"\xe0\xb8\x95","\xb6"=>"\xe0\xb8\x96","\xb7"=>"\xe0\xb8\x97",
+    "\xb8"=>"\xe0\xb8\x98","\xb9"=>"\xe0\xb8\x99","\xba"=>"\xe0\xb8\x9a","\xbb"=>"\xe0\xb8\x9b","\xbc"=>"\xe0\xb8\x9c","\xbd"=>"\xe0\xb8\x9d","\xbe"=>"\xe0\xb8\x9e","\xbf"=>"\xe0\xb8\x9f",
+    "\xc0"=>"\xe0\xb8\xa0","\xc1"=>"\xe0\xb8\xa1","\xc2"=>"\xe0\xb8\xa2","\xc3"=>"\xe0\xb8\xa3","\xc4"=>"\xe0\xb8\xa4","\xc5"=>"\xe0\xb8\xa5","\xc6"=>"\xe0\xb8\xa6","\xc7"=>"\xe0\xb8\xa7",
+    "\xc8"=>"\xe0\xb8\xa8","\xc9"=>"\xe0\xb8\xa9","\xca"=>"\xe0\xb8\xaa","\xcb"=>"\xe0\xb8\xab","\xcc"=>"\xe0\xb8\xac","\xcd"=>"\xe0\xb8\xad","\xce"=>"\xe0\xb8\xae","\xcf"=>"\xe0\xb8\xaf",
+    "\xd0"=>"\xe0\xb8\xb0","\xd1"=>"\xe0\xb8\xb1","\xd2"=>"\xe0\xb8\xb2","\xd3"=>"\xe0\xb8\xb3","\xd4"=>"\xe0\xb8\xb4","\xd5"=>"\xe0\xb8\xb5","\xd6"=>"\xe0\xb8\xb6","\xd7"=>"\xe0\xb8\xb7",
+    "\xd8"=>"\xe0\xb8\xb8","\xd9"=>"\xe0\xb8\xb9","\xda"=>"\xe0\xb8\xba","\xdf"=>"\xe0\xb8\xbf","\xe0"=>"\xe0\xb9\x80","\xe1"=>"\xe0\xb9\x81","\xe2"=>"\xe0\xb9\x82","\xe3"=>"\xe0\xb9\x83",
+    "\xe4"=>"\xe0\xb9\x84","\xe5"=>"\xe0\xb9\x85","\xe6"=>"\xe0\xb9\x86","\xe7"=>"\xe0\xb9\x87","\xe8"=>"\xe0\xb9\x88","\xe9"=>"\xe0\xb9\x89","\xea"=>"\xe0\xb9\x8a","\xeb"=>"\xe0\xb9\x8b",
+    "\xec"=>"\xe0\xb9\x8c","\xed"=>"\xe0\xb9\x8d","\xee"=>"\xe0\xb9\x8e","\xef"=>"\xe0\xb9\x8f","\xf0"=>"\xe0\xb9\x90","\xf1"=>"\xe0\xb9\x91","\xf2"=>"\xe0\xb9\x92","\xf3"=>"\xe0\xb9\x93",
+    "\xf4"=>"\xe0\xb9\x94","\xf5"=>"\xe0\xb9\x95","\xf6"=>"\xe0\xb9\x96","\xf7"=>"\xe0\xb9\x97","\xf8"=>"\xe0\xb9\x98","\xf9"=>"\xe0\xb9\x99","\xfa"=>"\xe0\xb9\x9a","\xfb"=>"\xe0\xb9\x9b"
+);
+global $utf8_to_iso_8859_11;
+$utf8_to_iso_8859_11 = array(
+    "\xc2\x80"=>"\x80","\xc2\x81"=>"\x81","\xc2\x82"=>"\x82","\xc2\x83"=>"\x83","\xc2\x84"=>"\x84","\xc2\x85"=>"\x85","\xc2\x86"=>"\x86","\xc2\x87"=>"\x87",
+    "\xc2\x88"=>"\x88","\xc2\x89"=>"\x89","\xc2\x8a"=>"\x8a","\xc2\x8b"=>"\x8b","\xc2\x8c"=>"\x8c","\xc2\x8d"=>"\x8d","\xc2\x8e"=>"\x8e","\xc2\x8f"=>"\x8f",
+    "\xc2\x90"=>"\x90","\xc2\x91"=>"\x91","\xc2\x92"=>"\x92","\xc2\x93"=>"\x93","\xc2\x94"=>"\x94","\xc2\x95"=>"\x95","\xc2\x96"=>"\x96","\xc2\x97"=>"\x97",
+    "\xc2\x98"=>"\x98","\xc2\x99"=>"\x99","\xc2\x9a"=>"\x9a","\xc2\x9b"=>"\x9b","\xc2\x9c"=>"\x9c","\xc2\x9d"=>"\x9d","\xc2\x9e"=>"\x9e","\xc2\x9f"=>"\x9f",
+    "\xc2\xa0"=>"\xa0","\xe0\xb8\x81"=>"\xa1","\xe0\xb8\x82"=>"\xa2","\xe0\xb8\x83"=>"\xa3","\xe0\xb8\x84"=>"\xa4","\xe0\xb8\x85"=>"\xa5","\xe0\xb8\x86"=>"\xa6","\xe0\xb8\x87"=>"\xa7",
+    "\xe0\xb8\x88"=>"\xa8","\xe0\xb8\x89"=>"\xa9","\xe0\xb8\x8a"=>"\xaa","\xe0\xb8\x8b"=>"\xab","\xe0\xb8\x8c"=>"\xac","\xe0\xb8\x8d"=>"\xad","\xe0\xb8\x8e"=>"\xae","\xe0\xb8\x8f"=>"\xaf",
+    "\xe0\xb8\x90"=>"\xb0","\xe0\xb8\x91"=>"\xb1","\xe0\xb8\x92"=>"\xb2","\xe0\xb8\x93"=>"\xb3","\xe0\xb8\x94"=>"\xb4","\xe0\xb8\x95"=>"\xb5","\xe0\xb8\x96"=>"\xb6","\xe0\xb8\x97"=>"\xb7",
+    "\xe0\xb8\x98"=>"\xb8","\xe0\xb8\x99"=>"\xb9","\xe0\xb8\x9a"=>"\xba","\xe0\xb8\x9b"=>"\xbb","\xe0\xb8\x9c"=>"\xbc","\xe0\xb8\x9d"=>"\xbd","\xe0\xb8\x9e"=>"\xbe","\xe0\xb8\x9f"=>"\xbf",
+    "\xe0\xb8\xa0"=>"\xc0","\xe0\xb8\xa1"=>"\xc1","\xe0\xb8\xa2"=>"\xc2","\xe0\xb8\xa3"=>"\xc3","\xe0\xb8\xa4"=>"\xc4","\xe0\xb8\xa5"=>"\xc5","\xe0\xb8\xa6"=>"\xc6","\xe0\xb8\xa7"=>"\xc7",
+    "\xe0\xb8\xa8"=>"\xc8","\xe0\xb8\xa9"=>"\xc9","\xe0\xb8\xaa"=>"\xca","\xe0\xb8\xab"=>"\xcb","\xe0\xb8\xac"=>"\xcc","\xe0\xb8\xad"=>"\xcd","\xe0\xb8\xae"=>"\xce","\xe0\xb8\xaf"=>"\xcf",
+    "\xe0\xb8\xb0"=>"\xd0","\xe0\xb8\xb1"=>"\xd1","\xe0\xb8\xb2"=>"\xd2","\xe0\xb8\xb3"=>"\xd3","\xe0\xb8\xb4"=>"\xd4","\xe0\xb8\xb5"=>"\xd5","\xe0\xb8\xb6"=>"\xd6","\xe0\xb8\xb7"=>"\xd7",
+    "\xe0\xb8\xb8"=>"\xd8","\xe0\xb8\xb9"=>"\xd9","\xe0\xb8\xba"=>"\xda","\xe0\xb8\xbf"=>"\xdf","\xe0\xb9\x80"=>"\xe0","\xe0\xb9\x81"=>"\xe1","\xe0\xb9\x82"=>"\xe2","\xe0\xb9\x83"=>"\xe3",
+    "\xe0\xb9\x84"=>"\xe4","\xe0\xb9\x85"=>"\xe5","\xe0\xb9\x86"=>"\xe6","\xe0\xb9\x87"=>"\xe7","\xe0\xb9\x88"=>"\xe8","\xe0\xb9\x89"=>"\xe9","\xe0\xb9\x8a"=>"\xea","\xe0\xb9\x8b"=>"\xeb",
+    "\xe0\xb9\x8c"=>"\xec","\xe0\xb9\x8d"=>"\xed","\xe0\xb9\x8e"=>"\xee","\xe0\xb9\x8f"=>"\xef","\xe0\xb9\x90"=>"\xf0","\xe0\xb9\x91"=>"\xf1","\xe0\xb9\x92"=>"\xf2","\xe0\xb9\x93"=>"\xf3",
+    "\xe0\xb9\x94"=>"\xf4","\xe0\xb9\x95"=>"\xf5","\xe0\xb9\x96"=>"\xf6","\xe0\xb9\x97"=>"\xf7","\xe0\xb9\x98"=>"\xf8","\xe0\xb9\x99"=>"\xf9","\xe0\xb9\x9a"=>"\xfa","\xe0\xb9\x9b"=>"\xfb"
+);
+
+// nicht enthalten &gt; &lt; &apos; &#039; &quot; &amp; &nbsp;
+global $named_entities;
+$named_entities=array(
+'&Aacute;','&aacute;','&Acirc;','&acirc;','&acute;','&AElig;','&aelig;','&Agrave;','&agrave;','&alefsym;',
+'&Alpha;','&alpha;','&and;','&ang;','&Aring;','&aring;','&asymp;','&Atilde;','&atilde;','&Auml;',
+'&auml;','&bdquo;','&Beta;','&beta;','&brvbar;','&bull;','&cap;','&Ccedil;','&ccedil;','&cedil;',
+'&cent;','&Chi;','&chi;','&circ;','&clubs;','&cong;','&copy;','&crarr;','&cup;','&curren;',
+'&Dagger;','&dagger;','&dArr;','&darr;','&deg;','&Delta;','&delta;','&diams;','&divide;','&Eacute;',
+'&eacute;','&Ecirc;','&ecirc;','&Egrave;','&egrave;','&empty;','&emsp;','&ensp;','&Epsilon;','&epsilon;',
+'&equiv;','&Eta;','&eta;','&ETH;','&eth;','&Euml;','&euml;','&euro;','&exist;','&fnof;',
+'&forall;','&frac12;','&frac14;','&frac34;','&frasl;','&Gamma;','&gamma;','&ge;','&hArr;','&harr;',
+'&hearts;','&hellip;','&Iacute;','&iacute;','&Icirc;','&icirc;','&iexcl;','&Igrave;','&igrave;','&image;',
+'&infin;','&int;','&Iota;','&iota;','&iquest;','&isin;','&Iuml;','&iuml;','&Kappa;','&kappa;',
+'&Lambda;','&lambda;','&lang;','&laquo;','&lArr;','&larr;','&lceil;','&ldquo;','&le;','&lfloor;',
+'&lowast;','&loz;','&lrm;','&lsaquo;','&lsquo;','&macr;','&mdash;','&micro;','&middot;','&minus;',
+'&Mu;','&mu;','&nabla;','&ndash;','&ne;','&ni;','&not;','&notin;','&nsub;','&Ntilde;',
+'&ntilde;','&Nu;','&nu;','&Oacute;','&oacute;','&Ocirc;','&ocirc;','&OElig;','&oelig;','&Ograve;',
+'&ograve;','&oline;','&Omega;','&omega;','&Omicron;','&omicron;','&oplus;','&or;','&ordf;','&ordm;',
+'&Oslash;','&oslash;','&Otilde;','&otilde;','&otimes;','&Ouml;','&ouml;','&para;','&part;','&permil;',
+'&perp;','&Phi;','&phi;','&Pi;','&pi;','&piv;','&plusmn;','&pound;','&Prime;','&prime;',
+'&prod;','&prop;','&Psi;','&psi;','&radic;','&rang;','&raquo;','&rArr;','&rarr;','&rceil;',
+'&rdquo;','&real;','&reg;','&rfloor;','&Rho;','&rho;','&rlm;','&rsaquo;','&rsquo;','&sbquo;',
+'&Scaron;','&scaron;','&sdot;','&sect;','&shy;','&Sigma;','&sigma;','&sigmaf;','&sim;','&spades;',
+'&sub;','&sube;','&sum;','&sup;','&sup1;','&sup2;','&sup3;','&supe;','&szlig;','&Tau;',
+'&tau;','&there4;','&Theta;','&theta;','&thetasym;','&thinsp;','&THORN;','&thorn;','&tilde;','&times;',
+'&trade;','&Uacute;','&uacute;','&uArr;','&uarr;','&Ucirc;','&ucirc;','&Ugrave;','&ugrave;','&uml;',
+'&upsih;','&Upsilon;','&upsilon;','&Uuml;','&uuml;','&weierp;','&Xi;','&xi;','&Yacute;','&yacute;',
+'&yen;','&Yuml;','&yuml;','&Zeta;','&zeta;','&zwj;','&zwnj;'
+);
+
+// nicht enthalten &gt; &lt; &apos; &#039; &quot; &amp; &nbsp;
+global $numbered_entities;
+$numbered_entities=array(
+'&#193;','&#225;','&#194;','&#226;','&#180;','&#198;','&#230;','&#192;','&#224;','&#8501;',
+'&#913;','&#945;','&#8743;','&#8736;','&#197;','&#229;','&#8776;','&#195;','&#227;','&#196;',
+'&#228;','&#8222;','&#914;','&#946;','&#166;','&#8226;','&#8745;','&#199;','&#231;','&#184;',
+'&#162;','&#935;','&#967;','&#710;','&#9827;','&#8773;','&#169;','&#8629;','&#8746;','&#164;',
+'&#8225;','&#8224;','&#8659;','&#8595;','&#176;','&#916;','&#948;','&#9830;','&#247;','&#201;',
+'&#233;','&#202;','&#234;','&#200;','&#232;','&#8709;','&#8195;','&#8194;','&#917;','&#949;',
+'&#8801;','&#919;','&#951;','&#208;','&#240;','&#203;','&#235;','&#8364;','&#8707;','&#402;',
+'&#8704;','&#189;','&#188;','&#190;','&#8260;','&#915;','&#947;','&#8805;','&#8660;','&#8596;',
+'&#9829;','&#8230;','&#205;','&#237;','&#206;','&#238;','&#161;','&#204;','&#236;','&#8465;',
+'&#8734;','&#8747;','&#921;','&#953;','&#191;','&#8712;','&#207;','&#239;','&#922;','&#954;',
+'&#923;','&#955;','&#9001;','&#171;','&#8656;','&#8592;','&#8968;','&#8220;','&#8804;','&#8970;',
+'&#8727;','&#9674;','&#8206;','&#8249;','&#8216;','&#175;','&#8212;','&#181;','&#183;','&#8722;',
+'&#924;','&#956;','&#8711;','&#8211;','&#8800;','&#8715;','&#172;','&#8713;','&#8836;','&#209;',
+'&#241;','&#925;','&#957;','&#211;','&#243;','&#212;','&#244;','&#338;','&#339;','&#210;','&#242;',
+'&#8254;','&#937;','&#969;','&#927;','&#959;','&#8853;','&#8744;','&#170;','&#186;','&#216;','&#248;',
+'&#213;','&#245;','&#8855;','&#214;','&#246;','&#182;','&#8706;','&#8240;','&#8869;','&#934;','&#966;',
+'&#928;','&#960;','&#982;','&#177;','&#163;','&#8243;','&#8242;','&#8719;','&#8733;','&#936;','&#968;',
+'&#8730;','&#9002;','&#187;','&#8658;','&#8594;','&#8969;','&#8221;','&#8476;','&#174;','&#8971;','&#929;',
+'&#961;','&#8207;','&#8250;','&#8217;','&#8218;','&#352;','&#353;','&#8901;','&#167;','&#173;','&#931;',
+'&#963;','&#962;','&#8764;','&#9824;','&#8834;','&#8838;','&#8721;','&#8835;','&#185;','&#178;','&#179;',
+'&#8839;','&#223;','&#932;','&#964;','&#8756;','&#920;','&#952;','&#977;','&#8201;','&#222;','&#254;',
+'&#732;','&#215;','&#8482;','&#218;','&#250;','&#8657;','&#8593;','&#219;','&#251;','&#217;','&#249;',
+'&#168;','&#978;','&#933;','&#965;','&#220;','&#252;','&#8472;','&#926;','&#958;','&#221;','&#253;',
+'&#165;','&#376;','&#255;','&#918;','&#950;','&#8205;','&#8204;'
+);
+
+/*
+ * The following part of this file is based on 'utf8.php' from the DokuWiki-project.
+ * (http://www.splitbrain.org/projects/dokuwiki):
+ **
+ * UTF8 helper functions
+ * @license    LGPL (http://www.gnu.org/copyleft/lesser.html)
+ * @author     Andreas Gohr <andi@splitbrain.org>
+ **
+ * modified for use with Website Baker
+ * from thorn, Jan. 2008
+ */
+
+/**
+ * UTF-8 array of common special characters
+ *
+ * This array should contain all special characters (not a letter or digit)
+ * defined in the various local charsets - it's not a complete list of non-alphanum
+ * characters in UTF-8. It's not perfect but should match most cases of special
+ * chars.
+ *
+ * The controlchars 0x00 to 0x19 are _not_ included in this array. The space 0x20 is!
+ * These chars are _not_ in the array either:  _ (0x5f), : 0x3a, . 0x2e, - 0x2d, * 0x2a
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see    utf8_stripspecials()
+ */
+$UTF8_SPECIAL_CHARS2="\x1A\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2b\x2c\x2f\x3b".
+    "\x3c\x3d\x3e\x3f\x40\x5b\x5c\x5d\x5e\x60\x7b\x7c\x7d\x7e\x7f\xc2\x80\xc2\x81\xc2".
+    "\x82\xc2\x83\xc2\x84\xc2\x85\xc2\x86\xc2\x87\xc2\x88\xc2\x89\xc2\x8a\xc2\x8b\xc2".
+    "\x8c\xc2\x8d\xc2\x8e\xc2\x8f\xc2\x90\xc2\x91\xc2\x92\xc2\x93\xc2\x94\xc2\x95\xef".
+    "\xbf\xbd\xef\xbf\xbd\xc2\x97\xc2\x98\xc2\x99\xc2\x9a\xc2\x9b\xc2\x9c\xc2\x9d\xc2".
+    "\x9e\xc2\x9f\x20\xc2\xa1\xc2\xa2\xc2\xa3\xc2\xa4\xc2\xa5\xc2\xa6\xc2\xa7\xc2\xa8".
+    "\xc2\xa9\xc2\xaa\xc2\xab\xc2\xac\xc2\xad\xc2\xae\xc2\xaf\xc2\xb0\xc2\xb1\xc2\xb2".
+    "\xc2\xb3\xc2\xb4\xc2\xb5\xc2\xb6\xc2\xb7\xc2\xb8\xc2\xb9\xc2\xba\xc2\xbb\xc2\xbc".
+    "\xc2\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\xbf\xc3\x97\xc3\xb7\xcb\x87\xcb\x98\xcb\x99".
+    "\xcb\x9a\xcb\x9b\xcb\x9c\xcb\x9d\xcc\x80\xcc\x81\xcc\x83\xcc\x89\xcc\xa3\xce\x84".
+    "\xce\x85\xce\x87\xce\xb2\xcf\x86\xcf\x91\xcf\x92\xcf\x95\xcf\x96\xd6\xb0\xd6\xb1".
+    "\xd6\xb2\xd6\xb3\xd6\xb4\xd6\xb5\xd6\xb6\xd6\xb7\xd6\xb8\xd6\xb9\xd6\xbb\xd6\xbc".
+    "\xd6\xbd\xd6\xbe\xd6\xbf\xef\xbf\xbd\xef\xbf\xbd\xd7\x81\xd7\x82\xd7\x83\xd7\xb3".
+    "\xd7\xb4\xd8\x8c\xd8\x9b\xd8\x9f\xd9\x80\xd9\x8b\xd9\x8c\xd9\x8d\xd9\x8e\xd9\x8f".
+    "\xd9\x90\xd9\x91\xd9\x92\xd9\xaa\xe0\xb8\xbf\xe2\x80\x8c\xe2\x80\x8d\xe2\x80\x8e".
+    "\xe2\x80\x8f\xe2\x80\x93\xe2\x80\x94\xe2\x80\x95\xe2\x80\x97\xe2\x80\x98\xe2\x80".
+    "\x99\xe2\x80\x9a\xe2\x80\x9c\xe2\x80\x9d\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xe2".
+    "\x80\xa0\xe2\x80\xa1\xe2\x80\xa2\xe2\x80\xa6\xe2\x80\xb0\xe2\x80\xb2\xe2\x80\xb3".
+    "\xe2\x80\xb9\xe2\x80\xba\xe2\x81\x84\xe2\x82\xa7\xe2\x82\xaa\xe2\x82\xab\xe2\x82".
+    "\xac\xe2\x84\x96\xe2\x84\x98\xe2\x84\xa2\xe2\x84\xa6\xe2\x84\xb5\xe2\x86\x90\xe2".
+    "\x86\x91\xe2\x86\x92\xe2\x86\x93\xe2\x86\x94\xe2\x86\x95\xe2\x86\xb5\xe2\x87\x90".
+    "\xe2\x87\x91\xe2\x87\x92\xe2\x87\x93\xe2\x87\x94\xe2\x88\x80\xe2\x88\x82\xe2\x88".
+    "\x83\xe2\x88\x85\xe2\x88\x86\xe2\x88\x87\xe2\x88\x88\xe2\x88\x89\xe2\x88\x8b\xe2".
+    "\x88\x8f\xe2\x88\x91\xe2\x88\x92\xe2\x88\x95\xe2\x88\x97\xe2\x88\x99\xe2\x88\x9a".
+    "\xe2\x88\x9d\xe2\x88\x9e\xe2\x88\xa0\xe2\x88\xa7\xe2\x88\xa8\xef\xbf\xbd\xef\xbf".
+    "\xbd\xe2\x88\xaa\xe2\x88\xab\xe2\x88\xb4\xe2\x88\xbc\xe2\x89\x85\xe2\x89\x88\xe2".
+    "\x89\xa0\xe2\x89\xa1\xe2\x89\xa4\xe2\x89\xa5\xe2\x8a\x82\xe2\x8a\x83\xe2\x8a\x84".
+    "\xe2\x8a\x86\xe2\x8a\x87\xe2\x8a\x95\xe2\x8a\x97\xe2\x8a\xa5\xe2\x8b\x85\xe2\x8c".
+    "\x90\xe2\x8c\xa0\xe2\x8c\xa1\xe2\x8c\xa9\xe2\x8c\xaa\xe2\x91\xa9\xe2\x94\x80\xef".
+    "\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xe2\x94\x8c\xe2\x94\x90\xe2\x94\x94\xe2\x94\x98".
+    "\xe2\x94\x9c\xe2\x94\xa4\xe2\x94\xac\xe2\x94\xb4\xe2\x94\xbc\xe2\x95\x90\xe2\x95".
+    "\x91\xe2\x95\x92\xe2\x95\x93\xe2\x95\x94\xe2\x95\x95\xe2\x95\x96\xe2\x95\x97\xe2".
+    "\x95\x98\xe2\x95\x99\xe2\x95\x9a\xe2\x95\x9b\xe2\x95\x9c\xe2\x95\x9d\xe2\x95\x9e".
+    "\xe2\x95\x9f\xe2\x95\xa0\xe2\x95\xa1\xe2\x95\xa2\xe2\x95\xa3\xe2\x95\xa4\xe2\x95".
+    "\xa5\xe2\x95\xa6\xe2\x95\xa7\xe2\x95\xa8\xe2\x95\xa9\xe2\x95\xaa\xe2\x95\xab\xe2".
+    "\x95\xac\xe2\x96\x80\xe2\x96\x84\xe2\x96\x88\xe2\x96\x8c\xe2\x96\x90\xe2\x96\x91".
+    "\xe2\x96\x92\xe2\x96\x93\xe2\x96\xa0\xe2\x96\xb2\xe2\x96\xbc\xe2\x97\x86\xe2\x97".
+    "\x8a\xe2\x97\x8f\xef\xbf\xbd\xef\xbf\xbd\xe2\x98\x85\xe2\x98\x8e\xe2\x98\x9b\xe2".
+    "\x98\x9e\xe2\x99\xa0\xe2\x99\xa3\xe2\x99\xa5\xe2\x99\xa6\xe2\x9c\x81\xe2\x9c\x82".
+    "\xe2\x9c\x83\xe2\x9c\x84\xe2\x9c\x86\xe2\x9c\x87\xe2\x9c\x88\xe2\x9c\x89\xe2\x9c".
+    "\x8c\xe2\x9c\x8d\xe2\x9c\x8e\xe2\x9c\x8f\xe2\x9c\x90\xe2\x9c\x91\xe2\x9c\x92\xe2".
+    "\x9c\x93\xe2\x9c\x94\xe2\x9c\x95\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xe2\x9c\x97".
+    "\xe2\x9c\x98\xe2\x9c\x99\xe2\x9c\x9a\xe2\x9c\x9b\xe2\x9c\x9c\xe2\x9c\x9d\xe2\x9c".
+    "\x9e\xe2\x9c\x9f\xe2\x9c\xa0\xe2\x9c\xa1\xe2\x9c\xa2\xe2\x9c\xa3\xe2\x9c\xa4\xe2".
+    "\x9c\xa5\xe2\x9c\xa6\xe2\x9c\xa7\xe2\x9c\xa9\xe2\x9c\xaa\xe2\x9c\xab\xe2\x9c\xac".
+    "\xe2\x9c\xad\xe2\x9c\xae\xe2\x9c\xaf\xe2\x9c\xb0\xe2\x9c\xb1\xe2\x9c\xb2\xe2\x9c".
+    "\xb3\xe2\x9c\xb4\xe2\x9c\xb5\xe2\x9c\xb6\xe2\x9c\xb7\xe2\x9c\xb8\xe2\x9c\xb9\xe2".
+    "\x9c\xba\xe2\x9c\xbb\xe2\x9c\xbc\xe2\x9c\xbd\xe2\x9c\xbe\xe2\x9c\xbf\xe2\x9d\x80".
+    "\xe2\x9d\x81\xe2\x9d\x82\xe2\x9d\x83\xe2\x9d\x84\xe2\x9d\x85\xe2\x9d\x86\xe2\x9d".
+    "\x87\xe2\x9d\x88\xe2\x9d\x89\xe2\x9d\x8a\xe2\x9d\x8b\xef\xbf\xbd\xef\xbf\xbd\xe2".
+    "\x9d\x8f\xe2\x9d\x90\xe2\x9d\x91\xe2\x9d\x92\xe2\x9d\x96\xe2\x9d\x98\xe2\x9d\x99".
+    "\xe2\x9d\x9a\xe2\x9d\x9b\xe2\x9d\x9c\xe2\x9d\x9d\xe2\x9d\x9e\xe2\x9d\xa1\xe2\x9d".
+    "\xa2\xe2\x9d\xa3\xe2\x9d\xa4\xe2\x9d\xa5\xe2\x9d\xa6\xe2\x9d\xa7\xe2\x9d\xbf\xe2".
+    "\x9e\x89\xe2\x9e\x93\xe2\x9e\x94\xe2\x9e\x98\xe2\x9e\x99\xe2\x9e\x9a\xef\xbf\xbd".
+    "\xef\xbf\xbd\xef\xbf\xbd\xe2\x9e\x9c\xe2\x9e\x9d\xe2\x9e\x9e\xe2\x9e\x9f\xe2\x9e".
+    "\xa0\xe2\x9e\xa1\xe2\x9e\xa2\xe2\x9e\xa3\xe2\x9e\xa4\xe2\x9e\xa5\xe2\x9e\xa6\xe2".
+    "\x9e\xa7\xe2\x9e\xa8\xe2\x9e\xa9\xe2\x9e\xaa\xe2\x9e\xab\xe2\x9e\xac\xe2\x9e\xad".
+    "\xe2\x9e\xae\xe2\x9e\xaf\xe2\x9e\xb1\xe2\x9e\xb2\xe2\x9e\xb3\xe2\x9e\xb4\xe2\x9e".
+    "\xb5\xe2\x9e\xb6\xe2\x9e\xb7\xe2\x9e\xb8\xe2\x9e\xb9\xe2\x9e\xba\xe2\x9e\xbb\xe2".
+    "\x9e\xbc\xe2\x9e\xbd\xe2\x9e\xbe\xe3\x80\x80\xe3\x80\x81\xe3\x80\x82\xe3\x80\x83".
+    "\xe3\x80\x88\xe3\x80\x89\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x8c\xe3\x80\x8d\xe3\x80".
+    "\x8e\xe3\x80\x8f\xe3\x80\x90\xe3\x80\x91\xe3\x80\x92\xe3\x80\x94\xe3\x80\x95\xe3".
+    "\x80\x96\xe3\x80\x97\xe3\x80\x98\xe3\x80\x99\xe3\x80\x9a\xe3\x80\x9b\xe3\x80\xb6".
+    "\xef\x9b\x99\xef\x9b\x9a\xef\x9b\x9b\xef\xa3\x97\xef\xa3\x98\xef\xa3\x99\xef\xa3".
+    "\x9a\xef\xa3\x9b\xef\xa3\x9c\xef\xa3\x9d\xef\xa3\x9e\xef\xa3\x9f\xef\xa3\xa0\xef".
+    "\xa3\xa1\xef\xa3\xa2\xef\xa3\xa3\xef\xa3\xa4\xef\xa3\xa5\xef\xbf\xbd\xef\xbf\xbd".
+    "\xef\xa3\xa7\xef\xa3\xa8\xef\xa3\xa9\xef\xa3\xaa\xef\xa3\xab\xef\xa3\xac\xef\xa3".
+    "\xad\xef\xa3\xae\xef\xa3\xaf\xef\xa3\xb0\xef\xa3\xb1\xef\xa3\xb2\xef\xa3\xb3\xef".
+    "\xa3\xb4\xef\xa3\xb5\xef\xa3\xb6\xef\xa3\xb7\xef\xa3\xb8\xef\xa3\xb9\xef\xa3\xba".
+    "\xef\xa3\xbb\xef\xa3\xbc\xef\xa3\xbd\xef\xa3\xbe\xef\xb9\xbc\xef\xb9\xbd\xef\xbc".
+    "\x81\xef\xbc\x82\xef\xbc\x83\xef\xbc\x84\xef\xbc\x85\xef\xbc\x86\xef\xbc\x87\xef".
+    "\xbc\x88\xef\xbc\x89\xef\xbc\x8a\xef\xbc\x8b\xef\xbc\x8c\xef\xbc\x8d\xef\xbc\x8e".
+    "\xef\xbc\x8f\xef\xbc\x9a\xef\xbc\x9b\xef\xbc\x9c\xef\xbc\x9d\xef\xbc\x9e\xef\xbc".
+    "\x9f\xef\xbc\xa0\xef\xbc\xbb\xef\xbc\xbc\xef\xbc\xbd\xef\xbc\xbe\xef\xbd\x80\xef".
+    "\xbd\x9b\xef\xbd\x9c\xef\xbd\x9d\xef\xbd\x9e\xef\xbd\x9f\xef\xbd\xa0\xef\xbd\xa1".
+    "\xef\xbd\xa2\xef\xbd\xa3\xef\xbd\xa4\xef\xbd\xa5\xef\xbf\xa0\xef\xbf\xa1\xef\xbf".
+    "\xa2\xef\xbf\xa3\xef\xbf\xa4\xef\xbf\xa5\xef\xbf\xa6\xef\xbf\xa8\xef\xbf\xa9\xef".
+    "\xbf\xaa\xef\xbf\xab\xef\xbf\xac\xef\xbf\xad\xef\xbf\xae";
+
+/**
+ * Romanization lookup table
+ *
+ * This lookup tables provides a way to transform strings written in a language
+ * different from the ones based upon latin letters into plain ASCII.
+ *
+ * Please note: this is not a scientific transliteration table. It only works
+ * oneway from nonlatin to ASCII and it works by simple character replacement
+ * only. Specialities of each language are not supported.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Vitaly Blokhin <vitinfo@vitn.com>
+ * @link   http://www.uconv.com/translit.htm
+ * @author Bisqwit <bisqwit@iki.fi>
+ * @link   http://kanjidict.stc.cx/hiragana.php?src=2
+ * @link   http://www.translatum.gr/converter/greek-transliteration.htm
+ * @link   http://en.wikipedia.org/wiki/Royal_Thai_General_System_of_Transcription
+ * @link   http://www.btranslations.com/resources/romanization/korean.asp
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author thorn <thorn@nettest.thekk.de>
+ */
+global $UTF8_ROMANIZATION;
+$UTF8_ROMANIZATION = array(
+    // Latin
+    "\xc3\x81"=>"A","\xc3\xa1"=>"a","\xc3\x82"=>"A",
+    "\xc3\xa2"=>"a","\xc3\x86"=>"Ae","\xc3\xa6"=>"ae","\xc3\x80"=>"A",
+    "\xc3\xa0"=>"a","\xc3\x85"=>"A","\xc3\xa5"=>"a","\xc3\x83"=>"A",
+    "\xc3\xa3"=>"a","\xc3\x84"=>"Ae","\xc3\xa4"=>"ae","\xc3\x87"=>"C",
+    "\xc3\xa7"=>"c","\xc3\x89"=>"E","\xc3\xa9"=>"e","\xc3\x8a"=>"E",
+    "\xc3\xaa"=>"e","\xc3\x88"=>"E","\xc3\xa8"=>"e","\xc3\x8b"=>"E",
+    "\xc3\xab"=>"e","\xc3\x8d"=>"I","\xc3\xad"=>"i","\xc3\x8e"=>"I",
+    "\xc3\xae"=>"i","\xc3\x8c"=>"I","\xc3\xac"=>"i","\xc3\x8f"=>"I",
+    "\xc3\xaf"=>"i","\xc3\x91"=>"N","\xc3\xb1"=>"n","\xc3\x93"=>"O",
+    "\xc3\xb3"=>"o","\xc3\x94"=>"O","\xc3\xb4"=>"o","\xc5\x92"=>"Oe",
+    "\xc5\x93"=>"oe","\xc3\x92"=>"O","\xc3\xb2"=>"o","\xc3\x95"=>"O",
+    "\xc3\xb5"=>"o","\xc3\x96"=>"Oe","\xc3\xb6"=>"oe","\xc5\xa0"=>"S",
+    "\xc5\xa1"=>"s","\xc3\x9f"=>"ss","\xc3\x9a"=>"U","\xc3\xba"=>"u",
+    "\xc3\x9b"=>"U","\xc3\xbb"=>"u","\xc3\x99"=>"U","\xc3\xb9"=>"u",
+    "\xc3\x9c"=>"Ue","\xc3\xbc"=>"ue","\xc3\x9d"=>"Y","\xc3\xbd"=>"y",
+    "\xc5\xb8"=>"Y","\xc3\xbf"=>"y","\xc2\xa9"=>"(c)","\xc2\xae"=>"(r)",
+    "\xc3\x90"=>"D","\xc3\x97"=>"x","\xc3\x98"=>"O","\xc3\x9e"=>"Th",
+    "\xc3\xb0"=>"d","\xc3\xb8"=>"o","\xc3\xbe"=>"th","\x27"=>"-",
+    "\x22"=>"-","\xc4\x80"=>"A","\xc4\x81"=>"a","\xc4\x82"=>"A",
+    "\xc4\x83"=>"a","\xc4\x84"=>"A","\xc4\x85"=>"a","\xc4\x86"=>"C",
+    "\xc4\x87"=>"c","\xc4\x88"=>"C","\xc4\x89"=>"c","\xc4\x8d"=>"c",
+    "\xc4\x8c"=>"C","\xc4\x8b"=>"c","\xc4\x8a"=>"C","\xc4\x91"=>"d",
+    "\xc4\x90"=>"D","\xc4\x8f"=>"d","\xc4\x8e"=>"D","\xc4\x93"=>"e",
+    "\xc4\x92"=>"E","\xc4\x94"=>"E","\xc4\x95"=>"e","\xc4\x96"=>"E",
+    "\xc4\x97"=>"e","\xc4\x98"=>"E","\xc4\x99"=>"e","\xc4\x9a"=>"E",
+    "\xc4\x9b"=>"e","\xc4\x9c"=>"G","\xc4\x9d"=>"g","\xc4\x9e"=>"G",
+    "\xc4\x9f"=>"g","\xc4\xa0"=>"G","\xc4\xa1"=>"g","\xc4\xa2"=>"G",
+    "\xc4\xa3"=>"g","\xc4\xa4"=>"H","\xc4\xa5"=>"h","\xc4\xa6"=>"H",
+    "\xc4\xa7"=>"h","\xc4\xa8"=>"I","\xc4\xa9"=>"i","\xc4\xaa"=>"I",
+    "\xc4\xab"=>"i","\xc4\xac"=>"I","\xc4\xad"=>"i","\xc4\xae"=>"I",
+    "\xc4\xaf"=>"i","\xc4\xb0"=>"I","\xc4\xb1"=>"i","\xc4\xb2"=>"IJ",
+    "\xc4\xb3"=>"ij","\xc4\xb4"=>"J","\xc4\xb5"=>"j","\xc4\xb6"=>"K",
+    "\xc4\xb7"=>"k","\xc4\xb8"=>"k","\xc4\xb9"=>"L","\xc4\xba"=>"l",
+    "\xc4\xbb"=>"L","\xc4\xbc"=>"l","\xc4\xbd"=>"L","\xc4\xbe"=>"l",
+    "\xc4\xbf"=>"L","\xc5\x80"=>"l","\xc5\x81"=>"L","\xc5\x82"=>"l",
+    "\xc5\x83"=>"N","\xc5\x84"=>"n","\xc5\x85"=>"N","\xc5\x86"=>"n",
+    "\xc5\x87"=>"N","\xc5\x88"=>"n","\xc5\x89"=>"n","\xc5\x8a"=>"N",
+    "\xc5\x8b"=>"n","\xc5\x8c"=>"O","\xc5\x8d"=>"o","\xc5\x8e"=>"O",
+    "\xc5\x8f"=>"o","\xc5\x90"=>"O","\xc5\x91"=>"o","\xc5\x94"=>"R",
+    "\xc5\x95"=>"r","\xc5\x96"=>"R","\xc5\x97"=>"r","\xc5\x98"=>"R",
+    "\xc5\x99"=>"r","\xc5\x9a"=>"S","\xc5\x9b"=>"s","\xc5\x9c"=>"S",
+    "\xc5\x9d"=>"s","\xc5\x9e"=>"S","\xc5\x9f"=>"s","\xc5\xa2"=>"T",
+    "\xc5\xa3"=>"t","\xc5\xa4"=>"T","\xc5\xa5"=>"t","\xc5\xa6"=>"T",
+    "\xc5\xa7"=>"t","\xc5\xa8"=>"U","\xc5\xa9"=>"u","\xc5\xaa"=>"U",
+    "\xc5\xab"=>"u","\xc5\xac"=>"U","\xc5\xad"=>"u","\xc5\xae"=>"U",
+    "\xc5\xaf"=>"u","\xc5\xb0"=>"U","\xc5\xb1"=>"u","\xc5\xb2"=>"U",
+    "\xc5\xb3"=>"u","\xc5\xb4"=>"W","\xc5\xb5"=>"w","\xc5\xb6"=>"Y",
+    "\xc5\xb7"=>"y","\xc5\xb9"=>"Z","\xc5\xba"=>"z","\xc5\xbb"=>"Z",
+    "\xc5\xbc"=>"z","\xc5\xbd"=>"Z","\xc5\xbe"=>"z","\xc5\xbf"=>"s",
+    "\xef\xac\x80"=>"ff","\xef\xac\x81"=>"fi","\xef\xac\x82"=>"fl","\xef\xac\x83"=>"ffi",
+    "\xef\xac\x84"=>"ffl","\xef\xac\x85"=>"st","\xef\xac\x86"=>"st","\xc6\x80"=>"b",
+    "\xc6\x81"=>"B","\xc6\x82"=>"B","\xc6\x83"=>"b","\xc6\x84"=>"6",
+    "\xc6\x85"=>"6","\xc6\x86"=>"O","\xc6\x87"=>"C","\xc6\x88"=>"c",
+    "\xc6\x89"=>"D","\xc6\x8a"=>"D","\xc6\x8b"=>"D","\xc6\x8c"=>"d",
+    "\xc6\x8d"=>"d","\xc6\x8e"=>"E","\xc6\x8f"=>"e","\xc6\x90"=>"E",
+    "\xc6\x91"=>"F","\xc6\x92"=>"f","\xc6\x93"=>"G","\xc6\x94"=>"G",
+    "\xc6\x95"=>"hw","\xc6\x96"=>"I","\xc6\x97"=>"I","\xc6\x98"=>"K",
+    "\xc6\x99"=>"k","\xc6\x9a"=>"l","\xc6\x9b"=>"l","\xc6\x9c"=>"M",
+    "\xc6\x9d"=>"N","\xc6\x9e"=>"n","\xc6\x9f"=>"O","\xc6\xa0"=>"O",
+    "\xc6\xa1"=>"o","\xc6\xa2"=>"OI","\xc6\xa3"=>"oi","\xc6\xa4"=>"P",
+    "\xc6\xa5"=>"p","\xc6\xa6"=>"YR","\xc6\xa7"=>"2","\xc6\xa8"=>"2",
+    "\xc6\xa9"=>"ESH","\xc6\xaa"=>"esh","\xc6\xab"=>"t","\xc6\xac"=>"T",
+    "\xc6\xad"=>"t","\xc6\xae"=>"T","\xc6\xaf"=>"U","\xc6\xb0"=>"u",
+    "\xc6\xb1"=>"V","\xc6\xb2"=>"v","\xc6\xb3"=>"Y","\xc6\xb4"=>"y",
+    "\xc6\xb5"=>"Z","\xc6\xb6"=>"z","\xc6\xb7"=>"EZH","\xc6\xb8"=>"EZH",
+    "\xc6\xb9"=>"ezh","\xc6\xba"=>"ezh","\xc6\xbb"=>"2","\xc6\xbc"=>"5",
+    "\xc6\xbd"=>"5","\xc6\xbe"=>"-","\xc6\xbf"=>"w","\xc7\x80"=>"-",
+    "\xc7\x81"=>"-","\xc7\x82"=>"-","\xc7\x83"=>"-","\xc7\x84"=>"DZ",
+    "\xc7\x85"=>"DZ","\xc7\x86"=>"dz","\xc7\x87"=>"LJ","\xc7\x88"=>"Lj",
+    "\xc7\x89"=>"lj","\xc7\x8a"=>"NJ","\xc7\x8b"=>"Nj","\xc7\x8c"=>"nj",
+    "\xc7\x8d"=>"A","\xc7\x8e"=>"a","\xc7\x8f"=>"I","\xc7\x90"=>"i",
+    "\xc7\x91"=>"O","\xc7\x92"=>"o","\xc7\x93"=>"U","\xc7\x94"=>"u",
+    "\xc7\x95"=>"U","\xc7\x96"=>"u","\xc7\x97"=>"U","\xc7\x98"=>"u",
+    "\xc7\x99"=>"U","\xc7\x9a"=>"u","\xc7\x9b"=>"U","\xc7\x9c"=>"u",
+    "\xc7\x9d"=>"e","\xc7\x9e"=>"A","\xc7\x9f"=>"a","\xc7\xa0"=>"A",
+    "\xc7\xa1"=>"a","\xc7\xa2"=>"AE","\xc7\xa3"=>"ae","\xc7\xa4"=>"G",
+    "\xc7\xa5"=>"g","\xc7\xa6"=>"G","\xc7\xa7"=>"g","\xc7\xa8"=>"K",
+    "\xc7\xa9"=>"k","\xc7\xaa"=>"O","\xc7\xab"=>"o","\xc7\xac"=>"O",
+    "\xc7\xad"=>"o","\xc7\xae"=>"EZH","\xc7\xaf"=>"ezh","\xc7\xb0"=>"j",
+    "\xc7\xb1"=>"DZ","\xc7\xb2"=>"Dz","\xc7\xb3"=>"dz","\xc7\xb4"=>"G",
+    "\xc7\xb5"=>"g","\xc7\xb6"=>"HW","\xc7\xb7"=>"W","\xc7\xb8"=>"N",
+    "\xc7\xb9"=>"n","\xc7\xba"=>"A","\xc7\xbb"=>"a","\xc7\xbc"=>"AE",
+    "\xc7\xbd"=>"ae","\xc7\xbe"=>"O","\xc7\xbf"=>"o","\xc8\x80"=>"A",
+    "\xc8\x81"=>"a","\xc8\x82"=>"A","\xc8\x83"=>"a","\xc8\x84"=>"E",
+    "\xc8\x85"=>"e","\xc8\x86"=>"E","\xc8\x87"=>"e","\xc8\x88"=>"I",
+    "\xc8\x89"=>"i","\xc8\x8a"=>"I","\xc8\x8b"=>"i","\xc8\x8c"=>"O",
+    "\xc8\x8d"=>"o","\xc8\x8e"=>"O","\xc8\x8f"=>"o","\xc8\x90"=>"R",
+    "\xc8\x91"=>"r","\xc8\x92"=>"R","\xc8\x93"=>"r","\xc8\x94"=>"U",
+    "\xc8\x95"=>"u","\xc8\x96"=>"U","\xc8\x97"=>"u","\xc8\x98"=>"S",
+    "\xc8\x99"=>"s","\xc8\x9a"=>"T","\xc8\x9b"=>"t","\xc8\x9c"=>"Y",
+    "\xc8\x9d"=>"y","\xc8\x9e"=>"H","\xc8\x9f"=>"h","\xc8\xa0"=>"n",
+    "\xc8\xa1"=>"d","\xc8\xa2"=>"OU","\xc8\xa3"=>"ou","\xc8\xa4"=>"Z",
+    "\xc8\xa5"=>"z","\xc8\xa6"=>"A","\xc8\xa7"=>"a","\xc8\xa8"=>"E",
+    "\xc8\xa9"=>"e","\xc8\xaa"=>"O","\xc8\xab"=>"o","\xc8\xac"=>"O",
+    "\xc8\xad"=>"o","\xc8\xae"=>"O","\xc8\xaf"=>"o","\xc8\xb0"=>"O",
+    "\xc8\xb1"=>"o","\xc8\xb2"=>"Y","\xc8\xb3"=>"y","\xc8\xb4"=>"l",
+    "\xc8\xb5"=>"n","\xc8\xb6"=>"t","\xc8\xb7"=>"j","\xc8\xb8"=>"db",
+    "\xc8\xb9"=>"qp","\xc8\xba"=>"A","\xc8\xbb"=>"C","\xc8\xbc"=>"c",
+    "\xc8\xbd"=>"L","\xc8\xbe"=>"T","\xc8\xbf"=>"s","\xc9\x80"=>"z",
+    "\xc9\x81"=>"-","\xe1\xb8\x80"=>"A","\xe1\xb8\x81"=>"a","\xe1\xb8\x82"=>"B",
+    "\xe1\xb8\x83"=>"b","\xe1\xb8\x84"=>"B","\xe1\xb8\x85"=>"b","\xe1\xb8\x86"=>"B",
+    "\xe1\xb8\x87"=>"b","\xe1\xb8\x88"=>"C","\xe1\xb8\x89"=>"c","\xe1\xb8\x8a"=>"D",
+    "\xe1\xb8\x8b"=>"d","\xe1\xb8\x8c"=>"D","\xe1\xb8\x8d"=>"d","\xe1\xb8\x8e"=>"D",
+    "\xe1\xb8\x8f"=>"d","\xe1\xb8\x90"=>"D","\xe1\xb8\x91"=>"d","\xe1\xb8\x92"=>"D",
+    "\xe1\xb8\x93"=>"d","\xe1\xb8\x94"=>"E","\xe1\xb8\x95"=>"e","\xe1\xb8\x96"=>"E",
+    "\xe1\xb8\x97"=>"e","\xe1\xb8\x98"=>"E","\xe1\xb8\x99"=>"e","\xe1\xb8\x9a"=>"E",
+    "\xe1\xb8\x9b"=>"e","\xe1\xb8\x9c"=>"E","\xe1\xb8\x9d"=>"e","\xe1\xb8\x9e"=>"F",
+    "\xe1\xb8\x9f"=>"f","\xe1\xb8\xa0"=>"G","\xe1\xb8\xa1"=>"g","\xe1\xb8\xa2"=>"H",
+    "\xe1\xb8\xa3"=>"h","\xe1\xb8\xa4"=>"H","\xe1\xb8\xa5"=>"h","\xe1\xb8\xa6"=>"H",
+    "\xe1\xb8\xa7"=>"h","\xe1\xb8\xa8"=>"H","\xe1\xb8\xa9"=>"h","\xe1\xb8\xaa"=>"H",
+    "\xe1\xb8\xab"=>"h","\xe1\xb8\xac"=>"I","\xe1\xb8\xad"=>"i","\xe1\xb8\xae"=>"I",
+    "\xe1\xb8\xaf"=>"i","\xe1\xb8\xb0"=>"K","\xe1\xb8\xb1"=>"k","\xe1\xb8\xb2"=>"K",
+    "\xe1\xb8\xb3"=>"k","\xe1\xb8\xb4"=>"K","\xe1\xb8\xb5"=>"k","\xe1\xb8\xb6"=>"L",
+    "\xe1\xb8\xb7"=>"l","\xe1\xb8\xb8"=>"L","\xe1\xb8\xb9"=>"l","\xe1\xb8\xba"=>"L",
+    "\xe1\xb8\xbb"=>"l","\xe1\xb8\xbc"=>"L","\xe1\xb8\xbd"=>"l","\xe1\xb8\xbe"=>"M",
+    "\xe1\xb8\xbf"=>"m","\xe1\xb9\x80"=>"M","\xe1\xb9\x81"=>"m","\xe1\xb9\x82"=>"M",
+    "\xe1\xb9\x83"=>"m","\xe1\xb9\x84"=>"N","\xe1\xb9\x85"=>"n","\xe1\xb9\x86"=>"N",
+    "\xe1\xb9\x87"=>"n","\xe1\xb9\x88"=>"N","\xe1\xb9\x89"=>"n","\xe1\xb9\x8a"=>"N",
+    "\xe1\xb9\x8b"=>"n","\xe1\xb9\x8c"=>"O","\xe1\xb9\x8d"=>"o","\xe1\xb9\x8e"=>"O",
+    "\xe1\xb9\x8f"=>"o","\xe1\xb9\x90"=>"O","\xe1\xb9\x91"=>"o","\xe1\xb9\x92"=>"O",
+    "\xe1\xb9\x93"=>"o","\xe1\xb9\x94"=>"P","\xe1\xb9\x95"=>"p","\xe1\xb9\x96"=>"P",
+    "\xe1\xb9\x97"=>"p","\xe1\xb9\x98"=>"R","\xe1\xb9\x99"=>"r","\xe1\xb9\x9a"=>"R",
+    "\xe1\xb9\x9b"=>"r","\xe1\xb9\x9c"=>"R","\xe1\xb9\x9d"=>"r","\xe1\xb9\x9e"=>"R",
+    "\xe1\xb9\x9f"=>"r","\xe1\xb9\xa0"=>"S","\xe1\xb9\xa1"=>"s","\xe1\xb9\xa2"=>"S",
+    "\xe1\xb9\xa3"=>"s","\xe1\xb9\xa4"=>"S","\xe1\xb9\xa5"=>"s","\xe1\xb9\xa6"=>"S",
+    "\xe1\xb9\xa7"=>"s","\xe1\xb9\xa8"=>"S","\xe1\xb9\xa9"=>"s","\xe1\xb9\xaa"=>"T",
+    "\xe1\xb9\xab"=>"t","\xe1\xb9\xac"=>"T","\xe1\xb9\xad"=>"t","\xe1\xb9\xae"=>"T",
+    "\xe1\xb9\xaf"=>"t","\xe1\xb9\xb0"=>"T","\xe1\xb9\xb1"=>"t","\xe1\xb9\xb2"=>"U",
+    "\xe1\xb9\xb3"=>"u","\xe1\xb9\xb4"=>"U","\xe1\xb9\xb5"=>"u","\xe1\xb9\xb6"=>"U",
+    "\xe1\xb9\xb7"=>"u","\xe1\xb9\xb8"=>"U","\xe1\xb9\xb9"=>"u","\xe1\xb9\xba"=>"U",
+    "\xe1\xb9\xbb"=>"u","\xe1\xb9\xbc"=>"V","\xe1\xb9\xbd"=>"v","\xe1\xb9\xbe"=>"V",
+    "\xe1\xb9\xbf"=>"v","\xe1\xba\x80"=>"W","\xe1\xba\x81"=>"w","\xe1\xba\x82"=>"W",
+    "\xe1\xba\x83"=>"w","\xe1\xba\x84"=>"W","\xe1\xba\x85"=>"w","\xe1\xba\x86"=>"W",
+    "\xe1\xba\x87"=>"w","\xe1\xba\x88"=>"W","\xe1\xba\x89"=>"w","\xe1\xba\x8a"=>"X",
+    "\xe1\xba\x8b"=>"x","\xe1\xba\x8c"=>"X","\xe1\xba\x8d"=>"x","\xe1\xba\x8e"=>"Y",
+    "\xe1\xba\x8f"=>"y","\xe1\xba\x90"=>"Z","\xe1\xba\x91"=>"z","\xe1\xba\x92"=>"Z",
+    "\xe1\xba\x93"=>"z","\xe1\xba\x94"=>"Z","\xe1\xba\x95"=>"z","\xe1\xba\x96"=>"h",
+    "\xe1\xba\x97"=>"t","\xe1\xba\x98"=>"w","\xe1\xba\x99"=>"y","\xe1\xba\x9a"=>"a",
+    "\xe1\xba\x9b"=>"s","\xe1\xba\xa0"=>"A","\xe1\xba\xa1"=>"a","\xe1\xba\xa2"=>"A",
+    "\xe1\xba\xa3"=>"a","\xe1\xba\xa4"=>"A","\xe1\xba\xa5"=>"a","\xe1\xba\xa6"=>"A",
+    "\xe1\xba\xa7"=>"a","\xe1\xba\xa8"=>"A","\xe1\xba\xa9"=>"a","\xe1\xba\xaa"=>"A",
+    "\xe1\xba\xab"=>"a","\xe1\xba\xac"=>"A","\xe1\xba\xad"=>"a","\xe1\xba\xae"=>"A",
+    "\xe1\xba\xaf"=>"a","\xe1\xba\xb0"=>"A","\xe1\xba\xb1"=>"a","\xe1\xba\xb2"=>"A",
+    "\xe1\xba\xb3"=>"a","\xe1\xba\xb4"=>"A","\xe1\xba\xb5"=>"a","\xe1\xba\xb6"=>"A",
+    "\xe1\xba\xb7"=>"a","\xe1\xba\xb8"=>"E","\xe1\xba\xb9"=>"e","\xe1\xba\xba"=>"E",
+    "\xe1\xba\xbb"=>"e","\xe1\xba\xbc"=>"E","\xe1\xba\xbd"=>"e","\xe1\xba\xbe"=>"E",
+    "\xe1\xba\xbf"=>"e","\xe1\xbb\x80"=>"E","\xe1\xbb\x81"=>"e","\xe1\xbb\x82"=>"E",
+    "\xe1\xbb\x83"=>"e","\xe1\xbb\x84"=>"E","\xe1\xbb\x85"=>"e","\xe1\xbb\x86"=>"E",
+    "\xe1\xbb\x87"=>"e","\xe1\xbb\x88"=>"I","\xe1\xbb\x89"=>"i","\xe1\xbb\x8a"=>"I",
+    "\xe1\xbb\x8b"=>"i","\xe1\xbb\x8c"=>"O","\xe1\xbb\x8d"=>"o","\xe1\xbb\x8e"=>"O",
+    "\xe1\xbb\x8f"=>"o","\xe1\xbb\x90"=>"O","\xe1\xbb\x91"=>"o","\xe1\xbb\x92"=>"O",
+    "\xe1\xbb\x93"=>"o","\xe1\xbb\x94"=>"O","\xe1\xbb\x95"=>"o","\xe1\xbb\x96"=>"O",
+    "\xe1\xbb\x97"=>"o","\xe1\xbb\x98"=>"O","\xe1\xbb\x99"=>"o","\xe1\xbb\x9a"=>"O",
+    "\xe1\xbb\x9b"=>"o","\xe1\xbb\x9c"=>"O","\xe1\xbb\x9d"=>"o","\xe1\xbb\x9e"=>"O",
+    "\xe1\xbb\x9f"=>"o","\xe1\xbb\xa0"=>"O","\xe1\xbb\xa1"=>"o","\xe1\xbb\xa2"=>"O",
+    "\xe1\xbb\xa3"=>"o","\xe1\xbb\xa4"=>"U","\xe1\xbb\xa5"=>"u","\xe1\xbb\xa6"=>"U",
+    "\xe1\xbb\xa7"=>"u","\xe1\xbb\xa8"=>"U","\xe1\xbb\xa9"=>"u","\xe1\xbb\xaa"=>"U",
+    "\xe1\xbb\xab"=>"u","\xe1\xbb\xac"=>"U","\xe1\xbb\xad"=>"u","\xe1\xbb\xae"=>"U",
+    "\xe1\xbb\xaf"=>"u","\xe1\xbb\xb0"=>"U","\xe1\xbb\xb1"=>"u","\xe1\xbb\xb2"=>"Y",
+    "\xe1\xbb\xb3"=>"y","\xe1\xbb\xb4"=>"Y","\xe1\xbb\xb5"=>"y","\xe1\xbb\xb6"=>"Y",
+    "\xe1\xbb\xb7"=>"y","\xe1\xbb\xb8"=>"Y","\xe1\xbb\xb9"=>"y",
+    // Cyrilic
+    "\xd0\x90"=>"A","\xd0\xb0"=>"a","\xd3\x90"=>"A","\xd3\x91"=>"a",
+    "\xd3\x92"=>"A","\xd3\x93"=>"a","\xd3\x94"=>"A","\xd3\x95"=>"a",
+    "\xd3\x98"=>"A","\xd3\x99"=>"a","\xd3\x9a"=>"A","\xd3\x9b"=>"a",
+    "\xd0\x91"=>"B","\xd0\xb1"=>"b","\xd0\x92"=>"V","\xd0\xb2"=>"v",
+    "\xd0\x93"=>"G","\xd0\xb3"=>"g","\xd2\x90"=>"Gh","\xd2\x91"=>"gh",
+    "\xd2\x94"=>"G","\xd2\x95"=>"g","\xd2\x92"=>"G","\xd2\x93"=>"g",
+    "\xd3\xb6"=>"G","\xd3\xb7"=>"g","\xd0\x94"=>"D","\xd0\xb4"=>"d",
+    "\xd0\x82"=>"D","\xd1\x92"=>"d","\xd0\x83"=>"G","\xd1\x93"=>"g",
+    "\xd0\x80"=>"E","\xd1\x90"=>"e","\xd0\x95"=>"E","\xd0\xb5"=>"e",
+    "\xd0\x81"=>"Jo","\xd1\x91"=>"jo","\xd3\x96"=>"E","\xd3\x97"=>"e",
+    "\xd0\x84"=>"Je","\xd1\x94"=>"je","\xd2\xbc"=>"C","\xd2\xbd"=>"c",
+    "\xd2\xbe"=>"C","\xd2\xbf"=>"c","\xd0\x96"=>"Zh","\xd0\xb6"=>"zh",
+    "\xd3\x81"=>"Z","\xd3\x82"=>"z","\xd3\x9c"=>"Z","\xd3\x9d"=>"z",
+    "\xd2\x96"=>"Z","\xd2\x97"=>"z","\xd0\x97"=>"Z","\xd0\xb7"=>"z",
+    "\xd3\x9e"=>"Z","\xd3\x9f"=>"z","\xd0\x85"=>"Z","\xd1\x95"=>"z",
+    "\xd3\xa0"=>"Z","\xd3\xa1"=>"z","\xd0\x8d"=>"I","\xd1\x9d"=>"i",
+    "\xd0\x98"=>"I","\xd0\xb8"=>"i","\xd3\xa2"=>"I","\xd3\xa3"=>"i",
+    "\xd3\xa4"=>"I","\xd3\xa5"=>"i","\xd0\x86"=>"I","\xd1\x96"=>"i",
+    "\xd0\x87"=>"Ji","\xd1\x97"=>"ji","\xd0\x99"=>"J","\xd0\xb9"=>"j",
+    "\xd0\x88"=>"J","\xd1\x98"=>"j","\xd0\x9a"=>"K","\xd0\xba"=>"k",
+    "\xd2\x9a"=>"K","\xd2\x9b"=>"k","\xd2\x9c"=>"K","\xd2\x9d"=>"k",
+    "\xd2\x9e"=>"K","\xd2\x9f"=>"k","\xd2\xa0"=>"K","\xd2\xa1"=>"k",
+    "\xd0\x9b"=>"L","\xd0\xbb"=>"l","\xd0\x89"=>"L","\xd1\x99"=>"l",
+    "\xd0\x9c"=>"M","\xd0\xbc"=>"m","\xd0\x9d"=>"N","\xd0\xbd"=>"n",
+    "\xd0\x8a"=>"N","\xd1\x9a"=>"n","\xd2\xa4"=>"N","\xd2\xa5"=>"n",
+    "\xd2\xa2"=>"N","\xd2\xa3"=>"n","\xd0\x9e"=>"O","\xd0\xbe"=>"o",
+    "\xd3\xa6"=>"O","\xd3\xa7"=>"o","\xd3\xa8"=>"O","\xd3\xa9"=>"o",
+    "\xd3\xaa"=>"O","\xd3\xab"=>"o","\xd0\x9f"=>"P","\xd0\xbf"=>"p",
+    "\xd2\xa6"=>"P","\xd2\xa7"=>"p","\xd0\xa0"=>"R","\xd1\x80"=>"r",
+    "\xd0\xa1"=>"S","\xd1\x81"=>"s","\xd2\xaa"=>"C","\xd2\xab"=>"c",
+    "\xd0\xa2"=>"T","\xd1\x82"=>"t","\xd2\xac"=>"T","\xd2\xad"=>"t",
+    "\xd0\x8b"=>"C","\xd1\x9b"=>"c","\xd0\x8c"=>"K","\xd1\x9c"=>"k",
+    "\xd0\xa3"=>"U","\xd1\x83"=>"u","\xd0\x8e"=>"U","\xd1\x9e"=>"u",
+    "\xd3\xae"=>"U","\xd3\xaf"=>"u","\xd3\xb0"=>"U","\xd3\xb1"=>"u",
+    "\xd3\xb2"=>"U","\xd3\xb3"=>"u","\xd2\xae"=>"U","\xd2\xaf"=>"u",
+    "\xd2\xb0"=>"U","\xd2\xb1"=>"u","\xd0\xa4"=>"F","\xd1\x84"=>"f",
+    "\xd0\xa5"=>"X","\xd1\x85"=>"x","\xd2\xb2"=>"H","\xd2\xb3"=>"h",
+    "\xd2\xba"=>"H","\xd2\xbb"=>"h","\xd0\xa6"=>"C","\xd1\x86"=>"c",
+    "\xd2\xb4"=>"C","\xd2\xb5"=>"c","\xd0\xa7"=>"Ch","\xd1\x87"=>"ch",
+    "\xd3\xb4"=>"C","\xd3\xb5"=>"c","\xd2\xb6"=>"C","\xd2\xb7"=>"c",
+    "\xd2\xb8"=>"C","\xd2\xb9"=>"c","\xd0\x8f"=>"D","\xd1\x9f"=>"d",
+    "\xd0\xa8"=>"Sh","\xd1\x88"=>"sh","\xd0\xa9"=>"Sch","\xd1\x89"=>"sch",
+    "\xd0\xab"=>"Y","\xd1\x8b"=>"y","\xd3\xb8"=>"Y","\xd3\xb9"=>"y",
+    "\xd0\xad"=>"Eh","\xd1\x8d"=>"eh","\xd3\xac"=>"E","\xd3\xad"=>"e",
+    "\xd0\xae"=>"Ju","\xd1\x8e"=>"ju","\xd0\xaf"=>"Ja","\xd1\x8f"=>"ja",
+    "\xd1\xa2"=>"E","\xd1\xa3"=>"e","\xd1\xaa"=>"A","\xd1\xab"=>"a",
+    "\xd1\xb2"=>"F","\xd1\xb3"=>"f","\xd1\xb4"=>"Y","\xd1\xb5"=>"y",
+    "\xd1\xb6"=>"Y","\xd1\xb7"=>"y","\xd2\xa8"=>"O","\xd2\xa9"=>"o",
+    "\xd1\xa0"=>"O","\xd1\xa1"=>"o","\xd1\xa4"=>"E","\xd1\xa5"=>"e",
+    "\xd1\xa6"=>"U","\xd1\xa7"=>"u","\xd1\xa8"=>"U","\xd1\xa9"=>"u",
+    "\xd1\xac"=>"U","\xd1\xad"=>"u","\xd1\xae"=>"K","\xd1\xaf"=>"k",
+    "\xd1\xb0"=>"P","\xd1\xb1"=>"p","\xd1\xb8"=>"U","\xd1\xb9"=>"u",
+    "\xd1\xba"=>"O","\xd1\xbb"=>"o","\xd1\xbc"=>"O","\xd1\xbd"=>"o",
+    "\xd1\xbe"=>"O","\xd1\xbf"=>"o","\xd2\x80"=>"K","\xd2\x81"=>"k",
+    "\xd2\x8a"=>"J","\xd2\x8b"=>"j","\xd2\x8e"=>"r","\xd2\x98"=>"Z",
+    "\xd2\x99"=>"z","\xd3\x83"=>"K","\xd3\x84"=>"k","\xd3\x85"=>"L",
+    "\xd3\x86"=>"l","\xd3\x87"=>"N","\xd3\x88"=>"n","\xd3\x89"=>"N",
+    "\xd3\x8a"=>"n","\xd3\x8b"=>"C","\xd3\x8c"=>"c","\xd3\x8d"=>"M",
+    "\xd3\x8e"=>"m","\xd1\x8a"=>"","\xd0\xaa"=>"","\xd0\xac"=>"",
+    "\xd1\x8c"=>"","\xd2\x8c"=>"-","\xd3\x80"=>"-","\xcc\x81"=>"",
+    // Greek
+    "\xce\xb1\xce\xb9"=>"e","\xce\x91\xce\xb9"=>"E","\xce\xb5\xce\xb9"=>"i",
+    "\xce\x95\xce\xb9"=>"I","\xce\xbf\xce\xb9"=>"i","\xce\x9f\xce\xb9"=>"I","\xce\xbf\xcf\x85"=>"ou",
+    "\xce\x9f\xcf\x85"=>"Ou","\xce\xb1\xcf\x85"=>"av","\xce\x91\xcf\x85"=>"Av","\xce\xb5\xcf\x85"=>"ev",
+    "\xce\x95\xcf\x85"=>"Ev","\xce\xb7\xcf\x85"=>"iv","\xce\x97\xcf\x85"=>"Iv","\xce\xbc\xcf\x80"=>"mp",
+    "\xce\x9c\xcf\x80"=>"B","\xce\xbd\xcf\x84"=>"nt","\xce\x9d\xcf\x84"=>"D","\xcf\x84\xce\xb6"=>"tz",
+    "\xce\xa4\xce\xb6"=>"Tz","\xce\xb3\xce\xba"=>"ng","\xce\x93\xce\xba"=>"G","\xce\xb3\xce\xb3"=>"ng",
+    "\xce\x93\xce\xb3"=>"Ng","\xce\x86"=>"A","\xce\x88"=>"E","\xce\x89"=>"I",
+    "\xce\x8a"=>"I","\xce\x8c"=>"O","\xce\x8e"=>"Y","\xce\x8f"=>"O",
+    "\xce\x90"=>"i","\xce\x91"=>"A","\xce\x92"=>"V","\xce\x93"=>"G",
+    "\xce\x94"=>"D","\xce\x95"=>"E","\xce\x96"=>"Z","\xce\x97"=>"I",
+    "\xce\x98"=>"Th","\xce\x99"=>"I","\xce\x9a"=>"K","\xce\x9b"=>"L",
+    "\xce\x9c"=>"M","\xce\x9d"=>"N","\xce\x9e"=>"X","\xce\x9f"=>"O",
+    "\xce\xa0"=>"P","\xce\xa1"=>"R","\xce\xa3"=>"S","\xce\xa4"=>"T",
+    "\xce\xa5"=>"Y","\xce\xa6"=>"F","\xce\xa7"=>"Ch","\xce\xa8"=>"Ps",
+    "\xce\xa9"=>"O","\xce\xaa"=>"I","\xce\xab"=>"Y","\xce\xac"=>"a",
+    "\xce\xad"=>"e","\xce\xae"=>"i","\xce\xaf"=>"i","\xce\xb0"=>"y",
+    "\xce\xb1"=>"a","\xce\xb2"=>"v","\xce\xb3"=>"g","\xce\xb4"=>"d",
+    "\xce\xb5"=>"e","\xce\xb6"=>"z","\xce\xb7"=>"i","\xce\xb8"=>"th",
+    "\xce\xb9"=>"i","\xce\xba"=>"k","\xce\xbb"=>"l","\xce\xbc"=>"m",
+    "\xce\xbd"=>"n","\xce\xbe"=>"x","\xce\xbf"=>"o","\xcf\x80"=>"p",
+    "\xcf\x81"=>"r","\xcf\x82"=>"s","\xcf\x83"=>"s","\xcf\x84"=>"t",
+    "\xcf\x85"=>"y","\xcf\x86"=>"f","\xcf\x87"=>"ch","\xcf\x88"=>"ps",
+    "\xcf\x89"=>"o","\xcf\x8a"=>"i","\xcf\x8b"=>"y","\xcf\x8c"=>"o",
+    "\xcf\x8d"=>"y","\xcf\x8e"=>"o","\xcf\x90"=>"b","\xcf\x91"=>"th",
+    "\xcf\x92"=>"y","\xcf\x93"=>"y","\xcf\x94"=>"y",
+    // Georgian
+    "\xe1\x83\x90"=>"a","\xe1\x83\x91"=>"b","\xe1\x83\x92"=>"g","\xe1\x83\x93"=>"d",
+    "\xe1\x83\x94"=>"e","\xe1\x83\x95"=>"v","\xe1\x83\x96"=>"z","\xe1\x83\x97"=>"th",
+    "\xe1\x83\x98"=>"i","\xe1\x83\x99"=>"p","\xe1\x83\x9a"=>"l","\xe1\x83\x9b"=>"m",
+    "\xe1\x83\x9c"=>"n","\xe1\x83\x9d"=>"o","\xe1\x83\x9e"=>"p","\xe1\x83\x9f"=>"zh",
+    "\xe1\x83\xa0"=>"r","\xe1\x83\xa1"=>"s","\xe1\x83\xa2"=>"t","\xe1\x83\xa3"=>"u",
+    "\xe1\x83\xa4"=>"ph","\xe1\x83\xa5"=>"kh","\xe1\x83\xa6"=>"gh","\xe1\x83\xa7"=>"q",
+    "\xe1\x83\xa8"=>"sh","\xe1\x83\xa9"=>"ch","\xe1\x83\xaa"=>"c","\xe1\x83\xab"=>"dh",
+    "\xe1\x83\xac"=>"w","\xe1\x83\xad"=>"j","\xe1\x83\xae"=>"x","\xe1\x83\xaf"=>"jh",
+    "\xe1\x83\xb0"=>"xh",
+    // Sanskrit
+    "\xe0\xa4\x85\xe0\xa4\x82"=>"amh","\xe0\xa4\x85\xe0\xa4\x83"=>"aq","\xe0\xa4\x95"=>"k","\xe0\xa4\x96"=>"kh",
+    "\xe0\xa4\x85"=>"a","\xe0\xa4\x86"=>"ah",
+    "\xe0\xa4\x87"=>"i","\xe0\xa4\x88"=>"ih","\xe0\xa4\x89"=>"u","\xe0\xa4\x8a"=>"uh",
+    "\xe0\xa4\x8b"=>"ry","\xe0\xa5\xa0"=>"ryh","\xe0\xa4\x8c"=>"ly","\xe0\xa5\xa1"=>"lyh",
+    "\xe0\xa4\x8f"=>"e","\xe0\xa4\x90"=>"ay","\xe0\xa4\x93"=>"o","\xe0\xa4\x94"=>"aw",
+    "\xe0\xa4\x97"=>"g","\xe0\xa4\x98"=>"gh","\xe0\xa4\x99"=>"nh","\xe0\xa4\x9a"=>"c",
+    "\xe0\xa4\x9b"=>"ch","\xe0\xa4\x9c"=>"j","\xe0\xa4\x9d"=>"jh","\xe0\xa4\x9e"=>"ny",
+    "\xe0\xa4\x9f"=>"tq","\xe0\xa4\xa0"=>"tqh","\xe0\xa4\xa1"=>"dq","\xe0\xa4\xa2"=>"dqh",
+    "\xe0\xa4\xa3"=>"nq","\xe0\xa4\xa4"=>"t","\xe0\xa4\xa5"=>"th","\xe0\xa4\xa6"=>"d",
+    "\xe0\xa4\xa7"=>"dh","\xe0\xa4\xa8"=>"n","\xe0\xa4\xaa"=>"p","\xe0\xa4\xab"=>"ph",
+    "\xe0\xa4\xac"=>"b","\xe0\xa4\xad"=>"bh","\xe0\xa4\xae"=>"m","\xe0\xa4\xaf"=>"z",
+    "\xe0\xa4\xb0"=>"r","\xe0\xa4\xb2"=>"l","\xe0\xa4\xb5"=>"v","\xe0\xa4\xb6"=>"sh",
+    "\xe0\xa4\xb7"=>"sqh","\xe0\xa4\xb8"=>"s","\xe0\xa4\xb9"=>"x",
+    // Hebrew - thanks to forum-member iti
+    "\xd7\x90\xd7\x95"=>"ao", "\xd7\x91\xd7\x95"=>"bo",
+   "\xd7\x92\xd7\x95"=>"go", "\xd7\x93\xd7\x95"=>"do",
+   "\xd7\x94\xd7\x95"=>"ho", "\xd7\x95\xd7\x95"=>"v",
+   "\xd7\x96\xd7\x95"=>"zo", "\xd7\x97\xd7\x95"=>"cho",
+   "\xd7\x98\xd7\x95"=>"to", "\xd7\x95\xd7\x99\xd7\x99"=>"vyi",
+   "\xd7\x99\xd7\x95"=>"io", "\xd7\x9a\xd7\x95"=>"kho",
+   "\xd7\x9b\xd7\x95"=>"ko", "\xd7\x9c\xd7\x95"=>"lo",
+   "\xd7\x9e\xd7\x95"=>"mo", "\xd7\xa0\xd7\x95"=>"no",
+   "\xd7\xa1\xd7\x95"=>"so", "\xd7\xa2\xd7\x95"=>"ao",
+   "\xd7\xa4\xd7\x95"=>"po", "\xd7\xa6\xd7\x95"=>"tzo",
+   "\xd7\xa7\xd7\x95"=>"qo", "\xd7\xa8\xd7\x95"=>"ro",
+   "\xd7\xa9\xd7\x95"=>"sho", "\xd7\xaa\xd7\x95"=>"to",
+   "\xd7\x99\xd7\x99"=>"yi", "\xd7\x99\xd7\x95" =>"yo",
+   "\xd7\x90"=>"a", "\xd7\x91"=>"b", "\xd7\x92"=>"g", "\xd7\x93"=>"d",
+   "\xd7\x94"=>"h", "\xd7\x95"=>"v", "\xd7\x96"=>"z", "\xd7\x97"=>"ch",
+   "\xd7\x98"=>"t", "\xd7\x99"=>"i", "\xd7\x9a"=>"kh", "\xd7\x9b"=>"k",
+   "\xd7\x9c"=>"l", "\xd7\x9d"=>"m", "\xd7\x9e"=>"m", "\xd7\x9f"=>"n",
+   "\xd7\xa0"=>"n", "\xd7\xa1"=>"s", "\xd7\xa2"=>"a", "\xd7\xa3"=>"f",
+   "\xd7\xa4"=>"p", "\xd7\xa5"=>"tz", "\xd7\xa6"=>"tz", "\xd7\xa7"=>"q",
+   "\xd7\xa8"=>"r", "\xd7\xa9"=>"sh", "\xd7\xaa"=>"t",
+    // Arabic
+    "\xd8\xa7"=>"a","\xd8\xa8"=>"b","\xd8\xaa"=>"t","\xd8\xab"=>"th",
+    "\xd8\xac"=>"g","\xd8\xad"=>"xh","\xd8\xae"=>"x","\xd8\xaf"=>"d",
+    "\xd8\xb0"=>"dh","\xd8\xb1"=>"r","\xd8\xb2"=>"z","\xd8\xb3"=>"s",
+    "\xd8\xb4"=>"sh","\xd8\xb5"=>"s_","\xd8\xb6"=>"d_","\xd8\xb7"=>"t_",
+    "\xd8\xb8"=>"z_","\xd8\xb9"=>"y","\xd8\xba"=>"gh","\xd9\x81"=>"f",
+    "\xd9\x82"=>"q","\xd9\x83"=>"k","\xd9\x84"=>"l","\xd9\x85"=>"m",
+    "\xd9\x86"=>"n","\xd9\x87"=>"x_","\xd9\x88"=>"u","\xd9\x8a"=>"i",
+    // Japanese hiragana
+    "\xe3\x81\xb3\xe3\x82\x83"=>"bya","\xe3\x81\xb3\xe3\x81\x87"=>"bye","\xe3\x81\xb3\xe3\x81\x83"=>"byi",
+    "\xe3\x81\xb3\xe3\x82\x87"=>"byo","\xe3\x81\xb3\xe3\x82\x85"=>"byu","\xe3\x81\xa1\xe3\x82\x83"=>"tya","\xe3\x81\xa1\xe3\x81\x87"=>"tye",
+    "\xe3\x81\xa1\xe3\x82\x87"=>"tyo","\xe3\x81\xa1\xe3\x82\x85"=>"tyu","\xe3\x81\xa1\xe3\x81\x83"=>"tyi",
+    "\xe3\x81\xa7\xe3\x82\x83"=>"dha","\xe3\x81\xa7\xe3\x81\x87"=>"dhe","\xe3\x81\xa7\xe3\x81\x83"=>"dhi","\xe3\x81\xa7\xe3\x82\x87"=>"dho",
+    "\xe3\x81\xa7\xe3\x82\x85"=>"dhu","\xe3\x81\xa9\xe3\x81\x81"=>"dwa","\xe3\x81\xa9\xe3\x81\x87"=>"dwe","\xe3\x81\xa9\xe3\x81\x83"=>"dwi",
+    "\xe3\x81\xa9\xe3\x81\x89"=>"dwo","\xe3\x81\xa9\xe3\x81\x85"=>"dwu","\xe3\x81\xa2\xe3\x82\x83"=>"dya","\xe3\x81\xa2\xe3\x81\x87"=>"dye",
+    "\xe3\x81\xa2\xe3\x81\x83"=>"dyi","\xe3\x81\xa2\xe3\x82\x87"=>"dyo","\xe3\x81\xa2\xe3\x82\x85"=>"dyu","\xe3\x81\xa2"=>"di",
+    "\xe3\x81\xb5\xe3\x81\x81"=>"fa","\xe3\x81\xb5\xe3\x81\x87"=>"fe","\xe3\x81\xb5\xe3\x81\x83"=>"fi","\xe3\x81\xb5\xe3\x81\x89"=>"fo",
+    "\xe3\x81\xb5\xe3\x81\x85"=>"fwu","\xe3\x81\xb5\xe3\x82\x83"=>"fya","\xe3\x81\xb5\xe3\x82\x87"=>"fyo","\xe3\x81\xb5\xe3\x82\x85"=>"fyu",
+    "\xe3\x81\x8e\xe3\x82\x83"=>"gya","\xe3\x81\x8e\xe3\x81\x87"=>"gye","\xe3\x81\x8e\xe3\x81\x83"=>"gyi","\xe3\x81\x8e\xe3\x82\x87"=>"gyo",
+    "\xe3\x81\x8e\xe3\x82\x85"=>"gyu","\xe3\x81\xb2\xe3\x82\x83"=>"hya","\xe3\x81\xb2\xe3\x81\x87"=>"hye","\xe3\x81\xb2\xe3\x81\x83"=>"hyi",
+    "\xe3\x81\xb2\xe3\x82\x87"=>"hyo","\xe3\x81\xb2\xe3\x82\x85"=>"hyu","\xe3\x81\x98\xe3\x82\x83"=>"ja","\xe3\x81\x98\xe3\x81\x87"=>"je",
+    "\xe3\x81\x98\xe3\x81\x83"=>"zyi","\xe3\x81\x98\xe3\x82\x87"=>"jo","\xe3\x81\x98\xe3\x82\x85"=>"ju","\xe3\x81\x8d\xe3\x82\x83"=>"kya",
+    "\xe3\x81\x8d\xe3\x81\x87"=>"kye","\xe3\x81\x8d\xe3\x81\x83"=>"kyi","\xe3\x81\x8d\xe3\x82\x87"=>"kyo","\xe3\x81\x8d\xe3\x82\x85"=>"kyu",
+    "\xe3\x82\x8a\xe3\x82\x83"=>"rya","\xe3\x82\x8a\xe3\x81\x87"=>"rye","\xe3\x82\x8a\xe3\x81\x83"=>"ryi","\xe3\x82\x8a\xe3\x82\x87"=>"ryo",
+    "\xe3\x82\x8a\xe3\x82\x85"=>"ryu","\xe3\x81\xbf\xe3\x82\x83"=>"mya","\xe3\x81\xbf\xe3\x81\x87"=>"mye","\xe3\x81\xbf\xe3\x81\x83"=>"myi",
+    "\xe3\x81\xbf\xe3\x82\x87"=>"myo","\xe3\x81\xbf\xe3\x82\x85"=>"myu","\xe3\x81\xab\xe3\x82\x83"=>"nya",
+    "\xe3\x81\xab\xe3\x81\x87"=>"nye","\xe3\x81\xab\xe3\x81\x83"=>"nyi","\xe3\x81\xab\xe3\x82\x87"=>"nyo","\xe3\x81\xab\xe3\x82\x85"=>"nyu",
+    "\xe3\x81\xb4\xe3\x82\x83"=>"pya","\xe3\x81\xb4\xe3\x81\x87"=>"pye","\xe3\x81\xb4\xe3\x81\x83"=>"pyi","\xe3\x81\xb4\xe3\x82\x87"=>"pyo",
+    "\xe3\x81\xb4\xe3\x82\x85"=>"pyu","\xe3\x81\x97\xe3\x82\x83"=>"sya","\xe3\x81\x97\xe3\x81\x87"=>"sye","\xe3\x81\x97"=>"si",
+    "\xe3\x81\x97\xe3\x82\x87"=>"syo","\xe3\x81\x97\xe3\x82\x85"=>"syu","\xe3\x81\x99\xe3\x81\x81"=>"swa","\xe3\x81\x99\xe3\x81\x87"=>"swe",
+    "\xe3\x81\x99\xe3\x81\x83"=>"swi","\xe3\x81\x99\xe3\x81\x89"=>"swo","\xe3\x81\x99\xe3\x81\x85"=>"swu","\xe3\x81\x97\xe3\x81\x83"=>"syi",
+    "\xe3\x81\xa6\xe3\x82\x83"=>"tha","\xe3\x81\xa6\xe3\x81\x87"=>"the","\xe3\x81\xa6\xe3\x81\x83"=>"thi","\xe3\x81\xa6\xe3\x82\x87"=>"tho",
+    "\xe3\x81\xa6\xe3\x82\x85"=>"thu","\xe3\x81\xa4\xe3\x82\x83"=>"tsa","\xe3\x81\xa4\xe3\x81\x87"=>"tse","\xe3\x81\xa4\xe3\x81\x83"=>"tsi",
+    "\xe3\x81\xa4\xe3\x82\x87"=>"tso","\xe3\x81\xa4"=>"tu","\xe3\x81\xa8\xe3\x81\x81"=>"twa","\xe3\x81\xa8\xe3\x81\x87"=>"twe",
+    "\xe3\x81\xa8\xe3\x81\x83"=>"twi","\xe3\x81\xa8\xe3\x81\x89"=>"two","\xe3\x81\xa8\xe3\x81\x85"=>"twu","\xe3\x83\xb4\xe3\x82\x83"=>"vya",
+    "\xe3\x83\xb4\xe3\x81\x87"=>"ve","\xe3\x83\xb4\xe3\x81\x83"=>"vi","\xe3\x83\xb4\xe3\x82\x87"=>"vyo","\xe3\x83\xb4\xe3\x82\x85"=>"vyu",
+    "\xe3\x81\x86\xe3\x81\x81"=>"wha","\xe3\x81\x86\xe3\x81\x87"=>"we","\xe3\x81\x86\xe3\x81\x83"=>"wi","\xe3\x81\x86\xe3\x81\x89"=>"who",
+    "\xe3\x81\x86\xe3\x81\x85"=>"whu","\xe3\x82\x91"=>"wye","\xe3\x82\x90"=>"wyi","\xe3\x81\x84\xe3\x81\x87"=>"ye",
+    "\xe3\x82\x93"=>"n","\xe3\x81\x82"=>"a",
+    "\xe3\x81\x88"=>"e","\xe3\x81\x84"=>"yi","\xe3\x81\x8a"=>"o","\xe3\x81\x86"=>"u",
+    "\xe3\x81\xb0"=>"ba","\xe3\x81\xb9"=>"be","\xe3\x81\xb3"=>"bi","\xe3\x81\xbc"=>"bo",
+    "\xe3\x81\xb6"=>"bu","\xe3\x81\xa0"=>"da","\xe3\x81\xa7"=>"de","\xe3\x81\xa9"=>"do",
+    "\xe3\x81\xa5"=>"du","\xe3\x81\xb5"=>"hu","\xe3\x81\x8c"=>"ga","\xe3\x81\x92"=>"ge",
+    "\xe3\x81\x8e"=>"gi","\xe3\x81\x94"=>"go","\xe3\x81\x90"=>"gu","\xe3\x81\xaf"=>"ha",
+    "\xe3\x81\xb8"=>"he","\xe3\x81\xb2"=>"hi","\xe3\x81\xbb"=>"ho","\xe3\x81\x98"=>"zi",
+    "\xe3\x81\x8b"=>"ka","\xe3\x81\x91"=>"ke","\xe3\x81\x8d"=>"ki","\xe3\x81\x93"=>"ko",
+    "\xe3\x81\x8f"=>"ku","\xe3\x82\x89"=>"ra","\xe3\x82\x8c"=>"re","\xe3\x82\x8a"=>"ri",
+    "\xe3\x82\x8d"=>"ro","\xe3\x82\x8b"=>"ru","\xe3\x81\xbe"=>"ma","\xe3\x82\x81"=>"me",
+    "\xe3\x81\xbf"=>"mi","\xe3\x82\x82"=>"mo","\xe3\x82\x80"=>"mu","\xe3\x81\xaa"=>"na",
+    "\xe3\x81\xad"=>"ne","\xe3\x81\xab"=>"ni","\xe3\x81\xae"=>"no","\xe3\x81\xac"=>"nu",
+    "\xe3\x81\xb1"=>"pa","\xe3\x81\xba"=>"pe","\xe3\x81\xb4"=>"pi","\xe3\x81\xbd"=>"po",
+    "\xe3\x81\xb7"=>"pu","\xe3\x81\x95"=>"sa","\xe3\x81\x9b"=>"se","\xe3\x81\x9d"=>"so",
+    "\xe3\x81\x99"=>"su","\xe3\x81\x9f"=>"ta","\xe3\x81\xa6"=>"te","\xe3\x81\xa8"=>"to","\xe3\x81\xa1"=>"ti",
+    "\xe3\x83\xb4\xe3\x81\x81"=>"va","\xe3\x83\xb4\xe3\x81\x89"=>"vo","\xe3\x83\xb4"=>"vu","\xe3\x82\x8f"=>"wa",
+    "\xe3\x82\x92"=>"wo","\xe3\x82\x84"=>"ya","\xe3\x82\x88"=>"yo",
+    "\xe3\x82\x86"=>"yu","\xe3\x81\x96"=>"za","\xe3\x81\x9c"=>"ze","\xe3\x81\x9e"=>"zo",
+    "\xe3\x81\x9a"=>"zu",
+    // Japanese katakana
+    "\xe3\x83\x93\xe3\x83\xa3"=>"bya","\xe3\x83\x93\xe3\x82\xa7"=>"bye",
+    "\xe3\x83\x93\xe3\x82\xa3"=>"byi","\xe3\x83\x93\xe3\x83\xa7"=>"byo","\xe3\x83\x93\xe3\x83\xa5"=>"byu","\xe3\x83\x81\xe3\x83\xa3"=>"tya",
+    "\xe3\x83\x81\xe3\x82\xa7"=>"tye","\xe3\x83\x81"=>"ti","\xe3\x83\x81\xe3\x83\xa7"=>"tyo","\xe3\x83\x81\xe3\x83\xa5"=>"tyu",
+    "\xe3\x83\x81\xe3\x82\xa3"=>"tyi","\xe3\x83\x87\xe3\x83\xa3"=>"dha","\xe3\x83\x87\xe3\x82\xa7"=>"dhe","\xe3\x83\x87\xe3\x82\xa3"=>"dhi",
+    "\xe3\x83\x87\xe3\x83\xa7"=>"dho","\xe3\x83\x87\xe3\x83\xa5"=>"dhu","\xe3\x83\x89\xe3\x82\xa1"=>"dwa","\xe3\x83\x89\xe3\x82\xa7"=>"dwe",
+    "\xe3\x83\x89\xe3\x82\xa3"=>"dwi","\xe3\x83\x89\xe3\x82\xa9"=>"dwo","\xe3\x83\x89\xe3\x82\xa5"=>"dwu","\xe3\x83\x82\xe3\x83\xa3"=>"dya",
+    "\xe3\x83\x82\xe3\x82\xa7"=>"dye","\xe3\x83\x82\xe3\x82\xa3"=>"dyi","\xe3\x83\x82\xe3\x83\xa7"=>"dyo","\xe3\x83\x82\xe3\x83\xa5"=>"dyu",
+    "\xe3\x83\x95\xe3\x82\xa1"=>"fa","\xe3\x83\x95\xe3\x82\xa7"=>"fe","\xe3\x83\x95\xe3\x82\xa3"=>"fi",
+    "\xe3\x83\x95\xe3\x82\xa9"=>"fo","\xe3\x83\x95\xe3\x82\xa5"=>"fwu","\xe3\x83\x95\xe3\x83\xa3"=>"fya","\xe3\x83\x95\xe3\x83\xa7"=>"fyo",
+    "\xe3\x83\x95\xe3\x83\xa5"=>"fyu","\xe3\x82\xae\xe3\x83\xa3"=>"gya","\xe3\x82\xae\xe3\x82\xa7"=>"gye","\xe3\x82\xae\xe3\x82\xa3"=>"gyi",
+    "\xe3\x82\xae\xe3\x83\xa7"=>"gyo","\xe3\x82\xae\xe3\x83\xa5"=>"gyu","\xe3\x83\x92\xe3\x83\xa3"=>"hya","\xe3\x83\x92\xe3\x82\xa7"=>"hye",
+    "\xe3\x83\x92\xe3\x82\xa3"=>"hyi","\xe3\x83\x92\xe3\x83\xa7"=>"hyo","\xe3\x83\x92\xe3\x83\xa5"=>"hyu","\xe3\x82\xb8\xe3\x83\xa3"=>"ja",
+    "\xe3\x82\xb8\xe3\x82\xa7"=>"je","\xe3\x82\xb8\xe3\x82\xa3"=>"zyi","\xe3\x82\xb8\xe3\x83\xa7"=>"jo","\xe3\x82\xb8\xe3\x83\xa5"=>"ju",
+    "\xe3\x82\xad\xe3\x83\xa3"=>"kya","\xe3\x82\xad\xe3\x82\xa7"=>"kye","\xe3\x82\xad\xe3\x82\xa3"=>"kyi","\xe3\x82\xad\xe3\x83\xa7"=>"kyo",
+    "\xe3\x82\xad\xe3\x83\xa5"=>"kyu","\xe3\x83\xaa\xe3\x83\xa3"=>"rya","\xe3\x83\xaa\xe3\x82\xa7"=>"rye","\xe3\x83\xaa\xe3\x82\xa3"=>"ryi",
+    "\xe3\x83\xaa\xe3\x83\xa7"=>"ryo","\xe3\x83\xaa\xe3\x83\xa5"=>"ryu","\xe3\x83\x9f\xe3\x83\xa3"=>"mya","\xe3\x83\x9f\xe3\x82\xa7"=>"mye",
+    "\xe3\x83\x9f\xe3\x82\xa3"=>"myi","\xe3\x83\x9f\xe3\x83\xa7"=>"myo","\xe3\x83\x9f\xe3\x83\xa5"=>"myu","\xe3\x83\xb3"=>"n",
+    "\xe3\x83\x8b\xe3\x83\xa3"=>"nya","\xe3\x83\x8b\xe3\x82\xa7"=>"nye","\xe3\x83\x8b\xe3\x82\xa3"=>"nyi","\xe3\x83\x8b\xe3\x83\xa7"=>"nyo",
+    "\xe3\x83\x8b\xe3\x83\xa5"=>"nyu","\xe3\x83\x94\xe3\x83\xa3"=>"pya","\xe3\x83\x94\xe3\x82\xa7"=>"pye","\xe3\x83\x94\xe3\x82\xa3"=>"pyi",
+    "\xe3\x83\x94\xe3\x83\xa7"=>"pyo","\xe3\x83\x94\xe3\x83\xa5"=>"pyu","\xe3\x82\xb7\xe3\x83\xa3"=>"sya","\xe3\x82\xb7\xe3\x82\xa7"=>"sye",
+    "\xe3\x82\xb7\xe3\x83\xa7"=>"syo","\xe3\x82\xb7\xe3\x83\xa5"=>"syu","\xe3\x82\xb9\xe3\x82\xa1"=>"swa",
+    "\xe3\x82\xb9\xe3\x82\xa7"=>"swe","\xe3\x82\xb9\xe3\x82\xa3"=>"swi","\xe3\x82\xb9\xe3\x82\xa9"=>"swo","\xe3\x82\xb9\xe3\x82\xa5"=>"swu",
+    "\xe3\x82\xb7\xe3\x82\xa3"=>"syi","\xe3\x83\x86\xe3\x83\xa3"=>"tha","\xe3\x83\x86\xe3\x82\xa7"=>"the","\xe3\x83\x86\xe3\x82\xa3"=>"thi",
+    "\xe3\x83\x86\xe3\x83\xa7"=>"tho","\xe3\x83\x86\xe3\x83\xa5"=>"thu","\xe3\x83\x84\xe3\x83\xa3"=>"tsa","\xe3\x83\x84\xe3\x82\xa7"=>"tse",
+    "\xe3\x83\x84\xe3\x82\xa3"=>"tsi","\xe3\x83\x84\xe3\x83\xa7"=>"tso","\xe3\x83\x84"=>"tu","\xe3\x83\x88\xe3\x82\xa1"=>"twa",
+    "\xe3\x83\x88\xe3\x82\xa7"=>"twe","\xe3\x83\x88\xe3\x82\xa3"=>"twi","\xe3\x83\x88\xe3\x82\xa9"=>"two","\xe3\x83\x88\xe3\x82\xa5"=>"twu",
+    "\xe3\x83\xb4\xe3\x83\xa3"=>"vya","\xe3\x83\xb4\xe3\x82\xa7"=>"ve","\xe3\x83\xb4\xe3\x82\xa3"=>"vi","\xe3\x83\xb4\xe3\x83\xa7"=>"vyo",
+    "\xe3\x83\xb4\xe3\x83\xa5"=>"vyu","\xe3\x82\xa6\xe3\x82\xa1"=>"wha","\xe3\x82\xa6\xe3\x82\xa7"=>"we","\xe3\x82\xa6\xe3\x82\xa3"=>"wi",
+    "\xe3\x82\xa6\xe3\x82\xa9"=>"who","\xe3\x82\xa6\xe3\x82\xa5"=>"whu","\xe3\x83\xb1"=>"wye","\xe3\x83\xb0"=>"wyi",
+    "\xe3\x83\x82"=>"di","\xe3\x82\xb7"=>"si",
+    "\xe3\x82\xa2"=>"a","\xe3\x82\xa8"=>"e","\xe3\x82\xa4"=>"yi","\xe3\x82\xaa"=>"o",
+    "\xe3\x82\xa6"=>"u","\xe3\x83\x90"=>"ba","\xe3\x83\x99"=>"be","\xe3\x83\x93"=>"bi",
+    "\xe3\x83\x9c"=>"bo","\xe3\x83\x96"=>"bu","\xe3\x83\x80"=>"da","\xe3\x83\x87"=>"de",
+    "\xe3\x83\x89"=>"do","\xe3\x83\x85"=>"du","\xe3\x83\x95"=>"hu","\xe3\x82\xac"=>"ga",
+    "\xe3\x82\xb2"=>"ge","\xe3\x82\xae"=>"gi","\xe3\x82\xb4"=>"go","\xe3\x82\xb0"=>"gu",
+    "\xe3\x83\x8f"=>"ha","\xe3\x83\x98"=>"he","\xe3\x83\x92"=>"hi","\xe3\x83\x9b"=>"ho",
+    "\xe3\x82\xb8"=>"zi","\xe3\x82\xab"=>"ka","\xe3\x82\xb1"=>"ke","\xe3\x82\xad"=>"ki",
+    "\xe3\x82\xb3"=>"ko","\xe3\x82\xaf"=>"ku","\xe3\x83\xa9"=>"ra","\xe3\x83\xac"=>"re",
+    "\xe3\x83\xaa"=>"ri","\xe3\x83\xad"=>"ro","\xe3\x83\xab"=>"ru","\xe3\x83\x9e"=>"ma",
+    "\xe3\x83\xa1"=>"me","\xe3\x83\x9f"=>"mi","\xe3\x83\xa2"=>"mo","\xe3\x83\xa0"=>"mu",
+    "\xe3\x83\x8a"=>"na","\xe3\x83\x8d"=>"ne","\xe3\x83\x8b"=>"ni","\xe3\x83\x8e"=>"no",
+    "\xe3\x83\x8c"=>"nu","\xe3\x83\x91"=>"pa","\xe3\x83\x9a"=>"pe","\xe3\x83\x94"=>"pi",
+    "\xe3\x83\x9d"=>"po","\xe3\x83\x97"=>"pu","\xe3\x82\xb5"=>"sa","\xe3\x82\xbb"=>"se",
+    "\xe3\x82\xbd"=>"so","\xe3\x82\xb9"=>"su","\xe3\x82\xbf"=>"ta","\xe3\x83\x86"=>"te",
+    "\xe3\x83\x88"=>"to","\xe3\x83\xb4\xe3\x82\xa1"=>"va","\xe3\x83\xb4\xe3\x82\xa9"=>"vo","\xe3\x83\xaf"=>"wa",
+    "\xe3\x83\xb2"=>"wo","\xe3\x83\xa4"=>"ya","\xe3\x82\xa4\xe3\x82\xa7"=>"ye","\xe3\x83\xa8"=>"yo",
+    "\xe3\x83\xa6"=>"yu","\xe3\x82\xb6"=>"za","\xe3\x82\xbc"=>"ze","\xe3\x82\xbe"=>"zo",
+    "\xe3\x82\xba"=>"zu","\xe3\x83\xbc"=>"-",
+    // Thai
+    "\xe0\xb8\xb5\xe0\xb8\xa2\xe0\xb8\xb0"=>"ia",
+    "\xe0\xb8\xb5\xe0\xb8\xa2"=>"ia","\xe0\xb8\xb7\xe0\xb8\xad\xe0\xb8\xb0"=>"uea","\xe0\xb8\xb7\xe0\xb8\xad"=>"uea","\xe0\xb8\xb1\xe0\xb8\xa7\xe0\xb8\xb0"=>"ua",
+    "\xe0\xb8\xb1\xe0\xb8\xa7"=>"ua","\xe0\xb8\xa3\xe0\xb8\xa3"=>"a","\xe0\xb8\xa6\xe0\xb9\x85"=>"lue","\xe0\xb9\x83"=>"ai",
+    "\xe0\xb9\x84"=>"ai","\xe0\xb8\xb1\xe0\xb8\xa2"=>"ai","\xe0\xb8\xb2\xe0\xb8\xa2"=>"ai","\xe0\xb8\xb2\xe0\xb8\xa7"=>"ao",
+    "\xe0\xb8\xb8\xe0\xb8\xa2"=>"ui","\xe0\xb8\xad\xe0\xb8\xa2"=>"oi","\xe0\xb8\xb7\xe0\xb8\xad\xe0\xb8\xa2"=>"ueai","\xe0\xb8\xa7\xe0\xb8\xa2"=>"uai",
+    "\xe0\xb8\x81"=>"k","\xe0\xb8\x82"=>"kh","\xe0\xb8\x83"=>"kh","\xe0\xb8\x84"=>"kh",
+    "\xe0\xb8\x85"=>"kh","\xe0\xb8\x86"=>"kh","\xe0\xb8\x87"=>"ng","\xe0\xb8\x88"=>"ch",
+    "\xe0\xb8\x89"=>"ch","\xe0\xb8\x8a"=>"ch","\xe0\xb8\x8b"=>"s","\xe0\xb8\x8c"=>"ch",
+    "\xe0\xb8\x8d"=>"y","\xe0\xb8\x8e"=>"d","\xe0\xb8\x8f"=>"t","\xe0\xb8\x90"=>"th",
+    "\xe0\xb8\x91"=>"d","\xe0\xb8\x92"=>"th","\xe0\xb8\x93"=>"n","\xe0\xb8\x94"=>"d",
+    "\xe0\xb8\x95"=>"t","\xe0\xb8\x96"=>"th","\xe0\xb8\x97"=>"th","\xe0\xb8\x98"=>"th",
+    "\xe0\xb8\x99"=>"n","\xe0\xb8\x9a"=>"b","\xe0\xb8\x9b"=>"p","\xe0\xb8\x9c"=>"ph",
+    "\xe0\xb8\x9d"=>"f","\xe0\xb8\x9e"=>"ph","\xe0\xb8\x9f"=>"f","\xe0\xb8\xa0"=>"ph",
+    "\xe0\xb8\xa1"=>"m","\xe0\xb8\xa2"=>"y","\xe0\xb8\xa3"=>"r","\xe0\xb8\xa4"=>"rue",
+    "\xe0\xb8\xa4\xe0\xb9\x85"=>"rue","\xe0\xb8\xa5"=>"l","\xe0\xb8\xa6"=>"lue","\xe0\xb8\xa7"=>"w",
+    "\xe0\xb8\xa8"=>"s","\xe0\xb8\xa9"=>"s","\xe0\xb8\xaa"=>"s","\xe0\xb8\xab"=>"h",
+    "\xe0\xb8\xac"=>"l","\xe0\xb8\xae"=>"h","\xe0\xb8\xb0"=>"a","\xe0\xb8\xb1"=>"a",
+    "\xe0\xb8\xb2"=>"a","\xe0\xb9\x85"=>"a","\xe0\xb8\xb3"=>"am","\xe0\xb9\x8d\xe0\xb8\xb2"=>"am",
+    "\xe0\xb8\xb4"=>"i","\xe0\xb8\xb5"=>"ue","\xe0\xb8\xb6"=>"ue","\xe0\xb8\xb8"=>"u",
+    "\xe0\xb8\xb9"=>"u","\xe0\xb9\x80"=>"e","\xe0\xb9\x81"=>"ae","\xe0\xb9\x82"=>"o",
+    "\xe0\xb8\xad"=>"o","\xe0\xb8\xb4\xe0\xb8\xa7"=>"io","\xe0\xb9\x87\xe0\xb8\xa7"=>"eo","\xe0\xb8\xb5\xe0\xb8\xa2\xe0\xb8\xa7"=>"iao",
+    "\xe0\xb9\x88"=>"","\xe0\xb9\x89"=>"","\xe0\xb9\x8a"=>"","\xe0\xb9\x8b"=>"",
+    "\xe0\xb9\x87"=>"","\xe0\xb9\x8c"=>"","\xe0\xb9\x8e"=>"","\xe0\xb9\x8d"=>"",
+    "\xe0\xb8\xba"=>"","\xe0\xb9\x86"=>"2","\xe0\xb9\x8f"=>"o","\xe0\xb8\xaf"=>"-",
+    "\xe0\xb9\x9a"=>"-","\xe0\xb9\x9b"=>"-","\xe0\xb9\x90"=>"0","\xe0\xb9\x91"=>"1",
+    "\xe0\xb9\x92"=>"2","\xe0\xb9\x93"=>"3","\xe0\xb9\x94"=>"4","\xe0\xb9\x95"=>"5",
+    "\xe0\xb9\x96"=>"6","\xe0\xb9\x97"=>"7","\xe0\xb9\x98"=>"8","\xe0\xb9\x99"=>"9",
+    // Korean
+    "\xe3\x84\xb1"=>"k","\xe3\x85\x8b"=>"kh","\xe3\x84\xb2"=>"kk",
+    "\xe3\x84\xb7"=>"t","\xe3\x85\x8c"=>"th","\xe3\x84\xb8"=>"tt","\xe3\x85\x82"=>"p",
+    "\xe3\x85\x8d"=>"ph","\xe3\x85\x83"=>"pp","\xe3\x85\x88"=>"c","\xe3\x85\x8a"=>"ch",
+    "\xe3\x85\x89"=>"cc","\xe3\x85\x85"=>"s","\xe3\x85\x86"=>"ss","\xe3\x85\x8e"=>"h",
+    "\xe3\x85\x87"=>"ng","\xe3\x84\xb4"=>"n","\xe3\x84\xb9"=>"l","\xe3\x85\x81"=>"m",
+    "\xe3\x85\x8f"=>"a","\xe3\x85\x93"=>"e","\xe3\x85\x97"=>"o","\xe3\x85\x9c"=>"wu",
+    "\xe3\x85\xa1"=>"u","\xe3\x85\xa3"=>"i","\xe3\x85\x90"=>"ay","\xe3\x85\x94"=>"ey",
+    "\xe3\x85\x9a"=>"oy","\xe3\x85\x98"=>"wa","\xe3\x85\x9d"=>"we","\xe3\x85\x9f"=>"wi",
+    "\xe3\x85\x99"=>"way","\xe3\x85\x9e"=>"wey","\xe3\x85\xa2"=>"uy","\xe3\x85\x91"=>"ya",
+    "\xe3\x85\x95"=>"ye","\xe3\x85\x9b"=>"oy","\xe3\x85\xa0"=>"yu","\xe3\x85\x92"=>"yay",
+    "\xe3\x85\x96"=>"yey"
+);

Property changes on: trunk/framework/charsets_table.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.admin.php
===================================================================
--- trunk/framework/class.admin.php	(nonexistent)
+++ trunk/framework/class.admin.php	(revision 2)
@@ -0,0 +1,605 @@
+<?php
+/**
+ *
+ * @category        framewotk
+ * @package         backend admin
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+if (!class_exists('wb', false)) {require(WB_PATH.'/framework/class.wb.php');}
+
+// Get WB version
+require_once(ADMIN_PATH.'/interface/version.php');
+
+// Include EditArea wrapper functions
+// require_once(WB_PATH . '/include/editarea/wb_wrapper_edit_area.php');
+//require_once(WB_PATH . '/framework/SecureForm.php');
+
+
+class admin extends wb {
+
+    private $section_name;
+    private $section_permission;
+
+    // Authenticate user then auto print the header
+    public function __construct($section_name= '##skip##', $section_permission = 'start', $auto_header = true, $auto_auth = true)
+    {
+        parent::__construct(1);
+    if( $section_name != '##skip##' )
+    {
+        global $database, $MESSAGE;
+        $database = @$GLOBALS['database'];
+        // Specify the current applications name
+        $this->section_name = $section_name;
+        $this->section_permission = $section_permission;
+        $maintance = ( defined( 'SYSTEM_LOCKED') && ( SYSTEM_LOCKED == true) ? true : false);
+        // Authenticate the user for this application
+        if($auto_auth == true)
+        {
+            // First check if the user is logged-in
+            if($this->is_authenticated() == false)
+            {
+                header('Location: '.ADMIN_URL.'/login/index.php');
+                exit(0);
+            }
+
+            // Now check if they are allowed in this section
+            if($this->get_permission($section_permission) == false) {
+                die($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES']);
+            }
+        }
+        if( ( $maintance == true) || $this->get_session( 'USER_ID') != 1) {
+          //  check for show maintenance screen and terminate if needed
+          $this->ShowMaintainScreen( 'locked');
+        }
+
+        // Check if the backend language is also the selected language. If not, send headers again.
+        $sql  = 'SELECT `language` FROM `'.TABLE_PREFIX.'users` ';
+        $sql .= 'WHERE `user_id`='.(int)$this->get_user_id();
+        $user_language = $database->get_one($sql);
+        $admin_folder = str_replace(WB_PATH, '', ADMIN_PATH);
+        if((LANGUAGE != $user_language) && file_exists(WB_PATH .'/languages/' .$user_language .'.php')
+            && strpos($_SERVER['SCRIPT_NAME'],$admin_folder.'/') !== false) {
+            // check if page_id is set
+            $page_id_url = (isset($_GET['page_id'])) ? '&page_id=' .(int) $_GET['page_id'] : '';
+            $section_id_url = (isset($_GET['section_id'])) ? '&section_id=' .(int) $_GET['section_id'] : '';
+            $sScriptUrl = $_SERVER['SCRIPT_NAME'];
+            if(isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { // check if there is an query-string
+                header('Location: '.$sScriptUrl.'?lang='.$user_language .$page_id_url .$section_id_url.'&'.$_SERVER['QUERY_STRING']);
+            } else {
+                header('Location: '.$sScriptUrl.'?lang='.$user_language .$page_id_url .$section_id_url);
+            }
+            exit();
+        }
+
+        // Auto header code
+        if($auto_header == true) {
+            $this->print_header();
+        }
+    }
+    }
+
+    private function mysqlVersion() {
+      global $database;
+      $sql = 'SELECT VERSION( ) AS versionsinfo';
+      if( $oRes = ($database->query($sql)) ) {
+          $aRes = $oRes->fetchRow(MYSQLI_ASSOC);
+          return $aRes['versionsinfo'];
+      }
+      return 0;
+    }
+
+    private function mysqlStrict() {
+      global $database;
+      $retVal ='';
+      $sql = 'SELECT @@global.sql_mode AS strictinfo';
+      if( $oRes = ($database->query($sql)) ) {
+          $aRes = $oRes->fetchRow(MYSQLI_ASSOC);
+          $retVal = $aRes['strictinfo'];
+      }
+      return is_numeric( strpos( $retVal,'STRICT' ) );
+    }
+
+    public function print_info (){
+        global $MENU, $MESSAGE, $TEXT, $database;
+// Create new template object with phplib
+        $oTpl = new Template(dirname($this->correct_theme_source('call_help.htt')));
+        $oTpl->set_file('page', 'call_help.htt');
+        $oTpl->set_block('page', 'main_block', 'main');
+        $aLang = array(
+            'CANCEL' => $TEXT['CANCEL'],
+            'TITLE_INFO' => 'WebsiteBaker System-Info',
+
+        );
+        $aTplDefaults = array(
+            'ADMIN_URL' => ADMIN_URL.'',
+            'INFO_URL' => ADMIN_URL.'/start/wb_info.php',
+            'sAddonThemeUrl' => THEME_URL.'',
+        );
+        $oTpl->set_var($aLang);
+        $oTpl->set_var($aTplDefaults);
+/*-- finalize the page -----------------------------------------------------------------*/
+        $oTpl->parse('main', 'main_block', false);
+        $oTpl->pparse('output', 'page');
+
+    }
+
+    // Print the admin header
+    public function print_header($body_tags = '') {
+        // Get vars from the language file
+        global $MENU, $MESSAGE, $TEXT, $database;
+        // Connect to database and get website title
+        // $GLOBALS['FTAN'] = $this->getFTAN();
+//        $this->createFTAN();
+        $sql = 'SELECT `value` FROM `'.TABLE_PREFIX.'settings` '
+             . 'WHERE `name`=\'website_title\'';
+        $get_title = $database->query($sql);
+        $aWebsiteTitle= $get_title->fetchRow( MYSQLI_ASSOC );
+        // Setup template object, parse vars to it, then parse it
+        $header_template = new Template(dirname($this->correct_theme_source('header.htt')));
+        $header_template->set_file('page', 'header.htt');
+        $header_template->set_block('page', 'header_block', 'header');
+        if(defined('DEFAULT_CHARSET')) {
+            $charset=DEFAULT_CHARSET;
+        } else {
+            $charset='utf-8';
+        }
+
+        // work out the URL for the 'View menu' link in the WB backend
+        // if the page_id is set, show this page otherwise show the root directory of WB
+        $view_url = WB_URL;
+        $info_url = ($this->get_user_id()==1 ? ADMIN_URL.'/start/info.php':ADMIN_URL);
+        if(isset($_GET['page_id'])) {
+            // extract page link from the database
+            $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` '
+                 . 'WHERE `page_id`='.intval($_GET['page_id']);
+            $result = @$database->query($sql);
+            $row = @$result->fetchRow( MYSQLI_ASSOC );
+            if($row) $view_url .= PAGES_DIRECTORY .$row['link']. PAGE_EXTENSION;
+        }
+
+
+        $convertToReadableSize = function ($size){
+          $base = log($size) / log(1024);
+          $suffix = array("", " KB", " MB", " GB", " TB");
+          $f_base = floor($base);
+          return round(pow(1024, $base - floor($base)), 1) . $suffix[$f_base];
+        };
+
+        $sIconPost = '0';
+        $aFileStat = array();
+        $sErrorlogFile = WB_PATH.'/var/logs/php_error.log.php';
+        $sErrorlogUrl  = WB_URL.'/var/logs/php_error.log.php';
+        if (is_readable($sErrorlogFile)){
+            clearstatcache($sErrorlogFile);
+            $iFileSize = filesize($sErrorlogFile);
+            $sIconPost = (($iFileSize>3000)?'1':'0');
+        }
+        $header_template->set_var('ERROR_SIZE', $convertToReadableSize($iFileSize)); //
+//        $header_template->set_var('ERROR_MSG', $sErrorlogMsg); //
+        $header_template->set_var('ERROR_LOG', $sErrorlogUrl); // $sErrorlogUrl
+        $header_template->set_var('POST',$sIconPost);
+
+        $datalist['Header'] =
+                      array(
+                            'FTAN_GET' => ( DEBUG ? $this->getFTAN('GET') : '' ),
+                            'SECTION_NAME'        => $MENU[strtoupper($this->section_name)],
+                            'TEMPLATE_DIR'        => DEFAULT_THEME,
+                            'STYLE'               => strtolower($this->section_name),
+                            'BODY_TAGS'           => $body_tags,
+                            'WEBSITE_TITLE'       => ($aWebsiteTitle['value']),
+                            'TEXT_ADMINISTRATION' => $TEXT['ADMINISTRATION'],
+                            'CURRENT_USER'        => $MESSAGE['START_CURRENT_USER'],
+                            'DISPLAY_NAME'        => $this->get_display_name(),
+                            'CHARSET'             => $charset,
+                            'LANGUAGE'            => strtolower(LANGUAGE),
+                            'WB_URL'              => WB_URL,
+                            'ADMIN_URL'           => ADMIN_URL,
+                            'THEME_URL'           => THEME_URL,
+                            'TEMPLATE'            => defined('TEMPLATE')?TEMPLATE:DEFAULT_TEMPLATE,
+                            'EDITOR'              => WYSIWYG_EDITOR,
+                            'TITLE_START'         => $MENU['START'],
+                            'TITLE_VIEW'          => $MENU['VIEW'],
+                            'TITLE_HELP'          => $MENU['HELP'],
+                            'TITLE_INFO'          => 'WebsiteBaker System-Info',
+                            'TITLE_LOGOUT'        =>  $MENU['LOGOUT'],
+                            'URL_VIEW'            => $view_url,
+                            'INFO_URL'            => $info_url,
+                            'URL_HELP'            => 'http://help.websitebaker.org/',
+                            'BACKEND_MODULE_CSS'  => $this->register_backend_modfiles('css'),    // adds backend.css
+                            'BACKEND_MODULE_JS'   => $this->register_backend_modfiles('js')      // adds backend.js
+                        );
+
+/*------------------------------------------------------------------------------------*/
+    $header_template->set_var($datalist['Header'] );
+    $header_template->set_block( 'header_block', 'maintenance_block', 'maintenance');
+    if( $this->get_user_id() == 1) {
+
+      $sys_locked = ( ( ( int)( defined( 'SYSTEM_LOCKED') ? SYSTEM_LOCKED : 0)) == 1);
+      $header_template->set_var( 'MAINTENANCE_MODE', ( $sys_locked ? $this->_oTrans->TEXT_MAINTENANCE_OFF :
+        $this->_oTrans->TEXT_MAINTENANCE_ON));
+      $header_template->set_var( 'MAINTENANCE_ICON', THEME_URL.'/images/'.( $sys_locked ? 'lock' :
+        'unlock').'.png');
+      $header_template->set_var( 'MAINTAINANCE_URL', ADMIN_URL.'/settings/locking.php');
+      $header_template->parse( 'maintenance', 'maintenance_block', true);
+    } else {
+      $header_template->set_block( 'maintenance_block', '');
+    }
+/*------------------------------------------------------------------------------------*/
+
+        // Create the backend menu
+        $aMenu = array(
+//                    array(ADMIN_URL.'/start/index.php',               '', $MENU['START'],       'start',       1),
+                    array(ADMIN_URL.'/pages/index.php',               '', $MENU['PAGES'],       'pages',       1),
+                    array(ADMIN_URL.'/media/index.php',               '', $MENU['MEDIA'],       'media',       1),
+                    array(ADMIN_URL.'/addons/index.php',              '', $MENU['ADDONS'],      'addons',      1),
+                    array(ADMIN_URL.'/preferences/index.php',         '', $MENU['PREFERENCES'], 'preferences', 0),
+                    array(ADMIN_URL.'/settings/index.php?advanced=0', '', $MENU['SETTINGS'],    'settings',    1),
+                    array(ADMIN_URL.'/admintools/index.php',          '', $MENU['ADMINTOOLS'],  'admintools',  1),
+                    array(ADMIN_URL.'/access/index.php',              '', $MENU['ACCESS'],      'access',      1),
+                    );
+        $header_template->set_block('header_block', 'linkBlock', 'link');
+        foreach($aMenu AS $menu_item)
+        {
+            $link = $menu_item[0];
+            $target = ($menu_item[1] == '') ? '_self' : $menu_item[1];
+            $titleMenu = $menu_item[2];
+            $permission_title = $menu_item[3];
+            $required = $menu_item[4];
+            $replace_old = array(ADMIN_URL, WB_URL, '/', 'index.php');
+            if ($required == false || $this->get_link_permission($permission_title)) {
+                $header_template->set_var('LINK', $link);
+                $header_template->set_var('TARGET', $target);
+                // If link is the current section apply a class name
+                if ($permission_title == strtolower($this->section_name)) {
+                    $info_url = ($this->get_user_id()==1 ? ADMIN_URL.'/start/info.php?url='.$link:ADMIN_URL);
+                    $header_template->set_var('CLASS', $menu_item[3] . ' current');
+                } else {
+                    $header_template->set_var('CLASS', $menu_item[3]);
+                }
+                $header_template->set_var('TITLE', $titleMenu);
+                // Print link
+                $header_template->parse('link', 'linkBlock', true);
+                $header_template->set_block('header_block', 'infoBlockBasis',   'infoBasis');
+                $header_template->set_block('header_block', 'infoBlockExented', 'infoExented');
+
+                $header_template->set_block('header_block', 'button_info_block', 'button_info');
+                $bCanShowInfoBlock = (DEBUG&&$this->ami_group_member('1') || ($this->get_user_id()=='1'));
+                if (!$bCanShowInfoBlock){
+                    $header_template->set_block('button_info', '');
+                } else {
+                    $header_template->parse('button_info', 'button_info_block', true);
+                }
+                if ((strtolower($this->section_name) == 'admintools') && (!$bCanShowInfoBlock))
+                {
+//                    print ($this->section_name).'<br />';
+                    $header_template->set_block('infoBasis', '');
+                    $header_template->set_var( array(
+                                        'VERSION'             => WB_VERSION,
+                                        'SP'                  => (defined('WB_SP') ? WB_SP : ''),
+                                        'REVISION'            => WB_REVISION,
+                                        'PHP_VERSION'         => phpversion(),
+                                        'TEXT_EXT_INFO'       => 'SQL  Server:',
+                                        'EXT_INFO'            => $this->mysqlVersion(),
+                                        'EXT_INFO1'           => ( ($this->mysqlStrict())?'STRICT': 'NON STRICT' ),
+                                    ) );
+
+                    $header_template->parse('infoExented', 'infoBlockExented', true);
+                } else {
+//                    print '<b>'.$menu_item[3].'/<b><br />';
+//                    $header_template->set_block('infoExented', '');
+                    $header_template->set_block('infoExented', '');
+                    $header_template->set_var( array(
+                                        'VERSION'             => VERSION,
+                                        'SP'                  => (defined('SP') ? SP : ''),
+                                        'REVISION'            => REVISION,
+                                        'PHP_VERSION'         => phpversion(),
+                                        'SERVER_ADDR'         => ($this->get_user_id() == 1
+                                                                   ? (!isset($_SERVER['SERVER_ADDR'])
+                                                                      ? '127.0.0.1'
+                                                                      : $_SERVER['SERVER_ADDR'])
+                                                                  : ''),
+                                    ) );
+                    $header_template->parse('infoBasis', 'infoBlockBasis', true);
+                }
+            }
+        }
+
+        $header_template->parse('header', 'header_block', false);
+        $header_template->pparse('output', 'page');
+    }
+
+    // Print the admin footer
+        public function print_footer($activateJsAdmin = false) {
+        // include the required file for Javascript admin
+        if($activateJsAdmin != false) {
+            if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php')){
+                @include_once(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+            }
+        }
+
+        // Setup template object, parse vars to it, then parse it
+        $footer_template = new Template(dirname($this->correct_theme_source('footer.htt')));
+        $footer_template->set_file('page', 'footer.htt');
+        $footer_template->set_block('page', 'footer_block', 'header');
+        $footer_template->set_var(array(
+                        'BACKEND_BODY_MODULE_JS' => $this->register_backend_modfiles_body('js'),
+                        'WB_URL' => WB_URL,
+                        'ADMIN_URL' => ADMIN_URL,
+                        'THEME_URL' => THEME_URL,
+                        'INFO_URL' =>  ADMIN_URL.'/start/wb_info.php',
+             ) );
+        $footer_template->parse('header', 'footer_block', false);
+        $footer_template->pparse('output', 'page');
+    }
+
+    // Return a system permission
+    public function get_permission($name, $type = 'system') {
+        // Append to permission type
+        $type .= '_permissions';
+        // Check if we have a section to check for
+        if($name == 'start') {
+            return true;
+        } else {
+            // Set system permissions var
+            $system_permissions = $this->get_session('SYSTEM_PERMISSIONS');
+            // Set module permissions var
+            $module_permissions = $this->get_session('MODULE_PERMISSIONS');
+            // Set template permissions var
+            $template_permissions = $this->get_session('TEMPLATE_PERMISSIONS');
+            // Return true if system perm = 1
+            if (isset($$type) && is_array($$type) && is_numeric(array_search($name, $$type))) {
+                if($type == 'system_permissions') {
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                if($type == 'system_permissions') {
+                    return false;
+                } else {
+                    return true;
+                }
+            }
+        }
+    }
+
+ public function get_user_details($user_id) {
+  global $database;
+  $retval = array('username'=>'unknown','display_name'=>'Unknown','email'=>'');
+  $sql  = 'SELECT `username`,`display_name`,`email` ';
+  $sql .= 'FROM `'.TABLE_PREFIX.'users` ';
+  $sql .= 'WHERE `user_id`='.(int)$user_id;
+  if( ($resUsers = $database->query($sql)) ) {
+   if( ($recUser = $resUsers->fetchRow(MYSQLI_ASSOC)) ) {
+    $retval = $recUser;
+   }
+  }
+  return $retval;
+ }
+
+    //
+    public function get_section_details( $section_id, $backLink = 'index.php' ) {
+    global $database, $TEXT;
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'sections` ';
+        $sql .= 'WHERE `section_id`='.intval($section_id);
+        if(($resSection = $database->query($sql))){
+            if(!($recSection = $resSection->fetchRow(MYSQLI_ASSOC))) {
+                $this->print_header();
+                $this->print_error($TEXT['SECTION'].' '.$TEXT['NOT_FOUND'], $backLink, true);
+            }
+            } else {
+                $this->print_header();
+                $this->print_error($database->get_error(), $backLink, true);
+            }
+        return $recSection;
+    }
+
+    public function get_page_details( $page_id, $backLink = 'index.php' ) {
+        global $database, $TEXT;
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` ';
+        $sql .= 'WHERE `page_id`='.intval($page_id);
+        if(($resPages = $database->query($sql))){
+            if(!($recPage = $resPages->fetchRow(MYSQLI_ASSOC))) {
+            $this->print_header();
+            $this->print_error($TEXT['PAGE'].' '.$TEXT['NOT_FOUND'], $backLink, true);
+            }
+        } else {
+            $this->print_header();
+            $this->print_error($database->get_error(), $backLink, true);
+        }
+        return $recPage;
+    }
+
+    public function get_page_permission($page,$action='admin') {
+        if($action != 'viewing') { $action = 'admin'; }
+        $action_groups = $action.'_groups';
+        $action_users  = $action.'_users';
+        $groups = $users = '0';
+        if(is_array($page)) {
+            $groups = $page[$action_groups];
+            $users  = $page[$action_users];
+        } else {
+            global $database;
+            $sql  = 'SELECT `'.$action_groups.'`,`'.$action_users.'` ';
+            $sql .= 'FROM `'.TABLE_PREFIX.'pages` ';
+            $sql .= 'WHERE `page_id`='.(int)$page;
+            if( ($res = $database->query($sql)) ) {
+                if( ($rec = $res->fetchRow(MYSQLI_ASSOC)) ) {
+                    $groups = $rec[$action_groups];
+                    $users  = $rec[$action_users];
+                }
+            }
+        }
+        return ($this->ami_group_member($groups) || $this->is_group_match($this->get_user_id(), $users));
+    }
+
+    // Returns a system permission for a menu link
+    public function get_link_permission($title) {
+        $title = str_replace('_blank', '', $title);
+        $title = strtolower($title);
+        // Set system permissions var
+        $system_permissions = $this->get_session('SYSTEM_PERMISSIONS');
+        // Set module permissions var
+        $module_permissions = $this->get_session('MODULE_PERMISSIONS');
+        if($title == 'start') {
+            return true;
+        } else {
+            // Return true if system perm = 1
+            if(is_numeric(array_search($title, $system_permissions))) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
+
+    // Function to add optional module Javascript or CSS stylesheets into the <body> section of the backend
+    public function register_backend_modfiles_body($file_id="js")
+    {
+        $sCallingScript = $_SERVER['SCRIPT_NAME'];
+        $AcpDir = str_replace('\\','/', ADMIN_PATH).'/';
+        if( preg_match( '/'.'pages\/(settings|sections)\.php$/is', $sCallingScript)) {
+          return;
+        }
+        // sanity check of parameter passed to the function
+        $file_id = strtolower($file_id);
+        if($file_id !== "javascript" && $file_id !== "js")
+        {
+            return;
+        }
+        global $database;
+        $body_links = "";
+        // define default baselink and filename for optional module javascript and stylesheet files
+        if($file_id == "js") {
+            $base_link = '<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend_body.js" type="text/javascript"></script>';
+            $base_file = "backend_body.js";
+        }
+        // check if backend_body.js files needs to be included to the <body></body> section of the backend
+        if(isset($_GET['tool']))
+        {
+            // check if displayed page contains a installed admin tool
+            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
+            $sql .= 'WHERE `type`=\'module\' AND `function`=\'tool\' AND `directory`=\''.$database->escapeString($_GET['tool']).'\'';
+            $result = $database->query($sql);
+            if($result->numRows())
+            {
+                // check if admin tool directory contains a backend_body.js file to include
+                $tool = $result->fetchRow(MYSQLI_ASSOC);
+                if(file_exists(WB_PATH .'/modules/' .$tool['directory'] .'/'.$base_file))
+                {
+                    // return link to the backend_body.js file
+                    return str_replace('{MODULE_DIRECTORY}', $tool['directory'], $base_link);
+                }
+            }
+        } elseif(isset($_GET['page_id']) || isset($_POST['page_id']))
+        {
+            // check if displayed page in the backend contains a page module
+            if (isset($_GET['page_id']))
+            {
+                $page_id = (int) $database->escapeString($_GET['page_id']);
+            } else {
+                $page_id = (int) $database->escapeString($_POST['page_id']);
+            }
+            // gather information for all models embedded on actual page
+            $sql = 'SELECT DISTINCT `module` FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.(int)$page_id;
+            $query_modules = $database->query($sql);
+            while($row = $query_modules->fetchRow(MYSQLI_ASSOC)) {
+                // check if page module directory contains a backend_body.js file
+                if(file_exists(WB_PATH .'/modules/' .$row['module'] .'/'.$base_file)) {
+                    // create link with backend_body.js source for the current module
+                    $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
+                    // ensure that backend_body.js is only added once per module type
+                    if(strpos($body_links, $tmp_link) === false) {
+                        $body_links .= $tmp_link ."\n";
+                    }
+                }
+            }
+            // write out links with all external module javascript/CSS files, remove last line feed
+            return rtrim($body_links);
+        }
+    }
+
+
+    // Function to add optional module Javascript or CSS stylesheets into the <head> section of the backend  preg_quote($AcpDir,'/').
+    public function register_backend_modfiles($file_id="css") {
+        $sCallingScript = $_SERVER['SCRIPT_NAME'];
+        $AcpDir = str_replace('\\','/', ADMIN_PATH).'/';
+        if( preg_match( '/'.'pages\/(settings|sections)\.php$/is', $sCallingScript)) {
+          return;
+        }
+        // sanity check of parameter passed to the function
+        $file_id = strtolower($file_id);
+        if($file_id !== "css" && $file_id !== "javascript" && $file_id !== "js") {
+            return;
+        }
+
+        global $database;
+        // define default baselink and filename for optional module javascript and stylesheet files
+        $head_links = "";
+        if($file_id == "css") {
+          $base_link = '<link href="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend.css"';
+            $base_link.= ' rel="stylesheet" type="text/css" media="screen" />';
+            $base_file = "backend.css";
+        } else {
+            $base_link = '<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/backend.js" type="text/javascript"></script>';
+            $base_file = "backend.js";
+        }
+
+        // check if backend.js or backend.css files needs to be included to the <head></head> section of the backend
+        if(isset($_GET['tool'])) {
+            // check if displayed page contains a installed admin tool
+            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'addons` ';
+            $sql .= 'WHERE `type`=\'module\' AND `function`=\'tool\' AND `directory`=\''.$database->escapeString($_GET['tool']).'\'';
+            $result = $database->query($sql);
+            if($result->numRows()) {
+                // check if admin tool directory contains a backend.js or backend.css file to include
+                $tool = $result->fetchRow(MYSQLI_ASSOC);
+                if(file_exists(WB_PATH .'/modules/' .$tool['directory'] .'/'.$base_file)) {
+                    // return link to the backend.js or backend.css file
+                    return str_replace("{MODULE_DIRECTORY}", $tool['directory'], $base_link);
+                }
+            }
+        } elseif(isset($_GET['page_id']) || isset($_POST['page_id'])) {
+            // check if displayed page in the backend contains a page module
+            if (isset($_GET['page_id'])) {
+                $page_id = (int)$_GET['page_id'];
+            } else {
+                $page_id = (int)$_POST['page_id'];
+            }
+            // gather information for all models embedded on actual page
+            $sql = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.(int)$page_id;
+            $query_modules = $database->query($sql);
+            while($row = $query_modules->fetchRow(MYSQLI_ASSOC)) {
+//                if ($row['module']=='wysiwyg') {$row['module']=WYSIWYG_EDITOR;}
+                // check if page module directory contains a backend.js or backend.css file
+                if(file_exists(WB_PATH .'/modules/' .$row['module'] .'/'.$base_file))
+                {
+                    // create link with backend.js or backend.css source for the current module
+                    $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
+                    // ensure that backend.js or backend.css is only added once per module type
+                    if(strpos($head_links, $tmp_link) === false) {
+                        $head_links .= $tmp_link ."\n";
+                    }
+                }
+            }
+            // write out links with all external module javascript/CSS files, remove last line feed
+            return rtrim($head_links);
+        }
+    }
+}

Property changes on: trunk/framework/class.admin.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.database.php
===================================================================
--- trunk/framework/class.database.php	(nonexistent)
+++ trunk/framework/class.database.php	(revision 2)
@@ -0,0 +1,644 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         database
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/*
+Database class
+This class will be used to interface between the database
+and the Website Baker code
+*/
+
+
+    define('DATABASE_CLASS_LOADED', true);
+    // define the old mysql consts for Backward compatibility
+    if (!defined('MYSQL_ASSOC')) {
+        define('MYSQL_ASSOC',                 1);
+        define('MYSQL_NUM',                   2);
+        define('MYSQL_BOTH',                  3);
+        define('MYSQL_CLIENT_COMPRESS',      32);
+        define('MYSQL_CLIENT_IGNORE_SPACE', 256);
+        define('MYSQL_CLIENT_INTERACTIVE', 1024);
+        define('MYSQL_CLIENT_SSL',         2048);
+    }
+
+class database {
+
+    private $db_handle  = null; // readonly from outside
+    private $db_name    = '';
+    private $connected  = false;
+    private $sCharset   = '';
+    private $error      = '';
+    private $error_no   = array();
+    private $error_type = '';
+    private $message    = array();
+    private $sActionFile  = '';
+
+
+    // Set DB_URL
+    function __construct($url = '') {
+        // Connect to database
+        if (!$this->connect()) {
+            throw new DatabaseException($this->get_error());
+        }
+    }
+
+    // Connect to the database   DB_CHARSET
+    function connect() {
+
+        $this->sCharset = strtolower(preg_replace('/[^a-z0-9]/i', '', (defined('DB_CHARSET') ? DB_CHARSET : '')));
+
+        if (defined('DB_PORT')) {
+            $port = DB_PORT;
+        } else {
+            $port = ini_get('mysqli.default_port');
+        }
+        if (!($this->db_handle = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME, $port))) {
+            $this->connected = false;
+            $this->error = mysqli_connect_error();
+        } else {
+            if ($this->sCharset) {
+                @mysqli_query($this->db_handle, 'SET NAMES '.$this->sCharset);
+                mysqli_set_charset($this->db_handle, $this->sCharset);
+            }
+            $this->db_name = DB_NAME;
+            $this->connected = true;
+        }
+        return $this->connected;
+    }
+
+    // Disconnect from the database
+    function disconnect() {
+        if($this->connected==true) {
+            mysqli_close();
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    // Run a query
+    function query($statement) {
+        $mysql = new mysql($this->db_handle);
+        $mysql->query($statement);
+        $this->set_error($mysql->error());
+        if($mysql->error()) {
+            return null;
+        } else {
+            return $mysql;
+        }
+    }
+
+    // Gets the first column of the first row
+    function get_one( $statement )
+    {
+        $fetch_row = mysqli_fetch_array(mysqli_query($this->db_handle, $statement) );
+        $result = $fetch_row[0];
+        $this->set_error(null);
+        if(mysqli_error($this->db_handle)) {
+            $this->set_error(mysqli_error($this->db_handle));
+            return null;
+        } else {
+            return $result;
+        }
+    }
+
+    // Set the DB error
+    function set_error($message = null) {
+        $this->error = $message;
+        $this->error_type = 'unknown';
+        if ($message!=''){
+        }
+    }
+
+    // Return true if there was an error
+    function is_error() {
+        return (!empty($this->error)) ? true : false;
+    }
+
+    // Return the error
+    function get_error() {
+        return $this->error;
+    }
+    // Return the errno
+    function get_errno() {
+        return $this->is_error() ? mysqli_errno($this->db_handle) : 0;
+    }
+/**
+ * default Getter for some properties
+ * @param string $sPropertyName
+ * @return mixed NULL on error or missing property
+ */
+    public function __get($sPropertyName)
+    {
+        switch ($sPropertyName):
+            case 'db_handle':
+            case 'DbHandle':
+                $retval = $this->db_handle;
+                break;
+            case 'db_name':
+            case 'DbName':
+                $retval = $this->db_name;
+                break;
+            default:
+                $retval = null;
+                break;
+        endswitch;
+        return $retval;
+    } // __get()
+/**
+ * Escapes special characters in a string for use in an SQL statement
+ * @param string $unescaped_string
+ * @return string
+ */
+    public function escapeString($unescaped_string)
+    {
+        return mysqli_real_escape_string($this->db_handle, $unescaped_string);
+    }
+/**
+ * Last inserted Id
+ * @return bool|int false on error, 0 if no record inserted
+ */
+    public function getLastInsertId()
+    {
+        return mysqli_insert_id($this->db_handle);
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $field_name: name of the field to seek for
+ * @return bool: true if field exists
+ */
+    public function field_exists($table_name, $field_name)
+    {
+        $bRetval = false;
+        $aMatches = array();
+        $sql = 'DESCRIBE `'.$table_name.'` `'.$field_name.'` ';
+        if (($oQuery = $this->query($sql))) {
+            while (($aRecord = $oQuery->fetchRow(MYSQLI_ASSOC))) {
+                $aMatches[] = $aRecord['Field'];
+            }
+            $bRetval = in_array($field_name, $aMatches);
+        }
+        return $bRetval;
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $index_name: name of the index to seek for
+ * @return bool: true if field exists
+ */
+    public function index_exists($table_name, $index_name, $number_fields = 0)
+    {
+        $number_fields = intval($number_fields);
+        $keys = 0;
+        $sql = 'SHOW INDEX FROM `'.$table_name.'`';
+        if (($res_keys = $this->query($sql))) {
+            while (($rec_key = $res_keys->fetchRow(MYSQLI_ASSOC))) {
+                if ($rec_key['Key_name'] == $index_name ) {
+                    $keys++;
+                }
+            }
+        }
+        if ( $number_fields == 0 ) {
+            return ($keys != $number_fields);
+        } else {
+            return ($keys == $number_fields);
+        }
+    }
+/*
+    public function index_exists1($sTableName, $sIndexName, $number_fields = 0){
+      $sql  = 'SHOW INDEX FROM `'.$sTableName.'` WHERE `Column_name`= \''.$sIndexName.'\'';
+    }
+*/
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $field_name: name of the field to add
+ * @param string $description: describes the new field like ( INT NOT NULL DEFAULT '0')
+ * @return bool: true if successful, otherwise false and error will be set
+ */
+    public function field_add($table_name, $field_name, $description)
+    {
+        if( !$this->field_exists($table_name, $field_name) )
+        { // add new field into a table
+            $sql = 'ALTER TABLE `'.$table_name.'` ADD '.$field_name.' '.$description.' ';
+            $query = $this->query($sql);
+            $this->set_error(mysqli_error($this->db_handle));
+            if( !$this->is_error() )
+            {
+                return ( $this->field_exists($table_name, $field_name) ) ? true : false;
+            }
+        }else
+        {
+            $this->set_error('field \''.$field_name.'\' already exists');
+        }
+        return false;
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $field_name: name of the field to add
+ * @param string $description: describes the new field like ( INT NOT NULL DEFAULT '0')
+ * @return bool: true if successful, otherwise false and error will be set
+ */
+    public function field_modify($table_name, $field_name, $description)
+    {
+        $retval = false;
+        if( $this->field_exists($table_name, $field_name) )
+        { // modify a existing field in a table
+            $sql  = 'ALTER TABLE `'.$table_name.'` MODIFY `'.$field_name.'` '.$description;
+            $retval = ( $this->query($sql) ? true : false);
+            $this->set_error(mysqli_error($this->db_handle));
+        }
+        return $retval;
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $field_name: name of the field to remove
+ * @return bool: true if successful, otherwise false and error will be set
+ */
+    public function field_remove($table_name, $field_name)
+    {
+        $retval = false;
+        if( $this->field_exists($table_name, $field_name) )
+        { // modify a existing field in a table
+            $sql  = 'ALTER TABLE `'.$table_name.'` DROP `'.$field_name.'`';
+            $retval = ( $this->query($sql) ? true : false );
+        }
+        return $retval;
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $index_name: name of the new index (empty string for PRIMARY)
+ * @param string $field_list: comma seperated list of fields for this index
+ * @param string $index_type: kind of index (PRIMARY, UNIQUE, KEY, FULLTEXT)
+ * @return bool: true if successful, otherwise false and error will be set
+ */
+    public function index_add($table_name, $index_name, $field_list, $index_type = 'KEY')
+    {
+       $retval = false;
+       $field_list = explode(',', (str_replace(' ', '', $field_list)));
+       $number_fields = sizeof($field_list);
+       $field_list = '`'.implode('`,`', $field_list).'`';
+       $index_name = (($index_type == 'PRIMARY') ? $index_type : $index_name);
+       if ( $this->index_exists($table_name, $index_name, $number_fields) ||
+            $this->index_exists($table_name, $index_name))
+       {
+           $sql  = 'ALTER TABLE `'.$table_name.'` ';
+           $sql .= 'DROP INDEX `'.$index_name.'`';
+           if (!$this->query($sql)) { return false; }
+       }
+       $sql  = 'ALTER TABLE `'.$table_name.'` ';
+       $sql .= 'ADD '.$index_type.' ';
+       $sql .= (($index_type == 'PRIMARY') ? 'KEY ' : '`'.$index_name.'` ');
+       $sql .= '( '.$field_list.' ); ';
+       if ($this->query($sql)) { $retval = true; }
+       return $retval;
+    }
+
+/*
+ * @param string $table_name: full name of the table (incl. TABLE_PREFIX)
+ * @param string $field_name: name of the field to remove
+ * @return bool: true if successful, otherwise false and error will be set
+ */
+    public function index_remove($table_name, $index_name)
+    {
+        $retval = false;
+        if ($this->index_exists($table_name, $index_name)) {
+        // modify a existing field in a table
+            $sql  = 'ALTER TABLE `'.$table_name.'` DROP INDEX `'.$index_name.'`';
+            $retval = ( $this->query($sql) ? true : false );
+        }
+        return $retval;
+    }
+
+    public function setSqlImportActionFile ( $sCallingScript ){
+       $this->sActionFile = $sCallingScript;
+        trigger_error('Deprecated function call: '.__CLASS__.'::'.__METHOD__, E_USER_DEPRECATED);
+    }
+
+/**
+ * Import a standard *.sql dump file
+ * @param string $sSqlDump link to the sql-dumpfile
+ * @param string $sTablePrefix
+ * @param mixed $mAction
+ *        (bool)true => upgrade (default)
+ *        (bool)false => install
+ *        or command (install|uninstall|upgrade) as string
+ *        or calling script as string
+ * @param string $sTblEngine
+ * @param string $sTblCollation
+ * @return boolean true if import successful
+ */
+    public function SqlImport(
+        $sSqlDump,
+        $sTablePrefix  = '',
+        $mAction       = true,
+        $sTblEngine    = 'MyISAM',
+        $sTblCollation = 'utf8_unicode_ci'
+    ) {
+        $iCount = 0;
+        $sSqlBuffer  = '';
+        $bRetval     = true;
+        $this->error = '';
+        // detect requested action
+        if (is_string($mAction)) {
+            // search for valid command string in $mAction
+            $sAction = strtolower(preg_replace(
+                '/^.*?(uninstall|install|upgrade)(\.[^\.]+)?$/is',
+                '$1',
+                $mAction,
+                -1,
+                $iCount
+            ));
+            $sAction = $iCount ? $sAction : 'upgrade';
+        } else if (is_bool($mAction)) {
+            // on boolean request select true='upgrade' or false='install'
+            $sAction = $mAction ? 'upgrade' : 'install';
+        } else {
+            // select 'upgrade' if no valid command found
+            $sAction = 'upgrade';
+        }
+        // extract charset from given collation
+        $aTmp = preg_split('/_/', $sTblCollation, null, PREG_SPLIT_NO_EMPTY);
+        $sCharset = $aTmp[0];
+        // define placeholders
+        $aSearch[] = '/\{TABLE_PREFIX\}/';                                        /* step 0 */
+        $aSearch[] = '/\{FIELD_CHARSET\}/';                                       /* step 1 */
+        $aSearch[] = '/\{FIELD_COLLATION\}/';                                     /* step 2 */
+        $aSearch[] = '/\{TABLE_ENGINE\}/';                                        /* step 3 */
+        $aSearch[] = '/\{TABLE_ENGINE=([a-zA-Z_0-9]*)\}/';                        /* step 4 */
+        $aSearch[] = '/\{CHARSET\}/';                                             /* step 5 */
+        $aSearch[] = '/\{COLLATION\}/';                                           /* step 6 */
+        // define replacements
+        $aReplace[] = $sTablePrefix;                                              /* step 0 */
+        $aReplace[] = ' CHARACTER SET {CHARSET}';                                 /* step 1 */
+        $aReplace[] = ' COLLATE {COLLATION}';                                     /* step 2 */
+        $aReplace[] = ' {TABLE_ENGINE='.$sTblEngine.'}';                          /* step 3 */
+        $aReplace[] = ' ENGINE=$1 DEFAULT CHARSET={CHARSET} COLLATE={COLLATION}'; /* step 4 */
+        $aReplace[] = $sCharset;                                                  /* step 5 */
+        $aReplace[] = $sTblCollation;                                             /* step 6 */
+        // read file into an array
+        if (($aSql = file( $sSqlDump, FILE_SKIP_EMPTY_LINES ))) {
+            if (sizeof($aSql) > 0) {
+                // remove possible BOM from file
+                $aSql[0] = preg_replace('/^[\xAA-\xFF]{3}/', '', $aSql[0]);
+                // replace placeholders by replacements over the whole file
+                $aSql = preg_replace($aSearch, $aReplace, $aSql);
+            } else { $aSql = false; }
+        }
+
+        while ((bool)$aSql) {
+            $sSqlLine = trim(array_shift($aSql));
+            if (!preg_match('/^[\-\/]+.*/', $sSqlLine)) {
+                $sSqlBuffer .= ' '.$sSqlLine;
+                if ((substr($sSqlBuffer,-1,1) == ';')) {
+                    if (
+                        // drop tables on install or uninstall
+                        preg_match('/^\s*DROP TABLE IF EXISTS/siU', $sSqlBuffer) &&
+                        ($sAction == 'install' || $sAction == 'uninstall')
+                    ) {
+                        if (!$this->query($sSqlBuffer)) {
+                            $aSql = $bRetval = false;
+                            break;
+                        }
+                   } else if (
+                        // create and alter tables on install or upgrade
+                        (preg_match('/^\s*CREATE TABLE/siU', $sSqlBuffer) ||
+                         preg_match('/^\s*ALTER TABLE/siU', $sSqlBuffer)) &&
+                        ($sAction == 'install' || $sAction == 'upgrade')
+                    ) {
+                        if (!$this->query($sSqlBuffer))
+                        {
+                            switch ($this->get_errno()):
+                                case 0: // no error
+                                case 1060:
+                                case 1061:
+                                    break;
+                                default: // all other errors
+                                    $aSql = $bRetval = false;
+                                    break;
+                            endswitch;
+                        }
+                    } else if (
+                        // insert default data on install
+                        (preg_match('/^\s*INSERT INTO /siU', $sSqlBuffer)) &&
+                        ( $sAction == 'install' )
+                    ) {
+                        if (!$this->query($sSqlBuffer)) {
+                            $aSql = $bRetval = false;
+                            break;
+                        }
+                    }
+                    // clear buffer for next statement
+                    $sSqlBuffer = '';
+                }
+            }
+        }
+        return $bRetval;
+    }
+
+/**
+ * retuns the type of the engine used for requested table
+ * @param string $table name of the table, including prefix
+ * @return boolean/string false on error, or name of the engine (myIsam/InnoDb)
+ */
+    public function getTableEngine($table)
+    {
+        $retVal = false;
+        $mysqlVersion = mysqli_get_server_info($this->db_handle);
+        $engineValue = (version_compare($mysqlVersion, '5.0') < 0) ? 'Type' : 'Engine';
+        $sql = "SHOW TABLE STATUS FROM " . $this->db_name . " LIKE '" . $table . "'";
+        if(($result = $this->query($sql))) {
+            if(($row = $result->fetchRow(MYSQLI_ASSOC))) {
+                $retVal = $row[$engineValue];
+            }
+        }
+        return $retVal;
+    }
+
+
+} /// end of class database
+
+define('MYSQL_SEEK_FIRST', 0);
+define('MYSQL_SEEK_LAST', -1);
+define('MYSQLI_SEEK_FIRST', 0);
+define('MYSQLI_SEEK_LAST', -1);
+
+class mysql {
+
+    private $db_handle = null;
+    private $result = null;
+    private $error = '';
+
+    public function __construct($handle) {
+        $this->db_handle = $handle;
+    }
+/**
+ * query sql statement
+ * @param  string $statement
+ * @return object
+ * @throws WbDatabaseException
+ */
+    public function query($sStatement)
+    {
+        $this->result = @mysqli_query($this->db_handle, $sStatement);
+        if (defined('DEBUG')&& DEBUG && ($this->result === false)) {
+            if (DEBUG) {
+                throw new DatabaseException(mysqli_error($this->db_handle));
+            } else {
+                throw new DatabaseException('Error in SQL-Statement');
+            }
+        }
+        $this->error = mysqli_error($this->db_handle);
+        return $this->result;
+    }
+
+    // Fetch num rows
+    public function numRows() {
+        return mysqli_num_rows($this->result);
+    }
+
+    // Fetch row  $typ = MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH
+    public function fetchRow($typ = MYSQLI_BOTH) {
+        return mysqli_fetch_array($this->result, $typ);
+    }
+/**
+ * fetchAssoc
+ * @return array with assotiative indexes
+ * @description get current record and increment pointer
+ */
+    public function fetchAssoc()
+    {
+        return mysqli_fetch_assoc($this->result);
+    }
+/**
+ * fetchArray
+ * @param  int $iType MYSQL_ASSOC(default) | MYSQL_BOTH | MYSQL_NUM
+ * @return array of current record
+ * @description get current record and increment pointer
+ */
+    public function fetchArray($iType = MYSQLI_ASSOC)
+    {
+        if ($iType < MYSQLI_ASSOC || $iType > MYSQLI_BOTH) {
+            $iType = MYSQLI_ASSOC;
+        }
+        return mysqli_fetch_array($this->result, $iType);
+    }
+/**
+ * fetchObject
+ * @param  string $sClassname Name of the class to use. Is no given use stdClass
+ * @param  string $aParams    optional array of arguments for the constructor
+ * @return object
+ * @description get current record as an object and increment pointer
+ */
+    public function fetchObject($sClassName = 'stdClass', array $aParams = [])
+    {
+        if ($sClassName === 'stdClass' || !$sClassName) {
+            $oRetval = mysqli_fetch_object($this->result, 'stdClass');
+        } elseif (class_exists($sClassName)) {
+            $oRetval = mysqli_fetch_object($this->result, $sClassName, $aParams);
+        } else {
+            throw new DatabaseException('Class <'.$sClassName.'> not available on request of mysqli_fetch_object()');
+        }
+        return $oRetval;
+    }
+/**
+ * fetchAll
+ * @param  int $iType MYSQL_ASSOC(default) | MYSQL_NUM
+ * @return array of rows
+ * @description get all records of the result set
+ */
+    public function fetchAll($iType = MYSQLI_ASSOC)
+    {
+        $iType = $iType != MYSQLI_NUM ? MYSQLI_ASSOC : MYSQLI_NUM;
+
+        if (function_exists('mysqli_fetch_all')) { # Compatibility layer with PHP < 5.3
+            $aRetval = mysqli_fetch_all($this->result, $iType);
+        } else {
+            for ($aRetval = array(); ($aTmp = mysqli_fetch_array($this->result, $iType));) { $aRetval[] = $aTmp; }
+        }
+        return $aRetval;
+    }
+
+    public function rewind()
+    {
+        return $this->seekRow();
+    }
+
+    public function seekRow( $position = MYSQLI_SEEK_FIRST )
+    {
+        $pmax = $this->numRows() - 1;
+        $offset = (($position < 0 || $position > $pmax) ? $pmax : $position);
+        return mysqli_data_seek($this->result, $offset);
+    }
+
+    // Get error
+    public function error() {
+        if(isset($this->error)) {
+            return $this->error;
+        } else {
+            return null;
+        }
+    }
+
+} // end of class mysql
+
+class DatabaseException extends AppException {}
+
+/* this function is placed inside this file temporarely until a better place is found */
+/*  function to update a var/value-pair(s) in table ****************************
+ *  nonexisting keys are inserted
+ *  @param string $table: name of table to use (without prefix)
+ *  @param mixed $key:    a array of key->value pairs to update
+ *                        or a string with name of the key to update
+ *  @param string $value: a sting with needed value, if $key is a string too
+ *  @return bool:  true if any keys are updated, otherwise false
+ */
+    function db_update_key_value($table, $key, $value = '')
+    {
+        global $database;
+        if( !is_array($key))
+        {
+            if( trim($key) != '' )
+            {
+                $key = array( trim($key) => trim($value) );
+            } else {
+                $key = array();
+            }
+        }
+        $retval = true;
+        foreach( $key as $index=>$val)
+        {
+            $index = strtolower($index);
+            $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.$table.'` WHERE `name` = \''.$index.'\' ';
+            if (intval($database->get_one($sql))>0)
+            {
+                $sql = 'UPDATE ';
+                $sql_where = 'WHERE `name` = \''.$index.'\'';
+            } else {
+                $sql = 'INSERT INTO ';
+                $sql_where = '';
+            }
+            $sql .= '`'.TABLE_PREFIX.$table.'` ';
+            $sql .= 'SET `name` = \''.$index.'\', ';
+            $sql .= '`value` = \''.$val.'\' '.$sql_where;
+            if (!$database->query($sql) )
+            {
+                $retval = false;
+            }
+        }
+        return $retval;
+    }

Property changes on: trunk/framework/class.database.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.frontend.php
===================================================================
--- trunk/framework/class.frontend.php	(nonexistent)
+++ trunk/framework/class.frontend.php	(revision 2)
@@ -0,0 +1,567 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         framework
+ * @author          Ryan Djurovich (2004-2009), WebsiteBaker Project
+ * @copyright       2009-2012, WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+require_once(WB_PATH.'/framework/class.wb.php');
+//require_once(WB_PATH.'/framework/SecureForm.php');
+
+class frontend extends wb {
+    // defaults
+    public $default_link,$default_page_id;
+    // when multiple blocks are used, show home page blocks on
+    // pages where no content is defined (search, login, ...)
+    public $default_block_content=true;
+
+    // page details
+    // page database row
+    public $page;
+    public $page_id,$page_code,$page_title,$menu_title,$parent,$root_parent,$level,$position,$visibility;
+    public $page_description,$page_keywords,$page_link, $page_icon, $menu_icon_0, $menu_icon_1, $tooltip;
+    public $page_trail=array();
+
+    public $page_access_denied;
+    public $page_no_active_sections;
+
+    // website settings
+    public $website_title,$website_description,$website_keywords,$website_header,$website_footer;
+
+    // ugly database stuff
+    public $extra_where_sql, $sql_where_language;
+/*
+    public function __construct() {
+        parent::__construct(1);
+*/
+    public function __construct($value=true) {
+        parent::__construct(1);
+        $this->FrontendLanguage = isset($value) ? $value : true;
+    }
+
+    public function ChangeFrontendLanguage( $value=true ) {
+        $this->FrontendLanguage=$value;
+    }
+
+    public function page_select() {
+        global $page_id, $no_intro, $database;
+
+/*
+ * Store installed languages in SESSION
+ */
+        if( $this->get_session('session_started') ) {
+            $_SESSION['USED_LANGUAGES'] = $this->getLanguagesInUsed();
+        }
+
+        $maintance = ( defined('SYSTEM_LOCKED') && (SYSTEM_LOCKED==true) ? true : false );
+
+        if( ($maintance==true) || $this->get_session('USER_ID')!= 1 )
+        {
+           //  check for show maintenance screen and terminate if needed
+            $this->ShowMaintainScreen('locked');
+        }
+        // We have no page id and are supposed to show the intro page
+        if((INTRO_PAGE && ($maintance != true) && !isset($no_intro)) && (!isset($page_id) || !is_numeric($page_id)))
+        {
+            // Since we have no page id check if we should go to intro page or default page
+            // Get intro page content
+            $sIntroFilename = PAGES_DIRECTORY.'/intro'.PAGE_EXTENSION;
+            if(file_exists(WB_PATH.$sIntroFilename)) {
+                // send intro.php as header to allow parsing of php statements
+                header("Location: ".WB_URL.$sIntroFilename."");
+                exit();
+            }
+        }
+        // Check if we should add page language sql code
+        if(PAGE_LANGUAGES) {
+            $this->sql_where_language = ' AND `language`=\''.LANGUAGE.'\'';
+        }
+        // Get default page
+        // Check for a page id
+        $table_p = TABLE_PREFIX.'pages';
+        $table_s = TABLE_PREFIX.'sections';
+        $now = time();
+        $sql  = 'SELECT `p`.`page_id`, `link` ';
+        $sql .= 'FROM `'.$table_p.'` AS `p` INNER JOIN `'.$table_s.'` USING(`page_id`) ';
+        $sql .= 'WHERE `parent`=0 AND `visibility`=\'public\' ';
+        $sql .=     'AND (('.$now.'>=`publ_start` OR `publ_start`=0) ';
+        $sql .=     'AND ('.$now.'<=`publ_end` OR `publ_end`=0)) ';
+        if(trim($this->sql_where_language) != '') {
+            $sql .= trim($this->sql_where_language).' ';
+        }
+        $sql .= 'ORDER BY `p`.`position` ASC';
+        if($get_default = $database->query($sql)) {
+
+            $default_num_rows = $get_default->numRows();
+            if(!isset($page_id) OR !is_numeric($page_id)){
+                // Go to or show default page
+                if($default_num_rows > 0) {
+                    $fetch_default = $get_default->fetchArray(MYSQLI_ASSOC);
+                    $this->default_link = $fetch_default['link'];
+                    $this->default_page_id = $fetch_default['page_id'];
+                    // Check if we should redirect or include page inline
+                    if(HOMEPAGE_REDIRECTION) {
+                        // Redirect to page
+    //                    header("Location: ".$this->page_link($this->default_link));
+    //                    exit();
+                        $this->send_header($this->page_link($this->default_link));
+                    } else {
+                        // Include page inline
+                        $this->page_id = $this->default_page_id;
+                    }
+                } else {
+                       // No pages have been added, so print under construction page
+    //                if(trim($this->sql_where_language) == '') {
+    //                    $this->ShowMaintainScreen('new');
+    //                    exit();
+    //                }
+                    $this->ShowMaintainScreen('new');
+    //                $this->print_under_construction();
+                    exit();
+                }
+            } else {
+                $this->page_id=$page_id;
+            }
+            // Get default page link
+            if(!isset($fetch_default)) {
+                  $fetch_default = $get_default->fetchArray(MYSQLI_ASSOC);
+                 $this->default_link = $fetch_default['link'];
+                $this->default_page_id = $fetch_default['page_id'];
+            }
+            return true;
+
+        } else {
+            $this->ShowMaintainScreen('new');
+            exit();
+        }
+
+    }
+
+
+
+
+/*
+        $sql = 'SELECT `p`.`page_id`, `link` '
+             . 'FROM `'.TABLE_PREFIX.'pages` `p` '
+             .       'INNER JOIN `'.TABLE_PREFIX.'sections` '
+             .       'USING(`page_id`) '
+             . 'WHERE `parent`=0 '
+             .   'AND `visibility`=\'public\' '
+             .   'AND ('
+             .            '('.$now.'>=`publ_start` OR `publ_start`=0) AND '
+             .            '('.$now.'<=`publ_end` OR `publ_end`=0) '
+             .        ')'
+             .        (trim($this->sql_where_language) ? $this->sql_where_language : '')
+             . ' ORDER BY `p`.`position` ASC';
+        if (!($oPages = $database->query($sql))) {
+        // error on read database
+            throw new Exception(
+                'Error reading table \'pages\' in '.__CLASS__.'::'.
+                __METHOD__.'. Unable to find any page!'
+            );
+            exit;
+        }
+        if (
+            !($aDefaultPage = $oPages->fetchRow(MYSQLI_ASSOC)) &&
+            (!isset($page_id) || !intval($page_id))
+        ) {        // No active page found, so show the "under construction page"
+            $this->print_under_construction();
+            exit;
+        }
+        // time to set default values
+        $this->default_link    = $aDefaultPage['link'];
+        $this->default_page_id = $aDefaultPage['page_id'];
+//        if (!isset($page_id) || !intval($page_id)) {
+//        if (!isset($page_id) || !is_numeric($page_id)) {
+          if (!(isset($page_id) && is_numeric($page_id) && is_int($page_id))) {
+        // use default page if validation fails
+            if(HOMEPAGE_REDIRECTION) {
+            // for mandatory redirect request the starting page via accessfile now
+                header("Location: ".$this->page_link($this->default_link));
+                exit;
+            }
+            // page_id ok, so set the needed variables to use that page
+            $page_id = $this->page_id = $this->default_page_id;
+        } else {
+        // simply use the given page_id because anything is ok
+            $this->page_id = $page_id;
+        }
+        return true;
+    }
+*/
+
+    public function get_page_details() {
+        global $database;
+        if($this->page_id != 0)
+        {
+            // Query page details
+            $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.(int)$this->page_id;
+            $get_page = $database->query($sql);
+            // Make sure page was found in database
+            if($get_page->numRows() == 0) {
+                // Print page not found message
+                exit('Page '.$this->page_id.' not found');
+            }
+            // Fetch page details
+            $this->page = $get_page->fetchRow( MYSQLI_ASSOC );
+            // Check if the page language is also the selected language. If not, send headers again.
+            if ($this->page['language']!=LANGUAGE) {
+                if(isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { // check if there is an query-string
+                    header("HTTP/1.1 301 Moved Permanently"); // ADDED
+                    header('Location: '.$this->page_link($this->page['link']).'?'.$_SERVER['QUERY_STRING'].'&lang='.$this->page['language']);
+                } else {
+                    header("HTTP/1.1 301 Moved Permanently"); // ADDED
+                    header('Location: '.$this->page_link($this->page['link']).'?lang='.$this->page['language']);
+                }
+                exit();
+            }
+            // Begin code to set details as either variables of constants
+            // Page ID
+            if(!defined('PAGE_ID')) {define('PAGE_ID', $this->page['page_id']);}
+            // Page Code
+            if(!defined('PAGE_CODE')) {define('PAGE_CODE', $this->page['page_code']);}
+            $this->page_code = PAGE_CODE;
+            // Page Title
+            if(!defined('PAGE_TITLE')) {define('PAGE_TITLE', $this->page['page_title']);}
+            $this->page_title=PAGE_TITLE;
+            // Menu Title
+            $menu_title = $this->page['menu_title'];
+            if($menu_title != '') {
+                if(!defined('MENU_TITLE')) {define('MENU_TITLE', $menu_title);}
+            } else {
+                if(!defined('MENU_TITLE')) {define('MENU_TITLE', PAGE_TITLE);}
+            }
+            $this->menu_title = MENU_TITLE;
+            $this->page_icon = $this->page['page_icon'];
+            $this->menu_icon_0 = $this->page['menu_icon_0'];
+            $this->menu_icon_1 = $this->page['menu_icon_1'];
+            $this->tooltip = $this->page['tooltip'];
+            // Page parent
+            if(!defined('PARENT')) {define('PARENT', $this->page['parent']);}
+            $this->parent=$this->page['parent'];
+            // Page root parent
+            if(!defined('ROOT_PARENT')) {define('ROOT_PARENT', $this->page['root_parent']);}
+            $this->root_parent=$this->page['root_parent'];
+            // Page level
+            if(!defined('LEVEL')) {define('LEVEL', $this->page['level']);}
+            $this->level=$this->page['level'];
+            // Page position
+            $this->level=$this->page['position'];
+            // Page visibility
+            if(!defined('VISIBILITY')) {define('VISIBILITY', $this->page['visibility']);}
+            $this->visibility=$this->page['visibility'];
+            // Page trail
+            foreach(explode(',', $this->page['page_trail']) AS $pid) {
+                $this->page_trail[$pid]=$pid;
+            }
+            // Page description
+            $this->page_description=$this->page['description'];
+            if($this->page_description != '') {
+                define('PAGE_DESCRIPTION', $this->page_description);
+            } else {
+                define('PAGE_DESCRIPTION', WEBSITE_DESCRIPTION);
+            }
+            // Page keywords
+            $this->page_keywords=$this->page['keywords'];
+            // Page link
+            $this->link = $this->page_link($this->page['link']);
+            $_SESSION['PAGE_ID'] = $this->page_id;
+            $_SESSION['HTTP_REFERER'] = $this->link;
+
+        // End code to set details as either variables of constants
+        }
+
+        // Figure out what template to use
+        if(!defined('TEMPLATE')) {
+            if(isset($this->page['template']) AND $this->page['template'] != '') {
+                if(file_exists(WB_PATH.'/templates/'.$this->page['template'].'/index.php')) {
+                    define('TEMPLATE', $this->page['template']);
+                } else {
+                    define('TEMPLATE', DEFAULT_TEMPLATE);
+                }
+            } else {
+                define('TEMPLATE', DEFAULT_TEMPLATE);
+            }
+        }
+        // Set the template dir
+        define('TEMPLATE_DIR', WB_URL.'/templates/'.TEMPLATE);
+
+        // Check if user is allowed to view this page
+        if($this->page && $this->page_is_visible($this->page) == false) {
+            if(VISIBILITY == 'deleted' || VISIBILITY == 'none') {
+                // User isnt allowed on this page so tell them
+                $this->page_access_denied=true;
+            } elseif(VISIBILITY == 'private' || VISIBILITY == 'registered') {
+                // Check if the user is authenticated
+                if($this->is_authenticated() == false) {
+                    // User needs to login first
+                    header("Location: ".WB_URL."/account/login.php?redirect=".$this->link);
+                    exit(0);
+                } else {
+                    // User isnt allowed on this page so tell them
+                    $this->page_access_denied=true;
+                }
+
+            }
+        }
+        // check if there is at least one active section
+        if($this->page && $this->page_is_active($this->page) == false) {
+            $this->page_no_active_sections=true;
+        }
+    }
+
+    public function get_website_settings()
+    {
+        global $database;
+
+        // set visibility SQL code
+        // never show no-vis, hidden or deleted pages
+        $this->extra_where_sql = '`visibility`!=\'none\' AND `visibility`!=\'hidden\' AND `visibility`!=\'deleted\'';
+        // Set extra private sql code
+        if($this->is_authenticated()==false) {
+            // if user is not authenticated, don't show private pages either
+            $this->extra_where_sql .= ' AND `visibility`!=\'private\'';
+            // and 'registered' without frontend login doesn't make much sense!
+            if (FRONTEND_LOGIN==false) {
+                $this->extra_where_sql .= ' AND `visibility`!=\'registered\'';
+            }
+        }
+        $this->extra_where_sql .= $this->sql_where_language;
+
+        // Work-out if any possible in-line search boxes should be shown
+        if(SEARCH == 'public') {
+            define('SHOW_SEARCH', true);
+        } elseif(SEARCH == 'private' AND VISIBILITY == 'private') {
+            define('SHOW_SEARCH', true);
+        } elseif(SEARCH == 'private' AND $this->is_authenticated() == true) {
+            define('SHOW_SEARCH', true);
+        } elseif(SEARCH == 'registered' AND $this->is_authenticated() == true) {
+            define('SHOW_SEARCH', true);
+        } else {
+            define('SHOW_SEARCH', false);
+        }
+        // Work-out if menu should be shown
+        if(!defined('SHOW_MENU')) {
+            define('SHOW_MENU', true);
+        }
+        // Work-out if login menu constants should be set
+        if(FRONTEND_LOGIN) {
+            // Set login menu constants
+            define('LOGIN_URL', WB_URL.'/account/login.php');
+            define('LOGOUT_URL', WB_URL.'/account/logout.php');
+            define('FORGOT_URL', WB_URL.'/account/forgot.php');
+            define('PREFERENCES_URL', WB_URL.'/account/preferences.php');
+            define('SIGNUP_URL', WB_URL.'/account/signup.php');
+        }
+    }
+
+/*
+ * replace all "[wblink{page_id}]" with real links
+ * @param string &$content : reference to global $content
+ * @return void
+ * @history 100216 17:00:00 optimise errorhandling, speed, SQL-strict
+ */
+    public function preprocess(&$content)
+    {
+    //   do nothing
+    }
+/**
+ *
+        global $database;
+        $replace_list = array();
+        $pattern = '/\[wblink([0-9]+)\]/isU';
+        if(preg_match_all($pattern,$content,$ids))
+        {
+            foreach($ids[1] as $key => $page_id)
+            {
+                $replace_list[$page_id] = $ids[0][$key];
+            }
+            foreach($replace_list as $page_id => $tag)
+            {
+                $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.(int)$page_id;
+                $link = $database->get_one($sql);
+                if(!is_null($link))
+                {
+                    $link = $this->page_link($link);
+                    $content = str_replace($tag, $link, $content);
+                }
+            }
+        }
+    }
+ */
+
+/*
+    function preprocess(&$content) {
+        global $database;
+        // Replace [wblink--PAGE_ID--] with real link
+        $pattern = '/\[wblink(.+?)\]/s';
+        preg_match_all($pattern,$content,$ids);
+        foreach($ids[1] AS $page_id) {
+            $pattern = '/\[wblink'.$page_id.'\]/s';
+            // Get page link
+            $get_link = $database->query("SELECT link FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id' LIMIT 1");
+            $fetch_link = $get_link->fetchRow();
+            $link = $this->page_link($fetch_link['link']);
+            $content = preg_replace($pattern,$link,$content);
+        }
+    }
+*/
+
+    public function menu() {
+        global $wb;
+       if (!isset($wb->menu_number)) {
+           $wb->menu_number = 1;
+       }
+       if (!isset($wb->menu_start_level)) {
+           $wb->menu_start_level = 0;
+       }
+       if (!isset($wb->menu_recurse)) {
+           $wb->menu_recurse = -1;
+       }
+       if (!isset($wb->menu_collapse)) {
+           $wb->menu_collapse = true;
+       }
+       if (!isset($wb->menu_item_template)) {
+           $wb->menu_item_template = '<li><span[class]>[a] [menu_title] [/a]</span>';
+       }
+       if (!isset($wb->menu_item_footer)) {
+           $wb->menu_item_footer = '</li>';
+       }
+       if (!isset($wb->menu_header)) {
+           $wb->menu_header = '<ul>';
+       }
+       if (!isset($wb->menu_footer)) {
+           $wb->menu_footer = '</ul>';
+       }
+       if (!isset($wb->menu_default_class)) {
+           $wb->menu_default_class = ' class="menu_default"';
+       }
+       if (!isset($wb->menu_current_class)) {
+           $wb->menu_current_class = ' class="menu_current"';
+       }
+       if (!isset($wb->menu_parent)) {
+           $wb->menu_parent = 0;
+       }
+       $wb->show_menu();
+    }
+
+    public function show_menu() {
+        global $database;
+        if ($this->menu_start_level>0) {
+            $key_array=array_keys($this->page_trail);
+            if (isset($key_array[$this->menu_start_level-1])) {
+                $real_start=$key_array[$this->menu_start_level-1];
+                $this->menu_parent=$real_start;
+                $this->menu_start_level=0;
+            } else {
+                return;
+            }
+        }
+        if ($this->menu_recurse==0)
+           return;
+        // Check if we should add menu number check to query
+        if($this->menu_parent == 0) {
+            $menu_number = '`menu`='.intval($this->menu_number);
+        } else {
+            $menu_number = '1';
+        }
+        // Query pages
+        $sql  = 'SELECT `page_id`,`menu_title`,`page_title`,`link`,`target`,`level`,';
+        $sql .=        '`visibility`,viewing_groups,viewing_users ';
+        $sql .= 'FROM `'.TABLE_PREFIX.'pages` ';
+        $sql .= 'WHERE `parent`='.(int)$this->menu_parent.' AND '.$menu_number.' AND '.$this->extra_where_sql.' ';
+        $sql .= 'ORDER BY `position` ASC';
+        $query_menu = $database->query($sql);
+        // Check if there are any pages to show
+        if($query_menu->numRows() > 0) {
+            // Print menu header
+            echo "\n".$this->menu_header;
+            // Loop through pages
+            while($page = $query_menu->fetchRow()) {
+                // check whether to show this menu-link
+                if($this->page_is_active($page)==false && $page['link']!=$this->default_link && !INTRO_PAGE) {
+                    continue; // no active sections
+                }
+                if($this->page_is_visible($page)==false) {
+                    if($page['visibility'] != 'registered') // special case: page_to_visible() check wheter to show the page contents, but the menu should be visible allways
+                        continue;
+                }
+                // Create vars
+                $vars = array('[class]','[a]', '[/a]', '[menu_title]', '[page_title]');
+                // Work-out class
+                if($page['page_id'] == PAGE_ID) {
+                    $class = $this->menu_current_class;
+                } else {
+                    $class = $this->menu_default_class;
+                }
+                // Check if link is same as first page link, and if so change to WB URL
+                if($page['link'] == $this->default_link AND !INTRO_PAGE) {
+                    $link = WB_URL;
+                } else {
+                    $link = $this->page_link($page['link']);
+                }
+                // Create values
+                $values = array($class,'<a href="'.$link.'" target="'.$page['target'].'" '.$class.'>', '</a>', $page['menu_title'], $page['page_title']);
+                // Replace vars with value and print
+                echo "\n".str_replace($vars, $values, $this->menu_item_template);
+                // Generate sub-menu
+                if($this->menu_collapse==false OR ($this->menu_collapse==true AND isset($this->page_trail[$page['page_id']]))) {
+                    $this->menu_recurse--;
+                    $this->menu_parent=$page['page_id'];
+                    $this->show_menu();
+                }
+                echo "\n".$this->menu_item_footer;
+            }
+            // Print menu footer
+            echo "\n".$this->menu_footer;
+        }
+    }
+
+
+    // Function to show the "Under Construction" page
+    public function print_under_construction() {
+        $this->ShowMaintainScreen('new');
+        exit();
+/*
+        global $MESSAGE;
+        require_once(WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php');
+        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+        <head><title>'.$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'].'</title>
+        <style type="text/css"><!-- body{ font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 12px; background-image: url("'.THEME_URL.'/images/background.png");background-repeat: repeat-x; background-color: #A8BCCB; text-align: center; }
+        h1 { margin: 0; padding: 0; font-size: 18px; color: #000; text-transform: uppercase;
+}--></style></head><body>
+        <br /><h1>'.$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'].'</h1><br />
+        '.$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'].'</body></html>';
+*/
+    }
+
+    // Function to show the "Under Construction" page
+    public function print_missing_frontend_login() {
+        global $MESSAGE, $MENU, $TEXT;
+        require_once(WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php');
+        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+        <head><title>'.$MENU['LOGIN'].' '.$TEXT['DISABLED'].'</title>
+        <style type="text/css"><!-- body{ font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 12px; background-image: url("'.THEME_URL.'/images/background.png");background-repeat: repeat-x; background-color: #A8BCCB; text-align: center; }
+        h1 { margin: 0; padding: 0; font-size: 18px; color: #000; text-transform: uppercase;
+}--></style></head><body>
+        <br /><h1>'.($MENU['LOGIN'].' '.$TEXT['DISABLED']).'</h1><br />
+        '.$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'].'</body></html>';
+    }
+
+}

Property changes on: trunk/framework/class.frontend.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.logfile.php
===================================================================
--- trunk/framework/class.logfile.php	(nonexistent)
+++ trunk/framework/class.logfile.php	(revision 2)
@@ -0,0 +1,240 @@
+<?php
+/**
+ *
+ * @category        event logging
+ * @package         core
+ * @author          Independend-Software-Team
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.2
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description     definition of all core constants.
+ */
+
+/**
+ * Description of classlog
+ *
+ * @author wkl
+ */
+class LogFile {
+
+    private $_fh;                  // file-handle for logfile
+    private $_log_path;            // path to logfile
+    private $_log_file;            // name of logfile
+    private $_error = false;       // store internal errors
+/*
+ * class can not be instanciated standalone
+ */
+    protected function __construct( $log_file )
+    {
+        $this->_log_file = $log_file;
+    }
+
+/*
+ * open the logfile for append
+ */
+    private function openLogFile()
+    {
+        $this->_fh = fopen($this->_log_path.$this->_log_file, 'ab');
+        return isset($this->_fh);
+    }
+/*
+ * provide read-only properties
+ */
+    public function __get($property)
+    {
+        switch(strtolower($property)):
+            case 'error':
+                return $this->_error;
+                break;
+            default:
+                return null;
+        endswitch;
+    }
+/*
+ * flush and close logfile
+ */
+    private function closeLogFile()
+    {
+        if( isset($this->_fh) )
+        {
+            fflush($this->_fh);
+            fclose($this->_fh);
+            unset($this->_fh);
+        }
+    }
+
+/*
+ * @param  string $logdir: directory to place the logfile
+ * @return bool: true if directory is valid and writeable
+ * @description:
+ */
+    public function setLogDir( $logdir )
+    {
+        $this->_error = false;
+        $retval = false;
+        if( ($logdir = realpath($logdir)) )
+        {
+            $logdir = rtrim(str_replace('\\', '/', $logdir), '/');
+            if( defined('WB_PATH') )
+            {
+                $sysroot = WB_PATH;
+            }
+            else
+            {
+                $script_filename = str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']);
+                $script_name = str_replace('\\', '/', $_SERVER['SCRIPT_NAME']);
+                $sysroot = str_replace($script_name, '', $script_filename);
+            }
+            if( stripos($logdir, $sysroot) === 0 )
+            {
+                if( is_writable($logdir))
+                {
+                    if( file_exists($logdir.'/'.$this->_log_file) )
+                    {
+                        if( is_writable($logdir.'/'.$this->_log_file) )
+                        {
+                            $this->_log_path = $logdir.'/';
+                            $retval = true;
+                        }else
+                        {
+                            $this->_error = 'existing logfile is not writable! ['.$logdir.$this->_log_file.']';
+                        }
+                    }
+                    else
+                    {
+                        $this->_log_path = $logdir.'/';
+                        $retval = true;
+                    }
+                }else
+                {
+                    $this->_error = 'access denied for directory ['.$logdir.']';
+                }
+            }else
+            {
+                $this->_error = 'logdir [ '.$logdir.' ] points outside of DOCUMENT_ROOT [ '.$sysroot.' ]';
+            }
+        }else
+        {
+            $this->_error = 'logdir can not be resolved ['.$logdir.']';
+        }
+        return $retval;
+    }
+
+/*
+ * @param string $line: preformatted message to write into the logfile
+ * @return none: an error will throw a exception
+ */
+    protected function writeRaw( $message )
+    {
+        array_unshift( $message, (defined($_SESSION['USER_ID'])?$_SESSION['USER_ID']:0) );
+        array_unshift( $message, (isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'#') );
+        array_unshift( $message, gmdate(DATE_W3C) );
+        if( isset($this->_log_path) ){
+            if($this->openLogFile())
+            {
+                if( fputcsv($this->_fh, $message, ',', '"') !== false )
+                {
+                    $this->closeLogFile();
+                }
+                else
+                {
+                    throw new Exception('unable to append line ['.$this->_log_path.$this->_log_file.']');
+                }
+            }
+            else
+            {
+                throw new Exception('unable to open logfile ['.$this->_log_path.$this->_log_file.']');
+            }
+        }else
+        {
+            throw new Exception('undefined path for logfile ['.$this->_log_file.']');
+        }
+    }
+
+} // end of class
+
+/*
+ *  Errorlog handler
+ */
+class ErrorLog extends LogFile{
+
+    private static $_instance;
+
+    protected function __construct()
+    {
+        parent::__construct('error.log');
+    }
+
+    private function __clone() {}
+
+    public static function handle()
+    {
+        if (!isset(self::$_instance)) {
+            $c = __CLASS__;
+            self::$_instance = new $c;
+        }
+        return self::$_instance;
+    }
+
+/*
+ * @param string $message: message to write into the logfile
+ * @param string $file: (optional) name of the file where the error occures
+ * @param string $function: (optional) name of the function where the error occures
+ * @param string $line: (optional) number of the line where the error occures
+ * @return none: an error will throw a exception
+ */
+    public function write( $message, $file = '#', $function = '#', $line = '#' )
+    {
+        if( !is_array($message) )
+        {
+            $message = array($file, $function, $line, $message);
+        }
+        self::handle()->writeRaw( $message );
+    }
+} // end of class
+
+/*
+ *  Accesslog handler
+ */
+class AccessLog extends LogFile{
+
+    private static $_instance;
+
+    protected function __construct()
+    {
+        parent::__construct('access.log');
+    }
+
+    private function __clone() {}
+
+    public static function handle()
+    {
+        if (!isset(self::$_instance)) {
+            $c = __CLASS__;
+            self::$_instance = new $c;
+        }
+        return self::$_instance;
+    }
+
+/*
+ * @param string $message: message to write into the logfile
+ * @return none: an error will throw a exception
+ */
+    public function write( $message )
+    {
+        if( !is_array($message) )
+        {
+            $message = array($message);
+        }
+        self::handle()->writeRaw( $message );
+    }
+} // end of class
+
+
+?>

Property changes on: trunk/framework/class.logfile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.msg_queue.php
===================================================================
--- trunk/framework/class.msg_queue.php	(nonexistent)
+++ trunk/framework/class.msg_queue.php	(revision 2)
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Description of class
+ *
+ * @author wkl
+ */
+class msgQueue {
+
+    const RETVAL_ARRAY  = 0;
+    const RETVAL_STRING = 1; // (default)
+
+    private static $_instance;
+
+    private $_error = array();
+    private $_success = array();
+
+    protected function __construct() {
+        $this->_error = array();
+        $this->_success = array();
+    }
+    private function __clone() { throw new Exception('cloning Class '.__CLASS__.' is illegal'); }
+
+    public static function handle()
+    {
+        if (!isset(self::$_instance)) {
+            $c = __CLASS__;
+            self::$_instance = new $c;
+        }
+        return self::$_instance;
+    }
+
+    public static function add($message = '', $type = false)
+    {
+        if($type)
+        {
+            self::handle()->_success[] = $message;
+        }else
+        {
+            self::handle()->_error[] = $message;
+        }
+    }
+
+    public static function clear()
+    {
+        self::handle()->_error = array();
+        self::handle()->_success = array();
+    }
+
+    public static function isEmpty()
+    {
+        return (sizeof(self::handle()->_success) == 0 && sizeof(self::handle()->_error) == 0 );
+    }
+    
+    public static function getError($retval_type = self::RETVAL_STRING)
+    {
+        if(sizeof(self::handle()->_error))
+        {
+            if($retval_type == self::RETVAL_STRING)
+            {
+                return implode('<br />', self::handle()->_error);
+            }else
+            {
+                return self::handle()->_error;
+            }
+        }
+    }
+
+    public static function getSuccess($retval_type = self::RETVAL_STRING)
+    {
+        if(sizeof(self::handle()->_success))
+        {
+            if($retval_type == self::RETVAL_STRING)
+            {
+                return implode('<br />', self::handle()->_success);
+            }else
+            {
+                return self::handle()->_success;
+            }
+        }
+    }
+
+
+}
+

Property changes on: trunk/framework/class.msg_queue.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.order.php
===================================================================
--- trunk/framework/class.order.php	(nonexistent)
+++ trunk/framework/class.order.php	(revision 2)
@@ -0,0 +1,150 @@
+<?php
+/**
+ * @category        WebsiteBaker
+ * @package         WebsiteBaker_core
+ * @author          Ryan Djurovich, WebsiteBaker Project, Werner v.d.Decken
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://websitebaker2.org
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * Ordering class
+ * This class will be used to change the order of an item in a table
+ * which contains a special order field (type must be integer)
+ */
+/*******************************************************************************
+ * abstract factory for application
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+    define('ORDERING_CLASS_LOADED', true);
+// Load the other required class files if they are not already loaded
+    require_once(WB_PATH."/framework/class.database.php");
+
+class order {
+
+    const MOVE_UP   = 0;
+    const MOVE_DOWN = 1;
+
+    private $_Table      = '';
+    private $_FieldOrder = '';
+    private $_FieldId    = '';
+    private $_FieldGroup = '';
+    private $_DB         = null;
+
+    /**
+     * Constructor
+     * @param string $Table
+     * @param string $FieldOrder
+     * @param string $FieldId
+     * @param string $FieldGroup
+     * use $GLOBALS['database']
+     */
+    public function __construct($Table, $FieldOrder, $FieldId, $FieldGroup) {
+        $this->_DB         = $GLOBALS['database'];
+        $this->_Table      = $Table;
+        $this->_FieldOrder = $FieldOrder;
+        $this->_FieldId    = $FieldId;
+        $this->_FieldGroup = $FieldGroup;
+    }
+    /**
+     *
+     * @param string|int $id
+     * @param int $direction
+     * @return bool
+     */
+    public function move($id, $direction = self::MOVE_UP)
+    {
+        $retval = false;
+        $sql  = 'SELECT `'.$this->_FieldOrder.'` `order`, `'.$this->_FieldGroup.'` `group` ';
+        $sql .= 'FROM `'.$this->_Table.'` WHERE `'.$this->_FieldId.'`=\''.$id.'\'';
+        // get Position and Group for Element to move
+        if(($res1 = $this->_DB->query($sql))) {
+            if(($rec1 = $res1->fetchRow())) {
+                $sql  = 'SELECT `'.$this->_FieldId.'` `id`, `'.$this->_FieldOrder.'` `order` ';
+                $sql .= 'FROM `'.$this->_Table.'` ';
+                $sql .= 'WHERE `'.$this->_FieldGroup.'`=\''.$rec1['group'].'\' ';
+                if($direction == self::MOVE_UP) {
+                    // search for Element with next lower Position
+                    $sql .=     'AND `'.$this->_FieldOrder.'`<\''.$rec1['order'].'\' ';
+                    $sql .= 'ORDER BY `'.$this->_FieldOrder.'` DESC';
+                }else {
+                    // search for Element with next higher Position
+                    $sql .=     'AND `'.$this->_FieldOrder.'`>\''.$rec1['order'].'\' ';
+                    $sql .= 'ORDER BY `'.$this->_FieldOrder.'` ASC';
+                }
+                // get Id and Position of the Element to change with
+                if(($res2 = $this->_DB->query($sql))) {
+                    if(($rec2 = $res2->fetchRow())) {
+                        $sql  = 'UPDATE `'.$this->_Table.'` ';
+                        $sql .= 'SET `'.$this->_FieldOrder.'`=\''.$rec1['order'].'\' ';
+                        $sql .= 'WHERE `'.$this->_FieldId.'`=\''.$rec2['id'].'\'';
+                        // update Position number of target
+                        if($this->_DB->query($sql)) {
+                            $sql  = 'UPDATE `'.$this->_Table.'` ';
+                            $sql .= 'SET `'.$this->_FieldOrder.'`=\''.$rec2['order'].'\' ';
+                            $sql .= 'WHERE `'.$this->_FieldId.'`=\''.$id.'\'';
+                            // update Position number source
+                            $retval = $this->_DB->query($sql);
+                        }
+                    }
+                }
+            }
+        }
+        return $retval;
+    }
+
+    /**
+     * Move a row up
+     * @param string|int $id
+     * @return bool
+     */
+    public function move_up($id) {
+        // Get current order
+        return $this->move($id, self::MOVE_UP);
+    }
+
+    /**
+     * Move a row down
+     * @param string|int $id
+     * @return bool
+     */
+    public function move_down($id) {
+        // Get current order
+        return $this->move($id, self::MOVE_DOWN);
+    }
+
+    /**
+     * Get next free number for order
+     * @param string|int $group
+     * @return integer
+     */
+    public function get_new($group) {
+        // Get last order
+        $sql  = 'SELECT MAX(`'.$this->_FieldOrder.'`) FROM `'.$this->_Table.'` ';
+        $sql .= 'WHERE `'.$this->_FieldGroup.'`=\''.$group.'\' ';
+        $max = intval($this->_DB->get_one($sql)) + 1;
+        return $max;
+    }
+
+    /**
+     * Renumbering a group from 1 to n (should be called if a row in the middle has been deleted)
+     * @param string|int $group
+     * @return bool
+     */
+    public function clean($group) {
+        // Loop through all records and give new order
+        $sql  = 'SET @c:=0';
+        $this->_DB->query($sql);
+        $sql  = 'UPDATE `'.$this->_Table.'` SET `'.$this->_FieldOrder.'`=(SELECT @c:=@c+1) ';
+        $sql .= 'WHERE `'.$this->_FieldGroup.'`=\''.$group.'\' ';
+        $sql .= 'ORDER BY `'.$this->_FieldOrder.'` ASC;';
+        return $this->_DB->query($sql);
+    }
+
+} // end of class

Property changes on: trunk/framework/class.order.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.wb.php
===================================================================
--- trunk/framework/class.wb.php	(nonexistent)
+++ trunk/framework/class.wb.php	(revision 2)
@@ -0,0 +1,904 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         frontend
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+/* -------------------------------------------------------- */
+// Include depending classes if needed
+if (!class_exists('Template', false))              { require(WB_PATH.'/include/phplib/template.inc'); }
+if (!class_exists('database', false))              { require(__DIR__.'/class.database.php'); }
+if (!class_exists('wbmailer', false))              { require(__DIR__.'/class.wbmailer.php'); }
+if (!class_exists('SecureTokens', false))          { require(__DIR__.'/SecureTokens.php'); }
+if (!class_exists('SecureTokensInterface', false)) { require(__DIR__.'/SecureTokensInterface.php'); }
+if (!class_exists('Sanitize', false )) { include __DIR__.'/Sanitize.php'; }
+
+class wb extends SecureTokensInterface
+{
+  /**
+   @var object instance of the database object */
+  protected $_oDb = null;
+  protected $oDb = null;
+  /**
+   @var object instance holds several values from the application global scope */
+  protected $_oReg = null;
+  /**
+   @var object instance holds all of the translations */
+  protected $_oTrans = null;
+  protected $oTrans = null;
+
+//    public $password_chars = 'a-zA-Z0-9\_\-\!\#\*\+\@\$\&\:';    // General initialization function
+    public $password_chars = '[\w!#$%&*+\-.:=?@\|]';    // General initialization function
+
+    public function  __construct($mode = 0) {
+        parent::__construct();
+        $this->oDb = $this->_oDb    = $GLOBALS['database'];
+        $this->oTrans = $this->_oTrans = $GLOBALS['oTrans'];
+    }
+
+/**
+ *
+ *
+ * @return comma separate list of first visible languages
+ *
+ */
+    public function getLanguagesInUsed()
+    {
+        $aRetval = [];
+        $sql = 'SELECT DISTINCT `language`, `page_id` '
+             . 'FROM `'.$this->oDb->sTablePrefix.'pages` '
+             . 'WHERE `level`=0 AND `visibility` NOT IN(\'none\', \'hidden\') '
+             . 'ORDER BY `language`, `position`';
+        if (($oResult = $this->oDb->query($sql))) {
+            while ( $aRow = $oResult->fetchRow( MYSQLI_ASSOC)) {
+                if( !$this->isPageVisible($aRow['page_id'])) { continue; }
+                $aRetval[] = $aRow['language'];
+            }
+        }
+        return implode(',', array_unique($aRetval));
+    }
+
+  /**
+   * Created parse_url utf-8 compatible function
+   *
+   * @param string $url The string to decode
+   * @return array Associative array containing the different components
+   *
+   */
+    public function mb_parse_url( $url)
+    {
+      $encodedUrl = preg_replace_callback( '%[^:/?#&=\.]+%usD', create_function( '$aMatches',
+        ';return urlencode($aMatches[0]);'), /*                                   'urlencode(\'$0\')', */ $url);
+      $components = parse_url( $encodedUrl);
+      foreach ( $components as &$component) $component = urldecode( $component);
+      return $components;
+    }
+/* ****************
+ * check if one or more group_ids are in both group_lists
+ *
+ * @access public
+ * @param mixed $groups_list1: an array or a coma seperated list of group-ids
+ * @param mixed $groups_list2: an array or a coma seperated list of group-ids
+ * @param array &$matches: an array-var whitch will return possible matches
+ * @return bool: true there is a match, otherwise false
+ */
+    public function is_group_match($mGroupsList1 = '', $mGroupsList2 = '', &$matches = null)
+    {
+        if ($mGroupsList1 == '' || $mGroupsList2 == '') { return false; }
+        if (!is_array($mGroupsList1)) {
+            $mGroupsList1 = preg_split('/[\s,=+\-\;\:\.\|]+/', $mGroupsList1, -1, PREG_SPLIT_NO_EMPTY);
+        }
+        if (!is_array($mGroupsList2)) {
+            $mGroupsList2 = preg_split('/[\s,=+\-\;\:\.\|]+/', $mGroupsList2, -1, PREG_SPLIT_NO_EMPTY);
+        }
+        $matches = array_intersect($mGroupsList1, $mGroupsList2);
+        return (sizeof($matches) != 0);
+    }
+/**
+ * @param mixed $groups_list is an array or a coma seperated list of group-ids
+ * @return bool: true if current user is member of one of this groups or its the superadmin
+ */
+    public function ami_group_member( $groups_list = '' )
+    {
+        return ($this->get_user_id() == 1) || $this->is_group_match( $groups_list, $this->get_groups_id());
+    }
+
+/**
+ * Alias for isPageVisible()
+ * @param mixed $mPage  can be a integer (PageId) or an array
+ * @return bool
+ * @deprecated since 2.10.0
+ */
+
+    public function page_is_visible($mPage)
+    {
+        // get PageId from array or object
+        if (is_array($mPage)) {
+            $iPageId = (int) $mPage['page_id'];
+        } elseif (is_integer($mPage)) {
+            $iPageId = $mPage;
+        } else {
+            $iPageId = 0;
+        }
+        return $this->isPageVisible($iPageId);
+    }
+
+/**
+ * isViewingPageAllowed
+ * @param int $iPageId
+ * @param int $iOtherUserId  (optional) test for other then current user
+ * @return bool
+ * @description if current user has permission to see this page
+ *   the visibility logic follows this scheme:
+ *   false : ([none] | [deleted])
+ *   false : ([private] | [registered]) and [not authenticated]
+ *   true  : ([private] | [registered]) and [authenticated]
+ *   true  : [public] | [hidden]
+ */
+    public function isPageVisible($iPageId, $iOtherUserId = null)
+    {
+        try {
+            // sanitize optional user_id
+            if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
+                $iUserId = (int) ($iOtherUserId ?? $this->get_user_id());
+            } else {
+                $iUserId = (int) (isset($iOtherUserId) ? $iOtherUserId : $this->get_user_id());
+            }
+            // get this page record
+            $sql = 'SELECT * FROM `'.$this->oDb->sTablePrefix.'pages` '
+                 . 'WHERE `page_id`='.$iPageId;
+            $oRecords = $this->oDb->query($sql);
+            if (!($oPage = $oRecords->fetchObject())) {
+                throw new InvalidArgumentException('request not existing PageId ['.$iPageId.']');
+            }
+            //
+            switch ($oPage->visibility) {
+                case 'hidden':
+                case 'public':
+                    $bRetval = true;
+                    break;
+                case 'private':
+                case 'registered':
+                    if (($bRetval = $this->is_authenticated())) {
+                        $bRetval = (
+                            $this->ami_group_member($oPage->viewing_groups) ||
+                            $this->is_group_match($iUserId, $oPage->viewing_users)
+                        );
+                    }
+                    break;
+                default:
+                    $bRetval = false;
+                    break;
+            }
+        } catch(Exception $e) {
+            $bRetval = false;
+        }
+        return $bRetval;
+    }
+/**
+ * Alias for isPageActive()
+ * @param mixed $mPage  can be a integer (PageId) or an array
+ * @return bool  true if at least one active section is found
+ * @deprecated since 2.10.0
+ */
+    public function page_is_active($mPage)
+    {
+        // get PageId from array
+        if (is_array($mPage)) {
+            $iPageId = $mPage['page_id'];
+        } elseif (is_integer($mPage)) {
+            $iPageId = $mPage;
+        } else {
+            $iPageId = 0;
+        }
+        return $this->isPageActive($iPageId);
+    }
+/**
+ * Check if there is at least one active section on this page
+ * @param int $iPageId
+ * @return bool  true if at least one active section is found
+ */
+
+    public function isPageActive($iPageId)
+    {
+        try {
+            // seach for active sections in this page
+            $iNow = time();
+            $sql = 'SELECT COUNT(*) FROM `'.$this->oDb->sTablePrefix.'sections` '
+                 . 'WHERE `page_id`='.(int) $iPageId.' AND '
+                 .       '('.$iNow.' BETWEEN `publ_start` AND `publ_end`) OR '
+                 .       '('.$iNow.' > `publ_start` AND `publ_end`=0) ';
+            $bRetval = (bool) $this->oDb->get_one($sql);
+        } catch (Exception $e) {
+            $bRetval = false;
+        }
+        return $bRetval;
+    }
+
+    // Check whether we should show a page or not (for front-end)
+    public function show_page($mPage)
+    {
+        $retval = ($this->page_is_visible($mPage) && $this->page_is_active($mPage));
+        return $retval;
+    }
+
+    // Check if the user is already authenticated or not
+    public function is_authenticated() {
+        $retval = (
+            isset($_SESSION['USER_ID']) AND
+            $_SESSION['USER_ID'] != "" AND
+            is_numeric($_SESSION['USER_ID'])
+        );
+        return (bool) $retval;
+    }
+
+    // Modified addslashes function which takes into account magic_quotes
+    public function add_slashes($input) {
+        if( get_magic_quotes_gpc() || (!is_string($input)) ) {
+            return $input;
+        }
+        return addslashes($input);
+    }
+
+    // Ditto for stripslashes
+    // Attn: this is _not_ the counterpart to $this->add_slashes() !
+    // Use stripslashes() to undo a preliminarily done $this->add_slashes()
+    // The purpose of $this->strip_slashes() is to undo the effects of magic_quotes_gpc==On
+    public function strip_slashes($input) {
+        if ( !get_magic_quotes_gpc() || ( !is_string($input) ) ) {
+            return $input;
+        }
+        return stripslashes($input);
+    }
+
+    // Escape backslashes for use with mySQL LIKE strings
+    public function escape_backslashes($input) {
+        return str_replace("\\","\\\\",$input);
+    }
+
+    public function page_link($link){
+        // Check for :// in the link (used in URL's) as well as mailto:
+        if(strstr($link, '://') == '' AND substr($link, 0, 7) != 'mailto:') {
+            return WB_URL.PAGES_DIRECTORY.$link.PAGE_EXTENSION;
+        } else {
+            return $link;
+        }
+    }
+
+    // Get POST data
+    public function get_post($field) {
+        return (isset($_POST[$field]) ? $_POST[$field] : null);
+    }
+
+    // Get POST data and escape it
+    public function get_post_escaped($field) {
+        $result = $this->get_post($field);
+        return (is_null($result)) ? null : $this->add_slashes($result);
+    }
+
+    // Get GET data
+    public function get_get($field) {
+        return (isset($_GET[$field]) ? $_GET[$field] : null);
+    }
+
+    // Get SESSION data
+    public function get_session($field) {
+        return (isset($_SESSION[$field]) ? $_SESSION[$field] : null);
+    }
+
+    // Get SERVER data
+    public function get_server($field) {
+        return (isset($_SERVER[$field]) ? $_SERVER[$field] : null);
+    }
+
+    // Get the current users id
+    public function get_user_id() {
+        return $this->get_session('USER_ID');
+    }
+
+    // Get the current users group id
+    public function get_group_id() {
+        return $this->get_session('GROUP_ID');
+    }
+
+    // Get the current users group ids
+    public function get_groups_id() {
+        return explode(",", $this->get_session('GROUPS_ID'));
+    }
+
+    // Get the current users group name
+    public function get_group_name() {
+        return implode(",", $this->get_session('GROUP_NAME'));
+    }
+
+    // Get the current users group name
+    public function get_groups_name() {
+        return $this->get_session('GROUP_NAME');
+    }
+
+    // Get the current users username
+    public function get_username() {
+        return $this->get_session('USERNAME');
+    }
+
+    // Get the current users display name
+    public function get_display_name() {
+        return $this->get_session('DISPLAY_NAME');
+    }
+
+    // Get the current users email address
+    public function get_email() {
+        return $this->get_session('EMAIL');
+    }
+
+    // Get the current users home folder
+    public function get_home_folder() {
+        return $this->get_session('HOME_FOLDER');
+    }
+
+    // Get the current users timezone
+    public function get_timezone() {
+        return (isset($_SESSION['USE_DEFAULT_TIMEZONE']) ? '-72000' : $_SESSION['TIMEZONE']);
+    }
+
+    // Validate supplied email address
+    public function validate_email($email) {
+        if(function_exists('idn_to_ascii')){ /* use pear if available */
+            $email = idn_to_ascii($email);
+        }else {
+            require_once(WB_PATH.'/include/idna_convert/idna_convert.class.php');
+            $IDN = new idna_convert();
+            $email = $IDN->encode($email);
+            unset($IDN);
+        }
+        // regex from NorHei 2011-01-11
+        $retval = preg_match("/^((([!#$%&'*+\\-\/\=?^_`{|}~\w])|([!#$%&'*+\\-\/\=?^_`{|}~\w][!#$%&'*+\\-\/\=?^_`{|}~\.\w]{0,}[!#$%&'*+\\-\/\=?^_`{|}~\w]))[@]\w+(([-.]|\-\-)\w+)*\.\w+(([-.]|\-\-)\w+)*)$/", $email);
+        return ($retval != false);
+    }
+  /**
+   * replace header('Location:...  with new method
+   * if header send failed you get a manuell redirected link, so script don't break
+   *
+   * @param string $location, redirected url
+   * @return void
+   */
+    public function send_header( $location)
+    {
+      if( !headers_sent()) {
+        header( 'Location: '.$location);
+        exit( 0);
+      } else {
+
+        //            $aDebugBacktrace = debug_backtrace();
+        //            array_walk( $aDebugBacktrace, create_function( '$a,$b', 'print "<br /><b>". basename( $a[\'file\'] ). "</b> &nbsp; <font color=\"red\">{$a[\'line\']}</font> &nbsp; <font color=\"green\">{$a[\'function\']} ()</font> &nbsp; -- ". dirname( $a[\'file\'] ). "/";' ) );
+        $msg = "<div style=\"text-align:center;\"><h2>An error has occurred</h2><p>The <strong>Redirect</strong> could not be start automatically.\n".
+          "Please click <a style=\"font-weight:bold;\" "."href=\"".$location."\">on this link</a> to continue!</p></div>\n";
+        throw new Exception( $msg);
+      }
+    }
+
+/* ****************
+ * set one or more bit in a integer value
+ *
+ * @access public
+ * @param int $value: reference to the integer, containing the value
+ * @param int $bits2set: the bitmask witch shall be added to value
+ * @return void
+ */
+    public function bit_set( &$value, $bits2set )
+    {
+        $value |= $bits2set;
+    }
+
+/* ****************
+ * reset one or more bit from a integer value
+ *
+ * @access public
+ * @param int $value: reference to the integer, containing the value
+ * @param int $bits2reset: the bitmask witch shall be removed from value
+ * @return void
+ */
+    public function bit_reset( &$value, $bits2reset)
+    {
+        $value &= ~$bits2reset;
+    }
+
+/* ****************
+ * check if one or more bit in a integer value are set
+ *
+ * @access public
+ * @param int $value: reference to the integer, containing the value
+ * @param int $bits2set: the bitmask witch shall be added to value
+ * @return void
+ */
+    public function bit_isset( $value, $bits2test )
+    {
+        return (($value & $bits2test) == $bits2test);
+    }
+
+    // Print a success message which then automatically redirects the user to another page
+    public function print_success( $message, $redirect = 'index.php' ) {
+        global $TEXT;
+        if(is_array($message)) {
+           $message = implode ('<br />',$message);
+        }
+        // fetch redirect timer for sucess messages from settings table
+        $redirect_timer = ((defined( 'REDIRECT_TIMER' )) && (REDIRECT_TIMER <= 10000)) ? REDIRECT_TIMER : 0;
+        // add template variables
+        // Setup template object, parse vars to it, then parse it
+        $tpl = new Template(dirname($this->correct_theme_source('success.htt')));
+        $tpl->set_file( 'page', 'success.htt' );
+        $tpl->set_block( 'page', 'main_block', 'main' );
+        $tpl->set_block( 'main_block', 'show_redirect_block', 'show_redirect' );
+        $tpl->set_var( 'MESSAGE', $message );
+        $tpl->set_var( 'REDIRECT', $redirect );
+        $tpl->set_var( 'REDIRECT_TIMER', $redirect_timer );
+        $tpl->set_var( 'NEXT', $TEXT['NEXT'] );
+        $tpl->set_var( 'BACK', $TEXT['BACK'] );
+        if ($redirect_timer == -1) {
+            $tpl->set_block( 'show_redirect', '' );
+        }
+        else {
+            $tpl->parse( 'show_redirect', 'show_redirect_block', true );
+        }
+        $tpl->parse( 'main', 'main_block', false );
+        $tpl->pparse( 'output', 'page' );
+    }
+
+    // Print an error message
+    public function print_error($message, $link = 'index.php', $auto_footer = true) {
+        global $TEXT;
+        if(is_array($message)) {
+           $message = implode ('<br />',$message);
+        }
+        // Setup template object, parse vars to it, then parse it
+        $success_template = new Template(dirname($this->correct_theme_source('error.htt')));
+        $success_template->set_file('page', 'error.htt');
+        $success_template->set_block('page', 'main_block', 'main');
+        $success_template->set_var('MESSAGE', $message);
+        $success_template->set_var('LINK', $link);
+        $success_template->set_var('BACK', $TEXT['BACK']);
+        $success_template->parse('main', 'main_block', false);
+        $success_template->pparse('output', 'page');
+        if ( $auto_footer == true ) {
+            if ( method_exists($this, "print_footer") ) {
+                $this->print_footer();
+            }
+        }
+        exit();
+    }
+
+  /*
+  * @param string $message: the message to format
+  * @param string $status:  ('ok' / 'error' / '') status defines the apereance of the box
+  * @return string: the html-formatted message (using template 'message.htt')
+  */
+  public function format_message( $message, $status = 'ok')
+  {
+    $retval = '';
+//    if ( ($message == '') ) { return $retval; }
+    $id = uniqid( 'x');
+    $tpl = new Template( dirname( $this->correct_theme_source( 'message.htt')));
+    $tpl->set_file( 'page', 'message.htt');
+    $tpl->set_block( 'page', 'main_block', 'main');
+    $tpl->set_var( 'MESSAGE', $message);
+    $tpl->set_var( 'THEME_URL', THEME_URL);
+    $tpl->set_var( 'ID', $id);
+    if( $status == 'ok' || $status == 'error' || $status = 'warning') {
+      $tpl->set_var( 'BOX_STATUS', ' box-'.$status);
+    } else {
+      $tpl->set_var( 'BOX_STATUS', '');
+    }
+    $tpl->set_var( 'STATUS', $status);
+    if( !defined( 'REDIRECT_TIMER')) {
+      define( 'REDIRECT_TIMER', -1);
+    }
+    if( $status != 'error') {
+      switch ( REDIRECT_TIMER):
+        case 0: // do not show message
+          unset( $tpl);
+          break;
+        case - 1: // show message permanently
+          $tpl->parse( 'main', 'main_block', false);
+          $retval = $tpl->finish( $tpl->parse( 'output', 'page', false));
+          unset( $tpl);
+          break;
+        default: // hide message after REDIRECTOR_TIMER milliseconds
+          $retval = '<script type="text/javascript">/* <![CDATA[ */ function '.$id.'_hide() {'.
+            'document.getElementById(\''.$id.'\').style.display = \'none\';}'.'window.setTimeout(\''.$id.
+            '_hide()\', '.REDIRECT_TIMER.');/* ]]> */ </script>';
+          $tpl->parse( 'main', 'main_block', false);
+          $retval = $tpl->finish( $tpl->parse( 'output', 'page', false)).$retval;
+          unset( $tpl);
+      endswitch;
+    } else {
+      $tpl->parse( 'main', 'main_block', false);
+      $retval = $tpl->finish( $tpl->parse( 'output', 'page', false)).$retval;
+      unset( $tpl);
+    }
+    return $retval;
+  }
+
+  /*
+  * @param string $type: 'locked'(default)  or 'new'
+  * @return void: terminates application
+  * @description: 'locked' >> Show maintenance screen and terminate, if system is locked
+  *               'new' >> Show 'new site under construction'(former print_under_construction)
+  */
+  public function ShowMaintainScreen( $type = 'locked')
+  {
+    global $database, $MESSAGE;
+    $LANGUAGE = strtolower( ( isset( $_SESSION['LANGUAGE']) ? $_SESSION['LANGUAGE'] : LANGUAGE));
+    $PAGE_TITLE = $MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'];
+    $PAGE_ICON = 'negative';
+    $show_screen = false;
+    if( $type == 'locked') {
+      $curr_user = ( intval( isset( $_SESSION['USER_ID']) ? $_SESSION['USER_ID'] : 0));
+      if( ( defined( 'SYSTEM_LOCKED') && ( int)SYSTEM_LOCKED == 1) && ( $curr_user != 1)) {
+        header( $_SERVER['SERVER_PROTOCOL'].' 503 Service Unavailable');
+        // first kick logged users out of the system
+        // delete all remember keys from table 'user' except user_id=1
+        $sql = 'UPDATE `'.TABLE_PREFIX.'users` SET `remember_key`=\'\' ';
+        $sql .= 'WHERE `user_id`<>1';
+        $database->query( $sql);
+        // delete remember key-cookie if set
+        if( isset( $_COOKIE['REMEMBER_KEY'])) {
+          setcookie( 'REMEMBER_KEY', '', time() - 3600, '/');
+        }
+        // overwrite session array
+        $_SESSION = array();
+        // delete session cookie if set
+        if( ini_get( "session.use_cookies")) {
+          $params = session_get_cookie_params();
+          setcookie( session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"],
+            $params["httponly"]);
+        }
+        // delete the session itself
+        session_destroy();
+        $PAGE_TITLE = $MESSAGE['GENERIC_WEBSITE_LOCKED'];
+        $PAGE_ICON = 'system';
+        $show_screen = true;
+      }
+    } else {
+      header( $_SERVER['SERVER_PROTOCOL'].' 503 Service Unavailable');
+      $show_screen = true;
+    }
+    if( $show_screen) {
+      $sMaintanceFile = $this->correct_theme_source( 'maintenance.htt');
+      if( file_exists( $sMaintanceFile)) {
+        $tpl = new Template( dirname( $sMaintanceFile));
+        $tpl->set_file( 'page', 'maintenance.htt');
+        $tpl->set_block( 'page', 'main_block', 'main');
+        if( defined( 'DEFAULT_CHARSET')) {
+          $charset = DEFAULT_CHARSET;
+        } else {
+          $charset = 'utf-8';
+        }
+        $tpl->set_var( 'PAGE_TITLE', $PAGE_TITLE);
+        $tpl->set_var( 'CHECK_BACK', $MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON']);
+        $tpl->set_var( 'CHARSET', $charset);
+        $tpl->set_var( 'WB_URL', WB_URL);
+        $tpl->set_var( 'BE_PATIENT', $MESSAGE['GENERIC_BE_PATIENT']);
+        $tpl->set_var( 'THEME_URL', THEME_URL);
+        $tpl->set_var( 'PAGE_ICON', $PAGE_ICON);
+        $tpl->set_var( 'LANGUAGE', $LANGUAGE);
+        $tpl->parse( 'main', 'main_block', false);
+        $tpl->pparse( 'output', 'page');
+        exit();
+      } else {
+        require_once ( WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php');
+        echo '<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 TransitionalEN" "http:www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+            <head><title>'.$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'].'</title>
+            <style type="text/css"><!-- body{ font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 12px; background-image: url("'.
+          WB_URL.'/templates/'.DEFAULT_THEME.
+          '/images/background.png");background-repeat: repeat-x; background-color: #A8BCCB; text-align: center; }
+            h1 { margin: 0; padding: 0; font-size: 18px; color: #000; text-transform: uppercase;}--></style></head><body>
+            <br /><h1>'.$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'].'</h1><br />
+            '.$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'].'</body></html>';
+      }
+      flush();
+      exit();
+    }
+  }
+
+    /**
+     * wb::mail()
+     *
+     * @param string $sFromAddress
+     * @param string $toAddress, comma sepated list of adresses
+     * @param string $sSubject
+     * @param string $sMessage
+     * @param string $sFromname
+     * @param string $toName
+     * @param string $sReplyTo
+     * @param string $sReplyToName
+     * @param string $sMessagePath
+     * @param array  $aAttachment=array (
+     *                            'File to the attachment',
+     *                             )
+     * @return
+     */
+    public function mail(
+                    $sFromAddress,
+                    $toAddress,
+                    $sSubject,
+                    $sMessage,
+                    $sFromname='',
+                    $toName='',
+                    $sReplyToAddress='',
+                    $sReplyToName='',
+                    $sMessagePath='',
+                    $aAttachment=null
+                    ) {
+
+        $aParameters      = array();
+        $aFromAddress     = array();
+        $aToAddress       = array();
+        $aReplyToAddress  = array();
+
+        // Strip breaks and trim
+        if ($sFromname!='') {
+            $sFromname    = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $sFromname );
+            $sFromname    = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $sFromname );
+        }
+        $sFromAddress     = trim(preg_replace('/[\r\n]/', '', $sFromAddress));
+
+        if ($toName!='') {
+            $toName       = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $toName );
+        }
+        $toAddress        = trim(preg_replace('/[\r\n]/', '', $toAddress));
+
+        if ($sReplyToName!='') {
+            $sReplyToName = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $sReplyToName );
+        }
+        //Set who the message is to be sent from
+        $sReplyToAddress  = trim(preg_replace('/[\r\n]/', '', $sReplyToAddress));
+        $sReplyToAddress  = ( ($sReplyToAddress=='')?$toAddress:$sReplyToAddress );
+
+        $sSubject         = trim(preg_replace('/[\r\n]/', '', $sSubject));
+        // sanitize parameter to prevent injection
+        $sMessage         = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $sMessage );
+
+        // create PHPMailer object and define default settings
+        $myMail = new wbmailer(true);
+
+        try {
+            $html   =  preg_replace('/[\n\r]/', '',nl2br($this->StripCodeFromText($sMessage)));
+            $plain  = $myMail->html2text($html);
+
+            // convert commaseperated toAdresses List to an array
+            $aToAddress = $myMail->parseAddresses( $toAddress, false );
+
+            if ($sFromAddress!='') {
+            // set user defined from address
+                $myMail->setFrom($sFromAddress, $sFromname);
+            // set user defined to address
+                $myMail->AddAddress($toAddress, $toName);
+            // set user defined to ReplyTo
+                if ($sReplyToAddress!='') {$myMail->addReplyTo($sReplyToAddress, $sReplyToName);}
+            }
+
+    //Set the subject line
+            $myMail->Subject = $sSubject;
+
+            $myMail->wrapText($html, 80);
+
+    //Read an HTML message body from an external file, convert referenced images to embedded,
+    //convert HTML into a basic plain-text alternative body
+            $myMail->msgHTML( $html, $sMessagePath, true);
+
+            if( is_array( $aAttachment )) {
+                foreach($aAttachment as $sFile) {
+                    $myMail->AddAttachment( $sFile );
+                }
+            }
+
+            if( $myMail->getReplyToAddresses() ) { }
+    //send the message, check for errors
+            $myMail->Send();
+            return true;
+        } catch (phpmailerException $e) {
+            echo $e->errorMessage(); //Pretty error messages from PHPMailer
+        } catch (Exception $e) {
+            echo $e->getMessage(); //Boring error messages from anything else!
+        }
+
+    }
+
+/*--------------------------------------------------------------------------------------------*/
+    // Validate send email
+    public function _mail($fromaddress, $toaddress, $subject, $message, $fromname='') {
+/*
+    INTEGRATED OPEN SOURCE PHPMAILER CLASS FOR SMTP SUPPORT AND MORE
+    SOME SERVICE PROVIDERS DO NOT SUPPORT SENDING MAIL VIA PHP AS IT DOES NOT PROVIDE SMTP AUTHENTICATION
+    NEW WBMAILER CLASS IS ABLE TO SEND OUT MESSAGES USING SMTP WHICH RESOLVE THESE ISSUE (C. Sommer)
+
+    NOTE:
+    To use SMTP for sending out mails, you have to specify the SMTP host of your domain
+    via the Settings panel in the backend of Website Baker
+*/
+
+        $fromaddress = preg_replace('/[\r\n]/', '', $fromaddress);
+        $toaddress = preg_replace('/[\r\n]/', '', $toaddress);
+        $subject = preg_replace('/[\r\n]/', '', $subject);
+        // $message_alt = $message;
+        // $message = preg_replace('/[\r\n]/', '<br \>', $message);
+
+        // create PHPMailer object and define default settings
+        $myMail = new wbmailer();
+        // set user defined from address
+        if ($fromaddress!='') {
+            if($fromname!='') $myMail->FromName = $fromname;  // FROM-NAME
+            $myMail->From = $fromaddress;                     // FROM:
+            $myMail->AddReplyTo($fromaddress);                // REPLY TO:
+        }
+        // define recepient and information to send out
+        $myMail->AddAddress($toaddress);                      // TO:
+        $myMail->Subject = $subject;                          // SUBJECT
+        $myMail->Body = nl2br($message);                      // CONTENT (HTML)
+        $myMail->AltBody = strip_tags($message);              // CONTENT (TEXT)
+        // check if there are any send mail errors, otherwise say successful
+        if (!$myMail->Send()) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+ /**
+  * checks if there is an alternative Theme template
+  *
+  * @param string $sThemeFile set the template.htt
+  * @return string the relative theme path
+  *
+  */
+    public function correct_theme_source($sThemeFile = 'start.htt') {
+    $sRetval = $sThemeFile;
+    if (file_exists(THEME_PATH.'/templates/'.$sThemeFile )) {
+        $sRetval = THEME_PATH.'/templates/'.$sThemeFile;
+    } else {
+        if (is_readable(ADMIN_PATH.'/themes/templates/'.$sThemeFile )) {
+        $sRetval = ADMIN_PATH.'/themes/templates/'.$sThemeFile;
+        } else {
+            throw new InvalidArgumentException('missing template file '.$sThemeFile);
+        }
+    }
+    return $sRetval;
+    }
+
+    /**
+     * Check if a foldername doesn't have invalid characters
+     *
+     * @param String $str to check
+     * @return Bool
+     */
+    public function checkFolderName($str){
+        return !( preg_match('#\^|\\\|\/|\.|\?|\*|"|\'|\<|\>|\:|\|#i', $str) ? TRUE : FALSE );
+    }
+
+    /**
+     * Check the given path to make sure current path is within given basedir
+     * normally document root
+     *
+     * @param String $sCurrentPath
+     * @param String $sBaseDir
+     * @return $sCurrentPath or FALSE
+     */
+    public function checkpath($sCurrentPath, $sBaseDir = WB_PATH){
+        // Clean the cuurent path
+        $sCurrentPath = rawurldecode($sCurrentPath);
+        $sCurrentPath = realpath($sCurrentPath);
+        $sBaseDir = realpath($sBaseDir);
+        // $sBaseDir needs to exist in the $sCurrentPath
+        $pos = stripos ($sCurrentPath, $sBaseDir );
+
+        if ( $pos === FALSE ){
+            return false;
+        } elseif( $pos == 0 ) {
+            return $sCurrentPath;
+        } else {
+            return false;
+        }
+    }
+
+/**
+ * remove <?php code ?>, [[text]], link, script, scriptblock and styleblock from a given string
+ * and return the cleaned string
+ *
+ * @param string $sValue
+ * @returns
+ *    false: if @param is not a string
+ *    string: cleaned string
+ */
+    public function StripCodeFromText($mText, $iFlags = Sanitize::REMOVE_DEFAULT )
+    {
+        if (!class_exists('Sanitize')) { include __DIR__.'/Sanitize.php'; }
+        return Sanitize::StripFromText($mText, $iFlags);
+    }
+
+  /**
+   * ReplaceAbsoluteMediaUrl
+   * @param string $sContent
+   * @return string
+   * @description Replace URLs witch are pointing into MEDIA_DIRECTORY with an URL
+   *              independend placeholder
+   */
+/*
+  public function ReplaceAbsoluteMediaUrl( $sContent)
+  {
+//    $oReg = WbAdaptor::getInstance();
+    if( ini_get( 'magic_quotes_gpc') == true) {
+      $sContent = $this->strip_slashes( $sContent);
+    }
+    if( is_string( $sContent)) {
+      $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+      $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+      $sMediaUrl = WB_URL.MEDIA_DIRECTORY.'/';
+      $aSearchfor = array(
+          '@(<[^>]*=\s*")('.preg_quote($sMediaUrl).
+          ')([^">]*".*>)@siU', '@(<[^>]*=\s*")('.preg_quote( WB_URL.'/').')([^">]*".*>)@siU',
+          '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+          '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+          );
+      $aReplacements = array( '$1{SYSVAR:AppUrl.MediaDir}$3', '$1{SYSVAR:AppUrl}$3','\1'.$sDocumentRootUrl.'/\3','$1{SYSVAR:MEDIA_REL}$3' );
+      $sContent = preg_replace( $aSearchfor, $aReplacements, $sContent);
+    }
+    return $sContent;
+  }
+  public function OldReplaceAbsoluteMediaUrl( $sContent)
+  {
+    $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+    $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $aPatterns = array(
+        '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+        '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+    );
+    $aReplacements = array(
+        '\1'.$sDocumentRootUrl.'/\3',
+        '$1{SYSVAR:MEDIA_REL}$3'
+    );
+    $content = preg_replace($aPatterns, $aReplacements, $content);
+    return $sContent;
+  }
+*/
+
+/**
+ * get all defined variables from an info.php file
+ * @param string $sFilePath  full path and filename
+ * @return array containing all settings (empty array on error)
+ */
+    public function getContentFromInfoPhp($sFilePath)
+    {
+        $aInfo = array();
+        if (is_readable($sFilePath)) {
+            $aOldVars = array();
+            $aOldVars = get_defined_vars();
+            include $sFilePath;
+            $aNewVars = get_defined_vars();
+            $aInfo = array_diff_key($aNewVars, $aOldVars);
+            $aCommon = array();
+            foreach ($aInfo as $key => $val) {
+                if (is_array($val)) { continue; }
+                $sShortKey = str_replace(array('template_', 'module_'), '', $key);
+                $aCommon[$sShortKey] = $val;
+                unset($aInfo[$key]);
+            }
+            $aInfo['common'] = $aCommon;
+        }
+        return $aInfo;
+    } // end of getContentFromInfoPhp()
+}

Property changes on: trunk/framework/class.wb.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.wbmailer.php
===================================================================
--- trunk/framework/class.wbmailer.php	(nonexistent)
+++ trunk/framework/class.wbmailer.php	(revision 2)
@@ -0,0 +1,177 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         frontend
+ * @subpackage      wbmailer
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @examples        http://phpmailer.worxware.com/index.php?pg=examples
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+//SMTP needs accurate times, and the PHP time zone MUST be set
+//This should be done in your php.ini, but this is how to do it if you don't have access to that
+date_default_timezone_set('Etc/UTC');
+
+// Include PHPMailer autoloader in initialize
+
+class wbmailer extends PHPMailer
+{
+    // new websitebaker mailer class (subset of PHPMailer class)
+    // setting default values
+
+
+    function __construct($exceptions = false) {//
+
+        parent::__construct($exceptions);//
+
+        $database = $GLOBALS['database'];
+        $errorMessage = [];
+        $db_server_email = ''; // required
+        // set mailer defaults (PHP mail function)
+        $db_wbmailer_routine = "phpmail";
+        $db_wbmailer_smtp_host = ""; // required if smtp
+        $db_wbmailer_smtp_port = 25; // required
+        $db_wbmailer_smtp_secure = ''; // required if smtp
+        $db_wbmailer_default_sendername = 'WB Mailer'; // required
+// && mb_strlen($db_wbmailer_smtp_host) > 5
+        // get mailer settings from database
+        $sql = 'SELECT * FROM `' .TABLE_PREFIX. 'settings` '
+              . 'WHERE `name` LIKE (\'wbmailer\_%\') '
+              . 'OR `name`=\'server_email\'';
+        $oRes = $database->query($sql);
+        while($aSettings = $oRes->fetchRow( MYSQLI_ASSOC )) {
+            ${'db_'.$aSettings['name']} = $aSettings['value'];
+            switch ($aSettings['name']):
+                case 'server_email':
+                    if (filter_var($aSettings['value'], FILTER_VALIDATE_EMAIL) === false){
+                      $this->setError('Server E-Mail is empty or not valide');
+                    };
+            endswitch;
+// TODO sanitize smtp settings
+           if ($db_wbmailer_routine == "smtp"){
+              switch ($aSettings['name']):
+                  case 'wbmailer_smtp_host':
+                      $db_wbmailer_smtp_host = $aSettings['value'];
+                      break;
+                  case 'wbmailer_smtp_port':
+                      $db_wbmailer_smtp_port = (int)$aSettings['value'];
+                      break;
+                  case 'wbmailer_smtp_secure':
+                      $db_wbmailer_smtp_secure = $aSettings['value'];
+                      break;
+                  case 'wbmailer_smtp_username':
+                      break;
+                  case 'wbmailer_smtp_password':
+                      break;
+                  case 'wbmailer_default_sendername':
+                      break;
+                  default:
+                      break;
+              endswitch;
+           }
+        }
+
+/**
+     * `echo` Output plain-text as-is, appropriate for CLI
+     * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+     * `error_log` Output to error log as configured in php.ini
+     *
+     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+     * <code>
+     * $this->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+     * </code>
+ */
+
+        $this->set('SMTPDebug', ((defined('DEBUG') && DEBUG)?2:0));    // Enable verbose debug output
+        $this->set('Debugoutput', 'error_log');
+
+        // set method to send out emails
+        if ($db_wbmailer_routine == "smtp") {
+            // use SMTP for all outgoing mails send by Website Baker
+            $this->isSMTP();                                               // telling the class to use SMTP
+            $this->set('SMTPAuth', false);                                 // enable SMTP authentication
+            $this->set('Host', $db_wbmailer_smtp_host);                    // Set the hostname of the mail server
+            $this->set('Port', intval($db_wbmailer_smtp_port));            // Set the SMTP port number - likely to be 25, 465 or 587
+            $this->set('SMTPSecure', strtolower($db_wbmailer_smtp_secure));// Set the encryption system to use - ssl (deprecated) or tls
+            $this->set('SMTPKeepAlive', false);                            // SMTP connection will be close after each email sent
+            // check if SMTP authentification is required
+            if ($db_wbmailer_smtp_auth  && (mb_strlen($db_wbmailer_smtp_username) > 1) && (mb_strlen($db_wbmailer_smtp_password) > 1) ) {
+                // use SMTP authentification
+                $this->set('SMTPAuth', true);                                                 // enable SMTP authentication
+                $this->set('Username',   $db_wbmailer_smtp_username);                         // set SMTP username
+                $this->set('Password',   $db_wbmailer_smtp_password);                         // set SMTP password
+            }
+        } else if ($db_wbmailer_routine == "phpmail") {
+            // use PHP mail() function for outgoing mails send by Website Baker
+            $this->IsMail();
+        } else {
+            $this->isSendmail();   // telling the class to use SendMail transport
+        }
+
+        // set language file for PHPMailer error messages
+        if(defined("LANGUAGE")) {
+            $this->SetLanguage(strtolower(LANGUAGE),"language");    // english default (also used if file is missing)
+        }
+
+        // set default charset
+        if(defined('DEFAULT_CHARSET')) {
+            $this->set('CharSet', DEFAULT_CHARSET);
+        } else {
+            $this->set('CharSet', 'utf-8');
+        }
+
+        // set default sender name
+        if($this->FromName == 'Root User') {
+            if(isset($_SESSION['DISPLAY_NAME'])) {
+                $this->set('FromName', $_SESSION['DISPLAY_NAME']);                  // FROM NAME: display name of user logged in
+            } else {
+                $this->set('FromName', $db_wbmailer_default_sendername);            // FROM NAME: set default name
+            }
+        }
+
+        /*
+            some mail provider (lets say mail.com) reject mails send out by foreign mail
+            relays but using the providers domain in the from mail address (e.g. myname@mail.com)
+        $this->setFrom($db_server_email);                       // FROM MAIL: (server mail)
+        */
+
+        // set default mail formats
+        $this->IsHTML();                                        // Sets message type to HTML or plain.
+        $this->set('WordWrap', 80);
+        $this->set('Timeout', 30);
+    }
+
+    /**
+     * Send messages using $Sendmail.
+     * @return void
+     * @description  overrides isSendmail() in parent
+     */
+    public function isSendmail()
+    {
+        $ini_sendmail_path = ini_get('sendmail_path');
+        if (!preg_match('/sendmail$/i', $ini_sendmail_path)) {
+            if ($this->exceptions) {
+                throw new phpmailerException('no sendmail available');
+            }
+        } else {
+            $this->Sendmail = $ini_sendmail_path;
+            $this->Mailer = 'sendmail';
+        }
+    }
+
+}

Property changes on: trunk/framework/class.wbmailer.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/class.wbmailer.php.new.php
===================================================================
--- trunk/framework/class.wbmailer.php.new.php	(nonexistent)
+++ trunk/framework/class.wbmailer.php.new.php	(revision 2)
@@ -0,0 +1,201 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         frontend
+ * @subpackage      wbmailer
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @examples        http://phpmailer.worxware.com/index.php?pg=examples
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+//SMTP needs accurate times, and the PHP time zone MUST be set
+//This should be done in your php.ini, but this is how to do it if you don't have access to that
+date_default_timezone_set('Etc/UTC');
+
+// Include PHPMailer autoloader in initialize
+
+class wbmailer
+{
+    // new websitebaker mailer class (subset of PHPMailer class)
+    // setting default values
+    protected $aErrorMessage = [];
+    protected $cfg = [];
+
+    private $oMailer = null;
+
+    public function __construct(PHPMailer $oMailer)
+    {
+        $this->execute();
+    }
+/* ---------------------------------------------------------------------- */
+
+    public function execute($exceptions = false) {//
+        $database = $GLOBALS['database'];
+        $db_server_email = ''; // required
+        // set mailer defaults (PHP mail function)
+        $db_wbmailer_routine = "phpmail";
+        $db_wbmailer_smtp_host = ""; // required if smtp
+        $db_wbmailer_smtp_port = 25; // required
+        $db_wbmailer_smtp_secure = ''; // required if smtp
+        $db_wbmailer_default_sendername = 'WB Mailer'; // required
+
+        // get mailer settings from database
+        $sql = 'SELECT * FROM `' .TABLE_PREFIX. 'settings` '
+              . 'WHERE `name` LIKE (\'wbmailer\_%\') '
+              . 'OR `name`=\'server_email\'';
+        $oRes = $database->query($sql);
+        while($aSettings = $oRes->fetchRow( MYSQLI_ASSOC )) {
+            switch ($aSettings['name']):
+                case 'wbmailer_routine':
+                case 'server_email':
+                    ${'db_'.$aSettings['name']} = $aSettings['value'];
+                    if ($db_wbmailer_routine == "smtp"){
+                        switch ($aSettings['name']):
+                            case 'wbmailer_smtp_host':
+                            case 'wbmailer_smtp_port':
+                            case 'wbmailer_smtp_secure':
+                            case 'wbmailer_smtp_username':
+                            case 'wbmailer_smtp_password':
+                            case 'wbmailer_default_sendername':
+                            case 'wbmailer_smtp_auth':
+                                ${'db_'.$aSettings['name']} =  ( ($aSettings['value']=='true') || (intval($aSettings['value'])==1) ?true:false );
+                                break;
+                        endswitch;
+                    }
+                    break;
+                default:
+                break;
+            endswitch;
+        }
+
+/**
+     * `echo` Output plain-text as-is, appropriate for CLI
+     * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+     * `error_log` Output to error log as configured in php.ini
+     *
+     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+     * <code>
+     * $this->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+     * </code>
+     * oMailer->
+ */
+
+        $this->set('SMTPDebug', ((defined('DEBUG') && DEBUG)?2:0));    // Enable verbose debug output
+        $this->set('Debugoutput', 'error_log');
+
+        // set method to send out emails
+        if ($db_wbmailer_routine == "smtp" && mb_strlen($db_wbmailer_smtp_host) > 5 ) {
+            // use SMTP for all outgoing mails send by Website Baker
+            $this->oMailer->isSMTP();                                               // telling the class to use SMTP
+            $this->oMailer->set('SMTPAuth', false);                                 // enable SMTP authentication
+            $this->oMailer->set('Host', $db_wbmailer_smtp_host);                    // Set the hostname of the mail server
+            $this->oMailer->set('Port', intval($db_wbmailer_smtp_port));            // Set the SMTP port number - likely to be 25, 465 or 587
+            $this->oMailer->set('SMTPSecure', strtolower($db_wbmailer_smtp_secure));// Set the encryption system to use - ssl (deprecated) or tls
+            $this->oMailer->set('SMTPKeepAlive', false);                            // SMTP connection will be close after each email sent
+            // check if SMTP authentification is required
+            if ($db_wbmailer_smtp_auth  && (mb_strlen($db_wbmailer_smtp_username) > 1) && (mb_strlen($db_wbmailer_smtp_password) > 1) ) {
+                // use SMTP authentification
+                $this->oMailer->set('SMTPAuth', true);                                                 // enable SMTP authentication
+                $this->oMailer->set('Username',   $db_wbmailer_smtp_username);                         // set SMTP username
+                $this->oMailer->set('Password',   $db_wbmailer_smtp_password);                         // set SMTP password
+            }
+        } else if ($db_wbmailer_routine == "phpmail") {
+            // use PHP mail() function for outgoing mails send by Website Baker
+            $this->oMailer->IsMail();
+        } else {
+            $this->oMailer->isSendmail();   // telling the class to use SendMail transport
+        }
+
+        // set language file for PHPMailer error messages
+        if(defined("LANGUAGE")) {
+            $this->SetLanguage(strtolower(LANGUAGE),"language");    // english default (also used if file is missing)
+        }
+
+        // set default charset
+        if(defined('DEFAULT_CHARSET')) {
+            $this->oMailer->set('CharSet', DEFAULT_CHARSET);
+        } else {
+            $this->set('CharSet', 'utf-8');
+        }
+
+        // set default sender name
+        if($this->oMailer->FromName == 'Root User') {
+            if(isset($_SESSION['DISPLAY_NAME'])) {
+                $this->oMailer->set('FromName', $_SESSION['DISPLAY_NAME']);                  // FROM NAME: display name of user logged in
+            } else {
+                $this->oMailer->set('FromName', $db_wbmailer_default_sendername);            // FROM NAME: set default name
+            }
+        }
+
+        /*
+            some mail provider (lets say mail.com) reject mails send out by foreign mail
+            relays but using the providers domain in the from mail address (e.g. myname@mail.com)
+        $this->setFrom($db_server_email);                       // FROM MAIL: (server mail)
+        */
+
+        // set default mail formats
+        $this->oMailer->IsHTML();                                        // Sets message type to HTML or plain.
+        $this->oMailer->set('WordWrap', 80);
+        $this->oMailer->set('Timeout', 30);
+    }
+
+/* ---------------------------------------------------------------------- */
+
+    public function __isset($name)
+    {
+        return isset($this->aConfig[$name]);
+    }
+
+     public function __set($name, $value)
+     {
+//         throw new Exception('Tried to set a readonly or nonexisting property ['.$name.']!!');
+         return $this->aConfig[$name] = $value;
+     }
+
+    public function __get($name)
+    {
+        $retval = null;
+        if (!$this->__isset($name)) {
+            throw new Exception('Tried to get nonexisting property ['.$name.']');
+        }
+            $retval = $this->aConfig[$name];
+        return $retval;
+    }
+/* ---------------------------------------------------------------------- */
+
+    /**
+     * Send messages using $Sendmail.
+     * @return void
+     * @description  overrides isSendmail() in parent
+     */
+    public function isSendmail()
+    {
+        $ini_sendmail_path = ini_get('sendmail_path');
+        if (!preg_match('/sendmail$/i', $ini_sendmail_path)) {
+            if ($this->exceptions) {
+                throw new phpmailerException('no sendmail available');
+            }
+        } else {
+            $this->oMailer->Sendmail = $ini_sendmail_path;
+            $this->oMailer->Mailer = 'sendmail';
+        }
+    }
+
+} // end of class
+
+

Property changes on: trunk/framework/class.wbmailer.php.new.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/frontend.functions.php
===================================================================
--- trunk/framework/frontend.functions.php	(nonexistent)
+++ trunk/framework/frontend.functions.php	(revision 2)
@@ -0,0 +1,686 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         frontend.functions
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+    $include_head_link_css = '';
+    $include_head_links    = '';
+    $include_body_links    = '';
+
+    $aAlllowedModules = array();
+    $aModules = glob (WB_PATH.'/modules/*', GLOB_ONLYDIR|GLOB_NOSORT);
+    foreach ($aModules as $sPath){
+        if (is_readable($sPath.'/include.php')){$aAlllowedModules[] = basename($sPath);}
+    }
+    $sAllowedModules   = implode(', ',
+                         array_map(function(&$item) use ($database){
+                                       return '\''.$database->escapeString($item) .'\'';
+                                   },$aAlllowedModules));
+
+// workout to included frontend.css, fronten.js and frontend_body.js in snippets and tools
+    $sql  = 'SELECT `directory`,`function` FROM `'.TABLE_PREFIX.'addons` '
+          . 'WHERE `type`=\'module\' '
+          .   'AND `function` IN (\'snippet\', \'tool\') '
+          .   'AND `directory` IN('.$sAllowedModules.')'
+          . '';
+    if(($oSnippets = $database->query($sql)))
+    {
+        while($aSnippet = $oSnippets->fetchRow( MYSQLI_ASSOC))
+        {
+            $module_dir = $aSnippet['directory'];
+            if (is_readable(WB_PATH.'/modules/'.$module_dir.'/include.php'))
+            {
+                include(WB_PATH.'/modules/'.$module_dir.'/include.php');
+            // check if frontend.css file needs to be included into the <head></head> of index.php
+                if( is_readable(WB_PATH .'/modules/'.$module_dir.'/frontend.css')) {
+                    $include_head_link_css .= "\t".'<link rel="stylesheet" type="text/css" href="'.WB_URL.'/modules/'.$module_dir.'/frontend.css" media="screen" />'."\n";
+                    $include_head_file = 'frontend.css';
+                }
+            // check if frontend.js file needs to be included into the <body></body> of index.php
+                if(is_readable(WB_PATH .'/modules/'.$module_dir.'/frontend.js')) {
+                    $include_head_links .= "\t".'<script src="'.WB_URL.'/modules/'.$module_dir.'/frontend.js" type="text/javascript" ></script>';
+                    $include_head_file = 'frontend.js';
+                }
+            // check if frontend_body.js file needs to be included into the <body></body> of index.php
+                if(is_readable(WB_PATH .'/modules/'.$module_dir.'/frontend_body.js')) {
+                    $include_body_links .= "\t".'<script src="'.WB_URL.'/modules/'.$module_dir.'/frontend_body.js" type="text/javascript" ></script>'."\n";
+                    $include_body_file   = 'frontend_body.js';
+                }
+            }
+        }
+    }
+/* ------------------------------------------------------------------------------------------------ */
+
+// Frontend functions
+if(!function_exists('page_link')) {
+    /**
+     * generate full qualified URL from relative link based on pages_dir
+     * @param string $link
+     * @return string
+     */
+    function page_link($link) {
+        return $GLOBALS['wb']->page_link($link);
+    }
+}
+
+if (!function_exists('get_page_link')) {
+    /**
+     * get relative link from database based on pages_dir
+     * @global <type> $database
+     * @param <type> $id
+     * @return <type>
+     */
+    function get_page_link( $id )
+    {
+        global $database;
+        $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($id);
+        $link = $database->get_one( $sql );
+        return $link;
+    }
+}
+
+//function to highlight search results
+if(!function_exists('search_highlight')) {
+    /**
+     *
+     * @staticvar boolean $string_ul_umlaut
+     * @staticvar boolean $string_ul_regex
+     * @param string $foo
+     * @param array $arr_string
+     * @return string
+     */
+    function search_highlight($foo='', $arr_string=array()) {
+        require_once(WB_PATH.'/framework/functions.php');
+        static $string_ul_umlaut = FALSE;
+        static $string_ul_regex = FALSE;
+        if($string_ul_umlaut === FALSE || $string_ul_regex === FALSE) {
+            require(WB_PATH.'/search/search_convert.php');
+        }
+        $foo = entities_to_umlauts($foo, 'UTF-8');
+        array_walk($arr_string, create_function('&$v,$k','$v = preg_quote($v, \'~\');'));
+        $search_string = implode("|", $arr_string);
+        $string = str_replace($string_ul_umlaut, $string_ul_regex, $search_string);
+        // the highlighting
+        // match $string, but not inside <style>...</style>, <script>...</script>, <!--...--> or HTML-Tags
+        // Also droplet tags are now excluded from highlighting.
+        // split $string into pieces - "cut away" styles, scripts, comments, HTML-tags and eMail-addresses
+        // we have to cut <pre> and <code> as well.
+        // for HTML-Tags use <(?:[^<]|<.*>)*> which will match strings like <input ... value="<b>value</b>" >
+        $matches = preg_split("~(\[\[.*\]\]|<style.*</style>|<script.*</script>|<pre.*</pre>|<code.*</code>|<!--.*-->|<(?:[^<]|<.*>)*>|\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}\b)~iUs",$foo,-1,(PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
+        if(is_array($matches) && $matches != array()) {
+            $foo = "";
+            foreach($matches as $match) {
+                if($match{0}!="<" && !preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}$/i', $match) && !preg_match('~\[\[.*\]\]~', $match)) {
+                    $match = str_replace(array('&lt;', '&gt;', '&amp;', '&quot;', '&#039;', '&nbsp;'), array('<', '>', '&', '"', '\'', "\xC2\xA0"), $match);
+                    $match = preg_replace('~('.$string.')~ui', '_span class=_highlight__$1_/span_',$match);
+                    $match = str_replace(array('&', '<', '>', '"', '\'', "\xC2\xA0"), array('&amp;', '&lt;', '&gt;', '&quot;', '&#039;', '&nbsp;'), $match);
+                    $match = str_replace(array('_span class=_highlight__', '_/span_'), array('<span class="highlight">', '</span>'), $match);
+                }
+                $foo .= $match;
+            }
+        }
+
+        if(DEFAULT_CHARSET != 'utf-8') {
+            $foo = umlauts_to_entities($foo, 'UTF-8');
+        }
+        return $foo;
+    }
+}
+
+if (!function_exists('page_menu')) {
+    /**
+     * Old menu generator
+     * @deprecated from WB 2.8.x and up
+     * @global <type> $wb
+     * @param <type> $parent
+     * @param <type> $menu_number
+     * @param <type> $item_template
+     * @param <type> $menu_header
+     * @param <type> $menu_footer
+     * @param <type> $default_class
+     * @param <type> $current_class
+     * @param <type> $recurse
+     */
+    function page_menu($parent = 0, $menu_number = 1, $item_template = '<li[class]>[a] [menu_title] [/a]</li>', $menu_header = '<ul>', $menu_footer = '</ul>', $default_class = ' class="menu_default"', $current_class = ' class="menu_current"', $recurse = LEVEL) {
+        global $wb;
+        $wb->menu_number=$menu_number;
+        $wb->menu_item_template=$item_template;
+        $wb->menu_item_footer='';
+        $wb->menu_parent = $parent;
+        $wb->menu_header = $menu_header;
+        $wb->menu_footer = $menu_footer;
+        $wb->menu_default_class = $default_class;
+        $wb->menu_current_class = $current_class;
+        $wb->menu_recurse = $recurse+2;
+        $wb->menu();
+        unset($wb->menu_parent);
+        unset($wb->menu_number);
+        unset($wb->menu_item_template);
+        unset($wb->menu_item_footer);
+        unset($wb->menu_header);
+        unset($wb->menu_footer);
+        unset($wb->menu_default_class);
+        unset($wb->menu_current_class);
+        unset($wb->menu_start_level);
+        unset($wb->menu_collapse);
+        unset($wb->menu_recurse);
+    }
+}
+
+if (!function_exists('show_menu')) {
+    /**
+     * Old menu generator
+     * @deprecated from WB 2.8.x and up
+     * @global  $wb
+     * @param <type> $menu_number
+     * @param <type> $start_level
+     * @param <type> $recurse
+     * @param <type> $collapse
+     * @param <type> $item_template
+     * @param <type> $item_footer
+     * @param <type> $menu_header
+     * @param <type> $menu_footer
+     * @param <type> $default_class
+     * @param <type> $current_class
+     * @param <type> $parent
+     */
+    function show_menu($menu_number = NULL, $start_level=NULL, $recurse = NULL, $collapse = NULL, $item_template = NULL, $item_footer = NULL, $menu_header = NULL, $menu_footer = NULL, $default_class = NULL, $current_class = NULL, $parent = NULL) {
+        global $wb;
+        if (isset($menu_number))
+            $wb->menu_number=$menu_number;
+        if (isset($start_level))
+            $wb->menu_start_level=$start_level;
+        if (isset($recurse))
+            $wb->menu_recurse=$recurse;
+        if (isset($collapse))
+            $wb->menu_collapse=$collapse;
+        if (isset($item_template))
+            $wb->menu_item_template=$item_template;
+        if (isset($item_footer))
+            $wb->menu_item_footer=$item_footer;
+        if (isset($menu_header))
+            $wb->menu_header=$menu_header;
+        if (isset($menu_footer))
+            $wb->menu_footer=$menu_footer;
+        if (isset($default_class))
+            $wb->menu_default_class=$default_class;
+        if (isset($current_class))
+            $wb->menu_current_class=$current_class;
+        if (isset($parent))
+            $wb->menu_parent=$parent;
+        $wb->menu();
+        unset($wb->menu_recurse);
+        unset($wb->menu_parent);
+        unset($wb->menu_start_level);
+    }
+}
+
+if (!function_exists('page_content')) {
+    /**
+     *
+     * @global array $TEXT
+     * @global array $MENU
+     * @global array $HEADING
+     * @global array $MESSAGE
+     * @global array $globals several global vars
+     * @global datadase $database
+     * @global wb $wb
+     * @global string $global_name
+     * @param int $block
+     * @return void
+     */
+    function page_content($block = 1) {
+        // Get outside objects
+        global $TEXT,$MENU,$HEADING,$MESSAGE;
+        global $globals;
+        global $database;
+        global $wb;
+        $admin = $wb;
+
+        if ($wb->page_access_denied==true) {
+            echo $MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'];
+            return;
+        }
+        if ($wb->page_no_active_sections==true) {
+            echo $MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'];
+            return;
+        }
+        if(isset($globals) AND is_array($globals)) {
+            foreach($globals AS $global_name) {
+                global $$global_name;
+            }
+        }
+        // Make sure block is numeric
+        if (($block = intval($block)) == 0 ) { $block = 1;}
+        // Include page content
+        if (!defined('PAGE_CONTENT') OR $block!=1)
+        {
+            $page_id = intval($wb->page_id);
+            if (($wb instanceof frontend) && !$wb->page_is_visible($wb->page)) { // SOLVED dw2015
+             return ;
+            }
+        // First get all sections for this page
+            $sql  = 'SELECT `section_id`, `module`, `publ_start`, `publ_end` ';
+            $sql .= 'FROM `'.TABLE_PREFIX.'sections` ';
+            $sql .= 'WHERE `page_id`='.$page_id.' AND `block`='.$block.' ';
+            $sql .= 'ORDER BY `position`';
+            if( !($query_sections = $database->query($sql)) ) { return; }
+        // If none were found, check if default content is supposed to be shown
+            if($query_sections->numRows() == 0) {
+                if($wb->default_block_content == 'none') { return; }
+                if (is_numeric($wb->default_block_content)) {
+                    $page_id = $wb->default_block_content;
+                } else {
+                    $page_id = $wb->default_page_id;
+                }
+                $sql  = 'SELECT `section_id`, `module`, `publ_start`, `publ_end` ';
+                $sql .= 'FROM `'.TABLE_PREFIX.'sections` ';
+                $sql .= 'WHERE `page_id`='.$page_id.' AND `block`='.$block.' ';
+                $sql .= 'ORDER BY `position`';
+                if( !($query_sections = $database->query($sql)) ) { return; }
+                // Still no cotent found? Give it up, there's just nothing to show!
+                if($query_sections->numRows() == 0) { return; }
+            }
+            // Loop through them and include their module file
+            while($section = $query_sections->fetchRow(MYSQLI_ASSOC)) {
+                // skip this section if it is out of publication-date
+                $now = time();
+                if( !(($now<=$section['publ_end'] || $section['publ_end']==0) && ($now>=$section['publ_start'] || $section['publ_start']==0)) ) {
+                    continue;
+                }
+                $section_id = $section['section_id'] ;
+                $module = $section['module'] ;
+                // check if module exists - feature: write in errorlog
+                if(is_readable(WB_PATH.'/modules/'.$module.'/view.php')) {
+                 // fetch content -- this is where to place possible output-filters (before highlighting)
+                 ob_start() ; // fetch original content<div id="Sec103" class="section  m_modulename user-defined-class" >
+                 $sSectionIdPrefix = (defined('SEC_ANCHOR') && SEC_ANCHOR != '') ? SEC_ANCHOR : 'Sec' ;
+                 require (WB_PATH.'/modules/'.$module.'/view.php') ;
+                 $content = ob_get_clean() ;
+                 if($content != '') {
+                   $sBeforeContent = ($sSectionIdPrefix == 'none') ? '' : "\n".'<div id="'.$sSectionIdPrefix.$section_id.'" class="section m_'.$module.'" >'."\n" ;
+                   $sAfterContent = ($sSectionIdPrefix == 'none') ? '' : "\n".'</div><!-- '.$module.$section_id.' -->'."\n" ;
+                   $content = $sBeforeContent.$content.$sAfterContent ;
+                 }
+                } else {
+                    continue;
+                }
+                // highlights searchresults
+                if (isset($_GET['searchresult']) && is_numeric($_GET['searchresult'])
+                          && !isset($_GET['nohighlight'])
+                          && isset($_GET['sstring'])
+                          && !empty($_GET['sstring'])
+                          ) {
+                    $arr_string = explode(" ", $_GET['sstring']);
+                    if($_GET['searchresult']==2) { // exact match
+                        $arr_string[0] = str_replace("_", " ", $arr_string[0]);
+                    }
+                    echo search_highlight($content, $arr_string);
+                } else {
+                    echo $content;
+                }
+            }
+        } else {   // Searchresults! But also some special pages,
+         // e.g. guestbook (add entry), news (add comment) uses this
+            ob_start(); // fetch original content
+            require(PAGE_CONTENT);
+            $content = ob_get_clean();
+            // Apply Filters
+            if(function_exists('OutputFilterApi')) {
+                $content = OutputFilterApi('OpF?arg=special', $content);
+            }
+            echo $content;
+        }
+    }
+}
+
+if (!function_exists('show_content')) {
+    function show_content($block=1) {
+        page_content($block);
+    }
+}
+
+if (!function_exists('show_breadcrumbs'))
+{
+    function show_breadcrumbs($sep = ' &raquo; ',$level = 0, $links = true, $depth = -1, $title = '', $print=true)
+    {
+        global $wb,$database,$MENU;
+        $retVal = '';
+        $page_id = $wb->page_id;
+        $title = (trim($title) == '') ? $MENU['BREADCRUMB'] : $title;
+        if ($page_id != 0)
+        {
+            $counter = 0;
+            // get links as array
+            $bread_crumbs = $wb->page_trail;
+            $count = sizeof($bread_crumbs);
+            // level can't be greater than sum of links
+            $level = ($count <= $level ) ? $count-1 : $level;
+            // set level from which to show, delete indexes in array
+            $crumbs = array_slice($bread_crumbs, $level );
+            $depth = ($depth <= 0) ? sizeof($crumbs) : $depth;
+            // if empty array, set orginal links
+            $crumbs = (!empty($crumbs)) ?  $crumbs : $wb->page_trail;
+            $total_crumbs = ( ($depth <= 0) || ($depth > sizeof($crumbs)) ) ? sizeof($crumbs) : $depth;
+            $retVal .= '<div class="breadcrumb">'.PHP_EOL.'<span class="title">'.$title.'</span>'.PHP_EOL;
+          //  print_r($crumbs);
+            foreach ($crumbs as $temp)
+            {
+                if($counter == $depth) { break; }
+                // set links and separator
+                    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.(int)$temp;
+                    $query_menu = $database->query($sql);
+                    $page = $query_menu->fetchRow();
+                    $show_crumb = (($links == true) && ($temp != $page_id))
+                            ? '<a href="'.page_link($page['link']).'" class="link">'.$page['menu_title'].'</a>'.PHP_EOL
+                            : '<span class="crumb">'.$page['menu_title'].'</span>'.PHP_EOL;
+                    // Permission
+                    switch ($page['visibility'])
+                    {
+                        case 'none' :
+                        case 'hidden' :
+                        // if show, you know there is an error in a hidden page
+                            $retVal .= $show_crumb.'&nbsp;';
+                            break;
+                        default :
+                            $retVal .= $show_crumb;
+                            break;
+                    }
+                    if ( ( $counter <> $total_crumbs-1 ) )
+                    {
+                        $retVal .= '<span class="separator">'.$sep.'</span>'.PHP_EOL;
+                    }
+                $counter++;
+            }
+            $retVal .=  "</div>".PHP_EOL;
+            if ($print) { print $retVal;} else {return $retVal;}
+        }
+    }
+}
+
+// Function for page title
+if (!function_exists('page_title')) {
+    function page_title($spacer = ' - ', $template = '[WEBSITE_TITLE][SPACER][PAGE_TITLE]') {
+        $vars = array('[WEBSITE_TITLE]', '[PAGE_TITLE]', '[MENU_TITLE]', '[SPACER]');
+        $values = array(WEBSITE_TITLE, PAGE_TITLE, MENU_TITLE, $spacer);
+        echo str_replace($vars, $values, $template);
+    }
+}
+
+// Function for page description
+if (!function_exists('page_description')) {
+    function page_description() {
+        global $wb;
+        if ($wb->page_description!='') {
+            echo $wb->page_description;
+        } else {
+            echo WEBSITE_DESCRIPTION;
+        }
+    }
+}
+
+// Function for page keywords
+if (!function_exists('page_keywords')) {
+    function page_keywords() {
+        global $wb;
+        if ($wb->page_keywords!='') {
+            echo $wb->page_keywords;
+        } else {
+            echo WEBSITE_KEYWORDS;
+        }
+    }
+}
+
+// Function for page header
+if (!function_exists('page_header')) {
+    function page_header($date_format = 'Y') {
+        echo WEBSITE_HEADER;
+    }
+}
+
+// Function for page footer
+if (!function_exists('page_footer')) {
+    function page_footer($date_format = 'Y') {
+        global $starttime;
+        $vars = array('[YEAR]', '[PROCESS_TIME]');
+        $processtime=array_sum(explode(" ",microtime()))-$starttime;
+        $values = array(gmdate($date_format),$processtime);
+        echo str_replace($vars, $values, WEBSITE_FOOTER);
+    }
+}
+/* ------------------------------------------------------------------------------------------------ */
+//  begin register_frontend_files
+/* ------------------------------------------------------------------------------------------------ */
+
+    function register_frontend_LoadOnFly ($bInsert=true)
+    {
+        static $bSriptLoaded=false;
+        $sLoadOnFly = '';
+        if ($bInsert&&!$bSriptLoaded){
+            $sLoadOnFly .= "\t".'<script src="'.WB_URL.'/include/jquery/domReady.js" type="text/javascript"></script>'."\n";
+            $sLoadOnFly .= "\t".'<script src="'.WB_URL.'/include/jquery/LoadOnFly.js" type="text/javascript"></script>'."\n";
+            $bSriptLoaded = true;
+        }
+        return $sLoadOnFly;
+    }
+    function register_frontend_ScriptVars ($bInsert=true)
+    {
+        static $bSriptLoaded=false;
+        $sScriptVars = '';
+        if ($bInsert&&!$bSriptLoaded){
+            $sScriptVars .= "\t"."<script type=\"text/javascript\">\n"
+                ."\t\t".'/* inserted by register_frontend_modfiles */'."\n"
+                ."\t\t"."var URL = '".WB_URL."';\n"
+                ."\t\t"."var WB_URL = '".WB_URL."';\n"
+                ."\t\t"."var THEME_URL = '".THEME_URL."';\n"
+                ."\t\t"."var TEMPLATE_DIR = '".TEMPLATE_DIR."';\n"
+                ."\t\t"."var TEMPLATE = '".TEMPLATE."';\n"
+                ."\t\t"."var EDITOR = '".WYSIWYG_EDITOR."';\n"
+                ."\t"."</script>\n";
+            $bSriptLoaded = true;
+            }
+        return $sScriptVars;
+    }
+
+function bind_jquery ($file_id='jquery')
+{
+    $jquery_links = '';
+    /* include the Javascript jquery api  */
+    if( $file_id == 'jquery' && file_exists(WB_PATH .'/include/jquery/jquery-min.js'))
+    {
+        $jquery_links .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-min.js" type="text/javascript"></script>'."\n";
+        $jquery_links .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-insert.js" type="text/javascript"></script>'."\n";
+        $jquery_links .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-include.js" type="text/javascript"></script>'."\n";
+        /* workout to insert ui.css and theme */
+        $jquery_theme =  WB_PATH.'/modules/jquery/jquery_theme.js';
+        $jquery_links .=  (file_exists($jquery_theme)
+            ? "\t".'<script src="'.WB_URL.'/modules/jquery/jquery_theme.js" type="text/javascript"></script>'."\n"
+            : "\t".'<script src="'.WB_URL.'/include/jquery/jquery_theme.js" type="text/javascript"></script>'."\n");
+        /* workout to insert plugins functions, set in templatedir */
+        $jquery_frontend_file = TEMPLATE_DIR.'/jquery_frontend.js';
+        $jquery_links .= (file_exists(str_replace( WB_URL, WB_PATH, $jquery_frontend_file))
+            ? "\t".'<script src="'.$jquery_frontend_file.'" type="text/javascript"></script>'
+            : '');
+    }
+    return $jquery_links;
+}
+
+// Function to add optional module Javascript or CSS stylesheets into the <head> section of the frontend
+if(!function_exists('register_frontend_modfiles'))
+{
+    function register_frontend_modfiles($file_id="css", $bOutput=true)
+    {
+        global $wb, $database, $include_head_link_css, $include_head_links, $page_id;
+        $page_id = (@$page_id?:$wb->page_id);
+        $aFilterSettings = getOutputFilterSettings();
+        // sanity check of parameter passed to the function
+        $file_id = strtolower($file_id);
+        $aAllowedAction = array( 'css', 'script', 'js', 'jquery', 'javascript' );
+        if (!in_array($file_id, $aAllowedAction)) { return false; }
+        // define default baselink and filename for optional module javascript and stylesheet files
+        $head_links = "";
+        $base_file  = '';
+        $base_link  = '';
+        switch ($file_id)
+        {
+            case 'css':
+                $base_link = "\t".'<link rel="stylesheet" type="text/css" href="'.WB_URL.'/modules/{MODULE_DIRECTORY}/frontend.css" media="screen" />'."\n";
+                $base_file = "frontend.css";
+                if(!empty($include_head_link_css))
+                {
+                  $head_links .=  !strpos($head_links, $include_head_link_css) ? $include_head_link_css : '';
+                  $include_head_link_css = '';
+                }
+                break;
+            case 'jquery':
+/*----------------------------------------------------------------------------------------------*/
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', 'filterScriptVars.php');
+                $bLoadScriptVars = (isset($aFilterSettings[$key])&&$aFilterSettings[$key] ?false:true);
+                $base_link .= register_frontend_ScriptVars($bLoadScriptVars);
+/*----------------------------------------------------------------------------------------------*/
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', 'filterLoadOnFly.php');
+                $bLoadOnFly = (isset($aFilterSettings[$key])&&$aFilterSettings[$key] ?false:true);
+                $base_link .= register_frontend_LoadOnFly($bLoadOnFly);
+/*----------------------------------------------------------------------------------------------*/
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', 'filterJquery.php');
+                $bLoadJquery = (isset($aFilterSettings[$key])&&$aFilterSettings[$key] ?false:true);
+                if ($bLoadJquery) {
+                    $base_link .= bind_jquery($file_id);
+                }
+                break;
+            case 'js':
+                $base_file = "frontend.js";
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', 'filterFrontendJs.php');
+                $bLoadFrontendJs = (isset($aFilterSettings[$key])&&$aFilterSettings[$key] ?false:true);
+                if ($bLoadFrontendJs) {
+                    $base_link .= "\t".'<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/frontend.js" type="text/javascript"></script>';
+                    if (!empty($include_head_links))
+                    {
+                      $head_links .= !strpos($head_links, $include_head_links) ? $include_head_links."\n" : '';
+                      $include_head_links = '';
+                    }
+                }
+                break;
+            case 'script_old':
+                break;
+            default:
+                break;
+        }
+        if( $file_id != 'jquery_old')
+        {
+            // gather information for all models embedded on actual page
+            $sql  = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` '
+                  . 'WHERE `page_id` = '.(int)$page_id;
+            if( ($oModules = $database->query($sql)) )
+            {
+                while($row = $oModules->fetchRow( MYSQLI_ASSOC ))
+                {
+                    // check if page module directory contains a frontend.js or frontend.css file
+                    if(file_exists(WB_PATH ."/modules/" .$row['module'] ."/$base_file"))
+                    {
+                    // create link with frontend.js or frontend.css source for the current module
+                        $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
+                        // define constant indicating that the register_frontent_files was invoked
+                        if($file_id == 'css')
+                        {
+                            if(!defined('MOD_FRONTEND_CSS_REGISTERED')) define('MOD_FRONTEND_CSS_REGISTERED', true);
+                        } else {
+                            if(!defined('MOD_FRONTEND_JAVASCRIPT_REGISTERED')) define('MOD_FRONTEND_JAVASCRIPT_REGISTERED', true);
+                        }
+                        // ensure that frontend.js or frontend.css is only added once per module type
+                        if( $tmp_link && strpos($head_links, $tmp_link) === false)
+                        {
+                            $head_links .= $tmp_link;
+                        }
+                    };
+                }
+            }
+        }
+        if ($bOutput) { print $head_links."\n";} else {return $head_links."\n";}
+    }
+}
+
+// Function to add optional module Javascript into the <body> section of the frontend
+if(!function_exists('register_frontend_modfiles_body'))
+{
+    function register_frontend_modfiles_body($file_id="js", $print=true)
+    {
+        // sanity check of parameter passed to the function
+        $file_id = strtolower($file_id);
+        $aAllowedAction = array( 'css', 'js', 'jquery', 'javascript' );
+        if(!in_array($file_id, $aAllowedAction)) { return false; }
+
+       // define constant indicating that the register_frontent_files was invoked
+       if(!defined('MOD_FRONTEND_BODY_JAVASCRIPT_REGISTERED')) define('MOD_FRONTEND_BODY_JAVASCRIPT_REGISTERED', true);
+        global $wb, $database, $include_body_links;
+        // define default baselink and filename for optional module javascript files
+        $body_links = "";
+
+        /* include the Javascript jquery api  */
+        $body_links .= bind_jquery($file_id);
+
+        if($file_id !== "css" && $file_id == "js" && $file_id !== "jquery")
+        {
+            $base_link = "\t".'<script src="'.WB_URL.'/modules/{MODULE_DIRECTORY}/frontend_body.js" type="text/javascript"></script>';
+            $base_file = "frontend_body.js";
+            // ensure that frontend_body.js is only added once per module type
+            if(!empty($include_body_links))
+            {
+                if(strpos($body_links, $include_body_links) === false)
+                {
+                    $body_links .= $include_body_links;
+                }
+                $include_body_links = '';
+            }
+            // gather information for all models embedded on actual page
+            $page_id = $wb->page_id;
+            $sql = 'SELECT `module` FROM `'.TABLE_PREFIX.'sections` ';
+            $sql .= 'WHERE `page_id` = '.(int)$page_id.' AND `module`<>\'wysiwyg\'';
+            if( ($query_modules = $database->query($sql)) )
+            {
+                while($row = $query_modules->fetchRow(MYSQLI_ASSOC))
+                {
+                    // check if page module directory contains a frontend_body.js file
+                    if(file_exists(WB_PATH ."/modules/" .$row['module'] ."/$base_file"))
+                    {
+                    // create link with frontend_body.js source for the current module
+                        $tmp_link = str_replace("{MODULE_DIRECTORY}", $row['module'], $base_link);
+                        // define constant indicating that the register_frontent_files_body was invoked
+                            if(!defined('MOD_FRONTEND_BODY_JAVASCRIPT_REGISTERED')) { define('MOD_FRONTEND_BODY_JAVASCRIPT_REGISTERED', true);}
+                        // ensure that frontend_body.js is only added once per module type
+                        if(strpos($body_links, $tmp_link) === false)
+                        {
+                            $body_links .= $tmp_link;
+                        }
+                    }
+                }
+            }
+        }
+        if ($print) { print $body_links."\n";} else {return $body_links."\n";}
+//        print $body_links."\n"; ;
+    }
+}
+
+    function moveCssToHead($content) {
+       return OutputFilterApi('CssToHead', $sContent);
+    }

Property changes on: trunk/framework/frontend.functions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/functions-utf8.php
===================================================================
--- trunk/framework/functions-utf8.php	(nonexistent)
+++ trunk/framework/functions-utf8.php	(revision 2)
@@ -0,0 +1,442 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/*
+ * A part of this file is based on 'utf8.php' from the DokuWiki-project.
+ * (http://www.splitbrain.org/projects/dokuwiki):
+ **
+ * UTF8 helper functions
+ * @license    LGPL (http://www.gnu.org/copyleft/lesser.html)
+ * @author     Andreas Gohr <andi@splitbrain.org>
+ **
+ * modified for use with Website Baker
+ * from thorn, Jan. 2008
+ *
+ * most of the original functions appeared to be to slow with large strings, so i replaced them with my own ones
+ * thorn, Mar. 2008
+ */
+
+// Functions we use in Website Baker:
+//   entities_to_7bit()
+//   entities_to_umlauts2()
+//   umlauts_to_entities2()
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+if (function_exists('functions-utf8')){return;}
+/*
+ * check for mb_string support
+ */
+//define('UTF8_NOMBSTRING',1); // uncomment this to forbid use of mb_string-functions
+if(!defined('UTF8_MBSTRING')){
+  if(function_exists('mb_substr') && !defined('UTF8_NOMBSTRING')){
+    define('UTF8_MBSTRING',1);
+  }else{
+    define('UTF8_MBSTRING',0);
+  }
+}
+
+if(UTF8_MBSTRING){ mb_internal_encoding('UTF-8'); }
+
+require_once(WB_PATH.'/framework/charsets_table.php');
+
+/*
+ * Checks if a string contains 7bit ASCII only
+ *
+ * @author thorn
+ */
+function utf8_isASCII($str){
+    if(preg_match('/[\x80-\xFF]/', $str))
+        return false;
+    else
+        return true;
+}
+
+/*
+ * Tries to detect if a string is in Unicode encoding
+ *
+ * @author <bmorel@ssi.fr>
+ * @link   http://www.php.net/manual/en/function.utf8-encode.php
+ */
+function utf8_check($Str) {
+ for ($i=0; $i<strlen($Str); $i++) {
+  $b = ord($Str[$i]);
+  if ($b < 0x80) continue; # 0bbbbbbb
+  elseif (($b & 0xE0) == 0xC0) $n=1; # 110bbbbb
+  elseif (($b & 0xF0) == 0xE0) $n=2; # 1110bbbb
+  elseif (($b & 0xF8) == 0xF0) $n=3; # 11110bbb
+  elseif (($b & 0xFC) == 0xF8) $n=4; # 111110bb
+  elseif (($b & 0xFE) == 0xFC) $n=5; # 1111110b
+  else return false; # Does not match any model
+  for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+   if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
+   return false;
+  }
+ }
+ return true;
+}
+
+/*
+ * Romanize a non-latin string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function utf8_romanize($string){
+  if(utf8_isASCII($string)) return $string; //nothing to do
+
+  global $UTF8_ROMANIZATION;
+  return strtr($string,$UTF8_ROMANIZATION);
+}
+
+/*
+ * Removes special characters (nonalphanumeric) from a UTF-8 string
+ *
+ * This function adds the controlchars 0x00 to 0x19 to the array of
+ * stripped chars (they are not included in $UTF8_SPECIAL_CHARS2)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param  string $string     The UTF8 string to strip of special chars
+ * @param  string $repl       Replace special with this string
+ * @param  string $additional Additional chars to strip (used in regexp char class)
+ */
+function utf8_stripspecials($string,$repl='',$additional=''){
+  global $UTF8_SPECIAL_CHARS2;
+
+  static $specials = null;
+  if(is_null($specials)){
+    $specials = preg_quote($UTF8_SPECIAL_CHARS2, '/');
+  }
+
+  return preg_replace('/['.$additional.'\x00-\x19'.$specials.']/u',$repl,$string);
+}
+
+/*
+ * added functions - thorn
+ */
+
+/*
+ * faster replacement for utf8_entities_to_umlauts()
+ * not all features of utf8_entities_to_umlauts() --> utf8_unhtml() are supported!
+ * @author thorn
+ */
+function utf8_fast_entities_to_umlauts($str) {
+    if(UTF8_MBSTRING) {
+        // we need this for use with mb_convert_encoding
+        $str = str_replace(array('&amp;','&gt;','&lt;','&quot;','&#039;','&nbsp;'), array('&amp;amp;','&amp;gt;','&amp;lt;','&amp;quot;','&amp;#39;','&amp;nbsp;'), $str);
+        // we need two mb_convert_encoding()-calls - is this a bug?
+        // mb_convert_encoding("ö&ouml;", 'UTF-8', 'HTML-ENTITIES'); // with string in utf-8-encoding doesn't work. Result: "Ã¶ö"
+        // Work-around: convert all umlauts to entities first ("ö&ouml;"->"&ouml;&ouml;"), then all entities to umlauts ("&ouml;&ouml;"->"öö")
+        return(mb_convert_encoding(mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8'),'UTF-8', 'HTML-ENTITIES'));
+    } else {
+        global $named_entities;global $numbered_entities;
+        $str = str_replace($named_entities, $numbered_entities, $str);
+        $str = preg_replace("/&#([0-9]+);/e", "code_to_utf8($1)", $str);
+    }
+    return($str);
+}
+// support-function for utf8_fast_entities_to_umlauts()
+function code_to_utf8($num) {
+    if ($num <= 0x7F) {
+        return chr($num);
+    } elseif ($num <= 0x7FF) {
+        return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
+    } elseif ($num <= 0xFFFF) {
+         return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
+    } elseif ($num <= 0x1FFFFF) {
+        return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
+    }
+    return "?";
+}
+
+/*
+ * faster replacement for utf8_umlauts_to_entities()
+ * not all features of utf8_umlauts_to_entities() --> utf8_tohtml() are supported!
+ * @author thorn
+ */
+function utf8_fast_umlauts_to_entities($string, $named_entities=true) {
+    if(UTF8_MBSTRING)
+        return(mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'));
+    else {
+        global $named_entities;global $numbered_entities;
+        $new = "";
+        $i=0;
+        $len=strlen($string);
+        if($len==0) return $string;
+        do {
+            if(ord($string{$i}) <= 127) $ud = $string{$i++};
+            elseif(ord($string{$i}) <= 223) $ud = (ord($string{$i++})-192)*64 + (ord($string{$i++})-128);
+            elseif(ord($string{$i}) <= 239) $ud = (ord($string{$i++})-224)*4096 + (ord($string{$i++})-128)*64 + (ord($string{$i++})-128);
+            elseif(ord($string{$i}) <= 247) $ud = (ord($string{$i++})-240)*262144 + (ord($string{$i++})-128)*4096 + (ord($string{$i++})-128)*64 + (ord($string{$i++})-128);
+            else $ud = ord($string{$i++}); // error!
+            if($ud > 127) {
+                $new .= "&#$ud;";
+            } else {
+                $new .= $ud;
+            }
+        } while($i < $len);
+        $string = $new;
+        if($named_entities)
+            $string = str_replace($numbered_entities, $named_entities, $string);
+    }
+    return($string);
+}
+
+/*
+ * Converts from various charsets to UTF-8
+ *
+ * Will convert a string from various charsets to UTF-8.
+ * HTML-entities may be converted, too.
+ * In case of error the returned string is unchanged, and a message is emitted.
+ * Supported charsets are:
+ * direct: iso_8859_1 iso_8859_2 iso_8859_3 iso_8859_4 iso_8859_5
+ *         iso_8859_6 iso_8859_7 iso_8859_8 iso_8859_9 iso_8859_10 iso_8859_11
+ * mb_convert_encoding: all wb charsets (except those from 'direct'); but not GB2312
+ * iconv:  all wb charsets (except those from 'direct')
+ *
+ * @param  string  A string in supported encoding
+ * @param  string  The charset to convert from, defaults to DEFAULT_CHARSET
+ * @return string  A string in UTF-8-encoding, with all entities decoded, too.
+ *                 String is unchanged in case of error.
+ * @author thorn
+ */
+function charset_to_utf8($str, $charset_in=DEFAULT_CHARSET, $decode_entities=true) {
+    global $iso_8859_2_to_utf8, $iso_8859_3_to_utf8, $iso_8859_4_to_utf8, $iso_8859_5_to_utf8, $iso_8859_6_to_utf8, $iso_8859_7_to_utf8, $iso_8859_8_to_utf8, $iso_8859_9_to_utf8, $iso_8859_10_to_utf8, $iso_8859_11_to_utf8;
+    $charset_in = strtoupper($charset_in);
+    if ($charset_in == "") { $charset_in = 'UTF-8'; }
+    $wrong_ISO8859 = false;
+    $converted = false;
+
+    if((!function_exists('iconv') && !UTF8_MBSTRING && ($charset_in=='BIG5' || $charset_in=='ISO-2022-JP' || $charset_in=='ISO-2022-KR')) || (!function_exists('iconv') && $charset_in=='GB2312')) {
+        // Nothing we can do here :-(
+        // Charset is one of those obscure ISO-2022... or BIG5, GB2312 or something
+        // and we can't use mb_convert_encoding() or iconv();
+        // Emit an error-message.
+        trigger_error("Can't convert from $charset_in without mb_convert_encoding() or iconv(). Use UTF-8 instead.", E_USER_WARNING);
+        return($str);
+    }
+
+    // check if we have UTF-8 or a plain ASCII string
+    if($charset_in == 'UTF-8' || utf8_isASCII($str)) {
+        // we have utf-8. Just replace HTML-entities and return
+        if($decode_entities && preg_match('/&[#0-9a-zA-Z]+;/',$str))
+            return(utf8_fast_entities_to_umlauts($str));
+        else // nothing to do
+            return($str);
+    }
+    
+    // Convert $str to utf8
+    if(substr($charset_in,0,8) == 'ISO-8859') {
+        switch($charset_in) {
+            case 'ISO-8859-1': $str=utf8_encode($str); break;
+            case 'ISO-8859-2': $str=strtr($str, $iso_8859_2_to_utf8); break;
+            case 'ISO-8859-3': $str=strtr($str, $iso_8859_3_to_utf8); break;
+            case 'ISO-8859-4': $str=strtr($str, $iso_8859_4_to_utf8); break;
+            case 'ISO-8859-5': $str=strtr($str, $iso_8859_5_to_utf8); break;
+            case 'ISO-8859-6': $str=strtr($str, $iso_8859_6_to_utf8); break;
+            case 'ISO-8859-7': $str=strtr($str, $iso_8859_7_to_utf8); break;
+            case 'ISO-8859-8': $str=strtr($str, $iso_8859_8_to_utf8); break;
+            case 'ISO-8859-9': $str=strtr($str, $iso_8859_9_to_utf8); break;
+            case 'ISO-8859-10': $str=strtr($str, $iso_8859_10_to_utf8); break;
+            case 'ISO-8859-11': $str=strtr($str, $iso_8859_11_to_utf8); break;
+            default: $wrong_ISO8859 = true;
+        }
+        if(!$wrong_ISO8859)
+            $converted = true;
+    }
+    if(!$converted && UTF8_MBSTRING && $charset_in != 'GB2312') {
+        // $charset is neither UTF-8 nor a known ISO-8859...
+        // Try mb_convert_encoding() - but there's no GB2312 encoding in php's mb_* functions
+        $str = mb_convert_encoding($str, 'UTF-8', $charset_in);
+        $converted = true;
+    } elseif(!$converted) { // Try iconv
+        if(function_exists('iconv')) {
+            $str = iconv($charset_in, 'UTF-8', $str);
+            $converted = true;
+        }
+    }
+    if($converted) {
+        // we have utf-8, now replace HTML-entities and return
+        if($decode_entities && preg_match('/&[#0-9a-zA-Z]+;/',$str))
+            $str = utf8_fast_entities_to_umlauts($str);
+        return($str);
+    }
+    
+    // Nothing we can do here :-(
+    // Charset is one of those obscure ISO-2022... or BIG5, GB2312 or something
+    // and we can't use mb_convert_encoding() or iconv();
+    // Emit an error-message.
+    trigger_error("Can't convert from $charset_in without mb_convert_encoding() or iconv(). Use UTF-8 instead.", E_USER_WARNING);
+    
+    return $str;
+}
+
+/*
+ * Converts from UTF-8 to various charsets
+ *
+ * Will convert a string from UTF-8 to various charsets.
+ * HTML-entities will not! be converted.
+ * In case of error the returned string is unchanged, and a message is emitted.
+ * Supported charsets are:
+ * direct: iso_8859_1 iso_8859_2 iso_8859_3 iso_8859_4 iso_8859_5
+ *         iso_8859_6 iso_8859_7 iso_8859_8 iso_8859_9 iso_8859_10 iso_8859_11
+ * mb_convert_encoding: all wb charsets (except those from 'direct'); but not GB2312
+ * iconv:  all wb charsets (except those from 'direct')
+ *
+ * @param  string  An UTF-8 encoded string
+ * @param  string  The charset to convert to, defaults to DEFAULT_CHARSET
+ * @return string  A string in a supported encoding, with all entities decoded, too.
+ *                 String is unchanged in case of error.
+ * @author thorn
+ */
+function utf8_to_charset($str, $charset_out=DEFAULT_CHARSET) {
+    global $utf8_to_iso_8859_2, $utf8_to_iso_8859_3, $utf8_to_iso_8859_4, $utf8_to_iso_8859_5, $utf8_to_iso_8859_6, $utf8_to_iso_8859_7, $utf8_to_iso_8859_8, $utf8_to_iso_8859_9, $utf8_to_iso_8859_10, $utf8_to_iso_8859_11;
+    $charset_out = strtoupper($charset_out);
+    $wrong_ISO8859 = false;
+    $converted = false;
+
+    if((!function_exists('iconv') && !UTF8_MBSTRING && ($charset_out=='BIG5' || $charset_out=='ISO-2022-JP' || $charset_out=='ISO-2022-KR')) || (!function_exists('iconv') && $charset_out=='GB2312')) {
+        // Nothing we can do here :-(
+        // Charset is one of those obscure ISO-2022... or BIG5, GB2312 or something
+        // and we can't use mb_convert_encoding() or iconv();
+        // Emit an error-message.
+        trigger_error("Can't convert into $charset_out without mb_convert_encoding() or iconv(). Use UTF-8 instead.", E_USER_WARNING);
+        return($str);
+    }
+    
+    // the string comes from charset_to_utf8(), so we can skip this
+    // replace HTML-entities first
+    //if(preg_match('/&[#0-9a-zA-Z]+;/',$str))
+    //    $str = utf8_entities_to_umlauts($str);
+    
+    // check if we need to convert
+    if($charset_out == 'UTF-8' || utf8_isASCII($str)) {
+        // Nothing to do. Just return
+            return($str);
+    }
+    
+    // Convert $str to $charset_out
+    if(substr($charset_out,0,8) == 'ISO-8859') {
+        switch($charset_out) {
+            case 'ISO-8859-1': $str=utf8_decode($str); break;
+            case 'ISO-8859-2': $str=strtr($str, $utf8_to_iso_8859_2); break;
+            case 'ISO-8859-3': $str=strtr($str, $utf8_to_iso_8859_3); break;
+            case 'ISO-8859-4': $str=strtr($str, $utf8_to_iso_8859_4); break;
+            case 'ISO-8859-5': $str=strtr($str, $utf8_to_iso_8859_5); break;
+            case 'ISO-8859-6': $str=strtr($str, $utf8_to_iso_8859_6); break;
+            case 'ISO-8859-7': $str=strtr($str, $utf8_to_iso_8859_7); break;
+            case 'ISO-8859-8': $str=strtr($str, $utf8_to_iso_8859_8); break;
+            case 'ISO-8859-9': $str=strtr($str, $utf8_to_iso_8859_9); break;
+            case 'ISO-8859-10': $str=strtr($str, $utf8_to_iso_8859_10); break;
+            case 'ISO-8859-11': $str=strtr($str, $utf8_to_iso_8859_11); break;
+            default: $wrong_ISO8859 = true;
+        }
+        if(!$wrong_ISO8859)
+            $converted = true;
+    }
+    if(!$converted && UTF8_MBSTRING && $charset_out != 'GB2312') {
+        // $charset is neither UTF-8 nor a known ISO-8859...
+        // Try mb_convert_encoding() - but there's no GB2312 encoding in php's mb_* functions
+        $str = mb_convert_encoding($str, $charset_out, 'UTF-8');
+        $converted = true;
+    } elseif(!$converted) { // Try iconv
+        if(function_exists('iconv')) {
+            $str = iconv('UTF-8', $charset_out, $str);
+            $converted = true;
+        }
+    }
+    if($converted) {
+        return($str);
+    }
+    
+    // Nothing we can do here :-(
+    // Charset is one of those obscure ISO-2022... or BIG5, GB2312 or something
+    // and we can't use mb_convert_encoding() or iconv();
+    // Emit an error-message.
+    trigger_error("Can't convert into $charset_out without mb_convert_encoding() or iconv(). Use UTF-8 instead.", E_USER_WARNING);
+    
+    return $str;
+}
+
+/*
+ * convert Filenames to ASCII
+ *
+ * Convert all non-ASCII characters and all HTML-entities to their plain 7bit equivalents
+ * Characters without an equivalent will be converted to hex-values.
+ * The name entities_to_7bit() is somewhat misleading, but kept for compatibility-reasons.
+ *
+ * @param  string  Filename to convert (all encodings from charset_to_utf8() are allowed)
+ * @return string  ASCII encoded string, to use as filename in wb's page_filename() and media_filename
+ * @author thorn
+ */
+function entities_to_7bit($str) {
+    // convert to UTF-8
+    $str = charset_to_utf8($str);
+    if(!utf8_check($str))
+        return($str);
+    // replace some specials
+    $str = utf8_stripspecials($str, '_');
+    // translate non-ASCII characters to ASCII
+    $str = utf8_romanize($str);
+    // missed some? - Many UTF-8-chars can't be romanized
+    // convert to HTML-entities, and replace entites by hex-numbers
+    $str = utf8_fast_umlauts_to_entities($str, false);
+    $str = str_replace('&#039;', '&apos;', $str);
+    $str = preg_replace_callback('/&#([0-9]+);/', function($matches) {return dechex($matches[1]);}, $str);
+    // maybe there are some &gt; &lt; &apos; &quot; &amp; &nbsp; left, replace them too
+    $str = str_replace(array('&gt;', '&lt;', '&apos;', '\'', '&quot;', '&amp;'), '', $str);
+    return($str);
+}
+
+/*
+ * Convert a string from mixed html-entities/umlauts to pure $charset_out-umlauts
+ * 
+ * Will replace all numeric and named entities except
+ * &gt; &lt; &apos; &quot; &#039; &nbsp;
+ * @author thorn
+ */
+function entities_to_umlauts2($string, $charset_out=DEFAULT_CHARSET) {
+    $string = charset_to_utf8($string, DEFAULT_CHARSET, true);
+    //if(utf8_check($string)) // this check is to much time-consuming (this may fail only if AddDefaultCharset is set)
+        $string = utf8_to_charset($string, $charset_out);
+    return ($string);
+}
+
+/*
+ * Convert a string from mixed html-entities/umlauts to pure ASCII with HTML-entities
+ * 
+ * Will convert a string in $charset_in encoding to a pure ASCII string with HTML-entities.
+ * @author thorn
+ */
+function umlauts_to_entities2($string, $charset_in=DEFAULT_CHARSET) {
+    $string = charset_to_utf8($string, $charset_in, false);
+    //if(utf8_check($string)) // this check is to much time-consuming (this may fail only if AddDefaultCharset is set)
+        $string = utf8_fast_umlauts_to_entities($string, false);
+    return($string);
+}
+

Property changes on: trunk/framework/functions-utf8.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/functions.php
===================================================================
--- trunk/framework/functions.php	(nonexistent)
+++ trunk/framework/functions.php	(revision 2)
@@ -0,0 +1,1262 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         framework
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Define that this file has been loaded
+define('FUNCTIONS_FILE_LOADED', true);
+
+/**
+ * @description: recursively delete a non empty directory
+ * @param string $directory :
+ * @param bool $empty : true if you want the folder just emptied, but not deleted
+ *                      false, or just simply leave it out, the given directory will be deleted, as well
+ * @return boolean: list of ro-dirs
+ * @from http://www.php.net/manual/de/function.rmdir.php#98499
+ */
+function rm_full_dir($directory, $empty = false) {
+
+    if(substr($directory,-1) == "/") {
+        $directory = substr($directory,0,-1);
+    }
+   // If suplied dirname is a file then unlink it
+    if (is_file( $directory )) {
+      $retval = unlink($directory);
+      clearstatcache();
+      return $retval;
+    }
+    if(!file_exists($directory) || !is_dir($directory)) {
+        return false;
+    } elseif(!is_readable($directory)) {
+        return false;
+    } else {
+        $directoryHandle = opendir($directory);
+        while ($contents = readdir($directoryHandle))
+        {
+            if($contents != '.' && $contents != '..')
+            {
+                $path = $directory . "/" . $contents;
+                if(is_dir($path)) {
+                    rm_full_dir($path);
+                } else {
+                    unlink($path);
+                    clearstatcache();
+                }
+            }
+        }
+        closedir($directoryHandle);
+        if($empty == false) {
+            if(!rmdir($directory)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
+
+/*
+ * returns a recursive list of all subdirectories from a given directory
+ * @access  public
+ * @param   string  $directory: from this dir the recursion will start
+ * @param   bool    $show_hidden:  if set to TRUE also hidden dirs (.dir) will be shown
+ * @return  array
+ * example:
+ *  /srv/www/httpdocs/wb/media/a/b/c/
+ *  /srv/www/httpdocs/wb/media/a/b/d/
+ * directory_list('/srv/www/httpdocs/wb/media/') will return:
+ *  /a
+ *  /a/b
+ *  /a/b/c
+ *  /a/b/d
+ */
+ function directory_list($directory, $show_hidden = false)
+{
+    $result_list = array();
+    if (is_dir($directory))
+    {
+        $dir = dir($directory); // Open the directory
+        while (false !== $entry = $dir->read()) // loop through the directory
+        {
+            if($entry == '.' || $entry == '..') { continue; } // Skip pointers
+            if($entry[0] == '.' && $show_hidden == false) { continue; } // Skip hidden files
+            if (is_dir("$directory/$entry")) { // Add dir and contents to list
+                $result_list = array_merge($result_list, directory_list("$directory/$entry"));
+                $result_list[] = "$directory/$entry";
+            }
+        }
+        $dir->close();
+    }
+    // sorting
+    if(natcasesort($result_list)) {
+        // new indexing
+        $result_list = array_merge($result_list);
+    }
+    return $result_list; // Now return the list
+}
+
+// Function to open a directory and add to a dir list
+function chmod_directory_contents($directory, $file_mode)
+{
+    if (is_dir($directory))
+    {
+        // Set the umask to 0
+        $umask = umask(0);
+        // Open the directory then loop through its contents
+        $dir = dir($directory);
+        while (false !== $entry = $dir->read())
+        {
+            // Skip pointers
+            if($entry[0] == '.') { continue; }
+            // Chmod the sub-dirs contents
+            if(is_dir("$directory/$entry")) {
+                chmod_directory_contents($directory.'/'.$entry, $file_mode);
+            }
+            change_mode($directory.'/'.$entry);
+        }
+        $dir->close();
+        // Restore the umask
+        umask($umask);
+    }
+}
+
+/**
+* Scan a given directory for dirs and files.
+*
+* usage: scan_current_dir ($root = '' )
+*
+* @param     $root   set a absolute rootpath as string. if root is empty the current path will be scan
+* @param     $search set a search pattern for files, empty search brings all files
+* @access    public
+* @return    array    returns a natsort array with keys 'path' and 'filename'
+*
+*/
+if(!function_exists('scan_current_dir'))
+{
+    function scan_current_dir($root = '', $search = '/.*/')
+    {
+        $FILE = array();
+        $array = array();
+        clearstatcache();
+        $root = empty ($root) ? getcwd() : $root;
+        if (($handle = opendir($root)))
+        {
+        // Loop through the files and dirs an add to list  DIRECTORY_SEPARATOR
+            while (false !== ($file = readdir($handle)))
+            {
+                if (substr($file, 0, 1) != '.' && $file != 'index.php')
+                {
+                    if (is_dir($root.'/'.$file)) {
+                        $FILE['path'][] = $file;
+                    } elseif (preg_match($search, $file, $array) ) {
+                        $FILE['filename'][] = $array[0];
+                    }
+                }
+            }
+            $close_verz = closedir($handle);
+        }
+        // sorting
+        if (isset ($FILE['path']) && natcasesort($FILE['path'])) {
+            // new indexing
+            $FILE['path'] = array_merge($FILE['path']);
+        }
+        // sorting
+        if (isset ($FILE['filename']) && natcasesort($FILE['filename'])) {
+            // new indexing
+            $FILE['filename'] = array_merge($FILE['filename']);
+        }
+        return $FILE;
+    }
+}
+
+// Function to open a directory and add to a file list
+function file_list($directory, $skip = array(), $show_hidden = false)
+{
+    $result_list = array();
+    if (is_dir($directory))
+    {
+        $dir = dir($directory); // Open the directory
+        while (false !== ($entry = $dir->read())) // loop through the directory
+        {
+            if($entry == '.' || $entry == '..') { continue; } // Skip pointers
+            if($entry[0] == '.' && $show_hidden == false) { continue; } // Skip hidden files
+            if( sizeof($skip) > 0 && in_array($entry, $skip) ) { continue; } // Check if we to skip anything else
+            if(is_file( $directory.'/'.$entry)) { // Add files to list
+                $result_list[] = $directory.'/'.$entry;
+            }
+        }
+        $dir->close(); // Now close the folder object
+    }
+
+    // make the list nice. Not all OS do this itself
+    if(natcasesort($result_list)) {
+        $result_list = array_merge($result_list);
+    }
+    return $result_list;
+}
+
+// Function to get a list of home folders not to show
+function get_home_folders()
+{
+    global $database, $admin;
+    $home_folders = array();
+    // Only return home folders is this feature is enabled
+    // and user is not admin
+//    if(HOME_FOLDERS AND ($_SESSION['GROUP_ID']!='1')) {
+    if(HOME_FOLDERS AND (!in_array('1',explode(',', $_SESSION['GROUPS_ID']))))
+    {
+        $sql  = 'SELECT `home_folder` FROM `'.TABLE_PREFIX.'users` ';
+        $sql .= 'WHERE `home_folder`!=\''.$admin->get_home_folder().'\'';
+        $query_home_folders = $database->query($sql);
+        if($query_home_folders->numRows() > 0)
+        {
+            while($folder = $query_home_folders->fetchRow()) {
+                $home_folders[$folder['home_folder']] = $folder['home_folder'];
+            }
+        }
+        function remove_home_subs($directory = '/', $home_folders = '')
+        {
+            if( ($handle = opendir(WB_PATH.MEDIA_DIRECTORY.$directory)) )
+            {
+                // Loop through the dirs to check the home folders sub-dirs are not shown
+                while(false !== ($file = readdir($handle)))
+                {
+                    if($file[0] != '.' && $file != 'index.php')
+                    {
+                        if(is_dir(WB_PATH.MEDIA_DIRECTORY.$directory.'/'.$file))
+                        {
+                            if($directory != '/') {
+                                $file = $directory.'/'.$file;
+                            }else {
+                                $file = '/'.$file;
+                            }
+                            foreach($home_folders AS $hf)
+                            {
+                                $hf_length = strlen($hf);
+                                if($hf_length > 0) {
+                                    if(substr($file, 0, $hf_length+1) == $hf) {
+                                        $home_folders[$file] = $file;
+                                    }
+                                }
+                            }
+                            $home_folders = remove_home_subs($file, $home_folders);
+                        }
+                    }
+                }
+            }
+            return $home_folders;
+        }
+        $home_folders = remove_home_subs('/', $home_folders);
+    }
+    return $home_folders;
+}
+
+/*
+ * @param object &$wb: $wb from frontend or $admin from backend
+ * @return array: list of new entries
+ * @description: callback remove path in files/dirs stored in array
+ * @example: array_walk($array,'remove_path',PATH);
+ */
+//
+function remove_path(&$path, $key, $vars = '')
+{
+    $path = str_replace($vars, '', $path);
+}
+
+/*
+ * @param object &$wb: $wb from frontend or $admin from backend
+ * @return array: list of ro-dirs
+ * @description: returns a list of directories beyound /wb/media which are ReadOnly for current user
+ */
+function media_dirs_ro( &$wb )
+{
+    global $database;
+    // if user is admin or home-folders not activated then there are no restrictions
+    $allow_list = array();
+    if( $wb->get_user_id() == 1 || !HOME_FOLDERS ) {
+        return array();
+    }
+    // at first read any dir and subdir from /media
+    $full_list = directory_list( WB_PATH.MEDIA_DIRECTORY );
+    // add own home_folder to allow-list
+    if( $wb->get_home_folder() ) {
+        // old: $allow_list[] = get_home_folder();
+        $allow_list[] = $wb->get_home_folder();
+    }
+    // get groups of current user
+    $curr_groups = $wb->get_groups_id();
+    // if current user is in admin-group
+    if( ($admin_key = array_search('1', $curr_groups)) !== false)
+    {
+        // remove admin-group from list
+        unset($curr_groups[$admin_key]);
+        // search for all users where the current user is admin from
+        foreach( $curr_groups as $group)
+        {
+            $sql  = 'SELECT `home_folder` FROM `'.TABLE_PREFIX.'users` ';
+            $sql .= 'WHERE (FIND_IN_SET(\''.$group.'\', `groups_id`) > 0) AND `home_folder` <> \'\' AND `user_id` <> '.$wb->get_user_id();
+            if( ($res_hf = $database->query($sql)) != null ) {
+                while( $rec_hf = $res_hf->fetchrow() ) {
+                    $allow_list[] = $rec_hf['home_folder'];
+                }
+            }
+        }
+    }
+    $tmp_array = $full_list;
+    // create a list for readonly dir
+    $array = array();
+    while( sizeof($tmp_array) > 0)
+    {
+        $tmp = array_shift($tmp_array);
+        $x = 0;
+        while($x < sizeof($allow_list)) {
+            if(strpos ($tmp,$allow_list[$x])) {
+                $array[] = $tmp;
+            }
+            $x++;
+        }
+    }
+    $full_list = array_diff( $full_list, $array );
+    $tmp = array();
+    $full_list = array_merge($tmp,$full_list);
+    return $full_list;
+}
+
+/*
+ * @param object &$wb: $wb from frontend or $admin from backend
+ * @return array: list of rw-dirs
+ * @description: returns a list of directories beyound /wb/media which are ReadWrite for current user
+ */
+function media_dirs_rw ( &$wb )
+{
+    global $database;
+    // if user is admin or home-folders not activated then there are no restrictions
+    // at first read any dir and subdir from /media
+    $full_list = directory_list( WB_PATH.MEDIA_DIRECTORY );
+    $array = array();
+    $allow_list = array();
+    if( ($wb->ami_group_member('1')) && !HOME_FOLDERS ) {
+        return $full_list;
+    }
+    // add own home_folder to allow-list
+    if( $wb->get_home_folder() ) {
+          $allow_list[] = $wb->get_home_folder();
+    } else {
+        $array = $full_list;
+    }
+    // get groups of current user
+    $curr_groups = $wb->get_groups_id();
+    // if current user is in admin-group
+    if( ($admin_key = array_search('1', $curr_groups)) == true)
+    {
+        // remove admin-group from list
+        // unset($curr_groups[$admin_key]);
+        // search for all users where the current user is admin from
+        foreach( $curr_groups as $group)
+        {
+            $sql  = 'SELECT `home_folder` FROM `'.TABLE_PREFIX.'users` ';
+            $sql .= 'WHERE (FIND_IN_SET(\''.$group.'\', `groups_id`) > 0) AND `home_folder` <> \'\' AND `user_id` <> '.$wb->get_user_id();
+            if( ($res_hf = $database->query($sql)) != null ) {
+                while( $rec_hf = $res_hf->fetchrow() ) {
+                    $allow_list[] = $rec_hf['home_folder'];
+                }
+            }
+        }
+    }
+
+    $tmp_array = $full_list;
+    // create a list for readwrite dir
+    while( sizeof($tmp_array) > 0)
+    {
+        $tmp = array_shift($tmp_array);
+        $x = 0;
+        while($x < sizeof($allow_list)) {
+            if(strpos ($tmp,$allow_list[$x])) {
+                $array[] = $tmp;
+            }
+            $x++;
+        }
+    }
+    $tmp = array();
+    $array = array_unique($array);
+    $full_list = array_merge($tmp,$array);
+    unset($array);
+    unset($allow_list);
+    return $full_list;
+}
+
+// Function to create directories
+function make_dir($dir_name, $dir_mode = OCTAL_DIR_MODE, $recursive=true)
+{
+    $retVal = false;
+    if(!is_dir($dir_name))
+    {
+        $retVal = mkdir($dir_name, $dir_mode,$recursive);
+    }
+    return $retVal;
+}
+
+// Function to chmod files and directories
+function change_mode($name)
+{
+    if(OPERATING_SYSTEM != 'windows')
+    {
+        // Only chmod if os is not windows
+        if(is_dir($name)) {
+            $mode = OCTAL_DIR_MODE;
+        }else {
+            $mode = OCTAL_FILE_MODE;
+        }
+        if(file_exists($name)) {
+            $umask = umask(0);
+            chmod($name, $mode);
+            umask($umask);
+            return true;
+        }else {
+            return false;
+        }
+    }else {
+        return true;
+    }
+}
+
+// Function to figure out if a parent exists
+function is_parent($page_id)
+{
+    global $database;
+    // Get parent
+    $sql = 'SELECT `parent` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($page_id);
+    $parent = $database->get_one($sql);
+    // If parent isnt 0 return its ID
+    if(is_null($parent)) {
+        return false;
+    }else {
+        return $parent;
+    }
+}
+
+// Function to work out level
+function level_count($page_id)
+{
+    global $database;
+    // Get page parent
+    $sql = 'SELECT `parent` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($page_id);
+    $parent = $database->get_one($sql);
+    if($parent > 0)
+    {    // Get the level of the parent
+        $sql = 'SELECT `level` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($parent);
+        $level = intval($database->get_one($sql));
+        return $level+1;
+    }else {
+        return 0;
+    }
+}
+
+// Function to work out root parent
+function root_parent($page_id)
+{
+    global $database;
+    // Get page details
+    $sql = 'SELECT `parent`, `level` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($page_id);
+    $query_page = $database->query($sql);
+    $fetch_page = $query_page->fetchRow();
+    $parent = intval($fetch_page['parent']);
+    $level = intval($fetch_page['level']);
+    if($level == 1) {
+        return $parent;
+    }elseif($parent == 0) {
+        return $page_id;
+    }else {    // Figure out what the root parents id is
+        $parent_ids = array_reverse(get_parent_ids($page_id));
+        return $parent_ids[0];
+    }
+}
+
+// Function to get page title
+function get_page_title($id)
+{
+    global $database;
+    // Get title
+    $sql = 'SELECT `page_title` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($id);
+    $page_title = $database->get_one($sql);
+    return $page_title;
+}
+
+// Function to get a pages menu title
+function get_menu_title($id)
+{
+    global $database;
+    // Get title
+    $sql = 'SELECT `menu_title` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.intval($id);
+    $menu_title = $database->get_one($sql);
+    return $menu_title;
+}
+
+// Function to get all parent page titles
+function get_parent_titles($parent_id)
+{
+    $titles[] = get_menu_title($parent_id);
+    if(is_parent($parent_id) != false) {
+        $parent_titles = get_parent_titles(is_parent($parent_id));
+        $titles = array_merge($titles, $parent_titles);
+    }
+    return $titles;
+}
+
+// Function to get all parent page id's
+function get_parent_ids($parent_id)
+{
+    $ids[] = intval($parent_id);
+    if(is_parent($parent_id) != false) {
+        $parent_ids = get_parent_ids(is_parent($parent_id));
+        $ids = array_merge($ids, $parent_ids);
+    }
+    return $ids;
+}
+
+// Function to genereate page trail
+function get_page_trail($page_id)
+{
+    return implode(',', array_reverse(get_parent_ids($page_id)));
+}
+
+// Function to get all sub pages id's
+function get_subs($parent, array $subs )
+{
+    // Connect to the database
+    global $database;
+    // Get id's
+    $sql = 'SELECT `page_id` FROM `'.TABLE_PREFIX.'pages` WHERE `parent` = '.intval($parent);
+    if( ($query = $database->query($sql)) ) {
+        while($fetch = $query->fetchRow( MYSQLI_ASSOC )) {
+            $subs[] = intval($fetch['page_id']);
+            // Get subs of this sub recursive
+            $subs = get_subs($fetch['page_id'], $subs);
+        }
+    }
+    // Return subs array
+    return $subs;
+}
+
+// Function as replacement for php's htmlspecialchars()
+// Will not mangle HTML-entities
+function my_htmlspecialchars($string)
+{
+    $string = preg_replace('/&(?=[#a-z0-9]+;)/i', '__amp;_', $string);
+    $string = strtr($string, array('<'=>'&lt;', '>'=>'&gt;', '&'=>'&amp;', '"'=>'&quot;', '\''=>'&#39;'));
+    $string = preg_replace('/__amp;_(?=[#a-z0-9]+;)/i', '&', $string);
+    return($string);
+}
+
+// Convert a string from mixed html-entities/umlauts to pure $charset_out-umlauts
+// Will replace all numeric and named entities except &gt; &lt; &apos; &quot; &#039; &nbsp;
+// In case of error the returned string is unchanged, and a message is emitted.
+function entities_to_umlauts($string, $charset_out=DEFAULT_CHARSET)
+{
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+    return entities_to_umlauts2($string, $charset_out);
+}
+
+// Will convert a string in $charset_in encoding to a pure ASCII string with HTML-entities.
+// In case of error the returned string is unchanged, and a message is emitted.
+function umlauts_to_entities($string, $charset_in=DEFAULT_CHARSET)
+{
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+    return umlauts_to_entities2($string, $charset_in);
+}
+
+// Function to convert a page title to a page filename
+function page_filename($string)
+{
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+    $string = entities_to_7bit($string);
+    // Now remove all bad characters
+    $bad = array(
+    '\'', /* /  */ '"', /* " */    '<', /* < */    '>', /* > */
+    '{', /* { */    '}', /* } */    '[', /* [ */    ']', /* ] */    '`', /* ` */
+    '!', /* ! */    '@', /* @ */    '#', /* # */    '$', /* $ */    '%', /* % */
+    '^', /* ^ */    '&', /* & */    '*', /* * */    '(', /* ( */    ')', /* ) */
+    '=', /* = */    '+', /* + */    '|', /* | */    '/', /* / */    '\\', /* \ */
+    ';', /* ; */    ':', /* : */    ',', /* , */    '?' /* ? */
+    );
+    $string = str_replace($bad, '', $string);
+    // replace multiple dots in filename to single dot and (multiple) dots at the end of the filename to nothing
+    $string = preg_replace(array('/\.+/', '/\.+$/'), array('.', ''), $string);
+    // Now replace spaces with page spcacer
+    $string = trim($string);
+    $string = preg_replace('/(\s)+/', PAGE_SPACER, $string);
+    // Now convert to lower-case
+    $string = strtolower($string);
+    // If there are any weird language characters, this will protect us against possible problems they could cause
+    $string = str_replace(array('%2F', '%'), array('/', ''), urlencode($string));
+    // Finally, return the cleaned string
+    return $string;
+}
+
+// Function to convert a desired media filename to a clean mediafilename
+function media_filename($string)
+{
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+    $string = entities_to_7bit($string);
+    // Now remove all bad characters
+    $bad = array('\'','"','`','!','@','#','$','%','^','&','*','=','+','|','/','\\',';',':',',','?');
+    $string = str_replace($bad, '', $string);
+    // replace multiple dots in filename to single dot and (multiple) dots at the end of the filename to nothing
+    $string = preg_replace(array('/\.+/', '/\.+$/', '/\s/'), array('.', '', '_'), $string);
+    // Clean any page spacers at the end of string
+    $string = trim($string);
+    // Finally, return the cleaned string
+    return $string;
+}
+
+// Function to work out a page link
+if(!function_exists('page_link'))
+{
+    function page_link($link)
+    {
+        global $admin;
+        return $admin->page_link($link);
+    }
+}
+
+// Create a new directory and/or protected file in the given directory
+function createFolderProtectFile($sAbsDir='',$make_dir=true)
+{
+    trigger_error('Deprecated function call: '.basename(__DIR__).'/'.basename(__FILE__).'::'.__FUNCTION__, E_USER_DEPRECATED );
+    return array();
+}
+
+function rebuildFolderProtectFile($dir='')
+{
+    trigger_error('Deprecated function call: '.basename(__DIR__).'/'.basename(__FILE__).'::'.__FUNCTION__, E_USER_DEPRECATED );
+    return array();
+}
+
+// Create a new file in the pages directory
+function create_access_file($filename,$page_id,$level)
+{
+    global $admin, $MESSAGE;
+    // First make sure parent folder exists
+    $parent_folders = explode('/',str_replace(WB_PATH.PAGES_DIRECTORY, '', dirname($filename)));
+    $parents = '';
+    foreach($parent_folders AS $parent_folder)
+    {
+        if($parent_folder != '/' AND $parent_folder != '')
+        {
+            $parents .= '/'.$parent_folder;
+            $acces_file = WB_PATH.PAGES_DIRECTORY.$parents;
+            // can only be dirs
+            if(!file_exists($acces_file)) {
+                if(!make_dir($acces_file)) {
+                    $admin->print_error($MESSAGE['MEDIA_DIR_NOT_MADE']);
+                }
+            }
+        }
+    }
+    // The depth of the page directory in the directory hierarchy
+    // '/pages' is at depth 1
+    $pages_dir_depth = count(explode('/',PAGES_DIRECTORY))-1;
+    // Work-out how many ../'s we need to get to the index page
+    $index_location = '';
+    for($i = 0; $i < $level + $pages_dir_depth; $i++) {
+        $index_location .= '../';
+    }
+
+    $content =
+        '<?php'."\n".
+        '// *** This file is generated by WebsiteBaker Ver.'.VERSION."\n".
+        '// *** Creation date: '.date('c')."\n".
+        '// *** Do not modify this file manually'."\n".
+        '// *** WB will rebuild this file from time to time!!'."\n".
+        '// *************************************************'."\n".
+        "\t".'$page_id    = '.$page_id.';'."\n".
+        "\t".'require(\''.$index_location.'index.php\');'."\n".
+        '// *************************************************'."\n";
+
+    if( ($handle = fopen($filename, 'w')) ) {
+        fwrite($handle, $content);
+        fclose($handle);
+        // Chmod the file
+        change_mode($filename);
+    } else {
+        $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+    }
+    return;
+ }
+
+// Function for working out a file mime type (if the in-built PHP one is not enabled)
+if(!function_exists('mime_content_type'))
+{
+    function mime_content_type($filename)
+    {
+        $mime_types = array(
+            'txt'    => 'text/plain',
+            'htm'    => 'text/html',
+            'html'    => 'text/html',
+            'php'    => 'text/html',
+            'css'    => 'text/css',
+            'js'    => 'application/javascript',
+            'json'    => 'application/json',
+            'xml'    => 'application/xml',
+            'swf'    => 'application/x-shockwave-flash',
+            'flv'    => 'video/x-flv',
+
+            // images
+            'png'    => 'image/png',
+            'jpe'    => 'image/jpeg',
+            'jpeg'    => 'image/jpeg',
+            'jpg'    => 'image/jpeg',
+            'gif'    => 'image/gif',
+            'bmp'    => 'image/bmp',
+            'ico'    => 'image/vnd.microsoft.icon',
+            'tiff'    => 'image/tiff',
+            'tif'    => 'image/tiff',
+            'svg'    => 'image/svg+xml',
+            'svgz'    => 'image/svg+xml',
+
+            // archives
+            'zip'    => 'application/zip',
+            'rar'    => 'application/x-rar-compressed',
+            'exe'    => 'application/x-msdownload',
+            'msi'    => 'application/x-msdownload',
+            'cab'    => 'application/vnd.ms-cab-compressed',
+
+            // audio/video
+            'mp3'    => 'audio/mpeg',
+            'mp4'    => 'audio/mpeg',
+            'qt'    => 'video/quicktime',
+            'mov'    => 'video/quicktime',
+
+            // adobe
+            'pdf'    => 'application/pdf',
+            'psd'    => 'image/vnd.adobe.photoshop',
+            'ai'    => 'application/postscript',
+            'eps'    => 'application/postscript',
+            'ps'    => 'application/postscript',
+
+            // ms office
+            'doc'    => 'application/msword',
+            'rtf'    => 'application/rtf',
+            'xls'    => 'application/vnd.ms-excel',
+            'ppt'    => 'application/vnd.ms-powerpoint',
+
+            // open office
+            'odt'    => 'application/vnd.oasis.opendocument.text',
+            'ods'    => 'application/vnd.oasis.opendocument.spreadsheet',
+        );
+        $temp = explode('.',$filename);
+        $ext = strtolower(array_pop($temp));
+        if (array_key_exists($ext, $mime_types)) {
+            return $mime_types[$ext];
+        }elseif (function_exists('finfo_open')) {
+            $finfo = finfo_open(FILEINFO_MIME);
+            $mimetype = finfo_file($finfo, $filename);
+            finfo_close($finfo);
+            return $mimetype;
+        }else {
+            return 'application/octet-stream';
+        }
+    }
+}
+
+// Generate a thumbnail from an image
+function make_thumb($source, $destination, $size)
+{
+    // Check if GD is installed
+    if(extension_loaded('gd') && function_exists('imageCreateFromJpeg'))
+    {
+        // First figure out the size of the thumbnail
+        list($original_x, $original_y) = getimagesize($source);
+        if ($original_x > $original_y) {
+            $thumb_w = $size;
+            $thumb_h = $original_y*($size/$original_x);
+        }
+        if ($original_x < $original_y) {
+            $thumb_w = $original_x*($size/$original_y);
+            $thumb_h = $size;
+        }
+        if ($original_x == $original_y) {
+            $thumb_w = $size;
+            $thumb_h = $size;
+        }
+        // Now make the thumbnail
+        $source = imageCreateFromJpeg($source);
+        $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h);
+        imagecopyresampled($dst_img,$source,0,0,0,0,$thumb_w,$thumb_h,$original_x,$original_y);
+        imagejpeg($dst_img, $destination);
+        // Clear memory
+        imagedestroy($dst_img);
+        imagedestroy($source);
+       // Return true
+        return true;
+    } else {
+        return false;
+    }
+}
+
+/*
+ * Function to work-out a single part of an octal permission value
+ *
+ * @param mixed $octal_value: an octal value as string (i.e. '0777') or real octal integer (i.e. 0777 | 777)
+ * @param string $who: char or string for whom the permission is asked( U[ser] / G[roup] / O[thers] )
+ * @param string $action: char or string with the requested action( r[ead..] / w[rite..] / e|x[ecute..] )
+ * @return boolean
+ */
+function extract_permission($octal_value, $who, $action)
+{
+    // Make sure that all arguments are set and $octal_value is a real octal-integer
+    if(($who == '') || ($action == '') || (preg_match( '/[^0-7]/', (string)$octal_value ))) {
+        return false; // invalid argument, so return false
+    }
+
+    // convert $octal_value into a decimal-integer to be sure having a valid value
+    $right_mask = octdec($octal_value);
+    $action_mask = 0;
+    // set the $action related bit in $action_mask
+    switch($action[0]) { // get action from first char of $action
+        case 'r':
+        case 'R':
+            $action_mask = 4; // set read-bit only (2^2)
+            break;
+        case 'w':
+        case 'W':
+            $action_mask = 2; // set write-bit only (2^1)
+            break;
+        case 'e':
+        case 'E':
+        case 'x':
+        case 'X':
+            $action_mask = 1; // set execute-bit only (2^0)
+            break;
+        default:
+            return false; // undefined action name, so return false
+    }
+//print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.$who[0].'_'.$action[0].' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+//print_r( $right_mask & $action_mask ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+    // shift action-mask into the right position
+    switch($who[0]) { // get who from first char of $who
+        case 'u':
+        case 'U':
+            $action_mask <<= 3; // shift left 3 bits
+        case 'g':
+        case 'G':
+            $action_mask <<= 3; // shift left 3 bits
+        case 'o':
+        case 'O':
+            /* NOP */
+            break;
+        default:
+            return false; // undefined who, so return false
+    }
+    return( ($right_mask & $action_mask) != 0 ); // return result of binary-AND
+}
+
+// Function to delete a page
+    function delete_page($page_id)
+    {
+        global $admin, $database, $MESSAGE;
+        // Find out more about the page
+        $sql  = 'SELECT `page_id`, `menu_title`, `page_title`, `level`, ';
+        $sql .=        '`link`, `parent`, `modified_by`, `modified_when` ';
+        $sql .= 'FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.$page_id;
+        $results = $database->query($sql);
+        if($database->is_error())    { $admin->print_error($database->get_error()); }
+        if($results->numRows() == 0) { $admin->print_error($MESSAGE['PAGES']['NOT_FOUND']); }
+        $results_array = $results->fetchRow();
+        $parent     = $results_array['parent'];
+        $level      = $results_array['level'];
+        $link       = $results_array['link'];
+        $page_title = $results_array['page_title'];
+        $menu_title = $results_array['menu_title'];
+        // Get the sections that belong to the page
+        $sql  = 'SELECT `section_id`, `module` FROM `'.TABLE_PREFIX.'sections` ';
+        $sql .= 'WHERE `page_id`='.$page_id;
+        $query_sections = $database->query($sql);
+        if($query_sections->numRows() > 0)
+        {
+            while($section = $query_sections->fetchRow()) {
+                // Set section id
+                $section_id = $section['section_id'];
+                // Include the modules delete file if it exists
+                if(file_exists(WB_PATH.'/modules/'.$section['module'].'/delete.php')) {
+                    include(WB_PATH.'/modules/'.$section['module'].'/delete.php');
+                }
+            }
+        }
+        // Update the pages table
+        $sql = 'DELETE FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.$page_id;
+        $database->query($sql);
+        if($database->is_error()) {
+            $admin->print_error($database->get_error());
+        }
+        // Update the sections table
+        $sql = 'DELETE FROM `'.TABLE_PREFIX.'sections` WHERE `page_id`='.$page_id;
+        $database->query($sql);
+        if($database->is_error()) {
+            $admin->print_error($database->get_error());
+        }
+        // Include the ordering class or clean-up ordering
+        include_once(WB_PATH.'/framework/class.order.php');
+        $order = new order(TABLE_PREFIX.'pages', 'position', 'page_id', 'parent');
+        $order->clean($parent);
+        // Unlink the page access file and directory
+        $directory = WB_PATH.PAGES_DIRECTORY.$link;
+        $filename = $directory.PAGE_EXTENSION;
+        $directory .= '/';
+        if(file_exists($filename))
+        {
+            if(!is_writable(WB_PATH.PAGES_DIRECTORY.'/')) {
+                $admin->print_error($MESSAGE['PAGES']['CANNOT_DELETE_ACCESS_FILE']);
+            }else {
+                unlink($filename);
+                if( file_exists($directory) &&
+                   (rtrim($directory,'/') != WB_PATH.PAGES_DIRECTORY) &&
+                   (substr($link, 0, 1) != '.'))
+                {
+                    rm_full_dir($directory);
+                }
+            }
+        }
+    }
+
+/*
+ * @param string $file: name of the file to read
+ * @param int $size: number of maximum bytes to read (0 = complete file)
+ * @return string: the content as string, false on error
+ */
+    function getFilePart($file, $size = 0)
+    {
+        $file_content = '';
+        if( file_exists($file) && is_file($file) && is_readable($file))
+        {
+            if($size == 0) {
+                $size = filesize($file);
+            }
+            if(($fh = fopen($file, 'rb'))) {
+                if( ($file_content = fread($fh, $size)) !== false ) {
+                    return $file_content;
+                }
+                fclose($fh);
+            }
+        }
+        return false;
+    }
+
+    /**
+    * replace varnames with values in a string
+    *
+    * @param string $subject: stringvariable with vars placeholder
+    * @param array $replace: values to replace vars placeholder
+    * @return string
+    */
+    function replace_vars($subject = '', &$replace = null )
+    {
+        if(is_array($replace))
+        {
+            foreach ($replace  as $key => $value) {
+                $subject = str_replace("{{".$key."}}", $value, $subject);
+            }
+        }
+        return $subject;
+    }
+
+// Load template into DB
+function load_template($directory)
+{
+    global $database, $admin;
+    $retVal = false;
+    if (is_dir($directory) && file_exists($directory.'/info.php'))
+    {
+        require($directory.'/info.php');
+        if (isset($template_name))
+        {
+            if(!isset($template_license)) {
+              $template_license = 'GNU General Public License';
+            }
+            if(!isset($template_platform) && isset($template_designed_for)) {
+              $template_platform = $template_designed_for;
+            }
+            if(!isset($template_function)) {
+              $template_function = 'template';
+            }
+            // Check that it doesn't already exist
+            $sqlwhere = 'WHERE `type`=\'template\' AND `directory`=\''.$template_directory.'\'';
+            $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'addons` '.$sqlwhere;
+            if ($database->get_one($sql) ) {
+                $sql  = 'UPDATE `'.TABLE_PREFIX.'addons` SET ';
+            }else{
+                // Load into DB
+                $sql  = 'INSERT INTO `'.TABLE_PREFIX.'addons` SET ';
+                $sqlwhere = '';
+            }
+            $sql .= '`directory`=\''.$database->escapeString($template_directory).'\', '
+                  . '`name`=\''.$database->escapeString($template_name).'\', '
+                  . '`description`=\''.$database->escapeString($template_description).'\', '
+                  . '`type`=\'template\', '
+                  . '`function`=\''.$database->escapeString($template_function).'\', '
+                  . '`version`=\''.$database->escapeString($template_version).'\', '
+                  . '`platform`=\''.$database->escapeString($template_platform).'\', '
+                  . '`author`=\''.$database->escapeString($template_author).'\', '
+                  . '`license`=\''.$database->escapeString($template_license).'\' '
+                  . $sqlwhere;
+            if ($database->query($sql)){
+                $retVal = true;
+            } else {
+              $retVal = $database->get_errno();
+            }
+        }
+    }
+    return $retVal;
+}
+
+// Load language into DB
+function load_language($file)
+{
+    global $database,$admin;
+    $retVal = false;
+    if (file_exists($file) && preg_match('#^([A-Z]{2}.php)#', basename($file)))
+    {
+        // require($file);  it's to large
+        // read contents of the template language file into string
+        $data = @file_get_contents(WB_PATH.'/languages/'.str_replace('.php','',basename($file)).'.php');
+        // use regular expressions to fetch the content of the variable from the string
+        $language_name = get_variable_content('language_name', $data, false, false);
+        $language_code = preg_replace('/^.*([a-zA-Z]{2})\.php$/si', '\1', $file);
+        $language_author = get_variable_content('language_author', $data, false, false);
+        $language_version = get_variable_content('language_version', $data, false, false);
+        $language_platform = get_variable_content('language_platform', $data, false, false);
+        $language_description = get_variable_content('language_description', $data, false, false);
+        if(isset($language_name))
+        {
+            if(!isset($language_license)) { $language_license = 'GNU General Public License'; }
+            if(!isset($language_platform) && isset($language_designed_for)) { $language_platform = $language_designed_for; }
+            // Check that it doesn't already exist
+            $sqlwhere = 'WHERE `type`=\'language\' AND `directory`=\''.$language_code.'\'';
+            $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'addons` '.$sqlwhere;
+            if( $database->get_one($sql) ) {
+                $sql  = 'UPDATE `'.TABLE_PREFIX.'addons` SET ';
+            }else{
+                // Load into DB
+                $sql  = 'INSERT INTO `'.TABLE_PREFIX.'addons` SET ';
+                $sqlwhere = '';
+            }
+            $sql .= '`directory`=\''.$language_code.'\', '
+                  . '`name`=\''.$database->escapeString($language_name).'\', '
+                  . '`type`=\'language\', '
+                  . '`version`=\''.$database->escapeString($language_version).'\', '
+                  . '`platform`=\''.$database->escapeString($language_platform).'\', '
+                  . '`author`=\''.$database->escapeString($language_author).'\', '
+                  . '`description`=\'\', '
+                  . '`license`=\''.$database->escapeString($language_license).'\' '
+                  . $sqlwhere;
+            $retVal = $database->query($sql);
+        }
+    }
+    return $retVal;
+}
+
+// Load module into DB
+function load_module($directory, $install = false)
+{
+    global $database,$admin,$MESSAGE;
+    $retVal = array();
+    if(is_dir($directory) && file_exists($directory.'/info.php'))
+    {
+        require($directory.'/info.php');
+        if (isset($module_name))
+        {
+            if (!isset($module_license)) { $module_license = 'GNU General Public License'; }
+            if (!isset($module_platform) && isset($module_designed_for)) { $module_platform = $module_designed_for; }
+            if (!isset($module_function) && isset($module_type)) { $module_function = $module_type; }
+            $module_function = strtolower($module_function);
+            // Check that it doesn't already exist
+            $sqlwhere = 'WHERE `type` = \'module\' AND `directory` = \''.$module_directory.'\'';
+            $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'addons` '.$sqlwhere;
+            if ( $database->get_one($sql) ) {
+                $sql  = 'UPDATE `'.TABLE_PREFIX.'addons` SET ';
+            }else{
+                // Load into DB
+                $sql  = 'INSERT INTO `'.TABLE_PREFIX.'addons` SET ';
+                $sqlwhere = '';
+            }
+            $sql .= '`directory`=\''.$database->escapeString($module_directory).'\', '
+                  . '`name`=\''.$database->escapeString($module_name).'\', '
+                  . '`description`=\''.$database->escapeString($module_description).'\', '
+                  . '`type`=\'module\', '
+                  . '`function`=\''.$database->escapeString($module_function).'\', '
+                  . '`version`=\''.$database->escapeString($module_version).'\', '
+                  . '`platform`=\''.$database->escapeString($module_platform).'\', '
+                  . '`author`=\''.$database->escapeString($module_author).'\', '
+                  . '`license`=\''.$database->escapeString($module_license).'\''
+            . $sqlwhere;
+            $retVal[] = $database->query($sql);
+            // Run installation script
+            if($install == true) {
+                if(file_exists($directory.'/install.php')) {
+                    require($directory.'/install.php');
+                    $retVal[] = isset($msg)?:'Info '.$module_name;
+                }
+            }
+        }
+    }
+return $retVal;
+}
+
+// Upgrade module info in DB, optionally start upgrade script
+function upgrade_module($directory, $upgrade = false)
+{
+    global $database, $admin, $MESSAGE, $new_module_version;
+    $mod_directory = WB_PATH.'/modules/'.$directory;
+    if(file_exists($mod_directory.'/info.php'))
+    {
+        require($mod_directory.'/info.php');
+        if(isset($module_name))
+        {
+            if(!isset($module_license)) { $module_license = 'GNU General Public License'; }
+            if(!isset($module_platform) && isset($module_designed_for)) { $module_platform = $module_designed_for; }
+            if(!isset($module_function) && isset($module_type)) { $module_function = $module_type; }
+            $module_function = strtolower($module_function);
+            // Check that it does already exist
+            $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'addons` ';
+            $sql .= 'WHERE `directory`=\''.$module_directory.'\'';
+            if( $database->get_one($sql) )
+            {
+                // Update in DB
+                $sql  = 'UPDATE `'.TABLE_PREFIX.'addons` SET '
+                      . '`name`=\''.$database->escapeString($module_name).'\', '
+                      . '`version`=\''.$database->escapeString($module_version).'\', '
+                      . '`description`=\''.$database->escapeString($module_description).'\', '
+                      . '`platform`=\''.$database->escapeString($module_platform).'\', '
+                      . '`author`=\''.$database->escapeString($module_author).'\', '
+                      . '`license`=\''.$database->escapeString($module_license).'\' '
+                      . 'WHERE `directory`=\''.$database->escapeString($module_directory).'\' ';
+                $database->query($sql);
+                if($database->is_error()) {
+                    $admin->print_error($database->get_error());
+                }
+                // Run upgrade script
+                if($upgrade == true) {
+                    if(file_exists($mod_directory.'/upgrade.php')) {
+                        require($mod_directory.'/upgrade.php');
+                    }
+                }
+            }
+        }
+    }
+}
+
+// extracts the content of a string variable from a string (save alternative to including files)
+if(!function_exists('get_variable_content'))
+{
+    function get_variable_content($search, $data, $striptags=true, $convert_to_entities=true)
+    {
+        $match = '';
+        // search for $variable followed by 0-n whitespace then by = then by 0-n whitespace
+        // then either " or ' then 0-n characters then either " or ' followed by 0-n whitespace and ;
+        // the variable name is returned in $match[1], the content in $match[3]
+        if (preg_match('/(\$' .$search .')\s*=\s*("|\')(.*)\2\s*;/', $data, $match))
+        {
+            if(strip_tags(trim($match[1])) == '$' .$search) {
+                // variable name matches, return it's value
+                $match[3] = ($striptags == true) ? strip_tags($match[3]) : $match[3];
+                $match[3] = ($convert_to_entities == true) ? htmlentities($match[3]) : $match[3];
+                return $match[3];
+            }
+        }
+        return false;
+    }
+}
+
+/*
+ * @param string $modulname: like saved in addons.directory
+ * @param boolean $source: true reads from database, false from info.php
+ * @return string:  the version as string, if not found returns null
+ */
+
+    function get_modul_version($modulname, $source = true)
+    {
+        global $database;
+        $version = null;
+        if( $source != true )
+        {
+            $sql  = 'SELECT `version` FROM `'.TABLE_PREFIX.'addons` ';
+            $sql .= 'WHERE `directory`=\''.$modulname.'\'';
+            $version = $database->get_one($sql);
+        } else {
+            $info_file = WB_PATH.'/modules/'.$modulname.'/info.php';
+            if(file_exists($info_file)) {
+                if(($info_file = file_get_contents($info_file))) {
+                    $version = get_variable_content('module_version', $info_file, false, false);
+                    $version = ($version !== false) ? $version : null;
+                }
+            }
+        }
+        return $version;
+    }
+
+/*
+ * @param string $varlist: commaseperated list of varnames to move into global space
+ * @return bool:  false if one of the vars already exists in global space (error added to msgQueue)
+ */
+    function vars2globals_wrapper($varlist)
+    {
+        $retval = true;
+        if( $varlist != '')
+        {
+            $vars = explode(',', $varlist);
+            foreach( $vars as $var)
+            {
+                if( isset($GLOBALS[$var]) ){
+                    ErrorLog::write( 'variabe $'.$var.' already defined in global space!!',__FILE__, __FUNCTION__, __LINE__);
+                    $retval = false;
+                }else {
+                    global $$var;
+                }
+            }
+        }
+        return $retval;
+    }
+
+/*
+ * filter directory traversal more thoroughly, thanks to hal 9000
+ * @param string $dir: directory relative to MEDIA_DIRECTORY
+ * @param bool $with_media_dir: true when to include MEDIA_DIRECTORY
+ * @return: false if directory traversal detected, real path if not
+ */
+    function check_media_path($directory, $with_media_dir = true)
+    {
+        $md = ($with_media_dir) ? MEDIA_DIRECTORY : '';
+        $dir = realpath(WB_PATH . $md . '/' . utf8_decode($directory));
+        $required = realpath(WB_PATH . MEDIA_DIRECTORY);
+        if (strstr($dir, $required)) {
+            return $dir;
+        } else {
+            return false;
+        }
+    }
+
+/*
+urlencode function and rawurlencode are mostly based on RFC 1738.
+However, since 2005 the current RFC in use for URIs standard is RFC 3986.
+Here is a function to encode URLs according to RFC 3986.
+*/
+if(!function_exists('url_encode')){
+    function url_encode($string) {
+        $string = html_entity_decode($string,ENT_QUOTES,'UTF-8');
+        $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
+        $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
+        return str_replace($entities,$replacements, rawurlencode($string));
+    }
+}

Property changes on: trunk/framework/functions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/globalExceptionHandler.php
===================================================================
--- trunk/framework/globalExceptionHandler.php	(nonexistent)
+++ trunk/framework/globalExceptionHandler.php	(revision 2)
@@ -0,0 +1,83 @@
+<?php
+/**
+ * @category        WebsiteBaker
+ * @package         WebsiteBaker_core
+ * @author          Werner v.d.Decken
+ * @copyright       WebsiteBaker.org e.V.
+ * @link            http://websitebaker.org
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ *
+ * Global exception-handler
+ * This module will activate a global exception handler to catch all thrown exceptions
+ *
+ */
+
+/**
+ * define Exception to show error after accessing a forbidden file
+ */
+    class IllegalFileException extends LogicException {
+        public function __toString() {
+            $file = str_replace(dirname(dirname(__FILE__)), '', $this->getFile());
+            $out  = '<div style="color: #ff0000; text-align: center;"><br />';
+            $out .= '<br /><br /><h1>Illegale file access</h1>';
+            $out .= '<h2>'.$file.'</h2></div>';
+            return $out;
+        }
+    } // end of class
+/**
+ * define several default exceptions directly to prevent from extra loading requests
+ */
+/**
+ *
+ */
+    class AppException extends Exception{
+        public function __toString() {
+            $file = str_replace(dirname(dirname(__FILE__)), '', $this->getFile());
+            if (defined('DEBUG')&& DEBUG) {
+                $trace = $this->getTrace();
+                $result = 'Exception: "'.$this->getMessage().'" @ ';
+                if($trace[0]['class'] != '') {
+                  $result .= $trace[0]['class'].'->';
+                }
+                $result .= $trace[0]['function'].'(); in'.$file.'<br />'."\n";
+                if($GLOBALS['database']->get_error()) {
+                    $result .= $GLOBALS['database']->get_error().': '.$GLOBALS['database']->get_error().'<br />'."\n";
+                }
+                $result .= '<pre>'."\n";
+                $result .= print_r($trace, true)."\n";
+                $result .= '</pre>'."\n";
+            }else {
+                $result = 'Exception: "'.$this->getMessage().'" >> Exception detected in: ['.$file.']<br />'."\n";
+            }
+            return $result;
+        }
+    }
+
+/**
+ *
+ * @param Exception $e
+ */
+    function globalExceptionHandler($e) {
+        // hide server internals from filename where the exception was thrown
+        $file = str_replace(dirname(dirname(__FILE__)), '', $e->getFile());
+        // select some exceptions for special handling
+        if ($e instanceof IllegalFileException) {
+            $sResponse  = $_SERVER['SERVER_PROTOCOL'].' 403 Forbidden';
+            header($sResponse);
+            echo $e;
+        } elseif ($e instanceof AppException) {
+            echo (string)$e;
+        } else {
+        // default exception handling
+            $out  = 'There was an uncatched exception'."\n";
+            $out .= $e->getMessage()."\n";
+            $out .= 'in line ('.$e->getLine().') of ('.$file.'):'."\n";
+            echo nl2br($out);
+        }
+    }
+/**
+ * now activate the new defined handler
+ */
+    set_exception_handler('globalExceptionHandler');

Property changes on: trunk/framework/globalExceptionHandler.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/initialize.php
===================================================================
--- trunk/framework/initialize.php	(nonexistent)
+++ trunk/framework/initialize.php	(revision 2)
@@ -0,0 +1,483 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         initialize
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+error_reporting( -1 );
+$sStarttime = array_sum(explode(" ", microtime()));
+$aPhpFunctions = get_defined_functions();
+/**
+ * sanitize $_SERVER['HTTP_REFERER']
+ * @param string $sWbUrl qualified startup URL of current application
+ */
+function SanitizeHttpReferer($sWbUrl = WB_URL) {
+    $sTmpReferer = '';
+    if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') {
+        define('ORG_REFERER', ($_SERVER['HTTP_REFERER'] ?: ''));
+        $aRefUrl = parse_url($_SERVER['HTTP_REFERER']);
+        if ($aRefUrl !== false) {
+            $aRefUrl['host'] = isset($aRefUrl['host']) ? $aRefUrl['host'] : '';
+            $aRefUrl['path'] = isset($aRefUrl['path']) ? $aRefUrl['path'] : '';
+            $aRefUrl['fragment'] = isset($aRefUrl['fragment']) ? '#'.$aRefUrl['fragment'] : '';
+            $aWbUrl = parse_url(WB_URL);
+            if ($aWbUrl !== false) {
+                $aWbUrl['host'] = isset($aWbUrl['host']) ? $aWbUrl['host'] : '';
+                $aWbUrl['path'] = isset($aWbUrl['path']) ? $aWbUrl['path'] : '';
+                if (strpos($aRefUrl['host'].$aRefUrl['path'], $aWbUrl['host'].$aWbUrl['path']) !== false) {
+                    $aRefUrl['path'] = preg_replace('#^'.$aWbUrl['path'].'#i', '', $aRefUrl['path']);
+                    $sTmpReferer = WB_URL.$aRefUrl['path'].$aRefUrl['fragment'];
+                }
+                unset($aWbUrl);
+            }
+            unset($aRefUrl);
+        }
+    }
+    $_SERVER['HTTP_REFERER'] = $sTmpReferer;
+}
+/**
+ * makePhExp
+ * @param array list of names for placeholders
+ * @return array reformatted list
+ * @description makes an RegEx-Expression for preg_replace() of each item in $aList
+ *              Example: from 'TEST_NAME' it mades '/\[TEST_NAME\]/s'
+ */
+function makePhExp($sList)
+{
+    $aList = func_get_args();
+//    return preg_replace('/^(.*)$/', '/\[$1\]/s', $aList);
+    return preg_replace('/^(.*)$/', '[$1]', $aList);
+}
+
+/* ***************************************************************************************
+ * Start initialization                                                                  *
+ ****************************************************************************************/// aktivate exceptionhandler ---
+//    throw new Exception('PHP-'.PHP_VERSION.' found, but at last PHP-5.3.6 required !!');
+// Stop execution if PHP version is too old
+// PHP less then 5.6.0 is prohibited ---
+if (version_compare(PHP_VERSION, '5.6.0', '<')) {
+    $sMsg = '<p style="color: #ff0000;">WebsiteBaker is not able to run with PHP-Version less then 5.6.0!!<br />'
+          . 'Please change your PHP-Version to any kind from 5.6.0 and up!<br />'
+          . 'If you have problems to solve that, ask your hosting provider for it.<br  />'
+          . 'The very best solution is the use of PHP-7.0 and up</p>';
+    die($sMsg);
+}
+
+/* -------------------------------------------------------- */
+if ( !defined('WB_PATH')) { define('WB_PATH', dirname(__DIR__)); }
+// *** initialize Exception handling
+if(!function_exists('globalExceptionHandler')) {
+    include(__DIR__.'/globalExceptionHandler.php');
+}
+// *** initialize Error handling
+$sErrorLogFile = dirname(__DIR__).'/var/logs/php_error.log.php';
+$sErrorLogPath = dirname($sErrorLogFile);
+
+if (!file_exists($sErrorLogFile)) {
+    $sTmp = '<?php die(\'illegal file access\'); ?>'
+          . 'created: ['.date('c').']'.PHP_EOL;
+    if (false === file_put_contents($sErrorLogFile, $sTmp, FILE_APPEND)) {
+        throw new Exception('unable to create logfile \'/var/logs/php_error.log.php\'');
+    }
+}
+if (!is_writeable($sErrorLogFile)) {
+    throw new Exception('not writeable logfile \'/var/logs/php_error.log.php\'');
+}
+ini_set('log_errors', 1);
+ini_set ('error_log', $sErrorLogFile);
+
+/**
+ * Read DB settings from configuration file
+ * @return array
+ * @throws RuntimeException
+ *
+ */
+function initReadSetupFile()
+{
+// check for valid file request. Becomes more stronger in next version
+//    initCheckValidCaller(array('save.php','index.php','config.php','upgrade-script.php'));
+    $aCfg = array();
+    $sSetupFile = dirname(dirname(__FILE__)).'/setup.ini.php';
+    if(is_readable($sSetupFile) && !defined('WB_URL')) {
+        $aCfg = parse_ini_file($sSetupFile, true);
+        if (!isset($aCfg['Constants']) || !isset($aCfg['DataBase'])) {
+            throw new InvalidArgumentException('configuration missmatch in setup.ini.php');
+        }
+        foreach($aCfg['Constants'] as $key=>$value) {
+            switch($key):
+                case 'DEBUG':
+                    $value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
+                    if(!defined('DEBUG')) { define('DEBUG', $value); }
+                    break;
+                case 'WB_URL': // << case is set deprecated
+                case 'AppUrl':
+                    $value = trim(str_replace('\\', '/', $value), '/');
+                    if(!defined('WB_URL')) { define('WB_URL', $value); }
+                    break;
+                case 'ADMIN_DIRECTORY': // << case is set deprecated
+                case 'AcpDir':
+                    $value = trim(str_replace('\\', '/', $value), '/');
+                    if(!defined('ADMIN_DIRECTORY')) { define('ADMIN_DIRECTORY', $value); }
+                    break;
+                default:
+                    if(!defined($key)) { define($key, $value); }
+                    break;
+            endswitch;
+        }
+    }
+    return $aCfg;
+//      throw new RuntimeException('unable to read setup.ini.php');
+}
+/**
+ * Set constants for system/install values
+ * @throws RuntimeException
+ */
+function initSetInstallWbConstants($aCfg) {
+    if (sizeof($aCfg)) {
+        foreach($aCfg['Constants'] as $key=>$value) {
+            switch($key):
+                case 'DEBUG':
+                    $value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
+                    if(!defined('DEBUG')) { define('DEBUG', $value); }
+                    break;
+                case 'WB_URL': // << case is set deprecated
+                case 'AppUrl':
+                    $value = trim(str_replace('\\', '/', $value), '/');
+                    if(!defined('WB_URL')) { define('WB_URL', $value); }
+                    break;
+                case 'ADMIN_DIRECTORY': // << case is set deprecated
+                case 'AcpDir':
+                    $value = trim(str_replace('\\', '/', $value), '/');
+                    if(!defined('ADMIN_DIRECTORY')) { define('ADMIN_DIRECTORY', $value); }
+                    if(!preg_match('/xx[a-z0-9_][a-z0-9_\-\.]+/i', 'xx'.ADMIN_DIRECTORY)) {
+                        throw new RuntimeException('Invalid admin-directory: ' . ADMIN_DIRECTORY);
+                    }
+                    break;
+                default:
+                    if(!defined($key)) { define($key, $value); }
+                    break;
+            endswitch;
+        }
+    }
+    if(!defined('WB_PATH')){ define('WB_PATH', dirname(__DIR__)); }
+    if(!defined('ADMIN_URL')){ define('ADMIN_URL', rtrim(WB_URL, '/\\').'/'.ADMIN_DIRECTORY); }
+    if(!defined('ADMIN_PATH')){ define('ADMIN_PATH', WB_PATH.'/'.ADMIN_DIRECTORY); }
+    if(!defined('WB_REL')){
+        $x1 = parse_url(WB_URL);
+        define('WB_REL', (isset($x1['path']) ? $x1['path'] : ''));
+    }
+    if(!defined('ADMIN_REL')){ define('ADMIN_REL', WB_REL.'/'.ADMIN_DIRECTORY); }
+    if(!defined('DOCUMENT_ROOT')) {
+        define('DOCUMENT_ROOT', preg_replace('/'.preg_quote(str_replace('\\', '/', WB_REL), '/').'$/', '', str_replace('\\', '/', WB_PATH)));
+        $_SERVER['DOCUMENT_ROOT'] = DOCUMENT_ROOT;
+    }
+    if(!defined('TMP_PATH')){ define('TMP_PATH', WB_PATH.'/temp'); }
+
+    if (defined('DB_TYPE'))
+    {
+    // import constants for compatibility reasons
+        $db = array();
+        if (defined('DB_TYPE'))      { $db['type']         = DB_TYPE; }
+        if (defined('DB_USERNAME'))  { $db['user']         = DB_USERNAME; }
+        if (defined('DB_PASSWORD'))  { $db['pass']         = DB_PASSWORD; }
+        if (defined('DB_HOST'))      { $db['host']         = DB_HOST; }
+        if (defined('DB_PORT'))      { $db['port']         = DB_PORT; }
+        if (defined('DB_NAME'))      { $db['name']         = DB_NAME; }
+        if (defined('DB_CHARSET'))   { $db['charset']      = DB_CHARSET; }
+        if (defined('TABLE_PREFIX')) { $db['table_prefix'] = TABLE_PREFIX; }
+    } else {
+        foreach($aCfg['DataBase'] as $key=>$value) {
+            switch($key):
+                case 'type':
+                    if(!defined('DB_TYPE')) { define('DB_TYPE', $value); }
+                    break;
+                case 'user':
+                    if(!defined('DB_USERNAME')) { define('DB_USERNAME', $value); }
+                    break;
+                case 'pass':
+                    if(!defined('DB_PASSWORD')) { define('DB_PASSWORD', $value); }
+                    break;
+                case 'host':
+                    if(!defined('DB_HOST')) { define('DB_HOST', $value); }
+                    break;
+                case 'port':
+                    if(!defined('DB_PORT')) { define('DB_PORT', $value); }
+                    break;
+                case 'name':
+                    if(!defined('DB_NAME')) { define('DB_NAME', $value); }
+                    break;
+                case 'charset':
+                    if(!defined('DB_CHARSET')) { define('DB_CHARSET', $value); }
+                    break;
+                default:
+                    $key = strtoupper($key);
+                    if(!defined($key)) { define($key, $value); }
+                    break;
+            endswitch;
+        }
+    }
+}
+
+/**
+ * WbErrorHandler()
+ *
+ * @param mixed $iErrorCode
+ * @param mixed $sErrorText
+ * @param mixed $sErrorFile
+ * @param mixed $iErrorLine
+ * @return
+ */
+function WbErrorHandler($iErrorCode, $sErrorText, $sErrorFile, $iErrorLine)
+{
+     if (!(error_reporting() & $iErrorCode) || ini_get('log_errors') == 0) {
+        return false;
+    }
+    $bRetval = false;
+    $sErrorLogFile = ini_get ('error_log');
+    if (!is_writeable($sErrorLogFile)){return false;}
+    $sErrorType = E_NOTICE ;
+    $aErrors = array(
+        E_USER_DEPRECATED   => 'E_USER_DEPRECATED',
+        E_USER_NOTICE       => 'E_USER_NOTICE',
+        E_USER_WARNING      => 'E_USER_WARNING',
+        E_DEPRECATED        => 'E_DEPRECATED',
+        E_NOTICE            => 'E_NOTICE',
+        E_WARNING           => 'E_WARNING',
+        E_CORE_WARNING      => 'E_CORE_WARNING',
+        E_COMPILE_WARNING   => 'E_COMPILE_WARNING',
+        E_STRICT            => 'E_STRICT',
+        E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+    );
+    if (array_key_exists($iErrorCode, $aErrors)) {
+        $sErrorType = $aErrors[$iErrorCode];
+        $bRetval = true;
+    }
+    $aBt= debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
+    $x = sizeof($aBt) -1;
+    $x = $x < 0 ? 0 : ($x <= 2 ? $x : 2);
+    $sEntry = date('c').' '.'['.$sErrorType.'] '.str_replace(dirname(__DIR__), '', $sErrorFile).':['.$iErrorLine.'] '
+            . ' from '.str_replace(dirname(__DIR__), '', $aBt[$x]['file']).':['.$aBt[$x]['line'].'] '
+            . (@$aBt[$x]['class'] ? $aBt[$x]['class'].$aBt[$x]['type'] : '').$aBt[$x]['function'].' '
+            . '"'.$sErrorText.'"'.PHP_EOL;
+    file_put_contents($sErrorLogFile, $sEntry, FILE_APPEND);
+    return $bRetval;
+}
+/* ***************************************************************************************
+ * Start initialization                                                                  *
+ ****************************************************************************************/
+// activate errorhandler
+    set_error_handler('WbErrorHandler', -1 );
+    if (! defined('SYSTEM_RUN')) { define('SYSTEM_RUN', true); }
+// load configuration ---
+    $aCfg = initReadSetupFile();
+    initSetInstallWbConstants($aCfg);
+// ---------------------------
+// get Database connection data from configuration
+if (!defined('ADMIN_DIRECTORY')) { define('ADMIN_DIRECTORY', 'admin'); }
+if (!preg_match('/xx[a-z0-9_][a-z0-9_\-\.]+/i', 'xx'.ADMIN_DIRECTORY)) {
+    throw new RuntimeException('Invalid admin-directory: ' . ADMIN_DIRECTORY);
+}
+if ( !defined('ADMIN_URL')) { define('ADMIN_URL', WB_URL.'/'.ADMIN_DIRECTORY); }
+if ( !defined('ADMIN_PATH')) { define('ADMIN_PATH', WB_PATH.'/'.ADMIN_DIRECTORY); }
+if ( !defined('WB_REL')){
+    $x1 = parse_url(WB_URL);
+    define('WB_REL', (isset($x1['path']) ? $x1['path'] : ''));
+}
+if ( !defined('DOCUMENT_ROOT')) {
+    define('DOCUMENT_ROOT', preg_replace('/'.preg_quote(str_replace('\\', '/', WB_REL), '/').'$/', '', str_replace('\\', '/', WB_PATH)));
+    $_SERVER['DOCUMENT_ROOT'] = DOCUMENT_ROOT;
+}
+if (file_exists(WB_PATH.'/framework/class.database.php')) {
+    // sanitize $_SERVER['HTTP_REFERER']
+    SanitizeHttpReferer(WB_URL);
+    date_default_timezone_set('UTC');
+    // register TWIG autoloader ---
+    $sTmp = dirname(dirname(__FILE__)).'/include/Sensio/Twig/lib/Twig/Autoloader.php';
+    if (!class_exists('Twig_Autoloader') && is_readable($sTmp)){
+        include $sTmp;
+        Twig_Autoloader::register();
+    }
+// register PHPMailer autoloader ---
+    $sTmp = dirname(dirname(__FILE__)).'/include/phpmailer/PHPMailerAutoload.php';
+    if (!function_exists('PHPMailerAutoload') && is_readable($sTmp)) {
+        require($sTmp);
+    }
+
+    if (!class_exists('database', false)){
+      // load database class
+      require(__DIR__.'/class.database.php');
+      // Create database class
+      $database = new database();
+      $database->sTablePrefix = TABLE_PREFIX;
+    }
+
+    // activate frontend OutputFilterApi (initialize.php)
+    if (is_readable(WB_PATH .'/modules/output_filter/OutputFilterApi.php')) {
+        if (!function_exists('OutputFilterApi')) {
+            include WB_PATH .'/modules/output_filter/OutputFilterApi.php';
+        }
+    } else {
+        throw new RuntimeException('missing mandatory global OutputFilterApi!');
+    }
+    if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+        @ini_set("magic_quotes_runtime", 0); // Disable magic_quotes_runtime
+        @ini_set("magic_quotes_gpc", 0); // Disable magic_quotes_gpc
+    }
+    if (get_magic_quotes_gpc()) {
+        $unescape = function(&$value, $key) {
+            $value = stripslashes($value);
+        };
+        array_walk_recursive($_POST, $unescape);
+        array_walk_recursive($_GET,  $unescape);
+        array_walk_recursive($_REQUEST, $unescape);
+        array_walk_recursive($_COOKIE, $unescape);
+    }
+    // Get website settings (title, keywords, description, header, and footer)
+    $sql = 'SELECT `name`, `value` FROM `'.TABLE_PREFIX.'settings`';
+    if (($get_settings = $database->query($sql))) {
+        $x = 0;
+        while ($setting = $get_settings->fetchRow(MYSQLI_ASSOC)) {
+            $setting_name  = strtoupper($setting['name']);
+            $setting_value = $setting['value'];
+            if ($setting_value == 'false') {
+                $setting_value = false;
+            }
+            if ($setting_value == 'true') {
+                $setting_value = true;
+            }
+            @define($setting_name, $setting_value);
+            $x++;
+        }
+    } else {
+        die($database->get_error());
+    }
+    if (!$x) {
+        throw new RuntimeException('no settings found');
+    }
+    @define('DO_NOT_TRACK', (isset($_SERVER['HTTP_DNT'])));
+    ini_set('display_errors', ((defined('DEBUG')&& (DEBUG==true)) ?'1':'0'));
+
+    if (!defined('DEBUG')){ define('DEBUG', false); }
+    $string_file_mode = defined('STRING_FILE_MODE')?STRING_FILE_MODE:'0644';
+    @define('OCTAL_FILE_MODE',(int) octdec($string_file_mode));
+    $string_dir_mode = defined('STRING_DIR_MODE')?STRING_DIR_MODE:'0755';
+    @define('OCTAL_DIR_MODE',(int) octdec($string_dir_mode));
+//    $sSecMod = (defined('SECURE_FORM_MODULE') && SECURE_FORM_MODULE != '') ? '.'.SECURE_FORM_MODULE : '';
+//    $sSecMod = WB_PATH.'/framework/SecureForm'.$sSecMod.'.php';
+//    require_once($sSecMod);
+    if (!defined("WB_INSTALL_PROCESS")) {
+    // get CAPTCHA and ASP settings
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_captcha_control`';
+        if (($get_settings = $database->query($sql)) &&
+            ($setting = $get_settings->fetchRow(MYSQLI_ASSOC))
+        ) {
+            @define('ENABLED_CAPTCHA', (($setting['enabled_captcha'] == '1') ? true : false));
+            @define('ENABLED_ASP', (($setting['enabled_asp'] == '1') ? true : false));
+            @define('CAPTCHA_TYPE', $setting['captcha_type']);
+            @define('ASP_SESSION_MIN_AGE', (int)$setting['asp_session_min_age']);
+            @define('ASP_VIEW_MIN_AGE', (int)$setting['asp_view_min_age']);
+            @define('ASP_INPUT_MIN_AGE', (int)$setting['asp_input_min_age']);
+        } else {
+            throw new RuntimeException('CAPTCHA-Settings not found');
+        }
+    }
+
+    // Start a session
+    if (!defined('SESSION_STARTED')) {
+        session_name(APP_NAME.'-sid');
+        @session_start();
+        define('SESSION_STARTED', true);
+    }
+    if (defined('ENABLED_ASP') && ENABLED_ASP && !isset($_SESSION['session_started'])) {
+        $_SESSION['session_started'] = time();
+    }
+    // Get users language
+    if (
+        isset($_GET['lang']) AND
+        $_GET['lang'] != '' AND
+        !is_numeric($_GET['lang']) AND
+        strlen($_GET['lang']) == 2
+    ) {
+        define('LANGUAGE', strtoupper($_GET['lang']));
+        $_SESSION['LANGUAGE']=LANGUAGE;
+    } else {
+        if (isset($_SESSION['LANGUAGE']) AND $_SESSION['LANGUAGE'] != '') {
+            define('LANGUAGE', $_SESSION['LANGUAGE']);
+        } else {
+            define('LANGUAGE', DEFAULT_LANGUAGE);
+        }
+    }
+    $sCachePath = dirname(__DIR__).'/temp/cache/';
+    if (!file_exists($sCachePath)) {
+        if (!mkdir($sCachePath)) { $sCachePath = dirname(__DIR__).'/temp/'; }
+    }
+    // Load Language file(s)
+    $sCurrLanguage = '';
+    $slangFile = WB_PATH.'/languages/EN.php';
+    if (is_readable($slangFile)) {
+        require $slangFile;
+        $sCurrLanguage ='EN';
+    }
+    if ($sCurrLanguage != DEFAULT_LANGUAGE) {
+        $slangFile = WB_PATH.'/languages/'.DEFAULT_LANGUAGE.'.php';
+        if (is_readable($slangFile)) {
+            require $slangFile;
+            $sCurrLanguage = DEFAULT_LANGUAGE;
+        }
+    }
+    if ($sCurrLanguage != LANGUAGE) {
+        $slangFile = WB_PATH.'/languages/'.LANGUAGE.'.php';
+        if (is_readable($slangFile)) {
+            require $slangFile;
+        }
+    }
+    if (!class_exists('Translate', false)) {
+        include __DIR__.'/Translate.php';
+    }
+    $oTrans = Translate::getInstance();
+    $oTrans->initialize(array('EN', DEFAULT_LANGUAGE, LANGUAGE), $sCachePath); // 'none'
+    // Get users timezone
+    if (isset($_SESSION['TIMEZONE'])) {
+        define('TIMEZONE', $_SESSION['TIMEZONE']);
+    } else {
+        define('TIMEZONE', DEFAULT_TIMEZONE);
+    }
+    // Get users date format
+    if (isset($_SESSION['DATE_FORMAT'])) {
+        define('DATE_FORMAT', $_SESSION['DATE_FORMAT']);
+    } else {
+        define('DATE_FORMAT', DEFAULT_DATE_FORMAT);
+    }
+    // Get users time format
+    if (isset($_SESSION['TIME_FORMAT'])) {
+        define('TIME_FORMAT', $_SESSION['TIME_FORMAT']);
+    } else {
+        define('TIME_FORMAT', DEFAULT_TIME_FORMAT);
+    }
+    // Set Theme dir
+    define('THEME_URL', WB_URL.'/templates/'.DEFAULT_THEME);
+    define('THEME_PATH', WB_PATH.'/templates/'.DEFAULT_THEME);
+    // extended wb_settings
+    define('EDIT_ONE_SECTION', false);
+    define('EDITOR_WIDTH', 0);
+}
+
+function newAdmin($section_name= '##skip##', $section_permission = 'start', $auto_header = true, $auto_auth = true)
+{
+    if (isset($GLOBALS['admin']) && $GLOBALS['admin'] instanceof admin) {
+        unset($GLOBALS['admin']);
+        usleep(10000);
+    }
+    return new admin($section_name, $section_permission, $auto_header, $auto_auth);
+}

Property changes on: trunk/framework/initialize.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/framework/module.functions.php
===================================================================
--- trunk/framework/module.functions.php	(nonexistent)
+++ trunk/framework/module.functions.php	(revision 2)
@@ -0,0 +1,263 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/**
+   This file contains routines to edit the optional module files: frontend.css and backend.css
+   Mechanism was introduced with WB 2.7 to provide a global solution for all modules
+   To use this function, include this file from your module (e.g. from modify.php)
+   Then simply call the function edit_css('your_module_directory') - that�s it
+   NOTE: Some functions were added for module developers to make the creation of own module easier
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+   require_once(dirname(__FILE__).'/globalExceptionHandler.php');
+   throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+/*
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ FUNCTIONS REQUIRED TO EDIT THE OPTIONAL MODULE CSS FILES
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+*/ 
+
+// this function checks the validity of the specified module directory
+if(!function_exists('check_module_dir')) {
+   function check_module_dir($mod_dir) {
+      // check if module directory is formal correct (only characters: "a-z,0-9,_,-")
+      if(!preg_match('/^[a-z0-9_-]+$/iD', $mod_dir)) return '';
+      // check if the module folder contains the required info.php file
+      return (file_exists(WB_PATH .'/modules/' .$mod_dir .'/info.php')) ? $mod_dir : '';
+   }
+}
+
+// this function checks if the specified optional module file exists
+if (!function_exists('mod_file_exists')) {
+   function mod_file_exists($mod_dir, $mod_file='frontend.css') {
+     // check if the module file exists
+      return file_exists(WB_PATH .'/modules/' .$mod_dir .'/' .$mod_file);
+   }
+}
+
+// this function displays the "Edit CSS" button in modify.php 
+if (!function_exists('edit_module_css')) {
+   function edit_module_css($mod_dir) {
+      global $page_id, $section_id, $admin;
+
+      // check if the required edit_module_css.php file exists
+      if(!file_exists(WB_PATH .'/modules/edit_module_files.php')) return;
+
+      // check if specified module directory is valid
+      if(check_module_dir($mod_dir) == '') return;
+
+      // check if frontend.css or backend.css exist
+      $frontend_css = mod_file_exists($mod_dir, 'frontend.css');
+      $backend_css = mod_file_exists($mod_dir, 'backend.css');
+
+      // output the edit CSS submtin button if required
+      if($frontend_css || $backend_css) {
+         // default text used for the edit CSS routines if not defined in the WB core language files
+         $edit_css_caption = (isset($GLOBALS['TEXT_CAP_EDIT_CSS'])) ?$GLOBALS['TEXT_CAP_EDIT_CSS'] :'Edit CSS';
+?>
+         <form name="edit_module_file" action="<?php echo WB_URL .'/modules/edit_module_files.php?page_id='.$page_id;?>" 
+            method="post" style="margin: 0; text-align:right;">
+            <?php echo $admin->getFTAN();?>
+            <input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+            <input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+            <input type="hidden" name="mod_dir" value="<?php echo $mod_dir; ?>" />
+            <input type="hidden" name="edit_file" value="<?php echo ($frontend_css) ? 'frontend.css' : 'backend.css';?>" />
+            <input type="hidden" name="action" value="edit" />
+            <input type="submit" value="<?php echo $edit_css_caption;?>" class="mod_<?php echo $mod_dir;?>_edit_css" />
+         </form>
+<?php
+    }
+  }
+}
+
+// this function displays a button to toggle between CSS files (invoked from edit_css.php)
+if (!function_exists('toggle_css_file')) {
+   function toggle_css_file($mod_dir, $base_css_file = 'frontend.css') {
+      global $page_id, $section_id, $admin;
+      // check if the required edit_module_css.php file exists
+      if(!file_exists(WB_PATH .'/modules/edit_module_files.php')) return;
+
+      // check if specified module directory is valid
+      if(check_module_dir($mod_dir) == '') return;
+
+      // do sanity check of specified css file
+      if(!in_array($base_css_file, array('frontend.css', 'backend.css'))) return;
+      
+      // display button to toggle between the two CSS files: frontend.css, backend.css
+      $toggle_file = ($base_css_file == 'frontend.css') ? 'backend.css' : 'frontend.css';
+      if(mod_file_exists($mod_dir, $toggle_file)) {
+         ?>
+         <form name="toggle_module_file" action="<?php echo WB_URL .'/modules/edit_module_files.php?page_id='.$page_id;?>" method="post" style="margin: 0; align:right;">
+            <?php echo $admin->getFTAN();?>
+            <input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+            <input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+            <input type="hidden" name="mod_dir" value="<?php echo $mod_dir; ?>" />
+            <input type="hidden" name="edit_file" value="<?php echo $toggle_file; ?>" />
+            <input type="hidden" name="action" value="edit" />
+            <input type="submit" value="<?php echo ucwords($toggle_file);?>" class="mod_<?php echo $mod_dir;?>_edit_css" />
+         </form>
+         <?php
+      }
+  }
+}
+
+/*
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ FUNCTIONS WHICH CAN BE USED BY MODULE DEVELOPERS FOR OWN MODULES (E.G. VIEW.PHP, MODIFY.PHP)
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+*/ 
+
+// function to obtain the module language file depending on the backend language of the current user
+if (!function_exists('get_module_language_file')) {
+   function get_module_language_file($mymod_dir) {
+      $mymod_dir = strip_tags($mymod_dir);
+      if(file_exists(WB_PATH .'/modules/' .$mymod_dir .'/languages/' .LANGUAGE .'.php')) {
+         // a module language file exists for the users backend language
+         return (WB_PATH .'/modules/' .$mymod_dir .'/languages/' .LANGUAGE .'.php');
+      } else {
+         // an English module language file must exist in all multi-lingual modules
+         if(file_exists(WB_PATH .'/modules/' .$mymod_dir .'/languages/EN.php')) {
+            return (WB_PATH .'/modules/' .$mymod_dir .'/languages/EN.php');
+         } else {
+            echo '<p><strong>Error: </strong>';
+            echo 'Default language file (EN.php) of module "' .htmlentities($mymod_dir) .'" does not exist.</p><br />';
+            return false;
+         }
+      }
+   }
+}
+
+// function to include module CSS files in <body> (only if WB < 2.6.7 or register_frontend_modfiles('css') not invoked in template)
+if (!function_exists('include_module_css')) {
+   function include_module_css($mymod_dir, $css_file) {
+      if(!in_array(strtolower($css_file), array('frontend.css', 'backend.css'))) return;
+      
+      if($css_file == 'frontend.css') {
+         // check if frontend.css needs to be included into the <body> section
+         if(!((!function_exists('register_frontend_modfiles') || !defined('MOD_FRONTEND_CSS_REGISTERED')) &&
+               file_exists(WB_PATH .'/modules/' .$mymod_dir .'/frontend.css'))) {
+            return false;
+         } 
+      } else {
+         // check if backend.css needs to be included into the <body> section
+         global $admin;
+         if(!(!method_exists($admin, 'register_backend_modfiles') && file_exists(WB_PATH .'/modules/' .$mymod_dir .'/backend.css'))) {
+            return false;
+         }
+      }
+      // include frontend.css or backend.css into the <body> section
+      echo "\n".'<style type="text/css">'."\n";
+     include(WB_PATH .'/modules/' .$mymod_dir .'/' .$css_file);
+     echo "\n</style>\n";
+      return true;
+   }
+}
+
+// function to check if the optional module Javascript files are loaded into the <head> section
+if (!function_exists('requires_module_js')) {
+   function requires_module_js($mymod_dir, $js_file) {
+      if(!in_array(strtolower($js_file), array('frontend.js', 'backend.js'))) {
+         echo '<strong>Note: </strong>Javascript file "' .htmlentities($js_file) .'"
+         specified in module "' .htmlentities($mymod_dir) .'" not valid.';
+         return false;
+      }
+
+      if($js_file == 'frontend.js') {
+         // check if frontend.js is included to the <head> section
+         if(!defined('MOD_FRONTEND_JAVASCRIPT_REGISTERED')) {
+            echo '<p><strong>Note:</strong> The module: "' .htmlentities($mymod_dir) .'" requires WB 2.6.7 or higher</p>
+            <p>This module uses Javascript functions contained in frontend.js of the module.<br />
+            Add the code below to the &lt;head&gt; section in the index.php of your template
+            to ensure that module frontend.js files are automatically loaded if required.</p>
+            <code style="color: #800000;">&lt;?php<br />if(function_exists(\'register_frontend_modfiles\')) { <br />
+            &nbsp;&nbsp;register_frontend_modfiles(\'js\');<br />?&gt;</code><br />
+            <p><strong>Tip:</strong> For WB 2.6.7 copy the code above to the index.php of your template.
+            Then open the view.php of the "' .htmlentities($mymod_dir) .'" module and set the variable
+            <code>$requires_frontend_js</code> to false. This may do the trick.</p><p>All WB versions below 2.6.7 needs
+            to be upgraded to work with this module.</p>
+            ';
+            return false;
+         }
+      } else {
+         // check if backend.js is included to the <head> section
+         global $admin;
+            if(!method_exists($admin, 'register_backend_modfiles') && file_exists(WB_PATH .'/modules/' .$mymod_dir .'/backend.js')) {
+            echo '<p><strong>Note:</strong> The module: "' .htmlentities($mymod_dir) .'" requires WB 2.6.7 or higher</p>
+            <p>This module uses Javascript functions contained in backend.js of the module.<br />
+            You need WB 2.6.7 or higher to ensure that module backend.js files are automatically loaded if required.</p>
+            <p>Sorry, you can not use this tool with your WB installation, please upgrade to the latest WB version available.</p><br />
+            ';
+            return false;
+         }
+      }
+      return true;
+   }
+}
+// function to check if the optional module Javascript files are loaded into the <body> section
+if (!function_exists('requires_module_body_js')) {
+   function requires_module_body_js($mymod_dir, $js_file) {
+      if(!in_array(strtolower($js_file), array('frontend_body.js', 'backend_body.js'))) {
+         echo '<strong>Note: </strong>Javascript file "' .htmlentities($js_file) .'"
+         specified in module "' .htmlentities($mymod_dir) .'" not valid.';
+         return false;
+      }
+
+      if($js_file == 'frontend_body.js') {
+         // check if frontend_body.js is included to the <body> section
+         if(!defined('MOD_FRONTEND_BODY_JAVASCRIPT_REGISTERED')) {
+            echo '<p><strong>Note:</strong> The module: "' .htmlentities($mymod_dir) .'" requires WB 2.6.7 or higher</p>
+            <p>This module uses Javascript functions contained in frontend_body.js of the module.<br />
+            Add the code below before to the &lt;/body&gt; section in the index.php of your template
+            to ensure that module frontend_body.js files are automatically loaded if required.</p>
+            <code style="color: #800000;">&lt;?php<br />if(function_exists(\'register_frontend_modfiles_body\')) { <br />
+            &nbsp;&nbsp;register_frontend_modfiles_body(\'js\');<br />?&gt;</code><br />
+            <p><strong>Tip:</strong> For WB 2.6.7 copy the code above to the index.php of your template.
+            Then open the view.php of the "' .htmlentities($mymod_dir) .'" module and set the variable
+            <code>$requires_frontend_body_js</code> to false. This may do the trick.</p><p>All WB versions below 2.6.7 needs
+            to be upgraded to work with this module.</p>
+            ';
+            return false;
+         }
+      } else {
+         // check if backend_body.js is included to the <body> section
+         global $admin;
+            if(!method_exists($admin, 'register_backend_modfiles_body') && file_exists(WB_PATH .'/modules/' .$mymod_dir .'/backend_body.js')) {
+            echo '<p><strong>Note:</strong> The module: "' .htmlentities($mymod_dir) .'" requires WB 2.6.7 or higher</p>
+            <p>This module uses Javascript functions contained in backend_body.js of the module.<br />
+            You need WB 2.6.7 or higher to ensure that module backend_body.js files are automatically loaded if required.</p>
+            <p>Sorry, you can not use this tool with your WB installation, please upgrade to the latest WB version available.</p><br />
+            ';
+            return false;
+         }
+      }
+      return true;
+   }
+}

Property changes on: trunk/framework/module.functions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/htaccess.txt
===================================================================
--- trunk/htaccess.txt	(nonexistent)
+++ trunk/htaccess.txt	(revision 2)
@@ -0,0 +1,10 @@
+# Example .htaccess wich allows to parse .html as php
+# AddType application/x-httpd-php .html
+# 
+# 
+ErrorDocument 404 http://www.domain.de/index.php
+RewriteEngine On
+RewriteCond %{HTTP_HOST} ^([^.]+).(de)
+RewriteRule ^(.*) http://www.%1.%2/$1 [R=301,L]
+RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(html?|php)\ HTTP/
+RewriteRule ^index\.(html?|php)$ http://www.domain.de/ [R=301,L]
\ No newline at end of file
Index: trunk/include/Sensio/Twig/CHANGELOG
===================================================================
--- trunk/include/Sensio/Twig/CHANGELOG	(nonexistent)
+++ trunk/include/Sensio/Twig/CHANGELOG	(revision 2)
@@ -0,0 +1,828 @@
+* 1.24.0 (2016-01-25)
+
+ * adding support for the ?? operator
+ * fixed the defined test when used on a constant, a map, or a sequence
+ * undeprecated _self (should only be used to get the template name, not the template instance)
+ * fixed parsing on PHP7
+
+* 1.23.3 (2016-01-11)
+
+ * fixed typo
+
+* 1.23.2 (2015-01-11)
+
+ * added versions in deprecated messages
+ * made file cache tolerant for trailing (back)slashes on directory configuration
+ * deprecated unused Twig_Node_Expression_ExtensionReference class
+
+* 1.23.1 (2015-11-05)
+
+ * fixed some exception messages which triggered PHP warnings
+ * fixed BC on Twig_Test_NodeTestCase
+
+* 1.23.0 (2015-10-29)
+
+ * deprecated the possibility to override an extension by registering another one with the same name
+ * deprecated Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC)
+ * deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC)
+ * deprecated Twig_Environment::computeAlternatives()
+
+* 1.22.3 (2015-10-13)
+
+ * fixed regression when using null as a cache strategy
+ * improved performance when checking template freshness
+ * fixed warnings when loaded templates do not exist
+ * fixed template class name generation to prevent possible collisions
+ * fixed logic for custom escapers to call them even on integers and null values
+ * changed template cache names to take into account the Twig C extension
+
+* 1.22.2 (2015-09-22)
+
+ * fixed a race condition in template loading
+
+* 1.22.1 (2015-09-15)
+
+ * fixed regression in template_from_string
+
+* 1.22.0 (2015-09-13)
+
+ * made Twig_Test_IntegrationTestCase more flexible
+ * added an option to force PHP bytecode invalidation when writing a compiled template into the cache
+ * fixed the profiler duration for the root node
+ * changed template cache names to take into account enabled extensions
+ * deprecated Twig_Environment::clearCacheFiles(), Twig_Environment::getCacheFilename(),
+   Twig_Environment::writeCacheFile(), and Twig_Environment::getTemplateClassPrefix()
+ * added a way to override the filesystem template cache system
+ * added a way to get the original template source from Twig_Template
+
+* 1.21.2 (2015-09-09)
+
+ * fixed variable names for the deprecation triggering code
+ * fixed escaping strategy detection based on filename
+ * added Traversable support for replace, merge, and sort
+ * deprecated support for character by character replacement for the "replace" filter
+
+* 1.21.1 (2015-08-26)
+
+ * fixed regression when using the deprecated Twig_Test_* classes
+
+* 1.21.0 (2015-08-24)
+
+ * added deprecation notices for deprecated features
+ * added a deprecation "framework" for filters/functions/tests and test fixtures
+
+* 1.20.0 (2015-08-12)
+
+ * forbid access to the Twig environment from templates and internal parts of Twig_Template
+ * fixed limited RCEs when in sandbox mode
+ * deprecated Twig_Template::getEnvironment()
+ * deprecated the _self variable for usage outside of the from and import tags
+ * added Twig_BaseNodeVisitor to ease the compatibility of node visitors 
+   between 1.x and 2.x
+
+* 1.19.0 (2015-07-31)
+
+ * fixed wrong error message when including an undefined template in a child template
+ * added support for variadic filters, functions, and tests
+ * added support for extra positional arguments in macros
+ * added ignore_missing flag to the source function
+ * fixed batch filter with zero items
+ * deprecated Twig_Environment::clearTemplateCache()
+ * fixed sandbox disabling when using the include function
+
+* 1.18.2 (2015-06-06)
+
+ * fixed template/line guessing in exceptions for nested templates
+ * optimized the number of inodes and the size of realpath cache when using the cache
+
+* 1.18.1 (2015-04-19)
+
+ * fixed memory leaks in the C extension
+ * deprecated Twig_Loader_String
+ * fixed the slice filter when used with a SimpleXMLElement object
+ * fixed filesystem loader when trying to load non-files (like directories)
+
+* 1.18.0 (2015-01-25)
+
+ * fixed some error messages where the line was wrong (unknown variables or argument names)
+ * added a new way to customize the main Module node (via empty nodes)
+ * added Twig_Environment::createTemplate() to create a template from a string
+ * added a profiler
+ * fixed filesystem loader cache when different file paths are used for the same template
+
+* 1.17.0 (2015-01-14)
+
+ * added a 'filename' autoescaping strategy, which dynamically chooses the
+   autoescaping strategy for a template based on template file extension.
+
+* 1.16.3 (2014-12-25)
+
+ * fixed regression for dynamic parent templates
+ * fixed cache management with statcache
+ * fixed a regression in the slice filter
+
+* 1.16.2 (2014-10-17)
+
+ * fixed timezone on dates as strings
+ * fixed 2-words test names when a custom node class is not used
+ * fixed macros when using an argument named like a PHP super global (like GET or POST)
+ * fixed date_modify when working with DateTimeImmutable
+ * optimized for loops
+ * fixed multi-byte characters handling in the split filter
+ * fixed a regression in the in operator
+ * fixed a regression in the slice filter
+
+* 1.16.1 (2014-10-10)
+
+ * improved error reporting in a sandboxed template
+ * fixed missing error file/line information under certain circumstances
+ * fixed wrong error line number in some error messages
+ * fixed the in operator to use strict comparisons
+ * sped up the slice filter
+ * fixed for mb function overload mb_substr acting different
+ * fixed the attribute() function when passing a variable for the arguments
+
+* 1.16.0 (2014-07-05)
+
+ * changed url_encode to always encode according to RFC 3986
+ * fixed inheritance in a 'use'-hierarchy
+ * removed the __toString policy check when the sandbox is disabled
+ * fixed recursively calling blocks in templates with inheritance
+
+* 1.15.1 (2014-02-13)
+
+ * fixed the conversion of the special '0000-00-00 00:00' date
+ * added an error message when trying to import an undefined block from a trait
+ * fixed a C extension crash when accessing defined but uninitialized property.
+
+* 1.15.0 (2013-12-06)
+
+ * made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException
+ * added min and max functions
+ * added the round filter
+ * fixed a bug that prevented the optimizers to be enabled/disabled selectively
+ * fixed first and last filters for UTF-8 strings
+ * added a source function to include the content of a template without rendering it
+ * fixed the C extension sandbox behavior when get or set is prepend to method name
+
+* 1.14.2 (2013-10-30)
+
+ * fixed error filename/line when an error occurs in an included file
+ * allowed operators that contain whitespaces to have more than one whitespace
+ * allowed tests to be made of 1 or 2 words (like "same as" or "divisible by")
+
+* 1.14.1 (2013-10-15)
+
+ * made it possible to use named operators as variables
+ * fixed the possibility to have a variable named 'matches'
+ * added support for PHP 5.5 DateTimeInterface
+
+* 1.14.0 (2013-10-03)
+
+ * fixed usage of the html_attr escaping strategy to avoid double-escaping with the html strategy
+ * added new operators: ends with, starts with, and matches
+ * fixed some compatibility issues with HHVM
+ * added a way to add custom escaping strategies
+ * fixed the C extension compilation on Windows
+ * fixed the batch filter when using a fill argument with an exact match of elements to batch
+ * fixed the filesystem loader cache when a template name exists in several namespaces
+ * fixed template_from_string when the template includes or extends other ones
+ * fixed a crash of the C extension on an edge case
+
+* 1.13.2 (2013-08-03)
+
+ * fixed the error line number for an error occurs in and embedded template
+ * fixed crashes of the C extension on some edge cases
+
+* 1.13.1 (2013-06-06)
+
+ * added the possibility to ignore the filesystem constructor argument in Twig_Loader_Filesystem
+ * fixed Twig_Loader_Chain::exists() for a loader which implements Twig_ExistsLoaderInterface
+ * adjusted backtrace call to reduce memory usage when an error occurs
+ * added support for object instances as the second argument of the constant test
+ * fixed the include function when used in an assignment
+
+* 1.13.0 (2013-05-10)
+
+ * fixed getting a numeric-like item on a variable ('09' for instance)
+ * fixed getting a boolean or float key on an array, so it is consistent with PHP's array access:
+   `{{ array[false] }}` behaves the same as `echo $array[false];` (equals `$array[0]`)
+ * made the escape filter 20% faster for happy path (escaping string for html with UTF-8)
+ * changed ☃ to § in tests
+ * enforced usage of named arguments after positional ones
+
+* 1.12.3 (2013-04-08)
+
+ * fixed a security issue in the filesystem loader where it was possible to include a template one
+   level above the configured path
+ * fixed fatal error that should be an exception when adding a filter/function/test too late
+ * added a batch filter
+ * added support for encoding an array as query string in the url_encode filter
+
+* 1.12.2 (2013-02-09)
+
+ * fixed the timezone used by the date filter and function when the given date contains a timezone (like 2010-01-28T15:00:00+02:00)
+ * fixed globals when getGlobals is called early on
+ * added the first and last filter
+
+* 1.12.1 (2013-01-15)
+
+ * added support for object instances as the second argument of the constant function
+ * relaxed globals management to avoid a BC break
+ * added support for {{ some_string[:2] }}
+
+* 1.12.0 (2013-01-08)
+
+ * added verbatim as an alias for the raw tag to avoid confusion with the raw filter
+ * fixed registration of tests and functions as anonymous functions
+ * fixed globals management
+
+* 1.12.0-RC1 (2012-12-29)
+
+ * added an include function (does the same as the include tag but in a more flexible way)
+ * added the ability to use any PHP callable to define filters, functions, and tests
+ * added a syntax error when using a loop variable that is not defined
+ * added the ability to set default values for macro arguments
+ * added support for named arguments for filters, tests, and functions
+ * moved filters/functions/tests syntax errors to the parser
+ * added support for extended ternary operator syntaxes
+
+* 1.11.1 (2012-11-11)
+
+ * fixed debug info line numbering (was off by 2)
+ * fixed escaping when calling a macro inside another one (regression introduced in 1.9.1)
+ * optimized variable access on PHP 5.4
+ * fixed a crash of the C extension when an exception was thrown from a macro called without being imported (using _self.XXX)
+
+* 1.11.0 (2012-11-07)
+
+ * fixed macro compilation when a variable name is a PHP reserved keyword
+ * changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
+ * fixed bitwise operator precedences
+ * added the template_from_string function
+ * fixed default timezone usage for the date function
+ * optimized the way Twig exceptions are managed (to make them faster)
+ * added Twig_ExistsLoaderInterface (implementing this interface in your loader make the chain loader much faster)
+
+* 1.10.3 (2012-10-19)
+
+ * fixed wrong template location in some error messages
+ * reverted a BC break introduced in 1.10.2
+ * added a split filter
+
+* 1.10.2 (2012-10-15)
+
+ * fixed macro calls on PHP 5.4
+
+* 1.10.1 (2012-10-15)
+
+ * made a speed optimization to macro calls when imported via the "import" tag
+ * fixed C extension compilation on Windows
+ * fixed a segfault in the C extension when using DateTime objects
+
+* 1.10.0 (2012-09-28)
+
+ * extracted functional tests framework to make it reusable for third-party extensions
+ * added namespaced templates support in Twig_Loader_Filesystem
+ * added Twig_Loader_Filesystem::prependPath()
+ * fixed an error when a token parser pass a closure as a test to the subparse() method
+
+* 1.9.2 (2012-08-25)
+
+ * fixed the in operator for objects that contain circular references
+ * fixed the C extension when accessing a public property of an object implementing the \ArrayAccess interface
+
+* 1.9.1 (2012-07-22)
+
+ * optimized macro calls when auto-escaping is on
+ * fixed wrong parent class for Twig_Function_Node
+ * made Twig_Loader_Chain more explicit about problems
+
+* 1.9.0 (2012-07-13)
+
+ * made the parsing independent of the template loaders
+ * fixed exception trace when an error occurs when rendering a child template
+ * added escaping strategies for CSS, URL, and HTML attributes
+ * fixed nested embed tag calls
+ * added the date_modify filter
+
+* 1.8.3 (2012-06-17)
+
+ * fixed paths in the filesystem loader when passing a path that ends with a slash or a backslash
+ * fixed escaping when a project defines a function named html or js
+ * fixed chmod mode to apply the umask correctly
+
+* 1.8.2 (2012-05-30)
+
+ * added the abs filter
+ * fixed a regression when using a number in template attributes
+ * fixed compiler when mbstring.func_overload is set to 2
+ * fixed DateTimeZone support in date filter
+
+* 1.8.1 (2012-05-17)
+
+ * fixed a regression when dealing with SimpleXMLElement instances in templates
+ * fixed "is_safe" value for the "dump" function when "html_errors" is not defined in php.ini
+ * switched to use mbstring whenever possible instead of iconv (you might need to update your encoding as mbstring and iconv encoding names sometimes differ)
+
+* 1.8.0 (2012-05-08)
+
+ * enforced interface when adding tests, filters, functions, and node visitors from extensions
+ * fixed a side-effect of the date filter where the timezone might be changed
+ * simplified usage of the autoescape tag; the only (optional) argument is now the escaping strategy or false (with a BC layer)
+ * added a way to dynamically change the auto-escaping strategy according to the template "filename"
+ * changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html)
+ * added an embed tag
+
+* 1.7.0 (2012-04-24)
+
+ * fixed a PHP warning when using CIFS
+ * fixed template line number in some exceptions
+ * added an iterable test
+ * added an error when defining two blocks with the same name in a template
+ * added the preserves_safety option for filters
+ * fixed a PHP notice when trying to access a key on a non-object/array variable
+ * enhanced error reporting when the template file is an instance of SplFileInfo
+ * added Twig_Environment::mergeGlobals()
+ * added compilation checks to avoid misuses of the sandbox tag
+ * fixed filesystem loader freshness logic for high traffic websites
+ * fixed random function when charset is null
+
+* 1.6.5 (2012-04-11)
+
+ * fixed a regression when a template only extends another one without defining any blocks
+
+* 1.6.4 (2012-04-02)
+
+ * fixed PHP notice in Twig_Error::guessTemplateLine() introduced in 1.6.3
+ * fixed performance when compiling large files
+ * optimized parent template creation when the template does not use dynamic inheritance
+
+* 1.6.3 (2012-03-22)
+
+ * fixed usage of Z_ADDREF_P for PHP 5.2 in the C extension
+ * fixed compilation of numeric values used in templates when using a locale where the decimal separator is not a dot
+ * made the strategy used to guess the real template file name and line number in exception messages much faster and more accurate
+
+* 1.6.2 (2012-03-18)
+
+ * fixed sandbox mode when used with inheritance
+ * added preserveKeys support for the slice filter
+ * fixed the date filter when a DateTime instance is passed with a specific timezone
+ * added a trim filter
+
+* 1.6.1 (2012-02-29)
+
+ * fixed Twig C extension
+ * removed the creation of Twig_Markup instances when not needed
+ * added a way to set the default global timezone for dates
+ * fixed the slice filter on strings when the length is not specified
+ * fixed the creation of the cache directory in case of a race condition
+
+* 1.6.0 (2012-02-04)
+
+ * fixed raw blocks when used with the whitespace trim option
+ * made a speed optimization to macro calls when imported via the "from" tag
+ * fixed globals, parsers, visitors, filters, tests, and functions management in Twig_Environment when a new one or new extension is added
+ * fixed the attribute function when passing arguments
+ * added slice notation support for the [] operator (syntactic sugar for the slice operator)
+ * added a slice filter
+ * added string support for the reverse filter
+ * fixed the empty test and the length filter for Twig_Markup instances
+ * added a date function to ease date comparison
+ * fixed unary operators precedence
+ * added recursive parsing support in the parser
+ * added string and integer handling for the random function
+
+* 1.5.1 (2012-01-05)
+
+ * fixed a regression when parsing strings
+
+* 1.5.0 (2012-01-04)
+
+ * added Traversable objects support for the join filter
+
+* 1.5.0-RC2 (2011-12-30)
+
+ * added a way to set the default global date interval format
+ * fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
+ * refactored Twig_Template::display() to ease its extension
+ * added a number_format filter
+
+* 1.5.0-RC1 (2011-12-26)
+
+ * removed the need to quote hash keys
+ * allowed hash keys to be any expression
+ * added a do tag
+ * added a flush tag
+ * added support for dynamically named filters and functions
+ * added a dump function to help debugging templates
+ * added a nl2br filter
+ * added a random function
+ * added a way to change the default format for the date filter
+ * fixed the lexer when an operator ending with a letter ends a line
+ * added string interpolation support
+ * enhanced exceptions for unknown filters, functions, tests, and tags
+
+* 1.4.0 (2011-12-07)
+
+ * fixed lexer when using big numbers (> PHP_INT_MAX)
+ * added missing preserveKeys argument to the reverse filter
+ * fixed macros containing filter tag calls
+
+* 1.4.0-RC2 (2011-11-27)
+
+ * removed usage of Reflection in Twig_Template::getAttribute()
+ * added a C extension that can optionally replace Twig_Template::getAttribute()
+ * added negative timestamp support to the date filter
+
+* 1.4.0-RC1 (2011-11-20)
+
+ * optimized variable access when using PHP 5.4
+ * changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby
+ * added an Exception to Twig_Loader_Array::isFresh() method when the template does not exist to be consistent with other loaders
+ * added Twig_Function_Node to allow more complex functions to have their own Node class
+ * added Twig_Filter_Node to allow more complex filters to have their own Node class
+ * added Twig_Test_Node to allow more complex tests to have their own Node class
+ * added a better error message when a template is empty but contain a BOM
+ * fixed "in" operator for empty strings
+ * fixed the "defined" test and the "default" filter (now works with more than one call (foo.bar.foo) and for both values of the strict_variables option)
+ * changed the way extensions are loaded (addFilter/addFunction/addGlobal/addTest/addNodeVisitor/addTokenParser/addExtension can now be called in any order)
+ * added Twig_Environment::display()
+ * made the escape filter smarter when the encoding is not supported by PHP
+ * added a convert_encoding filter
+ * moved all node manipulations outside the compile() Node method
+ * made several speed optimizations
+
+* 1.3.0 (2011-10-08)
+
+no changes
+
+* 1.3.0-RC1 (2011-10-04)
+
+ * added an optimization for the parent() function
+ * added cache reloading when auto_reload is true and an extension has been modified
+ * added the possibility to force the escaping of a string already marked as safe (instance of Twig_Markup)
+ * allowed empty templates to be used as traits
+ * added traits support for the "parent" function
+
+* 1.2.0 (2011-09-13)
+
+no changes
+
+* 1.2.0-RC1 (2011-09-10)
+
+ * enhanced the exception when a tag remains unclosed
+ * added support for empty Countable objects for the "empty" test
+ * fixed algorithm that determines if a template using inheritance is valid (no output between block definitions)
+ * added better support for encoding problems when escaping a string (available as of PHP 5.4)
+ * added a way to ignore a missing template when using the "include" tag ({% include "foo" ignore missing %})
+ * added support for an array of templates to the "include" and "extends" tags ({% include ['foo', 'bar'] %})
+ * added support for bitwise operators in expressions
+ * added the "attribute" function to allow getting dynamic attributes on variables
+ * added Twig_Loader_Chain
+ * added Twig_Loader_Array::setTemplate()
+ * added an optimization for the set tag when used to capture a large chunk of static text
+ * changed name regex to match PHP one "[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*" (works for blocks, tags, functions, filters, and macros)
+ * removed the possibility to use the "extends" tag from a block
+ * added "if" modifier support to "for" loops
+
+* 1.1.2 (2011-07-30)
+
+ * fixed json_encode filter on PHP 5.2
+ * fixed regression introduced in 1.1.1 ({{ block(foo|lower) }})
+ * fixed inheritance when using conditional parents
+ * fixed compilation of templates when the body of a child template is not empty
+ * fixed output when a macro throws an exception
+ * fixed a parsing problem when a large chunk of text is enclosed in a comment tag
+ * added PHPDoc for all Token parsers and Core extension functions
+
+* 1.1.1 (2011-07-17)
+
+ * added a performance optimization in the Optimizer (also helps to lower the number of nested level calls)
+ * made some performance improvement for some edge cases
+
+* 1.1.0 (2011-06-28)
+
+ * fixed json_encode filter
+
+* 1.1.0-RC3 (2011-06-24)
+
+ * fixed method case-sensitivity when using the sandbox mode
+ * added timezone support for the date filter
+ * fixed possible security problems with NUL bytes
+
+* 1.1.0-RC2 (2011-06-16)
+
+ * added an exception when the template passed to "use" is not a string
+ * made 'a.b is defined' not throw an exception if a is not defined (in strict mode)
+ * added {% line \d+ %} directive
+
+* 1.1.0-RC1 (2011-05-28)
+
+Flush your cache after upgrading.
+
+ * fixed date filter when using a timestamp
+ * fixed the defined test for some cases
+ * fixed a parsing problem when a large chunk of text is enclosed in a raw tag
+ * added support for horizontal reuse of template blocks (see docs for more information)
+ * added whitespace control modifier to all tags (see docs for more information)
+ * added null as an alias for none (the null test is also an alias for the none test now)
+ * made TRUE, FALSE, NONE equivalent to their lowercase counterparts
+ * wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line
+ * moved display() method to Twig_Template (generated templates should now use doDisplay() instead)
+
+* 1.0.0 (2011-03-27)
+
+ * fixed output when using mbstring
+ * fixed duplicate call of methods when using the sandbox
+ * made the charset configurable for the escape filter
+
+* 1.0.0-RC2 (2011-02-21)
+
+ * changed the way {% set %} works when capturing (the content is now marked as safe)
+ * added support for macro name in the endmacro tag
+ * make Twig_Error compatible with PHP 5.3.0 >
+ * fixed an infinite loop on some Windows configurations
+ * fixed the "length" filter for numbers
+ * fixed Template::getAttribute() as properties in PHP are case sensitive
+ * removed coupling between Twig_Node and Twig_Template
+ * fixed the ternary operator precedence rule
+
+* 1.0.0-RC1 (2011-01-09)
+
+Backward incompatibilities:
+
+ * the "items" filter, which has been deprecated for quite a long time now, has been removed
+ * the "range" filter has been converted to a function: 0|range(10) -> range(0, 10)
+ * the "constant" filter has been converted to a function: {{ some_date|date('DATE_W3C'|constant) }} -> {{ some_date|date(constant('DATE_W3C')) }}
+ * the "cycle" filter has been converted to a function: {{ ['odd', 'even']|cycle(i) }} -> {{ cycle(['odd', 'even'], i) }}
+ * the "for" tag does not support "joined by" anymore
+ * the "autoescape" first argument is now "true"/"false" (instead of "on"/"off")
+ * the "parent" tag has been replaced by a "parent" function ({{ parent() }} instead of {% parent %})
+ * the "display" tag has been replaced by a "block" function ({{ block('title') }} instead of {% display title %})
+ * removed the grammar and simple token parser (moved to the Twig Extensions repository)
+
+Changes:
+
+ * added "needs_context" option for filters and functions (the context is then passed as a first argument)
+ * added global variables support
+ * made macros return their value instead of echoing directly (fixes calling a macro in sandbox mode)
+ * added the "from" tag to import macros as functions
+ * added support for functions (a function is just syntactic sugar for a getAttribute() call)
+ * made macros callable when sandbox mode is enabled
+ * added an exception when a macro uses a reserved name
+ * the "default" filter now uses the "empty" test instead of just checking for null
+ * added the "empty" test
+
+* 0.9.10 (2010-12-16)
+
+Backward incompatibilities:
+
+ * The Escaper extension is enabled by default, which means that all displayed
+   variables are now automatically escaped. You can revert to the previous
+   behavior by removing the extension via $env->removeExtension('escaper')
+   or just set the 'autoescape' option to 'false'.
+ * removed the "without loop" attribute for the "for" tag (not needed anymore
+   as the Optimizer take care of that for most cases)
+ * arrays and hashes have now a different syntax
+     * arrays keep the same syntax with square brackets: [1, 2]
+     * hashes now use curly braces (["a": "b"] should now be written as {"a": "b"})
+     * support for "arrays with keys" and "hashes without keys" is not supported anymore ([1, "foo": "bar"] or {"foo": "bar", 1})
+ * the i18n extension is now part of the Twig Extensions repository
+
+Changes:
+
+ * added the merge filter
+ * removed 'is_escaper' option for filters (a left over from the previous version) -- you must use 'is_safe' now instead
+ * fixed usage of operators as method names (like is, in, and not)
+ * changed the order of execution for node visitors
+ * fixed default() filter behavior when used with strict_variables set to on
+ * fixed filesystem loader compatibility with PHAR files
+ * enhanced error messages when an unexpected token is parsed in an expression
+ * fixed filename not being added to syntax error messages
+ * added the autoescape option to enable/disable autoescaping
+ * removed the newline after a comment (mimics PHP behavior)
+ * added a syntax error exception when parent block is used on a template that does not extend another one
+ * made the Escaper extension enabled by default
+ * fixed sandbox extension when used with auto output escaping
+ * fixed escaper when wrapping a Twig_Node_Print (the original class must be preserved)
+ * added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters)
+ * added priority to node visitors
+
+* 0.9.9 (2010-11-28)
+
+Backward incompatibilities:
+ * the self special variable has been renamed to _self
+ * the odd and even filters are now tests:
+     {{ foo|odd }} must now be written {{ foo is odd }}
+ * the "safe" filter has been renamed to "raw"
+ * in Node classes,
+        sub-nodes are now accessed via getNode() (instead of property access)
+        attributes via getAttribute() (instead of array access)
+ * the urlencode filter had been renamed to url_encode
+ * the include tag now merges the passed variables with the current context by default
+   (the old behavior is still possible by adding the "only" keyword)
+ * moved Exceptions to Twig_Error_* (Twig_SyntaxError/Twig_RuntimeError are now Twig_Error_Syntax/Twig_Error_Runtime)
+ * removed support for {{ 1 < i < 3 }} (use {{ i > 1 and i < 3 }} instead)
+ * the "in" filter has been removed ({{ a|in(b) }} should now be written {{ a in b }})
+
+Changes:
+ * added file and line to Twig_Error_Runtime exceptions thrown from Twig_Template
+ * changed trans tag to accept any variable for the plural count
+ * fixed sandbox mode (__toString() method check was not enforced if called implicitly from complex statements)
+ * added the ** (power) operator
+ * changed the algorithm used for parsing expressions
+ * added the spaceless tag
+ * removed trim_blocks option
+ * added support for is*() methods for attributes (foo.bar now looks for foo->getBar() or foo->isBar())
+ * changed all exceptions to extend Twig_Error
+ * fixed unary expressions ({{ not(1 or 0) }})
+ * fixed child templates (with an extend tag) that uses one or more imports
+ * added support for {{ 1 not in [2, 3] }} (more readable than the current {{ not (1 in [2, 3]) }})
+ * escaping has been rewritten
+ * the implementation of template inheritance has been rewritten
+   (blocks can now be called individually and still work with inheritance)
+ * fixed error handling for if tag when a syntax error occurs within a subparse process
+ * added a way to implement custom logic for resolving token parsers given a tag name
+ * fixed js escaper to be stricter (now uses a whilelist-based js escaper)
+ * added the following filers: "constant", "trans", "replace", "json_encode"
+ * added a "constant" test
+ * fixed objects with __toString() not being autoescaped
+ * fixed subscript expressions when calling __call() (methods now keep the case)
+ * added "test" feature (accessible via the "is" operator)
+ * removed the debug tag (should be done in an extension)
+ * fixed trans tag when no vars are used in plural form
+ * fixed race condition when writing template cache
+ * added the special _charset variable to reference the current charset
+ * added the special _context variable to reference the current context
+ * renamed self to _self (to avoid conflict)
+ * fixed Twig_Template::getAttribute() for protected properties
+
+* 0.9.8 (2010-06-28)
+
+Backward incompatibilities:
+ * the trans tag plural count is now attached to the plural tag:
+    old: `{% trans count %}...{% plural %}...{% endtrans %}`
+    new: `{% trans %}...{% plural count %}...{% endtrans %}`
+
+ * added a way to translate strings coming from a variable ({% trans var %})
+ * fixed trans tag when used with the Escaper extension
+ * fixed default cache umask
+ * removed Twig_Template instances from the debug tag output
+ * fixed objects with __isset() defined
+ * fixed set tag when used with a capture
+ * fixed type hinting for Twig_Environment::addFilter() method
+
+* 0.9.7 (2010-06-12)
+
+Backward incompatibilities:
+ * changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %})
+ * removed the sandboxed attribute of the include tag (use the new sandbox tag instead)
+ * refactored the Node system (if you have custom nodes, you will have to update them to use the new API)
+
+ * added self as a special variable that refers to the current template (useful for importing macros from the current template)
+ * added Twig_Template instance support to the include tag
+ * added support for dynamic and conditional inheritance ({% extends some_var %} and {% extends standalone ? "minimum" : "base" %})
+ * added a grammar sub-framework to ease the creation of custom tags
+ * fixed the for tag for large arrays (some loop variables are now only available for arrays and objects that implement the Countable interface)
+ * removed the Twig_Resource::resolveMissingFilter() method
+ * fixed the filter tag which did not apply filtering to included files
+ * added a bunch of unit tests
+ * added a bunch of phpdoc
+ * added a sandbox tag in the sandbox extension
+ * changed the date filter to support any date format supported by DateTime
+ * added strict_variable setting to throw an exception when an invalid variable is used in a template (disabled by default)
+ * added the lexer, parser, and compiler as arguments to the Twig_Environment constructor
+ * changed the cache option to only accepts an explicit path to a cache directory or false
+ * added a way to add token parsers, filters, and visitors without creating an extension
+ * added three interfaces: Twig_NodeInterface, Twig_TokenParserInterface, and Twig_FilterInterface
+ * changed the generated code to match the new coding standards
+ * fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }})
+ * added an exception when a child template has a non-empty body (as it is always ignored when rendering)
+
+* 0.9.6 (2010-05-12)
+
+ * fixed variables defined outside a loop and for which the value changes in a for loop
+ * fixed the test suite for PHP 5.2 and older versions of PHPUnit
+ * added support for __call() in expression resolution
+ * fixed node visiting for macros (macros are now visited by visitors as any other node)
+ * fixed nested block definitions with a parent call (rarely useful but nonetheless supported now)
+ * added the cycle filter
+ * fixed the Lexer when mbstring.func_overload is used with an mbstring.internal_encoding different from ASCII
+ * added a long-syntax for the set tag ({% set foo %}...{% endset %})
+ * unit tests are now powered by PHPUnit
+ * added support for gettext via the `i18n` extension
+ * fixed twig_capitalize_string_filter() and fixed twig_length_filter() when used with UTF-8 values
+ * added a more useful exception if an if tag is not closed properly
+ * added support for escaping strategy in the autoescape tag
+ * fixed lexer when a template has a big chunk of text between/in a block
+
+* 0.9.5 (2010-01-20)
+
+As for any new release, don't forget to remove all cached templates after
+upgrading.
+
+If you have defined custom filters, you MUST upgrade them for this release. To
+upgrade, replace "array" with "new Twig_Filter_Function", and replace the
+environment constant by the "needs_environment" option:
+
+  // before
+  'even'   => array('twig_is_even_filter', false),
+  'escape' => array('twig_escape_filter', true),
+
+  // after
+  'even'   => new Twig_Filter_Function('twig_is_even_filter'),
+  'escape' => new Twig_Filter_Function('twig_escape_filter', array('needs_environment' => true)),
+
+If you have created NodeTransformer classes, you will need to upgrade them to
+the new interface (please note that the interface is not yet considered
+stable).
+
+ * fixed list nodes that did not extend the Twig_NodeListInterface
+ * added the "without loop" option to the for tag (it disables the generation of the loop variable)
+ * refactored node transformers to node visitors
+ * fixed automatic-escaping for blocks
+ * added a way to specify variables to pass to an included template
+ * changed the automatic-escaping rules to be more sensible and more configurable in custom filters (the documentation lists all the rules)
+ * improved the filter system to allow object methods to be used as filters
+ * changed the Array and String loaders to actually make use of the cache mechanism
+ * included the default filter function definitions in the extension class files directly (Core, Escaper)
+ * added the // operator (like the floor() PHP function)
+ * added the .. operator (as a syntactic sugar for the range filter when the step is 1)
+ * added the in operator (as a syntactic sugar for the in filter)
+ * added the following filters in the Core extension: in, range
+ * added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes)
+ * enhanced some error messages to provide better feedback in case of parsing errors
+
+* 0.9.4 (2009-12-02)
+
+If you have custom loaders, you MUST upgrade them for this release: The
+Twig_Loader base class has been removed, and the Twig_LoaderInterface has also
+been changed (see the source code for more information or the documentation).
+
+ * added support for DateTime instances for the date filter
+ * fixed loop.last when the array only has one item
+ * made it possible to insert newlines in tag and variable blocks
+ * fixed a bug when a literal '\n' were present in a template text
+ * fixed bug when the filename of a template contains */
+ * refactored loaders
+
+* 0.9.3 (2009-11-11)
+
+This release is NOT backward compatible with the previous releases.
+
+  The loaders do not take the cache and autoReload arguments anymore. Instead,
+  the Twig_Environment class has two new options: cache and auto_reload.
+  Upgrading your code means changing this kind of code:
+
+      $loader = new Twig_Loader_Filesystem('/path/to/templates', '/path/to/compilation_cache', true);
+      $twig = new Twig_Environment($loader);
+
+  to something like this:
+
+      $loader = new Twig_Loader_Filesystem('/path/to/templates');
+      $twig = new Twig_Environment($loader, array(
+        'cache' => '/path/to/compilation_cache',
+        'auto_reload' => true,
+      ));
+
+ * deprecated the "items" filter as it is not needed anymore
+ * made cache and auto_reload options of Twig_Environment instead of arguments of Twig_Loader
+ * optimized template loading speed
+ * removed output when an error occurs in a template and render() is used
+ * made major speed improvements for loops (up to 300% on even the smallest loops)
+ * added properties as part of the sandbox mode
+ * added public properties support (obj.item can now be the item property on the obj object)
+ * extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} )
+ * fixed bug when \ was used in HTML
+
+* 0.9.2 (2009-10-29)
+
+ * made some speed optimizations
+ * changed the cache extension to .php
+ * added a js escaping strategy
+ * added support for short block tag
+ * changed the filter tag to allow chained filters
+ * made lexer more flexible as you can now change the default delimiters
+ * added set tag
+ * changed default directory permission when cache dir does not exist (more secure)
+ * added macro support
+ * changed filters first optional argument to be a Twig_Environment instance instead of a Twig_Template instance
+ * made Twig_Autoloader::autoload() a static method
+ * avoid writing template file if an error occurs
+ * added $ escaping when outputting raw strings
+ * enhanced some error messages to ease debugging
+ * fixed empty cache files when the template contains an error
+
+* 0.9.1 (2009-10-14)
+
+  * fixed a bug in PHP 5.2.6
+  * fixed numbers with one than one decimal
+  * added support for method calls with arguments ({{ foo.bar('a', 43) }})
+  * made small speed optimizations
+  * made minor tweaks to allow better extensibility and flexibility
+
+* 0.9.0 (2009-10-12)
+
+ * Initial release
Index: trunk/include/Sensio/Twig/LICENSE
===================================================================
--- trunk/include/Sensio/Twig/LICENSE	(nonexistent)
+++ trunk/include/Sensio/Twig/LICENSE	(revision 2)
@@ -0,0 +1,31 @@
+Copyright (c) 2009-2016 by the Twig Team.
+
+Some rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * 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.
+
+    * The names of the contributors may not be used to endorse or
+      promote products derived from this software without specific
+      prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"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 COPYRIGHT
+OWNER OR CONTRIBUTORS 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.
Index: trunk/include/Sensio/Twig/README.rst
===================================================================
--- trunk/include/Sensio/Twig/README.rst	(nonexistent)
+++ trunk/include/Sensio/Twig/README.rst	(revision 2)
@@ -0,0 +1,15 @@
+Twig, the flexible, fast, and secure template language for PHP
+==============================================================
+
+Twig is a template language for PHP, released under the new BSD license (code
+and documentation).
+
+Twig uses a syntax similar to the Django and Jinja template languages which
+inspired the Twig runtime environment.
+
+More Information
+----------------
+
+Read the `documentation`_ for more information.
+
+.. _documentation: http://twig.sensiolabs.org/documentation
Index: trunk/include/Sensio/Twig/lib/Twig/Autoloader.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Autoloader.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Autoloader.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+//@trigger_error('The Twig_Autoloader class is deprecated since version 1.21 and will be removed in 2.0. Use Composer instead.', E_USER_DEPRECATED);
+
+/**
+ * Autoloads Twig classes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.21 and will be removed in 2.0. Use Composer instead. 2.0.
+ */
+class Twig_Autoloader
+{
+    /**
+     * Registers Twig_Autoloader as an SPL autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not.
+     */
+    public static function register($prepend = false)
+    {
+//        @trigger_error('Using Twig_Autoloader is deprecated since version 1.21. Use Composer instead.', E_USER_DEPRECATED);
+
+        if (PHP_VERSION_ID < 50300) {
+            spl_autoload_register(array(__CLASS__, 'autoload'));
+        } else {
+            spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
+        }
+    }
+
+    /**
+     * Handles autoloading of classes.
+     *
+     * @param string $class A class name.
+     */
+    public static function autoload($class)
+    {
+        if (0 !== strpos($class, 'Twig')) {
+            return;
+        }
+
+        if (is_file($file = dirname(__FILE__).'/../'.str_replace(array('_', "\0"), array('/', ''), $class).'.php')) {
+            require $file;
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Autoloader.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/BaseNodeVisitor.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/BaseNodeVisitor.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/BaseNodeVisitor.php	(revision 2)
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_BaseNodeVisitor can be used to make node visitors compatible with Twig 1.x and 2.x.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class Twig_BaseNodeVisitor implements Twig_NodeVisitorInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    final public function enterNode(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if (!$node instanceof Twig_Node) {
+            throw new LogicException('Twig_BaseNodeVisitor only supports Twig_Node instances.');
+        }
+
+        return $this->doEnterNode($node, $env);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    final public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if (!$node instanceof Twig_Node) {
+            throw new LogicException('Twig_BaseNodeVisitor only supports Twig_Node instances.');
+        }
+
+        return $this->doLeaveNode($node, $env);
+    }
+
+    /**
+     * Called before child nodes are visited.
+     *
+     * @param Twig_Node        $node The node to visit
+     * @param Twig_Environment $env  The Twig environment instance
+     *
+     * @return Twig_Node The modified node
+     */
+    abstract protected function doEnterNode(Twig_Node $node, Twig_Environment $env);
+
+    /**
+     * Called after child nodes are visited.
+     *
+     * @param Twig_Node        $node The node to visit
+     * @param Twig_Environment $env  The Twig environment instance
+     *
+     * @return Twig_Node|false The modified node or false if the node must be removed
+     */
+    abstract protected function doLeaveNode(Twig_Node $node, Twig_Environment $env);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/BaseNodeVisitor.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Cache/Filesystem.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Cache/Filesystem.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Cache/Filesystem.php	(revision 2)
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Implements a cache on the filesystem.
+ *
+ * @author Andrew Tch <andrew@noop.lv>
+ */
+class Twig_Cache_Filesystem implements Twig_CacheInterface
+{
+    const FORCE_BYTECODE_INVALIDATION = 1;
+
+    private $directory;
+    private $options;
+
+    /**
+     * @param $directory string The root cache directory
+     * @param $options   int    A set of options
+     */
+    public function __construct($directory, $options = 0)
+    {
+        $this->directory = rtrim($directory, '\/').'/';
+        $this->options = $options;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generateKey($name, $className)
+    {
+        $hash = hash('sha256', $className);
+
+        return $this->directory.$hash[0].$hash[1].'/'.$hash.'.php';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function load($key)
+    {
+        @include_once $key;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function write($key, $content)
+    {
+        $dir = dirname($key);
+        if (!is_dir($dir)) {
+            if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) {
+                throw new RuntimeException(sprintf('Unable to create the cache directory (%s).', $dir));
+            }
+        } elseif (!is_writable($dir)) {
+            throw new RuntimeException(sprintf('Unable to write in the cache directory (%s).', $dir));
+        }
+
+        $tmpFile = tempnam($dir, basename($key));
+        if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) {
+            @chmod($key, 0666 & ~umask());
+
+            if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) {
+                // Compile cached file into bytecode cache
+                if (function_exists('opcache_invalidate')) {
+                    opcache_invalidate($key, true);
+                } elseif (function_exists('apc_compile_file')) {
+                    apc_compile_file($key);
+                }
+            }
+
+            return;
+        }
+
+        throw new RuntimeException(sprintf('Failed to write cache file "%s".', $key));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getTimestamp($key)
+    {
+        if (!file_exists($key)) {
+            return 0;
+        }
+
+        return (int) @filemtime($key);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Cache/Filesystem.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Cache/Null.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Cache/Null.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Cache/Null.php	(revision 2)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Implements a no-cache strategy.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Cache_Null implements Twig_CacheInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function generateKey($name, $className)
+    {
+        return '';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function write($key, $content)
+    {
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function load($key)
+    {
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getTimestamp($key)
+    {
+        return 0;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Cache/Null.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/CacheInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/CacheInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/CacheInterface.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by cache classes.
+ *
+ * It is highly recommended to always store templates on the filesystem to
+ * benefit from the PHP opcode cache. This interface is mostly useful if you
+ * need to implement a custom strategy for storing templates on the filesystem.
+ *
+ * @author Andrew Tch <andrew@noop.lv>
+ */
+interface Twig_CacheInterface
+{
+    /**
+     * Generates a cache key for the given template class name.
+     *
+     * @param string $name      The template name
+     * @param string $className The template class name
+     *
+     * @return string
+     */
+    public function generateKey($name, $className);
+
+    /**
+     * Writes the compiled template to cache.
+     *
+     * @param string $key     The cache key
+     * @param string $content The template representation as a PHP class
+     */
+    public function write($key, $content);
+
+    /**
+     * Loads a template from the cache.
+     *
+     * @param string $key The cache key
+     */
+    public function load($key);
+
+    /**
+     * Returns the modification timestamp of a key.
+     *
+     * @param string $key The cache key
+     *
+     * @return int
+     */
+    public function getTimestamp($key);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/CacheInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Compiler.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Compiler.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Compiler.php	(revision 2)
@@ -0,0 +1,277 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Compiles a node to PHP code.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Compiler implements Twig_CompilerInterface
+{
+    protected $lastLine;
+    protected $source;
+    protected $indentation;
+    protected $env;
+    protected $debugInfo = array();
+    protected $sourceOffset;
+    protected $sourceLine;
+    protected $filename;
+
+    /**
+     * Constructor.
+     *
+     * @param Twig_Environment $env The twig environment instance
+     */
+    public function __construct(Twig_Environment $env)
+    {
+        $this->env = $env;
+    }
+
+    public function getFilename()
+    {
+        return $this->filename;
+    }
+
+    /**
+     * Returns the environment instance related to this compiler.
+     *
+     * @return Twig_Environment The environment instance
+     */
+    public function getEnvironment()
+    {
+        return $this->env;
+    }
+
+    /**
+     * Gets the current PHP code after compilation.
+     *
+     * @return string The PHP code
+     */
+    public function getSource()
+    {
+        return $this->source;
+    }
+
+    /**
+     * Compiles a node.
+     *
+     * @param Twig_NodeInterface $node        The node to compile
+     * @param int                $indentation The current indentation
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function compile(Twig_NodeInterface $node, $indentation = 0)
+    {
+        $this->lastLine = null;
+        $this->source = '';
+        $this->debugInfo = array();
+        $this->sourceOffset = 0;
+        // source code starts at 1 (as we then increment it when we encounter new lines)
+        $this->sourceLine = 1;
+        $this->indentation = $indentation;
+
+        if ($node instanceof Twig_Node_Module) {
+            $this->filename = $node->getAttribute('filename');
+        }
+
+        $node->compile($this);
+
+        return $this;
+    }
+
+    public function subcompile(Twig_NodeInterface $node, $raw = true)
+    {
+        if (false === $raw) {
+            $this->addIndentation();
+        }
+
+        $node->compile($this);
+
+        return $this;
+    }
+
+    /**
+     * Adds a raw string to the compiled code.
+     *
+     * @param string $string The string
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function raw($string)
+    {
+        $this->source .= $string;
+
+        return $this;
+    }
+
+    /**
+     * Writes a string to the compiled code by adding indentation.
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function write()
+    {
+        $strings = func_get_args();
+        foreach ($strings as $string) {
+            $this->addIndentation();
+            $this->source .= $string;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Appends an indentation to the current PHP code after compilation.
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function addIndentation()
+    {
+        $this->source .= str_repeat(' ', $this->indentation * 4);
+
+        return $this;
+    }
+
+    /**
+     * Adds a quoted string to the compiled code.
+     *
+     * @param string $value The string
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function string($value)
+    {
+        $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\"));
+
+        return $this;
+    }
+
+    /**
+     * Returns a PHP representation of a given value.
+     *
+     * @param mixed $value The value to convert
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function repr($value)
+    {
+        if (is_int($value) || is_float($value)) {
+            if (false !== $locale = setlocale(LC_NUMERIC, 0)) {
+                setlocale(LC_NUMERIC, 'C');
+            }
+
+            $this->raw($value);
+
+            if (false !== $locale) {
+                setlocale(LC_NUMERIC, $locale);
+            }
+        } elseif (null === $value) {
+            $this->raw('null');
+        } elseif (is_bool($value)) {
+            $this->raw($value ? 'true' : 'false');
+        } elseif (is_array($value)) {
+            $this->raw('array(');
+            $first = true;
+            foreach ($value as $key => $v) {
+                if (!$first) {
+                    $this->raw(', ');
+                }
+                $first = false;
+                $this->repr($key);
+                $this->raw(' => ');
+                $this->repr($v);
+            }
+            $this->raw(')');
+        } else {
+            $this->string($value);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Adds debugging information.
+     *
+     * @param Twig_NodeInterface $node The related twig node
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function addDebugInfo(Twig_NodeInterface $node)
+    {
+        if ($node->getLine() != $this->lastLine) {
+            $this->write(sprintf("// line %d\n", $node->getLine()));
+
+            // when mbstring.func_overload is set to 2
+            // mb_substr_count() replaces substr_count()
+            // but they have different signatures!
+            if (((int) ini_get('mbstring.func_overload')) & 2) {
+                // this is much slower than the "right" version
+                $this->sourceLine += mb_substr_count(mb_substr($this->source, $this->sourceOffset), "\n");
+            } else {
+                $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset);
+            }
+            $this->sourceOffset = strlen($this->source);
+            $this->debugInfo[$this->sourceLine] = $node->getLine();
+
+            $this->lastLine = $node->getLine();
+        }
+
+        return $this;
+    }
+
+    public function getDebugInfo()
+    {
+        ksort($this->debugInfo);
+
+        return $this->debugInfo;
+    }
+
+    /**
+     * Indents the generated code.
+     *
+     * @param int $step The number of indentation to add
+     *
+     * @return Twig_Compiler The current compiler instance
+     */
+    public function indent($step = 1)
+    {
+        $this->indentation += $step;
+
+        return $this;
+    }
+
+    /**
+     * Outdents the generated code.
+     *
+     * @param int $step The number of indentation to remove
+     *
+     * @return Twig_Compiler The current compiler instance
+     *
+     * @throws LogicException When trying to outdent too much so the indentation would become negative
+     */
+    public function outdent($step = 1)
+    {
+        // can't outdent by more steps than the current indentation level
+        if ($this->indentation < $step) {
+            throw new LogicException('Unable to call outdent() as the indentation would become negative');
+        }
+
+        $this->indentation -= $step;
+
+        return $this;
+    }
+
+    public function getVarName()
+    {
+        return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Compiler.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/CompilerInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/CompilerInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/CompilerInterface.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by compiler classes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_CompilerInterface
+{
+    /**
+     * Compiles a node.
+     *
+     * @param Twig_NodeInterface $node The node to compile
+     *
+     * @return Twig_CompilerInterface The current compiler instance
+     */
+    public function compile(Twig_NodeInterface $node);
+
+    /**
+     * Gets the current PHP code after compilation.
+     *
+     * @return string The PHP code
+     */
+    public function getSource();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/CompilerInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Environment.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Environment.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Environment.php	(revision 2)
@@ -0,0 +1,1381 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Stores the Twig configuration.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Environment
+{
+    const VERSION = '1.24.0';
+
+    protected $charset;
+    protected $loader;
+    protected $debug;
+    protected $autoReload;
+    protected $cache;
+    protected $lexer;
+    protected $parser;
+    protected $compiler;
+    protected $baseTemplateClass;
+    protected $extensions;
+    protected $parsers;
+    protected $visitors;
+    protected $filters;
+    protected $tests;
+    protected $functions;
+    protected $globals;
+    protected $runtimeInitialized = false;
+    protected $extensionInitialized = false;
+    protected $loadedTemplates;
+    protected $strictVariables;
+    protected $unaryOperators;
+    protected $binaryOperators;
+    protected $templateClassPrefix = '__TwigTemplate_';
+    protected $functionCallbacks = array();
+    protected $filterCallbacks = array();
+    protected $staging;
+
+    private $originalCache;
+    private $bcWriteCacheFile = false;
+    private $bcGetCacheFilename = false;
+    private $lastModifiedExtension = 0;
+
+    /**
+     * Constructor.
+     *
+     * Available options:
+     *
+     *  * debug: When set to true, it automatically set "auto_reload" to true as
+     *           well (default to false).
+     *
+     *  * charset: The charset used by the templates (default to UTF-8).
+     *
+     *  * base_template_class: The base template class to use for generated
+     *                         templates (default to Twig_Template).
+     *
+     *  * cache: An absolute path where to store the compiled templates,
+     *           a Twig_Cache_Interface implementation,
+     *           or false to disable compilation cache (default).
+     *
+     *  * auto_reload: Whether to reload the template if the original source changed.
+     *                 If you don't provide the auto_reload option, it will be
+     *                 determined automatically based on the debug value.
+     *
+     *  * strict_variables: Whether to ignore invalid variables in templates
+     *                      (default to false).
+     *
+     *  * autoescape: Whether to enable auto-escaping (default to html):
+     *                  * false: disable auto-escaping
+     *                  * true: equivalent to html
+     *                  * html, js: set the autoescaping to one of the supported strategies
+     *                  * filename: set the autoescaping strategy based on the template filename extension
+     *                  * PHP callback: a PHP callback that returns an escaping strategy based on the template "filename"
+     *
+     *  * optimizations: A flag that indicates which optimizations to apply
+     *                   (default to -1 which means that all optimizations are enabled;
+     *                   set it to 0 to disable).
+     *
+     * @param Twig_LoaderInterface $loader  A Twig_LoaderInterface instance
+     * @param array                $options An array of options
+     */
+    public function __construct(Twig_LoaderInterface $loader = null, $options = array())
+    {
+        if (null !== $loader) {
+            $this->setLoader($loader);
+        } else {
+            @trigger_error('Not passing a Twig_LoaderInterface as the first constructor argument of Twig_Environment is deprecated since version 1.21.', E_USER_DEPRECATED);
+        }
+
+        $options = array_merge(array(
+            'debug' => false,
+            'charset' => 'UTF-8',
+            'base_template_class' => 'Twig_Template',
+            'strict_variables' => false,
+            'autoescape' => 'html',
+            'cache' => false,
+            'auto_reload' => null,
+            'optimizations' => -1,
+        ), $options);
+
+        $this->debug = (bool) $options['debug'];
+        $this->charset = strtoupper($options['charset']);
+        $this->baseTemplateClass = $options['base_template_class'];
+        $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload'];
+        $this->strictVariables = (bool) $options['strict_variables'];
+        $this->setCache($options['cache']);
+
+        $this->addExtension(new Twig_Extension_Core());
+        $this->addExtension(new Twig_Extension_Escaper($options['autoescape']));
+        $this->addExtension(new Twig_Extension_Optimizer($options['optimizations']));
+        $this->staging = new Twig_Extension_Staging();
+
+        // For BC
+        if (is_string($this->originalCache)) {
+            $r = new ReflectionMethod($this, 'writeCacheFile');
+            if ($r->getDeclaringClass()->getName() !== __CLASS__) {
+                @trigger_error('The Twig_Environment::writeCacheFile method is deprecated since version 1.22 and will be removed in Twig 2.0.', E_USER_DEPRECATED);
+
+                $this->bcWriteCacheFile = true;
+            }
+
+            $r = new ReflectionMethod($this, 'getCacheFilename');
+            if ($r->getDeclaringClass()->getName() !== __CLASS__) {
+                @trigger_error('The Twig_Environment::getCacheFilename method is deprecated since version 1.22 and will be removed in Twig 2.0.', E_USER_DEPRECATED);
+
+                $this->bcGetCacheFilename = true;
+            }
+        }
+    }
+
+    /**
+     * Gets the base template class for compiled templates.
+     *
+     * @return string The base template class name
+     */
+    public function getBaseTemplateClass()
+    {
+        return $this->baseTemplateClass;
+    }
+
+    /**
+     * Sets the base template class for compiled templates.
+     *
+     * @param string $class The base template class name
+     */
+    public function setBaseTemplateClass($class)
+    {
+        $this->baseTemplateClass = $class;
+    }
+
+    /**
+     * Enables debugging mode.
+     */
+    public function enableDebug()
+    {
+        $this->debug = true;
+    }
+
+    /**
+     * Disables debugging mode.
+     */
+    public function disableDebug()
+    {
+        $this->debug = false;
+    }
+
+    /**
+     * Checks if debug mode is enabled.
+     *
+     * @return bool true if debug mode is enabled, false otherwise
+     */
+    public function isDebug()
+    {
+        return $this->debug;
+    }
+
+    /**
+     * Enables the auto_reload option.
+     */
+    public function enableAutoReload()
+    {
+        $this->autoReload = true;
+    }
+
+    /**
+     * Disables the auto_reload option.
+     */
+    public function disableAutoReload()
+    {
+        $this->autoReload = false;
+    }
+
+    /**
+     * Checks if the auto_reload option is enabled.
+     *
+     * @return bool true if auto_reload is enabled, false otherwise
+     */
+    public function isAutoReload()
+    {
+        return $this->autoReload;
+    }
+
+    /**
+     * Enables the strict_variables option.
+     */
+    public function enableStrictVariables()
+    {
+        $this->strictVariables = true;
+    }
+
+    /**
+     * Disables the strict_variables option.
+     */
+    public function disableStrictVariables()
+    {
+        $this->strictVariables = false;
+    }
+
+    /**
+     * Checks if the strict_variables option is enabled.
+     *
+     * @return bool true if strict_variables is enabled, false otherwise
+     */
+    public function isStrictVariables()
+    {
+        return $this->strictVariables;
+    }
+
+    /**
+     * Gets the current cache implementation.
+     *
+     * @param bool $original Whether to return the original cache option or the real cache instance
+     *
+     * @return Twig_CacheInterface|string|false A Twig_CacheInterface implementation,
+     *                                          an absolute path to the compiled templates,
+     *                                          or false to disable cache
+     */
+    public function getCache($original = true)
+    {
+        return $original ? $this->originalCache : $this->cache;
+    }
+
+    /**
+     * Sets the current cache implementation.
+     *
+     * @param Twig_CacheInterface|string|false $cache A Twig_CacheInterface implementation,
+     *                                                an absolute path to the compiled templates,
+     *                                                or false to disable cache
+     */
+    public function setCache($cache)
+    {
+        if (is_string($cache)) {
+            $this->originalCache = $cache;
+            $this->cache = new Twig_Cache_Filesystem($cache);
+        } elseif (false === $cache) {
+            $this->originalCache = $cache;
+            $this->cache = new Twig_Cache_Null();
+        } elseif (null === $cache) {
+            @trigger_error('Using "null" as the cache strategy is deprecated since version 1.23 and will be removed in Twig 2.0.', E_USER_DEPRECATED);
+            $this->originalCache = false;
+            $this->cache = new Twig_Cache_Null();
+        } elseif ($cache instanceof Twig_CacheInterface) {
+            $this->originalCache = $this->cache = $cache;
+        } else {
+            throw new LogicException(sprintf('Cache can only be a string, false, or a Twig_CacheInterface implementation.'));
+        }
+    }
+
+    /**
+     * Gets the cache filename for a given template.
+     *
+     * @param string $name The template name
+     *
+     * @return string|false The cache file name or false when caching is disabled
+     *
+     * @deprecated since 1.22 (to be removed in 2.0)
+     */
+    public function getCacheFilename($name)
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        $key = $this->cache->generateKey($name, $this->getTemplateClass($name));
+
+        return !$key ? false : $key;
+    }
+
+    /**
+     * Gets the template class associated with the given string.
+     *
+     * The generated template class is based on the following parameters:
+     *
+     *  * The cache key for the given template;
+     *  * The currently enabled extensions;
+     *  * Whether the Twig C extension is available or not.
+     *
+     * @param string   $name  The name for which to calculate the template class name
+     * @param int|null $index The index if it is an embedded template
+     *
+     * @return string The template class name
+     */
+    public function getTemplateClass($name, $index = null)
+    {
+        $key = $this->getLoader()->getCacheKey($name);
+        $key .= json_encode(array_keys($this->extensions));
+        $key .= function_exists('twig_template_get_attributes');
+
+        return $this->templateClassPrefix.hash('sha256', $key).(null === $index ? '' : '_'.$index);
+    }
+
+    /**
+     * Gets the template class prefix.
+     *
+     * @return string The template class prefix
+     *
+     * @deprecated since 1.22 (to be removed in 2.0)
+     */
+    public function getTemplateClassPrefix()
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        return $this->templateClassPrefix;
+    }
+
+    /**
+     * Renders a template.
+     *
+     * @param string $name    The template name
+     * @param array  $context An array of parameters to pass to the template
+     *
+     * @return string The rendered template
+     *
+     * @throws Twig_Error_Loader  When the template cannot be found
+     * @throws Twig_Error_Syntax  When an error occurred during compilation
+     * @throws Twig_Error_Runtime When an error occurred during rendering
+     */
+    public function render($name, array $context = array())
+    {
+        return $this->loadTemplate($name)->render($context);
+    }
+
+    /**
+     * Displays a template.
+     *
+     * @param string $name    The template name
+     * @param array  $context An array of parameters to pass to the template
+     *
+     * @throws Twig_Error_Loader  When the template cannot be found
+     * @throws Twig_Error_Syntax  When an error occurred during compilation
+     * @throws Twig_Error_Runtime When an error occurred during rendering
+     */
+    public function display($name, array $context = array())
+    {
+        $this->loadTemplate($name)->display($context);
+    }
+
+    /**
+     * Loads a template by name.
+     *
+     * @param string $name  The template name
+     * @param int    $index The index if it is an embedded template
+     *
+     * @return Twig_TemplateInterface A template instance representing the given template name
+     *
+     * @throws Twig_Error_Loader When the template cannot be found
+     * @throws Twig_Error_Syntax When an error occurred during compilation
+     */
+    public function loadTemplate($name, $index = null)
+    {
+        $cls = $this->getTemplateClass($name, $index);
+
+        if (isset($this->loadedTemplates[$cls])) {
+            return $this->loadedTemplates[$cls];
+        }
+
+        if (!class_exists($cls, false)) {
+            if ($this->bcGetCacheFilename) {
+                $key = $this->getCacheFilename($name);
+            } else {
+                $key = $this->cache->generateKey($name, $cls);
+            }
+
+            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
+                $this->cache->load($key);
+            }
+
+            if (!class_exists($cls, false)) {
+                $content = $this->compileSource($this->getLoader()->getSource($name), $name);
+                if ($this->bcWriteCacheFile) {
+                    $this->writeCacheFile($key, $content);
+                } else {
+                    $this->cache->write($key, $content);
+                }
+
+                eval('?>'.$content);
+            }
+        }
+
+        if (!$this->runtimeInitialized) {
+            $this->initRuntime();
+        }
+
+        return $this->loadedTemplates[$cls] = new $cls($this);
+    }
+
+    /**
+     * Creates a template from source.
+     *
+     * This method should not be used as a generic way to load templates.
+     *
+     * @param string $template The template name
+     *
+     * @return Twig_Template A template instance representing the given template name
+     *
+     * @throws Twig_Error_Loader When the template cannot be found
+     * @throws Twig_Error_Syntax When an error occurred during compilation
+     */
+    public function createTemplate($template)
+    {
+        $name = sprintf('__string_template__%s', hash('sha256', uniqid(mt_rand(), true), false));
+
+        $loader = new Twig_Loader_Chain(array(
+            new Twig_Loader_Array(array($name => $template)),
+            $current = $this->getLoader(),
+        ));
+
+        $this->setLoader($loader);
+        try {
+            $template = $this->loadTemplate($name);
+        } catch (Exception $e) {
+            $this->setLoader($current);
+
+            throw $e;
+        }
+        $this->setLoader($current);
+
+        return $template;
+    }
+
+    /**
+     * Returns true if the template is still fresh.
+     *
+     * Besides checking the loader for freshness information,
+     * this method also checks if the enabled extensions have
+     * not changed.
+     *
+     * @param string $name The template name
+     * @param int    $time The last modification time of the cached template
+     *
+     * @return bool true if the template is fresh, false otherwise
+     */
+    public function isTemplateFresh($name, $time)
+    {
+        if (0 === $this->lastModifiedExtension) {
+            foreach ($this->extensions as $extension) {
+                $r = new ReflectionObject($extension);
+                if (file_exists($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModifiedExtension) {
+                    $this->lastModifiedExtension = $extensionTime;
+                }
+            }
+        }
+
+        return $this->lastModifiedExtension <= $time && $this->getLoader()->isFresh($name, $time);
+    }
+
+    /**
+     * Tries to load a template consecutively from an array.
+     *
+     * Similar to loadTemplate() but it also accepts Twig_TemplateInterface instances and an array
+     * of templates where each is tried to be loaded.
+     *
+     * @param string|Twig_Template|array $names A template or an array of templates to try consecutively
+     *
+     * @return Twig_Template
+     *
+     * @throws Twig_Error_Loader When none of the templates can be found
+     * @throws Twig_Error_Syntax When an error occurred during compilation
+     */
+    public function resolveTemplate($names)
+    {
+        if (!is_array($names)) {
+            $names = array($names);
+        }
+
+        foreach ($names as $name) {
+            if ($name instanceof Twig_Template) {
+                return $name;
+            }
+
+            try {
+                return $this->loadTemplate($name);
+            } catch (Twig_Error_Loader $e) {
+            }
+        }
+
+        if (1 === count($names)) {
+            throw $e;
+        }
+
+        throw new Twig_Error_Loader(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names)));
+    }
+
+    /**
+     * Clears the internal template cache.
+     *
+     * @deprecated since 1.18.3 (to be removed in 2.0)
+     */
+    public function clearTemplateCache()
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.18.3 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        $this->loadedTemplates = array();
+    }
+
+    /**
+     * Clears the template cache files on the filesystem.
+     *
+     * @deprecated since 1.22 (to be removed in 2.0)
+     */
+    public function clearCacheFiles()
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        if (is_string($this->originalCache)) {
+            foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->originalCache), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
+                if ($file->isFile()) {
+                    @unlink($file->getPathname());
+                }
+            }
+        }
+    }
+
+    /**
+     * Gets the Lexer instance.
+     *
+     * @return Twig_LexerInterface A Twig_LexerInterface instance
+     */
+    public function getLexer()
+    {
+        if (null === $this->lexer) {
+            $this->lexer = new Twig_Lexer($this);
+        }
+
+        return $this->lexer;
+    }
+
+    /**
+     * Sets the Lexer instance.
+     *
+     * @param Twig_LexerInterface $lexer A Twig_LexerInterface instance
+     */
+    public function setLexer(Twig_LexerInterface $lexer)
+    {
+        $this->lexer = $lexer;
+    }
+
+    /**
+     * Tokenizes a source code.
+     *
+     * @param string $source The template source code
+     * @param string $name   The template name
+     *
+     * @return Twig_TokenStream A Twig_TokenStream instance
+     *
+     * @throws Twig_Error_Syntax When the code is syntactically wrong
+     */
+    public function tokenize($source, $name = null)
+    {
+        return $this->getLexer()->tokenize($source, $name);
+    }
+
+    /**
+     * Gets the Parser instance.
+     *
+     * @return Twig_ParserInterface A Twig_ParserInterface instance
+     */
+    public function getParser()
+    {
+        if (null === $this->parser) {
+            $this->parser = new Twig_Parser($this);
+        }
+
+        return $this->parser;
+    }
+
+    /**
+     * Sets the Parser instance.
+     *
+     * @param Twig_ParserInterface $parser A Twig_ParserInterface instance
+     */
+    public function setParser(Twig_ParserInterface $parser)
+    {
+        $this->parser = $parser;
+    }
+
+    /**
+     * Converts a token stream to a node tree.
+     *
+     * @param Twig_TokenStream $stream A token stream instance
+     *
+     * @return Twig_Node_Module A node tree
+     *
+     * @throws Twig_Error_Syntax When the token stream is syntactically or semantically wrong
+     */
+    public function parse(Twig_TokenStream $stream)
+    {
+        return $this->getParser()->parse($stream);
+    }
+
+    /**
+     * Gets the Compiler instance.
+     *
+     * @return Twig_CompilerInterface A Twig_CompilerInterface instance
+     */
+    public function getCompiler()
+    {
+        if (null === $this->compiler) {
+            $this->compiler = new Twig_Compiler($this);
+        }
+
+        return $this->compiler;
+    }
+
+    /**
+     * Sets the Compiler instance.
+     *
+     * @param Twig_CompilerInterface $compiler A Twig_CompilerInterface instance
+     */
+    public function setCompiler(Twig_CompilerInterface $compiler)
+    {
+        $this->compiler = $compiler;
+    }
+
+    /**
+     * Compiles a node and returns the PHP code.
+     *
+     * @param Twig_NodeInterface $node A Twig_NodeInterface instance
+     *
+     * @return string The compiled PHP source code
+     */
+    public function compile(Twig_NodeInterface $node)
+    {
+        return $this->getCompiler()->compile($node)->getSource();
+    }
+
+    /**
+     * Compiles a template source code.
+     *
+     * @param string $source The template source code
+     * @param string $name   The template name
+     *
+     * @return string The compiled PHP source code
+     *
+     * @throws Twig_Error_Syntax When there was an error during tokenizing, parsing or compiling
+     */
+    public function compileSource($source, $name = null)
+    {
+        try {
+            $compiled = $this->compile($this->parse($this->tokenize($source, $name)), $source);
+
+            if (isset($source[0])) {
+                $compiled .= '/* '.str_replace(array('*/', "\r\n", "\r", "\n"), array('*//* ', "\n", "\n", "*/\n/* "), $source)."*/\n";
+            }
+
+            return $compiled;
+        } catch (Twig_Error $e) {
+            $e->setTemplateFile($name);
+            throw $e;
+        } catch (Exception $e) {
+            throw new Twig_Error_Syntax(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $name, $e);
+        }
+    }
+
+    /**
+     * Sets the Loader instance.
+     *
+     * @param Twig_LoaderInterface $loader A Twig_LoaderInterface instance
+     */
+    public function setLoader(Twig_LoaderInterface $loader)
+    {
+        $this->loader = $loader;
+    }
+
+    /**
+     * Gets the Loader instance.
+     *
+     * @return Twig_LoaderInterface A Twig_LoaderInterface instance
+     */
+    public function getLoader()
+    {
+        if (null === $this->loader) {
+            throw new LogicException('You must set a loader first.');
+        }
+
+        return $this->loader;
+    }
+
+    /**
+     * Sets the default template charset.
+     *
+     * @param string $charset The default charset
+     */
+    public function setCharset($charset)
+    {
+        $this->charset = strtoupper($charset);
+    }
+
+    /**
+     * Gets the default template charset.
+     *
+     * @return string The default charset
+     */
+    public function getCharset()
+    {
+        return $this->charset;
+    }
+
+    /**
+     * Initializes the runtime environment.
+     *
+     * @deprecated since 1.23 (to be removed in 2.0)
+     */
+    public function initRuntime()
+    {
+        $this->runtimeInitialized = true;
+
+        foreach ($this->getExtensions() as $name => $extension) {
+            if (!$extension instanceof Twig_Extension_InitRuntimeInterface) {
+                $m = new ReflectionMethod($extension, 'initRuntime');
+
+                if ('Twig_Extension' !== $m->getDeclaringClass()->getName()) {
+                    @trigger_error(sprintf('Defining the initRuntime() method in the "%s" extension is deprecated since version 1.23. Use the `needs_environment` option to get the Twig_Environment instance in filters, functions, or tests; or explicitly implement Twig_Extension_InitRuntimeInterface if needed (not recommended).', $name), E_USER_DEPRECATED);
+                }
+            }
+
+            $extension->initRuntime($this);
+        }
+    }
+
+    /**
+     * Returns true if the given extension is registered.
+     *
+     * @param string $name The extension name
+     *
+     * @return bool Whether the extension is registered or not
+     */
+    public function hasExtension($name)
+    {
+        return isset($this->extensions[$name]);
+    }
+
+    /**
+     * Gets an extension by name.
+     *
+     * @param string $name The extension name
+     *
+     * @return Twig_ExtensionInterface A Twig_ExtensionInterface instance
+     */
+    public function getExtension($name)
+    {
+        if (!isset($this->extensions[$name])) {
+            throw new Twig_Error_Runtime(sprintf('The "%s" extension is not enabled.', $name));
+        }
+
+        return $this->extensions[$name];
+    }
+
+    /**
+     * Registers an extension.
+     *
+     * @param Twig_ExtensionInterface $extension A Twig_ExtensionInterface instance
+     */
+    public function addExtension(Twig_ExtensionInterface $extension)
+    {
+        $name = $extension->getName();
+
+        if ($this->extensionInitialized) {
+            throw new LogicException(sprintf('Unable to register extension "%s" as extensions have already been initialized.', $name));
+        }
+
+        if (isset($this->extensions[$name])) {
+            @trigger_error(sprintf('The possibility to register the same extension twice ("%s") is deprecated since version 1.23 and will be removed in Twig 2.0. Use proper PHP inheritance instead.', $name), E_USER_DEPRECATED);
+        }
+
+        $this->lastModifiedExtension = 0;
+
+        $this->extensions[$name] = $extension;
+    }
+
+    /**
+     * Removes an extension by name.
+     *
+     * This method is deprecated and you should not use it.
+     *
+     * @param string $name The extension name
+     *
+     * @deprecated since 1.12 (to be removed in 2.0)
+     */
+    public function removeExtension($name)
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.12 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        if ($this->extensionInitialized) {
+            throw new LogicException(sprintf('Unable to remove extension "%s" as extensions have already been initialized.', $name));
+        }
+
+        unset($this->extensions[$name]);
+    }
+
+    /**
+     * Registers an array of extensions.
+     *
+     * @param array $extensions An array of extensions
+     */
+    public function setExtensions(array $extensions)
+    {
+        foreach ($extensions as $extension) {
+            $this->addExtension($extension);
+        }
+    }
+
+    /**
+     * Returns all registered extensions.
+     *
+     * @return array An array of extensions
+     */
+    public function getExtensions()
+    {
+        return $this->extensions;
+    }
+
+    /**
+     * Registers a Token Parser.
+     *
+     * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance
+     */
+    public function addTokenParser(Twig_TokenParserInterface $parser)
+    {
+        if ($this->extensionInitialized) {
+            throw new LogicException('Unable to add a token parser as extensions have already been initialized.');
+        }
+
+        $this->staging->addTokenParser($parser);
+    }
+
+    /**
+     * Gets the registered Token Parsers.
+     *
+     * @return Twig_TokenParserBrokerInterface A broker containing token parsers
+     */
+    public function getTokenParsers()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->parsers;
+    }
+
+    /**
+     * Gets registered tags.
+     *
+     * Be warned that this method cannot return tags defined by Twig_TokenParserBrokerInterface classes.
+     *
+     * @return Twig_TokenParserInterface[] An array of Twig_TokenParserInterface instances
+     */
+    public function getTags()
+    {
+        $tags = array();
+        foreach ($this->getTokenParsers()->getParsers() as $parser) {
+            if ($parser instanceof Twig_TokenParserInterface) {
+                $tags[$parser->getTag()] = $parser;
+            }
+        }
+
+        return $tags;
+    }
+
+    /**
+     * Registers a Node Visitor.
+     *
+     * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance
+     */
+    public function addNodeVisitor(Twig_NodeVisitorInterface $visitor)
+    {
+        if ($this->extensionInitialized) {
+            throw new LogicException('Unable to add a node visitor as extensions have already been initialized.');
+        }
+
+        $this->staging->addNodeVisitor($visitor);
+    }
+
+    /**
+     * Gets the registered Node Visitors.
+     *
+     * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances
+     */
+    public function getNodeVisitors()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->visitors;
+    }
+
+    /**
+     * Registers a Filter.
+     *
+     * @param string|Twig_SimpleFilter               $name   The filter name or a Twig_SimpleFilter instance
+     * @param Twig_FilterInterface|Twig_SimpleFilter $filter A Twig_FilterInterface instance or a Twig_SimpleFilter instance
+     */
+    public function addFilter($name, $filter = null)
+    {
+        if (!$name instanceof Twig_SimpleFilter && !($filter instanceof Twig_SimpleFilter || $filter instanceof Twig_FilterInterface)) {
+            throw new LogicException('A filter must be an instance of Twig_FilterInterface or Twig_SimpleFilter');
+        }
+
+        if ($name instanceof Twig_SimpleFilter) {
+            $filter = $name;
+            $name = $filter->getName();
+        } else {
+            @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated since version 1.21. Pass an instance of "Twig_SimpleFilter" instead when defining filter "%s".', __METHOD__, $name), E_USER_DEPRECATED);
+        }
+
+        if ($this->extensionInitialized) {
+            throw new LogicException(sprintf('Unable to add filter "%s" as extensions have already been initialized.', $name));
+        }
+
+        $this->staging->addFilter($name, $filter);
+    }
+
+    /**
+     * Get a filter by name.
+     *
+     * Subclasses may override this method and load filters differently;
+     * so no list of filters is available.
+     *
+     * @param string $name The filter name
+     *
+     * @return Twig_Filter|false A Twig_Filter instance or false if the filter does not exist
+     */
+    public function getFilter($name)
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        if (isset($this->filters[$name])) {
+            return $this->filters[$name];
+        }
+
+        foreach ($this->filters as $pattern => $filter) {
+            $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count);
+
+            if ($count) {
+                if (preg_match('#^'.$pattern.'$#', $name, $matches)) {
+                    array_shift($matches);
+                    $filter->setArguments($matches);
+
+                    return $filter;
+                }
+            }
+        }
+
+        foreach ($this->filterCallbacks as $callback) {
+            if (false !== $filter = call_user_func($callback, $name)) {
+                return $filter;
+            }
+        }
+
+        return false;
+    }
+
+    public function registerUndefinedFilterCallback($callable)
+    {
+        $this->filterCallbacks[] = $callable;
+    }
+
+    /**
+     * Gets the registered Filters.
+     *
+     * Be warned that this method cannot return filters defined with registerUndefinedFilterCallback.
+     *
+     * @return Twig_FilterInterface[] An array of Twig_FilterInterface instances
+     *
+     * @see registerUndefinedFilterCallback
+     */
+    public function getFilters()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->filters;
+    }
+
+    /**
+     * Registers a Test.
+     *
+     * @param string|Twig_SimpleTest             $name The test name or a Twig_SimpleTest instance
+     * @param Twig_TestInterface|Twig_SimpleTest $test A Twig_TestInterface instance or a Twig_SimpleTest instance
+     */
+    public function addTest($name, $test = null)
+    {
+        if (!$name instanceof Twig_SimpleTest && !($test instanceof Twig_SimpleTest || $test instanceof Twig_TestInterface)) {
+            throw new LogicException('A test must be an instance of Twig_TestInterface or Twig_SimpleTest');
+        }
+
+        if ($name instanceof Twig_SimpleTest) {
+            $test = $name;
+            $name = $test->getName();
+        } else {
+            @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated since version 1.21. Pass an instance of "Twig_SimpleTest" instead when defining test "%s".', __METHOD__, $name), E_USER_DEPRECATED);
+        }
+
+        if ($this->extensionInitialized) {
+            throw new LogicException(sprintf('Unable to add test "%s" as extensions have already been initialized.', $name));
+        }
+
+        $this->staging->addTest($name, $test);
+    }
+
+    /**
+     * Gets the registered Tests.
+     *
+     * @return Twig_TestInterface[] An array of Twig_TestInterface instances
+     */
+    public function getTests()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->tests;
+    }
+
+    /**
+     * Gets a test by name.
+     *
+     * @param string $name The test name
+     *
+     * @return Twig_Test|false A Twig_Test instance or false if the test does not exist
+     */
+    public function getTest($name)
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        if (isset($this->tests[$name])) {
+            return $this->tests[$name];
+        }
+
+        return false;
+    }
+
+    /**
+     * Registers a Function.
+     *
+     * @param string|Twig_SimpleFunction                 $name     The function name or a Twig_SimpleFunction instance
+     * @param Twig_FunctionInterface|Twig_SimpleFunction $function A Twig_FunctionInterface instance or a Twig_SimpleFunction instance
+     */
+    public function addFunction($name, $function = null)
+    {
+        if (!$name instanceof Twig_SimpleFunction && !($function instanceof Twig_SimpleFunction || $function instanceof Twig_FunctionInterface)) {
+            throw new LogicException('A function must be an instance of Twig_FunctionInterface or Twig_SimpleFunction');
+        }
+
+        if ($name instanceof Twig_SimpleFunction) {
+            $function = $name;
+            $name = $function->getName();
+        } else {
+            @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated since version 1.21. Pass an instance of "Twig_SimpleFunction" instead when defining function "%s".', __METHOD__, $name), E_USER_DEPRECATED);
+        }
+
+        if ($this->extensionInitialized) {
+            throw new LogicException(sprintf('Unable to add function "%s" as extensions have already been initialized.', $name));
+        }
+
+        $this->staging->addFunction($name, $function);
+    }
+
+    /**
+     * Get a function by name.
+     *
+     * Subclasses may override this method and load functions differently;
+     * so no list of functions is available.
+     *
+     * @param string $name function name
+     *
+     * @return Twig_Function|false A Twig_Function instance or false if the function does not exist
+     */
+    public function getFunction($name)
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        if (isset($this->functions[$name])) {
+            return $this->functions[$name];
+        }
+
+        foreach ($this->functions as $pattern => $function) {
+            $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count);
+
+            if ($count) {
+                if (preg_match('#^'.$pattern.'$#', $name, $matches)) {
+                    array_shift($matches);
+                    $function->setArguments($matches);
+
+                    return $function;
+                }
+            }
+        }
+
+        foreach ($this->functionCallbacks as $callback) {
+            if (false !== $function = call_user_func($callback, $name)) {
+                return $function;
+            }
+        }
+
+        return false;
+    }
+
+    public function registerUndefinedFunctionCallback($callable)
+    {
+        $this->functionCallbacks[] = $callable;
+    }
+
+    /**
+     * Gets registered functions.
+     *
+     * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback.
+     *
+     * @return Twig_FunctionInterface[] An array of Twig_FunctionInterface instances
+     *
+     * @see registerUndefinedFunctionCallback
+     */
+    public function getFunctions()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->functions;
+    }
+
+    /**
+     * Registers a Global.
+     *
+     * New globals can be added before compiling or rendering a template;
+     * but after, you can only update existing globals.
+     *
+     * @param string $name  The global name
+     * @param mixed  $value The global value
+     */
+    public function addGlobal($name, $value)
+    {
+        if ($this->extensionInitialized || $this->runtimeInitialized) {
+            if (null === $this->globals) {
+                $this->globals = $this->initGlobals();
+            }
+
+            if (!array_key_exists($name, $this->globals)) {
+                // The deprecation notice must be turned into the following exception in Twig 2.0
+                @trigger_error(sprintf('Registering global variable "%s" at runtime or when the extensions have already been initialized is deprecated since version 1.21.', $name), E_USER_DEPRECATED);
+                //throw new LogicException(sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name));
+            }
+        }
+
+        if ($this->extensionInitialized || $this->runtimeInitialized) {
+            // update the value
+            $this->globals[$name] = $value;
+        } else {
+            $this->staging->addGlobal($name, $value);
+        }
+    }
+
+    /**
+     * Gets the registered Globals.
+     *
+     * @return array An array of globals
+     */
+    public function getGlobals()
+    {
+        if (!$this->runtimeInitialized && !$this->extensionInitialized) {
+            return $this->initGlobals();
+        }
+
+        if (null === $this->globals) {
+            $this->globals = $this->initGlobals();
+        }
+
+        return $this->globals;
+    }
+
+    /**
+     * Merges a context with the defined globals.
+     *
+     * @param array $context An array representing the context
+     *
+     * @return array The context merged with the globals
+     */
+    public function mergeGlobals(array $context)
+    {
+        // we don't use array_merge as the context being generally
+        // bigger than globals, this code is faster.
+        foreach ($this->getGlobals() as $key => $value) {
+            if (!array_key_exists($key, $context)) {
+                $context[$key] = $value;
+            }
+        }
+
+        return $context;
+    }
+
+    /**
+     * Gets the registered unary Operators.
+     *
+     * @return array An array of unary operators
+     */
+    public function getUnaryOperators()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->unaryOperators;
+    }
+
+    /**
+     * Gets the registered binary Operators.
+     *
+     * @return array An array of binary operators
+     */
+    public function getBinaryOperators()
+    {
+        if (!$this->extensionInitialized) {
+            $this->initExtensions();
+        }
+
+        return $this->binaryOperators;
+    }
+
+    /**
+     * @deprecated since 1.23 (to be removed in 2.0)
+     */
+    public function computeAlternatives($name, $items)
+    {
+        @trigger_error(sprintf('The %s method is deprecated since version 1.23 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        return Twig_Error_Syntax::computeAlternatives($name, $items);
+    }
+
+    protected function initGlobals()
+    {
+        $globals = array();
+        foreach ($this->extensions as $name => $extension) {
+            if (!$extension instanceof Twig_Extension_GlobalsInterface) {
+                $m = new ReflectionMethod($extension, 'getGlobals');
+
+                if ('Twig_Extension' !== $m->getDeclaringClass()->getName()) {
+                    @trigger_error(sprintf('Defining the getGlobals() method in the "%s" extension without explicitly implementing Twig_Extension_GlobalsInterface is deprecated since version 1.23.', $name), E_USER_DEPRECATED);
+                }
+            }
+
+            $extGlob = $extension->getGlobals();
+            if (!is_array($extGlob)) {
+                throw new UnexpectedValueException(sprintf('"%s::getGlobals()" must return an array of globals.', get_class($extension)));
+            }
+
+            $globals[] = $extGlob;
+        }
+
+        $globals[] = $this->staging->getGlobals();
+
+        return call_user_func_array('array_merge', $globals);
+    }
+
+    protected function initExtensions()
+    {
+        if ($this->extensionInitialized) {
+            return;
+        }
+
+        $this->extensionInitialized = true;
+        $this->parsers = new Twig_TokenParserBroker(array(), array(), false);
+        $this->filters = array();
+        $this->functions = array();
+        $this->tests = array();
+        $this->visitors = array();
+        $this->unaryOperators = array();
+        $this->binaryOperators = array();
+
+        foreach ($this->extensions as $extension) {
+            $this->initExtension($extension);
+        }
+        $this->initExtension($this->staging);
+    }
+
+    protected function initExtension(Twig_ExtensionInterface $extension)
+    {
+        // filters
+        foreach ($extension->getFilters() as $name => $filter) {
+            if ($filter instanceof Twig_SimpleFilter) {
+                $name = $filter->getName();
+            } else {
+                @trigger_error(sprintf('Using an instance of "%s" for filter "%s" is deprecated since version 1.21. Use Twig_SimpleFilter instead.', get_class($filter), $name), E_USER_DEPRECATED);
+            }
+
+            $this->filters[$name] = $filter;
+        }
+
+        // functions
+        foreach ($extension->getFunctions() as $name => $function) {
+            if ($function instanceof Twig_SimpleFunction) {
+                $name = $function->getName();
+            } else {
+                @trigger_error(sprintf('Using an instance of "%s" for function "%s" is deprecated since version 1.21. Use Twig_SimpleFunction instead.', get_class($function), $name), E_USER_DEPRECATED);
+            }
+
+            $this->functions[$name] = $function;
+        }
+
+        // tests
+        foreach ($extension->getTests() as $name => $test) {
+            if ($test instanceof Twig_SimpleTest) {
+                $name = $test->getName();
+            } else {
+                @trigger_error(sprintf('Using an instance of "%s" for test "%s" is deprecated since version 1.21. Use Twig_SimpleTest instead.', get_class($test), $name), E_USER_DEPRECATED);
+            }
+
+            $this->tests[$name] = $test;
+        }
+
+        // token parsers
+        foreach ($extension->getTokenParsers() as $parser) {
+            if ($parser instanceof Twig_TokenParserInterface) {
+                $this->parsers->addTokenParser($parser);
+            } elseif ($parser instanceof Twig_TokenParserBrokerInterface) {
+                @trigger_error('Registering a Twig_TokenParserBrokerInterface instance is deprecated since version 1.21.', E_USER_DEPRECATED);
+
+                $this->parsers->addTokenParserBroker($parser);
+            } else {
+                throw new LogicException('getTokenParsers() must return an array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances');
+            }
+        }
+
+        // node visitors
+        foreach ($extension->getNodeVisitors() as $visitor) {
+            $this->visitors[] = $visitor;
+        }
+
+        // operators
+        if ($operators = $extension->getOperators()) {
+            if (2 !== count($operators)) {
+                throw new InvalidArgumentException(sprintf('"%s::getOperators()" does not return a valid operators array.', get_class($extension)));
+            }
+
+            $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]);
+            $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]);
+        }
+    }
+
+    /**
+     * @deprecated since 1.22 (to be removed in 2.0)
+     */
+    protected function writeCacheFile($file, $content)
+    {
+        $this->cache->write($file, $content);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Environment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Error/Loader.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Error/Loader.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Error/Loader.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when an error occurs during template loading.
+ *
+ * Automatic template information guessing is always turned off as
+ * if a template cannot be loaded, there is nothing to guess.
+ * However, when a template is loaded from another one, then, we need
+ * to find the current context and this is automatically done by
+ * Twig_Template::displayWithErrorHandling().
+ *
+ * This strategy makes Twig_Environment::resolveTemplate() much faster.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Error_Loader extends Twig_Error
+{
+    public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null)
+    {
+        parent::__construct($message, false, false, $previous);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Error/Loader.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Error/Runtime.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Error/Runtime.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Error/Runtime.php	(revision 2)
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when an error occurs at runtime.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Error_Runtime extends Twig_Error
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Error/Runtime.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Error/Syntax.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Error/Syntax.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Error/Syntax.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when a syntax error occurs during lexing or parsing of a template.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Error_Syntax extends Twig_Error
+{
+    /**
+     * Tweaks the error message to include suggestions.
+     *
+     * @param string $name  The original name of the item that does not exist
+     * @param array  $items An array of possible items
+     */
+    public function addSuggestions($name, array $items)
+    {
+        if (!$alternatives = self::computeAlternatives($name, $items)) {
+            return;
+        }
+
+        $this->appendMessage(sprintf(' Did you mean "%s"?', implode('", "', $alternatives)));
+    }
+
+    /**
+     * @internal
+     *
+     * To be merged with the addSuggestions() method in 2.0.
+     */
+    public static function computeAlternatives($name, $items)
+    {
+        $alternatives = array();
+        foreach ($items as $item) {
+            $lev = levenshtein($name, $item);
+            if ($lev <= strlen($name) / 3 || false !== strpos($item, $name)) {
+                $alternatives[$item] = $lev;
+            }
+        }
+        asort($alternatives);
+
+        return array_keys($alternatives);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Error/Syntax.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Error.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Error.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Error.php	(revision 2)
@@ -0,0 +1,272 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig base exception.
+ *
+ * This exception class and its children must only be used when
+ * an error occurs during the loading of a template, when a syntax error
+ * is detected in a template, or when rendering a template. Other
+ * errors must use regular PHP exception classes (like when the template
+ * cache directory is not writable for instance).
+ *
+ * To help debugging template issues, this class tracks the original template
+ * name and line where the error occurred.
+ *
+ * Whenever possible, you must set these information (original template name
+ * and line number) yourself by passing them to the constructor. If some or all
+ * these information are not available from where you throw the exception, then
+ * this class will guess them automatically (when the line number is set to -1
+ * and/or the filename is set to null). As this is a costly operation, this
+ * can be disabled by passing false for both the filename and the line number
+ * when creating a new instance of this class.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Error extends Exception
+{
+    protected $lineno;
+    protected $filename;
+    protected $rawMessage;
+    protected $previous;
+
+    /**
+     * Constructor.
+     *
+     * Set both the line number and the filename to false to
+     * disable automatic guessing of the original template name
+     * and line number.
+     *
+     * Set the line number to -1 to enable its automatic guessing.
+     * Set the filename to null to enable its automatic guessing.
+     *
+     * By default, automatic guessing is enabled.
+     *
+     * @param string    $message  The error message
+     * @param int       $lineno   The template line where the error occurred
+     * @param string    $filename The template file name where the error occurred
+     * @param Exception $previous The previous exception
+     */
+    public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null)
+    {
+        if (PHP_VERSION_ID < 50300) {
+            $this->previous = $previous;
+            parent::__construct('');
+        } else {
+            parent::__construct('', 0, $previous);
+        }
+
+        $this->lineno = $lineno;
+        $this->filename = $filename;
+
+        if (-1 === $this->lineno || null === $this->filename) {
+            $this->guessTemplateInfo();
+        }
+
+        $this->rawMessage = $message;
+
+        $this->updateRepr();
+    }
+
+    /**
+     * Gets the raw message.
+     *
+     * @return string The raw message
+     */
+    public function getRawMessage()
+    {
+        return $this->rawMessage;
+    }
+
+    /**
+     * Gets the filename where the error occurred.
+     *
+     * @return string The filename
+     */
+    public function getTemplateFile()
+    {
+        return $this->filename;
+    }
+
+    /**
+     * Sets the filename where the error occurred.
+     *
+     * @param string $filename The filename
+     */
+    public function setTemplateFile($filename)
+    {
+        $this->filename = $filename;
+
+        $this->updateRepr();
+    }
+
+    /**
+     * Gets the template line where the error occurred.
+     *
+     * @return int The template line
+     */
+    public function getTemplateLine()
+    {
+        return $this->lineno;
+    }
+
+    /**
+     * Sets the template line where the error occurred.
+     *
+     * @param int $lineno The template line
+     */
+    public function setTemplateLine($lineno)
+    {
+        $this->lineno = $lineno;
+
+        $this->updateRepr();
+    }
+
+    public function guess()
+    {
+        $this->guessTemplateInfo();
+        $this->updateRepr();
+    }
+
+    /**
+     * For PHP < 5.3.0, provides access to the getPrevious() method.
+     *
+     * @param string $method    The method name
+     * @param array  $arguments The parameters to be passed to the method
+     *
+     * @return Exception The previous exception or null
+     *
+     * @throws BadMethodCallException
+     */
+    public function __call($method, $arguments)
+    {
+        if ('getprevious' == strtolower($method)) {
+            return $this->previous;
+        }
+
+        throw new BadMethodCallException(sprintf('Method "Twig_Error::%s()" does not exist.', $method));
+    }
+
+    public function appendMessage($rawMessage)
+    {
+        $this->rawMessage .= $rawMessage;
+        $this->updateRepr();
+    }
+
+    /**
+     * @internal
+     */
+    protected function updateRepr()
+    {
+        $this->message = $this->rawMessage;
+
+        $dot = false;
+        if ('.' === substr($this->message, -1)) {
+            $this->message = substr($this->message, 0, -1);
+            $dot = true;
+        }
+
+        $questionMark = false;
+        if ('?' === substr($this->message, -1)) {
+            $this->message = substr($this->message, 0, -1);
+            $questionMark = true;
+        }
+
+        if ($this->filename) {
+            if (is_string($this->filename) || (is_object($this->filename) && method_exists($this->filename, '__toString'))) {
+                $filename = sprintf('"%s"', $this->filename);
+            } else {
+                $filename = json_encode($this->filename);
+            }
+            $this->message .= sprintf(' in %s', $filename);
+        }
+
+        if ($this->lineno && $this->lineno >= 0) {
+            $this->message .= sprintf(' at line %d', $this->lineno);
+        }
+
+        if ($dot) {
+            $this->message .= '.';
+        }
+
+        if ($questionMark) {
+            $this->message .= '?';
+        }
+    }
+
+    /**
+     * @internal
+     */
+    protected function guessTemplateInfo()
+    {
+        $template = null;
+        $templateClass = null;
+
+        if (PHP_VERSION_ID >= 50306) {
+            $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT);
+        } else {
+            $backtrace = debug_backtrace();
+        }
+
+        foreach ($backtrace as $trace) {
+            if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) {
+                $currentClass = get_class($trace['object']);
+                $isEmbedContainer = 0 === strpos($templateClass, $currentClass);
+                if (null === $this->filename || ($this->filename == $trace['object']->getTemplateName() && !$isEmbedContainer)) {
+                    $template = $trace['object'];
+                    $templateClass = get_class($trace['object']);
+                }
+            }
+        }
+
+        // update template filename
+        if (null !== $template && null === $this->filename) {
+            $this->filename = $template->getTemplateName();
+        }
+
+        if (null === $template || $this->lineno > -1) {
+            return;
+        }
+
+        $r = new ReflectionObject($template);
+        $file = $r->getFileName();
+
+        // hhvm has a bug where eval'ed files comes out as the current directory
+        if (is_dir($file)) {
+            $file = '';
+        }
+
+        $exceptions = array($e = $this);
+        while (($e instanceof self || method_exists($e, 'getPrevious')) && $e = $e->getPrevious()) {
+            $exceptions[] = $e;
+        }
+
+        while ($e = array_pop($exceptions)) {
+            $traces = $e->getTrace();
+            array_unshift($traces, array('file' => $e->getFile(), 'line' => $e->getLine()));
+
+            while ($trace = array_shift($traces)) {
+                if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) {
+                    continue;
+                }
+
+                foreach ($template->getDebugInfo() as $codeLine => $templateLine) {
+                    if ($codeLine <= $trace['line']) {
+                        // update template line
+                        $this->lineno = $templateLine;
+
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Error.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/ExistsLoaderInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/ExistsLoaderInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/ExistsLoaderInterface.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Adds an exists() method for loaders.
+ *
+ * @author Florin Patan <florinpatan@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_ExistsLoaderInterface
+{
+    /**
+     * Check if we have the source code of a template, given its name.
+     *
+     * @param string $name The name of the template to check if we can load
+     *
+     * @return bool If the template source code is handled by this loader or not
+     */
+    public function exists($name);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/ExistsLoaderInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/ExpressionParser.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/ExpressionParser.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/ExpressionParser.php	(revision 2)
@@ -0,0 +1,647 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Parses expressions.
+ *
+ * This parser implements a "Precedence climbing" algorithm.
+ *
+ * @see http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm
+ * @see http://en.wikipedia.org/wiki/Operator-precedence_parser
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_ExpressionParser
+{
+    const OPERATOR_LEFT = 1;
+    const OPERATOR_RIGHT = 2;
+
+    protected $parser;
+    protected $unaryOperators;
+    protected $binaryOperators;
+
+    public function __construct(Twig_Parser $parser, array $unaryOperators, array $binaryOperators)
+    {
+        $this->parser = $parser;
+        $this->unaryOperators = $unaryOperators;
+        $this->binaryOperators = $binaryOperators;
+    }
+
+    public function parseExpression($precedence = 0)
+    {
+        $expr = $this->getPrimary();
+        $token = $this->parser->getCurrentToken();
+        while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) {
+            $op = $this->binaryOperators[$token->getValue()];
+            $this->parser->getStream()->next();
+
+            if (isset($op['callable'])) {
+                $expr = call_user_func($op['callable'], $this->parser, $expr);
+            } else {
+                $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence']);
+                $class = $op['class'];
+                $expr = new $class($expr, $expr1, $token->getLine());
+            }
+
+            $token = $this->parser->getCurrentToken();
+        }
+
+        if (0 === $precedence) {
+            return $this->parseConditionalExpression($expr);
+        }
+
+        return $expr;
+    }
+
+    protected function getPrimary()
+    {
+        $token = $this->parser->getCurrentToken();
+
+        if ($this->isUnary($token)) {
+            $operator = $this->unaryOperators[$token->getValue()];
+            $this->parser->getStream()->next();
+            $expr = $this->parseExpression($operator['precedence']);
+            $class = $operator['class'];
+
+            return $this->parsePostfixExpression(new $class($expr, $token->getLine()));
+        } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+            $this->parser->getStream()->next();
+            $expr = $this->parseExpression();
+            $this->parser->getStream()->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'An opened parenthesis is not properly closed');
+
+            return $this->parsePostfixExpression($expr);
+        }
+
+        return $this->parsePrimaryExpression();
+    }
+
+    protected function parseConditionalExpression($expr)
+    {
+        while ($this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, '?')) {
+            if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) {
+                $expr2 = $this->parseExpression();
+                if ($this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) {
+                    $expr3 = $this->parseExpression();
+                } else {
+                    $expr3 = new Twig_Node_Expression_Constant('', $this->parser->getCurrentToken()->getLine());
+                }
+            } else {
+                $expr2 = $expr;
+                $expr3 = $this->parseExpression();
+            }
+
+            $expr = new Twig_Node_Expression_Conditional($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine());
+        }
+
+        return $expr;
+    }
+
+    protected function isUnary(Twig_Token $token)
+    {
+        return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->unaryOperators[$token->getValue()]);
+    }
+
+    protected function isBinary(Twig_Token $token)
+    {
+        return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->binaryOperators[$token->getValue()]);
+    }
+
+    public function parsePrimaryExpression()
+    {
+        $token = $this->parser->getCurrentToken();
+        switch ($token->getType()) {
+            case Twig_Token::NAME_TYPE:
+                $this->parser->getStream()->next();
+                switch ($token->getValue()) {
+                    case 'true':
+                    case 'TRUE':
+                        $node = new Twig_Node_Expression_Constant(true, $token->getLine());
+                        break;
+
+                    case 'false':
+                    case 'FALSE':
+                        $node = new Twig_Node_Expression_Constant(false, $token->getLine());
+                        break;
+
+                    case 'none':
+                    case 'NONE':
+                    case 'null':
+                    case 'NULL':
+                        $node = new Twig_Node_Expression_Constant(null, $token->getLine());
+                        break;
+
+                    default:
+                        if ('(' === $this->parser->getCurrentToken()->getValue()) {
+                            $node = $this->getFunctionNode($token->getValue(), $token->getLine());
+                        } else {
+                            $node = new Twig_Node_Expression_Name($token->getValue(), $token->getLine());
+                        }
+                }
+                break;
+
+            case Twig_Token::NUMBER_TYPE:
+                $this->parser->getStream()->next();
+                $node = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
+                break;
+
+            case Twig_Token::STRING_TYPE:
+            case Twig_Token::INTERPOLATION_START_TYPE:
+                $node = $this->parseStringExpression();
+                break;
+
+            case Twig_Token::OPERATOR_TYPE:
+                if (preg_match(Twig_Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) {
+                    // in this context, string operators are variable names
+                    $this->parser->getStream()->next();
+                    $node = new Twig_Node_Expression_Name($token->getValue(), $token->getLine());
+                    break;
+                } elseif (isset($this->unaryOperators[$token->getValue()])) {
+                    $class = $this->unaryOperators[$token->getValue()]['class'];
+
+                    $ref = new ReflectionClass($class);
+                    $negClass = 'Twig_Node_Expression_Unary_Neg';
+                    $posClass = 'Twig_Node_Expression_Unary_Pos';
+                    if (!(in_array($ref->getName(), array($negClass, $posClass)) || $ref->isSubclassOf($negClass) || $ref->isSubclassOf($posClass))) {
+                        throw new Twig_Error_Syntax(sprintf('Unexpected unary operator "%s".', $token->getValue()), $token->getLine(), $this->parser->getFilename());
+                    }
+
+                    $this->parser->getStream()->next();
+                    $expr = $this->parsePrimaryExpression();
+
+                    $node = new $class($expr, $token->getLine());
+                    break;
+                }
+
+            default:
+                if ($token->test(Twig_Token::PUNCTUATION_TYPE, '[')) {
+                    $node = $this->parseArrayExpression();
+                } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '{')) {
+                    $node = $this->parseHashExpression();
+                } else {
+                    throw new Twig_Error_Syntax(sprintf('Unexpected token "%s" of value "%s".', Twig_Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getFilename());
+                }
+        }
+
+        return $this->parsePostfixExpression($node);
+    }
+
+    public function parseStringExpression()
+    {
+        $stream = $this->parser->getStream();
+
+        $nodes = array();
+        // a string cannot be followed by another string in a single expression
+        $nextCanBeString = true;
+        while (true) {
+            if ($nextCanBeString && $token = $stream->nextIf(Twig_Token::STRING_TYPE)) {
+                $nodes[] = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
+                $nextCanBeString = false;
+            } elseif ($stream->nextIf(Twig_Token::INTERPOLATION_START_TYPE)) {
+                $nodes[] = $this->parseExpression();
+                $stream->expect(Twig_Token::INTERPOLATION_END_TYPE);
+                $nextCanBeString = true;
+            } else {
+                break;
+            }
+        }
+
+        $expr = array_shift($nodes);
+        foreach ($nodes as $node) {
+            $expr = new Twig_Node_Expression_Binary_Concat($expr, $node, $node->getLine());
+        }
+
+        return $expr;
+    }
+
+    public function parseArrayExpression()
+    {
+        $stream = $this->parser->getStream();
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, '[', 'An array element was expected');
+
+        $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine());
+        $first = true;
+        while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) {
+            if (!$first) {
+                $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'An array element must be followed by a comma');
+
+                // trailing ,?
+                if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) {
+                    break;
+                }
+            }
+            $first = false;
+
+            $node->addElement($this->parseExpression());
+        }
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']', 'An opened array is not properly closed');
+
+        return $node;
+    }
+
+    public function parseHashExpression()
+    {
+        $stream = $this->parser->getStream();
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, '{', 'A hash element was expected');
+
+        $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine());
+        $first = true;
+        while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) {
+            if (!$first) {
+                $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'A hash value must be followed by a comma');
+
+                // trailing ,?
+                if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) {
+                    break;
+                }
+            }
+            $first = false;
+
+            // a hash key can be:
+            //
+            //  * a number -- 12
+            //  * a string -- 'a'
+            //  * a name, which is equivalent to a string -- a
+            //  * an expression, which must be enclosed in parentheses -- (1 + 2)
+            if (($token = $stream->nextIf(Twig_Token::STRING_TYPE)) || ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) || $token = $stream->nextIf(Twig_Token::NUMBER_TYPE)) {
+                $key = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
+            } elseif ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+                $key = $this->parseExpression();
+            } else {
+                $current = $stream->getCurrent();
+
+                throw new Twig_Error_Syntax(sprintf('A hash key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s".', Twig_Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $this->parser->getFilename());
+            }
+
+            $stream->expect(Twig_Token::PUNCTUATION_TYPE, ':', 'A hash key must be followed by a colon (:)');
+            $value = $this->parseExpression();
+
+            $node->addElement($value, $key);
+        }
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, '}', 'An opened hash is not properly closed');
+
+        return $node;
+    }
+
+    public function parsePostfixExpression($node)
+    {
+        while (true) {
+            $token = $this->parser->getCurrentToken();
+            if ($token->getType() == Twig_Token::PUNCTUATION_TYPE) {
+                if ('.' == $token->getValue() || '[' == $token->getValue()) {
+                    $node = $this->parseSubscriptExpression($node);
+                } elseif ('|' == $token->getValue()) {
+                    $node = $this->parseFilterExpression($node);
+                } else {
+                    break;
+                }
+            } else {
+                break;
+            }
+        }
+
+        return $node;
+    }
+
+    public function getFunctionNode($name, $line)
+    {
+        switch ($name) {
+            case 'parent':
+                $this->parseArguments();
+                if (!count($this->parser->getBlockStack())) {
+                    throw new Twig_Error_Syntax('Calling "parent" outside a block is forbidden.', $line, $this->parser->getFilename());
+                }
+
+                if (!$this->parser->getParent() && !$this->parser->hasTraits()) {
+                    throw new Twig_Error_Syntax('Calling "parent" on a template that does not extend nor "use" another template is forbidden.', $line, $this->parser->getFilename());
+                }
+
+                return new Twig_Node_Expression_Parent($this->parser->peekBlockStack(), $line);
+            case 'block':
+                return new Twig_Node_Expression_BlockReference($this->parseArguments()->getNode(0), false, $line);
+            case 'attribute':
+                $args = $this->parseArguments();
+                if (count($args) < 2) {
+                    throw new Twig_Error_Syntax('The "attribute" function takes at least two arguments (the variable and the attributes).', $line, $this->parser->getFilename());
+                }
+
+                return new Twig_Node_Expression_GetAttr($args->getNode(0), $args->getNode(1), count($args) > 2 ? $args->getNode(2) : null, Twig_Template::ANY_CALL, $line);
+            default:
+                if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) {
+                    $arguments = new Twig_Node_Expression_Array(array(), $line);
+                    foreach ($this->parseArguments() as $n) {
+                        $arguments->addElement($n);
+                    }
+
+                    $node = new Twig_Node_Expression_MethodCall($alias['node'], $alias['name'], $arguments, $line);
+                    $node->setAttribute('safe', true);
+
+                    return $node;
+                }
+
+                $args = $this->parseArguments(true);
+                $class = $this->getFunctionNodeClass($name, $line);
+
+                return new $class($name, $args, $line);
+        }
+    }
+
+    public function parseSubscriptExpression($node)
+    {
+        $stream = $this->parser->getStream();
+        $token = $stream->next();
+        $lineno = $token->getLine();
+        $arguments = new Twig_Node_Expression_Array(array(), $lineno);
+        $type = Twig_Template::ANY_CALL;
+        if ($token->getValue() == '.') {
+            $token = $stream->next();
+            if (
+                $token->getType() == Twig_Token::NAME_TYPE
+                ||
+                $token->getType() == Twig_Token::NUMBER_TYPE
+                ||
+                ($token->getType() == Twig_Token::OPERATOR_TYPE && preg_match(Twig_Lexer::REGEX_NAME, $token->getValue()))
+            ) {
+                $arg = new Twig_Node_Expression_Constant($token->getValue(), $lineno);
+
+                if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+                    $type = Twig_Template::METHOD_CALL;
+                    foreach ($this->parseArguments() as $n) {
+                        $arguments->addElement($n);
+                    }
+                }
+            } else {
+                throw new Twig_Error_Syntax('Expected name or number', $lineno, $this->parser->getFilename());
+            }
+
+            if ($node instanceof Twig_Node_Expression_Name && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) {
+                if (!$arg instanceof Twig_Node_Expression_Constant) {
+                    throw new Twig_Error_Syntax(sprintf('Dynamic macro names are not supported (called on "%s").', $node->getAttribute('name')), $token->getLine(), $this->parser->getFilename());
+                }
+
+                $name = $arg->getAttribute('value');
+
+                if ($this->parser->isReservedMacroName($name)) {
+                    throw new Twig_Error_Syntax(sprintf('"%s" cannot be called as macro as it is a reserved keyword.', $name), $token->getLine(), $this->parser->getFilename());
+                }
+
+                $node = new Twig_Node_Expression_MethodCall($node, 'get'.$name, $arguments, $lineno);
+                $node->setAttribute('safe', true);
+
+                return $node;
+            }
+        } else {
+            $type = Twig_Template::ARRAY_CALL;
+
+            // slice?
+            $slice = false;
+            if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ':')) {
+                $slice = true;
+                $arg = new Twig_Node_Expression_Constant(0, $token->getLine());
+            } else {
+                $arg = $this->parseExpression();
+            }
+
+            if ($stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) {
+                $slice = true;
+            }
+
+            if ($slice) {
+                if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) {
+                    $length = new Twig_Node_Expression_Constant(null, $token->getLine());
+                } else {
+                    $length = $this->parseExpression();
+                }
+
+                $class = $this->getFilterNodeClass('slice', $token->getLine());
+                $arguments = new Twig_Node(array($arg, $length));
+                $filter = new $class($node, new Twig_Node_Expression_Constant('slice', $token->getLine()), $arguments, $token->getLine());
+
+                $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']');
+
+                return $filter;
+            }
+
+            $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']');
+        }
+
+        return new Twig_Node_Expression_GetAttr($node, $arg, $arguments, $type, $lineno);
+    }
+
+    public function parseFilterExpression($node)
+    {
+        $this->parser->getStream()->next();
+
+        return $this->parseFilterExpressionRaw($node);
+    }
+
+    public function parseFilterExpressionRaw($node, $tag = null)
+    {
+        while (true) {
+            $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE);
+
+            $name = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
+            if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+                $arguments = new Twig_Node();
+            } else {
+                $arguments = $this->parseArguments(true);
+            }
+
+            $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine());
+
+            $node = new $class($node, $name, $arguments, $token->getLine(), $tag);
+
+            if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '|')) {
+                break;
+            }
+
+            $this->parser->getStream()->next();
+        }
+
+        return $node;
+    }
+
+    /**
+     * Parses arguments.
+     *
+     * @param bool $namedArguments Whether to allow named arguments or not
+     * @param bool $definition     Whether we are parsing arguments for a function definition
+     *
+     * @return Twig_Node
+     *
+     * @throws Twig_Error_Syntax
+     */
+    public function parseArguments($namedArguments = false, $definition = false)
+    {
+        $args = array();
+        $stream = $this->parser->getStream();
+
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, '(', 'A list of arguments must begin with an opening parenthesis');
+        while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ')')) {
+            if (!empty($args)) {
+                $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');
+            }
+
+            if ($definition) {
+                $token = $stream->expect(Twig_Token::NAME_TYPE, null, 'An argument must be a name');
+                $value = new Twig_Node_Expression_Name($token->getValue(), $this->parser->getCurrentToken()->getLine());
+            } else {
+                $value = $this->parseExpression();
+            }
+
+            $name = null;
+            if ($namedArguments && $token = $stream->nextIf(Twig_Token::OPERATOR_TYPE, '=')) {
+                if (!$value instanceof Twig_Node_Expression_Name) {
+                    throw new Twig_Error_Syntax(sprintf('A parameter name must be a string, "%s" given.', get_class($value)), $token->getLine(), $this->parser->getFilename());
+                }
+                $name = $value->getAttribute('name');
+
+                if ($definition) {
+                    $value = $this->parsePrimaryExpression();
+
+                    if (!$this->checkConstantExpression($value)) {
+                        throw new Twig_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename());
+                    }
+                } else {
+                    $value = $this->parseExpression();
+                }
+            }
+
+            if ($definition) {
+                if (null === $name) {
+                    $name = $value->getAttribute('name');
+                    $value = new Twig_Node_Expression_Constant(null, $this->parser->getCurrentToken()->getLine());
+                }
+                $args[$name] = $value;
+            } else {
+                if (null === $name) {
+                    $args[] = $value;
+                } else {
+                    $args[$name] = $value;
+                }
+            }
+        }
+        $stream->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis');
+
+        return new Twig_Node($args);
+    }
+
+    public function parseAssignmentExpression()
+    {
+        $targets = array();
+        while (true) {
+            $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE, null, 'Only variables can be assigned to');
+            if (in_array($token->getValue(), array('true', 'false', 'none'))) {
+                throw new Twig_Error_Syntax(sprintf('You cannot assign a value to "%s".', $token->getValue()), $token->getLine(), $this->parser->getFilename());
+            }
+            $targets[] = new Twig_Node_Expression_AssignName($token->getValue(), $token->getLine());
+
+            if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
+                break;
+            }
+        }
+
+        return new Twig_Node($targets);
+    }
+
+    public function parseMultitargetExpression()
+    {
+        $targets = array();
+        while (true) {
+            $targets[] = $this->parseExpression();
+            if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
+                break;
+            }
+        }
+
+        return new Twig_Node($targets);
+    }
+
+    protected function getFunctionNodeClass($name, $line)
+    {
+        $env = $this->parser->getEnvironment();
+
+        if (false === $function = $env->getFunction($name)) {
+            $e = new Twig_Error_Syntax(sprintf('Unknown "%s" function.', $name), $line, $this->parser->getFilename());
+            $e->addSuggestions($name, array_keys($env->getFunctions()));
+
+            throw $e;
+        }
+
+        if ($function instanceof Twig_SimpleFunction && $function->isDeprecated()) {
+            $message = sprintf('Twig Function "%s" is deprecated', $function->getName());
+            if (!is_bool($function->getDeprecatedVersion())) {
+                $message .= sprintf(' since version %s', $function->getDeprecatedVersion());
+            }
+            if ($function->getAlternative()) {
+                $message .= sprintf('. Use "%s" instead', $function->getAlternative());
+            }
+            $message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line);
+
+            @trigger_error($message, E_USER_DEPRECATED);
+        }
+
+        if ($function instanceof Twig_SimpleFunction) {
+            return $function->getNodeClass();
+        }
+
+        return $function instanceof Twig_Function_Node ? $function->getClass() : 'Twig_Node_Expression_Function';
+    }
+
+    protected function getFilterNodeClass($name, $line)
+    {
+        $env = $this->parser->getEnvironment();
+
+        if (false === $filter = $env->getFilter($name)) {
+            $e = new Twig_Error_Syntax(sprintf('Unknown "%s" filter.', $name), $line, $this->parser->getFilename());
+            $e->addSuggestions($name, array_keys($env->getFilters()));
+
+            throw $e;
+        }
+
+        if ($filter instanceof Twig_SimpleFilter && $filter->isDeprecated()) {
+            $message = sprintf('Twig Filter "%s" is deprecated', $filter->getName());
+            if (!is_bool($filter->getDeprecatedVersion())) {
+                $message .= sprintf(' since version %s', $filter->getDeprecatedVersion());
+            }
+            if ($filter->getAlternative()) {
+                $message .= sprintf('. Use "%s" instead', $filter->getAlternative());
+            }
+            $message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line);
+
+            @trigger_error($message, E_USER_DEPRECATED);
+        }
+
+        if ($filter instanceof Twig_SimpleFilter) {
+            return $filter->getNodeClass();
+        }
+
+        return $filter instanceof Twig_Filter_Node ? $filter->getClass() : 'Twig_Node_Expression_Filter';
+    }
+
+    // checks that the node only contains "constant" elements
+    protected function checkConstantExpression(Twig_NodeInterface $node)
+    {
+        if (!($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array
+            || $node instanceof Twig_Node_Expression_Unary_Neg || $node instanceof Twig_Node_Expression_Unary_Pos
+        )) {
+            return false;
+        }
+
+        foreach ($node as $n) {
+            if (!$this->checkConstantExpression($n)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/ExpressionParser.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Core.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Core.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Core.php	(revision 2)
@@ -0,0 +1,1548 @@
+<?php
+
+if (!defined('ENT_SUBSTITUTE')) {
+    // use 0 as hhvm does not support several flags yet
+    define('ENT_SUBSTITUTE', 0);
+}
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_Core extends Twig_Extension
+{
+    protected $dateFormats = array('F j, Y H:i', '%d days');
+    protected $numberFormat = array(0, '.', ',');
+    protected $timezone = null;
+    protected $escapers = array();
+
+    /**
+     * Defines a new escaper to be used via the escape filter.
+     *
+     * @param string   $strategy The strategy name that should be used as a strategy in the escape call
+     * @param callable $callable A valid PHP callable
+     */
+    public function setEscaper($strategy, $callable)
+    {
+        $this->escapers[$strategy] = $callable;
+    }
+
+    /**
+     * Gets all defined escapers.
+     *
+     * @return array An array of escapers
+     */
+    public function getEscapers()
+    {
+        return $this->escapers;
+    }
+
+    /**
+     * Sets the default format to be used by the date filter.
+     *
+     * @param string $format             The default date format string
+     * @param string $dateIntervalFormat The default date interval format string
+     */
+    public function setDateFormat($format = null, $dateIntervalFormat = null)
+    {
+        if (null !== $format) {
+            $this->dateFormats[0] = $format;
+        }
+
+        if (null !== $dateIntervalFormat) {
+            $this->dateFormats[1] = $dateIntervalFormat;
+        }
+    }
+
+    /**
+     * Gets the default format to be used by the date filter.
+     *
+     * @return array The default date format string and the default date interval format string
+     */
+    public function getDateFormat()
+    {
+        return $this->dateFormats;
+    }
+
+    /**
+     * Sets the default timezone to be used by the date filter.
+     *
+     * @param DateTimeZone|string $timezone The default timezone string or a DateTimeZone object
+     */
+    public function setTimezone($timezone)
+    {
+        $this->timezone = $timezone instanceof DateTimeZone ? $timezone : new DateTimeZone($timezone);
+    }
+
+    /**
+     * Gets the default timezone to be used by the date filter.
+     *
+     * @return DateTimeZone The default timezone currently in use
+     */
+    public function getTimezone()
+    {
+        if (null === $this->timezone) {
+            $this->timezone = new DateTimeZone(date_default_timezone_get());
+        }
+
+        return $this->timezone;
+    }
+
+    /**
+     * Sets the default format to be used by the number_format filter.
+     *
+     * @param int    $decimal      The number of decimal places to use.
+     * @param string $decimalPoint The character(s) to use for the decimal point.
+     * @param string $thousandSep  The character(s) to use for the thousands separator.
+     */
+    public function setNumberFormat($decimal, $decimalPoint, $thousandSep)
+    {
+        $this->numberFormat = array($decimal, $decimalPoint, $thousandSep);
+    }
+
+    /**
+     * Get the default format used by the number_format filter.
+     *
+     * @return array The arguments for number_format()
+     */
+    public function getNumberFormat()
+    {
+        return $this->numberFormat;
+    }
+
+    public function getTokenParsers()
+    {
+        return array(
+            new Twig_TokenParser_For(),
+            new Twig_TokenParser_If(),
+            new Twig_TokenParser_Extends(),
+            new Twig_TokenParser_Include(),
+            new Twig_TokenParser_Block(),
+            new Twig_TokenParser_Use(),
+            new Twig_TokenParser_Filter(),
+            new Twig_TokenParser_Macro(),
+            new Twig_TokenParser_Import(),
+            new Twig_TokenParser_From(),
+            new Twig_TokenParser_Set(),
+            new Twig_TokenParser_Spaceless(),
+            new Twig_TokenParser_Flush(),
+            new Twig_TokenParser_Do(),
+            new Twig_TokenParser_Embed(),
+        );
+    }
+
+    public function getFilters()
+    {
+        $filters = array(
+            // formatting filters
+            new Twig_SimpleFilter('date', 'twig_date_format_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('date_modify', 'twig_date_modify_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('format', 'sprintf'),
+            new Twig_SimpleFilter('replace', 'twig_replace_filter'),
+            new Twig_SimpleFilter('number_format', 'twig_number_format_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('abs', 'abs'),
+            new Twig_SimpleFilter('round', 'twig_round'),
+
+            // encoding
+            new Twig_SimpleFilter('url_encode', 'twig_urlencode_filter'),
+            new Twig_SimpleFilter('json_encode', 'twig_jsonencode_filter'),
+            new Twig_SimpleFilter('convert_encoding', 'twig_convert_encoding'),
+
+            // string filters
+            new Twig_SimpleFilter('title', 'twig_title_string_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('capitalize', 'twig_capitalize_string_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('upper', 'strtoupper'),
+            new Twig_SimpleFilter('lower', 'strtolower'),
+            new Twig_SimpleFilter('striptags', 'strip_tags'),
+            new Twig_SimpleFilter('trim', 'trim'),
+            new Twig_SimpleFilter('nl2br', 'nl2br', array('pre_escape' => 'html', 'is_safe' => array('html'))),
+
+            // array helpers
+            new Twig_SimpleFilter('join', 'twig_join_filter'),
+            new Twig_SimpleFilter('split', 'twig_split_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('sort', 'twig_sort_filter'),
+            new Twig_SimpleFilter('merge', 'twig_array_merge'),
+            new Twig_SimpleFilter('batch', 'twig_array_batch'),
+
+            // string/array filters
+            new Twig_SimpleFilter('reverse', 'twig_reverse_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('length', 'twig_length_filter', array('needs_environment' => true)),
+            new Twig_SimpleFilter('slice', 'twig_slice', array('needs_environment' => true)),
+            new Twig_SimpleFilter('first', 'twig_first', array('needs_environment' => true)),
+            new Twig_SimpleFilter('last', 'twig_last', array('needs_environment' => true)),
+
+            // iteration and runtime
+            new Twig_SimpleFilter('default', '_twig_default_filter', array('node_class' => 'Twig_Node_Expression_Filter_Default')),
+            new Twig_SimpleFilter('keys', 'twig_get_array_keys_filter'),
+
+            // escaping
+            new Twig_SimpleFilter('escape', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')),
+            new Twig_SimpleFilter('e', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')),
+        );
+
+        if (function_exists('mb_get_info')) {
+            $filters[] = new Twig_SimpleFilter('upper', 'twig_upper_filter', array('needs_environment' => true));
+            $filters[] = new Twig_SimpleFilter('lower', 'twig_lower_filter', array('needs_environment' => true));
+        }
+
+        return $filters;
+    }
+
+    public function getFunctions()
+    {
+        return array(
+            new Twig_SimpleFunction('max', 'max'),
+            new Twig_SimpleFunction('min', 'min'),
+            new Twig_SimpleFunction('range', 'range'),
+            new Twig_SimpleFunction('constant', 'twig_constant'),
+            new Twig_SimpleFunction('cycle', 'twig_cycle'),
+            new Twig_SimpleFunction('random', 'twig_random', array('needs_environment' => true)),
+            new Twig_SimpleFunction('date', 'twig_date_converter', array('needs_environment' => true)),
+            new Twig_SimpleFunction('include', 'twig_include', array('needs_environment' => true, 'needs_context' => true, 'is_safe' => array('all'))),
+            new Twig_SimpleFunction('source', 'twig_source', array('needs_environment' => true, 'is_safe' => array('all'))),
+        );
+    }
+
+    public function getTests()
+    {
+        return array(
+            new Twig_SimpleTest('even', null, array('node_class' => 'Twig_Node_Expression_Test_Even')),
+            new Twig_SimpleTest('odd', null, array('node_class' => 'Twig_Node_Expression_Test_Odd')),
+            new Twig_SimpleTest('defined', null, array('node_class' => 'Twig_Node_Expression_Test_Defined')),
+            new Twig_SimpleTest('sameas', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas', 'deprecated' => '1.21', 'alternative' => 'same as')),
+            new Twig_SimpleTest('same as', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')),
+            new Twig_SimpleTest('none', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
+            new Twig_SimpleTest('null', null, array('node_class' => 'Twig_Node_Expression_Test_Null')),
+            new Twig_SimpleTest('divisibleby', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby', 'deprecated' => '1.21', 'alternative' => 'divisible by')),
+            new Twig_SimpleTest('divisible by', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')),
+            new Twig_SimpleTest('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')),
+            new Twig_SimpleTest('empty', 'twig_test_empty'),
+            new Twig_SimpleTest('iterable', 'twig_test_iterable'),
+        );
+    }
+
+    public function getOperators()
+    {
+        return array(
+            array(
+                'not' => array('precedence' => 50, 'class' => 'Twig_Node_Expression_Unary_Not'),
+                '-' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Neg'),
+                '+' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Pos'),
+            ),
+            array(
+                'or' => array('precedence' => 10, 'class' => 'Twig_Node_Expression_Binary_Or', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'and' => array('precedence' => 15, 'class' => 'Twig_Node_Expression_Binary_And', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'b-or' => array('precedence' => 16, 'class' => 'Twig_Node_Expression_Binary_BitwiseOr', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'b-xor' => array('precedence' => 17, 'class' => 'Twig_Node_Expression_Binary_BitwiseXor', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'b-and' => array('precedence' => 18, 'class' => 'Twig_Node_Expression_Binary_BitwiseAnd', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '==' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Equal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '!=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '<' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Less', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '>' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Greater', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '>=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '<=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'not in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotIn', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_In', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'matches' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Matches', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'starts with' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_StartsWith', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'ends with' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_EndsWith', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '..' => array('precedence' => 25, 'class' => 'Twig_Node_Expression_Binary_Range', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '+' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Add', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '-' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Sub', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '~' => array('precedence' => 40, 'class' => 'Twig_Node_Expression_Binary_Concat', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '*' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mul', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '/' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Div', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '//' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_FloorDiv', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '%' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'is' => array('precedence' => 100, 'callable' => array($this, 'parseTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                'is not' => array('precedence' => 100, 'callable' => array($this, 'parseNotTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT),
+                '**' => array('precedence' => 200, 'class' => 'Twig_Node_Expression_Binary_Power', 'associativity' => Twig_ExpressionParser::OPERATOR_RIGHT),
+                '??' => array('precedence' => 300, 'class' => 'Twig_Node_Expression_NullCoalesce', 'associativity' => Twig_ExpressionParser::OPERATOR_RIGHT),
+            ),
+        );
+    }
+
+    public function parseNotTestExpression(Twig_Parser $parser, Twig_NodeInterface $node)
+    {
+        return new Twig_Node_Expression_Unary_Not($this->parseTestExpression($parser, $node), $parser->getCurrentToken()->getLine());
+    }
+
+    public function parseTestExpression(Twig_Parser $parser, Twig_NodeInterface $node)
+    {
+        $stream = $parser->getStream();
+        list($name, $test) = $this->getTest($parser, $node->getLine());
+
+        if ($test instanceof Twig_SimpleTest && $test->isDeprecated()) {
+            $message = sprintf('Twig Test "%s" is deprecated', $name);
+            if (!is_bool($test->getDeprecatedVersion())) {
+                $message .= sprintf(' since version %s', $test->getDeprecatedVersion());
+            }
+            if ($test->getAlternative()) {
+                $message .= sprintf('. Use "%s" instead', $test->getAlternative());
+            }
+            $message .= sprintf(' in %s at line %d.', $stream->getFilename(), $stream->getCurrent()->getLine());
+
+            @trigger_error($message, E_USER_DEPRECATED);
+        }
+
+        $class = $this->getTestNodeClass($parser, $test);
+        $arguments = null;
+        if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+            $arguments = $parser->getExpressionParser()->parseArguments(true);
+        }
+
+        return new $class($node, $name, $arguments, $parser->getCurrentToken()->getLine());
+    }
+
+    protected function getTest(Twig_Parser $parser, $line)
+    {
+        $stream = $parser->getStream();
+        $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+        $env = $parser->getEnvironment();
+
+        if ($test = $env->getTest($name)) {
+            return array($name, $test);
+        }
+
+        if ($stream->test(Twig_Token::NAME_TYPE)) {
+            // try 2-words tests
+            $name = $name.' '.$parser->getCurrentToken()->getValue();
+
+            if ($test = $env->getTest($name)) {
+                $parser->getStream()->next();
+
+                return array($name, $test);
+            }
+        }
+
+        $e = new Twig_Error_Syntax(sprintf('Unknown "%s" test.', $name), $line, $parser->getFilename());
+        $e->addSuggestions($name, array_keys($env->getTests()));
+
+        throw $e;
+    }
+
+    protected function getTestNodeClass(Twig_Parser $parser, $test)
+    {
+        if ($test instanceof Twig_SimpleTest) {
+            return $test->getNodeClass();
+        }
+
+        return $test instanceof Twig_Test_Node ? $test->getClass() : 'Twig_Node_Expression_Test';
+    }
+
+    public function getName()
+    {
+        return 'core';
+    }
+}
+
+/**
+ * Cycles over a value.
+ *
+ * @param ArrayAccess|array $values   An array or an ArrayAccess instance
+ * @param int               $position The cycle position
+ *
+ * @return string The next value in the cycle
+ */
+function twig_cycle($values, $position)
+{
+    if (!is_array($values) && !$values instanceof ArrayAccess) {
+        return $values;
+    }
+
+    return $values[$position % count($values)];
+}
+
+/**
+ * Returns a random value depending on the supplied parameter type:
+ * - a random item from a Traversable or array
+ * - a random character from a string
+ * - a random integer between 0 and the integer parameter.
+ *
+ * @param Twig_Environment             $env    A Twig_Environment instance
+ * @param Traversable|array|int|string $values The values to pick a random item from
+ *
+ * @throws Twig_Error_Runtime When $values is an empty array (does not apply to an empty string which is returned as is).
+ *
+ * @return mixed A random value from the given sequence
+ */
+function twig_random(Twig_Environment $env, $values = null)
+{
+    if (null === $values) {
+        return mt_rand();
+    }
+
+    if (is_int($values) || is_float($values)) {
+        return $values < 0 ? mt_rand($values, 0) : mt_rand(0, $values);
+    }
+
+    if ($values instanceof Traversable) {
+        $values = iterator_to_array($values);
+    } elseif (is_string($values)) {
+        if ('' === $values) {
+            return '';
+        }
+        if (null !== $charset = $env->getCharset()) {
+            if ('UTF-8' !== $charset) {
+                $values = twig_convert_encoding($values, 'UTF-8', $charset);
+            }
+
+            // unicode version of str_split()
+            // split at all positions, but not after the start and not before the end
+            $values = preg_split('/(?<!^)(?!$)/u', $values);
+
+            if ('UTF-8' !== $charset) {
+                foreach ($values as $i => $value) {
+                    $values[$i] = twig_convert_encoding($value, $charset, 'UTF-8');
+                }
+            }
+        } else {
+            return $values[mt_rand(0, strlen($values) - 1)];
+        }
+    }
+
+    if (!is_array($values)) {
+        return $values;
+    }
+
+    if (0 === count($values)) {
+        throw new Twig_Error_Runtime('The random function cannot pick from an empty array.');
+    }
+
+    return $values[array_rand($values, 1)];
+}
+
+/**
+ * Converts a date to the given format.
+ *
+ * <pre>
+ *   {{ post.published_at|date("m/d/Y") }}
+ * </pre>
+ *
+ * @param Twig_Environment                               $env      A Twig_Environment instance
+ * @param DateTime|DateTimeInterface|DateInterval|string $date     A date
+ * @param string|null                                    $format   The target format, null to use the default
+ * @param DateTimeZone|string|null|false                 $timezone The target timezone, null to use the default, false to leave unchanged
+ *
+ * @return string The formatted date
+ */
+function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $timezone = null)
+{
+    if (null === $format) {
+        $formats = $env->getExtension('core')->getDateFormat();
+        $format = $date instanceof DateInterval ? $formats[1] : $formats[0];
+    }
+
+    if ($date instanceof DateInterval) {
+        return $date->format($format);
+    }
+
+    return twig_date_converter($env, $date, $timezone)->format($format);
+}
+
+/**
+ * Returns a new date object modified.
+ *
+ * <pre>
+ *   {{ post.published_at|date_modify("-1day")|date("m/d/Y") }}
+ * </pre>
+ *
+ * @param Twig_Environment $env      A Twig_Environment instance
+ * @param DateTime|string  $date     A date
+ * @param string           $modifier A modifier string
+ *
+ * @return DateTime A new date object
+ */
+function twig_date_modify_filter(Twig_Environment $env, $date, $modifier)
+{
+    $date = twig_date_converter($env, $date, false);
+    $resultDate = $date->modify($modifier);
+
+    // This is a hack to ensure PHP 5.2 support and support for DateTimeImmutable
+    // DateTime::modify does not return the modified DateTime object < 5.3.0
+    // and DateTimeImmutable does not modify $date.
+    return null === $resultDate ? $date : $resultDate;
+}
+
+/**
+ * Converts an input to a DateTime instance.
+ *
+ * <pre>
+ *    {% if date(user.created_at) < date('+2days') %}
+ *      {# do something #}
+ *    {% endif %}
+ * </pre>
+ *
+ * @param Twig_Environment                       $env      A Twig_Environment instance
+ * @param DateTime|DateTimeInterface|string|null $date     A date
+ * @param DateTimeZone|string|null|false         $timezone The target timezone, null to use the default, false to leave unchanged
+ *
+ * @return DateTime A DateTime instance
+ */
+function twig_date_converter(Twig_Environment $env, $date = null, $timezone = null)
+{
+    // determine the timezone
+    if (false !== $timezone) {
+        if (null === $timezone) {
+            $timezone = $env->getExtension('core')->getTimezone();
+        } elseif (!$timezone instanceof DateTimeZone) {
+            $timezone = new DateTimeZone($timezone);
+        }
+    }
+
+    // immutable dates
+    if ($date instanceof DateTimeImmutable) {
+        return false !== $timezone ? $date->setTimezone($timezone) : $date;
+    }
+
+    if ($date instanceof DateTime || $date instanceof DateTimeInterface) {
+        $date = clone $date;
+        if (false !== $timezone) {
+            $date->setTimezone($timezone);
+        }
+
+        return $date;
+    }
+
+    if (null === $date || 'now' === $date) {
+        return new DateTime($date, false !== $timezone ? $timezone : $env->getExtension('core')->getTimezone());
+    }
+
+    $asString = (string) $date;
+    if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) {
+        $date = new DateTime('@'.$date);
+    } else {
+        $date = new DateTime($date, $env->getExtension('core')->getTimezone());
+    }
+
+    if (false !== $timezone) {
+        $date->setTimezone($timezone);
+    }
+
+    return $date;
+}
+
+/**
+ * Replaces strings within a string.
+ *
+ * @param string            $str  String to replace in
+ * @param array|Traversable $from Replace values
+ * @param string|null       $to   Replace to, deprecated (@see http://php.net/manual/en/function.strtr.php)
+ *
+ * @return string
+ */
+function twig_replace_filter($str, $from, $to = null)
+{
+    if ($from instanceof Traversable) {
+        $from = iterator_to_array($from);
+    } elseif (is_string($from) && is_string($to)) {
+        @trigger_error('Using "replace" with character by character replacement is deprecated since version 1.22 and will be removed in Twig 2.0', E_USER_DEPRECATED);
+
+        return strtr($str, $from, $to);
+    } elseif (!is_array($from)) {
+        throw new Twig_Error_Runtime(sprintf('The "replace" filter expects an array or "Traversable" as replace values, got "%s".',is_object($from) ? get_class($from) : gettype($from)));
+    }
+
+    return strtr($str, $from);
+}
+
+/**
+ * Rounds a number.
+ *
+ * @param int|float $value     The value to round
+ * @param int|float $precision The rounding precision
+ * @param string    $method    The method to use for rounding
+ *
+ * @return int|float The rounded number
+ */
+function twig_round($value, $precision = 0, $method = 'common')
+{
+    if ('common' == $method) {
+        return round($value, $precision);
+    }
+
+    if ('ceil' != $method && 'floor' != $method) {
+        throw new Twig_Error_Runtime('The round filter only supports the "common", "ceil", and "floor" methods.');
+    }
+
+    return $method($value * pow(10, $precision)) / pow(10, $precision);
+}
+
+/**
+ * Number format filter.
+ *
+ * All of the formatting options can be left null, in that case the defaults will
+ * be used.  Supplying any of the parameters will override the defaults set in the
+ * environment object.
+ *
+ * @param Twig_Environment $env          A Twig_Environment instance
+ * @param mixed            $number       A float/int/string of the number to format
+ * @param int              $decimal      The number of decimal points to display.
+ * @param string           $decimalPoint The character(s) to use for the decimal point.
+ * @param string           $thousandSep  The character(s) to use for the thousands separator.
+ *
+ * @return string The formatted number
+ */
+function twig_number_format_filter(Twig_Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null)
+{
+    $defaults = $env->getExtension('core')->getNumberFormat();
+    if (null === $decimal) {
+        $decimal = $defaults[0];
+    }
+
+    if (null === $decimalPoint) {
+        $decimalPoint = $defaults[1];
+    }
+
+    if (null === $thousandSep) {
+        $thousandSep = $defaults[2];
+    }
+
+    return number_format((float) $number, $decimal, $decimalPoint, $thousandSep);
+}
+
+/**
+ * URL encodes (RFC 3986) a string as a path segment or an array as a query string.
+ *
+ * @param string|array $url A URL or an array of query parameters
+ *
+ * @return string The URL encoded value
+ */
+function twig_urlencode_filter($url)
+{
+    if (is_array($url)) {
+        if (defined('PHP_QUERY_RFC3986')) {
+            return http_build_query($url, '', '&', PHP_QUERY_RFC3986);
+        }
+
+        return http_build_query($url, '', '&');
+    }
+
+    return rawurlencode($url);
+}
+
+if (PHP_VERSION_ID < 50300) {
+    /**
+     * JSON encodes a variable.
+     *
+     * @param mixed $value   The value to encode.
+     * @param int   $options Not used on PHP 5.2.x
+     *
+     * @return mixed The JSON encoded value
+     */
+    function twig_jsonencode_filter($value, $options = 0)
+    {
+        if ($value instanceof Twig_Markup) {
+            $value = (string) $value;
+        } elseif (is_array($value)) {
+            array_walk_recursive($value, '_twig_markup2string');
+        }
+
+        return json_encode($value);
+    }
+} else {
+    /**
+     * JSON encodes a variable.
+     *
+     * @param mixed $value   The value to encode.
+     * @param int   $options Bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
+     *
+     * @return mixed The JSON encoded value
+     */
+    function twig_jsonencode_filter($value, $options = 0)
+    {
+        if ($value instanceof Twig_Markup) {
+            $value = (string) $value;
+        } elseif (is_array($value)) {
+            array_walk_recursive($value, '_twig_markup2string');
+        }
+
+        return json_encode($value, $options);
+    }
+}
+
+function _twig_markup2string(&$value)
+{
+    if ($value instanceof Twig_Markup) {
+        $value = (string) $value;
+    }
+}
+
+/**
+ * Merges an array with another one.
+ *
+ * <pre>
+ *  {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %}
+ *
+ *  {% set items = items|merge({ 'peugeot': 'car' }) %}
+ *
+ *  {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car' } #}
+ * </pre>
+ *
+ * @param array|Traversable $arr1 An array
+ * @param array|Traversable $arr2 An array
+ *
+ * @return array The merged array
+ */
+function twig_array_merge($arr1, $arr2)
+{
+    if ($arr1 instanceof Traversable) {
+        $arr1 = iterator_to_array($arr1);
+    } elseif (!is_array($arr1)) {
+        throw new Twig_Error_Runtime(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as first argument.', gettype($arr1)));
+    }
+
+    if ($arr2 instanceof Traversable) {
+        $arr2 = iterator_to_array($arr2);
+    } elseif (!is_array($arr2)) {
+        throw new Twig_Error_Runtime(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as second argument.', gettype($arr2)));
+    }
+
+    return array_merge($arr1, $arr2);
+}
+
+/**
+ * Slices a variable.
+ *
+ * @param Twig_Environment $env          A Twig_Environment instance
+ * @param mixed            $item         A variable
+ * @param int              $start        Start of the slice
+ * @param int              $length       Size of the slice
+ * @param bool             $preserveKeys Whether to preserve key or not (when the input is an array)
+ *
+ * @return mixed The sliced variable
+ */
+function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false)
+{
+    if ($item instanceof Traversable) {
+        if ($item instanceof IteratorAggregate) {
+            $item = $item->getIterator();
+        }
+
+        if ($start >= 0 && $length >= 0 && $item instanceof Iterator) {
+            try {
+                return iterator_to_array(new LimitIterator($item, $start, $length === null ? -1 : $length), $preserveKeys);
+            } catch (OutOfBoundsException $exception) {
+                return array();
+            }
+        }
+
+        $item = iterator_to_array($item, $preserveKeys);
+    }
+
+    if (is_array($item)) {
+        return array_slice($item, $start, $length, $preserveKeys);
+    }
+
+    $item = (string) $item;
+
+    if (function_exists('mb_get_info') && null !== $charset = $env->getCharset()) {
+        return (string) mb_substr($item, $start, null === $length ? mb_strlen($item, $charset) - $start : $length, $charset);
+    }
+
+    return (string) (null === $length ? substr($item, $start) : substr($item, $start, $length));
+}
+
+/**
+ * Returns the first element of the item.
+ *
+ * @param Twig_Environment $env  A Twig_Environment instance
+ * @param mixed            $item A variable
+ *
+ * @return mixed The first element of the item
+ */
+function twig_first(Twig_Environment $env, $item)
+{
+    $elements = twig_slice($env, $item, 0, 1, false);
+
+    return is_string($elements) ? $elements : current($elements);
+}
+
+/**
+ * Returns the last element of the item.
+ *
+ * @param Twig_Environment $env  A Twig_Environment instance
+ * @param mixed            $item A variable
+ *
+ * @return mixed The last element of the item
+ */
+function twig_last(Twig_Environment $env, $item)
+{
+    $elements = twig_slice($env, $item, -1, 1, false);
+
+    return is_string($elements) ? $elements : current($elements);
+}
+
+/**
+ * Joins the values to a string.
+ *
+ * The separator between elements is an empty string per default, you can define it with the optional parameter.
+ *
+ * <pre>
+ *  {{ [1, 2, 3]|join('|') }}
+ *  {# returns 1|2|3 #}
+ *
+ *  {{ [1, 2, 3]|join }}
+ *  {# returns 123 #}
+ * </pre>
+ *
+ * @param array  $value An array
+ * @param string $glue  The separator
+ *
+ * @return string The concatenated string
+ */
+function twig_join_filter($value, $glue = '')
+{
+    if ($value instanceof Traversable) {
+        $value = iterator_to_array($value, false);
+    }
+
+    return implode($glue, (array) $value);
+}
+
+/**
+ * Splits the string into an array.
+ *
+ * <pre>
+ *  {{ "one,two,three"|split(',') }}
+ *  {# returns [one, two, three] #}
+ *
+ *  {{ "one,two,three,four,five"|split(',', 3) }}
+ *  {# returns [one, two, "three,four,five"] #}
+ *
+ *  {{ "123"|split('') }}
+ *  {# returns [1, 2, 3] #}
+ *
+ *  {{ "aabbcc"|split('', 2) }}
+ *  {# returns [aa, bb, cc] #}
+ * </pre>
+ *
+ * @param Twig_Environment $env       A Twig_Environment instance
+ * @param string           $value     A string
+ * @param string           $delimiter The delimiter
+ * @param int              $limit     The limit
+ *
+ * @return array The split string as an array
+ */
+function twig_split_filter(Twig_Environment $env, $value, $delimiter, $limit = null)
+{
+    if (!empty($delimiter)) {
+        return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit);
+    }
+
+    if (!function_exists('mb_get_info') || null === $charset = $env->getCharset()) {
+        return str_split($value, null === $limit ? 1 : $limit);
+    }
+
+    if ($limit <= 1) {
+        return preg_split('/(?<!^)(?!$)/u', $value);
+    }
+
+    $length = mb_strlen($value, $charset);
+    if ($length < $limit) {
+        return array($value);
+    }
+
+    $r = array();
+    for ($i = 0; $i < $length; $i += $limit) {
+        $r[] = mb_substr($value, $i, $limit, $charset);
+    }
+
+    return $r;
+}
+
+// The '_default' filter is used internally to avoid using the ternary operator
+// which costs a lot for big contexts (before PHP 5.4). So, on average,
+// a function call is cheaper.
+/**
+ * @internal
+ */
+function _twig_default_filter($value, $default = '')
+{
+    if (twig_test_empty($value)) {
+        return $default;
+    }
+
+    return $value;
+}
+
+/**
+ * Returns the keys for the given array.
+ *
+ * It is useful when you want to iterate over the keys of an array:
+ *
+ * <pre>
+ *  {% for key in array|keys %}
+ *      {# ... #}
+ *  {% endfor %}
+ * </pre>
+ *
+ * @param array $array An array
+ *
+ * @return array The keys
+ */
+function twig_get_array_keys_filter($array)
+{
+    if ($array instanceof Traversable) {
+        return array_keys(iterator_to_array($array));
+    }
+
+    if (!is_array($array)) {
+        return array();
+    }
+
+    return array_keys($array);
+}
+
+/**
+ * Reverses a variable.
+ *
+ * @param Twig_Environment         $env          A Twig_Environment instance
+ * @param array|Traversable|string $item         An array, a Traversable instance, or a string
+ * @param bool                     $preserveKeys Whether to preserve key or not
+ *
+ * @return mixed The reversed input
+ */
+function twig_reverse_filter(Twig_Environment $env, $item, $preserveKeys = false)
+{
+    if ($item instanceof Traversable) {
+        return array_reverse(iterator_to_array($item), $preserveKeys);
+    }
+
+    if (is_array($item)) {
+        return array_reverse($item, $preserveKeys);
+    }
+
+    if (null !== $charset = $env->getCharset()) {
+        $string = (string) $item;
+
+        if ('UTF-8' !== $charset) {
+            $item = twig_convert_encoding($string, 'UTF-8', $charset);
+        }
+
+        preg_match_all('/./us', $item, $matches);
+
+        $string = implode('', array_reverse($matches[0]));
+
+        if ('UTF-8' !== $charset) {
+            $string = twig_convert_encoding($string, $charset, 'UTF-8');
+        }
+
+        return $string;
+    }
+
+    return strrev((string) $item);
+}
+
+/**
+ * Sorts an array.
+ *
+ * @param array|Traversable $array
+ *
+ * @return array
+ */
+function twig_sort_filter($array)
+{
+    if ($array instanceof Traversable) {
+        $array = iterator_to_array($array);
+    } elseif (!is_array($array)) {
+        throw new Twig_Error_Runtime(sprintf('The sort filter only works with arrays or "Traversable", got "%s".', gettype($array)));
+    }
+
+    asort($array);
+
+    return $array;
+}
+
+/**
+ * @internal
+ */
+function twig_in_filter($value, $compare)
+{
+    if (is_array($compare)) {
+        return in_array($value, $compare, is_object($value) || is_resource($value));
+    } elseif (is_string($compare) && (is_string($value) || is_int($value) || is_float($value))) {
+        return '' === $value || false !== strpos($compare, (string) $value);
+    } elseif ($compare instanceof Traversable) {
+        return in_array($value, iterator_to_array($compare, false), is_object($value) || is_resource($value));
+    }
+
+    return false;
+}
+
+/**
+ * Escapes a string.
+ *
+ * @param Twig_Environment $env        A Twig_Environment instance
+ * @param string           $string     The value to be escaped
+ * @param string           $strategy   The escaping strategy
+ * @param string           $charset    The charset
+ * @param bool             $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false)
+ *
+ * @return string
+ */
+function twig_escape_filter(Twig_Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false)
+{
+    if ($autoescape && $string instanceof Twig_Markup) {
+        return $string;
+    }
+
+    if (!is_string($string)) {
+        if (is_object($string) && method_exists($string, '__toString')) {
+            $string = (string) $string;
+        } elseif (in_array($strategy, array('html', 'js', 'css', 'html_attr', 'url'))) {
+            return $string;
+        }
+    }
+
+    if (null === $charset) {
+        $charset = $env->getCharset();
+    }
+
+    switch ($strategy) {
+        case 'html':
+            // see http://php.net/htmlspecialchars
+
+            // Using a static variable to avoid initializing the array
+            // each time the function is called. Moving the declaration on the
+            // top of the function slow downs other escaping strategies.
+            static $htmlspecialcharsCharsets;
+
+            if (null === $htmlspecialcharsCharsets) {
+                if (defined('HHVM_VERSION')) {
+                    $htmlspecialcharsCharsets = array('utf-8' => true, 'UTF-8' => true);
+                } else {
+                    $htmlspecialcharsCharsets = array(
+                        'ISO-8859-1' => true, 'ISO8859-1' => true,
+                        'ISO-8859-15' => true, 'ISO8859-15' => true,
+                        'utf-8' => true, 'UTF-8' => true,
+                        'CP866' => true, 'IBM866' => true, '866' => true,
+                        'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true,
+                        '1251' => true,
+                        'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true,
+                        'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true,
+                        'BIG5' => true, '950' => true,
+                        'GB2312' => true, '936' => true,
+                        'BIG5-HKSCS' => true,
+                        'SHIFT_JIS' => true, 'SJIS' => true, '932' => true,
+                        'EUC-JP' => true, 'EUCJP' => true,
+                        'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true,
+                    );
+                }
+            }
+
+            if (isset($htmlspecialcharsCharsets[$charset])) {
+                return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
+            }
+
+            if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) {
+                // cache the lowercase variant for future iterations
+                $htmlspecialcharsCharsets[$charset] = true;
+
+                return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
+            }
+
+            $string = twig_convert_encoding($string, 'UTF-8', $charset);
+            $string = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
+
+            return twig_convert_encoding($string, $charset, 'UTF-8');
+
+        case 'js':
+            // escape all non-alphanumeric characters
+            // into their \xHH or \uHHHH representations
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, 'UTF-8', $charset);
+            }
+
+            if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) {
+                throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.');
+            }
+
+            $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', '_twig_escape_js_callback', $string);
+
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, $charset, 'UTF-8');
+            }
+
+            return $string;
+
+        case 'css':
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, 'UTF-8', $charset);
+            }
+
+            if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) {
+                throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.');
+            }
+
+            $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', '_twig_escape_css_callback', $string);
+
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, $charset, 'UTF-8');
+            }
+
+            return $string;
+
+        case 'html_attr':
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, 'UTF-8', $charset);
+            }
+
+            if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) {
+                throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.');
+            }
+
+            $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', '_twig_escape_html_attr_callback', $string);
+
+            if ('UTF-8' !== $charset) {
+                $string = twig_convert_encoding($string, $charset, 'UTF-8');
+            }
+
+            return $string;
+
+        case 'url':
+            if (PHP_VERSION_ID < 50300) {
+                return str_replace('%7E', '~', rawurlencode($string));
+            }
+
+            return rawurlencode($string);
+
+        default:
+            static $escapers;
+
+            if (null === $escapers) {
+                $escapers = $env->getExtension('core')->getEscapers();
+            }
+
+            if (isset($escapers[$strategy])) {
+                return call_user_func($escapers[$strategy], $env, $string, $charset);
+            }
+
+            $validStrategies = implode(', ', array_merge(array('html', 'js', 'url', 'css', 'html_attr'), array_keys($escapers)));
+
+            throw new Twig_Error_Runtime(sprintf('Invalid escaping strategy "%s" (valid ones: %s).', $strategy, $validStrategies));
+    }
+}
+
+/**
+ * @internal
+ */
+function twig_escape_filter_is_safe(Twig_Node $filterArgs)
+{
+    foreach ($filterArgs as $arg) {
+        if ($arg instanceof Twig_Node_Expression_Constant) {
+            return array($arg->getAttribute('value'));
+        }
+
+        return array();
+    }
+
+    return array('html');
+}
+
+if (function_exists('mb_convert_encoding')) {
+    function twig_convert_encoding($string, $to, $from)
+    {
+        return mb_convert_encoding($string, $to, $from);
+    }
+} elseif (function_exists('iconv')) {
+    function twig_convert_encoding($string, $to, $from)
+    {
+        return iconv($from, $to, $string);
+    }
+} else {
+    function twig_convert_encoding($string, $to, $from)
+    {
+        throw new Twig_Error_Runtime('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).');
+    }
+}
+
+function _twig_escape_js_callback($matches)
+{
+    $char = $matches[0];
+
+    // \xHH
+    if (!isset($char[1])) {
+        return '\\x'.strtoupper(substr('00'.bin2hex($char), -2));
+    }
+
+    // \uHHHH
+    $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8');
+
+    return '\\u'.strtoupper(substr('0000'.bin2hex($char), -4));
+}
+
+function _twig_escape_css_callback($matches)
+{
+    $char = $matches[0];
+
+    // \xHH
+    if (!isset($char[1])) {
+        $hex = ltrim(strtoupper(bin2hex($char)), '0');
+        if (0 === strlen($hex)) {
+            $hex = '0';
+        }
+
+        return '\\'.$hex.' ';
+    }
+
+    // \uHHHH
+    $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8');
+
+    return '\\'.ltrim(strtoupper(bin2hex($char)), '0').' ';
+}
+
+/**
+ * This function is adapted from code coming from Zend Framework.
+ *
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+function _twig_escape_html_attr_callback($matches)
+{
+    /*
+     * While HTML supports far more named entities, the lowest common denominator
+     * has become HTML5's XML Serialisation which is restricted to the those named
+     * entities that XML supports. Using HTML entities would result in this error:
+     *     XML Parsing Error: undefined entity
+     */
+    static $entityMap = array(
+        34 => 'quot', /* quotation mark */
+        38 => 'amp',  /* ampersand */
+        60 => 'lt',   /* less-than sign */
+        62 => 'gt',   /* greater-than sign */
+    );
+
+    $chr = $matches[0];
+    $ord = ord($chr);
+
+    /*
+     * The following replaces characters undefined in HTML with the
+     * hex entity for the Unicode replacement character.
+     */
+    if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r") || ($ord >= 0x7f && $ord <= 0x9f)) {
+        return '&#xFFFD;';
+    }
+
+    /*
+     * Check if the current character to escape has a name entity we should
+     * replace it with while grabbing the hex value of the character.
+     */
+    if (strlen($chr) == 1) {
+        $hex = strtoupper(substr('00'.bin2hex($chr), -2));
+    } else {
+        $chr = twig_convert_encoding($chr, 'UTF-16BE', 'UTF-8');
+        $hex = strtoupper(substr('0000'.bin2hex($chr), -4));
+    }
+
+    $int = hexdec($hex);
+    if (array_key_exists($int, $entityMap)) {
+        return sprintf('&%s;', $entityMap[$int]);
+    }
+
+    /*
+     * Per OWASP recommendations, we'll use hex entities for any other
+     * characters where a named entity does not exist.
+     */
+    return sprintf('&#x%s;', $hex);
+}
+
+// add multibyte extensions if possible
+if (function_exists('mb_get_info')) {
+    /**
+     * Returns the length of a variable.
+     *
+     * @param Twig_Environment $env   A Twig_Environment instance
+     * @param mixed            $thing A variable
+     *
+     * @return int The length of the value
+     */
+    function twig_length_filter(Twig_Environment $env, $thing)
+    {
+        return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : count($thing);
+    }
+
+    /**
+     * Converts a string to uppercase.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The uppercased string
+     */
+    function twig_upper_filter(Twig_Environment $env, $string)
+    {
+        if (null !== $charset = $env->getCharset()) {
+            return mb_strtoupper($string, $charset);
+        }
+
+        return strtoupper($string);
+    }
+
+    /**
+     * Converts a string to lowercase.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The lowercased string
+     */
+    function twig_lower_filter(Twig_Environment $env, $string)
+    {
+        if (null !== $charset = $env->getCharset()) {
+            return mb_strtolower($string, $charset);
+        }
+
+        return strtolower($string);
+    }
+
+    /**
+     * Returns a titlecased string.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The titlecased string
+     */
+    function twig_title_string_filter(Twig_Environment $env, $string)
+    {
+        if (null !== $charset = $env->getCharset()) {
+            return mb_convert_case($string, MB_CASE_TITLE, $charset);
+        }
+
+        return ucwords(strtolower($string));
+    }
+
+    /**
+     * Returns a capitalized string.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The capitalized string
+     */
+    function twig_capitalize_string_filter(Twig_Environment $env, $string)
+    {
+        if (null !== $charset = $env->getCharset()) {
+            return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset).mb_strtolower(mb_substr($string, 1, mb_strlen($string, $charset), $charset), $charset);
+        }
+
+        return ucfirst(strtolower($string));
+    }
+}
+// and byte fallback
+else {
+    /**
+     * Returns the length of a variable.
+     *
+     * @param Twig_Environment $env   A Twig_Environment instance
+     * @param mixed            $thing A variable
+     *
+     * @return int The length of the value
+     */
+    function twig_length_filter(Twig_Environment $env, $thing)
+    {
+        return is_scalar($thing) ? strlen($thing) : count($thing);
+    }
+
+    /**
+     * Returns a titlecased string.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The titlecased string
+     */
+    function twig_title_string_filter(Twig_Environment $env, $string)
+    {
+        return ucwords(strtolower($string));
+    }
+
+    /**
+     * Returns a capitalized string.
+     *
+     * @param Twig_Environment $env    A Twig_Environment instance
+     * @param string           $string A string
+     *
+     * @return string The capitalized string
+     */
+    function twig_capitalize_string_filter(Twig_Environment $env, $string)
+    {
+        return ucfirst(strtolower($string));
+    }
+}
+
+/**
+ * @internal
+ */
+function twig_ensure_traversable($seq)
+{
+    if ($seq instanceof Traversable || is_array($seq)) {
+        return $seq;
+    }
+
+    return array();
+}
+
+/**
+ * Checks if a variable is empty.
+ *
+ * <pre>
+ * {# evaluates to true if the foo variable is null, false, or the empty string #}
+ * {% if foo is empty %}
+ *     {# ... #}
+ * {% endif %}
+ * </pre>
+ *
+ * @param mixed $value A variable
+ *
+ * @return bool true if the value is empty, false otherwise
+ */
+function twig_test_empty($value)
+{
+    if ($value instanceof Countable) {
+        return 0 == count($value);
+    }
+
+    return '' === $value || false === $value || null === $value || array() === $value;
+}
+
+/**
+ * Checks if a variable is traversable.
+ *
+ * <pre>
+ * {# evaluates to true if the foo variable is an array or a traversable object #}
+ * {% if foo is traversable %}
+ *     {# ... #}
+ * {% endif %}
+ * </pre>
+ *
+ * @param mixed $value A variable
+ *
+ * @return bool true if the value is traversable
+ */
+function twig_test_iterable($value)
+{
+    return $value instanceof Traversable || is_array($value);
+}
+
+/**
+ * Renders a template.
+ *
+ * @param Twig_Environment $env
+ * @param array            $context
+ * @param string|array     $template      The template to render or an array of templates to try consecutively
+ * @param array            $variables     The variables to pass to the template
+ * @param bool             $withContext
+ * @param bool             $ignoreMissing Whether to ignore missing templates or not
+ * @param bool             $sandboxed     Whether to sandbox the template or not
+ *
+ * @return string The rendered template
+ */
+function twig_include(Twig_Environment $env, $context, $template, $variables = array(), $withContext = true, $ignoreMissing = false, $sandboxed = false)
+{
+    $alreadySandboxed = false;
+    $sandbox = null;
+    if ($withContext) {
+        $variables = array_merge($context, $variables);
+    }
+
+    if ($isSandboxed = $sandboxed && $env->hasExtension('sandbox')) {
+        $sandbox = $env->getExtension('sandbox');
+        if (!$alreadySandboxed = $sandbox->isSandboxed()) {
+            $sandbox->enableSandbox();
+        }
+    }
+
+    $result = null;
+    try {
+        $result = $env->resolveTemplate($template)->render($variables);
+    } catch (Twig_Error_Loader $e) {
+        if (!$ignoreMissing) {
+            if ($isSandboxed && !$alreadySandboxed) {
+                $sandbox->disableSandbox();
+            }
+
+            throw $e;
+        }
+    }
+
+    if ($isSandboxed && !$alreadySandboxed) {
+        $sandbox->disableSandbox();
+    }
+
+    return $result;
+}
+
+/**
+ * Returns a template content without rendering it.
+ *
+ * @param Twig_Environment $env
+ * @param string           $name          The template name
+ * @param bool             $ignoreMissing Whether to ignore missing templates or not
+ *
+ * @return string The template source
+ */
+function twig_source(Twig_Environment $env, $name, $ignoreMissing = false)
+{
+    try {
+        return $env->getLoader()->getSource($name);
+    } catch (Twig_Error_Loader $e) {
+        if (!$ignoreMissing) {
+            throw $e;
+        }
+    }
+}
+
+/**
+ * Provides the ability to get constants from instances as well as class/global constants.
+ *
+ * @param string      $constant The name of the constant
+ * @param null|object $object   The object to get the constant from
+ *
+ * @return string
+ */
+function twig_constant($constant, $object = null)
+{
+    if (null !== $object) {
+        $constant = get_class($object).'::'.$constant;
+    }
+
+    return constant($constant);
+}
+
+/**
+ * Batches item.
+ *
+ * @param array $items An array of items
+ * @param int   $size  The size of the batch
+ * @param mixed $fill  A value used to fill missing items
+ *
+ * @return array
+ */
+function twig_array_batch($items, $size, $fill = null)
+{
+    if ($items instanceof Traversable) {
+        $items = iterator_to_array($items, false);
+    }
+
+    $size = ceil($size);
+
+    $result = array_chunk($items, $size, true);
+
+    if (null !== $fill && !empty($result)) {
+        $last = count($result) - 1;
+        if ($fillCount = $size - count($result[$last])) {
+            $result[$last] = array_merge(
+                $result[$last],
+                array_fill(0, $fillCount, $fill)
+            );
+        }
+    }
+
+    return $result;
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Core.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Debug.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Debug.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Debug.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_Debug extends Twig_Extension
+{
+    public function getFunctions()
+    {
+        // dump is safe if var_dump is overridden by xdebug
+        $isDumpOutputHtmlSafe = extension_loaded('xdebug')
+            // false means that it was not set (and the default is on) or it explicitly enabled
+            && (false === ini_get('xdebug.overload_var_dump') || ini_get('xdebug.overload_var_dump'))
+            // false means that it was not set (and the default is on) or it explicitly enabled
+            // xdebug.overload_var_dump produces HTML only when html_errors is also enabled
+            && (false === ini_get('html_errors') || ini_get('html_errors'))
+            || 'cli' === php_sapi_name()
+        ;
+
+        return array(
+            new Twig_SimpleFunction('dump', 'twig_var_dump', array('is_safe' => $isDumpOutputHtmlSafe ? array('html') : array(), 'needs_context' => true, 'needs_environment' => true)),
+        );
+    }
+
+    public function getName()
+    {
+        return 'debug';
+    }
+}
+
+function twig_var_dump(Twig_Environment $env, $context)
+{
+    if (!$env->isDebug()) {
+        return;
+    }
+
+    ob_start();
+
+    $count = func_num_args();
+    if (2 === $count) {
+        $vars = array();
+        foreach ($context as $key => $value) {
+            if (!$value instanceof Twig_Template) {
+                $vars[$key] = $value;
+            }
+        }
+
+        var_dump($vars);
+    } else {
+        for ($i = 2; $i < $count; ++$i) {
+            var_dump(func_get_arg($i));
+        }
+    }
+
+    return ob_get_clean();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Debug.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Escaper.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Escaper.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Escaper.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_Escaper extends Twig_Extension
+{
+    protected $defaultStrategy;
+
+    /**
+     * Constructor.
+     *
+     * @param string|false|callable $defaultStrategy An escaping strategy
+     *
+     * @see setDefaultStrategy()
+     */
+    public function __construct($defaultStrategy = 'html')
+    {
+        $this->setDefaultStrategy($defaultStrategy);
+    }
+
+    public function getTokenParsers()
+    {
+        return array(new Twig_TokenParser_AutoEscape());
+    }
+
+    public function getNodeVisitors()
+    {
+        return array(new Twig_NodeVisitor_Escaper());
+    }
+
+    public function getFilters()
+    {
+        return array(
+            new Twig_SimpleFilter('raw', 'twig_raw_filter', array('is_safe' => array('all'))),
+        );
+    }
+
+    /**
+     * Sets the default strategy to use when not defined by the user.
+     *
+     * The strategy can be a valid PHP callback that takes the template
+     * "filename" as an argument and returns the strategy to use.
+     *
+     * @param string|false|callable $defaultStrategy An escaping strategy
+     */
+    public function setDefaultStrategy($defaultStrategy)
+    {
+        // for BC
+        if (true === $defaultStrategy) {
+            @trigger_error('Using "true" as the default strategy is deprecated since version 1.21. Use "html" instead.', E_USER_DEPRECATED);
+
+            $defaultStrategy = 'html';
+        }
+
+        if ('filename' === $defaultStrategy) {
+            $defaultStrategy = array('Twig_FileExtensionEscapingStrategy', 'guess');
+        }
+
+        $this->defaultStrategy = $defaultStrategy;
+    }
+
+    /**
+     * Gets the default strategy to use when not defined by the user.
+     *
+     * @param string $filename The template "filename"
+     *
+     * @return string|false The default strategy to use for the template
+     */
+    public function getDefaultStrategy($filename)
+    {
+        // disable string callables to avoid calling a function named html or js,
+        // or any other upcoming escaping strategy
+        if (!is_string($this->defaultStrategy) && false !== $this->defaultStrategy) {
+            return call_user_func($this->defaultStrategy, $filename);
+        }
+
+        return $this->defaultStrategy;
+    }
+
+    public function getName()
+    {
+        return 'escaper';
+    }
+}
+
+/**
+ * Marks a variable as being safe.
+ *
+ * @param string $string A PHP variable
+ *
+ * @return string
+ */
+function twig_raw_filter($string)
+{
+    return $string;
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Escaper.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/GlobalsInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/GlobalsInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/GlobalsInterface.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Enables usage of the deprecated Twig_Extension::getGlobals() method.
+ *
+ * Explicitly implement this interface if you really need to implement the
+ * deprecated getGlobals() method in your extensions.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_Extension_GlobalsInterface
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/GlobalsInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/InitRuntimeInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/InitRuntimeInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/InitRuntimeInterface.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Enables usage of the deprecated Twig_Extension::initRuntime() method.
+ *
+ * Explicitly implement this interface if you really need to implement the
+ * deprecated initRuntime() method in your extensions.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_Extension_InitRuntimeInterface
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/InitRuntimeInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Optimizer.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Optimizer.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Optimizer.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_Optimizer extends Twig_Extension
+{
+    protected $optimizers;
+
+    public function __construct($optimizers = -1)
+    {
+        $this->optimizers = $optimizers;
+    }
+
+    public function getNodeVisitors()
+    {
+        return array(new Twig_NodeVisitor_Optimizer($this->optimizers));
+    }
+
+    public function getName()
+    {
+        return 'optimizer';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Optimizer.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Profiler.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Profiler.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Profiler.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Extension_Profiler extends Twig_Extension
+{
+    private $actives = array();
+
+    public function __construct(Twig_Profiler_Profile $profile)
+    {
+        $this->actives[] = $profile;
+    }
+
+    public function enter(Twig_Profiler_Profile $profile)
+    {
+        $this->actives[0]->addProfile($profile);
+        array_unshift($this->actives, $profile);
+    }
+
+    public function leave(Twig_Profiler_Profile $profile)
+    {
+        $profile->leave();
+        array_shift($this->actives);
+
+        if (1 === count($this->actives)) {
+            $this->actives[0]->leave();
+        }
+    }
+
+    public function getNodeVisitors()
+    {
+        return array(new Twig_Profiler_NodeVisitor_Profiler($this->getName()));
+    }
+
+    public function getName()
+    {
+        return 'profiler';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Profiler.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Sandbox.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Sandbox.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Sandbox.php	(revision 2)
@@ -0,0 +1,97 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_Sandbox extends Twig_Extension
+{
+    protected $sandboxedGlobally;
+    protected $sandboxed;
+    protected $policy;
+
+    public function __construct(Twig_Sandbox_SecurityPolicyInterface $policy, $sandboxed = false)
+    {
+        $this->policy = $policy;
+        $this->sandboxedGlobally = $sandboxed;
+    }
+
+    public function getTokenParsers()
+    {
+        return array(new Twig_TokenParser_Sandbox());
+    }
+
+    public function getNodeVisitors()
+    {
+        return array(new Twig_NodeVisitor_Sandbox());
+    }
+
+    public function enableSandbox()
+    {
+        $this->sandboxed = true;
+    }
+
+    public function disableSandbox()
+    {
+        $this->sandboxed = false;
+    }
+
+    public function isSandboxed()
+    {
+        return $this->sandboxedGlobally || $this->sandboxed;
+    }
+
+    public function isSandboxedGlobally()
+    {
+        return $this->sandboxedGlobally;
+    }
+
+    public function setSecurityPolicy(Twig_Sandbox_SecurityPolicyInterface $policy)
+    {
+        $this->policy = $policy;
+    }
+
+    public function getSecurityPolicy()
+    {
+        return $this->policy;
+    }
+
+    public function checkSecurity($tags, $filters, $functions)
+    {
+        if ($this->isSandboxed()) {
+            $this->policy->checkSecurity($tags, $filters, $functions);
+        }
+    }
+
+    public function checkMethodAllowed($obj, $method)
+    {
+        if ($this->isSandboxed()) {
+            $this->policy->checkMethodAllowed($obj, $method);
+        }
+    }
+
+    public function checkPropertyAllowed($obj, $method)
+    {
+        if ($this->isSandboxed()) {
+            $this->policy->checkPropertyAllowed($obj, $method);
+        }
+    }
+
+    public function ensureToStringAllowed($obj)
+    {
+        if ($this->isSandboxed() && is_object($obj)) {
+            $this->policy->checkMethodAllowed($obj, '__toString');
+        }
+
+        return $obj;
+    }
+
+    public function getName()
+    {
+        return 'sandbox';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Sandbox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/Staging.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/Staging.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/Staging.php	(revision 2)
@@ -0,0 +1,94 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Internal class.
+ *
+ * This class is used by Twig_Environment as a staging area and must not be used directly.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @internal
+ */
+class Twig_Extension_Staging extends Twig_Extension
+{
+    protected $functions = array();
+    protected $filters = array();
+    protected $visitors = array();
+    protected $tokenParsers = array();
+    protected $globals = array();
+    protected $tests = array();
+
+    public function addFunction($name, $function)
+    {
+        $this->functions[$name] = $function;
+    }
+
+    public function getFunctions()
+    {
+        return $this->functions;
+    }
+
+    public function addFilter($name, $filter)
+    {
+        $this->filters[$name] = $filter;
+    }
+
+    public function getFilters()
+    {
+        return $this->filters;
+    }
+
+    public function addNodeVisitor(Twig_NodeVisitorInterface $visitor)
+    {
+        $this->visitors[] = $visitor;
+    }
+
+    public function getNodeVisitors()
+    {
+        return $this->visitors;
+    }
+
+    public function addTokenParser(Twig_TokenParserInterface $parser)
+    {
+        $this->tokenParsers[] = $parser;
+    }
+
+    public function getTokenParsers()
+    {
+        return $this->tokenParsers;
+    }
+
+    public function addGlobal($name, $value)
+    {
+        $this->globals[$name] = $value;
+    }
+
+    public function getGlobals()
+    {
+        return $this->globals;
+    }
+
+    public function addTest($name, $test)
+    {
+        $this->tests[$name] = $test;
+    }
+
+    public function getTests()
+    {
+        return $this->tests;
+    }
+
+    public function getName()
+    {
+        return 'staging';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/Staging.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension/StringLoader.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension/StringLoader.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension/StringLoader.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Extension_StringLoader extends Twig_Extension
+{
+    public function getFunctions()
+    {
+        return array(
+            new Twig_SimpleFunction('template_from_string', 'twig_template_from_string', array('needs_environment' => true)),
+        );
+    }
+
+    public function getName()
+    {
+        return 'string_loader';
+    }
+}
+
+/**
+ * Loads a template from a string.
+ *
+ * <pre>
+ * {{ include(template_from_string("Hello {{ name }}")) }}
+ * </pre>
+ *
+ * @param Twig_Environment $env      A Twig_Environment instance
+ * @param string           $template A template as a string or object implementing __toString()
+ *
+ * @return Twig_Template A Twig_Template instance
+ */
+function twig_template_from_string(Twig_Environment $env, $template)
+{
+    return $env->createTemplate((string) $template);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension/StringLoader.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Extension.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Extension.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Extension.php	(revision 2)
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+abstract class Twig_Extension implements Twig_ExtensionInterface
+{
+    /**
+     * {@inheritdoc}
+     *
+     * @deprecated since 1.23 (to be removed in 2.0), implement Twig_Extension_InitRuntimeInterface instead
+     */
+    public function initRuntime(Twig_Environment $environment)
+    {
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getTokenParsers()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getNodeVisitors()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFilters()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getTests()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFunctions()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getOperators()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @deprecated since 1.23 (to be removed in 2.0), implement Twig_Extension_GlobalsInterface instead
+     */
+    public function getGlobals()
+    {
+        return array();
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Extension.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/ExtensionInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/ExtensionInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/ExtensionInterface.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by extension classes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_ExtensionInterface
+{
+    /**
+     * Initializes the runtime environment.
+     *
+     * This is where you can load some file that contains filter functions for instance.
+     *
+     * @param Twig_Environment $environment The current Twig_Environment instance
+     *
+     * @deprecated since 1.23 (to be removed in 2.0), implement Twig_Extension_InitRuntimeInterface instead
+     */
+    public function initRuntime(Twig_Environment $environment);
+
+    /**
+     * Returns the token parser instances to add to the existing list.
+     *
+     * @return Twig_TokenParserInterface[]
+     */
+    public function getTokenParsers();
+
+    /**
+     * Returns the node visitor instances to add to the existing list.
+     *
+     * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances
+     */
+    public function getNodeVisitors();
+
+    /**
+     * Returns a list of filters to add to the existing list.
+     *
+     * @return Twig_SimpleFilter[]
+     */
+    public function getFilters();
+
+    /**
+     * Returns a list of tests to add to the existing list.
+     *
+     * @return Twig_SimpleTest[]
+     */
+    public function getTests();
+
+    /**
+     * Returns a list of functions to add to the existing list.
+     *
+     * @return Twig_SimpleFunction[]
+     */
+    public function getFunctions();
+
+    /**
+     * Returns a list of operators to add to the existing list.
+     *
+     * @return array An array of operators
+     */
+    public function getOperators();
+
+    /**
+     * Returns a list of global variables to add to the existing list.
+     *
+     * @return array An array of global variables
+     *
+     * @deprecated since 1.23 (to be removed in 2.0), implement Twig_Extension_GlobalsInterface instead
+     */
+    public function getGlobals();
+
+    /**
+     * Returns the name of the extension.
+     *
+     * @return string The extension name
+     */
+    public function getName();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/ExtensionInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/FileExtensionEscapingStrategy.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/FileExtensionEscapingStrategy.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/FileExtensionEscapingStrategy.php	(revision 2)
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Default autoescaping strategy based on file names.
+ *
+ * This strategy sets the HTML as the default autoescaping strategy,
+ * but changes it based on the filename.
+ *
+ * Note that there is no runtime performance impact as the
+ * default autoescaping strategy is set at compilation time.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_FileExtensionEscapingStrategy
+{
+    /**
+     * Guesses the best autoescaping strategy based on the file name.
+     *
+     * @param string $filename The template file name
+     *
+     * @return string|false The escaping strategy name to use or false to disable
+     */
+    public static function guess($filename)
+    {
+        if (in_array(substr($filename, -1), array('/', '\\'))) {
+            return 'html'; // return html for directories
+        }
+
+        if ('.twig' === substr($filename, -5)) {
+            $filename = substr($filename, 0, -5);
+        }
+
+        $extension = pathinfo($filename, PATHINFO_EXTENSION);
+
+        switch ($extension) {
+            case 'js':
+                return 'js';
+
+            case 'css':
+                return 'css';
+
+            case 'txt':
+                return false;
+
+            default:
+                return 'html';
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/FileExtensionEscapingStrategy.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Filter/Function.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Filter/Function.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Filter/Function.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Filter_Function class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFilter instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a function template filter.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Filter_Function extends Twig_Filter
+{
+    protected $function;
+
+    public function __construct($function, array $options = array())
+    {
+        $options['callable'] = $function;
+
+        parent::__construct($options);
+
+        $this->function = $function;
+    }
+
+    public function compile()
+    {
+        return $this->function;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Filter/Function.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Filter/Method.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Filter/Method.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Filter/Method.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Filter_Method class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFilter instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a method template filter.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Filter_Method extends Twig_Filter
+{
+    protected $extension;
+    protected $method;
+
+    public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array())
+    {
+        $options['callable'] = array($extension, $method);
+
+        parent::__construct($options);
+
+        $this->extension = $extension;
+        $this->method = $method;
+    }
+
+    public function compile()
+    {
+        return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Filter/Method.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Filter/Node.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Filter/Node.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Filter/Node.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Filter_Node class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFilter instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template filter as a node.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Filter_Node extends Twig_Filter
+{
+    protected $class;
+
+    public function __construct($class, array $options = array())
+    {
+        parent::__construct($options);
+
+        $this->class = $class;
+    }
+
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+    public function compile()
+    {
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Filter/Node.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Filter.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Filter.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Filter.php	(revision 2)
@@ -0,0 +1,84 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Filter class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFilter instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template filter.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+abstract class Twig_Filter implements Twig_FilterInterface, Twig_FilterCallableInterface
+{
+    protected $options;
+    protected $arguments = array();
+
+    public function __construct(array $options = array())
+    {
+        $this->options = array_merge(array(
+            'needs_environment' => false,
+            'needs_context' => false,
+            'pre_escape' => null,
+            'preserves_safety' => null,
+            'callable' => null,
+        ), $options);
+    }
+
+    public function setArguments($arguments)
+    {
+        $this->arguments = $arguments;
+    }
+
+    public function getArguments()
+    {
+        return $this->arguments;
+    }
+
+    public function needsEnvironment()
+    {
+        return $this->options['needs_environment'];
+    }
+
+    public function needsContext()
+    {
+        return $this->options['needs_context'];
+    }
+
+    public function getSafe(Twig_Node $filterArgs)
+    {
+        if (isset($this->options['is_safe'])) {
+            return $this->options['is_safe'];
+        }
+
+        if (isset($this->options['is_safe_callback'])) {
+            return call_user_func($this->options['is_safe_callback'], $filterArgs);
+        }
+    }
+
+    public function getPreservesSafety()
+    {
+        return $this->options['preserves_safety'];
+    }
+
+    public function getPreEscape()
+    {
+        return $this->options['pre_escape'];
+    }
+
+    public function getCallable()
+    {
+        return $this->options['callable'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Filter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/FilterCallableInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/FilterCallableInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/FilterCallableInterface.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a callable template filter.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_FilterCallableInterface
+{
+    public function getCallable();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/FilterCallableInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/FilterInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/FilterInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/FilterInterface.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template filter.
+ *
+ * Use Twig_SimpleFilter instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_FilterInterface
+{
+    /**
+     * Compiles a filter.
+     *
+     * @return string The PHP code for the filter
+     */
+    public function compile();
+
+    public function needsEnvironment();
+
+    public function needsContext();
+
+    public function getSafe(Twig_Node $filterArgs);
+
+    public function getPreservesSafety();
+
+    public function getPreEscape();
+
+    public function setArguments($arguments);
+
+    public function getArguments();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/FilterInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Function/Function.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Function/Function.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Function/Function.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2010 Arnaud Le Blanc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Function_Function class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFunction instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a function template function.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Function_Function extends Twig_Function
+{
+    protected $function;
+
+    public function __construct($function, array $options = array())
+    {
+        $options['callable'] = $function;
+
+        parent::__construct($options);
+
+        $this->function = $function;
+    }
+
+    public function compile()
+    {
+        return $this->function;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Function/Function.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Function/Method.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Function/Method.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Function/Method.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2010 Arnaud Le Blanc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Function_Method class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFunction instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a method template function.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Function_Method extends Twig_Function
+{
+    protected $extension;
+    protected $method;
+
+    public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array())
+    {
+        $options['callable'] = array($extension, $method);
+
+        parent::__construct($options);
+
+        $this->extension = $extension;
+        $this->method = $method;
+    }
+
+    public function compile()
+    {
+        return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Function/Method.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Function/Node.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Function/Node.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Function/Node.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Function_Node class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFunction instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template function as a node.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Function_Node extends Twig_Function
+{
+    protected $class;
+
+    public function __construct($class, array $options = array())
+    {
+        parent::__construct($options);
+
+        $this->class = $class;
+    }
+
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+    public function compile()
+    {
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Function/Node.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Function.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Function.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Function.php	(revision 2)
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Function class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleFunction instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template function.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+abstract class Twig_Function implements Twig_FunctionInterface, Twig_FunctionCallableInterface
+{
+    protected $options;
+    protected $arguments = array();
+
+    public function __construct(array $options = array())
+    {
+        $this->options = array_merge(array(
+            'needs_environment' => false,
+            'needs_context' => false,
+            'callable' => null,
+        ), $options);
+    }
+
+    public function setArguments($arguments)
+    {
+        $this->arguments = $arguments;
+    }
+
+    public function getArguments()
+    {
+        return $this->arguments;
+    }
+
+    public function needsEnvironment()
+    {
+        return $this->options['needs_environment'];
+    }
+
+    public function needsContext()
+    {
+        return $this->options['needs_context'];
+    }
+
+    public function getSafe(Twig_Node $functionArgs)
+    {
+        if (isset($this->options['is_safe'])) {
+            return $this->options['is_safe'];
+        }
+
+        if (isset($this->options['is_safe_callback'])) {
+            return call_user_func($this->options['is_safe_callback'], $functionArgs);
+        }
+
+        return array();
+    }
+
+    public function getCallable()
+    {
+        return $this->options['callable'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Function.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/FunctionCallableInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/FunctionCallableInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/FunctionCallableInterface.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a callable template function.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_FunctionCallableInterface
+{
+    public function getCallable();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/FunctionCallableInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/FunctionInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/FunctionInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/FunctionInterface.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ * (c) 2010 Arnaud Le Blanc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template function.
+ *
+ * Use Twig_SimpleFunction instead.
+ *
+ * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_FunctionInterface
+{
+    /**
+     * Compiles a function.
+     *
+     * @return string The PHP code for the function
+     */
+    public function compile();
+
+    public function needsEnvironment();
+
+    public function needsContext();
+
+    public function getSafe(Twig_Node $filterArgs);
+
+    public function setArguments($arguments);
+
+    public function getArguments();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/FunctionInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Lexer.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Lexer.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Lexer.php	(revision 2)
@@ -0,0 +1,411 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Lexes a template string.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Lexer implements Twig_LexerInterface
+{
+    protected $tokens;
+    protected $code;
+    protected $cursor;
+    protected $lineno;
+    protected $end;
+    protected $state;
+    protected $states;
+    protected $brackets;
+    protected $env;
+    protected $filename;
+    protected $options;
+    protected $regexes;
+    protected $position;
+    protected $positions;
+    protected $currentVarBlockLine;
+
+    const STATE_DATA = 0;
+    const STATE_BLOCK = 1;
+    const STATE_VAR = 2;
+    const STATE_STRING = 3;
+    const STATE_INTERPOLATION = 4;
+
+    const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A';
+    const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?/A';
+    const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As';
+    const REGEX_DQ_STRING_DELIM = '/"/A';
+    const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As';
+    const PUNCTUATION = '()[]{}?:.,|';
+
+    public function __construct(Twig_Environment $env, array $options = array())
+    {
+        $this->env = $env;
+
+        $this->options = array_merge(array(
+            'tag_comment' => array('{#', '#}'),
+            'tag_block' => array('{%', '%}'),
+            'tag_variable' => array('{{', '}}'),
+            'whitespace_trim' => '-',
+            'interpolation' => array('#{', '}'),
+        ), $options);
+
+        $this->regexes = array(
+            'lex_var' => '/\s*'.preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_variable'][1], '/').'/A',
+            'lex_block' => '/\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')\n?/A',
+            'lex_raw_data' => '/('.preg_quote($this->options['tag_block'][0].$this->options['whitespace_trim'], '/').'|'.preg_quote($this->options['tag_block'][0], '/').')\s*(?:end%s)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/s',
+            'operator' => $this->getOperatorRegex(),
+            'lex_comment' => '/(?:'.preg_quote($this->options['whitespace_trim'], '/').preg_quote($this->options['tag_comment'][1], '/').'\s*|'.preg_quote($this->options['tag_comment'][1], '/').')\n?/s',
+            'lex_block_raw' => '/\s*(raw|verbatim)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/As',
+            'lex_block_line' => '/\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '/').'/As',
+            'lex_tokens_start' => '/('.preg_quote($this->options['tag_variable'][0], '/').'|'.preg_quote($this->options['tag_block'][0], '/').'|'.preg_quote($this->options['tag_comment'][0], '/').')('.preg_quote($this->options['whitespace_trim'], '/').')?/s',
+            'interpolation_start' => '/'.preg_quote($this->options['interpolation'][0], '/').'\s*/A',
+            'interpolation_end' => '/\s*'.preg_quote($this->options['interpolation'][1], '/').'/A',
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function tokenize($code, $filename = null)
+    {
+        if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+            $mbEncoding = mb_internal_encoding();
+            mb_internal_encoding('ASCII');
+        } else {
+            $mbEncoding = null;
+        }
+
+        $this->code = str_replace(array("\r\n", "\r"), "\n", $code);
+        $this->filename = $filename;
+        $this->cursor = 0;
+        $this->lineno = 1;
+        $this->end = strlen($this->code);
+        $this->tokens = array();
+        $this->state = self::STATE_DATA;
+        $this->states = array();
+        $this->brackets = array();
+        $this->position = -1;
+
+        // find all token starts in one go
+        preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, PREG_OFFSET_CAPTURE);
+        $this->positions = $matches;
+
+        while ($this->cursor < $this->end) {
+            // dispatch to the lexing functions depending
+            // on the current state
+            switch ($this->state) {
+                case self::STATE_DATA:
+                    $this->lexData();
+                    break;
+
+                case self::STATE_BLOCK:
+                    $this->lexBlock();
+                    break;
+
+                case self::STATE_VAR:
+                    $this->lexVar();
+                    break;
+
+                case self::STATE_STRING:
+                    $this->lexString();
+                    break;
+
+                case self::STATE_INTERPOLATION:
+                    $this->lexInterpolation();
+                    break;
+            }
+        }
+
+        $this->pushToken(Twig_Token::EOF_TYPE);
+
+        if (!empty($this->brackets)) {
+            list($expect, $lineno) = array_pop($this->brackets);
+            throw new Twig_Error_Syntax(sprintf('Unclosed "%s".', $expect), $lineno, $this->filename);
+        }
+
+        if ($mbEncoding) {
+            mb_internal_encoding($mbEncoding);
+        }
+
+        return new Twig_TokenStream($this->tokens, $this->filename);
+    }
+
+    protected function lexData()
+    {
+        // if no matches are left we return the rest of the template as simple text token
+        if ($this->position == count($this->positions[0]) - 1) {
+            $this->pushToken(Twig_Token::TEXT_TYPE, substr($this->code, $this->cursor));
+            $this->cursor = $this->end;
+
+            return;
+        }
+
+        // Find the first token after the current cursor
+        $position = $this->positions[0][++$this->position];
+        while ($position[1] < $this->cursor) {
+            if ($this->position == count($this->positions[0]) - 1) {
+                return;
+            }
+            $position = $this->positions[0][++$this->position];
+        }
+
+        // push the template text first
+        $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor);
+        if (isset($this->positions[2][$this->position][0])) {
+            $text = rtrim($text);
+        }
+        $this->pushToken(Twig_Token::TEXT_TYPE, $text);
+        $this->moveCursor($textContent.$position[0]);
+
+        switch ($this->positions[1][$this->position][0]) {
+            case $this->options['tag_comment'][0]:
+                $this->lexComment();
+                break;
+
+            case $this->options['tag_block'][0]:
+                // raw data?
+                if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, null, $this->cursor)) {
+                    $this->moveCursor($match[0]);
+                    $this->lexRawData($match[1]);
+                // {% line \d+ %}
+                } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, null, $this->cursor)) {
+                    $this->moveCursor($match[0]);
+                    $this->lineno = (int) $match[1];
+                } else {
+                    $this->pushToken(Twig_Token::BLOCK_START_TYPE);
+                    $this->pushState(self::STATE_BLOCK);
+                    $this->currentVarBlockLine = $this->lineno;
+                }
+                break;
+
+            case $this->options['tag_variable'][0]:
+                $this->pushToken(Twig_Token::VAR_START_TYPE);
+                $this->pushState(self::STATE_VAR);
+                $this->currentVarBlockLine = $this->lineno;
+                break;
+        }
+    }
+
+    protected function lexBlock()
+    {
+        if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, null, $this->cursor)) {
+            $this->pushToken(Twig_Token::BLOCK_END_TYPE);
+            $this->moveCursor($match[0]);
+            $this->popState();
+        } else {
+            $this->lexExpression();
+        }
+    }
+
+    protected function lexVar()
+    {
+        if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, null, $this->cursor)) {
+            $this->pushToken(Twig_Token::VAR_END_TYPE);
+            $this->moveCursor($match[0]);
+            $this->popState();
+        } else {
+            $this->lexExpression();
+        }
+    }
+
+    protected function lexExpression()
+    {
+        // whitespace
+        if (preg_match('/\s+/A', $this->code, $match, null, $this->cursor)) {
+            $this->moveCursor($match[0]);
+
+            if ($this->cursor >= $this->end) {
+                throw new Twig_Error_Syntax(sprintf('Unclosed "%s".', $this->state === self::STATE_BLOCK ? 'block' : 'variable'), $this->currentVarBlockLine, $this->filename);
+            }
+        }
+
+        // operators
+        if (preg_match($this->regexes['operator'], $this->code, $match, null, $this->cursor)) {
+            $this->pushToken(Twig_Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0]));
+            $this->moveCursor($match[0]);
+        }
+        // names
+        elseif (preg_match(self::REGEX_NAME, $this->code, $match, null, $this->cursor)) {
+            $this->pushToken(Twig_Token::NAME_TYPE, $match[0]);
+            $this->moveCursor($match[0]);
+        }
+        // numbers
+        elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, null, $this->cursor)) {
+            $number = (float) $match[0];  // floats
+            if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) {
+                $number = (int) $match[0]; // integers lower than the maximum
+            }
+            $this->pushToken(Twig_Token::NUMBER_TYPE, $number);
+            $this->moveCursor($match[0]);
+        }
+        // punctuation
+        elseif (false !== strpos(self::PUNCTUATION, $this->code[$this->cursor])) {
+            // opening bracket
+            if (false !== strpos('([{', $this->code[$this->cursor])) {
+                $this->brackets[] = array($this->code[$this->cursor], $this->lineno);
+            }
+            // closing bracket
+            elseif (false !== strpos(')]}', $this->code[$this->cursor])) {
+                if (empty($this->brackets)) {
+                    throw new Twig_Error_Syntax(sprintf('Unexpected "%s".', $this->code[$this->cursor]), $this->lineno, $this->filename);
+                }
+
+                list($expect, $lineno) = array_pop($this->brackets);
+                if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) {
+                    throw new Twig_Error_Syntax(sprintf('Unclosed "%s".', $expect), $lineno, $this->filename);
+                }
+            }
+
+            $this->pushToken(Twig_Token::PUNCTUATION_TYPE, $this->code[$this->cursor]);
+            ++$this->cursor;
+        }
+        // strings
+        elseif (preg_match(self::REGEX_STRING, $this->code, $match, null, $this->cursor)) {
+            $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)));
+            $this->moveCursor($match[0]);
+        }
+        // opening double quoted string
+        elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) {
+            $this->brackets[] = array('"', $this->lineno);
+            $this->pushState(self::STATE_STRING);
+            $this->moveCursor($match[0]);
+        }
+        // unlexable
+        else {
+            throw new Twig_Error_Syntax(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->filename);
+        }
+    }
+
+    protected function lexRawData($tag)
+    {
+        if ('raw' === $tag) {
+            @trigger_error(sprintf('Twig Tag "raw" is deprecated since version 1.21. Use "verbatim" instead in %s at line %d.', $this->filename, $this->lineno), E_USER_DEPRECATED);
+        }
+
+        if (!preg_match(str_replace('%s', $tag, $this->regexes['lex_raw_data']), $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) {
+            throw new Twig_Error_Syntax(sprintf('Unexpected end of file: Unclosed "%s" block.', $tag), $this->lineno, $this->filename);
+        }
+
+        $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor);
+        $this->moveCursor($text.$match[0][0]);
+
+        if (false !== strpos($match[1][0], $this->options['whitespace_trim'])) {
+            $text = rtrim($text);
+        }
+
+        $this->pushToken(Twig_Token::TEXT_TYPE, $text);
+    }
+
+    protected function lexComment()
+    {
+        if (!preg_match($this->regexes['lex_comment'], $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) {
+            throw new Twig_Error_Syntax('Unclosed comment.', $this->lineno, $this->filename);
+        }
+
+        $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]);
+    }
+
+    protected function lexString()
+    {
+        if (preg_match($this->regexes['interpolation_start'], $this->code, $match, null, $this->cursor)) {
+            $this->brackets[] = array($this->options['interpolation'][0], $this->lineno);
+            $this->pushToken(Twig_Token::INTERPOLATION_START_TYPE);
+            $this->moveCursor($match[0]);
+            $this->pushState(self::STATE_INTERPOLATION);
+        } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, null, $this->cursor) && strlen($match[0]) > 0) {
+            $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes($match[0]));
+            $this->moveCursor($match[0]);
+        } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) {
+            list($expect, $lineno) = array_pop($this->brackets);
+            if ($this->code[$this->cursor] != '"') {
+                throw new Twig_Error_Syntax(sprintf('Unclosed "%s".', $expect), $lineno, $this->filename);
+            }
+
+            $this->popState();
+            ++$this->cursor;
+        }
+    }
+
+    protected function lexInterpolation()
+    {
+        $bracket = end($this->brackets);
+        if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, null, $this->cursor)) {
+            array_pop($this->brackets);
+            $this->pushToken(Twig_Token::INTERPOLATION_END_TYPE);
+            $this->moveCursor($match[0]);
+            $this->popState();
+        } else {
+            $this->lexExpression();
+        }
+    }
+
+    protected function pushToken($type, $value = '')
+    {
+        // do not push empty text tokens
+        if (Twig_Token::TEXT_TYPE === $type && '' === $value) {
+            return;
+        }
+
+        $this->tokens[] = new Twig_Token($type, $value, $this->lineno);
+    }
+
+    protected function moveCursor($text)
+    {
+        $this->cursor += strlen($text);
+        $this->lineno += substr_count($text, "\n");
+    }
+
+    protected function getOperatorRegex()
+    {
+        $operators = array_merge(
+            array('='),
+            array_keys($this->env->getUnaryOperators()),
+            array_keys($this->env->getBinaryOperators())
+        );
+
+        $operators = array_combine($operators, array_map('strlen', $operators));
+        arsort($operators);
+
+        $regex = array();
+        foreach ($operators as $operator => $length) {
+            // an operator that ends with a character must be followed by
+            // a whitespace or a parenthesis
+            if (ctype_alpha($operator[$length - 1])) {
+                $r = preg_quote($operator, '/').'(?=[\s()])';
+            } else {
+                $r = preg_quote($operator, '/');
+            }
+
+            // an operator with a space can be any amount of whitespaces
+            $r = preg_replace('/\s+/', '\s+', $r);
+
+            $regex[] = $r;
+        }
+
+        return '/'.implode('|', $regex).'/A';
+    }
+
+    protected function pushState($state)
+    {
+        $this->states[] = $this->state;
+        $this->state = $state;
+    }
+
+    protected function popState()
+    {
+        if (0 === count($this->states)) {
+            throw new Exception('Cannot pop state without a previous state');
+        }
+
+        $this->state = array_pop($this->states);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Lexer.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/LexerInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/LexerInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/LexerInterface.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by lexer classes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_LexerInterface
+{
+    /**
+     * Tokenizes a source code.
+     *
+     * @param string $code     The source code
+     * @param string $filename A unique identifier for the source code
+     *
+     * @return Twig_TokenStream A token stream instance
+     *
+     * @throws Twig_Error_Syntax When the code is syntactically wrong
+     */
+    public function tokenize($code, $filename = null);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/LexerInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Loader/Array.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Loader/Array.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Loader/Array.php	(revision 2)
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Loads a template from an array.
+ *
+ * When using this loader with a cache mechanism, you should know that a new cache
+ * key is generated each time a template content "changes" (the cache key being the
+ * source code of the template). If you don't want to see your cache grows out of
+ * control, you need to take care of clearing the old cache file by yourself.
+ *
+ * This loader should only be used for unit testing.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
+{
+    protected $templates = array();
+
+    /**
+     * Constructor.
+     *
+     * @param array $templates An array of templates (keys are the names, and values are the source code)
+     */
+    public function __construct(array $templates)
+    {
+        $this->templates = $templates;
+    }
+
+    /**
+     * Adds or overrides a template.
+     *
+     * @param string $name     The template name
+     * @param string $template The template source
+     */
+    public function setTemplate($name, $template)
+    {
+        $this->templates[(string) $name] = $template;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getSource($name)
+    {
+        $name = (string) $name;
+        if (!isset($this->templates[$name])) {
+            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
+        }
+
+        return $this->templates[$name];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function exists($name)
+    {
+        return isset($this->templates[(string) $name]);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCacheKey($name)
+    {
+        $name = (string) $name;
+        if (!isset($this->templates[$name])) {
+            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
+        }
+
+        return $this->templates[$name];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isFresh($name, $time)
+    {
+        $name = (string) $name;
+        if (!isset($this->templates[$name])) {
+            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
+        }
+
+        return true;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Loader/Array.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Loader/Chain.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Loader/Chain.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Loader/Chain.php	(revision 2)
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Loads templates from other loaders.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
+{
+    private $hasSourceCache = array();
+    protected $loaders = array();
+
+    /**
+     * Constructor.
+     *
+     * @param Twig_LoaderInterface[] $loaders An array of loader instances
+     */
+    public function __construct(array $loaders = array())
+    {
+        foreach ($loaders as $loader) {
+            $this->addLoader($loader);
+        }
+    }
+
+    /**
+     * Adds a loader instance.
+     *
+     * @param Twig_LoaderInterface $loader A Loader instance
+     */
+    public function addLoader(Twig_LoaderInterface $loader)
+    {
+        $this->loaders[] = $loader;
+        $this->hasSourceCache = array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getSource($name)
+    {
+        $exceptions = array();
+        foreach ($this->loaders as $loader) {
+            if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
+                continue;
+            }
+
+            try {
+                return $loader->getSource($name);
+            } catch (Twig_Error_Loader $e) {
+                $exceptions[] = $e->getMessage();
+            }
+        }
+
+        throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function exists($name)
+    {
+        $name = (string) $name;
+
+        if (isset($this->hasSourceCache[$name])) {
+            return $this->hasSourceCache[$name];
+        }
+
+        foreach ($this->loaders as $loader) {
+            if ($loader instanceof Twig_ExistsLoaderInterface) {
+                if ($loader->exists($name)) {
+                    return $this->hasSourceCache[$name] = true;
+                }
+
+                continue;
+            }
+
+            try {
+                $loader->getSource($name);
+
+                return $this->hasSourceCache[$name] = true;
+            } catch (Twig_Error_Loader $e) {
+            }
+        }
+
+        return $this->hasSourceCache[$name] = false;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCacheKey($name)
+    {
+        $exceptions = array();
+        foreach ($this->loaders as $loader) {
+            if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
+                continue;
+            }
+
+            try {
+                return $loader->getCacheKey($name);
+            } catch (Twig_Error_Loader $e) {
+                $exceptions[] = get_class($loader).': '.$e->getMessage();
+            }
+        }
+
+        throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isFresh($name, $time)
+    {
+        $exceptions = array();
+        foreach ($this->loaders as $loader) {
+            if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
+                continue;
+            }
+
+            try {
+                return $loader->isFresh($name, $time);
+            } catch (Twig_Error_Loader $e) {
+                $exceptions[] = get_class($loader).': '.$e->getMessage();
+            }
+        }
+
+        throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Loader/Chain.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Loader/Filesystem.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Loader/Filesystem.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Loader/Filesystem.php	(revision 2)
@@ -0,0 +1,260 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Loads template from the filesystem.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
+{
+    /** Identifier of the main namespace. */
+    const MAIN_NAMESPACE = '__main__';
+
+    protected $paths = array();
+    protected $cache = array();
+    protected $errorCache = array();
+
+    /**
+     * Constructor.
+     *
+     * @param string|array $paths A path or an array of paths where to look for templates
+     */
+    public function __construct($paths = array())
+    {
+        if ($paths) {
+            $this->setPaths($paths);
+        }
+    }
+
+    /**
+     * Returns the paths to the templates.
+     *
+     * @param string $namespace A path namespace
+     *
+     * @return array The array of paths where to look for templates
+     */
+    public function getPaths($namespace = self::MAIN_NAMESPACE)
+    {
+        return isset($this->paths[$namespace]) ? $this->paths[$namespace] : array();
+    }
+
+    /**
+     * Returns the path namespaces.
+     *
+     * The main namespace is always defined.
+     *
+     * @return array The array of defined namespaces
+     */
+    public function getNamespaces()
+    {
+        return array_keys($this->paths);
+    }
+
+    /**
+     * Sets the paths where templates are stored.
+     *
+     * @param string|array $paths     A path or an array of paths where to look for templates
+     * @param string       $namespace A path namespace
+     */
+    public function setPaths($paths, $namespace = self::MAIN_NAMESPACE)
+    {
+        if (!is_array($paths)) {
+            $paths = array($paths);
+        }
+
+        $this->paths[$namespace] = array();
+        foreach ($paths as $path) {
+            $this->addPath($path, $namespace);
+        }
+    }
+
+    /**
+     * Adds a path where templates are stored.
+     *
+     * @param string $path      A path where to look for templates
+     * @param string $namespace A path name
+     *
+     * @throws Twig_Error_Loader
+     */
+    public function addPath($path, $namespace = self::MAIN_NAMESPACE)
+    {
+        // invalidate the cache
+        $this->cache = $this->errorCache = array();
+
+        if (!is_dir($path)) {
+            throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path));
+        }
+
+        $this->paths[$namespace][] = rtrim($path, '/\\');
+    }
+
+    /**
+     * Prepends a path where templates are stored.
+     *
+     * @param string $path      A path where to look for templates
+     * @param string $namespace A path name
+     *
+     * @throws Twig_Error_Loader
+     */
+    public function prependPath($path, $namespace = self::MAIN_NAMESPACE)
+    {
+        // invalidate the cache
+        $this->cache = $this->errorCache = array();
+
+        if (!is_dir($path)) {
+            throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path));
+        }
+
+        $path = rtrim($path, '/\\');
+
+        if (!isset($this->paths[$namespace])) {
+            $this->paths[$namespace][] = $path;
+        } else {
+            array_unshift($this->paths[$namespace], $path);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getSource($name)
+    {
+        return file_get_contents($this->findTemplate($name));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCacheKey($name)
+    {
+        return $this->findTemplate($name);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function exists($name)
+    {
+        $name = $this->normalizeName($name);
+
+        if (isset($this->cache[$name])) {
+            return true;
+        }
+
+        try {
+            return false !== $this->findTemplate($name, false);
+        } catch (Twig_Error_Loader $exception) {
+            return false;
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isFresh($name, $time)
+    {
+        return filemtime($this->findTemplate($name)) <= $time;
+    }
+
+    protected function findTemplate($name)
+    {
+        $throw = func_num_args() > 1 ? func_get_arg(1) : true;
+        $name = $this->normalizeName($name);
+
+        if (isset($this->cache[$name])) {
+            return $this->cache[$name];
+        }
+
+        if (isset($this->errorCache[$name])) {
+            if (!$throw) {
+                return false;
+            }
+
+            throw new Twig_Error_Loader($this->errorCache[$name]);
+        }
+
+        $this->validateName($name);
+
+        list($namespace, $shortname) = $this->parseName($name);
+
+        if (!isset($this->paths[$namespace])) {
+            $this->errorCache[$name] = sprintf('There are no registered paths for namespace "%s".', $namespace);
+
+            if (!$throw) {
+                return false;
+            }
+
+            throw new Twig_Error_Loader($this->errorCache[$name]);
+        }
+
+        foreach ($this->paths[$namespace] as $path) {
+            if (is_file($path.'/'.$shortname)) {
+                if (false !== $realpath = realpath($path.'/'.$shortname)) {
+                    return $this->cache[$name] = $realpath;
+                }
+
+                return $this->cache[$name] = $path.'/'.$shortname;
+            }
+        }
+
+        $this->errorCache[$name] = sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace]));
+
+        if (!$throw) {
+            return false;
+        }
+
+        throw new Twig_Error_Loader($this->errorCache[$name]);
+    }
+
+    protected function parseName($name, $default = self::MAIN_NAMESPACE)
+    {
+        if (isset($name[0]) && '@' == $name[0]) {
+            if (false === $pos = strpos($name, '/')) {
+                throw new Twig_Error_Loader(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name));
+            }
+
+            $namespace = substr($name, 1, $pos - 1);
+            $shortname = substr($name, $pos + 1);
+
+            return array($namespace, $shortname);
+        }
+
+        return array($default, $name);
+    }
+
+    protected function normalizeName($name)
+    {
+        return preg_replace('#/{2,}#', '/', str_replace('\\', '/', (string) $name));
+    }
+
+    protected function validateName($name)
+    {
+        if (false !== strpos($name, "\0")) {
+            throw new Twig_Error_Loader('A template name cannot contain NUL bytes.');
+        }
+
+        $name = ltrim($name, '/');
+        $parts = explode('/', $name);
+        $level = 0;
+        foreach ($parts as $part) {
+            if ('..' === $part) {
+                --$level;
+            } elseif ('.' !== $part) {
+                ++$level;
+            }
+
+            if ($level < 0) {
+                throw new Twig_Error_Loader(sprintf('Looks like you try to load a template outside configured directories (%s).', $name));
+            }
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Loader/Filesystem.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Loader/String.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Loader/String.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Loader/String.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Loader_String class is deprecated since version 1.18.1 and will be removed in 2.0. Use Twig_Loader_Array instead or Twig_Environment::createTemplate().', E_USER_DEPRECATED);
+
+/**
+ * Loads a template from a string.
+ *
+ * This loader should NEVER be used. It only exists for Twig internal purposes.
+ *
+ * When using this loader with a cache mechanism, you should know that a new cache
+ * key is generated each time a template content "changes" (the cache key being the
+ * source code of the template). If you don't want to see your cache grows out of
+ * control, you need to take care of clearing the old cache file by yourself.
+ *
+ * @deprecated since 1.18.1 (to be removed in 2.0)
+ *
+ * @internal
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Loader_String implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function getSource($name)
+    {
+        return $name;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function exists($name)
+    {
+        return true;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCacheKey($name)
+    {
+        return $name;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isFresh($name, $time)
+    {
+        return true;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Loader/String.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/LoaderInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/LoaderInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/LoaderInterface.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface all loaders must implement.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_LoaderInterface
+{
+    /**
+     * Gets the source code of a template, given its name.
+     *
+     * @param string $name The name of the template to load
+     *
+     * @return string The template source code
+     *
+     * @throws Twig_Error_Loader When $name is not found
+     */
+    public function getSource($name);
+
+    /**
+     * Gets the cache key to use for the cache for a given template name.
+     *
+     * @param string $name The name of the template to load
+     *
+     * @return string The cache key
+     *
+     * @throws Twig_Error_Loader When $name is not found
+     */
+    public function getCacheKey($name);
+
+    /**
+     * Returns true if the template is still fresh.
+     *
+     * @param string $name The template name
+     * @param int    $time Timestamp of the last modification time of the
+     *                     cached template
+     *
+     * @return bool true if the template is fresh, false otherwise
+     *
+     * @throws Twig_Error_Loader When $name is not found
+     */
+    public function isFresh($name, $time);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/LoaderInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Markup.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Markup.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Markup.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Marks a content as safe.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Markup implements Countable
+{
+    protected $content;
+    protected $charset;
+
+    public function __construct($content, $charset)
+    {
+        $this->content = (string) $content;
+        $this->charset = $charset;
+    }
+
+    public function __toString()
+    {
+        return $this->content;
+    }
+
+    public function count()
+    {
+        return function_exists('mb_get_info') ? mb_strlen($this->content, $this->charset) : strlen($this->content);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Markup.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/AutoEscape.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/AutoEscape.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/AutoEscape.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents an autoescape node.
+ *
+ * The value is the escaping strategy (can be html, js, ...)
+ *
+ * The true value is equivalent to html.
+ *
+ * If autoescaping is disabled, then the value is false.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_AutoEscape extends Twig_Node
+{
+    public function __construct($value, Twig_NodeInterface $body, $lineno, $tag = 'autoescape')
+    {
+        parent::__construct(array('body' => $body), array('value' => $value), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->subcompile($this->getNode('body'));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/AutoEscape.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Block.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Block.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Block.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a block node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Block extends Twig_Node
+{
+    public function __construct($name, Twig_NodeInterface $body, $lineno, $tag = null)
+    {
+        parent::__construct(array('body' => $body), array('name' => $name), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write(sprintf("public function block_%s(\$context, array \$blocks = array())\n", $this->getAttribute('name')), "{\n")
+            ->indent()
+        ;
+
+        $compiler
+            ->subcompile($this->getNode('body'))
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Block.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/BlockReference.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/BlockReference.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/BlockReference.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a block call node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_BlockReference extends Twig_Node implements Twig_NodeOutputInterface
+{
+    public function __construct($name, $lineno, $tag = null)
+    {
+        parent::__construct(array(), array('name' => $name), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write(sprintf("\$this->displayBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name')))
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/BlockReference.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Body.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Body.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Body.php	(revision 2)
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a body node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Body extends Twig_Node
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Body.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/CheckSecurity.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/CheckSecurity.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/CheckSecurity.php	(revision 2)
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_CheckSecurity extends Twig_Node
+{
+    protected $usedFilters;
+    protected $usedTags;
+    protected $usedFunctions;
+
+    public function __construct(array $usedFilters, array $usedTags, array $usedFunctions)
+    {
+        $this->usedFilters = $usedFilters;
+        $this->usedTags = $usedTags;
+        $this->usedFunctions = $usedFunctions;
+
+        parent::__construct();
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $tags = $filters = $functions = array();
+        foreach (array('tags', 'filters', 'functions') as $type) {
+            foreach ($this->{'used'.ucfirst($type)} as $name => $node) {
+                if ($node instanceof Twig_Node) {
+                    ${$type}[$name] = $node->getLine();
+                } else {
+                    ${$type}[$node] = null;
+                }
+            }
+        }
+
+        $compiler
+            ->write('$tags = ')->repr(array_filter($tags))->raw(";\n")
+            ->write('$filters = ')->repr(array_filter($filters))->raw(";\n")
+            ->write('$functions = ')->repr(array_filter($functions))->raw(";\n\n")
+            ->write("try {\n")
+            ->indent()
+            ->write("\$this->env->getExtension('sandbox')->checkSecurity(\n")
+            ->indent()
+            ->write(!$tags ? "array(),\n" : "array('".implode("', '", array_keys($tags))."'),\n")
+            ->write(!$filters ? "array(),\n" : "array('".implode("', '", array_keys($filters))."'),\n")
+            ->write(!$functions ? "array()\n" : "array('".implode("', '", array_keys($functions))."')\n")
+            ->outdent()
+            ->write(");\n")
+            ->outdent()
+            ->write("} catch (Twig_Sandbox_SecurityError \$e) {\n")
+            ->indent()
+            ->write("\$e->setTemplateFile(\$this->getTemplateName());\n\n")
+            ->write("if (\$e instanceof Twig_Sandbox_SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n")
+            ->indent()
+            ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n")
+            ->outdent()
+            ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n")
+            ->indent()
+            ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n")
+            ->outdent()
+            ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n")
+            ->indent()
+            ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n")
+            ->outdent()
+            ->write("}\n\n")
+            ->write("throw \$e;\n")
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/CheckSecurity.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Do.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Do.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Do.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a do node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Do extends Twig_Node
+{
+    public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write('')
+            ->subcompile($this->getNode('expr'))
+            ->raw(";\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Do.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Embed.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Embed.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Embed.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents an embed node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Embed extends Twig_Node_Include
+{
+    // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module)
+    public function __construct($filename, $index, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null)
+    {
+        parent::__construct(new Twig_Node_Expression_Constant('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag);
+
+        $this->setAttribute('filename', $filename);
+        $this->setAttribute('index', $index);
+    }
+
+    protected function addGetTemplate(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write('$this->loadTemplate(')
+            ->string($this->getAttribute('filename'))
+            ->raw(', ')
+            ->repr($compiler->getFilename())
+            ->raw(', ')
+            ->repr($this->getLine())
+            ->raw(', ')
+            ->string($this->getAttribute('index'))
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Embed.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Array.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Array.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Array.php	(revision 2)
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Array extends Twig_Node_Expression
+{
+    protected $index;
+
+    public function __construct(array $elements, $lineno)
+    {
+        parent::__construct($elements, array(), $lineno);
+
+        $this->index = -1;
+        foreach ($this->getKeyValuePairs() as $pair) {
+            if ($pair['key'] instanceof Twig_Node_Expression_Constant && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) {
+                $this->index = $pair['key']->getAttribute('value');
+            }
+        }
+    }
+
+    public function getKeyValuePairs()
+    {
+        $pairs = array();
+
+        foreach (array_chunk($this->nodes, 2) as $pair) {
+            $pairs[] = array(
+                'key' => $pair[0],
+                'value' => $pair[1],
+            );
+        }
+
+        return $pairs;
+    }
+
+    public function hasElement(Twig_Node_Expression $key)
+    {
+        foreach ($this->getKeyValuePairs() as $pair) {
+            // we compare the string representation of the keys
+            // to avoid comparing the line numbers which are not relevant here.
+            if ((string) $key == (string) $pair['key']) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public function addElement(Twig_Node_Expression $value, Twig_Node_Expression $key = null)
+    {
+        if (null === $key) {
+            $key = new Twig_Node_Expression_Constant(++$this->index, $value->getLine());
+        }
+
+        array_push($this->nodes, $key, $value);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->raw('array(');
+        $first = true;
+        foreach ($this->getKeyValuePairs() as $pair) {
+            if (!$first) {
+                $compiler->raw(', ');
+            }
+            $first = false;
+
+            $compiler
+                ->subcompile($pair['key'])
+                ->raw(' => ')
+                ->subcompile($pair['value'])
+            ;
+        }
+        $compiler->raw(')');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Array.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/AssignName.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/AssignName.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/AssignName.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Node_Expression_AssignName extends Twig_Node_Expression_Name
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('$context[')
+            ->string($this->getAttribute('name'))
+            ->raw(']')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/AssignName.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Add.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Add.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Add.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Add extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('+');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/And.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/And.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/And.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_And extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('&&');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/And.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_BitwiseAnd extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('&');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_BitwiseOr extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('|');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_BitwiseXor extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('^');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Concat.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Concat.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Concat.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Concat extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('.');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Concat.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Div.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Div.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Div.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Div extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('/');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Div.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/EndsWith.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/EndsWith.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/EndsWith.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2013 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_EndsWith extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $left = $compiler->getVarName();
+        $right = $compiler->getVarName();
+        $compiler
+            ->raw(sprintf('(is_string($%s = ', $left))
+            ->subcompile($this->getNode('left'))
+            ->raw(sprintf(') && is_string($%s = ', $right))
+            ->subcompile($this->getNode('right'))
+            ->raw(sprintf(') && (\'\' === $%2$s || $%2$s === substr($%1$s, -strlen($%2$s))))', $left, $right))
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/EndsWith.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Equal.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Equal.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Equal.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Equal extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('==');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Equal.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/FloorDiv.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/FloorDiv.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/FloorDiv.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_FloorDiv extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->raw('intval(floor(');
+        parent::compile($compiler);
+        $compiler->raw('))');
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('/');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/FloorDiv.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Greater.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Greater.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Greater.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Greater extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('>');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Greater.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_GreaterEqual extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('>=');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/In.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/In.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/In.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_In extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('twig_in_filter(')
+            ->subcompile($this->getNode('left'))
+            ->raw(', ')
+            ->subcompile($this->getNode('right'))
+            ->raw(')')
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('in');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/In.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Less.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Less.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Less.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Less extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('<');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Less.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/LessEqual.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/LessEqual.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/LessEqual.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_LessEqual extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('<=');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/LessEqual.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Matches.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Matches.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Matches.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2013 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Matches extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('preg_match(')
+            ->subcompile($this->getNode('right'))
+            ->raw(', ')
+            ->subcompile($this->getNode('left'))
+            ->raw(')')
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Matches.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mod.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mod.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mod.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Mod extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('%');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mod.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mul.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mul.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mul.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Mul extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('*');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Mul.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotEqual.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotEqual.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotEqual.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_NotEqual extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('!=');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotEqual.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotIn.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotIn.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotIn.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_NotIn extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('!twig_in_filter(')
+            ->subcompile($this->getNode('left'))
+            ->raw(', ')
+            ->subcompile($this->getNode('right'))
+            ->raw(')')
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('not in');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/NotIn.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Or.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Or.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Or.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Or extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('||');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Or.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Power.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Power.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Power.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Power extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('pow(')
+            ->subcompile($this->getNode('left'))
+            ->raw(', ')
+            ->subcompile($this->getNode('right'))
+            ->raw(')')
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('**');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Power.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Range.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Range.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Range.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Range extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('range(')
+            ->subcompile($this->getNode('left'))
+            ->raw(', ')
+            ->subcompile($this->getNode('right'))
+            ->raw(')')
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('..');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Range.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/StartsWith.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/StartsWith.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/StartsWith.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2013 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_StartsWith extends Twig_Node_Expression_Binary
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $left = $compiler->getVarName();
+        $right = $compiler->getVarName();
+        $compiler
+            ->raw(sprintf('(is_string($%s = ', $left))
+            ->subcompile($this->getNode('left'))
+            ->raw(sprintf(') && is_string($%s = ', $right))
+            ->subcompile($this->getNode('right'))
+            ->raw(sprintf(') && (\'\' === $%2$s || 0 === strpos($%1$s, $%2$s)))', $left, $right))
+        ;
+    }
+
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/StartsWith.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Sub.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Sub.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Sub.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Binary_Sub extends Twig_Node_Expression_Binary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        return $compiler->raw('-');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary/Sub.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+abstract class Twig_Node_Expression_Binary extends Twig_Node_Expression
+{
+    public function __construct(Twig_NodeInterface $left, Twig_NodeInterface $right, $lineno)
+    {
+        parent::__construct(array('left' => $left, 'right' => $right), array(), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(')
+            ->subcompile($this->getNode('left'))
+            ->raw(' ')
+        ;
+        $this->operator($compiler);
+        $compiler
+            ->raw(' ')
+            ->subcompile($this->getNode('right'))
+            ->raw(')')
+        ;
+    }
+
+    abstract public function operator(Twig_Compiler $compiler);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Binary.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/BlockReference.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/BlockReference.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/BlockReference.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a block call node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_BlockReference extends Twig_Node_Expression
+{
+    public function __construct(Twig_NodeInterface $name, $asString = false, $lineno, $tag = null)
+    {
+        parent::__construct(array('name' => $name), array('as_string' => $asString, 'output' => false), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        if ($this->getAttribute('as_string')) {
+            $compiler->raw('(string) ');
+        }
+
+        if ($this->getAttribute('output')) {
+            $compiler
+                ->addDebugInfo($this)
+                ->write('$this->displayBlock(')
+                ->subcompile($this->getNode('name'))
+                ->raw(", \$context, \$blocks);\n")
+            ;
+        } else {
+            $compiler
+                ->raw('$this->renderBlock(')
+                ->subcompile($this->getNode('name'))
+                ->raw(', $context, $blocks)')
+            ;
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/BlockReference.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Call.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Call.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Call.php	(revision 2)
@@ -0,0 +1,253 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+abstract class Twig_Node_Expression_Call extends Twig_Node_Expression
+{
+    protected function compileCallable(Twig_Compiler $compiler)
+    {
+        $closingParenthesis = false;
+        if ($this->hasAttribute('callable') && $callable = $this->getAttribute('callable')) {
+            if (is_string($callable)) {
+                $compiler->raw($callable);
+            } elseif (is_array($callable) && $callable[0] instanceof Twig_ExtensionInterface) {
+                $compiler->raw(sprintf('$this->env->getExtension(\'%s\')->%s', $callable[0]->getName(), $callable[1]));
+            } else {
+                $type = ucfirst($this->getAttribute('type'));
+                $compiler->raw(sprintf('call_user_func_array($this->env->get%s(\'%s\')->getCallable(), array', $type, $this->getAttribute('name')));
+                $closingParenthesis = true;
+            }
+        } else {
+            $compiler->raw($this->getAttribute('thing')->compile());
+        }
+
+        $this->compileArguments($compiler);
+
+        if ($closingParenthesis) {
+            $compiler->raw(')');
+        }
+    }
+
+    protected function compileArguments(Twig_Compiler $compiler)
+    {
+        $compiler->raw('(');
+
+        $first = true;
+
+        if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) {
+            $compiler->raw('$this->env');
+            $first = false;
+        }
+
+        if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) {
+            if (!$first) {
+                $compiler->raw(', ');
+            }
+            $compiler->raw('$context');
+            $first = false;
+        }
+
+        if ($this->hasAttribute('arguments')) {
+            foreach ($this->getAttribute('arguments') as $argument) {
+                if (!$first) {
+                    $compiler->raw(', ');
+                }
+                $compiler->string($argument);
+                $first = false;
+            }
+        }
+
+        if ($this->hasNode('node')) {
+            if (!$first) {
+                $compiler->raw(', ');
+            }
+            $compiler->subcompile($this->getNode('node'));
+            $first = false;
+        }
+
+        if ($this->hasNode('arguments') && null !== $this->getNode('arguments')) {
+            $callable = $this->hasAttribute('callable') ? $this->getAttribute('callable') : null;
+
+            $arguments = $this->getArguments($callable, $this->getNode('arguments'));
+
+            foreach ($arguments as $node) {
+                if (!$first) {
+                    $compiler->raw(', ');
+                }
+                $compiler->subcompile($node);
+                $first = false;
+            }
+        }
+
+        $compiler->raw(')');
+    }
+
+    protected function getArguments($callable, $arguments)
+    {
+        $callType = $this->getAttribute('type');
+        $callName = $this->getAttribute('name');
+
+        $parameters = array();
+        $named = false;
+        foreach ($arguments as $name => $node) {
+            if (!is_int($name)) {
+                $named = true;
+                $name = $this->normalizeName($name);
+            } elseif ($named) {
+                throw new Twig_Error_Syntax(sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $callType, $callName));
+            }
+
+            $parameters[$name] = $node;
+        }
+
+        $isVariadic = $this->hasAttribute('is_variadic') && $this->getAttribute('is_variadic');
+        if (!$named && !$isVariadic) {
+            return $parameters;
+        }
+
+        if (!$callable) {
+            if ($named) {
+                $message = sprintf('Named arguments are not supported for %s "%s".', $callType, $callName);
+            } else {
+                $message = sprintf('Arbitrary positional arguments are not supported for %s "%s".', $callType, $callName);
+            }
+
+            throw new LogicException($message);
+        }
+
+        // manage named arguments
+        $callableParameters = $this->getCallableParameters($callable, $isVariadic);
+        $arguments = array();
+        $names = array();
+        $missingArguments = array();
+        $optionalArguments = array();
+        $pos = 0;
+        foreach ($callableParameters as $callableParameter) {
+            $names[] = $name = $this->normalizeName($callableParameter->name);
+
+            if (array_key_exists($name, $parameters)) {
+                if (array_key_exists($pos, $parameters)) {
+                    throw new Twig_Error_Syntax(sprintf('Argument "%s" is defined twice for %s "%s".', $name, $callType, $callName));
+                }
+
+                if (!empty($missingArguments)) {
+                    throw new Twig_Error_Syntax(sprintf(
+                        'Argument "%s" could not be assigned for %s "%s(%s)" because it is mapped to an internal PHP function which cannot determine default value for optional argument%s "%s".',
+                        $name, $callType, $callName, implode(', ', $names), count($missingArguments) > 1 ? 's' : '', implode('", "', $missingArguments))
+                    );
+                }
+
+                $arguments = array_merge($arguments, $optionalArguments);
+                $arguments[] = $parameters[$name];
+                unset($parameters[$name]);
+                $optionalArguments = array();
+            } elseif (array_key_exists($pos, $parameters)) {
+                $arguments = array_merge($arguments, $optionalArguments);
+                $arguments[] = $parameters[$pos];
+                unset($parameters[$pos]);
+                $optionalArguments = array();
+                ++$pos;
+            } elseif ($callableParameter->isDefaultValueAvailable()) {
+                $optionalArguments[] = new Twig_Node_Expression_Constant($callableParameter->getDefaultValue(), -1);
+            } elseif ($callableParameter->isOptional()) {
+                if (empty($parameters)) {
+                    break;
+                } else {
+                    $missingArguments[] = $name;
+                }
+            } else {
+                throw new Twig_Error_Syntax(sprintf('Value for argument "%s" is required for %s "%s".', $name, $callType, $callName));
+            }
+        }
+
+        if ($isVariadic) {
+            $arbitraryArguments = new Twig_Node_Expression_Array(array(), -1);
+            foreach ($parameters as $key => $value) {
+                if (is_int($key)) {
+                    $arbitraryArguments->addElement($value);
+                } else {
+                    $arbitraryArguments->addElement($value, new Twig_Node_Expression_Constant($key, -1));
+                }
+                unset($parameters[$key]);
+            }
+
+            if ($arbitraryArguments->count()) {
+                $arguments = array_merge($arguments, $optionalArguments);
+                $arguments[] = $arbitraryArguments;
+            }
+        }
+
+        if (!empty($parameters)) {
+            $unknownParameter = null;
+            foreach ($parameters as $parameter) {
+                if ($parameter instanceof Twig_Node) {
+                    $unknownParameter = $parameter;
+                    break;
+                }
+            }
+
+            throw new Twig_Error_Syntax(sprintf(
+                'Unknown argument%s "%s" for %s "%s(%s)".',
+                count($parameters) > 1 ? 's' : '', implode('", "', array_keys($parameters)), $callType, $callName, implode(', ', $names)
+            ), $unknownParameter ? $unknownParameter->getLine() : -1);
+        }
+
+        return $arguments;
+    }
+
+    protected function normalizeName($name)
+    {
+        return strtolower(preg_replace(array('/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'), array('\\1_\\2', '\\1_\\2'), $name));
+    }
+
+    private function getCallableParameters($callable, $isVariadic)
+    {
+        if (is_array($callable)) {
+            $r = new ReflectionMethod($callable[0], $callable[1]);
+        } elseif (is_object($callable) && !$callable instanceof Closure) {
+            $r = new ReflectionObject($callable);
+            $r = $r->getMethod('__invoke');
+        } elseif (is_string($callable) && false !== strpos($callable, '::')) {
+            $r = new ReflectionMethod($callable);
+        } else {
+            $r = new ReflectionFunction($callable);
+        }
+
+        $parameters = $r->getParameters();
+        if ($this->hasNode('node')) {
+            array_shift($parameters);
+        }
+        if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) {
+            array_shift($parameters);
+        }
+        if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) {
+            array_shift($parameters);
+        }
+        if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) {
+            foreach ($this->getAttribute('arguments') as $argument) {
+                array_shift($parameters);
+            }
+        }
+        if ($isVariadic) {
+            $argument = end($parameters);
+            if ($argument && $argument->isArray() && $argument->isDefaultValueAvailable() && array() === $argument->getDefaultValue()) {
+                array_pop($parameters);
+            } else {
+                $callableName = $r->name;
+                if ($r->getDeclaringClass()) {
+                    $callableName = $r->getDeclaringClass()->name.'::'.$callableName;
+                }
+
+                throw new LogicException(sprintf('The last parameter of "%s" for %s "%s" must be an array with default value, eg. "array $arg = array()".', $callableName, $this->getAttribute('type'), $this->getAttribute('name')));
+            }
+        }
+
+        return $parameters;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Call.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Conditional.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Conditional.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Conditional.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Conditional extends Twig_Node_Expression
+{
+    public function __construct(Twig_Node_Expression $expr1, Twig_Node_Expression $expr2, Twig_Node_Expression $expr3, $lineno)
+    {
+        parent::__construct(array('expr1' => $expr1, 'expr2' => $expr2, 'expr3' => $expr3), array(), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('((')
+            ->subcompile($this->getNode('expr1'))
+            ->raw(') ? (')
+            ->subcompile($this->getNode('expr2'))
+            ->raw(') : (')
+            ->subcompile($this->getNode('expr3'))
+            ->raw('))')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Conditional.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Constant.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Constant.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Constant.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Constant extends Twig_Node_Expression
+{
+    public function __construct($value, $lineno)
+    {
+        parent::__construct(array(), array('value' => $value), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->repr($this->getAttribute('value'));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Constant.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/ExtensionReference.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/ExtensionReference.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/ExtensionReference.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Node_Expression_ExtensionReference class is deprecated since version 1.23 and will be removed in 2.0.', E_USER_DEPRECATED);
+
+/**
+ * Represents an extension call node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.23 and will be removed in 2.0.
+ */
+class Twig_Node_Expression_ExtensionReference extends Twig_Node_Expression
+{
+    public function __construct($name, $lineno, $tag = null)
+    {
+        parent::__construct(array(), array('name' => $name), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->raw(sprintf("\$this->env->getExtension('%s')", $this->getAttribute('name')));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/ExtensionReference.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter/Default.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter/Default.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter/Default.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Returns the value or the default value when it is undefined or empty.
+ *
+ * <pre>
+ *  {{ var.foo|default('foo item on var is not defined') }}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Filter_Default extends Twig_Node_Expression_Filter
+{
+    public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null)
+    {
+        $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('default', $node->getLine()), $arguments, $node->getLine());
+
+        if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) {
+            $test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine());
+            $false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine());
+
+            $node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine());
+        } else {
+            $node = $default;
+        }
+
+        parent::__construct($node, $filterName, $arguments, $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->subcompile($this->getNode('node'));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter/Default.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Filter extends Twig_Node_Expression_Call
+{
+    public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null)
+    {
+        parent::__construct(array('node' => $node, 'filter' => $filterName, 'arguments' => $arguments), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $name = $this->getNode('filter')->getAttribute('value');
+        $filter = $compiler->getEnvironment()->getFilter($name);
+
+        $this->setAttribute('name', $name);
+        $this->setAttribute('type', 'filter');
+        $this->setAttribute('thing', $filter);
+        $this->setAttribute('needs_environment', $filter->needsEnvironment());
+        $this->setAttribute('needs_context', $filter->needsContext());
+        $this->setAttribute('arguments', $filter->getArguments());
+        if ($filter instanceof Twig_FilterCallableInterface || $filter instanceof Twig_SimpleFilter) {
+            $this->setAttribute('callable', $filter->getCallable());
+        }
+        if ($filter instanceof Twig_SimpleFilter) {
+            $this->setAttribute('is_variadic', $filter->isVariadic());
+        }
+
+        $this->compileCallable($compiler);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Filter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Function.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Function.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Function.php	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Function extends Twig_Node_Expression_Call
+{
+    public function __construct($name, Twig_NodeInterface $arguments, $lineno)
+    {
+        parent::__construct(array('arguments' => $arguments), array('name' => $name), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $name = $this->getAttribute('name');
+        $function = $compiler->getEnvironment()->getFunction($name);
+
+        $this->setAttribute('name', $name);
+        $this->setAttribute('type', 'function');
+        $this->setAttribute('thing', $function);
+        $this->setAttribute('needs_environment', $function->needsEnvironment());
+        $this->setAttribute('needs_context', $function->needsContext());
+        $this->setAttribute('arguments', $function->getArguments());
+        if ($function instanceof Twig_FunctionCallableInterface || $function instanceof Twig_SimpleFunction) {
+            $this->setAttribute('callable', $function->getCallable());
+        }
+        if ($function instanceof Twig_SimpleFunction) {
+            $this->setAttribute('is_variadic', $function->isVariadic());
+        }
+
+        $this->compileCallable($compiler);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Function.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/GetAttr.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/GetAttr.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/GetAttr.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_GetAttr extends Twig_Node_Expression
+{
+    public function __construct(Twig_Node_Expression $node, Twig_Node_Expression $attribute, Twig_Node_Expression $arguments = null, $type, $lineno)
+    {
+        parent::__construct(array('node' => $node, 'attribute' => $attribute, 'arguments' => $arguments), array('type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'disable_c_ext' => false), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        if (function_exists('twig_template_get_attributes') && !$this->getAttribute('disable_c_ext')) {
+            $compiler->raw('twig_template_get_attributes($this, ');
+        } else {
+            $compiler->raw('$this->getAttribute(');
+        }
+
+        if ($this->getAttribute('ignore_strict_check')) {
+            $this->getNode('node')->setAttribute('ignore_strict_check', true);
+        }
+
+        $compiler->subcompile($this->getNode('node'));
+
+        $compiler->raw(', ')->subcompile($this->getNode('attribute'));
+
+        // only generate optional arguments when needed (to make generated code more readable)
+        $needFourth = $this->getAttribute('ignore_strict_check');
+        $needThird = $needFourth || $this->getAttribute('is_defined_test');
+        $needSecond = $needThird || Twig_Template::ANY_CALL !== $this->getAttribute('type');
+        $needFirst = $needSecond || null !== $this->getNode('arguments');
+
+        if ($needFirst) {
+            if (null !== $this->getNode('arguments')) {
+                $compiler->raw(', ')->subcompile($this->getNode('arguments'));
+            } else {
+                $compiler->raw(', array()');
+            }
+        }
+
+        if ($needSecond) {
+            $compiler->raw(', ')->repr($this->getAttribute('type'));
+        }
+
+        if ($needThird) {
+            $compiler->raw(', ')->repr($this->getAttribute('is_defined_test'));
+        }
+
+        if ($needFourth) {
+            $compiler->raw(', ')->repr($this->getAttribute('ignore_strict_check'));
+        }
+
+        $compiler->raw(')');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/GetAttr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/MethodCall.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/MethodCall.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/MethodCall.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_MethodCall extends Twig_Node_Expression
+{
+    public function __construct(Twig_Node_Expression $node, $method, Twig_Node_Expression_Array $arguments, $lineno)
+    {
+        parent::__construct(array('node' => $node, 'arguments' => $arguments), array('method' => $method, 'safe' => false), $lineno);
+
+        if ($node instanceof Twig_Node_Expression_Name) {
+            $node->setAttribute('always_defined', true);
+        }
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->subcompile($this->getNode('node'))
+            ->raw('->')
+            ->raw($this->getAttribute('method'))
+            ->raw('(')
+        ;
+        $first = true;
+        foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) {
+            if (!$first) {
+                $compiler->raw(', ');
+            }
+            $first = false;
+
+            $compiler->subcompile($pair['value']);
+        }
+        $compiler->raw(')');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/MethodCall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Name.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Name.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Name.php	(revision 2)
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Name extends Twig_Node_Expression
+{
+    protected $specialVars = array(
+        '_self' => '$this',
+        '_context' => '$context',
+        '_charset' => '$this->env->getCharset()',
+    );
+
+    public function __construct($name, $lineno)
+    {
+        parent::__construct(array(), array('name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $name = $this->getAttribute('name');
+
+        $compiler->addDebugInfo($this);
+
+        if ($this->getAttribute('is_defined_test')) {
+            if ($this->isSpecial()) {
+                $compiler->repr(true);
+            } else {
+                $compiler->raw('array_key_exists(')->repr($name)->raw(', $context)');
+            }
+        } elseif ($this->isSpecial()) {
+            $compiler->raw($this->specialVars[$name]);
+        } elseif ($this->getAttribute('always_defined')) {
+            $compiler
+                ->raw('$context[')
+                ->string($name)
+                ->raw(']')
+            ;
+        } else {
+            // remove the non-PHP 5.4 version when PHP 5.3 support is dropped
+            // as the non-optimized version is just a workaround for slow ternary operator
+            // when the context has a lot of variables
+            if (PHP_VERSION_ID >= 50400) {
+                // PHP 5.4 ternary operator performance was optimized
+                $compiler
+                    ->raw('(isset($context[')
+                    ->string($name)
+                    ->raw(']) ? $context[')
+                    ->string($name)
+                    ->raw('] : ')
+                ;
+
+                if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) {
+                    $compiler->raw('null)');
+                } else {
+                    $compiler->raw('$this->getContext($context, ')->string($name)->raw('))');
+                }
+            } else {
+                $compiler
+                    ->raw('$this->getContext($context, ')
+                    ->string($name)
+                ;
+
+                if ($this->getAttribute('ignore_strict_check')) {
+                    $compiler->raw(', true');
+                }
+
+                $compiler
+                    ->raw(')')
+                ;
+            }
+        }
+    }
+
+    public function isSpecial()
+    {
+        return isset($this->specialVars[$this->getAttribute('name')]);
+    }
+
+    public function isSimple()
+    {
+        return !$this->isSpecial() && !$this->getAttribute('is_defined_test');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Name.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/NullCoalesce.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/NullCoalesce.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/NullCoalesce.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_NullCoalesce extends Twig_Node_Expression_Conditional
+{
+    public function __construct(Twig_NodeInterface $left, Twig_NodeInterface $right, $lineno)
+    {
+        $test = new Twig_Node_Expression_Binary_And(
+            new Twig_Node_Expression_Test_Defined(clone $left, 'defined', new Twig_Node(), $left->getLine()),
+            new Twig_Node_Expression_Unary_Not(new Twig_Node_Expression_Test_Null($left, 'null', new Twig_Node(), $left->getLine()), $left->getLine()),
+            $left->getLine()
+        );
+
+        parent::__construct($test, $left, $right, $lineno);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/NullCoalesce.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Parent.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Parent.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Parent.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a parent node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Parent extends Twig_Node_Expression
+{
+    public function __construct($name, $lineno, $tag = null)
+    {
+        parent::__construct(array(), array('output' => false, 'name' => $name), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        if ($this->getAttribute('output')) {
+            $compiler
+                ->addDebugInfo($this)
+                ->write('$this->displayParentBlock(')
+                ->string($this->getAttribute('name'))
+                ->raw(", \$context, \$blocks);\n")
+            ;
+        } else {
+            $compiler
+                ->raw('$this->renderParentBlock(')
+                ->string($this->getAttribute('name'))
+                ->raw(', $context, $blocks)')
+            ;
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Parent.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/TempName.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/TempName.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/TempName.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_TempName extends Twig_Node_Expression
+{
+    public function __construct($name, $lineno)
+    {
+        parent::__construct(array(), array('name' => $name), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('$_')
+            ->raw($this->getAttribute('name'))
+            ->raw('_')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/TempName.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Constant.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Constant.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Constant.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a variable is the exact same value as a constant.
+ *
+ * <pre>
+ *  {% if post.status is constant('Post::PUBLISHED') %}
+ *    the status attribute is exactly the same as Post::PUBLISHED
+ *  {% endif %}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Constant extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(')
+            ->subcompile($this->getNode('node'))
+            ->raw(' === constant(')
+        ;
+
+        if ($this->getNode('arguments')->hasNode(1)) {
+            $compiler
+                ->raw('get_class(')
+                ->subcompile($this->getNode('arguments')->getNode(1))
+                ->raw(')."::".')
+            ;
+        }
+
+        $compiler
+            ->subcompile($this->getNode('arguments')->getNode(0))
+            ->raw('))')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Constant.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Defined.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Defined.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Defined.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a variable is defined in the current context.
+ *
+ * <pre>
+ * {# defined works with variable names and variable attributes #}
+ * {% if foo is defined %}
+ *     {# ... #}
+ * {% endif %}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test
+{
+    public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno)
+    {
+        if ($node instanceof Twig_Node_Expression_Name) {
+            $node->setAttribute('is_defined_test', true);
+        } elseif ($node instanceof Twig_Node_Expression_GetAttr) {
+            $node->setAttribute('is_defined_test', true);
+
+            $this->changeIgnoreStrictCheck($node);
+        } elseif ($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array) {
+            $node = new Twig_Node_Expression_Constant(true, $node->getLine());
+        } else {
+            throw new Twig_Error_Syntax('The "defined" test only works with simple variables.', $this->getLine());
+        }
+
+        parent::__construct($node, $name, $arguments, $lineno);
+    }
+
+    protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node)
+    {
+        $node->setAttribute('ignore_strict_check', true);
+
+        if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
+            $this->changeIgnoreStrictCheck($node->getNode('node'));
+        }
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->subcompile($this->getNode('node'));
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Defined.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Divisibleby.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Divisibleby.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Divisibleby.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a variable is divisible by a number.
+ *
+ * <pre>
+ *  {% if loop.index is divisible by(3) %}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Divisibleby extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(0 == ')
+            ->subcompile($this->getNode('node'))
+            ->raw(' % ')
+            ->subcompile($this->getNode('arguments')->getNode(0))
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Divisibleby.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Even.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Even.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Even.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a number is even.
+ *
+ * <pre>
+ *  {{ var is even }}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Even extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(')
+            ->subcompile($this->getNode('node'))
+            ->raw(' % 2 == 0')
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Even.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Null.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Null.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Null.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks that a variable is null.
+ *
+ * <pre>
+ *  {{ var is none }}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Null extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(null === ')
+            ->subcompile($this->getNode('node'))
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Null.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Odd.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Odd.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Odd.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a number is odd.
+ *
+ * <pre>
+ *  {{ var is odd }}
+ * </pre>
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Odd extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(')
+            ->subcompile($this->getNode('node'))
+            ->raw(' % 2 == 1')
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Odd.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Sameas.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Sameas.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Sameas.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Checks if a variable is the same as another one (=== in PHP).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Expression_Test_Sameas extends Twig_Node_Expression_Test
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->raw('(')
+            ->subcompile($this->getNode('node'))
+            ->raw(' === ')
+            ->subcompile($this->getNode('arguments')->getNode(0))
+            ->raw(')')
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test/Sameas.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Test extends Twig_Node_Expression_Call
+{
+    public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno)
+    {
+        parent::__construct(array('node' => $node, 'arguments' => $arguments), array('name' => $name), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $name = $this->getAttribute('name');
+        $test = $compiler->getEnvironment()->getTest($name);
+
+        $this->setAttribute('name', $name);
+        $this->setAttribute('type', 'test');
+        $this->setAttribute('thing', $test);
+        if ($test instanceof Twig_TestCallableInterface || $test instanceof Twig_SimpleTest) {
+            $this->setAttribute('callable', $test->getCallable());
+        }
+        if ($test instanceof Twig_SimpleTest) {
+            $this->setAttribute('is_variadic', $test->isVariadic());
+        }
+
+        $this->compileCallable($compiler);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Test.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Neg.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Neg.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Neg.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Unary_Neg extends Twig_Node_Expression_Unary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        $compiler->raw('-');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Neg.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Not.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Not.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Not.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Unary_Not extends Twig_Node_Expression_Unary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        $compiler->raw('!');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Not.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Pos.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Pos.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Pos.php	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+class Twig_Node_Expression_Unary_Pos extends Twig_Node_Expression_Unary
+{
+    public function operator(Twig_Compiler $compiler)
+    {
+        $compiler->raw('+');
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary/Pos.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+abstract class Twig_Node_Expression_Unary extends Twig_Node_Expression
+{
+    public function __construct(Twig_NodeInterface $node, $lineno)
+    {
+        parent::__construct(array('node' => $node), array(), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->raw(' ');
+        $this->operator($compiler);
+        $compiler->subcompile($this->getNode('node'));
+    }
+
+    abstract public function operator(Twig_Compiler $compiler);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression/Unary.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Expression.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Expression.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Expression.php	(revision 2)
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Abstract class for all nodes that represents an expression.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class Twig_Node_Expression extends Twig_Node
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Expression.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Flush.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Flush.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Flush.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a flush node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Flush extends Twig_Node
+{
+    public function __construct($lineno, $tag)
+    {
+        parent::__construct(array(), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("flush();\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Flush.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/For.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/For.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/For.php	(revision 2)
@@ -0,0 +1,106 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a for node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_For extends Twig_Node
+{
+    protected $loop;
+
+    public function __construct(Twig_Node_Expression_AssignName $keyTarget, Twig_Node_Expression_AssignName $valueTarget, Twig_Node_Expression $seq, Twig_Node_Expression $ifexpr = null, Twig_NodeInterface $body, Twig_NodeInterface $else = null, $lineno, $tag = null)
+    {
+        $body = new Twig_Node(array($body, $this->loop = new Twig_Node_ForLoop($lineno, $tag)));
+
+        if (null !== $ifexpr) {
+            $body = new Twig_Node_If(new Twig_Node(array($ifexpr, $body)), null, $lineno, $tag);
+        }
+
+        parent::__construct(array('key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body, 'else' => $else), array('with_loop' => true, 'ifexpr' => null !== $ifexpr), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("\$context['_parent'] = \$context;\n")
+            ->write("\$context['_seq'] = twig_ensure_traversable(")
+            ->subcompile($this->getNode('seq'))
+            ->raw(");\n")
+        ;
+
+        if (null !== $this->getNode('else')) {
+            $compiler->write("\$context['_iterated'] = false;\n");
+        }
+
+        if ($this->getAttribute('with_loop')) {
+            $compiler
+                ->write("\$context['loop'] = array(\n")
+                ->write("  'parent' => \$context['_parent'],\n")
+                ->write("  'index0' => 0,\n")
+                ->write("  'index'  => 1,\n")
+                ->write("  'first'  => true,\n")
+                ->write(");\n")
+            ;
+
+            if (!$this->getAttribute('ifexpr')) {
+                $compiler
+                    ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {\n")
+                    ->indent()
+                    ->write("\$length = count(\$context['_seq']);\n")
+                    ->write("\$context['loop']['revindex0'] = \$length - 1;\n")
+                    ->write("\$context['loop']['revindex'] = \$length;\n")
+                    ->write("\$context['loop']['length'] = \$length;\n")
+                    ->write("\$context['loop']['last'] = 1 === \$length;\n")
+                    ->outdent()
+                    ->write("}\n")
+                ;
+            }
+        }
+
+        $this->loop->setAttribute('else', null !== $this->getNode('else'));
+        $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop'));
+        $this->loop->setAttribute('ifexpr', $this->getAttribute('ifexpr'));
+
+        $compiler
+            ->write("foreach (\$context['_seq'] as ")
+            ->subcompile($this->getNode('key_target'))
+            ->raw(' => ')
+            ->subcompile($this->getNode('value_target'))
+            ->raw(") {\n")
+            ->indent()
+            ->subcompile($this->getNode('body'))
+            ->outdent()
+            ->write("}\n")
+        ;
+
+        if (null !== $this->getNode('else')) {
+            $compiler
+                ->write("if (!\$context['_iterated']) {\n")
+                ->indent()
+                ->subcompile($this->getNode('else'))
+                ->outdent()
+                ->write("}\n")
+            ;
+        }
+
+        $compiler->write("\$_parent = \$context['_parent'];\n");
+
+        // remove some "private" loop variables (needed for nested loops)
+        $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n");
+
+        // keep the values set in the inner context for variables defined in the outer context
+        $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n");
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/For.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/ForLoop.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/ForLoop.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/ForLoop.php	(revision 2)
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Internal node used by the for node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_ForLoop extends Twig_Node
+{
+    public function __construct($lineno, $tag = null)
+    {
+        parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        if ($this->getAttribute('else')) {
+            $compiler->write("\$context['_iterated'] = true;\n");
+        }
+
+        if ($this->getAttribute('with_loop')) {
+            $compiler
+                ->write("++\$context['loop']['index0'];\n")
+                ->write("++\$context['loop']['index'];\n")
+                ->write("\$context['loop']['first'] = false;\n")
+            ;
+
+            if (!$this->getAttribute('ifexpr')) {
+                $compiler
+                    ->write("if (isset(\$context['loop']['length'])) {\n")
+                    ->indent()
+                    ->write("--\$context['loop']['revindex0'];\n")
+                    ->write("--\$context['loop']['revindex'];\n")
+                    ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n")
+                    ->outdent()
+                    ->write("}\n")
+                ;
+            }
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/ForLoop.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/If.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/If.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/If.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents an if node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_If extends Twig_Node
+{
+    public function __construct(Twig_NodeInterface $tests, Twig_NodeInterface $else = null, $lineno, $tag = null)
+    {
+        parent::__construct(array('tests' => $tests, 'else' => $else), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->addDebugInfo($this);
+        for ($i = 0, $count = count($this->getNode('tests')); $i < $count; $i += 2) {
+            if ($i > 0) {
+                $compiler
+                    ->outdent()
+                    ->write('} elseif (')
+                ;
+            } else {
+                $compiler
+                    ->write('if (')
+                ;
+            }
+
+            $compiler
+                ->subcompile($this->getNode('tests')->getNode($i))
+                ->raw(") {\n")
+                ->indent()
+                ->subcompile($this->getNode('tests')->getNode($i + 1))
+            ;
+        }
+
+        if ($this->hasNode('else') && null !== $this->getNode('else')) {
+            $compiler
+                ->outdent()
+                ->write("} else {\n")
+                ->indent()
+                ->subcompile($this->getNode('else'))
+            ;
+        }
+
+        $compiler
+            ->outdent()
+            ->write("}\n");
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/If.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Import.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Import.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Import.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents an import node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Import extends Twig_Node
+{
+    public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $var, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr, 'var' => $var), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write('')
+            ->subcompile($this->getNode('var'))
+            ->raw(' = ')
+        ;
+
+        if ($this->getNode('expr') instanceof Twig_Node_Expression_Name && '_self' === $this->getNode('expr')->getAttribute('name')) {
+            $compiler->raw('$this');
+        } else {
+            $compiler
+                ->raw('$this->loadTemplate(')
+                ->subcompile($this->getNode('expr'))
+                ->raw(', ')
+                ->repr($compiler->getFilename())
+                ->raw(', ')
+                ->repr($this->getLine())
+                ->raw(')')
+            ;
+        }
+
+        $compiler->raw(";\n");
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Import.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Include.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Include.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Include.php	(revision 2)
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents an include node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface
+{
+    public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (bool) $only, 'ignore_missing' => (bool) $ignoreMissing), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->addDebugInfo($this);
+
+        if ($this->getAttribute('ignore_missing')) {
+            $compiler
+                ->write("try {\n")
+                ->indent()
+            ;
+        }
+
+        $this->addGetTemplate($compiler);
+
+        $compiler->raw('->display(');
+
+        $this->addTemplateArguments($compiler);
+
+        $compiler->raw(");\n");
+
+        if ($this->getAttribute('ignore_missing')) {
+            $compiler
+                ->outdent()
+                ->write("} catch (Twig_Error_Loader \$e) {\n")
+                ->indent()
+                ->write("// ignore missing template\n")
+                ->outdent()
+                ->write("}\n\n")
+            ;
+        }
+    }
+
+    protected function addGetTemplate(Twig_Compiler $compiler)
+    {
+        $compiler
+             ->write('$this->loadTemplate(')
+             ->subcompile($this->getNode('expr'))
+             ->raw(', ')
+             ->repr($compiler->getFilename())
+             ->raw(', ')
+             ->repr($this->getLine())
+             ->raw(')')
+         ;
+    }
+
+    protected function addTemplateArguments(Twig_Compiler $compiler)
+    {
+        if (null === $this->getNode('variables')) {
+            $compiler->raw(false === $this->getAttribute('only') ? '$context' : 'array()');
+        } elseif (false === $this->getAttribute('only')) {
+            $compiler
+                ->raw('array_merge($context, ')
+                ->subcompile($this->getNode('variables'))
+                ->raw(')')
+            ;
+        } else {
+            $compiler->subcompile($this->getNode('variables'));
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Include.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Macro.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Macro.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Macro.php	(revision 2)
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a macro node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Macro extends Twig_Node
+{
+    const VARARGS_NAME = 'varargs';
+
+    public function __construct($name, Twig_NodeInterface $body, Twig_NodeInterface $arguments, $lineno, $tag = null)
+    {
+        foreach ($arguments as $argumentName => $argument) {
+            if (self::VARARGS_NAME === $argumentName) {
+                throw new Twig_Error_Syntax(sprintf('The argument "%s" in macro "%s" cannot be defined because the variable "%s" is reserved for arbitrary arguments.', self::VARARGS_NAME, $name, self::VARARGS_NAME), $argument->getLine());
+            }
+        }
+
+        parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write(sprintf('public function get%s(', $this->getAttribute('name')))
+        ;
+
+        $count = count($this->getNode('arguments'));
+        $pos = 0;
+        foreach ($this->getNode('arguments') as $name => $default) {
+            $compiler
+                ->raw('$__'.$name.'__ = ')
+                ->subcompile($default)
+            ;
+
+            if (++$pos < $count) {
+                $compiler->raw(', ');
+            }
+        }
+
+        if (PHP_VERSION_ID >= 50600) {
+            if ($count) {
+                $compiler->raw(', ');
+            }
+
+            $compiler->raw('...$__varargs__');
+        }
+
+        $compiler
+            ->raw(")\n")
+            ->write("{\n")
+            ->indent()
+        ;
+
+        $compiler
+            ->write("\$context = \$this->env->mergeGlobals(array(\n")
+            ->indent()
+        ;
+
+        foreach ($this->getNode('arguments') as $name => $default) {
+            $compiler
+                ->addIndentation()
+                ->string($name)
+                ->raw(' => $__'.$name.'__')
+                ->raw(",\n")
+            ;
+        }
+
+        $compiler
+            ->addIndentation()
+            ->string(self::VARARGS_NAME)
+            ->raw(' => ')
+        ;
+
+        if (PHP_VERSION_ID >= 50600) {
+            $compiler->raw("\$__varargs__,\n");
+        } else {
+            $compiler
+                ->raw('func_num_args() > ')
+                ->repr($count)
+                ->raw(' ? array_slice(func_get_args(), ')
+                ->repr($count)
+                ->raw(") : array(),\n")
+            ;
+        }
+
+        $compiler
+            ->outdent()
+            ->write("));\n\n")
+            ->write("\$blocks = array();\n\n")
+            ->write("ob_start();\n")
+            ->write("try {\n")
+            ->indent()
+            ->subcompile($this->getNode('body'))
+            ->outdent()
+            ->write("} catch (Exception \$e) {\n")
+            ->indent()
+            ->write("ob_end_clean();\n\n")
+            ->write("throw \$e;\n")
+            ->outdent()
+            ->write("}\n\n")
+            ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n")
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Macro.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Module.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Module.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Module.php	(revision 2)
@@ -0,0 +1,403 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a module node.
+ *
+ * Consider this class as being final. If you need to customize the behavior of
+ * the generated class, consider adding nodes to the following nodes: display_start,
+ * display_end, constructor_start, constructor_end, and class_end.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Module extends Twig_Node
+{
+    public function __construct(Twig_NodeInterface $body, Twig_Node_Expression $parent = null, Twig_NodeInterface $blocks, Twig_NodeInterface $macros, Twig_NodeInterface $traits, $embeddedTemplates, $filename)
+    {
+        // embedded templates are set as attributes so that they are only visited once by the visitors
+        parent::__construct(array(
+            'parent' => $parent,
+            'body' => $body,
+            'blocks' => $blocks,
+            'macros' => $macros,
+            'traits' => $traits,
+            'display_start' => new Twig_Node(),
+            'display_end' => new Twig_Node(),
+            'constructor_start' => new Twig_Node(),
+            'constructor_end' => new Twig_Node(),
+            'class_end' => new Twig_Node(),
+        ), array(
+            'filename' => $filename,
+            'index' => null,
+            'embedded_templates' => $embeddedTemplates,
+        ), 1);
+    }
+
+    public function setIndex($index)
+    {
+        $this->setAttribute('index', $index);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $this->compileTemplate($compiler);
+
+        foreach ($this->getAttribute('embedded_templates') as $template) {
+            $compiler->subcompile($template);
+        }
+    }
+
+    protected function compileTemplate(Twig_Compiler $compiler)
+    {
+        if (!$this->getAttribute('index')) {
+            $compiler->write('<?php');
+        }
+
+        $this->compileClassHeader($compiler);
+
+        if (
+            count($this->getNode('blocks'))
+            || count($this->getNode('traits'))
+            || null === $this->getNode('parent')
+            || $this->getNode('parent') instanceof Twig_Node_Expression_Constant
+            || count($this->getNode('constructor_start'))
+            || count($this->getNode('constructor_end'))
+        ) {
+            $this->compileConstructor($compiler);
+        }
+
+        $this->compileGetParent($compiler);
+
+        $this->compileDisplay($compiler);
+
+        $compiler->subcompile($this->getNode('blocks'));
+
+        $this->compileMacros($compiler);
+
+        $this->compileGetTemplateName($compiler);
+
+        $this->compileIsTraitable($compiler);
+
+        $this->compileDebugInfo($compiler);
+
+        $this->compileClassFooter($compiler);
+    }
+
+    protected function compileGetParent(Twig_Compiler $compiler)
+    {
+        if (null === $parent = $this->getNode('parent')) {
+            return;
+        }
+
+        $compiler
+            ->write("protected function doGetParent(array \$context)\n", "{\n")
+            ->indent()
+            ->addDebugInfo($parent)
+            ->write('return ')
+        ;
+
+        if ($parent instanceof Twig_Node_Expression_Constant) {
+            $compiler->subcompile($parent);
+        } else {
+            $compiler
+                ->raw('$this->loadTemplate(')
+                ->subcompile($parent)
+                ->raw(', ')
+                ->repr($compiler->getFilename())
+                ->raw(', ')
+                ->repr($this->getNode('parent')->getLine())
+                ->raw(')')
+            ;
+        }
+
+        $compiler
+            ->raw(";\n")
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+
+    protected function compileClassHeader(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("\n\n")
+            // if the filename contains */, add a blank to avoid a PHP parse error
+            ->write('/* '.str_replace('*/', '* /', $this->getAttribute('filename'))." */\n")
+            ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getAttribute('filename'), $this->getAttribute('index')))
+            ->raw(sprintf(" extends %s\n", $compiler->getEnvironment()->getBaseTemplateClass()))
+            ->write("{\n")
+            ->indent()
+        ;
+    }
+
+    protected function compileConstructor(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("public function __construct(Twig_Environment \$env)\n", "{\n")
+            ->indent()
+            ->subcompile($this->getNode('constructor_start'))
+            ->write("parent::__construct(\$env);\n\n")
+        ;
+
+        // parent
+        if (null === $parent = $this->getNode('parent')) {
+            $compiler->write("\$this->parent = false;\n\n");
+        } elseif ($parent instanceof Twig_Node_Expression_Constant) {
+            $compiler
+                ->addDebugInfo($parent)
+                ->write('$this->parent = $this->loadTemplate(')
+                ->subcompile($parent)
+                ->raw(', ')
+                ->repr($compiler->getFilename())
+                ->raw(', ')
+                ->repr($this->getNode('parent')->getLine())
+                ->raw(");\n")
+            ;
+        }
+
+        $countTraits = count($this->getNode('traits'));
+        if ($countTraits) {
+            // traits
+            foreach ($this->getNode('traits') as $i => $trait) {
+                $this->compileLoadTemplate($compiler, $trait->getNode('template'), sprintf('$_trait_%s', $i));
+
+                $compiler
+                    ->addDebugInfo($trait->getNode('template'))
+                    ->write(sprintf("if (!\$_trait_%s->isTraitable()) {\n", $i))
+                    ->indent()
+                    ->write("throw new Twig_Error_Runtime('Template \"'.")
+                    ->subcompile($trait->getNode('template'))
+                    ->raw(".'\" cannot be used as a trait.');\n")
+                    ->outdent()
+                    ->write("}\n")
+                    ->write(sprintf("\$_trait_%s_blocks = \$_trait_%s->getBlocks();\n\n", $i, $i))
+                ;
+
+                foreach ($trait->getNode('targets') as $key => $value) {
+                    $compiler
+                        ->write(sprintf('if (!isset($_trait_%s_blocks[', $i))
+                        ->string($key)
+                        ->raw("])) {\n")
+                        ->indent()
+                        ->write("throw new Twig_Error_Runtime(sprintf('Block ")
+                        ->string($key)
+                        ->raw(' is not defined in trait ')
+                        ->subcompile($trait->getNode('template'))
+                        ->raw(".'));\n")
+                        ->outdent()
+                        ->write("}\n\n")
+
+                        ->write(sprintf('$_trait_%s_blocks[', $i))
+                        ->subcompile($value)
+                        ->raw(sprintf('] = $_trait_%s_blocks[', $i))
+                        ->string($key)
+                        ->raw(sprintf(']; unset($_trait_%s_blocks[', $i))
+                        ->string($key)
+                        ->raw("]);\n\n")
+                    ;
+                }
+            }
+
+            if ($countTraits > 1) {
+                $compiler
+                    ->write("\$this->traits = array_merge(\n")
+                    ->indent()
+                ;
+
+                for ($i = 0; $i < $countTraits; ++$i) {
+                    $compiler
+                        ->write(sprintf('$_trait_%s_blocks'.($i == $countTraits - 1 ? '' : ',')."\n", $i))
+                    ;
+                }
+
+                $compiler
+                    ->outdent()
+                    ->write(");\n\n")
+                ;
+            } else {
+                $compiler
+                    ->write("\$this->traits = \$_trait_0_blocks;\n\n")
+                ;
+            }
+
+            $compiler
+                ->write("\$this->blocks = array_merge(\n")
+                ->indent()
+                ->write("\$this->traits,\n")
+                ->write("array(\n")
+            ;
+        } else {
+            $compiler
+                ->write("\$this->blocks = array(\n")
+            ;
+        }
+
+        // blocks
+        $compiler
+            ->indent()
+        ;
+
+        foreach ($this->getNode('blocks') as $name => $node) {
+            $compiler
+                ->write(sprintf("'%s' => array(\$this, 'block_%s'),\n", $name, $name))
+            ;
+        }
+
+        if ($countTraits) {
+            $compiler
+                ->outdent()
+                ->write(")\n")
+            ;
+        }
+
+        $compiler
+            ->outdent()
+            ->write(");\n")
+            ->outdent()
+            ->subcompile($this->getNode('constructor_end'))
+            ->write("}\n\n")
+        ;
+    }
+
+    protected function compileDisplay(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("protected function doDisplay(array \$context, array \$blocks = array())\n", "{\n")
+            ->indent()
+            ->subcompile($this->getNode('display_start'))
+            ->subcompile($this->getNode('body'))
+        ;
+
+        if (null !== $parent = $this->getNode('parent')) {
+            $compiler->addDebugInfo($parent);
+            if ($parent instanceof Twig_Node_Expression_Constant) {
+                $compiler->write('$this->parent');
+            } else {
+                $compiler->write('$this->getParent($context)');
+            }
+            $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n");
+        }
+
+        $compiler
+            ->subcompile($this->getNode('display_end'))
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+
+    protected function compileClassFooter(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->subcompile($this->getNode('class_end'))
+            ->outdent()
+            ->write("}\n")
+        ;
+    }
+
+    protected function compileMacros(Twig_Compiler $compiler)
+    {
+        $compiler->subcompile($this->getNode('macros'));
+    }
+
+    protected function compileGetTemplateName(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("public function getTemplateName()\n", "{\n")
+            ->indent()
+            ->write('return ')
+            ->repr($this->getAttribute('filename'))
+            ->raw(";\n")
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+
+    protected function compileIsTraitable(Twig_Compiler $compiler)
+    {
+        // A template can be used as a trait if:
+        //   * it has no parent
+        //   * it has no macros
+        //   * it has no body
+        //
+        // Put another way, a template can be used as a trait if it
+        // only contains blocks and use statements.
+        $traitable = null === $this->getNode('parent') && 0 === count($this->getNode('macros'));
+        if ($traitable) {
+            if ($this->getNode('body') instanceof Twig_Node_Body) {
+                $nodes = $this->getNode('body')->getNode(0);
+            } else {
+                $nodes = $this->getNode('body');
+            }
+
+            if (!count($nodes)) {
+                $nodes = new Twig_Node(array($nodes));
+            }
+
+            foreach ($nodes as $node) {
+                if (!count($node)) {
+                    continue;
+                }
+
+                if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) {
+                    continue;
+                }
+
+                if ($node instanceof Twig_Node_BlockReference) {
+                    continue;
+                }
+
+                $traitable = false;
+                break;
+            }
+        }
+
+        if ($traitable) {
+            return;
+        }
+
+        $compiler
+            ->write("public function isTraitable()\n", "{\n")
+            ->indent()
+            ->write(sprintf("return %s;\n", $traitable ? 'true' : 'false'))
+            ->outdent()
+            ->write("}\n\n")
+        ;
+    }
+
+    protected function compileDebugInfo(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("public function getDebugInfo()\n", "{\n")
+            ->indent()
+            ->write(sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true))))
+            ->outdent()
+            ->write("}\n")
+        ;
+    }
+
+    protected function compileLoadTemplate(Twig_Compiler $compiler, $node, $var)
+    {
+        if ($node instanceof Twig_Node_Expression_Constant) {
+            $compiler
+                ->write(sprintf('%s = $this->loadTemplate(', $var))
+                ->subcompile($node)
+                ->raw(', ')
+                ->repr($compiler->getFilename())
+                ->raw(', ')
+                ->repr($node->getLine())
+                ->raw(");\n")
+            ;
+        } else {
+            throw new LogicException('Trait templates can only be constant nodes');
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Module.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Print.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Print.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Print.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a node that outputs an expression.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Print extends Twig_Node implements Twig_NodeOutputInterface
+{
+    public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write('echo ')
+            ->subcompile($this->getNode('expr'))
+            ->raw(";\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Print.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Sandbox.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Sandbox.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Sandbox.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a sandbox node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Sandbox extends Twig_Node
+{
+    public function __construct(Twig_NodeInterface $body, $lineno, $tag = null)
+    {
+        parent::__construct(array('body' => $body), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("\$sandbox = \$this->env->getExtension('sandbox');\n")
+            ->write("if (!\$alreadySandboxed = \$sandbox->isSandboxed()) {\n")
+            ->indent()
+            ->write("\$sandbox->enableSandbox();\n")
+            ->outdent()
+            ->write("}\n")
+            ->subcompile($this->getNode('body'))
+            ->write("if (!\$alreadySandboxed) {\n")
+            ->indent()
+            ->write("\$sandbox->disableSandbox();\n")
+            ->outdent()
+            ->write("}\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Sandbox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/SandboxedPrint.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/SandboxedPrint.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/SandboxedPrint.php	(revision 2)
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_Node_SandboxedPrint adds a check for the __toString() method
+ * when the variable is an object and the sandbox is activated.
+ *
+ * When there is a simple Print statement, like {{ article }},
+ * and if the sandbox is enabled, we need to check that the __toString()
+ * method is allowed if 'article' is an object.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_SandboxedPrint extends Twig_Node_Print
+{
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write('echo $this->env->getExtension(\'sandbox\')->ensureToStringAllowed(')
+            ->subcompile($this->getNode('expr'))
+            ->raw(");\n")
+        ;
+    }
+
+    /**
+     * Removes node filters.
+     *
+     * This is mostly needed when another visitor adds filters (like the escaper one).
+     *
+     * @param Twig_Node $node A Node
+     *
+     * @return Twig_Node
+     */
+    protected function removeNodeFilter($node)
+    {
+        if ($node instanceof Twig_Node_Expression_Filter) {
+            return $this->removeNodeFilter($node->getNode('node'));
+        }
+
+        return $node;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/SandboxedPrint.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Set.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Set.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Set.php	(revision 2)
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a set node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Set extends Twig_Node
+{
+    public function __construct($capture, Twig_NodeInterface $names, Twig_NodeInterface $values, $lineno, $tag = null)
+    {
+        parent::__construct(array('names' => $names, 'values' => $values), array('capture' => $capture, 'safe' => false), $lineno, $tag);
+
+        /*
+         * Optimizes the node when capture is used for a large block of text.
+         *
+         * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig_Markup("foo");
+         */
+        if ($this->getAttribute('capture')) {
+            $this->setAttribute('safe', true);
+
+            $values = $this->getNode('values');
+            if ($values instanceof Twig_Node_Text) {
+                $this->setNode('values', new Twig_Node_Expression_Constant($values->getAttribute('data'), $values->getLine()));
+                $this->setAttribute('capture', false);
+            }
+        }
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler->addDebugInfo($this);
+
+        if (count($this->getNode('names')) > 1) {
+            $compiler->write('list(');
+            foreach ($this->getNode('names') as $idx => $node) {
+                if ($idx) {
+                    $compiler->raw(', ');
+                }
+
+                $compiler->subcompile($node);
+            }
+            $compiler->raw(')');
+        } else {
+            if ($this->getAttribute('capture')) {
+                $compiler
+                    ->write("ob_start();\n")
+                    ->subcompile($this->getNode('values'))
+                ;
+            }
+
+            $compiler->subcompile($this->getNode('names'), false);
+
+            if ($this->getAttribute('capture')) {
+                $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())");
+            }
+        }
+
+        if (!$this->getAttribute('capture')) {
+            $compiler->raw(' = ');
+
+            if (count($this->getNode('names')) > 1) {
+                $compiler->write('array(');
+                foreach ($this->getNode('values') as $idx => $value) {
+                    if ($idx) {
+                        $compiler->raw(', ');
+                    }
+
+                    $compiler->subcompile($value);
+                }
+                $compiler->raw(')');
+            } else {
+                if ($this->getAttribute('safe')) {
+                    $compiler
+                        ->raw("('' === \$tmp = ")
+                        ->subcompile($this->getNode('values'))
+                        ->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())")
+                    ;
+                } else {
+                    $compiler->subcompile($this->getNode('values'));
+                }
+            }
+        }
+
+        $compiler->raw(";\n");
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Set.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/SetTemp.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/SetTemp.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/SetTemp.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Node_SetTemp extends Twig_Node
+{
+    public function __construct($name, $lineno)
+    {
+        parent::__construct(array(), array('name' => $name), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $name = $this->getAttribute('name');
+        $compiler
+            ->addDebugInfo($this)
+            ->write('if (isset($context[')
+            ->string($name)
+            ->raw('])) { $_')
+            ->raw($name)
+            ->raw('_ = $context[')
+            ->repr($name)
+            ->raw(']; } else { $_')
+            ->raw($name)
+            ->raw("_ = null; }\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/SetTemp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Spaceless.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Spaceless.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Spaceless.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a spaceless node.
+ *
+ * It removes spaces between HTML tags.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Spaceless extends Twig_Node
+{
+    public function __construct(Twig_NodeInterface $body, $lineno, $tag = 'spaceless')
+    {
+        parent::__construct(array('body' => $body), array(), $lineno, $tag);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("ob_start();\n")
+            ->subcompile($this->getNode('body'))
+            ->write("echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Spaceless.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node/Text.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node/Text.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node/Text.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a text node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Text extends Twig_Node implements Twig_NodeOutputInterface
+{
+    public function __construct($data, $lineno)
+    {
+        parent::__construct(array(), array('data' => $data), $lineno);
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write('echo ')
+            ->string($this->getAttribute('data'))
+            ->raw(";\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node/Text.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Node.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Node.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Node.php	(revision 2)
@@ -0,0 +1,231 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a node in the AST.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node implements Twig_NodeInterface
+{
+    protected $nodes;
+    protected $attributes;
+    protected $lineno;
+    protected $tag;
+
+    /**
+     * Constructor.
+     *
+     * The nodes are automatically made available as properties ($this->node).
+     * The attributes are automatically made available as array items ($this['name']).
+     *
+     * @param array  $nodes      An array of named nodes
+     * @param array  $attributes An array of attributes (should not be nodes)
+     * @param int    $lineno     The line number
+     * @param string $tag        The tag name associated with the Node
+     */
+    public function __construct(array $nodes = array(), array $attributes = array(), $lineno = 0, $tag = null)
+    {
+        $this->nodes = $nodes;
+        $this->attributes = $attributes;
+        $this->lineno = $lineno;
+        $this->tag = $tag;
+    }
+
+    public function __toString()
+    {
+        $attributes = array();
+        foreach ($this->attributes as $name => $value) {
+            $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true)));
+        }
+
+        $repr = array(get_class($this).'('.implode(', ', $attributes));
+
+        if (count($this->nodes)) {
+            foreach ($this->nodes as $name => $node) {
+                $len = strlen($name) + 4;
+                $noderepr = array();
+                foreach (explode("\n", (string) $node) as $line) {
+                    $noderepr[] = str_repeat(' ', $len).$line;
+                }
+
+                $repr[] = sprintf('  %s: %s', $name, ltrim(implode("\n", $noderepr)));
+            }
+
+            $repr[] = ')';
+        } else {
+            $repr[0] .= ')';
+        }
+
+        return implode("\n", $repr);
+    }
+
+    /**
+     * @deprecated since 1.16.1 (to be removed in 2.0)
+     */
+    public function toXml($asDom = false)
+    {
+        @trigger_error(sprintf('%s is deprecated since version 1.16.1 and will be removed in 2.0.', __METHOD__), E_USER_DEPRECATED);
+
+        $dom = new DOMDocument('1.0', 'UTF-8');
+        $dom->formatOutput = true;
+        $dom->appendChild($xml = $dom->createElement('twig'));
+
+        $xml->appendChild($node = $dom->createElement('node'));
+        $node->setAttribute('class', get_class($this));
+
+        foreach ($this->attributes as $name => $value) {
+            $node->appendChild($attribute = $dom->createElement('attribute'));
+            $attribute->setAttribute('name', $name);
+            $attribute->appendChild($dom->createTextNode($value));
+        }
+
+        foreach ($this->nodes as $name => $n) {
+            if (null === $n) {
+                continue;
+            }
+
+            $child = $n->toXml(true)->getElementsByTagName('node')->item(0);
+            $child = $dom->importNode($child, true);
+            $child->setAttribute('name', $name);
+
+            $node->appendChild($child);
+        }
+
+        return $asDom ? $dom : $dom->saveXML();
+    }
+
+    public function compile(Twig_Compiler $compiler)
+    {
+        foreach ($this->nodes as $node) {
+            $node->compile($compiler);
+        }
+    }
+
+    public function getLine()
+    {
+        return $this->lineno;
+    }
+
+    public function getNodeTag()
+    {
+        return $this->tag;
+    }
+
+    /**
+     * Returns true if the attribute is defined.
+     *
+     * @param string $name The attribute name
+     *
+     * @return bool true if the attribute is defined, false otherwise
+     */
+    public function hasAttribute($name)
+    {
+        return array_key_exists($name, $this->attributes);
+    }
+
+    /**
+     * Gets an attribute value by name.
+     *
+     * @param string $name
+     *
+     * @return mixed
+     */
+    public function getAttribute($name)
+    {
+        if (!array_key_exists($name, $this->attributes)) {
+            throw new LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, get_class($this)));
+        }
+
+        return $this->attributes[$name];
+    }
+
+    /**
+     * Sets an attribute by name to a value.
+     *
+     * @param string $name
+     * @param mixed  $value
+     */
+    public function setAttribute($name, $value)
+    {
+        $this->attributes[$name] = $value;
+    }
+
+    /**
+     * Removes an attribute by name.
+     *
+     * @param string $name
+     */
+    public function removeAttribute($name)
+    {
+        unset($this->attributes[$name]);
+    }
+
+    /**
+     * Returns true if the node with the given name exists.
+     *
+     * @param string $name
+     *
+     * @return bool
+     */
+    public function hasNode($name)
+    {
+        return array_key_exists($name, $this->nodes);
+    }
+
+    /**
+     * Gets a node by name.
+     *
+     * @param string $name
+     *
+     * @return Twig_Node
+     */
+    public function getNode($name)
+    {
+        if (!array_key_exists($name, $this->nodes)) {
+            throw new LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, get_class($this)));
+        }
+
+        return $this->nodes[$name];
+    }
+
+    /**
+     * Sets a node.
+     *
+     * @param string    $name
+     * @param Twig_Node $node
+     */
+    public function setNode($name, $node = null)
+    {
+        $this->nodes[$name] = $node;
+    }
+
+    /**
+     * Removes a node by name.
+     *
+     * @param string $name
+     */
+    public function removeNode($name)
+    {
+        unset($this->nodes[$name]);
+    }
+
+    public function count()
+    {
+        return count($this->nodes);
+    }
+
+    public function getIterator()
+    {
+        return new ArrayIterator($this->nodes);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Node.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeInterface.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a node in the AST.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_NodeInterface extends Countable, IteratorAggregate
+{
+    /**
+     * Compiles the node to PHP.
+     *
+     * @param Twig_Compiler $compiler A Twig_Compiler instance
+     */
+    public function compile(Twig_Compiler $compiler);
+
+    public function getLine();
+
+    public function getNodeTag();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeOutputInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeOutputInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeOutputInterface.php	(revision 2)
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a displayable node in the AST.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_NodeOutputInterface
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeOutputInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeTraverser.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeTraverser.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeTraverser.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_NodeTraverser is a node traverser.
+ *
+ * It visits all nodes and their children and calls the given visitor for each.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_NodeTraverser
+{
+    protected $env;
+    protected $visitors = array();
+
+    /**
+     * Constructor.
+     *
+     * @param Twig_Environment            $env      A Twig_Environment instance
+     * @param Twig_NodeVisitorInterface[] $visitors An array of Twig_NodeVisitorInterface instances
+     */
+    public function __construct(Twig_Environment $env, array $visitors = array())
+    {
+        $this->env = $env;
+        foreach ($visitors as $visitor) {
+            $this->addVisitor($visitor);
+        }
+    }
+
+    /**
+     * Adds a visitor.
+     *
+     * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance
+     */
+    public function addVisitor(Twig_NodeVisitorInterface $visitor)
+    {
+        if (!isset($this->visitors[$visitor->getPriority()])) {
+            $this->visitors[$visitor->getPriority()] = array();
+        }
+
+        $this->visitors[$visitor->getPriority()][] = $visitor;
+    }
+
+    /**
+     * Traverses a node and calls the registered visitors.
+     *
+     * @param Twig_NodeInterface $node A Twig_NodeInterface instance
+     *
+     * @return Twig_NodeInterface
+     */
+    public function traverse(Twig_NodeInterface $node)
+    {
+        ksort($this->visitors);
+        foreach ($this->visitors as $visitors) {
+            foreach ($visitors as $visitor) {
+                $node = $this->traverseForVisitor($visitor, $node);
+            }
+        }
+
+        return $node;
+    }
+
+    protected function traverseForVisitor(Twig_NodeVisitorInterface $visitor, Twig_NodeInterface $node = null)
+    {
+        if (null === $node) {
+            return;
+        }
+
+        $node = $visitor->enterNode($node, $this->env);
+
+        foreach ($node as $k => $n) {
+            if (false !== $n = $this->traverseForVisitor($visitor, $n)) {
+                $node->setNode($k, $n);
+            } else {
+                $node->removeNode($k);
+            }
+        }
+
+        return $visitor->leaveNode($node, $this->env);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeTraverser.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Escaper.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Escaper.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Escaper.php	(revision 2)
@@ -0,0 +1,157 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_NodeVisitor_Escaper implements output escaping.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_NodeVisitor_Escaper extends Twig_BaseNodeVisitor
+{
+    protected $statusStack = array();
+    protected $blocks = array();
+    protected $safeAnalysis;
+    protected $traverser;
+    protected $defaultStrategy = false;
+    protected $safeVars = array();
+
+    public function __construct()
+    {
+        $this->safeAnalysis = new Twig_NodeVisitor_SafeAnalysis();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doEnterNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            if ($env->hasExtension('escaper') && $defaultStrategy = $env->getExtension('escaper')->getDefaultStrategy($node->getAttribute('filename'))) {
+                $this->defaultStrategy = $defaultStrategy;
+            }
+            $this->safeVars = array();
+        } elseif ($node instanceof Twig_Node_AutoEscape) {
+            $this->statusStack[] = $node->getAttribute('value');
+        } elseif ($node instanceof Twig_Node_Block) {
+            $this->statusStack[] = isset($this->blocks[$node->getAttribute('name')]) ? $this->blocks[$node->getAttribute('name')] : $this->needEscaping($env);
+        } elseif ($node instanceof Twig_Node_Import) {
+            $this->safeVars[] = $node->getNode('var')->getAttribute('name');
+        }
+
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doLeaveNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            $this->defaultStrategy = false;
+            $this->safeVars = array();
+        } elseif ($node instanceof Twig_Node_Expression_Filter) {
+            return $this->preEscapeFilterNode($node, $env);
+        } elseif ($node instanceof Twig_Node_Print) {
+            return $this->escapePrintNode($node, $env, $this->needEscaping($env));
+        }
+
+        if ($node instanceof Twig_Node_AutoEscape || $node instanceof Twig_Node_Block) {
+            array_pop($this->statusStack);
+        } elseif ($node instanceof Twig_Node_BlockReference) {
+            $this->blocks[$node->getAttribute('name')] = $this->needEscaping($env);
+        }
+
+        return $node;
+    }
+
+    protected function escapePrintNode(Twig_Node_Print $node, Twig_Environment $env, $type)
+    {
+        if (false === $type) {
+            return $node;
+        }
+
+        $expression = $node->getNode('expr');
+
+        if ($this->isSafeFor($type, $expression, $env)) {
+            return $node;
+        }
+
+        $class = get_class($node);
+
+        return new $class(
+            $this->getEscaperFilter($type, $expression),
+            $node->getLine()
+        );
+    }
+
+    protected function preEscapeFilterNode(Twig_Node_Expression_Filter $filter, Twig_Environment $env)
+    {
+        $name = $filter->getNode('filter')->getAttribute('value');
+
+        $type = $env->getFilter($name)->getPreEscape();
+        if (null === $type) {
+            return $filter;
+        }
+
+        $node = $filter->getNode('node');
+        if ($this->isSafeFor($type, $node, $env)) {
+            return $filter;
+        }
+
+        $filter->setNode('node', $this->getEscaperFilter($type, $node));
+
+        return $filter;
+    }
+
+    protected function isSafeFor($type, Twig_NodeInterface $expression, $env)
+    {
+        $safe = $this->safeAnalysis->getSafe($expression);
+
+        if (null === $safe) {
+            if (null === $this->traverser) {
+                $this->traverser = new Twig_NodeTraverser($env, array($this->safeAnalysis));
+            }
+
+            $this->safeAnalysis->setSafeVars($this->safeVars);
+
+            $this->traverser->traverse($expression);
+            $safe = $this->safeAnalysis->getSafe($expression);
+        }
+
+        return in_array($type, $safe) || in_array('all', $safe);
+    }
+
+    protected function needEscaping(Twig_Environment $env)
+    {
+        if (count($this->statusStack)) {
+            return $this->statusStack[count($this->statusStack) - 1];
+        }
+
+        return $this->defaultStrategy ? $this->defaultStrategy : false;
+    }
+
+    protected function getEscaperFilter($type, Twig_NodeInterface $node)
+    {
+        $line = $node->getLine();
+        $name = new Twig_Node_Expression_Constant('escape', $line);
+        $args = new Twig_Node(array(new Twig_Node_Expression_Constant((string) $type, $line), new Twig_Node_Expression_Constant(null, $line), new Twig_Node_Expression_Constant(true, $line)));
+
+        return new Twig_Node_Expression_Filter($node, $name, $args, $line);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getPriority()
+    {
+        return 0;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Escaper.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Optimizer.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Optimizer.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Optimizer.php	(revision 2)
@@ -0,0 +1,271 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_NodeVisitor_Optimizer tries to optimizes the AST.
+ *
+ * This visitor is always the last registered one.
+ *
+ * You can configure which optimizations you want to activate via the
+ * optimizer mode.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_NodeVisitor_Optimizer extends Twig_BaseNodeVisitor
+{
+    const OPTIMIZE_ALL = -1;
+    const OPTIMIZE_NONE = 0;
+    const OPTIMIZE_FOR = 2;
+    const OPTIMIZE_RAW_FILTER = 4;
+    const OPTIMIZE_VAR_ACCESS = 8;
+
+    protected $loops = array();
+    protected $loopsTargets = array();
+    protected $optimizers;
+    protected $prependedNodes = array();
+    protected $inABody = false;
+
+    /**
+     * Constructor.
+     *
+     * @param int $optimizers The optimizer mode
+     */
+    public function __construct($optimizers = -1)
+    {
+        if (!is_int($optimizers) || $optimizers > (self::OPTIMIZE_FOR | self::OPTIMIZE_RAW_FILTER | self::OPTIMIZE_VAR_ACCESS)) {
+            throw new InvalidArgumentException(sprintf('Optimizer mode "%s" is not valid.', $optimizers));
+        }
+
+        $this->optimizers = $optimizers;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doEnterNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) {
+            $this->enterOptimizeFor($node, $env);
+        }
+
+        if (PHP_VERSION_ID < 50400 && self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) {
+            if ($this->inABody) {
+                if (!$node instanceof Twig_Node_Expression) {
+                    if (get_class($node) !== 'Twig_Node') {
+                        array_unshift($this->prependedNodes, array());
+                    }
+                } else {
+                    $node = $this->optimizeVariables($node, $env);
+                }
+            } elseif ($node instanceof Twig_Node_Body) {
+                $this->inABody = true;
+            }
+        }
+
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doLeaveNode(Twig_Node $node, Twig_Environment $env)
+    {
+        $expression = $node instanceof Twig_Node_Expression;
+
+        if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) {
+            $this->leaveOptimizeFor($node, $env);
+        }
+
+        if (self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $this->optimizers)) {
+            $node = $this->optimizeRawFilter($node, $env);
+        }
+
+        $node = $this->optimizePrintNode($node, $env);
+
+        if (self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) {
+            if ($node instanceof Twig_Node_Body) {
+                $this->inABody = false;
+            } elseif ($this->inABody) {
+                if (!$expression && get_class($node) !== 'Twig_Node' && $prependedNodes = array_shift($this->prependedNodes)) {
+                    $nodes = array();
+                    foreach (array_unique($prependedNodes) as $name) {
+                        $nodes[] = new Twig_Node_SetTemp($name, $node->getLine());
+                    }
+
+                    $nodes[] = $node;
+                    $node = new Twig_Node($nodes);
+                }
+            }
+        }
+
+        return $node;
+    }
+
+    protected function optimizeVariables(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if ('Twig_Node_Expression_Name' === get_class($node) && $node->isSimple()) {
+            $this->prependedNodes[0][] = $node->getAttribute('name');
+
+            return new Twig_Node_Expression_TempName($node->getAttribute('name'), $node->getLine());
+        }
+
+        return $node;
+    }
+
+    /**
+     * Optimizes print nodes.
+     *
+     * It replaces:
+     *
+     *   * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()"
+     *
+     * @param Twig_NodeInterface $node A Node
+     * @param Twig_Environment   $env  The current Twig environment
+     *
+     * @return Twig_NodeInterface
+     */
+    protected function optimizePrintNode(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if (!$node instanceof Twig_Node_Print) {
+            return $node;
+        }
+
+        if (
+            $node->getNode('expr') instanceof Twig_Node_Expression_BlockReference ||
+            $node->getNode('expr') instanceof Twig_Node_Expression_Parent
+        ) {
+            $node->getNode('expr')->setAttribute('output', true);
+
+            return $node->getNode('expr');
+        }
+
+        return $node;
+    }
+
+    /**
+     * Removes "raw" filters.
+     *
+     * @param Twig_NodeInterface $node A Node
+     * @param Twig_Environment   $env  The current Twig environment
+     *
+     * @return Twig_NodeInterface
+     */
+    protected function optimizeRawFilter(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Expression_Filter && 'raw' == $node->getNode('filter')->getAttribute('value')) {
+            return $node->getNode('node');
+        }
+
+        return $node;
+    }
+
+    /**
+     * Optimizes "for" tag by removing the "loop" variable creation whenever possible.
+     *
+     * @param Twig_NodeInterface $node A Node
+     * @param Twig_Environment   $env  The current Twig environment
+     */
+    protected function enterOptimizeFor(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_For) {
+            // disable the loop variable by default
+            $node->setAttribute('with_loop', false);
+            array_unshift($this->loops, $node);
+            array_unshift($this->loopsTargets, $node->getNode('value_target')->getAttribute('name'));
+            array_unshift($this->loopsTargets, $node->getNode('key_target')->getAttribute('name'));
+        } elseif (!$this->loops) {
+            // we are outside a loop
+            return;
+        }
+
+        // when do we need to add the loop variable back?
+
+        // the loop variable is referenced for the current loop
+        elseif ($node instanceof Twig_Node_Expression_Name && 'loop' === $node->getAttribute('name')) {
+            $node->setAttribute('always_defined', true);
+            $this->addLoopToCurrent();
+        }
+
+        // optimize access to loop targets
+        elseif ($node instanceof Twig_Node_Expression_Name && in_array($node->getAttribute('name'), $this->loopsTargets)) {
+            $node->setAttribute('always_defined', true);
+        }
+
+        // block reference
+        elseif ($node instanceof Twig_Node_BlockReference || $node instanceof Twig_Node_Expression_BlockReference) {
+            $this->addLoopToCurrent();
+        }
+
+        // include without the only attribute
+        elseif ($node instanceof Twig_Node_Include && !$node->getAttribute('only')) {
+            $this->addLoopToAll();
+        }
+
+        // include function without the with_context=false parameter
+        elseif ($node instanceof Twig_Node_Expression_Function
+            && 'include' === $node->getAttribute('name')
+            && (!$node->getNode('arguments')->hasNode('with_context')
+                 || false !== $node->getNode('arguments')->getNode('with_context')->getAttribute('value')
+               )
+        ) {
+            $this->addLoopToAll();
+        }
+
+        // the loop variable is referenced via an attribute
+        elseif ($node instanceof Twig_Node_Expression_GetAttr
+            && (!$node->getNode('attribute') instanceof Twig_Node_Expression_Constant
+                || 'parent' === $node->getNode('attribute')->getAttribute('value')
+               )
+            && (true === $this->loops[0]->getAttribute('with_loop')
+                || ($node->getNode('node') instanceof Twig_Node_Expression_Name
+                    && 'loop' === $node->getNode('node')->getAttribute('name')
+                   )
+               )
+        ) {
+            $this->addLoopToAll();
+        }
+    }
+
+    /**
+     * Optimizes "for" tag by removing the "loop" variable creation whenever possible.
+     *
+     * @param Twig_NodeInterface $node A Node
+     * @param Twig_Environment   $env  The current Twig environment
+     */
+    protected function leaveOptimizeFor(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_For) {
+            array_shift($this->loops);
+            array_shift($this->loopsTargets);
+            array_shift($this->loopsTargets);
+        }
+    }
+
+    protected function addLoopToCurrent()
+    {
+        $this->loops[0]->setAttribute('with_loop', true);
+    }
+
+    protected function addLoopToAll()
+    {
+        foreach ($this->loops as $loop) {
+            $loop->setAttribute('with_loop', true);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getPriority()
+    {
+        return 255;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Optimizer.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/SafeAnalysis.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/SafeAnalysis.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/SafeAnalysis.php	(revision 2)
@@ -0,0 +1,154 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_NodeVisitor_SafeAnalysis extends Twig_BaseNodeVisitor
+{
+    protected $data = array();
+    protected $safeVars = array();
+
+    public function setSafeVars($safeVars)
+    {
+        $this->safeVars = $safeVars;
+    }
+
+    public function getSafe(Twig_NodeInterface $node)
+    {
+        $hash = spl_object_hash($node);
+        if (!isset($this->data[$hash])) {
+            return;
+        }
+
+        foreach ($this->data[$hash] as $bucket) {
+            if ($bucket['key'] !== $node) {
+                continue;
+            }
+
+            if (in_array('html_attr', $bucket['value'])) {
+                $bucket['value'][] = 'html';
+            }
+
+            return $bucket['value'];
+        }
+    }
+
+    protected function setSafe(Twig_NodeInterface $node, array $safe)
+    {
+        $hash = spl_object_hash($node);
+        if (isset($this->data[$hash])) {
+            foreach ($this->data[$hash] as &$bucket) {
+                if ($bucket['key'] === $node) {
+                    $bucket['value'] = $safe;
+
+                    return;
+                }
+            }
+        }
+        $this->data[$hash][] = array(
+            'key' => $node,
+            'value' => $safe,
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doEnterNode(Twig_Node $node, Twig_Environment $env)
+    {
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doLeaveNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Expression_Constant) {
+            // constants are marked safe for all
+            $this->setSafe($node, array('all'));
+        } elseif ($node instanceof Twig_Node_Expression_BlockReference) {
+            // blocks are safe by definition
+            $this->setSafe($node, array('all'));
+        } elseif ($node instanceof Twig_Node_Expression_Parent) {
+            // parent block is safe by definition
+            $this->setSafe($node, array('all'));
+        } elseif ($node instanceof Twig_Node_Expression_Conditional) {
+            // intersect safeness of both operands
+            $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3')));
+            $this->setSafe($node, $safe);
+        } elseif ($node instanceof Twig_Node_Expression_Filter) {
+            // filter expression is safe when the filter is safe
+            $name = $node->getNode('filter')->getAttribute('value');
+            $args = $node->getNode('arguments');
+            if (false !== $filter = $env->getFilter($name)) {
+                $safe = $filter->getSafe($args);
+                if (null === $safe) {
+                    $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety());
+                }
+                $this->setSafe($node, $safe);
+            } else {
+                $this->setSafe($node, array());
+            }
+        } elseif ($node instanceof Twig_Node_Expression_Function) {
+            // function expression is safe when the function is safe
+            $name = $node->getAttribute('name');
+            $args = $node->getNode('arguments');
+            $function = $env->getFunction($name);
+            if (false !== $function) {
+                $this->setSafe($node, $function->getSafe($args));
+            } else {
+                $this->setSafe($node, array());
+            }
+        } elseif ($node instanceof Twig_Node_Expression_MethodCall) {
+            if ($node->getAttribute('safe')) {
+                $this->setSafe($node, array('all'));
+            } else {
+                $this->setSafe($node, array());
+            }
+        } elseif ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name) {
+            $name = $node->getNode('node')->getAttribute('name');
+            // attributes on template instances are safe
+            if ('_self' == $name || in_array($name, $this->safeVars)) {
+                $this->setSafe($node, array('all'));
+            } else {
+                $this->setSafe($node, array());
+            }
+        } else {
+            $this->setSafe($node, array());
+        }
+
+        return $node;
+    }
+
+    protected function intersectSafe(array $a = null, array $b = null)
+    {
+        if (null === $a || null === $b) {
+            return array();
+        }
+
+        if (in_array('all', $a)) {
+            return $b;
+        }
+
+        if (in_array('all', $b)) {
+            return $a;
+        }
+
+        return array_intersect($a, $b);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getPriority()
+    {
+        return 0;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/SafeAnalysis.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Sandbox.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Sandbox.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Sandbox.php	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_NodeVisitor_Sandbox implements sandboxing.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_NodeVisitor_Sandbox extends Twig_BaseNodeVisitor
+{
+    protected $inAModule = false;
+    protected $tags;
+    protected $filters;
+    protected $functions;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doEnterNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            $this->inAModule = true;
+            $this->tags = array();
+            $this->filters = array();
+            $this->functions = array();
+
+            return $node;
+        } elseif ($this->inAModule) {
+            // look for tags
+            if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) {
+                $this->tags[$node->getNodeTag()] = $node;
+            }
+
+            // look for filters
+            if ($node instanceof Twig_Node_Expression_Filter && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) {
+                $this->filters[$node->getNode('filter')->getAttribute('value')] = $node;
+            }
+
+            // look for functions
+            if ($node instanceof Twig_Node_Expression_Function && !isset($this->functions[$node->getAttribute('name')])) {
+                $this->functions[$node->getAttribute('name')] = $node;
+            }
+
+            // wrap print to check __toString() calls
+            if ($node instanceof Twig_Node_Print) {
+                return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getLine(), $node->getNodeTag());
+            }
+        }
+
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doLeaveNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            $this->inAModule = false;
+
+            $node->setNode('display_start', new Twig_Node(array(new Twig_Node_CheckSecurity($this->filters, $this->tags, $this->functions), $node->getNode('display_start'))));
+        }
+
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getPriority()
+    {
+        return 0;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeVisitor/Sandbox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/NodeVisitorInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/NodeVisitorInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/NodeVisitorInterface.php	(revision 2)
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Twig_NodeVisitorInterface is the interface the all node visitor classes must implement.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_NodeVisitorInterface
+{
+    /**
+     * Called before child nodes are visited.
+     *
+     * @param Twig_NodeInterface $node The node to visit
+     * @param Twig_Environment   $env  The Twig environment instance
+     *
+     * @return Twig_NodeInterface The modified node
+     */
+    public function enterNode(Twig_NodeInterface $node, Twig_Environment $env);
+
+    /**
+     * Called after child nodes are visited.
+     *
+     * @param Twig_NodeInterface $node The node to visit
+     * @param Twig_Environment   $env  The Twig environment instance
+     *
+     * @return Twig_NodeInterface|false The modified node or false if the node must be removed
+     */
+    public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env);
+
+    /**
+     * Returns the priority for this visitor.
+     *
+     * Priority should be between -10 and 10 (0 is the default).
+     *
+     * @return int The priority level
+     */
+    public function getPriority();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/NodeVisitorInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Parser.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Parser.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Parser.php	(revision 2)
@@ -0,0 +1,399 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Default parser implementation.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Parser implements Twig_ParserInterface
+{
+    protected $stack = array();
+    protected $stream;
+    protected $parent;
+    protected $handlers;
+    protected $visitors;
+    protected $expressionParser;
+    protected $blocks;
+    protected $blockStack;
+    protected $macros;
+    protected $env;
+    protected $reservedMacroNames;
+    protected $importedSymbols;
+    protected $traits;
+    protected $embeddedTemplates = array();
+
+    /**
+     * Constructor.
+     *
+     * @param Twig_Environment $env A Twig_Environment instance
+     */
+    public function __construct(Twig_Environment $env)
+    {
+        $this->env = $env;
+    }
+
+    public function getEnvironment()
+    {
+        return $this->env;
+    }
+
+    public function getVarName()
+    {
+        return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
+    }
+
+    public function getFilename()
+    {
+        return $this->stream->getFilename();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function parse(Twig_TokenStream $stream, $test = null, $dropNeedle = false)
+    {
+        // push all variables into the stack to keep the current state of the parser
+        // using get_object_vars() instead of foreach would lead to https://bugs.php.net/71336
+        $vars = array();
+        foreach ($this as $k => $v) {
+            $vars[$k] = $v;
+        }
+
+        unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames']);
+        $this->stack[] = $vars;
+
+        // tag handlers
+        if (null === $this->handlers) {
+            $this->handlers = $this->env->getTokenParsers();
+            $this->handlers->setParser($this);
+        }
+
+        // node visitors
+        if (null === $this->visitors) {
+            $this->visitors = $this->env->getNodeVisitors();
+        }
+
+        if (null === $this->expressionParser) {
+            $this->expressionParser = new Twig_ExpressionParser($this, $this->env->getUnaryOperators(), $this->env->getBinaryOperators());
+        }
+
+        $this->stream = $stream;
+        $this->parent = null;
+        $this->blocks = array();
+        $this->macros = array();
+        $this->traits = array();
+        $this->blockStack = array();
+        $this->importedSymbols = array(array());
+        $this->embeddedTemplates = array();
+
+        try {
+            $body = $this->subparse($test, $dropNeedle);
+
+            if (null !== $this->parent && null === $body = $this->filterBodyNodes($body)) {
+                $body = new Twig_Node();
+            }
+        } catch (Twig_Error_Syntax $e) {
+            if (!$e->getTemplateFile()) {
+                $e->setTemplateFile($this->getFilename());
+            }
+
+            if (!$e->getTemplateLine()) {
+                $e->setTemplateLine($this->stream->getCurrent()->getLine());
+            }
+
+            throw $e;
+        }
+
+        $node = new Twig_Node_Module(new Twig_Node_Body(array($body)), $this->parent, new Twig_Node($this->blocks), new Twig_Node($this->macros), new Twig_Node($this->traits), $this->embeddedTemplates, $this->getFilename());
+
+        $traverser = new Twig_NodeTraverser($this->env, $this->visitors);
+
+        $node = $traverser->traverse($node);
+
+        // restore previous stack so previous parse() call can resume working
+        foreach (array_pop($this->stack) as $key => $val) {
+            $this->$key = $val;
+        }
+
+        return $node;
+    }
+
+    public function subparse($test, $dropNeedle = false)
+    {
+        $lineno = $this->getCurrentToken()->getLine();
+        $rv = array();
+        while (!$this->stream->isEOF()) {
+            switch ($this->getCurrentToken()->getType()) {
+                case Twig_Token::TEXT_TYPE:
+                    $token = $this->stream->next();
+                    $rv[] = new Twig_Node_Text($token->getValue(), $token->getLine());
+                    break;
+
+                case Twig_Token::VAR_START_TYPE:
+                    $token = $this->stream->next();
+                    $expr = $this->expressionParser->parseExpression();
+                    $this->stream->expect(Twig_Token::VAR_END_TYPE);
+                    $rv[] = new Twig_Node_Print($expr, $token->getLine());
+                    break;
+
+                case Twig_Token::BLOCK_START_TYPE:
+                    $this->stream->next();
+                    $token = $this->getCurrentToken();
+
+                    if ($token->getType() !== Twig_Token::NAME_TYPE) {
+                        throw new Twig_Error_Syntax('A block must start with a tag name.', $token->getLine(), $this->getFilename());
+                    }
+
+                    if (null !== $test && call_user_func($test, $token)) {
+                        if ($dropNeedle) {
+                            $this->stream->next();
+                        }
+
+                        if (1 === count($rv)) {
+                            return $rv[0];
+                        }
+
+                        return new Twig_Node($rv, array(), $lineno);
+                    }
+
+                    $subparser = $this->handlers->getTokenParser($token->getValue());
+                    if (null === $subparser) {
+                        if (null !== $test) {
+                            $e = new Twig_Error_Syntax(sprintf('Unexpected "%s" tag', $token->getValue()), $token->getLine(), $this->getFilename());
+
+                            if (is_array($test) && isset($test[0]) && $test[0] instanceof Twig_TokenParserInterface) {
+                                $e->appendMessage(sprintf(' (expecting closing tag for the "%s" tag defined near line %s).', $test[0]->getTag(), $lineno));
+                            }
+                        } else {
+                            $e = new Twig_Error_Syntax(sprintf('Unknown "%s" tag.', $token->getValue()), $token->getLine(), $this->getFilename());
+                            $e->addSuggestions($token->getValue(), array_keys($this->env->getTags()));
+                        }
+
+                        throw $e;
+                    }
+
+                    $this->stream->next();
+
+                    $node = $subparser->parse($token);
+                    if (null !== $node) {
+                        $rv[] = $node;
+                    }
+                    break;
+
+                default:
+                    throw new Twig_Error_Syntax('Lexer or parser ended up in unsupported state.', 0, $this->getFilename());
+            }
+        }
+
+        if (1 === count($rv)) {
+            return $rv[0];
+        }
+
+        return new Twig_Node($rv, array(), $lineno);
+    }
+
+    public function addHandler($name, $class)
+    {
+        $this->handlers[$name] = $class;
+    }
+
+    public function addNodeVisitor(Twig_NodeVisitorInterface $visitor)
+    {
+        $this->visitors[] = $visitor;
+    }
+
+    public function getBlockStack()
+    {
+        return $this->blockStack;
+    }
+
+    public function peekBlockStack()
+    {
+        return $this->blockStack[count($this->blockStack) - 1];
+    }
+
+    public function popBlockStack()
+    {
+        array_pop($this->blockStack);
+    }
+
+    public function pushBlockStack($name)
+    {
+        $this->blockStack[] = $name;
+    }
+
+    public function hasBlock($name)
+    {
+        return isset($this->blocks[$name]);
+    }
+
+    public function getBlock($name)
+    {
+        return $this->blocks[$name];
+    }
+
+    public function setBlock($name, Twig_Node_Block $value)
+    {
+        $this->blocks[$name] = new Twig_Node_Body(array($value), array(), $value->getLine());
+    }
+
+    public function hasMacro($name)
+    {
+        return isset($this->macros[$name]);
+    }
+
+    public function setMacro($name, Twig_Node_Macro $node)
+    {
+        if ($this->isReservedMacroName($name)) {
+            throw new Twig_Error_Syntax(sprintf('"%s" cannot be used as a macro name as it is a reserved keyword.', $name), $node->getLine(), $this->getFilename());
+        }
+
+        $this->macros[$name] = $node;
+    }
+
+    public function isReservedMacroName($name)
+    {
+        if (null === $this->reservedMacroNames) {
+            $this->reservedMacroNames = array();
+            $r = new ReflectionClass($this->env->getBaseTemplateClass());
+            foreach ($r->getMethods() as $method) {
+                $methodName = strtolower($method->getName());
+
+                if ('get' === substr($methodName, 0, 3) && isset($methodName[3])) {
+                    $this->reservedMacroNames[] = substr($methodName, 3);
+                }
+            }
+        }
+
+        return in_array(strtolower($name), $this->reservedMacroNames);
+    }
+
+    public function addTrait($trait)
+    {
+        $this->traits[] = $trait;
+    }
+
+    public function hasTraits()
+    {
+        return count($this->traits) > 0;
+    }
+
+    public function embedTemplate(Twig_Node_Module $template)
+    {
+        $template->setIndex(mt_rand());
+
+        $this->embeddedTemplates[] = $template;
+    }
+
+    public function addImportedSymbol($type, $alias, $name = null, Twig_Node_Expression $node = null)
+    {
+        $this->importedSymbols[0][$type][$alias] = array('name' => $name, 'node' => $node);
+    }
+
+    public function getImportedSymbol($type, $alias)
+    {
+        foreach ($this->importedSymbols as $functions) {
+            if (isset($functions[$type][$alias])) {
+                return $functions[$type][$alias];
+            }
+        }
+    }
+
+    public function isMainScope()
+    {
+        return 1 === count($this->importedSymbols);
+    }
+
+    public function pushLocalScope()
+    {
+        array_unshift($this->importedSymbols, array());
+    }
+
+    public function popLocalScope()
+    {
+        array_shift($this->importedSymbols);
+    }
+
+    /**
+     * Gets the expression parser.
+     *
+     * @return Twig_ExpressionParser The expression parser
+     */
+    public function getExpressionParser()
+    {
+        return $this->expressionParser;
+    }
+
+    public function getParent()
+    {
+        return $this->parent;
+    }
+
+    public function setParent($parent)
+    {
+        $this->parent = $parent;
+    }
+
+    /**
+     * Gets the token stream.
+     *
+     * @return Twig_TokenStream The token stream
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+
+    /**
+     * Gets the current token.
+     *
+     * @return Twig_Token The current token
+     */
+    public function getCurrentToken()
+    {
+        return $this->stream->getCurrent();
+    }
+
+    protected function filterBodyNodes(Twig_NodeInterface $node)
+    {
+        // check that the body does not contain non-empty output nodes
+        if (
+            ($node instanceof Twig_Node_Text && !ctype_space($node->getAttribute('data')))
+            ||
+            (!$node instanceof Twig_Node_Text && !$node instanceof Twig_Node_BlockReference && $node instanceof Twig_NodeOutputInterface)
+        ) {
+            if (false !== strpos((string) $node, chr(0xEF).chr(0xBB).chr(0xBF))) {
+                throw new Twig_Error_Syntax('A template that extends another one cannot have a body but a byte order mark (BOM) has been detected; it must be removed.', $node->getLine(), $this->getFilename());
+            }
+
+            throw new Twig_Error_Syntax('A template that extends another one cannot have a body.', $node->getLine(), $this->getFilename());
+        }
+
+        // bypass "set" nodes as they "capture" the output
+        if ($node instanceof Twig_Node_Set) {
+            return $node;
+        }
+
+        if ($node instanceof Twig_NodeOutputInterface) {
+            return;
+        }
+
+        foreach ($node as $k => $n) {
+            if (null !== $n && null === $this->filterBodyNodes($n)) {
+                $node->removeNode($k);
+            }
+        }
+
+        return $node;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Parser.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/ParserInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/ParserInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/ParserInterface.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by parser classes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_ParserInterface
+{
+    /**
+     * Converts a token stream to a node tree.
+     *
+     * @param Twig_TokenStream $stream A token stream instance
+     *
+     * @return Twig_Node_Module A node tree
+     *
+     * @throws Twig_Error_Syntax When the token stream is syntactically or semantically wrong
+     */
+    public function parse(Twig_TokenStream $stream);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/ParserInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Blackfire.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Blackfire.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Blackfire.php	(revision 2)
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Dumper_Blackfire
+{
+    public function dump(Twig_Profiler_Profile $profile)
+    {
+        $data = array();
+        $this->dumpProfile('main()', $profile, $data);
+        $this->dumpChildren('main()', $profile, $data);
+
+        $start = microtime(true);
+        $str = <<<EOF
+file-format: BlackfireProbe
+cost-dimensions: wt mu pmu
+request-start: {$start}
+
+
+EOF;
+
+        foreach ($data as $name => $values) {
+            $str .= "{$name}//{$values['ct']} {$values['wt']} {$values['mu']} {$values['pmu']}\n";
+        }
+
+        return $str;
+    }
+
+    private function dumpChildren($parent, Twig_Profiler_Profile $profile, &$data)
+    {
+        foreach ($profile as $p) {
+            if ($p->isTemplate()) {
+                $name = $p->getTemplate();
+            } else {
+                $name = sprintf('%s::%s(%s)', $p->getTemplate(), $p->getType(), $p->getName());
+            }
+            $this->dumpProfile(sprintf('%s==>%s', $parent, $name), $p, $data);
+            $this->dumpChildren($name, $p, $data);
+        }
+    }
+
+    private function dumpProfile($edge, Twig_Profiler_Profile $profile, &$data)
+    {
+        if (isset($data[$edge])) {
+            $data[$edge]['ct'] += 1;
+            $data[$edge]['wt'] += floor($profile->getDuration() * 1000000);
+            $data[$edge]['mu'] += $profile->getMemoryUsage();
+            $data[$edge]['pmu'] += $profile->getPeakMemoryUsage();
+        } else {
+            $data[$edge] = array(
+                'ct' => 1,
+                'wt' => floor($profile->getDuration() * 1000000),
+                'mu' => $profile->getMemoryUsage(),
+                'pmu' => $profile->getPeakMemoryUsage(),
+            );
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Blackfire.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Html.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Html.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Html.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Dumper_Html extends Twig_Profiler_Dumper_Text
+{
+    private static $colors = array(
+        'block' => '#dfd',
+        'macro' => '#ddf',
+        'template' => '#ffd',
+        'big' => '#d44',
+    );
+
+    public function dump(Twig_Profiler_Profile $profile)
+    {
+        return '<pre>'.parent::dump($profile).'</pre>';
+    }
+
+    protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix)
+    {
+        return sprintf('%s└ <span style="background-color: %s">%s</span>', $prefix, self::$colors['template'], $profile->getTemplate());
+    }
+
+    protected function formatNonTemplate(Twig_Profiler_Profile $profile, $prefix)
+    {
+        return sprintf('%s└ %s::%s(<span style="background-color: %s">%s</span>)', $prefix, $profile->getTemplate(), $profile->getType(), isset(self::$colors[$profile->getType()]) ? self::$colors[$profile->getType()] : 'auto', $profile->getName());
+    }
+
+    protected function formatTime(Twig_Profiler_Profile $profile, $percent)
+    {
+        return sprintf('<span style="color: %s">%.2fms/%.0f%%</span>', $percent > 20 ? self::$colors['big'] : 'auto', $profile->getDuration() * 1000, $percent);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Html.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Text.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Text.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Text.php	(revision 2)
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Dumper_Text
+{
+    private $root;
+
+    public function dump(Twig_Profiler_Profile $profile)
+    {
+        return $this->dumpProfile($profile);
+    }
+
+    protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix)
+    {
+        return sprintf('%s└ %s', $prefix, $profile->getTemplate());
+    }
+
+    protected function formatNonTemplate(Twig_Profiler_Profile $profile, $prefix)
+    {
+        return sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), $profile->getName());
+    }
+
+    protected function formatTime(Twig_Profiler_Profile $profile, $percent)
+    {
+        return sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent);
+    }
+
+    private function dumpProfile(Twig_Profiler_Profile $profile, $prefix = '', $sibling = false)
+    {
+        if ($profile->isRoot()) {
+            $this->root = $profile->getDuration();
+            $start = $profile->getName();
+        } else {
+            if ($profile->isTemplate()) {
+                $start = $this->formatTemplate($profile, $prefix);
+            } else {
+                $start = $this->formatNonTemplate($profile, $prefix);
+            }
+            $prefix .= $sibling ? '│ ' : '  ';
+        }
+
+        $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0;
+
+        if ($profile->getDuration() * 1000 < 1) {
+            $str = $start."\n";
+        } else {
+            $str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent));
+        }
+
+        $nCount = count($profile->getProfiles());
+        foreach ($profile as $i => $p) {
+            $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount);
+        }
+
+        return $str;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Dumper/Text.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/EnterProfile.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/EnterProfile.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/EnterProfile.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a profile enter node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Node_EnterProfile extends Twig_Node
+{
+    public function __construct($extensionName, $type, $name, $varName)
+    {
+        parent::__construct(array(), array('extension_name' => $extensionName, 'name' => $name, 'type' => $type, 'var_name' => $varName));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write(sprintf('$%s = $this->env->getExtension(', $this->getAttribute('var_name')))
+            ->repr($this->getAttribute('extension_name'))
+            ->raw(");\n")
+            ->write(sprintf('$%s->enter($%s = new Twig_Profiler_Profile($this->getTemplateName(), ', $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof'))
+            ->repr($this->getAttribute('type'))
+            ->raw(', ')
+            ->repr($this->getAttribute('name'))
+            ->raw("));\n\n")
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/EnterProfile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/LeaveProfile.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/LeaveProfile.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/LeaveProfile.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a profile leave node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Node_LeaveProfile extends Twig_Node
+{
+    public function __construct($varName)
+    {
+        parent::__construct(array(), array('var_name' => $varName));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function compile(Twig_Compiler $compiler)
+    {
+        $compiler
+            ->write("\n")
+            ->write(sprintf("\$%s->leave(\$%s);\n\n", $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof'))
+        ;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Node/LeaveProfile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/NodeVisitor/Profiler.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/NodeVisitor/Profiler.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/NodeVisitor/Profiler.php	(revision 2)
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_NodeVisitor_Profiler extends Twig_BaseNodeVisitor
+{
+    private $extensionName;
+
+    public function __construct($extensionName)
+    {
+        $this->extensionName = $extensionName;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doEnterNode(Twig_Node $node, Twig_Environment $env)
+    {
+        return $node;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doLeaveNode(Twig_Node $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            $varName = $this->getVarName();
+            $node->setNode('display_start', new Twig_Node(array(new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::TEMPLATE, $node->getAttribute('filename'), $varName), $node->getNode('display_start'))));
+            $node->setNode('display_end', new Twig_Node(array(new Twig_Profiler_Node_LeaveProfile($varName), $node->getNode('display_end'))));
+        } elseif ($node instanceof Twig_Node_Block) {
+            $varName = $this->getVarName();
+            $node->setNode('body', new Twig_Node_Body(array(
+                new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::BLOCK, $node->getAttribute('name'), $varName),
+                $node->getNode('body'),
+                new Twig_Profiler_Node_LeaveProfile($varName),
+            )));
+        } elseif ($node instanceof Twig_Node_Macro) {
+            $varName = $this->getVarName();
+            $node->setNode('body', new Twig_Node_Body(array(
+                new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::MACRO, $node->getAttribute('name'), $varName),
+                $node->getNode('body'),
+                new Twig_Profiler_Node_LeaveProfile($varName),
+            )));
+        }
+
+        return $node;
+    }
+
+    private function getVarName()
+    {
+        return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getPriority()
+    {
+        return 0;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/NodeVisitor/Profiler.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Profiler/Profile.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Profiler/Profile.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Profiler/Profile.php	(revision 2)
@@ -0,0 +1,160 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2015 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Profiler_Profile implements IteratorAggregate, Serializable
+{
+    const ROOT = 'ROOT';
+    const BLOCK = 'block';
+    const TEMPLATE = 'template';
+    const MACRO = 'macro';
+
+    private $template;
+    private $name;
+    private $type;
+    private $starts = array();
+    private $ends = array();
+    private $profiles = array();
+
+    public function __construct($template = 'main', $type = self::ROOT, $name = 'main')
+    {
+        $this->template = $template;
+        $this->type = $type;
+        $this->name = 0 === strpos($name, '__internal_') ? 'INTERNAL' : $name;
+        $this->enter();
+    }
+
+    public function getTemplate()
+    {
+        return $this->template;
+    }
+
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function isRoot()
+    {
+        return self::ROOT === $this->type;
+    }
+
+    public function isTemplate()
+    {
+        return self::TEMPLATE === $this->type;
+    }
+
+    public function isBlock()
+    {
+        return self::BLOCK === $this->type;
+    }
+
+    public function isMacro()
+    {
+        return self::MACRO === $this->type;
+    }
+
+    public function getProfiles()
+    {
+        return $this->profiles;
+    }
+
+    public function addProfile(Twig_Profiler_Profile $profile)
+    {
+        $this->profiles[] = $profile;
+    }
+
+    /**
+     * Returns the duration in microseconds.
+     *
+     * @return int
+     */
+    public function getDuration()
+    {
+        if ($this->isRoot() && $this->profiles) {
+            // for the root node with children, duration is the sum of all child durations
+            $duration = 0;
+            foreach ($this->profiles as $profile) {
+                $duration += $profile->getDuration();
+            }
+
+            return $duration;
+        }
+
+        return isset($this->ends['wt']) && isset($this->starts['wt']) ? $this->ends['wt'] - $this->starts['wt'] : 0;
+    }
+
+    /**
+     * Returns the memory usage in bytes.
+     *
+     * @return int
+     */
+    public function getMemoryUsage()
+    {
+        return isset($this->ends['mu']) && isset($this->starts['mu']) ? $this->ends['mu'] - $this->starts['mu'] : 0;
+    }
+
+    /**
+     * Returns the peak memory usage in bytes.
+     *
+     * @return int
+     */
+    public function getPeakMemoryUsage()
+    {
+        return isset($this->ends['pmu']) && isset($this->starts['pmu']) ? $this->ends['pmu'] - $this->starts['pmu'] : 0;
+    }
+
+    /**
+     * Starts the profiling.
+     */
+    public function enter()
+    {
+        $this->starts = array(
+            'wt' => microtime(true),
+            'mu' => memory_get_usage(),
+            'pmu' => memory_get_peak_usage(),
+        );
+    }
+
+    /**
+     * Stops the profiling.
+     */
+    public function leave()
+    {
+        $this->ends = array(
+            'wt' => microtime(true),
+            'mu' => memory_get_usage(),
+            'pmu' => memory_get_peak_usage(),
+        );
+    }
+
+    public function getIterator()
+    {
+        return new ArrayIterator($this->profiles);
+    }
+
+    public function serialize()
+    {
+        return serialize(array($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles));
+    }
+
+    public function unserialize($data)
+    {
+        list($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles) = unserialize($data);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Profiler/Profile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityError.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityError.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityError.php	(revision 2)
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when a security error occurs at runtime.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Sandbox_SecurityError extends Twig_Error
+{
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityError.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when a not allowed filter is used in a template.
+ *
+ * @author Martin Hasoň <martin.hason@gmail.com>
+ */
+class Twig_Sandbox_SecurityNotAllowedFilterError extends Twig_Sandbox_SecurityError
+{
+    private $filterName;
+
+    public function __construct($message, $functionName, $lineno = -1, $filename = null, Exception $previous = null)
+    {
+        parent::__construct($message, $lineno, $filename, $previous);
+        $this->filterName = $functionName;
+    }
+
+    public function getFilterName()
+    {
+        return $this->filterName;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when a not allowed function is used in a template.
+ *
+ * @author Martin Hasoň <martin.hason@gmail.com>
+ */
+class Twig_Sandbox_SecurityNotAllowedFunctionError extends Twig_Sandbox_SecurityError
+{
+    private $functionName;
+
+    public function __construct($message, $functionName, $lineno = -1, $filename = null, Exception $previous = null)
+    {
+        parent::__construct($message, $lineno, $filename, $previous);
+        $this->functionName = $functionName;
+    }
+
+    public function getFunctionName()
+    {
+        return $this->functionName;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Exception thrown when a not allowed tag is used in a template.
+ *
+ * @author Martin Hasoň <martin.hason@gmail.com>
+ */
+class Twig_Sandbox_SecurityNotAllowedTagError extends Twig_Sandbox_SecurityError
+{
+    private $tagName;
+
+    public function __construct($message, $tagName, $lineno = -1, $filename = null, Exception $previous = null)
+    {
+        parent::__construct($message, $lineno, $filename, $previous);
+        $this->tagName = $tagName;
+    }
+
+    public function getTagName()
+    {
+        return $this->tagName;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicy.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicy.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicy.php	(revision 2)
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a security policy which need to be enforced when sandbox mode is enabled.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Sandbox_SecurityPolicy implements Twig_Sandbox_SecurityPolicyInterface
+{
+    protected $allowedTags;
+    protected $allowedFilters;
+    protected $allowedMethods;
+    protected $allowedProperties;
+    protected $allowedFunctions;
+
+    public function __construct(array $allowedTags = array(), array $allowedFilters = array(), array $allowedMethods = array(), array $allowedProperties = array(), array $allowedFunctions = array())
+    {
+        $this->allowedTags = $allowedTags;
+        $this->allowedFilters = $allowedFilters;
+        $this->setAllowedMethods($allowedMethods);
+        $this->allowedProperties = $allowedProperties;
+        $this->allowedFunctions = $allowedFunctions;
+    }
+
+    public function setAllowedTags(array $tags)
+    {
+        $this->allowedTags = $tags;
+    }
+
+    public function setAllowedFilters(array $filters)
+    {
+        $this->allowedFilters = $filters;
+    }
+
+    public function setAllowedMethods(array $methods)
+    {
+        $this->allowedMethods = array();
+        foreach ($methods as $class => $m) {
+            $this->allowedMethods[$class] = array_map('strtolower', is_array($m) ? $m : array($m));
+        }
+    }
+
+    public function setAllowedProperties(array $properties)
+    {
+        $this->allowedProperties = $properties;
+    }
+
+    public function setAllowedFunctions(array $functions)
+    {
+        $this->allowedFunctions = $functions;
+    }
+
+    public function checkSecurity($tags, $filters, $functions)
+    {
+        foreach ($tags as $tag) {
+            if (!in_array($tag, $this->allowedTags)) {
+                throw new Twig_Sandbox_SecurityNotAllowedTagError(sprintf('Tag "%s" is not allowed.', $tag), $tag);
+            }
+        }
+
+        foreach ($filters as $filter) {
+            if (!in_array($filter, $this->allowedFilters)) {
+                throw new Twig_Sandbox_SecurityNotAllowedFilterError(sprintf('Filter "%s" is not allowed.', $filter), $filter);
+            }
+        }
+
+        foreach ($functions as $function) {
+            if (!in_array($function, $this->allowedFunctions)) {
+                throw new Twig_Sandbox_SecurityNotAllowedFunctionError(sprintf('Function "%s" is not allowed.', $function), $function);
+            }
+        }
+    }
+
+    public function checkMethodAllowed($obj, $method)
+    {
+        if ($obj instanceof Twig_TemplateInterface || $obj instanceof Twig_Markup) {
+            return true;
+        }
+
+        $allowed = false;
+        $method = strtolower($method);
+        foreach ($this->allowedMethods as $class => $methods) {
+            if ($obj instanceof $class) {
+                $allowed = in_array($method, $methods);
+
+                break;
+            }
+        }
+
+        if (!$allowed) {
+            throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, get_class($obj)));
+        }
+    }
+
+    public function checkPropertyAllowed($obj, $property)
+    {
+        $allowed = false;
+        foreach ($this->allowedProperties as $class => $properties) {
+            if ($obj instanceof $class) {
+                $allowed = in_array($property, is_array($properties) ? $properties : array($properties));
+
+                break;
+            }
+        }
+
+        if (!$allowed) {
+            throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, get_class($obj)));
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicy.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicyInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicyInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicyInterface.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interfaces that all security policy classes must implements.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_Sandbox_SecurityPolicyInterface
+{
+    public function checkSecurity($tags, $filters, $functions);
+
+    public function checkMethodAllowed($obj, $method);
+
+    public function checkPropertyAllowed($obj, $method);
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Sandbox/SecurityPolicyInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/SimpleFilter.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/SimpleFilter.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/SimpleFilter.php	(revision 2)
@@ -0,0 +1,117 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009-2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template filter.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_SimpleFilter
+{
+    protected $name;
+    protected $callable;
+    protected $options;
+    protected $arguments = array();
+
+    public function __construct($name, $callable, array $options = array())
+    {
+        $this->name = $name;
+        $this->callable = $callable;
+        $this->options = array_merge(array(
+            'needs_environment' => false,
+            'needs_context' => false,
+            'is_variadic' => false,
+            'is_safe' => null,
+            'is_safe_callback' => null,
+            'pre_escape' => null,
+            'preserves_safety' => null,
+            'node_class' => 'Twig_Node_Expression_Filter',
+            'deprecated' => false,
+            'alternative' => null,
+        ), $options);
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function getCallable()
+    {
+        return $this->callable;
+    }
+
+    public function getNodeClass()
+    {
+        return $this->options['node_class'];
+    }
+
+    public function setArguments($arguments)
+    {
+        $this->arguments = $arguments;
+    }
+
+    public function getArguments()
+    {
+        return $this->arguments;
+    }
+
+    public function needsEnvironment()
+    {
+        return $this->options['needs_environment'];
+    }
+
+    public function needsContext()
+    {
+        return $this->options['needs_context'];
+    }
+
+    public function getSafe(Twig_Node $filterArgs)
+    {
+        if (null !== $this->options['is_safe']) {
+            return $this->options['is_safe'];
+        }
+
+        if (null !== $this->options['is_safe_callback']) {
+            return call_user_func($this->options['is_safe_callback'], $filterArgs);
+        }
+    }
+
+    public function getPreservesSafety()
+    {
+        return $this->options['preserves_safety'];
+    }
+
+    public function getPreEscape()
+    {
+        return $this->options['pre_escape'];
+    }
+
+    public function isVariadic()
+    {
+        return $this->options['is_variadic'];
+    }
+
+    public function isDeprecated()
+    {
+        return (bool) $this->options['deprecated'];
+    }
+
+    public function getDeprecatedVersion()
+    {
+        return $this->options['deprecated'];
+    }
+
+    public function getAlternative()
+    {
+        return $this->options['alternative'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/SimpleFilter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/SimpleFunction.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/SimpleFunction.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/SimpleFunction.php	(revision 2)
@@ -0,0 +1,107 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010-2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template function.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_SimpleFunction
+{
+    protected $name;
+    protected $callable;
+    protected $options;
+    protected $arguments = array();
+
+    public function __construct($name, $callable, array $options = array())
+    {
+        $this->name = $name;
+        $this->callable = $callable;
+        $this->options = array_merge(array(
+            'needs_environment' => false,
+            'needs_context' => false,
+            'is_variadic' => false,
+            'is_safe' => null,
+            'is_safe_callback' => null,
+            'node_class' => 'Twig_Node_Expression_Function',
+            'deprecated' => false,
+            'alternative' => null,
+        ), $options);
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function getCallable()
+    {
+        return $this->callable;
+    }
+
+    public function getNodeClass()
+    {
+        return $this->options['node_class'];
+    }
+
+    public function setArguments($arguments)
+    {
+        $this->arguments = $arguments;
+    }
+
+    public function getArguments()
+    {
+        return $this->arguments;
+    }
+
+    public function needsEnvironment()
+    {
+        return $this->options['needs_environment'];
+    }
+
+    public function needsContext()
+    {
+        return $this->options['needs_context'];
+    }
+
+    public function getSafe(Twig_Node $functionArgs)
+    {
+        if (null !== $this->options['is_safe']) {
+            return $this->options['is_safe'];
+        }
+
+        if (null !== $this->options['is_safe_callback']) {
+            return call_user_func($this->options['is_safe_callback'], $functionArgs);
+        }
+
+        return array();
+    }
+
+    public function isVariadic()
+    {
+        return $this->options['is_variadic'];
+    }
+
+    public function isDeprecated()
+    {
+        return (bool) $this->options['deprecated'];
+    }
+
+    public function getDeprecatedVersion()
+    {
+        return $this->options['deprecated'];
+    }
+
+    public function getAlternative()
+    {
+        return $this->options['alternative'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/SimpleFunction.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/SimpleTest.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/SimpleTest.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/SimpleTest.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010-2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_SimpleTest
+{
+    protected $name;
+    protected $callable;
+    protected $options;
+
+    public function __construct($name, $callable, array $options = array())
+    {
+        $this->name = $name;
+        $this->callable = $callable;
+        $this->options = array_merge(array(
+            'is_variadic' => false,
+            'node_class' => 'Twig_Node_Expression_Test',
+            'deprecated' => false,
+            'alternative' => null,
+        ), $options);
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function getCallable()
+    {
+        return $this->callable;
+    }
+
+    public function getNodeClass()
+    {
+        return $this->options['node_class'];
+    }
+
+    public function isVariadic()
+    {
+        return $this->options['is_variadic'];
+    }
+
+    public function isDeprecated()
+    {
+        return (bool) $this->options['deprecated'];
+    }
+
+    public function getDeprecatedVersion()
+    {
+        return $this->options['deprecated'];
+    }
+
+    public function getAlternative()
+    {
+        return $this->options['alternative'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/SimpleTest.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Template.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Template.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Template.php	(revision 2)
@@ -0,0 +1,614 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Default base class for compiled templates.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class Twig_Template implements Twig_TemplateInterface
+{
+    protected static $cache = array();
+
+    protected $parent;
+    protected $parents = array();
+    protected $env;
+    protected $blocks = array();
+    protected $traits = array();
+
+    /**
+     * Constructor.
+     *
+     * @param Twig_Environment $env A Twig_Environment instance
+     */
+    public function __construct(Twig_Environment $env)
+    {
+        $this->env = $env;
+    }
+
+    /**
+     * Returns the template name.
+     *
+     * @return string The template name
+     */
+    abstract public function getTemplateName();
+
+    /**
+     * @deprecated since 1.20 (to be removed in 2.0)
+     */
+    public function getEnvironment()
+    {
+        @trigger_error('The '.__METHOD__.' method is deprecated since version 1.20 and will be removed in 2.0.', E_USER_DEPRECATED);
+
+        return $this->env;
+    }
+
+    /**
+     * Returns the parent template.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @param array $context
+     *
+     * @return Twig_TemplateInterface|false The parent template or false if there is no parent
+     *
+     * @internal
+     */
+    public function getParent(array $context)
+    {
+        if (null !== $this->parent) {
+            return $this->parent;
+        }
+
+        try {
+            $parent = $this->doGetParent($context);
+
+            if (false === $parent) {
+                return false;
+            }
+
+            if ($parent instanceof self) {
+                return $this->parents[$parent->getTemplateName()] = $parent;
+            }
+
+            if (!isset($this->parents[$parent])) {
+                $this->parents[$parent] = $this->loadTemplate($parent);
+            }
+        } catch (Twig_Error_Loader $e) {
+            $e->setTemplateFile(null);
+            $e->guess();
+
+            throw $e;
+        }
+
+        return $this->parents[$parent];
+    }
+
+    protected function doGetParent(array $context)
+    {
+        return false;
+    }
+
+    public function isTraitable()
+    {
+        return true;
+    }
+
+    /**
+     * Displays a parent block.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @param string $name    The block name to display from the parent
+     * @param array  $context The context
+     * @param array  $blocks  The current set of blocks
+     *
+     * @internal
+     */
+    public function displayParentBlock($name, array $context, array $blocks = array())
+    {
+        $name = (string) $name;
+
+        if (isset($this->traits[$name])) {
+            $this->traits[$name][0]->displayBlock($name, $context, $blocks, false);
+        } elseif (false !== $parent = $this->getParent($context)) {
+            $parent->displayBlock($name, $context, $blocks, false);
+        } else {
+            throw new Twig_Error_Runtime(sprintf('The template has no parent and no traits defining the "%s" block', $name), -1, $this->getTemplateName());
+        }
+    }
+
+    /**
+     * Displays a block.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @param string $name      The block name to display
+     * @param array  $context   The context
+     * @param array  $blocks    The current set of blocks
+     * @param bool   $useBlocks Whether to use the current set of blocks
+     *
+     * @internal
+     */
+    public function displayBlock($name, array $context, array $blocks = array(), $useBlocks = true)
+    {
+        $name = (string) $name;
+
+        if ($useBlocks && isset($blocks[$name])) {
+            $template = $blocks[$name][0];
+            $block = $blocks[$name][1];
+        } elseif (isset($this->blocks[$name])) {
+            $template = $this->blocks[$name][0];
+            $block = $this->blocks[$name][1];
+        } else {
+            $template = null;
+            $block = null;
+        }
+
+        if (null !== $template) {
+            // avoid RCEs when sandbox is enabled
+            if (!$template instanceof self) {
+                throw new LogicException('A block must be a method on a Twig_Template instance.');
+            }
+
+            try {
+                $template->$block($context, $blocks);
+            } catch (Twig_Error $e) {
+                if (!$e->getTemplateFile()) {
+                    $e->setTemplateFile($template->getTemplateName());
+                }
+
+                // this is mostly useful for Twig_Error_Loader exceptions
+                // see Twig_Error_Loader
+                if (false === $e->getTemplateLine()) {
+                    $e->setTemplateLine(-1);
+                    $e->guess();
+                }
+
+                throw $e;
+            } catch (Exception $e) {
+                throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getTemplateName(), $e);
+            }
+        } elseif (false !== $parent = $this->getParent($context)) {
+            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);
+        }
+    }
+
+    /**
+     * Renders a parent block.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @param string $name    The block name to render from the parent
+     * @param array  $context The context
+     * @param array  $blocks  The current set of blocks
+     *
+     * @return string The rendered block
+     *
+     * @internal
+     */
+    public function renderParentBlock($name, array $context, array $blocks = array())
+    {
+        ob_start();
+        $this->displayParentBlock($name, $context, $blocks);
+
+        return ob_get_clean();
+    }
+
+    /**
+     * Renders a block.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @param string $name      The block name to render
+     * @param array  $context   The context
+     * @param array  $blocks    The current set of blocks
+     * @param bool   $useBlocks Whether to use the current set of blocks
+     *
+     * @return string The rendered block
+     *
+     * @internal
+     */
+    public function renderBlock($name, array $context, array $blocks = array(), $useBlocks = true)
+    {
+        ob_start();
+        $this->displayBlock($name, $context, $blocks, $useBlocks);
+
+        return ob_get_clean();
+    }
+
+    /**
+     * Returns whether a block exists or not.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * This method does only return blocks defined in the current template
+     * or defined in "used" traits.
+     *
+     * It does not return blocks from parent templates as the parent
+     * template name can be dynamic, which is only known based on the
+     * current context.
+     *
+     * @param string $name The block name
+     *
+     * @return bool true if the block exists, false otherwise
+     *
+     * @internal
+     */
+    public function hasBlock($name)
+    {
+        return isset($this->blocks[(string) $name]);
+    }
+
+    /**
+     * Returns all block names.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @return array An array of block names
+     *
+     * @see hasBlock
+     *
+     * @internal
+     */
+    public function getBlockNames()
+    {
+        return array_keys($this->blocks);
+    }
+
+    protected function loadTemplate($template, $templateName = null, $line = null, $index = null)
+    {
+        try {
+            if (is_array($template)) {
+                return $this->env->resolveTemplate($template);
+            }
+
+            if ($template instanceof self) {
+                return $template;
+            }
+
+            return $this->env->loadTemplate($template, $index);
+        } catch (Twig_Error $e) {
+            if (!$e->getTemplateFile()) {
+                $e->setTemplateFile($templateName ? $templateName : $this->getTemplateName());
+            }
+
+            if ($e->getTemplateLine()) {
+                throw $e;
+            }
+
+            if (!$line) {
+                $e->guess();
+            } else {
+                $e->setTemplateLine($line);
+            }
+
+            throw $e;
+        }
+    }
+
+    /**
+     * Returns all blocks.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * @return array An array of blocks
+     *
+     * @see hasBlock
+     *
+     * @internal
+     */
+    public function getBlocks()
+    {
+        return $this->blocks;
+    }
+
+    /**
+     * Returns the template source code.
+     *
+     * @return string|null The template source code or null if it is not available
+     */
+    public function getSource()
+    {
+        $reflector = new ReflectionClass($this);
+        $file = $reflector->getFileName();
+
+        if (!file_exists($file)) {
+            return;
+        }
+
+        $source = file($file, FILE_IGNORE_NEW_LINES);
+        array_splice($source, 0, $reflector->getEndLine());
+
+        $i = 0;
+        while (isset($source[$i]) && '/* */' === substr_replace($source[$i], '', 3, -2)) {
+            $source[$i] = str_replace('*//* ', '*/', substr($source[$i], 3, -2));
+            ++$i;
+        }
+        array_splice($source, $i);
+
+        return implode("\n", $source);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function display(array $context, array $blocks = array())
+    {
+        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function render(array $context)
+    {
+        $level = ob_get_level();
+        ob_start();
+        try {
+            $this->display($context);
+        } catch (Exception $e) {
+            while (ob_get_level() > $level) {
+                ob_end_clean();
+            }
+
+            throw $e;
+        }
+
+        return ob_get_clean();
+    }
+
+    protected function displayWithErrorHandling(array $context, array $blocks = array())
+    {
+        try {
+            $this->doDisplay($context, $blocks);
+        } catch (Twig_Error $e) {
+            if (!$e->getTemplateFile()) {
+                $e->setTemplateFile($this->getTemplateName());
+            }
+
+            // this is mostly useful for Twig_Error_Loader exceptions
+            // see Twig_Error_Loader
+            if (false === $e->getTemplateLine()) {
+                $e->setTemplateLine(-1);
+                $e->guess();
+            }
+
+            throw $e;
+        } catch (Exception $e) {
+            throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getTemplateName(), $e);
+        }
+    }
+
+    /**
+     * Auto-generated method to display the template with the given context.
+     *
+     * @param array $context An array of parameters to pass to the template
+     * @param array $blocks  An array of blocks to pass to the template
+     */
+    abstract protected function doDisplay(array $context, array $blocks = array());
+
+    /**
+     * Returns a variable from the context.
+     *
+     * This method is for internal use only and should never be called
+     * directly.
+     *
+     * This method should not be overridden in a sub-class as this is an
+     * implementation detail that has been introduced to optimize variable
+     * access for versions of PHP before 5.4. This is not a way to override
+     * the way to get a variable value.
+     *
+     * @param array  $context           The context
+     * @param string $item              The variable to return from the context
+     * @param bool   $ignoreStrictCheck Whether to ignore the strict variable check or not
+     *
+     * @return mixed The content of the context variable
+     *
+     * @throws Twig_Error_Runtime if the variable does not exist and Twig is running in strict mode
+     *
+     * @internal
+     */
+    final protected function getContext($context, $item, $ignoreStrictCheck = false)
+    {
+        if (!array_key_exists($item, $context)) {
+            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
+                return;
+            }
+
+            throw new Twig_Error_Runtime(sprintf('Variable "%s" does not exist', $item), -1, $this->getTemplateName());
+        }
+
+        return $context[$item];
+    }
+
+    /**
+     * Returns the attribute value for a given array/object.
+     *
+     * @param mixed  $object            The object or array from where to get the item
+     * @param mixed  $item              The item to get from the array or object
+     * @param array  $arguments         An array of arguments to pass if the item is an object method
+     * @param string $type              The type of attribute (@see Twig_Template constants)
+     * @param bool   $isDefinedTest     Whether this is only a defined check
+     * @param bool   $ignoreStrictCheck Whether to ignore the strict attribute check or not
+     *
+     * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true
+     *
+     * @throws Twig_Error_Runtime if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false
+     */
+    protected function getAttribute($object, $item, array $arguments = array(), $type = self::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false)
+    {
+        // array
+        if (self::METHOD_CALL !== $type) {
+            $arrayItem = is_bool($item) || is_float($item) ? (int) $item : $item;
+
+            if ((is_array($object) && array_key_exists($arrayItem, $object))
+                || ($object instanceof ArrayAccess && isset($object[$arrayItem]))
+            ) {
+                if ($isDefinedTest) {
+                    return true;
+                }
+
+                return $object[$arrayItem];
+            }
+
+            if (self::ARRAY_CALL === $type || !is_object($object)) {
+                if ($isDefinedTest) {
+                    return false;
+                }
+
+                if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
+                    return;
+                }
+
+                if ($object instanceof ArrayAccess) {
+                    $message = sprintf('Key "%s" in object with ArrayAccess of class "%s" does not exist', $arrayItem, get_class($object));
+                } elseif (is_object($object)) {
+                    $message = sprintf('Impossible to access a key "%s" on an object of class "%s" that does not implement ArrayAccess interface', $item, get_class($object));
+                } elseif (is_array($object)) {
+                    if (empty($object)) {
+                        $message = sprintf('Key "%s" does not exist as the array is empty', $arrayItem);
+                    } else {
+                        $message = sprintf('Key "%s" for array with keys "%s" does not exist', $arrayItem, implode(', ', array_keys($object)));
+                    }
+                } elseif (self::ARRAY_CALL === $type) {
+                    if (null === $object) {
+                        $message = sprintf('Impossible to access a key ("%s") on a null variable', $item);
+                    } else {
+                        $message = sprintf('Impossible to access a key ("%s") on a %s variable ("%s")', $item, gettype($object), $object);
+                    }
+                } elseif (null === $object) {
+                    $message = sprintf('Impossible to access an attribute ("%s") on a null variable', $item);
+                } else {
+                    $message = sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s")', $item, gettype($object), $object);
+                }
+
+                throw new Twig_Error_Runtime($message, -1, $this->getTemplateName());
+            }
+        }
+
+        if (!is_object($object)) {
+            if ($isDefinedTest) {
+                return false;
+            }
+
+            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
+                return;
+            }
+
+            if (null === $object) {
+                $message = sprintf('Impossible to invoke a method ("%s") on a null variable', $item);
+            } else {
+                $message = sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s")', $item, gettype($object), $object);
+            }
+
+            throw new Twig_Error_Runtime($message, -1, $this->getTemplateName());
+        }
+
+        // object property
+        if (self::METHOD_CALL !== $type && !$object instanceof self) { // Twig_Template does not have public properties, and we don't want to allow access to internal ones
+            if (isset($object->$item) || array_key_exists((string) $item, $object)) {
+                if ($isDefinedTest) {
+                    return true;
+                }
+
+                if ($this->env->hasExtension('sandbox')) {
+                    $this->env->getExtension('sandbox')->checkPropertyAllowed($object, $item);
+                }
+
+                return $object->$item;
+            }
+        }
+
+        $class = get_class($object);
+
+        // object method
+        if (!isset(self::$cache[$class]['methods'])) {
+            // get_class_methods returns all methods accessible in the scope, but we only want public ones to be accessible in templates
+            if ($object instanceof self) {
+                $ref = new ReflectionClass($class);
+                $methods = array();
+
+                foreach ($ref->getMethods(ReflectionMethod::IS_PUBLIC) as $refMethod) {
+                    $methodName = strtolower($refMethod->name);
+
+                    // Accessing the environment from templates is forbidden to prevent untrusted changes to the environment
+                    if ('getenvironment' !== $methodName) {
+                        $methods[$methodName] = true;
+                    }
+                }
+
+                self::$cache[$class]['methods'] = $methods;
+            } else {
+                self::$cache[$class]['methods'] = array_change_key_case(array_flip(get_class_methods($object)));
+            }
+        }
+
+        $call = false;
+        $lcItem = strtolower($item);
+        if (isset(self::$cache[$class]['methods'][$lcItem])) {
+            $method = (string) $item;
+        } elseif (isset(self::$cache[$class]['methods']['get'.$lcItem])) {
+            $method = 'get'.$item;
+        } elseif (isset(self::$cache[$class]['methods']['is'.$lcItem])) {
+            $method = 'is'.$item;
+        } elseif (isset(self::$cache[$class]['methods']['__call'])) {
+            $method = (string) $item;
+            $call = true;
+        } else {
+            if ($isDefinedTest) {
+                return false;
+            }
+
+            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
+                return;
+            }
+
+            throw new Twig_Error_Runtime(sprintf('Method "%s" for object "%s" does not exist', $item, get_class($object)), -1, $this->getTemplateName());
+        }
+
+        if ($isDefinedTest) {
+            return true;
+        }
+
+        if ($this->env->hasExtension('sandbox')) {
+            $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method);
+        }
+
+        // Some objects throw exceptions when they have __call, and the method we try
+        // to call is not supported. If ignoreStrictCheck is true, we should return null.
+        try {
+            $ret = call_user_func_array(array($object, $method), $arguments);
+        } catch (BadMethodCallException $e) {
+            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
+                return;
+            }
+            throw $e;
+        }
+
+        // useful when calling a template method from a template
+        // this is not supported but unfortunately heavily used in the Symfony profiler
+        if ($object instanceof Twig_TemplateInterface) {
+            return $ret === '' ? '' : new Twig_Markup($ret, $this->env->getCharset());
+        }
+
+        return $ret;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Template.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TemplateInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TemplateInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TemplateInterface.php	(revision 2)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by all compiled templates.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 3.0)
+ */
+interface Twig_TemplateInterface
+{
+    const ANY_CALL = 'any';
+    const ARRAY_CALL = 'array';
+    const METHOD_CALL = 'method';
+
+    /**
+     * Renders the template with the given context and returns it as string.
+     *
+     * @param array $context An array of parameters to pass to the template
+     *
+     * @return string The rendered template
+     */
+    public function render(array $context);
+
+    /**
+     * Displays the template with the given context.
+     *
+     * @param array $context An array of parameters to pass to the template
+     * @param array $blocks  An array of blocks to pass to the template
+     */
+    public function display(array $context, array $blocks = array());
+
+    /**
+     * Returns the bound environment for this template.
+     *
+     * @return Twig_Environment The current environment
+     */
+    public function getEnvironment();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TemplateInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test/Function.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test/Function.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test/Function.php	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Test_Function class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleTest instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a function template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Test_Function extends Twig_Test
+{
+    protected $function;
+
+    public function __construct($function, array $options = array())
+    {
+        $options['callable'] = $function;
+
+        parent::__construct($options);
+
+        $this->function = $function;
+    }
+
+    public function compile()
+    {
+        return $this->function;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test/Function.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test/IntegrationTestCase.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test/IntegrationTestCase.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test/IntegrationTestCase.php	(revision 2)
@@ -0,0 +1,232 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Integration test helper.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Karma Dordrak <drak@zikula.org>
+ */
+abstract class Twig_Test_IntegrationTestCase extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @return string
+     */
+    abstract protected function getFixturesDir();
+
+    /**
+     * @return Twig_ExtensionInterface[]
+     */
+    protected function getExtensions()
+    {
+        return array();
+    }
+
+    /**
+     * @return Twig_SimpleFilter[]
+     */
+    protected function getTwigFilters()
+    {
+        return array();
+    }
+
+    /**
+     * @return Twig_SimpleFunction[]
+     */
+    protected function getTwigFunctions()
+    {
+        return array();
+    }
+
+    /**
+     * @return Twig_SimpleTest[]
+     */
+    protected function getTwigTests()
+    {
+        return array();
+    }
+
+    /**
+     * @dataProvider getTests
+     */
+    public function testIntegration($file, $message, $condition, $templates, $exception, $outputs)
+    {
+        $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs);
+    }
+
+    /**
+     * @dataProvider getLegacyTests
+     * @group legacy
+     */
+    public function testLegacyIntegration($file, $message, $condition, $templates, $exception, $outputs)
+    {
+        $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs);
+    }
+
+    public function getTests($name, $legacyTests = false)
+    {
+        $fixturesDir = realpath($this->getFixturesDir());
+        $tests = array();
+
+        foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
+            if (!preg_match('/\.test$/', $file)) {
+                continue;
+            }
+
+            if ($legacyTests xor false !== strpos($file->getRealpath(), '.legacy.test')) {
+                continue;
+            }
+
+            $test = file_get_contents($file->getRealpath());
+
+            if (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) {
+                $message = $match[1];
+                $condition = $match[2];
+                $templates = self::parseTemplates($match[3]);
+                $exception = $match[5];
+                $outputs = array(array(null, $match[4], null, ''));
+            } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) {
+                $message = $match[1];
+                $condition = $match[2];
+                $templates = self::parseTemplates($match[3]);
+                $exception = false;
+                preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER);
+            } else {
+                throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file)));
+            }
+
+            $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs);
+        }
+
+        if ($legacyTests && empty($tests)) {
+            // add a dummy test to avoid a PHPUnit message
+            return array(array('not', '-', '', array(), '', array()));
+        }
+
+        return $tests;
+    }
+
+    public function getLegacyTests()
+    {
+        return $this->getTests('testLegacyIntegration', true);
+    }
+
+    protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs)
+    {
+        if ($condition) {
+            eval('$ret = '.$condition.';');
+            if (!$ret) {
+                $this->markTestSkipped($condition);
+            }
+        }
+
+        $loader = new Twig_Loader_Array($templates);
+
+        foreach ($outputs as $i => $match) {
+            $config = array_merge(array(
+                'cache' => false,
+                'strict_variables' => true,
+            ), $match[2] ? eval($match[2].';') : array());
+            $twig = new Twig_Environment($loader, $config);
+            $twig->addGlobal('global', 'global');
+            foreach ($this->getExtensions() as $extension) {
+                $twig->addExtension($extension);
+            }
+
+            foreach ($this->getTwigFilters() as $filter) {
+                $twig->addFilter($filter);
+            }
+
+            foreach ($this->getTwigTests() as $test) {
+                $twig->addTest($test);
+            }
+
+            foreach ($this->getTwigFunctions() as $function) {
+                $twig->addFunction($function);
+            }
+
+            // avoid using the same PHP class name for different cases
+            // only for PHP 5.2+
+            if (PHP_VERSION_ID >= 50300) {
+                $p = new ReflectionProperty($twig, 'templateClassPrefix');
+                $p->setAccessible(true);
+                $p->setValue($twig, '__TwigTemplate_'.hash('sha256', uniqid(mt_rand(), true), false).'_');
+            }
+
+            try {
+                $template = $twig->loadTemplate('index.twig');
+            } catch (Exception $e) {
+                if (false !== $exception) {
+                    $message = $e->getMessage();
+                    $this->assertSame(trim($exception), trim(sprintf('%s: %s', get_class($e), $message)));
+                    $this->assertSame('.', substr($message, strlen($message) - 1), $message, 'Exception message must end with a dot.');
+
+                    return;
+                }
+
+                if ($e instanceof Twig_Error_Syntax) {
+                    $e->setTemplateFile($file);
+
+                    throw $e;
+                }
+
+                throw new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e);
+            }
+
+            try {
+                $output = trim($template->render(eval($match[1].';')), "\n ");
+            } catch (Exception $e) {
+                if (false !== $exception) {
+                    $this->assertSame(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage())));
+
+                    return;
+                }
+
+                if ($e instanceof Twig_Error_Syntax) {
+                    $e->setTemplateFile($file);
+                } else {
+                    $e = new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e);
+                }
+
+                $output = trim(sprintf('%s: %s', get_class($e), $e->getMessage()));
+            }
+
+            if (false !== $exception) {
+                list($class) = explode(':', $exception);
+                $this->assertThat(null, new PHPUnit_Framework_Constraint_Exception($class));
+            }
+
+            $expected = trim($match[3], "\n ");
+
+            if ($expected !== $output) {
+                printf("Compiled templates that failed on case %d:\n", $i + 1);
+
+                foreach (array_keys($templates) as $name) {
+                    echo "Template: $name\n";
+                    $source = $loader->getSource($name);
+                    echo $twig->compile($twig->parse($twig->tokenize($source, $name)));
+                }
+            }
+            $this->assertEquals($expected, $output, $message.' (in '.$file.')');
+        }
+    }
+
+    protected static function parseTemplates($test)
+    {
+        $templates = array();
+        preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER);
+        foreach ($matches as $match) {
+            $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2];
+        }
+
+        return $templates;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test/IntegrationTestCase.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test/Method.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test/Method.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test/Method.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Test_Method class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleTest instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a method template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Test_Method extends Twig_Test
+{
+    protected $extension;
+    protected $method;
+
+    public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array())
+    {
+        $options['callable'] = array($extension, $method);
+
+        parent::__construct($options);
+
+        $this->extension = $extension;
+        $this->method = $method;
+    }
+
+    public function compile()
+    {
+        return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method);
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test/Method.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test/Node.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test/Node.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test/Node.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Test_Node class is deprecated since version 1.12 and will be removed in 2.0.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template test as a Node.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_Test_Node extends Twig_Test
+{
+    protected $class;
+
+    public function __construct($class, array $options = array())
+    {
+        parent::__construct($options);
+
+        $this->class = $class;
+    }
+
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+    public function compile()
+    {
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test/Node.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test/NodeTestCase.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test/NodeTestCase.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test/NodeTestCase.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+abstract class Twig_Test_NodeTestCase extends PHPUnit_Framework_TestCase
+{
+    abstract public function getTests();
+
+    /**
+     * @dataProvider getTests
+     */
+    public function testCompile($node, $source, $environment = null, $isPattern = false)
+    {
+        $this->assertNodeCompilation($source, $node, $environment, $isPattern);
+    }
+
+    public function assertNodeCompilation($source, Twig_Node $node, Twig_Environment $environment = null, $isPattern = false)
+    {
+        $compiler = $this->getCompiler($environment);
+        $compiler->compile($node);
+
+        if ($isPattern) {
+            $this->assertStringMatchesFormat($source, trim($compiler->getSource()));
+        } else {
+            $this->assertEquals($source, trim($compiler->getSource()));
+        }
+    }
+
+    protected function getCompiler(Twig_Environment $environment = null)
+    {
+        return new Twig_Compiler(null === $environment ? $this->getEnvironment() : $environment);
+    }
+
+    protected function getEnvironment()
+    {
+        return new Twig_Environment(new Twig_Loader_Array(array()));
+    }
+
+    protected function getVariableGetter($name, $line = false)
+    {
+        $line = $line > 0 ? "// line {$line}\n" : '';
+
+        if (PHP_VERSION_ID >= 50400) {
+            return sprintf('%s(isset($context["%s"]) ? $context["%s"] : null)', $line, $name, $name);
+        }
+
+        return sprintf('%s$this->getContext($context, "%s")', $line, $name);
+    }
+
+    protected function getAttributeGetter()
+    {
+        if (function_exists('twig_template_get_attributes')) {
+            return 'twig_template_get_attributes($this, ';
+        }
+
+        return '$this->getAttribute(';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test/NodeTestCase.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Test.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Test.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Test.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The Twig_Test class is deprecated since version 1.12 and will be removed in 2.0. Use Twig_SimpleTest instead.', E_USER_DEPRECATED);
+
+/**
+ * Represents a template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+abstract class Twig_Test implements Twig_TestInterface, Twig_TestCallableInterface
+{
+    protected $options;
+    protected $arguments = array();
+
+    public function __construct(array $options = array())
+    {
+        $this->options = array_merge(array(
+            'callable' => null,
+        ), $options);
+    }
+
+    public function getCallable()
+    {
+        return $this->options['callable'];
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Test.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TestCallableInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TestCallableInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TestCallableInterface.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a callable template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_TestCallableInterface
+{
+    public function getCallable();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TestCallableInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TestInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TestInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TestInterface.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a template test.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_TestInterface
+{
+    /**
+     * Compiles a test.
+     *
+     * @return string The PHP code for the test
+     */
+    public function compile();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TestInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Token.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Token.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Token.php	(revision 2)
@@ -0,0 +1,216 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a Token.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Token
+{
+    protected $value;
+    protected $type;
+    protected $lineno;
+
+    const EOF_TYPE = -1;
+    const TEXT_TYPE = 0;
+    const BLOCK_START_TYPE = 1;
+    const VAR_START_TYPE = 2;
+    const BLOCK_END_TYPE = 3;
+    const VAR_END_TYPE = 4;
+    const NAME_TYPE = 5;
+    const NUMBER_TYPE = 6;
+    const STRING_TYPE = 7;
+    const OPERATOR_TYPE = 8;
+    const PUNCTUATION_TYPE = 9;
+    const INTERPOLATION_START_TYPE = 10;
+    const INTERPOLATION_END_TYPE = 11;
+
+    /**
+     * Constructor.
+     *
+     * @param int    $type   The type of the token
+     * @param string $value  The token value
+     * @param int    $lineno The line position in the source
+     */
+    public function __construct($type, $value, $lineno)
+    {
+        $this->type = $type;
+        $this->value = $value;
+        $this->lineno = $lineno;
+    }
+
+    /**
+     * Returns a string representation of the token.
+     *
+     * @return string A string representation of the token
+     */
+    public function __toString()
+    {
+        return sprintf('%s(%s)', self::typeToString($this->type, true), $this->value);
+    }
+
+    /**
+     * Tests the current token for a type and/or a value.
+     *
+     * Parameters may be:
+     * * just type
+     * * type and value (or array of possible values)
+     * * just value (or array of possible values) (NAME_TYPE is used as type)
+     *
+     * @param array|int         $type   The type to test
+     * @param array|string|null $values The token value
+     *
+     * @return bool
+     */
+    public function test($type, $values = null)
+    {
+        if (null === $values && !is_int($type)) {
+            $values = $type;
+            $type = self::NAME_TYPE;
+        }
+
+        return ($this->type === $type) && (
+            null === $values ||
+            (is_array($values) && in_array($this->value, $values)) ||
+            $this->value == $values
+        );
+    }
+
+    /**
+     * Gets the line.
+     *
+     * @return int The source line
+     */
+    public function getLine()
+    {
+        return $this->lineno;
+    }
+
+    /**
+     * Gets the token type.
+     *
+     * @return int The token type
+     */
+    public function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Gets the token value.
+     *
+     * @return string The token value
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+    /**
+     * Returns the constant representation (internal) of a given type.
+     *
+     * @param int  $type  The type as an integer
+     * @param bool $short Whether to return a short representation or not
+     *
+     * @return string The string representation
+     */
+    public static function typeToString($type, $short = false)
+    {
+        switch ($type) {
+            case self::EOF_TYPE:
+                $name = 'EOF_TYPE';
+                break;
+            case self::TEXT_TYPE:
+                $name = 'TEXT_TYPE';
+                break;
+            case self::BLOCK_START_TYPE:
+                $name = 'BLOCK_START_TYPE';
+                break;
+            case self::VAR_START_TYPE:
+                $name = 'VAR_START_TYPE';
+                break;
+            case self::BLOCK_END_TYPE:
+                $name = 'BLOCK_END_TYPE';
+                break;
+            case self::VAR_END_TYPE:
+                $name = 'VAR_END_TYPE';
+                break;
+            case self::NAME_TYPE:
+                $name = 'NAME_TYPE';
+                break;
+            case self::NUMBER_TYPE:
+                $name = 'NUMBER_TYPE';
+                break;
+            case self::STRING_TYPE:
+                $name = 'STRING_TYPE';
+                break;
+            case self::OPERATOR_TYPE:
+                $name = 'OPERATOR_TYPE';
+                break;
+            case self::PUNCTUATION_TYPE:
+                $name = 'PUNCTUATION_TYPE';
+                break;
+            case self::INTERPOLATION_START_TYPE:
+                $name = 'INTERPOLATION_START_TYPE';
+                break;
+            case self::INTERPOLATION_END_TYPE:
+                $name = 'INTERPOLATION_END_TYPE';
+                break;
+            default:
+                throw new LogicException(sprintf('Token of type "%s" does not exist.', $type));
+        }
+
+        return $short ? $name : 'Twig_Token::'.$name;
+    }
+
+    /**
+     * Returns the english representation of a given type.
+     *
+     * @param int $type The type as an integer
+     *
+     * @return string The string representation
+     */
+    public static function typeToEnglish($type)
+    {
+        switch ($type) {
+            case self::EOF_TYPE:
+                return 'end of template';
+            case self::TEXT_TYPE:
+                return 'text';
+            case self::BLOCK_START_TYPE:
+                return 'begin of statement block';
+            case self::VAR_START_TYPE:
+                return 'begin of print statement';
+            case self::BLOCK_END_TYPE:
+                return 'end of statement block';
+            case self::VAR_END_TYPE:
+                return 'end of print statement';
+            case self::NAME_TYPE:
+                return 'name';
+            case self::NUMBER_TYPE:
+                return 'number';
+            case self::STRING_TYPE:
+                return 'string';
+            case self::OPERATOR_TYPE:
+                return 'operator';
+            case self::PUNCTUATION_TYPE:
+                return 'punctuation';
+            case self::INTERPOLATION_START_TYPE:
+                return 'begin of string interpolation';
+            case self::INTERPOLATION_END_TYPE:
+                return 'end of string interpolation';
+            default:
+                throw new LogicException(sprintf('Token of type "%s" does not exist.', $type));
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Token.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/AutoEscape.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/AutoEscape.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/AutoEscape.php	(revision 2)
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Marks a section of a template to be escaped or not.
+ *
+ * <pre>
+ * {% autoescape true %}
+ *   Everything will be automatically escaped in this block
+ * {% endautoescape %}
+ *
+ * {% autoescape false %}
+ *   Everything will be outputed as is in this block
+ * {% endautoescape %}
+ *
+ * {% autoescape true js %}
+ *   Everything will be automatically escaped in this block
+ *   using the js escaping strategy
+ * {% endautoescape %}
+ * </pre>
+ */
+class Twig_TokenParser_AutoEscape extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $stream = $this->parser->getStream();
+
+        if ($stream->test(Twig_Token::BLOCK_END_TYPE)) {
+            $value = 'html';
+        } else {
+            $expr = $this->parser->getExpressionParser()->parseExpression();
+            if (!$expr instanceof Twig_Node_Expression_Constant) {
+                throw new Twig_Error_Syntax('An escaping strategy must be a string or a bool.', $stream->getCurrent()->getLine(), $stream->getFilename());
+            }
+            $value = $expr->getAttribute('value');
+
+            $compat = true === $value || false === $value;
+
+            if (true === $value) {
+                $value = 'html';
+            }
+
+            if ($compat && $stream->test(Twig_Token::NAME_TYPE)) {
+                @trigger_error('Using the autoescape tag with "true" or "false" before the strategy name is deprecated since version 1.21.', E_USER_DEPRECATED);
+
+                if (false === $value) {
+                    throw new Twig_Error_Syntax('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getFilename());
+                }
+
+                $value = $stream->next()->getValue();
+            }
+        }
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_AutoEscape($value, $body, $lineno, $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endautoescape');
+    }
+
+    public function getTag()
+    {
+        return 'autoescape';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/AutoEscape.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Block.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Block.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Block.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Marks a section of a template as being reusable.
+ *
+ * <pre>
+ *  {% block head %}
+ *    <link rel="stylesheet" href="style.css" />
+ *    <title>{% block title %}{% endblock %} - My Webpage</title>
+ *  {% endblock %}
+ * </pre>
+ */
+class Twig_TokenParser_Block extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $stream = $this->parser->getStream();
+        $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+        if ($this->parser->hasBlock($name)) {
+            throw new Twig_Error_Syntax(sprintf("The block '%s' has already been defined line %d.", $name, $this->parser->getBlock($name)->getLine()), $stream->getCurrent()->getLine(), $stream->getFilename());
+        }
+        $this->parser->setBlock($name, $block = new Twig_Node_Block($name, new Twig_Node(array()), $lineno));
+        $this->parser->pushLocalScope();
+        $this->parser->pushBlockStack($name);
+
+        if ($stream->nextIf(Twig_Token::BLOCK_END_TYPE)) {
+            $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+            if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) {
+                $value = $token->getValue();
+
+                if ($value != $name) {
+                    throw new Twig_Error_Syntax(sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getFilename());
+                }
+            }
+        } else {
+            $body = new Twig_Node(array(
+                new Twig_Node_Print($this->parser->getExpressionParser()->parseExpression(), $lineno),
+            ));
+        }
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $block->setNode('body', $body);
+        $this->parser->popBlockStack();
+        $this->parser->popLocalScope();
+
+        return new Twig_Node_BlockReference($name, $lineno, $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endblock');
+    }
+
+    public function getTag()
+    {
+        return 'block';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Block.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Do.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Do.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Do.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Evaluates an expression, discarding the returned value.
+ */
+class Twig_TokenParser_Do extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $expr = $this->parser->getExpressionParser()->parseExpression();
+
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_Do($expr, $token->getLine(), $this->getTag());
+    }
+
+    public function getTag()
+    {
+        return 'do';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Do.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Embed.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Embed.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Embed.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2012 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Embeds a template.
+ */
+class Twig_TokenParser_Embed extends Twig_TokenParser_Include
+{
+    public function parse(Twig_Token $token)
+    {
+        $stream = $this->parser->getStream();
+
+        $parent = $this->parser->getExpressionParser()->parseExpression();
+
+        list($variables, $only, $ignoreMissing) = $this->parseArguments();
+
+        // inject a fake parent to make the parent() function work
+        $stream->injectTokens(array(
+            new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', $token->getLine()),
+            new Twig_Token(Twig_Token::NAME_TYPE, 'extends', $token->getLine()),
+            new Twig_Token(Twig_Token::STRING_TYPE, '__parent__', $token->getLine()),
+            new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', $token->getLine()),
+        ));
+
+        $module = $this->parser->parse($stream, array($this, 'decideBlockEnd'), true);
+
+        // override the parent with the correct one
+        $module->setNode('parent', $parent);
+
+        $this->parser->embedTemplate($module);
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_Embed($module->getAttribute('filename'), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endembed');
+    }
+
+    public function getTag()
+    {
+        return 'embed';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Embed.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Extends.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Extends.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Extends.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Extends a template by another one.
+ *
+ * <pre>
+ *  {% extends "base.html" %}
+ * </pre>
+ */
+class Twig_TokenParser_Extends extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        if (!$this->parser->isMainScope()) {
+            throw new Twig_Error_Syntax('Cannot extend from a block.', $token->getLine(), $this->parser->getFilename());
+        }
+
+        if (null !== $this->parser->getParent()) {
+            throw new Twig_Error_Syntax('Multiple extends tags are forbidden.', $token->getLine(), $this->parser->getFilename());
+        }
+        $this->parser->setParent($this->parser->getExpressionParser()->parseExpression());
+
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+    }
+
+    public function getTag()
+    {
+        return 'extends';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Extends.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Filter.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Filter.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Filter.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Filters a section of a template by applying filters.
+ *
+ * <pre>
+ * {% filter upper %}
+ *  This text becomes uppercase
+ * {% endfilter %}
+ * </pre>
+ */
+class Twig_TokenParser_Filter extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $name = $this->parser->getVarName();
+        $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), true, $token->getLine(), $this->getTag());
+
+        $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag());
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $block = new Twig_Node_Block($name, $body, $token->getLine());
+        $this->parser->setBlock($name, $block);
+
+        return new Twig_Node_Print($filter, $token->getLine(), $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endfilter');
+    }
+
+    public function getTag()
+    {
+        return 'filter';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Filter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Flush.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Flush.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Flush.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Flushes the output to the client.
+ *
+ * @see flush()
+ */
+class Twig_TokenParser_Flush extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_Flush($token->getLine(), $this->getTag());
+    }
+
+    public function getTag()
+    {
+        return 'flush';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Flush.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/For.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/For.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/For.php	(revision 2)
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Loops over each item of a sequence.
+ *
+ * <pre>
+ * <ul>
+ *  {% for user in users %}
+ *    <li>{{ user.username|e }}</li>
+ *  {% endfor %}
+ * </ul>
+ * </pre>
+ */
+class Twig_TokenParser_For extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $stream = $this->parser->getStream();
+        $targets = $this->parser->getExpressionParser()->parseAssignmentExpression();
+        $stream->expect(Twig_Token::OPERATOR_TYPE, 'in');
+        $seq = $this->parser->getExpressionParser()->parseExpression();
+
+        $ifexpr = null;
+        if ($stream->nextIf(Twig_Token::NAME_TYPE, 'if')) {
+            $ifexpr = $this->parser->getExpressionParser()->parseExpression();
+        }
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideForFork'));
+        if ($stream->next()->getValue() == 'else') {
+            $stream->expect(Twig_Token::BLOCK_END_TYPE);
+            $else = $this->parser->subparse(array($this, 'decideForEnd'), true);
+        } else {
+            $else = null;
+        }
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        if (count($targets) > 1) {
+            $keyTarget = $targets->getNode(0);
+            $keyTarget = new Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getLine());
+            $valueTarget = $targets->getNode(1);
+            $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
+        } else {
+            $keyTarget = new Twig_Node_Expression_AssignName('_key', $lineno);
+            $valueTarget = $targets->getNode(0);
+            $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
+        }
+
+        if ($ifexpr) {
+            $this->checkLoopUsageCondition($stream, $ifexpr);
+            $this->checkLoopUsageBody($stream, $body);
+        }
+
+        return new Twig_Node_For($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, $lineno, $this->getTag());
+    }
+
+    public function decideForFork(Twig_Token $token)
+    {
+        return $token->test(array('else', 'endfor'));
+    }
+
+    public function decideForEnd(Twig_Token $token)
+    {
+        return $token->test('endfor');
+    }
+
+    // the loop variable cannot be used in the condition
+    protected function checkLoopUsageCondition(Twig_TokenStream $stream, Twig_NodeInterface $node)
+    {
+        if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) {
+            throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition.', $node->getLine(), $stream->getFilename());
+        }
+
+        foreach ($node as $n) {
+            if (!$n) {
+                continue;
+            }
+
+            $this->checkLoopUsageCondition($stream, $n);
+        }
+    }
+
+    // check usage of non-defined loop-items
+    // it does not catch all problems (for instance when a for is included into another or when the variable is used in an include)
+    protected function checkLoopUsageBody(Twig_TokenStream $stream, Twig_NodeInterface $node)
+    {
+        if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) {
+            $attribute = $node->getNode('attribute');
+            if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) {
+                throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition.', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename());
+            }
+        }
+
+        // should check for parent.loop.XXX usage
+        if ($node instanceof Twig_Node_For) {
+            return;
+        }
+
+        foreach ($node as $n) {
+            if (!$n) {
+                continue;
+            }
+
+            $this->checkLoopUsageBody($stream, $n);
+        }
+    }
+
+    public function getTag()
+    {
+        return 'for';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/For.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/From.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/From.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/From.php	(revision 2)
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Imports macros.
+ *
+ * <pre>
+ *   {% from 'forms.html' import forms %}
+ * </pre>
+ */
+class Twig_TokenParser_From extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $macro = $this->parser->getExpressionParser()->parseExpression();
+        $stream = $this->parser->getStream();
+        $stream->expect('import');
+
+        $targets = array();
+        do {
+            $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+
+            $alias = $name;
+            if ($stream->nextIf('as')) {
+                $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+            }
+
+            $targets[$name] = $alias;
+
+            if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
+                break;
+            }
+        } while (true);
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag());
+
+        foreach ($targets as $name => $alias) {
+            if ($this->parser->isReservedMacroName($name)) {
+                throw new Twig_Error_Syntax(sprintf('"%s" cannot be an imported macro as it is a reserved keyword.', $name), $token->getLine(), $stream->getFilename());
+            }
+
+            $this->parser->addImportedSymbol('function', $alias, 'get'.$name, $node->getNode('var'));
+        }
+
+        return $node;
+    }
+
+    public function getTag()
+    {
+        return 'from';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/From.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/If.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/If.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/If.php	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Tests a condition.
+ *
+ * <pre>
+ * {% if users %}
+ *  <ul>
+ *    {% for user in users %}
+ *      <li>{{ user.username|e }}</li>
+ *    {% endfor %}
+ *  </ul>
+ * {% endif %}
+ * </pre>
+ */
+class Twig_TokenParser_If extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $expr = $this->parser->getExpressionParser()->parseExpression();
+        $stream = $this->parser->getStream();
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideIfFork'));
+        $tests = array($expr, $body);
+        $else = null;
+
+        $end = false;
+        while (!$end) {
+            switch ($stream->next()->getValue()) {
+                case 'else':
+                    $stream->expect(Twig_Token::BLOCK_END_TYPE);
+                    $else = $this->parser->subparse(array($this, 'decideIfEnd'));
+                    break;
+
+                case 'elseif':
+                    $expr = $this->parser->getExpressionParser()->parseExpression();
+                    $stream->expect(Twig_Token::BLOCK_END_TYPE);
+                    $body = $this->parser->subparse(array($this, 'decideIfFork'));
+                    $tests[] = $expr;
+                    $tests[] = $body;
+                    break;
+
+                case 'endif':
+                    $end = true;
+                    break;
+
+                default:
+                    throw new Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getFilename());
+            }
+        }
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_If(new Twig_Node($tests), $else, $lineno, $this->getTag());
+    }
+
+    public function decideIfFork(Twig_Token $token)
+    {
+        return $token->test(array('elseif', 'else', 'endif'));
+    }
+
+    public function decideIfEnd(Twig_Token $token)
+    {
+        return $token->test(array('endif'));
+    }
+
+    public function getTag()
+    {
+        return 'if';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/If.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Import.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Import.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Import.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Imports macros.
+ *
+ * <pre>
+ *   {% import 'forms.html' as forms %}
+ * </pre>
+ */
+class Twig_TokenParser_Import extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $macro = $this->parser->getExpressionParser()->parseExpression();
+        $this->parser->getStream()->expect('as');
+        $var = new Twig_Node_Expression_AssignName($this->parser->getStream()->expect(Twig_Token::NAME_TYPE)->getValue(), $token->getLine());
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $this->parser->addImportedSymbol('template', $var->getAttribute('name'));
+
+        return new Twig_Node_Import($macro, $var, $token->getLine(), $this->getTag());
+    }
+
+    public function getTag()
+    {
+        return 'import';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Import.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Include.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Include.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Include.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Includes a template.
+ *
+ * <pre>
+ *   {% include 'header.html' %}
+ *     Body
+ *   {% include 'footer.html' %}
+ * </pre>
+ */
+class Twig_TokenParser_Include extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $expr = $this->parser->getExpressionParser()->parseExpression();
+
+        list($variables, $only, $ignoreMissing) = $this->parseArguments();
+
+        return new Twig_Node_Include($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag());
+    }
+
+    protected function parseArguments()
+    {
+        $stream = $this->parser->getStream();
+
+        $ignoreMissing = false;
+        if ($stream->nextIf(Twig_Token::NAME_TYPE, 'ignore')) {
+            $stream->expect(Twig_Token::NAME_TYPE, 'missing');
+
+            $ignoreMissing = true;
+        }
+
+        $variables = null;
+        if ($stream->nextIf(Twig_Token::NAME_TYPE, 'with')) {
+            $variables = $this->parser->getExpressionParser()->parseExpression();
+        }
+
+        $only = false;
+        if ($stream->nextIf(Twig_Token::NAME_TYPE, 'only')) {
+            $only = true;
+        }
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return array($variables, $only, $ignoreMissing);
+    }
+
+    public function getTag()
+    {
+        return 'include';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Include.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Macro.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Macro.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Macro.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Defines a macro.
+ *
+ * <pre>
+ * {% macro input(name, value, type, size) %}
+ *    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
+ * {% endmacro %}
+ * </pre>
+ */
+class Twig_TokenParser_Macro extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $stream = $this->parser->getStream();
+        $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+
+        $arguments = $this->parser->getExpressionParser()->parseArguments(true, true);
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+        $this->parser->pushLocalScope();
+        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+        if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) {
+            $value = $token->getValue();
+
+            if ($value != $name) {
+                throw new Twig_Error_Syntax(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getFilename());
+            }
+        }
+        $this->parser->popLocalScope();
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $this->parser->setMacro($name, new Twig_Node_Macro($name, new Twig_Node_Body(array($body)), $arguments, $lineno, $this->getTag()));
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endmacro');
+    }
+
+    public function getTag()
+    {
+        return 'macro';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Macro.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Sandbox.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Sandbox.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Sandbox.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Marks a section of a template as untrusted code that must be evaluated in the sandbox mode.
+ *
+ * <pre>
+ * {% sandbox %}
+ *     {% include 'user.html' %}
+ * {% endsandbox %}
+ * </pre>
+ *
+ * @see http://www.twig-project.org/doc/api.html#sandbox-extension for details
+ */
+class Twig_TokenParser_Sandbox extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        // in a sandbox tag, only include tags are allowed
+        if (!$body instanceof Twig_Node_Include) {
+            foreach ($body as $node) {
+                if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) {
+                    continue;
+                }
+
+                if (!$node instanceof Twig_Node_Include) {
+                    throw new Twig_Error_Syntax('Only "include" tags are allowed within a "sandbox" section.', $node->getLine(), $this->parser->getFilename());
+                }
+            }
+        }
+
+        return new Twig_Node_Sandbox($body, $token->getLine(), $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endsandbox');
+    }
+
+    public function getTag()
+    {
+        return 'sandbox';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Sandbox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Set.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Set.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Set.php	(revision 2)
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Defines a variable.
+ *
+ * <pre>
+ *  {% set foo = 'foo' %}
+ *
+ *  {% set foo = [1, 2] %}
+ *
+ *  {% set foo = {'foo': 'bar'} %}
+ *
+ *  {% set foo = 'foo' ~ 'bar' %}
+ *
+ *  {% set foo, bar = 'foo', 'bar' %}
+ *
+ *  {% set foo %}Some content{% endset %}
+ * </pre>
+ */
+class Twig_TokenParser_Set extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+        $stream = $this->parser->getStream();
+        $names = $this->parser->getExpressionParser()->parseAssignmentExpression();
+
+        $capture = false;
+        if ($stream->nextIf(Twig_Token::OPERATOR_TYPE, '=')) {
+            $values = $this->parser->getExpressionParser()->parseMultitargetExpression();
+
+            $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+            if (count($names) !== count($values)) {
+                throw new Twig_Error_Syntax('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getFilename());
+            }
+        } else {
+            $capture = true;
+
+            if (count($names) > 1) {
+                throw new Twig_Error_Syntax('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getFilename());
+            }
+
+            $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+            $values = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+            $stream->expect(Twig_Token::BLOCK_END_TYPE);
+        }
+
+        return new Twig_Node_Set($capture, $names, $values, $lineno, $this->getTag());
+    }
+
+    public function decideBlockEnd(Twig_Token $token)
+    {
+        return $token->test('endset');
+    }
+
+    public function getTag()
+    {
+        return 'set';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Set.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Spaceless.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Spaceless.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Spaceless.php	(revision 2)
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Remove whitespaces between HTML tags.
+ *
+ * <pre>
+ * {% spaceless %}
+ *      <div>
+ *          <strong>foo</strong>
+ *      </div>
+ * {% endspaceless %}
+ *
+ * {# output will be <div><strong>foo</strong></div> #}
+ * </pre>
+ */
+class Twig_TokenParser_Spaceless extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $lineno = $token->getLine();
+
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideSpacelessEnd'), true);
+        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+        return new Twig_Node_Spaceless($body, $lineno, $this->getTag());
+    }
+
+    public function decideSpacelessEnd(Twig_Token $token)
+    {
+        return $token->test('endspaceless');
+    }
+
+    public function getTag()
+    {
+        return 'spaceless';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Spaceless.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Use.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser/Use.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser/Use.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Imports blocks defined in another template into the current template.
+ *
+ * <pre>
+ * {% extends "base.html" %}
+ *
+ * {% use "blocks.html" %}
+ *
+ * {% block title %}{% endblock %}
+ * {% block content %}{% endblock %}
+ * </pre>
+ *
+ * @see http://www.twig-project.org/doc/templates.html#horizontal-reuse for details.
+ */
+class Twig_TokenParser_Use extends Twig_TokenParser
+{
+    public function parse(Twig_Token $token)
+    {
+        $template = $this->parser->getExpressionParser()->parseExpression();
+        $stream = $this->parser->getStream();
+
+        if (!$template instanceof Twig_Node_Expression_Constant) {
+            throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getFilename());
+        }
+
+        $targets = array();
+        if ($stream->nextIf('with')) {
+            do {
+                $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+
+                $alias = $name;
+                if ($stream->nextIf('as')) {
+                    $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
+                }
+
+                $targets[$name] = new Twig_Node_Expression_Constant($alias, -1);
+
+                if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
+                    break;
+                }
+            } while (true);
+        }
+
+        $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+        $this->parser->addTrait(new Twig_Node(array('template' => $template, 'targets' => new Twig_Node($targets))));
+    }
+
+    public function getTag()
+    {
+        return 'use';
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser/Use.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParser.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParser.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParser.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Base class for all token parsers.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+abstract class Twig_TokenParser implements Twig_TokenParserInterface
+{
+    /**
+     * @var Twig_Parser
+     */
+    protected $parser;
+
+    /**
+     * Sets the parser associated with this token parser.
+     *
+     * @param Twig_Parser $parser A Twig_Parser instance
+     */
+    public function setParser(Twig_Parser $parser)
+    {
+        $this->parser = $parser;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParser.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParserBroker.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParserBroker.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParserBroker.php	(revision 2)
@@ -0,0 +1,142 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ * (c) 2010 Arnaud Le Blanc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Default implementation of a token parser broker.
+ *
+ * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+class Twig_TokenParserBroker implements Twig_TokenParserBrokerInterface
+{
+    protected $parser;
+    protected $parsers = array();
+    protected $brokers = array();
+
+    /**
+     * Constructor.
+     *
+     * @param array|Traversable $parsers                 A Traversable of Twig_TokenParserInterface instances
+     * @param array|Traversable $brokers                 A Traversable of Twig_TokenParserBrokerInterface instances
+     * @param bool              $triggerDeprecationError
+     */
+    public function __construct($parsers = array(), $brokers = array(), $triggerDeprecationError = true)
+    {
+        if ($triggerDeprecationError) {
+            @trigger_error('The '.__CLASS__.' class is deprecated since version 1.12 and will be removed in 2.0.', E_USER_DEPRECATED);
+        }
+
+        foreach ($parsers as $parser) {
+            if (!$parser instanceof Twig_TokenParserInterface) {
+                throw new LogicException('$parsers must a an array of Twig_TokenParserInterface.');
+            }
+            $this->parsers[$parser->getTag()] = $parser;
+        }
+        foreach ($brokers as $broker) {
+            if (!$broker instanceof Twig_TokenParserBrokerInterface) {
+                throw new LogicException('$brokers must a an array of Twig_TokenParserBrokerInterface.');
+            }
+            $this->brokers[] = $broker;
+        }
+    }
+
+    /**
+     * Adds a TokenParser.
+     *
+     * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance
+     */
+    public function addTokenParser(Twig_TokenParserInterface $parser)
+    {
+        $this->parsers[$parser->getTag()] = $parser;
+    }
+
+    /**
+     * Removes a TokenParser.
+     *
+     * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance
+     */
+    public function removeTokenParser(Twig_TokenParserInterface $parser)
+    {
+        $name = $parser->getTag();
+        if (isset($this->parsers[$name]) && $parser === $this->parsers[$name]) {
+            unset($this->parsers[$name]);
+        }
+    }
+
+    /**
+     * Adds a TokenParserBroker.
+     *
+     * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance
+     */
+    public function addTokenParserBroker(Twig_TokenParserBroker $broker)
+    {
+        $this->brokers[] = $broker;
+    }
+
+    /**
+     * Removes a TokenParserBroker.
+     *
+     * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance
+     */
+    public function removeTokenParserBroker(Twig_TokenParserBroker $broker)
+    {
+        if (false !== $pos = array_search($broker, $this->brokers)) {
+            unset($this->brokers[$pos]);
+        }
+    }
+
+    /**
+     * Gets a suitable TokenParser for a tag.
+     *
+     * First looks in parsers, then in brokers.
+     *
+     * @param string $tag A tag name
+     *
+     * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found
+     */
+    public function getTokenParser($tag)
+    {
+        if (isset($this->parsers[$tag])) {
+            return $this->parsers[$tag];
+        }
+        $broker = end($this->brokers);
+        while (false !== $broker) {
+            $parser = $broker->getTokenParser($tag);
+            if (null !== $parser) {
+                return $parser;
+            }
+            $broker = prev($this->brokers);
+        }
+    }
+
+    public function getParsers()
+    {
+        return $this->parsers;
+    }
+
+    public function getParser()
+    {
+        return $this->parser;
+    }
+
+    public function setParser(Twig_ParserInterface $parser)
+    {
+        $this->parser = $parser;
+        foreach ($this->parsers as $tokenParser) {
+            $tokenParser->setParser($parser);
+        }
+        foreach ($this->brokers as $broker) {
+            $broker->setParser($parser);
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParserBroker.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParserBrokerInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParserBrokerInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParserBrokerInterface.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ * (c) 2010 Arnaud Le Blanc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by token parser brokers.
+ *
+ * Token parser brokers allows to implement custom logic in the process of resolving a token parser for a given tag name.
+ *
+ * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
+ *
+ * @deprecated since 1.12 (to be removed in 2.0)
+ */
+interface Twig_TokenParserBrokerInterface
+{
+    /**
+     * Gets a TokenParser suitable for a tag.
+     *
+     * @param string $tag A tag name
+     *
+     * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found
+     */
+    public function getTokenParser($tag);
+
+    /**
+     * Calls Twig_TokenParserInterface::setParser on all parsers the implementation knows of.
+     *
+     * @param Twig_ParserInterface $parser A Twig_ParserInterface interface
+     */
+    public function setParser(Twig_ParserInterface $parser);
+
+    /**
+     * Gets the Twig_ParserInterface.
+     *
+     * @return null|Twig_ParserInterface A Twig_ParserInterface instance or null
+     */
+    public function getParser();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParserBrokerInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenParserInterface.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenParserInterface.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenParserInterface.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Interface implemented by token parsers.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface Twig_TokenParserInterface
+{
+    /**
+     * Sets the parser associated with this token parser.
+     *
+     * @param Twig_Parser $parser A Twig_Parser instance
+     */
+    public function setParser(Twig_Parser $parser);
+
+    /**
+     * Parses a token and returns a node.
+     *
+     * @param Twig_Token $token A Twig_Token instance
+     *
+     * @return Twig_NodeInterface A Twig_NodeInterface instance
+     *
+     * @throws Twig_Error_Syntax
+     */
+    public function parse(Twig_Token $token);
+
+    /**
+     * Gets the tag name associated with this token parser.
+     *
+     * @return string The tag name
+     */
+    public function getTag();
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenParserInterface.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/TokenStream.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/TokenStream.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/TokenStream.php	(revision 2)
@@ -0,0 +1,155 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ * (c) 2009 Armin Ronacher
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a token stream.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_TokenStream
+{
+    protected $tokens;
+    protected $current = 0;
+    protected $filename;
+
+    /**
+     * Constructor.
+     *
+     * @param array  $tokens   An array of tokens
+     * @param string $filename The name of the filename which tokens are associated with
+     */
+    public function __construct(array $tokens, $filename = null)
+    {
+        $this->tokens = $tokens;
+        $this->filename = $filename;
+    }
+
+    /**
+     * Returns a string representation of the token stream.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return implode("\n", $this->tokens);
+    }
+
+    public function injectTokens(array $tokens)
+    {
+        $this->tokens = array_merge(array_slice($this->tokens, 0, $this->current), $tokens, array_slice($this->tokens, $this->current));
+    }
+
+    /**
+     * Sets the pointer to the next token and returns the old one.
+     *
+     * @return Twig_Token
+     */
+    public function next()
+    {
+        if (!isset($this->tokens[++$this->current])) {
+            throw new Twig_Error_Syntax('Unexpected end of template.', $this->tokens[$this->current - 1]->getLine(), $this->filename);
+        }
+
+        return $this->tokens[$this->current - 1];
+    }
+
+    /**
+     * Tests a token, sets the pointer to the next one and returns it or throws a syntax error.
+     *
+     * @return Twig_Token|null The next token if the condition is true, null otherwise
+     */
+    public function nextIf($primary, $secondary = null)
+    {
+        if ($this->tokens[$this->current]->test($primary, $secondary)) {
+            return $this->next();
+        }
+    }
+
+    /**
+     * Tests a token and returns it or throws a syntax error.
+     *
+     * @return Twig_Token
+     */
+    public function expect($type, $value = null, $message = null)
+    {
+        $token = $this->tokens[$this->current];
+        if (!$token->test($type, $value)) {
+            $line = $token->getLine();
+            throw new Twig_Error_Syntax(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s).',
+                $message ? $message.'. ' : '',
+                Twig_Token::typeToEnglish($token->getType()), $token->getValue(),
+                Twig_Token::typeToEnglish($type), $value ? sprintf(' with value "%s"', $value) : ''),
+                $line,
+                $this->filename
+            );
+        }
+        $this->next();
+
+        return $token;
+    }
+
+    /**
+     * Looks at the next token.
+     *
+     * @param int $number
+     *
+     * @return Twig_Token
+     */
+    public function look($number = 1)
+    {
+        if (!isset($this->tokens[$this->current + $number])) {
+            throw new Twig_Error_Syntax('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->filename);
+        }
+
+        return $this->tokens[$this->current + $number];
+    }
+
+    /**
+     * Tests the current token.
+     *
+     * @return bool
+     */
+    public function test($primary, $secondary = null)
+    {
+        return $this->tokens[$this->current]->test($primary, $secondary);
+    }
+
+    /**
+     * Checks if end of stream was reached.
+     *
+     * @return bool
+     */
+    public function isEOF()
+    {
+        return $this->tokens[$this->current]->getType() === Twig_Token::EOF_TYPE;
+    }
+
+    /**
+     * Gets the current token.
+     *
+     * @return Twig_Token
+     */
+    public function getCurrent()
+    {
+        return $this->tokens[$this->current];
+    }
+
+    /**
+     * Gets the filename associated with this stream.
+     *
+     * @return string
+     */
+    public function getFilename()
+    {
+        return $this->filename;
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/TokenStream.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Util/DeprecationCollector.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Util/DeprecationCollector.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Util/DeprecationCollector.php	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Util_DeprecationCollector
+{
+    private $twig;
+    private $deprecations;
+
+    public function __construct(Twig_Environment $twig)
+    {
+        $this->twig = $twig;
+    }
+
+    /**
+     * Returns deprecations for templates contained in a directory.
+     *
+     * @param string $dir A directory where templates are stored
+     * @param string $ext Limit the loaded templates by extension
+     *
+     * @return array() An array of deprecations
+     */
+    public function collectDir($dir, $ext = '.twig')
+    {
+        $iterator = new RegexIterator(
+            new RecursiveIteratorIterator(
+                new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY
+            ), '{'.preg_quote($ext).'$}'
+        );
+
+        return $this->collect(new Twig_Util_TemplateDirIterator($iterator));
+    }
+
+    /**
+     * Returns deprecations for passed templates.
+     *
+     * @param Iterator $iterator An iterator of templates (where keys are template names and values the contents of the template)
+     *
+     * @return array() An array of deprecations
+     */
+    public function collect(Iterator $iterator)
+    {
+        $this->deprecations = array();
+
+        set_error_handler(array($this, 'errorHandler'));
+
+        foreach ($iterator as $name => $contents) {
+            try {
+                $this->twig->parse($this->twig->tokenize($contents, $name));
+            } catch (Twig_Error_Syntax $e) {
+                // ignore templates containing syntax errors
+            }
+        }
+
+        restore_error_handler();
+
+        $deprecations = $this->deprecations;
+        $this->deprecations = array();
+
+        return $deprecations;
+    }
+
+    /**
+     * @internal
+     */
+    public function errorHandler($type, $msg)
+    {
+        if (E_USER_DEPRECATED === $type) {
+            $this->deprecations[] = $msg;
+        }
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Util/DeprecationCollector.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/Sensio/Twig/lib/Twig/Util/TemplateDirIterator.php
===================================================================
--- trunk/include/Sensio/Twig/lib/Twig/Util/TemplateDirIterator.php	(nonexistent)
+++ trunk/include/Sensio/Twig/lib/Twig/Util/TemplateDirIterator.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Util_TemplateDirIterator extends IteratorIterator
+{
+    public function current()
+    {
+        return file_get_contents(parent::current());
+    }
+
+    public function key()
+    {
+        return (string) parent::key();
+    }
+}

Property changes on: trunk/include/Sensio/Twig/lib/Twig/Util/TemplateDirIterator.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_10.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_10.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_11.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_11.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_12.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_12.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_13.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_13.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_14.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_14.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/bg_15.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/backgrounds/bg_15.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/backgrounds/index.php
===================================================================
--- trunk/include/captcha/backgrounds/index.php	(nonexistent)
+++ trunk/include/captcha/backgrounds/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../index.php");
+
+?>

Property changes on: trunk/include/captcha/backgrounds/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captcha.php
===================================================================
--- trunk/include/captcha/captcha.php	(nonexistent)
+++ trunk/include/captcha/captcha.php	(revision 2)
@@ -0,0 +1,265 @@
+<?php
+/**
+ *
+ * @category        captcha
+ * @package         include
+ * @subpackage
+ * @author          Ryan Djurovich,WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// displays the image or text inside an <iframe>
+if(!function_exists('display_captcha_real')) {
+    function display_captcha_real($kind='image') {
+        $t = time();
+/*
+        $output  = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" ";
+        $output .= "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
+        $output .= "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"";
+        $output .= strtolower(LANGUAGE)."\" lang=\"".strtolower(LANGUAGE)."\">\n";
+        $output .= "\t<head>\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n";
+        $output .= "\t\t<title>captcha</title>\n\t</head>\n\t<body style=\"margin: 0.925em auto;\">\n";
+*/
+        $output  = '
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>captcha</title>
+</head>
+<body style="margin: 0.925em auto;">
+';
+
+        $_SESSION['captcha_time'] = $t;
+        if($kind=='image') {
+            $output .= "\t\t<a title=\"reload\" href=\"".WB_URL."/include/captcha/captcha.php?display_captcha_X986E21=2\">";
+            $output .= "<img style=\"border: none;\" src=\"".WB_URL."/include/captcha/captchas/";
+            $output .= CAPTCHA_TYPE.".php?t=".$t."\" alt=\"Captcha\" /></a>\n";
+        } else {
+        $output .= '
+<h2>error</h2>
+';
+        }
+        $output .= '
+</body>
+</html>
+';
+        echo $output;
+    }
+}
+
+// called from an <iframe>
+if(isset($_GET['display_captcha_X986E21'])) {
+    require('../../config.php');
+    switch(CAPTCHA_TYPE) {
+    case 'calc_image':
+    case 'calc_ttf_image':
+    case 'ttf_image':
+    case 'old_image':
+        display_captcha_real('image');
+        break;
+    }
+    exit(0);
+}
+
+
+// Make sure page cannot be accessed directly
+if(!defined('WB_PATH')) { exit("Cannot access this file directly"); }
+
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+global $MOD_CAPTCHA;
+if(!file_exists(WB_PATH.'/modules/captcha_control/languages/'.LANGUAGE .'.php')) {
+    // no module language file exists for the language set by the user, include default module language file EN.php
+    require_once(WB_PATH.'/modules/captcha_control/languages/EN.php');
+} else {
+    // a module language file exists for the language defined by the user, load it
+    require_once(WB_PATH.'/modules/captcha_control/languages/'.LANGUAGE .'.php');
+}
+
+// output-handler for image-captchas to determine size of image
+if(!function_exists('captcha_header')) {
+    function captcha_header() {
+        header("Expires: Mon, 1 Jan 1990 05:00:00 GMT");
+        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+        header("Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate");
+        header("Pragma: no-cache");
+        header("Content-type: image/png");
+        return;
+    }
+}
+
+// get list of available CAPTCHAS for the dropdown-listbox in admin-tools
+if(extension_loaded('gd') && function_exists('imagepng') && function_exists('imagettftext')) {
+    $useable_captchas = array(
+        'calc_text'=>$MOD_CAPTCHA_CONTROL['CALC_TEXT'],
+        'calc_image'=>$MOD_CAPTCHA_CONTROL['CALC_IMAGE'],
+        'calc_ttf_image'=>$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE'],
+        'ttf_image'=>$MOD_CAPTCHA_CONTROL['TTF_IMAGE'],
+        'old_image'=>$MOD_CAPTCHA_CONTROL['OLD_IMAGE'],
+        'text'=>$MOD_CAPTCHA_CONTROL['TEXT']
+    );
+} elseif(extension_loaded('gd') && function_exists('imagepng')) {
+    $useable_captchas = array(
+        'calc_text'=>$MOD_CAPTCHA_CONTROL['CALC_TEXT'],
+        'calc_image'=>$MOD_CAPTCHA_CONTROL['CALC_IMAGE'],
+        'old_image'=>$MOD_CAPTCHA_CONTROL['OLD_IMAGE'],
+        'text'=>$MOD_CAPTCHA_CONTROL['TEXT']
+    );
+} else {
+    $useable_captchas = array(
+        'calc_text'=>$MOD_CAPTCHA_CONTROL['CALC_TEXT'],
+        'text'=>$MOD_CAPTCHA_CONTROL['TEXT']
+    );
+}
+
+if(!function_exists('call_captcha')) {
+    function call_captcha($action='all', $style='', $sec_id='') {
+        global $MOD_CAPTCHA, $section_id;
+        $t = time();
+        $_SESSION['captcha_time'] = $t;
+
+        // get width and height of captcha image for use in <iframe>
+        switch(CAPTCHA_TYPE) {
+        case 'calc_image':
+            $captcha_width = 185;
+            $captcha_height = 70;
+            break;
+        case 'calc_ttf_image':
+            $captcha_width = 185;
+            $captcha_height = 80;
+            break;
+        case 'ttf_image':
+            $captcha_width = 185;
+            $captcha_height = 80;
+            break;
+        case 'old_image':
+            $captcha_width = 185;
+            $captcha_height = 70;
+            break;
+        default:
+            $captcha_width = 250;
+            $captcha_height = 100;
+        }
+        if($action=='all') {
+            switch(CAPTCHA_TYPE) {
+              case 'text': // text-captcha
+                    ?><div class="captcha_table" style="width: 100%; margin-top: 0.125em;" >
+                      <div class="text_captcha" ><?php include(WB_PATH.'/include/captcha/captchas/'.CAPTCHA_TYPE.'.php'); ?></div>
+                      <div style="width:50%"><input type="text" name="captcha" maxlength="50"  /></div>
+                      <div class="captcha_expl" ><?php echo $MOD_CAPTCHA['VERIFICATION_INFO_QUEST']; ?></div>
+                    </div><?php
+                    break;
+                case 'calc_text': // calculation as text
+                    ?><div class="captcha_table" style="width:100%; margin-top: 0.125em;">
+                    <div class="text_captcha" >
+                        <?php include(WB_PATH.'/include/captcha/captchas/'.CAPTCHA_TYPE.'.php'); ?>
+                    </div>
+                    <div style="width:50%;"><input type="text" name="captcha" maxlength="10" /></div>
+                    <div class="captcha_expl"><?php echo $MOD_CAPTCHA['VERIFICATION_INFO_RES']; ?></div>
+                    </div><?php
+                    break;
+                case 'calc_image': // calculation with image (old captcha)
+                case 'calc_ttf_image': // calculation with varying background and ttf-font
+                  $sIframeUrl = WB_URL . '/include/captcha/captcha.php?display_captcha_X986E21=1&amp;s='.$sec_id;
+                  ?><div class="captcha_table" style="width: 100%; margin-top: 0.125em; ">
+                    <div class="image_captcha" style="width: 50%; max-width: <?php echo $captcha_width+20;?>px; ">
+                        <iframe width="<?php echo $captcha_width; ?>" height="<?php echo $captcha_height;?>" name="captcha_iframe_<?php echo $sec_id;?>" src="<?php echo $sIframeUrl;?>">
+                        </iframe>
+                    </div>
+                    <div style="width: 50%;"><input type="text" name="captcha" maxlength="10" />
+                    <label class="captcha_expl" style="display: block;"><?php echo $MOD_CAPTCHA['VERIFICATION_INFO_RES']; ?></label></div>
+                   </div><?php
+                    break;
+                // normal images
+                case 'ttf_image': // captcha with varying background and ttf-font
+                case 'old_image': // old captcha
+                  $sIframeUrl = WB_URL . '/include/captcha/captcha.php?display_captcha_X986E21=1&amp;s='.$sec_id;
+                  ?><div class="captcha_table" style="width: 100%; margin-top: 0.125em;">
+                    <div class="image_captcha" style="width: 50%; max-width: <?php echo $captcha_width+20;?>px; ">
+                        <iframe width="<?php echo $captcha_width; ?>" height="<?php echo $captcha_height;?>" name="captcha_iframe_<?php echo $sec_id;?>" src="<?php echo $sIframeUrl;?>">
+                        </iframe>
+                    </div>
+                    <div style="width: 50%;"><input type="text" name="captcha" maxlength="10" />
+                    <label class="captcha_expl" style="display: block;"><?php echo $MOD_CAPTCHA['VERIFICATION_INFO_TEXT']; ?></label></div>
+                   </div><?php
+                    break;
+            }
+        } elseif($action=='image') {
+            switch(CAPTCHA_TYPE) {
+                case 'text': // text-captcha
+                case 'calc_text': // calculation as text
+                    echo ($style?"<span $style>":'');
+                    include(WB_PATH.'/include/captcha/captchas/'.CAPTCHA_TYPE.'.php');
+                    echo ($style?'</span>':'');
+                    break;
+                case 'calc_image': // calculation with image (old captcha)
+                case 'calc_ttf_image': // calculation with varying background and ttf-font
+                case 'ttf_image': // captcha with varying background and ttf-font
+                case 'old_image': // old captcha
+                    echo "<img $style src=\"".WB_URL.'/include/captcha/captchas/'.CAPTCHA_TYPE.".php?t=$t&amp;s=$sec_id\" />";
+                    break;
+            }
+        } elseif($action=='image_iframe') {
+            switch(CAPTCHA_TYPE) {
+                case 'text': // text-captcha
+                    echo ($style?"<span $style>":'');
+                    include(WB_PATH.'/include/captcha/captchas/'.CAPTCHA_TYPE.'.php');
+                    echo ($style?'</span>':'');
+                    break;
+                case 'calc_text': // calculation as text
+                    include(WB_PATH.'/include/captcha/captchas/'.CAPTCHA_TYPE.'.php');
+                    break;
+                case 'calc_image': // calculation with image (old captcha)
+                case 'calc_ttf_image': // calculation with varying background and ttf-font
+                case 'ttf_image': // captcha with varying background and ttf-font
+                case 'old_image': // old captcha
+                    ?>
+                    <?php echo "<iframe class=\"captcha_iframe\" width=\"$captcha_width\" height=\"$captcha_height\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\" name=\"captcha_iframe_$sec_id\" src=\"". WB_URL ."/include/captcha/captcha.php?display_captcha_X986E21=1&amp;s=$sec_id"; ?>">
+                    <?php
+                    echo "<img $style alt=\"Captcha\" src=\"".WB_URL.'/include/captcha/captchas/'.CAPTCHA_TYPE.".php?t=$t\" />";
+                    ?></iframe><?php
+                    break;
+            }
+        } elseif($action=='input') {
+            switch(CAPTCHA_TYPE) {
+                case 'text': // text-captcha
+                    echo '<input type="text" name="captcha" '.($style?$style:'style="width:150px;" maxlength="50"').' />';
+                    break;
+                case 'calc_text': // calculation as text
+                case 'calc_image': // calculation with image (old captcha)
+                case 'calc_ttf_image': // calculation with varying background and ttf-font
+                    echo '<input type="text" name="captcha" '.($style?$style:'style="width:20px;" maxlength="10"').' />';
+                    break;
+                case 'ttf_image': // captcha with varying background and ttf-font
+                case 'old_image': // old captcha
+                    echo '<input type="text" name="captcha" '.($style?$style:'style="width:50px;" maxlength="10"').' />';
+                    break;
+            }
+        } elseif($action=='text') {
+            echo ($style?"<span $style>":'');
+            switch(CAPTCHA_TYPE) {
+                case 'text': // text-captcha
+                    echo $MOD_CAPTCHA['VERIFICATION_INFO_QUEST'];
+                    break;
+                case 'calc_text': // calculation as text
+                case 'calc_image': // calculation with image (old captcha)
+                case 'calc_ttf_image': // calculation with varying background and ttf-font
+                    echo $MOD_CAPTCHA['VERIFICATION_INFO_RES'];
+                    break;
+                case 'ttf_image': // captcha with varying background and ttf-font
+                case 'old_image': // old captcha
+                    echo $MOD_CAPTCHA['VERIFICATION_INFO_TEXT'];
+                    break;
+            }
+            echo ($style?'</span>':'');
+        }
+    }
+}

Property changes on: trunk/include/captcha/captcha.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_image.php
===================================================================
--- trunk/include/captcha/captchas/calc_image.php	(nonexistent)
+++ trunk/include/captcha/captchas/calc_image.php	(revision 2)
@@ -0,0 +1,102 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname(dirname((__DIR__)))).'/config.php' ); }
+require_once(WB_PATH.'/include/captcha/captcha.php');
+
+if(!isset($_SESSION['captcha_time']))
+    exit;
+//unset($_SESSION['captcha_time']);
+
+// Captcha
+$sec_id = '';
+if(isset($_GET['s'])) $sec_id = $_GET['s'];
+$_SESSION['captcha'.$sec_id] = '';
+mt_srand((double)microtime()*1000000);
+$n = mt_rand(1,3);
+switch ($n) {
+    case 1:
+        $x = mt_rand(1,9);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x + $y;
+        $cap = "$x+$y"; 
+        break; 
+    case 2:
+        $x = mt_rand(10,20);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x - $y; 
+        $cap = "$x-$y"; 
+        break;
+    case 3:
+        $x = mt_rand(2,10);
+        $y = mt_rand(2,5);
+        $_SESSION['captcha'.$sec_id] = $x * $y; 
+        $cap = "$x*$y"; 
+        break;
+}
+
+// create reload-image
+$reload = ImageCreateFromPNG(WB_PATH.'/include/captcha/reload_120_30.png'); // reload-overlay
+
+$image = imagecreate(120, 30);
+
+$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
+$gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
+$textcolor = imagecolorallocate($image, 0x30, 0x30, 0x30);
+
+for($i = 0; $i < 30; $i++) {
+    $x1 = mt_rand(0,120);
+    $y1 = mt_rand(0,30);
+    $x2 = mt_rand(0,120);
+    $y2 = mt_rand(0,30);
+    imageline($image, $x1, $y1, $x2, $y2 , $gray);  
+}
+
+$Fontfile = ( dirname(__DIR__).'/fonts/LLBd_cond.ttf');
+$angle = 0;
+$ttfsize = 25; // fontsize
+$x =  15;
+$l = strlen($cap);
+for($i = 0; $i < $l; $i++) {
+      $x = $x + mt_rand(10 , 25);
+      $y = mt_rand(18, 23);
+      $angle = mt_rand(-2, 2);
+      $res = imagettftext ($image, $ttfsize, $angle, $x, $y, $textcolor, $Fontfile, substr($cap, $i, 1) );
+//    $fnt = mt_rand(5,7);
+//    imagestring($image, $fnt, $x, $y, substr($cap, $i, 1), $textcolor); 
+}
+
+imagealphablending($reload, TRUE);
+imagesavealpha($reload, TRUE);
+
+// overlay
+imagecopy($reload, $image, 0,0,0,0, 120,40);
+imagedestroy($image);
+$image = $reload;
+
+captcha_header();
+imagepng($image);
+imagedestroy($image);
+

Property changes on: trunk/include/captcha/captchas/calc_image.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/calc_image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_text.php
===================================================================
--- trunk/include/captcha/captchas/calc_text.php	(nonexistent)
+++ trunk/include/captcha/captchas/calc_text.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+if(!file_exists(WB_PATH.'/modules/captcha_control/languages/'.LANGUAGE .'.php')) {
+    // no module language file exists for the language set by the user, include default module language file EN.php
+    require_once(WB_PATH.'/modules/captcha_control/languages/EN.php');
+} else {
+    // a module language file exists for the language defined by the user, load it
+    require_once(WB_PATH.'/modules/captcha_control/languages/'.LANGUAGE .'.php');
+}
+
+$_SESSION['captcha'.$sec_id] = '';
+mt_srand((double)microtime()*1000000);
+$n = mt_rand(1,3);
+switch ($n) {
+    case 1:
+        $x = mt_rand(1,9);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x + $y;
+        $cap = "$x {$MOD_CAPTCHA['ADDITION']} $y"; 
+        break; 
+    case 2:
+        $x = mt_rand(10,20);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x - $y; 
+        $cap = "$x {$MOD_CAPTCHA['SUBTRAKTION']} $y"; 
+        break;
+    case 3:
+        $x = mt_rand(2,10);
+        $y = mt_rand(2,5);
+        $_SESSION['captcha'.$sec_id] = $x * $y; 
+        $cap = "$x {$MOD_CAPTCHA['MULTIPLIKATION']} $y"; 
+        break;
+}
+echo $cap;
+

Property changes on: trunk/include/captcha/captchas/calc_text.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_text.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/calc_text.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_ttf_image.php
===================================================================
--- trunk/include/captcha/captchas/calc_ttf_image.php	(nonexistent)
+++ trunk/include/captcha/captchas/calc_ttf_image.php	(revision 2)
@@ -0,0 +1,149 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname(dirname((__DIR__)))).'/config.php' ); }
+require_once(WB_PATH.'/include/captcha/captcha.php');
+
+if(!isset($_SESSION['captcha_time']))
+    exit;
+//unset($_SESSION['captcha_time']);        // otherwise there can't be 2 captchas on one page!
+
+// get lists of fonts and backgrounds
+require_once(WB_PATH.'/framework/functions.php');
+$t_fonts = file_list(WB_PATH.'/include/captcha/fonts');
+$t_bgs = file_list(WB_PATH.'/include/captcha/backgrounds');
+$fonts = array();
+$bgs = array();
+foreach($t_fonts as $file) { if(preg_match('/\.ttf/',$file)) { $fonts[]=$file; } }
+foreach($t_bgs as $file) { if(preg_match('/\.png/',$file)) { $bgs[]=$file; } }
+
+// Captcha
+$sec_id = '';
+if(isset($_GET['s'])) $sec_id = $_GET['s'];
+$_SESSION['captcha'.$sec_id] = '';
+mt_srand((double)microtime()*1000000);
+$n = mt_rand(1,3);
+switch ($n) {
+    case 1:
+        $x = mt_rand(1,9);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x + $y;
+        $cap = "$x+$y"; 
+        break; 
+    case 2:
+        $x = mt_rand(10,20);
+        $y = mt_rand(1,9);
+        $_SESSION['captcha'.$sec_id] = $x - $y; 
+        $cap = "$x-$y"; 
+        break;
+    case 3:
+        $x = mt_rand(2,10);
+        $y = mt_rand(2,5);
+        $_SESSION['captcha'.$sec_id] = $x * $y; 
+        $cap = "$x*$y"; 
+        break;
+}
+$text = $cap;
+
+// choose a font and background
+$font = $fonts[array_rand($fonts)];
+$bg = $bgs[array_rand($bgs)];
+// get image-dimensions
+list($width, $height, $type, $attr) = getimagesize($bg);
+
+// create reload-image
+$reload = ImageCreateFromPNG(WB_PATH.'/include/captcha/reload_140_40.png'); // reload-overlay
+
+if(mt_rand(0,2)==0) { // 1 out of 3
+
+    // draw each character individualy
+    $image = ImageCreateFromPNG($bg); // background image
+    $grey = mt_rand(0,50);
+    $color = ImageColorAllocate($image, $grey, $grey, $grey); // font-color
+    $ttf = $font;
+    $ttfsize = 25; // fontsize
+    $count = 0;
+    $image_failed = true;
+    $angle = mt_rand(-10,10);
+    $x = mt_rand(20,35);
+    $y = mt_rand($height-10,$height-2);
+    do {
+        for($i=0;$i<strlen($text);$i++) {
+            $res = imagettftext($image, $ttfsize, $angle, $x, $y, $color, $ttf, $text{$i});
+            $angle = mt_rand(-10,10);
+            $x = mt_rand($res[4],$res[4]+10);
+            $y = mt_rand($height-12,$height-7);
+        }
+        if($res[4] > $width) {
+            $image_failed = true;
+        } else {
+            $image_failed = false;
+        }
+        if(++$count > 4) // too many tries! Use the image
+            break;
+    } while($image_failed);
+    
+} else {
+    
+    // draw whole string at once
+    $image_failed = true;
+    $count=0;
+    do {
+        $image = ImageCreateFromPNG($bg); // background image
+        $grey = mt_rand(0,50);
+        $color = ImageColorAllocate($image, $grey, $grey, $grey); // font-color
+        $ttf = $font;
+        $ttfsize = 25; // fontsize
+        $angle = mt_rand(0,5);
+        $x = mt_rand(20,35);
+        $y = mt_rand($height-10,$height-2);
+        $res = imagettftext($image, $ttfsize, $angle, $x, $y, $color, $ttf, $text);
+        // check if text fits into the image
+        if(($res[0]>0 && $res[0]<$width) && ($res[1]>0 && $res[1]<$height) && 
+             ($res[2]>0 && $res[2]<$width) && ($res[3]>0 && $res[3]<$height) && 
+             ($res[4]>0 && $res[4]<$width) && ($res[5]>0 && $res[5]<$height) && 
+             ($res[6]>0 && $res[6]<$width) && ($res[7]>0 && $res[7]<$height)
+        ) {
+            $image_failed = false;
+        }
+        if(++$count > 4) // too many tries! Use the image
+            break;
+    } while($image_failed);
+    
+}
+
+imagealphablending($reload, TRUE);
+imagesavealpha($reload, TRUE);
+
+// overlay
+imagecopy($reload, $image, 0,0,0,0, 140,40);
+imagedestroy($image);
+$image = $reload;
+
+captcha_header();
+ob_start();
+imagepng($image);
+header("Content-Length: ".ob_get_length()); 
+ob_end_flush();
+imagedestroy($image);

Property changes on: trunk/include/captcha/captchas/calc_ttf_image.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/calc_ttf_image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/calc_ttf_image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/captchas/index.php
===================================================================
--- trunk/include/captcha/captchas/index.php	(nonexistent)
+++ trunk/include/captcha/captchas/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/captcha/captchas/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/old_image.php
===================================================================
--- trunk/include/captcha/captchas/old_image.php	(nonexistent)
+++ trunk/include/captcha/captchas/old_image.php	(revision 2)
@@ -0,0 +1,81 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+require_once("../../../config.php");
+require_once(WB_PATH.'/include/captcha/captcha.php');
+
+if(!isset($_SESSION['captcha_time']))
+    exit;
+//unset($_SESSION['captcha_time']);
+
+// Captcha
+srand((double)microtime()*100000);
+$sec_id = '';
+if(isset($_GET['s'])) $sec_id = $_GET['s'];
+$_SESSION['captcha'.$sec_id] = rand(10000,99999);
+
+// create reload-image
+$reload = ImageCreateFromPNG(WB_PATH.'/include/captcha/reload_120_30.png'); // reload-overlay
+
+$w=120;
+$h=30;
+$image = imagecreate($w, $h);
+$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
+$gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
+$darkgray = imagecolorallocate($image, 0x50, 0x50, 0x50);
+
+srand((double)microtime()*1000000);
+for($i = 0; $i < 30; $i++) {
+    $x1 = rand(0,$w);
+    $y1 = rand(0,$h);
+    $x2 = rand(0,$w);
+    $y2 = rand(0,$h);
+    imageline($image, $x1, $y1, $x2, $y2 , $gray);  
+}
+
+$x = 0;
+for($i = 0; $i < 5; $i++) {
+    $fnt = rand(3,5);
+    $x = $x + rand(12 , 20);
+    $y = rand(7 , 12); 
+    imagestring($image, $fnt, $x, $y, substr($_SESSION['captcha'.$sec_id], $i, 1), $darkgray); 
+}
+
+imagealphablending($reload, TRUE);
+imagesavealpha($reload, TRUE);
+
+// overlay
+imagecopy($reload, $image, 0,0,0,0, 120,30);
+imagedestroy($image);
+$image = $reload;
+
+captcha_header();
+ob_start();
+imagepng($image);
+header("Content-Length: ".ob_get_length()); 
+ob_end_flush();
+imagedestroy($image);
+
+?>
\ No newline at end of file

Property changes on: trunk/include/captcha/captchas/old_image.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/old_image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/old_image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/captchas/text.php
===================================================================
--- trunk/include/captcha/captchas/text.php	(nonexistent)
+++ trunk/include/captcha/captchas/text.php	(revision 2)
@@ -0,0 +1,97 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+global $database;
+$name = 'text';
+$file = WB_PATH."/temp/.captcha_$name.php";
+
+srand((double)microtime()*100000);
+$_SESSION['captcha'.$sec_id] = rand(0,99999);
+
+// get questions and answers
+$text_qa='';
+$table = TABLE_PREFIX.'mod_captcha_control';
+if($query = $database->query("SELECT ct_text FROM $table")) {
+    $data = $query->fetchRow();
+    $text_qa = $data['ct_text'];
+}
+$content = explode("\n", $text_qa);
+
+reset($content);
+while($s = current($content)) {
+    // get question
+    $s=trim(rtrim(rtrim($s,"\n"),"\r")); // remove newline
+    if($s=='' OR $s{0}!='?') {
+        next($content);
+        continue;
+    }
+    if(isset($s{3}) && $s{3}==':') {
+        $lang=substr($s,1,2);
+        $q=substr($s,4);
+    }    else {
+        $lang='XX';
+        $q=substr($s,1);
+        if($q=='') {
+            next($content);
+            continue;
+        }
+    }
+    // get answer
+    $s=next($content);
+    $s=trim(rtrim(rtrim($s,"\n"),"\r")); // remove newline
+    if(isset($s{0}) && $s{0}=='!') {
+        $a=substr($s,1);
+        $qa[$lang][$q]=$a;
+        next($content);
+    }
+}
+if(!isset($qa) || $qa == array()) {
+    echo '<b>Error</b>: no text defined! Enter <b>0</b> to solve this captcha';
+    $_SESSION['captcha'] = '0';
+    return;
+}
+
+// choose language to use
+if(defined('LANGUAGE') && isset($qa[LANGUAGE]))
+    $lang = LANGUAGE;
+else
+    $lang = 'XX';
+if(!isset($qa[$lang])) {
+    echo '<b>Error</b>: no text defined! Enter <b>0</b> to solve this captcha';
+    $_SESSION['captcha'] = '0';
+    return;
+}
+
+// choose random question
+$k = array_rand($qa[$lang]);
+
+$_SESSION['captcha'.$sec_id] = $qa[$lang][$k];
+
+echo $k;
+
+?>

Property changes on: trunk/include/captcha/captchas/text.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/text.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/text.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/captchas/ttf_image.php
===================================================================
--- trunk/include/captcha/captchas/ttf_image.php	(nonexistent)
+++ trunk/include/captcha/captchas/ttf_image.php	(revision 2)
@@ -0,0 +1,142 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+require_once("../../../config.php");
+require_once(WB_PATH.'/include/captcha/captcha.php');
+
+if(!isset($_SESSION['captcha_time']))
+    exit;
+//unset($_SESSION['captcha_time']);
+
+// get lists of fonts and backgrounds
+require_once(WB_PATH.'/framework/functions.php');
+$t_fonts = file_list(WB_PATH.'/include/captcha/fonts');
+$t_bgs = file_list(WB_PATH.'/include/captcha/backgrounds');
+$fonts = array();
+$bgs = array();
+foreach($t_fonts as $file) { if(preg_match('/\.ttf/',$file)) { $fonts[]=$file; } }
+foreach($t_bgs as $file) { if(preg_match('/\.png/',$file)) { $bgs[]=$file; } }
+
+// make random string
+if(!function_exists('randomString')) {
+    function randomString($len) {
+        list($usec, $sec) = explode(' ', microtime());
+        mt_srand((float)$sec + ((float)$usec * 100000));
+        //$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghkmnpqrstuvwxyz23456789";
+        $possible="abdfhkrsvwxz23456789";
+        $str="";
+        while(strlen($str)<$len) {
+            $str.=substr($possible,(mt_rand()%(strlen($possible))),1);
+        }
+        return($str);
+    }
+}
+$text = randomString(5); // number of characters
+
+$sec_id = '';
+if(isset($_GET['s'])) $sec_id = $_GET['s'];
+$_SESSION['captcha'.$sec_id] = $text;
+
+// choose a font and background
+$font = $fonts[array_rand($fonts)];
+$bg = $bgs[array_rand($bgs)];
+// get image-dimensions
+list($width, $height, $type, $attr) = getimagesize($bg);
+
+// create reload-image
+$reload = ImageCreateFromPNG(WB_PATH.'/include/captcha/reload_140_40.png'); // reload-overlay
+
+if(mt_rand(0,2)==0) { // 1 out of 3
+
+    // draw each character individualy
+    $image = ImageCreateFromPNG($bg); // background image
+    $grey = mt_rand(0,50);
+    $color = ImageColorAllocate($image, $grey, $grey, $grey); // font-color
+    $ttf = $font;
+    $ttfsize = 25; // fontsize
+    $count = 0;
+    $image_failed = true;
+    $angle = mt_rand(-15,15);
+    $x = mt_rand(10,25);
+    $y = mt_rand($height-10,$height-2);
+    do {
+        for($i=0;$i<strlen($text);$i++) {
+            $res = imagettftext($image, $ttfsize, $angle, $x, $y, $color, $ttf, $text{$i});
+            $angle = mt_rand(-15,15);
+            $x = mt_rand($res[4],$res[4]+10);
+            $y = mt_rand($height-15,$height-5);
+        }
+        if($res[4] > $width) {
+            $image_failed = true;
+        } else {
+            $image_failed = false;
+        }
+        if(++$count > 4) // too many tries! Use the image
+            break;
+    } while($image_failed);
+    
+} else {
+    
+    // draw whole string at once
+    $image_failed = true;
+    $count=0;
+    do {
+        $image = ImageCreateFromPNG($bg); // background image
+        $grey = mt_rand(0,50);
+        $color = ImageColorAllocate($image, $grey, $grey, $grey); // font-color
+        $ttf = $font;
+        $ttfsize = 25; // fontsize
+        $angle = mt_rand(0,5);
+        $x = mt_rand(5,30);
+        $y = mt_rand($height-10,$height-2);
+        $res = imagettftext($image, $ttfsize, $angle, $x, $y, $color, $ttf, $text);
+        // check if text fits into the image
+        if(($res[0]>0 && $res[0]<$width) && ($res[1]>0 && $res[1]<$height) && 
+             ($res[2]>0 && $res[2]<$width) && ($res[3]>0 && $res[3]<$height) && 
+             ($res[4]>0 && $res[4]<$width) && ($res[5]>0 && $res[5]<$height) && 
+             ($res[6]>0 && $res[6]<$width) && ($res[7]>0 && $res[7]<$height)
+        ) {
+            $image_failed = false;
+        }
+        if(++$count > 4) // too many tries! Use the image
+            break;
+    } while($image_failed);
+    
+}
+
+imagealphablending($reload, TRUE);
+imagesavealpha($reload, TRUE);
+
+// overlay
+imagecopy($reload, $image, 0,0,0,0, 140,40);
+imagedestroy($image);
+$image = $reload;
+
+captcha_header();
+ob_start();
+imagepng($image);
+header("Content-Length: ".ob_get_length()); 
+ob_end_flush();
+imagedestroy($image);

Property changes on: trunk/include/captcha/captchas/ttf_image.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/captchas/ttf_image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/captchas/ttf_image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/fonts/FreeSansWBCaptchaCond.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/FreeSansWBCaptchaCond.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/FreeSerifItalicWBCaptchaCond.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/FreeSerifItalicWBCaptchaCond.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/LLBI.ttf_
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/LLBI.ttf_
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/LLBI_cond.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/LLBI_cond.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/LLBd.ttf_
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/LLBd.ttf_
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/LLBd_cond.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/captcha/fonts/LLBd_cond.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/captcha/fonts/LL_GPL.txt
===================================================================
--- trunk/include/captcha/fonts/LL_GPL.txt	(nonexistent)
+++ trunk/include/captcha/fonts/LL_GPL.txt	(revision 2)
@@ -0,0 +1,343 @@
+		    GNU GENERAL PUBLIC LICENSE (with font exception)
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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.
+
+As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), 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 Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; 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.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
Index: trunk/include/captcha/fonts/LL_LICENCE.txt
===================================================================
--- trunk/include/captcha/fonts/LL_LICENCE.txt	(nonexistent)
+++ trunk/include/captcha/fonts/LL_LICENCE.txt	(revision 2)
@@ -0,0 +1,7 @@
+- Lizenz / Licence -
+
+Unsere Schriften sind frei im Sinne der GPL, d.h. (stark vereinfacht) dass Veränderungen an der Schriftart erlaubt sind unter der Bedingung, dass diese wieder der Öffentlichkeit unter gleicher Lizenz freigegeben werden. Querdenker behaupten oft, dass bei der Verwendung einer GPL-Schrift eingebettet in beispielsweise eine PDF auch diese freigestellt werden müsse. Deshalb gibt es die sogenannte "Font-exception" der GPL (welche diesem Lizenztext hinzugefügt wurde). Weitere Informationen zur GPL (Lizenztext mit Font-Exzeption im Archiv).
+Zusätzlich stehen die Schriften unter der Open Font License (siehe OFL.txt).
+
+Our fonts are free in the sense of the GPL. Changing the font is allowed as long as the derivative work is published under the same licence again. Pedantics keep claiming that the embedded use of GPL-fonts in i.e. PDFs requires the free publication of the PDF as well. This is why our GPL contains the so called "font exception". Further information about the GPL (Licence text with font exception of the archive).
+Additionally our fonts are licensed under the Open Fonts License (See OFL.txt).
\ No newline at end of file
Index: trunk/include/captcha/fonts/LL_OFL.txt
===================================================================
--- trunk/include/captcha/fonts/LL_OFL.txt	(nonexistent)
+++ trunk/include/captcha/fonts/LL_OFL.txt	(revision 2)
@@ -0,0 +1,98 @@
+This Font Software is Copyright (c) 2003-2006, Philipp H. Poll (http://linuxlibertine.sf.net/).
+All Rights Reserved.
+
+"Linux Libertine" is a Reserved Font Name for this Font Software.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.0.
+No modification of the license is permitted, only verbatim copy is allowed.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.0 - 22 November 2005
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of cooperative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide an open
+framework in which fonts may be shared and improved in partnership with
+others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and sold with any software provided that the font
+names of derivative works are changed. The fonts and derivatives,
+however, cannot be released under any other type of license.
+
+DEFINITIONS
+"Font Software" refers to any and all of the following:
+	- font files
+	- data files
+	- source code
+	- build scripts
+	- documentation
+
+"Reserved Font Name" refers to the Font Software name as seen by
+users and any other names as specified after the copyright statement.
+
+"Standard Version" refers to the collection of Font Software
+components as distributed by the Copyright Holder.
+
+"Modified Version" refers to any derivative font software made by
+adding to, deleting, or substituting -- in part or in whole --
+any of the components of the Standard Version, by changing formats
+or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Standard or Modified Versions, may be sold by itself.
+
+2) Standard or Modified Versions of the Font Software may be bundled,
+redistributed and sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s), in part or in whole, unless explicit written permission is
+granted by the Copyright Holder. This restriction applies to all 
+references stored in the Font Software, such as the font menu name and
+other font description fields, which are used to differentiate the
+font from others.
+
+4) The name(s) of the Copyright Holder or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed using this license, and may not be distributed
+under any other license.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
Index: trunk/include/captcha/fonts/LL_Readme
===================================================================
--- trunk/include/captcha/fonts/LL_Readme	(nonexistent)
+++ trunk/include/captcha/fonts/LL_Readme	(revision 2)
@@ -0,0 +1,31 @@
+These fonts (LLBd.ttf and LLBI.ttf, and cond-variants) are derivated from LinuxLibertine-Font for use with website baker's captcha _only_.
+All chars above pos. 127 has been removed!
+Jan. 2008 - thorn
+
+---------------------------------------------------
+
+LOFP - Libertine Open Fonts Project
+
+1. OPEN FONTS PROJECT'S AIMS
+We work on a serif font-family for practical use in documents. This project aims at creating a free alternative to the standard W*ndows Font (T*mes).
+But neveretheless Libertine is not a clone of any common font! It has been developed from scratch and it goes different ways in typography than the Times. Just the useability and the dimensions shall be similar, Libertine should be even better for typical office use! If you want a Times-clone go elsewhere! If you just need reliable and good typography give this font a chance. If you want to know more about the design of Libertine, have a look at our website.
+
+2. LICENSE AND OPENSOURCE
+We publish our fonts under the terms of the GPL (see GPL.txt) and OFL (OFL.txt) 
+-> see also LICENCE.txt!
+The OpenSource-tool Fontforge is used as font editor (see http://fontforge.sf.net).
+
+3. FONT FORMATS TTF VS. OTF
+The font files are available as TTF (TrueType) and OTF (OpenType) fonts. The TTF-Family is called "LinuxLibertine" and the OTF "LinuxLibertine O" so that both types can be installed and used parallely.
+We recommend TTF for most users. OTF is especially useful for Windows users (Hinting) and *.dfont for Mac-Users. The advanced typographic features like ligature substitution and Small Capitals, ... may be availible in the OTF only.
+
+4. HINTING
+The TrueType-hinting is a complex technique and our editor FontForge doesn't support it quite well (but alot better version by version)... Since version 2.7 also the normal TTFs are hinted. If you don't like this, send me a mail. You may also try the OpenTypes (which contain PS-Hintings which are quite good supported by fontforge).
+
+5. DOWNLOAD AND CONTACT
+We publish our fonts at http://linuxlibertine.sf.net.
+
+6. THE UNDERLINED VARIANT
+Some people liked our idea of a real underlined. The advantage of this font is that g, commas, cedillas... are not overprinted by the line anymore. For technical reasons the space is not underlined but you can use the _ instead. In this font it has the width of the space and the line is at hight of the underline. The underlined variant uses an older font outline! Please keep this in mind!
+
+
Index: trunk/include/captcha/fonts/index.php
===================================================================
--- trunk/include/captcha/fonts/index.php	(nonexistent)
+++ trunk/include/captcha/fonts/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../index.php");
+
+?>

Property changes on: trunk/include/captcha/fonts/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/index.php
===================================================================
--- trunk/include/captcha/index.php	(nonexistent)
+++ trunk/include/captcha/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../index.php");
+
+?>

Property changes on: trunk/include/captcha/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/captcha/readme.txt
===================================================================
--- trunk/include/captcha/readme.txt	(nonexistent)
+++ trunk/include/captcha/readme.txt	(revision 2)
@@ -0,0 +1,78 @@
+// $Id: readme.txt 65 2017-03-03 21:38:16Z manu $
+
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+
+One can improve all CAPTCHA-types with varying fonts and backgrounds
+- by adding backgrounds (PNG-images, 140x40 pixels) to backgrounds/
+- and by adding TrueType-fonts to fonts/
+
+
+How to use:
+
+1.)
+put 
+  require_once(WB_PATH.'/include/captcha/captcha.php');
+in your file.
+
+
+2a.)
+put 
+  <?php call_captcha(); ?>
+into your form.
+This will output a table with varying columns (3 or 4) like this example:
+<table class="captcha_table"><tr>
+  <td><img src="http://www.example.org/include/captcha/captchas/ttf.php?t=64241454" alt="Captcha" /></td>
+  <td><input type="text" name="captcha" maxlength="5" style="width:50px" /></td>
+  <td class="captcha_expl">Fill in the result</td>
+</tr></table>
+
+
+2b.)
+If you want to use your own layout, use additional parameters to call_captcha():
+call_captcha('all') will output the whole table as above.
+
+call_captcha('image', $style); will output the <img>-tag for the image only (or the text for an text-style captcha):
+Examples:
+  call_captcha('image', 'style="...; title="captcha"');
+    <img style="...; title="captcha" src="http://www.example.org/include/captcha/captchas/captcha.php?t=46784246" />
+    or
+    <span style="...; title="captcha">4 add 6</span>
+    call_captcha('image');
+    <img src="http://www.example.org/include/captcha/captchas/captcha.php?t=46784246" />
+    or
+    4 add 6
+
+call_captcha('input', $style); will output the input-field:
+  call_captcha('input', 'style"...;"');
+    <input type="text" name="captcha" style="...;" />
+  call_captcha('input');
+    <input type="text" name="captcha" style="width:50px;" maxlength="10" />
+
+call_captcha('text', $style); will output a short "what to do"-text
+  call_captcha('text', 'style="...;"');
+      <span style="...;">Fill in the result</span>
+  call_captcha('text');
+      Fill in the result
+
+
+
+The CAPTCHA-code is allways stored in $_SESSION['captcha'] for verification with user-input.
+The user-input is in $_POST['captcha'] (or maybe $_GET['captcha']).
Index: trunk/include/captcha/reload_120_30.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/reload_120_30.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha/reload_140_40.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/captcha/reload_140_40.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/captcha.php
===================================================================
--- trunk/include/captcha.php	(nonexistent)
+++ trunk/include/captcha.php	(revision 2)
@@ -0,0 +1,83 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/*
+
+Captcha generator
+
+This file generates a captcha image.
+Credits to http://php.webmaster-kit.com/ for the original code.
+
+*/
+
+require_once("../config.php");
+
+if(extension_loaded('gd') AND function_exists('imageCreateFromJpeg') AND isset($_SESSION['captcha'])) {
+    
+    $image = imagecreate(120, 30);
+    
+    $white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
+    $gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
+    $darkgray = imagecolorallocate($image, 0x50, 0x50, 0x50);
+    
+    srand((double)microtime()*1000000);
+    
+    for($i = 0; $i < 30; $i++) {
+        $x1 = rand(0,120);
+        $y1 = rand(0,30);
+        $x2 = rand(0,120);
+        $y2 = rand(0,30);
+        imageline($image, $x1, $y1, $x2, $y2 , $gray);  
+    }
+    
+    $x = 0;
+    for($i = 0; $i < 5; $i++) {
+        $fnt = rand(3,5);
+        $x = $x + rand(12 , 20);
+        $y = rand(7 , 12); 
+        imagestring($image, $fnt, $x, $y, substr($_SESSION['captcha'], $i, 1), $darkgray); 
+    }
+    
+    // start buffering for size determination
+    ob_start();
+    // add no cache headers
+    header("Expires: Mon, 1 Jan 1990 05:00:00 GMT");
+    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+    header("Cache-Control: no-store, no-cache, must-revalidate");
+    header("Cache-Control: post-check=0, pre-check=0", false);
+    header("Pragma: no-cache");
+    header("Content-type: image/png");
+    // Make image
+    imagepng($image);
+    // Fetch length
+    header("Content-Length: " . ob_get_length());
+    // send image and turn off buffering
+    ob_end_flush();
+    // clear memory
+    imagedestroy($image);
+
+}
+
+?>
\ No newline at end of file

Property changes on: trunk/include/captcha.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/editarea/edit_area.css
===================================================================
--- trunk/include/editarea/edit_area.css	(nonexistent)
+++ trunk/include/editarea/edit_area.css	(revision 2)
@@ -0,0 +1,530 @@
+body, html{
+	margin: 0; 
+	padding: 0;
+	height: 100%;
+	border: none;
+	overflow: hidden;
+	background-color: #FFF;
+}
+
+body, html, table, form, textarea{
+	font: 12px monospace, sans-serif;
+}
+
+#editor{
+	border: solid #888 1px;
+	overflow: hidden;
+}
+
+#result{
+	z-index: 4; 
+	overflow-x: auto;
+	overflow-y: scroll;
+	border-top: solid #888 1px;
+	border-bottom: solid #888 1px;
+	position: relative;
+	clear: both;
+}
+
+#result.empty{
+	overflow: hidden;
+}
+
+#container{
+	overflow: hidden;
+	border: solid blue 0;
+	position: relative; 
+	z-index: 10;
+	padding: 0 5px 0 45px;
+	/*padding-right: 5px;*/ 
+}
+
+#textarea{
+	position: relative; 
+	top: 0; 
+	left: 0;
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	height: 100%; 
+	overflow: hidden;  
+	z-index: 7; 
+	border-width: 0;
+	background-color: transparent;
+	resize: none;
+}
+
+#textarea, #textarea:hover{
+	outline: none;	/* safari outline fix */
+}
+
+#content_highlight{
+	white-space: pre;
+	margin: 0;
+	padding: 0;
+	position : absolute; 
+	z-index: 4; 
+	overflow: visible;
+}
+
+
+#selection_field, #selection_field_text{
+	margin: 0; 
+	background-color: #E1F2F9; 
+/*	height: 1px; */  
+	position: absolute;
+	z-index: 5;
+	top: -100px;
+	padding: 0;
+	white-space: pre;
+	overflow: hidden;
+}
+
+#selection_field.show_colors {
+	z-index: 3;
+	background-color:#EDF9FC;
+	
+}
+
+#selection_field strong{
+	font-weight:normal;
+}
+
+#selection_field.show_colors *, #selection_field_text * {
+	visibility: hidden;
+}
+
+#selection_field_text{
+	background-color:transparent;
+}
+
+#selection_field_text strong{
+	font-weight:normal;
+	background-color:#3399FE;
+	color: #FFF;
+	visibility:visible;
+}
+
+#container.word_wrap #content_highlight,
+#container.word_wrap #selection_field,
+#container.word_wrap #selection_field_text,
+#container.word_wrap #test_font_size{
+	white-space: pre-wrap;       /* css-3 */
+	white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
+	white-space: -pre-wrap;      /* Opera 4-6 */
+	white-space: -o-pre-wrap;    /* Opera 7 */
+	word-wrap: break-word;       /* Internet Explorer 5.5+ */
+	width: 99%;
+}
+
+#line_number{
+	position: absolute;
+	overflow: hidden;
+	border-right: solid black 1px;
+	z-index:8;
+	width: 38px;
+	padding: 0 5px 0 0;
+	margin: 0 0 0 -45px;
+	text-align: right;
+	color: #AAAAAA;
+}
+
+#test_font_size{
+	padding: 0; 
+	margin: 0; 
+	visibility: hidden;
+	position: absolute;
+	white-space: pre;
+}
+
+pre{
+	margin: 0;
+	padding: 0;
+}
+
+.hidden{
+	opacity: 0; 
+	filter:alpha(opacity=20);
+}
+
+#result .edit_area_cursor{
+	position: absolute; 
+	z-index:6; 
+	background-color: #FF6633;
+	top: -100px;
+	margin: 0;
+}
+
+#result .edit_area_selection_field .overline{
+	background-color: #996600;
+}
+
+
+/* area popup */
+.editarea_popup{
+	border: solid 1px #888888;
+	background-color: #ECE9D8; 
+	width: 250px; 
+	padding: 4px; 
+	position: absolute;
+	visibility: hidden; 
+	z-index: 15;
+	top: -500px;
+}
+
+.editarea_popup, .editarea_popup table{
+	font-family: sans-serif;
+	font-size: 10pt;
+}
+
+.editarea_popup img{
+	border: 0;
+}
+
+.editarea_popup .close_popup{
+	float: right; 
+	line-height: 16px; 
+	border: 0; 
+	padding: 0;
+}
+
+.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{
+	margin: 0;
+	padding: 0;
+}
+
+.editarea_popup .copyright{
+	text-align: right;
+}	
+
+/* Area_search */
+div#area_search_replace{
+	/*width: 250px;*/
+}
+
+div#area_search_replace img{
+	border: 0;
+}
+
+div#area_search_replace div.button{
+	text-align: center;
+	line-height: 1.7em;
+}
+
+div#area_search_replace .button a{
+	cursor: pointer;
+	border: solid 1px #888888;
+	background-color: #DEDEDE;
+	text-decoration: none;
+	padding: 0 2px;
+	color: #000000;	
+	white-space: nowrap;
+}
+
+div#area_search_replace a:hover{	
+	/*border: solid 1px #888888;*/
+	background-color: #EDEDED;
+}
+
+div#area_search_replace  #move_area_search_replace{
+	cursor: move; 
+	border: solid 1px #888;
+}
+
+div#area_search_replace  #close_area_search_replace{
+	text-align: right; 
+	vertical-align: top; 
+	white-space: nowrap;
+}
+
+div#area_search_replace  #area_search_msg{
+	height: 18px; 
+	overflow: hidden; 
+	border-top: solid 1px #888; 
+	margin-top: 3px;
+}
+
+/* area help */
+#edit_area_help{
+	width: 350px;
+}
+
+#edit_area_help div.close_popup{
+	float: right;
+}
+
+/* area_toolbar */
+.area_toolbar{
+	/*font: 11px sans-serif;*/
+	width: 100%; 
+	/*height: 21px; */
+	margin: 0; 
+	padding: 0;
+	background-color: #ECE9D8;
+	text-align: center;
+}
+
+.area_toolbar, .area_toolbar table{
+	font: 11px sans-serif;
+}
+
+.area_toolbar img{
+	border: 0;
+	vertical-align: middle;
+}
+
+.area_toolbar input{
+	margin: 0;
+	padding: 0;
+}
+
+.area_toolbar select{
+    font-family: 'MS Sans Serif',sans-serif,Verdana,Arial;
+    font-size: 7pt;
+    font-weight: normal;
+    margin: 2px 0 0 0 ;
+    padding: 0;
+    vertical-align: top;
+    background-color: #F0F0EE;
+}
+
+table.statusbar{
+	width: 100%;
+}
+
+.area_toolbar td.infos{
+	text-align: center;
+	width: 130px;
+	border-right: solid 1px #888;
+	border-width: 0 1px 0 0;
+	padding: 0;
+}
+
+.area_toolbar td.total{
+	text-align: right;
+	width: 50px;
+	padding: 0;
+}
+
+.area_toolbar td.resize{
+	text-align: right;
+}
+/*
+.area_toolbar span{
+	line-height: 1px;
+	padding: 0;
+	margin: 0;
+}*/
+
+.area_toolbar span#resize_area{
+	cursor: nw-resize;
+	visibility: hidden;
+}
+
+/* toolbar buttons */
+.editAreaButtonNormal, .editAreaButtonOver, .editAreaButtonDown, .editAreaSeparator, .editAreaSeparatorLine, .editAreaButtonDisabled, .editAreaButtonSelected {
+	border: 0; margin: 0; padding: 0; background: transparent;
+	margin-top: 0;
+	margin-left: 1px;
+	padding: 0;
+}
+
+.editAreaButtonNormal {
+	border: 1px solid #ECE9D8 !important;
+	cursor: pointer;
+}
+
+.editAreaButtonOver {
+	border: 1px solid #0A246A !important;
+	cursor: pointer;
+	background-color: #B6BDD2;
+}
+
+.editAreaButtonDown {
+	cursor: pointer;
+	border: 1px solid #0A246A !important;
+	background-color: #8592B5;
+}
+
+.editAreaButtonSelected {
+	border: 1px solid #C0C0BB !important;
+	cursor: pointer;
+	background-color: #F4F2E8;
+}
+
+.editAreaButtonDisabled {
+	filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);
+	-moz-opacity:0.3;
+	opacity: 0.3;
+	border: 1px solid #F0F0EE !important;
+	cursor: pointer;
+}
+
+.editAreaSeparatorLine {
+	margin: 1px 2px;
+	background-color: #C0C0BB;
+	width: 2px;
+	height: 18px;
+}
+
+/* waiting screen */
+#processing{
+	display: none; 
+	background-color:#ECE9D8; 
+	border: solid #888 1px;
+	position: absolute; 
+	top: 0; 
+	left: 0;
+	width: 100%; 
+	height: 100%; 
+	z-index: 100; 
+	text-align: center;
+}
+
+#processing_text{
+	position:absolute;
+	left: 50%;
+	top: 50%;
+	width: 200px;
+	height: 20px; 
+	margin-left: -100px;
+	margin-top: -10px;
+	text-align: center;
+}
+/* end */
+
+
+/**** tab browsing area ****/
+#tab_browsing_area{
+	display: none;
+	background-color: #CCC9A8;
+	border-top: 1px solid #888;
+	text-align: left;
+	margin: 0;
+}
+
+#tab_browsing_list {
+	padding: 0; 
+	margin: 0; 
+	list-style-type: none;
+	white-space: nowrap;
+}
+#tab_browsing_list li {
+	float: left;
+	margin: -1px;
+}
+#tab_browsing_list a {
+	position: relative;
+	display: block; 
+	text-decoration: none; 
+	float: left; 
+	cursor: pointer;
+	line-height:14px;
+}
+
+#tab_browsing_list a span {
+	display: block; 
+	color: #000; 
+	background: #ECE9D8; 
+	border:	1px solid #888; 
+	border-width: 1px 1px 0; 
+	text-align: center; 
+	padding: 2px 2px 1px 4px; 
+	position: relative;	/*IE 6 hack */
+}
+
+#tab_browsing_list a b {
+	display: block; 
+	border-bottom: 2px solid #617994;
+}
+
+#tab_browsing_list a .edited {
+	display: none;
+}
+
+#tab_browsing_list a.edited .edited {
+	display: inline;
+}
+
+#tab_browsing_list a img{
+	margin-left: 7px;
+}
+
+#tab_browsing_list a.edited img{
+	margin-left: 3px;
+}
+
+#tab_browsing_list a:hover span {
+	background: #F4F2E8;
+	border-color: #0A246A;
+}
+
+#tab_browsing_list .selected a span{
+	background: #046380;
+	color: #FFF;
+}
+
+
+#no_file_selected{
+	height: 100%;
+	width: 150%; /* Opera need more than 100% */
+	background: #CCC;
+	display: none;
+	z-index: 20;
+	position: absolute;
+}
+
+
+/*** Non-editable mode ***/
+.non_editable #editor
+{
+	border-width: 0 1px;
+}
+
+.non_editable .area_toolbar
+{
+	display: none;
+}
+
+/*** Auto completion ***/
+#auto_completion_area
+{
+	background:	#FFF;
+	border:		solid 1px #888;
+	position:	absolute;
+	z-index:	15;
+	width:	280px;
+	height:	180px;
+	overflow: auto;
+	display:none;
+}
+
+#auto_completion_area a, #auto_completion_area a:visited
+{
+	display:	block;
+	padding:	0 2px 1px;
+	color:		#000;
+	text-decoration:none;
+}
+
+#auto_completion_area a:hover, #auto_completion_area a:focus, #auto_completion_area a.focus
+{
+	background:	#D6E1FE;
+	text-decoration:none;
+}
+
+#auto_completion_area ul
+{
+	margin:	0;
+	padding: 0;
+	list-style: none inside;
+}
+#auto_completion_area li
+{
+	padding:	0;
+}
+#auto_completion_area .prefix
+{
+	font-style: italic;
+	padding: 0 3px;
+}
\ No newline at end of file
Index: trunk/include/editarea/edit_area_full.js
===================================================================
--- trunk/include/editarea/edit_area_full.js	(nonexistent)
+++ trunk/include/editarea/edit_area_full.js	(revision 2)
@@ -0,0 +1,38 @@
+ function EAL(){var t=this;t.version="0.8.2";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.syntax_display_name={'basic':'Basic','brainfuck':'Brainfuck','c':'C','coldfusion':'Coldfusion','cpp':'CPP','css':'CSS','html':'HTML','java':'Java','js':'Javascript','pas':'Pascal','perl':'Perl','php':'Php','python':'Python','robotstxt':'Robots txt','ruby':'Ruby','sql':'SQL','tsql':'T-SQL','vb':'Visual Basic','xml':'XML'};t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true;
+else t.isValidBrowser=false;t.set_base_url();for(var i=0;i<t.scripts_to_load.length;i++){setTimeout("eAL.load_script('"+t.baseURL+t.scripts_to_load[i]+".js');",1);t.waiting_loading[t.scripts_to_load[i]+".js"]=false;}t.add_event(window,"load",EAL.prototype.window_loaded);};EAL.prototype={has_error:function(){this.error=true;for(var i in EAL.prototype){EAL.prototype[i]=function(){};}},set_browser_infos:function(o){ua=navigator.userAgent;o.isWebKit=/WebKit/.test(ua);o.isGecko=!o.isWebKit&&/Gecko/.test(ua);o.isMac=/Mac/.test(ua);o.isIE=(navigator.appName=="Microsoft Internet Explorer");if(o.isIE){o.isIE=ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/,"$1");if(o.isIE<6)o.has_error();}if(o.isOpera=(ua.indexOf('Opera')!=-1)){o.isOpera=ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i,"$1");if(o.isOpera<9)o.has_error();o.isIE=false;}if(o.isFirefox=(ua.indexOf('Firefox')!=-1))o.isFirefox=ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('Iceweasel')!=-1)o.isFirefox=ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('GranParadiso')!=-1)o.isFirefox=ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('BonEcho')!=-1)o.isFirefox=ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('SeaMonkey')!=-1)o.isFirefox=(ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i,"$1"))+1;if(o.isCamino=(ua.indexOf('Camino')!=-1))o.isCamino=ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i,"$1");if(o.isSafari=(ua.indexOf('Safari')!=-1))o.isSafari=ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i,"$1");if(o.isChrome=(ua.indexOf('Chrome')!=-1)){o.isChrome=ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i,"$1");o.isSafari=false;}},window_loaded:function(){eAL.win="loaded";if(document.forms){for(var i=0;i<document.forms.length;i++){var form=document.forms[i];form.edit_area_replaced_submit=null;try{form.edit_area_replaced_submit=form.onsubmit;form.onsubmit="";}catch(e){}eAL.add_event(form,"submit",EAL.prototype.submit);eAL.add_event(form,"reset",EAL.prototype.reset);}}eAL.add_event(window,"unload",function(){for(var i in eAs){eAL.delete_instance(i);}});},init_ie_textarea:function(id){var a=document.getElementById(id);try{if(a&&typeof(a.focused)=="undefined"){a.focus();a.focused=true;a.selectionStart=a.selectionEnd=0;get_IE_selection(a);eAL.add_event(a,"focus",IE_textarea_focus);eAL.add_event(a,"blur",IE_textarea_blur);}}catch(ex){}},init:function(settings){var t=this,s=settings,i;if(!s["id"])t.has_error();if(t.error)return;if(eAs[s["id"]])t.delete_instance(s["id"]);for(i in t.default_settings){if(typeof(s[i])=="undefined")s[i]=t.default_settings[i];}if(s["browsers"]=="known"&&t.isValidBrowser==false){return;}if(s["begin_toolbar"].length>0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i<s["plugins"].length;i++){if(s["plugins"][i].length==0)s["plugins"].splice(i,1);}t.get_template();t.load_script(t.baseURL+"langs/"+s["language"]+".js");if(s["syntax"].length>0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax/"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="<div id='edit_area_toggle_"+i+"'>";html+="<input id='edit_area_toggle_checkbox_"+id+"' class='toggle_"+id+"' type='checkbox' onclick='eAL.toggle(\""+id+"\");' accesskey='e' "+checked+" />";html+="<label for='edit_area_toggle_checkbox_"+id+"'>{$toggle}</label></div>";}if(eAs[id]["settings"]["debug"])html+="<textarea id='edit_area_debug_"+id+"' spellcheck='off' style='z-index:20;width:100%;height:120px;overflow:auto;border:solid black 1px;'></textarea><br />";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span);
+else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE < 9){t.init_ie_textarea(id);}var area=eAs[id];for(i=0;i<area["settings"]["tab_toolbar"].length;i++){html_toolbar_content+=t.get_control_html(area["settings"]["tab_toolbar"][i],area["settings"]["language"]);}html_toolbar_content=t.translate(html_toolbar_content,area["settings"]["language"],"template");if(!t.iframe_script){t.iframe_script="";for(i=0;i<t.sub_scripts_to_load.length;i++)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+t.sub_scripts_to_load[i]+'.js"></script>';}for(i=0;i<area["settings"]["plugins"].length;i++){if(!t.all_plugins_loaded)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/'+area["settings"]["plugins"][i]+'.js"></script>';t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/langs/'+area["settings"]["language"]+'.js"></script>';}if(!t.iframe_css){t.iframe_css="<link href='"+t.baseURL+"edit_area.css' rel='stylesheet' type='text/css' />";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content);
+else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);}
+else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);}
+else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;}
+else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");}
+else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i<elems.length;i++){if(elems[i].src&&elems[i].src.match(/edit_area_[^\\\/]*$/i)){var src=unescape(elems[i].src);src=src.substring(0,src.lastIndexOf('/'));this.baseURL=src;this.file_name=elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);break;}}}docBasePath=document.location.href;if(docBasePath.indexOf('?')!=-1)docBasePath=docBasePath.substring(0,docBasePath.indexOf('?'));docBasePath=docBasePath.substring(0,docBasePath.lastIndexOf('/'));if(t.baseURL.indexOf('://')==-1&&t.baseURL.charAt(0)!='/'){t.baseURL=docBasePath+"/"+t.baseURL;}t.baseURL+="/";},get_button_html:function(id,img,exec,isFileSpecific,baseURL){var cmd,html;if(!baseURL)baseURL=this.baseURL;cmd='editArea.execCommand(\''+exec+'\')';html='<a id="a_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+';return false;" onmousedown="return false;" target="_self" fileSpecific="'+(isFileSpecific?'yes':'no')+'">';html+='<img id="'+id+'" src="'+baseURL+'images/'+img+'" title="{$'+id+'}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i<t.advanced_buttons.length;i++){but=t.advanced_buttons[i];if(but[0]==button_name){return t.get_button_html(but[0],but[1],but[2],but[3]);}}switch(button_name){case "*":case "return":return "<br />";case "|":case "separator":return '<img src="'+t.baseURL+'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';case "select_font":html="<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";html+="<option value='-1'>{$font_size}</option>";si=[8,9,10,11,12,14];for(i=0;i<si.length;i++){html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";}html+="</select>";return html;case "syntax_selection":html="<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\",this.value)' fileSpecific='yes'>";html+="<option value='-1'>{$syntax_selection}</option>";html+="</select>";return html;}return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest();
+else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP");
+else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText;
+else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang);
+else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'" charset="UTF-8"></sc'+'ript>');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);}
+else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler);
+else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(window.frames["frame_"+i]&&is_child&&eAs[i]["displayed"]==true){var exec='window.frames["frame_'+i+'"].editArea.textarea.value=document.getElementById("'+i+'").value;';exec+='window.frames["frame_'+i+'"].editArea.execCommand("focus");';exec+='window.frames["frame_'+i+'"].editArea.check_line_selection();';exec+='window.frames["frame_'+i+'"].editArea.execCommand("reset");';window.setTimeout(exec,10);}}return;},submit:function(e){var formObj,is_child,fs=window.frames,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(is_child){if(fs["frame_"+i]&&eAs[i]["displayed"]==true)document.getElementById(i).value=fs["frame_"+i].editArea.textarea.value;eAL.execCommand(i,"EA_submit");}}if(typeof(formObj.edit_area_replaced_submit)=="function"){res=formObj.edit_area_replaced_submit();if(res==false){if(eAL.isIE)return false;
+else e.preventDefault();}}return;},getValue:function(id){if(window.frames["frame_"+id]&&eAs[id]["displayed"]==true){return window.frames["frame_"+id].editArea.textarea.value;}
+else if(elem=document.getElementById(id)){return elem.value;}return false;},setValue:function(id,new_val){var fs=window.frames;if((f=fs["frame_"+id])&&eAs[id]["displayed"]==true){f.editArea.textarea.value=new_val;f.editArea.execCommand("focus");f.editArea.check_line_selection(false);f.editArea.execCommand("onchange");}
+else if(elem=document.getElementById(id)){elem.value=new_val;}},getSelectionRange:function(id){var sel,eA,fs=window.frames;sel={"start":0,"end":0};if(fs["frame_"+id]&&eAs[id]["displayed"]==true){eA=fs["frame_"+id].editArea;sel["start"]=eA.textarea.selectionStart;sel["end"]=eA.textarea.selectionEnd;}
+else if(elem=document.getElementById(id)){sel=getSelectionRange(elem);}return sel;},setSelectionRange:function(id,new_start,new_end){var fs=window.frames;if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].editArea.area_select(new_start,new_end-new_start);if(!this.isIE){fs["frame_"+id].editArea.check_line_selection(false);fs["frame_"+id].editArea.scroll_to_view();}}
+else if(elem=document.getElementById(id)){setSelectionRange(elem,new_start,new_end);}},getSelectedText:function(id){var sel=this.getSelectionRange(id);return this.getValue(id).substring(sel["start"],sel["end"]);},setSelectedText:function(id,new_val){var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;new_val=new_val.replace(/\r/g,"");sel=this.getSelectionRange(id);text=this.getValue(id);if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
+else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}text=text.substring(0,sel["start"])+new_val+text.substring(sel["end"]);this.setValue(id,text);new_sel_end=sel["start"]+new_val.length;this.setSelectionRange(id,sel["start"],new_sel_end);if(new_val !=this.getSelectedText(id).replace(/\r/g,"")){this.setSelectionRange(id,sel["start"],new_sel_end+new_val.split("\n").length-1);}if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;fs["frame_"+id].editArea.execCommand("onchange");}
+else{d.getElementById(id).scrollTop=scrollTop;d.getElementById(id).scrollLeft=scrollLeft;}},insertTags:function(id,open_tag,close_tag){var old_sel,new_sel;old_sel=this.getSelectionRange(id);text=open_tag+this.getSelectedText(id)+close_tag;eAL.setSelectedText(id,text);new_sel=this.getSelectionRange(id);if(old_sel["end"] > old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]);
+else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
+else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;}
+else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);');
+else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);}
+else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x<children.length;x++){strTagName=new String(children[x].tagName);children_class="?";if(strTagName!="undefined"){child_attribute=getAttribute(children[x],elem_attribute);if((strTagName.toLowerCase()==elem_type.toLowerCase()||elem_type=="")&&(elem_attribute==""||child_attribute==elem_attribute_match)){if(option=="all"){results.push(children[x]);}
+else{return children[x];}}if(depth!=0){result=getChildren(children[x],elem_type,elem_attribute,elem_attribute_match,option,depth-1);if(option=="all"){if(result.length>0){results=results.concat(result);}}
+else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;}
+else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;}
+else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);}
+else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];}
+else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(nav.isOpera&&nav.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(nav.isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}if(t&&t.id){setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);}};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded";
+ EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded";
+	EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i<text_array.length;i++){if(i>0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}}
+else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded";
+var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "<script type='text/javascript'> Ã EA(){var t=Á;t.error=Ì;t.inlinePopup=[{popup_id:\"area_search_replace\",icon_id:\"search\"},{popup_id:\"edit_area_help\",icon_id:\"help\"}];t.plugins={};t.line_number=0;È.eAL.set_browser_infos(t);if(t.isIE==8.0)t.isIE=7;t.É={};t.last_text_to_highlight=\"\";t.last_hightlighted_text=\"\";t.syntax_list=[];t.allready_used_syntax={};t.check_line_selection_timer=50;t.ÂFocused=Ì;t.highlight_selection_line=null;t.previous=[];t.next=[];t.last_undo=\"\";t.files={};t.filesIdAssoc={};t.curr_file='';t.assocBracket={};t.revertAssocBracket={};t.assocBracket[\"(\"]=\")\";t.assocBracket[\"{\"]=\"}\";t.assocBracket[\"[\"]=\"]\";for(var index in t.assocBracket){t.revertAssocBracket[t.assocBracket[index]]=index;}t.is_editable=Ë;t.lineHeight=16;t.tab_nb_char=8;if(t.isOpera)t.tab_nb_char=6;t.is_tabbing=Ì;t.fullscreen={'isFull':Ì};t.isResizing=Ì;t.id=area_id;t.Å=eAs[t.id][\"Å\"];if((\"\"+t.Å['replace_tab_by_spaces']).match(/^[0-9]+$/)){t.tab_nb_char=t.Å['replace_tab_by_spaces'];t.tabulation=\"\";for(var i=0;i<t.tab_nb_char;i++)t.tabulation+=\" \";}\nelse{t.tabulation=\"\t\";}if(t.Å[\"syntax_selection_allow\"]&&t.Å[\"syntax_selection_allow\"].Æ>0)t.syntax_list=t.Å[\"syntax_selection_allow\"].replace(/ /g,\"\").split(\",\");if(t.Å['syntax'])t.allready_used_syntax[t.Å['syntax']]=Ë;};EA.Ä.init=Ã(){var t=Á,a,s=t.Å;t.Â=_$(\"Â\");t.container=_$(\"container\");t.result=_$(\"result\");t.content_highlight=_$(\"content_highlight\");t.selection_field=_$(\"selection_field\");t.selection_field_text=_$(\"selection_field_text\");t.processing_screen=_$(\"processing\");t.editor_area=_$(\"editor\");t.tab_browsing_area=_$(\"tab_browsing_area\");t.test_font_size=_$(\"test_font_size\");a=t.Â;if(!s['is_editable'])t.set_editable(Ì);t.set_show_line_colors(s['show_line_colors']);if(syntax_selec=_$(\"syntax_selection\")){for(var i=0;i<t.syntax_list.Æ;i++){var syntax=t.syntax_list[i];var option=document.createElement(\"option\");option.Ê=syntax;if(syntax==s['syntax'])option.selected=\"selected\";dispSyntax=È.eAL.syntax_display_name[ syntax ];option.innerHTML=typeof(dispSyntax)=='undefined' ? syntax.substring(0,1).toUpperCase()+syntax.substring(1):dispSyntax;syntax_selec.appendChild(option);}}spans=È.getChildren(_$(\"toolbar_1\"),\"span\",\"\",\"\",\"all\",-1);for(var i=0;i<spans.Æ;i++){id=spans[i].id.replace(/tmp_tool_(.*)/,\"$1\");if(id!=spans[i].id){for(var j in t.plugins){if(typeof(t.plugins[j].get_control_html)==\"Ã\"){html=t.plugins[j].get_control_html(id);if(html!=Ì){html=t.get_translation(html,\"template\");var new_span=document.createElement(\"span\");new_span.innerHTML=html;var father=spans[i].ÈNode;spans[i].ÈNode.replaceChild(new_span,spans[i]);break;}}}}}if(s[\"debug\"]){t.debug=È.document.getElementById(\"edit_area_debug_\"+t.id);}if(_$(\"redo\")!=null)t.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);if(typeof(È.eAL.syntax[s[\"syntax\"]])!=\"undefined\"){for(var i in È.eAL.syntax){if(typeof(È.eAL.syntax[i][\"Çs\"])!=\"undefined\"){t.add_Ç(È.eAL.syntax[i][\"Çs\"]);}}}if(t.isOpera)_$(\"editor\").onkeypress=keyDown;\nelse _$(\"editor\").onkeydown=keyDown;for(var i=0;i<t.inlinePopup.Æ;i++){if(t.isOpera)_$(t.inlinePopup[i][\"popup_id\"]).onkeypress=keyDown;\nelse _$(t.inlinePopup[i][\"popup_id\"]).onkeydown=keyDown;}if(s[\"allow_resize\"]==\"both\"||s[\"allow_resize\"]==\"x\"||s[\"allow_resize\"]==\"y\")t.allow_resize(Ë);È.eAL.toggle(t.id,\"on\");t.change_smooth_selection_mode(eA.smooth_selection);t.execCommand(\"change_highlight\",s[\"start_highlight\"]);t.set_font(eA.Å[\"font_family\"],eA.Å[\"font_size\"]);children=È.getChildren(document.body,\"\",\"selec\",\"none\",\"all\",-1);for(var i=0;i<children.Æ;i++){if(t.isIE)children[i].unselectable=Ë;\nelse children[i].onmousedown=Ã(){return Ì};}a.spellcheck=s[\"gecko_spellcheck\"];if(t.isFirefox >='3'){t.content_highlight.Ç.paddingLeft=\"1px\";t.selection_field.Ç.paddingLeft=\"1px\";t.selection_field_text.Ç.paddingLeft=\"1px\";}if(t.isIE&&t.isIE < 8){a.Ç.marginTop=\"-1px\";}if(t.isSafari){t.editor_area.Ç.position=\"absolute\";if(t.isSafari < 5.0)a.Ç.marginLeft=\"-3px\";\nelse a.Ç.marginLeft=\"0px\";if(t.isSafari < 3.2)a.Ç.marginTop=\"1px\";}È.eAL.add_event(t.result,\"click\",Ã(e){if((e.target||e.srcElement)==eA.result){eA.area_select(eA.Â.Ê.Æ,0);}});if(s['is_multi_files']!=Ì)t.open_file({'id':t.curr_file,'text':''});t.set_word_wrap(s['word_wrap']);if(t.isIE&&parseInt(t.isIE)> 8){}\nelse{setTimeout(\"eA.focus();eA.manage_size();eA.execCommand('EA_load');\",10);}t.check_undo();t.check_line_selection(Ë);t.scroll_to_view();for(var i in t.plugins){if(typeof(t.plugins[i].onload)==\"Ã\")t.plugins[i].onload();}if(s['fullscreen']==Ë)t.toggle_full_screen(Ë);È.eAL.add_event(window,\"resize\",eA.update_size);È.eAL.add_event(È.window,\"resize\",eA.update_size);È.eAL.add_event(top.window,\"resize\",eA.update_size);È.eAL.add_event(window,\"unload\",Ã(){if(È.eAL){È.eAL.remove_event(È.window,\"resize\",eA.update_size);È.eAL.remove_event(top.window,\"resize\",eA.update_size);}if(eAs[eA.id]&&eAs[eA.id][\"displayed\"]){eA.execCommand(\"EA_unload\");}});};EA.Ä.update_size=Ã(){var d=document,pd=È.document,height,width,popup,maxLeft,maxTop;if(typeof eAs !='undefined'&&eAs[eA.id]&&eAs[eA.id][\"displayed\"]==Ë){if(eA.fullscreen['isFull']){pd.getElementById(\"frame_\"+eA.id).Ç.width=pd.getElementsByTagName(\"html\")[0].clientWidth+\"px\";pd.getElementById(\"frame_\"+eA.id).Ç.height=pd.getElementsByTagName(\"html\")[0].clientHeight+\"px\";}if(eA.tab_browsing_area.Ç.display=='block'&&(!eA.isIE||eA.isIE >=8)){eA.tab_browsing_area.Ç.height=\"0px\";eA.tab_browsing_area.Ç.height=(eA.result.offsetTop-eA.tab_browsing_area.offsetTop-1)+\"px\";}height=d.body.offsetHeight-eA.get_all_toolbar_height()-4;eA.result.Ç.height=height+\"px\";width=d.body.offsetWidth-2;eA.result.Ç.width=width+\"px\";for(i=0;i < eA.inlinePopup.Æ;i++){popup=_$(eA.inlinePopup[i][\"popup_id\"]);maxLeft=d.body.offsetWidth-popup.offsetWidth;maxTop=d.body.offsetHeight-popup.offsetHeight;if(popup.offsetTop > maxTop)popup.Ç.top=maxTop+\"px\";if(popup.offsetLeft > maxLeft)popup.Ç.left=maxLeft+\"px\";}eA.manage_size(Ë);eA.fixLinesHeight(eA.Â.Ê,0,-1);}};EA.Ä.manage_size=Ã(onlyOneTime){if(!eAs[Á.id])return Ì;if(eAs[Á.id][\"displayed\"]==Ë&&Á.ÂFocused){var area_height,resized=Ì;if(!Á.Å['word_wrap']){var area_width=Á.Â.scrollWidth;area_height=Á.Â.scrollHeight;if(Á.isOpera&&Á.isOpera < 9.6){area_width=10000;}if(Á.Â.previous_scrollWidth!=area_width){Á.container.Ç.width=area_width+\"px\";Á.Â.Ç.width=area_width+\"px\";Á.content_highlight.Ç.width=area_width+\"px\";Á.Â.previous_scrollWidth=area_width;resized=Ë;}}if(Á.Å['word_wrap']){newW=Á.Â.offsetWidth;if(Á.isFirefox||Á.isIE)newW-=2;if(Á.isSafari)newW-=6;Á.content_highlight.Ç.width=Á.selection_field_text.Ç.width=Á.selection_field.Ç.width=Á.test_font_size.Ç.width=newW+\"px\";}if(Á.isOpera||Á.isFirefox||Á.isSafari){area_height=Á.getLinePosTop(Á.É[\"nb_line\"]+1);}\nelse{area_height=Á.Â.scrollHeight;}if(Á.Â.previous_scrollHeight!=area_height){Á.container.Ç.height=(area_height+2)+\"px\";Á.Â.Ç.height=area_height+\"px\";Á.content_highlight.Ç.height=area_height+\"px\";Á.Â.previous_scrollHeight=area_height;resized=Ë;}if(Á.É[\"nb_line\"] >=Á.line_number){var newLines='',destDiv=_$(\"line_number\"),start=Á.line_number,end=Á.É[\"nb_line\"]+100;for(i=start+1;i < end;i++){newLines+='<div id=\"line_'+i+'\">'+i+\"</div>\";Á.line_number++;}destDiv.innerHTML=destDiv.innerHTML+newLines;if(Á.Å['word_wrap']){Á.fixLinesHeight(Á.Â.Ê,start,-1);}}Á.Â.scrollTop=\"0px\";Á.Â.scrollLeft=\"0px\";if(resized==Ë){Á.scroll_to_view();}}if(!onlyOneTime)setTimeout(\"eA.manage_size();\",100);};EA.Ä.execCommand=Ã(cmd,param){for(var i in Á.plugins){if(typeof(Á.plugins[i].execCommand)==\"Ã\"){if(!Á.plugins[i].execCommand(cmd,param))return;}}switch(cmd){case \"save\":if(Á.Å[\"save_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"save_callback\"]+\"('\"+Á.id+\"',eA.Â.Ê);\");break;case \"load\":if(Á.Å[\"load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"load_callback\"]+\"('\"+Á.id+\"');\");break;case \"onchange\":if(Á.Å[\"change_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"change_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_load\":if(Á.Å[\"EA_load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_load_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_unload\":if(Á.Å[\"EA_unload_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_unload_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_on\":if(Á.Å[\"EA_toggle_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_on_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_off\":if(Á.Å[\"EA_toggle_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_off_callback\"]+\"('\"+Á.id+\"');\");break;case \"re_sync\":if(!Á.do_highlight)break;case \"file_switch_on\":if(Á.Å[\"EA_file_switch_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_on_callback\"]+\"(param);\");break;case \"file_switch_off\":if(Á.Å[\"EA_file_switch_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_off_callback\"]+\"(param);\");break;case \"file_close\":if(Á.Å[\"EA_file_close_callback\"].Æ>0)return eval(\"È.\"+Á.Å[\"EA_file_close_callback\"]+\"(param);\");break;default:if(typeof(eval(\"eA.\"+cmd))==\"Ã\"){if(Á.Å[\"debug\"])eval(\"eA.\"+cmd+\"(param);\");\nelse try{eval(\"eA.\"+cmd+\"(param);\");}catch(e){};}}};EA.Ä.get_translation=Ã(word,mode){if(mode==\"template\")return È.eAL.translate(word,Á.Å[\"language\"],mode);\nelse return È.eAL.get_word_translation(word,Á.Å[\"language\"]);};EA.Ä.add_plugin=Ã(plug_name,plug_obj){for(var i=0;i<Á.Å[\"plugins\"].Æ;i++){if(Á.Å[\"plugins\"][i]==plug_name){Á.plugins[plug_name]=plug_obj;plug_obj.baseURL=È.eAL.baseURL+\"plugins/\"+plug_name+\"/\";if(typeof(plug_obj.init)==\"Ã\")plug_obj.init();}}};EA.Ä.load_css=Ã(url){try{link=document.createElement(\"link\");link.type=\"text/css\";link.rel=\"Çsheet\";link.media=\"all\";link.href=url;head=document.getElementsByTagName(\"head\");head[0].appendChild(link);}catch(e){document.write(\"<link href='\"+url+\"' rel='Çsheet' type='text/css' />\");}};EA.Ä.load_script=Ã(url){try{script=document.createElement(\"script\");script.type=\"text/javascript\";script.src=url;script.charset=\"UTF-8\";head=document.getElementsByTagName(\"head\");head[0].appendChild(script);}catch(e){document.write(\"<script type='text/javascript' src='\"+url+\"' charset=\\\"UTF-8\\\"><\"+\"/script>\");}if(t.isIE > 8)document.write(\"<Ç>.hidden{opacity:0;}</Ç>\");};EA.Ä.add_lang=Ã(language,Ês){if(!È.eAL.lang[language])È.eAL.lang[language]={};for(var i in Ês)È.eAL.lang[language][i]=Ês[i];};Ã _$(id){return document.getElementById(id);};var eA=new EA();È.eAL.add_event(window,\"load\",init);Ã init(){setTimeout(\"eA.init();\",10);};	EA.Ä.focus=Ã(){Á.Â.focus();Á.ÂFocused=Ë;};EA.Ä.check_line_selection=Ã(timer_checkup){var changes,infos,new_top,new_width,i;var t1=t2=t2_1=t3=tLines=tend=new Date().getTime();if(!eAs[Á.id])return Ì;if(!Á.smooth_selection&&!Á.do_highlight){}\nelse if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë&&Á.isResizing==Ì){infos=Á.get_selection_infos();changes=Á.checkTextEvolution(typeof(Á.É['full_text'])=='undefined' ? '':Á.É['full_text'],infos['full_text']);t2=new Date().getTime();if(Á.É[\"line_start\"] !=infos[\"line_start\"]||Á.É[\"line_nb\"] !=infos[\"line_nb\"]||infos[\"full_text\"] !=Á.É[\"full_text\"]||Á.reload_highlight||Á.É[\"selectionStart\"] !=infos[\"selectionStart\"]||Á.É[\"selectionEnd\"] !=infos[\"selectionEnd\"]||!timer_checkup){new_top=Á.getLinePosTop(infos[\"line_start\"]);new_width=Math.max(Á.Â.scrollWidth,Á.container.clientWidth-50);Á.selection_field.Ç.top=Á.selection_field_text.Ç.top=new_top+\"px\";if(!Á.Å['word_wrap']){Á.selection_field.Ç.width=Á.selection_field_text.Ç.width=Á.test_font_size.Ç.width=new_width+\"px\";}if(Á.do_highlight==Ë){var curr_text=infos[\"full_text\"].split(\"\\n\");var content=\"\";var start=Math.max(0,infos[\"line_start\"]-1);var end=Math.min(curr_text.Æ,infos[\"line_start\"]+infos[\"line_nb\"]-1);for(i=start;i< end;i++){content+=curr_text[i]+\"\\n\";}selLength=infos['selectionEnd']-infos['selectionStart'];content=content.substr(0,infos[\"curr_pos\"]-1)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1,selLength)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1+selLength);content='<span>'+content.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(\"\\r\\r\",'</span><strong>').replace(\"\\r\\r\",'</strong><span>')+'</span>';if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){Á.selection_field.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{Á.selection_field.innerHTML=content;}Á.selection_field_text.innerHTML=Á.selection_field.innerHTML;t2_1=new Date().getTime();if(Á.reload_highlight||(infos[\"full_text\"] !=Á.last_text_to_highlight&&(Á.É[\"line_start\"]!=infos[\"line_start\"]||Á.show_line_colors||Á.Å['word_wrap']||Á.É[\"line_nb\"]!=infos[\"line_nb\"]||Á.É[\"nb_line\"]!=infos[\"nb_line\"]))){Á.maj_highlight(infos);}}}t3=new Date().getTime();if(Á.Å['word_wrap']&&infos[\"full_text\"] !=Á.É[\"full_text\"]){if(changes.newText.split(\"\\n\").Æ==1&&Á.É['nb_line']&&infos['nb_line']==Á.É['nb_line']){Á.fixLinesHeight(infos['full_text'],changes.lineStart,changes.lineStart);}\nelse{Á.fixLinesHeight(infos['full_text'],changes.lineStart,-1);}}tLines=new Date().getTime();if(infos[\"line_start\"] !=Á.É[\"line_start\"]||infos[\"curr_pos\"] !=Á.É[\"curr_pos\"]||infos[\"full_text\"].Æ!=Á.É[\"full_text\"].Æ||Á.reload_highlight||!timer_checkup){var selec_char=infos[\"curr_line\"].charAt(infos[\"curr_pos\"]-1);var no_real_move=Ë;if(infos[\"line_nb\"]==1&&(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char])){no_real_move=Ì;if(Á.findEndBracket(infos,selec_char)===Ë){_$(\"end_bracket\").Ç.visibility=\"visible\";_$(\"cursor_pos\").Ç.visibility=\"visible\";_$(\"cursor_pos\").innerHTML=selec_char;_$(\"end_bracket\").innerHTML=(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char]);}\nelse{_$(\"end_bracket\").Ç.visibility=\"hidden\";_$(\"cursor_pos\").Ç.visibility=\"hidden\";}}\nelse{_$(\"cursor_pos\").Ç.visibility=\"hidden\";_$(\"end_bracket\").Ç.visibility=\"hidden\";}Á.displayToCursorPosition(\"cursor_pos\",infos[\"line_start\"],infos[\"curr_pos\"]-1,infos[\"curr_line\"],no_real_move);if(infos[\"line_nb\"]==1&&infos[\"line_start\"]!=Á.É[\"line_start\"])Á.scroll_to_view();}Á.É=infos;}tend=new Date().getTime();if(timer_checkup){setTimeout(\"eA.check_line_selection(Ë)\",Á.check_line_selection_timer);}};EA.Ä.get_selection_infos=Ã(){var sel={},start,end,len,str;Á.getIESelection();start=Á.Â.selectionStart;end=Á.Â.selectionEnd;if(Á.É[\"selectionStart\"]==start&&Á.É[\"selectionEnd\"]==end&&Á.É[\"full_text\"]==Á.Â.Ê){return Á.É;}if(Á.tabulation!=\"\t\"&&Á.Â.Ê.indexOf(\"\t\")!=-1){len=Á.Â.Ê.Æ;Á.Â.Ê=Á.replace_tab(Á.Â.Ê);start=end=start+(Á.Â.Ê.Æ-len);Á.area_select(start,0);}sel[\"selectionStart\"]=start;sel[\"selectionEnd\"]=end;sel[\"full_text\"]=Á.Â.Ê;sel[\"line_start\"]=1;sel[\"line_nb\"]=1;sel[\"curr_pos\"]=0;sel[\"curr_line\"]=\"\";sel[\"indexOfCursor\"]=0;sel[\"selec_direction\"]=Á.É[\"selec_direction\"];var splitTab=sel[\"full_text\"].split(\"\\n\");var nbLine=Math.max(0,splitTab.Æ);var nbChar=Math.max(0,sel[\"full_text\"].Æ-(nbLine-1));if(sel[\"full_text\"].indexOf(\"\\r\")!=-1)nbChar=nbChar-(nbLine-1);sel[\"nb_line\"]=nbLine;sel[\"nb_char\"]=nbChar;if(start>0){str=sel[\"full_text\"].substr(0,start);sel[\"curr_pos\"]=start-str.lastIndexOf(\"\\n\");sel[\"line_start\"]=Math.max(1,str.split(\"\\n\").Æ);}\nelse{sel[\"curr_pos\"]=1;}if(end>start){sel[\"line_nb\"]=sel[\"full_text\"].substring(start,end).split(\"\\n\").Æ;}sel[\"indexOfCursor\"]=start;sel[\"curr_line\"]=splitTab[Math.max(0,sel[\"line_start\"]-1)];if(sel[\"selectionStart\"]==Á.É[\"selectionStart\"]){if(sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"])sel[\"selec_direction\"]=\"down\";\nelse if(sel[\"selectionEnd\"]==Á.É[\"selectionStart\"])sel[\"selec_direction\"]=Á.É[\"selec_direction\"];}\nelse if(sel[\"selectionStart\"]==Á.É[\"selectionEnd\"]&&sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"]){sel[\"selec_direction\"]=\"down\";}\nelse{sel[\"selec_direction\"]=\"up\";}_$(\"nbLine\").innerHTML=nbLine;_$(\"nbChar\").innerHTML=nbChar;_$(\"linePos\").innerHTML=sel[\"line_start\"];_$(\"currPos\").innerHTML=sel[\"curr_pos\"];return sel;};var need_createRange=!(\"selectionStart\" in document.createElement(\"Â\"));EA.Ä.getIESelection=Ã(){var selectionStart,selectionEnd,range,stored_range;if(!Á.isIE||!need_createRange)return Ì;if(Á.Å['word_wrap'])Á.Â.wrap='off';try{range=document.selection.createRange();stored_range=range.duplicate();stored_range.moveToElementText(Á.Â);stored_range.setEndPoint('EndToEnd',range);if(stored_range.ÈElement()!=Á.Â)throw \"invalid focus\";var scrollTop=Á.result.scrollTop+document.body.scrollTop;var relative_top=range.offsetTop-È.calculeOffsetTop(Á.Â)+scrollTop;var line_start=Math.round((relative_top / Á.lineHeight)+1);var line_nb=Math.round(range.boundingHeight / Á.lineHeight);selectionStart=stored_range.text.Æ-range.text.Æ;selectionStart+=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)*2;selectionStart-=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)* 2;selectionEnd=selectionStart+range.text.Æ;selectionEnd+=(line_start+line_nb-1-Á.Â.Ê.substr(0,selectionEnd).split(\"\\n\").Æ)*2;Á.Â.selectionStart=selectionStart;Á.Â.selectionEnd=selectionEnd;}catch(e){}if(Á.Å['word_wrap'])Á.Â.wrap='soft';};EA.Ä.setIESelection=Ã(){var a=Á.Â,nbLineStart,nbLineEnd,range;if(!Á.isIE||!need_createRange)return Ì;nbLineStart=a.Ê.substr(0,a.selectionStart).split(\"\\n\").Æ-1;nbLineEnd=a.Ê.substr(0,a.selectionEnd).split(\"\\n\").Æ-1;range=document.selection.createRange();range.moveToElementText(a);range.setEndPoint('EndToStart',range);range.moveStart('character',a.selectionStart-nbLineStart);range.moveEnd('character',a.selectionEnd-nbLineEnd-(a.selectionStart-nbLineStart));range.select();};EA.Ä.checkTextEvolution=Ã(lastText,newText){var ch={},baseStep=200,cpt=0,end,step,tStart=new Date().getTime();end=Math.min(newText.Æ,lastText.Æ);step=baseStep;while(cpt<end&&step>=1){if(lastText.substr(cpt,step)==newText.substr(cpt,step)){cpt+=step;}\nelse{step=Math.floor(step/2);}}ch.posStart=cpt;ch.lineStart=newText.substr(0,ch.posStart).split(\"\\n\").Æ-1;cpt_last=lastText.Æ;cpt=newText.Æ;step=baseStep;while(cpt>=0&&cpt_last>=0&&step>=1){if(lastText.substr(cpt_last-step,step)==newText.substr(cpt-step,step)){cpt-=step;cpt_last-=step;}\nelse{step=Math.floor(step/2);}}ch.posNewEnd=cpt;ch.posLastEnd=cpt_last;if(ch.posNewEnd<=ch.posStart){if(lastText.Æ < newText.Æ){ch.posNewEnd=ch.posStart+newText.Æ-lastText.Æ;ch.posLastEnd=ch.posStart;}\nelse{ch.posLastEnd=ch.posStart+lastText.Æ-newText.Æ;ch.posNewEnd=ch.posStart;}}ch.newText=newText.substring(ch.posStart,ch.posNewEnd);ch.lastText=lastText.substring(ch.posStart,ch.posLastEnd);ch.lineNewEnd=newText.substr(0,ch.posNewEnd).split(\"\\n\").Æ-1;ch.lineLastEnd=lastText.substr(0,ch.posLastEnd).split(\"\\n\").Æ-1;ch.newTextLine=newText.split(\"\\n\").slice(ch.lineStart,ch.lineNewEnd+1).join(\"\\n\");ch.lastTextLine=lastText.split(\"\\n\").slice(ch.lineStart,ch.lineLastEnd+1).join(\"\\n\");return ch;};EA.Ä.tab_selection=Ã(){if(Á.is_tabbing)return;Á.is_tabbing=Ë;Á.getIESelection();var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var insText=Á.Â.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){Á.Â.Ê=Á.Â.Ê.substr(0,start)+Á.tabulation+Á.Â.Ê.substr(end);pos_start=start+Á.tabulation.Æ;pos_end=pos_start;}\nelse{start=Math.max(0,Á.Â.Ê.substr(0,start).lastIndexOf(\"\\n\")+1);endText=Á.Â.Ê.substr(end);startText=Á.Â.Ê.substr(0,start);tmp=Á.Â.Ê.substring(start,end).split(\"\\n\");insText=Á.tabulation+tmp.join(\"\\n\"+Á.tabulation);Á.Â.Ê=startText+insText+endText;pos_start=start;pos_end=Á.Â.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=Á.Â.Ê.Æ;}Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;if(Á.isIE){Á.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse{Á.is_tabbing=Ì;}};EA.Ä.invert_tab_selection=Ã(){var t=Á,a=Á.Â;if(t.is_tabbing)return;t.is_tabbing=Ë;t.getIESelection();var start=a.selectionStart;var end=a.selectionEnd;var insText=a.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){if(a.Ê.substring(start-t.tabulation.Æ,start)==t.tabulation){a.Ê=a.Ê.substr(0,start-t.tabulation.Æ)+a.Ê.substr(end);pos_start=Math.max(0,start-t.tabulation.Æ);pos_end=pos_start;}}\nelse{start=a.Ê.substr(0,start).lastIndexOf(\"\\n\")+1;endText=a.Ê.substr(end);startText=a.Ê.substr(0,start);tmp=a.Ê.substring(start,end).split(\"\\n\");insText=\"\";for(i=0;i<tmp.Æ;i++){for(j=0;j<t.tab_nb_char;j++){if(tmp[i].charAt(0)==\"\t\"){tmp[i]=tmp[i].substr(1);j=t.tab_nb_char;}\nelse if(tmp[i].charAt(0)==\" \")tmp[i]=tmp[i].substr(1);}insText+=tmp[i];if(i<tmp.Æ-1)insText+=\"\\n\";}a.Ê=startText+insText+endText;pos_start=start;pos_end=a.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=a.Ê.Æ;}a.selectionStart=pos_start;a.selectionEnd=pos_end;if(t.isIE){t.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse t.is_tabbing=Ì;};EA.Ä.press_enter=Ã(){if(!Á.smooth_selection)return Ì;Á.getIESelection();var scrollTop=Á.result.scrollTop;var scrollLeft=Á.result.scrollLeft;var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var start_last_line=Math.max(0,Á.Â.Ê.substring(0,start).lastIndexOf(\"\\n\")+1);var begin_line=Á.Â.Ê.substring(start_last_line,start).replace(/^([ \t]*).*/gm,\"$1\");var lineStart=Á.Â.Ê.substring(0,start).split(\"\\n\").Æ;if(begin_line==\"\\n\"||begin_line==\"\\r\"||begin_line.Æ==0){return Ì;}if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){begin_line=\"\\r\\n\"+begin_line;}\nelse{begin_line=\"\\n\"+begin_line;}Á.Â.Ê=Á.Â.Ê.substring(0,start)+begin_line+Á.Â.Ê.substring(end);Á.area_select(start+begin_line.Æ,0);if(Á.isIE){Á.result.scrollTop=scrollTop;Á.result.scrollLeft=scrollLeft;}return Ë;};EA.Ä.findEndBracket=Ã(infos,bracket){var start=infos[\"indexOfCursor\"];var normal_order=Ë;if(Á.assocBracket[bracket])endBracket=Á.assocBracket[bracket];\nelse if(Á.revertAssocBracket[bracket]){endBracket=Á.revertAssocBracket[bracket];normal_order=Ì;}var end=-1;var nbBracketOpen=0;for(var i=start;i<infos[\"full_text\"].Æ&&i>=0;){if(infos[\"full_text\"].charAt(i)==endBracket){nbBracketOpen--;if(nbBracketOpen<=0){end=i;break;}}\nelse if(infos[\"full_text\"].charAt(i)==bracket)nbBracketOpen++;if(normal_order)i++;\nelse i--;}if(end==-1)return Ì;var endLastLine=infos[\"full_text\"].substr(0,end).lastIndexOf(\"\\n\");if(endLastLine==-1)line=1;\nelse line=infos[\"full_text\"].substr(0,endLastLine).split(\"\\n\").Æ+1;var curPos=end-endLastLine-1;var endLineLength=infos[\"full_text\"].substring(end).split(\"\\n\")[0].Æ;Á.displayToCursorPosition(\"end_bracket\",line,curPos,infos[\"full_text\"].substring(endLastLine+1,end+endLineLength));return Ë;};EA.Ä.displayToCursorPosition=Ã(id,start_line,cur_pos,lineContent,no_real_move){var elem,dest,content,posLeft=0,posTop,fixPadding,topOffset,endElem;elem=Á.test_font_size;dest=_$(id);content=\"<span id='test_font_size_inner'>\"+lineContent.substr(0,cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span><span id='endTestFont'>\"+lineContent.substr(cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span>\";if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}endElem=_$('endTestFont');topOffset=endElem.offsetTop;fixPadding=parseInt(Á.content_highlight.Ç.paddingLeft.replace(\"px\",\"\"));posLeft=45+endElem.offsetLeft+(!isNaN(fixPadding)&&topOffset > 0 ? fixPadding:0);posTop=Á.getLinePosTop(start_line)+topOffset;if(Á.isIE&&cur_pos > 0&&endElem.offsetLeft==0){posTop+=Á.lineHeight;}if(no_real_move!=Ë){dest.Ç.top=posTop+\"px\";dest.Ç.left=posLeft+\"px\";}dest.cursor_top=posTop;dest.cursor_left=posLeft;};EA.Ä.getLinePosTop=Ã(start_line){var elem=_$('line_'+start_line),posTop=0;if(elem)posTop=elem.offsetTop;\nelse posTop=Á.lineHeight *(start_line-1);return posTop;};EA.Ä.getTextHeight=Ã(text){var t=Á,elem,height;elem=t.test_font_size;content=text.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\");if(t.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}height=elem.offsetHeight;height=Math.max(1,Math.floor(elem.offsetHeight / Á.lineHeight))* Á.lineHeight;return height;};EA.Ä.fixLinesHeight=Ã(textValue,lineStart,lineEnd){var aText=textValue.split(\"\\n\");if(lineEnd==-1)lineEnd=aText.Æ-1;for(var i=Math.max(0,lineStart);i <=lineEnd;i++){if(elem=_$('line_'+(i+1))){elem.Ç.height=typeof(aText[i])!=\"undefined\" ? Á.getTextHeight(aText[i])+\"px\":Á.lineHeight;}}};EA.Ä.area_select=Ã(start,Æ){Á.Â.focus();start=Math.max(0,Math.min(Á.Â.Ê.Æ,start));end=Math.max(start,Math.min(Á.Â.Ê.Æ,start+Æ));if(Á.isIE){Á.Â.selectionStart=start;Á.Â.selectionEnd=end;Á.setIESelection();}\nelse{if(Á.isOpera&&Á.isOpera < 9.6){Á.Â.setSelectionRange(0,0);}Á.Â.setSelectionRange(start,end);}Á.check_line_selection();};EA.Ä.area_get_selection=Ã(){var text=\"\";if(document.selection){var range=document.selection.createRange();text=range.text;}\nelse{text=Á.Â.Ê.substring(Á.Â.selectionStart,Á.Â.selectionEnd);}return text;}; EA.Ä.replace_tab=Ã(text){return text.replace(/((\\n?)([^\t\\n]*)\t)/gi,eA.smartTab);};EA.Ä.smartTab=Ã(){val=\"                   \";return EA.Ä.smartTab.arguments[2]+EA.Ä.smartTab.arguments[3]+val.substr(0,eA.tab_nb_char-(EA.Ä.smartTab.arguments[3].Æ)%eA.tab_nb_char);};EA.Ä.show_waiting_screen=Ã(){width=Á.editor_area.offsetWidth;height=Á.editor_area.offsetHeight;if(!(Á.isIE&&Á.isIE<6)){width-=2;height-=2;}Á.processing_screen.Ç.display=\"block\";Á.processing_screen.Ç.width=width+\"px\";Á.processing_screen.Ç.height=height+\"px\";Á.waiting_screen_displayed=Ë;};EA.Ä.hide_waiting_screen=Ã(){Á.processing_screen.Ç.display=\"none\";Á.waiting_screen_displayed=Ì;};EA.Ä.add_Ç=Ã(Çs){if(Çs.Æ>0){newcss=document.createElement(\"Ç\");newcss.type=\"text/css\";newcss.media=\"all\";if(newcss.ÇSheet){newcss.ÇSheet.cssText=Çs;}\nelse{newcss.appendChild(document.createTextNode(Çs));}document.getElementsByTagName(\"head\")[0].appendChild(newcss);}};EA.Ä.set_font=Ã(family,size){var t=Á,a=Á.Â,s=Á.Å,elem_font,i,elem;var elems=[\"Â\",\"content_highlight\",\"cursor_pos\",\"end_bracket\",\"selection_field\",\"selection_field_text\",\"line_number\"];if(family&&family!=\"\")s[\"font_family\"]=family;if(size&&size>0)s[\"font_size\"]=size;if(t.isOpera&&t.isOpera < 9.6)s['font_family']=\"monospace\";if(elem_font=_$(\"area_font_size\")){for(i=0;i < elem_font.Æ;i++){if(elem_font.options[i].Ê&&elem_font.options[i].Ê==s[\"font_size\"])elem_font.options[i].selected=Ë;}}if(t.isFirefox){var nbTry=3;do{var div1=document.createElement('div'),text1=document.createElement('Â');var Çs={width:'40px',overflow:'scroll',zIndex:50,visibility:'hidden',fontFamily:s[\"font_family\"],fontSize:s[\"font_size\"]+\"pt\",lineHeight:t.lineHeight+\"px\",padding:'0',margin:'0',border:'none',whiteSpace:'nowrap'};var diff,changed=Ì;for(i in Çs){div1.Ç[ i ]=Çs[i];text1.Ç[ i ]=Çs[i];}text1.wrap='off';text1.setAttribute('wrap','off');t.container.appendChild(div1);t.container.appendChild(text1);div1.innerHTML=text1.Ê='azertyuiopqsdfghjklm';div1.innerHTML=text1.Ê=text1.Ê+'wxcvbn^p*ù$!:;,,';diff=text1.scrollWidth-div1.scrollWidth;if(Math.abs(diff)>=2){s[\"font_size\"]++;changed=Ë;}t.container.removeChild(div1);t.container.removeChild(text1);nbTry--;}while(changed&&nbTry > 0);}elem=t.test_font_size;elem.Ç.fontFamily=\"\"+s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.innerHTML=\"0\";t.lineHeight=elem.offsetHeight;for(i=0;i<elems.Æ;i++){elem=_$(elems[i]);elem.Ç.fontFamily=s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.Ç.lineHeight=t.lineHeight+\"px\";}t.add_Ç(\"pre{font-family:\"+s[\"font_family\"]+\"}\");if((t.isOpera&&t.isOpera < 9.6)||t.isIE >=8){var parNod=a.ÈNode,nxtSib=a.nextSibling,start=a.selectionStart,end=a.selectionEnd;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);t.area_select(start,end-start);}Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.change_font_size=Ã(){var size=_$(\"area_font_size\").Ê;if(size>0)Á.set_font(\"\",size);};EA.Ä.open_inline_popup=Ã(popup_id){Á.close_all_inline_popup();var popup=_$(popup_id);var editor=_$(\"editor\");for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);break;}}}popup.Ç.height=\"auto\";popup.Ç.overflow=\"visible\";if(document.body.offsetHeight< popup.offsetHeight){popup.Ç.height=(document.body.offsetHeight-10)+\"px\";popup.Ç.overflow=\"auto\";}if(!popup.positionned){var new_left=editor.offsetWidth /2-popup.offsetWidth /2;var new_top=editor.offsetHeight /2-popup.offsetHeight /2;popup.Ç.left=new_left+\"px\";popup.Ç.top=new_top+\"px\";popup.positionned=Ë;}popup.Ç.visibility=\"visible\";};EA.Ä.close_inline_popup=Ã(popup_id){var popup=_$(popup_id);for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);break;}}}popup.Ç.visibility=\"hidden\";};EA.Ä.close_all_inline_popup=Ã(e){for(var i=0;i<Á.inlinePopup.Æ;i++){Á.close_inline_popup(Á.inlinePopup[i][\"popup_id\"]);}Á.Â.focus();};EA.Ä.show_help=Ã(){Á.open_inline_popup(\"edit_area_help\");};EA.Ä.new_document=Ã(){Á.Â.Ê=\"\";Á.area_select(0,0);};EA.Ä.get_all_toolbar_height=Ã(){var area=_$(\"editor\");var results=È.getChildren(area,\"div\",\"class\",\"area_toolbar\",\"all\",\"0\");var height=0;for(var i=0;i<results.Æ;i++){height+=results[i].offsetHeight;}return height;};EA.Ä.go_to_line=Ã(line){if(!line){var icon=_$(\"go_to_line\");if(icon !=null){Á.restoreClass(icon);Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);}line=prompt(Á.get_translation(\"go_to_line_prompt\"));if(icon !=null)Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);}if(line&&line!=null&&line.search(/^[0-9]+$/)!=-1){var start=0;var lines=Á.Â.Ê.split(\"\\n\");if(line > lines.Æ)start=Á.Â.Ê.Æ;\nelse{for(var i=0;i<Math.min(line-1,lines.Æ);i++)start+=lines[i].Æ+1;}Á.area_select(start,0);}};EA.Ä.change_smooth_selection_mode=Ã(setTo){if(Á.do_highlight)return;if(setTo !=null){if(setTo===Ì)Á.smooth_selection=Ë;\nelse Á.smooth_selection=Ì;}var icon=_$(\"change_smooth_selection\");Á.Â.focus();if(Á.smooth_selection===Ë){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);Á.smooth_selection=Ì;Á.selection_field.Ç.display=\"none\";_$(\"cursor_pos\").Ç.display=\"none\";_$(\"end_bracket\").Ç.display=\"none\";}\nelse{Á.switchClassSticky(icon,'editAreaButtonSelected',Ì);Á.smooth_selection=Ë;Á.selection_field.Ç.display=\"block\";_$(\"cursor_pos\").Ç.display=\"block\";_$(\"end_bracket\").Ç.display=\"block\";}};EA.Ä.scroll_to_view=Ã(show){var zone,lineElem;if(!Á.smooth_selection)return;zone=_$(\"result\");var cursor_pos_top=_$(\"cursor_pos\").cursor_top;if(show==\"bottom\"){cursor_pos_top+=Á.getLinePosTop(Á.É['line_start']+Á.É['line_nb']-1);}var max_height_visible=zone.clientHeight+zone.scrollTop;var miss_top=cursor_pos_top+Á.lineHeight-max_height_visible;if(miss_top>0){zone.scrollTop=zone.scrollTop+miss_top;}\nelse if(zone.scrollTop > cursor_pos_top){zone.scrollTop=cursor_pos_top;}var cursor_pos_left=_$(\"cursor_pos\").cursor_left;var max_width_visible=zone.clientWidth+zone.scrollLeft;var miss_left=cursor_pos_left+10-max_width_visible;if(miss_left>0){zone.scrollLeft=zone.scrollLeft+miss_left+50;}\nelse if(zone.scrollLeft > cursor_pos_left){zone.scrollLeft=cursor_pos_left;}\nelse if(zone.scrollLeft==45){zone.scrollLeft=0;}};EA.Ä.check_undo=Ã(only_once){if(!eAs[Á.id])return Ì;if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë){var text=Á.Â.Ê;if(Á.previous.Æ<=1)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonDisabled',Ë);if(!Á.previous[Á.previous.Æ-1]||Á.previous[Á.previous.Æ-1][\"text\"] !=text){Á.previous.push({\"text\":text,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});if(Á.previous.Æ > Á.Å[\"max_undo\"]+1)Á.previous.shift();}if(Á.previous.Æ >=2)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);}if(!only_once)setTimeout(\"eA.check_undo()\",3000);};EA.Ä.undo=Ã(){if(Á.previous.Æ > 0){Á.getIESelection();Á.next.push({\"text\":Á.Â.Ê,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});var prev=Á.previous.pop();if(prev[\"text\"]==Á.Â.Ê&&Á.previous.Æ > 0)prev=Á.previous.pop();Á.Â.Ê=prev[\"text\"];Á.last_undo=prev[\"text\"];Á.area_select(prev[\"selStart\"],prev[\"selEnd\"]-prev[\"selStart\"]);Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}};EA.Ä.redo=Ã(){if(Á.next.Æ > 0){var next=Á.next.pop();Á.previous.push(next);Á.Â.Ê=next[\"text\"];Á.last_undo=next[\"text\"];Á.area_select(next[\"selStart\"],next[\"selEnd\"]-next[\"selStart\"]);Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}if(Á.next.Æ==0)Á.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);};EA.Ä.check_redo=Ã(){if(eA.next.Æ==0||eA.Â.Ê!=eA.last_undo){eA.next=[];eA.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);}\nelse{Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);}};EA.Ä.switchClass=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.oldClassName=element.className;element.className=class_name;}};EA.Ä.restoreAndSwitchClass=Ã(element,class_name){if(element !=null&&!element.classLock){Á.restoreClass(element);Á.switchClass(element,class_name);}};EA.Ä.restoreClass=Ã(element){if(element !=null&&element.oldClassName&&!element.classLock){element.className=element.oldClassName;element.oldClassName=null;}};EA.Ä.setClassLock=Ã(element,lock_state){if(element !=null)element.classLock=lock_state;};EA.Ä.switchClassSticky=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.className=class_name;element.oldClassName=class_name;}};EA.Ä.scroll_page=Ã(params){var dir=params[\"dir\"],shift_pressed=params[\"shift\"];var lines=Á.Â.Ê.split(\"\\n\");var new_pos=0,Æ=0,char_left=0,line_nb=0,curLine=0;var toScrollAmount=_$(\"result\").clientHeight-30;var nbLineToScroll=0,diff=0;if(dir==\"up\"){nbLineToScroll=Math.ceil(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i-diff > Á.É[\"line_start\"]-nbLineToScroll;i--){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"up\"){for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed)Æ=Á.É[\"selectionEnd\"]-new_pos-char_left;Á.area_select(new_pos+char_left,Æ);view=\"top\";}\nelse{view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-1-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed){start=Math.min(Á.É[\"selectionStart\"],new_pos+char_left);Æ=Math.max(new_pos+char_left,Á.É[\"selectionStart\"])-start;if(new_pos+char_left < Á.É[\"selectionStart\"])view=\"top\";}\nelse start=new_pos+char_left;Á.area_select(start,Æ);}}\nelse{var nbLineToScroll=Math.floor(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i+diff < Á.É[\"line_start\"]+nbLineToScroll;i++){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"down\"){view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-2+nbLineToScroll,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionStart\"]-new_pos);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]);Á.area_select(Math.min(Á.É[\"selectionStart\"],new_pos),Æ);}\nelse{Á.area_select(new_pos+char_left,0);}}\nelse{view=\"top\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+nbLineToScroll-1,lines.Æ,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionEnd\"]-new_pos-char_left);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"])-char_left-1;Á.area_select(Math.min(Á.É[\"selectionEnd\"],new_pos+char_left),Æ);if(new_pos+char_left > Á.É[\"selectionEnd\"])view=\"bottom\";}\nelse{Á.area_select(new_pos+char_left,0);}}}Á.check_line_selection();Á.scroll_to_view(view);};EA.Ä.start_resize=Ã(e){È.eAL.resize[\"id\"]=eA.id;È.eAL.resize[\"start_x\"]=(e)? e.pageX:event.x+document.body.scrollLeft;È.eAL.resize[\"start_y\"]=(e)? e.pageY:event.y+document.body.scrollTop;if(eA.isIE){eA.Â.focus();eA.getIESelection();}È.eAL.resize[\"selectionStart\"]=eA.Â.selectionStart;È.eAL.resize[\"selectionEnd\"]=eA.Â.selectionEnd;È.eAL.start_resize_area();};EA.Ä.toggle_full_screen=Ã(to){var t=Á,p=È,a=t.Â,html,frame,selStart,selEnd,old,icon;if(typeof(to)==\"undefined\")to=!t.fullscreen['isFull'];old=t.fullscreen['isFull'];t.fullscreen['isFull']=to;icon=_$(\"fullscreen\");selStart=t.Â.selectionStart;selEnd=t.Â.selectionEnd;html=p.document.getElementsByTagName(\"html\")[0];frame=p.document.getElementById(\"frame_\"+t.id);if(to&&to!=old){t.fullscreen['old_overflow']=p.get_css_property(html,\"overflow\");t.fullscreen['old_height']=p.get_css_property(html,\"height\");t.fullscreen['old_width']=p.get_css_property(html,\"width\");t.fullscreen['old_scrollTop']=html.scrollTop;t.fullscreen['old_scrollLeft']=html.scrollLeft;t.fullscreen['old_zIndex']=p.get_css_property(frame,\"z-index\");if(t.isOpera){html.Ç.height=\"100%\";html.Ç.width=\"100%\";}html.Ç.overflow=\"hidden\";html.scrollTop=0;html.scrollLeft=0;frame.Ç.position=\"absolute\";frame.Ç.width=html.clientWidth+\"px\";frame.Ç.height=html.clientHeight+\"px\";frame.Ç.display=\"block\";frame.Ç.zIndex=\"999999\";frame.Ç.top=\"0px\";frame.Ç.left=\"0px\";frame.Ç.top=\"-\"+p.calculeOffsetTop(frame)+\"px\";frame.Ç.left=\"-\"+p.calculeOffsetLeft(frame)+\"px\";t.switchClassSticky(icon,'editAreaButtonSelected',Ì);t.fullscreen['allow_resize']=t.resize_allowed;t.allow_resize(Ì);if(t.isFirefox){p.eAL.execCommand(t.id,\"update_size();\");t.area_select(selStart,selEnd-selStart);t.scroll_to_view();t.focus();}\nelse{setTimeout(\"È.eAL.execCommand('\"+t.id+\"','update_size();');eA.focus();\",10);}}\nelse if(to!=old){frame.Ç.position=\"static\";frame.Ç.zIndex=t.fullscreen['old_zIndex'];if(t.isOpera){html.Ç.height=\"auto\";html.Ç.width=\"auto\";html.Ç.overflow=\"auto\";}\nelse if(t.isIE&&p!=top){html.Ç.overflow=\"auto\";}\nelse{html.Ç.overflow=t.fullscreen['old_overflow'];}html.scrollTop=t.fullscreen['old_scrollTop'];html.scrollLeft=t.fullscreen['old_scrollLeft'];p.eAL.hide(t.id);p.eAL.show(t.id);t.switchClassSticky(icon,'editAreaButtonNormal',Ì);if(t.fullscreen['allow_resize'])t.allow_resize(t.fullscreen['allow_resize']);if(t.isFirefox){t.area_select(selStart,selEnd-selStart);setTimeout(\"eA.scroll_to_view();\",10);}}};EA.Ä.allow_resize=Ã(allow){var resize=_$(\"resize_area\");if(allow){resize.Ç.visibility=\"visible\";È.eAL.add_event(resize,\"mouseup\",eA.start_resize);}\nelse{resize.Ç.visibility=\"hidden\";È.eAL.remove_event(resize,\"mouseup\",eA.start_resize);}Á.resize_allowed=allow;};EA.Ä.change_syntax=Ã(new_syntax,is_waiting){if(new_syntax==Á.Å['syntax'])return Ë;var founded=Ì;for(var i=0;i<Á.syntax_list.Æ;i++){if(Á.syntax_list[i]==new_syntax)founded=Ë;}if(founded==Ë){if(!È.eAL.load_syntax[new_syntax]){if(!is_waiting)È.eAL.load_script(È.eAL.baseURL+\"reg_syntax/\"+new_syntax+\".js\");setTimeout(\"eA.change_syntax('\"+new_syntax+\"',Ë);\",100);Á.show_waiting_screen();}\nelse{if(!Á.allready_used_syntax[new_syntax]){È.eAL.init_syntax_regexp();Á.add_Ç(È.eAL.syntax[new_syntax][\"Çs\"]);Á.allready_used_syntax[new_syntax]=Ë;}var sel=_$(\"syntax_selection\");if(sel&&sel.Ê!=new_syntax){for(var i=0;i<sel.Æ;i++){if(sel.options[i].Ê&&sel.options[i].Ê==new_syntax)sel.options[i].selected=Ë;}}Á.Å['syntax']=new_syntax;Á.resync_highlight(Ë);Á.hide_waiting_screen();return Ë;}}return Ì;};EA.Ä.set_editable=Ã(is_editable){if(is_editable){document.body.className=\"\";Á.Â.readOnly=Ì;Á.is_editable=Ë;}\nelse{document.body.className=\"non_editable\";Á.Â.readOnly=Ë;Á.is_editable=Ì;}if(eAs[Á.id][\"displayed\"]==Ë)Á.update_size();};EA.Ä.toggle_word_wrap=Ã(){Á.set_word_wrap(!Á.Å['word_wrap']);};EA.Ä.set_word_wrap=Ã(to){var t=Á,a=t.Â;if(t.isOpera&&t.isOpera < 9.8){Á.Å['word_wrap']=Ì;t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonDisabled',Ë);return Ì;}if(to){wrap_mode='soft';Á.container.className+=' word_wrap';Á.container.Ç.width=\"\";Á.content_highlight.Ç.width=\"\";a.Ç.width=\"100%\";if(t.isIE&&t.isIE < 7){a.Ç.width=(a.offsetWidth-5)+\"px\";}t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonSelected',Ì);}\nelse{wrap_mode='off';Á.container.className=Á.container.className.replace(/word_wrap/g,'');t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonNormal',Ë);}Á.Â.previous_scrollWidth='';Á.Â.previous_scrollHeight='';a.wrap=wrap_mode;a.setAttribute('wrap',wrap_mode);if(!Á.isIE){var start=a.selectionStart,end=a.selectionEnd;var parNod=a.ÈNode,nxtSib=a.nextSibling;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);Á.area_select(start,end-start);}Á.Å['word_wrap']=to;Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.open_file=Ã(Å){if(Å['id']!=\"undefined\"){var id=Å['id'];var new_file={};new_file['id']=id;new_file['title']=id;new_file['text']=\"\";new_file['É']=\"\";new_file['last_text_to_highlight']=\"\";new_file['last_hightlighted_text']=\"\";new_file['previous']=[];new_file['next']=[];new_file['last_undo']=\"\";new_file['smooth_selection']=Á.Å['smooth_selection'];new_file['do_highlight']=Á.Å['start_highlight'];new_file['syntax']=Á.Å['syntax'];new_file['scroll_top']=0;new_file['scroll_left']=0;new_file['selection_start']=0;new_file['selection_end']=0;new_file['edited']=Ì;new_file['font_size']=Á.Å[\"font_size\"];new_file['font_family']=Á.Å[\"font_family\"];new_file['word_wrap']=Á.Å[\"word_wrap\"];new_file['toolbar']={'links':{},'selects':{}};new_file['compare_edited_text']=new_file['text'];Á.files[id]=new_file;Á.update_file(id,Å);Á.files[id]['compare_edited_text']=Á.files[id]['text'];var html_id='tab_file_'+encodeURIComponent(id);Á.filesIdAssoc[html_id]=id;Á.files[id]['html_id']=html_id;if(!_$(Á.files[id]['html_id'])&&id!=\"\"){Á.tab_browsing_area.Ç.display=\"block\";var elem=document.createElement('li');elem.id=Á.files[id]['html_id'];var close=\"<img src=\\\"\"+È.eAL.baseURL+\"images/close.gif\\\" title=\\\"\"+Á.get_translation('close_tab','word')+\"\\\" onclick=\\\"eA.execCommand('close_file',eA.filesIdAssoc['\"+html_id+\"']);return Ì;\\\" class=\\\"hidden\\\" onmouseover=\\\"Á.className=''\\\" onmouseout=\\\"Á.className='hidden'\\\" />\";elem.innerHTML=\"<a onclick=\\\"javascript:eA.execCommand('switch_to_file',eA.filesIdAssoc['\"+html_id+\"']);\\\" selec=\\\"none\\\"><b><span><strong class=\\\"edited\\\">*</strong>\"+Á.files[id]['title']+close+\"</span></b></a>\";_$('tab_browsing_list').appendChild(elem);var elem=document.createElement('text');Á.update_size();}if(id!=\"\")Á.execCommand('file_open',Á.files[id]);Á.switch_to_file(id,Ë);return Ë;}\nelse return Ì;};EA.Ä.close_file=Ã(id){if(Á.files[id]){Á.save_file(id);if(Á.execCommand('file_close',Á.files[id])!==Ì){var li=_$(Á.files[id]['html_id']);li.ÈNode.removeChild(li);if(id==Á.curr_file){var next_file=\"\";var is_next=Ì;for(var i in Á.files){if(is_next){next_file=i;break;}\nelse if(i==id)is_next=Ë;\nelse next_file=i;}Á.switch_to_file(next_file);}delete(Á.files[id]);Á.update_size();}}};EA.Ä.save_file=Ã(id){var t=Á,save,a_links,a_selects,save_butt,img,i;if(t.files[id]){var save=t.files[id];save['É']=t.É;save['last_text_to_highlight']=t.last_text_to_highlight;save['last_hightlighted_text']=t.last_hightlighted_text;save['previous']=t.previous;save['next']=t.next;save['last_undo']=t.last_undo;save['smooth_selection']=t.smooth_selection;save['do_highlight']=t.do_highlight;save['syntax']=t.Å['syntax'];save['text']=t.Â.Ê;save['scroll_top']=t.result.scrollTop;save['scroll_left']=t.result.scrollLeft;save['selection_start']=t.É[\"selectionStart\"];save['selection_end']=t.É[\"selectionEnd\"];save['font_size']=t.Å[\"font_size\"];save['font_family']=t.Å[\"font_family\"];save['word_wrap']=t.Å[\"word_wrap\"];save['toolbar']={'links':{},'selects':{}};a_links=_$(\"toolbar_1\").getElementsByTagName(\"a\");for(i=0;i<a_links.Æ;i++){if(a_links[i].getAttribute('fileSpecific')=='yes'){save_butt={};img=a_links[i].getElementsByTagName('img')[0];save_butt['classLock']=img.classLock;save_butt['className']=img.className;save_butt['oldClassName']=img.oldClassName;save['toolbar']['links'][a_links[i].id]=save_butt;}}a_selects=_$(\"toolbar_1\").getElementsByTagName(\"select\");for(i=0;i<a_selects.Æ;i++){if(a_selects[i].getAttribute('fileSpecific')=='yes'){save['toolbar']['selects'][a_selects[i].id]=a_selects[i].Ê;}}t.files[id]=save;return save;}return Ì;};EA.Ä.update_file=Ã(id,new_Ês){for(var i in new_Ês){Á.files[id][i]=new_Ês[i];}};EA.Ä.display_file=Ã(id){var t=Á,a=t.Â,new_file,a_lis,a_selects,a_links,a_options,i,j;if(id==''){a.readOnly=Ë;t.tab_browsing_area.Ç.display=\"none\";_$(\"no_file_selected\").Ç.display=\"block\";t.result.className=\"empty\";if(!t.files['']){t.open_file({id:''});}}\nelse if(typeof(t.files[id])=='undefined'){return Ì;}\nelse{t.result.className=\"\";a.readOnly=!t.is_editable;_$(\"no_file_selected\").Ç.display=\"none\";t.tab_browsing_area.Ç.display=\"block\";}t.check_redo(Ë);t.check_undo(Ë);t.curr_file=id;a_lis=t.tab_browsing_area.getElementsByTagName('li');for(i=0;i<a_lis.Æ;i++){if(a_lis[i].id==t.files[id]['html_id'])a_lis[i].className='selected';\nelse a_lis[i].className='';}new_file=t.files[id];a.Ê=new_file['text'];t.set_font(new_file['font_family'],new_file['font_size']);t.area_select(new_file['selection_start'],new_file['selection_end']-new_file['selection_start']);t.manage_size(Ë);t.result.scrollTop=new_file['scroll_top'];t.result.scrollLeft=new_file['scroll_left'];t.previous=new_file['previous'];t.next=new_file['next'];t.last_undo=new_file['last_undo'];t.check_redo(Ë);t.check_undo(Ë);t.execCommand(\"change_highlight\",new_file['do_highlight']);t.execCommand(\"change_syntax\",new_file['syntax']);t.execCommand(\"change_smooth_selection_mode\",new_file['smooth_selection']);t.execCommand(\"set_word_wrap\",new_file['word_wrap']);a_links=new_file['toolbar']['links'];for(i in a_links){if(img=_$(i).getElementsByTagName('img')[0]){img.classLock=a_links[i]['classLock'];img.className=a_links[i]['className'];img.oldClassName=a_links[i]['oldClassName'];}}a_selects=new_file['toolbar']['selects'];for(i in a_selects){a_options=_$(i).options;for(j=0;j<a_options.Æ;j++){if(a_options[j].Ê==a_selects[i])_$(i).options[j].selected=Ë;}}};EA.Ä.switch_to_file=Ã(file_to_show,force_refresh){if(file_to_show!=Á.curr_file||force_refresh){Á.save_file(Á.curr_file);if(Á.curr_file!='')Á.execCommand('file_switch_off',Á.files[Á.curr_file]);Á.display_file(file_to_show);if(file_to_show!='')Á.execCommand('file_switch_on',Á.files[file_to_show]);}};EA.Ä.get_file=Ã(id){if(id==Á.curr_file)Á.save_file(id);return Á.files[id];};EA.Ä.get_all_files=Ã(){tmp_files=Á.files;Á.save_file(Á.curr_file);if(tmp_files[''])delete(Á.files['']);return tmp_files;};EA.Ä.check_file_changes=Ã(){var id=Á.curr_file;if(Á.files[id]&&Á.files[id]['compare_edited_text']!=undefined){if(Á.files[id]['compare_edited_text'].Æ==Á.Â.Ê.Æ&&Á.files[id]['compare_edited_text']==Á.Â.Ê){if(Á.files[id]['edited']!=Ì)Á.set_file_edited_mode(id,Ì);}\nelse{if(Á.files[id]['edited']!=Ë)Á.set_file_edited_mode(id,Ë);}}};EA.Ä.set_file_edited_mode=Ã(id,to){if(Á.files[id]&&_$(Á.files[id]['html_id'])){var link=_$(Á.files[id]['html_id']).getElementsByTagName('a')[0];if(to==Ë){link.className='edited';}\nelse{link.className='';if(id==Á.curr_file)text=Á.Â.Ê;\nelse text=Á.files[id]['text'];Á.files[id]['compare_edited_text']=text;}Á.files[id]['edited']=to;}};EA.Ä.set_show_line_colors=Ã(new_Ê){Á.show_line_colors=new_Ê;if(new_Ê)Á.selection_field.className+=' show_colors';\nelse Á.selection_field.className=Á.selection_field.className.replace(/ show_colors/g,'');};var EA_keys={8:\"Retour arriere\",9:\"Tabulation\",12:\"Milieu(pave numerique)\",13:\"Entrer\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"Verr Maj\",27:\"Esc\",32:\"Space\",33:\"Page up\",34:\"Page down\",35:\"End\",36:\"Begin\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Impr ecran\",45:\"Inser\",46:\"Suppr\",91:\"Menu Demarrer Windows / touche pomme Mac\",92:\"Menu Demarrer Windows\",93:\"Menu contextuel Windows\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Verr Num\",145:\"Arret defil\"};Ã keyDown(e){if(!e){e=event;}for(var i in eA.plugins){if(typeof(eA.plugins[i].onkeydown)==\"Ã\"){if(eA.plugins[i].onkeydown(e)===Ì){if(eA.isIE)e.keyCode=0;return Ì;}}}var target_id=(e.target||e.srcElement).id;var use=Ì;if(EA_keys[e.keyCode])letter=EA_keys[e.keyCode];\nelse letter=String.fromCharCode(e.keyCode);var low_letter=letter.toLowerCase();if(letter==\"Page up\"&&!AltPressed(e)&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"up\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(letter==\"Page down\"&&!AltPressed(e)&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"down\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(eA.is_editable==Ì){return Ë;}\nelse if(letter==\"Tabulation\"&&target_id==\"Â\"&&!CtrlPressed(e)&&!AltPressed(e)){if(ShiftPressed(e))eA.execCommand(\"invert_tab_selection\");\nelse eA.execCommand(\"tab_selection\");use=Ë;if(eA.isOpera||(eA.isFirefox&&eA.isMac))setTimeout(\"eA.execCommand('focus');\",1);}\nelse if(letter==\"Entrer\"&&target_id==\"Â\"){if(eA.press_enter())use=Ë;}\nelse if(letter==\"Entrer\"&&target_id==\"area_search\"){eA.execCommand(\"area_search\");use=Ë;}\nelse  if(letter==\"Esc\"){eA.execCommand(\"close_all_inline_popup\",e);use=Ë;}\nelse if(CtrlPressed(e)&&!AltPressed(e)&&!ShiftPressed(e)){switch(low_letter){case \"f\":eA.execCommand(\"area_search\");use=Ë;break;case \"r\":eA.execCommand(\"area_replace\");use=Ë;break;case \"q\":eA.execCommand(\"close_all_inline_popup\",e);use=Ë;break;case \"h\":eA.execCommand(\"change_highlight\");use=Ë;break;case \"g\":setTimeout(\"eA.execCommand('go_to_line');\",5);use=Ë;break;case \"e\":eA.execCommand(\"show_help\");use=Ë;break;case \"z\":use=Ë;eA.execCommand(\"undo\");break;case \"y\":use=Ë;eA.execCommand(\"redo\");break;default:break;}}if(eA.next.Æ > 0){setTimeout(\"eA.check_redo();\",10);}setTimeout(\"eA.check_file_changes();\",10);if(use){if(eA.isIE)e.keyCode=0;return Ì;}return Ë;};Ã AltPressed(e){if(window.event){return(window.event.altKey);}\nelse{if(e.modifiers)return(e.altKey||(e.modifiers % 2));\nelse return e.altKey;}};Ã CtrlPressed(e){if(window.event){return(window.event.ctrlKey);}\nelse{return(e.ctrlKey||(e.modifiers==2)||(e.modifiers==3)||(e.modifiers>5));}};Ã ShiftPressed(e){if(window.event){return(window.event.shiftKey);}\nelse{return(e.shiftKey||(e.modifiers>3));}};	EA.Ä.show_search=Ã(){if(_$(\"area_search_replace\").Ç.visibility==\"visible\"){Á.hidden_search();}\nelse{Á.open_inline_popup(\"area_search_replace\");var text=Á.area_get_selection();var search=text.split(\"\\n\")[0];_$(\"area_search\").Ê=search;_$(\"area_search\").focus();}};EA.Ä.hidden_search=Ã(){Á.close_inline_popup(\"area_search_replace\");};EA.Ä.area_search=Ã(mode){if(!mode)mode=\"search\";_$(\"area_search_msg\").innerHTML=\"\";var search=_$(\"area_search\").Ê;Á.Â.focus();Á.Â.ÂFocused=Ë;var infos=Á.get_selection_infos();var start=infos[\"selectionStart\"];var pos=-1;var pos_begin=-1;var Æ=search.Æ;if(_$(\"area_search_replace\").Ç.visibility!=\"visible\"){Á.show_search();return;}if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}if(mode!=\"replace\"){if(_$(\"area_search_reg_exp\").checked)start++;\nelse start+=search.Æ;}if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);pos=infos[\"full_text\"].substr(start).search(reg);pos_begin=infos[\"full_text\"].search(reg);if(pos!=-1){pos+=start;Æ=infos[\"full_text\"].substr(start).match(reg)[0].Æ;}\nelse if(pos_begin!=-1){Æ=infos[\"full_text\"].match(reg)[0].Æ;}}\nelse{if(_$(\"area_search_match_case\").checked){pos=infos[\"full_text\"].indexOf(search,start);pos_begin=infos[\"full_text\"].indexOf(search);}\nelse{pos=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase(),start);pos_begin=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase());}}if(pos==-1&&pos_begin==-1){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");return;}\nelse if(pos==-1&&pos_begin !=-1){begin=pos_begin;_$(\"area_search_msg\").innerHTML=Á.get_translation(\"restart_search_at_begin\");}\nelse begin=pos;if(mode==\"replace\"&&pos==infos[\"indexOfCursor\"]){var replace=_$(\"area_replace\").Ê;var new_text=\"\";if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);new_text=infos[\"full_text\"].substr(0,begin)+infos[\"full_text\"].substr(start).replace(reg,replace);}\nelse{new_text=infos[\"full_text\"].substr(0,begin)+replace+infos[\"full_text\"].substr(begin+Æ);}Á.Â.Ê=new_text;Á.area_select(begin,Æ);Á.area_search();}\nelse Á.area_select(begin,Æ);};EA.Ä.area_replace=Ã(){Á.area_search(\"replace\");};EA.Ä.area_replace_all=Ã(){var base_text=Á.Â.Ê;var search=_$(\"area_search\").Ê;var replace=_$(\"area_replace\").Ê;if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}var new_text=\"\";var nb_change=0;if(_$(\"area_search_reg_exp\").checked){var opt=\"mg\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);nb_change=infos[\"full_text\"].match(reg).Æ;new_text=infos[\"full_text\"].replace(reg,replace);}\nelse{if(_$(\"area_search_match_case\").checked){var tmp_tab=base_text.split(search);nb_change=tmp_tab.Æ-1;new_text=tmp_tab.join(replace);}\nelse{var lower_Ê=base_text.toLowerCase();var lower_search=search.toLowerCase();var start=0;var pos=lower_Ê.indexOf(lower_search);while(pos!=-1){nb_change++;new_text+=Á.Â.Ê.substring(start,pos)+replace;start=pos+search.Æ;pos=lower_Ê.indexOf(lower_search,pos+1);}new_text+=Á.Â.Ê.substring(start);}}if(new_text==base_text){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");}\nelse{Á.Â.Ê=new_text;_$(\"area_search_msg\").innerHTML=\"<strong>\"+nb_change+\"</strong> \"+Á.get_translation(\"occurrence_replaced\");setTimeout(\"eA.Â.focus();eA.Â.ÂFocused=Ë;\",100);}}; EA.Ä.change_highlight=Ã(change_to){if(Á.Å[\"syntax\"].Æ==0&&change_to==Ì){Á.switchClassSticky(_$(\"highlight\"),'editAreaButtonDisabled',Ë);Á.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);return Ì;}if(Á.do_highlight==change_to)return Ì;Á.getIESelection();var pos_start=Á.Â.selectionStart;var pos_end=Á.Â.selectionEnd;if(Á.do_highlight===Ë||change_to==Ì)Á.disable_highlight();\nelse Á.enable_highlight();Á.Â.focus();Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;Á.setIESelection();};EA.Ä.disable_highlight=Ã(displayOnly){var t=Á,a=t.Â,new_Obj,old_class,new_class;t.selection_field.innerHTML=\"\";t.selection_field_text.innerHTML=\"\";t.content_highlight.Ç.visibility=\"hidden\";new_Obj=t.content_highlight.cloneNode(Ì);new_Obj.innerHTML=\"\";t.content_highlight.ÈNode.insertBefore(new_Obj,t.content_highlight);t.content_highlight.ÈNode.removeChild(t.content_highlight);t.content_highlight=new_Obj;old_class=È.getAttribute(a,\"class\");if(old_class){new_class=old_class.replace(\"hidden\",\"\");È.setAttribute(a,\"class\",new_class);}a.Ç.backgroundColor=\"transÈ\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonNormal',Ë);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ì;t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonSelected',Ë);if(typeof(t.smooth_selection_before_highlight)!=\"undefined\"&&t.smooth_selection_before_highlight===Ì){t.change_smooth_selection_mode(Ì);}};EA.Ä.enable_highlight=Ã(){var t=Á,a=t.Â,new_class;t.show_waiting_screen();t.content_highlight.Ç.visibility=\"visible\";new_class=È.getAttribute(a,\"class\")+\" hidden\";È.setAttribute(a,\"class\",new_class);if(t.isIE)a.Ç.backgroundColor=\"#FFFFFF\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonSelected',Ì);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonNormal',Ì);t.smooth_selection_before_highlight=t.smooth_selection;if(!t.smooth_selection)t.change_smooth_selection_mode(Ë);t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ë;t.resync_highlight();t.hide_waiting_screen();};EA.Ä.maj_highlight=Ã(infos){var debug_opti=\"\",tps_start=new Date().getTime(),tps_middle_opti=new Date().getTime();var t=Á,hightlighted_text,updated_highlight;var textToHighlight=infos[\"full_text\"],doSyntaxOpti=Ì,doHtmlOpti=Ì,stay_begin=\"\",stay_end=\"\",trace_new,trace_last;if(t.last_text_to_highlight==infos[\"full_text\"]&&t.resync_highlight!==Ë)return;if(t.reload_highlight===Ë){t.reload_highlight=Ì;}\nelse if(textToHighlight.Æ==0){textToHighlight=\"\\n \";}\nelse{changes=t.checkTextEvolution(t.last_text_to_highlight,textToHighlight);trace_new=t.get_syntax_trace(changes.newTextLine).replace(/\\r/g,'');trace_last=t.get_syntax_trace(changes.lastTextLine).replace(/\\r/g,'');doSyntaxOpti=(trace_new==trace_last);if(!doSyntaxOpti&&trace_new==\"\\n\"+trace_last&&/^[ \t\s]*\\n[ \t\s]*$/.test(changes.newText.replace(/\\r/g,''))&&changes.lastText==\"\"){doSyntaxOpti=Ë;}if(doSyntaxOpti){tps_middle_opti=new Date().getTime();stay_begin=t.last_hightlighted_text.split(\"\\n\").slice(0,changes.lineStart).join(\"\\n\");if(changes.lineStart>0)stay_begin+=\"\\n\";stay_end=t.last_hightlighted_text.split(\"\\n\").slice(changes.lineLastEnd+1).join(\"\\n\");if(stay_end.Æ>0)stay_end=\"\\n\"+stay_end;if(stay_begin.split('<span').Æ !=stay_begin.split('</span').Æ||stay_end.split('<span').Æ !=stay_end.split('</span').Æ){doSyntaxOpti=Ì;stay_end='';stay_begin='';}\nelse{if(stay_begin.Æ==0&&changes.posLastEnd==-1)changes.newTextLine+=\"\\n\";textToHighlight=changes.newTextLine;}}if(t.Å[\"debug\"]){var ch=changes;debug_opti=(doSyntaxOpti?\"Optimisation\":\"No optimisation\")+\" start:\"+ch.posStart+\"(\"+ch.lineStart+\")\"+\" end_new:\"+ch.posNewEnd+\"(\"+ch.lineNewEnd+\")\"+\" end_last:\"+ch.posLastEnd+\"(\"+ch.lineLastEnd+\")\"+\"\\nchanged_text:\"+ch.newText+\"=> trace:\"+trace_new+\"\\nchanged_last_text:\"+ch.lastText+\"=> trace:\"+trace_last+\"\\nchanged_line:\"+ch.newTextLine+\"\\nlast_changed_line:\"+ch.lastTextLine+\"\\nstay_begin:\"+stay_begin.slice(-100)+\"\\nstay_end:\"+stay_end.substr(0,100);+\"\\n\";}}tps_end_opti=new Date().getTime();updated_highlight=t.colorize_text(textToHighlight);tpsAfterReg=new Date().getTime();doSyntaxOpti=doHtmlOpti=Ì;if(doSyntaxOpti){try{var replacedBloc,i,nbStart='',nbEnd='',newHtml,ÆOld,ÆNew;replacedBloc=t.last_hightlighted_text.substring(stay_begin.Æ,t.last_hightlighted_text.Æ-stay_end.Æ);ÆOld=replacedBloc.Æ;ÆNew=updated_highlight.Æ;for(i=0;i < ÆOld&&i < ÆNew&&replacedBloc.charAt(i)==updated_highlight.charAt(i);i++){}nbStart=i;for(i=0;i+nbStart < ÆOld&&i+nbStart < ÆNew&&replacedBloc.charAt(ÆOld-i-1)==updated_highlight.charAt(ÆNew-i-1);i++){}nbEnd=i;lastHtml=replacedBloc.substring(nbStart,ÆOld-nbEnd);newHtml=updated_highlight.substring(nbStart,ÆNew-nbEnd);if(newHtml.indexOf('<span')==-1&&newHtml.indexOf('</span')==-1&&lastHtml.indexOf('<span')==-1&&lastHtml.indexOf('</span')==-1){var beginStr,nbOpendedSpan,nbClosedSpan,nbUnchangedChars,span,textNode;doHtmlOpti=Ë;beginStr=t.last_hightlighted_text.substr(0,stay_begin.Æ+nbStart);newHtml=newHtml.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');nbOpendedSpan=beginStr.split('<span').Æ-1;nbClosedSpan=beginStr.split('</span').Æ-1;span=t.content_highlight.getElementsByTagName('span')[ nbOpendedSpan ];ÈSpan=span;maxStartOffset=maxEndOffset=0;if(nbOpendedSpan==nbClosedSpan){while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'){ÈSpan=ÈSpan.ÈNode;}}\nelse{maxStartOffset=maxEndOffset=beginStr.Æ+1;nbClosed=beginStr.substr(Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1))).split('</span').Æ-1;while(nbClosed > 0){nbClosed--;ÈSpan=ÈSpan.ÈNode;}while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'&&(tmpMaxStartOffset=Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1)))<(tmpMaxEndOffset=Math.max(0,beginStr.lastIndexOf('</span',maxEndOffset-1)))){maxStartOffset=tmpMaxStartOffset;maxEndOffset=tmpMaxEndOffset;}}if(ÈSpan.ÈNode==t.content_highlight||ÈSpan.ÈNode.tagName=='PRE'){maxStartOffset=Math.max(0,beginStr.indexOf('<span'));}if(maxStartOffset==beginStr.Æ){nbSubSpanBefore=0;}\nelse{lastEndPos=Math.max(0,beginStr.lastIndexOf('>',maxStartOffset));nbSubSpanBefore=beginStr.substr(lastEndPos).split('<span').Æ-1;}if(nbSubSpanBefore==0){textNode=ÈSpan.firstChild;}\nelse{lastSubSpan=ÈSpan.getElementsByTagName('span')[ nbSubSpanBefore-1 ];while(lastSubSpan.ÈNode !=ÈSpan){lastSubSpan=lastSubSpan.ÈNode;}if(lastSubSpan.nextSibling==null||lastSubSpan.nextSibling.nodeType !=3){textNode=document.createTextNode('');lastSubSpan.ÈNode.insertBefore(textNode,lastSubSpan.nextSibling);}\nelse{textNode=lastSubSpan.nextSibling;}}if((lastIndex=beginStr.lastIndexOf('>'))==-1){nbUnchangedChars=beginStr.Æ;}\nelse{nbUnchangedChars=beginStr.substr(lastIndex+1).replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&').Æ;}if(t.isIE){nbUnchangedChars-=(beginStr.substr(beginStr.Æ-nbUnchangedChars).split(\"\\n\").Æ-1);textNode.replaceData(nbUnchangedChars,lastHtml.replace(/\\n/g,'').Æ,newHtml.replace(/\\n/g,''));}\nelse{textNode.replaceData(nbUnchangedChars,lastHtml.Æ,newHtml);}}}catch(e){doHtmlOpti=Ì;}}tpsAfterOpti2=new Date().getTime();hightlighted_text=stay_begin+updated_highlight+stay_end;if(!doHtmlOpti){var new_Obj=t.content_highlight.cloneNode(Ì);if((t.isIE&&t.isIE < 8)||(t.isOpera&&t.isOpera < 9.6))new_Obj.innerHTML=\"<pre><span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span></pre>\";\nelse new_Obj.innerHTML=\"<span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span>\";t.content_highlight.ÈNode.replaceChild(new_Obj,t.content_highlight);t.content_highlight=new_Obj;}t.last_text_to_highlight=infos[\"full_text\"];t.last_hightlighted_text=hightlighted_text;tps3=new Date().getTime();if(t.Å[\"debug\"]){t.debug.Ê=\"Tps optimisation \"+(tps_end_opti-tps_start)+\" | tps reg exp:\"+(tpsAfterReg-tps_end_opti)+\" | tps opti HTML:\"+(tpsAfterOpti2-tpsAfterReg)+' '+(doHtmlOpti ? 'yes':'no')+\" | tps update highlight content:\"+(tps3-tpsAfterOpti2)+\" | tpsTotal:\"+(tps3-tps_start)+\"(\"+tps3+\")\\n\"+debug_opti;}};EA.Ä.resync_highlight=Ã(reload_now){Á.reload_highlight=Ë;Á.last_text_to_highlight=\"\";Á.focus();if(reload_now)Á.check_line_selection(Ì);}; EA.Ä.comment_or_quote=Ã(){var new_class=\"\",close_tag=\"\",sy,arg,i;sy=È.eAL.syntax[eA.current_code_lang];arg=EA.Ä.comment_or_quote.arguments[0];for(i in sy[\"quotes\"]){if(arg.indexOf(i)==0){new_class=\"quotesmarks\";close_tag=sy[\"quotes\"][i];}}if(new_class.Æ==0){for(var i in sy[\"comments\"]){if(arg.indexOf(i)==0){new_class=\"comments\";close_tag=sy[\"comments\"][i];}}}if(close_tag==\"\\n\"){return \"µ__\"+new_class+\"__µ\"+arg.replace(/(\\r?\\n)?$/m,\"µ_END_µ$1\");}\nelse{reg=new RegExp(È.eAL.get_escaped_regexp(close_tag)+\"$\",\"m\");if(arg.search(reg)!=-1)return \"µ__\"+new_class+\"__µ\"+arg+\"µ_END_µ\";\nelse return \"µ__\"+new_class+\"__µ\"+arg;}};EA.Ä.get_syntax_trace=Ã(text){if(Á.Å[\"syntax\"].Æ>0&&È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"])return text.replace(È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"],\"$3\");};EA.Ä.colorize_text=Ã(text){text=\" \"+text;if(Á.Å[\"syntax\"].Æ>0)text=Á.apply_syntax(text,Á.Å[\"syntax\"]);return text.substr(1).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/µ_END_µ/g,\"</span>\").replace(/µ__([a-zA-Z0-9]+)__µ/g,\"<span class='$1'>\");};EA.Ä.apply_syntax=Ã(text,lang){var sy;Á.current_code_lang=lang;if(!È.eAL.syntax[lang])return text;sy=È.eAL.syntax[lang];if(sy[\"custom_regexp\"]['before']){for(var i in sy[\"custom_regexp\"]['before']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['before'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['before'][i]['regexp'],convert);}}if(sy[\"comment_or_quote_reg_exp\"]){text=text.replace(sy[\"comment_or_quote_reg_exp\"],Á.comment_or_quote);}if(sy[\"keywords_reg_exp\"]){for(var i in sy[\"keywords_reg_exp\"]){text=text.replace(sy[\"keywords_reg_exp\"][i],'µ__'+i+'__µ$2µ_END_µ');}}if(sy[\"delimiters_reg_exp\"]){text=text.replace(sy[\"delimiters_reg_exp\"],'µ__delimiters__µ$1µ_END_µ');}if(sy[\"operators_reg_exp\"]){text=text.replace(sy[\"operators_reg_exp\"],'µ__operators__µ$1µ_END_µ');}if(sy[\"custom_regexp\"]['after']){for(var i in sy[\"custom_regexp\"]['after']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['after'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['after'][i]['regexp'],convert);}}return text;};var editArea= eA;EditArea=EA;</script>".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false');
+editAreaLoader.template= "<!DOCTYPE html> <html lang=\"en\"> <head> <title>EditArea</title> <meta charset=utf-8\" /> <meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE9\"/> [__CSSRULES__] [__JSCODE__] </head> <body> <div id='editor'> <div class='area_toolbar' id='toolbar_1'>[__TOOLBAR__]</div> <div class='area_toolbar' id='tab_browsing_area'><ul id='tab_browsing_list' class='menu'> <li> </li> </ul></div> <div id='result'> <div id='no_file_selected'></div> <div id='container'> <div id='cursor_pos' class='edit_area_cursor'>&nbsp;</div> <div id='end_bracket' class='edit_area_cursor'>&nbsp;</div> <div id='selection_field'></div> <div id='line_number' selec='none'></div> <div id='content_highlight'></div> <div id='test_font_size'></div> <div id='selection_field_text'></div> <textarea id='textarea' wrap='off' onchange='editArea.execCommand(\"onchange\");' onfocus='javascript:editArea.textareaFocused=true;' onblur='javascript:editArea.textareaFocused=false;'> </textarea> </div> </div> <div class='area_toolbar' id='toolbar_2'> <table class='statusbar' cellspacing='0' cellpadding='0'> <tr> <td class='total' selec='none'>{$position}:</td> <td class='infos' selec='none'> {$line_abbr} <span  id='linePos'>0</span>, {$char_abbr} <span id='currPos'>0</span> </td> <td class='total' selec='none'>{$total}:</td> <td class='infos' selec='none'> {$line_abbr} <span id='nbLine'>0</span>, {$char_abbr} <span id='nbChar'>0</span> </td> <td class='resize'> <span id='resize_area'><img src='[__BASEURL__]images/statusbar_resize.gif' alt='resize' selec='none'></span> </td> </tr> </table> </div> </div> <div id='processing'> <div id='processing_text'> {$processing} </div> </div> <div id='area_search_replace' class='editarea_popup'> <table cellspacing='2' cellpadding='0' style='width: 100%'> <tr> <td selec='none'>{$search}</td> <td><input type='text' id='area_search' /></td> <td id='close_area_search_replace'> <a onclick='Javascript:editArea.execCommand(\"hidden_search\")'><img selec='none' src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a><br /> </tr><tr> <td selec='none'>{$replace}</td> <td><input type='text' id='area_replace' /></td> <td><img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,\"area_search_replace\", parent.frames[\"frame_\"+editArea.id]);'  src='[__BASEURL__]images/move.gif' alt='{$move_popup}' title='{$move_popup}' /></td> </tr> </table> <div class='button'> <input type='checkbox' id='area_search_match_case' /><label for='area_search_match_case' selec='none'>{$match_case}</label> <input type='checkbox' id='area_search_reg_exp' /><label for='area_search_reg_exp' selec='none'>{$reg_exp}</label> <br /> <a onclick='Javascript:editArea.execCommand(\"area_search\")' selec='none'>{$find_next}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace\")' selec='none'>{$replace}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace_all\")' selec='none'>{$replace_all}</a><br /> </div> <div id='area_search_msg' selec='none'></div> </div> <div id='edit_area_help' class='editarea_popup'> <div class='close_popup'> <a onclick='Javascript:editArea.execCommand(\"close_all_inline_popup\")'><img src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a> </div> <div><h2>Editarea [__EA_VERSION__]</h2><br /> <h3>{$shortcuts}:</h3> {$tab}: {$add_tab}<br /> {$shift}+{$tab}: {$remove_tab}<br /> {$ctrl}+f: {$search_command}<br /> {$ctrl}+r: {$replace_command}<br /> {$ctrl}+h: {$highlight}<br /> {$ctrl}+g: {$go_to_line}<br /> {$ctrl}+z: {$undo}<br /> {$ctrl}+y: {$redo}<br /> {$ctrl}+e: {$help}<br /> {$ctrl}+q, {$esc}: {$close_popup}<br /> {$accesskey} E: {$toggle}<br /> <br /> <em>{$about_notice}</em> <br /><div class='copyright'>&copy; Christophe Dolivet 2007-2010</div> </div> </div> </body> </html> ";
+editAreaLoader.iframe_css= "<style>body,html{margin:0;padding:0;height:100%;border:none;overflow:hidden;background-color:#FFF;}body,html,table,form,textarea{font:12px monospace,sans-serif;}#editor{border:solid #888 1px;overflow:hidden;}#result{z-index:4;overflow-x:auto;overflow-y:scroll;border-top:solid #888 1px;border-bottom:solid #888 1px;position:relative;clear:both;}#result.empty{overflow:hidden;}#container{overflow:hidden;border:solid blue 0;position:relative;z-index:10;padding:0 5px 0 45px;}#textarea{position:relative;top:0;left:0;margin:0;padding:0;width:100%;height:100%;overflow:hidden;z-index:7;border-width:0;background-color:transparent;resize:none;}#textarea,#textarea:hover{outline:none;}#content_highlight{white-space:pre;margin:0;padding:0;position:absolute;z-index:4;overflow:visible;}#selection_field,#selection_field_text{margin:0;background-color:#E1F2F9;position:absolute;z-index:5;top:-100px;padding:0;white-space:pre;overflow:hidden;}#selection_field.show_colors {z-index:3;background-color:#EDF9FC;}#selection_field strong{font-weight:normal;}#selection_field.show_colors *,#selection_field_text * {visibility:hidden;}#selection_field_text{background-color:transparent;}#selection_field_text strong{font-weight:normal;background-color:#3399FE;color:#FFF;visibility:visible;}#container.word_wrap #content_highlight,#container.word_wrap #selection_field,#container.word_wrap #selection_field_text,#container.word_wrap #test_font_size{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:99%;}#line_number{position:absolute;overflow:hidden;border-right:solid black 1px;z-index:8;width:38px;padding:0 5px 0 0;margin:0 0 0 -45px;text-align:right;color:#AAAAAA;}#test_font_size{padding:0;margin:0;visibility:hidden;position:absolute;white-space:pre;}pre{margin:0;padding:0;}.hidden{opacity:0.2;filter:alpha(opacity=20);}#result .edit_area_cursor{position:absolute;z-index:6;background-color:#FF6633;top:-100px;margin:0;}#result .edit_area_selection_field .overline{background-color:#996600;}.editarea_popup{border:solid 1px #888888;background-color:#ECE9D8;width:250px;padding:4px;position:absolute;visibility:hidden;z-index:15;top:-500px;}.editarea_popup,.editarea_popup table{font-family:sans-serif;font-size:10pt;}.editarea_popup img{border:0;}.editarea_popup .close_popup{float:right;line-height:16px;border:0;padding:0;}.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{margin:0;padding:0;}.editarea_popup .copyright{text-align:right;}div#area_search_replace{}div#area_search_replace img{border:0;}div#area_search_replace div.button{text-align:center;line-height:1.7em;}div#area_search_replace .button a{cursor:pointer;border:solid 1px #888888;background-color:#DEDEDE;text-decoration:none;padding:0 2px;color:#000000;white-space:nowrap;}div#area_search_replace a:hover{background-color:#EDEDED;}div#area_search_replace  #move_area_search_replace{cursor:move;border:solid 1px #888;}div#area_search_replace  #close_area_search_replace{text-align:right;vertical-align:top;white-space:nowrap;}div#area_search_replace  #area_search_msg{height:18px;overflow:hidden;border-top:solid 1px #888;margin-top:3px;}#edit_area_help{width:350px;}#edit_area_help div.close_popup{float:right;}.area_toolbar{width:100%;margin:0;padding:0;background-color:#ECE9D8;text-align:center;}.area_toolbar,.area_toolbar table{font:11px sans-serif;}.area_toolbar img{border:0;vertical-align:middle;}.area_toolbar input{margin:0;padding:0;}.area_toolbar select{font-family:'MS Sans Serif',sans-serif,Verdana,Arial;font-size:7pt;font-weight:normal;margin:2px 0 0 0 ;padding:0;vertical-align:top;background-color:#F0F0EE;}table.statusbar{width:100%;}.area_toolbar td.infos{text-align:center;width:130px;border-right:solid 1px #888;border-width:0 1px 0 0;padding:0;}.area_toolbar td.total{text-align:right;width:50px;padding:0;}.area_toolbar td.resize{text-align:right;}.area_toolbar span#resize_area{cursor:nw-resize;visibility:hidden;}.editAreaButtonNormal,.editAreaButtonOver,.editAreaButtonDown,.editAreaSeparator,.editAreaSeparatorLine,.editAreaButtonDisabled,.editAreaButtonSelected {border:0; margin:0; padding:0; background:transparent;margin-top:0;margin-left:1px;padding:0;}.editAreaButtonNormal {border:1px solid #ECE9D8 !important;cursor:pointer;}.editAreaButtonOver {border:1px solid #0A246A !important;cursor:pointer;background-color:#B6BDD2;}.editAreaButtonDown {cursor:pointer;border:1px solid #0A246A !important;background-color:#8592B5;}.editAreaButtonSelected {border:1px solid #C0C0BB !important;cursor:pointer;background-color:#F4F2E8;}.editAreaButtonDisabled {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;border:1px solid #F0F0EE !important;cursor:pointer;}.editAreaSeparatorLine {margin:1px 2px;background-color:#C0C0BB;width:2px;height:18px;}#processing{display:none;background-color:#ECE9D8;border:solid #888 1px;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;text-align:center;}#processing_text{position:absolute;left:50%;top:50%;width:200px;height:20px;margin-left:-100px;margin-top:-10px;text-align:center;}#tab_browsing_area{display:none;background-color:#CCC9A8;border-top:1px solid #888;text-align:left;margin:0;}#tab_browsing_list {padding:0;margin:0;list-style-type:none;white-space:nowrap;}#tab_browsing_list li {float:left;margin:-1px;}#tab_browsing_list a {position:relative;display:block;text-decoration:none;float:left;cursor:pointer;line-height:14px;}#tab_browsing_list a span {display:block;color:#000;background:#ECE9D8;border:1px solid #888;border-width:1px 1px 0;text-align:center;padding:2px 2px 1px 4px;position:relative;}#tab_browsing_list a b {display:block;border-bottom:2px solid #617994;}#tab_browsing_list a .edited {display:none;}#tab_browsing_list a.edited .edited {display:inline;}#tab_browsing_list a img{margin-left:7px;}#tab_browsing_list a.edited img{margin-left:3px;}#tab_browsing_list a:hover span {background:#F4F2E8;border-color:#0A246A;}#tab_browsing_list .selected a span{background:#046380;color:#FFF;}#no_file_selected{height:100%;width:150%;background:#CCC;display:none;z-index:20;position:absolute;}.non_editable #editor{border-width:0 1px;}.non_editable .area_toolbar{display:none;}#auto_completion_area{background:#FFF;border:solid 1px #888;position:absolute;z-index:15;width:280px;height:180px;overflow:auto;display:none;}#auto_completion_area a,#auto_completion_area a:visited{display:block;padding:0 2px 1px;color:#000;text-decoration:none;}#auto_completion_area a:hover,#auto_completion_area a:focus,#auto_completion_area a.focus{background:#D6E1FE;text-decoration:none;}#auto_completion_area ul{margin:0;padding:0;list-style:none inside;}#auto_completion_area li{padding:0;}#auto_completion_area .prefix{font-style:italic;padding:0 3px;}</style>";
Index: trunk/include/editarea/images/autocompletion.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/autocompletion.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/fullscreen.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/fullscreen.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/go_to_line.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/go_to_line.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/help.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/highlight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/highlight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/index.php
===================================================================
--- trunk/include/editarea/images/index.php	(nonexistent)
+++ trunk/include/editarea/images/index.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         include
+ * @author            Christophe Dolivet (EditArea), Christian Sommer (WB wrapper)
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent directory listing
+header('Location: ../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/include/editarea/images/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/editarea/images/load.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/load.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/move.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/move.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/newdocument.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/newdocument.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/opacity.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/editarea/images/opacity.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/editarea/images/processing.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/processing.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/redo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/redo.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/reset_highlight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/reset_highlight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/save.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/save.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/search.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/smooth_selection.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/smooth_selection.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/spacer.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/spacer.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/statusbar_resize.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/statusbar_resize.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/undo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/undo.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/images/word_wrap.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/editarea/images/word_wrap.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/editarea/index.php
===================================================================
--- trunk/include/editarea/index.php	(nonexistent)
+++ trunk/include/editarea/index.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         include
+ * @author            Christophe Dolivet (EditArea), Christian Sommer (WB wrapper)
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent directory listing
+header('Location: ../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/include/editarea/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/editarea/langs/bg.js
===================================================================
--- trunk/include/editarea/langs/bg.js	(nonexistent)
+++ trunk/include/editarea/langs/bg.js	(revision 2)
@@ -0,0 +1,54 @@
+/*
+ *	Bulgarian translation
+ *	Author:		Valentin Hristov
+ *	Company:	SOFTKIT Bulgarian
+ *	Site:		http://www.softkit-bg.com
+ */
+editAreaLoader.lang["bg"]={
+new_document: "нов документ",
+search_button: "търсене и замяна",
+search_command: "търси следващия / отвори прозорец с търсачка",
+search: "търсене",
+replace: "замяна",
+replace_command: "замяна / отвори прозорец с търсачка",
+find_next: "намери следващия",
+replace_all: "замени всички",
+reg_exp: "реголярни изрази",
+match_case: "чуствителен към регистъра",
+not_found: "няма резултат.",
+occurrence_replaced: "замяната е осъществена.",
+search_field_empty: "Полето за търсене е празно",
+restart_search_at_begin: "До края на документа. Почни с началото.",
+move_popup: "премести прозореца с търсачката",
+font_size: "--Размер на шрифта--",
+go_to_line: "премени към реда",
+go_to_line_prompt: "премени към номера на реда:",
+undo: "отмени",
+redo: "върни",
+change_smooth_selection: "включи/изключи някой от функциите за преглед (по красиво, но повече натоварва)",
+highlight: "превключване на оцветяване на синтаксиса включена/изключена",
+reset_highlight: "въстанови оцветяване на синтаксиса (ако не е синхронизиран с текста)",
+word_wrap: "режим на пренасяне на дълги редове",
+help: "за програмата",
+save: "съхрани",
+load: "зареди",
+line_abbr: "Стр",
+char_abbr: "Стлб",
+position: "Позиция",
+total: "Всичко",
+close_popup: "затвори прозореца",
+shortcuts: "Бързи клавиши",
+add_tab: "добави табулация в текста",
+remove_tab: "премахни табулацията в текста",
+about_notice: "Внимание: използвайте функцията оцветяване на синтаксиса само за малки текстове",
+toggle: "Превключи редактор",
+accesskey: "Бърз клавиш",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Зареждане...",
+fullscreen: "на цял екран",
+syntax_selection: "--Синтаксис--",
+close_tab: "Затвори файла"
+};
Index: trunk/include/editarea/langs/cs.js
===================================================================
--- trunk/include/editarea/langs/cs.js	(nonexistent)
+++ trunk/include/editarea/langs/cs.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["cs"]={
+new_document: "Nový dokument",
+search_button: "Najdi a nahraď",
+search_command: "Hledej další / otevři vyhledávací pole",
+search: "Hledej",
+replace: "Nahraď",
+replace_command: "Nahraď / otevři vyhledávací pole",
+find_next: "Najdi další",
+replace_all: "Nahraď vše",
+reg_exp: "platné výrazy",
+match_case: "vyhodnocené výrazy",
+not_found: "nenalezené.",
+occurrence_replaced: "výskyty nahrazené.",
+search_field_empty: "Pole vyhledávání je prázdné",
+restart_search_at_begin: "Dosažen konec souboru, začínám od začátku.",
+move_popup: "Přesuň vyhledávací okno",
+font_size: "--Velikost textu--",
+go_to_line: "Přejdi na řádek",
+go_to_line_prompt: "Přejdi na řádek:",
+undo: "krok zpět",
+redo: "znovu",
+change_smooth_selection: "Povolit nebo zakázat některé ze zobrazených funkcí (účelnější zobrazení požaduje větší zatížení procesoru)",
+highlight: "Zvýrazňování syntaxe zap./vyp.",
+reset_highlight: "Obnovit zvýraznění (v případě nesrovnalostí)",
+word_wrap: "toggle word wrapping mode",
+help: "O programu",
+save: "Uložit",
+load: "Otevřít",
+line_abbr: "Ř.",
+char_abbr: "S.",
+position: "Pozice",
+total: "Celkem",
+close_popup: "Zavřít okno",
+shortcuts: "Zkratky",
+add_tab: "Přidat tabulování textu",
+remove_tab: "Odtsranit tabulování textu",
+about_notice: "Upozornění! Funkce zvýrazňování textu je k dispozici pouze pro malý text",
+toggle: "Přepnout editor",
+accesskey: "Přístupová klávesa",
+tab: "Záložka",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Zpracovávám ...",
+fullscreen: "Celá obrazovka",
+syntax_selection: "--vyber zvýrazňovač--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/de.js
===================================================================
--- trunk/include/editarea/langs/de.js	(nonexistent)
+++ trunk/include/editarea/langs/de.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["de"]={
+new_document: "Neues Dokument",
+search_button: "Suchen und Ersetzen",
+search_command: "Weitersuchen / &ouml;ffne Suchfeld",
+search: "Suchen",
+replace: "Ersetzen",
+replace_command: "Ersetzen / &ouml;ffne Suchfeld",
+find_next: "Weitersuchen",
+replace_all: "Ersetze alle Treffer",
+reg_exp: "regul&auml;re Ausdr&uuml;cke",
+match_case: "passt auf den Begriff<br />",
+not_found: "Nicht gefunden.",
+occurrence_replaced: "Die Vorkommen wurden ersetzt.",
+search_field_empty: "Leeres Suchfeld",
+restart_search_at_begin: "Ende des zu durchsuchenden Bereiches erreicht. Es wird die Suche von Anfang an fortgesetzt.", //find a shorter translation
+move_popup: "Suchfenster bewegen",
+font_size: "--Schriftgr&ouml;&szlig;e--",
+go_to_line: "Gehe zu Zeile",
+go_to_line_prompt: "Gehe zu Zeilennummmer:",
+undo: "R&uuml;ckg&auml;ngig",
+redo: "Wiederherstellen",
+change_smooth_selection: "Aktiviere/Deaktiviere einige Features (weniger Bildschirmnutzung aber mehr CPU-Belastung)",
+highlight: "Syntax Highlighting an- und ausschalten",
+reset_highlight: "Highlighting zur&uuml;cksetzen (falls mit Text nicht konform)",
+word_wrap: "Toggle word wrapping mode",
+help: "Info",
+save: "Speichern",
+load: "&Ouml;ffnen",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Position",
+total: "Gesamt",
+close_popup: "Popup schlie&szlig;en",
+shortcuts: "Shortcuts",
+add_tab: "Tab zum Text hinzuf&uuml;gen",
+remove_tab: "Tab aus Text entfernen",
+about_notice: "Bemerkung: Syntax Highlighting ist nur f&uuml;r kurze Texte",
+toggle: "Editor an- und ausschalten",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "In Bearbeitung...",
+fullscreen: "Full-Screen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/dk.js
===================================================================
--- trunk/include/editarea/langs/dk.js	(nonexistent)
+++ trunk/include/editarea/langs/dk.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["dk"]={
+new_document: "nyt tomt dokument",
+search_button: "s&oslash;g og erstat",
+search_command: "find n&aelig;ste / &aring;ben s&oslash;gefelt",
+search: "s&oslash;g",
+replace: "erstat",
+replace_command: "erstat / &aring;ben s&oslash;gefelt",
+find_next: "find n&aelig;ste",
+replace_all: "erstat alle",
+reg_exp: "regular expressions",
+match_case: "forskel på store/sm&aring; bogstaver<br />",
+not_found: "not found.",
+occurrence_replaced: "occurences replaced.",
+search_field_empty: "Search field empty",
+restart_search_at_begin: "End of area reached. Restart at begin.",
+move_popup: "flyt søgepopup",
+font_size: "--Skriftstørrelse--",
+go_to_line: "g&aring; til linie",
+go_to_line_prompt: "gå til linienummer:",
+undo: "fortryd",
+redo: "gentag",
+change_smooth_selection: "sl&aring; display funktioner til/fra (smartere display men mere CPU kr&aelig;vende)",
+highlight: "sl&aring; syntax highlight til/fra",
+reset_highlight: "nulstil highlight (hvis den er desynkroniseret fra teksten)",
+word_wrap: "toggle word wrapping mode",
+help: "om",
+save: "gem",
+load: "hent",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Position",
+total: "Total",
+close_popup: "luk popup",
+shortcuts: "Genveje",
+add_tab: "tilf&oslash;j tabulation til tekst",
+remove_tab: "fjern tabulation fra tekst",
+about_notice: "Husk: syntax highlight funktionen b&oslash;r kun bruge til sm&aring; tekster",
+toggle: "Sl&aring; editor til / fra",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Skift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Processing...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/en.js
===================================================================
--- trunk/include/editarea/langs/en.js	(nonexistent)
+++ trunk/include/editarea/langs/en.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["en"]={
+new_document: "new empty document",
+search_button: "search and replace",
+search_command: "search next / open search area",
+search: "search",
+replace: "replace",
+replace_command: "replace / open search area",
+find_next: "find next",
+replace_all: "replace all",
+reg_exp: "regular expressions",
+match_case: "match case",
+not_found: "not found.",
+occurrence_replaced: "occurences replaced.",
+search_field_empty: "Search field empty",
+restart_search_at_begin: "End of area reached. Restart at begin.",
+move_popup: "move search popup",
+font_size: "--Font size--",
+go_to_line: "go to line",
+go_to_line_prompt: "go to line number:",
+undo: "undo",
+redo: "redo",
+change_smooth_selection: "enable/disable some display features (smarter display but more CPU charge)",
+highlight: "toggle syntax highlight on/off",
+reset_highlight: "reset highlight (if desyncronized from text)",
+word_wrap: "toggle word wrapping mode",
+help: "about",
+save: "save",
+load: "load",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Position",
+total: "Total",
+close_popup: "close popup",
+shortcuts: "Shortcuts",
+add_tab: "add tabulation to text",
+remove_tab: "remove tabulation to text",
+about_notice: "Notice: syntax highlight function is only for small text",
+toggle: "Toggle editor",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Processing...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/eo.js
===================================================================
--- trunk/include/editarea/langs/eo.js	(nonexistent)
+++ trunk/include/editarea/langs/eo.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["eo"]={
+new_document: "nova dokumento (vakigas la enhavon)",
+search_button: "ser&#265;i / anstata&#365;igi",
+search_command: "pluser&#265;i / malfermi la ser&#265;o-fenestron",
+search: "ser&#265;i",
+replace: "anstata&#365;igi",
+replace_command: "anstata&#365;igi / malfermi la ser&#265;o-fenestron",
+find_next: "ser&#265;i",
+replace_all: "anstata&#365;igi &#265;ion",
+reg_exp: "regula esprimo",
+match_case: "respekti la usklecon",
+not_found: "ne trovita.",
+occurrence_replaced: "anstata&#365;igoj plenumitaj.",
+search_field_empty: "La kampo estas malplena.",
+restart_search_at_begin: "Fino de teksto &#285;isrirata, &#265;u da&#365;rigi el la komenco?",
+move_popup: "movi la ser&#265;o-fenestron",
+font_size: "--Tipara grando--",
+go_to_line: "iri al la linio",
+go_to_line_prompt: "iri al la linio numero:",
+undo: "rezigni",
+redo: "refari",
+change_smooth_selection: "ebligi/malebligi la funkcioj de vidigo (pli bona vidigo, sed pli da &#349;ar&#285;o de la &#265;eforgano)",
+highlight: "ebligi/malebligi la sintaksan kolorigon",
+reset_highlight: "repravalorizi la sintaksan kolorigon (se malsinkronigon de la teksto)",
+word_wrap: "toggle word wrapping mode",
+help: "pri",
+save: "registri",
+load: "&#349;ar&#285;i",
+line_abbr: "Ln",
+char_abbr: "Sg",
+position: "Pozicio",
+total: "Sumo",
+close_popup: "fermi la &#349;prucfenestron",
+shortcuts: "Fulmoklavo",
+add_tab: "aldoni tabon en la tekston",
+remove_tab: "forigi tablon el la teksto",
+about_notice: "Noto: la sintaksa kolorigo estas nur prikalkulita por mallongaj tekstoj.",
+toggle: "baskuligi la redaktilon",
+accesskey: "Fulmoklavo",
+tab: "Tab",
+shift: "Maj",
+ctrl: "Ktrl",
+esc: "Esk",
+processing: "&#349;argante...",
+fullscreen: "plenekrane",
+syntax_selection: "--Sintakso--",
+close_tab: "Fermi la dosieron"
+};
\ No newline at end of file
Index: trunk/include/editarea/langs/es.js
===================================================================
--- trunk/include/editarea/langs/es.js	(nonexistent)
+++ trunk/include/editarea/langs/es.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["es"]={
+new_document: "nuevo documento vacío",
+search_button: "buscar y reemplazar",
+search_command: "buscar siguiente / abrir área de búsqueda",
+search: "buscar",
+replace: "reemplazar",
+replace_command: "reemplazar / abrir área de búsqueda",
+find_next: "encontrar siguiente",
+replace_all: "reemplazar todos",
+reg_exp: "expresiones regulares",
+match_case: "coincidir capitalización",
+not_found: "no encontrado.",
+occurrence_replaced: "ocurrencias reemplazadas.",
+search_field_empty: "Campo de búsqueda vacío",
+restart_search_at_begin: "Se ha llegado al final del área. Se va a seguir desde el principio.",
+move_popup: "mover la ventana de búsqueda",
+font_size: "--Tamaño de la fuente--",
+go_to_line: "ir a la línea",
+go_to_line_prompt: "ir a la línea número:",
+undo: "deshacer",
+redo: "rehacer",
+change_smooth_selection: "activar/desactivar algunas características de visualización (visualización más inteligente pero más carga de CPU)",
+highlight: "intercambiar resaltado de sintaxis",
+reset_highlight: "reinicializar resaltado (si no esta sincronizado con el texto)",
+word_wrap: "toggle word wrapping mode",
+help: "acerca",
+save: "guardar",
+load: "cargar",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Posición",
+total: "Total",
+close_popup: "recuadro de cierre",
+shortcuts: "Atajos",
+add_tab: "añadir tabulado al texto",
+remove_tab: "borrar tabulado del texto",
+about_notice: "Aviso: el resaltado de sintaxis sólo funciona para texto pequeño",
+toggle: "Cambiar editor",
+accesskey: "Tecla de acceso",
+tab: "Tab",
+shift: "Mayúsc",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Procesando...",
+fullscreen: "pantalla completa",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/fi.js
===================================================================
--- trunk/include/editarea/langs/fi.js	(nonexistent)
+++ trunk/include/editarea/langs/fi.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["fi"]={
+new_document: "uusi tyhjä dokumentti",
+search_button: "etsi ja korvaa",
+search_command: "etsi seuraava / avaa etsintävalikko",
+search: "etsi",
+replace: "korvaa",
+replace_command: "korvaa / avaa etsintävalikko",
+find_next: "etsi seuraava",
+replace_all: "korvaa kaikki",
+reg_exp: "säännölliset lausekkeet",
+match_case: "täsmää kirjainkokoon",
+not_found: "ei löytynyt.",
+occurrence_replaced: "esiintymää korvattu.",
+search_field_empty: "Haettava merkkijono on tyhjä",
+restart_search_at_begin: "Alueen loppu saavutettiin. Aloitetaan alusta.",
+move_popup: "siirrä etsintävalikkoa",
+font_size: "--Fontin koko--",
+go_to_line: "siirry riville",
+go_to_line_prompt: "mene riville:",
+undo: "peruuta",
+redo: "tee uudelleen",
+change_smooth_selection: "kytke/sammuta joitakin näyttötoimintoja (Älykkäämpi toiminta, mutta suurempi CPU kuormitus)",
+highlight: "kytke syntaksikorostus päälle/pois",
+reset_highlight: "resetoi syntaksikorostus (jos teksti ei ole synkassa korostuksen kanssa)",
+word_wrap: "toggle word wrapping mode",
+help: "tietoja",
+save: "tallenna",
+load: "lataa",
+line_abbr: "Rv",
+char_abbr: "Pos",
+position: "Paikka",
+total: "Yhteensä",
+close_popup: "sulje valikko",
+shortcuts: "Pikatoiminnot",
+add_tab: "lisää sisennys tekstiin",
+remove_tab: "poista sisennys tekstistä",
+about_notice: "Huomautus: syntaksinkorostus toimii vain pienelle tekstille",
+toggle: "Kytke editori",
+accesskey: "Pikanäppäin",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Odota...",
+fullscreen: "koko ruutu",
+syntax_selection: "--Syntaksi--",
+close_tab: "Sulje tiedosto"
+};
\ No newline at end of file
Index: trunk/include/editarea/langs/fr.js
===================================================================
--- trunk/include/editarea/langs/fr.js	(nonexistent)
+++ trunk/include/editarea/langs/fr.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["fr"]={
+new_document: "nouveau document (efface le contenu)",
+search_button: "rechercher / remplacer",
+search_command: "rechercher suivant / ouvrir la fen&ecirc;tre de recherche",
+search: "rechercher",
+replace: "remplacer",
+replace_command: "remplacer / ouvrir la fen&ecirc;tre de recherche",
+find_next: "rechercher",
+replace_all: "tout remplacer",
+reg_exp: "expr. r&eacute;guli&egrave;re",
+match_case: "respecter la casse",
+not_found: "pas trouv&eacute;.",
+occurrence_replaced: "remplacements &eacute;ffectu&eacute;s.",
+search_field_empty: "Le champ de recherche est vide.",
+restart_search_at_begin: "Fin du texte atteint, poursuite au d&eacute;but.",
+move_popup: "d&eacute;placer la fen&ecirc;tre de recherche",
+font_size: "--Taille police--",
+go_to_line: "aller &agrave; la ligne",
+go_to_line_prompt: "aller a la ligne numero:",
+undo: "annuler",
+redo: "refaire",
+change_smooth_selection: "activer/d&eacute;sactiver des fonctions d'affichage (meilleur affichage mais plus de charge processeur)",
+highlight: "activer/d&eacute;sactiver la coloration syntaxique",
+reset_highlight: "r&eacute;initialiser la coloration syntaxique (si d&eacute;syncronis&eacute;e du texte)",
+word_wrap: "activer/d&eacute;sactiver les retours &agrave; la ligne automatiques",
+help: "&agrave; propos",
+save: "sauvegarder",
+load: "charger",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Position",
+total: "Total",
+close_popup: "fermer le popup",
+shortcuts: "Racourcis clavier",
+add_tab: "ajouter une tabulation dans le texte",
+remove_tab: "retirer une tabulation dans le texte",
+about_notice: "Note: la coloration syntaxique n'est pr&eacute;vue que pour de courts textes.",
+toggle: "basculer l'&eacute;diteur",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Maj",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "chargement...",
+fullscreen: "plein &eacute;cran",
+syntax_selection: "--Syntaxe--",
+close_tab: "Fermer le fichier"
+};
Index: trunk/include/editarea/langs/hr.js
===================================================================
--- trunk/include/editarea/langs/hr.js	(nonexistent)
+++ trunk/include/editarea/langs/hr.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["hr"]={
+new_document: "Novi dokument",
+search_button: "Traži i izmijeni",
+search_command: "Traži dalje / Otvori prozor za traženje",
+search: "Traži",
+replace: "Izmijeni",
+replace_command: "Izmijeni / Otvori prozor za traženje",
+find_next: "Traži dalje",
+replace_all: "Izmjeni sve",
+reg_exp: "Regularni izrazi",
+match_case: "Bitna vel. slova",
+not_found: "nije naðeno.",
+occurrence_replaced: "izmjenjenih.",
+search_field_empty: "Prazno polje za traženje!",
+restart_search_at_begin: "Došao do kraja. Poèeo od poèetka.",
+move_popup: "Pomakni prozor",
+font_size: "--Velièina teksta--",
+go_to_line: "Odi na redak",
+go_to_line_prompt: "Odi na redak:",
+undo: "Vrati natrag",
+redo: "Napravi ponovo",
+change_smooth_selection: "Ukljuèi/iskljuèi neke moguænosti prikaza (pametniji prikaz, ali zagušeniji CPU)",
+highlight: "Ukljuèi/iskljuèi bojanje sintakse",
+reset_highlight: "Ponovi kolorizaciju (ako je nesinkronizirana s tekstom)",
+word_wrap: "toggle word wrapping mode",
+help: "O edit_area",
+save: "Spremi",
+load: "Uèitaj",
+line_abbr: "Ln",
+char_abbr: "Zn",
+position: "Pozicija",
+total: "Ukupno",
+close_popup: "Zatvori prozor",
+shortcuts: "Kratice",
+add_tab: "Dodaj tabulaciju",
+remove_tab: "Makni tabulaciju",
+about_notice: "Napomena: koloriziranje sintakse je samo za kratke kodove",
+toggle: "Prebaci naèin ureðivanja",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Procesiram...",
+fullscreen: "Cijeli prozor",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/index.php
===================================================================
--- trunk/include/editarea/langs/index.php	(nonexistent)
+++ trunk/include/editarea/langs/index.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         include
+ * @author            Christophe Dolivet (EditArea), Christian Sommer (WB wrapper)
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent directory listing
+header('Location: ../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/include/editarea/langs/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/editarea/langs/it.js
===================================================================
--- trunk/include/editarea/langs/it.js	(nonexistent)
+++ trunk/include/editarea/langs/it.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["it"]={
+new_document: "nuovo documento vuoto",
+search_button: "cerca e sostituisci",
+search_command: "trova successivo / apri finestra di ricerca",
+search: "cerca",
+replace: "sostituisci",
+replace_command: "sostituisci / apri finestra di ricerca",
+find_next: "trova successivo",
+replace_all: "sostituisci tutti",
+reg_exp: "espressioni regolari",
+match_case: "confronta maiuscole/minuscole<br />",
+not_found: "non trovato.",
+occurrence_replaced: "occorrenze sostituite.",
+search_field_empty: "Campo ricerca vuoto",
+restart_search_at_begin: "Fine del testo raggiunta. Ricomincio dall'inizio.",
+move_popup: "sposta popup di ricerca",
+font_size: "-- Dimensione --",
+go_to_line: "vai alla linea",
+go_to_line_prompt: "vai alla linea numero:",
+undo: "annulla",
+redo: "ripeti",
+change_smooth_selection: "abilita/disabilita alcune caratteristiche della visualizzazione",
+highlight: "abilita/disabilita colorazione della sintassi",
+reset_highlight: "aggiorna colorazione (se non sincronizzata)",
+word_wrap: "toggle word wrapping mode",
+help: "informazioni su...",
+save: "salva",
+load: "carica",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Posizione",
+total: "Totale",
+close_popup: "chiudi popup",
+shortcuts: "Scorciatoie",
+add_tab: "aggiungi tabulazione",
+remove_tab: "rimuovi tabulazione",
+about_notice: "Avviso: la colorazione della sintassi vale solo con testo piccolo",
+toggle: "Abilita/disabilita editor",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "In corso...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/ja.js
===================================================================
--- trunk/include/editarea/langs/ja.js	(nonexistent)
+++ trunk/include/editarea/langs/ja.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["ja"]={
+new_document: "新規作成",
+search_button: "検索・置換",
+search_command: "次を検索 / 検索窓を表示",
+search: "検索",
+replace: "置換",
+replace_command: "置換 / 置換窓を表示",
+find_next: "次を検索",
+replace_all: "全置換",
+reg_exp: "正規表現",
+match_case: "大文字小文字の区別",
+not_found: "見つかりません。",
+occurrence_replaced: "置換しました。",
+search_field_empty: "検索対象文字列が空です。",
+restart_search_at_begin: "終端に達しました、始めに戻ります",
+move_popup: "検索窓を移動",
+font_size: "--フォントサイズ--",
+go_to_line: "指定行へ移動",
+go_to_line_prompt: "指定行へ移動します:",
+undo: "元に戻す",
+redo: "やり直し",
+change_smooth_selection: "スムース表示の切り替え（CPUを使います）",
+highlight: "構文強調表示の切り替え",
+reset_highlight: "構文強調表示のリセット",
+word_wrap: "toggle word wrapping mode",
+help: "ヘルプを表示",
+save: "保存",
+load: "読み込み",
+line_abbr: "行",
+char_abbr: "文字",
+position: "位置",
+total: "合計",
+close_popup: "ポップアップを閉じる",
+shortcuts: "ショートカット",
+add_tab: "タブを挿入する",
+remove_tab: "タブを削除する",
+about_notice: "注意：構文強調表示は短いテキストでしか有効に機能しません。",
+toggle: "テキストエリアとeditAreaの切り替え",
+accesskey: "アクセスキー",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "処理中です...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/mk.js
===================================================================
--- trunk/include/editarea/langs/mk.js	(nonexistent)
+++ trunk/include/editarea/langs/mk.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["mk"]={
+new_document: "Нов документ",
+search_button: "Најди и замени",
+search_command: "Барај следно / Отвори нов прозорец за пребарување",
+search: "Барај",
+replace: "Замени",
+replace_command: "Замени / Отвори прозорец за пребарување",
+find_next: "најди следно",
+replace_all: "Замени ги сите",
+reg_exp: "Регуларни изрази",
+match_case: "Битна е големината на буквите",
+not_found: "не е пронајдено.",
+occurrence_replaced: "замени.",
+search_field_empty: "Полето за пребарување е празно",
+restart_search_at_begin: "Крај на областа. Стартувај од почеток.",
+move_popup: "Помести го прозорецот",
+font_size: "--Големина на текстот--",
+go_to_line: "Оди на линија",
+go_to_line_prompt: "Оди на линија со број:",
+undo: "Врати",
+redo: "Повтори",
+change_smooth_selection: "Вклучи/исклучи некои карактеристики за приказ (попаметен приказ, но поголемо оптеретување за процесорот)",
+highlight: "Вклучи/исклучи осветлување на синтакса",
+reset_highlight: "Ресетирај го осветлувањето на синтакса (доколку е десинхронизиранo со текстот)",
+word_wrap: "toggle word wrapping mode",
+help: "За",
+save: "Зачувај",
+load: "Вчитај",
+line_abbr: "Лн",
+char_abbr: "Зн",
+position: "Позиција",
+total: "Вкупно",
+close_popup: "Затвори го прозорецот",
+shortcuts: "Кратенки",
+add_tab: "Додај табулација на текстот",
+remove_tab: "Отстрани ја табулацијата",
+about_notice: "Напомена: Осветлувањето на синтанса е само за краток текст",
+toggle: "Смени начин на уредување",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Обработувам...",
+fullscreen: "Цел прозорец",
+syntax_selection: "--Синтакса--",
+close_tab: "Избери датотека"
+};
Index: trunk/include/editarea/langs/nl.js
===================================================================
--- trunk/include/editarea/langs/nl.js	(nonexistent)
+++ trunk/include/editarea/langs/nl.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["nl"]={
+new_document: "nieuw leeg document",
+search_button: "zoek en vervang",
+search_command: "zoek volgende / zoekscherm openen",
+search: "zoek",
+replace: "vervang",
+replace_command: "vervang / zoekscherm openen",
+find_next: "volgende vinden",
+replace_all: "alles vervangen",
+reg_exp: "reguliere expressies",
+match_case: "hoofdletter gevoelig",
+not_found: "niet gevonden.",
+occurrence_replaced: "object vervangen.",
+search_field_empty: "Zoek veld leeg",
+restart_search_at_begin: "Niet meer instanties gevonden, begin opnieuw",
+move_popup: "versleep zoek scherm",
+font_size: "--Letter grootte--",
+go_to_line: "Ga naar regel",
+go_to_line_prompt: "Ga naar regel nummer:",
+undo: "Ongedaan maken",
+redo: "Opnieuw doen",
+change_smooth_selection: "zet wat schermopties aan/uit (kan langzamer zijn)",
+highlight: "zet syntax highlight aan/uit",
+reset_highlight: "reset highlight (indien gedesynchronizeerd)",
+word_wrap: "toggle word wrapping mode",
+help: "informatie",
+save: "opslaan",
+load: "laden",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Positie",
+total: "Totaal",
+close_popup: "Popup sluiten",
+shortcuts: "Snelkoppelingen",
+add_tab: "voeg tabs toe in tekst",
+remove_tab: "verwijder tabs uit tekst",
+about_notice: "Notitie: syntax highlight functie is alleen voor kleine tekst",
+toggle: "geavanceerde bewerkingsopties",
+accesskey: "Accessknop",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Verwerken...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/no.js
===================================================================
--- trunk/include/editarea/langs/no.js	(nonexistent)
+++ trunk/include/editarea/langs/no.js	(revision 2)
@@ -0,0 +1,65 @@
+editAreaLoader.lang["no"]={
+new_document: "nytt tomt dokument",
+search_button: "s&oslash;k og erstatt",
+search_command: "s&oslash;k etter neste/ &aring;pne s&oslash;ke omr&aring;det",
+search: "s&oslash;k",
+replace: "erstatt",
+replace_command: "erstatt / aring;pne s&oslash;ke omr&aring;det",
+find_next: "finn neste",
+replace_all: "erstatt alle",
+reg_exp: "standard uttrykk",
+match_case: "skill mellom store/ sm&aring; bokstaver",
+not_found: "ikke funnetnot found.",
+occurrence_replaced: "alle forekomstene ble endret.",
+search_field_empty: "Tomt s&oslash;kefelt",
+restart_search_at_begin: "Du er kommet til slutten av s&oslash;keomr&aring;ede. Vil du starte fra begynnelsen.",
+move_popup: "flytt s&oslash;ke vinuet",
+font_size: "--Skrift s&oslash;rrelse--",
+go_to_line: "g&aring; til linje",
+go_to_line_prompt: "g&aring; til linje nummer:",
+undo: "angre",
+redo: "gj&oslash;re igjen",
+change_smooth_selection: "aktivere/ deaktivere visnings alternativer(gj&oslash;r skjermvisningen smartere, men gir h&oslash;yere prosessor belastning)",
+highlight: "skru merking av s&oslash;keord av/ p&aring;",
+reset_highlight: "starte markeringen p&aring; nytt(hvis den er usynkron med deksten)",
+help: "om",
+save: "lagre",
+load: "laste",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Posisjon",
+total: "Total",
+close_popup: "lukk vindu",
+shortcuts: "Snarveier",
+add_tab: "legg til tabulering i teksten",
+remove_tab: "fj&aelig;rn tabulering i teksten",
+about_notice: "OBS!: markering av s&oslash;ketekst er kun for tekst med sm&aring; bokstaver",
+toggle: "skru redigeringsverkt&oslash;yet av/ p&aring;",
+accesskey: "Tillgangsn&oslash;kkel",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Behandler...",
+fullscreen: "full skjerm",
+syntax_selection: "--Sprk--",
+syntax_css: "CSS",
+syntax_html: "HTML",
+syntax_js: "Javascript",
+syntax_php: "Php",
+syntax_python: "Python",
+syntax_vb: "Visual Basic",
+syntax_xml: "Xml",
+syntax_c: "C",
+syntax_cpp: "CPP",
+syntax_basic: "Basic",
+syntax_pas: "Pascal",
+syntax_brainfuck: "Brainfuck",
+syntax_sql: "SQL",
+syntax_ruby: "Ruby",
+syntax_robotstxt: "Robots txt",
+syntax_tsql: "T-SQL",
+syntax_perl: "Perl",
+syntax_coldfusion: "Coldfusion",
+close_tab: "Lukk filen"
+};
Index: trunk/include/editarea/langs/pl.js
===================================================================
--- trunk/include/editarea/langs/pl.js	(nonexistent)
+++ trunk/include/editarea/langs/pl.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["pl"]={
+new_document: "nowy dokument",
+search_button: "znajdź i zamień",
+search_command: "znajdź następny",
+search: "znajdź",
+replace: "zamień",
+replace_command: "zamień",
+find_next: "następny",
+replace_all: "zamień wszystko",
+reg_exp: "wyrażenie regularne",
+match_case: "uwzględnij wielkość liter<br />",
+not_found: "nie znaleziono.",
+occurrence_replaced: "wystąpień zamieniono.",
+search_field_empty: "Nie wprowadzono tekstu",
+restart_search_at_begin: "Koniec dokumentu. Wyszukiwanie od początku.",
+move_popup: "przesuń okienko wyszukiwania",
+font_size: "Rozmiar",
+go_to_line: "idź do linii",
+go_to_line_prompt: "numer linii:",
+undo: "cofnij",
+redo: "przywróć",
+change_smooth_selection: "włącz/wyłącz niektóre opcje wyglądu (zaawansowane opcje wyglądu obciążają procesor)",
+highlight: "włącz/wyłącz podświetlanie składni",
+reset_highlight: "odśwież podświetlanie składni (jeśli rozsynchronizowało się z tekstem)",
+word_wrap: "toggle word wrapping mode",
+help: "o programie",
+save: "zapisz",
+load: "otwórz",
+line_abbr: "Ln",
+char_abbr: "Zn",
+position: "Pozycja",
+total: "W sumie",
+close_popup: "zamknij okienko",
+shortcuts: "Skróty klawiaturowe",
+add_tab: "dodaj wcięcie do zaznaczonego tekstu",
+remove_tab: "usuń wcięcie",
+about_notice: "Uwaga: podświetlanie składni nie jest zalecane dla długich tekstów",
+toggle: "Włącz/wyłącz edytor",
+accesskey: "Alt+",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Przetwarzanie...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/pt.js
===================================================================
--- trunk/include/editarea/langs/pt.js	(nonexistent)
+++ trunk/include/editarea/langs/pt.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["pt"]={
+new_document: "Novo documento",
+search_button: "Localizar e substituir",
+search_command: "Localizar próximo",
+search: "Localizar",
+replace: "Substituir",
+replace_command: "Substituir",
+find_next: "Localizar",
+replace_all: "Subst. tudo",
+reg_exp: "Expressões regulares",
+match_case: "Diferenciar maiúsculas e minúsculas",
+not_found: "Não encontrado.",
+occurrence_replaced: "Ocorrências substituidas",
+search_field_empty: "Campo localizar vazio.",
+restart_search_at_begin: "Fim das ocorrências. Recomeçar do inicio.",
+move_popup: "Mover janela",
+font_size: "--Tamanho da fonte--",
+go_to_line: "Ir para linha",
+go_to_line_prompt: "Ir para a linha:",
+undo: "Desfazer",
+redo: "Refazer",
+change_smooth_selection: "Opções visuais",
+highlight: "Cores de sintaxe",
+reset_highlight: "Resetar cores (se não sincronizado)",
+word_wrap: "toggle word wrapping mode",
+help: "Sobre",
+save: "Salvar",
+load: "Carregar",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Posição",
+total: "Total",
+close_popup: "Fechar",
+shortcuts: "Shortcuts",
+add_tab: "Adicionar tabulação",
+remove_tab: "Remover tabulação",
+about_notice: "Atenção: Cores de sintaxe são indicados somente para textos pequenos",
+toggle: "Exibir editor",
+accesskey: "Accesskey",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Processando...",
+fullscreen: "fullscreen",
+syntax_selection: "--Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/ru.js
===================================================================
--- trunk/include/editarea/langs/ru.js	(nonexistent)
+++ trunk/include/editarea/langs/ru.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["ru"]={
+new_document: "новый пустой документ",
+search_button: "поиск и замена",
+search_command: "искать следующий / открыть панель поиска",
+search: "поиск",
+replace: "замена",
+replace_command: "заменить / открыть панель поиска",
+find_next: "найти следующее",
+replace_all: "заменить все",
+reg_exp: "регулярное выражение",
+match_case: "учитывать регистр",
+not_found: "не найдено.",
+occurrence_replaced: "вхождение заменено.",
+search_field_empty: "Поле поиска пустое",
+restart_search_at_begin: "Достигнут конец документа. Начинаю с начала.",
+move_popup: "переместить окно поиска",
+font_size: "--Размер шрифта--",
+go_to_line: "перейти к строке",
+go_to_line_prompt: "перейти к строке номер:",
+undo: "отменить",
+redo: "вернуть",
+change_smooth_selection: "включить/отключить некоторые функции просмотра (более красиво, но больше использует процессор)",
+highlight: "переключить подсветку синтаксиса включена/выключена",
+reset_highlight: "восстановить подсветку (если разсинхронизирована от текста)",
+word_wrap: "toggle word wrapping mode",
+help: "о программе",
+save: "сохранить",
+load: "загрузить",
+line_abbr: "Стр",
+char_abbr: "Стлб",
+position: "Позиция",
+total: "Всего",
+close_popup: "закрыть всплывающее окно",
+shortcuts: "Горячие клавиши",
+add_tab: "добавить табуляцию в текст",
+remove_tab: "убрать табуляцию из текста",
+about_notice: "Внимание: функция подсветки синтаксиса только для небольших текстов",
+toggle: "Переключить редактор",
+accesskey: "Горячая клавиша",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Обработка...",
+fullscreen: "полный экран",
+syntax_selection: "--Синтакс--",
+close_tab: "Закрыть файл"
+};
Index: trunk/include/editarea/langs/sk.js
===================================================================
--- trunk/include/editarea/langs/sk.js	(nonexistent)
+++ trunk/include/editarea/langs/sk.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["sk"]={
+new_document: "nový prázdy dokument",
+search_button: "vyhľadaj a nahraď",
+search_command: "hľadaj ďalsšie / otvor vyhľadávacie pole",
+search: "hľadaj",
+replace: "nahraď",
+replace_command: "nahraď / otvor vyhľadávacie pole",
+find_next: "nájdi ďalšie",
+replace_all: "nahraď všetko",
+reg_exp: "platné výrazy",
+match_case: "zhodujúce sa výrazy",
+not_found: "nenájdené.",
+occurrence_replaced: "výskyty nahradené.",
+search_field_empty: "Pole vyhľadávanie je prádzne",
+restart_search_at_begin: "End of area reached. Restart at begin.",
+move_popup: "presuň vyhľadávacie okno",
+font_size: "--Veľkosť textu--",
+go_to_line: "prejdi na riadok",
+go_to_line_prompt: "prejdi na riadok:",
+undo: "krok späť",
+redo: "prepracovať",
+change_smooth_selection: "povoliť/zamietnúť niektoré zo zobrazených funkcií (účelnejšie zobrazenie vyžaduje  väčšie zaťaženie procesora CPU)",
+highlight: "prepnúť zvýrazňovanie syntaxe zap/vyp",
+reset_highlight: "zrušiť zvýrazňovanie (ak je nesynchronizované s textom)",
+word_wrap: "toggle word wrapping mode",
+help: "o programe",
+save: "uložiť",
+load: "načítať",
+line_abbr: "Ln",
+char_abbr: "Ch",
+position: "Pozícia",
+total: "Spolu",
+close_popup: "zavrieť okno",
+shortcuts: "Skratky",
+add_tab: "pridať tabulovanie textu",
+remove_tab: "odstrániť tabulovanie textu",
+about_notice: "Upozornenie: funkcia zvýrazňovania syntaxe je dostupná iba pre malý text",
+toggle: "Prepnúť editor",
+accesskey: "Accesskey",
+tab: "Záložka",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "Spracúvam...",
+fullscreen: "cel=a obrazovka",
+syntax_selection: "--Vyber Syntax--",
+close_tab: "Close file"
+};
Index: trunk/include/editarea/langs/zh.js
===================================================================
--- trunk/include/editarea/langs/zh.js	(nonexistent)
+++ trunk/include/editarea/langs/zh.js	(revision 2)
@@ -0,0 +1,48 @@
+editAreaLoader.lang["zh"]={
+new_document: "新建空白文档",
+search_button: "查找与替换",
+search_command: "查找下一个 / 打开查找框",
+search: "查找",
+replace: "替换",
+replace_command: "替换 / 打开查找框",
+find_next: "查找下一个",
+replace_all: "全部替换",
+reg_exp: "正则表达式",
+match_case: "匹配大小写",
+not_found: "未找到.",
+occurrence_replaced: "处被替换.",
+search_field_empty: "查找框没有内容",
+restart_search_at_begin: "已到到文档末尾. 从头重新查找.",
+move_popup: "移动查找对话框",
+font_size: "--字体大小--",
+go_to_line: "转到行",
+go_to_line_prompt: "转到行:",
+undo: "恢复",
+redo: "重做",
+change_smooth_selection: "启用/禁止一些显示特性(更好看但更耗费资源)",
+highlight: "启用/禁止语法高亮",
+reset_highlight: "重置语法高亮(当文本显示不同步时)",
+word_wrap: "toggle word wrapping mode",
+help: "关于",
+save: "保存",
+load: "加载",
+line_abbr: "行",
+char_abbr: "字符",
+position: "位置",
+total: "总计",
+close_popup: "关闭对话框",
+shortcuts: "快捷键",
+add_tab: "添加制表符(Tab)",
+remove_tab: "移除制表符(Tab)",
+about_notice: "注意：语法高亮功能仅用于较少内容的文本(文件内容太大会导致浏览器反应慢)",
+toggle: "切换编辑器",
+accesskey: "快捷键",
+tab: "Tab",
+shift: "Shift",
+ctrl: "Ctrl",
+esc: "Esc",
+processing: "正在处理中...",
+fullscreen: "全屏编辑",
+syntax_selection: "--语法--",
+close_tab: "关闭文件"
+};
Index: trunk/include/editarea/license_lgpl.txt
===================================================================
--- trunk/include/editarea/license_lgpl.txt	(nonexistent)
+++ trunk/include/editarea/license_lgpl.txt	(revision 2)
@@ -0,0 +1,458 @@
+		  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
Index: trunk/include/editarea/reg_syntax/css.js
===================================================================
--- trunk/include/editarea/reg_syntax/css.js	(nonexistent)
+++ trunk/include/editarea/reg_syntax/css.js	(revision 2)
@@ -0,0 +1,85 @@
+editAreaLoader.load_syntax["css"] = {
+	'DISPLAY_NAME' : 'CSS'
+	,'COMMENT_SINGLE' : {1 : '@'}
+	,'COMMENT_MULTI' : {'/*' : '*/'}
+	,'QUOTEMARKS' : ['"', "'"]
+	,'KEYWORD_CASE_SENSITIVE' : false
+	,'KEYWORDS' : {
+		'attributes' : [
+			'aqua', 'azimuth', 'background-attachment', 'background-color',
+			'background-image', 'background-position', 'background-repeat',
+			'background', 'border-bottom-color', 'border-bottom-style',
+			'border-bottom-width', 'border-left-color', 'border-left-style',
+			'border-left-width', 'border-right', 'border-right-color',
+			'border-right-style', 'border-right-width', 'border-top-color',
+			'border-top-style', 'border-top-width','border-bottom', 'border-collapse',
+			'border-left', 'border-width', 'border-color', 'border-spacing',
+			'border-style', 'border-top', 'border',  'caption-side',
+			'clear', 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
+			'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
+			'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
+			'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
+			'font-weight', 'font', 'height', 'letter-spacing', 'line-height',
+			'list-style', 'list-style-image', 'list-style-position', 'list-style-type',
+			'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'margin',
+			'marker-offset', 'marks', 'max-height', 'max-width', 'min-height',
+			'min-width', 'opacity', 'orphans', 'outline', 'outline-color', 'outline-style',
+			'outline-width', 'overflow', 'padding-bottom', 'padding-left',
+			'padding-right', 'padding-top', 'padding', 'page', 'page-break-after',
+			'page-break-before', 'page-break-inside', 'pause-after', 'pause-before',
+			'pause', 'pitch', 'pitch-range',  'play-during', 'position', 'quotes',
+			'richness', 'right', 'size', 'speak-header', 'speak-numeral', 'speak-punctuation',
+			'speak', 'speech-rate', 'stress', 'table-layout', 'text-align', 'text-decoration',
+			'text-indent', 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
+			'vertical-align', 'visibility', 'voice-family', 'volume', 'white-space', 'widows',
+			'width', 'word-spacing', 'z-index', 'bottom', 'left'
+		]
+		,'values' : [
+			'above', 'absolute', 'always', 'armenian', 'aural', 'auto', 'avoid',
+			'baseline', 'behind', 'below', 'bidi-override', 'black', 'blue', 'blink', 'block', 'bold', 'bolder', 'both',
+			'capitalize', 'center-left', 'center-right', 'center', 'circle', 'cjk-ideographic', 
+            'close-quote', 'collapse', 'condensed', 'continuous', 'crop', 'crosshair', 'cross', 'cursive',
+			'dashed', 'decimal-leading-zero', 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
+			'e-resize', 'embed', 'extra-condensed', 'extra-expanded', 'expanded',
+			'fantasy', 'far-left', 'far-right', 'faster', 'fast', 'fixed', 'fuchsia',
+			'georgian', 'gray', 'green', 'groove', 'hebrew', 'help', 'hidden', 'hide', 'higher',
+			'high', 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table', 'inline',
+			'inset', 'inside', 'invert', 'italic', 'justify', 'katakana-iroha', 'katakana',
+			'landscape', 'larger', 'large', 'left-side', 'leftwards', 'level', 'lighter', 'lime', 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek', 'lower-roman', 'lowercase', 'ltr', 'lower', 'low',
+			'maroon', 'medium', 'message-box', 'middle', 'mix', 'monospace',
+			'n-resize', 'narrower', 'navy', 'ne-resize', 'no-close-quote', 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap', 'nw-resize',
+			'oblique', 'olive', 'once', 'open-quote', 'outset', 'outside', 'overline',
+			'pointer', 'portrait', 'purple', 'px',
+			'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', 'ridge', 'right-side', 'rightwards',
+			's-resize', 'sans-serif', 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower', 'small-caps', 'small-caption', 'smaller', 'soft', 'solid', 'spell-out', 'square',
+			'static', 'status-bar', 'super', 'sw-resize',
+			'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom', 'text-top', 'thick', 'thin', 'transparent',
+			'ultra-condensed', 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin', 'upper-roman', 'uppercase', 'url',
+			'visible',
+			'w-resize', 'wait', 'white', 'wider',
+			'x-fast', 'x-high', 'x-large', 'x-loud', 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small',
+			'yellow', 'yes'
+		]
+		,'specials' : [
+			'important'
+		]
+	}
+	,'OPERATORS' :[
+		':', ';', '!', '.', '#'
+	]
+	,'DELIMITERS' :[
+		'{', '}'
+	]
+	,'STYLES' : {
+		'COMMENTS': 'color: #AAAAAA;'
+		,'QUOTESMARKS': 'color: #6381F8;'
+		,'KEYWORDS' : {
+			'attributes' : 'color: #48BDDF;'
+			,'values' : 'color: #2B60FF;'
+			,'specials' : 'color: #FF0000;'
+			}
+		,'OPERATORS' : 'color: #FF00FF;'
+		,'DELIMITERS' : 'color: #60CA00;'
+				
+	}
+};
Index: trunk/include/editarea/reg_syntax/html.js
===================================================================
--- trunk/include/editarea/reg_syntax/html.js	(nonexistent)
+++ trunk/include/editarea/reg_syntax/html.js	(revision 2)
@@ -0,0 +1,51 @@
+/*
+* last update: 2006-08-24
+*/
+
+editAreaLoader.load_syntax["html"] = {
+	'DISPLAY_NAME' : 'HTML'
+	,'COMMENT_SINGLE' : {}
+	,'COMMENT_MULTI' : {'<!--' : '-->'}
+	,'QUOTEMARKS' : {1: "'", 2: '"'}
+	,'KEYWORD_CASE_SENSITIVE' : false
+	,'KEYWORDS' : {
+	}
+	,'OPERATORS' :[
+	]
+	,'DELIMITERS' :[
+	]
+	,'REGEXPS' : {
+		'doctype' : {
+			'search' : '()(<!DOCTYPE[^>]*>)()'
+			,'class' : 'doctype'
+			,'modifiers' : ''
+			,'execute' : 'before' // before or after
+		}
+		,'tags' : {
+			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
+			,'class' : 'tags'
+			,'modifiers' : 'gi'
+			,'execute' : 'before' // before or after
+		}
+		,'attributes' : {
+			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
+			,'class' : 'attributes'
+			,'modifiers' : 'g'
+			,'execute' : 'before' // before or after
+		}
+	}
+	,'STYLES' : {
+		'COMMENTS': 'color: #AAAAAA;'
+		,'QUOTESMARKS': 'color: #6381F8;'
+		,'KEYWORDS' : {
+			}
+		,'OPERATORS' : 'color: #E775F0;'
+		,'DELIMITERS' : ''
+		,'REGEXPS' : {
+			'attributes': 'color: #B1AC41;'
+			,'tags': 'color: #E62253;'
+			,'doctype': 'color: #8DCFB5;'
+			,'test': 'color: #00FF00;'
+		}	
+	}		
+};
Index: trunk/include/editarea/reg_syntax/index.php
===================================================================
--- trunk/include/editarea/reg_syntax/index.php	(nonexistent)
+++ trunk/include/editarea/reg_syntax/index.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         include
+ * @author            Christophe Dolivet (EditArea), Christian Sommer (WB wrapper)
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent directory listing
+header('Location: ../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/include/editarea/reg_syntax/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/editarea/reg_syntax/js.js
===================================================================
--- trunk/include/editarea/reg_syntax/js.js	(nonexistent)
+++ trunk/include/editarea/reg_syntax/js.js	(revision 2)
@@ -0,0 +1,94 @@
+editAreaLoader.load_syntax["js"] = {
+	'DISPLAY_NAME' : 'Javascript'
+	,'COMMENT_SINGLE' : {1 : '//'}
+	,'COMMENT_MULTI' : {'/*' : '*/'}
+	,'QUOTEMARKS' : {1: "'", 2: '"'}
+	,'KEYWORD_CASE_SENSITIVE' : false
+	,'KEYWORDS' : {
+		'statements' : [
+			'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
+			'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
+			'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
+			'while', 'write', 'with'
+		]
+ 		,'keywords' : [
+			'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
+			'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
+			'protected', 'public', 'super', 'true', 'use', 'var', 'window', 'document',		
+			// the list below must be sorted and checked (if it is a keywords or a function and if it is not present twice
+			'Link ', 'outerHeight ', 'Anchor', 'FileUpload', 
+			'location', 'outerWidth', 'Select', 'Area', 'find', 'Location', 'Packages', 'self', 
+			'arguments', 'locationbar', 'pageXoffset', 'Form', 
+			'Math', 'pageYoffset', 'setTimeout', 'assign', 'Frame', 'menubar', 'parent', 'status', 
+			'blur', 'frames', 'MimeType', 'parseFloat', 'statusbar', 'Boolean', 'Function', 'moveBy', 
+			'parseInt', 'stop', 'Button', 'getClass', 'moveTo', 'Password', 'String', 'callee', 'Hidden', 
+			'name', 'personalbar', 'Submit', 'caller', 'history', 'NaN', 'Plugin', 'sun', 'captureEvents', 
+			'History', 'navigate', 'print', 'taint', 'Checkbox', 'home', 'navigator', 'prompt', 'Text', 
+			'Image', 'Navigator', 'prototype', 'Textarea', 'clearTimeout', 'Infinity', 
+			'netscape', 'Radio', 'toolbar', 'close', 'innerHeight', 'Number', 'ref', 'top', 'closed', 
+			'innerWidth', 'Object', 'RegExp', 'toString', 'confirm', 'isFinite', 'onBlur', 'releaseEvents', 
+			'unescape', 'constructor', 'isNan', 'onError', 'Reset', 'untaint', 'Date', 'java', 'onFocus', 
+			'resizeBy', 'unwatch', 'defaultStatus', 'JavaArray', 'onLoad', 'resizeTo', 'valueOf', 'document', 
+			'JavaClass', 'onUnload', 'routeEvent', 'watch', 'Document', 'JavaObject', 'open', 'scroll', 'window', 
+			'Element', 'JavaPackage', 'opener', 'scrollbars', 'Window', 'escape', 'length', 'Option', 'scrollBy'			
+		]
+    	,'functions' : [
+			// common functions for Window object
+			'alert', 'Array', 'back', 'blur', 'clearInterval', 'close', 'confirm', 'eval ', 'focus', 'forward', 'home',
+			'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
+			'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'scrollTo', 'setInterval', 'status',
+			'stop' 
+		]
+	}
+	,'OPERATORS' :[
+		'+', '-', '/', '*', '=', '<', '>', '%', '!'
+	]
+	,'DELIMITERS' :[
+		'(', ')', '[', ']', '{', '}'
+	]
+	,'STYLES' : {
+		'COMMENTS': 'color: #AAAAAA;'
+		,'QUOTESMARKS': 'color: #6381F8;'
+		,'KEYWORDS' : {
+			'statements' : 'color: #60CA00;'
+			,'keywords' : 'color: #48BDDF;'
+			,'functions' : 'color: #2B60FF;'
+		}
+		,'OPERATORS' : 'color: #FF00FF;'
+		,'DELIMITERS' : 'color: #0038E1;'
+				
+	}
+	,'AUTO_COMPLETION' :  {
+		"default": {	// the name of this definition group. It's posisble to have different rules inside the same definition file
+			"REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"	// \\s|\\.|
+						,"possible_words_letters": "[a-zA-Z0-9_]+"
+						,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
+						,"prefix_separator": "\\."
+					}
+			,"CASE_SENSITIVE": true
+			,"MAX_TEXT_LENGTH": 100		// the maximum length of the text being analyzed before the cursor position
+			,"KEYWORDS": {
+				'': [	// the prefix of thoses items
+						/**
+						 * 0 : the keyword the user is typing
+						 * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous )
+						 * 		If empty the keyword will be displayed
+						 * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed)
+						 */
+						 ['Array', '§()', '']
+			    		,['alert', '§({@})', 'alert(String message)']
+			    		,['document']
+			    		,['window']
+			    	]
+		    	,'window' : [
+			    		 ['location']
+			    		,['document']
+			    		,['scrollTo', 'scrollTo({@})', 'scrollTo(Int x,Int y)']
+					]
+		    	,'location' : [
+			    		 ['href']
+					]
+			}
+		}
+	}
+};
Index: trunk/include/editarea/reg_syntax/php.js
===================================================================
--- trunk/include/editarea/reg_syntax/php.js	(nonexistent)
+++ trunk/include/editarea/reg_syntax/php.js	(revision 2)
@@ -0,0 +1,157 @@
+editAreaLoader.load_syntax["php"] = {
+    'DISPLAY_NAME' : 'Php'
+    ,'COMMENT_SINGLE' : {1 : '//', 2 : '#'}
+    ,'COMMENT_MULTI' : {'/*' : '*/'}
+    ,'QUOTEMARKS' : {1: "'", 2: '"'}
+    ,'KEYWORD_CASE_SENSITIVE' : false
+    ,'KEYWORDS' : {
+        'statements' : [
+            'include', 'require', 'include_once', 'require_once',
+            'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile',
+            'endif', 'switch', 'case', 'endswitch',
+            'return', 'break', 'continue'
+        ]
+        ,'reserved' : [
+            '_GET', '_POST', '_SESSION', '_SERVER', '_FILES', '_ENV', '_COOKIE', '_REQUEST',
+            'null', '__LINE__', '__FILE__',
+            'false', '&lt;?php', '?&gt;', '&lt;?',
+            '&lt;script language', '&lt;/script&gt;',
+            'true', 'var', 'default',
+            'function', 'class', 'new', '&amp;new', 'this',
+            '__FUNCTION__', '__CLASS__', '__METHOD__', 'PHP_VERSION',
+            'PHP_OS', 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR',
+            'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', 'PHP_SYSCONFDIR',
+            'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT',
+            'PHP_OUTPUT_HANDLER_END', 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE',
+            'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR',
+            'E_USER_WARNING', 'E_USER_NOTICE', 'E_ALL'
+
+        ]
+        ,'functions' : [
+            'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
+            'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
+            'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
+            'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
+            'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
+            'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
+            'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
+            'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
+            'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
+            'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
+            'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
+            'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
+            'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'
+
+        ]
+    }
+    ,'OPERATORS' :[
+        '+', '-', '/', '*', '=', '<', '>', '%', '!', '&&', '||'
+    ]
+    ,'DELIMITERS' :[
+        '(', ')', '[', ']', '{', '}'
+    ]
+    ,'REGEXPS' : {
+        // highlight all variables ($...)
+        'variables' : {
+            'search' : '()(\\$\\w+)()'
+            ,'class' : 'variables'
+            ,'modifiers' : 'g'
+            ,'execute' : 'before' // before or after
+        }
+    }
+    ,'STYLES' : {
+        'COMMENTS': 'color: #AAAAAA;'
+        ,'QUOTESMARKS': 'color: #879EFA;'
+        ,'KEYWORDS' : {
+            'reserved' : 'color: #48BDDF;'
+            ,'functions' : 'color: #0040FD;'
+            ,'statements' : 'color: #60CA00;'
+            }
+        ,'OPERATORS' : 'color: #FF00FF;'
+        ,'DELIMITERS' : 'color: #2B60FF;'
+        ,'REGEXPS' : {
+            'variables' : 'color: #E0BD54;'
+        }
+    }
+    ,'AUTO_COMPLETION' :  {
+        "default": {    // the name of this definition group. It's posisble to have different rules inside the same definition file
+            "REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"    // \\s|\\.|
+                        ,"possible_words_letters": "[a-zA-Z0-9_\$]+"
+                        ,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
+                        ,"prefix_separator": "\\-\\>|\\:\\:"
+                    }
+            ,"CASE_SENSITIVE": true
+            ,"MAX_TEXT_LENGTH": 100        // the maximum length of the text being analyzed before the cursor position
+            ,"KEYWORDS": {
+                    '': [    // the prefix of thoses items
+                        /**
+                         * 0 : the keyword the user is typing
+                         * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous )
+                         *         If empty the keyword will be displayed
+                         * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed)
+                         */
+                         ['$_POST']
+                        ,['$_GET']
+                        ,['$_SESSION']
+                        ,['$_SERVER']
+                        ,['$_FILES']
+                        ,['$_ENV']
+                        ,['$_COOKIE']
+                        ,['$_REQUEST']
+                        // magic methods
+                        ,['__construct', '§( {@} )']
+                        ,['__destruct', '§( {@} )']
+                        ,['__sleep', '§( {@} )']
+                        ,['__wakeup', '§( {@} )']
+                        ,['__toString', '§( {@} )']
+                        // include
+                        ,['include', '§ "{@}";']
+                        ,['include_once', '§ "{@}";']
+                        ,['require', '§ "{@}";']
+                        ,['require_once', '§ "{@}";']
+                        // statements
+                        ,['for', '§( {@} )']
+                        ,['foreach', '§( {@} )']
+                        ,['if', '§( {@} )']
+                        ,['elseif', '§( {@} )']
+                        ,['while', '§( {@} )']
+                        ,['switch', '§( {@} )']
+                        ,['break']
+                        ,['case']
+                        ,['continue']
+                        ,['do']
+                        ,['else']
+                        ,['endif']
+                        ,['endswitch']
+                        ,['endwhile']
+                        ,['return']
+                        // function
+                        ,['unset', '§( {@} )']
+                    ]
+                }
+            }
+        ,"live": {
+
+            // class NAME: /class\W+([a-z]+)\W+/gi
+            // method: /^(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi
+            // static: /^(public|private|protected)?\s+static\s+(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi
+            // attributes: /(\$this\-\>|(?:var|public|protected|private)\W+\$)([a-z0-9\_]+)(?!\()\b/gi
+            //         v1 : /(\$this\-\>|var\W+|public\W+|protected\W+|private\W+)([a-z0-9\_]+)\W*(=|;)/gi
+            // var type: /(\$(this\-\>)?[a-z0-9\_]+)\s*\=\s*new\s+([a-z0-9\_])+/gi
+
+
+            "REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"    // \\s|\\.|
+                        ,"possible_words_letters": "[a-zA-Z0-9_\$]+"
+                        ,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
+                        ,"prefix_separator": "\\-\\>"
+                    }
+            ,"CASE_SENSITIVE": true
+            ,"MAX_TEXT_LENGTH": 100        // the maximum length of the text being analyzed before the cursor position
+            ,"KEYWORDS": {
+                    '$this': [    // the prefix of thoses items
+                        ['test']
+                    ]
+                }
+            }
+    }
+};
Index: trunk/include/editarea/reg_syntax/xml.js
===================================================================
--- trunk/include/editarea/reg_syntax/xml.js	(nonexistent)
+++ trunk/include/editarea/reg_syntax/xml.js	(revision 2)
@@ -0,0 +1,57 @@
+/*
+* last update: 2006-08-24
+*/
+
+editAreaLoader.load_syntax["xml"] = {
+	'DISPLAY_NAME' : 'XML'
+	,'COMMENT_SINGLE' : {}
+	,'COMMENT_MULTI' : {'<!--' : '-->'}
+	,'QUOTEMARKS' : {1: "'", 2: '"'}
+	,'KEYWORD_CASE_SENSITIVE' : false
+	,'KEYWORDS' : {
+	}
+	,'OPERATORS' :[
+	]
+	,'DELIMITERS' :[
+	]
+	,'REGEXPS' : {
+		'xml' : {
+			'search' : '()(<\\?[^>]*?\\?>)()'
+			,'class' : 'xml'
+			,'modifiers' : 'g'
+			,'execute' : 'before' // before or after
+		}
+		,'cdatas' : {
+			'search' : '()(<!\\[CDATA\\[.*?\\]\\]>)()'
+			,'class' : 'cdata'
+			,'modifiers' : 'g'
+			,'execute' : 'before' // before or after
+		}
+		,'tags' : {
+			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
+			,'class' : 'tags'
+			,'modifiers' : 'gi'
+			,'execute' : 'before' // before or after
+		}
+		,'attributes' : {
+			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
+			,'class' : 'attributes'
+			,'modifiers' : 'g'
+			,'execute' : 'before' // before or after
+		}
+	}
+	,'STYLES' : {
+		'COMMENTS': 'color: #AAAAAA;'
+		,'QUOTESMARKS': 'color: #6381F8;'
+		,'KEYWORDS' : {
+			}
+		,'OPERATORS' : 'color: #E775F0;'
+		,'DELIMITERS' : ''
+		,'REGEXPS' : {
+			'attributes': 'color: #B1AC41;'
+			,'tags': 'color: #E62253;'
+			,'xml': 'color: #8DCFB5;'
+			,'cdata': 'color: #50B020;'
+		}	
+	}		
+};
Index: trunk/include/editarea/wb_wrapper_edit_area.php
===================================================================
--- trunk/include/editarea/wb_wrapper_edit_area.php	(nonexistent)
+++ trunk/include/editarea/wb_wrapper_edit_area.php	(revision 2)
@@ -0,0 +1,203 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         include
+ * @author          Christophe Dolivet (EditArea), Christian Sommer
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if (!function_exists('loader_help')) {
+function loader_help()
+{
+
+?>
+<script type="text/javascript">
+/*<![CDATA[*/
+        var url  = '<?php print WB_URL; ?>/include/editarea/edit_area_full.js';
+        try{
+            script = document.createElement("script");
+            script.type = "text/javascript";
+            script.src  = url;
+            script.charset= "UTF-8";
+            head = document.getElementsByTagName("head")[0];
+            head[0].appendChild(script);
+        }catch(e){
+            document.write("<script type='text/javascript' src='" + url + "' charset=\"UTF-8\"><"+"/script>");
+        }
+/*]]>*/
+</script>
+
+<?php }
+}
+if (!function_exists('getEditareaDefaultSettings')) {
+    function getEditareaDefaultSettings() {
+
+    /**
+     * toolbar: define the toolbar that will be displayed, each element being separated by a ",".
+     * Type: String (combinaison of: "|", "*", "search", "go_to_line", "undo", "redo", "change_smooth_selection", "reset_highlight", "highlight", "word_wrap", "help", "save", "load", "new_document", "syntax_selection")
+     * "|" or "separator" make appears a separator in the toolbar.
+     * "*" or "return" make appears a line-break in the toolbar
+     * Default: "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
+     */
+
+    return array (
+            'id' => "src"    // should contain the id of the textarea that should be converted into an editor
+            ,'language' => "en"
+            ,'syntax' => ""
+            ,'start_highlight' => true    // if start with highlight
+            ,'is_multi_files' => false        // enable the multi file mode (the textarea content is ignored)
+            ,'min_width' => 400
+            ,'min_height' => 125
+            ,'allow_resize' => "y"    // possible values: "no", "both", "x", "y"
+            ,'allow_toggle' => true        // true or false
+            ,'plugins' => "" // comma separated plugin list
+            ,'browsers' => "all"    // all or known
+            ,'display' => "onload"         // onload or later
+            ,'toolbar' => "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
+            ,'begin_toolbar' => ""        //  "new_document, save, load, |"
+            ,'end_toolbar' => ""        // or end_toolbar
+            ,'font_size' => "10"        // not for IE
+            ,'font_family' => "monospace, verdana"    // can be "verdana,monospace". Allow non monospace font but Firefox get smaller tabulation with non monospace fonts. IE doesn't change the tabulation width and Opera doesn't take this option into account...
+            ,'cursor_position' => "begin"
+            ,'gecko_spellcheck' => false    // enable/disable by default the gecko_spellcheck
+            ,'max_undo' => 30
+            ,'fullscreen' => false
+            ,'is_editable' => true
+            ,'word_wrap' => false        // define if the text is wrapped of not in the textarea
+            ,'replace_tab_by_spaces' => false
+            ,'debug' => false        // used to display some debug information into a newly created textarea. Can be usefull to display trace info in it if you want to modify the code
+            ,'show_line_colors' => false    // if the highlight is disabled for the line currently beeing edited (if enabled => heavy CPU use)
+            ,'syntax_selection_allow' => "basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml"
+            ,'smooth_selection' => true
+            ,'autocompletion' => false    // NOT IMPLEMENTED
+            ,'load_callback' => ""        // click on load button (function name)
+            ,'save_callback' => ""        // click on save button (function name)
+            ,'change_callback' => ""    // textarea onchange trigger (function name)
+            ,'submit_callback' => ""    // form submited (function name)
+            ,'EA_init_callback' => ""    // EditArea initiliazed (function name)
+            ,'EA_delete_callback' => ""    // EditArea deleted (function name)
+            ,'EA_load_callback' => ""    // EditArea fully loaded and displayed (function name)
+            ,'EA_unload_callback' => ""    // EditArea delete while being displayed (function name)
+            ,'EA_toggle_on_callback' => ""             // EditArea toggled on (function name)
+            ,'EA_toggle_off_callback' => ""            // EditArea toggled off (function name)
+            ,'EA_file_switch_on_callback' => ""        // a new tab is selected (called for the newly selected file)
+            ,'EA_file_switch_off_callback' => ""    // a new tab is selected (called for the previously selected file)
+            ,'EA_file_close_callback' => ""            // close a tab
+        );
+    }
+}
+if (!function_exists('registerEditArea')) {
+
+function registerEditArea(
+     $initId = null
+    ,$syntax = "php"
+    ,$syntax_selection = true
+    ,$allow_resize = "both"
+    ,$allow_toggle = true
+    ,$start_highlight = true
+    ,$min_width = 600
+    ,$min_height = 450
+    ,$toolbar = "default"
+    ) {
+        $isArray = true;
+        if( is_array($initId) ){
+        //    $json = json_encode($sInitId, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG);
+            $aInitEditArea = getEditareaDefaultSettings();
+            $aInitEditArea = array_merge($aInitEditArea,$initId);
+        } else {
+            $id = $initId;
+            $aInitEditArea = getEditareaDefaultSettings();
+            $aInitEditArea['id'] = $initId;
+            $aInitEditArea['syntax'] = $syntax;
+            $aInitEditArea['syntax_selection_allow'] = $syntax_selection;
+            $aInitEditArea['allow_resize'] = $allow_resize;
+            $aInitEditArea['allow_toggle'] = $allow_toggle;
+            $aInitEditArea['start_highlight'] = $start_highlight;
+            $aInitEditArea['min_width'] = $min_width;
+            $aInitEditArea['min_height'] = $min_height;
+            $aInitEditArea['toolbar'] = $toolbar;
+        }
+        // set default toolbar if no user defined was specified
+        if ($aInitEditArea['toolbar'] == 'default') {
+            $aInitEditArea['toolbar'] = 'search, fullscreen, |, undo, redo, |, select_font, |, change_smooth_selection, highlight, reset_highlight, |, help';
+//            $aInitEditArea['toolbar'] = (!$aInitEditArea['syntax_selection_allow']) ? str_replace('syntax_selection,', '', $aInitEditArea['toolbar']) : $aInitEditArea['toolbar'];
+        }
+        // check if used Website Baker backend language is supported by EditArea
+        $language = 'en';
+        if (defined('LANGUAGE') && is_readable(dirname(__FILE__).'/langs/'.strtolower(LANGUAGE).'.js'))
+        {
+            $aInitEditArea['language'] = strtolower(LANGUAGE);
+        }
+        // check if highlight syntax is supported by edit_area
+        $aInitEditArea['syntax'] = in_array($aInitEditArea['syntax'], array('css', 'html', 'js', 'php', 'xml')) ? $aInitEditArea['syntax'] : 'basic';
+        // check if resize option is supported by edit_area
+        $aInitEditArea['allow_resize'] = in_array($aInitEditArea['allow_resize'], array('no', 'both', 'x', 'y')) ? $aInitEditArea['allow_resize'] : 'no';
+        if(!defined('LOADER_HELP')) {
+            loader_help();
+            define('LOADER_HELP', true);
+        }
+        if(version_compare(PHP_VERSION, '5.4', '<'))
+        {
+            $json = json_encode($aInitEditArea);
+        } else {
+            $json = json_encode($aInitEditArea, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG);
+        }
+        // return the Javascript code
+        $result = <<< EOT
+        <script type="text/javascript">
+            editAreaLoader.init( $json );
+        </script>
+EOT;
+        return $result;
+    }
+}
+
+if (!function_exists('getEditAreaSyntax')) {
+    function getEditAreaSyntax($file)
+    {
+        // returns the highlight scheme for edit_area
+        $syntax = 'php';
+        if (is_readable($file)) {
+            // extract file extension
+            $file_info = pathinfo($file);
+
+            switch ($file_info['extension']) {
+                case 'htm': case 'html': case 'htt':
+                    $syntax = 'html';
+                      break;
+
+                 case 'css':
+                    $syntax = 'css';
+                      break;
+
+                case 'js':
+                    $syntax = 'js';
+                    break;
+
+                case 'xml':
+                    $syntax = 'xml';
+                    break;
+
+                 case 'php': case 'php3': case 'php4': case 'php5':
+                    $syntax = 'php';
+                      break;
+
+                default:
+                    $syntax = 'php';
+                    break;
+            }
+        }
+        return $syntax ;
+    }
+}

Property changes on: trunk/include/editarea/wb_wrapper_edit_area.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/idna_convert/idna_convert.class.php
===================================================================
--- trunk/include/idna_convert/idna_convert.class.php	(nonexistent)
+++ trunk/include/idna_convert/idna_convert.class.php	(revision 2)
@@ -0,0 +1,1539 @@
+<?php
+// {{{ license
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+//
+// +----------------------------------------------------------------------+
+// | 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
+// | USA.                                                                 |
+// +----------------------------------------------------------------------+
+//
+
+// }}}
+
+/**
+ * Encode/decode Internationalized Domain Names.
+ *
+ * The class allows to convert internationalized domain names
+ * (see RFC 3490 for details) as they can be used with various registries worldwide
+ * to be translated between their original (localized) form and their encoded form
+ * as it will be used in the DNS (Domain Name System).
+ *
+ * The class provides two public methods, encode() and decode(), which do exactly
+ * what you would expect them to do. You are allowed to use complete domain names,
+ * simple strings and complete email addresses as well. That means, that you might
+ * use any of the following notations:
+ *
+ * - www.nrgler.com
+ * - xn--nrgler-wxa
+ * - xn--brse-5qa.xn--knrz-1ra.info
+ *
+ * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4 array.
+ * Unicode output is available in the same formats.
+ * You can select your preferred format via {@link set_paramter()}.
+ *
+ * ACE input and output is always expected to be ASCII.
+ *
+ * @author  Matthias Sommerfeld <mso@phlylabs.de>
+ * @author  Leonid Kogan <lko@neuse.de>
+ * @copyright 2004-2010 phlyLabs Berlin, http://phlylabs.de
+ * @version 0.6.9 2010-11-04
+ */
+class idna_convert
+{
+    // NP See below
+
+    // Internal settings, do not mess with them
+    protected $_punycode_prefix = 'xn--';
+    protected $_invalid_ucs = 0x80000000;
+    protected $_max_ucs = 0x10FFFF;
+    protected $_base = 36;
+    protected $_tmin = 1;
+    protected $_tmax = 26;
+    protected $_skew = 38;
+    protected $_damp = 700;
+    protected $_initial_bias = 72;
+    protected $_initial_n = 0x80;
+    protected $_sbase = 0xAC00;
+    protected $_lbase = 0x1100;
+    protected $_vbase = 0x1161;
+    protected $_tbase = 0x11A7;
+    protected $_lcount = 19;
+    protected $_vcount = 21;
+    protected $_tcount = 28;
+    protected $_ncount = 588;   // _vcount * _tcount
+    protected $_scount = 11172; // _lcount * _tcount * _vcount
+    protected $_error = false;
+
+    // See {@link set_paramter()} for details of how to change the following
+    // settings from within your script / application
+    protected $_api_encoding = 'utf8';   // Default input charset is UTF-8
+    protected $_allow_overlong = false;  // Overlong UTF-8 encodings are forbidden
+    protected $_strict_mode = false;     // Behave strict or not
+    protected $_encode_german_sz = true; // True to encode German ; False, if not
+
+    /**
+     * the constructor
+     *
+     * @param array $options
+     * @return boolean
+     * @since 0.5.2
+     */
+    public function __construct($options = false)
+    {
+        $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
+        // If parameters are given, pass these to the respective method
+        if (is_array($options)) return $this->set_parameter($options);
+        if (!$this->_encode_german_sz) {
+            $this->NP['replacemaps'][0xDF] = array(0x73, 0x73);
+        }
+    }
+
+    /**
+     * Sets a new option value. Available options and values:
+     * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
+     *         'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
+     * [overlong - Unicode does not allow unnecessarily long encodings of chars,
+     *             to allow this, set this parameter to true, else to false;
+     *             default is false.]
+     * [strict - true: strict mode, good for registration purposes - Causes errors
+     *           on failures; false: loose mode, ideal for "wildlife" applications
+     *           by silently ignoring errors and returning the original input instead
+     *
+     * @param    mixed     Parameter to set (string: single parameter; array of Parameter => Value pairs)
+     * @param    string    Value to use (if parameter 1 is a string)
+     * @return   boolean   true on success, false otherwise
+     */
+    public function set_parameter($option, $value = false)
+    {
+        if (!is_array($option)) {
+            $option = array($option => $value);
+        }
+        foreach ($option as $k => $v) {
+            switch ($k) {
+            case 'encoding':
+                switch ($v) {
+                case 'utf8':
+                case 'ucs4_string':
+                case 'ucs4_array':
+                    $this->_api_encoding = $v;
+                    break;
+                default:
+                    $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
+                    return false;
+                }
+                break;
+            case 'overlong':
+                $this->_allow_overlong = ($v) ? true : false;
+                break;
+            case 'strict':
+                $this->_strict_mode = ($v) ? true : false;
+                break;
+            case 'encode_german_sz':
+                $this->_encode_german_sz = ($v) ? true : false;
+                break;
+            default:
+                $this->_error('Set Parameter: Unknown option '.$k);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Decode a given ACE domain name
+     * @param    string   Domain name (ACE string)
+     * [@param    string   Desired output encoding, see {@link set_parameter}]
+     * @return   string   Decoded Domain name (UTF-8 or UCS-4)
+     */
+    public function decode($input, $one_time_encoding = false)
+    {
+        // Optionally set
+        if ($one_time_encoding) {
+            switch ($one_time_encoding) {
+            case 'utf8':
+            case 'ucs4_string':
+            case 'ucs4_array':
+                break;
+            default:
+                $this->_error('Unknown encoding '.$one_time_encoding);
+                return false;
+            }
+        }
+        // Make sure to drop any newline characters around
+        $input = trim($input);
+
+        // Negotiate input and try to determine, whether it is a plain string,
+        // an email address or something like a complete URL
+        if (strpos($input, '@')) { // Maybe it is an email address
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                $this->_error('Only simple domain name parts can be handled in strict mode');
+                return false;
+            }
+            list ($email_pref, $input) = explode('@', $input, 2);
+            $arr = explode('.', $input);
+            foreach ($arr as $k => $v) {
+                if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
+                    $conv = $this->_decode($v);
+                    if ($conv) $arr[$k] = $conv;
+                }
+            }
+            $input = join('.', $arr);
+            $arr = explode('.', $email_pref);
+            foreach ($arr as $k => $v) {
+                if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
+                    $conv = $this->_decode($v);
+                    if ($conv) $arr[$k] = $conv;
+                }
+            }
+            $email_pref = join('.', $arr);
+            $return = $email_pref . '@' . $input;
+        } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                $this->_error('Only simple domain name parts can be handled in strict mode');
+                return false;
+            }
+            $parsed = parse_url($input);
+            if (isset($parsed['host'])) {
+                $arr = explode('.', $parsed['host']);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    if ($conv) $arr[$k] = $conv;
+                }
+                $parsed['host'] = join('.', $arr);
+                $return =
+                        (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
+                        .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
+                        .$parsed['host']
+                        .(empty($parsed['port']) ? '' : ':'.$parsed['port'])
+                        .(empty($parsed['path']) ? '' : $parsed['path'])
+                        .(empty($parsed['query']) ? '' : '?'.$parsed['query'])
+                        .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
+            } else { // parse_url seems to have failed, try without it
+                $arr = explode('.', $input);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    $arr[$k] = ($conv) ? $conv : $v;
+                }
+                $return = join('.', $arr);
+            }
+        } else { // Otherwise we consider it being a pure domain name string
+            $return = $this->_decode($input);
+            if (!$return) $return = $input;
+        }
+        // The output is UTF-8 by default, other output formats need conversion here
+        // If one time encoding is given, use this, else the objects property
+        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
+        case 'utf8':
+            return $return;
+            break;
+        case 'ucs4_string':
+           return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
+           break;
+        case 'ucs4_array':
+            return $this->_utf8_to_ucs4($return);
+            break;
+        default:
+            $this->_error('Unsupported output format');
+            return false;
+        }
+    }
+
+    /**
+     * Encode a given UTF-8 domain name
+     * @param    string   Domain name (UTF-8 or UCS-4)
+     * [@param    string   Desired input encoding, see {@link set_parameter}]
+     * @return   string   Encoded Domain name (ACE string)
+     */
+    public function encode($decoded, $one_time_encoding = false)
+    {
+        // Forcing conversion of input to UCS4 array
+        // If one time encoding is given, use this, else the objects property
+        switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
+        case 'utf8':
+            $decoded = $this->_utf8_to_ucs4($decoded);
+            break;
+        case 'ucs4_string':
+           $decoded = $this->_ucs4_string_to_ucs4($decoded);
+        case 'ucs4_array':
+           break;
+        default:
+            $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
+            return false;
+        }
+
+        // No input, no output, what else did you expect?
+        if (empty($decoded)) return '';
+
+        // Anchors for iteration
+        $last_begin = 0;
+        // Output string
+        $output = '';
+        foreach ($decoded as $k => $v) {
+            // Make sure to use just the plain dot
+            switch($v) {
+            case 0x3002:
+            case 0xFF0E:
+            case 0xFF61:
+                $decoded[$k] = 0x2E;
+                // Right, no break here, the above are converted to dots anyway
+            // Stumbling across an anchoring character
+            case 0x2E:
+            case 0x2F:
+            case 0x3A:
+            case 0x3F:
+            case 0x40:
+                // Neither email addresses nor URLs allowed in strict mode
+                if ($this->_strict_mode) {
+                   $this->_error('Neither email addresses nor URLs are allowed in strict mode.');
+                   return false;
+                } else {
+                    // Skip first char
+                    if ($k) {
+                        $encoded = '';
+                        $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
+                        if ($encoded) {
+                            $output .= $encoded;
+                        } else {
+                            $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
+                        }
+                        $output .= chr($decoded[$k]);
+                    }
+                    $last_begin = $k + 1;
+                }
+            }
+        }
+        // Catch the rest of the string
+        if ($last_begin) {
+            $inp_len = sizeof($decoded);
+            $encoded = '';
+            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
+            if ($encoded) {
+                $output .= $encoded;
+            } else {
+                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
+            }
+            return $output;
+        } else {
+            if ($output = $this->_encode($decoded)) {
+                return $output;
+            } else {
+                return $this->_ucs4_to_utf8($decoded);
+            }
+        }
+    }
+
+    /**
+     * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their
+     * path or query components, too.
+     * @param string  $uri  Expects the URI as a UTF-8 (or ASCII) string
+     * @return  string  The URI encoded to Punycode, everything but the host component is left alone
+     * @since 0.6.4
+     */
+    public function encode_uri($uri)
+    {
+        $parsed = parse_url($uri);
+        if (!isset($parsed['host'])) {
+            $this->_error('The given string does not look like a URI');
+            return false;
+        }
+        $arr = explode('.', $parsed['host']);
+        foreach ($arr as $k => $v) {
+            $conv = $this->encode($v, 'utf8');
+            if ($conv) $arr[$k] = $conv;
+        }
+        $parsed['host'] = join('.', $arr);
+        $return =
+                (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
+                .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
+                .$parsed['host']
+                .(empty($parsed['port']) ? '' : ':'.$parsed['port'])
+                .(empty($parsed['path']) ? '' : $parsed['path'])
+                .(empty($parsed['query']) ? '' : '?'.$parsed['query'])
+                .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
+        return $return;
+    }
+
+    /**
+     * Use this method to get the last error ocurred
+     * @param    void
+     * @return   string   The last error, that occured
+     */
+    public function get_last_error()
+    {
+        return $this->_error;
+    }
+
+    /**
+     * The actual decoding algorithm
+     * @param string
+     * @return mixed
+     */
+    protected function _decode($encoded)
+    {
+        $decoded = array();
+        // find the Punycode prefix
+        if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
+            $this->_error('This is not a punycode string');
+            return false;
+        }
+        $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
+        // If nothing left after removing the prefix, it is hopeless
+        if (!$encode_test) {
+            $this->_error('The given encoded string was empty');
+            return false;
+        }
+        // Find last occurence of the delimiter
+        $delim_pos = strrpos($encoded, '-');
+        if ($delim_pos > strlen($this->_punycode_prefix)) {
+            for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) {
+                $decoded[] = ord($encoded{$k});
+            }
+        }
+        $deco_len = count($decoded);
+        $enco_len = strlen($encoded);
+
+        // Wandering through the strings; init
+        $is_first = true;
+        $bias = $this->_initial_bias;
+        $idx = 0;
+        $char = $this->_initial_n;
+
+        for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
+            for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
+                $digit = $this->_decode_digit($encoded{$enco_idx++});
+                $idx += $digit * $w;
+                $t = ($k <= $bias) ? $this->_tmin :
+                        (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
+                if ($digit < $t) break;
+                $w = (int) ($w * ($this->_base - $t));
+            }
+            $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
+            $is_first = false;
+            $char += (int) ($idx / ($deco_len + 1));
+            $idx %= ($deco_len + 1);
+            if ($deco_len > 0) {
+                // Make room for the decoded char
+                for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)];
+            }
+            $decoded[$idx++] = $char;
+        }
+        return $this->_ucs4_to_utf8($decoded);
+    }
+
+    /**
+     * The actual encoding algorithm
+     * @param  string
+     * @return mixed
+     */
+    protected function _encode($decoded)
+    {
+        // We cannot encode a domain name containing the Punycode prefix
+        $extract = strlen($this->_punycode_prefix);
+        $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
+        $check_deco = array_slice($decoded, 0, $extract);
+
+        if ($check_pref == $check_deco) {
+            $this->_error('This is already a punycode string');
+            return false;
+        }
+        // We will not try to encode strings consisting of basic code points only
+        $encodable = false;
+        foreach ($decoded as $k => $v) {
+            if ($v > 0x7a) {
+                $encodable = true;
+                break;
+            }
+        }
+        if (!$encodable) {
+            $this->_error('The given string does not contain encodable chars');
+            return false;
+        }
+        // Do NAMEPREP
+        $decoded = $this->_nameprep($decoded);
+        if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
+        $deco_len  = count($decoded);
+        if (!$deco_len) return false; // Empty array
+        $codecount = 0; // How many chars have been consumed
+        $encoded = '';
+        // Copy all basic code points to output
+        for ($i = 0; $i < $deco_len; ++$i) {
+            $test = $decoded[$i];
+            // Will match [-0-9a-zA-Z]
+            if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B)
+                    || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
+                $encoded .= chr($decoded[$i]);
+                $codecount++;
+            }
+        }
+        if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
+
+        // Start with the prefix; copy it to output
+        $encoded = $this->_punycode_prefix.$encoded;
+        // If we have basic code points in output, add an hyphen to the end
+        if ($codecount) $encoded .= '-';
+        // Now find and encode all non-basic code points
+        $is_first = true;
+        $cur_code = $this->_initial_n;
+        $bias = $this->_initial_bias;
+        $delta = 0;
+        while ($codecount < $deco_len) {
+            // Find the smallest code point >= the current code point and
+            // remember the last ouccrence of it in the input
+            for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
+                if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
+                    $next_code = $decoded[$i];
+                }
+            }
+            $delta += ($next_code - $cur_code) * ($codecount + 1);
+            $cur_code = $next_code;
+
+            // Scan input again and encode all characters whose code point is $cur_code
+            for ($i = 0; $i < $deco_len; $i++) {
+                if ($decoded[$i] < $cur_code) {
+                    $delta++;
+                } elseif ($decoded[$i] == $cur_code) {
+                    for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
+                        $t = ($k <= $bias) ? $this->_tmin :
+                                (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
+                        if ($q < $t) break;
+                        $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
+                        $q = (int) (($q - $t) / ($this->_base - $t));
+                    }
+                    $encoded .= $this->_encode_digit($q);
+                    $bias = $this->_adapt($delta, $codecount+1, $is_first);
+                    $codecount++;
+                    $delta = 0;
+                    $is_first = false;
+                }
+            }
+            $delta++;
+            $cur_code++;
+        }
+        return $encoded;
+    }
+
+    /**
+     * Adapt the bias according to the current code point and position
+     * @param int $delta
+     * @param int $npoints
+     * @param int $is_first
+     * @return int
+     */
+    protected function _adapt($delta, $npoints, $is_first)
+    {
+        $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
+        $delta += intval($delta / $npoints);
+        for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
+            $delta = intval($delta / ($this->_base - $this->_tmin));
+        }
+        return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
+    }
+
+    /**
+     * Encoding a certain digit
+     * @param    int $d
+     * @return string
+     */
+    protected function _encode_digit($d)
+    {
+        return chr($d + 22 + 75 * ($d < 26));
+    }
+
+    /**
+     * Decode a certain digit
+     * @param    int $cp
+     * @return int
+     */
+    protected function _decode_digit($cp)
+    {
+        $cp = ord($cp);
+        return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
+    }
+
+    /**
+     * Internal error handling method
+     * @param  string $error
+     */
+    protected function _error($error = '')
+    {
+        $this->_error = $error;
+    }
+
+    /**
+     * Do Nameprep according to RFC3491 and RFC3454
+     * @param    array    Unicode Characters
+     * @return   string   Unicode Characters, Nameprep'd
+     */
+    protected function _nameprep($input)
+    {
+        $output = array();
+        $error = false;
+        //
+        // Mapping
+        // Walking through the input array, performing the required steps on each of
+        // the input chars and putting the result into the output array
+        // While mapping required chars we apply the cannonical ordering
+        foreach ($input as $v) {
+            // Map to nothing == skip that code point
+            if (in_array($v, $this->NP['map_nothing'])) continue;
+            // Try to find prohibited input
+            if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) {
+                $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
+                return false;
+            }
+            foreach ($this->NP['prohibit_ranges'] as $range) {
+                if ($range[0] <= $v && $v <= $range[1]) {
+                    $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
+                    return false;
+                }
+            }
+            // Hangul syllable decomposition
+            if (0xAC00 <= $v && $v <= 0xD7AF) {
+                foreach ($this->_hangul_decompose($v) as $out) $output[] = (int) $out;
+            // There's a decomposition mapping for that code point
+            } elseif (isset($this->NP['replacemaps'][$v])) {
+                foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) {
+                    $output[] = (int) $out;
+                }
+            } else {
+                $output[] = (int) $v;
+            }
+        }
+        // Before applying any Combining, try to rearrange any Hangul syllables
+        $output = $this->_hangul_compose($output);
+        //
+        // Combine code points
+        //
+        $last_class = 0;
+        $last_starter = 0;
+        $out_len = count($output);
+        for ($i = 0; $i < $out_len; ++$i) {
+            $class = $this->_get_combining_class($output[$i]);
+            if ((!$last_class || $last_class > $class) && $class) {
+                // Try to match
+                $seq_len = $i - $last_starter;
+                $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
+                // On match: Replace the last starter with the composed character and remove
+                // the now redundant non-starter(s)
+                if ($out) {
+                    $output[$last_starter] = $out;
+                    if (count($out) != $seq_len) {
+                        for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j];
+                        unset($output[$out_len]);
+                    }
+                    // Rewind the for loop by one, since there can be more possible compositions
+                    $i--;
+                    $out_len--;
+                    $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]);
+                    continue;
+                }
+            }
+            // The current class is 0
+            if (!$class) $last_starter = $i;
+            $last_class = $class;
+        }
+        return $output;
+    }
+
+    /**
+     * Decomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
+     * @param    integer  32bit UCS4 code point
+     * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
+     */
+    protected function _hangul_decompose($char)
+    {
+        $sindex = (int) $char - $this->_sbase;
+        if ($sindex < 0 || $sindex >= $this->_scount) return array($char);
+        $result = array();
+        $result[] = (int) $this->_lbase + $sindex / $this->_ncount;
+        $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
+        $T = intval($this->_tbase + $sindex % $this->_tcount);
+        if ($T != $this->_tbase) $result[] = $T;
+        return $result;
+    }
+    /**
+     * Ccomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
+     * @param    array    Decomposed UCS4 sequence
+     * @return   array    UCS4 sequence with syllables composed
+     */
+    protected function _hangul_compose($input)
+    {
+        $inp_len = count($input);
+        if (!$inp_len) return array();
+        $result = array();
+        $last = (int) $input[0];
+        $result[] = $last; // copy first char from input to output
+
+        for ($i = 1; $i < $inp_len; ++$i) {
+            $char = (int) $input[$i];
+            $sindex = $last - $this->_sbase;
+            $lindex = $last - $this->_lbase;
+            $vindex = $char - $this->_vbase;
+            $tindex = $char - $this->_tbase;
+            // Find out, whether two current characters are LV and T
+            if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0)
+                    && 0 <= $tindex && $tindex <= $this->_tcount) {
+                // create syllable of form LVT
+                $last += $tindex;
+                $result[(count($result) - 1)] = $last; // reset last
+                continue; // discard char
+            }
+            // Find out, whether two current characters form L and V
+            if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
+                // create syllable of form LV
+                $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
+                $result[(count($result) - 1)] = $last; // reset last
+                continue; // discard char
+            }
+            // if neither case was true, just add the character
+            $last = $char;
+            $result[] = $char;
+        }
+        return $result;
+    }
+
+    /**
+     * Returns the combining class of a certain wide char
+     * @param    integer    Wide char to check (32bit integer)
+     * @return   integer    Combining class if found, else 0
+     */
+    protected function _get_combining_class($char)
+    {
+        return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0;
+    }
+
+    /**
+     * Apllies the cannonical ordering of a decomposed UCS4 sequence
+     * @param    array      Decomposed UCS4 sequence
+     * @return   array      Ordered USC4 sequence
+     */
+    protected function _apply_cannonical_ordering($input)
+    {
+        $swap = true;
+        $size = count($input);
+        while ($swap) {
+            $swap = false;
+            $last = $this->_get_combining_class(intval($input[0]));
+            for ($i = 0; $i < $size-1; ++$i) {
+                $next = $this->_get_combining_class(intval($input[$i+1]));
+                if ($next != 0 && $last > $next) {
+                    // Move item leftward until it fits
+                    for ($j = $i + 1; $j > 0; --$j) {
+                        if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break;
+                        $t = intval($input[$j]);
+                        $input[$j] = intval($input[$j-1]);
+                        $input[$j-1] = $t;
+                        $swap = true;
+                    }
+                    // Reentering the loop looking at the old character again
+                    $next = $last;
+                }
+                $last = $next;
+            }
+        }
+        return $input;
+    }
+
+    /**
+     * Do composition of a sequence of starter and non-starter
+     * @param    array      UCS4 Decomposed sequence
+     * @return   array      Ordered USC4 sequence
+     */
+    protected function _combine($input)
+    {
+        $inp_len = count($input);
+        foreach ($this->NP['replacemaps'] as $np_src => $np_target) {
+            if ($np_target[0] != $input[0]) continue;
+            if (count($np_target) != $inp_len) continue;
+            $hit = false;
+            foreach ($input as $k2 => $v2) {
+                if ($v2 == $np_target[$k2]) {
+                    $hit = true;
+                } else {
+                    $hit = false;
+                    break;
+                }
+            }
+            if ($hit) return $np_src;
+        }
+        return false;
+    }
+
+    /**
+     * This converts an UTF-8 encoded string to its UCS-4 representation
+     * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
+     * each of the "chars". This is due to PHP not being able to handle strings with
+     * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
+     * The following UTF-8 encodings are supported:
+     * bytes bits  representation
+     * 1        7  0xxxxxxx
+     * 2       11  110xxxxx 10xxxxxx
+     * 3       16  1110xxxx 10xxxxxx 10xxxxxx
+     * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * Each x represents a bit that can be used to store character data.
+     * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
+     * @param string $input
+     * @return string
+     */
+    protected function _utf8_to_ucs4($input)
+    {
+        $output = array();
+        $out_len = 0;
+        // Patch by Daniel Hahler; work around prolbem with mbstring.func_overload
+        if (function_exists('mb_strlen')) {
+            $inp_len = mb_strlen($input, '8bit');
+        } else {
+            $inp_len = strlen($input);
+        }
+        $mode = 'next';
+        $test = 'none';
+        for ($k = 0; $k < $inp_len; ++$k) {
+            $v = ord($input{$k}); // Extract byte from input string
+            if ($v < 128) { // We found an ASCII char - put into stirng as is
+                $output[$out_len] = $v;
+                ++$out_len;
+                if ('add' == $mode) {
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
+                    return false;
+                }
+                continue;
+            }
+            if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
+                $start_byte = $v;
+                $mode = 'add';
+                $test = 'range';
+                if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
+                    $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
+                    $v = ($v - 192) << 6;
+                } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 1;
+                    $v = ($v - 224) << 12;
+                } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 2;
+                    $v = ($v - 240) << 18;
+                } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 3;
+                    $v = ($v - 248) << 24;
+                } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 4;
+                    $v = ($v - 252) << 30;
+                } else {
+                    $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
+                    return false;
+                }
+                if ('add' == $mode) {
+                    $output[$out_len] = (int) $v;
+                    ++$out_len;
+                    continue;
+                }
+            }
+            if ('add' == $mode) {
+                if (!$this->_allow_overlong && $test == 'range') {
+                    $test = 'none';
+                    if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
+                        $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
+                        return false;
+                    }
+                }
+                if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
+                    $v = ($v - 128) << ($next_byte * 6);
+                    $output[($out_len - 1)] += $v;
+                    --$next_byte;
+                } else {
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
+                    return false;
+                }
+                if ($next_byte < 0) {
+                    $mode = 'next';
+                }
+            }
+        } // for
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 string into UTF-8 string
+     * See _utf8_to_ucs4() for details
+     * @param string  $input
+     * @return string
+     */
+    protected function _ucs4_to_utf8($input)
+    {
+        $output = '';
+        foreach ($input as $k => $v) {
+            if ($v < 128) { // 7bit are transferred literally
+                $output .= chr($v);
+            } elseif ($v < (1 << 11)) { // 2 bytes
+                $output .= chr(192+($v >> 6)).chr(128+($v & 63));
+            } elseif ($v < (1 << 16)) { // 3 bytes
+                $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63));
+            } elseif ($v < (1 << 21)) { // 4 bytes
+                $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63));
+            } elseif (self::$safe_mode) {
+                $output .= self::$safe_char;
+            } else {
+                $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
+                return false;
+            }
+        }
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 array into UCS-4 string
+     *
+     * @param array $input
+     * @return string
+     */
+    protected function _ucs4_to_ucs4_string($input)
+    {
+        $output = '';
+        // Take array values and split output to 4 bytes per value
+        // The bit mask is 255, which reads &11111111
+        foreach ($input as $v) {
+            $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
+        }
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 strin into UCS-4 garray
+     *
+     * @param  string $input
+     * @return array
+     */
+    protected function _ucs4_string_to_ucs4($input)
+    {
+        $output = array();
+        $inp_len = strlen($input);
+        // Input length must be dividable by 4
+        if ($inp_len % 4) {
+            $this->_error('Input UCS4 string is broken');
+            return false;
+        }
+        // Empty input - return empty output
+        if (!$inp_len) return $output;
+        for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
+            // Increment output position every 4 input bytes
+            if (!($i % 4)) {
+                $out_len++;
+                $output[$out_len] = 0;
+            }
+            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
+        }
+        return $output;
+    }
+
+    /**
+     * Holds all relevant mapping tables
+     * See RFC3454 for details
+     *
+     * @private array
+     * @since 0.5.2
+     */
+    protected $NP = array
+            ('map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C
+                    ,0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07
+                    ,0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
+                    )
+            ,'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
+                    ,20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 ,33, 34, 35, 36, 37, 38, 39, 40, 41, 42
+                    ,43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002
+                    )
+            ,'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003
+                    ,0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F
+                    ,0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C
+                    ,0x206D, 0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF
+                    ,0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE
+                    ,0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF
+                    ,0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
+                    )
+            ,'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A)
+                    ,array(0xE000, 0xF8FF) ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD)
+                    ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
+                    )
+            ,'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63)
+                    ,0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67)
+                    ,0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B)
+                    ,0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F)
+                    ,0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73)
+                    ,0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77)
+                    ,0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC)
+                    ,0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3)
+                    ,0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7)
+                    ,0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB)
+                    ,0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF)
+                    ,0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3)
+                    ,0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8)
+                    ,0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC)
+                    ,0xDD => array(0xFD), 0xDE => array(0xFE) /* Here was German "" -> "ss", is now configurable */
+                    ,0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105)
+                    ,0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B)
+                    ,0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111)
+                    ,0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117)
+                    ,0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D)
+                    ,0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123)
+                    ,0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129)
+                    ,0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F)
+                    ,0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135)
+                    ,0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C)
+                    ,0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142)
+                    ,0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148)
+                    ,0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D)
+                    ,0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153)
+                    ,0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159)
+                    ,0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F)
+                    ,0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165)
+                    ,0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B)
+                    ,0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171)
+                    ,0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177)
+                    ,0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C)
+                    ,0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253)
+                    ,0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254)
+                    ,0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257)
+                    ,0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259)
+                    ,0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260)
+                    ,0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268)
+                    ,0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272)
+                    ,0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3)
+                    ,0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8)
+                    ,0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288)
+                    ,0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B)
+                    ,0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292)
+                    ,0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6)
+                    ,0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9)
+                    ,0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE)
+                    ,0x1CF => array(0x1D0), 0x1D1   => array(0x1D2), 0x1D3   => array(0x1D4)
+                    ,0x1D5   => array(0x1D6), 0x1D7   => array(0x1D8), 0x1D9   => array(0x1DA)
+                    ,0x1DB   => array(0x1DC), 0x1DE   => array(0x1DF), 0x1E0   => array(0x1E1)
+                    ,0x1E2   => array(0x1E3), 0x1E4   => array(0x1E5), 0x1E6   => array(0x1E7)
+                    ,0x1E8   => array(0x1E9), 0x1EA   => array(0x1EB), 0x1EC   => array(0x1ED)
+                    ,0x1EE   => array(0x1EF), 0x1F0   => array(0x6A, 0x30C), 0x1F1   => array(0x1F3)
+                    ,0x1F2   => array(0x1F3), 0x1F4   => array(0x1F5), 0x1F6   => array(0x195)
+                    ,0x1F7   => array(0x1BF), 0x1F8   => array(0x1F9), 0x1FA   => array(0x1FB)
+                    ,0x1FC   => array(0x1FD), 0x1FE   => array(0x1FF), 0x200   => array(0x201)
+                    ,0x202   => array(0x203), 0x204   => array(0x205), 0x206   => array(0x207)
+                    ,0x208   => array(0x209), 0x20A   => array(0x20B), 0x20C   => array(0x20D)
+                    ,0x20E   => array(0x20F), 0x210   => array(0x211), 0x212   => array(0x213)
+                    ,0x214   => array(0x215), 0x216   => array(0x217), 0x218   => array(0x219)
+                    ,0x21A   => array(0x21B), 0x21C   => array(0x21D), 0x21E   => array(0x21F)
+                    ,0x220   => array(0x19E), 0x222   => array(0x223), 0x224   => array(0x225)
+                    ,0x226   => array(0x227), 0x228   => array(0x229), 0x22A   => array(0x22B)
+                    ,0x22C   => array(0x22D), 0x22E   => array(0x22F), 0x230   => array(0x231)
+                    ,0x232   => array(0x233), 0x345   => array(0x3B9), 0x37A   => array(0x20, 0x3B9)
+                    ,0x386   => array(0x3AC), 0x388   => array(0x3AD), 0x389   => array(0x3AE)
+                    ,0x38A   => array(0x3AF), 0x38C   => array(0x3CC), 0x38E   => array(0x3CD)
+                    ,0x38F   => array(0x3CE), 0x390   => array(0x3B9, 0x308, 0x301)
+                    ,0x391   => array(0x3B1), 0x392   => array(0x3B2), 0x393   => array(0x3B3)
+                    ,0x394   => array(0x3B4), 0x395   => array(0x3B5), 0x396   => array(0x3B6)
+                    ,0x397   => array(0x3B7), 0x398   => array(0x3B8), 0x399   => array(0x3B9)
+                    ,0x39A   => array(0x3BA), 0x39B   => array(0x3BB), 0x39C   => array(0x3BC)
+                    ,0x39D   => array(0x3BD), 0x39E   => array(0x3BE), 0x39F   => array(0x3BF)
+                    ,0x3A0   => array(0x3C0), 0x3A1   => array(0x3C1), 0x3A3   => array(0x3C3)
+                    ,0x3A4   => array(0x3C4), 0x3A5   => array(0x3C5), 0x3A6   => array(0x3C6)
+                    ,0x3A7   => array(0x3C7), 0x3A8   => array(0x3C8), 0x3A9   => array(0x3C9)
+                    ,0x3AA   => array(0x3CA), 0x3AB   => array(0x3CB), 0x3B0   => array(0x3C5, 0x308, 0x301)
+                    ,0x3C2   => array(0x3C3), 0x3D0   => array(0x3B2), 0x3D1   => array(0x3B8)
+                    ,0x3D2   => array(0x3C5), 0x3D3   => array(0x3CD), 0x3D4   => array(0x3CB)
+                    ,0x3D5   => array(0x3C6), 0x3D6   => array(0x3C0), 0x3D8   => array(0x3D9)
+                    ,0x3DA   => array(0x3DB), 0x3DC   => array(0x3DD), 0x3DE   => array(0x3DF)
+                    ,0x3E0   => array(0x3E1), 0x3E2   => array(0x3E3), 0x3E4   => array(0x3E5)
+                    ,0x3E6   => array(0x3E7), 0x3E8   => array(0x3E9), 0x3EA   => array(0x3EB)
+                    ,0x3EC   => array(0x3ED), 0x3EE   => array(0x3EF), 0x3F0   => array(0x3BA)
+                    ,0x3F1   => array(0x3C1), 0x3F2   => array(0x3C3), 0x3F4   => array(0x3B8)
+                    ,0x3F5   => array(0x3B5), 0x400   => array(0x450), 0x401   => array(0x451)
+                    ,0x402   => array(0x452), 0x403   => array(0x453), 0x404   => array(0x454)
+                    ,0x405   => array(0x455), 0x406   => array(0x456), 0x407   => array(0x457)
+                    ,0x408   => array(0x458), 0x409   => array(0x459), 0x40A   => array(0x45A)
+                    ,0x40B   => array(0x45B), 0x40C   => array(0x45C), 0x40D   => array(0x45D)
+                    ,0x40E   => array(0x45E), 0x40F   => array(0x45F), 0x410   => array(0x430)
+                    ,0x411   => array(0x431), 0x412   => array(0x432), 0x413   => array(0x433)
+                    ,0x414   => array(0x434), 0x415   => array(0x435), 0x416   => array(0x436)
+                    ,0x417   => array(0x437), 0x418   => array(0x438), 0x419   => array(0x439)
+                    ,0x41A   => array(0x43A), 0x41B   => array(0x43B), 0x41C   => array(0x43C)
+                    ,0x41D   => array(0x43D), 0x41E   => array(0x43E), 0x41F   => array(0x43F)
+                    ,0x420   => array(0x440), 0x421   => array(0x441), 0x422   => array(0x442)
+                    ,0x423   => array(0x443), 0x424   => array(0x444), 0x425   => array(0x445)
+                    ,0x426   => array(0x446), 0x427   => array(0x447), 0x428   => array(0x448)
+                    ,0x429   => array(0x449), 0x42A   => array(0x44A), 0x42B   => array(0x44B)
+                    ,0x42C   => array(0x44C), 0x42D   => array(0x44D), 0x42E   => array(0x44E)
+                    ,0x42F   => array(0x44F), 0x460   => array(0x461), 0x462   => array(0x463)
+                    ,0x464   => array(0x465), 0x466   => array(0x467), 0x468   => array(0x469)
+                    ,0x46A   => array(0x46B), 0x46C   => array(0x46D), 0x46E   => array(0x46F)
+                    ,0x470   => array(0x471), 0x472   => array(0x473), 0x474   => array(0x475)
+                    ,0x476   => array(0x477), 0x478   => array(0x479), 0x47A   => array(0x47B)
+                    ,0x47C   => array(0x47D), 0x47E   => array(0x47F), 0x480   => array(0x481)
+                    ,0x48A   => array(0x48B), 0x48C   => array(0x48D), 0x48E   => array(0x48F)
+                    ,0x490   => array(0x491), 0x492   => array(0x493), 0x494   => array(0x495)
+                    ,0x496   => array(0x497), 0x498   => array(0x499), 0x49A   => array(0x49B)
+                    ,0x49C   => array(0x49D), 0x49E   => array(0x49F), 0x4A0   => array(0x4A1)
+                    ,0x4A2   => array(0x4A3), 0x4A4   => array(0x4A5), 0x4A6   => array(0x4A7)
+                    ,0x4A8   => array(0x4A9), 0x4AA   => array(0x4AB), 0x4AC   => array(0x4AD)
+                    ,0x4AE   => array(0x4AF), 0x4B0   => array(0x4B1), 0x4B2   => array(0x4B3)
+                    ,0x4B4   => array(0x4B5), 0x4B6   => array(0x4B7), 0x4B8   => array(0x4B9)
+                    ,0x4BA   => array(0x4BB), 0x4BC   => array(0x4BD), 0x4BE   => array(0x4BF)
+                    ,0x4C1   => array(0x4C2), 0x4C3   => array(0x4C4), 0x4C5   => array(0x4C6)
+                    ,0x4C7   => array(0x4C8), 0x4C9   => array(0x4CA), 0x4CB   => array(0x4CC)
+                    ,0x4CD   => array(0x4CE), 0x4D0   => array(0x4D1), 0x4D2   => array(0x4D3)
+                    ,0x4D4   => array(0x4D5), 0x4D6   => array(0x4D7), 0x4D8   => array(0x4D9)
+                    ,0x4DA   => array(0x4DB), 0x4DC   => array(0x4DD), 0x4DE   => array(0x4DF)
+                    ,0x4E0   => array(0x4E1), 0x4E2   => array(0x4E3), 0x4E4   => array(0x4E5)
+                    ,0x4E6   => array(0x4E7), 0x4E8   => array(0x4E9), 0x4EA   => array(0x4EB)
+                    ,0x4EC   => array(0x4ED), 0x4EE   => array(0x4EF), 0x4F0   => array(0x4F1)
+                    ,0x4F2   => array(0x4F3), 0x4F4   => array(0x4F5), 0x4F8   => array(0x4F9)
+                    ,0x500   => array(0x501), 0x502   => array(0x503), 0x504   => array(0x505)
+                    ,0x506   => array(0x507), 0x508   => array(0x509), 0x50A   => array(0x50B)
+                    ,0x50C   => array(0x50D), 0x50E   => array(0x50F), 0x531   => array(0x561)
+                    ,0x532   => array(0x562), 0x533   => array(0x563), 0x534   => array(0x564)
+                    ,0x535   => array(0x565), 0x536   => array(0x566), 0x537   => array(0x567)
+                    ,0x538   => array(0x568), 0x539   => array(0x569), 0x53A   => array(0x56A)
+                    ,0x53B   => array(0x56B), 0x53C   => array(0x56C), 0x53D   => array(0x56D)
+                    ,0x53E   => array(0x56E), 0x53F   => array(0x56F), 0x540   => array(0x570)
+                    ,0x541   => array(0x571), 0x542   => array(0x572), 0x543   => array(0x573)
+                    ,0x544   => array(0x574), 0x545   => array(0x575), 0x546   => array(0x576)
+                    ,0x547   => array(0x577), 0x548   => array(0x578), 0x549   => array(0x579)
+                    ,0x54A   => array(0x57A), 0x54B   => array(0x57B), 0x54C   => array(0x57C)
+                    ,0x54D   => array(0x57D), 0x54E   => array(0x57E), 0x54F   => array(0x57F)
+                    ,0x550   => array(0x580), 0x551   => array(0x581), 0x552   => array(0x582)
+                    ,0x553   => array(0x583), 0x554   => array(0x584), 0x555   => array(0x585)
+                    ,0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32)
+                    ,0x1E00  => array(0x1E01), 0x1E02  => array(0x1E03), 0x1E04  => array(0x1E05)
+                    ,0x1E06  => array(0x1E07), 0x1E08  => array(0x1E09), 0x1E0A  => array(0x1E0B)
+                    ,0x1E0C  => array(0x1E0D), 0x1E0E  => array(0x1E0F), 0x1E10  => array(0x1E11)
+                    ,0x1E12  => array(0x1E13), 0x1E14  => array(0x1E15), 0x1E16  => array(0x1E17)
+                    ,0x1E18  => array(0x1E19), 0x1E1A  => array(0x1E1B), 0x1E1C  => array(0x1E1D)
+                    ,0x1E1E  => array(0x1E1F), 0x1E20  => array(0x1E21), 0x1E22  => array(0x1E23)
+                    ,0x1E24  => array(0x1E25), 0x1E26  => array(0x1E27), 0x1E28  => array(0x1E29)
+                    ,0x1E2A  => array(0x1E2B), 0x1E2C  => array(0x1E2D), 0x1E2E  => array(0x1E2F)
+                    ,0x1E30  => array(0x1E31), 0x1E32  => array(0x1E33), 0x1E34  => array(0x1E35)
+                    ,0x1E36  => array(0x1E37), 0x1E38  => array(0x1E39), 0x1E3A  => array(0x1E3B)
+                    ,0x1E3C  => array(0x1E3D), 0x1E3E  => array(0x1E3F), 0x1E40  => array(0x1E41)
+                    ,0x1E42  => array(0x1E43), 0x1E44  => array(0x1E45), 0x1E46  => array(0x1E47)
+                    ,0x1E48  => array(0x1E49), 0x1E4A  => array(0x1E4B), 0x1E4C  => array(0x1E4D)
+                    ,0x1E4E  => array(0x1E4F), 0x1E50  => array(0x1E51), 0x1E52  => array(0x1E53)
+                    ,0x1E54  => array(0x1E55), 0x1E56  => array(0x1E57), 0x1E58  => array(0x1E59)
+                    ,0x1E5A  => array(0x1E5B), 0x1E5C  => array(0x1E5D), 0x1E5E  => array(0x1E5F)
+                    ,0x1E60  => array(0x1E61), 0x1E62  => array(0x1E63), 0x1E64  => array(0x1E65)
+                    ,0x1E66  => array(0x1E67), 0x1E68  => array(0x1E69), 0x1E6A  => array(0x1E6B)
+                    ,0x1E6C  => array(0x1E6D), 0x1E6E  => array(0x1E6F), 0x1E70  => array(0x1E71)
+                    ,0x1E72  => array(0x1E73), 0x1E74  => array(0x1E75), 0x1E76  => array(0x1E77)
+                    ,0x1E78  => array(0x1E79), 0x1E7A  => array(0x1E7B), 0x1E7C  => array(0x1E7D)
+                    ,0x1E7E  => array(0x1E7F), 0x1E80  => array(0x1E81), 0x1E82  => array(0x1E83)
+                    ,0x1E84  => array(0x1E85), 0x1E86  => array(0x1E87), 0x1E88  => array(0x1E89)
+                    ,0x1E8A  => array(0x1E8B), 0x1E8C  => array(0x1E8D), 0x1E8E  => array(0x1E8F)
+                    ,0x1E90  => array(0x1E91), 0x1E92  => array(0x1E93), 0x1E94  => array(0x1E95)
+                    ,0x1E96  => array(0x68, 0x331), 0x1E97  => array(0x74, 0x308), 0x1E98  => array(0x77, 0x30A)
+                    ,0x1E99  => array(0x79, 0x30A), 0x1E9A  => array(0x61, 0x2BE), 0x1E9B  => array(0x1E61)
+                    ,0x1EA0  => array(0x1EA1), 0x1EA2  => array(0x1EA3), 0x1EA4  => array(0x1EA5)
+                    ,0x1EA6  => array(0x1EA7), 0x1EA8  => array(0x1EA9), 0x1EAA  => array(0x1EAB)
+                    ,0x1EAC  => array(0x1EAD), 0x1EAE  => array(0x1EAF), 0x1EB0  => array(0x1EB1)
+                    ,0x1EB2  => array(0x1EB3), 0x1EB4  => array(0x1EB5), 0x1EB6  => array(0x1EB7)
+                    ,0x1EB8  => array(0x1EB9), 0x1EBA  => array(0x1EBB), 0x1EBC  => array(0x1EBD)
+                    ,0x1EBE  => array(0x1EBF), 0x1EC0  => array(0x1EC1), 0x1EC2  => array(0x1EC3)
+                    ,0x1EC4  => array(0x1EC5), 0x1EC6  => array(0x1EC7), 0x1EC8  => array(0x1EC9)
+                    ,0x1ECA  => array(0x1ECB), 0x1ECC  => array(0x1ECD), 0x1ECE  => array(0x1ECF)
+                    ,0x1ED0  => array(0x1ED1), 0x1ED2  => array(0x1ED3), 0x1ED4  => array(0x1ED5)
+                    ,0x1ED6  => array(0x1ED7), 0x1ED8  => array(0x1ED9), 0x1EDA  => array(0x1EDB)
+                    ,0x1EDC  => array(0x1EDD), 0x1EDE  => array(0x1EDF), 0x1EE0  => array(0x1EE1)
+                    ,0x1EE2  => array(0x1EE3), 0x1EE4  => array(0x1EE5), 0x1EE6  => array(0x1EE7)
+                    ,0x1EE8  => array(0x1EE9), 0x1EEA  => array(0x1EEB), 0x1EEC  => array(0x1EED)
+                    ,0x1EEE  => array(0x1EEF), 0x1EF0  => array(0x1EF1), 0x1EF2  => array(0x1EF3)
+                    ,0x1EF4  => array(0x1EF5), 0x1EF6  => array(0x1EF7), 0x1EF8  => array(0x1EF9)
+                    ,0x1F08  => array(0x1F00), 0x1F09  => array(0x1F01), 0x1F0A  => array(0x1F02)
+                    ,0x1F0B  => array(0x1F03), 0x1F0C  => array(0x1F04), 0x1F0D  => array(0x1F05)
+                    ,0x1F0E  => array(0x1F06), 0x1F0F  => array(0x1F07), 0x1F18  => array(0x1F10)
+                    ,0x1F19  => array(0x1F11), 0x1F1A  => array(0x1F12), 0x1F1B  => array(0x1F13)
+                    ,0x1F1C  => array(0x1F14), 0x1F1D  => array(0x1F15), 0x1F28  => array(0x1F20)
+                    ,0x1F29  => array(0x1F21), 0x1F2A  => array(0x1F22), 0x1F2B  => array(0x1F23)
+                    ,0x1F2C  => array(0x1F24), 0x1F2D  => array(0x1F25), 0x1F2E  => array(0x1F26)
+                    ,0x1F2F  => array(0x1F27), 0x1F38  => array(0x1F30), 0x1F39  => array(0x1F31)
+                    ,0x1F3A  => array(0x1F32), 0x1F3B  => array(0x1F33), 0x1F3C  => array(0x1F34)
+                    ,0x1F3D  => array(0x1F35), 0x1F3E  => array(0x1F36), 0x1F3F  => array(0x1F37)
+                    ,0x1F48  => array(0x1F40), 0x1F49  => array(0x1F41), 0x1F4A  => array(0x1F42)
+                    ,0x1F4B  => array(0x1F43), 0x1F4C  => array(0x1F44), 0x1F4D  => array(0x1F45)
+                    ,0x1F50  => array(0x3C5, 0x313), 0x1F52  => array(0x3C5, 0x313, 0x300)
+                    ,0x1F54  => array(0x3C5, 0x313, 0x301), 0x1F56  => array(0x3C5, 0x313, 0x342)
+                    ,0x1F59  => array(0x1F51), 0x1F5B  => array(0x1F53), 0x1F5D  => array(0x1F55)
+                    ,0x1F5F  => array(0x1F57), 0x1F68  => array(0x1F60), 0x1F69  => array(0x1F61)
+                    ,0x1F6A  => array(0x1F62), 0x1F6B  => array(0x1F63), 0x1F6C  => array(0x1F64)
+                    ,0x1F6D  => array(0x1F65), 0x1F6E  => array(0x1F66), 0x1F6F  => array(0x1F67)
+                    ,0x1F80  => array(0x1F00, 0x3B9), 0x1F81  => array(0x1F01, 0x3B9)
+                    ,0x1F82  => array(0x1F02, 0x3B9), 0x1F83  => array(0x1F03, 0x3B9)
+                    ,0x1F84  => array(0x1F04, 0x3B9), 0x1F85  => array(0x1F05, 0x3B9)
+                    ,0x1F86  => array(0x1F06, 0x3B9), 0x1F87  => array(0x1F07, 0x3B9)
+                    ,0x1F88  => array(0x1F00, 0x3B9), 0x1F89  => array(0x1F01, 0x3B9)
+                    ,0x1F8A  => array(0x1F02, 0x3B9), 0x1F8B  => array(0x1F03, 0x3B9)
+                    ,0x1F8C  => array(0x1F04, 0x3B9), 0x1F8D  => array(0x1F05, 0x3B9)
+                    ,0x1F8E  => array(0x1F06, 0x3B9), 0x1F8F  => array(0x1F07, 0x3B9)
+                    ,0x1F90  => array(0x1F20, 0x3B9), 0x1F91  => array(0x1F21, 0x3B9)
+                    ,0x1F92  => array(0x1F22, 0x3B9), 0x1F93  => array(0x1F23, 0x3B9)
+                    ,0x1F94  => array(0x1F24, 0x3B9), 0x1F95  => array(0x1F25, 0x3B9)
+                    ,0x1F96  => array(0x1F26, 0x3B9), 0x1F97  => array(0x1F27, 0x3B9)
+                    ,0x1F98  => array(0x1F20, 0x3B9), 0x1F99  => array(0x1F21, 0x3B9)
+                    ,0x1F9A  => array(0x1F22, 0x3B9), 0x1F9B  => array(0x1F23, 0x3B9)
+                    ,0x1F9C  => array(0x1F24, 0x3B9), 0x1F9D  => array(0x1F25, 0x3B9)
+                    ,0x1F9E  => array(0x1F26, 0x3B9), 0x1F9F  => array(0x1F27, 0x3B9)
+                    ,0x1FA0  => array(0x1F60, 0x3B9), 0x1FA1  => array(0x1F61, 0x3B9)
+                    ,0x1FA2  => array(0x1F62, 0x3B9), 0x1FA3  => array(0x1F63, 0x3B9)
+                    ,0x1FA4  => array(0x1F64, 0x3B9), 0x1FA5  => array(0x1F65, 0x3B9)
+                    ,0x1FA6  => array(0x1F66, 0x3B9), 0x1FA7  => array(0x1F67, 0x3B9)
+                    ,0x1FA8  => array(0x1F60, 0x3B9), 0x1FA9  => array(0x1F61, 0x3B9)
+                    ,0x1FAA  => array(0x1F62, 0x3B9), 0x1FAB  => array(0x1F63, 0x3B9)
+                    ,0x1FAC  => array(0x1F64, 0x3B9), 0x1FAD  => array(0x1F65, 0x3B9)
+                    ,0x1FAE  => array(0x1F66, 0x3B9), 0x1FAF  => array(0x1F67, 0x3B9)
+                    ,0x1FB2  => array(0x1F70, 0x3B9), 0x1FB3  => array(0x3B1, 0x3B9)
+                    ,0x1FB4  => array(0x3AC, 0x3B9), 0x1FB6  => array(0x3B1, 0x342)
+                    ,0x1FB7  => array(0x3B1, 0x342, 0x3B9), 0x1FB8  => array(0x1FB0)
+                    ,0x1FB9  => array(0x1FB1), 0x1FBA  => array(0x1F70), 0x1FBB  => array(0x1F71)
+                    ,0x1FBC  => array(0x3B1, 0x3B9), 0x1FBE  => array(0x3B9)
+                    ,0x1FC2  => array(0x1F74, 0x3B9), 0x1FC3  => array(0x3B7, 0x3B9)
+                    ,0x1FC4  => array(0x3AE, 0x3B9), 0x1FC6  => array(0x3B7, 0x342)
+                    ,0x1FC7  => array(0x3B7, 0x342, 0x3B9), 0x1FC8  => array(0x1F72)
+                    ,0x1FC9  => array(0x1F73), 0x1FCA  => array(0x1F74), 0x1FCB  => array(0x1F75)
+                    ,0x1FCC  => array(0x3B7, 0x3B9), 0x1FD2  => array(0x3B9, 0x308, 0x300)
+                    ,0x1FD3  => array(0x3B9, 0x308, 0x301), 0x1FD6  => array(0x3B9, 0x342)
+                    ,0x1FD7  => array(0x3B9, 0x308, 0x342), 0x1FD8  => array(0x1FD0)
+                    ,0x1FD9  => array(0x1FD1), 0x1FDA  => array(0x1F76)
+                    ,0x1FDB  => array(0x1F77), 0x1FE2  => array(0x3C5, 0x308, 0x300)
+                    ,0x1FE3  => array(0x3C5, 0x308, 0x301), 0x1FE4  => array(0x3C1, 0x313)
+                    ,0x1FE6  => array(0x3C5, 0x342), 0x1FE7  => array(0x3C5, 0x308, 0x342)
+                    ,0x1FE8  => array(0x1FE0), 0x1FE9  => array(0x1FE1)
+                    ,0x1FEA  => array(0x1F7A), 0x1FEB  => array(0x1F7B)
+                    ,0x1FEC  => array(0x1FE5), 0x1FF2  => array(0x1F7C, 0x3B9)
+                    ,0x1FF3  => array(0x3C9, 0x3B9), 0x1FF4  => array(0x3CE, 0x3B9)
+                    ,0x1FF6  => array(0x3C9, 0x342), 0x1FF7  => array(0x3C9, 0x342, 0x3B9)
+                    ,0x1FF8  => array(0x1F78), 0x1FF9  => array(0x1F79), 0x1FFA  => array(0x1F7C)
+                    ,0x1FFB  => array(0x1F7D), 0x1FFC  => array(0x3C9, 0x3B9)
+                    ,0x20A8  => array(0x72, 0x73), 0x2102  => array(0x63), 0x2103  => array(0xB0, 0x63)
+                    ,0x2107  => array(0x25B), 0x2109  => array(0xB0, 0x66), 0x210B  => array(0x68)
+                    ,0x210C  => array(0x68), 0x210D  => array(0x68), 0x2110  => array(0x69)
+                    ,0x2111  => array(0x69), 0x2112  => array(0x6C), 0x2115  => array(0x6E)
+                    ,0x2116  => array(0x6E, 0x6F), 0x2119  => array(0x70), 0x211A  => array(0x71)
+                    ,0x211B  => array(0x72), 0x211C  => array(0x72), 0x211D  => array(0x72)
+                    ,0x2120  => array(0x73, 0x6D), 0x2121  => array(0x74, 0x65, 0x6C)
+                    ,0x2122  => array(0x74, 0x6D), 0x2124  => array(0x7A), 0x2126  => array(0x3C9)
+                    ,0x2128  => array(0x7A), 0x212A  => array(0x6B), 0x212B  => array(0xE5)
+                    ,0x212C  => array(0x62), 0x212D  => array(0x63), 0x2130  => array(0x65)
+                    ,0x2131  => array(0x66), 0x2133  => array(0x6D), 0x213E  => array(0x3B3)
+                    ,0x213F  => array(0x3C0), 0x2145  => array(0x64) ,0x2160  => array(0x2170)
+                    ,0x2161  => array(0x2171), 0x2162  => array(0x2172), 0x2163  => array(0x2173)
+                    ,0x2164  => array(0x2174), 0x2165  => array(0x2175), 0x2166  => array(0x2176)
+                    ,0x2167  => array(0x2177), 0x2168  => array(0x2178), 0x2169  => array(0x2179)
+                    ,0x216A  => array(0x217A), 0x216B  => array(0x217B), 0x216C  => array(0x217C)
+                    ,0x216D  => array(0x217D), 0x216E  => array(0x217E), 0x216F  => array(0x217F)
+                    ,0x24B6  => array(0x24D0), 0x24B7  => array(0x24D1), 0x24B8  => array(0x24D2)
+                    ,0x24B9  => array(0x24D3), 0x24BA  => array(0x24D4), 0x24BB  => array(0x24D5)
+                    ,0x24BC  => array(0x24D6), 0x24BD  => array(0x24D7), 0x24BE  => array(0x24D8)
+                    ,0x24BF  => array(0x24D9), 0x24C0  => array(0x24DA), 0x24C1  => array(0x24DB)
+                    ,0x24C2  => array(0x24DC), 0x24C3  => array(0x24DD), 0x24C4  => array(0x24DE)
+                    ,0x24C5  => array(0x24DF), 0x24C6  => array(0x24E0), 0x24C7  => array(0x24E1)
+                    ,0x24C8  => array(0x24E2), 0x24C9  => array(0x24E3), 0x24CA  => array(0x24E4)
+                    ,0x24CB  => array(0x24E5), 0x24CC  => array(0x24E6), 0x24CD  => array(0x24E7)
+                    ,0x24CE  => array(0x24E8), 0x24CF  => array(0x24E9), 0x3371  => array(0x68, 0x70, 0x61)
+                    ,0x3373  => array(0x61, 0x75), 0x3375  => array(0x6F, 0x76)
+                    ,0x3380  => array(0x70, 0x61), 0x3381  => array(0x6E, 0x61)
+                    ,0x3382  => array(0x3BC, 0x61), 0x3383  => array(0x6D, 0x61)
+                    ,0x3384  => array(0x6B, 0x61), 0x3385  => array(0x6B, 0x62)
+                    ,0x3386  => array(0x6D, 0x62), 0x3387  => array(0x67, 0x62)
+                    ,0x338A  => array(0x70, 0x66), 0x338B  => array(0x6E, 0x66)
+                    ,0x338C  => array(0x3BC, 0x66), 0x3390  => array(0x68, 0x7A)
+                    ,0x3391  => array(0x6B, 0x68, 0x7A), 0x3392  => array(0x6D, 0x68, 0x7A)
+                    ,0x3393  => array(0x67, 0x68, 0x7A), 0x3394  => array(0x74, 0x68, 0x7A)
+                    ,0x33A9  => array(0x70, 0x61), 0x33AA  => array(0x6B, 0x70, 0x61)
+                    ,0x33AB  => array(0x6D, 0x70, 0x61), 0x33AC  => array(0x67, 0x70, 0x61)
+                    ,0x33B4  => array(0x70, 0x76), 0x33B5  => array(0x6E, 0x76)
+                    ,0x33B6  => array(0x3BC, 0x76), 0x33B7  => array(0x6D, 0x76)
+                    ,0x33B8  => array(0x6B, 0x76), 0x33B9  => array(0x6D, 0x76)
+                    ,0x33BA  => array(0x70, 0x77), 0x33BB  => array(0x6E, 0x77)
+                    ,0x33BC  => array(0x3BC, 0x77), 0x33BD  => array(0x6D, 0x77)
+                    ,0x33BE  => array(0x6B, 0x77), 0x33BF  => array(0x6D, 0x77)
+                    ,0x33C0  => array(0x6B, 0x3C9), 0x33C1  => array(0x6D, 0x3C9) /*
+                    ,0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E) */
+                    ,0x33C3  => array(0x62, 0x71), 0x33C6  => array(0x63, 0x2215, 0x6B, 0x67)
+                    ,0x33C7  => array(0x63, 0x6F, 0x2E), 0x33C8  => array(0x64, 0x62)
+                    ,0x33C9  => array(0x67, 0x79), 0x33CB  => array(0x68, 0x70)
+                    ,0x33CD  => array(0x6B, 0x6B), 0x33CE  => array(0x6B, 0x6D)
+                    ,0x33D7  => array(0x70, 0x68), 0x33D9  => array(0x70, 0x70, 0x6D)
+                    ,0x33DA  => array(0x70, 0x72), 0x33DC  => array(0x73, 0x76)
+                    ,0x33DD  => array(0x77, 0x62), 0xFB00  => array(0x66, 0x66)
+                    ,0xFB01  => array(0x66, 0x69), 0xFB02  => array(0x66, 0x6C)
+                    ,0xFB03  => array(0x66, 0x66, 0x69), 0xFB04  => array(0x66, 0x66, 0x6C)
+                    ,0xFB05  => array(0x73, 0x74), 0xFB06  => array(0x73, 0x74)
+                    ,0xFB13  => array(0x574, 0x576), 0xFB14  => array(0x574, 0x565)
+                    ,0xFB15  => array(0x574, 0x56B), 0xFB16  => array(0x57E, 0x576)
+                    ,0xFB17  => array(0x574, 0x56D), 0xFF21  => array(0xFF41)
+                    ,0xFF22  => array(0xFF42), 0xFF23  => array(0xFF43), 0xFF24  => array(0xFF44)
+                    ,0xFF25  => array(0xFF45), 0xFF26  => array(0xFF46), 0xFF27  => array(0xFF47)
+                    ,0xFF28  => array(0xFF48), 0xFF29  => array(0xFF49), 0xFF2A  => array(0xFF4A)
+                    ,0xFF2B  => array(0xFF4B), 0xFF2C  => array(0xFF4C), 0xFF2D  => array(0xFF4D)
+                    ,0xFF2E  => array(0xFF4E), 0xFF2F  => array(0xFF4F), 0xFF30  => array(0xFF50)
+                    ,0xFF31  => array(0xFF51), 0xFF32  => array(0xFF52), 0xFF33  => array(0xFF53)
+                    ,0xFF34  => array(0xFF54), 0xFF35  => array(0xFF55), 0xFF36  => array(0xFF56)
+                    ,0xFF37  => array(0xFF57), 0xFF38  => array(0xFF58), 0xFF39  => array(0xFF59)
+                    ,0xFF3A  => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429)
+                    ,0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C)
+                    ,0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F)
+                    ,0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432)
+                    ,0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435)
+                    ,0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438)
+                    ,0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B)
+                    ,0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E)
+                    ,0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441)
+                    ,0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444)
+                    ,0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447)
+                    ,0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A)
+                    ,0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D)
+                    ,0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63)
+                    ,0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66)
+                    ,0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69)
+                    ,0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C)
+                    ,0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F)
+                    ,0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72)
+                    ,0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75)
+                    ,0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78)
+                    ,0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61)
+                    ,0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64)
+                    ,0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67)
+                    ,0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A)
+                    ,0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D)
+                    ,0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70)
+                    ,0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73)
+                    ,0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76)
+                    ,0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79)
+                    ,0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62)
+                    ,0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65)
+                    ,0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68)
+                    ,0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B)
+                    ,0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E)
+                    ,0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71)
+                    ,0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74)
+                    ,0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77)
+                    ,0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A)
+                    ,0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64)
+                    ,0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B)
+                    ,0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70)
+                    ,0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74)
+                    ,0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77)
+                    ,0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A)
+                    ,0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63)
+                    ,0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66)
+                    ,0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69)
+                    ,0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C)
+                    ,0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F)
+                    ,0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72)
+                    ,0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75)
+                    ,0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78)
+                    ,0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61)
+                    ,0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65)
+                    ,0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A)
+                    ,0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D)
+                    ,0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70)
+                    ,0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74)
+                    ,0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77)
+                    ,0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61)
+                    ,0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65)
+                    ,0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69)
+                    ,0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C)
+                    ,0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73)
+                    ,0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76)
+                    ,0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79)
+                    ,0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63)
+                    ,0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66)
+                    ,0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69)
+                    ,0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C)
+                    ,0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F)
+                    ,0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72)
+                    ,0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75)
+                    ,0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78)
+                    ,0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61)
+                    ,0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64)
+                    ,0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67)
+                    ,0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A)
+                    ,0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D)
+                    ,0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70)
+                    ,0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73)
+                    ,0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76)
+                    ,0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79)
+                    ,0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62)
+                    ,0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65)
+                    ,0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68)
+                    ,0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B)
+                    ,0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E)
+                    ,0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71)
+                    ,0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74)
+                    ,0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77)
+                    ,0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A)
+                    ,0x1D608 => array(0x61), 0x1D609 => array(0x62) ,0x1D60A => array(0x63)
+                    ,0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66)
+                    ,0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69)
+                    ,0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C)
+                    ,0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F)
+                    ,0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72)
+                    ,0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75)
+                    ,0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78)
+                    ,0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61)
+                    ,0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64)
+                    ,0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67)
+                    ,0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A)
+                    ,0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D)
+                    ,0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70)
+                    ,0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73)
+                    ,0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76)
+                    ,0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79)
+                    ,0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62)
+                    ,0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65)
+                    ,0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68)
+                    ,0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B)
+                    ,0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E)
+                    ,0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71)
+                    ,0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74)
+                    ,0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77)
+                    ,0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A)
+                    ,0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3)
+                    ,0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6)
+                    ,0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9)
+                    ,0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC)
+                    ,0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF)
+                    ,0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8)
+                    ,0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5)
+                    ,0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8)
+                    ,0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1)
+                    ,0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4)
+                    ,0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7)
+                    ,0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA)
+                    ,0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD)
+                    ,0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0)
+                    ,0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8) ,0x1D6F4 => array(0x3C3)
+                    ,0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6)
+                    ,0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8) ,0x1D6FA => array(0x3C9)
+                    ,0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2)
+                    ,0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5)
+                    ,0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8)
+                    ,0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB)
+                    ,0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE)
+                    ,0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1)
+                    ,0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4)
+                    ,0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7)
+                    ,0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3)
+                    ,0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3)
+                    ,0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6)
+                    ,0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9)
+                    ,0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC)
+                    ,0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF)
+                    ,0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8)
+                    ,0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5)
+                    ,0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8)
+                    ,0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1)
+                    ,0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4)
+                    ,0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7)
+                    ,0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA)
+                    ,0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD)
+                    ,0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0)
+                    ,0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3)
+                    ,0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6)
+                    ,0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9)
+                    ,0x1D7BB => array(0x3C3), 0x3F9   => array(0x3C3), 0x1D2C  => array(0x61)
+                    ,0x1D2D  => array(0xE6), 0x1D2E  => array(0x62), 0x1D30  => array(0x64)
+                    ,0x1D31  => array(0x65), 0x1D32  => array(0x1DD), 0x1D33  => array(0x67)
+                    ,0x1D34  => array(0x68), 0x1D35  => array(0x69), 0x1D36  => array(0x6A)
+                    ,0x1D37  => array(0x6B), 0x1D38  => array(0x6C), 0x1D39  => array(0x6D)
+                    ,0x1D3A  => array(0x6E), 0x1D3C  => array(0x6F), 0x1D3D  => array(0x223)
+                    ,0x1D3E  => array(0x70), 0x1D3F  => array(0x72), 0x1D40  => array(0x74)
+                    ,0x1D41  => array(0x75), 0x1D42  => array(0x77), 0x213B  => array(0x66, 0x61, 0x78)
+                    ,0x3250  => array(0x70, 0x74, 0x65), 0x32CC  => array(0x68, 0x67)
+                    ,0x32CE  => array(0x65, 0x76), 0x32CF  => array(0x6C, 0x74, 0x64)
+                    ,0x337A  => array(0x69, 0x75), 0x33DE  => array(0x76, 0x2215, 0x6D)
+                    ,0x33DF  => array(0x61, 0x2215, 0x6D)
+                    )
+            ,'norm_combcls' => array(0x334   => 1,   0x335   => 1,   0x336   => 1,   0x337   => 1
+                    ,0x338   => 1,   0x93C   => 7,   0x9BC   => 7,   0xA3C   => 7,   0xABC   => 7
+                    ,0xB3C   => 7,   0xCBC   => 7,   0x1037  => 7,   0x3099  => 8,   0x309A  => 8
+                    ,0x94D   => 9,   0x9CD   => 9,   0xA4D   => 9,   0xACD   => 9,   0xB4D   => 9
+                    ,0xBCD   => 9,   0xC4D   => 9,   0xCCD   => 9,   0xD4D   => 9,   0xDCA   => 9
+                    ,0xE3A   => 9,   0xF84   => 9,   0x1039  => 9,   0x1714  => 9,   0x1734  => 9
+                    ,0x17D2  => 9,   0x5B0   => 10,  0x5B1   => 11,  0x5B2   => 12,  0x5B3   => 13
+                    ,0x5B4   => 14,  0x5B5   => 15,  0x5B6   => 16,  0x5B7   => 17,  0x5B8   => 18
+                    ,0x5B9   => 19,  0x5BB   => 20,  0x5Bc   => 21,  0x5BD   => 22,  0x5BF   => 23
+                    ,0x5C1   => 24,  0x5C2   => 25,  0xFB1E  => 26,  0x64B   => 27,  0x64C   => 28
+                    ,0x64D   => 29,  0x64E   => 30,  0x64F   => 31,  0x650   => 32,  0x651   => 33
+                    ,0x652   => 34,  0x670   => 35,  0x711   => 36,  0xC55   => 84,  0xC56   => 91
+                    ,0xE38   => 103, 0xE39   => 103, 0xE48   => 107, 0xE49   => 107, 0xE4A   => 107
+                    ,0xE4B   => 107, 0xEB8   => 118, 0xEB9   => 118, 0xEC8   => 122, 0xEC9   => 122
+                    ,0xECA   => 122, 0xECB   => 122, 0xF71   => 129, 0xF72   => 130, 0xF7A   => 130
+                    ,0xF7B   => 130, 0xF7C   => 130, 0xF7D   => 130, 0xF80   => 130, 0xF74   => 132
+                    ,0x321   => 202, 0x322   => 202, 0x327   => 202, 0x328   => 202, 0x31B   => 216
+                    ,0xF39   => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216
+                    ,0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A  => 218, 0x316   => 220
+                    ,0x317   => 220, 0x318   => 220, 0x319   => 220, 0x31C   => 220, 0x31D   => 220
+                    ,0x31E   => 220, 0x31F   => 220, 0x320   => 220, 0x323   => 220, 0x324   => 220
+                    ,0x325   => 220, 0x326   => 220, 0x329   => 220, 0x32A   => 220, 0x32B   => 220
+                    ,0x32C   => 220, 0x32D   => 220, 0x32E   => 220, 0x32F   => 220, 0x330   => 220
+                    ,0x331   => 220, 0x332   => 220, 0x333   => 220, 0x339   => 220, 0x33A   => 220
+                    ,0x33B   => 220, 0x33C   => 220, 0x347   => 220, 0x348   => 220, 0x349   => 220
+                    ,0x34D   => 220, 0x34E   => 220, 0x353   => 220, 0x354   => 220, 0x355   => 220
+                    ,0x356   => 220, 0x591   => 220, 0x596   => 220, 0x59B   => 220, 0x5A3   => 220
+                    ,0x5A4   => 220, 0x5A5   => 220, 0x5A6   => 220, 0x5A7   => 220, 0x5AA   => 220
+                    ,0x655   => 220, 0x656   => 220, 0x6E3   => 220, 0x6EA   => 220, 0x6ED   => 220
+                    ,0x731   => 220, 0x734   => 220, 0x737   => 220, 0x738   => 220, 0x739   => 220
+                    ,0x73B   => 220, 0x73C   => 220, 0x73E   => 220, 0x742   => 220, 0x744   => 220
+                    ,0x746   => 220, 0x748   => 220, 0x952   => 220, 0xF18   => 220, 0xF19   => 220
+                    ,0xF35   => 220, 0xF37   => 220, 0xFC6   => 220, 0x193B  => 220, 0x20E8  => 220
+                    ,0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220
+                    ,0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220
+                    ,0x59A   => 222, 0x5AD   => 222, 0x1929  => 222, 0x302D  => 222, 0x302E  => 224
+                    ,0x302F  => 224, 0x1D16D => 226, 0x5AE   => 228, 0x18A9  => 228, 0x302B  => 228
+                    ,0x300   => 230, 0x301   => 230, 0x302   => 230, 0x303   => 230, 0x304   => 230
+                    ,0x305   => 230, 0x306   => 230, 0x307   => 230, 0x308   => 230, 0x309   => 230
+                    ,0x30A   => 230, 0x30B   => 230, 0x30C   => 230, 0x30D   => 230, 0x30E   => 230
+                    ,0x30F   => 230, 0x310   => 230, 0x311   => 230, 0x312   => 230, 0x313   => 230
+                    ,0x314   => 230, 0x33D   => 230, 0x33E   => 230, 0x33F   => 230, 0x340   => 230
+                    ,0x341   => 230, 0x342   => 230, 0x343   => 230, 0x344   => 230, 0x346   => 230
+                    ,0x34A   => 230, 0x34B   => 230, 0x34C   => 230, 0x350   => 230, 0x351   => 230
+                    ,0x352   => 230, 0x357   => 230, 0x363   => 230, 0x364   => 230, 0x365   => 230
+                    ,0x366   => 230, 0x367   => 230, 0x368   => 230, 0x369   => 230, 0x36A   => 230
+                    ,0x36B   => 230, 0x36C   => 230, 0x36D   => 230, 0x36E   => 230, 0x36F   => 230
+                    ,0x483   => 230, 0x484   => 230, 0x485   => 230, 0x486   => 230, 0x592   => 230
+                    ,0x593   => 230, 0x594   => 230, 0x595   => 230, 0x597   => 230, 0x598   => 230
+                    ,0x599   => 230, 0x59C   => 230, 0x59D   => 230, 0x59E   => 230, 0x59F   => 230
+                    ,0x5A0   => 230, 0x5A1   => 230, 0x5A8   => 230, 0x5A9   => 230, 0x5AB   => 230
+                    ,0x5AC   => 230, 0x5AF   => 230, 0x5C4   => 230, 0x610   => 230, 0x611   => 230
+                    ,0x612   => 230, 0x613   => 230, 0x614   => 230, 0x615   => 230, 0x653   => 230
+                    ,0x654   => 230, 0x657   => 230, 0x658   => 230, 0x6D6   => 230, 0x6D7   => 230
+                    ,0x6D8   => 230, 0x6D9   => 230, 0x6DA   => 230, 0x6DB   => 230, 0x6DC   => 230
+                    ,0x6DF   => 230, 0x6E0   => 230, 0x6E1   => 230, 0x6E2   => 230, 0x6E4   => 230
+                    ,0x6E7   => 230, 0x6E8   => 230, 0x6EB   => 230, 0x6EC   => 230, 0x730   => 230
+                    ,0x732   => 230, 0x733   => 230, 0x735   => 230, 0x736   => 230, 0x73A   => 230
+                    ,0x73D   => 230, 0x73F   => 230, 0x740   => 230, 0x741   => 230, 0x743   => 230
+                    ,0x745   => 230, 0x747   => 230, 0x749   => 230, 0x74A   => 230, 0x951   => 230
+                    ,0x953   => 230, 0x954   => 230, 0xF82   => 230, 0xF83   => 230, 0xF86   => 230
+                    ,0xF87   => 230, 0x170D  => 230, 0x193A  => 230, 0x20D0  => 230, 0x20D1  => 230
+                    ,0x20D4  => 230, 0x20D5  => 230, 0x20D6  => 230, 0x20D7  => 230, 0x20DB  => 230
+                    ,0x20DC  => 230, 0x20E1  => 230, 0x20E7  => 230, 0x20E9  => 230, 0xFE20  => 230
+                    ,0xFE21  => 230, 0xFE22  => 230, 0xFE23  => 230, 0x1D185 => 230, 0x1D186 => 230
+                    ,0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230
+                    ,0x1D1AC => 230, 0x1D1AD => 230, 0x315   => 232, 0x31A   => 232, 0x302C  => 232
+                    ,0x35F   => 233, 0x362   => 233, 0x35D   => 234, 0x35E   => 234, 0x360   => 234
+                    ,0x361   => 234, 0x345   => 240
+                    )
+            );
+}
+?>
\ No newline at end of file

Property changes on: trunk/include/idna_convert/idna_convert.class.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/idna_convert/idna_convert_original.zip
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/idna_convert/idna_convert_original.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/jquery/AUTHORS.txt
===================================================================
--- trunk/include/jquery/AUTHORS.txt	(nonexistent)
+++ trunk/include/jquery/AUTHORS.txt	(revision 2)
@@ -0,0 +1,30 @@
+﻿jQuery UI Authors (http://jqueryui.com/about)
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+and logs, available at http://github.com/jquery/jquery-ui
+
+Brandon Aaron
+Paul Bakaus (paulbakaus.com)
+David Bolter
+Rich Caloggero
+Chi Cheng (cloudream@gmail.com)
+Colin Clark (http://colin.atrc.utoronto.ca/)
+Michelle D'Souza
+Aaron Eisenberger (aaronchi@gmail.com)
+Ariel Flesler
+Bohdan Ganicky
+Scott González
+Marc Grabanski (m@marcgrabanski.com)
+Klaus Hartl (stilbuero.de)
+Scott Jehl
+Cody Lindley
+Eduardo Lundgren (eduardolundgren@gmail.com)
+Todd Parker
+John Resig
+Patty Toland
+Ca-Phun Ung (yelotofu.com)
+Keith Wood (kbwood@virginbroadband.com.au)
+Maggie Costello Wachs
+Richard D. Worth (rdworth.org)
+Jörn Zaefferer (bassistance.de)
Index: trunk/include/jquery/GPL-LICENSE.txt
===================================================================
--- trunk/include/jquery/GPL-LICENSE.txt	(nonexistent)
+++ trunk/include/jquery/GPL-LICENSE.txt	(revision 2)
@@ -0,0 +1,278 @@
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
Index: trunk/include/jquery/LoadOnFly.js
===================================================================
--- trunk/include/jquery/LoadOnFly.js	(nonexistent)
+++ trunk/include/jquery/LoadOnFly.js	(revision 2)
@@ -0,0 +1,301 @@
+/**
+ * http://molily.de/js/
+ * Cross browser addEvent function by John Resig
+ * http://ejohn.org/blog/flexible-javascript-events/
+ * some samples
+ *    addEvent( document.getElementById('foo'), 'click', doSomething );
+ *    addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
+ *
+ */
+/**
+ * Cross Browser helper to addEventListener.
+ * http://webintersect.com/articles/72/add-event-listener-to-dynamic-elements
+ *
+ * @param {HTMLElement} obj The Element to attach event to.
+ * @param {string} evt The event that will trigger the binded function.
+ * @param {function(event)} fnc The function to bind to the element.
+ * @return {boolean} true if it was successfuly binded.
+ */
+var addEvent = function (obj, evt, fnc) {
+  // W3C model
+  if (obj.addEventListener) {
+    obj.addEventListener(evt, fnc, false);
+    return true;
+  }
+  // Microsoft model
+   else if (obj.attachEvent) {
+    return obj.attachEvent('on' + evt, fnc);
+  }
+  // Browser don't support W3C or MSFT model, go on with traditional
+   else {
+    evt = 'on' + evt;
+    if (typeof obj[evt] === 'function') {
+      // Object already has a function on traditional
+      // Let's wrap it with our own function inside another function
+      fnc = (function (f1, f2) {
+        return function () {
+          f1.apply(this, arguments);
+          f2.apply(this, arguments);
+        };
+      }) (obj[evt], fnc);
+    }
+    obj[evt] = fnc;
+    return true;
+  }
+  return false;
+};
+/*****************************************************************************/
+/**
+ * sample
+ *   removeEvent( object, eventType, function );
+ *
+ */
+function removeEvent(obj, ev, fn) {
+  if (obj.detachEvent) {
+    obj.detachEvent('on' + ev, obj[ev + fn]);
+    obj[ev + fn] = null;
+  } else
+  obj.removeEventListener(ev, fn, false);
+}
+/*****************************************************************************/
+
+var getBrowser = (function () {
+  var navigatorObj = navigator.appName,
+  userAgentObj = navigator.userAgent,
+  matchVersion;
+  var match = userAgentObj.match(/(opera|opr|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
+  if (match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) {
+    match[2] = matchVersion[1];
+  }
+  //mobile
+
+  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
+    var mobile;
+    return match ? [
+      match[1],
+      match[2],
+      mobile
+    ] : [
+      navigatorObj,
+      navigator.appVersion,
+      mobile
+    ];
+  }
+  // web browser
+
+  return match ? [
+    match[1],
+    match[2]
+  ] : [
+    navigatorObj,
+    navigator.appVersion,
+    '-?'
+  ];
+}) ();
+// forEach method, could be shipped as part of an Object Literal/Module
+var forEach = function (array, callback, scope) {
+  for (var i = 0; i < array.length; i++) {
+    callback.call(scope, i, array[i]); // passes back stuff we need
+  }
+};
+function each(elm, fn) {
+  for (var i = 0, l = elm.length; i < l; i++) {
+    fn.call(elm, elm[i], i);
+  }
+}
+function doSomething(elm) {
+  if ((typeof elm !== 'undefined') || elm) console.log(elm);
+}
+/**
+ *  http://www.axel-hahn.de/blog/2015/01/21/javascript-schnipsel-html-strippen/
+ */
+
+function strip_tags(s) {
+  return s.replace(/<[^>]*>/g, '');
+}
+/**
+ *         discuss at: http:phpjs.org/functions/dirname/
+ *               http: kevin.vanzonneveld.net
+ *        original by: Ozh
+ *        improved by: XoraX (http:www.xorax.info)
+ *          example 1: dirname('/etc/passwd');
+ *          returns 1: '/etc'
+ */
+
+var dirname = function (path) {
+  var tmp = path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '');
+  return tmp;
+};
+/**
+ * http://durhamhale.com/blog/javascript-version-of-phps-str-replace-function
+ */
+var str_replace = function (search, replace, string) {
+  return string.split(search).join(replace);
+};
+/**
+ *  trim, rtrim, ltrim
+ *  http://coursesweb.net/javascript/trim-rtrim-ltrim-javascript_cs
+ */
+var trim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g')  : new RegExp('^' + chr + '+|' + chr + '+$', 'g');
+  return str.replace(rgxtrim, '');
+};
+var rtrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('\\s+$')  : new RegExp(chr + '+$');
+  return str.replace(rgxtrim, '');
+};
+var ltrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+')  : new RegExp('^' + chr + '+');
+  return str.replace(rgxtrim, '');
+};
+var confirm_link = function (message, url) { //  class="alert rounded"
+  if (confirm(message)) location.href = url;
+};
+var showMessage = (function (txt, sel) {
+  var result = window.document.getElementById('messages');
+  if (!result) {
+    return false;
+  }
+  var elm = document.createElement('P');
+  elm.setAttribute('class', sel + ' rounded');
+  elm.appendChild(document.createTextNode(txt));
+  result.appendChild(elm);
+});
+
+/**
+ *  http://www.javascriptkit.com/dhtmltutors/treewalker.shtml
+ *
+ */
+/********************************************************************************************************/
+var LoadOnFly = (function ( nodeName, file ) {
+    'use strict';
+    if( (typeof file === 'undefined') ) {
+      return false;
+    }
+    if ( !document.doctype ) {
+      return false;
+    }
+  /*
+  var nodeDoctype = document.implementation.createDocumentType(
+   'html','',''
+  );
+      document.replaceChild(nodeDoctype, document.doctype);
+  } else {
+      document.insertBefore(nodeDoctype, document.childNodes[0]);
+  }
+*/
+  //    var LoadOnFly  = function (nodeName, url) {
+
+    var jsRegex = /.js$/gi;
+    var cssRegex = /.css$/gi;
+    var scripts = {
+    };
+  // console.info(' 0.' + file );fileExtension = file.replace(/^.*\./, '');
+    var url = file;
+    var urlExt = trim(file.replace(/^.*\./, ''));
+    var NodeList = null;
+    var len = 0;
+    var node = null;
+    var str = 'undefined';
+    var done = false;
+  //console.info( urlExt + ' = 1.) ' + url);
+    if ((typeof url !== 'undefined') && (urlExt === 'js')) {
+  //    console.info(urlExt + ' = 1.) ' + url);
+      scripts[url] = false;
+      switch (nodeName) {
+        case 'body':
+          NodeList = document.body.querySelectorAll('SCRIPT');
+          break;
+        default:
+          NodeList = document.head.querySelectorAll('SCRIPT');
+          break;
+      }
+      if (NodeList) {
+        len = NodeList.length - 1;
+    }
+  //console.info(NodeList);
+  // console.info(' JS ' + url);
+
+    try {
+     var js = document.createElement('SCRIPT');
+      js.setAttribute('type', 'text/javascript'); // optional, if not a html5 node
+      js.setAttribute('src', url); // src setzen
+      js.setAttribute('charset', 'UTF-8');
+//      js.setAttribute("async", true); // HTML5 Asyncron attribute
+      done = false;
+      if (nodeName == 'body') {
+        node = window.document.body.querySelectorAll('SCRIPT') [len];
+        node.parentNode.appendChild( js );
+console.info( js );
+        //              script.parentNode.insertBefore(js,script);
+      } else {
+        node = window.document.head.querySelectorAll('SCRIPT') [len];
+        node.parentNode.appendChild( js );
+      }
+    } catch (e) {
+       str = '<script type=\'text/javascript\' src=\'' + url + '\' charset="UTF-8"><' + '/script>';
+      document.write(str);
+    }
+console.info( node );
+  }
+
+// load css only within head
+if ((typeof url !== 'undefined') && (urlExt === 'css')) {
+    //console.info(urlExt + ' = 2.) ' + url);
+    scripts[url] = false;
+    try {
+        var css = document.createElement('LINK');
+        len = 0;
+        css.setAttribute('type', 'text/css');
+        css.setAttribute('rel', 'stylesheet');
+        css.setAttribute('media', 'all');
+        css.setAttribute('href', url);
+        NodeList = window.document.querySelectorAll('LINK');
+        if (NodeList) {
+          len = NodeList.length - 1;
+        };
+        // insert after last link element if exist otherwise before first script
+        if (len > - 1) {
+          node = window.document.head.querySelectorAll('LINK') [len];
+          // console.info( len );
+        //  console.info(node);
+          //    return false;
+          node.parentNode.insertBefore(css, node.nextSibling);
+          // console.info('CSS ' + url);
+        } else {
+          node = window.document.head.querySelectorAll('SCRIPT') [0];
+          node.parentNode.insertBefore(css, node);
+        }
+    } catch (e) {
+        str = '<link href=\'' + url + '\' media="all" rel="stylesheet" />';
+        document.write(str);
+    }
+}
+// console.info( url );
+//      showMessage(url);
+
+});
+/**
+ *()
+    document.onreadystatechange = function () {
+        if (document.readyState == "interactive") {
+console.info( 'Start readyState.interactive' );
+        }
+    }
+
+    // Alternativ zu load event
+    document.onreadystatechange = function () {
+        if (document.readyState == "complete") {
+console.info( 'Start readyState.complete' );
+        }
+    }
+
+
+window.onload = function() {
+   addEvent(document, "DOMContentLoaded", LoadOnFly);
+console.info( 'Start window.onload' );
+};
+ */
+/*
+undefined
+*/
Index: trunk/include/jquery/MIT-LICENSE.txt
===================================================================
--- trunk/include/jquery/MIT-LICENSE.txt	(nonexistent)
+++ trunk/include/jquery/MIT-LICENSE.txt	(revision 2)
@@ -0,0 +1,25 @@
+Copyright (c) 2011 Paul Bakaus, http://jqueryui.com/
+
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+contribution history, see the revision history and logs, available
+at http://jquery-ui.googlecode.com/svn/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: trunk/include/jquery/domReady.js
===================================================================
--- trunk/include/jquery/domReady.js	(nonexistent)
+++ trunk/include/jquery/domReady.js	(revision 2)
@@ -0,0 +1,147 @@
+// add event cross browser
+function addEvent(elem, event, fn) {
+    if (elem.addEventListener) {
+        elem.addEventListener(event, fn, false);
+    } else {
+        elem.attachEvent("on" + event, function() {
+            // set the this pointer same as addEventListener when fn is called
+            return(fn.call(elem, window.event));   
+        });
+    }
+}
+
+
+var logs = [];
+var eventSet = false;
+var loaded = false;
+function log(str) {
+    
+    if (loaded) {
+        output(str);
+    } else {
+        logs.push(str);
+    }
+
+    function output(str) {
+        var o = document.getElementById("log");
+        var div = document.createElement("div");
+        div.appendChild(document.createTextNode(str));
+        o.appendChild(div);
+    }
+    
+    if (!eventSet) {
+        eventSet = true;
+        addEvent(window, "load", function() {
+            loaded = true;
+            for (var i = 0; i < logs.length; i++) {
+                output(logs[i]);
+            }
+            logs = [];
+        });
+    }    
+}
+
+(function(funcName, baseObj) {
+    // The public function name defaults to window.domReady
+    // but you can pass in your own object and own function name and those will be used
+    // if you want to put them in a different namespace
+    funcName = funcName || "domReady";
+    baseObj = baseObj || window;
+    var readyList = [];
+    var readyFired = false;
+    var readyEventHandlersInstalled = false;
+    
+    // call this when the document is ready
+    // this function protects itself against being called more than once
+    function ready() {
+        if (!readyFired) {
+            // this must be set to true before we start calling callbacks
+            readyFired = true;
+            for (var i = 0; i < readyList.length; i++) {
+                // if a callback here happens to add new ready handlers,
+                // the domReady() function will see that it already fired
+                // and will schedule the callback to run right after
+                // this event loop finishes so all handlers will still execute
+                // in order and no new ones will be added to the readyList
+                // while we are processing the list
+                readyList[i].fn.call(window, readyList[i].ctx);
+            }
+            // allow any closures held by these functions to free
+            readyList = [];
+        }
+    }
+    
+    function readyStateChange() {
+    if ( document.readyState === "complete" ) {
+            ready();
+        }
+    }
+    
+    // This is the one public interface
+    // domReady(fn, context);
+    // the context argument is optional - if present, it will be passed
+    // as an argument to the callback
+    baseObj[funcName] = function(callback, context) {
+        // if ready has already fired, then just schedule the callback
+        // to fire asynchronously, but right away
+        if (readyFired) {
+            setTimeout(function() {callback(context);}, 1);
+            return;
+        } else {
+            // add the function and context to the list
+            readyList.push({fn: callback, ctx: context});
+        }
+        // if document already ready to go, schedule the ready function to run
+        if (document.readyState === "complete") {
+            setTimeout(ready, 1);
+        } else if (!readyEventHandlersInstalled) {
+            // otherwise if we don't have event handlers installed, install them
+            if (document.addEventListener) {
+                // first choice is DOMContentLoaded event
+                document.addEventListener("DOMContentLoaded", ready, false);
+                // backup is window load event
+                window.addEventListener("load", ready, false);
+            } else {
+                // must be IE
+                document.attachEvent("onreadystatechange", readyStateChange);
+                window.attachEvent("onload", ready);
+            }
+            readyEventHandlersInstalled = true;
+        }
+    }
+})("domReady", window);
+
+function confirm_link(message, url) {
+    if(confirm(message)) location.href = url;
+}
+
+
+/**
+ * 
+// test basic functionality
+domReady(function() {
+    document.body.appendChild(document.createTextNode("Hello Text 1"));
+    // test adding new domReady handler from a domReady callback
+    domReady(function() {
+        document.body.appendChild(document.createTextNode(", Hello Text 2"));
+    });
+});
+
+// test finding an ID in the document
+domReady(function() {
+    document.getElementById("test").innerHTML = "Hello ID";
+});
+
+// test calling domReady after window load and
+// domReady has already fired
+addEvent(window, "load", function() {
+    setTimeout(function() {
+    document.body.appendChild(document.createTextNode(", Hello Text 2.5"));
+        
+        domReady(function(arg) {
+            document.body.appendChild(document.createTextNode(arg));
+        }, ", Hello Text 3");
+    }, 1);
+});
+})();
+ */
Index: trunk/include/jquery/i18n/jquery-ui-i18n.js
===================================================================
--- trunk/include/jquery/i18n/jquery-ui-i18n.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery-ui-i18n.js	(revision 2)
@@ -0,0 +1,1470 @@
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+    $.datepicker.regional['af'] = {
+        closeText: 'Selekteer',
+        prevText: 'Vorige',
+        nextText: 'Volgende',
+        currentText: 'Vandag',
+        monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+        'Julie','Augustus','September','Oktober','November','Desember'],
+        monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+        dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+        dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+        dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['af']);
+});
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+    $.datepicker.regional['ar-DZ'] = {
+        closeText: 'إغلاق',
+        prevText: '&#x3c;السابق',
+        nextText: 'التالي&#x3e;',
+        currentText: 'اليوم',
+        monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+        'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+        monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+        dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        weekHeader: 'أسبوع',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 6,
+          isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+    $.datepicker.regional['ar'] = {
+        closeText: 'إغلاق',
+        prevText: '&#x3c;السابق',
+        nextText: 'التالي&#x3e;',
+        currentText: 'اليوم',
+        monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+        'تموز', 'آب', 'أيلول',    'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+        monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+        dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        weekHeader: 'أسبوع',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 6,
+          isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ar']);
+});/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+    $.datepicker.regional['az'] = {
+        closeText: 'Bağla',
+        prevText: '&#x3c;Geri',
+        nextText: 'İrəli&#x3e;',
+        currentText: 'Bugün',
+        monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
+        'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+        monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
+        'İyul','Avq','Sen','Okt','Noy','Dek'],
+        dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+        dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+        dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+        weekHeader: 'Hf',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['az']);
+});/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+    $.datepicker.regional['bg'] = {
+        closeText: 'затвори',
+        prevText: '&#x3c;назад',
+        nextText: 'напред&#x3e;',
+        nextBigText: '&#x3e;&#x3e;',
+        currentText: 'днес',
+        monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+        'Юли','Август','Септември','Октомври','Ноември','Декември'],
+        monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+        'Юли','Авг','Сеп','Окт','Нов','Дек'],
+        dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+        dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+        dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['bg']);
+});
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+    $.datepicker.regional['bs'] = {
+        closeText: 'Zatvori', 
+        prevText: '&#x3c;', 
+        nextText: '&#x3e;', 
+        currentText: 'Danas', 
+        monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+        'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['bs']);
+});/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ca'] = {
+        closeText: 'Tancar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Seg&#x3e;',
+        currentText: 'Avui',
+        monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
+        'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+        monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Oct','Nov','Des'],
+        dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+        dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
+        dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ca']);
+});/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+    $.datepicker.regional['cs'] = {
+        closeText: 'Zavřít',
+        prevText: '&#x3c;Dříve',
+        nextText: 'Později&#x3e;',
+        currentText: 'Nyní',
+        monthNames: ['leden','únor','březen','duben','květen','červen',
+        'červenec','srpen','září','říjen','listopad','prosinec'],
+        monthNamesShort: ['led','úno','bře','dub','kvě','čer',
+        'čvc','srp','zář','říj','lis','pro'],
+        dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+        dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+        dayNamesMin: ['ne','po','út','st','čt','pá','so'],
+        weekHeader: 'Týd',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['cs']);
+});
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+    $.datepicker.regional['cy-GB'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+        'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+        monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+        'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+        dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+        dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+        dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+        weekHeader: 'Wy',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+});/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['da'] = {
+        closeText: 'Luk',
+        prevText: '&#x3c;Forrige',
+        nextText: 'Næste&#x3e;',
+        currentText: 'Idag',
+        monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+        'Juli','August','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+        dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+        dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+        weekHeader: 'Uge',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['da']);
+});
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+    $.datepicker.regional['de'] = {
+        closeText: 'schließen',
+        prevText: '&#x3c;zurück',
+        nextText: 'Vor&#x3e;',
+        currentText: 'heute',
+        monthNames: ['Januar','Februar','März','April','Mai','Juni',
+        'Juli','August','September','Oktober','November','Dezember'],
+        monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dez'],
+        dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+        dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+        dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+        weekHeader: 'Wo',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['de']);
+});
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+    $.datepicker.regional['el'] = {
+        closeText: 'Κλείσιμο',
+        prevText: 'Προηγούμενος',
+        nextText: 'Επόμενος',
+        currentText: 'Τρέχων Μήνας',
+        monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
+        'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
+        monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
+        'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
+        dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
+        dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
+        dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
+        weekHeader: 'Εβδ',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['el']);
+});/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+    $.datepicker.regional['en-AU'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+    $.datepicker.regional['en-GB'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+    $.datepicker.regional['en-NZ'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+    $.datepicker.regional['eo'] = {
+        closeText: 'Fermi',
+        prevText: '&lt;Anta',
+        nextText: 'Sekv&gt;',
+        currentText: 'Nuna',
+        monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+        'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aŭg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+        dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
+        dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
+        weekHeader: 'Sb',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['eo']);
+});
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['es'] = {
+        closeText: 'Cerrar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Sig&#x3e;',
+        currentText: 'Hoy',
+        monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+        'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+        monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+        'Jul','Ago','Sep','Oct','Nov','Dic'],
+        dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
+        dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
+        dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['es']);
+});/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+    $.datepicker.regional['et'] = {
+        closeText: 'Sulge',
+        prevText: 'Eelnev',
+        nextText: 'Järgnev',
+        currentText: 'Täna',
+        monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+        'Juuli','August','September','Oktoober','November','Detsember'],
+        monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+        'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+        dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+        dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+        dayNamesMin: ['P','E','T','K','N','R','L'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['et']);
+}); /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+    $.datepicker.regional['eu'] = {
+        closeText: 'Egina',
+        prevText: '&#x3c;Aur',
+        nextText: 'Hur&#x3e;',
+        currentText: 'Gaur',
+        monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina',
+        'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'],
+        monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka',
+        'Uzt','Abu','Ira','Urr','Aza','Abe'],
+        dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'],
+        dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'],
+        dayNamesMin: ['Ig','As','As','As','Os','Os','La'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['eu']);
+});/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+    $.datepicker.regional['fa'] = {
+        closeText: 'بستن',
+        prevText: '&#x3c;قبلي',
+        nextText: 'بعدي&#x3e;',
+        currentText: 'امروز',
+        monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
+        'مهر','آبان','آذر','دي','بهمن','اسفند'],
+        monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+        dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
+        dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
+        dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
+        weekHeader: 'هف',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 6,
+        isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fa']);
+});/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpi� (harrikilpio@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['fi'] = {
+        closeText: 'Sulje',
+        prevText: '&laquo;Edellinen',
+        nextText: 'Seuraava&raquo;',
+        currentText: 'T&auml;n&auml;&auml;n',
+        monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&auml;kuu',
+        'Hein&auml;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+        monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&auml;',
+        'Hein&auml;','Elo','Syys','Loka','Marras','Joulu'],
+        dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
+        dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+        dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+        weekHeader: 'Vk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fi']);
+});
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+    $.datepicker.regional['fo'] = {
+        closeText: 'Lat aftur',
+        prevText: '&#x3c;Fyrra',
+        nextText: 'Næsta&#x3e;',
+        currentText: 'Í dag',
+        monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+        'Juli','August','September','Oktober','November','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Des'],
+        dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+        dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+        dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+        weekHeader: 'Vk',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fo']);
+});
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+    $.datepicker.regional['fr-CH'] = {
+        closeText: 'Fermer',
+        prevText: '&#x3c;Préc',
+        nextText: 'Suiv&#x3e;',
+        currentText: 'Courant',
+        monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+        'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+        monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+        'Jul','Aoû','Sep','Oct','Nov','Déc'],
+        dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+        dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+        dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+              Stéphane Nahmani (sholby@sholby.net),
+              Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+    $.datepicker.regional['fr'] = {
+        closeText: 'Fermer',
+        prevText: 'Précédent',
+        nextText: 'Suivant',
+        currentText: 'Aujourd\'hui',
+        monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+        'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+        monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+        'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+        dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+        dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+        dayNamesMin: ['D','L','M','M','J','V','S'],
+        weekHeader: 'Sem.',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fr']);
+});
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+    $.datepicker.regional['gl'] = {
+        closeText: 'Pechar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Seg&#x3e;',
+        currentText: 'Hoxe',
+        monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+        'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+        monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+        'Xul','Ago','Set','Out','Nov','Dec'],
+        dayNames: ['Domingo','Luns','Martes','M&eacute;rcores','Xoves','Venres','S&aacute;bado'],
+        dayNamesShort: ['Dom','Lun','Mar','M&eacute;r','Xov','Ven','S&aacute;b'],
+        dayNamesMin: ['Do','Lu','Ma','M&eacute;','Xo','Ve','S&aacute;'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['gl']);
+});/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+    $.datepicker.regional['he'] = {
+        closeText: 'סגור',
+        prevText: '&#x3c;הקודם',
+        nextText: 'הבא&#x3e;',
+        currentText: 'היום',
+        monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+        'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+        monthNamesShort: ['1','2','3','4','5','6',
+        '7','8','9','10','11','12'],
+        dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+        dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+        dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['he']);
+});
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+    $.datepicker.regional['hr'] = {
+        closeText: 'Zatvori',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Danas',
+        monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
+        'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+        monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+        'Srp','Kol','Ruj','Lis','Stu','Pro'],
+        dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Tje',
+        dateFormat: 'dd.mm.yy.',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hr']);
+});/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+    $.datepicker.regional['hu'] = {
+        closeText: 'bezár',
+        prevText: 'vissza',
+        nextText: 'előre',
+        currentText: 'ma',
+        monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
+        'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+        monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
+        'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+        dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+        dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+        dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+        weekHeader: 'Hét',
+        dateFormat: 'yy.mm.dd.',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hu']);
+});
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+    $.datepicker.regional['hy'] = {
+        closeText: 'Փակել',
+        prevText: '&#x3c;Նախ.',
+        nextText: 'Հաջ.&#x3e;',
+        currentText: 'Այսօր',
+        monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
+        'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
+        monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
+        'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
+        dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
+        dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+        dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+        weekHeader: 'ՇԲՏ',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hy']);
+});/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['id'] = {
+        closeText: 'Tutup',
+        prevText: '&#x3c;mundur',
+        nextText: 'maju&#x3e;',
+        currentText: 'hari ini',
+        monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+        'Juli','Agustus','September','Oktober','Nopember','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+        'Jul','Agus','Sep','Okt','Nop','Des'],
+        dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+        dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+        dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+        weekHeader: 'Mg',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['id']);
+});/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+    $.datepicker.regional['is'] = {
+        closeText: 'Loka',
+        prevText: '&#x3c; Fyrri',
+        nextText: 'N&aelig;sti &#x3e;',
+        currentText: '&Iacute; dag',
+        monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
+        'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
+        'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
+        dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
+        dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
+        dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
+        weekHeader: 'Vika',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['is']);
+});/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['it'] = {
+        closeText: 'Chiudi',
+        prevText: '&#x3c;Prec',
+        nextText: 'Succ&#x3e;',
+        currentText: 'Oggi',
+        monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+            'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+        monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+            'Lug','Ago','Set','Ott','Nov','Dic'],
+        dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
+        dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+        dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['it']);
+});
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+    $.datepicker.regional['ja'] = {
+        closeText: '閉じる',
+        prevText: '&#x3c;前',
+        nextText: '次&#x3e;',
+        currentText: '今日',
+        monthNames: ['1月','2月','3月','4月','5月','6月',
+        '7月','8月','9月','10月','11月','12月'],
+        monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+        '7月','8月','9月','10月','11月','12月'],
+        dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
+        dayNamesShort: ['日','月','火','水','木','金','土'],
+        dayNamesMin: ['日','月','火','水','木','金','土'],
+        weekHeader: '週',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['ja']);
+});/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['kk'] = {
+        closeText: 'Жабу',
+        prevText: '&#x3c;Алдыңғы',
+        nextText: 'Келесі&#x3e;',
+        currentText: 'Бүгін',
+        monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
+        'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
+        monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
+        'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+        dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
+        dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
+        dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
+        weekHeader: 'Не',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['kk']);
+});
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ko'] = {
+        closeText: '닫기',
+        prevText: '이전달',
+        nextText: '다음달',
+        currentText: '오늘',
+        monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
+        '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
+        monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
+        '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
+        dayNames: ['일','월','화','수','목','금','토'],
+        dayNamesShort: ['일','월','화','수','목','금','토'],
+        dayNamesMin: ['일','월','화','수','목','금','토'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: '년'};
+    $.datepicker.setDefaults($.datepicker.regional['ko']);
+});/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+jQuery(function($){
+    $.datepicker.regional['lb'] = {
+        closeText: 'Fäerdeg',
+        prevText: 'Zréck',
+        nextText: 'Weider',
+        currentText: 'Haut',
+        monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+        'Juli','August','September','Oktober','November','Dezember'],
+        monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+        dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+        dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+        dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+        weekHeader: 'W',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['lb']);
+});
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+    $.datepicker.regional['lt'] = {
+        closeText: 'Uždaryti',
+        prevText: '&#x3c;Atgal',
+        nextText: 'Pirmyn&#x3e;',
+        currentText: 'Šiandien',
+        monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+        'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+        monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+        'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+        dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
+        dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+        dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['lt']);
+});/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+    $.datepicker.regional['lv'] = {
+        closeText: 'Aizvērt',
+        prevText: 'Iepr',
+        nextText: 'Nāka',
+        currentText: 'Šodien',
+        monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
+        'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
+        'Jūl','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+        dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+        dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+        weekHeader: 'Nav',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['lv']);
+});/* Macedonian i18n for the jQuery UI date picker plugin. */
+/* Written by Stojce Slavkovski. */
+jQuery(function($){
+    $.datepicker.regional['mk'] = {
+        closeText: 'Затвори',
+        prevText: '&#x3C;',
+        nextText: '&#x3E;',
+        currentText: 'Денес',
+        monthNames: ['Јануари','Фебруари','Март','Април','Мај','Јуни',
+        'Јули','Август','Септември','Октомври','Ноември','Декември'],
+        monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
+        'Јул','Авг','Сеп','Окт','Ное','Дек'],
+        dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+        dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'],
+        dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
+        weekHeader: 'Сед',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['mk']);
+});
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ml'] = {
+        closeText: 'ശരി',
+        prevText: 'മുന്നത്തെ',  
+        nextText: 'അടുത്തത് ',
+        currentText: 'ഇന്ന്',
+        monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
+        'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
+        monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
+        'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
+        dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+        dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+        dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
+        weekHeader: 'ആ',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ml']);
+});
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+    $.datepicker.regional['ms'] = {
+        closeText: 'Tutup',
+        prevText: '&#x3c;Sebelum',
+        nextText: 'Selepas&#x3e;',
+        currentText: 'hari ini',
+        monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+        'Julai','Ogos','September','Oktober','November','Disember'],
+        monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+        'Jul','Ogo','Sep','Okt','Nov','Dis'],
+        dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+        dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+        dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+        weekHeader: 'Mg',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ms']);
+});﻿/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+    $.datepicker.regional['nl-BE'] = {
+        closeText: 'Sluiten',
+        prevText: '←',
+        nextText: '→',
+        currentText: 'Vandaag',
+        monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+        'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+        monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+        'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+        dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+        dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+        dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+    $.datepicker.regional.nl = {
+        closeText: 'Sluiten',
+        prevText: '←',
+        nextText: '→',
+        currentText: 'Vandaag',
+        monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+        'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+        monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+        'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+        dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+        dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+        dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional.nl);
+});/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+  $.datepicker.regional['no'] = {
+    closeText: 'Lukk',
+    prevText: '&laquo;Forrige',
+    nextText: 'Neste&raquo;',
+    currentText: 'I dag',
+    monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+    monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+    dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+    dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+    dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+    weekHeader: 'Uke',
+    dateFormat: 'dd.mm.yy',
+    firstDay: 1,
+    isRTL: false,
+    showMonthAfterYear: false,
+    yearSuffix: ''
+  };
+  $.datepicker.setDefaults($.datepicker.regional['no']);
+});
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['pl'] = {
+        closeText: 'Zamknij',
+        prevText: '&#x3c;Poprzedni',
+        nextText: 'Następny&#x3e;',
+        currentText: 'Dziś',
+        monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+        'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+        monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+        'Lip','Sie','Wrz','Pa','Lis','Gru'],
+        dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+        dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
+        dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
+        weekHeader: 'Tydz',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pl']);
+});
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['pt-BR'] = {
+        closeText: 'Fechar',
+        prevText: '&#x3c;Anterior',
+        nextText: 'Pr&oacute;ximo&#x3e;',
+        currentText: 'Hoje',
+        monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+        'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Out','Nov','Dez'],
+        dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+});/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+    $.datepicker.regional['pt'] = {
+        closeText: 'Fechar',
+        prevText: '&#x3c;Anterior',
+        nextText: 'Seguinte',
+        currentText: 'Hoje',
+        monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+        'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Out','Nov','Dez'],
+        dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        weekHeader: 'Sem',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pt']);
+});/* Romansh initialisation for the jQuery UI date picker plugin. */
+/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+jQuery(function($){
+    $.datepicker.regional['rm'] = {
+        closeText: 'Serrar',
+        prevText: '&#x3c;Suandant',
+        nextText: 'Precedent&#x3e;',
+        currentText: 'Actual',
+        monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+        monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+        dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+        dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+        dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+        weekHeader: 'emna',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['rm']);
+});
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+    $.datepicker.regional['ro'] = {
+        closeText: 'Închide',
+        prevText: '&laquo; Luna precedentă',
+        nextText: 'Luna următoare &raquo;',
+        currentText: 'Azi',
+        monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+        'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+        monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+        'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+        dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+        dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+        weekHeader: 'Săpt',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ro']);
+});
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ru'] = {
+        closeText: 'Закрыть',
+        prevText: '&#x3c;Пред',
+        nextText: 'След&#x3e;',
+        currentText: 'Сегодня',
+        monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+        'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+        monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+        'Июл','Авг','Сен','Окт','Ноя','Дек'],
+        dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+        dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+        dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
+        weekHeader: 'Нед',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ru']);
+});/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+    $.datepicker.regional['sk'] = {
+        closeText: 'Zavrieť',
+        prevText: '&#x3c;Predchádzajúci',
+        nextText: 'Nasledujúci&#x3e;',
+        currentText: 'Dnes',
+        monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+        'Júl','August','September','Október','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+        'Júl','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+        dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
+        dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
+        weekHeader: 'Ty',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sk']);
+});
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
+jQuery(function($){
+    $.datepicker.regional['sl'] = {
+        closeText: 'Zapri',
+        prevText: '&lt;Prej&#x161;nji',
+        nextText: 'Naslednji&gt;',
+        currentText: 'Trenutni',
+        monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+        'Julij','Avgust','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Avg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
+        dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
+        dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
+        weekHeader: 'Teden',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sl']);
+});
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['sq'] = {
+        closeText: 'mbylle',
+        prevText: '&#x3c;mbrapa',
+        nextText: 'Përpara&#x3e;',
+        currentText: 'sot',
+        monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+        'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+        monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+        'Kor','Gus','Sht','Tet','Nën','Dhj'],
+        dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+        dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+        dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+        weekHeader: 'Ja',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sq']);
+});
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+    $.datepicker.regional['sr-SR'] = {
+        closeText: 'Zatvori',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Danas',
+        monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+        'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Avg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Sed',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+    $.datepicker.regional['sr'] = {
+        closeText: 'Затвори',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Данас',
+        monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+        'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+        monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
+        'Јул','Авг','Сеп','Окт','Нов','Дец'],
+        dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+        dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
+        dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+        weekHeader: 'Сед',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sr']);
+});
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+    $.datepicker.regional['sv'] = {
+        closeText: 'Stäng',
+        prevText: '&laquo;Förra',
+        nextText: 'Nästa&raquo;',
+        currentText: 'Idag',
+        monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+        'Juli','Augusti','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+        dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+        dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+        weekHeader: 'Ve',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sv']);
+});
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+    $.datepicker.regional['ta'] = {
+        closeText: 'மூடு',
+        prevText: 'முன்னையது',
+        nextText: 'அடுத்தது',
+        currentText: 'இன்று',
+        monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
+        'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
+        monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
+        'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
+        dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
+        dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
+        dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
+        weekHeader: 'Не',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ta']);
+});
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+    $.datepicker.regional['th'] = {
+        closeText: 'ปิด',
+        prevText: '&laquo;&nbsp;ย้อน',
+        nextText: 'ถัดไป&nbsp;&raquo;',
+        currentText: 'วันนี้',
+        monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+        'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+        monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+        'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+        dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+        dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+        dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['th']);
+});/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['tj'] = {
+        closeText: 'Идома',
+        prevText: '&#x3c;Қафо',
+        nextText: 'Пеш&#x3e;',
+        currentText: 'Имрӯз',
+        monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
+        'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
+        monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+        'Июл','Авг','Сен','Окт','Ноя','Дек'],
+        dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+        dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
+        dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+        weekHeader: 'Хф',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['tj']);
+});/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+    $.datepicker.regional['tr'] = {
+        closeText: 'kapat',
+        prevText: '&#x3c;geri',
+        nextText: 'ileri&#x3e',
+        currentText: 'bugün',
+        monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+        'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+        monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
+        'Tem','Ağu','Eyl','Eki','Kas','Ara'],
+        dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+        dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+        dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+        weekHeader: 'Hf',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['tr']);
+});/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['uk'] = {
+        closeText: 'Закрити',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Сьогодні',
+        monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+        'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+        monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+        'Лип','Сер','Вер','Жов','Лис','Гру'],
+        dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
+        dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
+        dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
+        weekHeader: 'Тиж',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['uk']);
+});/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+    $.datepicker.regional['vi'] = {
+        closeText: 'Đóng',
+        prevText: '&#x3c;Trước',
+        nextText: 'Tiếp&#x3e;',
+        currentText: 'Hôm nay',
+        monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+        'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
+        monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+        'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+        dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+        dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+        dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+        weekHeader: 'Tu',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['vi']);
+});
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-CN'] = {
+        closeText: '关闭',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-HK'] = {
+        closeText: '關閉',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-TW'] = {
+        closeText: '關閉',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-af.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-af.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-af.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+    $.datepicker.regional['af'] = {
+        closeText: 'Selekteer',
+        prevText: 'Vorige',
+        nextText: 'Volgende',
+        currentText: 'Vandag',
+        monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+        'Julie','Augustus','September','Oktober','November','Desember'],
+        monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+        dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+        dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+        dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['af']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ar-DZ.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ar-DZ.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ar-DZ.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+    $.datepicker.regional['ar-DZ'] = {
+        closeText: 'إغلاق',
+        prevText: '&#x3c;السابق',
+        nextText: 'التالي&#x3e;',
+        currentText: 'اليوم',
+        monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+        'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+        monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+        dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        weekHeader: 'أسبوع',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 6,
+          isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ar.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ar.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ar.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+    $.datepicker.regional['ar'] = {
+        closeText: 'إغلاق',
+        prevText: '&#x3c;السابق',
+        nextText: 'التالي&#x3e;',
+        currentText: 'اليوم',
+        monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+        'تموز', 'آب', 'أيلول',    'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+        monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+        dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+        weekHeader: 'أسبوع',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 6,
+          isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ar']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-az.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-az.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-az.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+    $.datepicker.regional['az'] = {
+        closeText: 'Bağla',
+        prevText: '&#x3c;Geri',
+        nextText: 'İrəli&#x3e;',
+        currentText: 'Bugün',
+        monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
+        'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+        monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
+        'İyul','Avq','Sen','Okt','Noy','Dek'],
+        dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+        dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+        dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+        weekHeader: 'Hf',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['az']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-bg.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-bg.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-bg.js	(revision 2)
@@ -0,0 +1,24 @@
+/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+    $.datepicker.regional['bg'] = {
+        closeText: 'затвори',
+        prevText: '&#x3c;назад',
+        nextText: 'напред&#x3e;',
+        nextBigText: '&#x3e;&#x3e;',
+        currentText: 'днес',
+        monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+        'Юли','Август','Септември','Октомври','Ноември','Декември'],
+        monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+        'Юли','Авг','Сеп','Окт','Нов','Дек'],
+        dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+        dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+        dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['bg']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-bs.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-bs.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-bs.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+    $.datepicker.regional['bs'] = {
+        closeText: 'Zatvori', 
+        prevText: '&#x3c;', 
+        nextText: '&#x3e;', 
+        currentText: 'Danas', 
+        monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+        'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['bs']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ca.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ca.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ca.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ca'] = {
+        closeText: 'Tancar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Seg&#x3e;',
+        currentText: 'Avui',
+        monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
+        'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+        monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Oct','Nov','Des'],
+        dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+        dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
+        dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ca']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-cs.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-cs.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-cs.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+    $.datepicker.regional['cs'] = {
+        closeText: 'Zavřít',
+        prevText: '&#x3c;Dříve',
+        nextText: 'Později&#x3e;',
+        currentText: 'Nyní',
+        monthNames: ['leden','únor','březen','duben','květen','červen',
+        'červenec','srpen','září','říjen','listopad','prosinec'],
+        monthNamesShort: ['led','úno','bře','dub','kvě','čer',
+        'čvc','srp','zář','říj','lis','pro'],
+        dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+        dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+        dayNamesMin: ['ne','po','út','st','čt','pá','so'],
+        weekHeader: 'Týd',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['cs']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-da.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-da.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-da.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['da'] = {
+        closeText: 'Luk',
+        prevText: '&#x3c;Forrige',
+        nextText: 'Næste&#x3e;',
+        currentText: 'Idag',
+        monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+        'Juli','August','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+        dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+        dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+        weekHeader: 'Uge',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['da']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-de.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-de.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-de.js	(revision 2)
@@ -0,0 +1,23 @@
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+    $.datepicker.regional['de'] = {
+        closeText: 'schließen',
+        prevText: '&#x3c;zurück',
+        nextText: 'Vor&#x3e;',
+        currentText: 'heute',
+        monthNames: ['Januar','Februar','März','April','Mai','Juni',
+        'Juli','August','September','Oktober','November','Dezember'],
+        monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dez'],
+        dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+        dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+        dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+        weekHeader: 'Wo',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['de']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-el.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-el.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-el.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+    $.datepicker.regional['el'] = {
+        closeText: 'Κλείσιμο',
+        prevText: 'Προηγούμενος',
+        nextText: 'Επόμενος',
+        currentText: 'Τρέχων Μήνας',
+        monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
+        'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
+        monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
+        'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
+        dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
+        dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
+        dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
+        weekHeader: 'Εβδ',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['el']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-en-AU.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-en-AU.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-en-AU.js	(revision 2)
@@ -0,0 +1,23 @@
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+    $.datepicker.regional['en-AU'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-en-GB.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-en-GB.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-en-GB.js	(revision 2)
@@ -0,0 +1,23 @@
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+    $.datepicker.regional['en-GB'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-en-NZ.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-en-NZ.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-en-NZ.js	(revision 2)
@@ -0,0 +1,23 @@
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+    $.datepicker.regional['en-NZ'] = {
+        closeText: 'Done',
+        prevText: 'Prev',
+        nextText: 'Next',
+        currentText: 'Today',
+        monthNames: ['January','February','March','April','May','June',
+        'July','August','September','October','November','December'],
+        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+        dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+        dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-eo.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-eo.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-eo.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+    $.datepicker.regional['eo'] = {
+        closeText: 'Fermi',
+        prevText: '&lt;Anta',
+        nextText: 'Sekv&gt;',
+        currentText: 'Nuna',
+        monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+        'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aŭg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+        dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
+        dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
+        weekHeader: 'Sb',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['eo']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-es.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-es.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-es.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['es'] = {
+        closeText: 'Cerrar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Sig&#x3e;',
+        currentText: 'Hoy',
+        monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+        'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+        monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+        'Jul','Ago','Sep','Oct','Nov','Dic'],
+        dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
+        dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
+        dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['es']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-et.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-et.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-et.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+    $.datepicker.regional['et'] = {
+        closeText: 'Sulge',
+        prevText: 'Eelnev',
+        nextText: 'Järgnev',
+        currentText: 'Täna',
+        monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+        'Juuli','August','September','Oktoober','November','Detsember'],
+        monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+        'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+        dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+        dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+        dayNamesMin: ['P','E','T','K','N','R','L'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['et']);
+}); 
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-eu.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-eu.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-eu.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+    $.datepicker.regional['eu'] = {
+        closeText: 'Egina',
+        prevText: '&#x3c;Aur',
+        nextText: 'Hur&#x3e;',
+        currentText: 'Gaur',
+        monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina',
+        'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'],
+        monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka',
+        'Uzt','Abu','Ira','Urr','Aza','Abe'],
+        dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'],
+        dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'],
+        dayNamesMin: ['Ig','As','As','As','Os','Os','La'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['eu']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-fa.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-fa.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-fa.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+    $.datepicker.regional['fa'] = {
+        closeText: 'بستن',
+        prevText: '&#x3c;قبلي',
+        nextText: 'بعدي&#x3e;',
+        currentText: 'امروز',
+        monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور',
+        'مهر','آبان','آذر','دي','بهمن','اسفند'],
+        monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+        dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'],
+        dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'],
+        dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'],
+        weekHeader: 'هف',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 6,
+        isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fa']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-fi.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-fi.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-fi.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpi� (harrikilpio@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['fi'] = {
+        closeText: 'Sulje',
+        prevText: '&laquo;Edellinen',
+        nextText: 'Seuraava&raquo;',
+        currentText: 'T&auml;n&auml;&auml;n',
+        monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&auml;kuu',
+        'Hein&auml;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+        monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&auml;',
+        'Hein&auml;','Elo','Syys','Loka','Marras','Joulu'],
+        dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'],
+        dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+        dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+        weekHeader: 'Vk',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fi']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-fo.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-fo.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-fo.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+    $.datepicker.regional['fo'] = {
+        closeText: 'Lat aftur',
+        prevText: '&#x3c;Fyrra',
+        nextText: 'Næsta&#x3e;',
+        currentText: 'Í dag',
+        monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+        'Juli','August','September','Oktober','November','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Des'],
+        dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+        dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+        dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+        weekHeader: 'Vk',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fo']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-fr-CH.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-fr-CH.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-fr-CH.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+    $.datepicker.regional['fr-CH'] = {
+        closeText: 'Fermer',
+        prevText: '&#x3c;Préc',
+        nextText: 'Suiv&#x3e;',
+        currentText: 'Courant',
+        monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+        'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+        monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+        'Jul','Aoû','Sep','Oct','Nov','Déc'],
+        dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+        dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+        dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-fr.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-fr.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-fr.js	(revision 2)
@@ -0,0 +1,25 @@
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+              Stéphane Nahmani (sholby@sholby.net),
+              Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+    $.datepicker.regional['fr'] = {
+        closeText: 'Fermer',
+        prevText: 'Précédent',
+        nextText: 'Suivant',
+        currentText: 'Aujourd\'hui',
+        monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+        'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+        monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+        'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+        dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+        dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+        dayNamesMin: ['D','L','M','M','J','V','S'],
+        weekHeader: 'Sem.',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['fr']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-gl.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-gl.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-gl.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+    $.datepicker.regional['gl'] = {
+        closeText: 'Pechar',
+        prevText: '&#x3c;Ant',
+        nextText: 'Seg&#x3e;',
+        currentText: 'Hoxe',
+        monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+        'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+        monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+        'Xul','Ago','Set','Out','Nov','Dec'],
+        dayNames: ['Domingo','Luns','Martes','M&eacute;rcores','Xoves','Venres','S&aacute;bado'],
+        dayNamesShort: ['Dom','Lun','Mar','M&eacute;r','Xov','Ven','S&aacute;b'],
+        dayNamesMin: ['Do','Lu','Ma','M&eacute;','Xo','Ve','S&aacute;'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['gl']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-he.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-he.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-he.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+    $.datepicker.regional['he'] = {
+        closeText: 'סגור',
+        prevText: '&#x3c;הקודם',
+        nextText: 'הבא&#x3e;',
+        currentText: 'היום',
+        monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+        'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+        monthNamesShort: ['1','2','3','4','5','6',
+        '7','8','9','10','11','12'],
+        dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+        dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+        dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: true,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['he']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-hr.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-hr.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-hr.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+    $.datepicker.regional['hr'] = {
+        closeText: 'Zatvori',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Danas',
+        monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
+        'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+        monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+        'Srp','Kol','Ruj','Lis','Stu','Pro'],
+        dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Tje',
+        dateFormat: 'dd.mm.yy.',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hr']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-hu.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-hu.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-hu.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+    $.datepicker.regional['hu'] = {
+        closeText: 'bezár',
+        prevText: 'vissza',
+        nextText: 'előre',
+        currentText: 'ma',
+        monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
+        'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+        monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
+        'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+        dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+        dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+        dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+        weekHeader: 'Hét',
+        dateFormat: 'yy.mm.dd.',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hu']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-hy.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-hy.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-hy.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+    $.datepicker.regional['hy'] = {
+        closeText: 'Փակել',
+        prevText: '&#x3c;Նախ.',
+        nextText: 'Հաջ.&#x3e;',
+        currentText: 'Այսօր',
+        monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
+        'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
+        monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
+        'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
+        dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
+        dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+        dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+        weekHeader: 'ՇԲՏ',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['hy']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-id.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-id.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-id.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['id'] = {
+        closeText: 'Tutup',
+        prevText: '&#x3c;mundur',
+        nextText: 'maju&#x3e;',
+        currentText: 'hari ini',
+        monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+        'Juli','Agustus','September','Oktober','Nopember','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+        'Jul','Agus','Sep','Okt','Nop','Des'],
+        dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+        dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+        dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+        weekHeader: 'Mg',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['id']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-is.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-is.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-is.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+    $.datepicker.regional['is'] = {
+        closeText: 'Loka',
+        prevText: '&#x3c; Fyrri',
+        nextText: 'N&aelig;sti &#x3e;',
+        currentText: '&Iacute; dag',
+        monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
+        'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
+        'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
+        dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
+        dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
+        dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
+        weekHeader: 'Vika',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['is']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-it.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-it.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-it.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['it'] = {
+        closeText: 'Chiudi',
+        prevText: '&#x3c;Prec',
+        nextText: 'Succ&#x3e;',
+        currentText: 'Oggi',
+        monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+            'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+        monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+            'Lug','Ago','Set','Ott','Nov','Dic'],
+        dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
+        dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+        dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['it']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ja.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ja.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ja.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+    $.datepicker.regional['ja'] = {
+        closeText: '閉じる',
+        prevText: '&#x3c;前',
+        nextText: '次&#x3e;',
+        currentText: '今日',
+        monthNames: ['1月','2月','3月','4月','5月','6月',
+        '7月','8月','9月','10月','11月','12月'],
+        monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+        '7月','8月','9月','10月','11月','12月'],
+        dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
+        dayNamesShort: ['日','月','火','水','木','金','土'],
+        dayNamesMin: ['日','月','火','水','木','金','土'],
+        weekHeader: '週',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['ja']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ko.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ko.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ko.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ko'] = {
+        closeText: '닫기',
+        prevText: '이전달',
+        nextText: '다음달',
+        currentText: '오늘',
+        monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
+        '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
+        monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
+        '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
+        dayNames: ['일','월','화','수','목','금','토'],
+        dayNamesShort: ['일','월','화','수','목','금','토'],
+        dayNamesMin: ['일','월','화','수','목','금','토'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: '년'};
+    $.datepicker.setDefaults($.datepicker.regional['ko']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-kz.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-kz.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-kz.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['kz'] = {
+        closeText: 'Жабу',
+        prevText: '&#x3c;Алдыңғы',
+        nextText: 'Келесі&#x3e;',
+        currentText: 'Бүгін',
+        monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
+        'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
+        monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
+        'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+        dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
+        dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
+        dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
+        weekHeader: 'Не',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['kz']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-lt.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-lt.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-lt.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+    $.datepicker.regional['lt'] = {
+        closeText: 'Uždaryti',
+        prevText: '&#x3c;Atgal',
+        nextText: 'Pirmyn&#x3e;',
+        currentText: 'Šiandien',
+        monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+        'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+        monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+        'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+        dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
+        dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+        dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
+        weekHeader: 'Wk',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['lt']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-lv.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-lv.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-lv.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+    $.datepicker.regional['lv'] = {
+        closeText: 'Aizvērt',
+        prevText: 'Iepr',
+        nextText: 'Nāka',
+        currentText: 'Šodien',
+        monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
+        'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
+        'Jūl','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+        dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+        dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+        weekHeader: 'Nav',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['lv']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ml.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ml.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ml.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ml'] = {
+        closeText: 'ശരി',
+        prevText: 'മുന്നത്തെ',  
+        nextText: 'അടുത്തത് ',
+        currentText: 'ഇന്ന്',
+        monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
+        'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
+        monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
+        'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
+        dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+        dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+        dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
+        weekHeader: 'ആ',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ml']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ms.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ms.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ms.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+    $.datepicker.regional['ms'] = {
+        closeText: 'Tutup',
+        prevText: '&#x3c;Sebelum',
+        nextText: 'Selepas&#x3e;',
+        currentText: 'hari ini',
+        monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+        'Julai','Ogos','September','Oktober','November','Disember'],
+        monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+        'Jul','Ogo','Sep','Okt','Nov','Dis'],
+        dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+        dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+        dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+        weekHeader: 'Mg',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ms']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-nl.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-nl.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-nl.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+    $.datepicker.regional.nl = {
+        closeText: 'Sluiten',
+        prevText: '←',
+        nextText: '→',
+        currentText: 'Vandaag',
+        monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+        'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+        monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+        'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+        dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+        dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+        dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional.nl);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-no.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-no.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-no.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+  $.datepicker.regional['no'] = {
+    closeText: 'Lukk',
+    prevText: '&laquo;Forrige',
+    nextText: 'Neste&raquo;',
+    currentText: 'I dag',
+    monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+    monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+    dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+    dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+    dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+    weekHeader: 'Uke',
+    dateFormat: 'dd.mm.yy',
+    firstDay: 1,
+    isRTL: false,
+    showMonthAfterYear: false,
+    yearSuffix: ''
+  };
+  $.datepicker.setDefaults($.datepicker.regional['no']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-pl.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-pl.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-pl.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['pl'] = {
+        closeText: 'Zamknij',
+        prevText: '&#x3c;Poprzedni',
+        nextText: 'Następny&#x3e;',
+        currentText: 'Dziś',
+        monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+        'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+        monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+        'Lip','Sie','Wrz','Pa','Lis','Gru'],
+        dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+        dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
+        dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
+        weekHeader: 'Tydz',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pl']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-pt-BR.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-pt-BR.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-pt-BR.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['pt-BR'] = {
+        closeText: 'Fechar',
+        prevText: '&#x3c;Anterior',
+        nextText: 'Pr&oacute;ximo&#x3e;',
+        currentText: 'Hoje',
+        monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+        'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Out','Nov','Dez'],
+        dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        weekHeader: 'Sm',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-pt.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-pt.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-pt.js	(revision 2)
@@ -0,0 +1,22 @@
+/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+    $.datepicker.regional['pt'] = {
+        closeText: 'Fechar',
+        prevText: '&#x3c;Anterior',
+        nextText: 'Seguinte',
+        currentText: 'Hoje',
+        monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+        'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+        'Jul','Ago','Set','Out','Nov','Dez'],
+        dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+        weekHeader: 'Sem',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['pt']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-rm.js
===================================================================
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ro.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ro.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ro.js	(revision 2)
@@ -0,0 +1,26 @@
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+    $.datepicker.regional['ro'] = {
+        closeText: 'Închide',
+        prevText: '&laquo; Luna precedentă',
+        nextText: 'Luna următoare &raquo;',
+        currentText: 'Azi',
+        monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+        'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+        monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+        'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+        dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+        dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+        dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+        weekHeader: 'Săpt',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ro']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ru.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ru.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ru.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['ru'] = {
+        closeText: 'Закрыть',
+        prevText: '&#x3c;Пред',
+        nextText: 'След&#x3e;',
+        currentText: 'Сегодня',
+        monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+        'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+        monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+        'Июл','Авг','Сен','Окт','Ноя','Дек'],
+        dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+        dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+        dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
+        weekHeader: 'Нед',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ru']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sk.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sk.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sk.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+    $.datepicker.regional['sk'] = {
+        closeText: 'Zavrieť',
+        prevText: '&#x3c;Predchádzajúci',
+        nextText: 'Nasledujúci&#x3e;',
+        currentText: 'Dnes',
+        monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+        'Júl','August','September','Október','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+        'Júl','Aug','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+        dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
+        dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
+        weekHeader: 'Ty',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sk']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sl.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sl.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sl.js	(revision 2)
@@ -0,0 +1,24 @@
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
+jQuery(function($){
+    $.datepicker.regional['sl'] = {
+        closeText: 'Zapri',
+        prevText: '&lt;Prej&#x161;nji',
+        nextText: 'Naslednji&gt;',
+        currentText: 'Trenutni',
+        monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+        'Julij','Avgust','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Avg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
+        dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
+        dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
+        weekHeader: 'Teden',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sl']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sq.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sq.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sq.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['sq'] = {
+        closeText: 'mbylle',
+        prevText: '&#x3c;mbrapa',
+        nextText: 'Përpara&#x3e;',
+        currentText: 'sot',
+        monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+        'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+        monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+        'Kor','Gus','Sht','Tet','Nën','Dhj'],
+        dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+        dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+        dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+        weekHeader: 'Ja',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sq']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sr-SR.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sr-SR.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sr-SR.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+    $.datepicker.regional['sr-SR'] = {
+        closeText: 'Zatvori',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Danas',
+        monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+        'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Avg','Sep','Okt','Nov','Dec'],
+        dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
+        dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
+        dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+        weekHeader: 'Sed',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sr.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sr.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sr.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+    $.datepicker.regional['sr'] = {
+        closeText: 'Затвори',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Данас',
+        monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+        'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+        monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
+        'Јул','Авг','Сеп','Окт','Нов','Дец'],
+        dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+        dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
+        dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+        weekHeader: 'Сед',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sr']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-sv.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-sv.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-sv.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+    $.datepicker.regional['sv'] = {
+        closeText: 'Stäng',
+        prevText: '&laquo;Förra',
+        nextText: 'Nästa&raquo;',
+        currentText: 'Idag',
+        monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+        'Juli','Augusti','September','Oktober','November','December'],
+        monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+        'Jul','Aug','Sep','Okt','Nov','Dec'],
+        dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+        dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+        dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+        weekHeader: 'Ve',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['sv']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-ta.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-ta.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-ta.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+    $.datepicker.regional['ta'] = {
+        closeText: 'மூடு',
+        prevText: 'முன்னையது',
+        nextText: 'அடுத்தது',
+        currentText: 'இன்று',
+        monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
+        'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
+        monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
+        'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
+        dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
+        dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
+        dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
+        weekHeader: 'Не',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['ta']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-th.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-th.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-th.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+    $.datepicker.regional['th'] = {
+        closeText: 'ปิด',
+        prevText: '&laquo;&nbsp;ย้อน',
+        nextText: 'ถัดไป&nbsp;&raquo;',
+        currentText: 'วันนี้',
+        monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+        'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+        monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+        'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+        dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+        dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+        dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+        weekHeader: 'Wk',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['th']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-tr.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-tr.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-tr.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+    $.datepicker.regional['tr'] = {
+        closeText: 'kapat',
+        prevText: '&#x3c;geri',
+        nextText: 'ileri&#x3e',
+        currentText: 'bugün',
+        monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+        'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+        monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
+        'Tem','Ağu','Eyl','Eki','Kas','Ara'],
+        dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+        dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+        dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+        weekHeader: 'Hf',
+        dateFormat: 'dd.mm.yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['tr']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-uk.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-uk.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-uk.js	(revision 2)
@@ -0,0 +1,24 @@
+/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['uk'] = {
+        closeText: 'Закрити',
+        prevText: '&#x3c;',
+        nextText: '&#x3e;',
+        currentText: 'Сьогодні',
+        monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+        'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+        monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+        'Лип','Сер','Вер','Жов','Лис','Гру'],
+        dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
+        dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
+        dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
+        weekHeader: 'Тиж',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['uk']);
+});
\ No newline at end of file
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-vi.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-vi.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-vi.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+    $.datepicker.regional['vi'] = {
+        closeText: 'Đóng',
+        prevText: '&#x3c;Trước',
+        nextText: 'Tiếp&#x3e;',
+        currentText: 'Hôm nay',
+        monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+        'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
+        monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+        'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+        dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+        dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+        dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+        weekHeader: 'Tu',
+        dateFormat: 'dd/mm/yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: false,
+        yearSuffix: ''};
+    $.datepicker.setDefaults($.datepicker.regional['vi']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-zh-CN.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-zh-CN.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-zh-CN.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-CN'] = {
+        closeText: '关闭',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'yy-mm-dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-zh-HK.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-zh-HK.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-zh-HK.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-HK'] = {
+        closeText: '關閉',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'dd-mm-yy',
+        firstDay: 0,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
Index: trunk/include/jquery/i18n/jquery.ui.datepicker-zh-TW.js
===================================================================
--- trunk/include/jquery/i18n/jquery.ui.datepicker-zh-TW.js	(nonexistent)
+++ trunk/include/jquery/i18n/jquery.ui.datepicker-zh-TW.js	(revision 2)
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+    $.datepicker.regional['zh-TW'] = {
+        closeText: '關閉',
+        prevText: '&#x3c;上月',
+        nextText: '下月&#x3e;',
+        currentText: '今天',
+        monthNames: ['一月','二月','三月','四月','五月','六月',
+        '七月','八月','九月','十月','十一月','十二月'],
+        monthNamesShort: ['一','二','三','四','五','六',
+        '七','八','九','十','十一','十二'],
+        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+        dayNamesMin: ['日','一','二','三','四','五','六'],
+        weekHeader: '周',
+        dateFormat: 'yy/mm/dd',
+        firstDay: 1,
+        isRTL: false,
+        showMonthAfterYear: true,
+        yearSuffix: '年'};
+    $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
Index: trunk/include/jquery/images/ui-anim_basic_16x16.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/jquery/images/ui-anim_basic_16x16.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_flat_75_ffffff_40x100.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_flat_75_ffffff_40x100.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_glass_65_ffffff_1x400.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_glass_65_ffffff_1x400.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_glass_75_dadada_1x400.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_glass_75_dadada_1x400.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_glass_95_fef1ec_1x400.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_glass_95_fef1ec_1x400.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-icons_222222_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-icons_222222_256x240.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-icons_2e83ff_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-icons_2e83ff_256x240.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-icons_454545_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-icons_454545_256x240.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-icons_888888_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-icons_888888_256x240.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/images/ui-icons_cd0a0a_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/include/jquery/images/ui-icons_cd0a0a_256x240.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/include/jquery/jquery-3.1.0.js
===================================================================
--- trunk/include/jquery/jquery-3.1.0.js	(nonexistent)
+++ trunk/include/jquery/jquery-3.1.0.js	(revision 2)
@@ -0,0 +1,10074 @@
+/*eslint-disable no-unused-vars*/
+/*!
+ * jQuery JavaScript Library v3.1.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2016-07-07T21:44Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+	function DOMEval( code, doc ) {
+		doc = doc || document;
+
+		var script = doc.createElement( "script" );
+
+		script.text = code;
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+/* global Symbol */
+// Defining this global in .eslintrc would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.1.0",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android <=4.0 only
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// As of jQuery 3.0, isNumeric is limited to
+		// strings and numbers (primitives or objects)
+		// that can be coerced to finite numbers (gh-2662)
+		var type = jQuery.type( obj );
+		return ( type === "number" || type === "string" ) &&
+
+			// parseFloat NaNs numeric-cast false positives ("")
+			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+			// subtraction forces infinities to NaN
+			!isNaN( obj - parseFloat( obj ) );
+	},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+
+		/* eslint-disable no-unused-vars */
+		// See https://github.com/eslint/eslint/issues/6125
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+
+		// Support: Android <=2.3 only (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		DOMEval( code );
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE <=9 - 11, Edge 12 - 13
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android <=4.0 only
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.0
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-01-04
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	disabledAncestor = addCombinator(
+		function( elem ) {
+			return elem.disabled === true;
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rcssescape, fcssescape );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[i] = "#" + nid + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement("fieldset");
+
+	try {
+		return !!fn( el );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+	// Known :disabled false positives:
+	// IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset)
+	// not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Check form elements and option elements for explicit disabling
+		return "label" in elem && elem.disabled === disabled ||
+			"form" in elem && elem.disabled === disabled ||
+
+			// Check non-disabled form elements for fieldset[disabled] ancestors
+			"form" in elem && elem.disabled === false && (
+				// Support: IE6-11+
+				// Ancestry is covered for us
+				elem.isDisabled === disabled ||
+
+				// Otherwise, assume any non-<option> under fieldset[disabled] is disabled
+				/* jshint -W018 */
+				elem.isDisabled !== !disabled &&
+					("label" in elem || !disabledAncestor( elem )) !== disabled
+			);
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( preferredDoc !== document &&
+		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( el ) {
+		el.className = "i";
+		return !el.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( el ) {
+		el.appendChild( document.createComment("") );
+		return !el.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				return m ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( el ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll(":enabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll(":disabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( el ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( (oldCache = uniqueCache[ key ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+	return el.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Support: Android 4.0 only
+			// Strict mode functions invoked without .call/.apply get global-object context
+			resolve.call( undefined, value );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.call( undefined, value );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( jQuery.isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ jQuery.camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( jQuery.camelCase );
+			} else {
+				key = jQuery.camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnotwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? JSON.parse( data ) :
+					data;
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			jQuery.contains( elem.ownerDocument, elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) ),
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE <=9 only
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ?
+				context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, contains, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		// Make a writable jQuery.Event from the native event object
+		var event = jQuery.event.fix( nativeEvent );
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Support: IE <=9
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		//
+		// Support: Firefox <=42
+		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+		if ( delegateCount && cur.nodeType &&
+			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push( { elem: cur, handlers: matches } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: jQuery.isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	/* eslint-disable max-len */
+
+	// See https://github.com/eslint/eslint/issues/3229
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+	/* eslint-enable */
+
+	// Support: IE <=10 - 11, Edge 12 - 13
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+function manipulationTarget( elem, content ) {
+	if ( jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		div.style.cssText =
+			"box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+		div.innerHTML = "";
+		documentElement.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = divStyle.marginLeft === "2px";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		// Support: Android 4.0 - 4.3 only
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.marginRight = "50%";
+		pixelMarginRightVal = divStyle.marginRight === "4px";
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	container.appendChild( div );
+
+	jQuery.extend( support, {
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelMarginRight: function() {
+			computeStyleTests();
+			return pixelMarginRightVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// Support: IE <=9 only
+	// getPropertyValue is only needed for .css('filter') (#12537)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+		// If we already have the right measurement, avoid augmentation
+		4 :
+
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var val,
+		valueIsBorderBox = true,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Support: IE <=11 only
+	// Running getBoundingClientRect on a disconnected node
+	// in IE throws an error.
+	if ( elem.getClientRects().length ) {
+		val = elem.getBoundingClientRect()[ name ];
+	}
+
+	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test( val ) ) {
+			return val;
+		}
+
+		// Check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				style[ name ] = value;
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = extra && getStyles( elem ),
+				subtract = extra && augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				);
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ name ] = value;
+				value = jQuery.css( elem, name );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function raf() {
+	if ( timerId ) {
+		window.requestAnimationFrame( raf );
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 13
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnotwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off or if document is hidden
+	if ( jQuery.fx.off || document.hidden ) {
+		opt.duration = 0;
+
+	} else {
+		opt.duration = typeof opt.duration === "number" ?
+			opt.duration : opt.duration in jQuery.fx.speeds ?
+				jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = window.requestAnimationFrame ?
+			window.requestAnimationFrame( raf ) :
+			window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	if ( window.cancelAnimationFrame ) {
+		window.cancelAnimationFrame( timerId );
+	} else {
+		window.clearInterval( timerId );
+	}
+
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) ||
+						rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							-1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnotwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + getClass( elem ) + " " ).replace( rclass, " " )
+					.indexOf( className ) > -1
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g,
+	rspaces = /[\x20\t\r\n\f]+/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+
+					// Handle most common string cases
+					ret.replace( rreturn, "" ) :
+
+					// Handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = jQuery.isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					} ) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 13
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in uncached url if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rts, "" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( jQuery.isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" ).prop( {
+					charset: s.scriptCharset,
+					src: s.url
+				} ).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var docElem, win, rect, doc,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		rect = elem.getBoundingClientRect();
+
+		// Make sure element is not hidden (display: none)
+		if ( rect.width || rect.height ) {
+			doc = elem.ownerDocument;
+			win = getWindow( doc );
+			docElem = doc.documentElement;
+
+			return {
+				top: rect.top + win.pageYOffset - docElem.clientTop,
+				left: rect.left + win.pageXOffset - docElem.clientLeft
+			};
+		}
+
+		// Return zeros for disconnected and hidden elements (gh-2310)
+		return rect;
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset = {
+				top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+				left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+			};
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	}
+} );
+
+jQuery.parseJSON = JSON.parse;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+return jQuery;
+} );
Index: trunk/include/jquery/jquery-include.js
===================================================================
--- trunk/include/jquery/jquery-include.js	(nonexistent)
+++ trunk/include/jquery/jquery-include.js	(revision 2)
@@ -0,0 +1,114 @@
+(function($){
+/*
+ * includeMany 1.2.2
+ *
+ * Copyright (c) 2009 Arash Karimzadeh (arashkarimzadeh.com)
+ * Licensed under the MIT (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: Dec 03 2009
+ */
+$.chainclude = function(urls,finaly){
+    var onload = function(callback,data){
+                        if(typeof urls.length!='undefined'){
+                            if(urls.length==0)
+                                return $.isFunction(finaly)
+                                            ?finaly(data)
+                                            :null;
+                            urls.shift();
+                            return $.chainclude.load(urls,onload);
+                        }
+                        for(var item in urls){
+                            urls[item](data);
+                            delete urls[item];
+                            var count = 0;
+                            for(var i in urls)
+                                count++;
+                            return (count==0)
+                                        ?$.isFunction(finaly)?finaly(data):null
+                                        :$.chainclude.load(urls,onload);
+                        }
+                    }
+    $.chainclude.load(urls,onload);
+};
+$.chainclude.load = function(urls,onload){
+    if(typeof urls=='object' && typeof urls.length=='undefined')
+        for(var item in urls)
+            return $.include.load(item,onload,urls[item].callback);
+    urls = $.makeArray(urls);
+    $.include.load(urls[0],onload,null);
+};
+$.include = function(urls,finaly){
+    var luid = $.include.luid++;
+    var onload = function(callback,data){
+                        if($.isFunction(callback))
+                            callback(data);
+                        if(--$.include.counter[luid]==0&&$.isFunction(finaly))
+                            finaly();
+                    }
+    if(typeof urls=='object' && typeof urls.length=='undefined'){
+        $.include.counter[luid] = 0;
+        for(var item in urls)
+            $.include.counter[luid]++;
+        return $.each(urls,function(url,callback){$.include.load(url,onload,callback);});
+    }
+    urls = $.makeArray(urls);
+    $.include.counter[luid] = urls.length;
+    $.each(urls,function(){$.include.load(this,onload,null);});
+}
+$.extend(
+    $.include,
+    {
+        luid: 0,
+        counter: [],
+        load: function(url,onload,callback){
+            url = url.toString();
+            if($.include.exist(url))
+                return onload(callback);
+            if(/.css$/.test(url))
+                $.include.loadCSS(url,onload,callback);
+            else if(/.js$/.test(url))
+                $.include.loadJS(url,onload,callback);
+            else
+                $.get(url,function(data){onload(callback,data)});
+        },
+        loadCSS: function(url,onload,callback){
+            var css=document.createElement('link');
+            css.setAttribute('type','text/css');
+            css.setAttribute('rel','stylesheet');
+            css.setAttribute('href',''+url);
+            $('head').get(0).appendChild(css);
+            $.browser.msie ?$.include.IEonload(css,onload,callback) :onload(callback);//other browsers do not support it
+        },
+        loadJS: function(url,onload,callback){
+            var js=document.createElement('script');
+            js.setAttribute('type','text/javascript');
+            js.setAttribute('src',''+url);
+            $.browser.msie
+                ?$.include.IEonload(js,onload,callback)
+                :js.onload = function(){onload(callback)};
+            $('head').get(0).appendChild(js);
+        },
+        IEonload: function(elm,onload,callback){
+            elm.onreadystatechange = 
+                    function(){
+                        if(this.readyState=='loaded'||this.readyState=='complete')
+                            onload(callback);
+                    }
+        },
+        exist: function(url){
+            var fresh = false;
+            $('head script').each(
+                                function(){
+                                    if(/.css$/.test(url)&&this.href==url)
+                                            return fresh=true;
+                                    else if(/.js$/.test(url)&&this.src==url)
+                                            return fresh=true;
+                                }
+                            );
+            return fresh;
+        }
+    }
+);
+//
+})(jQuery);
Index: trunk/include/jquery/jquery-insert.js
===================================================================
--- trunk/include/jquery/jquery-insert.js	(nonexistent)
+++ trunk/include/jquery/jquery-insert.js	(revision 2)
@@ -0,0 +1,74 @@
+/* Insert Script Plugin
+ *
+ *
+ * Copyright (c) 2008 Kevin Martin (http://synarchydesign.com/insert)
+ * Licensed under the GPL license:
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ */
+jQuery.insert = function(file)
+{
+    var data    = [];
+    var data2   = [];
+
+    if (typeof file == 'object')
+    {
+        data = file;
+        file = data.src !== undefined ? data.src : false;
+        file = file === false && data.href !== undefined ? data.href : file;
+        file = file === false ? file2 : false;
+    }
+
+    if (typeof file == 'string' && file.length)
+    {
+        var index    = file.lastIndexOf('.');
+        var index2    = file.replace('\\', '/').lastIndexOf('/') + 1;
+        var ext        = file.substring(index + 1, file.length);
+    }
+
+    switch(ext)
+    {
+        case 'js':
+            data2 = {
+                elm:    'script',
+                type:    'text/javascript',
+                src:    file
+            };
+        break;
+
+        case 'css':
+            data2 = {
+                elm:    'link',
+                rel:    'stylesheet',
+                type:    'text/css',
+                href:    file
+            };
+        break;
+
+        default:
+            data2 = {elm: 'link'};
+        break;
+    }
+
+    data2.id = 'script-' + (typeof file == 'string' && file.length ?
+        file.substring(index2, index) : Math.round(Math.rand() * 100));
+
+    for (var i in data)
+    {
+        data2[i] = data[i];
+    }
+
+    data    = data2;
+    var tag    = document.createElement(data.elm);
+
+    delete data.elm;
+
+    for (i in data)
+    {
+        tag.setAttribute(i, data[i]);
+    }
+
+    jQuery('head').append(tag);
+
+    return jQuery('#' + data.id);
+};
\ No newline at end of file
Index: trunk/include/jquery/jquery-min.js
===================================================================
--- trunk/include/jquery/jquery-min.js	(nonexistent)
+++ trunk/include/jquery/jquery-min.js	(revision 2)
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
Index: trunk/include/jquery/jquery-min132.js
===================================================================
--- trunk/include/jquery/jquery-min132.js	(nonexistent)
+++ trunk/include/jquery/jquery-min132.js	(revision 2)
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
Index: trunk/include/jquery/jquery-min161.js
===================================================================
--- trunk/include/jquery/jquery-min161.js	(nonexistent)
+++ trunk/include/jquery/jquery-min161.js	(revision 2)
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
+ */
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
Index: trunk/include/jquery/jquery-min164.js
===================================================================
--- trunk/include/jquery/jquery-min164.js	(nonexistent)
+++ trunk/include/jquery/jquery-min164.js	(revision 2)
@@ -0,0 +1,4 @@
+/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
+(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
+t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
+(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
Index: trunk/include/jquery/jquery-min170.js
===================================================================
--- trunk/include/jquery/jquery-min170.js	(nonexistent)
+++ trunk/include/jquery/jquery-min170.js	(revision 2)
@@ -0,0 +1,4 @@
+/*! jQuery v1.7 jquery.com | jquery.org/license */
+(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&&
+(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/<tbody/i,bc=/<|&#?\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\s*(?:[^=]|=\s*.checked.)/i,bh=/\/(java|ecma)script/i,bi=/^\s*<!(?:\[CDATA\[|\-\-)/,bj={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"
+,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\([^)]*\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\d+(?:px)?$/i,bw=/^-?\d/,bx=/^([\-+])=([\-+.\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
Index: trunk/include/jquery/jquery-min_v3_9_1.js
===================================================================
--- trunk/include/jquery/jquery-min_v3_9_1.js	(nonexistent)
+++ trunk/include/jquery/jquery-min_v3_9_1.js	(revision 2)
@@ -0,0 +1,4 @@
+/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,
+r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==va()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===va()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&r.nodeName(this,"input"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;l<i;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;d<e;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Ma(a,b,f),(d<0||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)})},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);f<g;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;d<e;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);
+if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){if(c)return c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r});
Index: trunk/include/jquery/jquery-pngFix.js
===================================================================
--- trunk/include/jquery/jquery-pngFix.js	(nonexistent)
+++ trunk/include/jquery/jquery-pngFix.js	(revision 2)
@@ -0,0 +1,11 @@
+/**
+ * --------------------------------------------------------------------
+ * jQuery-Plugin "pngFix"
+ * Version: 1.1, 11.09.2007
+ * by Andreas Eberhard, andreas.eberhard@gmail.com
+ *                      http://jquery.andreaseberhard.de/
+ *
+ * Copyright (c) 2007 Andreas Eberhard
+ * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
+ */
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(s($){3.1s.1k=s(j){j=3.1a({12:\'1m.1j\'},j);8 k=(n.P=="r 10 Z"&&U(n.v)==4&&n.v.E("14 5.5")!=-1);8 l=(n.P=="r 10 Z"&&U(n.v)==4&&n.v.E("14 6.0")!=-1);o(3.17.16&&(k||l)){3(2).L("1r[@m$=.M]").z(s(){3(2).7(\'q\',3(2).q());3(2).7(\'p\',3(2).p());8 a=\'\';8 b=\'\';8 c=(3(2).7(\'K\'))?\'K="\'+3(2).7(\'K\')+\'" \':\'\';8 d=(3(2).7(\'A\'))?\'A="\'+3(2).7(\'A\')+\'" \':\'\';8 e=(3(2).7(\'C\'))?\'C="\'+3(2).7(\'C\')+\'" \':\'\';8 f=(3(2).7(\'B\'))?\'B="\'+3(2).7(\'B\')+\'" \':\'\';8 g=(3(2).7(\'R\'))?\'1d:\'+3(2).7(\'R\')+\';\':\'\';8 h=(3(2).1c().7(\'1b\'))?\'19:18;\':\'\';o(2.9.y){a+=\'y:\'+2.9.y+\';\';2.9.y=\'\'}o(2.9.t){a+=\'t:\'+2.9.t+\';\';2.9.t=\'\'}o(2.9.w){a+=\'w:\'+2.9.w+\';\';2.9.w=\'\'}8 i=(2.9.15);b+=\'<x \'+c+d+e+f;b+=\'9="13:11;1q-1p:1o-1n;O:W-V;N:1l;\'+g+h;b+=\'q:\'+3(2).q()+\'u;\'+\'p:\'+3(2).p()+\'u;\';b+=\'J:I:H.r.G\'+\'(m=\\\'\'+3(2).7(\'m\')+\'\\\', D=\\\'F\\\');\';b+=i+\'"></x>\';o(a!=\'\'){b=\'<x 9="13:11;O:W-V;\'+a+h+\'q:\'+3(2).q()+\'u;\'+\'p:\'+3(2).p()+\'u;\'+\'">\'+b+\'</x>\'}3(2).1i();3(2).1h(b)});3(2).L("*").z(s(){8 a=3(2).T(\'N-S\');o(a.E(".M")!=-1){8 b=a.X(\'1g("\')[1].X(\'")\')[0];3(2).T(\'N-S\',\'1f\');3(2).Q(0).Y.J="I:H.r.G(m=\'"+b+"\',D=\'F\')"}});3(2).L("1e[@m$=.M]").z(s(){8 a=3(2).7(\'m\');3(2).Q(0).Y.J=\'I:H.r.G\'+\'(m=\\\'\'+a+\'\\\', D=\\\'F\\\');\';3(2).7(\'m\',j.12)})}1t 3}})(3);',62,92,'||this|jQuery||||attr|var|style|||||||||||||src|navigator|if|height|width|Microsoft|function|padding|px|appVersion|margin|span|border|each|class|alt|title|sizingMethod|indexOf|scale|AlphaImageLoader|DXImageTransform|progid|filter|id|find|png|background|display|appName|get|align|image|css|parseInt|block|inline|split|runtimeStyle|Explorer|Internet|relative|blankgif|position|MSIE|cssText|msie|browser|hand|cursor|extend|href|parent|float|input|none|url|after|hide|gif|pngFix|transparent|blank|line|pre|space|white|img|fn|return'.split('|'),0,{}))
\ No newline at end of file
Index: trunk/include/jquery/jquery-ui-min.js
===================================================================
--- trunk/include/jquery/jquery-ui-min.js	(nonexistent)
+++ trunk/include/jquery/jquery-ui-min.js	(revision 2)
@@ -0,0 +1,356 @@
+/*!
+ * jQuery UI 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.17",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
+ * jQuery UI Widget 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *    jquery.ui.widget.js
+ */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
+ * jQuery UI Position 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1];return this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&jQuery.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);/*
+ * jQuery UI Draggable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.17"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
+ * jQuery UI Droppable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.draggable.js
+ */(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance)){e=!0;return!1}});if(e)return!1;if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d));return this.element}return!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.17"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g<d.length;g++){if(d[g].options.disabled||b&&!d[g].accept.call(d[g].element[0],b.currentItem||b.element))continue;for(var h=0;h<f.length;h++)if(f[h]==d[g].element[0]){d[g].proportions.height=0;continue droppablesLoop}d[g].visible=d[g].element.css("display")!="none";if(!d[g].visible)continue;e=="mousedown"&&d[g]._activate.call(d[g],c),d[g].offset=d[g].element.offset(),d[g].proportions={width:d[g].element[0].offsetWidth,height:d[g].element[0].offsetHeight}}},drop:function(b,c){var d=!1;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){!this.options||(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c)))});return d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))}})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);/*
+ * jQuery UI Resizable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"}),this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),a.browser.opera&&/relative/.test(f.css("position"))&&f.css({position:"relative",top:"auto",left:"auto"}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.17"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10),position:b.css("position")})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,e){a(b).each(function(){var b=a(this),f=a(this).data("resizable-alsoresize"),g={},i=e&&e.length?e:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(i,function(a,b){var c=(f[b]||0)+(h[b]||0);c&&c>=0&&(g[b]=c||null)}),a.browser.opera&&/relative/.test(b.css("position"))&&(d._revertToRelativePosition=!0,b.css({position:"absolute",top:"auto",left:"auto"})),b.css(g)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};d._revertToRelativePosition&&(d._revertToRelativePosition=!1,typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)),a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);/*
+ * jQuery UI Selectable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}});return!1}},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove();return!1}}),a.extend(a.ui.selectable,{version:"1.8.17"})})(jQuery);/*
+ * jQuery UI Sortable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();if(!e)return!1;return this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1)},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i])}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.17"})})(jQuery);/*
+ * jQuery UI Accordion 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.17",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);/*
+ * jQuery UI Autocomplete 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ *    jquery.ui.position.js
+ */(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",autocompleteRequest:++c,success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==!1)return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this.response)},_response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close(),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){if(b.length&&b[0].label&&b[0].value)return b;return a.map(b,function(b){if(typeof b=="string")return{label:b,value:b};return a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);/*
+ * jQuery UI Button 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ */(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form}));return e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"&&(this.options.disabled=this.element.propAttr("disabled")),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.element.is(":disabled")&&(h.disabled=!0),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){h.disabled||(a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active"))}).bind("mouseleave.button",function(){h.disabled||a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){f||b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){h.disabled||(f=!1,d=a.pageX,e=a.pageY)}).bind("mouseup.button",function(a){!h.disabled&&(d!==a.pageX||e!==a.pageY)&&(f=!0)})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);b==="disabled"?c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1):this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);/*
+ * jQuery UI Dialog 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ *  jquery.ui.button.js
+ *    jquery.ui.draggable.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.position.js
+ *    jquery.ui.resizable.js
+ */(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||"&#160;",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||"&#160;"))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.17",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b<c?a(window).height()+"px":b+"px"}return a(document).height()+"px"},width:function(){var b,c;if(a.browser.msie){b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return b<c?a(window).width()+"px":b+"px"}return a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);/*
+ * jQuery UI Slider 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.mouse.js
+ *    jquery.ui.widget.js
+ */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=!0,f=a(this).data("index.ui-slider-handle"),g,h,i,j;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:e=!1;if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),g=b._start(d,f);if(g===!1)return}}j=b.options.step,b.options.values&&b.options.values.length?h=i=b.values(f):h=i=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:i=b._valueMin();break;case a.ui.keyCode.END:i=b._valueMax();break;case a.ui.keyCode.PAGE_UP:i=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:i=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(h===b._valueMax())return;i=b._trimAlignValue(h+j);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(h===b._valueMin())return;i=b._trimAlignValue(h-j)}b._slide(d,f,i);return e}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.17"})})(jQuery);/*
+ * jQuery UI Tabs 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ *    jquery.ui.widget.js
+ */(function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.17"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){t=d.selected,e()}:function(a){a.clientX&&c.rotate(null)});a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate);return this}})})(jQuery);/*
+ * jQuery UI Datepicker 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *    jquery.ui.core.js
+ */(function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}$.extend($.ui,{datepicker:{version:"1.8.17"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);c&&!c.inline&&this._setDateFromField(c,b);return c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;c&&s++;return c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;r+=f[0].length;return parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase()){f=c[0],r+=d.length;return!1}});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;c&&m++;return c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;c&&e++;return c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0));return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', -"+i+", 'M');\""+' title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', +"+i+", 'M');\""+' title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+a.id+"');\""+">"+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+a.id+"',"+Y.getMonth()+","+Y.getFullYear()+', this);return false;"')+">"+(bb&&!G?"&#xa0;":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this
+._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" "+">";for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" "+">";for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?"&#xa0;":"")+m),l+="</div>";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;e=d&&e>d?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.17",window["DP_jQuery_"+dpuuid]=$})(jQuery);/*
+ * jQuery UI Progressbar 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ *   jquery.ui.core.js
+ *   jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.17"})})(jQuery);/*
+ * jQuery UI Effects 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */jQuery.effects||function(a,b){function l(b){if(!b||typeof b=="number"||a.fx.speeds[b])return!0;if(typeof b=="string"&&!a.effects[b])return!0;return!1}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete;return[b,c,d,e]}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function c(b){var c;if(b&&b.constructor==Array&&b.length==3)return b;if(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];if(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))return[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55];if(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];if(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];if(c=/rgba\(0, 0, 0, 0\)/.exec(b))return e.transparent;return e[a.trim(b).toLowerCase()]}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){a.isFunction(d)&&(e=d,d=null);return this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class");a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.17",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){b=="toggle"&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);if(b<1)return-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c;return h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);if((c/=f/2)<1)return e/2*c*c*(((g*=1.525)+1)*c-g)+d;return e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){if(c<f/2)return a.easing.easeInBounce(b,c*2,0,e,f)*.5+d;return a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery);/*
+ * jQuery UI Effects Blind 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
+ * jQuery UI Effects Bounce 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Clip 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Drop 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Explode 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);/*
+ * jQuery UI Effects Fade 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Fold 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
+ * jQuery UI Effects Highlight 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Pulsate 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&&times--;for(var e=0;e<times;e++)c.animate({opacity:animateTo},duration,b.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,b.options.easing,function(){animateTo==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Scale 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){child=a(this),k&&a.effects.save(child,f);var c={height:child.height(),width:child.width()};child.from={height:c.height*q.from.y,width:c.width*q.from.x},child.to={height:c.height*q.to.y,width:c.width*q.to.x},q.from.y!=q.to.y&&(child.from=a.effects.setTransition(child,h,q.from.y,child.from),child.to=a.effects.setTransition(child,h,q.to.y,child.to)),q.from.x!=q.to.x&&(child.from=a.effects.setTransition(child,i,q.from.x,child.from),child.to=a.effects.setTransition(child,i,q.to.x,child.to)),child.css(child.from),child.animate(child.to,b.duration,b.options.easing,function(){k&&a.effects.restore(child,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Shake 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Slide 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Transfer 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ *    jquery.effects.core.js
+ */(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);
\ No newline at end of file
Index: trunk/include/jquery/jquery-ui.css
===================================================================
--- trunk/include/jquery/jquery-ui.css	(nonexistent)
+++ trunk/include/jquery/jquery-ui.css	(revision 2)
@@ -0,0 +1,565 @@
+/*
+ * jQuery UI CSS Framework 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Resizable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }    
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.17
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+    list-style:none;
+    padding: 2px;
+    margin: 0;
+    display:block;
+    float: left;
+}
+.ui-menu .ui-menu {
+    margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+    margin:0;
+    padding: 0;
+    zoom: 1;
+    float: left;
+    clear: left;
+    width: 100%;
+}
+.ui-menu .ui-menu-item a {
+    text-decoration:none;
+    display:block;
+    padding:.2em .4em;
+    line-height:1.5;
+    zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+    font-weight: normal;
+    margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
Index: trunk/include/jquery/jquery_theme.js
===================================================================
--- trunk/include/jquery/jquery_theme.js	(nonexistent)
+++ trunk/include/jquery/jquery_theme.js	(revision 2)
@@ -0,0 +1,11 @@
+var JQUERY_THEME = WB_URL+'/include/jquery';
+
+$(document).ready(function() {
+        if (typeof LoadOnFly !=="undefined"){
+            LoadOnFly( 'head', JQUERY_THEME+'/jquery-ui.css' );
+        } else {
+            $.insert(JQUERY_THEME+'/jquery-ui.css' );
+        }
+        $.include( JQUERY_THEME+'/jquery-ui-min.js');
+//        LoadOnFly( 'body', JQUERY_THEME+'/jquery-ui-min.js' );
+});
Index: trunk/include/jquery/modernizr.custom.48863.js
===================================================================
--- trunk/include/jquery/modernizr.custom.48863.js	(nonexistent)
+++ trunk/include/jquery/modernizr.custom.48863.js	(revision 2)
@@ -0,0 +1,847 @@
+/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ */
+;
+
+
+
+window.Modernizr = (function( window, document, undefined ) {
+
+    var version = '2.8.3',
+
+    Modernizr = {},
+
+    enableClasses = true,
+
+    docElement = document.documentElement,
+
+    mod = 'modernizr',
+    modElem = document.createElement(mod),
+    mStyle = modElem.style,
+
+    inputElem  = document.createElement('input')  ,
+
+    smile = ':)',
+
+    toString = {}.toString,
+
+    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
+
+
+
+    omPrefixes = 'Webkit Moz O ms',
+
+    cssomPrefixes = omPrefixes.split(' '),
+
+    domPrefixes = omPrefixes.toLowerCase().split(' '),
+
+    ns = {'svg': 'http://www.w3.org/2000/svg'},
+
+    tests = {},
+    inputs = {},
+    attrs = {},
+
+    classes = [],
+
+    slice = classes.slice,
+
+    featureName, 
+
+
+    injectElementWithStyles = function( rule, callback, nodes, testnames ) {
+
+      var style, ret, node, docOverflow,
+          div = document.createElement('div'),
+                body = document.body,
+                fakeBody = body || document.createElement('body');
+
+      if ( parseInt(nodes, 10) ) {
+                      while ( nodes-- ) {
+              node = document.createElement('div');
+              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
+              div.appendChild(node);
+          }
+      }
+
+                style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
+      div.id = mod;
+          (body ? div : fakeBody).innerHTML += style;
+      fakeBody.appendChild(div);
+      if ( !body ) {
+                fakeBody.style.background = '';
+                fakeBody.style.overflow = 'hidden';
+          docOverflow = docElement.style.overflow;
+          docElement.style.overflow = 'hidden';
+          docElement.appendChild(fakeBody);
+      }
+
+      ret = callback(div, rule);
+        if ( !body ) {
+          fakeBody.parentNode.removeChild(fakeBody);
+          docElement.style.overflow = docOverflow;
+      } else {
+          div.parentNode.removeChild(div);
+      }
+
+      return !!ret;
+
+    },
+
+    testMediaQuery = function( mq ) {
+
+      var matchMedia = window.matchMedia || window.msMatchMedia;
+      if ( matchMedia ) {
+        return matchMedia(mq) && matchMedia(mq).matches || false;
+      }
+
+      var bool;
+
+      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
+        bool = (window.getComputedStyle ?
+                  getComputedStyle(node, null) :
+                  node.currentStyle)['position'] == 'absolute';
+      });
+
+      return bool;
+
+     },
+ 
+
+    isEventSupported = (function() {
+
+      var TAGNAMES = {
+        'select': 'input', 'change': 'input',
+        'submit': 'form', 'reset': 'form',
+        'error': 'img', 'load': 'img', 'abort': 'img'
+      };
+
+      function isEventSupported( eventName, element ) {
+
+        element = element || document.createElement(TAGNAMES[eventName] || 'div');
+        eventName = 'on' + eventName;
+
+            var isSupported = eventName in element;
+
+        if ( !isSupported ) {
+                if ( !element.setAttribute ) {
+            element = document.createElement('div');
+          }
+          if ( element.setAttribute && element.removeAttribute ) {
+            element.setAttribute(eventName, '');
+            isSupported = is(element[eventName], 'function');
+
+                    if ( !is(element[eventName], 'undefined') ) {
+              element[eventName] = undefined;
+            }
+            element.removeAttribute(eventName);
+          }
+        }
+
+        element = null;
+        return isSupported;
+      }
+      return isEventSupported;
+    })(),
+
+
+    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
+
+    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
+      hasOwnProp = function (object, property) {
+        return _hasOwnProperty.call(object, property);
+      };
+    }
+    else {
+      hasOwnProp = function (object, property) { 
+        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
+      };
+    }
+
+
+    if (!Function.prototype.bind) {
+      Function.prototype.bind = function bind(that) {
+
+        var target = this;
+
+        if (typeof target != "function") {
+            throw new TypeError();
+        }
+
+        var args = slice.call(arguments, 1),
+            bound = function () {
+
+            if (this instanceof bound) {
+
+              var F = function(){};
+              F.prototype = target.prototype;
+              var self = new F();
+
+              var result = target.apply(
+                  self,
+                  args.concat(slice.call(arguments))
+              );
+              if (Object(result) === result) {
+                  return result;
+              }
+              return self;
+
+            } else {
+
+              return target.apply(
+                  that,
+                  args.concat(slice.call(arguments))
+              );
+
+            }
+
+        };
+
+        return bound;
+      };
+    }
+
+    function setCss( str ) {
+        mStyle.cssText = str;
+    }
+
+    function setCssAll( str1, str2 ) {
+        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
+    }
+
+    function is( obj, type ) {
+        return typeof obj === type;
+    }
+
+    function contains( str, substr ) {
+        return !!~('' + str).indexOf(substr);
+    }
+
+    function testProps( props, prefixed ) {
+        for ( var i in props ) {
+            var prop = props[i];
+            if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
+                return prefixed == 'pfx' ? prop : true;
+            }
+        }
+        return false;
+    }
+
+    function testDOMProps( props, obj, elem ) {
+        for ( var i in props ) {
+            var item = obj[props[i]];
+            if ( item !== undefined) {
+
+                            if (elem === false) return props[i];
+
+                            if (is(item, 'function')){
+                                return item.bind(elem || obj);
+                }
+
+                            return item;
+            }
+        }
+        return false;
+    }
+
+    function testPropsAll( prop, prefixed, elem ) {
+
+        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),
+            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+            if(is(prefixed, "string") || is(prefixed, "undefined")) {
+          return testProps(props, prefixed);
+
+            } else {
+          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
+          return testDOMProps(props, prefixed, elem);
+        }
+    }    tests['flexbox'] = function() {
+      return testPropsAll('flexWrap');
+    };    tests['canvas'] = function() {
+        var elem = document.createElement('canvas');
+        return !!(elem.getContext && elem.getContext('2d'));
+    };
+
+    tests['canvastext'] = function() {
+        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
+    };
+
+
+
+    tests['webgl'] = function() {
+        return !!window.WebGLRenderingContext;
+    };
+
+
+    tests['touch'] = function() {
+        var bool;
+
+        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
+          bool = true;
+        } else {
+          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
+            bool = node.offsetTop === 9;
+          });
+        }
+
+        return bool;
+    };
+
+
+
+    tests['geolocation'] = function() {
+        return 'geolocation' in navigator;
+    };
+
+
+    tests['postmessage'] = function() {
+      return !!window.postMessage;
+    };
+
+
+    tests['websqldatabase'] = function() {
+      return !!window.openDatabase;
+    };
+
+    tests['indexedDB'] = function() {
+      return !!testPropsAll("indexedDB", window);
+    };
+
+    tests['hashchange'] = function() {
+      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
+    };
+
+    tests['history'] = function() {
+      return !!(window.history && history.pushState);
+    };
+
+    tests['draganddrop'] = function() {
+        var div = document.createElement('div');
+        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
+    };
+
+    tests['websockets'] = function() {
+        return 'WebSocket' in window || 'MozWebSocket' in window;
+    };
+
+
+    tests['rgba'] = function() {
+        setCss('background-color:rgba(150,255,150,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba');
+    };
+
+    tests['hsla'] = function() {
+            setCss('background-color:hsla(120,40%,100%,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
+    };
+
+    tests['multiplebgs'] = function() {
+                setCss('background:url(https://),url(https://),red url(https://)');
+
+            return (/(url\s*\(.*?){3}/).test(mStyle.background);
+    };    tests['backgroundsize'] = function() {
+        return testPropsAll('backgroundSize');
+    };
+
+    tests['borderimage'] = function() {
+        return testPropsAll('borderImage');
+    };
+
+
+
+    tests['borderradius'] = function() {
+        return testPropsAll('borderRadius');
+    };
+
+    tests['boxshadow'] = function() {
+        return testPropsAll('boxShadow');
+    };
+
+    tests['textshadow'] = function() {
+        return document.createElement('div').style.textShadow === '';
+    };
+
+
+    tests['opacity'] = function() {
+                setCssAll('opacity:.55');
+
+                    return (/^0.55$/).test(mStyle.opacity);
+    };
+
+
+    tests['cssanimations'] = function() {
+        return testPropsAll('animationName');
+    };
+
+
+    tests['csscolumns'] = function() {
+        return testPropsAll('columnCount');
+    };
+
+
+    tests['cssgradients'] = function() {
+        var str1 = 'background-image:',
+            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
+            str3 = 'linear-gradient(left top,#9f9, white);';
+
+        setCss(
+                       (str1 + '-webkit- '.split(' ').join(str2 + str1) +
+                       prefixes.join(str3 + str1)).slice(0, -str1.length)
+        );
+
+        return contains(mStyle.backgroundImage, 'gradient');
+    };
+
+
+    tests['cssreflections'] = function() {
+        return testPropsAll('boxReflect');
+    };
+
+
+    tests['csstransforms'] = function() {
+        return !!testPropsAll('transform');
+    };
+
+
+    tests['csstransforms3d'] = function() {
+
+        var ret = !!testPropsAll('perspective');
+
+                        if ( ret && 'webkitPerspective' in docElement.style ) {
+
+                      injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
+            ret = node.offsetLeft === 9 && node.offsetHeight === 3;
+          });
+        }
+        return ret;
+    };
+
+
+    tests['csstransitions'] = function() {
+        return testPropsAll('transition');
+    };
+
+
+
+    tests['fontface'] = function() {
+        var bool;
+
+        injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
+          var style = document.getElementById('smodernizr'),
+              sheet = style.sheet || style.styleSheet,
+              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
+
+          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
+        });
+
+        return bool;
+    };
+
+    tests['generatedcontent'] = function() {
+        var bool;
+
+        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
+          bool = node.offsetHeight >= 3;
+        });
+
+        return bool;
+    };
+    tests['video'] = function() {
+        var elem = document.createElement('video'),
+            bool = false;
+
+            try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"')      .replace(/^no$/,'');
+
+                            bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
+
+                bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
+            }
+
+        } catch(e) { }
+
+        return bool;
+    };
+
+    tests['audio'] = function() {
+        var elem = document.createElement('audio'),
+            bool = false;
+
+        try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
+                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');
+
+                                                    bool.wav  = elem.canPlayType('audio/wav; codecs="1"')     .replace(/^no$/,'');
+                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||
+                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');
+            }
+        } catch(e) { }
+
+        return bool;
+    };
+
+
+    tests['localstorage'] = function() {
+        try {
+            localStorage.setItem(mod, mod);
+            localStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+    tests['sessionstorage'] = function() {
+        try {
+            sessionStorage.setItem(mod, mod);
+            sessionStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+
+    tests['webworkers'] = function() {
+        return !!window.Worker;
+    };
+
+
+    tests['applicationcache'] = function() {
+        return !!window.applicationCache;
+    };
+
+
+    tests['svg'] = function() {
+        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
+    };
+
+    tests['inlinesvg'] = function() {
+      var div = document.createElement('div');
+      div.innerHTML = '<svg/>';
+      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
+    };
+
+    tests['smil'] = function() {
+        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
+    };
+
+
+    tests['svgclippaths'] = function() {
+        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
+    };
+
+    function webforms() {
+                                            Modernizr['input'] = (function( props ) {
+            for ( var i = 0, len = props.length; i < len; i++ ) {
+                attrs[ props[i] ] = !!(props[i] in inputElem);
+            }
+            if (attrs.list){
+                                  attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
+            }
+            return attrs;
+        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
+                            Modernizr['inputtypes'] = (function(props) {
+
+            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
+
+                inputElem.setAttribute('type', inputElemType = props[i]);
+                bool = inputElem.type !== 'text';
+
+                                                    if ( bool ) {
+
+                    inputElem.value         = smile;
+                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
+
+                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
+
+                      docElement.appendChild(inputElem);
+                      defaultView = document.defaultView;
+
+                                        bool =  defaultView.getComputedStyle &&
+                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
+                                                                                  (inputElem.offsetHeight !== 0);
+
+                      docElement.removeChild(inputElem);
+
+                    } else if ( /^(search|tel)$/.test(inputElemType) ){
+                                                                                    } else if ( /^(url|email)$/.test(inputElemType) ) {
+                                        bool = inputElem.checkValidity && inputElem.checkValidity() === false;
+
+                    } else {
+                                        bool = inputElem.value != smile;
+                    }
+                }
+
+                inputs[ props[i] ] = !!bool;
+            }
+            return inputs;
+        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
+        }
+    for ( var feature in tests ) {
+        if ( hasOwnProp(tests, feature) ) {
+                                    featureName  = feature.toLowerCase();
+            Modernizr[featureName] = tests[feature]();
+
+            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
+        }
+    }
+
+    Modernizr.input || webforms();
+
+
+     Modernizr.addTest = function ( feature, test ) {
+       if ( typeof feature == 'object' ) {
+         for ( var key in feature ) {
+           if ( hasOwnProp( feature, key ) ) {
+             Modernizr.addTest( key, feature[ key ] );
+           }
+         }
+       } else {
+
+         feature = feature.toLowerCase();
+
+         if ( Modernizr[feature] !== undefined ) {
+                                              return Modernizr;
+         }
+
+         test = typeof test == 'function' ? test() : test;
+
+         if (typeof enableClasses !== "undefined" && enableClasses) {
+           docElement.className += ' ' + (test ? '' : 'no-') + feature;
+         }
+         Modernizr[feature] = test;
+
+       }
+
+       return Modernizr; 
+     };
+
+
+    setCss('');
+    modElem = inputElem = null;
+
+    ;(function(window, document) {
+                var version = '3.7.0';
+
+            var options = window.html5 || {};
+
+            var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+            var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+            var supportsHtml5Styles;
+
+            var expando = '_html5shiv';
+
+            var expanID = 0;
+
+            var expandoData = {};
+
+            var supportsUnknownElements;
+
+        (function() {
+          try {
+            var a = document.createElement('a');
+            a.innerHTML = '<xyz></xyz>';
+                    supportsHtml5Styles = ('hidden' in a);
+
+            supportsUnknownElements = a.childNodes.length == 1 || (function() {
+                        (document.createElement)('a');
+              var frag = document.createDocumentFragment();
+              return (
+                typeof frag.cloneNode == 'undefined' ||
+                typeof frag.createDocumentFragment == 'undefined' ||
+                typeof frag.createElement == 'undefined'
+              );
+            }());
+          } catch(e) {
+                    supportsHtml5Styles = true;
+            supportsUnknownElements = true;
+          }
+
+        }());
+
+            function addStyleSheet(ownerDocument, cssText) {
+          var p = ownerDocument.createElement('p'),
+          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+          p.innerHTML = 'x<style>' + cssText + '</style>';
+          return parent.insertBefore(p.lastChild, parent.firstChild);
+        }
+
+            function getElements() {
+          var elements = html5.elements;
+          return typeof elements == 'string' ? elements.split(' ') : elements;
+        }
+
+            function getExpandoData(ownerDocument) {
+          var data = expandoData[ownerDocument[expando]];
+          if (!data) {
+            data = {};
+            expanID++;
+            ownerDocument[expando] = expanID;
+            expandoData[expanID] = data;
+          }
+          return data;
+        }
+
+            function createElement(nodeName, ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createElement(nodeName);
+          }
+          if (!data) {
+            data = getExpandoData(ownerDocument);
+          }
+          var node;
+
+          if (data.cache[nodeName]) {
+            node = data.cache[nodeName].cloneNode();
+          } else if (saveClones.test(nodeName)) {
+            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+          } else {
+            node = data.createElem(nodeName);
+          }
+
+                                                    return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+        }
+
+            function createDocumentFragment(ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createDocumentFragment();
+          }
+          data = data || getExpandoData(ownerDocument);
+          var clone = data.frag.cloneNode(),
+          i = 0,
+          elems = getElements(),
+          l = elems.length;
+          for(;i<l;i++){
+            clone.createElement(elems[i]);
+          }
+          return clone;
+        }
+
+            function shivMethods(ownerDocument, data) {
+          if (!data.cache) {
+            data.cache = {};
+            data.createElem = ownerDocument.createElement;
+            data.createFrag = ownerDocument.createDocumentFragment;
+            data.frag = data.createFrag();
+          }
+
+
+          ownerDocument.createElement = function(nodeName) {
+                    if (!html5.shivMethods) {
+              return data.createElem(nodeName);
+            }
+            return createElement(nodeName, ownerDocument, data);
+          };
+
+          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+                                                          'var n=f.cloneNode(),c=n.createElement;' +
+                                                          'h.shivMethods&&(' +
+                                                                                                                getElements().join().replace(/[\w\-]+/g, function(nodeName) {
+            data.createElem(nodeName);
+            data.frag.createElement(nodeName);
+            return 'c("' + nodeName + '")';
+          }) +
+            ');return n}'
+                                                         )(html5, data.frag);
+        }
+
+            function shivDocument(ownerDocument) {
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          var data = getExpandoData(ownerDocument);
+
+          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+            data.hasCSS = !!addStyleSheet(ownerDocument,
+                                                                                'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+                                                                                    'mark{background:#FF0;color:#000}' +
+                                                                                    'template{display:none}'
+                                         );
+          }
+          if (!supportsUnknownElements) {
+            shivMethods(ownerDocument, data);
+          }
+          return ownerDocument;
+        }
+
+            var html5 = {
+
+                'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
+
+                'version': version,
+
+                'shivCSS': (options.shivCSS !== false),
+
+                'supportsUnknownElements': supportsUnknownElements,
+
+                'shivMethods': (options.shivMethods !== false),
+
+                'type': 'default',
+
+                'shivDocument': shivDocument,
+
+                createElement: createElement,
+
+                createDocumentFragment: createDocumentFragment
+        };
+
+            window.html5 = html5;
+
+            shivDocument(document);
+
+    }(this, document));
+
+    Modernizr._version      = version;
+
+    Modernizr._prefixes     = prefixes;
+    Modernizr._domPrefixes  = domPrefixes;
+    Modernizr._cssomPrefixes  = cssomPrefixes;
+
+    Modernizr.mq            = testMediaQuery;
+
+    Modernizr.hasEvent      = isEventSupported;
+
+    Modernizr.testProp      = function(prop){
+        return testProps([prop]);
+    };
+
+    Modernizr.testAllProps  = testPropsAll;
+
+
+    Modernizr.testStyles    = injectElementWithStyles;
+    Modernizr.prefixed      = function(prop, obj, elem){
+      if(!obj) {
+        return testPropsAll(prop, 'pfx');
+      } else {
+            return testPropsAll(prop, obj, elem);
+      }
+    };
+
+
+    docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
+
+                                                    (enableClasses ? ' js ' + classes.join(' ') : '');
+
+    return Modernizr;
+
+})(this, this.document);
+/*yepnope1.5.4|WTFPL*/
+(function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}})(this,document);
+Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0));};
+;
\ No newline at end of file
Index: trunk/include/jquery/modernizr.custom.67629.js
===================================================================
--- trunk/include/jquery/modernizr.custom.67629.js	(nonexistent)
+++ trunk/include/jquery/modernizr.custom.67629.js	(revision 2)
@@ -0,0 +1,828 @@
+/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ */
+;
+
+
+
+window.Modernizr = (function( window, document, undefined ) {
+
+    var version = '2.8.3',
+
+    Modernizr = {},
+
+    enableClasses = true,
+
+    docElement = document.documentElement,
+
+    mod = 'modernizr',
+    modElem = document.createElement(mod),
+    mStyle = modElem.style,
+
+    inputElem  = document.createElement('input')  ,
+
+    smile = ':)',
+
+    toString = {}.toString,
+
+    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
+
+
+
+    omPrefixes = 'Webkit Moz O ms',
+
+    cssomPrefixes = omPrefixes.split(' '),
+
+    domPrefixes = omPrefixes.toLowerCase().split(' '),
+
+    ns = {'svg': 'http://www.w3.org/2000/svg'},
+
+    tests = {},
+    inputs = {},
+    attrs = {},
+
+    classes = [],
+
+    slice = classes.slice,
+
+    featureName, 
+
+
+    injectElementWithStyles = function( rule, callback, nodes, testnames ) {
+
+      var style, ret, node, docOverflow,
+          div = document.createElement('div'),
+                body = document.body,
+                fakeBody = body || document.createElement('body');
+
+      if ( parseInt(nodes, 10) ) {
+                      while ( nodes-- ) {
+              node = document.createElement('div');
+              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
+              div.appendChild(node);
+          }
+      }
+
+                style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
+      div.id = mod;
+          (body ? div : fakeBody).innerHTML += style;
+      fakeBody.appendChild(div);
+      if ( !body ) {
+                fakeBody.style.background = '';
+                fakeBody.style.overflow = 'hidden';
+          docOverflow = docElement.style.overflow;
+          docElement.style.overflow = 'hidden';
+          docElement.appendChild(fakeBody);
+      }
+
+      ret = callback(div, rule);
+        if ( !body ) {
+          fakeBody.parentNode.removeChild(fakeBody);
+          docElement.style.overflow = docOverflow;
+      } else {
+          div.parentNode.removeChild(div);
+      }
+
+      return !!ret;
+
+    },
+
+
+
+    isEventSupported = (function() {
+
+      var TAGNAMES = {
+        'select': 'input', 'change': 'input',
+        'submit': 'form', 'reset': 'form',
+        'error': 'img', 'load': 'img', 'abort': 'img'
+      };
+
+      function isEventSupported( eventName, element ) {
+
+        element = element || document.createElement(TAGNAMES[eventName] || 'div');
+        eventName = 'on' + eventName;
+
+            var isSupported = eventName in element;
+
+        if ( !isSupported ) {
+                if ( !element.setAttribute ) {
+            element = document.createElement('div');
+          }
+          if ( element.setAttribute && element.removeAttribute ) {
+            element.setAttribute(eventName, '');
+            isSupported = is(element[eventName], 'function');
+
+                    if ( !is(element[eventName], 'undefined') ) {
+              element[eventName] = undefined;
+            }
+            element.removeAttribute(eventName);
+          }
+        }
+
+        element = null;
+        return isSupported;
+      }
+      return isEventSupported;
+    })(),
+
+
+    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
+
+    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
+      hasOwnProp = function (object, property) {
+        return _hasOwnProperty.call(object, property);
+      };
+    }
+    else {
+      hasOwnProp = function (object, property) { 
+        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
+      };
+    }
+
+
+    if (!Function.prototype.bind) {
+      Function.prototype.bind = function bind(that) {
+
+        var target = this;
+
+        if (typeof target != "function") {
+            throw new TypeError();
+        }
+
+        var args = slice.call(arguments, 1),
+            bound = function () {
+
+            if (this instanceof bound) {
+
+              var F = function(){};
+              F.prototype = target.prototype;
+              var self = new F();
+
+              var result = target.apply(
+                  self,
+                  args.concat(slice.call(arguments))
+              );
+              if (Object(result) === result) {
+                  return result;
+              }
+              return self;
+
+            } else {
+
+              return target.apply(
+                  that,
+                  args.concat(slice.call(arguments))
+              );
+
+            }
+
+        };
+
+        return bound;
+      };
+    }
+
+    function setCss( str ) {
+        mStyle.cssText = str;
+    }
+
+    function setCssAll( str1, str2 ) {
+        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
+    }
+
+    function is( obj, type ) {
+        return typeof obj === type;
+    }
+
+    function contains( str, substr ) {
+        return !!~('' + str).indexOf(substr);
+    }
+
+    function testProps( props, prefixed ) {
+        for ( var i in props ) {
+            var prop = props[i];
+            if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
+                return prefixed == 'pfx' ? prop : true;
+            }
+        }
+        return false;
+    }
+
+    function testDOMProps( props, obj, elem ) {
+        for ( var i in props ) {
+            var item = obj[props[i]];
+            if ( item !== undefined) {
+
+                            if (elem === false) return props[i];
+
+                            if (is(item, 'function')){
+                                return item.bind(elem || obj);
+                }
+
+                            return item;
+            }
+        }
+        return false;
+    }
+
+    function testPropsAll( prop, prefixed, elem ) {
+
+        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),
+            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+            if(is(prefixed, "string") || is(prefixed, "undefined")) {
+          return testProps(props, prefixed);
+
+            } else {
+          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
+          return testDOMProps(props, prefixed, elem);
+        }
+    }    tests['flexbox'] = function() {
+      return testPropsAll('flexWrap');
+    };    tests['canvas'] = function() {
+        var elem = document.createElement('canvas');
+        return !!(elem.getContext && elem.getContext('2d'));
+    };
+
+    tests['canvastext'] = function() {
+        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
+    };
+
+
+
+    tests['webgl'] = function() {
+        return !!window.WebGLRenderingContext;
+    };
+
+
+    tests['touch'] = function() {
+        var bool;
+
+        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
+          bool = true;
+        } else {
+          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
+            bool = node.offsetTop === 9;
+          });
+        }
+
+        return bool;
+    };
+
+
+
+    tests['geolocation'] = function() {
+        return 'geolocation' in navigator;
+    };
+
+
+    tests['postmessage'] = function() {
+      return !!window.postMessage;
+    };
+
+
+    tests['websqldatabase'] = function() {
+      return !!window.openDatabase;
+    };
+
+    tests['indexedDB'] = function() {
+      return !!testPropsAll("indexedDB", window);
+    };
+
+    tests['hashchange'] = function() {
+      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
+    };
+
+    tests['history'] = function() {
+      return !!(window.history && history.pushState);
+    };
+
+    tests['draganddrop'] = function() {
+        var div = document.createElement('div');
+        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
+    };
+
+    tests['websockets'] = function() {
+        return 'WebSocket' in window || 'MozWebSocket' in window;
+    };
+
+
+    tests['rgba'] = function() {
+        setCss('background-color:rgba(150,255,150,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba');
+    };
+
+    tests['hsla'] = function() {
+            setCss('background-color:hsla(120,40%,100%,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
+    };
+
+    tests['multiplebgs'] = function() {
+                setCss('background:url(https://),url(https://),red url(https://)');
+
+            return (/(url\s*\(.*?){3}/).test(mStyle.background);
+    };    tests['backgroundsize'] = function() {
+        return testPropsAll('backgroundSize');
+    };
+
+    tests['borderimage'] = function() {
+        return testPropsAll('borderImage');
+    };
+
+
+
+    tests['borderradius'] = function() {
+        return testPropsAll('borderRadius');
+    };
+
+    tests['boxshadow'] = function() {
+        return testPropsAll('boxShadow');
+    };
+
+    tests['textshadow'] = function() {
+        return document.createElement('div').style.textShadow === '';
+    };
+
+
+    tests['opacity'] = function() {
+                setCssAll('opacity:.55');
+
+                    return (/^0.55$/).test(mStyle.opacity);
+    };
+
+
+    tests['cssanimations'] = function() {
+        return testPropsAll('animationName');
+    };
+
+
+    tests['csscolumns'] = function() {
+        return testPropsAll('columnCount');
+    };
+
+
+    tests['cssgradients'] = function() {
+        var str1 = 'background-image:',
+            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
+            str3 = 'linear-gradient(left top,#9f9, white);';
+
+        setCss(
+                       (str1 + '-webkit- '.split(' ').join(str2 + str1) +
+                       prefixes.join(str3 + str1)).slice(0, -str1.length)
+        );
+
+        return contains(mStyle.backgroundImage, 'gradient');
+    };
+
+
+    tests['cssreflections'] = function() {
+        return testPropsAll('boxReflect');
+    };
+
+
+    tests['csstransforms'] = function() {
+        return !!testPropsAll('transform');
+    };
+
+
+    tests['csstransforms3d'] = function() {
+
+        var ret = !!testPropsAll('perspective');
+
+                        if ( ret && 'webkitPerspective' in docElement.style ) {
+
+                      injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
+            ret = node.offsetLeft === 9 && node.offsetHeight === 3;
+          });
+        }
+        return ret;
+    };
+
+
+    tests['csstransitions'] = function() {
+        return testPropsAll('transition');
+    };
+
+
+
+    tests['fontface'] = function() {
+        var bool;
+
+        injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
+          var style = document.getElementById('smodernizr'),
+              sheet = style.sheet || style.styleSheet,
+              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
+
+          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
+        });
+
+        return bool;
+    };
+
+    tests['generatedcontent'] = function() {
+        var bool;
+
+        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
+          bool = node.offsetHeight >= 3;
+        });
+
+        return bool;
+    };
+    tests['video'] = function() {
+        var elem = document.createElement('video'),
+            bool = false;
+
+            try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"')      .replace(/^no$/,'');
+
+                            bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
+
+                bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
+            }
+
+        } catch(e) { }
+
+        return bool;
+    };
+
+    tests['audio'] = function() {
+        var elem = document.createElement('audio'),
+            bool = false;
+
+        try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
+                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');
+
+                                                    bool.wav  = elem.canPlayType('audio/wav; codecs="1"')     .replace(/^no$/,'');
+                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||
+                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');
+            }
+        } catch(e) { }
+
+        return bool;
+    };
+
+
+    tests['localstorage'] = function() {
+        try {
+            localStorage.setItem(mod, mod);
+            localStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+    tests['sessionstorage'] = function() {
+        try {
+            sessionStorage.setItem(mod, mod);
+            sessionStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+
+    tests['webworkers'] = function() {
+        return !!window.Worker;
+    };
+
+
+    tests['applicationcache'] = function() {
+        return !!window.applicationCache;
+    };
+
+
+    tests['svg'] = function() {
+        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
+    };
+
+    tests['inlinesvg'] = function() {
+      var div = document.createElement('div');
+      div.innerHTML = '<svg/>';
+      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
+    };
+
+    tests['smil'] = function() {
+        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
+    };
+
+
+    tests['svgclippaths'] = function() {
+        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
+    };
+
+    function webforms() {
+                                            Modernizr['input'] = (function( props ) {
+            for ( var i = 0, len = props.length; i < len; i++ ) {
+                attrs[ props[i] ] = !!(props[i] in inputElem);
+            }
+            if (attrs.list){
+                                  attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
+            }
+            return attrs;
+        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
+                            Modernizr['inputtypes'] = (function(props) {
+
+            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
+
+                inputElem.setAttribute('type', inputElemType = props[i]);
+                bool = inputElem.type !== 'text';
+
+                                                    if ( bool ) {
+
+                    inputElem.value         = smile;
+                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
+
+                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
+
+                      docElement.appendChild(inputElem);
+                      defaultView = document.defaultView;
+
+                                        bool =  defaultView.getComputedStyle &&
+                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
+                                                                                  (inputElem.offsetHeight !== 0);
+
+                      docElement.removeChild(inputElem);
+
+                    } else if ( /^(search|tel)$/.test(inputElemType) ){
+                                                                                    } else if ( /^(url|email)$/.test(inputElemType) ) {
+                                        bool = inputElem.checkValidity && inputElem.checkValidity() === false;
+
+                    } else {
+                                        bool = inputElem.value != smile;
+                    }
+                }
+
+                inputs[ props[i] ] = !!bool;
+            }
+            return inputs;
+        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
+        }
+    for ( var feature in tests ) {
+        if ( hasOwnProp(tests, feature) ) {
+                                    featureName  = feature.toLowerCase();
+            Modernizr[featureName] = tests[feature]();
+
+            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
+        }
+    }
+
+    Modernizr.input || webforms();
+
+
+     Modernizr.addTest = function ( feature, test ) {
+       if ( typeof feature == 'object' ) {
+         for ( var key in feature ) {
+           if ( hasOwnProp( feature, key ) ) {
+             Modernizr.addTest( key, feature[ key ] );
+           }
+         }
+       } else {
+
+         feature = feature.toLowerCase();
+
+         if ( Modernizr[feature] !== undefined ) {
+                                              return Modernizr;
+         }
+
+         test = typeof test == 'function' ? test() : test;
+
+         if (typeof enableClasses !== "undefined" && enableClasses) {
+           docElement.className += ' ' + (test ? '' : 'no-') + feature;
+         }
+         Modernizr[feature] = test;
+
+       }
+
+       return Modernizr; 
+     };
+
+
+    setCss('');
+    modElem = inputElem = null;
+
+    ;(function(window, document) {
+                var version = '3.7.0';
+
+            var options = window.html5 || {};
+
+            var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+            var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+            var supportsHtml5Styles;
+
+            var expando = '_html5shiv';
+
+            var expanID = 0;
+
+            var expandoData = {};
+
+            var supportsUnknownElements;
+
+        (function() {
+          try {
+            var a = document.createElement('a');
+            a.innerHTML = '<xyz></xyz>';
+                    supportsHtml5Styles = ('hidden' in a);
+
+            supportsUnknownElements = a.childNodes.length == 1 || (function() {
+                        (document.createElement)('a');
+              var frag = document.createDocumentFragment();
+              return (
+                typeof frag.cloneNode == 'undefined' ||
+                typeof frag.createDocumentFragment == 'undefined' ||
+                typeof frag.createElement == 'undefined'
+              );
+            }());
+          } catch(e) {
+                    supportsHtml5Styles = true;
+            supportsUnknownElements = true;
+          }
+
+        }());
+
+            function addStyleSheet(ownerDocument, cssText) {
+          var p = ownerDocument.createElement('p'),
+          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+          p.innerHTML = 'x<style>' + cssText + '</style>';
+          return parent.insertBefore(p.lastChild, parent.firstChild);
+        }
+
+            function getElements() {
+          var elements = html5.elements;
+          return typeof elements == 'string' ? elements.split(' ') : elements;
+        }
+
+            function getExpandoData(ownerDocument) {
+          var data = expandoData[ownerDocument[expando]];
+          if (!data) {
+            data = {};
+            expanID++;
+            ownerDocument[expando] = expanID;
+            expandoData[expanID] = data;
+          }
+          return data;
+        }
+
+            function createElement(nodeName, ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createElement(nodeName);
+          }
+          if (!data) {
+            data = getExpandoData(ownerDocument);
+          }
+          var node;
+
+          if (data.cache[nodeName]) {
+            node = data.cache[nodeName].cloneNode();
+          } else if (saveClones.test(nodeName)) {
+            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+          } else {
+            node = data.createElem(nodeName);
+          }
+
+                                                    return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+        }
+
+            function createDocumentFragment(ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createDocumentFragment();
+          }
+          data = data || getExpandoData(ownerDocument);
+          var clone = data.frag.cloneNode(),
+          i = 0,
+          elems = getElements(),
+          l = elems.length;
+          for(;i<l;i++){
+            clone.createElement(elems[i]);
+          }
+          return clone;
+        }
+
+            function shivMethods(ownerDocument, data) {
+          if (!data.cache) {
+            data.cache = {};
+            data.createElem = ownerDocument.createElement;
+            data.createFrag = ownerDocument.createDocumentFragment;
+            data.frag = data.createFrag();
+          }
+
+
+          ownerDocument.createElement = function(nodeName) {
+                    if (!html5.shivMethods) {
+              return data.createElem(nodeName);
+            }
+            return createElement(nodeName, ownerDocument, data);
+          };
+
+          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+                                                          'var n=f.cloneNode(),c=n.createElement;' +
+                                                          'h.shivMethods&&(' +
+                                                                                                                getElements().join().replace(/[\w\-]+/g, function(nodeName) {
+            data.createElem(nodeName);
+            data.frag.createElement(nodeName);
+            return 'c("' + nodeName + '")';
+          }) +
+            ');return n}'
+                                                         )(html5, data.frag);
+        }
+
+            function shivDocument(ownerDocument) {
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          var data = getExpandoData(ownerDocument);
+
+          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+            data.hasCSS = !!addStyleSheet(ownerDocument,
+                                                                                'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+                                                                                    'mark{background:#FF0;color:#000}' +
+                                                                                    'template{display:none}'
+                                         );
+          }
+          if (!supportsUnknownElements) {
+            shivMethods(ownerDocument, data);
+          }
+          return ownerDocument;
+        }
+
+            var html5 = {
+
+                'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
+
+                'version': version,
+
+                'shivCSS': (options.shivCSS !== false),
+
+                'supportsUnknownElements': supportsUnknownElements,
+
+                'shivMethods': (options.shivMethods !== false),
+
+                'type': 'default',
+
+                'shivDocument': shivDocument,
+
+                createElement: createElement,
+
+                createDocumentFragment: createDocumentFragment
+        };
+
+            window.html5 = html5;
+
+            shivDocument(document);
+
+    }(this, document));
+
+    Modernizr._version      = version;
+
+    Modernizr._prefixes     = prefixes;
+    Modernizr._domPrefixes  = domPrefixes;
+    Modernizr._cssomPrefixes  = cssomPrefixes;
+
+
+    Modernizr.hasEvent      = isEventSupported;
+
+    Modernizr.testProp      = function(prop){
+        return testProps([prop]);
+    };
+
+    Modernizr.testAllProps  = testPropsAll;
+
+
+    Modernizr.testStyles    = injectElementWithStyles;
+    Modernizr.prefixed      = function(prop, obj, elem){
+      if(!obj) {
+        return testPropsAll(prop, 'pfx');
+      } else {
+            return testPropsAll(prop, obj, elem);
+      }
+    };
+
+
+    docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
+
+                                                    (enableClasses ? ' js ' + classes.join(' ') : '');
+
+    return Modernizr;
+
+})(this, this.document);
+/*yepnope1.5.4|WTFPL*/
+(function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}})(this,document);
+Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0));};
+;
\ No newline at end of file
Index: trunk/include/jquery/overlib.js.txt
===================================================================
--- trunk/include/jquery/overlib.js.txt	(nonexistent)
+++ trunk/include/jquery/overlib.js.txt	(revision 2)
@@ -0,0 +1,1491 @@
+//\/////
+//\  overLIB 4.21 - You may not remove or change this notice.
+//\  Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\
+//\  Contributors are listed on the homepage.
+//\  This file might be old, always check for the latest version at:
+//\  http://www.bosrup.com/web/overlib/
+//\
+//\  Please read the license agreement (available through the link above)
+//\  before using overLIB. Direct any licensing questions to erik@bosrup.com.
+//\
+//\  Do not sell this as your own work or remove this copyright notice. 
+//\  For full details on copying or changing this script please read the
+//\  license agreement at the link above. Please give credit on sites that
+//\  use overLIB and submit changes of the script so other people can use
+//\  them as well.
+//   $Revision: 65 $                $Date: 2017-03-03 22:38:16 +0100 (Fr, 03. Mrz 2017) $
+//\/////
+//\mini
+
+////////
+// PRE-INIT
+// Ignore these lines, configuration is below.
+////////
+var olLoaded = 0;var pmStart = 10000000; var pmUpper = 10001000; var pmCount = pmStart+1; var pmt=''; var pms = new Array(); var olInfo = new Info('4.21', 1);
+var FREPLACE = 0; var FBEFORE = 1; var FAFTER = 2; var FALTERNATE = 3; var FCHAIN=4;
+var olHideForm=0;  // parameter for hiding SELECT and ActiveX elements in IE5.5+ 
+var olHautoFlag = 0;  // flags for over-riding VAUTO and HAUTO if corresponding
+var olVautoFlag = 0;  // positioning commands are used on the command line
+var hookPts = new Array(), postParse = new Array(), cmdLine = new Array(), runTime = new Array();
+// for plugins
+registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
+
+////////
+// DEFAULT CONFIGURATION
+// Settings you want everywhere are set here. All of this can also be
+// changed on your html page or through an overLIB call.
+////////
+if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";
+if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";
+if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
+if (typeof ol_capcolor=='undefined') var ol_capcolor="#FFFFFF";
+if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
+if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
+if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
+if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
+if (typeof ol_textsize=='undefined') var ol_textsize="1";
+if (typeof ol_captionsize=='undefined') var ol_captionsize="1";
+if (typeof ol_closesize=='undefined') var ol_closesize="1";
+if (typeof ol_width=='undefined') var ol_width="200";
+if (typeof ol_border=='undefined') var ol_border="1";
+if (typeof ol_cellpad=='undefined') var ol_cellpad=2;
+if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
+if (typeof ol_offsety=='undefined') var ol_offsety=10;
+if (typeof ol_text=='undefined') var ol_text="Default Text";
+if (typeof ol_cap=='undefined') var ol_cap="";
+if (typeof ol_sticky=='undefined') var ol_sticky=0;
+if (typeof ol_background=='undefined') var ol_background="";
+if (typeof ol_close=='undefined') var ol_close="Close";
+if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;
+if (typeof ol_status=='undefined') var ol_status="";
+if (typeof ol_autostatus=='undefined') var ol_autostatus=0;
+if (typeof ol_height=='undefined') var ol_height=-1;
+if (typeof ol_snapx=='undefined') var ol_snapx=0;
+if (typeof ol_snapy=='undefined') var ol_snapy=0;
+if (typeof ol_fixx=='undefined') var ol_fixx=-1;
+if (typeof ol_fixy=='undefined') var ol_fixy=-1;
+if (typeof ol_relx=='undefined') var ol_relx=null;
+if (typeof ol_rely=='undefined') var ol_rely=null;
+if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";
+if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";
+if (typeof ol_padxl=='undefined') var ol_padxl=1;
+if (typeof ol_padxr=='undefined') var ol_padxr=1;
+if (typeof ol_padyt=='undefined') var ol_padyt=1;
+if (typeof ol_padyb=='undefined') var ol_padyb=1;
+if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;
+if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;
+if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;
+if (typeof ol_capicon=='undefined') var ol_capicon="";
+if (typeof ol_frame=='undefined') var ol_frame=self;
+if (typeof ol_timeout=='undefined') var ol_timeout=0;
+if (typeof ol_function=='undefined') var ol_function=null;
+if (typeof ol_delay=='undefined') var ol_delay=0;
+if (typeof ol_hauto=='undefined') var ol_hauto=0;
+if (typeof ol_vauto=='undefined') var ol_vauto=0;
+if (typeof ol_closeclick=='undefined') var ol_closeclick=0;
+if (typeof ol_wrap=='undefined') var ol_wrap=0;
+if (typeof ol_followmouse=='undefined') var ol_followmouse=1;
+if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;
+if (typeof ol_closetitle=='undefined') var ol_closetitle='Close';
+if (typeof ol_compatmode=='undefined') var ol_compatmode=0;
+if (typeof ol_css=='undefined') var ol_css=CSSOFF;
+if (typeof ol_fgclass=='undefined') var ol_fgclass="";
+if (typeof ol_bgclass=='undefined') var ol_bgclass="";
+if (typeof ol_textfontclass=='undefined') var ol_textfontclass="";
+if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass="";
+if (typeof ol_closefontclass=='undefined') var ol_closefontclass="";
+
+////////
+// ARRAY CONFIGURATION
+////////
+
+// You can use these arrays to store popup text here instead of in the html.
+if (typeof ol_texts=='undefined') var ol_texts = new Array("Text 0", "Text 1");
+if (typeof ol_caps=='undefined') var ol_caps = new Array("Caption 0", "Caption 1");
+
+////////
+// END OF CONFIGURATION
+// Don't change anything below this line, all configuration is above.
+////////
+
+
+
+
+
+////////
+// INIT
+////////
+// Runtime variables init. Don't change for config!
+var o3_text="";
+var o3_cap="";
+var o3_sticky=0;
+var o3_background="";
+var o3_close="Close";
+var o3_hpos=RIGHT;
+var o3_offsetx=2;
+var o3_offsety=2;
+var o3_fgcolor="";
+var o3_bgcolor="";
+var o3_textcolor="";
+var o3_capcolor="";
+var o3_closecolor="";
+var o3_width=100;
+var o3_border=1;
+var o3_cellpad=2;
+var o3_status="";
+var o3_autostatus=0;
+var o3_height=-1;
+var o3_snapx=0;
+var o3_snapy=0;
+var o3_fixx=-1;
+var o3_fixy=-1;
+var o3_relx=null;
+var o3_rely=null;
+var o3_fgbackground="";
+var o3_bgbackground="";
+var o3_padxl=0;
+var o3_padxr=0;
+var o3_padyt=0;
+var o3_padyb=0;
+var o3_fullhtml=0;
+var o3_vpos=BELOW;
+var o3_aboveheight=0;
+var o3_capicon="";
+var o3_textfont="Verdana,Arial,Helvetica";
+var o3_captionfont="Verdana,Arial,Helvetica";
+var o3_closefont="Verdana,Arial,Helvetica";
+var o3_textsize="1";
+var o3_captionsize="1";
+var o3_closesize="1";
+var o3_frame=self;
+var o3_timeout=0;
+var o3_timerid=0;
+var o3_allowmove=0;
+var o3_function=null; 
+var o3_delay=0;
+var o3_delayid=0;
+var o3_hauto=0;
+var o3_vauto=0;
+var o3_closeclick=0;
+var o3_wrap=0;
+var o3_followmouse=1;
+var o3_mouseoff=0;
+var o3_closetitle='';
+var o3_compatmode=0;
+var o3_css=CSSOFF;
+var o3_fgclass="";
+var o3_bgclass="";
+var o3_textfontclass="";
+var o3_captionfontclass="";
+var o3_closefontclass="";
+
+// Display state variables
+var o3_x = 0;
+var o3_y = 0;
+var o3_showingsticky = 0;
+var o3_removecounter = 0;
+
+// Our layer
+var over = null;
+var fnRef, hoveringSwitch = false;
+var olHideDelay;
+
+// Decide browser version
+var isMac = (navigator.userAgent.indexOf("Mac") != -1);
+var olOp = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);  // Opera 7
+var olNs4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
+var olNs6 = (document.getElementById) ? true : false;
+var olKq = (olNs6 && /konqueror/i.test(navigator.userAgent));
+var olIe4 = (document.all) ? true : false;
+var olIe5 = false; 
+var olIe55 = false; // Added additional variable to identify IE5.5+
+var docRoot = 'document.body';
+
+// Resize fix for NS4.x to keep track of layer
+if (olNs4) {
+	var oW = window.innerWidth;
+	var oH = window.innerHeight;
+	window.onresize = function() { if (oW != window.innerWidth || oH != window.innerHeight) location.reload(); }
+}
+
+// Microsoft Stupidity Check(tm).
+if (olIe4) {
+	var agent = navigator.userAgent;
+	if (/MSIE/.test(agent)) {
+		var versNum = parseFloat(agent.match(/MSIE[ ](\d+\.\d+)\.*/i)[1]);
+		if (versNum >= 5){
+			olIe5=true;
+			olIe55=(versNum>=5.5&&!olOp) ? true : false;
+			if (olNs6) olNs6=false;
+		}
+	}
+	if (olNs6) olIe4 = false;
+}
+
+// Check for compatability mode.
+if (document.compatMode && document.compatMode == 'CSS1Compat') {
+	docRoot= ((olIe4 && !olOp) ? 'document.documentElement' : docRoot);
+}
+
+// Add window onload handlers to indicate when all modules have been loaded
+// For Netscape 6+ and Mozilla, uses addEventListener method on the window object
+// For IE it uses the attachEvent method of the window object and for Netscape 4.x
+// it sets the window.onload handler to the OLonload_handler function for Bubbling
+if(window.addEventListener) window.addEventListener("load",OLonLoad_handler,false);
+else if (window.attachEvent) window.attachEvent("onload",OLonLoad_handler);
+
+var capExtent;
+
+////////
+// PUBLIC FUNCTIONS
+////////
+
+// overlib(arg0,...,argN)
+// Loads parameters into global runtime variables.
+function overlib() {
+	if (!olLoaded || isExclusive(overlib.arguments)) return true;
+	if (olCheckMouseCapture) olMouseCapture();
+	if (over) {
+		over = (typeof over.id != 'string') ? o3_frame.document.all['overDiv'] : over;
+		cClick();
+	}
+
+	// Load defaults to runtime.
+  olHideDelay=0;
+	o3_text=ol_text;
+	o3_cap=ol_cap;
+	o3_sticky=ol_sticky;
+	o3_background=ol_background;
+	o3_close=ol_close;
+	o3_hpos=ol_hpos;
+	o3_offsetx=ol_offsetx;
+	o3_offsety=ol_offsety;
+	o3_fgcolor=ol_fgcolor;
+	o3_bgcolor=ol_bgcolor;
+	o3_textcolor=ol_textcolor;
+	o3_capcolor=ol_capcolor;
+	o3_closecolor=ol_closecolor;
+	o3_width=ol_width;
+	o3_border=ol_border;
+	o3_cellpad=ol_cellpad;
+	o3_status=ol_status;
+	o3_autostatus=ol_autostatus;
+	o3_height=ol_height;
+	o3_snapx=ol_snapx;
+	o3_snapy=ol_snapy;
+	o3_fixx=ol_fixx;
+	o3_fixy=ol_fixy;
+	o3_relx=ol_relx;
+	o3_rely=ol_rely;
+	o3_fgbackground=ol_fgbackground;
+	o3_bgbackground=ol_bgbackground;
+	o3_padxl=ol_padxl;
+	o3_padxr=ol_padxr;
+	o3_padyt=ol_padyt;
+	o3_padyb=ol_padyb;
+	o3_fullhtml=ol_fullhtml;
+	o3_vpos=ol_vpos;
+	o3_aboveheight=ol_aboveheight;
+	o3_capicon=ol_capicon;
+	o3_textfont=ol_textfont;
+	o3_captionfont=ol_captionfont;
+	o3_closefont=ol_closefont;
+	o3_textsize=ol_textsize;
+	o3_captionsize=ol_captionsize;
+	o3_closesize=ol_closesize;
+	o3_timeout=ol_timeout;
+	o3_function=ol_function;
+	o3_delay=ol_delay;
+	o3_hauto=ol_hauto;
+	o3_vauto=ol_vauto;
+	o3_closeclick=ol_closeclick;
+	o3_wrap=ol_wrap;	
+	o3_followmouse=ol_followmouse;
+	o3_mouseoff=ol_mouseoff;
+	o3_closetitle=ol_closetitle;
+	o3_css=ol_css;
+	o3_compatmode=ol_compatmode;
+	o3_fgclass=ol_fgclass;
+	o3_bgclass=ol_bgclass;
+	o3_textfontclass=ol_textfontclass;
+	o3_captionfontclass=ol_captionfontclass;
+	o3_closefontclass=ol_closefontclass;
+	
+	setRunTimeVariables();
+	
+	fnRef = '';
+	
+	// Special for frame support, over must be reset...
+	o3_frame = ol_frame;
+	
+	if(!(over=createDivContainer())) return false;
+
+	parseTokens('o3_', overlib.arguments);
+	if (!postParseChecks()) return false;
+
+	if (o3_delay == 0) {
+		return runHook("olMain", FREPLACE);
+ 	} else {
+		o3_delayid = setTimeout("runHook('olMain', FREPLACE)", o3_delay);
+		return false;
+	}
+}
+
+// Clears popups if appropriate
+function nd(time) {
+	if (olLoaded && !isExclusive()) {
+		hideDelay(time);  // delay popup close if time specified
+
+		if (o3_removecounter >= 1) { o3_showingsticky = 0 };
+		
+		if (o3_showingsticky == 0) {
+			o3_allowmove = 0;
+			if (over != null && o3_timerid == 0) runHook("hideObject", FREPLACE, over);
+		} else {
+			o3_removecounter++;
+		}
+	}
+	
+	return true;
+}
+
+// The Close onMouseOver function for stickies
+function cClick() {
+	if (olLoaded) {
+		runHook("hideObject", FREPLACE, over);
+		o3_showingsticky = 0;	
+	}	
+	return false;
+}
+
+// Method for setting page specific defaults.
+function overlib_pagedefaults() {
+	parseTokens('ol_', overlib_pagedefaults.arguments);
+}
+
+
+////////
+// OVERLIB MAIN FUNCTION
+////////
+
+// This function decides what it is we want to display and how we want it done.
+function olMain() {
+	var layerhtml, styleType;
+ 	runHook("olMain", FBEFORE);
+ 	
+	if (o3_background!="" || o3_fullhtml) {
+		// Use background instead of box.
+		layerhtml = runHook('ol_content_background', FALTERNATE, o3_css, o3_text, o3_background, o3_fullhtml);
+	} else {
+		// They want a popup box.
+		styleType = (pms[o3_css-1-pmStart] == "cssoff" || pms[o3_css-1-pmStart] == "cssclass");
+
+		// Prepare popup background
+		if (o3_fgbackground != "") o3_fgbackground = "background=\""+o3_fgbackground+"\"";
+		if (o3_bgbackground != "") o3_bgbackground = (styleType ? "background=\""+o3_bgbackground+"\"" : o3_bgbackground);
+
+		// Prepare popup colors
+		if (o3_fgcolor != "") o3_fgcolor = (styleType ? "bgcolor=\""+o3_fgcolor+"\"" : o3_fgcolor);
+		if (o3_bgcolor != "") o3_bgcolor = (styleType ? "bgcolor=\""+o3_bgcolor+"\"" : o3_bgcolor);
+
+		// Prepare popup height
+		if (o3_height > 0) o3_height = (styleType ? "height=\""+o3_height+"\"" : o3_height);
+		else o3_height = "";
+
+		// Decide which kinda box.
+		if (o3_cap=="") {
+			// Plain
+			layerhtml = runHook('ol_content_simple', FALTERNATE, o3_css, o3_text);
+		} else {
+			// With caption
+			if (o3_sticky) {
+				// Show close text
+				layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, o3_close);
+			} else {
+				// No close text
+				layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, "");
+			}
+		}
+	}	
+
+	// We want it to stick!
+	if (o3_sticky) {
+		if (o3_timerid > 0) {
+			clearTimeout(o3_timerid);
+			o3_timerid = 0;
+		}
+		o3_showingsticky = 1;
+		o3_removecounter = 0;
+	}
+
+	// Created a separate routine to generate the popup to make it easier
+	// to implement a plugin capability
+	if (!runHook("createPopup", FREPLACE, layerhtml)) return false;
+
+	// Prepare status bar
+	if (o3_autostatus > 0) {
+		o3_status = o3_text;
+		if (o3_autostatus > 1) o3_status = o3_cap;
+	}
+
+	// When placing the layer the first time, even stickies may be moved.
+	o3_allowmove = 0;
+
+	// Initiate a timer for timeout
+	if (o3_timeout > 0) {          
+		if (o3_timerid > 0) clearTimeout(o3_timerid);
+		o3_timerid = setTimeout("cClick()", o3_timeout);
+	}
+
+	// Show layer
+	runHook("disp", FREPLACE, o3_status);
+	runHook("olMain", FAFTER);
+
+	return (olOp && event && event.type == 'mouseover' && !o3_status) ? '' : (o3_status != '');
+}
+
+////////
+// LAYER GENERATION FUNCTIONS
+////////
+// These functions just handle popup content with tags that should adhere to the W3C standards specification.
+
+// Makes simple table without caption
+function ol_content_simple(text) {
+	var cpIsMultiple = /,/.test(o3_cellpad);
+	var txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' : ((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
+
+	set_background("");
+	return txt;
+}
+
+// Makes table with caption and optional close link
+function ol_content_caption(text,title,close) {
+	var nameId, txt, cpIsMultiple = /,/.test(o3_cellpad);
+	var closing, closeevent;
+
+	closing = "";
+	closeevent = "onmouseover";
+	if (o3_closeclick == 1) closeevent = (o3_closetitle ? "title='" + o3_closetitle +"'" : "") + " onclick";
+	if (o3_capicon != "") {
+	  nameId = ' hspace = \"5\"'+' align = \"middle\" alt = \"\"';
+	  if (typeof o3_dragimg != 'undefined' && o3_dragimg) nameId =' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';
+	  o3_capicon = '<img src=\"'+o3_capicon+'\"'+nameId+' />';
+	}
+
+	if (close != "")
+		closing = '<td '+(!o3_compatmode && o3_closefontclass ? 'class="'+o3_closefontclass : 'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode && o3_closefontclass) ? ' class="' + o3_closefontclass + '" ' : ' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass ? '' : wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass ? '' : wrapStr(1,o3_closesize,'close'))+'</a></td>';
+	txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass ? ' class="'+o3_captionfontclass+'">' : '>')+(o3_captionfontclass ? '' : '<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass ? '' : wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize)) + '</td></tr></table></td></tr></table>';
+
+	set_background("");
+	return txt;
+}
+
+// Sets the background picture,padding and lots more. :)
+function ol_content_background(text,picture,hasfullhtml) {
+	if (hasfullhtml) {
+		txt=text;
+	} else {
+		txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass ? '" class="'+o3_textfontclass : '')+'">'+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';
+	}
+
+	set_background(picture);
+	return txt;
+}
+
+// Loads a picture into the div.
+function set_background(pic) {
+	if (pic == "") {
+		if (olNs4) {
+			over.background.src = null; 
+		} else if (over.style) {
+			over.style.backgroundImage = "none";
+		}
+	} else {
+		if (olNs4) {
+			over.background.src = pic;
+		} else if (over.style) {
+			over.style.width=o3_width + 'px';
+			over.style.backgroundImage = "url("+pic+")";
+		}
+	}
+}
+
+////////
+// HANDLING FUNCTIONS
+////////
+var olShowId=-1;
+
+// Displays the popup
+function disp(statustext) {
+	runHook("disp", FBEFORE);
+	
+	if (o3_allowmove == 0) {
+		runHook("placeLayer", FREPLACE);
+		(olNs6&&olShowId<0) ? olShowId=setTimeout("runHook('showObject', FREPLACE, over)", 1) : runHook("showObject", FREPLACE, over);
+		o3_allowmove = (o3_sticky || o3_followmouse==0) ? 0 : 1;
+	}
+	
+	runHook("disp", FAFTER);
+
+	if (statustext != "") self.status = statustext;
+}
+
+// Creates the actual popup structure
+function createPopup(lyrContent){
+	runHook("createPopup", FBEFORE);
+	
+	if (o3_wrap) {
+		var wd,ww,theObj = (olNs4 ? over : over.style);
+		theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0);
+		layerWrite(lyrContent);
+		wd = (olNs4 ? over.clip.width : over.offsetWidth);
+		if (wd > (ww=windowWidth())) {
+			lyrContent=lyrContent.replace(/\&nbsp;/g, ' ');
+			o3_width=ww;
+			o3_wrap=0;
+		} 
+	}
+
+	layerWrite(lyrContent);
+	
+	// Have to set o3_width for placeLayer() routine if o3_wrap is turned on
+	if (o3_wrap) o3_width=(olNs4 ? over.clip.width : over.offsetWidth);
+	
+	runHook("createPopup", FAFTER, lyrContent);
+
+	return true;
+}
+
+// Decides where we want the popup.
+function placeLayer() {
+	var placeX, placeY, widthFix = 0;
+	
+	// HORIZONTAL PLACEMENT, re-arranged to work in Safari
+	if (o3_frame.innerWidth) widthFix=18; 
+	iwidth = windowWidth();
+
+	// Horizontal scroll offset
+	winoffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollLeft') : o3_frame.pageXOffset;
+
+	placeX = runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
+
+	// VERTICAL PLACEMENT, re-arranged to work in Safari
+	if (o3_frame.innerHeight) {
+		iheight=o3_frame.innerHeight;
+	} else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) { 
+		iheight=eval('o3_frame.'+docRoot+'.clientHeight');
+	}			
+
+	// Vertical scroll offset
+	scrolloffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollTop') : o3_frame.pageYOffset;
+	placeY = runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
+
+	// Actually move the object.
+	repositionTo(over, placeX, placeY);
+}
+
+// Moves the layer
+function olMouseMove(e) {
+	var e = (e) ? e : event;
+
+	if (e.pageX) {
+		o3_x = e.pageX;
+		o3_y = e.pageY;
+	} else if (e.clientX) {
+		o3_x = eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');
+		o3_y = eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');
+	}
+	
+	if (o3_allowmove == 1) runHook("placeLayer", FREPLACE);
+
+	// MouseOut handler
+	if (hoveringSwitch && !olNs4 && runHook("cursorOff", FREPLACE)) {
+		(olHideDelay ? hideDelay(olHideDelay) : cClick());
+		hoveringSwitch = !hoveringSwitch;
+	}
+}
+
+// Fake function for 3.0 users.
+function no_overlib() { return ver3fix; }
+
+// Capture the mouse and chain other scripts.
+function olMouseCapture() {
+	capExtent = document;
+	var fN, str = '', l, k, f, wMv, sS, mseHandler = olMouseMove;
+	var re = /function[ ]*(\w*)\(/;
+	
+	wMv = (!olIe4 && window.onmousemove);
+	if (document.onmousemove || wMv) {
+		if (wMv) capExtent = window;
+		f = capExtent.onmousemove.toString();
+		fN = f.match(re);
+		if (fN == null) {
+			str = f+'(e); ';
+		} else if (fN[1] == 'anonymous' || fN[1] == 'olMouseMove' || (wMv && fN[1] == 'onmousemove')) {
+			if (!olOp && wMv) {
+				l = f.indexOf('{')+1;
+				k = f.lastIndexOf('}');
+				sS = f.substring(l,k);
+				if ((l = sS.indexOf('(')) != -1) {
+					sS = sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');
+					if (eval("typeof " + sS + " == 'undefined'")) window.onmousemove = null;
+					else str = sS + '(e);';
+				}
+			}
+			if (!str) {
+				olCheckMouseCapture = false;
+				return;
+			}
+		} else {
+			if (fN[1]) str = fN[1]+'(e); ';
+			else {
+				l = f.indexOf('{')+1;
+				k = f.lastIndexOf('}');
+				str = f.substring(l,k) + '\n';
+			}
+		}
+		str += 'olMouseMove(e); ';
+		mseHandler = new Function('e', str);
+	}
+
+	capExtent.onmousemove = mseHandler;
+	if (olNs4) capExtent.captureEvents(Event.MOUSEMOVE);
+}
+
+////////
+// PARSING FUNCTIONS
+////////
+
+// Does the actual command parsing.
+function parseTokens(pf, ar) {
+	// What the next argument is expected to be.
+	var v, i, mode=-1, par = (pf != 'ol_');	
+	var fnMark = (par && !ar.length ? 1 : 0);
+
+	for (i = 0; i < ar.length; i++) {
+		if (mode < 0) {
+			// Arg is maintext,unless its a number between pmStart and pmUpper
+			// then its a command.
+			if (typeof ar[i] == 'number' && ar[i] > pmStart && ar[i] < pmUpper) {
+				fnMark = (par ? 1 : 0);
+				i--;   // backup one so that the next block can parse it
+			} else {
+				switch(pf) {
+					case 'ol_':
+						ol_text = ar[i].toString();
+						break;
+					default:
+						o3_text=ar[i].toString();  
+				}
+			}
+			mode = 0;
+		} else {
+			// Note: NS4 doesn't like switch cases with vars.
+			if (ar[i] >= pmCount || ar[i]==DONOTHING) { continue; }
+			if (ar[i]==INARRAY) { fnMark = 0; eval(pf+'text=ol_texts['+ar[++i]+'].toString()'); continue; }
+			if (ar[i]==CAPARRAY) { eval(pf+'cap=ol_caps['+ar[++i]+'].toString()'); continue; }
+			if (ar[i]==STICKY) { if (pf!='ol_') eval(pf+'sticky=1'); continue; }
+			if (ar[i]==BACKGROUND) { eval(pf+'background="'+ar[++i]+'"'); continue; }
+			if (ar[i]==NOCLOSE) { if (pf!='ol_') opt_NOCLOSE(); continue; }
+			if (ar[i]==CAPTION) { eval(pf+"cap='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==CENTER || ar[i]==LEFT || ar[i]==RIGHT) { eval(pf+'hpos='+ar[i]); if(pf!='ol_') olHautoFlag=1; continue; }
+			if (ar[i]==OFFSETX) { eval(pf+'offsetx='+ar[++i]); continue; }
+			if (ar[i]==OFFSETY) { eval(pf+'offsety='+ar[++i]); continue; }
+			if (ar[i]==FGCOLOR) { eval(pf+'fgcolor="'+ar[++i]+'"'); continue; }
+			if (ar[i]==BGCOLOR) { eval(pf+'bgcolor="'+ar[++i]+'"'); continue; }
+			if (ar[i]==TEXTCOLOR) { eval(pf+'textcolor="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CAPCOLOR) { eval(pf+'capcolor="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CLOSECOLOR) { eval(pf+'closecolor="'+ar[++i]+'"'); continue; }
+			if (ar[i]==WIDTH) { eval(pf+'width='+ar[++i]); continue; }
+			if (ar[i]==BORDER) { eval(pf+'border='+ar[++i]); continue; }
+			if (ar[i]==CELLPAD) { i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad')); continue; }
+			if (ar[i]==STATUS) { eval(pf+"status='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==AUTOSTATUS) { eval(pf +'autostatus=('+pf+'autostatus == 1) ? 0 : 1'); continue; }
+			if (ar[i]==AUTOSTATUSCAP) { eval(pf +'autostatus=('+pf+'autostatus == 2) ? 0 : 2'); continue; }
+			if (ar[i]==HEIGHT) { eval(pf+'height='+pf+'aboveheight='+ar[++i]); continue; } // Same param again.
+			if (ar[i]==CLOSETEXT) { eval(pf+"close='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==SNAPX) { eval(pf+'snapx='+ar[++i]); continue; }
+			if (ar[i]==SNAPY) { eval(pf+'snapy='+ar[++i]); continue; }
+			if (ar[i]==FIXX) { eval(pf+'fixx='+ar[++i]); continue; }
+			if (ar[i]==FIXY) { eval(pf+'fixy='+ar[++i]); continue; }
+			if (ar[i]==RELX) { eval(pf+'relx='+ar[++i]); continue; }
+			if (ar[i]==RELY) { eval(pf+'rely='+ar[++i]); continue; }
+			if (ar[i]==FGBACKGROUND) { eval(pf+'fgbackground="'+ar[++i]+'"'); continue; }
+			if (ar[i]==BGBACKGROUND) { eval(pf+'bgbackground="'+ar[++i]+'"'); continue; }
+			if (ar[i]==PADX) { eval(pf+'padxl='+ar[++i]); eval(pf+'padxr='+ar[++i]); continue; }
+			if (ar[i]==PADY) { eval(pf+'padyt='+ar[++i]); eval(pf+'padyb='+ar[++i]); continue; }
+			if (ar[i]==FULLHTML) { if (pf!='ol_') eval(pf+'fullhtml=1'); continue; }
+			if (ar[i]==BELOW || ar[i]==ABOVE) { eval(pf+'vpos='+ar[i]); if (pf!='ol_') olVautoFlag=1; continue; }
+			if (ar[i]==CAPICON) { eval(pf+'capicon="'+ar[++i]+'"'); continue; }
+			if (ar[i]==TEXTFONT) { eval(pf+"textfont='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==CAPTIONFONT) { eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==CLOSEFONT) { eval(pf+"closefont='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==TEXTSIZE) { eval(pf+'textsize="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CAPTIONSIZE) { eval(pf+'captionsize="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CLOSESIZE) { eval(pf+'closesize="'+ar[++i]+'"'); continue; }
+			if (ar[i]==TIMEOUT) { eval(pf+'timeout='+ar[++i]); continue; }
+			if (ar[i]==FUNCTION) { if (pf=='ol_') { if (typeof ar[i+1]!='number') { v=ar[++i]; ol_function=(typeof v=='function' ? v : null); }} else {fnMark = 0; v = null; if (typeof ar[i+1]!='number') v = ar[++i];  opt_FUNCTION(v); } continue; }
+			if (ar[i]==DELAY) { eval(pf+'delay='+ar[++i]); continue; }
+			if (ar[i]==HAUTO) { eval(pf+'hauto=('+pf+'hauto == 0) ? 1 : 0'); continue; }
+			if (ar[i]==VAUTO) { eval(pf+'vauto=('+pf+'vauto == 0) ? 1 : 0'); continue; }
+			if (ar[i]==CLOSECLICK) { eval(pf +'closeclick=('+pf+'closeclick == 0) ? 1 : 0'); continue; }
+			if (ar[i]==WRAP) { eval(pf +'wrap=('+pf+'wrap == 0) ? 1 : 0'); continue; }
+			if (ar[i]==FOLLOWMOUSE) { eval(pf +'followmouse=('+pf+'followmouse == 1) ? 0 : 1'); continue; }
+			if (ar[i]==MOUSEOFF) { eval(pf +'mouseoff=('+pf+'mouseoff==0) ? 1 : 0'); v=ar[i+1]; if (pf != 'ol_' && eval(pf+'mouseoff') && typeof v == 'number' && (v < pmStart || v > pmUpper)) olHideDelay=ar[++i]; continue; }
+			if (ar[i]==CLOSETITLE) { eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'"); continue; }
+			if (ar[i]==CSSOFF||ar[i]==CSSCLASS) { eval(pf+'css='+ar[i]); continue; }
+			if (ar[i]==COMPATMODE) { eval(pf+'compatmode=('+pf+'compatmode==0) ? 1 : 0'); continue; }
+			if (ar[i]==FGCLASS) { eval(pf+'fgclass="'+ar[++i]+'"'); continue; }
+			if (ar[i]==BGCLASS) { eval(pf+'bgclass="'+ar[++i]+'"'); continue; }
+			if (ar[i]==TEXTFONTCLASS) { eval(pf+'textfontclass="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CAPTIONFONTCLASS) { eval(pf+'captionfontclass="'+ar[++i]+'"'); continue; }
+			if (ar[i]==CLOSEFONTCLASS) { eval(pf+'closefontclass="'+ar[++i]+'"'); continue; }
+			i = parseCmdLine(pf, i, ar);
+		}
+	}
+
+	if (fnMark && o3_function) o3_text = o3_function();
+	
+	if ((pf == 'o3_') && o3_wrap) {
+		o3_width = 0;
+		
+		var tReg=/<.*\n*>/ig;
+		if (!tReg.test(o3_text)) o3_text = o3_text.replace(/[ ]+/g, '&nbsp;');
+		if (!tReg.test(o3_cap))o3_cap = o3_cap.replace(/[ ]+/g, '&nbsp;');
+	}
+	if ((pf == 'o3_') && o3_sticky) {
+		if (!o3_close && (o3_frame != ol_frame)) o3_close = ol_close;
+		if (o3_mouseoff && (o3_frame == ol_frame)) opt_NOCLOSE(' ');
+	}
+}
+
+
+////////
+// LAYER FUNCTIONS
+////////
+
+// Writes to a layer
+function layerWrite(txt) {
+	txt += "\n";
+	if (olNs4) {
+		var lyr = o3_frame.document.layers['overDiv'].document
+		lyr.write(txt)
+		lyr.close()
+	} else if (typeof over.innerHTML != 'undefined') {
+		if (olIe5 && isMac) over.innerHTML = '';
+		over.innerHTML = txt;
+	} else {
+		range = o3_frame.document.createRange();
+		range.setStartAfter(over);
+		domfrag = range.createContextualFragment(txt);
+		
+		while (over.hasChildNodes()) {
+			over.removeChild(over.lastChild);
+		}
+		
+		over.appendChild(domfrag);
+	}
+}
+
+// Make an object visible
+function showObject(obj) {
+	runHook("showObject", FBEFORE);
+
+	var theObj=(olNs4 ? obj : obj.style);
+	theObj.visibility = 'visible';
+
+	runHook("showObject", FAFTER);
+}
+
+// Hides an object
+function hideObject(obj) {
+	runHook("hideObject", FBEFORE);
+
+	var theObj=(olNs4 ? obj : obj.style);
+	if (olNs6 && olShowId>0) { clearTimeout(olShowId); olShowId=0; }
+	theObj.visibility = 'hidden';
+	theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0);
+
+	if (o3_timerid > 0) clearTimeout(o3_timerid);
+	if (o3_delayid > 0) clearTimeout(o3_delayid);
+
+	o3_timerid = 0;
+	o3_delayid = 0;
+	self.status = "";
+
+	if (obj.onmouseout||obj.onmouseover) {
+		if (olNs4) obj.releaseEvents(Event.MOUSEOUT || Event.MOUSEOVER);
+		obj.onmouseout = obj.onmouseover = null;
+	}
+
+	runHook("hideObject", FAFTER);
+}
+
+// Move a layer
+function repositionTo(obj, xL, yL) {
+	var theObj=(olNs4 ? obj : obj.style);
+	theObj.left = xL + (!olNs4 ? 'px' : 0);
+	theObj.top = yL + (!olNs4 ? 'px' : 0);
+}
+
+// Check position of cursor relative to overDiv DIVision; mouseOut function
+function cursorOff() {
+	var left = parseInt(over.style.left);
+	var top = parseInt(over.style.top);
+	var right = left + (over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width));
+	var bottom = top + (over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight);
+
+	if (o3_x < left || o3_x > right || o3_y < top || o3_y > bottom) return true;
+
+	return false;
+}
+
+
+////////
+// COMMAND FUNCTIONS
+////////
+
+// Calls callme or the default function.
+function opt_FUNCTION(callme) {
+	o3_text = (callme ? (typeof callme=='string' ? (/.+\(.*\)/.test(callme) ? eval(callme) : callme) : callme()) : (o3_function ? o3_function() : 'No Function'));
+
+	return 0;
+}
+
+// Handle hovering
+function opt_NOCLOSE(unused) {
+	if (!unused) o3_close = "";
+
+	if (olNs4) {
+		over.captureEvents(Event.MOUSEOUT || Event.MOUSEOVER);
+		over.onmouseover = function () { if (o3_timerid > 0) { clearTimeout(o3_timerid); o3_timerid = 0; } }
+		over.onmouseout = function (e) { if (olHideDelay) hideDelay(olHideDelay); else cClick(e); }
+	} else {
+		over.onmouseover = function () {hoveringSwitch = true; if (o3_timerid > 0) { clearTimeout(o3_timerid); o3_timerid =0; } }
+	}
+
+	return 0;
+}
+
+// Function to scan command line arguments for multiples
+function opt_MULTIPLEARGS(i, args, parameter) {
+  var k=i, re, pV, str='';
+
+  for(k=i; k<args.length; k++) {
+		if(typeof args[k] == 'number' && args[k]>pmStart) break;
+		str += args[k] + ',';
+	}
+	if (str) str = str.substring(0,--str.length);
+
+	k--;  // reduce by one so the for loop this is in works correctly
+	pV=(olNs4 && /cellpad/i.test(parameter)) ? str.split(',')[0] : str;
+	eval(parameter + '="' + pV + '"');
+
+	return k;
+}
+
+// Remove &nbsp; in texts when done.
+function nbspCleanup() {
+	if (o3_wrap) {
+		o3_text = o3_text.replace(/\&nbsp;/g, ' ');
+		o3_cap = o3_cap.replace(/\&nbsp;/g, ' ');
+	}
+}
+
+// Escape embedded single quotes in text strings
+function escSglQuote(str) {
+  return str.toString().replace(/'/g,"\\'");
+}
+
+// Onload handler for window onload event
+function OLonLoad_handler(e) {
+	var re = /\w+\(.*\)[;\s]+/g, olre = /overlib\(|nd\(|cClick\(/, fn, l, i;
+
+	if(!olLoaded) olLoaded=1;
+
+  // Remove it for Gecko based browsers
+	if(window.removeEventListener && e.eventPhase == 3) window.removeEventListener("load",OLonLoad_handler,false);
+	else if(window.detachEvent) { // and for IE and Opera 4.x but execute calls to overlib, nd, or cClick()
+		window.detachEvent("onload",OLonLoad_handler);
+		var fN = document.body.getAttribute('onload');
+		if (fN) {
+			fN=fN.toString().match(re);
+			if (fN && fN.length) {
+				for (i=0; i<fN.length; i++) {
+					if (/anonymous/.test(fN[i])) continue;
+					while((l=fN[i].search(/\)[;\s]+/)) != -1) {
+						fn=fN[i].substring(0,l+1);
+						fN[i] = fN[i].substring(l+2);
+						if (olre.test(fn)) eval(fn);
+					}
+				}
+			}
+		}
+	}
+}
+
+// Wraps strings in Layer Generation Functions with the correct tags
+//    endWrap true(if end tag) or false if start tag
+//    fontSizeStr - font size string such as '1' or '10px'
+//    whichString is being wrapped -- 'text', 'caption', or 'close'
+function wrapStr(endWrap,fontSizeStr,whichString) {
+	var fontStr, fontColor, isClose=((whichString=='close') ? 1 : 0), hasDims=/[%\-a-z]+$/.test(fontSizeStr);
+	fontSizeStr = (olNs4) ? (!hasDims ? fontSizeStr : '1') : fontSizeStr;
+	if (endWrap) return (hasDims&&!olNs4) ? (isClose ? '</span>' : '</div>') : '</font>';
+	else {
+		fontStr='o3_'+whichString+'font';
+		fontColor='o3_'+((whichString=='caption')? 'cap' : whichString)+'color';
+		return (hasDims&&!olNs4) ? (isClose ? '<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">' : '<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">') : '<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7 ? '7' : fontSizeStr)+'">';
+	}
+}
+
+// Quotes Multi word font names; needed for CSS Standards adherence in font-family
+function quoteMultiNameFonts(theFont) {
+	var v, pM=theFont.split(',');
+	for (var i=0; i<pM.length; i++) {
+		v=pM[i];
+		v=v.replace(/^\s+/,'').replace(/\s+$/,'');
+		if(/\s/.test(v) && !/['"]/.test(v)) {
+			v="\'"+v+"\'";
+			pM[i]=v;
+		}
+	}
+	return pM.join();
+}
+
+// dummy function which will be overridden 
+function isExclusive(args) {
+	return false;
+}
+
+// Sets cellpadding style string value
+function setCellPadStr(parameter) {
+	var Str='', j=0, ary = new Array(), top, bottom, left, right;
+
+	Str+='padding: ';
+	ary=parameter.replace(/\s+/g,'').split(',');
+
+	switch(ary.length) {
+		case 2:
+			top=bottom=ary[j];
+			left=right=ary[++j];
+			break;
+		case 3:
+			top=ary[j];
+			left=right=ary[++j];
+			bottom=ary[++j];
+			break;
+		case 4:
+			top=ary[j];
+			right=ary[++j];
+			bottom=ary[++j];
+			left=ary[++j];
+			break;
+	}
+
+	Str+= ((ary.length==1) ? ary[0] + 'px;' : top + 'px ' + right + 'px ' + bottom + 'px ' + left + 'px;');
+
+	return Str;
+}
+
+// function will delay close by time milliseconds
+function hideDelay(time) {
+	if (time&&!o3_delay) {
+		if (o3_timerid > 0) clearTimeout(o3_timerid);
+
+		o3_timerid=setTimeout("cClick()",(o3_timeout=time));
+	}
+}
+
+// Was originally in the placeLayer() routine; separated out for future ease
+function horizontalPlacement(browserWidth, horizontalScrollAmount, widthFix) {
+	var placeX, iwidth=browserWidth, winoffset=horizontalScrollAmount;
+	var parsedWidth = parseInt(o3_width);
+
+	if (o3_fixx > -1 || o3_relx != null) {
+		// Fixed position
+		placeX=(o3_relx != null ? ( o3_relx < 0 ? winoffset +o3_relx+ iwidth - parsedWidth - widthFix : winoffset+o3_relx) : o3_fixx);
+	} else {  
+		// If HAUTO, decide what to use.
+		if (o3_hauto == 1) {
+			if ((o3_x - winoffset) > (iwidth / 2)) {
+				o3_hpos = LEFT;
+			} else {
+				o3_hpos = RIGHT;
+			}
+		}  		
+
+		// From mouse
+		if (o3_hpos == CENTER) { // Center
+			placeX = o3_x+o3_offsetx-(parsedWidth/2);
+
+			if (placeX < winoffset) placeX = winoffset;
+		}
+
+		if (o3_hpos == RIGHT) { // Right
+			placeX = o3_x+o3_offsetx;
+
+			if ((placeX+parsedWidth) > (winoffset+iwidth - widthFix)) {
+				placeX = iwidth+winoffset - parsedWidth - widthFix;
+				if (placeX < 0) placeX = 0;
+			}
+		}
+		if (o3_hpos == LEFT) { // Left
+			placeX = o3_x-o3_offsetx-parsedWidth;
+			if (placeX < winoffset) placeX = winoffset;
+		}  	
+
+		// Snapping!
+		if (o3_snapx > 1) {
+			var snapping = placeX % o3_snapx;
+
+			if (o3_hpos == LEFT) {
+				placeX = placeX - (o3_snapx+snapping);
+			} else {
+				// CENTER and RIGHT
+				placeX = placeX+(o3_snapx - snapping);
+			}
+
+			if (placeX < winoffset) placeX = winoffset;
+		}
+	}	
+
+	return placeX;
+}
+
+// was originally in the placeLayer() routine; separated out for future ease
+function verticalPlacement(browserHeight,verticalScrollAmount) {
+	var placeY, iheight=browserHeight, scrolloffset=verticalScrollAmount;
+	var parsedHeight=(o3_aboveheight ? parseInt(o3_aboveheight) : (olNs4 ? over.clip.height : over.offsetHeight));
+
+	if (o3_fixy > -1 || o3_rely != null) {
+		// Fixed position
+		placeY=(o3_rely != null ? (o3_rely < 0 ? scrolloffset+o3_rely+iheight - parsedHeight : scrolloffset+o3_rely) : o3_fixy);
+	} else {
+		// If VAUTO, decide what to use.
+		if (o3_vauto == 1) {
+			if ((o3_y - scrolloffset) > (iheight / 2) && o3_vpos == BELOW && (o3_y + parsedHeight + o3_offsety - (scrolloffset + iheight) > 0)) {
+				o3_vpos = ABOVE;
+			} else if (o3_vpos == ABOVE && (o3_y - (parsedHeight + o3_offsety) - scrolloffset < 0)) {
+				o3_vpos = BELOW;
+			}
+		}
+
+		// From mouse
+		if (o3_vpos == ABOVE) {
+			if (o3_aboveheight == 0) o3_aboveheight = parsedHeight; 
+
+			placeY = o3_y - (o3_aboveheight+o3_offsety);
+			if (placeY < scrolloffset) placeY = scrolloffset;
+		} else {
+			// BELOW
+			placeY = o3_y+o3_offsety;
+		} 
+
+		// Snapping!
+		if (o3_snapy > 1) {
+			var snapping = placeY % o3_snapy;  			
+
+			if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
+				placeY = placeY - (o3_snapy+snapping);
+			} else {
+				placeY = placeY+(o3_snapy - snapping);
+			} 			
+
+			if (placeY < scrolloffset) placeY = scrolloffset;
+		}
+	}
+
+	return placeY;
+}
+
+// checks positioning flags
+function checkPositionFlags() {
+	if (olHautoFlag) olHautoFlag = o3_hauto=0;
+	if (olVautoFlag) olVautoFlag = o3_vauto=0;
+	return true;
+}
+
+// get Browser window width
+function windowWidth() {
+	var w;
+	if (o3_frame.innerWidth) w=o3_frame.innerWidth;
+	else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth')) 
+		w=eval('o3_frame.'+docRoot+'.clientWidth');
+	return w;			
+}
+
+// create the div container for popup content if it doesn't exist
+function createDivContainer(id,frm,zValue) {
+	id = (id || 'overDiv'), frm = (frm || o3_frame), zValue = (zValue || 1000);
+	var objRef, divContainer = layerReference(id);
+
+	if (divContainer == null) {
+		if (olNs4) {
+			divContainer = frm.document.layers[id] = new Layer(window.innerWidth, frm);
+			objRef = divContainer;
+		} else {
+			var body = (olIe4 ? frm.document.all.tags('BODY')[0] : frm.document.getElementsByTagName("BODY")[0]);
+			if (olIe4&&!document.getElementById) {
+				body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>');
+				divContainer=layerReference(id);
+			} else {
+				divContainer = frm.document.createElement("DIV");
+				divContainer.id = id;
+				body.appendChild(divContainer);
+			}
+			objRef = divContainer.style;
+		}
+
+		objRef.position = 'absolute';
+		objRef.visibility = 'hidden';
+		objRef.zIndex = zValue;
+		if (olIe4&&!olOp) objRef.left = objRef.top = '0px';
+		else objRef.left = objRef.top =  -10000 + (!olNs4 ? 'px' : 0);
+	}
+
+	return divContainer;
+}
+
+// get reference to a layer with ID=id
+function layerReference(id) {
+	return (olNs4 ? o3_frame.document.layers[id] : (document.all ? o3_frame.document.all[id] : o3_frame.document.getElementById(id)));
+}
+////////
+//  UTILITY FUNCTIONS
+////////
+
+// Checks if something is a function.
+function isFunction(fnRef) {
+	var rtn = true;
+
+	if (typeof fnRef == 'object') {
+		for (var i = 0; i < fnRef.length; i++) {
+			if (typeof fnRef[i]=='function') continue;
+			rtn = false;
+			break;
+		}
+	} else if (typeof fnRef != 'function') {
+		rtn = false;
+	}
+	
+	return rtn;
+}
+
+// Converts an array into an argument string for use in eval.
+function argToString(array, strtInd, argName) {
+	var jS = strtInd, aS = '', ar = array;
+	argName=(argName ? argName : 'ar');
+	
+	if (ar.length > jS) {
+		for (var k = jS; k < ar.length; k++) aS += argName+'['+k+'], ';
+		aS = aS.substring(0, aS.length-2);
+	}
+	
+	return aS;
+}
+
+// Places a hook in the correct position in a hook point.
+function reOrder(hookPt, fnRef, order) {
+	var newPt = new Array(), match, i, j;
+
+	if (!order || typeof order == 'undefined' || typeof order == 'number') return hookPt;
+	
+	if (typeof order=='function') {
+		if (typeof fnRef=='object') {
+			newPt = newPt.concat(fnRef);
+		} else {
+			newPt[newPt.length++]=fnRef;
+		}
+		
+		for (i = 0; i < hookPt.length; i++) {
+			match = false;
+			if (typeof fnRef == 'function' && hookPt[i] == fnRef) {
+				continue;
+			} else {
+				for(j = 0; j < fnRef.length; j++) if (hookPt[i] == fnRef[j]) {
+					match = true;
+					break;
+				}
+			}
+			if (!match) newPt[newPt.length++] = hookPt[i];
+		}
+
+		newPt[newPt.length++] = order;
+
+	} else if (typeof order == 'object') {
+		if (typeof fnRef == 'object') {
+			newPt = newPt.concat(fnRef);
+		} else {
+			newPt[newPt.length++] = fnRef;
+		}
+		
+		for (j = 0; j < hookPt.length; j++) {
+			match = false;
+			if (typeof fnRef == 'function' && hookPt[j] == fnRef) {
+				continue;
+			} else {
+				for (i = 0; i < fnRef.length; i++) if (hookPt[j] == fnRef[i]) {
+					match = true;
+					break;
+				}
+			}
+			if (!match) newPt[newPt.length++]=hookPt[j];
+		}
+
+		for (i = 0; i < newPt.length; i++) hookPt[i] = newPt[i];
+		newPt.length = 0;
+		
+		for (j = 0; j < hookPt.length; j++) {
+			match = false;
+			for (i = 0; i < order.length; i++) {
+				if (hookPt[j] == order[i]) {
+					match = true;
+					break;
+				}
+			}
+			if (!match) newPt[newPt.length++] = hookPt[j];
+		}
+		newPt = newPt.concat(order);
+	}
+
+	hookPt = newPt;
+
+	return hookPt;
+}
+
+////////
+//  PLUGIN ACTIVATION FUNCTIONS
+////////
+
+// Runs plugin functions to set runtime variables.
+function setRunTimeVariables(){
+	if (typeof runTime != 'undefined' && runTime.length) {
+		for (var k = 0; k < runTime.length; k++) {
+			runTime[k]();
+		}
+	}
+}
+
+// Runs plugin functions to parse commands.
+function parseCmdLine(pf, i, args) {
+	if (typeof cmdLine != 'undefined' && cmdLine.length) { 
+		for (var k = 0; k < cmdLine.length; k++) { 
+			var j = cmdLine[k](pf, i, args);
+			if (j >- 1) {
+				i = j;
+				break;
+			}
+		}
+	}
+
+	return i;
+}
+
+// Runs plugin functions to do things after parse.
+function postParseChecks(pf,args){
+	if (typeof postParse != 'undefined' && postParse.length) {
+		for (var k = 0; k < postParse.length; k++) {
+			if (postParse[k](pf,args)) continue;
+			return false;  // end now since have an error
+		}
+	}
+	return true;
+}
+
+
+////////
+//  PLUGIN REGISTRATION FUNCTIONS
+////////
+
+// Registers commands and creates constants.
+function registerCommands(cmdStr) {
+	if (typeof cmdStr!='string') return;
+
+	var pM = cmdStr.split(',');
+	pms = pms.concat(pM);
+
+	for (var i = 0; i< pM.length; i++) {
+		eval(pM[i].toUpperCase()+'='+pmCount++);
+	}
+}
+
+// Registers no-parameter commands
+function registerNoParameterCommands(cmdStr) {
+	if (!cmdStr && typeof cmdStr != 'string') return;
+	pmt=(!pmt) ? cmdStr : pmt + ',' + cmdStr;
+}
+
+// Register a function to hook at a certain point.
+function registerHook(fnHookTo, fnRef, hookType, optPm) {
+	var hookPt, last = typeof optPm;
+	
+	if (fnHookTo == 'plgIn'||fnHookTo == 'postParse') return;
+	if (typeof hookPts[fnHookTo] == 'undefined') hookPts[fnHookTo] = new FunctionReference();
+
+	hookPt = hookPts[fnHookTo];
+
+	if (hookType != null) {
+		if (hookType == FREPLACE) {
+			hookPt.ovload = fnRef;  // replace normal overlib routine
+			if (fnHookTo.indexOf('ol_content_') > -1) hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef; 
+
+		} else if (hookType == FBEFORE || hookType == FAFTER) {
+			var hookPt=(hookType == 1 ? hookPt.before : hookPt.after);
+
+			if (typeof fnRef == 'object') {
+				hookPt = hookPt.concat(fnRef);
+			} else {
+				hookPt[hookPt.length++] = fnRef;
+			}
+
+			if (optPm) hookPt = reOrder(hookPt, fnRef, optPm);
+
+		} else if (hookType == FALTERNATE) {
+			if (last=='number') hookPt.alt[pms[optPm-1-pmStart]] = fnRef;
+		} else if (hookType == FCHAIN) {
+			hookPt = hookPt.chain; 
+			if (typeof fnRef=='object') hookPt=hookPt.concat(fnRef); // add other functions 
+			else hookPt[hookPt.length++]=fnRef;
+		}
+
+		return;
+	}
+}
+
+// Register a function that will set runtime variables.
+function registerRunTimeFunction(fn) {
+	if (isFunction(fn)) {
+		if (typeof fn == 'object') {
+			runTime = runTime.concat(fn);
+		} else {
+			runTime[runTime.length++] = fn;
+		}
+	}
+}
+
+// Register a function that will handle command parsing.
+function registerCmdLineFunction(fn){
+	if (isFunction(fn)) {
+		if (typeof fn == 'object') {
+			cmdLine = cmdLine.concat(fn);
+		} else {
+			cmdLine[cmdLine.length++] = fn;
+		}
+	}
+}
+
+// Register a function that does things after command parsing. 
+function registerPostParseFunction(fn){
+	if (isFunction(fn)) {
+		if (typeof fn == 'object') {
+			postParse = postParse.concat(fn);
+		} else {
+			postParse[postParse.length++] = fn;
+		}
+	}
+}
+
+////////
+//  PLUGIN REGISTRATION FUNCTIONS
+////////
+
+// Runs any hooks registered.
+function runHook(fnHookTo, hookType) {
+	var l = hookPts[fnHookTo], k, rtnVal = null, optPm, arS, ar = runHook.arguments;
+
+	if (hookType == FREPLACE) {
+		arS = argToString(ar, 2);
+
+		if (typeof l == 'undefined' || !(l = l.ovload)) rtnVal = eval(fnHookTo+'('+arS+')');
+		else rtnVal = eval('l('+arS+')');
+
+	} else if (hookType == FBEFORE || hookType == FAFTER) {
+		if (typeof l != 'undefined') {
+			l=(hookType == 1 ? l.before : l.after);
+	
+			if (l.length) {
+				arS = argToString(ar, 2);
+				for (var k = 0; k < l.length; k++) eval('l[k]('+arS+')');
+			}
+		}
+	} else if (hookType == FALTERNATE) {
+		optPm = ar[2];
+		arS = argToString(ar, 3);
+
+		if (typeof l == 'undefined' || (l = l.alt[pms[optPm-1-pmStart]]) == 'undefined') {
+			rtnVal = eval(fnHookTo+'('+arS+')');
+		} else {
+			rtnVal = eval('l('+arS+')');
+		}
+	} else if (hookType == FCHAIN) {
+		arS=argToString(ar,2);
+		l=l.chain;
+
+		for (k=l.length; k > 0; k--) if((rtnVal=eval('l[k-1]('+arS+')'))!=void(0)) break;
+	}
+
+	return rtnVal;
+}
+
+////////
+// OBJECT CONSTRUCTORS
+////////
+
+// Object for handling hooks.
+function FunctionReference() {
+	this.ovload = null;
+	this.before = new Array();
+	this.after = new Array();
+	this.alt = new Array();
+	this.chain = new Array();
+}
+
+// Object for simple access to the overLIB version used.
+// Examples: simpleversion:351 major:3 minor:5 revision:1
+function Info(version, prerelease) {
+	this.version = version;
+	this.prerelease = prerelease;
+
+	this.simpleversion = Math.round(this.version*100);
+	this.major = parseInt(this.simpleversion / 100);
+	this.minor = parseInt(this.simpleversion / 10) - this.major * 10;
+	this.revision = parseInt(this.simpleversion) - this.major * 100 - this.minor * 10;
+	this.meets = meets;
+}
+
+// checks for Core Version required
+function meets(reqdVersion) {
+	return (!reqdVersion) ? false : this.simpleversion >= Math.round(100*parseFloat(reqdVersion));
+}
+
+
+////////
+// STANDARD REGISTRATIONS
+////////
+registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSOFF);
+registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSOFF);
+registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSOFF);
+registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSCLASS);
+registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSCLASS);
+registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSCLASS);
+registerPostParseFunction(checkPositionFlags);
+registerHook("hideObject", nbspCleanup, FAFTER);
+registerHook("horizontalPlacement", horizontalPlacement, FCHAIN);
+registerHook("verticalPlacement", verticalPlacement, FCHAIN);
+if (olNs4||(olIe5&&isMac)||olKq) olLoaded=1;
+registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
+///////
+// ESTABLISH MOUSECAPTURING
+///////
+
+// Capture events, alt. diffuses the overlib function.
+var olCheckMouseCapture=true;
+if ((olNs4 || olNs6 || olIe4)) {
+	olMouseCapture();
+} else {
+	overlib = no_overlib;
+	nd = no_overlib;
+	ver3fix = true;
+}
Index: trunk/include/jquery/simplbox.js
===================================================================
--- trunk/include/jquery/simplbox.js	(nonexistent)
+++ trunk/include/jquery/simplbox.js	(revision 2)
@@ -0,0 +1,521 @@
+/***
+* SimplBox - v1.0.0 - 2014.08.04
+* Author: (c) Dendrochronology - @Dendrochronolo - http://genert.laal.ee/
+* Available for use under the MIT License.
+***/
+;(function (window, document, undefined) {
+    "use strict";
+
+    var docElem = document.documentElement,
+        bodyElem = document.getElementsByTagName("body")[0],
+
+        FALSE = false,
+        ATTACHEVENT = "attachEvent",
+        ADDEVENTLISTENER = "addEventListener",
+
+        isEventListener = ADDEVENTLISTENER in document;
+
+    function SimplBox (p_Elements, p_Options) {
+        var base = this;
+
+        base.m_Elements = p_Elements;
+        base.m_UserOptions = p_Options || {};
+        base.m_Options = {};
+
+        base.m_CurrentTargetElements = FALSE;
+        base.m_CurrentTargetElementsLength = FALSE;
+        base.m_CurrentTargetNumber = FALSE;
+        base.m_CurrentImageElement = FALSE;
+        base.m_InProgress = FALSE;
+        base.m_InstalledImageBox = FALSE;
+        base.m_Alt = FALSE;
+        base.m_AnimateDone = FALSE; // For browsers that do not support hardware acceleration.
+
+        var __construct = function () {
+            for (var i in SimplBox.options) {
+                if (base.m_UserOptions.hasOwnProperty(i)) {
+                    base.m_Options[i] = base.m_UserOptions[i];
+                } else {
+                    base.m_Options[i] = SimplBox.options[i];
+                }
+            }
+        }();
+    }
+
+    SimplBox.prototype = {
+        init: function () {
+            var base = this;
+
+            // API start
+            base.API_AddEvent = base.addEvent;
+            base.API_RemoveImageElement = base.removeImageElement;
+            // API end
+
+            base.checkBrowser();
+            base.addEvents();
+        },
+
+        checkBrowser: function () {
+            var base = this,
+                isTouch = "ontouchstart" in window || window.navigator.msMaxTouchPoints || navigator.maxTouchPoints || FALSE,
+                hasPointers = isTouch && (window.navigator.pointerEnabled || window.navigator.msPointerEnabled);
+
+            base.browser = {
+                "isHardwareAccelerated": (base.getcss3prop("transition") !== "undefined" ? true : FALSE),
+                "isTouch": isTouch,
+                "hasPointers": hasPointers
+            };
+        },
+
+        addEvents: function () {
+            var base = this;
+
+            // Add click events on base elements.
+            for (var i = 0; i < base.m_Elements.length; i++) {
+                (function (i) {
+                    base.addEvent(base.m_Elements[i], (base.browser.hasPointers ? "pointerup MSPointerUp" : "click"), function (event) {
+                        if (event.preventDefault) {
+                            event.preventDefault();
+                            event.stopPropagation();
+                        }
+
+                        if (window.event) {
+                            window.event.returnValue = FALSE;
+                            window.event.cancelBubble = FALSE;
+                        }
+
+                        if (base.isFunction(base.m_Options.onStart())) {
+                            base.m_Options.onStart(this);
+                        }
+
+                        base.m_CurrentTargetElements = base.m_Elements;
+                        base.m_CurrentTargetElementsLength = base.m_Elements.length;
+                        base.m_CurrentTargetNumber = i;
+
+                        base.openImage(base.m_Elements[base.m_CurrentTargetNumber]);
+                    });
+                })(i);
+            }
+
+            base.addEvent(window, "resize", function () {
+                base.calculateImagePositionAndSize(base.m_CurrentImageElement, true);
+            });
+
+            // Add keyboard support.
+            base.leftAnimationFunction = function () {
+                if (base.m_CurrentTargetNumber - 1 < 0) {
+                    base.openImage(base.m_CurrentTargetElements[base.m_CurrentTargetElementsLength - 1], "left");
+                    base.m_CurrentTargetNumber = base.m_CurrentTargetElementsLength - 1;
+                } else {
+                    base.openImage(base.m_CurrentTargetElements[base.m_CurrentTargetNumber - 1], "left");
+                    base.m_CurrentTargetNumber = base.m_CurrentTargetNumber - 1;
+                }
+            };
+
+            base.rightAnimationFunction = function () {
+                if (base.m_CurrentTargetNumber + 1 > base.m_CurrentTargetElementsLength - 1) {
+                    base.openImage(base.m_CurrentTargetElements[0], "right");
+                    base.m_CurrentTargetNumber = 0;
+                } else {
+                    base.openImage(base.m_CurrentTargetElements[base.m_CurrentTargetNumber+1], "right");
+                    base.m_CurrentTargetNumber = base.m_CurrentTargetNumber + 1;
+                }
+            };
+
+            if (base.m_Options.enableKeyboard) {
+                var keyBoard = {
+                    left: 37,
+                    right: 39,
+                    esc: 27
+                };
+
+                base.addEvent(window, "keydown", function (event) {
+                    if (!base.m_CurrentImageElement || base.m_InProgress) {
+                        return;
+                    }
+
+                    if (event.preventDefault) {
+                        event.preventDefault();
+                        event.stopPropagation();
+                    }
+
+                    if (window.event) {
+                        var event = window.event;
+                        window.event.returnValue = FALSE;
+                        window.event.cancelBubble = FALSE;
+                    }
+
+                    var keyCode = event.which || event.keyCode;
+
+                    switch (keyCode) {
+                        case keyBoard.esc: base.removeImageElement(); return FALSE;
+                        case keyBoard.right: base.rightAnimationFunction(); return FALSE;
+                        case keyBoard.left: base.leftAnimationFunction(); return FALSE;
+                    }
+                });
+            }
+
+            if (base.m_Options.quitOnDocumentClick) {
+                base.addEvent(isEventListener ? bodyElem : document, "click", function (event) {
+                    if (base.m_InProgress) {
+                        return FALSE;
+                    }
+
+                    if (event.preventDefault) {
+                        event.preventDefault();
+                    }
+
+                    if (window.event) {
+                        var event = window.event;
+                    }
+
+                    var target = event.target ? event.target : event.srcElement;
+
+                    if (target && target.id !== base.m_Options.imageElementId && base.m_InstalledImageBox && !base.m_InProgress) {
+                        base.removeImageElement();
+                        return FALSE;
+                    }
+                });
+            }
+        },
+
+        openImage: function (p_Source, p_Direction) {
+            var base = this,
+                documentFragment = document.createDocumentFragment(),
+                imageElement = document.createElement("img"),
+                imageElementControl = document.getElementById(base.m_Options.imageElementId);
+
+            // If no 1 argument or 1 argument's tagname is not A, return.
+            if (!p_Source || p_Source.tagName.toLowerCase() !== "a") {
+                return;
+            }
+
+            if (imageElementControl) {
+                bodyElem.removeChild(imageElementControl);
+                base.m_CurrentImageElement = FALSE;
+                base.m_InstalledImageBox = FALSE;
+            }
+
+            base.m_Alt = p_Source.firstChild.getAttribute("alt");
+            base.m_InProgress = true;
+
+            // Check if it funcion and return.
+            if (base.isFunction(base.m_Options.onImageLoadStart())) {
+                base.m_Options.onImageLoadStart();
+            }
+
+            // Set direction
+            if (typeof p_Direction !== "undefined") {
+                switch (p_Direction) {
+                    case "left": p_Direction = -1; break;
+                    case "right": p_Direction = 1; break;
+                }
+            }
+
+            // Set attributes of new image element.
+            imageElement.setAttribute("id", base.m_Options.imageElementId);
+            imageElement.setAttribute("src", p_Source.getAttribute("href"));
+            imageElement.setAttribute("alt", base.m_Alt);
+            imageElement.setAttribute("style", "position: fixed; cursor: pointer; opacity: 0;") ;
+
+            // Append to fragment and append fragment to body.
+            documentFragment.appendChild(imageElement);
+            bodyElem.appendChild(documentFragment);
+
+            // Set current image element.
+            base.m_CurrentImageElement = document.getElementById(base.m_Options.imageElementId);
+            base.m_CurrentImageElement.style.filter = 'alpha(opacity=0)'; // IE 8 opacity
+
+            if (base.browser.isHardwareAccelerated) {
+                if (typeof p_Direction !== "undefined") {
+                    base.m_CurrentImageElement.style[base.getcss3prop("transform")] = "translateX(" + (p_Direction * base.m_Options.fadeInDistance) + "px)";
+                }
+                base.m_CurrentImageElement.style[base.getcss3prop("transition")] = "all " + base.m_Options.animationSpeed + "ms ease";
+            }
+
+            // Calculate image position and size and set them.
+            base.calculateImagePositionAndSize(base.m_CurrentImageElement, FALSE, p_Direction);
+                    
+            // Add event listener.
+            if (base.m_Options.quitOnImageClick) {
+                base.addEvent(base.m_CurrentImageElement, "click", function (event) {
+                    if (event.preventDefault) {
+                        event.preventDefault();
+                    }
+
+                    if (window.event) {
+                        window.event.returnValue = FALSE;
+                    }
+
+                    base.removeImageElement();
+                });
+            }
+
+            // Touch events.
+            if (base.browser.isTouch) { // This check fixes bug in IE 10 & 11 because these browsers have pointers for odd reason(s).
+                var touchXStart = -1,
+                    touchXEnd = -1,
+                    swipeDifference = 0;
+            
+                base.addEvent(base.m_CurrentImageElement, "touchstart pointerdown MSPointerDown", function (event) {
+                    event.preventDefault();
+                    touchXStart = event.pageX || event.touches[0].pageX;
+                });
+            
+                base.addEvent(base.m_CurrentImageElement, "touchmove pointermove MSPointerMove", function (event) {
+                    event.preventDefault();
+                    touchXEnd = event.pageX || event.touches[0].pageX;
+                    swipeDifference = touchXStart - touchXEnd;
+            
+                    if (base.browser.isHardwareAccelerated) {
+                        base.m_CurrentImageElement.style[base.getcss3prop("transition")] = "none";
+                        base.m_CurrentImageElement.style[base.getcss3prop("transform")] = "translateX(" + -swipeDifference + "px)";
+                    }
+                });
+            
+                base.addEvent(base.m_CurrentImageElement, "touchend pointerup pointercancel MSPointerUp MSPointerCancel", function (event) {
+                    event.preventDefault();
+            
+                    if (Math.abs(swipeDifference) > 75) {
+                        if (swipeDifference < 0) {
+                            base.leftAnimationFunction();
+                        } else {
+                            base.rightAnimationFunction();
+                        }
+                    } else {
+                        base.m_CurrentImageElement.style[base.getcss3prop("transform")] = "translateX(0px)";
+                    }
+                });
+            }
+        },
+
+        calculateImagePositionAndSize: function (p_Element, p_Resize) {
+            var base = this,
+                temporaryImageObject = new Image(),
+                imageWidth = 0,
+                imageHeight = 0,
+                imageSizeRatio = 0;
+
+            // If no element provided, quit.
+            if (!p_Element) {
+                return;
+            }
+
+            base.m_ImageSource = p_Element.getAttribute("src"); // Get element's source attribute for loading image.
+            base.m_ScreenHeight = window.innerHeight || docElem.offsetHeight; // Get window height.
+            base.m_ScreenWidth = window.innerWidth || docElem.offsetWidth; // Get window width.
+
+            temporaryImageObject.onload = function () {
+                var thisImageWidth = this.width,
+                    thisImageHeight = this.height;
+
+                imageWidth = thisImageWidth;
+                imageHeight = thisImageHeight;
+                imageSizeRatio = imageWidth / imageHeight;
+
+                // Height of image is too big to fit in viewport
+                if (Math.floor(base.m_ScreenWidth / imageSizeRatio) > base.m_ScreenHeight) {
+                    imageWidth = base.m_ScreenHeight * imageSizeRatio * base.m_Options.imageSize;
+                    imageHeight = base.m_ScreenHeight * base.m_Options.imageSize;
+                } else { // Width of image is too big to fit in viewport
+                    imageWidth = base.m_ScreenWidth * base.m_Options.imageSize;
+                    imageHeight = base.m_ScreenWidth / imageSizeRatio * base.m_Options.imageSize;
+                }
+
+                if (imageWidth > thisImageWidth) {
+                    imageWidth = thisImageWidth;
+                }
+
+                if (imageHeight > thisImageHeight) {
+                    imageHeight = thisImageHeight;
+                }
+
+                // Set style attributes.
+                p_Element.style.top = ((base.m_ScreenHeight - imageHeight) / 2) + "px";
+                p_Element.style.left = ((base.m_ScreenWidth - imageWidth) / 2) + "px";
+                p_Element.style.width = Math.floor(imageWidth) + "px";
+                p_Element.style.height = Math.floor(imageHeight) + "px";
+
+                if (!p_Resize) {
+                    setTimeout(function () {
+                        if (base.browser.isHardwareAccelerated) {
+                            p_Element.style.opacity = 1;
+                            p_Element.style[base.getcss3prop("transform")] = "translateX(0px)";
+                        } else {
+                            var toOpacity = 1;
+
+                            base.animate({
+                                delay: 16,
+                                duration: base.m_Options.animationSpeed,
+                                delta: base.linear,
+                                step: function (delta) {
+                                    p_Element.style.opacity = (toOpacity * delta);
+                                    p_Element.style.filter = "alpha(opacity=" + ((toOpacity * delta) * 100 ) + ")"; 
+                                }
+                            });
+                        }
+
+                        base.m_InProgress = FALSE;
+                        base.m_InstalledImageBox = true;
+
+                        if (base.isFunction(base.m_Options.onImageLoadEnd())) {
+                            base.m_Options.onImageLoadEnd(p_Element);
+                        }
+                    }, 100);
+                }
+            };
+
+            // Must be last because otherwise onload function won't be load.
+            temporaryImageObject.src = base.m_ImageSource;
+        },
+
+        removeImageElement: function () {
+            var base = this;
+
+            if (!base.m_CurrentImageElement) {
+                return;
+            }
+
+            if (base.isFunction(base.m_Options.onEnd())) {
+                base.m_Options.onEnd();
+            }
+
+            if (base.m_InProgress) {
+                if (base.isFunction(base.m_Options.onImageLoadEnd())) {
+                    base.m_Options.onImageLoadEnd(p_Element);
+                }
+            }
+
+            if (base.browser.isHardwareAccelerated) {
+                base.m_CurrentImageElement.style.opacity = 0;
+                base.m_CurrentImageElement.style.transition = "opacity 250ms ease";
+            } else {
+                var toOpacity = 0;
+
+                base.animate({
+                    delay: 16,
+                    duration: 250,
+                    delta: base.linear,
+                    step: function (delta) {
+                        base.m_CurrentImageElement.style.opacity = (toOpacity * delta);
+                        base.m_CurrentImageElement.style.filter = "alpha(opacity=" + ((toOpacity * delta) * 100 ) + ")"; // IE 8
+                    }
+                });
+            }
+
+            setTimeout(function () {
+                if (base.m_CurrentImageElement) {
+                    base.m_CurrentImageElement.parentNode.removeChild(base.m_CurrentImageElement);
+                }
+
+                base.m_CurrentImageElement = FALSE;
+                base.m_InstalledImageBox = FALSE;
+            }, base.browser.isHardwareAccelerated ? 250 : 350); // Duo animate delay, add 100ms.
+        },
+
+        isFunction: function (p_Function) {
+            return !!(p_Function && p_Function.constructor && p_Function.call && p_Function.apply);
+        },
+
+        addEvent: function (p_Element, p_Events, p_Callback) {
+            var i, j;
+            p_Events = p_Events.split(" ");
+
+            if (isEventListener) {
+                if ((p_Element && !(p_Element instanceof Array && !p_Element.length)) && (p_Element.length !== 0) || p_Element === window) {
+                    for (i = 0; i < p_Events.length; i++) {
+                        p_Element[ADDEVENTLISTENER](p_Events[i], p_Callback, FALSE);
+                    }
+                } else if (p_Element && p_Element[0] !== "undefined") {
+                    for (i = 0; i < p_Element.length; i++) {
+                        for (j = 0; j < p_Events.length; j++) {
+                            p_Element[i][ADDEVENTLISTENER](p_Events[j], p_Callback, FALSE);
+                        }
+                    }
+                }
+            } else {
+                for (i = 0; i < p_Events.length; i++) {
+                    if (p_Events[i].indexOf("keydown") !== -1) {
+                        document[ATTACHEVENT]("on" + p_Events[i], p_Callback);
+                    } else {
+                        if ((p_Element && !(p_Element instanceof Array && !p_Element.length)) && (p_Element.length !== 0) || p_Element === window) {
+                            p_Element[ATTACHEVENT]("on" + p_Events[i], p_Callback);
+                        } else if (p_Element && p_Element[0] !== "undefined") {
+                            for (j = 0; j < p_Element.length; j++) {
+                                p_Element[j][ATTACHEVENT](p_Events[i], p_Callback);
+                            }
+                        }
+                    }
+                }
+            }
+        },
+
+        animate: function (p_Options) {
+            var base = this,
+                start = new Date();
+
+            var id = setInterval(function () {
+                var timePassed = new Date() - start,
+                    progress = timePassed / p_Options.duration;
+
+                if (progress > 1) {
+                    progress = 1;
+                }
+    
+                var delta = p_Options.delta(progress);
+                p_Options.step(delta);
+    
+                if (progress == 1) {
+                    base.m_AnimateDone = true;
+                    clearInterval(id);
+                }
+            }, p_Options.delay || 10);
+        },
+
+        linear: function (progress) {
+            return progress;
+        },
+
+        getcss3prop: function (p_CSSProp) {
+            var vendors = ["", "-moz-", "-webkit-", "-o-", "-ms-", "-khtml-"],
+                camelCase = function (str) {
+                    return str.replace(/\-([a-z])/gi, function (match, p1) {
+                        return p1.toUpperCase(); 
+                    });
+                };
+
+            for (var i = 0; i < vendors.length; i++) {
+                var css3propcamel = camelCase(vendors[i] + p_CSSProp)
+
+                if (css3propcamel.substr(0,2) == "Ms") {
+                    css3propcamel = "m" + css3propcamel.substr(1); 
+                }
+
+                if (css3propcamel in docElem.style) {
+                    return css3propcamel;
+                }
+            }
+
+            return "undefined";
+        }
+    };
+
+    SimplBox.options = {
+        imageElementId: "simplbox", 
+
+        fadeInDistance: 100,
+        animationSpeed: 350,
+        imageSize: 0.8,
+
+        quitOnImageClick: true,
+        quitOnDocumentClick: true,
+        enableKeyboard: true,
+
+        onImageLoadStart: function () {},
+        onImageLoadEnd: function () {},
+        onStart: function () {},
+        onEnd: function () {}
+    };
+
+    window.SimplBox = SimplBox;
+})(window, document); 
\ No newline at end of file
Index: trunk/include/jquery/simplbox.min.js
===================================================================
--- trunk/include/jquery/simplbox.min.js	(nonexistent)
+++ trunk/include/jquery/simplbox.min.js	(revision 2)
@@ -0,0 +1,6 @@
+/***
+* SimplBox - v1.0.0 - 2014.08.04
+* Author: (c) Dendrochronology - @Dendrochronolo - http://genert.laal.ee/
+* Available for use under the MIT License.
+***/
+!(function(f,h,t){function l(a,c){this.m_Elements=a;this.m_UserOptions=c||{};this.m_Options={};this.m_AnimateDone=this.m_Alt=this.m_InstalledImageBox=this.m_InProgress=this.m_CurrentImageElement=this.m_CurrentTargetNumber=this.m_CurrentTargetElementsLength=this.m_CurrentTargetElements=g;for(var b in l.options)this.m_UserOptions.hasOwnProperty(b)?this.m_Options[b]=this.m_UserOptions[b]:this.m_Options[b]=l.options[b]}var n=h.documentElement,p=h.getElementsByTagName("body")[0],g=!1,q="addEventListener"in h;l.prototype={init:function(){this.API_AddEvent=this.addEvent;this.API_RemoveImageElement=this.removeImageElement;this.checkBrowser();this.addEvents()},checkBrowser:function(){var a="ontouchstart"in f||f.navigator.msMaxTouchPoints||navigator.maxTouchPoints||g,c=a&&(f.navigator.pointerEnabled||f.navigator.msPointerEnabled);this.browser={isHardwareAccelerated:"undefined"!==this.getcss3prop("transition")?!0:g,isTouch:a,hasPointers:c}},addEvents:function(){for(var a=this,c=0;c<a.m_Elements.length;c++)(function(b){a.addEvent(a.m_Elements[b], a.browser.hasPointers?"pointerup MSPointerUp":"click",function(c){c.preventDefault&&(c.preventDefault(),c.stopPropagation());f.event&&(f.event.returnValue=g,f.event.cancelBubble=g);if(a.isFunction(a.m_Options.onStart()))a.m_Options.onStart(this);a.m_CurrentTargetElements=a.m_Elements;a.m_CurrentTargetElementsLength=a.m_Elements.length;a.m_CurrentTargetNumber=b;a.openImage(a.m_Elements[a.m_CurrentTargetNumber])})})(c);a.addEvent(f,"resize",function(){a.calculateImagePositionAndSize(a.m_CurrentImageElement, !0)});a.leftAnimationFunction=function(){0>a.m_CurrentTargetNumber-1?(a.openImage(a.m_CurrentTargetElements[a.m_CurrentTargetElementsLength-1],"left"),a.m_CurrentTargetNumber=a.m_CurrentTargetElementsLength-1):(a.openImage(a.m_CurrentTargetElements[a.m_CurrentTargetNumber-1],"left"),a.m_CurrentTargetNumber-=1)};a.rightAnimationFunction=function(){a.m_CurrentTargetNumber+1>a.m_CurrentTargetElementsLength-1?(a.openImage(a.m_CurrentTargetElements[0],"right"),a.m_CurrentTargetNumber=0):(a.openImage(a.m_CurrentTargetElements[a.m_CurrentTargetNumber+ 1],"right"),a.m_CurrentTargetNumber+=1)};a.m_Options.enableKeyboard&&a.addEvent(f,"keydown",function(b){if(a.m_CurrentImageElement&&!a.m_InProgress)switch(b.preventDefault&&(b.preventDefault(),b.stopPropagation()),f.event&&(b=f.event,f.event.returnValue=g,f.event.cancelBubble=g),b.which||b.keyCode){case 27:return a.removeImageElement(),g;case 39:return a.rightAnimationFunction(),g;case 37:return a.leftAnimationFunction(),g}});a.m_Options.quitOnDocumentClick&&a.addEvent(q?p:h,"click",function(b){if(a.m_InProgress)return g; b.preventDefault&&b.preventDefault();f.event&&(b=f.event);if((b=b.target?b.target:b.srcElement)&&b.id!==a.m_Options.imageElementId&&a.m_InstalledImageBox&&!a.m_InProgress)return a.removeImageElement(),g})},openImage:function(a,c){var b=this,e=h.createDocumentFragment(),d=h.createElement("img"),k=h.getElementById(b.m_Options.imageElementId);if(a&&"a"===a.tagName.toLowerCase()){k&&(p.removeChild(k),b.m_CurrentImageElement=g,b.m_InstalledImageBox=g);b.m_Alt=a.firstChild.getAttribute("alt");b.m_InProgress= !0;if(b.isFunction(b.m_Options.onImageLoadStart()))b.m_Options.onImageLoadStart();if("undefined"!==typeof c)switch(c){case "left":c=-1;break;case "right":c=1}d.setAttribute("id",b.m_Options.imageElementId);d.setAttribute("src",a.getAttribute("href"));d.setAttribute("alt",b.m_Alt);d.setAttribute("style","position: fixed; cursor: pointer; opacity: 0;");e.appendChild(d);p.appendChild(e);b.m_CurrentImageElement=h.getElementById(b.m_Options.imageElementId);b.m_CurrentImageElement.style.filter="alpha(opacity=0)"; b.browser.isHardwareAccelerated&&("undefined"!==typeof c&&(b.m_CurrentImageElement.style[b.getcss3prop("transform")]="translateX("+c*b.m_Options.fadeInDistance+"px)"),b.m_CurrentImageElement.style[b.getcss3prop("transition")]="all "+b.m_Options.animationSpeed+"ms ease");b.calculateImagePositionAndSize(b.m_CurrentImageElement,g,c);b.m_Options.quitOnImageClick&&b.addEvent(b.m_CurrentImageElement,"click",function(a){a.preventDefault&&a.preventDefault();f.event&&(f.event.returnValue=g);b.removeImageElement()}); if(b.browser.isTouch){var r=-1,s=-1,m=0;b.addEvent(b.m_CurrentImageElement,"touchstart pointerdown MSPointerDown",function(a){a.preventDefault();r=a.pageX||a.touches[0].pageX});b.addEvent(b.m_CurrentImageElement,"touchmove pointermove MSPointerMove",function(a){a.preventDefault();s=a.pageX||a.touches[0].pageX;m=r-s;b.browser.isHardwareAccelerated&&(b.m_CurrentImageElement.style[b.getcss3prop("transition")]="none",b.m_CurrentImageElement.style[b.getcss3prop("transform")]="translateX("+-m+"px)")}); b.addEvent(b.m_CurrentImageElement,"touchend pointerup pointercancel MSPointerUp MSPointerCancel",function(a){a.preventDefault();75<Math.abs(m)?0>m?b.leftAnimationFunction():b.rightAnimationFunction():b.m_CurrentImageElement.style[b.getcss3prop("transform")]="translateX(0px)"})}}},calculateImagePositionAndSize:function(a,c){var b=this,e=new Image,d=0,k=0,h=0;a&&(b.m_ImageSource=a.getAttribute("src"),b.m_ScreenHeight=f.innerHeight||n.offsetHeight,b.m_ScreenWidth=f.innerWidth||n.offsetWidth,e.onload= function(){var e=this.width,f=this.height;d=e;k=f;h=d/k;Math.floor(b.m_ScreenWidth/h)>b.m_ScreenHeight?(d=b.m_ScreenHeight*h*b.m_Options.imageSize,k=b.m_ScreenHeight*b.m_Options.imageSize):(d=b.m_ScreenWidth*b.m_Options.imageSize,k=b.m_ScreenWidth/h*b.m_Options.imageSize);d>e&&(d=e);k>f&&(k=f);a.style.top=(b.m_ScreenHeight-k)/2+"px";a.style.left=(b.m_ScreenWidth-d)/2+"px";a.style.width=Math.floor(d)+"px";a.style.height=Math.floor(k)+"px";c||setTimeout(function(){b.browser.isHardwareAccelerated?(a.style.opacity= 1,a.style[b.getcss3prop("transform")]="translateX(0px)"):b.animate({delay:16,duration:b.m_Options.animationSpeed,delta:b.linear,step:function(b){a.style.opacity=1*b;a.style.filter="alpha(opacity="+100*b+")"}});b.m_InProgress=g;b.m_InstalledImageBox=!0;if(b.isFunction(b.m_Options.onImageLoadEnd()))b.m_Options.onImageLoadEnd(a)},100)},e.src=b.m_ImageSource)},removeImageElement:function(){var a=this;if(a.m_CurrentImageElement){if(a.isFunction(a.m_Options.onEnd()))a.m_Options.onEnd();if(a.m_InProgress&& a.isFunction(a.m_Options.onImageLoadEnd()))a.m_Options.onImageLoadEnd(p_Element);a.browser.isHardwareAccelerated?(a.m_CurrentImageElement.style.opacity=0,a.m_CurrentImageElement.style.transition="opacity 250ms ease"):a.animate({delay:16,duration:250,delta:a.linear,step:function(c){a.m_CurrentImageElement.style.opacity=0*c;a.m_CurrentImageElement.style.filter="alpha(opacity="+0*c+")"}});setTimeout(function(){a.m_CurrentImageElement&&a.m_CurrentImageElement.parentNode.removeChild(a.m_CurrentImageElement); a.m_CurrentImageElement=g;a.m_InstalledImageBox=g},a.browser.isHardwareAccelerated?250:350)}},isFunction:function(a){return!!(a&&a.constructor&&a.call&&a.apply)},addEvent:function(a,c,b){var e,d;c=c.split(" ");if(q)if(a&&(!(a instanceof Array)||a.length)&&0!==a.length||a===f)for(e=0;e<c.length;e++)a.addEventListener(c[e],b,g);else{if(a&&"undefined"!==a[0])for(e=0;e<a.length;e++)for(d=0;d<c.length;d++)a[e].addEventListener(c[d],b,g)}else for(e=0;e<c.length;e++)if(-1!==c[e].indexOf("keydown"))h.attachEvent("on"+ c[e],b);else if(a&&(!(a instanceof Array)||a.length)&&0!==a.length||a===f)a.attachEvent("on"+c[e],b);else if(a&&"undefined"!==a[0])for(d=0;d<a.length;d++)a[d].attachEvent(c[e],b)},animate:function(a){var c=this,b=new Date,e=setInterval(function(){var d=(new Date-b)/a.duration;1<d&&(d=1);var f=a.delta(d);a.step(f);1==d&&(c.m_AnimateDone=!0,clearInterval(e))},a.delay||10)},linear:function(a){return a},getcss3prop:function(a){for(var c=" -moz- -webkit- -o- -ms- -khtml-".split(" "),b=function(a){return a.replace(/\-([a-z])/gi, function(a,b){return b.toUpperCase()})},e=0;e<c.length;e++){var d=b(c[e]+a);"Ms"==d.substr(0,2)&&(d="m"+d.substr(1));if(d in n.style)return d}return"undefined"}};l.options={imageElementId:"simplbox",fadeInDistance:100,animationSpeed:350,imageSize:.8,quitOnImageClick:!0,quitOnDocumentClick:!0,enableKeyboard:!0,onImageLoadStart:function(){},onImageLoadEnd:function(){},onStart:function(){},onEnd:function(){}};f.SimplBox=l})(window,document);
\ No newline at end of file
Index: trunk/include/jquery/version.txt
===================================================================
--- trunk/include/jquery/version.txt	(nonexistent)
+++ trunk/include/jquery/version.txt	(revision 2)
@@ -0,0 +1,2 @@
+jQuery 1.7.1
+jQuery UI 1.8.17
\ No newline at end of file
Index: trunk/include/jscalendar/README
===================================================================
--- trunk/include/jscalendar/README	(nonexistent)
+++ trunk/include/jscalendar/README	(revision 2)
@@ -0,0 +1,84 @@
+The DHTML Calendar
+-------------------
+
+  Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+          http://dynarch.com/mishoo/
+
+  This program is free software published under the
+  terms of the GNU Lesser General Public License.
+
+  For the entire license text please refer to
+  http://www.gnu.org/licenses/lgpl.html
+
+Contents
+---------
+
+  calendar.js     -- the main program file
+  lang/*.js       -- internalization files
+  *.css           -- color themes
+  cal.html        -- example usage file
+  doc/            -- documentation, in PDF and HTML
+  simple-1.html   -- quick setup examples [popup calendars]
+  simple-2.html   -- quick setup example for flat calendar
+  calendar.php    -- PHP wrapper
+  test.php        -- test file for the PHP wrapper
+
+Homepage
+---------
+
+  For details and latest versions please refer to calendar
+  homepage, located on my website:
+
+    http://dynarch.com/mishoo/calendar.epl
+
+
+How to use
+-----------
+
+1. enter this code somewhere _above_ the form
+    you can overwrite some vars as descripted below
+--cut-PHP----------------------------------------------------
+    // include jscalendar-setup
+    $jscal_use_time = false; // whether to use a clock, too
+    require_once(WB_PATH."/include/jscalendar/wb-setup.php");
+    // override some vars: (normally, there is no need to change this)
+    //$jscal_lang = "en"; //- calendar-language (default: wb-backend-language)
+    //$jscal_today = ""; // - date the calendar offers if the text-field is empty (default: today)
+    //$jscal_firstday = "0"; // - first-day-of-week (0-sunday, 1-monday, ...) (default: 0(EN) or 1(everything else))
+    //$jscal_format = "Y-m-d"; // - initial-format used for the text-field (default: from wb-backend-date-format)
+    //$jscal_ifformat = "%Y-%m-%d"; // - format for jscalendar (default: from wb-backend-date-format)
+----------------------------------------------------------
+
+
+2. enter this code within your form
+    $date holds the entered date as timestamp
+    the field is called "my_date_field"
+    the calender-trigger is called "my_date_trigger"
+--cut-HTML---------------------------------------------------
+    <input type="text" id="my_date_field" name="my_date_field" value="<?php if($date==0) print ""; else print date($jscal_format, $date)?>" style="width: 120px;" />
+    <img src="<?php echo WB_URL ?>/include/jscalendar/img.gif" id="my_date_trigger" style="cursor: pointer; border: 1px solid red;" title="Calendar" onmouseover="this.style.background='red';" onmouseout="this.style.background=''" />
+----------------------------------------------------------
+
+
+3. enter this code _below_ the form
+    to store the result as timestamp, you have to use  range : [1970, 2037],
+--cut-HTML---------------------------------------------------
+    <script type="text/javascript">
+        Calendar.setup(
+            {
+                inputField  : "my_date_field",
+                ifFormat    : "<?php echo $jscal_ifformat ?>",
+                button      : "my_date_trigger",
+                firstDay    : <?php echo $jscal_firstday ?>,
+                <?php if(isset($jscal_use_time) && $jscal_use_time==TRUE) { ?>
+                    showsTime   : "true",
+                    timeFormat  : "24",
+                <?php } ?>
+                date        : "<?php echo $jscal_today ?>",
+                range       : [1970, 2037],
+                step        : 1
+            }
+        );
+    </script>
+----------------------------------------------------------
+
Index: trunk/include/jscalendar/calendar-setup.js
===================================================================
--- trunk/include/jscalendar/calendar-setup.js	(nonexistent)
+++ trunk/include/jscalendar/calendar-setup.js	(revision 2)
@@ -0,0 +1,203 @@
+/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
+ * ---------------------------------------------------------------------------
+ *
+ * The DHTML Calendar
+ *
+ * Details and latest version at:
+ * http://dynarch.com/mishoo/calendar.epl
+ *
+ * This script is distributed under the GNU Lesser General Public License.
+ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
+ *
+ * This file defines helper functions for setting up the calendar.  They are
+ * intended to help non-programmers get a working calendar on their site
+ * quickly.  This script should not be seen as part of the calendar.  It just
+ * shows you what one can do with the calendar, while in the same time
+ * providing a quick and simple method for setting it up.  If you need
+ * exhaustive customization of the calendar creation process feel free to
+ * modify this code to suit your needs (this is recommended and much better
+ * than modifying calendar.js itself).
+ */
+
+// $Id: calendar-setup.js 65 2017-03-03 21:38:16Z manu $
+
+/**
+ *  This function "patches" an input field (or other element) to use a calendar
+ *  widget for date selection.
+ *
+ *  The "params" is a single object that can have the following properties:
+ *
+ *    prop. name   | description
+ *  -------------------------------------------------------------------------------------------------
+ *   inputField    | the ID of an input field to store the date
+ *   displayArea   | the ID of a DIV or other element to show the date
+ *   button        | ID of a button or other element that will trigger the calendar
+ *   eventName     | event that will trigger the calendar, without the "on" prefix (default: "click")
+ *   ifFormat      | date format that will be stored in the input field
+ *   daFormat      | the date format that will be used to display the date in displayArea
+ *   singleClick   | (true/false) wether the calendar is in single click mode or not (default: true)
+ *   firstDay      | numeric: 0 to 6.  "0" means display Sunday first, "1" means display Monday first, etc.
+ *   align         | alignment (default: "Br"); if you don't know what's this see the calendar documentation
+ *   range         | array with 2 elements.  Default: [1900, 2999] -- the range of years available
+ *   weekNumbers   | (true/false) if it's true (default) the calendar will display week numbers
+ *   flat          | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
+ *   flatCallback  | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
+ *   disableFunc   | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
+ *   onSelect      | function that gets called when a date is selected.  You don't _have_ to supply this (the default is generally okay)
+ *   onClose       | function that gets called when the calendar is closed.  [default]
+ *   onUpdate      | function that gets called after the date is updated in the input field.  Receives a reference to the calendar.
+ *   date          | the date that the calendar will be initially displayed to
+ *   showsTime     | default: false; if true the calendar will include a time selector
+ *   timeFormat    | the time format; can be "12" or "24", default is "12"
+ *   electric      | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
+ *   step          | configures the step of the years in drop-down boxes; default: 2
+ *   position      | configures the calendar absolute position; default: null
+ *   cache         | if "true" (but default: "false") it will reuse the same calendar object, where possible
+ *   showOthers    | if "true" (but default: "false") it will show days from other months too
+ *
+ *  None of them is required, they all have default values.  However, if you
+ *  pass none of "inputField", "displayArea" or "button" you'll get a warning
+ *  saying "nothing to setup".
+ */
+Calendar.setup = function (params) {
+    function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
+
+    param_default("inputField",     null);
+    param_default("displayArea",    null);
+    param_default("button",         null);
+    param_default("eventName",      "click");
+    param_default("ifFormat",       "%Y/%m/%d");
+    param_default("daFormat",       "%Y/%m/%d");
+    param_default("singleClick",    true);
+    param_default("disableFunc",    null);
+    param_default("dateStatusFunc", params["disableFunc"]);    // takes precedence if both are defined
+    param_default("dateText",       null);
+    param_default("firstDay",       null);
+    param_default("align",          "Br");
+    param_default("range",          [1900, 2999]);
+    param_default("weekNumbers",    true);
+    param_default("flat",           null);
+    param_default("flatCallback",   null);
+    param_default("onSelect",       null);
+    param_default("onClose",        null);
+    param_default("onUpdate",       null);
+    param_default("date",           null);
+    param_default("showsTime",      false);
+    param_default("timeFormat",     "24");
+    param_default("electric",       true);
+    param_default("step",           2);
+    param_default("position",       null);
+    param_default("cache",          false);
+    param_default("showOthers",     false);
+    param_default("multiple",       null);
+
+    var tmp = ["inputField", "displayArea", "button"];
+    for (var i in tmp) {
+        if (typeof params[tmp[i]] == "string") {
+            params[tmp[i]] = document.getElementById(params[tmp[i]]);
+        }
+    }
+    if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
+        alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");
+        return false;
+    }
+
+    function onSelect(cal) {
+        var p = cal.params;
+        var update = (cal.dateClicked || p.electric);
+        if (update && p.inputField) {
+            p.inputField.value = cal.date.print(p.ifFormat);
+            if (typeof p.inputField.onchange == "function")
+                p.inputField.onchange();
+        }
+        if (update && p.displayArea)
+            p.displayArea.innerHTML = cal.date.print(p.daFormat);
+        if (update && typeof p.onUpdate == "function")
+            p.onUpdate(cal);
+        if (update && p.flat) {
+            if (typeof p.flatCallback == "function")
+                p.flatCallback(cal);
+        }
+        if (update && p.singleClick && cal.dateClicked)
+            cal.callCloseHandler();
+    };
+
+    if (params.flat != null) {
+        if (typeof params.flat == "string")
+            params.flat = document.getElementById(params.flat);
+        if (!params.flat) {
+            alert("Calendar.setup:\n  Flat specified but can't find parent.");
+            return false;
+        }
+        var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
+        cal.showsOtherMonths = params.showOthers;
+        cal.showsTime = params.showsTime;
+        cal.time24 = (params.timeFormat == "24");
+        cal.params = params;
+        cal.weekNumbers = params.weekNumbers;
+        cal.setRange(params.range[0], params.range[1]);
+        cal.setDateStatusHandler(params.dateStatusFunc);
+        cal.getDateText = params.dateText;
+        if (params.ifFormat) {
+            cal.setDateFormat(params.ifFormat);
+        }
+        if (params.inputField && typeof params.inputField.value == "string") {
+            cal.parseDate(params.inputField.value);
+        }
+        cal.create(params.flat);
+        cal.show();
+        return false;
+    }
+
+    var triggerEl = params.button || params.displayArea || params.inputField;
+    triggerEl["on" + params.eventName] = function() {
+        var dateEl = params.inputField || params.displayArea;
+        var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
+        var mustCreate = false;
+        var cal = window.calendar;
+//        if (dateEl)
+//            params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
+//by nib: checks wether inputfield is empty or not. orig code only checked wether inputfield exists, so param.date was never read!
+if (dateEl.value.replace(/^\s+|\s+$/g,"").length != 0 || dateEl.innerHTML.replace(/^\s+|\s+$/g,"").length != 0)
+params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
+        if (!(cal && params.cache)) {
+            window.calendar = cal = new Calendar(params.firstDay,
+                                 params.date,
+                                 params.onSelect || onSelect,
+                                 params.onClose || function(cal) { cal.hide(); });
+            cal.showsTime = params.showsTime;
+            cal.time24 = (params.timeFormat == "24");
+            cal.weekNumbers = params.weekNumbers;
+            mustCreate = true;
+        } else {
+            if (params.date)
+                cal.setDate(params.date);
+            cal.hide();
+        }
+        if (params.multiple) {
+            cal.multiple = {};
+            for (var i = params.multiple.length; --i >= 0;) {
+                var d = params.multiple[i];
+                var ds = d.print("%Y%m%d");
+                cal.multiple[ds] = d;
+            }
+        }
+        cal.showsOtherMonths = params.showOthers;
+        cal.yearStep = params.step;
+        cal.setRange(params.range[0], params.range[1]);
+        cal.params = params;
+        cal.setDateStatusHandler(params.dateStatusFunc);
+        cal.getDateText = params.dateText;
+        cal.setDateFormat(dateFmt);
+        if (mustCreate)
+            cal.create();
+        cal.refresh();
+        if (!params.position)
+            cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
+        else
+            cal.showAt(params.position[0], params.position[1]);
+        return false;
+    };
+
+    return cal;
+};
Index: trunk/include/jscalendar/calendar-system.css
===================================================================
--- trunk/include/jscalendar/calendar-system.css	(nonexistent)
+++ trunk/include/jscalendar/calendar-system.css	(revision 2)
@@ -0,0 +1,255 @@
+/* The main calendar widget.  DIV containing a table. */
+
+.calendar {
+  position: relative;
+  display: none;
+  border: 1px solid;
+  border-color: #fff #000 #000 #fff;
+  font-size: 11px;
+  cursor: default;
+  background: Window;
+  color: WindowText;
+  font-family: tahoma,verdana,sans-serif;
+  width: 20.225em;
+}
+
+.calendar table {
+  border: 1px solid;
+  border-color: #fff #000 #000 #fff;
+  font-size: 11px;
+  cursor: default;
+  background: Window;
+  color: WindowText;
+  font-family: tahoma,verdana,sans-serif;
+  width: 100%;
+}
+
+/* Header part -- contains navigation buttons and day names. */
+
+.calendar .cal-button { /* "<<", "<", ">", ">>" buttons have this class */
+  text-align: center;
+  padding: 1px;
+  border: 1px solid;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+  background: ButtonFace;
+}
+
+.calendar .nav {
+  background: #DDDDDD url(menuarrow.gif) no-repeat 100% 100%;
+}
+
+.calendar thead .title { /* This holds the current "month, year" */
+  font-weight: bold;
+  padding: 1px;
+  border: 1px solid #000;
+  background: ActiveCaption;
+  color: CaptionText;
+  text-align: center;
+}
+
+.calendar thead .headrow { /* Row <TR> containing navigation buttons */
+height: 0.525em;
+}
+
+.calendar thead .daynames { /* Row <TR> containing the day names */
+
+}
+
+.calendar thead .name { /* Cells <TD> containing the day names */
+  border-bottom: 1px solid ButtonShadow;
+  padding: 2px;
+  text-align: center;
+  background: ButtonFace;
+  color: ButtonText;
+}
+
+.calendar thead .weekend { /* How a weekend day name shows in header */
+  color: #f00;
+}
+
+.calendar thead .hilite { /* How do the buttons in header appear when hover */
+  border: 2px solid;
+  padding: 0px;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.calendar thead .active { /* Active (pressed) buttons in header */
+  border-width: 1px;
+  padding: 2px 0px 0px 2px;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+/* The body part -- contains all the days in month. */
+
+.calendar tbody .day { /* Cells <TD> containing month days dates */
+  width: 2em;
+  text-align: right;
+  padding: 2px 4px 2px 2px;
+}
+.calendar tbody .day.othermonth {
+  font-size: 80%;
+  color: #aaa;
+}
+.calendar tbody .day.othermonth.oweekend {
+  color: #faa;
+}
+
+.calendar table .wn {
+  padding: 2px 3px 2px 2px;
+  border-right: 1px solid ButtonShadow;
+  background: ButtonFace;
+  color: ButtonText;
+}
+
+.calendar tbody .rowhilite td {
+  background: Highlight;
+  color: HighlightText;
+}
+
+.calendar tbody td.hilite { /* Hovered cells <TD> */
+  padding: 1px 3px 1px 1px;
+  border-top: 1px solid #fff;
+  border-right: 1px solid #000;
+  border-bottom: 1px solid #000;
+  border-left: 1px solid #fff;
+}
+
+.calendar tbody td.active { /* Active (pressed) cells <TD> */
+  padding: 2px 2px 0px 2px;
+  border: 1px solid;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.calendar tbody td.selected { /* Cell showing selected date */
+  font-weight: bold;
+  border: 1px solid;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+  padding: 2px 2px 0px 2px;
+  background: ButtonFace;
+  color: ButtonText;
+}
+
+.calendar tbody td.weekend { /* Cells showing weekend days */
+  color: #f00;
+}
+
+.calendar tbody td.today { /* Cell showing today date */
+  font-weight: bold;
+  color: #00f;
+}
+
+.calendar tbody td.disabled { color: GrayText; }
+
+.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
+  visibility: hidden;
+}
+
+.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
+  display: none;
+}
+
+/* The footer part -- status bar and "Close" button */
+
+.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
+}
+
+.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
+  background: ButtonFace;
+  padding: 1px;
+  border: 1px solid;
+  border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+  color: ButtonText;
+  text-align: center;
+}
+
+.calendar tfoot .hilite { /* Hover style for buttons in footer */
+  border-top: 1px solid #fff;
+  border-right: 1px solid #000;
+  border-bottom: 1px solid #000;
+  border-left: 1px solid #fff;
+  padding: 1px;
+  background: #e4e0d8;
+}
+
+.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
+  padding: 2px 0px 0px 2px;
+  border-top: 1px solid #000;
+  border-right: 1px solid #fff;
+  border-bottom: 1px solid #fff;
+  border-left: 1px solid #000;
+}
+
+/* Combo boxes (menus that display months/years for direct selection) */
+
+.calendar .combo {
+  position: absolute;
+  display: none;
+  width: 4em;
+  top: 0px;
+  left: 0px;
+  cursor: default;
+  border: 1px solid;
+  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+  background: Menu;
+  color: MenuText;
+  font-size: 90%;
+  padding: 1px;
+  z-index: 100;
+}
+
+.calendar .combo .label,
+.calendar .combo .label-IEfix {
+  text-align: center;
+  padding: 1px;
+}
+
+.calendar .combo .label-IEfix {
+  width: 4em;
+}
+
+.calendar .combo .active {
+  padding: 0px;
+  border: 1px solid #000;
+}
+
+.calendar .combo .hilite {
+  background: Highlight;
+  color: HighlightText;
+}
+
+.calendar td.time {
+  border-top: 1px solid ButtonShadow;
+  padding: 1px 0px;
+  text-align: center;
+  background-color: ButtonFace;
+}
+
+.calendar td.time .hour,
+.calendar td.time .minute,
+.calendar td.time .ampm {
+  padding: 0px 3px 0px 4px;
+  border: 1px solid #889;
+  font-weight: bold;
+  background-color: Menu;
+}
+
+.calendar td.time .ampm {
+  text-align: center;
+}
+
+.calendar td.time .colon {
+  padding: 0px 2px 0px 3px;
+  font-weight: bold;
+}
+
+.calendar td.time span.hilite {
+  border-color: #000;
+  background-color: Highlight;
+  color: HighlightText;
+}
+
+.calendar td.time span.active {
+  border-color: #f00;
+  background-color: #000;
+  color: #0f0;
+}
Index: trunk/include/jscalendar/calendar.js
===================================================================
--- trunk/include/jscalendar/calendar.js	(nonexistent)
+++ trunk/include/jscalendar/calendar.js	(revision 2)
@@ -0,0 +1,1807 @@
+/*  Copyright Mihai Bazon, 2002-2005  |  www.bazon.net/mishoo
+ * -----------------------------------------------------------
+ *
+ * The DHTML Calendar, version 1.0 "It is happening again"
+ *
+ * Details and latest version at:
+ * www.dynarch.com/projects/calendar
+ *
+ * This script is developed by Dynarch.com.  Visit us at www.dynarch.com.
+ *
+ * This script is distributed under the GNU Lesser General Public License.
+ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
+ */
+
+// $Id: calendar.js 65 2017-03-03 21:38:16Z manu $
+
+/** The Calendar object constructor. */
+Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {
+    // member variables
+    this.activeDiv = null;
+    this.currentDateEl = null;
+    this.getDateStatus = null;
+    this.getDateToolTip = null;
+    this.getDateText = null;
+    this.timeout = null;
+    this.onSelected = onSelected || null;
+    this.onClose = onClose || null;
+    this.dragging = false;
+    this.hidden = false;
+    this.minYear = 1970;
+    this.maxYear = 2050;
+    this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
+    this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
+    this.isPopup = true;
+    this.weekNumbers = true;
+    this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.
+    this.showsOtherMonths = false;
+    this.dateStr = dateStr;
+    this.ar_days = null;
+    this.showsTime = false;
+    this.time24 = true;
+    this.yearStep = 2;
+    this.hiliteToday = true;
+    this.multiple = null;
+    // HTML elements
+    this.table = null;
+    this.element = null;
+    this.tbody = null;
+    this.firstdayname = null;
+    // Combo boxes
+    this.monthsCombo = null;
+    this.yearsCombo = null;
+    this.hilitedMonth = null;
+    this.activeMonth = null;
+    this.hilitedYear = null;
+    this.activeYear = null;
+    // Information
+    this.dateClicked = false;
+
+    // one-time initializations
+    if (typeof Calendar._SDN == "undefined") {
+        // table of short day names
+        if (typeof Calendar._SDN_len == "undefined")
+            Calendar._SDN_len = 3;
+        var ar = new Array();
+        for (var i = 8; i > 0;) {
+            ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
+        }
+        Calendar._SDN = ar;
+        // table of short month names
+        if (typeof Calendar._SMN_len == "undefined")
+            Calendar._SMN_len = 3;
+        ar = new Array();
+        for (var i = 12; i > 0;) {
+            ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);
+        }
+        Calendar._SMN = ar;
+    }
+};
+
+// ** constants
+
+/// "static", needed for event handlers.
+Calendar._C = null;
+
+/// detect a special case of "web browser"
+Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
+           !/opera/i.test(navigator.userAgent) );
+
+Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );
+
+/// detect Opera browser
+Calendar.is_opera = /opera/i.test(navigator.userAgent);
+
+/// detect KHTML-based browsers
+Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
+
+// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
+//        library, at some point.
+
+Calendar.getAbsolutePos = function(el) {
+    var SL = 0, ST = 0;
+    var is_div = /^div$/i.test(el.tagName);
+    if (is_div && el.scrollLeft)
+        SL = el.scrollLeft;
+    if (is_div && el.scrollTop)
+        ST = el.scrollTop;
+    var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
+    if (el.offsetParent) {
+        var tmp = this.getAbsolutePos(el.offsetParent);
+        r.x += tmp.x;
+        r.y += tmp.y;
+    }
+    return r;
+};
+
+Calendar.isRelated = function (el, evt) {
+    var related = evt.relatedTarget;
+    if (!related) {
+        var type = evt.type;
+        if (type == "mouseover") {
+            related = evt.fromElement;
+        } else if (type == "mouseout") {
+            related = evt.toElement;
+        }
+    }
+    while (related) {
+        if (related == el) {
+            return true;
+        }
+        related = related.parentNode;
+    }
+    return false;
+};
+
+Calendar.removeClass = function(el, className) {
+    if (!(el && el.className)) {
+        return;
+    }
+    var cls = el.className.split(" ");
+    var ar = new Array();
+    for (var i = cls.length; i > 0;) {
+        if (cls[--i] != className) {
+            ar[ar.length] = cls[i];
+        }
+    }
+    el.className = ar.join(" ");
+};
+
+Calendar.addClass = function(el, className) {
+    Calendar.removeClass(el, className);
+    el.className += " " + className;
+};
+
+// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately.
+Calendar.getElement = function(ev) {
+    var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget;
+    while (f.nodeType != 1 || /^div$/i.test(f.tagName))
+        f = f.parentNode;
+    return f;
+};
+
+Calendar.getTargetElement = function(ev) {
+    var f = Calendar.is_ie ? window.event.srcElement : ev.target;
+    while (f.nodeType != 1)
+        f = f.parentNode;
+    return f;
+};
+
+Calendar.stopEvent = function(ev) {
+    ev || (ev = window.event);
+    if (Calendar.is_ie) {
+        ev.cancelBubble = true;
+        ev.returnValue = false;
+    } else {
+        ev.preventDefault();
+        ev.stopPropagation();
+    }
+    return false;
+};
+
+Calendar.addEvent = function(el, evname, func) {
+    if (el.attachEvent) { // IE
+        el.attachEvent("on" + evname, func);
+    } else if (el.addEventListener) { // Gecko / W3C
+        el.addEventListener(evname, func, true);
+    } else {
+        el["on" + evname] = func;
+    }
+};
+
+Calendar.removeEvent = function(el, evname, func) {
+    if (el.detachEvent) { // IE
+        el.detachEvent("on" + evname, func);
+    } else if (el.removeEventListener) { // Gecko / W3C
+        el.removeEventListener(evname, func, true);
+    } else {
+        el["on" + evname] = null;
+    }
+};
+
+Calendar.createElement = function(type, parent) {
+    var el = null;
+    if (document.createElementNS) {
+        // use the XHTML namespace; IE won't normally get here unless
+        // _they_ "fix" the DOM2 implementation.
+        el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
+    } else {
+        el = document.createElement(type);
+    }
+    if (typeof parent != "undefined") {
+        parent.appendChild(el);
+    }
+    return el;
+};
+
+// END: UTILITY FUNCTIONS
+
+// BEGIN: CALENDAR STATIC FUNCTIONS
+
+/** Internal -- adds a set of events to make some element behave like a button. */
+Calendar._add_evs = function(el) {
+    with (Calendar) {
+        addEvent(el, "mouseover", dayMouseOver);
+        addEvent(el, "mousedown", dayMouseDown);
+        addEvent(el, "mouseout", dayMouseOut);
+        if (is_ie) {
+            addEvent(el, "dblclick", dayMouseDblClick);
+            el.setAttribute("unselectable", true);
+        }
+    }
+};
+
+Calendar.findMonth = function(el) {
+    if (typeof el.month != "undefined") {
+        return el;
+    } else if (typeof el.parentNode.month != "undefined") {
+        return el.parentNode;
+    }
+    return null;
+};
+
+Calendar.findYear = function(el) {
+    if (typeof el.year != "undefined") {
+        return el;
+    } else if (typeof el.parentNode.year != "undefined") {
+        return el.parentNode;
+    }
+    return null;
+};
+
+Calendar.showMonthsCombo = function () {
+    var cal = Calendar._C;
+    if (!cal) {
+        return false;
+    }
+    var cal = cal;
+    var cd = cal.activeDiv;
+    var mc = cal.monthsCombo;
+    if (cal.hilitedMonth) {
+        Calendar.removeClass(cal.hilitedMonth, "hilite");
+    }
+    if (cal.activeMonth) {
+        Calendar.removeClass(cal.activeMonth, "active");
+    }
+    var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
+    Calendar.addClass(mon, "active");
+    cal.activeMonth = mon;
+    var s = mc.style;
+    s.display = "block";
+    if (cd.navtype < 0)
+        s.left = cd.offsetLeft + "px";
+    else {
+        var mcw = mc.offsetWidth;
+        if (typeof mcw == "undefined")
+            // Konqueror brain-dead techniques
+            mcw = 50;
+        s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px";
+    }
+    s.top = (cd.offsetTop + cd.offsetHeight) + "px";
+};
+
+Calendar.showYearsCombo = function (fwd) {
+    var cal = Calendar._C;
+    if (!cal) {
+        return false;
+    }
+    var cal = cal;
+    var cd = cal.activeDiv;
+    var yc = cal.yearsCombo;
+    if (cal.hilitedYear) {
+        Calendar.removeClass(cal.hilitedYear, "hilite");
+    }
+    if (cal.activeYear) {
+        Calendar.removeClass(cal.activeYear, "active");
+    }
+    cal.activeYear = null;
+    var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
+    var yr = yc.firstChild;
+    var show = false;
+    for (var i = 12; i > 0; --i) {
+        if (Y >= cal.minYear && Y <= cal.maxYear) {
+            yr.innerHTML = Y;
+            yr.year = Y;
+            yr.style.display = "block";
+            show = true;
+        } else {
+            yr.style.display = "none";
+        }
+        yr = yr.nextSibling;
+        Y += fwd ? cal.yearStep : -cal.yearStep;
+    }
+    if (show) {
+        var s = yc.style;
+        s.display = "block";
+        if (cd.navtype < 0)
+            s.left = cd.offsetLeft + "px";
+        else {
+            var ycw = yc.offsetWidth;
+            if (typeof ycw == "undefined")
+                // Konqueror brain-dead techniques
+                ycw = 50;
+            s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
+        }
+        s.top = (cd.offsetTop + cd.offsetHeight) + "px";
+    }
+};
+
+// event handlers
+
+Calendar.tableMouseUp = function(ev) {
+    var cal = Calendar._C;
+    if (!cal) {
+        return false;
+    }
+    if (cal.timeout) {
+        clearTimeout(cal.timeout);
+    }
+    var el = cal.activeDiv;
+    if (!el) {
+        return false;
+    }
+    var target = Calendar.getTargetElement(ev);
+    ev || (ev = window.event);
+    Calendar.removeClass(el, "active");
+    if (target == el || target.parentNode == el) {
+        Calendar.cellClick(el, ev);
+    }
+    var mon = Calendar.findMonth(target);
+    var date = null;
+    if (mon) {
+        date = new Date(cal.date);
+        if (mon.month != date.getMonth()) {
+            date.setMonth(mon.month);
+            cal.setDate(date);
+            cal.dateClicked = false;
+            cal.callHandler();
+        }
+    } else {
+        var year = Calendar.findYear(target);
+        if (year) {
+            date = new Date(cal.date);
+            if (year.year != date.getFullYear()) {
+                date.setFullYear(year.year);
+                cal.setDate(date);
+                cal.dateClicked = false;
+                cal.callHandler();
+            }
+        }
+    }
+    with (Calendar) {
+        removeEvent(document, "mouseup", tableMouseUp);
+        removeEvent(document, "mouseover", tableMouseOver);
+        removeEvent(document, "mousemove", tableMouseOver);
+        cal._hideCombos();
+        _C = null;
+        return stopEvent(ev);
+    }
+};
+
+Calendar.tableMouseOver = function (ev) {
+    var cal = Calendar._C;
+    if (!cal) {
+        return;
+    }
+    var el = cal.activeDiv;
+    var target = Calendar.getTargetElement(ev);
+    if (target == el || target.parentNode == el) {
+        Calendar.addClass(el, "hilite active");
+        Calendar.addClass(el.parentNode, "rowhilite");
+    } else {
+        if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2)))
+            Calendar.removeClass(el, "active");
+        Calendar.removeClass(el, "hilite");
+        Calendar.removeClass(el.parentNode, "rowhilite");
+    }
+    ev || (ev = window.event);
+    if (el.navtype == 50 && target != el) {
+        var pos = Calendar.getAbsolutePos(el);
+        var w = el.offsetWidth;
+        var x = ev.clientX;
+        var dx;
+        var decrease = true;
+        if (x > pos.x + w) {
+            dx = x - pos.x - w;
+            decrease = false;
+        } else
+            dx = pos.x - x;
+
+        if (dx < 0) dx = 0;
+        var range = el._range;
+        var current = el._current;
+        var count = Math.floor(dx / 10) % range.length;
+        for (var i = range.length; --i >= 0;)
+            if (range[i] == current)
+                break;
+        while (count-- > 0)
+            if (decrease) {
+                if (--i < 0)
+                    i = range.length - 1;
+            } else if ( ++i >= range.length )
+                i = 0;
+        var newval = range[i];
+        el.innerHTML = newval;
+
+        cal.onUpdateTime();
+    }
+    var mon = Calendar.findMonth(target);
+    if (mon) {
+        if (mon.month != cal.date.getMonth()) {
+            if (cal.hilitedMonth) {
+                Calendar.removeClass(cal.hilitedMonth, "hilite");
+            }
+            Calendar.addClass(mon, "hilite");
+            cal.hilitedMonth = mon;
+        } else if (cal.hilitedMonth) {
+            Calendar.removeClass(cal.hilitedMonth, "hilite");
+        }
+    } else {
+        if (cal.hilitedMonth) {
+            Calendar.removeClass(cal.hilitedMonth, "hilite");
+        }
+        var year = Calendar.findYear(target);
+        if (year) {
+            if (year.year != cal.date.getFullYear()) {
+                if (cal.hilitedYear) {
+                    Calendar.removeClass(cal.hilitedYear, "hilite");
+                }
+                Calendar.addClass(year, "hilite");
+                cal.hilitedYear = year;
+            } else if (cal.hilitedYear) {
+                Calendar.removeClass(cal.hilitedYear, "hilite");
+            }
+        } else if (cal.hilitedYear) {
+            Calendar.removeClass(cal.hilitedYear, "hilite");
+        }
+    }
+    return Calendar.stopEvent(ev);
+};
+
+Calendar.tableMouseDown = function (ev) {
+    if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
+        return Calendar.stopEvent(ev);
+    }
+};
+
+Calendar.calDragIt = function (ev) {
+    var cal = Calendar._C;
+    if (!(cal && cal.dragging)) {
+        return false;
+    }
+    var posX;
+    var posY;
+    if (Calendar.is_ie) {
+        posY = window.event.clientY + document.body.scrollTop;
+        posX = window.event.clientX + document.body.scrollLeft;
+    } else {
+        posX = ev.pageX;
+        posY = ev.pageY;
+    }
+    cal.hideShowCovered();
+    var st = cal.element.style;
+    st.left = (posX - cal.xOffs) + "px";
+    st.top = (posY - cal.yOffs) + "px";
+    return Calendar.stopEvent(ev);
+};
+
+Calendar.calDragEnd = function (ev) {
+    var cal = Calendar._C;
+    if (!cal) {
+        return false;
+    }
+    cal.dragging = false;
+    with (Calendar) {
+        removeEvent(document, "mousemove", calDragIt);
+        removeEvent(document, "mouseup", calDragEnd);
+        tableMouseUp(ev);
+    }
+    cal.hideShowCovered();
+};
+
+Calendar.dayMouseDown = function(ev) {
+    var el = Calendar.getElement(ev);
+    if (el.disabled) {
+        return false;
+    }
+    var cal = el.calendar;
+    cal.activeDiv = el;
+    Calendar._C = cal;
+    if (el.navtype != 300) with (Calendar) {
+        if (el.navtype == 50) {
+            el._current = el.innerHTML;
+            addEvent(document, "mousemove", tableMouseOver);
+        } else
+            addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver);
+        addClass(el, "hilite active");
+        addEvent(document, "mouseup", tableMouseUp);
+    } else if (cal.isPopup) {
+        cal._dragStart(ev);
+    }
+    if (el.navtype == -1 || el.navtype == 1) {
+        if (cal.timeout) clearTimeout(cal.timeout);
+        cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
+    } else if (el.navtype == -2 || el.navtype == 2) {
+        if (cal.timeout) clearTimeout(cal.timeout);
+        cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);
+    } else {
+        cal.timeout = null;
+    }
+    return Calendar.stopEvent(ev);
+};
+
+Calendar.dayMouseDblClick = function(ev) {
+    Calendar.cellClick(Calendar.getElement(ev), ev || window.event);
+    if (Calendar.is_ie) {
+        document.selection.empty();
+    }
+};
+
+Calendar.dayMouseOver = function(ev) {
+    var el = Calendar.getElement(ev);
+    if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
+        return false;
+    }
+    if (el.ttip) {
+        if (el.ttip.substr(0, 1) == "_") {
+            el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);
+        }
+        el.calendar.tooltips.innerHTML = el.ttip;
+    }
+    if (el.navtype != 300) {
+        Calendar.addClass(el, "hilite");
+        if (el.caldate) {
+            Calendar.addClass(el.parentNode, "rowhilite");
+        }
+    }
+    return Calendar.stopEvent(ev);
+};
+
+Calendar.dayMouseOut = function(ev) {
+    with (Calendar) {
+        var el = getElement(ev);
+        if (isRelated(el, ev) || _C || el.disabled)
+            return false;
+        removeClass(el, "hilite");
+        if (el.caldate)
+            removeClass(el.parentNode, "rowhilite");
+        if (el.calendar)
+            el.calendar.tooltips.innerHTML = _TT["SEL_DATE"];
+        return stopEvent(ev);
+    }
+};
+
+/**
+ *  A generic "click" handler :) handles all types of buttons defined in this
+ *  calendar.
+ */
+Calendar.cellClick = function(el, ev) {
+    var cal = el.calendar;
+    var closing = false;
+    var newdate = false;
+    var date = null;
+    if (typeof el.navtype == "undefined") {
+        if (cal.currentDateEl) {
+            Calendar.removeClass(cal.currentDateEl, "selected");
+            Calendar.addClass(el, "selected");
+            closing = (cal.currentDateEl == el);
+            if (!closing) {
+                cal.currentDateEl = el;
+            }
+        }
+        cal.date.setDateOnly(el.caldate);
+        date = cal.date;
+        var other_month = !(cal.dateClicked = !el.otherMonth);
+        if (!other_month && !cal.currentDateEl)
+            cal._toggleMultipleDate(new Date(date));
+        else
+            newdate = !el.disabled;
+        // a date was clicked
+        if (other_month)
+            cal._init(cal.firstDayOfWeek, date);
+    } else {
+        if (el.navtype == 200) {
+            Calendar.removeClass(el, "hilite");
+            cal.callCloseHandler();
+            return;
+        }
+        date = new Date(cal.date);
+        if (el.navtype == 0)
+            date.setDateOnly(new Date()); // TODAY
+        // unless "today" was clicked, we assume no date was clicked so
+        // the selected handler will know not to close the calenar when
+        // in single-click mode.
+        // cal.dateClicked = (el.navtype == 0);
+        cal.dateClicked = false;
+        var year = date.getFullYear();
+        var mon = date.getMonth();
+        function setMonth(m) {
+            var day = date.getDate();
+            var max = date.getMonthDays(m);
+            if (day > max) {
+                date.setDate(max);
+            }
+            date.setMonth(m);
+        };
+        switch (el.navtype) {
+            case 400:
+            Calendar.removeClass(el, "hilite");
+            var text = Calendar._TT["ABOUT"];
+            if (typeof text != "undefined") {
+                text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";
+            } else {
+                // FIXME: this should be removed as soon as lang files get updated!
+                text = "Help and about box text is not translated into this language.\n" +
+                    "If you know this language and you feel generous please update\n" +
+                    "the corresponding file in \"lang\" subdir to match calendar-en.js\n" +
+                    "and send it back to <mihai_bazon@yahoo.com> to get it into the distribution  ;-)\n\n" +
+                    "Thank you!\n" +
+                    "http://dynarch.com/mishoo/calendar.epl\n";
+            }
+            alert(text);
+            return;
+            case -2:
+            if (year > cal.minYear) {
+                date.setFullYear(year - 1);
+            }
+            break;
+            case -1:
+            if (mon > 0) {
+                setMonth(mon - 1);
+            } else if (year-- > cal.minYear) {
+                date.setFullYear(year);
+                setMonth(11);
+            }
+            break;
+            case 1:
+            if (mon < 11) {
+                setMonth(mon + 1);
+            } else if (year < cal.maxYear) {
+                date.setFullYear(year + 1);
+                setMonth(0);
+            }
+            break;
+            case 2:
+            if (year < cal.maxYear) {
+                date.setFullYear(year + 1);
+            }
+            break;
+            case 100:
+            cal.setFirstDayOfWeek(el.fdow);
+            return;
+            case 50:
+            var range = el._range;
+            var current = el.innerHTML;
+            for (var i = range.length; --i >= 0;)
+                if (range[i] == current)
+                    break;
+            if (ev && ev.shiftKey) {
+                if (--i < 0)
+                    i = range.length - 1;
+            } else if ( ++i >= range.length )
+                i = 0;
+            var newval = range[i];
+            el.innerHTML = newval;
+            cal.onUpdateTime();
+            return;
+            case 0:
+            // TODAY will bring us here
+            if ((typeof cal.getDateStatus == "function") &&
+                cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) {
+                return false;
+            }
+            break;
+        }
+        if (!date.equalsTo(cal.date)) {
+            cal.setDate(date);
+            newdate = true;
+        } else if (el.navtype == 0)
+            newdate = closing = true;
+    }
+    if (newdate) {
+        ev && cal.callHandler();
+    }
+    if (closing) {
+        Calendar.removeClass(el, "hilite");
+        ev && cal.callCloseHandler();
+    }
+};
+
+// END: CALENDAR STATIC FUNCTIONS
+
+// BEGIN: CALENDAR OBJECT FUNCTIONS
+
+/**
+ *  This function creates the calendar inside the given parent.  If _par is
+ *  null than it creates a popup calendar inside the BODY element.  If _par is
+ *  an element, be it BODY, then it creates a non-popup calendar (still
+ *  hidden).  Some properties need to be set before calling this function.
+ */
+Calendar.prototype.create = function (_par) {
+    var parent = null;
+    if (! _par) {
+        // default parent is the document body, in which case we create
+        // a popup calendar.
+        parent = document.getElementsByTagName("body")[0];
+        this.isPopup = true;
+    } else {
+        parent = _par;
+        this.isPopup = false;
+    }
+    this.date = this.dateStr ? new Date(this.dateStr) : new Date();
+
+    var table = Calendar.createElement("table");
+    this.table = table;
+//    table.cellSpacing = 0;
+//    table.cellPadding = 0;
+    table.className = "pop-calendar";
+    table.calendar = this;
+    Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);
+
+    var div = Calendar.createElement("div");
+    this.element = div;
+    div.className = "calendar";
+    if (this.isPopup) {
+        div.style.position = "absolute";
+        div.style.display = "none";
+    }
+    div.appendChild(table);
+
+    var thead = Calendar.createElement("thead", table);
+    var cell = null;
+    var row = null;
+
+    var cal = this;
+    var hh = function (text, cs, navtype) {
+        cell = Calendar.createElement("td", row);
+        cell.colSpan = cs;
+        cell.className = "cal-button";
+        if (navtype != 0 && Math.abs(navtype) <= 2)
+            cell.className += " nav";
+        Calendar._add_evs(cell);
+        cell.calendar = cal;
+        cell.navtype = navtype;
+        cell.innerHTML = "<div unselectable='on'>" + text + "</div>";
+        return cell;
+    };
+
+    row = Calendar.createElement("tr", thead);
+    var title_length = 6;
+    (this.isPopup) && --title_length;
+    (this.weekNumbers) && ++title_length;
+
+    hh("?", 1, 400).ttip = Calendar._TT["INFO"];
+    this.title = hh("", title_length, 300);
+    this.title.className = "title";
+    if (this.isPopup) {
+        this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
+        this.title.style.cursor = "move";
+        hh("&#x00d7;", 1, 200).ttip = Calendar._TT["CLOSE"];
+    }
+
+    row = Calendar.createElement("tr", thead);
+    row.className = "headrow";
+
+    this._nav_py = hh("&#x00ab;", 1, -2);
+    this._nav_py.ttip = Calendar._TT["PREV_YEAR"];
+
+    this._nav_pm = hh("&#x2039;", 1, -1);
+    this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];
+
+    this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);
+    this._nav_now.ttip = Calendar._TT["GO_TODAY"];
+
+    this._nav_nm = hh("&#x203a;", 1, 1);
+    this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];
+
+    this._nav_ny = hh("&#x00bb;", 1, 2);
+    this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];
+
+    // day names
+    row = Calendar.createElement("tr", thead);
+    row.className = "daynames";
+    if (this.weekNumbers) {
+        cell = Calendar.createElement("td", row);
+        cell.className = "name wn";
+        cell.innerHTML = Calendar._TT["WK"];
+    }
+    for (var i = 7; i > 0; --i) {
+        cell = Calendar.createElement("td", row);
+        if (!i) {
+            cell.navtype = 100;
+            cell.calendar = this;
+            Calendar._add_evs(cell);
+        }
+    }
+    this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;
+    this._displayWeekdays();
+
+    var tbody = Calendar.createElement("tbody", table);
+    this.tbody = tbody;
+
+    for (i = 6; i > 0; --i) {
+        row = Calendar.createElement("tr", tbody);
+        if (this.weekNumbers) {
+            cell = Calendar.createElement("td", row);
+        }
+        for (var j = 7; j > 0; --j) {
+            cell = Calendar.createElement("td", row);
+            cell.calendar = this;
+            Calendar._add_evs(cell);
+        }
+    }
+
+    if (this.showsTime) {
+        row = Calendar.createElement("tr", tbody);
+        row.className = "time";
+
+        cell = Calendar.createElement("td", row);
+        cell.className = "time";
+        cell.colSpan = 2;
+        cell.innerHTML = Calendar._TT["TIME"] || "&nbsp;";
+
+        cell = Calendar.createElement("td", row);
+        cell.className = "time";
+        cell.colSpan = this.weekNumbers ? 4 : 3;
+
+        (function(){
+            function makeTimePart(className, init, range_start, range_end) {
+                var part = Calendar.createElement("span", cell);
+                part.className = className;
+                part.innerHTML = init;
+                part.calendar = cal;
+                part.ttip = Calendar._TT["TIME_PART"];
+                part.navtype = 50;
+                part._range = [];
+                if (typeof range_start != "number")
+                    part._range = range_start;
+                else {
+                    for (var i = range_start; i <= range_end; ++i) {
+                        var txt;
+                        if (i < 10 && range_end >= 10) txt = '0' + i;
+                        else txt = '' + i;
+                        part._range[part._range.length] = txt;
+                    }
+                }
+                Calendar._add_evs(part);
+                return part;
+            };
+            var hrs = cal.date.getHours();
+            var mins = cal.date.getMinutes();
+            var t12 = !cal.time24;
+            var pm = (hrs > 12);
+            if (t12 && pm) hrs -= 12;
+            var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
+            var span = Calendar.createElement("span", cell);
+            span.innerHTML = ":";
+            span.className = "colon";
+            var M = makeTimePart("minute", mins, 0, 59);
+            var AP = null;
+            cell = Calendar.createElement("td", row);
+            cell.className = "time";
+            cell.colSpan = 2;
+            if (t12)
+                AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);
+            else
+                cell.innerHTML = "&nbsp;";
+
+            cal.onSetTime = function() {
+                var pm, hrs = this.date.getHours(),
+                    mins = this.date.getMinutes();
+                if (t12) {
+                    pm = (hrs >= 12);
+                    if (pm) hrs -= 12;
+                    if (hrs == 0) hrs = 12;
+                    AP.innerHTML = pm ? "pm" : "am";
+                }
+                H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs;
+                M.innerHTML = (mins < 10) ? ("0" + mins) : mins;
+            };
+
+            cal.onUpdateTime = function() {
+                var date = this.date;
+                var h = parseInt(H.innerHTML, 10);
+                if (t12) {
+                    if (/pm/i.test(AP.innerHTML) && h < 12)
+                        h += 12;
+                    else if (/am/i.test(AP.innerHTML) && h == 12)
+                        h = 0;
+                }
+                var d = date.getDate();
+                var m = date.getMonth();
+                var y = date.getFullYear();
+                date.setHours(h);
+                date.setMinutes(parseInt(M.innerHTML, 10));
+                date.setFullYear(y);
+                date.setMonth(m);
+                date.setDate(d);
+                this.dateClicked = false;
+                this.callHandler();
+            };
+        })();
+    } else {
+        this.onSetTime = this.onUpdateTime = function() {};
+    }
+
+    var tfoot = Calendar.createElement("tfoot", table);
+
+    row = Calendar.createElement("tr", tfoot);
+    row.className = "footrow";
+
+    cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);
+    cell.className = "ttip";
+    if (this.isPopup) {
+        cell.ttip = Calendar._TT["DRAG_TO_MOVE"];
+        cell.style.cursor = "move";
+    }
+    this.tooltips = cell;
+
+    div = Calendar.createElement("div", this.element);
+    this.monthsCombo = div;
+    div.className = "combo";
+    for (i = 0; i < Calendar._MN.length; ++i) {
+        var mn = Calendar.createElement("div");
+        mn.className = Calendar.is_ie ? "label-IEfix" : "label";
+        mn.month = i;
+        mn.innerHTML = Calendar._SMN[i];
+        div.appendChild(mn);
+    }
+
+    div = Calendar.createElement("div", this.element);
+    this.yearsCombo = div;
+    div.className = "combo";
+    for (i = 12; i > 0; --i) {
+        var yr = Calendar.createElement("div");
+        yr.className = Calendar.is_ie ? "label-IEfix" : "label";
+        div.appendChild(yr);
+    }
+
+    this._init(this.firstDayOfWeek, this.date);
+    parent.appendChild(this.element);
+};
+
+/** keyboard navigation, only for popup calendars */
+Calendar._keyEvent = function(ev) {
+    var cal = window._dynarch_popupCalendar;
+    if (!cal || cal.multiple)
+        return false;
+    (Calendar.is_ie) && (ev = window.event);
+    var act = (Calendar.is_ie || ev.type == "keypress"),
+        K = ev.keyCode;
+    if (ev.ctrlKey) {
+        switch (K) {
+            case 37: // KEY left
+            act && Calendar.cellClick(cal._nav_pm);
+            break;
+            case 38: // KEY up
+            act && Calendar.cellClick(cal._nav_py);
+            break;
+            case 39: // KEY right
+            act && Calendar.cellClick(cal._nav_nm);
+            break;
+            case 40: // KEY down
+            act && Calendar.cellClick(cal._nav_ny);
+            break;
+            default:
+            return false;
+        }
+    } else switch (K) {
+        case 32: // KEY space (now)
+        Calendar.cellClick(cal._nav_now);
+        break;
+        case 27: // KEY esc
+        act && cal.callCloseHandler();
+        break;
+        case 37: // KEY left
+        case 38: // KEY up
+        case 39: // KEY right
+        case 40: // KEY down
+        if (act) {
+            var prev, x, y, ne, el, step;
+            prev = K == 37 || K == 38;
+            step = (K == 37 || K == 39) ? 1 : 7;
+            function setVars() {
+                el = cal.currentDateEl;
+                var p = el.pos;
+                x = p & 15;
+                y = p >> 4;
+                ne = cal.ar_days[y][x];
+            };setVars();
+            function prevMonth() {
+                var date = new Date(cal.date);
+                date.setDate(date.getDate() - step);
+                cal.setDate(date);
+            };
+            function nextMonth() {
+                var date = new Date(cal.date);
+                date.setDate(date.getDate() + step);
+                cal.setDate(date);
+            };
+            while (1) {
+                switch (K) {
+                    case 37: // KEY left
+                    if (--x >= 0)
+                        ne = cal.ar_days[y][x];
+                    else {
+                        x = 6;
+                        K = 38;
+                        continue;
+                    }
+                    break;
+                    case 38: // KEY up
+                    if (--y >= 0)
+                        ne = cal.ar_days[y][x];
+                    else {
+                        prevMonth();
+                        setVars();
+                    }
+                    break;
+                    case 39: // KEY right
+                    if (++x < 7)
+                        ne = cal.ar_days[y][x];
+                    else {
+                        x = 0;
+                        K = 40;
+                        continue;
+                    }
+                    break;
+                    case 40: // KEY down
+                    if (++y < cal.ar_days.length)
+                        ne = cal.ar_days[y][x];
+                    else {
+                        nextMonth();
+                        setVars();
+                    }
+                    break;
+                }
+                break;
+            }
+            if (ne) {
+                if (!ne.disabled)
+                    Calendar.cellClick(ne);
+                else if (prev)
+                    prevMonth();
+                else
+                    nextMonth();
+            }
+        }
+        break;
+        case 13: // KEY enter
+        if (act)
+            Calendar.cellClick(cal.currentDateEl, ev);
+        break;
+        default:
+        return false;
+    }
+    return Calendar.stopEvent(ev);
+};
+
+/**
+ *  (RE)Initializes the calendar to the given date and firstDayOfWeek
+ */
+Calendar.prototype._init = function (firstDayOfWeek, date) {
+    var today = new Date(),
+        TY = today.getFullYear(),
+        TM = today.getMonth(),
+        TD = today.getDate();
+    this.table.style.visibility = "hidden";
+    var year = date.getFullYear();
+    if (year < this.minYear) {
+        year = this.minYear;
+        date.setFullYear(year);
+    } else if (year > this.maxYear) {
+        year = this.maxYear;
+        date.setFullYear(year);
+    }
+    this.firstDayOfWeek = firstDayOfWeek;
+    this.date = new Date(date);
+    var month = date.getMonth();
+    var mday = date.getDate();
+    var no_days = date.getMonthDays();
+
+    // calendar voodoo for computing the first day that would actually be
+    // displayed in the calendar, even if it's from the previous month.
+    // WARNING: this is magic. ;-)
+    date.setDate(1);
+    var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
+    if (day1 < 0)
+        day1 += 7;
+    date.setDate(-day1);
+    date.setDate(date.getDate() + 1);
+
+    var row = this.tbody.firstChild;
+    var MN = Calendar._SMN[month];
+    var ar_days = this.ar_days = new Array();
+    var weekend = Calendar._TT["WEEKEND"];
+    var dates = this.multiple ? (this.datesCells = {}) : null;
+    for (var i = 0; i < 6; ++i, row = row.nextSibling) {
+        var cell = row.firstChild;
+        if (this.weekNumbers) {
+            cell.className = "day wn";
+            cell.innerHTML = date.getWeekNumber();
+            cell = cell.nextSibling;
+        }
+        row.className = "daysrow";
+        var hasdays = false, iday, dpos = ar_days[i] = [];
+        for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) {
+            iday = date.getDate();
+            var wday = date.getDay();
+            cell.className = "day";
+            cell.pos = i << 4 | j;
+            dpos[j] = cell;
+            var current_month = (date.getMonth() == month);
+            if (!current_month) {
+                if (this.showsOtherMonths) {
+                    cell.className += " othermonth";
+                    cell.otherMonth = true;
+                } else {
+                    cell.className = "emptycell";
+                    cell.innerHTML = "&nbsp;";
+                    cell.disabled = true;
+                    continue;
+                }
+            } else {
+                cell.otherMonth = false;
+                hasdays = true;
+            }
+            cell.disabled = false;
+            cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;
+            if (dates)
+                dates[date.print("%Y%m%d")] = cell;
+            if (this.getDateStatus) {
+                var status = this.getDateStatus(date, year, month, iday);
+                if (this.getDateToolTip) {
+                    var toolTip = this.getDateToolTip(date, year, month, iday);
+                    if (toolTip)
+                        cell.title = toolTip;
+                }
+                if (status === true) {
+                    cell.className += " disabled";
+                    cell.disabled = true;
+                } else {
+                    if (/disabled/i.test(status))
+                        cell.disabled = true;
+                    cell.className += " " + status;
+                }
+            }
+            if (!cell.disabled) {
+                cell.caldate = new Date(date);
+                cell.ttip = "_";
+                if (!this.multiple && current_month
+                    && iday == mday && this.hiliteToday) {
+                    cell.className += " selected";
+                    this.currentDateEl = cell;
+                }
+                if (date.getFullYear() == TY &&
+                    date.getMonth() == TM &&
+                    iday == TD) {
+                    cell.className += " today";
+                    cell.ttip += Calendar._TT["PART_TODAY"];
+                }
+                if (weekend.indexOf(wday.toString()) != -1)
+                    cell.className += cell.otherMonth ? " oweekend" : " weekend";
+            }
+        }
+        if (!(hasdays || this.showsOtherMonths))
+            row.className = "emptyrow";
+    }
+    this.title.innerHTML = Calendar._MN[month] + ", " + year;
+    this.onSetTime();
+    this.table.style.visibility = "visible";
+    this._initMultipleDates();
+    // PROFILE
+    // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms";
+};
+
+Calendar.prototype._initMultipleDates = function() {
+    if (this.multiple) {
+        for (var i in this.multiple) {
+            var cell = this.datesCells[i];
+            var d = this.multiple[i];
+            if (!d)
+                continue;
+            if (cell)
+                cell.className += " selected";
+        }
+    }
+};
+
+Calendar.prototype._toggleMultipleDate = function(date) {
+    if (this.multiple) {
+        var ds = date.print("%Y%m%d");
+        var cell = this.datesCells[ds];
+        if (cell) {
+            var d = this.multiple[ds];
+            if (!d) {
+                Calendar.addClass(cell, "selected");
+                this.multiple[ds] = date;
+            } else {
+                Calendar.removeClass(cell, "selected");
+                delete this.multiple[ds];
+            }
+        }
+    }
+};
+
+Calendar.prototype.setDateToolTipHandler = function (unaryFunction) {
+    this.getDateToolTip = unaryFunction;
+};
+
+/**
+ *  Calls _init function above for going to a certain date (but only if the
+ *  date is different than the currently selected one).
+ */
+Calendar.prototype.setDate = function (date) {
+    if (!date.equalsTo(this.date)) {
+        this._init(this.firstDayOfWeek, date);
+    }
+};
+
+/**
+ *  Refreshes the calendar.  Useful if the "disabledHandler" function is
+ *  dynamic, meaning that the list of disabled date can change at runtime.
+ *  Just * call this function if you think that the list of disabled dates
+ *  should * change.
+ */
+Calendar.prototype.refresh = function () {
+    this._init(this.firstDayOfWeek, this.date);
+};
+
+/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */
+Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {
+    this._init(firstDayOfWeek, this.date);
+    this._displayWeekdays();
+};
+
+/**
+ *  Allows customization of what dates are enabled.  The "unaryFunction"
+ *  parameter must be a function object that receives the date (as a JS Date
+ *  object) and returns a boolean value.  If the returned value is true then
+ *  the passed date will be marked as disabled.
+ */
+Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {
+    this.getDateStatus = unaryFunction;
+};
+
+/** Customization of allowed year range for the calendar. */
+Calendar.prototype.setRange = function (a, z) {
+    this.minYear = a;
+    this.maxYear = z;
+};
+
+/** Calls the first user handler (selectedHandler). */
+Calendar.prototype.callHandler = function () {
+    if (this.onSelected) {
+        this.onSelected(this, this.date.print(this.dateFormat));
+    }
+};
+
+/** Calls the second user handler (closeHandler). */
+Calendar.prototype.callCloseHandler = function () {
+    if (this.onClose) {
+        this.onClose(this);
+    }
+    this.hideShowCovered();
+};
+
+/** Removes the calendar object from the DOM tree and destroys it. */
+Calendar.prototype.destroy = function () {
+    var el = this.element.parentNode;
+    el.removeChild(this.element);
+    Calendar._C = null;
+    window._dynarch_popupCalendar = null;
+};
+
+/**
+ *  Moves the calendar element to a different section in the DOM tree (changes
+ *  its parent).
+ */
+Calendar.prototype.reparent = function (new_parent) {
+    var el = this.element;
+    el.parentNode.removeChild(el);
+    new_parent.appendChild(el);
+};
+
+// This gets called when the user presses a mouse button anywhere in the
+// document, if the calendar is shown.  If the click was outside the open
+// calendar this function closes it.
+Calendar._checkCalendar = function(ev) {
+    var calendar = window._dynarch_popupCalendar;
+    if (!calendar) {
+        return false;
+    }
+    var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
+    for (; el != null && el != calendar.element; el = el.parentNode);
+    if (el == null) {
+        // calls closeHandler which should hide the calendar.
+        window._dynarch_popupCalendar.callCloseHandler();
+        return Calendar.stopEvent(ev);
+    }
+};
+
+/** Shows the calendar. */
+Calendar.prototype.show = function () {
+    var rows = this.table.getElementsByTagName("tr");
+    for (var i = rows.length; i > 0;) {
+        var row = rows[--i];
+        Calendar.removeClass(row, "rowhilite");
+        var cells = row.getElementsByTagName("td");
+        for (var j = cells.length; j > 0;) {
+            var cell = cells[--j];
+            Calendar.removeClass(cell, "hilite");
+            Calendar.removeClass(cell, "active");
+        }
+    }
+    this.element.style.display = "block";
+    this.hidden = false;
+    if (this.isPopup) {
+        window._dynarch_popupCalendar = this;
+        Calendar.addEvent(document, "keydown", Calendar._keyEvent);
+        Calendar.addEvent(document, "keypress", Calendar._keyEvent);
+        Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);
+    }
+    this.hideShowCovered();
+};
+
+/**
+ *  Hides the calendar.  Also removes any "hilite" from the class of any TD
+ *  element.
+ */
+Calendar.prototype.hide = function () {
+    if (this.isPopup) {
+        Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
+        Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
+        Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);
+    }
+    this.element.style.display = "none";
+    this.hidden = true;
+    this.hideShowCovered();
+};
+
+/**
+ *  Shows the calendar at a given absolute position (beware that, depending on
+ *  the calendar element style -- position property -- this might be relative
+ *  to the parent's containing rectangle).
+ */
+Calendar.prototype.showAt = function (x, y) {
+    var s = this.element.style;
+    s.left = x + "px";
+    s.top = y + "px";
+    this.show();
+};
+
+/** Shows the calendar near a given element. */
+Calendar.prototype.showAtElement = function (el, opts) {
+    var self = this;
+    var p = Calendar.getAbsolutePos(el);
+    if (!opts || typeof opts != "string") {
+        this.showAt(p.x, p.y + el.offsetHeight);
+        return true;
+    }
+    function fixPosition(box) {
+        if (box.x < 0)
+            box.x = 0;
+        if (box.y < 0)
+            box.y = 0;
+        var cp = document.createElement("div");
+        var s = cp.style;
+        s.position = "absolute";
+        s.right = s.bottom = s.width = s.height = "0px";
+        document.body.appendChild(cp);
+        var br = Calendar.getAbsolutePos(cp);
+        document.body.removeChild(cp);
+        if (Calendar.is_ie) {
+            br.y += document.body.scrollTop;
+            br.x += document.body.scrollLeft;
+        } else {
+            br.y += window.scrollY;
+            br.x += window.scrollX;
+        }
+        var tmp = box.x + box.width - br.x;
+        if (tmp > 0) box.x -= tmp;
+        tmp = box.y + box.height - br.y;
+        if (tmp > 0) box.y -= tmp;
+    };
+    this.element.style.display = "block";
+    Calendar.continuation_for_the_fucking_khtml_browser = function() {
+        var w = self.element.offsetWidth;
+        var h = self.element.offsetHeight;
+        self.element.style.display = "none";
+        var valign = opts.substr(0, 1);
+        var halign = "l";
+        if (opts.length > 1) {
+            halign = opts.substr(1, 1);
+        }
+        // vertical alignment
+        switch (valign) {
+            case "T": p.y -= h; break;
+            case "B": p.y += el.offsetHeight; break;
+            case "C": p.y += (el.offsetHeight - h) / 2; break;
+            case "t": p.y += el.offsetHeight - h; break;
+            case "b": break; // already there
+        }
+        // horizontal alignment
+        switch (halign) {
+            case "L": p.x -= w; break;
+            case "R": p.x += el.offsetWidth; break;
+            case "C": p.x += (el.offsetWidth - w) / 2; break;
+            case "l": p.x += el.offsetWidth - w; break;
+            case "r": break; // already there
+        }
+        p.width = w;
+        p.height = h + 40;
+        self.monthsCombo.style.display = "none";
+        fixPosition(p);
+        self.showAt(p.x, p.y);
+    };
+    if (Calendar.is_khtml)
+        setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);
+    else
+        Calendar.continuation_for_the_fucking_khtml_browser();
+};
+
+/** Customizes the date format. */
+Calendar.prototype.setDateFormat = function (str) {
+    this.dateFormat = str;
+};
+
+/** Customizes the tooltip date format. */
+Calendar.prototype.setTtDateFormat = function (str) {
+    this.ttDateFormat = str;
+};
+
+/**
+ *  Tries to identify the date represented in a string.  If successful it also
+ *  calls this.setDate which moves the calendar to the given date.
+ */
+Calendar.prototype.parseDate = function(str, fmt) {
+    if (!fmt)
+        fmt = this.dateFormat;
+    this.setDate(Date.parseDate(str, fmt));
+};
+
+Calendar.prototype.hideShowCovered = function () {
+    if (!Calendar.is_ie && !Calendar.is_opera)
+        return;
+    function getVisib(obj){
+        var value = obj.style.visibility;
+        if (!value) {
+            if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
+                if (!Calendar.is_khtml)
+                    value = document.defaultView.
+                        getComputedStyle(obj, "").getPropertyValue("visibility");
+                else
+                    value = '';
+            } else if (obj.currentStyle) { // IE
+                value = obj.currentStyle.visibility;
+            } else
+                value = '';
+        }
+        return value;
+    };
+
+    var tags = new Array("applet", "iframe", "select");
+    var el = this.element;
+
+    var p = Calendar.getAbsolutePos(el);
+    var EX1 = p.x;
+    var EX2 = el.offsetWidth + EX1;
+    var EY1 = p.y;
+    var EY2 = el.offsetHeight + EY1;
+
+    for (var k = tags.length; k > 0; ) {
+        var ar = document.getElementsByTagName(tags[--k]);
+        var cc = null;
+
+        for (var i = ar.length; i > 0;) {
+            cc = ar[--i];
+
+            p = Calendar.getAbsolutePos(cc);
+            var CX1 = p.x;
+            var CX2 = cc.offsetWidth + CX1;
+            var CY1 = p.y;
+            var CY2 = cc.offsetHeight + CY1;
+
+            if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
+                if (!cc.__msh_save_visibility) {
+                    cc.__msh_save_visibility = getVisib(cc);
+                }
+                cc.style.visibility = cc.__msh_save_visibility;
+            } else {
+                if (!cc.__msh_save_visibility) {
+                    cc.__msh_save_visibility = getVisib(cc);
+                }
+                cc.style.visibility = "hidden";
+            }
+        }
+    }
+};
+
+/** Internal function; it displays the bar with the names of the weekday. */
+Calendar.prototype._displayWeekdays = function () {
+    var fdow = this.firstDayOfWeek;
+    var cell = this.firstdayname;
+    var weekend = Calendar._TT["WEEKEND"];
+    for (var i = 0; i < 7; ++i) {
+        cell.className = "day name";
+        var realday = (i + fdow) % 7;
+        if (i) {
+            cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]);
+            cell.navtype = 100;
+            cell.calendar = this;
+            cell.fdow = realday;
+            Calendar._add_evs(cell);
+        }
+        if (weekend.indexOf(realday.toString()) != -1) {
+            Calendar.addClass(cell, "weekend");
+        }
+        cell.innerHTML = Calendar._SDN[(i + fdow) % 7];
+        cell = cell.nextSibling;
+    }
+};
+
+/** Internal function.  Hides all combo boxes that might be displayed. */
+Calendar.prototype._hideCombos = function () {
+    this.monthsCombo.style.display = "none";
+    this.yearsCombo.style.display = "none";
+};
+
+/** Internal function.  Starts dragging the element. */
+Calendar.prototype._dragStart = function (ev) {
+    if (this.dragging) {
+        return;
+    }
+    this.dragging = true;
+    var posX;
+    var posY;
+    if (Calendar.is_ie) {
+        posY = window.event.clientY + document.body.scrollTop;
+        posX = window.event.clientX + document.body.scrollLeft;
+    } else {
+        posY = ev.clientY + window.scrollY;
+        posX = ev.clientX + window.scrollX;
+    }
+    var st = this.element.style;
+    this.xOffs = posX - parseInt(st.left);
+    this.yOffs = posY - parseInt(st.top);
+    with (Calendar) {
+        addEvent(document, "mousemove", calDragIt);
+        addEvent(document, "mouseup", calDragEnd);
+    }
+};
+
+// BEGIN: DATE OBJECT PATCHES
+
+/** Adds the number of days array to the Date object. */
+Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
+
+/** Constants used for time computations */
+Date.SECOND = 1000 /* milliseconds */;
+Date.MINUTE = 60 * Date.SECOND;
+Date.HOUR   = 60 * Date.MINUTE;
+Date.DAY    = 24 * Date.HOUR;
+Date.WEEK   =  7 * Date.DAY;
+
+Date.parseDate = function(str, fmt) {
+    var today = new Date();
+    var y = 0;
+    var m = -1;
+    var d = 0;
+    var a = str.split(/\W+/);
+    var b = fmt.match(/%./g);
+    var i = 0, j = 0;
+    var hr = 0;
+    var min = 0;
+    for (i = 0; i < a.length; ++i) {
+        if (!a[i])
+            continue;
+        switch (b[i]) {
+            case "%d":
+            case "%e":
+            d = parseInt(a[i], 10);
+            break;
+
+            case "%m":
+            m = parseInt(a[i], 10) - 1;
+            break;
+
+            case "%Y":
+            case "%y":
+            y = parseInt(a[i], 10);
+            (y < 100) && (y += (y > 29) ? 1900 : 2000);
+            break;
+
+            case "%b":
+            case "%B":
+            for (j = 0; j < 12; ++j) {
+                if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }
+            }
+            break;
+
+            case "%H":
+            case "%I":
+            case "%k":
+            case "%l":
+            hr = parseInt(a[i], 10);
+            break;
+
+            case "%P":
+            case "%p":
+            if (/pm/i.test(a[i]) && hr < 12)
+                hr += 12;
+            else if (/am/i.test(a[i]) && hr >= 12)
+                hr -= 12;
+            break;
+
+            case "%M":
+            min = parseInt(a[i], 10);
+            break;
+        }
+    }
+    if (isNaN(y)) y = today.getFullYear();
+    if (isNaN(m)) m = today.getMonth();
+    if (isNaN(d)) d = today.getDate();
+    if (isNaN(hr)) hr = today.getHours();
+    if (isNaN(min)) min = today.getMinutes();
+    if (y != 0 && m != -1 && d != 0)
+        return new Date(y, m, d, hr, min, 0);
+    y = 0; m = -1; d = 0;
+    for (i = 0; i < a.length; ++i) {
+        if (a[i].search(/[a-zA-Z]+/) != -1) {
+            var t = -1;
+            for (j = 0; j < 12; ++j) {
+                if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }
+            }
+            if (t != -1) {
+                if (m != -1) {
+                    d = m+1;
+                }
+                m = t;
+            }
+        } else if (parseInt(a[i], 10) <= 12 && m == -1) {
+            m = a[i]-1;
+        } else if (parseInt(a[i], 10) > 31 && y == 0) {
+            y = parseInt(a[i], 10);
+            (y < 100) && (y += (y > 29) ? 1900 : 2000);
+        } else if (d == 0) {
+            d = a[i];
+        }
+    }
+    if (y == 0)
+        y = today.getFullYear();
+    if (m != -1 && d != 0)
+        return new Date(y, m, d, hr, min, 0);
+    return today;
+};
+
+/** Returns the number of days in the current month */
+Date.prototype.getMonthDays = function(month) {
+    var year = this.getFullYear();
+    if (typeof month == "undefined") {
+        month = this.getMonth();
+    }
+    if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) {
+        return 29;
+    } else {
+        return Date._MD[month];
+    }
+};
+
+/** Returns the number of day in the year. */
+Date.prototype.getDayOfYear = function() {
+    var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
+    var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
+    var time = now - then;
+    return Math.floor(time / Date.DAY);
+};
+
+/** Returns the number of the week in year, as defined in ISO 8601. */
+Date.prototype.getWeekNumber = function() {
+    var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
+    var DoW = d.getDay();
+    d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
+    var ms = d.valueOf(); // GMT
+    d.setMonth(0);
+    d.setDate(4); // Thu in Week 1
+    return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
+};
+
+/** Checks date and time equality */
+Date.prototype.equalsTo = function(date) {
+    return ((this.getFullYear() == date.getFullYear()) &&
+        (this.getMonth() == date.getMonth()) &&
+        (this.getDate() == date.getDate()) &&
+        (this.getHours() == date.getHours()) &&
+        (this.getMinutes() == date.getMinutes()));
+};
+
+/** Set only the year, month, date parts (keep existing time) */
+Date.prototype.setDateOnly = function(date) {
+    var tmp = new Date(date);
+    this.setDate(1);
+    this.setFullYear(tmp.getFullYear());
+    this.setMonth(tmp.getMonth());
+    this.setDate(tmp.getDate());
+};
+
+/** Prints the date in a string according to the given format. */
+Date.prototype.print = function (str) {
+    var m = this.getMonth();
+    var d = this.getDate();
+    var y = this.getFullYear();
+    var wn = this.getWeekNumber();
+    var w = this.getDay();
+    var s = {};
+    var hr = this.getHours();
+    var pm = (hr >= 12);
+    var ir = (pm) ? (hr - 12) : hr;
+    var dy = this.getDayOfYear();
+    if (ir == 0)
+        ir = 12;
+    var min = this.getMinutes();
+    var sec = this.getSeconds();
+    s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]
+    s["%A"] = Calendar._DN[w]; // full weekday name
+    s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]
+    s["%B"] = Calendar._MN[m]; // full month name
+    // FIXME: %c : preferred date and time representation for the current locale
+    s["%C"] = 1 + Math.floor(y / 100); // the century number
+    s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31)
+    s["%e"] = d; // the day of the month (range 1 to 31)
+    // FIXME: %D : american date style: %m/%d/%y
+    // FIXME: %E, %F, %G, %g, %h (man strftime)
+    s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format)
+    s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format)
+    s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366)
+    s["%k"] = hr;        // hour, range 0 to 23 (24h format)
+    s["%l"] = ir;        // hour, range 1 to 12 (12h format)
+    s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12
+    s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59
+    s["%n"] = "\n";        // a newline character
+    s["%p"] = pm ? "PM" : "AM";
+    s["%P"] = pm ? "pm" : "am";
+    // FIXME: %r : the time in am/pm notation %I:%M:%S %p
+    // FIXME: %R : the time in 24-hour notation %H:%M
+    s["%s"] = Math.floor(this.getTime() / 1000);
+    s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59
+    s["%t"] = "\t";        // a tab character
+    // FIXME: %T : the time in 24-hour notation (%H:%M:%S)
+    s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
+    s["%u"] = w + 1;    // the day of the week (range 1 to 7, 1 = MON)
+    s["%w"] = w;        // the day of the week (range 0 to 6, 0 = SUN)
+    // FIXME: %x : preferred date representation for the current locale without the time
+    // FIXME: %X : preferred time representation for the current locale without the date
+    s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99)
+    s["%Y"] = y;        // year with the century
+    s["%%"] = "%";        // a literal '%' character
+
+    var re = /%./g;
+    if (!Calendar.is_ie5 && !Calendar.is_khtml)
+        return str.replace(re, function (par) { return s[par] || par; });
+
+    var a = str.match(re);
+    for (var i = 0; i < a.length; i++) {
+        var tmp = s[a[i]];
+        if (tmp) {
+            re = new RegExp(a[i], 'g');
+            str = str.replace(re, tmp);
+        }
+    }
+
+    return str;
+};
+
+Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
+Date.prototype.setFullYear = function(y) {
+    var d = new Date(this);
+    d.__msh_oldSetFullYear(y);
+    if (d.getMonth() != this.getMonth())
+        this.setDate(28);
+    this.__msh_oldSetFullYear(y);
+};
+
+// END: DATE OBJECT PATCHES
+
+
+// global object that remembers the calendar
+window._dynarch_popupCalendar = null;
Index: trunk/include/jscalendar/img.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/jscalendar/img.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/jscalendar/index.php
===================================================================
--- trunk/include/jscalendar/index.php	(nonexistent)
+++ trunk/include/jscalendar/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/jscalendar/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/jscalendar/jscalendar-functions.php
===================================================================
--- trunk/include/jscalendar/jscalendar-functions.php	(nonexistent)
+++ trunk/include/jscalendar/jscalendar-functions.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        include
+ * @package         jscalendar
+ * @subpackage      jscalendar-functions
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// $Id$
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    // convert string from jscalendar to timestamp.
+    // converts dd.mm.yyyy and mm/dd/yyyy, with or without time.
+    // strtotime() may fails with e.g. "dd.mm.yyyy" and PHP4
+    function jscalendar_to_timestamp($str, $offset='') {
+        $str = trim($str);
+        if ($str == '0' || $str == ''){return('0');}
+        if ($offset == '0'){$offset = '';}
+        // convert to yyyy-mm-dd
+        // "dd.mm.yyyy"?
+        if(preg_match('/^\d{1,2}\.\d{1,2}\.\d{2}(\d{2})?/', $str)) {
+            $str = preg_replace('/^(\d{1,2})\.(\d{1,2})\.(\d{2}(\d{2})?)/', '$3-$2-$1', $str);
+        }
+        // "mm/dd/yyyy"?
+        if(preg_match('#^\d{1,2}/\d{1,2}/(\d{2}(\d{2})?)#', $str)) {
+            $str = preg_replace('#^(\d{1,2})/(\d{1,2})/(\d{2}(\d{2})?)#', '$3-$1-$2', $str);
+        }
+        // use strtotime()
+      if($offset!=''){
+          return(strtotime($str, $offset)-TIMEZONE);
+      } else{
+          return(strtotime($str)-TIMEZONE);
+      }
+    }
+}
+

Property changes on: trunk/include/jscalendar/jscalendar-functions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/jscalendar/lang/calendar-af.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-af.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-af.js	(revision 2)
@@ -0,0 +1,48 @@
+// ** I18N Afrikaans
+Calendar._DN = new Array
+("Sondag",
+ "Maandag",
+ "Dinsdag",
+ "Woensdag",
+ "Donderdag",
+ "Vrydag",
+ "Saterdag",
+ "Sondag");
+Calendar._MN = new Array
+("Januarie",
+ "Februarie",
+ "Maart",
+ "April",
+ "Mei",
+ "Junie",
+ "Julie",
+ "Augustus",
+ "September",
+ "Oktober",
+ "November",
+ "Desember");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Verander eerste dag van die week";
+Calendar._TT["PREV_YEAR"] = "Vorige jaar (hou vir keuselys)";
+Calendar._TT["PREV_MONTH"] = "Vorige maand (hou vir keuselys)";
+Calendar._TT["GO_TODAY"] = "Gaan na vandag";
+Calendar._TT["NEXT_MONTH"] = "Volgende maand (hou vir keuselys)";
+Calendar._TT["NEXT_YEAR"] = "Volgende jaar (hou vir keuselys)";
+Calendar._TT["SEL_DATE"] = "Kies datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te skuif";
+Calendar._TT["PART_TODAY"] = " (vandag)";
+Calendar._TT["MON_FIRST"] = "Vertoon Maandag eerste";
+Calendar._TT["SUN_FIRST"] = "Display Sunday first";
+Calendar._TT["CLOSE"] = "Close";
+Calendar._TT["TODAY"] = "Today";
+
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-al.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-al.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-al.js	(revision 2)
@@ -0,0 +1,100 @@
+// Calendar ALBANIAN language
+//author Rigels Gordani rige@hotmail.com
+
+// ditet
+Calendar._DN = new Array
+("E Diele",
+"E Hene",
+"E Marte",
+"E Merkure",
+"E Enjte",
+"E Premte",
+"E Shtune",
+"E Diele");
+
+//ditet shkurt
+Calendar._SDN = new Array
+("Die",
+"Hen",
+"Mar",
+"Mer",
+"Enj",
+"Pre",
+"Sht",
+"Die");
+
+// muajt
+Calendar._MN = new Array
+("Janar",
+"Shkurt",
+"Mars",
+"Prill",
+"Maj",
+"Qeshor",
+"Korrik",
+"Gusht",
+"Shtator",
+"Tetor",
+"Nentor",
+"Dhjetor");
+
+// muajte shkurt
+Calendar._SMN = new Array
+("Jan",
+"Shk",
+"Mar",
+"Pri",
+"Maj",
+"Qes",
+"Kor",
+"Gus",
+"Sht",
+"Tet",
+"Nen",
+"Dhj");
+
+// ndihmesa
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Per kalendarin";
+
+Calendar._TT["ABOUT"] =
+"Zgjedhes i ores/dates ne DHTML \n" +
+"\n\n" +"Zgjedhja e Dates:\n" +
+"- Perdor butonat \xab, \xbb per te zgjedhur vitin\n" +
+"- Perdor  butonat" + String.fromCharCode(0x2039) + ", " + 
+String.fromCharCode(0x203a) +
+" per te  zgjedhur muajin\n" +
+"- Mbani shtypur butonin e mousit per nje zgjedje me te shpejte.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Zgjedhja e kohes:\n" +
+"- Kliko tek ndonje nga pjeset e ores per ta rritur ate\n" +
+"- ose kliko me Shift per ta zvogeluar ate\n" +
+"- ose cliko dhe terhiq per zgjedhje me te shpejte.";
+
+Calendar._TT["PREV_YEAR"] = "Viti i shkuar (prit per menune)";
+Calendar._TT["PREV_MONTH"] = "Muaji i shkuar (prit per menune)";
+Calendar._TT["GO_TODAY"] = "Sot";
+Calendar._TT["NEXT_MONTH"] = "Muaji i ardhshem (prit per menune)";
+Calendar._TT["NEXT_YEAR"] = "Viti i ardhshem (prit per menune)";
+Calendar._TT["SEL_DATE"] = "Zgjidh daten";
+Calendar._TT["DRAG_TO_MOVE"] = "Terhiqe per te levizur";
+Calendar._TT["PART_TODAY"] = " (sot)";
+
+// "%s" eshte dita e pare e javes
+// %s do te zevendesohet me emrin e dite
+Calendar._TT["DAY_FIRST"] = "Trego te %s te paren";
+
+
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Mbyll";
+Calendar._TT["TODAY"] = "Sot";
+Calendar._TT["TIME_PART"] = "Kliko me (Shift-)ose terhiqe per te ndryshuar vleren";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Java";
+Calendar._TT["TIME"] = "Koha:";
+
Index: trunk/include/jscalendar/lang/calendar-bg.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-bg.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-bg.js	(revision 2)
@@ -0,0 +1,125 @@
+// ** I18N
+
+// Calendar BG language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Translator: Valentin Sheiretsky, <valio@valio.eu.org>
+// Encoding: Windows-1251
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("\u041d\u0435\u0434\u0435\u043b\u044f",
+ "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+ "\u0412\u0442\u043e\u0440\u043d\u0438\u043a",
+ "\u0421\u0440\u044f\u0434\u0430",
+ "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+ "\u041f\u0435\u0442\u044a\u043a",
+ "\u0421\u044a\u0431\u043e\u0442\u0430",
+ "\u041d\u0435\u0434\u0435\u043b\u044f");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("\u041d\u0435\u0434",
+ "\u041f\u043e\u043d",
+ "\u0412\u0442\u043e",
+ "\u0421\u0440\u044f",
+ "\u0427\u0435\u0442",
+ "\u041f\u0435\u0442",
+ "\u0421\u044a\u0431",
+ "\u041d\u0435\u0434");
+
+// full month names
+Calendar._MN = new Array
+("\u042f\u043d\u0443\u0430\u0440\u0438",
+ "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+ "\u041c\u0430\u0440\u0442",
+ "\u0410\u043f\u0440\u0438\u043b",
+ "\u041c\u0430\u0439",
+ "\u042e\u043d\u0438",
+ "\u042e\u043b\u0438",
+ "\u0410\u0432\u0433\u0443\u0441\u0442",
+ "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+ "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+ "\u041d\u043e\u0435\u043c\u0432\u0440\u0438",
+ "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438");
+
+// short month names
+Calendar._SMN = new Array
+("\u042f\u043d\u0443",
+ "\u0424\u0435\u0432",
+ "\u041c\u0430\u0440",
+ "\u0410\u043f\u0440",
+ "\u041c\u0430\u0439",
+ "\u042e\u043d\u0438",
+ "\u042e\u043b\u0438",
+ "\u0410\u0432\u0433",
+ "\u0421\u0435\u043f",
+ "\u041e\u043a\u0442",
+ "\u041d\u043e\u0435",
+ "\u0414\u0435\u043a");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0430";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Date selection:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
+"- Hold mouse button on any of the above buttons for faster selection.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- Click on any of the time parts to increase it\n" +
+"- or Shift-click to decrease it\n" +
+"- or click and drag for faster selection.";
+
+Calendar._TT["PREV_YEAR"] = "\u041f\u0440\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430 (\u0437\u0430\u0434\u0440\u044a\u0436\u0442\u0435 \u0437\u0430 \u043c\u0435\u043d\u044e)";
+Calendar._TT["PREV_MONTH"] = "\u041f\u0440\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446 (\u0437\u0430\u0434\u0440\u044a\u0436\u0442\u0435 \u0437\u0430 \u043c\u0435\u043d\u044e)";
+Calendar._TT["GO_TODAY"] = "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043d\u0435\u0441";
+Calendar._TT["NEXT_MONTH"] = "\u0421\u043b\u0435\u0434\u0432\u0430\u0449 \u043c\u0435\u0441\u0435\u0446 (\u0437\u0430\u0434\u0440\u044a\u0436\u0442\u0435 \u0437\u0430 \u043c\u0435\u043d\u044e)";
+Calendar._TT["NEXT_YEAR"] = "\u0421\u043b\u0435\u0434\u0432\u0430\u0449\u0430 \u0433\u043e\u0434\u0438\u043d\u0430 (\u0437\u0430\u0434\u0440\u044a\u0436\u0442\u0435 \u0437\u0430 \u043c\u0435\u043d\u044e)";
+Calendar._TT["SEL_DATE"] = "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u0442\u0430";
+Calendar._TT["DRAG_TO_MOVE"] = "\u041f\u0440\u0435\u043c\u0435\u0441\u0442\u0432\u0430\u043d\u0435";
+Calendar._TT["PART_TODAY"] = " (\u0434\u043d\u0435\u0441)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "%s \u043a\u0430\u0442\u043e \u043f\u044a\u0440\u0432\u0438 \u0434\u0435\u043d";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u0442\u0435";
+Calendar._TT["TODAY"] = "\u0414\u043d\u0435\u0441";
+Calendar._TT["TIME_PART"] = "(Shift-)Click \u0438\u043b\u0438 drag \u0437\u0430 \u0434\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y";
+
+Calendar._TT["WK"] = "\u0421\u0435\u0434\u043c";
+Calendar._TT["TIME"] = "\u0427\u0430\u0441:";
+
Index: trunk/include/jscalendar/lang/calendar-br.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-br.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-br.js	(revision 2)
@@ -0,0 +1,107 @@
+// ** I18N
+
+// Calendar pt-BR language
+// Author: Fernando Dourado, <fernando.dourado@ig.com.br>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Domingo",
+ "Segunda",
+ "Ter\u00e7a",
+ "Quarta",
+ "Quinta",
+ "Sexta",
+ "Sab\u00e1do",
+ "Domingo");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+// [No changes using default values]
+
+// full month names
+Calendar._MN = new Array
+("Janeiro",
+ "Fevereiro",
+ "Mar\u00e7o",
+ "Abril",
+ "Maio",
+ "Junho",
+ "Julho",
+ "Agosto",
+ "Setembro",
+ "Outubro",
+ "Novembro",
+ "Dezembro");
+
+// short month names
+// [No changes using default values]
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Sobre o calend\u00e1rio";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Translate to portuguese Brazil (pt-BR) by Fernando Dourado (fernando.dourado@ig.com.br)\n" +
+"Tradu\u00e7\u00e3o para o portugu\u00eas Brasil (pt-BR) por Fernando Dourado (fernando.dourado@ig.com.br)" +
+"\n\n" +
+"Selecionar data:\n" +
+"- Use as teclas \xab, \xbb para selecionar o ano\n" +
+"- Use as teclas " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o m\u00eas\n" +
+"- Clique e segure com o mouse em qualquer bot\u00e3o para selecionar rapidamente.";
+
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selecionar hora:\n" +
+"- Clique em qualquer uma das partes da hora para aumentar\n" +
+"- ou Shift-clique para diminuir\n" +
+"- ou clique e arraste para selecionar rapidamente.";
+
+Calendar._TT["PREV_YEAR"] = "Ano anterior (clique e segure para menu)";
+Calendar._TT["PREV_MONTH"] = "M\u00eas anterior (clique e segure para menu)";
+Calendar._TT["GO_TODAY"] = "Ir para a data atual";
+Calendar._TT["NEXT_MONTH"] = "Pr\u00f3ximo m\u00eas (clique e segure para menu)";
+Calendar._TT["NEXT_YEAR"] = "Pr\u00f3ximo ano (clique e segure para menu)";
+Calendar._TT["SEL_DATE"] = "Selecione uma data";
+Calendar._TT["DRAG_TO_MOVE"] = "Clique e segure para mover";
+Calendar._TT["PART_TODAY"] = " (hoje)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Exibir %s primeiro";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Fechar";
+Calendar._TT["TODAY"] = "Hoje";
+Calendar._TT["TIME_PART"] = "(Shift-)Clique ou arraste para mudar o valor";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%d de %B de %Y";
+
+Calendar._TT["WK"] = "sem";
+Calendar._TT["TIME"] = "Hora:";
Index: trunk/include/jscalendar/lang/calendar-ca.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-ca.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-ca.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar CA language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Diumenge",
+ "Dilluns",
+ "Dimarts",
+ "Dimecres",
+ "Dijous",
+ "Divendres",
+ "Dissabte",
+ "Diumenge");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Diu",
+ "Dil",
+ "Dmt",
+ "Dmc",
+ "Dij",
+ "Div",
+ "Dis",
+ "Diu");
+
+// full month names
+Calendar._MN = new Array
+("Gener",
+ "Febrer",
+ "Mar\u00e7",
+ "Abril",
+ "Maig",
+ "Juny",
+ "Juliol",
+ "Agost",
+ "Setembre",
+ "Octubre",
+ "Novembre",
+ "Desembre");
+
+// short month names
+Calendar._SMN = new Array
+("Gen",
+ "Feb",
+ "Mar",
+ "Abr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Ago",
+ "Set",
+ "Oct",
+ "Nov",
+ "Des");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Sobre el calendari";
+
+Calendar._TT["ABOUT"] =
+"DHTML Selector de Data/Hora\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Sel.lecci\u00f3 de Dates:\n" +
+"- Fes servir els botons \xab, \xbb per sel.leccionar l'any\n" +
+"- Fes servir els botons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per se.lecciconar el mes\n" +
+"- Mant\u00e9 el ratol\u00ed apretat en qualsevol dels anteriors per sel.lecci\u00f3 r\u00e0pida.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- claca en qualsevol de les parts de la hora per augmentar-les\n" +
+"- o Shift-click per decrementar-la\n" +
+"- or click and arrastra per sel.lecci\u00f3 r\u00e0pida.";
+
+Calendar._TT["PREV_YEAR"] = "Any anterior (Mantenir per menu)";
+Calendar._TT["PREV_MONTH"] = "Mes anterior (Mantenir per menu)";
+Calendar._TT["GO_TODAY"] = "Anar a avui";
+Calendar._TT["NEXT_MONTH"] = "Mes seg\u00fcent (Mantenir per menu)";
+Calendar._TT["NEXT_YEAR"] = "Any seg\u00fcent (Mantenir per menu)";
+Calendar._TT["SEL_DATE"] = "Sel.leccionar data";
+Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar per moure";
+Calendar._TT["PART_TODAY"] = " (avui)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Mostra %s primer";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Tanca";
+Calendar._TT["TODAY"] = "Avui";
+Calendar._TT["TIME_PART"] = "(Shift-)Click a arrastra per canviar el valor";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "st";
+Calendar._TT["TIME"] = "Hora:";
Index: trunk/include/jscalendar/lang/calendar-cs.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-cs.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-cs.js	(revision 2)
@@ -0,0 +1,65 @@
+/* 
+    calendar-cs-win.js
+    language: Czech
+    encoding: windows-1250
+    author: Lubos Jerabek (xnet@seznam.cz)
+            Jan Uhlir (espinosa@centrum.cz)
+*/
+
+// ** I18N
+Calendar._DN  = new Array('Ned\u011ble','Pond\u011bl\u00ed','\u00dater\u00fd','St\u0159eda','\u010ctvrtek','P\u00e1tek','Sobota','Ned\u011ble');
+Calendar._SDN = new Array('Ne','Po','\u00dat','St','\u010ct','P\u00e1','So','Ne');
+Calendar._MN  = new Array('Leden','\u00danor','B\u0159ezen','Duben','Kv\u011bten','\u010cerven','\u010cervenec','Srpen','Z\u00e1\u0159\u00ed','\u0158\u00edjen','Listopad','Prosinec');
+Calendar._SMN = new Array('Led','\u00dano','B\u0159e','Dub','Kv\u011b','\u010crv','\u010cvc','Srp','Z\u00e1\u0159','\u0158\u00edj','Lis','Pro');
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "O komponent\u011b kalend\u00e1\u0159";
+Calendar._TT["TOGGLE"] = "Zm\u011bna prvn\u00edho dne v t\u00fddnu";
+Calendar._TT["PREV_YEAR"] = "P\u0159edchoz\u00ed rok (p\u0159idr\u017e pro menu)";
+Calendar._TT["PREV_MONTH"] = "P\u0159edchoz\u00ed m\u011bs\u00edc (p\u0159idr\u017e pro menu)";
+Calendar._TT["GO_TODAY"] = "Dne\u0161n\u00ed datum";
+Calendar._TT["NEXT_MONTH"] = "Dal\u0161\u00ed m\u011bs\u00edc (p\u0159idr\u017e pro menu)";
+Calendar._TT["NEXT_YEAR"] = "Dal\u0161\u00ed rok (p\u0159idr\u017e pro menu)";
+Calendar._TT["SEL_DATE"] = "Vyber datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Chy\u0165 a t\u00e1hni, pro p\u0159esun";
+Calendar._TT["PART_TODAY"] = " (dnes)";
+Calendar._TT["MON_FIRST"] = "Uka\u017e jako prvn\u00ed Pond\u011bl\u00ed";
+//Calendar._TT["SUN_FIRST"] = "Uka\u017e jako prvn\u00ed Ned\u011bli";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"V\u00fdb\u011br datumu:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Pou\u017eijte tla\u010d\u00edtka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k v\u00fdb\u011bru m\u011bs\u00edce\n" +
+"- Podr\u017ete tla\u010d\u00edtko my\u0161i na jak\u00e9mkoliv z t\u011bch tla\u010d\u00edtek pro rychlej\u0161\u00ed v\u00fdb\u011br.";
+
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"V\u00fdb\u011br \u010dasu:\n" +
+"- Klikn\u011bte na jakoukoliv z \u010d\u00e1st\u00ed v\u00fdb\u011bru \u010dasu pro zv\u00fd\u0161en\u00ed.\n" +
+"- nebo Shift-click pro sn\u00ed\u017een\u00ed\n" +
+"- nebo klikn\u011bte a t\u00e1hn\u011bte pro rychlej\u0161\u00ed v\u00fdb\u011br.";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Zobraz %s prvn\u00ed";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Zav\u0159\u00edt";
+Calendar._TT["TODAY"] = "Dnes";
+Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo t\u00e1hni pro zm\u011bnu hodnoty";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "\u010cas:";
Index: trunk/include/jscalendar/lang/calendar-da.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-da.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-da.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar DA language
+// Author: Michael Thingmand Henriksen, <michael (a) thingmand dot dk>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible. We strongly believe that
+// Unicode is the answer to a real internationalized world. Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("S\u00f8ndag",
+"Mandag",
+"Tirsdag",
+"Onsdag",
+"Torsdag",
+"Fredag",
+"L\u00f8rdag",
+"S\u00f8ndag");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary. We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+// Calendar._SDN_len = N; // short day name length
+// Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("S\u00f8n",
+"Man",
+"Tir",
+"Ons",
+"Tor",
+"Fre",
+"L\u00f8r",
+"S\u00f8n");
+
+// full month names
+Calendar._MN = new Array
+("Januar",
+"Februar",
+"Marts",
+"April",
+"Maj",
+"Juni",
+"Juli",
+"August",
+"September",
+"Oktober",
+"November",
+"December");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+"Feb",
+"Mar",
+"Apr",
+"Maj",
+"Jun",
+"Jul",
+"Aug",
+"Sep",
+"Okt",
+"Nov",
+"Dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Om Kalenderen";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For den seneste version bes\u00f8g: http://www.dynarch.com/projects/calendar/\n"; +
+"Distribueret under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detajler." +
+"\n\n" +
+"Valg af dato:\n" +
+"- Brug \xab, \xbb knapperne for at v\u00e6lge \u00e5r\n" +
+"- Brug " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knapperne for at v\u00e6lge m\u00e5ned\n" +
+"- Hold knappen p\u00e5 musen nede p\u00e5 knapperne ovenfor for hurtigere valg.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Valg af tid:\n" +
+"- Klik p\u00e5 en vilk\u00e5rlig del for st\u00f8rre v\u00e6rdi\n" +
+"- eller Shift-klik for for mindre v\u00e6rdi\n" +
+"- eller klik og tr\u00e6k for hurtigere valg.";
+
+Calendar._TT["PREV_YEAR"] = "\u00c9t \u00e5r tilbage (hold for menu)";
+Calendar._TT["PREV_MONTH"] = "\u00c9n m\u00e5ned tilbage (hold for menu)";
+Calendar._TT["GO_TODAY"] = "G\u00e5 til i dag";
+Calendar._TT["NEXT_MONTH"] = "\u00c9n m\u00e5ned frem (hold for menu)";
+Calendar._TT["NEXT_YEAR"] = "\u00c9t \u00e5r frem (hold for menu)";
+Calendar._TT["SEL_DATE"] = "V\u00e6lg dag";
+Calendar._TT["DRAG_TO_MOVE"] = "Tr\u00e6k vinduet";
+Calendar._TT["PART_TODAY"] = " (i dag)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Vis %s f\u00f8rst";
+
+// This may be locale-dependent. It specifies the week-end days, as an array
+// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Luk";
+Calendar._TT["TODAY"] = "I dag";
+Calendar._TT["TIME_PART"] = "(Shift-)klik eller tr\u00e6k for at \u00e6ndre v\u00e6rdi";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Uge";
+Calendar._TT["TIME"] = "Tid:";
Index: trunk/include/jscalendar/lang/calendar-de.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-de.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-de.js	(revision 2)
@@ -0,0 +1,124 @@
+// ** I18N
+
+// Calendar DE language
+// Author: Jack (tR), <jack@jtr.de>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Sonntag",
+ "Montag",
+ "Dienstag",
+ "Mittwoch",
+ "Donnerstag",
+ "Freitag",
+ "Samstag",
+ "Sonntag");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("So",
+ "Mo",
+ "Di",
+ "Mi",
+ "Do",
+ "Fr",
+ "Sa",
+ "So");
+
+// full month names
+Calendar._MN = new Array
+("Januar",
+ "Februar",
+ "M\u00e4rz",
+ "April",
+ "Mai",
+ "Juni",
+ "Juli",
+ "August",
+ "September",
+ "Oktober",
+ "November",
+ "Dezember");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "M\u00e4r",
+ "Apr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dez");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Datum ausw\u00e4hlen:\n" +
+"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" +
+"- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" +
+"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Zeit ausw\u00e4hlen:\n" +
+"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" +
+"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" +
+"- oder klicken und festhalten f\u00fcr Schnellauswahl.";
+
+Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen";
+Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)";
+Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)";
+Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen";
+Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)";
+Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)";
+Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen";
+Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten";
+Calendar._TT["PART_TODAY"] = " (Heute)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s ";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Schlie\u00dfen";
+Calendar._TT["TODAY"] = "Heute";
+Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "Zeit:";
Index: trunk/include/jscalendar/lang/calendar-du.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-du.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-du.js	(revision 2)
@@ -0,0 +1,51 @@
+// ** I18N
+Calendar._DN = new Array
+("Zondag",
+ "Maandag",
+ "Dinsdag",
+ "Woensdag",
+ "Donderdag",
+ "Vrijdag",
+ "Zaterdag",
+ "Zondag");
+Calendar._MN = new Array
+("Januari",
+ "Februari",
+ "Maart",
+ "April",
+ "Mei",
+ "Juni",
+ "Juli",
+ "Augustus",
+ "September",
+ "Oktober",
+ "November",
+ "December");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Toggle startdag van de week";
+Calendar._TT["PREV_YEAR"] = "Vorig jaar (indrukken voor menu)";
+Calendar._TT["PREV_MONTH"] = "Vorige month (indrukken voor menu)";
+Calendar._TT["GO_TODAY"] = "Naar Vandaag";
+Calendar._TT["NEXT_MONTH"] = "Volgende Maand (indrukken voor menu)";
+Calendar._TT["NEXT_YEAR"] = "Volgend jaar (indrukken voor menu)";
+Calendar._TT["SEL_DATE"] = "Selecteer datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te verplaatsen";
+Calendar._TT["PART_TODAY"] = " (vandaag)";
+Calendar._TT["MON_FIRST"] = "Toon Maandag eerst";
+Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst";
+Calendar._TT["CLOSE"] = "Sluiten";
+Calendar._TT["TODAY"] = "Vandaag";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd";
+Calendar._TT["TT_DATE_FORMAT"] = "D, M d";
+
+Calendar._TT["WK"] = "wk";
+
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-el.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-el.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-el.js	(revision 2)
@@ -0,0 +1,93 @@
+// ** I18N
+Calendar._DN = new Array
+("\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+ "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+ "\u03a4\u03c1\u03af\u03c4\u03b7",
+ "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+ "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+ "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+ "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf",
+ "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae");
+
+Calendar._SDN = new Array
+("\u039a\u03c5",
+ "\u0394\u03b5",
+ "T\u03c1",
+ "\u03a4\u03b5",
+ "\u03a0\u03b5",
+ "\u03a0\u03b1",
+ "\u03a3\u03b1",
+ "\u039a\u03c5");
+
+Calendar._MN = new Array
+("\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+ "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
+ "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
+ "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
+ "\u039c\u03ac\u03ca\u03bf\u03c2",
+ "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
+ "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
+ "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
+ "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+ "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
+ "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
+ "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2");
+
+Calendar._SMN = new Array
+("\u0399\u03b1\u03bd",
+ "\u03a6\u03b5\u03b2",
+ "\u039c\u03b1\u03c1",
+ "\u0391\u03c0\u03c1",
+ "\u039c\u03b1\u03b9",
+ "\u0399\u03bf\u03c5\u03bd",
+ "\u0399\u03bf\u03c5\u03bb",
+ "\u0391\u03c5\u03b3",
+ "\u03a3\u03b5\u03c0",
+ "\u039f\u03ba\u03c4",
+ "\u039d\u03bf\u03b5",
+ "\u0394\u03b5\u03ba");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u0393\u03b9\u03b1 \u03c4\u03bf \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf";
+
+Calendar._TT["ABOUT"] =
+"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03b1\u03c2 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2/\u03ce\u03c1\u03b1\u03c2 \u03c3\u03b5 DHTML\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"\u0393\u03b9\u03b1 \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2:\n" +
+"- \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03c4\u03b5 \u03c4\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \xab, \xbb \u03b3\u03b9\u03b1 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03ad\u03c4\u03bf\u03c5\u03c2\n" +
+"- \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03c4\u03b5 \u03c4\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " \u03b3\u03b9\u03b1 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03ae\u03bd\u03b1\n" +
+"- \u039a\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u03c0\u03bf\u03bd\u03c4\u03b9\u03ba\u03bf\u03cd \u03c0\u03b1\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf \u03c3\u03c4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03b3\u03b9\u03b1 \u03c0\u03b9\u03bf \u03b3\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03ce\u03c1\u03b1\u03c2:\n" +
+"- \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03b5 \u03ad\u03bd\u03b1 \u03b1\u03c0\u03cc \u03c4\u03b1 \u03bc\u03ad\u03c1\u03b7 \u03c4\u03b7\u03c2 \u03ce\u03c1\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03b1\u03cd\u03be\u03b7\u03c3\u03b7\n" +
+"- \u03ae Shift-\u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03bc\u03b5\u03af\u03c9\u03c3\u03b7\n" +
+"- \u03ae \u03ba\u03bb\u03b9\u03ba \u03ba\u03b1\u03b9 \u03bc\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b3\u03b9\u03b1 \u03c0\u03b9\u03bf \u03b3\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae.";
+Calendar._TT["TOGGLE"] = "\u039c\u03c0\u03ac\u03c1\u03b1 \u03c0\u03c1\u03ce\u03c4\u03b7\u03c2 \u03b7\u03bc\u03ad\u03c1\u03b1\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b1\u03c2";
+Calendar._TT["PREV_YEAR"] = "\u03a0\u03c1\u03bf\u03b7\u03b3. \u03ad\u03c4\u03bf\u03c2 (\u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd)";
+Calendar._TT["PREV_MONTH"] = "\u03a0\u03c1\u03bf\u03b7\u03b3. \u03bc\u03ae\u03bd\u03b1\u03c2 (\u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd)";
+Calendar._TT["GO_TODAY"] = "\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1";
+Calendar._TT["NEXT_MONTH"] = "\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2 (\u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd)";
+Calendar._TT["NEXT_YEAR"] = "\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ad\u03c4\u03bf\u03c2 (\u03ba\u03c1\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd)";
+Calendar._TT["SEL_DATE"] = "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1";
+Calendar._TT["DRAG_TO_MOVE"] = "\u03a3\u03cd\u03c1\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bc\u03b5\u03c4\u03b1\u03ba\u03b9\u03bd\u03ae\u03c3\u03b5\u03c4\u03b5";
+Calendar._TT["PART_TODAY"] = " (\u03c3\u03ae\u03bc\u03b5\u03c1\u03b1)";
+Calendar._TT["MON_FIRST"] = "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1\u03c2 \u03c0\u03c1\u03ce\u03c4\u03b1";
+Calendar._TT["SUN_FIRST"] = "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae\u03c2 \u03c0\u03c1\u03ce\u03c4\u03b1";
+Calendar._TT["CLOSE"] = "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf";
+Calendar._TT["TODAY"] = "\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1";
+Calendar._TT["TIME_PART"] = "(Shift-)\u03ba\u03bb\u03b9\u03ba \u03ae \u03bc\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b3\u03b9\u03b1 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "D, d M";
+
+Calendar._TT["WK"] = "\u03b5\u03b2\u03b4";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-en.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-en.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-en.js	(revision 2)
@@ -0,0 +1,127 @@
+// ** I18N
+
+// Calendar EN language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Sunday",
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday",
+ "Sunday");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat",
+ "Sun");
+
+// First day of the week. "0" means display Sunday first, "1" means display
+// Monday first, etc.
+Calendar._FD = 0;
+
+// full month names
+Calendar._MN = new Array
+("January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "About the calendar";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Date selection:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
+"- Hold mouse button on any of the above buttons for faster selection.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- Click on any of the time parts to increase it\n" +
+"- or Shift-click to decrease it\n" +
+"- or click and drag for faster selection.";
+
+Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
+Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
+Calendar._TT["GO_TODAY"] = "Go Today";
+Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
+Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
+Calendar._TT["SEL_DATE"] = "Select date";
+Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
+Calendar._TT["PART_TODAY"] = " (today)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Close";
+Calendar._TT["TODAY"] = "Today";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-es.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-es.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-es.js	(revision 2)
@@ -0,0 +1,129 @@
+// ** I18N
+
+// Calendar ES (spanish) language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Updater: Servilio Afre Puentes <servilios@yahoo.com>
+// Updated: 2004-06-03
+// Encoding: utf-8
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Domingo",
+ "Lunes",
+ "Martes",
+ "Mi\u00e9rcoles",
+ "Jueves",
+ "Viernes",
+ "S\u00e1bado",
+ "Domingo");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Dom",
+ "Lun",
+ "Mar",
+ "Mi\u00e9",
+ "Jue",
+ "Vie",
+ "S\u00e1b",
+ "Dom");
+
+// First day of the week. "0" means display Sunday first, "1" means display
+// Monday first, etc.
+Calendar._FD = 1;
+
+// full month names
+Calendar._MN = new Array
+("Enero",
+ "Febrero",
+ "Marzo",
+ "Abril",
+ "Mayo",
+ "Junio",
+ "Julio",
+ "Agosto",
+ "Septiembre",
+ "Octubre",
+ "Noviembre",
+ "Diciembre");
+
+// short month names
+Calendar._SMN = new Array
+("Ene",
+ "Feb",
+ "Mar",
+ "Abr",
+ "May",
+ "Jun",
+ "Jul",
+ "Ago",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dic");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Acerca del calendario";
+
+Calendar._TT["ABOUT"] =
+"Selector DHTML de Fecha/Hora\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Para conseguir la \u00faltima versi\u00f3n visite: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuido bajo licencia GNU LGPL. Visite http://gnu.org/licenses/lgpl.html para m\u00e1s detalles." +
+"\n\n" +
+"Selecci\u00f3n de fecha:\n" +
+"- Use los botones \xab, \xbb para seleccionar el a\u00f1o\n" +
+"- Use los botones " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" +
+"- Mantenga pulsado el rat\u00f3n en cualquiera de estos botones para una selecci\u00f3n r\u00e1pida.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selecci\u00f3n de hora:\n" +
+"- Pulse en cualquiera de las partes de la hora para incrementarla\n" +
+"- o pulse las may\u00fasculas mientras hace clic para decrementarla\n" +
+"- o haga clic y arrastre el rat\u00f3n para una selecci\u00f3n m\u00e1s r\u00e1pida.";
+
+Calendar._TT["PREV_YEAR"] = "A\u00f1o anterior (mantener para men\u00fa)";
+Calendar._TT["PREV_MONTH"] = "Mes anterior (mantener para men\u00fa)";
+Calendar._TT["GO_TODAY"] = "Ir a hoy";
+Calendar._TT["NEXT_MONTH"] = "Mes siguiente (mantener para men\u00fa)";
+Calendar._TT["NEXT_YEAR"] = "A\u00f1o siguiente (mantener para men\u00fa)";
+Calendar._TT["SEL_DATE"] = "Seleccionar fecha";
+Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar para mover";
+Calendar._TT["PART_TODAY"] = " (hoy)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Hacer %s primer d\u00eda de la semana";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Cerrar";
+Calendar._TT["TODAY"] = "Hoy";
+Calendar._TT["TIME_PART"] = "(May\u00fascula-)Clic o arrastre para cambiar valor";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y";
+
+Calendar._TT["WK"] = "sem";
+Calendar._TT["TIME"] = "Hora:";
Index: trunk/include/jscalendar/lang/calendar-fi.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-fi.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-fi.js	(revision 2)
@@ -0,0 +1,102 @@
+// ** I18N
+
+// Calendar FI language (Finnish, Suomi)
+// Author: Jarno K\u00e4yhk\u00f6, <gambler@phnet.fi>
+// Encoding: UTF-8
+// Distributed under the same terms as the calendar itself.
+
+// full day names
+Calendar._DN = new Array
+("Sunnuntai",
+ "Maanantai",
+ "Tiistai",
+ "Keskiviikko",
+ "Torstai",
+ "Perjantai",
+ "Lauantai",
+ "Sunnuntai");
+
+// short day names
+Calendar._SDN = new Array
+("Su",
+ "Ma",
+ "Ti",
+ "Ke",
+ "To",
+ "Pe",
+ "La",
+ "Su");
+
+// full month names
+Calendar._MN = new Array
+("Tammikuu",
+ "Helmikuu",
+ "Maaliskuu",
+ "Huhtikuu",
+ "Toukokuu",
+ "Kes\u00e4kuu",
+ "Hein\u00e4kuu",
+ "Elokuu",
+ "Syyskuu",
+ "Lokakuu",
+ "Marraskuu",
+ "Joulukuu");
+
+// short month names
+Calendar._SMN = new Array
+("Tam",
+ "Hel",
+ "Maa",
+ "Huh",
+ "Tou",
+ "Kes",
+ "Hei",
+ "Elo",
+ "Syy",
+ "Lok",
+ "Mar",
+ "Jou");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Tietoja kalenterista";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Uusin versio osoitteessa: http://www.dynarch.com/projects/calendar/\n" +
+"Julkaistu GNU LGPL lisenssin alaisuudessa. Lis\u00e4tietoja osoitteessa http://gnu.org/licenses/lgpl.html" +
+"\n\n" +
+"P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 valinta:\n" +
+"- K\u00e4yt\u00e4 \xab, \xbb painikkeita valitaksesi vuosi\n" +
+"- K\u00e4yt\u00e4 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " painikkeita valitaksesi kuukausi\n" +
+"- Pit\u00e4m\u00e4ll\u00e4 hiiren painiketta mink\u00e4 tahansa yll\u00e4 olevan painikkeen kohdalla, saat n\u00e4kyviin valikon nopeampaan siirtymiseen.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Ajan valinta:\n" +
+"- Klikkaa kellonajan numeroita lis\u00e4t\u00e4ksesi aikaa\n" +
+"- tai pit\u00e4m\u00e4ll\u00e4 Shift-n\u00e4pp\u00e4int\u00e4 pohjassa saat aikaa taaksep\u00e4in\n" +
+"- tai klikkaa ja pid\u00e4 hiiren painike pohjassa sek\u00e4 liikuta hiirt\u00e4 muuttaaksesi aikaa nopeasti eteen- ja taaksep\u00e4in.";
+
+Calendar._TT["PREV_YEAR"] = "Edell. vuosi (paina hetki, n\u00e4et valikon)";
+Calendar._TT["PREV_MONTH"] = "Edell. kuukausi (paina hetki, n\u00e4et valikon)";
+Calendar._TT["GO_TODAY"] = "Siirry t\u00e4h\u00e4n p\u00e4iv\u00e4\u00e4n";
+Calendar._TT["NEXT_MONTH"] = "Seur. kuukausi (paina hetki, n\u00e4et valikon)";
+Calendar._TT["NEXT_YEAR"] = "Seur. vuosi (paina hetki, n\u00e4et valikon)";
+Calendar._TT["SEL_DATE"] = "Valitse p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4";
+Calendar._TT["DRAG_TO_MOVE"] = "Siirr\u00e4 kalenterin paikkaa";
+Calendar._TT["PART_TODAY"] = " (t\u00e4n\u00e4\u00e4n)";
+Calendar._TT["MON_FIRST"] = "N\u00e4yt\u00e4 maanantai ensimm\u00e4isen\u00e4";
+Calendar._TT["SUN_FIRST"] = "N\u00e4yt\u00e4 sunnuntai ensimm\u00e4isen\u00e4";
+Calendar._TT["CLOSE"] = "Sulje";
+Calendar._TT["TODAY"] = "T\u00e4n\u00e4\u00e4n";
+Calendar._TT["TIME_PART"] = "(Shift-) Klikkaa tai liikuta muuttaaksesi aikaa";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%d.%m.%Y";
+
+Calendar._TT["WK"] = "Vko";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-fr.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-fr.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-fr.js	(revision 2)
@@ -0,0 +1,125 @@
+// ** I18N
+
+// Calendar EN language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// Translator: David Duret, <pilgrim@mala-template.net> from previous french version
+
+// full day names
+Calendar._DN = new Array
+("Dimanche",
+ "Lundi",
+ "Mardi",
+ "Mercredi",
+ "Jeudi",
+ "Vendredi",
+ "Samedi",
+ "Dimanche");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Dim",
+ "Lun",
+ "Mar",
+ "Mar",
+ "Jeu",
+ "Ven",
+ "Sam",
+ "Dim");
+
+// full month names
+Calendar._MN = new Array
+("Janvier",
+ "F\u00e9vrier",
+ "Mars",
+ "Avril",
+ "Mai",
+ "Juin",
+ "Juillet",
+ "Ao\u00fbt",
+ "Septembre",
+ "Octobre",
+ "Novembre",
+ "D\u00e9cembre");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Fev",
+ "Mar",
+ "Avr",
+ "Mai",
+ "Juin",
+ "Juil",
+ "Aout",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "A propos du calendrier";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Heure Selecteur\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Pour la derniere version visitez : http://www.dynarch.com/projects/calendar/\n" +
+"Distribu\u00e9 par GNU LGPL.  Voir http://gnu.org/licenses/lgpl.html pour les details." +
+"\n\n" +
+"Selection de la date :\n" +
+"- Utiliser les bouttons \xab, \xbb  pour selectionner l\'annee\n" +
+"- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour selectionner les mois\n" +
+"- Garder la souris sur n'importe quels boutons pour une selection plus rapide";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selection de l\'heure :\n" +
+"- Cliquer sur heures ou minutes pour incrementer\n" +
+"- ou Maj-clic pour decrementer\n" +
+"- ou clic et glisser-deplacer pour une selection plus rapide";
+
+Calendar._TT["PREV_YEAR"] = "Ann\u00e9e pr\u00e9c. (maintenir pour menu)";
+Calendar._TT["PREV_MONTH"] = "Mois pr\u00e9c. (maintenir pour menu)";
+Calendar._TT["GO_TODAY"] = "Atteindre la date du jour";
+Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)";
+Calendar._TT["NEXT_YEAR"] = "Ann\u00e9e suiv. (maintenir pour menu)";
+Calendar._TT["SEL_DATE"] = "S\u00e9lectionner une date";
+Calendar._TT["DRAG_TO_MOVE"] = "D\u00e9placer";
+Calendar._TT["PART_TODAY"] = " (Aujourd'hui)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Afficher %s en premier";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Fermer";
+Calendar._TT["TODAY"] = "Aujourd'hui";
+Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Sem.";
+Calendar._TT["TIME"] = "Heure :";
Index: trunk/include/jscalendar/lang/calendar-he.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-he.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-he.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar EN language
+// Author: Idan Sofer, <idan@idanso.dyndns.org>
+// Encoding: UTF-8
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("\u05e8\u05d0\u05e9\u05d5\u05df",
+ "\u05e9\u05e0\u05d9",
+ "\u05e9\u05dc\u05d9\u05e9\u05d9",
+ "\u05e8\u05d1\u05d9\u05e2\u05d9",
+ "\u05d7\u05de\u05d9\u05e9\u05d9",
+ "\u05e9\u05d9\u05e9\u05d9",
+ "\u05e9\u05d1\u05ea",
+ "\u05e8\u05d0\u05e9\u05d5\u05df");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("\u05d0",
+ "\u05d1",
+ "\u05d2",
+ "\u05d3",
+ "\u05d4",
+ "\u05d5",
+ "\u05e9",
+ "\u05d0");
+
+// full month names
+Calendar._MN = new Array
+("\u05d9\u05e0\u05d5\u05d0\u05e8",
+ "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+ "\u05de\u05e8\u05e5",
+ "\u05d0\u05e4\u05e8\u05d9\u05dc",
+ "\u05de\u05d0\u05d9",
+ "\u05d9\u05d5\u05e0\u05d9",
+ "\u05d9\u05d5\u05dc\u05d9",
+ "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+ "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+ "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+ "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+ "\u05d3\u05e6\u05de\u05d1\u05e8");
+
+// short month names
+Calendar._SMN = new Array
+("\u05d9\u05e0\u05d0",
+ "\u05e4\u05d1\u05e8",
+ "\u05de\u05e8\u05e5",
+ "\u05d0\u05e4\u05e8",
+ "\u05de\u05d0\u05d9",
+ "\u05d9\u05d5\u05e0",
+ "\u05d9\u05d5\u05dc",
+ "\u05d0\u05d5\u05d2",
+ "\u05e1\u05e4\u05d8",
+ "\u05d0\u05d5\u05e7",
+ "\u05e0\u05d5\u05d1",
+ "\u05d3\u05e6\u05de");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u05d0\u05d5\u05d3\u05d5\u05ea \u05d4\u05e9\u05e0\u05ea\u05d5\u05df";
+
+Calendar._TT["ABOUT"] =
+"\u05d1\u05d7\u05e8\u05df \u05ea\u05d0\u05e8\u05d9\u05da/\u05e9\u05e2\u05d4 DHTML\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"\u05d4\u05d2\u05d9\u05e8\u05e1\u05d0 \u05d4\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05d6\u05de\u05d9\u05e0\u05d4 \u05d1: http://www.dynarch.com/projects/calendar/\n" +
+"\u05de\u05d5\u05e4\u05e5 \u05ea\u05d7\u05ea \u05d6\u05d9\u05db\u05d9\u05d5\u05df \u05d4 GNU LGPL.  \u05e2\u05d9\u05d9\u05df \u05d1 http://gnu.org/licenses/lgpl.html \u05dc\u05e4\u05e8\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd." +
+"\n\n" +
+"\u05d1\u05d7\u05d9\u05e8\u05ea \u05ea\u05d0\u05e8\u05d9\u05da:\n" +
+"- \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05db\u05e4\u05ea\u05d5\u05e8\u05d9\u05dd \xab, \xbb \u05dc\u05d1\u05d7\u05d9\u05e8\u05ea \u05e9\u05e0\u05d4\n" +
+"- \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05db\u05e4\u05ea\u05d5\u05e8\u05d9\u05dd " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " \u05dc\u05d1\u05d7\u05d9\u05e8\u05ea \u05d7\u05d5\u05d3\u05e9\n" +
+"- \u05d4\u05d7\u05d6\u05e7 \u05d4\u05e2\u05db\u05d1\u05e8 \u05dc\u05d7\u05d5\u05e5 \u05de\u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8\u05d9\u05dd \u05d4\u05de\u05d5\u05d6\u05db\u05e8\u05d9\u05dd \u05dc\u05e2\u05d9\u05dc \u05dc\u05d1\u05d7\u05d9\u05e8\u05d4 \u05de\u05d4\u05d9\u05e8\u05d4 \u05d9\u05d5\u05ea\u05e8.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"\u05d1\u05d7\u05d9\u05e8\u05ea \u05d6\u05de\u05df:\n" +
+"- \u05dc\u05d7\u05e5 \u05e2\u05dc \u05db\u05dc \u05d0\u05d7\u05d3 \u05de\u05d7\u05dc\u05e7\u05d9 \u05d4\u05d6\u05de\u05df \u05db\u05d3\u05d9 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3\n" +
+"- \u05d0\u05d5 shift \u05d1\u05e9\u05d9\u05dc\u05d5\u05d1 \u05e2\u05dd \u05dc\u05d7\u05d9\u05e6\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d4\u05d7\u05e1\u05d9\u05e8\n" +
+"- \u05d0\u05d5 \u05dc\u05d7\u05e5 \u05d5\u05d2\u05e8\u05d5\u05e8 \u05dc\u05e4\u05e2\u05d5\u05dc\u05d4 \u05de\u05d4\u05d9\u05e8\u05d4 \u05d9\u05d5\u05ea\u05e8.";
+
+Calendar._TT["PREV_YEAR"] = "\u05e9\u05e0\u05d4 \u05e7\u05d5\u05d3\u05de\u05ea - \u05d4\u05d7\u05d6\u05e7 \u05dc\u05e7\u05d1\u05dc\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8";
+Calendar._TT["PREV_MONTH"] = "\u05d7\u05d5\u05d3\u05e9 \u05e7\u05d5\u05d3\u05dd - \u05d4\u05d7\u05d6\u05e7 \u05dc\u05e7\u05d1\u05dc\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8";
+Calendar._TT["GO_TODAY"] = "\u05e2\u05d1\u05d5\u05e8 \u05dc\u05d4\u05d9\u05d5\u05dd";
+Calendar._TT["NEXT_MONTH"] = "\u05d7\u05d5\u05d3\u05e9 \u05d4\u05d1\u05d0 - \u05d4\u05d7\u05d6\u05e7 \u05dc\u05ea\u05e4\u05e8\u05d9\u05d8";
+Calendar._TT["NEXT_YEAR"] = "\u05e9\u05e0\u05d4 \u05d4\u05d1\u05d0\u05d4 - \u05d4\u05d7\u05d6\u05e7 \u05dc\u05ea\u05e4\u05e8\u05d9\u05d8";
+Calendar._TT["SEL_DATE"] = "\u05d1\u05d7\u05e8 \u05ea\u05d0\u05e8\u05d9\u05da";
+Calendar._TT["DRAG_TO_MOVE"] = "\u05d2\u05e8\u05d5\u05e8 \u05dc\u05d4\u05d6\u05d6\u05d4";
+Calendar._TT["PART_TODAY"] = " )\u05d4\u05d9\u05d5\u05dd(";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "\u05d4\u05e6\u05d2 %s \u05e7\u05d5\u05d3\u05dd";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "6";
+
+Calendar._TT["CLOSE"] = "\u05e1\u05d2\u05d5\u05e8";
+Calendar._TT["TODAY"] = "\u05d4\u05d9\u05d5\u05dd";
+Calendar._TT["TIME_PART"] = "(\u05e9\u05d9\u05e4\u05d8-)\u05dc\u05d7\u05e5 \u05d5\u05d2\u05e8\u05d5\u05e8 \u05db\u05d3\u05d9 \u05dc\u05e9\u05e0\u05d5\u05ea \u05e2\u05e8\u05da";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "\u05e9\u05e2\u05d4::";
Index: trunk/include/jscalendar/lang/calendar-hr.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-hr.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-hr.js	(revision 2)
@@ -0,0 +1,54 @@
+/* Croatian language file for the DHTML Calendar version 0.9.2 
+* Author Krunoslav Zubrinic <krunoslav.zubrinic@vip.hr>, June 2003.
+* Feel free to use this script under the terms of the GNU Lesser General
+* Public License, as long as you do not remove or alter this notice.
+*/
+Calendar._DN = new Array
+("Nedjelja",
+ "Ponedjeljak",
+ "Utorak",
+ "Srijeda",
+ "\u010cetvrtak",
+ "Petak",
+ "Subota",
+ "Nedjelja");
+Calendar._MN = new Array
+("Sije\u010danj",
+ "Velja\u010da",
+ "O\u017eujak",
+ "Travanj",
+ "Svibanj",
+ "Lipanj",
+ "Srpanj",
+ "Kolovoz",
+ "Rujan",
+ "Listopad",
+ "Studeni",
+ "Prosinac");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Promjeni dan s kojim po\u010dinje tjedan";
+Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)";
+Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)";
+Calendar._TT["GO_TODAY"] = "Idi na teku\u0107i dan";
+Calendar._TT["NEXT_MONTH"] = "Slijede\u0107i mjesec (dugi pritisak za meni)";
+Calendar._TT["NEXT_YEAR"] = "Slijede\u0107a godina (dugi pritisak za meni)";
+Calendar._TT["SEL_DATE"] = "Izaberite datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije";
+Calendar._TT["PART_TODAY"] = " (today)";
+Calendar._TT["MON_FIRST"] = "Prika\u017ei ponedjeljak kao prvi dan";
+Calendar._TT["SUN_FIRST"] = "Prika\u017ei nedjelju kao prvi dan";
+Calendar._TT["CLOSE"] = "Zatvori";
+Calendar._TT["TODAY"] = "Danas";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y";
+
+Calendar._TT["WK"] = "Tje";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-hu.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-hu.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-hu.js	(revision 2)
@@ -0,0 +1,124 @@
+// ** I18N
+
+// Calendar HU language
+// Author: ???
+// Modifier: KARASZI Istvan, <jscalendar@spam.raszi.hu>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Vas\u00e1rnap",
+ "H\u00e9tf\u0151",
+ "Kedd",
+ "Szerda",
+ "Cs\u00fct\u00f6rt\u00f6k",
+ "P\u00e9ntek",
+ "Szombat",
+ "Vas\u00e1rnap");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("v",
+ "h",
+ "k",
+ "sze",
+ "cs",
+ "p",
+ "szo",
+ "v");
+
+// full month names
+Calendar._MN = new Array
+("janu\u00e1r",
+ "febru\u00e1r",
+ "m\u00e1rcius",
+ "\u00e1prilis",
+ "m\u00e1jus",
+ "j\u00fanius",
+ "j\u00falius",
+ "augusztus",
+ "szeptember",
+ "okt\u00f3ber",
+ "november",
+ "december");
+
+// short month names
+Calendar._SMN = new Array
+("jan",
+ "feb",
+ "m\u00e1r",
+ "\u00e1pr",
+ "m\u00e1j",
+ "j\u00fan",
+ "j\u00fal",
+ "aug",
+ "sze",
+ "okt",
+ "nov",
+ "dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "A kalend\u00e1riumr\u00f3l";
+
+Calendar._TT["ABOUT"] =
+"DHTML d\u00e1tum/id\u0151 kiv\u00e1laszt\u00f3\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"a legfrissebb verzi\u00f3 megtal\u00e1lhat\u00f3: http://www.dynarch.com/projects/calendar/\n" +
+"GNU LGPL alatt terjesztve.  L\u00e1sd a http://gnu.org/licenses/lgpl.html oldalt a r\u00e9szletekhez." +
+"\n\n" +
+"D\u00e1tum v\u00e1laszt\u00e1s:\n" +
+"- haszn\u00e1lja a \xab, \xbb gombokat az \u00e9v kiv\u00e1laszt\u00e1s\u00e1hoz\n" +
+"- haszn\u00e1lja a " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gombokat a h\u00f3nap kiv\u00e1laszt\u00e1s\u00e1hoz\n" +
+"- tartsa lenyomva az eg\u00e9rgombot a gyors v\u00e1laszt\u00e1shoz.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Id\u0151 v\u00e1laszt\u00e1s:\n" +
+"- kattintva n\u00f6velheti az id\u0151t\n" +
+"- shift-tel kattintva cs\u00f6kkentheti\n" +
+"- lenyomva tartva \u00e9s h\u00fazva gyorsabban kiv\u00e1laszthatja.";
+
+Calendar._TT["PREV_YEAR"] = "El\u0151z\u0151 \u00e9v (tartsa nyomva a men\u00fch\u00f6z)";
+Calendar._TT["PREV_MONTH"] = "El\u0151z\u0151 h\u00f3nap (tartsa nyomva a men\u00fch\u00f6z)";
+Calendar._TT["GO_TODAY"] = "Mai napra ugr\u00e1s";
+Calendar._TT["NEXT_MONTH"] = "K\u00f6v. h\u00f3nap (tartsa nyomva a men\u00fch\u00f6z)";
+Calendar._TT["NEXT_YEAR"] = "K\u00f6v. \u00e9v (tartsa nyomva a men\u00fch\u00f6z)";
+Calendar._TT["SEL_DATE"] = "V\u00e1lasszon d\u00e1tumot";
+Calendar._TT["DRAG_TO_MOVE"] = "H\u00fazza a mozgat\u00e1shoz";
+Calendar._TT["PART_TODAY"] = " (ma)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "%s legyen a h\u00e9t els\u0151 napja";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Bez\u00e1r";
+Calendar._TT["TODAY"] = "Ma";
+Calendar._TT["TIME_PART"] = "(Shift-)Klikk vagy h\u00faz\u00e1s az \u00e9rt\u00e9k v\u00e1ltoztat\u00e1s\u00e1hoz";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%b %e, %a";
+
+Calendar._TT["WK"] = "h\u00e9t";
+Calendar._TT["TIME"] = "id\u0151:";
Index: trunk/include/jscalendar/lang/calendar-it.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-it.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-it.js	(revision 2)
@@ -0,0 +1,124 @@
+// ** I18N
+
+// Calendar EN language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Translator: Fabio Di Bernardini, <altraqua@email.it>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Domenica",
+ "Luned\u00ec",
+ "Marted\u00ec",
+ "Mercoled\u00ec",
+ "Gioved\u00ec",
+ "Venerd\u00ec",
+ "Sabato",
+ "Domenica");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Dom",
+ "Lun",
+ "Mar",
+ "Mer",
+ "Gio",
+ "Ven",
+ "Sab",
+ "Dom");
+
+// full month names
+Calendar._MN = new Array
+("Gennaio",
+ "Febbraio",
+ "Marzo",
+ "Aprile",
+ "Maggio",
+ "Giugno",
+ "Luglio",
+ "Augosto",
+ "Settembre",
+ "Ottobre",
+ "Novembre",
+ "Dicembre");
+
+// short month names
+Calendar._SMN = new Array
+("Gen",
+ "Feb",
+ "Mar",
+ "Apr",
+ "Mag",
+ "Giu",
+ "Lug",
+ "Ago",
+ "Set",
+ "Ott",
+ "Nov",
+ "Dic");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Informazioni sul calendario";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Per gli aggiornamenti: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuito sotto licenza GNU LGPL.  Vedi http://gnu.org/licenses/lgpl.html per i dettagli." +
+"\n\n" +
+"Selezione data:\n" +
+"- Usa \xab, \xbb per selezionare l'anno\n" +
+"- Usa  " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per i mesi\n" +
+"- Tieni premuto a lungo il mouse per accedere alle funzioni di selezione veloce.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selezione orario:\n" +
+"- Clicca sul numero per incrementarlo\n" +
+"- o Shift+click per decrementarlo\n" +
+"- o click e sinistra o destra per variarlo.";
+
+Calendar._TT["PREV_YEAR"] = "Anno prec.(clicca a lungo per il men\u00f9)";
+Calendar._TT["PREV_MONTH"] = "Mese prec. (clicca a lungo per il men\u00f9)";
+Calendar._TT["GO_TODAY"] = "Oggi";
+Calendar._TT["NEXT_MONTH"] = "Pross. mese (clicca a lungo per il men\u00f9)";
+Calendar._TT["NEXT_YEAR"] = "Pross. anno (clicca a lungo per il men\u00f9)";
+Calendar._TT["SEL_DATE"] = "Seleziona data";
+Calendar._TT["DRAG_TO_MOVE"] = "Trascina per spostarlo";
+Calendar._TT["PART_TODAY"] = " (oggi)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Mostra prima %s";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Chiudi";
+Calendar._TT["TODAY"] = "Oggi";
+Calendar._TT["TIME_PART"] = "(Shift-)Click o trascina per cambiare il valore";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a:%b:%e";
+
+Calendar._TT["WK"] = "set";
+Calendar._TT["TIME"] = "Ora:";
Index: trunk/include/jscalendar/lang/calendar-lt.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-lt.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-lt.js	(revision 2)
@@ -0,0 +1,119 @@
+// ** I18N
+
+// Calendar LT language
+// Author: Martynas Majeris, <martynas@solmetra.lt>
+// Encoding: UTF-8
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Sekmadienis",
+ "Pirmadienis",
+ "Antradienis",
+ "Tre\u010diadienis",
+ "Ketvirtadienis",
+ "Pentadienis",
+ "\u0160e\u0161tadienis",
+ "Sekmadienis");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Sek",
+ "Pir",
+ "Ant",
+ "Tre",
+ "Ket",
+ "Pen",
+ "\u0160e\u0161",
+ "Sek");
+
+// full month names
+Calendar._MN = new Array
+("Sausis",
+ "Vasaris",
+ "Kovas",
+ "Balandis",
+ "Gegu\u017e\u0117",
+ "Bir\u017eelis",
+ "Liepa",
+ "Rugpj\u016btis",
+ "Rugs\u0117jis",
+ "Spalis",
+ "Lapkritis",
+ "Gruodis");
+
+// short month names
+Calendar._SMN = new Array
+("Sau",
+ "Vas",
+ "Kov",
+ "Bal",
+ "Geg",
+ "Bir",
+ "Lie",
+ "Rgp",
+ "Rgs",
+ "Spa",
+ "Lap",
+ "Gru");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Apie kalendori\u0173";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Naujausi\u0105 versij\u0105 rasite: http://www.dynarch.com/projects/calendar/\n" +
+"Platinamas pagal GNU LGPL licencij\u0105. Aplankykite http://gnu.org/licenses/lgpl.html" +
+"\n\n" +
+"Datos pasirinkimas:\n" +
+"- Met\u0173 pasirinkimas: \xab, \xbb\n" +
+"- M\u0117nesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" +
+"- Nuspauskite ir laikykite pel\u0117s klavi\u0161\u0105 greitesniam pasirinkimui.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Laiko pasirinkimas:\n" +
+"- Spustelkite ant valand\u0173 arba minu\u010di\u0173 - skai\u010dius padid\u0117s vienetu.\n" +
+"- Jei spausite kartu su Shift, skai\u010dius suma\u017e\u0117s.\n" +
+"- Greitam pasirinkimui spustelkite ir pajudinkite pel\u0119.";
+
+Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)";
+Calendar._TT["PREV_MONTH"] = "Ankstesnis m\u0117nuo (laikykite, jei norite meniu)";
+Calendar._TT["GO_TODAY"] = "Pasirinkti \u0161iandien\u0105";
+Calendar._TT["NEXT_MONTH"] = "Kitas m\u0117nuo (laikykite, jei norite meniu)";
+Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)";
+Calendar._TT["SEL_DATE"] = "Pasirinkite dat\u0105";
+Calendar._TT["DRAG_TO_MOVE"] = "Tempkite";
+Calendar._TT["PART_TODAY"] = " (\u0161iandien)";
+Calendar._TT["MON_FIRST"] = "Pirma savait\u0117s diena - pirmadienis";
+Calendar._TT["SUN_FIRST"] = "Pirma savait\u0117s diena - sekmadienis";
+Calendar._TT["CLOSE"] = "U\u017edaryti";
+Calendar._TT["TODAY"] = "\u0160iandien";
+Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d";
+
+Calendar._TT["WK"] = "sav";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
+
Index: trunk/include/jscalendar/lang/calendar-lv.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-lv.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-lv.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar LV language
+// Author: Juris Valdovskis, <juris@dc.lv>
+// Encoding: cp1257
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Sv\u0113tdiena",
+ "Pirmdiena",
+ "Otrdiena",
+ "Tre\u0161diena",
+ "Ceturdiena",
+ "Piektdiena",
+ "Sestdiena",
+ "Sv\u0113tdiena");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Sv",
+ "Pr",
+ "Ot",
+ "Tr",
+ "Ce",
+ "Pk",
+ "Se",
+ "Sv");
+
+// full month names
+Calendar._MN = new Array
+("Janv\u0101ris",
+ "Febru\u0101ris",
+ "Marts",
+ "Apr\u012blis",
+ "Maijs",
+ "J\u016bnijs",
+ "J\u016blijs",
+ "Augusts",
+ "Septembris",
+ "Oktobris",
+ "Novembris",
+ "Decembris");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "Mai",
+ "J\u016bn",
+ "J\u016bl",
+ "Aug",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Par kalend\u0101ru";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Datuma izv\u0113le:\n" +
+"- Izmanto \xab, \xbb pogas, lai izv\u0113l\u0113tos gadu\n" +
+"- Izmanto " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "pogas, lai izv\u0113l\u0113tos m\u0113nesi\n" +
+"- Turi nospiestu peles pogu uz jebkuru no augst\u0101k min\u0113taj\u0101m pog\u0101m, lai pa\u0101trin\u0101tu izv\u0113li.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Laika izv\u0113le:\n" +
+"- Uzklik\u0161\u0137ini uz jebkuru no laika da\u013c\u0101m, lai palielin\u0101tu to\n" +
+"- vai Shift-klik\u0161\u0137is, lai samazin\u0101tu to\n" +
+"- vai noklik\u0161\u0137ini un velc uz attiec\u012bgo virzienu lai main\u012btu \u0101tr\u0101k.";
+
+Calendar._TT["PREV_YEAR"] = "Iepr. gads (turi izv\u0113lnei)";
+Calendar._TT["PREV_MONTH"] = "Iepr. m\u0113nesis (turi izv\u0113lnei)";
+Calendar._TT["GO_TODAY"] = "\u0160odien";
+Calendar._TT["NEXT_MONTH"] = "N\u0101ko\u0161ais m\u0113nesis (turi izv\u0113lnei)";
+Calendar._TT["NEXT_YEAR"] = "N\u0101ko\u0161ais gads (turi izv\u0113lnei)";
+Calendar._TT["SEL_DATE"] = "Izv\u0113lies datumu";
+Calendar._TT["DRAG_TO_MOVE"] = "Velc, lai p\u0101rvietotu";
+Calendar._TT["PART_TODAY"] = " (\u0161odien)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Att\u0113lot %s k\u0101 pirmo";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "1,7";
+
+Calendar._TT["CLOSE"] = "Aizv\u0113rt";
+Calendar._TT["TODAY"] = "\u0160odien";
+Calendar._TT["TIME_PART"] = "(Shift-)Klik\u0161\u0137is vai p\u0101rvieto, lai main\u012btu";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "Laiks:";
Index: trunk/include/jscalendar/lang/calendar-nl.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-nl.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-nl.js	(revision 2)
@@ -0,0 +1,73 @@
+// ** I18N
+Calendar._DN = new Array
+("Zondag",
+ "Maandag",
+ "Dinsdag",
+ "Woensdag",
+ "Donderdag",
+ "Vrijdag",
+ "Zaterdag",
+ "Zondag");
+
+Calendar._SDN_len = 2;
+
+Calendar._MN = new Array
+("Januari",
+ "Februari",
+ "Maart",
+ "April",
+ "Mei",
+ "Juni",
+ "Juli",
+ "Augustus",
+ "September",
+ "Oktober",
+ "November",
+ "December");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Info";
+
+Calendar._TT["ABOUT"] =
+"DHTML Datum/Tijd Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
+"Ga voor de meest recente versie naar: http://www.dynarch.com/projects/calendar/\n" +
+"Verspreid onder de GNU LGPL. Zie http://gnu.org/licenses/lgpl.html voor details." +
+"\n\n" +
+"Datum selectie:\n" +
+"- Gebruik de \xab \xbb knoppen om een jaar te selecteren\n" +
+"- Gebruik de " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knoppen om een maand te selecteren\n" +
+"- Houd de muis ingedrukt op de genoemde knoppen voor een snellere selectie.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Tijd selectie:\n" +
+"- Klik op een willekeurig onderdeel van het tijd gedeelte om het te verhogen\n" +
+"- of Shift-klik om het te verlagen\n" +
+"- of klik en sleep voor een snellere selectie.";
+
+//Calendar._TT["TOGGLE"] = "Selecteer de eerste week-dag";
+Calendar._TT["PREV_YEAR"] = "Vorig jaar (ingedrukt voor menu)";
+Calendar._TT["PREV_MONTH"] = "Vorige maand (ingedrukt voor menu)";
+Calendar._TT["GO_TODAY"] = "Ga naar Vandaag";
+Calendar._TT["NEXT_MONTH"] = "Volgende maand (ingedrukt voor menu)";
+Calendar._TT["NEXT_YEAR"] = "Volgend jaar (ingedrukt voor menu)";
+Calendar._TT["SEL_DATE"] = "Selecteer datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Klik en sleep om te verplaatsen";
+Calendar._TT["PART_TODAY"] = " (vandaag)";
+//Calendar._TT["MON_FIRST"] = "Toon Maandag eerst";
+//Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst";
+
+Calendar._TT["DAY_FIRST"] = "Toon %s eerst";
+
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Sluiten";
+Calendar._TT["TODAY"] = "(vandaag)";
+Calendar._TT["TIME_PART"] = "(Shift-)Klik of sleep om de waarde te veranderen";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b %Y";
+
+Calendar._TT["WK"] = "wk";
+Calendar._TT["TIME"] = "Tijd:";
\ No newline at end of file
Index: trunk/include/jscalendar/lang/calendar-no.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-no.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-no.js	(revision 2)
@@ -0,0 +1,119 @@
+// ** I18N
+
+// Calendar NO language
+// Author: Daniel Holmen, <daniel.holmen@ciber.no>
+// Encoding: UTF-8
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("S\u00f8ndag",
+ "Mandag",
+ "Tirsdag",
+ "Onsdag",
+ "Torsdag",
+ "Fredag",
+ "L\u00f8rdag",
+ "S\u00f8ndag");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("S\u00f8n",
+ "Man",
+ "Tir",
+ "Ons",
+ "Tor",
+ "Fre",
+ "L\u00f8r",
+ "S\u00f8n");
+
+// full month names
+Calendar._MN = new Array
+("Januar",
+ "Februar",
+ "Mars",
+ "April",
+ "Mai",
+ "Juni",
+ "Juli",
+ "August",
+ "September",
+ "Oktober",
+ "November",
+ "Desember");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Des");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Om kalenderen";
+
+Calendar._TT["ABOUT"] =
+"DHTML Dato-/Tidsvelger\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For nyeste versjon, g\u00e5 til: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuert under GNU LGPL.  Se http://gnu.org/licenses/lgpl.html for detaljer." +
+"\n\n" +
+"Datovalg:\n" +
+"- Bruk knappene \xab og \xbb for \u00e5 velge \u00e5r\n" +
+"- Bruk knappene " + String.fromCharCode(0x2039) + " og " + String.fromCharCode(0x203a) + " for \u00e5 velge m\u00e5ned\n" +
+"- Hold inne musknappen eller knappene over for raskere valg.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Tidsvalg:\n" +
+"- Klikk p\u00e5 en av tidsdelene for \u00e5 \u00f8ke den\n" +
+"- eller Shift-klikk for \u00e5 senke verdien\n" +
+"- eller klikk-og-dra for raskere valg..";
+
+Calendar._TT["PREV_YEAR"] = "Forrige. \u00e5r (hold for meny)";
+Calendar._TT["PREV_MONTH"] = "Forrige. m\u00e5ned (hold for meny)";
+Calendar._TT["GO_TODAY"] = "G\u00e5 til idag";
+Calendar._TT["NEXT_MONTH"] = "Neste m\u00e5ned (hold for meny)";
+Calendar._TT["NEXT_YEAR"] = "Neste \u00e5r (hold for meny)";
+Calendar._TT["SEL_DATE"] = "Velg dato";
+Calendar._TT["DRAG_TO_MOVE"] = "Dra for \u00e5 flytte";
+Calendar._TT["PART_TODAY"] = " (idag)";
+Calendar._TT["MON_FIRST"] = "Vis mandag f\u00f8rst";
+Calendar._TT["SUN_FIRST"] = "Vis s\u00f8ndag f\u00f8rst";
+Calendar._TT["CLOSE"] = "Lukk";
+Calendar._TT["TODAY"] = "Idag";
+Calendar._TT["TIME_PART"] = "(Shift-)Klikk eller dra for \u00e5 endre verdi";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "uke";
+
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-pl.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-pl.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-pl.js	(revision 2)
@@ -0,0 +1,98 @@
+// ** I18N
+
+// Calendar PL language
+// Author: Dariusz Pietrzak, <eyck@ghost.anime.pl>
+// Author: Janusz Piwowarski, <jpiw@go2.pl>
+// Encoding: utf-8
+// Distributed under the same terms as the calendar itself.
+
+Calendar._DN = new Array
+("Niedziela",
+ "Poniedzia\u0142ek",
+ "Wtorek",
+ "\u015aroda",
+ "Czwartek",
+ "Pi\u0105tek",
+ "Sobota",
+ "Niedziela");
+Calendar._SDN = new Array
+("Nie",
+ "Pn",
+ "Wt",
+ "\u015ar",
+ "Cz",
+ "Pt",
+ "So",
+ "Nie");
+Calendar._MN = new Array
+("Stycze\u0144",
+ "Luty",
+ "Marzec",
+ "Kwiecie\u0144",
+ "Maj",
+ "Czerwiec",
+ "Lipiec",
+ "Sierpie\u0144",
+ "Wrzesie\u0144",
+ "Pa\u017adziernik",
+ "Listopad",
+ "Grudzie\u0144");
+Calendar._SMN = new Array
+("Sty",
+ "Lut",
+ "Mar",
+ "Kwi",
+ "Maj",
+ "Cze",
+ "Lip",
+ "Sie",
+ "Wrz",
+ "Pa\u017a",
+ "Lis",
+ "Gru");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "O kalendarzu";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Aby pobra\u0107 najnowsz\u0105 wersj\u0119, odwied\u017a: http://www.dynarch.com/projects/calendar/\n" +
+"Dost\u0119pny na licencji GNU LGPL. Zobacz szczeg\u00f3\u0142y na http://gnu.org/licenses/lgpl.html." +
+"\n\n" +
+"Wyb\u00f3r daty:\n" +
+"- U\u017cyj przycisk\u00f3w \xab, \xbb by wybra\u0107 rok\n" +
+"- U\u017cyj przycisk\u00f3w " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " by wybra\u0107 miesi\u0105c\n" +
+"- Przytrzymaj klawisz myszy nad jednym z powy\u017cszych przycisk\u00f3w dla szybszego wyboru.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Wyb\u00f3r czasu:\n" +
+"- Kliknij na jednym z p\u00f3l czasu by zwi\u0119kszy\u0107 jego warto\u015b\u0107\n" +
+"- lub kliknij trzymaj\u0105c Shift by zmiejszy\u0107 jego warto\u015b\u0107\n" +
+"- lub kliknij i przeci\u0105gnij dla szybszego wyboru.";
+
+//Calendar._TT["TOGGLE"] = "Zmie\u0144 pierwszy dzie\u0144 tygodnia";
+Calendar._TT["PREV_YEAR"] = "Poprzedni rok (przytrzymaj dla menu)";
+Calendar._TT["PREV_MONTH"] = "Poprzedni miesi\u0105c (przytrzymaj dla menu)";
+Calendar._TT["GO_TODAY"] = "Id\u017a do dzisiaj";
+Calendar._TT["NEXT_MONTH"] = "Nast\u0119pny miesi\u0105c (przytrzymaj dla menu)";
+Calendar._TT["NEXT_YEAR"] = "Nast\u0119pny rok (przytrzymaj dla menu)";
+Calendar._TT["SEL_DATE"] = "Wybierz dat\u0119";
+Calendar._TT["DRAG_TO_MOVE"] = "Przeci\u0105gnij by przesun\u0105\u0107";
+Calendar._TT["PART_TODAY"] = " (dzisiaj)";
+Calendar._TT["MON_FIRST"] = "Wy\u015bwietl poniedzia\u0142ek jako pierwszy";
+Calendar._TT["SUN_FIRST"] = "Wy\u015bwietl niedziel\u0119 jako pierwsz\u0105";
+Calendar._TT["CLOSE"] = "Zamknij";
+Calendar._TT["TODAY"] = "Dzisiaj";
+Calendar._TT["TIME_PART"] = "(Shift-)Kliknij lub przeci\u0105gnij by zmieni\u0107 warto\u015b\u0107";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%e %B, %A";
+
+Calendar._TT["WK"] = "ty";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
+
Index: trunk/include/jscalendar/lang/calendar-pt.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-pt.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-pt.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar pt_BR language
+// Author: Adalberto Machado, <betosm@terra.com.br>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("Domingo",
+ "Segunda",
+ "Terca",
+ "Quarta",
+ "Quinta",
+ "Sexta",
+ "Sabado",
+ "Domingo");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("Dom",
+ "Seg",
+ "Ter",
+ "Qua",
+ "Qui",
+ "Sex",
+ "Sab",
+ "Dom");
+
+// full month names
+Calendar._MN = new Array
+("Janeiro",
+ "Fevereiro",
+ "Marco",
+ "Abril",
+ "Maio",
+ "Junho",
+ "Julho",
+ "Agosto",
+ "Setembro",
+ "Outubro",
+ "Novembro",
+ "Dezembro");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Fev",
+ "Mar",
+ "Abr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Ago",
+ "Set",
+ "Out",
+ "Nov",
+ "Dez");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Sobre o calendario";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuido sobre GNU LGPL.  Veja http://gnu.org/licenses/lgpl.html para detalhes." +
+"\n\n" +
+"Selecao de data:\n" +
+"- Use os botoes \xab, \xbb para selecionar o ano\n" +
+"- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" +
+"- Segure o botao do mouse em qualquer um desses botoes para selecao rapida.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selecao de hora:\n" +
+"- Clique em qualquer parte da hora para incrementar\n" +
+"- ou Shift-click para decrementar\n" +
+"- ou clique e segure para selecao rapida.";
+
+Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)";
+Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)";
+Calendar._TT["GO_TODAY"] = "Hoje";
+Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)";
+Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)";
+Calendar._TT["SEL_DATE"] = "Selecione a data";
+Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover";
+Calendar._TT["PART_TODAY"] = " (hoje)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "Fechar";
+Calendar._TT["TODAY"] = "Hoje";
+Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b";
+
+Calendar._TT["WK"] = "sm";
+Calendar._TT["TIME"] = "Hora:";
Index: trunk/include/jscalendar/lang/calendar-ro.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-ro.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-ro.js	(revision 2)
@@ -0,0 +1,66 @@
+// ** I18N
+Calendar._DN = new Array
+("Duminic\u0103",
+ "Luni",
+ "Mar\u0163i",
+ "Miercuri",
+ "Joi",
+ "Vineri",
+ "S\u00e2mb\u0103t\u0103",
+ "Duminic\u0103");
+Calendar._SDN_len = 2;
+Calendar._MN = new Array
+("Ianuarie",
+ "Februarie",
+ "Martie",
+ "Aprilie",
+ "Mai",
+ "Iunie",
+ "Iulie",
+ "August",
+ "Septembrie",
+ "Octombrie",
+ "Noiembrie",
+ "Decembrie");
+
+// tooltips
+Calendar._TT = {};
+
+Calendar._TT["INFO"] = "Despre calendar";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Pentru ultima versiune vizita\u0163i: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuit sub GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Selec\u0163ia datei:\n" +
+"- Folosi\u0163i butoanele \xab, \xbb pentru a selecta anul\n" +
+"- Folosi\u0163i butoanele " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pentru a selecta luna\n" +
+"- Tine\u0163i butonul mouse-ului ap\u0103sat pentru selec\u0163ie mai rapid\u0103.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Selec\u0163ia orei:\n" +
+"- Click pe ora sau minut pentru a m\u0103ri valoarea cu 1\n" +
+"- Sau Shift-Click pentru a mic\u015fora valoarea cu 1\n" +
+"- Sau Click \u015fi drag pentru a selecta mai repede.";
+
+Calendar._TT["PREV_YEAR"] = "Anul precedent (lung pt menu)";
+Calendar._TT["PREV_MONTH"] = "Luna precedent\u0103 (lung pt menu)";
+Calendar._TT["GO_TODAY"] = "Data de azi";
+Calendar._TT["NEXT_MONTH"] = "Luna urm\u0103toare (lung pt menu)";
+Calendar._TT["NEXT_YEAR"] = "Anul urm\u0103tor (lung pt menu)";
+Calendar._TT["SEL_DATE"] = "Selecteaz\u0103 data";
+Calendar._TT["DRAG_TO_MOVE"] = "Trage pentru a mi\u015fca";
+Calendar._TT["PART_TODAY"] = " (ast\u0103zi)";
+Calendar._TT["DAY_FIRST"] = "Afi\u015feaz\u0103 %s prima zi";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["CLOSE"] = "\u00cenchide";
+Calendar._TT["TODAY"] = "Ast\u0103zi";
+Calendar._TT["TIME_PART"] = "(Shift-)Click sau drag pentru a selecta";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%A, %d %B";
+
+Calendar._TT["WK"] = "spt";
+Calendar._TT["TIME"] = "Ora:";
Index: trunk/include/jscalendar/lang/calendar-ru.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-ru.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-ru.js	(revision 2)
@@ -0,0 +1,123 @@
+// ** I18N
+
+// Calendar RU language
+// Translation: Sly Golovanov, http://golovanov.net, <sly@golovanov.net>
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+ "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+ "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+ "\u0441\u0440\u0435\u0434\u0430",
+ "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+ "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+ "\u0441\u0443\u0431\u0431\u043e\u0442\u0430",
+ "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("\u0432\u0441\u043a",
+ "\u043f\u043e\u043d",
+ "\u0432\u0442\u0440",
+ "\u0441\u0440\u0434",
+ "\u0447\u0435\u0442",
+ "\u043f\u044f\u0442",
+ "\u0441\u0443\u0431",
+ "\u0432\u0441\u043a");
+
+// full month names
+Calendar._MN = new Array
+("\u044f\u043d\u0432\u0430\u0440\u044c",
+ "\u0444\u0435\u0432\u0440\u0430\u043b\u044c",
+ "\u043c\u0430\u0440\u0442",
+ "\u0430\u043f\u0440\u0435\u043b\u044c",
+ "\u043c\u0430\u0439",
+ "\u0438\u044e\u043d\u044c",
+ "\u0438\u044e\u043b\u044c",
+ "\u0430\u0432\u0433\u0443\u0441\u0442",
+ "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
+ "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
+ "\u043d\u043e\u044f\u0431\u0440\u044c",
+ "\u0434\u0435\u043a\u0430\u0431\u0440\u044c");
+
+// short month names
+Calendar._SMN = new Array
+("\u044f\u043d\u0432",
+ "\u0444\u0435\u0432",
+ "\u043c\u0430\u0440",
+ "\u0430\u043f\u0440",
+ "\u043c\u0430\u0439",
+ "\u0438\u044e\u043d",
+ "\u0438\u044e\u043b",
+ "\u0430\u0432\u0433",
+ "\u0441\u0435\u043d",
+ "\u043e\u043a\u0442",
+ "\u043d\u043e\u044f",
+ "\u0434\u0435\u043a");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u041e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435...";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"\u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0442\u0443:\n" +
+"- \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043d\u043e\u043f\u043e\u043a \xab, \xbb \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0433\u043e\u0434\n" +
+"- \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043d\u043e\u043f\u043e\u043a " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0441\u044f\u0446\n" +
+"- \u041f\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u044d\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u044b\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u0435\u043d\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"\u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f:\n" +
+"- \u041f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u0447\u0430\u0441\u0430\u0445 \u0438\u043b\u0438 \u043c\u0438\u043d\u0443\u0442\u0430\u0445 \u043e\u043d\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f\n" +
+"- \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u0441 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 Shift \u043e\u043d\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442\u0441\u044f\n" +
+"- \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043c\u044b\u0448\u043a\u043e\u0439 \u0432\u043b\u0435\u0432\u043e/\u0432\u043f\u0440\u0430\u0432\u043e, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435.";
+
+Calendar._TT["PREV_YEAR"] = "\u041d\u0430 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 (\u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044e)";
+Calendar._TT["PREV_MONTH"] = "\u041d\u0430 \u043c\u0435\u0441\u044f\u0446 \u043d\u0430\u0437\u0430\u0434 (\u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044e)";
+Calendar._TT["GO_TODAY"] = "\u0421\u0435\u0433\u043e\u0434\u043d\u044f";
+Calendar._TT["NEXT_MONTH"] = "\u041d\u0430 \u043c\u0435\u0441\u044f\u0446 \u0432\u043f\u0435\u0440\u0435\u0434 (\u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044e)";
+Calendar._TT["NEXT_YEAR"] = "\u041d\u0430 \u0433\u043e\u0434 \u0432\u043f\u0435\u0440\u0435\u0434 (\u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044e)";
+Calendar._TT["SEL_DATE"] = "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0430\u0442\u0443";
+Calendar._TT["DRAG_TO_MOVE"] = "\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0439\u0442\u0435 \u043c\u044b\u0448\u043a\u043e\u0439";
+Calendar._TT["PART_TODAY"] = " (\u0441\u0435\u0433\u043e\u0434\u043d\u044f)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "\u041f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 %s";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "\u0417\u0430\u043a\u0440\u044b\u0442\u044c";
+Calendar._TT["TODAY"] = "\u0421\u0435\u0433\u043e\u0434\u043d\u044f";
+Calendar._TT["TIME_PART"] = "(Shift-)\u043a\u043b\u0438\u043a \u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a";
+
+Calendar._TT["WK"] = "\u043d\u0435\u0434";
+Calendar._TT["TIME"] = "\u0412\u0440\u0435\u043c\u044f:";
Index: trunk/include/jscalendar/lang/calendar-si.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-si.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-si.js	(revision 2)
@@ -0,0 +1,99 @@
+/* Slovenian language file for the DHTML Calendar version 0.9.2 
+* Author David Milost <mercy@volja.net>, January 2004.
+* Feel free to use this script under the terms of the GNU Lesser General
+* Public License, as long as you do not remove or alter this notice.
+*/
+ // full day names
+Calendar._DN = new Array
+("Nedelja",
+ "Ponedeljek",
+ "Torek",
+ "Sreda",
+ "\u010cetrtek",
+ "Petek",
+ "Sobota",
+ "Nedelja");
+ // short day names
+ Calendar._SDN = new Array
+("Ned",
+ "Pon",
+ "Tor",
+ "Sre",
+ "\u010cet",
+ "Pet",
+ "Sob",
+ "Ned");
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "Maj",
+ "Jun",
+ "Jul",
+ "Avg",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dec");
+  // full month names
+Calendar._MN = new Array
+("Januar",
+ "Februar",
+ "Marec",
+ "April",
+ "Maj",
+ "Junij",
+ "Julij",
+ "Avgust",
+ "September",
+ "Oktober",
+ "November",
+ "December");
+
+// tooltips
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "O koledarju";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Za zadnjo verzijo pojdine na naslov: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuirano pod GNU LGPL.  Poglejte http://gnu.org/licenses/lgpl.html za podrobnosti." +
+"\n\n" +
+"Izbor datuma:\n" +
+"- Uporabite \xab, \xbb gumbe za izbor leta\n" +
+"- Uporabite " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gumbe za izbor meseca\n" +
+"- Zadr\u017eite klik na kateremkoli od zgornjih gumbov za hiter izbor.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Izbor \u0107asa:\n" +
+"- Kliknite na katerikoli del \u0107asa za pove\u0107. le-tega\n" +
+"- ali Shift-click za zmanj. le-tega\n" +
+"- ali kliknite in povlecite za hiter izbor.";
+
+Calendar._TT["TOGGLE"] = "Spremeni dan s katerim se pri\u0107ne teden";
+Calendar._TT["PREV_YEAR"] = "Predhodnje leto (dolg klik za meni)";
+Calendar._TT["PREV_MONTH"] = "Predhodnji mesec (dolg klik za meni)";
+Calendar._TT["GO_TODAY"] = "Pojdi na teko\u0107i dan";
+Calendar._TT["NEXT_MONTH"] = "Naslednji mesec (dolg klik za meni)";
+Calendar._TT["NEXT_YEAR"] = "Naslednje leto (dolg klik za meni)";
+Calendar._TT["SEL_DATE"] = "Izberite datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Pritisni in povleci za spremembo pozicije";
+Calendar._TT["PART_TODAY"] = " (danes)";
+Calendar._TT["MON_FIRST"] = "Prika\u017ei ponedeljek kot prvi dan";
+Calendar._TT["SUN_FIRST"] = "Prika\u017ei nedeljo kot prvi dan";
+Calendar._TT["CLOSE"] = "Zapri";
+Calendar._TT["TODAY"] = "Danes";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Ted";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["TIME"] = "Time:";
Index: trunk/include/jscalendar/lang/calendar-sk.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-sk.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-sk.js	(revision 2)
@@ -0,0 +1,104 @@
+// ** I18N
+
+// Calendar SK language
+// Author: Peter Valach (pvalach@gmx.net)
+// Encoding: utf-8
+// Last update: 2003/10/29
+// Distributed under the same terms as the calendar itself.
+
+// full day names
+Calendar._DN = new Array
+("Nede\u00c4\u013ea",
+ "Pondelok",
+ "Utorok",
+ "Streda",
+ "\u0139\u00a0tvrtok",
+ "Piatok",
+ "Sobota",
+ "Nede\u00c4\u013ea");
+
+// short day names
+Calendar._SDN = new Array
+("Ned",
+ "Pon",
+ "Uto",
+ "Str",
+ "\u0139\u00a0tv",
+ "Pia",
+ "Sob",
+ "Ned");
+
+// full month names
+Calendar._MN = new Array
+("Janu\u0102\u02c7r",
+ "Febru\u0102\u02c7r",
+ "Marec",
+ "Apr\u0102\u00adl",
+ "M\u0102\u02c7j",
+ "J\u0102\u015fn",
+ "J\u0102\u015fl",
+ "August",
+ "September",
+ "Okt\u0102\u0142ber",
+ "November",
+ "December");
+
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "M\u0102\u02c7j",
+ "J\u0102\u015fn",
+ "J\u0102\u015fl",
+ "Aug",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dec");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "O kalend\u0102\u02c7ri";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
+"Posledn\u0102\u015f verziu n\u0102\u02c7jdete na: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuovan\u0102\u00a9 pod GNU LGPL.  Vi\u00c4\u0179 http://gnu.org/licenses/lgpl.html pre detaily." +
+"\n\n" +
+"V\u0102\u02ddber d\u0102\u02c7tumu:\n" +
+"- Pou\u0139\u013eite tla\u00c4\u0164idl\u0102\u02c7 \xab, \xbb pre v\u0102\u02ddber roku\n" +
+"- Pou\u0139\u013eite tla\u00c4\u0164idl\u0102\u02c7 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pre v\u0102\u02ddber mesiaca\n" +
+"- Ak ktor\u0102\u00a9ko\u00c4\u013evek z t\u0102\u02ddchto tla\u00c4\u0164idiel podr\u0139\u013e\u0102\u00adte dlh\u0139\u02c7ie, zobraz\u0102\u00ad sa r\u0102\u02ddchly v\u0102\u02ddber.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"V\u0102\u02ddber \u00c4\u0164asu:\n" +
+"- Kliknutie na niektor\u0102\u015f polo\u0139\u013eku \u00c4\u0164asu ju zv\u0102\u02dd\u0139\u02c7i\n" +
+"- Shift-klik ju zn\u0102\u00ad\u0139\u013ei\n" +
+"- Ak podr\u0139\u013e\u0102\u00adte tla\u00c4\u0164\u0102\u00adtko stla\u00c4\u0164en\u0102\u00a9, pos\u0102\u015fvan\u0102\u00adm men\u0102\u00adte hodnotu.";
+
+Calendar._TT["PREV_YEAR"] = "Predo\u0139\u02c7l\u0102\u02dd rok (podr\u0139\u013ete pre menu)";
+Calendar._TT["PREV_MONTH"] = "Predo\u0139\u02c7l\u0102\u02dd mesiac (podr\u0139\u013ete pre menu)";
+Calendar._TT["GO_TODAY"] = "Prejs\u0139\u0104 na dne\u0139\u02c7ok";
+Calendar._TT["NEXT_MONTH"] = "Nasl. mesiac (podr\u0139\u013ete pre menu)";
+Calendar._TT["NEXT_YEAR"] = "Nasl. rok (podr\u0139\u013ete pre menu)";
+Calendar._TT["SEL_DATE"] = "Zvo\u00c4\u013ete d\u0102\u02c7tum";
+Calendar._TT["DRAG_TO_MOVE"] = "Podr\u0139\u013ean\u0102\u00adm tla\u00c4\u0164\u0102\u00adtka zmen\u0102\u00adte polohu";
+Calendar._TT["PART_TODAY"] = " (dnes)";
+Calendar._TT["MON_FIRST"] = "Zobrazi\u0139\u0104 pondelok ako prv\u0102\u02dd";
+Calendar._TT["SUN_FIRST"] = "Zobrazi\u0139\u0104 nede\u00c4\u013eu ako prv\u0102\u015f";
+Calendar._TT["CLOSE"] = "Zavrie\u0139\u0104";
+Calendar._TT["TODAY"] = "Dnes";
+Calendar._TT["TIME_PART"] = "(Shift-)klik/\u0139\u0104ahanie zmen\u0102\u00ad hodnotu";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "$d. %m. %Y";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %e. %b";
+
+Calendar._TT["WK"] = "t\u0102\u02dd\u0139\u013e";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
+
Index: trunk/include/jscalendar/lang/calendar-sv.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-sv.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-sv.js	(revision 2)
@@ -0,0 +1,97 @@
+// ** I18N
+
+// Calendar SV language (Swedish, svenska)
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Translation team: <sv@li.org>
+// Translator: Leonard Norrg\u00e5rd <leonard.norrgard@refactor.fi>
+// Last translator: Leonard Norrg\u00e5rd <leonard.norrgard@refactor.fi>
+// Encoding: iso-latin-1
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("s\u00f6ndag",
+ "m\u00e5ndag",
+ "tisdag",
+ "onsdag",
+ "torsdag",
+ "fredag",
+ "l\u00f6rdag",
+ "s\u00f6ndag");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+Calendar._SDN_len = 2;
+Calendar._SMN_len = 3;
+
+// full month names
+Calendar._MN = new Array
+("januari",
+ "februari",
+ "mars",
+ "april",
+ "maj",
+ "juni",
+ "juli",
+ "augusti",
+ "september",
+ "oktober",
+ "november",
+ "december");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Om kalendern";
+
+Calendar._TT["ABOUT"] =
+"DHTML Datum/tid-v\u00e4ljare\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"F\u00f6r senaste version g\u00e5 till: http://www.dynarch.com/projects/calendar/\n" +
+"Distribueras under GNU LGPL.  Se http://gnu.org/licenses/lgpl.html f\u00f6r detaljer." +
+"\n\n" +
+"Val av datum:\n" +
+"- Anv\u00e4nd knapparna \xab, \xbb f\u00f6r att v\u00e4lja \u00e5r\n" +
+"- Anv\u00e4nd knapparna " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " f\u00f6r att v\u00e4lja m\u00e5nad\n" +
+"- H\u00e5ll musknappen nedtryckt p\u00e5 n\u00e5gon av ovanst\u00e5ende knappar f\u00f6r snabbare val.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Val av tid:\n" +
+"- Klicka p\u00e5 en del av tiden f\u00f6r att \u00f6ka den delen\n" +
+"- eller skift-klicka f\u00f6r att minska den\n" +
+"- eller klicka och drag f\u00f6r snabbare val.";
+
+Calendar._TT["PREV_YEAR"] = "F\u00f6reg\u00e5ende \u00e5r (h\u00e5ll f\u00f6r menu)";
+Calendar._TT["PREV_MONTH"] = "F\u00f6reg\u00e5ende m\u00e5nad (h\u00e5ll f\u00f6r menu)";
+Calendar._TT["GO_TODAY"] = "G\u00e5 till dagens datum";
+Calendar._TT["NEXT_MONTH"] = "F\u00f6ljande m\u00e5nad (h\u00e5ll f\u00f6r menu)";
+Calendar._TT["NEXT_YEAR"] = "F\u00f6ljande \u00e5r (h\u00e5ll f\u00f6r menu)";
+Calendar._TT["SEL_DATE"] = "V\u00e4lj datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Drag f\u00f6r att flytta";
+Calendar._TT["PART_TODAY"] = " (idag)";
+Calendar._TT["MON_FIRST"] = "Visa m\u00e5ndag f\u00f6rst";
+Calendar._TT["SUN_FIRST"] = "Visa s\u00f6ndag f\u00f6rst";
+Calendar._TT["CLOSE"] = "St\u00e4ng";
+Calendar._TT["TODAY"] = "Idag";
+Calendar._TT["TIME_PART"] = "(Skift-)klicka eller drag f\u00f6r att \u00e4ndra tid";
+
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%A %d %b %Y";
+
+Calendar._TT["WK"] = "vecka";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME"] = "Time:";
+
Index: trunk/include/jscalendar/lang/calendar-tr.js
===================================================================
--- trunk/include/jscalendar/lang/calendar-tr.js	(nonexistent)
+++ trunk/include/jscalendar/lang/calendar-tr.js	(revision 2)
@@ -0,0 +1,61 @@
+//////////////////////////////////////////////////////////////////////////////////////////////
+//    Turkish Translation by Nuri AKMAN
+//    Location: Ankara/TURKEY
+//    e-mail    : nuriakman@hotmail.com
+//    Date    : April, 9 2003
+//
+//    Note: if Turkish Characters does not shown on you screen
+//          please include falowing line your html code:
+//
+//          <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
+//
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+// ** I18N
+Calendar._DN = new Array
+("Pazar",
+ "Pazartesi",
+ "Sal\u0131",
+ "\u00c7ar\u015famba",
+ "Per\u015fembe",
+ "Cuma",
+ "Cumartesi",
+ "Pazar");
+Calendar._MN = new Array
+("Ocak",
+ "\u015eubat",
+ "Mart",
+ "Nisan",
+ "May\u0131s",
+ "Haziran",
+ "Temmuz",
+ "A\u011fustos",
+ "Eyl\u00fcl",
+ "Ekim",
+ "Kas\u0131m",
+ "Aral\u0131k");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Haftan\u0131n ilk g\u00fcn\u00fcn\u00fc kayd\u0131r";
+Calendar._TT["PREV_YEAR"] = "\u00d6nceki Y\u0131l (Men\u00fc i\u00e7in bas\u0131l\u0131 tutunuz)";
+Calendar._TT["PREV_MONTH"] = "\u00d6nceki Ay (Men\u00fc i\u00e7in bas\u0131l\u0131 tutunuz)";
+Calendar._TT["GO_TODAY"] = "Bug\u00fcn'e git";
+Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Men\u00fc i\u00e7in bas\u0131l\u0131 tutunuz)";
+Calendar._TT["NEXT_YEAR"] = "Sonraki Y\u0131l (Men\u00fc i\u00e7in bas\u0131l\u0131 tutunuz)";
+Calendar._TT["SEL_DATE"] = "Tarih se\u00e7iniz";
+Calendar._TT["DRAG_TO_MOVE"] = "Ta\u015f\u0131mak i\u00e7in s\u00fcr\u00fckleyiniz";
+Calendar._TT["PART_TODAY"] = " (bug\u00fcn)";
+Calendar._TT["MON_FIRST"] = "Takvim Pazartesi g\u00fcn\u00fcnden ba\u015flas\u0131n";
+Calendar._TT["SUN_FIRST"] = "Takvim Pazar g\u00fcn\u00fcnden ba\u015flas\u0131n";
+Calendar._TT["CLOSE"] = "Kapat";
+Calendar._TT["TODAY"] = "Bug\u00fcn";
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD";
+Calendar._TT["WK"] = "Hafta";
+
+Calendar._TT["DAY_FIRST"] = "Display %s first";
+Calendar._TT["WEEKEND"] = "0,6";
+Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
+Calendar._TT["TIME"] = "Time:";
+
Index: trunk/include/jscalendar/lang/index.php
===================================================================
--- trunk/include/jscalendar/lang/index.php	(nonexistent)
+++ trunk/include/jscalendar/lang/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/jscalendar/lang/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/jscalendar/menuarrow.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/jscalendar/menuarrow.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/jscalendar/menuarrow2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/include/jscalendar/menuarrow2.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/include/jscalendar/wb-setup.php
===================================================================
--- trunk/include/jscalendar/wb-setup.php	(nonexistent)
+++ trunk/include/jscalendar/wb-setup.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/*
+    import jscalendar css and scripts
+*/
+
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+
+?>
+<!--<style type="text/css">-->
+<?php
+// require_once(WB_PATH.'/include/jscalendar/calendar-system.css');
+?>
+<!--</style>  -->
+<script type="text/javascript" src="<?php echo WB_URL ?>/include/jscalendar/calendar.js"></script>
+<?php // some stuff for jscalendar
+    // language
+    $jscal_lang = defined('LANGUAGE')?strtolower(LANGUAGE):'en';
+    $jscal_lang = $jscal_lang!=''?$jscal_lang:'en';
+    if(!file_exists(WB_PATH."/include/jscalendar/lang/calendar-$jscal_lang.js")) {
+        $jscal_lang = 'en';
+    }
+    // today
+    $timezones = (time()+TIMEZONE);
+    $jscal_today = gmdate('Y/m/d H:i', $timezones);
+    // first-day-of-week
+    $jscal_firstday = '1'; // monday
+    if(LANGUAGE=='EN')
+        $jscal_firstday = '0'; // sunday
+    // date and time format for the text-field and for jscal's "ifFormat". We offer dd.mm.yyyy or yyyy-mm-dd or mm/dd/yyyy
+    // ATTN: strtotime() fails with "dd.mm.yyyy" and PHP4. So the string has to be converted to e.g. "yyyy-mm-dd", which will work.
+    switch(DATE_FORMAT) {
+        case 'd.m.Y':
+        case 'd M Y':
+        case 'l, jS F, Y':
+        case 'jS F, Y':
+        case 'D M d, Y':
+        case 'd-m-Y':
+        case 'd/m/Y':
+            $jscal_format = 'd.m.Y'; // dd.mm.yyyy hh:mm
+            $jscal_ifformat = '%d.%m.%Y';
+            break;
+        case 'm/d/Y':
+        case 'm-d-Y':
+        case 'M d Y':
+        case 'm.d.Y':
+            $jscal_format = 'm/d/Y'; // mm/dd/yyyy hh:mm
+            $jscal_ifformat = '%m/%d/%Y';
+            break;
+        default:
+            $jscal_format = 'Y-m-d'; // yyyy-mm-dd hh:mm
+            $jscal_ifformat = '%Y-%m-%d';
+            break;
+    }
+    if(isset($jscal_use_time) && $jscal_use_time==TRUE) {
+        $jscal_format .= ' H:i';
+        $jscal_ifformat .= ' %H:%M';
+    }
+
+    // load scripts for jscalendar
+?>
+<script type="text/javascript" src="<?php echo WB_URL ?>/include/jscalendar/lang/calendar-<?php echo $jscal_lang ?>.js"></script>
+<script type="text/javascript" src="<?php echo WB_URL ?>/include/jscalendar/calendar-setup.js"></script>

Property changes on: trunk/include/jscalendar/wb-setup.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/pclzip/Constants.php
===================================================================
--- trunk/include/pclzip/Constants.php	(nonexistent)
+++ trunk/include/pclzip/Constants.php	(revision 2)
@@ -0,0 +1,189 @@
+<?php
+
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Constants.php
+ *
+ * @category     Vendor
+ * @package      Vendor_PclZip
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        File available since 01.01.2016
+ * @deprecated   This file is deprecated from beginning
+ * @description compatibility layer
+ */
+
+    // ----- Constants
+// (all set deprecated!!)
+
+    if (!defined('PCLZIP_READ_BLOCK_SIZE')) { define( 'PCLZIP_READ_BLOCK_SIZE', 2048 ); }
+    // ----- File list separator
+    // In version 1.x of PclZip, the separator for file list is a space
+    // (which is not a very smart choice, specifically for windows paths !).
+    // A better separator should be a comma (,). This constant gives you the
+    // abilty to change that.
+    // However notice that changing this value, may have impact on existing
+    // scripts, using space separated filenames.
+    // Recommanded values for compatibility with older versions :
+    //define( 'PCLZIP_SEPARATOR', ' ' );
+    // Recommanded values for smart separation of filenames.
+    if (!defined('PCLZIP_SEPARATOR')) { define( 'PCLZIP_SEPARATOR', ',' ); }
+    // ----- Error configuration
+    // 0 : PclZip Class integrated error handling
+    // 1 : PclError external library error handling. By enabling this
+    //     you must ensure that you have included PclError library.
+    // [2,...] : reserved for futur use
+    if (!defined('PCLZIP_ERROR_EXTERNAL')) { define( 'PCLZIP_ERROR_EXTERNAL', 0 ); }
+    // ----- Optional static temporary directory
+    //       By default temporary files are generated in the script current
+    //       path.
+    //       If defined :
+    //       - MUST BE terminated by a '/'.
+    //       - MUST be a valid, already created directory
+    //       Samples :
+    // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
+    // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
+    if (!defined('PCLZIP_TEMPORARY_DIR')) { define( 'PCLZIP_TEMPORARY_DIR', '' ); }
+    // ----- Optional threshold ratio for use of temporary files
+    //       Pclzip sense the size of the file to add/extract and decide to
+    //       use or not temporary file. The algorythm is looking for
+    //       memory_limit of PHP and apply a ratio.
+    //       threshold = memory_limit * ratio.
+    //       Recommended values are under 0.5. Default 0.47.
+    //       Samples :
+    // define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 );
+    if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) { define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 ); }
+// ----- Error codes -------------------------------------------------------------------
+//    -1 : Unable to open file in binary write mode
+//    -2 : Unable to open file in binary read mode
+//    -3 : Invalid parameters
+//    -4 : File does not exist
+//    -5 : Filename is too long (max. 255)
+//    -6 : Not a valid zip file
+//    -7 : Invalid extracted file size
+//    -8 : Unable to create directory
+//    -9 : Invalid archive extension
+//   -10 : Invalid archive format
+//   -11 : Unable to delete file (unlink)
+//   -12 : Unable to rename file (rename)
+//   -13 : Invalid header checksum
+//   -14 : Invalid archive size
+    define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+    define( 'PCLZIP_ERR_NO_ERROR', 0 );
+    define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+    define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+    define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+    define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+    define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+    define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+    define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+    define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+    define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+    define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+    define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+    define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+    define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+    define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+    define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+    define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+    define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+    define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+    define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+    define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+    define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+    // ----- Options values ----------------------------------------------------------------
+    define( 'PCLZIP_OPT_PATH', 77001 );
+    define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+    define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+    define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+    define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+    define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+    define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+    define( 'PCLZIP_OPT_BY_NAME', 77008 );
+    define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+    define( 'PCLZIP_OPT_BY_EREG', 77010 );
+    define( 'PCLZIP_OPT_BY_PREG', 77011 );
+    define( 'PCLZIP_OPT_COMMENT', 77012 );
+    define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+    define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+    define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+    define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+    define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+    // Having big trouble with crypt. Need to multiply 2 long int
+    // which is not correctly supported by PHP ...
+    //define( 'PCLZIP_OPT_CRYPT', 77018 );
+    define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+    define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
+    define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
+    define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
+    define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
+    define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
+    define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
+    // ----- File description attributes ---------------------------------------------------
+    define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+    define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+    define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+    define( 'PCLZIP_ATT_FILE_MTIME', 79004 );
+    define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );
+    define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );
+    // ----- Call backs values -------------------------------------------------------------
+    define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+    define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+    define( 'PCLZIP_CB_PRE_ADD', 78003 );
+    define( 'PCLZIP_CB_POST_ADD', 78004 );
+  /* For futur use -----------------------------------------------------------------------
+  define( 'PCLZIP_CB_PRE_LIST', 78005 );
+  define( 'PCLZIP_CB_POST_LIST', 78006 );
+  define( 'PCLZIP_CB_PRE_DELETE', 78007 );
+  define( 'PCLZIP_CB_POST_DELETE', 78008 );
+  */
+
+// compatibolity layer for utility functions
+// (all set deprecated!!)
+    function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) {
+        return PclZip::UtilTranslateWinPath($p_path, $p_remove_disk_letter);
+    }
+
+    function PclZipUtilOptionText($p_option) {
+        return PclZip::UtilOptionText($p_option);
+    }
+
+    function PclZipUtilRename($p_src, $p_dest) {
+        return PclZip::UtilRename($p_src, $p_dest);
+    }
+
+    function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) {
+        return PclZip::UtilCopyBlock($p_src, $p_dest, $p_size, $p_mode);
+    }
+
+    function PclZipUtilPathInclusion($p_dir, $p_path) {
+        return PclZip::UtilPathInclusion($p_dir, $p_path);
+    }
+
+    function PclZipUtilPathReduction($p_dir) {
+        return PclZip::UtilPathReduction($p_dir);
+    }
+
+
+// end of file

Property changes on: trunk/include/pclzip/Constants.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/pclzip/gnu-lgpl.txt
===================================================================
--- trunk/include/pclzip/gnu-lgpl.txt	(nonexistent)
+++ trunk/include/pclzip/gnu-lgpl.txt	(revision 2)
@@ -0,0 +1,504 @@
+          GNU LESSER GENERAL PUBLIC LICENSE
+               Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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!
+
+
Index: trunk/include/pclzip/pclzip.lib.php
===================================================================
--- trunk/include/pclzip/pclzip.lib.php	(nonexistent)
+++ trunk/include/pclzip/pclzip.lib.php	(revision 2)
@@ -0,0 +1,4724 @@
+<?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.8.2
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - August 2009
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+//   PclZip is a PHP library that manage ZIP archives.
+//   So far tests show that archives generated by PclZip are readable by
+//   WinZip application and other tools.
+//
+// Description :
+//   See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+//   This library and the associated files are non commercial, non professional
+//   work.
+//   It should not have unexpected results. However if any damage is caused by
+//   this software the author can not be responsible.
+//   The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id$
+// --------------------------------------------------------------------------------
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+    // Global variables
+    $g_pclzip_version = "2.8.2";
+
+/* --- include global constants definitions if realy needed --------------------------- */
+/* this part is set deprecated and for compatibility only                               */
+    if (!defined('PCLZIP_ERR_NO_ERROR')) {
+        include __DIR__.'/Constants.php';
+    }
+/* --- zlib compatibility for 32bit Ubuntu -------------------------------------------- */
+/* this part is never needed on 64bit servers                                           */
+    if (!function_exists('gzopen')) {
+        if (!function_exists('gzopen64')) {
+            throw new Exception('Loading '.basename(__FILE__).' aborted: Missing zlib extensions');
+        } else {
+            function gzopen($sfn,$m)
+            {
+                return gzopen64($sfn,$m);
+            }
+        }
+    }
+/* ==================================================================================== */
+/** --------------------------------------------------------------------------------------
+ * Class : PclZip
+ * Description :
+ *   PclZip is the class that represent a Zip archive.
+ *   The public methods allow the manipulation of the archive.
+ * Attributes :
+ *   Attributes must not be accessed directly.
+ * Methods :
+ *   PclZip() : Object creator
+ *   create() : Creates the Zip archive
+ *   listContent() : List the content of the Zip archive
+ *   extract() : Extract the content of the archive
+ *   properties() : List the properties of the archive
+ */
+
+class PclZip
+{
+
+  // Constants
+    const READ_BLOCK_SIZE = 2048;
+
+  // File list separator
+  // In version 1.x of PclZip, the separator for file list is a space
+  // (which is not a very smart choice, specifically for windows paths !).
+  // A better separator should be a comma (,). This constant gives you the
+  // abilty to change that.
+  // However notice that changing this value, may have impact on existing
+  // scripts, using space separated filenames.
+  // Recommanded values for compatibility with older versions :
+  // const SEPARATOR = ' ';
+  // Recommanded values for smart separation of filenames.
+    const SEPARATOR = ',';
+
+  // Error configuration
+  // 0 : PclZip Class integrated error handling
+  // 1 : PclError external library error handling. By enabling this
+  //     you must ensure that you have included PclError library.
+  // [2,...] : reserved for futur use
+    const ERROR_EXTERNAL = 0;
+
+  // Optional static temporary directory
+  //       By default temporary files are generated in the script current
+  //       path.
+  //       If defined :
+  //       - MUST BE terminated by a '/'.
+  //       - MUST be a valid, already created directory
+  //       Samples :
+  //       - const TEMPORARY_DIR = '/temp/';
+  //       - const TEMPORARY_DIR = 'C:/Temp/';
+    const TEMPORARY_DIR = '';
+
+  // Optional threshold ratio for use of temporary files
+  //       Pclzip sense the size of the file to add/extract and decide to
+  //       use or not temporary file. The algorythm is looking for
+  //       memory_limit of PHP and apply a ratio.
+  //       threshold = memory_limit * ratio.
+  //       Recommended values are under 0.5. Default 0.47.
+  //       Samples :
+  //       - const TEMPORARY_FILE_RATIO = 0.5;
+    const TEMPORARY_FILE_RATIO = 0.47;
+
+// Error codes ---------------------------------------------------------------------
+//    -1 : Unable to open file in binary write mode
+//    -2 : Unable to open file in binary read mode
+//    -3 : Invalid parameters
+//    -4 : File does not exist
+//    -5 : Filename is too long (max. 255)
+//    -6 : Not a valid zip file
+//    -7 : Invalid extracted file size
+//    -8 : Unable to create directory
+//    -9 : Invalid archive extension
+//    -10 : Invalid archive format
+//    -11 : Unable to delete file (unlink)
+//    -12 : Unable to rename file (rename)
+//    -13 : Invalid header checksum
+//    -14 : Invalid archive size
+    const ERR_USER_ABORTED            =     2;
+    const ERR_NO_ERROR                =     0;
+    const ERR_WRITE_OPEN_FAIL         =    -1;
+    const ERR_READ_OPEN_FAIL          =    -2;
+    const ERR_INVALID_PARAMETER       =    -3;
+    const ERR_MISSING_FILE            =    -4;
+    const ERR_FILENAME_TOO_LONG       =    -5;
+    const ERR_INVALID_ZIP             =    -6;
+    const ERR_BAD_EXTRACTED_FILE      =    -7;
+    const ERR_DIR_CREATE_FAIL         =    -8;
+    const ERR_BAD_EXTENSION           =    -9;
+    const ERR_BAD_FORMAT              =   -10;
+    const ERR_DELETE_FILE_FAIL        =   -11;
+    const ERR_RENAME_FILE_FAIL        =   -12;
+    const ERR_BAD_CHECKSUM            =   -13;
+    const ERR_INVALID_ARCHIVE_ZIP     =   -14;
+    const ERR_MISSING_OPTION_VALUE    =   -15;
+    const ERR_INVALID_OPTION_VALUE    =   -16;
+    const ERR_ALREADY_A_DIRECTORY     =   -17;
+    const ERR_UNSUPPORTED_COMPRESSION =   -18;
+    const ERR_UNSUPPORTED_ENCRYPTION  =   -19;
+    const ERR_INVALID_ATTRIBUTE_VALUE =   -20;
+    const ERR_DIRECTORY_RESTRICTION   =   -21;
+    // Options values --------------------------------------------------------------
+    const OPT_PATH                    = 77001;
+    const OPT_ADD_PATH                = 77002;
+    const OPT_REMOVE_PATH             = 77003;
+    const OPT_REMOVE_ALL_PATH         = 77004;
+    const OPT_SET_CHMOD               = 77005;
+    const OPT_EXTRACT_AS_STRING       = 77006;
+    const OPT_NO_COMPRESSION          = 77007;
+    const OPT_BY_NAME                 = 77008;
+    const OPT_BY_INDEX                = 77009;
+    const OPT_BY_EREG                 = 77010;
+    const OPT_BY_PREG                 = 77011;
+    const OPT_COMMENT                 = 77012;
+    const OPT_ADD_COMMENT             = 77013;
+    const OPT_PREPEND_COMMENT         = 77014;
+    const OPT_EXTRACT_IN_OUTPUT       = 77015;
+    const OPT_REPLACE_NEWER           = 77016;
+    const OPT_STOP_ON_ERROR           = 77017;
+//    Having big trouble with crypt. Need to multiply 2 long int
+//    which is not correctly supported by PHP ...
+//    const OPT_CRYPT', 77018 );
+    const OPT_EXTRACT_DIR_RESTRICTION = 77019;
+    const OPT_TEMP_FILE_THRESHOLD     = 77020;
+    const OPT_ADD_TEMP_FILE_THRESHOLD = 77020; // alias for OPT_TEMP_FILE_THRESHOLD
+    const OPT_TEMP_FILE_ON            = 77021;
+    const OPT_ADD_TEMP_FILE_ON        = 77021; // alias for OPT_TEMP_FILE_ON
+    const OPT_TEMP_FILE_OFF           = 77022;
+    const OPT_ADD_TEMP_FILE_OFF       = 77022; // alias for OPT_TEMP_FILE_OFF
+// File description attributes -----------------------------------------------------
+    const ATT_FILE_NAME               = 79001;
+    const ATT_FILE_NEW_SHORT_NAME     = 79002;
+    const ATT_FILE_NEW_FULL_NAME      = 79003;
+    const ATT_FILE_MTIME              = 79004;
+    const ATT_FILE_CONTENT            = 79005;
+    const ATT_FILE_COMMENT            = 79006;
+// Call backs values ---------------------------------------------------------------
+    const CB_PRE_EXTRACT              = 78001;
+    const CB_POST_EXTRACT             = 78002;
+    const CB_PRE_ADD                  = 78003;
+    const CB_POST_ADD                 = 78004;
+// For futur use -------------------------------------------------------------------
+//    const CB_PRE_LIST    = 78005;
+//    const CB_POST_LIST   = 78006;
+//    const CB_PRE_DELETE  = 78007;
+//    const CB_POST_DELETE = 78008;
+
+/** @var string  Filename of the zip file */
+    protected $zipname      = '';
+
+/** @var integer  File descriptor of the zip file */
+    protected $zip_fd       = 0;
+
+/** @var integer  Internal error handling */
+    protected $error_code   = 1;
+
+/** @var string  Internal error message */
+    protected $error_string = '';
+
+/**
+ *  @var integer  Current status of the magic_quotes_runtime
+ *  @description  This value store the php configuration for magic_quotes
+ *                  The class can then disable the magic_quotes and reset it after
+ */
+    protected $magic_quotes_status = -1;
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZip()
+  // Description :
+  //   Creates a PclZip object and set the name of the associated Zip archive
+  //   filename.
+  //   Note that no real action is taken, if the archive does not exist it is not
+  //   created. Use create() for that.
+  // --------------------------------------------------------------------------------
+    public function __construct($p_zipname)
+    {
+        // Set the attributes
+        $this->zipname             = $p_zipname;
+        $this->zip_fd              = 0;
+        $this->magic_quotes_status = -1;
+
+    }
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   create($p_filelist, $p_add_dir="", $p_remove_dir="")
+  //   create($p_filelist, $p_option, $p_option_value, ...)
+  // Description :
+  //   This method supports two different synopsis. The first one is historical.
+  //   This method creates a Zip Archive. The Zip file is created in the
+  //   filesystem. The files and directories indicated in $p_filelist
+  //   are added in the archive. See the parameters description for the
+  //   supported format of $p_filelist.
+  //   When a directory is in the list, the directory and its content is added
+  //   in the archive.
+  //   In this synopsis, the function takes an optional variable list of
+  //   options. See bellow the supported options.
+  // Parameters :
+  //   $p_filelist : An array containing file or directory names, or
+  //                 a string containing one filename or one directory name, or
+  //                 a string containing a list of filenames and/or directory
+  //                 names separated by spaces.
+  //   $p_add_dir : A path to add before the real path of the archived file,
+  //                in order to have it memorized in the archive.
+  //   $p_remove_dir : A path to remove from the real path of the file to archive,
+  //                   in order to have a shorter path memorized in the archive.
+  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+  //                   is removed first, before $p_add_dir is added.
+  // Options :
+  //   OPT_ADD_PATH :
+  //   OPT_REMOVE_PATH :
+  //   OPT_REMOVE_ALL_PATH :
+  //   OPT_COMMENT :
+  //   CB_PRE_ADD :
+  //   CB_POST_ADD :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the added files, with a status of the add action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+    public function create($p_filelist)
+    {
+        $v_result=1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Set default values
+        $v_options = array();
+        $v_options[self::OPT_NO_COMPRESSION] = false;
+        // Look for variable options arguments
+        $v_size = func_num_args();
+        // Look for arguments
+        if ($v_size > 1) {
+            // Get the arguments
+            $v_arg_list = func_get_args();
+            // Remove from the options list the first argument
+            array_shift($v_arg_list);
+            $v_size--;
+            // Look for first arg
+            if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+                // Parse the options
+                $v_result = $this->privParseOptions(
+                    $v_arg_list,
+                    $v_size,
+                    $v_options,
+                    array (
+                        self::OPT_REMOVE_PATH => 'optional',
+                        self::OPT_REMOVE_ALL_PATH => 'optional',
+                        self::OPT_ADD_PATH => 'optional',
+                        self::CB_PRE_ADD => 'optional',
+                        self::CB_POST_ADD => 'optional',
+                        self::OPT_NO_COMPRESSION => 'optional',
+                        self::OPT_COMMENT => 'optional',
+                        self::OPT_TEMP_FILE_THRESHOLD => 'optional',
+                        self::OPT_TEMP_FILE_ON => 'optional',
+                        // self::OPT_CRYPT => 'optional',
+                        self::OPT_TEMP_FILE_OFF => 'optional'
+                    )
+                );
+                if ($v_result != 1) {
+                    return 0;
+                }
+            } else {
+            // Look for 2 args
+            // Here we need to support the first historic synopsis of the
+            // method.
+                // Get the first argument
+                $v_options[self::OPT_ADD_PATH] = $v_arg_list[0];
+                // Look for the optional second argument
+                if ($v_size == 2) {
+                    $v_options[self::OPT_REMOVE_PATH] = $v_arg_list[1];
+                } else if ($v_size > 2) {
+                    $this->privErrorLog(
+                        self::ERR_INVALID_PARAMETER,
+                        "Invalid number / type of arguments"
+                    );
+                    return 0;
+                }
+            }
+        }
+        // Look for default option values
+        $this->privOptionDefaultThreshold($v_options);
+        // Init
+        $v_string_list    = array();
+        $v_att_list       = array();
+        $v_filedescr_list = array();
+        $p_result_list    = array();
+        // Look if the $p_filelist is really an array
+        if (is_array($p_filelist)) {
+            // Look if the first element is also an array
+            // This will mean that this is a file description entry
+            if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+                $v_att_list = $p_filelist;
+            } else {
+                // The list is a list of string names
+                $v_string_list = $p_filelist;
+            }
+        } else if (is_string($p_filelist)) {
+            // Look if the $p_filelist is a string
+            // Create a list from the string
+            $v_string_list = explode(self::SEPARATOR, $p_filelist);
+        } else {
+            // Invalid variable type for $p_filelist
+            $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
+            return 0;
+        }
+        // Reformat the string list
+        if (sizeof($v_string_list) != 0) {
+            foreach ($v_string_list as $v_string) {
+                if ($v_string != '') {
+                  $v_att_list[][self::ATT_FILE_NAME] = $v_string;
+                } else { }
+            }
+        }
+        // For each file in the list check the attributes
+        $v_supported_attributes = array (
+            self::ATT_FILE_NAME           => 'mandatory',
+            self::ATT_FILE_NEW_SHORT_NAME => 'optional',
+            self::ATT_FILE_NEW_FULL_NAME  => 'optional',
+            self::ATT_FILE_MTIME          => 'optional',
+            self::ATT_FILE_CONTENT        => 'optional',
+            self::ATT_FILE_COMMENT        => 'optional',
+        );
+        foreach ($v_att_list as $v_entry) {
+            $v_result = $this->privFileDescrParseAtt(
+                $v_entry,
+                $v_filedescr_list[],
+                $v_options,
+                $v_supported_attributes
+            );
+            if ($v_result != 1) {
+                return 0;
+            }
+        }
+        // Expand the filelist (expand directories)
+        $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+        if ($v_result != 1) {
+            return 0;
+        }
+        // Call the create fct
+        $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
+        if ($v_result != 1) {
+            return 0;
+        }
+        return $p_result_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   add($p_filelist, $p_add_dir="", $p_remove_dir="")
+  //   add($p_filelist, $p_option, $p_option_value, ...)
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This methods add the list of files in an existing archive.
+  //   If a file with the same name already exists, it is added at the end of the
+  //   archive, the first one is still present.
+  //   If the archive does not exist, it is created.
+  // Parameters :
+  //   $p_filelist : An array containing file or directory names, or
+  //                 a string containing one filename or one directory name, or
+  //                 a string containing a list of filenames and/or directory
+  //                 names separated by spaces.
+  //   $p_add_dir : A path to add before the real path of the archived file,
+  //                in order to have it memorized in the archive.
+  //   $p_remove_dir : A path to remove from the real path of the file to archive,
+  //                   in order to have a shorter path memorized in the archive.
+  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+  //                   is removed first, before $p_add_dir is added.
+  // Options :
+  //   self::OPT_ADD_PATH :
+  //   self::OPT_REMOVE_PATH :
+  //   self::OPT_REMOVE_ALL_PATH :
+  //   self::OPT_COMMENT :
+  //   self::OPT_ADD_COMMENT :
+  //   self::OPT_PREPEND_COMMENT :
+  //   self::CB_PRE_ADD :
+  //   self::CB_POST_ADD :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the added files, with a status of the add action.
+  //   (see self::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+    public function add($p_filelist)
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Set default values
+        $v_options = array();
+        $v_options[self::OPT_NO_COMPRESSION] = false;
+        // Look for variable options arguments
+        $v_size = func_num_args();
+        // Look for arguments
+        if ($v_size > 1) {
+            // Get the arguments
+            $v_arg_list = func_get_args();
+            // Remove form the options list the first argument
+            array_shift($v_arg_list);
+            $v_size--;
+            // Look for first arg
+            if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+                // Parse the options
+                $v_result = $this->privParseOptions(
+                    $v_arg_list,
+                    $v_size,
+                    $v_options,
+                    array (
+                        self::OPT_REMOVE_PATH         => 'optional',
+                        self::OPT_REMOVE_ALL_PATH     => 'optional',
+                        self::OPT_ADD_PATH            => 'optional',
+                        self::CB_PRE_ADD              => 'optional',
+                        self::CB_POST_ADD             => 'optional',
+                        self::OPT_NO_COMPRESSION      => 'optional',
+                        self::OPT_COMMENT             => 'optional',
+                        self::OPT_ADD_COMMENT         => 'optional',
+                        self::OPT_PREPEND_COMMENT     => 'optional',
+                        self::OPT_TEMP_FILE_THRESHOLD => 'optional',
+                        self::OPT_TEMP_FILE_ON        => 'optional',
+                        //self::OPT_CRYPT               => 'optional',
+                        self::OPT_TEMP_FILE_OFF       => 'optional'
+                    )
+                );
+                if ($v_result != 1) {
+                    return 0;
+                }
+            } else {
+                // Look for 2 args
+                // Here we need to support the first historic synopsis of the
+                // method.
+                // Get the first argument
+                $v_options[self::OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+                // Look for the optional second argument
+                if ($v_size == 2) {
+                    $v_options[self::OPT_REMOVE_PATH] = $v_arg_list[1];
+                } else if ($v_size > 2) {
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+                    return 0;
+                }
+            }
+        }
+        // Look for default option values
+        $this->privOptionDefaultThreshold($v_options);
+        // Init
+        $v_string_list = array();
+        $v_att_list = array();
+        $v_filedescr_list = array();
+        $p_result_list = array();
+        // Look if the $p_filelist is really an array
+        if (is_array($p_filelist)) {
+            // Look if the first element is also an array
+            // This will mean that this is a file description entry
+            if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+                $v_att_list = $p_filelist;
+            } else {
+                // The list is a list of string names
+                $v_string_list = $p_filelist;
+            }
+        } else if (is_string($p_filelist)) {
+            // Look if the $p_filelist is a string
+            // Create a list from the string
+            $v_string_list = explode(self::SEPARATOR, $p_filelist);
+        } else {
+        // Invalid variable type for $p_filelist
+            $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
+            return 0;
+        }
+        // Reformat the string list
+        if (sizeof($v_string_list) != 0) {
+            foreach ($v_string_list as $v_string) {
+                $v_att_list[][self::ATT_FILE_NAME] = $v_string;
+            }
+        }
+        // For each file in the list check the attributes
+        $v_supported_attributes = array(
+            self::ATT_FILE_NAME           => 'mandatory',
+            self::ATT_FILE_NEW_SHORT_NAME => 'optional',
+            self::ATT_FILE_NEW_FULL_NAME  => 'optional',
+            self::ATT_FILE_MTIME          => 'optional',
+            self::ATT_FILE_CONTENT        => 'optional',
+            self::ATT_FILE_COMMENT        => 'optional'
+        );
+        foreach ($v_att_list as $v_entry) {
+            $v_result = $this->privFileDescrParseAtt(
+                $v_entry,
+                $v_filedescr_list[],
+                $v_options,
+                $v_supported_attributes
+            );
+            if ($v_result != 1) {
+                return 0;
+            }
+        }
+        // Expand the filelist (expand directories)
+        $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+        if ($v_result != 1) {
+            return 0;
+        }
+        // Call the create fct
+        $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
+        if ($v_result != 1) {
+            return 0;
+        }
+        return $p_result_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : listContent()
+  // Description :
+  //   This public method, gives the list of the files and directories, with their
+  //   properties.
+  //   The properties of each entries in the list are (used also in other functions) :
+  //     filename : Name of the file. For a create or add action it is the filename
+  //                given by the user. For an extract function it is the filename
+  //                of the extracted file.
+  //     stored_filename : Name of the file / directory stored in the archive.
+  //     size : Size of the stored file.
+  //     compressed_size : Size of the file's data compressed in the archive
+  //                       (without the headers overhead)
+  //     mtime : Last known modification date of the file (UNIX timestamp)
+  //     comment : Comment associated with the file
+  //     folder : true | false
+  //     index : index of the file in the archive
+  //     status : status of the action (depending of the action) :
+  //              Values are :
+  //                ok : OK !
+  //                filtered : the file / dir is not extracted (filtered by user)
+  //                already_a_directory : the file can not be extracted because a
+  //                                      directory with the same name already exists
+  //                write_protected : the file can not be extracted because a file
+  //                                  with the same name already exists and is
+  //                                  write protected
+  //                newer_exist : the file was not extracted because a newer file exists
+  //                path_creation_fail : the file is not extracted because the folder
+  //                                     does not exist and can not be created
+  //                write_error : the file was not extracted because there was a
+  //                              error while writing the file
+  //                read_error : the file was not extracted because there was a error
+  //                             while reading the file
+  //                invalid_header : the file was not extracted because of an archive
+  //                                 format error (bad file header)
+  //   Note that each time a method can continue operating when there
+  //   is an action error on a file, the error is only logged in the file status.
+  // Return Values :
+  //   0 on an unrecoverable failure,
+  //   The list of the files in the archive.
+  // --------------------------------------------------------------------------------
+    public function listContent()
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            return(0);
+        }
+        // Call the extracting fct
+        $p_list = array();
+        if (($v_result = $this->privList($p_list)) != 1) {
+            unset($p_list);
+            return(0);
+        }
+        return $p_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   extract($p_path="./", $p_remove_path="")
+  //   extract([$p_option, $p_option_value, ...])
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This method extract all the files / directories from the archive to the
+  //   folder indicated in $p_path.
+  //   If you want to ignore the 'root' part of path of the memorized files
+  //   you can indicate this in the optional $p_remove_path parameter.
+  //   By default, if a newer file with the same name already exists, the
+  //   file is not extracted.
+  //
+  //   If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+  //   are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+  //   at the end of the path value of PCLZIP_OPT_PATH.
+  // Parameters :
+  //   $p_path : Path where the files and directories are to be extracted
+  //   $p_remove_path : First part ('root' part) of the memorized path
+  //                    (if any similar) to remove while extracting.
+  // Options :
+  //   PCLZIP_OPT_PATH :
+  //   PCLZIP_OPT_ADD_PATH :
+  //   PCLZIP_OPT_REMOVE_PATH :
+  //   PCLZIP_OPT_REMOVE_ALL_PATH :
+  //   PCLZIP_CB_PRE_EXTRACT :
+  //   PCLZIP_CB_POST_EXTRACT :
+  // Return Values :
+  //   0 or a negative value on failure,
+  //   The list of the extracted files, with a status of the action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+    public function extract()
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            return(0);
+        }
+        // Set default values
+        $v_options         = array();
+        $v_path            = '';
+        $v_remove_path     = "";
+        $v_remove_all_path = false;
+        // Look for variable options arguments
+        $v_size = func_num_args();
+        // Default values for option
+        $v_options[self::OPT_EXTRACT_AS_STRING] = false;
+        // Look for arguments
+        if ($v_size > 0) {
+            // Get the arguments
+            $v_arg_list = func_get_args();
+            // Look for first arg
+            if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+                // Parse the options
+                $v_result = $this->privParseOptions(
+                    $v_arg_list,
+                    $v_size,
+                    $v_options,
+                    array (
+                        self::OPT_PATH                    => 'optional',
+                        self::OPT_REMOVE_PATH             => 'optional',
+                        self::OPT_REMOVE_ALL_PATH         => 'optional',
+                        self::OPT_ADD_PATH                => 'optional',
+                        self::CB_PRE_EXTRACT              => 'optional',
+                        self::CB_POST_EXTRACT             => 'optional',
+                        self::OPT_SET_CHMOD               => 'optional',
+                        self::OPT_BY_NAME                 => 'optional',
+                        self::OPT_BY_EREG                 => 'optional',
+                        self::OPT_BY_PREG                 => 'optional',
+                        self::OPT_BY_INDEX                => 'optional',
+                        self::OPT_EXTRACT_AS_STRING       => 'optional',
+                        self::OPT_EXTRACT_IN_OUTPUT       => 'optional',
+                        self::OPT_REPLACE_NEWER           => 'optional',
+                        self::OPT_STOP_ON_ERROR           => 'optional',
+                        self::OPT_EXTRACT_DIR_RESTRICTION => 'optional',
+                        self::OPT_TEMP_FILE_THRESHOLD     => 'optional',
+                        self::OPT_TEMP_FILE_ON            => 'optional',
+                        self::OPT_TEMP_FILE_OFF           => 'optional'
+                    )
+                );
+                if ($v_result != 1) {
+                    return 0;
+                }
+                // Set the arguments
+                if (isset($v_options[self::OPT_PATH])) {
+                    $v_path = $v_options[self::OPT_PATH];
+                }
+                if (isset($v_options[self::OPT_REMOVE_PATH])) {
+                    $v_remove_path = $v_options[self::OPT_REMOVE_PATH];
+                }
+                if (isset($v_options[self::OPT_REMOVE_ALL_PATH])) {
+                    $v_remove_all_path = $v_options[self::OPT_REMOVE_ALL_PATH];
+                }
+                if (isset($v_options[self::OPT_ADD_PATH])) {
+                    // Check for '/' in last path char
+                    if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+                        $v_path .= '/';
+                    }
+                    $v_path .= $v_options[self::OPT_ADD_PATH];
+                }
+            } else {
+                // Look for 2 args
+                // Here we need to support the first historic synopsis of the
+                // method.
+                // Get the first argument
+                $v_path = $v_arg_list[0];
+                // Look for the optional second argument
+                if ($v_size == 2) {
+                    $v_remove_path = $v_arg_list[1];
+                } else if ($v_size > 2) {
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+                    return 0;
+                }
+            }
+        }
+        // Look for default option values
+        $this->privOptionDefaultThreshold($v_options);
+        // Trace
+        // Call the extracting fct
+        $p_list = array();
+        $v_result = $this->privExtractByRule(
+            $p_list,
+            $v_path,
+            $v_remove_path,
+            $v_remove_all_path,
+            $v_options
+        );
+        if ($v_result < 1) {
+            unset($p_list);
+            return(0);
+        }
+        return $p_list;
+    }
+  // --------------------------------------------------------------------------------
+
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   extractByIndex($p_index, $p_path="./", $p_remove_path="")
+  //   extractByIndex($p_index, [$p_option, $p_option_value, ...])
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This method is doing a partial extract of the archive.
+  //   The extracted files or folders are identified by their index in the
+  //   archive (from 0 to n).
+  //   Note that if the index identify a folder, only the folder entry is
+  //   extracted, not all the files included in the archive.
+  // Parameters :
+  //   $p_index : A single index (integer) or a string of indexes of files to
+  //              extract. The form of the string is "0,4-6,8-12" with only numbers
+  //              and '-' for range or ',' to separate ranges. No spaces or ';'
+  //              are allowed.
+  //   $p_path : Path where the files and directories are to be extracted
+  //   $p_remove_path : First part ('root' part) of the memorized path
+  //                    (if any similar) to remove while extracting.
+  // Options :
+  //   OPT_PATH :
+  //   OPT_ADD_PATH :
+  //   OPT_REMOVE_PATH :
+  //   OPT_REMOVE_ALL_PATH :
+  //   OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+  //     not as files.
+  //     The resulting content is in a new field 'content' in the file
+  //     structure.
+  //     This option must be used alone (any other options are ignored).
+  //   CB_PRE_EXTRACT :
+  //   CB_POST_EXTRACT :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the extracted files, with a status of the action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+  //function extractByIndex($p_index, options...)
+    public function extractByIndex($p_index)
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            return(0);
+        }
+        // Set default values
+        $v_options         = array();
+        $v_path            = '';
+        $v_remove_path     = "";
+        $v_remove_all_path = false;
+        // Look for variable options arguments
+        $v_size = func_num_args();
+        // Default values for option
+        $v_options[self::OPT_EXTRACT_AS_STRING] = false;
+        // Look for arguments
+        if ($v_size > 1) {
+            // Get the arguments
+            $v_arg_list = func_get_args();
+            // Remove form the options list the first argument
+            array_shift($v_arg_list);
+            $v_size--;
+            // Look for first arg
+            if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+                // Parse the options
+                $v_result = $this->privParseOptions(
+                    $v_arg_list,
+                    $v_size,
+                    $v_options,
+                    array(
+                        self::OPT_PATH                    => 'optional',
+                        self::OPT_REMOVE_PATH             => 'optional',
+                        self::OPT_REMOVE_ALL_PATH         => 'optional',
+                        self::OPT_EXTRACT_AS_STRING       => 'optional',
+                        self::OPT_ADD_PATH                => 'optional',
+                        self::CB_PRE_EXTRACT              => 'optional',
+                        self::CB_POST_EXTRACT             => 'optional',
+                        self::OPT_SET_CHMOD               => 'optional',
+                        self::OPT_REPLACE_NEWER           => 'optional',
+                        self::OPT_STOP_ON_ERROR           => 'optional',
+                        self::OPT_EXTRACT_DIR_RESTRICTION => 'optional',
+                        self::OPT_TEMP_FILE_THRESHOLD     => 'optional',
+                        self::OPT_TEMP_FILE_ON            => 'optional',
+                        self::OPT_TEMP_FILE_OFF           => 'optional'
+                    )
+                );
+                if ($v_result != 1) {
+                    return 0;
+                }
+                // Set the arguments
+                if (isset($v_options[self::OPT_PATH])) {
+                    $v_path = $v_options[self::OPT_PATH];
+                }
+                if (isset($v_options[self::OPT_REMOVE_PATH])) {
+                    $v_remove_path = $v_options[self::OPT_REMOVE_PATH];
+                }
+                if (isset($v_options[self::OPT_REMOVE_ALL_PATH])) {
+                    $v_remove_all_path = $v_options[self::OPT_REMOVE_ALL_PATH];
+                }
+                if (isset($v_options[self::OPT_ADD_PATH])) {
+                    // Check for '/' in last path char
+                    if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+                        $v_path .= '/';
+                    }
+                    $v_path .= $v_options[self::OPT_ADD_PATH];
+                }
+                if (!isset($v_options[self::OPT_EXTRACT_AS_STRING])) {
+                    $v_options[self::OPT_EXTRACT_AS_STRING] = FALSE;
+                } else { }
+            } else {
+                // Look for 2 args
+                // Here we need to support the first historic synopsis of the
+                // method.
+                // Get the first argument
+                $v_path = $v_arg_list[0];
+                // Look for the optional second argument
+                if ($v_size == 2) {
+                    $v_remove_path = $v_arg_list[1];
+                } else if ($v_size > 2) {
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+                    return 0;
+                }
+            }
+        }
+        // Trace - Trick
+        // Here I want to reuse extractByRule(), so I need to parse the $p_index with privParseOptions()
+        $v_arg_trick = array (self::OPT_BY_INDEX, $p_index);
+        $v_options_trick = array();
+        $v_result = $this->privParseOptions(
+            $v_arg_trick,
+            sizeof($v_arg_trick),
+            $v_options_trick,
+            array(self::OPT_BY_INDEX => 'optional' )
+        );
+        if ($v_result != 1) {
+            return 0;
+        }
+        $v_options[self::OPT_BY_INDEX] = $v_options_trick[self::OPT_BY_INDEX];
+        // Look for default option values
+        $this->privOptionDefaultThreshold($v_options);
+        // Call the extracting fct
+        $p_list = 0;
+        if (($v_result = $this->privExtractByRule(
+                $p_list,
+                $v_path,
+                $v_remove_path,
+                $v_remove_all_path,
+                $v_options
+            )) < 1
+        ) { return(0); }
+        return $p_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   delete([$p_option, $p_option_value, ...])
+  // Description :
+  //   This method removes files from the archive.
+  //   If no parameters are given, then all the archive is emptied.
+  // Parameters :
+  //   None or optional arguments.
+  // Options :
+  //   PCLZIP_OPT_BY_INDEX :
+  //   PCLZIP_OPT_BY_NAME :
+  //   PCLZIP_OPT_BY_EREG :
+  //   PCLZIP_OPT_BY_PREG :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the files which are still present in the archive.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+    public function delete()
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            return(0);
+        }
+        // Set default values
+        $v_options = array();
+        // Look for variable options arguments
+        $v_size = func_num_args();
+        // Look for arguments
+        if ($v_size > 0) {
+            // Get the arguments
+            $v_arg_list = func_get_args();
+            // Parse the options
+            $v_result = $this->privParseOptions(
+                $v_arg_list,
+                $v_size,
+                $v_options,
+                array(
+                    self::OPT_BY_NAME  => 'optional',
+                    self::OPT_BY_EREG  => 'optional',
+                    self::OPT_BY_PREG  => 'optional',
+                    self::OPT_BY_INDEX => 'optional'
+                )
+            );
+            if ($v_result != 1) {
+                return 0;
+            }
+        }
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Call the delete fct
+        $v_list = array();
+        if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
+            $this->privSwapBackMagicQuotes();
+            unset($v_list);
+            return(0);
+        }
+        // Magic quotes trick
+        $this->privSwapBackMagicQuotes();
+        return $v_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : deleteByIndex()
+  // Description :
+  //   ***** Deprecated *****
+  //   delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+  // --------------------------------------------------------------------------------
+    public function deleteByIndex($p_index)
+    {
+        $p_list = $this->delete(self::OPT_BY_INDEX, $p_index);
+        return $p_list;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : properties()
+  // Description :
+  //   This method gives the properties of the archive.
+  //   The properties are :
+  //     nb : Number of files in the archive
+  //     comment : Comment associated with the archive file
+  //     status : not_exist, ok
+  // Parameters :
+  //   None
+  // Return Values :
+  //   0 on failure,
+  //   An array with the archive properties.
+  // --------------------------------------------------------------------------------
+    public function properties()
+    {
+        // Reset the error handler
+        $this->privErrorReset();
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            $this->privSwapBackMagicQuotes();
+            return(0);
+        }
+        // Default properties
+        $v_prop = array(
+            'comment' => '',
+            'nb'      => 0,
+            'status'  => 'not_exist'
+        );
+        // Look if file exists
+        if (@is_file($this->zipname)) {
+            // Open the zip file
+            if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) {
+                $this->privSwapBackMagicQuotes();
+                // Error log
+                $this->privErrorLog(self::ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+                return 0;
+            }
+            // Read the central directory informations
+            $v_central_dir = array();
+            if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+                $this->privSwapBackMagicQuotes();
+                return 0;
+            }
+            // Close the zip file
+            $this->privCloseFd();
+            // Set the user attributes
+            $v_prop['comment'] = $v_central_dir['comment'];
+            $v_prop['nb']      = $v_central_dir['entries'];
+            $v_prop['status']  = 'ok';
+        }
+        // Magic quotes trick
+        $this->privSwapBackMagicQuotes();
+        return $v_prop;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : duplicate()
+  // Description :
+  //   This method creates an archive by copying the content of an other one. If
+  //   the archive already exist, it is replaced by the new one without any warning.
+  // Parameters :
+  //   $p_archive : The filename of a valid archive, or
+  //                a valid PclZip object.
+  // Return Values :
+  //   1 on success.
+  //   0 or a negative value on error (error code).
+  // --------------------------------------------------------------------------------
+    public function duplicate($p_archive)
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Look if the $p_archive is a PclZip object
+        if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) {
+            // Duplicate the archive
+            $v_result = $this->privDuplicate($p_archive->zipname);
+        } else if (is_string($p_archive)) {
+            // Look if the $p_archive is a string (so a filename)
+            // Check that $p_archive is a valid zip file
+            // TBC : Should also check the archive format
+            if (!is_file($p_archive)) {
+                // Error log
+                $this->privErrorLog(self::ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
+                $v_result = self::ERR_MISSING_FILE;
+            } else {
+                // Duplicate the archive
+                $v_result = $this->privDuplicate($p_archive);
+            }
+        } else {
+            // Invalid variable
+            // Error log
+            $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+            $v_result = self::ERR_INVALID_PARAMETER;
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : merge()
+  // Description :
+  //   This method merge the $p_archive_to_add archive at the end of the current
+  //   one ($this).
+  //   If the archive ($this) does not exist, the merge becomes a duplicate.
+  //   If the $p_archive_to_add archive does not exist, the merge is a success.
+  // Parameters :
+  //   $p_archive_to_add : It can be directly the filename of a valid zip archive,
+  //                       or a PclZip object archive.
+  // Return Values :
+  //   1 on success,
+  //   0 or negative values on error (see below).
+  // --------------------------------------------------------------------------------
+    public function merge($p_archive_to_add)
+    {
+        $v_result = 1;
+        // Reset the error handler
+        $this->privErrorReset();
+        // Check archive
+        if (!$this->privCheckFormat()) {
+            return(0);
+        }
+        // Look if the $p_archive_to_add is a PclZip object
+        if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) {
+            // Merge the archive
+            $v_result = $this->privMerge($p_archive_to_add);
+        } else if (is_string($p_archive_to_add)) {
+            // Look if the $p_archive_to_add is a string (so a filename)
+            // Create a temporary archive
+            $oClass = __CLASS__;
+            $v_object_archive = new $oClass($p_archive_to_add);
+            // Merge the archive
+            $v_result = $this->privMerge($v_object_archive);
+        } else {
+            // Invalid variable
+            // Error log
+            $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+            $v_result = self::ERR_INVALID_PARAMETER;
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+
+
+  // --------------------------------------------------------------------------------
+  // Function : errorCode()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    public function errorCode()
+    {
+        if (self::ERROR_EXTERNAL == 1) {
+            return(PclErrorCode());
+        } else {
+            return($this->error_code);
+        }
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : errorName()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    public function errorName($p_with_code=false)
+    {
+        $aFullList = array_flip($this->getClassConstants());
+        $sRetval = isset($aFullList[$this->error_code])
+                   ? __CLASS__.'::'.$aFullList[$this->error_code]
+                   : 'Unknown code';
+        $sRetval .= $p_with_code ? ' ('.$this->error_code.')' : '';
+        return $sRetval;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : errorInfo()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    public function errorInfo($p_full=false)
+    {
+        if (self::ERROR_EXTERNAL == 1) {
+            return(PclErrorString());
+        } else {
+            if ($p_full) {
+                return($this->errorName(true)." : ".$this->error_string);
+            } else {
+                return($this->error_string." [code ".$this->error_code."]");
+            }
+        }
+    }
+  // --------------------------------------------------------------------------------
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// *****                                                        *****
+// *****       THESES FUNCTIONS MUST NOT BE USED DIRECTLY       *****
+// --------------------------------------------------------------------------------
+
+
+
+  // --------------------------------------------------------------------------------
+  // Function : privCheckFormat()
+  // Description :
+  //   This method check that the archive exists and is a valid zip archive.
+  //   Several level of check exists. (futur)
+  // Parameters :
+  //   $p_level : Level of check. Default 0.
+  //              0 : Check the first bytes (magic codes) (default value))
+  //              1 : 0 + Check the central directory (futur)
+  //              2 : 1 + Check each file header (futur)
+  // Return Values :
+  //   true on success,
+  //   false on error, the error code is set.
+  // --------------------------------------------------------------------------------
+    protected function privCheckFormat($p_level=0)
+    {
+        $v_result = true;
+        // Reset the file system cache
+        clearstatcache();
+        // Reset the error handler
+        $this->privErrorReset();
+        // Look if the file exits
+        if (!is_file($this->zipname)) {
+            // Error log
+            $this->privErrorLog(self::ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
+            return false;
+        }
+        // Check that the file is readeable
+        if (!is_readable($this->zipname)) {
+            // Error log
+            $this->privErrorLog(self::ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
+            return false;
+        }
+        // Check the magic code
+        // TBC
+        // Check the central header
+        // TBC
+        // Check each file header
+        // TBC
+        // Return
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privParseOptions()
+  // Description :
+  //   This internal methods reads the variable list of arguments ($p_options_list,
+  //   $p_size) and generate an array with the options and values ($v_result_list).
+  //   $v_requested_options contains the options that can be present and those that
+  //   must be present.
+  //   $v_requested_options is an array, with the option value as key, and 'optional',
+  //   or 'mandatory' as value.
+  // Parameters :
+  //   See above.
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+    protected function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
+    {
+        $v_result=1;
+        // Read the options
+        $i=0;
+        while ($i<$p_size) {
+            // Check if the option is supported
+            if (!isset($v_requested_options[$p_options_list[$i]])) {
+                // Error log
+                $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
+                return PclZip::errorCode();
+            }
+            // Look for next option
+            switch ($p_options_list[$i]) {
+              // Look for options that request a path value
+                case self::OPT_PATH :
+                case self::OPT_REMOVE_PATH :
+                case self::OPT_ADD_PATH :
+                    // Check the number of parameters
+                    if (($i+1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    $v_result_list[$p_options_list[$i]] = self::UtilTranslateWinPath($p_options_list[$i+1], false);
+                    $i++;
+                    break;
+               case self::OPT_TEMP_FILE_THRESHOLD :
+                    // Check the number of parameters
+                    if (($i+1) >= $p_size) {
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Check for incompatible options
+                    if (isset($v_result_list[self::OPT_TEMP_FILE_OFF])) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_PARAMETER,
+                            'Option \''.self::UtilOptionText($p_options_list[$i]).
+                            '\' can not be used with option \''.__CLASS__.'::OPT_TEMP_FILE_OFF\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Check the value
+                    $v_value = $p_options_list[$i+1];
+                    if ((!is_integer($v_value)) || ($v_value<0)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Integer expected for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value (and convert it in bytes)
+                    $v_result_list[$p_options_list[$i]] = $v_value*1048576;
+                    $i++;
+                    break;
+                case self::OPT_TEMP_FILE_ON :
+                    // Check for incompatible options
+                    if (isset($v_result_list[self::OPT_TEMP_FILE_OFF])) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_PARAMETER,
+                            'Option \''.self::UtilOptionText($p_options_list[$i]).
+                            '\' can not be used with option \''.__CLASS__.'::OPT_TEMP_FILE_OFF\''
+                        );
+                        return self::errorCode();
+                    }
+                    $v_result_list[$p_options_list[$i]] = true;
+                    break;
+                case self::OPT_TEMP_FILE_OFF :
+                    // Check for incompatible options
+                    if (isset($v_result_list[self::OPT_TEMP_FILE_ON])) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_PARAMETER,
+                            'Option \''.self::UtilOptionText($p_options_list[$i]).
+                            '\' can not be used with option \''.__CLASS__.'::OPT_TEMP_FILE_ON\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Check for incompatible options
+                    if (isset($v_result_list[self::OPT_TEMP_FILE_THRESHOLD])) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_PARAMETER,
+                            'Option \''.self::UtilOptionText($p_options_list[$i]).
+                            '\' can not be used with option \''.__CLASS__.'::OPT_TEMP_FILE_THRESHOLD\''
+                        );
+                        return self::errorCode();
+                    }
+                    $v_result_list[$p_options_list[$i]] = true;
+                    break;
+                case self::OPT_EXTRACT_DIR_RESTRICTION :
+                    // Check the number of parameters
+                    if (($i+1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return PclZip::errorCode();
+                    }
+                    // Get the value
+                    if (is_string($p_options_list[$i + 1]) && ($p_options_list[$i + 1] != '')) {
+                        $v_result_list[$p_options_list[$i]] = self::UtilTranslateWinPath($p_options_list[$i+1], false);
+                        $i++;
+                    } else { }
+                    break;
+                // Look for options that request an array of string for value
+                case self::OPT_BY_NAME :
+                    // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    if (is_string($p_options_list[$i + 1])) {
+                        $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i + 1];
+                    } else if (is_array($p_options_list[$i + 1])) {
+                        $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
+                    } else {
+                    // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Wrong parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $i++;
+                    break;
+                // Look for options that request an EREG or PREG expression
+                case self::OPT_BY_EREG :
+                    // ereg() is deprecated starting with PHP 5.3. Move self::OPT_BY_EREG
+                    // to self::OPT_BY_PREG
+                    $p_options_list[$i] = self::OPT_BY_PREG;
+                case self::OPT_BY_PREG :
+                //case self::OPT_CRYPT :
+                    // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    if (is_string($p_options_list[$i + 1])) {
+                        $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
+                    } else {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Wrong parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $i++;
+                    break;
+                // Look for options that takes a string
+                case self::OPT_COMMENT :
+                case self::OPT_ADD_COMMENT :
+                case self::OPT_PREPEND_COMMENT :
+                    // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    if (is_string($p_options_list[$i + 1])) {
+                        $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
+                    } else {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Wrong parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $i++;
+                    break;
+                // Look for options that request an array of index
+                case self::OPT_BY_INDEX :
+                    // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    $v_work_list = array();
+                    if (is_string($p_options_list[$i + 1])) {
+                        // Remove spaces
+                        $p_options_list[$i + 1] = strtr($p_options_list[$i + 1], ' ', '');
+                        // Parse items
+                        $v_work_list = explode(',', $p_options_list[$i + 1]);
+                    } else if (is_integer($p_options_list[$i + 1])) {
+                        $v_work_list[0] = $p_options_list[$i + 1].'-'.$p_options_list[$i + 1];
+                    } else if (is_array($p_options_list[$i + 1])) {
+                        $v_work_list = $p_options_list[$i + 1];
+                    } else {
+                      // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Value must be integer, string or array for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Reduce the index list
+                    // each index item in the list must be a couple with a start and
+                    // an end value : [0,3], [5-5], [8-10], ...
+                    // Check the format of each item
+                    $v_sort_flag=false;
+                    $v_sort_value=0;
+                    for ($j = 0; $j < sizeof($v_work_list); $j++) {
+                        // Explode the item
+                        $v_item_list = explode('-', $v_work_list[$j]);
+                        $v_size_item_list = sizeof($v_item_list);
+                        // TBC : Here we might check that each item is a
+                        // real integer ...
+                        // Look for single value
+                        if ($v_size_item_list == 1) {
+                            // Set the option value
+                            $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+                            $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+                        } elseif ($v_size_item_list == 2) {
+                            // Set the option value
+                            $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+                            $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+                        } else {
+                            // Error log
+                            $this->privErrorLog(
+                                self::ERR_INVALID_OPTION_VALUE,
+                                'Too many values in index range for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                            );
+                            return self::errorCode();
+                        }
+                        // Look for list sort
+                        if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
+                            $v_sort_flag=true;
+                            // TBC : An automatic sort should be writen ...
+                            // Error log
+                            $this->privErrorLog(
+                                self::_ERR_INVALID_OPTION_VALUE,
+                                'Invalid order of index range for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                            );
+                            return self::errorCode();
+                        }
+                        $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+                    }
+                    // Sort the items
+                    if ($v_sort_flag) { /* TBC : To Be Completed */ }
+                    // Next option
+                    $i++;
+                    break;
+                // Look for options that request no value
+                case self::OPT_REMOVE_ALL_PATH :
+                case self::OPT_EXTRACT_AS_STRING :
+                case self::OPT_NO_COMPRESSION :
+                case self::OPT_EXTRACT_IN_OUTPUT :
+                case self::OPT_REPLACE_NEWER :
+                case self::OPT_STOP_ON_ERROR :
+                    $v_result_list[$p_options_list[$i]] = true;
+                    break;
+                // Look for options that request an octal value
+                case self::OPT_SET_CHMOD :
+                    // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
+                    $i++;
+                    break;
+                // Look for options that request a call-back
+                case self::CB_PRE_EXTRACT :
+                case self::CB_POST_EXTRACT :
+                case self::CB_PRE_ADD :
+                case self::CB_POST_ADD :
+                // for futur use
+//                case self::CB_PRE_DELETE :
+//                case self::CB_POST_DELETE :
+//                case self::CB_PRE_LIST :
+//                case self::CB_POST_LIST :
+                  // Check the number of parameters
+                    if (($i + 1) >= $p_size) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_MISSING_OPTION_VALUE,
+                            'Missing parameter value for option \''.self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Get the value
+                    $v_function_name = $p_options_list[$i + 1];
+                    // Check that the value is a valid existing function
+                    if (!function_exists($v_function_name)) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_OPTION_VALUE,
+                            'Function \''.$v_function_name.'()\' is not an existing function for option \''.
+                            self::UtilOptionText($p_options_list[$i]).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    // Set the attribute
+                    $v_result_list[$p_options_list[$i]] = $v_function_name;
+                    $i++;
+                    break;
+                default :
+                    // Error log
+                    $this->privErrorLog(
+                        self::ERR_INVALID_PARAMETER,
+                        'Unknown parameter \''.$p_options_list[$i].'\''
+                    );
+                    return self::errorCode();
+            } // end of switch
+            // Next options
+            $i++;
+        } // end of while
+        // Look for mandatory options
+        if ($v_requested_options !== false) {
+            for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) {
+                // Look for mandatory option
+                if ($v_requested_options[$key] == 'mandatory') {
+                    // Look if present
+                    if (!isset($v_result_list[$key])) {
+                        // Error log
+                        $this->privErrorLog(
+                            self::ERR_INVALID_PARAMETER,
+                            'Missing mandatory parameter \''.self::UtilOptionText($key).'('.$key.')'
+                        );
+                        return self::errorCode();
+                    }
+                }
+            }
+        }
+        // Look for default values
+        if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { }
+        return $v_result;
+    }
+
+  // --------------------------------------------------------------------------------
+  // Function : privOptionDefaultThreshold()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privOptionDefaultThreshold(&$p_options)
+    {
+        $v_result=1;
+        if (isset($p_options[self::OPT_TEMP_FILE_THRESHOLD]) || isset($p_options[self::OPT_TEMP_FILE_OFF])) {
+            return $v_result;
+        }
+        // Get 'memory_limit' configuration value
+//        $v_memory_limit = trim(ini_get('memory_limit'));
+//        $last = strtolower(substr($v_memory_limit, -1));
+        preg_match('/^([0-9]+)([a-z])$/', strtolower(trim(ini_get('memory_limit'))), $aMatch);
+        $v_memory_limit = (int)$aMatch[1];
+        switch ($aMatch[2]) {
+            case 'g':
+                $v_memory_limit *= 1024;
+            case 'm':
+                $v_memory_limit *= 1024;
+            case 'k':
+                $v_memory_limit *= 1024;
+                break;
+            default:
+                break;
+        }
+        $p_options[self::OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit * self::TEMPORARY_FILE_RATIO);
+        // Sanity check : No threshold if value lower than 1M
+        if ($p_options[self::OPT_TEMP_FILE_THRESHOLD] < 1048576) {
+          unset($p_options[self::OPT_TEMP_FILE_THRESHOLD]);
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+  // Function : privFileDescrParseAtt()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+    protected function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
+    {
+        $v_result = 1;
+        // For each file in the list check the attributes
+        foreach ($p_file_list as $v_key => $v_value) {
+            // Check if the option is supported
+            if (!isset($v_requested_options[$v_key])) {
+                // Error log
+                $this->privErrorLog(self::ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
+                // Return
+                return self::errorCode();
+            }
+            // Look for attribute
+            switch ($v_key) {
+                case self::ATT_FILE_NAME :
+                    if (!is_string($v_value)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE, 'Invalid type '.gettype($v_value).
+                            '. String expected for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $p_filedescr['filename'] = self::UtilPathReduction($v_value);
+                    if ($p_filedescr['filename'] == '') {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE, 'Invalid empty filename for attribute \''.
+                            self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    break;
+                case self::ATT_FILE_NEW_SHORT_NAME :
+                    if (!is_string($v_value)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE, 'Invalid type '.gettype($v_value).
+                            '. String expected for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $p_filedescr['new_short_name'] = self::UtilPathReduction($v_value);
+                    if ($p_filedescr['new_short_name'] == '') {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE,
+                            'Invalid empty short filename for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    break;
+                case self::ATT_FILE_NEW_FULL_NAME :
+                    if (!is_string($v_value)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE, 'Invalid type '.gettype($v_value).
+                            '. String expected for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $p_filedescr['new_full_name'] = self::UtilPathReduction($v_value);
+                    if ($p_filedescr['new_full_name'] == '') {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE,
+                            'Invalid empty full filename for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    break;
+                // Look for options that takes a string
+                case self::ATT_FILE_COMMENT :
+                    if (!is_string($v_value)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE,
+                            'Invalid type '.gettype($v_value).'. String expected for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $p_filedescr['comment'] = $v_value;
+                    break;
+                case self::ATT_FILE_MTIME :
+                    if (!is_integer($v_value)) {
+                        $this->privErrorLog(
+                            self::ERR_INVALID_ATTRIBUTE_VALUE,
+                            'Invalid type '.gettype($v_value).'. Integer expected for attribute \''.self::UtilOptionText($v_key).'\''
+                        );
+                        return self::errorCode();
+                    }
+                    $p_filedescr['mtime'] = $v_value;
+                    break;
+                case self::ATT_FILE_CONTENT :
+                    $p_filedescr['content'] = $v_value;
+                    break;
+                default :
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_PARAMETER, 'Unknown parameter \''.$v_key.'\'');
+                    return self::errorCode();
+            }
+            // Look for mandatory options
+            if ($v_requested_options !== false) {
+                for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) {
+                    // Look for mandatory option
+                    if ($v_requested_options[$key] == 'mandatory') {
+                        // Look if present
+                        if (!isset($p_file_list[$key])) {
+                            $this->privErrorLog(
+                                self::ERR_INVALID_PARAMETER,
+                                'Missing mandatory parameter '.self::UtilOptionText($key).'('.$key.')'
+                            );
+                            return self::errorCode();
+                        }
+                    }
+                }
+            }
+        } // end foreach
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privFileDescrExpand()
+  // Description :
+  //   This method look for each item of the list to see if its a file, a folder
+  //   or a string to be added as file. For any other type of files (link, other)
+  //   just ignore the item.
+  //   Then prepare the information that will be stored for that file.
+  //   When its a folder, expand the folder with all the files that are in that
+  //   folder (recursively).
+  // Parameters :
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+    protected function privFileDescrExpand(&$p_filedescr_list, &$p_options)
+    {
+        $v_result=1;
+        // Create a result list
+        $v_result_list = array();
+        // Look each entry
+        for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
+            // Get filedescr
+            $v_descr = $p_filedescr_list[$i];
+            // Reduce the filename
+            $v_descr['filename'] = self::UtilTranslateWinPath($v_descr['filename'], false);
+            $v_descr['filename'] = self::UtilPathReduction($v_descr['filename']);
+            // Look for real file or folder
+            if (file_exists($v_descr['filename'])) {
+                if (@is_file($v_descr['filename'])) {
+                    $v_descr['type'] = 'file';
+                } else if (@is_dir($v_descr['filename'])) {
+                    $v_descr['type'] = 'folder';
+                } else if (@is_link($v_descr['filename'])) {
+                    // skip
+                    continue;
+                } else {
+                    // skip
+                    continue;
+                }
+            } else if (isset($v_descr['content'])) {
+                // Look for string added as file
+                $v_descr['type'] = 'virtual_file';
+            } else {
+                // Missing file / Error log
+                $sFilename = '/'.basename(dirname($v_descr['filename'])).'/'.basename($v_descr['filename']);
+                $this->privErrorLog(self::ERR_MISSING_FILE, ' File \''.$sFilename.'\' does not exist');
+                return PclZip::errorCode();
+            }
+            // Calculate the stored filename
+            $this->privCalculateStoredFilename($v_descr, $p_options);
+            // Add the descriptor in result list
+            $v_result_list[sizeof($v_result_list)] = $v_descr;
+            // Look for folder
+            if ($v_descr['type'] == 'folder') {
+                // List of items in folder
+                $v_dirlist_descr = array();
+                $v_dirlist_nb = 0;
+                if (($v_folder_handler = @opendir($v_descr['filename']))) {
+                    while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+                        // Skip '.' and '..'
+                        if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+                            continue;
+                        }
+                        // Compose the full filename
+                        $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+                        // Look for different stored filename
+                        // Because the name of the folder was changed, the name of the
+                        // files/sub-folders also change
+                        if (($v_descr['stored_filename'] != $v_descr['filename']) && (!isset($p_options[self::OPT_REMOVE_ALL_PATH]))) {
+                            if ($v_descr['stored_filename'] != '') {
+                                $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+                            } else {
+                                $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler;
+                            }
+                        }
+                        $v_dirlist_nb++;
+                    }
+                    @closedir($v_folder_handler);
+                } else { /* TBC : unable to open folder in read mode */ }
+                // Expand each element of the list
+                if ($v_dirlist_nb != 0) {
+                    // Expand
+                    if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+                        return $v_result;
+                    }
+                    // Concat the resulting list
+                    $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+                } else { }
+                // Free local array
+                unset($v_dirlist_descr);
+            }
+        }
+        // Get the result list
+        $p_filedescr_list = $v_result_list;
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCreate()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
+    {
+        $v_result=1;
+        $v_list_detail = array();
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Open the file in write mode
+        if (($v_result = $this->privOpenFd('wb')) != 1) {
+          return $v_result;
+        }
+        // Add the list of files
+        $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
+        // Close
+        $this->privCloseFd();
+        // Magic quotes trick
+        $this->privSwapBackMagicQuotes();
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAdd()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
+    {
+        $v_result = 1;
+        $v_list_detail = array();
+        // Look if the archive exists or is empty
+        if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) {
+            // Do a create
+            $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
+            return $v_result;
+        }
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Open the zip file
+        if (($v_result=$this->privOpenFd('rb')) != 1) {
+            // Magic quotes trick
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Read the central directory informations
+        $v_central_dir = array();
+        if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+            $this->privCloseFd();
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Go to beginning of File
+        @rewind($this->zip_fd);
+        // Creates a temporay file
+        $v_zip_temp_name = self::TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+        // Open the temporary file in write mode
+        if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) {
+            $this->privCloseFd();
+            $this->privSwapBackMagicQuotes();
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'
+            );
+            return self::errorCode();
+        }
+        // Copy the files from the archive to the temporary file
+        // TBC : Here I should better append the file and go back to erase the central dir
+        $v_size = $v_central_dir['offset'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = fread($this->zip_fd, $v_read_size);
+            @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Swap the file descriptor
+        // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+        // the following methods on the temporary fil and not the real archive
+        $v_swap = $this->zip_fd;
+        $this->zip_fd = $v_zip_temp_fd;
+        $v_zip_temp_fd = $v_swap;
+        // Add the files
+        $v_header_list = array();
+        if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) {
+            fclose($v_zip_temp_fd);
+            $this->privCloseFd();
+            @unlink($v_zip_temp_name);
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Store the offset of the central dir
+        $v_offset = @ftell($this->zip_fd);
+        // Copy the block of file headers from the old archive
+        $v_size = $v_central_dir['size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+            @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Create the Central Dir files header
+        for ($i = 0, $v_count = 0; $i < sizeof($v_header_list); $i++) {
+            // Create the file header
+            if ($v_header_list[$i]['status'] == 'ok') {
+                if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+                    fclose($v_zip_temp_fd);
+                    $this->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    $this->privSwapBackMagicQuotes();
+                    return $v_result;
+                }
+                $v_count++;
+            }
+            // Transform the header to a 'usable' info
+            $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+        }
+        // Zip file comment
+        $v_comment = $v_central_dir['comment'];
+        if (isset($p_options[self::OPT_COMMENT])) {
+            $v_comment = $p_options[self::OPT_COMMENT];
+        }
+        if (isset($p_options[self::OPT_ADD_COMMENT])) {
+            $v_comment = $v_comment.$p_options[self::OPT_ADD_COMMENT];
+        }
+        if (isset($p_options[self::OPT_PREPEND_COMMENT])) {
+            $v_comment = $p_options[self::OPT_PREPEND_COMMENT].$v_comment;
+        }
+        // Calculate the size of the central header
+        $v_size = @ftell($this->zip_fd)-$v_offset;
+        // Create the central dir footer
+        if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) {
+            // Reset the file list
+            unset($v_header_list);
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Swap back the file descriptor
+        $v_swap = $this->zip_fd;
+        $this->zip_fd = $v_zip_temp_fd;
+        $v_zip_temp_fd = $v_swap;
+        // Close
+        $this->privCloseFd();
+        // Close the temporary file
+        @fclose($v_zip_temp_fd);
+        // Magic quotes trick
+        $this->privSwapBackMagicQuotes();
+        // Delete the zip file
+        // TBC : I should test the result ...
+        @unlink($this->zipname);
+        // Rename the temporary file
+        // TBC : I should test the result ...
+        // @rename($v_zip_temp_name, $this->zipname);
+        self::UtilRename($v_zip_temp_name, $this->zipname);
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privOpenFd()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    protected function privOpenFd($p_mode)
+    {
+        $v_result = 1;
+        // Look if already open
+        if ($this->zip_fd != 0) {
+          // Error log
+            $this->privErrorLog(self::ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
+            return self::errorCode();
+        }
+        // Open the zip file
+        if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) {
+            // Error log
+            $this->privErrorLog(self::ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
+            return self::errorCode();
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCloseFd()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    protected function privCloseFd()
+    {
+        $v_result=1;
+        if ($this->zip_fd != 0) {
+            @fclose($this->zip_fd);
+        }
+        $this->zip_fd = 0;
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddList()
+  // Description :
+  //   $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+  //   different from the real path of the file. This is usefull if you want to have PclTar
+  //   running in any directory, and memorize relative path from an other directory.
+  // Parameters :
+  //   $p_list : An array containing the file or directory names to add in the tar
+  //   $p_result_list : list of added files with their properties (specially the status field)
+  //   $p_add_dir : Path to add in the filename path archived
+  //   $p_remove_dir : Path to remove in the filename path archived
+  // Return Values :
+  // --------------------------------------------------------------------------------
+//  public function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
+    protected function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
+    {
+        $v_result = 1;
+        // Add the files
+        $v_header_list = array();
+        if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) {
+            return $v_result;
+        }
+        // Store the offset of the central dir
+        $v_offset = @ftell($this->zip_fd);
+        // Create the Central Dir files header
+        for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++) {
+            // Create the file header
+            if ($v_header_list[$i]['status'] == 'ok') {
+                if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+                    return $v_result;
+                }
+                $v_count++;
+            }
+            // Transform the header to a 'usable' info
+            $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+        }
+        // Zip file comment
+        $v_comment = '';
+        if (isset($p_options[self::OPT_COMMENT])) {
+            $v_comment = $p_options[self::OPT_COMMENT];
+        }
+        // Calculate the size of the central header
+        $v_size = @ftell($this->zip_fd)-$v_offset;
+        // Create the central dir footer
+        if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) {
+            // Reset the file list
+            unset($v_header_list);
+            return $v_result;
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddFileList()
+  // Description :
+  // Parameters :
+  //   $p_filedescr_list : An array containing the file description
+  //                      or directory names to add in the zip
+  //   $p_result_list : list of added files with their properties (specially the status field)
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
+    {
+        $v_result = 1;
+        $v_header = array();
+        // Recuperate the current number of elt in list
+        $v_nb = sizeof($p_result_list);
+        // Loop on the files
+        for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
+            // Format the filename
+            $p_filedescr_list[$j]['filename'] = self::UtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+            // Skip empty file names
+            // TBC : Can this be possible ? not checked in DescrParseAtt ?
+            if ($p_filedescr_list[$j]['filename'] == "") {
+                continue;
+            }
+            // Check the filename
+            if (
+                ($p_filedescr_list[$j]['type'] != 'virtual_file') &&
+                (!file_exists($p_filedescr_list[$j]['filename'])))
+            {
+                $this->privErrorLog(self::ERR_MISSING_FILE, ' File \''.$p_filedescr_list[$j]['filename'].'\' does not exist');
+                return self::errorCode();
+            }
+            // Look if it is a file or a dir with no all path remove option
+            // or a dir with all its path removed
+            //      if (   (is_file($p_filedescr_list[$j]['filename']))
+            //          || (   is_dir($p_filedescr_list[$j]['filename'])
+            if (
+                ($p_filedescr_list[$j]['type'] == 'file') ||
+                ($p_filedescr_list[$j]['type'] == 'virtual_file') ||
+                (
+                    ($p_filedescr_list[$j]['type'] == 'folder') &&
+                    (!isset($p_options[self::OPT_REMOVE_ALL_PATH]) ||
+                    !$p_options[self::OPT_REMOVE_ALL_PATH])
+                )
+            ) {
+                // Add the file
+                $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header, $p_options);
+                if ($v_result != 1) {
+                    return $v_result;
+                }
+                // Store the file infos
+                $p_result_list[$v_nb++] = $v_header;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privAddFile($p_filedescr, &$p_header, &$p_options)
+    {
+        $v_result=1;
+        // Working variable
+        $p_filename = $p_filedescr['filename'];
+        // TBC : Already done in the fileAtt check ... ?
+        if ($p_filename == "") {
+            // Error log
+            $this->privErrorLog(self::ERR_INVALID_PARAMETER, 'Invalid file list parameter (invalid or empty list)');
+            return self::errorCode();
+        }
+        // Look for a stored different filename
+        /* TBC : Removed
+        if (isset($p_filedescr['stored_filename'])) {
+          $v_stored_filename = $p_filedescr['stored_filename'];
+        }
+        else {
+          $v_stored_filename = $p_filedescr['stored_filename'];
+        }
+        */
+        // Set the file properties
+        clearstatcache();
+        $p_header['version']           = 20;
+        $p_header['version_extracted'] = 10;
+        $p_header['flag']              = 0;
+        $p_header['compression']       = 0;
+        $p_header['crc']               = 0;
+        $p_header['compressed_size']   = 0;
+        $p_header['filename_len']      = strlen($p_filename);
+        $p_header['extra_len']         = 0;
+        $p_header['disk']              = 0;
+        $p_header['internal']          = 0;
+        $p_header['offset']            = 0;
+        $p_header['filename']          = $p_filename;
+        // TBC : Removed    $p_header['stored_filename'] = $v_stored_filename;
+        $p_header['stored_filename']   = $p_filedescr['stored_filename'];
+        $p_header['extra']             = '';
+        $p_header['status']            = 'ok';
+        $p_header['index']             = -1;
+        // Look for regular file
+        if ($p_filedescr['type']=='file') {
+            $p_header['external']  = 0x00000000;
+            $p_header['size']      = filesize($p_filename);
+        } else if ($p_filedescr['type']=='folder') {
+        // Look for regular folder
+            $p_header['external']  = 0x00000010;
+            $p_header['mtime']     = filemtime($p_filename);
+            $p_header['size']      = filesize($p_filename);
+        } else if ($p_filedescr['type'] == 'virtual_file') {
+        // Look for virtual file
+            $p_header['external']  = 0x00000000;
+            $p_header['size']      = strlen($p_filedescr['content']);
+        }
+        // Look for filetime
+        if (isset($p_filedescr['mtime'])) {
+            $p_header['mtime']     = $p_filedescr['mtime'];
+        } else if ($p_filedescr['type'] == 'virtual_file') {
+            $p_header['mtime']     = time();
+        } else {
+            $p_header['mtime']     = filemtime($p_filename);
+        }
+        // Look for file comment
+        if (isset($p_filedescr['comment'])) {
+            $p_header['comment_len'] = strlen($p_filedescr['comment']);
+            $p_header['comment']     = $p_filedescr['comment'];
+        } else {
+            $p_header['comment_len'] = 0;
+            $p_header['comment']     = '';
+        }
+        // Look for pre-add callback
+        if (isset($p_options[self::CB_PRE_ADD])) {
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the
+            // header.
+//            eval('$v_result = '.$p_options[self::CB_PRE_ADD].'(self::CB_PRE_ADD, $v_local_header);');
+            $v_result = $p_options[self::CB_PRE_ADD](self::CB_PRE_ADD, $v_local_header);
+            if ($v_result == 0) {
+                // Change the file status
+                $p_header['status'] = "skipped";
+                $v_result = 1;
+            }
+            // Update the informations
+            // Only some fields can be modified
+            if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+                $p_header['stored_filename'] = self::UtilPathReduction($v_local_header['stored_filename']);
+            }
+        }
+        // Look for empty stored filename
+        if ($p_header['stored_filename'] == "") {
+            $p_header['status'] = "filtered";
+        }
+        // Check the path length
+        if (strlen($p_header['stored_filename']) > 0xFF) {
+            $p_header['status'] = 'filename_too_long';
+        }
+        // Look if no error, or file not skipped
+        if ($p_header['status'] == 'ok') {
+            // Look for a file
+            if ($p_filedescr['type'] == 'file') {
+                // Look for using temporary file to zip
+                if (
+                    (!isset($p_options[self::OPT_TEMP_FILE_OFF])) &&
+                    (isset($p_options[self::OPT_TEMP_FILE_ON]) ||
+                        (isset($p_options[self::OPT_TEMP_FILE_THRESHOLD]) &&
+                            ($p_options[self::OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])
+                        )
+                    )
+                ) {
+                    $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options);
+                    if ($v_result < self::ERR_NO_ERROR) {
+                        return $v_result;
+                    }
+                } else {
+                    // Use "in memory" zip algo
+                    // Open the source file
+                    if (($v_file = @fopen($p_filename, "rb")) == 0) {
+                        $this->privErrorLog(
+                            self::ERR_READ_OPEN_FAIL,
+                            'Unable to open file \''.$p_filename.'\' in binary read mode'
+                        );
+                        return self::errorCode();
+                    }
+                    // Read the file content
+                    $v_content = @fread($v_file, $p_header['size']);
+                    // Close the file
+                    @fclose($v_file);
+                    // Calculate the CRC
+                    $p_header['crc'] = @crc32($v_content);
+                    // Look for no compression
+                    if ($p_options[self::OPT_NO_COMPRESSION]) {
+                        // Set header parameters
+                        $p_header['compressed_size'] = $p_header['size'];
+                        $p_header['compression'] = 0;
+                    } else {
+                        // Look for normal compression
+                        // Compress the content
+                        $v_content = @gzdeflate($v_content);
+                        // Set header parameters
+                        $p_header['compressed_size'] = strlen($v_content);
+                        $p_header['compression'] = 8;
+                    }
+                    // Call the header generation
+                    if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+                        @fclose($v_file);
+                        return $v_result;
+                    }
+                    // Write the compressed (or not) content
+                    @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
+                }
+            } else if ($p_filedescr['type'] == 'virtual_file') {
+                // Look for a virtual file (a file from string)
+                $v_content = $p_filedescr['content'];
+                // Calculate the CRC
+                $p_header['crc'] = @crc32($v_content);
+                // Look for no compression
+                if ($p_options[self::OPT_NO_COMPRESSION]) {
+                    // Set header parameters
+                    $p_header['compressed_size'] = $p_header['size'];
+                    $p_header['compression'] = 0;
+                } else {
+                    // Look for normal compression
+                    // Compress the content
+                    $v_content = @gzdeflate($v_content);
+                    // Set header parameters
+                    $p_header['compressed_size'] = strlen($v_content);
+                    $p_header['compression'] = 8;
+                }
+                // Call the header generation
+                if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+                    @fclose($v_file);
+                    return $v_result;
+                }
+                // Write the compressed (or not) content
+                @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
+            } else if ($p_filedescr['type'] == 'folder') {
+                // Look for a directory
+                // Look for directory last '/'
+                if (@substr($p_header['stored_filename'], -1) != '/') {
+                    $p_header['stored_filename'] .= '/';
+                }
+                // Set the file properties
+                $p_header['size'] = 0;
+//                $p_header['external'] = 0x41FF0010;   // Value for a folder : to be checked
+                $p_header['external'] = 0x00000010;   // Value for a folder : to be checked
+                // Call the header generation
+                if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+                    return $v_result;
+                }
+            }
+        }
+        // Look for post-add callback
+        if (isset($p_options[self::CB_POST_ADD])) {
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the
+            // header.
+//            eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+            $v_result = $p_options[self::CB_POST_ADD](self::CB_POST_ADD, $v_local_header);
+            if ($v_result == 0) {
+                // Ignored
+                $v_result = 1;
+            }
+            // Update the informations
+            // Nothing can be modified
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddFileUsingTempFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options)
+    {
+        $v_result = self::ERR_NO_ERROR;
+        // Working variable
+        $p_filename = $p_filedescr['filename'];
+        // Open the source file
+        if (($v_file = @fopen($p_filename, "rb")) == 0) {
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open file \''.$p_filename.'\' in binary read mode'
+            );
+            return self::errorCode();
+        }
+        // Creates a compressed temporary file
+        $v_gzip_temp_name = self::TEMPORARY_DIR.uniqid('pclzip-').'.gz';
+        if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) {
+            fclose($v_file);
+            $this->privErrorLog(
+                self::ERR_WRITE_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'
+            );
+            return self::errorCode();
+        }
+        // Read the file by self::READ_BLOCK_SIZE octets blocks
+        $v_size = filesize($p_filename);
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($v_file, $v_read_size);
+//            $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+            @gzputs($v_file_compressed, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Close the file
+        @fclose($v_file);
+        @gzclose($v_file_compressed);
+        // Check the minimum file size
+        if (filesize($v_gzip_temp_name) < 18) {
+            $this->privErrorLog(
+                self::ERR_BAD_FORMAT,
+                'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'
+            );
+            return self::errorCode();
+        }
+        // Extract the compressed attributes
+        if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'
+            );
+            return self::errorCode();
+        }
+        // Read the gzip file header
+        $v_binary_data = @fread($v_file_compressed, 10);
+        $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data);
+        // Check some parameters
+        $v_data_header['os'] = bin2hex($v_data_header['os']);
+        // Read the gzip file footer
+        @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8);
+        $v_binary_data = @fread($v_file_compressed, 8);
+        $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data);
+        // Set the attributes
+        $p_header['compression'] = ord($v_data_header['cm']);
+        //$p_header['mtime'] = $v_data_header['mtime'];
+        $p_header['crc'] = $v_data_footer['crc'];
+        $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18;
+        // Close the file
+        @fclose($v_file_compressed);
+        // Call the header generation
+        if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+            return $v_result;
+        }
+        // Add the compressed data
+        if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'
+            );
+            return self::errorCode();
+        }
+        // Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+        fseek($v_file_compressed, 10);
+        $v_size = $p_header['compressed_size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($v_file_compressed, $v_read_size);
+            //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+            @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Close the file
+        @fclose($v_file_compressed);
+        // Unlink the temporary file
+        @unlink($v_gzip_temp_name);
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCalculateStoredFilename()
+  // Description :
+  //   Based on file descriptor properties and global options, this method
+  //   calculate the filename that will be stored in the archive.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privCalculateStoredFilename(&$p_filedescr, &$p_options)
+    {
+        $v_result = 1;
+        // Working variables
+        $p_filename = $p_filedescr['filename'];
+        if (isset($p_options[self::OPT_ADD_PATH])) {
+            $p_add_dir = $p_options[self::OPT_ADD_PATH];
+        } else {
+          $p_add_dir = '';
+        }
+        if (isset($p_options[self::OPT_REMOVE_PATH])) {
+            $p_remove_dir = $p_options[self::OPT_REMOVE_PATH];
+        } else {
+            $p_remove_dir = '';
+        }
+        if (isset($p_options[self::OPT_REMOVE_ALL_PATH])) {
+            $p_remove_all_dir = $p_options[self::OPT_REMOVE_ALL_PATH];
+        } else {
+            $p_remove_all_dir = 0;
+        }
+        // Look for full name change
+        if (isset($p_filedescr['new_full_name'])) {
+            // Remove drive letter if any
+            $v_stored_filename = self::UtilTranslateWinPath($p_filedescr['new_full_name']);
+        } else {
+            // Look for path and/or short name change
+            // Its when we cahnge just the filename but not the path
+            if (isset($p_filedescr['new_short_name'])) {
+                $v_path_info = pathinfo($p_filename);
+                $v_dir = '';
+                if ($v_path_info['dirname'] != '') {
+                    $v_dir = $v_path_info['dirname'].'/';
+                }
+                $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+            } else {
+                // Calculate the stored filename
+                $v_stored_filename = $p_filename;
+            }
+            // Look for all path to remove
+            if ($p_remove_all_dir) {
+                $v_stored_filename = basename($p_filename);
+            } else if ($p_remove_dir != "") {
+            // Look for partial path remove
+                if (substr($p_remove_dir, -1) != '/') {
+                    $p_remove_dir .= "/";
+                }
+                if ((substr($p_filename, 0, 2) == "./") || (substr($p_remove_dir, 0, 2) == "./")) {
+                    if ((substr($p_filename, 0, 2) == "./") && (substr($p_remove_dir, 0, 2) != "./")) {
+                        $p_remove_dir = "./".$p_remove_dir;
+                    }
+                    if ((substr($p_filename, 0, 2) != "./") && (substr($p_remove_dir, 0, 2) == "./")) {
+                        $p_remove_dir = substr($p_remove_dir, 2);
+                    }
+                }
+                $v_compare = self::UtilPathInclusion($p_remove_dir, $v_stored_filename);
+                if ($v_compare > 0) {
+                    if ($v_compare == 2) {
+                      $v_stored_filename = "";
+                    } else {
+                        $v_stored_filename = substr($v_stored_filename, strlen($p_remove_dir));
+                    }
+                }
+            }
+            // Remove drive letter if any
+            $v_stored_filename = self::UtilTranslateWinPath($v_stored_filename);
+            // Look for path to add
+            if ($p_add_dir != "") {
+                if (substr($p_add_dir, -1) == "/") {
+                  $v_stored_filename = $p_add_dir.$v_stored_filename;
+                } else {
+                  $v_stored_filename = $p_add_dir."/".$v_stored_filename;
+                }
+            }
+        }
+        // Filename (reduce the path of stored name)
+        $v_stored_filename = self::UtilPathReduction($v_stored_filename);
+        $p_filedescr['stored_filename'] = $v_stored_filename;
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privWriteFileHeader(&$p_header)
+    {
+        $v_result = 1;
+        // Store the offset position of the file
+        $p_header['offset'] = ftell($this->zip_fd);
+        // Transform UNIX mtime to DOS format mdate/mtime
+        $v_date = getdate($p_header['mtime']);
+        $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+        $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+        // Packed data
+        $v_binary_data = pack(
+            'VvvvvvVVVvv',
+            0x04034b50,
+            $p_header['version_extracted'],
+            $p_header['flag'],
+            $p_header['compression'],
+            $v_mtime,
+            $v_mdate,
+            $p_header['crc'],
+            $p_header['compressed_size'],
+            $p_header['size'],
+            strlen($p_header['stored_filename']),
+            $p_header['extra_len']
+        );
+        // Write the first 148 bytes of the header in the archive
+        fputs($this->zip_fd, $v_binary_data, 30);
+        // Write the variable fields
+        if (strlen($p_header['stored_filename']) != 0) {
+            fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+        }
+        if ($p_header['extra_len'] != 0) {
+            fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteCentralFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privWriteCentralFileHeader(&$p_header)
+    {
+        $v_result = 1;
+        // TBC
+        //for(reset($p_header); $key = key($p_header); next($p_header)) { }
+        // Transform UNIX mtime to DOS format mdate/mtime
+        $v_date = getdate($p_header['mtime']);
+        $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+        $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+        // Packed data
+        $v_binary_data = pack(
+            'VvvvvvvVVVvvvvvVV',
+            0x02014b50,
+            $p_header['version'],
+            $p_header['version_extracted'],
+            $p_header['flag'],
+            $p_header['compression'],
+            $v_mtime,
+            $v_mdate,
+            $p_header['crc'],
+            $p_header['compressed_size'],
+            $p_header['size'],
+            strlen($p_header['stored_filename']),
+            $p_header['extra_len'],
+            $p_header['comment_len'],
+            $p_header['disk'],
+            $p_header['internal'],
+            $p_header['external'],
+            $p_header['offset']
+        );
+        // Write the 42 bytes of the header in the zip file
+        fputs($this->zip_fd, $v_binary_data, 46);
+        // Write the variable fields
+        if (strlen($p_header['stored_filename']) != 0) {
+            fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+        }
+        if ($p_header['extra_len'] != 0) {
+            fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+        }
+        if ($p_header['comment_len'] != 0) {
+            fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteCentralHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+    {
+        $v_result=1;
+        // Packed data
+        $v_binary_data = pack(
+            'VvvvvVVv',
+            0x06054b50,
+            0,
+            0,
+            $p_nb_entries,
+            $p_nb_entries,
+            $p_size,
+            $p_offset,
+            strlen($p_comment)
+        );
+        // Write the 22 bytes of the header in the zip file
+        fputs($this->zip_fd, $v_binary_data, 22);
+        // Write the variable fields
+        if (strlen($p_comment) != 0) {
+            fputs($this->zip_fd, $p_comment, strlen($p_comment));
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privList()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privList(&$p_list)
+    {
+        $v_result = 1;
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Open the zip file
+        if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) {
+            // Magic quotes trick
+            $this->privSwapBackMagicQuotes();
+            // Error log
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open archive \''.$this->zipname.'\' in binary read mode'
+            );
+            // Return
+            return self::errorCode();
+        }
+        // Read the central directory informations
+        $v_central_dir = array();
+        if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Go to beginning of Central Dir
+        @rewind($this->zip_fd);
+        if (@fseek($this->zip_fd, $v_central_dir['offset'])) {
+            $this->privSwapBackMagicQuotes();
+            // Error log
+            $this->privErrorLog(
+                self::ERR_INVALID_ARCHIVE_ZIP,
+                'Invalid archive size'
+            );
+            return self::errorCode();
+        }
+        // Read each entry
+        for ($i=0; $i<$v_central_dir['entries']; $i++) {
+            // Read the file header
+            if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) {
+                $this->privSwapBackMagicQuotes();
+                return $v_result;
+            }
+            $v_header['index'] = $i;
+            // Get the only interesting attributes
+            $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
+            unset($v_header);
+        }
+        // Close the zip file
+        $this->privCloseFd();
+        // Magic quotes trick
+        $this->privSwapBackMagicQuotes();
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privConvertHeader2FileInfo()
+  // Description :
+  //   This function takes the file informations from the central directory
+  //   entries and extract the interesting parameters that will be given back.
+  //   The resulting file infos are set in the array $p_info
+  //     $p_info['filename'] : Filename with full path. Given by user (add),
+  //                           extracted in the filesystem (extract).
+  //     $p_info['stored_filename'] : Stored filename in the archive.
+  //     $p_info['size'] = Size of the file.
+  //     $p_info['compressed_size'] = Compressed size of the file.
+  //     $p_info['mtime'] = Last modification date of the file.
+  //     $p_info['comment'] = Comment associated with the file.
+  //     $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+  //     $p_info['status'] = status of the action on the file.
+  //     $p_info['crc'] = CRC of the file content.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privConvertHeader2FileInfo($p_header, &$p_info)
+    {
+        $v_result = 1;
+        // Get the interesting attributes
+        $v_temp_path               = self::UtilPathReduction($p_header['filename']);
+        $p_info['filename']        = $v_temp_path;
+        $v_temp_path               = self::UtilPathReduction($p_header['stored_filename']);
+        $p_info['stored_filename'] = $v_temp_path;
+        $p_info['size']            = $p_header['size'];
+        $p_info['compressed_size'] = $p_header['compressed_size'];
+        $p_info['mtime']           = $p_header['mtime'];
+        $p_info['comment']         = $p_header['comment'];
+        $p_info['folder']          = (($p_header['external']&0x00000010)==0x00000010);
+        $p_info['index']           = $p_header['index'];
+        $p_info['status']          = $p_header['status'];
+        $p_info['crc']             = $p_header['crc'];
+        // Return
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractByRule()
+  // Description :
+  //   Extract a file or directory depending of rules (by index, by name, ...)
+  // Parameters :
+  //   $p_file_list : An array where will be placed the properties of each
+  //                  extracted file
+  //   $p_path : Path to add while writing the extracted files
+  //   $p_remove_path : Path to remove (from the file memorized path) while writing the
+  //                    extracted files. If the path does not match the file path,
+  //                    the file is extracted with its memorized path.
+  //                    $p_remove_path does not apply to 'list' mode.
+  //                    $p_path and $p_remove_path are commulative.
+  // Return Values :
+  //   1 on success,0 or less on error (see error code list)
+  // --------------------------------------------------------------------------------
+    protected function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+    {
+        $v_result = 1;
+        // Magic quotes trick
+        $this->privDisableMagicQuotes();
+        // Check the path
+        if (
+            ($p_path == "") ||
+            (
+                (substr($p_path, 0, 1) != "/") &&
+                (substr($p_path, 0, 3) != "../") &&
+                (substr($p_path,1,2)!=":/")
+            )
+        ) {
+            $p_path = "./".$p_path;
+        }
+        // Reduce the path last (and duplicated) '/'
+        if (($p_path != "./") && ($p_path != "/")) {
+            // Look for the path end '/'
+            while (substr($p_path, -1) == "/") {
+                $p_path = substr($p_path, 0, strlen($p_path)-1);
+            }
+        }
+        // Look for path to remove format (should end by /)
+        if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) {
+            $p_remove_path .= '/';
+        }
+        $p_remove_path_size = strlen($p_remove_path);
+        // Open the zip file
+        if (($v_result = $this->privOpenFd('rb')) != 1) {
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Read the central directory informations
+        $v_central_dir = array();
+        if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+            // Close the zip file
+            $this->privCloseFd();
+            $this->privSwapBackMagicQuotes();
+            return $v_result;
+        }
+        // Start at beginning of Central Dir
+        $v_pos_entry = $v_central_dir['offset'];
+        // Read each entry
+        $j_start = 0;
+        for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) {
+            // Read next Central dir entry
+            @rewind($this->zip_fd);
+            if (@fseek($this->zip_fd, $v_pos_entry)) {
+                // Close the zip file
+                $this->privCloseFd();
+                $this->privSwapBackMagicQuotes();
+                // Error log
+                $this->privErrorLog(
+                    self::ERR_INVALID_ARCHIVE_ZIP,
+                    'Invalid archive size'
+                );
+                return self::errorCode();
+            }
+            // Read the file header
+            $v_header = array();
+            if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) {
+                // Close the zip file
+                $this->privCloseFd();
+                $this->privSwapBackMagicQuotes();
+                return $v_result;
+            }
+            // Store the index
+            $v_header['index'] = $i;
+            // Store the file position
+            $v_pos_entry = ftell($this->zip_fd);
+            // Look for the specific extract rules
+            $v_extract = false;
+            // Look for extract by name rule
+            if (   (isset($p_options[self::OPT_BY_NAME])) && ($p_options[self::OPT_BY_NAME] != 0)) {
+                // Look if the filename is in the list
+                for ($j = 0; ($j < sizeof($p_options[self::OPT_BY_NAME])) && (!$v_extract); $j++) {
+                    // Look for a directory
+                    if (substr($p_options[self::OPT_BY_NAME][$j], -1) == '/') {
+                        // Look if the directory is in the filename path
+                        if (
+                            (strlen($v_header['stored_filename']) > strlen($p_options[self::OPT_BY_NAME][$j])) &&
+                            (substr(
+                                $v_header['stored_filename'],
+                                0,
+                                strlen($p_options[self::OPT_BY_NAME][$j])) == $p_options[self::OPT_BY_NAME][$j]
+                            )
+                        ) {
+                            $v_extract = true;
+                        }
+                    } elseif ($v_header['stored_filename'] == $p_options[self::OPT_BY_NAME][$j]) {
+                    // Look for a filename
+                        $v_extract = true;
+                    }
+                }
+            } else if ((isset($p_options[self::OPT_BY_PREG])) && ($p_options[self::OPT_BY_PREG] != "")) {
+                // Look for extract by preg rule
+                if (preg_match($p_options[self::OPT_BY_PREG], $v_header['stored_filename'])) {
+                    $v_extract = true;
+                }
+            } else if ((isset($p_options[self::OPT_BY_INDEX])) && ($p_options[self::OPT_BY_INDEX] != 0)) {
+                // Look for extract by index rule
+                // Look if the index is in the list
+                for ($j=$j_start; ($j<sizeof($p_options[self::OPT_BY_INDEX])) && (!$v_extract); $j++) {
+                    if (($i>=$p_options[self::OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[self::OPT_BY_INDEX][$j]['end'])) {
+                        $v_extract = true;
+                    }
+                    if ($i>=$p_options[self::OPT_BY_INDEX][$j]['end']) {
+                        $j_start = $j+1;
+                    }
+                    if ($p_options[self::OPT_BY_INDEX][$j]['start']>$i) {
+                        break;
+                    }
+                }
+            } else {
+                // Look for no rule, which means extract all the archive
+                $v_extract = true;
+            }
+            // Check compression method
+            if (
+                ($v_extract) && (
+                    ($v_header['compression'] != 8) && ($v_header['compression'] != 0))
+            ) {
+                $v_header['status'] = 'unsupported_compression';
+                // Look for self::OPT_STOP_ON_ERROR
+                if (
+                    (isset($p_options[self::OPT_STOP_ON_ERROR])) && ($p_options[self::OPT_STOP_ON_ERROR]===true)
+                ) {
+                    $this->privSwapBackMagicQuotes();
+                    $this->privErrorLog(
+                        self::ERR_UNSUPPORTED_COMPRESSION,
+                        'Filename \''.$v_header['stored_filename'].'\' is '.
+                        'compressed by an unsupported compression method ('.$v_header['compression'].') '
+                    );
+                    return self::errorCode();
+                }
+            }
+            // Check encrypted files
+            if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
+                $v_header['status'] = 'unsupported_encryption';
+                // Look for self::OPT_STOP_ON_ERROR
+                if ((isset($p_options[self::OPT_STOP_ON_ERROR])) && ($p_options[self::OPT_STOP_ON_ERROR]===true)) {
+                    $this->privSwapBackMagicQuotes();
+                    $this->privErrorLog(
+                        self::ERR_UNSUPPORTED_ENCRYPTION,
+                        'Unsupported encryption for filename \''.$v_header['stored_filename'].'\''
+                    );
+                    return self::errorCode();
+                }
+            }
+            // Look for real extraction
+            if (($v_extract) && ($v_header['status'] != 'ok')) {
+                $v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++]);
+                if ($v_result != 1) {
+                    $this->privCloseFd();
+                    $this->privSwapBackMagicQuotes();
+                    return $v_result;
+                }
+                $v_extract = false;
+            }
+            // Look for real extraction
+            if ($v_extract) {
+                // Go to the file position
+                @rewind($this->zip_fd);
+                if (@fseek($this->zip_fd, $v_header['offset'])) {
+                    // Close the zip file
+                    $this->privCloseFd();
+                    $this->privSwapBackMagicQuotes();
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+                    return self::errorCode();
+                }
+                // Look for extraction as string
+                if ($p_options[self::OPT_EXTRACT_AS_STRING]) {
+                    $v_string = '';
+                    // Extracting the file
+                    $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options);
+                    if ($v_result1 < 1) {
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result1;
+                    }
+                    // Get the only interesting attributes
+                    if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) {
+                        // Close the zip file
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result;
+                    }
+                    // Set the file content
+                    $p_file_list[$v_nb_extracted]['content'] = $v_string;
+                    // Next extracted file
+                    $v_nb_extracted++;
+                    // Look for user callback abort
+                    if ($v_result1 == 2) {
+                        break;
+                    }
+                } elseif ((isset($p_options[self::OPT_EXTRACT_IN_OUTPUT])) && ($p_options[self::OPT_EXTRACT_IN_OUTPUT])) {
+                    // Look for extraction in standard output
+                    // Extracting the file in standard output
+                    $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
+                    if ($v_result1 < 1) {
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result1;
+                    }
+                    // Get the only interesting attributes
+                    if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result;
+                    }
+                    // Look for user callback abort
+                    if ($v_result1 == 2) {
+                        break;
+                    }
+                } else {
+                    // Look for normal extraction
+                    // Extracting the file
+                    $v_result1 = $this->privExtractFile(
+                        $v_header,
+                        $p_path,
+                        $p_remove_path,
+                        $p_remove_all_path,
+                        $p_options
+                    );
+                    if ($v_result1 < 1) {
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result1;
+                    }
+                    // Get the only interesting attributes
+                    if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+                        // Close the zip file
+                        $this->privCloseFd();
+                        $this->privSwapBackMagicQuotes();
+                        return $v_result;
+                    }
+                    // Look for user callback abort
+                    if ($v_result1 == 2) {
+                        break;
+                    }
+                }
+            }
+        }
+        // Close the zip file
+        $this->privCloseFd();
+        $this->privSwapBackMagicQuotes();
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //
+  // 1 : ... ?
+  // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+  // --------------------------------------------------------------------------------
+    protected function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+    {
+        $v_result = 1;
+        // Read the file header
+        if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+            return $v_result;
+        }
+        // Check that the file header is coherent with $p_entry info
+        if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+            // TBC
+        }
+        // Look for all path to remove
+        if ($p_remove_all_path == true) {
+            // Look for folder entry that not need to be extracted
+            if (($p_entry['external']&0x00000010)==0x00000010) {
+                $p_entry['status'] = "filtered";
+                return $v_result;
+            }
+            // Get the basename of the path
+            $p_entry['filename'] = basename($p_entry['filename']);
+        } else if ($p_remove_path != '') {
+        // Look for path to remove
+            if (self::UtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) {
+                // Change the file status
+                $p_entry['status'] = 'filtered';
+                // Return
+                return $v_result;
+            }
+            $p_remove_path_size = strlen($p_remove_path);
+            if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) {
+                // Remove the path
+                $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+            }
+        }
+        // Add the path
+        if ($p_path != '') {
+            $p_entry['filename'] = $p_path."/".$p_entry['filename'];
+        }
+        // Check a base_dir_restriction
+        if (isset($p_options[self::OPT_EXTRACT_DIR_RESTRICTION])) {
+            $v_inclusion = self::UtilPathInclusion(
+                $p_options[self::OPT_EXTRACT_DIR_RESTRICTION] , $p_entry['filename']
+            );
+            if ($v_inclusion == 0) {
+                $this->privErrorLog(
+                    self::ERR_DIRECTORY_RESTRICTION,
+                    'Filename \''.$p_entry['filename'].'\' is outside '.self::OPT_EXTRACT_DIR_RESTRICTION
+                );
+                return self::errorCode();
+            }
+        }
+        // Look for pre-extract callback
+        if (isset($p_options[self::CB_PRE_EXTRACT])) {
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the header.
+//            eval('$v_result = '.$p_options[self::CB_PRE_EXTRACT].'(self::CB_PRE_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_PRE_EXTRACT](self::CB_PRE_EXTRACT, $v_local_header);
+            if ($v_result == 0) {
+                // Change the file status
+                $p_entry['status'] = 'skipped';
+                $v_result = 1;
+            }
+            // Look for abort result
+            if ($v_result == 2) {
+                // This status is internal and will be changed in 'skipped'
+                $p_entry['status'] = 'aborted';
+                $v_result = self::ERR_USER_ABORTED;
+            }
+            // Update the informations
+            // Only some fields can be modified
+            $p_entry['filename'] = $v_local_header['filename'];
+        }
+        // Look if extraction should be done
+        if ($p_entry['status'] == 'ok') {
+            // Look for specific actions while the file exist
+            if (file_exists($p_entry['filename'])) {
+                // Look if file is a directory
+                if (is_dir($p_entry['filename'])) {
+                    // Change the file status
+                    $p_entry['status'] = 'already_a_directory';
+                    // Look for self::OPT_STOP_ON_ERROR
+                    // For historical reason first PclZip implementation does not stop
+                    // when this kind of error occurs.
+                    if ((isset($p_options[self::OPT_STOP_ON_ERROR])) && ($p_options[self::OPT_STOP_ON_ERROR]===true)) {
+                        $this->privErrorLog(
+                            self::ERR_ALREADY_A_DIRECTORY,
+                            'Filename \''.$p_entry['filename'].'\' is already used by an existing directory'
+                        );
+                        return PclZip::errorCode();
+                    }
+                } else if (!is_writeable($p_entry['filename'])) {
+                    // Look if file is write protected
+                    // Change the file status
+                    $p_entry['status'] = "write_protected";
+                    // Look for self::OPT_STOP_ON_ERROR
+                    // For historical reason first PclZip implementation does not stop
+                    // when this kind of error occurs.
+                    if ((isset($p_options[self::OPT_STOP_ON_ERROR])) && ($p_options[self::OPT_STOP_ON_ERROR]===true)) {
+                        $this->privErrorLog(
+                            self::ERR_WRITE_OPEN_FAIL,
+                            'Filename \''.$p_entry['filename'].'\' exists and is write protected'
+                        );
+                        return PclZip::errorCode();
+                    }
+                } else if (filemtime($p_entry['filename']) > $p_entry['mtime']) {
+                    // Look if the extracted file is older
+                    // Change the file status
+                    if ((isset($p_options[self::OPT_REPLACE_NEWER])) && ($p_options[self::OPT_REPLACE_NEWER]===true)) {
+                        // do nothing
+                    } else {
+                        $p_entry['status'] = 'newer_exist';
+                        // Look for self::OPT_STOP_ON_ERROR
+                        // For historical reason first PclZip implementation does not stop
+                        // when this kind of error occurs.
+                        if ((isset($p_options[self::OPT_STOP_ON_ERROR])) && ($p_options[self::OPT_STOP_ON_ERROR]===true)) {
+                            $this->privErrorLog(
+                                self::ERR_WRITE_OPEN_FAIL,
+                                'Newer version of \''.$p_entry['filename'].'\' exists and option PCLZIP_OPT_REPLACE_NEWER is not selected'
+                            );
+                            return self::errorCode();
+                        }
+                    }
+                } else { }
+            } else {
+                // Check the directory availability and create it if necessary
+                if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) {
+                    $v_dir_to_check = $p_entry['filename'];
+                } else if (!strstr($p_entry['filename'], "/")) {
+                    $v_dir_to_check = "";
+                } else {
+                    $v_dir_to_check = dirname($p_entry['filename']);
+                }
+                if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
+                    // Change the file status
+                    $p_entry['status'] = 'path_creation_fail';
+                    //return $v_result;
+                    $v_result = 1;
+                }
+            }
+        }
+        // Look if extraction should be done
+        if ($p_entry['status'] == 'ok') {
+            // Do the extraction (if not a folder)
+            if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+                // Look for not compressed file
+                if ($p_entry['compression'] == 0) {
+                    // Opening destination file
+                    if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+                        // Change the file status
+                        $p_entry['status'] = 'write_error';
+                        return $v_result;
+                    }
+                    // Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+                    $v_size = $p_entry['compressed_size'];
+                    while ($v_size != 0) {
+                        $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+                        $v_buffer = @fread($this->zip_fd, $v_read_size);
+//                        $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+//                        @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+                        @fwrite($v_dest_file, $v_buffer, $v_read_size);
+                        $v_size -= $v_read_size;
+                    }
+                    // Closing the destination file
+                    fclose($v_dest_file);
+                    // Change the file mtime
+                    touch($p_entry['filename'], $p_entry['mtime']);
+                } else {
+                    // TBC
+                    // Need to be finished
+                    if (($p_entry['flag'] & 1) == 1) {
+                        $this->privErrorLog(
+                            self::ERR_UNSUPPORTED_ENCRYPTION,
+                            'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'
+                        );
+                        return self::errorCode();
+                    }
+                    // Look for using temporary file to unzip
+                    if (
+                        (!isset($p_options[self::OPT_TEMP_FILE_OFF])) &&
+                        (isset($p_options[self::OPT_TEMP_FILE_ON]) ||
+                            (isset($p_options[self::OPT_TEMP_FILE_THRESHOLD]) &&
+                                ($p_options[self::OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])
+                            )
+                        )
+                    ) {
+                        $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options);
+                        if ($v_result < self::ERR_NO_ERROR) {
+                            return $v_result;
+                        }
+                    } else {
+                        // Look for extract in memory
+                        // Read the compressed file in a buffer (one shot)
+                        $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+                        // Decompress the file
+                        $v_file_content = @gzinflate($v_buffer);
+                        unset($v_buffer);
+                        if ($v_file_content === false) {
+                            // Change the file status
+                            // TBC
+                            $p_entry['status'] = "error";
+                            return $v_result;
+                        }
+                        // Opening destination file
+                        if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+                            // Change the file status
+                            $p_entry['status'] = "write_error";
+                            return $v_result;
+                        }
+                        // Write the uncompressed data
+                        @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+                        unset($v_file_content);
+                        // Closing the destination file
+                        @fclose($v_dest_file);
+                    }
+                    // Change the file mtime
+                    @touch($p_entry['filename'], $p_entry['mtime']);
+                }
+                // Look for chmod option
+                if (isset($p_options[self::OPT_SET_CHMOD])) {
+                    // Change the mode of the file
+                    @chmod($p_entry['filename'], $p_options[self::OPT_SET_CHMOD]);
+                }
+            }
+        }
+        // Change abort status
+        if ($p_entry['status'] == "aborted") {
+            $p_entry['status'] = "skipped";
+        } elseif (isset($p_options[self::CB_POST_EXTRACT])) {
+            // Look for post-extract callback
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the header.
+//            eval('$v_result = '.$p_options[self::CB_POST_EXTRACT].'(self::CB_POST_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_POST_EXTRACT](self::CB_POST_EXTRACT, $v_local_header);
+            // Look for abort result
+            if ($v_result == 2) {
+                $v_result = self::ERR_USER_ABORTED;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFileUsingTempFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privExtractFileUsingTempFile(&$p_entry, &$p_options)
+    {
+        $v_result = 1;
+        // Creates a temporary file
+        $v_gzip_temp_name = self::TEMPORARY_DIR.uniqid('pclzip-').'.gz';
+        if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) {
+            fclose($v_file);
+            $this->privErrorLog(
+                self::ERR_WRITE_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'
+            );
+            return self::errorCode();
+        }
+        // Write gz file format header
+        $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
+        @fwrite($v_dest_file, $v_binary_data, 10);
+        // Read the file by self::READ_BLOCK_SIZE octets blocks
+        $v_size = $p_entry['compressed_size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($this->zip_fd, $v_read_size);
+            //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+            @fwrite($v_dest_file, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Write gz file format footer
+        $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']);
+        @fwrite($v_dest_file, $v_binary_data, 8);
+        // Close the temporary file
+        @fclose($v_dest_file);
+        // Opening destination file
+        if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+            $p_entry['status'] = "write_error";
+            return $v_result;
+        }
+        // Open the temporary gz file
+        if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) {
+            @fclose($v_dest_file);
+            $p_entry['status'] = "read_error";
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'
+            );
+            return self::errorCode();
+        }
+        // Read the file by self::READ_BLOCK_SIZE octets blocks
+        $v_size = $p_entry['size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @gzread($v_src_file, $v_read_size);
+//            $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+            @fwrite($v_dest_file, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        @fclose($v_dest_file);
+        @gzclose($v_src_file);
+        // Delete the temporary file
+        @unlink($v_gzip_temp_name);
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFileInOutput()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privExtractFileInOutput(&$p_entry, &$p_options)
+    {
+        $v_result=1;
+        // Read the file header
+        if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+            return $v_result;
+        }
+        // Check that the file header is coherent with $p_entry info
+        if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+            // TBC
+        }
+        // Look for pre-extract callback
+        if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the
+            // header.
+//            eval('$v_result = '.$p_options[self::CB_PRE_EXTRACT].'(self::CB_PRE_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_PRE_EXTRACT](self::CB_PRE_EXTRACT, $v_local_header);
+            if ($v_result == 0) {
+                // Change the file status
+                $p_entry['status'] = "skipped";
+                $v_result = 1;
+            }
+            // Look for abort result
+            if ($v_result == 2) {
+                // This status is internal and will be changed in 'skipped'
+                $p_entry['status'] = "aborted";
+                $v_result = self::ERR_USER_ABORTED;
+            }
+            // Update the informations
+            // Only some fields can be modified
+            $p_entry['filename'] = $v_local_header['filename'];
+        }
+        // Trace
+        // Look if extraction should be done
+        if ($p_entry['status'] == 'ok') {
+            // Do the extraction (if not a folder)
+            if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+                // Look for not compressed file
+                if ($p_entry['compressed_size'] == $p_entry['size']) {
+                    // Read the file in a buffer (one shot)
+                    $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+                    // Send the file to the output
+                    echo $v_buffer;
+                    unset($v_buffer);
+                } else {
+                    // Read the compressed file in a buffer (one shot)
+                    $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+                    // Decompress the file
+                    $v_file_content = gzinflate($v_buffer);
+                    unset($v_buffer);
+                    // Send the file to the output
+                    echo $v_file_content;
+                    unset($v_file_content);
+                }
+            }
+        }
+        // Change abort status
+        if ($p_entry['status'] == "aborted") {
+            $p_entry['status'] = "skipped";
+        } elseif (isset($p_options[self::CB_POST_EXTRACT])) {
+            // Look for post-extract callback
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the
+            // header.
+//            eval('$v_result = '.$p_options[self::CB_POST_EXTRACT].'(self::CB_POST_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_POST_EXTRACT](self::CB_POST_EXTRACT, $v_local_header);
+            // Look for abort result
+            if ($v_result == 2) {
+                $v_result = self::ERR_USER_ABORTED;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFileAsString()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privExtractFileAsString(&$p_entry, &$p_string, &$p_options)
+    {
+        $v_result = 1;
+        // Read the file header
+        $v_header = array();
+        if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+            return $v_result;
+        }
+        // Check that the file header is coherent with $p_entry info
+        if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+            // TBC
+        }
+        // Look for pre-extract callback
+        if (isset($p_options[self::CB_PRE_EXTRACT])) {
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the header.
+//            eval('$v_result = '.$p_options[self::CB_PRE_EXTRACT].'(self::CB_PRE_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_PRE_EXTRACT](self::CB_PRE_EXTRACT, $v_local_header);
+            if ($v_result == 0) {
+                // Change the file status
+                $p_entry['status'] = 'skipped';
+                $v_result = 1;
+            }
+            // Look for abort result
+            if ($v_result == 2) {
+                // This status is internal and will be changed in 'skipped'
+                $p_entry['status'] = "aborted";
+                $v_result = self::ERR_USER_ABORTED;
+            }
+            // Update the informations
+            // Only some fields can be modified
+            $p_entry['filename'] = $v_local_header['filename'];
+        }
+        // Look if extraction should be done
+        if ($p_entry['status'] == 'ok') {
+            // Do the extraction (if not a folder)
+            if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+                // Look for not compressed file
+//                if ($p_entry['compressed_size'] == $p_entry['size'])
+                if ($p_entry['compression'] == 0) {
+                    // Reading the file
+                    $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
+                } else {
+                    // Reading the file
+                    $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
+                    // Decompress the file
+                    if (($p_string = @gzinflate($v_data)) === false) {
+                        // TBC
+                    }
+                }
+                // Trace
+            }  else {
+                // TBC : error : can not extract a folder in a string
+            }
+        }
+        // Change abort status
+        if ($p_entry['status'] == 'aborted') {
+            $p_entry['status'] = 'skipped';
+        } elseif (isset($p_options[self::CB_POST_EXTRACT])) {
+            // Look for post-extract callback
+            // Generate a local information
+            $v_local_header = array();
+            $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+            // Swap the content to header
+            $v_local_header['content'] = $p_string;
+            $p_string = '';
+            // Call the callback
+            // Here I do not use call_user_func() because I need to send a reference to the
+            // header.
+//            eval('$v_result = '.$p_options[self::CB_POST_EXTRACT].'(self::CB_POST_EXTRACT, $v_local_header);');
+            $v_result = $p_options[self::CB_POST_EXTRACT](self::CB_POST_EXTRACT, $v_local_header);
+            // Swap back the content to header
+            $p_string = $v_local_header['content'];
+            unset($v_local_header['content']);
+            // Look for abort result
+            if ($v_result == 2) {
+                $v_result = self::ERR_USER_ABORTED;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privReadFileHeader(&$p_header)
+    {
+        $v_result = 1;
+        // Read the 4 bytes signature
+        $v_binary_data = @fread($this->zip_fd, 4);
+        $v_data = unpack('Vid', $v_binary_data);
+        // Check signature
+        if ($v_data['id'] != 0x04034b50) {
+            // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, 'Invalid archive structure');
+            return self::errorCode();
+        }
+        // Read the first 42 bytes of the header
+        $v_binary_data = fread($this->zip_fd, 26);
+        // Look for invalid block size
+        if (strlen($v_binary_data) != 26) {
+            $p_header['filename'] = "";
+            $p_header['status'] = "invalid_header";
+            // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, 'Invalid block size : '.strlen($v_binary_data));
+            return self::errorCode();
+        }
+        // Extract the values
+        $v_data = unpack(
+            'vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len',
+            $v_binary_data
+        );
+        // Get filename
+        $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
+        // Get extra_fields
+        if ($v_data['extra_len'] != 0) {
+            $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
+        } else {
+            $p_header['extra'] = '';
+        }
+        // Extract properties
+        $p_header['version_extracted'] = $v_data['version'];
+        $p_header['compression']       = $v_data['compression'];
+        $p_header['size']              = $v_data['size'];
+        $p_header['compressed_size']   = $v_data['compressed_size'];
+        $p_header['crc']               = $v_data['crc'];
+        $p_header['flag']              = $v_data['flag'];
+        $p_header['filename_len']      = $v_data['filename_len'];
+        // Recuperate date in UNIX format
+        $p_header['mdate']             = $v_data['mdate'];
+        $p_header['mtime']             = $v_data['mtime'];
+        if ($p_header['mdate'] && $p_header['mtime']) {
+            // Extract time
+            $v_hour    = ($p_header['mtime'] & 0xF800) >> 11;
+            $v_minute  = ($p_header['mtime'] & 0x07E0) >> 5;
+            $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+            // Extract date
+            $v_year    = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+            $v_month   =  ($p_header['mdate'] & 0x01E0) >> 5;
+            $v_day     =   $p_header['mdate'] & 0x001F;
+            // Get UNIX date format
+            $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+        } else {
+            $p_header['mtime'] = time();
+        }
+        // TBC
+        //for(reset($v_data); $key = key($v_data); next($v_data)) {
+        //}
+        // Set the stored filename
+        $p_header['stored_filename'] = $p_header['filename'];
+        // Set the status field
+        $p_header['status'] = "ok";
+        // Return
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadCentralFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privReadCentralFileHeader(&$p_header)
+    {
+        $v_result = 1;
+        // Read the 4 bytes signature
+        $v_binary_data = @fread($this->zip_fd, 4);
+        $v_data = unpack('Vid', $v_binary_data);
+        // Check signature
+        if ($v_data['id'] != 0x02014b50) {
+            // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, 'Invalid archive structure');
+            // Return
+            return self::errorCode();
+        }
+        // Read the first 42 bytes of the header
+        $v_binary_data = fread($this->zip_fd, 42);
+        // Look for invalid block size
+        if (strlen($v_binary_data) != 42) {
+            $p_header['filename'] = "";
+            $p_header['status'] = "invalid_header";
+            // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, 'Invalid block size : '.strlen($v_binary_data));
+            return self::errorCode();
+        }
+        // Extract the values
+        $p_header = unpack(
+            'vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/'.
+            'vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset',
+            $v_binary_data
+        );
+        // Get filename
+        if ($p_header['filename_len'] != 0) {
+            $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
+        } else {
+            $p_header['filename'] = '';
+        }
+        // Get extra
+        if ($p_header['extra_len'] != 0) {
+            $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
+        } else {
+            $p_header['extra'] = '';
+        }
+        // Get comment
+        if ($p_header['comment_len'] != 0) {
+            $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
+        } else {
+            $p_header['comment'] = '';
+        }
+        // Extract properties
+        // Recuperate date in UNIX format
+        //if ($p_header['mdate'] && $p_header['mtime'])
+        // TBC : bug : this was ignoring time with 0/0/0
+        if (1) {
+            // Extract time
+            $v_hour    = ($p_header['mtime'] & 0xF800) >> 11;
+            $v_minute  = ($p_header['mtime'] & 0x07E0) >> 5;
+            $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+            // Extract date
+            $v_year  = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+            $v_month =  ($p_header['mdate'] & 0x01E0) >> 5;
+            $v_day   =   $p_header['mdate'] & 0x001F;
+            // Get UNIX date format
+            $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+        } else {
+            $p_header['mtime'] = time();
+        }
+        // Set the stored filename
+        $p_header['stored_filename'] = $p_header['filename'];
+        // Set default status to ok
+        $p_header['status'] = 'ok';
+        // Look if it is a directory
+        if (substr($p_header['filename'], -1) == '/') {
+            //$p_header['external'] = 0x41FF0010;
+            $p_header['external'] = 0x00000010;
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCheckFileHeaders()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //   1 on success,
+  //   0 on error;
+  // --------------------------------------------------------------------------------
+    protected function privCheckFileHeaders(&$p_local_header, &$p_central_header)
+    {
+        $v_result = 1;
+        // Check the static values
+        // TBC
+        if ($p_local_header['filename'] != $p_central_header['filename']) {
+        }
+        if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+        }
+        if ($p_local_header['flag'] != $p_central_header['flag']) {
+        }
+        if ($p_local_header['compression'] != $p_central_header['compression']) {
+        }
+        if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+        }
+        if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+        }
+        // Look for flag bit 3
+        if (($p_local_header['flag'] & 8) == 8) {
+            $p_local_header['size'] = $p_central_header['size'];
+            $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+            $p_local_header['crc'] = $p_central_header['crc'];
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadEndCentralDir()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    public function privReadEndCentralDir(&$p_central_dir)
+    {
+        $v_result = 1;
+        // Go to the end of the zip file
+        $v_size = filesize($this->zipname);
+        @fseek($this->zip_fd, $v_size);
+        if (@ftell($this->zip_fd) != $v_size) {
+            // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
+            return self::errorCode();
+        }
+        // First try : look if this is an archive with no commentaries (most of the time)
+        // in this case the end of central dir is at 22 bytes of the file end
+        $v_found = 0;
+        if ($v_size > 26) {
+            @fseek($this->zip_fd, $v_size-22);
+            if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) {
+              // Error log
+              $this->privErrorLog(self::ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+              return self::errorCode();
+            }
+            // Read for bytes
+            $v_binary_data = @fread($this->zip_fd, 4);
+            $v_data = @unpack('Vid', $v_binary_data);
+            // Check signature
+            if ($v_data['id'] == 0x06054b50) {
+                $v_found = 1;
+            }
+            $v_pos = ftell($this->zip_fd);
+        }
+        // Go back to the maximum possible size of the Central Dir End Record
+        if (!$v_found) {
+            $v_maximum_size = 65557; // 0xFFFF + 22;
+            if ($v_maximum_size > $v_size) {
+                $v_maximum_size = $v_size;
+            }
+            @fseek($this->zip_fd, $v_size-$v_maximum_size);
+            if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) {
+                // Error log
+                $this->privErrorLog(self::ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+                return self::errorCode();
+            }
+            // Read byte per byte in order to find the signature
+            $v_pos = ftell($this->zip_fd);
+            $v_bytes = 0x00000000;
+            while ($v_pos < $v_size) {
+                // Read a byte
+                $v_byte = @fread($this->zip_fd, 1);
+                //  Add the byte
+                //$v_bytes = ($v_bytes << 8) | Ord($v_byte);
+                // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number
+                // Otherwise on systems where we have 64bit integers the check below for the magic number will fail.
+                $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte);
+                // Compare the bytes
+                if ($v_bytes == 0x504b0506) {
+                    $v_pos++;
+                    break;
+                }
+                $v_pos++;
+            }
+            // Look if not found end of central dir
+            if ($v_pos == $v_size) {
+                // Error log
+                $this->privErrorLog(self::ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
+                return self::errorCode();
+            }
+        }
+        // Read the first 18 bytes of the header
+        $v_binary_data = fread($this->zip_fd, 18);
+        // Look for invalid block size
+        if (strlen($v_binary_data) != 18) {
+          // Error log
+            $this->privErrorLog(self::ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+            return self::errorCode();
+        }
+        // Extract the values
+        $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+        // Check the global size
+        if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+            // Removed in release 2.2 see readme file
+            // The check of the file size is a little too strict.
+            // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+            // While decrypted, zip has training 0 bytes
+            if (0) {
+                // Error log
+                $this->privErrorLog(
+                    self::ERR_BAD_FORMAT,
+                    'The central dir is not at the end of the archive. Some trailing bytes exists after the archive.'
+                );
+                return self::errorCode();
+            }
+        }
+        // Get comment
+        if ($v_data['comment_size'] != 0) {
+            $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
+        } else {
+            $p_central_dir['comment'] = '';
+        }
+        $p_central_dir['entries']      = $v_data['entries'];
+        $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+        $p_central_dir['offset']       = $v_data['offset'];
+        $p_central_dir['size']         = $v_data['size'];
+        $p_central_dir['disk']         = $v_data['disk'];
+        $p_central_dir['disk_start']   = $v_data['disk_start'];
+        // TBC
+        //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+        //}
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDeleteByRule()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privDeleteByRule(&$p_result_list, &$p_options)
+    {
+        $v_result = 1;
+        $v_list_detail = array();
+        // Open the zip file
+        if (($v_result=$this->privOpenFd('rb')) != 1) {
+            return $v_result;
+        }
+        // Read the central directory informations
+        $v_central_dir = array();
+        if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+            $this->privCloseFd();
+            return $v_result;
+        }
+        // Go to beginning of File
+        @rewind($this->zip_fd);
+        // Scan all the files
+        // Start at beginning of Central Dir
+        $v_pos_entry = $v_central_dir['offset'];
+        @rewind($this->zip_fd);
+        if (@fseek($this->zip_fd, $v_pos_entry)) {
+            // Close the zip file
+            $this->privCloseFd();
+            // Error log
+            $this->privErrorLog(self::ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+            return self::errorCode();
+        }
+        // Read each entry
+        $v_header_list = array();
+        $j_start = 0;
+        for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) {
+            // Read the file header
+            $v_header_list[$v_nb_extracted] = array();
+            if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) {
+                // Close the zip file
+                $this->privCloseFd();
+                return $v_result;
+            }
+            // Store the index
+            $v_header_list[$v_nb_extracted]['index'] = $i;
+            // Look for the specific extract rules
+            $v_found = false;
+            // Look for extract by name rule
+            if ((isset($p_options[self::OPT_BY_NAME])) && ($p_options[self::OPT_BY_NAME] != 0)) {
+                // Look if the filename is in the list
+                for ($j=0; ($j<sizeof($p_options[self::OPT_BY_NAME])) && (!$v_found); $j++) {
+                    // Look for a directory
+                    if (substr($p_options[self::OPT_BY_NAME][$j], -1) == "/") {
+                        // Look if the directory is in the filename path
+                        if (
+                            (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[self::OPT_BY_NAME][$j])) &&
+                            (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[self::OPT_BY_NAME][$j]))
+                                == $p_options[self::OPT_BY_NAME][$j])
+                        ) {
+                            $v_found = true;
+                        } elseif (
+                            (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) && /* Indicates a folder */
+                            ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[self::OPT_BY_NAME][$j])
+                        ) {
+                            $v_found = true;
+                        }
+                    } elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[self::OPT_BY_NAME][$j]) {
+                        // Look for a filename
+                        $v_found = true;
+                    }
+                }
+            } else if (   (isset($p_options[self::OPT_BY_PREG]))
+                     && ($p_options[self::OPT_BY_PREG] != "")) {
+            // Look for extract by ereg rule
+            // ereg() is deprecated with PHP 5.3
+            /*
+            else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
+                     && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+                if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+                    $v_found = true;
+                }
+            }
+            */
+                // Look for extract by preg rule
+                if (preg_match($p_options[self::OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+                    $v_found = true;
+                }
+            } else if ((isset($p_options[self::OPT_BY_INDEX])) && ($p_options[self::OPT_BY_INDEX] != 0)) {
+                // Look for extract by index rule
+                // Look if the index is in the list
+                for ($j=$j_start; ($j<sizeof($p_options[self::OPT_BY_INDEX])) && (!$v_found); $j++) {
+                    if (($i>=$p_options[self::OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[self::OPT_BY_INDEX][$j]['end'])) {
+                        $v_found = true;
+                    }
+                    if ($i>=$p_options[self::OPT_BY_INDEX][$j]['end']) {
+                        $j_start = $j+1;
+                    }
+                    if ($p_options[self::OPT_BY_INDEX][$j]['start']>$i) {
+                        break;
+                    }
+                }
+            } else {
+                $v_found = true;
+            }
+            // Look for deletion
+            if ($v_found) {
+                unset($v_header_list[$v_nb_extracted]);
+            } else {
+                $v_nb_extracted++;
+            }
+        }
+        // Look if something need to be deleted
+        if ($v_nb_extracted > 0) {
+            // Creates a temporay file
+            $v_zip_temp_name = self::TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+            // Creates a temporary zip archive
+            $sClass = __CLASS__;
+            $v_temp_zip = new $sClass($v_zip_temp_name);
+            // Open the temporary zip file in write mode
+            if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
+                $this->privCloseFd();
+                return $v_result;
+            }
+            // Look which file need to be kept
+            for ($i=0; $i<sizeof($v_header_list); $i++) {
+                // Calculate the position of the header
+                @rewind($this->zip_fd);
+                if (@fseek($this->zip_fd,  $v_header_list[$i]['offset'])) {
+                    // Close the zip file
+                    $this->privCloseFd();
+                    $v_temp_zip->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    // Error log
+                    $this->privErrorLog(self::ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+                    return self::errorCode();
+                }
+                // Read the file header
+                $v_local_header = array();
+                if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
+                    // Close the zip file
+                    $this->privCloseFd();
+                    $v_temp_zip->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    return $v_result;
+                }
+                // Check that local file header is same as central file header
+                if ($this->privCheckFileHeaders($v_local_header, $v_header_list[$i]) != 1) {
+                    // TBC
+                }
+                unset($v_local_header);
+                // Write the file header
+                if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
+                    // Close the zip file
+                    $this->privCloseFd();
+                    $v_temp_zip->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    return $v_result;
+                }
+                // Read/write the data block
+                if (($v_result = self::UtilCopyBlock(
+                    $this->zip_fd,
+                    $v_temp_zip->zip_fd,
+                    $v_header_list[$i]['compressed_size'])) != 1
+                ) {
+                    // Close the zip file
+                    $this->privCloseFd();
+                    $v_temp_zip->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    return $v_result;
+                }
+            }
+            // Store the offset of the central dir
+            $v_offset = @ftell($v_temp_zip->zip_fd);
+            // Re-Create the Central Dir files header
+            for ($i=0; $i<sizeof($v_header_list); $i++) {
+                // Create the file header
+                if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+                    $v_temp_zip->privCloseFd();
+                    $this->privCloseFd();
+                    @unlink($v_zip_temp_name);
+                    return $v_result;
+                }
+                // Transform the header to a 'usable' info
+                $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+            }
+            // Zip file comment
+            $v_comment = '';
+            if (isset($p_options[self::OPT_COMMENT])) {
+                $v_comment = $p_options[self::OPT_COMMENT];
+            }
+            // Calculate the size of the central header
+            $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
+            // Create the central dir footer
+            if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+                // Reset the file list
+                unset($v_header_list);
+                $v_temp_zip->privCloseFd();
+                $this->privCloseFd();
+                @unlink($v_zip_temp_name);
+                return $v_result;
+            }
+            // Close
+            $v_temp_zip->privCloseFd();
+            $this->privCloseFd();
+            // Delete the zip file
+            // TBC : I should test the result ...
+            @unlink($this->zipname);
+            // Rename the temporary file
+            // TBC : I should test the result ...
+            //@rename($v_zip_temp_name, $this->zipname);
+            self::UtilRename($v_zip_temp_name, $this->zipname);
+            // Destroy the temporary archive
+            unset($v_temp_zip);
+        } else if ($v_central_dir['entries'] != 0) {
+            // Remove every files : reset the file
+            $this->privCloseFd();
+            if (($v_result = $this->privOpenFd('wb')) != 1) {
+                return $v_result;
+            }
+            if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
+                return $v_result;
+            }
+            $this->privCloseFd();
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDirCheck()
+  // Description :
+  //   Check if a directory exists, if not it creates it and all the parents directory
+  //   which may be useful.
+  // Parameters :
+  //   $p_dir : Directory path to check.
+  // Return Values :
+  //    1 : OK
+  //   -1 : Unable to create directory
+  // --------------------------------------------------------------------------------
+    protected function privDirCheck($p_dir, $p_is_dir=false)
+    {
+        $v_result = 1;
+        // Remove the final '/'
+        if (($p_is_dir) && (substr($p_dir, -1)=='/')) {
+            $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+        }
+        // Check the directory availability
+        if ((is_dir($p_dir)) || ($p_dir == '')) {
+            return 1;
+        }
+        // Extract parent directory
+        $p_parent_dir = dirname($p_dir);
+        // Just a check
+        if ($p_parent_dir != $p_dir) {
+            // Look for parent directory
+            if ($p_parent_dir != '') {
+                if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) {
+                    return $v_result;
+                }
+            }
+        }
+        // Create the directory
+        if (!@mkdir($p_dir, 0777)) {
+            // Error log
+            $this->privErrorLog(self::ERR_DIR_CREATE_FAIL, 'Unable to create directory \''.$p_dir.'\'');
+            return self::errorCode();
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privMerge()
+  // Description :
+  //   If $p_archive_to_add does not exist, the function exit with a success result.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privMerge(&$p_archive_to_add)
+    {
+        $v_result = 1;
+        // Look if the archive_to_add exists
+        if (!is_file($p_archive_to_add->zipname)) {
+            // Nothing to merge, so merge is a success
+            $v_result = 1;
+            return $v_result;
+        }
+        // Look if the archive exists
+        if (!is_file($this->zipname)) {
+            // Do a duplicate
+            $v_result = $this->privDuplicate($p_archive_to_add->zipname);
+            return $v_result;
+        }
+        // Open the zip file
+        if (($v_result=$this->privOpenFd('rb')) != 1) {
+            return $v_result;
+        }
+        // Read the central directory informations
+        $v_central_dir = array();
+        if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) {
+            $this->privCloseFd();
+            return $v_result;
+        }
+        // Go to beginning of File
+        @rewind($this->zip_fd);
+        // Open the archive_to_add file
+        if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) {
+            $this->privCloseFd();
+            return $v_result;
+        }
+        // Read the central directory informations
+        $v_central_dir_to_add = array();
+        if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) {
+            $this->privCloseFd();
+            $p_archive_to_add->privCloseFd();
+            return $v_result;
+        }
+        // Go to beginning of File
+        @rewind($p_archive_to_add->zip_fd);
+        // Creates a temporay file
+        $v_zip_temp_name = self::TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+        // Open the temporary file in write mode
+        if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) {
+            $this->privCloseFd();
+            $p_archive_to_add->privCloseFd();
+            $this->privErrorLog(
+                self::ERR_READ_OPEN_FAIL,
+                'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'
+            );
+            return self::errorCode();
+        }
+        // Copy the files from the archive to the temporary file
+        // TBC : Here I should better append the file and go back to erase the central dir
+        $v_size = $v_central_dir['offset'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = fread($this->zip_fd, $v_read_size);
+            @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Copy the files from the archive_to_add into the temporary file
+        $v_size = $v_central_dir_to_add['offset'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
+            @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Store the offset of the central dir
+        $v_offset = @ftell($v_zip_temp_fd);
+        // Copy the block of file headers from the old archive
+        $v_size = $v_central_dir['size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($this->zip_fd, $v_read_size);
+            @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Copy the block of file headers from the archive_to_add
+        $v_size = $v_central_dir_to_add['size'];
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
+            @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Merge the file comments
+        $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+        // Calculate the size of the (new) central header
+        $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+        // Swap the file descriptor
+        // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+        // the following methods on the temporary fil and not the real archive fd
+        $v_swap = $this->zip_fd;
+        $this->zip_fd = $v_zip_temp_fd;
+        $v_zip_temp_fd = $v_swap;
+        // Create the central dir footer
+        if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) {
+            $this->privCloseFd();
+            $p_archive_to_add->privCloseFd();
+            @fclose($v_zip_temp_fd);
+            $this->zip_fd = null;
+            // Reset the file list
+            unset($v_header_list);
+            return $v_result;
+        }
+        // Swap back the file descriptor
+        $v_swap = $this->zip_fd;
+        $this->zip_fd = $v_zip_temp_fd;
+        $v_zip_temp_fd = $v_swap;
+        // Close
+        $this->privCloseFd();
+        $p_archive_to_add->privCloseFd();
+        // Close the temporary file
+        @fclose($v_zip_temp_fd);
+        // Delete the zip file
+        // TBC : I should test the result ...
+        @unlink($this->zipname);
+        // Rename the temporary file
+        // TBC : I should test the result ...
+        //@rename($v_zip_temp_name, $this->zipname);
+        self::UtilRename($v_zip_temp_name, $this->zipname);
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDuplicate()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privDuplicate($p_archive_filename)
+    {
+        $v_result = 1;
+        // Look if the $p_archive_filename exists
+        if (!is_file($p_archive_filename)) {
+            // Nothing to duplicate, so duplicate is a success.
+            $v_result = 1;
+            return $v_result;
+        }
+        // Open the zip file
+        if (($v_result=$this->privOpenFd('wb')) != 1) {
+            return $v_result;
+        }
+        // Open the temporary file in write mode
+        if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) {
+            $this->privCloseFd();
+            $this->privErrorLog(self::ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+            return self::errorCode();
+        }
+        // Copy the files from the archive to the temporary file
+        // TBC : Here I should better append the file and go back to erase the central dir
+        $v_size = filesize($p_archive_filename);
+        while ($v_size != 0) {
+            $v_read_size = ($v_size < self::READ_BLOCK_SIZE ? $v_size : self::READ_BLOCK_SIZE);
+            $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+            @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+            $v_size -= $v_read_size;
+        }
+        // Close
+        $this->privCloseFd();
+        // Close the temporary file
+        @fclose($v_zip_temp_fd);
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privErrorLog()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    protected function privErrorLog($p_error_code=0, $p_error_string='')
+    {
+        if (self::ERROR_EXTERNAL == 1) {
+            PclError($p_error_code, $p_error_string);
+        } else {
+            $this->error_code = $p_error_code;
+            $this->error_string = $p_error_string;
+        }
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privErrorReset()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+    protected function privErrorReset()
+    {
+        if (self::ERROR_EXTERNAL == 1) {
+            PclErrorReset();
+        } else {
+            $this->error_code = 0;
+            $this->error_string = '';
+        }
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDisableMagicQuotes()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privDisableMagicQuotes()
+    {
+        $v_result = 1;
+        // Look if function exists
+        if ((!function_exists('get_magic_quotes_runtime')) || (!function_exists('set_magic_quotes_runtime'))) {
+            return $v_result;
+        }
+        // Look if already done
+        if ($this->magic_quotes_status != -1) {
+            return $v_result;
+        }
+        // Get and memorize the magic_quote value
+        $this->magic_quotes_status = @get_magic_quotes_runtime();
+        // Disable magic_quotes
+        if ($this->magic_quotes_status == 1) {
+            @set_magic_quotes_runtime(0);
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privSwapBackMagicQuotes()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    protected function privSwapBackMagicQuotes()
+    {
+        $v_result = 1;
+        // Look if function exists
+        if ((!function_exists('get_magic_quotes_runtime')) || (!function_exists('set_magic_quotes_runtime'))) {
+            return $v_result;
+        }
+        // Look if something to do
+        if ($this->magic_quotes_status != -1) {
+            return $v_result;
+        }
+        // Swap back magic_quotes
+        if ($this->magic_quotes_status == 1) {
+            @set_magic_quotes_runtime($this->magic_quotes_status);
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+/**
+ * get all
+ * @staticvar null $aFullList
+ * @return array
+ */
+    protected static function getClassConstants()
+    {
+        static $aFullList = null; // list caching
+        if ($aFullList === null) {
+            // load cache
+            $reflect = new ReflectionClass(__CLASS__);
+            // read list of constants and remove unneeded from list
+            $aFullList = array_diff_key(
+                $reflect->getConstants(),
+                array_flip(
+                    array(
+                        'READ_BLOCK_SIZE','SEPARATOR','ERROR_EXTERNAL',
+                        'TEMPORARY_DIR', 'TEMPORARY_FILE_RATIO'
+                    )
+                )
+            );
+        }
+        return $aFullList;
+    }
+
+  // --------------------------------------------------------------------------------
+  // Function : UtilPathReduction()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    public static function UtilPathReduction($p_dir)
+    {
+        $v_result = '';
+        // Look for not empty path
+        if ($p_dir != "") {
+            // Explode path by directory names
+            $v_list = explode("/", $p_dir);
+            // Study directories from last to first
+            $v_skip = 0;
+            for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+                // Look for current path
+                if ($v_list[$i] == ".") {
+                  // Ignore this directory
+                  // Should be the first $i=0, but no check is done
+                } else if ($v_list[$i] == "..") {
+                    $v_skip++;
+                } else if ($v_list[$i] == "") {
+                // First '/' i.e. root slash
+                    if ($i == 0) {
+                        $v_result = "/".$v_result;
+                        if ($v_skip > 0) {
+                            // It is an invalid path, so the path is not modified
+                            // TBC
+                            $v_result = $p_dir;
+                            $v_skip = 0;
+                        }
+                    } else if ($i == (sizeof($v_list)-1)) {
+                        // Last '/' i.e. indicates a directory
+                        $v_result = $v_list[$i];
+                    } else {
+                        // Double '/' inside the path
+                        // Ignore only the double '//' in path,
+                        // but not the first and last '/'
+                    }
+                } else {
+                    // Look for item to skip
+                    if ($v_skip > 0) {
+                        $v_skip--;
+                    } else {
+                        $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
+                    }
+                }
+            }
+            // Look for skip
+            if ($v_skip > 0) {
+                while ($v_skip > 0) {
+                    $v_result = '../'.$v_result;
+                    $v_skip--;
+                }
+            }
+        }
+        // Return
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : self::UtilPathInclusion()
+  // Description :
+  //   This function indicates if the path $p_path is under the $p_dir tree. Or,
+  //   said in an other way, if the file or sub-dir $p_path is inside the dir
+  //   $p_dir.
+  //   The function indicates also if the path is exactly the same as the dir.
+  //   This function supports path with duplicated '/' like '//', but does not
+  //   support '.' or '..' statements.
+  // Parameters :
+  // Return Values :
+  //   0 if $p_path is not inside directory $p_dir
+  //   1 if $p_path is inside directory $p_dir
+  //   2 if $p_path is exactly the same as $p_dir
+  // --------------------------------------------------------------------------------
+    public static function UtilPathInclusion($p_dir, $p_path)
+    {
+        $v_result = 1;
+        // Look for path beginning by ./
+        if (($p_dir == '.') || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
+            $p_dir = self::UtilTranslateWinPath(getcwd(), false).'/'.substr($p_dir, 1);
+        }
+        if (($p_path == '.') || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
+            $p_path = self::UtilTranslateWinPath(getcwd(), false).'/'.substr($p_path, 1);
+        }
+        // Explode dir and path by directory separator
+        $v_list_dir       = explode("/", $p_dir);
+        $v_list_dir_size  = sizeof($v_list_dir);
+        $v_list_path      = explode("/", $p_path);
+        $v_list_path_size = sizeof($v_list_path);
+        // Study directories paths
+        $i = 0;
+        $j = 0;
+        while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
+            // Look for empty dir (path reduction)
+            if ($v_list_dir[$i] == '') {
+                $i++;
+                continue;
+            }
+            if ($v_list_path[$j] == '') {
+                $j++;
+                continue;
+            }
+            // Compare the items
+            if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
+                $v_result = 0;
+            }
+            // Next items
+            $i++;
+            $j++;
+        }
+        // Look if everything seems to be the same
+        if ($v_result) {
+            // Skip all the empty items
+            while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) { $j++; }
+            while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) { $i++; }
+            if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
+                // There are exactly the same
+                $v_result = 2;
+            } else if ($i < $v_list_dir_size) {
+                // The path is shorter than the dir
+                $v_result = 0;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : self::UtilCopyBlock()
+  // Description :
+  // Parameters :
+  //   $p_mode : read/write compression mode
+  //             0 : src & dest normal
+  //             1 : src gzip, dest normal
+  //             2 : src normal, dest gzip
+  //             3 : src & dest gzip
+  // Return Values :
+  // --------------------------------------------------------------------------------
+    public static function UtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+    {
+        $v_result = 1;
+        if ($p_mode==0) {
+            while ($p_size != 0) {
+                $v_read_size = ($p_size < self::READ_BLOCK_SIZE ? $p_size : self::READ_BLOCK_SIZE);
+                $v_buffer = @fread($p_src, $v_read_size);
+                @fwrite($p_dest, $v_buffer, $v_read_size);
+                $p_size -= $v_read_size;
+            }
+        } else if ($p_mode==1) {
+            while ($p_size != 0) {
+                $v_read_size = ($p_size < self::READ_BLOCK_SIZE ? $p_size : self::READ_BLOCK_SIZE);
+                $v_buffer = @gzread($p_src, $v_read_size);
+                @fwrite($p_dest, $v_buffer, $v_read_size);
+                $p_size -= $v_read_size;
+            }
+        } else if ($p_mode==2) {
+            while ($p_size != 0) {
+                $v_read_size = ($p_size < self::READ_BLOCK_SIZE ? $p_size : self::READ_BLOCK_SIZE);
+                $v_buffer = @fread($p_src, $v_read_size);
+                @gzwrite($p_dest, $v_buffer, $v_read_size);
+                $p_size -= $v_read_size;
+            }
+        } else if ($p_mode==3) {
+            while ($p_size != 0) {
+                $v_read_size = ($p_size < self::READ_BLOCK_SIZE ? $p_size : self::READ_BLOCK_SIZE);
+                $v_buffer = @gzread($p_src, $v_read_size);
+                @gzwrite($p_dest, $v_buffer, $v_read_size);
+                $p_size -= $v_read_size;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : self::UtilRename()
+  // Description :
+  //   This function tries to do a simple rename() function. If it fails, it
+  //   tries to copy the $p_src file in a new $p_dest file and then unlink the
+  //   first one.
+  // Parameters :
+  //   $p_src : Old filename
+  //   $p_dest : New filename
+  // Return Values :
+  //   1 on success, 0 on failure.
+  // --------------------------------------------------------------------------------
+    public static function UtilRename($p_src, $p_dest)
+    {
+        $v_result = 1;
+        // Try to rename the files
+        if (!@rename($p_src, $p_dest)) {
+            // Try to copy & unlink the src
+            if (!@copy($p_src, $p_dest)) {
+                $v_result = 0;
+            } else if (!@unlink($p_src)) {
+                $v_result = 0;
+            }
+        }
+        return $v_result;
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : self::UtilOptionText()
+  // Description :
+  //   Translate option value in text. Mainly for debug purpose.
+  // Parameters :
+  //   $p_option : the option value.
+  // Return Values :
+  //   The option text value.
+  // --------------------------------------------------------------------------------
+    public static function UtilOptionText($p_option)
+    {
+        // search the const whitch is defined to $p_option
+        $aResult = array_filter(
+            self::getClassConstants(),
+            function ($val) use ($p_option) { return ($p_option == $val); }
+        );
+        return ($aResult ? key($aResult) : 'Unknown');
+    }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : self::UtilTranslateWinPath()
+  // Description :
+  //   Translate windows path by replacing '\' by '/' and optionally removing
+  //   drive letter.
+  // Parameters :
+  //   $p_path : path to translate.
+  //   $p_remove_disk_letter : true | false
+  // Return Values :
+  //   The path translated.
+  // --------------------------------------------------------------------------------
+    public static function UtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+    {
+        if (stristr(php_uname(), 'windows')) {
+            // Look for potential disk letter
+            if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
+                $p_path = substr($p_path, $v_position+1);
+            }
+            // Change potential windows directory separator
+            $p_path = str_replace('\\', '/', $p_path);
+//            if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+//                $p_path = strtr($p_path, '\\', '/');
+//            }
+        }
+        return $p_path;
+    }
+  // --------------------------------------------------------------------------------
+} // End of class
+  // --------------------------------------------------------------------------------
+// end of file

Property changes on: trunk/include/pclzip/pclzip.lib.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/pclzip/readme.txt
===================================================================
--- trunk/include/pclzip/readme.txt	(nonexistent)
+++ trunk/include/pclzip/readme.txt	(revision 2)
@@ -0,0 +1,421 @@
+// --------------------------------------------------------------------------------
+// PclZip 2.8.2 - readme.txt
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - August 2009
+// Vincent Blavet - vincent@phpconcept.net
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+// $Id: readme.txt 65 2017-03-03 21:38:16Z manu $
+// --------------------------------------------------------------------------------
+
+
+
+0 - Sommaire
+============
+    1 - Introduction
+    2 - What's new
+    3 - Corrected bugs
+    4 - Known bugs or limitations
+    5 - License
+    6 - Warning
+    7 - Documentation
+    8 - Author
+    9 - Contribute
+
+1 - Introduction
+================
+
+  PclZip is a library that allow you to manage a Zip archive.
+
+  Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip
+
+2 - What's new
+==============
+
+  Version 2.8.2 :
+    - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with 
+      extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
+      can also be modified in the post-extract call back.
+    **Bugs correction :
+    - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly    
+    - Remove use of eval() and do direct call to callback functions
+    - Correct support of 64bits systems (Thanks to WordPress team)
+
+  Version 2.8.1 :
+    - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
+      deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
+      automatically replace it by PCLZIP_OPT_BY_PREG.
+  
+  Version 2.8 :
+    - Improve extraction of zip archive for large files by using temporary files
+      This feature is working like the one defined in r2.7.
+      Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
+      PCLZIP_OPT_TEMP_FILE_THRESHOLD
+    - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
+      sense of temporary file use.
+    - Bug correction : Reduce filepath in returned file list to remove ennoying
+      './/' preambule in file path.
+
+  Version 2.7 :
+    - Improve creation of zip archive for large files :
+      PclZip will now autosense the configured memory and use temporary files
+      when large file is suspected.
+      This feature can also ne triggered by manual options in create() and add()
+      methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
+      'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic, 
+      'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
+      threshold to use temporary files.
+      Using "temporary files" rather than "memory" might take more time, but
+      might give the ability to zip very large files :
+      Tested on my win laptop with a 88Mo file :
+        Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
+        Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
+    - Replace use of mktime() by time() to limit the E_STRICT error messages.
+    - Bug correction : When adding files with full windows path (drive letter)
+      PclZip is now working. Before, if the drive letter is not the default
+      path, PclZip was not able to add the file.
+
+  Version 2.6 :
+    - Code optimisation
+    - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
+      add a comment for a specific file. (Don't really know if this is usefull)
+    - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string 
+      as a file.
+    - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with
+      a file.
+    - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted
+      with current time
+    - Add CRC value in the informations returned back for each file after an
+      action.
+    - Add missing closedir() statement.
+    - When adding a folder, and removing the path of this folder, files were
+      incorrectly added with a '/' at the beginning. Which means files are 
+      related to root in unix systems. Corrected.
+    - Add conditional if before constant definition. This will allow users
+      to redefine constants without changing the file, and then improve
+      upgrade of pclzip code for new versions.
+  
+  Version 2.5 :
+    - Introduce the ability to add file/folder with individual properties (file descriptor).
+      This gives for example the ability to change the filename of a zipped file.
+      . Able to add files individually
+      . Able to change full name
+      . Able to change short name
+      . Compatible with global options
+    - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME
+    - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE
+    - Add a security control feature. PclZip can extract any file in any folder
+      of a system. People may use this to upload a zip file and try to override
+      a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the
+      ability to forgive any directory transversal behavior.
+    - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path
+    - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION
+    - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend
+      by current path (getcwd())
+  
+  Version 2.4 :
+    - Code improvment : try to speed up the code by removing unusefull call to pack()
+    - Correct bug in delete() : delete() should be called with no argument. This was not
+      the case in 2.3. This is corrected in 2.4.
+    - Correct a bug in path_inclusion function. When the path has several '../../', the
+      result was bad.
+    - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will 
+      disable it while working and det it back to its original value.
+      This resolve a lots of bad formated archive errors.
+    - Bug correction : PclZip now correctly unzip file in some specific situation,
+      when compressed content has same size as uncompressed content.
+    - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH', 
+      directories are not any more created.
+    - Code improvment : correct unclosed opendir(), better handling of . and .. in
+      loops.
+
+
+  Version 2.3 :
+    - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not
+      give the same result in PHP4 and PHP5 ....
+
+  Version 2.2 :
+    - Try development of PCLZIP_OPT_CRYPT .....
+      However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers,
+      the result (greater than a long) is not supported by PHP. Even the use of bcmath
+      functions does not help. I did not find yet a solution ...;
+    - Add missing '/' at end of directory entries
+    - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or
+      error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION.
+    - Corrected : Bad "version need to extract" field in local file header
+    - Add private method privCheckFileHeaders() in order to check local and central
+      file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives
+      the ability to have a local file header without size, compressed size and crc filled.
+    - Add a generic status 'error' for file status
+    - Add control of compression type. PclZip only support deflate compression method.
+      Before v2.2, PclZip does not check the compression method used in an archive while
+      extracting. With v2.2 PclZip returns a new error status for a file using an unsupported
+      compression method. New status is "unsupported_compression". New error code is
+      PCLZIP_ERR_UNSUPPORTED_COMPRESSION.
+    - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files
+      when errors like 'a folder with same name exists' or 'a newer file exists' or
+      'a write protected file' exists, rather than set a status for the concerning file
+      and resume the extract of the zip.
+    - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the
+      replacement of the file, even if a  newer version of the file exists.
+      Note that today if a file with the same name already exists but is older it will be
+      replaced by the extracted one.
+    - Improve PclZipUtilOption()
+    - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central
+      directory structure is the last data in the archive. Crypt encryption/decryption of
+      zip archive put trailing 0 bytes after decryption. PclZip is now supporting this.
+
+  Version 2.1 :
+    - Add the ability to abort the extraction by using a user callback function.
+      The user can now return the value '2' in its callback which indicates to stop the
+      extraction. For a pre call-back extract is stopped before the extration of the current
+      file. For a post call back, the extraction is stopped after.
+    - Add the ability to extract a file (or several files) directly in the standard output.
+      This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract().
+    - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT,
+      PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments
+      in the zip archive.
+    - When merging two archives, the comments are not any more lost, but merged, with a 
+      blank space separator.
+    - Corrected bug : Files are not deleted when all files are asked to be deleted.
+    - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature.
+
+
+  Version 2.0 :
+    ***** Warning : Some new features may break the backward compatibility for your scripts.
+                    Please carefully read the readme file.
+    - Add the ability to delete by Index, name and regular expression. This feature is 
+      performed by the method delete(), which uses the optional parameters
+      PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG.
+    - Add the ability to extract by regular expression. To extract by regexp you must use the method
+      extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG 
+      (depending if you want to use ereg() or preg_match() syntax) followed by the 
+      regular expression pattern.
+    - Add the ability to extract by index, directly with the extract() method. This is a
+      code improvment of the extractByIndex() method.
+    - Add the ability to extract by name. To extract by name you must use the method
+      extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to
+      extract or an array of filenames to extract. To extract all a folder, use the folder
+      name rather than the filename with a '/' at the end.
+    - Add the ability to add files without compression. This is done with a new attribute
+      which is PCLZIP_OPT_NO_COMPRESSION.
+    - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly
+      in a string without using any file (or temporary file).
+    - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string.
+      The default separator is now a comma (,) and not any more a blank space.
+      THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with
+      your script.
+    - Improve algorythm performance by removing the use of temporary files when adding or 
+      extracting files in an archive.
+    - Add (correct) detection of empty filename zipping. This can occurs when the removed
+      path is the same
+      as a zipped dir. The dir is not zipped (['status'] = filtered), only its content.
+    - Add better support for windows paths (thanks for help from manus@manusfreedom.com).
+    - Corrected bug : When the archive file already exists with size=0, the add() method
+      fails. Corrected in 2.0.
+    - Remove the use of OS_WINDOWS constant. Use php_uname() function rather.
+    - Control the order of index ranges in extract by index feature.
+    - Change the internal management of folders (better handling of internal flag).
+
+
+  Version 1.3 :
+    - Removing the double include check. This is now done by include_once() and require_once()
+      PHP directives.
+    - Changing the error handling mecanism : Remove the use of an external error library.
+      The former PclError...() functions are replaced by internal equivalent methods.
+      By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library.
+      Introducing the use of constants for error codes rather than integer values. This will help
+      in futur improvment.
+      Introduction of error handling functions like errorCode(), errorName() and errorInfo().
+    - Remove the deprecated use of calling function with arguments passed by reference.
+    - Add the calling of extract(), extractByIndex(), create() and add() functions
+      with variable options rather than fixed arguments.
+    - Add the ability to remove all the file path while extracting or adding,
+      without any need to specify the path to remove.
+      This is available for extract(), extractByIndex(), create() and add() functionS by using
+      the new variable options parameters :
+      - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct.
+    - Ability to change the mode of a file after the extraction (chmod()).
+      This is available for extract() and extractByIndex() functionS by using
+      the new variable options parameters.
+      - PCLZIP_OPT_SET_CHMOD : by setting the value of this option.
+    - Ability to definition call-back options. These call-back will be called during the adding,
+      or the extracting of file (extract(), extractByIndex(), create() and add() functions) :
+      - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user
+        can trigerred the change the filename of the extracted file. The user can triggered the
+        skip of the extraction. This is adding a 'skipped' status in the file list result value.
+      - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file.
+        Nothing can be triggered from that point.
+      - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user
+        can trigerred the change the stored filename of the added file. The user can triggered the
+        skip of the add. This is adding a 'skipped' status in the file list result value.
+      - PCLZIP_CB_POST_ADD : will be called after each add of a file.
+        Nothing can be triggered from that point.
+    - Two status are added in the file list returned as function result : skipped & filename_too_long
+      'skipped' is used when a call-back function ask for skipping the file.
+      'filename_too_long' is used while adding a file with a too long filename to archive (the file is
+      not added)
+    - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into
+      a directory.
+    - Add a check of the presence of the archive file before some actions (like list, ...)
+    - Add the initialisation of field "index" in header array. This means that by
+      default index will be -1 when not explicitly set by the methods.
+
+  Version 1.2 :
+    - Adding a duplicate function.
+    - Adding a merge function. The merge function is a "quick merge" function,
+      it just append the content of an archive at the end of the first one. There
+      is no check for duplicate files or more recent files.
+    - Improve the search of the central directory end.
+
+  Version 1.1.2 :
+
+    - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license
+      (see License section).
+    - Adding the optional support of a static temporary directory. You will need to configure
+      the constant PCLZIP_TEMPORARY_DIR if you want to use this feature.
+    - Improving the rename() function. In some cases rename() does not work (different
+      Filesystems), so it will be replaced by a copy() + unlink() functions.
+
+  Version 1.1.1 :
+
+    - Maintenance release, no new feature.
+
+  Version 1.1 :
+
+    - New method Add() : adding files in the archive
+    - New method ExtractByIndex() : partial extract of the archive, files are identified by
+      their index in the archive
+    - New method DeleteByIndex() : delete some files/folder entries from the archive,
+      files are identified by their index in the archive.
+    - Adding a test of the zlib extension presence. If not present abort the script.
+
+  Version 1.0.1 :
+
+    - No new feature
+
+
+3 - Corrected bugs
+==================
+
+  Corrected in Version 2.0 :
+    - Corrected : During an extraction, if a call-back fucntion is used and try to skip
+                  a file, all the extraction process is stopped. 
+
+  Corrected in Version 1.3 :
+    - Corrected : Support of static synopsis for method extract() is broken.
+    - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF).
+    - Corrected : When an extract is done with a remove_path parameter, the entry for
+      the directory with exactly the same path is not skipped/filtered.
+    - Corrected : extractByIndex() and deleteByIndex() were not managing index in the
+      right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This
+      is due to a sort of the index resulting table that puts 11 before 3-5 (sort on
+      string and not interger). The sort is temporarilly removed, this means that
+      you must provide a sorted list of index ranges.
+
+  Corrected in Version 1.2 :
+
+    - Nothing.
+
+  Corrected in Version 1.1.2 :
+
+    - Corrected : Winzip is unable to delete or add new files in a PclZip created archives.
+
+  Corrected in Version 1.1.1 :
+
+    - Corrected : When archived file is not compressed (0% compression), the
+      extract method fails.
+
+  Corrected in Version 1.1 :
+
+    - Corrected : Adding a complete tree of folder may result in a bad archive
+      creation.
+
+  Corrected in Version 1.0.1 :
+
+    - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
+
+
+4 - Known bugs or limitations
+=============================
+
+  Please publish bugs reports in SourceForge :
+    http://sourceforge.net/tracker/?group_id=40254&atid=427564
+
+  In Version 2.x :
+    - PclZip does only support file uncompressed or compressed with deflate (compression method 8)
+    - PclZip does not support password protected zip archive
+    - Some concern were seen when changing mtime of a file while archiving. 
+      Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
+
+  In Version 1.2 :
+
+    - merge() methods does not check for duplicate files or last date of modifications.
+
+  In Version 1.1 :
+
+    - Limitation : Using 'extract' fields in the file header in the zip archive is not supported.
+    - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to
+      add a file in a PclZip created archive. (Corrected in v.1.2)
+
+  In Version 1.0.1 :
+
+    - Adding a complete tree of folder may result in a bad archive
+      creation. (Corrected in V.1.1).
+    - Path given to methods must be in the unix format (/) and not the Windows format (\).
+      Workaround : Use only / directory separators.
+    - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz
+      added suffix. Files with these names may already exist and may be overwritten.
+      Workaround : none.
+    - PclZip does not check if the zlib extension is present. If it is absent, the zip
+      file is not created and the lib abort without warning.
+      Workaround : enable the zlib extension on the php install
+
+  In Version 1.0 :
+
+    - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024).
+      (Corrected in v.1.0.1)
+    - Limitation : Multi-disk zip archive are not supported.
+
+
+5 - License
+===========
+
+  Since version 1.1.2, PclZip Library is released under GNU/LGPL license.
+  This library is free, so you can use it at no cost.
+
+  HOWEVER, if you release a script, an application, a library or any kind of
+  code using PclZip library (or a part of it), YOU MUST :
+  - Indicate in the documentation (or a readme file), that your work
+    uses PclZip Library, and make a reference to the author and the web site
+    http://www.phpconcept.net
+  - Gives the ability to the final user to update the PclZip libary.
+
+  I will also appreciate that you send me a mail (vincent@phpconcept.net), just to
+  be aware that someone is using PclZip.
+
+  For more information about GNU/LGPL license : http://www.gnu.org
+
+6 - Warning
+=================
+
+  This library and the associated files are non commercial, non professional work.
+  It should not have unexpected results. However if any damage is caused by this software
+  the author can not be responsible.
+  The use of this software is at the risk of the user.
+
+7 - Documentation
+=================
+  PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php
+  A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/
+
+8 - Author
+==========
+
+  This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time.
+
+9 - Contribute
+==============
+  If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net.
+  If you can help in financing PhpConcept hosting service, please go to
+  http://www.phpconcept.net/soutien.php
Index: trunk/include/phplib/index.php
===================================================================
--- trunk/include/phplib/index.php	(nonexistent)
+++ trunk/include/phplib/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/phplib/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phplib/template.inc
===================================================================
--- trunk/include/phplib/template.inc	(nonexistent)
+++ trunk/include/phplib/template.inc	(revision 2)
@@ -0,0 +1,1036 @@
+<?php
+
+// $Id$
+
+/*
+ * Session Management for PHP3
+ *
+ * (C) Copyright 1999-2000 NetUSE GmbH
+ *                    Kristian Koehntopp
+ *
+ * $Id$
+ *
+ */
+
+/*
+ * Change log since version 7.2c
+ *
+ * Bug fixes to version 7.2c compiled by Richard Archer <rha@juggernaut.com.au>:
+ * (credits given to first person to post a diff to phplib mailing list)
+ *
+ * Normalised all comments and whitespace (rha)
+ * replaced "$handle" with "$varname" and "$h" with "$v" throughout (from phplib-devel)
+ * added braces around all one-line if statements in: get_undefined, loadfile and halt (rha)
+ * set_var was missing two sets of braces (rha)
+ * added a couple of "return true" statements (rha)
+ * set_unknowns had "keep" as default instead of "remove" (from phplib-devel)
+ * set_file failed to check for empty strings if passed an array of filenames (phplib-devel)
+ * remove @ from call to preg_replace in subst -- report errors if there are any (NickM)
+ * set_block unnecessarily required a newline in the template file (Marc Tardif)
+ * pparse now calls this->finish to replace undefined vars (Layne Weathers)
+ * get_var now checks for unset varnames (NickM & rha)
+ * get_var when passed an array used the array key instead of the value (rha)
+ * get_vars now uses a call to get_var rather than this->varvals to prevent undefined var warning (rha)
+ * in finish, the replacement string referenced an unset variable (rha)
+ * loadfile would try to load a file if the varval had been set to "" (rha)
+ * in get_undefined, only match non-whitespace in variable tags as in finish (Layne Weathers & rha)
+ * more elegant fix to the problem of subst stripping '$n', '\n' and '\\' strings (rha)
+ * parse uses get_var to obtain return value (Jordi via SF)
+ * set_block reports an error if the block could not be extracted (rha)
+ * filename is now windows-pathname aware (krabu @ SF)
+ *
+ *
+ * Changes in functionality which go beyond bug fixes:
+ *
+ * added ability for filename comments to be output (from phplib-users layne)
+ * changed debug handling so set, get and internals can be tracked separately (rha)
+ * added debug statements throughout to track most function calls (rha)
+ * debug output contained raw HTML -- is now escaped with htmlentities (rha)
+ * Alter regex in set_block to remove more whitespace around BEGIN/END tags to improve HTML layout (rha)
+ * Add "append" option to set_var, works just like append in parse (dale at linuxwebpro.com, rha)
+ * Altered parse so that append is honored if passed an array (Brian)
+ * Converted comments and documentation to phpdoc style (rha)
+ * Added clear_var to set the value of variables to "" (rha)
+ * Added unset_var to usset variables (rha)
+ *
+ */
+
+/**
+ * The template class allows you to keep your HTML code in some external files
+ * which are completely free of PHP code, but contain replacement fields.
+ * The class provides you with functions which can fill in the replacement fields
+ * with arbitrary strings. These strings can become very large, e.g. entire tables.
+ *
+ * Note: If you think that this is like FastTemplates, read carefully. It isn't.
+ *
+ * Fixes
+ * Ticket #812 depricated Fix 2009/11/25
+ */
+
+class Template
+{
+ /**
+  * Serialization helper, the name of this class.
+  *
+ * @var       string
+ * @access    public
+  */
+  public $classname = "Template";
+
+ /**
+  * Determines how much debugging output Template will produce.
+  * This is a bitwise mask of available debug levels:
+  * 0 = no debugging
+  * 1 = debug variable assignments
+  * 2 = debug calls to get variable
+  * 4 = debug internals (outputs all function calls with parameters).
+  *
+  * Note: setting $this->debug = true will enable debugging of variable
+  * assignments only which is the same behaviour as versions up to release 7.2d.
+  *
+ * @var       int
+ * @access    public
+  */
+  public $debug    = false;
+
+ /**
+  * Determines whether Template outputs filename comments.
+  * false = no filename outputs
+  * true = HTML comments (e.g. <!-- START FILE $filename -->) placed in output
+  *
+ * @var       int
+ * @access    public
+  */
+  public $filename_comments = false;
+
+ /**
+  * Determines the regular expression used to find unknown variable tags.
+  * "loose"  = traditional match all curly braces with no whitespace between
+  * "strict" = adopts PHP's variable naming rules
+  *              ("loose" has a nasty habit of deleting JavaScript RegEx components)
+  *              (should future major version releases of PHPLib default this "strict"?)
+  *
+ * @var       string
+ * @access    public
+  */
+  public $unknown_regexp = "loose";
+
+ /**
+  * The base directory from which template files are loaded.
+  *
+ * @var       string
+ * @access    private
+ * @see       set_root
+  */
+  public $root     = ".";
+
+ /**
+  * A hash of strings forming a translation table which translates variable names
+  * into names of files containing the variable content.
+  * $file[varname] = "filename";
+  *
+ * @var       array
+ * @access    private
+ * @see       set_file
+  */
+  public $file     = array();
+
+ /**
+  * A hash of strings forming a translation table which translates variable names
+  * into regular expressions for themselves.
+  * $varkeys[varname] = "/varname/"
+  *
+ * @var       array
+ * @access    private
+ * @see       set_var
+  */
+  public $varkeys  = array();
+
+ /**
+  * A hash of strings forming a translation table which translates variable names
+  * into values for their respective varkeys.
+  * $varvals[varname] = "value"
+  *
+ * @var       array
+ * @access    private
+ * @see       set_var
+  */
+  public $varvals  = array();
+
+ /**
+  * Determines how to output variable tags with no assigned value in templates.
+  *
+ * @var       string
+ * @access    private
+ * @see       set_unknowns
+  */
+  public $unknowns = "remove";
+
+ /**
+  * Determines how Template handles error conditions.
+  * "yes"      = the error is reported, then execution is halted
+  * "report"   = the error is reported, then execution continues by returning "false"
+  * "no"       = errors are silently ignored, and execution resumes reporting "false"
+  *
+ * @var       string
+ * @access    public
+ * @see       halt
+  */
+  public $halt_on_error  = "yes";
+
+ /**
+  * The last error message is retained in this variable.
+  *
+ * @var       string
+ * @access    public
+ * @see       halt
+  */
+  public $last_error     = "";
+
+ /******************************************************************************
+  * Class constructor. May be called with two optional parameters.
+  * The first parameter sets the template directory the second parameter
+  * sets the policy regarding handling of unknown variables.
+  *
+  * usage: Template([string $root = "."], [string $unknowns = "remove"])
+  *
+ * @param     $root        path to template directory
+ * @param     $string      what to do with undefined variables
+ * @see       set_root
+ * @see       set_unknowns
+ * @access    public
+ * @return    void
+  */
+  public function __construct($root = ".", $unknowns = "remove") {
+    if ($this->debug & 4) {
+      echo "<p><b>Template:</b> root = $root, unknowns = $unknowns</p>\n";
+    }
+    $this->set_root($root);
+    $this->set_unknowns($unknowns);
+  }
+
+
+ /******************************************************************************
+  * Checks that $root is a valid directory and if so sets this directory as the
+  * base directory from which templates are loaded by storing the value in
+  * $this->root. Relative filenames are prepended with the path in $this->root.
+  *
+  * Returns true on success, false on error.
+  *
+  * usage: set_root(string $root)
+  *
+ * @param     $root         string containing new template directory
+ * @see       root
+ * @access    public
+ * @return    boolean
+  */
+  public function set_root($root) {
+    if(preg_match ('/\/$/', $root)) {
+      $root = substr($root, 0, -1);
+    }
+    if ($this->debug & 4) {
+      echo "<p><b>set_root:</b> root = $root</p>\n";
+    }
+    if (!is_dir($root)) {
+      $this->halt("set_root: $root is not a directory.");
+      return false;
+    }
+
+    $this->root = $root;
+    return true;
+  }
+
+
+ /******************************************************************************
+  * Sets the policy for dealing with unresolved variable names.
+  *
+  * unknowns defines what to do with undefined template variables
+  * "remove"   = remove undefined variables
+  * "comment"  = replace undefined variables with comments
+  * "keep"     = keep undefined variables
+  *
+  * Note: "comment" can cause unexpected results when the variable tag is embedded
+  * inside an HTML tag, for example a tag which is expected to be replaced with a URL.
+  *
+  * usage: set_unknowns(string $unknowns)
+  *
+ * @param     $unknowns         new value for unknowns
+ * @see       unknowns
+ * @access    public
+ * @return    void
+  */
+  public function set_unknowns($unknowns = "remove") {
+    if ($this->debug & 4) {
+      echo "<p><b>unknowns:</b> unknowns = $unknowns</p>\n";
+    }
+    $this->unknowns = $unknowns;
+  }
+
+
+ /******************************************************************************
+  * Defines a filename for the initial value of a variable.
+  *
+  * It may be passed either a varname and a file name as two strings or
+  * a hash of strings with the key being the varname and the value
+  * being the file name.
+  *
+  * The new mappings are stored in the array $this->file.
+  * The files are not loaded yet, but only when needed.
+  *
+  * Returns true on success, false on error.
+  *
+  * usage: set_file(array $filelist = (string $varname => string $filename))
+  * or
+  * usage: set_file(string $varname, string $filename)
+  *
+ * @param     $varname      either a string containing a varname or a hash of varname/file name pairs.
+ * @param     $filename     if varname is a string this is the filename otherwise filename is not required
+ * @access    public
+ * @return    boolean
+  */
+  public function set_file($varname, $filename = "") {
+    if (!is_array($varname)) {
+      if ($this->debug & 4) {
+        echo "<p><b>set_file:</b> (with scalar) varname = $varname, filename = $filename</p>\n";
+      }
+      if ($filename == "") {
+        $this->halt("set_file: For varname $varname filename is empty.");
+        return false;
+      }
+      $this->file[$varname] = $this->filename($filename);
+    } else {
+      reset($varname);
+      while (list($v, $f) = each($varname)) {
+        if ($this->debug & 4) {
+          echo "<p><b>set_file:</b> (with array) varname = $v, filename = $f</p>\n";
+        }
+        if ($f == "") {
+          $this->halt("set_file: For varname $v filename is empty.");
+          return false;
+        }
+        $this->file[$v] = $this->filename($f);
+      }
+    }
+    return true;
+  }
+
+
+ /******************************************************************************
+  * A variable $parent may contain a variable block defined by:
+  * &lt;!-- BEGIN $varname --&gt; content &lt;!-- END $varname --&gt;. This function removes
+  * that block from $parent and replaces it with a variable reference named $name.
+  * The block is inserted into the varkeys and varvals hashes. If $name is
+  * omitted, it is assumed to be the same as $varname.
+  *
+  * Blocks may be nested but care must be taken to extract the blocks in order
+  * from the innermost block to the outermost block.
+  *
+  * Returns true on success, false on error.
+  *
+  * usage: set_block(string $parent, string $varname, [string $name = ""])
+  *
+ * @param     $parent       a string containing the name of the parent variable
+ * @param     $varname      a string containing the name of the block to be extracted
+ * @param     $name         the name of the variable in which to store the block
+ * @access    public
+ * @return    boolean
+  */
+  public function set_block($parent, $varname, $name = "") {
+    if ($this->debug & 4) {
+      echo "<p><b>set_block:</b> parent = $parent, varname = $varname, name = $name</p>\n";
+    }
+    if (!$this->loadfile($parent)) {
+      $this->halt("set_block: unable to load $parent.");
+      return false;
+    }
+    if ($name == "") {
+      $name = $varname;
+    }
+
+    $str = $this->get_var($parent);
+    $reg = '/[ \t]*<!--\s+BEGIN '.$varname.'\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END '.$varname.'\s+-->\s*?\n?/sm';
+    preg_match_all($reg, $str, $m);
+/* workaround to avoid problems with some WB files/modules (e.g. massmail)
+    if (!isset($m[1][0])) {
+      $this->halt("set_block: unable to set block $varname.");
+      return false;
+    }
+*/
+    $str = preg_replace($reg, "{" . $name . "}", $str);
+    @$this->set_var($varname, (isset($m[1][0])?$m[1][0]:''));
+    $this->set_var($parent, $str);
+    return true;
+  }
+
+
+ /******************************************************************************
+  * This functions sets the value of a variable.
+  *
+  * It may be called with either a varname and a value as two strings or an
+  * an associative array with the key being the varname and the value being
+  * the new variable value.
+  *
+  * The function inserts the new value of the variable into the $varkeys and
+  * $varvals hashes. It is not necessary for a variable to exist in these hashes
+  * before calling this function.
+  *
+  * An optional third parameter allows the value for each varname to be appended
+  * to the existing variable instead of replacing it. The default is to replace.
+  * This feature was introduced after the 7.2d release.
+  *
+  *
+  * usage: set_var(string $varname, [string $value = ""], [boolean $append = false])
+  * or
+  * usage: set_var(array $varname = (string $varname => string $value), [mixed $dummy_var], [boolean $append = false])
+  *
+ * @param     $varname      either a string containing a varname or a hash of varname/value pairs.
+ * @param     $value        if $varname is a string this contains the new value for the variable otherwise this parameter is ignored
+ * @param     $append       if true, the value is appended to the variable's existing value
+ * @access    public
+ * @return    void
+  */
+  public function set_var($varname, $value = "", $append = false) {
+    if (!is_array($varname)) {
+      if (!empty($varname)) {
+        if ($this->debug & 1) {
+          printf("<b>set_var:</b> (with scalar) <b>%s</b> = '%s'<br>\n", $varname, htmlentities($value));
+        }
+        $this->varkeys[$varname] = "/".$this->varname($varname)."/";
+        if ($append && isset($this->varvals[$varname])) {
+          $this->varvals[$varname] .= $value;
+        } else {
+          $this->varvals[$varname] = $value;
+        }
+      }
+    } else {
+      reset($varname);
+      while (list($k, $v) = each($varname)) {
+        if (!empty($k)) {
+          if ($this->debug & 1) {
+            printf("<b>set_var:</b> (with array) <b>%s</b> = '%s'<br>\n", $k, htmlentities($v));
+          }
+          $this->varkeys[$k] = "/".$this->varname($k)."/";
+          if ($append && isset($this->varvals[$k])) {
+            $this->varvals[$k] .= $v;
+          } else {
+            $this->varvals[$k] = $v;
+          }
+        }
+      }
+    }
+  }
+
+
+ /******************************************************************************
+  * This functions clears the value of a variable.
+  *
+  * It may be called with either a varname as a string or an array with the
+  * values being the varnames to be cleared.
+  *
+  * The function sets the value of the variable in the $varkeys and $varvals
+  * hashes to "". It is not necessary for a variable to exist in these hashes
+  * before calling this function.
+  *
+  *
+  * usage: clear_var(string $varname)
+  * or
+  * usage: clear_var(array $varname = (string $varname))
+  *
+ * @param     $varname      either a string containing a varname or an array of varnames.
+ * @access    public
+ * @return    void
+  */
+  public function clear_var($varname) {
+    if (!is_array($varname)) {
+      if (!empty($varname)) {
+        if ($this->debug & 1) {
+          printf("<b>clear_var:</b> (with scalar) <b>%s</b><br>\n", $varname);
+        }
+        $this->set_var($varname, "");
+      }
+    } else {
+      reset($varname);
+      while (list($k, $v) = each($varname)) {
+        if (!empty($v)) {
+          if ($this->debug & 1) {
+            printf("<b>clear_var:</b> (with array) <b>%s</b><br>\n", $v);
+          }
+          $this->set_var($v, "");
+        }
+      }
+    }
+  }
+
+
+ /******************************************************************************
+  * This functions unsets a variable completely.
+
+  * It may be called with either a varname as a string or an array with the
+  * values being the varnames to be cleared.
+  *
+  * The function removes the variable from the $varkeys and $varvals hashes.
+  * It is not necessary for a variable to exist in these hashes before calling
+  * this function.
+  *
+  *
+  * usage: unset_var(string $varname)
+  * or
+  * usage: unset_var(array $varname = (string $varname))
+  *
+ * @param     $varname      either a string containing a varname or an array of varnames.
+ * @access    public
+ * @return    void
+  */
+  public function unset_var($varname) {
+    if (!is_array($varname)) {
+      if (!empty($varname)) {
+        if ($this->debug & 1) {
+          printf("<b>unset_var:</b> (with scalar) <b>%s</b><br>\n", $varname);
+        }
+        unset($this->varkeys[$varname]);
+        unset($this->varvals[$varname]);
+      }
+    } else {
+      reset($varname);
+      while (list($k, $v) = each($varname)) {
+        if (!empty($v)) {
+          if ($this->debug & 1) {
+            printf("<b>unset_var:</b> (with array) <b>%s</b><br>\n", $v);
+          }
+          unset($this->varkeys[$v]);
+          unset($this->varvals[$v]);
+        }
+      }
+    }
+  }
+
+
+ /******************************************************************************
+  * This function fills in all the variables contained within the variable named
+  * $varname. The resulting value is returned as the function result and the
+  * original value of the variable varname is not changed. The resulting string
+  * is not "finished", that is, the unresolved variable name policy has not been
+  * applied yet.
+  *
+  * Returns: the value of the variable $varname with all variables substituted.
+  *
+  * usage: subst(string $varname)
+  *
+ * @param     $varname      the name of the variable within which variables are to be substituted
+ * @access    public
+ * @return    string
+  */
+    protected function subst($varname) {
+    $varvals_quoted = array();
+    if ($this->debug & 4) {
+      echo "<p><b>subst:</b> varname = $varname</p>\n";
+    }
+    if (!$this->loadfile($varname)) {
+      $this->halt("subst: unable to load $varname.");
+      return false;
+    }
+
+    // quote the replacement strings to prevent bogus stripping of special chars
+    reset($this->varvals);
+    while (list($k, $v) = each($this->varvals)) {
+      $varvals_quoted[$k] = preg_replace(array('/\\\\/', '/\$/'), array('\\\\\\\\', '\\\\$'), $v);
+    }
+    $str = $this->get_var($varname);
+    $str = @preg_replace($this->varkeys, $varvals_quoted, $str);
+    if (class_exists('ParseError')) {
+        $bRetval = true;
+        try{
+            $str = @preg_replace($this->varkeys, $varvals_quoted, $str);
+        } catch(ParseError $e) {
+            echo "<p><b>subst:</b> varname = $varname</p>\n";
+        }
+    } else {
+        $str = @preg_replace($this->varkeys, $varvals_quoted, $str);
+    }
+    return $str;
+  }
+
+
+ /******************************************************************************
+  * This is shorthand for print $this->subst($varname). See subst for further
+  * details.
+  *
+  * Returns: always returns false.
+  *
+  * usage: psubst(string $varname)
+  *
+ * @param     $varname      the name of the variable within which variables are to be substituted
+ * @access    public
+ * @return    false
+ * @see       subst
+  */
+  public function psubst($varname) {
+    if ($this->debug & 4) {
+      echo "<p><b>psubst:</b> varname = $varname</p>\n";
+    }
+    print $this->subst($varname);
+
+    return false;
+  }
+
+
+ /******************************************************************************
+  * The function substitutes the values of all defined variables in the variable
+  * named $varname and stores or appends the result in the variable named $target.
+  *
+  * It may be called with either a target and a varname as two strings or a
+  * target as a string and an array of variable names in varname.
+  *
+  * The function inserts the new value of the variable into the $varkeys and
+  * $varvals hashes. It is not necessary for a variable to exist in these hashes
+  * before calling this function.
+  *
+  * An optional third parameter allows the value for each varname to be appended
+  * to the existing target variable instead of replacing it. The default is to
+  * replace.
+  *
+  * If $target and $varname are both strings, the substituted value of the
+  * variable $varname is inserted into or appended to $target.
+  *
+  * If $handle is an array of variable names the variables named by $handle are
+  * sequentially substituted and the result of each substitution step is
+  * inserted into or appended to in $target. The resulting substitution is
+  * available in the variable named by $target, as is each intermediate step
+  * for the next $varname in sequence. Note that while it is possible, it
+  * is only rarely desirable to call this function with an array of varnames
+  * and with $append = true. This append feature was introduced after the 7.2d
+  * release.
+  *
+  * Returns: the last value assigned to $target.
+  *
+  * usage: parse(string $target, string $varname, [boolean $append])
+  * or
+  * usage: parse(string $target, array $varname = (string $varname), [boolean $append])
+  *
+ * @param     $target      a string containing the name of the variable into which substituted $varnames are to be stored
+ * @param     $varname     if a string, the name the name of the variable to substitute or if an array a list of variables to be substituted
+ * @param     $append      if true, the substituted variables are appended to $target otherwise the existing value of $target is replaced
+ * @access    public
+ * @return    string
+ * @see       subst
+  */
+  public function parse($target, $varname, $append = false) {
+    if (!is_array($varname)) {
+      if ($this->debug & 4) {
+        echo "<p><b>parse:</b> (with scalar) target = $target, varname = $varname, append = $append</p>\n";
+      }
+      $str = $this->subst($varname);
+      if ($append) {
+        $this->set_var($target, $this->get_var($target) . $str);
+      } else {
+        $this->set_var($target, $str);
+      }
+    } else {
+      reset($varname);
+      while (list($i, $v) = each($varname)) {
+        if ($this->debug & 4) {
+          echo "<p><b>parse:</b> (with array) target = $target, i = $i, varname = $v, append = $append</p>\n";
+        }
+        $str = $this->subst($v);
+        if ($append) {
+          $this->set_var($target, $this->get_var($target) . $str);
+        } else {
+          $this->set_var($target, $str);
+        }
+      }
+    }
+
+    if ($this->debug & 4) {
+      echo "<p><b>parse:</b> completed</p>\n";
+    }
+    return $this->get_var($target);
+  }
+
+
+ /******************************************************************************
+  * This is shorthand for print $this->parse(...) and is functionally identical.
+  * See parse for further details.
+  *
+  * Returns: always returns false.
+  *
+  * usage: pparse(string $target, string $varname, [boolean $append])
+  * or
+  * usage: pparse(string $target, array $varname = (string $varname), [boolean $append])
+  *
+ * @param     $target      a string containing the name of the variable into which substituted $varnames are to be stored
+ * @param     $varname     if a string, the name the name of the variable to substitute or if an array a list of variables to be substituted
+ * @param     $append      if true, the substituted variables are appended to $target otherwise the existing value of $target is replaced
+ * @access    public
+ * @return    false
+ * @see       parse
+  */
+  public function pparse($target, $varname, $append = false, $clear = true) { // added $clear: whether to delete undefined vars or not (needed for wb-module code) - thorn
+    if ($this->debug & 4) {
+      echo "<p><b>pparse:</b> passing parameters to parse...</p>\n";
+    }
+        if(!$clear) {
+            $unknowns = $this->unknowns;
+            $this->set_unknowns('keep');
+            print $this->finish($this->parse($target, $varname, $append));
+            $this->set_unknowns($unknowns);
+        } else {
+            print $this->finish($this->parse($target, $varname, $append));
+        }
+        return false;
+  }
+
+
+ /******************************************************************************
+  * This function returns an associative array of all defined variables with the
+  * name as the key and the value of the variable as the value.
+  *
+  * This is mostly useful for debugging. Also note that $this->debug can be used
+  * to echo all variable assignments as they occur and to trace execution.
+  *
+  * Returns: a hash of all defined variable values keyed by their names.
+  *
+  * usage: get_vars()
+  *
+ * @access    public
+ * @return    array
+ * @see       $debug
+  */
+  public function get_vars() {
+    if ($this->debug & 4) {
+      echo "<p><b>get_vars:</b> constructing array of vars...</p>\n";
+    }
+    reset($this->varkeys);
+    while (list($k, $v) = each($this->varkeys)) {
+      $result[$k] = $this->get_var($k);
+    }
+    return $result;
+  }
+
+
+ /******************************************************************************
+  * This function returns the value of the variable named by $varname.
+  * If $varname references a file and that file has not been loaded yet, the
+  * variable will be reported as empty.
+  *
+  * When called with an array of variable names this function will return a a
+  * hash of variable values keyed by their names.
+  *
+  * Returns: a string or an array containing the value of $varname.
+  *
+  * usage: get_var(string $varname)
+  * or
+  * usage: get_var(array $varname)
+  *
+ * @param     $varname     if a string, the name the name of the variable to get the value of, or if an array a list of variables to return the value of
+ * @access    public
+ * @return    string or array
+  */
+  public function get_var($varname) {
+    if (!is_array($varname)) {
+      if (isset($this->varvals[$varname])) {
+        $str = $this->varvals[$varname];
+      } else {
+        $str = "";
+      }
+      if ($this->debug & 2) {
+        printf ("<b>get_var</b> (with scalar) <b>%s</b> = '%s'<br>\n", $varname, htmlentities($str));
+      }
+      return $str;
+    } else {
+      reset($varname);
+      while (list($k, $v) = each($varname)) {
+        if (isset($this->varvals[$v])) {
+          $str = $this->varvals[$v];
+        } else {
+          $str = "";
+        }
+        if ($this->debug & 2) {
+          printf ("<b>get_var:</b> (with array) <b>%s</b> = '%s'<br>\n", $v, htmlentities($str));
+        }
+        $result[$v] = $str;
+      }
+      return $result;
+    }
+  }
+
+
+ /******************************************************************************
+  * This function returns a hash of unresolved variable names in $varname, keyed
+  * by their names (that is, the hash has the form $a[$name] = $name).
+  *
+  * Returns: a hash of varname/varname pairs or false on error.
+  *
+  * usage: get_undefined(string $varname)
+  *
+ * @param     $varname     a string containing the name the name of the variable to scan for unresolved variables
+ * @access    public
+ * @return    array
+  */
+  public function get_undefined($varname) {
+    if ($this->debug & 4) {
+      echo "<p><b>get_undefined:</b> varname = $varname</p>\n";
+    }
+    if (!$this->loadfile($varname)) {
+      $this->halt("get_undefined: unable to load $varname.");
+      return false;
+    }
+
+    preg_match_all(
+        (("loose" == $this->unknown_regexp) ? "/{([^ \t\r\n}]+)}/" : "/{([_a-zA-Z]\\w+)}/"),
+        $this->get_var($varname),
+        $m);
+    $m = $m[1];
+    if (!is_array($m)) {
+      return false;
+    }
+
+    reset($m);
+    while (list($k, $v) = each($m)) {
+      if (!isset($this->varkeys[$v])) {
+        if ($this->debug & 4) {
+         echo "<p><b>get_undefined:</b> undefined: $v</p>\n";
+        }
+        $result[$v] = $v;
+      }
+    }
+
+    if (count($result)) {
+      return $result;
+    } else {
+      return false;
+    }
+  }
+
+
+ /******************************************************************************
+  * This function returns the finished version of $str. That is, the policy
+  * regarding unresolved variable names will be applied to $str.
+  *
+  * Returns: a finished string derived from $str and $this->unknowns.
+  *
+  * usage: finish(string $str)
+  *
+ * @param     $str         a string to which to apply the unresolved variable policy
+ * @access    public
+ * @return    string
+ * @see       set_unknowns
+  */
+  public function finish($str) {
+    switch ($this->unknowns) {
+      case "keep":
+      break;
+
+      case "remove":
+        $str = preg_replace(
+            (("loose" == $this->unknown_regexp) ? "/{([^ \t\r\n}]+)}/" : "/{([_a-zA-Z]\\w+)}/"),
+            "",
+            $str);
+      break;
+
+      case "comment":
+        $str = preg_replace(
+             (("loose" == $this->unknown_regexp) ? "/{([^ \t\r\n}]+)}/" : "/{([_a-zA-Z]\\w+)}/"),
+            "<!-- Template variable \\1 undefined -->",
+            $str);
+      break;
+    }
+
+    return $str;
+  }
+
+
+ /******************************************************************************
+  * This function prints the finished version of the value of the variable named
+  * by $varname. That is, the policy regarding unresolved variable names will be
+  * applied to the variable $varname then it will be printed.
+  *
+  * usage: p(string $varname)
+  *
+ * @param     $varname     a string containing the name of the variable to finish and print
+ * @access    public
+ * @return    void
+ * @see       set_unknowns
+ * @see       finish
+  */
+  public function p($varname) {
+    print $this->finish($this->get_var($varname));
+  }
+
+
+ /******************************************************************************
+  * This function returns the finished version of the value of the variable named
+  * by $varname. That is, the policy regarding unresolved variable names will be
+  * applied to the variable $varname and the result returned.
+  *
+  * Returns: a finished string derived from the variable $varname.
+  *
+  * usage: get(string $varname)
+  *
+ * @param     $varname     a string containing the name of the variable to finish
+ * @access    public
+ * @return    void
+ * @see       set_unknowns
+ * @see       finish
+  */
+  public function get($varname) {
+    return $this->finish($this->get_var($varname));
+  }
+
+
+ /******************************************************************************
+  * When called with a relative pathname, this function will return the pathname
+  * with $this->root prepended. Absolute pathnames are returned unchanged.
+  *
+  * Returns: a string containing an absolute pathname.
+  *
+  * usage: filename(string $filename)
+  *
+ * @param     $filename    a string containing a filename
+ * @access    private
+ * @return    string
+ * @see       set_root
+  */
+  public function filename($filename) {
+    if ($this->debug & 4) {
+      echo "<p><b>filename:</b> filename = $filename</p>\n";
+    }
+    if (substr($filename, 0, 1) != "/"
+       && substr($filename, 0, 1) != "\\"
+       && substr($filename, 1, 2) != ":\\"
+       && substr($filename, 1, 2) != ":/"
+    ) {
+      $filename = $this->root."/".$filename;
+    }
+
+    if (!file_exists($filename)) {
+      $this->halt("filename: file $filename does not exist.");
+    }
+    return $filename;
+  }
+
+
+ /******************************************************************************
+  * This function will construct a regexp for a given variable name with any
+  * special chars quoted.
+  *
+  * Returns: a string containing an escaped variable name.
+  *
+  * usage: varname(string $varname)
+  *
+ * @param     $varname    a string containing a variable name
+ * @access    private
+ * @return    string
+  */
+  public function varname($varname) {
+    return preg_quote("{" . $varname . "}");
+  }
+
+
+ /******************************************************************************
+  * If a variable's value is undefined and the variable has a filename stored in
+  * $this->file[$varname] then the backing file will be loaded and the file's
+  * contents will be assigned as the variable's value.
+  *
+  * Note that the behaviour of this function changed slightly after the 7.2d
+  * release. Where previously a variable was reloaded from file if the value
+  * was empty, now this is not done. This allows a variable to be loaded then
+  * set to "", and also prevents attempts to load empty variables. Files are
+  * now only loaded if $this->varvals[$varname] is unset.
+  *
+  * Returns: true on success, false on error.
+  *
+  * usage: loadfile(string $varname)
+  *
+ * @param     $varname    a string containing the name of a variable to load
+ * @access    private
+ * @return    boolean
+ * @see       set_file
+  */
+  public function loadfile($varname) {
+    if ($this->debug & 4) {
+      echo "<p><b>loadfile:</b> varname = $varname</p>\n";
+    }
+
+    if (!isset($this->file[$varname])) {
+      // $varname does not reference a file so return
+      if ($this->debug & 4) {
+        echo "<p><b>loadfile:</b> varname $varname does not reference a file</p>\n";
+      }
+      return true;
+    }
+
+    if (isset($this->varvals[$varname])) {
+      // will only be unset if varname was created with set_file and has never been loaded
+      // $varname has already been loaded so return
+      if ($this->debug & 4) {
+        echo "<p><b>loadfile:</b> varname $varname is already loaded</p>\n";
+      }
+      return true;
+    }
+    $filename = $this->file[$varname];
+
+    /* use @file here to avoid leaking filesystem information if there is an error */
+    $str = implode("", @file($filename));
+    if (empty($str)) {
+      $this->halt("loadfile: While loading $varname, $filename does not exist or is empty.");
+      return false;
+    }
+
+    if ($this->filename_comments) {
+      $str = "<!-- START FILE $filename -->\n$str<!-- END FILE $filename -->\n";
+    }
+    if ($this->debug & 4) {
+      printf("<b>loadfile:</b> loaded $filename into $varname<br>\n");
+    }
+    $this->set_var($varname, $str);
+
+    return true;
+  }
+
+
+ /******************************************************************************
+  * This function is called whenever an error occurs and will handle the error
+  * according to the policy defined in $this->halt_on_error. Additionally the
+  * error message will be saved in $this->last_error.
+  *
+  * Returns: always returns false.
+  *
+  * usage: halt(string $msg)
+  *
+ * @param     $msg         a string containing an error message
+ * @access    private
+ * @return    void
+ * @see       $halt_on_error
+  */
+  public function halt($msg) {
+    $this->last_error = $msg;
+
+    if ($this->halt_on_error != "no") {
+      $this->haltmsg($msg);
+    }
+
+    if ($this->halt_on_error == "yes") {
+      die("<b>Halted.</b>");
+    }
+
+    return false;
+  }
+
+
+ /******************************************************************************
+  * This function prints an error message.
+  * It can be overridden by your subclass of Template. It will be called with an
+  * error message to display.
+  *
+  * usage: haltmsg(string $msg)
+  *
+ * @param     $msg         a string containing the error message to display
+ * @access    public
+ * @return    void
+ * @see       halt
+  */
+  public function haltmsg($msg) {
+    printf("<b>Template Error:</b> %s<br>\n", $msg);
+  }
+
+}

Property changes on: trunk/include/phplib/template.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/LICENSE
===================================================================
--- trunk/include/phpmailer/LICENSE	(nonexistent)
+++ trunk/include/phpmailer/LICENSE	(revision 2)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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!
+
+
Index: trunk/include/phpmailer/PHPMailerAutoload.php
===================================================================
--- trunk/include/phpmailer/PHPMailerAutoload.php	(nonexistent)
+++ trunk/include/phpmailer/PHPMailerAutoload.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+/**
+ * PHPMailer SPL autoloader.
+ * PHP Version 5
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer SPL autoloader.
+ * @param string $classname The name of the class to load
+ */
+function PHPMailerAutoload($classname)
+{
+    //Can't use __DIR__ as it's only in PHP 5.3+
+    $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
+    if (is_readable($filename)) {
+        require $filename;
+    }
+}
+
+if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
+    //SPL autoloading was introduced in PHP 5.1.2
+    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
+        spl_autoload_register('PHPMailerAutoload', true, true);
+    } else {
+        spl_autoload_register('PHPMailerAutoload');
+    }
+} else {
+    /**
+     * Fall back to traditional autoload for old PHP versions
+     * @param string $classname The name of the class to load
+     */
+    function __autoload($classname)
+    {
+        PHPMailerAutoload($classname);
+    }
+}

Property changes on: trunk/include/phpmailer/PHPMailerAutoload.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/VERSION
===================================================================
--- trunk/include/phpmailer/VERSION	(nonexistent)
+++ trunk/include/phpmailer/VERSION	(revision 2)
@@ -0,0 +1 @@
+5.2.22
Index: trunk/include/phpmailer/class.phpmailer.php
===================================================================
--- trunk/include/phpmailer/class.phpmailer.php	(nonexistent)
+++ trunk/include/phpmailer/class.phpmailer.php	(revision 2)
@@ -0,0 +1,4039 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * @package PHPMailer
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ */
+class PHPMailer
+{
+    /**
+     * The PHPMailer Version number.
+     * @var string
+     */
+    public $Version = '5.2.22';
+
+    /**
+     * Email priority.
+     * Options: null (default), 1 = High, 3 = Normal, 5 = low.
+     * When null, the header is not set at all.
+     * @var integer
+     */
+    public $Priority = null;
+
+    /**
+     * The character set of the message.
+     * @var string
+     */
+    public $CharSet = 'iso-8859-1';
+
+    /**
+     * The MIME Content-type of the message.
+     * @var string
+     */
+    public $ContentType = 'text/plain';
+
+    /**
+     * The message encoding.
+     * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
+     * @var string
+     */
+    public $Encoding = '8bit';
+
+    /**
+     * Holds the most recent mailer error message.
+     * @var string
+     */
+    public $ErrorInfo = '';
+
+    /**
+     * The From email address for the message.
+     * @var string
+     */
+    public $From = 'root@localhost';
+
+    /**
+     * The From name of the message.
+     * @var string
+     */
+    public $FromName = 'Root User';
+
+    /**
+     * The Sender email (Return-Path) of the message.
+     * If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
+     * @var string
+     */
+    public $Sender = '';
+
+    /**
+     * The Return-Path of the message.
+     * If empty, it will be set to either From or Sender.
+     * @var string
+     * @deprecated Email senders should never set a return-path header;
+     * it's the receiver's job (RFC5321 section 4.4), so this no longer does anything.
+     * @link https://tools.ietf.org/html/rfc5321#section-4.4 RFC5321 reference
+     */
+    public $ReturnPath = '';
+
+    /**
+     * The Subject of the message.
+     * @var string
+     */
+    public $Subject = '';
+
+    /**
+     * An HTML or plain text message body.
+     * If HTML then call isHTML(true).
+     * @var string
+     */
+    public $Body = '';
+
+    /**
+     * The plain-text message body.
+     * This body can be read by mail clients that do not have HTML email
+     * capability such as mutt & Eudora.
+     * Clients that can read HTML will view the normal Body.
+     * @var string
+     */
+    public $AltBody = '';
+
+    /**
+     * An iCal message part body.
+     * Only supported in simple alt or alt_inline message types
+     * To generate iCal events, use the bundled extras/EasyPeasyICS.php class or iCalcreator
+     * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
+     * @link http://kigkonsult.se/iCalcreator/
+     * @var string
+     */
+    public $Ical = '';
+
+    /**
+     * The complete compiled MIME message body.
+     * @access protected
+     * @var string
+     */
+    protected $MIMEBody = '';
+
+    /**
+     * The complete compiled MIME message headers.
+     * @var string
+     * @access protected
+     */
+    protected $MIMEHeader = '';
+
+    /**
+     * Extra headers that createHeader() doesn't fold in.
+     * @var string
+     * @access protected
+     */
+    protected $mailHeader = '';
+
+    /**
+     * Word-wrap the message body to this number of chars.
+     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
+     * @var integer
+     */
+    public $WordWrap = 0;
+
+    /**
+     * Which method to use to send mail.
+     * Options: "mail", "sendmail", or "smtp".
+     * @var string
+     */
+    public $Mailer = 'mail';
+
+    /**
+     * The path to the sendmail program.
+     * @var string
+     */
+    public $Sendmail = '/usr/sbin/sendmail';
+
+    /**
+     * Whether mail() uses a fully sendmail-compatible MTA.
+     * One which supports sendmail's "-oi -f" options.
+     * @var boolean
+     */
+    public $UseSendmailOptions = true;
+
+    /**
+     * Path to PHPMailer plugins.
+     * Useful if the SMTP class is not in the PHP include path.
+     * @var string
+     * @deprecated Should not be needed now there is an autoloader.
+     */
+    public $PluginDir = '';
+
+    /**
+     * The email address that a reading confirmation should be sent to, also known as read receipt.
+     * @var string
+     */
+    public $ConfirmReadingTo = '';
+
+    /**
+     * The hostname to use in the Message-ID header and as default HELO string.
+     * If empty, PHPMailer attempts to find one with, in order,
+     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
+     * 'localhost.localdomain'.
+     * @var string
+     */
+    public $Hostname = '';
+
+    /**
+     * An ID to be used in the Message-ID header.
+     * If empty, a unique id will be generated.
+     * You can set your own, but it must be in the format "<id@domain>",
+     * as defined in RFC5322 section 3.6.4 or it will be ignored.
+     * @see https://tools.ietf.org/html/rfc5322#section-3.6.4
+     * @var string
+     */
+    public $MessageID = '';
+
+    /**
+     * The message Date to be used in the Date header.
+     * If empty, the current date will be added.
+     * @var string
+     */
+    public $MessageDate = '';
+
+    /**
+     * SMTP hosts.
+     * Either a single hostname or multiple semicolon-delimited hostnames.
+     * You can also specify a different port
+     * for each host by using this format: [hostname:port]
+     * (e.g. "smtp1.example.com:25;smtp2.example.com").
+     * You can also specify encryption type, for example:
+     * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
+     * Hosts will be tried in order.
+     * @var string
+     */
+    public $Host = 'localhost';
+
+    /**
+     * The default SMTP server port.
+     * @var integer
+     * @TODO Why is this needed when the SMTP class takes care of it?
+     */
+    public $Port = 25;
+
+    /**
+     * The SMTP HELO of the message.
+     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
+     * one with the same method described above for $Hostname.
+     * @var string
+     * @see PHPMailer::$Hostname
+     */
+    public $Helo = '';
+
+    /**
+     * What kind of encryption to use on the SMTP connection.
+     * Options: '', 'ssl' or 'tls'
+     * @var string
+     */
+    public $SMTPSecure = '';
+
+    /**
+     * Whether to enable TLS encryption automatically if a server supports it,
+     * even if `SMTPSecure` is not set to 'tls'.
+     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
+     * @var boolean
+     */
+    public $SMTPAutoTLS = true;
+
+    /**
+     * Whether to use SMTP authentication.
+     * Uses the Username and Password properties.
+     * @var boolean
+     * @see PHPMailer::$Username
+     * @see PHPMailer::$Password
+     */
+    public $SMTPAuth = false;
+
+    /**
+     * Options array passed to stream_context_create when connecting via SMTP.
+     * @var array
+     */
+    public $SMTPOptions = array();
+
+    /**
+     * SMTP username.
+     * @var string
+     */
+    public $Username = '';
+
+    /**
+     * SMTP password.
+     * @var string
+     */
+    public $Password = '';
+
+    /**
+     * SMTP auth type.
+     * Options are CRAM-MD5, LOGIN, PLAIN, NTLM, XOAUTH2, attempted in that order if not specified
+     * @var string
+     */
+    public $AuthType = '';
+
+    /**
+     * SMTP realm.
+     * Used for NTLM auth
+     * @var string
+     */
+    public $Realm = '';
+
+    /**
+     * SMTP workstation.
+     * Used for NTLM auth
+     * @var string
+     */
+    public $Workstation = '';
+
+    /**
+     * The SMTP server timeout in seconds.
+     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+     * @var integer
+     */
+    public $Timeout = 300;
+
+    /**
+     * SMTP class debug output mode.
+     * Debug output level.
+     * Options:
+     * * `0` No output
+     * * `1` Commands
+     * * `2` Data and commands
+     * * `3` As 2 plus connection status
+     * * `4` Low-level data output
+     * @var integer
+     * @see SMTP::$do_debug
+     */
+    public $SMTPDebug = 0;
+
+    /**
+     * How to handle debug output.
+     * Options:
+     * * `echo` Output plain-text as-is, appropriate for CLI
+     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+     * * `error_log` Output to error log as configured in php.ini
+     *
+     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+     * <code>
+     * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+     * </code>
+     * @var string|callable
+     * @see SMTP::$Debugoutput
+     */
+    public $Debugoutput = 'echo';
+
+    /**
+     * Whether to keep SMTP connection open after each message.
+     * If this is set to true then to close the connection
+     * requires an explicit call to smtpClose().
+     * @var boolean
+     */
+    public $SMTPKeepAlive = false;
+
+    /**
+     * Whether to split multiple to addresses into multiple messages
+     * or send them all in one message.
+     * Only supported in `mail` and `sendmail` transports, not in SMTP.
+     * @var boolean
+     */
+    public $SingleTo = false;
+
+    /**
+     * Storage for addresses when SingleTo is enabled.
+     * @var array
+     * @TODO This should really not be public
+     */
+    public $SingleToArray = array();
+
+    /**
+     * Whether to generate VERP addresses on send.
+     * Only applicable when sending via SMTP.
+     * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
+     * @link http://www.postfix.org/VERP_README.html Postfix VERP info
+     * @var boolean
+     */
+    public $do_verp = false;
+
+    /**
+     * Whether to allow sending messages with an empty body.
+     * @var boolean
+     */
+    public $AllowEmpty = false;
+
+    /**
+     * The default line ending.
+     * @note The default remains "\n". We force CRLF where we know
+     *        it must be used via self::CRLF.
+     * @var string
+     */
+    public $LE = "\n";
+
+    /**
+     * DKIM selector.
+     * @var string
+     */
+    public $DKIM_selector = '';
+
+    /**
+     * DKIM Identity.
+     * Usually the email address used as the source of the email.
+     * @var string
+     */
+    public $DKIM_identity = '';
+
+    /**
+     * DKIM passphrase.
+     * Used if your key is encrypted.
+     * @var string
+     */
+    public $DKIM_passphrase = '';
+
+    /**
+     * DKIM signing domain name.
+     * @example 'example.com'
+     * @var string
+     */
+    public $DKIM_domain = '';
+
+    /**
+     * DKIM private key file path.
+     * @var string
+     */
+    public $DKIM_private = '';
+
+    /**
+     * DKIM private key string.
+     * If set, takes precedence over `$DKIM_private`.
+     * @var string
+     */
+    public $DKIM_private_string = '';
+
+    /**
+     * Callback Action function name.
+     *
+     * The function that handles the result of the send email action.
+     * It is called out by send() for each email sent.
+     *
+     * Value can be any php callable: http://www.php.net/is_callable
+     *
+     * Parameters:
+     *   boolean $result        result of the send action
+     *   string  $to            email address of the recipient
+     *   string  $cc            cc email addresses
+     *   string  $bcc           bcc email addresses
+     *   string  $subject       the subject
+     *   string  $body          the email body
+     *   string  $from          email address of sender
+     * @var string
+     */
+    public $action_function = '';
+
+    /**
+     * What to put in the X-Mailer header.
+     * Options: An empty string for PHPMailer default, whitespace for none, or a string to use
+     * @var string
+     */
+    public $XMailer = '';
+
+    /**
+     * Which validator to use by default when validating email addresses.
+     * May be a callable to inject your own validator, but there are several built-in validators.
+     * @see PHPMailer::validateAddress()
+     * @var string|callable
+     * @static
+     */
+    public static $validator = 'auto';
+
+    /**
+     * An instance of the SMTP sender class.
+     * @var SMTP
+     * @access protected
+     */
+    protected $smtp = null;
+
+    /**
+     * The array of 'to' names and addresses.
+     * @var array
+     * @access protected
+     */
+    protected $to = array();
+
+    /**
+     * The array of 'cc' names and addresses.
+     * @var array
+     * @access protected
+     */
+    protected $cc = array();
+
+    /**
+     * The array of 'bcc' names and addresses.
+     * @var array
+     * @access protected
+     */
+    protected $bcc = array();
+
+    /**
+     * The array of reply-to names and addresses.
+     * @var array
+     * @access protected
+     */
+    protected $ReplyTo = array();
+
+    /**
+     * An array of all kinds of addresses.
+     * Includes all of $to, $cc, $bcc
+     * @var array
+     * @access protected
+     * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
+     */
+    protected $all_recipients = array();
+
+    /**
+     * An array of names and addresses queued for validation.
+     * In send(), valid and non duplicate entries are moved to $all_recipients
+     * and one of $to, $cc, or $bcc.
+     * This array is used only for addresses with IDN.
+     * @var array
+     * @access protected
+     * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
+     * @see PHPMailer::$all_recipients
+     */
+    protected $RecipientsQueue = array();
+
+    /**
+     * An array of reply-to names and addresses queued for validation.
+     * In send(), valid and non duplicate entries are moved to $ReplyTo.
+     * This array is used only for addresses with IDN.
+     * @var array
+     * @access protected
+     * @see PHPMailer::$ReplyTo
+     */
+    protected $ReplyToQueue = array();
+
+    /**
+     * The array of attachments.
+     * @var array
+     * @access protected
+     */
+    protected $attachment = array();
+
+    /**
+     * The array of custom headers.
+     * @var array
+     * @access protected
+     */
+    protected $CustomHeader = array();
+
+    /**
+     * The most recent Message-ID (including angular brackets).
+     * @var string
+     * @access protected
+     */
+    protected $lastMessageID = '';
+
+    /**
+     * The message's MIME type.
+     * @var string
+     * @access protected
+     */
+    protected $message_type = '';
+
+    /**
+     * The array of MIME boundary strings.
+     * @var array
+     * @access protected
+     */
+    protected $boundary = array();
+
+    /**
+     * The array of available languages.
+     * @var array
+     * @access protected
+     */
+    protected $language = array();
+
+    /**
+     * The number of errors encountered.
+     * @var integer
+     * @access protected
+     */
+    protected $error_count = 0;
+
+    /**
+     * The S/MIME certificate file path.
+     * @var string
+     * @access protected
+     */
+    protected $sign_cert_file = '';
+
+    /**
+     * The S/MIME key file path.
+     * @var string
+     * @access protected
+     */
+    protected $sign_key_file = '';
+
+    /**
+     * The optional S/MIME extra certificates ("CA Chain") file path.
+     * @var string
+     * @access protected
+     */
+    protected $sign_extracerts_file = '';
+
+    /**
+     * The S/MIME password for the key.
+     * Used only if the key is encrypted.
+     * @var string
+     * @access protected
+     */
+    protected $sign_key_pass = '';
+
+    /**
+     * Whether to throw exceptions for errors.
+     * @var boolean
+     * @access protected
+     */
+    protected $exceptions = false;
+
+    /**
+     * Unique ID used for message ID and boundaries.
+     * @var string
+     * @access protected
+     */
+    protected $uniqueid = '';
+
+    /**
+     * Error severity: message only, continue processing.
+     */
+    const STOP_MESSAGE = 0;
+
+    /**
+     * Error severity: message, likely ok to continue processing.
+     */
+    const STOP_CONTINUE = 1;
+
+    /**
+     * Error severity: message, plus full stop, critical error reached.
+     */
+    const STOP_CRITICAL = 2;
+
+    /**
+     * SMTP RFC standard line ending.
+     */
+    const CRLF = "\r\n";
+
+    /**
+     * The maximum line length allowed by RFC 2822 section 2.1.1
+     * @var integer
+     */
+    const MAX_LINE_LENGTH = 998;
+
+    /**
+     * Constructor.
+     * @param boolean $exceptions Should we throw external exceptions?
+     */
+    public function __construct($exceptions = null)
+    {
+        if ($exceptions !== null) {
+            $this->exceptions = (boolean)$exceptions;
+        }
+    }
+
+    /**
+     * Destructor.
+     */
+    public function __destruct()
+    {
+        //Close any open SMTP connection nicely
+        $this->smtpClose();
+    }
+
+    /**
+     * Call mail() in a safe_mode-aware fashion.
+     * Also, unless sendmail_path points to sendmail (or something that
+     * claims to be sendmail), don't pass params (not a perfect fix,
+     * but it will do)
+     * @param string $to To
+     * @param string $subject Subject
+     * @param string $body Message Body
+     * @param string $header Additional Header(s)
+     * @param string $params Params
+     * @access private
+     * @return boolean
+     */
+    private function mailPassthru($to, $subject, $body, $header, $params)
+    {
+        //Check overloading of mail function to avoid double-encoding
+        if (ini_get('mbstring.func_overload') & 1) {
+            $subject = $this->secureHeader($subject);
+        } else {
+            $subject = $this->encodeHeader($this->secureHeader($subject));
+        }
+
+        //Can't use additional_parameters in safe_mode, calling mail() with null params breaks
+        //@link http://php.net/manual/en/function.mail.php
+        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
+            $result = @mail($to, $subject, $body, $header);
+        } else {
+            $result = @mail($to, $subject, $body, $header, $params);
+        }
+        return $result;
+    }
+    /**
+     * Output debugging info via user-defined method.
+     * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug).
+     * @see PHPMailer::$Debugoutput
+     * @see PHPMailer::$SMTPDebug
+     * @param string $str
+     */
+    protected function edebug($str)
+    {
+        if ($this->SMTPDebug <= 0) {
+            return;
+        }
+        //Avoid clash with built-in function names
+        if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
+            call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
+            return;
+        }
+        switch ($this->Debugoutput) {
+            case 'error_log':
+                //Don't output, just log
+                error_log($str);
+                break;
+            case 'html':
+                //Cleans up output a bit for a better looking, HTML-safe output
+                echo htmlentities(
+                    preg_replace('/[\r\n]+/', '', $str),
+                    ENT_QUOTES,
+                    'UTF-8'
+                )
+                . "<br>\n";
+                break;
+            case 'echo':
+            default:
+                //Normalize line breaks
+                $str = preg_replace('/\r\n?/ms', "\n", $str);
+                echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
+                    "\n",
+                    "\n                   \t                  ",
+                    trim($str)
+                ) . "\n";
+        }
+    }
+
+    /**
+     * Sets message type to HTML or plain.
+     * @param boolean $isHtml True for HTML mode.
+     * @return void
+     */
+    public function isHTML($isHtml = true)
+    {
+        if ($isHtml) {
+            $this->ContentType = 'text/html';
+        } else {
+            $this->ContentType = 'text/plain';
+        }
+    }
+
+    /**
+     * Send messages using SMTP.
+     * @return void
+     */
+    public function isSMTP()
+    {
+        $this->Mailer = 'smtp';
+    }
+
+    /**
+     * Send messages using PHP's mail() function.
+     * @return void
+     */
+    public function isMail()
+    {
+        $this->Mailer = 'mail';
+    }
+
+    /**
+     * Send messages using $Sendmail.
+     * @return void
+     */
+    public function isSendmail()
+    {
+        $ini_sendmail_path = ini_get('sendmail_path');
+
+        if (!stristr($ini_sendmail_path, 'sendmail')) {
+            $this->Sendmail = '/usr/sbin/sendmail';
+        } else {
+            $this->Sendmail = $ini_sendmail_path;
+        }
+        $this->Mailer = 'sendmail';
+    }
+
+    /**
+     * Send messages using qmail.
+     * @return void
+     */
+    public function isQmail()
+    {
+        $ini_sendmail_path = ini_get('sendmail_path');
+
+        if (!stristr($ini_sendmail_path, 'qmail')) {
+            $this->Sendmail = '/var/qmail/bin/qmail-inject';
+        } else {
+            $this->Sendmail = $ini_sendmail_path;
+        }
+        $this->Mailer = 'qmail';
+    }
+
+    /**
+     * Add a "To" address.
+     * @param string $address The email address to send to
+     * @param string $name
+     * @return boolean true on success, false if address already used or invalid in some way
+     */
+    public function addAddress($address, $name = '')
+    {
+        return $this->addOrEnqueueAnAddress('to', $address, $name);
+    }
+
+    /**
+     * Add a "CC" address.
+     * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
+     * @param string $address The email address to send to
+     * @param string $name
+     * @return boolean true on success, false if address already used or invalid in some way
+     */
+    public function addCC($address, $name = '')
+    {
+        return $this->addOrEnqueueAnAddress('cc', $address, $name);
+    }
+
+    /**
+     * Add a "BCC" address.
+     * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
+     * @param string $address The email address to send to
+     * @param string $name
+     * @return boolean true on success, false if address already used or invalid in some way
+     */
+    public function addBCC($address, $name = '')
+    {
+        return $this->addOrEnqueueAnAddress('bcc', $address, $name);
+    }
+
+    /**
+     * Add a "Reply-To" address.
+     * @param string $address The email address to reply to
+     * @param string $name
+     * @return boolean true on success, false if address already used or invalid in some way
+     */
+    public function addReplyTo($address, $name = '')
+    {
+        return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
+    }
+
+    /**
+     * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
+     * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
+     * be modified after calling this function), addition of such addresses is delayed until send().
+     * Addresses that have been added already return false, but do not throw exceptions.
+     * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
+     * @param string $address The email address to send, resp. to reply to
+     * @param string $name
+     * @throws phpmailerException
+     * @return boolean true on success, false if address already used or invalid in some way
+     * @access protected
+     */
+    protected function addOrEnqueueAnAddress($kind, $address, $name)
+    {
+        $address = trim($address);
+        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+        if (($pos = strrpos($address, '@')) === false) {
+            // At-sign is misssing.
+            $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
+            $this->setError($error_message);
+            $this->edebug($error_message);
+            if ($this->exceptions) {
+                throw new phpmailerException($error_message);
+            }
+            return false;
+        }
+        $params = array($kind, $address, $name);
+        // Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
+        if ($this->has8bitChars(substr($address, ++$pos)) and $this->idnSupported()) {
+            if ($kind != 'Reply-To') {
+                if (!array_key_exists($address, $this->RecipientsQueue)) {
+                    $this->RecipientsQueue[$address] = $params;
+                    return true;
+                }
+            } else {
+                if (!array_key_exists($address, $this->ReplyToQueue)) {
+                    $this->ReplyToQueue[$address] = $params;
+                    return true;
+                }
+            }
+            return false;
+        }
+        // Immediately add standard addresses without IDN.
+        return call_user_func_array(array($this, 'addAnAddress'), $params);
+    }
+
+    /**
+     * Add an address to one of the recipient arrays or to the ReplyTo array.
+     * Addresses that have been added already return false, but do not throw exceptions.
+     * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
+     * @param string $address The email address to send, resp. to reply to
+     * @param string $name
+     * @throws phpmailerException
+     * @return boolean true on success, false if address already used or invalid in some way
+     * @access protected
+     */
+    protected function addAnAddress($kind, $address, $name = '')
+    {
+        if (!in_array($kind, array('to', 'cc', 'bcc', 'Reply-To'))) {
+            $error_message = $this->lang('Invalid recipient kind: ') . $kind;
+            $this->setError($error_message);
+            $this->edebug($error_message);
+            if ($this->exceptions) {
+                throw new phpmailerException($error_message);
+            }
+            return false;
+        }
+        if (!$this->validateAddress($address)) {
+            $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
+            $this->setError($error_message);
+            $this->edebug($error_message);
+            if ($this->exceptions) {
+                throw new phpmailerException($error_message);
+            }
+            return false;
+        }
+        if ($kind != 'Reply-To') {
+            if (!array_key_exists(strtolower($address), $this->all_recipients)) {
+                array_push($this->$kind, array($address, $name));
+                $this->all_recipients[strtolower($address)] = true;
+                return true;
+            }
+        } else {
+            if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
+                $this->ReplyTo[strtolower($address)] = array($address, $name);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
+     * of the form "display name <address>" into an array of name/address pairs.
+     * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
+     * Note that quotes in the name part are removed.
+     * @param string $addrstr The address list string
+     * @param bool $useimap Whether to use the IMAP extension to parse the list
+     * @return array
+     * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
+     */
+    public function parseAddresses($addrstr, $useimap = true)
+    {
+        $addresses = array();
+        if ($useimap and function_exists('imap_rfc822_parse_adrlist')) {
+            //Use this built-in parser if it's available
+            $list = imap_rfc822_parse_adrlist($addrstr, '');
+            foreach ($list as $address) {
+                if ($address->host != '.SYNTAX-ERROR.') {
+                    if ($this->validateAddress($address->mailbox . '@' . $address->host)) {
+                        $addresses[] = array(
+                            'name' => (property_exists($address, 'personal') ? $address->personal : ''),
+                            'address' => $address->mailbox . '@' . $address->host
+                        );
+                    }
+                }
+            }
+        } else {
+            //Use this simpler parser
+            $list = explode(',', $addrstr);
+            foreach ($list as $address) {
+                $address = trim($address);
+                //Is there a separate name part?
+                if (strpos($address, '<') === false) {
+                    //No separate name, just use the whole thing
+                    if ($this->validateAddress($address)) {
+                        $addresses[] = array(
+                            'name' => '',
+                            'address' => $address
+                        );
+                    }
+                } else {
+                    list($name, $email) = explode('<', $address);
+                    $email = trim(str_replace('>', '', $email));
+                    if ($this->validateAddress($email)) {
+                        $addresses[] = array(
+                            'name' => trim(str_replace(array('"', "'"), '', $name)),
+                            'address' => $email
+                        );
+                    }
+                }
+            }
+        }
+        return $addresses;
+    }
+
+    /**
+     * Set the From and FromName properties.
+     * @param string $address
+     * @param string $name
+     * @param boolean $auto Whether to also set the Sender address, defaults to true
+     * @throws phpmailerException
+     * @return boolean
+     */
+    public function setFrom($address, $name = '', $auto = true)
+    {
+        $address = trim($address);
+        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+        // Don't validate now addresses with IDN. Will be done in send().
+        if (($pos = strrpos($address, '@')) === false or
+            (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and
+            !$this->validateAddress($address)) {
+            $error_message = $this->lang('invalid_address') . " (setFrom) $address";
+            $this->setError($error_message);
+            $this->edebug($error_message);
+            if ($this->exceptions) {
+                throw new phpmailerException($error_message);
+            }
+            return false;
+        }
+        $this->From = $address;
+        $this->FromName = $name;
+        if ($auto) {
+            if (empty($this->Sender)) {
+                $this->Sender = $address;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Return the Message-ID header of the last email.
+     * Technically this is the value from the last time the headers were created,
+     * but it's also the message ID of the last sent message except in
+     * pathological cases.
+     * @return string
+     */
+    public function getLastMessageID()
+    {
+        return $this->lastMessageID;
+    }
+
+    /**
+     * Check that a string looks like an email address.
+     * @param string $address The email address to check
+     * @param string|callable $patternselect A selector for the validation pattern to use :
+     * * `auto` Pick best pattern automatically;
+     * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14;
+     * * `pcre` Use old PCRE implementation;
+     * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
+     * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
+     * * `noregex` Don't use a regex: super fast, really dumb.
+     * Alternatively you may pass in a callable to inject your own validator, for example:
+     * PHPMailer::validateAddress('user@example.com', function($address) {
+     *     return (strpos($address, '@') !== false);
+     * });
+     * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
+     * @return boolean
+     * @static
+     * @access public
+     */
+    public static function validateAddress($address, $patternselect = null)
+    {
+        if (is_null($patternselect)) {
+            $patternselect = self::$validator;
+        }
+        if (is_callable($patternselect)) {
+            return call_user_func($patternselect, $address);
+        }
+        //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
+        if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) {
+            return false;
+        }
+        if (!$patternselect or $patternselect == 'auto') {
+            //Check this constant first so it works when extension_loaded() is disabled by safe mode
+            //Constant was added in PHP 5.2.4
+            if (defined('PCRE_VERSION')) {
+                //This pattern can get stuck in a recursive loop in PCRE <= 8.0.2
+                if (version_compare(PCRE_VERSION, '8.0.3') >= 0) {
+                    $patternselect = 'pcre8';
+                } else {
+                    $patternselect = 'pcre';
+                }
+            } elseif (function_exists('extension_loaded') and extension_loaded('pcre')) {
+                //Fall back to older PCRE
+                $patternselect = 'pcre';
+            } else {
+                //Filter_var appeared in PHP 5.2.0 and does not require the PCRE extension
+                if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
+                    $patternselect = 'php';
+                } else {
+                    $patternselect = 'noregex';
+                }
+            }
+        }
+        switch ($patternselect) {
+            case 'pcre8':
+                /**
+                 * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains.
+                 * @link http://squiloople.com/2009/12/20/email-address-validation/
+                 * @copyright 2009-2010 Michael Rushton
+                 * Feel free to use and redistribute this code. But please keep this copyright notice.
+                 */
+                return (boolean)preg_match(
+                    '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
+                    '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
+                    '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
+                    '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
+                    '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
+                    '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
+                    '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
+                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
+                    '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
+                    $address
+                );
+            case 'pcre':
+                //An older regex that doesn't need a recent PCRE
+                return (boolean)preg_match(
+                    '/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!(?>"?(?>\\\[ -~]|[^"])"?){65,}@)(?>' .
+                    '[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*")' .
+                    '(?>\.(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*"))*' .
+                    '@(?>(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?![a-z0-9-]{64,})' .
+                    '(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)){0,126}|\[(?:(?>IPv6:(?>(?>[a-f0-9]{1,4})(?>:' .
+                    '[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\]]){8,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?' .
+                    '::(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?))|(?>(?>IPv6:(?>[a-f0-9]{1,4}(?>:' .
+                    '[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4})?' .
+                    '::(?>(?:[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4}):)?))?(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
+                    '|[1-9]?[0-9])(?>\.(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\])$/isD',
+                    $address
+                );
+            case 'html5':
+                /**
+                 * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
+                 * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
+                 */
+                return (boolean)preg_match(
+                    '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
+                    '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
+                    $address
+                );
+            case 'noregex':
+                //No PCRE! Do something _very_ approximate!
+                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
+                return (strlen($address) >= 3
+                    and strpos($address, '@') >= 1
+                    and strpos($address, '@') != strlen($address) - 1);
+            case 'php':
+            default:
+                return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL);
+        }
+    }
+
+    /**
+     * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
+     * "intl" and "mbstring" PHP extensions.
+     * @return bool "true" if required functions for IDN support are present
+     */
+    public function idnSupported()
+    {
+        // @TODO: Write our own "idn_to_ascii" function for PHP <= 5.2.
+        return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding');
+    }
+
+    /**
+     * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
+     * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
+     * This function silently returns unmodified address if:
+     * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
+     * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
+     *   or fails for any reason (e.g. domain has characters not allowed in an IDN)
+     * @see PHPMailer::$CharSet
+     * @param string $address The email address to convert
+     * @return string The encoded address in ASCII form
+     */
+    public function punyencodeAddress($address)
+    {
+        // Verify we have required functions, CharSet, and at-sign.
+        if ($this->idnSupported() and
+            !empty($this->CharSet) and
+            ($pos = strrpos($address, '@')) !== false) {
+            $domain = substr($address, ++$pos);
+            // Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
+            if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) {
+                $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet);
+                if (($punycode = defined('INTL_IDNA_VARIANT_UTS46') ?
+                    idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46) :
+                    idn_to_ascii($domain)) !== false) {
+                    return substr($address, 0, $pos) . $punycode;
+                }
+            }
+        }
+        return $address;
+    }
+
+    /**
+     * Create a message and send it.
+     * Uses the sending method specified by $Mailer.
+     * @throws phpmailerException
+     * @return boolean false on error - See the ErrorInfo property for details of the error.
+     */
+    public function send()
+    {
+        try {
+            if (!$this->preSend()) {
+                return false;
+            }
+            return $this->postSend();
+        } catch (phpmailerException $exc) {
+            $this->mailHeader = '';
+            $this->setError($exc->getMessage());
+            if ($this->exceptions) {
+                throw $exc;
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Prepare a message for sending.
+     * @throws phpmailerException
+     * @return boolean
+     */
+    public function preSend()
+    {
+        try {
+            $this->error_count = 0; // Reset errors
+            $this->mailHeader = '';
+
+            // Dequeue recipient and Reply-To addresses with IDN
+            foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
+                $params[1] = $this->punyencodeAddress($params[1]);
+                call_user_func_array(array($this, 'addAnAddress'), $params);
+            }
+            if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
+                throw new phpmailerException($this->lang('provide_address'), self::STOP_CRITICAL);
+            }
+
+            // Validate From, Sender, and ConfirmReadingTo addresses
+            foreach (array('From', 'Sender', 'ConfirmReadingTo') as $address_kind) {
+                $this->$address_kind = trim($this->$address_kind);
+                if (empty($this->$address_kind)) {
+                    continue;
+                }
+                $this->$address_kind = $this->punyencodeAddress($this->$address_kind);
+                if (!$this->validateAddress($this->$address_kind)) {
+                    $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind;
+                    $this->setError($error_message);
+                    $this->edebug($error_message);
+                    if ($this->exceptions) {
+                        throw new phpmailerException($error_message);
+                    }
+                    return false;
+                }
+            }
+
+            // Set whether the message is multipart/alternative
+            if ($this->alternativeExists()) {
+                $this->ContentType = 'multipart/alternative';
+            }
+
+            $this->setMessageType();
+            // Refuse to send an empty message unless we are specifically allowing it
+            if (!$this->AllowEmpty and empty($this->Body)) {
+                throw new phpmailerException($this->lang('empty_message'), self::STOP_CRITICAL);
+            }
+
+            // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
+            $this->MIMEHeader = '';
+            $this->MIMEBody = $this->createBody();
+            // createBody may have added some headers, so retain them
+            $tempheaders = $this->MIMEHeader;
+            $this->MIMEHeader = $this->createHeader();
+            $this->MIMEHeader .= $tempheaders;
+
+            // To capture the complete message when using mail(), create
+            // an extra header list which createHeader() doesn't fold in
+            if ($this->Mailer == 'mail') {
+                if (count($this->to) > 0) {
+                    $this->mailHeader .= $this->addrAppend('To', $this->to);
+                } else {
+                    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
+                }
+                $this->mailHeader .= $this->headerLine(
+                    'Subject',
+                    $this->encodeHeader($this->secureHeader(trim($this->Subject)))
+                );
+            }
+
+            // Sign with DKIM if enabled
+            if (!empty($this->DKIM_domain)
+                && !empty($this->DKIM_selector)
+                && (!empty($this->DKIM_private_string)
+                   || (!empty($this->DKIM_private) && file_exists($this->DKIM_private))
+                )
+            ) {
+                $header_dkim = $this->DKIM_Add(
+                    $this->MIMEHeader . $this->mailHeader,
+                    $this->encodeHeader($this->secureHeader($this->Subject)),
+                    $this->MIMEBody
+                );
+                $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . self::CRLF .
+                    str_replace("\r\n", "\n", $header_dkim) . self::CRLF;
+            }
+            return true;
+        } catch (phpmailerException $exc) {
+            $this->setError($exc->getMessage());
+            if ($this->exceptions) {
+                throw $exc;
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Actually send a message.
+     * Send the email via the selected mechanism
+     * @throws phpmailerException
+     * @return boolean
+     */
+    public function postSend()
+    {
+        try {
+            // Choose the mailer and send through it
+            switch ($this->Mailer) {
+                case 'sendmail':
+                case 'qmail':
+                    return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
+                case 'smtp':
+                    return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
+                case 'mail':
+                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
+                default:
+                    $sendMethod = $this->Mailer.'Send';
+                    if (method_exists($this, $sendMethod)) {
+                        return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);
+                    }
+
+                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
+            }
+        } catch (phpmailerException $exc) {
+            $this->setError($exc->getMessage());
+            $this->edebug($exc->getMessage());
+            if ($this->exceptions) {
+                throw $exc;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Send mail using the $Sendmail program.
+     * @param string $header The message headers
+     * @param string $body The message body
+     * @see PHPMailer::$Sendmail
+     * @throws phpmailerException
+     * @access protected
+     * @return boolean
+     */
+    protected function sendmailSend($header, $body)
+    {
+        // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
+        if (!empty($this->Sender) and self::isShellSafe($this->Sender)) {
+            if ($this->Mailer == 'qmail') {
+                $sendmailFmt = '%s -f%s';
+            } else {
+                $sendmailFmt = '%s -oi -f%s -t';
+            }
+        } else {
+            if ($this->Mailer == 'qmail') {
+                $sendmailFmt = '%s';
+            } else {
+                $sendmailFmt = '%s -oi -t';
+            }
+        }
+
+        // TODO: If possible, this should be changed to escapeshellarg.  Needs thorough testing.
+        $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
+
+        if ($this->SingleTo) {
+            foreach ($this->SingleToArray as $toAddr) {
+                if (!@$mail = popen($sendmail, 'w')) {
+                    throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+                }
+                fputs($mail, 'To: ' . $toAddr . "\n");
+                fputs($mail, $header);
+                fputs($mail, $body);
+                $result = pclose($mail);
+                $this->doCallback(
+                    ($result == 0),
+                    array($toAddr),
+                    $this->cc,
+                    $this->bcc,
+                    $this->Subject,
+                    $body,
+                    $this->From
+                );
+                if ($result != 0) {
+                    throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+                }
+            }
+        } else {
+            if (!@$mail = popen($sendmail, 'w')) {
+                throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+            }
+            fputs($mail, $header);
+            fputs($mail, $body);
+            $result = pclose($mail);
+            $this->doCallback(
+                ($result == 0),
+                $this->to,
+                $this->cc,
+                $this->bcc,
+                $this->Subject,
+                $body,
+                $this->From
+            );
+            if ($result != 0) {
+                throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.
+     *
+     * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
+     * @param string $string The string to be validated
+     * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report
+     * @access protected
+     * @return boolean
+     */
+    protected static function isShellSafe($string)
+    {
+        // Future-proof
+        if (escapeshellcmd($string) !== $string
+            or !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))
+        ) {
+            return false;
+        }
+
+        $length = strlen($string);
+
+        for ($i = 0; $i < $length; $i++) {
+            $c = $string[$i];
+
+            // All other characters have a special meaning in at least one common shell, including = and +.
+            // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
+            // Note that this does permit non-Latin alphanumeric characters based on the current locale.
+            if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Send mail using the PHP mail() function.
+     * @param string $header The message headers
+     * @param string $body The message body
+     * @link http://www.php.net/manual/en/book.mail.php
+     * @throws phpmailerException
+     * @access protected
+     * @return boolean
+     */
+    protected function mailSend($header, $body)
+    {
+        $toArr = array();
+        foreach ($this->to as $toaddr) {
+            $toArr[] = $this->addrFormat($toaddr);
+        }
+        $to = implode(', ', $toArr);
+
+        $params = null;
+        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
+        if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
+            // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
+            if (self::isShellSafe($this->Sender)) {
+                $params = sprintf('-f%s', $this->Sender);
+            }
+        }
+        if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) {
+            $old_from = ini_get('sendmail_from');
+            ini_set('sendmail_from', $this->Sender);
+        }
+        $result = false;
+        if ($this->SingleTo and count($toArr) > 1) {
+            foreach ($toArr as $toAddr) {
+                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
+                $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From);
+            }
+        } else {
+            $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
+            $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From);
+        }
+        if (isset($old_from)) {
+            ini_set('sendmail_from', $old_from);
+        }
+        if (!$result) {
+            throw new phpmailerException($this->lang('instantiate'), self::STOP_CRITICAL);
+        }
+        return true;
+    }
+
+    /**
+     * Get an instance to use for SMTP operations.
+     * Override this function to load your own SMTP implementation
+     * @return SMTP
+     */
+    public function getSMTPInstance()
+    {
+        if (!is_object($this->smtp)) {
+            $this->smtp = new SMTP;
+        }
+        return $this->smtp;
+    }
+
+    /**
+     * Send mail via SMTP.
+     * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
+     * Uses the PHPMailerSMTP class by default.
+     * @see PHPMailer::getSMTPInstance() to use a different class.
+     * @param string $header The message headers
+     * @param string $body The message body
+     * @throws phpmailerException
+     * @uses SMTP
+     * @access protected
+     * @return boolean
+     */
+    protected function smtpSend($header, $body)
+    {
+        $bad_rcpt = array();
+        if (!$this->smtpConnect($this->SMTPOptions)) {
+            throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
+        }
+        if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
+            $smtp_from = $this->Sender;
+        } else {
+            $smtp_from = $this->From;
+        }
+        if (!$this->smtp->mail($smtp_from)) {
+            $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
+            throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
+        }
+
+        // Attempt to send to all recipients
+        foreach (array($this->to, $this->cc, $this->bcc) as $togroup) {
+            foreach ($togroup as $to) {
+                if (!$this->smtp->recipient($to[0])) {
+                    $error = $this->smtp->getError();
+                    $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']);
+                    $isSent = false;
+                } else {
+                    $isSent = true;
+                }
+                $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From);
+            }
+        }
+
+        // Only send the DATA command if we have viable recipients
+        if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) {
+            throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
+        }
+        if ($this->SMTPKeepAlive) {
+            $this->smtp->reset();
+        } else {
+            $this->smtp->quit();
+            $this->smtp->close();
+        }
+        //Create error message for any bad addresses
+        if (count($bad_rcpt) > 0) {
+            $errstr = '';
+            foreach ($bad_rcpt as $bad) {
+                $errstr .= $bad['to'] . ': ' . $bad['error'];
+            }
+            throw new phpmailerException(
+                $this->lang('recipients_failed') . $errstr,
+                self::STOP_CONTINUE
+            );
+        }
+        return true;
+    }
+
+    /**
+     * Initiate a connection to an SMTP server.
+     * Returns false if the operation failed.
+     * @param array $options An array of options compatible with stream_context_create()
+     * @uses SMTP
+     * @access public
+     * @throws phpmailerException
+     * @return boolean
+     */
+    public function smtpConnect($options = null)
+    {
+        if (is_null($this->smtp)) {
+            $this->smtp = $this->getSMTPInstance();
+        }
+
+        //If no options are provided, use whatever is set in the instance
+        if (is_null($options)) {
+            $options = $this->SMTPOptions;
+        }
+
+        // Already connected?
+        if ($this->smtp->connected()) {
+            return true;
+        }
+
+        $this->smtp->setTimeout($this->Timeout);
+        $this->smtp->setDebugLevel($this->SMTPDebug);
+        $this->smtp->setDebugOutput($this->Debugoutput);
+        $this->smtp->setVerp($this->do_verp);
+        $hosts = explode(';', $this->Host);
+        $lastexception = null;
+
+        foreach ($hosts as $hostentry) {
+            $hostinfo = array();
+            if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
+                // Not a valid host entry
+                continue;
+            }
+            // $hostinfo[2]: optional ssl or tls prefix
+            // $hostinfo[3]: the hostname
+            // $hostinfo[4]: optional port number
+            // The host string prefix can temporarily override the current setting for SMTPSecure
+            // If it's not specified, the default value is used
+            $prefix = '';
+            $secure = $this->SMTPSecure;
+            $tls = ($this->SMTPSecure == 'tls');
+            if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
+                $prefix = 'ssl://';
+                $tls = false; // Can't have SSL and TLS at the same time
+                $secure = 'ssl';
+            } elseif ($hostinfo[2] == 'tls') {
+                $tls = true;
+                // tls doesn't use a prefix
+                $secure = 'tls';
+            }
+            //Do we need the OpenSSL extension?
+            $sslext = defined('OPENSSL_ALGO_SHA1');
+            if ('tls' === $secure or 'ssl' === $secure) {
+                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
+                if (!$sslext) {
+                    throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
+                }
+            }
+            $host = $hostinfo[3];
+            $port = $this->Port;
+            $tport = (integer)$hostinfo[4];
+            if ($tport > 0 and $tport < 65536) {
+                $port = $tport;
+            }
+            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
+                try {
+                    if ($this->Helo) {
+                        $hello = $this->Helo;
+                    } else {
+                        $hello = $this->serverHostname();
+                    }
+                    $this->smtp->hello($hello);
+                    //Automatically enable TLS encryption if:
+                    // * it's not disabled
+                    // * we have openssl extension
+                    // * we are not already using SSL
+                    // * the server offers STARTTLS
+                    if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
+                        $tls = true;
+                    }
+                    if ($tls) {
+                        if (!$this->smtp->startTLS()) {
+                            throw new phpmailerException($this->lang('connect_host'));
+                        }
+                        // We must resend EHLO after TLS negotiation
+                        $this->smtp->hello($hello);
+                    }
+                    if ($this->SMTPAuth) {
+                        if (!$this->smtp->authenticate(
+                            $this->Username,
+                            $this->Password,
+                            $this->AuthType,
+                            $this->Realm,
+                            $this->Workstation
+                        )
+                        ) {
+                            throw new phpmailerException($this->lang('authenticate'));
+                        }
+                    }
+                    return true;
+                } catch (phpmailerException $exc) {
+                    $lastexception = $exc;
+                    $this->edebug($exc->getMessage());
+                    // We must have connected, but then failed TLS or Auth, so close connection nicely
+                    $this->smtp->quit();
+                }
+            }
+        }
+        // If we get here, all connection attempts have failed, so close connection hard
+        $this->smtp->close();
+        // As we've caught all exceptions, just report whatever the last one was
+        if ($this->exceptions and !is_null($lastexception)) {
+            throw $lastexception;
+        }
+        return false;
+    }
+
+    /**
+     * Close the active SMTP session if one exists.
+     * @return void
+     */
+    public function smtpClose()
+    {
+        if (is_a($this->smtp, 'SMTP')) {
+            if ($this->smtp->connected()) {
+                $this->smtp->quit();
+                $this->smtp->close();
+            }
+        }
+    }
+
+    /**
+     * Set the language for error messages.
+     * Returns false if it cannot load the language file.
+     * The default language is English.
+     * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr")
+     * @param string $lang_path Path to the language file directory, with trailing separator (slash)
+     * @return boolean
+     * @access public
+     */
+    public function setLanguage($langcode = 'en', $lang_path = '')
+    {
+        // Backwards compatibility for renamed language codes
+        $renamed_langcodes = array(
+            'br' => 'pt_br',
+            'cz' => 'cs',
+            'dk' => 'da',
+            'no' => 'nb',
+            'se' => 'sv',
+        );
+
+        if (isset($renamed_langcodes[$langcode])) {
+            $langcode = $renamed_langcodes[$langcode];
+        }
+
+        // Define full set of translatable strings in English
+        $PHPMAILER_LANG = array(
+            'authenticate' => 'SMTP Error: Could not authenticate.',
+            'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
+            'data_not_accepted' => 'SMTP Error: data not accepted.',
+            'empty_message' => 'Message body empty',
+            'encoding' => 'Unknown encoding: ',
+            'execute' => 'Could not execute: ',
+            'file_access' => 'Could not access file: ',
+            'file_open' => 'File Error: Could not open file: ',
+            'from_failed' => 'The following From address failed: ',
+            'instantiate' => 'Could not instantiate mail function.',
+            'invalid_address' => 'Invalid address: ',
+            'mailer_not_supported' => ' mailer is not supported.',
+            'provide_address' => 'You must provide at least one recipient email address.',
+            'recipients_failed' => 'SMTP Error: The following recipients failed: ',
+            'signing' => 'Signing Error: ',
+            'smtp_connect_failed' => 'SMTP connect() failed.',
+            'smtp_error' => 'SMTP server error: ',
+            'variable_set' => 'Cannot set or reset variable: ',
+            'extension_missing' => 'Extension missing: '
+        );
+        if (empty($lang_path)) {
+            // Calculate an absolute path so it can work if CWD is not here
+            $lang_path = dirname(__FILE__). DIRECTORY_SEPARATOR . 'language'. DIRECTORY_SEPARATOR;
+        }
+        //Validate $langcode
+        if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
+            $langcode = 'en';
+        }
+        $foundlang = true;
+        $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
+        // There is no English translation file
+        if ($langcode != 'en') {
+            // Make sure language file path is readable
+            if (!is_readable($lang_file)) {
+                $foundlang = false;
+            } else {
+                // Overwrite language-specific strings.
+                // This way we'll never have missing translation keys.
+                $foundlang = include $lang_file;
+            }
+        }
+        $this->language = $PHPMAILER_LANG;
+        return (boolean)$foundlang; // Returns false if language not found
+    }
+
+    /**
+     * Get the array of strings for the current language.
+     * @return array
+     */
+    public function getTranslations()
+    {
+        return $this->language;
+    }
+
+    /**
+     * Create recipient headers.
+     * @access public
+     * @param string $type
+     * @param array $addr An array of recipient,
+     * where each recipient is a 2-element indexed array with element 0 containing an address
+     * and element 1 containing a name, like:
+     * array(array('joe@example.com', 'Joe User'), array('zoe@example.com', 'Zoe User'))
+     * @return string
+     */
+    public function addrAppend($type, $addr)
+    {
+        $addresses = array();
+        foreach ($addr as $address) {
+            $addresses[] = $this->addrFormat($address);
+        }
+        return $type . ': ' . implode(', ', $addresses) . $this->LE;
+    }
+
+    /**
+     * Format an address for use in a message header.
+     * @access public
+     * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name
+     *      like array('joe@example.com', 'Joe User')
+     * @return string
+     */
+    public function addrFormat($addr)
+    {
+        if (empty($addr[1])) { // No name provided
+            return $this->secureHeader($addr[0]);
+        } else {
+            return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader(
+                $addr[0]
+            ) . '>';
+        }
+    }
+
+    /**
+     * Word-wrap message.
+     * For use with mailers that do not automatically perform wrapping
+     * and for quoted-printable encoded messages.
+     * Original written by philippe.
+     * @param string $message The message to wrap
+     * @param integer $length The line length to wrap to
+     * @param boolean $qp_mode Whether to run in Quoted-Printable mode
+     * @access public
+     * @return string
+     */
+    public function wrapText($message, $length, $qp_mode = false)
+    {
+        if ($qp_mode) {
+            $soft_break = sprintf(' =%s', $this->LE);
+        } else {
+            $soft_break = $this->LE;
+        }
+        // If utf-8 encoding is used, we will need to make sure we don't
+        // split multibyte characters when we wrap
+        $is_utf8 = (strtolower($this->CharSet) == 'utf-8');
+        $lelen = strlen($this->LE);
+        $crlflen = strlen(self::CRLF);
+
+        $message = $this->fixEOL($message);
+        //Remove a trailing line break
+        if (substr($message, -$lelen) == $this->LE) {
+            $message = substr($message, 0, -$lelen);
+        }
+
+        //Split message into lines
+        $lines = explode($this->LE, $message);
+        //Message will be rebuilt in here
+        $message = '';
+        foreach ($lines as $line) {
+            $words = explode(' ', $line);
+            $buf = '';
+            $firstword = true;
+            foreach ($words as $word) {
+                if ($qp_mode and (strlen($word) > $length)) {
+                    $space_left = $length - strlen($buf) - $crlflen;
+                    if (!$firstword) {
+                        if ($space_left > 20) {
+                            $len = $space_left;
+                            if ($is_utf8) {
+                                $len = $this->utf8CharBoundary($word, $len);
+                            } elseif (substr($word, $len - 1, 1) == '=') {
+                                $len--;
+                            } elseif (substr($word, $len - 2, 1) == '=') {
+                                $len -= 2;
+                            }
+                            $part = substr($word, 0, $len);
+                            $word = substr($word, $len);
+                            $buf .= ' ' . $part;
+                            $message .= $buf . sprintf('=%s', self::CRLF);
+                        } else {
+                            $message .= $buf . $soft_break;
+                        }
+                        $buf = '';
+                    }
+                    while (strlen($word) > 0) {
+                        if ($length <= 0) {
+                            break;
+                        }
+                        $len = $length;
+                        if ($is_utf8) {
+                            $len = $this->utf8CharBoundary($word, $len);
+                        } elseif (substr($word, $len - 1, 1) == '=') {
+                            $len--;
+                        } elseif (substr($word, $len - 2, 1) == '=') {
+                            $len -= 2;
+                        }
+                        $part = substr($word, 0, $len);
+                        $word = substr($word, $len);
+
+                        if (strlen($word) > 0) {
+                            $message .= $part . sprintf('=%s', self::CRLF);
+                        } else {
+                            $buf = $part;
+                        }
+                    }
+                } else {
+                    $buf_o = $buf;
+                    if (!$firstword) {
+                        $buf .= ' ';
+                    }
+                    $buf .= $word;
+
+                    if (strlen($buf) > $length and $buf_o != '') {
+                        $message .= $buf_o . $soft_break;
+                        $buf = $word;
+                    }
+                }
+                $firstword = false;
+            }
+            $message .= $buf . self::CRLF;
+        }
+
+        return $message;
+    }
+
+    /**
+     * Find the last character boundary prior to $maxLength in a utf-8
+     * quoted-printable encoded string.
+     * Original written by Colin Brown.
+     * @access public
+     * @param string $encodedText utf-8 QP text
+     * @param integer $maxLength Find the last character boundary prior to this length
+     * @return integer
+     */
+    public function utf8CharBoundary($encodedText, $maxLength)
+    {
+        $foundSplitPos = false;
+        $lookBack = 3;
+        while (!$foundSplitPos) {
+            $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
+            $encodedCharPos = strpos($lastChunk, '=');
+            if (false !== $encodedCharPos) {
+                // Found start of encoded character byte within $lookBack block.
+                // Check the encoded byte value (the 2 chars after the '=')
+                $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
+                $dec = hexdec($hex);
+                if ($dec < 128) {
+                    // Single byte character.
+                    // If the encoded char was found at pos 0, it will fit
+                    // otherwise reduce maxLength to start of the encoded char
+                    if ($encodedCharPos > 0) {
+                        $maxLength = $maxLength - ($lookBack - $encodedCharPos);
+                    }
+                    $foundSplitPos = true;
+                } elseif ($dec >= 192) {
+                    // First byte of a multi byte character
+                    // Reduce maxLength to split at start of character
+                    $maxLength = $maxLength - ($lookBack - $encodedCharPos);
+                    $foundSplitPos = true;
+                } elseif ($dec < 192) {
+                    // Middle byte of a multi byte character, look further back
+                    $lookBack += 3;
+                }
+            } else {
+                // No encoded character found
+                $foundSplitPos = true;
+            }
+        }
+        return $maxLength;
+    }
+
+    /**
+     * Apply word wrapping to the message body.
+     * Wraps the message body to the number of chars set in the WordWrap property.
+     * You should only do this to plain-text bodies as wrapping HTML tags may break them.
+     * This is called automatically by createBody(), so you don't need to call it yourself.
+     * @access public
+     * @return void
+     */
+    public function setWordWrap()
+    {
+        if ($this->WordWrap < 1) {
+            return;
+        }
+
+        switch ($this->message_type) {
+            case 'alt':
+            case 'alt_inline':
+            case 'alt_attach':
+            case 'alt_inline_attach':
+                $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
+                break;
+            default:
+                $this->Body = $this->wrapText($this->Body, $this->WordWrap);
+                break;
+        }
+    }
+
+    /**
+     * Assemble message headers.
+     * @access public
+     * @return string The assembled headers
+     */
+    public function createHeader()
+    {
+        $result = '';
+
+        if ($this->MessageDate == '') {
+            $this->MessageDate = self::rfcDate();
+        }
+        $result .= $this->headerLine('Date', $this->MessageDate);
+
+        // To be created automatically by mail()
+        if ($this->SingleTo) {
+            if ($this->Mailer != 'mail') {
+                foreach ($this->to as $toaddr) {
+                    $this->SingleToArray[] = $this->addrFormat($toaddr);
+                }
+            }
+        } else {
+            if (count($this->to) > 0) {
+                if ($this->Mailer != 'mail') {
+                    $result .= $this->addrAppend('To', $this->to);
+                }
+            } elseif (count($this->cc) == 0) {
+                $result .= $this->headerLine('To', 'undisclosed-recipients:;');
+            }
+        }
+
+        $result .= $this->addrAppend('From', array(array(trim($this->From), $this->FromName)));
+
+        // sendmail and mail() extract Cc from the header before sending
+        if (count($this->cc) > 0) {
+            $result .= $this->addrAppend('Cc', $this->cc);
+        }
+
+        // sendmail and mail() extract Bcc from the header before sending
+        if ((
+                $this->Mailer == 'sendmail' or $this->Mailer == 'qmail' or $this->Mailer == 'mail'
+            )
+            and count($this->bcc) > 0
+        ) {
+            $result .= $this->addrAppend('Bcc', $this->bcc);
+        }
+
+        if (count($this->ReplyTo) > 0) {
+            $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
+        }
+
+        // mail() sets the subject itself
+        if ($this->Mailer != 'mail') {
+            $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
+        }
+
+        // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
+        // https://tools.ietf.org/html/rfc5322#section-3.6.4
+        if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) {
+            $this->lastMessageID = $this->MessageID;
+        } else {
+            $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
+        }
+        $result .= $this->headerLine('Message-ID', $this->lastMessageID);
+        if (!is_null($this->Priority)) {
+            $result .= $this->headerLine('X-Priority', $this->Priority);
+        }
+        if ($this->XMailer == '') {
+            $result .= $this->headerLine(
+                'X-Mailer',
+                'PHPMailer ' . $this->Version . ' (https://github.com/PHPMailer/PHPMailer)'
+            );
+        } else {
+            $myXmailer = trim($this->XMailer);
+            if ($myXmailer) {
+                $result .= $this->headerLine('X-Mailer', $myXmailer);
+            }
+        }
+
+        if ($this->ConfirmReadingTo != '') {
+            $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
+        }
+
+        // Add custom headers
+        foreach ($this->CustomHeader as $header) {
+            $result .= $this->headerLine(
+                trim($header[0]),
+                $this->encodeHeader(trim($header[1]))
+            );
+        }
+        if (!$this->sign_key_file) {
+            $result .= $this->headerLine('MIME-Version', '1.0');
+            $result .= $this->getMailMIME();
+        }
+
+        return $result;
+    }
+
+    /**
+     * Get the message MIME type headers.
+     * @access public
+     * @return string
+     */
+    public function getMailMIME()
+    {
+        $result = '';
+        $ismultipart = true;
+        switch ($this->message_type) {
+            case 'inline':
+                $result .= $this->headerLine('Content-Type', 'multipart/related;');
+                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
+                break;
+            case 'attach':
+            case 'inline_attach':
+            case 'alt_attach':
+            case 'alt_inline_attach':
+                $result .= $this->headerLine('Content-Type', 'multipart/mixed;');
+                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
+                break;
+            case 'alt':
+            case 'alt_inline':
+                $result .= $this->headerLine('Content-Type', 'multipart/alternative;');
+                $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
+                break;
+            default:
+                // Catches case 'plain': and case '':
+                $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
+                $ismultipart = false;
+                break;
+        }
+        // RFC1341 part 5 says 7bit is assumed if not specified
+        if ($this->Encoding != '7bit') {
+            // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
+            if ($ismultipart) {
+                if ($this->Encoding == '8bit') {
+                    $result .= $this->headerLine('Content-Transfer-Encoding', '8bit');
+                }
+                // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
+            } else {
+                $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
+            }
+        }
+
+        if ($this->Mailer != 'mail') {
+            $result .= $this->LE;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the whole MIME message.
+     * Includes complete headers and body.
+     * Only valid post preSend().
+     * @see PHPMailer::preSend()
+     * @access public
+     * @return string
+     */
+    public function getSentMIMEMessage()
+    {
+        return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody;
+    }
+
+    /**
+     * Create unique ID
+     * @return string
+     */
+    protected function generateId() {
+        return md5(uniqid(time()));
+    }
+
+    /**
+     * Assemble the message body.
+     * Returns an empty string on failure.
+     * @access public
+     * @throws phpmailerException
+     * @return string The assembled message body
+     */
+    public function createBody()
+    {
+        $body = '';
+        //Create unique IDs and preset boundaries
+        $this->uniqueid = $this->generateId();
+        $this->boundary[1] = 'b1_' . $this->uniqueid;
+        $this->boundary[2] = 'b2_' . $this->uniqueid;
+        $this->boundary[3] = 'b3_' . $this->uniqueid;
+
+        if ($this->sign_key_file) {
+            $body .= $this->getMailMIME() . $this->LE;
+        }
+
+        $this->setWordWrap();
+
+        $bodyEncoding = $this->Encoding;
+        $bodyCharSet = $this->CharSet;
+        //Can we do a 7-bit downgrade?
+        if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) {
+            $bodyEncoding = '7bit';
+            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
+            $bodyCharSet = 'us-ascii';
+        }
+        //If lines are too long, and we're not already using an encoding that will shorten them,
+        //change to quoted-printable transfer encoding for the body part only
+        if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) {
+            $bodyEncoding = 'quoted-printable';
+        }
+
+        $altBodyEncoding = $this->Encoding;
+        $altBodyCharSet = $this->CharSet;
+        //Can we do a 7-bit downgrade?
+        if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) {
+            $altBodyEncoding = '7bit';
+            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
+            $altBodyCharSet = 'us-ascii';
+        }
+        //If lines are too long, and we're not already using an encoding that will shorten them,
+        //change to quoted-printable transfer encoding for the alt body part only
+        if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) {
+            $altBodyEncoding = 'quoted-printable';
+        }
+        //Use this as a preamble in all multipart message types
+        $mimepre = "This is a multi-part message in MIME format." . $this->LE . $this->LE;
+        switch ($this->message_type) {
+            case 'inline':
+                $body .= $mimepre;
+                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->attachAll('inline', $this->boundary[1]);
+                break;
+            case 'attach':
+                $body .= $mimepre;
+                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->attachAll('attachment', $this->boundary[1]);
+                break;
+            case 'inline_attach':
+                $body .= $mimepre;
+                $body .= $this->textLine('--' . $this->boundary[1]);
+                $body .= $this->headerLine('Content-Type', 'multipart/related;');
+                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
+                $body .= $this->LE;
+                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->attachAll('inline', $this->boundary[2]);
+                $body .= $this->LE;
+                $body .= $this->attachAll('attachment', $this->boundary[1]);
+                break;
+            case 'alt':
+                $body .= $mimepre;
+                $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
+                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                if (!empty($this->Ical)) {
+                    $body .= $this->getBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', '');
+                    $body .= $this->encodeString($this->Ical, $this->Encoding);
+                    $body .= $this->LE . $this->LE;
+                }
+                $body .= $this->endBoundary($this->boundary[1]);
+                break;
+            case 'alt_inline':
+                $body .= $mimepre;
+                $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
+                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->textLine('--' . $this->boundary[1]);
+                $body .= $this->headerLine('Content-Type', 'multipart/related;');
+                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
+                $body .= $this->LE;
+                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->attachAll('inline', $this->boundary[2]);
+                $body .= $this->LE;
+                $body .= $this->endBoundary($this->boundary[1]);
+                break;
+            case 'alt_attach':
+                $body .= $mimepre;
+                $body .= $this->textLine('--' . $this->boundary[1]);
+                $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
+                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
+                $body .= $this->LE;
+                $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
+                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->endBoundary($this->boundary[2]);
+                $body .= $this->LE;
+                $body .= $this->attachAll('attachment', $this->boundary[1]);
+                break;
+            case 'alt_inline_attach':
+                $body .= $mimepre;
+                $body .= $this->textLine('--' . $this->boundary[1]);
+                $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
+                $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
+                $body .= $this->LE;
+                $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
+                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->textLine('--' . $this->boundary[2]);
+                $body .= $this->headerLine('Content-Type', 'multipart/related;');
+                $body .= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"');
+                $body .= $this->LE;
+                $body .= $this->getBoundary($this->boundary[3], $bodyCharSet, 'text/html', $bodyEncoding);
+                $body .= $this->encodeString($this->Body, $bodyEncoding);
+                $body .= $this->LE . $this->LE;
+                $body .= $this->attachAll('inline', $this->boundary[3]);
+                $body .= $this->LE;
+                $body .= $this->endBoundary($this->boundary[2]);
+                $body .= $this->LE;
+                $body .= $this->attachAll('attachment', $this->boundary[1]);
+                break;
+            default:
+                // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
+                //Reset the `Encoding` property in case we changed it for line length reasons
+                $this->Encoding = $bodyEncoding;
+                $body .= $this->encodeString($this->Body, $this->Encoding);
+                break;
+        }
+
+        if ($this->isError()) {
+            $body = '';
+        } elseif ($this->sign_key_file) {
+            try {
+                if (!defined('PKCS7_TEXT')) {
+                    throw new phpmailerException($this->lang('extension_missing') . 'openssl');
+                }
+                // @TODO would be nice to use php://temp streams here, but need to wrap for PHP < 5.1
+                $file = tempnam(sys_get_temp_dir(), 'mail');
+                if (false === file_put_contents($file, $body)) {
+                    throw new phpmailerException($this->lang('signing') . ' Could not write temp file');
+                }
+                $signed = tempnam(sys_get_temp_dir(), 'signed');
+                //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
+                if (empty($this->sign_extracerts_file)) {
+                    $sign = @openssl_pkcs7_sign(
+                        $file,
+                        $signed,
+                        'file://' . realpath($this->sign_cert_file),
+                        array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
+                        null
+                    );
+                } else {
+                    $sign = @openssl_pkcs7_sign(
+                        $file,
+                        $signed,
+                        'file://' . realpath($this->sign_cert_file),
+                        array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
+                        null,
+                        PKCS7_DETACHED,
+                        $this->sign_extracerts_file
+                    );
+                }
+                if ($sign) {
+                    @unlink($file);
+                    $body = file_get_contents($signed);
+                    @unlink($signed);
+                    //The message returned by openssl contains both headers and body, so need to split them up
+                    $parts = explode("\n\n", $body, 2);
+                    $this->MIMEHeader .= $parts[0] . $this->LE . $this->LE;
+                    $body = $parts[1];
+                } else {
+                    @unlink($file);
+                    @unlink($signed);
+                    throw new phpmailerException($this->lang('signing') . openssl_error_string());
+                }
+            } catch (phpmailerException $exc) {
+                $body = '';
+                if ($this->exceptions) {
+                    throw $exc;
+                }
+            }
+        }
+        return $body;
+    }
+
+    /**
+     * Return the start of a message boundary.
+     * @access protected
+     * @param string $boundary
+     * @param string $charSet
+     * @param string $contentType
+     * @param string $encoding
+     * @return string
+     */
+    protected function getBoundary($boundary, $charSet, $contentType, $encoding)
+    {
+        $result = '';
+        if ($charSet == '') {
+            $charSet = $this->CharSet;
+        }
+        if ($contentType == '') {
+            $contentType = $this->ContentType;
+        }
+        if ($encoding == '') {
+            $encoding = $this->Encoding;
+        }
+        $result .= $this->textLine('--' . $boundary);
+        $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
+        $result .= $this->LE;
+        // RFC1341 part 5 says 7bit is assumed if not specified
+        if ($encoding != '7bit') {
+            $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
+        }
+        $result .= $this->LE;
+
+        return $result;
+    }
+
+    /**
+     * Return the end of a message boundary.
+     * @access protected
+     * @param string $boundary
+     * @return string
+     */
+    protected function endBoundary($boundary)
+    {
+        return $this->LE . '--' . $boundary . '--' . $this->LE;
+    }
+
+    /**
+     * Set the message type.
+     * PHPMailer only supports some preset message types, not arbitrary MIME structures.
+     * @access protected
+     * @return void
+     */
+    protected function setMessageType()
+    {
+        $type = array();
+        if ($this->alternativeExists()) {
+            $type[] = 'alt';
+        }
+        if ($this->inlineImageExists()) {
+            $type[] = 'inline';
+        }
+        if ($this->attachmentExists()) {
+            $type[] = 'attach';
+        }
+        $this->message_type = implode('_', $type);
+        if ($this->message_type == '') {
+            //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
+            $this->message_type = 'plain';
+        }
+    }
+
+    /**
+     * Format a header line.
+     * @access public
+     * @param string $name
+     * @param string $value
+     * @return string
+     */
+    public function headerLine($name, $value)
+    {
+        return $name . ': ' . $value . $this->LE;
+    }
+
+    /**
+     * Return a formatted mail line.
+     * @access public
+     * @param string $value
+     * @return string
+     */
+    public function textLine($value)
+    {
+        return $value . $this->LE;
+    }
+
+    /**
+     * Add an attachment from a path on the filesystem.
+     * Never use a user-supplied path to a file!
+     * Returns false if the file could not be found or read.
+     * @param string $path Path to the attachment.
+     * @param string $name Overrides the attachment name.
+     * @param string $encoding File encoding (see $Encoding).
+     * @param string $type File extension (MIME) type.
+     * @param string $disposition Disposition to use
+     * @throws phpmailerException
+     * @return boolean
+     */
+    public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
+    {
+        try {
+            if (!@is_file($path)) {
+                throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
+            }
+
+            // If a MIME type is not specified, try to work it out from the file name
+            if ($type == '') {
+                $type = self::filenameToType($path);
+            }
+
+            $filename = basename($path);
+            if ($name == '') {
+                $name = $filename;
+            }
+
+            $this->attachment[] = array(
+                0 => $path,
+                1 => $filename,
+                2 => $name,
+                3 => $encoding,
+                4 => $type,
+                5 => false, // isStringAttachment
+                6 => $disposition,
+                7 => 0
+            );
+
+        } catch (phpmailerException $exc) {
+            $this->setError($exc->getMessage());
+            $this->edebug($exc->getMessage());
+            if ($this->exceptions) {
+                throw $exc;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Return the array of attachments.
+     * @return array
+     */
+    public function getAttachments()
+    {
+        return $this->attachment;
+    }
+
+    /**
+     * Attach all file, string, and binary attachments to the message.
+     * Returns an empty string on failure.
+     * @access protected
+     * @param string $disposition_type
+     * @param string $boundary
+     * @return string
+     */
+    protected function attachAll($disposition_type, $boundary)
+    {
+        // Return text of body
+        $mime = array();
+        $cidUniq = array();
+        $incl = array();
+
+        // Add all attachments
+        foreach ($this->attachment as $attachment) {
+            // Check if it is a valid disposition_filter
+            if ($attachment[6] == $disposition_type) {
+                // Check for string attachment
+                $string = '';
+                $path = '';
+                $bString = $attachment[5];
+                if ($bString) {
+                    $string = $attachment[0];
+                } else {
+                    $path = $attachment[0];
+                }
+
+                $inclhash = md5(serialize($attachment));
+                if (in_array($inclhash, $incl)) {
+                    continue;
+                }
+                $incl[] = $inclhash;
+                $name = $attachment[2];
+                $encoding = $attachment[3];
+                $type = $attachment[4];
+                $disposition = $attachment[6];
+                $cid = $attachment[7];
+                if ($disposition == 'inline' && array_key_exists($cid, $cidUniq)) {
+                    continue;
+                }
+                $cidUniq[$cid] = true;
+
+                $mime[] = sprintf('--%s%s', $boundary, $this->LE);
+                //Only include a filename property if we have one
+                if (!empty($name)) {
+                    $mime[] = sprintf(
+                        'Content-Type: %s; name="%s"%s',
+                        $type,
+                        $this->encodeHeader($this->secureHeader($name)),
+                        $this->LE
+                    );
+                } else {
+                    $mime[] = sprintf(
+                        'Content-Type: %s%s',
+                        $type,
+                        $this->LE
+                    );
+                }
+                // RFC1341 part 5 says 7bit is assumed if not specified
+                if ($encoding != '7bit') {
+                    $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, $this->LE);
+                }
+
+                if ($disposition == 'inline') {
+                    $mime[] = sprintf('Content-ID: <%s>%s', $cid, $this->LE);
+                }
+
+                // If a filename contains any of these chars, it should be quoted,
+                // but not otherwise: RFC2183 & RFC2045 5.1
+                // Fixes a warning in IETF's msglint MIME checker
+                // Allow for bypassing the Content-Disposition header totally
+                if (!(empty($disposition))) {
+                    $encoded_name = $this->encodeHeader($this->secureHeader($name));
+                    if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) {
+                        $mime[] = sprintf(
+                            'Content-Disposition: %s; filename="%s"%s',
+                            $disposition,
+                            $encoded_name,
+                            $this->LE . $this->LE
+                        );
+                    } else {
+                        if (!empty($encoded_name)) {
+                            $mime[] = sprintf(
+                                'Content-Disposition: %s; filename=%s%s',
+                                $disposition,
+                                $encoded_name,
+                                $this->LE . $this->LE
+                            );
+                        } else {
+                            $mime[] = sprintf(
+                                'Content-Disposition: %s%s',
+                                $disposition,
+                                $this->LE . $this->LE
+                            );
+                        }
+                    }
+                } else {
+                    $mime[] = $this->LE;
+                }
+
+                // Encode as string attachment
+                if ($bString) {
+                    $mime[] = $this->encodeString($string, $encoding);
+                    if ($this->isError()) {
+                        return '';
+                    }
+                    $mime[] = $this->LE . $this->LE;
+                } else {
+                    $mime[] = $this->encodeFile($path, $encoding);
+                    if ($this->isError()) {
+                        return '';
+                    }
+                    $mime[] = $this->LE . $this->LE;
+                }
+            }
+        }
+
+        $mime[] = sprintf('--%s--%s', $boundary, $this->LE);
+
+        return implode('', $mime);
+    }
+
+    /**
+     * Encode a file attachment in requested format.
+     * Returns an empty string on failure.
+     * @param string $path The full path to the file
+     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
+     * @throws phpmailerException
+     * @access protected
+     * @return string
+     */
+    protected function encodeFile($path, $encoding = 'base64')
+    {
+        try {
+            if (!is_readable($path)) {
+                throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE);
+            }
+            $magic_quotes = get_magic_quotes_runtime();
+            if ($magic_quotes) {
+                if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+                    set_magic_quotes_runtime(false);
+                } else {
+                    //Doesn't exist in PHP 5.4, but we don't need to check because
+                    //get_magic_quotes_runtime always returns false in 5.4+
+                    //so it will never get here
+                    ini_set('magic_quotes_runtime', false);
+                }
+            }
+            $file_buffer = file_get_contents($path);
+            $file_buffer = $this->encodeString($file_buffer, $encoding);
+            if ($magic_quotes) {
+                if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+                    set_magic_quotes_runtime($magic_quotes);
+                } else {
+                    ini_set('magic_quotes_runtime', $magic_quotes);
+                }
+            }
+            return $file_buffer;
+        } catch (Exception $exc) {
+            $this->setError($exc->getMessage());
+            return '';
+        }
+    }
+
+    /**
+     * Encode a string in requested format.
+     * Returns an empty string on failure.
+     * @param string $str The text to encode
+     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
+     * @access public
+     * @return string
+     */
+    public function encodeString($str, $encoding = 'base64')
+    {
+        $encoded = '';
+        switch (strtolower($encoding)) {
+            case 'base64':
+                $encoded = chunk_split(base64_encode($str), 76, $this->LE);
+                break;
+            case '7bit':
+            case '8bit':
+                $encoded = $this->fixEOL($str);
+                // Make sure it ends with a line break
+                if (substr($encoded, -(strlen($this->LE))) != $this->LE) {
+                    $encoded .= $this->LE;
+                }
+                break;
+            case 'binary':
+                $encoded = $str;
+                break;
+            case 'quoted-printable':
+                $encoded = $this->encodeQP($str);
+                break;
+            default:
+                $this->setError($this->lang('encoding') . $encoding);
+                break;
+        }
+        return $encoded;
+    }
+
+    /**
+     * Encode a header string optimally.
+     * Picks shortest of Q, B, quoted-printable or none.
+     * @access public
+     * @param string $str
+     * @param string $position
+     * @return string
+     */
+    public function encodeHeader($str, $position = 'text')
+    {
+        $matchcount = 0;
+        switch (strtolower($position)) {
+            case 'phrase':
+                if (!preg_match('/[\200-\377]/', $str)) {
+                    // Can't use addslashes as we don't know the value of magic_quotes_sybase
+                    $encoded = addcslashes($str, "\0..\37\177\\\"");
+                    if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
+                        return ($encoded);
+                    } else {
+                        return ("\"$encoded\"");
+                    }
+                }
+                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
+                break;
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'comment':
+                $matchcount = preg_match_all('/[()"]/', $str, $matches);
+                // Intentional fall-through
+            case 'text':
+            default:
+                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
+                break;
+        }
+
+        //There are no chars that need encoding
+        if ($matchcount == 0) {
+            return ($str);
+        }
+
+        $maxlen = 75 - 7 - strlen($this->CharSet);
+        // Try to select the encoding which should produce the shortest output
+        if ($matchcount > strlen($str) / 3) {
+            // More than a third of the content will need encoding, so B encoding will be most efficient
+            $encoding = 'B';
+            if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
+                // Use a custom function which correctly encodes and wraps long
+                // multibyte strings without breaking lines within a character
+                $encoded = $this->base64EncodeWrapMB($str, "\n");
+            } else {
+                $encoded = base64_encode($str);
+                $maxlen -= $maxlen % 4;
+                $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
+            }
+        } else {
+            $encoding = 'Q';
+            $encoded = $this->encodeQ($str, $position);
+            $encoded = $this->wrapText($encoded, $maxlen, true);
+            $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
+        }
+
+        $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
+        $encoded = trim(str_replace("\n", $this->LE, $encoded));
+
+        return $encoded;
+    }
+
+    /**
+     * Check if a string contains multi-byte characters.
+     * @access public
+     * @param string $str multi-byte text to wrap encode
+     * @return boolean
+     */
+    public function hasMultiBytes($str)
+    {
+        if (function_exists('mb_strlen')) {
+            return (strlen($str) > mb_strlen($str, $this->CharSet));
+        } else { // Assume no multibytes (we can't handle without mbstring functions anyway)
+            return false;
+        }
+    }
+
+    /**
+     * Does a string contain any 8-bit chars (in any charset)?
+     * @param string $text
+     * @return boolean
+     */
+    public function has8bitChars($text)
+    {
+        return (boolean)preg_match('/[\x80-\xFF]/', $text);
+    }
+
+    /**
+     * Encode and wrap long multibyte strings for mail headers
+     * without breaking lines within a character.
+     * Adapted from a function by paravoid
+     * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
+     * @access public
+     * @param string $str multi-byte text to wrap encode
+     * @param string $linebreak string to use as linefeed/end-of-line
+     * @return string
+     */
+    public function base64EncodeWrapMB($str, $linebreak = null)
+    {
+        $start = '=?' . $this->CharSet . '?B?';
+        $end = '?=';
+        $encoded = '';
+        if ($linebreak === null) {
+            $linebreak = $this->LE;
+        }
+
+        $mb_length = mb_strlen($str, $this->CharSet);
+        // Each line must have length <= 75, including $start and $end
+        $length = 75 - strlen($start) - strlen($end);
+        // Average multi-byte ratio
+        $ratio = $mb_length / strlen($str);
+        // Base64 has a 4:3 ratio
+        $avgLength = floor($length * $ratio * .75);
+
+        for ($i = 0; $i < $mb_length; $i += $offset) {
+            $lookBack = 0;
+            do {
+                $offset = $avgLength - $lookBack;
+                $chunk = mb_substr($str, $i, $offset, $this->CharSet);
+                $chunk = base64_encode($chunk);
+                $lookBack++;
+            } while (strlen($chunk) > $length);
+            $encoded .= $chunk . $linebreak;
+        }
+
+        // Chomp the last linefeed
+        $encoded = substr($encoded, 0, -strlen($linebreak));
+        return $encoded;
+    }
+
+    /**
+     * Encode a string in quoted-printable format.
+     * According to RFC2045 section 6.7.
+     * @access public
+     * @param string $string The text to encode
+     * @param integer $line_max Number of chars allowed on a line before wrapping
+     * @return string
+     * @link http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Adapted from this comment
+     */
+    public function encodeQP($string, $line_max = 76)
+    {
+        // Use native function if it's available (>= PHP5.3)
+        if (function_exists('quoted_printable_encode')) {
+            return quoted_printable_encode($string);
+        }
+        // Fall back to a pure PHP implementation
+        $string = str_replace(
+            array('%20', '%0D%0A.', '%0D%0A', '%'),
+            array(' ', "\r\n=2E", "\r\n", '='),
+            rawurlencode($string)
+        );
+        return preg_replace('/[^\r\n]{' . ($line_max - 3) . '}[^=\r\n]{2}/', "$0=\r\n", $string);
+    }
+
+    /**
+     * Backward compatibility wrapper for an old QP encoding function that was removed.
+     * @see PHPMailer::encodeQP()
+     * @access public
+     * @param string $string
+     * @param integer $line_max
+     * @param boolean $space_conv
+     * @return string
+     * @deprecated Use encodeQP instead.
+     */
+    public function encodeQPphp(
+        $string,
+        $line_max = 76,
+        /** @noinspection PhpUnusedParameterInspection */ $space_conv = false
+    ) {
+        return $this->encodeQP($string, $line_max);
+    }
+
+    /**
+     * Encode a string using Q encoding.
+     * @link http://tools.ietf.org/html/rfc2047
+     * @param string $str the text to encode
+     * @param string $position Where the text is going to be used, see the RFC for what that means
+     * @access public
+     * @return string
+     */
+    public function encodeQ($str, $position = 'text')
+    {
+        // There should not be any EOL in the string
+        $pattern = '';
+        $encoded = str_replace(array("\r", "\n"), '', $str);
+        switch (strtolower($position)) {
+            case 'phrase':
+                // RFC 2047 section 5.3
+                $pattern = '^A-Za-z0-9!*+\/ -';
+                break;
+            /** @noinspection PhpMissingBreakStatementInspection */
+            case 'comment':
+                // RFC 2047 section 5.2
+                $pattern = '\(\)"';
+                // intentional fall-through
+                // for this reason we build the $pattern without including delimiters and []
+            case 'text':
+            default:
+                // RFC 2047 section 5.1
+                // Replace every high ascii, control, =, ? and _ characters
+                $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
+                break;
+        }
+        $matches = array();
+        if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
+            // If the string contains an '=', make sure it's the first thing we replace
+            // so as to avoid double-encoding
+            $eqkey = array_search('=', $matches[0]);
+            if (false !== $eqkey) {
+                unset($matches[0][$eqkey]);
+                array_unshift($matches[0], '=');
+            }
+            foreach (array_unique($matches[0]) as $char) {
+                $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
+            }
+        }
+        // Replace every spaces to _ (more readable than =20)
+        return str_replace(' ', '_', $encoded);
+    }
+
+    /**
+     * Add a string or binary attachment (non-filesystem).
+     * This method can be used to attach ascii or binary data,
+     * such as a BLOB record from a database.
+     * @param string $string String attachment data.
+     * @param string $filename Name of the attachment.
+     * @param string $encoding File encoding (see $Encoding).
+     * @param string $type File extension (MIME) type.
+     * @param string $disposition Disposition to use
+     * @return void
+     */
+    public function addStringAttachment(
+        $string,
+        $filename,
+        $encoding = 'base64',
+        $type = '',
+        $disposition = 'attachment'
+    ) {
+        // If a MIME type is not specified, try to work it out from the file name
+        if ($type == '') {
+            $type = self::filenameToType($filename);
+        }
+        // Append to $attachment array
+        $this->attachment[] = array(
+            0 => $string,
+            1 => $filename,
+            2 => basename($filename),
+            3 => $encoding,
+            4 => $type,
+            5 => true, // isStringAttachment
+            6 => $disposition,
+            7 => 0
+        );
+    }
+
+    /**
+     * Add an embedded (inline) attachment from a file.
+     * This can include images, sounds, and just about any other document type.
+     * These differ from 'regular' attachments in that they are intended to be
+     * displayed inline with the message, not just attached for download.
+     * This is used in HTML messages that embed the images
+     * the HTML refers to using the $cid value.
+     * Never use a user-supplied path to a file!
+     * @param string $path Path to the attachment.
+     * @param string $cid Content ID of the attachment; Use this to reference
+     *        the content when using an embedded image in HTML.
+     * @param string $name Overrides the attachment name.
+     * @param string $encoding File encoding (see $Encoding).
+     * @param string $type File MIME type.
+     * @param string $disposition Disposition to use
+     * @return boolean True on successfully adding an attachment
+     */
+    public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline')
+    {
+        if (!@is_file($path)) {
+            $this->setError($this->lang('file_access') . $path);
+            return false;
+        }
+
+        // If a MIME type is not specified, try to work it out from the file name
+        if ($type == '') {
+            $type = self::filenameToType($path);
+        }
+
+        $filename = basename($path);
+        if ($name == '') {
+            $name = $filename;
+        }
+
+        // Append to $attachment array
+        $this->attachment[] = array(
+            0 => $path,
+            1 => $filename,
+            2 => $name,
+            3 => $encoding,
+            4 => $type,
+            5 => false, // isStringAttachment
+            6 => $disposition,
+            7 => $cid
+        );
+        return true;
+    }
+
+    /**
+     * Add an embedded stringified attachment.
+     * This can include images, sounds, and just about any other document type.
+     * Be sure to set the $type to an image type for images:
+     * JPEG images use 'image/jpeg', GIF uses 'image/gif', PNG uses 'image/png'.
+     * @param string $string The attachment binary data.
+     * @param string $cid Content ID of the attachment; Use this to reference
+     *        the content when using an embedded image in HTML.
+     * @param string $name
+     * @param string $encoding File encoding (see $Encoding).
+     * @param string $type MIME type.
+     * @param string $disposition Disposition to use
+     * @return boolean True on successfully adding an attachment
+     */
+    public function addStringEmbeddedImage(
+        $string,
+        $cid,
+        $name = '',
+        $encoding = 'base64',
+        $type = '',
+        $disposition = 'inline'
+    ) {
+        // If a MIME type is not specified, try to work it out from the name
+        if ($type == '' and !empty($name)) {
+            $type = self::filenameToType($name);
+        }
+
+        // Append to $attachment array
+        $this->attachment[] = array(
+            0 => $string,
+            1 => $name,
+            2 => $name,
+            3 => $encoding,
+            4 => $type,
+            5 => true, // isStringAttachment
+            6 => $disposition,
+            7 => $cid
+        );
+        return true;
+    }
+
+    /**
+     * Check if an inline attachment is present.
+     * @access public
+     * @return boolean
+     */
+    public function inlineImageExists()
+    {
+        foreach ($this->attachment as $attachment) {
+            if ($attachment[6] == 'inline') {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check if an attachment (non-inline) is present.
+     * @return boolean
+     */
+    public function attachmentExists()
+    {
+        foreach ($this->attachment as $attachment) {
+            if ($attachment[6] == 'attachment') {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check if this message has an alternative body set.
+     * @return boolean
+     */
+    public function alternativeExists()
+    {
+        return !empty($this->AltBody);
+    }
+
+    /**
+     * Clear queued addresses of given kind.
+     * @access protected
+     * @param string $kind 'to', 'cc', or 'bcc'
+     * @return void
+     */
+    public function clearQueuedAddresses($kind)
+    {
+        $RecipientsQueue = $this->RecipientsQueue;
+        foreach ($RecipientsQueue as $address => $params) {
+            if ($params[0] == $kind) {
+                unset($this->RecipientsQueue[$address]);
+            }
+        }
+    }
+
+    /**
+     * Clear all To recipients.
+     * @return void
+     */
+    public function clearAddresses()
+    {
+        foreach ($this->to as $to) {
+            unset($this->all_recipients[strtolower($to[0])]);
+        }
+        $this->to = array();
+        $this->clearQueuedAddresses('to');
+    }
+
+    /**
+     * Clear all CC recipients.
+     * @return void
+     */
+    public function clearCCs()
+    {
+        foreach ($this->cc as $cc) {
+            unset($this->all_recipients[strtolower($cc[0])]);
+        }
+        $this->cc = array();
+        $this->clearQueuedAddresses('cc');
+    }
+
+    /**
+     * Clear all BCC recipients.
+     * @return void
+     */
+    public function clearBCCs()
+    {
+        foreach ($this->bcc as $bcc) {
+            unset($this->all_recipients[strtolower($bcc[0])]);
+        }
+        $this->bcc = array();
+        $this->clearQueuedAddresses('bcc');
+    }
+
+    /**
+     * Clear all ReplyTo recipients.
+     * @return void
+     */
+    public function clearReplyTos()
+    {
+        $this->ReplyTo = array();
+        $this->ReplyToQueue = array();
+    }
+
+    /**
+     * Clear all recipient types.
+     * @return void
+     */
+    public function clearAllRecipients()
+    {
+        $this->to = array();
+        $this->cc = array();
+        $this->bcc = array();
+        $this->all_recipients = array();
+        $this->RecipientsQueue = array();
+    }
+
+    /**
+     * Clear all filesystem, string, and binary attachments.
+     * @return void
+     */
+    public function clearAttachments()
+    {
+        $this->attachment = array();
+    }
+
+    /**
+     * Clear all custom headers.
+     * @return void
+     */
+    public function clearCustomHeaders()
+    {
+        $this->CustomHeader = array();
+    }
+
+    /**
+     * Add an error message to the error container.
+     * @access protected
+     * @param string $msg
+     * @return void
+     */
+    protected function setError($msg)
+    {
+        $this->error_count++;
+        if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
+            $lasterror = $this->smtp->getError();
+            if (!empty($lasterror['error'])) {
+                $msg .= $this->lang('smtp_error') . $lasterror['error'];
+                if (!empty($lasterror['detail'])) {
+                    $msg .= ' Detail: '. $lasterror['detail'];
+                }
+                if (!empty($lasterror['smtp_code'])) {
+                    $msg .= ' SMTP code: ' . $lasterror['smtp_code'];
+                }
+                if (!empty($lasterror['smtp_code_ex'])) {
+                    $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex'];
+                }
+            }
+        }
+        $this->ErrorInfo = $msg;
+    }
+
+    /**
+     * Return an RFC 822 formatted date.
+     * @access public
+     * @return string
+     * @static
+     */
+    public static function rfcDate()
+    {
+        // Set the time zone to whatever the default is to avoid 500 errors
+        // Will default to UTC if it's not set properly in php.ini
+        date_default_timezone_set(@date_default_timezone_get());
+        return date('D, j M Y H:i:s O');
+    }
+
+    /**
+     * Get the server hostname.
+     * Returns 'localhost.localdomain' if unknown.
+     * @access protected
+     * @return string
+     */
+    protected function serverHostname()
+    {
+        $result = 'localhost.localdomain';
+        if (!empty($this->Hostname)) {
+            $result = $this->Hostname;
+        } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
+            $result = $_SERVER['SERVER_NAME'];
+        } elseif (function_exists('gethostname') && gethostname() !== false) {
+            $result = gethostname();
+        } elseif (php_uname('n') !== false) {
+            $result = php_uname('n');
+        }
+        return $result;
+    }
+
+    /**
+     * Get an error message in the current language.
+     * @access protected
+     * @param string $key
+     * @return string
+     */
+    protected function lang($key)
+    {
+        if (count($this->language) < 1) {
+            $this->setLanguage('en'); // set the default language
+        }
+
+        if (array_key_exists($key, $this->language)) {
+            if ($key == 'smtp_connect_failed') {
+                //Include a link to troubleshooting docs on SMTP connection failure
+                //this is by far the biggest cause of support questions
+                //but it's usually not PHPMailer's fault.
+                return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
+            }
+            return $this->language[$key];
+        } else {
+            //Return the key as a fallback
+            return $key;
+        }
+    }
+
+    /**
+     * Check if an error occurred.
+     * @access public
+     * @return boolean True if an error did occur.
+     */
+    public function isError()
+    {
+        return ($this->error_count > 0);
+    }
+
+    /**
+     * Ensure consistent line endings in a string.
+     * Changes every end of line from CRLF, CR or LF to $this->LE.
+     * @access public
+     * @param string $str String to fixEOL
+     * @return string
+     */
+    public function fixEOL($str)
+    {
+        // Normalise to \n
+        $nstr = str_replace(array("\r\n", "\r"), "\n", $str);
+        // Now convert LE as needed
+        if ($this->LE !== "\n") {
+            $nstr = str_replace("\n", $this->LE, $nstr);
+        }
+        return $nstr;
+    }
+
+    /**
+     * Add a custom header.
+     * $name value can be overloaded to contain
+     * both header name and value (name:value)
+     * @access public
+     * @param string $name Custom header name
+     * @param string $value Header value
+     * @return void
+     */
+    public function addCustomHeader($name, $value = null)
+    {
+        if ($value === null) {
+            // Value passed in as name:value
+            $this->CustomHeader[] = explode(':', $name, 2);
+        } else {
+            $this->CustomHeader[] = array($name, $value);
+        }
+    }
+
+    /**
+     * Returns all custom headers.
+     * @return array
+     */
+    public function getCustomHeaders()
+    {
+        return $this->CustomHeader;
+    }
+
+    /**
+     * Create a message body from an HTML string.
+     * Automatically inlines images and creates a plain-text version by converting the HTML,
+     * overwriting any existing values in Body and AltBody.
+     * Do not source $message content from user input!
+     * $basedir is prepended when handling relative URLs, e.g. <img src="/images/a.png"> and must not be empty
+     * will look for an image file in $basedir/images/a.png and convert it to inline.
+     * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)
+     * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.
+     * @access public
+     * @param string $message HTML message string
+     * @param string $basedir Absolute path to a base directory to prepend to relative paths to images
+     * @param boolean|callable $advanced Whether to use the internal HTML to text converter
+     *    or your own custom converter @see PHPMailer::html2text()
+     * @return string $message The transformed message Body
+     */
+    public function msgHTML($message, $basedir = '', $advanced = false)
+    {
+        preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images);
+        if (array_key_exists(2, $images)) {
+            if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
+                // Ensure $basedir has a trailing /
+                $basedir .= '/';
+            }
+            foreach ($images[2] as $imgindex => $url) {
+                // Convert data URIs into embedded images
+                if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) {
+                    $data = substr($url, strpos($url, ','));
+                    if ($match[2]) {
+                        $data = base64_decode($data);
+                    } else {
+                        $data = rawurldecode($data);
+                    }
+                    $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
+                    if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) {
+                        $message = str_replace(
+                            $images[0][$imgindex],
+                            $images[1][$imgindex] . '="cid:' . $cid . '"',
+                            $message
+                        );
+                    }
+                    continue;
+                }
+                if (
+                    // Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
+                    !empty($basedir)
+                    // Ignore URLs containing parent dir traversal (..)
+                    && (strpos($url, '..') === false)
+                    // Do not change urls that are already inline images
+                    && substr($url, 0, 4) !== 'cid:'
+                    // Do not change absolute URLs, including anonymous protocol
+                    && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)
+                ) {
+                    $filename = basename($url);
+                    $directory = dirname($url);
+                    if ($directory == '.') {
+                        $directory = '';
+                    }
+                    $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
+                    if (strlen($directory) > 1 && substr($directory, -1) != '/') {
+                        $directory .= '/';
+                    }
+                    if ($this->addEmbeddedImage(
+                        $basedir . $directory . $filename,
+                        $cid,
+                        $filename,
+                        'base64',
+                        self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION))
+                    )
+                    ) {
+                        $message = preg_replace(
+                            '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
+                            $images[1][$imgindex] . '="cid:' . $cid . '"',
+                            $message
+                        );
+                    }
+                }
+            }
+        }
+        $this->isHTML(true);
+        // Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better
+        $this->Body = $this->normalizeBreaks($message);
+        $this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced));
+        if (!$this->alternativeExists()) {
+            $this->AltBody = 'To view this email message, open it in a program that understands HTML!' .
+                self::CRLF . self::CRLF;
+        }
+        return $this->Body;
+    }
+
+    /**
+     * Convert an HTML string into plain text.
+     * This is used by msgHTML().
+     * Note - older versions of this function used a bundled advanced converter
+     * which was been removed for license reasons in #232.
+     * Example usage:
+     * <code>
+     * // Use default conversion
+     * $plain = $mail->html2text($html);
+     * // Use your own custom converter
+     * $plain = $mail->html2text($html, function($html) {
+     *     $converter = new MyHtml2text($html);
+     *     return $converter->get_text();
+     * });
+     * </code>
+     * @param string $html The HTML text to convert
+     * @param boolean|callable $advanced Any boolean value to use the internal converter,
+     *   or provide your own callable for custom conversion.
+     * @return string
+     */
+    public function html2text($html, $advanced = false)
+    {
+        if (is_callable($advanced)) {
+            return call_user_func($advanced, $html);
+        }
+        return html_entity_decode(
+            trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
+            ENT_QUOTES,
+            $this->CharSet
+        );
+    }
+
+    /**
+     * Get the MIME type for a file extension.
+     * @param string $ext File extension
+     * @access public
+     * @return string MIME type of file.
+     * @static
+     */
+    public static function _mime_types($ext = '')
+    {
+        $mimes = array(
+            'xl'    => 'application/excel',
+            'js'    => 'application/javascript',
+            'hqx'   => 'application/mac-binhex40',
+            'cpt'   => 'application/mac-compactpro',
+            'bin'   => 'application/macbinary',
+            'doc'   => 'application/msword',
+            'word'  => 'application/msword',
+            'xlsx'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+            'xltx'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+            'potx'  => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+            'ppsx'  => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+            'pptx'  => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+            'sldx'  => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+            'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+            'dotx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+            'xlam'  => 'application/vnd.ms-excel.addin.macroEnabled.12',
+            'xlsb'  => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+            'class' => 'application/octet-stream',
+            'dll'   => 'application/octet-stream',
+            'dms'   => 'application/octet-stream',
+            'exe'   => 'application/octet-stream',
+            'lha'   => 'application/octet-stream',
+            'lzh'   => 'application/octet-stream',
+            'psd'   => 'application/octet-stream',
+            'sea'   => 'application/octet-stream',
+            'so'    => 'application/octet-stream',
+            'oda'   => 'application/oda',
+            'pdf'   => 'application/pdf',
+            'ai'    => 'application/postscript',
+            'eps'   => 'application/postscript',
+            'ps'    => 'application/postscript',
+            'smi'   => 'application/smil',
+            'smil'  => 'application/smil',
+            'mif'   => 'application/vnd.mif',
+            'xls'   => 'application/vnd.ms-excel',
+            'ppt'   => 'application/vnd.ms-powerpoint',
+            'wbxml' => 'application/vnd.wap.wbxml',
+            'wmlc'  => 'application/vnd.wap.wmlc',
+            'dcr'   => 'application/x-director',
+            'dir'   => 'application/x-director',
+            'dxr'   => 'application/x-director',
+            'dvi'   => 'application/x-dvi',
+            'gtar'  => 'application/x-gtar',
+            'php3'  => 'application/x-httpd-php',
+            'php4'  => 'application/x-httpd-php',
+            'php'   => 'application/x-httpd-php',
+            'phtml' => 'application/x-httpd-php',
+            'phps'  => 'application/x-httpd-php-source',
+            'swf'   => 'application/x-shockwave-flash',
+            'sit'   => 'application/x-stuffit',
+            'tar'   => 'application/x-tar',
+            'tgz'   => 'application/x-tar',
+            'xht'   => 'application/xhtml+xml',
+            'xhtml' => 'application/xhtml+xml',
+            'zip'   => 'application/zip',
+            'mid'   => 'audio/midi',
+            'midi'  => 'audio/midi',
+            'mp2'   => 'audio/mpeg',
+            'mp3'   => 'audio/mpeg',
+            'mpga'  => 'audio/mpeg',
+            'aif'   => 'audio/x-aiff',
+            'aifc'  => 'audio/x-aiff',
+            'aiff'  => 'audio/x-aiff',
+            'ram'   => 'audio/x-pn-realaudio',
+            'rm'    => 'audio/x-pn-realaudio',
+            'rpm'   => 'audio/x-pn-realaudio-plugin',
+            'ra'    => 'audio/x-realaudio',
+            'wav'   => 'audio/x-wav',
+            'bmp'   => 'image/bmp',
+            'gif'   => 'image/gif',
+            'jpeg'  => 'image/jpeg',
+            'jpe'   => 'image/jpeg',
+            'jpg'   => 'image/jpeg',
+            'png'   => 'image/png',
+            'tiff'  => 'image/tiff',
+            'tif'   => 'image/tiff',
+            'eml'   => 'message/rfc822',
+            'css'   => 'text/css',
+            'html'  => 'text/html',
+            'htm'   => 'text/html',
+            'shtml' => 'text/html',
+            'log'   => 'text/plain',
+            'text'  => 'text/plain',
+            'txt'   => 'text/plain',
+            'rtx'   => 'text/richtext',
+            'rtf'   => 'text/rtf',
+            'vcf'   => 'text/vcard',
+            'vcard' => 'text/vcard',
+            'xml'   => 'text/xml',
+            'xsl'   => 'text/xml',
+            'mpeg'  => 'video/mpeg',
+            'mpe'   => 'video/mpeg',
+            'mpg'   => 'video/mpeg',
+            'mov'   => 'video/quicktime',
+            'qt'    => 'video/quicktime',
+            'rv'    => 'video/vnd.rn-realvideo',
+            'avi'   => 'video/x-msvideo',
+            'movie' => 'video/x-sgi-movie'
+        );
+        if (array_key_exists(strtolower($ext), $mimes)) {
+            return $mimes[strtolower($ext)];
+        }
+        return 'application/octet-stream';
+    }
+
+    /**
+     * Map a file name to a MIME type.
+     * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
+     * @param string $filename A file name or full path, does not need to exist as a file
+     * @return string
+     * @static
+     */
+    public static function filenameToType($filename)
+    {
+        // In case the path is a URL, strip any query string before getting extension
+        $qpos = strpos($filename, '?');
+        if (false !== $qpos) {
+            $filename = substr($filename, 0, $qpos);
+        }
+        $pathinfo = self::mb_pathinfo($filename);
+        return self::_mime_types($pathinfo['extension']);
+    }
+
+    /**
+     * Multi-byte-safe pathinfo replacement.
+     * Drop-in replacement for pathinfo(), but multibyte-safe, cross-platform-safe, old-version-safe.
+     * Works similarly to the one in PHP >= 5.2.0
+     * @link http://www.php.net/manual/en/function.pathinfo.php#107461
+     * @param string $path A filename or path, does not need to exist as a file
+     * @param integer|string $options Either a PATHINFO_* constant,
+     *      or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2
+     * @return string|array
+     * @static
+     */
+    public static function mb_pathinfo($path, $options = null)
+    {
+        $ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
+        $pathinfo = array();
+        if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) {
+            if (array_key_exists(1, $pathinfo)) {
+                $ret['dirname'] = $pathinfo[1];
+            }
+            if (array_key_exists(2, $pathinfo)) {
+                $ret['basename'] = $pathinfo[2];
+            }
+            if (array_key_exists(5, $pathinfo)) {
+                $ret['extension'] = $pathinfo[5];
+            }
+            if (array_key_exists(3, $pathinfo)) {
+                $ret['filename'] = $pathinfo[3];
+            }
+        }
+        switch ($options) {
+            case PATHINFO_DIRNAME:
+            case 'dirname':
+                return $ret['dirname'];
+            case PATHINFO_BASENAME:
+            case 'basename':
+                return $ret['basename'];
+            case PATHINFO_EXTENSION:
+            case 'extension':
+                return $ret['extension'];
+            case PATHINFO_FILENAME:
+            case 'filename':
+                return $ret['filename'];
+            default:
+                return $ret;
+        }
+    }
+
+    /**
+     * Set or reset instance properties.
+     * You should avoid this function - it's more verbose, less efficient, more error-prone and
+     * harder to debug than setting properties directly.
+     * Usage Example:
+     * `$mail->set('SMTPSecure', 'tls');`
+     *   is the same as:
+     * `$mail->SMTPSecure = 'tls';`
+     * @access public
+     * @param string $name The property name to set
+     * @param mixed $value The value to set the property to
+     * @return boolean
+     * @TODO Should this not be using the __set() magic function?
+     */
+    public function set($name, $value = '')
+    {
+        if (property_exists($this, $name)) {
+            $this->$name = $value;
+            return true;
+        } else {
+            $this->setError($this->lang('variable_set') . $name);
+            return false;
+        }
+    }
+
+    /**
+     * Strip newlines to prevent header injection.
+     * @access public
+     * @param string $str
+     * @return string
+     */
+    public function secureHeader($str)
+    {
+        return trim(str_replace(array("\r", "\n"), '', $str));
+    }
+
+    /**
+     * Normalize line breaks in a string.
+     * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
+     * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
+     * @param string $text
+     * @param string $breaktype What kind of line break to use, defaults to CRLF
+     * @return string
+     * @access public
+     * @static
+     */
+    public static function normalizeBreaks($text, $breaktype = "\r\n")
+    {
+        return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text);
+    }
+
+    /**
+     * Set the public and private key files and password for S/MIME signing.
+     * @access public
+     * @param string $cert_filename
+     * @param string $key_filename
+     * @param string $key_pass Password for private key
+     * @param string $extracerts_filename Optional path to chain certificate
+     */
+    public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
+    {
+        $this->sign_cert_file = $cert_filename;
+        $this->sign_key_file = $key_filename;
+        $this->sign_key_pass = $key_pass;
+        $this->sign_extracerts_file = $extracerts_filename;
+    }
+
+    /**
+     * Quoted-Printable-encode a DKIM header.
+     * @access public
+     * @param string $txt
+     * @return string
+     */
+    public function DKIM_QP($txt)
+    {
+        $line = '';
+        for ($i = 0; $i < strlen($txt); $i++) {
+            $ord = ord($txt[$i]);
+            if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
+                $line .= $txt[$i];
+            } else {
+                $line .= '=' . sprintf('%02X', $ord);
+            }
+        }
+        return $line;
+    }
+
+    /**
+     * Generate a DKIM signature.
+     * @access public
+     * @param string $signHeader
+     * @throws phpmailerException
+     * @return string The DKIM signature value
+     */
+    public function DKIM_Sign($signHeader)
+    {
+        if (!defined('PKCS7_TEXT')) {
+            if ($this->exceptions) {
+                throw new phpmailerException($this->lang('extension_missing') . 'openssl');
+            }
+            return '';
+        }
+        $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private);
+        if ('' != $this->DKIM_passphrase) {
+            $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
+        } else {
+            $privKey = openssl_pkey_get_private($privKeyStr);
+        }
+        //Workaround for missing digest algorithms in old PHP & OpenSSL versions
+        //@link http://stackoverflow.com/a/11117338/333340
+        if (version_compare(PHP_VERSION, '5.3.0') >= 0 and
+            in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) {
+            if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
+                openssl_pkey_free($privKey);
+                return base64_encode($signature);
+            }
+        } else {
+            $pinfo = openssl_pkey_get_details($privKey);
+            $hash = hash('sha256', $signHeader);
+            //'Magic' constant for SHA256 from RFC3447
+            //@link https://tools.ietf.org/html/rfc3447#page-43
+            $t = '3031300d060960864801650304020105000420' . $hash;
+            $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3);
+            $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t);
+
+            if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) {
+                openssl_pkey_free($privKey);
+                return base64_encode($signature);
+            }
+        }
+        openssl_pkey_free($privKey);
+        return '';
+    }
+
+    /**
+     * Generate a DKIM canonicalization header.
+     * @access public
+     * @param string $signHeader Header
+     * @return string
+     */
+    public function DKIM_HeaderC($signHeader)
+    {
+        $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader);
+        $lines = explode("\r\n", $signHeader);
+        foreach ($lines as $key => $line) {
+            list($heading, $value) = explode(':', $line, 2);
+            $heading = strtolower($heading);
+            $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces
+            $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value
+        }
+        $signHeader = implode("\r\n", $lines);
+        return $signHeader;
+    }
+
+    /**
+     * Generate a DKIM canonicalization body.
+     * @access public
+     * @param string $body Message Body
+     * @return string
+     */
+    public function DKIM_BodyC($body)
+    {
+        if ($body == '') {
+            return "\r\n";
+        }
+        // stabilize line endings
+        $body = str_replace("\r\n", "\n", $body);
+        $body = str_replace("\n", "\r\n", $body);
+        // END stabilize line endings
+        while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") {
+            $body = substr($body, 0, strlen($body) - 2);
+        }
+        return $body;
+    }
+
+    /**
+     * Create the DKIM header and body in a new message header.
+     * @access public
+     * @param string $headers_line Header lines
+     * @param string $subject Subject
+     * @param string $body Body
+     * @return string
+     */
+    public function DKIM_Add($headers_line, $subject, $body)
+    {
+        $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms
+        $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body
+        $DKIMquery = 'dns/txt'; // Query method
+        $DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone)
+        $subject_header = "Subject: $subject";
+        $headers = explode($this->LE, $headers_line);
+        $from_header = '';
+        $to_header = '';
+        $date_header = '';
+        $current = '';
+        foreach ($headers as $header) {
+            if (strpos($header, 'From:') === 0) {
+                $from_header = $header;
+                $current = 'from_header';
+            } elseif (strpos($header, 'To:') === 0) {
+                $to_header = $header;
+                $current = 'to_header';
+            } elseif (strpos($header, 'Date:') === 0) {
+                $date_header = $header;
+                $current = 'date_header';
+            } else {
+                if (!empty($$current) && strpos($header, ' =?') === 0) {
+                    $$current .= $header;
+                } else {
+                    $current = '';
+                }
+            }
+        }
+        $from = str_replace('|', '=7C', $this->DKIM_QP($from_header));
+        $to = str_replace('|', '=7C', $this->DKIM_QP($to_header));
+        $date = str_replace('|', '=7C', $this->DKIM_QP($date_header));
+        $subject = str_replace(
+            '|',
+            '=7C',
+            $this->DKIM_QP($subject_header)
+        ); // Copied header fields (dkim-quoted-printable)
+        $body = $this->DKIM_BodyC($body);
+        $DKIMlen = strlen($body); // Length of body
+        $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body
+        if ('' == $this->DKIM_identity) {
+            $ident = '';
+        } else {
+            $ident = ' i=' . $this->DKIM_identity . ';';
+        }
+        $dkimhdrs = 'DKIM-Signature: v=1; a=' .
+            $DKIMsignatureType . '; q=' .
+            $DKIMquery . '; l=' .
+            $DKIMlen . '; s=' .
+            $this->DKIM_selector .
+            ";\r\n" .
+            "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" .
+            "\th=From:To:Date:Subject;\r\n" .
+            "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" .
+            "\tz=$from\r\n" .
+            "\t|$to\r\n" .
+            "\t|$date\r\n" .
+            "\t|$subject;\r\n" .
+            "\tbh=" . $DKIMb64 . ";\r\n" .
+            "\tb=";
+        $toSign = $this->DKIM_HeaderC(
+            $from_header . "\r\n" .
+            $to_header . "\r\n" .
+            $date_header . "\r\n" .
+            $subject_header . "\r\n" .
+            $dkimhdrs
+        );
+        $signed = $this->DKIM_Sign($toSign);
+        return $dkimhdrs . $signed . "\r\n";
+    }
+
+    /**
+     * Detect if a string contains a line longer than the maximum line length allowed.
+     * @param string $str
+     * @return boolean
+     * @static
+     */
+    public static function hasLineLongerThanMax($str)
+    {
+        //+2 to include CRLF line break for a 1000 total
+        return (boolean)preg_match('/^(.{'.(self::MAX_LINE_LENGTH + 2).',})/m', $str);
+    }
+
+    /**
+     * Allows for public read access to 'to' property.
+     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+     * @access public
+     * @return array
+     */
+    public function getToAddresses()
+    {
+        return $this->to;
+    }
+
+    /**
+     * Allows for public read access to 'cc' property.
+     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+     * @access public
+     * @return array
+     */
+    public function getCcAddresses()
+    {
+        return $this->cc;
+    }
+
+    /**
+     * Allows for public read access to 'bcc' property.
+     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+     * @access public
+     * @return array
+     */
+    public function getBccAddresses()
+    {
+        return $this->bcc;
+    }
+
+    /**
+     * Allows for public read access to 'ReplyTo' property.
+     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+     * @access public
+     * @return array
+     */
+    public function getReplyToAddresses()
+    {
+        return $this->ReplyTo;
+    }
+
+    /**
+     * Allows for public read access to 'all_recipients' property.
+     * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+     * @access public
+     * @return array
+     */
+    public function getAllRecipientAddresses()
+    {
+        return $this->all_recipients;
+    }
+
+    /**
+     * Perform a callback.
+     * @param boolean $isSent
+     * @param array $to
+     * @param array $cc
+     * @param array $bcc
+     * @param string $subject
+     * @param string $body
+     * @param string $from
+     */
+    protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from)
+    {
+        if (!empty($this->action_function) && is_callable($this->action_function)) {
+            $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
+            call_user_func_array($this->action_function, $params);
+        }
+    }
+}
+
+/**
+ * PHPMailer exception handler
+ * @package PHPMailer
+ */
+class phpmailerException extends Exception
+{
+    /**
+     * Prettify error message output
+     * @return string
+     */
+    public function errorMessage()
+    {
+        $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
+        return $errorMsg;
+    }
+}

Property changes on: trunk/include/phpmailer/class.phpmailer.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/class.phpmaileroauth.php
===================================================================
--- trunk/include/phpmailer/class.phpmaileroauth.php	(nonexistent)
+++ trunk/include/phpmailer/class.phpmaileroauth.php	(revision 2)
@@ -0,0 +1,197 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5.4
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailerOAuth - PHPMailer subclass adding OAuth support.
+ * @package PHPMailer
+ * @author @sherryl4george
+ * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
+ */
+class PHPMailerOAuth extends PHPMailer
+{
+    /**
+     * The OAuth user's email address
+     * @var string
+     */
+    public $oauthUserEmail = '';
+
+    /**
+     * The OAuth refresh token
+     * @var string
+     */
+    public $oauthRefreshToken = '';
+
+    /**
+     * The OAuth client ID
+     * @var string
+     */
+    public $oauthClientId = '';
+
+    /**
+     * The OAuth client secret
+     * @var string
+     */
+    public $oauthClientSecret = '';
+
+    /**
+     * An instance of the PHPMailerOAuthGoogle class.
+     * @var PHPMailerOAuthGoogle
+     * @access protected
+     */
+    protected $oauth = null;
+
+    /**
+     * Get a PHPMailerOAuthGoogle instance to use.
+     * @return PHPMailerOAuthGoogle
+     */
+    public function getOAUTHInstance()
+    {
+        if (!is_object($this->oauth)) {
+            $this->oauth = new PHPMailerOAuthGoogle(
+                $this->oauthUserEmail,
+                $this->oauthClientSecret,
+                $this->oauthClientId,
+                $this->oauthRefreshToken
+            );
+        }
+        return $this->oauth;
+    }
+
+    /**
+     * Initiate a connection to an SMTP server.
+     * Overrides the original smtpConnect method to add support for OAuth.
+     * @param array $options An array of options compatible with stream_context_create()
+     * @uses SMTP
+     * @access public
+     * @return bool
+     * @throws phpmailerException
+     */
+    public function smtpConnect($options = array())
+    {
+        if (is_null($this->smtp)) {
+            $this->smtp = $this->getSMTPInstance();
+        }
+
+        if (is_null($this->oauth)) {
+            $this->oauth = $this->getOAUTHInstance();
+        }
+
+        // Already connected?
+        if ($this->smtp->connected()) {
+            return true;
+        }
+
+        $this->smtp->setTimeout($this->Timeout);
+        $this->smtp->setDebugLevel($this->SMTPDebug);
+        $this->smtp->setDebugOutput($this->Debugoutput);
+        $this->smtp->setVerp($this->do_verp);
+        $hosts = explode(';', $this->Host);
+        $lastexception = null;
+
+        foreach ($hosts as $hostentry) {
+            $hostinfo = array();
+            if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
+                // Not a valid host entry
+                continue;
+            }
+            // $hostinfo[2]: optional ssl or tls prefix
+            // $hostinfo[3]: the hostname
+            // $hostinfo[4]: optional port number
+            // The host string prefix can temporarily override the current setting for SMTPSecure
+            // If it's not specified, the default value is used
+            $prefix = '';
+            $secure = $this->SMTPSecure;
+            $tls = ($this->SMTPSecure == 'tls');
+            if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
+                $prefix = 'ssl://';
+                $tls = false; // Can't have SSL and TLS at the same time
+                $secure = 'ssl';
+            } elseif ($hostinfo[2] == 'tls') {
+                $tls = true;
+                // tls doesn't use a prefix
+                $secure = 'tls';
+            }
+            //Do we need the OpenSSL extension?
+            $sslext = defined('OPENSSL_ALGO_SHA1');
+            if ('tls' === $secure or 'ssl' === $secure) {
+                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
+                if (!$sslext) {
+                    throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
+                }
+            }
+            $host = $hostinfo[3];
+            $port = $this->Port;
+            $tport = (integer)$hostinfo[4];
+            if ($tport > 0 and $tport < 65536) {
+                $port = $tport;
+            }
+            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
+                try {
+                    if ($this->Helo) {
+                        $hello = $this->Helo;
+                    } else {
+                        $hello = $this->serverHostname();
+                    }
+                    $this->smtp->hello($hello);
+                    //Automatically enable TLS encryption if:
+                    // * it's not disabled
+                    // * we have openssl extension
+                    // * we are not already using SSL
+                    // * the server offers STARTTLS
+                    if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
+                        $tls = true;
+                    }
+                    if ($tls) {
+                        if (!$this->smtp->startTLS()) {
+                            throw new phpmailerException($this->lang('connect_host'));
+                        }
+                        // We must resend HELO after tls negotiation
+                        $this->smtp->hello($hello);
+                    }
+                    if ($this->SMTPAuth) {
+                        if (!$this->smtp->authenticate(
+                            $this->Username,
+                            $this->Password,
+                            $this->AuthType,
+                            $this->Realm,
+                            $this->Workstation,
+                            $this->oauth
+                        )
+                        ) {
+                            throw new phpmailerException($this->lang('authenticate'));
+                        }
+                    }
+                    return true;
+                } catch (phpmailerException $exc) {
+                    $lastexception = $exc;
+                    $this->edebug($exc->getMessage());
+                    // We must have connected, but then failed TLS or Auth, so close connection nicely
+                    $this->smtp->quit();
+                }
+            }
+        }
+        // If we get here, all connection attempts have failed, so close connection hard
+        $this->smtp->close();
+        // As we've caught all exceptions, just report whatever the last one was
+        if ($this->exceptions and !is_null($lastexception)) {
+            throw $lastexception;
+        }
+        return false;
+    }
+}

Property changes on: trunk/include/phpmailer/class.phpmaileroauth.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/class.phpmaileroauthgoogle.php
===================================================================
--- trunk/include/phpmailer/class.phpmaileroauthgoogle.php	(nonexistent)
+++ trunk/include/phpmailer/class.phpmaileroauthgoogle.php	(revision 2)
@@ -0,0 +1,77 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5.4
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider.
+ * @package PHPMailer
+ * @author @sherryl4george
+ * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
+ * @link https://github.com/thephpleague/oauth2-client
+ */
+class PHPMailerOAuthGoogle
+{
+    private $oauthUserEmail = '';
+    private $oauthRefreshToken = '';
+    private $oauthClientId = '';
+    private $oauthClientSecret = '';
+
+    /**
+     * @param string $UserEmail
+     * @param string $ClientSecret
+     * @param string $ClientId
+     * @param string $RefreshToken
+     */
+    public function __construct(
+        $UserEmail,
+        $ClientSecret,
+        $ClientId,
+        $RefreshToken
+    ) {
+        $this->oauthClientId = $ClientId;
+        $this->oauthClientSecret = $ClientSecret;
+        $this->oauthRefreshToken = $RefreshToken;
+        $this->oauthUserEmail = $UserEmail;
+    }
+
+    private function getProvider()
+    {
+        return new League\OAuth2\Client\Provider\Google([
+            'clientId' => $this->oauthClientId,
+            'clientSecret' => $this->oauthClientSecret
+        ]);
+    }
+
+    private function getGrant()
+    {
+        return new \League\OAuth2\Client\Grant\RefreshToken();
+    }
+
+    private function getToken()
+    {
+        $provider = $this->getProvider();
+        $grant = $this->getGrant();
+        return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]);
+    }
+
+    public function getOauth64()
+    {
+        $token = $this->getToken();
+        return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001");
+    }
+}

Property changes on: trunk/include/phpmailer/class.phpmaileroauthgoogle.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/class.pop3.php
===================================================================
--- trunk/include/phpmailer/class.pop3.php	(nonexistent)
+++ trunk/include/phpmailer/class.pop3.php	(revision 2)
@@ -0,0 +1,407 @@
+<?php
+/**
+ * PHPMailer POP-Before-SMTP Authentication Class.
+ * PHP Version 5
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer POP-Before-SMTP Authentication Class.
+ * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
+ * Does not support APOP.
+ * @package PHPMailer
+ * @author Richard Davey (original author) <rich@corephp.co.uk>
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ */
+class POP3
+{
+    /**
+     * The POP3 PHPMailer Version number.
+     * @var string
+     * @access public
+     */
+    public $Version = '5.2.22';
+
+    /**
+     * Default POP3 port number.
+     * @var integer
+     * @access public
+     */
+    public $POP3_PORT = 110;
+
+    /**
+     * Default timeout in seconds.
+     * @var integer
+     * @access public
+     */
+    public $POP3_TIMEOUT = 30;
+
+    /**
+     * POP3 Carriage Return + Line Feed.
+     * @var string
+     * @access public
+     * @deprecated Use the constant instead
+     */
+    public $CRLF = "\r\n";
+
+    /**
+     * Debug display level.
+     * Options: 0 = no, 1+ = yes
+     * @var integer
+     * @access public
+     */
+    public $do_debug = 0;
+
+    /**
+     * POP3 mail server hostname.
+     * @var string
+     * @access public
+     */
+    public $host;
+
+    /**
+     * POP3 port number.
+     * @var integer
+     * @access public
+     */
+    public $port;
+
+    /**
+     * POP3 Timeout Value in seconds.
+     * @var integer
+     * @access public
+     */
+    public $tval;
+
+    /**
+     * POP3 username
+     * @var string
+     * @access public
+     */
+    public $username;
+
+    /**
+     * POP3 password.
+     * @var string
+     * @access public
+     */
+    public $password;
+
+    /**
+     * Resource handle for the POP3 connection socket.
+     * @var resource
+     * @access protected
+     */
+    protected $pop_conn;
+
+    /**
+     * Are we connected?
+     * @var boolean
+     * @access protected
+     */
+    protected $connected = false;
+
+    /**
+     * Error container.
+     * @var array
+     * @access protected
+     */
+    protected $errors = array();
+
+    /**
+     * Line break constant
+     */
+    const CRLF = "\r\n";
+
+    /**
+     * Simple static wrapper for all-in-one POP before SMTP
+     * @param $host
+     * @param integer|boolean $port The port number to connect to
+     * @param integer|boolean $timeout The timeout value
+     * @param string $username
+     * @param string $password
+     * @param integer $debug_level
+     * @return boolean
+     */
+    public static function popBeforeSmtp(
+        $host,
+        $port = false,
+        $timeout = false,
+        $username = '',
+        $password = '',
+        $debug_level = 0
+    ) {
+        $pop = new POP3;
+        return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
+    }
+
+    /**
+     * Authenticate with a POP3 server.
+     * A connect, login, disconnect sequence
+     * appropriate for POP-before SMTP authorisation.
+     * @access public
+     * @param string $host The hostname to connect to
+     * @param integer|boolean $port The port number to connect to
+     * @param integer|boolean $timeout The timeout value
+     * @param string $username
+     * @param string $password
+     * @param integer $debug_level
+     * @return boolean
+     */
+    public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
+    {
+        $this->host = $host;
+        // If no port value provided, use default
+        if (false === $port) {
+            $this->port = $this->POP3_PORT;
+        } else {
+            $this->port = (integer)$port;
+        }
+        // If no timeout value provided, use default
+        if (false === $timeout) {
+            $this->tval = $this->POP3_TIMEOUT;
+        } else {
+            $this->tval = (integer)$timeout;
+        }
+        $this->do_debug = $debug_level;
+        $this->username = $username;
+        $this->password = $password;
+        //  Reset the error log
+        $this->errors = array();
+        //  connect
+        $result = $this->connect($this->host, $this->port, $this->tval);
+        if ($result) {
+            $login_result = $this->login($this->username, $this->password);
+            if ($login_result) {
+                $this->disconnect();
+                return true;
+            }
+        }
+        // We need to disconnect regardless of whether the login succeeded
+        $this->disconnect();
+        return false;
+    }
+
+    /**
+     * Connect to a POP3 server.
+     * @access public
+     * @param string $host
+     * @param integer|boolean $port
+     * @param integer $tval
+     * @return boolean
+     */
+    public function connect($host, $port = false, $tval = 30)
+    {
+        //  Are we already connected?
+        if ($this->connected) {
+            return true;
+        }
+
+        //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
+        //Rather than suppress it with @fsockopen, capture it cleanly instead
+        set_error_handler(array($this, 'catchWarning'));
+
+        if (false === $port) {
+            $port = $this->POP3_PORT;
+        }
+
+        //  connect to the POP3 server
+        $this->pop_conn = fsockopen(
+            $host, //  POP3 Host
+            $port, //  Port #
+            $errno, //  Error Number
+            $errstr, //  Error Message
+            $tval
+        ); //  Timeout (seconds)
+        //  Restore the error handler
+        restore_error_handler();
+
+        //  Did we connect?
+        if (false === $this->pop_conn) {
+            //  It would appear not...
+            $this->setError(array(
+                'error' => "Failed to connect to server $host on port $port",
+                'errno' => $errno,
+                'errstr' => $errstr
+            ));
+            return false;
+        }
+
+        //  Increase the stream time-out
+        stream_set_timeout($this->pop_conn, $tval, 0);
+
+        //  Get the POP3 server response
+        $pop3_response = $this->getResponse();
+        //  Check for the +OK
+        if ($this->checkResponse($pop3_response)) {
+            //  The connection is established and the POP3 server is talking
+            $this->connected = true;
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Log in to the POP3 server.
+     * Does not support APOP (RFC 2828, 4949).
+     * @access public
+     * @param string $username
+     * @param string $password
+     * @return boolean
+     */
+    public function login($username = '', $password = '')
+    {
+        if (!$this->connected) {
+            $this->setError('Not connected to POP3 server');
+        }
+        if (empty($username)) {
+            $username = $this->username;
+        }
+        if (empty($password)) {
+            $password = $this->password;
+        }
+
+        // Send the Username
+        $this->sendString("USER $username" . self::CRLF);
+        $pop3_response = $this->getResponse();
+        if ($this->checkResponse($pop3_response)) {
+            // Send the Password
+            $this->sendString("PASS $password" . self::CRLF);
+            $pop3_response = $this->getResponse();
+            if ($this->checkResponse($pop3_response)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Disconnect from the POP3 server.
+     * @access public
+     */
+    public function disconnect()
+    {
+        $this->sendString('QUIT');
+        //The QUIT command may cause the daemon to exit, which will kill our connection
+        //So ignore errors here
+        try {
+            @fclose($this->pop_conn);
+        } catch (Exception $e) {
+            //Do nothing
+        };
+    }
+
+    /**
+     * Get a response from the POP3 server.
+     * $size is the maximum number of bytes to retrieve
+     * @param integer $size
+     * @return string
+     * @access protected
+     */
+    protected function getResponse($size = 128)
+    {
+        $response = fgets($this->pop_conn, $size);
+        if ($this->do_debug >= 1) {
+            echo "Server -> Client: $response";
+        }
+        return $response;
+    }
+
+    /**
+     * Send raw data to the POP3 server.
+     * @param string $string
+     * @return integer
+     * @access protected
+     */
+    protected function sendString($string)
+    {
+        if ($this->pop_conn) {
+            if ($this->do_debug >= 2) { //Show client messages when debug >= 2
+                echo "Client -> Server: $string";
+            }
+            return fwrite($this->pop_conn, $string, strlen($string));
+        }
+        return 0;
+    }
+
+    /**
+     * Checks the POP3 server response.
+     * Looks for for +OK or -ERR.
+     * @param string $string
+     * @return boolean
+     * @access protected
+     */
+    protected function checkResponse($string)
+    {
+        if (substr($string, 0, 3) !== '+OK') {
+            $this->setError(array(
+                'error' => "Server reported an error: $string",
+                'errno' => 0,
+                'errstr' => ''
+            ));
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Add an error to the internal error store.
+     * Also display debug output if it's enabled.
+     * @param $error
+     * @access protected
+     */
+    protected function setError($error)
+    {
+        $this->errors[] = $error;
+        if ($this->do_debug >= 1) {
+            echo '<pre>';
+            foreach ($this->errors as $error) {
+                print_r($error);
+            }
+            echo '</pre>';
+        }
+    }
+
+    /**
+     * Get an array of error messages, if any.
+     * @return array
+     */
+    public function getErrors()
+    {
+        return $this->errors;
+    }
+
+    /**
+     * POP3 connection error handler.
+     * @param integer $errno
+     * @param string $errstr
+     * @param string $errfile
+     * @param integer $errline
+     * @access protected
+     */
+    protected function catchWarning($errno, $errstr, $errfile, $errline)
+    {
+        $this->setError(array(
+            'error' => "Connecting to the POP3 server raised a PHP warning: ",
+            'errno' => $errno,
+            'errstr' => $errstr,
+            'errfile' => $errfile,
+            'errline' => $errline
+        ));
+    }
+}

Property changes on: trunk/include/phpmailer/class.pop3.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/class.smtp.php
===================================================================
--- trunk/include/phpmailer/class.smtp.php	(nonexistent)
+++ trunk/include/phpmailer/class.smtp.php	(revision 2)
@@ -0,0 +1,1249 @@
+<?php
+/**
+ * PHPMailer RFC821 SMTP email transport class.
+ * PHP Version 5
+ * @package PHPMailer
+ * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer RFC821 SMTP email transport class.
+ * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
+ * @package PHPMailer
+ * @author Chris Ryan
+ * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
+ */
+class SMTP
+{
+    /**
+     * The PHPMailer SMTP version number.
+     * @var string
+     */
+    const VERSION = '5.2.22';
+
+    /**
+     * SMTP line break constant.
+     * @var string
+     */
+    const CRLF = "\r\n";
+
+    /**
+     * The SMTP port to use if one is not specified.
+     * @var integer
+     */
+    const DEFAULT_SMTP_PORT = 25;
+
+    /**
+     * The maximum line length allowed by RFC 2822 section 2.1.1
+     * @var integer
+     */
+    const MAX_LINE_LENGTH = 998;
+
+    /**
+     * Debug level for no output
+     */
+    const DEBUG_OFF = 0;
+
+    /**
+     * Debug level to show client -> server messages
+     */
+    const DEBUG_CLIENT = 1;
+
+    /**
+     * Debug level to show client -> server and server -> client messages
+     */
+    const DEBUG_SERVER = 2;
+
+    /**
+     * Debug level to show connection status, client -> server and server -> client messages
+     */
+    const DEBUG_CONNECTION = 3;
+
+    /**
+     * Debug level to show all messages
+     */
+    const DEBUG_LOWLEVEL = 4;
+
+    /**
+     * The PHPMailer SMTP Version number.
+     * @var string
+     * @deprecated Use the `VERSION` constant instead
+     * @see SMTP::VERSION
+     */
+    public $Version = '5.2.22';
+
+    /**
+     * SMTP server port number.
+     * @var integer
+     * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead
+     * @see SMTP::DEFAULT_SMTP_PORT
+     */
+    public $SMTP_PORT = 25;
+
+    /**
+     * SMTP reply line ending.
+     * @var string
+     * @deprecated Use the `CRLF` constant instead
+     * @see SMTP::CRLF
+     */
+    public $CRLF = "\r\n";
+
+    /**
+     * Debug output level.
+     * Options:
+     * * self::DEBUG_OFF (`0`) No debug output, default
+     * * self::DEBUG_CLIENT (`1`) Client commands
+     * * self::DEBUG_SERVER (`2`) Client commands and server responses
+     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
+     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
+     * @var integer
+     */
+    public $do_debug = self::DEBUG_OFF;
+
+    /**
+     * How to handle debug output.
+     * Options:
+     * * `echo` Output plain-text as-is, appropriate for CLI
+     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+     * * `error_log` Output to error log as configured in php.ini
+     *
+     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+     * <code>
+     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+     * </code>
+     * @var string|callable
+     */
+    public $Debugoutput = 'echo';
+
+    /**
+     * Whether to use VERP.
+     * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
+     * @link http://www.postfix.org/VERP_README.html Info on VERP
+     * @var boolean
+     */
+    public $do_verp = false;
+
+    /**
+     * The timeout value for connection, in seconds.
+     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
+     * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2
+     * @var integer
+     */
+    public $Timeout = 300;
+
+    /**
+     * How long to wait for commands to complete, in seconds.
+     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+     * @var integer
+     */
+    public $Timelimit = 300;
+
+	/**
+	 * @var array patterns to extract smtp transaction id from smtp reply
+	 * Only first capture group will be use, use non-capturing group to deal with it
+	 * Extend this class to override this property to fulfil your needs.
+	 */
+	protected $smtp_transaction_id_patterns = array(
+		'exim' => '/[0-9]{3} OK id=(.*)/',
+		'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
+		'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
+	);
+
+    /**
+     * The socket for the server connection.
+     * @var resource
+     */
+    protected $smtp_conn;
+
+    /**
+     * Error information, if any, for the last SMTP command.
+     * @var array
+     */
+    protected $error = array(
+        'error' => '',
+        'detail' => '',
+        'smtp_code' => '',
+        'smtp_code_ex' => ''
+    );
+
+    /**
+     * The reply the server sent to us for HELO.
+     * If null, no HELO string has yet been received.
+     * @var string|null
+     */
+    protected $helo_rply = null;
+
+    /**
+     * The set of SMTP extensions sent in reply to EHLO command.
+     * Indexes of the array are extension names.
+     * Value at index 'HELO' or 'EHLO' (according to command that was sent)
+     * represents the server name. In case of HELO it is the only element of the array.
+     * Other values can be boolean TRUE or an array containing extension options.
+     * If null, no HELO/EHLO string has yet been received.
+     * @var array|null
+     */
+    protected $server_caps = null;
+
+    /**
+     * The most recent reply received from the server.
+     * @var string
+     */
+    protected $last_reply = '';
+
+    /**
+     * Output debugging info via a user-selected method.
+     * @see SMTP::$Debugoutput
+     * @see SMTP::$do_debug
+     * @param string $str Debug string to output
+     * @param integer $level The debug level of this message; see DEBUG_* constants
+     * @return void
+     */
+    protected function edebug($str, $level = 0)
+    {
+        if ($level > $this->do_debug) {
+            return;
+        }
+        //Avoid clash with built-in function names
+        if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
+            call_user_func($this->Debugoutput, $str, $level);
+            return;
+        }
+        switch ($this->Debugoutput) {
+            case 'error_log':
+                //Don't output, just log
+                error_log($str);
+                break;
+            case 'html':
+                //Cleans up output a bit for a better looking, HTML-safe output
+                echo htmlentities(
+                    preg_replace('/[\r\n]+/', '', $str),
+                    ENT_QUOTES,
+                    'UTF-8'
+                )
+                . "<br>\n";
+                break;
+            case 'echo':
+            default:
+                //Normalize line breaks
+                $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
+                echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
+                    "\n",
+                    "\n                   \t                  ",
+                    trim($str)
+                )."\n";
+        }
+    }
+
+    /**
+     * Connect to an SMTP server.
+     * @param string $host SMTP server IP or host name
+     * @param integer $port The port number to connect to
+     * @param integer $timeout How long to wait for the connection to open
+     * @param array $options An array of options for stream_context_create()
+     * @access public
+     * @return boolean
+     */
+    public function connect($host, $port = null, $timeout = 30, $options = array())
+    {
+        static $streamok;
+        //This is enabled by default since 5.0.0 but some providers disable it
+        //Check this once and cache the result
+        if (is_null($streamok)) {
+            $streamok = function_exists('stream_socket_client');
+        }
+        // Clear errors to avoid confusion
+        $this->setError('');
+        // Make sure we are __not__ connected
+        if ($this->connected()) {
+            // Already connected, generate error
+            $this->setError('Already connected to a server');
+            return false;
+        }
+        if (empty($port)) {
+            $port = self::DEFAULT_SMTP_PORT;
+        }
+        // Connect to the SMTP server
+        $this->edebug(
+            "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true),
+            self::DEBUG_CONNECTION
+        );
+        $errno = 0;
+        $errstr = '';
+        if ($streamok) {
+            $socket_context = stream_context_create($options);
+            set_error_handler(array($this, 'errorHandler'));
+            $this->smtp_conn = stream_socket_client(
+                $host . ":" . $port,
+                $errno,
+                $errstr,
+                $timeout,
+                STREAM_CLIENT_CONNECT,
+                $socket_context
+            );
+            restore_error_handler();
+        } else {
+            //Fall back to fsockopen which should work in more places, but is missing some features
+            $this->edebug(
+                "Connection: stream_socket_client not available, falling back to fsockopen",
+                self::DEBUG_CONNECTION
+            );
+            set_error_handler(array($this, 'errorHandler'));
+            $this->smtp_conn = fsockopen(
+                $host,
+                $port,
+                $errno,
+                $errstr,
+                $timeout
+            );
+            restore_error_handler();
+        }
+        // Verify we connected properly
+        if (!is_resource($this->smtp_conn)) {
+            $this->setError(
+                'Failed to connect to server',
+                $errno,
+                $errstr
+            );
+            $this->edebug(
+                'SMTP ERROR: ' . $this->error['error']
+                . ": $errstr ($errno)",
+                self::DEBUG_CLIENT
+            );
+            return false;
+        }
+        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
+        // SMTP server can take longer to respond, give longer timeout for first read
+        // Windows does not have support for this timeout function
+        if (substr(PHP_OS, 0, 3) != 'WIN') {
+            $max = ini_get('max_execution_time');
+            // Don't bother if unlimited
+            if ($max != 0 && $timeout > $max) {
+                @set_time_limit($timeout);
+            }
+            stream_set_timeout($this->smtp_conn, $timeout, 0);
+        }
+        // Get any announcement
+        $announce = $this->get_lines();
+        $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
+        return true;
+    }
+
+    /**
+     * Initiate a TLS (encrypted) session.
+     * @access public
+     * @return boolean
+     */
+    public function startTLS()
+    {
+        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
+            return false;
+        }
+
+        //Allow the best TLS version(s) we can
+        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
+        //so add them back in manually if we can
+        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+        }
+
+        // Begin encrypted connection
+        if (!stream_socket_enable_crypto(
+            $this->smtp_conn,
+            true,
+            $crypto_method
+        )) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Perform SMTP authentication.
+     * Must be run after hello().
+     * @see hello()
+     * @param string $username The user name
+     * @param string $password The password
+     * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)
+     * @param string $realm The auth realm for NTLM
+     * @param string $workstation The auth workstation for NTLM
+     * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth)
+     * @return bool True if successfully authenticated.* @access public
+     */
+    public function authenticate(
+        $username,
+        $password,
+        $authtype = null,
+        $realm = '',
+        $workstation = '',
+        $OAuth = null
+    ) {
+        if (!$this->server_caps) {
+            $this->setError('Authentication is not allowed before HELO/EHLO');
+            return false;
+        }
+
+        if (array_key_exists('EHLO', $this->server_caps)) {
+        // SMTP extensions are available. Let's try to find a proper authentication method
+
+            if (!array_key_exists('AUTH', $this->server_caps)) {
+                $this->setError('Authentication is not allowed at this stage');
+                // 'at this stage' means that auth may be allowed after the stage changes
+                // e.g. after STARTTLS
+                return false;
+            }
+
+            self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
+            self::edebug(
+                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
+                self::DEBUG_LOWLEVEL
+            );
+
+            if (empty($authtype)) {
+                foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
+                    if (in_array($method, $this->server_caps['AUTH'])) {
+                        $authtype = $method;
+                        break;
+                    }
+                }
+                if (empty($authtype)) {
+                    $this->setError('No supported authentication methods found');
+                    return false;
+                }
+                self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL);
+            }
+
+            if (!in_array($authtype, $this->server_caps['AUTH'])) {
+                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
+                return false;
+            }
+        } elseif (empty($authtype)) {
+            $authtype = 'LOGIN';
+        }
+        switch ($authtype) {
+            case 'PLAIN':
+                // Start authentication
+                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
+                    return false;
+                }
+                // Send encoded username and password
+                if (!$this->sendCommand(
+                    'User & Password',
+                    base64_encode("\0" . $username . "\0" . $password),
+                    235
+                )
+                ) {
+                    return false;
+                }
+                break;
+            case 'LOGIN':
+                // Start authentication
+                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
+                    return false;
+                }
+                if (!$this->sendCommand("Username", base64_encode($username), 334)) {
+                    return false;
+                }
+                if (!$this->sendCommand("Password", base64_encode($password), 235)) {
+                    return false;
+                }
+                break;
+            case 'XOAUTH2':
+                //If the OAuth Instance is not set. Can be a case when PHPMailer is used
+                //instead of PHPMailerOAuth
+                if (is_null($OAuth)) {
+                    return false;
+                }
+                $oauth = $OAuth->getOauth64();
+
+                // Start authentication
+                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
+                    return false;
+                }
+                break;
+            case 'NTLM':
+                /*
+                 * ntlm_sasl_client.php
+                 * Bundled with Permission
+                 *
+                 * How to telnet in windows:
+                 * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
+                 * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
+                 */
+                require_once 'extras/ntlm_sasl_client.php';
+                $temp = new stdClass;
+                $ntlm_client = new ntlm_sasl_client_class;
+                //Check that functions are available
+                if (!$ntlm_client->initialize($temp)) {
+                    $this->setError($temp->error);
+                    $this->edebug(
+                        'You need to enable some modules in your php.ini file: '
+                        . $this->error['error'],
+                        self::DEBUG_CLIENT
+                    );
+                    return false;
+                }
+                //msg1
+                $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1
+
+                if (!$this->sendCommand(
+                    'AUTH NTLM',
+                    'AUTH NTLM ' . base64_encode($msg1),
+                    334
+                )
+                ) {
+                    return false;
+                }
+                //Though 0 based, there is a white space after the 3 digit number
+                //msg2
+                $challenge = substr($this->last_reply, 3);
+                $challenge = base64_decode($challenge);
+                $ntlm_res = $ntlm_client->NTLMResponse(
+                    substr($challenge, 24, 8),
+                    $password
+                );
+                //msg3
+                $msg3 = $ntlm_client->typeMsg3(
+                    $ntlm_res,
+                    $username,
+                    $realm,
+                    $workstation
+                );
+                // send encoded username
+                return $this->sendCommand('Username', base64_encode($msg3), 235);
+            case 'CRAM-MD5':
+                // Start authentication
+                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
+                    return false;
+                }
+                // Get the challenge
+                $challenge = base64_decode(substr($this->last_reply, 4));
+
+                // Build the response
+                $response = $username . ' ' . $this->hmac($challenge, $password);
+
+                // send encoded credentials
+                return $this->sendCommand('Username', base64_encode($response), 235);
+            default:
+                $this->setError("Authentication method \"$authtype\" is not supported");
+                return false;
+        }
+        return true;
+    }
+
+    /**
+     * Calculate an MD5 HMAC hash.
+     * Works like hash_hmac('md5', $data, $key)
+     * in case that function is not available
+     * @param string $data The data to hash
+     * @param string $key  The key to hash with
+     * @access protected
+     * @return string
+     */
+    protected function hmac($data, $key)
+    {
+        if (function_exists('hash_hmac')) {
+            return hash_hmac('md5', $data, $key);
+        }
+
+        // The following borrowed from
+        // http://php.net/manual/en/function.mhash.php#27225
+
+        // RFC 2104 HMAC implementation for php.
+        // Creates an md5 HMAC.
+        // Eliminates the need to install mhash to compute a HMAC
+        // by Lance Rushing
+
+        $bytelen = 64; // byte length for md5
+        if (strlen($key) > $bytelen) {
+            $key = pack('H*', md5($key));
+        }
+        $key = str_pad($key, $bytelen, chr(0x00));
+        $ipad = str_pad('', $bytelen, chr(0x36));
+        $opad = str_pad('', $bytelen, chr(0x5c));
+        $k_ipad = $key ^ $ipad;
+        $k_opad = $key ^ $opad;
+
+        return md5($k_opad . pack('H*', md5($k_ipad . $data)));
+    }
+
+    /**
+     * Check connection state.
+     * @access public
+     * @return boolean True if connected.
+     */
+    public function connected()
+    {
+        if (is_resource($this->smtp_conn)) {
+            $sock_status = stream_get_meta_data($this->smtp_conn);
+            if ($sock_status['eof']) {
+                // The socket is valid but we are not connected
+                $this->edebug(
+                    'SMTP NOTICE: EOF caught while checking if connected',
+                    self::DEBUG_CLIENT
+                );
+                $this->close();
+                return false;
+            }
+            return true; // everything looks good
+        }
+        return false;
+    }
+
+    /**
+     * Close the socket and clean up the state of the class.
+     * Don't use this function without first trying to use QUIT.
+     * @see quit()
+     * @access public
+     * @return void
+     */
+    public function close()
+    {
+        $this->setError('');
+        $this->server_caps = null;
+        $this->helo_rply = null;
+        if (is_resource($this->smtp_conn)) {
+            // close the connection and cleanup
+            fclose($this->smtp_conn);
+            $this->smtp_conn = null; //Makes for cleaner serialization
+            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
+        }
+    }
+
+    /**
+     * Send an SMTP DATA command.
+     * Issues a data command and sends the msg_data to the server,
+     * finializing the mail transaction. $msg_data is the message
+     * that is to be send with the headers. Each header needs to be
+     * on a single line followed by a <CRLF> with the message headers
+     * and the message body being separated by and additional <CRLF>.
+     * Implements rfc 821: DATA <CRLF>
+     * @param string $msg_data Message data to send
+     * @access public
+     * @return boolean
+     */
+    public function data($msg_data)
+    {
+        //This will use the standard timelimit
+        if (!$this->sendCommand('DATA', 'DATA', 354)) {
+            return false;
+        }
+
+        /* The server is ready to accept data!
+         * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF)
+         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
+         * smaller lines to fit within the limit.
+         * We will also look for lines that start with a '.' and prepend an additional '.'.
+         * NOTE: this does not count towards line-length limit.
+         */
+
+        // Normalize line breaks before exploding
+        $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
+
+        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
+         * of the first line (':' separated) does not contain a space then it _should_ be a header and we will
+         * process all lines before a blank line as headers.
+         */
+
+        $field = substr($lines[0], 0, strpos($lines[0], ':'));
+        $in_headers = false;
+        if (!empty($field) && strpos($field, ' ') === false) {
+            $in_headers = true;
+        }
+
+        foreach ($lines as $line) {
+            $lines_out = array();
+            if ($in_headers and $line == '') {
+                $in_headers = false;
+            }
+            //Break this line up into several smaller lines if it's too long
+            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
+            while (isset($line[self::MAX_LINE_LENGTH])) {
+                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
+                //so as to avoid breaking in the middle of a word
+                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
+                //Deliberately matches both false and 0
+                if (!$pos) {
+                    //No nice break found, add a hard break
+                    $pos = self::MAX_LINE_LENGTH - 1;
+                    $lines_out[] = substr($line, 0, $pos);
+                    $line = substr($line, $pos);
+                } else {
+                    //Break at the found point
+                    $lines_out[] = substr($line, 0, $pos);
+                    //Move along by the amount we dealt with
+                    $line = substr($line, $pos + 1);
+                }
+                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
+                if ($in_headers) {
+                    $line = "\t" . $line;
+                }
+            }
+            $lines_out[] = $line;
+
+            //Send the lines to the server
+            foreach ($lines_out as $line_out) {
+                //RFC2821 section 4.5.2
+                if (!empty($line_out) and $line_out[0] == '.') {
+                    $line_out = '.' . $line_out;
+                }
+                $this->client_send($line_out . self::CRLF);
+            }
+        }
+
+        //Message data has been sent, complete the command
+        //Increase timelimit for end of DATA command
+        $savetimelimit = $this->Timelimit;
+        $this->Timelimit = $this->Timelimit * 2;
+        $result = $this->sendCommand('DATA END', '.', 250);
+        //Restore timelimit
+        $this->Timelimit = $savetimelimit;
+        return $result;
+    }
+
+    /**
+     * Send an SMTP HELO or EHLO command.
+     * Used to identify the sending server to the receiving server.
+     * This makes sure that client and server are in a known state.
+     * Implements RFC 821: HELO <SP> <domain> <CRLF>
+     * and RFC 2821 EHLO.
+     * @param string $host The host name or IP to connect to
+     * @access public
+     * @return boolean
+     */
+    public function hello($host = '')
+    {
+        //Try extended hello first (RFC 2821)
+        return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
+    }
+
+    /**
+     * Send an SMTP HELO or EHLO command.
+     * Low-level implementation used by hello()
+     * @see hello()
+     * @param string $hello The HELO string
+     * @param string $host The hostname to say we are
+     * @access protected
+     * @return boolean
+     */
+    protected function sendHello($hello, $host)
+    {
+        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
+        $this->helo_rply = $this->last_reply;
+        if ($noerror) {
+            $this->parseHelloFields($hello);
+        } else {
+            $this->server_caps = null;
+        }
+        return $noerror;
+    }
+
+    /**
+     * Parse a reply to HELO/EHLO command to discover server extensions.
+     * In case of HELO, the only parameter that can be discovered is a server name.
+     * @access protected
+     * @param string $type - 'HELO' or 'EHLO'
+     */
+    protected function parseHelloFields($type)
+    {
+        $this->server_caps = array();
+        $lines = explode("\n", $this->helo_rply);
+
+        foreach ($lines as $n => $s) {
+            //First 4 chars contain response code followed by - or space
+            $s = trim(substr($s, 4));
+            if (empty($s)) {
+                continue;
+            }
+            $fields = explode(' ', $s);
+            if (!empty($fields)) {
+                if (!$n) {
+                    $name = $type;
+                    $fields = $fields[0];
+                } else {
+                    $name = array_shift($fields);
+                    switch ($name) {
+                        case 'SIZE':
+                            $fields = ($fields ? $fields[0] : 0);
+                            break;
+                        case 'AUTH':
+                            if (!is_array($fields)) {
+                                $fields = array();
+                            }
+                            break;
+                        default:
+                            $fields = true;
+                    }
+                }
+                $this->server_caps[$name] = $fields;
+            }
+        }
+    }
+
+    /**
+     * Send an SMTP MAIL command.
+     * Starts a mail transaction from the email address specified in
+     * $from. Returns true if successful or false otherwise. If True
+     * the mail transaction is started and then one or more recipient
+     * commands may be called followed by a data command.
+     * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
+     * @param string $from Source address of this message
+     * @access public
+     * @return boolean
+     */
+    public function mail($from)
+    {
+        $useVerp = ($this->do_verp ? ' XVERP' : '');
+        return $this->sendCommand(
+            'MAIL FROM',
+            'MAIL FROM:<' . $from . '>' . $useVerp,
+            250
+        );
+    }
+
+    /**
+     * Send an SMTP QUIT command.
+     * Closes the socket if there is no error or the $close_on_error argument is true.
+     * Implements from rfc 821: QUIT <CRLF>
+     * @param boolean $close_on_error Should the connection close if an error occurs?
+     * @access public
+     * @return boolean
+     */
+    public function quit($close_on_error = true)
+    {
+        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
+        $err = $this->error; //Save any error
+        if ($noerror or $close_on_error) {
+            $this->close();
+            $this->error = $err; //Restore any error from the quit command
+        }
+        return $noerror;
+    }
+
+    /**
+     * Send an SMTP RCPT command.
+     * Sets the TO argument to $toaddr.
+     * Returns true if the recipient was accepted false if it was rejected.
+     * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
+     * @param string $address The address the message is being sent to
+     * @access public
+     * @return boolean
+     */
+    public function recipient($address)
+    {
+        return $this->sendCommand(
+            'RCPT TO',
+            'RCPT TO:<' . $address . '>',
+            array(250, 251)
+        );
+    }
+
+    /**
+     * Send an SMTP RSET command.
+     * Abort any transaction that is currently in progress.
+     * Implements rfc 821: RSET <CRLF>
+     * @access public
+     * @return boolean True on success.
+     */
+    public function reset()
+    {
+        return $this->sendCommand('RSET', 'RSET', 250);
+    }
+
+    /**
+     * Send a command to an SMTP server and check its return code.
+     * @param string $command The command name - not sent to the server
+     * @param string $commandstring The actual command to send
+     * @param integer|array $expect One or more expected integer success codes
+     * @access protected
+     * @return boolean True on success.
+     */
+    protected function sendCommand($command, $commandstring, $expect)
+    {
+        if (!$this->connected()) {
+            $this->setError("Called $command without being connected");
+            return false;
+        }
+        //Reject line breaks in all commands
+        if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
+            $this->setError("Command '$command' contained line breaks");
+            return false;
+        }
+        $this->client_send($commandstring . self::CRLF);
+
+        $this->last_reply = $this->get_lines();
+        // Fetch SMTP code and possible error code explanation
+        $matches = array();
+        if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
+            $code = $matches[1];
+            $code_ex = (count($matches) > 2 ? $matches[2] : null);
+            // Cut off error code from each response line
+            $detail = preg_replace(
+                "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m",
+                '',
+                $this->last_reply
+            );
+        } else {
+            // Fall back to simple parsing if regex fails
+            $code = substr($this->last_reply, 0, 3);
+            $code_ex = null;
+            $detail = substr($this->last_reply, 4);
+        }
+
+        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
+
+        if (!in_array($code, (array)$expect)) {
+            $this->setError(
+                "$command command failed",
+                $detail,
+                $code,
+                $code_ex
+            );
+            $this->edebug(
+                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
+                self::DEBUG_CLIENT
+            );
+            return false;
+        }
+
+        $this->setError('');
+        return true;
+    }
+
+    /**
+     * Send an SMTP SAML command.
+     * Starts a mail transaction from the email address specified in $from.
+     * Returns true if successful or false otherwise. If True
+     * the mail transaction is started and then one or more recipient
+     * commands may be called followed by a data command. This command
+     * will send the message to the users terminal if they are logged
+     * in and send them an email.
+     * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
+     * @param string $from The address the message is from
+     * @access public
+     * @return boolean
+     */
+    public function sendAndMail($from)
+    {
+        return $this->sendCommand('SAML', "SAML FROM:$from", 250);
+    }
+
+    /**
+     * Send an SMTP VRFY command.
+     * @param string $name The name to verify
+     * @access public
+     * @return boolean
+     */
+    public function verify($name)
+    {
+        return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
+    }
+
+    /**
+     * Send an SMTP NOOP command.
+     * Used to keep keep-alives alive, doesn't actually do anything
+     * @access public
+     * @return boolean
+     */
+    public function noop()
+    {
+        return $this->sendCommand('NOOP', 'NOOP', 250);
+    }
+
+    /**
+     * Send an SMTP TURN command.
+     * This is an optional command for SMTP that this class does not support.
+     * This method is here to make the RFC821 Definition complete for this class
+     * and _may_ be implemented in future
+     * Implements from rfc 821: TURN <CRLF>
+     * @access public
+     * @return boolean
+     */
+    public function turn()
+    {
+        $this->setError('The SMTP TURN command is not implemented');
+        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
+        return false;
+    }
+
+    /**
+     * Send raw data to the server.
+     * @param string $data The data to send
+     * @access public
+     * @return integer|boolean The number of bytes sent to the server or false on error
+     */
+    public function client_send($data)
+    {
+        $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
+        return fwrite($this->smtp_conn, $data);
+    }
+
+    /**
+     * Get the latest error.
+     * @access public
+     * @return array
+     */
+    public function getError()
+    {
+        return $this->error;
+    }
+
+    /**
+     * Get SMTP extensions available on the server
+     * @access public
+     * @return array|null
+     */
+    public function getServerExtList()
+    {
+        return $this->server_caps;
+    }
+
+    /**
+     * A multipurpose method
+     * The method works in three ways, dependent on argument value and current state
+     *   1. HELO/EHLO was not sent - returns null and set up $this->error
+     *   2. HELO was sent
+     *     $name = 'HELO': returns server name
+     *     $name = 'EHLO': returns boolean false
+     *     $name = any string: returns null and set up $this->error
+     *   3. EHLO was sent
+     *     $name = 'HELO'|'EHLO': returns server name
+     *     $name = any string: if extension $name exists, returns boolean True
+     *       or its options. Otherwise returns boolean False
+     * In other words, one can use this method to detect 3 conditions:
+     *  - null returned: handshake was not or we don't know about ext (refer to $this->error)
+     *  - false returned: the requested feature exactly not exists
+     *  - positive value returned: the requested feature exists
+     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
+     * @return mixed
+     */
+    public function getServerExt($name)
+    {
+        if (!$this->server_caps) {
+            $this->setError('No HELO/EHLO was sent');
+            return null;
+        }
+
+        // the tight logic knot ;)
+        if (!array_key_exists($name, $this->server_caps)) {
+            if ($name == 'HELO') {
+                return $this->server_caps['EHLO'];
+            }
+            if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
+                return false;
+            }
+            $this->setError('HELO handshake was used. Client knows nothing about server extensions');
+            return null;
+        }
+
+        return $this->server_caps[$name];
+    }
+
+    /**
+     * Get the last reply from the server.
+     * @access public
+     * @return string
+     */
+    public function getLastReply()
+    {
+        return $this->last_reply;
+    }
+
+    /**
+     * Read the SMTP server's response.
+     * Either before eof or socket timeout occurs on the operation.
+     * With SMTP we can tell if we have more lines to read if the
+     * 4th character is '-' symbol. If it is a space then we don't
+     * need to read anything else.
+     * @access protected
+     * @return string
+     */
+    protected function get_lines()
+    {
+        // If the connection is bad, give up straight away
+        if (!is_resource($this->smtp_conn)) {
+            return '';
+        }
+        $data = '';
+        $endtime = 0;
+        stream_set_timeout($this->smtp_conn, $this->Timeout);
+        if ($this->Timelimit > 0) {
+            $endtime = time() + $this->Timelimit;
+        }
+        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
+            $str = @fgets($this->smtp_conn, 515);
+            $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
+            $this->edebug("SMTP -> get_lines(): \$str is  \"$str\"", self::DEBUG_LOWLEVEL);
+            $data .= $str;
+            // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen
+            if ((isset($str[3]) and $str[3] == ' ')) {
+                break;
+            }
+            // Timed-out? Log and break
+            $info = stream_get_meta_data($this->smtp_conn);
+            if ($info['timed_out']) {
+                $this->edebug(
+                    'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
+                    self::DEBUG_LOWLEVEL
+                );
+                break;
+            }
+            // Now check if reads took too long
+            if ($endtime and time() > $endtime) {
+                $this->edebug(
+                    'SMTP -> get_lines(): timelimit reached ('.
+                    $this->Timelimit . ' sec)',
+                    self::DEBUG_LOWLEVEL
+                );
+                break;
+            }
+        }
+        return $data;
+    }
+
+    /**
+     * Enable or disable VERP address generation.
+     * @param boolean $enabled
+     */
+    public function setVerp($enabled = false)
+    {
+        $this->do_verp = $enabled;
+    }
+
+    /**
+     * Get VERP address generation mode.
+     * @return boolean
+     */
+    public function getVerp()
+    {
+        return $this->do_verp;
+    }
+
+    /**
+     * Set error messages and codes.
+     * @param string $message The error message
+     * @param string $detail Further detail on the error
+     * @param string $smtp_code An associated SMTP error code
+     * @param string $smtp_code_ex Extended SMTP code
+     */
+    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
+    {
+        $this->error = array(
+            'error' => $message,
+            'detail' => $detail,
+            'smtp_code' => $smtp_code,
+            'smtp_code_ex' => $smtp_code_ex
+        );
+    }
+
+    /**
+     * Set debug output method.
+     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it.
+     */
+    public function setDebugOutput($method = 'echo')
+    {
+        $this->Debugoutput = $method;
+    }
+
+    /**
+     * Get debug output method.
+     * @return string
+     */
+    public function getDebugOutput()
+    {
+        return $this->Debugoutput;
+    }
+
+    /**
+     * Set debug output level.
+     * @param integer $level
+     */
+    public function setDebugLevel($level = 0)
+    {
+        $this->do_debug = $level;
+    }
+
+    /**
+     * Get debug output level.
+     * @return integer
+     */
+    public function getDebugLevel()
+    {
+        return $this->do_debug;
+    }
+
+    /**
+     * Set SMTP timeout.
+     * @param integer $timeout
+     */
+    public function setTimeout($timeout = 0)
+    {
+        $this->Timeout = $timeout;
+    }
+
+    /**
+     * Get SMTP timeout.
+     * @return integer
+     */
+    public function getTimeout()
+    {
+        return $this->Timeout;
+    }
+
+    /**
+     * Reports an error number and string.
+     * @param integer $errno The error number returned by PHP.
+     * @param string $errmsg The error message returned by PHP.
+     */
+    protected function errorHandler($errno, $errmsg)
+    {
+        $notice = 'Connection: Failed to connect to server.';
+        $this->setError(
+            $notice,
+            $errno,
+            $errmsg
+        );
+        $this->edebug(
+            $notice . ' Error number ' . $errno . '. "Error notice: ' . $errmsg,
+            self::DEBUG_CONNECTION
+        );
+    }
+
+	/**
+	 * Will return the ID of the last smtp transaction based on a list of patterns provided
+	 * in SMTP::$smtp_transaction_id_patterns.
+	 * If no reply has been received yet, it will return null.
+	 * If no pattern has been matched, it will return false.
+	 * @return bool|null|string
+	 */
+	public function getLastTransactionID()
+	{
+		$reply = $this->getLastReply();
+
+		if (empty($reply)) {
+			return null;
+		}
+
+		foreach($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
+			if(preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
+				return $matches[1];
+			}
+		}
+
+		return false;
+    }
+}

Property changes on: trunk/include/phpmailer/class.smtp.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/extras/EasyPeasyICS.php
===================================================================
--- trunk/include/phpmailer/extras/EasyPeasyICS.php	(nonexistent)
+++ trunk/include/phpmailer/extras/EasyPeasyICS.php	(revision 2)
@@ -0,0 +1,148 @@
+<?php
+/**
+ * EasyPeasyICS Simple ICS/vCal data generator.
+ * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
+ * @author Manuel Reinhard <manu@sprain.ch>
+ *
+ * Built with inspiration from
+ * http://stackoverflow.com/questions/1463480/how-can-i-use-php-to-dynamically-publish-an-ical-file-to-be-read-by-google-calend/1464355#1464355
+ * History:
+ * 2010/12/17 - Manuel Reinhard - when it all started
+ * 2014 PHPMailer project becomes maintainer
+ */
+
+/**
+ * Class EasyPeasyICS.
+ * Simple ICS data generator
+ * @package phpmailer
+ * @subpackage easypeasyics
+ */
+class EasyPeasyICS
+{
+    /**
+     * The name of the calendar
+     * @var string
+     */
+    protected $calendarName;
+    /**
+     * The array of events to add to this calendar
+     * @var array
+     */
+    protected $events = array();
+
+    /**
+     * Constructor
+     * @param string $calendarName
+     */
+    public function __construct($calendarName = "")
+    {
+        $this->calendarName = $calendarName;
+    }
+
+    /**
+     * Add an event to this calendar.
+     * @param string $start The start date and time as a unix timestamp
+     * @param string $end The end date and time as a unix timestamp
+     * @param string $summary A summary or title for the event
+     * @param string $description A description of the event
+     * @param string $url A URL for the event
+     * @param string $uid A unique identifier for the event - generated automatically if not provided
+     * @return array An array of event details, including any generated UID
+     */
+    public function addEvent($start, $end, $summary = '', $description = '', $url = '', $uid = '')
+    {
+        if (empty($uid)) {
+            $uid = md5(uniqid(mt_rand(), true)) . '@EasyPeasyICS';
+        }
+        $event = array(
+            'start' => gmdate('Ymd', $start) . 'T' . gmdate('His', $start) . 'Z',
+            'end' => gmdate('Ymd', $end) . 'T' . gmdate('His', $end) . 'Z',
+            'summary' => $summary,
+            'description' => $description,
+            'url' => $url,
+            'uid' => $uid
+        );
+        $this->events[] = $event;
+        return $event;
+    }
+
+    /**
+     * @return array Get the array of events.
+     */
+    public function getEvents()
+    {
+        return $this->events;
+    }
+
+    /**
+     * Clear all events.
+     */
+    public function clearEvents()
+    {
+        $this->events = array();
+    }
+
+    /**
+     * Get the name of the calendar.
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->calendarName;
+    }
+
+    /**
+     * Set the name of the calendar.
+     * @param $name
+     */
+    public function setName($name)
+    {
+        $this->calendarName = $name;
+    }
+
+    /**
+     * Render and optionally output a vcal string.
+     * @param bool $output Whether to output the calendar data directly (the default).
+     * @return string The complete rendered vlal
+     */
+    public function render($output = true)
+    {
+        //Add header
+        $ics = 'BEGIN:VCALENDAR
+METHOD:PUBLISH
+VERSION:2.0
+X-WR-CALNAME:' . $this->calendarName . '
+PRODID:-//hacksw/handcal//NONSGML v1.0//EN';
+
+        //Add events
+        foreach ($this->events as $event) {
+            $ics .= '
+BEGIN:VEVENT
+UID:' . $event['uid'] . '
+DTSTAMP:' . gmdate('Ymd') . 'T' . gmdate('His') . 'Z
+DTSTART:' . $event['start'] . '
+DTEND:' . $event['end'] . '
+SUMMARY:' . str_replace("\n", "\\n", $event['summary']) . '
+DESCRIPTION:' . str_replace("\n", "\\n", $event['description']) . '
+URL;VALUE=URI:' . $event['url'] . '
+END:VEVENT';
+        }
+
+        //Add footer
+        $ics .= '
+END:VCALENDAR';
+
+        if ($output) {
+            //Output
+            $filename = $this->calendarName;
+            //Filename needs quoting if it contains spaces
+            if (strpos($filename, ' ') !== false) {
+                $filename = '"'.$filename.'"';
+            }
+            header('Content-type: text/calendar; charset=utf-8');
+            header('Content-Disposition: inline; filename=' . $filename . '.ics');
+            echo $ics;
+        }
+        return $ics;
+    }
+}

Property changes on: trunk/include/phpmailer/extras/EasyPeasyICS.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/extras/README.md
===================================================================
--- trunk/include/phpmailer/extras/README.md	(nonexistent)
+++ trunk/include/phpmailer/extras/README.md	(revision 2)
@@ -0,0 +1,17 @@
+#PHPMailer Extras
+
+These classes provide optional additional functions to PHPMailer.
+
+These are not loaded by the PHPMailer autoloader, so in some cases you may need to `require` them yourself before using them.
+
+##EasyPeasyICS
+
+This class was originally written by Manuel Reinhard and provides a simple means of generating ICS/vCal files that are used in sending calendar events. PHPMailer does not use it directly, but you can use it to generate content appropriate for placing in the `Ical` property of PHPMailer. The PHPMailer project is now its official home as Manuel has given permission for that and is no longer maintaining it himself.
+
+##htmlfilter
+
+This class by Konstantin Riabitsev and Jim Jagielski implements HTML filtering to remove potentially malicious tags, such as `<script>` or `onclick=` attributes that can result in XSS attacks. This is a simple filter and is not as comprehensive as [HTMLawed](http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/) or [HTMLPurifier](http://htmlpurifier.org), but it's easier to use and considerably better than nothing! PHPMailer does not use it directly, but you may want to apply it to user-supplied HTML before using it as a message body.
+
+##NTLM_SASL_client
+
+This class by Manuel Lemos (bundled with permission) adds the ability to authenticate with Microsoft Windows mail servers that use NTLM-based authentication. It is used by PHPMailer if you send via SMTP and set the `AuthType` property to `NTLM`; you will also need to use the `Realm` and `Workstation` properties. The original source is [here](http://www.phpclasses.org/browse/file/7495.html).
Index: trunk/include/phpmailer/extras/htmlfilter.php
===================================================================
--- trunk/include/phpmailer/extras/htmlfilter.php	(nonexistent)
+++ trunk/include/phpmailer/extras/htmlfilter.php	(revision 2)
@@ -0,0 +1,1159 @@
+<?php
+/**
+ * htmlfilter.inc
+ * ---------------
+ * This set of functions allows you to filter html in order to remove
+ * any malicious tags from it. Useful in cases when you need to filter
+ * user input for any cross-site-scripting attempts.
+ *
+ * Copyright (C) 2002-2004 by Duke University
+ *
+ * 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 St, Fifth Floor, Boston, MA
+ * 02110-1301  USA
+ *
+ * @Author	Konstantin Riabitsev <icon@linux.duke.edu>
+ * @Author  Jim Jagielski <jim@jaguNET.com / jimjag@gmail.com>
+ * @Version 1.1 ($Date$)
+ */
+
+/**
+ * This function returns the final tag out of the tag name, an array
+ * of attributes, and the type of the tag. This function is called by
+ * tln_sanitize internally.
+ *
+ * @param string $tagname the name of the tag.
+ * @param array $attary the array of attributes and their values
+ * @param integer $tagtype The type of the tag (see in comments).
+ * @return string A string with the final tag representation.
+ */
+function tln_tagprint($tagname, $attary, $tagtype)
+{
+    if ($tagtype == 2) {
+        $fulltag = '</' . $tagname . '>';
+    } else {
+        $fulltag = '<' . $tagname;
+        if (is_array($attary) && sizeof($attary)) {
+            $atts = array();
+            while (list($attname, $attvalue) = each($attary)) {
+                array_push($atts, "$attname=$attvalue");
+            }
+            $fulltag .= ' ' . join(' ', $atts);
+        }
+        if ($tagtype == 3) {
+            $fulltag .= ' /';
+        }
+        $fulltag .= '>';
+    }
+    return $fulltag;
+}
+
+/**
+ * A small helper function to use with array_walk. Modifies a by-ref
+ * value and makes it lowercase.
+ *
+ * @param string $val a value passed by-ref.
+ * @return		void since it modifies a by-ref value.
+ */
+function tln_casenormalize(&$val)
+{
+    $val = strtolower($val);
+}
+
+/**
+ * This function skips any whitespace from the current position within
+ * a string and to the next non-whitespace value.
+ *
+ * @param string $body the string
+ * @param integer $offset the offset within the string where we should start
+ *				   looking for the next non-whitespace character.
+ * @return integer          the location within the $body where the next
+ *				   non-whitespace char is located.
+ */
+function tln_skipspace($body, $offset)
+{
+    preg_match('/^(\s*)/s', substr($body, $offset), $matches);
+    if (sizeof($matches[1])) {
+        $count = strlen($matches[1]);
+        $offset += $count;
+    }
+    return $offset;
+}
+
+/**
+ * This function looks for the next character within a string.	It's
+ * really just a glorified "strpos", except it catches the failures
+ * nicely.
+ *
+ * @param string $body   The string to look for needle in.
+ * @param integer $offset Start looking from this position.
+ * @param string $needle The character/string to look for.
+ * @return integer           location of the next occurrence of the needle, or
+ *				   strlen($body) if needle wasn't found.
+ */
+function tln_findnxstr($body, $offset, $needle)
+{
+    $pos = strpos($body, $needle, $offset);
+    if ($pos === false) {
+        $pos = strlen($body);
+    }
+    return $pos;
+}
+
+/**
+ * This function takes a PCRE-style regexp and tries to match it
+ * within the string.
+ *
+ * @param string $body   The string to look for needle in.
+ * @param integer $offset Start looking from here.
+ * @param string $reg       A PCRE-style regex to match.
+ * @return array|boolean  Returns a false if no matches found, or an array
+ *				   with the following members:
+ *				   - integer with the location of the match within $body
+ *				   - string with whatever content between offset and the match
+ *				   - string with whatever it is we matched
+ */
+function tln_findnxreg($body, $offset, $reg)
+{
+    $matches = array();
+    $retarr = array();
+    $preg_rule = '%^(.*?)(' . $reg . ')%s';
+    preg_match($preg_rule, substr($body, $offset), $matches);
+    if (!isset($matches[0]) || !$matches[0]) {
+        $retarr = false;
+    } else {
+        $retarr[0] = $offset + strlen($matches[1]);
+        $retarr[1] = $matches[1];
+        $retarr[2] = $matches[2];
+    }
+    return $retarr;
+}
+
+/**
+ * This function looks for the next tag.
+ *
+ * @param string $body   String where to look for the next tag.
+ * @param integer $offset Start looking from here.
+ * @return array|boolean false if no more tags exist in the body, or
+ *				   an array with the following members:
+ *				   - string with the name of the tag
+ *				   - array with attributes and their values
+ *				   - integer with tag type (1, 2, or 3)
+ *				   - integer where the tag starts (starting "<")
+ *				   - integer where the tag ends (ending ">")
+ *				   first three members will be false, if the tag is invalid.
+ */
+function tln_getnxtag($body, $offset)
+{
+    if ($offset > strlen($body)) {
+        return false;
+    }
+    $lt = tln_findnxstr($body, $offset, '<');
+    if ($lt == strlen($body)) {
+        return false;
+    }
+    /**
+     * We are here:
+     * blah blah <tag attribute="value">
+     * \---------^
+     */
+    $pos = tln_skipspace($body, $lt + 1);
+    if ($pos >= strlen($body)) {
+        return array(false, false, false, $lt, strlen($body));
+    }
+    /**
+     * There are 3 kinds of tags:
+     * 1. Opening tag, e.g.:
+     *	  <a href="blah">
+     * 2. Closing tag, e.g.:
+     *	  </a>
+     * 3. XHTML-style content-less tag, e.g.:
+     *	  <img src="blah"/>
+     */
+    switch (substr($body, $pos, 1)) {
+    case '/':
+        $tagtype = 2;
+        $pos++;
+        break;
+    case '!':
+        /**
+         * A comment or an SGML declaration.
+         */
+            if (substr($body, $pos + 1, 2) == '--') {
+            $gt = strpos($body, '-->', $pos);
+            if ($gt === false) {
+                $gt = strlen($body);
+            } else {
+                $gt += 2;
+            }
+            return array(false, false, false, $lt, $gt);
+        } else {
+            $gt = tln_findnxstr($body, $pos, '>');
+            return array(false, false, false, $lt, $gt);
+        }
+        break;
+    default:
+        /**
+         * Assume tagtype 1 for now. If it's type 3, we'll switch values
+         * later.
+         */
+        $tagtype = 1;
+        break;
+    }
+
+    /**
+     * Look for next [\W-_], which will indicate the end of the tag name.
+     */
+    $regary = tln_findnxreg($body, $pos, '[^\w\-_]');
+    if ($regary == false) {
+        return array(false, false, false, $lt, strlen($body));
+    }
+    list($pos, $tagname, $match) = $regary;
+    $tagname = strtolower($tagname);
+
+    /**
+     * $match can be either of these:
+     * '>'	indicating the end of the tag entirely.
+     * '\s' indicating the end of the tag name.
+     * '/'	indicating that this is type-3 xhtml tag.
+     *
+     * Whatever else we find there indicates an invalid tag.
+     */
+    switch ($match) {
+    case '/':
+        /**
+         * This is an xhtml-style tag with a closing / at the
+         * end, like so: <img src="blah"/>. Check if it's followed
+         * by the closing bracket. If not, then this tag is invalid
+         */
+        if (substr($body, $pos, 2) == '/>') {
+            $pos++;
+            $tagtype = 3;
+        } else {
+            $gt = tln_findnxstr($body, $pos, '>');
+            $retary = array(false, false, false, $lt, $gt);
+            return $retary;
+        }
+            //intentional fall-through
+    case '>':
+        return array($tagname, false, $tagtype, $lt, $pos);
+        break;
+    default:
+        /**
+         * Check if it's whitespace
+         */
+        if (!preg_match('/\s/', $match)) {
+            /**
+             * This is an invalid tag! Look for the next closing ">".
+             */
+            $gt = tln_findnxstr($body, $lt, '>');
+            return array(false, false, false, $lt, $gt);
+        }
+        break;
+    }
+
+    /**
+     * At this point we're here:
+     * <tagname	 attribute='blah'>
+     * \-------^
+     *
+     * At this point we loop in order to find all attributes.
+     */
+    $attary = array();
+
+    while ($pos <= strlen($body)) {
+        $pos = tln_skipspace($body, $pos);
+        if ($pos == strlen($body)) {
+            /**
+             * Non-closed tag.
+             */
+            return array(false, false, false, $lt, $pos);
+        }
+        /**
+         * See if we arrived at a ">" or "/>", which means that we reached
+         * the end of the tag.
+         */
+        $matches = array();
+        if (preg_match('%^(\s*)(>|/>)%s', substr($body, $pos), $matches)) {
+            /**
+             * Yep. So we did.
+             */
+            $pos += strlen($matches[1]);
+            if ($matches[2] == '/>') {
+                $tagtype = 3;
+                $pos++;
+            }
+            return array($tagname, $attary, $tagtype, $lt, $pos);
+        }
+
+        /**
+         * There are several types of attributes, with optional
+         * [:space:] between members.
+         * Type 1:
+         *	 attrname[:space:]=[:space:]'CDATA'
+         * Type 2:
+         *	 attrname[:space:]=[:space:]"CDATA"
+         * Type 3:
+         *	 attr[:space:]=[:space:]CDATA
+         * Type 4:
+         *	 attrname
+         *
+         * We leave types 1 and 2 the same, type 3 we check for
+         * '"' and convert to "&quot" if needed, then wrap in
+         * double quotes. Type 4 we convert into:
+         * attrname="yes".
+         */
+        $regary = tln_findnxreg($body, $pos, '[^\w\-_]');
+        if ($regary == false) {
+            /**
+             * Looks like body ended before the end of tag.
+             */
+            return array(false, false, false, $lt, strlen($body));
+        }
+        list($pos, $attname, $match) = $regary;
+        $attname = strtolower($attname);
+        /**
+         * We arrived at the end of attribute name. Several things possible
+         * here:
+         * '>'	means the end of the tag and this is attribute type 4
+         * '/'	if followed by '>' means the same thing as above
+         * '\s' means a lot of things -- look what it's followed by.
+         *		anything else means the attribute is invalid.
+         */
+        switch ($match) {
+        case '/':
+            /**
+             * This is an xhtml-style tag with a closing / at the
+             * end, like so: <img src="blah"/>. Check if it's followed
+             * by the closing bracket. If not, then this tag is invalid
+             */
+            if (substr($body, $pos, 2) == '/>') {
+                $pos++;
+                $tagtype = 3;
+            } else {
+                $gt = tln_findnxstr($body, $pos, '>');
+                $retary = array(false, false, false, $lt, $gt);
+                return $retary;
+            }
+                //intentional fall-through
+        case '>':
+            $attary{$attname} = '"yes"';
+            return array($tagname, $attary, $tagtype, $lt, $pos);
+            break;
+        default:
+            /**
+             * Skip whitespace and see what we arrive at.
+             */
+            $pos = tln_skipspace($body, $pos);
+            $char = substr($body, $pos, 1);
+            /**
+             * Two things are valid here:
+             * '=' means this is attribute type 1 2 or 3.
+             * \w means this was attribute type 4.
+             * anything else we ignore and re-loop. End of tag and
+             * invalid stuff will be caught by our checks at the beginning
+             * of the loop.
+             */
+            if ($char == '=') {
+                $pos++;
+                $pos = tln_skipspace($body, $pos);
+                /**
+                 * Here are 3 possibilities:
+                 * "'"	attribute type 1
+                 * '"'	attribute type 2
+                 * everything else is the content of tag type 3
+                 */
+                $quot = substr($body, $pos, 1);
+                if ($quot == '\'') {
+                        $regary = tln_findnxreg($body, $pos + 1, '\'');
+                    if ($regary == false) {
+                        return array(false, false, false, $lt, strlen($body));
+                    }
+                    list($pos, $attval, $match) = $regary;
+                    $pos++;
+                    $attary{$attname} = '\'' . $attval . '\'';
+                } elseif ($quot == '"') {
+                    $regary = tln_findnxreg($body, $pos + 1, '\"');
+                    if ($regary == false) {
+                        return array(false, false, false, $lt, strlen($body));
+                    }
+                    list($pos, $attval, $match) = $regary;
+                    $pos++;
+                            $attary{$attname} = '"' . $attval . '"';
+                } else {
+                    /**
+                     * These are hateful. Look for \s, or >.
+                     */
+                    $regary = tln_findnxreg($body, $pos, '[\s>]');
+                    if ($regary == false) {
+                        return array(false, false, false, $lt, strlen($body));
+                    }
+                    list($pos, $attval, $match) = $regary;
+                    /**
+                     * If it's ">" it will be caught at the top.
+                     */
+                    $attval = preg_replace('/\"/s', '&quot;', $attval);
+                    $attary{$attname} = '"' . $attval . '"';
+                }
+            } elseif (preg_match('|[\w/>]|', $char)) {
+                /**
+                 * That was attribute type 4.
+                 */
+                $attary{$attname} = '"yes"';
+            } else {
+                /**
+                 * An illegal character. Find next '>' and return.
+                 */
+                $gt = tln_findnxstr($body, $pos, '>');
+                return array(false, false, false, $lt, $gt);
+            }
+            break;
+        }
+    }
+    /**
+     * The fact that we got here indicates that the tag end was never
+     * found. Return invalid tag indication so it gets stripped.
+     */
+    return array(false, false, false, $lt, strlen($body));
+}
+
+/**
+ * Translates entities into literal values so they can be checked.
+ *
+ * @param string $attvalue the by-ref value to check.
+ * @param string $regex    the regular expression to check against.
+ * @param boolean $hex        whether the entites are hexadecimal.
+ * @return boolean            True or False depending on whether there were matches.
+ */
+function tln_deent(&$attvalue, $regex, $hex = 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;
+    }
+}
+
+/**
+ * This function checks attribute values for entity-encoded values
+ * and returns them translated into 8-bit strings so we can run
+ * checks on them.
+ *
+ * @param string $attvalue A string to run entity check against.
+ */
+function tln_defang(&$attvalue)
+{
+    /**
+     * Skip this if there aren't ampersands or backslashes.
+     */
+    if (strpos($attvalue, '&') === false
+        && strpos($attvalue, '\\') === false
+    ) {
+        return;
+    }
+    do {
+        $m = false;
+        $m = $m || tln_deent($attvalue, '/\&#0*(\d+);*/s');
+        $m = $m || tln_deent($attvalue, '/\&#x0*((\d|[a-f])+);*/si', true);
+        $m = $m || tln_deent($attvalue, '/\\\\(\d+)/s', true);
+    } while ($m == true);
+    $attvalue = stripslashes($attvalue);
+}
+
+/**
+ * Kill any tabs, newlines, or carriage returns. Our friends the
+ * makers of the browser with 95% market value decided that it'd
+ * be funny to make "java[tab]script" be just as good as "javascript".
+ *
+ * @param string $attvalue     The attribute value before extraneous spaces removed.
+ */
+function tln_unspace(&$attvalue)
+{
+    if (strcspn($attvalue, "\t\r\n\0 ") != strlen($attvalue)) {
+        $attvalue = str_replace(
+            array("\t", "\r", "\n", "\0", " "),
+            array('', '', '', '', ''),
+            $attvalue
+        );
+    }
+}
+
+/**
+ * This function runs various checks against the attributes.
+ *
+ * @param string $tagname            String with the name of the tag.
+ * @param array $attary            Array with all tag attributes.
+ * @param array $rm_attnames        See description for tln_sanitize
+ * @param array $bad_attvals        See description for tln_sanitize
+ * @param array $add_attr_to_tag See description for tln_sanitize
+ * @param string $trans_image_path
+ * @param boolean $block_external_images
+ * @return array with modified attributes.
+ */
+function tln_fixatts(
+    $tagname,
+    $attary,
+    $rm_attnames,
+    $bad_attvals,
+    $add_attr_to_tag,
+    $trans_image_path,
+    $block_external_images
+) {
+    while (list($attname, $attvalue) = each($attary)) {
+        /**
+         * See if this attribute should be removed.
+         */
+        foreach ($rm_attnames as $matchtag => $matchattrs) {
+            if (preg_match($matchtag, $tagname)) {
+                foreach ($matchattrs as $matchattr) {
+                    if (preg_match($matchattr, $attname)) {
+                        unset($attary{$attname});
+                        continue;
+                    }
+                }
+            }
+        }
+        /**
+         * Remove any backslashes, entities, or extraneous whitespace.
+         */
+        $oldattvalue = $attvalue;
+        tln_defang($attvalue);
+        if ($attname == 'style' && $attvalue !== $oldattvalue) {
+            $attvalue = "idiocy";
+            $attary{$attname} = $attvalue;
+        }
+        tln_unspace($attvalue);
+
+        /**
+         * Now let's run checks on the attvalues.
+         * I don't expect anyone to comprehend this. If you do,
+         * get in touch with me so I can drive to where you live and
+         * shake your hand personally. :)
+         */
+        foreach ($bad_attvals as $matchtag => $matchattrs) {
+            if (preg_match($matchtag, $tagname)) {
+                foreach ($matchattrs as $matchattr => $valary) {
+                    if (preg_match($matchattr, $attname)) {
+                        /**
+                         * There are two arrays in valary.
+                         * First is matches.
+                         * Second one is replacements
+                         */
+                        list($valmatch, $valrepl) = $valary;
+                        $newvalue = preg_replace($valmatch, $valrepl, $attvalue);
+                        if ($newvalue != $attvalue) {
+                            $attary{$attname} = $newvalue;
+                            $attvalue = $newvalue;
+                        }
+                    }
+                }
+            }
+        }
+        if ($attname == 'style') {
+            if (preg_match('/[\0-\37\200-\377]+/', $attvalue)) {
+                $attary{$attname} = '"disallowed character"';
+            }
+            preg_match_all("/url\s*\((.+)\)/si", $attvalue, $aMatch);
+            if (count($aMatch)) {
+                foreach($aMatch[1] as $sMatch) {
+                    $urlvalue = $sMatch;
+                    tln_fixurl($attname, $urlvalue, $trans_image_path, $block_external_images);
+                    $attary{$attname} = str_replace($sMatch, $urlvalue, $attvalue);
+                }
+            }
+        }
+     }
+    /**
+     * See if we need to append any attributes to this tag.
+     */
+    foreach ($add_attr_to_tag as $matchtag => $addattary) {
+        if (preg_match($matchtag, $tagname)) {
+            $attary = array_merge($attary, $addattary);
+        }
+    }
+    return $attary;
+}
+
+function tln_fixurl($attname, &$attvalue, $trans_image_path, $block_external_images)
+{
+    $sQuote = '"';
+    $attvalue = trim($attvalue);
+    if ($attvalue && ($attvalue[0] =='"'|| $attvalue[0] == "'")) {
+        // remove the double quotes
+        $sQuote = $attvalue[0];
+        $attvalue = trim(substr($attvalue,1,-1));
+    }
+
+    /**
+     * Replace empty src tags with the blank image.  src is only used
+     * for frames, images, and image inputs.  Doing a replace should
+     * not affect them working as should be, however it will stop
+     * IE from being kicked off when src for img tags are not set
+     */
+    if ($attvalue == '') {
+        $attvalue = $sQuote . $trans_image_path . $sQuote;
+    } else {
+        // first, disallow 8 bit characters and control characters
+        if (preg_match('/[\0-\37\200-\377]+/',$attvalue)) {
+            switch ($attname) {
+                case 'href':
+                    $attvalue = $sQuote . 'http://invalid-stuff-detected.example.com' . $sQuote;
+                    break;
+                default:
+                    $attvalue = $sQuote . $trans_image_path . $sQuote;
+                    break;
+            }
+        } else {
+            $aUrl = parse_url($attvalue);
+            if (isset($aUrl['scheme'])) {
+                switch(strtolower($aUrl['scheme'])) {
+                    case 'mailto':
+                    case 'http':
+                    case 'https':
+                    case 'ftp':
+                        if ($attname != 'href') {
+                            if ($block_external_images == true) {
+                                $attvalue = $sQuote . $trans_image_path . $sQuote;
+                            } else {
+                                if (!isset($aUrl['path'])) {
+                                    $attvalue = $sQuote . $trans_image_path . $sQuote;
+                                }
+                            }
+                        } else {
+                            $attvalue = $sQuote . $attvalue . $sQuote;
+                        }
+                        break;
+                    case 'outbind':
+                        $attvalue = $sQuote . $attvalue . $sQuote;
+                        break;
+                    case 'cid':
+                        $attvalue = $sQuote . $attvalue . $sQuote;
+                        break;
+                    default:
+                        $attvalue = $sQuote . $trans_image_path . $sQuote;
+                        break;
+                }
+            } else {
+                if (!isset($aUrl['path']) || $aUrl['path'] != $trans_image_path) {
+                    $$attvalue = $sQuote . $trans_image_path . $sQuote;
+                }
+            }
+        }
+    }
+}
+
+function tln_fixstyle($body, $pos, $trans_image_path, $block_external_images)
+{
+    // workaround for </style> in between comments
+    $content = '';
+    $sToken = '';
+    $bSucces = false;
+    $bEndTag = false;
+    for ($i=$pos,$iCount=strlen($body);$i<$iCount;++$i) {
+        $char = $body{$i};
+        switch ($char) {
+            case '<':
+                $sToken = $char;
+                break;
+            case '/':
+                 if ($sToken == '<') {
+                    $sToken .= $char;
+                    $bEndTag = true;
+                 } else {
+                    $content .= $char;
+                 }
+                 break;
+            case '>':
+                 if ($bEndTag) {
+                    $sToken .= $char;
+                    if (preg_match('/\<\/\s*style\s*\>/i',$sToken,$aMatch)) {
+                        $newpos = $i + 1;
+                        $bSucces = true;
+                        break 2;
+                    } else {
+                        $content .= $sToken;
+                    }
+                    $bEndTag = false;
+                 } else {
+                    $content .= $char;
+                 }
+                 break;
+            case '!':
+                if ($sToken == '<') {
+                    // possible comment
+                    if (isset($body{$i+2}) && substr($body,$i,3) == '!--') {
+                        $i = strpos($body,'-->',$i+3);
+                        if ($i === false) { // no end comment
+                            $i = strlen($body);
+                        }
+                        $sToken = '';
+                    }
+                } else {
+                    $content .= $char;
+                }
+                break;
+            default:
+                if ($bEndTag) {
+                    $sToken .= $char;
+                } else {
+                    $content .= $char;
+                }
+                break;
+        }
+    }
+    if ($bSucces == FALSE){
+        return array(FALSE, strlen($body));
+    }
+
+
+
+    /**
+     * First look for general BODY style declaration, which would be
+     * like so:
+     * body {background: blah-blah}
+     * and change it to .bodyclass so we can just assign it to a <div>
+     */
+    $content = preg_replace("|body(\s*\{.*?\})|si", ".bodyclass\\1", $content);
+
+    /**
+    * Fix url('blah') declarations.
+    */
+    //   $content = preg_replace("|url\s*\(\s*([\'\"])\s*\S+script\s*:.*?([\'\"])\s*\)|si",
+    //                           "url(\\1$trans_image_path\\2)", $content);
+
+    // first check for 8bit sequences and disallowed control characters
+    if (preg_match('/[\16-\37\200-\377]+/',$content)) {
+        $content = '<!-- style block removed by html filter due to presence of 8bit characters -->';
+        return array($content, $newpos);
+    }
+
+    // remove @import line
+    $content = preg_replace("/^\s*(@import.*)$/mi","\n<!-- @import rules forbidden -->\n",$content);
+
+    $content = preg_replace("/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i", 'url', $content);
+    preg_match_all("/url\s*\((.+)\)/si",$content,$aMatch);
+    if (count($aMatch)) {
+        $aValue = $aReplace = array();
+        foreach($aMatch[1] as $sMatch) {
+            // url value
+            $urlvalue = $sMatch;
+            tln_fixurl('style',$urlvalue, $trans_image_path, $block_external_images);
+            $aValue[] = $sMatch;
+            $aReplace[] = $urlvalue;
+        }
+        $content = str_replace($aValue,$aReplace,$content);
+    }
+
+    /**
+     * Remove any backslashes, entities, and extraneous whitespace.
+     */
+    $contentTemp = $content;
+    tln_defang($contentTemp);
+    tln_unspace($contentTemp);
+
+    $match   = Array('/\/\*.*\*\//',
+                    '/expression/i',
+                    '/behaviou*r/i',
+                    '/binding/i',
+                    '/include-source/i',
+                    '/javascript/i',
+                    '/script/i',
+                    '/position/i');
+    $replace = Array('','idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', '');
+    $contentNew = preg_replace($match, $replace, $contentTemp);
+    if ($contentNew !== $contentTemp) {
+        $content = $contentNew;
+    }
+    return array($content, $newpos);
+}
+
+function tln_body2div($attary, $trans_image_path)
+{
+    $divattary = array('class' => "'bodyclass'");
+    $text = '#000000';
+    $has_bgc_stl = $has_txt_stl = false;
+    $styledef = '';
+    if (is_array($attary) && sizeof($attary) > 0){
+        foreach ($attary as $attname=>$attvalue){
+            $quotchar = substr($attvalue, 0, 1);
+            $attvalue = str_replace($quotchar, "", $attvalue);
+            switch ($attname){
+                case 'background':
+                    $styledef .= "background-image: url('$trans_image_path'); ";
+                    break;
+                case 'bgcolor':
+                    $has_bgc_stl = true;
+                    $styledef .= "background-color: $attvalue; ";
+                    break;
+                case 'text':
+                    $has_txt_stl = true;
+                    $styledef .= "color: $attvalue; ";
+                    break;
+            }
+        }
+        // Outlook defines a white bgcolor and no text color. This can lead to
+        // white text on a white bg with certain themes.
+        if ($has_bgc_stl && !$has_txt_stl) {
+            $styledef .= "color: $text; ";
+        }
+        if (strlen($styledef) > 0){
+            $divattary{"style"} = "\"$styledef\"";
+        }
+    }
+    return $divattary;
+}
+
+/**
+ *
+ * @param string $body                    The HTML you wish to filter
+ * @param array $tag_list                see description above
+ * @param array $rm_tags_with_content see description above
+ * @param array $self_closing_tags    see description above
+ * @param boolean $force_tag_closing    see description above
+ * @param array $rm_attnames            see description above
+ * @param array $bad_attvals            see description above
+ * @param array $add_attr_to_tag        see description above
+ * @param string $trans_image_path
+ * @param boolean $block_external_images
+
+ * @return string                       Sanitized html safe to show on your pages.
+ */
+function tln_sanitize(
+    $body,
+    $tag_list,
+    $rm_tags_with_content,
+    $self_closing_tags,
+    $force_tag_closing,
+    $rm_attnames,
+    $bad_attvals,
+    $add_attr_to_tag,
+    $trans_image_path,
+    $block_external_images
+) {
+    /**
+     * Normalize rm_tags and rm_tags_with_content.
+     */
+    $rm_tags = array_shift($tag_list);
+    @array_walk($tag_list, 'tln_casenormalize');
+    @array_walk($rm_tags_with_content, 'tln_casenormalize');
+    @array_walk($self_closing_tags, 'tln_casenormalize');
+    /**
+     * See if tag_list is of tags to remove or tags to allow.
+     * false  means remove these tags
+     * true	  means allow these tags
+     */
+    $curpos = 0;
+    $open_tags = array();
+    $trusted = "<!-- begin tln_sanitized html -->\n";
+    $skip_content = false;
+    /**
+     * Take care of netscape's stupid javascript entities like
+     * &{alert('boo')};
+     */
+    $body = preg_replace('/&(\{.*?\};)/si', '&amp;\\1', $body);
+    while (($curtag = tln_getnxtag($body, $curpos)) != false) {
+        list($tagname, $attary, $tagtype, $lt, $gt) = $curtag;
+        $free_content = substr($body, $curpos, $lt-$curpos);
+        /**
+         * Take care of <style>
+         */
+        if ($tagname == "style" && $tagtype == 1){
+            list($free_content, $curpos) =
+                tln_fixstyle($body, $gt+1, $trans_image_path, $block_external_images);
+            if ($free_content != FALSE){
+                if ( !empty($attary) ) {
+                    $attary = tln_fixatts($tagname,
+                                         $attary,
+                                         $rm_attnames,
+                                         $bad_attvals,
+                                         $add_attr_to_tag,
+                                         $trans_image_path,
+                                         $block_external_images
+                                         );
+                }
+                $trusted .= tln_tagprint($tagname, $attary, $tagtype);
+                $trusted .= $free_content;
+                $trusted .= tln_tagprint($tagname, null, 2);
+            }
+            continue;
+        }
+        if ($skip_content == false){
+            $trusted .= $free_content;
+        }
+        if ($tagname != false) {
+            if ($tagtype == 2) {
+                if ($skip_content == $tagname) {
+                    /**
+                     * Got to the end of tag we needed to remove.
+                     */
+                    $tagname = false;
+                    $skip_content = false;
+                } else {
+                    if ($skip_content == false) {
+                        if ($tagname == "body") {
+                            $tagname = "div";
+                        }
+                        if (isset($open_tags{$tagname}) &&
+                            $open_tags{$tagname} > 0
+                        ) {
+                            $open_tags{$tagname}--;
+                        } else {
+                            $tagname = false;
+                        }
+                    }
+                }
+            } else {
+                /**
+                 * $rm_tags_with_content
+                 */
+                if ($skip_content == false) {
+                    /**
+                     * See if this is a self-closing type and change
+                     * tagtype appropriately.
+                     */
+                    if ($tagtype == 1
+                        && in_array($tagname, $self_closing_tags)
+                    ) {
+                        $tagtype = 3;
+                    }
+                    /**
+                     * See if we should skip this tag and any content
+                     * inside it.
+                     */
+                    if ($tagtype == 1
+                        && in_array($tagname, $rm_tags_with_content)
+                    ) {
+                        $skip_content = $tagname;
+                    } else {
+                        if (($rm_tags == false
+                             && in_array($tagname, $tag_list)) ||
+                            ($rm_tags == true
+                                && !in_array($tagname, $tag_list))
+                        ) {
+                            $tagname = false;
+                        } else {
+                            /**
+                             * Convert body into div.
+                             */
+                            if ($tagname == "body"){
+                                $tagname = "div";
+                                $attary = tln_body2div($attary, $trans_image_path);
+                            }
+                            if ($tagtype == 1) {
+                                if (isset($open_tags{$tagname})) {
+                                    $open_tags{$tagname}++;
+                                } else {
+                                    $open_tags{$tagname} = 1;
+                                }
+                            }
+                            /**
+                             * This is where we run other checks.
+                             */
+                            if (is_array($attary) && sizeof($attary) > 0) {
+                                $attary = tln_fixatts(
+                                    $tagname,
+                                    $attary,
+                                    $rm_attnames,
+                                    $bad_attvals,
+                                    $add_attr_to_tag,
+                                    $trans_image_path,
+                                    $block_external_images
+                                );
+                            }
+                        }
+                    }
+                }
+            }
+            if ($tagname != false && $skip_content == false) {
+                $trusted .= tln_tagprint($tagname, $attary, $tagtype);
+            }
+        }
+        $curpos = $gt + 1;
+    }
+    $trusted .= substr($body, $curpos, strlen($body) - $curpos);
+    if ($force_tag_closing == true) {
+        foreach ($open_tags as $tagname => $opentimes) {
+            while ($opentimes > 0) {
+                $trusted .= '</' . $tagname . '>';
+                $opentimes--;
+            }
+        }
+        $trusted .= "\n";
+    }
+    $trusted .= "<!-- end tln_sanitized html -->\n";
+    return $trusted;
+}
+
+//
+// Use the nifty htmlfilter library
+//
+
+
+function HTMLFilter($body, $trans_image_path, $block_external_images = false)
+{
+
+    $tag_list = array(
+        false,
+        "object",
+        "meta",
+        "html",
+        "head",
+        "base",
+        "link",
+        "frame",
+        "iframe",
+        "plaintext",
+        "marquee"
+    );
+
+    $rm_tags_with_content = array(
+        "script",
+        "applet",
+        "embed",
+        "title",
+        "frameset",
+        "xmp",
+        "xml"
+    );
+
+    $self_closing_tags =  array(
+        "img",
+        "br",
+        "hr",
+        "input",
+        "outbind"
+    );
+
+    $force_tag_closing = true;
+
+    $rm_attnames = array(
+        "/.*/" =>
+            array(
+                // "/target/i",
+                "/^on.*/i",
+                "/^dynsrc/i",
+                "/^data.*/i",
+                "/^lowsrc.*/i"
+            )
+    );
+
+    $bad_attvals = array(
+        "/.*/" =>
+        array(
+            "/^src|background/i" =>
+            array(
+                array(
+                    '/^([\'"])\s*\S+script\s*:.*([\'"])/si',
+                    '/^([\'"])\s*mocha\s*:*.*([\'"])/si',
+                    '/^([\'"])\s*about\s*:.*([\'"])/si'
+                ),
+                array(
+                    "\\1$trans_image_path\\2",
+                    "\\1$trans_image_path\\2",
+                    "\\1$trans_image_path\\2"
+                )
+            ),
+            "/^href|action/i" =>
+            array(
+                array(
+                    '/^([\'"])\s*\S+script\s*:.*([\'"])/si',
+                    '/^([\'"])\s*mocha\s*:*.*([\'"])/si',
+                    '/^([\'"])\s*about\s*:.*([\'"])/si'
+                ),
+                array(
+                    "\\1#\\1",
+                    "\\1#\\1",
+                    "\\1#\\1"
+                )
+            ),
+            "/^style/i" =>
+            array(
+                array(
+                    "/\/\*.*\*\//",
+                    "/expression/i",
+                    "/binding/i",
+                    "/behaviou*r/i",
+                    "/include-source/i",
+                    '/position\s*:/i',
+                    '/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i',
+                    '/url\s*\(\s*([\'"])\s*\S+script\s*:.*([\'"])\s*\)/si',
+                    '/url\s*\(\s*([\'"])\s*mocha\s*:.*([\'"])\s*\)/si',
+                    '/url\s*\(\s*([\'"])\s*about\s*:.*([\'"])\s*\)/si',
+                    '/(.*)\s*:\s*url\s*\(\s*([\'"]*)\s*\S+script\s*:.*([\'"]*)\s*\)/si'
+                ),
+                array(
+                    "",
+                    "idiocy",
+                    "idiocy",
+                    "idiocy",
+                    "idiocy",
+                    "idiocy",
+                    "url",
+                    "url(\\1#\\1)",
+                    "url(\\1#\\1)",
+                    "url(\\1#\\1)",
+                    "\\1:url(\\2#\\3)"
+                )
+            )
+        )
+    );
+
+    if ($block_external_images) {
+        array_push(
+            $bad_attvals{'/.*/'}{'/^src|background/i'}[0],
+            '/^([\'\"])\s*https*:.*([\'\"])/si'
+        );
+        array_push(
+            $bad_attvals{'/.*/'}{'/^src|background/i'}[1],
+            "\\1$trans_image_path\\1"
+        );
+        array_push(
+            $bad_attvals{'/.*/'}{'/^style/i'}[0],
+            '/url\(([\'\"])\s*https*:.*([\'\"])\)/si'
+        );
+        array_push(
+            $bad_attvals{'/.*/'}{'/^style/i'}[1],
+            "url(\\1$trans_image_path\\1)"
+        );
+    }
+
+    $add_attr_to_tag = array(
+        "/^a$/i" =>
+            array('target' => '"_blank"')
+    );
+
+    $trusted = tln_sanitize(
+        $body,
+        $tag_list,
+        $rm_tags_with_content,
+        $self_closing_tags,
+        $force_tag_closing,
+        $rm_attnames,
+        $bad_attvals,
+        $add_attr_to_tag,
+        $trans_image_path,
+        $block_external_images
+    );
+    return $trusted;
+}

Property changes on: trunk/include/phpmailer/extras/htmlfilter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/extras/ntlm_sasl_client.php
===================================================================
--- trunk/include/phpmailer/extras/ntlm_sasl_client.php	(nonexistent)
+++ trunk/include/phpmailer/extras/ntlm_sasl_client.php	(revision 2)
@@ -0,0 +1,185 @@
+<?php
+/*
+ * ntlm_sasl_client.php
+ *
+ * @(#) $Id$
+ *
+ */
+
+define("SASL_NTLM_STATE_START", 0);
+define("SASL_NTLM_STATE_IDENTIFY_DOMAIN", 1);
+define("SASL_NTLM_STATE_RESPOND_CHALLENGE", 2);
+define("SASL_NTLM_STATE_DONE", 3);
+define("SASL_FAIL", -1);
+define("SASL_CONTINUE", 1);
+
+class ntlm_sasl_client_class
+{
+    public $credentials = array();
+    public $state = SASL_NTLM_STATE_START;
+
+    public function initialize(&$client)
+    {
+        if (!function_exists($function = "mcrypt_encrypt")
+            || !function_exists($function = "mhash")
+        ) {
+            $extensions = array(
+                "mcrypt_encrypt" => "mcrypt",
+                "mhash" => "mhash"
+            );
+            $client->error = "the extension " . $extensions[$function] .
+                " required by the NTLM SASL client class is not available in this PHP configuration";
+            return (0);
+        }
+        return (1);
+    }
+
+    public function ASCIIToUnicode($ascii)
+    {
+        for ($unicode = "", $a = 0; $a < strlen($ascii); $a++) {
+            $unicode .= substr($ascii, $a, 1) . chr(0);
+        }
+        return ($unicode);
+    }
+
+    public function typeMsg1($domain, $workstation)
+    {
+        $domain_length = strlen($domain);
+        $workstation_length = strlen($workstation);
+        $workstation_offset = 32;
+        $domain_offset = $workstation_offset + $workstation_length;
+        return (
+            "NTLMSSP\0" .
+            "\x01\x00\x00\x00" .
+            "\x07\x32\x00\x00" .
+            pack("v", $domain_length) .
+            pack("v", $domain_length) .
+            pack("V", $domain_offset) .
+            pack("v", $workstation_length) .
+            pack("v", $workstation_length) .
+            pack("V", $workstation_offset) .
+            $workstation .
+            $domain
+        );
+    }
+
+    public function NTLMResponse($challenge, $password)
+    {
+        $unicode = $this->ASCIIToUnicode($password);
+        $md4 = mhash(MHASH_MD4, $unicode);
+        $padded = $md4 . str_repeat(chr(0), 21 - strlen($md4));
+        $iv_size = mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_ECB);
+        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
+        for ($response = "", $third = 0; $third < 21; $third += 7) {
+            for ($packed = "", $p = $third; $p < $third + 7; $p++) {
+                $packed .= str_pad(decbin(ord(substr($padded, $p, 1))), 8, "0", STR_PAD_LEFT);
+            }
+            for ($key = "", $p = 0; $p < strlen($packed); $p += 7) {
+                $s = substr($packed, $p, 7);
+                $b = $s . ((substr_count($s, "1") % 2) ? "0" : "1");
+                $key .= chr(bindec($b));
+            }
+            $ciphertext = mcrypt_encrypt(MCRYPT_DES, $key, $challenge, MCRYPT_MODE_ECB, $iv);
+            $response .= $ciphertext;
+        }
+        return $response;
+    }
+
+    public function typeMsg3($ntlm_response, $user, $domain, $workstation)
+    {
+        $domain_unicode = $this->ASCIIToUnicode($domain);
+        $domain_length = strlen($domain_unicode);
+        $domain_offset = 64;
+        $user_unicode = $this->ASCIIToUnicode($user);
+        $user_length = strlen($user_unicode);
+        $user_offset = $domain_offset + $domain_length;
+        $workstation_unicode = $this->ASCIIToUnicode($workstation);
+        $workstation_length = strlen($workstation_unicode);
+        $workstation_offset = $user_offset + $user_length;
+        $lm = "";
+        $lm_length = strlen($lm);
+        $lm_offset = $workstation_offset + $workstation_length;
+        $ntlm = $ntlm_response;
+        $ntlm_length = strlen($ntlm);
+        $ntlm_offset = $lm_offset + $lm_length;
+        $session = "";
+        $session_length = strlen($session);
+        $session_offset = $ntlm_offset + $ntlm_length;
+        return (
+            "NTLMSSP\0" .
+            "\x03\x00\x00\x00" .
+            pack("v", $lm_length) .
+            pack("v", $lm_length) .
+            pack("V", $lm_offset) .
+            pack("v", $ntlm_length) .
+            pack("v", $ntlm_length) .
+            pack("V", $ntlm_offset) .
+            pack("v", $domain_length) .
+            pack("v", $domain_length) .
+            pack("V", $domain_offset) .
+            pack("v", $user_length) .
+            pack("v", $user_length) .
+            pack("V", $user_offset) .
+            pack("v", $workstation_length) .
+            pack("v", $workstation_length) .
+            pack("V", $workstation_offset) .
+            pack("v", $session_length) .
+            pack("v", $session_length) .
+            pack("V", $session_offset) .
+            "\x01\x02\x00\x00" .
+            $domain_unicode .
+            $user_unicode .
+            $workstation_unicode .
+            $lm .
+            $ntlm
+        );
+    }
+
+    public function start(&$client, &$message, &$interactions)
+    {
+        if ($this->state != SASL_NTLM_STATE_START) {
+            $client->error = "NTLM authentication state is not at the start";
+            return (SASL_FAIL);
+        }
+        $this->credentials = array(
+            "user" => "",
+            "password" => "",
+            "realm" => "",
+            "workstation" => ""
+        );
+        $defaults = array();
+        $status = $client->GetCredentials($this->credentials, $defaults, $interactions);
+        if ($status == SASL_CONTINUE) {
+            $this->state = SASL_NTLM_STATE_IDENTIFY_DOMAIN;
+        }
+        unset($message);
+        return ($status);
+    }
+
+    public function step(&$client, $response, &$message, &$interactions)
+    {
+        switch ($this->state) {
+            case SASL_NTLM_STATE_IDENTIFY_DOMAIN:
+                $message = $this->typeMsg1($this->credentials["realm"], $this->credentials["workstation"]);
+                $this->state = SASL_NTLM_STATE_RESPOND_CHALLENGE;
+                break;
+            case SASL_NTLM_STATE_RESPOND_CHALLENGE:
+                $ntlm_response = $this->NTLMResponse(substr($response, 24, 8), $this->credentials["password"]);
+                $message = $this->typeMsg3(
+                    $ntlm_response,
+                    $this->credentials["user"],
+                    $this->credentials["realm"],
+                    $this->credentials["workstation"]
+                );
+                $this->state = SASL_NTLM_STATE_DONE;
+                break;
+            case SASL_NTLM_STATE_DONE:
+                $client->error = "NTLM authentication was finished without success";
+                return (SASL_FAIL);
+            default:
+                $client->error = "invalid NTLM authentication step state";
+                return (SASL_FAIL);
+        }
+        return (SASL_CONTINUE);
+    }
+}

Property changes on: trunk/include/phpmailer/extras/ntlm_sasl_client.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/get_oauth_token.php
===================================================================
--- trunk/include/phpmailer/get_oauth_token.php	(nonexistent)
+++ trunk/include/phpmailer/get_oauth_token.php	(revision 2)
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Get an OAuth2 token from Google.
+ * * Install this script on your server so that it's accessible
+ * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
+ * e.g.: http://localhost/phpmail/get_oauth_token.php
+ * * Ensure dependencies are installed with 'composer install'
+ * * Set up an app in your Google developer console
+ * * Set the script address as the app's redirect URL
+ * If no refresh token is obtained when running this file, revoke access to your app
+ * using link: https://accounts.google.com/b/0/IssuedAuthSubTokens and run the script again.
+ * This script requires PHP 5.4 or later
+ * PHP Version 5.4
+ */
+
+namespace League\OAuth2\Client\Provider;
+
+require 'vendor/autoload.php';
+
+use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
+use League\OAuth2\Client\Token\AccessToken;
+use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
+use Psr\Http\Message\ResponseInterface;
+
+session_start();
+
+//If this automatic URL doesn't work, set it yourself manually
+$redirectUri = isset($_SERVER['HTTPS']) ? 'https://' : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+//$redirectUri = 'http://localhost/phpmailer/get_oauth_token.php';
+
+//These details obtained are by setting up app in Google developer console.
+$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
+$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
+
+class Google extends AbstractProvider
+{
+    use BearerAuthorizationTrait;
+
+    const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'id';
+
+    /**
+     * @var string If set, this will be sent to google as the "access_type" parameter.
+     * @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline
+     */
+    protected $accessType;
+
+    /**
+     * @var string If set, this will be sent to google as the "hd" parameter.
+     * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param
+     */
+    protected $hostedDomain;
+
+    /**
+     * @var string If set, this will be sent to google as the "scope" parameter.
+     * @link https://developers.google.com/gmail/api/auth/scopes
+     */
+    protected $scope;
+
+    public function getBaseAuthorizationUrl()
+    {
+        return 'https://accounts.google.com/o/oauth2/auth';
+    }
+
+    public function getBaseAccessTokenUrl(array $params)
+    {
+        return 'https://accounts.google.com/o/oauth2/token';
+    }
+
+    public function getResourceOwnerDetailsUrl(AccessToken $token)
+    {
+	return ' ';
+    }
+
+    protected function getAuthorizationParameters(array $options)
+    {
+	if (is_array($this->scope)) {
+            $separator = $this->getScopeSeparator();
+            $this->scope = implode($separator, $this->scope);
+        }
+
+        $params = array_merge(
+            parent::getAuthorizationParameters($options),
+            array_filter([
+                'hd'          => $this->hostedDomain,
+                'access_type' => $this->accessType,
+		'scope'       => $this->scope,
+                // if the user is logged in with more than one account ask which one to use for the login!
+                'authuser'    => '-1'
+            ])
+        );
+        return $params;
+    }
+
+    protected function getDefaultScopes()
+    {
+        return [
+            'email',
+            'openid',
+            'profile',
+        ];
+    }
+
+    protected function getScopeSeparator()
+    {
+        return ' ';
+    }
+
+    protected function checkResponse(ResponseInterface $response, $data)
+    {
+        if (!empty($data['error'])) {
+            $code  = 0;
+            $error = $data['error'];
+
+            if (is_array($error)) {
+                $code  = $error['code'];
+                $error = $error['message'];
+            }
+
+            throw new IdentityProviderException($error, $code, $data);
+        }
+    }
+
+    protected function createResourceOwner(array $response, AccessToken $token)
+    {
+        return new GoogleUser($response);
+    }
+}
+
+
+//Set Redirect URI in Developer Console as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
+$provider = new Google(
+    array(
+        'clientId' => $clientId,
+        'clientSecret' => $clientSecret,
+        'redirectUri' => $redirectUri,
+        'scope' => array('https://mail.google.com/'),
+	'accessType' => 'offline'
+    )
+);
+
+if (!isset($_GET['code'])) {
+    // If we don't have an authorization code then get one
+    $authUrl = $provider->getAuthorizationUrl();
+    $_SESSION['oauth2state'] = $provider->getState();
+    header('Location: ' . $authUrl);
+    exit;
+// Check given state against previously stored one to mitigate CSRF attack
+} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
+    unset($_SESSION['oauth2state']);
+    exit('Invalid state');
+} else {
+    // Try to get an access token (using the authorization code grant)
+    $token = $provider->getAccessToken(
+        'authorization_code',
+        array(
+            'code' => $_GET['code']
+        )
+    );
+
+    // Use this to get a new access token if the old one expires
+    echo 'Refresh Token: ' . $token->getRefreshToken();
+}

Property changes on: trunk/include/phpmailer/get_oauth_token.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-am.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-am.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-am.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Armenian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Hrayr Grigoryan <hrayr@bits.am>
+ */
+ 
+$PHPMAILER_LANG['authenticate']         = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';
+$PHPMAILER_LANG['empty_message']        = 'Հաղորդագրությունը դատարկ է';
+$PHPMAILER_LANG['encoding']             = 'Կոդավորման անհայտ տեսակ: ';
+$PHPMAILER_LANG['execute']              = 'Չհաջողվեց իրականացնել հրամանը: ';
+$PHPMAILER_LANG['file_access']          = 'Ֆայլը հասանելի չէ: ';
+$PHPMAILER_LANG['file_open']            = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: ';
+$PHPMAILER_LANG['from_failed']          = 'Ուղարկողի հետևյալ հասցեն սխալ է: ';
+$PHPMAILER_LANG['instantiate']          = 'Հնարավոր չէ կանչել mail ֆունկցիան.';
+$PHPMAILER_LANG['invalid_address']      = 'Հասցեն սխալ է: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.';
+$PHPMAILER_LANG['provide_address']      = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: ';
+$PHPMAILER_LANG['signing']              = 'Ստորագրման սխալ: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP -ի connect() ֆունկցիան չի հաջողվել';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP սերվերի սխալ: ';
+$PHPMAILER_LANG['variable_set']         = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: ';
+$PHPMAILER_LANG['extension_missing']    = 'Հավելվածը բացակայում է: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-am.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ar.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ar.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ar.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Arabic PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author bahjat al mostafa <bahjat983@hotmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'خطأ SMTP : لا يمكن تأكيد الهوية.';
+$PHPMAILER_LANG['connect_host']         = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'خطأ SMTP: لم يتم قبول المعلومات .';
+$PHPMAILER_LANG['empty_message']        = 'نص الرسالة فارغ';
+$PHPMAILER_LANG['encoding']             = 'ترميز غير معروف: ';
+$PHPMAILER_LANG['execute']              = 'لا يمكن تنفيذ : ';
+$PHPMAILER_LANG['file_access']          = 'لا يمكن الوصول للملف: ';
+$PHPMAILER_LANG['file_open']            = 'خطأ في الملف: لا يمكن فتحه: ';
+$PHPMAILER_LANG['from_failed']          = 'خطأ على مستوى عنوان المرسل : ';
+$PHPMAILER_LANG['instantiate']          = 'لا يمكن توفير خدمة البريد.';
+$PHPMAILER_LANG['invalid_address']      = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.';
+$PHPMAILER_LANG['provide_address']      = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.';
+$PHPMAILER_LANG['recipients_failed']    = 'خطأ SMTP: الأخطاء التالية ' .
+                                          'فشل في الارسال لكل من : ';
+$PHPMAILER_LANG['signing']              = 'خطأ في التوقيع: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() غير ممكن.';
+$PHPMAILER_LANG['smtp_error']           = 'خطأ على مستوى الخادم SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'لا يمكن تعيين أو إعادة تعيين متغير: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ar.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-az.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-az.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-az.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Azerbaijani PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author @mirjalal
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP xətası: Giriş uğursuz oldu.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP xətası: SMTP serverinə qoşulma uğursuz oldu.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP xətası: Verilənlər qəbul edilməyib.';
+$PHPMAILER_LANG['empty_message']        = 'Boş mesaj göndərilə bilməz.';
+$PHPMAILER_LANG['encoding']             = 'Qeyri-müəyyən kodlaşdırma: ';
+$PHPMAILER_LANG['execute']              = 'Əmr yerinə yetirilmədi: ';
+$PHPMAILER_LANG['file_access']          = 'Fayla giriş yoxdur: ';
+$PHPMAILER_LANG['file_open']            = 'Fayl xətası: Fayl açıla bilmədi: ';
+$PHPMAILER_LANG['from_failed']          = 'Göstərilən poçtlara göndərmə uğursuz oldu: ';
+$PHPMAILER_LANG['instantiate']          = 'Mail funksiyası işə salına bilmədi.';
+$PHPMAILER_LANG['invalid_address']      = 'Düzgün olmayan e-mail adresi: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - e-mail kitabxanası dəstəklənmir.';
+$PHPMAILER_LANG['provide_address']      = 'Ən azı bir e-mail adresi daxil edilməlidir.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP xətası: Aşağıdakı ünvanlar üzrə alıcılara göndərmə uğursuzdur: ';
+$PHPMAILER_LANG['signing']              = 'İmzalama xətası: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP serverinə qoşulma uğursuz oldu.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri xətası: ';
+$PHPMAILER_LANG['variable_set']         = 'Dəyişənin quraşdırılması uğursuz oldu: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-az.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-be.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-be.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-be.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Belarusian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Aleksander Maksymiuk <info@setpro.pl>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Памылка SMTP: памылка ідэнтыфікацыі.';
+$PHPMAILER_LANG['connect_host']         = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Памылка SMTP: звесткі непрынятыя.';
+$PHPMAILER_LANG['empty_message']        = 'Пустое паведамленне.';
+$PHPMAILER_LANG['encoding']             = 'Невядомая кадыроўка тэксту: ';
+$PHPMAILER_LANG['execute']              = 'Нельга выканаць каманду: ';
+$PHPMAILER_LANG['file_access']          = 'Няма доступу да файла: ';
+$PHPMAILER_LANG['file_open']            = 'Нельга адкрыць файл: ';
+$PHPMAILER_LANG['from_failed']          = 'Няправільны адрас адпраўніка: ';
+$PHPMAILER_LANG['instantiate']          = 'Нельга прымяніць функцыю mail().';
+$PHPMAILER_LANG['invalid_address']      = 'Нельга даслаць паведамленне, няправільны email атрымальніка: ';
+$PHPMAILER_LANG['provide_address']      = 'Запоўніце, калі ласка, правільны email атрымальніка.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.';
+$PHPMAILER_LANG['recipients_failed']    = 'Памылка SMTP: няправільныя атрымальнікі: ';
+$PHPMAILER_LANG['signing']              = 'Памылка подпісу паведамлення: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Памылка сувязі з SMTP-серверам.';
+$PHPMAILER_LANG['smtp_error']           = 'Памылка SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-be.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-bg.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-bg.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-bg.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Bulgarian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Mikhail Kyosev <mialygk@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: Не може да се удостовери пред сървъра.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: Не може да се свърже с SMTP хоста.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: данните не са приети.';
+$PHPMAILER_LANG['empty_message']        = 'Съдържанието на съобщението е празно';
+$PHPMAILER_LANG['encoding']             = 'Неизвестно кодиране: ';
+$PHPMAILER_LANG['execute']              = 'Не може да се изпълни: ';
+$PHPMAILER_LANG['file_access']          = 'Няма достъп до файл: ';
+$PHPMAILER_LANG['file_open']            = 'Файлова грешка: Не може да се отвори файл: ';
+$PHPMAILER_LANG['from_failed']          = 'Следните адреси за подател са невалидни: ';
+$PHPMAILER_LANG['instantiate']          = 'Не може да се инстанцира функцията mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Невалиден адрес: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.';
+$PHPMAILER_LANG['provide_address']      = 'Трябва да предоставите поне един email адрес за получател.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: Следните адреси за Получател са невалидни: ';
+$PHPMAILER_LANG['signing']              = 'Грешка при подписване: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP провален connect().';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP сървърна грешка: ';
+$PHPMAILER_LANG['variable_set']         = 'Не може да се установи или възстанови променлива: ';
+$PHPMAILER_LANG['extension_missing']    = 'Липсва разширение: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-bg.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ca.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ca.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ca.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Catalan PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ivan <web AT microstudi DOT com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Error SMTP: No s’ha pogut autenticar.';
+$PHPMAILER_LANG['connect_host']         = 'Error SMTP: No es pot connectar al servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Dades no acceptades.';
+$PHPMAILER_LANG['empty_message']        = 'El cos del missatge està buit.';
+$PHPMAILER_LANG['encoding']             = 'Codificació desconeguda: ';
+$PHPMAILER_LANG['execute']              = 'No es pot executar: ';
+$PHPMAILER_LANG['file_access']          = 'No es pot accedir a l’arxiu: ';
+$PHPMAILER_LANG['file_open']            = 'Error d’Arxiu: No es pot obrir l’arxiu: ';
+$PHPMAILER_LANG['from_failed']          = 'La(s) següent(s) adreces de remitent han fallat: ';
+$PHPMAILER_LANG['instantiate']          = 'No s’ha pogut crear una instància de la funció Mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Adreça d’email invalida: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';
+$PHPMAILER_LANG['provide_address']      = 'S’ha de proveir almenys una adreça d’email com a destinatari.';
+$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Els següents destinataris han fallat: ';
+$PHPMAILER_LANG['signing']              = 'Error al signar: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ha fallat el SMTP Connect().';
+$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'No s’ha pogut establir o restablir la variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ca.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ch.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ch.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ch.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author LiuXin <http://www.80x86.cn/blog/>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP 错误：身份验证失败。';
+$PHPMAILER_LANG['connect_host']         = 'SMTP 错误: 不能连接SMTP主机。';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误: 数据不可接受。';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = '未知编码：';
+$PHPMAILER_LANG['execute']              = '不能执行: ';
+$PHPMAILER_LANG['file_access']          = '不能访问文件：';
+$PHPMAILER_LANG['file_open']            = '文件错误：不能打开文件：';
+$PHPMAILER_LANG['from_failed']          = '下面的发送地址邮件发送失败了： ';
+$PHPMAILER_LANG['instantiate']          = '不能实现mail方法。';
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
+$PHPMAILER_LANG['provide_address']      = '您必须提供至少一个 收信人的email地址。';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误： 下面的 收件人失败了： ';
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ch.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-cs.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-cs.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-cs.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Czech PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Chyba SMTP: Autentizace selhala.';
+$PHPMAILER_LANG['connect_host']         = 'Chyba SMTP: Nelze navázat spojení se SMTP serverem.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Chyba SMTP: Data nebyla přijata.';
+$PHPMAILER_LANG['empty_message']        = 'Prázdné tělo zprávy';
+$PHPMAILER_LANG['encoding']             = 'Neznámé kódování: ';
+$PHPMAILER_LANG['execute']              = 'Nelze provést: ';
+$PHPMAILER_LANG['file_access']          = 'Nelze získat přístup k souboru: ';
+$PHPMAILER_LANG['file_open']            = 'Chyba souboru: Nelze otevřít soubor pro čtení: ';
+$PHPMAILER_LANG['from_failed']          = 'Následující adresa odesílatele je nesprávná: ';
+$PHPMAILER_LANG['instantiate']          = 'Nelze vytvořit instanci emailové funkce.';
+$PHPMAILER_LANG['invalid_address']      = 'Neplatná adresa: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.';
+$PHPMAILER_LANG['provide_address']      = 'Musíte zadat alespoň jednu emailovou adresu příjemce.';
+$PHPMAILER_LANG['recipients_failed']    = 'Chyba SMTP: Následující adresy příjemců nejsou správně: ';
+$PHPMAILER_LANG['signing']              = 'Chyba přihlašování: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() selhal.';
+$PHPMAILER_LANG['smtp_error']           = 'Chyba SMTP serveru: ';
+$PHPMAILER_LANG['variable_set']         = 'Nelze nastavit nebo změnit proměnnou: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-cs.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-da.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-da.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-da.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Danish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Mikael Stokkebro <info@stokkebro.dk>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP fejl: Kunne ikke logge på.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fejl: Data kunne ikke accepteres.';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = 'Ukendt encode-format: ';
+$PHPMAILER_LANG['execute']              = 'Kunne ikke køre: ';
+$PHPMAILER_LANG['file_access']          = 'Ingen adgang til fil: ';
+$PHPMAILER_LANG['file_open']            = 'Fil fejl: Kunne ikke åbne filen: ';
+$PHPMAILER_LANG['from_failed']          = 'Følgende afsenderadresse er forkert: ';
+$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere email funktionen.';
+//$PHPMAILER_LANG['invalid_address']        = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
+$PHPMAILER_LANG['provide_address']      = 'Du skal indtaste mindst en modtagers emailadresse.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP fejl: Følgende modtagere er forkerte: ';
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-da.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-de.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-de.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-de.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * German PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP-Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-Fehler: Daten werden nicht akzeptiert.';
+$PHPMAILER_LANG['empty_message']        = 'E-Mail-Inhalt ist leer.';
+$PHPMAILER_LANG['encoding']             = 'Unbekannte Kodierung: ';
+$PHPMAILER_LANG['execute']              = 'Konnte folgenden Befehl nicht ausführen: ';
+$PHPMAILER_LANG['file_access']          = 'Zugriff auf folgende Datei fehlgeschlagen: ';
+$PHPMAILER_LANG['file_open']            = 'Dateifehler: Konnte folgende Datei nicht öffnen: ';
+$PHPMAILER_LANG['from_failed']          = 'Die folgende Absenderadresse ist nicht korrekt: ';
+$PHPMAILER_LANG['instantiate']          = 'Mail-Funktion konnte nicht initialisiert werden.';
+$PHPMAILER_LANG['invalid_address']      = 'Die Adresse ist ungültig: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
+$PHPMAILER_LANG['provide_address']      = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';
+$PHPMAILER_LANG['signing']              = 'Fehler beim Signieren: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Verbindung zum SMTP-Server fehlgeschlagen.';
+$PHPMAILER_LANG['smtp_error']           = 'Fehler vom SMTP-Server: ';
+$PHPMAILER_LANG['variable_set']         = 'Kann Variable nicht setzen oder zurücksetzen: ';
+$PHPMAILER_LANG['extension_missing']    = 'Fehlende Erweiterung: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-de.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-el.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-el.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-el.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Greek PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.';
+$PHPMAILER_LANG['empty_message']        = 'Το E-Mail δεν έχει περιεχόμενο .';
+$PHPMAILER_LANG['encoding']             = 'Αγνωστο Encoding-Format: ';
+$PHPMAILER_LANG['execute']              = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: ';
+$PHPMAILER_LANG['file_access']          = 'Αδυναμία προσπέλασης του αρχείου: ';
+$PHPMAILER_LANG['file_open']            = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: ';
+$PHPMAILER_LANG['from_failed']          = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: ';
+$PHPMAILER_LANG['instantiate']          = 'Αδυναμία εκκίνησης Mail function.';
+$PHPMAILER_LANG['invalid_address']      = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
+$PHPMAILER_LANG['provide_address']      = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
+$PHPMAILER_LANG['signing']              = 'Σφάλμα υπογραφής: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Αποτυχία σύνδεσης στον SMTP Server.';
+$PHPMAILER_LANG['smtp_error']           = 'Σφάλμα από τον SMTP Server: ';
+$PHPMAILER_LANG['variable_set']         = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-el.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-eo.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-eo.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-eo.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Esperanto PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Eraro de servilo SMTP : aŭtentigo malsukcesis.';
+$PHPMAILER_LANG['connect_host']         = 'Eraro de servilo SMTP : konektado al servilo malsukcesis.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Eraro de servilo SMTP : neĝustaj datumoj.';
+$PHPMAILER_LANG['empty_message']        = 'Teksto de mesaĝo mankas.';
+$PHPMAILER_LANG['encoding']             = 'Nekonata kodoprezento: ';
+$PHPMAILER_LANG['execute']              = 'Lanĉi rulumadon ne eblis: ';
+$PHPMAILER_LANG['file_access']          = 'Aliro al dosiero ne sukcesis: ';
+$PHPMAILER_LANG['file_open']            = 'Eraro de dosiero: malfermo neeblas: ';
+$PHPMAILER_LANG['from_failed']          = 'Jena adreso de sendinto malsukcesis: ';
+$PHPMAILER_LANG['instantiate']          = 'Genero de retmesaĝa funkcio neeblis.';
+$PHPMAILER_LANG['invalid_address']      = 'Retadreso ne validas: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mesaĝilo ne subtenata.';
+$PHPMAILER_LANG['provide_address']      = 'Vi devas tajpi almenaŭ unu recevontan retadreson.';
+$PHPMAILER_LANG['recipients_failed']    = 'Eraro de servilo SMTP : la jenaj poŝtrecivuloj kaŭzis eraron: ';
+$PHPMAILER_LANG['signing']              = 'Eraro de subskribo: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP konektado malsukcesis.';
+$PHPMAILER_LANG['smtp_error']           = 'Eraro de servilo SMTP : ';
+$PHPMAILER_LANG['variable_set']         = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-eo.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-es.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-es.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-es.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Spanish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Matt Sturdy <matt.sturdy@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Error SMTP: Imposible autentificar.';
+$PHPMAILER_LANG['connect_host']         = 'Error SMTP: Imposible conectar al servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Datos no aceptados.';
+$PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío';
+$PHPMAILER_LANG['encoding']             = 'Codificación desconocida: ';
+$PHPMAILER_LANG['execute']              = 'Imposible ejecutar: ';
+$PHPMAILER_LANG['file_access']          = 'Imposible acceder al archivo: ';
+$PHPMAILER_LANG['file_open']            = 'Error de Archivo: Imposible abrir el archivo: ';
+$PHPMAILER_LANG['from_failed']          = 'La(s) siguiente(s) direcciones de remitente fallaron: ';
+$PHPMAILER_LANG['instantiate']          = 'Imposible crear una instancia de la función Mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Imposible enviar: dirección de email inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';
+$PHPMAILER_LANG['provide_address']      = 'Debe proporcionar al menos una dirección de email de destino.';
+$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Los siguientes destinos fallaron: ';
+$PHPMAILER_LANG['signing']              = 'Error al firmar: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falló.';
+$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'No se pudo configurar la variable: ';
+$PHPMAILER_LANG['extension_missing']    = 'Extensión faltante: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-es.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-et.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-et.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-et.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Estonian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Indrek Päri
+ * @author Elan Ruusamäe <glen@delfi.ee>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Viga: Autoriseerimise viga.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Viga: Vigased andmed.';
+$PHPMAILER_LANG['empty_message']        = 'Tühi kirja sisu';
+$PHPMAILER_LANG["encoding"]             = 'Tundmatu kodeering: ';
+$PHPMAILER_LANG['execute']              = 'Tegevus ebaõnnestus: ';
+$PHPMAILER_LANG['file_access']          = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';
+$PHPMAILER_LANG['file_open']            = 'Faili Viga: Faili avamine ebaõnnestus: ';
+$PHPMAILER_LANG['from_failed']          = 'Järgnev saatja e-posti aadress on vigane: ';
+$PHPMAILER_LANG['instantiate']          = 'mail funktiooni käivitamine ebaõnnestus.';
+$PHPMAILER_LANG['invalid_address']      = 'Saatmine peatatud, e-posti address vigane: ';
+$PHPMAILER_LANG['provide_address']      = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';
+$PHPMAILER_LANG["signing"]              = 'Viga allkirjastamisel: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() ebaõnnestus.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri viga: ';
+$PHPMAILER_LANG['variable_set']         = 'Ei õnnestunud määrata või lähtestada muutujat: ';
+$PHPMAILER_LANG['extension_missing']    = 'Nõutud laiendus on puudu: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-et.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-fa.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-fa.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-fa.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Persian/Farsi PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ali Jazayeri <jaza.ali@gmail.com>
+ * @author Mohammad Hossein Mojtahedi <mhm5000@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'خطای SMTP: احراز هویت با شکست مواجه شد.';
+$PHPMAILER_LANG['connect_host']         = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.';
+$PHPMAILER_LANG['data_not_accepted']    = 'خطای SMTP: داده‌ها نا‌درست هستند.';
+$PHPMAILER_LANG['empty_message']        = 'بخش متن پیام خالی است.';
+$PHPMAILER_LANG['encoding']             = 'کد‌گذاری نا‌شناخته: ';
+$PHPMAILER_LANG['execute']              = 'امکان اجرا وجود ندارد: ';
+$PHPMAILER_LANG['file_access']          = 'امکان دسترسی به فایل وجود ندارد: ';
+$PHPMAILER_LANG['file_open']            = 'خطای File: امکان بازکردن فایل وجود ندارد: ';
+$PHPMAILER_LANG['from_failed']          = 'آدرس فرستنده اشتباه است: ';
+$PHPMAILER_LANG['instantiate']          = 'امکان معرفی تابع ایمیل وجود ندارد.';
+$PHPMAILER_LANG['invalid_address']      = 'آدرس ایمیل معتبر نیست: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.';
+$PHPMAILER_LANG['provide_address']      = 'باید حداقل یک آدرس گیرنده وارد کنید.';
+$PHPMAILER_LANG['recipients_failed']    = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: ';
+$PHPMAILER_LANG['signing']              = 'خطا در امضا: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'خطا در اتصال به SMTP.';
+$PHPMAILER_LANG['smtp_error']           = 'خطا در SMTP Server: ';
+$PHPMAILER_LANG['variable_set']         = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-fa.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-fi.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-fi.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-fi.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Finnish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Jyry Kuukanen
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-virhe: data on virheellinen.';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
+$PHPMAILER_LANG['execute']              = 'Suoritus epäonnistui: ';
+$PHPMAILER_LANG['file_access']          = 'Seuraavaan tiedostoon ei ole oikeuksia: ';
+$PHPMAILER_LANG['file_open']            = 'Tiedostovirhe: Ei voida avata tiedostoa: ';
+$PHPMAILER_LANG['from_failed']          = 'Seuraava lähettäjän osoite on virheellinen: ';
+$PHPMAILER_LANG['instantiate']          = 'mail-funktion luonti epäonnistui.';
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';
+$PHPMAILER_LANG['provide_address']      = 'Aseta vähintään yksi vastaanottajan sähk&ouml;postiosoite.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';
+$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-fi.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-fo.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-fo.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-fo.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Faroese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Dávur Sørensen <http://www.profo-webdesign.dk>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP feilur: Kundi ikki góðkenna.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP feilur: Data ikki góðkent.';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = 'Ókend encoding: ';
+$PHPMAILER_LANG['execute']              = 'Kundi ikki útføra: ';
+$PHPMAILER_LANG['file_access']          = 'Kundi ikki tilganga fílu: ';
+$PHPMAILER_LANG['file_open']            = 'Fílu feilur: Kundi ikki opna fílu: ';
+$PHPMAILER_LANG['from_failed']          = 'fylgjandi Frá/From adressa miseydnaðist: ';
+$PHPMAILER_LANG['instantiate']          = 'Kuni ikki instantiera mail funktión.';
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';
+$PHPMAILER_LANG['provide_address']      = 'Tú skal uppgeva minst móttakara-emailadressu(r).';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-fo.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-fr.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-fr.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-fr.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * French PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * Some French punctuation requires a thin non-breaking space (U+202F) character before it,
+ * for example before a colon or exclamation mark.
+ * There is one of these characters between these quotes: " "
+ * @link http://unicode.org/udhr/n/notes_fra.html
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Erreur SMTP : échec de l\'authentification.';
+$PHPMAILER_LANG['connect_host']         = 'Erreur SMTP : impossible de se connecter au serveur SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Erreur SMTP : données incorrectes.';
+$PHPMAILER_LANG['empty_message']        = 'Corps du message vide.';
+$PHPMAILER_LANG['encoding']             = 'Encodage inconnu : ';
+$PHPMAILER_LANG['execute']              = 'Impossible de lancer l\'exécution : ';
+$PHPMAILER_LANG['file_access']          = 'Impossible d\'accéder au fichier : ';
+$PHPMAILER_LANG['file_open']            = 'Ouverture du fichier impossible : ';
+$PHPMAILER_LANG['from_failed']          = 'L\'adresse d\'expéditeur suivante a échoué : ';
+$PHPMAILER_LANG['instantiate']          = 'Impossible d\'instancier la fonction mail.';
+$PHPMAILER_LANG['invalid_address']      = 'L\'adresse courriel n\'est pas valide : ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
+$PHPMAILER_LANG['provide_address']      = 'Vous devez fournir au moins une adresse de destinataire.';
+$PHPMAILER_LANG['recipients_failed']    = 'Erreur SMTP : les destinataires suivants sont en erreur : ';
+$PHPMAILER_LANG['signing']              = 'Erreur de signature : ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Échec de la connexion SMTP.';
+$PHPMAILER_LANG['smtp_error']           = 'Erreur du serveur SMTP : ';
+$PHPMAILER_LANG['variable_set']         = 'Impossible d\'initialiser ou de réinitialiser une variable : ';
+$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-fr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-gl.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-gl.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-gl.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Galician PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author by Donato Rouco <donatorouco@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Erro SMTP: Non puido ser autentificado.';
+$PHPMAILER_LANG['connect_host']         = 'Erro SMTP: Non puido conectar co servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro SMTP: Datos non aceptados.';
+$PHPMAILER_LANG['empty_message']        = 'Corpo da mensaxe vacía';
+$PHPMAILER_LANG['encoding']             = 'Codificación descoñecida: ';
+$PHPMAILER_LANG['execute']              = 'Non puido ser executado: ';
+$PHPMAILER_LANG['file_access']          = 'Nob puido acceder ó arquivo: ';
+$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: No puido abrir o arquivo: ';
+$PHPMAILER_LANG['from_failed']          = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: ';
+$PHPMAILER_LANG['instantiate']          = 'Non puido crear unha instancia da función Mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Non puido envia-lo correo: dirección de email inválida: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.';
+$PHPMAILER_LANG['provide_address']      = 'Debe engadir polo menos unha dirección de email coma destino.';
+$PHPMAILER_LANG['recipients_failed']    = 'Erro SMTP: Os seguintes destinos fallaron: ';
+$PHPMAILER_LANG['signing']              = 'Erro ó firmar: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallou.';
+$PHPMAILER_LANG['smtp_error']           = 'Erro do servidor SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Non puidemos axustar ou reaxustar a variábel: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-gl.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-he.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-he.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-he.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Hebrew PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ronny Sherer <ronny@hoojima.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'שגיאת SMTP: פעולת האימות נכשלה.';
+$PHPMAILER_LANG['connect_host']         = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'שגיאת SMTP: מידע לא התקבל.';
+$PHPMAILER_LANG['empty_message']        = 'גוף ההודעה ריק';
+$PHPMAILER_LANG['invalid_address']      = 'כתובת שגויה: ';
+$PHPMAILER_LANG['encoding']             = 'קידוד לא מוכר: ';
+$PHPMAILER_LANG['execute']              = 'לא הצלחתי להפעיל את: ';
+$PHPMAILER_LANG['file_access']          = 'לא ניתן לגשת לקובץ: ';
+$PHPMAILER_LANG['file_open']            = 'שגיאת קובץ: לא ניתן לגשת לקובץ: ';
+$PHPMAILER_LANG['from_failed']          = 'כתובות הנמענים הבאות נכשלו: ';
+$PHPMAILER_LANG['instantiate']          = 'לא הצלחתי להפעיל את פונקציית המייל.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.';
+$PHPMAILER_LANG['provide_address']      = 'חובה לספק לפחות כתובת אחת של מקבל המייל.';
+$PHPMAILER_LANG['recipients_failed']    = 'שגיאת SMTP: הנמענים הבאים נכשלו: ';
+$PHPMAILER_LANG['signing']              = 'שגיאת חתימה: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+$PHPMAILER_LANG['smtp_error']           = 'שגיאת שרת SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'לא ניתן לקבוע או לשנות את המשתנה: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-he.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-hr.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-hr.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-hr.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Croatian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Hrvoj3e <hrvoj3e@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela autentikacija.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';
+$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
+$PHPMAILER_LANG['encoding']             = 'Nepoznati encoding: ';
+$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';
+$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';
+$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';
+$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: ';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: ';
+$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';
+$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
+$PHPMAILER_LANG['provide_address']      = 'Definirajte barem jednu adresu primatelja.';
+$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP poslužitelj nije uspjelo.';
+$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP poslužitelja: ';
+$PHPMAILER_LANG['variable_set']         = 'Ne mogu postaviti varijablu niti ju vratiti nazad: ';
+$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-hr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-hu.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-hu.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-hu.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Hungarian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author @dominicus-75
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP hiba: az azonosítás sikertelen.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP hiba: nem lehet kapcsolódni az SMTP-szerverhez.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP hiba: adatok visszautasítva.';
+$PHPMAILER_LANG['empty_message']        = 'Üres az üzenettörzs.';
+$PHPMAILER_LANG['encoding']             = 'Ismeretlen kódolás: ';
+$PHPMAILER_LANG['execute']              = 'Nem lehet végrehajtani: ';
+$PHPMAILER_LANG['file_access']          = 'A következő fájl nem elérhető: ';
+$PHPMAILER_LANG['file_open']            = 'Fájl hiba: a következő fájlt nem lehet megnyitni: ';
+$PHPMAILER_LANG['from_failed']          = 'A feladóként megadott következő cím hibás: ';
+$PHPMAILER_LANG['instantiate']          = 'A PHP mail() függvényt nem sikerült végrehajtani.';
+$PHPMAILER_LANG['invalid_address']      = 'Érvénytelen cím: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' a mailer-osztály nem támogatott.';
+$PHPMAILER_LANG['provide_address']      = 'Legalább egy címzettet fel kell tüntetni.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP hiba: a címzettként megadott következő címek hibásak: ';
+$PHPMAILER_LANG['signing']              = 'Hibás aláírás: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Hiba az SMTP-kapcsolatban.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-szerver hiba: ';
+$PHPMAILER_LANG['variable_set']         = 'A következő változók beállítása nem sikerült: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-hu.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-id.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-id.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-id.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Indonesian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Cecep Prawiro <cecep.prawiro@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengautentikasi.';
+$PHPMAILER_LANG['connect_host']         = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima peladen.';
+$PHPMAILER_LANG['empty_message']        = 'Isi pesan kosong';
+$PHPMAILER_LANG['encoding']             = 'Pengkodean karakter tidak dikenali: ';
+$PHPMAILER_LANG['execute']              = 'Tidak dapat menjalankan proses : ';
+$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses berkas : ';
+$PHPMAILER_LANG['file_open']            = 'Kesalahan File: Berkas tidak bisa dibuka : ';
+$PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan error : ';
+$PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi email';
+$PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat email tidak valid : ';
+$PHPMAILER_LANG['provide_address']      = 'Harus disediakan minimal satu alamat tujuan';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer tidak didukung';
+$PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan error : ';
+$PHPMAILER_LANG['signing']              = 'Kesalahan dalam tanda tangan : ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() gagal.';
+$PHPMAILER_LANG['smtp_error']           = 'Kesalahan peladen SMTP : ';
+$PHPMAILER_LANG['variable_set']         = 'Tidak berhasil mengatur atau mengatur ulang variable : ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-id.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-it.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-it.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-it.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Italian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ilias Bartolini <brain79@inwind.it>
+ * @author Stefano Sabatini <sabas88@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Impossibile autenticarsi.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Impossibile connettersi all\'host SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dati non accettati dal server.';
+$PHPMAILER_LANG['empty_message']        = 'Il corpo del messaggio è vuoto';
+$PHPMAILER_LANG['encoding']             = 'Codifica dei caratteri sconosciuta: ';
+$PHPMAILER_LANG['execute']              = 'Impossibile eseguire l\'operazione: ';
+$PHPMAILER_LANG['file_access']          = 'Impossibile accedere al file: ';
+$PHPMAILER_LANG['file_open']            = 'File Error: Impossibile aprire il file: ';
+$PHPMAILER_LANG['from_failed']          = 'I seguenti indirizzi mittenti hanno generato errore: ';
+$PHPMAILER_LANG['instantiate']          = 'Impossibile istanziare la funzione mail';
+$PHPMAILER_LANG['invalid_address']      = 'Impossibile inviare, l\'indirizzo email non è valido: ';
+$PHPMAILER_LANG['provide_address']      = 'Deve essere fornito almeno un indirizzo ricevente';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: ';
+$PHPMAILER_LANG['signing']              = 'Errore nella firma: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallita.';
+$PHPMAILER_LANG['smtp_error']           = 'Errore del server SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Impossibile impostare o resettare la variabile: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-it.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ja.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ja.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ja.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Japanese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Mitsuhiro Yoshida <http://mitstek.com/>
+ * @author Yoshi Sakai <http://bluemooninc.jp/>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTPエラー: 認証できませんでした。';
+$PHPMAILER_LANG['connect_host']         = 'SMTPエラー: SMTPホストに接続できませんでした。';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTPエラー: データが受け付けられませんでした。';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = '不明なエンコーディング: ';
+$PHPMAILER_LANG['execute']              = '実行できませんでした: ';
+$PHPMAILER_LANG['file_access']          = 'ファイルにアクセスできません: ';
+$PHPMAILER_LANG['file_open']            = 'ファイルエラー: ファイルを開けません: ';
+$PHPMAILER_LANG['from_failed']          = 'Fromアドレスを登録する際にエラーが発生しました: ';
+$PHPMAILER_LANG['instantiate']          = 'メール関数が正常に動作しませんでした。';
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
+$PHPMAILER_LANG['provide_address']      = '少なくとも1つメールアドレスを 指定する必要があります。';
+$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ja.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ka.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ka.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ka.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Georgian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.';
+$PHPMAILER_LANG['encoding']             = 'კოდირების უცნობი ტიპი: ';
+$PHPMAILER_LANG['execute']              = 'შეუძლებელია შემდეგი ბრძანების შესრულება: ';
+$PHPMAILER_LANG['file_access']          = 'შეუძლებელია წვდომა ფაილთან: ';
+$PHPMAILER_LANG['file_open']            = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: ';
+$PHPMAILER_LANG['from_failed']          = 'გამგზავნის არასწორი მისამართი: ';
+$PHPMAILER_LANG['instantiate']          = 'mail ფუნქციის გაშვება ვერ ხერხდება.';
+$PHPMAILER_LANG['provide_address']      = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: ';
+$PHPMAILER_LANG['empty_message']        = 'შეტყობინება ცარიელია';
+$PHPMAILER_LANG['invalid_address']      = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: ';
+$PHPMAILER_LANG['signing']              = 'ხელმოწერის შეცდომა: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'შეცდომა SMTP სერვერთან დაკავშირებისას';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP სერვერის შეცდომა: ';
+$PHPMAILER_LANG['variable_set']         = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: ';
+$PHPMAILER_LANG['extension_missing']    = 'ბიბლიოთეკა არ არსებობს: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ka.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ko.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ko.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ko.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Korean PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author ChalkPE <amato0617@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP 오류: 인증할 수 없습니다.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.';
+$PHPMAILER_LANG['empty_message']        = '메세지 내용이 없습니다';
+$PHPMAILER_LANG['encoding']             = '알 수 없는 인코딩: ';
+$PHPMAILER_LANG['execute']              = '실행 불가: ';
+$PHPMAILER_LANG['file_access']          = '파일 접근 불가: ';
+$PHPMAILER_LANG['file_open']            = '파일 오류: 파일을 열 수 없습니다: ';
+$PHPMAILER_LANG['from_failed']          = '다음 From 주소에서 오류가 발생했습니다: ';
+$PHPMAILER_LANG['instantiate']          = 'mail 함수를 인스턴스화할 수 없습니다';
+$PHPMAILER_LANG['invalid_address']      = '잘못된 주소: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.';
+$PHPMAILER_LANG['provide_address']      = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: ';
+$PHPMAILER_LANG['signing']              = '서명 오류: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 연결을 실패하였습니다.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP 서버 오류: ';
+$PHPMAILER_LANG['variable_set']         = '변수 설정 및 초기화 불가: ';
+$PHPMAILER_LANG['extension_missing']    = '확장자 없음: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ko.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-lt.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-lt.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-lt.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Lithuanian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Dainius Kaupaitis <dk@sum.lt>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP klaida: autentifikacija nepavyko.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP klaida: duomenys nepriimti.';
+$PHPMAILER_LANG['empty_message']        = 'Laiško turinys tuščias';
+$PHPMAILER_LANG['encoding']             = 'Neatpažinta koduotė: ';
+$PHPMAILER_LANG['execute']              = 'Nepavyko įvykdyti komandos: ';
+$PHPMAILER_LANG['file_access']          = 'Byla nepasiekiama: ';
+$PHPMAILER_LANG['file_open']            = 'Bylos klaida: Nepavyksta atidaryti: ';
+$PHPMAILER_LANG['from_failed']          = 'Neteisingas siuntėjo adresas: ';
+$PHPMAILER_LANG['instantiate']          = 'Nepavyko paleisti mail funkcijos.';
+$PHPMAILER_LANG['invalid_address']      = 'Neteisingas adresas: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.';
+$PHPMAILER_LANG['provide_address']      = 'Nurodykite bent vieną gavėjo adresą.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: ';
+$PHPMAILER_LANG['signing']              = 'Prisijungimo klaida: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP susijungimo klaida';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP stoties klaida: ';
+$PHPMAILER_LANG['variable_set']         = 'Nepavyko priskirti reikšmės kintamajam: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-lt.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-lv.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-lv.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-lv.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Latvian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Eduards M. <e@npd.lv>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP kļūda: Autorizācija neizdevās.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Kļūda: Nepieņem informāciju.';
+$PHPMAILER_LANG['empty_message']        = 'Ziņojuma teksts ir tukšs';
+$PHPMAILER_LANG['encoding']             = 'Neatpazīts kodējums: ';
+$PHPMAILER_LANG['execute']              = 'Neizdevās izpildīt komandu: ';
+$PHPMAILER_LANG['file_access']          = 'Fails nav pieejams: ';
+$PHPMAILER_LANG['file_open']            = 'Faila kļūda: Nevar atvērt failu: ';
+$PHPMAILER_LANG['from_failed']          = 'Nepareiza sūtītāja adrese: ';
+$PHPMAILER_LANG['instantiate']          = 'Nevar palaist sūtīšanas funkciju.';
+$PHPMAILER_LANG['invalid_address']      = 'Nepareiza adrese: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.';
+$PHPMAILER_LANG['provide_address']      = 'Lūdzu, norādiet vismaz vienu adresātu.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: ';
+$PHPMAILER_LANG['signing']              = 'Autorizācijas kļūda: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP savienojuma kļūda';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP servera kļūda: ';
+$PHPMAILER_LANG['variable_set']         = 'Nevar piešķirt mainīgā vērtību: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-lv.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ms.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ms.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ms.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Malaysian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Nawawi Jamili <nawawi@rutweb.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Ralat SMTP: Tidak dapat pengesahan.';
+$PHPMAILER_LANG['connect_host']         = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Ralat SMTP: Data tidak diterima oleh pelayan.';
+$PHPMAILER_LANG['empty_message']        = 'Tiada isi untuk mesej';
+$PHPMAILER_LANG['encoding']             = 'Pengekodan tidak diketahui: ';
+$PHPMAILER_LANG['execute']              = 'Tidak dapat melaksanakan: ';
+$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses fail: ';
+$PHPMAILER_LANG['file_open']            = 'Ralat Fail: Tidak dapat membuka fail: ';
+$PHPMAILER_LANG['from_failed']          = 'Berikut merupakan ralat dari alamat e-mel: ';
+$PHPMAILER_LANG['instantiate']          = 'Tidak dapat memberi contoh fungsi e-mel.';
+$PHPMAILER_LANG['invalid_address']      = 'Alamat emel tidak sah: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.';
+$PHPMAILER_LANG['provide_address']      = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.';
+$PHPMAILER_LANG['recipients_failed']    = 'Ralat SMTP: Penerima e-mel berikut telah gagal: ';
+$PHPMAILER_LANG['signing']              = 'Ralat pada tanda tangan: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() telah gagal.';
+$PHPMAILER_LANG['smtp_error']           = 'Ralat pada pelayan SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ms.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-nb.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-nb.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-nb.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Norwegian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Feil: Kunne ikke autentisere.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Feil: Data ble ikke akseptert.';
+$PHPMAILER_LANG['empty_message']        = 'Meldingsinnholdet er tomt';
+$PHPMAILER_LANG['encoding']             = 'Ukjent tegnkoding: ';
+$PHPMAILER_LANG['execute']              = 'Kunne ikke utføre: ';
+$PHPMAILER_LANG['file_access']          = 'Får ikke tilgang til filen: ';
+$PHPMAILER_LANG['file_open']            = 'Fil feil: Kunne ikke åpne filen: ';
+$PHPMAILER_LANG['from_failed']          = 'Følgende avsenderadresse feilet: ';
+$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere mailfunksjonen.';
+$PHPMAILER_LANG['invalid_address']      = 'Meldingen ble ikke sendt, følgende adresse er ugyldig: ';
+$PHPMAILER_LANG['provide_address']      = 'Du må angi minst en mottakeradresse.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer er ikke supportert.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feil: Følgende mottagere feilet: ';
+$PHPMAILER_LANG['signing']              = 'Signeringsfeil: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() feilet.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfeil: ';
+$PHPMAILER_LANG['variable_set']         = 'Kan ikke sette eller resette variabelen: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-nb.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-nl.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-nl.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-nl.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Dutch PHPMailer language file: refer to class.phpmailer.php for definitive list.
+ * @package PHPMailer
+ * @author Tuxion <team@tuxion.nl>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: authenticatie mislukt.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon niet verbinden met SMTP-host.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data niet geaccepteerd.';
+$PHPMAILER_LANG['empty_message']        = 'Berichttekst is leeg';
+$PHPMAILER_LANG['encoding']             = 'Onbekende codering: ';
+$PHPMAILER_LANG['execute']              = 'Kon niet uitvoeren: ';
+$PHPMAILER_LANG['file_access']          = 'Kreeg geen toegang tot bestand: ';
+$PHPMAILER_LANG['file_open']            = 'Bestandsfout: kon bestand niet openen: ';
+$PHPMAILER_LANG['from_failed']          = 'Het volgende afzendersadres is mislukt: ';
+$PHPMAILER_LANG['instantiate']          = 'Kon mailfunctie niet initialiseren.';
+$PHPMAILER_LANG['invalid_address']      = 'Ongeldig adres: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
+$PHPMAILER_LANG['provide_address']      = 'Er moet minstens één ontvanger worden opgegeven.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';
+$PHPMAILER_LANG['signing']              = 'Signeerfout: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Verbinding mislukt.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfout: ';
+$PHPMAILER_LANG['variable_set']         = 'Kan de volgende variabele niet instellen of resetten: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-nl.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-pl.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-pl.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-pl.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Polish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';
+$PHPMAILER_LANG['connect_host']         = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Błąd SMTP: Dane nie zostały przyjęte.';
+$PHPMAILER_LANG['empty_message']        = 'Wiadomość jest pusta.';
+$PHPMAILER_LANG['encoding']             = 'Nieznany sposób kodowania znaków: ';
+$PHPMAILER_LANG['execute']              = 'Nie można uruchomić: ';
+$PHPMAILER_LANG['file_access']          = 'Brak dostępu do pliku: ';
+$PHPMAILER_LANG['file_open']            = 'Nie można otworzyć pliku: ';
+$PHPMAILER_LANG['from_failed']          = 'Następujący adres Nadawcy jest nieprawidłowy: ';
+$PHPMAILER_LANG['instantiate']          = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
+$PHPMAILER_LANG['invalid_address']      = 'Nie można wysłać wiadomości, '.
+    'następujący adres Odbiorcy jest nieprawidłowy: ';
+$PHPMAILER_LANG['provide_address']      = 'Należy podać prawidłowy adres email Odbiorcy.';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
+$PHPMAILER_LANG['recipients_failed']    = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';
+$PHPMAILER_LANG['signing']              = 'Błąd podpisywania wiadomości: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zakończone niepowodzeniem.';
+$PHPMAILER_LANG['smtp_error']           = 'Błąd SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Nie można ustawić lub zmodyfikować zmiennej: ';
+$PHPMAILER_LANG['extension_missing']    = 'Brakujące rozszerzenie: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-pl.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-pt.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-pt.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-pt.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Portuguese (European) PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Jonadabe <jonadabe@hotmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Erro do SMTP: Não foi possível realizar a autenticação.';
+$PHPMAILER_LANG['connect_host']         = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro do SMTP: Os dados foram rejeitados.';
+$PHPMAILER_LANG['empty_message']        = 'A mensagem no e-mail está vazia.';
+$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
+$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
+$PHPMAILER_LANG['file_access']          = 'Não foi possível aceder o ficheiro: ';
+$PHPMAILER_LANG['file_open']            = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: ';
+$PHPMAILER_LANG['from_failed']          = 'Ocorreram falhas nos endereços dos seguintes remententes: ';
+$PHPMAILER_LANG['instantiate']          = 'Não foi possível iniciar uma instância da função mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
+$PHPMAILER_LANG['provide_address']      = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.';
+$PHPMAILER_LANG['recipients_failed']    = 'Erro do SMTP: O endereço do seguinte destinatário falhou: ';
+$PHPMAILER_LANG['signing']              = 'Erro ao assinar: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
+$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
+$PHPMAILER_LANG['extension_missing']    = 'Extensão em falta: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-pt.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-pt_br.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-pt_br.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-pt_br.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Paulo Henrique Garcia <paulo@controllerweb.com.br>
+ * @author Lucas Guimarães <lucas@lucasguimaraes.com>
+ * @author Phelipe Alves <phelipealvesdesouza@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Erro de SMTP: Não foi possível autenticar.';
+$PHPMAILER_LANG['connect_host']         = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro de SMTP: Dados rejeitados.';
+$PHPMAILER_LANG['empty_message']        = 'Mensagem vazia';
+$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
+$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
+$PHPMAILER_LANG['file_access']          = 'Não foi possível acessar o arquivo: ';
+$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';
+$PHPMAILER_LANG['from_failed']          = 'Os seguintes remententes falharam: ';
+$PHPMAILER_LANG['instantiate']          = 'Não foi possível instanciar a função mail.';
+$PHPMAILER_LANG['invalid_address']      = 'Endereço de e-mail inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
+$PHPMAILER_LANG['provide_address']      = 'Você deve informar pelo menos um destinatário.';
+$PHPMAILER_LANG['recipients_failed']    = 'Erro de SMTP: Os seguintes destinatários falharam: ';
+$PHPMAILER_LANG['signing']              = 'Erro de Assinatura: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
+$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
+$PHPMAILER_LANG['extension_missing']    = 'Extensão ausente: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-pt_br.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ro.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ro.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ro.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Romanian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Alex Florea <alecz.fia@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Eroare SMTP: Autentificarea a eșuat.';
+$PHPMAILER_LANG['connect_host']         = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Eroare SMTP: Datele nu au fost acceptate.';
+$PHPMAILER_LANG['empty_message']        = 'Mesajul este gol.';
+$PHPMAILER_LANG['encoding']             = 'Encodare necunoscută: ';
+$PHPMAILER_LANG['execute']              = 'Nu se poate executa următoarea comandă:  ';
+$PHPMAILER_LANG['file_access']          = 'Nu se poate accesa următorul fișier: ';
+$PHPMAILER_LANG['file_open']            = 'Eroare fișier: Nu se poate deschide următorul fișier: ';
+$PHPMAILER_LANG['from_failed']          = 'Următoarele adrese From au dat eroare: ';
+$PHPMAILER_LANG['instantiate']          = 'Funcția mail nu a putut fi inițializată.';
+$PHPMAILER_LANG['invalid_address']      = 'Adresa de email nu este validă: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';
+$PHPMAILER_LANG['provide_address']      = 'Trebuie să adăugați cel puțin o adresă de email.';
+$PHPMAILER_LANG['recipients_failed']    = 'Eroare SMTP: Următoarele adrese de email au eșuat: ';
+$PHPMAILER_LANG['signing']              = 'A aparut o problemă la semnarea emailului. ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Conectarea la serverul SMTP a eșuat.';
+$PHPMAILER_LANG['smtp_error']           = 'Eroare server SMTP: ';
+$PHPMAILER_LANG['variable_set']         = 'Nu se poate seta/reseta variabila. ';
+$PHPMAILER_LANG['extension_missing']    = 'Lipsește extensia: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ro.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-ru.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-ru.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-ru.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Russian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Alexey Chumakov <alex@chumakov.ru>
+ * @author Foster Snowhill <i18n@forstwoof.ru>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Ошибка SMTP: ошибка авторизации.';
+$PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к серверу SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Ошибка SMTP: данные не приняты.';
+$PHPMAILER_LANG['encoding']             = 'Неизвестный вид кодировки: ';
+$PHPMAILER_LANG['execute']              = 'Невозможно выполнить команду: ';
+$PHPMAILER_LANG['file_access']          = 'Нет доступа к файлу: ';
+$PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удается открыть файл: ';
+$PHPMAILER_LANG['from_failed']          = 'Неверный адрес отправителя: ';
+$PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail.';
+$PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один адрес e-mail получателя.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
+$PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: отправка по следующим адресам получателей не удалась: ';
+$PHPMAILER_LANG['empty_message']        = 'Пустое сообщение';
+$PHPMAILER_LANG['invalid_address']      = 'Не отослано, неправильный формат email адреса: ';
+$PHPMAILER_LANG['signing']              = 'Ошибка подписи: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ошибка соединения с SMTP-сервером';
+$PHPMAILER_LANG['smtp_error']           = 'Ошибка SMTP-сервера: ';
+$PHPMAILER_LANG['variable_set']         = 'Невозможно установить или переустановить переменную: ';
+$PHPMAILER_LANG['extension_missing']    = 'Расширение отсутствует: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-ru.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-sk.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-sk.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-sk.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Slovak PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Michal Tinka <michaltinka@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Chyba autentifikácie.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dáta neboli prijaté';
+$PHPMAILER_LANG['empty_message']        = 'Prázdne telo správy.';
+$PHPMAILER_LANG['encoding']             = 'Neznáme kódovanie: ';
+$PHPMAILER_LANG['execute']              = 'Nedá sa vykonať: ';
+$PHPMAILER_LANG['file_access']          = 'Súbor nebol nájdený: ';
+$PHPMAILER_LANG['file_open']            = 'File Error: Súbor sa otvoriť pre čítanie: ';
+$PHPMAILER_LANG['from_failed']          = 'Následujúca adresa From je nesprávna: ';
+$PHPMAILER_LANG['instantiate']          = 'Nedá sa vytvoriť inštancia emailovej funkcie.';
+$PHPMAILER_LANG['invalid_address']      = 'Neodoslané, emailová adresa je nesprávna: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.';
+$PHPMAILER_LANG['provide_address']      = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Adresy príjemcov niesu správne ';
+$PHPMAILER_LANG['signing']              = 'Chyba prihlasovania: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zlyhalo.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP chyba serveru: ';
+$PHPMAILER_LANG['variable_set']         = 'Nemožno nastaviť alebo resetovať premennú: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-sk.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-sl.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-sl.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-sl.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Slovene PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Klemen Tušar <techouse@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP napaka: Avtentikacija ni uspela.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Ne morem vzpostaviti povezave s SMTP gostiteljem.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP napaka: Strežnik zavrača podatke.';
+$PHPMAILER_LANG['empty_message']        = 'E-poštno sporočilo nima vsebine.';
+$PHPMAILER_LANG['encoding']             = 'Nepoznan tip kodiranja: ';
+$PHPMAILER_LANG['execute']              = 'Operacija ni uspela: ';
+$PHPMAILER_LANG['file_access']          = 'Nimam dostopa do datoteke: ';
+$PHPMAILER_LANG['file_open']            = 'Ne morem odpreti datoteke: ';
+$PHPMAILER_LANG['from_failed']          = 'Neveljaven e-naslov pošiljatelja: ';
+$PHPMAILER_LANG['instantiate']          = 'Ne morem inicializirati mail funkcije.';
+$PHPMAILER_LANG['invalid_address']      = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
+$PHPMAILER_LANG['provide_address']      = 'Prosim vnesite vsaj enega naslovnika.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
+$PHPMAILER_LANG['signing']              = 'Napaka pri podpisovanju: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';
+$PHPMAILER_LANG['smtp_error']           = 'Napaka SMTP strežnika: ';
+$PHPMAILER_LANG['variable_set']         = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-sl.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-sr.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-sr.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-sr.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Serbian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Александар Јевремовић <ajevremovic@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: аутентификација није успела.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: није могуће повезивање са SMTP сервером.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: подаци нису прихваћени.';
+$PHPMAILER_LANG['empty_message']        = 'Садржај поруке је празан.';
+$PHPMAILER_LANG['encoding']             = 'Непознато кодовање: ';
+$PHPMAILER_LANG['execute']              = 'Није могуће извршити наредбу: ';
+$PHPMAILER_LANG['file_access']          = 'Није могуће приступити датотеци: ';
+$PHPMAILER_LANG['file_open']            = 'Није могуће отворити датотеку: ';
+$PHPMAILER_LANG['from_failed']          = 'SMTP грешка: слање са следећих адреса није успело: ';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: слање на следеће адресе није успело: ';
+$PHPMAILER_LANG['instantiate']          = 'Није могуће покренути mail функцију.';
+$PHPMAILER_LANG['invalid_address']      = 'Порука није послата због неисправне адресе: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';
+$PHPMAILER_LANG['provide_address']      = 'Потребно је задати најмање једну адресу.';
+$PHPMAILER_LANG['signing']              = 'Грешка приликом пријављивања: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Повезивање са SMTP сервером није успело.';
+$PHPMAILER_LANG['smtp_error']           = 'Грешка SMTP сервера: ';
+$PHPMAILER_LANG['variable_set']         = 'Није могуће задати променљиву, нити је вратити уназад: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-sr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-sv.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-sv.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-sv.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Swedish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Johan Linnér <johan@linner.biz>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP fel: Kunde inte autentisera.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP fel: Kunde inte ansluta till SMTP-server.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fel: Data accepterades inte.';
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
+$PHPMAILER_LANG['encoding']             = 'Okänt encode-format: ';
+$PHPMAILER_LANG['execute']              = 'Kunde inte köra: ';
+$PHPMAILER_LANG['file_access']          = 'Ingen åtkomst till fil: ';
+$PHPMAILER_LANG['file_open']            = 'Fil fel: Kunde inte öppna fil: ';
+$PHPMAILER_LANG['from_failed']          = 'Följande avsändaradress är felaktig: ';
+$PHPMAILER_LANG['instantiate']          = 'Kunde inte initiera e-postfunktion.';
+$PHPMAILER_LANG['invalid_address']      = 'Felaktig adress: ';
+$PHPMAILER_LANG['provide_address']      = 'Du måste ange minst en mottagares e-postadress.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP fel: Följande mottagare är felaktig: ';
+$PHPMAILER_LANG['signing']              = 'Signerings fel: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() misslyckades.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP server fel: ';
+$PHPMAILER_LANG['variable_set']         = 'Kunde inte definiera eller återställa variabel: ';
+$PHPMAILER_LANG['extension_missing']    = 'Tillägg ej tillgängligt: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-sv.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-tr.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-tr.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-tr.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Turkish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Elçin Özel
+ * @author Can Yılmaz
+ * @author Mehmet Benlioğlu
+ * @author @yasinaydin
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP Hatası: Oturum açılamadı.';
+$PHPMAILER_LANG['connect_host']         = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Hatası: Veri kabul edilmedi.';
+$PHPMAILER_LANG['empty_message']        = 'Mesajın içeriği boş';
+$PHPMAILER_LANG['encoding']             = 'Bilinmeyen karakter kodlama: ';
+$PHPMAILER_LANG['execute']              = 'Çalıştırılamadı: ';
+$PHPMAILER_LANG['file_access']          = 'Dosyaya erişilemedi: ';
+$PHPMAILER_LANG['file_open']            = 'Dosya Hatası: Dosya açılamadı: ';
+$PHPMAILER_LANG['from_failed']          = 'Belirtilen adreslere gönderme başarısız: ';
+$PHPMAILER_LANG['instantiate']          = 'Örnek e-posta fonksiyonu oluşturulamadı.';
+$PHPMAILER_LANG['invalid_address']      = 'Geçersiz e-posta adresi: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.';
+$PHPMAILER_LANG['provide_address']      = 'En az bir alıcı e-posta adresi belirtmelisiniz.';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: ';
+$PHPMAILER_LANG['signing']              = 'İmzalama hatası: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP connect() fonksiyonu başarısız.';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP sunucu hatası: ';
+$PHPMAILER_LANG['variable_set']         = 'Değişken ayarlanamadı ya da sıfırlanamadı: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-tr.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-uk.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-uk.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-uk.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Ukrainian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Yuriy Rudyy <yrudyy@prs.net.ua>
+ * @fixed by Boris Yurchenko <boris@yurchenko.pp.ua>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Помилка SMTP: помилка авторизації.';
+$PHPMAILER_LANG['connect_host']         = 'Помилка SMTP: не вдається під\'єднатися до серверу SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Помилка SMTP: дані не прийняті.';
+$PHPMAILER_LANG['encoding']             = 'Невідомий тип кодування: ';
+$PHPMAILER_LANG['execute']              = 'Неможливо виконати команду: ';
+$PHPMAILER_LANG['file_access']          = 'Немає доступу до файлу: ';
+$PHPMAILER_LANG['file_open']            = 'Помилка файлової системи: не вдається відкрити файл: ';
+$PHPMAILER_LANG['from_failed']          = 'Невірна адреса відправника: ';
+$PHPMAILER_LANG['instantiate']          = 'Неможливо запустити функцію mail.';
+$PHPMAILER_LANG['provide_address']      = 'Будь-ласка, введіть хоча б одну адресу e-mail отримувача.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
+$PHPMAILER_LANG['recipients_failed']    = 'Помилка SMTP: відправлення наступним отримувачам не вдалося: ';
+$PHPMAILER_LANG['empty_message']        = 'Пусте тіло повідомлення';
+$PHPMAILER_LANG['invalid_address']      = 'Не відправлено, невірний формат адреси e-mail: ';
+$PHPMAILER_LANG['signing']              = 'Помилка підпису: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Помилка з\'єднання із SMTP-сервером';
+$PHPMAILER_LANG['smtp_error']           = 'Помилка SMTP-сервера: ';
+$PHPMAILER_LANG['variable_set']         = 'Неможливо встановити або перевстановити змінну: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-uk.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-vi.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-vi.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-vi.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Vietnamese (Tiếng Việt) PHPMailer language file: refer to English translation for definitive list.
+ * @package PHPMailer
+ * @author VINADES.,JSC <contact@vinades.vn>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'Lỗi SMTP: Không thể xác thực.';
+$PHPMAILER_LANG['connect_host']         = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.';
+$PHPMAILER_LANG['data_not_accepted']    = 'Lỗi SMTP: Dữ liệu không được chấp nhận.';
+$PHPMAILER_LANG['empty_message']        = 'Không có nội dung';
+$PHPMAILER_LANG['encoding']             = 'Mã hóa không xác định: ';
+$PHPMAILER_LANG['execute']              = 'Không thực hiện được: ';
+$PHPMAILER_LANG['file_access']          = 'Không thể truy cập tệp tin ';
+$PHPMAILER_LANG['file_open']            = 'Lỗi Tập tin: Không thể mở tệp tin: ';
+$PHPMAILER_LANG['from_failed']          = 'Lỗi địa chỉ gửi đi: ';
+$PHPMAILER_LANG['instantiate']          = 'Không dùng được các hàm gửi thư.';
+$PHPMAILER_LANG['invalid_address']      = 'Đại chỉ emai không đúng: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.';
+$PHPMAILER_LANG['provide_address']      = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.';
+$PHPMAILER_LANG['recipients_failed']    = 'Lỗi SMTP: lỗi địa chỉ người nhận: ';
+$PHPMAILER_LANG['signing']              = 'Lỗi đăng nhập: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Lỗi kết nối với SMTP';
+$PHPMAILER_LANG['smtp_error']           = 'Lỗi máy chủ smtp ';
+$PHPMAILER_LANG['variable_set']         = 'Không thể thiết lập hoặc thiết lập lại biến: ';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-vi.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-zh.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-zh.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-zh.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Traditional Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author liqwei <liqwei@liqwei.com>
+ * @author Peter Dave Hello <@PeterDaveHello/>
+ * @author Jason Chiang <xcojad@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP 錯誤：登入失敗。';
+$PHPMAILER_LANG['connect_host']         = 'SMTP 錯誤：無法連線到 SMTP 主機。';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 錯誤：無法接受的資料。';
+$PHPMAILER_LANG['empty_message']        = '郵件內容為空';
+$PHPMAILER_LANG['encoding']             = '未知編碼: ';
+$PHPMAILER_LANG['execute']              = '無法執行：';
+$PHPMAILER_LANG['file_access']          = '無法存取檔案：';
+$PHPMAILER_LANG['file_open']            = '檔案錯誤：無法開啟檔案：';
+$PHPMAILER_LANG['from_failed']          = '發送地址錯誤：';
+$PHPMAILER_LANG['instantiate']          = '未知函數呼叫。';
+$PHPMAILER_LANG['invalid_address']      = '因為電子郵件地址無效，無法傳送: ';
+$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。';
+$PHPMAILER_LANG['provide_address']      = '必須提供至少一個收件人地址。';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 錯誤：以下收件人地址錯誤：';
+$PHPMAILER_LANG['signing']              = '電子簽章錯誤: ';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 連線失敗';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP 伺服器錯誤: ';
+$PHPMAILER_LANG['variable_set']         = '無法設定或重設變數: ';
+$PHPMAILER_LANG['extension_missing']    = '遺失模組 Extension: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-zh.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/phpmailer/language/phpmailer.lang-zh_cn.php
===================================================================
--- trunk/include/phpmailer/language/phpmailer.lang-zh_cn.php	(nonexistent)
+++ trunk/include/phpmailer/language/phpmailer.lang-zh_cn.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Simplified Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author liqwei <liqwei@liqwei.com>
+ * @author young <masxy@foxmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate']         = 'SMTP 错误：登录失败。';
+$PHPMAILER_LANG['connect_host']         = 'SMTP 错误：无法连接到 SMTP 主机。';
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误：数据不被接受。';
+$PHPMAILER_LANG['empty_message']        = '邮件正文为空。';
+$PHPMAILER_LANG['encoding']             = '未知编码: ';
+$PHPMAILER_LANG['execute']              = '无法执行：';
+$PHPMAILER_LANG['file_access']          = '无法访问文件：';
+$PHPMAILER_LANG['file_open']            = '文件错误：无法打开文件：';
+$PHPMAILER_LANG['from_failed']          = '发送地址错误：';
+$PHPMAILER_LANG['instantiate']          = '未知函数调用。';
+$PHPMAILER_LANG['invalid_address']      = '发送失败，电子邮箱地址是无效的：';
+$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';
+$PHPMAILER_LANG['provide_address']      = '必须提供至少一个收件人地址。';
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误：收件人地址错误：';
+$PHPMAILER_LANG['signing']              = '登录失败：';
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP服务器连接失败。';
+$PHPMAILER_LANG['smtp_error']           = 'SMTP服务器出错: ';
+$PHPMAILER_LANG['variable_set']         = '无法设置或重置变量：';
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

Property changes on: trunk/include/phpmailer/language/phpmailer.lang-zh_cn.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/License.txt
===================================================================
--- trunk/include/yui/License.txt	(nonexistent)
+++ trunk/include/yui/License.txt	(revision 2)
@@ -0,0 +1,22 @@
+The actual License of Yahoo YUI
+are here :
+http://developer.yahoo.com/yui/license.html
+
+Software License Agreement (BSD License)
+Copyright (c) 2008, Yahoo! Inc.
+All rights reserved.
+Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the
+following disclaimer.
+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.
+Neither the name of Yahoo! Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of Yahoo! Inc.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.
+
+Sources of Intellectual Property Included in the YUI Library
+Where not otherwise indicated, all YUI content is authored by Yahoo! engineers and consists of Yahoo!-owned intellectual property. YUI is issued by Yahoo! under the BSD license above. In some specific instances, YUI will incorporate work done by developers outside of Yahoo! with their express permission. In these instances, copyright is retained by the author; however, in the context of the YUI library it is issued under the BSD license.
+
+Below is the explicit list of external (non-Yahoo) sources of intellectual property in YUI:
+
+Douglas Crockford's JSON parsing and stringifying methods: In the JSON Utility, Douglas Crockford's JSON parsing and stringifying methods are adapted from work published at JSON.org. The adapted work is in the public domain.
+Robert Penner's animation-easing algorithms: In the Animation Utility, YUI makes use of Robert Penner's algorithms for easing.
Index: trunk/include/yui/README
===================================================================
--- trunk/include/yui/README	(nonexistent)
+++ trunk/include/yui/README	(revision 2)
@@ -0,0 +1,257 @@
+YUI Library Release Notes
+
+*** version 2.4.1 ***
+
+This release fixes a IE memory leak when attaching listeners
+to iframes/windows, as well as a few example updates.  Of the 
+YUI components, only event has changed since 2.4.0.
+
+*** version 2.4.0 ***
+
+This release introduces five new components into YUI:
+
+   * Selector
+   * Charts Widget
+   * Get Utility
+   * Profiler
+   * JSON Utility
+   
+These new components are introduced as "beta", with the exception of the Charts
+Widget which is released as an experimental component.  Please see the YUI FAQ
+on the definition of beta and experimental at:
+http://developer.yahoo.com/yui/articles/faq/#beta
+
+In addition to new components, you'll find updates and bug fixes throughout the
+library.
+
+*** version 2.3.1 ***
+
+This update contains general fixes to the YUI library.  Please see the README
+file for each component in the build directory for specific updates since
+version 2.3.0.
+
+*** version 2.3.0 ***
+
+This release introduces six new components into YUI:
+
+   * Base CSS
+   * Color Picker Control
+   * ImageLoader Utility
+   * Rich Text Editor
+   * YUI Loader Utility
+   * YUI Test Utility
+   
+These new components are introduced as "beta", with the exception of ImageLoader
+Utility which is released as an experimental component.  Please see the YUI 
+FAQ on the definition of beta and experimental at:
+http://developer.yahoo.com/yui/articles/faq/#beta
+
+In addition to new components, you'll find updates and bug fixes throughout the
+library.
+
+*** version 2.2.2 ***
+
+This update contains general fixes to the YUI library.  Please see the
+README file for each component in the build directory for specific updates since
+version 2.2.1.
+
+*** version 2.2.1 ***
+
+This update contains general fixes to the YUI library.  Please see the
+README file for each component in the build directory for specific updates since
+version 2.2.0.
+
+*** version 2.2.0 ***
+
+This release synchronizes the SourceForge version with Yahoo!'s version of YUI
+-- version number 2.2.0.  Please see the following blog article for information
+on this specific version increment at:
+http://www.yuiblog.com/blog/2007/02/20/yui-220-released
+
+The following new components are introduced with this release:
+
+   * Button
+   * DataTable
+   * Browser History Manager
+
+   The following components are now available as utilities:
+
+   * Element
+   * DataSource
+
+These new components are introduced as "beta", with the exception of Browser
+History Manager as an experimental component.  Please see the YUI FAQ on the
+definition of beta and experimental at:
+http://developer.yahoo.com/yui/articles/faq/#beta
+
+* CSS customizations *
+Calendar, Container, and Menu have been revised to allow image customizations
+through their respective CSS files.  Please refer to each component's README to
+see the full details on affected properties.
+
+Additional details for fixes and updates can be found in the README files for
+each updated component.  All YUI API cheatsheets have been updated for the
+current version and can be found at: yui/docs/assets/cheatsheets.zip.
+
+*** version 0.12.2 ***
+
+This update contains general fixes to the YUI library.  Please see the
+README file for each component in the build directory for specific updates since
+version 0.12.1.  As part of the 0.12.2 update, a number of corrections have been
+made to functional examples that were configured incorrectly in 0.12.1.
+
+*** version 0.12.1 ***
+
+This update contains general fixes to the YUI library.  Please see the
+README file for each component in the build directory for specific updates since
+version 0.12.0.
+
+Beginning with this release, all YUI minification will be performed with JSMin(
+http://www.crockford.com/javascript/jsmin.html).  Line breaks will be preserved.
+
+*** version 0.12.0 ***
+
+This version introduces the Tabview widget as well as general fixes to the YUI
+library.  Additional details can be found in the README files for each updated
+component.  All YUI API cheatsheets have been updated for the current version
+and can be found at: yui/docs/assets/cheatsheets.zip.
+
+* documentation *
+The YUI API documentation format is revised with this release.  This new
+format -- now a flat file structure under yui/docs/ -- implements the YUI
+AutoComplete widget on the main landing page to allow keyword searching of YUI.
+It also contains the full API documentation for all YUI components along with
+the following categories of data for each component(if applicable):
+
+* Inheritance hierarchy for extensions and subclasses.
+* YUI dependencies
+* Properties and methods
+* Events
+* Configuration attributes.
+
+* concatenated files *
+For convenience, three additional, minified variations of YUI are now available
+for your use:
+
+* reset-fonts-grids.css
+* yahoo-dom-event.js
+* utilities.js
+
+* API changes *
+There are interface changes to the Calendar widget.  Please see the 0.12.0
+Calendar upgrade guide at http:// developer.yahoo.com/yui/calendar/upgrade.html
+to see if this update affects your Calendar implementation and instructions on
+upgrading to version 0.12.0.
+
+
+*** version 0.11.4 ***
+
+This update contains some priority bug fixes to the following components:
+
+* Yahoo
+* Container
+* Drag and Drop
+* Event
+
+Additional details can be found in the README files for each updated component.
+
+*** version 0.11.3 ***
+
+This update contains general fixes to the YUI library.  Please see the
+README file for each component in the build directory for updates and fixes
+since version 0.11.2.
+
+*** version 0.11.2 ***
+
+This update contains a high-priority fix to Drag and Drop that prevents text
+selection.  Additional details can be found in the README file for:
+
+* Drag and Drop
+
+*** version 0.11.1 ***
+
+Release 0.11.1 addresses some high-priority bugs reported in the recently
+released version 0.11.0. Additional details can be found in the README files for
+each updated component:
+
+* Animation
+* Dom
+* Drag and Drop
+* Connection Manager
+* Container
+
+*** version 0.11.0 ***
+
+This version introduces the Logger widget.  The YUI cheatsheets for version
+0.11.0 and 0.10.0 are also included in this distribution under docs/assets.
+
+Please see the README file for each component in the build directory for
+updates and fixes since version 0.10.0.
+
+*** version 0.10.0 ***
+
+In this release, the directory structure has been modified to provide more
+component organization.  This is the new format:
+
+yui/
+  |
+  -- build/
+  | |
+  | -- dom/
+  | |
+  | | -- assets/
+  | |
+  | | -- dom.js
+  | |
+  -- docs/
+  | |
+  | -- dom/
+  | |
+  -- examples/
+  | |
+  | -- dom/
+  | |
+  | | -- img/
+
+Notice there are three immediate directories under the
+root YUI.  They are:
+
+*build/*
+This directory contains the source files for each YUI component, and each
+component is presented as a sub-directory under build/.  Notice that there are
+generally two source files: component.js and component-min.js.  The "component"
+source is the raw, commented build and "component-min" is the minified version
+of the same file with comments and whitespace removed.  With some components,
+there is an assets sub-directory.  CSS and image dependencies for each
+component are stored in its assets sub-directory.
+
+Note: If a component makes use of images, the image source path in the
+component's CSS file will point to Akamai.  The physical images are also
+available in the assets/ directory for local availability.  Please modify the
+CSS image references if you wish to use your own image assets.
+
+*docs/*
+This directory contains the jsdoc-generated API reference for every YUI
+component.  Each component is presented as a sub-directory under docs/.
+
+*examples/*
+This directory contains functional examples for each component in the YUI
+Library.  The examples are not part of the formal distribution; rather,
+they provide demonstrations of each component in use.  Each example uses YUI
+Library source files from the build/ directory, while all example-specific
+dependencies are stored in sub-directories (e.g. examples/dom/img).
+Some components, including the AutoComplete Control and Connection Manager,
+make use of PHP to implement certain examples.
+
+For example:
+In yui/examples/dom, the dom.js source file and all YUI .js dependencies
+are drawn from yui/build/ directories.  All other example-specific sources are
+stored as sub-directories: yui/examples/dom/css and yui/examples/dom/img.
+
+Each functional example is also available and functional on
+developer.yahoo.com/yui/.  They reproduced here as part of the distribution
+for your convenience.
+
+
+
+
Index: trunk/include/yui/connection/README
===================================================================
--- trunk/include/yui/connection/README	(nonexistent)
+++ trunk/include/yui/connection/README	(revision 2)
@@ -0,0 +1,259 @@
+Connection Manager Release Notes
+
+*** version 2.4.1 ***
+
+No change
+
+*** version 2.4.0 ***
+
+* [FIXED] SF1804153.  Transactions initialized with setForm() now properly clear
+the POST data field after each transaction.
+
+* The callback object can accept a new member, cache, defined with a boolean
+value.  If set to false (e.g., var callback = { cache:false };), a timestamp
+will be appended to the URI to override HTTP GET caching.  This timestamp value
+will appear as rnd=timestamp in the request querystring.
+
+* Custom Events startEvent, completeEvent, and abortEvent now receive
+callback.argument, if defined, in addition to the transaction ID.  Each Custom
+Event's function handler receives two arguments -- the event type as the first
+argument, and an array as the second argument.  The first element in the array
+is the transaction ID, and the second element are any arguments defined in the
+callback object.
+
+*** version 2.3.1 ***
+
+* setDefaultPostHeader() can now be overloaded with a boolean, string, or
+number.  By default, POST transactions send the following Content-Type header:
+'application/x-www-form-urlencoded; charset=UTF-8'.
+
+A custom Content-Type header can now be set by passing its value to
+setDefaultPostHeader().
+
+* HTML form submissions now send a Content-Type header of "application/x-www-
+form-urlencoded", omitting the charset=UTF-8 value.
+
+* setDefaultXhrHeader() can now be overloaded with a boolean, string, or number.
+By default, all transactions send a custom header of "X-Requested-
+With:XMLHttpRequest".
+
+This default header value can be overridden by passing the desired value as an
+argument to setDefaultPostHeader().
+
+* The file upload iframe's event listener is now explicitly removed before the
+iframe is destroyed.
+
+*** version 2.3.0 ***
+
+* Custom Events are introduced in Connection Manager.  These events -- for a
+non-file upload transaction -- are:
+
+   * startEvent
+   * completeEvent
+   * successEvent
+   * failureEvent
+   * abortEvent
+
+For transactions involving file upload with an HTML form, the events are:
+
+   * startEvent
+   * completeEvent
+   * uploadEvent
+   * abortEvent
+
+* Event utility is a now Connection Manager dependency.
+
+* abort() and isCallInProgress() are now functional for file upload
+transactions.
+
+* NOTE: The native XHR implementation in Safari 2.0.4 has been confirmed to leak
+memory.
+
+* UPDATE: The XHR implementation in Safari 3.0 beta(and WebKit builds) now
+appear to handle HTTP 204 responses correctly.  XHR in Opera, as of 9.21, still
+does not produce a valid HTTP status code with an HTTP 204 response.
+
+*** version 2.2.2 ***
+
+* No revisions.
+
+*** version 2.2.1 ***
+
+* setForm() will include the correct name-value of the HTML Submit button
+clicked where multiple HTML Submit button options are present in an HTML form.
+To enable this feature, include the Event utility source file as a dependency
+before the Connection Manager source file.
+
+* The XHR implementation in IE6 and IE7, Opera, and Safari do not properly
+handle an HTTP 204 response.  IE6/7 will instead return a Win error 1223.
+handleTransactionResponse() will treat 1223 as an HTTP 204, and route the
+response appropriately to the success callback.  createResponseObject() will
+normalize the response object's status and statusText values to 204 and "No
+Content" respectively.  However, no headers are returned.
+
+Opera and Safari provide no discernable response with HTTP 204(e.g., response
+object's properties are undefined).  This response will trigger the failure
+callback with a status of 0 and statusText of "communication failure".
+
+*** version 2.2.0 ***
+
+* initHeader() now accepts a third argument as a boolean.  When set to true,
+this specific header will automatically be sent with each transaction.
+Otherwise, the header will be set and sent for the specific transaction only.
+Example: initHeader('X-YUI-State','Beta', true); all transactions will send this
+header.
+   * resetDefaultHeaders() will clear the default headers collection.
+
+* All Connection Mananger transactions will broadcast the header: "X-Requested-
+With: XMLHttpRequest".
+   * This can be turned off: YAHOO.util.Connect.setDefaultXhrHeader(false);
+
+* The HTTP method argument in asyncRequest is now case-insensitive.
+
+* uploadFile() will now correctly handle the absence of a callback object,
+allowing the transaction to complete silently.
+
+*** version 0.12.2 ***
+
+* The Opera/Connection Manager concurrent object condition, described in version
+0.12.0, no longer tests applies for Opera, version 9.10.
+
+*** version 0.12.1 ***
+
+* connection-debug.js corrected and synchronized with connection.js.  Code
+inconsistencies between the two files existed in 0.12.0.
+
+*** version 0.12.0 ***
+
+* When uploading files via setForm() and asyncRequest includes a POST data
+argument, appendPostData() will create hidden input fields for each postData
+label/value and append each field to the form object.
+
+* setForm() returns the assembled label/value string of the parsed HTML form
+fields.
+
+* NOTE: Opera 9.02 does not allow for more than 12 concurrent Connection Manager
+objects.
+
+The following example creates 12 requests in a loop:
+for(var n=0; n<=12; i++){
+  conn[n] = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
+}
+
+If n > 13, Opera 9.02 will crash.  Connection manager objects count n must be <=
+12 at all times.  This condition was not present in Opera version 9.01.
+
+This condition does not apply to other A-Grade browsers (
+http://developer.yahoo.com/yui/articles/gbs/gbs_browser-chart.html)
+
+*** version 0.11.3 ***
+
+* YUI Event dependency for file uploading is now optional.
+
+* uploadFile() now sets unique IDs for each file upload transaction to prevent
+iframe collisions with parallel uploads.
+
+* The callback object now has property responseXML to provide support for file
+upload transactions that return an XML document.
+
+* setForm() will verify if a select option value attribute is present and use
+its value, including empty string, before using the text node value.
+
+* Modified polling mechanism in handleReadyState() and
+handleTransactionResponse() to prevent infinite polling if JavaScript errors
+occur in the user-defined callback.
+
+* createFrame() will now accept a boolean argument of true to set the frame
+source to "javascript:false" to prevent IE from throwing security warnings in an
+HTTPS environment.
+
+* setHeader() now enumerates through the _http_header object using
+hasOwnProperty() to prevent collisions with members added to Object via
+prototype.
+
+* If using setForm() and asyncRequest includes a POST data argument, the data
+will be concatenated to the HTML form POST message.
+
+*** version 0.11.2 ***
+
+* No revisions.
+
+*** version 0.11.1 ***
+
+* uploadFile() now verifies the existence of callback.upload before invoking
+callback, with or without object scope.
+
+*** version 0.11.0 ***
+
+* Each transaction can be defined with a timeout threshold, in milliseconds,
+through the callback object.  If the threshold is reached, and the transaction
+hasn't yet completed, the transaction will call abort().
+
+* abort() will now accept a callback object as the second argument.  The
+failure callback will receive a response object to indicate the transaction was
+aborted.
+
+* setForm() will now support file uploads by setting the second argument to
+true (e.g., YAHOO.util.Connect.setForm(formObject, true).  File upload does not
+use the callback success or failure handler.  Instead, it uses a new callback
+object handler: upload.
+
+* HTML form submit will no longer submit form fields without a defined name
+attribute.
+
+* The default POST header of 'Content-Type','application/x-www-form-urlencoded'
+can be overridden by calling setDefaultPostHeader(false).  This
+will remove the default header from non-HTML form, POST submissions.
+
+* setHeader() now enumerates through the _http_header object with
+propertyIsEnumerable to prevent collisions with members added to Object via
+prototype.
+
+*** version 0.10.0 ***
+
+* handleTransactionResponse() now treats the full HTTP 2xx range as a success
+case, instead of just HTTP 200.
+
+* To accommodate multiple field values in Mozilla/Firefox, multiple initHeader
+calls with the same label will now result in the values concatenated to a
+comma- delimited string value.
+Example:
+Setting Content-Type:'application/x-www-form-urlencoded' and Content-
+Type:'text/xml' will result in Content-Type:'application/x-www-form-urlencoded,
+text/xml'.
+
+* Default polling interval lowered to 50ms.
+
+* YAHOO.util.Connect.setPollingInterval() will allow you to set a polling
+interval -- in milliseconds -- to override the default value.
+
+* YAHOO.util.Connect.getResponseHeader[headerLabel] now supported as a response
+object property to provide symmetry with the native XHR object's property.
+Example:
+YAHOO.util.Connect.getResponseHeader['Content-Length'] will return the value
+for the Content-Length header, if the header is available.
+
+* YAHOO.util.Connect.allResponseHeaders property renamed to
+getAllResponseHeaders to provide symmetry with the native XHR object's
+property.
+
+* YAHOO.util.Connect.setForm() now supports HTTP GET as well as HTTP POST.
+
+* YAHOO.util.Connect.setForm() now accepts an HTML form object as well as its
+name attribute value.
+
+* YAHOO.util.Connect.setForm() will not submit HTML form fields that are
+disabled or do not have a name attribute value.
+
+* [FIXED] Response exceptions result in infinite callback loop in
+Mozilla/Firefox.
+
+* [FIXED] YAHOO.util.Connect.abort() now properly clears polling interval.
+
+* [FIXED] isCallInProgress() now verifies whether XHR instance still exists,
+and returns false if the connection object is no longer available.
+
+*** version 0.9.0 ***
+
+* Initial release
+
Index: trunk/include/yui/connection/connection-debug.js
===================================================================
--- trunk/include/yui/connection/connection-debug.js	(nonexistent)
+++ trunk/include/yui/connection/connection-debug.js	(revision 2)
@@ -0,0 +1,1576 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The Connection Manager provides a simplified interface to the XMLHttpRequest
+ * object.  It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
+ * interactive states and server response, returning the results to a pre-defined
+ * callback you create.
+ *
+ * @namespace YAHOO.util
+ * @module connection
+ * @requires yahoo
+ * @requires event
+ */
+
+/**
+ * The Connection Manager singleton provides methods for creating and managing
+ * asynchronous transactions.
+ *
+ * @class Connect
+ */
+
+YAHOO.util.Connect =
+{
+  /**
+  * @description Array of MSFT ActiveX ids for XMLHttpRequest.
+  * @property _msxml_progid
+  * @private
+  * @static
+  * @type array
+   */
+    _msxml_progid:[
+        'Microsoft.XMLHTTP',
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP'
+        ],
+
+  /**
+  * @description Object literal of HTTP header(s)
+  * @property _http_header
+  * @private
+  * @static
+  * @type object
+   */
+    _http_headers:{},
+
+  /**
+  * @description Determines if HTTP headers are set.
+  * @property _has_http_headers
+  * @private
+  * @static
+  * @type boolean
+   */
+    _has_http_headers:false,
+
+ /**
+ * @description Determines if a default header of
+  * Content-Type of 'application/x-www-form-urlencoded'
+  * will be added to any client HTTP headers sent for POST
+  * transactions.
+ * @property _use_default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_post_header:true,
+
+ /**
+ * @description The default header used for POST transactions.
+ * @property _default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
+
+ /**
+ * @description The default header used for transactions involving the
+  * use of HTML forms.
+ * @property _default_form_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_form_header:'application/x-www-form-urlencoded',
+
+ /**
+ * @description Determines if a default header of
+  * 'X-Requested-With: XMLHttpRequest'
+  * will be added to each transaction.
+ * @property _use_default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_xhr_header:true,
+
+ /**
+ * @description The default header value for the label
+  * "X-Requested-With".  This is sent with each
+  * transaction, by default, to identify the
+  * request as being made by YUI Connection Manager.
+ * @property _default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_xhr_header:'XMLHttpRequest',
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _has_default_headers:true,
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_headers:{},
+
+ /**
+ * @description Collection of polling references to the polling mechanism in handleReadyState.
+ * @property _poll
+ * @private
+ * @static
+ * @type object
+  */
+    _poll:{},
+
+ /**
+ * @description Queue of timeout values for each transaction callback with a defined timeout value.
+ * @property _timeOut
+ * @private
+ * @static
+ * @type object
+  */
+    _timeOut:{},
+
+  /**
+  * @description The polling frequency, in milliseconds, for HandleReadyState.
+   * when attempting to determine a transaction's XHR readyState.
+   * The default is 50 milliseconds.
+  * @property _polling_interval
+  * @private
+  * @static
+  * @type int
+   */
+     _polling_interval:50,
+
+  /**
+  * @description A transaction counter that increments the transaction id for each transaction.
+  * @property _transaction_id
+  * @private
+  * @static
+  * @type int
+   */
+     _transaction_id:0,
+
+  /**
+  * @description Custom event that fires at the start of a transaction
+  * @property startEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    startEvent: new YAHOO.util.CustomEvent('start'),
+
+  /**
+  * @description Custom event that fires when a transaction response has completed.
+  * @property completeEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    completeEvent: new YAHOO.util.CustomEvent('complete'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 2xx range.
+  * @property successEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    successEvent: new YAHOO.util.CustomEvent('success'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 4xx/5xx range.
+  * @property failureEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    failureEvent: new YAHOO.util.CustomEvent('failure'),
+
+  /**
+  * @description Custom event that fires when a transaction is successfully aborted.
+  * @property abortEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    abortEvent: new YAHOO.util.CustomEvent('abort'),
+
+  /**
+  * @description A reference table that maps callback custom events members to its specific
+   * event name.
+  * @property _customEvents
+  * @private
+  * @static
+  * @type object
+   */
+    _customEvents:
+    {
+        onStart:['startEvent', 'start'],
+        onComplete:['completeEvent', 'complete'],
+        onSuccess:['successEvent', 'success'],
+        onFailure:['failureEvent', 'failure'],
+        onUpload:['uploadEvent', 'upload'],
+        onAbort:['abortEvent', 'abort']
+    },
+
+  /**
+  * @description Member to add an ActiveX id to the existing xml_progid array.
+   * In the event(unlikely) a new ActiveX id is introduced, it can be added
+   * without internal code modifications.
+  * @method setProgId
+  * @public
+  * @static
+  * @param {string} id The ActiveX id to be added to initialize the XHR object.
+  * @return void
+   */
+    setProgId:function(id)
+    {
+        this._msxml_progid.unshift(id);
+        YAHOO.log('ActiveX Program Id  ' + id + ' added to _msxml_progid.', 'info', 'Connection');
+    },
+
+  /**
+  * @description Member to override the default POST header.
+  * @method setDefaultPostHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultPostHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_post_header = b;
+            YAHOO.log('Default POST header set to  ' + b, 'info', 'Connection');
+        }
+        else if(typeof b == 'boolean'){
+            this._use_default_post_header = b;
+        }
+    },
+
+  /**
+  * @description Member to override the default transaction header..
+  * @method setDefaultXhrHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultXhrHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_xhr_header = b;
+            YAHOO.log('Default XHR header set to  ' + b, 'info', 'Connection');
+        }
+        else{
+            this._use_default_xhr_header = b;
+        }
+    },
+
+  /**
+  * @description Member to modify the default polling interval.
+  * @method setPollingInterval
+  * @public
+  * @static
+  * @param {int} i The polling interval in milliseconds.
+  * @return void
+   */
+    setPollingInterval:function(i)
+    {
+        if(typeof i == 'number' && isFinite(i)){
+            this._polling_interval = i;
+            YAHOO.log('Default polling interval set to ' + i +'ms', 'info', 'Connection');
+        }
+    },
+
+  /**
+  * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
+   * the XMLHttpRequest instance and the transaction id.
+  * @method createXhrObject
+  * @private
+  * @static
+  * @param {int} transactionId Property containing the transaction id for this transaction.
+  * @return object
+   */
+    createXhrObject:function(transactionId)
+    {
+        var obj,http,i;
+        try
+        {
+            // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
+            http = new XMLHttpRequest();
+            //  Object literal with http and tId properties
+            obj = { conn:http, tId:transactionId, xhr: true };
+            YAHOO.log('XHR object created for transaction ' + transactionId, 'info', 'Connection');
+        }
+        catch(e)
+        {
+            for(i=0; i<this._msxml_progid.length; ++i){
+                try
+                {
+                    // Instantiates XMLHttpRequest for IE and assign to http
+                    http = new ActiveXObject(this._msxml_progid[i]);
+                    //  Object literal with conn and tId properties
+                    obj = { conn:http, tId:transactionId, xhr: true };
+                    YAHOO.log('ActiveX XHR object created for transaction ' + transactionId, 'info', 'Connection');
+                    break;
+                }
+                catch(e1){}
+            }
+        }
+        finally
+        {
+            return obj;
+        }
+    },
+
+  /**
+  * @description This method is called by asyncRequest to create a
+   * valid connection object for the transaction.  It also passes a
+   * transaction id and increments the transaction id counter.
+  * @method getConnectionObject
+  * @private
+  * @static
+  * @return {object}
+   */
+    getConnectionObject:function(t)
+    {
+        var o, tId = this._transaction_id;
+
+        try
+        {
+            if(!t){
+                o = this.createXhrObject(tId);
+            }
+            else{
+                o = {tId:tId};
+                if(t==='xdr'){
+                    o.conn = this._transport;
+                    o.xdr = true;
+                }
+                else if(t==='upload'){
+                    o.upload = true;
+                }
+            }
+
+            if(o){
+                this._transaction_id++;
+            }
+        }
+        catch(e){}
+        return o;
+    },
+
+  /**
+  * @description Method for initiating an asynchronous request via the XHR object.
+  * @method asyncRequest
+  * @public
+  * @static
+  * @param {string} method HTTP transaction method
+  * @param {string} uri Fully qualified path of resource
+  * @param {callback} callback User-defined callback function or object
+  * @param {string} postData POST body
+  * @return {object} Returns the connection object
+   */
+    asyncRequest:function(method, uri, callback, postData)
+    {
+        var o,t,args = (callback && callback.argument)?callback.argument:null;
+
+        if(this._isFileUpload){
+            t = 'upload';
+        }
+        else if(callback.xdr){
+            t = 'xdr';
+        }
+
+        o = this.getConnectionObject(t);
+        if(!o){
+            YAHOO.log('Unable to create connection object.', 'error', 'Connection');
+            return null;
+        }
+        else{
+
+            // Intialize any transaction-specific custom events, if provided.
+            if(callback && callback.customevents){
+                this.initCustomEvents(o, callback);
+            }
+
+            if(this._isFormSubmit){
+                if(this._isFileUpload){
+                    this.uploadFile(o, callback, uri, postData);
+                    return o;
+                }
+
+                // If the specified HTTP method is GET, setForm() will return an
+                // encoded string that is concatenated to the uri to
+                // create a querystring.
+                if(method.toUpperCase() == 'GET'){
+                    if(this._sFormData.length !== 0){
+                        // If the URI already contains a querystring, append an ampersand
+                        // and then concatenate _sFormData to the URI.
+                        uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
+                    }
+                }
+                else if(method.toUpperCase() == 'POST'){
+                    // If POST data exist in addition to the HTML form data,
+                    // it will be concatenated to the form data.
+                    postData = postData?this._sFormData + "&" + postData:this._sFormData;
+                }
+            }
+
+            if(method.toUpperCase() == 'GET' && (callback && callback.cache === false)){
+                // If callback.cache is defined and set to false, a
+                // timestamp value will be added to the querystring.
+                uri += ((uri.indexOf('?') == -1)?'?':'&') + "rnd=" + new Date().valueOf().toString();
+            }
+
+            // Each transaction will automatically include a custom header of
+            // "X-Requested-With: XMLHttpRequest" to identify the request as
+            // having originated from Connection Manager.
+            if(this._use_default_xhr_header){
+                if(!this._default_headers['X-Requested-With']){
+                    this.initHeader('X-Requested-With', this._default_xhr_header, true);
+                    YAHOO.log('Initialize transaction header X-Request-Header to XMLHttpRequest.', 'info', 'Connection');
+                }
+            }
+
+            //If the transaction method is POST and the POST header value is set to true
+            //or a custom value, initalize the Content-Type header to this value.
+            if((method.toUpperCase() === 'POST' && this._use_default_post_header) && this._isFormSubmit === false){
+                this.initHeader('Content-Type', this._default_post_header);
+                YAHOO.log('Initialize header Content-Type to application/x-www-form-urlencoded; UTF-8 for POST transaction.', 'info', 'Connection');
+            }
+
+            if(o.xdr){
+                this.xdr(o, method, uri, callback, postData);
+                return o;
+            }
+
+            o.conn.open(method, uri, true);
+            //Initialize all default and custom HTTP headers,
+            if(this._has_default_headers || this._has_http_headers){
+                this.setHeader(o);
+            }
+
+            this.handleReadyState(o, callback);
+            o.conn.send(postData || '');
+            YAHOO.log('Transaction ' + o.tId + ' sent.', 'info', 'Connection');
+
+            // Reset the HTML form data and state properties as
+            // soon as the data are submitted.
+            if(this._isFormSubmit === true){
+                this.resetFormState();
+            }
+
+            // Fire global custom event -- startEvent
+            this.startEvent.fire(o, args);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, args);
+            }
+
+            return o;
+        }
+    },
+
+  /**
+  * @description This method creates and subscribes custom events,
+   * specific to each transaction
+  * @method initCustomEvents
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+    initCustomEvents:function(o, callback)
+    {
+        var prop;
+        // Enumerate through callback.customevents members and bind/subscribe
+        // events that match in the _customEvents table.
+        for(prop in callback.customevents){
+            if(this._customEvents[prop][0]){
+                // Create the custom event
+                o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
+                YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' created.', 'info', 'Connection');
+
+                // Subscribe the custom event
+                o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
+                YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' subscribed.', 'info', 'Connection');
+            }
+        }
+    },
+
+  /**
+  * @description This method serves as a timer that polls the XHR object's readyState
+   * property during a transaction, instead of binding a callback to the
+   * onreadystatechange event.  Upon readyState 4, handleTransactionResponse
+   * will process the response, and the timer will be cleared.
+  * @method handleReadyState
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+
+    handleReadyState:function(o, callback)
+
+    {
+        var oConn = this,
+            args = (callback && callback.argument)?callback.argument:null;
+
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        this._poll[o.tId] = window.setInterval(
+            function(){
+                if(o.conn && o.conn.readyState === 4){
+
+                    // Clear the polling interval for the transaction
+                    // and remove the reference from _poll.
+                    window.clearInterval(oConn._poll[o.tId]);
+                    delete oConn._poll[o.tId];
+
+                    if(callback && callback.timeout){
+                        window.clearTimeout(oConn._timeOut[o.tId]);
+                        delete oConn._timeOut[o.tId];
+                    }
+
+                    // Fire global custom event -- completeEvent
+                    oConn.completeEvent.fire(o, args);
+
+                    if(o.completeEvent){
+                        // Fire transaction custom event -- completeEvent
+                        o.completeEvent.fire(o, args);
+                    }
+
+                    oConn.handleTransactionResponse(o, callback);
+                }
+            }
+        ,this._polling_interval);
+    },
+
+  /**
+  * @description This method attempts to interpret the server response and
+   * determine whether the transaction was successful, or if an error or
+   * exception was encountered.
+  * @method handleTransactionResponse
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {object} callback The user-defined callback object
+  * @param {boolean} isAbort Determines if the transaction was terminated via abort().
+  * @return {void}
+   */
+    handleTransactionResponse:function(o, callback, isAbort)
+    {
+        var httpStatus, responseObject,
+            args = (callback && callback.argument)?callback.argument:null,
+            xdrS = (o.r && o.r.statusText === 'xdr:success')?true:false,
+            xdrF = (o.r && o.r.statusText === 'xdr:failure')?true:false,
+            xdrA = isAbort;
+
+        try
+        {
+            if((o.conn.status !== undefined && o.conn.status !== 0) || xdrS){
+                // XDR requests will not have HTTP status defined. The
+                // statusText property will define the response status
+                // set by the Flash transport.
+                httpStatus = o.conn.status;
+            }
+            else if(xdrF && !xdrA){
+                // Set XDR transaction failure to a status of 0, which
+                // resolves as an HTTP failure, instead of an exception.
+                httpStatus = 0;
+            }
+            else{
+                httpStatus = 13030;
+            }
+        }
+        catch(e){
+
+             // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
+             // when the XHR object's status and statusText properties are
+             // unavailable, and a query attempt throws an exception.
+            httpStatus = 13030;
+        }
+
+        if((httpStatus >= 200 && httpStatus < 300) || httpStatus === 1223 || xdrS){
+            responseObject = o.xdr ? o.r : this.createResponseObject(o, args);
+            if(callback && callback.success){
+                if(!callback.scope){
+                    callback.success(responseObject);
+                    YAHOO.log('Success callback. HTTP code is ' + httpStatus, 'info', 'Connection');
+                }
+                else{
+                    // If a scope property is defined, the callback will be fired from
+                    // the context of the object.
+                    callback.success.apply(callback.scope, [responseObject]);
+                    YAHOO.log('Success callback with scope. HTTP code is ' + httpStatus, 'info', 'Connection');
+                }
+            }
+
+            // Fire global custom event -- successEvent
+            this.successEvent.fire(responseObject);
+
+            if(o.successEvent){
+                // Fire transaction custom event -- successEvent
+                o.successEvent.fire(responseObject);
+            }
+        }
+        else{
+            switch(httpStatus){
+                // The following cases are wininet.dll error codes that may be encountered.
+                case 12002: // Server timeout
+                case 12029: // 12029 to 12031 correspond to dropped connections.
+                case 12030:
+                case 12031:
+                case 12152: // Connection closed by server.
+                case 13030: // See above comments for variable status.
+                    // XDR transactions will not resolve to this case, since the
+                    // response object is already built in the xdr response.
+                    responseObject = this.createExceptionObject(o.tId, args, (isAbort?isAbort:false));
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                            YAHOO.log('Failure callback. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                            YAHOO.log('Failure callback with scope. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                    }
+
+                    break;
+                default:
+                    responseObject = (o.xdr) ? o.response : this.createResponseObject(o, args);
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                            YAHOO.log('Failure callback. HTTP status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                            YAHOO.log('Failure callback with scope. HTTP status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                    }
+            }
+
+            // Fire global custom event -- failureEvent
+            this.failureEvent.fire(responseObject);
+
+            if(o.failureEvent){
+                // Fire transaction custom event -- failureEvent
+                o.failureEvent.fire(responseObject);
+            }
+
+        }
+
+        this.releaseObject(o);
+        responseObject = null;
+    },
+
+  /**
+  * @description This method evaluates the server response, creates and returns the results via
+   * its properties.  Success and failure cases will differ in the response
+   * object's property values.
+  * @method createResponseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @return {object}
+   */
+    createResponseObject:function(o, callbackArg)
+    {
+        var obj = {}, headerObj = {},
+            i, headerStr, header, delimitPos;
+
+        try
+        {
+            headerStr = o.conn.getAllResponseHeaders();
+            header = headerStr.split('\n');
+            for(i=0; i<header.length; i++){
+                delimitPos = header[i].indexOf(':');
+                if(delimitPos != -1){
+                    headerObj[header[i].substring(0,delimitPos)] = YAHOO.lang.trim(header[i].substring(delimitPos+2));
+                }
+            }
+        }
+        catch(e){}
+
+        obj.tId = o.tId;
+        // Normalize IE's response to HTTP 204 when Win error 1223.
+        obj.status = (o.conn.status == 1223)?204:o.conn.status;
+        // Normalize IE's statusText to "No Content" instead of "Unknown".
+        obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
+        obj.getResponseHeader = headerObj;
+        obj.getAllResponseHeaders = headerStr;
+        obj.responseText = o.conn.responseText;
+        obj.responseXML = o.conn.responseXML;
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description If a transaction cannot be completed due to dropped or closed connections,
+   * there may be not be enough information to build a full response object.
+   * The failure callback will be fired and this specific condition can be identified
+   * by a status property value of 0.
+   *
+   * If an abort was successful, the status property will report a value of -1.
+   *
+  * @method createExceptionObject
+  * @private
+  * @static
+  * @param {int} tId The Transaction Id
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
+  * @return {object}
+   */
+    createExceptionObject:function(tId, callbackArg, isAbort)
+    {
+        var COMM_CODE = 0,
+            COMM_ERROR = 'communication failure',
+            ABORT_CODE = -1,
+            ABORT_ERROR = 'transaction aborted',
+            obj = {};
+
+        obj.tId = tId;
+        if(isAbort){
+            obj.status = ABORT_CODE;
+            obj.statusText = ABORT_ERROR;
+        }
+        else{
+            obj.status = COMM_CODE;
+            obj.statusText = COMM_ERROR;
+        }
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description Method that initializes the custom HTTP headers for the each transaction.
+  * @method initHeader
+  * @public
+  * @static
+  * @param {string} label The HTTP header label
+  * @param {string} value The HTTP header value
+  * @param {string} isDefault Determines if the specific header is a default header
+   * automatically sent with each transaction.
+  * @return {void}
+   */
+    initHeader:function(label, value, isDefault)
+    {
+        var headerObj = (isDefault)?this._default_headers:this._http_headers;
+
+        headerObj[label] = value;
+        if(isDefault){
+            this._has_default_headers = true;
+        }
+        else{
+            this._has_http_headers = true;
+        }
+    },
+
+
+  /**
+  * @description Accessor that sets the HTTP headers for each transaction.
+  * @method setHeader
+  * @private
+  * @static
+  * @param {object} o The connection object for the transaction.
+  * @return {void}
+   */
+    setHeader:function(o)
+    {
+        var prop;
+        if(this._has_default_headers){
+            for(prop in this._default_headers){
+                if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._default_headers[prop]);
+                    YAHOO.log('Default HTTP header ' + prop + ' set with value of ' + this._default_headers[prop], 'info', 'Connection');
+                }
+            }
+        }
+
+        if(this._has_http_headers){
+            for(prop in this._http_headers){
+                if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._http_headers[prop]);
+                    YAHOO.log('HTTP header ' + prop + ' set with value of ' + this._http_headers[prop], 'info', 'Connection');
+                }
+            }
+
+            this._http_headers = {};
+            this._has_http_headers = false;
+        }
+    },
+
+  /**
+  * @description Resets the default HTTP headers object
+  * @method resetDefaultHeaders
+  * @public
+  * @static
+  * @return {void}
+   */
+    resetDefaultHeaders:function(){
+        this._default_headers = {};
+        this._has_default_headers = false;
+    },
+
+  /**
+  * @description Method to terminate a transaction, if it has not reached readyState 4.
+  * @method abort
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest.
+  * @param {object} callback  User-defined callback object.
+  * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
+  * @return {boolean}
+   */
+    abort:function(o, callback, isTimeout)
+    {
+        var abortStatus,
+            args = (callback && callback.argument)?callback.argument:null;
+            o = o || {};
+
+        if(o.conn){
+            if(o.xhr){
+                if(this.isCallInProgress(o)){
+                    // Issue abort request
+                    o.conn.abort();
+
+                    window.clearInterval(this._poll[o.tId]);
+                    delete this._poll[o.tId];
+
+                    if(isTimeout){
+                        window.clearTimeout(this._timeOut[o.tId]);
+                        delete this._timeOut[o.tId];
+                    }
+
+                    abortStatus = true;
+                }
+            }
+            else if(o.xdr){
+                o.conn.abort(o.tId);
+                abortStatus = true;
+            }
+        }
+        else if(o.upload){
+            var frameId = 'yuiIO' + o.tId;
+            var io = document.getElementById(frameId);
+
+            if(io){
+                // Remove all listeners on the iframe prior to
+                // its destruction.
+                YAHOO.util.Event.removeListener(io, "load");
+                // Destroy the iframe facilitating the transaction.
+                document.body.removeChild(io);
+                YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection');
+
+                if(isTimeout){
+                    window.clearTimeout(this._timeOut[o.tId]);
+                    delete this._timeOut[o.tId];
+                }
+
+                abortStatus = true;
+            }
+        }
+        else{
+            abortStatus = false;
+        }
+
+        if(abortStatus === true){
+            // Fire global custom event -- abortEvent
+            this.abortEvent.fire(o, args);
+
+            if(o.abortEvent){
+                // Fire transaction custom event -- abortEvent
+                o.abortEvent.fire(o, args);
+            }
+
+            this.handleTransactionResponse(o, callback, true);
+            YAHOO.log('Transaction ' + o.tId + ' aborted.', 'info', 'Connection');
+        }
+
+        return abortStatus;
+    },
+
+  /**
+  * @description Determines if the transaction is still being processed.
+  * @method isCallInProgress
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest
+  * @return {boolean}
+   */
+    isCallInProgress:function(o)
+    {
+        o = o || {};
+        // if the XHR object assigned to the transaction has not been dereferenced,
+        // then check its readyState status.  Otherwise, return false.
+        if(o.xhr && o.conn){
+            return o.conn.readyState !== 4 && o.conn.readyState !== 0;
+        }
+        else if(o.xdr && o.conn){
+            return o.conn.isCallInProgress(o.tId);
+        }
+        else if(o.upload === true){
+            return document.getElementById('yuiIO' + o.tId)?true:false;
+        }
+        else{
+            return false;
+        }
+    },
+
+  /**
+  * @description Dereference the XHR instance and the connection object after the transaction is completed.
+  * @method releaseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @return {void}
+   */
+    releaseObject:function(o)
+    {
+        if(o && o.conn){
+            //dereference the XHR instance.
+            o.conn = null;
+
+            YAHOO.log('Connection object for transaction ' + o.tId + ' destroyed.', 'info', 'Connection');
+
+            //dereference the connection object.
+            o = null;
+        }
+    }
+};
+
+/**
+ * @for Connect
+  */
+(function() {
+    var YCM = YAHOO.util.Connect, _fn = {};
+
+   /**
+   * @description This method creates and instantiates the Flash transport.
+   * @method _swf
+   * @private
+   * @static
+   * @param {string} URI to connection.swf.
+   * @return {void}
+    */
+    function _swf(uri) {
+        var o = '<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="' +
+                uri + '" width="0" height="0">' +
+                 '<param name="movie" value="' + uri + '">' +
+                '<param name="allowScriptAccess" value="always">' +
+                '</object>',
+            c = document.createElement('div');
+
+        document.body.appendChild(c);
+        c.innerHTML = o;
+    }
+
+   /**
+   * @description This method calls the public method on the
+    * Flash transport to start the XDR transaction.  It is analogous
+    * to Connection Manager's asyncRequest method.
+   * @method xdr
+   * @private
+   * @static
+   * @param {object} The transaction object.
+   * @param {string} HTTP request method.
+   * @param {string} URI for the transaction.
+   * @param {object} The transaction's callback object.
+   * @param {object} The JSON object used as HTTP POST data.
+   * @return {void}
+    */
+    function _xdr(o, m, u, c, d) {
+        _fn[parseInt(o.tId)] = { 'o':o, 'c':c };
+        if (d) {
+            c.method = m;
+            c.data = d;
+        }
+
+        o.conn.send(u, c, o.tId);
+    }
+
+   /**
+   * @description This method instantiates the Flash transport and
+    * establishes a static reference to it, used for all XDR requests.
+   * @method transport
+   * @public
+   * @static
+   * @param {string} URI to connection.swf.
+   * @return {void}
+    */
+    function _init(uri) {
+        _swf(uri);
+        YCM._transport = document.getElementById('YUIConnectionSwf');
+    }
+
+    function _xdrReady() {
+        YCM.xdrReadyEvent.fire();
+    }
+
+   /**
+   * @description This method fires the global and transaction start
+    * events.
+   * @method _xdrStart
+   * @private
+   * @static
+   * @param {object} The transaction object.
+   * @param {string} The transaction's callback object.
+   * @return {void}
+    */
+    function _xdrStart(o, cb) {
+        if (o) {
+            // Fire global custom event -- startEvent
+            YCM.startEvent.fire(o, cb.argument);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, cb.argument);
+            }
+        }
+    }
+
+   /**
+   * @description This method is the initial response handler
+    * for XDR transactions.  The Flash transport calls this
+    * function and sends the response payload.
+   * @method handleXdrResponse
+   * @private
+   * @static
+   * @param {object} The response object sent from the Flash transport.
+   * @return {void}
+    */
+    function _handleXdrResponse(r) {
+        var o = _fn[r.tId].o,
+            cb = _fn[r.tId].c;
+
+        if (r.statusText === 'xdr:start') {
+            _xdrStart(o, cb);
+            return;
+        }
+
+        r.responseText = decodeURI(r.responseText);
+        o.r = r;
+        if (cb.argument) {
+            o.r.argument = cb.argument;
+        }
+
+        this.handleTransactionResponse(o, cb, r.statusText === 'xdr:abort' ? true : false);
+        delete _fn[r.tId];
+    }
+
+    // Bind the functions to Connection Manager as static fields.
+    YCM.xdr = _xdr;
+    YCM.swf = _swf;
+    YCM.transport = _init;
+    YCM.xdrReadyEvent = new YAHOO.util.CustomEvent('xdrReady');
+    YCM.xdrReady = _xdrReady;
+    YCM.handleXdrResponse = _handleXdrResponse;
+})();
+
+/**
+ * @for Connect
+  */
+(function(){
+    var YCM = YAHOO.util.Connect,
+        YE = YAHOO.util.Event;
+   /**
+    * @description Property modified by setForm() to determine if the data
+    * should be submitted as an HTML form.
+    * @property _isFormSubmit
+    * @private
+    * @static
+    * @type boolean
+    */
+    YCM._isFormSubmit = false;
+
+   /**
+    * @description Property modified by setForm() to determine if a file(s)
+    * upload is expected.
+    * @property _isFileUpload
+    * @private
+    * @static
+    * @type boolean
+    */
+    YCM._isFileUpload = false;
+
+   /**
+    * @description Property modified by setForm() to set a reference to the HTML
+    * form node if the desired action is file upload.
+    * @property _formNode
+    * @private
+    * @static
+    * @type object
+    */
+    YCM._formNode = null;
+
+   /**
+    * @description Property modified by setForm() to set the HTML form data
+    * for each transaction.
+    * @property _sFormData
+    * @private
+    * @static
+    * @type string
+    */
+    YCM._sFormData = null;
+
+   /**
+    * @description Tracks the name-value pair of the "clicked" submit button if multiple submit
+    * buttons are present in an HTML form; and, if YAHOO.util.Event is available.
+    * @property _submitElementValue
+    * @private
+    * @static
+    * @type string
+    */
+    YCM._submitElementValue = null;
+
+   /**
+   * @description Custom event that fires when handleTransactionResponse() determines a
+    * response in the HTTP 4xx/5xx range.
+   * @property failureEvent
+   * @private
+   * @static
+   * @type CustomEvent
+    */
+    YCM.uploadEvent = new YAHOO.util.CustomEvent('upload'),
+
+   /**
+    * @description Determines whether YAHOO.util.Event is available and returns true or false.
+    * If true, an event listener is bound at the document level to trap click events that
+    * resolve to a target type of "Submit".  This listener will enable setForm() to determine
+    * the clicked "Submit" value in a multi-Submit button, HTML form.
+    * @property _hasSubmitListener
+    * @private
+    * @static
+    */
+    YCM._hasSubmitListener = function() {
+        if(YE){
+            YE.addListener(
+                document,
+                'click',
+                function(e){
+                    var obj = YE.getTarget(e),
+                        name = obj.nodeName.toLowerCase();
+
+                    if((name === 'input' || name === 'button') && (obj.type && obj.type.toLowerCase() == 'submit')){
+                        YCM._submitElementValue = encodeURIComponent(obj.name) + "=" + encodeURIComponent(obj.value);
+                    }
+                });
+            return true;
+        }
+        return false;
+    }();
+
+  /**
+  * @description This method assembles the form label and value pairs and
+   * constructs an encoded string.
+   * asyncRequest() will automatically initialize the transaction with a
+   * a HTTP header Content-Type of application/x-www-form-urlencoded.
+  * @method setForm
+  * @public
+  * @static
+  * @param {string || object} form id or name attribute, or form object.
+  * @param {boolean} optional enable file upload.
+  * @param {boolean} optional enable file upload over SSL in IE only.
+  * @return {string} string of the HTML form field name and value pairs..
+   */
+    function _setForm(formId, isUpload, secureUri)
+    {
+        var oForm, oElement, oName, oValue, oDisabled,
+            hasSubmit = false,
+            data = [], item = 0,
+            i,len,j,jlen,opt;
+
+        this.resetFormState();
+
+        if(typeof formId == 'string'){
+            // Determine if the argument is a form id or a form name.
+            // Note form name usage is deprecated by supported
+            // here for legacy reasons.
+            oForm = (document.getElementById(formId) || document.forms[formId]);
+        }
+        else if(typeof formId == 'object'){
+            // Treat argument as an HTML form object.
+            oForm = formId;
+        }
+        else{
+            YAHOO.log('Unable to create form object ' + formId, 'warn', 'Connection');
+            return;
+        }
+
+        // If the isUpload argument is true, setForm will call createFrame to initialize
+        // an iframe as the form target.
+        //
+        // The argument secureURI is also required by IE in SSL environments
+        // where the secureURI string is a fully qualified HTTP path, used to set the source
+        // of the iframe, to a stub resource in the same domain.
+        if(isUpload){
+
+            // Create iframe in preparation for file upload.
+            this.createFrame(secureUri?secureUri:null);
+
+            // Set form reference and file upload properties to true.
+            this._isFormSubmit = true;
+            this._isFileUpload = true;
+            this._formNode = oForm;
+
+            return;
+        }
+
+        // Iterate over the form elements collection to construct the
+        // label-value pairs.
+        for (i=0,len=oForm.elements.length; i<len; ++i){
+            oElement  = oForm.elements[i];
+            oDisabled = oElement.disabled;
+            oName     = oElement.name;
+
+            // Do not submit fields that are disabled or
+            // do not have a name attribute value.
+            if(!oDisabled && oName)
+            {
+                oName  = encodeURIComponent(oName)+'=';
+                oValue = encodeURIComponent(oElement.value);
+
+                switch(oElement.type)
+                {
+                    // Safari, Opera, FF all default opt.value from .text if
+                    // value attribute not specified in markup
+                    case 'select-one':
+                        if (oElement.selectedIndex > -1) {
+                            opt = oElement.options[oElement.selectedIndex];
+                            data[item++] = oName + encodeURIComponent(
+                                (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);
+                        }
+                        break;
+                    case 'select-multiple':
+                        if (oElement.selectedIndex > -1) {
+                            for(j=oElement.selectedIndex, jlen=oElement.options.length; j<jlen; ++j){
+                                opt = oElement.options[j];
+                                if (opt.selected) {
+                                    data[item++] = oName + encodeURIComponent(
+                                        (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);
+                                }
+                            }
+                        }
+                        break;
+                    case 'radio':
+                    case 'checkbox':
+                        if(oElement.checked){
+                            data[item++] = oName + oValue;
+                        }
+                        break;
+                    case 'file':
+                        // stub case as XMLHttpRequest will only send the file path as a string.
+                    case undefined:
+                        // stub case for fieldset element which returns undefined.
+                    case 'reset':
+                        // stub case for input type reset button.
+                    case 'button':
+                        // stub case for input type button elements.
+                        break;
+                    case 'submit':
+                        if(hasSubmit === false){
+                            if(this._hasSubmitListener && this._submitElementValue){
+                                data[item++] = this._submitElementValue;
+                            }
+                            hasSubmit = true;
+                        }
+                        break;
+                    default:
+                        data[item++] = oName + oValue;
+                }
+            }
+        }
+
+        this._isFormSubmit = true;
+        this._sFormData = data.join('&');
+
+        YAHOO.log('Form initialized for transaction. HTML form POST message is: ' + this._sFormData, 'info', 'Connection');
+
+        this.initHeader('Content-Type', this._default_form_header);
+        YAHOO.log('Initialize header Content-Type to application/x-www-form-urlencoded for setForm() transaction.', 'info', 'Connection');
+
+        return this._sFormData;
+    }
+
+   /**
+   * @description Resets HTML form properties when an HTML form or HTML form
+    * with file upload transaction is sent.
+   * @method resetFormState
+   * @private
+   * @static
+   * @return {void}
+    */
+    function _resetFormState(){
+        this._isFormSubmit = false;
+        this._isFileUpload = false;
+        this._formNode = null;
+        this._sFormData = "";
+    }
+
+
+   /**
+   * @description Creates an iframe to be used for form file uploads.  It is remove from the
+    * document upon completion of the upload transaction.
+   * @method createFrame
+   * @private
+   * @static
+   * @param {string} optional qualified path of iframe resource for SSL in IE.
+   * @return {void}
+    */
+    function _createFrame(secureUri){
+
+        // IE does not allow the setting of id and name attributes as object
+        // properties via createElement().  A different iframe creation
+        // pattern is required for IE.
+        var frameId = 'yuiIO' + this._transaction_id,
+            io;
+        if(YAHOO.env.ua.ie){
+            io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
+
+            // IE will throw a security exception in an SSL environment if the
+            // iframe source is undefined.
+            if(typeof secureUri == 'boolean'){
+                io.src = 'javascript:false';
+            }
+        }
+        else{
+            io = document.createElement('iframe');
+            io.id = frameId;
+            io.name = frameId;
+        }
+
+        io.style.position = 'absolute';
+        io.style.top = '-1000px';
+        io.style.left = '-1000px';
+
+        document.body.appendChild(io);
+        YAHOO.log('File upload iframe created. Id is:' + frameId, 'info', 'Connection');
+    }
+
+   /**
+   * @description Parses the POST data and creates hidden form elements
+    * for each key-value, and appends them to the HTML form object.
+   * @method appendPostData
+   * @private
+   * @static
+   * @param {string} postData The HTTP POST data
+   * @return {array} formElements Collection of hidden fields.
+    */
+    function _appendPostData(postData){
+        var formElements = [],
+            postMessage = postData.split('&'),
+            i, delimitPos;
+
+        for(i=0; i < postMessage.length; i++){
+            delimitPos = postMessage[i].indexOf('=');
+            if(delimitPos != -1){
+                formElements[i] = document.createElement('input');
+                formElements[i].type = 'hidden';
+                formElements[i].name = decodeURIComponent(postMessage[i].substring(0,delimitPos));
+                formElements[i].value = decodeURIComponent(postMessage[i].substring(delimitPos+1));
+                this._formNode.appendChild(formElements[i]);
+            }
+        }
+
+        return formElements;
+    }
+
+   /**
+   * @description Uploads HTML form, inclusive of files/attachments, using the
+    * iframe created in createFrame to facilitate the transaction.
+   * @method uploadFile
+   * @private
+   * @static
+   * @param {int} id The transaction id.
+   * @param {object} callback User-defined callback object.
+   * @param {string} uri Fully qualified path of resource.
+   * @param {string} postData POST data to be submitted in addition to HTML form.
+   * @return {void}
+    */
+    function _uploadFile(o, callback, uri, postData){
+        // Each iframe has an id prefix of "yuiIO" followed
+        // by the unique transaction id.
+        var frameId = 'yuiIO' + o.tId,
+            uploadEncoding = 'multipart/form-data',
+            io = document.getElementById(frameId),
+            ie8 = (document.documentMode && document.documentMode === 8) ? true : false,
+            oConn = this,
+            args = (callback && callback.argument)?callback.argument:null,
+            oElements,i,prop,obj, rawFormAttributes, uploadCallback;
+
+        // Track original HTML form attribute values.
+        rawFormAttributes = {
+            action:this._formNode.getAttribute('action'),
+            method:this._formNode.getAttribute('method'),
+            target:this._formNode.getAttribute('target')
+        };
+
+        // Initialize the HTML form properties in case they are
+        // not defined in the HTML form.
+        this._formNode.setAttribute('action', uri);
+        this._formNode.setAttribute('method', 'POST');
+        this._formNode.setAttribute('target', frameId);
+
+        if(YAHOO.env.ua.ie && !ie8){
+            // IE does not respect property enctype for HTML forms.
+            // Instead it uses the property - "encoding".
+            this._formNode.setAttribute('encoding', uploadEncoding);
+        }
+        else{
+            this._formNode.setAttribute('enctype', uploadEncoding);
+        }
+
+        if(postData){
+            oElements = this.appendPostData(postData);
+        }
+
+        // Start file upload.
+        this._formNode.submit();
+
+        // Fire global custom event -- startEvent
+        this.startEvent.fire(o, args);
+
+        if(o.startEvent){
+            // Fire transaction custom event -- startEvent
+            o.startEvent.fire(o, args);
+        }
+
+        // Start polling if a callback is present and the timeout
+        // property has been defined.
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        // Remove HTML elements created by appendPostData
+        if(oElements && oElements.length > 0){
+            for(i=0; i < oElements.length; i++){
+                this._formNode.removeChild(oElements[i]);
+            }
+        }
+
+        // Restore HTML form attributes to their original
+        // values prior to file upload.
+        for(prop in rawFormAttributes){
+            if(YAHOO.lang.hasOwnProperty(rawFormAttributes, prop)){
+                if(rawFormAttributes[prop]){
+                    this._formNode.setAttribute(prop, rawFormAttributes[prop]);
+                }
+                else{
+                    this._formNode.removeAttribute(prop);
+                }
+            }
+        }
+
+        // Reset HTML form state properties.
+        this.resetFormState();
+
+        // Create the upload callback handler that fires when the iframe
+        // receives the load event.  Subsequently, the event handler is detached
+        // and the iframe removed from the document.
+        uploadCallback = function() {
+            if(callback && callback.timeout){
+                window.clearTimeout(oConn._timeOut[o.tId]);
+                delete oConn._timeOut[o.tId];
+            }
+
+            // Fire global custom event -- completeEvent
+            oConn.completeEvent.fire(o, args);
+
+            if(o.completeEvent){
+                // Fire transaction custom event -- completeEvent
+                o.completeEvent.fire(o, args);
+            }
+
+            obj = {
+                tId : o.tId,
+                argument : callback.argument
+            };
+
+            try
+            {
+                // responseText and responseXML will be populated with the same data from the iframe.
+                // Since the HTTP headers cannot be read from the iframe
+                obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:io.contentWindow.document.documentElement.textContent;
+                obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
+            }
+            catch(e){}
+
+            if(callback && callback.upload){
+                if(!callback.scope){
+                    callback.upload(obj);
+                    YAHOO.log('Upload callback.', 'info', 'Connection');
+                }
+                else{
+                    callback.upload.apply(callback.scope, [obj]);
+                    YAHOO.log('Upload callback with scope.', 'info', 'Connection');
+                }
+            }
+
+            // Fire global custom event -- uploadEvent
+            oConn.uploadEvent.fire(obj);
+
+            if(o.uploadEvent){
+                // Fire transaction custom event -- uploadEvent
+                o.uploadEvent.fire(obj);
+            }
+
+            YE.removeListener(io, "load", uploadCallback);
+
+            setTimeout(
+                function(){
+                    document.body.removeChild(io);
+                    oConn.releaseObject(o);
+                    YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection');
+                }, 100);
+        };
+
+        // Bind the onload handler to the iframe to detect the file upload response.
+        YE.addListener(io, "load", uploadCallback);
+    }
+
+    YCM.setForm = _setForm;
+    YCM.resetFormState = _resetFormState;
+    YCM.createFrame = _createFrame;
+    YCM.appendPostData = _appendPostData;
+    YCM.uploadFile = _uploadFile;
+})();
+
+YAHOO.register("connection", YAHOO.util.Connect, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/connection/connection-min.js
===================================================================
--- trunk/include/yui/connection/connection-min.js	(nonexistent)
+++ trunk/include/yui/connection/connection-min.js	(revision 2)
@@ -0,0 +1,9 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var D,A,B;try{A=new XMLHttpRequest();D={conn:A,tId:F,xhr:true};}catch(C){for(B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);D={conn:A,tId:F,xhr:true};break;}catch(E){}}}finally{return D;}},getConnectionObject:function(A){var C,D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={tId:D};if(A==="xdr"){C.conn=this._transport;C.xdr=true;}else{if(A==="upload"){C.upload=true;}}}if(C){this._transaction_id++;}}catch(B){}return C;},asyncRequest:function(G,D,F,A){var E,C,B=(F&&F.argument)?F.argument:null;if(this._isFileUpload){C="upload";}else{if(F.xdr){C="xdr";}}E=this.getConnectionObject(C);if(!E){return null;}else{if(F&&F.customevents){this.initCustomEvents(E,F);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(E,F,D,A);return E;}if(G.toUpperCase()=="GET"){if(this._sFormData.length!==0){D+=((D.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(G.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(G.toUpperCase()=="GET"&&(F&&F.cache===false)){D+=((D.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((G.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(E.xdr){this.xdr(E,G,D,F,A);return E;}E.conn.open(G,D,true);if(this._has_default_headers||this._has_http_headers){this.setHeader(E);}this.handleReadyState(E,F);E.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(E,B);if(E.startEvent){E.startEvent.fire(E,B);}return E;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this,A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(B,I,D){var E,A,G=(I&&I.argument)?I.argument:null,C=(B.r&&B.r.statusText==="xdr:success")?true:false,H=(B.r&&B.r.statusText==="xdr:failure")?true:false,J=D;try{if((B.conn.status!==undefined&&B.conn.status!==0)||C){E=B.conn.status;}else{if(H&&!J){E=0;}else{E=13030;}}}catch(F){E=13030;}if((E>=200&&E<300)||E===1223||C){A=B.xdr?B.r:this.createResponseObject(B,G);if(I&&I.success){if(!I.scope){I.success(A);}else{I.success.apply(I.scope,[A]);}}this.successEvent.fire(A);if(B.successEvent){B.successEvent.fire(A);}}else{switch(E){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:A=this.createExceptionObject(B.tId,G,(D?D:false));if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}break;default:A=(B.xdr)?B.response:this.createResponseObject(B,G);if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}}this.failureEvent.fire(A);if(B.failureEvent){B.failureEvent.fire(A);}}this.releaseObject(B);A=null;},createResponseObject:function(A,G){var D={},I={},E,C,F,B;try{C=A.conn.getAllResponseHeaders();F=C.split("\n");for(E=0;E<F.length;E++){B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=YAHOO.lang.trim(F[E].substring(B+2));}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0,G="communication failure",C=-1,B="transaction aborted",E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);
+}}this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){this._default_headers={};this._has_default_headers=false;},abort:function(E,G,A){var D,B=(G&&G.argument)?G.argument:null;E=E||{};if(E.conn){if(E.xhr){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E.xdr){E.conn.abort(E.tId);D=true;}}}else{if(E.upload){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(A){A=A||{};if(A.xhr&&A.conn){return A.conn.readyState!==4&&A.conn.readyState!==0;}else{if(A.xdr&&A.conn){return A.conn.isCallInProgress(A.tId);}else{if(A.upload===true){return document.getElementById("yuiIO"+A.tId)?true:false;}else{return false;}}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};(function(){var G=YAHOO.util.Connect,H={};function D(I){var J='<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="'+I+'" width="0" height="0">'+'<param name="movie" value="'+I+'">'+'<param name="allowScriptAccess" value="always">'+"</object>",K=document.createElement("div");document.body.appendChild(K);K.innerHTML=J;}function B(L,I,J,M,K){H[parseInt(L.tId)]={"o":L,"c":M};if(K){M.method=I;M.data=K;}L.conn.send(J,M,L.tId);}function E(I){D(I);G._transport=document.getElementById("YUIConnectionSwf");}function C(){G.xdrReadyEvent.fire();}function A(J,I){if(J){G.startEvent.fire(J,I.argument);if(J.startEvent){J.startEvent.fire(J,I.argument);}}}function F(J){var K=H[J.tId].o,I=H[J.tId].c;if(J.statusText==="xdr:start"){A(K,I);return;}J.responseText=decodeURI(J.responseText);K.r=J;if(I.argument){K.r.argument=I.argument;}this.handleTransactionResponse(K,I,J.statusText==="xdr:abort"?true:false);delete H[J.tId];}G.xdr=B;G.swf=D;G.transport=E;G.xdrReadyEvent=new YAHOO.util.CustomEvent("xdrReady");G.xdrReady=C;G.handleXdrResponse=F;})();(function(){var D=YAHOO.util.Connect,F=YAHOO.util.Event;D._isFormSubmit=false;D._isFileUpload=false;D._formNode=null;D._sFormData=null;D._submitElementValue=null;D.uploadEvent=new YAHOO.util.CustomEvent("upload"),D._hasSubmitListener=function(){if(F){F.addListener(document,"click",function(J){var I=F.getTarget(J),H=I.nodeName.toLowerCase();if((H==="input"||H==="button")&&(I.type&&I.type.toLowerCase()=="submit")){D._submitElementValue=encodeURIComponent(I.name)+"="+encodeURIComponent(I.value);}});return true;}return false;}();function G(T,O,J){var S,I,R,P,W,Q=false,M=[],V=0,L,N,K,U,H;this.resetFormState();if(typeof T=="string"){S=(document.getElementById(T)||document.forms[T]);}else{if(typeof T=="object"){S=T;}else{return;}}if(O){this.createFrame(J?J:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=S;return;}for(L=0,N=S.elements.length;L<N;++L){I=S.elements[L];W=I.disabled;R=I.name;if(!W&&R){R=encodeURIComponent(R)+"=";P=encodeURIComponent(I.value);switch(I.type){case"select-one":if(I.selectedIndex>-1){H=I.options[I.selectedIndex];M[V++]=R+encodeURIComponent((H.attributes.value&&H.attributes.value.specified)?H.value:H.text);}break;case"select-multiple":if(I.selectedIndex>-1){for(K=I.selectedIndex,U=I.options.length;K<U;++K){H=I.options[K];if(H.selected){M[V++]=R+encodeURIComponent((H.attributes.value&&H.attributes.value.specified)?H.value:H.text);}}}break;case"radio":case"checkbox":if(I.checked){M[V++]=R+P;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(Q===false){if(this._hasSubmitListener&&this._submitElementValue){M[V++]=this._submitElementValue;}Q=true;}break;default:M[V++]=R+P;}}}this._isFormSubmit=true;this._sFormData=M.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;}function C(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";}function B(H){var I="yuiIO"+this._transaction_id,J;if(YAHOO.env.ua.ie){J=document.createElement('<iframe id="'+I+'" name="'+I+'" />');if(typeof H=="boolean"){J.src="javascript:false";}}else{J=document.createElement("iframe");J.id=I;J.name=I;}J.style.position="absolute";J.style.top="-1000px";J.style.left="-1000px";document.body.appendChild(J);}function E(H){var K=[],I=H.split("&"),J,L;for(J=0;J<I.length;J++){L=I[J].indexOf("=");if(L!=-1){K[J]=document.createElement("input");K[J].type="hidden";K[J].name=decodeURIComponent(I[J].substring(0,L));K[J].value=decodeURIComponent(I[J].substring(L+1));this._formNode.appendChild(K[J]);}}return K;}function A(K,V,L,J){var Q="yuiIO"+K.tId,R="multipart/form-data",T=document.getElementById(Q),M=(document.documentMode&&document.documentMode===8)?true:false,W=this,S=(V&&V.argument)?V.argument:null,U,P,I,O,H,N;H={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",L);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",Q);if(YAHOO.env.ua.ie&&!M){this._formNode.setAttribute("encoding",R);}else{this._formNode.setAttribute("enctype",R);}if(J){U=this.appendPostData(J);}this._formNode.submit();this.startEvent.fire(K,S);if(K.startEvent){K.startEvent.fire(K,S);}if(V&&V.timeout){this._timeOut[K.tId]=window.setTimeout(function(){W.abort(K,V,true);},V.timeout);}if(U&&U.length>0){for(P=0;P<U.length;P++){this._formNode.removeChild(U[P]);}}for(I in H){if(YAHOO.lang.hasOwnProperty(H,I)){if(H[I]){this._formNode.setAttribute(I,H[I]);}else{this._formNode.removeAttribute(I);}}}this.resetFormState();N=function(){if(V&&V.timeout){window.clearTimeout(W._timeOut[K.tId]);delete W._timeOut[K.tId];}W.completeEvent.fire(K,S);if(K.completeEvent){K.completeEvent.fire(K,S);
+}O={tId:K.tId,argument:V.argument};try{O.responseText=T.contentWindow.document.body?T.contentWindow.document.body.innerHTML:T.contentWindow.document.documentElement.textContent;O.responseXML=T.contentWindow.document.XMLDocument?T.contentWindow.document.XMLDocument:T.contentWindow.document;}catch(X){}if(V&&V.upload){if(!V.scope){V.upload(O);}else{V.upload.apply(V.scope,[O]);}}W.uploadEvent.fire(O);if(K.uploadEvent){K.uploadEvent.fire(O);}F.removeListener(T,"load",N);setTimeout(function(){document.body.removeChild(T);W.releaseObject(K);},100);};F.addListener(T,"load",N);}D.setForm=G;D.resetFormState=C;D.createFrame=B;D.appendPostData=E;D.uploadFile=A;})();YAHOO.register("connection",YAHOO.util.Connect,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
Index: trunk/include/yui/connection/connection.js
===================================================================
--- trunk/include/yui/connection/connection.js	(nonexistent)
+++ trunk/include/yui/connection/connection.js	(revision 2)
@@ -0,0 +1,1546 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The Connection Manager provides a simplified interface to the XMLHttpRequest
+ * object.  It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
+ * interactive states and server response, returning the results to a pre-defined
+ * callback you create.
+ *
+ * @namespace YAHOO.util
+ * @module connection
+ * @requires yahoo
+ * @requires event
+ */
+
+/**
+ * The Connection Manager singleton provides methods for creating and managing
+ * asynchronous transactions.
+ *
+ * @class Connect
+ */
+
+YAHOO.util.Connect =
+{
+  /**
+  * @description Array of MSFT ActiveX ids for XMLHttpRequest.
+  * @property _msxml_progid
+  * @private
+  * @static
+  * @type array
+   */
+    _msxml_progid:[
+        'Microsoft.XMLHTTP',
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP'
+        ],
+
+  /**
+  * @description Object literal of HTTP header(s)
+  * @property _http_header
+  * @private
+  * @static
+  * @type object
+   */
+    _http_headers:{},
+
+  /**
+  * @description Determines if HTTP headers are set.
+  * @property _has_http_headers
+  * @private
+  * @static
+  * @type boolean
+   */
+    _has_http_headers:false,
+
+ /**
+ * @description Determines if a default header of
+  * Content-Type of 'application/x-www-form-urlencoded'
+  * will be added to any client HTTP headers sent for POST
+  * transactions.
+ * @property _use_default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_post_header:true,
+
+ /**
+ * @description The default header used for POST transactions.
+ * @property _default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
+
+ /**
+ * @description The default header used for transactions involving the
+  * use of HTML forms.
+ * @property _default_form_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_form_header:'application/x-www-form-urlencoded',
+
+ /**
+ * @description Determines if a default header of
+  * 'X-Requested-With: XMLHttpRequest'
+  * will be added to each transaction.
+ * @property _use_default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_xhr_header:true,
+
+ /**
+ * @description The default header value for the label
+  * "X-Requested-With".  This is sent with each
+  * transaction, by default, to identify the
+  * request as being made by YUI Connection Manager.
+ * @property _default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_xhr_header:'XMLHttpRequest',
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _has_default_headers:true,
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_headers:{},
+
+ /**
+ * @description Collection of polling references to the polling mechanism in handleReadyState.
+ * @property _poll
+ * @private
+ * @static
+ * @type object
+  */
+    _poll:{},
+
+ /**
+ * @description Queue of timeout values for each transaction callback with a defined timeout value.
+ * @property _timeOut
+ * @private
+ * @static
+ * @type object
+  */
+    _timeOut:{},
+
+  /**
+  * @description The polling frequency, in milliseconds, for HandleReadyState.
+   * when attempting to determine a transaction's XHR readyState.
+   * The default is 50 milliseconds.
+  * @property _polling_interval
+  * @private
+  * @static
+  * @type int
+   */
+     _polling_interval:50,
+
+  /**
+  * @description A transaction counter that increments the transaction id for each transaction.
+  * @property _transaction_id
+  * @private
+  * @static
+  * @type int
+   */
+     _transaction_id:0,
+
+  /**
+  * @description Custom event that fires at the start of a transaction
+  * @property startEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    startEvent: new YAHOO.util.CustomEvent('start'),
+
+  /**
+  * @description Custom event that fires when a transaction response has completed.
+  * @property completeEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    completeEvent: new YAHOO.util.CustomEvent('complete'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 2xx range.
+  * @property successEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    successEvent: new YAHOO.util.CustomEvent('success'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 4xx/5xx range.
+  * @property failureEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    failureEvent: new YAHOO.util.CustomEvent('failure'),
+
+  /**
+  * @description Custom event that fires when a transaction is successfully aborted.
+  * @property abortEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    abortEvent: new YAHOO.util.CustomEvent('abort'),
+
+  /**
+  * @description A reference table that maps callback custom events members to its specific
+   * event name.
+  * @property _customEvents
+  * @private
+  * @static
+  * @type object
+   */
+    _customEvents:
+    {
+        onStart:['startEvent', 'start'],
+        onComplete:['completeEvent', 'complete'],
+        onSuccess:['successEvent', 'success'],
+        onFailure:['failureEvent', 'failure'],
+        onUpload:['uploadEvent', 'upload'],
+        onAbort:['abortEvent', 'abort']
+    },
+
+  /**
+  * @description Member to add an ActiveX id to the existing xml_progid array.
+   * In the event(unlikely) a new ActiveX id is introduced, it can be added
+   * without internal code modifications.
+  * @method setProgId
+  * @public
+  * @static
+  * @param {string} id The ActiveX id to be added to initialize the XHR object.
+  * @return void
+   */
+    setProgId:function(id)
+    {
+        this._msxml_progid.unshift(id);
+    },
+
+  /**
+  * @description Member to override the default POST header.
+  * @method setDefaultPostHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultPostHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_post_header = b;
+        }
+        else if(typeof b == 'boolean'){
+            this._use_default_post_header = b;
+        }
+    },
+
+  /**
+  * @description Member to override the default transaction header..
+  * @method setDefaultXhrHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultXhrHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_xhr_header = b;
+        }
+        else{
+            this._use_default_xhr_header = b;
+        }
+    },
+
+  /**
+  * @description Member to modify the default polling interval.
+  * @method setPollingInterval
+  * @public
+  * @static
+  * @param {int} i The polling interval in milliseconds.
+  * @return void
+   */
+    setPollingInterval:function(i)
+    {
+        if(typeof i == 'number' && isFinite(i)){
+            this._polling_interval = i;
+        }
+    },
+
+  /**
+  * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
+   * the XMLHttpRequest instance and the transaction id.
+  * @method createXhrObject
+  * @private
+  * @static
+  * @param {int} transactionId Property containing the transaction id for this transaction.
+  * @return object
+   */
+    createXhrObject:function(transactionId)
+    {
+        var obj,http,i;
+        try
+        {
+            // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
+            http = new XMLHttpRequest();
+            //  Object literal with http and tId properties
+            obj = { conn:http, tId:transactionId, xhr: true };
+        }
+        catch(e)
+        {
+            for(i=0; i<this._msxml_progid.length; ++i){
+                try
+                {
+                    // Instantiates XMLHttpRequest for IE and assign to http
+                    http = new ActiveXObject(this._msxml_progid[i]);
+                    //  Object literal with conn and tId properties
+                    obj = { conn:http, tId:transactionId, xhr: true };
+                    break;
+                }
+                catch(e1){}
+            }
+        }
+        finally
+        {
+            return obj;
+        }
+    },
+
+  /**
+  * @description This method is called by asyncRequest to create a
+   * valid connection object for the transaction.  It also passes a
+   * transaction id and increments the transaction id counter.
+  * @method getConnectionObject
+  * @private
+  * @static
+  * @return {object}
+   */
+    getConnectionObject:function(t)
+    {
+        var o, tId = this._transaction_id;
+
+        try
+        {
+            if(!t){
+                o = this.createXhrObject(tId);
+            }
+            else{
+                o = {tId:tId};
+                if(t==='xdr'){
+                    o.conn = this._transport;
+                    o.xdr = true;
+                }
+                else if(t==='upload'){
+                    o.upload = true;
+                }
+            }
+
+            if(o){
+                this._transaction_id++;
+            }
+        }
+        catch(e){}
+        return o;
+    },
+
+  /**
+  * @description Method for initiating an asynchronous request via the XHR object.
+  * @method asyncRequest
+  * @public
+  * @static
+  * @param {string} method HTTP transaction method
+  * @param {string} uri Fully qualified path of resource
+  * @param {callback} callback User-defined callback function or object
+  * @param {string} postData POST body
+  * @return {object} Returns the connection object
+   */
+    asyncRequest:function(method, uri, callback, postData)
+    {
+        var o,t,args = (callback && callback.argument)?callback.argument:null;
+
+        if(this._isFileUpload){
+            t = 'upload';
+        }
+        else if(callback.xdr){
+            t = 'xdr';
+        }
+
+        o = this.getConnectionObject(t);
+        if(!o){
+            return null;
+        }
+        else{
+
+            // Intialize any transaction-specific custom events, if provided.
+            if(callback && callback.customevents){
+                this.initCustomEvents(o, callback);
+            }
+
+            if(this._isFormSubmit){
+                if(this._isFileUpload){
+                    this.uploadFile(o, callback, uri, postData);
+                    return o;
+                }
+
+                // If the specified HTTP method is GET, setForm() will return an
+                // encoded string that is concatenated to the uri to
+                // create a querystring.
+                if(method.toUpperCase() == 'GET'){
+                    if(this._sFormData.length !== 0){
+                        // If the URI already contains a querystring, append an ampersand
+                        // and then concatenate _sFormData to the URI.
+                        uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
+                    }
+                }
+                else if(method.toUpperCase() == 'POST'){
+                    // If POST data exist in addition to the HTML form data,
+                    // it will be concatenated to the form data.
+                    postData = postData?this._sFormData + "&" + postData:this._sFormData;
+                }
+            }
+
+            if(method.toUpperCase() == 'GET' && (callback && callback.cache === false)){
+                // If callback.cache is defined and set to false, a
+                // timestamp value will be added to the querystring.
+                uri += ((uri.indexOf('?') == -1)?'?':'&') + "rnd=" + new Date().valueOf().toString();
+            }
+
+            // Each transaction will automatically include a custom header of
+            // "X-Requested-With: XMLHttpRequest" to identify the request as
+            // having originated from Connection Manager.
+            if(this._use_default_xhr_header){
+                if(!this._default_headers['X-Requested-With']){
+                    this.initHeader('X-Requested-With', this._default_xhr_header, true);
+                }
+            }
+
+            //If the transaction method is POST and the POST header value is set to true
+            //or a custom value, initalize the Content-Type header to this value.
+            if((method.toUpperCase() === 'POST' && this._use_default_post_header) && this._isFormSubmit === false){
+                this.initHeader('Content-Type', this._default_post_header);
+            }
+
+            if(o.xdr){
+                this.xdr(o, method, uri, callback, postData);
+                return o;
+            }
+
+            o.conn.open(method, uri, true);
+            //Initialize all default and custom HTTP headers,
+            if(this._has_default_headers || this._has_http_headers){
+                this.setHeader(o);
+            }
+
+            this.handleReadyState(o, callback);
+            o.conn.send(postData || '');
+
+            // Reset the HTML form data and state properties as
+            // soon as the data are submitted.
+            if(this._isFormSubmit === true){
+                this.resetFormState();
+            }
+
+            // Fire global custom event -- startEvent
+            this.startEvent.fire(o, args);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, args);
+            }
+
+            return o;
+        }
+    },
+
+  /**
+  * @description This method creates and subscribes custom events,
+   * specific to each transaction
+  * @method initCustomEvents
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+    initCustomEvents:function(o, callback)
+    {
+        var prop;
+        // Enumerate through callback.customevents members and bind/subscribe
+        // events that match in the _customEvents table.
+        for(prop in callback.customevents){
+            if(this._customEvents[prop][0]){
+                // Create the custom event
+                o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
+
+                // Subscribe the custom event
+                o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
+            }
+        }
+    },
+
+  /**
+  * @description This method serves as a timer that polls the XHR object's readyState
+   * property during a transaction, instead of binding a callback to the
+   * onreadystatechange event.  Upon readyState 4, handleTransactionResponse
+   * will process the response, and the timer will be cleared.
+  * @method handleReadyState
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+
+    handleReadyState:function(o, callback)
+
+    {
+        var oConn = this,
+            args = (callback && callback.argument)?callback.argument:null;
+
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        this._poll[o.tId] = window.setInterval(
+            function(){
+                if(o.conn && o.conn.readyState === 4){
+
+                    // Clear the polling interval for the transaction
+                    // and remove the reference from _poll.
+                    window.clearInterval(oConn._poll[o.tId]);
+                    delete oConn._poll[o.tId];
+
+                    if(callback && callback.timeout){
+                        window.clearTimeout(oConn._timeOut[o.tId]);
+                        delete oConn._timeOut[o.tId];
+                    }
+
+                    // Fire global custom event -- completeEvent
+                    oConn.completeEvent.fire(o, args);
+
+                    if(o.completeEvent){
+                        // Fire transaction custom event -- completeEvent
+                        o.completeEvent.fire(o, args);
+                    }
+
+                    oConn.handleTransactionResponse(o, callback);
+                }
+            }
+        ,this._polling_interval);
+    },
+
+  /**
+  * @description This method attempts to interpret the server response and
+   * determine whether the transaction was successful, or if an error or
+   * exception was encountered.
+  * @method handleTransactionResponse
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {object} callback The user-defined callback object
+  * @param {boolean} isAbort Determines if the transaction was terminated via abort().
+  * @return {void}
+   */
+    handleTransactionResponse:function(o, callback, isAbort)
+    {
+        var httpStatus, responseObject,
+            args = (callback && callback.argument)?callback.argument:null,
+            xdrS = (o.r && o.r.statusText === 'xdr:success')?true:false,
+            xdrF = (o.r && o.r.statusText === 'xdr:failure')?true:false,
+            xdrA = isAbort;
+
+        try
+        {
+            if((o.conn.status !== undefined && o.conn.status !== 0) || xdrS){
+                // XDR requests will not have HTTP status defined. The
+                // statusText property will define the response status
+                // set by the Flash transport.
+                httpStatus = o.conn.status;
+            }
+            else if(xdrF && !xdrA){
+                // Set XDR transaction failure to a status of 0, which
+                // resolves as an HTTP failure, instead of an exception.
+                httpStatus = 0;
+            }
+            else{
+                httpStatus = 13030;
+            }
+        }
+        catch(e){
+
+             // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
+             // when the XHR object's status and statusText properties are
+             // unavailable, and a query attempt throws an exception.
+            httpStatus = 13030;
+        }
+
+        if((httpStatus >= 200 && httpStatus < 300) || httpStatus === 1223 || xdrS){
+            responseObject = o.xdr ? o.r : this.createResponseObject(o, args);
+            if(callback && callback.success){
+                if(!callback.scope){
+                    callback.success(responseObject);
+                }
+                else{
+                    // If a scope property is defined, the callback will be fired from
+                    // the context of the object.
+                    callback.success.apply(callback.scope, [responseObject]);
+                }
+            }
+
+            // Fire global custom event -- successEvent
+            this.successEvent.fire(responseObject);
+
+            if(o.successEvent){
+                // Fire transaction custom event -- successEvent
+                o.successEvent.fire(responseObject);
+            }
+        }
+        else{
+            switch(httpStatus){
+                // The following cases are wininet.dll error codes that may be encountered.
+                case 12002: // Server timeout
+                case 12029: // 12029 to 12031 correspond to dropped connections.
+                case 12030:
+                case 12031:
+                case 12152: // Connection closed by server.
+                case 13030: // See above comments for variable status.
+                    // XDR transactions will not resolve to this case, since the
+                    // response object is already built in the xdr response.
+                    responseObject = this.createExceptionObject(o.tId, args, (isAbort?isAbort:false));
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+
+                    break;
+                default:
+                    responseObject = (o.xdr) ? o.response : this.createResponseObject(o, args);
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+            }
+
+            // Fire global custom event -- failureEvent
+            this.failureEvent.fire(responseObject);
+
+            if(o.failureEvent){
+                // Fire transaction custom event -- failureEvent
+                o.failureEvent.fire(responseObject);
+            }
+
+        }
+
+        this.releaseObject(o);
+        responseObject = null;
+    },
+
+  /**
+  * @description This method evaluates the server response, creates and returns the results via
+   * its properties.  Success and failure cases will differ in the response
+   * object's property values.
+  * @method createResponseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @return {object}
+   */
+    createResponseObject:function(o, callbackArg)
+    {
+        var obj = {}, headerObj = {},
+            i, headerStr, header, delimitPos;
+
+        try
+        {
+            headerStr = o.conn.getAllResponseHeaders();
+            header = headerStr.split('\n');
+            for(i=0; i<header.length; i++){
+                delimitPos = header[i].indexOf(':');
+                if(delimitPos != -1){
+                    headerObj[header[i].substring(0,delimitPos)] = YAHOO.lang.trim(header[i].substring(delimitPos+2));
+                }
+            }
+        }
+        catch(e){}
+
+        obj.tId = o.tId;
+        // Normalize IE's response to HTTP 204 when Win error 1223.
+        obj.status = (o.conn.status == 1223)?204:o.conn.status;
+        // Normalize IE's statusText to "No Content" instead of "Unknown".
+        obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
+        obj.getResponseHeader = headerObj;
+        obj.getAllResponseHeaders = headerStr;
+        obj.responseText = o.conn.responseText;
+        obj.responseXML = o.conn.responseXML;
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description If a transaction cannot be completed due to dropped or closed connections,
+   * there may be not be enough information to build a full response object.
+   * The failure callback will be fired and this specific condition can be identified
+   * by a status property value of 0.
+   *
+   * If an abort was successful, the status property will report a value of -1.
+   *
+  * @method createExceptionObject
+  * @private
+  * @static
+  * @param {int} tId The Transaction Id
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
+  * @return {object}
+   */
+    createExceptionObject:function(tId, callbackArg, isAbort)
+    {
+        var COMM_CODE = 0,
+            COMM_ERROR = 'communication failure',
+            ABORT_CODE = -1,
+            ABORT_ERROR = 'transaction aborted',
+            obj = {};
+
+        obj.tId = tId;
+        if(isAbort){
+            obj.status = ABORT_CODE;
+            obj.statusText = ABORT_ERROR;
+        }
+        else{
+            obj.status = COMM_CODE;
+            obj.statusText = COMM_ERROR;
+        }
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description Method that initializes the custom HTTP headers for the each transaction.
+  * @method initHeader
+  * @public
+  * @static
+  * @param {string} label The HTTP header label
+  * @param {string} value The HTTP header value
+  * @param {string} isDefault Determines if the specific header is a default header
+   * automatically sent with each transaction.
+  * @return {void}
+   */
+    initHeader:function(label, value, isDefault)
+    {
+        var headerObj = (isDefault)?this._default_headers:this._http_headers;
+
+        headerObj[label] = value;
+        if(isDefault){
+            this._has_default_headers = true;
+        }
+        else{
+            this._has_http_headers = true;
+        }
+    },
+
+
+  /**
+  * @description Accessor that sets the HTTP headers for each transaction.
+  * @method setHeader
+  * @private
+  * @static
+  * @param {object} o The connection object for the transaction.
+  * @return {void}
+   */
+    setHeader:function(o)
+    {
+        var prop;
+        if(this._has_default_headers){
+            for(prop in this._default_headers){
+                if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._default_headers[prop]);
+                }
+            }
+        }
+
+        if(this._has_http_headers){
+            for(prop in this._http_headers){
+                if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._http_headers[prop]);
+                }
+            }
+
+            this._http_headers = {};
+            this._has_http_headers = false;
+        }
+    },
+
+  /**
+  * @description Resets the default HTTP headers object
+  * @method resetDefaultHeaders
+  * @public
+  * @static
+  * @return {void}
+   */
+    resetDefaultHeaders:function(){
+        this._default_headers = {};
+        this._has_default_headers = false;
+    },
+
+  /**
+  * @description Method to terminate a transaction, if it has not reached readyState 4.
+  * @method abort
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest.
+  * @param {object} callback  User-defined callback object.
+  * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
+  * @return {boolean}
+   */
+    abort:function(o, callback, isTimeout)
+    {
+        var abortStatus,
+            args = (callback && callback.argument)?callback.argument:null;
+            o = o || {};
+
+        if(o.conn){
+            if(o.xhr){
+                if(this.isCallInProgress(o)){
+                    // Issue abort request
+                    o.conn.abort();
+
+                    window.clearInterval(this._poll[o.tId]);
+                    delete this._poll[o.tId];
+
+                    if(isTimeout){
+                        window.clearTimeout(this._timeOut[o.tId]);
+                        delete this._timeOut[o.tId];
+                    }
+
+                    abortStatus = true;
+                }
+            }
+            else if(o.xdr){
+                o.conn.abort(o.tId);
+                abortStatus = true;
+            }
+        }
+        else if(o.upload){
+            var frameId = 'yuiIO' + o.tId;
+            var io = document.getElementById(frameId);
+
+            if(io){
+                // Remove all listeners on the iframe prior to
+                // its destruction.
+                YAHOO.util.Event.removeListener(io, "load");
+                // Destroy the iframe facilitating the transaction.
+                document.body.removeChild(io);
+
+                if(isTimeout){
+                    window.clearTimeout(this._timeOut[o.tId]);
+                    delete this._timeOut[o.tId];
+                }
+
+                abortStatus = true;
+            }
+        }
+        else{
+            abortStatus = false;
+        }
+
+        if(abortStatus === true){
+            // Fire global custom event -- abortEvent
+            this.abortEvent.fire(o, args);
+
+            if(o.abortEvent){
+                // Fire transaction custom event -- abortEvent
+                o.abortEvent.fire(o, args);
+            }
+
+            this.handleTransactionResponse(o, callback, true);
+        }
+
+        return abortStatus;
+    },
+
+  /**
+  * @description Determines if the transaction is still being processed.
+  * @method isCallInProgress
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest
+  * @return {boolean}
+   */
+    isCallInProgress:function(o)
+    {
+        o = o || {};
+        // if the XHR object assigned to the transaction has not been dereferenced,
+        // then check its readyState status.  Otherwise, return false.
+        if(o.xhr && o.conn){
+            return o.conn.readyState !== 4 && o.conn.readyState !== 0;
+        }
+        else if(o.xdr && o.conn){
+            return o.conn.isCallInProgress(o.tId);
+        }
+        else if(o.upload === true){
+            return document.getElementById('yuiIO' + o.tId)?true:false;
+        }
+        else{
+            return false;
+        }
+    },
+
+  /**
+  * @description Dereference the XHR instance and the connection object after the transaction is completed.
+  * @method releaseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @return {void}
+   */
+    releaseObject:function(o)
+    {
+        if(o && o.conn){
+            //dereference the XHR instance.
+            o.conn = null;
+
+
+            //dereference the connection object.
+            o = null;
+        }
+    }
+};
+
+/**
+ * @for Connect
+  */
+(function() {
+    var YCM = YAHOO.util.Connect, _fn = {};
+
+   /**
+   * @description This method creates and instantiates the Flash transport.
+   * @method _swf
+   * @private
+   * @static
+   * @param {string} URI to connection.swf.
+   * @return {void}
+    */
+    function _swf(uri) {
+        var o = '<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="' +
+                uri + '" width="0" height="0">' +
+                 '<param name="movie" value="' + uri + '">' +
+                '<param name="allowScriptAccess" value="always">' +
+                '</object>',
+            c = document.createElement('div');
+
+        document.body.appendChild(c);
+        c.innerHTML = o;
+    }
+
+   /**
+   * @description This method calls the public method on the
+    * Flash transport to start the XDR transaction.  It is analogous
+    * to Connection Manager's asyncRequest method.
+   * @method xdr
+   * @private
+   * @static
+   * @param {object} The transaction object.
+   * @param {string} HTTP request method.
+   * @param {string} URI for the transaction.
+   * @param {object} The transaction's callback object.
+   * @param {object} The JSON object used as HTTP POST data.
+   * @return {void}
+    */
+    function _xdr(o, m, u, c, d) {
+        _fn[parseInt(o.tId)] = { 'o':o, 'c':c };
+        if (d) {
+            c.method = m;
+            c.data = d;
+        }
+
+        o.conn.send(u, c, o.tId);
+    }
+
+   /**
+   * @description This method instantiates the Flash transport and
+    * establishes a static reference to it, used for all XDR requests.
+   * @method transport
+   * @public
+   * @static
+   * @param {string} URI to connection.swf.
+   * @return {void}
+    */
+    function _init(uri) {
+        _swf(uri);
+        YCM._transport = document.getElementById('YUIConnectionSwf');
+    }
+
+    function _xdrReady() {
+        YCM.xdrReadyEvent.fire();
+    }
+
+   /**
+   * @description This method fires the global and transaction start
+    * events.
+   * @method _xdrStart
+   * @private
+   * @static
+   * @param {object} The transaction object.
+   * @param {string} The transaction's callback object.
+   * @return {void}
+    */
+    function _xdrStart(o, cb) {
+        if (o) {
+            // Fire global custom event -- startEvent
+            YCM.startEvent.fire(o, cb.argument);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, cb.argument);
+            }
+        }
+    }
+
+   /**
+   * @description This method is the initial response handler
+    * for XDR transactions.  The Flash transport calls this
+    * function and sends the response payload.
+   * @method handleXdrResponse
+   * @private
+   * @static
+   * @param {object} The response object sent from the Flash transport.
+   * @return {void}
+    */
+    function _handleXdrResponse(r) {
+        var o = _fn[r.tId].o,
+            cb = _fn[r.tId].c;
+
+        if (r.statusText === 'xdr:start') {
+            _xdrStart(o, cb);
+            return;
+        }
+
+        r.responseText = decodeURI(r.responseText);
+        o.r = r;
+        if (cb.argument) {
+            o.r.argument = cb.argument;
+        }
+
+        this.handleTransactionResponse(o, cb, r.statusText === 'xdr:abort' ? true : false);
+        delete _fn[r.tId];
+    }
+
+    // Bind the functions to Connection Manager as static fields.
+    YCM.xdr = _xdr;
+    YCM.swf = _swf;
+    YCM.transport = _init;
+    YCM.xdrReadyEvent = new YAHOO.util.CustomEvent('xdrReady');
+    YCM.xdrReady = _xdrReady;
+    YCM.handleXdrResponse = _handleXdrResponse;
+})();
+
+/**
+ * @for Connect
+  */
+(function(){
+    var YCM = YAHOO.util.Connect,
+        YE = YAHOO.util.Event;
+   /**
+    * @description Property modified by setForm() to determine if the data
+    * should be submitted as an HTML form.
+    * @property _isFormSubmit
+    * @private
+    * @static
+    * @type boolean
+    */
+    YCM._isFormSubmit = false;
+
+   /**
+    * @description Property modified by setForm() to determine if a file(s)
+    * upload is expected.
+    * @property _isFileUpload
+    * @private
+    * @static
+    * @type boolean
+    */
+    YCM._isFileUpload = false;
+
+   /**
+    * @description Property modified by setForm() to set a reference to the HTML
+    * form node if the desired action is file upload.
+    * @property _formNode
+    * @private
+    * @static
+    * @type object
+    */
+    YCM._formNode = null;
+
+   /**
+    * @description Property modified by setForm() to set the HTML form data
+    * for each transaction.
+    * @property _sFormData
+    * @private
+    * @static
+    * @type string
+    */
+    YCM._sFormData = null;
+
+   /**
+    * @description Tracks the name-value pair of the "clicked" submit button if multiple submit
+    * buttons are present in an HTML form; and, if YAHOO.util.Event is available.
+    * @property _submitElementValue
+    * @private
+    * @static
+    * @type string
+    */
+    YCM._submitElementValue = null;
+
+   /**
+   * @description Custom event that fires when handleTransactionResponse() determines a
+    * response in the HTTP 4xx/5xx range.
+   * @property failureEvent
+   * @private
+   * @static
+   * @type CustomEvent
+    */
+    YCM.uploadEvent = new YAHOO.util.CustomEvent('upload'),
+
+   /**
+    * @description Determines whether YAHOO.util.Event is available and returns true or false.
+    * If true, an event listener is bound at the document level to trap click events that
+    * resolve to a target type of "Submit".  This listener will enable setForm() to determine
+    * the clicked "Submit" value in a multi-Submit button, HTML form.
+    * @property _hasSubmitListener
+    * @private
+    * @static
+    */
+    YCM._hasSubmitListener = function() {
+        if(YE){
+            YE.addListener(
+                document,
+                'click',
+                function(e){
+                    var obj = YE.getTarget(e),
+                        name = obj.nodeName.toLowerCase();
+
+                    if((name === 'input' || name === 'button') && (obj.type && obj.type.toLowerCase() == 'submit')){
+                        YCM._submitElementValue = encodeURIComponent(obj.name) + "=" + encodeURIComponent(obj.value);
+                    }
+                });
+            return true;
+        }
+        return false;
+    }();
+
+  /**
+  * @description This method assembles the form label and value pairs and
+   * constructs an encoded string.
+   * asyncRequest() will automatically initialize the transaction with a
+   * a HTTP header Content-Type of application/x-www-form-urlencoded.
+  * @method setForm
+  * @public
+  * @static
+  * @param {string || object} form id or name attribute, or form object.
+  * @param {boolean} optional enable file upload.
+  * @param {boolean} optional enable file upload over SSL in IE only.
+  * @return {string} string of the HTML form field name and value pairs..
+   */
+    function _setForm(formId, isUpload, secureUri)
+    {
+        var oForm, oElement, oName, oValue, oDisabled,
+            hasSubmit = false,
+            data = [], item = 0,
+            i,len,j,jlen,opt;
+
+        this.resetFormState();
+
+        if(typeof formId == 'string'){
+            // Determine if the argument is a form id or a form name.
+            // Note form name usage is deprecated by supported
+            // here for legacy reasons.
+            oForm = (document.getElementById(formId) || document.forms[formId]);
+        }
+        else if(typeof formId == 'object'){
+            // Treat argument as an HTML form object.
+            oForm = formId;
+        }
+        else{
+            return;
+        }
+
+        // If the isUpload argument is true, setForm will call createFrame to initialize
+        // an iframe as the form target.
+        //
+        // The argument secureURI is also required by IE in SSL environments
+        // where the secureURI string is a fully qualified HTTP path, used to set the source
+        // of the iframe, to a stub resource in the same domain.
+        if(isUpload){
+
+            // Create iframe in preparation for file upload.
+            this.createFrame(secureUri?secureUri:null);
+
+            // Set form reference and file upload properties to true.
+            this._isFormSubmit = true;
+            this._isFileUpload = true;
+            this._formNode = oForm;
+
+            return;
+        }
+
+        // Iterate over the form elements collection to construct the
+        // label-value pairs.
+        for (i=0,len=oForm.elements.length; i<len; ++i){
+            oElement  = oForm.elements[i];
+            oDisabled = oElement.disabled;
+            oName     = oElement.name;
+
+            // Do not submit fields that are disabled or
+            // do not have a name attribute value.
+            if(!oDisabled && oName)
+            {
+                oName  = encodeURIComponent(oName)+'=';
+                oValue = encodeURIComponent(oElement.value);
+
+                switch(oElement.type)
+                {
+                    // Safari, Opera, FF all default opt.value from .text if
+                    // value attribute not specified in markup
+                    case 'select-one':
+                        if (oElement.selectedIndex > -1) {
+                            opt = oElement.options[oElement.selectedIndex];
+                            data[item++] = oName + encodeURIComponent(
+                                (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);
+                        }
+                        break;
+                    case 'select-multiple':
+                        if (oElement.selectedIndex > -1) {
+                            for(j=oElement.selectedIndex, jlen=oElement.options.length; j<jlen; ++j){
+                                opt = oElement.options[j];
+                                if (opt.selected) {
+                                    data[item++] = oName + encodeURIComponent(
+                                        (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text);
+                                }
+                            }
+                        }
+                        break;
+                    case 'radio':
+                    case 'checkbox':
+                        if(oElement.checked){
+                            data[item++] = oName + oValue;
+                        }
+                        break;
+                    case 'file':
+                        // stub case as XMLHttpRequest will only send the file path as a string.
+                    case undefined:
+                        // stub case for fieldset element which returns undefined.
+                    case 'reset':
+                        // stub case for input type reset button.
+                    case 'button':
+                        // stub case for input type button elements.
+                        break;
+                    case 'submit':
+                        if(hasSubmit === false){
+                            if(this._hasSubmitListener && this._submitElementValue){
+                                data[item++] = this._submitElementValue;
+                            }
+                            hasSubmit = true;
+                        }
+                        break;
+                    default:
+                        data[item++] = oName + oValue;
+                }
+            }
+        }
+
+        this._isFormSubmit = true;
+        this._sFormData = data.join('&');
+
+
+        this.initHeader('Content-Type', this._default_form_header);
+
+        return this._sFormData;
+    }
+
+   /**
+   * @description Resets HTML form properties when an HTML form or HTML form
+    * with file upload transaction is sent.
+   * @method resetFormState
+   * @private
+   * @static
+   * @return {void}
+    */
+    function _resetFormState(){
+        this._isFormSubmit = false;
+        this._isFileUpload = false;
+        this._formNode = null;
+        this._sFormData = "";
+    }
+
+
+   /**
+   * @description Creates an iframe to be used for form file uploads.  It is remove from the
+    * document upon completion of the upload transaction.
+   * @method createFrame
+   * @private
+   * @static
+   * @param {string} optional qualified path of iframe resource for SSL in IE.
+   * @return {void}
+    */
+    function _createFrame(secureUri){
+
+        // IE does not allow the setting of id and name attributes as object
+        // properties via createElement().  A different iframe creation
+        // pattern is required for IE.
+        var frameId = 'yuiIO' + this._transaction_id,
+            io;
+        if(YAHOO.env.ua.ie){
+            io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
+
+            // IE will throw a security exception in an SSL environment if the
+            // iframe source is undefined.
+            if(typeof secureUri == 'boolean'){
+                io.src = 'javascript:false';
+            }
+        }
+        else{
+            io = document.createElement('iframe');
+            io.id = frameId;
+            io.name = frameId;
+        }
+
+        io.style.position = 'absolute';
+        io.style.top = '-1000px';
+        io.style.left = '-1000px';
+
+        document.body.appendChild(io);
+    }
+
+   /**
+   * @description Parses the POST data and creates hidden form elements
+    * for each key-value, and appends them to the HTML form object.
+   * @method appendPostData
+   * @private
+   * @static
+   * @param {string} postData The HTTP POST data
+   * @return {array} formElements Collection of hidden fields.
+    */
+    function _appendPostData(postData){
+        var formElements = [],
+            postMessage = postData.split('&'),
+            i, delimitPos;
+
+        for(i=0; i < postMessage.length; i++){
+            delimitPos = postMessage[i].indexOf('=');
+            if(delimitPos != -1){
+                formElements[i] = document.createElement('input');
+                formElements[i].type = 'hidden';
+                formElements[i].name = decodeURIComponent(postMessage[i].substring(0,delimitPos));
+                formElements[i].value = decodeURIComponent(postMessage[i].substring(delimitPos+1));
+                this._formNode.appendChild(formElements[i]);
+            }
+        }
+
+        return formElements;
+    }
+
+   /**
+   * @description Uploads HTML form, inclusive of files/attachments, using the
+    * iframe created in createFrame to facilitate the transaction.
+   * @method uploadFile
+   * @private
+   * @static
+   * @param {int} id The transaction id.
+   * @param {object} callback User-defined callback object.
+   * @param {string} uri Fully qualified path of resource.
+   * @param {string} postData POST data to be submitted in addition to HTML form.
+   * @return {void}
+    */
+    function _uploadFile(o, callback, uri, postData){
+        // Each iframe has an id prefix of "yuiIO" followed
+        // by the unique transaction id.
+        var frameId = 'yuiIO' + o.tId,
+            uploadEncoding = 'multipart/form-data',
+            io = document.getElementById(frameId),
+            ie8 = (document.documentMode && document.documentMode === 8) ? true : false,
+            oConn = this,
+            args = (callback && callback.argument)?callback.argument:null,
+            oElements,i,prop,obj, rawFormAttributes, uploadCallback;
+
+        // Track original HTML form attribute values.
+        rawFormAttributes = {
+            action:this._formNode.getAttribute('action'),
+            method:this._formNode.getAttribute('method'),
+            target:this._formNode.getAttribute('target')
+        };
+
+        // Initialize the HTML form properties in case they are
+        // not defined in the HTML form.
+        this._formNode.setAttribute('action', uri);
+        this._formNode.setAttribute('method', 'POST');
+        this._formNode.setAttribute('target', frameId);
+
+        if(YAHOO.env.ua.ie && !ie8){
+            // IE does not respect property enctype for HTML forms.
+            // Instead it uses the property - "encoding".
+            this._formNode.setAttribute('encoding', uploadEncoding);
+        }
+        else{
+            this._formNode.setAttribute('enctype', uploadEncoding);
+        }
+
+        if(postData){
+            oElements = this.appendPostData(postData);
+        }
+
+        // Start file upload.
+        this._formNode.submit();
+
+        // Fire global custom event -- startEvent
+        this.startEvent.fire(o, args);
+
+        if(o.startEvent){
+            // Fire transaction custom event -- startEvent
+            o.startEvent.fire(o, args);
+        }
+
+        // Start polling if a callback is present and the timeout
+        // property has been defined.
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        // Remove HTML elements created by appendPostData
+        if(oElements && oElements.length > 0){
+            for(i=0; i < oElements.length; i++){
+                this._formNode.removeChild(oElements[i]);
+            }
+        }
+
+        // Restore HTML form attributes to their original
+        // values prior to file upload.
+        for(prop in rawFormAttributes){
+            if(YAHOO.lang.hasOwnProperty(rawFormAttributes, prop)){
+                if(rawFormAttributes[prop]){
+                    this._formNode.setAttribute(prop, rawFormAttributes[prop]);
+                }
+                else{
+                    this._formNode.removeAttribute(prop);
+                }
+            }
+        }
+
+        // Reset HTML form state properties.
+        this.resetFormState();
+
+        // Create the upload callback handler that fires when the iframe
+        // receives the load event.  Subsequently, the event handler is detached
+        // and the iframe removed from the document.
+        uploadCallback = function() {
+            if(callback && callback.timeout){
+                window.clearTimeout(oConn._timeOut[o.tId]);
+                delete oConn._timeOut[o.tId];
+            }
+
+            // Fire global custom event -- completeEvent
+            oConn.completeEvent.fire(o, args);
+
+            if(o.completeEvent){
+                // Fire transaction custom event -- completeEvent
+                o.completeEvent.fire(o, args);
+            }
+
+            obj = {
+                tId : o.tId,
+                argument : callback.argument
+            };
+
+            try
+            {
+                // responseText and responseXML will be populated with the same data from the iframe.
+                // Since the HTTP headers cannot be read from the iframe
+                obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:io.contentWindow.document.documentElement.textContent;
+                obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
+            }
+            catch(e){}
+
+            if(callback && callback.upload){
+                if(!callback.scope){
+                    callback.upload(obj);
+                }
+                else{
+                    callback.upload.apply(callback.scope, [obj]);
+                }
+            }
+
+            // Fire global custom event -- uploadEvent
+            oConn.uploadEvent.fire(obj);
+
+            if(o.uploadEvent){
+                // Fire transaction custom event -- uploadEvent
+                o.uploadEvent.fire(obj);
+            }
+
+            YE.removeListener(io, "load", uploadCallback);
+
+            setTimeout(
+                function(){
+                    document.body.removeChild(io);
+                    oConn.releaseObject(o);
+                }, 100);
+        };
+
+        // Bind the onload handler to the iframe to detect the file upload response.
+        YE.addListener(io, "load", uploadCallback);
+    }
+
+    YCM.setForm = _setForm;
+    YCM.resetFormState = _resetFormState;
+    YCM.createFrame = _createFrame;
+    YCM.appendPostData = _appendPostData;
+    YCM.uploadFile = _uploadFile;
+})();
+
+YAHOO.register("connection", YAHOO.util.Connect, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/connection/connection.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/include/yui/connection/connection.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/include/yui/connection/connection_core-debug.js
===================================================================
--- trunk/include/yui/connection/connection_core-debug.js	(nonexistent)
+++ trunk/include/yui/connection/connection_core-debug.js	(revision 2)
@@ -0,0 +1,980 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The Connection Manager provides a simplified interface to the XMLHttpRequest
+ * object.  It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
+ * interactive states and server response, returning the results to a pre-defined
+ * callback you create.
+ *
+ * @namespace YAHOO.util
+ * @module connection
+ * @requires yahoo
+ * @requires event
+ */
+
+/**
+ * The Connection Manager singleton provides methods for creating and managing
+ * asynchronous transactions.
+ *
+ * @class Connect
+ */
+
+YAHOO.util.Connect =
+{
+  /**
+  * @description Array of MSFT ActiveX ids for XMLHttpRequest.
+  * @property _msxml_progid
+  * @private
+  * @static
+  * @type array
+   */
+    _msxml_progid:[
+        'Microsoft.XMLHTTP',
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP'
+        ],
+
+  /**
+  * @description Object literal of HTTP header(s)
+  * @property _http_header
+  * @private
+  * @static
+  * @type object
+   */
+    _http_headers:{},
+
+  /**
+  * @description Determines if HTTP headers are set.
+  * @property _has_http_headers
+  * @private
+  * @static
+  * @type boolean
+   */
+    _has_http_headers:false,
+
+ /**
+ * @description Determines if a default header of
+  * Content-Type of 'application/x-www-form-urlencoded'
+  * will be added to any client HTTP headers sent for POST
+  * transactions.
+ * @property _use_default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_post_header:true,
+
+ /**
+ * @description The default header used for POST transactions.
+ * @property _default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
+
+ /**
+ * @description The default header used for transactions involving the
+  * use of HTML forms.
+ * @property _default_form_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_form_header:'application/x-www-form-urlencoded',
+
+ /**
+ * @description Determines if a default header of
+  * 'X-Requested-With: XMLHttpRequest'
+  * will be added to each transaction.
+ * @property _use_default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_xhr_header:true,
+
+ /**
+ * @description The default header value for the label
+  * "X-Requested-With".  This is sent with each
+  * transaction, by default, to identify the
+  * request as being made by YUI Connection Manager.
+ * @property _default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_xhr_header:'XMLHttpRequest',
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _has_default_headers:true,
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_headers:{},
+
+ /**
+ * @description Collection of polling references to the polling mechanism in handleReadyState.
+ * @property _poll
+ * @private
+ * @static
+ * @type object
+  */
+    _poll:{},
+
+ /**
+ * @description Queue of timeout values for each transaction callback with a defined timeout value.
+ * @property _timeOut
+ * @private
+ * @static
+ * @type object
+  */
+    _timeOut:{},
+
+  /**
+  * @description The polling frequency, in milliseconds, for HandleReadyState.
+   * when attempting to determine a transaction's XHR readyState.
+   * The default is 50 milliseconds.
+  * @property _polling_interval
+  * @private
+  * @static
+  * @type int
+   */
+     _polling_interval:50,
+
+  /**
+  * @description A transaction counter that increments the transaction id for each transaction.
+  * @property _transaction_id
+  * @private
+  * @static
+  * @type int
+   */
+     _transaction_id:0,
+
+  /**
+  * @description Custom event that fires at the start of a transaction
+  * @property startEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    startEvent: new YAHOO.util.CustomEvent('start'),
+
+  /**
+  * @description Custom event that fires when a transaction response has completed.
+  * @property completeEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    completeEvent: new YAHOO.util.CustomEvent('complete'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 2xx range.
+  * @property successEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    successEvent: new YAHOO.util.CustomEvent('success'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 4xx/5xx range.
+  * @property failureEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    failureEvent: new YAHOO.util.CustomEvent('failure'),
+
+  /**
+  * @description Custom event that fires when a transaction is successfully aborted.
+  * @property abortEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    abortEvent: new YAHOO.util.CustomEvent('abort'),
+
+  /**
+  * @description A reference table that maps callback custom events members to its specific
+   * event name.
+  * @property _customEvents
+  * @private
+  * @static
+  * @type object
+   */
+    _customEvents:
+    {
+        onStart:['startEvent', 'start'],
+        onComplete:['completeEvent', 'complete'],
+        onSuccess:['successEvent', 'success'],
+        onFailure:['failureEvent', 'failure'],
+        onUpload:['uploadEvent', 'upload'],
+        onAbort:['abortEvent', 'abort']
+    },
+
+  /**
+  * @description Member to add an ActiveX id to the existing xml_progid array.
+   * In the event(unlikely) a new ActiveX id is introduced, it can be added
+   * without internal code modifications.
+  * @method setProgId
+  * @public
+  * @static
+  * @param {string} id The ActiveX id to be added to initialize the XHR object.
+  * @return void
+   */
+    setProgId:function(id)
+    {
+        this._msxml_progid.unshift(id);
+        YAHOO.log('ActiveX Program Id  ' + id + ' added to _msxml_progid.', 'info', 'Connection');
+    },
+
+  /**
+  * @description Member to override the default POST header.
+  * @method setDefaultPostHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultPostHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_post_header = b;
+            YAHOO.log('Default POST header set to  ' + b, 'info', 'Connection');
+        }
+        else if(typeof b == 'boolean'){
+            this._use_default_post_header = b;
+        }
+    },
+
+  /**
+  * @description Member to override the default transaction header..
+  * @method setDefaultXhrHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultXhrHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_xhr_header = b;
+            YAHOO.log('Default XHR header set to  ' + b, 'info', 'Connection');
+        }
+        else{
+            this._use_default_xhr_header = b;
+        }
+    },
+
+  /**
+  * @description Member to modify the default polling interval.
+  * @method setPollingInterval
+  * @public
+  * @static
+  * @param {int} i The polling interval in milliseconds.
+  * @return void
+   */
+    setPollingInterval:function(i)
+    {
+        if(typeof i == 'number' && isFinite(i)){
+            this._polling_interval = i;
+            YAHOO.log('Default polling interval set to ' + i +'ms', 'info', 'Connection');
+        }
+    },
+
+  /**
+  * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
+   * the XMLHttpRequest instance and the transaction id.
+  * @method createXhrObject
+  * @private
+  * @static
+  * @param {int} transactionId Property containing the transaction id for this transaction.
+  * @return object
+   */
+    createXhrObject:function(transactionId)
+    {
+        var obj,http,i;
+        try
+        {
+            // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
+            http = new XMLHttpRequest();
+            //  Object literal with http and tId properties
+            obj = { conn:http, tId:transactionId, xhr: true };
+            YAHOO.log('XHR object created for transaction ' + transactionId, 'info', 'Connection');
+        }
+        catch(e)
+        {
+            for(i=0; i<this._msxml_progid.length; ++i){
+                try
+                {
+                    // Instantiates XMLHttpRequest for IE and assign to http
+                    http = new ActiveXObject(this._msxml_progid[i]);
+                    //  Object literal with conn and tId properties
+                    obj = { conn:http, tId:transactionId, xhr: true };
+                    YAHOO.log('ActiveX XHR object created for transaction ' + transactionId, 'info', 'Connection');
+                    break;
+                }
+                catch(e1){}
+            }
+        }
+        finally
+        {
+            return obj;
+        }
+    },
+
+  /**
+  * @description This method is called by asyncRequest to create a
+   * valid connection object for the transaction.  It also passes a
+   * transaction id and increments the transaction id counter.
+  * @method getConnectionObject
+  * @private
+  * @static
+  * @return {object}
+   */
+    getConnectionObject:function(t)
+    {
+        var o, tId = this._transaction_id;
+
+        try
+        {
+            if(!t){
+                o = this.createXhrObject(tId);
+            }
+            else{
+                o = {tId:tId};
+                if(t==='xdr'){
+                    o.conn = this._transport;
+                    o.xdr = true;
+                }
+                else if(t==='upload'){
+                    o.upload = true;
+                }
+            }
+
+            if(o){
+                this._transaction_id++;
+            }
+        }
+        catch(e){}
+        return o;
+    },
+
+  /**
+  * @description Method for initiating an asynchronous request via the XHR object.
+  * @method asyncRequest
+  * @public
+  * @static
+  * @param {string} method HTTP transaction method
+  * @param {string} uri Fully qualified path of resource
+  * @param {callback} callback User-defined callback function or object
+  * @param {string} postData POST body
+  * @return {object} Returns the connection object
+   */
+    asyncRequest:function(method, uri, callback, postData)
+    {
+        var o,t,args = (callback && callback.argument)?callback.argument:null;
+
+        if(this._isFileUpload){
+            t = 'upload';
+        }
+        else if(callback.xdr){
+            t = 'xdr';
+        }
+
+        o = this.getConnectionObject(t);
+        if(!o){
+            YAHOO.log('Unable to create connection object.', 'error', 'Connection');
+            return null;
+        }
+        else{
+
+            // Intialize any transaction-specific custom events, if provided.
+            if(callback && callback.customevents){
+                this.initCustomEvents(o, callback);
+            }
+
+            if(this._isFormSubmit){
+                if(this._isFileUpload){
+                    this.uploadFile(o, callback, uri, postData);
+                    return o;
+                }
+
+                // If the specified HTTP method is GET, setForm() will return an
+                // encoded string that is concatenated to the uri to
+                // create a querystring.
+                if(method.toUpperCase() == 'GET'){
+                    if(this._sFormData.length !== 0){
+                        // If the URI already contains a querystring, append an ampersand
+                        // and then concatenate _sFormData to the URI.
+                        uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
+                    }
+                }
+                else if(method.toUpperCase() == 'POST'){
+                    // If POST data exist in addition to the HTML form data,
+                    // it will be concatenated to the form data.
+                    postData = postData?this._sFormData + "&" + postData:this._sFormData;
+                }
+            }
+
+            if(method.toUpperCase() == 'GET' && (callback && callback.cache === false)){
+                // If callback.cache is defined and set to false, a
+                // timestamp value will be added to the querystring.
+                uri += ((uri.indexOf('?') == -1)?'?':'&') + "rnd=" + new Date().valueOf().toString();
+            }
+
+            // Each transaction will automatically include a custom header of
+            // "X-Requested-With: XMLHttpRequest" to identify the request as
+            // having originated from Connection Manager.
+            if(this._use_default_xhr_header){
+                if(!this._default_headers['X-Requested-With']){
+                    this.initHeader('X-Requested-With', this._default_xhr_header, true);
+                    YAHOO.log('Initialize transaction header X-Request-Header to XMLHttpRequest.', 'info', 'Connection');
+                }
+            }
+
+            //If the transaction method is POST and the POST header value is set to true
+            //or a custom value, initalize the Content-Type header to this value.
+            if((method.toUpperCase() === 'POST' && this._use_default_post_header) && this._isFormSubmit === false){
+                this.initHeader('Content-Type', this._default_post_header);
+                YAHOO.log('Initialize header Content-Type to application/x-www-form-urlencoded; UTF-8 for POST transaction.', 'info', 'Connection');
+            }
+
+            if(o.xdr){
+                this.xdr(o, method, uri, callback, postData);
+                return o;
+            }
+
+            o.conn.open(method, uri, true);
+            //Initialize all default and custom HTTP headers,
+            if(this._has_default_headers || this._has_http_headers){
+                this.setHeader(o);
+            }
+
+            this.handleReadyState(o, callback);
+            o.conn.send(postData || '');
+            YAHOO.log('Transaction ' + o.tId + ' sent.', 'info', 'Connection');
+
+            // Reset the HTML form data and state properties as
+            // soon as the data are submitted.
+            if(this._isFormSubmit === true){
+                this.resetFormState();
+            }
+
+            // Fire global custom event -- startEvent
+            this.startEvent.fire(o, args);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, args);
+            }
+
+            return o;
+        }
+    },
+
+  /**
+  * @description This method creates and subscribes custom events,
+   * specific to each transaction
+  * @method initCustomEvents
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+    initCustomEvents:function(o, callback)
+    {
+        var prop;
+        // Enumerate through callback.customevents members and bind/subscribe
+        // events that match in the _customEvents table.
+        for(prop in callback.customevents){
+            if(this._customEvents[prop][0]){
+                // Create the custom event
+                o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
+                YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' created.', 'info', 'Connection');
+
+                // Subscribe the custom event
+                o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
+                YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' subscribed.', 'info', 'Connection');
+            }
+        }
+    },
+
+  /**
+  * @description This method serves as a timer that polls the XHR object's readyState
+   * property during a transaction, instead of binding a callback to the
+   * onreadystatechange event.  Upon readyState 4, handleTransactionResponse
+   * will process the response, and the timer will be cleared.
+  * @method handleReadyState
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+
+    handleReadyState:function(o, callback)
+
+    {
+        var oConn = this,
+            args = (callback && callback.argument)?callback.argument:null;
+
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        this._poll[o.tId] = window.setInterval(
+            function(){
+                if(o.conn && o.conn.readyState === 4){
+
+                    // Clear the polling interval for the transaction
+                    // and remove the reference from _poll.
+                    window.clearInterval(oConn._poll[o.tId]);
+                    delete oConn._poll[o.tId];
+
+                    if(callback && callback.timeout){
+                        window.clearTimeout(oConn._timeOut[o.tId]);
+                        delete oConn._timeOut[o.tId];
+                    }
+
+                    // Fire global custom event -- completeEvent
+                    oConn.completeEvent.fire(o, args);
+
+                    if(o.completeEvent){
+                        // Fire transaction custom event -- completeEvent
+                        o.completeEvent.fire(o, args);
+                    }
+
+                    oConn.handleTransactionResponse(o, callback);
+                }
+            }
+        ,this._polling_interval);
+    },
+
+  /**
+  * @description This method attempts to interpret the server response and
+   * determine whether the transaction was successful, or if an error or
+   * exception was encountered.
+  * @method handleTransactionResponse
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {object} callback The user-defined callback object
+  * @param {boolean} isAbort Determines if the transaction was terminated via abort().
+  * @return {void}
+   */
+    handleTransactionResponse:function(o, callback, isAbort)
+    {
+        var httpStatus, responseObject,
+            args = (callback && callback.argument)?callback.argument:null,
+            xdrS = (o.r && o.r.statusText === 'xdr:success')?true:false,
+            xdrF = (o.r && o.r.statusText === 'xdr:failure')?true:false,
+            xdrA = isAbort;
+
+        try
+        {
+            if((o.conn.status !== undefined && o.conn.status !== 0) || xdrS){
+                // XDR requests will not have HTTP status defined. The
+                // statusText property will define the response status
+                // set by the Flash transport.
+                httpStatus = o.conn.status;
+            }
+            else if(xdrF && !xdrA){
+                // Set XDR transaction failure to a status of 0, which
+                // resolves as an HTTP failure, instead of an exception.
+                httpStatus = 0;
+            }
+            else{
+                httpStatus = 13030;
+            }
+        }
+        catch(e){
+
+             // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
+             // when the XHR object's status and statusText properties are
+             // unavailable, and a query attempt throws an exception.
+            httpStatus = 13030;
+        }
+
+        if((httpStatus >= 200 && httpStatus < 300) || httpStatus === 1223 || xdrS){
+            responseObject = o.xdr ? o.r : this.createResponseObject(o, args);
+            if(callback && callback.success){
+                if(!callback.scope){
+                    callback.success(responseObject);
+                    YAHOO.log('Success callback. HTTP code is ' + httpStatus, 'info', 'Connection');
+                }
+                else{
+                    // If a scope property is defined, the callback will be fired from
+                    // the context of the object.
+                    callback.success.apply(callback.scope, [responseObject]);
+                    YAHOO.log('Success callback with scope. HTTP code is ' + httpStatus, 'info', 'Connection');
+                }
+            }
+
+            // Fire global custom event -- successEvent
+            this.successEvent.fire(responseObject);
+
+            if(o.successEvent){
+                // Fire transaction custom event -- successEvent
+                o.successEvent.fire(responseObject);
+            }
+        }
+        else{
+            switch(httpStatus){
+                // The following cases are wininet.dll error codes that may be encountered.
+                case 12002: // Server timeout
+                case 12029: // 12029 to 12031 correspond to dropped connections.
+                case 12030:
+                case 12031:
+                case 12152: // Connection closed by server.
+                case 13030: // See above comments for variable status.
+                    // XDR transactions will not resolve to this case, since the
+                    // response object is already built in the xdr response.
+                    responseObject = this.createExceptionObject(o.tId, args, (isAbort?isAbort:false));
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                            YAHOO.log('Failure callback. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                            YAHOO.log('Failure callback with scope. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                    }
+
+                    break;
+                default:
+                    responseObject = (o.xdr) ? o.response : this.createResponseObject(o, args);
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                            YAHOO.log('Failure callback. HTTP status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                            YAHOO.log('Failure callback with scope. HTTP status code is ' + httpStatus, 'warn', 'Connection');
+                        }
+                    }
+            }
+
+            // Fire global custom event -- failureEvent
+            this.failureEvent.fire(responseObject);
+
+            if(o.failureEvent){
+                // Fire transaction custom event -- failureEvent
+                o.failureEvent.fire(responseObject);
+            }
+
+        }
+
+        this.releaseObject(o);
+        responseObject = null;
+    },
+
+  /**
+  * @description This method evaluates the server response, creates and returns the results via
+   * its properties.  Success and failure cases will differ in the response
+   * object's property values.
+  * @method createResponseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @return {object}
+   */
+    createResponseObject:function(o, callbackArg)
+    {
+        var obj = {}, headerObj = {},
+            i, headerStr, header, delimitPos;
+
+        try
+        {
+            headerStr = o.conn.getAllResponseHeaders();
+            header = headerStr.split('\n');
+            for(i=0; i<header.length; i++){
+                delimitPos = header[i].indexOf(':');
+                if(delimitPos != -1){
+                    headerObj[header[i].substring(0,delimitPos)] = YAHOO.lang.trim(header[i].substring(delimitPos+2));
+                }
+            }
+        }
+        catch(e){}
+
+        obj.tId = o.tId;
+        // Normalize IE's response to HTTP 204 when Win error 1223.
+        obj.status = (o.conn.status == 1223)?204:o.conn.status;
+        // Normalize IE's statusText to "No Content" instead of "Unknown".
+        obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
+        obj.getResponseHeader = headerObj;
+        obj.getAllResponseHeaders = headerStr;
+        obj.responseText = o.conn.responseText;
+        obj.responseXML = o.conn.responseXML;
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description If a transaction cannot be completed due to dropped or closed connections,
+   * there may be not be enough information to build a full response object.
+   * The failure callback will be fired and this specific condition can be identified
+   * by a status property value of 0.
+   *
+   * If an abort was successful, the status property will report a value of -1.
+   *
+  * @method createExceptionObject
+  * @private
+  * @static
+  * @param {int} tId The Transaction Id
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
+  * @return {object}
+   */
+    createExceptionObject:function(tId, callbackArg, isAbort)
+    {
+        var COMM_CODE = 0,
+            COMM_ERROR = 'communication failure',
+            ABORT_CODE = -1,
+            ABORT_ERROR = 'transaction aborted',
+            obj = {};
+
+        obj.tId = tId;
+        if(isAbort){
+            obj.status = ABORT_CODE;
+            obj.statusText = ABORT_ERROR;
+        }
+        else{
+            obj.status = COMM_CODE;
+            obj.statusText = COMM_ERROR;
+        }
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description Method that initializes the custom HTTP headers for the each transaction.
+  * @method initHeader
+  * @public
+  * @static
+  * @param {string} label The HTTP header label
+  * @param {string} value The HTTP header value
+  * @param {string} isDefault Determines if the specific header is a default header
+   * automatically sent with each transaction.
+  * @return {void}
+   */
+    initHeader:function(label, value, isDefault)
+    {
+        var headerObj = (isDefault)?this._default_headers:this._http_headers;
+
+        headerObj[label] = value;
+        if(isDefault){
+            this._has_default_headers = true;
+        }
+        else{
+            this._has_http_headers = true;
+        }
+    },
+
+
+  /**
+  * @description Accessor that sets the HTTP headers for each transaction.
+  * @method setHeader
+  * @private
+  * @static
+  * @param {object} o The connection object for the transaction.
+  * @return {void}
+   */
+    setHeader:function(o)
+    {
+        var prop;
+        if(this._has_default_headers){
+            for(prop in this._default_headers){
+                if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._default_headers[prop]);
+                    YAHOO.log('Default HTTP header ' + prop + ' set with value of ' + this._default_headers[prop], 'info', 'Connection');
+                }
+            }
+        }
+
+        if(this._has_http_headers){
+            for(prop in this._http_headers){
+                if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._http_headers[prop]);
+                    YAHOO.log('HTTP header ' + prop + ' set with value of ' + this._http_headers[prop], 'info', 'Connection');
+                }
+            }
+
+            this._http_headers = {};
+            this._has_http_headers = false;
+        }
+    },
+
+  /**
+  * @description Resets the default HTTP headers object
+  * @method resetDefaultHeaders
+  * @public
+  * @static
+  * @return {void}
+   */
+    resetDefaultHeaders:function(){
+        this._default_headers = {};
+        this._has_default_headers = false;
+    },
+
+  /**
+  * @description Method to terminate a transaction, if it has not reached readyState 4.
+  * @method abort
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest.
+  * @param {object} callback  User-defined callback object.
+  * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
+  * @return {boolean}
+   */
+    abort:function(o, callback, isTimeout)
+    {
+        var abortStatus,
+            args = (callback && callback.argument)?callback.argument:null;
+            o = o || {};
+
+        if(o.conn){
+            if(o.xhr){
+                if(this.isCallInProgress(o)){
+                    // Issue abort request
+                    o.conn.abort();
+
+                    window.clearInterval(this._poll[o.tId]);
+                    delete this._poll[o.tId];
+
+                    if(isTimeout){
+                        window.clearTimeout(this._timeOut[o.tId]);
+                        delete this._timeOut[o.tId];
+                    }
+
+                    abortStatus = true;
+                }
+            }
+            else if(o.xdr){
+                o.conn.abort(o.tId);
+                abortStatus = true;
+            }
+        }
+        else if(o.upload){
+            var frameId = 'yuiIO' + o.tId;
+            var io = document.getElementById(frameId);
+
+            if(io){
+                // Remove all listeners on the iframe prior to
+                // its destruction.
+                YAHOO.util.Event.removeListener(io, "load");
+                // Destroy the iframe facilitating the transaction.
+                document.body.removeChild(io);
+                YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection');
+
+                if(isTimeout){
+                    window.clearTimeout(this._timeOut[o.tId]);
+                    delete this._timeOut[o.tId];
+                }
+
+                abortStatus = true;
+            }
+        }
+        else{
+            abortStatus = false;
+        }
+
+        if(abortStatus === true){
+            // Fire global custom event -- abortEvent
+            this.abortEvent.fire(o, args);
+
+            if(o.abortEvent){
+                // Fire transaction custom event -- abortEvent
+                o.abortEvent.fire(o, args);
+            }
+
+            this.handleTransactionResponse(o, callback, true);
+            YAHOO.log('Transaction ' + o.tId + ' aborted.', 'info', 'Connection');
+        }
+
+        return abortStatus;
+    },
+
+  /**
+  * @description Determines if the transaction is still being processed.
+  * @method isCallInProgress
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest
+  * @return {boolean}
+   */
+    isCallInProgress:function(o)
+    {
+        o = o || {};
+        // if the XHR object assigned to the transaction has not been dereferenced,
+        // then check its readyState status.  Otherwise, return false.
+        if(o.xhr && o.conn){
+            return o.conn.readyState !== 4 && o.conn.readyState !== 0;
+        }
+        else if(o.xdr && o.conn){
+            return o.conn.isCallInProgress(o.tId);
+        }
+        else if(o.upload === true){
+            return document.getElementById('yuiIO' + o.tId)?true:false;
+        }
+        else{
+            return false;
+        }
+    },
+
+  /**
+  * @description Dereference the XHR instance and the connection object after the transaction is completed.
+  * @method releaseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @return {void}
+   */
+    releaseObject:function(o)
+    {
+        if(o && o.conn){
+            //dereference the XHR instance.
+            o.conn = null;
+
+            YAHOO.log('Connection object for transaction ' + o.tId + ' destroyed.', 'info', 'Connection');
+
+            //dereference the connection object.
+            o = null;
+        }
+    }
+};
+
+YAHOO.register("connection_core", YAHOO.util.Connect, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/connection/connection_core-min.js
===================================================================
--- trunk/include/yui/connection/connection_core-min.js	(nonexistent)
+++ trunk/include/yui/connection/connection_core-min.js	(revision 2)
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var D,A,B;try{A=new XMLHttpRequest();D={conn:A,tId:F,xhr:true};}catch(C){for(B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);D={conn:A,tId:F,xhr:true};break;}catch(E){}}}finally{return D;}},getConnectionObject:function(A){var C,D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={tId:D};if(A==="xdr"){C.conn=this._transport;C.xdr=true;}else{if(A==="upload"){C.upload=true;}}}if(C){this._transaction_id++;}}catch(B){}return C;},asyncRequest:function(G,D,F,A){var E,C,B=(F&&F.argument)?F.argument:null;if(this._isFileUpload){C="upload";}else{if(F.xdr){C="xdr";}}E=this.getConnectionObject(C);if(!E){return null;}else{if(F&&F.customevents){this.initCustomEvents(E,F);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(E,F,D,A);return E;}if(G.toUpperCase()=="GET"){if(this._sFormData.length!==0){D+=((D.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(G.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(G.toUpperCase()=="GET"&&(F&&F.cache===false)){D+=((D.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((G.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(E.xdr){this.xdr(E,G,D,F,A);return E;}E.conn.open(G,D,true);if(this._has_default_headers||this._has_http_headers){this.setHeader(E);}this.handleReadyState(E,F);E.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(E,B);if(E.startEvent){E.startEvent.fire(E,B);}return E;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this,A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(B,I,D){var E,A,G=(I&&I.argument)?I.argument:null,C=(B.r&&B.r.statusText==="xdr:success")?true:false,H=(B.r&&B.r.statusText==="xdr:failure")?true:false,J=D;try{if((B.conn.status!==undefined&&B.conn.status!==0)||C){E=B.conn.status;}else{if(H&&!J){E=0;}else{E=13030;}}}catch(F){E=13030;}if((E>=200&&E<300)||E===1223||C){A=B.xdr?B.r:this.createResponseObject(B,G);if(I&&I.success){if(!I.scope){I.success(A);}else{I.success.apply(I.scope,[A]);}}this.successEvent.fire(A);if(B.successEvent){B.successEvent.fire(A);}}else{switch(E){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:A=this.createExceptionObject(B.tId,G,(D?D:false));if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}break;default:A=(B.xdr)?B.response:this.createResponseObject(B,G);if(I&&I.failure){if(!I.scope){I.failure(A);}else{I.failure.apply(I.scope,[A]);}}}this.failureEvent.fire(A);if(B.failureEvent){B.failureEvent.fire(A);}}this.releaseObject(B);A=null;},createResponseObject:function(A,G){var D={},I={},E,C,F,B;try{C=A.conn.getAllResponseHeaders();F=C.split("\n");for(E=0;E<F.length;E++){B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=YAHOO.lang.trim(F[E].substring(B+2));}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0,G="communication failure",C=-1,B="transaction aborted",E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);
+}}this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){this._default_headers={};this._has_default_headers=false;},abort:function(E,G,A){var D,B=(G&&G.argument)?G.argument:null;E=E||{};if(E.conn){if(E.xhr){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E.xdr){E.conn.abort(E.tId);D=true;}}}else{if(E.upload){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(A){A=A||{};if(A.xhr&&A.conn){return A.conn.readyState!==4&&A.conn.readyState!==0;}else{if(A.xdr&&A.conn){return A.conn.isCallInProgress(A.tId);}else{if(A.upload===true){return document.getElementById("yuiIO"+A.tId)?true:false;}else{return false;}}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection_core",YAHOO.util.Connect,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
Index: trunk/include/yui/connection/connection_core.js
===================================================================
--- trunk/include/yui/connection/connection_core.js	(nonexistent)
+++ trunk/include/yui/connection/connection_core.js	(revision 2)
@@ -0,0 +1,957 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The Connection Manager provides a simplified interface to the XMLHttpRequest
+ * object.  It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
+ * interactive states and server response, returning the results to a pre-defined
+ * callback you create.
+ *
+ * @namespace YAHOO.util
+ * @module connection
+ * @requires yahoo
+ * @requires event
+ */
+
+/**
+ * The Connection Manager singleton provides methods for creating and managing
+ * asynchronous transactions.
+ *
+ * @class Connect
+ */
+
+YAHOO.util.Connect =
+{
+  /**
+  * @description Array of MSFT ActiveX ids for XMLHttpRequest.
+  * @property _msxml_progid
+  * @private
+  * @static
+  * @type array
+   */
+    _msxml_progid:[
+        'Microsoft.XMLHTTP',
+        'MSXML2.XMLHTTP.3.0',
+        'MSXML2.XMLHTTP'
+        ],
+
+  /**
+  * @description Object literal of HTTP header(s)
+  * @property _http_header
+  * @private
+  * @static
+  * @type object
+   */
+    _http_headers:{},
+
+  /**
+  * @description Determines if HTTP headers are set.
+  * @property _has_http_headers
+  * @private
+  * @static
+  * @type boolean
+   */
+    _has_http_headers:false,
+
+ /**
+ * @description Determines if a default header of
+  * Content-Type of 'application/x-www-form-urlencoded'
+  * will be added to any client HTTP headers sent for POST
+  * transactions.
+ * @property _use_default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_post_header:true,
+
+ /**
+ * @description The default header used for POST transactions.
+ * @property _default_post_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
+
+ /**
+ * @description The default header used for transactions involving the
+  * use of HTML forms.
+ * @property _default_form_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_form_header:'application/x-www-form-urlencoded',
+
+ /**
+ * @description Determines if a default header of
+  * 'X-Requested-With: XMLHttpRequest'
+  * will be added to each transaction.
+ * @property _use_default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _use_default_xhr_header:true,
+
+ /**
+ * @description The default header value for the label
+  * "X-Requested-With".  This is sent with each
+  * transaction, by default, to identify the
+  * request as being made by YUI Connection Manager.
+ * @property _default_xhr_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_xhr_header:'XMLHttpRequest',
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _has_default_headers:true,
+
+ /**
+ * @description Determines if custom, default headers
+  * are set for each transaction.
+ * @property _has_default_header
+ * @private
+ * @static
+ * @type boolean
+  */
+    _default_headers:{},
+
+ /**
+ * @description Collection of polling references to the polling mechanism in handleReadyState.
+ * @property _poll
+ * @private
+ * @static
+ * @type object
+  */
+    _poll:{},
+
+ /**
+ * @description Queue of timeout values for each transaction callback with a defined timeout value.
+ * @property _timeOut
+ * @private
+ * @static
+ * @type object
+  */
+    _timeOut:{},
+
+  /**
+  * @description The polling frequency, in milliseconds, for HandleReadyState.
+   * when attempting to determine a transaction's XHR readyState.
+   * The default is 50 milliseconds.
+  * @property _polling_interval
+  * @private
+  * @static
+  * @type int
+   */
+     _polling_interval:50,
+
+  /**
+  * @description A transaction counter that increments the transaction id for each transaction.
+  * @property _transaction_id
+  * @private
+  * @static
+  * @type int
+   */
+     _transaction_id:0,
+
+  /**
+  * @description Custom event that fires at the start of a transaction
+  * @property startEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    startEvent: new YAHOO.util.CustomEvent('start'),
+
+  /**
+  * @description Custom event that fires when a transaction response has completed.
+  * @property completeEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    completeEvent: new YAHOO.util.CustomEvent('complete'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 2xx range.
+  * @property successEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    successEvent: new YAHOO.util.CustomEvent('success'),
+
+  /**
+  * @description Custom event that fires when handleTransactionResponse() determines a
+   * response in the HTTP 4xx/5xx range.
+  * @property failureEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    failureEvent: new YAHOO.util.CustomEvent('failure'),
+
+  /**
+  * @description Custom event that fires when a transaction is successfully aborted.
+  * @property abortEvent
+  * @private
+  * @static
+  * @type CustomEvent
+   */
+    abortEvent: new YAHOO.util.CustomEvent('abort'),
+
+  /**
+  * @description A reference table that maps callback custom events members to its specific
+   * event name.
+  * @property _customEvents
+  * @private
+  * @static
+  * @type object
+   */
+    _customEvents:
+    {
+        onStart:['startEvent', 'start'],
+        onComplete:['completeEvent', 'complete'],
+        onSuccess:['successEvent', 'success'],
+        onFailure:['failureEvent', 'failure'],
+        onUpload:['uploadEvent', 'upload'],
+        onAbort:['abortEvent', 'abort']
+    },
+
+  /**
+  * @description Member to add an ActiveX id to the existing xml_progid array.
+   * In the event(unlikely) a new ActiveX id is introduced, it can be added
+   * without internal code modifications.
+  * @method setProgId
+  * @public
+  * @static
+  * @param {string} id The ActiveX id to be added to initialize the XHR object.
+  * @return void
+   */
+    setProgId:function(id)
+    {
+        this._msxml_progid.unshift(id);
+    },
+
+  /**
+  * @description Member to override the default POST header.
+  * @method setDefaultPostHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultPostHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_post_header = b;
+        }
+        else if(typeof b == 'boolean'){
+            this._use_default_post_header = b;
+        }
+    },
+
+  /**
+  * @description Member to override the default transaction header..
+  * @method setDefaultXhrHeader
+  * @public
+  * @static
+  * @param {boolean} b Set and use default header - true or false .
+  * @return void
+   */
+    setDefaultXhrHeader:function(b)
+    {
+        if(typeof b == 'string'){
+            this._default_xhr_header = b;
+        }
+        else{
+            this._use_default_xhr_header = b;
+        }
+    },
+
+  /**
+  * @description Member to modify the default polling interval.
+  * @method setPollingInterval
+  * @public
+  * @static
+  * @param {int} i The polling interval in milliseconds.
+  * @return void
+   */
+    setPollingInterval:function(i)
+    {
+        if(typeof i == 'number' && isFinite(i)){
+            this._polling_interval = i;
+        }
+    },
+
+  /**
+  * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
+   * the XMLHttpRequest instance and the transaction id.
+  * @method createXhrObject
+  * @private
+  * @static
+  * @param {int} transactionId Property containing the transaction id for this transaction.
+  * @return object
+   */
+    createXhrObject:function(transactionId)
+    {
+        var obj,http,i;
+        try
+        {
+            // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
+            http = new XMLHttpRequest();
+            //  Object literal with http and tId properties
+            obj = { conn:http, tId:transactionId, xhr: true };
+        }
+        catch(e)
+        {
+            for(i=0; i<this._msxml_progid.length; ++i){
+                try
+                {
+                    // Instantiates XMLHttpRequest for IE and assign to http
+                    http = new ActiveXObject(this._msxml_progid[i]);
+                    //  Object literal with conn and tId properties
+                    obj = { conn:http, tId:transactionId, xhr: true };
+                    break;
+                }
+                catch(e1){}
+            }
+        }
+        finally
+        {
+            return obj;
+        }
+    },
+
+  /**
+  * @description This method is called by asyncRequest to create a
+   * valid connection object for the transaction.  It also passes a
+   * transaction id and increments the transaction id counter.
+  * @method getConnectionObject
+  * @private
+  * @static
+  * @return {object}
+   */
+    getConnectionObject:function(t)
+    {
+        var o, tId = this._transaction_id;
+
+        try
+        {
+            if(!t){
+                o = this.createXhrObject(tId);
+            }
+            else{
+                o = {tId:tId};
+                if(t==='xdr'){
+                    o.conn = this._transport;
+                    o.xdr = true;
+                }
+                else if(t==='upload'){
+                    o.upload = true;
+                }
+            }
+
+            if(o){
+                this._transaction_id++;
+            }
+        }
+        catch(e){}
+        return o;
+    },
+
+  /**
+  * @description Method for initiating an asynchronous request via the XHR object.
+  * @method asyncRequest
+  * @public
+  * @static
+  * @param {string} method HTTP transaction method
+  * @param {string} uri Fully qualified path of resource
+  * @param {callback} callback User-defined callback function or object
+  * @param {string} postData POST body
+  * @return {object} Returns the connection object
+   */
+    asyncRequest:function(method, uri, callback, postData)
+    {
+        var o,t,args = (callback && callback.argument)?callback.argument:null;
+
+        if(this._isFileUpload){
+            t = 'upload';
+        }
+        else if(callback.xdr){
+            t = 'xdr';
+        }
+
+        o = this.getConnectionObject(t);
+        if(!o){
+            return null;
+        }
+        else{
+
+            // Intialize any transaction-specific custom events, if provided.
+            if(callback && callback.customevents){
+                this.initCustomEvents(o, callback);
+            }
+
+            if(this._isFormSubmit){
+                if(this._isFileUpload){
+                    this.uploadFile(o, callback, uri, postData);
+                    return o;
+                }
+
+                // If the specified HTTP method is GET, setForm() will return an
+                // encoded string that is concatenated to the uri to
+                // create a querystring.
+                if(method.toUpperCase() == 'GET'){
+                    if(this._sFormData.length !== 0){
+                        // If the URI already contains a querystring, append an ampersand
+                        // and then concatenate _sFormData to the URI.
+                        uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
+                    }
+                }
+                else if(method.toUpperCase() == 'POST'){
+                    // If POST data exist in addition to the HTML form data,
+                    // it will be concatenated to the form data.
+                    postData = postData?this._sFormData + "&" + postData:this._sFormData;
+                }
+            }
+
+            if(method.toUpperCase() == 'GET' && (callback && callback.cache === false)){
+                // If callback.cache is defined and set to false, a
+                // timestamp value will be added to the querystring.
+                uri += ((uri.indexOf('?') == -1)?'?':'&') + "rnd=" + new Date().valueOf().toString();
+            }
+
+            // Each transaction will automatically include a custom header of
+            // "X-Requested-With: XMLHttpRequest" to identify the request as
+            // having originated from Connection Manager.
+            if(this._use_default_xhr_header){
+                if(!this._default_headers['X-Requested-With']){
+                    this.initHeader('X-Requested-With', this._default_xhr_header, true);
+                }
+            }
+
+            //If the transaction method is POST and the POST header value is set to true
+            //or a custom value, initalize the Content-Type header to this value.
+            if((method.toUpperCase() === 'POST' && this._use_default_post_header) && this._isFormSubmit === false){
+                this.initHeader('Content-Type', this._default_post_header);
+            }
+
+            if(o.xdr){
+                this.xdr(o, method, uri, callback, postData);
+                return o;
+            }
+
+            o.conn.open(method, uri, true);
+            //Initialize all default and custom HTTP headers,
+            if(this._has_default_headers || this._has_http_headers){
+                this.setHeader(o);
+            }
+
+            this.handleReadyState(o, callback);
+            o.conn.send(postData || '');
+
+            // Reset the HTML form data and state properties as
+            // soon as the data are submitted.
+            if(this._isFormSubmit === true){
+                this.resetFormState();
+            }
+
+            // Fire global custom event -- startEvent
+            this.startEvent.fire(o, args);
+
+            if(o.startEvent){
+                // Fire transaction custom event -- startEvent
+                o.startEvent.fire(o, args);
+            }
+
+            return o;
+        }
+    },
+
+  /**
+  * @description This method creates and subscribes custom events,
+   * specific to each transaction
+  * @method initCustomEvents
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+    initCustomEvents:function(o, callback)
+    {
+        var prop;
+        // Enumerate through callback.customevents members and bind/subscribe
+        // events that match in the _customEvents table.
+        for(prop in callback.customevents){
+            if(this._customEvents[prop][0]){
+                // Create the custom event
+                o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
+
+                // Subscribe the custom event
+                o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
+            }
+        }
+    },
+
+  /**
+  * @description This method serves as a timer that polls the XHR object's readyState
+   * property during a transaction, instead of binding a callback to the
+   * onreadystatechange event.  Upon readyState 4, handleTransactionResponse
+   * will process the response, and the timer will be cleared.
+  * @method handleReadyState
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callback} callback The user-defined callback object
+  * @return {void}
+   */
+
+    handleReadyState:function(o, callback)
+
+    {
+        var oConn = this,
+            args = (callback && callback.argument)?callback.argument:null;
+
+        if(callback && callback.timeout){
+            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
+        }
+
+        this._poll[o.tId] = window.setInterval(
+            function(){
+                if(o.conn && o.conn.readyState === 4){
+
+                    // Clear the polling interval for the transaction
+                    // and remove the reference from _poll.
+                    window.clearInterval(oConn._poll[o.tId]);
+                    delete oConn._poll[o.tId];
+
+                    if(callback && callback.timeout){
+                        window.clearTimeout(oConn._timeOut[o.tId]);
+                        delete oConn._timeOut[o.tId];
+                    }
+
+                    // Fire global custom event -- completeEvent
+                    oConn.completeEvent.fire(o, args);
+
+                    if(o.completeEvent){
+                        // Fire transaction custom event -- completeEvent
+                        o.completeEvent.fire(o, args);
+                    }
+
+                    oConn.handleTransactionResponse(o, callback);
+                }
+            }
+        ,this._polling_interval);
+    },
+
+  /**
+  * @description This method attempts to interpret the server response and
+   * determine whether the transaction was successful, or if an error or
+   * exception was encountered.
+  * @method handleTransactionResponse
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {object} callback The user-defined callback object
+  * @param {boolean} isAbort Determines if the transaction was terminated via abort().
+  * @return {void}
+   */
+    handleTransactionResponse:function(o, callback, isAbort)
+    {
+        var httpStatus, responseObject,
+            args = (callback && callback.argument)?callback.argument:null,
+            xdrS = (o.r && o.r.statusText === 'xdr:success')?true:false,
+            xdrF = (o.r && o.r.statusText === 'xdr:failure')?true:false,
+            xdrA = isAbort;
+
+        try
+        {
+            if((o.conn.status !== undefined && o.conn.status !== 0) || xdrS){
+                // XDR requests will not have HTTP status defined. The
+                // statusText property will define the response status
+                // set by the Flash transport.
+                httpStatus = o.conn.status;
+            }
+            else if(xdrF && !xdrA){
+                // Set XDR transaction failure to a status of 0, which
+                // resolves as an HTTP failure, instead of an exception.
+                httpStatus = 0;
+            }
+            else{
+                httpStatus = 13030;
+            }
+        }
+        catch(e){
+
+             // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
+             // when the XHR object's status and statusText properties are
+             // unavailable, and a query attempt throws an exception.
+            httpStatus = 13030;
+        }
+
+        if((httpStatus >= 200 && httpStatus < 300) || httpStatus === 1223 || xdrS){
+            responseObject = o.xdr ? o.r : this.createResponseObject(o, args);
+            if(callback && callback.success){
+                if(!callback.scope){
+                    callback.success(responseObject);
+                }
+                else{
+                    // If a scope property is defined, the callback will be fired from
+                    // the context of the object.
+                    callback.success.apply(callback.scope, [responseObject]);
+                }
+            }
+
+            // Fire global custom event -- successEvent
+            this.successEvent.fire(responseObject);
+
+            if(o.successEvent){
+                // Fire transaction custom event -- successEvent
+                o.successEvent.fire(responseObject);
+            }
+        }
+        else{
+            switch(httpStatus){
+                // The following cases are wininet.dll error codes that may be encountered.
+                case 12002: // Server timeout
+                case 12029: // 12029 to 12031 correspond to dropped connections.
+                case 12030:
+                case 12031:
+                case 12152: // Connection closed by server.
+                case 13030: // See above comments for variable status.
+                    // XDR transactions will not resolve to this case, since the
+                    // response object is already built in the xdr response.
+                    responseObject = this.createExceptionObject(o.tId, args, (isAbort?isAbort:false));
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+
+                    break;
+                default:
+                    responseObject = (o.xdr) ? o.response : this.createResponseObject(o, args);
+                    if(callback && callback.failure){
+                        if(!callback.scope){
+                            callback.failure(responseObject);
+                        }
+                        else{
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+            }
+
+            // Fire global custom event -- failureEvent
+            this.failureEvent.fire(responseObject);
+
+            if(o.failureEvent){
+                // Fire transaction custom event -- failureEvent
+                o.failureEvent.fire(responseObject);
+            }
+
+        }
+
+        this.releaseObject(o);
+        responseObject = null;
+    },
+
+  /**
+  * @description This method evaluates the server response, creates and returns the results via
+   * its properties.  Success and failure cases will differ in the response
+   * object's property values.
+  * @method createResponseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @return {object}
+   */
+    createResponseObject:function(o, callbackArg)
+    {
+        var obj = {}, headerObj = {},
+            i, headerStr, header, delimitPos;
+
+        try
+        {
+            headerStr = o.conn.getAllResponseHeaders();
+            header = headerStr.split('\n');
+            for(i=0; i<header.length; i++){
+                delimitPos = header[i].indexOf(':');
+                if(delimitPos != -1){
+                    headerObj[header[i].substring(0,delimitPos)] = YAHOO.lang.trim(header[i].substring(delimitPos+2));
+                }
+            }
+        }
+        catch(e){}
+
+        obj.tId = o.tId;
+        // Normalize IE's response to HTTP 204 when Win error 1223.
+        obj.status = (o.conn.status == 1223)?204:o.conn.status;
+        // Normalize IE's statusText to "No Content" instead of "Unknown".
+        obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
+        obj.getResponseHeader = headerObj;
+        obj.getAllResponseHeaders = headerStr;
+        obj.responseText = o.conn.responseText;
+        obj.responseXML = o.conn.responseXML;
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description If a transaction cannot be completed due to dropped or closed connections,
+   * there may be not be enough information to build a full response object.
+   * The failure callback will be fired and this specific condition can be identified
+   * by a status property value of 0.
+   *
+   * If an abort was successful, the status property will report a value of -1.
+   *
+  * @method createExceptionObject
+  * @private
+  * @static
+  * @param {int} tId The Transaction Id
+  * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
+  * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
+  * @return {object}
+   */
+    createExceptionObject:function(tId, callbackArg, isAbort)
+    {
+        var COMM_CODE = 0,
+            COMM_ERROR = 'communication failure',
+            ABORT_CODE = -1,
+            ABORT_ERROR = 'transaction aborted',
+            obj = {};
+
+        obj.tId = tId;
+        if(isAbort){
+            obj.status = ABORT_CODE;
+            obj.statusText = ABORT_ERROR;
+        }
+        else{
+            obj.status = COMM_CODE;
+            obj.statusText = COMM_ERROR;
+        }
+
+        if(callbackArg){
+            obj.argument = callbackArg;
+        }
+
+        return obj;
+    },
+
+  /**
+  * @description Method that initializes the custom HTTP headers for the each transaction.
+  * @method initHeader
+  * @public
+  * @static
+  * @param {string} label The HTTP header label
+  * @param {string} value The HTTP header value
+  * @param {string} isDefault Determines if the specific header is a default header
+   * automatically sent with each transaction.
+  * @return {void}
+   */
+    initHeader:function(label, value, isDefault)
+    {
+        var headerObj = (isDefault)?this._default_headers:this._http_headers;
+
+        headerObj[label] = value;
+        if(isDefault){
+            this._has_default_headers = true;
+        }
+        else{
+            this._has_http_headers = true;
+        }
+    },
+
+
+  /**
+  * @description Accessor that sets the HTTP headers for each transaction.
+  * @method setHeader
+  * @private
+  * @static
+  * @param {object} o The connection object for the transaction.
+  * @return {void}
+   */
+    setHeader:function(o)
+    {
+        var prop;
+        if(this._has_default_headers){
+            for(prop in this._default_headers){
+                if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._default_headers[prop]);
+                }
+            }
+        }
+
+        if(this._has_http_headers){
+            for(prop in this._http_headers){
+                if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
+                    o.conn.setRequestHeader(prop, this._http_headers[prop]);
+                }
+            }
+
+            this._http_headers = {};
+            this._has_http_headers = false;
+        }
+    },
+
+  /**
+  * @description Resets the default HTTP headers object
+  * @method resetDefaultHeaders
+  * @public
+  * @static
+  * @return {void}
+   */
+    resetDefaultHeaders:function(){
+        this._default_headers = {};
+        this._has_default_headers = false;
+    },
+
+  /**
+  * @description Method to terminate a transaction, if it has not reached readyState 4.
+  * @method abort
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest.
+  * @param {object} callback  User-defined callback object.
+  * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
+  * @return {boolean}
+   */
+    abort:function(o, callback, isTimeout)
+    {
+        var abortStatus,
+            args = (callback && callback.argument)?callback.argument:null;
+            o = o || {};
+
+        if(o.conn){
+            if(o.xhr){
+                if(this.isCallInProgress(o)){
+                    // Issue abort request
+                    o.conn.abort();
+
+                    window.clearInterval(this._poll[o.tId]);
+                    delete this._poll[o.tId];
+
+                    if(isTimeout){
+                        window.clearTimeout(this._timeOut[o.tId]);
+                        delete this._timeOut[o.tId];
+                    }
+
+                    abortStatus = true;
+                }
+            }
+            else if(o.xdr){
+                o.conn.abort(o.tId);
+                abortStatus = true;
+            }
+        }
+        else if(o.upload){
+            var frameId = 'yuiIO' + o.tId;
+            var io = document.getElementById(frameId);
+
+            if(io){
+                // Remove all listeners on the iframe prior to
+                // its destruction.
+                YAHOO.util.Event.removeListener(io, "load");
+                // Destroy the iframe facilitating the transaction.
+                document.body.removeChild(io);
+
+                if(isTimeout){
+                    window.clearTimeout(this._timeOut[o.tId]);
+                    delete this._timeOut[o.tId];
+                }
+
+                abortStatus = true;
+            }
+        }
+        else{
+            abortStatus = false;
+        }
+
+        if(abortStatus === true){
+            // Fire global custom event -- abortEvent
+            this.abortEvent.fire(o, args);
+
+            if(o.abortEvent){
+                // Fire transaction custom event -- abortEvent
+                o.abortEvent.fire(o, args);
+            }
+
+            this.handleTransactionResponse(o, callback, true);
+        }
+
+        return abortStatus;
+    },
+
+  /**
+  * @description Determines if the transaction is still being processed.
+  * @method isCallInProgress
+  * @public
+  * @static
+  * @param {object} o The connection object returned by asyncRequest
+  * @return {boolean}
+   */
+    isCallInProgress:function(o)
+    {
+        o = o || {};
+        // if the XHR object assigned to the transaction has not been dereferenced,
+        // then check its readyState status.  Otherwise, return false.
+        if(o.xhr && o.conn){
+            return o.conn.readyState !== 4 && o.conn.readyState !== 0;
+        }
+        else if(o.xdr && o.conn){
+            return o.conn.isCallInProgress(o.tId);
+        }
+        else if(o.upload === true){
+            return document.getElementById('yuiIO' + o.tId)?true:false;
+        }
+        else{
+            return false;
+        }
+    },
+
+  /**
+  * @description Dereference the XHR instance and the connection object after the transaction is completed.
+  * @method releaseObject
+  * @private
+  * @static
+  * @param {object} o The connection object
+  * @return {void}
+   */
+    releaseObject:function(o)
+    {
+        if(o && o.conn){
+            //dereference the XHR instance.
+            o.conn = null;
+
+
+            //dereference the connection object.
+            o = null;
+        }
+    }
+};
+
+YAHOO.register("connection_core", YAHOO.util.Connect, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/connection/index.php
===================================================================
--- trunk/include/yui/connection/index.php	(nonexistent)
+++ trunk/include/yui/connection/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         yui
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version          $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/connection/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/dom/README
===================================================================
--- trunk/include/yui/dom/README	(nonexistent)
+++ trunk/include/yui/dom/README	(revision 2)
@@ -0,0 +1,125 @@
+Dom Release Notes
+
+** Known Issues **
+* margin/padding/borders on HTML element cause getXY to misreport
+* margin/borders on BODY element may cause getXY to misreport
+* Fixed postioning causes getXY to misreport in some cases
+
+----------------------------
+
+*** version 2.4.1 ***
+
+No change
+
+*** version 2.4.0 ***
+* no longer accounting for safari body margin when offsetParent == body
+* isAncestor and inDocument no longer use batch
+* added getClientRegion()
+
+*** version 2.3.1 ***
+* allow batch() to work on array-like object
+* return null from Dom.get(undefined)
+
+*** version 2.3.0 ***
+* added getAncestorBy methods
+* added getChildren methods
+* added getSibling methods
+* trimming added for class mgmt methods
+* fixed getXY inside table for Opera 
+
+*** version 2.3.0 ***
+* added getAncestorBy methods
+* added getChildren methods
+* added getSibling methods
+* trimming added for class mgmt methods
+* fixed getXY inside table for Opera 
+
+*** version 2.2.2 ***
+
+* fixed getXY scroll regression
+
+*** version 2.2.1 ***
+* fixed toCamel propertyCache used by set/getStyle
+* added set/getStyle support for float property
+* optimized get() for common use case
+* fixed getXY for safari when el has absolute ancestors
+* using className property instead of string literal for class mgmt methods
+* added getXY/getRegion support for body element
+
+*** version 2.2.0 ***
+* no change
+
+
+*** version 0.12.2 ***
+* no change
+
+*** version 0.12.1 ***
+
+* getElementsByClassName no longer reverts to document when "root" not found
+* setXY no longer makes a second call to getXY unless noRetry is false
+* minified version no longer strips line breaks
+
+*** version 0.12.0 ***
+
+* fixed getXY for IE null parent
+* branching set/getStyle at load time instead of run time 
+
+*** version 0.11.3 ***
+
+* fixed getX and getY returning incorrect values for collections 
+* fixed getXY incorrectly calculated for Opera inline elements
+* fixed isAncestor failure in safari when 2nd arg is document.documentElement
+* fixed infinite loop in replaceClass when oldClassName == newClassName 
+* getDocumentWidth no longer includes scrollbars 
+
+
+*** version 0.11.2 ***
+* limit depth of parent.document crawl to 1 for getXY
+* test offsetParent instead of parentNode for getXY
+* return null if no el fo r get
+* just addClass if no class to replace for replaceClass
+
+
+*** version 0.11.1 ***
+
+* return null if el is null for get()
+* test offsetParent rather than parentNode for getXY()
+* limit depth of parent.document crawl for IE getXY() to 1
+* if no oldClassName to replace, just addClass for replaceClass()
+
+
+*** version 0.11.0 ***
+* Work around Opera 9 broken currentStyle
+* Removed timeout wrapper from setXY retry
+* Tagname tests now case-insensitive
+* Internal "this" references changed to allow for method shorthand
+* get/setStyle now accept both camel and hyphen case
+* Gecko reverted to crawling offsets for getXY
+ 
+
+*** version 0.10.0 ***
+
+* Safari now fails gracefully when querying computedStyle of an unavailable element 
+
+* Class management functions added (hasClass, addClass, removeClass, replaceClass, getElementsByClassName) 
+
+* All methods that accept HTMLElements or IDs now also accept arrays of HTMLElements and/or IDs
+
+* GenerateId method added
+
+* isAncestor method added
+
+* inDocument method added
+
+* getElementsBy method added
+
+* batch method added
+
+* getClientHeight/Width deprecated in favor of getViewportHeight/Width
+
+* getDocumentHeight/Width methods added 
+
+*** version 0.9.0 ***
+
+* Initial release
+
Index: trunk/include/yui/dom/dom-debug.js
===================================================================
--- trunk/include/yui/dom/dom-debug.js	(nonexistent)
+++ trunk/include/yui/dom/dom-debug.js	(revision 2)
@@ -0,0 +1,1872 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The dom module provides helper methods for manipulating Dom elements.
+ * @module dom
+ *
+ */
+
+(function() {
+    // for use with generateId (global to save state if Dom is overwritten)
+    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;
+
+    // internal shorthand
+    var Y = YAHOO.util,
+        lang = YAHOO.lang,
+        UA = YAHOO.env.ua,
+        trim = YAHOO.lang.trim,
+        propertyCache = {}, // for faster hyphen converts
+        reCache = {}, // cache className regexes
+        RE_TABLE = /^t(?:able|d|h)$/i, // for _calcBorders
+        RE_COLOR = /color$/i,
+
+        // DOM aliases 
+        document = window.document,     
+        documentElement = document.documentElement,
+
+        // string constants
+        OWNER_DOCUMENT = 'ownerDocument',
+        DEFAULT_VIEW = 'defaultView',
+        DOCUMENT_ELEMENT = 'documentElement',
+        COMPAT_MODE = 'compatMode',
+        OFFSET_LEFT = 'offsetLeft',
+        OFFSET_TOP = 'offsetTop',
+        OFFSET_PARENT = 'offsetParent',
+        PARENT_NODE = 'parentNode',
+        NODE_TYPE = 'nodeType',
+        TAG_NAME = 'tagName',
+        SCROLL_LEFT = 'scrollLeft',
+        SCROLL_TOP = 'scrollTop',
+        GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
+        GET_COMPUTED_STYLE = 'getComputedStyle',
+        CURRENT_STYLE = 'currentStyle',
+        CSS1_COMPAT = 'CSS1Compat',
+        _BACK_COMPAT = 'BackCompat',
+        _CLASS = 'class', // underscore due to reserved word
+        CLASS_NAME = 'className',
+        EMPTY = '',
+        SPACE = ' ',
+        C_START = '(?:^|\\s)',
+        C_END = '(?= |$)',
+        G = 'g',
+        POSITION = 'position',
+        FIXED = 'fixed',
+        RELATIVE = 'relative',
+        LEFT = 'left',
+        TOP = 'top',
+        MEDIUM = 'medium',
+        BORDER_LEFT_WIDTH = 'borderLeftWidth',
+        BORDER_TOP_WIDTH = 'borderTopWidth',
+    
+    // brower detection
+        isOpera = UA.opera,
+        isSafari = UA.webkit, 
+        isGecko = UA.gecko, 
+        isIE = UA.ie; 
+    
+    /**
+     * Provides helper methods for DOM elements.
+    * @namespace YAHOO.util
+    * @class Dom
+    * @requires yahoo, event
+     */
+    Y.Dom = {
+        CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
+            'for': 'htmlFor',
+            'class': CLASS_NAME
+        } : { // w3c
+            'htmlFor': 'for',
+            'className': _CLASS
+        },
+
+        DOT_ATTRIBUTES: {},
+
+        /**
+         * Returns an HTMLElement reference.
+        * @method get
+        * @param {String | HTMLElement |Array} el Accepts a string to use as an ID for getting a DOM reference, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements.
+         */
+        get: function(el) {
+            var id, nodes, c, i, len, attr;
+
+            if (el) {
+                if (el[NODE_TYPE] || el.item) { // Node, or NodeList
+                    return el;
+                }
+
+                if (typeof el === 'string') { // id
+                    id = el;
+                    el = document.getElementById(el);
+                    attr = (el) ? el.attributes : null;
+                    if (el && attr && attr.id && attr.id.value === id) { // IE: avoid false match on "name" attribute
+                        return el;
+                    } else if (el && document.all) { // filter by name
+                        el = null;
+                        nodes = document.all[id];
+                        for (i = 0, len = nodes.length; i < len; ++i) {
+                            if (nodes[i].id === id) {
+                                return nodes[i];
+                            }
+                        }
+                    }
+                    return el;
+                }
+                
+                if (YAHOO.util.Element && el instanceof YAHOO.util.Element) {
+                    el = el.get('element');
+                }
+
+                if ('length' in el) { // array-like 
+                    c = [];
+                    for (i = 0, len = el.length; i < len; ++i) {
+                        c[c.length] = Y.Dom.get(el[i]);
+                    }
+                    
+                    return c;
+                }
+
+                return el; // some other object, just pass it back
+            }
+
+            return null;
+        },
+    
+        getComputedStyle: function(el, property) {
+            if (window[GET_COMPUTED_STYLE]) {
+                return el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null)[property];
+            } else if (el[CURRENT_STYLE]) {
+                return Y.Dom.IE_ComputedStyle.get(el, property);
+            }
+        },
+
+        /**
+         * Normalizes currentStyle and ComputedStyle.
+        * @method getStyle
+        * @param {String | HTMLElement |Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {String} property The style property whose value is returned.
+        * @return {String | Array} The current value of the style property for the element(s).
+         */
+        getStyle: function(el, property) {
+            return Y.Dom.batch(el, Y.Dom._getStyle, property);
+        },
+
+        // branching at load instead of runtime
+        _getStyle: function() {
+            if (window[GET_COMPUTED_STYLE]) { // W3C DOM method
+                return function(el, property) {
+                    property = (property === 'float') ? property = 'cssFloat' :
+                            Y.Dom._toCamel(property);
+
+                    var value = el.style[property],
+                        computed;
+                    
+                    if (!value) {
+                        computed = el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null);
+                        if (computed) { // test computed before touching for safari
+                            value = computed[property];
+                        }
+                    }
+                    
+                    return value;
+                };
+            } else if (documentElement[CURRENT_STYLE]) {
+                return function(el, property) {                         
+                    var value;
+
+                    switch(property) {
+                        case 'opacity' :// IE opacity uses filter
+                            value = 100;
+                            try { // will error if no DXImageTransform
+                                value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+
+                            } catch(e) {
+                                try { // make sure its in the document
+                                    value = el.filters('alpha').opacity;
+                                } catch(err) {
+                                    YAHOO.log('getStyle: IE filter failed',
+                                            'error', 'Dom');
+                                }
+                            }
+                            return value / 100;
+                        case 'float': // fix reserved word
+                            property = 'styleFloat'; // fall through
+                        default: 
+                            property = Y.Dom._toCamel(property);
+                            value = el[CURRENT_STYLE] ? el[CURRENT_STYLE][property] : null;
+                            return ( el.style[property] || value );
+                    }
+                };
+            }
+        }(),
+    
+        /**
+         * Wrapper for setting style properties of HTMLElements.  Normalizes "opacity" across modern browsers.
+        * @method setStyle
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {String} property The style property to be set.
+        * @param {String} val The value to apply to the given property.
+         */
+        setStyle: function(el, property, val) {
+            Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });
+        },
+
+        _setStyle: function() {
+            if (isIE) {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+
+                    if (el) {
+                        switch (property) {
+                            case 'opacity':
+                                if ( lang.isString(el.style.filter) ) { // in case not appended
+                                    el.style.filter = 'alpha(opacity=' + val * 100 + ')';
+                                    
+                                    if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) {
+                                        el.style.zoom = 1; // when no layout or cant tell
+                                    }
+                                }
+                                break;
+                            case 'float':
+                                property = 'styleFloat';
+                            default:
+                            el.style[property] = val;
+                        }
+                    } else {
+                        YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
+                    }
+                };
+            } else {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+                    if (el) {
+                        if (property == 'float') {
+                            property = 'cssFloat';
+                        }
+                        el.style[property] = val;
+                    } else {
+                        YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
+                    }
+                };
+            }
+
+        }(),
+        
+        /**
+         * Gets the current position of an element based on page coordinates. 
+         * Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getXY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM
+         * reference, or an Array of IDs and/or HTMLElements
+        * @return {Array} The XY position of the element(s)
+         */
+        getXY: function(el) {
+            return Y.Dom.batch(el, Y.Dom._getXY);
+        },
+
+        _canPosition: function(el) {
+            return ( Y.Dom._getStyle(el, 'display') !== 'none' && Y.Dom._inDoc(el) );
+        },
+
+        _getXY: function() {
+            if (document[DOCUMENT_ELEMENT][GET_BOUNDING_CLIENT_RECT]) {
+                return function(node) {
+                    var scrollLeft, scrollTop, box, doc,
+                        off1, off2, mode, bLeft, bTop,
+                        floor = Math.floor, // TODO: round?
+                        xy = false;
+
+                    if (Y.Dom._canPosition(node)) {
+                        box = node[GET_BOUNDING_CLIENT_RECT]();
+                        doc = node[OWNER_DOCUMENT];
+                        scrollLeft = Y.Dom.getDocumentScrollLeft(doc);
+                        scrollTop = Y.Dom.getDocumentScrollTop(doc);
+                        xy = [floor(box[LEFT]), floor(box[TOP])];
+
+                        if (isIE && UA.ie < 8) { // IE < 8: viewport off by 2
+                            off1 = 2;
+                            off2 = 2;
+                            mode = doc[COMPAT_MODE];
+
+                            if (UA.ie === 6) {
+                                if (mode !== _BACK_COMPAT) {
+                                    off1 = 0;
+                                    off2 = 0;
+                                }
+                            }
+                            
+                            if ((mode === _BACK_COMPAT)) {
+                                bLeft = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_LEFT_WIDTH);
+                                bTop = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_TOP_WIDTH);
+                                if (bLeft !== MEDIUM) {
+                                    off1 = parseInt(bLeft, 10);
+                                }
+                                if (bTop !== MEDIUM) {
+                                    off2 = parseInt(bTop, 10);
+                                }
+                            }
+                            
+                            xy[0] -= off1;
+                            xy[1] -= off2;
+
+                        }
+
+                        if ((scrollTop || scrollLeft)) {
+                            xy[0] += scrollLeft;
+                            xy[1] += scrollTop;
+                        }
+
+                        // gecko may return sub-pixel (non-int) values
+                        xy[0] = floor(xy[0]);
+                        xy[1] = floor(xy[1]);
+                    } else {
+                        YAHOO.log('getXY failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
+                    }
+
+                    return xy;
+                };
+            } else {
+                return function(node) { // ff2, safari: manually calculate by crawling up offsetParents
+                    var docScrollLeft, docScrollTop,
+                        scrollTop, scrollLeft,
+                        bCheck,
+                        xy = false,
+                        parentNode = node;
+
+                    if  (Y.Dom._canPosition(node) ) {
+                        xy = [node[OFFSET_LEFT], node[OFFSET_TOP]];
+                        docScrollLeft = Y.Dom.getDocumentScrollLeft(node[OWNER_DOCUMENT]);
+                        docScrollTop = Y.Dom.getDocumentScrollTop(node[OWNER_DOCUMENT]);
+
+                        // TODO: refactor with !! or just falsey
+                        bCheck = ((isGecko || UA.webkit > 519) ? true : false);
+
+                        // TODO: worth refactoring for TOP/LEFT only?
+                        while ((parentNode = parentNode[OFFSET_PARENT])) {
+                            xy[0] += parentNode[OFFSET_LEFT];
+                            xy[1] += parentNode[OFFSET_TOP];
+                            if (bCheck) {
+                                xy = Y.Dom._calcBorders(parentNode, xy);
+                            }
+                        }
+
+                        // account for any scrolled ancestors
+                        if (Y.Dom._getStyle(node, POSITION) !== FIXED) {
+                            parentNode = node;
+
+                            while ((parentNode = parentNode[PARENT_NODE]) && parentNode[TAG_NAME]) {
+                                scrollTop = parentNode[SCROLL_TOP];
+                                scrollLeft = parentNode[SCROLL_LEFT];
+
+                                //Firefox does something funky with borders when overflow is not visible.
+                                if (isGecko && (Y.Dom._getStyle(parentNode, 'overflow') !== 'visible')) {
+                                        xy = Y.Dom._calcBorders(parentNode, xy);
+                                }
+
+                                if (scrollTop || scrollLeft) {
+                                    xy[0] -= scrollLeft;
+                                    xy[1] -= scrollTop;
+                                }
+                            }
+                            xy[0] += docScrollLeft;
+                            xy[1] += docScrollTop;
+
+                        } else {
+                            //Fix FIXED position -- add scrollbars
+                            if (isOpera) {
+                                xy[0] -= docScrollLeft;
+                                xy[1] -= docScrollTop;
+                            } else if (isSafari || isGecko) {
+                                xy[0] += docScrollLeft;
+                                xy[1] += docScrollTop;
+                            }
+                        }
+                        //Round the numbers so we get sane data back
+                        xy[0] = Math.floor(xy[0]);
+                        xy[1] = Math.floor(xy[1]);
+                    } else {
+                        YAHOO.log('getXY failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
+                    }
+                    return xy;                
+                };
+            }
+        }(), // NOTE: Executing for loadtime branching
+        
+        /**
+         * Gets the current X position of an element based on page coordinates.  The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getX
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @return {Number | Array} The X position of the element(s)
+         */
+        getX: function(el) {
+            var f = function(el) {
+                return Y.Dom.getXY(el)[0];
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Gets the current Y position of an element based on page coordinates.  Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @return {Number | Array} The Y position of the element(s)
+         */
+        getY: function(el) {
+            var f = function(el) {
+                return Y.Dom.getXY(el)[1];
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Set the position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setXY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @param {Array} pos Contains X & Y values for new position (coordinates are page-based)
+        * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
+         */
+        setXY: function(el, pos, noRetry) {
+            Y.Dom.batch(el, Y.Dom._setXY, { pos: pos, noRetry: noRetry });
+        },
+
+        _setXY: function(node, args) {
+            var pos = Y.Dom._getStyle(node, POSITION),
+                setStyle = Y.Dom.setStyle,
+                xy = args.pos,
+                noRetry = args.noRetry,
+
+                delta = [ // assuming pixels; if not we will have to retry
+                    parseInt( Y.Dom.getComputedStyle(node, LEFT), 10 ),
+                    parseInt( Y.Dom.getComputedStyle(node, TOP), 10 )
+                ],
+
+                currentXY,
+                newXY;
+        
+            if (pos == 'static') { // default to relative
+                pos = RELATIVE;
+                setStyle(node, POSITION, pos);
+            }
+
+            currentXY = Y.Dom._getXY(node);
+
+            if (!xy || currentXY === false) { // has to be part of doc to have xy
+                YAHOO.log('xy failed: node not available', 'error', 'Node');
+                return false; 
+            }
+            
+            if ( isNaN(delta[0]) ) {// in case of 'auto'
+                delta[0] = (pos == RELATIVE) ? 0 : node[OFFSET_LEFT];
+            } 
+            if ( isNaN(delta[1]) ) { // in case of 'auto'
+                delta[1] = (pos == RELATIVE) ? 0 : node[OFFSET_TOP];
+            } 
+
+            if (xy[0] !== null) { // from setX
+                setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px');
+            }
+
+            if (xy[1] !== null) { // from setY
+                setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px');
+            }
+          
+            if (!noRetry) {
+                newXY = Y.Dom._getXY(node);
+
+                // if retry is true, try one more time if we miss 
+               if ( (xy[0] !== null && newXY[0] != xy[0]) || 
+                    (xy[1] !== null && newXY[1] != xy[1]) ) {
+                   Y.Dom._setXY(node, { pos: xy, noRetry: true });
+               }
+            }        
+
+            YAHOO.log('setXY setting position to ' + xy, 'info', 'Node');
+        },
+        
+        /**
+         * Set the X position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setX
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {Int} x The value to use as the X coordinate for the element(s).
+         */
+        setX: function(el, x) {
+            Y.Dom.setXY(el, [x, null]);
+        },
+        
+        /**
+         * Set the Y position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {Int} x To use as the Y coordinate for the element(s).
+         */
+        setY: function(el, y) {
+            Y.Dom.setXY(el, [null, y]);
+        },
+        
+        /**
+         * Returns the region position of the given element.
+         * The element must be part of the DOM tree to have a region (display:none or elements not appended return false).
+        * @method getRegion
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @return {Region | Array} A Region or array of Region instances containing "top, left, bottom, right" member data.
+         */
+        getRegion: function(el) {
+            var f = function(el) {
+                var region = false;
+                if ( Y.Dom._canPosition(el) ) {
+                    region = Y.Region.getRegion(el);
+                    YAHOO.log('getRegion returning ' + region, 'info', 'Dom');
+                } else {
+                    YAHOO.log('getRegion failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
+                }
+
+                return region;
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Returns the width of the client (viewport).
+        * @method getClientWidth
+        * @deprecated Now using getViewportWidth.  This interface left intact for back compat.
+        * @return {Int} The width of the viewable area of the page.
+         */
+        getClientWidth: function() {
+            return Y.Dom.getViewportWidth();
+        },
+        
+        /**
+         * Returns the height of the client (viewport).
+        * @method getClientHeight
+        * @deprecated Now using getViewportHeight.  This interface left intact for back compat.
+        * @return {Int} The height of the viewable area of the page.
+         */
+        getClientHeight: function() {
+            return Y.Dom.getViewportHeight();
+        },
+
+        /**
+         * Returns an array of HTMLElements with the given class.
+         * For optimized performance, include a tag and/or root node when possible.
+         * Note: This method operates against a live collection, so modifying the 
+         * collection in the callback (removing/appending nodes, etc.) will have
+         * side effects.  Instead you should iterate the returned nodes array,
+         * as you would with the native "getElementsByTagName" method. 
+        * @method getElementsByClassName
+        * @param {String} className The class name to match against
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point.
+         * This element is not included in the className scan.
+        * @param {Function} apply (optional) A function to apply to each element when found 
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Array} An array of elements that have the given class name
+         */
+        getElementsByClassName: function(className, tag, root, apply, o, overrides) {
+            tag = tag || '*';
+            root = (root) ? Y.Dom.get(root) : null || document; 
+            if (!root) {
+                return [];
+            }
+
+            var nodes = [],
+                elements = root.getElementsByTagName(tag),
+                hasClass = Y.Dom.hasClass;
+
+            for (var i = 0, len = elements.length; i < len; ++i) {
+                if ( hasClass(elements[i], className) ) {
+                    nodes[nodes.length] = elements[i];
+                }
+            }
+            
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
+            return nodes;
+        },
+
+        /**
+         * Determines whether an HTMLElement has the given className.
+        * @method hasClass
+        * @param {String | HTMLElement | Array} el The element or collection to test
+        * @param {String} className the class name to search for
+        * @return {Boolean | Array} A boolean value or array of boolean values
+         */
+        hasClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._hasClass, className);
+        },
+
+        _hasClass: function(el, className) {
+            var ret = false,
+                current;
+            
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                if (className.exec) {
+                    ret = className.test(current);
+                } else {
+                    ret = className && (SPACE + current + SPACE).
+                        indexOf(SPACE + className + SPACE) > -1;
+                }
+            } else {
+                YAHOO.log('hasClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
+        },
+    
+        /**
+         * Adds a class name to a given element or collection of elements.
+        * @method addClass         
+        * @param {String | HTMLElement | Array} el The element or collection to add the class to
+        * @param {String} className the class name to add to the class attribute
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        addClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._addClass, className);
+        },
+
+        _addClass: function(el, className) {
+            var ret = false,
+                current;
+
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                if ( !Y.Dom._hasClass(el, className) ) {
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className));
+                    ret = true;
+                }
+            } else {
+                YAHOO.log('addClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
+        },
+    
+        /**
+         * Removes a class name from a given element or collection of elements.
+        * @method removeClass         
+        * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+        * @param {String} className the class name to remove from the class attribute
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        removeClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._removeClass, className);
+        },
+        
+        _removeClass: function(el, className) {
+            var ret = false,
+                current,
+                newClass,
+                attr;
+
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                Y.Dom.setAttribute(el, CLASS_NAME, current.replace(Y.Dom._getClassRegex(className), EMPTY));
+
+                newClass = Y.Dom._getAttribute(el, CLASS_NAME);
+                if (current !== newClass) { // else nothing changed
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(newClass)); // trim after comparing to current class
+                    ret = true;
+
+                    if (Y.Dom._getAttribute(el, CLASS_NAME) === '') { // remove class attribute if empty
+                        attr = (el.hasAttribute && el.hasAttribute(_CLASS)) ? _CLASS : CLASS_NAME;
+                        YAHOO.log('removeClass removing empty class attribute', 'info', 'Dom');
+                        el.removeAttribute(attr);
+                    }
+                }
+
+            } else {
+                YAHOO.log('removeClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
+        },
+        
+        /**
+         * Replace a class with another class for a given element or collection of elements.
+         * If no oldClassName is present, the newClassName is simply added.
+        * @method replaceClass  
+        * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+        * @param {String} oldClassName the class name to be replaced
+        * @param {String} newClassName the class name that will be replacing the old class name
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        replaceClass: function(el, oldClassName, newClassName) {
+            return Y.Dom.batch(el, Y.Dom._replaceClass, { from: oldClassName, to: newClassName });
+        },
+
+        _replaceClass: function(el, classObj) {
+            var className,
+                from,
+                to,
+                ret = false,
+                current;
+
+            if (el && classObj) {
+                from = classObj.from;
+                to = classObj.to;
+
+                if (!to) {
+                    ret = false;
+                }  else if (!from) { // just add if no "from"
+                    ret = Y.Dom._addClass(el, classObj.to);
+                } else if (from !== to) { // else nothing to replace
+                    // May need to lead with DBLSPACE?
+                    current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                    className = (SPACE + current.replace(Y.Dom._getClassRegex(from), SPACE + to)).
+                               split(Y.Dom._getClassRegex(to));
+
+                    // insert to into what would have been the first occurrence slot
+                    className.splice(1, 0, SPACE + to);
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(className.join(EMPTY)));
+                    ret = true;
+                }
+            } else {
+                YAHOO.log('replaceClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
+        },
+        
+        /**
+         * Returns an ID and applies it to the element "el", if provided.
+        * @method generateId  
+        * @param {String | HTMLElement | Array} el (optional) An optional element array of elements to add an ID to (no ID is added if one is already present).
+        * @param {String} prefix (optional) an optional prefix to use (defaults to "yui-gen").
+        * @return {String | Array} The generated ID, or array of generated IDs (or original ID if already present on an element)
+         */
+        generateId: function(el, prefix) {
+            prefix = prefix || 'yui-gen';
+
+            var f = function(el) {
+                if (el && el.id) { // do not override existing ID
+                    YAHOO.log('generateId returning existing id ' + el.id, 'info', 'Dom');
+                    return el.id;
+                }
+
+                var id = prefix + YAHOO.env._id_counter++;
+                YAHOO.log('generateId generating ' + id, 'info', 'Dom');
+
+                if (el) {
+                    if (el[OWNER_DOCUMENT] && el[OWNER_DOCUMENT].getElementById(id)) { // in case one already exists
+                        // use failed id plus prefix to help ensure uniqueness
+                        return Y.Dom.generateId(el, id + prefix);
+                    }
+                    el.id = id;
+                }
+                
+                return id;
+            };
+
+            // batch fails when no element, so just generate and return single ID
+            return Y.Dom.batch(el, f, Y.Dom, true) || f.apply(Y.Dom, arguments);
+        },
+        
+        /**
+         * Determines whether an HTMLElement is an ancestor of another HTML element in the DOM hierarchy.
+        * @method isAncestor
+        * @param {String | HTMLElement} haystack The possible ancestor
+        * @param {String | HTMLElement} needle The possible descendent
+        * @return {Boolean} Whether or not the haystack is an ancestor of needle
+         */
+        isAncestor: function(haystack, needle) {
+            haystack = Y.Dom.get(haystack);
+            needle = Y.Dom.get(needle);
+            
+            var ret = false;
+
+            if ( (haystack && needle) && (haystack[NODE_TYPE] && needle[NODE_TYPE]) ) {
+                if (haystack.contains && haystack !== needle) { // contains returns true when equal
+                    ret = haystack.contains(needle);
+                }
+                else if (haystack.compareDocumentPosition) { // gecko
+                    ret = !!(haystack.compareDocumentPosition(needle) & 16);
+                }
+            } else {
+                YAHOO.log('isAncestor failed; invalid input: ' + haystack + ',' + needle, 'error', 'Dom');
+            }
+            YAHOO.log('isAncestor(' + haystack + ',' + needle + ' returning ' + ret, 'info', 'Dom');
+            return ret;
+        },
+        
+        /**
+         * Determines whether an HTMLElement is present in the current document.
+        * @method inDocument         
+        * @param {String | HTMLElement} el The element to search for
+        * @param {Object} doc An optional document to search, defaults to element's owner document 
+        * @return {Boolean} Whether or not the element is present in the current document
+         */
+        inDocument: function(el, doc) {
+            return Y.Dom._inDoc(Y.Dom.get(el), doc);
+        },
+
+        _inDoc: function(el, doc) {
+            var ret = false;
+            if (el && el[TAG_NAME]) {
+                doc = doc || el[OWNER_DOCUMENT]; 
+                ret = Y.Dom.isAncestor(doc[DOCUMENT_ELEMENT], el);
+            } else {
+                YAHOO.log('inDocument failed: invalid input', 'error', 'Dom');
+            }
+            return ret;
+        },
+        
+        /**
+         * Returns an array of HTMLElements that pass the test applied by supplied boolean method.
+         * For optimized performance, include a tag and/or root node when possible.
+         * Note: This method operates against a live collection, so modifying the 
+         * collection in the callback (removing/appending nodes, etc.) will have
+         * side effects.  Instead you should iterate the returned nodes array,
+         * as you would with the native "getElementsByTagName" method. 
+        * @method getElementsBy
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+        * @param {Function} apply (optional) A function to apply to each element when found 
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Array} Array of HTMLElements
+         */
+        getElementsBy: function(method, tag, root, apply, o, overrides, firstOnly) {
+            tag = tag || '*';
+            root = (root) ? Y.Dom.get(root) : null || document; 
+
+            if (!root) {
+                return [];
+            }
+
+            var nodes = [],
+                elements = root.getElementsByTagName(tag);
+            
+            for (var i = 0, len = elements.length; i < len; ++i) {
+                if ( method(elements[i]) ) {
+                    if (firstOnly) {
+                        nodes = elements[i]; 
+                        break;
+                    } else {
+                        nodes[nodes.length] = elements[i];
+                    }
+                }
+            }
+
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
+            YAHOO.log('getElementsBy returning ' + nodes, 'info', 'Dom');
+            
+            return nodes;
+        },
+        
+        /**
+         * Returns the first HTMLElement that passes the test applied by the supplied boolean method.
+        * @method getElementBy
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+        * @return {HTMLElement}
+         */
+        getElementBy: function(method, tag, root) {
+            return Y.Dom.getElementsBy(method, tag, root, null, null, null, true); 
+        },
+
+        /**
+         * Runs the supplied method against each item in the Collection/Array.
+         * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ).
+        * @method batch
+        * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to
+        * @param {Function} method The method to apply to the element(s)
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Any | Array} The return value(s) from the supplied method
+         */
+        batch: function(el, method, o, overrides) {
+            var collection = [],
+                scope = (overrides) ? o : window;
+                
+            el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+            if (el && method) {
+                if (el[TAG_NAME] || el.length === undefined) { // element or not array-like 
+                    return method.call(scope, el, o);
+                } 
+
+                for (var i = 0; i < el.length; ++i) {
+                    collection[collection.length] = method.call(scope, el[i], o);
+                }
+            } else {
+                YAHOO.log('batch called with invalid arguments', 'warn', 'Dom');
+                return false;
+            } 
+            return collection;
+        },
+        
+        /**
+         * Returns the height of the document.
+        * @method getDocumentHeight
+        * @return {Int} The height of the actual document (which includes the body and its margin).
+         */
+        getDocumentHeight: function() {
+            var scrollHeight = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollHeight : documentElement.scrollHeight,
+                h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
+
+            YAHOO.log('getDocumentHeight returning ' + h, 'info', 'Dom');
+            return h;
+        },
+        
+        /**
+         * Returns the width of the document.
+        * @method getDocumentWidth
+        * @return {Int} The width of the actual document (which includes the body and its margin).
+         */
+        getDocumentWidth: function() {
+            var scrollWidth = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollWidth : documentElement.scrollWidth,
+                w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
+            YAHOO.log('getDocumentWidth returning ' + w, 'info', 'Dom');
+            return w;
+        },
+
+        /**
+         * Returns the current height of the viewport.
+        * @method getViewportHeight
+        * @return {Int} The height of the viewable area of the page (excludes scrollbars).
+         */
+        getViewportHeight: function() {
+            var height = self.innerHeight, // Safari, Opera
+                mode = document[COMPAT_MODE];
+        
+            if ( (mode || isIE) && !isOpera ) { // IE, Gecko
+                height = (mode == CSS1_COMPAT) ?
+                        documentElement.clientHeight : // Standards
+                        document.body.clientHeight; // Quirks
+            }
+        
+            YAHOO.log('getViewportHeight returning ' + height, 'info', 'Dom');
+            return height;
+        },
+        
+        /**
+         * Returns the current width of the viewport.
+        * @method getViewportWidth
+        * @return {Int} The width of the viewable area of the page (excludes scrollbars).
+         */
+        
+        getViewportWidth: function() {
+            var width = self.innerWidth,  // Safari
+                mode = document[COMPAT_MODE];
+            
+            if (mode || isIE) { // IE, Gecko, Opera
+                width = (mode == CSS1_COMPAT) ?
+                        documentElement.clientWidth : // Standards
+                        document.body.clientWidth; // Quirks
+            }
+            YAHOO.log('getViewportWidth returning ' + width, 'info', 'Dom');
+            return width;
+        },
+
+       /**
+         * Returns the nearest ancestor that passes the test applied by supplied boolean method.
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+        * @method getAncestorBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @return {Object} HTMLElement or null if not found
+         */
+        getAncestorBy: function(node, method) {
+            while ( (node = node[PARENT_NODE]) ) { // NOTE: assignment
+                if ( Y.Dom._testElement(node, method) ) {
+                    YAHOO.log('getAncestorBy returning ' + node, 'info', 'Dom');
+                    return node;
+                }
+            } 
+
+            YAHOO.log('getAncestorBy returning null (no ancestor passed test)', 'error', 'Dom');
+            return null;
+        },
+        
+        /**
+         * Returns the nearest ancestor with the given className.
+        * @method getAncestorByClassName
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @param {String} className
+        * @return {Object} HTMLElement
+         */
+        getAncestorByClassName: function(node, className) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getAncestorByClassName failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+            var method = function(el) { return Y.Dom.hasClass(el, className); };
+            return Y.Dom.getAncestorBy(node, method);
+        },
+
+        /**
+         * Returns the nearest ancestor with the given tagName.
+        * @method getAncestorByTagName
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @param {String} tagName
+        * @return {Object} HTMLElement
+         */
+        getAncestorByTagName: function(node, tagName) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getAncestorByTagName failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+            var method = function(el) {
+                 return el[TAG_NAME] && el[TAG_NAME].toUpperCase() == tagName.toUpperCase();
+            };
+
+            return Y.Dom.getAncestorBy(node, method);
+        },
+
+        /**
+         * Returns the previous sibling that is an HTMLElement. 
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+         * Returns the nearest HTMLElement sibling if no method provided.
+        * @method getPreviousSiblingBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test siblings
+         * that receives the sibling node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getPreviousSiblingBy: function(node, method) {
+            while (node) {
+                node = node.previousSibling;
+                if ( Y.Dom._testElement(node, method) ) {
+                    return node;
+                }
+            }
+            return null;
+        }, 
+
+        /**
+         * Returns the previous sibling that is an HTMLElement 
+        * @method getPreviousSibling
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getPreviousSibling: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getPreviousSibling failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+
+            return Y.Dom.getPreviousSiblingBy(node);
+        }, 
+
+        /**
+         * Returns the next HTMLElement sibling that passes the boolean method. 
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+         * Returns the nearest HTMLElement sibling if no method provided.
+        * @method getNextSiblingBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test siblings
+         * that receives the sibling node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getNextSiblingBy: function(node, method) {
+            while (node) {
+                node = node.nextSibling;
+                if ( Y.Dom._testElement(node, method) ) {
+                    return node;
+                }
+            }
+            return null;
+        }, 
+
+        /**
+         * Returns the next sibling that is an HTMLElement 
+        * @method getNextSibling
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getNextSibling: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getNextSibling failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+
+            return Y.Dom.getNextSiblingBy(node);
+        }, 
+
+        /**
+         * Returns the first HTMLElement child that passes the test method. 
+        * @method getFirstChildBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getFirstChildBy: function(node, method) {
+            var child = ( Y.Dom._testElement(node.firstChild, method) ) ? node.firstChild : null;
+            return child || Y.Dom.getNextSiblingBy(node.firstChild, method);
+        }, 
+
+        /**
+         * Returns the first HTMLElement child. 
+        * @method getFirstChild
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getFirstChild: function(node, method) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getFirstChild failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+            return Y.Dom.getFirstChildBy(node);
+        }, 
+
+        /**
+         * Returns the last HTMLElement child that passes the test method. 
+        * @method getLastChildBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getLastChildBy: function(node, method) {
+            if (!node) {
+                YAHOO.log('getLastChild failed: invalid node argument', 'error', 'Dom');
+                return null;
+            }
+            var child = ( Y.Dom._testElement(node.lastChild, method) ) ? node.lastChild : null;
+            return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method);
+        }, 
+
+        /**
+         * Returns the last HTMLElement child. 
+        * @method getLastChild
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getLastChild: function(node) {
+            node = Y.Dom.get(node);
+            return Y.Dom.getLastChildBy(node);
+        }, 
+
+        /**
+         * Returns an array of HTMLElement childNodes that pass the test method. 
+        * @method getChildrenBy
+        * @param {HTMLElement} node The HTMLElement to start from
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Array} A static array of HTMLElements
+         */
+        getChildrenBy: function(node, method) {
+            var child = Y.Dom.getFirstChildBy(node, method),
+                children = child ? [child] : [];
+
+            Y.Dom.getNextSiblingBy(child, function(node) {
+                if ( !method || method(node) ) {
+                    children[children.length] = node;
+                }
+                return false; // fail test to collect all children
+            });
+
+            return children;
+        },
+ 
+        /**
+         * Returns an array of HTMLElement childNodes. 
+        * @method getChildren
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Array} A static array of HTMLElements
+         */
+        getChildren: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                YAHOO.log('getChildren failed: invalid node argument', 'error', 'Dom');
+            }
+
+            return Y.Dom.getChildrenBy(node);
+        },
+
+        /**
+         * Returns the left scroll value of the document 
+        * @method getDocumentScrollLeft
+        * @param {HTMLDocument} document (optional) The document to get the scroll value of
+        * @return {Int}  The amount that the document is scrolled to the left
+         */
+        getDocumentScrollLeft: function(doc) {
+            doc = doc || document;
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft);
+        }, 
+
+        /**
+         * Returns the top scroll value of the document 
+        * @method getDocumentScrollTop
+        * @param {HTMLDocument} document (optional) The document to get the scroll value of
+        * @return {Int}  The amount that the document is scrolled to the top
+         */
+        getDocumentScrollTop: function(doc) {
+            doc = doc || document;
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop);
+        },
+
+        /**
+         * Inserts the new node as the previous sibling of the reference node 
+        * @method insertBefore
+        * @param {String | HTMLElement} newNode The node to be inserted
+        * @param {String | HTMLElement} referenceNode The node to insert the new node before 
+        * @return {HTMLElement} The node that was inserted (or null if insert fails) 
+         */
+        insertBefore: function(newNode, referenceNode) {
+            newNode = Y.Dom.get(newNode); 
+            referenceNode = Y.Dom.get(referenceNode); 
+            
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
+                YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom');
+                return null;
+            }       
+
+            return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode); 
+        },
+
+        /**
+         * Inserts the new node as the next sibling of the reference node 
+        * @method insertAfter
+        * @param {String | HTMLElement} newNode The node to be inserted
+        * @param {String | HTMLElement} referenceNode The node to insert the new node after 
+        * @return {HTMLElement} The node that was inserted (or null if insert fails) 
+         */
+        insertAfter: function(newNode, referenceNode) {
+            newNode = Y.Dom.get(newNode); 
+            referenceNode = Y.Dom.get(referenceNode); 
+            
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
+                YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom');
+                return null;
+            }       
+
+            if (referenceNode.nextSibling) {
+                return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode.nextSibling); 
+            } else {
+                return referenceNode[PARENT_NODE].appendChild(newNode);
+            }
+        },
+
+        /**
+         * Creates a Region based on the viewport relative to the document. 
+        * @method getClientRegion
+        * @return {Region} A Region object representing the viewport which accounts for document scroll
+         */
+        getClientRegion: function() {
+            var t = Y.Dom.getDocumentScrollTop(),
+                l = Y.Dom.getDocumentScrollLeft(),
+                r = Y.Dom.getViewportWidth() + l,
+                b = Y.Dom.getViewportHeight() + t;
+
+            return new Y.Region(t, r, b, l);
+        },
+
+        /**
+         * Provides a normalized attribute interface. 
+        * @method setAttribute
+        * @param {String | HTMLElement} el The target element for the attribute.
+        * @param {String} attr The attribute to set.
+        * @param {String} val The value of the attribute.
+         */
+        setAttribute: function(el, attr, val) {
+            Y.Dom.batch(el, Y.Dom._setAttribute, { attr: attr, val: val });
+        },
+
+        _setAttribute: function(el, args) {
+            var attr = Y.Dom._toCamel(args.attr),
+                val = args.val;
+
+            if (el && el.setAttribute) {
+                if (Y.Dom.DOT_ATTRIBUTES[attr]) {
+                    el[attr] = val;
+                } else {
+                    attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+                    el.setAttribute(attr, val);
+                }
+            } else {
+                YAHOO.log('setAttribute method not available for ' + el, 'error', 'Dom');
+            }
+        },
+
+        /**
+         * Provides a normalized attribute interface. 
+        * @method getAttribute
+        * @param {String | HTMLElement} el The target element for the attribute.
+        * @param {String} attr The attribute to get.
+        * @return {String} The current value of the attribute. 
+         */
+        getAttribute: function(el, attr) {
+            return Y.Dom.batch(el, Y.Dom._getAttribute, attr);
+        },
+
+
+        _getAttribute: function(el, attr) {
+            var val;
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+
+            if (el && el.getAttribute) {
+                val = el.getAttribute(attr, 2);
+            } else {
+                YAHOO.log('getAttribute method not available for ' + el, 'error', 'Dom');
+            }
+
+            return val;
+        },
+
+        _toCamel: function(property) {
+            var c = propertyCache;
+
+            function tU(x,l) {
+                return l.toUpperCase();
+            }
+
+            return c[property] || (c[property] = property.indexOf('-') === -1 ? 
+                                    property :
+                                    property.replace( /-([a-z])/gi, tU ));
+        },
+
+        _getClassRegex: function(className) {
+            var re;
+            if (className !== undefined) { // allow empty string to pass
+                if (className.exec) { // already a RegExp
+                    re = className;
+                } else {
+                    re = reCache[className];
+                    if (!re) {
+                        // escape special chars (".", "[", etc.)
+                        className = className.replace(Y.Dom._patterns.CLASS_RE_TOKENS, '\\$1');
+                        re = reCache[className] = new RegExp(C_START + className + C_END, G);
+                    }
+                }
+            }
+            return re;
+        },
+
+        _patterns: {
+            ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
+            CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g
+        },
+
+
+        _testElement: function(node, method) {
+            return node && node[NODE_TYPE] == 1 && ( !method || method(node) );
+        },
+
+        _calcBorders: function(node, xy2) {
+            var t = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0,
+                l = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0;
+            if (isGecko) {
+                if (RE_TABLE.test(node[TAG_NAME])) {
+                    t = 0;
+                    l = 0;
+                }
+            }
+            xy2[0] += l;
+            xy2[1] += t;
+            return xy2;
+        }
+    };
+        
+    var _getComputedStyle = Y.Dom[GET_COMPUTED_STYLE];
+    // fix opera computedStyle default color unit (convert to rgb)
+    if (UA.opera) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+            if (RE_COLOR.test(att)) {
+                val = Y.Dom.Color.toRGB(val);
+            }
+
+            return val;
+        };
+
+    }
+
+    // safari converts transparent to rgba(), others use "transparent"
+    if (UA.webkit) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+
+            if (val === 'rgba(0, 0, 0, 0)') {
+                val = 'transparent'; 
+            }
+
+            return val;
+        };
+
+    }
+
+    if (UA.ie && UA.ie >= 8 && document.documentElement.hasAttribute) { // IE 8 standards
+        Y.Dom.DOT_ATTRIBUTES.type = true; // IE 8 errors on input.setAttribute('type')
+    }
+})();
+/**
+ * A region is a representation of an object on a grid.  It is defined
+ * by the top, right, bottom, left extents, so is rectangular by default.  If 
+ * other shapes are required, this class could be extended to support it.
+ * @namespace YAHOO.util
+ * @class Region
+ * @param {Int} t the top extent
+ * @param {Int} r the right extent
+ * @param {Int} b the bottom extent
+ * @param {Int} l the left extent
+ * @constructor
+ */
+YAHOO.util.Region = function(t, r, b, l) {
+
+    /**
+     * The region's top extent
+    * @property top
+    * @type Int
+     */
+    this.top = t;
+    
+    /**
+     * The region's top extent
+    * @property y
+    * @type Int
+     */
+    this.y = t;
+    
+    /**
+     * The region's top extent as index, for symmetry with set/getXY
+    * @property 1
+    * @type Int
+     */
+    this[1] = t;
+
+    /**
+     * The region's right extent
+    * @property right
+    * @type int
+     */
+    this.right = r;
+
+    /**
+     * The region's bottom extent
+    * @property bottom
+    * @type Int
+     */
+    this.bottom = b;
+
+    /**
+     * The region's left extent
+    * @property left
+    * @type Int
+     */
+    this.left = l;
+    
+    /**
+     * The region's left extent
+    * @property x
+    * @type Int
+     */
+    this.x = l;
+    
+    /**
+     * The region's left extent as index, for symmetry with set/getXY
+    * @property 0
+    * @type Int
+     */
+    this[0] = l;
+
+    /**
+     * The region's total width 
+    * @property width 
+    * @type Int
+     */
+    this.width = this.right - this.left;
+
+    /**
+     * The region's total height 
+    * @property height 
+    * @type Int
+     */
+    this.height = this.bottom - this.top;
+};
+
+/**
+ * Returns true if this region contains the region passed in
+ * @method contains
+ * @param  {Region}  region The region to evaluate
+ * @return {Boolean}        True if the region is contained with this region, 
+ *                          else false
+ */
+YAHOO.util.Region.prototype.contains = function(region) {
+    return ( region.left   >= this.left   && 
+             region.right  <= this.right  && 
+             region.top    >= this.top    && 
+             region.bottom <= this.bottom    );
+
+    // this.logger.debug("does " + this + " contain " + region + " ... " + ret);
+};
+
+/**
+ * Returns the area of the region
+ * @method getArea
+ * @return {Int} the region's area
+ */
+YAHOO.util.Region.prototype.getArea = function() {
+    return ( (this.bottom - this.top) * (this.right - this.left) );
+};
+
+/**
+ * Returns the region where the passed in region overlaps with this one
+ * @method intersect
+ * @param  {Region} region The region that intersects
+ * @return {Region}        The overlap region, or null if there is no overlap
+ */
+YAHOO.util.Region.prototype.intersect = function(region) {
+    var t = Math.max( this.top,    region.top    ),
+        r = Math.min( this.right,  region.right  ),
+        b = Math.min( this.bottom, region.bottom ),
+        l = Math.max( this.left,   region.left   );
+    
+    if (b >= t && r >= l) {
+        return new YAHOO.util.Region(t, r, b, l);
+    } else {
+        return null;
+    }
+};
+
+/**
+ * Returns the region representing the smallest region that can contain both
+ * the passed in region and this region.
+ * @method union
+ * @param  {Region} region The region that to create the union with
+ * @return {Region}        The union region
+ */
+YAHOO.util.Region.prototype.union = function(region) {
+    var t = Math.min( this.top,    region.top    ),
+        r = Math.max( this.right,  region.right  ),
+        b = Math.max( this.bottom, region.bottom ),
+        l = Math.min( this.left,   region.left   );
+
+    return new YAHOO.util.Region(t, r, b, l);
+};
+
+/**
+ * toString
+ * @method toString
+ * @return string the region properties
+ */
+YAHOO.util.Region.prototype.toString = function() {
+    return ( "Region {"    +
+             "top: "       + this.top    + 
+             ", right: "   + this.right  + 
+             ", bottom: "  + this.bottom + 
+             ", left: "    + this.left   + 
+             ", height: "  + this.height + 
+             ", width: "    + this.width   + 
+             "}" );
+};
+
+/**
+ * Returns a region that is occupied by the DOM element
+ * @method getRegion
+ * @param  {HTMLElement} el The element
+ * @return {Region}         The region that the element occupies
+ * @static
+ */
+YAHOO.util.Region.getRegion = function(el) {
+    var p = YAHOO.util.Dom.getXY(el),
+        t = p[1],
+        r = p[0] + el.offsetWidth,
+        b = p[1] + el.offsetHeight,
+        l = p[0];
+
+    return new YAHOO.util.Region(t, r, b, l);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * A point is a region that is special in that it represents a single point on 
+ * the grid.
+ * @namespace YAHOO.util
+ * @class Point
+ * @param {Int} x The X position of the point
+ * @param {Int} y The Y position of the point
+ * @constructor
+ * @extends YAHOO.util.Region
+ */
+YAHOO.util.Point = function(x, y) {
+   if (YAHOO.lang.isArray(x)) { // accept input from Dom.getXY, Event.getXY, etc.
+      y = x[1]; // dont blow away x yet
+      x = x[0];
+   }
+ 
+    YAHOO.util.Point.superclass.constructor.call(this, y, x, y, x);
+};
+
+YAHOO.extend(YAHOO.util.Point, YAHOO.util.Region);
+
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var Y = YAHOO.util, 
+    CLIENT_TOP = 'clientTop',
+    CLIENT_LEFT = 'clientLeft',
+    PARENT_NODE = 'parentNode',
+    RIGHT = 'right',
+    HAS_LAYOUT = 'hasLayout',
+    PX = 'px',
+    OPACITY = 'opacity',
+    AUTO = 'auto',
+    BORDER_LEFT_WIDTH = 'borderLeftWidth',
+    BORDER_TOP_WIDTH = 'borderTopWidth',
+    BORDER_RIGHT_WIDTH = 'borderRightWidth',
+    BORDER_BOTTOM_WIDTH = 'borderBottomWidth',
+    VISIBLE = 'visible',
+    TRANSPARENT = 'transparent',
+    HEIGHT = 'height',
+    WIDTH = 'width',
+    STYLE = 'style',
+    CURRENT_STYLE = 'currentStyle',
+
+// IE getComputedStyle
+// TODO: unit-less lineHeight (e.g. 1.22)
+    re_size = /^width|height$/,
+    re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
+
+    ComputedStyle = {
+        get: function(el, property) {
+            var value = '',
+                current = el[CURRENT_STYLE][property];
+
+            if (property === OPACITY) {
+                value = Y.Dom.getStyle(el, OPACITY);        
+            } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert
+                value = current;
+            } else if (Y.Dom.IE_COMPUTED[property]) { // use compute function
+                value = Y.Dom.IE_COMPUTED[property](el, property);
+            } else if (re_unit.test(current)) { // convert to pixel
+                value = Y.Dom.IE.ComputedStyle.getPixel(el, property);
+            } else {
+                value = current;
+            }
+
+            return value;
+        },
+
+        getOffset: function(el, prop) {
+            var current = el[CURRENT_STYLE][prop],                        // value of "width", "top", etc.
+                capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc.
+                offset = 'offset' + capped,                             // "offsetWidth", "offsetTop", etc.
+                pixel = 'pixel' + capped,                               // "pixelWidth", "pixelTop", etc.
+                value = '',
+                actual;
+
+            if (current == AUTO) {
+                actual = el[offset]; // offsetHeight/Top etc.
+                if (actual === undefined) { // likely "right" or "bottom"
+                    value = 0;
+                }
+
+                value = actual;
+                if (re_size.test(prop)) { // account for box model diff 
+                    el[STYLE][prop] = actual; 
+                    if (el[offset] > actual) {
+                        // the difference is padding + border (works in Standards & Quirks modes)
+                        value = actual - (el[offset] - actual);
+                    }
+                    el[STYLE][prop] = AUTO; // revert to auto
+                }
+            } else { // convert units to px
+                if (!el[STYLE][pixel] && !el[STYLE][prop]) { // need to map style.width to currentStyle (no currentStyle.pixelWidth)
+                    el[STYLE][prop] = current;              // no style.pixelWidth if no style.width
+                }
+                value = el[STYLE][pixel];
+            }
+            return value + PX;
+        },
+
+        getBorderWidth: function(el, property) {
+            // clientHeight/Width = paddingBox (e.g. offsetWidth - borderWidth)
+            // clientTop/Left = borderWidth
+            var value = null;
+            if (!el[CURRENT_STYLE][HAS_LAYOUT]) { // TODO: unset layout?
+                el[STYLE].zoom = 1; // need layout to measure client
+            }
+
+            switch(property) {
+                case BORDER_TOP_WIDTH:
+                    value = el[CLIENT_TOP];
+                    break;
+                case BORDER_BOTTOM_WIDTH:
+                    value = el.offsetHeight - el.clientHeight - el[CLIENT_TOP];
+                    break;
+                case BORDER_LEFT_WIDTH:
+                    value = el[CLIENT_LEFT];
+                    break;
+                case BORDER_RIGHT_WIDTH:
+                    value = el.offsetWidth - el.clientWidth - el[CLIENT_LEFT];
+                    break;
+            }
+            return value + PX;
+        },
+
+        getPixel: function(node, att) {
+            // use pixelRight to convert to px
+            var val = null,
+                styleRight = node[CURRENT_STYLE][RIGHT],
+                current = node[CURRENT_STYLE][att];
+
+            node[STYLE][RIGHT] = current;
+            val = node[STYLE].pixelRight;
+            node[STYLE][RIGHT] = styleRight; // revert
+
+            return val + PX;
+        },
+
+        getMargin: function(node, att) {
+            var val;
+            if (node[CURRENT_STYLE][att] == AUTO) {
+                val = 0 + PX;
+            } else {
+                val = Y.Dom.IE.ComputedStyle.getPixel(node, att);
+            }
+            return val;
+        },
+
+        getVisibility: function(node, att) {
+            var current;
+            while ( (current = node[CURRENT_STYLE]) && current[att] == 'inherit') { // NOTE: assignment in test
+                node = node[PARENT_NODE];
+            }
+            return (current) ? current[att] : VISIBLE;
+        },
+
+        getColor: function(node, att) {
+            return Y.Dom.Color.toRGB(node[CURRENT_STYLE][att]) || TRANSPARENT;
+        },
+
+        getBorderColor: function(node, att) {
+            var current = node[CURRENT_STYLE],
+                val = current[att] || current.color;
+            return Y.Dom.Color.toRGB(Y.Dom.Color.toHex(val));
+        }
+
+    },
+
+//fontSize: getPixelFont,
+    IEComputed = {};
+
+IEComputed.top = IEComputed.right = IEComputed.bottom = IEComputed.left = 
+        IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset;
+
+IEComputed.color = ComputedStyle.getColor;
+
+IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] =
+        IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] =
+        ComputedStyle.getBorderWidth;
+
+IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom =
+        IEComputed.marginLeft = ComputedStyle.getMargin;
+
+IEComputed.visibility = ComputedStyle.getVisibility;
+IEComputed.borderColor = IEComputed.borderTopColor =
+        IEComputed.borderRightColor = IEComputed.borderBottomColor =
+        IEComputed.borderLeftColor = ComputedStyle.getBorderColor;
+
+Y.Dom.IE_COMPUTED = IEComputed;
+Y.Dom.IE_ComputedStyle = ComputedStyle;
+})();
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var TO_STRING = 'toString',
+    PARSE_INT = parseInt,
+    RE = RegExp,
+    Y = YAHOO.util;
+
+Y.Dom.Color = {
+    KEYWORDS: {
+        black: '000',
+        silver: 'c0c0c0',
+        gray: '808080',
+        white: 'fff',
+        maroon: '800000',
+        red: 'f00',
+        purple: '800080',
+        fuchsia: 'f0f',
+        green: '008000',
+        lime: '0f0',
+        olive: '808000',
+        yellow: 'ff0',
+        navy: '000080',
+        blue: '00f',
+        teal: '008080',
+        aqua: '0ff'
+    },
+
+    re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
+    re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
+    re_hex3: /([0-9A-F])/gi,
+
+    toRGB: function(val) {
+        if (!Y.Dom.Color.re_RGB.test(val)) {
+            val = Y.Dom.Color.toHex(val);
+        }
+
+        if(Y.Dom.Color.re_hex.exec(val)) {
+            val = 'rgb(' + [
+                PARSE_INT(RE.$1, 16),
+                PARSE_INT(RE.$2, 16),
+                PARSE_INT(RE.$3, 16)
+            ].join(', ') + ')';
+        }
+        return val;
+    },
+
+    toHex: function(val) {
+        val = Y.Dom.Color.KEYWORDS[val] || val;
+        if (Y.Dom.Color.re_RGB.exec(val)) {
+            var r = (RE.$1.length === 1) ? '0' + RE.$1 : Number(RE.$1),
+                g = (RE.$2.length === 1) ? '0' + RE.$2 : Number(RE.$2),
+                b = (RE.$3.length === 1) ? '0' + RE.$3 : Number(RE.$3);
+
+            val = [
+                r[TO_STRING](16),
+                g[TO_STRING](16),
+                b[TO_STRING](16)
+            ].join('');
+        }
+
+        if (val.length < 6) {
+            val = val.replace(Y.Dom.Color.re_hex3, '$1$1');
+        }
+
+        if (val !== 'transparent' && val.indexOf('#') < 0) {
+            val = '#' + val;
+        }
+
+        return val.toLowerCase();
+    }
+};
+}());
+YAHOO.register("dom", YAHOO.util.Dom, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/dom/dom-min.js
===================================================================
--- trunk/include/yui/dom/dom-min.js	(nonexistent)
+++ trunk/include/yui/dom/dom-min.js	(revision 2)
@@ -0,0 +1,9 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},DOT_ATTRIBUTES:{},get:function(z){var AB,x,AA,y,Y,G;if(z){if(z[l]||z.item){return z;}if(typeof z==="string"){AB=z;z=K.getElementById(z);G=(z)?z.attributes:null;if(z&&G&&G.id&&G.id.value===AB){return z;}else{if(z&&K.all){z=null;x=K.all[AB];for(y=0,Y=x.length;y<Y;++y){if(x[y].id===AB){return x[y];}}}}return z;}if(YAHOO.util.Element&&z instanceof YAHOO.util.Element){z=z.get("element");}if("length" in z){AA=[];for(y=0,Y=z.length;y<Y;++y){AA[AA.length]=E.Dom.get(z[y]);}return AA;}return z;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC===c)){G=S(AF[v],q);x=S(AF[v],R);if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom._getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom._getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom._getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;
+y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom._getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e]&&y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){E.Dom.batch(Y,E.Dom._setAttribute,{attr:G,val:x});},_setAttribute:function(x,Y){var G=E.Dom._toCamel(Y.attr),y=Y.val;if(x&&x.setAttribute){if(E.Dom.DOT_ATTRIBUTES[G]){x[G]=y;}else{G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;x.setAttribute(G,y);}}else{}},getAttribute:function(Y,G){return E.Dom.batch(Y,E.Dom._getAttribute,G);},_getAttribute:function(Y,G){var x;G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;if(Y&&Y.getAttribute){x=Y.getAttribute(G,2);}else{}return x;},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}if(m.ie&&m.ie>=8&&K.documentElement.hasAttribute){E.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;
+this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
Index: trunk/include/yui/dom/dom.js
===================================================================
--- trunk/include/yui/dom/dom.js	(nonexistent)
+++ trunk/include/yui/dom/dom.js	(revision 2)
@@ -0,0 +1,1832 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The dom module provides helper methods for manipulating Dom elements.
+ * @module dom
+ *
+ */
+
+(function() {
+    // for use with generateId (global to save state if Dom is overwritten)
+    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;
+
+    // internal shorthand
+    var Y = YAHOO.util,
+        lang = YAHOO.lang,
+        UA = YAHOO.env.ua,
+        trim = YAHOO.lang.trim,
+        propertyCache = {}, // for faster hyphen converts
+        reCache = {}, // cache className regexes
+        RE_TABLE = /^t(?:able|d|h)$/i, // for _calcBorders
+        RE_COLOR = /color$/i,
+
+        // DOM aliases 
+        document = window.document,     
+        documentElement = document.documentElement,
+
+        // string constants
+        OWNER_DOCUMENT = 'ownerDocument',
+        DEFAULT_VIEW = 'defaultView',
+        DOCUMENT_ELEMENT = 'documentElement',
+        COMPAT_MODE = 'compatMode',
+        OFFSET_LEFT = 'offsetLeft',
+        OFFSET_TOP = 'offsetTop',
+        OFFSET_PARENT = 'offsetParent',
+        PARENT_NODE = 'parentNode',
+        NODE_TYPE = 'nodeType',
+        TAG_NAME = 'tagName',
+        SCROLL_LEFT = 'scrollLeft',
+        SCROLL_TOP = 'scrollTop',
+        GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
+        GET_COMPUTED_STYLE = 'getComputedStyle',
+        CURRENT_STYLE = 'currentStyle',
+        CSS1_COMPAT = 'CSS1Compat',
+        _BACK_COMPAT = 'BackCompat',
+        _CLASS = 'class', // underscore due to reserved word
+        CLASS_NAME = 'className',
+        EMPTY = '',
+        SPACE = ' ',
+        C_START = '(?:^|\\s)',
+        C_END = '(?= |$)',
+        G = 'g',
+        POSITION = 'position',
+        FIXED = 'fixed',
+        RELATIVE = 'relative',
+        LEFT = 'left',
+        TOP = 'top',
+        MEDIUM = 'medium',
+        BORDER_LEFT_WIDTH = 'borderLeftWidth',
+        BORDER_TOP_WIDTH = 'borderTopWidth',
+    
+    // brower detection
+        isOpera = UA.opera,
+        isSafari = UA.webkit, 
+        isGecko = UA.gecko, 
+        isIE = UA.ie; 
+    
+    /**
+     * Provides helper methods for DOM elements.
+    * @namespace YAHOO.util
+    * @class Dom
+    * @requires yahoo, event
+     */
+    Y.Dom = {
+        CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
+            'for': 'htmlFor',
+            'class': CLASS_NAME
+        } : { // w3c
+            'htmlFor': 'for',
+            'className': _CLASS
+        },
+
+        DOT_ATTRIBUTES: {},
+
+        /**
+         * Returns an HTMLElement reference.
+        * @method get
+        * @param {String | HTMLElement |Array} el Accepts a string to use as an ID for getting a DOM reference, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements.
+         */
+        get: function(el) {
+            var id, nodes, c, i, len, attr;
+
+            if (el) {
+                if (el[NODE_TYPE] || el.item) { // Node, or NodeList
+                    return el;
+                }
+
+                if (typeof el === 'string') { // id
+                    id = el;
+                    el = document.getElementById(el);
+                    attr = (el) ? el.attributes : null;
+                    if (el && attr && attr.id && attr.id.value === id) { // IE: avoid false match on "name" attribute
+                        return el;
+                    } else if (el && document.all) { // filter by name
+                        el = null;
+                        nodes = document.all[id];
+                        for (i = 0, len = nodes.length; i < len; ++i) {
+                            if (nodes[i].id === id) {
+                                return nodes[i];
+                            }
+                        }
+                    }
+                    return el;
+                }
+                
+                if (YAHOO.util.Element && el instanceof YAHOO.util.Element) {
+                    el = el.get('element');
+                }
+
+                if ('length' in el) { // array-like 
+                    c = [];
+                    for (i = 0, len = el.length; i < len; ++i) {
+                        c[c.length] = Y.Dom.get(el[i]);
+                    }
+                    
+                    return c;
+                }
+
+                return el; // some other object, just pass it back
+            }
+
+            return null;
+        },
+    
+        getComputedStyle: function(el, property) {
+            if (window[GET_COMPUTED_STYLE]) {
+                return el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null)[property];
+            } else if (el[CURRENT_STYLE]) {
+                return Y.Dom.IE_ComputedStyle.get(el, property);
+            }
+        },
+
+        /**
+         * Normalizes currentStyle and ComputedStyle.
+        * @method getStyle
+        * @param {String | HTMLElement |Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {String} property The style property whose value is returned.
+        * @return {String | Array} The current value of the style property for the element(s).
+         */
+        getStyle: function(el, property) {
+            return Y.Dom.batch(el, Y.Dom._getStyle, property);
+        },
+
+        // branching at load instead of runtime
+        _getStyle: function() {
+            if (window[GET_COMPUTED_STYLE]) { // W3C DOM method
+                return function(el, property) {
+                    property = (property === 'float') ? property = 'cssFloat' :
+                            Y.Dom._toCamel(property);
+
+                    var value = el.style[property],
+                        computed;
+                    
+                    if (!value) {
+                        computed = el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null);
+                        if (computed) { // test computed before touching for safari
+                            value = computed[property];
+                        }
+                    }
+                    
+                    return value;
+                };
+            } else if (documentElement[CURRENT_STYLE]) {
+                return function(el, property) {                         
+                    var value;
+
+                    switch(property) {
+                        case 'opacity' :// IE opacity uses filter
+                            value = 100;
+                            try { // will error if no DXImageTransform
+                                value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+
+                            } catch(e) {
+                                try { // make sure its in the document
+                                    value = el.filters('alpha').opacity;
+                                } catch(err) {
+                                }
+                            }
+                            return value / 100;
+                        case 'float': // fix reserved word
+                            property = 'styleFloat'; // fall through
+                        default: 
+                            property = Y.Dom._toCamel(property);
+                            value = el[CURRENT_STYLE] ? el[CURRENT_STYLE][property] : null;
+                            return ( el.style[property] || value );
+                    }
+                };
+            }
+        }(),
+    
+        /**
+         * Wrapper for setting style properties of HTMLElements.  Normalizes "opacity" across modern browsers.
+        * @method setStyle
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {String} property The style property to be set.
+        * @param {String} val The value to apply to the given property.
+         */
+        setStyle: function(el, property, val) {
+            Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });
+        },
+
+        _setStyle: function() {
+            if (isIE) {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+
+                    if (el) {
+                        switch (property) {
+                            case 'opacity':
+                                if ( lang.isString(el.style.filter) ) { // in case not appended
+                                    el.style.filter = 'alpha(opacity=' + val * 100 + ')';
+                                    
+                                    if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) {
+                                        el.style.zoom = 1; // when no layout or cant tell
+                                    }
+                                }
+                                break;
+                            case 'float':
+                                property = 'styleFloat';
+                            default:
+                            el.style[property] = val;
+                        }
+                    } else {
+                    }
+                };
+            } else {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+                    if (el) {
+                        if (property == 'float') {
+                            property = 'cssFloat';
+                        }
+                        el.style[property] = val;
+                    } else {
+                    }
+                };
+            }
+
+        }(),
+        
+        /**
+         * Gets the current position of an element based on page coordinates. 
+         * Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getXY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM
+         * reference, or an Array of IDs and/or HTMLElements
+        * @return {Array} The XY position of the element(s)
+         */
+        getXY: function(el) {
+            return Y.Dom.batch(el, Y.Dom._getXY);
+        },
+
+        _canPosition: function(el) {
+            return ( Y.Dom._getStyle(el, 'display') !== 'none' && Y.Dom._inDoc(el) );
+        },
+
+        _getXY: function() {
+            if (document[DOCUMENT_ELEMENT][GET_BOUNDING_CLIENT_RECT]) {
+                return function(node) {
+                    var scrollLeft, scrollTop, box, doc,
+                        off1, off2, mode, bLeft, bTop,
+                        floor = Math.floor, // TODO: round?
+                        xy = false;
+
+                    if (Y.Dom._canPosition(node)) {
+                        box = node[GET_BOUNDING_CLIENT_RECT]();
+                        doc = node[OWNER_DOCUMENT];
+                        scrollLeft = Y.Dom.getDocumentScrollLeft(doc);
+                        scrollTop = Y.Dom.getDocumentScrollTop(doc);
+                        xy = [floor(box[LEFT]), floor(box[TOP])];
+
+                        if (isIE && UA.ie < 8) { // IE < 8: viewport off by 2
+                            off1 = 2;
+                            off2 = 2;
+                            mode = doc[COMPAT_MODE];
+
+                            if (UA.ie === 6) {
+                                if (mode !== _BACK_COMPAT) {
+                                    off1 = 0;
+                                    off2 = 0;
+                                }
+                            }
+                            
+                            if ((mode === _BACK_COMPAT)) {
+                                bLeft = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_LEFT_WIDTH);
+                                bTop = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_TOP_WIDTH);
+                                if (bLeft !== MEDIUM) {
+                                    off1 = parseInt(bLeft, 10);
+                                }
+                                if (bTop !== MEDIUM) {
+                                    off2 = parseInt(bTop, 10);
+                                }
+                            }
+                            
+                            xy[0] -= off1;
+                            xy[1] -= off2;
+
+                        }
+
+                        if ((scrollTop || scrollLeft)) {
+                            xy[0] += scrollLeft;
+                            xy[1] += scrollTop;
+                        }
+
+                        // gecko may return sub-pixel (non-int) values
+                        xy[0] = floor(xy[0]);
+                        xy[1] = floor(xy[1]);
+                    } else {
+                    }
+
+                    return xy;
+                };
+            } else {
+                return function(node) { // ff2, safari: manually calculate by crawling up offsetParents
+                    var docScrollLeft, docScrollTop,
+                        scrollTop, scrollLeft,
+                        bCheck,
+                        xy = false,
+                        parentNode = node;
+
+                    if  (Y.Dom._canPosition(node) ) {
+                        xy = [node[OFFSET_LEFT], node[OFFSET_TOP]];
+                        docScrollLeft = Y.Dom.getDocumentScrollLeft(node[OWNER_DOCUMENT]);
+                        docScrollTop = Y.Dom.getDocumentScrollTop(node[OWNER_DOCUMENT]);
+
+                        // TODO: refactor with !! or just falsey
+                        bCheck = ((isGecko || UA.webkit > 519) ? true : false);
+
+                        // TODO: worth refactoring for TOP/LEFT only?
+                        while ((parentNode = parentNode[OFFSET_PARENT])) {
+                            xy[0] += parentNode[OFFSET_LEFT];
+                            xy[1] += parentNode[OFFSET_TOP];
+                            if (bCheck) {
+                                xy = Y.Dom._calcBorders(parentNode, xy);
+                            }
+                        }
+
+                        // account for any scrolled ancestors
+                        if (Y.Dom._getStyle(node, POSITION) !== FIXED) {
+                            parentNode = node;
+
+                            while ((parentNode = parentNode[PARENT_NODE]) && parentNode[TAG_NAME]) {
+                                scrollTop = parentNode[SCROLL_TOP];
+                                scrollLeft = parentNode[SCROLL_LEFT];
+
+                                //Firefox does something funky with borders when overflow is not visible.
+                                if (isGecko && (Y.Dom._getStyle(parentNode, 'overflow') !== 'visible')) {
+                                        xy = Y.Dom._calcBorders(parentNode, xy);
+                                }
+
+                                if (scrollTop || scrollLeft) {
+                                    xy[0] -= scrollLeft;
+                                    xy[1] -= scrollTop;
+                                }
+                            }
+                            xy[0] += docScrollLeft;
+                            xy[1] += docScrollTop;
+
+                        } else {
+                            //Fix FIXED position -- add scrollbars
+                            if (isOpera) {
+                                xy[0] -= docScrollLeft;
+                                xy[1] -= docScrollTop;
+                            } else if (isSafari || isGecko) {
+                                xy[0] += docScrollLeft;
+                                xy[1] += docScrollTop;
+                            }
+                        }
+                        //Round the numbers so we get sane data back
+                        xy[0] = Math.floor(xy[0]);
+                        xy[1] = Math.floor(xy[1]);
+                    } else {
+                    }
+                    return xy;                
+                };
+            }
+        }(), // NOTE: Executing for loadtime branching
+        
+        /**
+         * Gets the current X position of an element based on page coordinates.  The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getX
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @return {Number | Array} The X position of the element(s)
+         */
+        getX: function(el) {
+            var f = function(el) {
+                return Y.Dom.getXY(el)[0];
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Gets the current Y position of an element based on page coordinates.  Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method getY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @return {Number | Array} The Y position of the element(s)
+         */
+        getY: function(el) {
+            var f = function(el) {
+                return Y.Dom.getXY(el)[1];
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Set the position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setXY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+        * @param {Array} pos Contains X & Y values for new position (coordinates are page-based)
+        * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
+         */
+        setXY: function(el, pos, noRetry) {
+            Y.Dom.batch(el, Y.Dom._setXY, { pos: pos, noRetry: noRetry });
+        },
+
+        _setXY: function(node, args) {
+            var pos = Y.Dom._getStyle(node, POSITION),
+                setStyle = Y.Dom.setStyle,
+                xy = args.pos,
+                noRetry = args.noRetry,
+
+                delta = [ // assuming pixels; if not we will have to retry
+                    parseInt( Y.Dom.getComputedStyle(node, LEFT), 10 ),
+                    parseInt( Y.Dom.getComputedStyle(node, TOP), 10 )
+                ],
+
+                currentXY,
+                newXY;
+        
+            if (pos == 'static') { // default to relative
+                pos = RELATIVE;
+                setStyle(node, POSITION, pos);
+            }
+
+            currentXY = Y.Dom._getXY(node);
+
+            if (!xy || currentXY === false) { // has to be part of doc to have xy
+                return false; 
+            }
+            
+            if ( isNaN(delta[0]) ) {// in case of 'auto'
+                delta[0] = (pos == RELATIVE) ? 0 : node[OFFSET_LEFT];
+            } 
+            if ( isNaN(delta[1]) ) { // in case of 'auto'
+                delta[1] = (pos == RELATIVE) ? 0 : node[OFFSET_TOP];
+            } 
+
+            if (xy[0] !== null) { // from setX
+                setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px');
+            }
+
+            if (xy[1] !== null) { // from setY
+                setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px');
+            }
+          
+            if (!noRetry) {
+                newXY = Y.Dom._getXY(node);
+
+                // if retry is true, try one more time if we miss 
+               if ( (xy[0] !== null && newXY[0] != xy[0]) || 
+                    (xy[1] !== null && newXY[1] != xy[1]) ) {
+                   Y.Dom._setXY(node, { pos: xy, noRetry: true });
+               }
+            }        
+
+        },
+        
+        /**
+         * Set the X position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setX
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {Int} x The value to use as the X coordinate for the element(s).
+         */
+        setX: function(el, x) {
+            Y.Dom.setXY(el, [x, null]);
+        },
+        
+        /**
+         * Set the Y position of an html element in page coordinates, regardless of how the element is positioned.
+         * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+        * @method setY
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @param {Int} x To use as the Y coordinate for the element(s).
+         */
+        setY: function(el, y) {
+            Y.Dom.setXY(el, [null, y]);
+        },
+        
+        /**
+         * Returns the region position of the given element.
+         * The element must be part of the DOM tree to have a region (display:none or elements not appended return false).
+        * @method getRegion
+        * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+        * @return {Region | Array} A Region or array of Region instances containing "top, left, bottom, right" member data.
+         */
+        getRegion: function(el) {
+            var f = function(el) {
+                var region = false;
+                if ( Y.Dom._canPosition(el) ) {
+                    region = Y.Region.getRegion(el);
+                } else {
+                }
+
+                return region;
+            };
+            
+            return Y.Dom.batch(el, f, Y.Dom, true);
+        },
+        
+        /**
+         * Returns the width of the client (viewport).
+        * @method getClientWidth
+        * @deprecated Now using getViewportWidth.  This interface left intact for back compat.
+        * @return {Int} The width of the viewable area of the page.
+         */
+        getClientWidth: function() {
+            return Y.Dom.getViewportWidth();
+        },
+        
+        /**
+         * Returns the height of the client (viewport).
+        * @method getClientHeight
+        * @deprecated Now using getViewportHeight.  This interface left intact for back compat.
+        * @return {Int} The height of the viewable area of the page.
+         */
+        getClientHeight: function() {
+            return Y.Dom.getViewportHeight();
+        },
+
+        /**
+         * Returns an array of HTMLElements with the given class.
+         * For optimized performance, include a tag and/or root node when possible.
+         * Note: This method operates against a live collection, so modifying the 
+         * collection in the callback (removing/appending nodes, etc.) will have
+         * side effects.  Instead you should iterate the returned nodes array,
+         * as you would with the native "getElementsByTagName" method. 
+        * @method getElementsByClassName
+        * @param {String} className The class name to match against
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point.
+         * This element is not included in the className scan.
+        * @param {Function} apply (optional) A function to apply to each element when found 
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Array} An array of elements that have the given class name
+         */
+        getElementsByClassName: function(className, tag, root, apply, o, overrides) {
+            tag = tag || '*';
+            root = (root) ? Y.Dom.get(root) : null || document; 
+            if (!root) {
+                return [];
+            }
+
+            var nodes = [],
+                elements = root.getElementsByTagName(tag),
+                hasClass = Y.Dom.hasClass;
+
+            for (var i = 0, len = elements.length; i < len; ++i) {
+                if ( hasClass(elements[i], className) ) {
+                    nodes[nodes.length] = elements[i];
+                }
+            }
+            
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
+            return nodes;
+        },
+
+        /**
+         * Determines whether an HTMLElement has the given className.
+        * @method hasClass
+        * @param {String | HTMLElement | Array} el The element or collection to test
+        * @param {String} className the class name to search for
+        * @return {Boolean | Array} A boolean value or array of boolean values
+         */
+        hasClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._hasClass, className);
+        },
+
+        _hasClass: function(el, className) {
+            var ret = false,
+                current;
+            
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                if (className.exec) {
+                    ret = className.test(current);
+                } else {
+                    ret = className && (SPACE + current + SPACE).
+                        indexOf(SPACE + className + SPACE) > -1;
+                }
+            } else {
+            }
+
+            return ret;
+        },
+    
+        /**
+         * Adds a class name to a given element or collection of elements.
+        * @method addClass         
+        * @param {String | HTMLElement | Array} el The element or collection to add the class to
+        * @param {String} className the class name to add to the class attribute
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        addClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._addClass, className);
+        },
+
+        _addClass: function(el, className) {
+            var ret = false,
+                current;
+
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                if ( !Y.Dom._hasClass(el, className) ) {
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className));
+                    ret = true;
+                }
+            } else {
+            }
+
+            return ret;
+        },
+    
+        /**
+         * Removes a class name from a given element or collection of elements.
+        * @method removeClass         
+        * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+        * @param {String} className the class name to remove from the class attribute
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        removeClass: function(el, className) {
+            return Y.Dom.batch(el, Y.Dom._removeClass, className);
+        },
+        
+        _removeClass: function(el, className) {
+            var ret = false,
+                current,
+                newClass,
+                attr;
+
+            if (el && className) {
+                current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                Y.Dom.setAttribute(el, CLASS_NAME, current.replace(Y.Dom._getClassRegex(className), EMPTY));
+
+                newClass = Y.Dom._getAttribute(el, CLASS_NAME);
+                if (current !== newClass) { // else nothing changed
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(newClass)); // trim after comparing to current class
+                    ret = true;
+
+                    if (Y.Dom._getAttribute(el, CLASS_NAME) === '') { // remove class attribute if empty
+                        attr = (el.hasAttribute && el.hasAttribute(_CLASS)) ? _CLASS : CLASS_NAME;
+                        el.removeAttribute(attr);
+                    }
+                }
+
+            } else {
+            }
+
+            return ret;
+        },
+        
+        /**
+         * Replace a class with another class for a given element or collection of elements.
+         * If no oldClassName is present, the newClassName is simply added.
+        * @method replaceClass  
+        * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+        * @param {String} oldClassName the class name to be replaced
+        * @param {String} newClassName the class name that will be replacing the old class name
+        * @return {Boolean | Array} A pass/fail boolean or array of booleans
+         */
+        replaceClass: function(el, oldClassName, newClassName) {
+            return Y.Dom.batch(el, Y.Dom._replaceClass, { from: oldClassName, to: newClassName });
+        },
+
+        _replaceClass: function(el, classObj) {
+            var className,
+                from,
+                to,
+                ret = false,
+                current;
+
+            if (el && classObj) {
+                from = classObj.from;
+                to = classObj.to;
+
+                if (!to) {
+                    ret = false;
+                }  else if (!from) { // just add if no "from"
+                    ret = Y.Dom._addClass(el, classObj.to);
+                } else if (from !== to) { // else nothing to replace
+                    // May need to lead with DBLSPACE?
+                    current = Y.Dom._getAttribute(el, CLASS_NAME) || EMPTY;
+                    className = (SPACE + current.replace(Y.Dom._getClassRegex(from), SPACE + to)).
+                               split(Y.Dom._getClassRegex(to));
+
+                    // insert to into what would have been the first occurrence slot
+                    className.splice(1, 0, SPACE + to);
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(className.join(EMPTY)));
+                    ret = true;
+                }
+            } else {
+            }
+
+            return ret;
+        },
+        
+        /**
+         * Returns an ID and applies it to the element "el", if provided.
+        * @method generateId  
+        * @param {String | HTMLElement | Array} el (optional) An optional element array of elements to add an ID to (no ID is added if one is already present).
+        * @param {String} prefix (optional) an optional prefix to use (defaults to "yui-gen").
+        * @return {String | Array} The generated ID, or array of generated IDs (or original ID if already present on an element)
+         */
+        generateId: function(el, prefix) {
+            prefix = prefix || 'yui-gen';
+
+            var f = function(el) {
+                if (el && el.id) { // do not override existing ID
+                    return el.id;
+                }
+
+                var id = prefix + YAHOO.env._id_counter++;
+
+                if (el) {
+                    if (el[OWNER_DOCUMENT] && el[OWNER_DOCUMENT].getElementById(id)) { // in case one already exists
+                        // use failed id plus prefix to help ensure uniqueness
+                        return Y.Dom.generateId(el, id + prefix);
+                    }
+                    el.id = id;
+                }
+                
+                return id;
+            };
+
+            // batch fails when no element, so just generate and return single ID
+            return Y.Dom.batch(el, f, Y.Dom, true) || f.apply(Y.Dom, arguments);
+        },
+        
+        /**
+         * Determines whether an HTMLElement is an ancestor of another HTML element in the DOM hierarchy.
+        * @method isAncestor
+        * @param {String | HTMLElement} haystack The possible ancestor
+        * @param {String | HTMLElement} needle The possible descendent
+        * @return {Boolean} Whether or not the haystack is an ancestor of needle
+         */
+        isAncestor: function(haystack, needle) {
+            haystack = Y.Dom.get(haystack);
+            needle = Y.Dom.get(needle);
+            
+            var ret = false;
+
+            if ( (haystack && needle) && (haystack[NODE_TYPE] && needle[NODE_TYPE]) ) {
+                if (haystack.contains && haystack !== needle) { // contains returns true when equal
+                    ret = haystack.contains(needle);
+                }
+                else if (haystack.compareDocumentPosition) { // gecko
+                    ret = !!(haystack.compareDocumentPosition(needle) & 16);
+                }
+            } else {
+            }
+            return ret;
+        },
+        
+        /**
+         * Determines whether an HTMLElement is present in the current document.
+        * @method inDocument         
+        * @param {String | HTMLElement} el The element to search for
+        * @param {Object} doc An optional document to search, defaults to element's owner document 
+        * @return {Boolean} Whether or not the element is present in the current document
+         */
+        inDocument: function(el, doc) {
+            return Y.Dom._inDoc(Y.Dom.get(el), doc);
+        },
+
+        _inDoc: function(el, doc) {
+            var ret = false;
+            if (el && el[TAG_NAME]) {
+                doc = doc || el[OWNER_DOCUMENT]; 
+                ret = Y.Dom.isAncestor(doc[DOCUMENT_ELEMENT], el);
+            } else {
+            }
+            return ret;
+        },
+        
+        /**
+         * Returns an array of HTMLElements that pass the test applied by supplied boolean method.
+         * For optimized performance, include a tag and/or root node when possible.
+         * Note: This method operates against a live collection, so modifying the 
+         * collection in the callback (removing/appending nodes, etc.) will have
+         * side effects.  Instead you should iterate the returned nodes array,
+         * as you would with the native "getElementsByTagName" method. 
+        * @method getElementsBy
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+        * @param {Function} apply (optional) A function to apply to each element when found 
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Array} Array of HTMLElements
+         */
+        getElementsBy: function(method, tag, root, apply, o, overrides, firstOnly) {
+            tag = tag || '*';
+            root = (root) ? Y.Dom.get(root) : null || document; 
+
+            if (!root) {
+                return [];
+            }
+
+            var nodes = [],
+                elements = root.getElementsByTagName(tag);
+            
+            for (var i = 0, len = elements.length; i < len; ++i) {
+                if ( method(elements[i]) ) {
+                    if (firstOnly) {
+                        nodes = elements[i]; 
+                        break;
+                    } else {
+                        nodes[nodes.length] = elements[i];
+                    }
+                }
+            }
+
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
+            
+            return nodes;
+        },
+        
+        /**
+         * Returns the first HTMLElement that passes the test applied by the supplied boolean method.
+        * @method getElementBy
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @param {String} tag (optional) The tag name of the elements being collected
+        * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+        * @return {HTMLElement}
+         */
+        getElementBy: function(method, tag, root) {
+            return Y.Dom.getElementsBy(method, tag, root, null, null, null, true); 
+        },
+
+        /**
+         * Runs the supplied method against each item in the Collection/Array.
+         * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ).
+        * @method batch
+        * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to
+        * @param {Function} method The method to apply to the element(s)
+        * @param {Any} o (optional) An optional arg that is passed to the supplied method
+        * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
+        * @return {Any | Array} The return value(s) from the supplied method
+         */
+        batch: function(el, method, o, overrides) {
+            var collection = [],
+                scope = (overrides) ? o : window;
+                
+            el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+            if (el && method) {
+                if (el[TAG_NAME] || el.length === undefined) { // element or not array-like 
+                    return method.call(scope, el, o);
+                } 
+
+                for (var i = 0; i < el.length; ++i) {
+                    collection[collection.length] = method.call(scope, el[i], o);
+                }
+            } else {
+                return false;
+            } 
+            return collection;
+        },
+        
+        /**
+         * Returns the height of the document.
+        * @method getDocumentHeight
+        * @return {Int} The height of the actual document (which includes the body and its margin).
+         */
+        getDocumentHeight: function() {
+            var scrollHeight = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollHeight : documentElement.scrollHeight,
+                h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
+
+            return h;
+        },
+        
+        /**
+         * Returns the width of the document.
+        * @method getDocumentWidth
+        * @return {Int} The width of the actual document (which includes the body and its margin).
+         */
+        getDocumentWidth: function() {
+            var scrollWidth = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollWidth : documentElement.scrollWidth,
+                w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
+            return w;
+        },
+
+        /**
+         * Returns the current height of the viewport.
+        * @method getViewportHeight
+        * @return {Int} The height of the viewable area of the page (excludes scrollbars).
+         */
+        getViewportHeight: function() {
+            var height = self.innerHeight, // Safari, Opera
+                mode = document[COMPAT_MODE];
+        
+            if ( (mode || isIE) && !isOpera ) { // IE, Gecko
+                height = (mode == CSS1_COMPAT) ?
+                        documentElement.clientHeight : // Standards
+                        document.body.clientHeight; // Quirks
+            }
+        
+            return height;
+        },
+        
+        /**
+         * Returns the current width of the viewport.
+        * @method getViewportWidth
+        * @return {Int} The width of the viewable area of the page (excludes scrollbars).
+         */
+        
+        getViewportWidth: function() {
+            var width = self.innerWidth,  // Safari
+                mode = document[COMPAT_MODE];
+            
+            if (mode || isIE) { // IE, Gecko, Opera
+                width = (mode == CSS1_COMPAT) ?
+                        documentElement.clientWidth : // Standards
+                        document.body.clientWidth; // Quirks
+            }
+            return width;
+        },
+
+       /**
+         * Returns the nearest ancestor that passes the test applied by supplied boolean method.
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+        * @method getAncestorBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+        * @return {Object} HTMLElement or null if not found
+         */
+        getAncestorBy: function(node, method) {
+            while ( (node = node[PARENT_NODE]) ) { // NOTE: assignment
+                if ( Y.Dom._testElement(node, method) ) {
+                    return node;
+                }
+            } 
+
+            return null;
+        },
+        
+        /**
+         * Returns the nearest ancestor with the given className.
+        * @method getAncestorByClassName
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @param {String} className
+        * @return {Object} HTMLElement
+         */
+        getAncestorByClassName: function(node, className) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                return null;
+            }
+            var method = function(el) { return Y.Dom.hasClass(el, className); };
+            return Y.Dom.getAncestorBy(node, method);
+        },
+
+        /**
+         * Returns the nearest ancestor with the given tagName.
+        * @method getAncestorByTagName
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @param {String} tagName
+        * @return {Object} HTMLElement
+         */
+        getAncestorByTagName: function(node, tagName) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                return null;
+            }
+            var method = function(el) {
+                 return el[TAG_NAME] && el[TAG_NAME].toUpperCase() == tagName.toUpperCase();
+            };
+
+            return Y.Dom.getAncestorBy(node, method);
+        },
+
+        /**
+         * Returns the previous sibling that is an HTMLElement. 
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+         * Returns the nearest HTMLElement sibling if no method provided.
+        * @method getPreviousSiblingBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test siblings
+         * that receives the sibling node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getPreviousSiblingBy: function(node, method) {
+            while (node) {
+                node = node.previousSibling;
+                if ( Y.Dom._testElement(node, method) ) {
+                    return node;
+                }
+            }
+            return null;
+        }, 
+
+        /**
+         * Returns the previous sibling that is an HTMLElement 
+        * @method getPreviousSibling
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getPreviousSibling: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                return null;
+            }
+
+            return Y.Dom.getPreviousSiblingBy(node);
+        }, 
+
+        /**
+         * Returns the next HTMLElement sibling that passes the boolean method. 
+         * For performance reasons, IDs are not accepted and argument validation omitted.
+         * Returns the nearest HTMLElement sibling if no method provided.
+        * @method getNextSiblingBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test siblings
+         * that receives the sibling node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getNextSiblingBy: function(node, method) {
+            while (node) {
+                node = node.nextSibling;
+                if ( Y.Dom._testElement(node, method) ) {
+                    return node;
+                }
+            }
+            return null;
+        }, 
+
+        /**
+         * Returns the next sibling that is an HTMLElement 
+        * @method getNextSibling
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getNextSibling: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                return null;
+            }
+
+            return Y.Dom.getNextSiblingBy(node);
+        }, 
+
+        /**
+         * Returns the first HTMLElement child that passes the test method. 
+        * @method getFirstChildBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getFirstChildBy: function(node, method) {
+            var child = ( Y.Dom._testElement(node.firstChild, method) ) ? node.firstChild : null;
+            return child || Y.Dom.getNextSiblingBy(node.firstChild, method);
+        }, 
+
+        /**
+         * Returns the first HTMLElement child. 
+        * @method getFirstChild
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getFirstChild: function(node, method) {
+            node = Y.Dom.get(node);
+            if (!node) {
+                return null;
+            }
+            return Y.Dom.getFirstChildBy(node);
+        }, 
+
+        /**
+         * Returns the last HTMLElement child that passes the test method. 
+        * @method getLastChildBy
+        * @param {HTMLElement} node The HTMLElement to use as the starting point 
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Object} HTMLElement or null if not found
+         */
+        getLastChildBy: function(node, method) {
+            if (!node) {
+                return null;
+            }
+            var child = ( Y.Dom._testElement(node.lastChild, method) ) ? node.lastChild : null;
+            return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method);
+        }, 
+
+        /**
+         * Returns the last HTMLElement child. 
+        * @method getLastChild
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Object} HTMLElement or null if not found
+         */
+        getLastChild: function(node) {
+            node = Y.Dom.get(node);
+            return Y.Dom.getLastChildBy(node);
+        }, 
+
+        /**
+         * Returns an array of HTMLElement childNodes that pass the test method. 
+        * @method getChildrenBy
+        * @param {HTMLElement} node The HTMLElement to start from
+        * @param {Function} method A boolean function used to test children
+         * that receives the node being tested as its only argument
+        * @return {Array} A static array of HTMLElements
+         */
+        getChildrenBy: function(node, method) {
+            var child = Y.Dom.getFirstChildBy(node, method),
+                children = child ? [child] : [];
+
+            Y.Dom.getNextSiblingBy(child, function(node) {
+                if ( !method || method(node) ) {
+                    children[children.length] = node;
+                }
+                return false; // fail test to collect all children
+            });
+
+            return children;
+        },
+ 
+        /**
+         * Returns an array of HTMLElement childNodes. 
+        * @method getChildren
+        * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point 
+        * @return {Array} A static array of HTMLElements
+         */
+        getChildren: function(node) {
+            node = Y.Dom.get(node);
+            if (!node) {
+            }
+
+            return Y.Dom.getChildrenBy(node);
+        },
+
+        /**
+         * Returns the left scroll value of the document 
+        * @method getDocumentScrollLeft
+        * @param {HTMLDocument} document (optional) The document to get the scroll value of
+        * @return {Int}  The amount that the document is scrolled to the left
+         */
+        getDocumentScrollLeft: function(doc) {
+            doc = doc || document;
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft);
+        }, 
+
+        /**
+         * Returns the top scroll value of the document 
+        * @method getDocumentScrollTop
+        * @param {HTMLDocument} document (optional) The document to get the scroll value of
+        * @return {Int}  The amount that the document is scrolled to the top
+         */
+        getDocumentScrollTop: function(doc) {
+            doc = doc || document;
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop);
+        },
+
+        /**
+         * Inserts the new node as the previous sibling of the reference node 
+        * @method insertBefore
+        * @param {String | HTMLElement} newNode The node to be inserted
+        * @param {String | HTMLElement} referenceNode The node to insert the new node before 
+        * @return {HTMLElement} The node that was inserted (or null if insert fails) 
+         */
+        insertBefore: function(newNode, referenceNode) {
+            newNode = Y.Dom.get(newNode); 
+            referenceNode = Y.Dom.get(referenceNode); 
+            
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
+                return null;
+            }       
+
+            return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode); 
+        },
+
+        /**
+         * Inserts the new node as the next sibling of the reference node 
+        * @method insertAfter
+        * @param {String | HTMLElement} newNode The node to be inserted
+        * @param {String | HTMLElement} referenceNode The node to insert the new node after 
+        * @return {HTMLElement} The node that was inserted (or null if insert fails) 
+         */
+        insertAfter: function(newNode, referenceNode) {
+            newNode = Y.Dom.get(newNode); 
+            referenceNode = Y.Dom.get(referenceNode); 
+            
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
+                return null;
+            }       
+
+            if (referenceNode.nextSibling) {
+                return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode.nextSibling); 
+            } else {
+                return referenceNode[PARENT_NODE].appendChild(newNode);
+            }
+        },
+
+        /**
+         * Creates a Region based on the viewport relative to the document. 
+        * @method getClientRegion
+        * @return {Region} A Region object representing the viewport which accounts for document scroll
+         */
+        getClientRegion: function() {
+            var t = Y.Dom.getDocumentScrollTop(),
+                l = Y.Dom.getDocumentScrollLeft(),
+                r = Y.Dom.getViewportWidth() + l,
+                b = Y.Dom.getViewportHeight() + t;
+
+            return new Y.Region(t, r, b, l);
+        },
+
+        /**
+         * Provides a normalized attribute interface. 
+        * @method setAttribute
+        * @param {String | HTMLElement} el The target element for the attribute.
+        * @param {String} attr The attribute to set.
+        * @param {String} val The value of the attribute.
+         */
+        setAttribute: function(el, attr, val) {
+            Y.Dom.batch(el, Y.Dom._setAttribute, { attr: attr, val: val });
+        },
+
+        _setAttribute: function(el, args) {
+            var attr = Y.Dom._toCamel(args.attr),
+                val = args.val;
+
+            if (el && el.setAttribute) {
+                if (Y.Dom.DOT_ATTRIBUTES[attr]) {
+                    el[attr] = val;
+                } else {
+                    attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+                    el.setAttribute(attr, val);
+                }
+            } else {
+            }
+        },
+
+        /**
+         * Provides a normalized attribute interface. 
+        * @method getAttribute
+        * @param {String | HTMLElement} el The target element for the attribute.
+        * @param {String} attr The attribute to get.
+        * @return {String} The current value of the attribute. 
+         */
+        getAttribute: function(el, attr) {
+            return Y.Dom.batch(el, Y.Dom._getAttribute, attr);
+        },
+
+
+        _getAttribute: function(el, attr) {
+            var val;
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+
+            if (el && el.getAttribute) {
+                val = el.getAttribute(attr, 2);
+            } else {
+            }
+
+            return val;
+        },
+
+        _toCamel: function(property) {
+            var c = propertyCache;
+
+            function tU(x,l) {
+                return l.toUpperCase();
+            }
+
+            return c[property] || (c[property] = property.indexOf('-') === -1 ? 
+                                    property :
+                                    property.replace( /-([a-z])/gi, tU ));
+        },
+
+        _getClassRegex: function(className) {
+            var re;
+            if (className !== undefined) { // allow empty string to pass
+                if (className.exec) { // already a RegExp
+                    re = className;
+                } else {
+                    re = reCache[className];
+                    if (!re) {
+                        // escape special chars (".", "[", etc.)
+                        className = className.replace(Y.Dom._patterns.CLASS_RE_TOKENS, '\\$1');
+                        re = reCache[className] = new RegExp(C_START + className + C_END, G);
+                    }
+                }
+            }
+            return re;
+        },
+
+        _patterns: {
+            ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
+            CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g
+        },
+
+
+        _testElement: function(node, method) {
+            return node && node[NODE_TYPE] == 1 && ( !method || method(node) );
+        },
+
+        _calcBorders: function(node, xy2) {
+            var t = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0,
+                l = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0;
+            if (isGecko) {
+                if (RE_TABLE.test(node[TAG_NAME])) {
+                    t = 0;
+                    l = 0;
+                }
+            }
+            xy2[0] += l;
+            xy2[1] += t;
+            return xy2;
+        }
+    };
+        
+    var _getComputedStyle = Y.Dom[GET_COMPUTED_STYLE];
+    // fix opera computedStyle default color unit (convert to rgb)
+    if (UA.opera) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+            if (RE_COLOR.test(att)) {
+                val = Y.Dom.Color.toRGB(val);
+            }
+
+            return val;
+        };
+
+    }
+
+    // safari converts transparent to rgba(), others use "transparent"
+    if (UA.webkit) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+
+            if (val === 'rgba(0, 0, 0, 0)') {
+                val = 'transparent'; 
+            }
+
+            return val;
+        };
+
+    }
+
+    if (UA.ie && UA.ie >= 8 && document.documentElement.hasAttribute) { // IE 8 standards
+        Y.Dom.DOT_ATTRIBUTES.type = true; // IE 8 errors on input.setAttribute('type')
+    }
+})();
+/**
+ * A region is a representation of an object on a grid.  It is defined
+ * by the top, right, bottom, left extents, so is rectangular by default.  If 
+ * other shapes are required, this class could be extended to support it.
+ * @namespace YAHOO.util
+ * @class Region
+ * @param {Int} t the top extent
+ * @param {Int} r the right extent
+ * @param {Int} b the bottom extent
+ * @param {Int} l the left extent
+ * @constructor
+ */
+YAHOO.util.Region = function(t, r, b, l) {
+
+    /**
+     * The region's top extent
+    * @property top
+    * @type Int
+     */
+    this.top = t;
+    
+    /**
+     * The region's top extent
+    * @property y
+    * @type Int
+     */
+    this.y = t;
+    
+    /**
+     * The region's top extent as index, for symmetry with set/getXY
+    * @property 1
+    * @type Int
+     */
+    this[1] = t;
+
+    /**
+     * The region's right extent
+    * @property right
+    * @type int
+     */
+    this.right = r;
+
+    /**
+     * The region's bottom extent
+    * @property bottom
+    * @type Int
+     */
+    this.bottom = b;
+
+    /**
+     * The region's left extent
+    * @property left
+    * @type Int
+     */
+    this.left = l;
+    
+    /**
+     * The region's left extent
+    * @property x
+    * @type Int
+     */
+    this.x = l;
+    
+    /**
+     * The region's left extent as index, for symmetry with set/getXY
+    * @property 0
+    * @type Int
+     */
+    this[0] = l;
+
+    /**
+     * The region's total width 
+    * @property width 
+    * @type Int
+     */
+    this.width = this.right - this.left;
+
+    /**
+     * The region's total height 
+    * @property height 
+    * @type Int
+     */
+    this.height = this.bottom - this.top;
+};
+
+/**
+ * Returns true if this region contains the region passed in
+ * @method contains
+ * @param  {Region}  region The region to evaluate
+ * @return {Boolean}        True if the region is contained with this region, 
+ *                          else false
+ */
+YAHOO.util.Region.prototype.contains = function(region) {
+    return ( region.left   >= this.left   && 
+             region.right  <= this.right  && 
+             region.top    >= this.top    && 
+             region.bottom <= this.bottom    );
+
+};
+
+/**
+ * Returns the area of the region
+ * @method getArea
+ * @return {Int} the region's area
+ */
+YAHOO.util.Region.prototype.getArea = function() {
+    return ( (this.bottom - this.top) * (this.right - this.left) );
+};
+
+/**
+ * Returns the region where the passed in region overlaps with this one
+ * @method intersect
+ * @param  {Region} region The region that intersects
+ * @return {Region}        The overlap region, or null if there is no overlap
+ */
+YAHOO.util.Region.prototype.intersect = function(region) {
+    var t = Math.max( this.top,    region.top    ),
+        r = Math.min( this.right,  region.right  ),
+        b = Math.min( this.bottom, region.bottom ),
+        l = Math.max( this.left,   region.left   );
+    
+    if (b >= t && r >= l) {
+        return new YAHOO.util.Region(t, r, b, l);
+    } else {
+        return null;
+    }
+};
+
+/**
+ * Returns the region representing the smallest region that can contain both
+ * the passed in region and this region.
+ * @method union
+ * @param  {Region} region The region that to create the union with
+ * @return {Region}        The union region
+ */
+YAHOO.util.Region.prototype.union = function(region) {
+    var t = Math.min( this.top,    region.top    ),
+        r = Math.max( this.right,  region.right  ),
+        b = Math.max( this.bottom, region.bottom ),
+        l = Math.min( this.left,   region.left   );
+
+    return new YAHOO.util.Region(t, r, b, l);
+};
+
+/**
+ * toString
+ * @method toString
+ * @return string the region properties
+ */
+YAHOO.util.Region.prototype.toString = function() {
+    return ( "Region {"    +
+             "top: "       + this.top    + 
+             ", right: "   + this.right  + 
+             ", bottom: "  + this.bottom + 
+             ", left: "    + this.left   + 
+             ", height: "  + this.height + 
+             ", width: "    + this.width   + 
+             "}" );
+};
+
+/**
+ * Returns a region that is occupied by the DOM element
+ * @method getRegion
+ * @param  {HTMLElement} el The element
+ * @return {Region}         The region that the element occupies
+ * @static
+ */
+YAHOO.util.Region.getRegion = function(el) {
+    var p = YAHOO.util.Dom.getXY(el),
+        t = p[1],
+        r = p[0] + el.offsetWidth,
+        b = p[1] + el.offsetHeight,
+        l = p[0];
+
+    return new YAHOO.util.Region(t, r, b, l);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * A point is a region that is special in that it represents a single point on 
+ * the grid.
+ * @namespace YAHOO.util
+ * @class Point
+ * @param {Int} x The X position of the point
+ * @param {Int} y The Y position of the point
+ * @constructor
+ * @extends YAHOO.util.Region
+ */
+YAHOO.util.Point = function(x, y) {
+   if (YAHOO.lang.isArray(x)) { // accept input from Dom.getXY, Event.getXY, etc.
+      y = x[1]; // dont blow away x yet
+      x = x[0];
+   }
+ 
+    YAHOO.util.Point.superclass.constructor.call(this, y, x, y, x);
+};
+
+YAHOO.extend(YAHOO.util.Point, YAHOO.util.Region);
+
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var Y = YAHOO.util, 
+    CLIENT_TOP = 'clientTop',
+    CLIENT_LEFT = 'clientLeft',
+    PARENT_NODE = 'parentNode',
+    RIGHT = 'right',
+    HAS_LAYOUT = 'hasLayout',
+    PX = 'px',
+    OPACITY = 'opacity',
+    AUTO = 'auto',
+    BORDER_LEFT_WIDTH = 'borderLeftWidth',
+    BORDER_TOP_WIDTH = 'borderTopWidth',
+    BORDER_RIGHT_WIDTH = 'borderRightWidth',
+    BORDER_BOTTOM_WIDTH = 'borderBottomWidth',
+    VISIBLE = 'visible',
+    TRANSPARENT = 'transparent',
+    HEIGHT = 'height',
+    WIDTH = 'width',
+    STYLE = 'style',
+    CURRENT_STYLE = 'currentStyle',
+
+// IE getComputedStyle
+// TODO: unit-less lineHeight (e.g. 1.22)
+    re_size = /^width|height$/,
+    re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
+
+    ComputedStyle = {
+        get: function(el, property) {
+            var value = '',
+                current = el[CURRENT_STYLE][property];
+
+            if (property === OPACITY) {
+                value = Y.Dom.getStyle(el, OPACITY);        
+            } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert
+                value = current;
+            } else if (Y.Dom.IE_COMPUTED[property]) { // use compute function
+                value = Y.Dom.IE_COMPUTED[property](el, property);
+            } else if (re_unit.test(current)) { // convert to pixel
+                value = Y.Dom.IE.ComputedStyle.getPixel(el, property);
+            } else {
+                value = current;
+            }
+
+            return value;
+        },
+
+        getOffset: function(el, prop) {
+            var current = el[CURRENT_STYLE][prop],                        // value of "width", "top", etc.
+                capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc.
+                offset = 'offset' + capped,                             // "offsetWidth", "offsetTop", etc.
+                pixel = 'pixel' + capped,                               // "pixelWidth", "pixelTop", etc.
+                value = '',
+                actual;
+
+            if (current == AUTO) {
+                actual = el[offset]; // offsetHeight/Top etc.
+                if (actual === undefined) { // likely "right" or "bottom"
+                    value = 0;
+                }
+
+                value = actual;
+                if (re_size.test(prop)) { // account for box model diff 
+                    el[STYLE][prop] = actual; 
+                    if (el[offset] > actual) {
+                        // the difference is padding + border (works in Standards & Quirks modes)
+                        value = actual - (el[offset] - actual);
+                    }
+                    el[STYLE][prop] = AUTO; // revert to auto
+                }
+            } else { // convert units to px
+                if (!el[STYLE][pixel] && !el[STYLE][prop]) { // need to map style.width to currentStyle (no currentStyle.pixelWidth)
+                    el[STYLE][prop] = current;              // no style.pixelWidth if no style.width
+                }
+                value = el[STYLE][pixel];
+            }
+            return value + PX;
+        },
+
+        getBorderWidth: function(el, property) {
+            // clientHeight/Width = paddingBox (e.g. offsetWidth - borderWidth)
+            // clientTop/Left = borderWidth
+            var value = null;
+            if (!el[CURRENT_STYLE][HAS_LAYOUT]) { // TODO: unset layout?
+                el[STYLE].zoom = 1; // need layout to measure client
+            }
+
+            switch(property) {
+                case BORDER_TOP_WIDTH:
+                    value = el[CLIENT_TOP];
+                    break;
+                case BORDER_BOTTOM_WIDTH:
+                    value = el.offsetHeight - el.clientHeight - el[CLIENT_TOP];
+                    break;
+                case BORDER_LEFT_WIDTH:
+                    value = el[CLIENT_LEFT];
+                    break;
+                case BORDER_RIGHT_WIDTH:
+                    value = el.offsetWidth - el.clientWidth - el[CLIENT_LEFT];
+                    break;
+            }
+            return value + PX;
+        },
+
+        getPixel: function(node, att) {
+            // use pixelRight to convert to px
+            var val = null,
+                styleRight = node[CURRENT_STYLE][RIGHT],
+                current = node[CURRENT_STYLE][att];
+
+            node[STYLE][RIGHT] = current;
+            val = node[STYLE].pixelRight;
+            node[STYLE][RIGHT] = styleRight; // revert
+
+            return val + PX;
+        },
+
+        getMargin: function(node, att) {
+            var val;
+            if (node[CURRENT_STYLE][att] == AUTO) {
+                val = 0 + PX;
+            } else {
+                val = Y.Dom.IE.ComputedStyle.getPixel(node, att);
+            }
+            return val;
+        },
+
+        getVisibility: function(node, att) {
+            var current;
+            while ( (current = node[CURRENT_STYLE]) && current[att] == 'inherit') { // NOTE: assignment in test
+                node = node[PARENT_NODE];
+            }
+            return (current) ? current[att] : VISIBLE;
+        },
+
+        getColor: function(node, att) {
+            return Y.Dom.Color.toRGB(node[CURRENT_STYLE][att]) || TRANSPARENT;
+        },
+
+        getBorderColor: function(node, att) {
+            var current = node[CURRENT_STYLE],
+                val = current[att] || current.color;
+            return Y.Dom.Color.toRGB(Y.Dom.Color.toHex(val));
+        }
+
+    },
+
+//fontSize: getPixelFont,
+    IEComputed = {};
+
+IEComputed.top = IEComputed.right = IEComputed.bottom = IEComputed.left = 
+        IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset;
+
+IEComputed.color = ComputedStyle.getColor;
+
+IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] =
+        IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] =
+        ComputedStyle.getBorderWidth;
+
+IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom =
+        IEComputed.marginLeft = ComputedStyle.getMargin;
+
+IEComputed.visibility = ComputedStyle.getVisibility;
+IEComputed.borderColor = IEComputed.borderTopColor =
+        IEComputed.borderRightColor = IEComputed.borderBottomColor =
+        IEComputed.borderLeftColor = ComputedStyle.getBorderColor;
+
+Y.Dom.IE_COMPUTED = IEComputed;
+Y.Dom.IE_ComputedStyle = ComputedStyle;
+})();
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var TO_STRING = 'toString',
+    PARSE_INT = parseInt,
+    RE = RegExp,
+    Y = YAHOO.util;
+
+Y.Dom.Color = {
+    KEYWORDS: {
+        black: '000',
+        silver: 'c0c0c0',
+        gray: '808080',
+        white: 'fff',
+        maroon: '800000',
+        red: 'f00',
+        purple: '800080',
+        fuchsia: 'f0f',
+        green: '008000',
+        lime: '0f0',
+        olive: '808000',
+        yellow: 'ff0',
+        navy: '000080',
+        blue: '00f',
+        teal: '008080',
+        aqua: '0ff'
+    },
+
+    re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
+    re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
+    re_hex3: /([0-9A-F])/gi,
+
+    toRGB: function(val) {
+        if (!Y.Dom.Color.re_RGB.test(val)) {
+            val = Y.Dom.Color.toHex(val);
+        }
+
+        if(Y.Dom.Color.re_hex.exec(val)) {
+            val = 'rgb(' + [
+                PARSE_INT(RE.$1, 16),
+                PARSE_INT(RE.$2, 16),
+                PARSE_INT(RE.$3, 16)
+            ].join(', ') + ')';
+        }
+        return val;
+    },
+
+    toHex: function(val) {
+        val = Y.Dom.Color.KEYWORDS[val] || val;
+        if (Y.Dom.Color.re_RGB.exec(val)) {
+            var r = (RE.$1.length === 1) ? '0' + RE.$1 : Number(RE.$1),
+                g = (RE.$2.length === 1) ? '0' + RE.$2 : Number(RE.$2),
+                b = (RE.$3.length === 1) ? '0' + RE.$3 : Number(RE.$3);
+
+            val = [
+                r[TO_STRING](16),
+                g[TO_STRING](16),
+                b[TO_STRING](16)
+            ].join('');
+        }
+
+        if (val.length < 6) {
+            val = val.replace(Y.Dom.Color.re_hex3, '$1$1');
+        }
+
+        if (val !== 'transparent' && val.indexOf('#') < 0) {
+            val = '#' + val;
+        }
+
+        return val.toLowerCase();
+    }
+};
+}());
+YAHOO.register("dom", YAHOO.util.Dom, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/dom/index.php
===================================================================
--- trunk/include/yui/dom/index.php	(nonexistent)
+++ trunk/include/yui/dom/index.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         yui
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version          $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/dom/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/dragdrop/README
===================================================================
--- trunk/include/yui/dragdrop/README	(nonexistent)
+++ trunk/include/yui/dragdrop/README	(revision 2)
@@ -0,0 +1,162 @@
+Drag and Drop Release Notes
+
+2.4.1
+No change
+
+2.4.0
+  * Added configuration option called "dragOnly". If dragOnly is set to true,
+    all event in the fireEvents method will not fire. These events are:
+        onInvalidDrop
+        b4DragOut & onDragOut
+        onDragEnter
+        b4DragOver & onDragOver
+        b4DragDrop & onDragDrop
+    This config option should be used to drag elements that have no need for
+        drop interaction. They are elements that just need to move.
+
+2.3.1
+  * No change
+
+2.3.0
+  * YAHOO.util.DragDropMgr.stopDrag is now public, and can be used to cancel
+    a drag in progress.  An optional "silent" flag was added to skip the
+    onMouseUp and endDrag functions when needed (eliminating the need to
+    supply mouseup page coordinates to these functions).
+  * DDProxy: the position of the proxy is not set before the drag is confirmed,
+    preventing auto-scroll from distrupting the user experience.
+  * Modified the default proxy so that IE properly registers the proxy as
+    the event target during the drag.
+  * If a dd instance is created using a dom reference rather than an id, that
+    reference is stored and used throughout making it possible to control
+    instances outside the current window.
+  * The document mousemove listener no longer returns true.
+
+2.2.2
+  * No change
+
+2.2.1
+
+  * Added YAHOO.util.DragDropMgr.interactionInfo, which is
+    a repository of interaction information accumulated during
+    the current event loop result, and accessible from the
+    handlers for the events.
+  * The region for the dragged element is now cached while
+    processing the drag and drop events
+  * List example supports moving an item to an empty list
+  * Fixed missing html tags in the examples
+  * The debug version now works when included before the logger is included.
+
+2.2.0
+
+  * onMouseDown event is executed before element positions are calculated
+  * refreshCache refreshes everything if groups array is not provided
+  * setX/setYConstraint doesn't fail when presented ints cast as strings
+
+0.12.2
+
+  * No change
+
+0.12.1
+
+  * Added a STRICT_INTERSECT drag and drop interaction mode.  This alters the
+    behavior of DDM::getBestMatch.  INTERSECT mode first tests the cursor
+    location, and if it is over the target that target wins, otherwise it
+    tests the overlap of the elements.  STRICT_INTERSECT mode tests only 
+    the overlap, the largest overlap wins.
+
+  * getBestMatch will work for targeted elements that have no overlap.
+
+0.12.0
+
+   * The logic to determine if a drag should be initiated has been isolated
+     to the clickValidator method.  This method can be overridden to provide
+     custom valdiation logic.  For example, it is possible to specify hotspots
+     of any dimension or shape.  The provided example shows how to make only
+     a circular region in the middle of the element initiate a drag.
+
+   * Added a new drag and drop event: onInvalidDrop.  This is executed when
+     the dragged element in dropped in a location without a target.  Previously
+     this condition could only detected by implementing handlers for three 
+     other events.
+
+   * Now accepts an element reference in lieu of an id.  Ids will
+     be generated if the element does not have one.
+
+   * Fixed horizontal autoscroll when scrollTop is zero.
+
+   * Added hasOuterHandles property to bypass the isOverTarget check in the
+     mousedown validation routine.  Fixes setOuterHandleElId.
+
+0.11.4
+
+   * YAHOO.util.DragDropMgr.swapNode now handles adjacent nodes properly
+   
+   * Fixed missing variable declarations
+
+0.11.3
+ 
+   * Fixed a JavaScript error that would be generated when trying to implement
+     DDProxy using the default settings and a tiny element.
+
+   * Fixed an error that resulted when constraints were applied to DragDrop 
+     instances.
+
+0.11.2
+
+   * Drag and drop will no longer interfere with selecting text on elements
+     that are not involved in drag and drop.
+
+   * The shared drag and drop proxy element now resizes correctly when autoResize
+     is enabled.
+
+0.11.1
+
+   * Fixes an issue where the setXY cache could get out of sync if the element's
+     offsetParent is changed during onDragDrop.
+
+0.11.0
+
+   * The Dom.util.setXY calculation for the initial placement of the dragged
+     element is cached during the drag, enhancing the drag performance.
+
+   * DDProxy no longer enforces having a single proxy element for all instances.
+     dragElId can be set in the config object in the constructor.  If the
+     element already exists it will use that element, otherwise a new one will
+     be created with that id.
+
+   * DDProxy->borderWidth has been removed. The value is calculated on the fly
+     instead.
+
+   * Added DragDrop->clearTicks and DragDrop->clearConstraints
+
+   * All drag and drop constructors now have an additional, optional parameter
+     call "config".  It is an object that can contain properties for a
+     number of configuration settings.
+
+   * Drag and drop will not be disabled for elements that cannot have their
+     location determined.
+
+   * isLegalTarget won't return dd objects that are not targetable.
+
+   * Added DragDrop->removeFromGroup.
+
+   * Constraints are now applied properly when determining which drag and drop
+     events should fire.
+
+
+0.10.0
+
+   * Improved the performance when in intersect mode
+
+   * It was possible for the drag and drop initialization to be skipped
+     for very slow loading pages.  This was fixed.
+
+   * New methods to exclude regions within your drag and drop element: 
+     addInvalidHandleId(), addInvalidHandleClass()
+
+   * Added an onAvailable handler that is executed after the initial state is set.
+
+   * Drag and drop is more forgiving when the implementer attempts to create the
+     instance prior to the element being in the document, but after the window
+     load event has fired.
+
Index: trunk/include/yui/dragdrop/dragdrop-debug.js
===================================================================
--- trunk/include/yui/dragdrop/dragdrop-debug.js	(nonexistent)
+++ trunk/include/yui/dragdrop/dragdrop-debug.js	(revision 2)
@@ -0,0 +1,3710 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The drag and drop utility provides a framework for building drag and drop
+ * applications.  In addition to enabling drag and drop for specific elements,
+ * the drag and drop elements are tracked by the manager class, and the
+ * interactions between the various elements are tracked during the drag and
+ * the implementing code is notified about these important moments.
+ * @module dragdrop
+ * @title Drag and Drop
+ * @requires yahoo,dom,event
+ * @namespace YAHOO.util
+ */
+
+// Only load the library once.  Rewriting the manager class would orphan 
+// existing drag and drop instances.
+if (!YAHOO.util.DragDropMgr) {
+
+/**
+ * DragDropMgr is a singleton that tracks the element interaction for 
+ * all DragDrop items in the window.  Generally, you will not call 
+ * this class directly, but it does have helper methods that could 
+ * be useful in your DragDrop implementations.
+ * @class DragDropMgr
+ * @static
+ */
+YAHOO.util.DragDropMgr = function() {
+
+    var Event = YAHOO.util.Event,
+        Dom = YAHOO.util.Dom;
+
+    return {
+        /**
+        * This property is used to turn on global use of the shim element on all DragDrop instances, defaults to false for backcompat. (Use: YAHOO.util.DDM.useShim = true)
+       * @property useShim
+       * @type Boolean
+       * @static
+        */
+        useShim: false,
+        /**
+        * This property is used to determine if the shim is active over the screen, default false.
+       * @private
+       * @property _shimActive
+       * @type Boolean
+       * @static
+        */
+        _shimActive: false,
+        /**
+        * This property is used when useShim is set on a DragDrop object to store the current state of DDM.useShim so it can be reset when a drag operation is done.
+       * @private
+       * @property _shimState
+       * @type Boolean
+       * @static
+        */
+        _shimState: false,
+        /**
+        * This property is used when useShim is set to true, it will set the opacity on the shim to .5 for debugging. Use: (YAHOO.util.DDM._debugShim = true;)
+       * @private
+       * @property _debugShim
+       * @type Boolean
+       * @static
+        */
+        _debugShim: false,
+        /**
+        * This method will create a shim element (giving it the id of yui-ddm-shim), it also attaches the mousemove and mouseup listeners to it and attaches a scroll listener on the window
+       * @private
+       * @method _sizeShim
+       * @static
+        */
+        _createShim: function() {
+            YAHOO.log('Creating Shim Element', 'info', 'DragDropMgr');
+            var s = document.createElement('div');
+            s.id = 'yui-ddm-shim';
+            if (document.body.firstChild) {
+                document.body.insertBefore(s, document.body.firstChild);
+            } else {
+                document.body.appendChild(s);
+            }
+            s.style.display = 'none';
+            s.style.backgroundColor = 'red';
+            s.style.position = 'absolute';
+            s.style.zIndex = '99999';
+            Dom.setStyle(s, 'opacity', '0');
+            this._shim = s;
+            Event.on(s, "mouseup",   this.handleMouseUp, this, true);
+            Event.on(s, "mousemove", this.handleMouseMove, this, true);
+            Event.on(window, 'scroll', this._sizeShim, this, true);
+        },
+        /**
+        * This method will size the shim, called from activate and on window scroll event
+       * @private
+       * @method _sizeShim
+       * @static
+        */
+        _sizeShim: function() {
+            if (this._shimActive) {
+                YAHOO.log('Sizing Shim', 'info', 'DragDropMgr');
+                var s = this._shim;
+                s.style.height = Dom.getDocumentHeight() + 'px';
+                s.style.width = Dom.getDocumentWidth() + 'px';
+                s.style.top = '0';
+                s.style.left = '0';
+            }
+        },
+        /**
+        * This method will create the shim element if needed, then show the shim element, size the element and set the _shimActive property to true
+       * @private
+       * @method _activateShim
+       * @static
+        */
+        _activateShim: function() {
+            if (this.useShim) {
+                YAHOO.log('Activating Shim', 'info', 'DragDropMgr');
+                if (!this._shim) {
+                    this._createShim();
+                }
+                this._shimActive = true;
+                var s = this._shim,
+                    o = '0';
+                if (this._debugShim) {
+                    o = '.5';
+                }
+                Dom.setStyle(s, 'opacity', o);
+                this._sizeShim();
+                s.style.display = 'block';
+            }
+        },
+        /**
+        * This method will hide the shim element and set the _shimActive property to false
+       * @private
+       * @method _deactivateShim
+       * @static
+        */
+        _deactivateShim: function() {
+            YAHOO.log('Deactivating Shim', 'info', 'DragDropMgr');
+            this._shim.style.display = 'none';
+            this._shimActive = false;
+        },
+        /**
+        * The HTML element created to use as a shim over the document to track mouse movements
+       * @private
+       * @property _shim
+       * @type HTMLElement
+       * @static
+        */
+        _shim: null,
+        /**
+         * Two dimensional Array of registered DragDrop objects.  The first 
+         * dimension is the DragDrop item group, the second the DragDrop 
+         * object.
+        * @property ids
+        * @type {string: string}
+        * @private
+        * @static
+         */
+        ids: {},
+
+        /**
+         * Array of element ids defined as drag handles.  Used to determine 
+         * if the element that generated the mousedown event is actually the 
+         * handle and not the html element itself.
+        * @property handleIds
+        * @type {string: string}
+        * @private
+        * @static
+         */
+        handleIds: {},
+
+        /**
+         * the DragDrop object that is currently being dragged
+        * @property dragCurrent
+        * @type DragDrop
+        * @private
+        * @static
+         **/
+        dragCurrent: null,
+
+        /**
+         * the DragDrop object(s) that are being hovered over
+        * @property dragOvers
+        * @type Array
+        * @private
+        * @static
+         */
+        dragOvers: {},
+
+        /**
+         * the X distance between the cursor and the object being dragged
+        * @property deltaX
+        * @type int
+        * @private
+        * @static
+         */
+        deltaX: 0,
+
+        /**
+         * the Y distance between the cursor and the object being dragged
+        * @property deltaY
+        * @type int
+        * @private
+        * @static
+         */
+        deltaY: 0,
+
+        /**
+         * Flag to determine if we should prevent the default behavior of the
+         * events we define. By default this is true, but this can be set to 
+         * false if you need the default behavior (not recommended)
+        * @property preventDefault
+        * @type boolean
+        * @static
+         */
+        preventDefault: true,
+
+        /**
+         * Flag to determine if we should stop the propagation of the events 
+         * we generate. This is true by default but you may want to set it to
+         * false if the html element contains other features that require the
+         * mouse click.
+        * @property stopPropagation
+        * @type boolean
+        * @static
+         */
+        stopPropagation: true,
+
+        /**
+         * Internal flag that is set to true when drag and drop has been
+         * initialized
+        * @property initialized
+        * @private
+        * @static
+         */
+        initialized: false,
+
+        /**
+         * All drag and drop can be disabled.
+        * @property locked
+        * @private
+        * @static
+         */
+        locked: false,
+
+        /**
+         * Provides additional information about the the current set of
+         * interactions.  Can be accessed from the event handlers. It
+         * contains the following properties:
+         *
+         *       out:       onDragOut interactions
+         *       enter:     onDragEnter interactions
+         *       over:      onDragOver interactions
+         *       drop:      onDragDrop interactions
+         *       point:     The location of the cursor
+         *       draggedRegion: The location of dragged element at the time
+         *                      of the interaction
+         *       sourceRegion: The location of the source elemtn at the time
+         *                     of the interaction
+         *       validDrop: boolean
+        * @property interactionInfo
+        * @type object
+        * @static
+         */
+        interactionInfo: null,
+
+        /**
+         * Called the first time an element is registered.
+        * @method init
+        * @private
+        * @static
+         */
+        init: function() {
+            this.initialized = true;
+        },
+
+        /**
+         * In point mode, drag and drop interaction is defined by the 
+         * location of the cursor during the drag/drop
+        * @property POINT
+        * @type int
+        * @static
+        * @final
+         */
+        POINT: 0,
+
+        /**
+         * In intersect mode, drag and drop interaction is defined by the 
+         * cursor position or the amount of overlap of two or more drag and 
+         * drop objects.
+        * @property INTERSECT
+        * @type int
+        * @static
+        * @final
+         */
+        INTERSECT: 1,
+
+        /**
+         * In intersect mode, drag and drop interaction is defined only by the 
+         * overlap of two or more drag and drop objects.
+        * @property STRICT_INTERSECT
+        * @type int
+        * @static
+        * @final
+         */
+        STRICT_INTERSECT: 2,
+
+        /**
+         * The current drag and drop mode.  Default: POINT
+        * @property mode
+        * @type int
+        * @static
+         */
+        mode: 0,
+
+        /**
+         * Runs method on all drag and drop objects
+        * @method _execOnAll
+        * @private
+        * @static
+         */
+        _execOnAll: function(sMethod, args) {
+            for (var i in this.ids) {
+                for (var j in this.ids[i]) {
+                    var oDD = this.ids[i][j];
+                    if (! this.isTypeOfDD(oDD)) {
+                        continue;
+                    }
+                    oDD[sMethod].apply(oDD, args);
+                }
+            }
+        },
+
+        /**
+         * Drag and drop initialization.  Sets up the global event handlers
+        * @method _onLoad
+        * @private
+        * @static
+         */
+        _onLoad: function() {
+
+            this.init();
+
+            YAHOO.log("DragDropMgr onload", "info", "DragDropMgr");
+            Event.on(document, "mouseup",   this.handleMouseUp, this, true);
+            Event.on(document, "mousemove", this.handleMouseMove, this, true);
+            Event.on(window,   "unload",    this._onUnload, this, true);
+            Event.on(window,   "resize",    this._onResize, this, true);
+            // Event.on(window,   "mouseout",    this._test);
+
+        },
+
+        /**
+         * Reset constraints on all drag and drop objs
+        * @method _onResize
+        * @private
+        * @static
+         */
+        _onResize: function(e) {
+            YAHOO.log("window resize", "info", "DragDropMgr");
+            this._execOnAll("resetConstraints", []);
+        },
+
+        /**
+         * Lock all drag and drop functionality
+        * @method lock
+        * @static
+         */
+        lock: function() { this.locked = true; },
+
+        /**
+         * Unlock all drag and drop functionality
+        * @method unlock
+        * @static
+         */
+        unlock: function() { this.locked = false; },
+
+        /**
+         * Is drag and drop locked?
+        * @method isLocked
+        * @return {boolean} True if drag and drop is locked, false otherwise.
+        * @static
+         */
+        isLocked: function() { return this.locked; },
+
+        /**
+         * Location cache that is set for all drag drop objects when a drag is
+         * initiated, cleared when the drag is finished.
+        * @property locationCache
+        * @private
+        * @static
+         */
+        locationCache: {},
+
+        /**
+         * Set useCache to false if you want to force object the lookup of each
+         * drag and drop linked element constantly during a drag.
+        * @property useCache
+        * @type boolean
+        * @static
+         */
+        useCache: true,
+
+        /**
+         * The number of pixels that the mouse needs to move after the 
+         * mousedown before the drag is initiated.  Default=3;
+        * @property clickPixelThresh
+        * @type int
+        * @static
+         */
+        clickPixelThresh: 3,
+
+        /**
+         * The number of milliseconds after the mousedown event to initiate the
+         * drag if we don't get a mouseup event. Default=1000
+        * @property clickTimeThresh
+        * @type int
+        * @static
+         */
+        clickTimeThresh: 1000,
+
+        /**
+         * Flag that indicates that either the drag pixel threshold or the 
+         * mousdown time threshold has been met
+        * @property dragThreshMet
+        * @type boolean
+        * @private
+        * @static
+         */
+        dragThreshMet: false,
+
+        /**
+         * Timeout used for the click time threshold
+        * @property clickTimeout
+        * @type Object
+        * @private
+        * @static
+         */
+        clickTimeout: null,
+
+        /**
+         * The X position of the mousedown event stored for later use when a 
+         * drag threshold is met.
+        * @property startX
+        * @type int
+        * @private
+        * @static
+         */
+        startX: 0,
+
+        /**
+         * The Y position of the mousedown event stored for later use when a 
+         * drag threshold is met.
+        * @property startY
+        * @type int
+        * @private
+        * @static
+         */
+        startY: 0,
+
+        /**
+         * Flag to determine if the drag event was fired from the click timeout and
+         * not the mouse move threshold.
+        * @property fromTimeout
+        * @type boolean
+        * @private
+        * @static
+         */
+        fromTimeout: false,
+
+        /**
+         * Each DragDrop instance must be registered with the DragDropMgr.  
+         * This is executed in DragDrop.init()
+        * @method regDragDrop
+        * @param {DragDrop} oDD the DragDrop object to register
+        * @param {String} sGroup the name of the group this element belongs to
+        * @static
+         */
+        regDragDrop: function(oDD, sGroup) {
+            if (!this.initialized) { this.init(); }
+            
+            if (!this.ids[sGroup]) {
+                this.ids[sGroup] = {};
+            }
+            this.ids[sGroup][oDD.id] = oDD;
+        },
+
+        /**
+         * Removes the supplied dd instance from the supplied group. Executed
+         * by DragDrop.removeFromGroup, so don't call this function directly.
+        * @method removeDDFromGroup
+        * @private
+        * @static
+         */
+        removeDDFromGroup: function(oDD, sGroup) {
+            if (!this.ids[sGroup]) {
+                this.ids[sGroup] = {};
+            }
+
+            var obj = this.ids[sGroup];
+            if (obj && obj[oDD.id]) {
+                delete obj[oDD.id];
+            }
+        },
+
+        /**
+         * Unregisters a drag and drop item.  This is executed in 
+         * DragDrop.unreg, use that method instead of calling this directly.
+        * @method _remove
+        * @private
+        * @static
+         */
+        _remove: function(oDD) {
+            for (var g in oDD.groups) {
+                if (g) {
+                    var item = this.ids[g];
+                    if (item && item[oDD.id]) {
+                        delete item[oDD.id];
+                    }
+                }
+                
+            }
+            delete this.handleIds[oDD.id];
+        },
+
+        /**
+         * Each DragDrop handle element must be registered.  This is done
+         * automatically when executing DragDrop.setHandleElId()
+        * @method regHandle
+        * @param {String} sDDId the DragDrop id this element is a handle for
+        * @param {String} sHandleId the id of the element that is the drag 
+         * handle
+        * @static
+         */
+        regHandle: function(sDDId, sHandleId) {
+            if (!this.handleIds[sDDId]) {
+                this.handleIds[sDDId] = {};
+            }
+            this.handleIds[sDDId][sHandleId] = sHandleId;
+        },
+
+        /**
+         * Utility function to determine if a given element has been 
+         * registered as a drag drop item.
+        * @method isDragDrop
+        * @param {String} id the element id to check
+        * @return {boolean} true if this element is a DragDrop item, 
+         * false otherwise
+        * @static
+         */
+        isDragDrop: function(id) {
+            return ( this.getDDById(id) ) ? true : false;
+        },
+
+        /**
+         * Returns the drag and drop instances that are in all groups the
+         * passed in instance belongs to.
+        * @method getRelated
+        * @param {DragDrop} p_oDD the obj to get related data for
+        * @param {boolean} bTargetsOnly if true, only return targetable objs
+        * @return {DragDrop[]} the related instances
+        * @static
+         */
+        getRelated: function(p_oDD, bTargetsOnly) {
+            var oDDs = [];
+            for (var i in p_oDD.groups) {
+                for (var j in this.ids[i]) {
+                    var dd = this.ids[i][j];
+                    if (! this.isTypeOfDD(dd)) {
+                        continue;
+                    }
+                    if (!bTargetsOnly || dd.isTarget) {
+                        oDDs[oDDs.length] = dd;
+                    }
+                }
+            }
+
+            return oDDs;
+        },
+
+        /**
+         * Returns true if the specified dd target is a legal target for 
+         * the specifice drag obj
+        * @method isLegalTarget
+        * @param {DragDrop} the drag obj
+        * @param {DragDrop} the target
+        * @return {boolean} true if the target is a legal target for the 
+         * dd obj
+        * @static
+         */
+        isLegalTarget: function (oDD, oTargetDD) {
+            var targets = this.getRelated(oDD, true);
+            for (var i=0, len=targets.length;i<len;++i) {
+                if (targets[i].id == oTargetDD.id) {
+                    return true;
+                }
+            }
+
+            return false;
+        },
+
+        /**
+         * My goal is to be able to transparently determine if an object is
+         * typeof DragDrop, and the exact subclass of DragDrop.  typeof 
+         * returns "object", oDD.constructor.toString() always returns
+         * "DragDrop" and not the name of the subclass.  So for now it just
+         * evaluates a well-known variable in DragDrop.
+        * @method isTypeOfDD
+        * @param {Object} the object to evaluate
+        * @return {boolean} true if typeof oDD = DragDrop
+        * @static
+         */
+        isTypeOfDD: function (oDD) {
+            return (oDD && oDD.__ygDragDrop);
+        },
+
+        /**
+         * Utility function to determine if a given element has been 
+         * registered as a drag drop handle for the given Drag Drop object.
+        * @method isHandle
+        * @param {String} id the element id to check
+        * @return {boolean} true if this element is a DragDrop handle, false 
+         * otherwise
+        * @static
+         */
+        isHandle: function(sDDId, sHandleId) {
+            return ( this.handleIds[sDDId] && 
+                            this.handleIds[sDDId][sHandleId] );
+        },
+
+        /**
+         * Returns the DragDrop instance for a given id
+        * @method getDDById
+        * @param {String} id the id of the DragDrop object
+        * @return {DragDrop} the drag drop object, null if it is not found
+        * @static
+         */
+        getDDById: function(id) {
+            for (var i in this.ids) {
+                if (this.ids[i][id]) {
+                    return this.ids[i][id];
+                }
+            }
+            return null;
+        },
+
+        /**
+         * Fired after a registered DragDrop object gets the mousedown event.
+         * Sets up the events required to track the object being dragged
+        * @method handleMouseDown
+        * @param {Event} e the event
+        * @param oDD the DragDrop object being dragged
+        * @private
+        * @static
+         */
+        handleMouseDown: function(e, oDD) {
+            //this._activateShim();
+
+            this.currentTarget = YAHOO.util.Event.getTarget(e);
+
+            this.dragCurrent = oDD;
+
+            var el = oDD.getEl();
+
+            // track start position
+            this.startX = YAHOO.util.Event.getPageX(e);
+            this.startY = YAHOO.util.Event.getPageY(e);
+
+            this.deltaX = this.startX - el.offsetLeft;
+            this.deltaY = this.startY - el.offsetTop;
+
+            this.dragThreshMet = false;
+
+            this.clickTimeout = setTimeout( 
+                    function() { 
+                        var DDM = YAHOO.util.DDM;
+                        DDM.startDrag(DDM.startX, DDM.startY);
+                        DDM.fromTimeout = true;
+                    }, 
+                    this.clickTimeThresh );
+        },
+
+        /**
+         * Fired when either the drag pixel threshold or the mousedown hold 
+         * time threshold has been met.
+        * @method startDrag
+        * @param x {int} the X position of the original mousedown
+        * @param y {int} the Y position of the original mousedown
+        * @static
+         */
+        startDrag: function(x, y) {
+            if (this.dragCurrent && this.dragCurrent.useShim) {
+                this._shimState = this.useShim;
+                this.useShim = true;
+            }
+            this._activateShim();
+            YAHOO.log("firing drag start events", "info", "DragDropMgr");
+            clearTimeout(this.clickTimeout);
+            var dc = this.dragCurrent;
+            if (dc && dc.events.b4StartDrag) {
+                dc.b4StartDrag(x, y);
+                dc.fireEvent('b4StartDragEvent', { x: x, y: y });
+            }
+            if (dc && dc.events.startDrag) {
+                dc.startDrag(x, y);
+                dc.fireEvent('startDragEvent', { x: x, y: y });
+            }
+            this.dragThreshMet = true;
+        },
+
+        /**
+         * Internal function to handle the mouseup event.  Will be invoked 
+         * from the context of the document.
+        * @method handleMouseUp
+        * @param {Event} e the event
+        * @private
+        * @static
+         */
+        handleMouseUp: function(e) {
+            if (this.dragCurrent) {
+                clearTimeout(this.clickTimeout);
+
+                if (this.dragThreshMet) {
+                    YAHOO.log("mouseup detected - completing drag", "info", "DragDropMgr");
+                    if (this.fromTimeout) {
+                        YAHOO.log('fromTimeout is true (mouse didn\'t move), call handleMouseMove so we can get the dragOver event', 'info', 'DragDropMgr');
+                        this.fromTimeout = false;
+                        this.handleMouseMove(e);
+                    }
+                    this.fromTimeout = false;
+                    this.fireEvents(e, true);
+                } else {
+                    YAHOO.log("drag threshold not met", "info", "DragDropMgr");
+                }
+
+                this.stopDrag(e);
+
+                this.stopEvent(e);
+            }
+        },
+
+        /**
+         * Utility to stop event propagation and event default, if these 
+         * features are turned on.
+        * @method stopEvent
+        * @param {Event} e the event as returned by this.getEvent()
+        * @static
+         */
+        stopEvent: function(e) {
+            if (this.stopPropagation) {
+                YAHOO.util.Event.stopPropagation(e);
+            }
+
+            if (this.preventDefault) {
+                YAHOO.util.Event.preventDefault(e);
+            }
+        },
+
+        /** 
+         * Ends the current drag, cleans up the state, and fires the endDrag
+         * and mouseUp events.  Called internally when a mouseup is detected
+         * during the drag.  Can be fired manually during the drag by passing
+         * either another event (such as the mousemove event received in onDrag)
+         * or a fake event with pageX and pageY defined (so that endDrag and
+         * onMouseUp have usable position data.).  Alternatively, pass true
+         * for the silent parameter so that the endDrag and onMouseUp events
+         * are skipped (so no event data is needed.)
+         *
+        * @method stopDrag
+        * @param {Event} e the mouseup event, another event (or a fake event) 
+         *                  with pageX and pageY defined, or nothing if the 
+         *                  silent parameter is true
+        * @param {boolean} silent skips the enddrag and mouseup events if true
+        * @static
+         */
+        stopDrag: function(e, silent) {
+            // YAHOO.log("mouseup - removing event handlers");
+            var dc = this.dragCurrent;
+            // Fire the drag end event for the item that was dragged
+            if (dc && !silent) {
+                if (this.dragThreshMet) {
+                    YAHOO.log("firing endDrag events", "info", "DragDropMgr");
+                    if (dc.events.b4EndDrag) {
+                        dc.b4EndDrag(e);
+                        dc.fireEvent('b4EndDragEvent', { e: e });
+                    }
+                    if (dc.events.endDrag) {
+                        dc.endDrag(e);
+                        dc.fireEvent('endDragEvent', { e: e });
+                    }
+                }
+                if (dc.events.mouseUp) {
+                    YAHOO.log("firing dragdrop onMouseUp event", "info", "DragDropMgr");
+                    dc.onMouseUp(e);
+                    dc.fireEvent('mouseUpEvent', { e: e });
+                }
+            }
+
+            if (this._shimActive) {
+                this._deactivateShim();
+                if (this.dragCurrent && this.dragCurrent.useShim) {
+                    this.useShim = this._shimState;
+                    this._shimState = false;
+                }
+            }
+
+            this.dragCurrent = null;
+            this.dragOvers = {};
+        },
+
+        /** 
+         * Internal function to handle the mousemove event.  Will be invoked 
+         * from the context of the html element.
+         *
+        * @TODO figure out what we can do about mouse events lost when the 
+         * user drags objects beyond the window boundary.  Currently we can 
+         * detect this in internet explorer by verifying that the mouse is 
+         * down during the mousemove event.  Firefox doesn't give us the 
+         * button state on the mousemove event.
+        * @method handleMouseMove
+        * @param {Event} e the event
+        * @private
+        * @static
+         */
+        handleMouseMove: function(e) {
+            //YAHOO.log("handlemousemove");
+
+            var dc = this.dragCurrent;
+            if (dc) {
+                // YAHOO.log("no current drag obj");
+
+                // var button = e.which || e.button;
+                // YAHOO.log("which: " + e.which + ", button: "+ e.button);
+
+                // check for IE mouseup outside of page boundary
+                if (YAHOO.util.Event.isIE && !e.button) {
+                    YAHOO.log("button failure", "info", "DragDropMgr");
+                    this.stopEvent(e);
+                    return this.handleMouseUp(e);
+                } else {
+                    if (e.clientX < 0 || e.clientY < 0) {
+                        //This will stop the element from leaving the viewport in FF, Opera & Safari
+                        //Not turned on yet
+                        //YAHOO.log("Either clientX or clientY is negative, stop the event.", "info", "DragDropMgr");
+                        //this.stopEvent(e);
+                        //return false;
+                    }
+                }
+
+                if (!this.dragThreshMet) {
+                    var diffX = Math.abs(this.startX - YAHOO.util.Event.getPageX(e));
+                    var diffY = Math.abs(this.startY - YAHOO.util.Event.getPageY(e));
+                    // YAHOO.log("diffX: " + diffX + "diffY: " + diffY);
+                    if (diffX > this.clickPixelThresh || 
+                                diffY > this.clickPixelThresh) {
+                        YAHOO.log("pixel threshold met", "info", "DragDropMgr");
+                        this.startDrag(this.startX, this.startY);
+                    }
+                }
+
+                if (this.dragThreshMet) {
+                    if (dc && dc.events.b4Drag) {
+                        dc.b4Drag(e);
+                        dc.fireEvent('b4DragEvent', { e: e});
+                    }
+                    if (dc && dc.events.drag) {
+                        dc.onDrag(e);
+                        dc.fireEvent('dragEvent', { e: e});
+                    }
+                    if (dc) {
+                        this.fireEvents(e, false);
+                    }
+                }
+
+                this.stopEvent(e);
+            }
+        },
+        
+        /**
+         * Iterates over all of the DragDrop elements to find ones we are 
+         * hovering over or dropping on
+        * @method fireEvents
+        * @param {Event} e the event
+        * @param {boolean} isDrop is this a drop op or a mouseover op?
+        * @private
+        * @static
+         */
+        fireEvents: function(e, isDrop) {
+            var dc = this.dragCurrent;
+
+            // If the user did the mouse up outside of the window, we could 
+            // get here even though we have ended the drag.
+            // If the config option dragOnly is true, bail out and don't fire the events
+            if (!dc || dc.isLocked() || dc.dragOnly) {
+                return;
+            }
+
+            var x = YAHOO.util.Event.getPageX(e),
+                y = YAHOO.util.Event.getPageY(e),
+                pt = new YAHOO.util.Point(x,y),
+                pos = dc.getTargetCoord(pt.x, pt.y),
+                el = dc.getDragEl(),
+                events = ['out', 'over', 'drop', 'enter'],
+                curRegion = new YAHOO.util.Region( pos.y, 
+                                               pos.x + el.offsetWidth,
+                                               pos.y + el.offsetHeight, 
+                                               pos.x ),
+            
+                oldOvers = [], // cache the previous dragOver array
+                inGroupsObj  = {},
+                inGroups  = [],
+                data = {
+                    outEvts: [],
+                    overEvts: [],
+                    dropEvts: [],
+                    enterEvts: []
+                };
+
+
+            // Check to see if the object(s) we were hovering over is no longer 
+            // being hovered over so we can fire the onDragOut event
+            for (var i in this.dragOvers) {
+
+                var ddo = this.dragOvers[i];
+
+                if (! this.isTypeOfDD(ddo)) {
+                    continue;
+                }
+                if (! this.isOverTarget(pt, ddo, this.mode, curRegion)) {
+                    data.outEvts.push( ddo );
+                }
+
+                oldOvers[i] = true;
+                delete this.dragOvers[i];
+            }
+
+            for (var sGroup in dc.groups) {
+                // YAHOO.log("Processing group " + sGroup);
+                
+                if ("string" != typeof sGroup) {
+                    continue;
+                }
+
+                for (i in this.ids[sGroup]) {
+                    var oDD = this.ids[sGroup][i];
+                    if (! this.isTypeOfDD(oDD)) {
+                        continue;
+                    }
+
+                    if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
+                        if (this.isOverTarget(pt, oDD, this.mode, curRegion)) {
+                            inGroupsObj[sGroup] = true;
+                            // look for drop interactions
+                            if (isDrop) {
+                                data.dropEvts.push( oDD );
+                            // look for drag enter and drag over interactions
+                            } else {
+
+                                // initial drag over: dragEnter fires
+                                if (!oldOvers[oDD.id]) {
+                                    data.enterEvts.push( oDD );
+                                // subsequent drag overs: dragOver fires
+                                } else {
+                                    data.overEvts.push( oDD );
+                                }
+
+                                this.dragOvers[oDD.id] = oDD;
+                            }
+                        }
+                    }
+                }
+            }
+
+            this.interactionInfo = {
+                out:       data.outEvts,
+                enter:     data.enterEvts,
+                over:      data.overEvts,
+                drop:      data.dropEvts,
+                point:     pt,
+                draggedRegion:    curRegion,
+                sourceRegion: this.locationCache[dc.id],
+                validDrop: isDrop
+            };
+
+            
+            for (var inG in inGroupsObj) {
+                inGroups.push(inG);
+            }
+
+            // notify about a drop that did not find a target
+            if (isDrop && !data.dropEvts.length) {
+                YAHOO.log(dc.id + " dropped, but not on a target", "info", "DragDropMgr");
+                this.interactionInfo.validDrop = false;
+                if (dc.events.invalidDrop) {
+                    dc.onInvalidDrop(e);
+                    dc.fireEvent('invalidDropEvent', { e: e });
+                }
+            }
+            for (i = 0; i < events.length; i++) {
+                var tmp = null;
+                if (data[events[i] + 'Evts']) {
+                    tmp = data[events[i] + 'Evts'];
+                }
+                if (tmp && tmp.length) {
+                    var type = events[i].charAt(0).toUpperCase() + events[i].substr(1),
+                        ev = 'onDrag' + type,
+                        b4 = 'b4Drag' + type,
+                        cev = 'drag' + type + 'Event',
+                        check = 'drag' + type;
+                    if (this.mode) {
+                        YAHOO.log(dc.id + ' ' + ev + ': ' + tmp, "info", "DragDropMgr");
+                        if (dc.events[b4]) {
+                            dc[b4](e, tmp, inGroups);
+                            dc.fireEvent(b4 + 'Event', { event: e, info: tmp, group: inGroups });
+                            
+                        }
+                        if (dc.events[check]) {
+                            dc[ev](e, tmp, inGroups);
+                            dc.fireEvent(cev, { event: e, info: tmp, group: inGroups });
+                        }
+                    } else {
+                        for (var b = 0, len = tmp.length; b < len; ++b) {
+                            YAHOO.log(dc.id + ' ' + ev + ': ' + tmp[b].id, "info", "DragDropMgr");
+                            if (dc.events[b4]) {
+                                dc[b4](e, tmp[b].id, inGroups[0]);
+                                dc.fireEvent(b4 + 'Event', { event: e, info: tmp[b].id, group: inGroups[0] });
+                            }
+                            if (dc.events[check]) {
+                                dc[ev](e, tmp[b].id, inGroups[0]);
+                                dc.fireEvent(cev, { event: e, info: tmp[b].id, group: inGroups[0] });
+                            }
+                        }
+                    }
+                }
+            }
+        },
+
+        /**
+         * Helper function for getting the best match from the list of drag 
+         * and drop objects returned by the drag and drop events when we are 
+         * in INTERSECT mode.  It returns either the first object that the 
+         * cursor is over, or the object that has the greatest overlap with 
+         * the dragged element.
+        * @method getBestMatch
+        * @param  {DragDrop[]} dds The array of drag and drop objects 
+         * targeted
+        * @return {DragDrop}       The best single match
+        * @static
+         */
+        getBestMatch: function(dds) {
+            var winner = null;
+
+            var len = dds.length;
+
+            if (len == 1) {
+                winner = dds[0];
+            } else {
+                // Loop through the targeted items
+                for (var i=0; i<len; ++i) {
+                    var dd = dds[i];
+                    // If the cursor is over the object, it wins.  If the 
+                    // cursor is over multiple matches, the first one we come
+                    // to wins.
+                    if (this.mode == this.INTERSECT && dd.cursorIsOver) {
+                        winner = dd;
+                        break;
+                    // Otherwise the object with the most overlap wins
+                    } else {
+                        if (!winner || !winner.overlap || (dd.overlap &&
+                            winner.overlap.getArea() < dd.overlap.getArea())) {
+                            winner = dd;
+                        }
+                    }
+                }
+            }
+
+            return winner;
+        },
+
+        /**
+         * Refreshes the cache of the top-left and bottom-right points of the 
+         * drag and drop objects in the specified group(s).  This is in the
+         * format that is stored in the drag and drop instance, so typical 
+         * usage is:
+         * <code>
+         * YAHOO.util.DragDropMgr.refreshCache(ddinstance.groups);
+         * </code>
+         * Alternatively:
+         * <code>
+         * YAHOO.util.DragDropMgr.refreshCache({group1:true, group2:true});
+         * </code>
+        * @TODO this really should be an indexed array.  Alternatively this
+         * method could accept both.
+        * @method refreshCache
+        * @param {Object} groups an associative array of groups to refresh
+        * @static
+         */
+        refreshCache: function(groups) {
+            YAHOO.log("refreshing element location cache", "info", "DragDropMgr");
+
+            // refresh everything if group array is not provided
+            var g = groups || this.ids;
+
+            for (var sGroup in g) {
+                if ("string" != typeof sGroup) {
+                    continue;
+                }
+                for (var i in this.ids[sGroup]) {
+                    var oDD = this.ids[sGroup][i];
+
+                    if (this.isTypeOfDD(oDD)) {
+                        var loc = this.getLocation(oDD);
+                        if (loc) {
+                            this.locationCache[oDD.id] = loc;
+                        } else {
+                            delete this.locationCache[oDD.id];
+YAHOO.log("Could not get the loc for " + oDD.id, "warn", "DragDropMgr");
+                        }
+                    }
+                }
+            }
+        },
+
+        /**
+         * This checks to make sure an element exists and is in the DOM.  The
+         * main purpose is to handle cases where innerHTML is used to remove
+         * drag and drop objects from the DOM.  IE provides an 'unspecified
+         * error' when trying to access the offsetParent of such an element
+        * @method verifyEl
+        * @param {HTMLElement} el the element to check
+        * @return {boolean} true if the element looks usable
+        * @static
+         */
+        verifyEl: function(el) {
+            try {
+                if (el) {
+                    var parent = el.offsetParent;
+                    if (parent) {
+                        return true;
+                    }
+                }
+            } catch(e) {
+                YAHOO.log("detected problem with an element", "info", "DragDropMgr");
+            }
+
+            return false;
+        },
+        
+        /**
+         * Returns a Region object containing the drag and drop element's position
+         * and size, including the padding configured for it
+        * @method getLocation
+        * @param {DragDrop} oDD the drag and drop object to get the 
+         *                       location for
+        * @return {YAHOO.util.Region} a Region object representing the total area
+         *                             the element occupies, including any padding
+         *                             the instance is configured for.
+        * @static
+         */
+        getLocation: function(oDD) {
+            if (! this.isTypeOfDD(oDD)) {
+                YAHOO.log(oDD + " is not a DD obj", "info", "DragDropMgr");
+                return null;
+            }
+
+            var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
+
+            try {
+                pos= YAHOO.util.Dom.getXY(el);
+            } catch (e) { }
+
+            if (!pos) {
+                YAHOO.log("getXY failed", "info", "DragDropMgr");
+                return null;
+            }
+
+            x1 = pos[0];
+            x2 = x1 + el.offsetWidth;
+            y1 = pos[1];
+            y2 = y1 + el.offsetHeight;
+
+            t = y1 - oDD.padding[0];
+            r = x2 + oDD.padding[1];
+            b = y2 + oDD.padding[2];
+            l = x1 - oDD.padding[3];
+
+            return new YAHOO.util.Region( t, r, b, l );
+        },
+
+        /**
+         * Checks the cursor location to see if it over the target
+        * @method isOverTarget
+        * @param {YAHOO.util.Point} pt The point to evaluate
+        * @param {DragDrop} oTarget the DragDrop object we are inspecting
+        * @param {boolean} intersect true if we are in intersect mode
+        * @param {YAHOO.util.Region} pre-cached location of the dragged element
+        * @return {boolean} true if the mouse is over the target
+        * @private
+        * @static
+         */
+        isOverTarget: function(pt, oTarget, intersect, curRegion) {
+            // use cache if available
+            var loc = this.locationCache[oTarget.id];
+            if (!loc || !this.useCache) {
+                YAHOO.log("cache not populated", "info", "DragDropMgr");
+                loc = this.getLocation(oTarget);
+                this.locationCache[oTarget.id] = loc;
+
+                YAHOO.log("cache: " + loc, "info", "DragDropMgr");
+            }
+
+            if (!loc) {
+                YAHOO.log("could not get the location of the element", "info", "DragDropMgr");
+                return false;
+            }
+
+            //YAHOO.log("loc: " + loc + ", pt: " + pt);
+            oTarget.cursorIsOver = loc.contains( pt );
+
+            // DragDrop is using this as a sanity check for the initial mousedown
+            // in this case we are done.  In POINT mode, if the drag obj has no
+            // contraints, we are done. Otherwise we need to evaluate the 
+            // region the target as occupies to determine if the dragged element
+            // overlaps with it.
+            
+            var dc = this.dragCurrent;
+            if (!dc || (!intersect && !dc.constrainX && !dc.constrainY)) {
+
+                //if (oTarget.cursorIsOver) {
+                    //YAHOO.log("over " + oTarget + ", " + loc + ", " + pt, "warn");
+                //}
+                return oTarget.cursorIsOver;
+            }
+
+            oTarget.overlap = null;
+
+
+            // Get the current location of the drag element, this is the
+            // location of the mouse event less the delta that represents
+            // where the original mousedown happened on the element.  We
+            // need to consider constraints and ticks as well.
+
+            if (!curRegion) {
+                var pos = dc.getTargetCoord(pt.x, pt.y);
+                var el = dc.getDragEl();
+                curRegion = new YAHOO.util.Region( pos.y, 
+                                                   pos.x + el.offsetWidth,
+                                                   pos.y + el.offsetHeight, 
+                                                   pos.x );
+            }
+
+            var overlap = curRegion.intersect(loc);
+
+            if (overlap) {
+                oTarget.overlap = overlap;
+                return (intersect) ? true : oTarget.cursorIsOver;
+            } else {
+                return false;
+            }
+        },
+
+        /**
+         * unload event handler
+        * @method _onUnload
+        * @private
+        * @static
+         */
+        _onUnload: function(e, me) {
+            this.unregAll();
+        },
+
+        /**
+         * Cleans up the drag and drop events and objects.
+        * @method unregAll
+        * @private
+        * @static
+         */
+        unregAll: function() {
+            YAHOO.log("unregister all", "info", "DragDropMgr");
+
+            if (this.dragCurrent) {
+                this.stopDrag();
+                this.dragCurrent = null;
+            }
+
+            this._execOnAll("unreg", []);
+
+            //for (var i in this.elementCache) {
+                //delete this.elementCache[i];
+            //}
+            //this.elementCache = {};
+
+            this.ids = {};
+        },
+
+        /**
+         * A cache of DOM elements
+        * @property elementCache
+        * @private
+        * @static
+        * @deprecated elements are not cached now
+         */
+        elementCache: {},
+        
+        /**
+         * Get the wrapper for the DOM element specified
+        * @method getElWrapper
+        * @param {String} id the id of the element to get
+        * @return {YAHOO.util.DDM.ElementWrapper} the wrapped element
+        * @private
+        * @deprecated This wrapper isn't that useful
+        * @static
+         */
+        getElWrapper: function(id) {
+            var oWrapper = this.elementCache[id];
+            if (!oWrapper || !oWrapper.el) {
+                oWrapper = this.elementCache[id] = 
+                    new this.ElementWrapper(YAHOO.util.Dom.get(id));
+            }
+            return oWrapper;
+        },
+
+        /**
+         * Returns the actual DOM element
+        * @method getElement
+        * @param {String} id the id of the elment to get
+        * @return {Object} The element
+        * @deprecated use YAHOO.util.Dom.get instead
+        * @static
+         */
+        getElement: function(id) {
+            return YAHOO.util.Dom.get(id);
+        },
+        
+        /**
+         * Returns the style property for the DOM element (i.e., 
+         * document.getElById(id).style)
+        * @method getCss
+        * @param {String} id the id of the elment to get
+        * @return {Object} The style property of the element
+        * @deprecated use YAHOO.util.Dom instead
+        * @static
+         */
+        getCss: function(id) {
+            var el = YAHOO.util.Dom.get(id);
+            return (el) ? el.style : null;
+        },
+
+        /**
+         * Inner class for cached elements
+        * @class DragDropMgr.ElementWrapper
+        * @for DragDropMgr
+        * @private
+        * @deprecated
+         */
+        ElementWrapper: function(el) {
+                /**
+                 * The element
+                * @property el
+                 */
+                this.el = el || null;
+                /**
+                 * The element id
+                * @property id
+                 */
+                this.id = this.el && el.id;
+                /**
+                 * A reference to the style property
+                * @property css
+                 */
+                this.css = this.el && el.style;
+            },
+
+        /**
+         * Returns the X position of an html element
+        * @method getPosX
+        * @param el the element for which to get the position
+        * @return {int} the X coordinate
+        * @for DragDropMgr
+        * @deprecated use YAHOO.util.Dom.getX instead
+        * @static
+         */
+        getPosX: function(el) {
+            return YAHOO.util.Dom.getX(el);
+        },
+
+        /**
+         * Returns the Y position of an html element
+        * @method getPosY
+        * @param el the element for which to get the position
+        * @return {int} the Y coordinate
+        * @deprecated use YAHOO.util.Dom.getY instead
+        * @static
+         */
+        getPosY: function(el) {
+            return YAHOO.util.Dom.getY(el); 
+        },
+
+        /**
+         * Swap two nodes.  In IE, we use the native method, for others we 
+         * emulate the IE behavior
+        * @method swapNode
+        * @param n1 the first node to swap
+        * @param n2 the other node to swap
+        * @static
+         */
+        swapNode: function(n1, n2) {
+            if (n1.swapNode) {
+                n1.swapNode(n2);
+            } else {
+                var p = n2.parentNode;
+                var s = n2.nextSibling;
+
+                if (s == n1) {
+                    p.insertBefore(n1, n2);
+                } else if (n2 == n1.nextSibling) {
+                    p.insertBefore(n2, n1);
+                } else {
+                    n1.parentNode.replaceChild(n2, n1);
+                    p.insertBefore(n1, s);
+                }
+            }
+        },
+
+        /**
+         * Returns the current scroll position
+        * @method getScroll
+        * @private
+        * @static
+         */
+        getScroll: function () {
+            var t, l, dde=document.documentElement, db=document.body;
+            if (dde && (dde.scrollTop || dde.scrollLeft)) {
+                t = dde.scrollTop;
+                l = dde.scrollLeft;
+            } else if (db) {
+                t = db.scrollTop;
+                l = db.scrollLeft;
+            } else {
+                YAHOO.log("could not get scroll property", "info", "DragDropMgr");
+            }
+            return { top: t, left: l };
+        },
+
+        /**
+         * Returns the specified element style property
+        * @method getStyle
+        * @param {HTMLElement} el          the element
+        * @param {string}      styleProp   the style property
+        * @return {string} The value of the style property
+        * @deprecated use YAHOO.util.Dom.getStyle
+        * @static
+         */
+        getStyle: function(el, styleProp) {
+            return YAHOO.util.Dom.getStyle(el, styleProp);
+        },
+
+        /**
+         * Gets the scrollTop
+        * @method getScrollTop
+        * @return {int} the document's scrollTop
+        * @static
+         */
+        getScrollTop: function () { return this.getScroll().top; },
+
+        /**
+         * Gets the scrollLeft
+        * @method getScrollLeft
+        * @return {int} the document's scrollTop
+        * @static
+         */
+        getScrollLeft: function () { return this.getScroll().left; },
+
+        /**
+         * Sets the x/y position of an element to the location of the
+         * target element.
+        * @method moveToEl
+        * @param {HTMLElement} moveEl      The element to move
+        * @param {HTMLElement} targetEl    The position reference element
+        * @static
+         */
+        moveToEl: function (moveEl, targetEl) {
+            var aCoord = YAHOO.util.Dom.getXY(targetEl);
+            YAHOO.log("moveToEl: " + aCoord, "info", "DragDropMgr");
+            YAHOO.util.Dom.setXY(moveEl, aCoord);
+        },
+
+        /**
+         * Gets the client height
+        * @method getClientHeight
+        * @return {int} client height in px
+        * @deprecated use YAHOO.util.Dom.getViewportHeight instead
+        * @static
+         */
+        getClientHeight: function() {
+            return YAHOO.util.Dom.getViewportHeight();
+        },
+
+        /**
+         * Gets the client width
+        * @method getClientWidth
+        * @return {int} client width in px
+        * @deprecated use YAHOO.util.Dom.getViewportWidth instead
+        * @static
+         */
+        getClientWidth: function() {
+            return YAHOO.util.Dom.getViewportWidth();
+        },
+
+        /**
+         * Numeric array sort function
+        * @method numericSort
+        * @static
+         */
+        numericSort: function(a, b) { return (a - b); },
+
+        /**
+         * Internal counter
+        * @property _timeoutCount
+        * @private
+        * @static
+         */
+        _timeoutCount: 0,
+
+        /**
+         * Trying to make the load order less important.  Without this we get
+         * an error if this file is loaded before the Event Utility.
+        * @method _addListeners
+        * @private
+        * @static
+         */
+        _addListeners: function() {
+            var DDM = YAHOO.util.DDM;
+            if ( YAHOO.util.Event && document ) {
+                DDM._onLoad();
+            } else {
+                if (DDM._timeoutCount > 2000) {
+                    YAHOO.log("DragDrop requires the Event Utility", "error", "DragDropMgr");
+                } else {
+                    setTimeout(DDM._addListeners, 10);
+                    if (document && document.body) {
+                        DDM._timeoutCount += 1;
+                    }
+                }
+            }
+        },
+
+        /**
+         * Recursively searches the immediate parent and all child nodes for 
+         * the handle element in order to determine wheter or not it was 
+         * clicked.
+        * @method handleWasClicked
+        * @param node the html element to inspect
+        * @static
+         */
+        handleWasClicked: function(node, id) {
+            if (this.isHandle(id, node.id)) {
+                YAHOO.log("clicked node is a handle", "info", "DragDropMgr");
+                return true;
+            } else {
+                // check to see if this is a text node child of the one we want
+                var p = node.parentNode;
+                // YAHOO.log("p: " + p);
+
+                while (p) {
+                    if (this.isHandle(id, p.id)) {
+                        return true;
+                    } else {
+                        YAHOO.log(p.id + " is not a handle", "info", "DragDropMgr");
+                        p = p.parentNode;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+    };
+
+}();
+
+// shorter alias, save a few bytes
+YAHOO.util.DDM = YAHOO.util.DragDropMgr;
+YAHOO.util.DDM._addListeners();
+
+}
+
+(function() {
+
+var Event=YAHOO.util.Event; 
+var Dom=YAHOO.util.Dom;
+
+/**
+ * Defines the interface and base operation of items that that can be 
+ * dragged or can be drop targets.  It was designed to be extended, overriding
+ * the event handlers for startDrag, onDrag, onDragOver, onDragOut.
+ * Up to three html elements can be associated with a DragDrop instance:
+ * <ul>
+ * <li>linked element: the element that is passed into the constructor.
+ * This is the element which defines the boundaries for interaction with 
+ * other DragDrop objects.</li>
+ * <li>handle element(s): The drag operation only occurs if the element that 
+ * was clicked matches a handle element.  By default this is the linked 
+ * element, but there are times that you will want only a portion of the 
+ * linked element to initiate the drag operation, and the setHandleElId() 
+ * method provides a way to define this.</li>
+ * <li>drag element: this represents an the element that would be moved along
+ * with the cursor during a drag operation.  By default, this is the linked
+ * element itself as in {@link YAHOO.util.DD}.  setDragElId() lets you define
+ * a separate element that would be moved, as in {@link YAHOO.util.DDProxy}
+ * </li>
+ * </ul>
+ * This class should not be instantiated until the onload event to ensure that
+ * the associated elements are available.
+ * The following would define a DragDrop obj that would interact with any 
+ * other DragDrop obj in the "group1" group:
+ * <pre>
+ *  dd = new YAHOO.util.DragDrop("div1", "group1");
+ * </pre>
+ * Since none of the event handlers have been implemented, nothing would 
+ * actually happen if you were to run the code above.  Normally you would 
+ * override this class or one of the default implementations, but you can 
+ * also override the methods you want on an instance of the class...
+ * <pre>
+ *  dd.onDragDrop = function(e, id) {
+ *  &nbsp;&nbsp;alert("dd was dropped on " + id);
+ *  }
+ * </pre>
+ * @namespace YAHOO.util
+ * @class DragDrop
+ * @constructor
+ * @param {String} id of the element that is linked to this instance
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DragDrop: 
+ *                    padding, isTarget, maintainOffset, primaryButtonOnly,
+ */
+YAHOO.util.DragDrop = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config); 
+    }
+};
+
+YAHOO.util.DragDrop.prototype = {
+    /**
+     * An Object Literal containing the events that we will be using: mouseDown, b4MouseDown, mouseUp, b4StartDrag, startDrag, b4EndDrag, endDrag, mouseUp, drag, b4Drag, invalidDrop, b4DragOut, dragOut, dragEnter, b4DragOver, dragOver, b4DragDrop, dragDrop
+     * By setting any of these to false, then event will not be fired.
+    * @property events
+    * @type object
+     */
+    events: null,
+    /**
+   * @method on
+   * @description Shortcut for EventProvider.subscribe, see <a href="YAHOO.util.EventProvider.html#subscribe">YAHOO.util.EventProvider.subscribe</a>
+    */
+    on: function() {
+        this.subscribe.apply(this, arguments);
+    },
+    /**
+     * The id of the element associated with this object.  This is what we 
+     * refer to as the "linked element" because the size and position of 
+     * this element is used to determine when the drag and drop objects have 
+     * interacted.
+    * @property id
+    * @type String
+     */
+    id: null,
+
+    /**
+     * Configuration attributes passed into the constructor
+    * @property config
+    * @type object
+     */
+    config: null,
+
+    /**
+     * The id of the element that will be dragged.  By default this is same 
+     * as the linked element , but could be changed to another element. Ex: 
+     * YAHOO.util.DDProxy
+    * @property dragElId
+    * @type String
+    * @private
+     */
+    dragElId: null, 
+
+    /**
+     * the id of the element that initiates the drag operation.  By default 
+     * this is the linked element, but could be changed to be a child of this
+     * element.  This lets us do things like only starting the drag when the 
+     * header element within the linked html element is clicked.
+    * @property handleElId
+    * @type String
+    * @private
+     */
+    handleElId: null, 
+
+    /**
+     * An associative array of HTML tags that will be ignored if clicked.
+    * @property invalidHandleTypes
+    * @type {string: string}
+     */
+    invalidHandleTypes: null, 
+
+    /**
+     * An associative array of ids for elements that will be ignored if clicked
+    * @property invalidHandleIds
+    * @type {string: string}
+     */
+    invalidHandleIds: null, 
+
+    /**
+     * An indexted array of css class names for elements that will be ignored
+     * if clicked.
+    * @property invalidHandleClasses
+    * @type string[]
+     */
+    invalidHandleClasses: null, 
+
+    /**
+     * The linked element's absolute X position at the time the drag was 
+     * started
+    * @property startPageX
+    * @type int
+    * @private
+     */
+    startPageX: 0,
+
+    /**
+     * The linked element's absolute X position at the time the drag was 
+     * started
+    * @property startPageY
+    * @type int
+    * @private
+     */
+    startPageY: 0,
+
+    /**
+     * The group defines a logical collection of DragDrop objects that are 
+     * related.  Instances only get events when interacting with other 
+     * DragDrop object in the same group.  This lets us define multiple 
+     * groups using a single DragDrop subclass if we want.
+    * @property groups
+    * @type {string: string}
+     */
+    groups: null,
+
+    /**
+     * Individual drag/drop instances can be locked.  This will prevent 
+     * onmousedown start drag.
+    * @property locked
+    * @type boolean
+    * @private
+     */
+    locked: false,
+
+    /**
+     * Lock this instance
+    * @method lock
+     */
+    lock: function() { this.locked = true; },
+
+    /**
+     * Unlock this instace
+    * @method unlock
+     */
+    unlock: function() { this.locked = false; },
+
+    /**
+     * By default, all instances can be a drop target.  This can be disabled by
+     * setting isTarget to false.
+    * @property isTarget
+    * @type boolean
+     */
+    isTarget: true,
+
+    /**
+     * The padding configured for this drag and drop object for calculating
+     * the drop zone intersection with this object.
+    * @property padding
+    * @type int[]
+     */
+    padding: null,
+    /**
+     * If this flag is true, do not fire drop events. The element is a drag only element (for movement not dropping)
+    * @property dragOnly
+    * @type Boolean
+     */
+    dragOnly: false,
+
+    /**
+     * If this flag is true, a shim will be placed over the screen/viewable area to track mouse events. Should help with dragging elements over iframes and other controls.
+    * @property useShim
+    * @type Boolean
+     */
+    useShim: false,
+
+    /**
+     * Cached reference to the linked element
+    * @property _domRef
+    * @private
+     */
+    _domRef: null,
+
+    /**
+     * Internal typeof flag
+    * @property __ygDragDrop
+    * @private
+     */
+    __ygDragDrop: true,
+
+    /**
+     * Set to true when horizontal contraints are applied
+    * @property constrainX
+    * @type boolean
+    * @private
+     */
+    constrainX: false,
+
+    /**
+     * Set to true when vertical contraints are applied
+    * @property constrainY
+    * @type boolean
+    * @private
+     */
+    constrainY: false,
+
+    /**
+     * The left constraint
+    * @property minX
+    * @type int
+    * @private
+     */
+    minX: 0,
+
+    /**
+     * The right constraint
+    * @property maxX
+    * @type int
+    * @private
+     */
+    maxX: 0,
+
+    /**
+     * The up constraint 
+    * @property minY
+    * @type int
+    * @type int
+    * @private
+     */
+    minY: 0,
+
+    /**
+     * The down constraint 
+    * @property maxY
+    * @type int
+    * @private
+     */
+    maxY: 0,
+
+    /**
+     * The difference between the click position and the source element's location
+    * @property deltaX
+    * @type int
+    * @private
+     */
+    deltaX: 0,
+
+    /**
+     * The difference between the click position and the source element's location
+    * @property deltaY
+    * @type int
+    * @private
+     */
+    deltaY: 0,
+
+    /**
+     * Maintain offsets when we resetconstraints.  Set to true when you want
+     * the position of the element relative to its parent to stay the same
+     * when the page changes
+     *
+    * @property maintainOffset
+    * @type boolean
+     */
+    maintainOffset: false,
+
+    /**
+     * Array of pixel locations the element will snap to if we specified a 
+     * horizontal graduation/interval.  This array is generated automatically
+     * when you define a tick interval.
+    * @property xTicks
+    * @type int[]
+     */
+    xTicks: null,
+
+    /**
+     * Array of pixel locations the element will snap to if we specified a 
+     * vertical graduation/interval.  This array is generated automatically 
+     * when you define a tick interval.
+    * @property yTicks
+    * @type int[]
+     */
+    yTicks: null,
+
+    /**
+     * By default the drag and drop instance will only respond to the primary
+     * button click (left button for a right-handed mouse).  Set to true to
+     * allow drag and drop to start with any mouse click that is propogated
+     * by the browser
+    * @property primaryButtonOnly
+    * @type boolean
+     */
+    primaryButtonOnly: true,
+
+    /**
+     * The availabe property is false until the linked dom element is accessible.
+    * @property available
+    * @type boolean
+     */
+    available: false,
+
+    /**
+     * By default, drags can only be initiated if the mousedown occurs in the
+     * region the linked element is.  This is done in part to work around a
+     * bug in some browsers that mis-report the mousedown if the previous
+     * mouseup happened outside of the window.  This property is set to true
+     * if outer handles are defined.
+     *
+    * @property hasOuterHandles
+    * @type boolean
+    * @default false
+     */
+    hasOuterHandles: false,
+
+    /**
+     * Property that is assigned to a drag and drop object when testing to
+     * see if it is being targeted by another dd object.  This property
+     * can be used in intersect mode to help determine the focus of
+     * the mouse interaction.  DDM.getBestMatch uses this property first to
+     * determine the closest match in INTERSECT mode when multiple targets
+     * are part of the same interaction.
+    * @property cursorIsOver
+    * @type boolean
+     */
+    cursorIsOver: false,
+
+    /**
+     * Property that is assigned to a drag and drop object when testing to
+     * see if it is being targeted by another dd object.  This is a region
+     * that represents the area the draggable element overlaps this target.
+     * DDM.getBestMatch uses this property to compare the size of the overlap
+     * to that of other targets in order to determine the closest match in
+     * INTERSECT mode when multiple targets are part of the same interaction.
+    * @property overlap 
+    * @type YAHOO.util.Region
+     */
+    overlap: null,
+
+    /**
+     * Code that executes immediately before the startDrag event
+    * @method b4StartDrag
+    * @private
+     */
+    b4StartDrag: function(x, y) { },
+
+    /**
+     * Abstract method called after a drag/drop object is clicked
+     * and the drag or mousedown time thresholds have beeen met.
+    * @method startDrag
+    * @param {int} X click location
+    * @param {int} Y click location
+     */
+    startDrag: function(x, y) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDrag event
+    * @method b4Drag
+    * @private
+     */
+    b4Drag: function(e) { },
+
+    /**
+     * Abstract method called during the onMouseMove event while dragging an 
+     * object.
+    * @method onDrag
+    * @param {Event} e the mousemove event
+     */
+    onDrag: function(e) { /* override this */ },
+
+    /**
+     * Abstract method called when this element fist begins hovering over 
+     * another DragDrop obj
+    * @method onDragEnter
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this is hovering over.  In INTERSECT mode, an array of one or more 
+     * dragdrop items being hovered over.
+     */
+    onDragEnter: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragOver event
+    * @method b4DragOver
+    * @private
+     */
+    b4DragOver: function(e) { },
+
+    /**
+     * Abstract method called when this element is hovering over another 
+     * DragDrop obj
+    * @method onDragOver
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this is hovering over.  In INTERSECT mode, an array of dd items 
+     * being hovered over.
+     */
+    onDragOver: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragOut event
+    * @method b4DragOut
+    * @private
+     */
+    b4DragOut: function(e) { },
+
+    /**
+     * Abstract method called when we are no longer hovering over an element
+    * @method onDragOut
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this was hovering over.  In INTERSECT mode, an array of dd items 
+     * that the mouse is no longer over.
+     */
+    onDragOut: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragDrop event
+    * @method b4DragDrop
+    * @private
+     */
+    b4DragDrop: function(e) { },
+
+    /**
+     * Abstract method called when this item is dropped on another DragDrop 
+     * obj
+    * @method onDragDrop
+    * @param {Event} e the mouseup event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this was dropped on.  In INTERSECT mode, an array of dd items this 
+     * was dropped on.
+     */
+    onDragDrop: function(e, id) { /* override this */ },
+
+    /**
+     * Abstract method called when this item is dropped on an area with no
+     * drop target
+    * @method onInvalidDrop
+    * @param {Event} e the mouseup event
+     */
+    onInvalidDrop: function(e) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the endDrag event
+    * @method b4EndDrag
+    * @private
+     */
+    b4EndDrag: function(e) { },
+
+    /**
+     * Fired when we are done dragging the object
+    * @method endDrag
+    * @param {Event} e the mouseup event
+     */
+    endDrag: function(e) { /* override this */ },
+
+    /**
+     * Code executed immediately before the onMouseDown event
+    * @method b4MouseDown
+    * @param {Event} e the mousedown event
+    * @private
+     */
+    b4MouseDown: function(e) {  },
+
+    /**
+     * Event handler that fires when a drag/drop obj gets a mousedown
+    * @method onMouseDown
+    * @param {Event} e the mousedown event
+     */
+    onMouseDown: function(e) { /* override this */ },
+
+    /**
+     * Event handler that fires when a drag/drop obj gets a mouseup
+    * @method onMouseUp
+    * @param {Event} e the mouseup event
+     */
+    onMouseUp: function(e) { /* override this */ },
+   
+    /**
+     * Override the onAvailable method to do what is needed after the initial
+     * position was determined.
+    * @method onAvailable
+     */
+    onAvailable: function () { 
+        //this.logger.log("onAvailable (base)"); 
+    },
+
+    /**
+     * Returns a reference to the linked element
+    * @method getEl
+    * @return {HTMLElement} the html element 
+     */
+    getEl: function() { 
+        if (!this._domRef) {
+            this._domRef = Dom.get(this.id); 
+        }
+
+        return this._domRef;
+    },
+
+    /**
+     * Returns a reference to the actual element to drag.  By default this is
+     * the same as the html element, but it can be assigned to another 
+     * element. An example of this can be found in YAHOO.util.DDProxy
+    * @method getDragEl
+    * @return {HTMLElement} the html element 
+     */
+    getDragEl: function() {
+        return Dom.get(this.dragElId);
+    },
+
+    /**
+     * Sets up the DragDrop object.  Must be called in the constructor of any
+     * YAHOO.util.DragDrop subclass
+    * @method init
+    * @param id the id of the linked element
+    * @param {String} sGroup the group of related items
+    * @param {object} config configuration attributes
+     */
+    init: function(id, sGroup, config) {
+        this.initTarget(id, sGroup, config);
+        Event.on(this._domRef || this.id, "mousedown", 
+                        this.handleMouseDown, this, true);
+
+        // Event.on(this.id, "selectstart", Event.preventDefault);
+        for (var i in this.events) {
+            this.createEvent(i + 'Event');
+        }
+        
+    },
+
+    /**
+     * Initializes Targeting functionality only... the object does not
+     * get a mousedown handler.
+    * @method initTarget
+    * @param id the id of the linked element
+    * @param {String} sGroup the group of related items
+    * @param {object} config configuration attributes
+     */
+    initTarget: function(id, sGroup, config) {
+
+        // configuration attributes 
+        this.config = config || {};
+
+        this.events = {};
+
+        // create a local reference to the drag and drop manager
+        this.DDM = YAHOO.util.DDM;
+
+        // initialize the groups object
+        this.groups = {};
+
+        // assume that we have an element reference instead of an id if the
+        // parameter is not a string
+        if (typeof id !== "string") {
+            YAHOO.log("id is not a string, assuming it is an HTMLElement");
+            this._domRef = id;
+            id = Dom.generateId(id);
+        }
+
+        // set the id
+        this.id = id;
+
+        // add to an interaction group
+        this.addToGroup((sGroup) ? sGroup : "default");
+
+        // We don't want to register this as the handle with the manager
+        // so we just set the id rather than calling the setter.
+        this.handleElId = id;
+
+        Event.onAvailable(id, this.handleOnAvailable, this, true);
+
+        // create a logger instance
+        this.logger = (YAHOO.widget.LogWriter) ? 
+                new YAHOO.widget.LogWriter(this.toString()) : YAHOO;
+
+        // the linked element is the element that gets dragged by default
+        this.setDragElId(id); 
+
+        // by default, clicked anchors will not start drag operations. 
+        // @TODO what else should be here?  Probably form fields.
+        this.invalidHandleTypes = { A: "A" };
+        this.invalidHandleIds = {};
+        this.invalidHandleClasses = [];
+
+        this.applyConfig();
+    },
+
+    /**
+     * Applies the configuration parameters that were passed into the constructor.
+     * This is supposed to happen at each level through the inheritance chain.  So
+     * a DDProxy implentation will execute apply config on DDProxy, DD, and 
+     * DragDrop in order to get all of the parameters that are available in
+     * each object.
+    * @method applyConfig
+     */
+    applyConfig: function() {
+        this.events = {
+            mouseDown: true,
+            b4MouseDown: true,
+            mouseUp: true,
+            b4StartDrag: true,
+            startDrag: true,
+            b4EndDrag: true,
+            endDrag: true,
+            drag: true,
+            b4Drag: true,
+            invalidDrop: true,
+            b4DragOut: true,
+            dragOut: true,
+            dragEnter: true,
+            b4DragOver: true,
+            dragOver: true,
+            b4DragDrop: true,
+            dragDrop: true
+        };
+        
+        if (this.config.events) {
+            for (var i in this.config.events) {
+                if (this.config.events[i] === false) {
+                    this.events[i] = false;
+                }
+            }
+        }
+
+
+        // configurable properties: 
+        //    padding, isTarget, maintainOffset, primaryButtonOnly
+        this.padding           = this.config.padding || [0, 0, 0, 0];
+        this.isTarget          = (this.config.isTarget !== false);
+        this.maintainOffset    = (this.config.maintainOffset);
+        this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
+        this.dragOnly = ((this.config.dragOnly === true) ? true : false);
+        this.useShim = ((this.config.useShim === true) ? true : false);
+    },
+
+    /**
+     * Executed when the linked element is available
+    * @method handleOnAvailable
+    * @private
+     */
+    handleOnAvailable: function() {
+        //this.logger.log("handleOnAvailable");
+        this.available = true;
+        this.resetConstraints();
+        this.onAvailable();
+    },
+
+     /**
+     * Configures the padding for the target zone in px.  Effectively expands
+     * (or reduces) the virtual object size for targeting calculations.  
+     * Supports css-style shorthand; if only one parameter is passed, all sides
+     * will have that padding, and if only two are passed, the top and bottom
+     * will have the first param, the left and right the second.
+    * @method setPadding
+    * @param {int} iTop    Top pad
+    * @param {int} iRight  Right pad
+    * @param {int} iBot    Bot pad
+    * @param {int} iLeft   Left pad
+     */
+    setPadding: function(iTop, iRight, iBot, iLeft) {
+        // this.padding = [iLeft, iRight, iTop, iBot];
+        if (!iRight && 0 !== iRight) {
+            this.padding = [iTop, iTop, iTop, iTop];
+        } else if (!iBot && 0 !== iBot) {
+            this.padding = [iTop, iRight, iTop, iRight];
+        } else {
+            this.padding = [iTop, iRight, iBot, iLeft];
+        }
+    },
+
+    /**
+     * Stores the initial placement of the linked element.
+    * @method setInitialPosition
+    * @param {int} diffX   the X offset, default 0
+    * @param {int} diffY   the Y offset, default 0
+    * @private
+     */
+    setInitPosition: function(diffX, diffY) {
+        var el = this.getEl();
+
+        if (!this.DDM.verifyEl(el)) {
+            if (el && el.style && (el.style.display == 'none')) {
+                this.logger.log(this.id + " can not get initial position, element style is display: none");
+            } else {
+                this.logger.log(this.id + " element is broken");
+            }
+            return;
+        }
+
+        var dx = diffX || 0;
+        var dy = diffY || 0;
+
+        var p = Dom.getXY( el );
+
+        this.initPageX = p[0] - dx;
+        this.initPageY = p[1] - dy;
+
+        this.lastPageX = p[0];
+        this.lastPageY = p[1];
+
+        this.logger.log(this.id + " initial position: " + this.initPageX + 
+                ", " + this.initPageY);
+
+
+        this.setStartPosition(p);
+    },
+
+    /**
+     * Sets the start position of the element.  This is set when the obj
+     * is initialized, the reset when a drag is started.
+    * @method setStartPosition
+    * @param pos current position (from previous lookup)
+    * @private
+     */
+    setStartPosition: function(pos) {
+        var p = pos || Dom.getXY(this.getEl());
+
+        this.deltaSetXY = null;
+
+        this.startPageX = p[0];
+        this.startPageY = p[1];
+    },
+
+    /**
+     * Add this instance to a group of related drag/drop objects.  All 
+     * instances belong to at least one group, and can belong to as many 
+     * groups as needed.
+    * @method addToGroup
+    * @param sGroup {string} the name of the group
+     */
+    addToGroup: function(sGroup) {
+        this.groups[sGroup] = true;
+        this.DDM.regDragDrop(this, sGroup);
+    },
+
+    /**
+     * Remove's this instance from the supplied interaction group
+    * @method removeFromGroup
+    * @param {string}  sGroup  The group to drop
+     */
+    removeFromGroup: function(sGroup) {
+        this.logger.log("Removing from group: " + sGroup);
+        if (this.groups[sGroup]) {
+            delete this.groups[sGroup];
+        }
+
+        this.DDM.removeDDFromGroup(this, sGroup);
+    },
+
+    /**
+     * Allows you to specify that an element other than the linked element 
+     * will be moved with the cursor during a drag
+    * @method setDragElId
+    * @param id {string} the id of the element that will be used to initiate the drag
+     */
+    setDragElId: function(id) {
+        this.dragElId = id;
+    },
+
+    /**
+     * Allows you to specify a child of the linked element that should be 
+     * used to initiate the drag operation.  An example of this would be if 
+     * you have a content div with text and links.  Clicking anywhere in the 
+     * content area would normally start the drag operation.  Use this method
+     * to specify that an element inside of the content div is the element 
+     * that starts the drag operation.
+    * @method setHandleElId
+    * @param id {string} the id of the element that will be used to 
+     * initiate the drag.
+     */
+    setHandleElId: function(id) {
+        if (typeof id !== "string") {
+            YAHOO.log("id is not a string, assuming it is an HTMLElement");
+            id = Dom.generateId(id);
+        }
+        this.handleElId = id;
+        this.DDM.regHandle(this.id, id);
+    },
+
+    /**
+     * Allows you to set an element outside of the linked element as a drag 
+     * handle
+    * @method setOuterHandleElId
+    * @param id the id of the element that will be used to initiate the drag
+     */
+    setOuterHandleElId: function(id) {
+        if (typeof id !== "string") {
+            YAHOO.log("id is not a string, assuming it is an HTMLElement");
+            id = Dom.generateId(id);
+        }
+        this.logger.log("Adding outer handle event: " + id);
+        Event.on(id, "mousedown", 
+                this.handleMouseDown, this, true);
+        this.setHandleElId(id);
+
+        this.hasOuterHandles = true;
+    },
+
+    /**
+     * Remove all drag and drop hooks for this element
+    * @method unreg
+     */
+    unreg: function() {
+        this.logger.log("DragDrop obj cleanup " + this.id);
+        Event.removeListener(this.id, "mousedown", 
+                this.handleMouseDown);
+        this._domRef = null;
+        this.DDM._remove(this);
+    },
+
+    /**
+     * Returns true if this instance is locked, or the drag drop mgr is locked
+     * (meaning that all drag/drop is disabled on the page.)
+    * @method isLocked
+    * @return {boolean} true if this obj or all drag/drop is locked, else 
+     * false
+     */
+    isLocked: function() {
+        return (this.DDM.isLocked() || this.locked);
+    },
+
+    /**
+     * Fired when this object is clicked
+    * @method handleMouseDown
+    * @param {Event} e 
+    * @param {YAHOO.util.DragDrop} oDD the clicked dd object (this dd obj)
+    * @private
+     */
+    handleMouseDown: function(e, oDD) {
+
+        var button = e.which || e.button;
+        this.logger.log("button: " + button);
+
+        if (this.primaryButtonOnly && button > 1) {
+            this.logger.log("Mousedown was not produced by the primary button");
+            return;
+        }
+
+        if (this.isLocked()) {
+            this.logger.log("Drag and drop is disabled, aborting");
+            return;
+        }
+
+        this.logger.log("mousedown " + this.id);
+
+        this.logger.log("firing onMouseDown events");
+
+        // firing the mousedown events prior to calculating positions
+        var b4Return = this.b4MouseDown(e),
+        b4Return2 = true;
+
+        if (this.events.b4MouseDown) {
+            b4Return2 = this.fireEvent('b4MouseDownEvent', e);
+        }
+        var mDownReturn = this.onMouseDown(e),
+            mDownReturn2 = true;
+        if (this.events.mouseDown) {
+            mDownReturn2 = this.fireEvent('mouseDownEvent', e);
+        }
+
+        if ((b4Return === false) || (mDownReturn === false) || (b4Return2 === false) || (mDownReturn2 === false)) {
+            this.logger.log('b4MouseDown or onMouseDown returned false, exiting drag');
+            return;
+        }
+
+        this.DDM.refreshCache(this.groups);
+        // var self = this;
+        // setTimeout( function() { self.DDM.refreshCache(self.groups); }, 0);
+
+        // Only process the event if we really clicked within the linked 
+        // element.  The reason we make this check is that in the case that 
+        // another element was moved between the clicked element and the 
+        // cursor in the time between the mousedown and mouseup events. When 
+        // this happens, the element gets the next mousedown event 
+        // regardless of where on the screen it happened.  
+        var pt = new YAHOO.util.Point(Event.getPageX(e), Event.getPageY(e));
+        if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) )  {
+                this.logger.log("Click was not over the element: " + this.id);
+        } else {
+            if (this.clickValidator(e)) {
+
+                this.logger.log("click was a valid handle");
+
+                // set the initial element position
+                this.setStartPosition();
+
+                // start tracking mousemove distance and mousedown time to
+                // determine when to start the actual drag
+                this.DDM.handleMouseDown(e, this);
+
+                // this mousedown is mine
+                this.DDM.stopEvent(e);
+            } else {
+
+this.logger.log("clickValidator returned false, drag not initiated");
+
+            }
+        }
+    },
+
+    /**
+    * @method clickValidator
+    * @description Method validates that the clicked element
+     * was indeed the handle or a valid child of the handle
+    * @param {Event} e 
+     */
+    clickValidator: function(e) {
+        var target = YAHOO.util.Event.getTarget(e);
+        return ( this.isValidHandleChild(target) &&
+                    (this.id == this.handleElId || 
+                        this.DDM.handleWasClicked(target, this.id)) );
+    },
+
+    /**
+     * Finds the location the element should be placed if we want to move
+     * it to where the mouse location less the click offset would place us.
+    * @method getTargetCoord
+    * @param {int} iPageX the X coordinate of the click
+    * @param {int} iPageY the Y coordinate of the click
+    * @return an object that contains the coordinates (Object.x and Object.y)
+    * @private
+     */
+    getTargetCoord: function(iPageX, iPageY) {
+
+        // this.logger.log("getTargetCoord: " + iPageX + ", " + iPageY);
+
+        var x = iPageX - this.deltaX;
+        var y = iPageY - this.deltaY;
+
+        if (this.constrainX) {
+            if (x < this.minX) { x = this.minX; }
+            if (x > this.maxX) { x = this.maxX; }
+        }
+
+        if (this.constrainY) {
+            if (y < this.minY) { y = this.minY; }
+            if (y > this.maxY) { y = this.maxY; }
+        }
+
+        x = this.getTick(x, this.xTicks);
+        y = this.getTick(y, this.yTicks);
+
+        // this.logger.log("getTargetCoord " + 
+                // " iPageX: " + iPageX +
+                // " iPageY: " + iPageY +
+                // " x: " + x + ", y: " + y);
+
+        return {x:x, y:y};
+    },
+
+    /**
+     * Allows you to specify a tag name that should not start a drag operation
+     * when clicked.  This is designed to facilitate embedding links within a
+     * drag handle that do something other than start the drag.
+    * @method addInvalidHandleType
+    * @param {string} tagName the type of element to exclude
+     */
+    addInvalidHandleType: function(tagName) {
+        var type = tagName.toUpperCase();
+        this.invalidHandleTypes[type] = type;
+    },
+
+    /**
+     * Lets you to specify an element id for a child of a drag handle
+     * that should not initiate a drag
+    * @method addInvalidHandleId
+    * @param {string} id the element id of the element you wish to ignore
+     */
+    addInvalidHandleId: function(id) {
+        if (typeof id !== "string") {
+            YAHOO.log("id is not a string, assuming it is an HTMLElement");
+            id = Dom.generateId(id);
+        }
+        this.invalidHandleIds[id] = id;
+    },
+
+
+    /**
+     * Lets you specify a css class of elements that will not initiate a drag
+    * @method addInvalidHandleClass
+    * @param {string} cssClass the class of the elements you wish to ignore
+     */
+    addInvalidHandleClass: function(cssClass) {
+        this.invalidHandleClasses.push(cssClass);
+    },
+
+    /**
+     * Unsets an excluded tag name set by addInvalidHandleType
+    * @method removeInvalidHandleType
+    * @param {string} tagName the type of element to unexclude
+     */
+    removeInvalidHandleType: function(tagName) {
+        var type = tagName.toUpperCase();
+        // this.invalidHandleTypes[type] = null;
+        delete this.invalidHandleTypes[type];
+    },
+    
+    /**
+     * Unsets an invalid handle id
+    * @method removeInvalidHandleId
+    * @param {string} id the id of the element to re-enable
+     */
+    removeInvalidHandleId: function(id) {
+        if (typeof id !== "string") {
+            YAHOO.log("id is not a string, assuming it is an HTMLElement");
+            id = Dom.generateId(id);
+        }
+        delete this.invalidHandleIds[id];
+    },
+
+    /**
+     * Unsets an invalid css class
+    * @method removeInvalidHandleClass
+    * @param {string} cssClass the class of the element(s) you wish to 
+     * re-enable
+     */
+    removeInvalidHandleClass: function(cssClass) {
+        for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
+            if (this.invalidHandleClasses[i] == cssClass) {
+                delete this.invalidHandleClasses[i];
+            }
+        }
+    },
+
+    /**
+     * Checks the tag exclusion list to see if this click should be ignored
+    * @method isValidHandleChild
+    * @param {HTMLElement} node the HTMLElement to evaluate
+    * @return {boolean} true if this is a valid tag type, false if not
+     */
+    isValidHandleChild: function(node) {
+
+        var valid = true;
+        // var n = (node.nodeName == "#text") ? node.parentNode : node;
+        var nodeName;
+        try {
+            nodeName = node.nodeName.toUpperCase();
+        } catch(e) {
+            nodeName = node.nodeName;
+        }
+        valid = valid && !this.invalidHandleTypes[nodeName];
+        valid = valid && !this.invalidHandleIds[node.id];
+
+        for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
+            valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
+        }
+
+        this.logger.log("Valid handle? ... " + valid);
+
+        return valid;
+
+    },
+
+    /**
+     * Create the array of horizontal tick marks if an interval was specified
+     * in setXConstraint().
+    * @method setXTicks
+    * @private
+     */
+    setXTicks: function(iStartX, iTickSize) {
+        this.xTicks = [];
+        this.xTickSize = iTickSize;
+        
+        var tickMap = {};
+
+        for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
+            if (!tickMap[i]) {
+                this.xTicks[this.xTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
+            if (!tickMap[i]) {
+                this.xTicks[this.xTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        this.xTicks.sort(this.DDM.numericSort) ;
+        this.logger.log("xTicks: " + this.xTicks.join());
+    },
+
+    /**
+     * Create the array of vertical tick marks if an interval was specified in 
+     * setYConstraint().
+    * @method setYTicks
+    * @private
+     */
+    setYTicks: function(iStartY, iTickSize) {
+        // this.logger.log("setYTicks: " + iStartY + ", " + iTickSize
+               // + ", " + this.initPageY + ", " + this.minY + ", " + this.maxY );
+        this.yTicks = [];
+        this.yTickSize = iTickSize;
+
+        var tickMap = {};
+
+        for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
+            if (!tickMap[i]) {
+                this.yTicks[this.yTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
+            if (!tickMap[i]) {
+                this.yTicks[this.yTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        this.yTicks.sort(this.DDM.numericSort) ;
+        this.logger.log("yTicks: " + this.yTicks.join());
+    },
+
+    /**
+     * By default, the element can be dragged any place on the screen.  Use 
+     * this method to limit the horizontal travel of the element.  Pass in 
+     * 0,0 for the parameters if you want to lock the drag to the y axis.
+    * @method setXConstraint
+    * @param {int} iLeft the number of pixels the element can move to the left
+    * @param {int} iRight the number of pixels the element can move to the 
+     * right
+    * @param {int} iTickSize optional parameter for specifying that the 
+     * element
+     * should move iTickSize pixels at a time.
+     */
+    setXConstraint: function(iLeft, iRight, iTickSize) {
+        this.leftConstraint = parseInt(iLeft, 10);
+        this.rightConstraint = parseInt(iRight, 10);
+
+        this.minX = this.initPageX - this.leftConstraint;
+        this.maxX = this.initPageX + this.rightConstraint;
+        if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
+
+        this.constrainX = true;
+        this.logger.log("initPageX:" + this.initPageX + " minX:" + this.minX + 
+                " maxX:" + this.maxX);
+    },
+
+    /**
+     * Clears any constraints applied to this instance.  Also clears ticks
+     * since they can't exist independent of a constraint at this time.
+    * @method clearConstraints
+     */
+    clearConstraints: function() {
+        this.logger.log("Clearing constraints");
+        this.constrainX = false;
+        this.constrainY = false;
+        this.clearTicks();
+    },
+
+    /**
+     * Clears any tick interval defined for this instance
+    * @method clearTicks
+     */
+    clearTicks: function() {
+        this.logger.log("Clearing ticks");
+        this.xTicks = null;
+        this.yTicks = null;
+        this.xTickSize = 0;
+        this.yTickSize = 0;
+    },
+
+    /**
+     * By default, the element can be dragged any place on the screen.  Set 
+     * this to limit the vertical travel of the element.  Pass in 0,0 for the
+     * parameters if you want to lock the drag to the x axis.
+    * @method setYConstraint
+    * @param {int} iUp the number of pixels the element can move up
+    * @param {int} iDown the number of pixels the element can move down
+    * @param {int} iTickSize optional parameter for specifying that the 
+     * element should move iTickSize pixels at a time.
+     */
+    setYConstraint: function(iUp, iDown, iTickSize) {
+        this.logger.log("setYConstraint: " + iUp + "," + iDown + "," + iTickSize);
+        this.topConstraint = parseInt(iUp, 10);
+        this.bottomConstraint = parseInt(iDown, 10);
+
+        this.minY = this.initPageY - this.topConstraint;
+        this.maxY = this.initPageY + this.bottomConstraint;
+        if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
+
+        this.constrainY = true;
+        
+        this.logger.log("initPageY:" + this.initPageY + " minY:" + this.minY + 
+                " maxY:" + this.maxY);
+    },
+
+    /**
+     * resetConstraints must be called if you manually reposition a dd element.
+    * @method resetConstraints
+     */
+    resetConstraints: function() {
+
+        //this.logger.log("resetConstraints");
+
+        // Maintain offsets if necessary
+        if (this.initPageX || this.initPageX === 0) {
+            //this.logger.log("init pagexy: " + this.initPageX + ", " + 
+                               //this.initPageY);
+            //this.logger.log("last pagexy: " + this.lastPageX + ", " + 
+                               //this.lastPageY);
+            // figure out how much this thing has moved
+            var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
+            var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
+
+            this.setInitPosition(dx, dy);
+
+        // This is the first time we have detected the element's position
+        } else {
+            this.setInitPosition();
+        }
+
+        if (this.constrainX) {
+            this.setXConstraint( this.leftConstraint, 
+                                 this.rightConstraint, 
+                                 this.xTickSize        );
+        }
+
+        if (this.constrainY) {
+            this.setYConstraint( this.topConstraint, 
+                                 this.bottomConstraint, 
+                                 this.yTickSize         );
+        }
+    },
+
+    /**
+     * Normally the drag element is moved pixel by pixel, but we can specify 
+     * that it move a number of pixels at a time.  This method resolves the 
+     * location when we have it set up like this.
+    * @method getTick
+    * @param {int} val where we want to place the object
+    * @param {int[]} tickArray sorted array of valid points
+    * @return {int} the closest tick
+    * @private
+     */
+    getTick: function(val, tickArray) {
+
+        if (!tickArray) {
+            // If tick interval is not defined, it is effectively 1 pixel, 
+            // so we return the value passed to us.
+            return val; 
+        } else if (tickArray[0] >= val) {
+            // The value is lower than the first tick, so we return the first
+            // tick.
+            return tickArray[0];
+        } else {
+            for (var i=0, len=tickArray.length; i<len; ++i) {
+                var next = i + 1;
+                if (tickArray[next] && tickArray[next] >= val) {
+                    var diff1 = val - tickArray[i];
+                    var diff2 = tickArray[next] - val;
+                    return (diff2 > diff1) ? tickArray[i] : tickArray[next];
+                }
+            }
+
+            // The value is larger than the last tick, so we return the last
+            // tick.
+            return tickArray[tickArray.length - 1];
+        }
+    },
+
+    /**
+     * toString method
+    * @method toString
+    * @return {string} string representation of the dd obj
+     */
+    toString: function() {
+        return ("DragDrop " + this.id);
+    }
+
+};
+YAHOO.augment(YAHOO.util.DragDrop, YAHOO.util.EventProvider);
+
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+})();
+/**
+ * A DragDrop implementation where the linked element follows the 
+ * mouse cursor during a drag.
+ * @class DD
+ * @extends YAHOO.util.DragDrop
+ * @constructor
+ * @param {String} id the id of the linked element 
+ * @param {String} sGroup the group of related DragDrop items
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DD: 
+ *                    scroll
+ */
+YAHOO.util.DD = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config);
+    }
+};
+
+YAHOO.extend(YAHOO.util.DD, YAHOO.util.DragDrop, {
+
+    /**
+     * When set to true, the utility automatically tries to scroll the browser
+     * window when a drag and drop element is dragged near the viewport boundary.
+     * Defaults to true.
+    * @property scroll
+    * @type boolean
+     */
+    scroll: true, 
+
+    /**
+     * Sets the pointer offset to the distance between the linked element's top 
+     * left corner and the location the element was clicked
+    * @method autoOffset
+    * @param {int} iPageX the X coordinate of the click
+    * @param {int} iPageY the Y coordinate of the click
+     */
+    autoOffset: function(iPageX, iPageY) {
+        var x = iPageX - this.startPageX;
+        var y = iPageY - this.startPageY;
+        this.setDelta(x, y);
+        // this.logger.log("autoOffset el pos: " + aCoord + ", delta: " + x + "," + y);
+    },
+
+    /** 
+     * Sets the pointer offset.  You can call this directly to force the 
+     * offset to be in a particular location (e.g., pass in 0,0 to set it 
+     * to the center of the object, as done in YAHOO.widget.Slider)
+    * @method setDelta
+    * @param {int} iDeltaX the distance from the left
+    * @param {int} iDeltaY the distance from the top
+     */
+    setDelta: function(iDeltaX, iDeltaY) {
+        this.deltaX = iDeltaX;
+        this.deltaY = iDeltaY;
+        this.logger.log("deltaX:" + this.deltaX + ", deltaY:" + this.deltaY);
+    },
+
+    /**
+     * Sets the drag element to the location of the mousedown or click event, 
+     * maintaining the cursor location relative to the location on the element 
+     * that was clicked.  Override this if you want to place the element in a 
+     * location other than where the cursor is.
+    * @method setDragElPos
+    * @param {int} iPageX the X coordinate of the mousedown or drag event
+    * @param {int} iPageY the Y coordinate of the mousedown or drag event
+     */
+    setDragElPos: function(iPageX, iPageY) {
+        // the first time we do this, we are going to check to make sure
+        // the element has css positioning
+
+        var el = this.getDragEl();
+        this.alignElWithMouse(el, iPageX, iPageY);
+    },
+
+    /**
+     * Sets the element to the location of the mousedown or click event, 
+     * maintaining the cursor location relative to the location on the element 
+     * that was clicked.  Override this if you want to place the element in a 
+     * location other than where the cursor is.
+    * @method alignElWithMouse
+    * @param {HTMLElement} el the element to move
+    * @param {int} iPageX the X coordinate of the mousedown or drag event
+    * @param {int} iPageY the Y coordinate of the mousedown or drag event
+     */
+    alignElWithMouse: function(el, iPageX, iPageY) {
+        var oCoord = this.getTargetCoord(iPageX, iPageY);
+        // this.logger.log("****alignElWithMouse : " + el.id + ", " + aCoord + ", " + el.style.display);
+
+        if (!this.deltaSetXY) {
+            var aCoord = [oCoord.x, oCoord.y];
+            YAHOO.util.Dom.setXY(el, aCoord);
+
+            var newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            var newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+
+            this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
+        } else {
+            YAHOO.util.Dom.setStyle(el, "left", (oCoord.x + this.deltaSetXY[0]) + "px");
+            YAHOO.util.Dom.setStyle(el, "top",  (oCoord.y + this.deltaSetXY[1]) + "px");
+        }
+        
+        this.cachePosition(oCoord.x, oCoord.y);
+        var self = this;
+        setTimeout(function() {
+            self.autoScroll.call(self, oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
+        }, 0);
+    },
+
+    /**
+     * Saves the most recent position so that we can reset the constraints and
+     * tick marks on-demand.  We need to know this so that we can calculate the
+     * number of pixels the element is offset from its original position.
+    * @method cachePosition
+    * @param iPageX the current x position (optional, this just makes it so we
+     * don't have to look it up again)
+    * @param iPageY the current y position (optional, this just makes it so we
+     * don't have to look it up again)
+     */
+    cachePosition: function(iPageX, iPageY) {
+        if (iPageX) {
+            this.lastPageX = iPageX;
+            this.lastPageY = iPageY;
+        } else {
+            var aCoord = YAHOO.util.Dom.getXY(this.getEl());
+            this.lastPageX = aCoord[0];
+            this.lastPageY = aCoord[1];
+        }
+    },
+
+    /**
+     * Auto-scroll the window if the dragged object has been moved beyond the 
+     * visible window boundary.
+    * @method autoScroll
+    * @param {int} x the drag element's x position
+    * @param {int} y the drag element's y position
+    * @param {int} h the height of the drag element
+    * @param {int} w the width of the drag element
+    * @private
+     */
+    autoScroll: function(x, y, h, w) {
+
+        if (this.scroll) {
+            // The client height
+            var clientH = this.DDM.getClientHeight();
+
+            // The client width
+            var clientW = this.DDM.getClientWidth();
+
+            // The amt scrolled down
+            var st = this.DDM.getScrollTop();
+
+            // The amt scrolled right
+            var sl = this.DDM.getScrollLeft();
+
+            // Location of the bottom of the element
+            var bot = h + y;
+
+            // Location of the right of the element
+            var right = w + x;
+
+            // The distance from the cursor to the bottom of the visible area, 
+            // adjusted so that we don't scroll if the cursor is beyond the
+            // element drag constraints
+            var toBot = (clientH + st - y - this.deltaY);
+
+            // The distance from the cursor to the right of the visible area
+            var toRight = (clientW + sl - x - this.deltaX);
+
+            // this.logger.log( " x: " + x + " y: " + y + " h: " + h + 
+            // " clientH: " + clientH + " clientW: " + clientW + 
+            // " st: " + st + " sl: " + sl + " bot: " + bot + 
+            // " right: " + right + " toBot: " + toBot + " toRight: " + toRight);
+
+            // How close to the edge the cursor must be before we scroll
+            // var thresh = (document.all) ? 100 : 40;
+            var thresh = 40;
+
+            // How many pixels to scroll per autoscroll op.  This helps to reduce 
+            // clunky scrolling. IE is more sensitive about this ... it needs this 
+            // value to be higher.
+            var scrAmt = (document.all) ? 80 : 30;
+
+            // Scroll down if we are near the bottom of the visible page and the 
+            // obj extends below the crease
+            if ( bot > clientH && toBot < thresh ) { 
+                window.scrollTo(sl, st + scrAmt); 
+            }
+
+            // Scroll up if the window is scrolled down and the top of the object
+            // goes above the top border
+            if ( y < st && st > 0 && y - st < thresh ) { 
+                window.scrollTo(sl, st - scrAmt); 
+            }
+
+            // Scroll right if the obj is beyond the right border and the cursor is
+            // near the border.
+            if ( right > clientW && toRight < thresh ) { 
+                window.scrollTo(sl + scrAmt, st); 
+            }
+
+            // Scroll left if the window has been scrolled to the right and the obj
+            // extends past the left border
+            if ( x < sl && sl > 0 && x - sl < thresh ) { 
+                window.scrollTo(sl - scrAmt, st);
+            }
+        }
+    },
+
+    /*
+     * Sets up config options specific to this class. Overrides
+     * YAHOO.util.DragDrop, but all versions of this method through the 
+     * inheritance chain are called
+     */
+    applyConfig: function() {
+        YAHOO.util.DD.superclass.applyConfig.call(this);
+        this.scroll = (this.config.scroll !== false);
+    },
+
+    /*
+     * Event that fires prior to the onMouseDown event.  Overrides 
+     * YAHOO.util.DragDrop.
+     */
+    b4MouseDown: function(e) {
+        this.setStartPosition();
+        // this.resetConstraints();
+        this.autoOffset(YAHOO.util.Event.getPageX(e), 
+                            YAHOO.util.Event.getPageY(e));
+    },
+
+    /*
+     * Event that fires prior to the onDrag event.  Overrides 
+     * YAHOO.util.DragDrop.
+     */
+    b4Drag: function(e) {
+        this.setDragElPos(YAHOO.util.Event.getPageX(e), 
+                            YAHOO.util.Event.getPageY(e));
+    },
+
+    toString: function() {
+        return ("DD " + this.id);
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // Debugging ygDragDrop events that can be overridden
+    //////////////////////////////////////////////////////////////////////////
+    /*
+    startDrag: function(x, y) {
+        this.logger.log(this.id.toString()  + " startDrag");
+    },
+
+    onDrag: function(e) {
+        this.logger.log(this.id.toString() + " onDrag");
+    },
+
+    onDragEnter: function(e, id) {
+        this.logger.log(this.id.toString() + " onDragEnter: " + id);
+    },
+
+    onDragOver: function(e, id) {
+        this.logger.log(this.id.toString() + " onDragOver: " + id);
+    },
+
+    onDragOut: function(e, id) {
+        this.logger.log(this.id.toString() + " onDragOut: " + id);
+    },
+
+    onDragDrop: function(e, id) {
+        this.logger.log(this.id.toString() + " onDragDrop: " + id);
+    },
+
+    endDrag: function(e) {
+        this.logger.log(this.id.toString() + " endDrag");
+    }
+
+    */
+
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+});
+/**
+ * A DragDrop implementation that inserts an empty, bordered div into
+ * the document that follows the cursor during drag operations.  At the time of
+ * the click, the frame div is resized to the dimensions of the linked html
+ * element, and moved to the exact location of the linked element.
+ *
+ * References to the "frame" element refer to the single proxy element that
+ * was created to be dragged in place of all DDProxy elements on the
+ * page.
+ *
+ * @class DDProxy
+ * @extends YAHOO.util.DD
+ * @constructor
+ * @param {String} id the id of the linked html element
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DDProxy in addition to those in DragDrop: 
+ *                   resizeFrame, centerFrame, dragElId
+ */
+YAHOO.util.DDProxy = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config);
+        this.initFrame(); 
+    }
+};
+
+/**
+ * The default drag frame div id
+ * @property YAHOO.util.DDProxy.dragElId
+ * @type String
+ * @static
+ */
+YAHOO.util.DDProxy.dragElId = "ygddfdiv";
+
+YAHOO.extend(YAHOO.util.DDProxy, YAHOO.util.DD, {
+
+    /**
+     * By default we resize the drag frame to be the same size as the element
+     * we want to drag (this is to get the frame effect).  We can turn it off
+     * if we want a different behavior.
+    * @property resizeFrame
+    * @type boolean
+     */
+    resizeFrame: true,
+
+    /**
+     * By default the frame is positioned exactly where the drag element is, so
+     * we use the cursor offset provided by YAHOO.util.DD.  Another option that works only if
+     * you do not have constraints on the obj is to have the drag frame centered
+     * around the cursor.  Set centerFrame to true for this effect.
+    * @property centerFrame
+    * @type boolean
+     */
+    centerFrame: false,
+
+    /**
+     * Creates the proxy element if it does not yet exist
+    * @method createFrame
+     */
+    createFrame: function() {
+        var self=this, body=document.body;
+
+        if (!body || !body.firstChild) {
+            setTimeout( function() { self.createFrame(); }, 50 );
+            return;
+        }
+
+        var div=this.getDragEl(), Dom=YAHOO.util.Dom;
+
+        if (!div) {
+            div    = document.createElement("div");
+            div.id = this.dragElId;
+            var s  = div.style;
+
+            s.position   = "absolute";
+            s.visibility = "hidden";
+            s.cursor     = "move";
+            s.border     = "2px solid #aaa";
+            s.zIndex     = 999;
+            s.height     = "25px";
+            s.width      = "25px";
+
+            var _data = document.createElement('div');
+            Dom.setStyle(_data, 'height', '100%');
+            Dom.setStyle(_data, 'width', '100%');
+            /**
+            * If the proxy element has no background-color, then it is considered to the "transparent" by Internet Explorer.
+            * Since it is "transparent" then the events pass through it to the iframe below.
+            * So creating a "fake" div inside the proxy element and giving it a background-color, then setting it to an
+            * opacity of 0, it appears to not be there, however IE still thinks that it is so the events never pass through.
+            */
+            Dom.setStyle(_data, 'background-color', '#ccc');
+            Dom.setStyle(_data, 'opacity', '0');
+            div.appendChild(_data);
+
+            // appendChild can blow up IE if invoked prior to the window load event
+            // while rendering a table.  It is possible there are other scenarios 
+            // that would cause this to happen as well.
+            body.insertBefore(div, body.firstChild);
+        }
+    },
+
+    /**
+     * Initialization for the drag frame element.  Must be called in the
+     * constructor of all subclasses
+    * @method initFrame
+     */
+    initFrame: function() {
+        this.createFrame();
+    },
+
+    applyConfig: function() {
+        //this.logger.log("DDProxy applyConfig");
+        YAHOO.util.DDProxy.superclass.applyConfig.call(this);
+
+        this.resizeFrame = (this.config.resizeFrame !== false);
+        this.centerFrame = (this.config.centerFrame);
+        this.setDragElId(this.config.dragElId || YAHOO.util.DDProxy.dragElId);
+    },
+
+    /**
+     * Resizes the drag frame to the dimensions of the clicked object, positions 
+     * it over the object, and finally displays it
+    * @method showFrame
+    * @param {int} iPageX X click position
+    * @param {int} iPageY Y click position
+    * @private
+     */
+    showFrame: function(iPageX, iPageY) {
+        var el = this.getEl();
+        var dragEl = this.getDragEl();
+        var s = dragEl.style;
+
+        this._resizeProxy();
+
+        if (this.centerFrame) {
+            this.setDelta( Math.round(parseInt(s.width,  10)/2), 
+                           Math.round(parseInt(s.height, 10)/2) );
+        }
+
+        this.setDragElPos(iPageX, iPageY);
+
+        YAHOO.util.Dom.setStyle(dragEl, "visibility", "visible"); 
+    },
+
+    /**
+     * The proxy is automatically resized to the dimensions of the linked
+     * element when a drag is initiated, unless resizeFrame is set to false
+    * @method _resizeProxy
+    * @private
+     */
+    _resizeProxy: function() {
+        if (this.resizeFrame) {
+            var DOM    = YAHOO.util.Dom;
+            var el     = this.getEl();
+            var dragEl = this.getDragEl();
+
+            var bt = parseInt( DOM.getStyle(dragEl, "borderTopWidth"    ), 10);
+            var br = parseInt( DOM.getStyle(dragEl, "borderRightWidth"  ), 10);
+            var bb = parseInt( DOM.getStyle(dragEl, "borderBottomWidth" ), 10);
+            var bl = parseInt( DOM.getStyle(dragEl, "borderLeftWidth"   ), 10);
+
+            if (isNaN(bt)) { bt = 0; }
+            if (isNaN(br)) { br = 0; }
+            if (isNaN(bb)) { bb = 0; }
+            if (isNaN(bl)) { bl = 0; }
+
+            this.logger.log("proxy size: " + bt + "  " + br + " " + bb + " " + bl);
+
+            var newWidth  = Math.max(0, el.offsetWidth  - br - bl);                                                                                           
+            var newHeight = Math.max(0, el.offsetHeight - bt - bb);
+
+            this.logger.log("Resizing proxy element");
+
+            DOM.setStyle( dragEl, "width",  newWidth  + "px" );
+            DOM.setStyle( dragEl, "height", newHeight + "px" );
+        }
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4MouseDown: function(e) {
+        this.setStartPosition();
+        var x = YAHOO.util.Event.getPageX(e);
+        var y = YAHOO.util.Event.getPageY(e);
+        this.autoOffset(x, y);
+
+        // This causes the autoscroll code to kick off, which means autoscroll can
+        // happen prior to the check for a valid drag handle.
+        // this.setDragElPos(x, y);
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4StartDrag: function(x, y) {
+        // show the drag frame
+        this.logger.log("start drag show frame, x: " + x + ", y: " + y);
+        this.showFrame(x, y);
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4EndDrag: function(e) {
+        this.logger.log(this.id + " b4EndDrag");
+        YAHOO.util.Dom.setStyle(this.getDragEl(), "visibility", "hidden"); 
+    },
+
+    // overrides YAHOO.util.DragDrop
+    // By default we try to move the element to the last location of the frame.  
+    // This is so that the default behavior mirrors that of YAHOO.util.DD.  
+    endDrag: function(e) {
+        var DOM = YAHOO.util.Dom;
+        this.logger.log(this.id + " endDrag");
+        var lel = this.getEl();
+        var del = this.getDragEl();
+
+        // Show the drag frame briefly so we can get its position
+        // del.style.visibility = "";
+        DOM.setStyle(del, "visibility", ""); 
+
+        // Hide the linked element before the move to get around a Safari 
+        // rendering bug.
+        //lel.style.visibility = "hidden";
+        DOM.setStyle(lel, "visibility", "hidden"); 
+        YAHOO.util.DDM.moveToEl(lel, del);
+        //del.style.visibility = "hidden";
+        DOM.setStyle(del, "visibility", "hidden"); 
+        //lel.style.visibility = "";
+        DOM.setStyle(lel, "visibility", ""); 
+    },
+
+    toString: function() {
+        return ("DDProxy " + this.id);
+    }
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+});
+/**
+ * A DragDrop implementation that does not move, but can be a drop 
+ * target.  You would get the same result by simply omitting implementation 
+ * for the event callbacks, but this way we reduce the processing cost of the 
+ * event listener and the callbacks.
+ * @class DDTarget
+ * @extends YAHOO.util.DragDrop 
+ * @constructor
+ * @param {String} id the id of the element that is a drop target
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                 Valid properties for DDTarget in addition to those in 
+ *                 DragDrop: 
+ *                    none
+ */
+YAHOO.util.DDTarget = function(id, sGroup, config) {
+    if (id) {
+        this.initTarget(id, sGroup, config);
+    }
+};
+
+// YAHOO.util.DDTarget.prototype = new YAHOO.util.DragDrop();
+YAHOO.extend(YAHOO.util.DDTarget, YAHOO.util.DragDrop, {
+    toString: function() {
+        return ("DDTarget " + this.id);
+    }
+});
+YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/dragdrop/dragdrop-min.js
===================================================================
--- trunk/include/yui/dragdrop/dragdrop-min.js	(nonexistent)
+++ trunk/include/yui/dragdrop/dragdrop-min.js	(revision 2)
@@ -0,0 +1,10 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
+}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
Index: trunk/include/yui/dragdrop/dragdrop.js
===================================================================
--- trunk/include/yui/dragdrop/dragdrop.js	(nonexistent)
+++ trunk/include/yui/dragdrop/dragdrop.js	(revision 2)
@@ -0,0 +1,3601 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The drag and drop utility provides a framework for building drag and drop
+ * applications.  In addition to enabling drag and drop for specific elements,
+ * the drag and drop elements are tracked by the manager class, and the
+ * interactions between the various elements are tracked during the drag and
+ * the implementing code is notified about these important moments.
+ * @module dragdrop
+ * @title Drag and Drop
+ * @requires yahoo,dom,event
+ * @namespace YAHOO.util
+ */
+
+// Only load the library once.  Rewriting the manager class would orphan 
+// existing drag and drop instances.
+if (!YAHOO.util.DragDropMgr) {
+
+/**
+ * DragDropMgr is a singleton that tracks the element interaction for 
+ * all DragDrop items in the window.  Generally, you will not call 
+ * this class directly, but it does have helper methods that could 
+ * be useful in your DragDrop implementations.
+ * @class DragDropMgr
+ * @static
+ */
+YAHOO.util.DragDropMgr = function() {
+
+    var Event = YAHOO.util.Event,
+        Dom = YAHOO.util.Dom;
+
+    return {
+        /**
+        * This property is used to turn on global use of the shim element on all DragDrop instances, defaults to false for backcompat. (Use: YAHOO.util.DDM.useShim = true)
+       * @property useShim
+       * @type Boolean
+       * @static
+        */
+        useShim: false,
+        /**
+        * This property is used to determine if the shim is active over the screen, default false.
+       * @private
+       * @property _shimActive
+       * @type Boolean
+       * @static
+        */
+        _shimActive: false,
+        /**
+        * This property is used when useShim is set on a DragDrop object to store the current state of DDM.useShim so it can be reset when a drag operation is done.
+       * @private
+       * @property _shimState
+       * @type Boolean
+       * @static
+        */
+        _shimState: false,
+        /**
+        * This property is used when useShim is set to true, it will set the opacity on the shim to .5 for debugging. Use: (YAHOO.util.DDM._debugShim = true;)
+       * @private
+       * @property _debugShim
+       * @type Boolean
+       * @static
+        */
+        _debugShim: false,
+        /**
+        * This method will create a shim element (giving it the id of yui-ddm-shim), it also attaches the mousemove and mouseup listeners to it and attaches a scroll listener on the window
+       * @private
+       * @method _sizeShim
+       * @static
+        */
+        _createShim: function() {
+            var s = document.createElement('div');
+            s.id = 'yui-ddm-shim';
+            if (document.body.firstChild) {
+                document.body.insertBefore(s, document.body.firstChild);
+            } else {
+                document.body.appendChild(s);
+            }
+            s.style.display = 'none';
+            s.style.backgroundColor = 'red';
+            s.style.position = 'absolute';
+            s.style.zIndex = '99999';
+            Dom.setStyle(s, 'opacity', '0');
+            this._shim = s;
+            Event.on(s, "mouseup",   this.handleMouseUp, this, true);
+            Event.on(s, "mousemove", this.handleMouseMove, this, true);
+            Event.on(window, 'scroll', this._sizeShim, this, true);
+        },
+        /**
+        * This method will size the shim, called from activate and on window scroll event
+       * @private
+       * @method _sizeShim
+       * @static
+        */
+        _sizeShim: function() {
+            if (this._shimActive) {
+                var s = this._shim;
+                s.style.height = Dom.getDocumentHeight() + 'px';
+                s.style.width = Dom.getDocumentWidth() + 'px';
+                s.style.top = '0';
+                s.style.left = '0';
+            }
+        },
+        /**
+        * This method will create the shim element if needed, then show the shim element, size the element and set the _shimActive property to true
+       * @private
+       * @method _activateShim
+       * @static
+        */
+        _activateShim: function() {
+            if (this.useShim) {
+                if (!this._shim) {
+                    this._createShim();
+                }
+                this._shimActive = true;
+                var s = this._shim,
+                    o = '0';
+                if (this._debugShim) {
+                    o = '.5';
+                }
+                Dom.setStyle(s, 'opacity', o);
+                this._sizeShim();
+                s.style.display = 'block';
+            }
+        },
+        /**
+        * This method will hide the shim element and set the _shimActive property to false
+       * @private
+       * @method _deactivateShim
+       * @static
+        */
+        _deactivateShim: function() {
+            this._shim.style.display = 'none';
+            this._shimActive = false;
+        },
+        /**
+        * The HTML element created to use as a shim over the document to track mouse movements
+       * @private
+       * @property _shim
+       * @type HTMLElement
+       * @static
+        */
+        _shim: null,
+        /**
+         * Two dimensional Array of registered DragDrop objects.  The first 
+         * dimension is the DragDrop item group, the second the DragDrop 
+         * object.
+        * @property ids
+        * @type {string: string}
+        * @private
+        * @static
+         */
+        ids: {},
+
+        /**
+         * Array of element ids defined as drag handles.  Used to determine 
+         * if the element that generated the mousedown event is actually the 
+         * handle and not the html element itself.
+        * @property handleIds
+        * @type {string: string}
+        * @private
+        * @static
+         */
+        handleIds: {},
+
+        /**
+         * the DragDrop object that is currently being dragged
+        * @property dragCurrent
+        * @type DragDrop
+        * @private
+        * @static
+         **/
+        dragCurrent: null,
+
+        /**
+         * the DragDrop object(s) that are being hovered over
+        * @property dragOvers
+        * @type Array
+        * @private
+        * @static
+         */
+        dragOvers: {},
+
+        /**
+         * the X distance between the cursor and the object being dragged
+        * @property deltaX
+        * @type int
+        * @private
+        * @static
+         */
+        deltaX: 0,
+
+        /**
+         * the Y distance between the cursor and the object being dragged
+        * @property deltaY
+        * @type int
+        * @private
+        * @static
+         */
+        deltaY: 0,
+
+        /**
+         * Flag to determine if we should prevent the default behavior of the
+         * events we define. By default this is true, but this can be set to 
+         * false if you need the default behavior (not recommended)
+        * @property preventDefault
+        * @type boolean
+        * @static
+         */
+        preventDefault: true,
+
+        /**
+         * Flag to determine if we should stop the propagation of the events 
+         * we generate. This is true by default but you may want to set it to
+         * false if the html element contains other features that require the
+         * mouse click.
+        * @property stopPropagation
+        * @type boolean
+        * @static
+         */
+        stopPropagation: true,
+
+        /**
+         * Internal flag that is set to true when drag and drop has been
+         * initialized
+        * @property initialized
+        * @private
+        * @static
+         */
+        initialized: false,
+
+        /**
+         * All drag and drop can be disabled.
+        * @property locked
+        * @private
+        * @static
+         */
+        locked: false,
+
+        /**
+         * Provides additional information about the the current set of
+         * interactions.  Can be accessed from the event handlers. It
+         * contains the following properties:
+         *
+         *       out:       onDragOut interactions
+         *       enter:     onDragEnter interactions
+         *       over:      onDragOver interactions
+         *       drop:      onDragDrop interactions
+         *       point:     The location of the cursor
+         *       draggedRegion: The location of dragged element at the time
+         *                      of the interaction
+         *       sourceRegion: The location of the source elemtn at the time
+         *                     of the interaction
+         *       validDrop: boolean
+        * @property interactionInfo
+        * @type object
+        * @static
+         */
+        interactionInfo: null,
+
+        /**
+         * Called the first time an element is registered.
+        * @method init
+        * @private
+        * @static
+         */
+        init: function() {
+            this.initialized = true;
+        },
+
+        /**
+         * In point mode, drag and drop interaction is defined by the 
+         * location of the cursor during the drag/drop
+        * @property POINT
+        * @type int
+        * @static
+        * @final
+         */
+        POINT: 0,
+
+        /**
+         * In intersect mode, drag and drop interaction is defined by the 
+         * cursor position or the amount of overlap of two or more drag and 
+         * drop objects.
+        * @property INTERSECT
+        * @type int
+        * @static
+        * @final
+         */
+        INTERSECT: 1,
+
+        /**
+         * In intersect mode, drag and drop interaction is defined only by the 
+         * overlap of two or more drag and drop objects.
+        * @property STRICT_INTERSECT
+        * @type int
+        * @static
+        * @final
+         */
+        STRICT_INTERSECT: 2,
+
+        /**
+         * The current drag and drop mode.  Default: POINT
+        * @property mode
+        * @type int
+        * @static
+         */
+        mode: 0,
+
+        /**
+         * Runs method on all drag and drop objects
+        * @method _execOnAll
+        * @private
+        * @static
+         */
+        _execOnAll: function(sMethod, args) {
+            for (var i in this.ids) {
+                for (var j in this.ids[i]) {
+                    var oDD = this.ids[i][j];
+                    if (! this.isTypeOfDD(oDD)) {
+                        continue;
+                    }
+                    oDD[sMethod].apply(oDD, args);
+                }
+            }
+        },
+
+        /**
+         * Drag and drop initialization.  Sets up the global event handlers
+        * @method _onLoad
+        * @private
+        * @static
+         */
+        _onLoad: function() {
+
+            this.init();
+
+            Event.on(document, "mouseup",   this.handleMouseUp, this, true);
+            Event.on(document, "mousemove", this.handleMouseMove, this, true);
+            Event.on(window,   "unload",    this._onUnload, this, true);
+            Event.on(window,   "resize",    this._onResize, this, true);
+            // Event.on(window,   "mouseout",    this._test);
+
+        },
+
+        /**
+         * Reset constraints on all drag and drop objs
+        * @method _onResize
+        * @private
+        * @static
+         */
+        _onResize: function(e) {
+            this._execOnAll("resetConstraints", []);
+        },
+
+        /**
+         * Lock all drag and drop functionality
+        * @method lock
+        * @static
+         */
+        lock: function() { this.locked = true; },
+
+        /**
+         * Unlock all drag and drop functionality
+        * @method unlock
+        * @static
+         */
+        unlock: function() { this.locked = false; },
+
+        /**
+         * Is drag and drop locked?
+        * @method isLocked
+        * @return {boolean} True if drag and drop is locked, false otherwise.
+        * @static
+         */
+        isLocked: function() { return this.locked; },
+
+        /**
+         * Location cache that is set for all drag drop objects when a drag is
+         * initiated, cleared when the drag is finished.
+        * @property locationCache
+        * @private
+        * @static
+         */
+        locationCache: {},
+
+        /**
+         * Set useCache to false if you want to force object the lookup of each
+         * drag and drop linked element constantly during a drag.
+        * @property useCache
+        * @type boolean
+        * @static
+         */
+        useCache: true,
+
+        /**
+         * The number of pixels that the mouse needs to move after the 
+         * mousedown before the drag is initiated.  Default=3;
+        * @property clickPixelThresh
+        * @type int
+        * @static
+         */
+        clickPixelThresh: 3,
+
+        /**
+         * The number of milliseconds after the mousedown event to initiate the
+         * drag if we don't get a mouseup event. Default=1000
+        * @property clickTimeThresh
+        * @type int
+        * @static
+         */
+        clickTimeThresh: 1000,
+
+        /**
+         * Flag that indicates that either the drag pixel threshold or the 
+         * mousdown time threshold has been met
+        * @property dragThreshMet
+        * @type boolean
+        * @private
+        * @static
+         */
+        dragThreshMet: false,
+
+        /**
+         * Timeout used for the click time threshold
+        * @property clickTimeout
+        * @type Object
+        * @private
+        * @static
+         */
+        clickTimeout: null,
+
+        /**
+         * The X position of the mousedown event stored for later use when a 
+         * drag threshold is met.
+        * @property startX
+        * @type int
+        * @private
+        * @static
+         */
+        startX: 0,
+
+        /**
+         * The Y position of the mousedown event stored for later use when a 
+         * drag threshold is met.
+        * @property startY
+        * @type int
+        * @private
+        * @static
+         */
+        startY: 0,
+
+        /**
+         * Flag to determine if the drag event was fired from the click timeout and
+         * not the mouse move threshold.
+        * @property fromTimeout
+        * @type boolean
+        * @private
+        * @static
+         */
+        fromTimeout: false,
+
+        /**
+         * Each DragDrop instance must be registered with the DragDropMgr.  
+         * This is executed in DragDrop.init()
+        * @method regDragDrop
+        * @param {DragDrop} oDD the DragDrop object to register
+        * @param {String} sGroup the name of the group this element belongs to
+        * @static
+         */
+        regDragDrop: function(oDD, sGroup) {
+            if (!this.initialized) { this.init(); }
+            
+            if (!this.ids[sGroup]) {
+                this.ids[sGroup] = {};
+            }
+            this.ids[sGroup][oDD.id] = oDD;
+        },
+
+        /**
+         * Removes the supplied dd instance from the supplied group. Executed
+         * by DragDrop.removeFromGroup, so don't call this function directly.
+        * @method removeDDFromGroup
+        * @private
+        * @static
+         */
+        removeDDFromGroup: function(oDD, sGroup) {
+            if (!this.ids[sGroup]) {
+                this.ids[sGroup] = {};
+            }
+
+            var obj = this.ids[sGroup];
+            if (obj && obj[oDD.id]) {
+                delete obj[oDD.id];
+            }
+        },
+
+        /**
+         * Unregisters a drag and drop item.  This is executed in 
+         * DragDrop.unreg, use that method instead of calling this directly.
+        * @method _remove
+        * @private
+        * @static
+         */
+        _remove: function(oDD) {
+            for (var g in oDD.groups) {
+                if (g) {
+                    var item = this.ids[g];
+                    if (item && item[oDD.id]) {
+                        delete item[oDD.id];
+                    }
+                }
+                
+            }
+            delete this.handleIds[oDD.id];
+        },
+
+        /**
+         * Each DragDrop handle element must be registered.  This is done
+         * automatically when executing DragDrop.setHandleElId()
+        * @method regHandle
+        * @param {String} sDDId the DragDrop id this element is a handle for
+        * @param {String} sHandleId the id of the element that is the drag 
+         * handle
+        * @static
+         */
+        regHandle: function(sDDId, sHandleId) {
+            if (!this.handleIds[sDDId]) {
+                this.handleIds[sDDId] = {};
+            }
+            this.handleIds[sDDId][sHandleId] = sHandleId;
+        },
+
+        /**
+         * Utility function to determine if a given element has been 
+         * registered as a drag drop item.
+        * @method isDragDrop
+        * @param {String} id the element id to check
+        * @return {boolean} true if this element is a DragDrop item, 
+         * false otherwise
+        * @static
+         */
+        isDragDrop: function(id) {
+            return ( this.getDDById(id) ) ? true : false;
+        },
+
+        /**
+         * Returns the drag and drop instances that are in all groups the
+         * passed in instance belongs to.
+        * @method getRelated
+        * @param {DragDrop} p_oDD the obj to get related data for
+        * @param {boolean} bTargetsOnly if true, only return targetable objs
+        * @return {DragDrop[]} the related instances
+        * @static
+         */
+        getRelated: function(p_oDD, bTargetsOnly) {
+            var oDDs = [];
+            for (var i in p_oDD.groups) {
+                for (var j in this.ids[i]) {
+                    var dd = this.ids[i][j];
+                    if (! this.isTypeOfDD(dd)) {
+                        continue;
+                    }
+                    if (!bTargetsOnly || dd.isTarget) {
+                        oDDs[oDDs.length] = dd;
+                    }
+                }
+            }
+
+            return oDDs;
+        },
+
+        /**
+         * Returns true if the specified dd target is a legal target for 
+         * the specifice drag obj
+        * @method isLegalTarget
+        * @param {DragDrop} the drag obj
+        * @param {DragDrop} the target
+        * @return {boolean} true if the target is a legal target for the 
+         * dd obj
+        * @static
+         */
+        isLegalTarget: function (oDD, oTargetDD) {
+            var targets = this.getRelated(oDD, true);
+            for (var i=0, len=targets.length;i<len;++i) {
+                if (targets[i].id == oTargetDD.id) {
+                    return true;
+                }
+            }
+
+            return false;
+        },
+
+        /**
+         * My goal is to be able to transparently determine if an object is
+         * typeof DragDrop, and the exact subclass of DragDrop.  typeof 
+         * returns "object", oDD.constructor.toString() always returns
+         * "DragDrop" and not the name of the subclass.  So for now it just
+         * evaluates a well-known variable in DragDrop.
+        * @method isTypeOfDD
+        * @param {Object} the object to evaluate
+        * @return {boolean} true if typeof oDD = DragDrop
+        * @static
+         */
+        isTypeOfDD: function (oDD) {
+            return (oDD && oDD.__ygDragDrop);
+        },
+
+        /**
+         * Utility function to determine if a given element has been 
+         * registered as a drag drop handle for the given Drag Drop object.
+        * @method isHandle
+        * @param {String} id the element id to check
+        * @return {boolean} true if this element is a DragDrop handle, false 
+         * otherwise
+        * @static
+         */
+        isHandle: function(sDDId, sHandleId) {
+            return ( this.handleIds[sDDId] && 
+                            this.handleIds[sDDId][sHandleId] );
+        },
+
+        /**
+         * Returns the DragDrop instance for a given id
+        * @method getDDById
+        * @param {String} id the id of the DragDrop object
+        * @return {DragDrop} the drag drop object, null if it is not found
+        * @static
+         */
+        getDDById: function(id) {
+            for (var i in this.ids) {
+                if (this.ids[i][id]) {
+                    return this.ids[i][id];
+                }
+            }
+            return null;
+        },
+
+        /**
+         * Fired after a registered DragDrop object gets the mousedown event.
+         * Sets up the events required to track the object being dragged
+        * @method handleMouseDown
+        * @param {Event} e the event
+        * @param oDD the DragDrop object being dragged
+        * @private
+        * @static
+         */
+        handleMouseDown: function(e, oDD) {
+            //this._activateShim();
+
+            this.currentTarget = YAHOO.util.Event.getTarget(e);
+
+            this.dragCurrent = oDD;
+
+            var el = oDD.getEl();
+
+            // track start position
+            this.startX = YAHOO.util.Event.getPageX(e);
+            this.startY = YAHOO.util.Event.getPageY(e);
+
+            this.deltaX = this.startX - el.offsetLeft;
+            this.deltaY = this.startY - el.offsetTop;
+
+            this.dragThreshMet = false;
+
+            this.clickTimeout = setTimeout( 
+                    function() { 
+                        var DDM = YAHOO.util.DDM;
+                        DDM.startDrag(DDM.startX, DDM.startY);
+                        DDM.fromTimeout = true;
+                    }, 
+                    this.clickTimeThresh );
+        },
+
+        /**
+         * Fired when either the drag pixel threshold or the mousedown hold 
+         * time threshold has been met.
+        * @method startDrag
+        * @param x {int} the X position of the original mousedown
+        * @param y {int} the Y position of the original mousedown
+        * @static
+         */
+        startDrag: function(x, y) {
+            if (this.dragCurrent && this.dragCurrent.useShim) {
+                this._shimState = this.useShim;
+                this.useShim = true;
+            }
+            this._activateShim();
+            clearTimeout(this.clickTimeout);
+            var dc = this.dragCurrent;
+            if (dc && dc.events.b4StartDrag) {
+                dc.b4StartDrag(x, y);
+                dc.fireEvent('b4StartDragEvent', { x: x, y: y });
+            }
+            if (dc && dc.events.startDrag) {
+                dc.startDrag(x, y);
+                dc.fireEvent('startDragEvent', { x: x, y: y });
+            }
+            this.dragThreshMet = true;
+        },
+
+        /**
+         * Internal function to handle the mouseup event.  Will be invoked 
+         * from the context of the document.
+        * @method handleMouseUp
+        * @param {Event} e the event
+        * @private
+        * @static
+         */
+        handleMouseUp: function(e) {
+            if (this.dragCurrent) {
+                clearTimeout(this.clickTimeout);
+
+                if (this.dragThreshMet) {
+                    if (this.fromTimeout) {
+                        this.fromTimeout = false;
+                        this.handleMouseMove(e);
+                    }
+                    this.fromTimeout = false;
+                    this.fireEvents(e, true);
+                } else {
+                }
+
+                this.stopDrag(e);
+
+                this.stopEvent(e);
+            }
+        },
+
+        /**
+         * Utility to stop event propagation and event default, if these 
+         * features are turned on.
+        * @method stopEvent
+        * @param {Event} e the event as returned by this.getEvent()
+        * @static
+         */
+        stopEvent: function(e) {
+            if (this.stopPropagation) {
+                YAHOO.util.Event.stopPropagation(e);
+            }
+
+            if (this.preventDefault) {
+                YAHOO.util.Event.preventDefault(e);
+            }
+        },
+
+        /** 
+         * Ends the current drag, cleans up the state, and fires the endDrag
+         * and mouseUp events.  Called internally when a mouseup is detected
+         * during the drag.  Can be fired manually during the drag by passing
+         * either another event (such as the mousemove event received in onDrag)
+         * or a fake event with pageX and pageY defined (so that endDrag and
+         * onMouseUp have usable position data.).  Alternatively, pass true
+         * for the silent parameter so that the endDrag and onMouseUp events
+         * are skipped (so no event data is needed.)
+         *
+        * @method stopDrag
+        * @param {Event} e the mouseup event, another event (or a fake event) 
+         *                  with pageX and pageY defined, or nothing if the 
+         *                  silent parameter is true
+        * @param {boolean} silent skips the enddrag and mouseup events if true
+        * @static
+         */
+        stopDrag: function(e, silent) {
+            var dc = this.dragCurrent;
+            // Fire the drag end event for the item that was dragged
+            if (dc && !silent) {
+                if (this.dragThreshMet) {
+                    if (dc.events.b4EndDrag) {
+                        dc.b4EndDrag(e);
+                        dc.fireEvent('b4EndDragEvent', { e: e });
+                    }
+                    if (dc.events.endDrag) {
+                        dc.endDrag(e);
+                        dc.fireEvent('endDragEvent', { e: e });
+                    }
+                }
+                if (dc.events.mouseUp) {
+                    dc.onMouseUp(e);
+                    dc.fireEvent('mouseUpEvent', { e: e });
+                }
+            }
+
+            if (this._shimActive) {
+                this._deactivateShim();
+                if (this.dragCurrent && this.dragCurrent.useShim) {
+                    this.useShim = this._shimState;
+                    this._shimState = false;
+                }
+            }
+
+            this.dragCurrent = null;
+            this.dragOvers = {};
+        },
+
+        /** 
+         * Internal function to handle the mousemove event.  Will be invoked 
+         * from the context of the html element.
+         *
+        * @TODO figure out what we can do about mouse events lost when the 
+         * user drags objects beyond the window boundary.  Currently we can 
+         * detect this in internet explorer by verifying that the mouse is 
+         * down during the mousemove event.  Firefox doesn't give us the 
+         * button state on the mousemove event.
+        * @method handleMouseMove
+        * @param {Event} e the event
+        * @private
+        * @static
+         */
+        handleMouseMove: function(e) {
+
+            var dc = this.dragCurrent;
+            if (dc) {
+
+                // var button = e.which || e.button;
+
+                // check for IE mouseup outside of page boundary
+                if (YAHOO.util.Event.isIE && !e.button) {
+                    this.stopEvent(e);
+                    return this.handleMouseUp(e);
+                } else {
+                    if (e.clientX < 0 || e.clientY < 0) {
+                        //This will stop the element from leaving the viewport in FF, Opera & Safari
+                        //Not turned on yet
+                        //this.stopEvent(e);
+                        //return false;
+                    }
+                }
+
+                if (!this.dragThreshMet) {
+                    var diffX = Math.abs(this.startX - YAHOO.util.Event.getPageX(e));
+                    var diffY = Math.abs(this.startY - YAHOO.util.Event.getPageY(e));
+                    if (diffX > this.clickPixelThresh || 
+                                diffY > this.clickPixelThresh) {
+                        this.startDrag(this.startX, this.startY);
+                    }
+                }
+
+                if (this.dragThreshMet) {
+                    if (dc && dc.events.b4Drag) {
+                        dc.b4Drag(e);
+                        dc.fireEvent('b4DragEvent', { e: e});
+                    }
+                    if (dc && dc.events.drag) {
+                        dc.onDrag(e);
+                        dc.fireEvent('dragEvent', { e: e});
+                    }
+                    if (dc) {
+                        this.fireEvents(e, false);
+                    }
+                }
+
+                this.stopEvent(e);
+            }
+        },
+        
+        /**
+         * Iterates over all of the DragDrop elements to find ones we are 
+         * hovering over or dropping on
+        * @method fireEvents
+        * @param {Event} e the event
+        * @param {boolean} isDrop is this a drop op or a mouseover op?
+        * @private
+        * @static
+         */
+        fireEvents: function(e, isDrop) {
+            var dc = this.dragCurrent;
+
+            // If the user did the mouse up outside of the window, we could 
+            // get here even though we have ended the drag.
+            // If the config option dragOnly is true, bail out and don't fire the events
+            if (!dc || dc.isLocked() || dc.dragOnly) {
+                return;
+            }
+
+            var x = YAHOO.util.Event.getPageX(e),
+                y = YAHOO.util.Event.getPageY(e),
+                pt = new YAHOO.util.Point(x,y),
+                pos = dc.getTargetCoord(pt.x, pt.y),
+                el = dc.getDragEl(),
+                events = ['out', 'over', 'drop', 'enter'],
+                curRegion = new YAHOO.util.Region( pos.y, 
+                                               pos.x + el.offsetWidth,
+                                               pos.y + el.offsetHeight, 
+                                               pos.x ),
+            
+                oldOvers = [], // cache the previous dragOver array
+                inGroupsObj  = {},
+                inGroups  = [],
+                data = {
+                    outEvts: [],
+                    overEvts: [],
+                    dropEvts: [],
+                    enterEvts: []
+                };
+
+
+            // Check to see if the object(s) we were hovering over is no longer 
+            // being hovered over so we can fire the onDragOut event
+            for (var i in this.dragOvers) {
+
+                var ddo = this.dragOvers[i];
+
+                if (! this.isTypeOfDD(ddo)) {
+                    continue;
+                }
+                if (! this.isOverTarget(pt, ddo, this.mode, curRegion)) {
+                    data.outEvts.push( ddo );
+                }
+
+                oldOvers[i] = true;
+                delete this.dragOvers[i];
+            }
+
+            for (var sGroup in dc.groups) {
+                
+                if ("string" != typeof sGroup) {
+                    continue;
+                }
+
+                for (i in this.ids[sGroup]) {
+                    var oDD = this.ids[sGroup][i];
+                    if (! this.isTypeOfDD(oDD)) {
+                        continue;
+                    }
+
+                    if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
+                        if (this.isOverTarget(pt, oDD, this.mode, curRegion)) {
+                            inGroupsObj[sGroup] = true;
+                            // look for drop interactions
+                            if (isDrop) {
+                                data.dropEvts.push( oDD );
+                            // look for drag enter and drag over interactions
+                            } else {
+
+                                // initial drag over: dragEnter fires
+                                if (!oldOvers[oDD.id]) {
+                                    data.enterEvts.push( oDD );
+                                // subsequent drag overs: dragOver fires
+                                } else {
+                                    data.overEvts.push( oDD );
+                                }
+
+                                this.dragOvers[oDD.id] = oDD;
+                            }
+                        }
+                    }
+                }
+            }
+
+            this.interactionInfo = {
+                out:       data.outEvts,
+                enter:     data.enterEvts,
+                over:      data.overEvts,
+                drop:      data.dropEvts,
+                point:     pt,
+                draggedRegion:    curRegion,
+                sourceRegion: this.locationCache[dc.id],
+                validDrop: isDrop
+            };
+
+            
+            for (var inG in inGroupsObj) {
+                inGroups.push(inG);
+            }
+
+            // notify about a drop that did not find a target
+            if (isDrop && !data.dropEvts.length) {
+                this.interactionInfo.validDrop = false;
+                if (dc.events.invalidDrop) {
+                    dc.onInvalidDrop(e);
+                    dc.fireEvent('invalidDropEvent', { e: e });
+                }
+            }
+            for (i = 0; i < events.length; i++) {
+                var tmp = null;
+                if (data[events[i] + 'Evts']) {
+                    tmp = data[events[i] + 'Evts'];
+                }
+                if (tmp && tmp.length) {
+                    var type = events[i].charAt(0).toUpperCase() + events[i].substr(1),
+                        ev = 'onDrag' + type,
+                        b4 = 'b4Drag' + type,
+                        cev = 'drag' + type + 'Event',
+                        check = 'drag' + type;
+                    if (this.mode) {
+                        if (dc.events[b4]) {
+                            dc[b4](e, tmp, inGroups);
+                            dc.fireEvent(b4 + 'Event', { event: e, info: tmp, group: inGroups });
+                            
+                        }
+                        if (dc.events[check]) {
+                            dc[ev](e, tmp, inGroups);
+                            dc.fireEvent(cev, { event: e, info: tmp, group: inGroups });
+                        }
+                    } else {
+                        for (var b = 0, len = tmp.length; b < len; ++b) {
+                            if (dc.events[b4]) {
+                                dc[b4](e, tmp[b].id, inGroups[0]);
+                                dc.fireEvent(b4 + 'Event', { event: e, info: tmp[b].id, group: inGroups[0] });
+                            }
+                            if (dc.events[check]) {
+                                dc[ev](e, tmp[b].id, inGroups[0]);
+                                dc.fireEvent(cev, { event: e, info: tmp[b].id, group: inGroups[0] });
+                            }
+                        }
+                    }
+                }
+            }
+        },
+
+        /**
+         * Helper function for getting the best match from the list of drag 
+         * and drop objects returned by the drag and drop events when we are 
+         * in INTERSECT mode.  It returns either the first object that the 
+         * cursor is over, or the object that has the greatest overlap with 
+         * the dragged element.
+        * @method getBestMatch
+        * @param  {DragDrop[]} dds The array of drag and drop objects 
+         * targeted
+        * @return {DragDrop}       The best single match
+        * @static
+         */
+        getBestMatch: function(dds) {
+            var winner = null;
+
+            var len = dds.length;
+
+            if (len == 1) {
+                winner = dds[0];
+            } else {
+                // Loop through the targeted items
+                for (var i=0; i<len; ++i) {
+                    var dd = dds[i];
+                    // If the cursor is over the object, it wins.  If the 
+                    // cursor is over multiple matches, the first one we come
+                    // to wins.
+                    if (this.mode == this.INTERSECT && dd.cursorIsOver) {
+                        winner = dd;
+                        break;
+                    // Otherwise the object with the most overlap wins
+                    } else {
+                        if (!winner || !winner.overlap || (dd.overlap &&
+                            winner.overlap.getArea() < dd.overlap.getArea())) {
+                            winner = dd;
+                        }
+                    }
+                }
+            }
+
+            return winner;
+        },
+
+        /**
+         * Refreshes the cache of the top-left and bottom-right points of the 
+         * drag and drop objects in the specified group(s).  This is in the
+         * format that is stored in the drag and drop instance, so typical 
+         * usage is:
+         * <code>
+         * YAHOO.util.DragDropMgr.refreshCache(ddinstance.groups);
+         * </code>
+         * Alternatively:
+         * <code>
+         * YAHOO.util.DragDropMgr.refreshCache({group1:true, group2:true});
+         * </code>
+        * @TODO this really should be an indexed array.  Alternatively this
+         * method could accept both.
+        * @method refreshCache
+        * @param {Object} groups an associative array of groups to refresh
+        * @static
+         */
+        refreshCache: function(groups) {
+
+            // refresh everything if group array is not provided
+            var g = groups || this.ids;
+
+            for (var sGroup in g) {
+                if ("string" != typeof sGroup) {
+                    continue;
+                }
+                for (var i in this.ids[sGroup]) {
+                    var oDD = this.ids[sGroup][i];
+
+                    if (this.isTypeOfDD(oDD)) {
+                        var loc = this.getLocation(oDD);
+                        if (loc) {
+                            this.locationCache[oDD.id] = loc;
+                        } else {
+                            delete this.locationCache[oDD.id];
+                        }
+                    }
+                }
+            }
+        },
+
+        /**
+         * This checks to make sure an element exists and is in the DOM.  The
+         * main purpose is to handle cases where innerHTML is used to remove
+         * drag and drop objects from the DOM.  IE provides an 'unspecified
+         * error' when trying to access the offsetParent of such an element
+        * @method verifyEl
+        * @param {HTMLElement} el the element to check
+        * @return {boolean} true if the element looks usable
+        * @static
+         */
+        verifyEl: function(el) {
+            try {
+                if (el) {
+                    var parent = el.offsetParent;
+                    if (parent) {
+                        return true;
+                    }
+                }
+            } catch(e) {
+            }
+
+            return false;
+        },
+        
+        /**
+         * Returns a Region object containing the drag and drop element's position
+         * and size, including the padding configured for it
+        * @method getLocation
+        * @param {DragDrop} oDD the drag and drop object to get the 
+         *                       location for
+        * @return {YAHOO.util.Region} a Region object representing the total area
+         *                             the element occupies, including any padding
+         *                             the instance is configured for.
+        * @static
+         */
+        getLocation: function(oDD) {
+            if (! this.isTypeOfDD(oDD)) {
+                return null;
+            }
+
+            var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
+
+            try {
+                pos= YAHOO.util.Dom.getXY(el);
+            } catch (e) { }
+
+            if (!pos) {
+                return null;
+            }
+
+            x1 = pos[0];
+            x2 = x1 + el.offsetWidth;
+            y1 = pos[1];
+            y2 = y1 + el.offsetHeight;
+
+            t = y1 - oDD.padding[0];
+            r = x2 + oDD.padding[1];
+            b = y2 + oDD.padding[2];
+            l = x1 - oDD.padding[3];
+
+            return new YAHOO.util.Region( t, r, b, l );
+        },
+
+        /**
+         * Checks the cursor location to see if it over the target
+        * @method isOverTarget
+        * @param {YAHOO.util.Point} pt The point to evaluate
+        * @param {DragDrop} oTarget the DragDrop object we are inspecting
+        * @param {boolean} intersect true if we are in intersect mode
+        * @param {YAHOO.util.Region} pre-cached location of the dragged element
+        * @return {boolean} true if the mouse is over the target
+        * @private
+        * @static
+         */
+        isOverTarget: function(pt, oTarget, intersect, curRegion) {
+            // use cache if available
+            var loc = this.locationCache[oTarget.id];
+            if (!loc || !this.useCache) {
+                loc = this.getLocation(oTarget);
+                this.locationCache[oTarget.id] = loc;
+
+            }
+
+            if (!loc) {
+                return false;
+            }
+
+            oTarget.cursorIsOver = loc.contains( pt );
+
+            // DragDrop is using this as a sanity check for the initial mousedown
+            // in this case we are done.  In POINT mode, if the drag obj has no
+            // contraints, we are done. Otherwise we need to evaluate the 
+            // region the target as occupies to determine if the dragged element
+            // overlaps with it.
+            
+            var dc = this.dragCurrent;
+            if (!dc || (!intersect && !dc.constrainX && !dc.constrainY)) {
+
+                //if (oTarget.cursorIsOver) {
+                //}
+                return oTarget.cursorIsOver;
+            }
+
+            oTarget.overlap = null;
+
+
+            // Get the current location of the drag element, this is the
+            // location of the mouse event less the delta that represents
+            // where the original mousedown happened on the element.  We
+            // need to consider constraints and ticks as well.
+
+            if (!curRegion) {
+                var pos = dc.getTargetCoord(pt.x, pt.y);
+                var el = dc.getDragEl();
+                curRegion = new YAHOO.util.Region( pos.y, 
+                                                   pos.x + el.offsetWidth,
+                                                   pos.y + el.offsetHeight, 
+                                                   pos.x );
+            }
+
+            var overlap = curRegion.intersect(loc);
+
+            if (overlap) {
+                oTarget.overlap = overlap;
+                return (intersect) ? true : oTarget.cursorIsOver;
+            } else {
+                return false;
+            }
+        },
+
+        /**
+         * unload event handler
+        * @method _onUnload
+        * @private
+        * @static
+         */
+        _onUnload: function(e, me) {
+            this.unregAll();
+        },
+
+        /**
+         * Cleans up the drag and drop events and objects.
+        * @method unregAll
+        * @private
+        * @static
+         */
+        unregAll: function() {
+
+            if (this.dragCurrent) {
+                this.stopDrag();
+                this.dragCurrent = null;
+            }
+
+            this._execOnAll("unreg", []);
+
+            //for (var i in this.elementCache) {
+                //delete this.elementCache[i];
+            //}
+            //this.elementCache = {};
+
+            this.ids = {};
+        },
+
+        /**
+         * A cache of DOM elements
+        * @property elementCache
+        * @private
+        * @static
+        * @deprecated elements are not cached now
+         */
+        elementCache: {},
+        
+        /**
+         * Get the wrapper for the DOM element specified
+        * @method getElWrapper
+        * @param {String} id the id of the element to get
+        * @return {YAHOO.util.DDM.ElementWrapper} the wrapped element
+        * @private
+        * @deprecated This wrapper isn't that useful
+        * @static
+         */
+        getElWrapper: function(id) {
+            var oWrapper = this.elementCache[id];
+            if (!oWrapper || !oWrapper.el) {
+                oWrapper = this.elementCache[id] = 
+                    new this.ElementWrapper(YAHOO.util.Dom.get(id));
+            }
+            return oWrapper;
+        },
+
+        /**
+         * Returns the actual DOM element
+        * @method getElement
+        * @param {String} id the id of the elment to get
+        * @return {Object} The element
+        * @deprecated use YAHOO.util.Dom.get instead
+        * @static
+         */
+        getElement: function(id) {
+            return YAHOO.util.Dom.get(id);
+        },
+        
+        /**
+         * Returns the style property for the DOM element (i.e., 
+         * document.getElById(id).style)
+        * @method getCss
+        * @param {String} id the id of the elment to get
+        * @return {Object} The style property of the element
+        * @deprecated use YAHOO.util.Dom instead
+        * @static
+         */
+        getCss: function(id) {
+            var el = YAHOO.util.Dom.get(id);
+            return (el) ? el.style : null;
+        },
+
+        /**
+         * Inner class for cached elements
+        * @class DragDropMgr.ElementWrapper
+        * @for DragDropMgr
+        * @private
+        * @deprecated
+         */
+        ElementWrapper: function(el) {
+                /**
+                 * The element
+                * @property el
+                 */
+                this.el = el || null;
+                /**
+                 * The element id
+                * @property id
+                 */
+                this.id = this.el && el.id;
+                /**
+                 * A reference to the style property
+                * @property css
+                 */
+                this.css = this.el && el.style;
+            },
+
+        /**
+         * Returns the X position of an html element
+        * @method getPosX
+        * @param el the element for which to get the position
+        * @return {int} the X coordinate
+        * @for DragDropMgr
+        * @deprecated use YAHOO.util.Dom.getX instead
+        * @static
+         */
+        getPosX: function(el) {
+            return YAHOO.util.Dom.getX(el);
+        },
+
+        /**
+         * Returns the Y position of an html element
+        * @method getPosY
+        * @param el the element for which to get the position
+        * @return {int} the Y coordinate
+        * @deprecated use YAHOO.util.Dom.getY instead
+        * @static
+         */
+        getPosY: function(el) {
+            return YAHOO.util.Dom.getY(el); 
+        },
+
+        /**
+         * Swap two nodes.  In IE, we use the native method, for others we 
+         * emulate the IE behavior
+        * @method swapNode
+        * @param n1 the first node to swap
+        * @param n2 the other node to swap
+        * @static
+         */
+        swapNode: function(n1, n2) {
+            if (n1.swapNode) {
+                n1.swapNode(n2);
+            } else {
+                var p = n2.parentNode;
+                var s = n2.nextSibling;
+
+                if (s == n1) {
+                    p.insertBefore(n1, n2);
+                } else if (n2 == n1.nextSibling) {
+                    p.insertBefore(n2, n1);
+                } else {
+                    n1.parentNode.replaceChild(n2, n1);
+                    p.insertBefore(n1, s);
+                }
+            }
+        },
+
+        /**
+         * Returns the current scroll position
+        * @method getScroll
+        * @private
+        * @static
+         */
+        getScroll: function () {
+            var t, l, dde=document.documentElement, db=document.body;
+            if (dde && (dde.scrollTop || dde.scrollLeft)) {
+                t = dde.scrollTop;
+                l = dde.scrollLeft;
+            } else if (db) {
+                t = db.scrollTop;
+                l = db.scrollLeft;
+            } else {
+            }
+            return { top: t, left: l };
+        },
+
+        /**
+         * Returns the specified element style property
+        * @method getStyle
+        * @param {HTMLElement} el          the element
+        * @param {string}      styleProp   the style property
+        * @return {string} The value of the style property
+        * @deprecated use YAHOO.util.Dom.getStyle
+        * @static
+         */
+        getStyle: function(el, styleProp) {
+            return YAHOO.util.Dom.getStyle(el, styleProp);
+        },
+
+        /**
+         * Gets the scrollTop
+        * @method getScrollTop
+        * @return {int} the document's scrollTop
+        * @static
+         */
+        getScrollTop: function () { return this.getScroll().top; },
+
+        /**
+         * Gets the scrollLeft
+        * @method getScrollLeft
+        * @return {int} the document's scrollTop
+        * @static
+         */
+        getScrollLeft: function () { return this.getScroll().left; },
+
+        /**
+         * Sets the x/y position of an element to the location of the
+         * target element.
+        * @method moveToEl
+        * @param {HTMLElement} moveEl      The element to move
+        * @param {HTMLElement} targetEl    The position reference element
+        * @static
+         */
+        moveToEl: function (moveEl, targetEl) {
+            var aCoord = YAHOO.util.Dom.getXY(targetEl);
+            YAHOO.util.Dom.setXY(moveEl, aCoord);
+        },
+
+        /**
+         * Gets the client height
+        * @method getClientHeight
+        * @return {int} client height in px
+        * @deprecated use YAHOO.util.Dom.getViewportHeight instead
+        * @static
+         */
+        getClientHeight: function() {
+            return YAHOO.util.Dom.getViewportHeight();
+        },
+
+        /**
+         * Gets the client width
+        * @method getClientWidth
+        * @return {int} client width in px
+        * @deprecated use YAHOO.util.Dom.getViewportWidth instead
+        * @static
+         */
+        getClientWidth: function() {
+            return YAHOO.util.Dom.getViewportWidth();
+        },
+
+        /**
+         * Numeric array sort function
+        * @method numericSort
+        * @static
+         */
+        numericSort: function(a, b) { return (a - b); },
+
+        /**
+         * Internal counter
+        * @property _timeoutCount
+        * @private
+        * @static
+         */
+        _timeoutCount: 0,
+
+        /**
+         * Trying to make the load order less important.  Without this we get
+         * an error if this file is loaded before the Event Utility.
+        * @method _addListeners
+        * @private
+        * @static
+         */
+        _addListeners: function() {
+            var DDM = YAHOO.util.DDM;
+            if ( YAHOO.util.Event && document ) {
+                DDM._onLoad();
+            } else {
+                if (DDM._timeoutCount > 2000) {
+                } else {
+                    setTimeout(DDM._addListeners, 10);
+                    if (document && document.body) {
+                        DDM._timeoutCount += 1;
+                    }
+                }
+            }
+        },
+
+        /**
+         * Recursively searches the immediate parent and all child nodes for 
+         * the handle element in order to determine wheter or not it was 
+         * clicked.
+        * @method handleWasClicked
+        * @param node the html element to inspect
+        * @static
+         */
+        handleWasClicked: function(node, id) {
+            if (this.isHandle(id, node.id)) {
+                return true;
+            } else {
+                // check to see if this is a text node child of the one we want
+                var p = node.parentNode;
+
+                while (p) {
+                    if (this.isHandle(id, p.id)) {
+                        return true;
+                    } else {
+                        p = p.parentNode;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+    };
+
+}();
+
+// shorter alias, save a few bytes
+YAHOO.util.DDM = YAHOO.util.DragDropMgr;
+YAHOO.util.DDM._addListeners();
+
+}
+
+(function() {
+
+var Event=YAHOO.util.Event; 
+var Dom=YAHOO.util.Dom;
+
+/**
+ * Defines the interface and base operation of items that that can be 
+ * dragged or can be drop targets.  It was designed to be extended, overriding
+ * the event handlers for startDrag, onDrag, onDragOver, onDragOut.
+ * Up to three html elements can be associated with a DragDrop instance:
+ * <ul>
+ * <li>linked element: the element that is passed into the constructor.
+ * This is the element which defines the boundaries for interaction with 
+ * other DragDrop objects.</li>
+ * <li>handle element(s): The drag operation only occurs if the element that 
+ * was clicked matches a handle element.  By default this is the linked 
+ * element, but there are times that you will want only a portion of the 
+ * linked element to initiate the drag operation, and the setHandleElId() 
+ * method provides a way to define this.</li>
+ * <li>drag element: this represents an the element that would be moved along
+ * with the cursor during a drag operation.  By default, this is the linked
+ * element itself as in {@link YAHOO.util.DD}.  setDragElId() lets you define
+ * a separate element that would be moved, as in {@link YAHOO.util.DDProxy}
+ * </li>
+ * </ul>
+ * This class should not be instantiated until the onload event to ensure that
+ * the associated elements are available.
+ * The following would define a DragDrop obj that would interact with any 
+ * other DragDrop obj in the "group1" group:
+ * <pre>
+ *  dd = new YAHOO.util.DragDrop("div1", "group1");
+ * </pre>
+ * Since none of the event handlers have been implemented, nothing would 
+ * actually happen if you were to run the code above.  Normally you would 
+ * override this class or one of the default implementations, but you can 
+ * also override the methods you want on an instance of the class...
+ * <pre>
+ *  dd.onDragDrop = function(e, id) {
+ *  &nbsp;&nbsp;alert("dd was dropped on " + id);
+ *  }
+ * </pre>
+ * @namespace YAHOO.util
+ * @class DragDrop
+ * @constructor
+ * @param {String} id of the element that is linked to this instance
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DragDrop: 
+ *                    padding, isTarget, maintainOffset, primaryButtonOnly,
+ */
+YAHOO.util.DragDrop = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config); 
+    }
+};
+
+YAHOO.util.DragDrop.prototype = {
+    /**
+     * An Object Literal containing the events that we will be using: mouseDown, b4MouseDown, mouseUp, b4StartDrag, startDrag, b4EndDrag, endDrag, mouseUp, drag, b4Drag, invalidDrop, b4DragOut, dragOut, dragEnter, b4DragOver, dragOver, b4DragDrop, dragDrop
+     * By setting any of these to false, then event will not be fired.
+    * @property events
+    * @type object
+     */
+    events: null,
+    /**
+   * @method on
+   * @description Shortcut for EventProvider.subscribe, see <a href="YAHOO.util.EventProvider.html#subscribe">YAHOO.util.EventProvider.subscribe</a>
+    */
+    on: function() {
+        this.subscribe.apply(this, arguments);
+    },
+    /**
+     * The id of the element associated with this object.  This is what we 
+     * refer to as the "linked element" because the size and position of 
+     * this element is used to determine when the drag and drop objects have 
+     * interacted.
+    * @property id
+    * @type String
+     */
+    id: null,
+
+    /**
+     * Configuration attributes passed into the constructor
+    * @property config
+    * @type object
+     */
+    config: null,
+
+    /**
+     * The id of the element that will be dragged.  By default this is same 
+     * as the linked element , but could be changed to another element. Ex: 
+     * YAHOO.util.DDProxy
+    * @property dragElId
+    * @type String
+    * @private
+     */
+    dragElId: null, 
+
+    /**
+     * the id of the element that initiates the drag operation.  By default 
+     * this is the linked element, but could be changed to be a child of this
+     * element.  This lets us do things like only starting the drag when the 
+     * header element within the linked html element is clicked.
+    * @property handleElId
+    * @type String
+    * @private
+     */
+    handleElId: null, 
+
+    /**
+     * An associative array of HTML tags that will be ignored if clicked.
+    * @property invalidHandleTypes
+    * @type {string: string}
+     */
+    invalidHandleTypes: null, 
+
+    /**
+     * An associative array of ids for elements that will be ignored if clicked
+    * @property invalidHandleIds
+    * @type {string: string}
+     */
+    invalidHandleIds: null, 
+
+    /**
+     * An indexted array of css class names for elements that will be ignored
+     * if clicked.
+    * @property invalidHandleClasses
+    * @type string[]
+     */
+    invalidHandleClasses: null, 
+
+    /**
+     * The linked element's absolute X position at the time the drag was 
+     * started
+    * @property startPageX
+    * @type int
+    * @private
+     */
+    startPageX: 0,
+
+    /**
+     * The linked element's absolute X position at the time the drag was 
+     * started
+    * @property startPageY
+    * @type int
+    * @private
+     */
+    startPageY: 0,
+
+    /**
+     * The group defines a logical collection of DragDrop objects that are 
+     * related.  Instances only get events when interacting with other 
+     * DragDrop object in the same group.  This lets us define multiple 
+     * groups using a single DragDrop subclass if we want.
+    * @property groups
+    * @type {string: string}
+     */
+    groups: null,
+
+    /**
+     * Individual drag/drop instances can be locked.  This will prevent 
+     * onmousedown start drag.
+    * @property locked
+    * @type boolean
+    * @private
+     */
+    locked: false,
+
+    /**
+     * Lock this instance
+    * @method lock
+     */
+    lock: function() { this.locked = true; },
+
+    /**
+     * Unlock this instace
+    * @method unlock
+     */
+    unlock: function() { this.locked = false; },
+
+    /**
+     * By default, all instances can be a drop target.  This can be disabled by
+     * setting isTarget to false.
+    * @property isTarget
+    * @type boolean
+     */
+    isTarget: true,
+
+    /**
+     * The padding configured for this drag and drop object for calculating
+     * the drop zone intersection with this object.
+    * @property padding
+    * @type int[]
+     */
+    padding: null,
+    /**
+     * If this flag is true, do not fire drop events. The element is a drag only element (for movement not dropping)
+    * @property dragOnly
+    * @type Boolean
+     */
+    dragOnly: false,
+
+    /**
+     * If this flag is true, a shim will be placed over the screen/viewable area to track mouse events. Should help with dragging elements over iframes and other controls.
+    * @property useShim
+    * @type Boolean
+     */
+    useShim: false,
+
+    /**
+     * Cached reference to the linked element
+    * @property _domRef
+    * @private
+     */
+    _domRef: null,
+
+    /**
+     * Internal typeof flag
+    * @property __ygDragDrop
+    * @private
+     */
+    __ygDragDrop: true,
+
+    /**
+     * Set to true when horizontal contraints are applied
+    * @property constrainX
+    * @type boolean
+    * @private
+     */
+    constrainX: false,
+
+    /**
+     * Set to true when vertical contraints are applied
+    * @property constrainY
+    * @type boolean
+    * @private
+     */
+    constrainY: false,
+
+    /**
+     * The left constraint
+    * @property minX
+    * @type int
+    * @private
+     */
+    minX: 0,
+
+    /**
+     * The right constraint
+    * @property maxX
+    * @type int
+    * @private
+     */
+    maxX: 0,
+
+    /**
+     * The up constraint 
+    * @property minY
+    * @type int
+    * @type int
+    * @private
+     */
+    minY: 0,
+
+    /**
+     * The down constraint 
+    * @property maxY
+    * @type int
+    * @private
+     */
+    maxY: 0,
+
+    /**
+     * The difference between the click position and the source element's location
+    * @property deltaX
+    * @type int
+    * @private
+     */
+    deltaX: 0,
+
+    /**
+     * The difference between the click position and the source element's location
+    * @property deltaY
+    * @type int
+    * @private
+     */
+    deltaY: 0,
+
+    /**
+     * Maintain offsets when we resetconstraints.  Set to true when you want
+     * the position of the element relative to its parent to stay the same
+     * when the page changes
+     *
+    * @property maintainOffset
+    * @type boolean
+     */
+    maintainOffset: false,
+
+    /**
+     * Array of pixel locations the element will snap to if we specified a 
+     * horizontal graduation/interval.  This array is generated automatically
+     * when you define a tick interval.
+    * @property xTicks
+    * @type int[]
+     */
+    xTicks: null,
+
+    /**
+     * Array of pixel locations the element will snap to if we specified a 
+     * vertical graduation/interval.  This array is generated automatically 
+     * when you define a tick interval.
+    * @property yTicks
+    * @type int[]
+     */
+    yTicks: null,
+
+    /**
+     * By default the drag and drop instance will only respond to the primary
+     * button click (left button for a right-handed mouse).  Set to true to
+     * allow drag and drop to start with any mouse click that is propogated
+     * by the browser
+    * @property primaryButtonOnly
+    * @type boolean
+     */
+    primaryButtonOnly: true,
+
+    /**
+     * The availabe property is false until the linked dom element is accessible.
+    * @property available
+    * @type boolean
+     */
+    available: false,
+
+    /**
+     * By default, drags can only be initiated if the mousedown occurs in the
+     * region the linked element is.  This is done in part to work around a
+     * bug in some browsers that mis-report the mousedown if the previous
+     * mouseup happened outside of the window.  This property is set to true
+     * if outer handles are defined.
+     *
+    * @property hasOuterHandles
+    * @type boolean
+    * @default false
+     */
+    hasOuterHandles: false,
+
+    /**
+     * Property that is assigned to a drag and drop object when testing to
+     * see if it is being targeted by another dd object.  This property
+     * can be used in intersect mode to help determine the focus of
+     * the mouse interaction.  DDM.getBestMatch uses this property first to
+     * determine the closest match in INTERSECT mode when multiple targets
+     * are part of the same interaction.
+    * @property cursorIsOver
+    * @type boolean
+     */
+    cursorIsOver: false,
+
+    /**
+     * Property that is assigned to a drag and drop object when testing to
+     * see if it is being targeted by another dd object.  This is a region
+     * that represents the area the draggable element overlaps this target.
+     * DDM.getBestMatch uses this property to compare the size of the overlap
+     * to that of other targets in order to determine the closest match in
+     * INTERSECT mode when multiple targets are part of the same interaction.
+    * @property overlap 
+    * @type YAHOO.util.Region
+     */
+    overlap: null,
+
+    /**
+     * Code that executes immediately before the startDrag event
+    * @method b4StartDrag
+    * @private
+     */
+    b4StartDrag: function(x, y) { },
+
+    /**
+     * Abstract method called after a drag/drop object is clicked
+     * and the drag or mousedown time thresholds have beeen met.
+    * @method startDrag
+    * @param {int} X click location
+    * @param {int} Y click location
+     */
+    startDrag: function(x, y) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDrag event
+    * @method b4Drag
+    * @private
+     */
+    b4Drag: function(e) { },
+
+    /**
+     * Abstract method called during the onMouseMove event while dragging an 
+     * object.
+    * @method onDrag
+    * @param {Event} e the mousemove event
+     */
+    onDrag: function(e) { /* override this */ },
+
+    /**
+     * Abstract method called when this element fist begins hovering over 
+     * another DragDrop obj
+    * @method onDragEnter
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this is hovering over.  In INTERSECT mode, an array of one or more 
+     * dragdrop items being hovered over.
+     */
+    onDragEnter: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragOver event
+    * @method b4DragOver
+    * @private
+     */
+    b4DragOver: function(e) { },
+
+    /**
+     * Abstract method called when this element is hovering over another 
+     * DragDrop obj
+    * @method onDragOver
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this is hovering over.  In INTERSECT mode, an array of dd items 
+     * being hovered over.
+     */
+    onDragOver: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragOut event
+    * @method b4DragOut
+    * @private
+     */
+    b4DragOut: function(e) { },
+
+    /**
+     * Abstract method called when we are no longer hovering over an element
+    * @method onDragOut
+    * @param {Event} e the mousemove event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this was hovering over.  In INTERSECT mode, an array of dd items 
+     * that the mouse is no longer over.
+     */
+    onDragOut: function(e, id) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the onDragDrop event
+    * @method b4DragDrop
+    * @private
+     */
+    b4DragDrop: function(e) { },
+
+    /**
+     * Abstract method called when this item is dropped on another DragDrop 
+     * obj
+    * @method onDragDrop
+    * @param {Event} e the mouseup event
+    * @param {String|DragDrop[]} id In POINT mode, the element
+     * id this was dropped on.  In INTERSECT mode, an array of dd items this 
+     * was dropped on.
+     */
+    onDragDrop: function(e, id) { /* override this */ },
+
+    /**
+     * Abstract method called when this item is dropped on an area with no
+     * drop target
+    * @method onInvalidDrop
+    * @param {Event} e the mouseup event
+     */
+    onInvalidDrop: function(e) { /* override this */ },
+
+    /**
+     * Code that executes immediately before the endDrag event
+    * @method b4EndDrag
+    * @private
+     */
+    b4EndDrag: function(e) { },
+
+    /**
+     * Fired when we are done dragging the object
+    * @method endDrag
+    * @param {Event} e the mouseup event
+     */
+    endDrag: function(e) { /* override this */ },
+
+    /**
+     * Code executed immediately before the onMouseDown event
+    * @method b4MouseDown
+    * @param {Event} e the mousedown event
+    * @private
+     */
+    b4MouseDown: function(e) {  },
+
+    /**
+     * Event handler that fires when a drag/drop obj gets a mousedown
+    * @method onMouseDown
+    * @param {Event} e the mousedown event
+     */
+    onMouseDown: function(e) { /* override this */ },
+
+    /**
+     * Event handler that fires when a drag/drop obj gets a mouseup
+    * @method onMouseUp
+    * @param {Event} e the mouseup event
+     */
+    onMouseUp: function(e) { /* override this */ },
+   
+    /**
+     * Override the onAvailable method to do what is needed after the initial
+     * position was determined.
+    * @method onAvailable
+     */
+    onAvailable: function () { 
+    },
+
+    /**
+     * Returns a reference to the linked element
+    * @method getEl
+    * @return {HTMLElement} the html element 
+     */
+    getEl: function() { 
+        if (!this._domRef) {
+            this._domRef = Dom.get(this.id); 
+        }
+
+        return this._domRef;
+    },
+
+    /**
+     * Returns a reference to the actual element to drag.  By default this is
+     * the same as the html element, but it can be assigned to another 
+     * element. An example of this can be found in YAHOO.util.DDProxy
+    * @method getDragEl
+    * @return {HTMLElement} the html element 
+     */
+    getDragEl: function() {
+        return Dom.get(this.dragElId);
+    },
+
+    /**
+     * Sets up the DragDrop object.  Must be called in the constructor of any
+     * YAHOO.util.DragDrop subclass
+    * @method init
+    * @param id the id of the linked element
+    * @param {String} sGroup the group of related items
+    * @param {object} config configuration attributes
+     */
+    init: function(id, sGroup, config) {
+        this.initTarget(id, sGroup, config);
+        Event.on(this._domRef || this.id, "mousedown", 
+                        this.handleMouseDown, this, true);
+
+        // Event.on(this.id, "selectstart", Event.preventDefault);
+        for (var i in this.events) {
+            this.createEvent(i + 'Event');
+        }
+        
+    },
+
+    /**
+     * Initializes Targeting functionality only... the object does not
+     * get a mousedown handler.
+    * @method initTarget
+    * @param id the id of the linked element
+    * @param {String} sGroup the group of related items
+    * @param {object} config configuration attributes
+     */
+    initTarget: function(id, sGroup, config) {
+
+        // configuration attributes 
+        this.config = config || {};
+
+        this.events = {};
+
+        // create a local reference to the drag and drop manager
+        this.DDM = YAHOO.util.DDM;
+
+        // initialize the groups object
+        this.groups = {};
+
+        // assume that we have an element reference instead of an id if the
+        // parameter is not a string
+        if (typeof id !== "string") {
+            this._domRef = id;
+            id = Dom.generateId(id);
+        }
+
+        // set the id
+        this.id = id;
+
+        // add to an interaction group
+        this.addToGroup((sGroup) ? sGroup : "default");
+
+        // We don't want to register this as the handle with the manager
+        // so we just set the id rather than calling the setter.
+        this.handleElId = id;
+
+        Event.onAvailable(id, this.handleOnAvailable, this, true);
+
+
+        // the linked element is the element that gets dragged by default
+        this.setDragElId(id); 
+
+        // by default, clicked anchors will not start drag operations. 
+        // @TODO what else should be here?  Probably form fields.
+        this.invalidHandleTypes = { A: "A" };
+        this.invalidHandleIds = {};
+        this.invalidHandleClasses = [];
+
+        this.applyConfig();
+    },
+
+    /**
+     * Applies the configuration parameters that were passed into the constructor.
+     * This is supposed to happen at each level through the inheritance chain.  So
+     * a DDProxy implentation will execute apply config on DDProxy, DD, and 
+     * DragDrop in order to get all of the parameters that are available in
+     * each object.
+    * @method applyConfig
+     */
+    applyConfig: function() {
+        this.events = {
+            mouseDown: true,
+            b4MouseDown: true,
+            mouseUp: true,
+            b4StartDrag: true,
+            startDrag: true,
+            b4EndDrag: true,
+            endDrag: true,
+            drag: true,
+            b4Drag: true,
+            invalidDrop: true,
+            b4DragOut: true,
+            dragOut: true,
+            dragEnter: true,
+            b4DragOver: true,
+            dragOver: true,
+            b4DragDrop: true,
+            dragDrop: true
+        };
+        
+        if (this.config.events) {
+            for (var i in this.config.events) {
+                if (this.config.events[i] === false) {
+                    this.events[i] = false;
+                }
+            }
+        }
+
+
+        // configurable properties: 
+        //    padding, isTarget, maintainOffset, primaryButtonOnly
+        this.padding           = this.config.padding || [0, 0, 0, 0];
+        this.isTarget          = (this.config.isTarget !== false);
+        this.maintainOffset    = (this.config.maintainOffset);
+        this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
+        this.dragOnly = ((this.config.dragOnly === true) ? true : false);
+        this.useShim = ((this.config.useShim === true) ? true : false);
+    },
+
+    /**
+     * Executed when the linked element is available
+    * @method handleOnAvailable
+    * @private
+     */
+    handleOnAvailable: function() {
+        this.available = true;
+        this.resetConstraints();
+        this.onAvailable();
+    },
+
+     /**
+     * Configures the padding for the target zone in px.  Effectively expands
+     * (or reduces) the virtual object size for targeting calculations.  
+     * Supports css-style shorthand; if only one parameter is passed, all sides
+     * will have that padding, and if only two are passed, the top and bottom
+     * will have the first param, the left and right the second.
+    * @method setPadding
+    * @param {int} iTop    Top pad
+    * @param {int} iRight  Right pad
+    * @param {int} iBot    Bot pad
+    * @param {int} iLeft   Left pad
+     */
+    setPadding: function(iTop, iRight, iBot, iLeft) {
+        // this.padding = [iLeft, iRight, iTop, iBot];
+        if (!iRight && 0 !== iRight) {
+            this.padding = [iTop, iTop, iTop, iTop];
+        } else if (!iBot && 0 !== iBot) {
+            this.padding = [iTop, iRight, iTop, iRight];
+        } else {
+            this.padding = [iTop, iRight, iBot, iLeft];
+        }
+    },
+
+    /**
+     * Stores the initial placement of the linked element.
+    * @method setInitialPosition
+    * @param {int} diffX   the X offset, default 0
+    * @param {int} diffY   the Y offset, default 0
+    * @private
+     */
+    setInitPosition: function(diffX, diffY) {
+        var el = this.getEl();
+
+        if (!this.DDM.verifyEl(el)) {
+            if (el && el.style && (el.style.display == 'none')) {
+            } else {
+            }
+            return;
+        }
+
+        var dx = diffX || 0;
+        var dy = diffY || 0;
+
+        var p = Dom.getXY( el );
+
+        this.initPageX = p[0] - dx;
+        this.initPageY = p[1] - dy;
+
+        this.lastPageX = p[0];
+        this.lastPageY = p[1];
+
+
+
+        this.setStartPosition(p);
+    },
+
+    /**
+     * Sets the start position of the element.  This is set when the obj
+     * is initialized, the reset when a drag is started.
+    * @method setStartPosition
+    * @param pos current position (from previous lookup)
+    * @private
+     */
+    setStartPosition: function(pos) {
+        var p = pos || Dom.getXY(this.getEl());
+
+        this.deltaSetXY = null;
+
+        this.startPageX = p[0];
+        this.startPageY = p[1];
+    },
+
+    /**
+     * Add this instance to a group of related drag/drop objects.  All 
+     * instances belong to at least one group, and can belong to as many 
+     * groups as needed.
+    * @method addToGroup
+    * @param sGroup {string} the name of the group
+     */
+    addToGroup: function(sGroup) {
+        this.groups[sGroup] = true;
+        this.DDM.regDragDrop(this, sGroup);
+    },
+
+    /**
+     * Remove's this instance from the supplied interaction group
+    * @method removeFromGroup
+    * @param {string}  sGroup  The group to drop
+     */
+    removeFromGroup: function(sGroup) {
+        if (this.groups[sGroup]) {
+            delete this.groups[sGroup];
+        }
+
+        this.DDM.removeDDFromGroup(this, sGroup);
+    },
+
+    /**
+     * Allows you to specify that an element other than the linked element 
+     * will be moved with the cursor during a drag
+    * @method setDragElId
+    * @param id {string} the id of the element that will be used to initiate the drag
+     */
+    setDragElId: function(id) {
+        this.dragElId = id;
+    },
+
+    /**
+     * Allows you to specify a child of the linked element that should be 
+     * used to initiate the drag operation.  An example of this would be if 
+     * you have a content div with text and links.  Clicking anywhere in the 
+     * content area would normally start the drag operation.  Use this method
+     * to specify that an element inside of the content div is the element 
+     * that starts the drag operation.
+    * @method setHandleElId
+    * @param id {string} the id of the element that will be used to 
+     * initiate the drag.
+     */
+    setHandleElId: function(id) {
+        if (typeof id !== "string") {
+            id = Dom.generateId(id);
+        }
+        this.handleElId = id;
+        this.DDM.regHandle(this.id, id);
+    },
+
+    /**
+     * Allows you to set an element outside of the linked element as a drag 
+     * handle
+    * @method setOuterHandleElId
+    * @param id the id of the element that will be used to initiate the drag
+     */
+    setOuterHandleElId: function(id) {
+        if (typeof id !== "string") {
+            id = Dom.generateId(id);
+        }
+        Event.on(id, "mousedown", 
+                this.handleMouseDown, this, true);
+        this.setHandleElId(id);
+
+        this.hasOuterHandles = true;
+    },
+
+    /**
+     * Remove all drag and drop hooks for this element
+    * @method unreg
+     */
+    unreg: function() {
+        Event.removeListener(this.id, "mousedown", 
+                this.handleMouseDown);
+        this._domRef = null;
+        this.DDM._remove(this);
+    },
+
+    /**
+     * Returns true if this instance is locked, or the drag drop mgr is locked
+     * (meaning that all drag/drop is disabled on the page.)
+    * @method isLocked
+    * @return {boolean} true if this obj or all drag/drop is locked, else 
+     * false
+     */
+    isLocked: function() {
+        return (this.DDM.isLocked() || this.locked);
+    },
+
+    /**
+     * Fired when this object is clicked
+    * @method handleMouseDown
+    * @param {Event} e 
+    * @param {YAHOO.util.DragDrop} oDD the clicked dd object (this dd obj)
+    * @private
+     */
+    handleMouseDown: function(e, oDD) {
+
+        var button = e.which || e.button;
+
+        if (this.primaryButtonOnly && button > 1) {
+            return;
+        }
+
+        if (this.isLocked()) {
+            return;
+        }
+
+
+
+        // firing the mousedown events prior to calculating positions
+        var b4Return = this.b4MouseDown(e),
+        b4Return2 = true;
+
+        if (this.events.b4MouseDown) {
+            b4Return2 = this.fireEvent('b4MouseDownEvent', e);
+        }
+        var mDownReturn = this.onMouseDown(e),
+            mDownReturn2 = true;
+        if (this.events.mouseDown) {
+            mDownReturn2 = this.fireEvent('mouseDownEvent', e);
+        }
+
+        if ((b4Return === false) || (mDownReturn === false) || (b4Return2 === false) || (mDownReturn2 === false)) {
+            return;
+        }
+
+        this.DDM.refreshCache(this.groups);
+        // var self = this;
+        // setTimeout( function() { self.DDM.refreshCache(self.groups); }, 0);
+
+        // Only process the event if we really clicked within the linked 
+        // element.  The reason we make this check is that in the case that 
+        // another element was moved between the clicked element and the 
+        // cursor in the time between the mousedown and mouseup events. When 
+        // this happens, the element gets the next mousedown event 
+        // regardless of where on the screen it happened.  
+        var pt = new YAHOO.util.Point(Event.getPageX(e), Event.getPageY(e));
+        if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) )  {
+        } else {
+            if (this.clickValidator(e)) {
+
+
+                // set the initial element position
+                this.setStartPosition();
+
+                // start tracking mousemove distance and mousedown time to
+                // determine when to start the actual drag
+                this.DDM.handleMouseDown(e, this);
+
+                // this mousedown is mine
+                this.DDM.stopEvent(e);
+            } else {
+
+
+            }
+        }
+    },
+
+    /**
+    * @method clickValidator
+    * @description Method validates that the clicked element
+     * was indeed the handle or a valid child of the handle
+    * @param {Event} e 
+     */
+    clickValidator: function(e) {
+        var target = YAHOO.util.Event.getTarget(e);
+        return ( this.isValidHandleChild(target) &&
+                    (this.id == this.handleElId || 
+                        this.DDM.handleWasClicked(target, this.id)) );
+    },
+
+    /**
+     * Finds the location the element should be placed if we want to move
+     * it to where the mouse location less the click offset would place us.
+    * @method getTargetCoord
+    * @param {int} iPageX the X coordinate of the click
+    * @param {int} iPageY the Y coordinate of the click
+    * @return an object that contains the coordinates (Object.x and Object.y)
+    * @private
+     */
+    getTargetCoord: function(iPageX, iPageY) {
+
+
+        var x = iPageX - this.deltaX;
+        var y = iPageY - this.deltaY;
+
+        if (this.constrainX) {
+            if (x < this.minX) { x = this.minX; }
+            if (x > this.maxX) { x = this.maxX; }
+        }
+
+        if (this.constrainY) {
+            if (y < this.minY) { y = this.minY; }
+            if (y > this.maxY) { y = this.maxY; }
+        }
+
+        x = this.getTick(x, this.xTicks);
+        y = this.getTick(y, this.yTicks);
+
+
+        return {x:x, y:y};
+    },
+
+    /**
+     * Allows you to specify a tag name that should not start a drag operation
+     * when clicked.  This is designed to facilitate embedding links within a
+     * drag handle that do something other than start the drag.
+    * @method addInvalidHandleType
+    * @param {string} tagName the type of element to exclude
+     */
+    addInvalidHandleType: function(tagName) {
+        var type = tagName.toUpperCase();
+        this.invalidHandleTypes[type] = type;
+    },
+
+    /**
+     * Lets you to specify an element id for a child of a drag handle
+     * that should not initiate a drag
+    * @method addInvalidHandleId
+    * @param {string} id the element id of the element you wish to ignore
+     */
+    addInvalidHandleId: function(id) {
+        if (typeof id !== "string") {
+            id = Dom.generateId(id);
+        }
+        this.invalidHandleIds[id] = id;
+    },
+
+
+    /**
+     * Lets you specify a css class of elements that will not initiate a drag
+    * @method addInvalidHandleClass
+    * @param {string} cssClass the class of the elements you wish to ignore
+     */
+    addInvalidHandleClass: function(cssClass) {
+        this.invalidHandleClasses.push(cssClass);
+    },
+
+    /**
+     * Unsets an excluded tag name set by addInvalidHandleType
+    * @method removeInvalidHandleType
+    * @param {string} tagName the type of element to unexclude
+     */
+    removeInvalidHandleType: function(tagName) {
+        var type = tagName.toUpperCase();
+        // this.invalidHandleTypes[type] = null;
+        delete this.invalidHandleTypes[type];
+    },
+    
+    /**
+     * Unsets an invalid handle id
+    * @method removeInvalidHandleId
+    * @param {string} id the id of the element to re-enable
+     */
+    removeInvalidHandleId: function(id) {
+        if (typeof id !== "string") {
+            id = Dom.generateId(id);
+        }
+        delete this.invalidHandleIds[id];
+    },
+
+    /**
+     * Unsets an invalid css class
+    * @method removeInvalidHandleClass
+    * @param {string} cssClass the class of the element(s) you wish to 
+     * re-enable
+     */
+    removeInvalidHandleClass: function(cssClass) {
+        for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
+            if (this.invalidHandleClasses[i] == cssClass) {
+                delete this.invalidHandleClasses[i];
+            }
+        }
+    },
+
+    /**
+     * Checks the tag exclusion list to see if this click should be ignored
+    * @method isValidHandleChild
+    * @param {HTMLElement} node the HTMLElement to evaluate
+    * @return {boolean} true if this is a valid tag type, false if not
+     */
+    isValidHandleChild: function(node) {
+
+        var valid = true;
+        // var n = (node.nodeName == "#text") ? node.parentNode : node;
+        var nodeName;
+        try {
+            nodeName = node.nodeName.toUpperCase();
+        } catch(e) {
+            nodeName = node.nodeName;
+        }
+        valid = valid && !this.invalidHandleTypes[nodeName];
+        valid = valid && !this.invalidHandleIds[node.id];
+
+        for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
+            valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
+        }
+
+
+        return valid;
+
+    },
+
+    /**
+     * Create the array of horizontal tick marks if an interval was specified
+     * in setXConstraint().
+    * @method setXTicks
+    * @private
+     */
+    setXTicks: function(iStartX, iTickSize) {
+        this.xTicks = [];
+        this.xTickSize = iTickSize;
+        
+        var tickMap = {};
+
+        for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
+            if (!tickMap[i]) {
+                this.xTicks[this.xTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
+            if (!tickMap[i]) {
+                this.xTicks[this.xTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        this.xTicks.sort(this.DDM.numericSort) ;
+    },
+
+    /**
+     * Create the array of vertical tick marks if an interval was specified in 
+     * setYConstraint().
+    * @method setYTicks
+    * @private
+     */
+    setYTicks: function(iStartY, iTickSize) {
+        this.yTicks = [];
+        this.yTickSize = iTickSize;
+
+        var tickMap = {};
+
+        for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
+            if (!tickMap[i]) {
+                this.yTicks[this.yTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
+            if (!tickMap[i]) {
+                this.yTicks[this.yTicks.length] = i;
+                tickMap[i] = true;
+            }
+        }
+
+        this.yTicks.sort(this.DDM.numericSort) ;
+    },
+
+    /**
+     * By default, the element can be dragged any place on the screen.  Use 
+     * this method to limit the horizontal travel of the element.  Pass in 
+     * 0,0 for the parameters if you want to lock the drag to the y axis.
+    * @method setXConstraint
+    * @param {int} iLeft the number of pixels the element can move to the left
+    * @param {int} iRight the number of pixels the element can move to the 
+     * right
+    * @param {int} iTickSize optional parameter for specifying that the 
+     * element
+     * should move iTickSize pixels at a time.
+     */
+    setXConstraint: function(iLeft, iRight, iTickSize) {
+        this.leftConstraint = parseInt(iLeft, 10);
+        this.rightConstraint = parseInt(iRight, 10);
+
+        this.minX = this.initPageX - this.leftConstraint;
+        this.maxX = this.initPageX + this.rightConstraint;
+        if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
+
+        this.constrainX = true;
+    },
+
+    /**
+     * Clears any constraints applied to this instance.  Also clears ticks
+     * since they can't exist independent of a constraint at this time.
+    * @method clearConstraints
+     */
+    clearConstraints: function() {
+        this.constrainX = false;
+        this.constrainY = false;
+        this.clearTicks();
+    },
+
+    /**
+     * Clears any tick interval defined for this instance
+    * @method clearTicks
+     */
+    clearTicks: function() {
+        this.xTicks = null;
+        this.yTicks = null;
+        this.xTickSize = 0;
+        this.yTickSize = 0;
+    },
+
+    /**
+     * By default, the element can be dragged any place on the screen.  Set 
+     * this to limit the vertical travel of the element.  Pass in 0,0 for the
+     * parameters if you want to lock the drag to the x axis.
+    * @method setYConstraint
+    * @param {int} iUp the number of pixels the element can move up
+    * @param {int} iDown the number of pixels the element can move down
+    * @param {int} iTickSize optional parameter for specifying that the 
+     * element should move iTickSize pixels at a time.
+     */
+    setYConstraint: function(iUp, iDown, iTickSize) {
+        this.topConstraint = parseInt(iUp, 10);
+        this.bottomConstraint = parseInt(iDown, 10);
+
+        this.minY = this.initPageY - this.topConstraint;
+        this.maxY = this.initPageY + this.bottomConstraint;
+        if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
+
+        this.constrainY = true;
+        
+    },
+
+    /**
+     * resetConstraints must be called if you manually reposition a dd element.
+    * @method resetConstraints
+     */
+    resetConstraints: function() {
+
+
+        // Maintain offsets if necessary
+        if (this.initPageX || this.initPageX === 0) {
+            // figure out how much this thing has moved
+            var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
+            var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
+
+            this.setInitPosition(dx, dy);
+
+        // This is the first time we have detected the element's position
+        } else {
+            this.setInitPosition();
+        }
+
+        if (this.constrainX) {
+            this.setXConstraint( this.leftConstraint, 
+                                 this.rightConstraint, 
+                                 this.xTickSize        );
+        }
+
+        if (this.constrainY) {
+            this.setYConstraint( this.topConstraint, 
+                                 this.bottomConstraint, 
+                                 this.yTickSize         );
+        }
+    },
+
+    /**
+     * Normally the drag element is moved pixel by pixel, but we can specify 
+     * that it move a number of pixels at a time.  This method resolves the 
+     * location when we have it set up like this.
+    * @method getTick
+    * @param {int} val where we want to place the object
+    * @param {int[]} tickArray sorted array of valid points
+    * @return {int} the closest tick
+    * @private
+     */
+    getTick: function(val, tickArray) {
+
+        if (!tickArray) {
+            // If tick interval is not defined, it is effectively 1 pixel, 
+            // so we return the value passed to us.
+            return val; 
+        } else if (tickArray[0] >= val) {
+            // The value is lower than the first tick, so we return the first
+            // tick.
+            return tickArray[0];
+        } else {
+            for (var i=0, len=tickArray.length; i<len; ++i) {
+                var next = i + 1;
+                if (tickArray[next] && tickArray[next] >= val) {
+                    var diff1 = val - tickArray[i];
+                    var diff2 = tickArray[next] - val;
+                    return (diff2 > diff1) ? tickArray[i] : tickArray[next];
+                }
+            }
+
+            // The value is larger than the last tick, so we return the last
+            // tick.
+            return tickArray[tickArray.length - 1];
+        }
+    },
+
+    /**
+     * toString method
+    * @method toString
+    * @return {string} string representation of the dd obj
+     */
+    toString: function() {
+        return ("DragDrop " + this.id);
+    }
+
+};
+YAHOO.augment(YAHOO.util.DragDrop, YAHOO.util.EventProvider);
+
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+})();
+/**
+ * A DragDrop implementation where the linked element follows the 
+ * mouse cursor during a drag.
+ * @class DD
+ * @extends YAHOO.util.DragDrop
+ * @constructor
+ * @param {String} id the id of the linked element 
+ * @param {String} sGroup the group of related DragDrop items
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DD: 
+ *                    scroll
+ */
+YAHOO.util.DD = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config);
+    }
+};
+
+YAHOO.extend(YAHOO.util.DD, YAHOO.util.DragDrop, {
+
+    /**
+     * When set to true, the utility automatically tries to scroll the browser
+     * window when a drag and drop element is dragged near the viewport boundary.
+     * Defaults to true.
+    * @property scroll
+    * @type boolean
+     */
+    scroll: true, 
+
+    /**
+     * Sets the pointer offset to the distance between the linked element's top 
+     * left corner and the location the element was clicked
+    * @method autoOffset
+    * @param {int} iPageX the X coordinate of the click
+    * @param {int} iPageY the Y coordinate of the click
+     */
+    autoOffset: function(iPageX, iPageY) {
+        var x = iPageX - this.startPageX;
+        var y = iPageY - this.startPageY;
+        this.setDelta(x, y);
+    },
+
+    /** 
+     * Sets the pointer offset.  You can call this directly to force the 
+     * offset to be in a particular location (e.g., pass in 0,0 to set it 
+     * to the center of the object, as done in YAHOO.widget.Slider)
+    * @method setDelta
+    * @param {int} iDeltaX the distance from the left
+    * @param {int} iDeltaY the distance from the top
+     */
+    setDelta: function(iDeltaX, iDeltaY) {
+        this.deltaX = iDeltaX;
+        this.deltaY = iDeltaY;
+    },
+
+    /**
+     * Sets the drag element to the location of the mousedown or click event, 
+     * maintaining the cursor location relative to the location on the element 
+     * that was clicked.  Override this if you want to place the element in a 
+     * location other than where the cursor is.
+    * @method setDragElPos
+    * @param {int} iPageX the X coordinate of the mousedown or drag event
+    * @param {int} iPageY the Y coordinate of the mousedown or drag event
+     */
+    setDragElPos: function(iPageX, iPageY) {
+        // the first time we do this, we are going to check to make sure
+        // the element has css positioning
+
+        var el = this.getDragEl();
+        this.alignElWithMouse(el, iPageX, iPageY);
+    },
+
+    /**
+     * Sets the element to the location of the mousedown or click event, 
+     * maintaining the cursor location relative to the location on the element 
+     * that was clicked.  Override this if you want to place the element in a 
+     * location other than where the cursor is.
+    * @method alignElWithMouse
+    * @param {HTMLElement} el the element to move
+    * @param {int} iPageX the X coordinate of the mousedown or drag event
+    * @param {int} iPageY the Y coordinate of the mousedown or drag event
+     */
+    alignElWithMouse: function(el, iPageX, iPageY) {
+        var oCoord = this.getTargetCoord(iPageX, iPageY);
+
+        if (!this.deltaSetXY) {
+            var aCoord = [oCoord.x, oCoord.y];
+            YAHOO.util.Dom.setXY(el, aCoord);
+
+            var newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            var newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+
+            this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
+        } else {
+            YAHOO.util.Dom.setStyle(el, "left", (oCoord.x + this.deltaSetXY[0]) + "px");
+            YAHOO.util.Dom.setStyle(el, "top",  (oCoord.y + this.deltaSetXY[1]) + "px");
+        }
+        
+        this.cachePosition(oCoord.x, oCoord.y);
+        var self = this;
+        setTimeout(function() {
+            self.autoScroll.call(self, oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
+        }, 0);
+    },
+
+    /**
+     * Saves the most recent position so that we can reset the constraints and
+     * tick marks on-demand.  We need to know this so that we can calculate the
+     * number of pixels the element is offset from its original position.
+    * @method cachePosition
+    * @param iPageX the current x position (optional, this just makes it so we
+     * don't have to look it up again)
+    * @param iPageY the current y position (optional, this just makes it so we
+     * don't have to look it up again)
+     */
+    cachePosition: function(iPageX, iPageY) {
+        if (iPageX) {
+            this.lastPageX = iPageX;
+            this.lastPageY = iPageY;
+        } else {
+            var aCoord = YAHOO.util.Dom.getXY(this.getEl());
+            this.lastPageX = aCoord[0];
+            this.lastPageY = aCoord[1];
+        }
+    },
+
+    /**
+     * Auto-scroll the window if the dragged object has been moved beyond the 
+     * visible window boundary.
+    * @method autoScroll
+    * @param {int} x the drag element's x position
+    * @param {int} y the drag element's y position
+    * @param {int} h the height of the drag element
+    * @param {int} w the width of the drag element
+    * @private
+     */
+    autoScroll: function(x, y, h, w) {
+
+        if (this.scroll) {
+            // The client height
+            var clientH = this.DDM.getClientHeight();
+
+            // The client width
+            var clientW = this.DDM.getClientWidth();
+
+            // The amt scrolled down
+            var st = this.DDM.getScrollTop();
+
+            // The amt scrolled right
+            var sl = this.DDM.getScrollLeft();
+
+            // Location of the bottom of the element
+            var bot = h + y;
+
+            // Location of the right of the element
+            var right = w + x;
+
+            // The distance from the cursor to the bottom of the visible area, 
+            // adjusted so that we don't scroll if the cursor is beyond the
+            // element drag constraints
+            var toBot = (clientH + st - y - this.deltaY);
+
+            // The distance from the cursor to the right of the visible area
+            var toRight = (clientW + sl - x - this.deltaX);
+
+
+            // How close to the edge the cursor must be before we scroll
+            // var thresh = (document.all) ? 100 : 40;
+            var thresh = 40;
+
+            // How many pixels to scroll per autoscroll op.  This helps to reduce 
+            // clunky scrolling. IE is more sensitive about this ... it needs this 
+            // value to be higher.
+            var scrAmt = (document.all) ? 80 : 30;
+
+            // Scroll down if we are near the bottom of the visible page and the 
+            // obj extends below the crease
+            if ( bot > clientH && toBot < thresh ) { 
+                window.scrollTo(sl, st + scrAmt); 
+            }
+
+            // Scroll up if the window is scrolled down and the top of the object
+            // goes above the top border
+            if ( y < st && st > 0 && y - st < thresh ) { 
+                window.scrollTo(sl, st - scrAmt); 
+            }
+
+            // Scroll right if the obj is beyond the right border and the cursor is
+            // near the border.
+            if ( right > clientW && toRight < thresh ) { 
+                window.scrollTo(sl + scrAmt, st); 
+            }
+
+            // Scroll left if the window has been scrolled to the right and the obj
+            // extends past the left border
+            if ( x < sl && sl > 0 && x - sl < thresh ) { 
+                window.scrollTo(sl - scrAmt, st);
+            }
+        }
+    },
+
+    /*
+     * Sets up config options specific to this class. Overrides
+     * YAHOO.util.DragDrop, but all versions of this method through the 
+     * inheritance chain are called
+     */
+    applyConfig: function() {
+        YAHOO.util.DD.superclass.applyConfig.call(this);
+        this.scroll = (this.config.scroll !== false);
+    },
+
+    /*
+     * Event that fires prior to the onMouseDown event.  Overrides 
+     * YAHOO.util.DragDrop.
+     */
+    b4MouseDown: function(e) {
+        this.setStartPosition();
+        // this.resetConstraints();
+        this.autoOffset(YAHOO.util.Event.getPageX(e), 
+                            YAHOO.util.Event.getPageY(e));
+    },
+
+    /*
+     * Event that fires prior to the onDrag event.  Overrides 
+     * YAHOO.util.DragDrop.
+     */
+    b4Drag: function(e) {
+        this.setDragElPos(YAHOO.util.Event.getPageX(e), 
+                            YAHOO.util.Event.getPageY(e));
+    },
+
+    toString: function() {
+        return ("DD " + this.id);
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // Debugging ygDragDrop events that can be overridden
+    //////////////////////////////////////////////////////////////////////////
+    /*
+    startDrag: function(x, y) {
+    },
+
+    onDrag: function(e) {
+    },
+
+    onDragEnter: function(e, id) {
+    },
+
+    onDragOver: function(e, id) {
+    },
+
+    onDragOut: function(e, id) {
+    },
+
+    onDragDrop: function(e, id) {
+    },
+
+    endDrag: function(e) {
+    }
+
+    */
+
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+});
+/**
+ * A DragDrop implementation that inserts an empty, bordered div into
+ * the document that follows the cursor during drag operations.  At the time of
+ * the click, the frame div is resized to the dimensions of the linked html
+ * element, and moved to the exact location of the linked element.
+ *
+ * References to the "frame" element refer to the single proxy element that
+ * was created to be dragged in place of all DDProxy elements on the
+ * page.
+ *
+ * @class DDProxy
+ * @extends YAHOO.util.DD
+ * @constructor
+ * @param {String} id the id of the linked html element
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                Valid properties for DDProxy in addition to those in DragDrop: 
+ *                   resizeFrame, centerFrame, dragElId
+ */
+YAHOO.util.DDProxy = function(id, sGroup, config) {
+    if (id) {
+        this.init(id, sGroup, config);
+        this.initFrame(); 
+    }
+};
+
+/**
+ * The default drag frame div id
+ * @property YAHOO.util.DDProxy.dragElId
+ * @type String
+ * @static
+ */
+YAHOO.util.DDProxy.dragElId = "ygddfdiv";
+
+YAHOO.extend(YAHOO.util.DDProxy, YAHOO.util.DD, {
+
+    /**
+     * By default we resize the drag frame to be the same size as the element
+     * we want to drag (this is to get the frame effect).  We can turn it off
+     * if we want a different behavior.
+    * @property resizeFrame
+    * @type boolean
+     */
+    resizeFrame: true,
+
+    /**
+     * By default the frame is positioned exactly where the drag element is, so
+     * we use the cursor offset provided by YAHOO.util.DD.  Another option that works only if
+     * you do not have constraints on the obj is to have the drag frame centered
+     * around the cursor.  Set centerFrame to true for this effect.
+    * @property centerFrame
+    * @type boolean
+     */
+    centerFrame: false,
+
+    /**
+     * Creates the proxy element if it does not yet exist
+    * @method createFrame
+     */
+    createFrame: function() {
+        var self=this, body=document.body;
+
+        if (!body || !body.firstChild) {
+            setTimeout( function() { self.createFrame(); }, 50 );
+            return;
+        }
+
+        var div=this.getDragEl(), Dom=YAHOO.util.Dom;
+
+        if (!div) {
+            div    = document.createElement("div");
+            div.id = this.dragElId;
+            var s  = div.style;
+
+            s.position   = "absolute";
+            s.visibility = "hidden";
+            s.cursor     = "move";
+            s.border     = "2px solid #aaa";
+            s.zIndex     = 999;
+            s.height     = "25px";
+            s.width      = "25px";
+
+            var _data = document.createElement('div');
+            Dom.setStyle(_data, 'height', '100%');
+            Dom.setStyle(_data, 'width', '100%');
+            /**
+            * If the proxy element has no background-color, then it is considered to the "transparent" by Internet Explorer.
+            * Since it is "transparent" then the events pass through it to the iframe below.
+            * So creating a "fake" div inside the proxy element and giving it a background-color, then setting it to an
+            * opacity of 0, it appears to not be there, however IE still thinks that it is so the events never pass through.
+            */
+            Dom.setStyle(_data, 'background-color', '#ccc');
+            Dom.setStyle(_data, 'opacity', '0');
+            div.appendChild(_data);
+
+            // appendChild can blow up IE if invoked prior to the window load event
+            // while rendering a table.  It is possible there are other scenarios 
+            // that would cause this to happen as well.
+            body.insertBefore(div, body.firstChild);
+        }
+    },
+
+    /**
+     * Initialization for the drag frame element.  Must be called in the
+     * constructor of all subclasses
+    * @method initFrame
+     */
+    initFrame: function() {
+        this.createFrame();
+    },
+
+    applyConfig: function() {
+        YAHOO.util.DDProxy.superclass.applyConfig.call(this);
+
+        this.resizeFrame = (this.config.resizeFrame !== false);
+        this.centerFrame = (this.config.centerFrame);
+        this.setDragElId(this.config.dragElId || YAHOO.util.DDProxy.dragElId);
+    },
+
+    /**
+     * Resizes the drag frame to the dimensions of the clicked object, positions 
+     * it over the object, and finally displays it
+    * @method showFrame
+    * @param {int} iPageX X click position
+    * @param {int} iPageY Y click position
+    * @private
+     */
+    showFrame: function(iPageX, iPageY) {
+        var el = this.getEl();
+        var dragEl = this.getDragEl();
+        var s = dragEl.style;
+
+        this._resizeProxy();
+
+        if (this.centerFrame) {
+            this.setDelta( Math.round(parseInt(s.width,  10)/2), 
+                           Math.round(parseInt(s.height, 10)/2) );
+        }
+
+        this.setDragElPos(iPageX, iPageY);
+
+        YAHOO.util.Dom.setStyle(dragEl, "visibility", "visible"); 
+    },
+
+    /**
+     * The proxy is automatically resized to the dimensions of the linked
+     * element when a drag is initiated, unless resizeFrame is set to false
+    * @method _resizeProxy
+    * @private
+     */
+    _resizeProxy: function() {
+        if (this.resizeFrame) {
+            var DOM    = YAHOO.util.Dom;
+            var el     = this.getEl();
+            var dragEl = this.getDragEl();
+
+            var bt = parseInt( DOM.getStyle(dragEl, "borderTopWidth"    ), 10);
+            var br = parseInt( DOM.getStyle(dragEl, "borderRightWidth"  ), 10);
+            var bb = parseInt( DOM.getStyle(dragEl, "borderBottomWidth" ), 10);
+            var bl = parseInt( DOM.getStyle(dragEl, "borderLeftWidth"   ), 10);
+
+            if (isNaN(bt)) { bt = 0; }
+            if (isNaN(br)) { br = 0; }
+            if (isNaN(bb)) { bb = 0; }
+            if (isNaN(bl)) { bl = 0; }
+
+
+            var newWidth  = Math.max(0, el.offsetWidth  - br - bl);                                                                                           
+            var newHeight = Math.max(0, el.offsetHeight - bt - bb);
+
+
+            DOM.setStyle( dragEl, "width",  newWidth  + "px" );
+            DOM.setStyle( dragEl, "height", newHeight + "px" );
+        }
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4MouseDown: function(e) {
+        this.setStartPosition();
+        var x = YAHOO.util.Event.getPageX(e);
+        var y = YAHOO.util.Event.getPageY(e);
+        this.autoOffset(x, y);
+
+        // This causes the autoscroll code to kick off, which means autoscroll can
+        // happen prior to the check for a valid drag handle.
+        // this.setDragElPos(x, y);
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4StartDrag: function(x, y) {
+        // show the drag frame
+        this.showFrame(x, y);
+    },
+
+    // overrides YAHOO.util.DragDrop
+    b4EndDrag: function(e) {
+        YAHOO.util.Dom.setStyle(this.getDragEl(), "visibility", "hidden"); 
+    },
+
+    // overrides YAHOO.util.DragDrop
+    // By default we try to move the element to the last location of the frame.  
+    // This is so that the default behavior mirrors that of YAHOO.util.DD.  
+    endDrag: function(e) {
+        var DOM = YAHOO.util.Dom;
+        var lel = this.getEl();
+        var del = this.getDragEl();
+
+        // Show the drag frame briefly so we can get its position
+        // del.style.visibility = "";
+        DOM.setStyle(del, "visibility", ""); 
+
+        // Hide the linked element before the move to get around a Safari 
+        // rendering bug.
+        //lel.style.visibility = "hidden";
+        DOM.setStyle(lel, "visibility", "hidden"); 
+        YAHOO.util.DDM.moveToEl(lel, del);
+        //del.style.visibility = "hidden";
+        DOM.setStyle(del, "visibility", "hidden"); 
+        //lel.style.visibility = "";
+        DOM.setStyle(lel, "visibility", ""); 
+    },
+
+    toString: function() {
+        return ("DDProxy " + this.id);
+    }
+/**
+* @event mouseDownEvent
+* @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4MouseDownEvent
+* @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event mouseUpEvent
+* @description Fired from inside DragDropMgr when the drag operation is finished.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4StartDragEvent
+* @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event startDragEvent
+* @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event b4EndDragEvent
+* @description Fires before the endDragEvent. Returning false will cancel.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event endDragEvent
+* @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+/**
+* @event dragEvent
+* @description Occurs every mousemove event while dragging.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragEvent
+* @description Fires before the dragEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event invalidDropEvent
+* @description Fires when the dragged objects is dropped in a location that contains no drop targets.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOutEvent
+* @description Fires before the dragOutEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOutEvent
+* @description Fires when a dragged object is no longer over an object that had the onDragEnter fire. 
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragEnterEvent
+* @description Occurs when the dragged object first interacts with another targettable drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragOverEvent
+* @description Fires before the dragOverEvent.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragOverEvent
+* @description Fires every mousemove event while over a drag and drop object.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event b4DragDropEvent 
+* @description Fires before the dragDropEvent
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+/**
+* @event dragDropEvent
+* @description Fires when the dragged objects is dropped on another.
+* @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+*/
+
+});
+/**
+ * A DragDrop implementation that does not move, but can be a drop 
+ * target.  You would get the same result by simply omitting implementation 
+ * for the event callbacks, but this way we reduce the processing cost of the 
+ * event listener and the callbacks.
+ * @class DDTarget
+ * @extends YAHOO.util.DragDrop 
+ * @constructor
+ * @param {String} id the id of the element that is a drop target
+ * @param {String} sGroup the group of related DragDrop objects
+ * @param {object} config an object containing configurable attributes
+ *                 Valid properties for DDTarget in addition to those in 
+ *                 DragDrop: 
+ *                    none
+ */
+YAHOO.util.DDTarget = function(id, sGroup, config) {
+    if (id) {
+        this.initTarget(id, sGroup, config);
+    }
+};
+
+// YAHOO.util.DDTarget.prototype = new YAHOO.util.DragDrop();
+YAHOO.extend(YAHOO.util.DDTarget, YAHOO.util.DragDrop, {
+    toString: function() {
+        return ("DDTarget " + this.id);
+    }
+});
+YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/dragdrop/index.php
===================================================================
--- trunk/include/yui/dragdrop/index.php	(nonexistent)
+++ trunk/include/yui/dragdrop/index.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ *
+ * @category        framework
+ * @package         yui
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/dragdrop/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/event/README
===================================================================
--- trunk/include/yui/event/README	(nonexistent)
+++ trunk/include/yui/event/README	(revision 2)
@@ -0,0 +1,228 @@
+
+YUI Library - Event - Release Notes
+
+2.4.1
+  * Reverted clearAttributes() change to fix IE memory leak on iframes/windows
+
+2.4.0
+  * getListeners/purgeElement accepts either an element reference or an element id
+  * onAvailable/onContentReady accepts a single id or an array of ids
+  * No longer removing listeners during the unload event for non-IE browsers
+  * IE unload strategy for cross page memory leaks changed from removing each listener
+    to calling clearAttributes()
+  * the DOMReady property is now public
+  * Changed IE onDOMReady approach from the defered script node hack to the doScroll('left') hack
+  * getCharChode now Remaps SHIFT-TAB key code (25) to TAB (9) in Safari
+  * getCharCode provides the proper key codes for page up and page down in Safari
+  * Restored object check to _isValidCollection.
+  * In KeyListener, added keycode constants for some of the special keys.
+  * Rolled back the change added for hacking around IE errors from bubbled 
+    events that originally targeted an ActiveX control.
+
+2.3.1
+  * CustomEvent fire() now catches exceptions thrown by the subscribers so
+    that the rest of the subscribers execute.  The exception is logged and
+    stored in the "lastError" property.
+  * Performance tweak: _isValidCollection fails strings first.
+  * onAvailable/onContentReady will work if an element ref rather than an
+    id is provided.
+  * getListeners: fixed the values for the obj and adjust properties.
+    Added scope property.
+  * Added IE hack for when the event target is something that can't be
+    inspected (like a VML canvas).  In this case the target is set to
+    the element the listener is bound to.
+
+2.3.0
+  * addListener now produces a logger warning if the supplied callback is 
+    undefined.
+  * Reduced the likelihood that window onload listeners fire before
+    onAvailable listeners when the two happen near the same moment.
+  * Fixed an IE error that could occur when the library was injected into 
+    the page after window onload.
+  * The onDOMReady listener will be executed immediately if the
+    DOMReady event had already fired prior to the call.
+  * Unsubscribing custom events within a handler for the event now works 
+    properly.
+  * EventProvider unsubscribeAll will unsubscribe all listeners from
+    all hosted custom events if the type is not specified.
+  * Event.getKeyCode now checks keyCode before charCode for Safari normalization.  
+    Safari arrow key codes are normalized as well.
+  * Broke up the </script> in Event to allow it to be included inline
+
+2.2.2
+  * No change
+
+2.2.1
+  * onAvailable listeners are processed before onContentReady listeners so
+    they fire in the logical order when an element is found to be available 
+    and ready in the same pass.
+  * Added onDOMReady for receiving notification when the DOM is first usable.
+  * In Internet Explorer, onAvailable/onContentReady checks now start when
+    DOMReady fires to reduce the possibility of receiving an "operation
+    aborted" errors when inserting DOM nodes during in the onAvailable/
+    onContentReady listener execution.
+  * CustomEvent subscribers supplying undefined callbacks will be notified
+    when subscribing rather than having an ambiguous error thrown when the
+    event is fired.
+  * Fixed missing html tags in the examples.
+  * POLL_INTERVAL is 10 ms.
+  * YAHOO.util.CustomEvent is now declared before YAHOO.util.Event.
+
+2.2.0
+
+  * YAHOO.util.KeyListener was moved from the container package into event.
+  
+  * The Safari bug that made it so preventDefault would not work with click
+    and double-click listeners on anchor tags was resolved in version 2.0.4.
+    The workaround (using DOM0 events for these instead of the normal DOM2
+    events) is now only used for releases prior to 2.0.4.
+    
+  * getListeners/purgeElement now work correctly with unload listeners
+
+  * When legacyEvents are used (Safari<2.0.4 click events), if there was an
+    existing DOM0 event that the utility replaced, it is executed along with
+    the listeners that were added with the utility.
+
+  * Restored Event.regCE for compatibility with a beta release of the library
+    that in use in an external API.
+
+  * unsubscribe in CustomEvent and EventProvider will remove all listeners
+    if the listener is omitted.
+
+  * Added unsubscribeAll to EventProvider
+
+  * Added Event.lastError which stores the most recent error object if
+    a browser-specific add/remove listener call throws an exception.
+
+0.12.2
+
+  * Fixed a bug introduced in 0.12.1 release caused nested onAvailable
+    calls to fail.
+
+0.12.1
+
+  * If an error is thrown during the browser-specific add/remove lister call,
+    addListener/removeListener will catch the error and return false.
+
+  * onAvailable array items are nulled out instead of deleted when completed to
+    get around an Opera issue introduced in a recent version of the browser.
+
+0.12.0
+
+   * If the function argument is not provided to Event.removeListener, all
+     all listeners for the specified event type on the element will be removed.
+
+   * CustomEvent now has an optional parameter that defines the signature of
+     the listeners for this event.  Two signatures are supported:
+
+       YAHOO.util.CustomEvent.LIST:
+         param1: event name
+         param2: array of arguments provided to fire()
+         param3: <optional> the custom object supplied to subscribe()
+
+       YAHOO.util.CustomEvent.FLAT:
+         param1: the first argument provided to fire()
+         param2: <optional> the custom object supplied to subscribe()
+
+     The new flat signature makes it possible to provide a better API 
+     when using custom events, and it makes it possible to transparently 
+     wrap DOM events.
+   
+   * The parameters for overriding scope in both Event.addListener, and
+     CustomEvent.subscribe have been augmented.  In addition to the 
+     previous behavior where a true value would make the previous parameter
+     the execution scope, an object can be supplied instead.  If an object
+     is provided, that object becomes the scope obj.  This makes it possible 
+     to pass a both a custom object and adjust the scope to a different object.
+
+   * Added EventProvider, which is a wrapper for CustomEvent that makes it
+     possible to subscribe to events by name, whether or not the event has
+     been created.  This class was designed to be used with YAHOO.augment.
+     EventProvider custom events are created with the new FLAT listener
+     signature.
+
+   * CustomEvent subscribers can return false to stop the propagation of
+     the event.
+
+   * CustomEvents now have an onSubscribe custom event that can used to the
+     case where a subscriber subscribes to an one-time event that has already
+     happened.  Also provides a way for the implementer to defer initialization
+     logic until after the first subscription.
+
+   * Event.getCharCode now always returns keyCode if charCode is not available.
+
+   * Added Event.onContentReady, which is similar to onAvailable, but it also
+     checks simblings to try to determine when the element's children are
+     available.
+
+0.11.4
+
+   * Fixed a memory leak in IE6 that occurred when the utility was hosted in 
+     an iframe.
+
+   * Fixed an issue with Safari click listeners when listeners were removed.
+
+0.11.3
+
+   * The listener cache is now pruned when events are removed.  This fixes
+     a performance issue when adding many listeners, removing them, and
+     adding them again repeatedly.
+
+   * Safari click listeners will work correctly if a bound element is removed
+     from the DOM and a new element with the same ID is added.
+
+   * Removed the code that automatically unsubscribed custom event listeners.
+
+0.11.0
+
+   * Added Event.purgeElement which will remove all listeners added via 
+     addListener from the supplied element.  If an optional "type" parameter
+     is supplied, only events of that type will be removed.  Optionally, the
+     purge can be performed recursively on the element's children as well.
+
+   * Added Event.getListeners which will return all listeners attached to 
+     a given element.. either all listeners or listeners of a specific type.
+
+   * getTarget now automatically resolves text nodes.  The optional parameter
+     for this feature is now deprecated.
+
+   * getRelatedTarget now resolves text nodes for the browsers that return the
+     text node rather than its host HTML element.
+
+   * CustomEvent now logs the custom event activity if the logger widget is available
+
+0.10.0
+
+   * Added Safari dblclick to the list of legacy events.
+
+   * When multiple identical event handlers are defined, multiple calls
+     to removeListener can now remove all of them.
+
+   * removeListener works properly for unload events
+
+   * Legacy event bookkeeping is more efficient, improving the performance for
+     adding Safari click events.
+
+   * _unload() is more efficient, improving the page transition experience in 
+     Safari in particular.
+
+   * addListener, removeListener now return false if the function argument is
+     not valid.
+
+   * Fixed an operator precedence issue in getCharCode.
+
+   * Added Event.getXY, which returns [Event.getPageX(e), Event.getPageY(e)]
+
+   * Added Event.onAvailable, which will execute the callback when the element
+     with the supplied id is found.  Currently searches periodically until the
+     window load event or for up to 10 seconds after the onAvailable method 
+     was executed.
+
+   * The lazy listener attachment process now will poll beyond the window load
+     event in order to better handle the case when a listener is defined
+     late in the page but before the element is in the dom.
+
+   * Fixed browser detection for Opera installations reporting as IE.
+
+   * It is now possible to remove and re-add legacy events (Safari click event).
+
Index: trunk/include/yui/event/event-debug.js
===================================================================
--- trunk/include/yui/event/event-debug.js	(nonexistent)
+++ trunk/include/yui/event/event-debug.js	(revision 2)
@@ -0,0 +1,2524 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+
+/**
+ * The CustomEvent class lets you define events for your application
+ * that can be subscribed to by one or more independent component.
+ *
+ * @param {String}  type The type of event, which is passed to the callback
+ *                  when the event fires
+ * @param {Object}  context The context the event will fire from.  "this" will
+ *                  refer to this object in the callback.  Default value: 
+ *                  the window object.  The listener can override this.
+ * @param {boolean} silent pass true to prevent the event from writing to
+ *                  the debugsystem
+ * @param {int}     signature the signature that the custom event subscriber
+ *                  will receive. YAHOO.util.CustomEvent.LIST or 
+ *                  YAHOO.util.CustomEvent.FLAT.  The default is
+ *                  YAHOO.util.CustomEvent.LIST.
+ * @param fireOnce {boolean} If configured to fire once, the custom event 
+ * will only notify subscribers a single time regardless of how many times 
+ * the event is fired.  In addition, new subscribers will be notified 
+ * immediately if the event has already been fired.
+ * @namespace YAHOO.util
+ * @class CustomEvent
+ * @constructor
+ */
+YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
+
+    /**
+     * The type of event, returned to subscribers when the event fires
+    * @property type
+    * @type string
+     */
+    this.type = type;
+
+    /**
+     * The context the event will fire from by default. Defaults to the window obj.
+    * @property scope
+    * @type object
+     */
+    this.scope = context || window;
+
+    /**
+     * By default all custom events are logged in the debug build. Set silent to true 
+     * to disable debug output for this event.
+    * @property silent
+    * @type boolean
+     */
+    this.silent = silent;
+
+    /**
+     * If configured to fire once, the custom event will only notify subscribers
+     * a single time regardless of how many times the event is fired.  In addition,
+     * new subscribers will be notified immediately if the event has already been
+     * fired.
+    * @property fireOnce
+    * @type boolean
+    * @default false
+     */
+    this.fireOnce = fireOnce;
+
+    /**
+     * Indicates whether or not this event has ever been fired.
+    * @property fired
+    * @type boolean
+    * @default false
+     */
+    this.fired = false;
+
+    /**
+     * For fireOnce events the arguments the event was fired with are stored
+     * so that new subscribers get the proper payload.
+    * @property firedWith
+    * @type Array
+     */
+    this.firedWith = null;
+
+    /**
+     * Custom events support two styles of arguments provided to the event
+     * subscribers.  
+     * <ul>
+     * <li>YAHOO.util.CustomEvent.LIST: 
+     *   <ul>
+     *   <li>param1: event name</li>
+     *   <li>param2: array of arguments sent to fire</li>
+     *   <li>param3: <optional> a custom object supplied by the subscriber</li>
+     *   </ul>
+     * </li>
+     * <li>YAHOO.util.CustomEvent.FLAT
+     *   <ul>
+     *   <li>param1: the first argument passed to fire.  If you need to
+     *           pass multiple parameters, use and array or object literal</li>
+     *   <li>param2: <optional> a custom object supplied by the subscriber</li>
+     *   </ul>
+     * </li>
+     * </ul>
+     *   @property signature
+     *   @type int
+     */
+    this.signature = signature || YAHOO.util.CustomEvent.LIST;
+
+    /**
+     * The subscribers to this event
+    * @property subscribers
+    * @type Subscriber[]
+     */
+    this.subscribers = [];
+
+    if (!this.silent) {
+        YAHOO.log( "Creating " + this, "info", "Event" );
+    }
+
+    var onsubscribeType = "_YUICEOnSubscribe";
+
+    // Only add subscribe events for events that are not generated by 
+    // CustomEvent
+    if (type !== onsubscribeType) {
+
+        /**
+         * Custom events provide a custom event that fires whenever there is
+         * a new subscriber to the event.  This provides an opportunity to
+         * handle the case where there is a non-repeating event that has
+         * already fired has a new subscriber.  
+         *
+        * @event subscribeEvent
+        * @type YAHOO.util.CustomEvent
+        * @param fn {Function} The function to execute
+        * @param obj <Object> An object to be passed along when the event fires. 
+         * Defaults to the custom event.
+        * @param override <boolean|Object> If true, the obj passed in becomes the 
+         * execution context of the listener. If an object, that object becomes 
+         * the execution context. Defaults to the custom event.
+         */
+        this.subscribeEvent = 
+                new YAHOO.util.CustomEvent(onsubscribeType, this, true);
+
+    } 
+
+
+    /**
+     * In order to make it possible to execute the rest of the subscriber
+     * stack when one thows an exception, the subscribers exceptions are
+     * caught.  The most recent exception is stored in this property
+    * @property lastError
+    * @type Error
+     */
+    this.lastError = null;
+};
+
+/**
+ * Subscriber listener sigature constant.  The LIST type returns three
+ * parameters: the event type, the array of args passed to fire, and
+ * the optional custom object
+ * @property YAHOO.util.CustomEvent.LIST
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.LIST = 0;
+
+/**
+ * Subscriber listener sigature constant.  The FLAT type returns two
+ * parameters: the first argument passed to fire and the optional 
+ * custom object
+ * @property YAHOO.util.CustomEvent.FLAT
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.FLAT = 1;
+
+YAHOO.util.CustomEvent.prototype = {
+
+    /**
+     * Subscribes the caller to this event
+    * @method subscribe
+    * @param {Function} fn        The function to execute
+    * @param {Object}   obj       An object to be passed along when the event fires.
+     * overrideContext <boolean|Object> If true, the obj passed in becomes the execution 
+     * context of the listener. If an object, that object becomes the execution context.
+     */
+    subscribe: function(fn, obj, overrideContext) {
+
+        if (!fn) {
+throw new Error("Invalid callback for subscriber to '" + this.type + "'");
+        }
+
+        if (this.subscribeEvent) {
+            this.subscribeEvent.fire(fn, obj, overrideContext);
+        }
+
+        var s = new YAHOO.util.Subscriber(fn, obj, overrideContext);
+
+        if (this.fireOnce && this.fired) {
+            this.notify(s, this.firedWith);
+        } else {
+            this.subscribers.push(s);
+        }
+    },
+
+    /**
+     * Unsubscribes subscribers.
+    * @method unsubscribe
+    * @param {Function} fn  The subscribed function to remove, if not supplied
+     *                       all will be removed
+    * @param {Object}   obj  The custom object passed to subscribe.  This is
+     *                        optional, but if supplied will be used to
+     *                        disambiguate multiple listeners that are the same
+     *                        (e.g., you subscribe many object using a function
+     *                        that lives on the prototype)
+    * @return {boolean} True if the subscriber was found and detached.
+     */
+    unsubscribe: function(fn, obj) {
+
+        if (!fn) {
+            return this.unsubscribeAll();
+        }
+
+        var found = false;
+        for (var i=0, len=this.subscribers.length; i<len; ++i) {
+            var s = this.subscribers[i];
+            if (s && s.contains(fn, obj)) {
+                this._delete(i);
+                found = true;
+            }
+        }
+
+        return found;
+    },
+
+    /**
+     * Notifies the subscribers.  The callback functions will be executed
+     * from the context specified when the event was created, and with the 
+     * following parameters:
+     *   <ul>
+     *   <li>The type of event</li>
+     *   <li>All of the arguments fire() was executed with as an array</li>
+     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *       method</li>
+     *   </ul>
+    * @method fire 
+    * @param {Object*} arguments an arbitrary set of parameters to pass to 
+     *                            the handler.
+    * @return {boolean} false if one of the subscribers returned false, 
+     *                   true otherwise
+     */
+    fire: function() {
+
+        this.lastError = null;
+
+        var errors = [],
+            len=this.subscribers.length;
+
+
+        var args=[].slice.call(arguments, 0), ret=true, i, rebuild=false;
+
+        if (this.fireOnce) {
+            if (this.fired) {
+                YAHOO.log('fireOnce event has already fired: ' + this.type);
+                return true;
+            } else {
+                this.firedWith = args;
+            }
+        }
+
+        this.fired = true;
+
+        if (!len && this.silent) {
+            //YAHOO.log('DEBUG no subscribers');
+            return true;
+        }
+
+        if (!this.silent) {
+            YAHOO.log( "Firing "       + this  + ", " + 
+                       "args: "        + args  + ", " +
+                       "subscribers: " + len,                 
+                       "info", "Event"                  );
+        }
+
+        // make a copy of the subscribers so that there are
+        // no index problems if one subscriber removes another.
+        var subs = this.subscribers.slice();
+
+        for (i=0; i<len; ++i) {
+            var s = subs[i];
+            if (!s) {
+                rebuild=true;
+            } else {
+
+                ret = this.notify(s, args);
+
+                if (false === ret) {
+                    if (!this.silent) {
+                        YAHOO.log("Event stopped, sub " + i + " of " + len, "info", "Event");
+                    }
+
+                    break;
+                }
+            }
+        }
+
+        return (ret !== false);
+    },
+
+    notify: function(s, args) {
+
+        var ret, param=null, scope = s.getScope(this.scope),
+                 throwErrors = YAHOO.util.Event.throwErrors;
+
+        if (!this.silent) {
+            YAHOO.log( this.type + "-> " + s, "info", "Event" );
+        }
+
+        if (this.signature == YAHOO.util.CustomEvent.FLAT) {
+
+            if (args.length > 0) {
+                param = args[0];
+            }
+
+            try {
+                ret = s.fn.call(scope, param, s.obj);
+            } catch(e) {
+                this.lastError = e;
+                // errors.push(e);
+                YAHOO.log(this + " subscriber exception: " + e, "error", "Event");
+                if (throwErrors) {
+                    throw e;
+                }
+            }
+        } else {
+            try {
+                ret = s.fn.call(scope, this.type, args, s.obj);
+            } catch(ex) {
+                this.lastError = ex;
+                YAHOO.log(this + " subscriber exception: " + ex, "error", "Event");
+                if (throwErrors) {
+                    throw ex;
+                }
+            }
+        }
+
+        return ret;
+    },
+
+    /**
+     * Removes all listeners
+    * @method unsubscribeAll
+    * @return {int} The number of listeners unsubscribed
+     */
+    unsubscribeAll: function() {
+        var l = this.subscribers.length, i;
+        for (i=l-1; i>-1; i--) {
+            this._delete(i);
+        }
+
+        this.subscribers=[];
+
+        return l;
+    },
+
+    /**
+    * @method _delete
+    * @private
+     */
+    _delete: function(index) {
+        var s = this.subscribers[index];
+        if (s) {
+            delete s.fn;
+            delete s.obj;
+        }
+
+        // this.subscribers[index]=null;
+        this.subscribers.splice(index, 1);
+    },
+
+    /**
+    * @method toString
+     */
+    toString: function() {
+         return "CustomEvent: " + "'" + this.type  + "', " + 
+             "context: " + this.scope;
+
+    }
+};
+
+/////////////////////////////////////////////////////////////////////
+
+/**
+ * Stores the subscriber information to be used when the event fires.
+ * @param {Function} fn       The function to execute
+ * @param {Object}   obj      An object to be passed along when the event fires
+ * @param {boolean}  overrideContext If true, the obj passed in becomes the execution
+ *                            context of the listener
+ * @class Subscriber
+ * @constructor
+ */
+YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
+
+    /**
+     * The callback that will be execute when the event fires
+    * @property fn
+    * @type function
+     */
+    this.fn = fn;
+
+    /**
+     * An optional custom object that will passed to the callback when
+     * the event fires
+    * @property obj
+    * @type object
+     */
+    this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
+
+    /**
+     * The default execution context for the event listener is defined when the
+     * event is created (usually the object which contains the event).
+     * By setting overrideContext to true, the execution context becomes the custom
+     * object passed in by the subscriber.  If overrideContext is an object, that 
+     * object becomes the context.
+    * @property overrideContext
+    * @type boolean|object
+     */
+    this.overrideContext = overrideContext;
+
+};
+
+/**
+ * Returns the execution context for this listener.  If overrideContext was set to true
+ * the custom obj will be the context.  If overrideContext is an object, that is the
+ * context, otherwise the default context will be used.
+ * @method getScope
+ * @param {Object} defaultScope the context to use if this listener does not
+ *                              override it.
+ */
+YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
+    if (this.overrideContext) {
+        if (this.overrideContext === true) {
+            return this.obj;
+        } else {
+            return this.overrideContext;
+        }
+    }
+    return defaultScope;
+};
+
+/**
+ * Returns true if the fn and obj match this objects properties.
+ * Used by the unsubscribe method to match the right subscriber.
+ *
+ * @method contains
+ * @param {Function} fn the function to execute
+ * @param {Object} obj an object to be passed along when the event fires
+ * @return {boolean} true if the supplied arguments match this 
+ *                   subscriber's signature.
+ */
+YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
+    if (obj) {
+        return (this.fn == fn && this.obj == obj);
+    } else {
+        return (this.fn == fn);
+    }
+};
+
+/**
+ * @method toString
+ */
+YAHOO.util.Subscriber.prototype.toString = function() {
+    return "Subscriber { obj: " + this.obj  + 
+           ", overrideContext: " +  (this.overrideContext || "no") + " }";
+};
+
+/**
+ * The Event Utility provides utilities for managing DOM Events and tools
+ * for building event systems
+ *
+ * @module event
+ * @title Event Utility
+ * @namespace YAHOO.util
+ * @requires yahoo
+ */
+
+// The first instance of Event will win if it is loaded more than once.
+// @TODO this needs to be changed so that only the state data that needs to
+// be preserved is kept, while methods are overwritten/added as needed.
+// This means that the module pattern can't be used.
+if (!YAHOO.util.Event) {
+
+/**
+ * The event utility provides functions to add and remove event listeners,
+ * event cleansing.  It also tries to automatically remove listeners it
+ * registers during the unload event.
+ *
+ * @class Event
+ * @static
+ */
+    YAHOO.util.Event = function() {
+
+        /**
+         * True after the onload event has fired
+        * @property loadComplete
+        * @type boolean
+        * @static
+        * @private
+         */
+        var loadComplete =  false,
+
+        /**
+         * Cache of wrapped listeners
+        * @property listeners
+        * @type array
+        * @static
+        * @private
+         */
+        listeners = [],
+
+
+        /**
+         * User-defined unload function that will be fired before all events
+         * are detached
+        * @property unloadListeners
+        * @type array
+        * @static
+        * @private
+         */
+        unloadListeners = [],
+
+        /**
+         * The number of times to poll after window.onload.  This number is
+         * increased if additional late-bound handlers are requested after
+         * the page load.
+        * @property retryCount
+        * @static
+        * @private
+         */
+        retryCount = 0,
+
+        /**
+         * onAvailable listeners
+        * @property onAvailStack
+        * @static
+        * @private
+         */
+        onAvailStack = [],
+
+        /**
+         * Counter for auto id generation
+        * @property counter
+        * @static
+        * @private
+         */
+        counter = 0,
+        
+        /**
+         * Normalized keycodes for webkit/safari
+        * @property webkitKeymap
+        * @type {int: int}
+        * @private
+        * @static
+        * @final
+         */
+         webkitKeymap = {
+            63232: 38, // up
+            63233: 40, // down
+            63234: 37, // left
+            63235: 39, // right
+            63276: 33, // page up
+            63277: 34, // page down
+            25: 9      // SHIFT-TAB (Safari provides a different key code in
+                       // this case, even though the shiftKey modifier is set)
+        },
+
+        isIE = YAHOO.env.ua.ie,
+
+        // String constants used by the addFocusListener and removeFocusListener methods
+        
+           FOCUSIN = "focusin",
+           FOCUSOUT = "focusout";
+
+        return {
+
+            /**
+             * The number of times we should look for elements that are not
+             * in the DOM at the time the event is requested after the document
+             * has been loaded.  The default is 500@amp;40 ms, so it will poll
+             * for 20 seconds or until all outstanding handlers are bound
+             * (whichever comes first).
+            * @property POLL_RETRYS
+            * @type int
+            * @static
+            * @final
+             */
+            POLL_RETRYS: 500,
+
+            /**
+             * The poll interval in milliseconds
+            * @property POLL_INTERVAL
+            * @type int
+            * @static
+            * @final
+             */
+            POLL_INTERVAL: 40,
+
+            /**
+             * Element to bind, int constant
+            * @property EL
+            * @type int
+            * @static
+            * @final
+             */
+            EL: 0,
+
+            /**
+             * Type of event, int constant
+            * @property TYPE
+            * @type int
+            * @static
+            * @final
+             */
+            TYPE: 1,
+
+            /**
+             * Function to execute, int constant
+            * @property FN
+            * @type int
+            * @static
+            * @final
+             */
+            FN: 2,
+
+            /**
+             * Function wrapped for context correction and cleanup, int constant
+            * @property WFN
+            * @type int
+            * @static
+            * @final
+             */
+            WFN: 3,
+
+            /**
+             * Object passed in by the user that will be returned as a 
+             * parameter to the callback, int constant.  Specific to
+             * unload listeners
+            * @property OBJ
+            * @type int
+            * @static
+            * @final
+             */
+            UNLOAD_OBJ: 3,
+
+            /**
+             * Adjusted context, either the element we are registering the event
+             * on or the custom object passed in by the listener, int constant
+            * @property ADJ_SCOPE
+            * @type int
+            * @static
+            * @final
+             */
+            ADJ_SCOPE: 4,
+
+            /**
+             * The original obj passed into addListener
+            * @property OBJ
+            * @type int
+            * @static
+            * @final
+             */
+            OBJ: 5,
+
+            /**
+             * The original context parameter passed into addListener
+            * @property OVERRIDE
+            * @type int
+            * @static
+            * @final
+             */
+            OVERRIDE: 6,
+
+            /**
+             * The original capture parameter passed into addListener
+            * @property CAPTURE
+            * @type int
+            * @static
+            * @final
+             */
+            CAPTURE: 7,
+
+            /**
+             * addListener/removeListener can throw errors in unexpected scenarios.
+             * These errors are suppressed, the method returns false, and this property
+             * is set
+            * @property lastError
+            * @static
+            * @type Error
+             */
+            lastError: null,
+
+            /**
+             * Safari detection
+            * @property isSafari
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.webkit
+             */
+            isSafari: YAHOO.env.ua.webkit,
+            
+            /**
+             * webkit version
+            * @property webkit
+            * @type string
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.webkit
+             */
+            webkit: YAHOO.env.ua.webkit,
+            
+            /**
+             * IE detection 
+            * @property isIE
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.ie
+             */
+            isIE: isIE,
+
+            /**
+             * poll handle
+            * @property _interval
+            * @static
+            * @private
+             */
+            _interval: null,
+
+            /**
+             * document readystate poll handle
+            * @property _dri
+            * @static
+            * @private
+             */
+             _dri: null,
+
+
+            /**
+             * Map of special event types
+            * @property _specialTypes
+            * @static
+            * @private
+             */
+            _specialTypes: {
+                focusin: (isIE ? "focusin" : "focus"),
+                focusout: (isIE ? "focusout" : "blur")
+            },
+
+
+            /**
+             * True when the document is initially usable
+            * @property DOMReady
+            * @type boolean
+            * @static
+             */
+            DOMReady: false,
+
+            /**
+             * Errors thrown by subscribers of custom events are caught
+             * and the error message is written to the debug console.  If
+             * this property is set to true, it will also re-throw the
+             * error.
+            * @property throwErrors
+            * @type boolean
+            * @default false
+             */
+            throwErrors: false,
+
+
+            /**
+            * @method startInterval
+            * @static
+            * @private
+             */
+            startInterval: function() {
+                if (!this._interval) {
+                    // var self = this;
+                    // var callback = function() { self._tryPreloadAttach(); };
+                    // this._interval = setInterval(callback, this.POLL_INTERVAL);
+                    this._interval = YAHOO.lang.later(this.POLL_INTERVAL, this, this._tryPreloadAttach, null, true);
+                }
+            },
+
+            /**
+             * Executes the supplied callback when the item with the supplied
+             * id is found.  This is meant to be used to execute behavior as
+             * soon as possible as the page loads.  If you use this after the
+             * initial page load it will poll for a fixed time for the element.
+             * The number of times it will poll and the frequency are
+             * configurable.  By default it will poll for 10 seconds.
+             *
+             * <p>The callback is executed with a single parameter:
+             * the custom object parameter, if provided.</p>
+             *
+            * @method onAvailable
+             *
+            * @param {string||string[]}   id the id of the element, or an array
+             * of ids to look for.
+            * @param {function} fn what to execute when the element is found.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
+            * @param checkContent {boolean} check child node readiness (onContentReady)
+            * @static
+             */
+            onAvailable: function(id, fn, obj, overrideContext, checkContent) {
+
+                var a = (YAHOO.lang.isString(id)) ? [id] : id;
+
+                for (var i=0; i<a.length; i=i+1) {
+                    onAvailStack.push({id:         a[i], 
+                                       fn:         fn, 
+                                       obj:        obj, 
+                                       overrideContext:   overrideContext, 
+                                       checkReady: checkContent });
+                }
+
+                retryCount = this.POLL_RETRYS;
+
+                this.startInterval();
+            },
+
+            /**
+             * Works the same way as onAvailable, but additionally checks the
+             * state of sibling elements to determine if the content of the
+             * available element is safe to modify.
+             *
+             * <p>The callback is executed with a single parameter:
+             * the custom object parameter, if provided.</p>
+             *
+            * @method onContentReady
+             *
+            * @param {string}   id the id of the element to look for.
+            * @param {function} fn what to execute when the element is ready.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj.  If an object, fn will
+             *                   exectute in the context of that object
+             *
+            * @static
+             */
+            onContentReady: function(id, fn, obj, overrideContext) {
+                this.onAvailable(id, fn, obj, overrideContext, true);
+            },
+
+            /**
+             * Executes the supplied callback when the DOM is first usable.  This
+             * will execute immediately if called after the DOMReady event has
+             * fired.   @todo the DOMContentReady event does not fire when the
+             * script is dynamically injected into the page.  This means the
+             * DOMReady custom event will never fire in FireFox or Opera when the
+             * library is injected.  It _will_ fire in Safari, and the IE 
+             * implementation would allow for us to fire it if the defered script
+             * is not available.  We want this to behave the same in all browsers.
+             * Is there a way to identify when the script has been injected 
+             * instead of included inline?  Is there a way to know whether the 
+             * window onload event has fired without having had a listener attached 
+             * to it when it did so?
+             *
+             * <p>The callback is a CustomEvent, so the signature is:</p>
+             * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>
+             * <p>For DOMReady events, there are no fire argments, so the
+             * signature is:</p>
+             * <p>"DOMReady", [], obj</p>
+             *
+             *
+            * @method onDOMReady
+             *
+            * @param {function} fn what to execute when the element is found.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
+             *
+            * @static
+             */
+            // onDOMReady: function(fn, obj, overrideContext) {
+            onDOMReady: function() {
+                this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent, arguments);
+            },
+
+
+            /**
+             * Appends an event handler
+             *
+            * @method _addListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {String}   sType     The type of event to append
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @param {boolen}      capture capture or bubble phase
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @private
+            * @static
+             */
+            _addListener: function(el, sType, fn, obj, overrideContext, bCapture) {
+
+                if (!fn || !fn.call) {
+                    YAHOO.log(sType + " addListener failed, invalid callback", "error", "Event");
+                    return false;
+                }
+
+                // The el argument can be an array of elements or element ids.
+                if ( this._isValidCollection(el)) {
+                    var ok = true;
+                    for (var i=0,len=el.length; i<len; ++i) {
+                        ok = this.on(el[i], 
+                                       sType, 
+                                       fn, 
+                                       obj, 
+                                       overrideContext) && ok;
+                    }
+                    return ok;
+
+                } else if (YAHOO.lang.isString(el)) {
+                    var oEl = this.getEl(el);
+                    // If the el argument is a string, we assume it is 
+                    // actually the id of the element.  If the page is loaded
+                    // we convert el to the actual element, otherwise we 
+                    // defer attaching the event until onload event fires
+
+                    // check to see if we need to delay hooking up the event 
+                    // until after the page loads.
+                    if (oEl) {
+                        el = oEl;
+                    } else {
+                        // defer adding the event until the element is available
+                        this.onAvailable(el, function() {
+                           YAHOO.util.Event._addListener(el, sType, fn, obj, overrideContext, bCapture);
+                        });
+
+                        return true;
+                    }
+                }
+
+                // Element should be an html element or an array if we get 
+                // here.
+                if (!el) {
+                    // this.logger.debug("unable to attach event " + sType);
+                    return false;
+                }
+
+                // we need to make sure we fire registered unload events 
+                // prior to automatically unhooking them.  So we hang on to 
+                // these instead of attaching them to the window and fire the
+                // handles explicitly during our one unload event.
+                if ("unload" == sType && obj !== this) {
+                    unloadListeners[unloadListeners.length] =
+                            [el, sType, fn, obj, overrideContext];
+                    return true;
+                }
+
+                // this.logger.debug("Adding handler: " + el + ", " + sType);
+
+                // if the user chooses to override the context, we use the custom
+                // object passed in, otherwise the executing context will be the
+                // HTML element that the event is registered on
+                var context = el;
+                if (overrideContext) {
+                    if (overrideContext === true) {
+                        context = obj;
+                    } else {
+                        context = overrideContext;
+                    }
+                }
+
+                // wrap the function so we can return the obj object when
+                // the event fires;
+                var wrappedFn = function(e) {
+                        return fn.call(context, YAHOO.util.Event.getEvent(e, el), 
+                                obj);
+                    };
+
+                var li = [el, sType, fn, wrappedFn, context, obj, overrideContext, bCapture];
+                var index = listeners.length;
+                // cache the listener so we can try to automatically unload
+                listeners[index] = li;
+
+                try {
+                    this._simpleAdd(el, sType, wrappedFn, bCapture);
+                } catch(ex) {
+                    // handle an error trying to attach an event.  If it fails
+                    // we need to clean up the cache
+                    this.lastError = ex;
+                    this.removeListener(el, sType, fn);
+                    return false;
+                }
+
+                return true;
+                
+            },
+
+            /**
+             * Checks to see if the type requested is a special type 
+             * (as defined by the _specialTypes hash), and (if so) returns 
+             * the special type name.
+             *
+            * @method _getType
+             *
+            * @param {String}   sType     The type to look up
+            * @private
+             */
+            _getType: function (type) {
+            
+                return this._specialTypes[type] || type;
+                
+            },
+
+
+            /**
+             * Appends an event handler
+             *
+            * @method addListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {String}   sType     The type of event to append
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+             */
+            addListener: function (el, sType, fn, obj, overrideContext) {
+
+                var capture = ((sType == FOCUSIN || sType == FOCUSOUT) && !YAHOO.env.ua.ie) ? true : false;
+
+                return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
+
+            },
+
+
+            /**
+             * Attaches a focusin event listener to the specified element for 
+              * the purpose of listening for the focus event on the element's 
+             * descendants.
+            * @method addFocusListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+            * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+             */
+            addFocusListener: function (el, fn, obj, overrideContext) {
+                return this.on(el, FOCUSIN, fn, obj, overrideContext);
+            },          
+
+
+            /**
+             * Removes a focusin event listener to the specified element for 
+             * the purpose of listening for the focus event on the element's 
+             * descendants.
+             *
+            * @method removeFocusListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+              * @deprecated use YAHOO.util.Event.removeListener and specify "focusin" as the event type.
+             */
+            removeFocusListener: function (el, fn) { 
+                return this.removeListener(el, FOCUSIN, fn);
+            },
+
+            /**
+             * Attaches a focusout event listener to the specified element for 
+             * the purpose of listening for the blur event on the element's 
+             * descendants.
+             *
+            * @method addBlurListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+              * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+             */
+            addBlurListener: function (el, fn, obj, overrideContext) {
+                return this.on(el, FOCUSOUT, fn, obj, overrideContext);
+            },          
+
+            /**
+             * Removes a focusout event listener to the specified element for 
+             * the purpose of listening for the blur event on the element's 
+             * descendants.
+             *
+            * @method removeBlurListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+              * @deprecated use YAHOO.util.Event.removeListener and specify "focusout" as the event type.
+             */
+            removeBlurListener: function (el, fn) { 
+                return this.removeListener(el, FOCUSOUT, fn);
+            },
+
+            /**
+             * Removes an event listener
+             *
+            * @method removeListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {String} sType the type of event to remove.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+             */
+            removeListener: function(el, sType, fn) {
+                var i, len, li;
+
+                sType = this._getType(sType);
+
+                // The el argument can be a string
+                if (typeof el == "string") {
+                    el = this.getEl(el);
+                // The el argument can be an array of elements or element ids.
+                } else if ( this._isValidCollection(el)) {
+                    var ok = true;
+                    for (i=el.length-1; i>-1; i--) {
+                        ok = ( this.removeListener(el[i], sType, fn) && ok );
+                    }
+                    return ok;
+                }
+
+                if (!fn || !fn.call) {
+                    // this.logger.debug("Error, function is not valid " + fn);
+                    //return false;
+                    return this.purgeElement(el, false, sType);
+                }
+
+                if ("unload" == sType) {
+
+                    for (i=unloadListeners.length-1; i>-1; i--) {
+                        li = unloadListeners[i];
+                        if (li && 
+                            li[0] == el && 
+                            li[1] == sType && 
+                            li[2] == fn) {
+                                unloadListeners.splice(i, 1);
+                                // unloadListeners[i]=null;
+                                return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                var cacheItem = null;
+
+                // The index is a hidden parameter; needed to remove it from
+                // the method signature because it was tempting users to
+                // try and take advantage of it, which is not possible.
+                var index = arguments[3];
+  
+                if ("undefined" === typeof index) {
+                    index = this._getCacheIndex(listeners, el, sType, fn);
+                }
+
+                if (index >= 0) {
+                    cacheItem = listeners[index];
+                }
+
+                if (!el || !cacheItem) {
+                    // this.logger.debug("cached listener not found");
+                    return false;
+                }
+
+                // this.logger.debug("Removing handler: " + el + ", " + sType);
+
+                var bCapture = cacheItem[this.CAPTURE] === true ? true : false;
+
+                try {
+                    this._simpleRemove(el, sType, cacheItem[this.WFN], bCapture);
+                } catch(ex) {
+                    this.lastError = ex;
+                    return false;
+                }
+
+                // removed the wrapped handler
+                delete listeners[index][this.WFN];
+                delete listeners[index][this.FN];
+                listeners.splice(index, 1);
+                // listeners[index]=null;
+
+                return true;
+
+            },
+
+            /**
+             * Returns the event's target element.  Safari sometimes provides
+             * a text node, and this is automatically resolved to the text
+             * node's parent so that it behaves like other browsers.
+            * @method getTarget
+            * @param {Event} ev the event
+            * @param {boolean} resolveTextNode when set to true the target's
+             *                  parent will be returned if the target is a 
+             *                  text node.  @deprecated, the text node is
+             *                  now resolved automatically
+            * @return {HTMLElement} the event's target
+            * @static
+             */
+            getTarget: function(ev, resolveTextNode) {
+                var t = ev.target || ev.srcElement;
+                return this.resolveTextNode(t);
+            },
+
+            /**
+             * In some cases, some browsers will return a text node inside
+             * the actual element that was targeted.  This normalizes the
+             * return value for getTarget and getRelatedTarget.
+            * @method resolveTextNode
+            * @param {HTMLElement} node node to resolve
+            * @return {HTMLElement} the normized node
+            * @static
+             */
+            resolveTextNode: function(n) {
+                try {
+                    if (n && 3 == n.nodeType) {
+                        return n.parentNode;
+                    }
+                } catch(e) { }
+
+                return n;
+            },
+
+            /**
+             * Returns the event's pageX
+            * @method getPageX
+            * @param {Event} ev the event
+            * @return {int} the event's pageX
+            * @static
+             */
+            getPageX: function(ev) {
+                var x = ev.pageX;
+                if (!x && 0 !== x) {
+                    x = ev.clientX || 0;
+
+                    if ( this.isIE ) {
+                        x += this._getScrollLeft();
+                    }
+                }
+
+                return x;
+            },
+
+            /**
+             * Returns the event's pageY
+            * @method getPageY
+            * @param {Event} ev the event
+            * @return {int} the event's pageY
+            * @static
+             */
+            getPageY: function(ev) {
+                var y = ev.pageY;
+                if (!y && 0 !== y) {
+                    y = ev.clientY || 0;
+
+                    if ( this.isIE ) {
+                        y += this._getScrollTop();
+                    }
+                }
+
+
+                return y;
+            },
+
+            /**
+             * Returns the pageX and pageY properties as an indexed array.
+            * @method getXY
+            * @param {Event} ev the event
+            * @return {[x, y]} the pageX and pageY properties of the event
+            * @static
+             */
+            getXY: function(ev) {
+                return [this.getPageX(ev), this.getPageY(ev)];
+            },
+
+            /**
+             * Returns the event's related target 
+            * @method getRelatedTarget
+            * @param {Event} ev the event
+            * @return {HTMLElement} the event's relatedTarget
+            * @static
+             */
+            getRelatedTarget: function(ev) {
+                var t = ev.relatedTarget;
+                if (!t) {
+                    if (ev.type == "mouseout") {
+                        t = ev.toElement;
+                    } else if (ev.type == "mouseover") {
+                        t = ev.fromElement;
+                    }
+                }
+
+                return this.resolveTextNode(t);
+            },
+
+            /**
+             * Returns the time of the event.  If the time is not included, the
+             * event is modified using the current time.
+            * @method getTime
+            * @param {Event} ev the event
+            * @return {Date} the time of the event
+            * @static
+             */
+            getTime: function(ev) {
+                if (!ev.time) {
+                    var t = new Date().getTime();
+                    try {
+                        ev.time = t;
+                    } catch(ex) { 
+                        this.lastError = ex;
+                        return t;
+                    }
+                }
+
+                return ev.time;
+            },
+
+            /**
+             * Convenience method for stopPropagation + preventDefault
+            * @method stopEvent
+            * @param {Event} ev the event
+            * @static
+             */
+            stopEvent: function(ev) {
+                this.stopPropagation(ev);
+                this.preventDefault(ev);
+            },
+
+            /**
+             * Stops event propagation
+            * @method stopPropagation
+            * @param {Event} ev the event
+            * @static
+             */
+            stopPropagation: function(ev) {
+                if (ev.stopPropagation) {
+                    ev.stopPropagation();
+                } else {
+                    ev.cancelBubble = true;
+                }
+            },
+
+            /**
+             * Prevents the default behavior of the event
+            * @method preventDefault
+            * @param {Event} ev the event
+            * @static
+             */
+            preventDefault: function(ev) {
+                if (ev.preventDefault) {
+                    ev.preventDefault();
+                } else {
+                    ev.returnValue = false;
+                }
+            },
+             
+            /**
+             * Finds the event in the window object, the caller's arguments, or
+             * in the arguments of another method in the callstack.  This is
+             * executed automatically for events registered through the event
+             * manager, so the implementer should not normally need to execute
+             * this function at all.
+            * @method getEvent
+            * @param {Event} e the event parameter from the handler
+            * @param {HTMLElement} boundEl the element the listener is attached to
+            * @return {Event} the event 
+            * @static
+             */
+            getEvent: function(e, boundEl) {
+                var ev = e || window.event;
+
+                if (!ev) {
+                    var c = this.getEvent.caller;
+                    while (c) {
+                        ev = c.arguments[0];
+                        if (ev && Event == ev.constructor) {
+                            break;
+                        }
+                        c = c.caller;
+                    }
+                }
+
+                return ev;
+            },
+
+            /**
+             * Returns the charcode for an event
+            * @method getCharCode
+            * @param {Event} ev the event
+            * @return {int} the event's charCode
+            * @static
+             */
+            getCharCode: function(ev) {
+                var code = ev.keyCode || ev.charCode || 0;
+
+                // webkit key normalization
+                if (YAHOO.env.ua.webkit && (code in webkitKeymap)) {
+                    code = webkitKeymap[code];
+                }
+                return code;
+            },
+
+            /**
+             * Locating the saved event handler data by function ref
+             *
+            * @method _getCacheIndex
+            * @static
+            * @private
+             */
+            _getCacheIndex: function(a, el, sType, fn) {
+                for (var i=0, l=a.length; i<l; i=i+1) {
+                    var li = a[i];
+                    if ( li                 && 
+                         li[this.FN] == fn  && 
+                         li[this.EL] == el  && 
+                         li[this.TYPE] == sType ) {
+                        return i;
+                    }
+                }
+
+                return -1;
+            },
+
+            /**
+             * Generates an unique ID for the element if it does not already 
+             * have one.
+            * @method generateId
+            * @param el the element to create the id for
+            * @return {string} the resulting id of the element
+            * @static
+             */
+            generateId: function(el) {
+                var id = el.id;
+
+                if (!id) {
+                    id = "yuievtautoid-" + counter;
+                    ++counter;
+                    el.id = id;
+                }
+
+                return id;
+            },
+
+
+            /**
+             * We want to be able to use getElementsByTagName as a collection
+             * to attach a group of events to.  Unfortunately, different 
+             * browsers return different types of collections.  This function
+             * tests to determine if the object is array-like.  It will also 
+             * fail if the object is an array, but is empty.
+            * @method _isValidCollection
+            * @param o the object to test
+            * @return {boolean} true if the object is array-like and populated
+            * @static
+            * @private
+             */
+            _isValidCollection: function(o) {
+                try {
+                    return ( o                     && // o is something
+                             typeof o !== "string" && // o is not a string
+                             o.length              && // o is indexed
+                             !o.tagName            && // o is not an HTML element
+                             !o.alert              && // o is not a window
+                             typeof o[0] !== "undefined" );
+                } catch(ex) {
+                    YAHOO.log("node access error (xframe?)", "warn");
+                    return false;
+                }
+
+            },
+
+            /**
+            * @private
+            * @property elCache
+             * DOM element cache
+            * @static
+            * @deprecated Elements are not cached due to issues that arise when
+             * elements are removed and re-added
+             */
+            elCache: {},
+
+            /**
+             * We cache elements bound by id because when the unload event 
+             * fires, we can no longer use document.getElementById
+            * @method getEl
+            * @static
+            * @private
+            * @deprecated Elements are not cached any longer
+             */
+            getEl: function(id) {
+                return (typeof id === "string") ? document.getElementById(id) : id;
+            },
+
+            /**
+             * Clears the element cache
+            * @deprecated Elements are not cached any longer
+            * @method clearCache
+            * @static
+            * @private
+             */
+            clearCache: function() { },
+
+            /**
+             * Custom event the fires when the dom is initially usable
+            * @event DOMReadyEvent
+             */
+            DOMReadyEvent: new YAHOO.util.CustomEvent("DOMReady", YAHOO, 0, 0, 1),
+
+            /**
+             * hook up any deferred listeners
+            * @method _load
+            * @static
+            * @private
+             */
+            _load: function(e) {
+
+                if (!loadComplete) {
+                    loadComplete = true;
+                    var EU = YAHOO.util.Event;
+
+                    // Just in case DOMReady did not go off for some reason
+                    EU._ready();
+
+                    // Available elements may not have been detected before the
+                    // window load event fires. Try to find them now so that the
+                    // the user is more likely to get the onAvailable notifications
+                    // before the window load notification
+                    EU._tryPreloadAttach();
+
+                }
+            },
+
+            /**
+             * Fires the DOMReady event listeners the first time the document is
+             * usable.
+            * @method _ready
+            * @static
+            * @private
+             */
+            _ready: function(e) {
+                var EU = YAHOO.util.Event;
+                if (!EU.DOMReady) {
+                    EU.DOMReady=true;
+
+                    // Fire the content ready custom event
+                    EU.DOMReadyEvent.fire();
+
+                    // Remove the DOMContentLoaded (FF/Opera)
+                    EU._simpleRemove(document, "DOMContentLoaded", EU._ready);
+                }
+            },
+
+            /**
+             * Polling function that runs before the onload event fires, 
+             * attempting to attach to DOM Nodes as soon as they are 
+             * available
+            * @method _tryPreloadAttach
+            * @static
+            * @private
+             */
+            _tryPreloadAttach: function() {
+
+                if (onAvailStack.length === 0) {
+                    retryCount = 0;
+                    if (this._interval) {
+                        // clearInterval(this._interval);
+                        this._interval.cancel();
+                        this._interval = null;
+                    } 
+                    return;
+                }
+
+                if (this.locked) {
+                    return;
+                }
+
+                if (this.isIE) {
+                    // Hold off if DOMReady has not fired and check current
+                    // readyState to protect against the IE operation aborted
+                    // issue.
+                    if (!this.DOMReady) {
+                        this.startInterval();
+                        return;
+                    }
+                }
+
+                this.locked = true;
+
+                // this.logger.debug("tryPreloadAttach");
+
+                // keep trying until after the page is loaded.  We need to 
+                // check the page load state prior to trying to bind the 
+                // elements so that we can be certain all elements have been 
+                // tested appropriately
+                var tryAgain = !loadComplete;
+                if (!tryAgain) {
+                    tryAgain = (retryCount > 0 && onAvailStack.length > 0);
+                }
+
+                // onAvailable
+                var notAvail = [];
+
+                var executeItem = function (el, item) {
+                    var context = el;
+                    if (item.overrideContext) {
+                        if (item.overrideContext === true) {
+                            context = item.obj;
+                        } else {
+                            context = item.overrideContext;
+                        }
+                    }
+                    item.fn.call(context, item.obj);
+                };
+
+                var i, len, item, el, ready=[];
+
+                // onAvailable onContentReady
+                for (i=0, len=onAvailStack.length; i<len; i=i+1) {
+                    item = onAvailStack[i];
+                    if (item) {
+                        el = this.getEl(item.id);
+                        if (el) {
+                            if (item.checkReady) {
+                                if (loadComplete || el.nextSibling || !tryAgain) {
+                                    ready.push(item);
+                                    onAvailStack[i] = null;
+                                }
+                            } else {
+                                executeItem(el, item);
+                                onAvailStack[i] = null;
+                            }
+                        } else {
+                            notAvail.push(item);
+                        }
+                    }
+                }
+                
+                // make sure onContentReady fires after onAvailable
+                for (i=0, len=ready.length; i<len; i=i+1) {
+                    item = ready[i];
+                    executeItem(this.getEl(item.id), item);
+                }
+
+
+                retryCount--;
+
+                if (tryAgain) {
+                    for (i=onAvailStack.length-1; i>-1; i--) {
+                        item = onAvailStack[i];
+                        if (!item || !item.id) {
+                            onAvailStack.splice(i, 1);
+                        }
+                    }
+
+                    this.startInterval();
+                } else {
+                    if (this._interval) {
+                        // clearInterval(this._interval);
+                        this._interval.cancel();
+                        this._interval = null;
+                    }
+                }
+
+                this.locked = false;
+
+            },
+
+            /**
+             * Removes all listeners attached to the given element via addListener.
+             * Optionally, the node's children can also be purged.
+             * Optionally, you can specify a specific type of event to remove.
+            * @method purgeElement
+            * @param {HTMLElement} el the element to purge
+            * @param {boolean} recurse recursively purge this element's children
+             * as well.  Use with caution.
+            * @param {string} sType optional type of listener to purge. If
+             * left out, all listeners will be removed
+            * @static
+             */
+            purgeElement: function(el, recurse, sType) {
+                var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+                var elListeners = this.getListeners(oEl, sType), i, len;
+                if (elListeners) {
+                    for (i=elListeners.length-1; i>-1; i--) {
+                        var l = elListeners[i];
+                        this.removeListener(oEl, l.type, l.fn);
+                    }
+                }
+
+                if (recurse && oEl && oEl.childNodes) {
+                    for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
+                        this.purgeElement(oEl.childNodes[i], recurse, sType);
+                    }
+                }
+            },
+
+            /**
+             * Returns all listeners attached to the given element via addListener.
+             * Optionally, you can specify a specific type of event to return.
+            * @method getListeners
+            * @param el {HTMLElement|string} the element or element id to inspect 
+            * @param sType {string} optional type of listener to return. If
+             * left out, all listeners will be returned
+            * @return {Object} the listener. Contains the following fields:
+             * &nbsp;&nbsp;type:   (string)   the type of event
+             * &nbsp;&nbsp;fn:     (function) the callback supplied to addListener
+             * &nbsp;&nbsp;obj:    (object)   the custom object supplied to addListener
+             * &nbsp;&nbsp;adjust: (boolean|object)  whether or not to adjust the default context
+             * &nbsp;&nbsp;scope: (boolean)  the derived context based on the adjust parameter
+             * &nbsp;&nbsp;index:  (int)      its position in the Event util listener cache
+            * @static
+             */           
+            getListeners: function(el, sType) {
+                var results=[], searchLists;
+                if (!sType) {
+                    searchLists = [listeners, unloadListeners];
+                } else if (sType === "unload") {
+                    searchLists = [unloadListeners];
+                } else {
+                    sType = this._getType(sType);
+                    searchLists = [listeners];
+                }
+
+                var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+
+                for (var j=0;j<searchLists.length; j=j+1) {
+                    var searchList = searchLists[j];
+                    if (searchList) {
+                        for (var i=0,len=searchList.length; i<len ; ++i) {
+                            var l = searchList[i];
+                            if ( l  && l[this.EL] === oEl && 
+                                    (!sType || sType === l[this.TYPE]) ) {
+                                results.push({
+                                    type:   l[this.TYPE],
+                                    fn:     l[this.FN],
+                                    obj:    l[this.OBJ],
+                                    adjust: l[this.OVERRIDE],
+                                    scope:  l[this.ADJ_SCOPE],
+                                    index:  i
+                                });
+                            }
+                        }
+                    }
+                }
+
+                return (results.length) ? results : null;
+            },
+
+            /**
+             * Removes all listeners registered by pe.event.  Called 
+             * automatically during the unload event.
+            * @method _unload
+            * @static
+            * @private
+             */
+            _unload: function(e) {
+
+                var EU = YAHOO.util.Event, i, j, l, len, index,
+                         ul = unloadListeners.slice(), context;
+
+                // execute and clear stored unload listeners
+                for (i=0, len=unloadListeners.length; i<len; ++i) {
+                    l = ul[i];
+                    if (l) {
+                        context = window;
+                        if (l[EU.ADJ_SCOPE]) {
+                            if (l[EU.ADJ_SCOPE] === true) {
+                                context = l[EU.UNLOAD_OBJ];
+                            } else {
+                                context = l[EU.ADJ_SCOPE];
+                            }
+                        }
+                        l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                        ul[i] = null;
+                    }
+                }
+
+                l = null;
+                context = null;
+                unloadListeners = null;
+
+                // Remove listeners to handle IE memory leaks
+                // 2.5.0 listeners are removed for all browsers again.  FireFox preserves
+                // at least some listeners between page refreshes, potentially causing
+                // errors during page load (mouseover listeners firing before they
+                // should if the user moves the mouse at the correct moment).
+                if (listeners) {
+                    for (j=listeners.length-1; j>-1; j--) {
+                        l = listeners[j];
+                        if (l) {
+                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
+                        } 
+                    }
+                    l=null;
+                }
+
+                EU._simpleRemove(window, "unload", EU._unload);
+
+            },
+
+            /**
+             * Returns scrollLeft
+            * @method _getScrollLeft
+            * @static
+            * @private
+             */
+            _getScrollLeft: function() {
+                return this._getScroll()[1];
+            },
+
+            /**
+             * Returns scrollTop
+            * @method _getScrollTop
+            * @static
+            * @private
+             */
+            _getScrollTop: function() {
+                return this._getScroll()[0];
+            },
+
+            /**
+             * Returns the scrollTop and scrollLeft.  Used to calculate the 
+             * pageX and pageY in Internet Explorer
+            * @method _getScroll
+            * @static
+            * @private
+             */
+            _getScroll: function() {
+                var dd = document.documentElement, db = document.body;
+                if (dd && (dd.scrollTop || dd.scrollLeft)) {
+                    return [dd.scrollTop, dd.scrollLeft];
+                } else if (db) {
+                    return [db.scrollTop, db.scrollLeft];
+                } else {
+                    return [0, 0];
+                }
+            },
+            
+            /**
+             * Used by old versions of CustomEvent, restored for backwards
+             * compatibility
+            * @method regCE
+            * @private
+            * @static
+            * @deprecated still here for backwards compatibility
+             */
+            regCE: function() {},
+
+            /**
+             * Adds a DOM event directly without the caching, cleanup, context adj, etc
+             *
+            * @method _simpleAdd
+            * @param {HTMLElement} el      the element to bind the handler to
+            * @param {string}      sType   the type of event handler
+            * @param {function}    fn      the callback to invoke
+            * @param {boolen}      capture capture or bubble phase
+            * @static
+            * @private
+             */
+            _simpleAdd: function () {
+                if (window.addEventListener) {
+                    return function(el, sType, fn, capture) {
+                        el.addEventListener(sType, fn, (capture));
+                    };
+                } else if (window.attachEvent) {
+                    return function(el, sType, fn, capture) {
+                        el.attachEvent("on" + sType, fn);
+                    };
+                } else {
+                    return function(){};
+                }
+            }(),
+
+            /**
+             * Basic remove listener
+             *
+            * @method _simpleRemove
+            * @param {HTMLElement} el      the element to bind the handler to
+            * @param {string}      sType   the type of event handler
+            * @param {function}    fn      the callback to invoke
+            * @param {boolen}      capture capture or bubble phase
+            * @static
+            * @private
+             */
+            _simpleRemove: function() {
+                if (window.removeEventListener) {
+                    return function (el, sType, fn, capture) {
+                        el.removeEventListener(sType, fn, (capture));
+                    };
+                } else if (window.detachEvent) {
+                    return function (el, sType, fn) {
+                        el.detachEvent("on" + sType, fn);
+                    };
+                } else {
+                    return function(){};
+                }
+            }()
+        };
+
+    }();
+
+    (function() {
+        var EU = YAHOO.util.Event;
+
+        /**
+         * YAHOO.util.Event.on is an alias for addListener
+        * @method on
+        * @see addListener
+        * @static
+         */
+        EU.on = EU.addListener;
+
+        /**
+         * YAHOO.util.Event.onFocus is an alias for addFocusListener
+        * @method onFocus
+        * @see addFocusListener
+        * @static
+         * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+         */
+        EU.onFocus = EU.addFocusListener;
+
+        /**
+         * YAHOO.util.Event.onBlur is an alias for addBlurListener
+        * @method onBlur
+        * @see addBlurListener
+        * @static
+         * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+         */     
+        EU.onBlur = EU.addBlurListener;
+
+/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
+
+        // Internet Explorer: use the readyState of a defered script.
+        // This isolates what appears to be a safe moment to manipulate
+        // the DOM prior to when the document's readyState suggests
+        // it is safe to do so.
+        if (EU.isIE) {
+            if (self !== self.top) {
+                document.onreadystatechange = function() {
+                    if (document.readyState == 'complete') {
+                        document.onreadystatechange = null;
+                        EU._ready();
+                    }
+                };
+            } else {
+
+                // Process onAvailable/onContentReady items when the 
+                // DOM is ready.
+                YAHOO.util.Event.onDOMReady(
+                        YAHOO.util.Event._tryPreloadAttach,
+                        YAHOO.util.Event, true);
+                
+                var n = document.createElement('p');  
+
+                EU._dri = setInterval(function() {
+                    try {
+                        // throws an error if doc is not ready
+                        n.doScroll('left');
+                        clearInterval(EU._dri);
+                        EU._dri = null;
+                        EU._ready();
+                        n = null;
+                    } catch (ex) { 
+                    }
+                }, EU.POLL_INTERVAL); 
+            }
+
+        // The document's readyState in Safari currently will
+        // change to loaded/complete before images are loaded.
+        } else if (EU.webkit && EU.webkit < 525) {
+
+            EU._dri = setInterval(function() {
+                var rs=document.readyState;
+                if ("loaded" == rs || "complete" == rs) {
+                    clearInterval(EU._dri);
+                    EU._dri = null;
+                    EU._ready();
+                }
+            }, EU.POLL_INTERVAL); 
+
+        // FireFox and Opera: These browsers provide a event for this
+        // moment.  The latest WebKit releases now support this event.
+        } else {
+
+            EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
+
+        }
+        /////////////////////////////////////////////////////////////
+
+
+        EU._simpleAdd(window, "load", EU._load);
+        EU._simpleAdd(window, "unload", EU._unload);
+        EU._tryPreloadAttach();
+    })();
+
+}
+/**
+ * EventProvider is designed to be used with YAHOO.augment to wrap 
+ * CustomEvents in an interface that allows events to be subscribed to 
+ * and fired by name.  This makes it possible for implementing code to
+ * subscribe to an event that either has not been created yet, or will
+ * not be created at all.
+ *
+ * @Class EventProvider
+ */
+YAHOO.util.EventProvider = function() { };
+
+YAHOO.util.EventProvider.prototype = {
+
+    /**
+     * Private storage of custom events
+    * @property __yui_events
+    * @type Object[]
+    * @private
+     */
+    __yui_events: null,
+
+    /**
+     * Private storage of custom event subscribers
+    * @property __yui_subscribers
+    * @type Object[]
+    * @private
+     */
+    __yui_subscribers: null,
+    
+    /**
+     * Subscribe to a CustomEvent by event type
+     *
+    * @method subscribe
+    * @param p_type     {string}   the type, or name of the event
+    * @param p_fn       {function} the function to exectute when the event fires
+    * @param p_obj      {Object}   An object to be passed along when the event 
+     *                              fires
+    * @param overrideContext {boolean}  If true, the obj passed in becomes the 
+     *                              execution scope of the listener
+     */
+    subscribe: function(p_type, p_fn, p_obj, overrideContext) {
+
+        this.__yui_events = this.__yui_events || {};
+        var ce = this.__yui_events[p_type];
+
+        if (ce) {
+            ce.subscribe(p_fn, p_obj, overrideContext);
+        } else {
+            this.__yui_subscribers = this.__yui_subscribers || {};
+            var subs = this.__yui_subscribers;
+            if (!subs[p_type]) {
+                subs[p_type] = [];
+            }
+            subs[p_type].push(
+                { fn: p_fn, obj: p_obj, overrideContext: overrideContext } );
+        }
+    },
+
+    /**
+     * Unsubscribes one or more listeners the from the specified event
+    * @method unsubscribe
+    * @param p_type {string}   The type, or name of the event.  If the type
+     *                          is not specified, it will attempt to remove
+     *                          the listener from all hosted events.
+    * @param p_fn   {Function} The subscribed function to unsubscribe, if not
+     *                          supplied, all subscribers will be removed.
+    * @param p_obj  {Object}   The custom object passed to subscribe.  This is
+     *                        optional, but if supplied will be used to
+     *                        disambiguate multiple listeners that are the same
+     *                        (e.g., you subscribe many object using a function
+     *                        that lives on the prototype)
+    * @return {boolean} true if the subscriber was found and detached.
+     */
+    unsubscribe: function(p_type, p_fn, p_obj) {
+        this.__yui_events = this.__yui_events || {};
+        var evts = this.__yui_events;
+        if (p_type) {
+            var ce = evts[p_type];
+            if (ce) {
+                return ce.unsubscribe(p_fn, p_obj);
+            }
+        } else {
+            var ret = true;
+            for (var i in evts) {
+                if (YAHOO.lang.hasOwnProperty(evts, i)) {
+                    ret = ret && evts[i].unsubscribe(p_fn, p_obj);
+                }
+            }
+            return ret;
+        }
+
+        return false;
+    },
+    
+    /**
+     * Removes all listeners from the specified event.  If the event type
+     * is not specified, all listeners from all hosted custom events will
+     * be removed.
+    * @method unsubscribeAll
+    * @param p_type {string}   The type, or name of the event
+     */
+    unsubscribeAll: function(p_type) {
+        return this.unsubscribe(p_type);
+    },
+
+    /**
+     * Creates a new custom event of the specified type.  If a custom event
+     * by that name already exists, it will not be re-created.  In either
+     * case the custom event is returned. 
+     *
+    * @method createEvent
+     *
+    * @param p_type {string} the type, or name of the event
+    * @param p_config {object} optional config params.  Valid properties are:
+     *
+     *  <ul>
+     *    <li>
+     *      scope: defines the default execution scope.  If not defined
+     *      the default scope will be this instance.
+     *    </li>
+     *    <li>
+     *      silent: if true, the custom event will not generate log messages.
+     *      This is false by default.
+     *    </li>
+     *    <li>
+     *      fireOnce: if true, the custom event will only notify subscribers
+     *      once regardless of the number of times the event is fired.  In
+     *      addition, new subscribers will be executed immediately if the
+     *      event has already fired.
+     *      This is false by default.
+     *    </li>
+     *    <li>
+     *      onSubscribeCallback: specifies a callback to execute when the
+     *      event has a new subscriber.  This will fire immediately for
+     *      each queued subscriber if any exist prior to the creation of
+     *      the event.
+     *    </li>
+     *  </ul>
+     *
+     *  @return {CustomEvent} the custom event
+     *
+     */
+    createEvent: function(p_type, p_config) {
+
+        this.__yui_events = this.__yui_events || {};
+        var opts = p_config || {},
+            events = this.__yui_events, ce;
+
+        if (events[p_type]) {
+YAHOO.log("EventProvider createEvent skipped: '"+p_type+"' already exists");
+        } else {
+
+            ce = new YAHOO.util.CustomEvent(p_type, opts.scope || this, opts.silent,
+                         YAHOO.util.CustomEvent.FLAT, opts.fireOnce);
+
+            events[p_type] = ce;
+
+            if (opts.onSubscribeCallback) {
+                ce.subscribeEvent.subscribe(opts.onSubscribeCallback);
+            }
+
+            this.__yui_subscribers = this.__yui_subscribers || {};
+            var qs = this.__yui_subscribers[p_type];
+
+            if (qs) {
+                for (var i=0; i<qs.length; ++i) {
+                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].overrideContext);
+                }
+            }
+        }
+
+        return events[p_type];
+    },
+
+
+   /**
+     * Fire a custom event by name.  The callback functions will be executed
+     * from the scope specified when the event was created, and with the 
+     * following parameters:
+     *   <ul>
+     *   <li>The first argument fire() was executed with</li>
+     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *       method</li>
+     *   </ul>
+    * @method fireEvent
+    * @param p_type    {string}  the type, or name of the event
+    * @param arguments {Object*} an arbitrary set of parameters to pass to 
+     *                            the handler.
+    * @return {boolean} the return value from CustomEvent.fire
+     *                   
+     */
+    fireEvent: function(p_type) {
+
+        this.__yui_events = this.__yui_events || {};
+        var ce = this.__yui_events[p_type];
+
+        if (!ce) {
+YAHOO.log(p_type + "event fired before it was created.");
+            return null;
+        }
+
+        var args = [];
+        for (var i=1; i<arguments.length; ++i) {
+            args.push(arguments[i]);
+        }
+        return ce.fire.apply(ce, args);
+    },
+
+    /**
+     * Returns true if the custom event of the provided type has been created
+     * with createEvent.
+    * @method hasEvent
+    * @param type {string} the type, or name of the event
+     */
+    hasEvent: function(type) {
+        if (this.__yui_events) {
+            if (this.__yui_events[type]) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+};
+
+(function() {
+
+    var Event = YAHOO.util.Event, Lang = YAHOO.lang;
+
+/**
+* KeyListener is a utility that provides an easy interface for listening for
+* keydown/keyup events fired against DOM elements.
+* @namespace YAHOO.util
+* @class KeyListener
+* @constructor
+* @param {HTMLElement} attachTo The element or element ID to which the key 
+*                               event should be attached
+* @param {String}      attachTo The element or element ID to which the key
+*                               event should be attached
+* @param {Object}      keyData  The object literal representing the key(s) 
+*                               to detect. Possible attributes are 
+*                               shift(boolean), alt(boolean), ctrl(boolean) 
+*                               and keys(either an int or an array of ints 
+*                               representing keycodes).
+* @param {Function}    handler  The CustomEvent handler to fire when the 
+*                               key event is detected
+* @param {Object}      handler  An object literal representing the handler. 
+* @param {String}      event    Optional. The event (keydown or keyup) to 
+*                               listen for. Defaults automatically to keydown.
+*
+* @knownissue the "keypress" event is completely broken in Safari 2.x and below.
+*             the workaround is use "keydown" for key listening.  However, if
+*             it is desired to prevent the default behavior of the keystroke,
+*             that can only be done on the keypress event.  This makes key
+*             handling quite ugly.
+* @knownissue keydown is also broken in Safari 2.x and below for the ESC key.
+*             There currently is no workaround other than choosing another
+*             key to listen for.
+*/
+YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
+    if (!attachTo) {
+        YAHOO.log("No attachTo element specified", "error");
+    } else if (!keyData) {
+        YAHOO.log("No keyData specified", "error");
+    } else if (!handler) {
+        YAHOO.log("No handler specified", "error");
+    } 
+    
+    if (!event) {
+        event = YAHOO.util.KeyListener.KEYDOWN;
+    }
+
+    /**
+    * The CustomEvent fired internally when a key is pressed
+   * @event keyEvent
+   * @private
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    var keyEvent = new YAHOO.util.CustomEvent("keyPressed");
+    
+    /**
+    * The CustomEvent fired when the KeyListener is enabled via the enable() 
+    * function
+   * @event enabledEvent
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
+
+    /**
+    * The CustomEvent fired when the KeyListener is disabled via the 
+    * disable() function
+   * @event disabledEvent
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
+
+    if (Lang.isString(attachTo)) {
+        attachTo = document.getElementById(attachTo); // No Dom util
+    }
+
+    if (Lang.isFunction(handler)) {
+        keyEvent.subscribe(handler);
+    } else {
+        keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
+    }
+
+    /**
+    * Handles the key event when a key is pressed.
+   * @method handleKeyPress
+   * @param {DOMEvent} e   The keypress DOM event
+   * @param {Object}   obj The DOM event scope object
+   * @private
+    */
+    function handleKeyPress(e, obj) {
+        if (! keyData.shift) {  
+            keyData.shift = false; 
+        }
+        if (! keyData.alt) {    
+            keyData.alt = false;
+        }
+        if (! keyData.ctrl) {
+            keyData.ctrl = false;
+        }
+
+        // check held down modifying keys first
+        if (e.shiftKey == keyData.shift && 
+            e.altKey   == keyData.alt &&
+            e.ctrlKey  == keyData.ctrl) { // if we pass this, all modifiers match
+            
+            var dataItem, keys = keyData.keys, key;
+
+            if (YAHOO.lang.isArray(keys)) {
+                for (var i=0;i<keys.length;i++) {
+                    dataItem = keys[i];
+                    key = Event.getCharCode(e);
+
+                    if (dataItem == key) {
+                        keyEvent.fire(key, e);
+                        break;
+                    }
+                }
+            } else {
+                key = Event.getCharCode(e);
+                if (keys == key ) {
+                    keyEvent.fire(key, e);
+                }
+            }
+        }
+    }
+
+    /**
+    * Enables the KeyListener by attaching the DOM event listeners to the 
+    * target DOM element
+   * @method enable
+    */
+    this.enable = function() {
+        if (! this.enabled) {
+            Event.on(attachTo, event, handleKeyPress);
+            this.enabledEvent.fire(keyData);
+        }
+        /**
+        * Boolean indicating the enabled/disabled state of the Tooltip
+       * @property enabled
+       * @type Boolean
+        */
+        this.enabled = true;
+    };
+
+    /**
+    * Disables the KeyListener by removing the DOM event listeners from the 
+    * target DOM element
+   * @method disable
+    */
+    this.disable = function() {
+        if (this.enabled) {
+            Event.removeListener(attachTo, event, handleKeyPress);
+            this.disabledEvent.fire(keyData);
+        }
+        this.enabled = false;
+    };
+
+    /**
+    * Returns a String representation of the object.
+   * @method toString
+   * @return {String}  The string representation of the KeyListener
+    */ 
+    this.toString = function() {
+        return "KeyListener [" + keyData.keys + "] " + attachTo.tagName + 
+                (attachTo.id ? "[" + attachTo.id + "]" : "");
+    };
+
+};
+
+var KeyListener = YAHOO.util.KeyListener;
+
+/**
+ * Constant representing the DOM "keydown" event.
+ * @property YAHOO.util.KeyListener.KEYDOWN
+ * @static
+ * @final
+ * @type String
+ */
+KeyListener.KEYDOWN = "keydown";
+
+/**
+ * Constant representing the DOM "keyup" event.
+ * @property YAHOO.util.KeyListener.KEYUP
+ * @static
+ * @final
+ * @type String
+ */
+KeyListener.KEYUP = "keyup";
+
+/**
+ * keycode constants for a subset of the special keys
+ * @property KEY
+ * @static
+ * @final
+ */
+KeyListener.KEY = {
+    ALT          : 18,
+    BACK_SPACE   : 8,
+    CAPS_LOCK    : 20,
+    CONTROL      : 17,
+    DELETE       : 46,
+    DOWN         : 40,
+    END          : 35,
+    ENTER        : 13,
+    ESCAPE       : 27,
+    HOME         : 36,
+    LEFT         : 37,
+    META         : 224,
+    NUM_LOCK     : 144,
+    PAGE_DOWN    : 34,
+    PAGE_UP      : 33, 
+    PAUSE        : 19,
+    PRINTSCREEN  : 44,
+    RIGHT        : 39,
+    SCROLL_LOCK  : 145,
+    SHIFT        : 16,
+    SPACE        : 32,
+    TAB          : 9,
+    UP           : 38
+};
+
+})();
+YAHOO.register("event", YAHOO.util.Event, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/event/event-min.js
===================================================================
--- trunk/include/yui/event/event-min.js	(nonexistent)
+++ trunk/include/yui/event/event-min.js	(revision 2)
@@ -0,0 +1,11 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+YAHOO.util.CustomEvent=function(D,C,B,A,E){this.type=D;this.scope=C||window;this.silent=B;this.fireOnce=E;this.fired=false;this.firedWith=null;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var F="_YUICEOnSubscribe";if(D!==F){this.subscribeEvent=new YAHOO.util.CustomEvent(F,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,D){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,D);}var A=new YAHOO.util.Subscriber(B,C,D);if(this.fireOnce&&this.fired){this.notify(A,this.firedWith);}else{this.subscribers.push(A);}},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var H=[],A=this.subscribers.length;var D=[].slice.call(arguments,0),C=true,F,B=false;if(this.fireOnce){if(this.fired){return true;}else{this.firedWith=D;}}this.fired=true;if(!A&&this.silent){return true;}if(!this.silent){}var E=this.subscribers.slice();for(F=0;F<A;++F){var G=E[F];if(!G){B=true;}else{C=this.notify(G,D);if(false===C){if(!this.silent){}break;}}}return(C!==false);},notify:function(F,C){var B,H=null,E=F.getScope(this.scope),A=YAHOO.util.Event.throwErrors;if(!this.silent){}if(this.signature==YAHOO.util.CustomEvent.FLAT){if(C.length>0){H=C[0];}try{B=F.fn.call(E,H,F.obj);}catch(G){this.lastError=G;if(A){throw G;}}}else{try{B=F.fn.call(E,this.type,C,F.obj);}catch(D){this.lastError=D;if(A){throw D;}}}return B;},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var G=false,H=[],J=[],A=0,E=[],B=0,C={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},D=YAHOO.env.ua.ie,F="focusin",I="focusout";return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:D,_interval:null,_dri:null,_specialTypes:{focusin:(D?"focusin":"focus"),focusout:(D?"focusout":"blur")},DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,true);}},onAvailable:function(Q,M,O,P,N){var K=(YAHOO.lang.isString(Q))?[Q]:Q;for(var L=0;L<K.length;L=L+1){E.push({id:K[L],fn:M,obj:O,overrideContext:P,checkReady:N});}A=this.POLL_RETRYS;this.startInterval();},onContentReady:function(N,K,L,M){this.onAvailable(N,K,L,M,true);},onDOMReady:function(){this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent,arguments);},_addListener:function(M,K,V,P,T,Y){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var Q=0,S=M.length;Q<S;++Q){W=this.on(M[Q],K,V,P,T)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var O=this.getEl(M);if(O){M=O;}else{this.onAvailable(M,function(){YAHOO.util.Event._addListener(M,K,V,P,T,Y);});return true;}}}if(!M){return false;}if("unload"==K&&P!==this){J[J.length]=[M,K,V,P,T];return true;}var L=M;if(T){if(T===true){L=P;}else{L=T;}}var N=function(Z){return V.call(L,YAHOO.util.Event.getEvent(Z,M),P);};var X=[M,K,V,N,L,P,T,Y];var R=H.length;H[R]=X;try{this._simpleAdd(M,K,N,Y);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}return true;},_getType:function(K){return this._specialTypes[K]||K;},addListener:function(M,P,L,N,O){var K=((P==F||P==I)&&!YAHOO.env.ua.ie)?true:false;return this._addListener(M,this._getType(P),L,N,O,K);},addFocusListener:function(L,K,M,N){return this.on(L,F,K,M,N);},removeFocusListener:function(L,K){return this.removeListener(L,F,K);},addBlurListener:function(L,K,M,N){return this.on(L,I,K,M,N);},removeBlurListener:function(L,K){return this.removeListener(L,I,K);},removeListener:function(L,K,R){var M,P,U;K=this._getType(K);if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var S=true;for(M=L.length-1;M>-1;M--){S=(this.removeListener(L[M],K,R)&&S);}return S;}}if(!R||!R.call){return this.purgeElement(L,false,K);}if("unload"==K){for(M=J.length-1;M>-1;M--){U=J[M];if(U&&U[0]==L&&U[1]==K&&U[2]==R){J.splice(M,1);return true;}}return false;}var N=null;var O=arguments[3];if("undefined"===typeof O){O=this._getCacheIndex(H,L,K,R);}if(O>=0){N=H[O];}if(!L||!N){return false;}var T=N[this.CAPTURE]===true?true:false;try{this._simpleRemove(L,K,N[this.WFN],T);}catch(Q){this.lastError=Q;return false;}delete H[O][this.WFN];delete H[O][this.FN];H.splice(O,1);return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(L){try{if(L&&3==L.nodeType){return L.parentNode;}}catch(K){}return L;},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;
+}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in C)){K=C[K];}return K;},_getCacheIndex:function(M,P,Q,O){for(var N=0,L=M.length;N<L;N=N+1){var K=M[N];if(K&&K[this.FN]==O&&K[this.EL]==P&&K[this.TYPE]==Q){return N;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+B;++B;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",YAHOO,0,0,1),_load:function(L){if(!G){G=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(E.length===0){A=0;if(this._interval){this._interval.cancel();this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var Q=!G;if(!Q){Q=(A>0&&E.length>0);}var P=[];var R=function(T,U){var S=T;if(U.overrideContext){if(U.overrideContext===true){S=U.obj;}else{S=U.overrideContext;}}U.fn.call(S,U.obj);};var L,K,O,N,M=[];for(L=0,K=E.length;L<K;L=L+1){O=E[L];if(O){N=this.getEl(O.id);if(N){if(O.checkReady){if(G||N.nextSibling||!Q){M.push(O);E[L]=null;}}else{R(N,O);E[L]=null;}}else{P.push(O);}}}for(L=0,K=M.length;L<K;L=L+1){O=M[L];R(this.getEl(O.id),O);}A--;if(Q){for(L=E.length-1;L>-1;L--){O=E[L];if(!O||!O.id){E.splice(L,1);}}this.startInterval();}else{if(this._interval){this._interval.cancel();this._interval=null;}}this.locked=false;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=Q.length-1;N>-1;N--){var L=Q[N];this.removeListener(M,L.type,L.fn);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[H,J];}else{if(K==="unload"){L=[J];}else{K=this._getType(K);L=[H];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(R){var L=YAHOO.util.Event,O,N,M,Q,P,S=J.slice(),K;for(O=0,Q=J.length;O<Q;++O){M=S[O];if(M){K=window;if(M[L.ADJ_SCOPE]){if(M[L.ADJ_SCOPE]===true){K=M[L.UNLOAD_OBJ];}else{K=M[L.ADJ_SCOPE];}}M[L.FN].call(K,L.getEvent(R,M[L.EL]),M[L.UNLOAD_OBJ]);S[O]=null;}}M=null;K=null;J=null;if(H){for(N=H.length-1;N>-1;N--){M=H[N];if(M){L.removeListener(M[L.EL],M[L.TYPE],M[L.FN],N);}}M=null;}L._simpleRemove(window,"unload",L._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
+if(EU.isIE){if(self!==self.top){document.onreadystatechange=function(){if(document.readyState=="complete"){document.onreadystatechange=null;EU._ready();}};}else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);
+},createEvent:function(B,G){this.__yui_events=this.__yui_events||{};var E=G||{},D=this.__yui_events,F;if(D[B]){}else{F=new YAHOO.util.CustomEvent(B,E.scope||this,E.silent,YAHOO.util.CustomEvent.FLAT,E.fireOnce);D[B]=F;if(E.onSubscribeCallback){F.subscribeEvent.subscribe(E.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var A=this.__yui_subscribers[B];if(A){for(var C=0;C<A.length;++C){F.subscribe(A[C].fn,A[C].obj,A[C].overrideContext);}}}return D[B];},fireEvent:function(B){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[B];if(!D){return null;}var A=[];for(var C=1;C<arguments.length;++C){A.push(arguments[C]);}return D.fire.apply(D,A);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.8.0r4",build:"2449"});
\ No newline at end of file
Index: trunk/include/yui/event/event.js
===================================================================
--- trunk/include/yui/event/event.js	(nonexistent)
+++ trunk/include/yui/event/event.js	(revision 2)
@@ -0,0 +1,2500 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+
+/**
+ * The CustomEvent class lets you define events for your application
+ * that can be subscribed to by one or more independent component.
+ *
+ * @param {String}  type The type of event, which is passed to the callback
+ *                  when the event fires
+ * @param {Object}  context The context the event will fire from.  "this" will
+ *                  refer to this object in the callback.  Default value: 
+ *                  the window object.  The listener can override this.
+ * @param {boolean} silent pass true to prevent the event from writing to
+ *                  the debugsystem
+ * @param {int}     signature the signature that the custom event subscriber
+ *                  will receive. YAHOO.util.CustomEvent.LIST or 
+ *                  YAHOO.util.CustomEvent.FLAT.  The default is
+ *                  YAHOO.util.CustomEvent.LIST.
+ * @param fireOnce {boolean} If configured to fire once, the custom event 
+ * will only notify subscribers a single time regardless of how many times 
+ * the event is fired.  In addition, new subscribers will be notified 
+ * immediately if the event has already been fired.
+ * @namespace YAHOO.util
+ * @class CustomEvent
+ * @constructor
+ */
+YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
+
+    /**
+     * The type of event, returned to subscribers when the event fires
+    * @property type
+    * @type string
+     */
+    this.type = type;
+
+    /**
+     * The context the event will fire from by default. Defaults to the window obj.
+    * @property scope
+    * @type object
+     */
+    this.scope = context || window;
+
+    /**
+     * By default all custom events are logged in the debug build. Set silent to true 
+     * to disable debug output for this event.
+    * @property silent
+    * @type boolean
+     */
+    this.silent = silent;
+
+    /**
+     * If configured to fire once, the custom event will only notify subscribers
+     * a single time regardless of how many times the event is fired.  In addition,
+     * new subscribers will be notified immediately if the event has already been
+     * fired.
+    * @property fireOnce
+    * @type boolean
+    * @default false
+     */
+    this.fireOnce = fireOnce;
+
+    /**
+     * Indicates whether or not this event has ever been fired.
+    * @property fired
+    * @type boolean
+    * @default false
+     */
+    this.fired = false;
+
+    /**
+     * For fireOnce events the arguments the event was fired with are stored
+     * so that new subscribers get the proper payload.
+    * @property firedWith
+    * @type Array
+     */
+    this.firedWith = null;
+
+    /**
+     * Custom events support two styles of arguments provided to the event
+     * subscribers.  
+     * <ul>
+     * <li>YAHOO.util.CustomEvent.LIST: 
+     *   <ul>
+     *   <li>param1: event name</li>
+     *   <li>param2: array of arguments sent to fire</li>
+     *   <li>param3: <optional> a custom object supplied by the subscriber</li>
+     *   </ul>
+     * </li>
+     * <li>YAHOO.util.CustomEvent.FLAT
+     *   <ul>
+     *   <li>param1: the first argument passed to fire.  If you need to
+     *           pass multiple parameters, use and array or object literal</li>
+     *   <li>param2: <optional> a custom object supplied by the subscriber</li>
+     *   </ul>
+     * </li>
+     * </ul>
+     *   @property signature
+     *   @type int
+     */
+    this.signature = signature || YAHOO.util.CustomEvent.LIST;
+
+    /**
+     * The subscribers to this event
+    * @property subscribers
+    * @type Subscriber[]
+     */
+    this.subscribers = [];
+
+    if (!this.silent) {
+    }
+
+    var onsubscribeType = "_YUICEOnSubscribe";
+
+    // Only add subscribe events for events that are not generated by 
+    // CustomEvent
+    if (type !== onsubscribeType) {
+
+        /**
+         * Custom events provide a custom event that fires whenever there is
+         * a new subscriber to the event.  This provides an opportunity to
+         * handle the case where there is a non-repeating event that has
+         * already fired has a new subscriber.  
+         *
+        * @event subscribeEvent
+        * @type YAHOO.util.CustomEvent
+        * @param fn {Function} The function to execute
+        * @param obj <Object> An object to be passed along when the event fires. 
+         * Defaults to the custom event.
+        * @param override <boolean|Object> If true, the obj passed in becomes the 
+         * execution context of the listener. If an object, that object becomes 
+         * the execution context. Defaults to the custom event.
+         */
+        this.subscribeEvent = 
+                new YAHOO.util.CustomEvent(onsubscribeType, this, true);
+
+    } 
+
+
+    /**
+     * In order to make it possible to execute the rest of the subscriber
+     * stack when one thows an exception, the subscribers exceptions are
+     * caught.  The most recent exception is stored in this property
+    * @property lastError
+    * @type Error
+     */
+    this.lastError = null;
+};
+
+/**
+ * Subscriber listener sigature constant.  The LIST type returns three
+ * parameters: the event type, the array of args passed to fire, and
+ * the optional custom object
+ * @property YAHOO.util.CustomEvent.LIST
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.LIST = 0;
+
+/**
+ * Subscriber listener sigature constant.  The FLAT type returns two
+ * parameters: the first argument passed to fire and the optional 
+ * custom object
+ * @property YAHOO.util.CustomEvent.FLAT
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.FLAT = 1;
+
+YAHOO.util.CustomEvent.prototype = {
+
+    /**
+     * Subscribes the caller to this event
+    * @method subscribe
+    * @param {Function} fn        The function to execute
+    * @param {Object}   obj       An object to be passed along when the event fires.
+     * overrideContext <boolean|Object> If true, the obj passed in becomes the execution 
+     * context of the listener. If an object, that object becomes the execution context.
+     */
+    subscribe: function(fn, obj, overrideContext) {
+
+        if (!fn) {
+throw new Error("Invalid callback for subscriber to '" + this.type + "'");
+        }
+
+        if (this.subscribeEvent) {
+            this.subscribeEvent.fire(fn, obj, overrideContext);
+        }
+
+        var s = new YAHOO.util.Subscriber(fn, obj, overrideContext);
+
+        if (this.fireOnce && this.fired) {
+            this.notify(s, this.firedWith);
+        } else {
+            this.subscribers.push(s);
+        }
+    },
+
+    /**
+     * Unsubscribes subscribers.
+    * @method unsubscribe
+    * @param {Function} fn  The subscribed function to remove, if not supplied
+     *                       all will be removed
+    * @param {Object}   obj  The custom object passed to subscribe.  This is
+     *                        optional, but if supplied will be used to
+     *                        disambiguate multiple listeners that are the same
+     *                        (e.g., you subscribe many object using a function
+     *                        that lives on the prototype)
+    * @return {boolean} True if the subscriber was found and detached.
+     */
+    unsubscribe: function(fn, obj) {
+
+        if (!fn) {
+            return this.unsubscribeAll();
+        }
+
+        var found = false;
+        for (var i=0, len=this.subscribers.length; i<len; ++i) {
+            var s = this.subscribers[i];
+            if (s && s.contains(fn, obj)) {
+                this._delete(i);
+                found = true;
+            }
+        }
+
+        return found;
+    },
+
+    /**
+     * Notifies the subscribers.  The callback functions will be executed
+     * from the context specified when the event was created, and with the 
+     * following parameters:
+     *   <ul>
+     *   <li>The type of event</li>
+     *   <li>All of the arguments fire() was executed with as an array</li>
+     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *       method</li>
+     *   </ul>
+    * @method fire 
+    * @param {Object*} arguments an arbitrary set of parameters to pass to 
+     *                            the handler.
+    * @return {boolean} false if one of the subscribers returned false, 
+     *                   true otherwise
+     */
+    fire: function() {
+
+        this.lastError = null;
+
+        var errors = [],
+            len=this.subscribers.length;
+
+
+        var args=[].slice.call(arguments, 0), ret=true, i, rebuild=false;
+
+        if (this.fireOnce) {
+            if (this.fired) {
+                return true;
+            } else {
+                this.firedWith = args;
+            }
+        }
+
+        this.fired = true;
+
+        if (!len && this.silent) {
+            return true;
+        }
+
+        if (!this.silent) {
+        }
+
+        // make a copy of the subscribers so that there are
+        // no index problems if one subscriber removes another.
+        var subs = this.subscribers.slice();
+
+        for (i=0; i<len; ++i) {
+            var s = subs[i];
+            if (!s) {
+                rebuild=true;
+            } else {
+
+                ret = this.notify(s, args);
+
+                if (false === ret) {
+                    if (!this.silent) {
+                    }
+
+                    break;
+                }
+            }
+        }
+
+        return (ret !== false);
+    },
+
+    notify: function(s, args) {
+
+        var ret, param=null, scope = s.getScope(this.scope),
+                 throwErrors = YAHOO.util.Event.throwErrors;
+
+        if (!this.silent) {
+        }
+
+        if (this.signature == YAHOO.util.CustomEvent.FLAT) {
+
+            if (args.length > 0) {
+                param = args[0];
+            }
+
+            try {
+                ret = s.fn.call(scope, param, s.obj);
+            } catch(e) {
+                this.lastError = e;
+                // errors.push(e);
+                if (throwErrors) {
+                    throw e;
+                }
+            }
+        } else {
+            try {
+                ret = s.fn.call(scope, this.type, args, s.obj);
+            } catch(ex) {
+                this.lastError = ex;
+                if (throwErrors) {
+                    throw ex;
+                }
+            }
+        }
+
+        return ret;
+    },
+
+    /**
+     * Removes all listeners
+    * @method unsubscribeAll
+    * @return {int} The number of listeners unsubscribed
+     */
+    unsubscribeAll: function() {
+        var l = this.subscribers.length, i;
+        for (i=l-1; i>-1; i--) {
+            this._delete(i);
+        }
+
+        this.subscribers=[];
+
+        return l;
+    },
+
+    /**
+    * @method _delete
+    * @private
+     */
+    _delete: function(index) {
+        var s = this.subscribers[index];
+        if (s) {
+            delete s.fn;
+            delete s.obj;
+        }
+
+        // this.subscribers[index]=null;
+        this.subscribers.splice(index, 1);
+    },
+
+    /**
+    * @method toString
+     */
+    toString: function() {
+         return "CustomEvent: " + "'" + this.type  + "', " + 
+             "context: " + this.scope;
+
+    }
+};
+
+/////////////////////////////////////////////////////////////////////
+
+/**
+ * Stores the subscriber information to be used when the event fires.
+ * @param {Function} fn       The function to execute
+ * @param {Object}   obj      An object to be passed along when the event fires
+ * @param {boolean}  overrideContext If true, the obj passed in becomes the execution
+ *                            context of the listener
+ * @class Subscriber
+ * @constructor
+ */
+YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
+
+    /**
+     * The callback that will be execute when the event fires
+    * @property fn
+    * @type function
+     */
+    this.fn = fn;
+
+    /**
+     * An optional custom object that will passed to the callback when
+     * the event fires
+    * @property obj
+    * @type object
+     */
+    this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
+
+    /**
+     * The default execution context for the event listener is defined when the
+     * event is created (usually the object which contains the event).
+     * By setting overrideContext to true, the execution context becomes the custom
+     * object passed in by the subscriber.  If overrideContext is an object, that 
+     * object becomes the context.
+    * @property overrideContext
+    * @type boolean|object
+     */
+    this.overrideContext = overrideContext;
+
+};
+
+/**
+ * Returns the execution context for this listener.  If overrideContext was set to true
+ * the custom obj will be the context.  If overrideContext is an object, that is the
+ * context, otherwise the default context will be used.
+ * @method getScope
+ * @param {Object} defaultScope the context to use if this listener does not
+ *                              override it.
+ */
+YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
+    if (this.overrideContext) {
+        if (this.overrideContext === true) {
+            return this.obj;
+        } else {
+            return this.overrideContext;
+        }
+    }
+    return defaultScope;
+};
+
+/**
+ * Returns true if the fn and obj match this objects properties.
+ * Used by the unsubscribe method to match the right subscriber.
+ *
+ * @method contains
+ * @param {Function} fn the function to execute
+ * @param {Object} obj an object to be passed along when the event fires
+ * @return {boolean} true if the supplied arguments match this 
+ *                   subscriber's signature.
+ */
+YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
+    if (obj) {
+        return (this.fn == fn && this.obj == obj);
+    } else {
+        return (this.fn == fn);
+    }
+};
+
+/**
+ * @method toString
+ */
+YAHOO.util.Subscriber.prototype.toString = function() {
+    return "Subscriber { obj: " + this.obj  + 
+           ", overrideContext: " +  (this.overrideContext || "no") + " }";
+};
+
+/**
+ * The Event Utility provides utilities for managing DOM Events and tools
+ * for building event systems
+ *
+ * @module event
+ * @title Event Utility
+ * @namespace YAHOO.util
+ * @requires yahoo
+ */
+
+// The first instance of Event will win if it is loaded more than once.
+// @TODO this needs to be changed so that only the state data that needs to
+// be preserved is kept, while methods are overwritten/added as needed.
+// This means that the module pattern can't be used.
+if (!YAHOO.util.Event) {
+
+/**
+ * The event utility provides functions to add and remove event listeners,
+ * event cleansing.  It also tries to automatically remove listeners it
+ * registers during the unload event.
+ *
+ * @class Event
+ * @static
+ */
+    YAHOO.util.Event = function() {
+
+        /**
+         * True after the onload event has fired
+        * @property loadComplete
+        * @type boolean
+        * @static
+        * @private
+         */
+        var loadComplete =  false,
+
+        /**
+         * Cache of wrapped listeners
+        * @property listeners
+        * @type array
+        * @static
+        * @private
+         */
+        listeners = [],
+
+
+        /**
+         * User-defined unload function that will be fired before all events
+         * are detached
+        * @property unloadListeners
+        * @type array
+        * @static
+        * @private
+         */
+        unloadListeners = [],
+
+        /**
+         * The number of times to poll after window.onload.  This number is
+         * increased if additional late-bound handlers are requested after
+         * the page load.
+        * @property retryCount
+        * @static
+        * @private
+         */
+        retryCount = 0,
+
+        /**
+         * onAvailable listeners
+        * @property onAvailStack
+        * @static
+        * @private
+         */
+        onAvailStack = [],
+
+        /**
+         * Counter for auto id generation
+        * @property counter
+        * @static
+        * @private
+         */
+        counter = 0,
+        
+        /**
+         * Normalized keycodes for webkit/safari
+        * @property webkitKeymap
+        * @type {int: int}
+        * @private
+        * @static
+        * @final
+         */
+         webkitKeymap = {
+            63232: 38, // up
+            63233: 40, // down
+            63234: 37, // left
+            63235: 39, // right
+            63276: 33, // page up
+            63277: 34, // page down
+            25: 9      // SHIFT-TAB (Safari provides a different key code in
+                       // this case, even though the shiftKey modifier is set)
+        },
+
+        isIE = YAHOO.env.ua.ie,
+
+        // String constants used by the addFocusListener and removeFocusListener methods
+        
+           FOCUSIN = "focusin",
+           FOCUSOUT = "focusout";
+
+        return {
+
+            /**
+             * The number of times we should look for elements that are not
+             * in the DOM at the time the event is requested after the document
+             * has been loaded.  The default is 500@amp;40 ms, so it will poll
+             * for 20 seconds or until all outstanding handlers are bound
+             * (whichever comes first).
+            * @property POLL_RETRYS
+            * @type int
+            * @static
+            * @final
+             */
+            POLL_RETRYS: 500,
+
+            /**
+             * The poll interval in milliseconds
+            * @property POLL_INTERVAL
+            * @type int
+            * @static
+            * @final
+             */
+            POLL_INTERVAL: 40,
+
+            /**
+             * Element to bind, int constant
+            * @property EL
+            * @type int
+            * @static
+            * @final
+             */
+            EL: 0,
+
+            /**
+             * Type of event, int constant
+            * @property TYPE
+            * @type int
+            * @static
+            * @final
+             */
+            TYPE: 1,
+
+            /**
+             * Function to execute, int constant
+            * @property FN
+            * @type int
+            * @static
+            * @final
+             */
+            FN: 2,
+
+            /**
+             * Function wrapped for context correction and cleanup, int constant
+            * @property WFN
+            * @type int
+            * @static
+            * @final
+             */
+            WFN: 3,
+
+            /**
+             * Object passed in by the user that will be returned as a 
+             * parameter to the callback, int constant.  Specific to
+             * unload listeners
+            * @property OBJ
+            * @type int
+            * @static
+            * @final
+             */
+            UNLOAD_OBJ: 3,
+
+            /**
+             * Adjusted context, either the element we are registering the event
+             * on or the custom object passed in by the listener, int constant
+            * @property ADJ_SCOPE
+            * @type int
+            * @static
+            * @final
+             */
+            ADJ_SCOPE: 4,
+
+            /**
+             * The original obj passed into addListener
+            * @property OBJ
+            * @type int
+            * @static
+            * @final
+             */
+            OBJ: 5,
+
+            /**
+             * The original context parameter passed into addListener
+            * @property OVERRIDE
+            * @type int
+            * @static
+            * @final
+             */
+            OVERRIDE: 6,
+
+            /**
+             * The original capture parameter passed into addListener
+            * @property CAPTURE
+            * @type int
+            * @static
+            * @final
+             */
+            CAPTURE: 7,
+
+            /**
+             * addListener/removeListener can throw errors in unexpected scenarios.
+             * These errors are suppressed, the method returns false, and this property
+             * is set
+            * @property lastError
+            * @static
+            * @type Error
+             */
+            lastError: null,
+
+            /**
+             * Safari detection
+            * @property isSafari
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.webkit
+             */
+            isSafari: YAHOO.env.ua.webkit,
+            
+            /**
+             * webkit version
+            * @property webkit
+            * @type string
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.webkit
+             */
+            webkit: YAHOO.env.ua.webkit,
+            
+            /**
+             * IE detection 
+            * @property isIE
+            * @private
+            * @static
+            * @deprecated use YAHOO.env.ua.ie
+             */
+            isIE: isIE,
+
+            /**
+             * poll handle
+            * @property _interval
+            * @static
+            * @private
+             */
+            _interval: null,
+
+            /**
+             * document readystate poll handle
+            * @property _dri
+            * @static
+            * @private
+             */
+             _dri: null,
+
+
+            /**
+             * Map of special event types
+            * @property _specialTypes
+            * @static
+            * @private
+             */
+            _specialTypes: {
+                focusin: (isIE ? "focusin" : "focus"),
+                focusout: (isIE ? "focusout" : "blur")
+            },
+
+
+            /**
+             * True when the document is initially usable
+            * @property DOMReady
+            * @type boolean
+            * @static
+             */
+            DOMReady: false,
+
+            /**
+             * Errors thrown by subscribers of custom events are caught
+             * and the error message is written to the debug console.  If
+             * this property is set to true, it will also re-throw the
+             * error.
+            * @property throwErrors
+            * @type boolean
+            * @default false
+             */
+            throwErrors: false,
+
+
+            /**
+            * @method startInterval
+            * @static
+            * @private
+             */
+            startInterval: function() {
+                if (!this._interval) {
+                    // var self = this;
+                    // var callback = function() { self._tryPreloadAttach(); };
+                    // this._interval = setInterval(callback, this.POLL_INTERVAL);
+                    this._interval = YAHOO.lang.later(this.POLL_INTERVAL, this, this._tryPreloadAttach, null, true);
+                }
+            },
+
+            /**
+             * Executes the supplied callback when the item with the supplied
+             * id is found.  This is meant to be used to execute behavior as
+             * soon as possible as the page loads.  If you use this after the
+             * initial page load it will poll for a fixed time for the element.
+             * The number of times it will poll and the frequency are
+             * configurable.  By default it will poll for 10 seconds.
+             *
+             * <p>The callback is executed with a single parameter:
+             * the custom object parameter, if provided.</p>
+             *
+            * @method onAvailable
+             *
+            * @param {string||string[]}   id the id of the element, or an array
+             * of ids to look for.
+            * @param {function} fn what to execute when the element is found.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
+            * @param checkContent {boolean} check child node readiness (onContentReady)
+            * @static
+             */
+            onAvailable: function(id, fn, obj, overrideContext, checkContent) {
+
+                var a = (YAHOO.lang.isString(id)) ? [id] : id;
+
+                for (var i=0; i<a.length; i=i+1) {
+                    onAvailStack.push({id:         a[i], 
+                                       fn:         fn, 
+                                       obj:        obj, 
+                                       overrideContext:   overrideContext, 
+                                       checkReady: checkContent });
+                }
+
+                retryCount = this.POLL_RETRYS;
+
+                this.startInterval();
+            },
+
+            /**
+             * Works the same way as onAvailable, but additionally checks the
+             * state of sibling elements to determine if the content of the
+             * available element is safe to modify.
+             *
+             * <p>The callback is executed with a single parameter:
+             * the custom object parameter, if provided.</p>
+             *
+            * @method onContentReady
+             *
+            * @param {string}   id the id of the element to look for.
+            * @param {function} fn what to execute when the element is ready.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj.  If an object, fn will
+             *                   exectute in the context of that object
+             *
+            * @static
+             */
+            onContentReady: function(id, fn, obj, overrideContext) {
+                this.onAvailable(id, fn, obj, overrideContext, true);
+            },
+
+            /**
+             * Executes the supplied callback when the DOM is first usable.  This
+             * will execute immediately if called after the DOMReady event has
+             * fired.   @todo the DOMContentReady event does not fire when the
+             * script is dynamically injected into the page.  This means the
+             * DOMReady custom event will never fire in FireFox or Opera when the
+             * library is injected.  It _will_ fire in Safari, and the IE 
+             * implementation would allow for us to fire it if the defered script
+             * is not available.  We want this to behave the same in all browsers.
+             * Is there a way to identify when the script has been injected 
+             * instead of included inline?  Is there a way to know whether the 
+             * window onload event has fired without having had a listener attached 
+             * to it when it did so?
+             *
+             * <p>The callback is a CustomEvent, so the signature is:</p>
+             * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>
+             * <p>For DOMReady events, there are no fire argments, so the
+             * signature is:</p>
+             * <p>"DOMReady", [], obj</p>
+             *
+             *
+            * @method onDOMReady
+             *
+            * @param {function} fn what to execute when the element is found.
+            * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+            * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
+             *
+            * @static
+             */
+            // onDOMReady: function(fn, obj, overrideContext) {
+            onDOMReady: function() {
+                this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent, arguments);
+            },
+
+
+            /**
+             * Appends an event handler
+             *
+            * @method _addListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {String}   sType     The type of event to append
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @param {boolen}      capture capture or bubble phase
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @private
+            * @static
+             */
+            _addListener: function(el, sType, fn, obj, overrideContext, bCapture) {
+
+                if (!fn || !fn.call) {
+                    return false;
+                }
+
+                // The el argument can be an array of elements or element ids.
+                if ( this._isValidCollection(el)) {
+                    var ok = true;
+                    for (var i=0,len=el.length; i<len; ++i) {
+                        ok = this.on(el[i], 
+                                       sType, 
+                                       fn, 
+                                       obj, 
+                                       overrideContext) && ok;
+                    }
+                    return ok;
+
+                } else if (YAHOO.lang.isString(el)) {
+                    var oEl = this.getEl(el);
+                    // If the el argument is a string, we assume it is 
+                    // actually the id of the element.  If the page is loaded
+                    // we convert el to the actual element, otherwise we 
+                    // defer attaching the event until onload event fires
+
+                    // check to see if we need to delay hooking up the event 
+                    // until after the page loads.
+                    if (oEl) {
+                        el = oEl;
+                    } else {
+                        // defer adding the event until the element is available
+                        this.onAvailable(el, function() {
+                           YAHOO.util.Event._addListener(el, sType, fn, obj, overrideContext, bCapture);
+                        });
+
+                        return true;
+                    }
+                }
+
+                // Element should be an html element or an array if we get 
+                // here.
+                if (!el) {
+                    return false;
+                }
+
+                // we need to make sure we fire registered unload events 
+                // prior to automatically unhooking them.  So we hang on to 
+                // these instead of attaching them to the window and fire the
+                // handles explicitly during our one unload event.
+                if ("unload" == sType && obj !== this) {
+                    unloadListeners[unloadListeners.length] =
+                            [el, sType, fn, obj, overrideContext];
+                    return true;
+                }
+
+
+                // if the user chooses to override the context, we use the custom
+                // object passed in, otherwise the executing context will be the
+                // HTML element that the event is registered on
+                var context = el;
+                if (overrideContext) {
+                    if (overrideContext === true) {
+                        context = obj;
+                    } else {
+                        context = overrideContext;
+                    }
+                }
+
+                // wrap the function so we can return the obj object when
+                // the event fires;
+                var wrappedFn = function(e) {
+                        return fn.call(context, YAHOO.util.Event.getEvent(e, el), 
+                                obj);
+                    };
+
+                var li = [el, sType, fn, wrappedFn, context, obj, overrideContext, bCapture];
+                var index = listeners.length;
+                // cache the listener so we can try to automatically unload
+                listeners[index] = li;
+
+                try {
+                    this._simpleAdd(el, sType, wrappedFn, bCapture);
+                } catch(ex) {
+                    // handle an error trying to attach an event.  If it fails
+                    // we need to clean up the cache
+                    this.lastError = ex;
+                    this.removeListener(el, sType, fn);
+                    return false;
+                }
+
+                return true;
+                
+            },
+
+            /**
+             * Checks to see if the type requested is a special type 
+             * (as defined by the _specialTypes hash), and (if so) returns 
+             * the special type name.
+             *
+            * @method _getType
+             *
+            * @param {String}   sType     The type to look up
+            * @private
+             */
+            _getType: function (type) {
+            
+                return this._specialTypes[type] || type;
+                
+            },
+
+
+            /**
+             * Appends an event handler
+             *
+            * @method addListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {String}   sType     The type of event to append
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+             */
+            addListener: function (el, sType, fn, obj, overrideContext) {
+
+                var capture = ((sType == FOCUSIN || sType == FOCUSOUT) && !YAHOO.env.ua.ie) ? true : false;
+
+                return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
+
+            },
+
+
+            /**
+             * Attaches a focusin event listener to the specified element for 
+              * the purpose of listening for the focus event on the element's 
+             * descendants.
+            * @method addFocusListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+            * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+             */
+            addFocusListener: function (el, fn, obj, overrideContext) {
+                return this.on(el, FOCUSIN, fn, obj, overrideContext);
+            },          
+
+
+            /**
+             * Removes a focusin event listener to the specified element for 
+             * the purpose of listening for the focus event on the element's 
+             * descendants.
+             *
+            * @method removeFocusListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+              * @deprecated use YAHOO.util.Event.removeListener and specify "focusin" as the event type.
+             */
+            removeFocusListener: function (el, fn) { 
+                return this.removeListener(el, FOCUSIN, fn);
+            },
+
+            /**
+             * Attaches a focusout event listener to the specified element for 
+             * the purpose of listening for the blur event on the element's 
+             * descendants.
+             *
+            * @method addBlurListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to assign the 
+             *  listener to.
+            * @param {Function} fn        The method the event invokes
+            * @param {Object}   obj    An arbitrary object that will be 
+             *                             passed as a parameter to the handler
+            * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
+             *                             object, this object becomes the execution
+             *                             context.
+            * @return {Boolean} True if the action was successful or defered,
+             *                        false if one or more of the elements 
+             *                        could not have the listener attached,
+             *                        or if the operation throws an exception.
+            * @static
+              * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+             */
+            addBlurListener: function (el, fn, obj, overrideContext) {
+                return this.on(el, FOCUSOUT, fn, obj, overrideContext);
+            },          
+
+            /**
+             * Removes a focusout event listener to the specified element for 
+             * the purpose of listening for the blur event on the element's 
+             * descendants.
+             *
+            * @method removeBlurListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+              * @deprecated use YAHOO.util.Event.removeListener and specify "focusout" as the event type.
+             */
+            removeBlurListener: function (el, fn) { 
+                return this.removeListener(el, FOCUSOUT, fn);
+            },
+
+            /**
+             * Removes an event listener
+             *
+            * @method removeListener
+             *
+            * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             *  reference, or a collection of ids and/or elements to remove
+             *  the listener from.
+            * @param {String} sType the type of event to remove.
+            * @param {Function} fn the method the event invokes.  If fn is
+             *  undefined, then all event handlers for the type of event are 
+             *  removed.
+            * @return {boolean} true if the unbind was successful, false 
+             *  otherwise.
+            * @static
+             */
+            removeListener: function(el, sType, fn) {
+                var i, len, li;
+
+                sType = this._getType(sType);
+
+                // The el argument can be a string
+                if (typeof el == "string") {
+                    el = this.getEl(el);
+                // The el argument can be an array of elements or element ids.
+                } else if ( this._isValidCollection(el)) {
+                    var ok = true;
+                    for (i=el.length-1; i>-1; i--) {
+                        ok = ( this.removeListener(el[i], sType, fn) && ok );
+                    }
+                    return ok;
+                }
+
+                if (!fn || !fn.call) {
+                    //return false;
+                    return this.purgeElement(el, false, sType);
+                }
+
+                if ("unload" == sType) {
+
+                    for (i=unloadListeners.length-1; i>-1; i--) {
+                        li = unloadListeners[i];
+                        if (li && 
+                            li[0] == el && 
+                            li[1] == sType && 
+                            li[2] == fn) {
+                                unloadListeners.splice(i, 1);
+                                // unloadListeners[i]=null;
+                                return true;
+                        }
+                    }
+
+                    return false;
+                }
+
+                var cacheItem = null;
+
+                // The index is a hidden parameter; needed to remove it from
+                // the method signature because it was tempting users to
+                // try and take advantage of it, which is not possible.
+                var index = arguments[3];
+  
+                if ("undefined" === typeof index) {
+                    index = this._getCacheIndex(listeners, el, sType, fn);
+                }
+
+                if (index >= 0) {
+                    cacheItem = listeners[index];
+                }
+
+                if (!el || !cacheItem) {
+                    return false;
+                }
+
+
+                var bCapture = cacheItem[this.CAPTURE] === true ? true : false;
+
+                try {
+                    this._simpleRemove(el, sType, cacheItem[this.WFN], bCapture);
+                } catch(ex) {
+                    this.lastError = ex;
+                    return false;
+                }
+
+                // removed the wrapped handler
+                delete listeners[index][this.WFN];
+                delete listeners[index][this.FN];
+                listeners.splice(index, 1);
+                // listeners[index]=null;
+
+                return true;
+
+            },
+
+            /**
+             * Returns the event's target element.  Safari sometimes provides
+             * a text node, and this is automatically resolved to the text
+             * node's parent so that it behaves like other browsers.
+            * @method getTarget
+            * @param {Event} ev the event
+            * @param {boolean} resolveTextNode when set to true the target's
+             *                  parent will be returned if the target is a 
+             *                  text node.  @deprecated, the text node is
+             *                  now resolved automatically
+            * @return {HTMLElement} the event's target
+            * @static
+             */
+            getTarget: function(ev, resolveTextNode) {
+                var t = ev.target || ev.srcElement;
+                return this.resolveTextNode(t);
+            },
+
+            /**
+             * In some cases, some browsers will return a text node inside
+             * the actual element that was targeted.  This normalizes the
+             * return value for getTarget and getRelatedTarget.
+            * @method resolveTextNode
+            * @param {HTMLElement} node node to resolve
+            * @return {HTMLElement} the normized node
+            * @static
+             */
+            resolveTextNode: function(n) {
+                try {
+                    if (n && 3 == n.nodeType) {
+                        return n.parentNode;
+                    }
+                } catch(e) { }
+
+                return n;
+            },
+
+            /**
+             * Returns the event's pageX
+            * @method getPageX
+            * @param {Event} ev the event
+            * @return {int} the event's pageX
+            * @static
+             */
+            getPageX: function(ev) {
+                var x = ev.pageX;
+                if (!x && 0 !== x) {
+                    x = ev.clientX || 0;
+
+                    if ( this.isIE ) {
+                        x += this._getScrollLeft();
+                    }
+                }
+
+                return x;
+            },
+
+            /**
+             * Returns the event's pageY
+            * @method getPageY
+            * @param {Event} ev the event
+            * @return {int} the event's pageY
+            * @static
+             */
+            getPageY: function(ev) {
+                var y = ev.pageY;
+                if (!y && 0 !== y) {
+                    y = ev.clientY || 0;
+
+                    if ( this.isIE ) {
+                        y += this._getScrollTop();
+                    }
+                }
+
+
+                return y;
+            },
+
+            /**
+             * Returns the pageX and pageY properties as an indexed array.
+            * @method getXY
+            * @param {Event} ev the event
+            * @return {[x, y]} the pageX and pageY properties of the event
+            * @static
+             */
+            getXY: function(ev) {
+                return [this.getPageX(ev), this.getPageY(ev)];
+            },
+
+            /**
+             * Returns the event's related target 
+            * @method getRelatedTarget
+            * @param {Event} ev the event
+            * @return {HTMLElement} the event's relatedTarget
+            * @static
+             */
+            getRelatedTarget: function(ev) {
+                var t = ev.relatedTarget;
+                if (!t) {
+                    if (ev.type == "mouseout") {
+                        t = ev.toElement;
+                    } else if (ev.type == "mouseover") {
+                        t = ev.fromElement;
+                    }
+                }
+
+                return this.resolveTextNode(t);
+            },
+
+            /**
+             * Returns the time of the event.  If the time is not included, the
+             * event is modified using the current time.
+            * @method getTime
+            * @param {Event} ev the event
+            * @return {Date} the time of the event
+            * @static
+             */
+            getTime: function(ev) {
+                if (!ev.time) {
+                    var t = new Date().getTime();
+                    try {
+                        ev.time = t;
+                    } catch(ex) { 
+                        this.lastError = ex;
+                        return t;
+                    }
+                }
+
+                return ev.time;
+            },
+
+            /**
+             * Convenience method for stopPropagation + preventDefault
+            * @method stopEvent
+            * @param {Event} ev the event
+            * @static
+             */
+            stopEvent: function(ev) {
+                this.stopPropagation(ev);
+                this.preventDefault(ev);
+            },
+
+            /**
+             * Stops event propagation
+            * @method stopPropagation
+            * @param {Event} ev the event
+            * @static
+             */
+            stopPropagation: function(ev) {
+                if (ev.stopPropagation) {
+                    ev.stopPropagation();
+                } else {
+                    ev.cancelBubble = true;
+                }
+            },
+
+            /**
+             * Prevents the default behavior of the event
+            * @method preventDefault
+            * @param {Event} ev the event
+            * @static
+             */
+            preventDefault: function(ev) {
+                if (ev.preventDefault) {
+                    ev.preventDefault();
+                } else {
+                    ev.returnValue = false;
+                }
+            },
+             
+            /**
+             * Finds the event in the window object, the caller's arguments, or
+             * in the arguments of another method in the callstack.  This is
+             * executed automatically for events registered through the event
+             * manager, so the implementer should not normally need to execute
+             * this function at all.
+            * @method getEvent
+            * @param {Event} e the event parameter from the handler
+            * @param {HTMLElement} boundEl the element the listener is attached to
+            * @return {Event} the event 
+            * @static
+             */
+            getEvent: function(e, boundEl) {
+                var ev = e || window.event;
+
+                if (!ev) {
+                    var c = this.getEvent.caller;
+                    while (c) {
+                        ev = c.arguments[0];
+                        if (ev && Event == ev.constructor) {
+                            break;
+                        }
+                        c = c.caller;
+                    }
+                }
+
+                return ev;
+            },
+
+            /**
+             * Returns the charcode for an event
+            * @method getCharCode
+            * @param {Event} ev the event
+            * @return {int} the event's charCode
+            * @static
+             */
+            getCharCode: function(ev) {
+                var code = ev.keyCode || ev.charCode || 0;
+
+                // webkit key normalization
+                if (YAHOO.env.ua.webkit && (code in webkitKeymap)) {
+                    code = webkitKeymap[code];
+                }
+                return code;
+            },
+
+            /**
+             * Locating the saved event handler data by function ref
+             *
+            * @method _getCacheIndex
+            * @static
+            * @private
+             */
+            _getCacheIndex: function(a, el, sType, fn) {
+                for (var i=0, l=a.length; i<l; i=i+1) {
+                    var li = a[i];
+                    if ( li                 && 
+                         li[this.FN] == fn  && 
+                         li[this.EL] == el  && 
+                         li[this.TYPE] == sType ) {
+                        return i;
+                    }
+                }
+
+                return -1;
+            },
+
+            /**
+             * Generates an unique ID for the element if it does not already 
+             * have one.
+            * @method generateId
+            * @param el the element to create the id for
+            * @return {string} the resulting id of the element
+            * @static
+             */
+            generateId: function(el) {
+                var id = el.id;
+
+                if (!id) {
+                    id = "yuievtautoid-" + counter;
+                    ++counter;
+                    el.id = id;
+                }
+
+                return id;
+            },
+
+
+            /**
+             * We want to be able to use getElementsByTagName as a collection
+             * to attach a group of events to.  Unfortunately, different 
+             * browsers return different types of collections.  This function
+             * tests to determine if the object is array-like.  It will also 
+             * fail if the object is an array, but is empty.
+            * @method _isValidCollection
+            * @param o the object to test
+            * @return {boolean} true if the object is array-like and populated
+            * @static
+            * @private
+             */
+            _isValidCollection: function(o) {
+                try {
+                    return ( o                     && // o is something
+                             typeof o !== "string" && // o is not a string
+                             o.length              && // o is indexed
+                             !o.tagName            && // o is not an HTML element
+                             !o.alert              && // o is not a window
+                             typeof o[0] !== "undefined" );
+                } catch(ex) {
+                    return false;
+                }
+
+            },
+
+            /**
+            * @private
+            * @property elCache
+             * DOM element cache
+            * @static
+            * @deprecated Elements are not cached due to issues that arise when
+             * elements are removed and re-added
+             */
+            elCache: {},
+
+            /**
+             * We cache elements bound by id because when the unload event 
+             * fires, we can no longer use document.getElementById
+            * @method getEl
+            * @static
+            * @private
+            * @deprecated Elements are not cached any longer
+             */
+            getEl: function(id) {
+                return (typeof id === "string") ? document.getElementById(id) : id;
+            },
+
+            /**
+             * Clears the element cache
+            * @deprecated Elements are not cached any longer
+            * @method clearCache
+            * @static
+            * @private
+             */
+            clearCache: function() { },
+
+            /**
+             * Custom event the fires when the dom is initially usable
+            * @event DOMReadyEvent
+             */
+            DOMReadyEvent: new YAHOO.util.CustomEvent("DOMReady", YAHOO, 0, 0, 1),
+
+            /**
+             * hook up any deferred listeners
+            * @method _load
+            * @static
+            * @private
+             */
+            _load: function(e) {
+
+                if (!loadComplete) {
+                    loadComplete = true;
+                    var EU = YAHOO.util.Event;
+
+                    // Just in case DOMReady did not go off for some reason
+                    EU._ready();
+
+                    // Available elements may not have been detected before the
+                    // window load event fires. Try to find them now so that the
+                    // the user is more likely to get the onAvailable notifications
+                    // before the window load notification
+                    EU._tryPreloadAttach();
+
+                }
+            },
+
+            /**
+             * Fires the DOMReady event listeners the first time the document is
+             * usable.
+            * @method _ready
+            * @static
+            * @private
+             */
+            _ready: function(e) {
+                var EU = YAHOO.util.Event;
+                if (!EU.DOMReady) {
+                    EU.DOMReady=true;
+
+                    // Fire the content ready custom event
+                    EU.DOMReadyEvent.fire();
+
+                    // Remove the DOMContentLoaded (FF/Opera)
+                    EU._simpleRemove(document, "DOMContentLoaded", EU._ready);
+                }
+            },
+
+            /**
+             * Polling function that runs before the onload event fires, 
+             * attempting to attach to DOM Nodes as soon as they are 
+             * available
+            * @method _tryPreloadAttach
+            * @static
+            * @private
+             */
+            _tryPreloadAttach: function() {
+
+                if (onAvailStack.length === 0) {
+                    retryCount = 0;
+                    if (this._interval) {
+                        // clearInterval(this._interval);
+                        this._interval.cancel();
+                        this._interval = null;
+                    } 
+                    return;
+                }
+
+                if (this.locked) {
+                    return;
+                }
+
+                if (this.isIE) {
+                    // Hold off if DOMReady has not fired and check current
+                    // readyState to protect against the IE operation aborted
+                    // issue.
+                    if (!this.DOMReady) {
+                        this.startInterval();
+                        return;
+                    }
+                }
+
+                this.locked = true;
+
+
+                // keep trying until after the page is loaded.  We need to 
+                // check the page load state prior to trying to bind the 
+                // elements so that we can be certain all elements have been 
+                // tested appropriately
+                var tryAgain = !loadComplete;
+                if (!tryAgain) {
+                    tryAgain = (retryCount > 0 && onAvailStack.length > 0);
+                }
+
+                // onAvailable
+                var notAvail = [];
+
+                var executeItem = function (el, item) {
+                    var context = el;
+                    if (item.overrideContext) {
+                        if (item.overrideContext === true) {
+                            context = item.obj;
+                        } else {
+                            context = item.overrideContext;
+                        }
+                    }
+                    item.fn.call(context, item.obj);
+                };
+
+                var i, len, item, el, ready=[];
+
+                // onAvailable onContentReady
+                for (i=0, len=onAvailStack.length; i<len; i=i+1) {
+                    item = onAvailStack[i];
+                    if (item) {
+                        el = this.getEl(item.id);
+                        if (el) {
+                            if (item.checkReady) {
+                                if (loadComplete || el.nextSibling || !tryAgain) {
+                                    ready.push(item);
+                                    onAvailStack[i] = null;
+                                }
+                            } else {
+                                executeItem(el, item);
+                                onAvailStack[i] = null;
+                            }
+                        } else {
+                            notAvail.push(item);
+                        }
+                    }
+                }
+                
+                // make sure onContentReady fires after onAvailable
+                for (i=0, len=ready.length; i<len; i=i+1) {
+                    item = ready[i];
+                    executeItem(this.getEl(item.id), item);
+                }
+
+
+                retryCount--;
+
+                if (tryAgain) {
+                    for (i=onAvailStack.length-1; i>-1; i--) {
+                        item = onAvailStack[i];
+                        if (!item || !item.id) {
+                            onAvailStack.splice(i, 1);
+                        }
+                    }
+
+                    this.startInterval();
+                } else {
+                    if (this._interval) {
+                        // clearInterval(this._interval);
+                        this._interval.cancel();
+                        this._interval = null;
+                    }
+                }
+
+                this.locked = false;
+
+            },
+
+            /**
+             * Removes all listeners attached to the given element via addListener.
+             * Optionally, the node's children can also be purged.
+             * Optionally, you can specify a specific type of event to remove.
+            * @method purgeElement
+            * @param {HTMLElement} el the element to purge
+            * @param {boolean} recurse recursively purge this element's children
+             * as well.  Use with caution.
+            * @param {string} sType optional type of listener to purge. If
+             * left out, all listeners will be removed
+            * @static
+             */
+            purgeElement: function(el, recurse, sType) {
+                var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+                var elListeners = this.getListeners(oEl, sType), i, len;
+                if (elListeners) {
+                    for (i=elListeners.length-1; i>-1; i--) {
+                        var l = elListeners[i];
+                        this.removeListener(oEl, l.type, l.fn);
+                    }
+                }
+
+                if (recurse && oEl && oEl.childNodes) {
+                    for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
+                        this.purgeElement(oEl.childNodes[i], recurse, sType);
+                    }
+                }
+            },
+
+            /**
+             * Returns all listeners attached to the given element via addListener.
+             * Optionally, you can specify a specific type of event to return.
+            * @method getListeners
+            * @param el {HTMLElement|string} the element or element id to inspect 
+            * @param sType {string} optional type of listener to return. If
+             * left out, all listeners will be returned
+            * @return {Object} the listener. Contains the following fields:
+             * &nbsp;&nbsp;type:   (string)   the type of event
+             * &nbsp;&nbsp;fn:     (function) the callback supplied to addListener
+             * &nbsp;&nbsp;obj:    (object)   the custom object supplied to addListener
+             * &nbsp;&nbsp;adjust: (boolean|object)  whether or not to adjust the default context
+             * &nbsp;&nbsp;scope: (boolean)  the derived context based on the adjust parameter
+             * &nbsp;&nbsp;index:  (int)      its position in the Event util listener cache
+            * @static
+             */           
+            getListeners: function(el, sType) {
+                var results=[], searchLists;
+                if (!sType) {
+                    searchLists = [listeners, unloadListeners];
+                } else if (sType === "unload") {
+                    searchLists = [unloadListeners];
+                } else {
+                    sType = this._getType(sType);
+                    searchLists = [listeners];
+                }
+
+                var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+
+                for (var j=0;j<searchLists.length; j=j+1) {
+                    var searchList = searchLists[j];
+                    if (searchList) {
+                        for (var i=0,len=searchList.length; i<len ; ++i) {
+                            var l = searchList[i];
+                            if ( l  && l[this.EL] === oEl && 
+                                    (!sType || sType === l[this.TYPE]) ) {
+                                results.push({
+                                    type:   l[this.TYPE],
+                                    fn:     l[this.FN],
+                                    obj:    l[this.OBJ],
+                                    adjust: l[this.OVERRIDE],
+                                    scope:  l[this.ADJ_SCOPE],
+                                    index:  i
+                                });
+                            }
+                        }
+                    }
+                }
+
+                return (results.length) ? results : null;
+            },
+
+            /**
+             * Removes all listeners registered by pe.event.  Called 
+             * automatically during the unload event.
+            * @method _unload
+            * @static
+            * @private
+             */
+            _unload: function(e) {
+
+                var EU = YAHOO.util.Event, i, j, l, len, index,
+                         ul = unloadListeners.slice(), context;
+
+                // execute and clear stored unload listeners
+                for (i=0, len=unloadListeners.length; i<len; ++i) {
+                    l = ul[i];
+                    if (l) {
+                        context = window;
+                        if (l[EU.ADJ_SCOPE]) {
+                            if (l[EU.ADJ_SCOPE] === true) {
+                                context = l[EU.UNLOAD_OBJ];
+                            } else {
+                                context = l[EU.ADJ_SCOPE];
+                            }
+                        }
+                        l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                        ul[i] = null;
+                    }
+                }
+
+                l = null;
+                context = null;
+                unloadListeners = null;
+
+                // Remove listeners to handle IE memory leaks
+                // 2.5.0 listeners are removed for all browsers again.  FireFox preserves
+                // at least some listeners between page refreshes, potentially causing
+                // errors during page load (mouseover listeners firing before they
+                // should if the user moves the mouse at the correct moment).
+                if (listeners) {
+                    for (j=listeners.length-1; j>-1; j--) {
+                        l = listeners[j];
+                        if (l) {
+                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
+                        } 
+                    }
+                    l=null;
+                }
+
+                EU._simpleRemove(window, "unload", EU._unload);
+
+            },
+
+            /**
+             * Returns scrollLeft
+            * @method _getScrollLeft
+            * @static
+            * @private
+             */
+            _getScrollLeft: function() {
+                return this._getScroll()[1];
+            },
+
+            /**
+             * Returns scrollTop
+            * @method _getScrollTop
+            * @static
+            * @private
+             */
+            _getScrollTop: function() {
+                return this._getScroll()[0];
+            },
+
+            /**
+             * Returns the scrollTop and scrollLeft.  Used to calculate the 
+             * pageX and pageY in Internet Explorer
+            * @method _getScroll
+            * @static
+            * @private
+             */
+            _getScroll: function() {
+                var dd = document.documentElement, db = document.body;
+                if (dd && (dd.scrollTop || dd.scrollLeft)) {
+                    return [dd.scrollTop, dd.scrollLeft];
+                } else if (db) {
+                    return [db.scrollTop, db.scrollLeft];
+                } else {
+                    return [0, 0];
+                }
+            },
+            
+            /**
+             * Used by old versions of CustomEvent, restored for backwards
+             * compatibility
+            * @method regCE
+            * @private
+            * @static
+            * @deprecated still here for backwards compatibility
+             */
+            regCE: function() {},
+
+            /**
+             * Adds a DOM event directly without the caching, cleanup, context adj, etc
+             *
+            * @method _simpleAdd
+            * @param {HTMLElement} el      the element to bind the handler to
+            * @param {string}      sType   the type of event handler
+            * @param {function}    fn      the callback to invoke
+            * @param {boolen}      capture capture or bubble phase
+            * @static
+            * @private
+             */
+            _simpleAdd: function () {
+                if (window.addEventListener) {
+                    return function(el, sType, fn, capture) {
+                        el.addEventListener(sType, fn, (capture));
+                    };
+                } else if (window.attachEvent) {
+                    return function(el, sType, fn, capture) {
+                        el.attachEvent("on" + sType, fn);
+                    };
+                } else {
+                    return function(){};
+                }
+            }(),
+
+            /**
+             * Basic remove listener
+             *
+            * @method _simpleRemove
+            * @param {HTMLElement} el      the element to bind the handler to
+            * @param {string}      sType   the type of event handler
+            * @param {function}    fn      the callback to invoke
+            * @param {boolen}      capture capture or bubble phase
+            * @static
+            * @private
+             */
+            _simpleRemove: function() {
+                if (window.removeEventListener) {
+                    return function (el, sType, fn, capture) {
+                        el.removeEventListener(sType, fn, (capture));
+                    };
+                } else if (window.detachEvent) {
+                    return function (el, sType, fn) {
+                        el.detachEvent("on" + sType, fn);
+                    };
+                } else {
+                    return function(){};
+                }
+            }()
+        };
+
+    }();
+
+    (function() {
+        var EU = YAHOO.util.Event;
+
+        /**
+         * YAHOO.util.Event.on is an alias for addListener
+        * @method on
+        * @see addListener
+        * @static
+         */
+        EU.on = EU.addListener;
+
+        /**
+         * YAHOO.util.Event.onFocus is an alias for addFocusListener
+        * @method onFocus
+        * @see addFocusListener
+        * @static
+         * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+         */
+        EU.onFocus = EU.addFocusListener;
+
+        /**
+         * YAHOO.util.Event.onBlur is an alias for addBlurListener
+        * @method onBlur
+        * @see addBlurListener
+        * @static
+         * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+         */     
+        EU.onBlur = EU.addBlurListener;
+
+/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
+
+        // Internet Explorer: use the readyState of a defered script.
+        // This isolates what appears to be a safe moment to manipulate
+        // the DOM prior to when the document's readyState suggests
+        // it is safe to do so.
+        if (EU.isIE) {
+            if (self !== self.top) {
+                document.onreadystatechange = function() {
+                    if (document.readyState == 'complete') {
+                        document.onreadystatechange = null;
+                        EU._ready();
+                    }
+                };
+            } else {
+
+                // Process onAvailable/onContentReady items when the 
+                // DOM is ready.
+                YAHOO.util.Event.onDOMReady(
+                        YAHOO.util.Event._tryPreloadAttach,
+                        YAHOO.util.Event, true);
+                
+                var n = document.createElement('p');  
+
+                EU._dri = setInterval(function() {
+                    try {
+                        // throws an error if doc is not ready
+                        n.doScroll('left');
+                        clearInterval(EU._dri);
+                        EU._dri = null;
+                        EU._ready();
+                        n = null;
+                    } catch (ex) { 
+                    }
+                }, EU.POLL_INTERVAL); 
+            }
+
+        // The document's readyState in Safari currently will
+        // change to loaded/complete before images are loaded.
+        } else if (EU.webkit && EU.webkit < 525) {
+
+            EU._dri = setInterval(function() {
+                var rs=document.readyState;
+                if ("loaded" == rs || "complete" == rs) {
+                    clearInterval(EU._dri);
+                    EU._dri = null;
+                    EU._ready();
+                }
+            }, EU.POLL_INTERVAL); 
+
+        // FireFox and Opera: These browsers provide a event for this
+        // moment.  The latest WebKit releases now support this event.
+        } else {
+
+            EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
+
+        }
+        /////////////////////////////////////////////////////////////
+
+
+        EU._simpleAdd(window, "load", EU._load);
+        EU._simpleAdd(window, "unload", EU._unload);
+        EU._tryPreloadAttach();
+    })();
+
+}
+/**
+ * EventProvider is designed to be used with YAHOO.augment to wrap 
+ * CustomEvents in an interface that allows events to be subscribed to 
+ * and fired by name.  This makes it possible for implementing code to
+ * subscribe to an event that either has not been created yet, or will
+ * not be created at all.
+ *
+ * @Class EventProvider
+ */
+YAHOO.util.EventProvider = function() { };
+
+YAHOO.util.EventProvider.prototype = {
+
+    /**
+     * Private storage of custom events
+    * @property __yui_events
+    * @type Object[]
+    * @private
+     */
+    __yui_events: null,
+
+    /**
+     * Private storage of custom event subscribers
+    * @property __yui_subscribers
+    * @type Object[]
+    * @private
+     */
+    __yui_subscribers: null,
+    
+    /**
+     * Subscribe to a CustomEvent by event type
+     *
+    * @method subscribe
+    * @param p_type     {string}   the type, or name of the event
+    * @param p_fn       {function} the function to exectute when the event fires
+    * @param p_obj      {Object}   An object to be passed along when the event 
+     *                              fires
+    * @param overrideContext {boolean}  If true, the obj passed in becomes the 
+     *                              execution scope of the listener
+     */
+    subscribe: function(p_type, p_fn, p_obj, overrideContext) {
+
+        this.__yui_events = this.__yui_events || {};
+        var ce = this.__yui_events[p_type];
+
+        if (ce) {
+            ce.subscribe(p_fn, p_obj, overrideContext);
+        } else {
+            this.__yui_subscribers = this.__yui_subscribers || {};
+            var subs = this.__yui_subscribers;
+            if (!subs[p_type]) {
+                subs[p_type] = [];
+            }
+            subs[p_type].push(
+                { fn: p_fn, obj: p_obj, overrideContext: overrideContext } );
+        }
+    },
+
+    /**
+     * Unsubscribes one or more listeners the from the specified event
+    * @method unsubscribe
+    * @param p_type {string}   The type, or name of the event.  If the type
+     *                          is not specified, it will attempt to remove
+     *                          the listener from all hosted events.
+    * @param p_fn   {Function} The subscribed function to unsubscribe, if not
+     *                          supplied, all subscribers will be removed.
+    * @param p_obj  {Object}   The custom object passed to subscribe.  This is
+     *                        optional, but if supplied will be used to
+     *                        disambiguate multiple listeners that are the same
+     *                        (e.g., you subscribe many object using a function
+     *                        that lives on the prototype)
+    * @return {boolean} true if the subscriber was found and detached.
+     */
+    unsubscribe: function(p_type, p_fn, p_obj) {
+        this.__yui_events = this.__yui_events || {};
+        var evts = this.__yui_events;
+        if (p_type) {
+            var ce = evts[p_type];
+            if (ce) {
+                return ce.unsubscribe(p_fn, p_obj);
+            }
+        } else {
+            var ret = true;
+            for (var i in evts) {
+                if (YAHOO.lang.hasOwnProperty(evts, i)) {
+                    ret = ret && evts[i].unsubscribe(p_fn, p_obj);
+                }
+            }
+            return ret;
+        }
+
+        return false;
+    },
+    
+    /**
+     * Removes all listeners from the specified event.  If the event type
+     * is not specified, all listeners from all hosted custom events will
+     * be removed.
+    * @method unsubscribeAll
+    * @param p_type {string}   The type, or name of the event
+     */
+    unsubscribeAll: function(p_type) {
+        return this.unsubscribe(p_type);
+    },
+
+    /**
+     * Creates a new custom event of the specified type.  If a custom event
+     * by that name already exists, it will not be re-created.  In either
+     * case the custom event is returned. 
+     *
+    * @method createEvent
+     *
+    * @param p_type {string} the type, or name of the event
+    * @param p_config {object} optional config params.  Valid properties are:
+     *
+     *  <ul>
+     *    <li>
+     *      scope: defines the default execution scope.  If not defined
+     *      the default scope will be this instance.
+     *    </li>
+     *    <li>
+     *      silent: if true, the custom event will not generate log messages.
+     *      This is false by default.
+     *    </li>
+     *    <li>
+     *      fireOnce: if true, the custom event will only notify subscribers
+     *      once regardless of the number of times the event is fired.  In
+     *      addition, new subscribers will be executed immediately if the
+     *      event has already fired.
+     *      This is false by default.
+     *    </li>
+     *    <li>
+     *      onSubscribeCallback: specifies a callback to execute when the
+     *      event has a new subscriber.  This will fire immediately for
+     *      each queued subscriber if any exist prior to the creation of
+     *      the event.
+     *    </li>
+     *  </ul>
+     *
+     *  @return {CustomEvent} the custom event
+     *
+     */
+    createEvent: function(p_type, p_config) {
+
+        this.__yui_events = this.__yui_events || {};
+        var opts = p_config || {},
+            events = this.__yui_events, ce;
+
+        if (events[p_type]) {
+        } else {
+
+            ce = new YAHOO.util.CustomEvent(p_type, opts.scope || this, opts.silent,
+                         YAHOO.util.CustomEvent.FLAT, opts.fireOnce);
+
+            events[p_type] = ce;
+
+            if (opts.onSubscribeCallback) {
+                ce.subscribeEvent.subscribe(opts.onSubscribeCallback);
+            }
+
+            this.__yui_subscribers = this.__yui_subscribers || {};
+            var qs = this.__yui_subscribers[p_type];
+
+            if (qs) {
+                for (var i=0; i<qs.length; ++i) {
+                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].overrideContext);
+                }
+            }
+        }
+
+        return events[p_type];
+    },
+
+
+   /**
+     * Fire a custom event by name.  The callback functions will be executed
+     * from the scope specified when the event was created, and with the 
+     * following parameters:
+     *   <ul>
+     *   <li>The first argument fire() was executed with</li>
+     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *       method</li>
+     *   </ul>
+    * @method fireEvent
+    * @param p_type    {string}  the type, or name of the event
+    * @param arguments {Object*} an arbitrary set of parameters to pass to 
+     *                            the handler.
+    * @return {boolean} the return value from CustomEvent.fire
+     *                   
+     */
+    fireEvent: function(p_type) {
+
+        this.__yui_events = this.__yui_events || {};
+        var ce = this.__yui_events[p_type];
+
+        if (!ce) {
+            return null;
+        }
+
+        var args = [];
+        for (var i=1; i<arguments.length; ++i) {
+            args.push(arguments[i]);
+        }
+        return ce.fire.apply(ce, args);
+    },
+
+    /**
+     * Returns true if the custom event of the provided type has been created
+     * with createEvent.
+    * @method hasEvent
+    * @param type {string} the type, or name of the event
+     */
+    hasEvent: function(type) {
+        if (this.__yui_events) {
+            if (this.__yui_events[type]) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+};
+
+(function() {
+
+    var Event = YAHOO.util.Event, Lang = YAHOO.lang;
+
+/**
+* KeyListener is a utility that provides an easy interface for listening for
+* keydown/keyup events fired against DOM elements.
+* @namespace YAHOO.util
+* @class KeyListener
+* @constructor
+* @param {HTMLElement} attachTo The element or element ID to which the key 
+*                               event should be attached
+* @param {String}      attachTo The element or element ID to which the key
+*                               event should be attached
+* @param {Object}      keyData  The object literal representing the key(s) 
+*                               to detect. Possible attributes are 
+*                               shift(boolean), alt(boolean), ctrl(boolean) 
+*                               and keys(either an int or an array of ints 
+*                               representing keycodes).
+* @param {Function}    handler  The CustomEvent handler to fire when the 
+*                               key event is detected
+* @param {Object}      handler  An object literal representing the handler. 
+* @param {String}      event    Optional. The event (keydown or keyup) to 
+*                               listen for. Defaults automatically to keydown.
+*
+* @knownissue the "keypress" event is completely broken in Safari 2.x and below.
+*             the workaround is use "keydown" for key listening.  However, if
+*             it is desired to prevent the default behavior of the keystroke,
+*             that can only be done on the keypress event.  This makes key
+*             handling quite ugly.
+* @knownissue keydown is also broken in Safari 2.x and below for the ESC key.
+*             There currently is no workaround other than choosing another
+*             key to listen for.
+*/
+YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
+    if (!attachTo) {
+    } else if (!keyData) {
+    } else if (!handler) {
+    } 
+    
+    if (!event) {
+        event = YAHOO.util.KeyListener.KEYDOWN;
+    }
+
+    /**
+    * The CustomEvent fired internally when a key is pressed
+   * @event keyEvent
+   * @private
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    var keyEvent = new YAHOO.util.CustomEvent("keyPressed");
+    
+    /**
+    * The CustomEvent fired when the KeyListener is enabled via the enable() 
+    * function
+   * @event enabledEvent
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
+
+    /**
+    * The CustomEvent fired when the KeyListener is disabled via the 
+    * disable() function
+   * @event disabledEvent
+   * @param {Object} keyData The object literal representing the key(s) to 
+    *                         detect. Possible attributes are shift(boolean), 
+    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    *                         int or an array of ints representing keycodes).
+    */
+    this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
+
+    if (Lang.isString(attachTo)) {
+        attachTo = document.getElementById(attachTo); // No Dom util
+    }
+
+    if (Lang.isFunction(handler)) {
+        keyEvent.subscribe(handler);
+    } else {
+        keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
+    }
+
+    /**
+    * Handles the key event when a key is pressed.
+   * @method handleKeyPress
+   * @param {DOMEvent} e   The keypress DOM event
+   * @param {Object}   obj The DOM event scope object
+   * @private
+    */
+    function handleKeyPress(e, obj) {
+        if (! keyData.shift) {  
+            keyData.shift = false; 
+        }
+        if (! keyData.alt) {    
+            keyData.alt = false;
+        }
+        if (! keyData.ctrl) {
+            keyData.ctrl = false;
+        }
+
+        // check held down modifying keys first
+        if (e.shiftKey == keyData.shift && 
+            e.altKey   == keyData.alt &&
+            e.ctrlKey  == keyData.ctrl) { // if we pass this, all modifiers match
+            
+            var dataItem, keys = keyData.keys, key;
+
+            if (YAHOO.lang.isArray(keys)) {
+                for (var i=0;i<keys.length;i++) {
+                    dataItem = keys[i];
+                    key = Event.getCharCode(e);
+
+                    if (dataItem == key) {
+                        keyEvent.fire(key, e);
+                        break;
+                    }
+                }
+            } else {
+                key = Event.getCharCode(e);
+                if (keys == key ) {
+                    keyEvent.fire(key, e);
+                }
+            }
+        }
+    }
+
+    /**
+    * Enables the KeyListener by attaching the DOM event listeners to the 
+    * target DOM element
+   * @method enable
+    */
+    this.enable = function() {
+        if (! this.enabled) {
+            Event.on(attachTo, event, handleKeyPress);
+            this.enabledEvent.fire(keyData);
+        }
+        /**
+        * Boolean indicating the enabled/disabled state of the Tooltip
+       * @property enabled
+       * @type Boolean
+        */
+        this.enabled = true;
+    };
+
+    /**
+    * Disables the KeyListener by removing the DOM event listeners from the 
+    * target DOM element
+   * @method disable
+    */
+    this.disable = function() {
+        if (this.enabled) {
+            Event.removeListener(attachTo, event, handleKeyPress);
+            this.disabledEvent.fire(keyData);
+        }
+        this.enabled = false;
+    };
+
+    /**
+    * Returns a String representation of the object.
+   * @method toString
+   * @return {String}  The string representation of the KeyListener
+    */ 
+    this.toString = function() {
+        return "KeyListener [" + keyData.keys + "] " + attachTo.tagName + 
+                (attachTo.id ? "[" + attachTo.id + "]" : "");
+    };
+
+};
+
+var KeyListener = YAHOO.util.KeyListener;
+
+/**
+ * Constant representing the DOM "keydown" event.
+ * @property YAHOO.util.KeyListener.KEYDOWN
+ * @static
+ * @final
+ * @type String
+ */
+KeyListener.KEYDOWN = "keydown";
+
+/**
+ * Constant representing the DOM "keyup" event.
+ * @property YAHOO.util.KeyListener.KEYUP
+ * @static
+ * @final
+ * @type String
+ */
+KeyListener.KEYUP = "keyup";
+
+/**
+ * keycode constants for a subset of the special keys
+ * @property KEY
+ * @static
+ * @final
+ */
+KeyListener.KEY = {
+    ALT          : 18,
+    BACK_SPACE   : 8,
+    CAPS_LOCK    : 20,
+    CONTROL      : 17,
+    DELETE       : 46,
+    DOWN         : 40,
+    END          : 35,
+    ENTER        : 13,
+    ESCAPE       : 27,
+    HOME         : 36,
+    LEFT         : 37,
+    META         : 224,
+    NUM_LOCK     : 144,
+    PAGE_DOWN    : 34,
+    PAGE_UP      : 33, 
+    PAUSE        : 19,
+    PRINTSCREEN  : 44,
+    RIGHT        : 39,
+    SCROLL_LOCK  : 145,
+    SHIFT        : 16,
+    SPACE        : 32,
+    TAB          : 9,
+    UP           : 38
+};
+
+})();
+YAHOO.register("event", YAHOO.util.Event, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/event/index.php
===================================================================
--- trunk/include/yui/event/index.php	(nonexistent)
+++ trunk/include/yui/event/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         yui
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/event/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/index.php
===================================================================
--- trunk/include/yui/index.php	(nonexistent)
+++ trunk/include/yui/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/yahoo/README
===================================================================
--- trunk/include/yui/yahoo/README	(nonexistent)
+++ trunk/include/yui/yahoo/README	(revision 2)
@@ -0,0 +1,95 @@
+YAHOO Global - Release Notes
+
+2.4.1
+
+No change
+
+2.4.0
+  * Added YAHOO.env.ua.mobile
+  * Removed the hasOwnProperty check in isArray to make it perform a bit better.
+  * YAHOO will be created/overwritten if YAHOO is undefined or the defined YAHOO is falsy
+
+2.3.1
+  * YAHOO.lang.dump casts primitives to strings
+
+2.3.0
+  * Added YAHOO.env.ua - browser detection
+  * Added YAHOO.lang.merge - object merge
+  * Added YAHOO.lang.trim - whitespace removal
+  * Added YAHOO.lang.augmentObject - mixins.  Renamed augment to augmentProto and 
+    made augment an alias to augmentProto
+  * isObject/isArray return false rather than null when testing null
+
+2.2.2
+
+  * No change
+
+2.2.1
+
+  * YAHOO.lang.isObject returns false for null
+  * YAHOO.lang.isArray no longer generates an error when the argument is null/undefined
+  * Better error messages for YAHOO.lang.augment/extend failures that are usually due 
+    to missing dependencies.
+
+2.2.0a
+
+  * Fixed a typo that prevented the proper detection of multiple YAHOO_config listeners
+
+2.2.0
+
+  * Added configuration of the library via a YAHOO_config object defined
+    prior to the reference to the library.  Currently it supports a listener
+    parameter that will execute every time a new module YUI module is loaded.
+
+  * Added YAHOO.register & YAHOO.getVersion for version stamping modules.
+  
+  * Added YAHOO.env which is the home for the information about the loaded
+    YUI modules, and will host more info later.
+    
+  * YAHOO.util.Lang was relocated to this package and is now YAHOO.lang.
+    YAHOO.extend and YAHOO.augment have moved to env (the original
+    functions still work).
+
+0.12.2
+
+  * No change
+
+0.12.1
+
+  * No change
+
+0.12.0
+
+   * Added YAHOO.augment, which copies all or part of the prototype of one
+     object to another.  
+
+   * YAHOO.namespace now can create multiple namespaces.
+
+   * Added an optional third parameter to YAHOO.extend: overrides.  It takes
+     an object literal of properties/methods to apply to the subclass
+     prototype, overriding the superclass if present.
+
+0.11.4
+
+   * Changed window.YAHOO = window.YAHOO || {} to 
+     if (typeof YAHOO == "undefined") YAHOO = {} because the previous statement
+     contributed to a memory leak in IE6 when the library was hosted in an 
+     iframe.
+
+0.11.3
+
+   * Changed var YAHOO = window.YAHOO || {} to window.YAHOO = window.YAHOO || {}.
+     This fixes an issue in IE where YAHOO would get overwritten if previously
+     defined via array notation (window["YAHOO"]).
+
+0.11.0
+
+   * Added YAHOO.extend, which provides an easy way to assign the prototype,
+     constructor, and superclass properties inheritance properties.  It also
+     prevents the constructor of the superclass from being exectuted twice.
+
+0.10.0
+
+   * Added YAHOO.log that provides a safe way to plumb logging statements in
+     code that will work if the logging component isn't available.
+
Index: trunk/include/yui/yahoo/index.php
===================================================================
--- trunk/include/yui/yahoo/index.php	(nonexistent)
+++ trunk/include/yui/yahoo/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         yui
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/include/yui/yahoo/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/include/yui/yahoo/yahoo-debug.js
===================================================================
--- trunk/include/yui/yahoo/yahoo-debug.js	(nonexistent)
+++ trunk/include/yui/yahoo/yahoo-debug.js	(revision 2)
@@ -0,0 +1,1075 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The YAHOO object is the single global object used by YUI Library.  It
+ * contains utility function for setting up namespaces, inheritance, and
+ * logging.  YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
+ * created automatically for and used by the library.
+ * @module yahoo
+ * @title  YAHOO Global
+ */
+
+/**
+ * YAHOO_config is not included as part of the library.  Instead it is an 
+ * object that can be defined by the implementer immediately before 
+ * including the YUI library.  The properties included in this object
+ * will be used to configure global properties needed as soon as the 
+ * library begins to load.
+ * @class YAHOO_config
+ * @static
+ */
+
+/**
+ * A reference to a function that will be executed every time a YAHOO module
+ * is loaded.  As parameter, this function will receive the version
+ * information for the module. See <a href="YAHOO.env.html#getVersion">
+ * YAHOO.env.getVersion</a> for the description of the version data structure.
+ * @property listener
+ * @type Function
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Set to true if the library will be dynamically loaded after window.onload.
+ * Defaults to false 
+ * @property injecting
+ * @type boolean
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Instructs the yuiloader component to dynamically load yui components and
+ * their dependencies.  See the yuiloader documentation for more information
+ * about dynamic loading
+ * @property load
+ * @static
+ * @default undefined
+ * @see yuiloader
+ */
+
+/**
+ * Forces the use of the supplied locale where applicable in the library
+ * @property locale
+ * @type string
+ * @static
+ * @default undefined
+ */
+
+if (typeof YAHOO == "undefined" || !YAHOO) {
+    /**
+     * The YAHOO global namespace object.  If YAHOO is already defined, the
+     * existing YAHOO object will not be overwritten so that defined
+     * namespaces are preserved.
+    * @class YAHOO
+    * @static
+     */
+    var YAHOO = {};
+}
+
+/**
+ * Returns the namespace specified and creates it if it doesn't exist
+ * <pre>
+ * YAHOO.namespace("property.package");
+ * YAHOO.namespace("YAHOO.property.package");
+ * </pre>
+ * Either of the above would create YAHOO.property, then
+ * YAHOO.property.package
+ *
+ * Be careful when naming packages. Reserved words may work in some browsers
+ * and not others. For instance, the following will fail in Safari:
+ * <pre>
+ * YAHOO.namespace("really.long.nested.namespace");
+ * </pre>
+ * This fails because "long" is a future reserved word in ECMAScript
+ *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces defined by YUI (
+ * <code>YAHOO.util</code>, 
+ * <code>YAHOO.widget</code>, 
+ * <code>YAHOO.lang</code>, 
+ * <code>YAHOO.tool</code>, 
+ * <code>YAHOO.example</code>, 
+ * <code>YAHOO.env</code>) -- create your own namespace (e.g., 'companyname').
+ *
+ * @method namespace
+ * @static
+ * @param  {String*} arguments 1-n namespaces to create 
+ * @return {Object}  A reference to the last namespace object created
+ */
+YAHOO.namespace = function() {
+    var a=arguments, o=null, i, j, d;
+    for (i=0; i<a.length; i=i+1) {
+        d=(""+a[i]).split(".");
+        o=YAHOO;
+
+        // YAHOO is implied, so it is ignored if it is included
+        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
+            o[d[j]]=o[d[j]] || {};
+            o=o[d[j]];
+        }
+    }
+
+    return o;
+};
+
+/**
+ * Uses YAHOO.widget.Logger to output a log message, if the widget is
+ * available.
+ *
+ * @method log
+ * @static
+ * @param  {String}  msg  The message to log.
+ * @param  {String}  cat  The log category for the message.  Default
+ *                        categories are "info", "warn", "error", time".
+ *                        Custom categories can be used as well. (opt)
+ * @param  {String}  src  The source of the the message (opt)
+ * @return {Boolean}      True if the log operation was successful.
+ */
+YAHOO.log = function(msg, cat, src) {
+    var l=YAHOO.widget.Logger;
+    if(l && l.log) {
+        return l.log(msg, cat, src);
+    } else {
+        return false;
+    }
+};
+
+/**
+ * Registers a module with the YAHOO object
+ * @method register
+ * @static
+ * @param {String}   name    the name of the module (event, slider, etc)
+ * @param {Function} mainClass a reference to class in the module.  This
+ *                             class will be tagged with the version info
+ *                             so that it will be possible to identify the
+ *                             version that is in use when multiple versions
+ *                             have loaded
+ * @param {Object}   data      metadata object for the module.  Currently it
+ *                             is expected to contain a "version" property
+ *                             and a "build" property at minimum.
+ */
+YAHOO.register = function(name, mainClass, data) {
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
+    if (!mods[name]) {
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
+    }
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
+    m.name = name;
+    m.version = v;
+    m.build = b;
+    m.versions.push(v);
+    m.builds.push(b);
+    m.mainClass = mainClass;
+
+    // fire the module load listeners
+    for (i=0;i<ls.length;i=i+1) {
+        ls[i](m);
+    }
+    // label the main class
+    if (mainClass) {
+        mainClass.VERSION = v;
+        mainClass.BUILD = b;
+    } else {
+        YAHOO.log("mainClass is undefined for module " + name, "warn");
+    }
+};
+
+/**
+ * YAHOO.env is used to keep track of what is known about the YUI library and
+ * the browsing environment
+ * @class YAHOO.env
+ * @static
+ */
+YAHOO.env = YAHOO.env || {
+
+    /**
+     * Keeps the version info for all YUI modules that have reported themselves
+    * @property modules
+    * @type Object[]
+     */
+    modules: [],
+    
+    /**
+     * List of functions that should be executed every time a YUI module
+     * reports itself.
+    * @property listeners
+    * @type Function[]
+     */
+    listeners: []
+};
+
+/**
+ * Returns the version data for the specified module:
+ *      <dl>
+ *      <dt>name:</dt>      <dd>The name of the module</dd>
+ *      <dt>version:</dt>   <dd>The version in use</dd>
+ *      <dt>build:</dt>     <dd>The build number in use</dd>
+ *      <dt>versions:</dt>  <dd>All versions that were registered</dd>
+ *      <dt>builds:</dt>    <dd>All builds that were registered.</dd>
+ *      <dt>mainClass:</dt> <dd>An object that was was stamped with the
+ *                 current version and build. If 
+ *                 mainClass.VERSION != version or mainClass.BUILD != build,
+ *                 multiple versions of pieces of the library have been
+ *                 loaded, potentially causing issues.</dd>
+ *       </dl>
+ *
+ * @method getVersion
+ * @static
+ * @param {String}  name the name of the module (event, slider, etc)
+ * @return {Object} The version info
+ */
+YAHOO.env.getVersion = function(name) {
+    return YAHOO.env.modules[name] || null;
+};
+
+/**
+ * Do not fork for a browser if it can be avoided.  Use feature detection when
+ * you can.  Use the user agent as a last resort.  YAHOO.env.ua stores a version
+ * number for the browser engine, 0 otherwise.  This value may or may not map
+ * to the version number of the browser using the engine.  The value is 
+ * presented as a float so that it can easily be used for boolean evaluation 
+ * as well as for looking for a particular range of versions.  Because of this, 
+ * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9 
+ * reports 1.8).
+ * @class YAHOO.env.ua
+ * @static
+ */
+YAHOO.env.ua = function() {
+
+        var numberfy = function(s) {
+            var c = 0;
+            return parseFloat(s.replace(/\./g, function() {
+                return (c++ == 1) ? '' : '.';
+            }));
+        },
+
+        nav = navigator,
+
+        o = {
+
+        /**
+         * Internet Explorer version number or 0.  Example: 6
+        * @property ie
+        * @type float
+         */
+        ie: 0,
+
+        /**
+         * Opera version number or 0.  Example: 9.2
+        * @property opera
+        * @type float
+         */
+        opera: 0,
+
+        /**
+         * Gecko engine revision number.  Will evaluate to 1 if Gecko 
+         * is detected but the revision could not be found. Other browsers
+         * will be 0.  Example: 1.8
+         * <pre>
+         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
+         * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8
+         * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8
+         * Firefox 3 alpha: 1.9a4   <-- Reports 1.9
+         * </pre>
+        * @property gecko
+        * @type float
+         */
+        gecko: 0,
+
+        /**
+         * AppleWebKit version.  KHTML browsers that are not WebKit browsers 
+         * will evaluate to 1, other browsers 0.  Example: 418.9.1
+         * <pre>
+         * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the 
+         *                                   latest available for Mac OSX 10.3.
+         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
+         * Safari 2.0.4:         418     <-- preventDefault fixed
+         * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
+         *                                   different versions of webkit
+         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
+         *                                   updated, but not updated
+         *                                   to the latest patch.
+         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native SVG
+         *                                   and many major issues fixed).  
+         * 3.x yahoo.com, flickr:422     <-- Safari 3.x hacks the user agent
+         *                                   string when hitting yahoo.com and 
+         *                                   flickr.com.
+         * Safari 3.0.4 (523.12):523.12  <-- First Tiger release - automatic update
+         *                                   from 2.x via the 10.4.11 OS patch
+         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
+         *                                   yahoo.com user agent hack removed.
+         *                                   
+         * </pre>
+         * http://developer.apple.com/internet/safari/uamatrix.html
+        * @property webkit
+        * @type float
+         */
+        webkit: 0,
+
+        /**
+         * The mobile property will be set to a string containing any relevant
+         * user agent information when a modern mobile browser is detected.
+         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
+         * devices with the WebKit-based browser, and Opera Mini.  
+        * @property mobile 
+        * @type string
+         */
+        mobile: null,
+
+        /**
+         * Adobe AIR version number or 0.  Only populated if webkit is detected.
+         * Example: 1.0
+        * @property air
+        * @type float
+         */
+        air: 0,
+
+        /**
+         * Google Caja version number or 0.
+        * @property caja
+        * @type float
+         */
+        caja: nav.cajaVersion,
+
+        /**
+         * Set to true if the page appears to be in SSL
+        * @property secure
+        * @type boolean
+        * @static
+         */
+        secure: false,
+
+        /**
+         * The operating system.  Currently only detecting windows or macintosh
+        * @property os
+        * @type string
+        * @static
+         */
+        os: null
+
+    },
+
+    ua = navigator && navigator.userAgent, 
+    
+    loc = window && window.location,
+
+    href = loc && loc.href,
+    
+    m;
+
+    o.secure = href && (href.toLowerCase().indexOf("https") === 0);
+
+    if (ua) {
+
+        if ((/windows|win32/i).test(ua)) {
+            o.os = 'windows';
+        } else if ((/macintosh/i).test(ua)) {
+            o.os = 'macintosh';
+        }
+    
+        // Modern KHTML browsers should qualify as Safari X-Grade
+        if ((/KHTML/).test(ua)) {
+            o.webkit=1;
+        }
+
+        // Modern WebKit browsers are at least X-Grade
+        m=ua.match(/AppleWebKit\/([^\s]*)/);
+        if (m&&m[1]) {
+            o.webkit=numberfy(m[1]);
+
+            // Mobile browser check
+            if (/ Mobile\//.test(ua)) {
+                o.mobile = "Apple"; // iPhone or iPod Touch
+            } else {
+                m=ua.match(/NokiaN[^\/]*/);
+                if (m) {
+                    o.mobile = m[0]; // Nokia N-series, ex: NokiaN95
+                }
+            }
+
+            m=ua.match(/AdobeAIR\/([^\s]*)/);
+            if (m) {
+                o.air = m[0]; // Adobe AIR 1.0 or better
+            }
+
+        }
+
+        if (!o.webkit) { // not webkit
+            // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
+            m=ua.match(/Opera[\s\/]([^\s]*)/);
+            if (m&&m[1]) {
+                o.opera=numberfy(m[1]);
+                m=ua.match(/Opera Mini[^;]*/);
+                if (m) {
+                    o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
+                }
+            } else { // not opera or webkit
+                m=ua.match(/MSIE\s([^;]*)/);
+                if (m&&m[1]) {
+                    o.ie=numberfy(m[1]);
+                } else { // not opera, webkit, or ie
+                    m=ua.match(/Gecko\/([^\s]*)/);
+                    if (m) {
+                        o.gecko=1; // Gecko detected, look for revision
+                        m=ua.match(/rv:([^\s\)]*)/);
+                        if (m&&m[1]) {
+                            o.gecko=numberfy(m[1]);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return o;
+}();
+
+/*
+ * Initializes the global by creating the default namespaces and applying
+ * any new configuration information that is detected.  This is the setup
+ * for env.
+ * @method init
+ * @static
+ * @private
+ */
+(function() {
+    YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
+    if ("undefined" !== typeof YAHOO_config) {
+        var l=YAHOO_config.listener, ls=YAHOO.env.listeners,unique=true, i;
+        if (l) {
+            // if YAHOO is loaded multiple times we need to check to see if
+            // this is a new config object.  If it is, add the new component
+            // load listener to the stack
+            for (i=0; i<ls.length; i++) {
+                if (ls[i] == l) {
+                    unique = false;
+                    break;
+                }
+            }
+
+            if (unique) {
+                ls.push(l);
+            }
+        }
+    }
+})();
+/**
+ * Provides the language utilites and extensions used by the library
+ * @class YAHOO.lang
+ */
+YAHOO.lang = YAHOO.lang || {};
+
+(function() {
+
+
+var L = YAHOO.lang,
+
+    OP = Object.prototype,
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OBJECT_TOSTRING = '[object Object]',
+    NOTHING = [],
+
+    // ADD = ["toString", "valueOf", "hasOwnProperty"],
+    ADD = ["toString", "valueOf"],
+
+    OB = {
+
+    /**
+     * Determines wheather or not the provided object is an array.
+    * @method isArray
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isArray: function(o) { 
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
+    },
+
+    /**
+     * Determines whether or not the provided object is a boolean
+    * @method isBoolean
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isBoolean: function(o) {
+        return typeof o === 'boolean';
+    },
+    
+    /**
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
+    * @method isFunction
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isFunction: function(o) {
+        return (typeof o === 'function') || OP.toString.apply(o) === FUNCTION_TOSTRING;
+    },
+        
+    /**
+     * Determines whether or not the provided object is null
+    * @method isNull
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isNull: function(o) {
+        return o === null;
+    },
+        
+    /**
+     * Determines whether or not the provided object is a legal number
+    * @method isNumber
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isNumber: function(o) {
+        return typeof o === 'number' && isFinite(o);
+    },
+      
+    /**
+     * Determines whether or not the provided object is of type object
+     * or function
+    * @method isObject
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */  
+    isObject: function(o) {
+return (o && (typeof o === 'object' || L.isFunction(o))) || false;
+    },
+        
+    /**
+     * Determines whether or not the provided object is a string
+    * @method isString
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isString: function(o) {
+        return typeof o === 'string';
+    },
+        
+    /**
+     * Determines whether or not the provided object is undefined
+    * @method isUndefined
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isUndefined: function(o) {
+        return typeof o === 'undefined';
+    },
+    
+ 
+    /**
+     * IE will not enumerate native functions in a derived object even if the
+     * function was overridden.  This is a workaround for specific functions 
+     * we care about on the Object prototype. 
+    * @property _IEEnumFix
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @static
+    * @private
+     */
+    _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
+                    r[fname]=f;
+                }
+            }
+    } : function(){},
+       
+    /**
+     * Utility to set up the prototype, constructor and superclass properties to
+     * support an inheritance strategy that can chain constructors and methods.
+     * Static members will not be inherited.
+     *
+    * @method extend
+    * @static
+    * @param {Function} subc   the object to modify
+    * @param {Function} superc the object to inherit
+    * @param {Object} overrides  additional properties/methods to add to the
+     *                              subclass prototype.  These will override the
+     *                              matching items obtained from the superclass 
+     *                              if present.
+     */
+    extend: function(subc, superc, overrides) {
+        if (!superc||!subc) {
+            throw new Error("extend failed, please check that " +
+                            "all dependencies are included.");
+        }
+        var F = function() {}, i;
+        F.prototype=superc.prototype;
+        subc.prototype=new F();
+        subc.prototype.constructor=subc;
+        subc.superclass=superc.prototype;
+        if (superc.prototype.constructor == OP.constructor) {
+            superc.prototype.constructor=superc;
+        }
+    
+        if (overrides) {
+            for (i in overrides) {
+                if (L.hasOwnProperty(overrides, i)) {
+                    subc.prototype[i]=overrides[i];
+                }
+            }
+
+            L._IEEnumFix(subc.prototype, overrides);
+        }
+    },
+   
+    /**
+     * Applies all properties in the supplier to the receiver if the
+     * receiver does not have these properties yet.  Optionally, one or 
+     * more methods/properties can be specified (as additional 
+     * parameters).  This option will overwrite the property if receiver 
+     * has it already.  If true is passed as the third parameter, all 
+     * properties will be applied and _will_ overwrite properties in 
+     * the receiver.
+     *
+    * @method augmentObject
+    * @static
+    * @since 2.3.0
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @param {String*|boolean}  arguments zero or more properties methods 
+     *        to augment the receiver with.  If none specified, everything
+     *        in the supplier will be used unless it would
+     *        overwrite an existing property in the receiver. If true
+     *        is specified as the third parameter, all properties will
+     *        be applied and will overwrite an existing property in
+     *        the receiver
+     */
+    augmentObject: function(r, s) {
+        if (!s||!r) {
+            throw new Error("Absorb failed, verify dependencies.");
+        }
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
+            for (i=2; i<a.length; i=i+1) {
+                r[a[i]] = s[a[i]];
+            }
+        } else { // take everything, overwriting only if the third parameter is true
+            for (p in s) { 
+                if (overrideList || !(p in r)) {
+                    r[p] = s[p];
+                }
+            }
+            
+            L._IEEnumFix(r, s);
+        }
+    },
+ 
+    /**
+     * Same as YAHOO.lang.augmentObject, except it only applies prototype properties
+    * @see YAHOO.lang.augmentObject
+    * @method augmentProto
+    * @static
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @param {String*|boolean}  arguments zero or more properties methods 
+     *        to augment the receiver with.  If none specified, everything 
+     *        in the supplier will be used unless it would overwrite an existing 
+     *        property in the receiver.  if true is specified as the third 
+     *        parameter, all properties will be applied and will overwrite an 
+     *        existing property in the receiver
+     */
+    augmentProto: function(r, s) {
+        if (!s||!r) {
+            throw new Error("Augment failed, verify dependencies.");
+        }
+        //var a=[].concat(arguments);
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
+            a.push(arguments[i]);
+        }
+        L.augmentObject.apply(this, a);
+    },
+
+      
+    /**
+     * Returns a simple string representation of the object or array.
+     * Other types of objects will be returned unprocessed.  Arrays
+     * are expected to be indexed.  Use object notation for
+     * associative arrays.
+    * @method dump
+    * @since 2.3.0
+    * @param o {Object} The object to dump
+    * @param d {int} How deep to recurse child objects, default 3
+    * @return {String} the dump result
+     */
+    dump: function(o, d) {
+        var i,len,s=[],OBJ="{...}",FUN="f(){...}",
+            COMMA=', ', ARROW=' => ';
+
+        // Cast non-objects to string
+        // Skip dates because the std toString is what we want
+        // Skip HTMLElement-like objects because trying to dump 
+        // an element will cause an unhandled exception in FF 2.x
+        if (!L.isObject(o)) {
+            return o + "";
+        } else if (o instanceof Date || ("nodeType" in o && "tagName" in o)) {
+            return o;
+        } else if  (L.isFunction(o)) {
+            return FUN;
+        }
+
+        // dig into child objects the depth specifed. Default 3
+        d = (L.isNumber(d)) ? d : 3;
+
+        // arrays [1, 2, 3]
+        if (L.isArray(o)) {
+            s.push("[");
+            for (i=0,len=o.length;i<len;i=i+1) {
+                if (L.isObject(o[i])) {
+                    s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+                } else {
+                    s.push(o[i]);
+                }
+                s.push(COMMA);
+            }
+            if (s.length > 1) {
+                s.pop();
+            }
+            s.push("]");
+        // objects {k1 => v1, k2 => v2}
+        } else {
+            s.push("{");
+            for (i in o) {
+                if (L.hasOwnProperty(o, i)) {
+                    s.push(i + ARROW);
+                    if (L.isObject(o[i])) {
+                        s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+                    } else {
+                        s.push(o[i]);
+                    }
+                    s.push(COMMA);
+                }
+            }
+            if (s.length > 1) {
+                s.pop();
+            }
+            s.push("}");
+        }
+
+        return s.join("");
+    },
+
+    /**
+     * Does variable substitution on a string. It scans through the string 
+     * looking for expressions enclosed in { } braces. If an expression 
+     * is found, it is used a key on the object.  If there is a space in
+     * the key, the first word is used for the key and the rest is provided
+     * to an optional function to be used to programatically determine the
+     * value (the extra information might be used for this decision). If 
+     * the value for the key in the object, or what is returned from the
+     * function has a string value, number value, or object value, it is 
+     * substituted for the bracket expression and it repeats.  If this
+     * value is an object, it uses the Object's toString() if this has
+     * been overridden, otherwise it does a shallow dump of the key/value
+     * pairs.
+    * @method substitute
+    * @since 2.3.0
+    * @param s {String} The string that will be modified.
+    * @param o {Object} An object containing the replacement values
+    * @param f {Function} An optional function that can be used to
+     *                     process each match.  It receives the key,
+     *                     value, and any extra metadata included with
+     *                     the key inside of the braces.
+    * @return {String} the substituted string
+     */
+    substitute: function (s, o, f) {
+        var i, j, k, key, v, meta, saved=[], token, 
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump, objstr;
+
+
+        for (;;) {
+            i = s.lastIndexOf(LBRACE);
+            if (i < 0) {
+                break;
+            }
+            j = s.indexOf(RBRACE, i);
+            if (i + 1 >= j) {
+                break;
+            }
+
+            //Extract key and meta info 
+            token = s.substring(i + 1, j);
+            key = token;
+            meta = null;
+            k = key.indexOf(SPACE);
+            if (k > -1) {
+                meta = key.substring(k + 1);
+                key = key.substring(0, k);
+            }
+
+            // lookup the value
+            v = o[key];
+
+            // if a substitution function was provided, execute it
+            if (f) {
+                v = f(key, v, meta);
+            }
+
+            if (L.isObject(v)) {
+                if (L.isArray(v)) {
+                    v = L.dump(v, parseInt(meta, 10));
+                } else {
+                    meta = meta || "";
+
+                    // look for the keyword 'dump', if found force obj dump
+                    dump = meta.indexOf(DUMP);
+                    if (dump > -1) {
+                        meta = meta.substring(4);
+                    }
+
+                    objstr = v.toString();
+
+                    // use the toString if it is not the Object toString 
+                    // and the 'dump' meta info was not found
+                    if (objstr === OBJECT_TOSTRING || dump > -1) {
+                        v = L.dump(v, parseInt(meta, 10));
+                    } else {
+                        v = objstr;
+                    }
+                }
+            } else if (!L.isString(v) && !L.isNumber(v)) {
+                // This {block} has no replace string. Save it for later.
+                v = "~-" + saved.length + "-~";
+                saved[saved.length] = token;
+
+                // break;
+            }
+
+            s = s.substring(0, i) + v + s.substring(j + 1);
+
+
+        }
+
+        // restore saved {block}s
+        for (i=saved.length-1; i>=0; i=i-1) {
+            s = s.replace(new RegExp("~-" + i + "-~"), "{"  + saved[i] + "}", "g");
+        }
+
+        return s;
+    },
+
+
+    /**
+     * Returns a string without any leading or trailing whitespace.  If 
+     * the input is not a string, the input will be returned untouched.
+    * @method trim
+    * @since 2.3.0
+    * @param s {string} the string to trim
+    * @return {string} the trimmed string
+     */
+    trim: function(s){
+        try {
+            return s.replace(/^\s+|\s+$/g, "");
+        } catch(e) {
+            return s;
+        }
+    },
+
+    /**
+     * Returns a new object containing all of the properties of
+     * all the supplied objects.  The properties from later objects
+     * will overwrite those in earlier objects.
+    * @method merge
+    * @since 2.3.0
+    * @param arguments {Object*} the objects to merge
+    * @return the new merged object
+     */
+    merge: function() {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
+            L.augmentObject(o, a[i], true);
+        }
+        return o;
+    },
+
+    /**
+     * Executes the supplied function in the context of the supplied 
+     * object 'when' milliseconds later.  Executes the function a 
+     * single time unless periodic is set to true.
+    * @method later
+    * @since 2.4.0
+    * @param when {int} the number of milliseconds to wait until the fn 
+     * is executed
+    * @param o the context object
+    * @param fn {Function|String} the function to execute or the name of 
+     * the method in the 'o' object to execute
+    * @param data [Array] data that is provided to the function.  This accepts
+     * either a single item or an array.  If an array is provided, the
+     * function is executed with one parameter for each array item.  If
+     * you need to pass a single array parameter, it needs to be wrapped in
+     * an array [myarray]
+    * @param periodic {boolean} if true, executes continuously at supplied 
+     * interval until canceled
+    * @return a timer object. Call the cancel() method on this object to 
+     * stop the timer.
+     */
+    later: function(when, o, fn, data, periodic) {
+        when = when || 0; 
+        o = o || {};
+        var m=fn, d=data, f, r;
+
+        if (L.isString(fn)) {
+            m = o[fn];
+        }
+
+        if (!m) {
+            throw new TypeError("method undefined");
+        }
+
+        if (d && !L.isArray(d)) {
+            d = [data];
+        }
+
+        f = function() {
+            m.apply(o, d || NOTHING);
+        };
+
+        r = (periodic) ? setInterval(f, when) : setTimeout(f, when);
+
+        return {
+            interval: periodic,
+            cancel: function() {
+                if (this.interval) {
+                    clearInterval(r);
+                } else {
+                    clearTimeout(r);
+                }
+            }
+        };
+    },
+    
+    /**
+     * A convenience method for detecting a legitimate non-null value.
+     * Returns false for null/undefined/NaN, true for other values, 
+     * including 0/false/''
+    * @method isValue
+    * @since 2.3.0
+    * @param o {any} the item to test
+    * @return {boolean} true if it is not null/undefined/NaN || false
+     */
+    isValue: function(o) {
+        // return (o || o === false || o === 0 || o === ''); // Infinity fails
+return (L.isObject(o) || L.isString(o) || L.isNumber(o) || L.isBoolean(o));
+    }
+
+};
+
+/**
+ * Determines whether or not the property was added
+ * to the object instance.  Returns false if the property is not present
+ * in the object, or was inherited from the prototype.
+ * This abstraction is provided to enable hasOwnProperty for Safari 1.3.x.
+ * There is a discrepancy between YAHOO.lang.hasOwnProperty and
+ * Object.prototype.hasOwnProperty when the property is a primitive added to
+ * both the instance AND prototype with the same value:
+ * <pre>
+ * var A = function() {};
+ * A.prototype.foo = 'foo';
+ * var a = new A();
+ * a.foo = 'foo';
+ * alert(a.hasOwnProperty('foo')); // true
+ * alert(YAHOO.lang.hasOwnProperty(a, 'foo')); // false when using fallback
+ * </pre>
+ * @method hasOwnProperty
+ * @param {any} o The object being testing
+ * @param prop {string} the name of the property to test
+ * @return {boolean} the result
+ */
+L.hasOwnProperty = (OP.hasOwnProperty) ?
+    function(o, prop) {
+        return o && o.hasOwnProperty(prop);
+    } : function(o, prop) {
+        return !L.isUndefined(o[prop]) && 
+                o.constructor.prototype[prop] !== o[prop];
+    };
+
+// new lang wins
+OB.augmentObject(L, OB, true);
+
+/*
+ * An alias for <a href="YAHOO.lang.html">YAHOO.lang</a>
+ * @class YAHOO.util.Lang
+ */
+YAHOO.util.Lang = L;
+ 
+/**
+ * Same as YAHOO.lang.augmentObject, except it only applies prototype 
+ * properties.  This is an alias for augmentProto.
+ * @see YAHOO.lang.augmentObject
+ * @method augment
+ * @static
+ * @param {Function} r  the object to receive the augmentation
+ * @param {Function} s  the object that supplies the properties to augment
+ * @param {String*|boolean}  arguments zero or more properties methods to 
+ *        augment the receiver with.  If none specified, everything
+ *        in the supplier will be used unless it would
+ *        overwrite an existing property in the receiver.  if true
+ *        is specified as the third parameter, all properties will
+ *        be applied and will overwrite an existing property in
+ *        the receiver
+ */
+L.augment = L.augmentProto;
+
+/**
+ * An alias for <a href="YAHOO.lang.html#augment">YAHOO.lang.augment</a>
+ * @for YAHOO
+ * @method augment
+ * @static
+ * @param {Function} r  the object to receive the augmentation
+ * @param {Function} s  the object that supplies the properties to augment
+ * @param {String*}  arguments zero or more properties methods to 
+ *        augment the receiver with.  If none specified, everything
+ *        in the supplier will be used unless it would
+ *        overwrite an existing property in the receiver
+ */
+YAHOO.augment = L.augmentProto;
+       
+/**
+ * An alias for <a href="YAHOO.lang.html#extend">YAHOO.lang.extend</a>
+ * @method extend
+ * @static
+ * @param {Function} subc   the object to modify
+ * @param {Function} superc the object to inherit
+ * @param {Object} overrides  additional properties/methods to add to the
+ *        subclass prototype.  These will override the
+ *        matching items obtained from the superclass if present.
+ */
+YAHOO.extend = L.extend;
+
+})();
+YAHOO.register("yahoo", YAHOO, {version: "2.8.0r4", build: "2449"});
Index: trunk/include/yui/yahoo/yahoo-min.js
===================================================================
--- trunk/include/yui/yahoo/yahoo-min.js	(nonexistent)
+++ trunk/include/yui/yahoo/yahoo-min.js	(revision 2)
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var D=function(H){var I=0;return parseFloat(H.replace(/\./g,function(){return(I++==1)?"":".";}));},G=navigator,F={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:G.cajaVersion,secure:false,os:null},C=navigator&&navigator.userAgent,E=window&&window.location,B=E&&E.href,A;F.secure=B&&(B.toLowerCase().indexOf("https")===0);if(C){if((/windows|win32/i).test(C)){F.os="windows";}else{if((/macintosh/i).test(C)){F.os="macintosh";}}if((/KHTML/).test(C)){F.webkit=1;}A=C.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){F.webkit=D(A[1]);if(/ Mobile\//.test(C)){F.mobile="Apple";}else{A=C.match(/NokiaN[^\/]*/);if(A){F.mobile=A[0];}}A=C.match(/AdobeAIR\/([^\s]*)/);if(A){F.air=A[0];}}if(!F.webkit){A=C.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){F.opera=D(A[1]);A=C.match(/Opera Mini[^;]*/);if(A){F.mobile=A[0];}}else{A=C.match(/MSIE\s([^;]*)/);if(A&&A[1]){F.ie=D(A[1]);}else{A=C.match(/Gecko\/([^\s]*)/);if(A){F.gecko=1;A=C.match(/rv:([^\s\)]*)/);if(A&&A[1]){F.gecko=D(A[1]);}}}}}}return F;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C++){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,A=Object.prototype,H="[object Array]",C="[object Function]",G="[object Object]",E=[],F=["toString","valueOf"],D={isArray:function(I){return A.toString.apply(I)===H;},isBoolean:function(I){return typeof I==="boolean";},isFunction:function(I){return(typeof I==="function")||A.toString.apply(I)===C;},isNull:function(I){return I===null;},isNumber:function(I){return typeof I==="number"&&isFinite(I);},isObject:function(I){return(I&&(typeof I==="object"||B.isFunction(I)))||false;},isString:function(I){return typeof I==="string";},isUndefined:function(I){return typeof I==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(K,J){var I,M,L;for(I=0;I<F.length;I=I+1){M=F[I];L=J[M];if(B.isFunction(L)&&L!=A[M]){K[M]=L;}}}:function(){},extend:function(L,M,K){if(!M||!L){throw new Error("extend failed, please check that "+"all dependencies are included.");}var J=function(){},I;J.prototype=M.prototype;L.prototype=new J();L.prototype.constructor=L;L.superclass=M.prototype;if(M.prototype.constructor==A.constructor){M.prototype.constructor=M;}if(K){for(I in K){if(B.hasOwnProperty(K,I)){L.prototype[I]=K[I];}}B._IEEnumFix(L.prototype,K);}},augmentObject:function(M,L){if(!L||!M){throw new Error("Absorb failed, verify dependencies.");}var I=arguments,K,N,J=I[2];if(J&&J!==true){for(K=2;K<I.length;K=K+1){M[I[K]]=L[I[K]];}}else{for(N in L){if(J||!(N in M)){M[N]=L[N];}}B._IEEnumFix(M,L);}},augmentProto:function(L,K){if(!K||!L){throw new Error("Augment failed, verify dependencies.");}var I=[L.prototype,K.prototype],J;for(J=2;J<arguments.length;J=J+1){I.push(arguments[J]);}B.augmentObject.apply(this,I);},dump:function(I,N){var K,M,P=[],Q="{...}",J="f(){...}",O=", ",L=" => ";if(!B.isObject(I)){return I+"";}else{if(I instanceof Date||("nodeType" in I&&"tagName" in I)){return I;}else{if(B.isFunction(I)){return J;}}}N=(B.isNumber(N))?N:3;if(B.isArray(I)){P.push("[");for(K=0,M=I.length;K<M;K=K+1){if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}if(P.length>1){P.pop();}P.push("]");}else{P.push("{");for(K in I){if(B.hasOwnProperty(I,K)){P.push(K+L);if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}}if(P.length>1){P.pop();}P.push("}");}return P.join("");},substitute:function(Y,J,R){var N,M,L,U,V,X,T=[],K,O="dump",S=" ",I="{",W="}",Q,P;for(;;){N=Y.lastIndexOf(I);if(N<0){break;}M=Y.indexOf(W,N);if(N+1>=M){break;}K=Y.substring(N+1,M);U=K;X=null;L=U.indexOf(S);if(L>-1){X=U.substring(L+1);U=U.substring(0,L);}V=J[U];if(R){V=R(U,V,X);}if(B.isObject(V)){if(B.isArray(V)){V=B.dump(V,parseInt(X,10));}else{X=X||"";Q=X.indexOf(O);if(Q>-1){X=X.substring(4);}P=V.toString();if(P===G||Q>-1){V=B.dump(V,parseInt(X,10));}else{V=P;}}}else{if(!B.isString(V)&&!B.isNumber(V)){V="~-"+T.length+"-~";T[T.length]=K;}}Y=Y.substring(0,N)+V+Y.substring(M+1);}for(N=T.length-1;N>=0;N=N-1){Y=Y.replace(new RegExp("~-"+N+"-~"),"{"+T[N]+"}","g");}return Y;},trim:function(I){try{return I.replace(/^\s+|\s+$/g,"");}catch(J){return I;}},merge:function(){var L={},J=arguments,I=J.length,K;for(K=0;K<I;K=K+1){B.augmentObject(L,J[K],true);}return L;},later:function(P,J,Q,L,M){P=P||0;J=J||{};var K=Q,O=L,N,I;if(B.isString(Q)){K=J[Q];}if(!K){throw new TypeError("method undefined");}if(O&&!B.isArray(O)){O=[L];}N=function(){K.apply(J,O||E);};I=(M)?setInterval(N,P):setTimeout(N,P);return{interval:M,cancel:function(){if(this.interval){clearInterval(I);}else{clearTimeout(I);}}};},isValue:function(I){return(B.isObject(I)||B.isString(I)||B.isNumber(I)||B.isBoolean(I));}};B.hasOwnProperty=(A.hasOwnProperty)?function(I,J){return I&&I.hasOwnProperty(J);}:function(I,J){return !B.isUndefined(I[J])&&I.constructor.prototype[J]!==I[J];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.8.0r4",build:"2449"});
Index: trunk/include/yui/yahoo/yahoo.js
===================================================================
--- trunk/include/yui/yahoo/yahoo.js	(nonexistent)
+++ trunk/include/yui/yahoo/yahoo.js	(revision 2)
@@ -0,0 +1,1075 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.8.0r4
+*/
+/**
+ * The YAHOO object is the single global object used by YUI Library.  It
+ * contains utility function for setting up namespaces, inheritance, and
+ * logging.  YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
+ * created automatically for and used by the library.
+ * @module yahoo
+ * @title  YAHOO Global
+ */
+
+/**
+ * YAHOO_config is not included as part of the library.  Instead it is an 
+ * object that can be defined by the implementer immediately before 
+ * including the YUI library.  The properties included in this object
+ * will be used to configure global properties needed as soon as the 
+ * library begins to load.
+ * @class YAHOO_config
+ * @static
+ */
+
+/**
+ * A reference to a function that will be executed every time a YAHOO module
+ * is loaded.  As parameter, this function will receive the version
+ * information for the module. See <a href="YAHOO.env.html#getVersion">
+ * YAHOO.env.getVersion</a> for the description of the version data structure.
+ * @property listener
+ * @type Function
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Set to true if the library will be dynamically loaded after window.onload.
+ * Defaults to false 
+ * @property injecting
+ * @type boolean
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Instructs the yuiloader component to dynamically load yui components and
+ * their dependencies.  See the yuiloader documentation for more information
+ * about dynamic loading
+ * @property load
+ * @static
+ * @default undefined
+ * @see yuiloader
+ */
+
+/**
+ * Forces the use of the supplied locale where applicable in the library
+ * @property locale
+ * @type string
+ * @static
+ * @default undefined
+ */
+
+if (typeof YAHOO == "undefined" || !YAHOO) {
+    /**
+     * The YAHOO global namespace object.  If YAHOO is already defined, the
+     * existing YAHOO object will not be overwritten so that defined
+     * namespaces are preserved.
+    * @class YAHOO
+    * @static
+     */
+    var YAHOO = {};
+}
+
+/**
+ * Returns the namespace specified and creates it if it doesn't exist
+ * <pre>
+ * YAHOO.namespace("property.package");
+ * YAHOO.namespace("YAHOO.property.package");
+ * </pre>
+ * Either of the above would create YAHOO.property, then
+ * YAHOO.property.package
+ *
+ * Be careful when naming packages. Reserved words may work in some browsers
+ * and not others. For instance, the following will fail in Safari:
+ * <pre>
+ * YAHOO.namespace("really.long.nested.namespace");
+ * </pre>
+ * This fails because "long" is a future reserved word in ECMAScript
+ *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces defined by YUI (
+ * <code>YAHOO.util</code>, 
+ * <code>YAHOO.widget</code>, 
+ * <code>YAHOO.lang</code>, 
+ * <code>YAHOO.tool</code>, 
+ * <code>YAHOO.example</code>, 
+ * <code>YAHOO.env</code>) -- create your own namespace (e.g., 'companyname').
+ *
+ * @method namespace
+ * @static
+ * @param  {String*} arguments 1-n namespaces to create 
+ * @return {Object}  A reference to the last namespace object created
+ */
+YAHOO.namespace = function() {
+    var a=arguments, o=null, i, j, d;
+    for (i=0; i<a.length; i=i+1) {
+        d=(""+a[i]).split(".");
+        o=YAHOO;
+
+        // YAHOO is implied, so it is ignored if it is included
+        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
+            o[d[j]]=o[d[j]] || {};
+            o=o[d[j]];
+        }
+    }
+
+    return o;
+};
+
+/**
+ * Uses YAHOO.widget.Logger to output a log message, if the widget is
+ * available.
+ *
+ * @method log
+ * @static
+ * @param  {String}  msg  The message to log.
+ * @param  {String}  cat  The log category for the message.  Default
+ *                        categories are "info", "warn", "error", time".
+ *                        Custom categories can be used as well. (opt)
+ * @param  {String}  src  The source of the the message (opt)
+ * @return {Boolean}      True if the log operation was successful.
+ */
+YAHOO.log = function(msg, cat, src) {
+    var l=YAHOO.widget.Logger;
+    if(l && l.log) {
+        return l.log(msg, cat, src);
+    } else {
+        return false;
+    }
+};
+
+/**
+ * Registers a module with the YAHOO object
+ * @method register
+ * @static
+ * @param {String}   name    the name of the module (event, slider, etc)
+ * @param {Function} mainClass a reference to class in the module.  This
+ *                             class will be tagged with the version info
+ *                             so that it will be possible to identify the
+ *                             version that is in use when multiple versions
+ *                             have loaded
+ * @param {Object}   data      metadata object for the module.  Currently it
+ *                             is expected to contain a "version" property
+ *                             and a "build" property at minimum.
+ */
+YAHOO.register = function(name, mainClass, data) {
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
+    if (!mods[name]) {
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
+    }
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
+    m.name = name;
+    m.version = v;
+    m.build = b;
+    m.versions.push(v);
+    m.builds.push(b);
+    m.mainClass = mainClass;
+
+    // fire the module load listeners
+    for (i=0;i<ls.length;i=i+1) {
+        ls[i](m);
+    }
+    // label the main class
+    if (mainClass) {
+        mainClass.VERSION = v;
+        mainClass.BUILD = b;
+    } else {
+        YAHOO.log("mainClass is undefined for module " + name, "warn");
+    }
+};
+
+/**
+ * YAHOO.env is used to keep track of what is known about the YUI library and
+ * the browsing environment
+ * @class YAHOO.env
+ * @static
+ */
+YAHOO.env = YAHOO.env || {
+
+    /**
+     * Keeps the version info for all YUI modules that have reported themselves
+    * @property modules
+    * @type Object[]
+     */
+    modules: [],
+    
+    /**
+     * List of functions that should be executed every time a YUI module
+     * reports itself.
+    * @property listeners
+    * @type Function[]
+     */
+    listeners: []
+};
+
+/**
+ * Returns the version data for the specified module:
+ *      <dl>
+ *      <dt>name:</dt>      <dd>The name of the module</dd>
+ *      <dt>version:</dt>   <dd>The version in use</dd>
+ *      <dt>build:</dt>     <dd>The build number in use</dd>
+ *      <dt>versions:</dt>  <dd>All versions that were registered</dd>
+ *      <dt>builds:</dt>    <dd>All builds that were registered.</dd>
+ *      <dt>mainClass:</dt> <dd>An object that was was stamped with the
+ *                 current version and build. If 
+ *                 mainClass.VERSION != version or mainClass.BUILD != build,
+ *                 multiple versions of pieces of the library have been
+ *                 loaded, potentially causing issues.</dd>
+ *       </dl>
+ *
+ * @method getVersion
+ * @static
+ * @param {String}  name the name of the module (event, slider, etc)
+ * @return {Object} The version info
+ */
+YAHOO.env.getVersion = function(name) {
+    return YAHOO.env.modules[name] || null;
+};
+
+/**
+ * Do not fork for a browser if it can be avoided.  Use feature detection when
+ * you can.  Use the user agent as a last resort.  YAHOO.env.ua stores a version
+ * number for the browser engine, 0 otherwise.  This value may or may not map
+ * to the version number of the browser using the engine.  The value is 
+ * presented as a float so that it can easily be used for boolean evaluation 
+ * as well as for looking for a particular range of versions.  Because of this, 
+ * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9 
+ * reports 1.8).
+ * @class YAHOO.env.ua
+ * @static
+ */
+YAHOO.env.ua = function() {
+
+        var numberfy = function(s) {
+            var c = 0;
+            return parseFloat(s.replace(/\./g, function() {
+                return (c++ == 1) ? '' : '.';
+            }));
+        },
+
+        nav = navigator,
+
+        o = {
+
+        /**
+         * Internet Explorer version number or 0.  Example: 6
+        * @property ie
+        * @type float
+         */
+        ie: 0,
+
+        /**
+         * Opera version number or 0.  Example: 9.2
+        * @property opera
+        * @type float
+         */
+        opera: 0,
+
+        /**
+         * Gecko engine revision number.  Will evaluate to 1 if Gecko 
+         * is detected but the revision could not be found. Other browsers
+         * will be 0.  Example: 1.8
+         * <pre>
+         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
+         * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8
+         * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8
+         * Firefox 3 alpha: 1.9a4   <-- Reports 1.9
+         * </pre>
+        * @property gecko
+        * @type float
+         */
+        gecko: 0,
+
+        /**
+         * AppleWebKit version.  KHTML browsers that are not WebKit browsers 
+         * will evaluate to 1, other browsers 0.  Example: 418.9.1
+         * <pre>
+         * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the 
+         *                                   latest available for Mac OSX 10.3.
+         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
+         * Safari 2.0.4:         418     <-- preventDefault fixed
+         * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
+         *                                   different versions of webkit
+         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
+         *                                   updated, but not updated
+         *                                   to the latest patch.
+         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native SVG
+         *                                   and many major issues fixed).  
+         * 3.x yahoo.com, flickr:422     <-- Safari 3.x hacks the user agent
+         *                                   string when hitting yahoo.com and 
+         *                                   flickr.com.
+         * Safari 3.0.4 (523.12):523.12  <-- First Tiger release - automatic update
+         *                                   from 2.x via the 10.4.11 OS patch
+         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
+         *                                   yahoo.com user agent hack removed.
+         *                                   
+         * </pre>
+         * http://developer.apple.com/internet/safari/uamatrix.html
+        * @property webkit
+        * @type float
+         */
+        webkit: 0,
+
+        /**
+         * The mobile property will be set to a string containing any relevant
+         * user agent information when a modern mobile browser is detected.
+         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
+         * devices with the WebKit-based browser, and Opera Mini.  
+        * @property mobile 
+        * @type string
+         */
+        mobile: null,
+
+        /**
+         * Adobe AIR version number or 0.  Only populated if webkit is detected.
+         * Example: 1.0
+        * @property air
+        * @type float
+         */
+        air: 0,
+
+        /**
+         * Google Caja version number or 0.
+        * @property caja
+        * @type float
+         */
+        caja: nav.cajaVersion,
+
+        /**
+         * Set to true if the page appears to be in SSL
+        * @property secure
+        * @type boolean
+        * @static
+         */
+        secure: false,
+
+        /**
+         * The operating system.  Currently only detecting windows or macintosh
+        * @property os
+        * @type string
+        * @static
+         */
+        os: null
+
+    },
+
+    ua = navigator && navigator.userAgent, 
+    
+    loc = window && window.location,
+
+    href = loc && loc.href,
+    
+    m;
+
+    o.secure = href && (href.toLowerCase().indexOf("https") === 0);
+
+    if (ua) {
+
+        if ((/windows|win32/i).test(ua)) {
+            o.os = 'windows';
+        } else if ((/macintosh/i).test(ua)) {
+            o.os = 'macintosh';
+        }
+    
+        // Modern KHTML browsers should qualify as Safari X-Grade
+        if ((/KHTML/).test(ua)) {
+            o.webkit=1;
+        }
+
+        // Modern WebKit browsers are at least X-Grade
+        m=ua.match(/AppleWebKit\/([^\s]*)/);
+        if (m&&m[1]) {
+            o.webkit=numberfy(m[1]);
+
+            // Mobile browser check
+            if (/ Mobile\//.test(ua)) {
+                o.mobile = "Apple"; // iPhone or iPod Touch
+            } else {
+                m=ua.match(/NokiaN[^\/]*/);
+                if (m) {
+                    o.mobile = m[0]; // Nokia N-series, ex: NokiaN95
+                }
+            }
+
+            m=ua.match(/AdobeAIR\/([^\s]*)/);
+            if (m) {
+                o.air = m[0]; // Adobe AIR 1.0 or better
+            }
+
+        }
+
+        if (!o.webkit) { // not webkit
+            // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
+            m=ua.match(/Opera[\s\/]([^\s]*)/);
+            if (m&&m[1]) {
+                o.opera=numberfy(m[1]);
+                m=ua.match(/Opera Mini[^;]*/);
+                if (m) {
+                    o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
+                }
+            } else { // not opera or webkit
+                m=ua.match(/MSIE\s([^;]*)/);
+                if (m&&m[1]) {
+                    o.ie=numberfy(m[1]);
+                } else { // not opera, webkit, or ie
+                    m=ua.match(/Gecko\/([^\s]*)/);
+                    if (m) {
+                        o.gecko=1; // Gecko detected, look for revision
+                        m=ua.match(/rv:([^\s\)]*)/);
+                        if (m&&m[1]) {
+                            o.gecko=numberfy(m[1]);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return o;
+}();
+
+/*
+ * Initializes the global by creating the default namespaces and applying
+ * any new configuration information that is detected.  This is the setup
+ * for env.
+ * @method init
+ * @static
+ * @private
+ */
+(function() {
+    YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
+    if ("undefined" !== typeof YAHOO_config) {
+        var l=YAHOO_config.listener, ls=YAHOO.env.listeners,unique=true, i;
+        if (l) {
+            // if YAHOO is loaded multiple times we need to check to see if
+            // this is a new config object.  If it is, add the new component
+            // load listener to the stack
+            for (i=0; i<ls.length; i++) {
+                if (ls[i] == l) {
+                    unique = false;
+                    break;
+                }
+            }
+
+            if (unique) {
+                ls.push(l);
+            }
+        }
+    }
+})();
+/**
+ * Provides the language utilites and extensions used by the library
+ * @class YAHOO.lang
+ */
+YAHOO.lang = YAHOO.lang || {};
+
+(function() {
+
+
+var L = YAHOO.lang,
+
+    OP = Object.prototype,
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OBJECT_TOSTRING = '[object Object]',
+    NOTHING = [],
+
+    // ADD = ["toString", "valueOf", "hasOwnProperty"],
+    ADD = ["toString", "valueOf"],
+
+    OB = {
+
+    /**
+     * Determines wheather or not the provided object is an array.
+    * @method isArray
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isArray: function(o) { 
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
+    },
+
+    /**
+     * Determines whether or not the provided object is a boolean
+    * @method isBoolean
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isBoolean: function(o) {
+        return typeof o === 'boolean';
+    },
+    
+    /**
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
+    * @method isFunction
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isFunction: function(o) {
+        return (typeof o === 'function') || OP.toString.apply(o) === FUNCTION_TOSTRING;
+    },
+        
+    /**
+     * Determines whether or not the provided object is null
+    * @method isNull
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isNull: function(o) {
+        return o === null;
+    },
+        
+    /**
+     * Determines whether or not the provided object is a legal number
+    * @method isNumber
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isNumber: function(o) {
+        return typeof o === 'number' && isFinite(o);
+    },
+      
+    /**
+     * Determines whether or not the provided object is of type object
+     * or function
+    * @method isObject
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */  
+    isObject: function(o) {
+return (o && (typeof o === 'object' || L.isFunction(o))) || false;
+    },
+        
+    /**
+     * Determines whether or not the provided object is a string
+    * @method isString
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isString: function(o) {
+        return typeof o === 'string';
+    },
+        
+    /**
+     * Determines whether or not the provided object is undefined
+    * @method isUndefined
+    * @param {any} o The object being testing
+    * @return {boolean} the result
+     */
+    isUndefined: function(o) {
+        return typeof o === 'undefined';
+    },
+    
+ 
+    /**
+     * IE will not enumerate native functions in a derived object even if the
+     * function was overridden.  This is a workaround for specific functions 
+     * we care about on the Object prototype. 
+    * @property _IEEnumFix
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @static
+    * @private
+     */
+    _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
+                    r[fname]=f;
+                }
+            }
+    } : function(){},
+       
+    /**
+     * Utility to set up the prototype, constructor and superclass properties to
+     * support an inheritance strategy that can chain constructors and methods.
+     * Static members will not be inherited.
+     *
+    * @method extend
+    * @static
+    * @param {Function} subc   the object to modify
+    * @param {Function} superc the object to inherit
+    * @param {Object} overrides  additional properties/methods to add to the
+     *                              subclass prototype.  These will override the
+     *                              matching items obtained from the superclass 
+     *                              if present.
+     */
+    extend: function(subc, superc, overrides) {
+        if (!superc||!subc) {
+            throw new Error("extend failed, please check that " +
+                            "all dependencies are included.");
+        }
+        var F = function() {}, i;
+        F.prototype=superc.prototype;
+        subc.prototype=new F();
+        subc.prototype.constructor=subc;
+        subc.superclass=superc.prototype;
+        if (superc.prototype.constructor == OP.constructor) {
+            superc.prototype.constructor=superc;
+        }
+    
+        if (overrides) {
+            for (i in overrides) {
+                if (L.hasOwnProperty(overrides, i)) {
+                    subc.prototype[i]=overrides[i];
+                }
+            }
+
+            L._IEEnumFix(subc.prototype, overrides);
+        }
+    },
+   
+    /**
+     * Applies all properties in the supplier to the receiver if the
+     * receiver does not have these properties yet.  Optionally, one or 
+     * more methods/properties can be specified (as additional 
+     * parameters).  This option will overwrite the property if receiver 
+     * has it already.  If true is passed as the third parameter, all 
+     * properties will be applied and _will_ overwrite properties in 
+     * the receiver.
+     *
+    * @method augmentObject
+    * @static
+    * @since 2.3.0
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @param {String*|boolean}  arguments zero or more properties methods 
+     *        to augment the receiver with.  If none specified, everything
+     *        in the supplier will be used unless it would
+     *        overwrite an existing property in the receiver. If true
+     *        is specified as the third parameter, all properties will
+     *        be applied and will overwrite an existing property in
+     *        the receiver
+     */
+    augmentObject: function(r, s) {
+        if (!s||!r) {
+            throw new Error("Absorb failed, verify dependencies.");
+        }
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
+            for (i=2; i<a.length; i=i+1) {
+                r[a[i]] = s[a[i]];
+            }
+        } else { // take everything, overwriting only if the third parameter is true
+            for (p in s) { 
+                if (overrideList || !(p in r)) {
+                    r[p] = s[p];
+                }
+            }
+            
+            L._IEEnumFix(r, s);
+        }
+    },
+ 
+    /**
+     * Same as YAHOO.lang.augmentObject, except it only applies prototype properties
+    * @see YAHOO.lang.augmentObject
+    * @method augmentProto
+    * @static
+    * @param {Function} r  the object to receive the augmentation
+    * @param {Function} s  the object that supplies the properties to augment
+    * @param {String*|boolean}  arguments zero or more properties methods 
+     *        to augment the receiver with.  If none specified, everything 
+     *        in the supplier will be used unless it would overwrite an existing 
+     *        property in the receiver.  if true is specified as the third 
+     *        parameter, all properties will be applied and will overwrite an 
+     *        existing property in the receiver
+     */
+    augmentProto: function(r, s) {
+        if (!s||!r) {
+            throw new Error("Augment failed, verify dependencies.");
+        }
+        //var a=[].concat(arguments);
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
+            a.push(arguments[i]);
+        }
+        L.augmentObject.apply(this, a);
+    },
+
+      
+    /**
+     * Returns a simple string representation of the object or array.
+     * Other types of objects will be returned unprocessed.  Arrays
+     * are expected to be indexed.  Use object notation for
+     * associative arrays.
+    * @method dump
+    * @since 2.3.0
+    * @param o {Object} The object to dump
+    * @param d {int} How deep to recurse child objects, default 3
+    * @return {String} the dump result
+     */
+    dump: function(o, d) {
+        var i,len,s=[],OBJ="{...}",FUN="f(){...}",
+            COMMA=', ', ARROW=' => ';
+
+        // Cast non-objects to string
+        // Skip dates because the std toString is what we want
+        // Skip HTMLElement-like objects because trying to dump 
+        // an element will cause an unhandled exception in FF 2.x
+        if (!L.isObject(o)) {
+            return o + "";
+        } else if (o instanceof Date || ("nodeType" in o && "tagName" in o)) {
+            return o;
+        } else if  (L.isFunction(o)) {
+            return FUN;
+        }
+
+        // dig into child objects the depth specifed. Default 3
+        d = (L.isNumber(d)) ? d : 3;
+
+        // arrays [1, 2, 3]
+        if (L.isArray(o)) {
+            s.push("[");
+            for (i=0,len=o.length;i<len;i=i+1) {
+                if (L.isObject(o[i])) {
+                    s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+                } else {
+                    s.push(o[i]);
+                }
+                s.push(COMMA);
+            }
+            if (s.length > 1) {
+                s.pop();
+            }
+            s.push("]");
+        // objects {k1 => v1, k2 => v2}
+        } else {
+            s.push("{");
+            for (i in o) {
+                if (L.hasOwnProperty(o, i)) {
+                    s.push(i + ARROW);
+                    if (L.isObject(o[i])) {
+                        s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+                    } else {
+                        s.push(o[i]);
+                    }
+                    s.push(COMMA);
+                }
+            }
+            if (s.length > 1) {
+                s.pop();
+            }
+            s.push("}");
+        }
+
+        return s.join("");
+    },
+
+    /**
+     * Does variable substitution on a string. It scans through the string 
+     * looking for expressions enclosed in { } braces. If an expression 
+     * is found, it is used a key on the object.  If there is a space in
+     * the key, the first word is used for the key and the rest is provided
+     * to an optional function to be used to programatically determine the
+     * value (the extra information might be used for this decision). If 
+     * the value for the key in the object, or what is returned from the
+     * function has a string value, number value, or object value, it is 
+     * substituted for the bracket expression and it repeats.  If this
+     * value is an object, it uses the Object's toString() if this has
+     * been overridden, otherwise it does a shallow dump of the key/value
+     * pairs.
+    * @method substitute
+    * @since 2.3.0
+    * @param s {String} The string that will be modified.
+    * @param o {Object} An object containing the replacement values
+    * @param f {Function} An optional function that can be used to
+     *                     process each match.  It receives the key,
+     *                     value, and any extra metadata included with
+     *                     the key inside of the braces.
+    * @return {String} the substituted string
+     */
+    substitute: function (s, o, f) {
+        var i, j, k, key, v, meta, saved=[], token, 
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump, objstr;
+
+
+        for (;;) {
+            i = s.lastIndexOf(LBRACE);
+            if (i < 0) {
+                break;
+            }
+            j = s.indexOf(RBRACE, i);
+            if (i + 1 >= j) {
+                break;
+            }
+
+            //Extract key and meta info 
+            token = s.substring(i + 1, j);
+            key = token;
+            meta = null;
+            k = key.indexOf(SPACE);
+            if (k > -1) {
+                meta = key.substring(k + 1);
+                key = key.substring(0, k);
+            }
+
+            // lookup the value
+            v = o[key];
+
+            // if a substitution function was provided, execute it
+            if (f) {
+                v = f(key, v, meta);
+            }
+
+            if (L.isObject(v)) {
+                if (L.isArray(v)) {
+                    v = L.dump(v, parseInt(meta, 10));
+                } else {
+                    meta = meta || "";
+
+                    // look for the keyword 'dump', if found force obj dump
+                    dump = meta.indexOf(DUMP);
+                    if (dump > -1) {
+                        meta = meta.substring(4);
+                    }
+
+                    objstr = v.toString();
+
+                    // use the toString if it is not the Object toString 
+                    // and the 'dump' meta info was not found
+                    if (objstr === OBJECT_TOSTRING || dump > -1) {
+                        v = L.dump(v, parseInt(meta, 10));
+                    } else {
+                        v = objstr;
+                    }
+                }
+            } else if (!L.isString(v) && !L.isNumber(v)) {
+                // This {block} has no replace string. Save it for later.
+                v = "~-" + saved.length + "-~";
+                saved[saved.length] = token;
+
+                // break;
+            }
+
+            s = s.substring(0, i) + v + s.substring(j + 1);
+
+
+        }
+
+        // restore saved {block}s
+        for (i=saved.length-1; i>=0; i=i-1) {
+            s = s.replace(new RegExp("~-" + i + "-~"), "{"  + saved[i] + "}", "g");
+        }
+
+        return s;
+    },
+
+
+    /**
+     * Returns a string without any leading or trailing whitespace.  If 
+     * the input is not a string, the input will be returned untouched.
+    * @method trim
+    * @since 2.3.0
+    * @param s {string} the string to trim
+    * @return {string} the trimmed string
+     */
+    trim: function(s){
+        try {
+            return s.replace(/^\s+|\s+$/g, "");
+        } catch(e) {
+            return s;
+        }
+    },
+
+    /**
+     * Returns a new object containing all of the properties of
+     * all the supplied objects.  The properties from later objects
+     * will overwrite those in earlier objects.
+    * @method merge
+    * @since 2.3.0
+    * @param arguments {Object*} the objects to merge
+    * @return the new merged object
+     */
+    merge: function() {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
+            L.augmentObject(o, a[i], true);
+        }
+        return o;
+    },
+
+    /**
+     * Executes the supplied function in the context of the supplied 
+     * object 'when' milliseconds later.  Executes the function a 
+     * single time unless periodic is set to true.
+    * @method later
+    * @since 2.4.0
+    * @param when {int} the number of milliseconds to wait until the fn 
+     * is executed
+    * @param o the context object
+    * @param fn {Function|String} the function to execute or the name of 
+     * the method in the 'o' object to execute
+    * @param data [Array] data that is provided to the function.  This accepts
+     * either a single item or an array.  If an array is provided, the
+     * function is executed with one parameter for each array item.  If
+     * you need to pass a single array parameter, it needs to be wrapped in
+     * an array [myarray]
+    * @param periodic {boolean} if true, executes continuously at supplied 
+     * interval until canceled
+    * @return a timer object. Call the cancel() method on this object to 
+     * stop the timer.
+     */
+    later: function(when, o, fn, data, periodic) {
+        when = when || 0; 
+        o = o || {};
+        var m=fn, d=data, f, r;
+
+        if (L.isString(fn)) {
+            m = o[fn];
+        }
+
+        if (!m) {
+            throw new TypeError("method undefined");
+        }
+
+        if (d && !L.isArray(d)) {
+            d = [data];
+        }
+
+        f = function() {
+            m.apply(o, d || NOTHING);
+        };
+
+        r = (periodic) ? setInterval(f, when) : setTimeout(f, when);
+
+        return {
+            interval: periodic,
+            cancel: function() {
+                if (this.interval) {
+                    clearInterval(r);
+                } else {
+                    clearTimeout(r);
+                }
+            }
+        };
+    },
+    
+    /**
+     * A convenience method for detecting a legitimate non-null value.
+     * Returns false for null/undefined/NaN, true for other values, 
+     * including 0/false/''
+    * @method isValue
+    * @since 2.3.0
+    * @param o {any} the item to test
+    * @return {boolean} true if it is not null/undefined/NaN || false
+     */
+    isValue: function(o) {
+        // return (o || o === false || o === 0 || o === ''); // Infinity fails
+return (L.isObject(o) || L.isString(o) || L.isNumber(o) || L.isBoolean(o));
+    }
+
+};
+
+/**
+ * Determines whether or not the property was added
+ * to the object instance.  Returns false if the property is not present
+ * in the object, or was inherited from the prototype.
+ * This abstraction is provided to enable hasOwnProperty for Safari 1.3.x.
+ * There is a discrepancy between YAHOO.lang.hasOwnProperty and
+ * Object.prototype.hasOwnProperty when the property is a primitive added to
+ * both the instance AND prototype with the same value:
+ * <pre>
+ * var A = function() {};
+ * A.prototype.foo = 'foo';
+ * var a = new A();
+ * a.foo = 'foo';
+ * alert(a.hasOwnProperty('foo')); // true
+ * alert(YAHOO.lang.hasOwnProperty(a, 'foo')); // false when using fallback
+ * </pre>
+ * @method hasOwnProperty
+ * @param {any} o The object being testing
+ * @param prop {string} the name of the property to test
+ * @return {boolean} the result
+ */
+L.hasOwnProperty = (OP.hasOwnProperty) ?
+    function(o, prop) {
+        return o && o.hasOwnProperty(prop);
+    } : function(o, prop) {
+        return !L.isUndefined(o[prop]) && 
+                o.constructor.prototype[prop] !== o[prop];
+    };
+
+// new lang wins
+OB.augmentObject(L, OB, true);
+
+/*
+ * An alias for <a href="YAHOO.lang.html">YAHOO.lang</a>
+ * @class YAHOO.util.Lang
+ */
+YAHOO.util.Lang = L;
+ 
+/**
+ * Same as YAHOO.lang.augmentObject, except it only applies prototype 
+ * properties.  This is an alias for augmentProto.
+ * @see YAHOO.lang.augmentObject
+ * @method augment
+ * @static
+ * @param {Function} r  the object to receive the augmentation
+ * @param {Function} s  the object that supplies the properties to augment
+ * @param {String*|boolean}  arguments zero or more properties methods to 
+ *        augment the receiver with.  If none specified, everything
+ *        in the supplier will be used unless it would
+ *        overwrite an existing property in the receiver.  if true
+ *        is specified as the third parameter, all properties will
+ *        be applied and will overwrite an existing property in
+ *        the receiver
+ */
+L.augment = L.augmentProto;
+
+/**
+ * An alias for <a href="YAHOO.lang.html#augment">YAHOO.lang.augment</a>
+ * @for YAHOO
+ * @method augment
+ * @static
+ * @param {Function} r  the object to receive the augmentation
+ * @param {Function} s  the object that supplies the properties to augment
+ * @param {String*}  arguments zero or more properties methods to 
+ *        augment the receiver with.  If none specified, everything
+ *        in the supplier will be used unless it would
+ *        overwrite an existing property in the receiver
+ */
+YAHOO.augment = L.augmentProto;
+       
+/**
+ * An alias for <a href="YAHOO.lang.html#extend">YAHOO.lang.extend</a>
+ * @method extend
+ * @static
+ * @param {Function} subc   the object to modify
+ * @param {Function} superc the object to inherit
+ * @param {Object} overrides  additional properties/methods to add to the
+ *        subclass prototype.  These will override the
+ *        matching items obtained from the superclass if present.
+ */
+YAHOO.extend = L.extend;
+
+})();
+YAHOO.register("yahoo", YAHOO, {version: "2.8.0r4", build: "2449"});
Index: trunk/index.php
===================================================================
--- trunk/index.php	(nonexistent)
+++ trunk/index.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         page
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+$starttime = array_sum(explode(" ",microtime()));
+
+// Include config file
+if (!defined('WB_PATH')) {
+    $sStartupFile = __DIR__.'/config.php';
+    if (is_readable($sStartupFile)) {
+        require($sStartupFile);
+    }
+}
+
+// Check if the config file has been set-up
+if(!defined('TABLE_PREFIX'))
+{
+/*
+ * Remark:  HTTP/1.1 requires a qualified URI incl. the scheme, name
+ * of the host and absolute path as the argument of location. Some, but
+ * not all clients will accept relative URIs also.
+ */
+    $host       = $_SERVER['HTTP_HOST'];
+    $uri        = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
+    $file       = 'install/index.php';
+    $target_url = 'http://'.$host.$uri.'/'.$file;
+    $sResponse  = $_SERVER['SERVER_PROTOCOL'].' 307 Temporary Redirect';
+    header($sResponse);
+    header('Location: '.$target_url);
+    exit;    // make sure that subsequent code will not be executed
+}
+
+if (!class_exists('frontend')) { require(WB_PATH.'/framework/class.frontend.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) { $wb = new frontend(); }
+
+// activate frontend Output_Filter (index.php)
+if (is_readable(WB_PATH .'/modules/output_filter/index.php')) {
+    if (!function_exists('executeFrontendOutputFilter')) {
+        include WB_PATH .'/modules/output_filter/index.php';
+    }
+} else {
+    throw new RuntimeException('missing mandatory global Output_Filter!');
+}
+
+// Figure out which page to display
+// Stop processing if intro page was shown
+$wb->page_select() or die();
+
+// Collect info about the currently viewed page
+// and check permissions
+$wb->get_page_details();
+
+// Collect general website settings
+$wb->get_website_settings();
+
+// Load functions available to templates, modules and code sections
+// also, set some aliases for backward compatibility
+if (!function_exists('register_frontend_modfiles')){require(WB_PATH.'/framework/frontend.functions.php');}
+
+//Get pagecontent in buffer for Droplets and/or Filter operations
+ob_start();
+require(WB_PATH.'/templates/'.TEMPLATE.'/index.php');
+$output = ob_get_contents();
+if(ob_get_length() > 0) { ob_end_clean(); }
+// execute frontend output filters
+    if(file_exists(WB_PATH .'/modules/output_filter/index.php')) {
+        include_once(WB_PATH .'/modules/output_filter/index.php');
+        if(function_exists('executeFrontendOutputFilter')) {
+            $output = executeFrontendOutputFilter($output);
+        }
+    }
+// now send complete page to the browser
+echo $output;
+// end of wb-script
+exit;

Property changes on: trunk/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/ModuleWhiteList
===================================================================
--- trunk/install/ModuleWhiteList	(nonexistent)
+++ trunk/install/ModuleWhiteList	(revision 2)
@@ -0,0 +1,16 @@
+AddonFileEditor
+captcha_control
+ckeditor
+code
+droplets
+foldergallery
+form
+jsadmin
+menu_link
+mod_multilingual
+news
+output_filter
+show_menu2
+wbCounter
+wrapper
+wysiwyg
\ No newline at end of file
Index: trunk/install/background.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/install/background.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/install/index.php
===================================================================
--- trunk/install/index.php	(nonexistent)
+++ trunk/install/index.php	(revision 2)
@@ -0,0 +1,573 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         install
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Start a session
+if (version_compare(PHP_VERSION, '5.6', '<')) { die('Sorry, at last PHP-5.6 required !!'); }
+if(!defined('SESSION_STARTED')) {
+    session_name('wb-installer');
+    session_start();
+    define('SESSION_STARTED', true);
+}
+
+$mod_path = dirname(str_replace('\\', '/', __FILE__));
+$doc_root = str_replace('\\','/',rtrim(realpath($_SERVER['DOCUMENT_ROOT']),'/'));
+$mod_name = basename($mod_path);
+$wb_path = str_replace('\\','/',dirname(dirname(realpath( __FILE__))));
+if (!defined('WB_PATH')) { define('WB_PATH', $wb_path); }
+$wb_root = str_replace($doc_root,'',$wb_path);
+
+// begin new routine
+    $sInstallFolderRel = dirname(dirname($_SERVER['SCRIPT_NAME']));
+    $sProtokol = ((!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ) ? 'http' : 'https') . '://';
+    $sUrl = $sProtokol.$_SERVER['HTTP_HOST'].($_SERVER['SERVER_PORT'] == 80 ? '' : $_SERVER['SERVER_PORT'].':').$sInstallFolderRel;// end new routine
+    $sScriptPath = str_replace('\\', '/', ($_SERVER['SCRIPT_FILENAME']));
+    $sScriptUrl = $sUrl.str_replace($wb_path, '', $sScriptPath);
+
+// Function to highlight input fields which contain wrong/missing data
+function field_error($field_name='') {
+    if(!defined('SESSION_STARTED') || $field_name == '') return;
+    if(isset($_SESSION['ERROR_FIELD']) && $_SESSION['ERROR_FIELD'] == $field_name) {
+        return ' class="wrong"';
+    }
+}
+
+$installFlag = true;
+// Check if the page has been reloaded
+if(!isset($_GET['sessions_checked']) OR $_GET['sessions_checked'] != 'true') {
+    // Set session variable
+    $_SESSION['session_support'] = '<span class="good">Enabled</span>';
+    // Reload page
+    header('Location: index.php?sessions_checked=true');
+    exit(0);
+} else {
+    // Check if session variable has been saved after reload
+    if(isset($_SESSION['session_support'])) {
+        $session_support = $_SESSION['session_support'];
+    } else {
+        $installFlag = false;
+        $session_support = '<span class="bad">Disabled</span>';
+    }
+}
+// Check if AddDefaultCharset is set
+$e_adc=false;
+$sapi=php_sapi_name();
+if(strpos($sapi, 'apache')!==FALSE || strpos($sapi, 'nsapi')!==FALSE) {
+    flush();
+    $apache_rheaders=apache_response_headers();
+    foreach($apache_rheaders AS $h) {
+        if(strpos($h, 'html; charset')!==FALSE) {
+            preg_match('/charset\s*=\s*([a-zA-Z0-9- _]+)/', $h, $match);
+            $apache_charset=$match[1];
+            $e_adc=$apache_charset;
+        }
+    }
+}
+
+?><!DOCTYPE HTML>
+<html lang="de">
+<head>
+<meta charset="utf-8" />
+<title>WebsiteBaker Installation Wizard</title>
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+<script>
+
+function confirm_link(message, url) {
+    if(confirm(message)) location.href = url;
+}
+function change_os(type) {
+    if(type == 'linux') {
+        document.getElementById('operating_system_linux').checked = true;
+        document.getElementById('operating_system_windows').checked = false;
+        document.getElementById('file_perms_box').style.display = 'none';
+    } else if(type == 'windows') {
+        document.getElementById('operating_system_linux').checked = false;
+        document.getElementById('operating_system_windows').checked = true;
+        document.getElementById('file_perms_box').style.display = 'none';
+    }
+}
+</script>
+</head>
+<body>
+<div class="body">
+<table>
+<tbody>
+<tr style="background: #a9c9ea;">
+    <td valign="top">
+        <img src="../templates/DefaultTheme/images/logo.png" alt="Logo" />
+    </td>
+    <td>
+        <h1 style="border:none; margin-top:1em;font-size:150%;">Installation Wizard</h1>
+    </td>
+</tr>
+</tbody>
+</table>
+
+<form name="website_baker_installation_wizard" action="save.php" method="post">
+    <input type="hidden" name="url" value="" />
+    <input type="hidden" name="username_fieldname" value="admin_username" />
+    <input type="hidden" name="password_fieldname" value="admin_password" />
+    <input type="hidden" name="remember" id="remember" value="true" />
+
+        <div class="welcome">
+            Welcome to the WebsiteBaker Installation Wizard.
+        </div>
+        <?php
+        if(isset($_SESSION['message']) AND $_SESSION['message'] != '') {
+            ?><div  style="width: 700px; padding: 10px; margin-bottom: 5px; border: 1px solid #FF0000; background-color: #FFDBDB;"><b>Error:</b> <?php echo $_SESSION['message']; ?></div><?php
+        }
+        ?>
+        <table>
+        <thead>
+        <tr>
+            <th colspan="4" class="step-row"><h1 class="step-row">Step 1
+            </h1>&nbsp;Please check the following requirements are met before continuing...
+            </th>
+        </tr>
+        </thead>
+        <tbody>
+        <?php if($session_support != '<span class="good">Enabled</span>') { ?>
+        <tr>
+            <td colspan="6" class="error">Please note: PHP Session Support may appear disabled if your browser does not support cookies.</td>
+        </tr>
+        <?php } ?>
+        <tr>
+            <td style="color: #666666;">PHP Version >= 5.3.6</td>
+            <td>
+                <?php
+               if (version_compare(PHP_VERSION, '5.3.6', '>='))
+               {
+                    ?><span class="good"><?php echo PHP_VERSION;?></span><?php
+                } else {
+                    $installFlag = false;
+                    ?><span class="bad"><?php echo PHP_VERSION;?></span><?php
+                }
+                ?>
+            </td>
+            <td style="color: #666666;">PHP Session Support</td>
+            <td><?php echo $session_support; ?></td>
+        </tr>
+    <tr>
+        <td style="color: #666666;">Server DefaultCharset</td>
+            <td>
+                <?php
+                    $chrval = (($e_adc != '') && (strtolower($e_adc) != 'utf-8') ? true : false);
+                    if($chrval == false) {
+                        ?><span class="good">
+                        <?php echo (($e_adc=='') ? 'OK' : $e_adc) ?>
+                        </span>
+                        <?php
+                    } else {
+                        ?><span class="bad"><?php echo $e_adc ?></span><?php
+                    }
+
+                ?>
+            </td>
+            <td style="color: #666666;">PHP Safe Mode</td>
+            <td>
+                <?php
+                if(ini_get('safe_mode')=='' || strpos(strtolower(ini_get('safe_mode')), 'off')!==FALSE || ini_get('safe_mode')==0) {
+                    ?><span class="good">Disabled</span><?php
+                } else {
+                    $installFlag = false;
+                    ?><span class="bad">Enabled</span><?php
+                }
+                ?>
+            </td>
+        </tr>
+        <?php if($chrval == true) {
+        ?>
+        <tr>
+            <td colspan="6" style="font-size: 10px;" class="bad">
+<p class="warning">
+<b>Please note:</b> Yor webserver is configured to deliver <b><?php echo $e_adc;?></b> charset only.<br />
+To display national special characters (e.g.: &auml; &aacute;) in clear manner, switch off this preset please(or let it do by your hosting provider).<br />
+In any case you can choose <b><?php echo $e_adc;?></b> in the settings of WebsiteBaker.<br />
+But this solution does not guarranty a correct displaying of the content from all modules!
+</p>
+</td>
+</tr>
+<?php } ?>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+    <th colspan="4" class="step-row">
+    <h1 class="step-row">Step 2</h1>&nbsp;Please check the following files/folders are writeable before continuing...
+    </th>
+</tr>
+</thead>
+<tbody>
+<?php
+    $config = '<span class="good">Writeable</span>';
+    $config_content = "<?php\n";
+    $configFile = '/config.php';
+    if(!isset($_SESSION['config_rename']) )
+    {
+// cnfig.php or config.php.new
+        if( (file_exists($wb_path.$configFile)==true))
+        {
+// next operation only if file is writeable
+            if(is_writeable($wb_path.$configFile))
+            {
+// already installed? it's not empty
+                if ( filesize($wb_path.$configFile) > 128)
+                {
+                    $installFlag = false;
+                    $config = '<span class="bad">Not empty! WebsiteBaker already installed?</span>';
+// try to open and to write
+                } elseif( !$handle = fopen($wb_path.$configFile, 'w') )
+                {
+                    $installFlag = false;
+                    $config = '<span class="bad">Not Writeable</span>';
+                } else {
+                    if (fwrite($handle, $config_content) === FALSE) {
+                        $installFlag = false;
+                        $config = '<span class="bad">Not Writeable</span>';
+                    } else {
+                        $config = '<span class="good">Writeable</span>';
+                        $_SESSION['config_rename'] = true;
+                    }
+                    // Close file
+                    fclose($handle);
+                    }
+            } else {
+                $installFlag = false;
+                $config = '<span class="bad">Not Writeable</span>';
+            }
+// it's config.php.new
+        } elseif((file_exists($wb_path.'/config.php.new')==true))
+        {
+            $configFile = '/config.php.new';
+            $installFlag = false;
+            $config = '<span class="bad">Please rename to config.php</span>';
+        } else
+        {
+            $installFlag = false;
+            $config = '<span class="bad">Missing!!?</span>';
+        }
+    }
+?>
+        <tr>
+            <td style="color: #666666;"><?php print $wb_root.$configFile ?></td>
+            <td colspan="3"  ><?php echo $config ?></td>
+        </tr>
+        <tr>
+            <td style="color: #666666;"><?php print $wb_root ?>/pages/</td>
+            <td><?php if(is_writable('../pages/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../pages/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+            <td style="color: #666666;"><?php print $wb_root ?>/media/</td>
+            <td><?php if(is_writable('../media/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../media/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+        </tr>
+        <tr>
+            <td style="color: #666666;"><?php print $wb_root ?>/templates/</td>
+            <td><?php if(is_writable('../templates/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../templates/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+            <td style="color: #666666;"><?php print $wb_root ?>/modules/</td>
+            <td><?php if(is_writable('../modules/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../modules/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+        </tr>
+        <tr>
+            <td style="color: #666666;"><?php print $wb_root ?>/languages/</td>
+            <td><?php if(is_writable('../languages/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../languages/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+            <td style="color: #666666;"><?php print $wb_root ?>/temp/</td>
+            <td><?php if(is_writable('../temp/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../temp/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+        </tr>
+        <tr>
+            <td style="color: #666666;"><?php print $wb_root ?>/var/</td>
+            <td><?php if(is_writable('../var/')) { echo '<span class="good">Writeable</span>'; } elseif(!file_exists('../languages/')) {$installFlag = false; echo '<span class="bad">Directory Not Found</span>'; } else { echo '<span class="bad">Unwriteable</span>'; } ?></td>
+            <td colspan="2">&nbsp;</td>
+        </tr>
+        </tbody>
+        </table>
+<?php  if($installFlag == true) {     ?>
+        <table>
+            <thead>
+        <tr>
+            <th colspan="4" class="step-row">
+            <h1 class="step-row">Step 3</h1>&nbsp;Please check URL settings, and select a default timezone and a default backend language...
+            </th>
+        </tr>
+            </thead>
+        <tbody>
+        <tr>
+            <td class="name">Absolute URL:</td>
+            <td class="value">
+                <input <?php echo field_error('wb_url');?> type="text" tabindex="1" name="wb_url" style="width: 99%;" value="<?php if(isset($_SESSION['wb_url'])) { echo $_SESSION['wb_url']; } else { echo $sUrl; } ?>" />
+            </td>
+            <td colspan="4">&nbsp;</td>
+        </tr>
+        <tr>
+            <td class="name">Default Timezone:</td>
+            <td class="value"><select <?php echo field_error('default_timezone');?> tabindex="3" name="default_timezone" style="width: 100%;">
+<?php
+/*
+ build list of TimeZone options
+*/
+    $aZones = array(-12,-11,-10,-9,-8,-7,-6,-5,-4,-3.5,-3,-2,-1,0,1,2,3,3.5,4,4.5,5,5.5,6,6.5,7,8,9,9.5,10,11,12,13);
+    $sOutput = PHP_EOL;
+    foreach($aZones as $fOffset) {
+        $sItemTitle = 'GMT '.(($fOffset>0)?'+':'').(($fOffset==0)?'':(string)$fOffset.' Hours');
+        $sOutput .= '<option value="'.(string)$fOffset.'"';
+        if (
+            (isset($_SESSION['default_timezone']) AND $_SESSION['default_timezone'] == (string)$fOffset) ||
+            (!isset($_SESSION['default_timezone']) AND $fOffset == 0)
+        ) {
+            $sOutput .= ' selected="selected"';
+        }
+        $sOutput .= '>'.$sItemTitle.'</option>'.PHP_EOL;
+    }
+// output Timezone options
+    echo $sOutput;
+?>
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td class="name">Default Language: </td>
+            <td class="value">
+<?php
+/*
+ Find all available languages in /language/ folder and build option list from
+*/
+// -----
+    $getLanguage = function($sFile) {
+        $aRetval = null;
+        $language_code = $language_name = '';
+        include $sFile;
+        if ($language_code && $language_name) {
+            $aRetval = ['code' => $language_code, 'name' => $language_name];
+        }
+        return $aRetval;
+    };
+// -----
+    $aMatches = [];
+    $sDefaultLang = isset($_SESSION['default_language']) ? $_SESSION['default_language'] : 'EN';
+    $sLangDir = str_replace('\\', '/', dirname(__DIR__).'/languages/');
+    $sOldWorkingDir = getcwd();
+    chdir($sLangDir);
+    foreach(glob('??.php') as $sFilename) {
+        if (preg_match('/[A-Z]{2}\.php$/s', $sFilename) && is_readable($sLangDir.$sFilename)) {
+            if (!($aMatch = $getLanguage($sLangDir.$sFilename))) {
+                continue;
+            }
+            $aMatch['status'] = ($aMatch['code'] == $sDefaultLang);
+            $aMatches[] = $aMatch;
+        }
+    }
+    chdir($sOldWorkingDir);
+// create HTML-output
+    if (sizeof($aMatches) > 0) {
+        $sOutput = '<select '.field_error('default_language').' tabindex="3" name="default_language" style="width: 100%;">'.PHP_EOL;
+        foreach ($aMatches as $aMatch) {
+            $sOutput .= '<option value="'.$aMatch['code'].'" '
+                      . ($aMatch['status'] ? 'selected="selected"' : '').'>'
+                      . $aMatch['name'].'</option>'.PHP_EOL;
+        }
+        $sOutput .= '</select>'.PHP_EOL;
+// output HTML
+        echo $sOutput;
+        unset($sOutput);
+    } else {
+        echo 'WARNING: No language definition files available!!!';
+        $installFlag = false;
+    }
+    unset($aMatches, $aMatch, $getLanguage);
+?>
+            </td>
+            <td colspan="4">&nbsp;</td>
+        </tr>
+      </tbody>
+        </table>
+
+        <table>
+            <thead>
+        <tr>
+            <th class="step-row" colspan="4">
+            <h1 class="step-row">Step 4</h1>&nbsp;Please specify your operating system information below...
+            </th>
+        </tr>
+            </thead>
+      <tbody>
+        <tr>
+            <td class="name">Server Operating System: </td>
+            <td style="">
+                <input type="radio" tabindex="4" name="operating_system" id="operating_system_linux" onclick="document.getElementById('file_perms_box').style.display = 'none';" value="linux"<?php if(!isset($_SESSION['operating_system']) OR $_SESSION['operating_system'] == 'linux') { echo ' checked="checked"'; } ?> />
+                <span style="cursor: pointer;" onclick="javascript: change_os('linux');">Linux/Unix based</span>
+                <br />
+                <input type="radio" tabindex="5" name="operating_system" id="operating_system_windows" onclick="document.getElementById('file_perms_box').style.display = 'none';" value="windows"<?php if(isset($_SESSION['operating_system']) AND $_SESSION['operating_system'] == 'windows') { echo ' checked="checked"'; } ?> />
+                <span style="cursor: pointer;" onclick="javascript: change_os('windows');">Windows</span>
+            </td>
+        </tr>
+        <tr>
+            <td class="name">&nbsp;</td>
+            <td class="value">
+                <div id="file_perms_box" style="line-height:2em; position: relative; width: 100%;float:left; margin: 0; padding: 0; display: <?php if(isset($_SESSION['operating_system']) AND $_SESSION['operating_system'] == 'windows') { echo 'none'; } else { echo 'none'; } ?>;">
+                    <input type="checkbox" tabindex="6" name="world_writeable" id="world_writeable" value="true"<?php if(isset($_SESSION['world_writeable']) AND $_SESSION['world_writeable'] == true) { echo ' checked="checked'; } ?> />
+                     <label style=" margin: 0;  " for="world_writeable">
+                        World-writeable file permissions (777)
+                    </label>
+                <br />
+                    <p class="warning">(Please note: only recommended for testing environments)</p>
+                </div>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+        <table>
+            <thead>
+            <tr>
+                <th colspan="4" class="step-row">
+                <h1 class="step-row">Step 5</h1>&nbsp;Please enter your MySQL database server details below...
+                </th>
+            </tr>
+            </thead>
+          <tbody>
+            <tr>
+                <td class="name">Host Name</td>
+                <td class="value">
+                    <input <?php echo field_error('database_host');?> type="text" tabindex="7" name="database_host" value="<?php if(isset($_SESSION['database_host'])) { echo $_SESSION['database_host']; } else { echo 'localhost'; } ?>" />
+                </td>
+            </tr>
+            <tr>
+                <td class="name">Database Name: </td>
+                <td class="value" style="white-space: nowrap;">
+                    <input <?php echo field_error('database_name')?> type="text" tabindex="8" name="database_name" value="<?php if(isset($_SESSION['database_name'])) { echo $_SESSION['database_name']; } else { echo 'DatabaseName'; } ?>" />
+                <span style="display: inline;">&nbsp;([a-zA-Z0-9_-])</span>
+                </td>
+            </tr>
+        <tr>
+            <td class="name">Table Prefix: </td>
+            <td class="value" style="white-space: nowrap;">
+                <input <?php echo field_error('table_prefix')?> type="text" tabindex="9" name="table_prefix" value="<?php if(isset($_SESSION['table_prefix'])) { echo $_SESSION['table_prefix']; } else { echo 'wb_'; } ?>" />
+                <span style="display: inline;">&nbsp;([a-zA-Z0-9_])</span>
+            </td>
+        </tr>
+        <tr>
+                <td class="name">Username:</td>
+                <td class="value">
+                    <input <?php echo field_error('database_username');?> type="text" tabindex="10" name="database_username" value="<?php if(isset($_SESSION['database_username'])) { echo $_SESSION['database_username']; } else { echo 'root'; } ?>" />
+                </td>
+        </tr>
+        <tr>
+                <td class="name">Password:</td>
+                <td class="value">
+                    <input type="password" tabindex="11" name="database_password" value="<?php if(isset($_SESSION['database_password'])) { echo $_SESSION['database_password']; } ?>" />
+                </td>
+        </tr>
+        <tr>
+            <td class="name hide" colspan="2">
+                <input type="checkbox" tabindex="12" name="install_tables" id="install_tables" value="true"<?php if(!isset($_SESSION['install_tables'])) { echo ' checked="checked"'; } elseif($_SESSION['install_tables'] == 'true') { echo ' checked="checked"'; } ?> />
+                <label for="install_tables" style="color: #666666;">Install Tables</label>
+                <br />
+                <span style="font-size: 1px; color: #666666;">(Please note: May remove existing tables and data)</span>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+        <table>
+        <thead>
+        <tr>
+            <th colspan="4" class="step-row">
+            <h1 class="step-row">Step 6</h1>&nbsp;Please enter your website title below...
+            </th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr>
+            <td class="name">Website Title:</td>
+            <td class="value">
+                <input <?php echo field_error('website_title');?> type="text" tabindex="13" name="website_title" value="<?php if(isset($_SESSION['website_title'])) { echo $_SESSION['website_title']; } else { echo 'Enter your website title'; } ?>" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+        <table>
+        <thead>
+        <tr>
+            <th colspan="4" class="step-row">
+            <h1 class="step-row">Step 7</h1> Please enter your Administrator account details below...
+            </th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr>
+            <td class="name">Loginname:</td>
+            <td class="value">
+                <input <?php echo field_error('admin_username');?> type="text" tabindex="14" name="admin_username" value="<?php if(isset($_SESSION['admin_username'])) { echo $_SESSION['admin_username']; } else { echo 'admin'; } ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td class="name">Email:</td>
+            <td class="value">
+                <input <?php echo field_error('admin_email');?> type="text" tabindex="15" name="admin_email" value="<?php if(isset($_SESSION['admin_email'])) { echo $_SESSION['admin_email']; } ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td class="name">Password:</td>
+            <td class="value">
+                <input <?php echo field_error('admin_password');?> type="password" tabindex="16" name="admin_password" value="" />
+            </td>
+        </tr>
+        <tr>
+            <td class="name">Re-Password:</td>
+            <td class="value">
+                <input <?php echo field_error('admin_repassword');?> type="password" tabindex="17" name="admin_repassword" value=""  />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+<?php  }    ?>
+        <table>
+        <tbody>
+                <tr valign="top">
+                    <td><strong>Please note: &nbsp;</strong></td>
+                </tr>
+                <tr valign="top">
+                    <td>
+                        <p class="warning">
+                        WebsiteBaker is released under the
+                        <a href="http://www.gnu.org/licenses/gpl.html" target="_blank" tabindex="19">GNU General Public License</a>
+                        <br />
+                        By clicking install, you are accepting the license.
+                        </p>
+                    </td>
+                </tr>
+                <tr valign="top">
+            <td>
+            <p class="center">
+                <?php if($installFlag == true) { ?>
+                <input type="submit" tabindex="20" name="install" value="Install WebsiteBaker" />
+                <?php } else { ?>
+                <input type="button" tabindex="20" name="restart" value="Check your Settings in Step1 or Step2" class="submit" onclick="window.location = '<?php print $sScriptUrl ?>';" />
+                <?php } ?>
+            </p>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+
+</form>
+</div>
+
+<div style="margin: 0 0 3em; padding: 0; text-align:center;">
+    <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+    <a href="http://www.websitebaker.org/" style="color: #000000;" target="_blank">WebsiteBaker</a>
+    is    released under the
+    <a href="http://www.gnu.org/licenses/gpl.html" style="color: #000000;" target="_blank">GNU General Public License</a>
+    <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+</div >
+
+</body>
+</html>

Property changes on: trunk/install/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/install-data.sql
===================================================================
--- trunk/install/install-data.sql	(nonexistent)
+++ trunk/install/install-data.sql	(revision 2)
@@ -0,0 +1,90 @@
+-- phpMyAdmin SQL Dump
+-- version 4.0.4.1
+-- http://www.phpmyadmin.net
+--
+-- Host: 127.0.0.1
+-- Erstellungszeit: 14. Aug 2014 um 10:47
+-- Server Version: 5.5.32
+-- PHP-Version: 5.4.19
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+--
+-- Daten für Tabelle `groups`
+--
+INSERT INTO `{TABLE_PREFIX}groups` (`group_id`, `name`, `system_permissions`, `module_permissions`, `template_permissions`) VALUES
+(1, 'Administrators', 'pages,pages_view,pages_add,pages_add_l0,pages_settings,pages_modify,pages_intro,pages_delete,media,media_view,media_upload,media_rename,media_delete,media_create,addons,modules,modules_view,modules_install,modules_uninstall,templates,templates_view,templates_install,templates_uninstall,languages,languages_view,languages_install,languages_uninstall,settings,settings_basic,settings_advanced,access,users,users_view,users_add,users_modify,users_delete,groups,groups_view,groups_add,groups_modify,groups_delete,admintools', '', '');
+--
+-- Daten für Tabelle `search`
+--
+INSERT INTO `{TABLE_PREFIX}search` (`search_id`, `name`, `value`, `extra`) VALUES
+(1, 'header', '\n<h1>[TEXT_SEARCH]</h1>\n\n<form name="searchpage" action="[WB_URL]/search/index.php" method="get">\n<table cellpadding="3" cellspacing="0" border="0" width="500">\n<tr>\n<td>\n<input type="hidden" name="search_path" value="[SEARCH_PATH]" />\n<input type="text" name="string" value="[SEARCH_STRING]" style="width: 100%;" />\n</td>\n<td width="150">\n<input type="submit" value="[TEXT_SEARCH]" style="width: 100%;" />\n</td>\n</tr>\n<tr>\n<td colspan="2">\n<input type="radio" name="match" id="match_all" value="all"[ALL_CHECKED] />\n<label for="match_all">[TEXT_ALL_WORDS]</label>\n<input type="radio" name="match" id="match_any" value="any"[ANY_CHECKED] />\n<label for="match_any">[TEXT_ANY_WORDS]</label>\n<input type="radio" name="match" id="match_exact" value="exact"[EXACT_CHECKED] />\n<label for="match_exact">[TEXT_EXACT_MATCH]</label>\n</td>\n</tr>\n</table>\n\n</form>\n\n<hr />\n    ', ''),
+(2, 'footer', '', ''),
+(3, 'results_header', '[TEXT_RESULTS_FOR] ''<b>[SEARCH_STRING]</b>'':\n<table cellpadding="2" cellspacing="0" border="0" width="100%" style="padding-top: 10px;">', ''),
+(4, 'results_loop', '<tr style="background-color: #F0F0F0;">\n<td><a href="[LINK]">[TITLE]</a></td>\n<td align="right">[TEXT_LAST_UPDATED_BY] [DISPLAY_NAME] [TEXT_ON] [DATE]</td>\n</tr>\n<tr><td colspan="2" style="text-align: justify; padding-bottom: 5px;">[DESCRIPTION]</td></tr>\n<tr><td colspan="2" style="text-align: justify; padding-bottom: 10px;">[EXCERPT]</td></tr>', ''),
+(5, 'results_footer', '</table>', ''),
+(6, 'no_results', '<tr><td><p>[TEXT_NO_RESULTS]</p></td></tr>', ''),
+(7, 'module_order', 'faqbaker,manual,wysiwyg', ''),
+(8, 'max_excerpt', '15', ''),
+(9, 'time_limit', '0', ''),
+(10, 'cfg_enable_old_search', 'true', ''),
+(11, 'cfg_search_keywords', 'true', ''),
+(12, 'cfg_search_description', 'true', ''),
+(13, 'cfg_show_description', 'true', ''),
+(14, 'cfg_enable_flush', 'false', ''),
+(15, 'template', '', '');
+--
+-- Daten für Tabelle `settings`
+--
+INSERT INTO `{TABLE_PREFIX}settings` ( `name`, `value`) VALUES
+( 'website_description', ''),
+( 'website_keywords', ''),
+( 'website_header', ''),
+( 'website_footer', ''),
+( 'website_signature', ''),
+( 'wysiwyg_style', 'font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;'),
+( 'er_level', ''),
+( 'sec_anchor', 'Sec'),
+( 'default_date_format', 'M d Y'),
+( 'default_time_format', 'g:i A'),
+( 'redirect_timer', '1000'),
+( 'home_folders', 'true'),
+( 'warn_page_leave', '1'),
+( 'confirmed_registration', '0'),
+( 'default_template', 'DefaultTemplate'),
+( 'default_theme', 'DefaultTheme'),
+( 'default_charset', 'utf-8'),
+( 'multiple_menus', 'true'),
+( 'page_level_limit', '4'),
+( 'intro_page', 'false'),
+( 'page_trash', 'inline'),
+( 'homepage_redirection', 'false'),
+( 'page_languages', 'true'),
+( 'wysiwyg_editor', 'ckeditor'),
+( 'manage_sections', 'true'),
+( 'section_blocks', 'true'),
+( 'smart_login', 'true'),
+( 'frontend_login', 'false'),
+( 'frontend_signup', 'false'),
+( 'search', 'public'),
+( 'page_extension', '.php'),
+( 'page_spacer', '-'),
+( 'pages_directory', '/pages'),
+( 'page_icon_dir', '/templates/*/title_images'),
+( 'rename_files_on_upload', 'ph.*?,cgi,pl,pm,exe,com,bat,pif,cmd,src,asp,aspx,js'),
+( 'media_directory', '/media'),
+( 'wbmailer_routine', 'phpmail'),
+( 'wbmailer_default_sendername', 'WB Mailer'),
+( 'wbmailer_smtp_host', ''),
+( 'wbmailer_smtp_auth', ''),
+( 'wbmailer_smtp_username', ''),
+( 'wbmailer_smtp_password', ''),
+( 'sec_token_fingerprint', 'true'),
+( 'sec_token_netmask4', '24'),
+( 'sec_token_netmask6', '64'),
+( 'sec_token_life_time', '1800'),
+( 'debug', 'false'),
+( 'system_locked', '0'),
+( 'wbmailer_smtp_port', '25'),
+( 'wbmailer_smtp_secure', 'TLS'),
+( 'mediasettings', '');
+

Property changes on: trunk/install/install-data.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/install-struct.sql
===================================================================
--- trunk/install/install-struct.sql	(nonexistent)
+++ trunk/install/install-struct.sql	(revision 2)
@@ -0,0 +1,152 @@
+-- phpMyAdmin SQL Dump
+-- version 4.0.4.1
+-- http://www.phpmyadmin.net
+--
+-- Host: 127.0.0.1
+-- Erstellungszeit: 14. Aug 2014 um 10:46
+-- Server Version: 5.5.32
+-- PHP-Version: 5.4.19
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+-- --------------------------------------------------------
+-- Database structure for module 'news'
+--
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {FIELD_COLLATION}
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `addons`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}addons`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}addons` (
+  `addon_id` int(11) NOT NULL AUTO_INCREMENT,
+  `type` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `directory` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `description` text{FIELD_COLLATION} NOT NULL,
+  `function` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `version` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `platform` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `author` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `license` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  PRIMARY KEY (`addon_id`)
+){TABLE_ENGINE};
+ALTER TABLE `{TABLE_PREFIX}addons` ADD UNIQUE `ident` ( `directory` );
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `groups`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}groups`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}groups` (
+  `group_id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `system_permissions` text{FIELD_COLLATION} NOT NULL,
+  `module_permissions` text{FIELD_COLLATION} NOT NULL,
+  `template_permissions` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`group_id`)
+){TABLE_ENGINE};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `pages`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}pages`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}pages` (
+  `page_id` int(11) NOT NULL AUTO_INCREMENT,
+  `parent` int(11) NOT NULL DEFAULT '0',
+  `root_parent` int(11) NOT NULL DEFAULT '0',
+  `level` int(11) NOT NULL DEFAULT '0',
+  `link` text{FIELD_COLLATION} NOT NULL,
+  `target` varchar(7){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `page_title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `menu_title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `description` text{FIELD_COLLATION} NOT NULL,
+  `keywords` text{FIELD_COLLATION} NOT NULL,
+  `page_trail` text{FIELD_COLLATION} NOT NULL,
+  `template` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `visibility` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `position` int(11) NOT NULL DEFAULT '0',
+  `menu` int(11) NOT NULL DEFAULT '0',
+  `language` varchar(5){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `searching` int(11) NOT NULL DEFAULT '0',
+  `admin_groups` text{FIELD_COLLATION} NOT NULL,
+  `admin_users` text{FIELD_COLLATION} NOT NULL,
+  `viewing_groups` text{FIELD_COLLATION} NOT NULL,
+  `viewing_users` text{FIELD_COLLATION} NOT NULL,
+  `modified_when` int(11) NOT NULL DEFAULT '0',
+  `modified_by` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`page_id`)
+){TABLE_ENGINE};
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `page_icon` varchar(512){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `page_title`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `menu_icon_0` varchar(512){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `menu_title`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `menu_icon_1` varchar(512){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `menu_icon_0`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `tooltip` varchar(512){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `menu_icon_1`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `custom01` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `modified_by`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `custom02` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `custom01`;
+ALTER TABLE `{TABLE_PREFIX}pages` ADD `page_code` int(11) NOT NULL DEFAULT '0' AFTER `custom02`;
+
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `search`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}search`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}search` (
+  `search_id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `value` text{FIELD_COLLATION} NOT NULL,
+  `extra` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`search_id`)
+){TABLE_ENGINE};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `sections`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}sections`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}sections` (
+  `section_id` int(11) NOT NULL AUTO_INCREMENT,
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `position` int(11) NOT NULL DEFAULT '0',
+  `module` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `block` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `publ_start` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '0',
+  `publ_end` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '0',
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE};
+ALTER TABLE `{TABLE_PREFIX}sections` ADD `title` VARCHAR(70) {FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `publ_end`;
+ALTER TABLE `{TABLE_PREFIX}sections` CHANGE `title` `title` VARCHAR(70) {FIELD_COLLATION} NOT NULL DEFAULT '';
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `settings`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}settings`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}settings` (
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `value` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`name`)
+){TABLE_ENGINE};
+-- Tabellenstruktur für Tabelle `users`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}users`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}users` (
+  `user_id` int(11) NOT NULL AUTO_INCREMENT,
+  `group_id` int(11) NOT NULL DEFAULT '0',
+  `groups_id` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '0',
+  `active` int(11) NOT NULL DEFAULT '0',
+  `username` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `password` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `remember_key` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `last_reset` int(11) NOT NULL DEFAULT '0',
+  `display_name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `email` text{FIELD_COLLATION} NOT NULL,
+  `timezone` int(11) NOT NULL DEFAULT '0',
+  `date_format` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `time_format` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `language` varchar(5){FIELD_COLLATION} NOT NULL DEFAULT 'DE',
+  `home_folder` text{FIELD_COLLATION} NOT NULL,
+  `login_when` int(11) NOT NULL DEFAULT '0',
+  `login_ip` varchar(15){FIELD_COLLATION} NOT NULL DEFAULT '',
+  PRIMARY KEY (`user_id`)
+){TABLE_ENGINE};
+ALTER TABLE `{TABLE_PREFIX}users` ADD `confirm_code` varchar(32){FIELD_COLLATION} NOT NULL DEFAULT '' AFTER `password`;
+ALTER TABLE `{TABLE_PREFIX}users` ADD `confirm_timeout` int(11) NOT NULL DEFAULT '0' AFTER `confirm_code`;
+
+

Property changes on: trunk/install/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/languages.php
===================================================================
--- trunk/install/languages.php	(nonexistent)
+++ trunk/install/languages.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+// -----
+    $getLanguage = function($sFile) {
+        $aRetval = null;
+        $language_code = $language_name = '';
+        include $sFile;
+        if ($language_code && $language_name) {
+            $aRetval = ['code' => $language_code, 'name' => $language_name];
+        }
+        return $aRetval;
+    };
+// -----
+    if (!defined('WB_PATH')){define('WB_PATH', (dirname(__DIR__)));}
+    $aMatches = [];
+    $sOutput = PHP_EOL;
+    $sDefaultLang = isset($_SESSION['default_language']) ? $_SESSION['default_language'] : 'EN';
+    $sLangDir = str_replace('\\', '/', dirname(__DIR__).'/languages/');
+    $sOldWorkingDir = getcwd();
+    chdir($sLangDir);
+    foreach(glob('??.php') as $sFilename) {
+        if (preg_match('/[A-Z]{2}\.php$/s', $sFilename) && is_readable($sLangDir.$sFilename)) {
+            if (!($aMatch = $getLanguage($sLangDir.$sFilename))) { continue; }
+            $aMatch['status'] = ($aMatch['code'] == $sDefaultLang);
+            $sOutput .= '<option value="'.$aMatch['code'].'" '
+                      . ($aMatch['status'] ? 'selected="selected"' : '').'>'
+                      . $aMatch['name'].'</option>'.PHP_EOL;
+        }
+    }
+    chdir($sOldWorkingDir);
+    $sOutput .= '</select>'.PHP_EOL;
+    // output Language options
+    echo $sOutput;
+
+    if (sizeof($aMatches) > 0) {
+        $sOutput = PHP_EOL;
+        foreach ($aMatches as $aMatch) {
+            $sOutput .= '<option value="'.$aMatch['code'].'" '
+                      . ($aMatch['status'] ? 'selected="selected"' : '').'>'
+                      . $aMatch['name'].'</option>'.PHP_EOL;
+        }
+        $sOutput .= '</select>'.PHP_EOL;
+        // output Language options
+        echo $sOutput;
+        unset($sOutput);
+    }
+    unset($sOutput, $aMatch, $getLanguage);

Property changes on: trunk/install/languages.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/install/logo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/install/save.php
===================================================================
--- trunk/install/save.php	(nonexistent)
+++ trunk/install/save.php	(revision 2)
@@ -0,0 +1,502 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         install
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+$debug = false;
+
+if (true === $debug) {
+    ini_set('display_errors', 1);
+    error_reporting(E_ALL);
+}
+// Start a session
+if (!defined('SESSION_STARTED')) {
+    session_name('wb-installer');
+    session_start();
+    define('SESSION_STARTED', true);
+}
+// get random-part for session_name()
+list($usec,$sec) = explode(' ',microtime());
+srand((float)$sec+((float)$usec*100000));
+$session_rand = rand(1000,9999);
+
+// Function to set error
+function set_error($message, $field_name = '') {
+//    global $_POST;
+    if (isset($message) AND $message != '') {
+        // Copy values entered into session so user doesn't have to re-enter everything
+        if (isset($_POST['website_title'])) {
+            $_SESSION['wb_url'] = $_POST['wb_url'];
+            $_SESSION['default_timezone'] = $_POST['default_timezone'];
+            $_SESSION['default_language'] = $_POST['default_language'];
+            if (!isset($_POST['operating_system'])) {
+                $_SESSION['operating_system'] = 'linux';
+            } else {
+                $_SESSION['operating_system'] = $_POST['operating_system'];
+            }
+            if (!isset($_POST['world_writeable'])) {
+                $_SESSION['world_writeable'] = false;
+            } else {
+                $_SESSION['world_writeable'] = true;
+            }
+            $_SESSION['database_host'] = $_POST['database_host'];
+            $_SESSION['database_username'] = $_POST['database_username'];
+            $_SESSION['database_password'] = $_POST['database_password'];
+            $_SESSION['database_name'] = $_POST['database_name'];
+            $_SESSION['table_prefix'] = $_POST['table_prefix'];
+            if (!isset($_POST['install_tables'])) {
+                $_SESSION['install_tables'] = false;
+            } else {
+                $_SESSION['install_tables'] = true;
+            }
+            $_SESSION['website_title'] = $_POST['website_title'];
+            $_SESSION['admin_username'] = $_POST['admin_username'];
+            $_SESSION['admin_email'] = $_POST['admin_email'];
+            $_SESSION['admin_password'] = $_POST['admin_password'];
+            $_SESSION['admin_repassword'] = $_POST['admin_repassword'];
+        }
+        // Set the message
+        $_SESSION['message'] = $message;
+        // Set the element(s) to highlight
+        if ($field_name != '') {
+            $_SESSION['ERROR_FIELD'] = $field_name;
+        }
+        // Specify that session support is enabled
+        $_SESSION['session_support'] = '<font class="good">Enabled</font>';
+        // Redirect to first page again and exit
+        header('Location: index.php?sessions_checked=true');
+        exit();
+    }
+}
+/* */
+
+// Function to workout what the default permissions are for files created by the webserver
+function default_file_mode($temp_dir) {
+    if (version_compare(PHP_VERSION, '5.3.6', '>=') && is_writable($temp_dir)) {
+        $filename = $temp_dir.'/test_permissions.txt';
+        $handle = fopen($filename, 'w');
+        fwrite($handle, 'This file is to get the default file permissions');
+        fclose($handle);
+        $default_file_mode = '0'.substr(sprintf('%o', fileperms($filename)), -3);
+        unlink($filename);
+    } else {
+        $default_file_mode = '0777';
+    }
+    return $default_file_mode;
+}
+
+// Function to workout what the default permissions are for directories created by the webserver
+function default_dir_mode($temp_dir) {
+    if (version_compare(PHP_VERSION, '5.3.6', '>=') && is_writable($temp_dir)) {
+        $dirname = $temp_dir.'/test_permissions/';
+        mkdir($dirname);
+        $default_dir_mode = '0'.substr(sprintf('%o', fileperms($dirname)), -3);
+        rmdir($dirname);
+    } else {
+        $default_dir_mode = '0777';
+    }
+    return $default_dir_mode;
+}
+
+function add_slashes($input) {
+    if (get_magic_quotes_gpc() || ( !is_string($input) )) {
+        return $input;
+    }
+    $output = addslashes($input);
+    return $output;
+}
+
+// Begin check to see if form was even submitted
+// Set error if no post vars found
+if (!isset($_POST['website_title'])) {
+    set_error('Please fill-in the form below');
+}
+// End check to see if form was even submitted
+
+// Begin path and timezone details code
+
+// Check if user has entered the installation url
+if (!isset($_POST['wb_url']) OR $_POST['wb_url'] == '') {
+    set_error('Please enter an absolute URL', 'wb_url');
+} else {
+    $wb_url = $_POST['wb_url'];
+}
+// Remove any slashes at the end of the URL
+$wb_url = rtrim($wb_url, '\\/');
+// Get the default time zone
+if (!isset($_POST['default_timezone']) OR !is_numeric($_POST['default_timezone'])) {
+    set_error('Please select a valid default timezone', 'default_timezone');
+} else {
+    $default_timezone = $_POST['default_timezone']*60*60;
+}
+// End path and timezone details code
+
+// Get the default language
+$sLangDir = str_replace('\\', '/', dirname(dirname(__FILE__)).'/languages/');
+$allowed_languages = preg_replace('/^.*\/([A-Z]{2})\.php$/iU', '\1', glob($sLangDir.'??.php'));
+if (!isset($_POST['default_language']) OR !in_array($_POST['default_language'], $allowed_languages)) {
+    set_error('Please select a valid default backend language','default_language');
+} else {
+    $default_language = $_POST['default_language'];
+    // make sure the selected language file exists in the language folder
+    if (!file_exists('../languages/' .$default_language .'.php')) {
+        set_error('The language file: \'' .$default_language .'.php\' is missing. Upload file to language folder or choose another language','default_language');
+    }
+}
+// End default language details code
+
+// Begin operating system specific code
+// Get operating system
+if (!isset($_POST['operating_system']) OR $_POST['operating_system'] != 'linux' AND $_POST['operating_system'] != 'windows') {
+    set_error('Please select a valid operating system');
+} else {
+    $operating_system = $_POST['operating_system'];
+}
+// Work-out file permissions
+if ($operating_system == 'windows') {
+    $file_mode = '0666';
+    $dir_mode = '0777';
+} elseif (isset($_POST['world_writeable']) AND $_POST['world_writeable'] == 'true') {
+    $file_mode = '0666';
+    $dir_mode = '0777';
+} else {
+    $file_mode = default_file_mode('../temp');
+    $dir_mode = default_dir_mode('../temp');
+}
+// End operating system specific code
+
+// Begin database details code
+// Check if user has entered a database host
+if (!isset($_POST['database_host']) OR $_POST['database_host'] == '') {
+    set_error('Please enter a database host name', 'database_host');
+} else {
+    $database_host = trim($_POST['database_host']);
+}
+// extract port if available
+if (isset($database_port)) { unset($database_port); }
+$aMatches = preg_split('/:/s', $database_host, -1, PREG_SPLIT_NO_EMPTY);
+$database_host = $aMatches[0];
+$database_port = (isset($aMatches[1]) ? (int)$aMatches[1] : ini_get('mysqli.default_port'));
+
+// Check if user has entered a database username
+if (!isset($_POST['database_username']) OR $_POST['database_username'] == '') {
+    set_error('Please enter a database username','database_username');
+} else {
+    $database_username = $_POST['database_username'];
+}
+// Check if user has entered a database password
+if (!isset($_POST['database_password'])) {
+    set_error('Please enter a database password', 'database_password');
+} else {
+    $database_password = $_POST['database_password'];
+}
+// Check if user has entered a database name
+if (!isset($_POST['database_name']) OR $_POST['database_name'] == '') {
+    set_error('Please enter a database name', 'database_name');
+} else {
+    // make sure only allowed characters are specified
+    if(preg_match('/[^a-z0-9_-]+/i', $_POST['database_name'])) {
+        // contains invalid characters (only a-z, A-Z, 0-9 and _ allowed to avoid problems with table/field names)
+        set_error('Only characters a-z, A-Z, 0-9, - and _ allowed in database name.', 'database_name');
+    }
+    $database_name = $_POST['database_name'];
+}
+// Get table prefix
+if (preg_match('/[^a-z0-9_]+/i', $_POST['table_prefix'])) {
+    // contains invalid characters (only a-z, A-Z, 0-9 and _ allowed to avoid problems with table/field names)
+    set_error('Only characters a-z, A-Z, 0-9 and _ allowed in table_prefix.', 'table_prefix');
+} else {
+    $table_prefix = $_POST['table_prefix'];
+}
+
+$install_tables = true;
+// Begin website title code
+// Get website title
+if (!isset($_POST['website_title']) OR $_POST['website_title'] == '') {
+    set_error('Please enter a website title', 'website_title');
+} else {
+    $website_title = add_slashes($_POST['website_title']);
+}
+// End website title code
+
+// Begin admin user details code
+$sClientIp = '';
+// Get admin username
+if (!isset($_POST['admin_username']) OR $_POST['admin_username'] == '') {
+    set_error('Please enter a username for the Administrator account','admin_username');
+} else {
+    $admin_username = $_POST['admin_username'];
+    $sClientIp = (isset($_SERVER['REMOTE_ADDR']))
+                         ? $_SERVER['REMOTE_ADDR'] : '000.000.000.000';
+    $iClientIp = ip2long($sClientIp);
+    $sClientIp = long2ip(($iClientIp & ~65535));
+
+}
+// Get admin email and validate it
+if (!isset($_POST['admin_email']) OR $_POST['admin_email'] == '') {
+    set_error('Please enter an email for the Administrator account','admin_email');
+} else {
+    if(preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i', $_POST['admin_email'])) {
+        $admin_email = $_POST['admin_email'];
+    } else {
+        set_error('Please enter a valid email address for the Administrator account','admin_email');
+    }
+}
+// Get the two admin passwords entered, and check that they match
+if (!isset($_POST['admin_password']) OR $_POST['admin_password'] == '') {
+    set_error('Please enter a password for the Administrator account','admin_password');
+} else {
+    $admin_password = $_POST['admin_password'];
+}
+if (!isset($_POST['admin_repassword']) OR $_POST['admin_repassword'] == '') {
+    set_error('Please make sure you re-enter the password for the Administrator account','admin_repassword');
+} else {
+    $admin_repassword = $_POST['admin_repassword'];
+}
+if ($admin_password != $admin_repassword) {
+    set_error('Sorry, the two Administrator account passwords you entered do not match','admin_repassword');
+}
+
+$database_charset = 'utf8';
+// End admin user details code
+
+$getNewVersion = function () {
+    $sVersionFile = file_get_contents(dirname(__DIR__).'/admin/interface/version.php');
+    $sPattern = '=define\s*\(\'VERSION\'\,\s*\'([^\']*)\'=is';
+    $sVersion = ((preg_match($sPattern, $sVersionFile, $aMatches)) ? $aMatches[1] : '???');
+    return $sVersion;
+};
+// build name and content of the config file
+$sFileMarker = '*** auto generated config file for '.$getNewVersion();
+$config_filename = dirname(dirname(__FILE__)).'/config.php';
+$config_content
+    = '<?php'."\n"
+    . '/*'."\n"
+    . ' '.$sFileMarker."\n"
+    . ' *** WebsiteBaker '.$getNewVersion()."\n"
+    . ' *** created at '.date('Y-m-d h:i:s e')."\n"
+    . ' */'."\n"
+    . '// define(\'DEBUG\', false);'."\n"
+    . 'define(\'DB_TYPE\', \'mysqli\');'."\n"
+    . 'define(\'DB_HOST\', \''.$database_host.'\');'."\n"
+    . 'define(\'DB_PORT\', \''.sprintf('%04d', $database_port).'\');'."\n"
+    . 'define(\'DB_NAME\', \''.$database_name.'\');'."\n"
+    . 'define(\'DB_USERNAME\', \''.$database_username.'\');'."\n"
+    . 'define(\'DB_PASSWORD\', \''.$database_password.'\');'."\n"
+    . 'define(\'DB_CHARSET\', \''.$database_charset.'\');'."\n"
+    . 'define(\'TABLE_PREFIX\', \''.$table_prefix.'\');'."\n"
+   . "\n"
+    . 'define(\'WB_URL\', \''.$wb_url.'\'); '
+    . '// no trailing slash or backslash!!'."\n"
+    . 'define(\'ADMIN_DIRECTORY\', \'admin\'); '
+    . '// no leading/trailing slash or backslash!! A simple directory name only!!'."\n";
+unset($getNewVersion);
+// Check if the file exists and is writable first.
+$sMsg = '';
+if (is_writable($config_filename)) {
+    // try to write file
+    if (file_put_contents($config_filename, $config_content) === false) {
+        $sMsg = 'Cannot write to the configuration file <'.$config_filename.'>';
+    }
+} else {
+    $sMsg = 'The configuration file <'.$config_filename.'> is missing or not writable.<br />'
+          . 'Change its permissions so it is, then re-run step 4.';
+}
+if ($sMsg) { set_error($sMsg); } // if something gone wrong, break with message
+// include config file to set constants
+include_once($config_filename);
+// now we can complete the config file
+$config_content
+    = "\n".'require_once __DIR__.\'/framework/initialize.php\';'."\n"
+    . '// --- end of file ----------------------------------'."\n";
+// no errorhandling needed. 15 lines before we already wrote to this file successful!
+file_put_contents($config_filename, $config_content, FILE_APPEND);
+
+// Define additional configuration constants
+define('WB_PATH', dirname(dirname(__FILE__)));
+define('ADMIN_PATH', WB_PATH.'/'.ADMIN_DIRECTORY);
+define('ADMIN_URL', WB_URL.'/'.ADMIN_DIRECTORY);
+require(ADMIN_PATH.'/interface/version.php');
+// *** initialize Exception handling
+if(!function_exists('globalExceptionHandler')) {
+    include(WB_PATH.'/framework/globalExceptionHandler.php');
+}
+
+// Try connecting to database
+if (!file_exists(WB_PATH.'/framework/class.database.php')) {
+    set_error('It appears the Absolute path that you entered is incorrect or file \'class.database.php\' is missing!');
+}
+include(WB_PATH.'/framework/class.database.php');
+try {
+    $database = new database();
+} catch (DatabaseException $e) {
+    $sMsg = 'Database host name, username and/or password incorrect.<br />MySQL Error:<br />'
+          . $e->getMessage();
+    set_error($sMsg);
+}
+if (!defined('WB_INSTALL_PROCESS')) {
+    define ('WB_INSTALL_PROCESS', true);
+}
+
+/*****************************
+Begin Create Database Tables
+*****************************/
+$sInstallDir = dirname(__FILE__);
+if (is_readable($sInstallDir.'/install-struct.sql')) {
+    if (! $database->SqlImport($sInstallDir.'/install-struct.sql', TABLE_PREFIX, false)) {
+        set_error('unable to import \'install/install-struct.sql\'');
+    }
+} else {
+    set_error('unable to read file \'install/install-struct.sql\'');
+}
+if (is_readable($sInstallDir.'/install-data.sql')) {
+    if (! $database->SqlImport($sInstallDir.'/install-data.sql', TABLE_PREFIX, false )) {
+        set_error('unable to import \'install/install-data.sql\'');
+    }
+} else {
+    set_error('unable to read file \'install/install-data.sql\'');
+}
+$sql = // add settings from install input
+'INSERT INTO `'.TABLE_PREFIX.'settings` (`name`, `value`) VALUES '
+    .'(\'wb_version\', \''.VERSION.'\'),'
+    .'(\'wb_revision\', \''.REVISION.'\'),'
+    .'(\'wb_sp\', \''.SP.'\'),'
+    .'(\'website_title\', \''.$website_title.'\'),'
+    .'(\'default_language\', \''.$default_language.'\'),'
+    .'(\'app_name\', \'wb-'.$session_rand.'\'),'
+    .'(\'default_timezone\', \''.$default_timezone.'\'),'
+    .'(\'operating_system\', \''.$operating_system.'\'),'
+    .'(\'string_dir_mode\', \''.$dir_mode.'\'),'
+    .'(\'string_file_mode\', \''.$file_mode.'\'),'
+    .'(\'server_email\', \''.$admin_email.'\')';
+if (! ($database->query($sql))) {
+    $msg = $database->get_error();
+    set_error('unable to write \'install presets\' into table \'settings\'<br />'.$msg);
+}
+
+$sql = // add the Admin user
+     'INSERT INTO `'.TABLE_PREFIX.'users` SET '
+    .    '`group_id`=1, '
+    .    '`groups_id`=\'1\', '
+    .    '`active`=\'1\', '
+    .    '`username`=\''.$admin_username.'\', '
+    .    '`password`=\''.md5($admin_password).'\', '
+    .    '`remember_key`=\'\', '
+    .    '`last_reset`=0, '
+    .    '`display_name`=\'Administrator\', '
+    .    '`email`=\''.$admin_email.'\', '
+    .    '`timezone`=\''.$default_timezone.'\', '
+    .    '`date_format`=\'M d Y\', '
+    .    '`time_format`=\'g:i A\', '
+    .    '`language`=\''.$default_language.'\', '
+    .    '`home_folder`=\'\', '
+    .    '`login_when`=\''.time().'\', '
+    .    '`login_ip`=\''.$sClientIp.'\' '
+    .    '';
+if (! ($database->query($sql))) {
+    set_error('unable to write Administrator account into table \'users\'');
+}
+/**********************
+END OF TABLES IMPORT
+**********************/
+
+// initialize the system
+include(WB_PATH.'/framework/initialize.php');
+
+//$sSecMod = (defined('SECURE_FORM_MODULE') && SECURE_FORM_MODULE != '') ? '.'.SECURE_FORM_MODULE : '';
+//$sSecMod = WB_PATH.'/framework/SecureForm'.$sSecMod.'.php';
+//require_once($sSecMod);
+
+require_once(WB_PATH.'/framework/class.admin.php');
+/***********************
+// Dummy class to allow modules' install scripts to call $admin->print_error
+***********************/
+class admin_dummy extends admin
+{
+    public $error='';
+    public function print_error($message, $link = 'index.php', $auto_footer = true)
+    {
+        $this->error=$message;
+    }
+}
+
+// Include WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+require_once(WB_PATH.'/framework/Login.php');
+// Include the PclZip class file (thanks to
+require_once(WB_PATH.'/include/pclzip/pclzip.lib.php');
+
+$admin = new admin_dummy('Start','',false,false);
+
+// Load addons into DB
+$dirs['modules']   = WB_PATH.'/modules/';
+$dirs['templates'] = WB_PATH.'/templates/';
+$dirs['languages'] = WB_PATH.'/languages/';
+
+foreach ($dirs as $type => $dir) {
+    if ($handle = opendir($dir)) {
+        while (false !== ($file = readdir($handle))) {
+            if ($file != '' AND substr($file, 0, 1) != '.' AND $file != 'admin.php' AND $file != 'index.php') {
+                // Get addon type
+                if ($type == 'modules') {
+                    load_module($dir.'/'.$file, true);
+                    // Pretty ugly hack to let modules run $admin->set_error
+                    // See dummy class definition admin_dummy above
+                    if ($admin->error!='') {
+                        set_error($admin->error);
+                    }
+                } elseif ($type == 'templates') {
+                    load_template($dir.'/'.$file);
+                } elseif ($type == 'languages') {
+                    load_language($dir.'/'.$file);
+                }
+            }
+        }
+    closedir($handle);
+    }
+}
+// Check if there was a database error
+if ($database->is_error()) {
+    set_error($database->get_error());
+}
+
+$ThemeUrl = WB_URL.$admin->correct_theme_source('warning.html');
+// Setup template object, parse vars to it, then parse it
+$ThemePath = realpath(WB_PATH.$admin->correct_theme_source('login.htt'));
+
+// Log the user in and go to Website Baker Administration
+$thisApp = new Login(
+        array(
+                "MAX_ATTEMPS" => "50",
+                "WARNING_URL" => $ThemeUrl."/warning.html",
+                "USERNAME_FIELDNAME" => 'admin_username',
+                "PASSWORD_FIELDNAME" => 'admin_password',
+                "REMEMBER_ME_OPTION" => false,
+                "MIN_USERNAME_LEN" => "2",
+                "MIN_PASSWORD_LEN" => "3",
+                "MAX_USERNAME_LEN" => "30",
+                "MAX_PASSWORD_LEN" => "30",
+                'LOGIN_URL' => ADMIN_URL."/login/index.php",
+                'DEFAULT_URL' => ADMIN_URL."/start/index.php",
+                'TEMPLATE_DIR' => $ThemePath,
+                'TEMPLATE_FILE' => 'login.htt',
+                'FRONTEND' => false,
+                'FORGOTTEN_DETAILS_APP' => ADMIN_URL."/login/forgot/index.php",
+                'USERS_TABLE' => TABLE_PREFIX."users",
+                'GROUPS_TABLE' => TABLE_PREFIX."groups",
+        )
+);

Property changes on: trunk/install/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/install/stylesheet.css
===================================================================
--- trunk/install/stylesheet.css	(nonexistent)
+++ trunk/install/stylesheet.css	(revision 2)
@@ -0,0 +1,198 @@
+@charset "UTF-8";
+/* <![CDATA[ */
+/*
+*/
+* { margin :0px auto; padding :0px; }
+* html body * { overflow :visible; }
+
+html {
+    padding:0;
+    margin:0;
+    border:0;
+    font-size:85%; font-family: Arial, Verdana, Helvetica, sans-serif;
+    color: #202020;
+    overflow :-moz-scrollbars-vertical;
+    overflow-x :auto;
+}
+table {font-size: 1em; border-collapse: collapse; width: 100%;}
+body {
+    padding: 0; border:0; margin: 0;
+    background: url('background.png') repeat-x 0px 0px;
+    background-color: #a8bccb;
+    height: 101%;
+}
+
+div.body {
+    width: 60em;
+    margin: 2em auto;
+    background-color: #ffffff;
+    border: solid 1px #305c8d;
+    padding: 20px 20px 5px 20px;
+    border-radius: 1%;
+    -webkit-box-shadow: 2px 2px 15px -2px rgba(0,0,0,0.75);
+    -moz-box-shadow: 2px 2px 15px -2px rgba(0,0,0,0.75);
+    box-shadow: 2px 2px 15px -2px rgba(0,0,0,0.75);
+}
+
+.welcome {
+  color: #6F7374;
+  padding: 5px; 
+  text-align: center; 
+  font-size: 1.525em; 
+  font-weight: bold;
+  
+}
+div.content {
+    margin-top:20px;
+}
+
+/*
+    TABLE Elements
+*/
+table {
+    background-color: #f8f8ff;
+    margin-top: 15px;
+    margin-bottom: 5px;
+    width: 100%;
+    border-style: solid;
+    border-width: 1px 2px 2px 1px;
+    border-color: #a3baca;
+}
+    table > thead {
+        background-color: #f2f1ff;
+    }
+        table > thead > tr {
+        }
+            table > thead > tr > th {
+                color: #6F7374;
+                font-size: 1.125em;
+                padding: 0.525em 0.2em;
+                text-align: left;
+                border-bottom :1px groove #7E7171; /* #d2d1cc; */
+            }
+            table > thead > tr > td {
+                color: #555758;
+                font-size: 1.08em;
+                padding: 1.2em 1em;
+            }
+    table > tbody {
+        display: block;
+        padding: 0.5em 0;
+    }
+        table > tbody > tr {
+   border-bottom :0px solid #222222; /* #d2d1cc; */
+   padding :0.8em 0 0.2em 0;
+   width :100%;
+}
+            table > tbody > tr > th {
+                font-size: 1em;
+                width: 1%;
+                padding-left: 0.8em; padding-right: 0.8em;
+                vertical-align: top;
+                text-align: right;
+                white-space: nowrap;
+            }
+            table > tbody > tr > td {
+                font-size: 1em;
+                width: 19%;
+                padding-left: 0.8em; padding-right: 0.8em;
+                vertical-align: top;
+                text-align: left;
+            line-height :2em;
+            }
+
+td.step-row {
+   line-height : 3em;
+   color : #666666;
+   font-weight : bold;
+   font-size : 100%;
+}
+td.name { 
+   width : 180px;
+   color: #666666;
+   vertical-align :middle;
+   font-weight : bold;
+   font-size : 90%;
+   float :left;
+ }
+td.value { 
+   width : 60%;
+   vertical-align :middle;
+ }
+td.value input { 
+   width : 100%;
+   vertical-align :middle;
+ }
+ 
+ 
+h1.step-row {
+   margin : 0;
+   display :inline;
+   color : #6699ff;
+}
+/*
+    FORM Elements
+*/
+form { margin: 0; }
+input, select { padding: 2px; border: solid 1px #a3baca; }
+input:focus, select:focus { background: #fdf8e8; }
+input.submit    {
+    color: #305c8d;
+    font-size: 12px;
+    font-weight: bold;
+    text-transform: uppercase;
+    letter-spacing: 1px;
+    padding: 6px;
+    margin: 1em 0;
+    cursor: pointer;
+    border: outset 2px green;
+}
+input.submit:hover  {
+    border-style: inset;
+}
+input.submit.bad {
+    background-color: #fde8e8;
+    border-color: red;
+}
+input.submit.good {
+    background-color: #deffde;
+    border-color: green;
+}
+/*
+    COMMON Elements
+*/
+img {border: none; }
+p  { margin: 11px 0 4px 0 }
+h1 { color: #3a628f; font-size: 1.3em; margin: 10px 0 5px; border-top: medium none }
+a, a:link, a:visited, a:active  { color: #003366; text-decoration: underline }
+a:focus {outline: none; }
+a:hover  { color: #336699 }
+/*
+    HINTS
+*/
+
+.warning, .error {
+    color: #b70000;
+    line-height: 1.2em;
+    background-color: #fde8e8;
+    margin-top: 0.5em;
+    padding: 0.3em 0.5em;
+    border: solid 1px
+}
+.warning {
+    color: #ca6800;
+}
+.bad { color: #b70000; font-weight: bold;}
+.good { color: #118301; font-weight: bold; }
+.warn { color: #ca6800; }
+.hint { color: #464646; font-size: 0.85em; }
+.small { font-size: 0.85em; }
+.italic { font-style: italic; }
+.center { text-align: center; }
+.hide { display: none; }
+/*
+    List Elements
+*/
+ul  { margin: 0; padding: 2px 0 2px 15px; }
+li  { list-style-type: square; margin: 0; }
+/* ************************************************************************** */
Index: trunk/languages/BG.php
===================================================================
--- trunk/languages/BG.php	(nonexistent)
+++ trunk/languages/BG.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'BG';
+$language_name = 'Български'; // Bulgarian
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Hristo Benev(&#1061;&#1088;&#1080;&#1089;&#1090;&#1086; &#1041;&#1077;&#1085;&#1077;&#1074;)';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = '&#1044;&#1086;&#1089;&#1090;&#1098;&#1087;';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1082;&#1080;';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = '&#1047;&#1072;&#1073;&#1088;&#1072;&#1074;&#1080;&#1093; &#1076;&#1072;&#1085;&#1085;&#1080;&#1090;&#1077; &#1079;&#1072; &#1074;&#1093;&#1086;&#1076;';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = '&#1043;&#1088;&#1091;&#1087;&#1080;';
+$MENU['HELP'] = '&#1055;&#1086;&#1084;&#1086;&#1097;';
+$MENU['LANGUAGES'] = '&#1045;&#1079;&#1080;&#1094;&#1080;';
+$MENU['LOGIN'] = '&#1042;&#1093;&#1086;&#1076;';
+$MENU['LOGOUT'] = '&#1048;&#1079;&#1093;&#1086;&#1076;';
+$MENU['MEDIA'] = '&#1052;&#1077;&#1076;&#1080;&#1072;';
+$MENU['MODULES'] = '&#1052;&#1086;&#1076;&#1091;&#1083;&#1080;';
+$MENU['PAGES'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;';
+$MENU['PREFERENCES'] = '&#1055;&#1088;&#1077;&#1076;&#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1085;&#1080;&#1103;';
+$MENU['SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$MENU['START'] = '&#1053;&#1072;&#1095;&#1072;&#1083;&#1086;';
+$MENU['TEMPLATES'] = '&#1064;&#1072;&#1073;&#1083;&#1086;&#1085;&#1080;';
+$MENU['USERS'] = '&#1055;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1080;';
+$MENU['VIEW'] = '&#1042;&#1080;&#1078;';
+$TEXT['ACCOUNT_SIGNUP'] = '&#1056;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['ACTIONS'] = '&#1044;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1103;';
+$TEXT['ACTIVE'] = '&#1040;&#1082;&#1090;&#1080;&#1074;&#1080;&#1088;&#1072;&#1085;';
+$TEXT['ADD'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080; &#1089;&#1077;&#1082;&#1094;&#1080;&#1103;';
+$TEXT['ADMIN'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;';
+$TEXT['ADMINISTRATION'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['ADMINISTRATION_TOOL'] = '&#1048;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090; &#1079;&#1072; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;&#1080;';
+$TEXT['ADVANCED'] = '&#1056;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1072;';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = '&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1077;&#1085;&#1080; &#1079;&#1088;&#1080;&#1090;&#1077;&#1083;&#1080;';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = '&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1080; &#1084;&#1085;&#1086;&#1078;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085; &#1080;&#1079;&#1073;&#1086;&#1088;';
+$TEXT['ALL_WORDS'] = '&#1042;&#1089;&#1080;&#1095;&#1082;&#1080; &#1076;&#1091;&#1084;&#1080;';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = '&#1040;&#1085;&#1086;&#1085;&#1080;&#1084;&#1077;&#1085;';
+$TEXT['ANY_WORDS'] = '&#1050;&#1086;&#1103;&#1090;&#1086; &#1080; &#1076;&#1072; &#1077; &#1076;&#1091;&#1084;&#1072;';
+$TEXT['APP_NAME'] = '&#1048;&#1084;&#1077; &#1085;&#1072; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077;&#1090;&#1086;';
+$TEXT['ARE_YOU_SURE'] = '&#1057;&#1080;&#1075;&#1091;&#1088;&#1085;&#1080; &#1083;&#1080; &#1089;&#1090;&#1077;?';
+$TEXT['AUTHOR'] = '&#1040;&#1074;&#1090;&#1086;&#1088;';
+$TEXT['BACK'] = '&#1053;&#1072;&#1079;&#1072;&#1076;';
+$TEXT['BACKUP'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086; &#1082;&#1086;&#1087;&#1080;&#1077;';
+$TEXT['BACKUP_ALL_TABLES'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086; &#1082;&#1086;&#1087;&#1080;&#1077; &#1085;&#1072; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;&#1080;&#1090;&#1077; &#1074; &#1073;&#1072;&#1079;&#1072;&#1090;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$TEXT['BACKUP_DATABASE'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086; &#1082;&#1086;&#1087;&#1080;&#1077; &#1085;&#1072; &#1073;&#1072;&#1079;&#1072;&#1090;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$TEXT['BACKUP_MEDIA'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086; &#1082;&#1086;&#1087;&#1080;&#1077; - &#1084;&#1077;&#1076;&#1080;&#1103;';
+$TEXT['BACKUP_WB_SPECIFIC'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086; &#1082;&#1086;&#1087;&#1080;&#1077; &#1089;&#1072;&#1084;&#1086; &#1085;&#1072; WB-&#1089;&#1087;&#1077;&#1094;&#1080;&#1092;&#1080;&#1095;&#1085;&#1080; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;&#1080;';
+$TEXT['BASIC'] = '&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1072;';
+$TEXT['BLOCK'] = '&#1041;&#1083;&#1086;&#1082;&#1080;&#1088;&#1072;&#1081;';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = '&#1054;&#1090;&#1082;&#1072;&#1079;';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha &#1087;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072;';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = '&#1057;&#1084;&#1077;&#1085;&#1080;';
+$TEXT['CHANGES'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;';
+$TEXT['CHANGE_SETTINGS'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077;';
+$TEXT['CHARSET'] = '&#1050;&#1086;&#1076;&#1086;&#1074;&#1072; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;&#1072;';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox &#1075;&#1088;&#1091;&#1087;&#1072;';
+$TEXT['CLOSE'] = '&#1047;&#1072;&#1090;&#1074;&#1086;&#1088;&#1080;';
+$TEXT['CODE'] = '&#1050;&#1086;&#1076;';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = '&#1057;&#1074;&#1080;&#1081;';
+$TEXT['COMMENT'] = '&#1050;&#1086;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;';
+$TEXT['COMMENTING'] = '&#1050;&#1086;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$TEXT['COMMENTS'] = '&#1050;&#1086;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;';
+$TEXT['CREATE_FOLDER'] = '&#1057;&#1098;&#1079;&#1076;&#1072;&#1081; &#1087;&#1072;&#1087;&#1082;&#1072;/&#1080;/';
+$TEXT['CURRENT'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072;';
+$TEXT['CURRENT_FOLDER'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['CURRENT_PAGE'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['CURRENT_PASSWORD'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$TEXT['CUSTOM'] = '&#1055;&#1086; &#1084;&#1103;&#1088;&#1082;&#1072;';
+$TEXT['DATABASE'] = '&#1041;&#1072;&#1079;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$TEXT['DATE'] = '&#1044;&#1072;&#1090;&#1072;';
+$TEXT['DATE_FORMAT'] = '&#1060;&#1086;&#1088;&#1084;&#1072;&#1090; &#1076;&#1072;&#1090;&#1072;';
+$TEXT['DEFAULT'] = '&#1055;&#1086; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$TEXT['DEFAULT_CHARSET'] = '&#1050;&#1086;&#1076;&#1086;&#1074;&#1072; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;&#1072; &#1087;&#1086; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$TEXT['DEFAULT_TEXT'] = '&#1058;&#1077;&#1082;&#1089;&#1090; &#1087;&#1086; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$TEXT['DELETE'] = '&#1048;&#1079;&#1090;&#1088;&#1080;&#1081;';
+$TEXT['DELETED'] = '&#1048;&#1079;&#1090;&#1088;&#1080;&#1090;&#1072;';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = '&#1054;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['DESIGNED_FOR'] = '&#1053;&#1072;&#1087;&#1088;&#1072;&#1074;&#1077;&#1085; &#1079;&#1072;';
+$TEXT['DIRECTORIES'] = '&#1055;&#1072;&#1087;&#1082;&#1080;';
+$TEXT['DIRECTORY_MODE'] = '&#1056;&#1077;&#1078;&#1080;&#1084; &#1087;&#1072;&#1087;&#1082;&#1080;';
+$TEXT['DISABLED'] = '&#1044;&#1077;&#1072;&#1082;&#1090;&#1080;&#1074;&#1080;&#1088;&#1072;&#1085;';
+$TEXT['DISPLAY_NAME'] = '&#1055;&#1086;&#1082;&#1072;&#1078;&#1080; &#1080;&#1084;&#1077;';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Email &#1072;&#1076;&#1088;&#1077;&#1089;';
+$TEXT['EMPTY_TRASH'] = '&#1048;&#1079;&#1087;&#1088;&#1072;&#1079;&#1085;&#1080; &#1082;&#1086;&#1096;&#1095;&#1077;&#1090;&#1086;';
+$TEXT['ENABLED'] = '&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1077;&#1085;';
+$TEXT['END'] = '&#1050;&#1088;&#1072;&#1081;';
+$TEXT['ERROR'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072;';
+$TEXT['EXACT_MATCH'] = '&#1058;&#1086;&#1095;&#1085;&#1086; &#1089;&#1098;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['EXECUTE'] = '&#1048;&#1079;&#1087;&#1098;&#1083;&#1085;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['EXPAND'] = '&#1056;&#1072;&#1079;&#1096;&#1080;&#1088;&#1080;';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = '&#1055;&#1086;&#1083;&#1077;';
+$TEXT['FILE'] = '&#1060;&#1072;&#1081;&#1083;';
+$TEXT['FILES'] = '&#1060;&#1072;&#1081;&#1083;&#1086;&#1074;&#1077;';
+$TEXT['FILESYSTEM_PERMISSIONS'] = '&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1077;&#1085;&#1080;&#1103; - &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1072; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072;';
+$TEXT['FILE_MODE'] = '&#1060;&#1072;&#1081;&#1083;&#1086;&#1074; &#1088;&#1077;&#1078;&#1080;&#1084;';
+$TEXT['FINISH_PUBLISHING'] = '&#1050;&#1088;&#1072;&#1081; &#1085;&#1072; &#1087;&#1091;&#1073;&#1083;&#1080;&#1082;&#1091;&#1074;&#1072;&#1085;&#1077;';
+$TEXT['FOLDER'] = '&#1055;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['FOLDERS'] = '&#1055;&#1072;&#1087;&#1082;&#1080;';
+$TEXT['FOOTER'] = 'Footer';
+$TEXT['FORGOTTEN_DETAILS'] = '&#1047;&#1072;&#1073;&#1088;&#1072;&#1074;&#1077;&#1085;&#1080; &#1076;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080;?';
+$TEXT['FORGOT_DETAILS'] = '&#1047;&#1072;&#1073;&#1088;&#1072;&#1074;&#1077;&#1085;&#1080; &#1076;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080;?';
+$TEXT['FROM'] = '&#1054;&#1090;';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = '&#1055;&#1098;&#1083;&#1085;&#1086; &#1080;&#1084;&#1077;';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = '&#1043;&#1088;&#1091;&#1087;&#1072;';
+$TEXT['HEADER'] = 'Header';
+$TEXT['HEADING'] = 'Heading';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = '&#1042;&#1080;&#1089;&#1086;&#1095;&#1080;&#1085;&#1072;';
+$TEXT['HIDDEN'] = '&#1057;&#1082;&#1088;&#1080;&#1090;';
+$TEXT['HIDE'] = '&#1057;&#1082;&#1088;&#1080;&#1081;';
+$TEXT['HIDE_ADVANCED'] = '&#1057;&#1082;&#1088;&#1080;&#1081; &#1088;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1090;&#1077; &#1086;&#1087;&#1094;&#1080;&#1080;';
+$TEXT['HOME'] = '&#1053;&#1072;&#1095;&#1072;&#1083;&#1086;';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Homepage Redirection';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = '&#1048;&#1082;&#1086;&#1085;&#1072;';
+$TEXT['IMAGE'] = '&#1050;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1072;';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081;';
+$TEXT['INSTALLATION'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['INSTALLATION_PATH'] = '&#1055;&#1098;&#1090; - &#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['INSTALLATION_URL'] = 'URL - &#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['INTRO_PAGE'] = '&#1042;&#1098;&#1074;&#1077;&#1078;&#1076;&#1072;&#1097;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = '&#1050;&#1083;&#1102;&#1095;&#1086;&#1074;&#1080; &#1076;&#1091;&#1084;&#1080;';
+$TEXT['LANGUAGE'] = '&#1045;&#1079;&#1080;&#1082;';
+$TEXT['LAST_UPDATED_BY'] = '&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1086; &#1086;&#1073;&#1085;&#1086;&#1074;&#1077;&#1085; &#1086;&#1090;';
+$TEXT['LENGTH'] = '&#1044;&#1098;&#1083;&#1078;&#1080;&#1085;&#1072;';
+$TEXT['LEVEL'] = '&#1053;&#1080;&#1074;&#1086;';
+$TEXT['LINK'] = '&#1042;&#1088;&#1098;&#1079;&#1082;&#1072;';
+$TEXT['LINUX_UNIX_BASED'] = '&#1051;&#1080;&#1085;&#1091;&#1082;&#1089;/&#1070;&#1085;&#1080;&#1082;&#1089; &#1073;&#1072;&#1079;&#1080;&#1088;&#1072;&#1085;&#1072;';
+$TEXT['LIST_OPTIONS'] = '&#1057;&#1087;&#1080;&#1089;&#1098;&#1082; - &#1086;&#1087;&#1094;&#1080;&#1080;';
+$TEXT['LOGGED_IN'] = 'Logged-In';
+$TEXT['LOGIN'] = '&#1042;&#1093;&#1086;&#1076;';
+$TEXT['LONG'] = '&#1044;&#1098;&#1083;&#1098;&#1075;';
+$TEXT['LONG_TEXT'] = '&#1044;&#1098;&#1083;&#1098;&#1075; &#1090;&#1077;&#1082;&#1089;&#1090;';
+$TEXT['LOOP'] = 'Loop';
+$TEXT['MAIN'] = '&#1054;&#1089;&#1085;&#1086;&#1074;&#1077;&#1085;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['MANAGE_GROUPS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1075;&#1088;&#1091;&#1087;&#1080;';
+$TEXT['MANAGE_USERS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1080;';
+$TEXT['MATCH'] = '&#1055;&#1086;&#1076;&#1086;&#1073;&#1077;&#1085;';
+$TEXT['MATCHING'] = '&#1057;&#1098;&#1074;&#1087;&#1072;&#1076;&#1072;';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = '&#1052;&#1072;&#1082;&#1089;. &#1055;&#1086;&#1076;&#1072;&#1074;&#1072;&#1085;&#1080;&#1103; &#1079;&#1072; &#1095;&#1072;&#1089;';
+$TEXT['MEDIA_DIRECTORY'] = '&#1055;&#1072;&#1087;&#1082;&#1072; &#1084;&#1077;&#1076;&#1080;&#1103;';
+$TEXT['MENU'] = '&#1052;&#1077;&#1085;&#1102;';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = '&#1047;&#1072;&#1075;&#1083;&#1072;&#1074;&#1080;&#1077; &#1085;&#1072; &#1084;&#1077;&#1085;&#1102;&#1090;&#1086;';
+$TEXT['MESSAGE'] = '&#1057;&#1098;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['MODIFY'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;';
+$TEXT['MODIFY_CONTENT'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1089;&#1098;&#1076;&#1098;&#1088;&#1078;&#1072;&#1085;&#1080;&#1077;&#1090;&#1086;';
+$TEXT['MODIFY_SETTINGS'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077;';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = '&#1055;&#1088;&#1072;&#1074;&#1072; &#1084;&#1086;&#1076;&#1091;&#1083;&#1080;';
+$TEXT['MORE'] = '&#1055;&#1086;&#1074;&#1077;&#1095;&#1077;';
+$TEXT['MOVE_DOWN'] = '&#1053;&#1072;&#1076;&#1086;&#1083;&#1091;';
+$TEXT['MOVE_UP'] = '&#1053;&#1072;&#1075;&#1086;&#1088;&#1077;';
+$TEXT['MULTIPLE_MENUS'] = '&#1052;&#1085;&#1086;&#1078;&#1077;&#1089;&#1090;&#1074;&#1086; &#1084;&#1077;&#1085;&#1102;&#1090;&#1072;';
+$TEXT['MULTISELECT'] = 'Multi-select';
+$TEXT['NAME'] = '&#1048;&#1084;&#1077;';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = '&#1048;&#1089;&#1082;&#1072;&#1090;&#1077; &#1076;&#1072; &#1074;&#1083;&#1077;&#1079;&#1077;&#1090;&#1077;?';
+$TEXT['NEW_PASSWORD'] = '&#1053;&#1086;&#1074;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$TEXT['NEW_WINDOW'] = '&#1053;&#1086;&#1074; &#1087;&#1088;&#1086;&#1079;&#1086;&#1088;&#1077;&#1094;';
+$TEXT['NEXT'] = '&#1057;&#1083;&#1077;&#1076;&#1074;&#1072;&#1097;';
+$TEXT['NEXT_PAGE'] = '&#1057;&#1083;&#1076;&#1074;&#1072;&#1097;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['NO'] = '&#1053;&#1077;';
+$TEXT['NONE'] = '&#1053;&#1080;&#1097;&#1086;';
+$TEXT['NONE_FOUND'] = '&#1053;&#1080;&#1097;&#1086; &#1085;&#1077; &#1077; &#1085;&#1072;&#1084;&#1077;&#1088;&#1077;&#1085;&#1086;';
+$TEXT['NOT_FOUND'] = '&#1053;&#1077; &#1077; &#1085;&#1072;&#1084;&#1077;&#1088;&#1077;&#1085;';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = '&#1053;&#1103;&#1084;&#1072; &#1088;&#1077;&#1079;&#1091;&#1083;&#1090;&#1072;&#1090;&#1080;';
+$TEXT['OF'] = '&#1054;&#1090;';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = '&#1054;&#1087;&#1094;&#1080;&#1103;';
+$TEXT['OTHERS'] = '&#1044;&#1088;&#1091;&#1075;&#1080;';
+$TEXT['OUT_OF'] = '&#1086;&#1090;';
+$TEXT['OVERWRITE_EXISTING'] = '&#1055;&#1088;&#1077;&#1079;&#1072;&#1087;&#1080;&#1096;&#1080; &#1089;&#1098;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1074;&#1072;&#1097;';
+$TEXT['PAGE'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['PAGES_DIRECTORY'] = '&#1055;&#1072;&#1087;&#1082;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = '&#1056;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1077;&#1079;&#1080;&#1094;&#1080;';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Page Level Limit';
+$TEXT['PAGE_SPACER'] = 'Page Spacer';
+$TEXT['PAGE_TITLE'] = '&#1047;&#1072;&#1075;&#1083;&#1072;&#1074;&#1080;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072;';
+$TEXT['PAGE_TRASH'] = 'Page Trash';
+$TEXT['PARENT'] = '&#1056;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;';
+$TEXT['PASSWORD'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$TEXT['PATH'] = '&#1055;&#1098;&#1090;';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Error Reporting Level';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = '&#1052;&#1086;&#1083;&#1103; &#1080;&#1079;&#1073;&#1077;&#1088;&#1077;&#1090;&#1077;';
+$TEXT['POST'] = '&#1054;&#1089;&#1090;&#1072;&#1074;&#1080;';
+$TEXT['POSTS_PER_PAGE'] = 'Posts Per Page';
+$TEXT['POST_FOOTER'] = 'Post Footer';
+$TEXT['POST_HEADER'] = 'Post Header';
+$TEXT['PREVIOUS'] = '&#1055;&#1088;&#1077;&#1076;&#1080;&#1096;&#1077;&#1085;';
+$TEXT['PREVIOUS_PAGE'] = '&#1055;&#1088;&#1077;&#1076;&#1080;&#1096;&#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['PRIVATE'] = '&#1047;&#1072;&#1082;&#1088;&#1080;&#1090; &#1076;&#1086;&#1089;&#1090;&#1098;&#1087;';
+$TEXT['PRIVATE_VIEWERS'] = '&#1047;&#1072;&#1082;&#1088;&#1080;&#1090; &#1076;&#1086;&#1089;&#1090;&#1098;&#1087;';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = '&#1055;&#1091;&#1073;&#1083;&#1080;&#1095;&#1085;&#1072;';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Button &#1075;&#1088;&#1091;&#1087;&#1072;';
+$TEXT['READ'] = '&#1063;&#1077;&#1090;&#1077;&#1085;&#1077;';
+$TEXT['READ_MORE'] = '&#1055;&#1088;&#1086;&#1095;&#1077;&#1090;&#1080; &#1087;&#1086;&#1074;&#1077;&#1095;&#1077;';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = '&#1056;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1072;&#1085;';
+$TEXT['REGISTERED_VIEWERS'] = '&#1056;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1072;&#1085;&#1080; &#1079;&#1088;&#1080;&#1090;&#1077;&#1083;&#1080;';
+$TEXT['RELOAD'] = '&#1054;&#1073;&#1085;&#1086;&#1074;&#1080;';
+$TEXT['REMEMBER_ME'] = '&#1047;&#1072;&#1087;&#1086;&#1084;&#1085;&#1080; &#1084;&#1077;';
+$TEXT['RENAME'] = '&#1055;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1091;&#1074;&#1072;&#1081;';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = '&#1047;&#1072;&#1076;&#1098;&#1083;&#1078;&#1080;&#1090;&#1077;&#1083;&#1085;&#1086;';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = '&#1053;&#1091;&#1083;&#1080;&#1088;&#1072;&#1081;';
+$TEXT['RESIZE'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;&#1072;';
+$TEXT['RESIZE_IMAGE_TO'] = 'Resize Image To';
+$TEXT['RESTORE'] = '&#1042;&#1098;&#1079;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;';
+$TEXT['RESTORE_DATABASE'] = '&#1042;&#1098;&#1079;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080; &#1073;&#1072;&#1079;&#1072;&#1090;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$TEXT['RESTORE_MEDIA'] = '&#1042;&#1098;&#1079;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080; &#1084;&#1077;&#1076;&#1080;&#1103;';
+$TEXT['RESULTS'] = '&#1056;&#1077;&#1079;&#1091;&#1083;&#1090;&#1072;&#1090;&#1080;';
+$TEXT['RESULTS_FOOTER'] = 'Results Footer';
+$TEXT['RESULTS_FOR'] = '&#1056;&#1077;&#1079;&#1091;&#1083;&#1090;&#1072;&#1090;&#1080; &#1079;&#1072;';
+$TEXT['RESULTS_HEADER'] = 'Results Header';
+$TEXT['RESULTS_LOOP'] = 'Results Loop';
+$TEXT['RETYPE_NEW_PASSWORD'] = '&#1054;&#1097;&#1077; &#1074;&#1077;&#1076;&#1085;&#1098;&#1078; &#1085;&#1086;&#1074;&#1072;&#1090;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$TEXT['RETYPE_PASSWORD'] = '&#1054;&#1097;&#1077; &#1074;&#1077;&#1076;&#1085;&#1098;&#1078; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;&#1090;&#1072;';
+$TEXT['SAME_WINDOW'] = '&#1057;&#1098;&#1097;&#1080;&#1103; &#1087;&#1088;&#1086;&#1079;&#1086;&#1088;&#1077;&#1094;';
+$TEXT['SAVE'] = '&#1047;&#1072;&#1087;&#1072;&#1079;&#1080;';
+$TEXT['SEARCH'] = '&#1058;&#1098;&#1088;&#1089;&#1080;';
+$TEXT['SEARCHING'] = '&#1058;&#1098;&#1088;&#1089;&#1103;';
+$TEXT['SECTION'] = '&#1057;&#1077;&#1082;&#1094;&#1080;&#1103;';
+$TEXT['SECTION_BLOCKS'] = 'Section Blocks';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = '&#1050;&#1091;&#1090;&#1080;&#1103; &#1080;&#1079;&#1073;&#1086;&#1088;';
+$TEXT['SEND_DETAILS'] = '&#1048;&#1079;&#1087;&#1088;&#1072;&#1090;&#1080; &#1076;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080;&#1090;&#1077;';
+$TEXT['SEPARATE'] = 'Separate';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'Email &#1085;&#1072; &#1089;&#1098;&#1088;&#1074;&#1098;&#1088;&#1072;';
+$TEXT['SERVER_OPERATING_SYSTEM'] = '&#1054;&#1087;&#1077;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1072; &#1089;&#1080;&#1090;&#1077;&#1084;&#1072; &#1085;&#1072; &#1089;&#1098;&#1088;&#1074;&#1098;&#1088;&#1072;';
+$TEXT['SESSION_IDENTIFIER'] = '&#1048;&#1076;&#1077;&#1085;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088; &#1089;&#1077;&#1089;&#1080;&#1103;';
+$TEXT['SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$TEXT['SHORT'] = '&#1050;&#1098;&#1089;';
+$TEXT['SHORT_TEXT'] = '&#1050;&#1088;&#1072;&#1090;&#1098;&#1082; &#1090;&#1077;&#1082;&#1089;&#1090;';
+$TEXT['SHOW'] = '&#1055;&#1086;&#1082;&#1072;&#1078;&#1080;';
+$TEXT['SHOW_ADVANCED'] = '&#1055;&#1086;&#1082;&#1072;&#1078;&#1080; &#1088;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080; &#1086;&#1087;&#1094;&#1080;&#1080;';
+$TEXT['SIGNUP'] = '&#1047;&#1072;&#1087;&#1080;&#1097;&#1080; &#1089;&#1077;';
+$TEXT['SIZE'] = '&#1043;&#1086;&#1083;&#1077;&#1084;&#1080;&#1085;&#1072;';
+$TEXT['SMART_LOGIN'] = 'Smart Login';
+$TEXT['START'] = '&#1053;&#1072;&#1095;&#1072;&#1083;&#1086;';
+$TEXT['START_PUBLISHING'] = '&#1047;&#1072;&#1087;&#1086;&#1095;&#1085;&#1080; &#1087;&#1091;&#1073;&#1083;&#1080;&#1082;&#1091;&#1074;&#1072;&#1085;&#1077;';
+$TEXT['SUBJECT'] = '&#1057;&#1102;&#1078;&#1077;&#1090;';
+$TEXT['SUBMISSIONS'] = '&#1055;&#1086;&#1076;&#1072;&#1076;&#1077;&#1085;&#1080;';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = '&#1055;&#1086;&#1076;&#1072;&#1074;&#1072;&#1085;&#1080;&#1103;&#1090;&#1072; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1080; &#1074; &#1073;&#1072;&#1079;&#1072;&#1090;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$TEXT['SUBMISSION_ID'] = '&#1055;&#1086;&#1076;&#1072;&#1076;&#1077;&#1085; ID';
+$TEXT['SUBMITTED'] = '&#1055;&#1086;&#1076;&#1072;&#1076;&#1077;&#1085;';
+$TEXT['SUCCESS'] = '&#1059;&#1089;&#1087;&#1077;&#1093;';
+$TEXT['SYSTEM_DEFAULT'] = '&#1055;&#1086; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1085;&#1077; &#1085;&#1072; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072;&#1090;&#1072;';
+$TEXT['SYSTEM_PERMISSIONS'] = '&#1057;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1080; &#1087;&#1088;&#1072;&#1074;&#1072;';
+$TEXT['TABLE_PREFIX'] = '&#1055;&#1088;&#1077;&#1092;&#1080;&#1082;&#1089; &#1085;&#1072; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;&#1072;';
+$TEXT['TARGET'] = '&#1062;&#1077;&#1083;';
+$TEXT['TARGET_FOLDER'] = '&#1050;&#1098;&#1084; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['TEMPLATE'] = '&#1064;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$TEXT['TEMPLATE_PERMISSIONS'] = '&#1055;&#1086;&#1079;&#1074;&#1086;&#1083;&#1077;&#1085;&#1080;&#1103; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$TEXT['TEXT'] = '&#1058;&#1077;&#1082;&#1089;&#1090;';
+$TEXT['TEXTAREA'] = '&#1058;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1088;&#1072;&#1085;&#1089;&#1090;&#1074;&#1086;';
+$TEXT['TEXTFIELD'] = '&#1058;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1086; &#1087;&#1086;&#1083;&#1077;';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = '&#1063;&#1072;&#1089;';
+$TEXT['TIMEZONE'] = '&#1042;&#1088;&#1077;&#1084;&#1077;&#1074;&#1072; &#1079;&#1086;&#1085;&#1072;';
+$TEXT['TIME_FORMAT'] = '&#1060;&#1086;&#1088;&#1084;&#1072;&#1090; &#1074;&#1088;&#1077;&#1084;&#1077;';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = '&#1058;&#1080;&#1090;&#1083;&#1072;';
+$TEXT['TO'] = '&#1044;&#1086;';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = '&#1050;&#1086;&#1096;&#1095;&#1077;&#1090;&#1086; &#1080;&#1079;&#1087;&#1088;&#1072;&#1079;&#1085;&#1077;&#1085;&#1086;';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = '&#1058;&#1080;&#1087;';
+$TEXT['UNDER_CONSTRUCTION'] = '&#1042; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089; &#1085;&#1072; &#1089;&#1098;&#1079;&#1076;&#1072;&#1074;&#1072;&#1085;&#1077;';
+$TEXT['UNINSTALL'] = '&#1044;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081;';
+$TEXT['UNKNOWN'] = '&#1053;&#1077;&#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1086;';
+$TEXT['UNLIMITED'] = '&#1041;&#1077;&#1079; &#1083;&#1080;&#1084;&#1080;&#1090;';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = '&#1053;&#1072;&#1075;&#1086;&#1088;&#1077;';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = '&#1050;&#1072;&#1095;&#1080; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1077;';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = '&#1055;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = '&#1055;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072;';
+$TEXT['VERSION'] = '&#1042;&#1077;&#1088;&#1089;&#1080;&#1103;';
+$TEXT['VIEW'] = '&#1055;&#1088;&#1077;&#1075;&#1083;&#1077;&#1076;';
+$TEXT['VIEW_DELETED_PAGES'] = '&#1042;&#1080;&#1079; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;&#1080;&#1090;&#1077; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;';
+$TEXT['VIEW_DETAILS'] = '&#1042;&#1080;&#1078; &#1076;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080;&#1090;&#1077;';
+$TEXT['VISIBILITY'] = '&#1042;&#1080;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = '&#1057;&#1072;&#1081;&#1090;';
+$TEXT['WEBSITE_DESCRIPTION'] = '&#1054;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_FOOTER'] = 'Website Footer';
+$TEXT['WEBSITE_HEADER'] = 'Website Header';
+$TEXT['WEBSITE_KEYWORDS'] = '&#1050;&#1083;&#1102;&#1095;&#1086;&#1074;&#1080; &#1076;&#1091;&#1084;&#1072; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_TITLE'] = '&#1047;&#1072;&#1075;&#1083;&#1072;&#1074;&#1080;&#1077; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WELCOME_BACK'] = '&#1044;&#1086;&#1073;&#1088;&#1077; &#1076;&#1086;&#1096;&#1083;&#1080;';
+$TEXT['WIDTH'] = '&#1064;&#1080;&#1088;&#1080;&#1085;&#1072;';
+$TEXT['WINDOW'] = '&#1055;&#1088;&#1086;&#1079;&#1086;&#1088;&#1077;&#1094;';
+$TEXT['WINDOWS'] = '&#1059;&#1080;&#1085;&#1076;&#1086;&#1091;&#1089;';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'World-writeable file permissions';
+$TEXT['WRITE'] = '&#1047;&#1072;&#1087;&#1080;&#1089;';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;';
+$TEXT['WYSIWYG_STYLE'] = '&#1057;&#1090;&#1080;&#1083; WYSIWYG';
+$TEXT['YES'] = '&#1044;&#1072;';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Add Group';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080; &#1079;&#1072;&#1075;&#1083;&#1072;&#1074;&#1080;&#1077;';
+$HEADING['ADD_PAGE'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['ADD_USER'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;';
+$HEADING['ADMINISTRATION_TOOLS'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1080;&#1074;&#1085;&#1080; &#1080;&#1085;&#1089;&#1090;&#1088;&#1091;&#1084;&#1077;&#1085;&#1090;&#1080;';
+$HEADING['BROWSE_MEDIA'] = '&#1055;&#1088;&#1077;&#1075;&#1083;&#1077;&#1076; &#1085;&#1072; &#1052;&#1077;&#1076;&#1080;&#1103;';
+$HEADING['CREATE_FOLDER'] = '&#1057;&#1098;&#1079;&#1076;&#1072;&#1081; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$HEADING['DEFAULT_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1087;&#1086; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1073;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$HEADING['DELETED_PAGES'] = '&#1048;&#1079;&#1090;&#1088;&#1080;&#1090;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;';
+$HEADING['FILESYSTEM_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1081;&#1082;&#1080; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1072; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1072;';
+$HEADING['GENERAL_SETTINGS'] = '&#1054;&#1073;&#1097;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$HEADING['INSTALL_LANGUAGE'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1077;&#1079;&#1080;&#1082;';
+$HEADING['INSTALL_MODULE'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;';
+$HEADING['INSTALL_TEMPLATE'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = '&#1044;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080; &#1079;&#1072; &#1077;&#1079;&#1080;&#1082;';
+$HEADING['MANAGE_SECTIONS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080;&#1090;&#1077;';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1088;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1090;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['MODIFY_DELETE_GROUP'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;/&#1048;&#1079;&#1090;&#1088;&#1080;&#1081; &#1075;&#1088;&#1091;&#1087;&#1072;';
+$HEADING['MODIFY_DELETE_PAGE'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;/&#1048;&#1079;&#1090;&#1088;&#1080;&#1081; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['MODIFY_DELETE_USER'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;/&#1048;&#1079;&#1090;&#1088;&#1080;&#1081; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;';
+$HEADING['MODIFY_GROUP'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1075;&#1088;&#1091;&#1087;&#1072;';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1074;&#1098;&#1074;&#1077;&#1078;&#1076;&#1072;&#1097;&#1072;&#1090;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['MODIFY_PAGE'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['MODIFY_PAGE_SETTINGS'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$HEADING['MODIFY_USER'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;';
+$HEADING['MODULE_DETAILS'] = '&#1044;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080; &#1079;&#1072; &#1084;&#1086;&#1076;&#1091;&#1083;';
+$HEADING['MY_EMAIL'] = '&#1052;&#1086;&#1103;&#1090; e-mail';
+$HEADING['MY_PASSWORD'] = '&#1052;&#1086;&#1103;&#1090;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$HEADING['MY_SETTINGS'] = '&#1052;&#1086;&#1080;&#1090;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$HEADING['SEARCH_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1090;&#1098;&#1088;&#1089;&#1077;&#1085;&#1077;';
+$HEADING['SERVER_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1089;&#1098;&#1088;&#1074;&#1098;&#1088;';
+$HEADING['TEMPLATE_DETAILS'] = '&#1044;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080; &#1079;&#1072; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$HEADING['UNINSTALL_LANGUAGE'] = '&#1044;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1077;&#1079;&#1080;&#1082;';
+$HEADING['UNINSTALL_MODULE'] = '&#1044;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1084;&#1086;&#1076;&#1091;&#1083;';
+$HEADING['UNINSTALL_TEMPLATE'] = '&#1044;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1081; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = '&#1050;&#1072;&#1095;&#1074;&#1072;&#1085;&#1077; &#1085;&#1072; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1077;';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = '&#1053;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1098;&#1095;&#1085;&#1080; &#1087;&#1088;&#1080;&#1074;&#1080;&#1083;&#1077;&#1075;&#1080;&#1080; &#1079;&#1072; &#1076;&#1072; &#1089;&#1090;&#1077; &#1090;&#1091;&#1082;';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = '&#1057;&#1098;&#1078;&#1072;&#1083;&#1103;&#1074;&#1072;&#1084;&#1077;, &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;&#1090;&#1072; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1085;&#1091;&#1083;&#1080;&#1088;&#1072; &#1087;&#1086;-&#1095;&#1077;&#1089;&#1090;&#1086; &#1086;&#1090; &#1077;&#1076;&#1080;&#1085; &#1087;&#1098;&#1090; &#1085;&#1072; &#1095;&#1072;&#1089;';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = '&#1055;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084; &#1089; &#1080;&#1079;&#1087;&#1088;&#1072;&#1097;&#1072;&#1085;&#1077;&#1090;&#1086; &#1085;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;&#1090;&#1072; &#1087;&#1086; email - &#1082;&#1086;&#1085;&#1090;&#1072;&#1082;&#1090;&#1091;&#1074;&#1072;&#1081;&#1090;&#1077; &#1089;&#1098;&#1089; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1080;&#1103; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1103; email &#1085;&#1077; &#1077; &#1074; &#1073;&#1072;&#1079;&#1072;&#1090;&#1072; &#1076;&#1072;&#1085;&#1085;&#1080;';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; email &#1072;&#1076;&#1088;&#1077;&#1089;';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = '&#1057;&#1098;&#1078;&#1072;&#1083;&#1103;&#1074;&#1072;&#1084;&#1077; ,&#1085;&#1086; &#1085;&#1103;&#1084;&#1072;&#1090;&#1077; &#1088;&#1072;&#1079;&#1088;&#1077;&#1096;&#1077;&#1085;&#1080;&#1077; &#1076;&#1072; &#1074;&#1080;&#1076;&#1080;&#1090;&#1077; &#1090;&#1072;&#1079;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = '&#1042;&#1077;&#1095;&#1077; &#1077; &#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1085;';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1079;&#1072;&#1087;&#1080;&#1089;&#1074;&#1072; &#1074; &#1094;&#1077;&#1083;&#1077;&#1074;&#1072;&#1090;&#1072; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103;';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1076;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1076;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;: &#1080;&#1079;&#1087;&#1088;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083; &#1089;&#1077; &#1080;&#1079;&#1087;&#1086;&#1083;&#1079;&#1074;&#1072; &#1074; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090;&#1072;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'unzip &#1085;&#1072; &#1092;&#1072;&#1081;&#1083;&#1072; &#1085;&#1077;&#1074;&#1098;&#1079;&#1084;&#1086;&#1078;&#1077;&#1085;';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = '&#1060;&#1072;&#1081;&#1083;&#1072; &#1085;&#1077; &#1073;&#1077;&#1096;&#1077; &#1082;&#1072;&#1095;&#1077;&#1085;';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072; &#1087;&#1088;&#1080; &#1086;&#1090;&#1074;&#1072;&#1088;&#1103;&#1085;&#1077; &#1085;&#1072; &#1092;&#1072;&#1081;&#1083;.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = '&#1060;&#1072;&#1081;&#1083;&#1072;, &#1082;&#1086;&#1081;&#1090;&#1086; &#1082;&#1072;&#1095;&#1074;&#1072;&#1090;&#1077; &#1090;&#1088;&#1103;&#1073;&#1074;&#1072; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1074; &#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1103; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;:';
+$MESSAGE['GENERIC_FILE_TYPES'] = '&#1060;&#1072;&#1081;&#1083;&#1072;, &#1082;&#1086;&#1081;&#1090;&#1086; &#1082;&#1072;&#1095;&#1074;&#1072;&#1090;&#1077; &#1090;&#1088;&#1103;&#1073;&#1074;&#1072; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1074; &#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1090;&#1077; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;&#1080;:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = '&#1042;&#1098;&#1088;&#1085;&#1077;&#1090;&#1077; &#1089;&#1077; &#1080; &#1087;&#1086;&#1095;&#1080;&#1083;&#1085;&#1077;&#1090;&#1077; &#1074;&#1089;&#1080;&#1095;&#1082;&#1080; &#1087;&#1086;&#1083;&#1077;&#1090;&#1072;';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = '&#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GENERIC_INVALID'] = '&#1053;&#1077;&#1074;&#1072;&#1083;&#1080;&#1076;&#1077;&#1085; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = '&#1053;&#1077; &#1077; &#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1085;';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = '&#1041;&#1098;&#1076;&#1077;&#1090;&#1077; &#1090;&#1098;&#1088;&#1087;&#1077;&#1083;&#1080;&#1074;&#1080;, &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1086;&#1090;&#1085;&#1077;&#1084;&#1077; &#1074;&#1088;&#1077;&#1084;&#1077;.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = '&#1055;&#1088;&#1086;&#1074;&#1077;&#1088;&#1077;&#1090;&#1077; &#1087;&#1072;&#1082;...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = '&#1044;&#1077;&#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1080;&#1088;&#1072;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GENERIC_UPGRADED'] = '&#1054;&#1073;&#1085;&#1086;&#1074;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = '&#1057;&#1072;&#1081;&#1090;&#1072; &#1077; &#1074; &#1087;&#1088;&#1086;&#1094;&#1077;&#1089; &#1085;&#1072; &#1089;&#1098;&#1079;&#1076;&#1072;&#1074;&#1072;&#1085;&#1077;';
+$MESSAGE['GROUPS_ADDED'] = '&#1043;&#1088;&#1091;&#1087;&#1072;&#1090;&#1072; &#1077; &#1076;&#1086;&#1073;&#1072;&#1074;&#1077;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = '&#1048;&#1089;&#1082;&#1072;&#1090;&#1077; &#1083;&#1080; &#1076;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1077;&#1090;&#1077; &#1080;&#1079;&#1073;&#1088;&#1072;&#1085;&#1072;&#1090;&#1072; &#1075;&#1088;&#1091;&#1087;&#1072; (&#1080; &#1074;&#1089;&#1080;&#1095;&#1082;&#1080; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1080; &#1074; &#1085;&#1077;&#1103;)?';
+$MESSAGE['GROUPS_DELETED'] = '&#1043;&#1088;&#1091;&#1087;&#1072;&#1090;&#1072; &#1073;&#1077; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = '&#1053;&#1103;&#1084;&#1072; &#1080;&#1084;&#1077; &#1085;&#1072; &#1075;&#1088;&#1091;&#1087;&#1072;&#1090;&#1072;';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = '&#1043;&#1088;&#1091;&#1087;&#1072; &#1089; &#1090;&#1086;&#1074;&#1072; &#1080;&#1084;&#1077; &#1074;&#1077;&#1095;&#1077; &#1089;&#1098;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1074;&#1072;';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = '&#1053;&#1103;&#1084;&#1072; &#1075;&#1088;&#1091;&#1087;&#1080;';
+$MESSAGE['GROUPS_SAVED'] = '&#1043;&#1088;&#1091;&#1087;&#1072;&#1090;&#1072; &#1077; &#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072;';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1072;&#1090;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072; &#1077; &#1084;&#1085;&#1086;&#1075;&#1086; &#1076;&#1098;&#1083;&#1075;&#1072;';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1072;&#1090;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072; &#1077; &#1084;&#1085;&#1086;&#1075;&#1086; &#1082;&#1098;&#1089;&#1072;';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = '&#1053;&#1077; &#1074;&#1098;&#1074;&#1077;&#1076;&#1086;&#1093;&#1090;&#1077; &#1088;&#1072;&#1079;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1077;';
+$MESSAGE['MEDIA_BLANK_NAME'] = '&#1053;&#1077; &#1074;&#1098;&#1074;&#1077;&#1076;&#1086;&#1093;&#1090;&#1077; &#1085;&#1086;&#1074;&#1086; &#1080;&#1084;&#1077;';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = '&#1048;&#1079;&#1073;&#1088;&#1072;&#1085;&#1072;&#1090;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;&#1072;';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = '&#1048;&#1079;&#1073;&#1088;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = '&#1055;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1091;&#1074;&#1072;&#1085;&#1077;&#1090;&#1086; &#1085;&#1077;&#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = '&#1057;&#1098;&#1075;&#1091;&#1088;&#1085;&#1080; &#1083;&#1080; &#1089;&#1090;&#1077; &#1095;&#1077; &#1080;&#1089;&#1082;&#1072;&#1090;&#1077; &#1076;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1077;&#1090;&#1077;?';
+$MESSAGE['MEDIA_DELETED_DIR'] = '&#1055;&#1072;&#1087;&#1082;&#1072;&#1090;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;&#1072; &#1091;&#1089;&#1087;&#1103;&#1096;&#1085;&#1086;';
+$MESSAGE['MEDIA_DELETED_FILE'] = '&#1060;&#1072;&#1081;&#1083;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = '&#1055;&#1072;&#1087;&#1082;&#1072;&#1090;&#1072; &#1085;&#1077; &#1089;&#1098;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1074;&#1072;';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1074;&#1082;&#1083;&#1102;&#1095;&#1080;&#1090;&#1077; ../ &#1074; &#1080;&#1084;&#1077; &#1085;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$MESSAGE['MEDIA_DIR_EXISTS'] = '&#1042;&#1077;&#1095;&#1077; &#1080;&#1084;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072; &#1089; &#1090;&#1072;&#1082;&#1086;&#1074;&#1072; &#1080;&#1084;&#1077;';
+$MESSAGE['MEDIA_DIR_MADE'] = '&#1055;&#1072;&#1087;&#1082;&#1072;&#1090;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1098;&#1079;&#1076;&#1072;&#1076;&#1077;&#1085;&#1072;';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = '&#1055;&#1072;&#1087;&#1082;&#1072;&#1090;&#1077; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1089;&#1098;&#1079;&#1076;&#1072;&#1076;&#1077;&#1085;&#1072;';
+$MESSAGE['MEDIA_FILE_EXISTS'] = '&#1042;&#1077;&#1095;&#1077; &#1080;&#1084;&#1072; &#1092;&#1072;&#1081;&#1083; &#1089; &#1090;&#1072;&#1082;&#1086;&#1074;&#1072; &#1080;&#1084;&#1077;';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = '&#1053;&#1103;&#1084;&#1072; &#1090;&#1072;&#1082;&#1098;&#1074; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1074;&#1082;&#1083;&#1102;&#1095;&#1080;&#1090;&#1077; ../ &#1074; &#1080;&#1084;&#1077;&#1090;&#1086;';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1080;&#1079;&#1087;&#1086;&#1083;&#1079;&#1074;&#1072;&#1090;&#1077; index.php &#1082;&#1072;&#1090;&#1086; &#1080;&#1084;&#1077;';
+$MESSAGE['MEDIA_NONE_FOUND'] = '&#1053;&#1103;&#1084;&#1072; &#1084;&#1077;&#1076;&#1080;&#1103; &#1074; &#1090;&#1077;&#1082;&#1091;&#1097;&#1072;&#1090;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = '&#1055;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1091;&#1074;&#1072;&#1085;&#1077;&#1090;&#1086; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' &#1092;&#1072;&#1081;&#1083;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1082;&#1072;&#1095;&#1077;&#1085;';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1074;&#1082;&#1083;&#1102;&#1095;&#1080;&#1090;&#1077; ../ &#1082;&#1072;&#1090;&#1086; &#1094;&#1077;&#1083; &#1085;&#1072; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$MESSAGE['MEDIA_UPLOADED'] = ' &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1077;&#1090;&#1077; &#1073;&#1103;&#1093;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1082;&#1072;&#1095;&#1077;&#1085;&#1080;';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = '&#1057;&#1098;&#1078;&#1072;&#1083;&#1103;&#1074;&#1072;&#1084;&#1077;, &#1090;&#1086;&#1079;&#1080; &#1092;&#1086;&#1088;&#1091;&#1083;&#1103;&#1088; &#1077; &#1087;&#1086;&#1076;&#1072;&#1076;&#1077;&#1085; &#1087;&#1086;&#1074;&#1077;&#1095;&#1077; &#1087;&#1098;&#1090;&#1080; &#1086;&#1090; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1077;&#1085;&#1086;&#1090;&#1086; &#1087;&#1088;&#1077;&#1079; &#1090;&#1086;&#1079;&#1080; &#1095;&#1072;&#1089;. &#1054;&#1087;&#1080;&#1090;&#1072;&#1081;&#1090;&#1077; &#1086;&#1090;&#1085;&#1086;&#1074;&#1077; &#1087;&#1086; &#1074;&#1088;&#1077;&#1084;&#1077; &#1085;&#1072; &#1089;&#1083;&#1077;&#1076;&#1074;&#1072;&#1097;&#1080; &#1095;&#1072;&#1089;.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = '&#1050;&#1086;&#1085;&#1090;&#1088;&#1086;&#1083;&#1085;&#1080;&#1103; &#1085;&#1086;&#1084;&#1077;&#1088; (&#1087;&#1086;&#1079;&#1072;&#1085;&#1090; &#1082;&#1072;&#1090;&#1086; Captcha) &#1077; &#1075;&#1088;&#1077;&#1096;&#1077;&#1085;. &#1040;&#1082;&#1086; &#1080;&#1084;&#1072;&#1090;&#1077; &#1087;&#1088;&#1086;&#1073;&#1083;&#1077;&#1084; &#1089; &#1095;&#1077;&#1090;&#1077;&#1085;&#1077;&#1090;&#1086; &#1085;&#1072; Captcha, &#1080;&#1079;&#1087;&#1088;&#1072;&#1090;&#1077;&#1090;&#1077; e-mail &#1085;&#1072;: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = '&#1058;&#1088;&#1103;&#1073;&#1074;&#1072; &#1076;&#1072; &#1087;&#1086;&#1087;&#1098;&#1083;&#1085;&#1080;&#1090;&#1077; &#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1090;&#1077; &#1087;&#1086;&#1083;&#1077;&#1090;&#1072;';
+$MESSAGE['PAGES_ADDED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1076;&#1086;&#1073;&#1072;&#1074;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Page heading &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1076;&#1086;&#1073;&#1072;&#1074;&#1077;&#1085;';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; &#1080;&#1084;&#1077; &#1085;&#1072; &#1084;&#1077;&#1085;&#1102;&#1090;&#1086;';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; &#1080;&#1084;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072;';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072; &#1087;&#1088;&#1080; &#1089;&#1098;&#1079;&#1076;&#1072;&#1074;&#1072;&#1085;&#1077; &#1085;&#1072; access &#1092;&#1072;&#1081;&#1083; &#1077; &#1087;&#1072;&#1087;&#1082;&#1072; /pages (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1098;&#1095;&#1085;&#1080; &#1087;&#1088;&#1080;&#1074;&#1080;&#1083;&#1077;&#1075;&#1080;&#1080;)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072; &#1087;&#1088;&#1080; &#1080;&#1079;&#1090;&#1088;&#1080;&#1074;&#1072;&#1085;&#1077; &#1085;&#1072; access &#1092;&#1072;&#1081;&#1083; &#1077; &#1087;&#1072;&#1087;&#1082;&#1072; /pages (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1098;&#1095;&#1085;&#1080; &#1087;&#1088;&#1080;&#1074;&#1080;&#1083;&#1077;&#1075;&#1080;&#1080;)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072; &#1087;&#1088;&#1080; &#1087;&#1088;&#1077;&#1087;&#1086;&#1076;&#1088;&#1077;&#1078;&#1076;&#1072;&#1085;&#1077;&#1090;&#1086; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072;';
+$MESSAGE['PAGES_DELETED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090;&#1072; &#1091;&#1089;&#1087;&#1103;&#1096;&#1085;&#1086;';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = '&#1057;&#1080;&#1075;&#1091;&#1088;&#1085;&#1080; &#1083;&#1080; &#1089;&#1090;&#1077; &#1095;&#1077; &#1080;&#1089;&#1082;&#1072;&#1090;&#1077; &#1076;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1077;&#1090;&#1077; &#1080;&#1079;&#1073;&#1088;&#1072;&#1085;&#1072;&#1090;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; (&#1080; &#1074;&#1089;&#1080;&#1095;&#1082;&#1080; &#1087;&#1086;&#1076;&#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = '&#1053;&#1103;&#1084;&#1072;&#1090;&#1077; &#1087;&#1088;&#1080;&#1074;&#1080;&#1083;&#1077;&#1075;&#1080;&#1080; &#1079;&#1072; &#1084;&#1086;&#1076;&#1080;&#1092;&#1080;&#1094;&#1080;&#1088;&#1072;&#1085;&#1077; &#1085;&#1072; &#1090;&#1072;&#1079;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$MESSAGE['PAGES_INTRO_LINK'] = '&#1053;&#1072;&#1090;&#1080;&#1089;&#1085;&#1077;&#1090;&#1077; &#1090;&#1091;&#1082; &#1079;&#1072; &#1076;&#1072; &#1084;&#1086;&#1076;&#1080;&#1092;&#1080;&#1094;&#1080;&#1088;&#1072;&#1090;&#1077; &#1042;&#1098;&#1074;&#1077;&#1078;&#1076;&#1072;&#1097;&#1072;&#1090;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1079;&#1072;&#1087;&#1080;&#1089;&#1074;&#1072; &#1074; &#1092;&#1072;&#1081;&#1083;&#1072; /pages/intro.php (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1098;&#1095;&#1085;&#1080; &#1087;&#1088;&#1080;&#1074;&#1080;&#1083;&#1077;&#1075;&#1080;&#1080;)';
+$MESSAGE['PAGES_INTRO_SAVED'] = '&#1042;&#1098;&#1074;&#1077;&#1078;&#1076;&#1072;&#1097;&#1072;&#1090;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PAGES_LAST_MODIFIED'] = '&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1086; &#1084;&#1086;&#1076;&#1080;&#1092;&#1080;&#1094;&#1080;&#1088;&#1072;&#1085;&#1072; &#1086;&#1090;';
+$MESSAGE['PAGES_NOT_FOUND'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1085;&#1077; &#1077; &#1085;&#1072;&#1084;&#1077;&#1088;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_NOT_SAVED'] = '&#1043;&#1088;&#1077;&#1096;&#1082;&#1072; &#1087;&#1088;&#1080; &#1079;&#1072;&#1087;&#1072;&#1079;&#1074;&#1072;&#1085;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072;';
+$MESSAGE['PAGES_PAGE_EXISTS'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1089; &#1090;&#1072;&#1082;&#1086;&#1074;&#1072; &#1080;&#1084;&#1077; &#1074;&#1077;&#1095;&#1077; &#1089;&#1098;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1074;&#1072;';
+$MESSAGE['PAGES_REORDERED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1077; &#1087;&#1088;&#1077;&#1087;&#1086;&#1076;&#1088;&#1077;&#1076;&#1077;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PAGES_RESTORED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1074;&#1098;&#1079;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = '&#1042;&#1098;&#1088;&#1085;&#1080; &#1089;&#1077; &#1082;&#1098;&#1084; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;';
+$MESSAGE['PAGES_SAVED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1090;&#1072; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1080; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077; &#1085;&#1072; &#1089;&#1077;&#1082;&#1094;&#1080;&#1103;&#1090;&#1072; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1080; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1072;&#1090;&#1072; &#1090;&#1077;&#1082;&#1091;&#1097;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072; &#1085;&#1077; &#1077; &#1082;&#1086;&#1088;&#1077;&#1082;&#1090;&#1085;&#1072;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = '&#1044;&#1077;&#1090;&#1072;&#1081;&#1083;&#1080;&#1090;&#1077; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1080; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email-&#1072; &#1086;&#1073;&#1085;&#1086;&#1074;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1072;&#1090;&#1072; &#1089;&#1084;&#1077;&#1085;&#1077;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;: &#1040;&#1082;&#1086; &#1085;&#1072;&#1090;&#1080;&#1089;&#1085;&#1077;&#1090;&#1077; &#1090;&#1086;&#1079;&#1080; &#1073;&#1091;&#1090;&#1086;&#1085; &#1075;&#1091;&#1073;&#1080;&#1090;&#1077; &#1074;&#1089;&#1080;&#1095;&#1082;&#1080; &#1085;&#1077;&#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080; &#1087;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080;';
+$MESSAGE['SETTINGS_SAVED'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077; &#1089;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1079;&#1072;&#1087;&#1072;&#1079;&#1077;&#1085;&#1080;';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = '&#1050;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1073;&#1098;&#1076;&#1077; &#1086;&#1090;&#1074;&#1086;&#1088;&#1077;&#1085;';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = '&#1053;&#1077; &#1084;&#1086;&#1078;&#1077; &#1076;&#1072; &#1089;&#1077; &#1079;&#1072;&#1087;&#1080;&#1089;&#1074;&#1072; &#1074; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;: &#1090;&#1086;&#1074;&#1072; &#1089;&#1077; &#1087;&#1088;&#1077;&#1087;&#1086;&#1088;&#1098;&#1095;&#1074;&#1072; &#1089;&#1072;&#1084;&#1086; &#1074; &#1090;&#1077;&#1089;&#1090;&#1086;&#1074;&#1086; &#1086;&#1073;&#1082;&#1088;&#1098;&#1078;&#1077;&#1085;&#1080;&#1077;';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = '&#1058;&#1088;&#1103;&#1073;&#1074;&#1072; &#1076;&#1072; &#1074;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; e-mail &#1072;&#1076;&#1088;&#1077;&#1089;';
+$MESSAGE['START_CURRENT_USER'] = '&#1042;&#1080;&#1077; &#1074;&#1083;&#1103;&#1079;&#1086;&#1093;&#1090;&#1077; &#1082;&#1072;&#1090;&#1086;:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;, &#1048;&#1085;&#1089;&#1090;&#1072;&#1083;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1072;&#1090;&#1072; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103; &#1074;&#1089;&#1077; &#1086;&#1097;&#1077; &#1089;&#1098;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1074;&#1072;!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = '&#1044;&#1086;&#1073;&#1088;&#1077; &#1076;&#1086;&#1096;&#1083;&#1080; &#1074; &#1040;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1080;&#1074;&#1085;&#1072;&#1090;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1085;&#1072; WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;: &#1079;&#1072; &#1076;&#1072; &#1089;&#1084;&#1077;&#1085;&#1080;&#1090;&#1077; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1072; &#1086;&#1090;&#1080;&#1076;&#1077;&#1090;&#1077; &#1074; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = '&#1055;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1103; &#1077; &#1076;&#1086;&#1073;&#1072;&#1074;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;: &#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1090;&#1077; &#1076;&#1072;&#1085;&#1085;&#1080; &#1074; &#1087;&#1086;&#1083;&#1077;&#1090;&#1072;&#1090;&#1072; &#1072;&#1082;&#1086; &#1080;&#1089;&#1082;&#1072;&#1090;&#1077; &#1076;&#1072; &#1089;&#1084;&#1077;&#1085;&#1080;&#1090;&#1077; &#1087;&#1072;&#1088;&#1086;&#1083;&#1080;&#1090;&#1077; &#1085;&#1072; &#1090;&#1077;&#1079;&#1080; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1080;';
+$MESSAGE['USERS_CONFIRM_DELETE'] = '&#1048;&#1089;&#1082;&#1072;&#1090;&#1077; &#1083;&#1080; &#1076;&#1072; &#1080;&#1079;&#1090;&#1088;&#1080;&#1077;&#1090;&#1077; &#1080;&#1079;&#1073;&#1088;&#1072;&#1085;&#1080;&#1103; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;?';
+$MESSAGE['USERS_DELETED'] = '&#1055;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1103; &#1077; &#1080;&#1079;&#1090;&#1088;&#1080;&#1090; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['USERS_EMAIL_TAKEN'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1103; email &#1074;&#1077;&#1095;&#1077; &#1089;&#1077; &#1080;&#1079;&#1087;&#1086;&#1083;&#1079;&#1074;&#1072;';
+$MESSAGE['USERS_INVALID_EMAIL'] = '&#1053;&#1077;&#1074;&#1072;&#1083;&#1080;&#1076;&#1077;&#1085; email &#1072;&#1076;&#1088;&#1077;&#1089;';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = '&#1053;&#1077; &#1073;&#1077;&#1096;&#1077; &#1080;&#1079;&#1073;&#1088;&#1072;&#1085;&#1072; &#1075;&#1088;&#1091;&#1087;&#1072;';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1090;&#1077; &#1087;&#1072;&#1088;&#1086;&#1083;&#1080; &#1085;&#1077; &#1089;&#1098;&#1074;&#1087;&#1072;&#1076;&#1072;&#1090;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = '&#1042;&#1098;&#1074;&#1077;&#1076;&#1077;&#1085;&#1072;&#1090;&#1072; &#1087;&#1072;&#1088;&#1086;&#1083;&#1072; &#1077; &#1090;&#1074;&#1098;&#1088;&#1076;&#1077; &#1082;&#1098;&#1089;&#1072;';
+$MESSAGE['USERS_SAVED'] = '&#1055;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1103; &#1077; &#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1089;&#1082;&#1080;&#1090;&#1077; &#1075;&#1088;&#1091;&#1087;&#1080; &#1080; &#1090;&#1103;&#1093;&#1085;&#1080;&#1090;&#1077; &#1087;&#1088;&#1072;&#1074;&#1072;...';
+$OVERVIEW['HELP'] = '&#1048;&#1084;&#1072;&#1090;&#1077; &#1074;&#1098;&#1087;&#1088;&#1086;&#1089;&#1080;? &#1053;&#1072;&#1084;&#1077;&#1088;&#1077;&#1090;&#1077; &#1086;&#1090;&#1075;&#1086;&#1074;&#1086;&#1088;...';
+$OVERVIEW['LANGUAGES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1077;&#1079;&#1080;&#1094;&#1080;&#1090;&#1077; &#1085;&#1072; WebsiteBaker...';
+$OVERVIEW['MEDIA'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1077;&#1090;&#1077; &#1074; &#1087;&#1072;&#1087;&#1082;&#1072; &#1084;&#1077;&#1076;&#1080;&#1103;...';
+$OVERVIEW['MODULES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1084;&#1086;&#1076;&#1091;&#1083;&#1080;&#1090;&#1077; &#1085;&#1072; WebsiteBaker...';
+$OVERVIEW['PAGES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1080;&#1090;&#1077;...';
+$OVERVIEW['PREFERENCES'] = '&#1057;&#1084;&#1077;&#1085;&#1080; &#1087;&#1088;&#1077;&#1076;&#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1085;&#1080;&#1103;&#1090;&#1072; &#1086;&#1090;&#1085;&#1086;&#1089;&#1085;&#1086; email &#1072;&#1076;&#1088;&#1077;&#1089;, &#1087;&#1072;&#1088;&#1086;&#1083;&#1072; &#1080; &#1076;&#1088;. ';
+$OVERVIEW['SETTINGS'] = '&#1057;&#1084;&#1077;&#1085;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;&#1090;&#1077; &#1085;&#1072; WebsiteBaker...';
+$OVERVIEW['START'] = '&#1055;&#1088;&#1077;&#1075;&#1083;&#1077;&#1076; &#1085;&#1072; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1072;&#1085;&#1077;';
+$OVERVIEW['TEMPLATES'] = '&#1055;&#1088;&#1086;&#1084;&#1077;&#1085;&#1080; &#1080;&#1079;&#1075;&#1083;&#1077;&#1076;&#1072; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1072; &#1095;&#1088;&#1077;&#1079; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1080;...';
+$OVERVIEW['USERS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1080;&#1090;&#1077;&#1083;&#1080;&#1090;&#1077; &#1084;&#1086;&#1078;&#1077;&#1097;&#1080; &#1076;&#1072; &#1074;&#1083;&#1103;&#1079;&#1072;&#1090; &#1074; WebsiteBaker...';
+$OVERVIEW['VIEW'] = '&#1042;&#1080;&#1078; &#1089;&#1074;&#1086;&#1103; &#1089;&#1072;&#1081;&#1090; &#1074; &#1085;&#1086;&#1074; &#1087;&#1088;&#1086;&#1079;&#1086;&#1088;&#1077;&#1094;...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/BG.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/CA.php
===================================================================
--- trunk/languages/CA.php	(nonexistent)
+++ trunk/languages/CA.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'CA';
+$language_name = 'Català'; // Catalan
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Carles Escrig (simkin)';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Acc&eacute;s';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Afegits';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Demanar Dades del Compte';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grups';
+$MENU['HELP'] = 'Ajuda';
+$MENU['LANGUAGES'] = 'Idiomes';
+$MENU['LOGIN'] = 'Entrar';
+$MENU['LOGOUT'] = 'Eixir';
+$MENU['MEDIA'] = 'Fitxers';
+$MENU['MODULES'] = 'M&ograve;duls';
+$MENU['PAGES'] = 'P&agrave;gines';
+$MENU['PREFERENCES'] = 'Perfil';
+$MENU['SETTINGS'] = 'Par&agrave;metres';
+$MENU['START'] = 'Inici';
+$MENU['TEMPLATES'] = 'Plantilles';
+$MENU['USERS'] = 'Usuaris';
+$MENU['VIEW'] = 'Veure';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registre de Compte';
+$TEXT['ACTIONS'] = 'Accions';
+$TEXT['ACTIVE'] = 'Actiu';
+$TEXT['ADD'] = 'Afegeix';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Afegeix Secci&oacute;';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administraci&oacute;';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administration tool';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administradors';
+$TEXT['ADVANCED'] = 'Avan&ccedil;at';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Permetre Diverses Seleccions';
+$TEXT['ALL_WORDS'] = 'Totes les Paraules';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'An&ograve;nim';
+$TEXT['ANY_WORDS'] = 'Qualsevol Paraula';
+$TEXT['APP_NAME'] = 'Application Name';
+$TEXT['ARE_YOU_SURE'] = 'Esteu segur?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Arrere';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Backup Database';
+$TEXT['BACKUP_MEDIA'] = 'Backup Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'B&agrave;sic';
+$TEXT['BLOCK'] = 'Bloc';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Cancel&middot;la';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Verification';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Canvia';
+$TEXT['CHANGES'] = 'Canvis';
+$TEXT['CHANGE_SETTINGS'] = 'Canvia Par&agrave;metres';
+$TEXT['CHARSET'] = 'Charset';
+$TEXT['CHECKBOX_GROUP'] = 'Grup de quadres de verificaci&oacute;';
+$TEXT['CLOSE'] = 'Tanca';
+$TEXT['CODE'] = 'Codi';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Contrau';
+$TEXT['COMMENT'] = 'Comentari';
+$TEXT['COMMENTING'] = 'Comentaris';
+$TEXT['COMMENTS'] = 'Comentaris';
+$TEXT['CREATE_FOLDER'] = 'Crea Carpeta';
+$TEXT['CURRENT'] = 'Actual';
+$TEXT['CURRENT_FOLDER'] = 'Carpeta Actual';
+$TEXT['CURRENT_PAGE'] = 'P&agrave;gina Actual';
+$TEXT['CURRENT_PASSWORD'] = 'Contrasenya Actual';
+$TEXT['CUSTOM'] = 'Personalitzat';
+$TEXT['DATABASE'] = 'Base de Dades';
+$TEXT['DATE'] = 'Data';
+$TEXT['DATE_FORMAT'] = 'Format de Data';
+$TEXT['DEFAULT'] = 'Per defecte';
+$TEXT['DEFAULT_CHARSET'] = 'Default Charset';
+$TEXT['DEFAULT_TEXT'] = 'Text per defecte';
+$TEXT['DELETE'] = 'Esborra';
+$TEXT['DELETED'] = 'Esborrat';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Descripci&oacute;';
+$TEXT['DESIGNED_FOR'] = 'Dissenyat Per';
+$TEXT['DIRECTORIES'] = 'Directoris';
+$TEXT['DIRECTORY_MODE'] = 'Mode Directori';
+$TEXT['DISABLED'] = 'Inhabilitat';
+$TEXT['DISPLAY_NAME'] = 'Nom a Mostrar';
+$TEXT['EMAIL'] = 'Correu';
+$TEXT['EMAIL_ADDRESS'] = 'Adre&ccedil;a de Correu';
+$TEXT['EMPTY_TRASH'] = 'Buida la Paperera';
+$TEXT['ENABLED'] = 'Habilitat';
+$TEXT['END'] = 'Fi';
+$TEXT['ERROR'] = 'Error';
+$TEXT['EXACT_MATCH'] = 'Coincid&egrave;ncia Exacta';
+$TEXT['EXECUTE'] = 'Execuci&oacute;';
+$TEXT['EXPAND'] = 'Expandeix';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Camp';
+$TEXT['FILE'] = 'fitxer';
+$TEXT['FILES'] = 'fitxers';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Permisos del Sistema de Fitxers';
+$TEXT['FILE_MODE'] = 'Mode Fitxer';
+$TEXT['FINISH_PUBLISHING'] = 'Fi de Publicaci&oacute;';
+$TEXT['FOLDER'] = 'carpeta';
+$TEXT['FOLDERS'] = 'carpetes';
+$TEXT['FOOTER'] = 'Peu';
+$TEXT['FORGOTTEN_DETAILS'] = 'Heu oblidat la contrasenya?';
+$TEXT['FORGOT_DETAILS'] = 'Heu oblidat els Detalls?';
+$TEXT['FROM'] = 'des de';
+$TEXT['FRONTEND'] = 'Frontal';
+$TEXT['FULL_NAME'] = 'Nom Complet';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grup';
+$TEXT['HEADER'] = 'Cap&ccedil;alera';
+$TEXT['HEADING'] = 'Encap&ccedil;alament';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Al&ccedil;ada';
+$TEXT['HIDDEN'] = 'Amagat';
+$TEXT['HIDE'] = 'Amaga';
+$TEXT['HIDE_ADVANCED'] = 'Oculta Opcions Avan&ccedil;ades';
+$TEXT['HOME'] = 'Inici';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirecci&oacute; de P&agrave;gina Inicial';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Servidor';
+$TEXT['ICON'] = 'Icona';
+$TEXT['IMAGE'] = 'Imatge';
+$TEXT['INLINE'] = 'Inserida';
+$TEXT['INSTALL'] = 'Instal&middot;la';
+$TEXT['INSTALLATION'] = 'Instal&middot;laci&oacute;';
+$TEXT['INSTALLATION_PATH'] = 'Ruta d\'Instal&middot;laci&oacute;';
+$TEXT['INSTALLATION_URL'] = 'URL d\'Instal&middot;laci&oacute;';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Entrada';
+$TEXT['INTRO_PAGE'] = 'P&agrave;gina d\'Entrada';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Paraules Clau';
+$TEXT['LANGUAGE'] = 'Idioma';
+$TEXT['LAST_UPDATED_BY'] = '&Uacute;ltima Actualitzaci&oacute; Per';
+$TEXT['LENGTH'] = 'Longitud';
+$TEXT['LEVEL'] = 'Nivell';
+$TEXT['LINK'] = 'Enlla&ccedil;';
+$TEXT['LINUX_UNIX_BASED'] = 'Basat en Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Llista Opcions';
+$TEXT['LOGGED_IN'] = 'Identificat';
+$TEXT['LOGIN'] = 'Identificaci&oacute;';
+$TEXT['LONG'] = 'Llarg';
+$TEXT['LONG_TEXT'] = 'Text Llarg';
+$TEXT['LOOP'] = 'Repetici&oacute;';
+$TEXT['MAIN'] = 'Principal';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Administreu';
+$TEXT['MANAGE_GROUPS'] = 'Administra els Grups';
+$TEXT['MANAGE_USERS'] = 'Administra els Usuaris';
+$TEXT['MATCH'] = 'Coincidir';
+$TEXT['MATCHING'] = 'Matching';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Trameses M&agrave;x. Per Hora';
+$TEXT['MEDIA_DIRECTORY'] = 'Directori de Fitxers';
+$TEXT['MENU'] = 'Men&uacute;';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'T&iacute;tol del Men&uacute;';
+$TEXT['MESSAGE'] = 'Missatge';
+$TEXT['MODIFY'] = 'Modifica';
+$TEXT['MODIFY_CONTENT'] = 'Modifica Contingut';
+$TEXT['MODIFY_SETTINGS'] = 'Modifica Par&agrave;metres';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Permisos de M&ograve;dul';
+$TEXT['MORE'] = 'M&eacute;s';
+$TEXT['MOVE_DOWN'] = 'Mou Avall';
+$TEXT['MOVE_UP'] = 'Mou Amunt';
+$TEXT['MULTIPLE_MENUS'] = 'Diversos Men&uacute;s';
+$TEXT['MULTISELECT'] = 'Multi-selecci&oacute;';
+$TEXT['NAME'] = 'Nom';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Voleu identificar-vos?';
+$TEXT['NEW_PASSWORD'] = 'Nova Contrasenya';
+$TEXT['NEW_WINDOW'] = 'Nova Finestra';
+$TEXT['NEXT'] = 'Seg&uuml;ent';
+$TEXT['NEXT_PAGE'] = 'P&agrave;gina Seg&uuml;ent';
+$TEXT['NO'] = 'No';
+$TEXT['NONE'] = 'Cap';
+$TEXT['NONE_FOUND'] = 'No s\'ha trobat cap';
+$TEXT['NOT_FOUND'] = 'No Trobat';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Cap Resultat';
+$TEXT['OF'] = 'De';
+$TEXT['ON'] = 'A';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Opci&oacute;';
+$TEXT['OTHERS'] = 'Altres';
+$TEXT['OUT_OF'] = 'Fora De';
+$TEXT['OVERWRITE_EXISTING'] = 'Sobreescriure';
+$TEXT['PAGE'] = 'P&agrave;gina';
+$TEXT['PAGES_DIRECTORY'] = 'Directori de P&agrave;gines';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Extensi&oacute; de P&agrave;gina';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Idiomes de la p&agrave;gina';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'L&iacute;mit de Nivell de P&agrave;gina';
+$TEXT['PAGE_SPACER'] = 'Separador de P&agrave;gina';
+$TEXT['PAGE_TITLE'] = 'T&iacute;tol de la P&agrave;gina';
+$TEXT['PAGE_TRASH'] = 'Paperera';
+$TEXT['PARENT'] = 'Mare';
+$TEXT['PASSWORD'] = 'Contrasenya';
+$TEXT['PATH'] = 'Ruta';
+$TEXT['PHP_ERROR_LEVEL'] = 'Nivell d\'Informe d\'Error de PHP';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Per favor trieu';
+$TEXT['POST'] = 'Missatge';
+$TEXT['POSTS_PER_PAGE'] = 'Posts Per Page';
+$TEXT['POST_FOOTER'] = 'Post Footer';
+$TEXT['POST_HEADER'] = 'Post Header';
+$TEXT['PREVIOUS'] = 'Anterior';
+$TEXT['PREVIOUS_PAGE'] = 'P&agrave;gina Anterior';
+$TEXT['PRIVATE'] = 'Privat';
+$TEXT['PRIVATE_VIEWERS'] = 'Visualitzadors Privats';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'P&uacute;blic';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Grup de Botons';
+$TEXT['READ'] = 'Lectura';
+$TEXT['READ_MORE'] = 'Llegir M&eacute;s';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrat';
+$TEXT['REGISTERED_VIEWERS'] = 'Visualitzadors Registrats';
+$TEXT['RELOAD'] = 'Recarrega';
+$TEXT['REMEMBER_ME'] = 'Recorda les meues dades';
+$TEXT['RENAME'] = 'Reanomena';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Requerit';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Reinicia';
+$TEXT['RESIZE'] = 'Redimensiona';
+$TEXT['RESIZE_IMAGE_TO'] = 'Redimensiona Imatge A';
+$TEXT['RESTORE'] = 'Restore';
+$TEXT['RESTORE_DATABASE'] = 'Restore Database';
+$TEXT['RESTORE_MEDIA'] = 'Restore Media';
+$TEXT['RESULTS'] = 'Resultats';
+$TEXT['RESULTS_FOOTER'] = 'Peu de Resultats';
+$TEXT['RESULTS_FOR'] = 'Resultats De';
+$TEXT['RESULTS_HEADER'] = 'Cap&ccedil;alera de Resultats';
+$TEXT['RESULTS_LOOP'] = 'Bucle de Resultats';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Nova Contrasenya (de nou)';
+$TEXT['RETYPE_PASSWORD'] = 'Contrasenya (de nou)';
+$TEXT['SAME_WINDOW'] = 'La Mateixa Finestra';
+$TEXT['SAVE'] = 'Desa';
+$TEXT['SEARCH'] = 'Cerca';
+$TEXT['SEARCHING'] = 'Recerca';
+$TEXT['SECTION'] = 'Secci&oacute;';
+$TEXT['SECTION_BLOCKS'] = 'Blocs de la Secci&oacute;';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Quadre de Selecci&oacute;';
+$TEXT['SEND_DETAILS'] = 'Envia les Dades';
+$TEXT['SEPARATE'] = 'Separada';
+$TEXT['SEPERATOR'] = 'Separador';
+$TEXT['SERVER_EMAIL'] = 'Correu del Servidor';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Sistema Operatiu del Servidor';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Identifier';
+$TEXT['SETTINGS'] = 'Par&agrave;metres';
+$TEXT['SHORT'] = 'Curt';
+$TEXT['SHORT_TEXT'] = 'Text Curt';
+$TEXT['SHOW'] = 'Mostra';
+$TEXT['SHOW_ADVANCED'] = 'Mostra Opcions Avan&ccedil;ades';
+$TEXT['SIGNUP'] = 'Registre';
+$TEXT['SIZE'] = 'Mida';
+$TEXT['SMART_LOGIN'] = 'Identificaci&oacute; R&agrave;pida';
+$TEXT['START'] = 'Inici';
+$TEXT['START_PUBLISHING'] = 'Inici de Publicaci&oacute;';
+$TEXT['SUBJECT'] = 'Assumpte';
+$TEXT['SUBMISSIONS'] = 'Trameses';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Trameses Emmagatzemades a la Base de Dades';
+$TEXT['SUBMISSION_ID'] = 'ID de Tramesa';
+$TEXT['SUBMITTED'] = 'Tram&eacute;s';
+$TEXT['SUCCESS'] = '&Egrave;xit';
+$TEXT['SYSTEM_DEFAULT'] = 'Per Defecte del Sistema';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Permisos de Sistema';
+$TEXT['TABLE_PREFIX'] = 'Prefix de Taula';
+$TEXT['TARGET'] = 'Dest&iacute;';
+$TEXT['TARGET_FOLDER'] = 'Carpeta de dest&iacute;';
+$TEXT['TEMPLATE'] = 'Plantilla';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Permisos de Plantilla';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = '&Agrave;rea de text';
+$TEXT['TEXTFIELD'] = 'Camp de text';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Temps';
+$TEXT['TIMEZONE'] = 'Fus Horari';
+$TEXT['TIME_FORMAT'] = 'Format de Temps';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'T&iacute;tol';
+$TEXT['TO'] = 'a';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = 'Paperera Buidada';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tipus';
+$TEXT['UNDER_CONSTRUCTION'] = 'En Construcci&oacute;';
+$TEXT['UNINSTALL'] = 'Desinstal&middot;la';
+$TEXT['UNKNOWN'] = 'Desconegut';
+$TEXT['UNLIMITED'] = 'Il&middot;limitat';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Amunt';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Penja Fitxer(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Usuari';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verification';
+$TEXT['VERSION'] = 'Versi&oacute;';
+$TEXT['VIEW'] = 'Veure';
+$TEXT['VIEW_DELETED_PAGES'] = 'Mostra P&agrave;gines Esborrades';
+$TEXT['VIEW_DETAILS'] = 'Veure Detalls';
+$TEXT['VISIBILITY'] = 'Visibilitat';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'P&agrave;gina Web';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Descripci&oacute; del Lloc Web';
+$TEXT['WEBSITE_FOOTER'] = 'Peu del Lloc Web';
+$TEXT['WEBSITE_HEADER'] = 'Cap&ccedil;alera del Lloc Web';
+$TEXT['WEBSITE_KEYWORDS'] = 'Paraules clau del Lloc Web';
+$TEXT['WEBSITE_TITLE'] = 'T&iacute;tol del Lloc Web';
+$TEXT['WELCOME_BACK'] = 'Benvingut de nou';
+$TEXT['WIDTH'] = 'Amplada';
+$TEXT['WINDOW'] = 'Finestra';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Permisos d\'escriptura de fitxer per a tothom';
+$TEXT['WRITE'] = 'Escriptura';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'Estil WYSIWYG';
+$TEXT['YES'] = 'S&iacute;';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Afegeix Grup';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Afegeix Encap&ccedil;alament';
+$HEADING['ADD_PAGE'] = 'Afegeix P&agrave;gina';
+$HEADING['ADD_USER'] = 'Afegeix Usuari';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administration Tools';
+$HEADING['BROWSE_MEDIA'] = 'Explorar Fitxers';
+$HEADING['CREATE_FOLDER'] = 'Crea Carpeta';
+$HEADING['DEFAULT_SETTINGS'] = 'Par&agrave;metres per Defecte';
+$HEADING['DELETED_PAGES'] = 'P&agrave;gines Esborrades';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Par&agrave;metres del Sistema de Fitxers';
+$HEADING['GENERAL_SETTINGS'] = 'Par&agrave;metres Generals';
+$HEADING['INSTALL_LANGUAGE'] = 'Instal&middot;la Idioma';
+$HEADING['INSTALL_MODULE'] = 'Instal&middot;la M&ograve;dul';
+$HEADING['INSTALL_TEMPLATE'] = 'Instal&middot;la Plantilla';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detalls de l\'Idioma';
+$HEADING['MANAGE_SECTIONS'] = 'Administra les Seccions';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modifica els Par&agrave;metres Avan&ccedil;ats de la P&agrave;gina';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modifica/Esborra Grup';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modifica/Esborra P&agrave;gina';
+$HEADING['MODIFY_DELETE_USER'] = 'Modifica/Esborra Usuari';
+$HEADING['MODIFY_GROUP'] = 'Modifica Grup';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modifica P&agrave;gina Introduct&ograve;ria';
+$HEADING['MODIFY_PAGE'] = 'Modifica P&agrave;gina';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modifica els Par&agrave;metres de la P&agrave;gina';
+$HEADING['MODIFY_USER'] = 'Modifica Usuari';
+$HEADING['MODULE_DETAILS'] = 'Detalls del M&ograve;dul';
+$HEADING['MY_EMAIL'] = 'El meu Correu';
+$HEADING['MY_PASSWORD'] = 'La meua Contrasenya';
+$HEADING['MY_SETTINGS'] = 'Els meus Par&agrave;metres';
+$HEADING['SEARCH_SETTINGS'] = 'Par&agrave;metres de Cerca';
+$HEADING['SERVER_SETTINGS'] = 'Server Settings';
+$HEADING['TEMPLATE_DETAILS'] = 'Detalls de la Plantilla';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Desinstal&middot;la Idioma';
+$HEADING['UNINSTALL_MODULE'] = 'Desinstal&middot;la M&ograve;dul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Desinstal&middot;la Plantilla';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Penja Fitxer(s)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'No teniu privilegis suficients per estar ac&iacute;';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'La contrasenya no es pot reiniciar m&eacute;s d\'un cop per hora, disculpeu';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'No ha estat possible enviar la contrasenya, per favor contacteu amb l\'administrador del sistema';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'El correu que heu introdu&iuml;t no s\'ha trobat a la base de dades';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Per favor introdu&iuml;u la vostra adre&ccedil;a de correu a baix';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Ho sentim, no teniu permisos per a veure aquesta p&agrave;gina';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Ja est&agrave; instal&middot;lat';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'No s\'ha pogut escriure al directori de dest&iacute;';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'No s\'ha pogut desinstal&middot;lar';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'No s\'ha pogut desinstal&middot;lar: s\'est&agrave; usant el fitxer seleccionat';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'No s\'ha pogut descomprimir el fitxer';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'No s\'ha pogut penjar el fitxer';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Error opening file.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Per favor recordeu que el fitxer que pengeu ha d\'estar en un dels seg&uuml;ents formats:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Per favor recordeu que els fitxers que pengeu han d\'estar en un dels seg&uuml;ents formats:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Per favor torneu arrere i completeu tots els camps';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Instal&middot;lat amb &egrave;xit';
+$MESSAGE['GENERIC_INVALID'] = 'El fitxer que heu penjat no &eacute;s v&agrave;lid';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'No est&agrave; instal&middot;lat';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Please be patient, this might take a while.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Per favor torneu-ho a intentar prompte...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Desinstal&middot;lat amb &egrave;xit';
+$MESSAGE['GENERIC_UPGRADED'] = 'Upgraded successfully';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Lloc Web en Construcci&oacute;';
+$MESSAGE['GROUPS_ADDED'] = 'Grup afegit amb &egrave;xit';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Esteu segur de voler esborrar el grup seleccionat (i qualsevol usuari que pertanyi a aquest)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grup esborrat amb &egrave;xit';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'El nom del grup &eacute;s buit';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Group name already exists';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'No s\'han trobat grups';
+$MESSAGE['GROUPS_SAVED'] = 'Grup desat amb &egrave;xit';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Per favor introdu&iuml;u una contrasenya';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'La contrasenya &eacute;s massa llarga';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'La contrasenya &eacute;s massa curta';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'No heu introdu&iuml;t una extensi&oacute; de fitxer';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'No heu introdu&iuml;t un nou nom';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'No es pot esborrar la carpeta seleccionada';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'No es pot esborrar el fitxer seleccionat';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'No s\'ha pogut canviar el nom';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Esteu segur que voleu esborrar el seg&uuml;ent fitxer o carpeta?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Carpeta esborrada amb &egrave;xit';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Fitxer esborrat amb &egrave;xit';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Directory does not exist';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'No es pot incloure ../ al nom de la carpeta';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Ja existeix una carpeta amb el nom que heu introdu&iuml;t';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Carpeta creada amb &egrave;xit';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'No s\'ha pogut crear la carpeta';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Ja existeix un fitxer amb el nom que heu introdu&iuml;t';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Fitxer no trobat';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'No es pot incloure ../ al nom';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'No es pot usar index.php com a nom';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'No s\'han trobat fitxers a la carpeta actual';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'S\'ha canviat el nom amb &egrave;xit';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' fitxer s\'ha penjat amb &egrave;xit';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'No es pot tenir ../ a la carpeta de dest&iacute;';
+$MESSAGE['MEDIA_UPLOADED'] = ' fitxers han estat penjats amb &egrave;xit';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Ho sentim, aquest formulari ha estat enviat massa vegades durant l\'&uacute;ltima hora. Per favor torneu-ho a intentar d\'ac&iacute; una hora.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Heu d\'introduir les dades per als seg&uuml;ents camps';
+$MESSAGE['PAGES_ADDED'] = 'P&agrave;gina afegida amb &egrave;xit';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Cap&ccedil;alera de p&agrave;gina afegida amb &egrave;xit';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Per favor introdu&iuml;u un t&iacute;tol per al men&uacute;';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Per favor introdu&iuml;u un t&iacute;tol de p&agrave;gina';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Error creant el fitxer d\'acc&eacute;s al directori /pages (privilegis insuficients)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Error esborrant el fitxer d\'acc&eacute;s al directori /pages (privilegis insuficients)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Error re-ordenant p&agrave;gina';
+$MESSAGE['PAGES_DELETED'] = 'P&agrave;gina esborrada amb &egrave;xit';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Esteu segur de voler esborrar la p&agrave;gina seleccionada';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'No teniu permisos per a modificar aquesta p&agrave;gina';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Premeu AC&Iacute; per a modificar la p&agrave;gina d\'entrada';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'No s\'ha pogut escriure al fitxer /pages/intro.php (privilegis insuficients)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'P&agrave;gina d\'entrada desada amb &egrave;xit';
+$MESSAGE['PAGES_LAST_MODIFIED'] = '&Uacute;ltima modificaci&oacute; per';
+$MESSAGE['PAGES_NOT_FOUND'] = 'No s\'ha trobat la p&agrave;gina';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Error desant la p&agrave;gina';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Existeix una p&agrave;gina amb el mateix t&iacute;tol o similar';
+$MESSAGE['PAGES_REORDERED'] = 'P&agrave;gina re-ordenada amb &egrave;xit';
+$MESSAGE['PAGES_RESTORED'] = 'P&agrave;gina restaurada amb &egrave;xit';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Torna a les p&agrave;gines';
+$MESSAGE['PAGES_SAVED'] = 'P&agrave;gina desada amb &egrave;xit';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Par&agrave;metres de p&agrave;gina desats amb &egrave;xit';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Propietats de la secci&oacute; desades amb &egrave;xit';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'La contrasenya (actual) que heu introdu&iuml;t &eacute;s incorrecta';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Dades desades amb &egrave;xit';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Correu actualitzat amb &egrave;xit';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Contrasenya canviada amb &egrave;xit';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Av&iacute;s: Pr&eacute;mer aquest bot&oacute; reinicia tots els canvis no desats';
+$MESSAGE['SETTINGS_SAVED'] = 'Par&agrave;metres desats amb &egrave;xit';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'No ha estat possible obrir el fitxer de configuraci&oacute;';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'No es pot escriure al fitxer de configuraci&oacute;';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Av&iacute;s: a&ccedil;&ograve; nom&eacute;s &eacute;s recomana per a entorns de proves';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Heu d\'Introduir una adre&ccedil;a de correu';
+$MESSAGE['START_CURRENT_USER'] = 'Actualment esteu identificat com a:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Atenci&oacute;, el Directori d\'Instal&middot;laci&oacute; Encara Existeix!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Benvingut/da al Panell de Control de WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Av&iacute;s: per a canviar la plantilla heu d\'anar a la secci&oacute; Par&agrave;metres';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Usuari afegit amb &egrave;xit';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Av&iacute;s: Nom&eacute;s haur&iacute;eu d\'introduir valors als camps superiors si voleu canviar aquestes contrasenyes d\'usuari';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Esteu segur de voler esborrar l\'usuari seleccionat?';
+$MESSAGE['USERS_DELETED'] = 'Usuari esborrat amb &egrave;xit';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'L\'adre&ccedil;a de correu que heu introdu&iuml;t ja est&agrave; en &uacute;s';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'L\'adre&ccedil;a de correu introdu&iuml;da &eacute;s inv&agrave;lida';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'No s\'ha seleccionat cap grup';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'La contrasenya introdu&iuml;da no coincideix';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'La contrasenya introdu&iuml;da &eacute;s massa curta';
+$MESSAGE['USERS_SAVED'] = 'Usuari desat amb &egrave;xit';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Administreu els grups d\'usuaris i els seus permisos de sistema...';
+$OVERVIEW['HELP'] = 'Teniu una pregunta? Trobeu la vostra resposta...';
+$OVERVIEW['LANGUAGES'] = 'Administreu els idiomes de WebsiteBaker...';
+$OVERVIEW['MEDIA'] = 'Administreu la carpeta de fitxers...';
+$OVERVIEW['MODULES'] = 'Administreu els m&ograve;duls de WebsiteBaker...';
+$OVERVIEW['PAGES'] = 'Administreu les p&agrave;gines de la vostra web...';
+$OVERVIEW['PREFERENCES'] = 'Canvieu les prefer&egrave;ncies com l\'adre&ccedil;a de correu electr&ograve;nic, contrasenya, etc... ';
+$OVERVIEW['SETTINGS'] = 'Canvieu els par&agrave;metres de WebsiteBaker...';
+$OVERVIEW['START'] = '&Iacute;ndex d\'Administraci&oacute;';
+$OVERVIEW['TEMPLATES'] = 'Canvieu l\'aspecte i estil de la vostra p&agrave;gina amb plantilles...';
+$OVERVIEW['USERS'] = 'Administreu els usuaris que poden identificar-se a WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Veure i navegar r&agrave;pidament la vostra p&agrave;gina web en una nova finestra...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/CA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/CS.php
===================================================================
--- trunk/languages/CS.php	(nonexistent)
+++ trunk/languages/CS.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'CS';
+$language_name = 'Česky';  // Czechoslovakia
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'WebStep, s.r.o.';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'P&#345;&iacute;stup';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Roz&scaron;&iacute;&#345;en&iacute;';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Z&iacute;skat zapomenut&eacute; p&#345;ihla&scaron;ovac&iacute; &uacute;daje';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Skupiny';
+$MENU['HELP'] = 'N&aacute;pov&#283;da';
+$MENU['LANGUAGES'] = 'Jazyky';
+$MENU['LOGIN'] = 'P&#345;ihl&aacute;&scaron;en&iacute;';
+$MENU['LOGOUT'] = 'Odhl&aacute;sit';
+$MENU['MEDIA'] = 'M&eacute;dia';
+$MENU['MODULES'] = 'Moduly';
+$MENU['PAGES'] = 'Str&aacute;nky';
+$MENU['PREFERENCES'] = 'Mo&#382;nosti';
+$MENU['SETTINGS'] = 'Nastaven&iacute;';
+$MENU['START'] = '&Uacute;vod';
+$MENU['TEMPLATES'] = '&Scaron;ablony';
+$MENU['USERS'] = 'U&#382;ivatel&eacute;';
+$MENU['VIEW'] = 'Zobrazit';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registrace &uacute;&#269;tu';
+$TEXT['ACTIONS'] = 'Akce';
+$TEXT['ACTIVE'] = 'Aktivn&iacute;';
+$TEXT['ADD'] = 'P&#345;idat';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'P&#345;idat sekci';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administrace';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administra&#269;n&iacute; n&aacute;stroje';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Spr&aacute;vci';
+$TEXT['ADVANCED'] = 'Pokro&#269;il&yacute;';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Opr&aacute;vn&#283;n&iacute; k prohl&iacute;&#382;en&iacute;';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Povolit v&iacute;cen&aacute;sobn&eacute; v&yacute;b&#283;ry';
+$TEXT['ALL_WORDS'] = 'V&scaron;echna slova';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonymn&iacute;';
+$TEXT['ANY_WORDS'] = 'Cokoliv';
+$TEXT['APP_NAME'] = 'N&aacute;zev aplikace';
+$TEXT['ARE_YOU_SURE'] = 'Jste si jisti?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Zp&#283;t';
+$TEXT['BACKUP'] = 'Z&aacute;lohov&aacute;n&iacute;';
+$TEXT['BACKUP_ALL_TABLES'] = 'Z&aacute;lohovat v&scaron;echny tabulky v datab&aacute;zi';
+$TEXT['BACKUP_DATABASE'] = 'Z&aacute;lohovat datab&aacute;zi';
+$TEXT['BACKUP_MEDIA'] = 'Zaz&aacute;lohovat m&eacute;dia';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Z&aacute;lohovat pouze tabulky WebsiteBakeru';
+$TEXT['BASIC'] = 'Z&aacute;kladn&iacute;';
+$TEXT['BLOCK'] = 'Blok';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Zru&scaron;it';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Kontrola obr. k&oacute;dem';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Zm&#283;nit';
+$TEXT['CHANGES'] = 'Zm&#283;ny';
+$TEXT['CHANGE_SETTINGS'] = 'Zm&#283;nit nastaven&iacute;';
+$TEXT['CHARSET'] = 'K&oacute;dov&aacute; str&aacute;nka';
+$TEXT['CHECKBOX_GROUP'] = 'Skupina zatrh&aacute;vac&iacute;ch pol&iacute;';
+$TEXT['CLOSE'] = 'Zav&#345;&iacute;t';
+$TEXT['CODE'] = 'K&oacute;d jazyka';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Sbalit';
+$TEXT['COMMENT'] = 'Koment&aacute;&#345;';
+$TEXT['COMMENTING'] = 'Koment&aacute;&#345;e';
+$TEXT['COMMENTS'] = 'Koment&aacute;&#345;e';
+$TEXT['CREATE_FOLDER'] = 'Vytvo&#345;it adres&aacute;&#345;';
+$TEXT['CURRENT'] = 'Sou&#269;asn&yacute;';
+$TEXT['CURRENT_FOLDER'] = 'Sou&#269;asn&yacute; adres&aacute;&#345;';
+$TEXT['CURRENT_PAGE'] = 'Str&aacute;nka';
+$TEXT['CURRENT_PASSWORD'] = 'Sou&#269;asn&eacute; heslo';
+$TEXT['CUSTOM'] = 'Vlastn&iacute; nastaven&iacute;';
+$TEXT['DATABASE'] = 'Datab&aacute;ze';
+$TEXT['DATE'] = 'Datum';
+$TEXT['DATE_FORMAT'] = 'Form&aacute;t data';
+$TEXT['DEFAULT'] = 'V&yacute;choz&iacute;';
+$TEXT['DEFAULT_CHARSET'] = 'V&yacute;choz&iacute; k&oacute;dov&aacute; str&aacute;nka';
+$TEXT['DEFAULT_TEXT'] = 'V&yacute;choz&iacute; text';
+$TEXT['DELETE'] = 'Smazat';
+$TEXT['DELETED'] = 'Smaz&aacute;no';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Popis';
+$TEXT['DESIGNED_FOR'] = 'Vyvinuto pro';
+$TEXT['DIRECTORIES'] = 'Adres&aacute;&#345;e';
+$TEXT['DIRECTORY_MODE'] = 'M&oacute;d adres&aacute;&#345;&#367;';
+$TEXT['DISABLED'] = 'Vypnuto';
+$TEXT['DISPLAY_NAME'] = 'Jm&eacute;no';
+$TEXT['EMAIL'] = 'E-mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-mailov&aacute; adresa';
+$TEXT['EMPTY_TRASH'] = 'Vypr&aacute;zdnit ko&scaron;';
+$TEXT['ENABLED'] = 'Zapnuto';
+$TEXT['END'] = 'Konec';
+$TEXT['ERROR'] = 'Chyba';
+$TEXT['EXACT_MATCH'] = 'P&#345;esn&aacute; shoda';
+$TEXT['EXECUTE'] = 'Spu&scaron;t&#283;n&iacute;';
+$TEXT['EXPAND'] = 'Rozbalit';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Pole';
+$TEXT['FILE'] = 'soubor';
+$TEXT['FILES'] = 'soubory';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Pr&aacute;va souborov&eacute;ho syst&eacute;mu';
+$TEXT['FILE_MODE'] = 'M&oacute;d soubor&#367;';
+$TEXT['FINISH_PUBLISHING'] = 'Konec publikace';
+$TEXT['FOLDER'] = 'adres&aacute;&#345;';
+$TEXT['FOLDERS'] = 'adres&aacute;&#345;e';
+$TEXT['FOOTER'] = 'Z&aacute;pat&iacute;';
+$TEXT['FORGOTTEN_DETAILS'] = 'Zapom&#283;li jste svoje p&#345;ihla&scaron;ovac&iacute; &uacute;daje?';
+$TEXT['FORGOT_DETAILS'] = 'Zapomnenut&eacute; heslo?';
+$TEXT['FROM'] = 'od';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Cel&eacute; jm&eacute;no';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Skup.';
+$TEXT['HEADER'] = 'Z&aacute;hlav&iacute;';
+$TEXT['HEADING'] = 'Z&aacute;hlav&iacute;';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'V&yacute;&scaron;ka';
+$TEXT['HIDDEN'] = 'Skryt&aacute;';
+$TEXT['HIDE'] = 'Skr&yacute;t';
+$TEXT['HIDE_ADVANCED'] = 'Skr&yacute;t pokro&#269;il&eacute; volby';
+$TEXT['HOME'] = 'Dom&#367;';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'P&#345;esm&#283;rov&aacute;n&iacute; homepage';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Hostitel';
+$TEXT['ICON'] = 'Ikona';
+$TEXT['IMAGE'] = 'Obr&aacute;zek';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Instalovat';
+$TEXT['INSTALLATION'] = 'Instalace';
+$TEXT['INSTALLATION_PATH'] = 'Cesta instalace';
+$TEXT['INSTALLATION_URL'] = 'URL instalace';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = '&Uacute;vodn&iacute; (intro) str&aacute;nka';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Kl&iacute;&#269;ov&aacute; slova';
+$TEXT['LANGUAGE'] = 'Jazyk';
+$TEXT['LAST_UPDATED_BY'] = 'Posledn&iacute; zm&#283;na:';
+$TEXT['LENGTH'] = 'D&eacute;lka';
+$TEXT['LEVEL'] = '&Uacute;rove&#328;';
+$TEXT['LINK'] = 'Odkaz';
+$TEXT['LINUX_UNIX_BASED'] = 'Zalo&#382;en na Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Seznam voleb';
+$TEXT['LOGGED_IN'] = 'p&#345;ihl&aacute;&scaron;en';
+$TEXT['LOGIN'] = 'P&#345;ihl&aacute;sit';
+$TEXT['LONG'] = 'Dlouh&yacute; popis';
+$TEXT['LONG_TEXT'] = 'Dlouh&yacute; text';
+$TEXT['LOOP'] = 'T&#283;lo';
+$TEXT['MAIN'] = 'Hlavn&iacute;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Spravovat';
+$TEXT['MANAGE_GROUPS'] = 'Spravovat skupiny';
+$TEXT['MANAGE_USERS'] = 'Spravovat u&#382;ivatele';
+$TEXT['MATCH'] = 'Shoda';
+$TEXT['MATCHING'] = 'Odpov&iacute;daj&iacute;c&iacute;';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. po&#269;et odesl&aacute;n&iacute; za hodinu';
+$TEXT['MEDIA_DIRECTORY'] = 'Adres&aacute;&#345; m&eacute;di&iacute;';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Titulek menu';
+$TEXT['MESSAGE'] = 'Zpr&aacute;va';
+$TEXT['MODIFY'] = 'Zm&#283;nit';
+$TEXT['MODIFY_CONTENT'] = 'Zm&#283;nit obsah';
+$TEXT['MODIFY_SETTINGS'] = 'Zm&#283;nit nastaven&iacute;';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Opr&aacute;vn&#283;n&iacute; k modul&#367;m';
+$TEXT['MORE'] = 'V&iacute;ce';
+$TEXT['MOVE_DOWN'] = 'Posunout dol&#367;';
+$TEXT['MOVE_UP'] = 'Posunout nahoru';
+$TEXT['MULTIPLE_MENUS'] = 'V&iacute;cen&aacute;sobn&aacute; menu';
+$TEXT['MULTISELECT'] = 'V&iacute;cen&aacute;sobn&eacute; v&yacute;b&#283;rov&eacute; pole';
+$TEXT['NAME'] = 'N&aacute;zev';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Chcete se p&#345;ihl&aacute;sit?';
+$TEXT['NEW_PASSWORD'] = 'Nov&eacute; heslo';
+$TEXT['NEW_WINDOW'] = 'nov&eacute;ho okna';
+$TEXT['NEXT'] = 'N&aacute;sleduj&iacute;c&iacute;';
+$TEXT['NEXT_PAGE'] = 'N&aacute;sleduj&iacute;c&iacute; str&aacute;nka';
+$TEXT['NO'] = 'Ne';
+$TEXT['NONE'] = 'Nen&iacute;';
+$TEXT['NONE_FOUND'] = 'Nic nenalezeno';
+$TEXT['NOT_FOUND'] = 'Nenalezeno';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = '&#381;&aacute;dn&yacute; v&yacute;sledek';
+$TEXT['OF'] = 'Z';
+$TEXT['ON'] = 'Na';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Volby';
+$TEXT['OTHERS'] = 'Ostatn&iacute;';
+$TEXT['OUT_OF'] = 'Z';
+$TEXT['OVERWRITE_EXISTING'] = 'P&#345;epsat existuj&iacute;c&iacute;';
+$TEXT['PAGE'] = 'Str&aacute;nka';
+$TEXT['PAGES_DIRECTORY'] = 'Adres&aacute;&#345; str&aacute;nek';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Seitenerechtigungen';
+$TEXT['PAGE_EXTENSION'] = 'P&#345;&iacute;pona str&aacute;nek';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Jazykov&eacute; verze str&aacute;nek';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limit &uacute;rovn&iacute; str&aacute;nek';
+$TEXT['PAGE_SPACER'] = 'Znak mezery';
+$TEXT['PAGE_TITLE'] = 'Titulek str&aacute;nky';
+$TEXT['PAGE_TRASH'] = 'Ko&scaron; str&aacute;nek';
+$TEXT['PARENT'] = 'Nad&#345;azen&yacute;';
+$TEXT['PASSWORD'] = 'Heslo';
+$TEXT['PATH'] = 'Cesta';
+$TEXT['PHP_ERROR_LEVEL'] = '&Uacute;rove&#328; hl&aacute;&scaron;en&iacute; chyb PHP';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Vyberte pros&iacute;m';
+$TEXT['POST'] = 'p&#345;&iacute;sp&#283;vek';
+$TEXT['POSTS_PER_PAGE'] = 'P&#345;&iacute;sp&#283;vk&#367; na str&aacute;nku';
+$TEXT['POST_FOOTER'] = 'Z&aacute;pat&iacute; p&#345;&iacute;sp&#283;vku';
+$TEXT['POST_HEADER'] = 'Z&aacute;hlav&iacute; p&#345;&iacute;sp&#283;vku';
+$TEXT['PREVIOUS'] = 'P&#345;edchoz&iacute;';
+$TEXT['PREVIOUS_PAGE'] = 'P&#345;edchoz&iacute; str&aacute;nka';
+$TEXT['PRIVATE'] = 'Soukrom&aacute;';
+$TEXT['PRIVATE_VIEWERS'] = 'Opr&aacute;vn&#283;n&iacute; k prohl&iacute;&#382;en&iacute;';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Ve&#345;ejn&aacute;';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Skupina radio-pol&iacute;';
+$TEXT['READ'] = '&#268;ten&iacute;';
+$TEXT['READ_MORE'] = 'v&iacute;ce...';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Pro registrovan&eacute;';
+$TEXT['REGISTERED_VIEWERS'] = 'Opr&aacute;vn&#283;n&iacute; k prohl&iacute;&#382;en&iacute;';
+$TEXT['RELOAD'] = 'Obnovit';
+$TEXT['REMEMBER_ME'] = 'Zapamatovat &uacute;daje';
+$TEXT['RENAME'] = 'P&#345;ejm.';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Povinn&yacute;';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Vy&#269;istit';
+$TEXT['RESIZE'] = 'Zm&#283;na velikosti';
+$TEXT['RESIZE_IMAGE_TO'] = 'Zm&#283;nit velikost obr&aacute;zku na';
+$TEXT['RESTORE'] = 'Obnova ze z&aacute;lohy';
+$TEXT['RESTORE_DATABASE'] = 'Obnovit datab&aacute;zi ze z&aacute;lohy';
+$TEXT['RESTORE_MEDIA'] = 'Obnovit m&eacute;dia ze z&aacute;lohy';
+$TEXT['RESULTS'] = 'V&yacute;sledky';
+$TEXT['RESULTS_FOOTER'] = 'Z&aacute;pat&iacute; v&yacute;sledk&#367;';
+$TEXT['RESULTS_FOR'] = 'V&yacute;sledky pro';
+$TEXT['RESULTS_HEADER'] = 'Z&aacute;hlav&iacute; v&yacute;sledk&#367;';
+$TEXT['RESULTS_LOOP'] = 'Polo&#382;ka v&yacute;sledk&#367;';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Znovu nov&eacute; heslo';
+$TEXT['RETYPE_PASSWORD'] = 'Znovu heslo';
+$TEXT['SAME_WINDOW'] = 'p&#367;vodn&iacute;ho okna';
+$TEXT['SAVE'] = 'Ulo&#382;it';
+$TEXT['SEARCH'] = 'Vyhled&aacute;v&aacute;n&iacute;';
+$TEXT['SEARCHING'] = 'Vyhled&aacute;v&aacute;n&iacute;';
+$TEXT['SECTION'] = 'Sekce';
+$TEXT['SECTION_BLOCKS'] = 'Bloky sekc&iacute;';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'V&yacute;b&#283;rov&eacute; pole';
+$TEXT['SEND_DETAILS'] = 'Zaslat p&#345;ihla&scaron;ovac&iacute; &uacute;daje';
+$TEXT['SEPARATE'] = 'Odd&#283;len&#283;';
+$TEXT['SEPERATOR'] = 'Odd&#283;lova&#269;';
+$TEXT['SERVER_EMAIL'] = 'Syt&eacute;mov&yacute; e-mail';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Opera&#269;n&iacute; syst&eacute;m serveru';
+$TEXT['SESSION_IDENTIFIER'] = 'Identifik&aacute;tor session';
+$TEXT['SETTINGS'] = 'Nastaven&iacute;';
+$TEXT['SHORT'] = 'Kr&aacute;tk&yacute; popis';
+$TEXT['SHORT_TEXT'] = 'Kr&aacute;tk&yacute; text';
+$TEXT['SHOW'] = 'Zobrazit';
+$TEXT['SHOW_ADVANCED'] = 'Zobrazit pokro&#269;il&eacute; volby';
+$TEXT['SIGNUP'] = 'Registrace';
+$TEXT['SIZE'] = 'Velikost';
+$TEXT['SMART_LOGIN'] = 'Chytr&eacute; p&#345;ihl&aacute;&scaron;en&iacute;';
+$TEXT['START'] = 'Za&#269;&aacute;tek';
+$TEXT['START_PUBLISHING'] = 'Za&#269;&aacute;tek publikace';
+$TEXT['SUBJECT'] = 'P&#345;edm&#283;t';
+$TEXT['SUBMISSIONS'] = 'Odeslan&eacute; formul&aacute;&#345;e';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Odeslan&eacute; formul&aacute;&#345;e';
+$TEXT['SUBMISSION_ID'] = 'ID formul&aacute;&#345;e';
+$TEXT['SUBMITTED'] = 'Odesl&aacute;no';
+$TEXT['SUCCESS'] = '&Uacute;sp&#283;&scaron;n&#283; provedeno';
+$TEXT['SYSTEM_DEFAULT'] = 'Implicitn&iacute; v syst&eacute;mu';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Syst&eacute;mov&aacute; opr&aacute;vn&#283;n&iacute;';
+$TEXT['TABLE_PREFIX'] = 'Prefix tabulek';
+$TEXT['TARGET'] = 'Sm&#283;&#345;uje do';
+$TEXT['TARGET_FOLDER'] = 'C&iacute;lov&yacute; adres&aacute;&#345;';
+$TEXT['TEMPLATE'] = '&Scaron;ablona';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Pr&aacute;va k &scaron;ablon&#283;';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = 'Vstupn&iacute; pole';
+$TEXT['TEXTFIELD'] = 'Vstupn&iacute; &#345;&aacute;dek';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = '&#268;as';
+$TEXT['TIMEZONE'] = '&#268;asov&eacute; p&aacute;smo';
+$TEXT['TIME_FORMAT'] = 'Form&aacute;t &#269;asu';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'N&aacute;zev';
+$TEXT['TO'] = 'na';
+$TEXT['TOP_FRAME'] = 'svrchn&iacute;ho r&aacute;mu';
+$TEXT['TRASH_EMPTIED'] = 'Ko&scaron; vypr&aacute;zdn&#283;n';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Typ';
+$TEXT['UNDER_CONSTRUCTION'] = 'Ve v&yacute;stavb&#283;';
+$TEXT['UNINSTALL'] = 'Odinstalovat';
+$TEXT['UNKNOWN'] = 'Nezn&aacute;m&yacute;';
+$TEXT['UNLIMITED'] = 'Neomezen&yacute;';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Nahoru';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Nahr&aacute;t soubor(y)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'U&#382;ivatel';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifikace';
+$TEXT['VERSION'] = 'Verze';
+$TEXT['VIEW'] = 'Zobrazit';
+$TEXT['VIEW_DELETED_PAGES'] = 'Zobrazit smazan&eacute; str&aacute;nky';
+$TEXT['VIEW_DETAILS'] = 'Zobrazit';
+$TEXT['VISIBILITY'] = 'Viditelnost';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'WWW';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Popis webu';
+$TEXT['WEBSITE_FOOTER'] = 'Z&aacute;pat&iacute; webu';
+$TEXT['WEBSITE_HEADER'] = 'Z&aacute;hlav&iacute; webu';
+$TEXT['WEBSITE_KEYWORDS'] = 'Kl&iacute;&#269;ov&aacute; slova';
+$TEXT['WEBSITE_TITLE'] = 'N&aacute;zev webu';
+$TEXT['WELCOME_BACK'] = 'V&iacute;tejte';
+$TEXT['WIDTH'] = '&Scaron;&iacute;&#345;ka';
+$TEXT['WINDOW'] = 'Okno';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Pr&aacute;va z&aacute;pisu &amp;quot;pro cel&yacute; sv&#283;t&amp;quot;';
+$TEXT['WRITE'] = 'Z&aacute;pis';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG styl';
+$TEXT['YES'] = 'Ano';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'P&#345;idat skupinu';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'P&#345;idat z&aacute;hlav&iacute;';
+$HEADING['ADD_PAGE'] = 'P&#345;idat str&aacute;nku';
+$HEADING['ADD_USER'] = 'P&#345;idat u&#382;ivatele';
+$HEADING['ADMINISTRATION_TOOLS'] = 'N&aacute;stroje administrace';
+$HEADING['BROWSE_MEDIA'] = 'Prohl&iacute;&#382;e&#269; m&eacute;di&iacute;';
+$HEADING['CREATE_FOLDER'] = 'Vytvo&#345;it adres&aacute;&#345;';
+$HEADING['DEFAULT_SETTINGS'] = 'Implicitn&iacute; nastaven&iacute;';
+$HEADING['DELETED_PAGES'] = 'Smazan&eacute; str&aacute;nky';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Nastaven&iacute; syst&eacute;mu soubor&#367;';
+$HEADING['GENERAL_SETTINGS'] = 'Obecn&aacute; nastaven&iacute;';
+$HEADING['INSTALL_LANGUAGE'] = 'Nainstalovat jazyk';
+$HEADING['INSTALL_MODULE'] = 'Nainstalovat modul';
+$HEADING['INSTALL_TEMPLATE'] = 'Nainstalovat &scaron;ablonu';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detaily jazyka';
+$HEADING['MANAGE_SECTIONS'] = 'Spravovat sekce';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Zm&#283;nit pokro&#269;il&aacute; nastaven&iacute; str&aacute;nky';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Zm&#283;nit/Smazat skupinu';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Zm&#283;nit/Smazat str&aacute;nku';
+$HEADING['MODIFY_DELETE_USER'] = 'Zm&#283;nit/Smazat u&#382;ivatele';
+$HEADING['MODIFY_GROUP'] = 'Zm&#283;nit skupinu';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Zm&#283;nit &uacute;vodn&iacute; (intro) str&aacute;nku';
+$HEADING['MODIFY_PAGE'] = 'Upravit str&aacute;nku';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Zm&#283;nit nastaven&iacute; str&aacute;nky';
+$HEADING['MODIFY_USER'] = 'Zm&#283;nit u&#382;ivatele';
+$HEADING['MODULE_DETAILS'] = 'Detaily modulu';
+$HEADING['MY_EMAIL'] = 'M&#367;j e-mail';
+$HEADING['MY_PASSWORD'] = 'Moje heslo';
+$HEADING['MY_SETTINGS'] = 'Moje nastaven&iacute;';
+$HEADING['SEARCH_SETTINGS'] = 'Nastaven&iacute; vyhled&aacute;v&aacute;n&iacute;';
+$HEADING['SERVER_SETTINGS'] = 'Nastaven&iacute; serveru';
+$HEADING['TEMPLATE_DETAILS'] = 'Detaily &scaron;ablony';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Odinstalovat jazyk';
+$HEADING['UNINSTALL_MODULE'] = 'Odinstalovat modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Odinstalovat &scaron;ablonu';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Nahr&aacute;t soubor(y)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Nedostate&#269;n&aacute; opr&aacute;vn&#283;n&iacute;';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Heslo nem&#367;&#382;e b&yacute;t p&#345;enastaveno v&iacute;cekr&aacute;t b&#283;hem jedn&eacute; hodiny';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Nelze odeslat heslo e-mailem, kontaktujte pros&iacute;m spr&aacute;vce syst&eacute;mu';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Zadan&aacute; e-mailov&aacute; adresa nebyla nalezena';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Zadejte svoji e-mailovou adresu:';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Nem&aacute;te opr&aacute;vn&#283;n&iacute; prohl&iacute;&#382;et tuto str&aacute;nku';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Ji&#382; d&#345;&iacute;ve nainstalov&aacute;no';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Nelze zapisovat do c&iacute;lov&eacute;ho adres&aacute;&#345;e';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Nelze odinstalovat';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Nelze odinstalovat: soubor je pr&aacute;v&#283; pou&#382;&iacute;v&aacute;n';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Nelze rozbalit (rozzipovat) soubor';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Nelze nahr&aacute;t soubor';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Do&scaron;lo k chyb&#283; p&#345;i otev&iacute;r&aacute;n&iacute; souboru.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Nahr&aacute;van&yacute; soubory mus&iacute; b&yacute;t n&aacute;sleduj&iacute;c&iacute;ho form&aacute;tu:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Nahr&aacute;van&yacute; soubor mus&iacute; m&iacute;t jeden z n&aacute;sleduj&iacute;c&iacute;ch form&aacute;t&#367;:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Pros&iacute;m vra&#357;te se zp&#283;t a vypl&#328;te v&scaron;echna pole';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Instalace prob&#283;hla &uacute;sp&#283;&scaron;n&#283;';
+$MESSAGE['GENERIC_INVALID'] = 'Nahr&aacute;van&yacute; soubor je neplatn&yacute;';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nenainstalov&aacute;no';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = '&#268;ekejte pros&iacute;m, operace m&#367;&#382;e chv&iacute;li trvat.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Zkuste to p&#345;&iacute;&scaron;t&#283;...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Odinstalace prob&#283;hla &uacute;sp&#283;&scaron;n&#283;';
+$MESSAGE['GENERIC_UPGRADED'] = 'Aktualizace prob&#283;hla &uacute;sp&#283;&scaron;n&#283;';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Str&aacute;nky jsou ve v&yacute;stavb&#283;';
+$MESSAGE['GROUPS_ADDED'] = 'Skupina byla &uacute;sp&#283;&scaron;n&#283; p&#345;id&aacute;na';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Jste si jisti, &#382;e chcete smazat tuto skupimu (a v&scaron;echny jej&iacute; u&#382;ivatele)?';
+$MESSAGE['GROUPS_DELETED'] = 'Skupina byla &uacute;sp&#283;&scaron;n&#283; smaz&aacute;na';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'N&aacute;zev skupiny je pr&aacute;zdn&yacute;';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Tato skupina ji&#382; existuje';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Nenalezena &#382;&aacute;dn&aacute; skupina';
+$MESSAGE['GROUPS_SAVED'] = 'Skupina byla &uacute;sp&#283;&scaron;n&#283; ulo&#382;ena';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Zadejte sv&eacute; heslo';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Zadan&eacute; heslo je p&#345;&iacute;li&scaron; dlouh&eacute;';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Zadan&eacute; heslo je p&#345;&iacute;li&scaron; kr&aacute;tk&eacute;';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Nezadali jste p&#345;&iacute;ponu souboru';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Nezadali jste nov&yacute; n&aacute;zev';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Nelze smazat vybran&yacute; adres&aacute;&#345;';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Nelze smazat vybran&yacute; soubor';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'P&#345;ejmenov&aacute;n&iacute; se nezda&#345;ilo';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Jste si jisti, &#382;e chcete smazat n&aacute;sleduj&iacute;c&iacute; soubory nebo adres&aacute;&#345;e?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Adres&aacute;&#345; byl &uacute;sp&#283;&scaron;n&#283; smaz&aacute;n';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Soubor byl &uacute;sp&#283;&scaron;n&#283; smaz&aacute;n';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Adres&aacute;&#345; neexistuje';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Nelze pou&#382;&iacute;t ../ v n&aacute;zvu adres&aacute;&#345;e';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Adres&aacute;&#345; se stejn&yacute;m n&aacute;zvem ji&#382; existuje';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Adres&aacute;&#345; byl &uacute;sp&#283;&scaron;n&#283; vytvo&#345;en';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Nelze vytvo&#345;it adres&aacute;&#345;';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Soubor se stejn&yacute;m n&aacute;zvem ji&#382; existuje';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Soubor nenalezen';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Nelze pou&#382;&iacute;t ../ v n&aacute;zvu';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nelze pou&#382;&iacute;t index.php jako n&aacute;zev';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nenalezen &#382;&aacute;dn&yacute; soubor';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'P&#345;ejmenov&aacute;n&iacute; prob&#283;hlo &uacute;sp&#283;&scaron;n&#283;';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' soubor byl &uacute;sp&#283;&scaron;n&#283; nahr&aacute;n';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Nelze pou&#382;&iacute;t ../ v c&iacute;lov&eacute;m adres&aacute;&#345;i';
+$MESSAGE['MEDIA_UPLOADED'] = ' soubory byly &uacute;sp&#283;&scaron;n&#283; nahr&aacute;ny';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Omlouv&aacute;me se, ale tento formul&aacute;&#345; dos&aacute;hl limitu povolen&yacute;ch odesl&aacute;n&iacute; pro tuto hodinu. Pros&iacute;m zkuste to znovu v dal&scaron;&iacute; hodin&#283;..';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Kontroln&iacute; k&oacute;d (zn&aacute;m&yacute; jako Captcha) neodpov&iacute;d&aacute;. Pokud m&aacute;te probl&eacute;my s p&#345;e&#269;ten&iacute;m tohoto k&oacute;du, kontaktujte <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Mus&iacute;te vyplnit n&aacute;sleduj&iacute;c&iacute; pole';
+$MESSAGE['PAGES_ADDED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; p&#345;id&aacute;na';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Z&aacute;hlav&iacute; str&aacute;nky bylo &uacute;sp&#283;&scaron;n&#283; p&#345;id&aacute;no';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Zadejte n&aacute;zev v menu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Zadejte n&aacute;zev str&aacute;nky';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Do&scaron;lo k chyb&#283; p&#345;i vytv&aacute;&#345;en&iacute; p&#345;&iacute;supov&eacute;ho souboru v adres&aacute;&#345;i str&aacute;nek (nedostate&#269;n&aacute; opr&aacute;vn&#283;n&iacute;)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Do&scaron;lo k chyb&#283; p&#345;i maz&aacute;n&iacute; p&#345;&iacute;supov&eacute;ho souboru v adres&aacute;&#345;i str&aacute;nek (nedostate&#269;n&aacute; opr&aacute;vn&#283;n&iacute;)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Do&scaron;lo k chyb&#283; p&#345;i zm&#283;n&#283; po&#345;ad&iacute; str&aacute;nky';
+$MESSAGE['PAGES_DELETED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; smaz&aacute;na';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Jste si jisti, &#382;e chcete smazat tuto str&aacute;nku (a v&scaron;echny podstr&aacute;nky)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Nem&aacute;te opr&aacute;vn&#283;n&iacute; ke zm&#283;n&#283; t&eacute;to str&aacute;nky';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Zm&#283;nit &uacute;vodn&iacute; (intro) str&aacute;nku';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Nelze zapisovat do souboru /pages/intro.php (nedostate&#269;n&aacute; opr&aacute;vn&#283;n&iacute;)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; ulo&#382;ena';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Posledn&iacute; zm&#283;na:';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Str&aacute;nka nenalezena';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Do&scaron;lo k chyb&#283; p&#345;i ukl&aacute;d&aacute;n&iacute; str&aacute;nky';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Str&aacute;nka se stejn&yacute;m nebo podobn&yacute;m n&aacute;zvem ji&#382; existuje';
+$MESSAGE['PAGES_REORDERED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; p&#345;esunuta';
+$MESSAGE['PAGES_RESTORED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; obnovena';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Zp&#283;t na str&aacute;nky';
+$MESSAGE['PAGES_SAVED'] = 'Str&aacute;nka byla &uacute;sp&#283;&scaron;n&#283; ulo&#382;ena';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Nastaven&iacute; str&aacute;nky bylo &uacute;sp&#283;&scaron;n&#283; ulo&#382;eno';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Nastaven&iacute; sekce bylo &uacute;sp&#283;&scaron;n&#283; ulo&#382;eno';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Sou&#269;asn&eacute; heslo neodpov&iacute;d&aacute;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detaily byly &uacute;sp&#283;&scaron;n&#283; ulo&#382;eny';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-mail byl &uacute;sp&#283;&scaron;n&#283; ulo&#382;en';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Heslo bylo &uacute;sp&#283;&scaron;n&#283; zm&#283;n&#283;no';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Pozn.: stisknut&iacute;m tohoto tla&#269;&iacute;tka dojde k zahozen&iacute; neulo&#382;en&yacute;ch zm&#283;n';
+$MESSAGE['SETTINGS_SAVED'] = 'Nastaven&iacute; bylo &uacute;sp&#283;&scaron;n&#283; ulo&#382;eno';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Nelze otev&#345;&iacute;t soubor s konfigurac&iacute;';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Nelze zapisovat do souboru s konfigurac&iacute;';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Pozn.: zapnut&iacute; t&eacute;to volby se doporu&#269;uje jen v testovac&iacute;m prost&#345;ed&iacute;';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Mus&iacute;te zadat e-mailovou adresu';
+$MESSAGE['START_CURRENT_USER'] = 'Jste p&#345;ihl&aacute;&scaron;eni jako:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Pozor, st&aacute;le existuje instala&#269;n&iacute; adres&aacute;&#345;!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'V&iacute;tejte v Administra&#269;n&iacute; &#269;&aacute;sti';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Pozn.: zm&#283;na &scaron;ablony se prov&aacute;d&iacute; v sekci Nastaven&iacute;';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'U&#382;ivatel byl &uacute;sp&#283;&scaron;n&#283; p&#345;id&aacute;n';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Pozn.: vypl&#328;te pouze hodnoty v&yacute;&scaron;e pokud si p&#345;ejete zm&#283;nit heslo';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Jste si jisti, &#382;e chcete smazat tohoto u&#382;ivatele?';
+$MESSAGE['USERS_DELETED'] = 'U&#382;ivatel byl &uacute;sp&#283;&scaron;n&#283; smaz&aacute;n';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Zadan&aacute; e-mailov&aacute; adresa je ji&#382; pou&#382;&iacute;v&aacute;na';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Zadan&aacute; e-mailov&aacute; adresa je neplatn&aacute;';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Nebyla vybr&aacute;na skupina';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Zadan&aacute; hesla nejsou shodn&aacute;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Zadan&eacute; heslo je p&#345;&iacute;li&scaron; kr&aacute;tk&eacute;';
+$MESSAGE['USERS_SAVED'] = 'U&#382;ivatel byl &uacute;sp&#283;&scaron;n&#283; ulo&#382;en';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Spravovat skupiny u&#382;ivatel&#367; a jejich opr&aacute;vn&#283;n&iacute;...';
+$OVERVIEW['HELP'] = 'M&aacute;te ot&aacute;zku? Hledejte odpov&#283;&#271;...';
+$OVERVIEW['LANGUAGES'] = 'Spravovat jazyky WebsiteBakeru...';
+$OVERVIEW['MEDIA'] = 'Spravovat soubory v adres&aacute;&#345;i m&eacute;di&iacute;...';
+$OVERVIEW['MODULES'] = 'Spravovat moduly WebsiteBakeru...';
+$OVERVIEW['PAGES'] = 'Spravovat webov&eacute; str&aacute;nky...';
+$OVERVIEW['PREFERENCES'] = 'Zm&#283;na nastaven&iacute; e-mailov&eacute; adresy, hesla, atd... ';
+$OVERVIEW['SETTINGS'] = 'Zm&#283;na nastaven&iacute; WebsiteBakeru...';
+$OVERVIEW['START'] = 'Administra&#269;n&iacute; p&#345;ehled';
+$OVERVIEW['TEMPLATES'] = 'Zm&#283;nit vzhled a chov&aacute;n&iacute; webu pomoc&iacute; &scaron;ablon...';
+$OVERVIEW['USERS'] = 'Spravovat u&#382;ivate WebsiteBakeru...';
+$OVERVIEW['VIEW'] = 'Rychle prohl&eacute;dhout str&aacute;nky v nov&eacute;m okn&#283;...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/CS.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/DA.php
===================================================================
--- trunk/languages/DA.php	(nonexistent)
+++ trunk/languages/DA.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Du kan ikke få direkte adgang til denne fil"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'DA';
+$language_name = 'Dansk';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Allan Christensen';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Adgang';
+$MENU['ADDON'] = 'Tilf&oslash;jelse';
+$MENU['ADDONS'] = 'Tilf&oslash;jelser';
+$MENU['ADMINTOOLS'] = 'Admin-v&aelig;rkt&oslash;jer';
+$MENU['BREADCRUMB'] = 'Du er her: ';
+$MENU['FORGOT'] = 'Send login oplysninger';
+$MENU['GROUP'] = 'Gruppe';
+$MENU['GROUPS'] = 'Grupper';
+$MENU['HELP'] = 'Hj&aelig;lp';
+$MENU['LANGUAGES'] = 'Sprog';
+$MENU['LOGIN'] = 'Log ind';
+$MENU['LOGOUT'] = 'Log ud';
+$MENU['MEDIA'] = 'Medie-filer';
+$MENU['MODULES'] = 'Moduler';
+$MENU['PAGES'] = 'Sider';
+$MENU['PREFERENCES'] = 'Pr&aelig;ferencer';
+$MENU['SETTINGS'] = 'Indstillinger';
+$MENU['START'] = 'Hjem';
+$MENU['TEMPLATES'] = 'Skabeloner';
+$MENU['USERS'] = 'Brugere';
+$MENU['VIEW'] = 'Vis';
+$TEXT['ACCOUNT_SIGNUP'] = 'Kontoregistrering';
+$TEXT['ACTIONS'] = 'Handlinger';
+$TEXT['ACTIVE'] = 'Aktiv';
+$TEXT['ADD'] = 'Tilf&oslash;j';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Tilf&oslash;j sektion';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administr&eacute;r';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administrationsv&aelig;rkt&oslash;jer';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratorer';
+$TEXT['ADVANCED'] = 'Avanceret';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Tilladte filtyper ved overf&oslash;rsel';
+$TEXT['ALLOWED_VIEWERS'] = 'Tilladte brugere';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Tillad flere valg samtidig';
+$TEXT['ALL_WORDS'] = 'Alle ordene';
+$TEXT['ANCHOR'] = 'Bogm&aelig;rke';
+$TEXT['ANONYMOUS'] = 'Anonym';
+$TEXT['ANY_WORDS'] = 'Kun et af ordene';
+$TEXT['APP_NAME'] = 'Applikationsnavn';
+$TEXT['ARE_YOU_SURE'] = 'Er du sikker?';
+$TEXT['AUTHOR'] = 'Udvikler/forfatter';
+$TEXT['BACK'] = 'Tilbage';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Lav backup af alle tabeller i databasen';
+$TEXT['BACKUP_DATABASE'] = 'Backup af database';
+$TEXT['BACKUP_MEDIA'] = 'Lav backup af medie-filer';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Lav kun backup af WB-specifikke tabeller';
+$TEXT['BASIC'] = 'Basisindstillinger';
+$TEXT['BLOCK'] = 'Blok';
+$TEXT['CALENDAR'] = 'Kalender';
+$TEXT['CANCEL'] = 'Annull&eacute;r';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Kan slette sig selv';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha verifikation';
+$TEXT['CAP_EDIT_CSS'] = 'Rediger CSS';
+$TEXT['CHANGE'] = 'Ret';
+$TEXT['CHANGES'] = '&AElig;ndringer';
+$TEXT['CHANGE_SETTINGS'] = 'Skift indstillinger';
+$TEXT['CHARSET'] = 'Tegns&aelig;t';
+$TEXT['CHECKBOX_GROUP'] = 'Afkrydsningsgruppe';
+$TEXT['CLOSE'] = 'Luk';
+$TEXT['CODE'] = 'Kode';
+$TEXT['CODE_SNIPPET'] = 'Kodestump';
+$TEXT['COLLAPSE'] = 'Fold sammen';
+$TEXT['COMMENT'] = 'Kommentar';
+$TEXT['COMMENTING'] = 'Kommentere';
+$TEXT['COMMENTS'] = 'Kommentarer';
+$TEXT['CREATE_FOLDER'] = 'Opret mappe';
+$TEXT['CURRENT'] = 'Nuv&aelig;rende';
+$TEXT['CURRENT_FOLDER'] = 'Nuv&aelig;rende mappe';
+$TEXT['CURRENT_PAGE'] = 'Nuv&aelig;rende side';
+$TEXT['CURRENT_PASSWORD'] = 'Nuv&aelig;rende adgangskode';
+$TEXT['CUSTOM'] = 'Brugerdefineret';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Dato';
+$TEXT['DATE_FORMAT'] = 'Datoformat';
+$TEXT['DEFAULT'] = 'Standard';
+$TEXT['DEFAULT_CHARSET'] = 'Standard tegns&aelig;t';
+$TEXT['DEFAULT_TEXT'] = 'Standardtekst';
+$TEXT['DELETE'] = 'Slet';
+$TEXT['DELETED'] = 'Slettet';
+$TEXT['DELETE_DATE'] = 'Slet dato';
+$TEXT['DELETE_ZIP'] = 'Slet zip-arkiv efter udpakning';
+$TEXT['DESCRIPTION'] = 'Beskrivelse';
+$TEXT['DESIGNED_FOR'] = 'Designet til';
+$TEXT['DIRECTORIES'] = 'Biblioteker (mapper)';
+$TEXT['DIRECTORY_MODE'] = 'Bibliotekstilstand';
+$TEXT['DISABLED'] = 'Deaktiveret';
+$TEXT['DISPLAY_NAME'] = 'Vis navn';
+$TEXT['EMAIL'] = 'Email-adresse';
+$TEXT['EMAIL_ADDRESS'] = 'Email-adresse';
+$TEXT['EMPTY_TRASH'] = 'T&oslash;m papirkurv';
+$TEXT['ENABLED'] = 'Aktiveret';
+$TEXT['END'] = 'Slut';
+$TEXT['ERROR'] = 'Der opstod en fejl';
+$TEXT['EXACT_MATCH'] = 'Eksakt s&oslash;gning';
+$TEXT['EXECUTE'] = 'Udf&oslash;r';
+$TEXT['EXPAND'] = 'Fold ud';
+$TEXT['EXTENSION'] = 'Udvidelse';
+$TEXT['FIELD'] = 'Felt';
+$TEXT['FILE'] = 'Fil';
+$TEXT['FILES'] = 'Filer';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Filesystem - Tilladelser';
+$TEXT['FILE_MODE'] = 'Filtilstand';
+$TEXT['FINISH_PUBLISHING'] = 'Afslut offentligg&oslash;relse';
+$TEXT['FOLDER'] = 'Mappe';
+$TEXT['FOLDERS'] = 'Mapper';
+$TEXT['FOOTER'] = 'Fod (bund)';
+$TEXT['FORGOTTEN_DETAILS'] = 'Har du glemt dine login-oplysninger?';
+$TEXT['FORGOT_DETAILS'] = 'Glemt login-oplysninger?';
+$TEXT['FROM'] = 'Fra';
+$TEXT['FRONTEND'] = 'Websted (vis siden)';
+$TEXT['FULL_NAME'] = 'Fulde navn';
+$TEXT['FUNCTION'] = 'Funktion';
+$TEXT['GROUP'] = 'Gruppe';
+$TEXT['HEADER'] = 'Hoved (overligger)';
+$TEXT['HEADING'] = 'Overskrift';
+$TEXT['HEADING_CSS_FILE'] = 'Aktuel modulfil: ';
+$TEXT['HEIGHT'] = 'H&oslash;jde';
+$TEXT['HIDDEN'] = 'Skjult';
+$TEXT['HIDE'] = 'Skjul';
+$TEXT['HIDE_ADVANCED'] = 'Skjul avancerede indstillinger';
+$TEXT['HOME'] = 'Hjem';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Viderestilling af hjemmeside';
+$TEXT['HOME_FOLDER'] = 'Personlig folder';
+$TEXT['HOME_FOLDERS'] = 'Personlige foldere';
+$TEXT['HOST'] = 'V&aelig;rt';
+$TEXT['ICON'] = 'Ikon';
+$TEXT['IMAGE'] = 'Billede';
+$TEXT['INLINE'] = 'Indbygget';
+$TEXT['INSTALL'] = 'Install&eacute;r';
+$TEXT['INSTALLATION'] = 'Installation';
+$TEXT['INSTALLATION_PATH'] = 'Installationssti';
+$TEXT['INSTALLATION_URL'] = 'Installations URL';
+$TEXT['INSTALLED'] = 'installeret';
+$TEXT['INTRO'] = 'Introduktion';
+$TEXT['INTRO_PAGE'] = 'Intro-side';
+$TEXT['INVALID_SIGNS'] = 'skal begynde med et bogstav eller indeholder ugyldige tegn';
+$TEXT['KEYWORDS'] = 'N&oslash;gleord';
+$TEXT['LANGUAGE'] = 'Sprog';
+$TEXT['LAST_UPDATED_BY'] = 'Sidst opdateret af:';
+$TEXT['LENGTH'] = 'L&aelig;ngde';
+$TEXT['LEVEL'] = 'Niveau';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix baseret';
+$TEXT['LIST_OPTIONS'] = 'Vis valgmuligheder';
+$TEXT['LOGGED_IN'] = 'Logget ind';
+$TEXT['LOGIN'] = 'Log ind';
+$TEXT['LONG'] = 'Lang';
+$TEXT['LONG_TEXT'] = 'Lang tekst';
+$TEXT['LOOP'] = 'Liste';
+$TEXT['MAIN'] = 'Hovedoversigt';
+$TEXT['MAINTENANCE_OFF'] = 'Vedligeholdelse tilvalgt';
+$TEXT['MAINTENANCE_ON'] = 'MaVedligeholdelse fravalgt';
+$TEXT['MANAGE'] = 'Administr&eacute;r';
+$TEXT['MANAGE_GROUPS'] = 'Administr&eacute;r grupper';
+$TEXT['MANAGE_USERS'] = 'Administr&eacute;r brugere';
+$TEXT['MATCH'] = 'Match';
+$TEXT['MATCHING'] = 'Matchende';
+$TEXT['MAX_EXCERPT'] = 'Max linier i udsnit';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. indsendte bidrag pr. time';
+$TEXT['MEDIA_DIRECTORY'] = 'Mediebibliotek (mappe)';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-ikon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-ikon sv&aelig;rende';
+$TEXT['MENU_TITLE'] = 'Menutitel';
+$TEXT['MESSAGE'] = 'Indl&aelig;g';
+$TEXT['MODIFY'] = 'Ret';
+$TEXT['MODIFY_CONTENT'] = 'Ret indhold';
+$TEXT['MODIFY_SETTINGS'] = 'Skift indstillinger';
+$TEXT['MODULE_ORDER'] = 'Modul-r&aelig;kkef&oslash;lge ved s&oslash;gning';
+$TEXT['MODULE_PERMISSIONS'] = 'Modulrettigheder';
+$TEXT['MORE'] = 'Mere';
+$TEXT['MOVE_DOWN'] = 'Flyt ned';
+$TEXT['MOVE_UP'] = 'Flyt op';
+$TEXT['MULTIPLE_MENUS'] = 'Flere menuer';
+$TEXT['MULTISELECT'] = 'Multi-valg';
+$TEXT['NAME'] = 'Navn';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'Bekr&aelig;ft med nuv&aelig;rende adgangskode';
+$TEXT['NEED_TO_LOGIN'] = 'Brug for at logge ind?';
+$TEXT['NEW_PASSWORD'] = 'Ny adgangskode';
+$TEXT['NEW_WINDOW'] = 'Nyt vindue';
+$TEXT['NEXT'] = 'N&aelig;ste';
+$TEXT['NEXT_PAGE'] = 'N&aelig;ste side';
+$TEXT['NO'] = 'Nej';
+$TEXT['NONE'] = 'Usynlig';
+$TEXT['NONE_FOUND'] = 'Ingen fundet';
+$TEXT['NOT_FOUND'] = 'Ikke fundet';
+$TEXT['NOT_INSTALLED'] = 'ikke installeret';
+$TEXT['NO_IMAGE_SELECTED'] = 'intet billede valgt';
+$TEXT['NO_RESULTS'] = 'Intet fundet';
+$TEXT['OF'] = 'af';
+$TEXT['ON'] = 'D.';
+$TEXT['OPEN'] = '&Aring;ben';
+$TEXT['OPTION'] = 'Mulighed';
+$TEXT['OTHERS'] = 'Andre';
+$TEXT['OUT_OF'] = 'ud af i alt';
+$TEXT['OVERWRITE_EXISTING'] = 'Overskriv eksisterende';
+$TEXT['PAGE'] = 'Side';
+$TEXT['PAGES_DIRECTORY'] = 'Sidebibliotek (mappe)';
+$TEXT['PAGES_PERMISSION'] = 'Sideadgang';
+$TEXT['PAGES_PERMISSIONS'] = 'Sideadgange';
+$TEXT['PAGE_EXTENSION'] = 'Side-udvidelse';
+$TEXT['PAGE_ICON'] = 'Sidebillede';
+$TEXT['PAGE_ICON_DIR'] = 'Sti til sider/menu billeder';
+$TEXT['PAGE_LANGUAGES'] = 'Sprog';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Max. sideantal';
+$TEXT['PAGE_SPACER'] = 'Side pladsmark&oslash;r';
+$TEXT['PAGE_TITLE'] = 'Titel p&aring; side';
+$TEXT['PAGE_TRASH'] = 'Papirkurv til sider';
+$TEXT['PARENT'] = 'Overliggende niveau';
+$TEXT['PASSWORD'] = 'Adgangskode';
+$TEXT['PATH'] = 'Sti';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP fejlrapporteringsniveau';
+$TEXT['PLEASE_LOGIN'] = 'Log ind';
+$TEXT['PLEASE_SELECT'] = 'V&aelig;lg venligst';
+$TEXT['POST'] = 'Indl&aelig;g';
+$TEXT['POSTS_PER_PAGE'] = 'Indl&aelig;g pr. side';
+$TEXT['POST_FOOTER'] = 'Fod (bund) p&aring; indl&aelig;g';
+$TEXT['POST_HEADER'] = 'Hoved p&aring; indl&aelig;g';
+$TEXT['PREVIOUS'] = 'Forrige';
+$TEXT['PREVIOUS_PAGE'] = 'Forrige side';
+$TEXT['PRIVATE'] = 'Privat';
+$TEXT['PRIVATE_VIEWERS'] = 'Private bes&oslash;gende';
+$TEXT['PROFILES_EDIT'] = 'Ret profil';
+$TEXT['PUBLIC'] = 'Offentlig';
+$TEXT['PUBL_END_DATE'] = 'Slutdato';
+$TEXT['PUBL_START_DATE'] = 'Startdato';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radioknap-gruppe';
+$TEXT['READ'] = 'L&aelig;s';
+$TEXT['READ_MORE'] = 'L&aelig;s mere';
+$TEXT['REDIRECT_AFTER'] = 'Videresend efter';
+$TEXT['REGISTERED'] = 'Registrerede';
+$TEXT['REGISTERED_VIEWERS'] = 'Registrerede brugere';
+$TEXT['RELOAD'] = 'Opdat&eacute;r';
+$TEXT['REMEMBER_ME'] = 'Husk mig';
+$TEXT['RENAME'] = 'Omd&oslash;b';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'Omd&oslash;b filer under opload';
+$TEXT['REQUIRED'] = 'Kr&aelig;vet';
+$TEXT['REQUIREMENT'] = 'Krav';
+$TEXT['RESET'] = 'Nulstil';
+$TEXT['RESIZE'] = 'Skift st&oslash;rrelse';
+$TEXT['RESIZE_IMAGE_TO'] = 'Forst&oslash;r/formindsk billede til';
+$TEXT['RESTORE'] = 'Gendannelse';
+$TEXT['RESTORE_DATABASE'] = 'Gendan database';
+$TEXT['RESTORE_MEDIA'] = 'Gendan medie-filer';
+$TEXT['RESULTS'] = 'Resultater';
+$TEXT['RESULTS_FOOTER'] = 'Resultatfod (bund)';
+$TEXT['RESULTS_FOR'] = 'Resultater for';
+$TEXT['RESULTS_HEADER'] = 'Resultathoved';
+$TEXT['RESULTS_LOOP'] = 'Resultatliste';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Skriv ny adgangskode igen';
+$TEXT['RETYPE_PASSWORD'] = 'Indtast adgangskode igen';
+$TEXT['SAME_WINDOW'] = 'Samme vindue';
+$TEXT['SAVE'] = 'Gem';
+$TEXT['SEARCH'] = 'S&oslash;g';
+$TEXT['SEARCHING'] = 'S&oslash;gefunktion';
+$TEXT['SECTION'] = 'Sektion';
+$TEXT['SECTION_BLOCKS'] = 'Sektionsblokke';
+$TEXT['SEC_ANCHOR'] = 'Sektionsankertekst';
+$TEXT['SELECT_BOX'] = 'Afkrydsningsboks';
+$TEXT['SEND_DETAILS'] = 'Send oplysninger';
+$TEXT['SEPARATE'] = 'Separat';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'Server email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Server operativsystem';
+$TEXT['SESSION_IDENTIFIER'] = 'Sessions-ID';
+$TEXT['SETTINGS'] = 'Indstillinger';
+$TEXT['SHORT'] = 'Kort';
+$TEXT['SHORT_TEXT'] = 'Kort tekst';
+$TEXT['SHOW'] = 'Vis';
+$TEXT['SHOW_ADVANCED'] = 'Vis avancerede indstillnger';
+$TEXT['SIGNUP'] = 'Registrering';
+$TEXT['SIZE'] = 'St&oslash;rrelse';
+$TEXT['SMART_LOGIN'] = 'Smart Log-ind';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Start offentligg&oslash;relse';
+$TEXT['SUBJECT'] = 'Emne';
+$TEXT['SUBMISSIONS'] = 'Indsendte bidrag';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Indsendte bidrag gemt i databasen';
+$TEXT['SUBMISSION_ID'] = 'Tilmeldings-ID';
+$TEXT['SUBMITTED'] = 'Indsendt';
+$TEXT['SUCCESS'] = 'Oplysninger gemt';
+$TEXT['SYSTEM_DEFAULT'] = 'Systemstandard';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Systemrettigheder';
+$TEXT['TABLE_PREFIX'] = 'Tabelpr&aelig;fix';
+$TEXT['TARGET'] = 'M&aring;l';
+$TEXT['TARGET_FOLDER'] = 'Mappeplacering';
+$TEXT['TEMPLATE'] = 'Skabelon';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Skabelon-tilladelser';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Tekstomr&aring;de';
+$TEXT['TEXTFIELD'] = 'Tekstfelt';
+$TEXT['THEME'] = 'Backend-tema';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Tid';
+$TEXT['TIMEZONE'] = 'Tidszone';
+$TEXT['TIME_FORMAT'] = 'Tidsformat';
+$TEXT['TIME_LIMIT'] = 'Max tid til uddrag per modul';
+$TEXT['TITLE'] = 'Titel';
+$TEXT['TO'] = 'Til';
+$TEXT['TOP_FRAME'] = 'Top frame';
+$TEXT['TRASH_EMPTIED'] = 'Papirkurv t&oslash;mt';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Rediger CSS definitioner i tekstfeltet nedenfor';
+$TEXT['TYPE'] = 'Type';
+$TEXT['UNDER_CONSTRUCTION'] = 'Under konstruktion';
+$TEXT['UNINSTALL'] = 'Afinstall&eacute;r';
+$TEXT['UNKNOWN'] = 'Ukendt';
+$TEXT['UNLIMITED'] = 'Ubegr&aelig;nset';
+$TEXT['UNZIP_FILE'] = 'Overf&oslash;r og udpak et zip-arkiv';
+$TEXT['UP'] = 'Op';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Overf&oslash;r fil(er)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Bruger';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'Brugeren er sat aktiv';
+$TEXT['USERS_CAN_SELFDELETE'] = 'Brugeren kan slette sig selv';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Brugeren kan slette egne indstillinger';
+$TEXT['USERS_DELETED'] = 'Brugeren er slettemarkeret';
+$TEXT['USERS_FLAGS'] = 'Brugerm&aelig;rker';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'Brugeren kan lave udvidet profil';
+$TEXT['VERIFICATION'] = 'Indtast verifikationstal';
+$TEXT['VERSION'] = 'Version';
+$TEXT['VIEW'] = 'Se';
+$TEXT['VIEW_DELETED_PAGES'] = 'Vis slettede sider';
+$TEXT['VIEW_DETAILS'] = 'Se oplysninger';
+$TEXT['VISIBILITY'] = 'Synlighed';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Standard fra-adresse';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Standard afsendernavn';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Angiv standard "FRA"-adresse og "AFSENDER"-navn nedenfor. Det anbefales at angive FRA-adresse som: <strong>admin@dit-dom&aelig;ne.dk</strong>. Nogle udbydere (f.eks. <em>mail.com</em>) kan afvise emails med en FRA-adresse som <em>navn@mail.com</em>, hvis de er sendt via en anden udbyder, for at undg&aring; spam.<br /><br />Standardv&aelig;rdierne benyttes kun, hvis ingen andre v&aelig;rdier angives i WebsiteBaker. Hvis din server underst&oslash;tter <acronym title="Simple mail transfer protocol">SMTP</acronym>, kan du v&aelig;lge at bruge denne til udg&aring;ende emails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mailprogram';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP mail-program indstillinger:</strong><br />Indstillingerne nedenfor er kun n&oslash;dvendige, hvis du vil sende emails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. Hvis du ikke kender adressen p&aring; din SMTP-v&aelig;rt eller de kr&aelig;vede indstillinger, s&aring; hold dig til standardprogrammet, PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP brugeradgangskontrol';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = '- skal kun anvendes hvis din SMTP-v&aelig;rt bruger adgangskontrol';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP-v&aelig;rt';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP adgangskode';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Websted';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Beskrivelse af dit websted';
+$TEXT['WEBSITE_FOOTER'] = 'Webstedsfod (bund)';
+$TEXT['WEBSITE_HEADER'] = 'Webstedshoved';
+$TEXT['WEBSITE_KEYWORDS'] = 'Webstedsn&oslash;gleord';
+$TEXT['WEBSITE_TITLE'] = 'Titel p&aring; dit websted';
+$TEXT['WELCOME_BACK'] = 'Velkommen igen';
+$TEXT['WIDTH'] = 'Bredde';
+$TEXT['WINDOW'] = 'Vindue';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Globale skriverettigheder';
+$TEXT['WRITE'] = 'Skriv';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG-editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG-stil';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On krav er ikke opfyldt';
+$HEADING['ADD_CHILD_PAGE'] = 'Tilf&oslash;j underside';
+$HEADING['ADD_GROUP'] = 'Tilf&oslash;j gruppe';
+$HEADING['ADD_GROUPS'] = 'Tilf&oslash;j grupper';
+$HEADING['ADD_HEADING'] = 'Tilf&oslash;j overskrift';
+$HEADING['ADD_PAGE'] = 'Tilf&oslash;j side';
+$HEADING['ADD_USER'] = 'Tilf&oslash;j bruger';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administrationsv&aelig;rkt&oslash;jer';
+$HEADING['BROWSE_MEDIA'] = 'Gennemse medie-mappe';
+$HEADING['CREATE_FOLDER'] = 'Opret mappe';
+$HEADING['DEFAULT_SETTINGS'] = 'Standard indstillinger';
+$HEADING['DELETED_PAGES'] = 'Slettede sider';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Filsystem-indstillinger';
+$HEADING['GENERAL_SETTINGS'] = 'Generelle indstillinger';
+$HEADING['INSTALL_LANGUAGE'] = 'Install&eacute;r sprog';
+$HEADING['INSTALL_MODULE'] = 'Install&eacute;r modul';
+$HEADING['INSTALL_TEMPLATE'] = 'Install&eacute;r skabelon';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'H&aring;ndter sprogfiler manuelt';
+$HEADING['INVOKE_MODULE_FILES'] = 'H&aring;ndter modulfiler manuelt';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'H&aring;ndter skabelonfiler manuelt';
+$HEADING['LANGUAGE_DETAILS'] = 'Info om sprog';
+$HEADING['MANAGE_SECTIONS'] = 'Administr&eacute;r sektioner';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Rediger avancerede indstillinger for hjemmesiden';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Ret/slet gruppe';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Ret/slet side';
+$HEADING['MODIFY_DELETE_USER'] = 'Ret/slet bruger';
+$HEADING['MODIFY_GROUP'] = 'Ret gruppe';
+$HEADING['MODIFY_GROUPS'] = 'Ret grupper';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Rediger intro-side';
+$HEADING['MODIFY_PAGE'] = 'Rediger side';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Rediger side-indstillinger';
+$HEADING['MODIFY_USER'] = 'Ret bruger';
+$HEADING['MODULE_DETAILS'] = 'Info om modul';
+$HEADING['MY_EMAIL'] = 'Min email-adresse';
+$HEADING['MY_PASSWORD'] = 'Min adgangskode';
+$HEADING['MY_SETTINGS'] = 'Mine indstillinger';
+$HEADING['SEARCH_SETTINGS'] = 'S&oslash;ge-indstillinger';
+$HEADING['SERVER_SETTINGS'] = 'Server-indstillinger';
+$HEADING['TEMPLATE_DETAILS'] = 'Info om skabelon';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Afinstall&eacute;r sprog';
+$HEADING['UNINSTALL_MODULE'] = 'Afinstall&eacute;r modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Afinstall&eacute;r skabelon';
+$HEADING['UPGRADE_LANGUAGE'] = 'Sprogopgradering';
+$HEADING['UPLOAD_FILES'] = 'Overf&oslash;r fil(er)';
+$HEADING['WBMAILER_SETTINGS'] = 'E-mail-indstillinger';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Fejl under opdatering af tilf&oslash;jelse.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Sprog indl&aelig;st';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>PAS P&aring;!</strong> Af sikkerhedsgrunde b&oslash;r sprogfiler kun indl&aelig;ses i folderen /languages/ med FTP, og opgraderingsfunktionen b&oslash;r bruges til registrering/opdatering.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Advarsel: Eksisterende moduler i databasen vil g&aring; tabt. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'N&aring;r moduler overf&oslash;res med FTP (anbefales ikke), udf&oslash;res installatonsfunktionerne  <tt>installer</tt>, <tt>opgrader</tt> eller <tt>afinstaller</tt> ikke automatisk. Modulerne vil m&aring;ske ikke fungere korrekt eller bliver rigtigt afinstallerett.<br /><br />Du kan nedenfor udf&oslash;re modulfunktionerne manuelt for moduler, der er overf&oslash;rt via FTP.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Advarsel: Eksisterende moduler i databasen vil g&aring; tabt. Brug kun denne funktion, hvis du oplever problemer med moduler, der er overf&oslash;rt med FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Advarsel: Eksisterende moduler i databasen vil g&aring; tabt. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Moduler er genindl&aelig;st';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overskriv nyere filer';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Installation af tilf&oring;jelsen mislykkedes. Dit system opfylder ikke kravene til denne tilf&oring;jelse. For at f&aring; denne tilf&oslash;jelse til at virke i dit system, skal du rette de forhold, der opregnes nedenfor.';
+$MESSAGE['ADDON_RELOAD'] = 'Opdater databasen med information fra tilf&oslash;jelsesfiler (f.eks. efter FTP-overf&oslash;rsel).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Skabeloner genindl&aelig;st';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Du har ikke den n&oslash;dvendige adgang til dette omr&aring;de';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Adgangskode kan kun nulstilles 1 gang i timen - beklager!';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Kunne ikke sende din adgangskode til din email-adresse - Kontakt en systemadministrator';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Den email-adresse du indtastede findes ikke i vores database';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Indtast din email-adresse nedenfor';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Beklager - intet aktivit indhold at vise';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Beklager - du har ikke adgang til at se denne side';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Er allerede installeret';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kan ikke skrive i det valgte modtagebibliotek (mappe)';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Hav lidt t&aring;lmodighed';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Kan ikke afinstallere';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Kan ikke afinstallere: Den valgte fil er i brug';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> kan ikke afinstalleres, da den stadig bruges p&aring; {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'denne side/disse sider';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Kan ikke afinstallere skabelonen <b>{{name}}</b>, da den er standardskabelonen!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'kan ikek afinstallere skabelonen <b>{{name}}</b>, da den er standard administrator-skabelon!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Kan ikke udpakke fil';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Kunne ikke overf&oslash;re filen';
+$MESSAGE['GENERIC_COMPARE'] = ' uden fejl';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Fejl ved &aring;bning af filen.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' mislykkedes';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'OBS: V&aelig;r opm&aelig;rksom p&aring; at den fil du vil overf&oslash;re skal v&aelig;re i flg. format:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'OBS: V&aelig;r opm&aelig;rksom p&aring; at den fil du vil overf&oslash;re skal v&aelig;re i et af flg. formater:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'G&aring; venligst tilbage og udfyld alle felter';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'Du har intet valgt!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installeret';
+$MESSAGE['GENERIC_INVALID'] = 'Filen du overf&oslash;rte er fejlbeh&aelig;ftet';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'WebsiteBaker installationsfil ikke i korrekt format. Kontroller *.zip formatet.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'WebsiteBaker sprogfil ikke i korrekt format. Kontroller tekstfilen.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'WebsiteBaker modulfil ikke gyldig. Kontroller tekstfilen.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'WebsiteBaker skabelon ikke gyldig. Kontroller tekstfilen.';
+$MESSAGE['GENERIC_IN_USE'] = ' men bruges i ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Arkivfil mangler!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'Modulet er ikke korrekt installeret!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' ikke mulig';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Ikke installeret';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Opdatering ikke mulig';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'V&aelig;r t&aring;lmodig, dette kan godt vare et stykke tid.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Kom venligst igen senere...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Sikerhedsbrud! Adgang afsl&aring;et!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Sikerhedsbrud! Lagring n&aelig;gtet!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Afinstalleret';
+$MESSAGE['GENERIC_UPGRADED'] = 'Opgraderet';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Versionssammenligning';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Opgraderng n&oslash;dvending!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Nedgraderng';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'Dette websted er midlertidigt lukket p&aring; grund af vedligeholdelse';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Websted under konstruktion';
+$MESSAGE['GROUPS_ADDED'] = 'Gruppen er tilf&oslash;jet';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Er du helt sikker p&aring; du vil slette denne gruppe (og alle brugere som tilh&oslash;rer den)?';
+$MESSAGE['GROUPS_DELETED'] = 'Gruppen er slettet';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Gruppenavn er ikke udfyldt';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Gruppens navn findes allerede';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Der blev ikke fundet nogen grupper';
+$MESSAGE['GROUPS_SAVED'] = 'Gruppen er gemt';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Angiv en adgangskode ';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Den indtastede adgangskode er for LANG';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Den indtastede adgangskode er for KORT';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Du har ikke angivet en filtype';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Du indtastede ikke et nyt navn';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Kan ikke slette valgte bibliotek (mappe)';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Kan ikke slette den valgte fil';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Omd&oslash;bning kunne ikke udf&oslash;res';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Er du sikker p&aring; du &oslash;nsker at slette flg. fil/bibliotek (mappe)?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Bibliotek (mappe) slettet';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Filen er slettet';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Mappen eksisterer ikke';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Kan ikke inkludere ../ i mappenavnet';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Der findes allerede et bibliotek (en mappe) med det navn du indtastede!';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Bibliotek (mappe) blev oprettet';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Kunne ikke oprette biblioteket (mappen)';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Der findes allerede en fil med det navn du indtastede';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Filen ikke fundet';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Kan ikke inkludere ../ i navnet';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Kan ikke anvende index.php som navn';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Der blev ikke fundet medie-filer i det p&aring;g&aelig;ldende bibliotek (mappe)';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'Ingen fil overf&oslash;rt';
+$MESSAGE['MEDIA_RENAMED'] = 'Omd&oslash;bning udf&oslash;rt';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = 'fil blev overf&oslash;rt';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Kan ikke have ../ i placeringen af biblioteket (mappen)';
+$MESSAGE['MEDIA_UPLOADED'] = 'filer blev overf&oslash;rt';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Beklager! Denne formular er blevet afsendt for mange gange indenfor den sidste time, og du vil derfor blive afvist - Pr&oslash;v igen om en times tid!';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Verifikationstallene (ogs&aring; kendt som Captcha) som du tastede er ikke korrekte. Hvis du har problemer med at l&aelig;se Captha tallene, s&aring; kontakt venligst sidens Administrator p&aring; denne mailadresse: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Du skal udfylde f&oslash;lgende felter:';
+$MESSAGE['PAGES_ADDED'] = 'Siden er tilf&oslash;jet';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Overskrift til side tilf&oslash;jet';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Indtast venligst en overskrift til menuen';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Indtast venligst en overskrift til siden';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Fejl under oprettelse af adgangsfil i /pages biblioteket (mappen) (utilstr&aelig;kkelige rettigheder)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Fejl under sletning af adgangsfil i /pages biblioteket  (utilstr&aelig;kkelige rettigheder)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Fejl ved fors&oslash;g p&aring; at omorganisere siden';
+$MESSAGE['PAGES_DELETED'] = 'Siden er slettet';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Er du sikker p&aring; du &oslash;nsker at slette den valgte side (og alle dens undersider)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Du har ikke rettigheder til at &aelig;ndre denne side';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Klik HER for at &aelig;ndre din intro-side!';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Kan ikke skrive til filen /pages/intro.php (utilstr&aelig;kkelige rettigheder)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Introside gemt';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Sidste &aelig;ndring blev foretaget af:';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Siden blev ikke fundet';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Der opstod en fejl under fors&oslash;get p&aring; at gemme siden';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Der findes allerede en side med dette eller lign. navn';
+$MESSAGE['PAGES_REORDERED'] = 'Siden er omorganiseret';
+$MESSAGE['PAGES_RESTORED'] = 'Siden er gendannet';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Tilbage til sider';
+$MESSAGE['PAGES_SAVED'] = 'Siden er gemt';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Side-indstillinger er gemt';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Egenskaber for sektion er &aelig;ndret';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Den (nuv&aelig;rende) adgangskode som du indtastede er ikke korrekt';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Oplysningerne er gemt';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email-adresse opdateret';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Ugyldige tegn i adgangskode';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Adgangskode &aelig;ndret';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = '&Aelig;ndring mislykket';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = '&Aelig;ndring udf&oslash;rt.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Tilf&oslash;jelse af nu post mislykkedes.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'Ny post tilf&oslash;jet.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = '<br>OBS: Ved at klikke p&aring; denne knap tabes alle &aelig;ndringer, der ikke er gemt!';
+$MESSAGE['SETTINGS_SAVED'] = 'Indstillingerne er gemt';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Er ikke i stand til at &aring;bne konfigurationsfilen';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Kan ikke skrive til konfigurationsfilen (check rettigheder for filen)';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'OBS! Dette anbefales kun i testmilj&oslash;er ';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+En ny bruger er registreret.
+
+Loginname: {LOGIN_NAME}
+BrugerId: {LOGIN_ID}
+Email: {LOGIN_EMAIL}
+IP-adresse: {LOGIN_IP}
+Registreringsdato: {SIGNUP_DATE}
+----------------------------------------
+Denne meddelselse er sendt automatisk.
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hej {LOGIN_DISPLAY_NAME},
+
+Denne besked er sendt, fordi funktionen  \'Glemt adgangskode\' er blevet anvendt.
+
+Dine nye \'{LOGIN_WEBSITE_TITLE}\' logind-oplysninger er:
+
+Loginname: {LOGIN_NAME}
+Adgangskode: {LOGIN_PASSWORD}
+
+Din adgangskode er &aelig;ndret til ovenst&aring;ende.
+Det betyder, at din gamle adgangskode ikke kan anvendes mere.
+hvis du har sp&oslash;rgsm&aring;l til eller problemer med dine nye adgangsoplysninger
+b&oslash;r du kontakte webstedet eller administatoren for \'{LOGIN_WEBSITE_TITLE}\'.
+Husk at slette din browsers hukommelse (cache) for at undg&aring; problemer med at logge ind.
+
+Venlig hilsen
+------------------------------------
+Denne besked er sendt automatisk
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hej {LOGIN_DISPLAY_NAME},
+
+Velkommen til \'{LOGIN_WEBSITE_TITLE}\'.
+
+Dine adgangsoplysninger til \'{LOGIN_WEBSITE_TITLE}\' er:
+Loginname: {LOGIN_NAME}
+Adgangskode: {LOGIN_PASSWORD}
+
+Venlig hilsen
+
+Hvis du har modtaget denne besked ved en fejl, bedes du straks slette den.
+------------------------------------
+Denne besked er sendt automatisk
+
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Dine login-oplysninger...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Du skal indtaste en gyldig email-adresse';
+$MESSAGE['START_CURRENT_USER'] = 'Du er lige nu logget ind som:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'ADVARSEL! Installationsbiblioteket (mappen) findes stadig p&aring; serveren. Du b&oslash;r slette den straks af hensyn til sikkerheden!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Velkommen til administration af din WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'OBS: For at &aelig;ndre skabelonen skal du g&aring; til punktet indstillinger';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Brugeren er oprettet';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Funktionen udf&oslash;res ikke - du kan ikke slette dig selv';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'OBS! Du skal kun indtaste v&aelig;rdier i felterne ovenfor, s&aring;fremt du &oslash;nsker at &aelig;ndre denne brugers adgangskode';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Er du sikker p&aring; at du vil slette den valgte bruger?';
+$MESSAGE['USERS_DELETED'] = 'Brugeren er slettet';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Den email-adresse du indtastede findes i forvejen';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Email-adressen du indtastede er ugyldig';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Ingen gruppe er valgt';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'De to adgangskoder du indtastede  er ikke ens';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Den angivne adgangskode er for kort';
+$MESSAGE['USERS_SAVED'] = 'Brugeren er gemt';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'WebsiteBaker administrationsv&aelig;rkt&oslash;jer...';
+$OVERVIEW['GROUPS'] = 'Administr&eacute;r brugergrupper og deres systemrettigheder...';
+$OVERVIEW['HELP'] = 'Sp&oslash;rgsm&aring;l? Find dine svar her...';
+$OVERVIEW['LANGUAGES'] = 'Administration af sprog i WebsiteBaker...';
+$OVERVIEW['MEDIA'] = 'Administr&eacute;r filer i mappen medier...';
+$OVERVIEW['MODULES'] = 'Administr&eacute;r WebsiteBaker moduler...';
+$OVERVIEW['PAGES'] = 'Administr&eacute;r dine websider...';
+$OVERVIEW['PREFERENCES'] = 'Tilpas pr&aelig;ferencer s&aring;som email-adresse, adgangskode, etc... ';
+$OVERVIEW['SETTINGS'] = 'Tilpas indstillinger for WebsiteBaker...';
+$OVERVIEW['START'] = 'Administrationsoversigt';
+$OVERVIEW['TEMPLATES'] = 'Skift udseende og layout/design p&aring; din webside v.h.a. skabeloner....';
+$OVERVIEW['USERS'] = 'Administr&eacute;r brugere som kan logge ind p&aring; WebsiteBaker systemet...';
+$OVERVIEW['VIEW'] = 'Hurtig visning og gennemsyn af dit Websted i et nyt vindue..';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/DE.php
===================================================================
--- trunk/languages/DE.php	(nonexistent)
+++ trunk/languages/DE.php	(revision 2)
@@ -0,0 +1,681 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED'))
+{
+    define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'DE';
+$language_name = 'Deutsch';
+$language_version = '3.0';
+$language_platform = '2.9';
+$language_author = 'Stefan Braunewell, Matthias Gallas';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Benutzerverwaltung';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Erweiterungen';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'Sie sind hier: ';
+$MENU['FORGOT'] = 'Anmelde-Details anfordern';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Gruppen';
+$MENU['HELP'] = 'Hilfe';
+$MENU['LANGUAGES'] = 'Sprachen';
+$MENU['LOGIN'] = 'Anmeldung';
+$MENU['LOGOUT'] = 'Abmelden';
+$MENU['MEDIA'] = 'Medien';
+$MENU['MODULES'] = 'Module';
+$MENU['PAGES'] = 'Seiten';
+$MENU['PREFERENCES'] = 'Einstellungen';
+$MENU['SETTINGS'] = 'Optionen';
+$MENU['START'] = 'Start';
+$MENU['TEMPLATES'] = 'Designvorlagen';
+$MENU['USERS'] = 'Benutzer';
+$MENU['VIEW'] = 'Ansicht';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registrierung';
+$TEXT['ACTIONS'] = 'Aktionen';
+$TEXT['ACTIVE'] = 'Aktiv';
+$TEXT['ADD'] = 'Hinzuf&uuml;gen';
+$TEXT['ADDON'] = 'Addon';
+$TEXT['ADD_SECTION'] = 'Abschnitt hinzuf&uuml;gen';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Verwaltung';
+$TEXT['ADMINISTRATION_TOOL'] = 'Verwaltungsprogramme';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratoren';
+$TEXT['ADVANCED'] = 'Erweitert';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Erlaubte Dateitypen f&uuml;r Hochladen';
+$TEXT['ALLOWED_VIEWERS'] = 'genehmigter Besucher';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Mehrfachauswahl';
+$TEXT['ALL_WORDS'] = 'Alle W&ouml;rter';
+$TEXT['ANCHOR'] = 'Anker';
+$TEXT['ANONYMOUS'] = 'Anonym';
+$TEXT['ANY_WORDS'] = 'Einzelne W&ouml;rter';
+$TEXT['APP_NAME'] = 'Verwaltungswerkzeuge';
+$TEXT['ARE_YOU_SURE'] = 'Sind Sie sicher?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Zur&uuml;ck';
+$TEXT['BACKUP'] = 'Sichern';
+$TEXT['BACKUP_ALL_TABLES'] = 'komplette Datenbank sichern';
+$TEXT['BACKUP_DATABASE'] = 'Datenbank sichern';
+$TEXT['BACKUP_MEDIA'] = 'Dateien sichern';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'nur WB Tabellen sichern';
+$TEXT['BASIC'] = 'Einfach';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Kalender';
+$TEXT['CANCEL'] = 'Abbrechen';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Kann sich selber l&ouml;schen';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Pr&uuml;fziffer';
+$TEXT['CAP_EDIT_CSS'] = 'Bearbeite CSS';
+$TEXT['CHANGE'] = '&Auml;ndern';
+$TEXT['CHANGES'] = '&Auml;nderungen';
+$TEXT['CHANGE_SETTINGS'] = 'Einstellungen &auml;ndern';
+$TEXT['CHARSET'] = 'Zeichensatz';
+$TEXT['CHECKBOX_GROUP'] = 'Kontrollk&auml;stchen';
+$TEXT['CLOSE'] = 'Schlie&szlig;en';
+$TEXT['CODE'] = 'Code';
+$TEXT['CODE_SNIPPET'] = 'Funktionserweiterung';
+$TEXT['COLLAPSE'] = 'Reduzieren';
+$TEXT['COMMENT'] = 'Kommentar';
+$TEXT['COMMENTING'] = 'kommentieren';
+$TEXT['COMMENTS'] = 'Kommentare';
+$TEXT['CREATE_FOLDER'] = 'Ordner anlegen';
+$TEXT['CURRENT'] = 'Aktuell';
+$TEXT['CURRENT_FOLDER'] = 'Aktueller Ordner';
+$TEXT['CURRENT_PAGE'] = 'Aktuelle Seite';
+$TEXT['CURRENT_PASSWORD'] = 'Bisheriges Passwort';
+$TEXT['CUSTOM'] = 'Benutzerdefiniert';
+$TEXT['DATABASE'] = 'Datenbank';
+$TEXT['DATE'] = 'Datum';
+$TEXT['DATE_FORMAT'] = 'Datumsformat';
+$TEXT['DEFAULT'] = 'Standard';
+$TEXT['DEFAULT_CHARSET'] = 'Standard Zeichensatz';
+$TEXT['DEFAULT_TEXT'] = 'Standardtext';
+$TEXT['DELETE'] = 'Entfernen';
+$TEXT['DELETED'] = 'Gel&ouml;scht';
+$TEXT['DELETE_DATE'] = 'Datum l&ouml;schen';
+$TEXT['DELETE_ZIP'] = 'Zip-Archiv nach dem entpacken l&ouml;schen';
+$TEXT['DESCRIPTION'] = 'Beschreibung';
+$TEXT['DESIGNED_FOR'] = 'Entworfen f&uuml;r';
+$TEXT['DIRECTORIES'] = 'Verzeichnisse';
+$TEXT['DIRECTORY_MODE'] = 'Verzeichnismodus';
+$TEXT['DISABLED'] = 'Ausgeschaltet';
+$TEXT['DISPLAY_NAME'] = 'Angezeigter Name';
+$TEXT['EMAIL'] = 'E-Mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-Mail Adresse';
+$TEXT['EMPTY_TRASH'] = 'M&uuml;lleimer leeren';
+$TEXT['ENABLED'] = 'Eingeschaltet';
+$TEXT['END'] = 'Ende';
+$TEXT['ERROR'] = 'Fehler';
+$TEXT['EXACT_MATCH'] = 'Genaue Wortfolge';
+$TEXT['EXECUTE'] = 'Ausf&uuml;hren';
+$TEXT['EXPAND'] = 'Erweitern';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Feld';
+$TEXT['FILE'] = 'Datei';
+$TEXT['FILES'] = 'Dateien';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Zugriffsrechte';
+$TEXT['FILE_MODE'] = 'Dateimodus';
+$TEXT['FINISH_PUBLISHING'] = 'Ende der Ver&ouml;ffentlichung';
+$TEXT['FOLDER'] = 'Ordner';
+$TEXT['FOLDERS'] = 'Ordner';
+$TEXT['FOOTER'] = 'Fu&szlig;zeile';
+$TEXT['FORGOTTEN_DETAILS'] = 'Haben Sie Ihre pers&ouml;nlichen Daten vergessen?';
+$TEXT['FORGOT_DETAILS'] = 'Haben Sie Ihre pers&ouml;nlichen Daten vergessen?';
+$TEXT['FROM'] = 'von';
+$TEXT['FRONTEND'] = 'Frontend';
+$TEXT['FULL_NAME'] = 'Voller Name';
+$TEXT['FUNCTION'] = 'Funktion';
+$TEXT['GROUP'] = 'Gruppe';
+$TEXT['HEADER'] = 'Kopfzeile';
+$TEXT['HEADING'] = '&Uuml;berschrift';
+$TEXT['HEADING_CSS_FILE'] = 'Aktuelle Moduldatei: ';
+$TEXT['HEIGHT'] = 'H&ouml;he';
+$TEXT['HIDDEN'] = 'Versteckt';
+$TEXT['HIDE'] = 'verstecken';
+$TEXT['HIDE_ADVANCED'] = 'Erweiterte Optionen verdecken';
+$TEXT['HOME'] = 'Home';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'URL Umleitung zur Homepage';
+$TEXT['HOME_FOLDER'] = 'Pers&ouml;nlicher Ordner';
+$TEXT['HOME_FOLDERS'] = 'Pers&ouml;nliche Ordner';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Symbol';
+$TEXT['IMAGE'] = 'Bild';
+$TEXT['INLINE'] = 'Integriert';
+$TEXT['INSTALL'] = 'Installieren';
+$TEXT['INSTALLATION'] = 'Installation';
+$TEXT['INSTALLATION_PATH'] = 'Installationspfad';
+$TEXT['INSTALLATION_URL'] = 'Installationsadresse(URL)';
+$TEXT['INSTALLED'] = 'installiert';
+$TEXT['INTRO'] = 'Eingangs';
+$TEXT['INTRO_PAGE'] = 'Eingangsseite';
+$TEXT['INVALID_SIGNS'] = 'muss mit einem Buchstaben beginnen oder hat ung&uuml;ltige Zeichen';
+$TEXT['KEYWORDS'] = 'Schl&uuml;sselw&ouml;rter';
+$TEXT['LANGUAGE'] = 'Sprache';
+$TEXT['LAST_UPDATED_BY'] = 'zuletzt ge&auml;ndert von';
+$TEXT['LENGTH'] = 'L&auml;nge';
+$TEXT['LEVEL'] = 'Ebene';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix basierend';
+$TEXT['LIST_OPTIONS'] = 'Auswahlliste';
+$TEXT['LOGGED_IN'] = 'Angemeldet';
+$TEXT['LOGIN'] = 'Anmeldung';
+$TEXT['LONG'] = 'Lang';
+$TEXT['LONG_TEXT'] = 'Langtext';
+$TEXT['LOOP'] = 'Schleife';
+$TEXT['MAIN'] = 'Hauptblock';
+$TEXT['MAINTENANCE_OFF'] = 'Wartung aus';
+$TEXT['MAINTENANCE_ON'] = 'Wartung an';
+$TEXT['MANAGE'] = 'Manage';
+$TEXT['MANAGE_GROUPS'] = 'Gruppen verwalten';
+$TEXT['MANAGE_USERS'] = 'Benutzer verwalten';
+$TEXT['MATCH'] = '&Uuml;bereinstimmung';
+$TEXT['MATCHING'] = 'passende';
+$TEXT['MAX_EXCERPT'] = 'Max Anzahl Zitate pro Seite';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Eintragungen pro Stunde';
+$TEXT['MEDIA_DIRECTORY'] = 'Medienverzeichnis';
+$TEXT['MENU'] = 'Men&uuml;';
+$TEXT['MENU_ICON_0'] = 'Men&uuml;-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Men&uuml;-Icon hover';
+$TEXT['MENU_TITLE'] = 'Men&uuml;titel';
+$TEXT['MESSAGE'] = 'Nachricht';
+$TEXT['MODIFY'] = '&Auml;ndern';
+$TEXT['MODIFY_CONTENT'] = 'Inhalt &auml;ndern';
+$TEXT['MODIFY_SETTINGS'] = 'Optionen &auml;ndern';
+$TEXT['MODULE_ORDER'] = 'Modulreihenfolge f&uuml;r die Suche';
+$TEXT['MODULE_PERMISSIONS'] = 'Modulberechtigungen';
+$TEXT['MORE'] = 'Mehr';
+$TEXT['MOVE_DOWN'] = 'Abw&auml;rts verschieben';
+$TEXT['MOVE_UP'] = 'Aufw&auml;rts verschieben';
+$TEXT['MULTIPLE_MENUS'] = 'Mehrere Men&uuml;s';
+$TEXT['MULTISELECT'] = 'Mehrfachauswahl';
+$TEXT['NAME'] = 'Name';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'mit aktuellem Passwort best&auml;tigen';
+$TEXT['NEED_TO_LOGIN'] = 'M&uuml;ssen Sie sich einloggen?';
+$TEXT['NEW_PASSWORD'] = 'Neues Passwort';
+$TEXT['NEW_WINDOW'] = 'Neues Fenster';
+$TEXT['NEXT'] = 'n&auml;chste';
+$TEXT['NEXT_PAGE'] = 'n&auml;chste Seite';
+$TEXT['NO'] = 'Nein';
+$TEXT['NONE'] = 'Keine';
+$TEXT['NONE_FOUND'] = 'Keine gefunden';
+$TEXT['NOT_FOUND'] = 'Nicht gefunden';
+$TEXT['NOT_INSTALLED'] = 'nicht installiert';
+$TEXT['NO_IMAGE_SELECTED'] = 'Kein Bild ausgew&auml;hlt';
+$TEXT['NO_RESULTS'] = 'Keine Ergebnisse';
+$TEXT['OF'] = 'von';
+$TEXT['ON'] = 'Am';
+$TEXT['OPEN'] = '&Ouml;ffnen';
+$TEXT['OPTION'] = 'Option';
+$TEXT['OTHERS'] = 'Alle';
+$TEXT['OUT_OF'] = 'von';
+$TEXT['OVERWRITE_EXISTING'] = '&Uuml;berschreibe bestehende';
+$TEXT['PAGE'] = 'Seite';
+$TEXT['PAGES_DIRECTORY'] = 'Seitenverzeichnis';
+$TEXT['PAGES_PERMISSION'] = 'Seitenberechtigung';
+$TEXT['PAGES_PERMISSIONS'] = 'Seitenerechtigungen';
+$TEXT['PAGE_EXTENSION'] = 'Dateiendungen';
+$TEXT['PAGE_ICON'] = 'Seitenbild';
+$TEXT['PAGE_ICON_DIR'] = 'Verzeichnis f&uuml;r Seiten-/Menuebilder';
+$TEXT['PAGE_LANGUAGES'] = 'Seitensprache';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limit der Seitenebenen';
+$TEXT['PAGE_SPACER'] = 'Leerzeichen';
+$TEXT['PAGE_TITLE'] = 'Seitentitel';
+$TEXT['PAGE_TRASH'] = 'Seiten M&uuml;lleimer';
+$TEXT['PARENT'] = '&Uuml;bergeordnete Datei';
+$TEXT['PASSWORD'] = 'Passwort';
+$TEXT['PATH'] = 'Pfad';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Fehlerberichte';
+$TEXT['PLEASE_LOGIN'] = 'Bitte anmelden';
+$TEXT['PLEASE_SELECT'] = 'Bitte ausw&auml;hlen';
+$TEXT['POST'] = 'Beitrag';
+$TEXT['POSTS_PER_PAGE'] = 'Nachrichten pro Seite';
+$TEXT['POST_FOOTER'] = 'Nachricht Fu&szlig;zeile';
+$TEXT['POST_HEADER'] = 'Nachricht Kopfzeile';
+$TEXT['PREVIOUS'] = 'vorherige';
+$TEXT['PREVIOUS_PAGE'] = 'vorherige Seite';
+$TEXT['PRIVATE'] = 'Privat';
+$TEXT['PRIVATE_VIEWERS'] = 'Private Nutzer';
+$TEXT['PROFILES_EDIT'] = 'Profil &auml;ndern';
+$TEXT['PUBLIC'] = '&Ouml;ffentlich';
+$TEXT['PUBL_END_DATE'] = 'End Datum';
+$TEXT['PUBL_START_DATE'] = 'Start Datum';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Optionsfeld';
+$TEXT['READ'] = 'Lesen';
+$TEXT['READ_MORE'] = 'Weiterlesen';
+$TEXT['REDIRECT_AFTER'] = 'Weiterleitung nach';
+$TEXT['REGISTERED'] = 'registriert';
+$TEXT['REGISTERED_VIEWERS'] = 'registrierter Besucher';
+$TEXT['RELOAD'] = 'Neu laden';
+$TEXT['REMEMBER_ME'] = 'Passwort speichern';
+$TEXT['RENAME'] = 'Umbenennen';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'Diese Dateitypen nicht hochladen';
+$TEXT['REQUIRED'] = 'Erforderlich';
+$TEXT['REQUIREMENT'] = 'Voraussetzung';
+$TEXT['RESET'] = 'Zur&uuml;cksetzen';
+$TEXT['RESIZE'] = 'Gr&ouml;&szlig;e &auml;ndern';
+$TEXT['RESIZE_IMAGE_TO'] = 'Bildgr&ouml;&szlig;e ver&auml;ndern auf';
+$TEXT['RESTORE'] = 'Wiederherstellen';
+$TEXT['RESTORE_DATABASE'] = 'Datenbank wiederherstellen';
+$TEXT['RESTORE_MEDIA'] = 'Dateien wiederherstellen';
+$TEXT['RESULTS'] = 'Resultate';
+$TEXT['RESULTS_FOOTER'] = 'Ergebnisse Fu&szlig;zeile';
+$TEXT['RESULTS_FOR'] = 'Ergebnisse f&uuml;r';
+$TEXT['RESULTS_HEADER'] = 'Ergebnisse &Uuml;berschrift';
+$TEXT['RESULTS_LOOP'] = 'Ergebnisse Schleife';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Neues Passwort wiederholen';
+$TEXT['RETYPE_PASSWORD'] = 'Geben Sie bitte Ihr Passwort nochmal ein';
+$TEXT['SAME_WINDOW'] = 'Gleiches Fenster';
+$TEXT['SAVE'] = 'Speichern';
+$TEXT['SEARCH'] = 'Suche';
+$TEXT['SEARCHING'] = 'suchen';
+$TEXT['SECTION'] = 'Abschnitt';
+$TEXT['SECTION_BLOCKS'] = 'Bl&ouml;cke';
+$TEXT['SEC_ANCHOR'] = 'Abschnitts-Anker Text';
+$TEXT['SELECT_BOX'] = 'Auswahlliste';
+$TEXT['SEND_DETAILS'] = 'Anmeldedaten senden';
+$TEXT['SEPARATE'] = 'Separat';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'Server E-Mail';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Server Betriebssystem';
+$TEXT['SESSION_IDENTIFIER'] = 'Sitzungs ID';
+$TEXT['SETTINGS'] = 'Optionen';
+$TEXT['SHORT'] = 'Kurz';
+$TEXT['SHORT_TEXT'] = 'Kurztext';
+$TEXT['SHOW'] = 'zeigen';
+$TEXT['SHOW_ADVANCED'] = 'Erweiterte Optionen anzeigen';
+$TEXT['SIGNUP'] = 'Registrierung';
+$TEXT['SIZE'] = 'Gr&ouml;&szlig;e';
+$TEXT['SMART_LOGIN'] = 'Intelligente Anmeldung';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Beginn der Ver&ouml;ffentlichung';
+$TEXT['SUBJECT'] = 'Betreff';
+$TEXT['SUBMISSIONS'] = 'Eintragungen';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Max. gespeicherte Eintragungen';
+$TEXT['SUBMISSION_ID'] = 'Eintragungs-ID';
+$TEXT['SUBMITTED'] = 'eingetragen';
+$TEXT['SUCCESS'] = 'Erfolgreich';
+$TEXT['SYSTEM_DEFAULT'] = 'Standardeinstellung';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Zugangsberechtigungen';
+$TEXT['TABLE_PREFIX'] = 'TabellenPr&auml;fix';
+$TEXT['TARGET'] = 'Ziel';
+$TEXT['TARGET_FOLDER'] = 'Zielordner';
+$TEXT['TEMPLATE'] = 'Template';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Zugriffsrechte f&uuml;r Vorlagen';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = 'Langtext';
+$TEXT['TEXTFIELD'] = 'Kurztext';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Backend-Theme kopieren.';
+$TEXT['THEME_CURRENT'] = 'aktuelles Theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Templatefiles importieren';
+$TEXT['THEME_NEW_NAME'] = 'Name des neuen Themes';
+$TEXT['THEME_NOMORE_HTT'] = 'keine weiteren vorhanden';
+$TEXT['THEME_SELECT_HTT'] = 'Templatefiles ausw&auml;hlen';
+$TEXT['THEME_START_COPY'] = 'kopieren';
+$TEXT['THEME_START_IMPORT'] = 'importieren';
+$TEXT['TIME'] = 'Zeit';
+$TEXT['TIMEZONE'] = 'Zeitzone';
+$TEXT['TIME_FORMAT'] = 'Zeitformat';
+$TEXT['TIME_LIMIT'] = 'Zeitlimit zur Erstellung der Zitate pro Modul';
+$TEXT['TITLE'] = 'Titel';
+$TEXT['TO'] = 'an';
+$TEXT['TOP_FRAME'] = 'Frameset sprengen';
+$TEXT['TRASH_EMPTIED'] = 'M&uuml;lleimer geleert';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Bearbeite die CSS Definitionen im nachfolgenden Textfeld.';
+$TEXT['TYPE'] = 'Art';
+$TEXT['UNDER_CONSTRUCTION'] = 'In Bearbeitung';
+$TEXT['UNINSTALL'] = 'Deinstallieren';
+$TEXT['UNKNOWN'] = 'Unbekannt';
+$TEXT['UNLIMITED'] = 'Unbegrenzt';
+$TEXT['UNZIP_FILE'] = 'Zip-Archiv hochladen und entpacken';
+$TEXT['UP'] = 'Aufw&auml;rts';
+$TEXT['UPGRADE'] = 'Aktualisieren';
+$TEXT['UPLOAD_FILES'] = 'Datei(en) &uuml;bertragen';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Benutzer';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'Benutzer ist aktiv';
+$TEXT['USERS_CAN_SELFDELETE'] = 'Selbstl&ouml;schung m&ouml;glich';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Benutzer kann eigene Einstellungen &auml;ndern';
+$TEXT['USERS_DELETED'] = 'Benutzer ist als gel&ouml;scht markiert';
+$TEXT['USERS_FLAGS'] = 'Benutzerflags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'Benutzer kann erweitertes Profil anlegen';
+$TEXT['VERIFICATION'] = 'Pr&uuml;fziffer';
+$TEXT['VERSION'] = 'Version';
+$TEXT['VIEW'] = 'Ansicht';
+$TEXT['VIEW_DELETED_PAGES'] = 'gel&ouml;schte Seiten anschauen';
+$TEXT['VIEW_DETAILS'] = 'Details';
+$TEXT['VISIBILITY'] = 'Sichtbarkeit';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Standard "VON" Adresse';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Standard Absender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Bitte geben Sie eine Standard "VON" Adresse und einen Sendernamen an. Als Absender Adresse empfiehlt sich ein Format wie: <strong>admin@IhreWebseite.de</strong>. Manche E-Mail Provider (z.B. <em>mail.de</em>) stellen keine E-Mails zu, die nicht &uuml;ber den Provider selbst verschickt wurden, in der Absender Adresse aber den Namen des E-Mail Providers <em>name@mail.de</em> enthalten. Die Standard Werte werden nur verwendet, wenn keine anderen Werte von WebsiteBaker gesetzt wurden. Wenn Ihr Service Provider <acronym title="Simple Mail Transfer Protocol">SMTP</acronym> anbietet, sollten Sie diese Option f&uuml;r ausgehende E-Mails verwenden.';
+$TEXT['WBMAILER_FUNCTION'] = 'E-Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Maileinstellungen:</strong><br />Die nachfolgenden Einstellungen m&uuml;ssen nur angepasst werden, wenn Sie E-Mail &uuml;ber <acronym title="Simple Mail Transfer Protocol">SMTP</acronym> verschicken wollen. Wenn Sie Ihren SMTP Server nicht kennen, oder Sie sich unsicher bei den Einstellungen sind, verwenden Sie einfach die Standard E-Mail Routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentifikation';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'nur aktivieren, wenn SMTP Authentifikation ben&ouml;tigt wird';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Passwort';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Webseite';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Webseitenbeschreibung';
+$TEXT['WEBSITE_FOOTER'] = 'Fu&szlig;zeile';
+$TEXT['WEBSITE_HEADER'] = 'Kopfzeile';
+$TEXT['WEBSITE_KEYWORDS'] = 'Schl&uuml;sselw&ouml;rter';
+$TEXT['WEBSITE_TITLE'] = 'Webseitentitel';
+$TEXT['WELCOME_BACK'] = 'Willkommen zur&uuml;ck';
+$TEXT['WIDTH'] = 'Breite';
+$TEXT['WINDOW'] = 'Fenster';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Einstellungen f&uuml;r Schreibrechte';
+$TEXT['WRITE'] = 'Schreiben';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Stil';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On Voraussetzungen nicht erf&uuml;llt';
+$HEADING['ADD_CHILD_PAGE'] = 'Unterseite hinzuf&uuml;gen';
+$HEADING['ADD_GROUP'] = 'Gruppe hinzuf&uuml;gen';
+$HEADING['ADD_GROUPS'] = 'Gruppen hinzuf&uuml;gen';
+$HEADING['ADD_HEADING'] = 'Kopf hinzuf&uuml;gen';
+$HEADING['ADD_PAGE'] = 'Seite hinzuf&uuml;gen';
+$HEADING['ADD_USER'] = 'Benutzer hinzuf&uuml;gen';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Verwaltungsprogramme';
+$HEADING['BROWSE_MEDIA'] = 'Medien durchsuchen';
+$HEADING['CREATE_FOLDER'] = 'Ordner erstellen';
+$HEADING['DEFAULT_SETTINGS'] = 'Standardeinstellungen';
+$HEADING['DELETED_PAGES'] = 'gel&ouml;schte Seiten';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Dateisystemoptionen';
+$HEADING['GENERAL_SETTINGS'] = 'Allgemeine Optionen';
+$HEADING['INSTALL_LANGUAGE'] = 'Sprache hinzuf&uuml;gen';
+$HEADING['INSTALL_MODULE'] = 'Modul installieren';
+$HEADING['INSTALL_TEMPLATE'] = 'Designvorlage installieren';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Sprachdateien manuell ausf&uuml;hren';
+$HEADING['INVOKE_MODULE_FILES'] = 'Moduldateien manuell ausf&uuml;hren';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Templatedateien manuell ausf&uuml;hren';
+$HEADING['LANGUAGE_DETAILS'] = 'Details zur Sprache';
+$HEADING['MANAGE_SECTIONS'] = 'Abschnitte verwalten';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Erweiterte Seitenoptionen &auml;ndern';
+$HEADING['MODIFY_DELETE_GROUP'] = '&Auml;ndern/L&ouml;schen von Gruppen';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Seite &auml;ndern/Seite l&ouml;schen';
+$HEADING['MODIFY_DELETE_USER'] = '&Auml;ndern/L&ouml;schen von Benutzern';
+$HEADING['MODIFY_GROUP'] = 'Gruppe &auml;ndern';
+$HEADING['MODIFY_GROUPS'] = 'Gruppen &auml;ndern';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Eingangsseite &auml;ndern';
+$HEADING['MODIFY_PAGE'] = 'Seite &auml;ndern';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Seitenoptionen &auml;ndern';
+$HEADING['MODIFY_USER'] = 'Benutzer &auml;ndern';
+$HEADING['MODULE_DETAILS'] = 'Details zum Modul';
+$HEADING['MY_EMAIL'] = 'E-Mail Adresse';
+$HEADING['MY_PASSWORD'] = 'Passwort';
+$HEADING['MY_SETTINGS'] = 'Einstellungen';
+$HEADING['SEARCH_SETTINGS'] = 'Suchoptionen';
+$HEADING['SERVER_SETTINGS'] = 'Servereinstellungen';
+$HEADING['TEMPLATE_DETAILS'] = 'Details zur Designvorlage';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Sprache l&ouml;schen';
+$HEADING['UNINSTALL_MODULE'] = 'Modul deinstallieren';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Designvorlage deinstallieren';
+$HEADING['UPGRADE_LANGUAGE'] = 'Sprache registrieren/aktualisieren (Upgrade)';
+$HEADING['UPLOAD_FILES'] = 'Datei(en) &uuml;bertragen';
+$HEADING['WBMAILER_SETTINGS'] = 'Maileinstellungen';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Fehler beim Abgleich der Addon Informationen.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Sprachen erfolgreich geladen';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ACHTUNG!</strong> &Uuml;berspielen Sie Sprachdateien aus Sicherheitsgr&uuml;nden nur &uuml;ber FTP in den Ordner /languages/ und benutzen die Upgrade Funktion zum Registrieren oder Aktualisieren.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warnung: Eventuell vorhandene Datenbankeintr&auml;ge eines Moduls gehen verloren. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'Beim Hochladen oder L&ouml;schen von Modulen per FTP (nicht empfohlen), werden eventuell vorhandene Modulfunktionen <tt>install</tt>, <tt>upgrade</tt> oder <tt>uninstall</tt> nicht automatisch ausgef&uuml;hrt. Solche Module funktionieren daher meist nicht richtig, oder hinterlassen Datenbankeintr&auml;ge beim L&ouml;schen per FTP.<br /><br /> Nachfolgend k&ouml;nnen die Modulfunktionen von per FTP hochgeladenen Modulen manuell ausgef&uuml;hrt werden.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warnung: Eventuell vorhandene Datenbankeintr&auml;ge eines Moduls gehen verloren. Bitte nur bei Problemen mit per FTP hochgeladenen Modulen verwenden. ';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warnung: Eventuell vorhandene Datenbankeintr&auml;ge eines Moduls gehen verloren. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Module erfolgreich geladen';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = '&Uuml;berschreibe neuere Dateien';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Installation fehlgeschlagen. Ihr System erf&uuml;llt nicht alle Voraussetzungen die f&uuml;r diese Erweiterung ben&ouml;tigt werden. Um diese Erweiterung nutzen zu k&ouml;nnen, m&uuml;ssen nachfolgende Updates durchgef&uuml;hrt werden.';
+$MESSAGE['ADDON_RELOAD'] = 'Abgleich der Datenbank mit den Informationen aus den Addon-Dateien (z.B. nach FTP Upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Designvorlagen erfolgreich geladen';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Ungen&uuml;gende Zugangsberechtigungen';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Das Passwort kann nur einmal pro Stunde zur&uuml;ckgesetzt werden';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Das Passwort konnte nicht versendet werden, bitte kontaktieren Sie den Systemadministrator';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Die angegebene E-Mail Adresse wurde nicht in der Datenbank gefunden';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Bitte geben Sie nachfolgend Ihre E-Mail Adresse an';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Ihr Loginname und Ihr Passwort wurden an Ihre E-Mail Adresse gesendet';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Kein aktiver Inhalt auf dieser Seite vorhanden';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Sie sind nicht berechtigt, diese Seite zu sehen';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Bereits installiert';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kann im Zielverzeichnis nicht schreiben';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Bitte haben Sie etwas Geduld.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Deinstallation fehlgeschlagen';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Deinstallation nicht m&ouml;glich: Datei wird benutzt';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = 'Das {{type}} <strong>{{type_name}}</strong> kann nicht deinstalliert werden, weil es auf {{pages}} benutzt wird:';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'folgender Seite;folgenden Seiten';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Das Template <strong>{{name}}</strong> kann nicht deinstalliert werden, weil es das Standardtemplate ist!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Das Template <strong>{{name}}</strong> kann nicht deinstalliert werden, weil es das Standardbackendtheme ist!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Fehler beim Entpacken';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Die Datei kann nicht &uuml;bertragen werden';
+$MESSAGE['GENERIC_COMPARE'] = ' erfolgreich';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Fehler beim &Ouml;ffnen der Datei.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' fehlgeschlagen';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Bitte beachten Sie, dass Sie nur den folgenden Dateityp ausw&auml;hlen k&ouml;nnen:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Bitte beachten Sie, dass Sie nur folgende Dateitypen ausw&auml;hlen k&ouml;nnen:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Bitte alle Felder ausf&uuml;llen';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'Sie haben keine Auswahl getroffen!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Erfolgreich installiert';
+$MESSAGE['GENERIC_INVALID'] = 'Die &uuml;bertragene Datei ist ung&uuml;ltig';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Ung&uuml;ltige WebsiteBaker Installationsdatei. Bitte *.zip Format pr&uuml;fen.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Ung&uuml;ltige WebsiteBaker Sprachdatei. Bitte Textdatei pr&uuml;fen.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Ung&uuml;ltige WebsiteBaker Moduledatei. Bitte Textdatei pr&uuml;fen.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Ung&uuml;ltige WebsiteBaker Templatedatei. Bitte Textdatei pr&uuml;fen.';
+$MESSAGE['GENERIC_IN_USE'] = ' aber benutzt in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Fehlende Archivdatei!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'Das Modul ist nicht ordnungsgemäss installiert!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' nicht m&ouml;glich';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nicht installiert';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Aktualisierung nicht möglich';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Die Datenbanksicherung kann je nach Gr&ouml;&szlig;e der Datenbank einige Zeit dauern.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Bitte versuchen Sie es später noch einmal ...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Sicherheitsverletzung!! Zugriff wurde verweigert!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Sicherheitsverletzung!! Das Speichern der Daten wurde verweigert!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Erfolgreich deinstalliert';
+$MESSAGE['GENERIC_UPGRADED'] = 'Erfolgreich aktualisiert';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Versionsabgleich';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade erforderlich!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'Diese Seite ist für Wartungsarbeiten vorübergehend geschlossen';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Momentan in Bearbeitung';
+$MESSAGE['GROUPS_ADDED'] = 'Die Gruppe wurde erfolgreich hinzugefügt';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Sind Sie sicher, dass Sie die ausgew&auml;hlte Gruppe l&ouml;schen m&ouml;chten (und alle Benutzer, die dazugeh&ouml;ren)?';
+$MESSAGE['GROUPS_DELETED'] = 'Die Gruppe wurde erfolgreich gel&ouml;scht';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Der Gruppenname wurde nicht angegeben';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Der Gruppenname existiert bereits';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Keine Gruppen gefunden';
+$MESSAGE['GROUPS_SAVED'] = 'Die Gruppe wurde erfolgreich gespeichert';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Der Loginname oder das Passwort ist nicht korrekt';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Bitte geben Sie unten Ihren Loginnamen und Passwort ein';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Bitte geben Sie Ihr Passwort ein';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Das angegebene Passwort ist zu lang';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Das angegebene Passwort ist zu kurz';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Bitte geben Sie Ihren Loginnamen ein';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Der angegebene Loginname ist zu lang';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Der angegebene Loginname ist zu kurz';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Sie haben keine Dateiendung angegeben';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Sie haben keinen neuen Namen angegeben';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Das ausgew&auml;hlte Verzeichnis konnte nicht gel&ouml;scht werden';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Die ausgew&auml;hlte Datei konnte nicht gel&ouml;scht werden';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Das Umbenennen war nicht erfolgreich';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Sind Sie sicher, dass Sie die folgende Datei oder Verzeichnis l&ouml;schen m&ouml;chten?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Das Verzeichnis wurde gel&ouml;scht';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Die Datei wurde gel&ouml;scht';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Verzeichnis existiert nicht oder Zugriff verweigert.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Verzeichnis existiert nicht';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Der Verzeichnisname darf nicht ../ enthalten';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Ein Verzeichnis mit dem angegebenen Namen existiert bereits';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Das Verzeichnis wurde erfolgreich angelegt';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Das Verzeichnis konnte nicht angelegt werden';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Eine Datei mit dem angegebenen Namen existiert bereits';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Die Datei konnte nicht gefunden werden';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Der Name darf nicht ../ enthalten';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Der Dateiname index.php kann nicht verwendet werden';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Im aktuellen Verzeichnis konnten keine Dateien (z.B. Bilder) gefunden werden';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'Es wurde keine Datei empfangen';
+$MESSAGE['MEDIA_RENAMED'] = 'Das Umbenennen war erfolgreich';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = 'Datei wurde erfolgreich &uuml;bertragen';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Der Name des Zielverzeichnisses darf nicht ../ enthalten';
+$MESSAGE['MEDIA_UPLOADED'] = 'Dateien wurden erfolgreich &uuml;bertragen';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Dieses Formular wurde zu oft aufgerufen. Bitte versuchen Sie es in einer Stunde noch einmal.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Die eingegebene Pr&uuml;fziffer stimmt nicht &uuml;berein. Wenn Sie Probleme mit dem Lesen der Pr&uuml;fziffer haben, bitte schreiben Sie eine E-Mail an uns: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Bitte folgende Angaben erg&auml;nzen';
+$MESSAGE['PAGES_ADDED'] = 'Die Seite wurde erfolgreich hinzugef&uuml;gt';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Seitenkopf erfolgreich hinzugef&uuml;gt';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Bitte geben Sie einen Men&uuml;titel ein';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Bitte geben Sie einen Titel f&uuml;r die Seite ein';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Beim Anlegen der Zugangsdatei im Verzeichnis /pages ist ein Fehler aufgetreten (Ungen&uuml;gende Zugangsrechte)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Beim L&ouml;schen der Zugangsdatei im Verzeichnis /pages ist ein Fehler aufgetreten (Ungen&uuml;gende Zugangsrechte)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Bei der Zusammenstellung der Seite ist ein Fehler aufgetreten';
+$MESSAGE['PAGES_DELETED'] = 'Die Seite wurde erfolgreich gel&ouml;scht';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Sind Sie sicher, dass Sie die ausgew&auml;hlte Seite l&ouml;schen m&ouml;chten ( und deren Unterseiten )';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Sie haben keine Berechtigung, diese Seite zu &auml;ndern';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Bitte klicken Sie HIER um die Eingangsseite zu &auml;ndern';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Es konnte nicht in die Datei /pages/intro.php geschrieben werden (ungen&uuml;gende Zugangsrechte)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Eingangsseite wurde erfolgreich gespeichert';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Die letzte &Auml;nderung wurde durchgef&uuml;hrt von';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Die Seite konnte nicht gefunden werden';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Beim Speichern der Seite ist ein Fehler aufgetreten';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Eine Seite mit einem &auml;hnlichen oder demselben Titel existiert bereits';
+$MESSAGE['PAGES_REORDERED'] = 'Die Seite wurde erfolgreich neu zusammengestellt';
+$MESSAGE['PAGES_RESTORED'] = 'Die Seite wurde erfolgreich wiederhergestellt';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Zur&uuml;ck zum Seitenmen&uuml;';
+$MESSAGE['PAGES_SAVED'] = 'Die Seite wurde erfolgreich gespeichert';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Die Seiteneinstellungen wurden erfolgreich gespeichert';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Einstellungen f&uuml;r diesen Abschnitt erfolgreich gespeichert';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Das Passwort, das Sie angegeben haben, ist ung&uuml;ltig';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Pers&ouml;nliche Daten wurden erfolgreich gespeichert';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-Mail Einstellung ge&auml;ndert';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Es wurden ung&uuml;ltige Zeichen f&uuml;r des Passwort verwendet';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Das Passwort wurde erfolgreich ge&auml;ndert';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = '&Auml;nderung des Datensatzes ist fehlgeschlagen.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'Ge&auml;nderter Datensatz wurde erfolgreich aktualisiert.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Hinzuf&uuml;gen eines neuen Datensatzes ist fehlgeschlagen.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'Neuer Datensatz wurde erfolgreich hinzugef&uuml;gt.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Bitte beachten Sie: Wenn Sie dieses Feld anklicken, werden alle ungespeicherten &Auml;nderungen zur&uuml;ckgesetzt';
+$MESSAGE['SETTINGS_SAVED'] = 'Die Optionen wurden erfolgreich gespeichert';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Konfigurationsdatei konnte nicht ge&ouml;ffnet werden';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Die Konfigurationsdatei konnte nicht geschrieben werden';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Bitte beachten Sie: Dies wird nur zu Testzwecken empfohlen';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+Es wurde ein neuer User regisriert.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adresse: {LOGIN_IP}
+Anmeldedatum: {SIGNUP_DATE}
+----------------------------------------
+Diese E-Mail wurde automatisch erstellt!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hallo {LOGIN_DISPLAY_NAME},
+
+Sie erhalten diese E-Mail, weil sie ein neues Passwort angefordert haben.
+
+Ihre neuen Logindaten f&uuml;r {LOGIN_WEBSITE_TITLE} lauten:
+
+Loginname: {LOGIN_NAME}
+Passwort: {LOGIN_PASSWORD}
+
+Das bisherige Passwort wurde durch das neue Passwort oben ersetzt.
+
+Sollten Sie kein neues Kennwort angefordert haben, l&ouml;schen Sie bitte diese E-Mail.
+
+Mit freundlichen Gr&uuml;ssen
+----------------------------------------
+Diese E-Mail wurde automatisch erstellt!
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hallo {LOGIN_DISPLAY_NAME},
+
+Herzlich willkommen bei \'{LOGIN_WEBSITE_TITLE}\'
+
+Ihre Logindaten f&uuml;r \'{LOGIN_WEBSITE_TITLE}\' lauten:
+Loginname: {LOGIN_NAME}
+Passwort: {LOGIN_PASSWORD}
+
+Vielen Dank f&uuml;r Ihre Registrierung
+
+Wenn Sie dieses E-Mail versehentlich erhalten haben, l&ouml;schen Sie bitte diese E-Mail.
+----------------------------------------
+Diese E-Mail wurde automatisch erstellt!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Deine WB Logindaten ...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Bitte geben Sie Ihre E-Mail Adresse an';
+$MESSAGE['START_CURRENT_USER'] = 'Sie sind momentan angemeldet als:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Das Installations-Verzeichnis "/install" existiert noch! Dies stellt ein Sicherheitsrisiko dar. Bitte l&ouml;schen.';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Bitte die Datei "upgrade-script.php" vom Webserver l&ouml;schen.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Willkommen in der WebsiteBaker Verwaltung';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Bitte beachten Sie: Um eine andere Designvorlage auszuw&auml;hlen, benutzen Sie den Bereich "Optionen"';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'Neuer Theme-Name existiert bereits.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Das aktuell aktive Backend-Theme kopieren und unter einem neuem Namen abspeichern.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'Ungen&uuml;gende Rechte um das Zielverzeichnis zu erstellen!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Zus&auml;tzliche Templatefile(s) in das aktuelle Theme importieren.<br />Mit diesen Templates k&ouml;nnen die Default-Templates &uuml;berschrieben werden.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Ung&uuml;ltigen Theme-Name angegeben!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unbekannter Upload Fehler';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Konnte Datei nicht schreiben. Fehlende Schreibrechte.';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'Erweiterungsfehler';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'Die hochgeladene Datei &uum;berschreitet die in dem HTML Formular mittels der Anweisung MAX_FILE_SIZE angegebene maximale Dateigr&oum;sse. ';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'Die hochgeladene Datei &uum;berschreitet die in der Anweisung upload_max_filesize in php.ini festgelegte Gr&oum;sse';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'Es wurde keine Datei hochgeladen';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Fehlender tempor&auml;rer Ordner';
+$MESSAGE['UPLOAD_ERR_OK'] = 'Die Datei wurde erfolgreich hochgeladen';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'Die Datei wurde nur teilweise hochgeladen';
+$MESSAGE['USERS_ADDED'] = 'Der Benutzer wurde erfolgreich hinzugef&uuml;gt';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Funktion abgelehnt, Sie k&ouml;nnen sich nicht selbst l&ouml;schen!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Bitte beachten Sie: Sie sollten in die obigen Felder nur Werte eingeben, wenn Sie das Passwort dieses Benutzers &auml;ndern m&ouml;chten';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Sind Sie sicher, dass Sie den ausgew&auml;hlten Benutzer l&ouml;schen m&ouml;chten?';
+$MESSAGE['USERS_DELETED'] = 'Der Benutzer wurde erfolgreich gel&ouml;scht';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Die angegebene E-Mail Adresse wird bereits verwendet';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Die angegebene E-Mail Adresse ist ung&uuml;ltig';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Es wurden ung&uuml;ltige Zeichen f&uuml;r den Loginnamen verwendet';
+$MESSAGE['USERS_NO_GROUP'] = 'Es wurde keine Gruppe ausgew&auml;hlt';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Das angegebene Passwort ist ung&uuml;ltig';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Das eingegebene Passwort war zu kurz';
+$MESSAGE['USERS_SAVED'] = 'Der Benutzer wurde erfolgreich gespeichert';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'Der angegebene Loginname wird bereits verwendet';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'Der eingegebene Loginname war zu kurz';
+$OVERVIEW['ADMINTOOLS'] = 'Zugriff auf die WebsiteBaker Verwaltungsprogramme...';
+$OVERVIEW['GROUPS'] = 'Verwaltung von Gruppen und Ihrer Zugangsberechtigungen...';
+$OVERVIEW['HELP'] = 'Noch Fragen? Hier finden Sie Antworten';
+$OVERVIEW['LANGUAGES'] = 'Sprachen verwalten...';
+$OVERVIEW['MEDIA'] = 'Verwaltung der im Medienordner gespeicherten Dateien...';
+$OVERVIEW['MODULES'] = 'Verwaltung der WebsiteBaker Module...';
+$OVERVIEW['PAGES'] = 'Verwaltung Ihrer Webseiten...';
+$OVERVIEW['PREFERENCES'] = '&Auml;ndern pers&ouml;nlicher Einstellungen wie E-Mail Adresse, Passwort, usw.... ';
+$OVERVIEW['SETTINGS'] = '&Auml;ndern der Optionen f&uuml;r WebsiteBaker...';
+$OVERVIEW['START'] = '&Uuml;berblick &uuml;ber die Verwaltung';
+$OVERVIEW['TEMPLATES'] = '&Auml;ndern des Designs Ihrer Webseite mit Vorlagen...';
+$OVERVIEW['USERS'] = 'Verwaltung von Benutzern, die sich in WebsiteBaker einloggen d&uuml;rfen...';
+$OVERVIEW['VIEW'] = 'Ansicht Ihrer Webseite in einem neuen Fenster...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/EN.php
===================================================================
--- trunk/languages/EN.php	(nonexistent)
+++ trunk/languages/EN.php	(revision 2)
@@ -0,0 +1,697 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         language
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'EN';
+$language_name = 'English';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Ryan Djurovich, Christian Sommer';
+$language_license = 'GNU General Public License';
+
+/* MENU */
+$MENU['ACCESS'] = 'Access';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Add-ons';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Retrieve Login Details';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Groups';
+$MENU['HELP'] = 'Help';
+$MENU['LANGUAGES'] = 'Languages';
+$MENU['LOGIN'] = 'Login';
+$MENU['LOGOUT'] = 'Log-out';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Modules';
+$MENU['PAGES'] = 'Pages';
+$MENU['PREFERENCES'] = 'Preferences';
+$MENU['SETTINGS'] = 'Settings';
+$MENU['START'] = 'Start';
+$MENU['TEMPLATES'] = 'Templates';
+$MENU['USERS'] = 'Users';
+$MENU['VIEW'] = 'View';
+
+/* TEXT */
+$TEXT['ACCOUNT_SIGNUP'] = 'Account Sign-Up';
+$TEXT['ACTIONS'] = 'Actions';
+$TEXT['ACTIVE'] = 'Active';
+$TEXT['ADD'] = 'Add';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Add Section';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administration';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administration tool';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administrators';
+$TEXT['ADVANCED'] = 'Advanced';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Allow Multiple Selections';
+$TEXT['ALL_WORDS'] = 'All Words';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonymous';
+$TEXT['ANY_WORDS'] = 'Any Words';
+$TEXT['APP_NAME'] = 'Application Name';
+$TEXT['ARE_YOU_SURE'] = 'Are you sure?';
+$TEXT['AUTHOR'] = 'Author';
+$TEXT['BACK'] = 'Back';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Backup Database';
+$TEXT['BACKUP_MEDIA'] = 'Backup Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'Basic';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Calendar';
+$TEXT['CANCEL'] = 'Cancel';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Verification';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Change';
+$TEXT['CHANGES'] = 'Changes';
+$TEXT['CHANGE_SETTINGS'] = 'Change Settings';
+$TEXT['CHARSET'] = 'Charset';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox Group';
+$TEXT['CLOSE'] = 'Close';
+$TEXT['CODE'] = 'Code';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Collapse';
+$TEXT['COMMENT'] = 'Comment';
+$TEXT['COMMENTING'] = 'Commenting';
+$TEXT['COMMENTS'] = 'Comments';
+$TEXT['CREATE_FOLDER'] = 'Create Folder';
+$TEXT['CURRENT'] = 'Current';
+$TEXT['CURRENT_FOLDER'] = 'Current Folder';
+$TEXT['CURRENT_PAGE'] = 'Current Page';
+$TEXT['CURRENT_PASSWORD'] = 'Current Password';
+$TEXT['CUSTOM'] = 'Custom';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Date';
+$TEXT['DATE_FORMAT'] = 'Date Format';
+$TEXT['DEFAULT'] = 'Default';
+$TEXT['DEFAULT_CHARSET'] = 'Default Charset';
+$TEXT['DEFAULT_TEXT'] = 'Default Text';
+$TEXT['DELETE'] = 'Delete';
+$TEXT['DELETED'] = 'Deleted';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Description';
+$TEXT['DESIGNED_FOR'] = 'Designed For';
+$TEXT['DIRECTORIES'] = 'Directories';
+$TEXT['DIRECTORY_MODE'] = 'Directory Mode';
+$TEXT['DISABLED'] = 'Disabled';
+$TEXT['DISPLAY_NAME'] = 'Display Name';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Email Address';
+$TEXT['EMPTY_TRASH'] = 'Empty Trash';
+$TEXT['ENABLED'] = 'Enabled';
+$TEXT['END'] = 'End';
+$TEXT['ERROR'] = 'Error';
+$TEXT['EXACT_MATCH'] = 'Exact Match';
+$TEXT['EXECUTE'] = 'Execute';
+$TEXT['EXPAND'] = 'Expand';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Field';
+$TEXT['FILE'] = 'File';
+$TEXT['FILES'] = 'Files';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Filesystem Permissions';
+$TEXT['FILE_MODE'] = 'File Mode';
+$TEXT['FINISH_PUBLISHING'] = 'Finish Publishing';
+$TEXT['FOLDER'] = 'Folder';
+$TEXT['FOLDERS'] = 'Folders';
+$TEXT['FOOTER'] = 'Footer';
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgotten your details?';
+$TEXT['FORGOT_DETAILS'] = 'Forgot Details?';
+$TEXT['FROM'] = 'From';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Full Name';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Group';
+$TEXT['HEADER'] = 'Header';
+$TEXT['HEADING'] = 'Heading';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Height';
+$TEXT['HIDDEN'] = 'Hidden';
+$TEXT['HIDE'] = 'Hide';
+$TEXT['HIDE_ADVANCED'] = 'Hide Advanced Options';
+$TEXT['HOME'] = 'Home';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Homepage Redirection';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Icon';
+$TEXT['IMAGE'] = 'Image';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Install';
+$TEXT['INSTALLATION'] = 'Installation';
+$TEXT['INSTALLATION_PATH'] = 'Installation Path';
+$TEXT['INSTALLATION_URL'] = 'Installation URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = 'Intro Page';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Keywords';
+$TEXT['LANGUAGE'] = 'Language';
+$TEXT['LAST_UPDATED_BY'] = 'Last Updated By';
+$TEXT['LENGTH'] = 'Length';
+$TEXT['LEVEL'] = 'Level';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix based';
+$TEXT['LIST_OPTIONS'] = 'List Options';
+$TEXT['LOGGED_IN'] = 'Logged-In';
+$TEXT['LOGIN'] = 'Login';
+$TEXT['LONG'] = 'Long';
+$TEXT['LONG_TEXT'] = 'Long Text';
+$TEXT['LOOP'] = 'Loop';
+$TEXT['MAIN'] = 'Main';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MANAGE'] = 'Manage';
+$TEXT['MANAGE_GROUPS'] = 'Manage Groups';
+$TEXT['MANAGE_USERS'] = 'Manage Users';
+$TEXT['MATCH'] = 'Match';
+$TEXT['MATCHING'] = 'Matching';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Submissions Per Hour';
+$TEXT['MEDIA_DIRECTORY'] = 'Media Directory';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Menu Title';
+$TEXT['MESSAGE'] = 'Message';
+$TEXT['MODIFY'] = 'Modify';
+$TEXT['MODIFY_CONTENT'] = 'Modify Content';
+$TEXT['MODIFY_SETTINGS'] = 'Modify Settings';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Module Permissions';
+$TEXT['MORE'] = 'More';
+$TEXT['MOVE_DOWN'] = 'Move Down';
+$TEXT['MOVE_UP'] = 'Move Up';
+$TEXT['MULTIPLE_MENUS'] = 'Multiple Menus';
+$TEXT['MULTISELECT'] = 'Multi-select';
+$TEXT['NAME'] = 'Name';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Need to log-in?';
+$TEXT['NEW_PASSWORD'] = 'New Password';
+$TEXT['NEW_WINDOW'] = 'New Window';
+$TEXT['NEXT'] = 'Next';
+$TEXT['NEXT_PAGE'] = 'Next Page';
+$TEXT['NO'] = 'No';
+$TEXT['NONE'] = 'None';
+$TEXT['NONE_FOUND'] = 'None Found';
+$TEXT['NOT_FOUND'] = 'Not Found';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'No Results';
+$TEXT['OF'] = 'Of';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Option';
+$TEXT['OTHERS'] = 'Others';
+$TEXT['OUT_OF'] = 'Out Of';
+$TEXT['OVERWRITE_EXISTING'] = 'Overwrite existing';
+$TEXT['PAGE'] = 'Page';
+$TEXT['PAGES_DIRECTORY'] = 'Pages Directory';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Page Extension';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Page Languages';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Page Level Limit';
+$TEXT['PAGE_SPACER'] = 'Page Spacer';
+$TEXT['PAGE_TITLE'] = 'Page Title';
+$TEXT['PAGE_TRASH'] = 'Page Trash';
+$TEXT['PARENT'] = 'Parent';
+$TEXT['PASSWORD'] = 'Password';
+$TEXT['PATH'] = 'Path';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Error Reporting Level';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Please select';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Posts Per Page';
+$TEXT['POST_FOOTER'] = 'Post Footer';
+$TEXT['POST_HEADER'] = 'Post Header';
+$TEXT['PREVIOUS'] = 'Previous';
+$TEXT['PREVIOUS_PAGE'] = 'Previous Page';
+$TEXT['PRIVATE'] = 'Private';
+$TEXT['PRIVATE_VIEWERS'] = 'Private Viewers';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Public';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Button Group';
+$TEXT['READ'] = 'Read';
+$TEXT['READ_MORE'] = 'Read More';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registered';
+$TEXT['REGISTERED_VIEWERS'] = 'Registered Viewers';
+$TEXT['RELOAD'] = 'Reload';
+$TEXT['REMEMBER_ME'] = 'Remember Me';
+$TEXT['RENAME'] = 'Rename';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Required';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Reset';
+$TEXT['RESIZE'] = 'Re-size';
+$TEXT['RESIZE_IMAGE_TO'] = 'Resize Image To';
+$TEXT['RESTORE'] = 'Restore';
+$TEXT['RESTORE_DATABASE'] = 'Restore Database';
+$TEXT['RESTORE_MEDIA'] = 'Restore Media';
+$TEXT['RESULTS'] = 'Results';
+$TEXT['RESULTS_FOOTER'] = 'Results Footer';
+$TEXT['RESULTS_FOR'] = 'Results For';
+$TEXT['RESULTS_HEADER'] = 'Results Header';
+$TEXT['RESULTS_LOOP'] = 'Results Loop';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Re-type New Password';
+$TEXT['RETYPE_PASSWORD'] = 'Re-type Password';
+$TEXT['SAME_WINDOW'] = 'Same Window';
+$TEXT['SAVE'] = 'Save';
+$TEXT['SEARCH'] = 'Search';
+$TEXT['SEARCHING'] = 'Searching';
+$TEXT['SECTION'] = 'Section';
+$TEXT['SECTION_BLOCKS'] = 'Section Blocks';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Select Box';
+$TEXT['SEND_DETAILS'] = 'Send Details';
+$TEXT['SEPARATE'] = 'Separate';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'Server Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Server Operating System';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Identifier';
+$TEXT['SETTINGS'] = 'Settings';
+$TEXT['SHORT'] = 'Short';
+$TEXT['SHORT_TEXT'] = 'Short Text';
+$TEXT['SHOW'] = 'Show';
+$TEXT['SHOW_ADVANCED'] = 'Show Advanced Options';
+$TEXT['SIGNUP'] = 'Sign-up';
+$TEXT['SIZE'] = 'Size';
+$TEXT['SMART_LOGIN'] = 'Smart Login';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Start Publishing';
+$TEXT['SUBJECT'] = 'Subject';
+$TEXT['SUBMISSIONS'] = 'Submissions';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Submissions Stored In Database';
+$TEXT['SUBMISSION_ID'] = 'Submission ID';
+$TEXT['SUBMITTED'] = 'Submitted';
+$TEXT['SUCCESS'] = 'Success';
+$TEXT['SYSTEM_DEFAULT'] = 'System Default';
+$TEXT['SYSTEM_PERMISSIONS'] = 'System Permissions';
+$TEXT['TABLE_PREFIX'] = 'Table Prefix';
+$TEXT['TARGET'] = 'Target';
+$TEXT['TARGET_FOLDER'] = 'Target folder';
+$TEXT['TEMPLATE'] = 'Template';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Template Permissions';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = 'Textarea';
+$TEXT['TEXTFIELD'] = 'Textfield';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['TIME'] = 'Time';
+$TEXT['TIMEZONE'] = 'Timezone';
+$TEXT['TIME_FORMAT'] = 'Time Format';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Title';
+$TEXT['TO'] = 'To';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = 'Trash Emptied';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Type';
+$TEXT['UNDER_CONSTRUCTION'] = 'Under Construction';
+$TEXT['UNINSTALL'] = 'Uninstall';
+$TEXT['UNKNOWN'] = 'Unknown';
+$TEXT['UNLIMITED'] = 'Unlimited';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Up';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Upload File(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'User';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verification';
+$TEXT['VERSION'] = 'Version';
+$TEXT['VIEW'] = 'View';
+$TEXT['VIEW_DELETED_PAGES'] = 'View Deleted Pages';
+$TEXT['VIEW_DETAILS'] = 'View Details';
+$TEXT['VISIBILITY'] = 'Visibility';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Website Description';
+$TEXT['WEBSITE_FOOTER'] = 'Website Footer';
+$TEXT['WEBSITE_HEADER'] = 'Website Header';
+$TEXT['WEBSITE_KEYWORDS'] = 'Website Keywords';
+$TEXT['WEBSITE_TITLE'] = 'Website Title';
+$TEXT['WELCOME_BACK'] = 'Welcome back';
+$TEXT['WIDTH'] = 'Width';
+$TEXT['WINDOW'] = 'Window';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'World-writeable file permissions';
+$TEXT['WRITE'] = 'Write';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Style';
+$TEXT['YES'] = 'Yes';
+
+/* HEADING */
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Add Group';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Add Heading';
+$HEADING['ADD_PAGE'] = 'Add Page';
+$HEADING['ADD_USER'] = 'Add User';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administration Tools';
+$HEADING['BROWSE_MEDIA'] = 'Browse Media';
+$HEADING['CREATE_FOLDER'] = 'Create Folder';
+$HEADING['DEFAULT_SETTINGS'] = 'Default Settings';
+$HEADING['DELETED_PAGES'] = 'Deleted Pages';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Filesystem Settings';
+$HEADING['GENERAL_SETTINGS'] = 'General Settings';
+$HEADING['INSTALL_LANGUAGE'] = 'Install Language';
+$HEADING['INSTALL_MODULE'] = 'Install Module';
+$HEADING['INSTALL_TEMPLATE'] = 'Install Template';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Language Details';
+$HEADING['MANAGE_SECTIONS'] = 'Manage Sections';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modify Advanced Page Settings';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modify/Delete Group';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modify/Delete Page';
+$HEADING['MODIFY_DELETE_USER'] = 'Modify/Delete User';
+$HEADING['MODIFY_GROUP'] = 'Modify Group';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modify Intro Page';
+$HEADING['MODIFY_PAGE'] = 'Modify Page';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modify Page Settings';
+$HEADING['MODIFY_USER'] = 'Modify User';
+$HEADING['MODULE_DETAILS'] = 'Module Details';
+$HEADING['MY_EMAIL'] = 'My Email';
+$HEADING['MY_PASSWORD'] = 'My Password';
+$HEADING['MY_SETTINGS'] = 'My Settings';
+$HEADING['SEARCH_SETTINGS'] = 'Search Settings';
+$HEADING['SERVER_SETTINGS'] = 'Server Settings';
+$HEADING['TEMPLATE_DETAILS'] = 'Template Details';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Uninstall Language';
+$HEADING['UNINSTALL_MODULE'] = 'Uninstall Module';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Uninstall Template';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Upload File(s)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+
+/* MESSAGE */
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Insufficient privelliges to be here';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Password cannot be reset more than once per hour, sorry';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Unable to email password, please contact system administrator';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'The email that you entered cannot be found in the database';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Please enter your email address below';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Sorry, you do not have permissions to view this page';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Already installed';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Unable to write to the target directory';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Cannot uninstall';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Cannot Uninstall: the selected file is in use';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Cannot unzip file';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Cannot upload file';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Error opening file.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Please note that the file you upload must be of the following format:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Please note that the file you upload must be in one of the following formats:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Please go back and fill-in all fields';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installed successfully';
+$MESSAGE['GENERIC_INVALID'] = 'The file you uploaded is invalid';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Not installed';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Please be patient, this might take a while.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Please check back soon...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Uninstalled successfully';
+$MESSAGE['GENERIC_UPGRADED'] = 'Upgraded successfully';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GROUPS_ADDED'] = 'Group added successfully';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Are you sure you want to delete the selected group (and any users that belong to it)?';
+$MESSAGE['GROUPS_DELETED'] = 'Group deleted successfully';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Group name is blank';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Group name already exists';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'No groups found';
+$MESSAGE['GROUPS_SAVED'] = 'Group saved successfully';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Please enter a password';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Supplied password to long';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Supplied password to short';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'You did not enter a file extension';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'You did not enter a new name';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Cannot delete the selected folder';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Cannot delete the selected file';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Rename unsuccessful';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Are you sure you want to delete the following file or folder?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Folder deleted successfully';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'File deleted successfully';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Directory does not exist';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Cannot include ../ in the folder name';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'A folder matching the name you entered already exists';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Folder created successfully';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Unable to create folder';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'A file matching the name you entered already exists';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'File not found';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Cannot include ../ in the name';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Cannot use index.php as the name';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED']='No file was recieved';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'No media found in the current folder';
+$MESSAGE['MEDIA_RENAMED'] = 'Rename successful';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' file was successfully uploaded';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Cannot have ../ in the folder target';
+$MESSAGE['MEDIA_UPLOADED'] = ' files were successfully uploaded';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MESSAGE['PAGES_ADDED'] = 'Page added successfully';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Page heading added successfully';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Please enter a menu title';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Please enter a page title';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Error creating access file in the /pages directory (insufficient privileges)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Error deleting access file in the /pages directory (insufficient privileges)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Error re-ordering page';
+$MESSAGE['PAGES_DELETED'] = 'Page deleted successfully';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Are you sure you want to delete the selected page (and all of its sub-pages)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'You do not have permissions to modify this page';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Click HERE to modify the intro page';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Cannot write to file /pages/intro.php (insufficient privileges)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Intro page saved successfully';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Last modification by';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Page not found';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Error saving page';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'A page with the same or similar title exists';
+$MESSAGE['PAGES_REORDERED'] = 'Page re-ordered successfully';
+$MESSAGE['PAGES_RESTORED'] = 'Page restored successfully';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Return to pages';
+$MESSAGE['PAGES_SAVED'] = 'Page saved successfully';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Page settings saved successfully';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Section properties saved successfully';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'The (current) password you entered is incorrect';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Details saved successfully';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email updated successfully';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Password changed successfully';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Please Note: Pressing this button resets all unsaved changes';
+$MESSAGE['SETTINGS_SAVED'] = 'Settings saved successfully';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Unable to open the configuration file';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Cannot write to configuration file';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Please note: this is only recommended for testing environments';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'You must enter an email address';
+$MESSAGE['START_CURRENT_USER'] = 'You are currently logged in as:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Warning, Installation Directory Still Exists!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Welcome to WebsiteBaker Administration';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Please note: to change the template you must go to the Settings section';
+
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+
+$MESSAGE['USERS_ADDED'] = 'User added successfully';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Please note: You should only enter values in the above fields if you wish to change this users password';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Are you sure you want to delete the selected user?';
+$MESSAGE['USERS_DELETED'] = 'User deleted successfully';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'The email you entered is already in use';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'The email address you entered is invalid';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'No group was selected';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'The passwords you entered do not match';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'The password you entered was too short';
+$MESSAGE['USERS_SAVED'] = 'User saved successfully';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+
+/* OVERVIEW */
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Manage user groups and their system permissions...';
+$OVERVIEW['HELP'] = 'Got a questions? Find your answer...';
+$OVERVIEW['LANGUAGES'] = 'Manage WebsiteBaker languages...';
+$OVERVIEW['MEDIA'] = 'Manage files stored in the media folder...';
+$OVERVIEW['MODULES'] = 'Manage WebsiteBaker modules...';
+$OVERVIEW['PAGES'] = 'Manage your websites pages...';
+$OVERVIEW['PREFERENCES'] = 'Change preferences such as email address, password, etc... ';
+$OVERVIEW['SETTINGS'] = 'Changes settings for WebsiteBaker...';
+$OVERVIEW['START'] = 'Administration overview';
+$OVERVIEW['TEMPLATES'] = 'Change the look and feel of your website with templates...';
+$OVERVIEW['USERS'] = 'Manage users who can log-in to WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Quickly view and browse your website in a new window...';
+
+$TEXT['THEME_COPY_CURRENT']  = 'Copy backend theme.';
+$TEXT['THEME_NEW_NAME']      = 'Name of the new Theme';
+$TEXT['THEME_CURRENT']       = 'current active theme';
+$TEXT['THEME_START_COPY']    = 'copy';
+$TEXT['THEME_IMPORT_HTT']    = 'Import additional templates';
+$TEXT['THEME_SELECT_HTT']    = 'select templates';
+$TEXT['THEME_NOMORE_HTT']    = 'no more available';
+$TEXT['THEME_START_IMPORT']  = 'import';
+$MESSAGE['THEME_COPY_CURRENT']               = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_ALREADY_EXISTS']             = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['THEME_DESTINATION_READONLY']       = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT']                 = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/ES.php
===================================================================
--- trunk/languages/ES.php	(nonexistent)
+++ trunk/languages/ES.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'ES';
+$language_name = 'Español'; // Spanish
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Samuel Mateo, Jr. | samuelmateo.com';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Acceso';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Add-ons';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Recuperar los detalles de registro';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupos';
+$MENU['HELP'] = 'Ayuda';
+$MENU['LANGUAGES'] = 'Lenguajes';
+$MENU['LOGIN'] = 'Entrar';
+$MENU['LOGOUT'] = 'Salir';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'M&oacute;dulos';
+$MENU['PAGES'] = 'P&aacute;ginas';
+$MENU['PREFERENCES'] = 'Preferencias';
+$MENU['SETTINGS'] = 'Configuraci&oacute;n';
+$MENU['START'] = 'Inicio';
+$MENU['TEMPLATES'] = 'Plantillas';
+$MENU['USERS'] = 'Usuarios';
+$MENU['VIEW'] = 'Vista Preliminar';
+$TEXT['ACCOUNT_SIGNUP'] = 'Abrir Cuenta';
+$TEXT['ACTIONS'] = 'Acciones';
+$TEXT['ACTIVE'] = 'Activo';
+$TEXT['ADD'] = 'Agregar';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Agregar Secci&oacute;n';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administraci&oacute;n';
+$TEXT['ADMINISTRATION_TOOL'] = 'Herramienta de Administraci&oacute;n';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administradores';
+$TEXT['ADVANCED'] = 'Avanzado';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Espectadores Permitidos';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Selecciones M&uacute;ltiples';
+$TEXT['ALL_WORDS'] = 'Todas las palabras';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'An&oacute;nimo';
+$TEXT['ANY_WORDS'] = 'Alguna de las palabras';
+$TEXT['APP_NAME'] = 'Nombre de aplicaci&oacute;n';
+$TEXT['ARE_YOU_SURE'] = '&iquest;Esta seguro?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Volver';
+$TEXT['BACKUP'] = 'Copia de seguridad';
+$TEXT['BACKUP_ALL_TABLES'] = 'Reserva todas las Tablas de la Base de Datos';
+$TEXT['BACKUP_DATABASE'] = 'Base de datos de seguridad';
+$TEXT['BACKUP_MEDIA'] = 'Copia de seguridad de los Medios';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Reserva solamente las tablas de WB';
+$TEXT['BASIC'] = 'Basico';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Cancelar';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Verificaci&oacute;n de Captcha (clave)';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Cambiar';
+$TEXT['CHANGES'] = 'Cambios';
+$TEXT['CHANGE_SETTINGS'] = 'Cambiar Configuraci&oacute;n';
+$TEXT['CHARSET'] = 'Conjunto de Caraceteres';
+$TEXT['CHECKBOX_GROUP'] = 'Grupo de Checkbox ';
+$TEXT['CLOSE'] = 'Cerrar';
+$TEXT['CODE'] = 'C&oacute;digo';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Colapsar';
+$TEXT['COMMENT'] = 'Comentario';
+$TEXT['COMMENTING'] = 'Comentando';
+$TEXT['COMMENTS'] = 'Comentarios';
+$TEXT['CREATE_FOLDER'] = 'Crear Carpeta';
+$TEXT['CURRENT'] = 'Corriente';
+$TEXT['CURRENT_FOLDER'] = 'Carpeta Actual';
+$TEXT['CURRENT_PAGE'] = 'P&aacute;gina Actual';
+$TEXT['CURRENT_PASSWORD'] = 'Contrase&ntilde;a Actual';
+$TEXT['CUSTOM'] = 'Personalizado';
+$TEXT['DATABASE'] = 'Base de datos';
+$TEXT['DATE'] = 'Fecha';
+$TEXT['DATE_FORMAT'] = 'Formato de Fecha';
+$TEXT['DEFAULT'] = 'Original';
+$TEXT['DEFAULT_CHARSET'] = 'Conjunto de caracteres por defecto';
+$TEXT['DEFAULT_TEXT'] = 'Texto Predeterminado';
+$TEXT['DELETE'] = 'Eliminar';
+$TEXT['DELETED'] = 'Eliminado';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Descripci&oacute;n';
+$TEXT['DESIGNED_FOR'] = 'Dise&ntilde;ado para';
+$TEXT['DIRECTORIES'] = 'Directorios';
+$TEXT['DIRECTORY_MODE'] = 'Modo de Directorios';
+$TEXT['DISABLED'] = 'Deshabilitado';
+$TEXT['DISPLAY_NAME'] = 'Mostrar Nombre';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Direcci&oacute;n de Email';
+$TEXT['EMPTY_TRASH'] = 'Vaciar Papelera';
+$TEXT['ENABLED'] = 'Habilitado';
+$TEXT['END'] = 'Fin';
+$TEXT['ERROR'] = 'Error';
+$TEXT['EXACT_MATCH'] = 'Frase exacta';
+$TEXT['EXECUTE'] = 'Ejecuci&oacute;n';
+$TEXT['EXPAND'] = 'Expandir';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Campo';
+$TEXT['FILE'] = 'Archivo';
+$TEXT['FILES'] = 'Archivos';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Permisos del Sistema de Archivos';
+$TEXT['FILE_MODE'] = 'Modo de Archivo';
+$TEXT['FINISH_PUBLISHING'] = 'Terminar Publicaci&oacute;n';
+$TEXT['FOLDER'] = 'Carpeta';
+$TEXT['FOLDERS'] = 'Carpetas';
+$TEXT['FOOTER'] = 'Pie de p&aacute;gina';
+$TEXT['FORGOTTEN_DETAILS'] = '&iquest;Lo ha olvidado?';
+$TEXT['FORGOT_DETAILS'] = '&iquest;Olvid&oacute; los detalles?';
+$TEXT['FROM'] = 'De';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Nombre Completo';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupo';
+$TEXT['HEADER'] = 'Encabezado';
+$TEXT['HEADING'] = 'Encabezado';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Altura';
+$TEXT['HIDDEN'] = 'Oculto';
+$TEXT['HIDE'] = 'Ocultar';
+$TEXT['HIDE_ADVANCED'] = 'Ocultar Opciones Avanzadas';
+$TEXT['HOME'] = 'Inicio';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirecci&oacute;n a la p&aacute;gina de Inicio';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Icono';
+$TEXT['IMAGE'] = 'Imagen';
+$TEXT['INLINE'] = 'En l&iacute;nea';
+$TEXT['INSTALL'] = 'Instalar';
+$TEXT['INSTALLATION'] = 'Instalaci&oacute;n';
+$TEXT['INSTALLATION_PATH'] = 'Ruta de Instalaci&oacute;n';
+$TEXT['INSTALLATION_URL'] = 'URL de Instalaci&oacute;n';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = 'P&aacute;gina Intro';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Palabras Clave';
+$TEXT['LANGUAGE'] = 'Lenguaje';
+$TEXT['LAST_UPDATED_BY'] = 'Editado por';
+$TEXT['LENGTH'] = 'Largo';
+$TEXT['LEVEL'] = 'Nivel';
+$TEXT['LINK'] = 'Enlace';
+$TEXT['LINUX_UNIX_BASED'] = 'basado en Linux/Unix ';
+$TEXT['LIST_OPTIONS'] = 'Opciones de Lista';
+$TEXT['LOGGED_IN'] = 'Conectado';
+$TEXT['LOGIN'] = 'Entrar';
+$TEXT['LONG'] = 'Largo';
+$TEXT['LONG_TEXT'] = 'Texto largo';
+$TEXT['LOOP'] = 'Bucle';
+$TEXT['MAIN'] = 'Principal';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Administrar';
+$TEXT['MANAGE_GROUPS'] = 'Administrar Grupos';
+$TEXT['MANAGE_USERS'] = 'Administrar Usuarios';
+$TEXT['MATCH'] = 'Coincidencia';
+$TEXT['MATCHING'] = 'Coincidencia';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Presentaciones por hora';
+$TEXT['MEDIA_DIRECTORY'] = 'Directorio de Media';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'T&iacute;tulo del Men&uacute;';
+$TEXT['MESSAGE'] = 'Mensaje';
+$TEXT['MODIFY'] = 'Modificar';
+$TEXT['MODIFY_CONTENT'] = 'Modificar Contenido';
+$TEXT['MODIFY_SETTINGS'] = 'Cambiar Configuraci&oacute;n';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Permisos de Modulo';
+$TEXT['MORE'] = 'M&aacute;s';
+$TEXT['MOVE_DOWN'] = 'Bajar';
+$TEXT['MOVE_UP'] = 'Subir';
+$TEXT['MULTIPLE_MENUS'] = 'Men&uacute;s M&uacute;ltiples';
+$TEXT['MULTISELECT'] = 'Multi-selecci&oacute;n';
+$TEXT['NAME'] = 'nombre';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = '&iquest;Necesita Entrar?';
+$TEXT['NEW_PASSWORD'] = 'Nueva Contrase&ntilde;a';
+$TEXT['NEW_WINDOW'] = 'Nueva Ventana';
+$TEXT['NEXT'] = 'Siguiente';
+$TEXT['NEXT_PAGE'] = 'Siguiente P&aacute;gina';
+$TEXT['NO'] = 'No';
+$TEXT['NONE'] = 'Ninguno';
+$TEXT['NONE_FOUND'] = 'Ninguna';
+$TEXT['NOT_FOUND'] = 'No Encontrado.';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Ning&uacute;n Resultado';
+$TEXT['OF'] = 'De';
+$TEXT['ON'] = 'En';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Opci&oacute;n';
+$TEXT['OTHERS'] = 'Otros';
+$TEXT['OUT_OF'] = 'Fuera De';
+$TEXT['OVERWRITE_EXISTING'] = 'Sobreescribir';
+$TEXT['PAGE'] = 'P&aacute;gina';
+$TEXT['PAGES_DIRECTORY'] = 'Directorio de P&aacute;ginas';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Extensi&oacute;n de P&aacute;gina';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Lenguages de P&aacute;gina';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Niveles de P&aacute;ginas';
+$TEXT['PAGE_SPACER'] = 'Separador de P&aacute;gina';
+$TEXT['PAGE_TITLE'] = 'T&iacute;tulo de la P&aacute;gina';
+$TEXT['PAGE_TRASH'] = 'Papelera en P&aacute;gina';
+$TEXT['PARENT'] = 'Padre';
+$TEXT['PASSWORD'] = 'Contrase&ntilde;a';
+$TEXT['PATH'] = 'Ruta de acceso';
+$TEXT['PHP_ERROR_LEVEL'] = 'Nivel de Reporte de Errores de PHP';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Elegir';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Posts Por P&aacute;gina';
+$TEXT['POST_FOOTER'] = 'Post Pie';
+$TEXT['POST_HEADER'] = 'Post Encabezado';
+$TEXT['PREVIOUS'] = 'Anterior';
+$TEXT['PREVIOUS_PAGE'] = 'P&aacute;gina Anterior';
+$TEXT['PRIVATE'] = 'Privada';
+$TEXT['PRIVATE_VIEWERS'] = 'Usuarios privados';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'P&uacute;blica';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Gupo Bot&oacute;n de Radio';
+$TEXT['READ'] = 'Lectura';
+$TEXT['READ_MORE'] = 'M&aacute;s Informaci&oacute;n';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrado';
+$TEXT['REGISTERED_VIEWERS'] = 'Visitantes Registrados';
+$TEXT['RELOAD'] = 'Recargar';
+$TEXT['REMEMBER_ME'] = 'Recu&eacute;rdame';
+$TEXT['RENAME'] = 'Renombrar';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Obligatorio';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Reiniciar';
+$TEXT['RESIZE'] = 'Tama&ntilde;o';
+$TEXT['RESIZE_IMAGE_TO'] = 'Redimensionar imagen a';
+$TEXT['RESTORE'] = 'Restaurar';
+$TEXT['RESTORE_DATABASE'] = 'Restaurar base de datos';
+$TEXT['RESTORE_MEDIA'] = 'Restaurar Medios';
+$TEXT['RESULTS'] = 'Resultados';
+$TEXT['RESULTS_FOOTER'] = 'Pie de P&aacute;gina de Resultados';
+$TEXT['RESULTS_FOR'] = 'Resultados para';
+$TEXT['RESULTS_HEADER'] = 'Encabezado de Resultados';
+$TEXT['RESULTS_LOOP'] = 'Bucle de Resultados';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Repetir Nueva Contrase&ntilde;a';
+$TEXT['RETYPE_PASSWORD'] = 'Repetir Contrase&ntilde;a';
+$TEXT['SAME_WINDOW'] = 'Misma Ventana';
+$TEXT['SAVE'] = 'Guardar';
+$TEXT['SEARCH'] = 'Buscar';
+$TEXT['SEARCHING'] = 'Buscando';
+$TEXT['SECTION'] = 'Secci&oacute;n';
+$TEXT['SECTION_BLOCKS'] = 'Bloques de la Secci&oacute;n';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Caja de selecci&oacute;n';
+$TEXT['SEND_DETAILS'] = 'Enviar Detalles';
+$TEXT['SEPARATE'] = 'Separado';
+$TEXT['SEPERATOR'] = 'Separador';
+$TEXT['SERVER_EMAIL'] = 'Servidor de Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Sistema Operativo del Servidor';
+$TEXT['SESSION_IDENTIFIER'] = 'Identificador de Sesi&oacute;n';
+$TEXT['SETTINGS'] = 'Configuraci&oacute;n';
+$TEXT['SHORT'] = 'Corto';
+$TEXT['SHORT_TEXT'] = 'Texto Corto';
+$TEXT['SHOW'] = 'Ver';
+$TEXT['SHOW_ADVANCED'] = 'Ver Opciones Avanzadas';
+$TEXT['SIGNUP'] = 'Firmar';
+$TEXT['SIZE'] = 'Tama&ntilde;o';
+$TEXT['SMART_LOGIN'] = 'Entrada Inteligente';
+$TEXT['START'] = 'Inicio';
+$TEXT['START_PUBLISHING'] = 'Iniciar Publicaci&oacute;n';
+$TEXT['SUBJECT'] = 'Asunto';
+$TEXT['SUBMISSIONS'] = 'Presentaciones';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Presenciaciones Guardadas en la base de datos';
+$TEXT['SUBMISSION_ID'] = 'Presentaci&oacute;n ID';
+$TEXT['SUBMITTED'] = 'Presentado';
+$TEXT['SUCCESS'] = '&Eacute;xito';
+$TEXT['SYSTEM_DEFAULT'] = 'Original del Sistema';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Permisos de Sistema';
+$TEXT['TABLE_PREFIX'] = 'Prefijo de tablas';
+$TEXT['TARGET'] = 'Objetivo';
+$TEXT['TARGET_FOLDER'] = 'Carpeta';
+$TEXT['TEMPLATE'] = 'Plantilla';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Permisos de plantilla';
+$TEXT['TEXT'] = 'Texto';
+$TEXT['TEXTAREA'] = 'Textarea';
+$TEXT['TEXTFIELD'] = 'Campo de texto';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Hora';
+$TEXT['TIMEZONE'] = 'Huso Horario';
+$TEXT['TIME_FORMAT'] = 'Formato de Hora';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'T&iacute;tulo';
+$TEXT['TO'] = 'Para';
+$TEXT['TOP_FRAME'] = 'Marco Superior';
+$TEXT['TRASH_EMPTIED'] = 'Papelera Vac&iacute;a';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tipo';
+$TEXT['UNDER_CONSTRUCTION'] = 'En Construcci&oacute;n';
+$TEXT['UNINSTALL'] = 'Desinstalar';
+$TEXT['UNKNOWN'] = 'Desconocido';
+$TEXT['UNLIMITED'] = 'Ilimitado';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Arriba';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Subir Archivo(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Ususario';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verificaci&oacute;n';
+$TEXT['VERSION'] = 'Versi&oacute;n';
+$TEXT['VIEW'] = 'Ver';
+$TEXT['VIEW_DELETED_PAGES'] = 'Ver P&aacute;ginas Eliminadas';
+$TEXT['VIEW_DETAILS'] = 'Ver Detalles';
+$TEXT['VISIBILITY'] = 'Visibilidad';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Descripci&oacute;n del Web';
+$TEXT['WEBSITE_FOOTER'] = 'Pie de p&aacute;gina del Web';
+$TEXT['WEBSITE_HEADER'] = 'Encabezado del Web';
+$TEXT['WEBSITE_KEYWORDS'] = 'Palabras Clave del Web';
+$TEXT['WEBSITE_TITLE'] = 'T&iacute;tulo del Web';
+$TEXT['WELCOME_BACK'] = 'Bienvenido';
+$TEXT['WIDTH'] = 'Ancho';
+$TEXT['WINDOW'] = 'Ventana';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Permisos de escritura para todos';
+$TEXT['WRITE'] = 'Escritura';
+$TEXT['WYSIWYG_EDITOR'] = 'Editor WYSIWYG';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG';
+$TEXT['YES'] = 'Si';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Agregar Grupo';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Agregar Encabezado';
+$HEADING['ADD_PAGE'] = 'Agregar P&aacute;gina';
+$HEADING['ADD_USER'] = 'Agregar Usuario';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Herramientas de administraci&oacute;n';
+$HEADING['BROWSE_MEDIA'] = 'Explorar Media';
+$HEADING['CREATE_FOLDER'] = 'Crear Carpeta';
+$HEADING['DEFAULT_SETTINGS'] = 'Configuraci&oacute;n Original';
+$HEADING['DELETED_PAGES'] = 'P&aacute;ginas Eliminadas';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Configuraci&oacute;n del sistema de Ficheros';
+$HEADING['GENERAL_SETTINGS'] = 'Configuraci&oacute;n General';
+$HEADING['INSTALL_LANGUAGE'] = 'Instalar Lenguaje';
+$HEADING['INSTALL_MODULE'] = 'Instalar M&oacute;dulo';
+$HEADING['INSTALL_TEMPLATE'] = 'Instalar Plantilla';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detalles del Lenguaje';
+$HEADING['MANAGE_SECTIONS'] = 'Administrar Secciones';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modificar Configuraci&oacute;n Avanzada de P&aacute;gina';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modificar/Eliminar Grupo';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modificar/Eliminar P&aacute;gina';
+$HEADING['MODIFY_DELETE_USER'] = 'Modificar/Eliminar Usuario';
+$HEADING['MODIFY_GROUP'] = 'Modificar Grupo';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modificar P&aacute;gina Intro';
+$HEADING['MODIFY_PAGE'] = 'Modificar P&aacute;gina';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modificar Configuraci&oacute;n de P&aacute;gina';
+$HEADING['MODIFY_USER'] = 'Modificar Usuario';
+$HEADING['MODULE_DETAILS'] = 'Detalles de M&oacute;dulo';
+$HEADING['MY_EMAIL'] = 'Mi Email';
+$HEADING['MY_PASSWORD'] = 'Mi Contrase&ntilde;a';
+$HEADING['MY_SETTINGS'] = 'Mi Configuraci&oacute;n';
+$HEADING['SEARCH_SETTINGS'] = 'Configuraci&oacute;n del Search';
+$HEADING['SERVER_SETTINGS'] = 'Configuraci&oacute;n del Servidor';
+$HEADING['TEMPLATE_DETAILS'] = 'Detalles de Plantilla';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Desinstalar Lenguaje';
+$HEADING['UNINSTALL_MODULE'] = 'Desinstalar M&oacute;dulo';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Desinstalar Plantilla';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Subir Archivo(s)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Privilegios insuficientes para estar aqu&iacute;';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'La contrase&ntilde;a no puede ser cambiada m&aacute;s de una vez por hora';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'No puedo enviarle la contrase&ntilde;a, contacte a su Administrador';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Email no encontrado en base de datos';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Por favor ingrese su direccion de email';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Perd&oacute;n, no tiene permiso para ver esta p&aacute;gina';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Ya instalado';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'No se pudo escribir en el directorio';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'No se puede desinstalar';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Desinstalaci&oacute;n erronea: el archivo seleccionado est&aacute; en uso';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br />No se puede desinstalar el {{type}} <b>{{type_name}}</b>, dado que se est&aacute; utilizando {{pages}}:<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'en la p&aacute;gina siguiente;en las p&aacute;ginas siguientes';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'No se puede desinstalar el template {{name}} dado que se trata del template est&aacute;ndar.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'No se pudo descomprimir (zip)';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'No se pudos subir archivo';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Error abriendo fichero.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'El archivo a subir debe ser del siguiente formato:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'El archivo a subir debe ser de uno de los siguientes formatos:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Vuelva y complete todos los campos';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Instalaci&oacute;n correcta';
+$MESSAGE['GENERIC_INVALID'] = 'Archivo inv&aacute;lido';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'No instalado';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Por favor, sea paciente. Esto puede tardar un rato.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Vuelva pronto...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Desinstalaci&oacute;n correcta';
+$MESSAGE['GENERIC_UPGRADED'] = 'Actualizaci&oacute;n Completada';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GROUPS_ADDED'] = 'Nuevo grupo agregado';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = '&iquest;Est&aacute; seguro que desea eliminar el grupo selecciondo (y los usuarios que lo componen)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupo eliminado';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'El nombre del grupo est&aacute; vaci&oacute;';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Nombre de grupo ya existe';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'No hay ning&ntilde;n grupo';
+$MESSAGE['GROUPS_SAVED'] = 'Grupo guardado';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'ingrese su Contrase&ntilde;a';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Contrase&ntilde;a muy larga';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Contrase&ntilde;a muy corta';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'No ha ingresado una extensi&oacute;n de archivo';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'No ha ingresado un nombre nuevo';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'No se puede eliminar la carpeta seleccionada';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'No se puede eliminar el archivo seleccionado';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'El Nombre no ha sido cambiado';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = '&iquest;Est&aacute; seguro que desea eliminar la siguiente carpeta o archivo?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Carpeta eliminada';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Archivo eliminado';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'El directorio no existe';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'No puede incluir ../ en el nombre de carpeta';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Esa carpeta ya existe';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Carpeta creada';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'No se pudo crear carpeta';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Ese archivo ya existe';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Archivo no encontrado';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'No puede incluir ../ en el nombre';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'No se puede usar index.php como nombre';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'No hay medias en esta carpeta';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'El Nombre ha sido cambiado';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' archivo recibido correctamente';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'No puede tener ../ en el nombre de carpeta';
+$MESSAGE['MEDIA_UPLOADED'] = ' archivos recibidos correctamente';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Disculpe este formulario ha sido enviado demasiadas veces seguidas. Vuelva a intentarlo en una hora.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'El n&uacute;mero de verificaci&oacute;n que ha introducido es incorrecto. Si est&aacute;s teniendo problemas ley&eacute;ndolo, por favor, env&iacute;e un e-mail a: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Debe completar los siguiente campos';
+$MESSAGE['PAGES_ADDED'] = 'P&aacute;gina agregada';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Encabezado de P&aacute;gina agregado';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Inagrese un t&iacute;tulo de men&uacute;';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Ingrese un t&iacute;tulo de p&aacute;gina';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Error creando archivo de acceso en el directorio /pages (privilegios insuficientes)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Error eliminando archivo de acceso en el directorio /pages (privilegios insuficientes)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Error reordenando la p&aacute;gina';
+$MESSAGE['PAGES_DELETED'] = 'P&aacute;gina eliminada';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Est&aacute; seguro que desea eliminar esta p&aacute;gina y todas sus sub-p&aacute;ginas';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Usted no tiene permiso para modificar esta p&aacute;gina';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Pinche aqu&iacute; para modificar Intro';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'No se pudo escribir en el archivo /pages/intro.php (privilegios insuficientes)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Intro guardada';
+$MESSAGE['PAGES_LAST_MODIFIED'] = '&Uacute;ltima modificaci&oacute;n hecha por';
+$MESSAGE['PAGES_NOT_FOUND'] = 'No se ha encontrado la p&aacute;gina';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Error guardando la p&aacute;gina';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Ya existe una p&aacute;gina con un t&iacute;tulo igual o similar';
+$MESSAGE['PAGES_REORDERED'] = 'Orden de p&aacute;gina cambiado';
+$MESSAGE['PAGES_RESTORED'] = 'P&aacute;gina recuperada';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Volver a las p&aacute;ginas';
+$MESSAGE['PAGES_SAVED'] = 'P&aacute;gina guardada correctamente';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Configuraci&oacute;n de P&aacute;gina guardada';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Propiedades de la secci&oacute;n guardadas';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'El (actual) es incorrecto';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detalles guardados';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email guardado';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Contrase&ntilde;a cambiada';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Atenci&oacute;n: Este bot&oacute;n eliminar&aacute; los cambios que no hayan sido guardados.';
+$MESSAGE['SETTINGS_SAVED'] = 'Configuraci&oacute;n guardada';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'No se pudo abrir el archivo de configuraci&oacute;n';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'No se pudo escribir en el archivo de configuraci&oacute;n';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Atenci&oacute;n: S&oacute;lo recomendado para entornos de prueba';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Debe ingresar una direccion de email';
+$MESSAGE['START_CURRENT_USER'] = 'Est&aacute;s conectado como:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'El directorio de instalaci&oacute;n todav&iacute;a existe. Es buena idea eliminarlo!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Bienvenido a la consola de Administraci&oacute;n';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Atenci&oacute;n: para cambiar la plantilla ir a la secci&oacute;n de Configuraci&oacute;n';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Nuevo usuario agregado';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Atenci&oacute;n: Solo debe escribir en estos campos si desea cambiar la contrase&ntilde;a de este usuario.';
+$MESSAGE['USERS_CONFIRM_DELETE'] = '&iquest;Esta seguro que desea eliminar el usuario?';
+$MESSAGE['USERS_DELETED'] = 'Usuario eliminado';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Email en uso';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Email inv&aacute;lido';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Ning&uacute;n grupo fue seleccionado';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Las contrase&ntilde;as no coinciden';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Contrase&ntilde;a muy corta';
+$MESSAGE['USERS_SAVED'] = 'Usuario guardado';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Administrar groups de usuarios y sus permisos...';
+$OVERVIEW['HELP'] = 'Respuestas a tus preguntas...';
+$OVERVIEW['LANGUAGES'] = 'Administrar lenguajes...';
+$OVERVIEW['MEDIA'] = 'Administrar archivos en la carpeta Media...';
+$OVERVIEW['MODULES'] = 'Administrar m&oacute;dulos de WebsiteBaker...';
+$OVERVIEW['PAGES'] = 'Administrar p&aacute;ginas del web...';
+$OVERVIEW['PREFERENCES'] = 'Cambiar preferencias de email, contrase&ntilde;a, etc... ';
+$OVERVIEW['SETTINGS'] = 'Configurar WebsiteBaker...';
+$OVERVIEW['START'] = 'Administraci&oacute;n General';
+$OVERVIEW['TEMPLATES'] = 'Administrar plantillas de apariencia...';
+$OVERVIEW['USERS'] = 'Administrar acceso de usuarios a WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Ver y explorar tu sitio en una nueva ventana...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/ES.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/ET.php
===================================================================
--- trunk/languages/ET.php	(nonexistent)
+++ trunk/languages/ET.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'ET';
+$language_name = 'Eesti';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Heiko H&auml;ng';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Ligip&auml;&auml;s';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Lisad';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Retrieve Login Details';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupid';
+$MENU['HELP'] = 'Abi';
+$MENU['LANGUAGES'] = 'Keeled';
+$MENU['LOGIN'] = 'Logi Sisse';
+$MENU['LOGOUT'] = 'Logi V&auml;lja';
+$MENU['MEDIA'] = 'Meedia';
+$MENU['MODULES'] = 'Moodulid';
+$MENU['PAGES'] = 'Lehed';
+$MENU['PREFERENCES'] = 'Valikud';
+$MENU['SETTINGS'] = 'Seaded';
+$MENU['START'] = 'Start';
+$MENU['TEMPLATES'] = 'Kujundused';
+$MENU['USERS'] = 'Kasutajad';
+$MENU['VIEW'] = 'Vaata';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registreerimine';
+$TEXT['ACTIONS'] = 'Actions';
+$TEXT['ACTIVE'] = 'Aktiivne';
+$TEXT['ADD'] = 'Lisa';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Lisa Sektsioon';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administratsioon';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administration tool';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administraatorid';
+$TEXT['ADVANCED'] = 'Arenenud';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Luba Arvukad Valikud';
+$TEXT['ALL_WORDS'] = 'K&otilde;ik S&otilde;nad';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anon&uuml;&uuml;mne';
+$TEXT['ANY_WORDS'] = 'Mistages S&otilde;nad';
+$TEXT['APP_NAME'] = 'Application Name';
+$TEXT['ARE_YOU_SURE'] = 'Oled sa kindel?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Tagasi';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Backup Database';
+$TEXT['BACKUP_MEDIA'] = 'Backup Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'Alus';
+$TEXT['BLOCK'] = 'Blokeeri';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Katkesta';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Verification';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Muuda';
+$TEXT['CHANGES'] = 'Muudatused';
+$TEXT['CHANGE_SETTINGS'] = 'Muuda Seadeid';
+$TEXT['CHARSET'] = 'Charset';
+$TEXT['CHECKBOX_GROUP'] = 'M&auml;rkeruut Grupp';
+$TEXT['CLOSE'] = 'Sulge';
+$TEXT['CODE'] = 'Kood';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Kollaps';
+$TEXT['COMMENT'] = 'Kommentaar';
+$TEXT['COMMENTING'] = 'Kommenteerimine';
+$TEXT['COMMENTS'] = 'Kommentaarid';
+$TEXT['CREATE_FOLDER'] = 'Loo Kaust';
+$TEXT['CURRENT'] = 'Praegune';
+$TEXT['CURRENT_FOLDER'] = 'Praegune Kaust';
+$TEXT['CURRENT_PAGE'] = 'Praegune Lehek&uuml;lg';
+$TEXT['CURRENT_PASSWORD'] = 'Praegune Parool';
+$TEXT['CUSTOM'] = 'Tava';
+$TEXT['DATABASE'] = 'Andmebaas';
+$TEXT['DATE'] = 'Kuup&auml;ev';
+$TEXT['DATE_FORMAT'] = 'Kuup&auml;eva Formaat';
+$TEXT['DEFAULT'] = 'Vaikimisi';
+$TEXT['DEFAULT_CHARSET'] = 'Default Charset';
+$TEXT['DEFAULT_TEXT'] = 'Vaikimisi Tekst';
+$TEXT['DELETE'] = 'Kustuta';
+$TEXT['DELETED'] = 'Kustutatud';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Kirjeldus';
+$TEXT['DESIGNED_FOR'] = 'Kavandatud';
+$TEXT['DIRECTORIES'] = 'Kataloogid';
+$TEXT['DIRECTORY_MODE'] = 'Kataloogi T&ouml;&ouml;reziim';
+$TEXT['DISABLED'] = 'Blokeeritud';
+$TEXT['DISPLAY_NAME'] = 'Vaate Nimi';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Emaili Aadress';
+$TEXT['EMPTY_TRASH'] = 'T&uuml;hi Pr&uuml;gikast';
+$TEXT['ENABLED'] = 'Lubatud';
+$TEXT['END'] = 'L&otilde;pp';
+$TEXT['ERROR'] = 'Viga';
+$TEXT['EXACT_MATCH'] = 'T&auml;pne Sobivus';
+$TEXT['EXECUTE'] = 'T&auml;ida';
+$TEXT['EXPAND'] = 'Laienda';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'V&auml;li';
+$TEXT['FILE'] = 'Fail';
+$TEXT['FILES'] = 'Failid';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Failis&uuml;steemi &Otilde;igused';
+$TEXT['FILE_MODE'] = 'Faili T&ouml;&ouml;reziim';
+$TEXT['FINISH_PUBLISHING'] = 'L&otilde;peta Avaldamine';
+$TEXT['FOLDER'] = 'Kaust';
+$TEXT['FOLDERS'] = 'Kaustad';
+$TEXT['FOOTER'] = 'Jalus';
+$TEXT['FORGOTTEN_DETAILS'] = 'Unustasid oma detailid?';
+$TEXT['FORGOT_DETAILS'] = 'Unustasid Andmed?';
+$TEXT['FROM'] = 'Kellelt';
+$TEXT['FRONTEND'] = 'Frondi-l&otilde;pp';
+$TEXT['FULL_NAME'] = 'T&auml;isnimi';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupp';
+$TEXT['HEADER'] = 'P&auml;is';
+$TEXT['HEADING'] = 'P&auml;is';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'K&otilde;rgus';
+$TEXT['HIDDEN'] = 'Varjatud';
+$TEXT['HIDE'] = 'Peida';
+$TEXT['HIDE_ADVANCED'] = 'Peida Arenenud Valikud';
+$TEXT['HOME'] = 'Kodu';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Kodulehe &Uuml;mbersuunamine';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Hostia';
+$TEXT['ICON'] = 'Ikoon';
+$TEXT['IMAGE'] = 'Pilt';
+$TEXT['INLINE'] = 'Rivis';
+$TEXT['INSTALL'] = 'Paigalda';
+$TEXT['INSTALLATION'] = 'Installatsioon';
+$TEXT['INSTALLATION_PATH'] = 'Installatsiooni Rada';
+$TEXT['INSTALLATION_URL'] = 'Installatsiooni URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = 'Intro Lehek&uuml;lg';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'M&auml;rks&otilde;nad';
+$TEXT['LANGUAGE'] = 'Keel';
+$TEXT['LAST_UPDATED_BY'] = 'Viimati Uuendatud';
+$TEXT['LENGTH'] = 'Pikkus';
+$TEXT['LEVEL'] = 'Tase';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix tuginev';
+$TEXT['LIST_OPTIONS'] = 'Nimekirja Valikud';
+$TEXT['LOGGED_IN'] = 'Sisse Logitud';
+$TEXT['LOGIN'] = 'Logi Sisse';
+$TEXT['LONG'] = 'Pikk';
+$TEXT['LONG_TEXT'] = 'Pikk Tekst';
+$TEXT['LOOP'] = 'Ts&uuml;kkel';
+$TEXT['MAIN'] = 'Peamine';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Halda';
+$TEXT['MANAGE_GROUPS'] = 'Halda Gruppe';
+$TEXT['MANAGE_USERS'] = 'Halda Kasutajaid';
+$TEXT['MATCH'] = 'Sobima';
+$TEXT['MATCHING'] = 'Sobiv';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Kaast&ouml;id Tunnis';
+$TEXT['MEDIA_DIRECTORY'] = 'Meedia Kataloog';
+$TEXT['MENU'] = 'Men&uuml;&uuml;';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Men&uuml;&uuml; Pealkiri';
+$TEXT['MESSAGE'] = 'Teade';
+$TEXT['MODIFY'] = 'Muuda';
+$TEXT['MODIFY_CONTENT'] = 'Muuda Sisu';
+$TEXT['MODIFY_SETTINGS'] = 'Muuda Seadeid';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Mooduli &Otilde;igused';
+$TEXT['MORE'] = 'Rohkem';
+$TEXT['MOVE_DOWN'] = 'Liigu Alla';
+$TEXT['MOVE_UP'] = 'Liigu &Uuml;lesse';
+$TEXT['MULTIPLE_MENUS'] = 'Arvukas Men&uuml;&uuml;\'s';
+$TEXT['MULTISELECT'] = 'Multi-valik';
+$TEXT['NAME'] = 'Nimi';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Vajad sisselogimist?';
+$TEXT['NEW_PASSWORD'] = 'Uus Parool';
+$TEXT['NEW_WINDOW'] = 'Uus Aken';
+$TEXT['NEXT'] = 'J&auml;rgmine';
+$TEXT['NEXT_PAGE'] = 'J&auml;rgmine Lehek&uuml;lg';
+$TEXT['NO'] = 'Ei';
+$TEXT['NONE'] = 'Mitte &Uuml;kski';
+$TEXT['NONE_FOUND'] = 'Ei Leitud';
+$TEXT['NOT_FOUND'] = 'Ei Leitud';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Tulemusi Ei Ole';
+$TEXT['OF'] = 'Of';
+$TEXT['ON'] = 'Edasi';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Valikud';
+$TEXT['OTHERS'] = 'Teise';
+$TEXT['OUT_OF'] = 'Out Of';
+$TEXT['OVERWRITE_EXISTING'] = 'Kirjuta olemasolev &uuml;le';
+$TEXT['PAGE'] = 'Lehek&uuml;lg';
+$TEXT['PAGES_DIRECTORY'] = 'Lehek&uuml;lgede Kataloog';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Lehek&uuml;lje Ulatus';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Lehek&uuml;lje Keeled';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Lehek&uuml;lje Taseme Limiit';
+$TEXT['PAGE_SPACER'] = 'Lehek&uuml;lje Vahepuks';
+$TEXT['PAGE_TITLE'] = 'Lehek&uuml;lje Pealkiri';
+$TEXT['PAGE_TRASH'] = 'Lehek&uuml;lje Pr&uuml;gi';
+$TEXT['PARENT'] = 'Vanem';
+$TEXT['PASSWORD'] = 'Parool';
+$TEXT['PATH'] = 'Rada';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Vea Esitamise Tase';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Palun vali';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Postitusi Lehele';
+$TEXT['POST_FOOTER'] = 'Posti Jalus';
+$TEXT['POST_HEADER'] = 'Posti P&auml;is';
+$TEXT['PREVIOUS'] = 'Eelmine';
+$TEXT['PREVIOUS_PAGE'] = 'Eelmine lehek&uuml;lg';
+$TEXT['PRIVATE'] = 'Privaatne';
+$TEXT['PRIVATE_VIEWERS'] = 'Privaatsed Vaatajad';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Avalik';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Nupu Grupp';
+$TEXT['READ'] = 'Loe';
+$TEXT['READ_MORE'] = 'Loe Rohkem';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registreeritud';
+$TEXT['REGISTERED_VIEWERS'] = 'Registered Viewers';
+$TEXT['RELOAD'] = 'Lae Uuesti';
+$TEXT['REMEMBER_ME'] = 'Pea Mind Meeles';
+$TEXT['RENAME'] = 'Nimeta &Uuml;mber';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Required';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Tagasta';
+$TEXT['RESIZE'] = 'Re-size';
+$TEXT['RESIZE_IMAGE_TO'] = 'Resize Image To';
+$TEXT['RESTORE'] = 'Restore';
+$TEXT['RESTORE_DATABASE'] = 'Restore Database';
+$TEXT['RESTORE_MEDIA'] = 'Restore Media';
+$TEXT['RESULTS'] = 'Tulemused';
+$TEXT['RESULTS_FOOTER'] = 'Tulemuste Jalus';
+$TEXT['RESULTS_FOR'] = 'Tulemused';
+$TEXT['RESULTS_HEADER'] = 'Tulemuste P&auml;is';
+$TEXT['RESULTS_LOOP'] = 'Tulemuste Ts&uuml;kkel';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Korda Uut Parooli';
+$TEXT['RETYPE_PASSWORD'] = 'Korda Parooli';
+$TEXT['SAME_WINDOW'] = 'Sama Aken';
+$TEXT['SAVE'] = 'Salvesta';
+$TEXT['SEARCH'] = 'Otsi';
+$TEXT['SEARCHING'] = 'Otsib';
+$TEXT['SECTION'] = 'Sektsioon';
+$TEXT['SECTION_BLOCKS'] = 'Sektsiooni Blokid';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Selekteeri Kast';
+$TEXT['SEND_DETAILS'] = 'Saada detailid';
+$TEXT['SEPARATE'] = 'Eralduma';
+$TEXT['SEPERATOR'] = 'Seperator';
+$TEXT['SERVER_EMAIL'] = 'Serveri Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Serveri Operatsioonis&uuml;steem';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Identifier';
+$TEXT['SETTINGS'] = 'Seaded';
+$TEXT['SHORT'] = 'L&uuml;hike';
+$TEXT['SHORT_TEXT'] = 'L&uuml;hike Tekst';
+$TEXT['SHOW'] = 'N&auml;ita';
+$TEXT['SHOW_ADVANCED'] = 'N&auml;ita Arenenud Valikuid';
+$TEXT['SIGNUP'] = 'Registreeri';
+$TEXT['SIZE'] = 'Suurus';
+$TEXT['SMART_LOGIN'] = 'Nutikas Sisselogimine';
+$TEXT['START'] = 'Alusta';
+$TEXT['START_PUBLISHING'] = 'Alusta Avaldamist';
+$TEXT['SUBJECT'] = 'Pealkiri';
+$TEXT['SUBMISSIONS'] = 'Kaast&ouml;&ouml;d';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Kaast&ouml;&ouml;d Salvestatud Andmebaasi';
+$TEXT['SUBMISSION_ID'] = 'Kaast&ouml;&ouml; ID';
+$TEXT['SUBMITTED'] = 'Saadetud';
+$TEXT['SUCCESS'] = 'Edu';
+$TEXT['SYSTEM_DEFAULT'] = 'S&uuml;steemi Vaikimisi Valik';
+$TEXT['SYSTEM_PERMISSIONS'] = 'S&uuml;steemi &Otilde;igused';
+$TEXT['TABLE_PREFIX'] = 'Tabelite Prefiks';
+$TEXT['TARGET'] = 'Sihtm&auml;rk';
+$TEXT['TARGET_FOLDER'] = 'Siht kaust';
+$TEXT['TEMPLATE'] = 'Kujundus';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Kujunduse &Otilde;igused';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Tekstikast';
+$TEXT['TEXTFIELD'] = 'Tekstilahter';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Aeg';
+$TEXT['TIMEZONE'] = 'Ajatsoon';
+$TEXT['TIME_FORMAT'] = 'Aja Formaat';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Pealkiri';
+$TEXT['TO'] = 'Kellele';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = 'Pr&uuml;gikast T&uuml;hjendatud';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'T&uuml;&uuml;p';
+$TEXT['UNDER_CONSTRUCTION'] = 'Ehitamisel';
+$TEXT['UNINSTALL'] = 'Eemalda';
+$TEXT['UNKNOWN'] = 'Teadmata';
+$TEXT['UNLIMITED'] = 'Piiramatu';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = '&Uuml;lesse';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Saada Fail(id)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Kasutaja';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verification';
+$TEXT['VERSION'] = 'Versioon';
+$TEXT['VIEW'] = 'Vaata';
+$TEXT['VIEW_DELETED_PAGES'] = 'Vaata Kustutatud Lehek&uuml;lgi';
+$TEXT['VIEW_DETAILS'] = 'Vaata Detaile';
+$TEXT['VISIBILITY'] = 'N&auml;htavus';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Veebisait';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Veebisaidi Kirjeldus';
+$TEXT['WEBSITE_FOOTER'] = 'Veebisaidi Jalus';
+$TEXT['WEBSITE_HEADER'] = 'Veebisaidi P&auml;is';
+$TEXT['WEBSITE_KEYWORDS'] = 'Veebisaidi M&auml;rks&otilde;nad';
+$TEXT['WEBSITE_TITLE'] = 'Veebisaidi Pealkiri';
+$TEXT['WELCOME_BACK'] = 'Teretulemast tagasi';
+$TEXT['WIDTH'] = 'Laius';
+$TEXT['WINDOW'] = 'Aken';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'World-writeable file permissions';
+$TEXT['WRITE'] = 'Kirjuta';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Stiil';
+$TEXT['YES'] = 'Jah';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Lisa Grupp';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Add Heading';
+$HEADING['ADD_PAGE'] = 'Lisa Leht';
+$HEADING['ADD_USER'] = 'Lisa Kasutaja';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administration Tools';
+$HEADING['BROWSE_MEDIA'] = 'Sirvi Meediat';
+$HEADING['CREATE_FOLDER'] = 'Loo Kaust';
+$HEADING['DEFAULT_SETTINGS'] = 'Vaikimisi Seaded';
+$HEADING['DELETED_PAGES'] = 'Kustutatud Lehed';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Failis&uuml;steemi Seaded';
+$HEADING['GENERAL_SETTINGS'] = '&Uuml;ldised Seaded';
+$HEADING['INSTALL_LANGUAGE'] = 'Paigalda Keel';
+$HEADING['INSTALL_MODULE'] = 'Paigalda Moodul';
+$HEADING['INSTALL_TEMPLATE'] = 'Paigalda Kujundus';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Keele Detailid';
+$HEADING['MANAGE_SECTIONS'] = 'Muuda Sektsioone';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Muuda Arenenud Lehe Seadeid';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Muuda/Kustuta Grupp';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Muuda/Kustuta Leht';
+$HEADING['MODIFY_DELETE_USER'] = 'Muuda/Kustuta Kasutaja';
+$HEADING['MODIFY_GROUP'] = 'Muuda Gruppi';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Muuda Intro Lehte';
+$HEADING['MODIFY_PAGE'] = 'Muuda Lehte';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Muuda Lehe Seadeid';
+$HEADING['MODIFY_USER'] = 'Muuda Kasutajat';
+$HEADING['MODULE_DETAILS'] = 'Mooduli Detailid';
+$HEADING['MY_EMAIL'] = 'Minu Email';
+$HEADING['MY_PASSWORD'] = 'Minu Parool';
+$HEADING['MY_SETTINGS'] = 'Minu Seaded';
+$HEADING['SEARCH_SETTINGS'] = 'Otsingu Seaded';
+$HEADING['SERVER_SETTINGS'] = 'Server Settings';
+$HEADING['TEMPLATE_DETAILS'] = 'Kujunduse Detailid';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Eemalda Keel';
+$HEADING['UNINSTALL_MODULE'] = 'Eemalda Moodul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Eemalda Kujundus';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Saada Fail(id)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Insufficient privelliges to be here';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Parooliei saa taastada rohkem kui &uuml;ks kord tunnis, vabandame';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'V&otilde;imetu emailima parooli, palun kontakteeru s&uuml;steemi administraatoriga';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Sisestatud emaili eileitud andmebaasist';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Palun sisesta oma emaili aadress allapoole';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Vabandame, sul ei ole &otilde;igusi selle lehe vaatamiseks';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Juba paigaldatud';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'V&otilde;imetu kirjutama siht kataloogi';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Cannot uninstall';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Ei saa eemaldada: selekteeritud fail on kasutuses';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Ei saa faili lahti pakkida';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Ei saa faili &uuml;les laadida';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Error opening file.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Pea meeles et &uuml;les laetav fail peab olema j&auml;rgmistes formaatides:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Pea meeles et &uuml;les laetavad failid peavad olema j&auml;rgmistes formaatides:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Palun mine tagasi ja t&auml;ida k&otilde;ik v&auml;ljad';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Edukalt paigaldatud';
+$MESSAGE['GENERIC_INVALID'] = '&Uuml;les laetud fail on vigane';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Ei ole paigaldatud';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Please be patient, this might take a while.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'K&uuml;lasta hiljem uuesti...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Edukalt eemaldatud';
+$MESSAGE['GENERIC_UPGRADED'] = 'Upgraded successfully';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GROUPS_ADDED'] = 'Grupp edukalt lisatud';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Oled sa kindel et tahad seda gruppi kustutada (ja k&otilde;ik kasutajad mis kuuluvad selle alla)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupp edukalt kustutatud';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Grupi nimi on t&uuml;hi';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Group name already exists';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Gruppe ei leitud';
+$MESSAGE['GROUPS_SAVED'] = 'Grupp edukalt salvestatud';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Palun sisesta parool';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Sisestatud parool on liiga pikk';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Sisestatud parool on liiga l&uuml;hike';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Sa ei sisestanud faili ulatust';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Sa ei sisestanud uut nime';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Ei saa selekteeritud kausta kustutada';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Ei saa selekteeritud faili kustutada';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = '&Uuml;mbernimetamine eba&otilde;nnestus';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Oled sa kindel et tahad kustutada j&auml;rgnevat faili v&otilde;i kausta?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Kaust edukalt kustutatud';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Fail edukalt kustutatud';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Directory does not exist';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Ei saa sisaldada ../ kausta nimes';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Sisestatud kausta nimi eksisteerib';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Kaust edukalt loodud';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'V&otilde;imetu looma kausta';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Sisestatud faili nimi eksisteerib';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Faili ei leitud';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Ei saa sisaldada ../ nimes';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Ei saa kasutada index.php nimena';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Meediat ei leitud praeguses kataloogis';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Edukalt &uuml;mber nimetatud';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' fail edukalt &uuml;les laetud';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Cannot have ../ in the folder target';
+$MESSAGE['MEDIA_UPLOADED'] = ' failid edukalt &uuml;les laetud';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Vabandame, see vorm on juba liiga palju kordi selle tunni jooksul saadetud. Palun proovi j&auml;rgmine tund uuesti.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Sa pead detailid sisestama j&auml;rgnevatesse lahtritesse';
+$MESSAGE['PAGES_ADDED'] = 'Lehek&uuml;lg edukalt lisatud';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Lehek&uuml;lje p&auml;is edukalt lisatud';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Sisesta men&uuml;&uuml; pealkiri';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Sisesta lehek&uuml;lje pealkiri';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Viga faili tekitamisel kausta /pages kataloog';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Viga faili kustutamisel kaustast /pages kataloog';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Viga lehek&uuml;lje taaskorrastamisel';
+$MESSAGE['PAGES_DELETED'] = 'Lehek&uuml;lg edukalt kustutatud';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Oled sa kindel et tahad seda lehek&uuml;lge kustutada (ja k&otilde;iki selle alamlehti ka)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Sul pole selle lehek&uuml;lje muutmiseks &otilde;igusi';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Vajuta siia et muta intro lehek&uuml;lge';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Ei saa kirjutada faili /pages/intro.php';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Intro lehek&uuml;lg edukalt salvestatud';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Vimane muudatus';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Lehek&uuml;lge ei leitud';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Viga lehek&uuml;lje salvestamisel';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Lehek&uuml;lg sama v&otilde;i sarnase pealkirjaga eksisteerib';
+$MESSAGE['PAGES_REORDERED'] = 'Lehek&uuml;lje taaskorrastamine &otilde;nnestus';
+$MESSAGE['PAGES_RESTORED'] = 'Lehek&uuml;lg edukalt taastatud';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Naase lehek&uuml;lgedele';
+$MESSAGE['PAGES_SAVED'] = 'Lehek&uuml;lg edukalt salvestatud';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Lehek&uuml;lje seaded edukalt salvestatud';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Sektsiooni atribuudud edukalt salvestatud';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Pragune parool mida sa sisestasid on vigane';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detailid edukalt salvestatud';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email edukalt uuendatud';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Parool edukalt muudetud';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'M&auml;rge: Selle nupu vajutamine algseadistab k&otilde;ik salvestamata failid';
+$MESSAGE['SETTINGS_SAVED'] = 'Seaded edukalt salvestatud';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'V&otilde;imetu avama konfiguratsioonifaili';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Ei saa kirjutada konfiguratsioonifaili';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'M&auml;rge: see on vajalik ainult &uuml;mbruse testimiseks';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Sa pead sisestama emaili aadressi';
+$MESSAGE['START_CURRENT_USER'] = 'Sa oled praegu sisse logitud:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Hoiatus, Installatsiooni kataloog eksisteerib!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Teretulemast WebsiteBaker Administratsiooni';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'M&auml;rge: kujunduse muutmiseks sa pead minema Seadete sektsiooni';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Kasutaja edukalt lisatud';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'M&auml;rge: Sa pead ainult sisestama p&otilde;him&otilde;tted alumistesse lahtritesse kui sa tahad muuta selle kasutaja parooli';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Kas sa oled kindel et tahad seda kasutajat kustutada?';
+$MESSAGE['USERS_DELETED'] = 'Kasutaja edukalt kustutatud';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Sisestatud e-mail on juba kasutusel';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Sisestatud emaili aadress on vigane';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Grupp selekteerimata';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Sisestatud paroolid ei kattu';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Sisestatud parool on liiga l&uuml;hike';
+$MESSAGE['USERS_SAVED'] = 'Kasutaja edukalt salvestatud';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Halda kasutajate gruppe ja nende &otilde;iguseid...';
+$OVERVIEW['HELP'] = 'On k&uuml;simusi? Leia oma vastus...';
+$OVERVIEW['LANGUAGES'] = 'Halda WebsiteBakeri keeli...';
+$OVERVIEW['MEDIA'] = 'Halda faile mis on media kaustas...';
+$OVERVIEW['MODULES'] = 'Halda WebsiteBakeri mooduleid...';
+$OVERVIEW['PAGES'] = 'Halda oma veebisaidi lehek&uuml;lgi...';
+$OVERVIEW['PREFERENCES'] = 'Muuda eelistusi nagu emaili aadress, parool, jne... ';
+$OVERVIEW['SETTINGS'] = 'Muuda seadeid WebsiteBakeri jaoks...';
+$OVERVIEW['START'] = 'Administratsiooni &uuml;levaade';
+$OVERVIEW['TEMPLATES'] = 'Change the look and feel of your website with templates...';
+$OVERVIEW['USERS'] = 'Halda kasutajaid kes saavad logida WebsiteBakerisse...';
+$OVERVIEW['VIEW'] = 'Kiirelt vaata ja lehitse oma veebisaiti uues aknas...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/ET.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/FI.php
===================================================================
--- trunk/languages/FI.php	(nonexistent)
+++ trunk/languages/FI.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'FI';
+$language_name = 'Suomi'; // Finnish
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Jontse';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'K&auml;ytt&auml;j&auml;t';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Lis&auml;osat';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Salasana unohtunut';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Ryhm&auml;';
+$MENU['HELP'] = 'Apu';
+$MENU['LANGUAGES'] = 'Kielet';
+$MENU['LOGIN'] = 'Kirjaudu';
+$MENU['LOGOUT'] = 'Kirjaudu ulos';
+$MENU['MEDIA'] = 'Tiedostot';
+$MENU['MODULES'] = 'Moduulit';
+$MENU['PAGES'] = 'Sivut';
+$MENU['PREFERENCES'] = 'Omat tiedot';
+$MENU['SETTINGS'] = 'Asetukset';
+$MENU['START'] = 'Alku';
+$MENU['TEMPLATES'] = 'Sivupohjat';
+$MENU['USERS'] = 'K&auml;ytt&auml;j&auml;t';
+$MENU['VIEW'] = 'Katsele';
+$TEXT['ACCOUNT_SIGNUP'] = 'Kirjaunut';
+$TEXT['ACTIONS'] = 'Tila';
+$TEXT['ACTIVE'] = 'K&auml;yt&ouml;ss&auml;';
+$TEXT['ADD'] = 'Lis&auml;&auml;';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Asenna osa';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administration';
+$TEXT['ADMINISTRATION_TOOL'] = 'Ty&ouml;kalu';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'P&auml;&auml;k&auml;ytt&auml;j&auml;t';
+$TEXT['ADVANCED'] = 'Lis&auml;asetukset';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Salli monivalinta';
+$TEXT['ALL_WORDS'] = 'Joka sana';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonyymi';
+$TEXT['ANY_WORDS'] = 'Jokin sanoista';
+$TEXT['APP_NAME'] = 'Sovelluksen nimi';
+$TEXT['ARE_YOU_SURE'] = 'Oletko varma?';
+$TEXT['AUTHOR'] = 'Luonut';
+$TEXT['BACK'] = 'Paluu';
+$TEXT['BACKUP'] = 'Varmuuskopioi';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Varmista tietokanta';
+$TEXT['BACKUP_MEDIA'] = 'Varmista...';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'Perus';
+$TEXT['BLOCK'] = 'Tekstialue';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Peruuta';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha varmistus';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Muuta';
+$TEXT['CHANGES'] = 'Muutokset';
+$TEXT['CHANGE_SETTINGS'] = 'Muuta asetuksia';
+$TEXT['CHARSET'] = 'Merkist&ouml;';
+$TEXT['CHECKBOX_GROUP'] = 'Valintaryhm&auml;';
+$TEXT['CLOSE'] = 'Sulje';
+$TEXT['CODE'] = 'Koodi';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Kutista';
+$TEXT['COMMENT'] = 'Kommentti';
+$TEXT['COMMENTING'] = 'Kommentoi';
+$TEXT['COMMENTS'] = 'Kommentit';
+$TEXT['CREATE_FOLDER'] = 'Luo kansio';
+$TEXT['CURRENT'] = 'Nykyinen';
+$TEXT['CURRENT_FOLDER'] = 'Nykyinen kansio';
+$TEXT['CURRENT_PAGE'] = 'Nykyinen sivu';
+$TEXT['CURRENT_PASSWORD'] = 'Vanha salasana';
+$TEXT['CUSTOM'] = 'Asiakas';
+$TEXT['DATABASE'] = 'Tietokanta';
+$TEXT['DATE'] = 'P&auml;iv&auml;ys';
+$TEXT['DATE_FORMAT'] = 'P&auml;iv&auml;yksen muoto';
+$TEXT['DEFAULT'] = 'Nykyinen';
+$TEXT['DEFAULT_CHARSET'] = 'Oletusmerkrkist&ouml;';
+$TEXT['DEFAULT_TEXT'] = 'Oletusteksti';
+$TEXT['DELETE'] = 'Poista';
+$TEXT['DELETED'] = 'Poistettu';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Kuvaus';
+$TEXT['DESIGNED_FOR'] = 'Suunniteltu';
+$TEXT['DIRECTORIES'] = 'Kansiot';
+$TEXT['DIRECTORY_MODE'] = 'Kansion muoto';
+$TEXT['DISABLED'] = 'Poistettu k&auml;yt&ouml;st&auml;';
+$TEXT['DISPLAY_NAME'] = 'Nimi';
+$TEXT['EMAIL'] = 'S&auml;hk&ouml;posti';
+$TEXT['EMAIL_ADDRESS'] = 'S&auml;hk&ouml;postiosoite';
+$TEXT['EMPTY_TRASH'] = 'Tyhjenn&auml; roskakori';
+$TEXT['ENABLED'] = 'Salli';
+$TEXT['END'] = 'Loppu';
+$TEXT['ERROR'] = 'Virhe';
+$TEXT['EXACT_MATCH'] = 'Tarkalleen';
+$TEXT['EXECUTE'] = 'Suorita';
+$TEXT['EXPAND'] = 'Laajenna';
+$TEXT['EXTENSION'] = 'Lis&auml;osa';
+$TEXT['FIELD'] = 'Kentt&auml;';
+$TEXT['FILE'] = 'Tiedosto';
+$TEXT['FILES'] = 'Tiedostot';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Tiedosto-oikeudet';
+$TEXT['FILE_MODE'] = 'Tiedostomuoto';
+$TEXT['FINISH_PUBLISHING'] = 'Lopeta julkaisu';
+$TEXT['FOLDER'] = 'Kansio';
+$TEXT['FOLDERS'] = 'Kansiot';
+$TEXT['FOOTER'] = 'Alatunniste';
+$TEXT['FORGOTTEN_DETAILS'] = 'Salasana unohtunut?';
+$TEXT['FORGOT_DETAILS'] = 'Peruuta tiedot?';
+$TEXT['FROM'] = 'Mist&auml;';
+$TEXT['FRONTEND'] = 'Johdanto';
+$TEXT['FULL_NAME'] = 'Nimi';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Ryhm&auml;';
+$TEXT['HEADER'] = 'Yl&auml;tunniste';
+$TEXT['HEADING'] = 'Otsikko';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Korkeus';
+$TEXT['HIDDEN'] = 'Piilotettu';
+$TEXT['HIDE'] = 'Piilota';
+$TEXT['HIDE_ADVANCED'] = 'Piilota lis&auml;asetukset';
+$TEXT['HOME'] = 'Koti';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Kotisivun uudelleen ohjaus';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Palvelin';
+$TEXT['ICON'] = 'Kuvake';
+$TEXT['IMAGE'] = 'Kuva';
+$TEXT['INLINE'] = 'Per&auml;kk&auml;in';
+$TEXT['INSTALL'] = 'Asenna';
+$TEXT['INSTALLATION'] = 'Asentaminen';
+$TEXT['INSTALLATION_PATH'] = 'Asennuspolku';
+$TEXT['INSTALLATION_URL'] = 'Asennus URL';
+$TEXT['INSTALLED'] = 'Asennettu';
+$TEXT['INTRO'] = 'Esisivu';
+$TEXT['INTRO_PAGE'] = 'Esisivu';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Avainsanat';
+$TEXT['LANGUAGE'] = 'Kieli';
+$TEXT['LAST_UPDATED_BY'] = 'P&auml;ivitetty';
+$TEXT['LENGTH'] = 'Pituus';
+$TEXT['LEVEL'] = 'Taso';
+$TEXT['LINK'] = 'Linkki';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Listan tyyppi';
+$TEXT['LOGGED_IN'] = 'Kirjautunut';
+$TEXT['LOGIN'] = 'Kirjaudu';
+$TEXT['LONG'] = 'Lis&auml;&auml;';
+$TEXT['LONG_TEXT'] = 'Tarkemmin';
+$TEXT['LOOP'] = 'Silmukka';
+$TEXT['MAIN'] = 'P&auml;&auml;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Hallinnoi';
+$TEXT['MANAGE_GROUPS'] = 'Ryhmien hallinta';
+$TEXT['MANAGE_USERS'] = 'K&auml;ytt&auml;j&auml;hallinta';
+$TEXT['MATCH'] = 'Vastaavuus';
+$TEXT['MATCHING'] = 'Etsii';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Salasana l&auml;hetet&auml;&auml;n vain kerran tunnissa';
+$TEXT['MEDIA_DIRECTORY'] = 'Tiedostokansio';
+$TEXT['MENU'] = 'Valikko';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Valikkoteksti';
+$TEXT['MESSAGE'] = 'Viesti';
+$TEXT['MODIFY'] = 'Muokkaa';
+$TEXT['MODIFY_CONTENT'] = 'Muokkaa sis&auml;lt&ouml;&auml;t';
+$TEXT['MODIFY_SETTINGS'] = 'Muuta asetuksia';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Moduulien hallinta';
+$TEXT['MORE'] = 'Lis&auml;&auml;';
+$TEXT['MOVE_DOWN'] = 'Aiirr&auml; alas';
+$TEXT['MOVE_UP'] = 'Siirr&auml; yl&ouml;s';
+$TEXT['MULTIPLE_MENUS'] = 'Monivalikko';
+$TEXT['MULTISELECT'] = 'Monivalinta';
+$TEXT['NAME'] = 'Nimi';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Kirjautuminen vaadittu';
+$TEXT['NEW_PASSWORD'] = 'Uusi salasana';
+$TEXT['NEW_WINDOW'] = 'Uuteen ikkunaan';
+$TEXT['NEXT'] = 'Seuraava';
+$TEXT['NEXT_PAGE'] = 'Seuraava sivu';
+$TEXT['NO'] = 'Ei';
+$TEXT['NONE'] = 'Ei mik&auml;&auml;n';
+$TEXT['NONE_FOUND'] = 'Ei l&ouml;ytynyt';
+$TEXT['NOT_FOUND'] = 'Ei l&ouml;ytynyt';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Ei l&ouml;ytynyt';
+$TEXT['OF'] = 'Of';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Lis&auml;asteus';
+$TEXT['OTHERS'] = 'Muut';
+$TEXT['OUT_OF'] = 'Out Of';
+$TEXT['OVERWRITE_EXISTING'] = 'Korvaa';
+$TEXT['PAGE'] = 'Sivu';
+$TEXT['PAGES_DIRECTORY'] = 'Sivukansio';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Sivun tarkennin';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Sivun kieli';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Tasoja enint&auml;&auml;n';
+$TEXT['PAGE_SPACER'] = 'Sivujen erotin ';
+$TEXT['PAGE_TITLE'] = 'Sivun otsikko';
+$TEXT['PAGE_TRASH'] = 'Roskakori';
+$TEXT['PARENT'] = 'Is&auml;nt&auml;';
+$TEXT['PASSWORD'] = 'Salasana';
+$TEXT['PATH'] = 'Polku';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP:n virheraportointitapa';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Valitset';
+$TEXT['POST'] = 'Liite';
+$TEXT['POSTS_PER_PAGE'] = 'Osaa sivulla';
+$TEXT['POST_FOOTER'] = 'Lis&auml;alaviite';
+$TEXT['POST_HEADER'] = 'Alaotsikko';
+$TEXT['PREVIOUS'] = 'Edellinen';
+$TEXT['PREVIOUS_PAGE'] = 'Edellinen sivu';
+$TEXT['PRIVATE'] = 'Yksityinen';
+$TEXT['PRIVATE_VIEWERS'] = 'Yksityiset';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Julkinen';
+$TEXT['PUBL_END_DATE'] = 'Julkaisun poistop&auml;iv&auml;';
+$TEXT['PUBL_START_DATE'] = 'Julkaisup&auml;iv&auml;';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radiopainikkeet';
+$TEXT['READ'] = 'Lue';
+$TEXT['READ_MORE'] = 'Lue lis&auml;&auml;..';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Rekister&ouml;itynyt';
+$TEXT['REGISTERED_VIEWERS'] = 'Rekister&ouml;ity';
+$TEXT['RELOAD'] = 'Lataa uudelleen';
+$TEXT['REMEMBER_ME'] = 'Palauta ';
+$TEXT['RENAME'] = 'Nime&auml; uudelleen';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Pakollinen';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Peruuta';
+$TEXT['RESIZE'] = 'Muuta kokoa';
+$TEXT['RESIZE_IMAGE_TO'] = 'Muuta kuvan koko';
+$TEXT['RESTORE'] = 'Palauta';
+$TEXT['RESTORE_DATABASE'] = 'Palauta tietokanta';
+$TEXT['RESTORE_MEDIA'] = 'Palauta...';
+$TEXT['RESULTS'] = 'Tulokset';
+$TEXT['RESULTS_FOOTER'] = 'Alatuniste';
+$TEXT['RESULTS_FOR'] = 'Tulokset';
+$TEXT['RESULTS_HEADER'] = 'Tulokset';
+$TEXT['RESULTS_LOOP'] = 'Tulossilmukka';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Kirjoita uudelleen';
+$TEXT['RETYPE_PASSWORD'] = 'Kirjoita uudeleen';
+$TEXT['SAME_WINDOW'] = 'Nykyiseen ikkunaan';
+$TEXT['SAVE'] = 'Talleta';
+$TEXT['SEARCH'] = 'Etsi';
+$TEXT['SEARCHING'] = 'Etsii..';
+$TEXT['SECTION'] = 'Osa';
+$TEXT['SECTION_BLOCKS'] = 'Osa';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Valinta';
+$TEXT['SEND_DETAILS'] = 'L&auml;het&auml; tiedot';
+$TEXT['SEPARATE'] = 'Erill&auml;&auml;n';
+$TEXT['SEPERATOR'] = 'Erotin';
+$TEXT['SERVER_EMAIL'] = 'Palvelimen s&auml;hk&ouml;posti';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Palvelimen k&auml;ytt&ouml;j&auml;rjestelm&auml;';
+$TEXT['SESSION_IDENTIFIER'] = 'Tunniste';
+$TEXT['SETTINGS'] = 'Asetukset';
+$TEXT['SHORT'] = 'Lyhyesti';
+$TEXT['SHORT_TEXT'] = 'Lyhyesti';
+$TEXT['SHOW'] = 'N&auml;yt&auml;';
+$TEXT['SHOW_ADVANCED'] = 'N&auml;yt&auml; lis&auml;asetukset';
+$TEXT['SIGNUP'] = 'Rekister&ouml;ityminen';
+$TEXT['SIZE'] = 'Koko';
+$TEXT['SMART_LOGIN'] = 'Kirjautuminen';
+$TEXT['START'] = 'Alku';
+$TEXT['START_PUBLISHING'] = 'Julkaise';
+$TEXT['SUBJECT'] = 'Aihe';
+$TEXT['SUBMISSIONS'] = 'Alasivu';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Salasana talletettu tietokantaan';
+$TEXT['SUBMISSION_ID'] = 'Alasivun ID';
+$TEXT['SUBMITTED'] = 'Siirretty alisivuksi';
+$TEXT['SUCCESS'] = 'Onnistui';
+$TEXT['SYSTEM_DEFAULT'] = 'Oletus';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Oikeudet';
+$TEXT['TABLE_PREFIX'] = 'Taulukon ominaisuudet';
+$TEXT['TARGET'] = 'Kohde';
+$TEXT['TARGET_FOLDER'] = 'Kohdekansio';
+$TEXT['TEMPLATE'] = 'Sivupohja';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Sivupohjat';
+$TEXT['TEXT'] = 'Teksti';
+$TEXT['TEXTAREA'] = 'Tekstialue';
+$TEXT['TEXTFIELD'] = 'Tekstikentt&auml;';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Aika';
+$TEXT['TIMEZONE'] = 'Aikavy&ouml;hyke';
+$TEXT['TIME_FORMAT'] = 'Ajan muoto ';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Otsikko';
+$TEXT['TO'] = 'Minne';
+$TEXT['TOP_FRAME'] = 'Frameset sprengen';
+$TEXT['TRASH_EMPTIED'] = 'Tyhjennetty';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tyyppi';
+$TEXT['UNDER_CONSTRUCTION'] = 'Ty&ouml;n alla';
+$TEXT['UNINSTALL'] = 'Poista';
+$TEXT['UNKNOWN'] = 'Tuntematon';
+$TEXT['UNLIMITED'] = 'Rajaton';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Yl&ouml;s';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Lataa palvelimelle';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'K&auml;ytt&auml;j&auml;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Varmistus';
+$TEXT['VERSION'] = 'Versio';
+$TEXT['VIEW'] = 'Katsele';
+$TEXT['VIEW_DELETED_PAGES'] = 'N&auml;yt&auml; poistetut';
+$TEXT['VIEW_DETAILS'] = 'N&auml;yt&auml; tiedot';
+$TEXT['VISIBILITY'] = 'N&auml;kyvyys';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'www-sivu';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Sivuston kuvaus';
+$TEXT['WEBSITE_FOOTER'] = 'Alatunniste';
+$TEXT['WEBSITE_HEADER'] = 'Johdanto';
+$TEXT['WEBSITE_KEYWORDS'] = 'Sivusaton avainsanat';
+$TEXT['WEBSITE_TITLE'] = 'Sivuston otsikko';
+$TEXT['WELCOME_BACK'] = 'N&auml;kemiin';
+$TEXT['WIDTH'] = 'Leveys';
+$TEXT['WINDOW'] = 'Ikkuna';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Kirjoitusoikeudet';
+$TEXT['WRITE'] = 'Kirjoita';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG muokkain';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG tyyli';
+$TEXT['YES'] = 'Kyll&auml;';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Lis&auml;&auml; ryhm&auml;';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Lis&auml;&auml; otsikko';
+$HEADING['ADD_PAGE'] = 'Lis&auml;&auml; sivu';
+$HEADING['ADD_USER'] = 'Lis&auml;&auml; k&auml;ytt&auml;j&auml;';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Ty&ouml;kalut';
+$HEADING['BROWSE_MEDIA'] = 'Selaa tiedostoja';
+$HEADING['CREATE_FOLDER'] = 'Luo kansio';
+$HEADING['DEFAULT_SETTINGS'] = 'Oletusasetukset';
+$HEADING['DELETED_PAGES'] = 'Poistetut sivut';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Tiedostoj&auml;rjestelm&auml;';
+$HEADING['GENERAL_SETTINGS'] = 'Asetukset';
+$HEADING['INSTALL_LANGUAGE'] = 'Asenna kieli';
+$HEADING['INSTALL_MODULE'] = 'Asenna moduuli';
+$HEADING['INSTALL_TEMPLATE'] = 'Asenna sivupohja';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Kielen tiedot';
+$HEADING['MANAGE_SECTIONS'] = 'Muokkaa osia';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Muuta sivun lis&auml;asetuksia';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Muokkaa/poista ryhm&auml;';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Muokkaa/poista sivu';
+$HEADING['MODIFY_DELETE_USER'] = 'Muokkaa/poista k&auml;ytt&auml;j&auml;';
+$HEADING['MODIFY_GROUP'] = 'Muokkaa ryhm&auml;&auml;';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Muokkaa esisivua';
+$HEADING['MODIFY_PAGE'] = 'Muokkaa sivua';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Muuta sivun asetuksia';
+$HEADING['MODIFY_USER'] = 'Muokkaa k&auml;ytt&auml;j&auml;&auml;';
+$HEADING['MODULE_DETAILS'] = 'Moduulin tietoja';
+$HEADING['MY_EMAIL'] = 'S&auml;hk&ouml;postiosoite';
+$HEADING['MY_PASSWORD'] = 'Salasana';
+$HEADING['MY_SETTINGS'] = 'Omat tiedot';
+$HEADING['SEARCH_SETTINGS'] = 'Etsinn&auml;n asetukset';
+$HEADING['SERVER_SETTINGS'] = 'Palvelimen asetukset';
+$HEADING['TEMPLATE_DETAILS'] = 'Sivupohjan info';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Poista kieli';
+$HEADING['UNINSTALL_MODULE'] = 'Poista moduuli';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Poista sivupohja';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Lataa palvelimelle';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Oikeutesi eiv&auml;t riit&auml;...';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Salasanan vaiho vain kerran tunnissa!';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Salasanan postitus ei onnistu, ota yhteytt&auml; p&auml;&auml;k&auml;ytt&auml;j&auml;&auml;n';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Virheellinen s&auml;hk&ouml;postiosoite';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Anna s&auml;hk&ouml;postiosoite';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Oikeutesi eiv&auml;t riit&auml;...';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Asennettu, uudelleen asennus ei onnistu';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kohdekansioon ei voi kirjoittaa';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Ei voi poistaa';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Tiedosto k&auml;yt&ouml;ss&auml;, tiedostoa ei voi poistaa';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Zip-tiedostoa ei voi purkaa';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Lataus ei onnistu';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Virhe tiedostoa avattaessa.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Tiedostotyypin tulee olla jokin seuraavista:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Tiedostotyypin tulee olla jjokin seuraavista:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Palaa ja t&auml;yt&auml; kaikki kent&auml;t';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Asennettu';
+$MESSAGE['GENERIC_INVALID'] = 'Ladatussa tiedostossa virhe';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Ei ole asennettu';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Hetkinen...';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Tervetuloa my&ouml;hemmin...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Poistettu';
+$MESSAGE['GENERIC_UPGRADED'] = 'P&auml;ivitetty';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Verkkosivusto on ty&ouml;n alla';
+$MESSAGE['GROUPS_ADDED'] = 'Ryhm&auml;n lis&auml;ys onnistui';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Haluatko poistaa ryhm&auml;n ja kakki sen k&auml;ytt&auml;j&auml;t?';
+$MESSAGE['GROUPS_DELETED'] = 'Ryhm&auml; poistettu';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Ryhm&auml;n nimi puuttuu';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Ryhm&auml;n nimi varattu';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Ryhm&auml;&auml; ei l&ouml;ydy';
+$MESSAGE['GROUPS_SAVED'] = 'Rym&auml; talletettu';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Salasana';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Liian pitk&auml; salasana';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Salasana liian lyhyt';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Et kirjoittanut tiedoston tarkennetta';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Et antanut nime&auml;';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Kansion poistamienen ei onnistu';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Tiedostoa ei voi poistaa';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Ei voinut uudelleen nimet&auml;';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Halutko poistaa tiedoston/kansion?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Kansio poistettu';
+$MESSAGE['MEDIA_DELETED_FILE'] = ' Tiedosto pistettu';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Kansion nimi varattu';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Merkki ../ ei kelpaa ';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Saman niminen kansio olemassa';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Kansio luotu';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Kansiota ei voi luoda';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Saman niminen tiedosto olemassa';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Tiedostoa ei l&ouml;ydy';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Merkki&auml; ../ ei voi k&auml;ytt&auml;&auml;';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nimi index.php ei kelpaa';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Tiedostokansio tyhj&auml;';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Udelleen nimetty';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' tiedosto ladattu';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Merkki&auml; ../ ei voi k&auml;ytt&auml;&auml; ';
+$MESSAGE['MEDIA_UPLOADED'] = ' tiedostot ladattu';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Rajoitus voimassa, yrit&auml; tunnin kuluttua uudelleen';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'T&auml;yt&auml; kent&auml;t';
+$MESSAGE['PAGES_ADDED'] = 'Sivu lis&auml;tty';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Otsikko lis&auml;tty';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Kirjoita valikkon tule teksti';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Kirjoita sivun nimi';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'K&auml;ytt&ouml;oiketesi eiv&auml;t riit&auml;';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Oikeutesi eiv&auml;t riit&auml;';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Sivujen j&auml;rjestely ei onnistu';
+$MESSAGE['PAGES_DELETED'] = 'Sivu poistettu';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Poistetaanko sivu ja sen alisivut?';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Oikeutesi eiv&auml;t riit&auml;';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Muuta esisivua';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Ei voi kirjoittaa /pages/intro.php (oikeutesi eiv&auml;t riit&auml;)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Esisivu tallennettu';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'P&auml;ivitt&auml;nyt';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Sivua ei l&ouml;ydy';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Tannennusvirhe!';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Otsikko k&auml;yt&ouml;ss&auml;';
+$MESSAGE['PAGES_REORDERED'] = 'Sivut j&auml;rjestelty uudelleen';
+$MESSAGE['PAGES_RESTORED'] = 'Sivusto tallennettu';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Palaa sivuille...';
+$MESSAGE['PAGES_SAVED'] = 'Sivu tallennettu';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Sivun asetukset tallennettu';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Asetukset tallennettu';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Nykyinen salasana v&auml;&auml;r&auml;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Tiedot tallennettu';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'S&auml;hp&ouml;stiosoite p&auml;ivitetty';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Salasanan vaiho onnistui';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Klikattaessa h&auml;vi&auml;v&auml;t kaikki tallettamattomat muutokset';
+$MESSAGE['SETTINGS_SAVED'] = 'Asetusten talletus onnitui';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Konfigurointitiedostoa ei voi vavata';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Konfiguraation kirjoitus ei onnistu';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Susitellaan ainoastaan testitarkoituksiin';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Anna s&auml;hk&ouml;postiosoite';
+$MESSAGE['START_CURRENT_USER'] = 'Olet kirjautunut nimell&auml;:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Poista asennuskansio!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Tervetuloa sivuston hallintaan';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Sivupohjan voi vaihtaa asetukset-kohdasta';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Lis&auml;tty';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Jos haluat vaihtaa salasanan, t&auml;yt&auml; vain ko kent&auml;t';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Haluatko poistaa k&auml;ytt&auml;j&auml;n?';
+$MESSAGE['USERS_DELETED'] = 'Poistettu';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'S&auml;hk&ouml;postiosoite k&auml;yt&ouml;ss&auml;!';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Virheellinen s&auml;hk&ouml;postiosoite';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Valitse ryhm&auml;!';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Salasanat eiv&auml;t t&auml;sm&auml;&auml;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Salasana liian lyhyt';
+$MESSAGE['USERS_SAVED'] = 'Talletettu';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'k&auml;ytt&auml;j&auml;ryhm&auml;t...';
+$OVERVIEW['HELP'] = 'Kysymykset, vastaukset...';
+$OVERVIEW['LANGUAGES'] = 'Muuta kieli...';
+$OVERVIEW['MEDIA'] = 'Tiedostojen hallinta...';
+$OVERVIEW['MODULES'] = 'Moduulien hallinta...';
+$OVERVIEW['PAGES'] = 'Sivujen hallinta...';
+$OVERVIEW['PREFERENCES'] = 'S&auml;hk&ouml;postiosoite, salsana... ';
+$OVERVIEW['SETTINGS'] = 'WebsiteBakerin asetukset...';
+$OVERVIEW['START'] = 'P&auml;&auml;k&auml;ytt&auml;j&auml;tila';
+$OVERVIEW['TEMPLATES'] = 'Muuta sivupohjaa...';
+$OVERVIEW['USERS'] = 'K&auml;ytt&auml;j&auml;hallinta...';
+$OVERVIEW['VIEW'] = 'Tarkastele sivuja...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/FI.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/FR.php
===================================================================
--- trunk/languages/FR.php	(nonexistent)
+++ trunk/languages/FR.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'FR';
+$language_name = 'Français';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Marin Susac';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Acc&egrave;s';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Extensions';
+$MENU['ADMINTOOLS'] = 'Outils d&apos;administration';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Retrouver vos identifiants de connexion';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Groupes';
+$MENU['HELP'] = 'Aide';
+$MENU['LANGUAGES'] = 'Langues';
+$MENU['LOGIN'] = 'Connexion';
+$MENU['LOGOUT'] = 'D&eacute;connexion';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Modules';
+$MENU['PAGES'] = 'Contenu';
+$MENU['PREFERENCES'] = 'Pr&eacute;f&eacute;rences';
+$MENU['SETTINGS'] = 'R&eacute;glages';
+$MENU['START'] = 'Accueil';
+$MENU['TEMPLATES'] = 'Th&egrave;mes';
+$MENU['USERS'] = 'Utilisateurs';
+$MENU['VIEW'] = 'Voir le site';
+$TEXT['ACCOUNT_SIGNUP'] = 'Cr&eacute;er un compte';
+$TEXT['ACTIONS'] = 'Actions';
+$TEXT['ACTIVE'] = 'Actif';
+$TEXT['ADD'] = 'Ajouter';
+$TEXT['ADDON'] = 'Extension';
+$TEXT['ADD_SECTION'] = 'Ajouter une rubrique';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administration';
+$TEXT['ADMINISTRATION_TOOL'] = 'Outils d&apos;administration';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administrateurs';
+$TEXT['ADVANCED'] = 'Avanc&eacute;';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Visiteurs autoris&eacute;s';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Autoriser la s&eacute;lection multiple';
+$TEXT['ALL_WORDS'] = 'Tous les mots';
+$TEXT['ANCHOR'] = 'Ancre';
+$TEXT['ANONYMOUS'] = 'Anonyme';
+$TEXT['ANY_WORDS'] = 'Chaque mot';
+$TEXT['APP_NAME'] = 'Nom de l&apos;application';
+$TEXT['ARE_YOU_SURE'] = 'Etes-vous s&ucirc;r ?';
+$TEXT['AUTHOR'] = 'Auteur';
+$TEXT['BACK'] = 'Retour';
+$TEXT['BACKUP'] = 'Sauvegarde';
+$TEXT['BACKUP_ALL_TABLES'] = 'Sauvegarder toutes les tables de la base de donn&eacute;es';
+$TEXT['BACKUP_DATABASE'] = 'Sauvegarde de la base de donn&eacute;es';
+$TEXT['BACKUP_MEDIA'] = 'Sauvegarde des fichiers media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Sauvegarder uniquement les tables li&eacute;es &agrave; WebsiteBaker';
+$TEXT['BASIC'] = 'Classique';
+$TEXT['BLOCK'] = 'Bloc';
+$TEXT['CALENDAR'] = 'Calendrier';
+$TEXT['CANCEL'] = 'Annuler';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Ne peut pas se supprimer lui-m&ecirc;me';
+$TEXT['CAPTCHA_VERIFICATION'] = 'V&eacute;rification par captcha ';
+$TEXT['CAP_EDIT_CSS'] = 'Editer la feuille CSS';
+$TEXT['CHANGE'] = 'Changer';
+$TEXT['CHANGES'] = 'Modifications';
+$TEXT['CHANGE_SETTINGS'] = 'Modifier les r&eacute;glages';
+$TEXT['CHARSET'] = 'Encodage';
+$TEXT['CHECKBOX_GROUP'] = 'Groupe de checkbox';
+$TEXT['CLOSE'] = 'Fermer';
+$TEXT['CODE'] = 'Code';
+$TEXT['CODE_SNIPPET'] = 'Extrait de code';
+$TEXT['COLLAPSE'] = 'Contracter';
+$TEXT['COMMENT'] = 'Commentaire';
+$TEXT['COMMENTING'] = 'Commentaire en cours';
+$TEXT['COMMENTS'] = 'Commentaires';
+$TEXT['CREATE_FOLDER'] = 'Cr&eacute;er un dossier';
+$TEXT['CURRENT'] = 'Courant';
+$TEXT['CURRENT_FOLDER'] = 'Dossier courant';
+$TEXT['CURRENT_PAGE'] = 'Page courante';
+$TEXT['CURRENT_PASSWORD'] = 'Mot de passe actuel';
+$TEXT['CUSTOM'] = 'Adapter';
+$TEXT['DATABASE'] = 'Base de donn&eacute;es';
+$TEXT['DATE'] = 'Date';
+$TEXT['DATE_FORMAT'] = 'Format de la date';
+$TEXT['DEFAULT'] = 'D&eacute;faut';
+$TEXT['DEFAULT_CHARSET'] = 'Encodage par d&eacute;faut';
+$TEXT['DEFAULT_TEXT'] = 'Texte par d&eacute;faut';
+$TEXT['DELETE'] = 'Supprimer';
+$TEXT['DELETED'] = 'Supprim&eacute;';
+$TEXT['DELETE_DATE'] = 'Date de suppression';
+$TEXT['DELETE_ZIP'] = 'Effacer l&apos;archive zip apr&egrave;s d&eacute;compression';
+$TEXT['DESCRIPTION'] = 'Description';
+$TEXT['DESIGNED_FOR'] = 'Cr&eacute;&eacute; par';
+$TEXT['DIRECTORIES'] = 'R&eacute;pertoires';
+$TEXT['DIRECTORY_MODE'] = 'Propri&eacute;t&eacute;s des r&eacute;pertoires';
+$TEXT['DISABLED'] = 'D&eacute;sactiv&eacute;';
+$TEXT['DISPLAY_NAME'] = 'Afficher le nom';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Adresse email';
+$TEXT['EMPTY_TRASH'] = 'Vider la corbeille';
+$TEXT['ENABLED'] = 'Activ&eacute;';
+$TEXT['END'] = 'Fin';
+$TEXT['ERROR'] = 'Erreur';
+$TEXT['EXACT_MATCH'] = 'Terme exact';
+$TEXT['EXECUTE'] = 'Executer';
+$TEXT['EXPAND'] = 'D&eacute;ployer';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Champ';
+$TEXT['FILE'] = 'Fichier';
+$TEXT['FILES'] = 'Fichiers';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Permissions des fichiers syst&egrave;me';
+$TEXT['FILE_MODE'] = 'Propri&eacute;t&eacute;s des fichiers';
+$TEXT['FINISH_PUBLISHING'] = 'Fin de publication';
+$TEXT['FOLDER'] = 'Dossier';
+$TEXT['FOLDERS'] = 'Dossiers';
+$TEXT['FOOTER'] = 'Pied de page';
+$TEXT['FORGOTTEN_DETAILS'] = 'Identifiants oubli&eacute;s ?';
+$TEXT['FORGOT_DETAILS'] = 'Identifiants oubli&eacute;s ?';
+$TEXT['FROM'] = 'de';
+$TEXT['FRONTEND'] = 'Page d&apos;accueil';
+$TEXT['FULL_NAME'] = 'Nom complet';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Groupe';
+$TEXT['HEADER'] = 'Ent&ecirc;te';
+$TEXT['HEADING'] = 'Haut de page';
+$TEXT['HEADING_CSS_FILE'] = 'Feuille css actuelle : ';
+$TEXT['HEIGHT'] = 'Hauteur';
+$TEXT['HIDDEN'] = 'Cach&eacute;';
+$TEXT['HIDE'] = 'Cacher';
+$TEXT['HIDE_ADVANCED'] = 'Cacher les options avanc&eacute;es';
+$TEXT['HOME'] = 'Accueil';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirection de la page d&apos;accueil';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'H&ocirc;te';
+$TEXT['ICON'] = 'Ic&ocirc;ne';
+$TEXT['IMAGE'] = 'Image';
+$TEXT['INLINE'] = 'En ligne';
+$TEXT['INSTALL'] = 'Installer';
+$TEXT['INSTALLATION'] = 'Installation';
+$TEXT['INSTALLATION_PATH'] = 'Chemin d&apos;installation';
+$TEXT['INSTALLATION_URL'] = 'Adresse d&apos;installation (URL)';
+$TEXT['INSTALLED'] = 'install&eacute;';
+$TEXT['INTRO'] = 'Introduction';
+$TEXT['INTRO_PAGE'] = 'Page d&apos;introduction';
+$TEXT['INVALID_SIGNS'] = 'doit d&eacute;buter par une lettre ou comporte des caract&egrave;res invalides';
+$TEXT['KEYWORDS'] = 'Mots cl&eacute;s';
+$TEXT['LANGUAGE'] = 'Langue';
+$TEXT['LAST_UPDATED_BY'] = 'Mis &agrave; jour par';
+$TEXT['LENGTH'] = 'Longueur';
+$TEXT['LEVEL'] = 'Niveau';
+$TEXT['LINK'] = 'Lien';
+$TEXT['LINUX_UNIX_BASED'] = 'Bas&eacute; sur linux/unix';
+$TEXT['LIST_OPTIONS'] = 'Liste des options';
+$TEXT['LOGGED_IN'] = 'Connect&eacute;';
+$TEXT['LOGIN'] = 'Connexion';
+$TEXT['LONG'] = 'Long';
+$TEXT['LONG_TEXT'] = 'Texte long';
+$TEXT['LOOP'] = 'Boucle';
+$TEXT['MAIN'] = 'Principal';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'G&eacute;rer';
+$TEXT['MANAGE_GROUPS'] = 'Gestion des groupes';
+$TEXT['MANAGE_USERS'] = 'Gestion des utilisateurs';
+$TEXT['MATCH'] = 'correspond';
+$TEXT['MATCHING'] = 'Correspondance';
+$TEXT['MAX_EXCERPT'] = 'Nombre maximum de ligne &agrave; retourner';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maximum de soumissions par heure';
+$TEXT['MEDIA_DIRECTORY'] = 'R&eacute;pertoire des fichiers media';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Titre du menu';
+$TEXT['MESSAGE'] = 'Message';
+$TEXT['MODIFY'] = 'Modifier';
+$TEXT['MODIFY_CONTENT'] = 'Modifier le contenu';
+$TEXT['MODIFY_SETTINGS'] = 'Modifier les r&eacute;glages';
+$TEXT['MODULE_ORDER'] = 'Ordre de recherche dans les modules';
+$TEXT['MODULE_PERMISSIONS'] = 'Permissions sur les modules';
+$TEXT['MORE'] = 'Plus';
+$TEXT['MOVE_DOWN'] = 'Au dessous';
+$TEXT['MOVE_UP'] = 'Au dessus';
+$TEXT['MULTIPLE_MENUS'] = 'Menus multiples';
+$TEXT['MULTISELECT'] = 'Multi-s&eacute;lection';
+$TEXT['NAME'] = 'Nom';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'veuillez confirmer votre mot de passe';
+$TEXT['NEED_TO_LOGIN'] = 'Identification obligatoire';
+$TEXT['NEW_PASSWORD'] = 'Nouveau mot de passe';
+$TEXT['NEW_WINDOW'] = 'Nouvelle fen&ecirc;tre';
+$TEXT['NEXT'] = 'Suivant';
+$TEXT['NEXT_PAGE'] = 'Page suivante';
+$TEXT['NO'] = 'Non';
+$TEXT['NONE'] = 'Aucun';
+$TEXT['NONE_FOUND'] = 'Aucune occurence trouv&eacute;e';
+$TEXT['NOT_FOUND'] = 'Non trouv&eacute;';
+$TEXT['NOT_INSTALLED'] = 'non install&eacute;';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Aucun r&eacute;sultat';
+$TEXT['OF'] = 'De';
+$TEXT['ON'] = 'Sur';
+$TEXT['OPEN'] = 'Ouvert';
+$TEXT['OPTION'] = 'Option';
+$TEXT['OTHERS'] = 'Autres';
+$TEXT['OUT_OF'] = 'Hors de';
+$TEXT['OVERWRITE_EXISTING'] = 'Ecraser les donn&eacute;es (si d&eacute;j&agrave; existantes)';
+$TEXT['PAGE'] = 'Page';
+$TEXT['PAGES_DIRECTORY'] = 'R&eacute;pertoire des pages';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Extension des pages';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Langues des pages';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limite de niveau de page';
+$TEXT['PAGE_SPACER'] = 'Espacement de page';
+$TEXT['PAGE_TITLE'] = 'Titre de la page';
+$TEXT['PAGE_TRASH'] = 'Corbeille pour les pages supprim&eacute;es';
+$TEXT['PARENT'] = 'Parent';
+$TEXT['PASSWORD'] = 'Mot de passe';
+$TEXT['PATH'] = 'Chemin';
+$TEXT['PHP_ERROR_LEVEL'] = 'Niveau d&apos;erreur PHP';
+$TEXT['PLEASE_LOGIN'] = 'Merci de vous identifier';
+$TEXT['PLEASE_SELECT'] = 'S&eacute;lectionnez';
+$TEXT['POST'] = 'Actualit&eacute;';
+$TEXT['POSTS_PER_PAGE'] = 'Nombre d&apos;actualit&eacute; par page';
+$TEXT['POST_FOOTER'] = 'Pied de page de l&apos;actualit&eacute;';
+$TEXT['POST_HEADER'] = 'Ent&ecirc;te de l&apos;actualit&eacute;';
+$TEXT['PREVIOUS'] = 'Pr&eacute;c&eacute;dent';
+$TEXT['PREVIOUS_PAGE'] = 'Page pr&eacute;c&eacute;dente';
+$TEXT['PRIVATE'] = 'Priv&eacute;e';
+$TEXT['PRIVATE_VIEWERS'] = 'Utilisateurs priv&eacute;s';
+$TEXT['PROFILES_EDIT'] = 'Modifier le profil';
+$TEXT['PUBLIC'] = 'Publique';
+$TEXT['PUBL_END_DATE'] = 'Date de fin';
+$TEXT['PUBL_START_DATE'] = 'Date de d&eacute;but';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Groupe de boutons radio';
+$TEXT['READ'] = 'Lire';
+$TEXT['READ_MORE'] = 'En savoir plus';
+$TEXT['REDIRECT_AFTER'] = 'Redirection apr&egrave;s coup';
+$TEXT['REGISTERED'] = 'Enregistr&eacute;';
+$TEXT['REGISTERED_VIEWERS'] = 'Utilisateurs enregistr&eacute;s';
+$TEXT['RELOAD'] = 'Actualiser';
+$TEXT['REMEMBER_ME'] = 'Se souvenir de moi';
+$TEXT['RENAME'] = 'Renommer';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Obligatoire';
+$TEXT['REQUIREMENT'] = 'Param&egrave;tres requis';
+$TEXT['RESET'] = 'R&eacute;initialiser';
+$TEXT['RESIZE'] = 'Redimensionner';
+$TEXT['RESIZE_IMAGE_TO'] = 'Redimensionner l&apos;image';
+$TEXT['RESTORE'] = 'Restaurer';
+$TEXT['RESTORE_DATABASE'] = 'Restauration de la base de donn&eacute;es';
+$TEXT['RESTORE_MEDIA'] = 'Restauration des fichiers media';
+$TEXT['RESULTS'] = 'R&eacute;sultats';
+$TEXT['RESULTS_FOOTER'] = 'Pied de page du mod&egrave;le de recherche';
+$TEXT['RESULTS_FOR'] = 'R&eacute;sultats';
+$TEXT['RESULTS_HEADER'] = 'Ent&ecirc;te du mod&egrave;le de recherche';
+$TEXT['RESULTS_LOOP'] = 'Mod&egrave;le d&apos;affichage de la boucle de recherche';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Saisissez &agrave; nouveau votre nouveau mot de passe';
+$TEXT['RETYPE_PASSWORD'] = 'Saisissez &agrave; nouveau votre mot de passe';
+$TEXT['SAME_WINDOW'] = 'Fen&ecirc;tre actuelle (this frame)';
+$TEXT['SAVE'] = 'Sauvegarder';
+$TEXT['SEARCH'] = 'Rechercher';
+$TEXT['SEARCHING'] = 'Rechercher';
+$TEXT['SECTION'] = 'Rubrique';
+$TEXT['SECTION_BLOCKS'] = 'Bloc de rubrique';
+$TEXT['SEC_ANCHOR'] = 'Section d&apos;ancre';
+$TEXT['SELECT_BOX'] = 'S&eacute;lection des bo&icirc;tes';
+$TEXT['SEND_DETAILS'] = 'Valider';
+$TEXT['SEPARATE'] = 'S&eacute;parer';
+$TEXT['SEPERATOR'] = 'S&eacute;parateur';
+$TEXT['SERVER_EMAIL'] = 'Serveur de mail';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Syst&egrave;me d&apos;exploitation du serveur';
+$TEXT['SESSION_IDENTIFIER'] = 'Identifiant de session';
+$TEXT['SETTINGS'] = 'R&eacute;glages';
+$TEXT['SHORT'] = 'Court';
+$TEXT['SHORT_TEXT'] = 'Texte court';
+$TEXT['SHOW'] = 'Montrer';
+$TEXT['SHOW_ADVANCED'] = 'Afficher les options avanc&eacute;es';
+$TEXT['SIGNUP'] = 'Cr&eacute;er un compte';
+$TEXT['SIZE'] = 'Taille';
+$TEXT['SMART_LOGIN'] = 'Identification rapide';
+$TEXT['START'] = 'D&eacute;but';
+$TEXT['START_PUBLISHING'] = 'D&eacute;but de publication';
+$TEXT['SUBJECT'] = 'Sujet';
+$TEXT['SUBMISSIONS'] = 'Soumissions';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Enregistrement des soumissions dans la base de donn&eacute;es';
+$TEXT['SUBMISSION_ID'] = 'Identifiant';
+$TEXT['SUBMITTED'] = 'Envoy&eacute;';
+$TEXT['SUCCESS'] = 'Op&eacute;ration r&eacute;ussie';
+$TEXT['SYSTEM_DEFAULT'] = 'Syst&egrave;me par d&eacute;faut';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Permissions syst&egrave;me';
+$TEXT['TABLE_PREFIX'] = 'Pr&eacute;fixe du nom des tables';
+$TEXT['TARGET'] = 'Cible';
+$TEXT['TARGET_FOLDER'] = 'Dossier de destination';
+$TEXT['TEMPLATE'] = 'Th&egrave;me';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Permissions sur les th&egrave;mes';
+$TEXT['TEXT'] = 'Texte';
+$TEXT['TEXTAREA'] = 'Zone de texte';
+$TEXT['TEXTFIELD'] = 'Champ de texte';
+$TEXT['THEME'] = 'Th&egrave;me graphique de l&apos;interface d&apos;administration';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Heure';
+$TEXT['TIMEZONE'] = 'Fuseau horaire';
+$TEXT['TIME_FORMAT'] = 'Format de l&apos;heure';
+$TEXT['TIME_LIMIT'] = 'D&eacute;lai maximal de recherche par module';
+$TEXT['TITLE'] = 'Titre';
+$TEXT['TO'] = 'vers';
+$TEXT['TOP_FRAME'] = 'Fen&ecirc;tre actuelle compl&egrave;te (top frame)';
+$TEXT['TRASH_EMPTIED'] = 'Corbeille vid&eacute;e';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Editer les styles CSS dans la zone de texte ci-dessous.';
+$TEXT['TYPE'] = 'Type';
+$TEXT['UNDER_CONSTRUCTION'] = 'En construction';
+$TEXT['UNINSTALL'] = 'D&eacute;sinstaller';
+$TEXT['UNKNOWN'] = 'Inconnu';
+$TEXT['UNLIMITED'] = 'Illimit&eacute;';
+$TEXT['UNZIP_FILE'] = 'Uploader et d&eacute;compresser l&apos;archive zip';
+$TEXT['UP'] = 'Haut';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Uploader un/des fichier(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Utilisateur';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'V&eacute;rification';
+$TEXT['VERSION'] = 'Version';
+$TEXT['VIEW'] = 'Aper&ccedil;u';
+$TEXT['VIEW_DELETED_PAGES'] = 'Voir les pages supprim&eacute;es';
+$TEXT['VIEW_DETAILS'] = 'Propri&eacute;t&eacute;s';
+$TEXT['VISIBILITY'] = 'Visibilit&eacute;';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Adresse d&apos;exp&eacute;diteur par d&eacute;faut';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Nom d&apos;exp&eacute;diteur par d&eacute;faut';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Merci d&apos;indiquer un nom et une adresse d&apos;exp&eacute;diteur par d&eacute;faut. Il est recommand&eacute; d&apos;utiliser une adresse d&apos;exp&eacute;diteur de la forme : <strong>admin@yourdomain.com</strong>. Certains op&eacute;rateurs de mail (comme <em>mail.com</em>) peuvent rejeter les mails dont l&apos;adresse d&apos;exp&eacute;diteur est de la forme <em>name@mail.com</em> envoy&eacute;s via un relai, c&apos;est leur mani&egrave;re de lutter contre le spam.<br /><br />Les valeurs par d&eacute;faut sont uniquement utilis&eacute;es si aucune autre valeur n&apos;est sp&eacute;cifi&eacute;e par WebsiteBaker. Si votre serveur supporte <acronym title="Simple mail transfer protocol">SMTP</acronym>, vous pouvez utiliser cette option pour l&apos;envoi d&apos;emails.';
+$TEXT['WBMAILER_FUNCTION'] = 'M&eacute;canisme d&apos;envoi de mail';
+$TEXT['WBMAILER_NOTICE'] = '<strong>Param&egrave;tres du serveur SMTP :</strong><br />Les param&egrave;tres ci-dessous sont uniquement requis si vous souhaitez envoyer des mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. Si vous ne connaissez pas votre serveur SMTP ou si vous n&apos;&ecirc;tes pas s&ucirc;r de la valeur des param&egrave;tres requis, conservez simplement le m&eacute;canisme par d&eacute;faut : PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'Authentification SMTP';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'n&apos;utilisez l&apos;authentification que si votre seveur SMTP ne l&apos;exige';
+$TEXT['WBMAILER_SMTP_HOST'] = 'H&ocirc;te SMTP';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'mot de passe SMTP';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Site internet';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Description du site';
+$TEXT['WEBSITE_FOOTER'] = 'Pied de page du site';
+$TEXT['WEBSITE_HEADER'] = 'Ent&ecirc;te du site';
+$TEXT['WEBSITE_KEYWORDS'] = 'Mots cl&eacute;s du site';
+$TEXT['WEBSITE_TITLE'] = 'Titre du site';
+$TEXT['WELCOME_BACK'] = 'Bienvenue';
+$TEXT['WIDTH'] = 'Largeur';
+$TEXT['WINDOW'] = 'Fen&ecirc;tre';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Permissions d&apos;&eacute;criture sur fichier';
+$TEXT['WRITE'] = 'Ecrire';
+$TEXT['WYSIWYG_EDITOR'] = 'Editeur WYSIWYG';
+$TEXT['WYSIWYG_STYLE'] = 'Style WYSIWYG';
+$TEXT['YES'] = 'Oui';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Les param&egrave;tres requis de l&apos;extension ne sont pas v&eacute;rifi&eacute;s';
+$HEADING['ADD_CHILD_PAGE'] = 'Ajouter une sous-page';
+$HEADING['ADD_GROUP'] = 'Ajouter un groupe';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Ajouter un ent&ecirc;te';
+$HEADING['ADD_PAGE'] = 'Ajouter une page';
+$HEADING['ADD_USER'] = 'Ajouter un utilisateur';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Outils d&apos;administration';
+$HEADING['BROWSE_MEDIA'] = 'Parcourir le dossier media';
+$HEADING['CREATE_FOLDER'] = 'Cr&eacute;er un dossier';
+$HEADING['DEFAULT_SETTINGS'] = 'R&eacute;glages par d&eacute;faut';
+$HEADING['DELETED_PAGES'] = 'Pages effac&eacute;es';
+$HEADING['FILESYSTEM_SETTINGS'] = 'R&eacute;glages des fichiers syst&egrave;mes';
+$HEADING['GENERAL_SETTINGS'] = 'R&eacute;glages';
+$HEADING['INSTALL_LANGUAGE'] = 'Installer une langue';
+$HEADING['INSTALL_MODULE'] = 'Installer un module';
+$HEADING['INSTALL_TEMPLATE'] = 'Installer un th&egrave;me';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Ex&eacute;cuter manuellement les fichiers module';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Propri&eacute;t&eacute;s de la langue';
+$HEADING['MANAGE_SECTIONS'] = 'Gestion des rubriques';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modifier les propri&eacute;t&eacute;s avanc&eacute;es de la page';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modifier/Supprimer un groupe';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modifier/Supprimer une page';
+$HEADING['MODIFY_DELETE_USER'] = 'Modifier/Supprimer un utilisateur';
+$HEADING['MODIFY_GROUP'] = 'Modifier un groupe';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modifier la page d&apos;accueil';
+$HEADING['MODIFY_PAGE'] = 'Modifier une page';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modifier les propri&eacute;t&eacute;s de la page';
+$HEADING['MODIFY_USER'] = 'Modifier un utilisateur';
+$HEADING['MODULE_DETAILS'] = 'Propri&eacute;t&eacute;s du module';
+$HEADING['MY_EMAIL'] = 'Mon email';
+$HEADING['MY_PASSWORD'] = 'Mon mot de passe';
+$HEADING['MY_SETTINGS'] = 'Mes pr&eacute;f&eacute;rences';
+$HEADING['SEARCH_SETTINGS'] = 'R&eacute;glages de la recherche';
+$HEADING['SERVER_SETTINGS'] = 'R&eacute;glages du serveur';
+$HEADING['TEMPLATE_DETAILS'] = 'Propri&eacute;t&eacute;s du th&egrave;me';
+$HEADING['UNINSTALL_LANGUAGE'] = 'D&eacute;sinstaller une langue';
+$HEADING['UNINSTALL_MODULE'] = 'D&eacute;sinstaller un module';
+$HEADING['UNINSTALL_TEMPLATE'] = 'D&eacute;sinstaller un th&egrave;me';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Uploader des fichiers';
+$HEADING['WBMAILER_SETTINGS'] = 'R&eacute;glages de l&apos;envoi de mail';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Droits insuffisants pour &ecirc;tre ici';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'D&eacute;sol&eacute;, vous ne pouvez pas modifier votre mot de passe plus d&apos;une fois par heure';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Impossible de vous renvoyer vos identifiants, merci de contacter l&apos;administrateur du site';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'L&apos;adresse email que vous avez saisi est introuvable dans la base de donn&eacute;es';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Merci de saisir votre adresse email';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'D&eacute;sol&eacute;, aucun contenu actif &agrave; afficher';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'D&eacute;sol&eacute;, vous n&apos;avez pas les droits pour visualiser cette page';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'D&eacute;j&agrave; install&eacute;';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Impossible d&apos;&eacute;crire dans le r&eacute;pertoire cible';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Impossible de d&eacute;sinstaller';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'D&eacute;sinstallation impossible : fichier en cours d&apos;utilisation';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> ne peut pas &ecirc;tre d&eacute;sinstall&eacute; car il est actuellement en cours d&apos;utilisation dans les pages {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'cette page;ces pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Impossible de d&eacute;sinstaller le mod&egrave;le <b>{{name}}</b> parce que c\'est le mod&egrave;le par d&eacute;faut !';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Impossible de d&eacute;zipper le fichier';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Impossible d&apos;uploader le fichier';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Erreur lors de l&apos;ouverture du fichier';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Les fichiers charg&eacute;s doivent avoir les extensions suivantes : ';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Les fichiers charg&eacute;s doivent &ecirc;tre aux formats suivants : ';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Merci de remplir tous les champs';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installation r&eacute;ussie';
+$MESSAGE['GENERIC_INVALID'] = 'Le fichier charg&eacute; est invalide';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Fichier d&apos;extension incorrect. V&eacute;rifiez le fichier zip .';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Fichier de langue incorrect. V&eacute;rifiez le fichier de langue.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Non install&eacte;';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Merci de patienter';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Merci de revenir plus tard';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Violation de s&eacute;curit&eacute;!! l&apos;enregistrement des donn&eacute;es a &eacute;t&eacute; refus&eacute;!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'D&eacute;sinstallation r&eacute;ussie';
+$MESSAGE['GENERIC_UPGRADED'] = 'Mise &agrave; jour r&eacute;ussie';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Site en construction';
+$MESSAGE['GROUPS_ADDED'] = 'Groupe ajout&eacute; avec succ&egrave;s';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Etes-vous s&ucirc;r de vouloir supprimer ce groupe (ainsi que tous les utilisateurs de ce groupe) ?';
+$MESSAGE['GROUPS_DELETED'] = 'Groupe supprim&eacute; avec succ&egrave;s';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Le nom du groupe est vide';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Le nom du groupe est d&eacute;ja existant';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Groupe introuvable';
+$MESSAGE['GROUPS_SAVED'] = 'Groupe sauvegard&eacute; avec succ&egrave;s';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Merci de saisir votre mot de passe';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Votre mot de passe est trop long';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Votre mot de passe est trop court';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Vous n&apos;avez pas entr&eacute; d&apos;extension';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Vous n&apos;avezpas entr&eacute; de nouveau nom';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Impossible de supprimer le dossier s&eacute;lctionn&eacute;';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Impossible de supprimer le fichier s&eacute;lectionn&eacute;';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Impossible de renommer';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Etes-vous s&ucirc;r de vouloir supprimer ce fichier/dossier ?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Dossier supprim&eacute; avec succ&egrave;s';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Fichier supprim&eacute; avec succ&egrave;s';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Le r&eacute;pertoire n&apos;existe pas';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Impossible d&apos;inclure ../ dans le nom du dossier';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Un dossier portant ce nom est d&eacute;j&agrave; existant';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Dossier cr&eacute;&eacute; avec succ&egrave;s';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Impossible de cr&eacute;er le dossier';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Un fichier portant ce nom est d&eacute;j&agrave; existant';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Fichier introuvable';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Impossible d&apos;inclure ../ dans le nom';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Vous ne pouvez pas utiliser index.php comme nom';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Aucun media trouv&eacute; dans ce dossier';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Renommage r&eacute;ussi avec succ&egrave;s';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = 'Le fichier a &eacute;t&eacute; upload&eacute; avec succ&egrave;s';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Impossible d&apos;avoir ../ dans le nom du dossier cible';
+$MESSAGE['MEDIA_UPLOADED'] = 'Les fichiers ont &eacute;t&eacute; upload&eacute;s avec succ&egrave;s';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'D&eacute;sol&eacute; mais ce formulaire est utilis&eacute; trop fr&eacute;quemment en ce moment. Afin de nous aider &agrave; lutter contre le spam, merci de r&eacute;essayer plus tard';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Le num&eacute;ro de v&eacute;rification (Captcha) que vous avez entr&eacute; est incorrect. Si vous rencontrez des probl&egrave;mes quant &agrave; la lecture de ce num&eacute;ro, merci d&apos;envoyer un email &agrave; : <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Vous devez renseigner les champs suivants';
+$MESSAGE['PAGES_ADDED'] = 'Page ajout&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'L&apos;ent&ecirc;te de la page a &eacute;t&eacute; ajout&eacute; avec succ&egrave;s';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Entrez un titre de menu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Entrez un titre de page';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Erreur lors de la cr&eacute;ation d&apos;un fichier dans le r&eacute;pertoire des pages (privil&egrave;ges insuffisants)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Erreur lors de la suppression d&apos;un fichier dans le r&eacute;pertoire des pages (privil&egrave;ges insuffisants)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Erreur lors du r&eacute;agencement des pages';
+$MESSAGE['PAGES_DELETED'] = 'Page supprim&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Etes-vous s&ucirc;r de vouloir supprimer la page s&eacute;lectionn&eacute;e (ainsi que ses sous-rubriques)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Vous n&apos;avez pas les droits pour modifier cette pages';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Cliquez ici pour modifier la page d&apos;introduction';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Impossible d&apos;&eacute;crire dans la page d&apos;introduction (privil&egrave;ges insuffisants)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Page d&apos;introduction sauvegard&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Mis &agrave; jour par';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Page introuvable';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Erreur lors de la sauvegarde de la page';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Une page avec le m&ecirc;me nom existe d&eacute;j&agrave;';
+$MESSAGE['PAGES_REORDERED'] = 'Page r&eacute;ordonn&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_RESTORED'] = 'Page restaur&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Retour au contenu';
+$MESSAGE['PAGES_SAVED'] = 'Page sauvegard&eacute;e avec succ&egrave;s';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Param&egrave;tres de la page sauvegard&eacute;s avec succ&egrave;s';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Les propri&eacute;t&eacute;s de la rubrique ont &eacute;t&eacute; sauvegard&eacute;es avec succ&egrave;s';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Le mot de passe entr&eacute; est incorrect';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Donn&eacute;es sauvegard&eacute;es avec succ&egrave;s';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Adresse email sauvegard&eacute;e avec succ&egrave;s';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Caract&egrave;res invalides utilis&eacute;s dans le mot de passe';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Mot de passe modifi&eacute; avec succ&egrave;s';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'La mise &agrave; jour de l&apos;enregistrement a &eacute;chou&eacute;.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'L&apos;enregistrement a &eacute;t&eacute; mis &agrave; jour avec succ&egrave;s.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'L&apos;ajout d&apos;un nouvel enregistrement a &eacute;chou&eacute;.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'Nouvel enregistrement ajout&eacute; avec succ&egrave;s.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Attention : en cliquant sur ce bouton, vous ne sauvegardez pas vos modifications';
+$MESSAGE['SETTINGS_SAVED'] = 'R&eacute;glages sauvegard&eacute;s avec succ&egrave;s';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Impossible de lire le fichier de configuration';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Impossible d&apos;&eacute;crire dans le fichier de configuration';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Recommand&eacute; uniquement pour les environnement de test';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+Enregistrement d&apos;un nouvel utilisateur.
+
+Loginname: {LOGIN_NAME}
+Code utilisateur: {LOGIN_ID}
+Adresse email: {LOGIN_EMAIL}
+Adresse IP: {LOGIN_IP}
+Date d&apos;enregistrement: {SIGNUP_DATE}
+----------------------------------------
+Ce message &agrave; &eacute;t&eacute; g&eacute;n&eacute;r&eacute; automatiquement!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Bonjour {LOGIN_DISPLAY_NAME},
+
+Vous avez re&ccedil;u ce message car vous avez utilis&eacute; la fonction \'Retrouver vos identifiants de connexion\' depuis votre compte.
+
+Voici vos nouveaux param&egrave;tres de connexion pour \'{LOGIN_WEBSITE_TITLE}\':
+
+Loginname: {LOGIN_NAME}
+Mot de Passe: {LOGIN_PASSWORD}
+
+Nous vous avons attribu&eacute; le mot de passe ci-dessus.
+Cela signifie que vous ne pouvez plus vous servir de votre ancien mot de passe!
+Si vous avez des probl&egrave;mes ou des questions concernant vos nouveaux param&egrave;tres de connexion
+veuillez contacter l&apos;administrateur du site ou l&apos;&eacute;quipe de \'{LOGIN_WEBSITE_TITLE}\'.
+Pensez &agrave; vider le cache de votre navigateur avant de vous reconnecter pour &eacute;viter toute probl&egrave;me &eacute;ventuel.
+
+Bien cordialement
+-------------------------------------
+Ce message &agrave; &eacute;t&eacute; g&eacute;n&eacute;r&eacute; automatiquement!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Bonjour {LOGIN_DISPLAY_NAME},
+
+Bienvenue chez \'{LOGIN_WEBSITE_TITLE}\'.
+
+Voici vos param&egrave;tres de connexion pour \'{LOGIN_WEBSITE_TITLE}\':
+Loginname: {LOGIN_NAME}
+Mot de Passe: {LOGIN_PASSWORD}
+
+Bien cordialement
+
+Remarque:
+Si vous pensez avoir re&ccedil;u ce message par erreur, veuillez l&apos;effacer et ne pas en tenir compte!
+-------------------------------------
+Ce message &agrave; &eacute;t&eacute; g&eacute;n&eacute;r&eacute; automatiquement!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Param&egrave;tres de votre connexion ...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'L&apos;adresse email est obligatoire';
+$MESSAGE['START_CURRENT_USER'] = 'Vous &ecirc;tes connect&eacute; en tant que : ';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Attention : le r&eacute;pertoire d&apos;installation existe toujours';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Bienvenue dans la zone d&apos;administration';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Pour modifier le th&egrave;me du site, vous devez vous rendre dans la rubrique R&eacute;glages';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Utilisateur ajout&eacute; avec succ&egrave;s';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Action refus&eacute;e, Vous ne pouvez pas vous supprimer vous-m&ecirc;me!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Vous ne devez modifier les valeurs ci-dessus uniquement lors d&apos;une modification de mot de passe';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Etes-vous s&ucirc;r de vouloir supprimer cet utilisateur ?';
+$MESSAGE['USERS_DELETED'] = 'Utilisateur supprim&eacute; avec succ&egrave;s';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'L&apos;adresse email est d&eacute;ja utilis&eacute;e';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'L&apos;adresse email n&apos;est pas valide';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Aucun groupe n&apos;a &eacute;t&eacute; s&eacute;lectionn&eacute;';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Le mot de passe est introuvable';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Le mot de passe est trop court';
+$MESSAGE['USERS_SAVED'] = 'Utilisateur sauvegard&eacute; avec succ&egrave;s';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Acc&egrave;s aux outils d&apos;administration de WebsiteBaker...';
+$OVERVIEW['GROUPS'] = 'Gestions des groupes d&apos;utilisateurs et des permissions';
+$OVERVIEW['HELP'] = 'Aide et FAQ sur l&apos;utilisation du site';
+$OVERVIEW['LANGUAGES'] = 'Gestion des langues du site';
+$OVERVIEW['MEDIA'] = 'Gestion des fichiers media (images, t&eacute;l&eacute;chargements...)';
+$OVERVIEW['MODULES'] = 'Gestion des modules du site';
+$OVERVIEW['PAGES'] = 'Gestion du contenu du site';
+$OVERVIEW['PREFERENCES'] = 'Gestion de vos pr&eacute;f&eacute;rences (email, mot de passe...) ';
+$OVERVIEW['SETTINGS'] = 'Configuration du site';
+$OVERVIEW['START'] = 'Pr&eacute;sentation de l&apos;administration';
+$OVERVIEW['TEMPLATES'] = 'Gestion des th&egrave;mes et modification de l&apos;apparence du site';
+$OVERVIEW['USERS'] = 'Gestion des acc&egrave;s au site';
+$OVERVIEW['VIEW'] = 'Aper&ccedil;u du site dans une nouvelle fen&ecirc;tre';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/HR.php
===================================================================
--- trunk/languages/HR.php	(nonexistent)
+++ trunk/languages/HR.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'HR';
+$language_name = 'Hrvatski';  // Croatian
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Vedran Presecki';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Pristup';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Dodaci';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Dobivanje detalja lozinke';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupe';
+$MENU['HELP'] = 'Pomo&aelig;';
+$MENU['LANGUAGES'] = 'Jezici';
+$MENU['LOGIN'] = 'Logiranje';
+$MENU['LOGOUT'] = 'Odlogiranje';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Moduli';
+$MENU['PAGES'] = 'Stranice';
+$MENU['PREFERENCES'] = 'Pode&scaron;avanja';
+$MENU['SETTINGS'] = 'Postavke';
+$MENU['START'] = 'Start';
+$MENU['TEMPLATES'] = 'Predlo&scaron;ci';
+$MENU['USERS'] = 'Korisnici';
+$MENU['VIEW'] = 'Pogled';
+$TEXT['ACCOUNT_SIGNUP'] = 'Logiranje na Account';
+$TEXT['ACTIONS'] = 'Akcije';
+$TEXT['ACTIVE'] = 'Aktivan';
+$TEXT['ADD'] = 'Dodaj';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Dodaj sekciju';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administracija';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administracijski alati';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratori';
+$TEXT['ADVANCED'] = 'Napredno';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Dopu&scaron;teni promatra&egrave;i';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Dopusti vi&scaron;estruki odabir';
+$TEXT['ALL_WORDS'] = 'Sve rije&egrave;i';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'anoniman';
+$TEXT['ANY_WORDS'] = 'Neke rije&egrave;i';
+$TEXT['APP_NAME'] = 'Ime aplikacije';
+$TEXT['ARE_YOU_SURE'] = 'Jeste li sigurni?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Nazad';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backupiraj sve tablice u bazi podataka';
+$TEXT['BACKUP_DATABASE'] = 'Backup baze podataka';
+$TEXT['BACKUP_MEDIA'] = 'Backup Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backupiraj samo WB-specificirane tablice';
+$TEXT['BASIC'] = 'Osnovno';
+$TEXT['BLOCK'] = 'Blokiraj';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Otka&#382;i';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha verifikacija';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Izmjeni';
+$TEXT['CHANGES'] = 'Izmjene';
+$TEXT['CHANGE_SETTINGS'] = 'Promjeni postavke';
+$TEXT['CHARSET'] = 'Postavka znakova';
+$TEXT['CHECKBOX_GROUP'] = 'Ozna&egrave;i kvadrat grupe';
+$TEXT['CLOSE'] = 'Zatvori';
+$TEXT['CODE'] = 'Kod';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Kolaps';
+$TEXT['COMMENT'] = 'Komentar';
+$TEXT['COMMENTING'] = 'Komentiranje';
+$TEXT['COMMENTS'] = 'Komentari';
+$TEXT['CREATE_FOLDER'] = 'napravi direktorij';
+$TEXT['CURRENT'] = 'Postoje&aelig;i';
+$TEXT['CURRENT_FOLDER'] = 'Postoje&aelig;i direktorij';
+$TEXT['CURRENT_PAGE'] = 'Trenutna stranica';
+$TEXT['CURRENT_PASSWORD'] = 'Potoje&aelig;a lozinka';
+$TEXT['CUSTOM'] = 'Korisni&egrave;ki';
+$TEXT['DATABASE'] = 'Baza podataka';
+$TEXT['DATE'] = 'Datum';
+$TEXT['DATE_FORMAT'] = 'Format datuma';
+$TEXT['DEFAULT'] = 'Postoje&aelig;i';
+$TEXT['DEFAULT_CHARSET'] = 'Po&egrave;etna postavka znakova';
+$TEXT['DEFAULT_TEXT'] = 'Postoje&aelig;i tekstt';
+$TEXT['DELETE'] = 'Obri&scaron;i';
+$TEXT['DELETED'] = 'Obrisan';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Opis';
+$TEXT['DESIGNED_FOR'] = 'Dizajniran za';
+$TEXT['DIRECTORIES'] = 'direktoriji';
+$TEXT['DIRECTORY_MODE'] = 'Mod direktorija';
+$TEXT['DISABLED'] = 'Onesposobljen';
+$TEXT['DISPLAY_NAME'] = 'Prika&#382;i ime';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Email adresa';
+$TEXT['EMPTY_TRASH'] = 'Isprazni sme&aelig;e';
+$TEXT['ENABLED'] = 'Omogu&aelig;en';
+$TEXT['END'] = 'Kraj';
+$TEXT['ERROR'] = 'Gre&scaron;ka';
+$TEXT['EXACT_MATCH'] = 'To&egrave;no odgovara';
+$TEXT['EXECUTE'] = 'Izvr&scaron;i';
+$TEXT['EXPAND'] = 'Pro&scaron;iri';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Polje';
+$TEXT['FILE'] = 'File';
+$TEXT['FILES'] = 'Fileovi';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Dopu&scaron;tanja sitema fileova';
+$TEXT['FILE_MODE'] = 'File Mod';
+$TEXT['FINISH_PUBLISHING'] = 'Zavr&scaron;i objavljivanje';
+$TEXT['FOLDER'] = 'Direktorij';
+$TEXT['FOLDERS'] = 'Direktoriji';
+$TEXT['FOOTER'] = 'Podno&#382;je';
+$TEXT['FORGOTTEN_DETAILS'] = 'Zaboravili ste va&scaron;e podatke?';
+$TEXT['FORGOT_DETAILS'] = 'Zaboravili ste datelje?';
+$TEXT['FROM'] = 'Od';
+$TEXT['FRONTEND'] = 'Po&egrave;etak-kraj';
+$TEXT['FULL_NAME'] = 'Puno ime';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupa';
+$TEXT['HEADER'] = 'Zaglavlje';
+$TEXT['HEADING'] = 'Zaglavlje';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Visina';
+$TEXT['HIDDEN'] = 'Skriven';
+$TEXT['HIDE'] = 'Sakrij';
+$TEXT['HIDE_ADVANCED'] = 'Sakrij napredne opcije';
+$TEXT['HOME'] = 'Po&egrave;etak';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirekcija po&egrave;etne stranice';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Ikona';
+$TEXT['IMAGE'] = 'Slika';
+$TEXT['INLINE'] = 'U liniji';
+$TEXT['INSTALL'] = 'Instaliraj';
+$TEXT['INSTALLATION'] = 'Instalacija';
+$TEXT['INSTALLATION_PATH'] = 'Instalacijski dio';
+$TEXT['INSTALLATION_URL'] = 'Instalacija URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = 'Intro Stranica';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Klju&egrave;ne rije&egrave;i';
+$TEXT['LANGUAGE'] = 'Jezik';
+$TEXT['LAST_UPDATED_BY'] = 'Zadnje izmjenjen od';
+$TEXT['LENGTH'] = 'Du&#382;ina';
+$TEXT['LEVEL'] = 'Nivo';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix baziran';
+$TEXT['LIST_OPTIONS'] = 'Lista opcija';
+$TEXT['LOGGED_IN'] = 'Logiran';
+$TEXT['LOGIN'] = 'Logiranje';
+$TEXT['LONG'] = 'Dugo';
+$TEXT['LONG_TEXT'] = 'Dugi tekst';
+$TEXT['LOOP'] = 'Petlja';
+$TEXT['MAIN'] = 'Glevni';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Upravljaj';
+$TEXT['MANAGE_GROUPS'] = 'Upravljanje grupama';
+$TEXT['MANAGE_USERS'] = 'Upravljanje korisnicima';
+$TEXT['MATCH'] = 'Usporedi';
+$TEXT['MATCHING'] = 'Podudaranje';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maximalan podpristup po satu';
+$TEXT['MEDIA_DIRECTORY'] = 'Direktorij medije';
+$TEXT['MENU'] = 'Meni';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Naslov menia';
+$TEXT['MESSAGE'] = 'Poruka';
+$TEXT['MODIFY'] = 'Izmjeni';
+$TEXT['MODIFY_CONTENT'] = 'Izmjeni sadr&#382;aj';
+$TEXT['MODIFY_SETTINGS'] = 'Izmjeni postavke';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Modulske dozvole';
+$TEXT['MORE'] = 'Vi&scaron;e';
+$TEXT['MOVE_DOWN'] = 'Spusti dolje';
+$TEXT['MOVE_UP'] = 'Podigni gore';
+$TEXT['MULTIPLE_MENUS'] = 'Ve&scaron;estruki menii';
+$TEXT['MULTISELECT'] = 'Vi&scaron;estruki odabir';
+$TEXT['NAME'] = 'Ime';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Molimo logirajte se?';
+$TEXT['NEW_PASSWORD'] = 'Nova lozinka';
+$TEXT['NEW_WINDOW'] = 'Novi prozor';
+$TEXT['NEXT'] = 'Slijede&aelig;i';
+$TEXT['NEXT_PAGE'] = 'Nova stranica';
+$TEXT['NO'] = 'Ne';
+$TEXT['NONE'] = 'Nijedan';
+$TEXT['NONE_FOUND'] = 'Nijedan na&eth;en';
+$TEXT['NOT_FOUND'] = 'Neprona&eth;eno';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Nema rezultata';
+$TEXT['OF'] = 'Of';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Opcija';
+$TEXT['OTHERS'] = 'Drugi';
+$TEXT['OUT_OF'] = 'Izvan Of';
+$TEXT['OVERWRITE_EXISTING'] = 'Napi&scaron;ite preko postoje&aelig;eg';
+$TEXT['PAGE'] = 'Strenica';
+$TEXT['PAGES_DIRECTORY'] = 'Direktorij stranica';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'EKstenzije stranice';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Jezici stranice';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Nivo limita stranice';
+$TEXT['PAGE_SPACER'] = 'Razmaknica stranica';
+$TEXT['PAGE_TITLE'] = 'Naslov stranice';
+$TEXT['PAGE_TRASH'] = 'Sme&aelig;e stranice';
+$TEXT['PARENT'] = 'Vezan';
+$TEXT['PASSWORD'] = 'Lozinka';
+$TEXT['PATH'] = 'Dio';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Gre&scaron;ka Izvje&scaron;taj nivoa';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Odaberite';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Broj objava po stranici';
+$TEXT['POST_FOOTER'] = 'Objavi podno&#382;je';
+$TEXT['POST_HEADER'] = 'Objavi zaglavlje';
+$TEXT['PREVIOUS'] = 'Prethodni';
+$TEXT['PREVIOUS_PAGE'] = 'Prethodna stranica';
+$TEXT['PRIVATE'] = 'Privatni';
+$TEXT['PRIVATE_VIEWERS'] = 'Privatni pregledatelji';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Javni';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio gumb grupe';
+$TEXT['READ'] = '&Egrave;itaj';
+$TEXT['READ_MORE'] = '&Egrave;itaj vi&scaron;e';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registriran';
+$TEXT['REGISTERED_VIEWERS'] = 'Registrirani promatra&egrave;i';
+$TEXT['RELOAD'] = 'Ponovo u&egrave;itavanje';
+$TEXT['REMEMBER_ME'] = 'Sjeti me';
+$TEXT['RENAME'] = 'Preimenuj';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Tra&#382;eno';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Resetiraj';
+$TEXT['RESIZE'] = 'Izmjeni veli&egrave;inu';
+$TEXT['RESIZE_IMAGE_TO'] = 'Izmjeni veli&egrave;inu slike na';
+$TEXT['RESTORE'] = 'Povrati';
+$TEXT['RESTORE_DATABASE'] = 'Povrati bazu podataka';
+$TEXT['RESTORE_MEDIA'] = 'Povrati Media';
+$TEXT['RESULTS'] = 'Rezultati';
+$TEXT['RESULTS_FOOTER'] = 'Rezultati podno&#382;ja';
+$TEXT['RESULTS_FOR'] = 'Rezultati za';
+$TEXT['RESULTS_HEADER'] = 'Rezultati zaglavlja';
+$TEXT['RESULTS_LOOP'] = 'Rezultati petlje';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Ponovo otipkaj novu lozinku';
+$TEXT['RETYPE_PASSWORD'] = 'Ponovo otipkaj novu lozinku';
+$TEXT['SAME_WINDOW'] = 'Isti prozor';
+$TEXT['SAVE'] = 'Snimi';
+$TEXT['SEARCH'] = 'Tra&#382;i';
+$TEXT['SEARCHING'] = 'Pretra&#382;ivanje';
+$TEXT['SECTION'] = 'Dio';
+$TEXT['SECTION_BLOCKS'] = 'Kvadrati sekcije';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Ozna&egrave;i kvadrat';
+$TEXT['SEND_DETAILS'] = '&Scaron;aljite podatke';
+$TEXT['SEPARATE'] = 'Odvojen';
+$TEXT['SEPERATOR'] = 'Odvajanje';
+$TEXT['SERVER_EMAIL'] = 'Server Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Serverski operacijski sutav';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Identifier';
+$TEXT['SETTINGS'] = 'Postavke';
+$TEXT['SHORT'] = 'Kratko';
+$TEXT['SHORT_TEXT'] = 'Kratki tekst';
+$TEXT['SHOW'] = 'Prika&#382;i';
+$TEXT['SHOW_ADVANCED'] = 'Prika&#382;i napredne opcije';
+$TEXT['SIGNUP'] = 'Upi&scaron;i se';
+$TEXT['SIZE'] = 'Veli&egrave;ina';
+$TEXT['SMART_LOGIN'] = 'Inteligentno logiranje';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Zapo&egrave;ni objavljivanje';
+$TEXT['SUBJECT'] = 'Subjekt';
+$TEXT['SUBMISSIONS'] = 'Podpristupe';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Podpristupi pohranjeni u bazi podataka';
+$TEXT['SUBMISSION_ID'] = 'Podpristupni ID';
+$TEXT['SUBMITTED'] = 'Pristupljen';
+$TEXT['SUCCESS'] = 'Uspjeh';
+$TEXT['SYSTEM_DEFAULT'] = 'Postoje&aelig;i sistem';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Sistemske dozvole';
+$TEXT['TABLE_PREFIX'] = 'Prefix tablice';
+$TEXT['TARGET'] = 'Cilj';
+$TEXT['TARGET_FOLDER'] = 'Ciljani direktorij';
+$TEXT['TEMPLATE'] = 'Predlo&#382;ak';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Pristup predlo&scaron;cima';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Podru&egrave;je teksta';
+$TEXT['TEXTFIELD'] = 'Pole teksta';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Vrijeme';
+$TEXT['TIMEZONE'] = 'Vremenska zona';
+$TEXT['TIME_FORMAT'] = 'Format vrmena';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Naslov';
+$TEXT['TO'] = 'Za';
+$TEXT['TOP_FRAME'] = 'Gornji okvir';
+$TEXT['TRASH_EMPTIED'] = 'Sme&aelig;e ispra&#382;njeno';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tip';
+$TEXT['UNDER_CONSTRUCTION'] = 'U izradi';
+$TEXT['UNINSTALL'] = 'Deinstaliraj';
+$TEXT['UNKNOWN'] = 'Nepoznat';
+$TEXT['UNLIMITED'] = 'Neograni&egrave;en';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Gore';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Nasnimi fajlove)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Korisnik';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifikacija';
+$TEXT['VERSION'] = 'VVerzija';
+$TEXT['VIEW'] = 'Pogled';
+$TEXT['VIEW_DELETED_PAGES'] = 'Pogledaj obrisane stranice';
+$TEXT['VIEW_DETAILS'] = 'Vidi detalje';
+$TEXT['VISIBILITY'] = 'Vidljivost';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Web stranica';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Opis web stranice';
+$TEXT['WEBSITE_FOOTER'] = 'Podno&#382;je web stranice';
+$TEXT['WEBSITE_HEADER'] = 'Zaglavlje web stranice';
+$TEXT['WEBSITE_KEYWORDS'] = 'Klju&egrave;ne rije&egrave;i web stranice';
+$TEXT['WEBSITE_TITLE'] = 'Ime web stranice';
+$TEXT['WELCOME_BACK'] = 'Dobro do&scaron;li nazad';
+$TEXT['WIDTH'] = '&Scaron;irina';
+$TEXT['WINDOW'] = 'Prozor';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'World-zapisuju&aelig;i prisup fileovima';
+$TEXT['WRITE'] = 'Pi&scaron;i';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Style';
+$TEXT['YES'] = 'Da';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Dodaj grupu';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Dodaj zaglavlje';
+$HEADING['ADD_PAGE'] = 'Dodaj stranicu';
+$HEADING['ADD_USER'] = 'Dodaj korisnika';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administracijski alati';
+$HEADING['BROWSE_MEDIA'] = 'Pogledaj Mediu';
+$HEADING['CREATE_FOLDER'] = 'napravi direktorij';
+$HEADING['DEFAULT_SETTINGS'] = 'Prija&scaron;nje postavke';
+$HEADING['DELETED_PAGES'] = 'Obrisane stranice';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Postavke sistema direktorija';
+$HEADING['GENERAL_SETTINGS'] = 'Glavne postavke';
+$HEADING['INSTALL_LANGUAGE'] = 'Instaliraj jezik';
+$HEADING['INSTALL_MODULE'] = 'Instaliraj module';
+$HEADING['INSTALL_TEMPLATE'] = 'Instaliraj predlo&#382;ak';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detalji jezika';
+$HEADING['MANAGE_SECTIONS'] = 'Upravljaj dijelovima';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Mijenjaj napredne postavke stranice';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Izmjeni/Obri&scaron;i Grupu';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Izmenj/Obri&scaron;i stranicu';
+$HEADING['MODIFY_DELETE_USER'] = 'Izmjeni/Obri&scaron;i korisnika';
+$HEADING['MODIFY_GROUP'] = 'Izmjeni grupu';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modificiraj intro stranicu';
+$HEADING['MODIFY_PAGE'] = 'Izmjeni stranicu';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Mijenjaj postavke stranice';
+$HEADING['MODIFY_USER'] = 'Izmjeni korisnika';
+$HEADING['MODULE_DETAILS'] = 'Detalji modula';
+$HEADING['MY_EMAIL'] = 'Moj Email';
+$HEADING['MY_PASSWORD'] = 'Moja Lozinka';
+$HEADING['MY_SETTINGS'] = 'Moje postavke';
+$HEADING['SEARCH_SETTINGS'] = 'Tra&#382;enje postavki';
+$HEADING['SERVER_SETTINGS'] = 'Postavke servera';
+$HEADING['TEMPLATE_DETAILS'] = 'Detalji predlo&scaron;ka';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Deinstaliraj jezik';
+$HEADING['UNINSTALL_MODULE'] = 'Deinstaliraj module';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Deinstaliraj predlo&#382;ak';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Nasnimi fileove';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Nedovoljne privilegije tu';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Na&#382;alost lozinka ne mo&#382;e biti resetirana/izmjenjena vi&scaron;e od jednom u jednom satu';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Ne mo&#382;emo vam emailom poslati lozinku, molimo kontakirajte sistemskog administratora';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Email adresu koju ste unjeli nemamo upisanu u bazi';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Unesite svoju email adresu ispod';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Nemate dopu&scaron;tenje za gledanje ove stranice';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Ve&aelig; instalirano';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Ne mo&#382;e zapisati u ciljani direktorij';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Ne mo&#382;e deinstalirati';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Ne mo&#382;e deinstalirati: odabrani file je trenutno u upotrebi';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Ne mo&#382;e unzipirati file';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Ne mo&#382;e nasnimiti file';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Gre&scaron;ka pri otvaranju filea.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'File koji nasnimavate mora biti slijede&aelig;eg formata:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'File koji nasnimavate mora biti u jednom od slijede&aelig;ih formata:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Molimo, vratite se nazad i popunite sva polja';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Instaliran uspje&scaron;no';
+$MESSAGE['GENERIC_INVALID'] = 'Instaliran file je nevaljal';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nije instalirano';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Budite strpljivo, ovo mo&#382;e potrajati.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Molimo poku&scaron;ajte ponovo za&egrave;as...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Deinstaliran uspje&scaron;no';
+$MESSAGE['GENERIC_UPGRADED'] = 'Nadogra&eth;en uspje&scaron;no';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Webstranica u izradi';
+$MESSAGE['GROUPS_ADDED'] = 'Grupa je uspje&scaron;no dodana';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Jeste li sigurni da &#382;elite obrisati odabranu gurupu i sve korisnike koji joj pripadaju?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupa je uspje&scaron;no obrisana';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Ime grupe je prazno';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Ime grupe ve&aelig; postoji';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Grupa nije na&eth;ena';
+$MESSAGE['GROUPS_SAVED'] = 'Grupa je uspje&scaron;no snimljena';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Molimo unesite svoju lozinku';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Lozinka je preduga';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Lozinka je prekratka';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Niste unjeli ekstenziju file-a';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Niste unjeli novo ime';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Ne mo&#382;e obrisati odabrani direktorij';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Ne mo&#382;e obrisati odabrani file';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Preimenovanje je neuspje&scaron;no';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Jeste li sigurni da &#382;elite obrisati file ili direktorij?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Folder je uspje&scaron;no obrisan';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'File je uspje&scaron;no obrisan';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Direktorij ne postoji';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Ne mo&#382;e uklju&egrave;iti ../ u ime direktorija';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Direktorij se podudara s imenom koje ste unjeli, a koje ve&aelig; postoji';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Direktorij je uspje&scaron;no stvoren';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Ne mo&#382;e napraviti direktorij';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'File se podudara s imenom koje ste unjeli, a koje ve&aelig; postoji';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'File nije prona&eth;en';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Ne mo&#382;e uklju&egrave;iti ../ u ime';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Ne mo&#382;e koristiti index.php kao ime';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Ni jedna medija nije na&eth;ena u postoje&aelig;em direktoriju';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Preimenovanje je uspje&scaron;no';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' file je uspje&scaron;no nasnimljen';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Ne mo&#382;e ../ u cilj direktorija';
+$MESSAGE['MEDIA_UPLOADED'] = ' fileovi su supje&scaron;no nasnimljeni';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Ova forma je pregledavana previ&scaron;e puta u jednom satu. Molimo poku&scaron;ajte slijede&aelig;i sat.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Broj provjere (poznat kao Captcha) neto&egrave;no je une&scaron;en. Ako imate problema s &egrave;itanjem Captcha, molimo po&scaron;aljite email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Morate unjeti detaljen podatke u nadoilaze&aelig;a polja';
+$MESSAGE['PAGES_ADDED'] = 'Stranica je uspje&scaron;no dodana';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Zaglavlje stranice uspje&scaron;no je dodano';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Unesite naziv menia';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Unesite naslov stranice';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Gre&scaron;ka pri stvaranju pristupnog filea u stranicama direktorija(nedovoljne privilegije)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Gre&scaron;ka pri brisanju pristupnog filea u stranicama direktorija(nedovoljne privilegije)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Gre&scaron;ka pri re-ordering stranice';
+$MESSAGE['PAGES_DELETED'] = 'Stranice su supje&scaron;no obrisane';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Jeste li sigurni da &#382;elite obrisati odabranu stranicu i sve njene podstranice';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Nemate dopu&scaron;tenje za izmjenu stranice';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Kliknite OVDJE za izmjenu intro stranice';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Ne mo&#382;e pisati file /pages/intro.php (nedovoljne privilegije)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Intro stranica je uspje&scaron;no snimljena';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Zadnje izmjene';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Stranica nije na&eth;ena';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Gre&scaron;ka pri snimanju stranice';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Stranica s sli&egrave;nim ili istim imenom ve&aelig; postoji';
+$MESSAGE['PAGES_REORDERED'] = 'Stranice re-ordered uspje&scaron;no';
+$MESSAGE['PAGES_RESTORED'] = 'Stranice su supje&scaron;no obnovljene';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Povratak na stranice';
+$MESSAGE['PAGES_SAVED'] = 'Stranica je uspje&scaron;no snimljena';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Postavke stranice uspje&scaron;no su snimljene';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Sekcijske postavke snimljene uspje&scaron;no';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Une&scaron;ena lozinka nije to&egrave;na';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detalji su uspje&scaron;no snimljeni';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email je snimljen uspje&scaron;no';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Lozinka je uspje&scaron;no izmjenjena';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Obavijest: Pritisnite ovaj gumb za reset svih nesnimljenih izmjena';
+$MESSAGE['SETTINGS_SAVED'] = 'Postavke su uspje&scaron;no snimljene';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Nemogu&aelig;e je otvoriti konfiguracijski file';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Ne mo&#382;e zapisivati u konfiguracijski file';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Obavijest: ovo je preporu&egrave;ljivo samo za uvijete testiranja';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Unesite email adresu';
+$MESSAGE['START_CURRENT_USER'] = 'Trenutno ste logirani kao:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Upozorenje, instalacijski direktoriji nije jo&scaron; obrisan!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Dobro do&scaron;li u WebsiteBaker administraciju';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Obavijest: Za promjenu predlo&scaron;ka idite na dio s Postavkama';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Korisnik je dodan supje&scaron;no';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Obavijest: Trebate samo unjeti vrijednosti u polja ispod ako &#382;elite izmjeniti korisni&egrave;ku lozinku';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Jeste li sigurni da &#382;elite obrisati odabranog korisnika?';
+$MESSAGE['USERS_DELETED'] = 'Korisnik je uspje&scaron;no obrisan';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Une&scaron;en email je ve&aelig; u upotrebi';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Une&scaron;ena email adresa je nepotpuna';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Niti jedna grupa nije odabrana';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Une&scaron;ena lozinka ne odgovara';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Predlo&#382;ena lozinka je prekratka';
+$MESSAGE['USERS_SAVED'] = 'Korisnik je snimljen uspje&scaron;no';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Upravljajte grupama korisnika i njihovim sistemskim dopu&scaron;tenjima.';
+$OVERVIEW['HELP'] = 'Imate pitanje? Prona&eth;ite odgovor...';
+$OVERVIEW['LANGUAGES'] = 'Uredite WebsiteBaker jezike...';
+$OVERVIEW['MEDIA'] = 'Uredite fileove pohranjene u direktoriju "Media"...';
+$OVERVIEW['MODULES'] = 'Uredite WebsiteBaker module...';
+$OVERVIEW['PAGES'] = 'Uredite va&scaron;e web stranice...';
+$OVERVIEW['PREFERENCES'] = 'Izmjenite postavke email adresa, lozinka i sl.... ';
+$OVERVIEW['SETTINGS'] = 'Promjenite postavke za WebsiteBaker...';
+$OVERVIEW['START'] = 'Pregled administracije';
+$OVERVIEW['TEMPLATES'] = 'Promijenite izgled i do&#382;ivljaj va&scaron;eg weba s predlo&scaron;cima...';
+$OVERVIEW['USERS'] = 'Upravljajte korisnicima koji se mogu logirati na WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Brzo pogledajte i listajte Va&scaron; web u novom prozoru...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/HR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/HU.php
===================================================================
--- trunk/languages/HU.php	(nonexistent)
+++ trunk/languages/HU.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'HU';
+$language_name = 'Magyar'; // Hungarian
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Zsolt + Robert';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Jogosults&aacute;gok';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Kieg&eacute;sz&iacute;t-?-?';
+$MENU['ADMINTOOLS'] = 'Admin-Eszk&ouml;z&ouml;k';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Elfelejtett jelsz&oacute;';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Csoportok';
+$MENU['HELP'] = 'S&uacute;g&oacute;';
+$MENU['LANGUAGES'] = 'Nyelvek';
+$MENU['LOGIN'] = 'Bel&eacute;p&eacute;s';
+$MENU['LOGOUT'] = 'Kil&eacute;p&eacute;s';
+$MENU['MEDIA'] = 'M&eacute;dia';
+$MENU['MODULES'] = 'Modulok';
+$MENU['PAGES'] = 'Weblapok';
+$MENU['PREFERENCES'] = 'Saj&aacute;t adatok';
+$MENU['SETTINGS'] = 'Param&eacute;terek';
+$MENU['START'] = 'Kezd-?-?ap';
+$MENU['TEMPLATES'] = 'Sablonok';
+$MENU['USERS'] = 'Felhaszn&aacute;l&oacute;k';
+$MENU['VIEW'] = 'Port&aacute;l n&eacute;zet';
+$TEXT['ACCOUNT_SIGNUP'] = 'Fi&oacute;k L&eacute;trehoz&aacute;s';
+$TEXT['ACTIONS'] = 'Tev&eacute;kenys&eacute;gek';
+$TEXT['ACTIVE'] = 'Akt&iacute;v';
+$TEXT['ADD'] = 'Hozz&aacute;ad';
+$TEXT['ADDON'] = 'Kig&eacute;sz&iacute;t&ccedil;';
+$TEXT['ADD_SECTION'] = 'Szakasz hozz&aacute;ad&aacute;sa';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Adminisztr&aacute;l&aacute;s';
+$TEXT['ADMINISTRATION_TOOL'] = 'Adminisztr&aacute;ci&oacute;s Eszk&ouml;z';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Adminisztr&aacute;torok';
+$TEXT['ADVANCED'] = 'B-?-¦&iacute;tett';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Enged&eacute;lyezett l&aacute;togat&oacute;k';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'T&ouml;bbet is kiv&aacute;laszthat';
+$TEXT['ALL_WORDS'] = 'Minden sz&oacute;';
+$TEXT['ANCHOR'] = 'Horgony';
+$TEXT['ANONYMOUS'] = 'N&eacute;vtelen';
+$TEXT['ANY_WORDS'] = 'B&aacute;rmely sz&oacute;';
+$TEXT['APP_NAME'] = 'Alkalmaz&aacute;s Neve';
+$TEXT['ARE_YOU_SURE'] = 'Biztos hogy ezt akarja?';
+$TEXT['AUTHOR'] = 'Szerz&ccedil;';
+$TEXT['BACK'] = 'Vissza';
+$TEXT['BACKUP'] = 'Biztons&aacute;gi Ment&eacute;s';
+$TEXT['BACKUP_ALL_TABLES'] = 'Minden adatb&aacute;zis t&aacute;bla ment&eacute;se';
+$TEXT['BACKUP_DATABASE'] = 'Adatb&aacute;zis Ment&eacute;se';
+$TEXT['BACKUP_MEDIA'] = 'Biztons&aacute;gi ment&eacute;s M&eacute;dia';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Csak WB specifikus adatb&aacute;zis t&aacute;bla ment&eacute;se';
+$TEXT['BASIC'] = 'Alap';
+$TEXT['BLOCK'] = 'Blokk';
+$TEXT['CALENDAR'] = 'Napt&aacute;r';
+$TEXT['CANCEL'] = 'M&eacute;gse';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Ellen&ouml;rz&eacute;s';
+$TEXT['CAP_EDIT_CSS'] = 'CSS Szerkeszt&eacute;se';
+$TEXT['CHANGE'] = 'M&oacute;dos&iacute;t';
+$TEXT['CHANGES'] = 'V&aacute;toz&aacute;sok';
+$TEXT['CHANGE_SETTINGS'] = 'Be&aacute;ll&iacute;t&aacute;sok megv&aacute;ltoztat&aacute;sa';
+$TEXT['CHARSET'] = 'Karakterk&eacute;szlet';
+$TEXT['CHECKBOX_GROUP'] = 'Jel&ouml;l&agrave;n&eacute;gyzet csoport';
+$TEXT['CLOSE'] = 'Bez&aacute;r';
+$TEXT['CODE'] = 'K&oacute;d';
+$TEXT['CODE_SNIPPET'] = 'Code-r&eacute;szlet';
+$TEXT['COLLAPSE'] = '&sup3;szecsuk';
+$TEXT['COMMENT'] = 'Megjegyz&eacute;s';
+$TEXT['COMMENTING'] = 'Komment&aacute;l&aacute;s';
+$TEXT['COMMENTS'] = 'Megjegyz&eacute;sek';
+$TEXT['CREATE_FOLDER'] = 'K&ouml;nyvt&aacute;r l&eacute;trehoz&aacute;sa';
+$TEXT['CURRENT'] = 'Aktu&aacute;lis';
+$TEXT['CURRENT_FOLDER'] = 'Aktu&aacute;lis k&ouml;nyvt&aacute;r';
+$TEXT['CURRENT_PAGE'] = 'Aktu&aacute;lis Lap';
+$TEXT['CURRENT_PASSWORD'] = 'Aktu&aacute;lis Jelsz&oacute;';
+$TEXT['CUSTOM'] = 'Egy&eacute;ni';
+$TEXT['DATABASE'] = 'Adatb&aacute;zis';
+$TEXT['DATE'] = 'D&aacute;tum';
+$TEXT['DATE_FORMAT'] = 'D&aacute;tum form&aacute;tum';
+$TEXT['DEFAULT'] = 'Alap&eacute;rtelmezett';
+$TEXT['DEFAULT_CHARSET'] = 'Alap&eacute;rtelmezett Karakterrk&eacute;szlet';
+$TEXT['DEFAULT_TEXT'] = 'Alap&eacute;rtelmezett sz&ouml;veg';
+$TEXT['DELETE'] = 'T&ouml;rl&eacute;s';
+$TEXT['DELETED'] = 'T&ouml;r&ouml;lve';
+$TEXT['DELETE_DATE'] = 'D&aacute;tum t&ouml;rl&eacute;se';
+$TEXT['DELETE_ZIP'] = 'ZIP arch&iacute;vum t&ouml;rl&eacute;se kicsomagol&aacute;s ut&aacute;n&amp;';
+$TEXT['DESCRIPTION'] = 'Le&iacute;r&aacute;s';
+$TEXT['DESIGNED_FOR'] = 'Tervezve';
+$TEXT['DIRECTORIES'] = 'K&ouml;nyvt&aacute;rak';
+$TEXT['DIRECTORY_MODE'] = 'K&ouml;nyvt&aacute;r m&oacute;d';
+$TEXT['DISABLED'] = 'Letiltva';
+$TEXT['DISPLAY_NAME'] = 'Megjelen&agrave;N&eacute;v';
+$TEXT['EMAIL'] = 'E-mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-mail C&iacute;m';
+$TEXT['EMPTY_TRASH'] = 'Kuka &uuml;r&iacute;t&eacute;s';
+$TEXT['ENABLED'] = 'Enged&eacute;lyezve';
+$TEXT['END'] = 'V&eacute;ge';
+$TEXT['ERROR'] = 'Hiba';
+$TEXT['EXACT_MATCH'] = 'Pontos egyez&eacute;s';
+$TEXT['EXECUTE'] = 'V&eacute;grehajt&aacute;s';
+$TEXT['EXPAND'] = 'Kibont';
+$TEXT['EXTENSION'] = 'B-?-¦&iacute;tm&eacute;ny';
+$TEXT['FIELD'] = 'Mez&ccedil;';
+$TEXT['FILE'] = 'F&aacute;jl';
+$TEXT['FILES'] = 'F&aacute;jlok';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'File rendszer jogosults&aacute;gok';
+$TEXT['FILE_MODE'] = 'File M&oacute;d';
+$TEXT['FINISH_PUBLISHING'] = 'Publik&aacute;l&aacute;s v&eacute;ge';
+$TEXT['FOLDER'] = 'K&ouml;nyvt&aacute;r';
+$TEXT['FOLDERS'] = 'K&ouml;nyvt&aacute;rak';
+$TEXT['FOOTER'] = 'L&aacute;bl&eacute;c';
+$TEXT['FORGOTTEN_DETAILS'] = 'Mi is a jelsz&oacute;?';
+$TEXT['FORGOT_DETAILS'] = 'Elfelejtettem a jelsz&oacute;t.';
+$TEXT['FROM'] = 'Felad&oacute;';
+$TEXT['FRONTEND'] = 'Megjelen&agrave;fel&uuml;let';
+$TEXT['FULL_NAME'] = 'Teljes n&eacute;v';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Csoport';
+$TEXT['HEADER'] = 'Fejl&eacute;c';
+$TEXT['HEADING'] = 'C&iacute;msor';
+$TEXT['HEADING_CSS_FILE'] = 'Aktu&aacute;lis Modul F&aacute;jl: ';
+$TEXT['HEIGHT'] = 'Magass&aacute;g';
+$TEXT['HIDDEN'] = 'Rejtett';
+$TEXT['HIDE'] = 'Elrejt';
+$TEXT['HIDE_ADVANCED'] = 'Speci&aacute;lis be&aacute;ll&iacute;t&aacute;sok elrejt&eacute;se';
+$TEXT['HOME'] = 'Kezd-?-?ap';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Honlap &aacute;tir&aacute;ny&iacute;t&aacute;s';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Ikon';
+$TEXT['IMAGE'] = 'K&eacute;p';
+$TEXT['INLINE'] = 'Sorban';
+$TEXT['INSTALL'] = 'Telep&iacute;t';
+$TEXT['INSTALLATION'] = 'Telep&iacute;t&eacute;s';
+$TEXT['INSTALLATION_PATH'] = 'Telep&iacute;t&eacute;si &uacute;tvonal';
+$TEXT['INSTALLATION_URL'] = 'Telep&iacute;t&eacute;si URL';
+$TEXT['INSTALLED'] = 'telep&iacute;tve';
+$TEXT['INTRO'] = 'Bevezet&ccedil;';
+$TEXT['INTRO_PAGE'] = 'Bevezet&agrave;Lap';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Kulcsszavak';
+$TEXT['LANGUAGE'] = 'Nyelv';
+$TEXT['LAST_UPDATED_BY'] = 'M&oacute;dos&iacute;totta';
+$TEXT['LENGTH'] = 'Hossz';
+$TEXT['LEVEL'] = 'Szint';
+$TEXT['LINK'] = 'Hivatkoz&aacute;s';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Lista opci&oacute;k';
+$TEXT['LOGGED_IN'] = 'Bejelentkezve';
+$TEXT['LOGIN'] = 'Bel&eacute;p&eacute;s';
+$TEXT['LONG'] = 'Hossz-?-¦';
+$TEXT['LONG_TEXT'] = 'Hossz&uacute; sz&ouml;veg';
+$TEXT['LOOP'] = 'ism&eacute;tl-?-?&uuml;/br&gt; t&ouml;rzs szakasz';
+$TEXT['MAIN'] = 'F&ccedil;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Kezel';
+$TEXT['MANAGE_GROUPS'] = 'Csoportok kezel&eacute;se';
+$TEXT['MANAGE_USERS'] = 'Felhaszn&aacute;l&oacute;k kezel&eacute;se';
+$TEXT['MATCH'] = 'Egyezik';
+$TEXT['MATCHING'] = 'Egyez&eacute;s';
+$TEXT['MAX_EXCERPT'] = 'Maximum tal&aacute;lat';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. bek&uuml;ld&eacute;s &oacute;r&aacute;nk&eacute;nt';
+$TEXT['MEDIA_DIRECTORY'] = 'M&eacute;dia k&ouml;nyvt&aacute;r';
+$TEXT['MENU'] = 'Men&uuml;';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Menu C&iacute;m';
+$TEXT['MESSAGE'] = '&ordm;enet';
+$TEXT['MODIFY'] = 'M&oacute;dos&iacute;t&aacute;s';
+$TEXT['MODIFY_CONTENT'] = 'Tartalom m&oacute;dos&iacute;t&aacute;sa';
+$TEXT['MODIFY_SETTINGS'] = 'Be&aacute;ll&iacute;t&aacute;sok m&oacute;dos&iacute;t&aacute;sa';
+$TEXT['MODULE_ORDER'] = 'Modul sorrend keres&eacute;sn&eacute;l';
+$TEXT['MODULE_PERMISSIONS'] = 'Modul enged&eacute;lyek';
+$TEXT['MORE'] = 'B-?-¦ebben';
+$TEXT['MOVE_DOWN'] = 'Mozgat Le';
+$TEXT['MOVE_UP'] = 'Mozgat Fel';
+$TEXT['MULTIPLE_MENUS'] = 'T&ouml;bbszint-?-¦ men&uuml;';
+$TEXT['MULTISELECT'] = 'T&ouml;bb v&aacute;laszt&aacute;sos';
+$TEXT['NAME'] = 'N&eacute;v';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Vissza a bel&eacute;p&eacute;shez';
+$TEXT['NEW_PASSWORD'] = '&ordf; Jelsz&oacute;';
+$TEXT['NEW_WINDOW'] = '&ordf; ablak';
+$TEXT['NEXT'] = 'K&ouml;vetke&ccedil;';
+$TEXT['NEXT_PAGE'] = 'K&ouml;vetke&agrave;oldal';
+$TEXT['NO'] = 'Nem';
+$TEXT['NONE'] = 'Egyik sem';
+$TEXT['NONE_FOUND'] = 'Nem tal&aacute;lhat&oacute;';
+$TEXT['NOT_FOUND'] = 'Nem tal&aacute;lhat&oacute;';
+$TEXT['NOT_INSTALLED'] = 'nincs telep&iacute;tve';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Nincs eredm&eacute;ny';
+$TEXT['OF'] = '&ouml;sszesen:';
+$TEXT['ON'] = 'Be';
+$TEXT['OPEN'] = 'Megnyit&aacute;s';
+$TEXT['OPTION'] = 'Opci&oacute;k';
+$TEXT['OTHERS'] = 'Egyebek';
+$TEXT['OUT_OF'] = 'T&uacute;l';
+$TEXT['OVERWRITE_EXISTING'] = 'Megl&eacute;v&agrave;fel&uuml;l&iacute;r&aacute;sa';
+$TEXT['PAGE'] = 'Lap';
+$TEXT['PAGES_DIRECTORY'] = 'Lap k&ouml;nyvt&aacute;r';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Lap kiterjeszt&eacute;s';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Lap nyelv';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Lap szint limit';
+$TEXT['PAGE_SPACER'] = 'Lap filen&eacute;v elv&aacute;laszt&oacute;';
+$TEXT['PAGE_TITLE'] = 'Lap c&iacute;m';
+$TEXT['PAGE_TRASH'] = 'Lap kuka';
+$TEXT['PARENT'] = 'Almen&uuml;je ennek';
+$TEXT['PASSWORD'] = 'Jelsz&oacute;';
+$TEXT['PATH'] = '&acute;vonal';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP hibajelent&eacute;si szint';
+$TEXT['PLEASE_LOGIN'] = 'K&eacute;rem l&eacute;pjen be';
+$TEXT['PLEASE_SELECT'] = 'K&eacute;rem v&aacute;lasszon';
+$TEXT['POST'] = 'Cikk';
+$TEXT['POSTS_PER_PAGE'] = '&ordm;enetek laponk&eacute;nt';
+$TEXT['POST_FOOTER'] = '&ordm;enet l&aacute;bl&eacute;c';
+$TEXT['POST_HEADER'] = '&ordm;enet fejbl&eacute;c';
+$TEXT['PREVIOUS'] = 'El-?-?&ccedil;';
+$TEXT['PREVIOUS_PAGE'] = 'El-?-?&agrave;oldal';
+$TEXT['PRIVATE'] = 'Priv&aacute;t';
+$TEXT['PRIVATE_VIEWERS'] = 'Priv&aacute;t jogosultak';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Publikus';
+$TEXT['PUBL_END_DATE'] = 'Z&aacute;r&oacute; d&aacute;tum';
+$TEXT['PUBL_START_DATE'] = 'Kezd&agrave;d&aacute;tum';
+$TEXT['RADIO_BUTTON_GROUP'] = 'V&aacute;laszt&oacute; gomb csoport';
+$TEXT['READ'] = 'Olr&aacute;s';
+$TEXT['READ_MORE'] = '&lt;/br&gt;Tov&aacute;bb...&lt;/br&gt;';
+$TEXT['REDIRECT_AFTER'] = '&acute;ir&aacute;ny&iacute;t&aacute;s';
+$TEXT['REGISTERED'] = 'Regisztr&aacute;lva';
+$TEXT['REGISTERED_VIEWERS'] = 'Regisztr&aacute;lt l&aacute;togat&oacute;k';
+$TEXT['RELOAD'] = '&ordf;rat&ouml;lt&eacute;s';
+$TEXT['REMEMBER_ME'] = 'Eml&eacute;kezzen';
+$TEXT['RENAME'] = '&acute;nevez';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'K&ouml;telez&ccedil;';
+$TEXT['REQUIREMENT'] = 'K&ouml;vetelem&eacute;ny';
+$TEXT['RESET'] = 'Visszavon';
+$TEXT['RESIZE'] = '&ordf;ra m&eacute;retez';
+$TEXT['RESIZE_IMAGE_TO'] = 'K&eacute;p &aacute;tm&eacute;retez&eacute;se';
+$TEXT['RESTORE'] = 'Vissza&aacute;ll&iacute;t&aacute;s';
+$TEXT['RESTORE_DATABASE'] = 'Adatb&aacute;zis Vissza&aacute;ll&iacute;t&aacute;sa';
+$TEXT['RESTORE_MEDIA'] = 'Vissza&aacute;ll&iacute;t&aacute;si M&eacute;dia';
+$TEXT['RESULTS'] = 'Eredm&eacute;nyek';
+$TEXT['RESULTS_FOOTER'] = 'Eredm&eacute;nyek l&aacute;bl&eacute;c';
+$TEXT['RESULTS_FOR'] = 'Keresett';
+$TEXT['RESULTS_HEADER'] = 'Eredm&eacute;nyek fejl&eacute;c';
+$TEXT['RESULTS_LOOP'] = 'Eredm&eacute;nyek ciklus';
+$TEXT['RETYPE_NEW_PASSWORD'] = '&ordf; Jelsz&oacute; m&eacute;gegyszer';
+$TEXT['RETYPE_PASSWORD'] = 'Jelsz&oacute; m&eacute;gegyszer';
+$TEXT['SAME_WINDOW'] = 'Azonos Ablak';
+$TEXT['SAVE'] = 'Ment&eacute;s';
+$TEXT['SEARCH'] = 'Keres&eacute;s';
+$TEXT['SEARCHING'] = 'Keres&eacute;s...';
+$TEXT['SECTION'] = 'Szakasz';
+$TEXT['SECTION_BLOCKS'] = 'Szakaszok';
+$TEXT['SEC_ANCHOR'] = 'Szekci&oacute;-Horgony sz&ouml;veg';
+$TEXT['SELECT_BOX'] = 'Jel&ouml;l&agrave;n&eacute;gyzet';
+$TEXT['SEND_DETAILS'] = 'Jelsz&oacute; elk&uuml;ld&eacute;se';
+$TEXT['SEPARATE'] = 'K&uuml;l&ouml;n&aacute;ll&oacute;';
+$TEXT['SEPERATOR'] = 'Elv&aacute;laszt&oacute;';
+$TEXT['SERVER_EMAIL'] = 'Port&aacute;l E-mail c&iacute;me';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Szerver Oper&aacute;ci&oacute;s Rendszer';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Azonos&iacute;t&oacute;';
+$TEXT['SETTINGS'] = 'Be&aacute;ll&iacute;t&aacute;s';
+$TEXT['SHORT'] = 'R&ouml;vid';
+$TEXT['SHORT_TEXT'] = 'R&ouml;vid sz&ouml;veg';
+$TEXT['SHOW'] = 'Mutat';
+$TEXT['SHOW_ADVANCED'] = 'Speci&aacute;lis be&aacute;ll&iacute;t&aacute;sok mutat&aacute;sa';
+$TEXT['SIGNUP'] = 'Regisztr&aacute;l&aacute;s...';
+$TEXT['SIZE'] = 'M&eacute;ret';
+$TEXT['SMART_LOGIN'] = 'Okos bejelentkez&eacute;s';
+$TEXT['START'] = 'Kezd&eacute;s';
+$TEXT['START_PUBLISHING'] = 'Publik&aacute;l&aacute;s kezdete';
+$TEXT['SUBJECT'] = 'T&aacute;rgy';
+$TEXT['SUBMISSIONS'] = 'Bek&uuml;ld&eacute;sek';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'T&aacute;rolva az adatb&aacute;zisban';
+$TEXT['SUBMISSION_ID'] = 'Bek&uuml;ld&eacute;s azonos&iacute;t&oacute;';
+$TEXT['SUBMITTED'] = 'Elk&uuml;ldve';
+$TEXT['SUCCESS'] = 'Sikeres';
+$TEXT['SYSTEM_DEFAULT'] = 'Rendszer alap&eacute;rtelmezett';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Rendszer enged&eacute;lyek';
+$TEXT['TABLE_PREFIX'] = 'T&aacute;bla el-?-?ag';
+$TEXT['TARGET'] = 'C&eacute;l';
+$TEXT['TARGET_FOLDER'] = 'C&eacute;l k&ouml;nyvt&aacute;r';
+$TEXT['TEMPLATE'] = 'Weboldal Sablon';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Sablon jogosults&aacute;gok';
+$TEXT['TEXT'] = 'Sz&ouml;veg';
+$TEXT['TEXTAREA'] = 'Sz&ouml;vegter&uuml;let';
+$TEXT['TEXTFIELD'] = 'Sz&ouml;vegmez&ccedil;';
+$TEXT['THEME'] = 'Admin T&eacute;ma';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Id&ccedil;';
+$TEXT['TIMEZONE'] = 'Id-?-?&oacute;na';
+$TEXT['TIME_FORMAT'] = 'Id&agrave;form&aacute;tum';
+$TEXT['TIME_LIMIT'] = 'Maxim&aacute;lis id&agrave;a modulonk&eacute;nti tal&aacute;latra';
+$TEXT['TITLE'] = 'C&iacute;m';
+$TEXT['TO'] = 'C&iacute;mzett';
+$TEXT['TOP_FRAME'] = 'Fels&agrave;Keret';
+$TEXT['TRASH_EMPTIED'] = 'Kuka ki&uuml;r&iacute;tve';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Itt szerkesztheted a CSS defin&iacute;ci&oacute;kat.';
+$TEXT['TYPE'] = 'T&iacute;pus';
+$TEXT['UNDER_CONSTRUCTION'] = 'Fejleszt&eacute;s alatt';
+$TEXT['UNINSTALL'] = 'Elt&aacute;vol&iacute;t';
+$TEXT['UNKNOWN'] = 'Ismeretlen';
+$TEXT['UNLIMITED'] = 'V&eacute;gtelen';
+$TEXT['UNZIP_FILE'] = 'ZIP arch&iacute;vum felt&ouml;lt&eacute;se &eacute;s kicsomagol&aacute;sa';
+$TEXT['UP'] = 'Fel';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'F&aacute;jl felt&ouml;lt&eacute;s';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Felhaszn&aacute;l&oacute;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Ellen&ouml;rz&eacute;s';
+$TEXT['VERSION'] = 'Verzi&oacute;';
+$TEXT['VIEW'] = 'N&eacute;zet';
+$TEXT['VIEW_DELETED_PAGES'] = 'T&ouml;r&ouml;lt Lapok megtekint&eacute;se';
+$TEXT['VIEW_DETAILS'] = 'Inf&oacute;t megn&eacute;z';
+$TEXT['VISIBILITY'] = 'Megjelen&eacute;s';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'K&uuml;ld&agrave;email';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'K&uuml;ld&agrave;szem&eacute;ly';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'K&eacute;rlek add meg az alap&eacute;rtelmezett "K&uuml;ld&agrave;email" c&iacute;met &eacute;s a "K&uuml;ld&agrave;szem&eacute;ly" mez-?-?. Aj&aacute;nlott az al&aacute;bbi foszn&aacute;lata: &lt;strong&gt;admin@tedomained.hu&lt;/strong&gt;. N&eacute;mely szolg&aacute;ltat&oacute; (e.g. &lt;em&gt;mail.com&lt;/em&gt;) Visszautas&iacute;thatja a leveleket az olyan k&uuml;ld&agrave;c&iacute;mt-?-? mint &lt;@mail.com&lt;/em&gt; ez az&eacute;rt van hogy megakad&aacute;lyozz&aacute;k a SPAM k&uuml;ld&eacute;st.&lt;br /&gt;&lt;br /&gt;Az alap&eacute;rtelmezett &eacute;rt&eacute;kek csak akkor &eacute;rv&eacute;nyesek,ha nincs m&aacute;s megadva aker-ben. Ha a szervered t&aacute;mogatja &lt;acronym title="Simple mail transfer protocol"&gt;SMTP&lt;/acronym&gt;protokolt, akkor haszn&aacute;lhatod ezt az opci&oacute;t lev&eacute;l k&uuml;ld&eacute;;hez.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Rutin';
+$TEXT['WBMAILER_NOTICE'] = '&lt;strong&gt;SMTP Mailer Be&aacute;ll&iacute;t&aacute;sok:&lt;/strong&gt;&lt;br /&gt;Ezek a be&aacute;ll&iacute;t&aacute;sok csak akkor sz&uuml;ks&eacute;gesek, ha emailt akarsz k&uuml;ldeni &lt;acro="Simple mail transfer protocol"&gt;SMTP&lt;/acronym&gt; protokollon kereszt&uuml;l. Ha nem tudod az SMTP kiszolg&aacute;l&oacute;dat, vagy nem vagy biztos a k&ouml;vetlem&eacute;nyekben, akkoszer-?-¦en maradj az alap be&aacute;ll&iacute;t&aacute;sn&aacute;l: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Azonos&iacute;t&aacute;s';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'csak akkor aktiv&aacute;ld ha az SMTP host azonos&iacute;t&aacute;st k&eacute;r';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Jelsz&oacute;';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Weblap';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Weblap le&iacute;r&aacute;s';
+$TEXT['WEBSITE_FOOTER'] = 'Weblap l&aacute;bl&eacute;c';
+$TEXT['WEBSITE_HEADER'] = 'Weblap fejl&eacute;c';
+$TEXT['WEBSITE_KEYWORDS'] = 'Weblap kulcsszavak';
+$TEXT['WEBSITE_TITLE'] = 'Weblap C&iacute;m';
+$TEXT['WELCOME_BACK'] = '&curren;v';
+$TEXT['WIDTH'] = 'Sz&eacute;less&eacute;g';
+$TEXT['WINDOW'] = 'Ablak';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Mindenki &aacute;ltal &iacute;rhat&oacute; file jogok';
+$TEXT['WRITE'] = 'g';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Szerkeszt&ccedil;';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG St&iacute;lus';
+$TEXT['YES'] = 'Igen';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Kieg&eacute;sz&iacute;t&agrave;k&ouml;vetelm&eacute;nyek nem megfelel-?-?k';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Csoport m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Fejl&eacute;c hozz&aacute;ad&aacute;sa';
+$HEADING['ADD_PAGE'] = 'Lap hozz&aacute;ad&aacute;sa';
+$HEADING['ADD_USER'] = 'Felhaszn&aacute;l&oacute; hozz&aacute;ad&aacute;sa';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Adminisztr&aacute;ci&oacute;s eszk&ouml;z&ouml;k';
+$HEADING['BROWSE_MEDIA'] = 'M&eacute;dia b&ouml;ng&eacute;sz&eacute;se';
+$HEADING['CREATE_FOLDER'] = '&ordf; k&ouml;nyvt&aacute;r';
+$HEADING['DEFAULT_SETTINGS'] = 'Alap&eacute;rtelmezett Be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['DELETED_PAGES'] = 'T&ouml;r&ouml;lt Lapok';
+$HEADING['FILESYSTEM_SETTINGS'] = 'F&aacute;jl Rendszer';
+$HEADING['GENERAL_SETTINGS'] = '&not;tal&aacute;nos be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['INSTALL_LANGUAGE'] = 'Nyelv telep&iacute;t&eacute;s';
+$HEADING['INSTALL_MODULE'] = 'Modul telep&iacute;t&eacute;s';
+$HEADING['INSTALL_TEMPLATE'] = 'Sablon telep&iacute;t&eacute;s';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Modul f&aacute;jlok v&eacute;grehajt&aacute;sa manu&aacute;lisan';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Nyelv Inf&oacute;';
+$HEADING['MANAGE_SECTIONS'] = 'Szakaszok kezel&eacute;se';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Speci&aacute;lis be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Csoport m&oacute;dos&iacute;t&aacute;sa/t&ouml;rl&eacute;se';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Lap m&oacute;dos&iacute;t&aacute;sa/T&ouml;rl&eacute;se';
+$HEADING['MODIFY_DELETE_USER'] = 'Felhaszn&aacute;l&oacute; m&oacute;dos&iacute;t&aacute;sa/t&ouml;rl&eacute;se';
+$HEADING['MODIFY_GROUP'] = 'Csoport m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Bevezet&agrave;lap m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['MODIFY_PAGE'] = 'Lap m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Lap be&aacute;ll&iacute;t&aacute;sainak m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['MODIFY_USER'] = 'Felhaszn&aacute;l&oacute; m&oacute;dos&iacute;t&aacute;sa';
+$HEADING['MODULE_DETAILS'] = 'Modul inf&oacute;';
+$HEADING['MY_EMAIL'] = 'E-mail';
+$HEADING['MY_PASSWORD'] = 'Jelsz&oacute;';
+$HEADING['MY_SETTINGS'] = 'Be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['SEARCH_SETTINGS'] = 'Keres&eacute;si be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['SERVER_SETTINGS'] = 'Szerver be&aacute;ll&iacute;t&aacute;sok';
+$HEADING['TEMPLATE_DETAILS'] = 'Sablon inf&oacute;';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Nyelv elt&aacute;vol&iacute;t&aacute;s';
+$HEADING['UNINSTALL_MODULE'] = 'Modul elt&aacute;vol&iacute;t&aacute;s';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Sablon elt&aacute;vol&iacute;t&aacute;s';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'F&aacute;jl(ok) felt&ouml;lt&eacute;se';
+$HEADING['WBMAILER_SETTINGS'] = 'Levelez&agrave;Be&aacute;ll&iacute;t&aacute;sok';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Itt nincs elegend&agrave;jogosults&aacute;god!';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Sajn&aacute;ljuk, de a jelsz&oacute;t nem lehet egy &oacute;r&aacute;n bel&uuml;l t&ouml;bbsz&ouml;r &uacute;jrak&eacute;rni';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Az E-mail k&uuml;ld&eacute;s probl&eacute;m&aacute;ba &uuml;tk&ouml;z&ouml;tt, k&eacute;rem vegye fel a kapcsolatot az adminisztr&aacute;torral';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Az &reg; &aacute;ltal megadott E-mail c&iacute;m nem talalhat&oacute; adatb&aacute;zisunkban';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'K&eacute;rem &iacute;rja be az E-mail c&iacute;m&eacute;t';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sajnos nincs megjelen&iacute;thet&agrave;tartalom';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Sajn&aacute;ljuk, de a megjelen&iacute;t&eacute;shez nincs jogosults&aacute;ga!';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'M&aacute;r telep&iacute;tve';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'A c&eacute;l k&ouml;nyvt&aacute;r nem &iacute;rhat&oacute;';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Nem lehet elt&aacute;vol&iacute;tani';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Nem lehet elt&aacute;volt&iacute;tani! A file haszn&aacute;latban van.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '&lt;br /&gt;&lt;br /&gt;{{type}} &lt;b&gt;{{type_name}}&lt;/b&gt; nem lehet elt&aacute;vol&iacute;tani, mert m&eacute;g haszn&aacute;latban van a k&ouml;v&agrave;oldalon: {{pages}}.&lt;br /&gt;&lt;br /&gt;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'ez az oldal;ezek az oldalak';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Nem lehet elt&aacute;vol&iacute;tani ezt a sablont: &lt;b&gt;{{name}}&lt;/b&gt;, mert ez az alap&eacute;rtelmezett!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Kicsomagol&aacute;s nem lehets&eacute;ges';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'File felt&ouml;lt&eacute;s nem lehets&eacute;ges';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'F&aacute;jl megnyit&aacute;s hiba.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'A felt&ouml;lt&ouml;tt file csak ilyen form&aacute;tum&uacute; lehet:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'A felt&ouml;lt&ouml;tt file-ok csak a k&ouml;vetkez&agrave;form&aacute;tumuak lehetnek:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'K&eacute;rem t&eacute;rjen vissza &eacute;s t&ouml;lts&ouml;n ki minden mez-?-?';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Telep&iacute;t&eacute;s sikeres';
+$MESSAGE['GENERIC_INVALID'] = 'A felt&ouml;lt&ouml;tt file nem megfelel&ccedil;';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = '&sup2;v&eacute;nytelen WebsiteBaker telep&iacute;t&agrave;f&aacute;jl. K&eacute;rlek ellen-?-?izd a *.zip form&aacute;tumot.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = '&sup2;v&eacute;nytelen WebsiteBaker nyelvi f&aacute;jl. K&eacute;rlek ellen-?-?izd a sz&ouml;veges f&aacute;jlt.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nincs telp&iacute;tve';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'K&eacute;rem v&aacute;rjon, ez eltarthat egy ideig.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'K&eacute;rem t&eacute;rjen vissza k&eacute;s-?-?b!';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Elt&aacute;vol&iacute;t&aacute;s sikeres';
+$MESSAGE['GENERIC_UPGRADED'] = 'Upgraded successfully';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'A Weboldal Karbantart&aacute;s Alatt';
+$MESSAGE['GROUPS_ADDED'] = 'Csoport sikeresen hozz&aacute;adva';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Biztos, hogy t&ouml;r&ouml;lni akarja a kijel&ouml;lt csoportot? (Minden felhaszn&aacute;l&oacute;ja t&ouml;rl-?-?ik)';
+$MESSAGE['GROUPS_DELETED'] = 'Csoport t&ouml;r&ouml;lve';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = '&sup2;es a csoportn&eacute;v';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Csoport n&eacute;v m&aacute;r l&eacute;tezik';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Nincs csoport';
+$MESSAGE['GROUPS_SAVED'] = 'Csoport elmentve';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Please enter a password';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'T&uacute;l hossz&uacute; jelsz&oacute;';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'T&uacute;l r&ouml;vid jelsz&oacute;';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Nem adott meg file kiterjeszt&eacute;st';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Nem adott meg &uacute;j nevet';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Nem lehet t&ouml;r&ouml;lni a kiv&aacute;lasztott k&ouml;nyvt&aacute;rat';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Nem lehet t&ouml;r&ouml;lni a kiv&aacute;lasztott file-t';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Nem siker&uuml;lt &aacute;tnevezni';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Biztos hogy t&ouml;rli a k&ouml;vetkez&agrave;file-t vagy k&ouml;nyvt&aacute;rat?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'K&ouml;nyvt&aacute;r t&ouml;r&ouml;lve';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'File t&ouml;r&ouml;lve';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Nem lehet ../ a c&eacute;l mez-?-?en';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Nem tartalmazhat ../ -t a k&ouml;nyvt&aacute;r n&eacute;v';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Ilyen nev-?-¦ k&ouml;nyvt&aacute;r m&aacute;r l&eacute;tezik';
+$MESSAGE['MEDIA_DIR_MADE'] = 'A k&ouml;nyvt&aacute;r sikeresen l&eacute;trehozva';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'nem siker&uuml;lt l&eacute;trehozni a k&ouml;nyvt&aacute;rat';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Ilyen nev-?-¦ file m&aacute;r l&eacute;tezik';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'File nem tal&aacute;lhat&oacute;';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Nem lehet ../ a n&eacute;vben';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nem lehet index.php a n&eacute;v';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nem tal&aacute;lhat&oacute; semmilyen m&eacute;dia file az aktu&aacute;lis k&ouml;nyvt&aacute;rban';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = '&acute;nevez&eacute;s sikeres';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' file sikeresen felt&ouml;ltve';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Nem lehet ../ in k&ouml;nyvt&aacute;r n&eacute;vben';
+$MESSAGE['MEDIA_UPLOADED'] = ' file sikeresen felt&ouml;ltve';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Sajn&aacute;ljuk, de ez az -?-¦rlap t&uacute;l sokszor lett kit&ouml;ltve egy &oacute;ran bel&uuml;l! K&eacute;rem pr&oacute;b&aacute;lja meg egy &oacute;ra m&uacute;lva';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'A megadott ellen&ouml;rz&agrave;k&oacute;d (vagy m&aacute;s n&eacute;ven Captcha) hib&aacute;s. Ha probl&eacute;m&aacute;d van elolvasni a Captcha k&oacute;dot, k&uuml;mailt ide: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'A k&ouml;vetkez&agrave;mez-?-?et k&ouml;telez&agrave;kit&ouml;ltenie';
+$MESSAGE['PAGES_ADDED'] = 'Lap sikeresen hozz&aacute;adva';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Lap c&iacute;msor sikeresen hozz&aacute;adva';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'K&eacute;rem adjon meg men&uuml; nevet';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'K&eacute;rem adjon meg Lap c&iacute;met';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Nem lehet l&eacute;trehozni az access filet a /pages k&ouml;nyvt&aacute;rban (nem megfelel&agrave;jogosults&aacute;gok)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Nem lehet t&ouml;r&ouml;lni az access filet a /pages k&ouml;nyvt&aacute;rban (nem megfelel&agrave;jogosults&aacute;gok)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Hiba a Lap &aacute;trendez&eacute;s k&ouml;zben';
+$MESSAGE['PAGES_DELETED'] = 'Lap t&ouml;r&ouml;lve';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Biztos, hogy t&ouml;r&ouml;lni akarja az adott lapot? (&eacute;s az &ouml;sszes al lapj&aacute;t)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Nincs joga m&oacute;dos&iacute;tani ezt a lapot';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Kattintson ide az Bevezet&agrave;Lap m&oacute;dos&iacute;t&aacute;s&aacute;hoz';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Nem lehet l&eacute;trehozni /pages/intro.php file-t (nincs megfelel&agrave;jogosults&aacute;g)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Bevezet&agrave;lap sikeresen elmentve';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Utolj&aacute;ra m&oacute;dos&iacute;totta:';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Lap nem tal&aacute;lhat&oacute;';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Hiba a lap ment&eacute;se k&ouml;zben';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Ilyen lap m&aacute;r l&eacute;tezik';
+$MESSAGE['PAGES_REORDERED'] = 'Lap sikeresen &aacute;trendezve';
+$MESSAGE['PAGES_RESTORED'] = 'lap vissza&aacute;ll&iacute;tva';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Visszat&eacute;r&eacute;s a lapokhoz';
+$MESSAGE['PAGES_SAVED'] = 'Lap sikeresen elmentve';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Lap be&aacute;ll&iacute;t&aacute;sok elmentve';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Szakasz tulajdons&aacute;gok elmentve';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'A jelenlegi jelsz&oacute; hib&aacute;s';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Sikeres ment&eacute;s';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-mail friss&iacute;tve';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'A jelsz&oacute; sikeresen megv&aacute;ltozott';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Figyelmeztet&eacute;s: A nem mentett v&aacute;ltoz&aacute;sok elvesznek';
+$MESSAGE['SETTINGS_SAVED'] = 'Be&aacute;ll&iacute;t&aacute;sok sikeresen elmentve';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'A konfigur&aacute;ci&oacute;s file nem nyithat&oacute; meg';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Nem lehets&eacute;ges a konfigur&aacute;ci&oacute;s file &iacute;r&aacute;sa';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Figyelmeztet&eacute;s: Ez csak tesztk&ouml;rnyezetben javasolt';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Bejelentkez&eacute;si r&eacute;szletek...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'E-mail c&iacute;met meg kell adnia';
+$MESSAGE['START_CURRENT_USER'] = 'Bejelentkezve mint:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Figyelmeztet&eacute;s! A telep&iacute;t&eacute;si k&ouml;nyvt&aacute;r m&eacute;g nem lett t&ouml;r&ouml;lve!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = '&curren;v a WebsiteBaker Admin fel&uuml;let&eacute;n';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Figyelem: A sablon megv&aacute;ltoztat&aacute;s&aacute;t a be&aacute;ll&iacute;t&aacute;sokban teheti meg';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Felhaszn&aacute;l&oacute; sikeresen hozz&aacute;adva';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Figyelem: A jelsz&oacute;t itt csak annak megv&aacute;ltoztat&aacute;sakor kell megadni';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Biztos, hogy t&ouml;r&ouml;lni a kiv&aacute;lasztott felhaszn&aacute;l&oacute;t?';
+$MESSAGE['USERS_DELETED'] = 'Felhaszn&aacute;l&oacute; t&ouml;r&ouml;lve';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Sajnos a megadott E-mail c&iacute;met m&aacute;r haszn&aacute;latban van';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Az E-mail c&iacute;m nem val&oacute;s';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Csoport nincs kiv&aacute;lasztva';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'A be&iacute;rt jelsz&oacute; nem eggyezik';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'A be&iacute;rt jelsz&oacute; t&uacute;l r&ouml;vid';
+$MESSAGE['USERS_SAVED'] = 'Felhaszn&aacute;l&oacute; sikeresen mentve';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'WebsiteBaker adminisztr&aacute;ci&oacute;s eszk&ouml;z&ouml;k...';
+$OVERVIEW['GROUPS'] = 'Csoportok &eacute;s azok rendszer jogainak kezel&eacute;se...';
+$OVERVIEW['HELP'] = 'K&eacute;rd&eacute;sed van? itt tal&aacute;lsz v&aacute;laszt...  (Angol)';
+$OVERVIEW['LANGUAGES'] = 'WebsiteBaker nyelvi be&aacute;ll&iacute;t&aacute;sok...';
+$OVERVIEW['MEDIA'] = 'A "media" k&ouml;nyvt&aacute;rban t&aacute;rolt fileok kezel&eacute;se...';
+$OVERVIEW['MODULES'] = 'WebsiteBaker modulok kezel&eacute;se...';
+$OVERVIEW['PAGES'] = 'A Port&aacute;l Weblapjainak kezel&eacute;se...';
+$OVERVIEW['PREFERENCES'] = 'Be&aacute;ll&iacute;t&aacute;sok megv&aacute;ltoztat&aacute;sa mint: email, jelsz&oacute;, stb... ';
+$OVERVIEW['SETTINGS'] = 'A rendszer glob&aacute;lis be&aacute;ll&iacute;t&aacute;sa...';
+$OVERVIEW['START'] = 'Admin &aacute;ttekint&eacute;s';
+$OVERVIEW['TEMPLATES'] = 'A Honlap megjelen&eacute;s&eacute;nek v&aacute;ltoztat&aacute;sa Sablonokkal...';
+$OVERVIEW['USERS'] = 'Felhaszn&aacute;l&oacute;k bejelentkez&eacute;si enged&eacute;lyei...';
+$OVERVIEW['VIEW'] = 'A k&eacute;sz Port&aacute;l megtekint&eacute;se &uacute;j ablakban...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/HU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/IT.php
===================================================================
--- trunk/languages/IT.php	(nonexistent)
+++ trunk/languages/IT.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'IT';
+$language_name = 'Italiano';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Roberto Rossi';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Accesso';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Add-ons';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Recupera dati di login';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Gruppi';
+$MENU['HELP'] = 'Aiuto';
+$MENU['LANGUAGES'] = 'Lingua';
+$MENU['LOGIN'] = 'Login';
+$MENU['LOGOUT'] = 'Log-out';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Moduli';
+$MENU['PAGES'] = 'Pagine';
+$MENU['PREFERENCES'] = 'Preferenze';
+$MENU['SETTINGS'] = 'Impostazioni';
+$MENU['START'] = 'Avvio';
+$MENU['TEMPLATES'] = 'Templates';
+$MENU['USERS'] = 'Utenti';
+$MENU['VIEW'] = 'Visualizza';
+$TEXT['ACCOUNT_SIGNUP'] = 'Iscrizione Account';
+$TEXT['ACTIONS'] = 'Azioni';
+$TEXT['ACTIVE'] = 'Attivo';
+$TEXT['ADD'] = 'Aggiungi';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Aggiungi Sezione';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Amministrazione';
+$TEXT['ADMINISTRATION_TOOL'] = 'Tool di Amministrazione';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Amministratori';
+$TEXT['ADVANCED'] = 'Avanzato';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Permetti selezioni multiple';
+$TEXT['ALL_WORDS'] = 'Tutte le parole';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonimo';
+$TEXT['ANY_WORDS'] = 'Qualsiasi parola';
+$TEXT['APP_NAME'] = 'Nome Applicazione';
+$TEXT['ARE_YOU_SURE'] = 'Sei sicuro?';
+$TEXT['AUTHOR'] = 'Autore';
+$TEXT['BACK'] = 'Indietro';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Backup del Database';
+$TEXT['BACKUP_MEDIA'] = 'Backup Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'Base';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Annulla';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'verificaCaptcha ';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Cambia';
+$TEXT['CHANGES'] = 'Modifiche';
+$TEXT['CHANGE_SETTINGS'] = 'Cambia Impostazioni';
+$TEXT['CHARSET'] = 'Caratteri';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox Gruppo';
+$TEXT['CLOSE'] = 'Chiudi';
+$TEXT['CODE'] = 'Codice';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Restringi';
+$TEXT['COMMENT'] = 'Commento';
+$TEXT['COMMENTING'] = 'Commentare';
+$TEXT['COMMENTS'] = 'Commenti';
+$TEXT['CREATE_FOLDER'] = 'Crea Cartella';
+$TEXT['CURRENT'] = 'Corrente';
+$TEXT['CURRENT_FOLDER'] = 'Cartella corrente';
+$TEXT['CURRENT_PAGE'] = 'Pagina corrente';
+$TEXT['CURRENT_PASSWORD'] = 'Password corrente';
+$TEXT['CUSTOM'] = 'Custom';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Data';
+$TEXT['DATE_FORMAT'] = 'Formato data';
+$TEXT['DEFAULT'] = 'Default';
+$TEXT['DEFAULT_CHARSET'] = 'Carattere di Default';
+$TEXT['DEFAULT_TEXT'] = 'Testo di default';
+$TEXT['DELETE'] = 'Elimina';
+$TEXT['DELETED'] = 'Eliminato';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Descrizione';
+$TEXT['DESIGNED_FOR'] = 'Progettato per';
+$TEXT['DIRECTORIES'] = 'Directories';
+$TEXT['DIRECTORY_MODE'] = 'Modalit&agrave; Directory';
+$TEXT['DISABLED'] = 'Disabilitato';
+$TEXT['DISPLAY_NAME'] = 'Mostra il nome';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Indirizzo Email';
+$TEXT['EMPTY_TRASH'] = 'Svuota Cestino';
+$TEXT['ENABLED'] = 'Abilitato';
+$TEXT['END'] = 'Fine';
+$TEXT['ERROR'] = 'Errore';
+$TEXT['EXACT_MATCH'] = 'Confronto Esatto';
+$TEXT['EXECUTE'] = 'Esecuzione';
+$TEXT['EXPAND'] = 'Espandi';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Campo';
+$TEXT['FILE'] = 'File';
+$TEXT['FILES'] = 'Files';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Permessi del Filesystem';
+$TEXT['FILE_MODE'] = 'Modalit&agrave; File';
+$TEXT['FINISH_PUBLISHING'] = 'Fine publicazione';
+$TEXT['FOLDER'] = 'Cartella';
+$TEXT['FOLDERS'] = 'Folders';
+$TEXT['FOOTER'] = 'Pi&egrave; di pagina';
+$TEXT['FORGOTTEN_DETAILS'] = 'Dimenticati i dati?';
+$TEXT['FORGOT_DETAILS'] = 'Dimenticato i dati?';
+$TEXT['FROM'] = 'Da';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Nome completo';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Gruppo';
+$TEXT['HEADER'] = 'Intestazione';
+$TEXT['HEADING'] = 'Intestazione';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Altezza';
+$TEXT['HIDDEN'] = 'Nascosto';
+$TEXT['HIDE'] = 'Nascondi';
+$TEXT['HIDE_ADVANCED'] = 'Nascondi opzioni avanzate';
+$TEXT['HOME'] = 'Home';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Homepage Redirezione';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Icona';
+$TEXT['IMAGE'] = 'Immagine';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Installa';
+$TEXT['INSTALLATION'] = 'Installazione';
+$TEXT['INSTALLATION_PATH'] = 'Path di installazione';
+$TEXT['INSTALLATION_URL'] = 'URL di installazione';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Introduzione';
+$TEXT['INTRO_PAGE'] = 'Pagina d\'introduzione';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Parole chiave';
+$TEXT['LANGUAGE'] = 'Lingua';
+$TEXT['LAST_UPDATED_BY'] = 'Ultima modifica di';
+$TEXT['LENGTH'] = 'Lunghezza';
+$TEXT['LEVEL'] = 'Livello';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix based';
+$TEXT['LIST_OPTIONS'] = 'Opzioni di elenco';
+$TEXT['LOGGED_IN'] = 'Logged-In';
+$TEXT['LOGIN'] = 'Login';
+$TEXT['LONG'] = 'Estesa';
+$TEXT['LONG_TEXT'] = 'Testo lungo';
+$TEXT['LOOP'] = 'Loop';
+$TEXT['MAIN'] = 'Principale';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Gestisci';
+$TEXT['MANAGE_GROUPS'] = 'Gestisci i Gruppi';
+$TEXT['MANAGE_USERS'] = 'Gestisci gli Utenti';
+$TEXT['MATCH'] = 'Confronto';
+$TEXT['MATCHING'] = 'Confronto';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Iscizioni per ora';
+$TEXT['MEDIA_DIRECTORY'] = 'Media Directory';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Titolo Menu';
+$TEXT['MESSAGE'] = 'Messaggio';
+$TEXT['MODIFY'] = 'Modifica';
+$TEXT['MODIFY_CONTENT'] = 'Modifica Contenuto';
+$TEXT['MODIFY_SETTINGS'] = 'Modifica Impostazioni';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Permessi del Modulo';
+$TEXT['MORE'] = 'Continua';
+$TEXT['MOVE_DOWN'] = 'Muovi gi&Atilde;&sup1;';
+$TEXT['MOVE_UP'] = 'Muovi su';
+$TEXT['MULTIPLE_MENUS'] = 'Menu multipli';
+$TEXT['MULTISELECT'] = 'Multi-selezione';
+$TEXT['NAME'] = 'Nome';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Bisogno di login?';
+$TEXT['NEW_PASSWORD'] = 'Nuova Password';
+$TEXT['NEW_WINDOW'] = 'Nuova finestra';
+$TEXT['NEXT'] = 'Successivo';
+$TEXT['NEXT_PAGE'] = 'Pagina successiva';
+$TEXT['NO'] = 'No';
+$TEXT['NONE'] = 'Nessuna';
+$TEXT['NONE_FOUND'] = 'Nessuno trovato';
+$TEXT['NOT_FOUND'] = 'Non trovato';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Nessun risultato';
+$TEXT['OF'] = 'Di';
+$TEXT['ON'] = 'Su';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Opzioni';
+$TEXT['OTHERS'] = 'Altri';
+$TEXT['OUT_OF'] = 'Di';
+$TEXT['OVERWRITE_EXISTING'] = 'Sovrascrivi esistenti';
+$TEXT['PAGE'] = 'Pagina';
+$TEXT['PAGES_DIRECTORY'] = 'Pagine Directory';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Estensione di Pagina';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Pagina Lingue';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limite del livello di pagina';
+$TEXT['PAGE_SPACER'] = 'Separatore di Pagina';
+$TEXT['PAGE_TITLE'] = 'Titolo Pagina';
+$TEXT['PAGE_TRASH'] = 'Cestino';
+$TEXT['PARENT'] = 'Parente';
+$TEXT['PASSWORD'] = 'Password';
+$TEXT['PATH'] = 'Path';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Error Reporting Level';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Prego seleziona';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Post Per Pagina';
+$TEXT['POST_FOOTER'] = 'Post Pi&egrave; di pagina';
+$TEXT['POST_HEADER'] = 'Post Intestazione';
+$TEXT['PREVIOUS'] = 'Precedente';
+$TEXT['PREVIOUS_PAGE'] = 'Pagina precedente';
+$TEXT['PRIVATE'] = 'Privato';
+$TEXT['PRIVATE_VIEWERS'] = 'Visione privata';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Pubblico';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Button Gruppo';
+$TEXT['READ'] = 'Lettura';
+$TEXT['READ_MORE'] = 'Continua a leggere';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrato';
+$TEXT['REGISTERED_VIEWERS'] = 'Utenti registrati';
+$TEXT['RELOAD'] = 'Ricarica';
+$TEXT['REMEMBER_ME'] = 'Ricordami';
+$TEXT['RENAME'] = 'Rinomina';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Obbligatorio';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Resetta';
+$TEXT['RESIZE'] = 'Ridimensiona';
+$TEXT['RESIZE_IMAGE_TO'] = 'Ridimensiona immagine a';
+$TEXT['RESTORE'] = 'Restore';
+$TEXT['RESTORE_DATABASE'] = 'Restore del Database';
+$TEXT['RESTORE_MEDIA'] = 'Restore Media';
+$TEXT['RESULTS'] = 'Risultati';
+$TEXT['RESULTS_FOOTER'] = 'Risultati Pi&egrave; di pagina';
+$TEXT['RESULTS_FOR'] = 'Risultati per';
+$TEXT['RESULTS_HEADER'] = 'Risultati Intestazione';
+$TEXT['RESULTS_LOOP'] = 'Risultati Loop';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Riscrivi Nuova Password';
+$TEXT['RETYPE_PASSWORD'] = 'Riscrivi Password';
+$TEXT['SAME_WINDOW'] = 'Stessa finestra';
+$TEXT['SAVE'] = 'Salva';
+$TEXT['SEARCH'] = 'Ricerca';
+$TEXT['SEARCHING'] = 'Ricerca';
+$TEXT['SECTION'] = 'Sezione';
+$TEXT['SECTION_BLOCKS'] = 'Blocchi di Sezione';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Campo di selezione';
+$TEXT['SEND_DETAILS'] = 'Invia i dati';
+$TEXT['SEPARATE'] = 'Separa';
+$TEXT['SEPERATOR'] = 'Separatore';
+$TEXT['SERVER_EMAIL'] = 'Server Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Server Operating System';
+$TEXT['SESSION_IDENTIFIER'] = 'Identificazione della sessione';
+$TEXT['SETTINGS'] = 'Settings';
+$TEXT['SHORT'] = 'Breve';
+$TEXT['SHORT_TEXT'] = 'Testo breve';
+$TEXT['SHOW'] = 'Mostra';
+$TEXT['SHOW_ADVANCED'] = 'Mostra opzioni avanzate';
+$TEXT['SIGNUP'] = 'Iscrizione';
+$TEXT['SIZE'] = 'Dimensione';
+$TEXT['SMART_LOGIN'] = 'Smart Login';
+$TEXT['START'] = 'Avvio';
+$TEXT['START_PUBLISHING'] = 'Inizio pubblicazione';
+$TEXT['SUBJECT'] = 'Soggetto';
+$TEXT['SUBMISSIONS'] = 'Iscrizioni';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Iscrizioni memorizzate nel Database';
+$TEXT['SUBMISSION_ID'] = 'Iscrizione ID';
+$TEXT['SUBMITTED'] = 'Iscritto';
+$TEXT['SUCCESS'] = 'Successo';
+$TEXT['SYSTEM_DEFAULT'] = 'Default di sistema';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Permessi di sistema';
+$TEXT['TABLE_PREFIX'] = 'Table Prefix';
+$TEXT['TARGET'] = 'Destinazione';
+$TEXT['TARGET_FOLDER'] = 'Cartella di destinazione';
+$TEXT['TEMPLATE'] = 'Template';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Permessi dei Template';
+$TEXT['TEXT'] = 'Testo';
+$TEXT['TEXTAREA'] = 'Area di testo';
+$TEXT['TEXTFIELD'] = 'Campo di testo';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Ora';
+$TEXT['TIMEZONE'] = 'Fuso orario';
+$TEXT['TIME_FORMAT'] = 'Formato ora';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Titolo';
+$TEXT['TO'] = 'A';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = 'Cestino Svuotato';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tipo';
+$TEXT['UNDER_CONSTRUCTION'] = 'In costruzione';
+$TEXT['UNINSTALL'] = 'Disinstalla';
+$TEXT['UNKNOWN'] = 'Sconosciuto';
+$TEXT['UNLIMITED'] = 'Illimitato';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Su';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Carica File(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'User';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifica';
+$TEXT['VERSION'] = 'Versione';
+$TEXT['VIEW'] = 'Vedi';
+$TEXT['VIEW_DELETED_PAGES'] = 'Vedi Pagine Eliminate';
+$TEXT['VIEW_DETAILS'] = 'Vedi dettagli';
+$TEXT['VISIBILITY'] = 'Visibilit&agrave;';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Website Descrizione';
+$TEXT['WEBSITE_FOOTER'] = 'Website Pi&egrave; di pagina';
+$TEXT['WEBSITE_HEADER'] = 'Website Intestazione';
+$TEXT['WEBSITE_KEYWORDS'] = 'Website Parole chiave';
+$TEXT['WEBSITE_TITLE'] = 'Website Titolo';
+$TEXT['WELCOME_BACK'] = 'Bentornato';
+$TEXT['WIDTH'] = 'Larghezza';
+$TEXT['WINDOW'] = 'Finestra';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Permesso di scrittura file a chiunque';
+$TEXT['WRITE'] = 'Scrittura';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Style';
+$TEXT['YES'] = 'S&igrave;';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Aggiungi Gruppo';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Aggiungi una Intestazione';
+$HEADING['ADD_PAGE'] = 'Aggiungi una pagina';
+$HEADING['ADD_USER'] = 'Aggiungi Utente';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Tool di Amministrazione';
+$HEADING['BROWSE_MEDIA'] = 'Sfoglia i Media';
+$HEADING['CREATE_FOLDER'] = 'Crea cartella';
+$HEADING['DEFAULT_SETTINGS'] = 'Impostazioni Default';
+$HEADING['DELETED_PAGES'] = 'Pagine cancellate';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Impostazioni del Filesystem';
+$HEADING['GENERAL_SETTINGS'] = 'Impostazioni Generali';
+$HEADING['INSTALL_LANGUAGE'] = 'Installa lingua';
+$HEADING['INSTALL_MODULE'] = 'Installa il Modulo';
+$HEADING['INSTALL_TEMPLATE'] = 'Installa un Template';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Dettagli lingua';
+$HEADING['MANAGE_SECTIONS'] = 'Gestisci le sezioni';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modifica impostazioni avanzate';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modifica/Elimina Gruppo';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modifica/Elimina una pagina';
+$HEADING['MODIFY_DELETE_USER'] = 'Modifica/Elimina Utente';
+$HEADING['MODIFY_GROUP'] = 'Modifica Gruppo';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modifica la pagina d\'introduzione';
+$HEADING['MODIFY_PAGE'] = 'Modifica la pagina';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modifica Page Settings';
+$HEADING['MODIFY_USER'] = 'Modifica Utente';
+$HEADING['MODULE_DETAILS'] = 'Dettagli del Modulo';
+$HEADING['MY_EMAIL'] = 'Mia Email';
+$HEADING['MY_PASSWORD'] = 'Mia Password';
+$HEADING['MY_SETTINGS'] = 'Mie impostazioni';
+$HEADING['SEARCH_SETTINGS'] = 'Impostazioni di Ricerca';
+$HEADING['SERVER_SETTINGS'] = 'Impostazioni del Server ';
+$HEADING['TEMPLATE_DETAILS'] = 'Dettagli Template';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Disinstalla lingua';
+$HEADING['UNINSTALL_MODULE'] = 'Disinstalla il Modulo';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Disinstalla il Template';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Carica i File';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Privilegi insufficienti per essere qui';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'La Password non pu&Atilde;&sup2; essere modificata pi&Atilde;&sup1; di una volta all\'ora';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Impossibile inviare l\'email. Contattare l\'ammnistratore';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'L\'Email inserita non &egrave; stata trovata nel database';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Prego inserire email';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Spaicente, non ha i permessi per vedere la pagina';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Gi&agrave; installato';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Impossibile scrivere sulla directory';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Impossibile disinstallare';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Impossibile disisntallare: file in uso';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'impossibile decomprimere il file';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Impossibile caricare i file';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Errore nella apertura del file.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Nota che il file caricato deve essere dei seguenti formati:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Nota che i file caricati devono essere dei seguenti formati:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Prego torna indietro e compila tutti i campi';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installato con successo';
+$MESSAGE['GENERIC_INVALID'] = 'Il file caricato &egrave; non valido';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Non installato';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Attendi pazientemente...';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Torna presto...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Disinstallato con successo';
+$MESSAGE['GENERIC_UPGRADED'] = 'Aggiornato con successo';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GROUPS_ADDED'] = 'Gruppo aggiunto';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Sei sicuro di voler eliminare il gruppo selezionato e tutti i suoi utenti?';
+$MESSAGE['GROUPS_DELETED'] = 'Gruppo eliminato';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Il nome del Gruppo &egrave; vuoto';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Nome di Gruppo gia Esistente';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Nessun gruppo trovato';
+$MESSAGE['GROUPS_SAVED'] = 'Gruppo salvato';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Prego inserire una password';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Password troppo lunga';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Password troppo corta';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Non hai inserito una estensione del file';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Non hai inserito un nuovo nome';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'impossibile eliminare la cartella';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Impossibile eliminare il file';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Impossibile rinominare';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Sei sicuro di voler eliminare il file o la cartella corrente?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Cartella eliminata';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'File eliminato';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'La Cartella non esiste';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Impossibile includere ../ nel nome della cartella';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Esiste gi&agrave; una cartella con lo stesso nome';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Cartella creata';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Impossibile creare la cartella';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Esiste gi&agrave; un file con lo stesso nome';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'File non trovato';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Impossibile includere ../ nel nome';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Impossibile usare index.php come nome';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nessun Media trovato nella cartella corrente';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Rinominato con successo';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' file caricato con successo';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Impossibile avere ../ nella cartella di destinazione';
+$MESSAGE['MEDIA_UPLOADED'] = ' file sono stati caricati con successo';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Spiacente: hai compilato questa form troppe volte nell\'ultima ora.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Il numero di controllo (chiama Captcha) che hai inserito non &egrave; valido. Se hai problemi con la lettura del Captcha, invia un email email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Devi inserire tutti i dati nei seguenti campi';
+$MESSAGE['PAGES_ADDED'] = 'Pagina aggiunta';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Pagina intestazione aggiunta';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Prego inserisci un titolo';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Prego inserisci un titolo';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Errore nel creare un file di permessi (privilegi insufficienti)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Errore nel cancellare un file di permessi (privilegi insufficienti)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Errore nel riordinare la pagina';
+$MESSAGE['PAGES_DELETED'] = 'Pagina eliminata';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Sei sicuro di voler eliminare la pagina e tutte le sotto-pagine?';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Non hai i permessi per modificare la pagina';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Clicca qui per modificare la pagina d\'introduzione';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Impossibile scrivere sul file /pages/intro.php (privilegi insufficienti)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Pagina di introduzione salvata';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Ultima modifica di';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Pagina non trovata';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Errore nel salvare la pagina';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Esiste gi&agrave; una pagina con lo stesso nome';
+$MESSAGE['PAGES_REORDERED'] = 'Pagina riordinata';
+$MESSAGE['PAGES_RESTORED'] = 'Pagina recuperata';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Ritorna alle pagine';
+$MESSAGE['PAGES_SAVED'] = 'Pagina salvata';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Impostazioni della pagina salvate';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Propriet&agrave; di sezione salvate';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'La password corrente inserita &egrave; errata';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Dettagli salvati';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email aggiornata';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Password cambiata';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Attenzione: premendo questo pulsante si resettano le impostazioni modificate e non salvate';
+$MESSAGE['SETTINGS_SAVED'] = 'Impostazioni salvate con successo';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Impossibile aprire il file di configurazione';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Impossibile scrivere il file di configurazione';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Raccomandato solo in fase di test';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Deve inserire un indirizzo di email';
+$MESSAGE['START_CURRENT_USER'] = 'Sei registrato come:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Attenzione, la directory di installazione esiste gi&agrave;!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Benvenuto alla pagina di Amministrazione di WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Per cambiare il Template andare alla sezione Impostazioni';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Utente aggiunto';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Attenzione: devi inserire solo valori validi se vuoi cambiare la password utente';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Sei sicuro di voler eliminare gli utenti selezionati?';
+$MESSAGE['USERS_DELETED'] = 'Utente eliminato';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Email gi&agrave; in uso';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Email non valida';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Nessun gruppo selezionato';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Le password non coincidono';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Password troppo corta';
+$MESSAGE['USERS_SAVED'] = 'Utente salvato';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Gestisci gruppi utenti e permessi...';
+$OVERVIEW['HELP'] = 'Trova risposte alle tue domande...';
+$OVERVIEW['LANGUAGES'] = 'Gestisci le lingue del sito...';
+$OVERVIEW['MEDIA'] = 'Gestisci i file nella cartella Media...';
+$OVERVIEW['MODULES'] = 'Gestisci i moduli di WebsiteBaker...';
+$OVERVIEW['PAGES'] = 'Gestisci le pagine del sito...';
+$OVERVIEW['PREFERENCES'] = 'Cambia preferenze come email, password, etc... ';
+$OVERVIEW['SETTINGS'] = 'Cambia le impostazioni di WebsiteBaker...';
+$OVERVIEW['START'] = 'Funzioni di amministrazione';
+$OVERVIEW['TEMPLATES'] = 'Cambia la grafica del sito con i templates...';
+$OVERVIEW['USERS'] = 'Gestisci gli utenti che possono collegarsi a WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Visualizza il sito in una nuova finestra...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/IT.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/LV.php
===================================================================
--- trunk/languages/LV.php	(nonexistent)
+++ trunk/languages/LV.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'LV';
+$language_name = 'Latviešu'; // Latvian
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Kri&scaron;janis Rijnieks';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Piekluve';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Papildinajumi';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Informacija par kontu';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupas';
+$MENU['HELP'] = 'Palidziba';
+$MENU['LANGUAGES'] = 'Valodas';
+$MENU['LOGIN'] = 'Ielogoties';
+$MENU['LOGOUT'] = 'Izlogoties';
+$MENU['MEDIA'] = 'Mediji';
+$MENU['MODULES'] = 'Moduli';
+$MENU['PAGES'] = 'Lapas';
+$MENU['PREFERENCES'] = 'Preferences';
+$MENU['SETTINGS'] = 'Iestatijumi';
+$MENU['START'] = 'Sakums';
+$MENU['TEMPLATES'] = '&scaron;abloni';
+$MENU['USERS'] = 'Lietotaji';
+$MENU['VIEW'] = 'Apskatit';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registreties';
+$TEXT['ACTIONS'] = 'Darbibas';
+$TEXT['ACTIVE'] = 'Aktivs';
+$TEXT['ADD'] = 'Pievienot';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Pievienot sadalu';
+$TEXT['ADMIN'] = 'Admins';
+$TEXT['ADMINISTRATION'] = 'Administracija';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administracijas riks';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratori';
+$TEXT['ADVANCED'] = 'Papla&scaron;inats';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Atlauti lukotaji';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Atlaut multiiezime&scaron;anu';
+$TEXT['ALL_WORDS'] = 'Visi vardi';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonims';
+$TEXT['ANY_WORDS'] = 'Jebkuri vardi';
+$TEXT['APP_NAME'] = 'Programmas nosaukums';
+$TEXT['ARE_YOU_SURE'] = 'Esi parliecinats?';
+$TEXT['AUTHOR'] = 'Autors';
+$TEXT['BACK'] = 'Atpakal';
+$TEXT['BACKUP'] = 'Duble&scaron;ana';
+$TEXT['BACKUP_ALL_TABLES'] = 'Atjaunot visas tabulas datu baze';
+$TEXT['BACKUP_DATABASE'] = 'Dublet datu bazi';
+$TEXT['BACKUP_MEDIA'] = 'Dublet medijus';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Atjaunot tikai WB raksturigas tabulas';
+$TEXT['BASIC'] = 'Pamata';
+$TEXT['BLOCK'] = 'Bloks';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Atcelt';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Parbaudes kods';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Mainit';
+$TEXT['CHANGES'] = 'Izmainas';
+$TEXT['CHANGE_SETTINGS'] = 'Mainit iestatijumus';
+$TEXT['CHARSET'] = 'Simbolu kopa';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox grupa';
+$TEXT['CLOSE'] = 'Aizvert';
+$TEXT['CODE'] = 'Kods';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Aizvert';
+$TEXT['COMMENT'] = 'Komentars';
+$TEXT['COMMENTING'] = 'Tiek komentets';
+$TEXT['COMMENTS'] = 'Komentari';
+$TEXT['CREATE_FOLDER'] = 'Izveidot mapi';
+$TEXT['CURRENT'] = 'Eso&scaron;ais';
+$TEXT['CURRENT_FOLDER'] = 'Pa&scaron;reizeja mape';
+$TEXT['CURRENT_PAGE'] = 'Pa&scaron;reizeja lapa';
+$TEXT['CURRENT_PASSWORD'] = 'Eso&scaron;a parole';
+$TEXT['CUSTOM'] = 'Savs';
+$TEXT['DATABASE'] = 'Datu baze';
+$TEXT['DATE'] = 'Datums';
+$TEXT['DATE_FORMAT'] = 'Datuma formats';
+$TEXT['DEFAULT'] = 'Noklusetais';
+$TEXT['DEFAULT_CHARSET'] = 'Nokluseta simbolu kopa';
+$TEXT['DEFAULT_TEXT'] = 'Noklusetais teksts';
+$TEXT['DELETE'] = 'Dzest';
+$TEXT['DELETED'] = 'Dzests';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Apraksts';
+$TEXT['DESIGNED_FOR'] = 'Dizainets priek&scaron;';
+$TEXT['DIRECTORIES'] = 'Mapes';
+$TEXT['DIRECTORY_MODE'] = 'Mapju re&#382;ims';
+$TEXT['DISABLED'] = 'Izslegts';
+$TEXT['DISPLAY_NAME'] = 'Vards';
+$TEXT['EMAIL'] = 'E-pasta adrese';
+$TEXT['EMAIL_ADDRESS'] = 'E-pasta adrese';
+$TEXT['EMPTY_TRASH'] = 'Iztuk&scaron;ot musaru';
+$TEXT['ENABLED'] = 'Ieslegts';
+$TEXT['END'] = 'Beigas';
+$TEXT['ERROR'] = 'Keza';
+$TEXT['EXACT_MATCH'] = 'Viens pret vienu';
+$TEXT['EXECUTE'] = 'Izpildit';
+$TEXT['EXPAND'] = 'Atvert';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Lauks';
+$TEXT['FILE'] = 'Datne';
+$TEXT['FILES'] = 'Datnes';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Datnu sistemas atlaujas';
+$TEXT['FILE_MODE'] = 'Datnu re&#382;ims';
+$TEXT['FINISH_PUBLISHING'] = 'Beigt publicet';
+$TEXT['FOLDER'] = 'Mape';
+$TEXT['FOLDERS'] = 'Mapes';
+$TEXT['FOOTER'] = 'Kajene';
+$TEXT['FORGOTTEN_DETAILS'] = 'Kaut ko nevari atcereties?';
+$TEXT['FORGOT_DETAILS'] = 'Aizmirsi detalas?';
+$TEXT['FROM'] = 'No';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Vards';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupa';
+$TEXT['HEADER'] = 'Galvene';
+$TEXT['HEADING'] = 'Virsraksts';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Augstums';
+$TEXT['HIDDEN'] = 'Slepts';
+$TEXT['HIDE'] = 'Slept';
+$TEXT['HIDE_ADVANCED'] = 'Slept papla&scaron;inatas opcijas';
+$TEXT['HOME'] = 'Galvena lapa';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirekcija';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Hosts';
+$TEXT['ICON'] = 'Ikona';
+$TEXT['IMAGE'] = 'Attels';
+$TEXT['INLINE'] = 'Ieslegts';
+$TEXT['INSTALL'] = 'Instalet';
+$TEXT['INSTALLATION'] = 'Instalacija';
+$TEXT['INSTALLATION_PATH'] = 'Cel&scaron; uz instalaciju';
+$TEXT['INSTALLATION_URL'] = 'Instalacijas URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Ievads';
+$TEXT['INTRO_PAGE'] = 'Ievada lapa';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Atslegvardi';
+$TEXT['LANGUAGE'] = 'Valoda';
+$TEXT['LAST_UPDATED_BY'] = 'Pedejo reizi mainits';
+$TEXT['LENGTH'] = 'Garums';
+$TEXT['LEVEL'] = 'Limenis';
+$TEXT['LINK'] = 'Links';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Listes opcijas';
+$TEXT['LOGGED_IN'] = 'Ielogojies';
+$TEXT['LOGIN'] = 'Ielogo&scaron;anas';
+$TEXT['LONG'] = 'Gar&scaron;s';
+$TEXT['LONG_TEXT'] = 'Gar&scaron; teksts';
+$TEXT['LOOP'] = 'Cikls';
+$TEXT['MAIN'] = 'Galvenais';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Mened&#382;et';
+$TEXT['MANAGE_GROUPS'] = 'Mened&#382;et grupas';
+$TEXT['MANAGE_USERS'] = 'Mened&#382;et lietotajus';
+$TEXT['MATCH'] = 'Sakritiba';
+$TEXT['MATCHING'] = 'Saskan';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Pieteikumi stunda';
+$TEXT['MEDIA_DIRECTORY'] = 'Mediju mape';
+$TEXT['MENU'] = 'Izvelne';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Izvelnes nosaukums';
+$TEXT['MESSAGE'] = 'Zina';
+$TEXT['MODIFY'] = 'Mainit';
+$TEXT['MODIFY_CONTENT'] = 'Mainit saturu';
+$TEXT['MODIFY_SETTINGS'] = 'Mainir iestatijumus';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Atlaujas attieciba uz moduliem';
+$TEXT['MORE'] = 'Vel';
+$TEXT['MOVE_DOWN'] = 'Bidit lejup';
+$TEXT['MOVE_UP'] = 'Bidit aug&scaron;up';
+$TEXT['MULTIPLE_MENUS'] = 'Vairakas izvelnes';
+$TEXT['MULTISELECT'] = 'Multiiezime&scaron;ana';
+$TEXT['NAME'] = 'Nosaukums';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Gribi ielogoties?';
+$TEXT['NEW_PASSWORD'] = 'Jauna parole';
+$TEXT['NEW_WINDOW'] = 'Jauns logs';
+$TEXT['NEXT'] = 'Nakamais';
+$TEXT['NEXT_PAGE'] = 'Nakama lapa';
+$TEXT['NO'] = 'Ne';
+$TEXT['NONE'] = 'Tuk&scaron;s';
+$TEXT['NONE_FOUND'] = 'Nekas netika atrasts';
+$TEXT['NOT_FOUND'] = 'Netika atrasts';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Rezultatu nav';
+$TEXT['OF'] = 'No';
+$TEXT['ON'] = 'ieslegts';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Opcija';
+$TEXT['OTHERS'] = 'Citi';
+$TEXT['OUT_OF'] = 'Ara no';
+$TEXT['OVERWRITE_EXISTING'] = 'Parrakstit eso&scaron;as';
+$TEXT['PAGE'] = 'Lapa';
+$TEXT['PAGES_DIRECTORY'] = 'Lapu mape';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Lapas papla&scaron;inajums';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Lapas valodas';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Lapu apak&scaron;limenu limits';
+$TEXT['PAGE_SPACER'] = 'Lapas starplika';
+$TEXT['PAGE_TITLE'] = 'Lapas nosaukums';
+$TEXT['PAGE_TRASH'] = 'Atkritumu tvertne lapam';
+$TEXT['PARENT'] = 'Vecaks';
+$TEXT['PASSWORD'] = 'Parole';
+$TEXT['PATH'] = 'Cel&scaron;';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Kludu zino&scaron;anas limenis';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Izvelies, ludzu';
+$TEXT['POST'] = 'Pievienot';
+$TEXT['POSTS_PER_PAGE'] = 'Puksti lapa';
+$TEXT['POST_FOOTER'] = 'Puksta kajene';
+$TEXT['POST_HEADER'] = 'Puksta galvene';
+$TEXT['PREVIOUS'] = 'Iepriek&scaron;ejais';
+$TEXT['PREVIOUS_PAGE'] = 'Iepriek&scaron;eja lapa';
+$TEXT['PRIVATE'] = 'Privats';
+$TEXT['PRIVATE_VIEWERS'] = 'Iek&scaron;ejie verotaji';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Publisks';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio pogu grupa';
+$TEXT['READ'] = 'Lasit';
+$TEXT['READ_MORE'] = 'Lasit vel';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrets';
+$TEXT['REGISTERED_VIEWERS'] = 'Registreti lukotaji';
+$TEXT['RELOAD'] = 'Parladet';
+$TEXT['REMEMBER_ME'] = 'Atmineties mani';
+$TEXT['RENAME'] = 'Parsaukt';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Obligats';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Parladet';
+$TEXT['RESIZE'] = 'Mainit izmeru';
+$TEXT['RESIZE_IMAGE_TO'] = 'Mainit attela izmeru uz';
+$TEXT['RESTORE'] = 'Atjaunot';
+$TEXT['RESTORE_DATABASE'] = 'Atjaunot datu bazi';
+$TEXT['RESTORE_MEDIA'] = 'Atjaunot medijus';
+$TEXT['RESULTS'] = 'Rezultati';
+$TEXT['RESULTS_FOOTER'] = 'Rezultatu kajene';
+$TEXT['RESULTS_FOR'] = 'Rezultati';
+$TEXT['RESULTS_HEADER'] = 'Rezultatu galvene';
+$TEXT['RESULTS_LOOP'] = 'Rezultatu cikls';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Parole velreiz';
+$TEXT['RETYPE_PASSWORD'] = 'Parole velreiz';
+$TEXT['SAME_WINDOW'] = 'Tas pats logs';
+$TEXT['SAVE'] = 'Saglabat';
+$TEXT['SEARCH'] = 'Meklet';
+$TEXT['SEARCHING'] = 'Tiek meklets';
+$TEXT['SECTION'] = 'Sadala';
+$TEXT['SECTION_BLOCKS'] = 'Sadalu bloki';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Select kaste (Select Box)';
+$TEXT['SEND_DETAILS'] = 'Sutit konta datus';
+$TEXT['SEPARATE'] = 'Atsevi&scaron;ki';
+$TEXT['SEPERATOR'] = 'Atdalitajs';
+$TEXT['SERVER_EMAIL'] = 'Servera e-pasta adrese';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Servera Operetajsistema';
+$TEXT['SESSION_IDENTIFIER'] = 'Sesijas identifikators';
+$TEXT['SETTINGS'] = 'Iestatijumi';
+$TEXT['SHORT'] = 'Iss';
+$TEXT['SHORT_TEXT'] = 'Iss teksts';
+$TEXT['SHOW'] = 'Radit';
+$TEXT['SHOW_ADVANCED'] = 'Radit papla&scaron;inatas opcijas';
+$TEXT['SIGNUP'] = 'Registracija';
+$TEXT['SIZE'] = 'Izmers';
+$TEXT['SMART_LOGIN'] = 'Atjautiga ielogo&scaron;anas';
+$TEXT['START'] = 'Sakums';
+$TEXT['START_PUBLISHING'] = 'Sakt publicet';
+$TEXT['SUBJECT'] = 'Nosaukums';
+$TEXT['SUBMISSIONS'] = 'Pieteikumi';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Pieteikumi tiek glabati datu baze';
+$TEXT['SUBMISSION_ID'] = 'Pieteikuma ID';
+$TEXT['SUBMITTED'] = 'Pieteikts';
+$TEXT['SUCCESS'] = 'Kartibnieks';
+$TEXT['SYSTEM_DEFAULT'] = 'Sistemas noklusetais';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Atlaujas attieciba uz sistemu';
+$TEXT['TABLE_PREFIX'] = 'Tabulas prefikss';
+$TEXT['TARGET'] = 'Merkis';
+$TEXT['TARGET_FOLDER'] = 'Merkmape';
+$TEXT['TEMPLATE'] = '&scaron;ablons';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Atlaujas attieciba uz &scaron;abloniem';
+$TEXT['TEXT'] = 'Teksts';
+$TEXT['TEXTAREA'] = 'Teksta lauks (Textarea)';
+$TEXT['TEXTFIELD'] = 'Teksta laucin&scaron; (Textfield)';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Laiks';
+$TEXT['TIMEZONE'] = 'Laika zona';
+$TEXT['TIME_FORMAT'] = 'Laika formats';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Nosaukums';
+$TEXT['TO'] = 'Uz';
+$TEXT['TOP_FRAME'] = 'Freims vienu limeni augstak';
+$TEXT['TRASH_EMPTIED'] = 'Miskaste tira';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tips';
+$TEXT['UNDER_CONSTRUCTION'] = 'Lapa vel nav gatava';
+$TEXT['UNINSTALL'] = 'Atinstalet';
+$TEXT['UNKNOWN'] = 'Nezinams';
+$TEXT['UNLIMITED'] = 'Neierobe&#382;ots';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Uz aug&scaron;u';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Aug&scaron;upieladet failus';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Lietotajs';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Parbaude';
+$TEXT['VERSION'] = 'Versija';
+$TEXT['VIEW'] = 'Radit';
+$TEXT['VIEW_DELETED_PAGES'] = 'Radit izdzestas lapas';
+$TEXT['VIEW_DETAILS'] = 'Radit detalas';
+$TEXT['VISIBILITY'] = 'Redzamiba';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Timekla vietne';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Tikla vietnes apraksts';
+$TEXT['WEBSITE_FOOTER'] = 'Tikla vietnes kajene';
+$TEXT['WEBSITE_HEADER'] = 'Tikla vietnes galvene';
+$TEXT['WEBSITE_KEYWORDS'] = 'Tikla vietnes atslegvardi';
+$TEXT['WEBSITE_TITLE'] = 'Tikla vietnes nosaukums';
+$TEXT['WELCOME_BACK'] = 'Ar atgrie&scaron;anos';
+$TEXT['WIDTH'] = 'Platums';
+$TEXT['WINDOW'] = 'Logs';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Datnu permicijas iespejams mainit visiem, kam tas ienak prata';
+$TEXT['WRITE'] = 'Rakstit';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG redaktors';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG stils';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Pievienot grupu';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Pievienot virsrakstu';
+$HEADING['ADD_PAGE'] = 'Pievienot lapu';
+$HEADING['ADD_USER'] = 'Pievienot lietotaju';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administre&scaron;anas riki';
+$HEADING['BROWSE_MEDIA'] = 'Parlukot medijus';
+$HEADING['CREATE_FOLDER'] = 'Izveidot mapi';
+$HEADING['DEFAULT_SETTINGS'] = 'Noklusetie iestatijumi';
+$HEADING['DELETED_PAGES'] = 'Izdzestas lapas';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Datnu sistemas iestatijumi';
+$HEADING['GENERAL_SETTINGS'] = 'Visparigie iestatijumi';
+$HEADING['INSTALL_LANGUAGE'] = 'Instalet valodu';
+$HEADING['INSTALL_MODULE'] = 'Instalet moduli';
+$HEADING['INSTALL_TEMPLATE'] = 'Instalet &scaron;ablonu';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Informacija par valodu';
+$HEADING['MANAGE_SECTIONS'] = 'Mened&#382;et sadalas';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Mainit papla&scaron;inatos lapas iestatijumus';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Mainit/dzest grupu';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Mainit/Izdzest lapu';
+$HEADING['MODIFY_DELETE_USER'] = 'Mainit/dzest lietotaju';
+$HEADING['MODIFY_GROUP'] = 'Mainit grupu';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Mainit pirmo lapu';
+$HEADING['MODIFY_PAGE'] = 'Mainit lapu';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Mainit lapas iestatijumus';
+$HEADING['MODIFY_USER'] = 'Mainit lietotaju';
+$HEADING['MODULE_DETAILS'] = 'Informacija par moduli';
+$HEADING['MY_EMAIL'] = 'Mana e-pasta adrese';
+$HEADING['MY_PASSWORD'] = 'Mana parole';
+$HEADING['MY_SETTINGS'] = 'Mani iestatijumi';
+$HEADING['SEARCH_SETTINGS'] = 'Mekle&scaron;anas iestatijumi';
+$HEADING['SERVER_SETTINGS'] = 'Servera iestatijumi';
+$HEADING['TEMPLATE_DETAILS'] = 'Informacija par &scaron;ablonu';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Atinstalet valodu';
+$HEADING['UNINSTALL_MODULE'] = 'Atinstalet moduli';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Atinstalet &scaron;ablonu';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Aug&scaron;upieladet datni(-es)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Nepietiekams atlauju limenis';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Paroli nav iespejams atkalatjaunot bie&#382;ak ka reizi stunda';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Lietotajvardu un paroli pa e-pastu nebija iespejams nosutit, ludzu sakontakte sistemas administratoru';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Ievadito e-pasta adresi nebija iespejams atrast datu baze';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Ludzu ievadi savu e-pasta adresi zemak redzamaja lauka';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Piedod, bet Tev nav tiesibu aplukot &scaron;o lapu';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Jau uzinstalets';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Nav iespejams ierakstit noraditaja mape';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Nav iespejams atinstalet';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Nav iespejams atinstalet: iezimetais fails tiek lietots';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Datni nav iespejams atzipot';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Nebija iespejams aug&scaron;upieladet datni';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Keza atverot datni';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Ludzu iegaume, ka datnei, ko gribi aug&scaron;upieladet jabut &scaron;aja formata:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Ludzu iegaume, ka failam, ko gribi aug&scaron;upieladet jabu viena no &scaron;iem formatiem:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Ludzu atgriezies un aizpildi visus laukus';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Uzinstalets veiksmigi';
+$MESSAGE['GENERIC_INVALID'] = 'Datne, ko nupat aug&scaron;upieladeji, ir invalids';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nav instalets';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Esi paceitigs, tas var kadu bridi ievilkties.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Nac driz atkal!';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Atinstalets veiksmigi';
+$MESSAGE['GENERIC_UPGRADED'] = 'Apgreidots veiksmigi';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Lapa tiek veidota';
+$MESSAGE['GROUPS_ADDED'] = 'Grupa veiksmigi pievienota';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Vai patie&scaron;am gribi izdzest iezimeto grupu (un visus lietotajus taja)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupa veiksmigi izdzesta';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Grupas nosaukums ir tuk&scaron;s';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = '&scaron;ads grupas nosaukums jau ir';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Netika atrasta neviena grupa';
+$MESSAGE['GROUPS_SAVED'] = 'Grupa veiksmigi saglabata';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Ludzu ievadi paroli';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Ievadita parole par garu';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Ievadita parole par isu';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Netika ievadits datnes papla&scaron;inajums';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Netika ievadits jauns nosaukums';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Nav iespejams izdzest iezimeto mapi';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Nav iespejams izdzest iezimeto datni';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Parsauk&scaron;ana neveiksmiga';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Vai esi parliecinats, ka gribi izdzest &scaron;o datni vai mapi?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Mape izdzesta veikmigi';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Datne veiksmigi izdzesta';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Mape neeksiste';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Nevar ieklaut ../ mapes nosaukuma';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Mape ar &scaron;adu naosaukumu jau eksiste';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Mape veiksmigi izveidota';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Nav iespejams izveidot mapi';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Datne ar &scaron;adu nosaukumu jau eksiste';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Datne netika atrasta';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Nav iespejams ieklaut ../ nosaukuma';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nedrikst lietot index.php ka nosaukumu';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Mape netika atrasts neviena mediju datne';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Parsauk&scaron;ana veiksmiga';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' datne veiksmigi aug&scaron;upieladeta';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Nav iespejams ieklaut ../ mapes merki (target)';
+$MESSAGE['MEDIA_UPLOADED'] = ' datnes tika veiksmigi aug&scaron;upieladetas';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Atvaino, &scaron;i forma ir tikusi aizpildita parak daudz rei&#382;u &scaron;is stundas laika. Ludzu pamegini velreiz pec stundas.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Ievaditais parbaudes numurs ir nepareizs. Ja radu&scaron;as problemas ar parbaudes koda nolasi&scaron;anu, suti zinu uz: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Ievadi detalas sekojo&scaron;ajos laukos';
+$MESSAGE['PAGES_ADDED'] = 'Lapa veiksmigi pievienota';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Lapas virsraksts pievienots veiksmigi';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Ludzu ievadiet izvelnes nosaukumu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Ludzu ievadiet lapas nosaukumu';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Keza radot piekluves datni /pages mape (nepietiekamas privilegijas)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Keza dze&scaron;ot piekluves datni /pages mape';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Keza parkartojot lapu';
+$MESSAGE['PAGES_DELETED'] = 'Lapa veiksmigi izdzesta';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Vai esi parliecinats, ka velies izdzest iezimeto lapu (un visas tas apak&scaron;lapas)?';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Tev nav atlaujas &scaron;o lapu mainit';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Klik&scaron;kini &scaron;eit, lai veiktu izmainas ievada lapa';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Nav iespejams ierakstit datne /pages/intro.php (nepietiekamas privilegijas)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Ievada lapa saglabata veiksmigi';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Pedejas izmainas veicis';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Lapa netika atrasta';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Keza saglabajot lapue';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Lapa ar tadu pa&scaron;u vai lidzigu virsrakstu jau eksiste';
+$MESSAGE['PAGES_REORDERED'] = 'Lapa veiksmigi parkartota';
+$MESSAGE['PAGES_RESTORED'] = 'Lapa atjaunota veiksmigi';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Atgriezties pie lapam';
+$MESSAGE['PAGES_SAVED'] = 'Lapa saglabata veiksmigi';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Lapas iestatijumi saglabati veiksmigi';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Sadalas parametri veiksmigi saglabati';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Ievadita (eso&scaron;a) parole nav pareiza';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detalas tika veiksmigi noglabatas';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-pasta adrese tika veiksmigi atjauninata';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Parole veiksmigi nomainita';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Ludzu iegaume: spie&#382;ot &scaron;o pogu, visas nesaglabatas izmainas tiks neatgriezeniski dzestas';
+$MESSAGE['SETTINGS_SAVED'] = 'Iestatijumi tika veiksmigi noglabati';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Nebija iespejams atvert konfiguracijas datni';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Nebija iespejams ierakstit konfiguracijas datne';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Ludzu iegaume: &scaron;is te ir ieteicams vienigi teste&scaron;anas re&#382;ima';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Jaievada e-pasta adrese';
+$MESSAGE['START_CURRENT_USER'] = 'Tu &scaron;obrid esi ielogojies ka:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Bridinajums, instalacijas mape vel arvien eksiste!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Esi sveicinats WebsiteBaker administracija';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Ludzu iegaume: lai mainitu &scaron;ablonu, jadotas uz iestatijumu sadalu';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Lietotajs veiksmigi pievienots';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Ludzu iegaume: Vertibas jaievada augstak redzamajos laukos, ja gribas nomainit &scaron;i lietotaja paroli';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Vai patie&scaron;am gribi izdzest iezimeto lietotaju?';
+$MESSAGE['USERS_DELETED'] = 'Lietotajs veiksmigi izdzests';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'ievadita e-pasta adrese jau tiek &scaron;eit lietota';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Ievadita e-pasta adrese nav pareiza';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Netika iezimeta neviena grupa';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Ievaditas paroles nesakrit';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Ievadita parole bija par isu';
+$MESSAGE['USERS_SAVED'] = 'Lietotajs veiksmigi saglabats';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Mened&#382;et lietotaju grupas un noteikt to atlaujas...';
+$OVERVIEW['HELP'] = 'Jautajumi? Atrodi atbildi...';
+$OVERVIEW['LANGUAGES'] = 'Mened&#382;et WebsiteBaker valodas...';
+$OVERVIEW['MEDIA'] = 'Mened&#382;et failus iek&scaron; media mapes...';
+$OVERVIEW['MODULES'] = 'Mened&#382;et WebsiteBaker modulus...';
+$OVERVIEW['PAGES'] = 'Mened&#382;et lapas...';
+$OVERVIEW['PREFERENCES'] = 'Mainit preferences - e-pasta adresi, paroli, utt...';
+$OVERVIEW['SETTINGS'] = 'Mainit WebsiteBaker iestatijumus...';
+$OVERVIEW['START'] = 'Administracijas parskats';
+$OVERVIEW['TEMPLATES'] = 'Mened&#382;et &scaron;ablonus...';
+$OVERVIEW['USERS'] = 'Mened&#382;et lietotajus, kas var ielogties WebsiteBaker sistema...';
+$OVERVIEW['VIEW'] = 'Apskatit majas lapu jauna loga...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/LV.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/NL.php
===================================================================
--- trunk/languages/NL.php	(nonexistent)
+++ trunk/languages/NL.php	(revision 2)
@@ -0,0 +1,682 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'NL';
+$language_name = 'Nederlands';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Bramus, CodeALot, Luckyluke, Argos';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Toegang';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Extra&rsquo;s';
+$MENU['ADMINTOOLS'] = 'Beheerfuncties';
+$MENU['BREADCRUMB'] = 'U bent hier: ';
+$MENU['FORGOT'] = 'Inloggegevens opnieuw aanvragen';
+$MENU['GROUP'] = 'Groep';
+$MENU['GROUPS'] = 'Groepen';
+$MENU['HELP'] = 'Help';
+$MENU['LANGUAGES'] = 'Talen';
+$MENU['LOGIN'] = 'Inloggen';
+$MENU['LOGOUT'] = 'Uitloggen';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Modules';
+$MENU['PAGES'] = 'Pagina&rsquo;s';
+$MENU['PREFERENCES'] = 'Profiel';
+$MENU['SETTINGS'] = 'Instellingen';
+$MENU['START'] = 'Naar het hoofdmenu';
+$MENU['TEMPLATES'] = 'Templates';
+$MENU['USERS'] = 'Gebruikers';
+$MENU['VIEW'] = 'Website';
+$TEXT['ACCOUNT_SIGNUP'] = 'Aanmelden als gebruiker';
+$TEXT['ACTIONS'] = 'Acties';
+$TEXT['ACTIVE'] = 'Actief';
+$TEXT['ADD'] = 'Toevoegen';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Toevoegen sectie';
+$TEXT['ADMIN'] = 'Beheer';
+$TEXT['ADMINISTRATION'] = 'Beheer';
+$TEXT['ADMINISTRATION_TOOL'] = 'Beheeropties';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Beheerders';
+$TEXT['ADVANCED'] = 'Geavanceerd';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Toegestane upload-bestanden';
+$TEXT['ALLOWED_VIEWERS'] = 'Toegestane kijkers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Meerdere selecties toestaan';
+$TEXT['ALL_WORDS'] = 'Term of deel van term';
+$TEXT['ANCHOR'] = 'Anker';
+$TEXT['ANONYMOUS'] = 'Anoniem';
+$TEXT['ANY_WORDS'] = 'E&eacute;n van de termen';
+$TEXT['APP_NAME'] = 'Applicatienaam';
+$TEXT['ARE_YOU_SURE'] = 'Weet u het zeker?';
+$TEXT['AUTHOR'] = 'Auteur';
+$TEXT['BACK'] = 'Terug';
+$TEXT['BACKUP'] = 'Backup maken';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup van alle tabellen in de database';
+$TEXT['BACKUP_DATABASE'] = 'Backup van de database maken';
+$TEXT['BACKUP_MEDIA'] = 'Backup van de Media-map maken';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup van alleen WB-gerelateerde tabellen';
+$TEXT['BASIC'] = 'Basis';
+$TEXT['BLOCK'] = 'Blok';
+$TEXT['CALENDAR'] = 'Kalender';
+$TEXT['CANCEL'] = 'Annuleren';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Kan zichzelf verwijderen';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha-verificatie';
+$TEXT['CAP_EDIT_CSS'] = 'Wijzig CSS';
+$TEXT['CHANGE'] = 'Verander';
+$TEXT['CHANGES'] = 'Veranderingen';
+$TEXT['CHANGE_SETTINGS'] = 'Wijzig instellingen';
+$TEXT['CHARSET'] = 'Tekenset';
+$TEXT['CHECKBOX_GROUP'] = 'Aankruisvakjes';
+$TEXT['CLOSE'] = 'Sluiten';
+$TEXT['CODE'] = 'Code';
+$TEXT['CODE_SNIPPET'] = 'Code snippet';
+$TEXT['COLLAPSE'] = 'Inklappen';
+$TEXT['COMMENT'] = 'Reageren';
+$TEXT['COMMENTING'] = 'Reactie-opties';
+$TEXT['COMMENTS'] = 'Reacties';
+$TEXT['CREATE_FOLDER'] = 'Cre&euml;er map';
+$TEXT['CURRENT'] = 'Huidig(e)';
+$TEXT['CURRENT_FOLDER'] = 'Huidige map';
+$TEXT['CURRENT_PAGE'] = 'Huidige pagina';
+$TEXT['CURRENT_PASSWORD'] = 'Huidig wachtwoord';
+$TEXT['CUSTOM'] = 'Handmatige invoer';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Datum';
+$TEXT['DATE_FORMAT'] = 'Datumweergave';
+$TEXT['DEFAULT'] = 'Standaard';
+$TEXT['DEFAULT_CHARSET'] = 'Standaard tekenset';
+$TEXT['DEFAULT_TEXT'] = 'Standaardtekst';
+$TEXT['DELETE'] = 'Verwijderen';
+$TEXT['DELETED'] = 'Verwijderd';
+$TEXT['DELETE_DATE'] = 'Wis datum';
+$TEXT['DELETE_ZIP'] = 'Verwijder ZIP van server na uitpakken';
+$TEXT['DESCRIPTION'] = 'Metatag "Description"';
+$TEXT['DESIGNED_FOR'] = 'Ontworpen voor';
+$TEXT['DIRECTORIES'] = 'Mappen';
+$TEXT['DIRECTORY_MODE'] = 'Directory-modus';
+$TEXT['DISABLED'] = 'Uit';
+$TEXT['DISPLAY_NAME'] = 'Naamweergave';
+$TEXT['EMAIL'] = 'E-mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-mailadres';
+$TEXT['EMPTY_TRASH'] = 'Prullenbak legen';
+$TEXT['ENABLED'] = 'Aan';
+$TEXT['END'] = 'Einde';
+$TEXT['ERROR'] = 'Fout';
+$TEXT['EXACT_MATCH'] = 'Exacte term';
+$TEXT['EXECUTE'] = 'Uitvoeren';
+$TEXT['EXPAND'] = 'Uitklappen';
+$TEXT['EXTENSION'] = 'Extensie';
+$TEXT['FIELD'] = 'Veld';
+$TEXT['FILE'] = 'Bestand';
+$TEXT['FILES'] = 'bestanden';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Bestandssysteembevoegdheden';
+$TEXT['FILE_MODE'] = 'Bestandsmodus';
+$TEXT['FINISH_PUBLISHING'] = 'Einde publicatie';
+$TEXT['FOLDER'] = 'Map';
+$TEXT['FOLDERS'] = 'Mappen';
+$TEXT['FOOTER'] = 'Footer';
+$TEXT['FORGOTTEN_DETAILS'] = 'Gegevens vergeten?';
+$TEXT['FORGOT_DETAILS'] = 'Gegevens vergeten?';
+$TEXT['FROM'] = 'Van';
+$TEXT['FRONTEND'] = 'Website';
+$TEXT['FULL_NAME'] = 'Volledige naam';
+$TEXT['FUNCTION'] = 'Functie';
+$TEXT['GROUP'] = 'Groep';
+$TEXT['HEADER'] = 'Header';
+$TEXT['HEADING'] = 'Titel';
+$TEXT['HEADING_CSS_FILE'] = 'Actuele modulebestand: ';
+$TEXT['HEIGHT'] = 'Hoogte';
+$TEXT['HIDDEN'] = 'Verborgen';
+$TEXT['HIDE'] = 'Verbergen';
+$TEXT['HIDE_ADVANCED'] = 'Verberg geavanceerde opties';
+$TEXT['HOME'] = 'Home';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Homepage-omleiding';
+$TEXT['HOME_FOLDER'] = 'Persoonlijke folder';
+$TEXT['HOME_FOLDERS'] = 'Persoonlijke folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Icoon';
+$TEXT['IMAGE'] = 'Afbeelding';
+$TEXT['INLINE'] = 'Inline';
+$TEXT['INSTALL'] = 'Installeren';
+$TEXT['INSTALLATION'] = 'Installatie';
+$TEXT['INSTALLATION_PATH'] = 'Installatiepad';
+$TEXT['INSTALLATION_URL'] = 'Installatie-URL';
+$TEXT['INSTALLED'] = 'ge&iuml;nstalleerd';
+$TEXT['INTRO'] = 'Introductie';
+$TEXT['INTRO_PAGE'] = 'Introductiepagina';
+$TEXT['INVALID_SIGNS'] = 'moet met een letter beginnen, of heeft een ongeldig teken';
+$TEXT['KEYWORDS'] = 'Metatag "Keywords"';
+$TEXT['LANGUAGE'] = 'Taal';
+$TEXT['LAST_UPDATED_BY'] = 'Laatste wijzigingen door';
+$TEXT['LENGTH'] = 'Lengte';
+$TEXT['LEVEL'] = 'Niveau';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Lijstopties';
+$TEXT['LOGGED_IN'] = 'Ingelogd';
+$TEXT['LOGIN'] = 'Inloggen';
+$TEXT['LONG'] = 'Lang';
+$TEXT['LONG_TEXT'] = 'Lange tekst';
+$TEXT['LOOP'] = '"Loop"';
+$TEXT['MAIN'] = 'Primair(e)';
+$TEXT['MAINTENANCE_OFF'] = 'Onderhoud uit';
+$TEXT['MAINTENANCE_ON'] = 'Onderhoud aan';
+$TEXT['MANAGE'] = 'Beheren';
+$TEXT['MANAGE_GROUPS'] = 'Groepenbeheer';
+$TEXT['MANAGE_USERS'] = 'Gebruikersbeheer';
+$TEXT['MATCH'] = 'Gelijk aan';
+$TEXT['MATCHING'] = 'Overeenkomend';
+$TEXT['MAX_EXCERPT'] = 'Maximaal aantal gelijktijdige zoekacties';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maximaal aantal inzendingen per uur';
+$TEXT['MEDIA_DIRECTORY'] = 'Media-map';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-icoon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-icoon hover';
+$TEXT['MENU_TITLE'] = 'Menutitel';
+$TEXT['MESSAGE'] = 'Bericht';
+$TEXT['MODIFY'] = 'Wijzigen';
+$TEXT['MODIFY_CONTENT'] = 'Wijzig inhoud';
+$TEXT['MODIFY_SETTINGS'] = 'Wijzig instellingen';
+$TEXT['MODULE_ORDER'] = 'Modules doorzoeken';
+$TEXT['MODULE_PERMISSIONS'] = 'Modulebevoegdheden';
+$TEXT['MORE'] = 'Meer';
+$TEXT['MOVE_DOWN'] = 'Naar beneden';
+$TEXT['MOVE_UP'] = 'Naar boven';
+$TEXT['MULTIPLE_MENUS'] = 'Meerdere menu&rsquo;s';
+$TEXT['MULTISELECT'] = 'Meervoudige selectie';
+$TEXT['NAME'] = 'Naam';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'Huidig wachtwoord';
+$TEXT['NEED_TO_LOGIN'] = 'Inloggen?';
+$TEXT['NEW_PASSWORD'] = 'Nieuw wachtwoord';
+$TEXT['NEW_WINDOW'] = 'Nieuw scherm';
+$TEXT['NEXT'] = 'Volgende';
+$TEXT['NEXT_PAGE'] = 'Volgende pagina';
+$TEXT['NO'] = 'Nee';
+$TEXT['NONE'] = 'Geen';
+$TEXT['NONE_FOUND'] = 'Niet gevonden';
+$TEXT['NOT_FOUND'] = 'Niet gevonden';
+$TEXT['NOT_INSTALLED'] = 'niet ge&iuml;nstalleerd';
+$TEXT['NO_IMAGE_SELECTED'] = 'geen afbeelding geselecteerd';
+$TEXT['NO_RESULTS'] = 'Geen resultaten';
+$TEXT['OF'] = 'van de';
+$TEXT['ON'] = 'Op';
+$TEXT['OPEN'] = 'Openen';
+$TEXT['OPTION'] = 'Optie';
+$TEXT['OTHERS'] = 'Anderen';
+$TEXT['OUT_OF'] = 'Buiten';
+$TEXT['OVERWRITE_EXISTING'] = 'Overschrijf bestaand(e)';
+$TEXT['PAGE'] = 'Pagina';
+$TEXT['PAGES_DIRECTORY'] = 'Pagina&rsquo;s-map';
+$TEXT['PAGES_PERMISSION'] = 'Paginapermissie';
+$TEXT['PAGES_PERMISSIONS'] = 'Paginapermissies';
+$TEXT['PAGE_EXTENSION'] = 'Pagina-extensie';
+$TEXT['PAGE_ICON'] = 'Pagina-afbeelding';
+$TEXT['PAGE_ICON_DIR'] = 'Pad naar pagina- en menu-afbeeldingen';
+$TEXT['PAGE_LANGUAGES'] = 'Meerdere talen';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Paginaniveaulimiet';
+$TEXT['PAGE_SPACER'] = 'Pagina-spacer';
+$TEXT['PAGE_TITLE'] = 'Paginatitel';
+$TEXT['PAGE_TRASH'] = 'Paginaprullenbak';
+$TEXT['PARENT'] = 'Ouder';
+$TEXT['PASSWORD'] = 'Wachtwoord';
+$TEXT['PATH'] = 'Pad';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP-foutmeldingsniveau';
+$TEXT['PLEASE_LOGIN'] = 'Inloggen aub';
+$TEXT['PLEASE_SELECT'] = 'Selecteer';
+$TEXT['POST'] = 'Bericht';
+$TEXT['POSTS_PER_PAGE'] = 'Berichten per pagina';
+$TEXT['POST_FOOTER'] = 'Bericht-footer';
+$TEXT['POST_HEADER'] = 'Bericht-header';
+$TEXT['PREVIOUS'] = 'Vorige';
+$TEXT['PREVIOUS_PAGE'] = 'Vorige pagina';
+$TEXT['PRIVATE'] = 'Aangemeld';
+$TEXT['PRIVATE_VIEWERS'] = 'Aangemelde bezoekers';
+$TEXT['PROFILES_EDIT'] = 'Wijzig het profiel';
+$TEXT['PUBLIC'] = 'Iedereen';
+$TEXT['PUBL_END_DATE'] = 'Einddatum';
+$TEXT['PUBL_START_DATE'] = 'Startdatum';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radioknoppen';
+$TEXT['READ'] = 'Lees';
+$TEXT['READ_MORE'] = 'Lees verder';
+$TEXT['REDIRECT_AFTER'] = 'Omleiding na (sec.)';
+$TEXT['REGISTERED'] = 'Geregistreerd';
+$TEXT['REGISTERED_VIEWERS'] = 'Geregistreerde bezoekers';
+$TEXT['RELOAD'] = 'Vernieuwen';
+$TEXT['REMEMBER_ME'] = 'Onthoud mijn gegevens.';
+$TEXT['RENAME'] = 'Hernoemen';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'Geen upload van deze bestandsformaten';
+$TEXT['REQUIRED'] = 'Verplicht';
+$TEXT['REQUIREMENT'] = 'Benodigd';
+$TEXT['RESET'] = 'Opnieuw';
+$TEXT['RESIZE'] = 'Veranderen grootte';
+$TEXT['RESIZE_IMAGE_TO'] = 'Verander afbeeldingsgrootte naar';
+$TEXT['RESTORE'] = 'Backup terugzetten';
+$TEXT['RESTORE_DATABASE'] = 'Backup van de database terugzetten';
+$TEXT['RESTORE_MEDIA'] = 'Backup van de Media-map terugzetten';
+$TEXT['RESULTS'] = 'Resultaten';
+$TEXT['RESULTS_FOOTER'] = 'Zoekresultaten-footer';
+$TEXT['RESULTS_FOR'] = 'Resultaten voor';
+$TEXT['RESULTS_HEADER'] = 'Resultaten-header';
+$TEXT['RESULTS_LOOP'] = 'Zoekresultaten';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Herhaal nieuw wachtwoord';
+$TEXT['RETYPE_PASSWORD'] = 'Herhaal wachtwoord';
+$TEXT['SAME_WINDOW'] = 'Zelfde scherm';
+$TEXT['SAVE'] = 'Opslaan';
+$TEXT['SEARCH'] = 'Zoeken';
+$TEXT['SEARCHING'] = 'Zoekfunctie';
+$TEXT['SECTION'] = 'Sectie';
+$TEXT['SECTION_BLOCKS'] = 'Sectieblokken';
+$TEXT['SEC_ANCHOR'] = 'Sessie-voorvoegsel';
+$TEXT['SELECT_BOX'] = 'Selectiemenu';
+$TEXT['SEND_DETAILS'] = 'Stuur gegevens';
+$TEXT['SEPARATE'] = 'Gescheiden';
+$TEXT['SEPERATOR'] = 'Scheidingsteken tussen opties (HTML toegestaan)';
+$TEXT['SERVER_EMAIL'] = 'Server e-mail';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Serverbesturingssysteem';
+$TEXT['SESSION_IDENTIFIER'] = 'Sessie-identificatie';
+$TEXT['SETTINGS'] = 'Instellingen';
+$TEXT['SHORT'] = 'Kort';
+$TEXT['SHORT_TEXT'] = 'Korte tekst';
+$TEXT['SHOW'] = 'Tonen';
+$TEXT['SHOW_ADVANCED'] = 'Bekijk geavanceerde opties';
+$TEXT['SIGNUP'] = 'Primaire aanmeldgroep';
+$TEXT['SIZE'] = 'Grootte';
+$TEXT['SMART_LOGIN'] = 'Snel inloggen';
+$TEXT['START'] = 'Aanvang';
+$TEXT['START_PUBLISHING'] = 'Aanvang publicatie';
+$TEXT['SUBJECT'] = 'Onderwerp';
+$TEXT['SUBMISSIONS'] = 'Inzendingen';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Maximaal aantal te bewaren inzendingen';
+$TEXT['SUBMISSION_ID'] = 'Ingezonden bericht';
+$TEXT['SUBMITTED'] = 'Ingezonden';
+$TEXT['SUCCESS'] = 'Succes';
+$TEXT['SYSTEM_DEFAULT'] = 'Standaardinstellingen';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Systeembevoegdheden';
+$TEXT['TABLE_PREFIX'] = 'Tabelvoorvoegsel';
+$TEXT['TARGET'] = 'Doel';
+$TEXT['TARGET_FOLDER'] = 'Doelmap';
+$TEXT['TEMPLATE'] = 'Template';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Templatebevoegdheden';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Tekstveld';
+$TEXT['TEXTFIELD'] = 'Tekstregel';
+$TEXT['THEME'] = 'Thema Website-beheer';
+$TEXT['THEME_COPY_CURRENT'] = 'Kopieer backend thema';
+$TEXT['THEME_CURRENT'] = 'Huidig actieve thema';
+$TEXT['THEME_IMPORT_HTT'] = 'Importeer extra templates';
+$TEXT['THEME_NEW_NAME'] = 'Naam van het nieuwe thema';
+$TEXT['THEME_NOMORE_HTT'] = 'niet meer beschikbaar';
+$TEXT['THEME_SELECT_HTT'] = 'selecteer templates';
+$TEXT['THEME_START_COPY'] = 'kopieer';
+$TEXT['THEME_START_IMPORT'] = 'importeer';
+$TEXT['TIME'] = 'Tijd';
+$TEXT['TIMEZONE'] = 'Tijdzone';
+$TEXT['TIME_FORMAT'] = 'Tijdweergave';
+$TEXT['TIME_LIMIT'] = 'Maximale zoektijd per module';
+$TEXT['TITLE'] = 'Titel';
+$TEXT['TO'] = 'Aan';
+$TEXT['TOP_FRAME'] = 'Bovenste frame';
+$TEXT['TRASH_EMPTIED'] = 'Prullenbak geleegd';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Wijzig de CSS-definities in het tekstveld hieronder.';
+$TEXT['TYPE'] = 'Type';
+$TEXT['UNDER_CONSTRUCTION'] = 'In bewerking';
+$TEXT['UNINSTALL'] = 'Verwijderen';
+$TEXT['UNKNOWN'] = 'Onbekend(e)';
+$TEXT['UNLIMITED'] = 'Ongelimiteerd';
+$TEXT['UNZIP_FILE'] = 'Uploaden en uitpakken van ZIP-bestand';
+$TEXT['UP'] = 'Omhoog';
+$TEXT['UPGRADE'] = 'Upgraden';
+$TEXT['UPLOAD_FILES'] = 'Upload bestand(en)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Gebruiker';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'gebruiker is op actief gezet';
+$TEXT['USERS_CAN_SELFDELETE'] = 'gebruiker kan zijn eigen account verwijderen';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Gebruiker kan de eigen instellingen aanpassen';
+$TEXT['USERS_DELETED'] = 'Gebruiker is gemarkeerd als verwijderd';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'Gebruiker kan uitgebreid profiel aanmaken';
+$TEXT['VERIFICATION'] = 'Verificatie';
+$TEXT['VERSION'] = 'Versie';
+$TEXT['VIEW'] = 'Bekijken';
+$TEXT['VIEW_DELETED_PAGES'] = 'Bekijk verwijderde pagina&rsquo;s';
+$TEXT['VIEW_DETAILS'] = 'Gegevens bekijken';
+$TEXT['VISIBILITY'] = 'Zichtbaarheid';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Standaard afzendermailadres';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Standaard afzendernaam';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Specificeer hieronder een standaard afzenderadres en afzendernaam. Het is aanbevolen om een afzenderadres als: <strong>admin@uwdomein.nl</strong> te gebruiken. Om verspreiding van spam tegen te gaan, kunnen sommige mailproviders (bijv. <em>mail.com</em>) mails verwerpen met een afzenderadres als <em>name@mail.com</em>, die verzonden worden vanaf een relay-server. Onderstaande standaardwaarden worden enkel gebruikt indien geen andere waarden gespecifieerd worden door WebsiteBaker. Indien uw server <acronym title="Simple mail transfer protocol">SMTP</acronym> ondersteunt kunt u deze optie gebruiken voor het versturen van uitgaande mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mailafhandeling';
+$TEXT['WBMAILER_NOTICE'] = '<strong>Instellingen SMTP Mailer:</strong><br />Onderstaande instellingen zijn alleen van toepassing indien u mails wilt verzenden via <acronym title="Simple mail transfer protocol">SMTP</acronym>. Indien u de naam of instellingen van de SMTP-server niet kent, selecteer dan bij de standaard mailroutine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP-authenticatie';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'Alleen wanneer men zich dient aan te melden bij de SMTP-host';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP-host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP-wachtwoord';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Metatag "Description"';
+$TEXT['WEBSITE_FOOTER'] = 'Website-footer';
+$TEXT['WEBSITE_HEADER'] = 'Website-header';
+$TEXT['WEBSITE_KEYWORDS'] = 'Metatag "Keywords"';
+$TEXT['WEBSITE_TITLE'] = 'Metatag "Title"';
+$TEXT['WELCOME_BACK'] = 'Welkom terug';
+$TEXT['WIDTH'] = 'Breedte';
+$TEXT['WINDOW'] = 'Scherm';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'CHMOD 777 alle bestanden';
+$TEXT['WRITE'] = 'Schrijf';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG-editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG-stijl';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Module voldoet niet aan de eisen';
+$HEADING['ADD_CHILD_PAGE'] = 'Toevoegen subpagina';
+$HEADING['ADD_GROUP'] = 'Toevoegen groep';
+$HEADING['ADD_GROUPS'] = 'Toevoegen groepen';
+$HEADING['ADD_HEADING'] = 'Toevoegen titel';
+$HEADING['ADD_PAGE'] = 'Toevoegen nieuwe pagina';
+$HEADING['ADD_USER'] = 'Toevoegen gebruiker';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Beheerfuncties';
+$HEADING['BROWSE_MEDIA'] = 'Bladeren door Media-map';
+$HEADING['CREATE_FOLDER'] = 'Toevoegen nieuwe map';
+$HEADING['DEFAULT_SETTINGS'] = 'Standaardinstellingen';
+$HEADING['DELETED_PAGES'] = 'Verwijderde pagina&rsquo;s';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Bestandssysteeminstellingen';
+$HEADING['GENERAL_SETTINGS'] = 'Algemene instellingen';
+$HEADING['INSTALL_LANGUAGE'] = 'Toevoegen taalbestand';
+$HEADING['INSTALL_MODULE'] = 'Toevoegen module';
+$HEADING['INSTALL_TEMPLATE'] = 'Toevoegen template';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Taal-bestanden handmatig inschakelen';
+$HEADING['INVOKE_MODULE_FILES'] = 'Handmatige module-installatie';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Template-bestanden handmatig inschakelen';
+$HEADING['LANGUAGE_DETAILS'] = 'Taalbestandgegevens';
+$HEADING['MANAGE_SECTIONS'] = 'Sectiebeheer';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Geavanceerde pagina-instellingen';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Beheren groep';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Beheren bestaande pagina&rsquo;s';
+$HEADING['MODIFY_DELETE_USER'] = 'Beheren gebruikers';
+$HEADING['MODIFY_GROUP'] = 'Groepsgegevens';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Wijzigen introductiepagina';
+$HEADING['MODIFY_PAGE'] = 'Aanpassen pagina';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Pagina-instellingen';
+$HEADING['MODIFY_USER'] = 'Gebruikersgegevens';
+$HEADING['MODULE_DETAILS'] = 'Modulegegevens';
+$HEADING['MY_EMAIL'] = 'Mijn e-mailadres';
+$HEADING['MY_PASSWORD'] = 'Mijn wachtwoord';
+$HEADING['MY_SETTINGS'] = 'Mijn gegevens';
+$HEADING['SEARCH_SETTINGS'] = 'Zoekinstellingen';
+$HEADING['SERVER_SETTINGS'] = 'Serverinstellingen';
+$HEADING['TEMPLATE_DETAILS'] = 'Templategegevens';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Verwijderen taalbestand';
+$HEADING['UNINSTALL_MODULE'] = 'Verwijderen module';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Verwijderen template';
+$HEADING['UPGRADE_LANGUAGE'] = 'Upgraden/inschakelen taalbestand';
+$HEADING['UPLOAD_FILES'] = 'Uploaden bestanden';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer-instellingen';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Fout tijdens het updaten van de add-onbestanden.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Taalbestanden succesvol herladen';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTIE!</strong> Om veiligheidsredenen dient u de taalbestanden in de folder /languages/ via FTP te uploaden en vervolgens de Upgrade-functie te gebruiken om ze aan het systeem toe te voegen.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Waarschuwing: bestaande module database-informatie zal verloren gaan! ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'Als modules via FTP worden ge&uuml;pload (niet aanbevolen), zullen de modulefuncties <tt>installeren</tt>, <tt>upgraden</tt> of <tt>deinstalleren</tt> niet automatisch worden uitgevoerd. Deze modules zullen dan mogelijk niet correct werken of gedeinstalleerd kunnen worden.<br /><br />U kunt de modulefuncties hieronder handmatig uitvoeren voor modules die per FTP zijn ge&uuml;pload.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Waarschuwing: de bestaande module database-informatie zal verloren gaan! Gebruik deze optie alleen indien u ervaring heeft met modules die zijn geupload via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Waarschuwing: de bestaande module database-informatie zal verloren gaan! ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules succesvol herladen';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Nieuwere bestanden overschrijven';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installatie mislukt. Uw systeem voldoet niet aan de eisen van deze add-on. Om deze situatie te veranderen kunt u de informatie hieronder toepassen.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database met informatie uit de add-on bestanden (bijvoorbeeld na FTP-upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates succesvol herladen';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Onvoldoende rechten om hier te zijn';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Sorry, het wachtwoord kan maximaal eens per uur worden aangepast.';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Het is niet mogelijk uw wachtwoord per e-mail te versturen. Neem contact op met de beheerder';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Het door u opgegeven e-mailadres is niet gevonden in onze database';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Vult u alstublieft uw e-mailadres hieronder in';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, er is niets om af te beelden';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Sorry, u heeft geen bevoegdheden om deze pagina te bekijken';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Is al ge&iuml;nstalleerd';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kan niet schrijven naar doelmap';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Kan niet de&iuml;nstalleren';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Kan niet de&iuml;nstalleren: het geselecteerde bestand is in gebruik';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />De {{type}} <b>{{type_name}}</b> kan niet verwijderd worden omdat het in gebruik is op {{pages}}:<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'volgende pagina;volgende pagina\'s';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'De template <b>{{name}}</b> kan niet verwijderd worden omdat het de standaard-template is.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Het is niet mogelijk de template <b>{{name}}</b> te verwijderen omdat het het standaard admin-thema is.';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Kan het bestand niet uitpakken';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Kan niet uploaden';
+$MESSAGE['GENERIC_COMPARE'] = ' succesvol';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Kan bestand niet openen.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' mislukt';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Let op: het bestand moet het volgende formaat hebben:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Let op: de bestanden moeten het volgende formaat hebben:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Niet alle velden zijn ingevuld. Probeert u het nog eens';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'U heeft niets geselecteerd!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installatie voltooid';
+$MESSAGE['GENERIC_INVALID'] = 'Ongeldig bestand';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Ongeldig WebsiteBaker installatiebestand. Controleer het *.zip bestand.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Ongeldig WebsiteBaker taalbestand. Controleer het tekstbestand.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Ongeldig WebsiteBaker modulebestand. Controleer het tekstbestand';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Ongeldig WebsiteBaker template-bestand. Controleer het tekstbestand';
+$MESSAGE['GENERIC_IN_USE'] = ' gebruikt in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Ontbrekend archiefbestand!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'De module is niet juist ge&iuml;nstalleerd!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' niet mogelijk';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Niet ge&iuml;nstalleerd';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualisatie niet mogelijk';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Even geduld aub, dit kan even duren.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Probeert u het a.u.b. binnenkort nog eens.';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Veiligheidsrisico! Toegang geweigerd!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Veiligheidsrisico! Data-opslag geweigerd!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'De&iuml;nstallatie voltooid';
+$MESSAGE['GENERIC_UPGRADED'] = 'Upgrade voltooid';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Versievergelijking';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade noodzakelijk!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'Deze site is tijdelijk offline wegens onderhoud.';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website in bewerking';
+$MESSAGE['GROUPS_ADDED'] = 'Groep toegevoegd';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Weet u zeker dat u de geselecteerde groep wilt verwijderen (en alle daarbij behorende gebruikers)?';
+$MESSAGE['GROUPS_DELETED'] = 'Groep verwijderd';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Groepsnaam is niet ingevuld';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Groepnaam is reeds in gebruik';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Geen groep gevonden';
+$MESSAGE['GROUPS_SAVED'] = 'Groep opgeslagen';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Inlognaam of wachtwoord niet correct';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Vul hieronder uw inlognaam en wachtwoord in';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Vul uw wachtwoord in';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Dit wachtwoord is te lang';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Dit wachtwoord is te kort';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Vul een inlognaam in';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Opgegeven inlognaam is te lang';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Opgegeven inlognaam is te kort';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'U heeft geen bestandsextensie opgegeven';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'U heeft geen nieuwe naam opgegeven';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Kan geselecteerde map niet verwijderen';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Kan geselecteerde bestand niet verwijderen';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Hernoemen niet gelukt';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Weet u zeker dat u het volgende bestand of map wilt verwijderen?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Map verwijderd';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Bestand verwijderd';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Opgegeven map bestaat niet of u heeft er geen toegang toe.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Map bestaat niet';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Gebruik van ../ in de mapnaam is niet toegestaan';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Opgegeven naam van de map bestaat al';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Map aangemaakt';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Aanmaken map mislukt';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Opgegeven bestandsnaam bestaat al';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Bestand niet gevonden';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Gebruik van ../ in de naam is niet toegestaan';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'index.php als naam is niet toegestaan';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Geen mediabestanden gevonden in de huidige map';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'geen bestand(en) ontvangen';
+$MESSAGE['MEDIA_RENAMED'] = 'Hernoemen geslaagd';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' ge&uuml;pload';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Gebruik van ../ in de map is niet toegestaan';
+$MESSAGE['MEDIA_UPLOADED'] = ' geupload';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Dit formulier is te vaak verstuurd binnen dit uur. Probeert u het over een uur nog eens.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Het verificatienummer (ook wel Captcha genoemd) dat u hebt ingevoerd is incorrect. Als u de Captcha niet goed kunt lezen, stuur dan een e-mail naar: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'De volgende velden zijn verplicht';
+$MESSAGE['PAGES_ADDED'] = 'Pagina toegevoegd';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Paginatitel opgeslagen';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Vul a.u.b. een menutitel in';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Vul a.u.b. een paginatitel in';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Kan geen bestanden opslaan in de /pages-map (onvoldoende rechten)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Kan geen bestanden verwijderen uit de /pages-map (onvoldoende rechten)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Fout bij herordenen pagina';
+$MESSAGE['PAGES_DELETED'] = 'Pagina verwijderd';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Weet u zeker dat u deze pagina wilt verwijderen (en al zijn subpagina&rsquo;s)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'U heeft niet de rechten om deze pagina aan te passen';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Klik hier om de introductiepagina aan te passen';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Kan instellingen niet opslaan in het bestand /pages/intro.php (onvoldoende rechten)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Introductiepagina opgeslagen';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Als laatste aangepast door';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Pagina niet gevonden';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Fout tijdens opslaan pagina';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Een pagina met dezelfde naam bestaat al';
+$MESSAGE['PAGES_REORDERED'] = 'Pagina herordend';
+$MESSAGE['PAGES_RESTORED'] = 'Pagina teruggehaald';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Keer terug naar pagina&rsquo;s';
+$MESSAGE['PAGES_SAVED'] = 'Pagina opgeslagen';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Pagina-instellingen opgeslagen';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Sectie-instellingen opgeslagen';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Het (huidige) ingevoerde wachtwoord is niet correct';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Details opgeslagen';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-mail gewijzigd';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Ongeldige wachtwoordtekens gebruikt';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Wachtwoord gewijzigd';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'De aanpassing is mislukt.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'De aanpassing is opgeslagen.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'De toevoeging is mislukt.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'De toevoeging is opgeslagen';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Opgelet: sla eerst de wijzigingen op die u eventueel zojuist heeft aangebracht!';
+$MESSAGE['SETTINGS_SAVED'] = 'Instellingen opgeslagen';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Het configuratiebestand kan niet worden geopend';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Het configuratiebestand kan niet worden opgeslagen';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Opgelet: dit is alleen bedoeld voor testdoeleinden!';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+Een nieuwe gebruiker heeft zich aangemeld.
+
+Loginname: {LOGIN_NAME}
+Gebruiker Id: {LOGIN_ID}
+E-mail: {LOGIN_EMAIL}
+IP-adres: {LOGIN_IP}
+Registratiedatum: {SIGNUP_DATE}
+----------------------------------------
+Dit bericht is automatisch aangemaakt!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Beste {LOGIN_DISPLAY_NAME},
+
+deze mail is aan u verzonden omdat u de \'wachtwoord vergeten\' functie heeft gebruikt.
+
+Uw nieuwe \'{LOGIN_WEBSITE_TITLE}\' inloggegevens zijn:
+
+Loginname: {LOGIN_NAME}
+Wachtwoord: {LOGIN_PASSWORD}
+
+Let op: dit is een automatisch aangemaakt nieuw wachtwoord. Uw oude wachtwoord is niet meer geldig!
+Heeft u vragen of opmerkingen, neem dan contact op met de websitebeheerder.
+
+Het is aan te raden om uw browser-cache te legen voordat u het nieuwe wachtwoord gebruikt.
+
+Vriendelijke groet
+
+------------------------------------
+Dit bericht is automatisch aangemaakt!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Beste {LOGIN_DISPLAY_NAME},
+
+Welkom bij \'{LOGIN_WEBSITE_TITLE}\'.
+
+Uw \'{LOGIN_WEBSITE_TITLE}\' inloggegevens zijn:
+Loginname: {LOGIN_NAME}
+Wachtwoord: {LOGIN_PASSWORD}
+
+Vriendelijke groet
+
+-------------------------------------
+Dit bericht is automatisch aangemaakt!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Uw inloggegevens...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'U moet een e-mailadres invullen';
+$MESSAGE['START_CURRENT_USER'] = 'U bent ingelogd als';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Waarschuwing, de installatiemap bestaat nog steeds. U dient deze te verwijderen om veiligheidsrisico&rsquo;s te vermijden!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Welkom bij het websitebeheer';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Attentie: om de template aan te passen moet u naar de instellingensectie';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'Dit nieuwe thema bestaat reeds.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Kopieer het huidige actieve thema en sla het op met een nieuwe naam.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'Geen rechten om deze thema-directory aan te maken!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Importeer additionele templates binnen het huidige actieve thema.<br />Gebruik deze templates om het corresponderende default template te overschrijven.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Ongeldige descriptor voor het nieuwe thema opgegeven';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Onbekende uploadfout';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Bestand kon niet worden weggeschreven';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'Bestandsupload gestopt vanwege de extensie';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'De ge&uuml;ploade file is groter dan de MAX_FILE_SIZE instelling van het HTML-formulier';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'De ge&uuml;ploade file is groter dan de upload_max_filesize instelling in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'Geen bestand ge&uuml;pload';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Tijdelijke map ontbreekt';
+$MESSAGE['UPLOAD_ERR_OK'] = 'Bestand(en) succesvol ge&uuml;pload';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'Het bestand is slechts gedeeltelijk ge&uuml;pload';
+$MESSAGE['USERS_ADDED'] = 'Gebruiker toegevoegd';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Functie geweigerd. U kunt zichzelf niet verwijderen!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Attentie: vul alleen de bovenstaande velden in wanneer u het wachtwoord van de gebruiker wilt veranderen';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Weet u zeker dat u de geselecteerde gebruiker wilt verwijderen?';
+$MESSAGE['USERS_DELETED'] = 'Gebruiker verwijderd';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Het ingevoerde e-mailadres is al in gebruik';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Het ingevoerde e-mailadres is niet correct';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Ongeldig aantal tekens voor de inlognaam';
+$MESSAGE['USERS_NO_GROUP'] = 'Geen groep geselecteerd';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'De ingevoerde wachtwoorden komen niet overeen';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Het ingevoerde wachtwoord is te kort';
+$MESSAGE['USERS_SAVED'] = 'Gebruiker opgeslagen';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'De gekozen inlognaam is reeds in gebruik';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'De opgegeven inlognaam is te kort';
+$OVERVIEW['ADMINTOOLS'] = 'Diverse extra beheerinstellingen.';
+$OVERVIEW['GROUPS'] = 'Beheren van de gebruikersgroepen en hun rechten.';
+$OVERVIEW['HELP'] = 'Uitgebreide hulp voor het gebruik van dit systeem.';
+$OVERVIEW['LANGUAGES'] = 'Beheren van de aanwezige taalbestanden.';
+$OVERVIEW['MEDIA'] = 'Beheren van bestanden in de Media-map.';
+$OVERVIEW['MODULES'] = 'Beheren van modules die extra functies toevoegen aan uw site.';
+$OVERVIEW['PAGES'] = 'Aanmaken en beheren van de sitestructuur en pagina&rsquo;s.';
+$OVERVIEW['PREFERENCES'] = 'Beheren van uw persoonlijk profiel.';
+$OVERVIEW['SETTINGS'] = 'Beheren van de technische website-instellingen.';
+$OVERVIEW['START'] = 'Websitebeheer';
+$OVERVIEW['TEMPLATES'] = 'Beheren van de templates die u kunt toepassen.';
+$OVERVIEW['USERS'] = 'Beheren van de gebruikers van uw website.';
+$OVERVIEW['VIEW'] = 'Bekijk uw website zoals deze voor bezoekers te zien is (in een afzonderlijk venster).';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/NO.php
===================================================================
--- trunk/languages/NO.php	(nonexistent)
+++ trunk/languages/NO.php	(revision 2)
@@ -0,0 +1,680 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'NO';
+$language_name = 'Norsk (bokmål / riksmål)';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Odd Egil Hansen (oeh)';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Tilgang';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Tillegg';
+$MENU['ADMINTOOLS'] = 'Admin-verkt&oslash;y';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Hent innloggings informasjon';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupper';
+$MENU['HELP'] = 'Hjelp';
+$MENU['LANGUAGES'] = 'Spr&aring;k';
+$MENU['LOGIN'] = 'Logg inn';
+$MENU['LOGOUT'] = 'Logg ut';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Moduler';
+$MENU['PAGES'] = 'Sider';
+$MENU['PREFERENCES'] = 'Bruker innstillinger';
+$MENU['SETTINGS'] = 'Innstillinger';
+$MENU['START'] = 'Start';
+$MENU['TEMPLATES'] = 'Maler';
+$MENU['USERS'] = 'Brukere';
+$MENU['VIEW'] = 'Forh&aring;ndsvis';
+$TEXT['ACCOUNT_SIGNUP'] = 'Konto Registrering';
+$TEXT['ACTIONS'] = 'Valg';
+$TEXT['ACTIVE'] = 'Aktivt';
+$TEXT['ADD'] = 'Tilf&oslash;y';
+$TEXT['ADDON'] = 'Tillegg';
+$TEXT['ADD_SECTION'] = 'Legg Til Seksjon';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administrasjon';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administrasjonsverkt&oslash;y';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratorer';
+$TEXT['ADVANCED'] = 'Avansert';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Tillatte filtyper ved opplasting';
+$TEXT['ALLOWED_VIEWERS'] = 'Tillatte lesere';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Tillat Flere Valg';
+$TEXT['ALL_WORDS'] = 'Alle Ord';
+$TEXT['ANCHOR'] = 'Anker';
+$TEXT['ANONYMOUS'] = 'Anonym';
+$TEXT['ANY_WORDS'] = 'Samme Hvilke Ord';
+$TEXT['APP_NAME'] = 'Applikasjonsnavn';
+$TEXT['ARE_YOU_SURE'] = 'Er du sikker?';
+$TEXT['AUTHOR'] = 'Skribent';
+$TEXT['BACK'] = 'Tilbake';
+$TEXT['BACKUP'] = 'Sikkerhetskopiere';
+$TEXT['BACKUP_ALL_TABLES'] = 'Sikkerhetskopiere alle tabeller i databasen';
+$TEXT['BACKUP_DATABASE'] = 'Sikkerhetskopiere database';
+$TEXT['BACKUP_MEDIA'] = 'Sikkerhetskopi Medie';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Sikkerhetskopiere bare WB- spesifikke tabeller';
+$TEXT['BASIC'] = 'Grunnleggende';
+$TEXT['BLOCK'] = 'Blokker';
+$TEXT['CALENDAR'] = 'Kalender';
+$TEXT['CANCEL'] = 'Avbryt';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Kan slette egen bruker';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha bekreftelse';
+$TEXT['CAP_EDIT_CSS'] = 'Rediger CSS koden';
+$TEXT['CHANGE'] = 'Forandre';
+$TEXT['CHANGES'] = 'Endringer';
+$TEXT['CHANGE_SETTINGS'] = 'Endre Innstillinger';
+$TEXT['CHARSET'] = 'Tegnsett';
+$TEXT['CHECKBOX_GROUP'] = 'Valgboks Gruppe';
+$TEXT['CLOSE'] = 'Lukk';
+$TEXT['CODE'] = 'Kode';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Skjul';
+$TEXT['COMMENT'] = 'Kommentar';
+$TEXT['COMMENTING'] = 'Kommenterer';
+$TEXT['COMMENTS'] = 'Kommentarer';
+$TEXT['CREATE_FOLDER'] = 'Opprett Katalog';
+$TEXT['CURRENT'] = 'Aktuell';
+$TEXT['CURRENT_FOLDER'] = 'Gjelende Katalog';
+$TEXT['CURRENT_PAGE'] = 'Aktuell Side';
+$TEXT['CURRENT_PASSWORD'] = 'Gjeldende Passord';
+$TEXT['CUSTOM'] = 'Egendefinert';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Dato';
+$TEXT['DATE_FORMAT'] = 'Dato format';
+$TEXT['DEFAULT'] = 'Standard';
+$TEXT['DEFAULT_CHARSET'] = 'Standard Charset';
+$TEXT['DEFAULT_TEXT'] = 'Standard Tekst';
+$TEXT['DELETE'] = 'Slett';
+$TEXT['DELETED'] = 'Slettet';
+$TEXT['DELETE_DATE'] = 'Slette dato';
+$TEXT['DELETE_ZIP'] = 'Slett .zip arkivet etter at den er pakket ut';
+$TEXT['DESCRIPTION'] = 'Beskrivelse';
+$TEXT['DESIGNED_FOR'] = 'Laget For';
+$TEXT['DIRECTORIES'] = 'Kataloger';
+$TEXT['DIRECTORY_MODE'] = 'Katalog Modus';
+$TEXT['DISABLED'] = 'Deaktivert';
+$TEXT['DISPLAY_NAME'] = 'Vis Navn';
+$TEXT['EMAIL'] = 'E-post';
+$TEXT['EMAIL_ADDRESS'] = 'E-post Adresse';
+$TEXT['EMPTY_TRASH'] = 'T&oslash;m S&oslash;ppel';
+$TEXT['ENABLED'] = 'Aktivert';
+$TEXT['END'] = 'Slutt';
+$TEXT['ERROR'] = 'Feil';
+$TEXT['EXACT_MATCH'] = 'Eksakt Treff';
+$TEXT['EXECUTE'] = 'Utf&oslash;re';
+$TEXT['EXPAND'] = 'Utvid';
+$TEXT['EXTENSION'] = 'Utvidelse';
+$TEXT['FIELD'] = 'Felt';
+$TEXT['FILE'] = 'Fil';
+$TEXT['FILES'] = 'Filer';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Filsystem Tillgang';
+$TEXT['FILE_MODE'] = 'Fil Modus';
+$TEXT['FINISH_PUBLISHING'] = 'Avslutt Publisering';
+$TEXT['FOLDER'] = 'Katalog';
+$TEXT['FOLDERS'] = 'Kataloger';
+$TEXT['FOOTER'] = 'Bunntekst ';
+$TEXT['FORGOTTEN_DETAILS'] = 'Glemt dine detaljer?';
+$TEXT['FORGOT_DETAILS'] = 'Glemt detaljer?';
+$TEXT['FROM'] = 'Fra';
+$TEXT['FRONTEND'] = 'Forside';
+$TEXT['FULL_NAME'] = 'Fult Navn';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Gruppe';
+$TEXT['HEADER'] = 'Topptekst';
+$TEXT['HEADING'] = 'Overskrift';
+$TEXT['HEADING_CSS_FILE'] = 'Faktisk modul fil: ';
+$TEXT['HEIGHT'] = 'H&oslash;yde';
+$TEXT['HIDDEN'] = 'Skjult';
+$TEXT['HIDE'] = 'Skjul';
+$TEXT['HIDE_ADVANCED'] = 'Skjul Avanserte Valg';
+$TEXT['HOME'] = 'Hjem';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Hjemmeside Omadressering';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Vert';
+$TEXT['ICON'] = 'Ikon';
+$TEXT['IMAGE'] = 'Bilde';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Innstaller';
+$TEXT['INSTALLATION'] = 'Installsjon';
+$TEXT['INSTALLATION_PATH'] = 'Innstallasjons Sti';
+$TEXT['INSTALLATION_URL'] = 'Installasjons URL';
+$TEXT['INSTALLED'] = 'installert';
+$TEXT['INTRO'] = 'Introduksjon';
+$TEXT['INTRO_PAGE'] = 'Intro Side';
+$TEXT['INVALID_SIGNS'] = 'm&aring; begynne med en bokstav eller har ugyldige tegn';
+$TEXT['KEYWORDS'] = 'N&oslash;kkelord';
+$TEXT['LANGUAGE'] = 'Spr&aring;k';
+$TEXT['LAST_UPDATED_BY'] = 'Sist Endret Av';
+$TEXT['LENGTH'] = 'Lengde';
+$TEXT['LEVEL'] = 'Niv&aring;';
+$TEXT['LINK'] = 'Lenke';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix bassert';
+$TEXT['LIST_OPTIONS'] = 'Vis Valg';
+$TEXT['LOGGED_IN'] = 'Innlogget';
+$TEXT['LOGIN'] = 'Logg inn';
+$TEXT['LONG'] = 'Langt';
+$TEXT['LONG_TEXT'] = 'Lang Tekst';
+$TEXT['LOOP'] = 'L&oslash;kke';
+$TEXT['MAIN'] = 'Hoved';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Administrer';
+$TEXT['MANAGE_GROUPS'] = 'Administrer Grupper';
+$TEXT['MANAGE_USERS'] = 'Administrer Brukere';
+$TEXT['MATCH'] = 'Treff';
+$TEXT['MATCHING'] = 'Finner Motstykke';
+$TEXT['MAX_EXCERPT'] = 'Maksimalt antall linjer for utdrag';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maks Avgivelser Per Time';
+$TEXT['MEDIA_DIRECTORY'] = 'Media Katalog';
+$TEXT['MENU'] = 'Meny';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Meny Tittel';
+$TEXT['MESSAGE'] = 'Melding';
+$TEXT['MODIFY'] = 'Endre';
+$TEXT['MODIFY_CONTENT'] = 'Endre innhold';
+$TEXT['MODIFY_SETTINGS'] = 'Endre innstillinger';
+$TEXT['MODULE_ORDER'] = 'Modul-rekkef&oslash;lge for s&oslash;king';
+$TEXT['MODULE_PERMISSIONS'] = 'Modul Adgang';
+$TEXT['MORE'] = 'Mer';
+$TEXT['MOVE_DOWN'] = 'Flytt ned';
+$TEXT['MOVE_UP'] = 'Flytt opp';
+$TEXT['MULTIPLE_MENUS'] = 'Flere Menyer';
+$TEXT['MULTISELECT'] = 'Flere Valg';
+$TEXT['NAME'] = 'Navn';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'Bekreft med gjeldende passord';
+$TEXT['NEED_TO_LOGIN'] = 'Trenger du &aring; logge inn?';
+$TEXT['NEW_PASSWORD'] = 'Nytt Passord';
+$TEXT['NEW_WINDOW'] = 'Nytt Vindu';
+$TEXT['NEXT'] = 'Neste';
+$TEXT['NEXT_PAGE'] = 'Neste Side';
+$TEXT['NO'] = 'Nei';
+$TEXT['NONE'] = 'Ingen';
+$TEXT['NONE_FOUND'] = 'Ingen funnet';
+$TEXT['NOT_FOUND'] = 'Ikke Funnet';
+$TEXT['NOT_INSTALLED'] = 'ikke installert';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Ingen Resultater';
+$TEXT['OF'] = 'Av';
+$TEXT['ON'] = 'P&aring;';
+$TEXT['OPEN'] = '&Aring;pne';
+$TEXT['OPTION'] = 'Valg';
+$TEXT['OTHERS'] = 'Andre';
+$TEXT['OUT_OF'] = 'Av antall';
+$TEXT['OVERWRITE_EXISTING'] = 'Overskriv eksisterende';
+$TEXT['PAGE'] = 'Side';
+$TEXT['PAGES_DIRECTORY'] = 'Side Katalog';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Side Tillegg';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Side Spr&aring;k';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Side Niv&aring; Begrensning';
+$TEXT['PAGE_SPACER'] = 'Side Mellomrom';
+$TEXT['PAGE_TITLE'] = 'Side Tittel';
+$TEXT['PAGE_TRASH'] = 'Sides&oslash;ppel';
+$TEXT['PARENT'] = 'Hovedkategori';
+$TEXT['PASSWORD'] = 'Passord';
+$TEXT['PATH'] = 'Sti';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Feil rapporteringsniv&aring;';
+$TEXT['PLEASE_LOGIN'] = 'Venligst log p&aring;';
+$TEXT['PLEASE_SELECT'] = 'Vennligst velg';
+$TEXT['POST'] = 'Innlegg';
+$TEXT['POSTS_PER_PAGE'] = 'Innlegg Per Side';
+$TEXT['POST_FOOTER'] = 'Legg Til Bunntekst';
+$TEXT['POST_HEADER'] = 'Legg Til Topptekst';
+$TEXT['PREVIOUS'] = 'Forrige';
+$TEXT['PREVIOUS_PAGE'] = 'Forrige Side';
+$TEXT['PRIVATE'] = 'Privat';
+$TEXT['PRIVATE_VIEWERS'] = 'Private Seere';
+$TEXT['PROFILES_EDIT'] = 'Endre profilen';
+$TEXT['PUBLIC'] = 'Offentlig';
+$TEXT['PUBL_END_DATE'] = 'Slutt dato';
+$TEXT['PUBL_START_DATE'] = 'Start dato';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radioknapp Gruppe';
+$TEXT['READ'] = 'Les';
+$TEXT['READ_MORE'] = 'Les Mer';
+$TEXT['REDIRECT_AFTER'] = 'Videresend etter';
+$TEXT['REGISTERED'] = 'Registrert';
+$TEXT['REGISTERED_VIEWERS'] = 'Registrerte Seere';
+$TEXT['RELOAD'] = 'Oppdater';
+$TEXT['REMEMBER_ME'] = 'Husk Meg';
+$TEXT['RENAME'] = 'Endre navn';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'P&aring;budt';
+$TEXT['REQUIREMENT'] = 'Krav';
+$TEXT['RESET'] = 'Tilbakestill';
+$TEXT['RESIZE'] = 'Endre St&oslash;rrelse';
+$TEXT['RESIZE_IMAGE_TO'] = 'Endre Bilde St&oslash;rrelse Til';
+$TEXT['RESTORE'] = 'Gjenopprett';
+$TEXT['RESTORE_DATABASE'] = 'Gjenopprett Database';
+$TEXT['RESTORE_MEDIA'] = 'Gjenopprett Media';
+$TEXT['RESULTS'] = 'Resultat';
+$TEXT['RESULTS_FOOTER'] = 'Resultat Bunntekst ';
+$TEXT['RESULTS_FOR'] = 'Resultat For';
+$TEXT['RESULTS_HEADER'] = 'Resultat Topptekst';
+$TEXT['RESULTS_LOOP'] = 'Resultat L&oslash;kke';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Skriv Passordet P&aring; Nytt';
+$TEXT['RETYPE_PASSWORD'] = 'Skriv Passord P&aring; Nytt';
+$TEXT['SAME_WINDOW'] = 'Samme Vindu';
+$TEXT['SAVE'] = 'Lagre';
+$TEXT['SEARCH'] = 'S&oslash;k';
+$TEXT['SEARCHING'] = 'S&oslash;ker';
+$TEXT['SECTION'] = 'Seksjon';
+$TEXT['SECTION_BLOCKS'] = 'Sekjsons Blokker';
+$TEXT['SEC_ANCHOR'] = 'Seksjonsanker tekst';
+$TEXT['SELECT_BOX'] = 'Velg Boks';
+$TEXT['SEND_DETAILS'] = 'Send detaljer';
+$TEXT['SEPARATE'] = 'Separat';
+$TEXT['SEPERATOR'] = 'Mellomrom';
+$TEXT['SERVER_EMAIL'] = 'Server E-post';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Serveren Operativ System';
+$TEXT['SESSION_IDENTIFIER'] = 'Sesjons id-navn';
+$TEXT['SETTINGS'] = 'Innstillinger';
+$TEXT['SHORT'] = 'Kort';
+$TEXT['SHORT_TEXT'] = 'Kort tekst';
+$TEXT['SHOW'] = 'Vis';
+$TEXT['SHOW_ADVANCED'] = 'Vis Avanserte Valg';
+$TEXT['SIGNUP'] = 'Registrer';
+$TEXT['SIZE'] = 'St&oslash;rrelse';
+$TEXT['SMART_LOGIN'] = 'Smart Innlogging';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Start Publisering';
+$TEXT['SUBJECT'] = 'Emne';
+$TEXT['SUBMISSIONS'] = 'Avgivelser';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Avgivelser Lagret i Database';
+$TEXT['SUBMISSION_ID'] = 'Avgitt ID';
+$TEXT['SUBMITTED'] = 'Avgitt';
+$TEXT['SUCCESS'] = 'Suksess';
+$TEXT['SYSTEM_DEFAULT'] = 'System Standard';
+$TEXT['SYSTEM_PERMISSIONS'] = 'System Adgang';
+$TEXT['TABLE_PREFIX'] = 'Tabell Prefiks';
+$TEXT['TARGET'] = 'M&aring;l';
+$TEXT['TARGET_FOLDER'] = 'Gjelende katalog';
+$TEXT['TEMPLATE'] = 'Mal';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Mal Tillgang';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Tekstomr&aring;de';
+$TEXT['TEXTFIELD'] = 'Tekstfelt';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Tid';
+$TEXT['TIMEZONE'] = 'Tidssone';
+$TEXT['TIME_FORMAT'] = 'Tids format';
+$TEXT['TIME_LIMIT'] = 'Maksimal tid for &aring; samle utrag per modul';
+$TEXT['TITLE'] = 'Tittel';
+$TEXT['TO'] = 'Til';
+$TEXT['TOP_FRAME'] = 'Topp ramme';
+$TEXT['TRASH_EMPTIED'] = 'S&oslash;ppelet er T&oslash;mt';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Rediger  CSS koden i tekst viduet nedenfor.';
+$TEXT['TYPE'] = 'Type';
+$TEXT['UNDER_CONSTRUCTION'] = 'Under Konstruksjon';
+$TEXT['UNINSTALL'] = 'Avinstaller';
+$TEXT['UNKNOWN'] = 'Ukjent';
+$TEXT['UNLIMITED'] = 'Ubegrenset';
+$TEXT['UNZIP_FILE'] = 'Last opp og pakk ut et .zip arkiv';
+$TEXT['UP'] = 'Opp';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Last opp fil(er)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Bruker';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Bekreftelse';
+$TEXT['VERSION'] = 'Versjon';
+$TEXT['VIEW'] = 'Se';
+$TEXT['VIEW_DELETED_PAGES'] = 'Vis Slettete Sider';
+$TEXT['VIEW_DETAILS'] = 'Se Detaljer';
+$TEXT['VISIBILITY'] = 'Synlighet';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Standard Fra e-post';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Standard Avsender Navn';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Spesifiser en standard "FRA" addresse og "AVSENDER" navn under. Det er annbefalt &aring; bruke en FRA adresse som: <strong>admin@yourdomain.com</strong>. Noen e-post leverand&oslash;rer(f.eks. <em>mail.com</em>) kan muligens avvise e-poster med en FRA: addresse som <em>name@mail.com</em> sendt igjennom en frmmed sent via en fremmed "relay" for &aring; unng&aring; spam.<br /><br />Standard verdiene brukes kun hvis det ikke er spessifisert andre verdier av WebsiteBaker. Hvis serveren din st&oslash;tter <acronym title="Simple mail transfer protocol">SMTP</acronym>, b&oslash;r du muligens benytte denne muligheten for utg&aring;ende e-post.';
+$TEXT['WBMAILER_FUNCTION'] = 'e-post rutine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP e-post innstillinger:</strong><br />Innstillingene under er kun p&aring;krevet hvis du vil sende e-post via <acronym title="Simple mail transfer protocol">SMTP</acronym>. Hvis du ikke vet hvem som er din "SMTP" leverand&oslash;r, eller du ikke er sikker p&aring; innstillingene som kreves, b&oslash;r du bruke standard e-post rutinen: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Autentifisering';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'aktiveres kun hvis din SMTP v&aelig;rt krever autentifisering';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP V&aelig;rt';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Passord';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Internett Side';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Nettstedets Beskrivelse';
+$TEXT['WEBSITE_FOOTER'] = 'Nettsted Bunntekst ';
+$TEXT['WEBSITE_HEADER'] = 'Nettsted Topptekst';
+$TEXT['WEBSITE_KEYWORDS'] = 'Nettsted N&oslash;kkelord';
+$TEXT['WEBSITE_TITLE'] = 'Nettstedets Tittel';
+$TEXT['WELCOME_BACK'] = 'Velkommen tilbake';
+$TEXT['WIDTH'] = 'Bredde';
+$TEXT['WINDOW'] = 'Vindu';
+$TEXT['WINDOWS'] = 'WINDOWS';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Global skrivetilgang til filer';
+$TEXT['WRITE'] = 'Skriv';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Stil';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Kravene for installering av denne modulen er ikke oppfylt';
+$HEADING['ADD_CHILD_PAGE'] = 'Legg til ny underside';
+$HEADING['ADD_GROUP'] = 'Legg til Gruppe';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Tilf&oslash;y overskrift';
+$HEADING['ADD_PAGE'] = 'Legg til side';
+$HEADING['ADD_USER'] = 'Legg til Bruker';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administrasjonsverkt&oslash;y';
+$HEADING['BROWSE_MEDIA'] = 'Utforsk Media';
+$HEADING['CREATE_FOLDER'] = 'Opprett Katalog';
+$HEADING['DEFAULT_SETTINGS'] = 'Standard Innstillinger';
+$HEADING['DELETED_PAGES'] = 'Slettede sider';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Filsystem Innstillinger';
+$HEADING['GENERAL_SETTINGS'] = 'Generelle Instillinger';
+$HEADING['INSTALL_LANGUAGE'] = 'Installer Spr&aring;k';
+$HEADING['INSTALL_MODULE'] = 'Innstaller Modul';
+$HEADING['INSTALL_TEMPLATE'] = 'Installer Mal';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Start modul filene mauelt';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Spr&aring;k Detaljer';
+$HEADING['MANAGE_SECTIONS'] = 'Administrer seksjoner';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Endre avansert sideinnstillinger';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Endre/Slette Gruppe';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Endre/Slett side';
+$HEADING['MODIFY_DELETE_USER'] = 'Endre/Slette Bruker';
+$HEADING['MODIFY_GROUP'] = 'Endre Gruppe';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Endre introduksjons side';
+$HEADING['MODIFY_PAGE'] = 'Endre side';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Endre sideinnstillinger';
+$HEADING['MODIFY_USER'] = 'Endre Bruker';
+$HEADING['MODULE_DETAILS'] = 'Modul Detaljer';
+$HEADING['MY_EMAIL'] = 'Min E-post';
+$HEADING['MY_PASSWORD'] = 'Mitt Passord';
+$HEADING['MY_SETTINGS'] = 'Mine Innstillinger';
+$HEADING['SEARCH_SETTINGS'] = 'S&oslash;ke Innstillinger';
+$HEADING['SERVER_SETTINGS'] = 'Server Innstillinger';
+$HEADING['TEMPLATE_DETAILS'] = 'Mal Detaljer';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Avinstaller Spr&aring;k';
+$HEADING['UNINSTALL_MODULE'] = 'Avinstaller Modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Avinstaller Mal';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Last opp fil(er)';
+$HEADING['WBMAILER_SETTINGS'] = 'Innstillinger for e-post senderen';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Mangelfull tillgangs rettigheter';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Beklager, men passord kan ikke tilbakestilles mer enn en gang i timen.';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Kunne ikke sende passord. Kontakt system administrator';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'E-post adressen ble ikke funnet i databasen';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Vennligst skriv e-post adressen nedenfor';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Beklager, ikke noe aktivt innhold &aring; vise.';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Beklager, du har ikke tillgang til &aring; se denne siden';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Allerede installert';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kunne ikke skrive til m&aring;l katalogen';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Kan ikke avinstallere';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Kan ikke avinstallere: Valgte fil er i bruk';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> kunne ikke avinstalleres, da den fortsatt benyttes p&aring; siden {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'denne siden;disse sidene';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Kan ikke avinstallere designmalen <b>{{name}}</b>, da den benyttes som standard designmal!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Kan ikke pakke ut .zip filen';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Kan ikke laste opp fil';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Feil ved &aring;pningen av filen.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Vennligst merk at filen du vil laste opp m&aring; v&aelig;re av f&oslash;lgende format:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Vennligst merk at filen du vil laste opp m&aring; v&aelig;re en av f&oslash;lgende formater:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Vennligst g&aring; tilbake og fyll inn alle felter';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Lykkes &aring; installere';
+$MESSAGE['GENERIC_INVALID'] = 'Filen du lastet opp er ikke gyldig';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Feil i WebsiteBaker installasjons filen. Vennligst sjekk formatet &aring; *.zip filen.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Feil i WebsiteBaker spr&aring;k filen. Vennligst sjekk tekst filen.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Ikke installert';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Vennligst v&aelig;r t&aring;lmodig, dette kan ta en stund.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Vennligst kom tilbake p&aring; et annet tidspunkt...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Brudd p&aring; sikkerheten!! Lagring av data ble nektet!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Lykkes &aring; avinstallere';
+$MESSAGE['GENERIC_UPGRADED'] = 'Lykkes &aring; oppdatere';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Nettstedet er under konstruksjon';
+$MESSAGE['GROUPS_ADDED'] = 'Lykkes &aring; legge til gruppe';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Slette valgte gruppe (og dermed ogs&aring; alle tilh&oslash;rende brukere)?';
+$MESSAGE['GROUPS_DELETED'] = 'Lykkes &aring; slette gruppe';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Gruppe navn ikke angitt';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Gruppenavn finnes allerede';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Ingen gruppe funnet';
+$MESSAGE['GROUPS_SAVED'] = 'Lykkes &aring; lagre gruppe';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Vennligst skriv et passord';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Det angitte passordet er for langt';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Det angitte passordet er for kort';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Du tastet ikke inn en fil utvidelse';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Du anga ikke et nytt navn';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Kan ikke slette valgte katalog';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Kan ikke slette valgte fil';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Mislykkes &aring; endre navn';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Vil du virkelig slette filen eller katalogen?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Lykkes &aring; slette katalog';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Lykkes &aring; slette fil';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Katalogen finnes ikke';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Kan ikke benytte ../ i katalog navnet';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'En katalog med samme navn eksisterer allerede';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Lykkes &aring; opprette katalogen';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Mislykkes &aring; opprette katalogen';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'En fil med samme navn eksisterer allerede';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Fant ingen fil';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Kan ikke benytte ../ i navnet';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Kan ikke benytte index.php som navnet';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Det ble ikke funnet noen media i den angitte katalogen';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Lykkes &aring; endre navn';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' Lykkes &aring; laste opp filen';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Kan ikke ha ../ i katalog m&aring;let';
+$MESSAGE['MEDIA_UPLOADED'] = ' Lykkes &aring; laste opp filene';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Beklager, dette skjemaet har blitt sendt for mange ganger denne timen. Vennligst pr&oslash;v igjen om en time.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Bekreftelsesnummeret (ogs&aring; kjent som Captcha) som du skrev inn er feil. Hvis du har problemer med &aring; lese Captcha, vennligst kontakt: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Du m&aring; skrive inn detaljer for f&oslash;lgende felt';
+$MESSAGE['PAGES_ADDED'] = 'Lykkes &aring; legge til siden';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Lykkes &aring; legge til side overskrift';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Vennligst skriv inn meny tittel';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Vennligst skriv inn side tittel';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Feilet &aring; opprette adgang fil i /pages katalog (manglende rettigheter)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Feilet &aring; slette adgang fil i /pages katalog (manglende rettigheter)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Feilet &aring; endre rekkef&oslash;lge';
+$MESSAGE['PAGES_DELETED'] = 'Lykkes &aring; slette side';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Er du sikker p&aring; at du vil slette valgte side (og dermed alle under-sider)?';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Du har ikke rettigheter til &aring; endre denne siden';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Klikk HER for &aring; endre intro siden';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Kunne ikke skrive til fil /pages/intro.php (manglende rettigheter)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Lykkes &aring; lagre intro side';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Sist modifisert av';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Fant ikke siden';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Kunne ikke lagre side';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'En side med lik eller tilsvarende tittel eksisterer';
+$MESSAGE['PAGES_REORDERED'] = 'Lykkes &aring; endre side rekkef&oslash;lge';
+$MESSAGE['PAGES_RESTORED'] = 'Lykkes &aring; gjenopprette side';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Tilbake til sider';
+$MESSAGE['PAGES_SAVED'] = 'Lykkes &aring; lagre side';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Lykkes &aring; lagre side innstillinger';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Lykkes &aring; lagre seksjons innstillinger';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Passordet du skrev inn er ikke korrekt';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Lykkes &aring; lagre detaljer';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Lykkes &aring; oppdatere e-post';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Ugyldige karakterer er benyttet i passordet';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Lykkes &aring; endre passord';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'Endring av oppf&oslash;ringen feilet.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'Den endrede oppf&oslash;ringen ble lagret.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Innlegging av ny oppf&oslash;ring feilet.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'Ny oppf&oslash;ring ble lagt til.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Merk: Ved &aring; klikke denne knappen lagres ikke endringer';
+$MESSAGE['SETTINGS_SAVED'] = 'Lykkes &aring; lagre endringer';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Kunne ikke &aring;pne konfigurasjons filen';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Kunne ikke skrive til konfigurasjons filen';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Merk: Dette er kun ment for teste milj&oslash;er';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+En ny bruker ble registrert.
+
+Loginname: {LOGIN_NAME}
+BrukerID: {LOGIN_ID}
+e-post: {LOGIN_EMAIL}
+IP-Adresse: {LOGIN_IP}
+Registrasjons dateo: {SIGNUP_DATE}
+----------------------------------------
+Denne meldingen ble automatisk generert!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hei {LOGIN_DISPLAY_NAME},
+
+Denne e-posten ble sendt til deg fordi \'glemt passord\' funksjonen er blitt benyttet p&aring; din konto.
+Dine nye \'{LOGIN_WEBSITE_TITLE}\' p&aring;loggingsdetalejer er:
+
+Loginname: {LOGIN_NAME}
+Passord: {LOGIN_PASSWORD}
+
+Passordet dit er endret til det som st&aring;r over.
+Dette betyr at det gamle passordet dit ikke virker lenger!
+Hvis du har sp&oslash;rsm&aring;le eller problemer med de nye p&aring;loggingsdataene
+b&oslash;r du ta kontakt med \'{LOGIN_WEBSITE_TITLE}\' sine administratorer.
+Venligst husk &aring; t&oslash;mme nettleserens cache f&oslash;r du benytter deg av de nye p&aring;loggingsdetaljene dine, slik at du unng&aring;r uventede feil.
+Med hilsen
+------------------------------------
+Denne meldingen ble automatisk generert!
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hei {LOGIN_DISPLAY_NAME},
+
+Velkommen til v&aring;r hjemmeside \'{LOGIN_WEBSITE_TITLE}\'.
+
+Dine \'{LOGIN_WEBSITE_TITLE}\' p&aring;loggingsdetaljer er:
+Loginname: {LOGIN_NAME}
+Passord: {LOGIN_PASSWORD}
+
+Med hilsen
+OBS!:
+Hvis du har mottatt denne e-posten ved en feiltakelse, vennligst slett den med en gang!
+-------------------------------------
+Denne meldingen ble automatisk generert!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Dine p&aring;-loggings detaljer...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Du m&aring; skrive inn en e-post adresse';
+$MESSAGE['START_CURRENT_USER'] = 'Du er logget inn som:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Advarsel, installasjonskatalogen eksisterer forsatt!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Velkommen til WebsiteBaker Administrasjon';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Merk: For &aring; endre malen m&aring; man gj&oslash;re dette i Instillinger seksjonen';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Lykkes &aring; opprette ny bruker';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Handlingen ble forkastet. Du kan ikke slette deg selv!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Merk: Skriv kun inn verdier i feltene ovenfor hvis du vil endre passordet til denne brukeren';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Vil du virkelig slette den valgte brukeren?';
+$MESSAGE['USERS_DELETED'] = 'Lykkes &aring; slette bruker';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'E-post adresse allerede i bruk';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'E-post adresse ikke gyldig';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Ingen gruppe ble valgt';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Passordene er ikke like';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Angitt passord for kort';
+$MESSAGE['USERS_SAVED'] = 'Lykkes &aring; lagre bruker';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'G&aring; inn p&aring; WebsiteBaker sine administrasjonsverkt&oslash;y...';
+$OVERVIEW['GROUPS'] = 'Administrer grupper og deres system adgang...';
+$OVERVIEW['HELP'] = 'Har du et sp&oslash;rsm&aring;l? Finn svaret...';
+$OVERVIEW['LANGUAGES'] = 'Administrer WebsiteBaker spr&aring;k...';
+$OVERVIEW['MEDIA'] = 'Administrer filer lagret i media katalogen...';
+$OVERVIEW['MODULES'] = 'Administrer WebsiteBaker moduler...';
+$OVERVIEW['PAGES'] = 'Administrer dine internett sider...';
+$OVERVIEW['PREFERENCES'] = 'Forandre innstillinger som e-post adresse, passord, o.l....';
+$OVERVIEW['SETTINGS'] = 'Forandre instillinger for WebsiteBaker...';
+$OVERVIEW['START'] = 'Administrasjons oversikt';
+$OVERVIEW['TEMPLATES'] = 'Forandre utseende p&aring; internett siden med maler...';
+$OVERVIEW['USERS'] = 'Velg hvilke brukere som kan logge inn i WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Forh&aring;ndsvis internett siden din i et nytt vindu...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/PL.php
===================================================================
--- trunk/languages/PL.php	(nonexistent)
+++ trunk/languages/PL.php	(revision 2)
@@ -0,0 +1,683 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'PL';
+$language_name = 'Polski';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Marek Stepien;';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Dostep';
+$MENU['ADDON'] = 'Dodatek';
+$MENU['ADDONS'] = 'Dodatki';
+$MENU['ADMINTOOLS'] = 'Narzedzia admina';
+$MENU['BREADCRUMB'] = 'Jestes tu: ';
+$MENU['FORGOT'] = 'Odzyskaj dane logowania';
+$MENU['GROUP'] = 'Groupa';
+$MENU['GROUPS'] = 'Grupy';
+$MENU['HELP'] = 'Pomoc';
+$MENU['LANGUAGES'] = 'Jezyki';
+$MENU['LOGIN'] = 'Zaloguj sie';
+$MENU['LOGOUT'] = 'Wyloguj';
+$MENU['MEDIA'] = 'Media';
+$MENU['MODULES'] = 'Moduly';
+$MENU['PAGES'] = 'Strony';
+$MENU['PREFERENCES'] = 'Preferencje';
+$MENU['SETTINGS'] = 'Ustawienia';
+$MENU['START'] = 'Poczatek';
+$MENU['TEMPLATES'] = 'Szablony';
+$MENU['USERS'] = 'Uzytkownicy';
+$MENU['VIEW'] = 'Podglad';
+$TEXT['ACCOUNT_SIGNUP'] = 'Nowe konto';
+$TEXT['ACTIONS'] = 'Czynnosci';
+$TEXT['ACTIVE'] = 'Aktywne';
+$TEXT['ADD'] = 'Dodaj';
+$TEXT['ADDON'] = 'Dodatek';
+$TEXT['ADD_SECTION'] = 'Dodaj sekcji;';
+$TEXT['ADMIN'] = 'Administrator';
+$TEXT['ADMINISTRATION'] = 'Administracja';
+$TEXT['ADMINISTRATION_TOOL'] = 'Narzedzie administracyjne';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratorzy';
+$TEXT['ADVANCED'] = 'Zaawansowane';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Dozwolone pliki do uploadu';
+$TEXT['ALLOWED_VIEWERS'] = 'Dozwoleni obserwatorzy';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Pozwól na wielokrotne wybory';
+$TEXT['ALL_WORDS'] = 'Wszystkie slowa';
+$TEXT['ANCHOR'] = 'Kotwica';
+$TEXT['ANONYMOUS'] = 'Anonimowy';
+$TEXT['ANY_WORDS'] = 'Dowolne ze slów';
+$TEXT['APP_NAME'] = 'Nazwa aplikacji';
+$TEXT['ARE_YOU_SURE'] = 'Czy aby na pewno?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Wstecz';
+$TEXT['BACKUP'] = 'Kopia zapasowa';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Kopia zapasowa bazy danych';
+$TEXT['BACKUP_MEDIA'] = 'Kopia zapasowa mediów';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Kopia zapasowa tylko tabel WB_';
+$TEXT['BASIC'] = 'Podstawowe';
+$TEXT['BLOCK'] = 'Blokuj';
+$TEXT['CALENDAR'] = 'Calentarz';
+$TEXT['CANCEL'] = 'Anuluj';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Weryfikacja Captcha';
+$TEXT['CAP_EDIT_CSS'] = 'Edytuj CSS';
+$TEXT['CHANGE'] = 'Zmien;';
+$TEXT['CHANGES'] = 'Zmiany';
+$TEXT['CHANGE_SETTINGS'] = 'Zmien ustawienia';
+$TEXT['CHARSET'] = 'Kodowanie znaków';
+$TEXT['CHECKBOX_GROUP'] = 'Grupa pól zaznaczanych';
+$TEXT['CLOSE'] = 'Zamknij';
+$TEXT['CODE'] = 'Kod';
+$TEXT['CODE_SNIPPET'] = 'Kod snippeta';
+$TEXT['COLLAPSE'] = 'Zwin;';
+$TEXT['COMMENT'] = 'Komentarz';
+$TEXT['COMMENTING'] = 'Komentowanie';
+$TEXT['COMMENTS'] = 'Komentarze';
+$TEXT['CREATE_FOLDER'] = 'Utwórz folder';
+$TEXT['CURRENT'] = 'Biezacy';
+$TEXT['CURRENT_FOLDER'] = 'Biezacy folder';
+$TEXT['CURRENT_PAGE'] = 'Biezaca strona';
+$TEXT['CURRENT_PASSWORD'] = 'Biezace haslo';
+$TEXT['CUSTOM'] = 'Wlasny';
+$TEXT['DATABASE'] = 'Baza danych';
+$TEXT['DATE'] = 'Data';
+$TEXT['DATE_FORMAT'] = 'Format daty';
+$TEXT['DEFAULT'] = 'Domyslne';
+$TEXT['DEFAULT_CHARSET'] = 'Domyslne kodowanie znaków';
+$TEXT['DEFAULT_TEXT'] = 'Domyslny tekst';
+$TEXT['DELETE'] = 'Usun;';
+$TEXT['DELETED'] = 'Usuniete';
+$TEXT['DELETE_DATE'] = 'Usun date';
+$TEXT['DELETE_ZIP'] = 'Usun archiwum zip po rozpakowaniu';
+$TEXT['DESCRIPTION'] = 'Opis';
+$TEXT['DESIGNED_FOR'] = 'Zaprojektowane dla';
+$TEXT['DIRECTORIES'] = 'Katalogi';
+$TEXT['DIRECTORY_MODE'] = 'Tryb katalogów';
+$TEXT['DISABLED'] = 'Wylaczone';
+$TEXT['DISPLAY_NAME'] = 'Nazwa';
+$TEXT['EMAIL'] = 'E-mail';
+$TEXT['EMAIL_ADDRESS'] = 'Adres e-mail';
+$TEXT['EMPTY_TRASH'] = 'Opróznij smietnik';
+$TEXT['ENABLED'] = 'Wlaczone';
+$TEXT['END'] = 'Koniec';
+$TEXT['ERROR'] = 'Blad';
+$TEXT['EXACT_MATCH'] = 'Dopasowanie dokladne';
+$TEXT['EXECUTE'] = 'Wykonaj';
+$TEXT['EXPAND'] = 'Rozwin';
+$TEXT['EXTENSION'] = 'Rozszerzenie';
+$TEXT['FIELD'] = 'Pole';
+$TEXT['FILE'] = 'plik';
+$TEXT['FILES'] = 'pliki';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Uprawnienia systemu plików';
+$TEXT['FILE_MODE'] = 'Tryb plikw';
+$TEXT['FINISH_PUBLISHING'] = 'Zakoncz publikowanie';
+$TEXT['FOLDER'] = 'folder';
+$TEXT['FOLDERS'] = 'foldery';
+$TEXT['FOOTER'] = 'Stopka';
+$TEXT['FORGOTTEN_DETAILS'] = 'Zapomniales(-as) hasla?';
+$TEXT['FORGOT_DETAILS'] = 'Zapomniales(-as) szczególów?';
+$TEXT['FROM'] = 'Od';
+$TEXT['FRONTEND'] = 'Panel przedni';
+$TEXT['FULL_NAME'] = 'Imie i nazwisko';
+$TEXT['FUNCTION'] = 'Funkcja';
+$TEXT['GROUP'] = 'Grupa';
+$TEXT['HEADER'] = 'Naglówek';
+$TEXT['HEADING'] = 'Naglówek';
+$TEXT['HEADING_CSS_FILE'] = 'Aktualny plik modulu: ';
+$TEXT['HEIGHT'] = 'Wysokosc;';
+$TEXT['HIDDEN'] = 'Ukryty';
+$TEXT['HIDE'] = 'Schowaj';
+$TEXT['HIDE_ADVANCED'] = 'Schowaj opcje zaawansowane';
+$TEXT['HOME'] = 'Strona domowa';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Przekierowanie strony domowej';
+$TEXT['HOME_FOLDER'] = 'Osobisty Folder';
+$TEXT['HOME_FOLDERS'] = 'Osobiste Foldery';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Ikona';
+$TEXT['IMAGE'] = 'Obrazek';
+$TEXT['INLINE'] = 'Inline';
+$TEXT['INSTALL'] = 'Zainstaluj';
+$TEXT['INSTALLATION'] = 'Instalacja';
+$TEXT['INSTALLATION_PATH'] = 'Sciezka instalacji';
+$TEXT['INSTALLATION_URL'] = 'URL instalacji';
+$TEXT['INSTALLED'] = 'zainstalowano';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = 'Strona wprowadzajaca';
+$TEXT['INVALID_SIGNS'] = 'musi zaczynac sie od litery badz niedozwolonych znaków';
+$TEXT['KEYWORDS'] = 'slow kluczowe';
+$TEXT['LANGUAGE'] = 'Jezyk';
+$TEXT['LAST_UPDATED_BY'] = 'Ostatnio zmienione przez';
+$TEXT['LENGTH'] = 'Dlugosc';
+$TEXT['LEVEL'] = 'Poziom';
+$TEXT['LINK'] = 'Odnosnik';
+$TEXT['LINUX_UNIX_BASED'] = 'oparty na Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Listuj opcje';
+$TEXT['LOGGED_IN'] = 'Zalogowany';
+$TEXT['LOGIN'] = 'Zaloguj';
+$TEXT['LONG'] = 'Dlugi';
+$TEXT['LONG_TEXT'] = 'Dlugi tekst';
+$TEXT['LOOP'] = 'Petla';
+$TEXT['MAIN'] = 'Glówny';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Zarzadzaj';
+$TEXT['MANAGE_GROUPS'] = 'Zarzadzaj grupami';
+$TEXT['MANAGE_USERS'] = 'Zarzadzaj uzytkownikami';
+$TEXT['MATCH'] = 'Dopasuj';
+$TEXT['MATCHING'] = 'Pasujace';
+$TEXT['MAX_EXCERPT'] = 'Maksymalny fragment linii';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maks. zgloszen na godzine';
+$TEXT['MEDIA_DIRECTORY'] = 'Katalog mediów';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Tytul menu';
+$TEXT['MESSAGE'] = 'Wiadomosc';
+$TEXT['MODIFY'] = 'Zmien';
+$TEXT['MODIFY_CONTENT'] = 'Zmien zawartosc';
+$TEXT['MODIFY_SETTINGS'] = 'Zmien ustawienia';
+$TEXT['MODULE_ORDER'] = 'Modul- kolejnosc wyszukiwania';
+$TEXT['MODULE_PERMISSIONS'] = 'Uprawnienia do modulów';
+$TEXT['MORE'] = 'Wiecej';
+$TEXT['MOVE_DOWN'] = 'W dól';
+$TEXT['MOVE_UP'] = 'Do góry';
+$TEXT['MULTIPLE_MENUS'] = 'Wielokrotne menu';
+$TEXT['MULTISELECT'] = 'Wybór wielokrotny';
+$TEXT['NAME'] = 'Nazwa';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'potwierdz obecne haslo';
+$TEXT['NEED_TO_LOGIN'] = 'Potrzebujesz sie zalogowac?';
+$TEXT['NEW_PASSWORD'] = 'Nowe haslo';
+$TEXT['NEW_WINDOW'] = 'Nowe okno';
+$TEXT['NEXT'] = 'Nastepny';
+$TEXT['NEXT_PAGE'] = 'Nastepna strona';
+$TEXT['NO'] = 'Nie';
+$TEXT['NONE'] = 'Brak';
+$TEXT['NONE_FOUND'] = 'Nie odnaleziono';
+$TEXT['NOT_FOUND'] = 'Nie odnaleziono';
+$TEXT['NOT_INSTALLED'] = 'nie zainstalowano';
+$TEXT['NO_IMAGE_SELECTED'] = 'nie wybrano obrazu';
+$TEXT['NO_RESULTS'] = 'Brak wyników';
+$TEXT['OF'] = 'z';
+$TEXT['ON'] = 'dnia';
+$TEXT['OPEN'] = 'Otwórz';
+$TEXT['OPTION'] = 'Opcja';
+$TEXT['OTHERS'] = 'Inni';
+$TEXT['OUT_OF'] = 'z poza';
+$TEXT['OVERWRITE_EXISTING'] = 'Nadpisz istniejacy(-e)';
+$TEXT['PAGE'] = 'Strona';
+$TEXT['PAGES_DIRECTORY'] = 'Katalog stron';
+$TEXT['PAGES_PERMISSION'] = 'Prawa do strony';
+$TEXT['PAGES_PERMISSIONS'] = 'Prawa do stron';
+$TEXT['PAGE_EXTENSION'] = 'Rozszerzenie strony';
+$TEXT['PAGE_ICON'] = 'Obrazek strony';
+$TEXT['PAGE_ICON_DIR'] = 'Sciezka stron/obrazki menu';
+$TEXT['PAGE_LANGUAGES'] = 'Jezyki stron';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limit poziomów stron';
+$TEXT['PAGE_SPACER'] = 'Odstep strony';
+$TEXT['PAGE_TITLE'] = 'Tytul strony';
+$TEXT['PAGE_TRASH'] = 'Smietnik stron';
+$TEXT['PARENT'] = 'Nadrzedny';
+$TEXT['PASSWORD'] = 'Haslo';
+$TEXT['PATH'] = 'Sciezka';
+$TEXT['PHP_ERROR_LEVEL'] = 'Poziom raportowania bledów PHP';
+$TEXT['PLEASE_LOGIN'] = 'Podaj login';
+$TEXT['PLEASE_SELECT'] = 'Prosze wybrac';
+$TEXT['POST'] = 'Wiadomosc';
+$TEXT['POSTS_PER_PAGE'] = 'Wiadomosci na strone';
+$TEXT['POST_FOOTER'] = 'Stopka wiadomosci';
+$TEXT['POST_HEADER'] = 'Naglówek wiadomosci';
+$TEXT['PREVIOUS'] = 'Poprzedni';
+$TEXT['PREVIOUS_PAGE'] = 'Poprzednia strona';
+$TEXT['PRIVATE'] = 'Prywatna';
+$TEXT['PRIVATE_VIEWERS'] = 'Prywatni obserwatorzy';
+$TEXT['PROFILES_EDIT'] = 'Zmien profil';
+$TEXT['PUBLIC'] = 'Publiczna';
+$TEXT['PUBL_END_DATE'] = 'Data zakonczenia';
+$TEXT['PUBL_START_DATE'] = 'Data rozpoczecia';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Grupa pól przelaczanych';
+$TEXT['READ'] = 'Odczytaj';
+$TEXT['READ_MORE'] = 'Czytaj dalej';
+$TEXT['REDIRECT_AFTER'] = 'Przekierowanie po';
+$TEXT['REGISTERED'] = 'Zarejestrowany';
+$TEXT['REGISTERED_VIEWERS'] = 'Zarejestrowani obserwatorzy';
+$TEXT['RELOAD'] = 'Przeladuj, odswiez';
+$TEXT['REMEMBER_ME'] = 'Zapamietaj mnie';
+$TEXT['RENAME'] = 'Zmien nazwe';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Wymagany';
+$TEXT['REQUIREMENT'] = 'Wymagania';
+$TEXT['RESET'] = 'Resetuj';
+$TEXT['RESIZE'] = 'Zmien rozmiar';
+$TEXT['RESIZE_IMAGE_TO'] = 'Zmien rozmiar obrazków na';
+$TEXT['RESTORE'] = 'Przywróc';
+$TEXT['RESTORE_DATABASE'] = 'Przywróc baze danych';
+$TEXT['RESTORE_MEDIA'] = 'Przywróc media';
+$TEXT['RESULTS'] = 'Wyniki';
+$TEXT['RESULTS_FOOTER'] = 'Stopka wyników';
+$TEXT['RESULTS_FOR'] = 'Wyniki dla';
+$TEXT['RESULTS_HEADER'] = 'Naglówek wyników';
+$TEXT['RESULTS_LOOP'] = 'Petla wyników';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Powtórz nowe haslo';
+$TEXT['RETYPE_PASSWORD'] = 'Powtórz haslo';
+$TEXT['SAME_WINDOW'] = 'To samo okno';
+$TEXT['SAVE'] = 'Zapisz';
+$TEXT['SEARCH'] = 'Szukaj';
+$TEXT['SEARCHING'] = 'Wyszukiwanie';
+$TEXT['SECTION'] = 'Sekcja';
+$TEXT['SECTION_BLOCKS'] = 'Bloki sekcji';
+$TEXT['SEC_ANCHOR'] = 'Przedrostek tabeli (prefix)';
+$TEXT['SELECT_BOX'] = 'Pole wyboru';
+$TEXT['SEND_DETAILS'] = 'Wyslij szczególy';
+$TEXT['SEPARATE'] = 'Osobno';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'E-mail serwera';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'System operacyjny serwera';
+$TEXT['SESSION_IDENTIFIER'] = 'Identyfikator sesji';
+$TEXT['SETTINGS'] = 'Ustawienia';
+$TEXT['SHORT'] = 'Krótki';
+$TEXT['SHORT_TEXT'] = 'Krótki tekst';
+$TEXT['SHOW'] = 'Wyswietl';
+$TEXT['SHOW_ADVANCED'] = 'Wyswietl opcje zaawansowane';
+$TEXT['SIGNUP'] = 'Zapisz sie';
+$TEXT['SIZE'] = 'Rozmiar';
+$TEXT['SMART_LOGIN'] = 'Inteligentne logowanie';
+$TEXT['START'] = 'Start';
+$TEXT['START_PUBLISHING'] = 'Rozpocznij publikowanie';
+$TEXT['SUBJECT'] = 'Temat';
+$TEXT['SUBMISSIONS'] = 'Zgloszenia';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Zgloszenia przechowywane w bazie danych';
+$TEXT['SUBMISSION_ID'] = 'ID zgloszenia';
+$TEXT['SUBMITTED'] = 'Zgloszone';
+$TEXT['SUCCESS'] = 'Sukces';
+$TEXT['SYSTEM_DEFAULT'] = 'Domyslne ustawienia systemu';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Uprawnienia systemowe';
+$TEXT['TABLE_PREFIX'] = 'Przedrostek tabeli';
+$TEXT['TARGET'] = 'Cel';
+$TEXT['TARGET_FOLDER'] = 'Folder docelowy';
+$TEXT['TEMPLATE'] = 'Szablon';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Uprawnienia szablonów';
+$TEXT['TEXT'] = 'Tekst';
+$TEXT['TEXTAREA'] = 'Obszar tekstowy';
+$TEXT['TEXTFIELD'] = 'Pole tekstowe';
+$TEXT['THEME'] = 'Szablon panelu administracji';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Czas';
+$TEXT['TIMEZONE'] = 'Strefa czasowa';
+$TEXT['TIME_FORMAT'] = 'Format czasu';
+$TEXT['TIME_LIMIT'] = 'Maksymalny czas potrzebny na fragment modulu';
+$TEXT['TITLE'] = 'Tytul';
+$TEXT['TO'] = 'Do';
+$TEXT['TOP_FRAME'] = 'Glówna ramka';
+$TEXT['TRASH_EMPTIED'] = 'Smietnik opróniony';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edycja CSS w polu tekstowym ponizej.';
+$TEXT['TYPE'] = 'Rodzaj';
+$TEXT['UNDER_CONSTRUCTION'] = 'W trakcie tworzenia';
+$TEXT['UNINSTALL'] = 'Odinstaluj';
+$TEXT['UNKNOWN'] = 'Nieznany';
+$TEXT['UNLIMITED'] = 'Nieograniczony';
+$TEXT['UNZIP_FILE'] = 'Wrzuc i rozpakuj archiwum';
+$TEXT['UP'] = 'Góra';
+$TEXT['UPGRADE'] = 'Aktualizuj';
+$TEXT['UPLOAD_FILES'] = 'Zaladuj plik(i)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Uzytkownik';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'Aktywni uzytkownicy';
+$TEXT['USERS_CAN_SELFDELETE'] = 'Uzytkownik moze usunac sie sam';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'Uzytkownik moze zmienic swoje ustawienia';
+$TEXT['USERS_DELETED'] = 'Uzytkownicy usunieci';
+$TEXT['USERS_FLAGS'] = 'Flagi uzytkowników';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'Uzytkownik moze tworzyc profil rozszerzony';
+$TEXT['VERIFICATION'] = 'Weryfikacja';
+$TEXT['VERSION'] = 'Wersja';
+$TEXT['VIEW'] = 'Widok';
+$TEXT['VIEW_DELETED_PAGES'] = 'Wyswietl usuniete strony';
+$TEXT['VIEW_DETAILS'] = 'Pokaz szczególy';
+$TEXT['VISIBILITY'] = 'Widocznosc';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Domyslny mail nadawcy';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Domyslna nazwa nadawcy';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Okresl domyslny adres odbiorcy "FROM" i nadawcy "SENDER". Zaleca sie stosowanie ODBIORCY tak jak na przykladzie: <strong>admin@yourdomain.com</strong>. Niektórzy dostawcy maili (np. <em>mail.com</em>) moga odrzucic maile od ODBIORCY adresu takiego jak np <em>name@mail.com</em> ze wzgledu na potraktowanie tego jako spam.<br /><br /> Wartosci domyslne sa uzywane tylko wtedy inne wartosci sa okreslone przez WebsiteBakera. Jesli twój serwer obsluguje <acronym title="Prosty protokól przesylania poczty">SMTP</acronym>, mozesz skorzystac z tej funkcji.';
+$TEXT['WBMAILER_FUNCTION'] = 'Funkcja maila';
+$TEXT['WBMAILER_NOTICE'] = '<strong>Ustawienia poczty SMTP:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'mail PHP';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'Weryfikacja SMTP';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'Aktywuj tylko jesli serwer wymaga uwierzytelnienia SMTP';
+$TEXT['WBMAILER_SMTP_HOST'] = ' Host SMTP';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'Haslo poczty SMTP';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Witryna';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Opis witryny';
+$TEXT['WEBSITE_FOOTER'] = 'Stopka witryny';
+$TEXT['WEBSITE_HEADER'] = 'Naglówek witryny';
+$TEXT['WEBSITE_KEYWORDS'] = 'Slowa kluczowe witryny';
+$TEXT['WEBSITE_TITLE'] = 'Tytul witryny';
+$TEXT['WELCOME_BACK'] = 'Witamy ponownie';
+$TEXT['WIDTH'] = 'Szerokosc';
+$TEXT['WINDOW'] = 'Okno';
+$TEXT['WINDOWS'] = 'Okna';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Uprawnienia zapisywania plików przez wszystkich';
+$TEXT['WRITE'] = 'Zapisz';
+$TEXT['WYSIWYG_EDITOR'] = 'Edytor WYSIWYG';
+$TEXT['WYSIWYG_STYLE'] = 'Styl WYSIWYG';
+$TEXT['YES'] = 'Tak';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Wymagania dodatku nie zostaly spelnione';
+$HEADING['ADD_CHILD_PAGE'] = 'Dodaj strone dziecko"';
+$HEADING['ADD_GROUP'] = 'Dodaj grupe';
+$HEADING['ADD_GROUPS'] = 'Dodak grupy';
+$HEADING['ADD_HEADING'] = 'Dodaj naglówek';
+$HEADING['ADD_PAGE'] = 'Dodaj strone';
+$HEADING['ADD_USER'] = 'Dodaj uzytkownika';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Narzedzia administracyjne';
+$HEADING['BROWSE_MEDIA'] = 'Przegladaj media';
+$HEADING['CREATE_FOLDER'] = 'Utwórz folder';
+$HEADING['DEFAULT_SETTINGS'] = 'Ustawienia domyslne';
+$HEADING['DELETED_PAGES'] = 'Usuniete strony';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Ustawienia systemu plików';
+$HEADING['GENERAL_SETTINGS'] = 'Ustawienia ogólne';
+$HEADING['INSTALL_LANGUAGE'] = 'Zainstaluj jezyk';
+$HEADING['INSTALL_MODULE'] = 'Zainstaluj moduól';
+$HEADING['INSTALL_TEMPLATE'] = 'Zainstaluj szablon';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Uaktywnij pliki jezykowe recznie';
+$HEADING['INVOKE_MODULE_FILES'] = 'Uaktywnij pliki modulów recznie';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Uaktywnij pliki szablonów recznie';
+$HEADING['LANGUAGE_DETAILS'] = 'Szczególy jezyka';
+$HEADING['MANAGE_SECTIONS'] = 'Zarzadzaj sekcjami';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Zmien zaawansowane ustawienia strony';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Zmien/usun grupe';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Zmien/Usun strone';
+$HEADING['MODIFY_DELETE_USER'] = 'Zmien/usun uzytkownika';
+$HEADING['MODIFY_GROUP'] = 'Zmien grupe';
+$HEADING['MODIFY_GROUPS'] = 'Zmien grupy';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Zmien strone poczatkowa';
+$HEADING['MODIFY_PAGE'] = 'Zmien strone';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Zmien ustawienia strony';
+$HEADING['MODIFY_USER'] = 'Zmien uzytkownika';
+$HEADING['MODULE_DETAILS'] = 'Szczególy modulu';
+$HEADING['MY_EMAIL'] = 'Mój e-mail';
+$HEADING['MY_PASSWORD'] = 'Moje haslo';
+$HEADING['MY_SETTINGS'] = 'Moje ustawienia';
+$HEADING['SEARCH_SETTINGS'] = 'Ustawienia wyszukiwania';
+$HEADING['SERVER_SETTINGS'] = 'Ustawienia serwera';
+$HEADING['TEMPLATE_DETAILS'] = 'Szczególy szablonu';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Odinstaluj jezyk';
+$HEADING['UNINSTALL_MODULE'] = 'Odinstaluj modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Odinstaluj szablon';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Zaladuj plik(i)';
+$HEADING['WBMAILER_SETTINGS'] = 'Ustawienia rozsylania maili';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Blad podczas aktualizacji dodatku.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Pomyslnie zainstalowano ponownie pliki jezykowe';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>UWAGA!</strong> Ze wzgledów bezpieczenstwa przeslanie plików jezykowych do folderu /languages/ powinno odbyc sie tylko przez FTP.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Uwaga istniejace wpisy modulu moga zostac utracone w bazie danych.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'Jesli moduly sa przesylane za pomoca protokolu FTP (nie polecane), to funkcje takie jak <tt>instalacja</tt>, <tt>aktualizacja</tt> lub <tt>odinstalowanie</tt> moga nie dzialac prawidlowo. <br /><br />';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Uwaga istniejace wpisy modulu moga zostac utracone w bazie danych. Uzyj tej opcji tylko wtedy gdy masz problemy z przeslaniem przez FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Uwaga istniejace wpisy modulu moga zostac utracone w bazie danych.';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Pomyslnie zainstalowano ponownie moduly';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Zastap nowsze pliki';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Instalacja dodatku. Twój system nie spelnia wymogów niniejszego dodatku. Aby system pracowal z tym dodatkiem nalezy rozwiazac kwestie przedstawione ponizej.';
+$MESSAGE['ADDON_RELOAD'] = 'Aktualizacja bazy danych z informacjami dodatków (np. po FTP).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Szablony zostaly pomyslnie zaladowane ponownie';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Niewystarczajace uprawnienia do ogladania tej strony.';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Haslo mozna resetowac tylko raz na godzine';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Nie udalo sie wyslac hasla, prosze sie skontaktowac z administratorem';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Wprowadzonego adresu e-mail nie ma w bazie danych';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Prosze wprowadzic ponizej swój adres e-mail';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Niestety, nie ma aktywnej zawartosci do wyswietlenia';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Niestety, nie masz uprawnien do ogladania tej strony.';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Juz zainstalowany';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Nie moza zapisac do katalogu docelowego';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Prosimy o cierpliwosc';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Nie mozna odinstalowac';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Nie mozna odinstalowac: wybrany plik jest obecnie uzywany';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> nie moze byc odinstalowany, poniewaz jest uzywany przez {{pages}}:<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'nastepujaca strone;nastepujace strony';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Szablon <b>{{name}}</b> nie moze byc odinstalowany, poniewaz jest ustawiony jako szablon domyslny!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Nie mozna odinstalowac szablonu <b>{{name}}</b>, poniewaz jest ustawiony jako domyslny!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Nie mozna rozpakowac pliku';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Nie mozna zaladowac pliku';
+$MESSAGE['GENERIC_COMPARE'] = ' pomyslnie';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Blad podczas otwierania pliku.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' niepomyslnie';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Prosze zwrócic uwage, ze ladowany plik musi byc w formacie:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Prosze zwrócic uwage, ze ladowany plik musi byc w jednym z formatów:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Prosze sie cofnac i wypelnic wszystkie pola';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'Nie dokonano zadnego wyboru!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Zainstalowano pomyslnie';
+$MESSAGE['GENERIC_INVALID'] = 'Zaladowany plik jest nieprawidlowy';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Nieprawidlowy plik instalacyjny Websidebakera. Sprawdz format *.zip.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Nieprawidlowy plik jezykowy Websidebakera. Prosze sprawdzic w pliku tekstowym.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Nieprawidlowy plik modulu Websidebakera. Prosze sprawdzic w pliku tekstowym.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Nieprawidlowy plik szablonu Websidebakera. Prosze sprawdzic w pliku tekstowym.';
+$MESSAGE['GENERIC_IN_USE'] = ' moze byc uzyte w ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Brak archiwum pliku!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'Modul nie jest poprawnie zainstalowany! Bledna wersja!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = 'nie jest mozliwe';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Niezainstalowano';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Aktualizacja nie moze nastapic';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Prosimy o cierpliwosc, to moze troche potrwac.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Zapraszamy wkrótce...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Naruszenie bezpieczenstwa!! Odmowa dostepu!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Naruszenia bezpieczenstwa! Przechowywanie danych zostalo odrzucone!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Odinstalowano pomyslnie';
+$MESSAGE['GENERIC_UPGRADED'] = 'Zaktualizowano pomyslnie';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Porównyanie wersji';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Wymagana aktualizacja!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Aktualizacja do nizszej wersji';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'Ta strona jest chwilowo niedostepna';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Witryna w trakcie tworzenia';
+$MESSAGE['GROUPS_ADDED'] = 'Grupa zostala dodana';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Czy aby na pewno usunac wybrana grupe (i wszystkich uzytkowników, którzy do niej naleza)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupa zostala usunieta';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Nazwa grupy jest pusta';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Grupa o takiej nazwie juz istnieje';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Nie odnaleziono zadnych grup';
+$MESSAGE['GROUPS_SAVED'] = 'Grupa zostala zapisana';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Prosze wprowadzic haslo';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Wprowadzone haslo jest zbyt krótkie';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Wprowadzone haslo jest zbyt krótkie';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Nie wprowadzono rozszerzenia pliku';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Nie wprowadzono nazwy uzytkownika';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Nie mozna usunac wybranego folderu';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Nie mozna usunac wybranego pliku';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Nie udalo sie zmienic nazwy';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Czy aby na pewno usunac nastepujace pliki lub foldery?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Folder zostal usuniety';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Plik zostal usuniety';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Okreslony katalog nie istnieje lub nie jest dozwolony.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Katalog nie istnieje';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Nazwa folderu nie moze zawierac ../';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Folder pasujacy do wprowadzonej nazwy juz istnieje';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Folder zostal utworzony';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Nie udalo sie utworzyc folderu';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Plik pasujacy do wprowadzonej nazwy juz istnieje';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Plik nieodnaleziony';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Nazwa nie moze zawierac ../';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nie mozna uzyc index.php jako nazwy';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nie odnaleziono zadnych mediów w biezacym folderze';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'Nie przyjeto pliku';
+$MESSAGE['MEDIA_RENAMED'] = 'Nazwa zostala zmieniona';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' plik zostal pomyslnie zaladowany';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Folder docelowy nie moze zawierac ../';
+$MESSAGE['MEDIA_UPLOADED'] = ' pliki zostaly pomyslnie zaladowane';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Niestety, ten formularz zostal wyslany zbyt wiele razy w ciagu tej godziny. Prosimy spróbowac ponownie za godzine.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Wprowadzony numer weryfikacyjny (tzw. Captcha) jest nieprawidlowy. Jesli masz problemy z odczytaniem Captcha, napisz do: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Nalezy wprowadzic szczególy dla nastepujacych pól';
+$MESSAGE['PAGES_ADDED'] = 'Strona zostala dodana';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Naglówek strony zostal dodany';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Prosze wprowadzic tytul menu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Prosze wprowadzic tytul strony';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Blad podczas tworzenia pliku dostepowego w katalogu /pages (niewystarczajace uprawnienia)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Blad podczas usuwania pliku dostepowego w katalogu /pages (niewystarczajace uprawnienia)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Blad podczas zmieniania kolejnosci stron';
+$MESSAGE['PAGES_DELETED'] = 'Strona zostala usunieta';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Czy aby na pewno usunac wybrana strone (i wszystkie jej podstrony)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Nie masz uprawnien do modyfikowania tej strony';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Kliknij TUTAJ by zmienic strone wprowadzajaca';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Nie mozna zapisac pliku /pages/intro.php (niewystarczajace uprawnienia)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Strona wprowadzajaca zostala zapisana';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Ostatnio zmodyfikowane przez';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Strona nie znaleziona';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Blad podczas zapisywania strony';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Strona o tym lub podobnym tytule juz istnieje';
+$MESSAGE['PAGES_REORDERED'] = 'Zmieniono kolejnosc stron';
+$MESSAGE['PAGES_RESTORED'] = 'Strona zostala przywrócona';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Powrót do stron';
+$MESSAGE['PAGES_SAVED'] = 'Strona zostala zapisana';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Ustawienia strony zostaly zapisane';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Wlasciwosci sekcji zostaly zapisane';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = '(Biezace) haslo jest nieprawidlowe';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Szczególy zostaly zapisane';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-mail zostal zaktualizowany';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Blad. Haslo zawiera nieprawidlowe znaki';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Haslo zostalo zmienione';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'Zmiana tego rekordu nie powiodla sie';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'Zmiana rekordu zostala zaktualizowana pomyslnie.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Dodanie nowego rekordu sie nie powiodlo.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'Nowy rekord zostal dodany pomyslnie.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Uwaga: nacisniecie tego przycisku resetuje wszystkie niezapisane zmiany';
+$MESSAGE['SETTINGS_SAVED'] = 'Ustawienia zostaly zapisane';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Nie mozna otworzyc pliku konfiguracyjnego';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Nie mozna zapisac pliku konfiguracyjnego';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Uwaga: zalecane wylacznie w srodowiskach testowych';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+Nowe konto uzytkownika zostalo utworzone.
+
+Loginname: {LOGIN_NAME}
+ID uzytkownika: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+Adres IP: {LOGIN_IP}
+Data rejestracji: {SIGNUP_DATE}
+----------------------------------------
+Ta wiadomosc zostala wygenerowana automatycznie.
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Witaj {LOGIN_DISPLAY_NAME},
+
+Ten mail zostal wyslany poniewaz\'zapomiano hasla\' funkcja odzyskania twojego konta zostala uruchomiona.
+
+Szczególy twojego nowego konta \'{LOGIN_WEBSITE_TITLE}\' ponizej:
+
+Loginname: {LOGIN_NAME}
+Haslo: {LOGIN_PASSWORD}
+
+Powyzej zostalo podane twoje haslo.
+Oznacza to, ze stare haslo nie bedzie juz dzialac!
+Jesli masz pytania badz problemy z nowym loginem lub haslem skontaktuj sie z administratorem \'{LOGIN_WEBSITE_TITLE}\'.
+Aby uniknac nieoczekiwanych awarii prosze pamietac o czyszczeniu pamieci podrecznej cache przegladarki
+
+Pozdrawiamy
+------------------------------------
+Ta wiadomosc zostala wygenerowana automatycznie.
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Witamy \'{LOGIN_WEBSITE_TITLE}\'.
+
+Szczególy konta \'{LOGIN_WEBSITE_TITLE}\' ponizej:
+Loginname: {LOGIN_NAME}
+Haslo: {LOGIN_PASSWORD}
+
+Pozdrawiamy
+
+Prosba:
+Jesli otrzymales te wiadomosc przez pomylke, usun ja niezwlocznie!
+-------------------------------------
+Ta wiadomosc zostala wygenerowana automatycznie!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Twoje dane logowania...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Nalezy wprowadzic adres e-mail';
+$MESSAGE['START_CURRENT_USER'] = 'Jestes obecnie zalogowany(-a) jako:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Uwaga: katalog instalacyjny wciaz istnieje!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Witamy w panelu administracyjnym WebsiteBakera';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Uwaga: aby zmienic szablon, nalezy przejsc do sekcji Ustawienia';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Uzytkownik zostal dodany';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Zadanie odrzucone, Nie mozesz usunac sam siebie!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Uwaga: Powyzsze pola nalezy wypelnic tylko, jesli chce sie zmienic haslo tego uzytkownika';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Czy aby na pewno usunac wybranego uzytkownika?';
+$MESSAGE['USERS_DELETED'] = 'Uzytkownik zostal usuniety';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Wprowadzony adres e-mail jest juz uzywany';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Wprowadzony adres e-mail jest nieprawidlowy';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Nie wybrano grupy';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Wprowadzone hasla nie pasuja';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Wprowadzone haslo bylo za krótkie';
+$MESSAGE['USERS_SAVED'] = 'Uzytkownik zostal zapisany';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Narzedzia administracji WebsiteBakera...';
+$OVERVIEW['GROUPS'] = 'Zarzadzaj grupami uzytkowników i ich uprawnieniami systemowymi...';
+$OVERVIEW['HELP'] = 'Masz pytania? Znajdz odpowiedzi...';
+$OVERVIEW['LANGUAGES'] = 'Zarzadzaj jezykami WebsiteBakera...';
+$OVERVIEW['MEDIA'] = 'Zarzadzaj plikami przechowywanymi w folderze mediów...';
+$OVERVIEW['MODULES'] = 'Zarzadzaj modulami WebsiteBakera...';
+$OVERVIEW['PAGES'] = 'Zarzadzaj stronami...';
+$OVERVIEW['PREFERENCES'] = 'Zmien preferencje, takie jak adres e-mail, haslo itp... ';
+$OVERVIEW['SETTINGS'] = 'Zmien ustawienia WebsiteBakera...';
+$OVERVIEW['START'] = 'Panel administracyjny';
+$OVERVIEW['TEMPLATES'] = 'Zmien wyglad swojej strony za pomoca szablonów...';
+$OVERVIEW['USERS'] = 'Zarzadzaj uzytkownikami mogacymi logowac sie do WebsiteBakera...';
+$OVERVIEW['VIEW'] = 'Podglad witryny w nowym oknie...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/PL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/PT.php
===================================================================
--- trunk/languages/PT.php	(nonexistent)
+++ trunk/languages/PT.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'PT';
+$language_name = 'Português';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Daniel Neto';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Acessos';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Add-ons';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Receber Detalhes do Login';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupos';
+$MENU['HELP'] = 'Ajuda';
+$MENU['LANGUAGES'] = 'Idiomas';
+$MENU['LOGIN'] = 'Login';
+$MENU['LOGOUT'] = 'Log-out';
+$MENU['MEDIA'] = 'M&iacute;dia';
+$MENU['MODULES'] = 'M&oacute;dulos';
+$MENU['PAGES'] = 'P&aacute;ginas';
+$MENU['PREFERENCES'] = 'Prefer&ecirc;ncias';
+$MENU['SETTINGS'] = 'Configura&ccdil;&otilde;es';
+$MENU['START'] = 'In&iacute;cio';
+$MENU['TEMPLATES'] = 'Temas (Templates)';
+$MENU['USERS'] = 'Usu&aacute;rios';
+$MENU['VIEW'] = 'Visualizar';
+$TEXT['ACCOUNT_SIGNUP'] = 'Assinatura de Conta';
+$TEXT['ACTIONS'] = 'A&ccdil;&otilde;es';
+$TEXT['ACTIVE'] = 'Ativo';
+$TEXT['ADD'] = 'Adicionar';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Adicionar Sess&atilde;o';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administra&ccdil;&atilde;o';
+$TEXT['ADMINISTRATION_TOOL'] = 'Ferramenta de Administra&ccdil;&atilde;o';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administrators';
+$TEXT['ADVANCED'] = 'Avan&ccdil;ado';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Permitir Multipla Sele&ccdil;&atilde;o';
+$TEXT['ALL_WORDS'] = 'Todas as Palavras';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'An&ocirc;nimo';
+$TEXT['ANY_WORDS'] = 'Qualquer Palavra';
+$TEXT['APP_NAME'] = 'Nome da Aplica&ccdil;&atilde;o';
+$TEXT['ARE_YOU_SURE'] = 'Voc&ecirc; tem certeza?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Volta';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup de Todas as Tabelas no Banco de Dados';
+$TEXT['BACKUP_DATABASE'] = 'Backup do Banco de Dados';
+$TEXT['BACKUP_MEDIA'] = 'Backup M&iacute;dia';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup somente tabelas espec&iacute;ficas';
+$TEXT['BASIC'] = 'B&aacute;sico';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Cancelar';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Verifica&ccdil;&atilde;o Captcha';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'Alterar';
+$TEXT['CHANGES'] = 'Altera&ccdil;&otilde;es';
+$TEXT['CHANGE_SETTINGS'] = 'Alterar Configura&ccdil;&otilde;es';
+$TEXT['CHARSET'] = 'Charset';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox Group';
+$TEXT['CLOSE'] = 'Fechar';
+$TEXT['CODE'] = 'C&oacute;digo';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Collapse';
+$TEXT['COMMENT'] = 'Coment&aacute;rio';
+$TEXT['COMMENTING'] = 'Coment&aacute;rios';
+$TEXT['COMMENTS'] = 'Coment&aacute;rios';
+$TEXT['CREATE_FOLDER'] = 'Criar Pasta';
+$TEXT['CURRENT'] = 'Atual';
+$TEXT['CURRENT_FOLDER'] = 'Pasta Atual';
+$TEXT['CURRENT_PAGE'] = 'P&aacute;gina Atual';
+$TEXT['CURRENT_PASSWORD'] = 'Senha Atual';
+$TEXT['CUSTOM'] = 'Pr&oacute;prio';
+$TEXT['DATABASE'] = 'Banco de Dados';
+$TEXT['DATE'] = 'Data';
+$TEXT['DATE_FORMAT'] = 'Formato de Data';
+$TEXT['DEFAULT'] = 'Padr&atilde;o';
+$TEXT['DEFAULT_CHARSET'] = 'Codifica&ccdil;&atilde;o Padr&atilde;o';
+$TEXT['DEFAULT_TEXT'] = 'Testo Padr&atilde;o';
+$TEXT['DELETE'] = 'Apagar';
+$TEXT['DELETED'] = 'Apagado';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Descri&ccdil;&atilde;o';
+$TEXT['DESIGNED_FOR'] = 'Designado para';
+$TEXT['DIRECTORIES'] = 'Diret&oacute;rios';
+$TEXT['DIRECTORY_MODE'] = 'Modo de Diret&oacute;rio';
+$TEXT['DISABLED'] = 'Desabilitado';
+$TEXT['DISPLAY_NAME'] = 'Nome de Exibi&ccdil;&atilde;o';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Endre&ccdil;or de Email';
+$TEXT['EMPTY_TRASH'] = 'Esvaziar Lixeira';
+$TEXT['ENABLED'] = 'Habilitado';
+$TEXT['END'] = 'Fim';
+$TEXT['ERROR'] = 'Erro';
+$TEXT['EXACT_MATCH'] = 'Express&atilde;o Exata';
+$TEXT['EXECUTE'] = 'Executar';
+$TEXT['EXPAND'] = 'Expand';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Campo';
+$TEXT['FILE'] = 'Arquivo';
+$TEXT['FILES'] = 'Arquivos';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Permiss&otilde;es de Sistema de Arquivos';
+$TEXT['FILE_MODE'] = 'Modo de Arquivo';
+$TEXT['FINISH_PUBLISHING'] = 'Finish Publishing';
+$TEXT['FOLDER'] = 'Pasta';
+$TEXT['FOLDERS'] = 'Pastas';
+$TEXT['FOOTER'] = 'Rodap&eacute;';
+$TEXT['FORGOTTEN_DETAILS'] = 'Esqueceu suas credenciais?';
+$TEXT['FORGOT_DETAILS'] = 'Esqueceu as credenciais?';
+$TEXT['FROM'] = 'De';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Nome Completo';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupo';
+$TEXT['HEADER'] = 'Cabe&ccdil;alho';
+$TEXT['HEADING'] = 'Cabe&ccdil;alho';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Largura';
+$TEXT['HIDDEN'] = 'Oculto';
+$TEXT['HIDE'] = 'Ocultar';
+$TEXT['HIDE_ADVANCED'] = 'Ocultar Op&ccdil;&otilde;es Avan&ccdil;adas';
+$TEXT['HOME'] = 'Home';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Redirecionamento de P&aacute;gina';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = '&Iacute;cone';
+$TEXT['IMAGE'] = 'Imagem';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Instalar';
+$TEXT['INSTALLATION'] = 'Instala&ccdil;&atilde;o';
+$TEXT['INSTALLATION_PATH'] = 'Caminho de Instala&ccdil;&atilde;o';
+$TEXT['INSTALLATION_URL'] = 'URL de Instala&ccdil;&atilde;o';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Introdu&ccdil;&atilde;o';
+$TEXT['INTRO_PAGE'] = 'P&aacute;gina de Introdu&ccdil;&atilde;o';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Keywords';
+$TEXT['LANGUAGE'] = 'Idioma';
+$TEXT['LAST_UPDATED_BY'] = '&Uacute;ltima atualiza&ccdil;&atilde;o por';
+$TEXT['LENGTH'] = 'Tamanho';
+$TEXT['LEVEL'] = 'N&iacute;vel';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix based';
+$TEXT['LIST_OPTIONS'] = 'Op&ccdil;&otilde;es de Lista';
+$TEXT['LOGGED_IN'] = 'Logado';
+$TEXT['LOGIN'] = 'Login';
+$TEXT['LONG'] = 'Longo';
+$TEXT['LONG_TEXT'] = 'Texto Longo';
+$TEXT['LOOP'] = 'La&ccdil;o de Repeti&ccdil;&atilde;o';
+$TEXT['MAIN'] = 'Principal';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Gerenciar';
+$TEXT['MANAGE_GROUPS'] = 'Gerenciar Grupos';
+$TEXT['MANAGE_USERS'] = 'Gerenciar Usu&aacute;rios';
+$TEXT['MATCH'] = 'Possua';
+$TEXT['MATCHING'] = 'Matching';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. Submiss&otilde;es por Hora';
+$TEXT['MEDIA_DIRECTORY'] = 'Diret&oacute;rio de M&iacute;dia';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'T&iacute;tulo do Menu';
+$TEXT['MESSAGE'] = 'Mensagem';
+$TEXT['MODIFY'] = 'Modificar';
+$TEXT['MODIFY_CONTENT'] = 'Modificar Conte&uacute;do';
+$TEXT['MODIFY_SETTINGS'] = 'Modificar Configura&ccdil;&otilde;es';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Permiss&otilde;es de M&oacute;dulo';
+$TEXT['MORE'] = 'Mais';
+$TEXT['MOVE_DOWN'] = 'Mover para Baixo';
+$TEXT['MOVE_UP'] = 'Mover para Cima';
+$TEXT['MULTIPLE_MENUS'] = 'M&uacute;ltiplos Menus';
+$TEXT['MULTISELECT'] = 'Multipla-Sele&ccdil;&atilde;o';
+$TEXT['NAME'] = 'Nome';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Precisar fazer log-in?';
+$TEXT['NEW_PASSWORD'] = 'Nova Senha';
+$TEXT['NEW_WINDOW'] = 'New Window';
+$TEXT['NEXT'] = 'Pr&oacute;ximo';
+$TEXT['NEXT_PAGE'] = 'Pr&oacute;xima P&aacute;gina';
+$TEXT['NO'] = 'N&atilde;o';
+$TEXT['NONE'] = 'Nenhum';
+$TEXT['NONE_FOUND'] = 'Nada Encontrado';
+$TEXT['NOT_FOUND'] = 'N&atilde;o Encotnrado';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Sem Resultados';
+$TEXT['OF'] = 'de';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Op&ccdil;&atilde;o';
+$TEXT['OTHERS'] = 'Outros';
+$TEXT['OUT_OF'] = 'Out Of';
+$TEXT['OVERWRITE_EXISTING'] = 'Substituir Existente';
+$TEXT['PAGE'] = 'P&aacute;gina';
+$TEXT['PAGES_DIRECTORY'] = 'Diret&oacute;rio de P&aacute;ginas';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Extens&atilde;o da P&aacute;gina';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Idioma da P&aacute;gina';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limite de N&iacute;veis de P&aacute;gina';
+$TEXT['PAGE_SPACER'] = 'Espa&ccdil;ador de P&aacute;gina';
+$TEXT['PAGE_TITLE'] = 'T&iacute;tulo da P&aacute;gina';
+$TEXT['PAGE_TRASH'] = 'Page Trash';
+$TEXT['PARENT'] = 'Parent';
+$TEXT['PASSWORD'] = 'Senha';
+$TEXT['PATH'] = 'Caminho';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Error Reporting Level';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'Por Favor escolha';
+$TEXT['POST'] = 'Post';
+$TEXT['POSTS_PER_PAGE'] = 'Posts por P&aacute;gina';
+$TEXT['POST_FOOTER'] = 'Rodap&eacute; do Post';
+$TEXT['POST_HEADER'] = 'Cabe&ccdil;alho do Post';
+$TEXT['PREVIOUS'] = 'Anterior';
+$TEXT['PREVIOUS_PAGE'] = 'P&aacute;gina Anterior';
+$TEXT['PRIVATE'] = 'Privado';
+$TEXT['PRIVATE_VIEWERS'] = 'Private Viewers';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'P&uacute;blico';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Button Group';
+$TEXT['READ'] = 'Ler';
+$TEXT['READ_MORE'] = 'Leia Mais';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrado';
+$TEXT['REGISTERED_VIEWERS'] = 'Registered Viewers';
+$TEXT['RELOAD'] = 'Recarregar';
+$TEXT['REMEMBER_ME'] = 'Lembrar-me';
+$TEXT['RENAME'] = 'Renomear';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Requerido';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Redefinir';
+$TEXT['RESIZE'] = 'Redimentsionar';
+$TEXT['RESIZE_IMAGE_TO'] = 'Redimensionar Imagem Para';
+$TEXT['RESTORE'] = 'Restaurar';
+$TEXT['RESTORE_DATABASE'] = 'Restaurar Banco de Dados';
+$TEXT['RESTORE_MEDIA'] = 'Restaurar M&iacute;dia';
+$TEXT['RESULTS'] = 'Resultados';
+$TEXT['RESULTS_FOOTER'] = 'Rodap&eacute; dos Resultados';
+$TEXT['RESULTS_FOR'] = 'Resultados para';
+$TEXT['RESULTS_HEADER'] = 'Cabe&ccdil;alho dos Resultados';
+$TEXT['RESULTS_LOOP'] = 'La&ccdil;o de Repeti&ccdil;&atilde;o dos Resultados';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Confirme a Nova Senha';
+$TEXT['RETYPE_PASSWORD'] = 'Confirme a Senha';
+$TEXT['SAME_WINDOW'] = 'Same Window';
+$TEXT['SAVE'] = 'Salvar';
+$TEXT['SEARCH'] = 'Busca';
+$TEXT['SEARCHING'] = 'Buscando';
+$TEXT['SECTION'] = 'Sess&atilde;o';
+$TEXT['SECTION_BLOCKS'] = 'Section Blocks';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Select Box';
+$TEXT['SEND_DETAILS'] = 'Enviar credenciais';
+$TEXT['SEPARATE'] = 'Separado';
+$TEXT['SEPERATOR'] = 'Separador';
+$TEXT['SERVER_EMAIL'] = 'Servidor de Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Sistema Operacional do Servidor';
+$TEXT['SESSION_IDENTIFIER'] = 'Identificador de Sess&atilde;o';
+$TEXT['SETTINGS'] = 'Configura&ccdil;&otilde;es';
+$TEXT['SHORT'] = 'Curto';
+$TEXT['SHORT_TEXT'] = 'Texto Curto';
+$TEXT['SHOW'] = 'Exibir';
+$TEXT['SHOW_ADVANCED'] = 'Exibir Op&ccdil;&otilde;es Avan&ccdil;adas';
+$TEXT['SIGNUP'] = 'Inscrever';
+$TEXT['SIZE'] = 'Tamanho';
+$TEXT['SMART_LOGIN'] = 'Login Inteligente';
+$TEXT['START'] = 'In&iacute;cio';
+$TEXT['START_PUBLISHING'] = 'Start Publishing';
+$TEXT['SUBJECT'] = 'Assunto';
+$TEXT['SUBMISSIONS'] = 'Submiss&otilde;es';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Submiss&otilde;es armazenadas no banco de dados';
+$TEXT['SUBMISSION_ID'] = 'Submission ID';
+$TEXT['SUBMITTED'] = 'Submetido';
+$TEXT['SUCCESS'] = 'Sucesso';
+$TEXT['SYSTEM_DEFAULT'] = 'Padr&atilde;o do Sistema';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Permiss&otilde;es de Sistema';
+$TEXT['TABLE_PREFIX'] = 'Prefixo da Tabela';
+$TEXT['TARGET'] = 'Target';
+$TEXT['TARGET_FOLDER'] = 'Pasta Alvo';
+$TEXT['TEMPLATE'] = 'Tema (Template)';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Permiss&otilde;es do Tema (Template)';
+$TEXT['TEXT'] = 'Texto';
+$TEXT['TEXTAREA'] = 'Textarea';
+$TEXT['TEXTFIELD'] = 'Textfield';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Hora';
+$TEXT['TIMEZONE'] = 'Fuso Hor&aacute;rio';
+$TEXT['TIME_FORMAT'] = 'Formato de Hora';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'T&iacute;tulo';
+$TEXT['TO'] = 'Para';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = 'Lixiera Vazia';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tipo';
+$TEXT['UNDER_CONSTRUCTION'] = 'Em Constru&ccdil;&atilde;o';
+$TEXT['UNINSTALL'] = 'Desinstalar';
+$TEXT['UNKNOWN'] = 'Desconhecido';
+$TEXT['UNLIMITED'] = 'Ilimitado';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Cima';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Enviar Arquivo(s)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Usu&aacute;rio';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifica&ccdil;&atilde;o';
+$TEXT['VERSION'] = 'Vers&atilde;o';
+$TEXT['VIEW'] = 'Ver';
+$TEXT['VIEW_DELETED_PAGES'] = 'Exibir P&aacute;ginas Exclu&iacute;das';
+$TEXT['VIEW_DETAILS'] = 'Ver Detalhes';
+$TEXT['VISIBILITY'] = 'Visibilidade';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Descri&ccdil;&atilde;o do Website';
+$TEXT['WEBSITE_FOOTER'] = 'Rodap&eacute; do Website';
+$TEXT['WEBSITE_HEADER'] = 'Cabe&ccdil;alho do Website';
+$TEXT['WEBSITE_KEYWORDS'] = 'Website Keywords';
+$TEXT['WEBSITE_TITLE'] = 'T&iacute;tulo do Website';
+$TEXT['WELCOME_BACK'] = 'Bem-Vindo';
+$TEXT['WIDTH'] = 'Altura';
+$TEXT['WINDOW'] = 'Window';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'World-writeable file permissions';
+$TEXT['WRITE'] = 'Escrever';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Style';
+$TEXT['YES'] = 'Sim';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Adicionar Grupo';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Adicionar Cabe&ccdil;alho';
+$HEADING['ADD_PAGE'] = 'Adicionar P&aacute;gina';
+$HEADING['ADD_USER'] = 'Adicionar Usu&aacute;rio';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Ferramentas de Administra&ccdil;&atilde;o';
+$HEADING['BROWSE_MEDIA'] = 'Navegar pela M&iacute;dia';
+$HEADING['CREATE_FOLDER'] = 'Criar Pasta';
+$HEADING['DEFAULT_SETTINGS'] = 'Configura&ccdil;&otilde;es Padr&atilde;o';
+$HEADING['DELETED_PAGES'] = 'P&aacute;ginas apagadas';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Configura&ccdil;&otilde;es de Sistema de Arquivos';
+$HEADING['GENERAL_SETTINGS'] = 'Configura&ccdil;&otilde;es Gerais';
+$HEADING['INSTALL_LANGUAGE'] = 'Instalar Idioma';
+$HEADING['INSTALL_MODULE'] = 'Instalar M&oacute;dulo';
+$HEADING['INSTALL_TEMPLATE'] = 'Instalar Tema (Template)';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detalhes do Idioma';
+$HEADING['MANAGE_SECTIONS'] = 'Gerenciar Sess&otilde;es';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Modificar Configura&ccdil;&otilde;es Avan&ccdil;adas da P&aacute;gina';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Modificar/Apagar Grupo';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Modificar/Apagar P&aacute;gina';
+$HEADING['MODIFY_DELETE_USER'] = 'Modificar/Apagar Usu&aacute;rio';
+$HEADING['MODIFY_GROUP'] = 'Modificar Grupo';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Modificar P&aacute;gina de Introdu&ccdil;&atilde;o';
+$HEADING['MODIFY_PAGE'] = 'Modificar P&aacute;gina';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Modificar Configura&ccdil;&otilde;es da P&aacute;gina';
+$HEADING['MODIFY_USER'] = 'Modificar Usu&aacute;rio';
+$HEADING['MODULE_DETAILS'] = 'Detalhes do M&oacute;dulo';
+$HEADING['MY_EMAIL'] = 'Meu Email';
+$HEADING['MY_PASSWORD'] = 'Minha Senha';
+$HEADING['MY_SETTINGS'] = 'Minhas Configura&ccdil;&otilde;es';
+$HEADING['SEARCH_SETTINGS'] = 'Configura&ccdil;&otilde;es de Busca';
+$HEADING['SERVER_SETTINGS'] = 'Configura&ccdil;&otilde;es do Servidor';
+$HEADING['TEMPLATE_DETAILS'] = 'Detalhes do Tema (Template)';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Desinstalar Idioma';
+$HEADING['UNINSTALL_MODULE'] = 'Desinstalar M&oacute;dulo';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Desinstalar Tema (Template)';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Enviar Arquivo(s)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Privil&eacute;gios Insuficientes para estar aqui';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'A senha n&atilde;o pode ser redefinida mais de uma vez por hora, desculpe';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'N&atilde;o foi poss&iacute;vel enviar a senha, favor contatar o administrador do sistema';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'O email informado n&atilde;o pode ser encontrado no banco de dados';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Favor inserir seu email abaixo';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Desculpe, voc&ecirc; n&atilde;o tem permiss&atilde;o para ver essa p&aacute;gina';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'J&aacute; est&aacute; instalado';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'N&atilde;o foi poss&iacute;vel gravar no diret&oacute;rio de destino';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'N&atilde;o foi poss&iacute;vel desinstalar';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'N&atilde;o foi poss&iacute;vel desinstalar: O arquivo selecionado est&aacute; em uso';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />O m&oacute;dulo n&atilde;o <b>{{type_name}}</b> pode ser desinstalado porque est&aacute; a ser utilizado {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'na seguinte p&aacute;gina;nas seguintes p&aacute;ginas';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'O Template n&atilde;o pode ser desinstalado porque &eacute; o Template padr&atilde;o';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'N&atilde;o foi poss&iacute;vel descompactar';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'N&atilde;o foi poss&iacute;vel enviar o arquivo';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Erro ao abrir o arquivo.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'O arquivo a ser enviado precisa ser do seguinte formato:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'O arquivo a ser enviado precisa ser de algum dos seguintes formatos:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Favor retornar e preencher todos os campos';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Instalado com Sucesso';
+$MESSAGE['GENERIC_INVALID'] = 'O arquivo enviado &eacute; inv&aacute;lido';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'N&atilde;o Instalado';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Aguarde, isso pode levar algum tempo.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Favor retornar em breve...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Desinstalado com Sucesso';
+$MESSAGE['GENERIC_UPGRADED'] = 'Atualizado com Sucesso';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Em Constru&ccdil;&atilde;o';
+$MESSAGE['GROUPS_ADDED'] = 'Grupo adicionado com sucesso';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Voc&ecirc; tem certeza que deseja apagar o grupo selecionado (e usu&aacute;rios pertencentes ao grupo)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grupo apagado com sucesso';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'O nome do grupo est&aacute; em branco';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Nome do Grupo j&aacute; existe';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'N&atilde;o foram encotrados grupos';
+$MESSAGE['GROUPS_SAVED'] = 'Grupo armazenado com sucesso';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Favor Inserir a senha';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'A senha fornecida &eacute; longa demais';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'A senha fornecida &eacute; curta demais';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Voc&ecirc; n&atilde;o inseriou uma extens&atilde;o de arquivo';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Voc&ecirc; n&atilde;o inseriu um nome novo';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'N&atilde;o foi poss&iacute;vel apagar a pasta selecionada';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'N&atilde;o foi poss&iacute;vel apagar o arquivo selecionado';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Erro ao Renomear';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Tem certeza que deseja apagar o seguinte arquivo ou pasta?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Pasta apagada com sucesso';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Arquivo apagado com sucesso';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Diret&oacute;rio n&atilde;o existe';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'N&atilde;o foi poss&iacute;vel incluir ../ no nome da pasta';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Uma pasta com esse nome j&aacute; existe';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Pasta criada com sucesso';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'N&atilde;o foi poss&iacute;vel criar a pasta';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Um arquivo com esse nome j&aacute; existe';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Arquivo n&atilde;o encontrado';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'N&atilde;o foi possivel incluir ../ no nome';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'N&atilde;o &eacute; possivel usar index.php como nome';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nenhuma arquivo de m&iacute;dia encontrado na pasta atual';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Renomeado com sucesso';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' arquivo enviado com sucesso';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'N&atilde;o pode possuir ../ na pasta alvo';
+$MESSAGE['MEDIA_UPLOADED'] = ' arquivos enviados com sucesso';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Desculpe, este formul&aacute;rio foi submetido v&aacute;rias vezes nessa hora. Favor tentar novamente dentro de uma hora.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'O N&uacute;mero de Verifica&ccdil;&atilde;o (conhecido como Captcha) que voc&ecirc; entrou, &eacute; inv&aacute;lido. Se estiver tendo problemas usando o Captcha, envie uma mensagem para: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Voc&ecirc; precisa preencher os seguintes campos';
+$MESSAGE['PAGES_ADDED'] = 'P&aacute;gina adicionada com sucesso';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Cabe&ccdil;alho da P&aacute;gina adicionado com sucesso.';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Favor Inserir T&iacute;tulo do Menu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Favor Inserir T&iacute;tulo da P&aacute;gina';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Erro ao criar o arquivo no diret&oacute;rio /pages (Privil&eacute;gios Insuficientes)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Erro ao apagar o arquivo no diret&oacute;rio /pages (Privil&eacute;gios Insuficientes)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Erro na re-ordena&ccdil;&atilde;o da p&aacute;gina';
+$MESSAGE['PAGES_DELETED'] = 'P&aacute;gina apagada com sucesso';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Tem certeza que deseja apagar a p&aacute;gina selecionada(e todas as suas sub-p&aacute;ginas)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Voc&ecirc; n&atilde;o tem permiss&atilde;o para Modificar essa p&aacute;gina';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Clique AQUI para modificar a P&aacute;gina de Introdu&ccdil;&atilde;o';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'N&atilde;o foi poss&iacute;vel gravar o arquivo /pages/intro.php (Privil&eacute;gios Insuficientes)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'P&aacute;gina de Introdu&ccdil;&atilde;o armazenada com sucesso';
+$MESSAGE['PAGES_LAST_MODIFIED'] = '&Uacute;ltima modifica&ccdil;&atilde;o por';
+$MESSAGE['PAGES_NOT_FOUND'] = 'P&aacute;gina n&atilde;o encontrada';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Erro ao armazenar a p&aacute;gina';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Uma p&aacute;gina com o mesmo nome ou similar j&aacute; existe';
+$MESSAGE['PAGES_REORDERED'] = 'Re-ordena&ccdil;&atilde;o feita com sucesso';
+$MESSAGE['PAGES_RESTORED'] = 'Pagina Restaurada com sucesso';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Retornar &agrave; P&aacute;ginas';
+$MESSAGE['PAGES_SAVED'] = 'P&aacute;gina armazenada com sucesso';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Configura&ccdil;&otilde;es de P&aacute;gina armazenadas com sucesso';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Propriedades da Sess&atilde;o foram armazenadas com sucesso';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'A senha(atual) informada n&atilde;o est&aacute; correta';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detalhes armazenados  com sucesso';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email atualizado com sucesso';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Senha alterada com sucesso';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Aten&ccdil;&atilde;o: Pressionando esse bot&atilde;o, todas as altera&ccdil;&otilde;es n&atilde;o salvas, ser&atilde;o perdidas';
+$MESSAGE['SETTINGS_SAVED'] = 'Altera&ccdil;&otilde;es armazenadas com sucesso';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'N&atilde;o foi possivel abrir o arquivo de configura&ccdil;&atilde;o';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'N&atilde;o foi possivel gravar no aquivo de configura&ccdil;&atilde;o';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Aten&ccdil;&atilde;o: Somente recomendado para ambientes de teste';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Voc&ecirc; precisa informar um endere&ccdil;o de email';
+$MESSAGE['START_CURRENT_USER'] = 'Voc&ecirc; est&aacute; logado como:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Aviso, O diret&oacute;rio "INSTALL" ainda existe!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Bem-Vindo &agrave; Administra&ccdil;&atilde;o do WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Aten&ccdil;&atilde;o: para alterar o tema (template) voc&ecirc; precisa ir at&eacute; a sess&atilde;o Configura&ccdil;&otilde;es';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Usu&aacute;rio adicionado com sucesso';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Aten&ccdil;&atilde;o: Voc&ecirc; deve preencher os campos abaixo se deseja alterar a senha';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Voc&ecirc; tem certeza que deseja apagar o usu&aacute;rio selecionado?';
+$MESSAGE['USERS_DELETED'] = 'Usu&aacute;rio apagado com sucesso';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'O endere&ccdil;o de email informado j&aacute; est&aacute; sendo utilizado';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'O email fornecido &eacute; inv&aacute;lido';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Nenhum grupo selecionado';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'As senhas fornecidas n&atilde;o conferem';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'A senha fornecida &eacute; curta demais';
+$MESSAGE['USERS_SAVED'] = 'Usu&aacute;rio armazenado com sucesso';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Gerencie os grupos de usu&aacute;rios e suas permiss&otilde;es de sistema...';
+$OVERVIEW['HELP'] = 'D&uacute;vidas? Encontre respostas...';
+$OVERVIEW['LANGUAGES'] = 'Gerencie os idiomas do seu website...';
+$OVERVIEW['MEDIA'] = 'Gerencie os arquivos armazenados na pasta Media...';
+$OVERVIEW['MODULES'] = 'Gerencie os M&oacute;dulos do WebsiteBaker...';
+$OVERVIEW['PAGES'] = 'Gerencie as P&aacute;ginas do seu site...';
+$OVERVIEW['PREFERENCES'] = 'Altere suas prefer&ecirc;ncias como email, senha, etc... ';
+$OVERVIEW['SETTINGS'] = 'Altere as configura&ccdil;&otilde;es do WebsiteBaker...';
+$OVERVIEW['START'] = 'Vis&atilde;o Geral da Administra&ccdil;&atilde;o';
+$OVERVIEW['TEMPLATES'] = 'Altere a apar&ecirc;ncia do seu site com temas(templates)...';
+$OVERVIEW['USERS'] = 'Gerencie os usu&aacute;rios que podem logar no WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Visualize e navegue em seu website atrav&eacute;s de uma nova janela...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/PT.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/RU.php
===================================================================
--- trunk/languages/RU.php	(nonexistent)
+++ trunk/languages/RU.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'RU';
+$language_name = 'Русский'; // Russian
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Kirill Karakulko (kirill@nadosoft.com)';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = '&#1044;&#1086;&#1089;&#1090;&#1091;&#1087;';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = '&#1044;&#1086;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1099;&#1077; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080;';
+$MENU['ADMINTOOLS'] = '&#1040;&#1076;&#1084;&#1080;&#1085;-&#1087;&#1072;&#1085;&#1077;&#1083;&#1100;';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = '&#1047;&#1072;&#1073;&#1099;&#1083;&#1080; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;?';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1099;';
+$MENU['HELP'] = '&#1055;&#1086;&#1084;&#1086;&#1097;&#1100;';
+$MENU['LANGUAGES'] = '&#1071;&#1079;&#1099;&#1082;&#1080;';
+$MENU['LOGIN'] = '&#1042;&#1093;&#1086;&#1076;';
+$MENU['LOGOUT'] = '&#1042;&#1099;&#1093;&#1086;&#1076;';
+$MENU['MEDIA'] = '&#1060;&#1072;&#1081;&#1083;&#1099;';
+$MENU['MODULES'] = '&#1052;&#1086;&#1076;&#1091;&#1083;&#1080;';
+$MENU['PAGES'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$MENU['PREFERENCES'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072;';
+$MENU['SETTINGS'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$MENU['START'] = '&#1057;&#1090;&#1072;&#1088;&#1090;';
+$MENU['TEMPLATES'] = '&#1064;&#1072;&#1073;&#1083;&#1086;&#1085;&#1099;';
+$MENU['USERS'] = '&#1055;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1080;';
+$MENU['VIEW'] = '&#1055;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100;';
+$TEXT['ACCOUNT_SIGNUP'] = 'Account Sign-Up';
+$TEXT['ACTIONS'] = '&#1044;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1103;';
+$TEXT['ACTIVE'] = '&#1040;&#1082;&#1090;&#1080;&#1074;&#1085;&#1072;&#1103;';
+$TEXT['ADD'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100;';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1089;&#1077;&#1082;&#1094;&#1080;&#1102;';
+$TEXT['ADMIN'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;';
+$TEXT['ADMINISTRATION'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['ADMINISTRATION_TOOL'] = '&#1057;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1072; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;&#1099;';
+$TEXT['ADVANCED'] = '&#1056;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1085;&#1099;&#1077;';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = '&#1056;&#1072;&#1079;&#1088;&#1077;&#1096;&#1077;&#1085;&#1085;&#1099;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1080;';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = '&#1056;&#1072;&#1079;&#1088;&#1077;&#1096;&#1080;&#1090;&#1100; &#1084;&#1091;&#1083;&#1100;&#1090;&#1080;-&#1074;&#1099;&#1073;&#1086;&#1088;';
+$TEXT['ALL_WORDS'] = '&#1042;&#1089;&#1077; &#1089;&#1083;&#1086;&#1074;&#1072;';
+$TEXT['ANCHOR'] = '&#1071;&#1082;&#1086;&#1088;&#1100;';
+$TEXT['ANONYMOUS'] = 'Anonymous';
+$TEXT['ANY_WORDS'] = '&#1051;&#1102;&#1073;&#1086;&#1077; &#1089;&#1083;&#1086;&#1074;&#1086;';
+$TEXT['APP_NAME'] = '&#1048;&#1084;&#1103; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['ARE_YOU_SURE'] = '&#1042;&#1099; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099;?';
+$TEXT['AUTHOR'] = '&#1040;&#1074;&#1090;&#1086;&#1088;';
+$TEXT['BACK'] = '&#1053;&#1072;&#1079;&#1072;&#1076;';
+$TEXT['BACKUP'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['BACKUP_ALL_TABLES'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1074;&#1089;&#1077;&#1093; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094; &#1073;&#1072;&#1079;&#1099;';
+$TEXT['BACKUP_DATABASE'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1073;&#1072;&#1079;&#1099; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;';
+$TEXT['BACKUP_MEDIA'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; Media';
+$TEXT['BACKUP_WB_SPECIFIC'] = '&#1056;&#1077;&#1079;&#1077;&#1088;&#1074;&#1085;&#1086;&#1077; &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094; CMS';
+$TEXT['BASIC'] = '&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1077;';
+$TEXT['BLOCK'] = '&#1041;&#1083;&#1086;&#1082;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$TEXT['CALENDAR'] = '&#1050;&#1072;&#1083;&#1077;&#1085;&#1076;&#1072;&#1088;&#1100;';
+$TEXT['CANCEL'] = '&#1054;&#1090;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = '&#1043;&#1088;&#1072;&#1092;&#1080;&#1095;&#1077;&#1089;&#1082;&#1072;&#1103; &#1074;&#1077;&#1088;&#1080;&#1092;&#1080;&#1082;&#1080;&#1094;&#1080;&#1103;';
+$TEXT['CAP_EDIT_CSS'] = '&#1056;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; CSS';
+$TEXT['CHANGE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;';
+$TEXT['CHANGES'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['CHANGE_SETTINGS'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1077; &#1089;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;';
+$TEXT['CHARSET'] = '&#1050;&#1086;&#1076;&#1080;&#1088;&#1086;&#1074;&#1082;&#1072;';
+$TEXT['CHECKBOX_GROUP'] = 'Checkbox &#1075;&#1088;&#1091;&#1087;&#1087;&#1072;';
+$TEXT['CLOSE'] = '&#1047;&#1072;&#1082;&#1088;&#1099;&#1090;&#1100;';
+$TEXT['CODE'] = '&#1050;&#1086;&#1076;';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = '&#1057;&#1074;&#1077;&#1088;&#1085;&#1091;&#1090;&#1100;';
+$TEXT['COMMENT'] = '&#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$TEXT['COMMENTING'] = '&#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1091;&#1102;';
+$TEXT['COMMENTS'] = '&#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080;';
+$TEXT['CREATE_FOLDER'] = '&#1057;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1087;&#1072;&#1087;&#1082;&#1091;';
+$TEXT['CURRENT'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103;';
+$TEXT['CURRENT_FOLDER'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['CURRENT_PAGE'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['CURRENT_PASSWORD'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['CUSTOM'] = '&#1047;&#1072;&#1076;&#1072;&#1090;&#1100; e-mail';
+$TEXT['DATABASE'] = '&#1041;&#1072;&#1079;&#1072; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;';
+$TEXT['DATE'] = '&#1044;&#1072;&#1090;&#1072;';
+$TEXT['DATE_FORMAT'] = '&#1060;&#1086;&#1088;&#1084;&#1072;&#1090; &#1076;&#1072;&#1090;&#1099;';
+$TEXT['DEFAULT'] = '&#1055;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;';
+$TEXT['DEFAULT_CHARSET'] = '&#1050;&#1086;&#1076;&#1080;&#1088;&#1086;&#1074;&#1082;&#1072; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;';
+$TEXT['DEFAULT_TEXT'] = '&#1058;&#1077;&#1082;&#1089;&#1090; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;';
+$TEXT['DELETE'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;';
+$TEXT['DELETED'] = '&#1059;&#1076;&#1072;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103;';
+$TEXT['DELETE_DATE'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1076;&#1072;&#1090;&#1091;';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = '&#1054;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['DESIGNED_FOR'] = '&#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1086; &#1076;&#1083;&#1103;';
+$TEXT['DIRECTORIES'] = '&#1055;&#1072;&#1087;&#1082;&#1080;';
+$TEXT['DIRECTORY_MODE'] = 'Directory Mode';
+$TEXT['DISABLED'] = '&#1054;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$TEXT['DISPLAY_NAME'] = '&#1042;&#1099;&#1074;&#1077;&#1089;&#1090;&#1080; &#1053;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Email &#1072;&#1076;&#1088;&#1077;&#1089;';
+$TEXT['EMPTY_TRASH'] = '&#1054;&#1095;&#1080;&#1089;&#1090;&#1080;&#1090;&#1100; &#1082;&#1086;&#1088;&#1079;&#1080;&#1085;&#1091;';
+$TEXT['ENABLED'] = '&#1055;&#1088;&#1080;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$TEXT['END'] = '&#1047;&#1072;&#1082;&#1086;&#1085;&#1095;&#1080;&#1090;&#1100;';
+$TEXT['ERROR'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072;';
+$TEXT['EXACT_MATCH'] = '&#1058;&#1086;&#1095;&#1085;&#1086;&#1077; &#1089;&#1086;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['EXECUTE'] = '&#1047;&#1072;&#1087;&#1091;&#1089;&#1082;';
+$TEXT['EXPAND'] = '&#1056;&#1072;&#1089;&#1082;&#1088;&#1099;&#1090;&#1100;';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = '&#1055;&#1086;&#1083;&#1077;';
+$TEXT['FILE'] = '&#1060;&#1072;&#1081;&#1083;';
+$TEXT['FILES'] = '&#1060;&#1072;&#1081;&#1083;&#1099;';
+$TEXT['FILESYSTEM_PERMISSIONS'] = '&#1055;&#1088;&#1072;&#1074;&#1072; &#1085;&#1072; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1077;';
+$TEXT['FILE_MODE'] = 'File Mode';
+$TEXT['FINISH_PUBLISHING'] = '&#1047;&#1072;&#1082;&#1086;&#1085;&#1095;&#1080;&#1090;&#1100; &#1087;&#1091;&#1073;&#1083;&#1080;&#1082;&#1072;&#1094;&#1080;&#1102;';
+$TEXT['FOLDER'] = '&#1055;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['FOLDERS'] = '&#1055;&#1072;&#1087;&#1082;&#1080;';
+$TEXT['FOOTER'] = '&#1053;&#1080;&#1078;&#1085;&#1103;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100;';
+$TEXT['FORGOTTEN_DETAILS'] = '&#1047;&#1072;&#1073;&#1099;&#1083;&#1080; &#1074;&#1072;&#1096;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077;?';
+$TEXT['FORGOT_DETAILS'] = '&#1047;&#1072;&#1073;&#1099;&#1083;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077;?';
+$TEXT['FROM'] = '&#1080;&#1079;';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = '&#1055;&#1086;&#1083;&#1085;&#1086;&#1077; &#1080;&#1084;&#1103;';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1072;';
+$TEXT['HEADER'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082;';
+$TEXT['HEADING'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082;';
+$TEXT['HEADING_CSS_FILE'] = '&#1048;&#1084;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072;: ';
+$TEXT['HEIGHT'] = '&#1042;&#1099;&#1089;&#1086;&#1090;&#1072;';
+$TEXT['HIDDEN'] = '&#1057;&#1082;&#1088;&#1099;&#1090;&#1099;&#1081;(&#1072;&#1103;)';
+$TEXT['HIDE'] = '&#1057;&#1087;&#1088;&#1103;&#1090;&#1072;&#1090;&#1100;';
+$TEXT['HIDE_ADVANCED'] = '&#1057;&#1087;&#1088;&#1103;&#1090;&#1103;&#1090;&#1100; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1085;&#1099;&#1077; &#1086;&#1087;&#1094;&#1080;&#1080;';
+$TEXT['HOME'] = '&#1043;&#1083;&#1072;&#1074;&#1085;&#1072;&#1103;';
+$TEXT['HOMEPAGE_REDIRECTION'] = '&#1055;&#1077;&#1088;&#1077;&#1085;&#1072;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1076;&#1086;&#1084;&#1072;&#1096;&#1085;&#1077;&#1081; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = '&#1048;&#1082;&#1086;&#1085;&#1082;&#1072;';
+$TEXT['IMAGE'] = '&#1050;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1091;';
+$TEXT['INLINE'] = '&#1042;&#1089;&#1090;&#1088;&#1086;&#1077;&#1085;&#1085;&#1072;&#1103;';
+$TEXT['INSTALL'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100;';
+$TEXT['INSTALLATION'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072;';
+$TEXT['INSTALLATION_PATH'] = '&#1055;&#1091;&#1090;&#1100; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$TEXT['INSTALLATION_URL'] = 'URL &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = '&#1047;&#1072;&#1089;&#1090;&#1072;&#1074;&#1082;&#1072;';
+$TEXT['INTRO_PAGE'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;-&#1079;&#1072;&#1089;&#1090;&#1072;&#1074;&#1082;&#1072;';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = '&#1050;&#1083;&#1102;&#1095;&#1077;&#1074;&#1099;&#1077; &#1089;&#1083;&#1086;&#1074;&#1072;';
+$TEXT['LANGUAGE'] = '&#1071;&#1079;&#1099;&#1082;';
+$TEXT['LAST_UPDATED_BY'] = '&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1077; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;: ';
+$TEXT['LENGTH'] = '&#1044;&#1083;&#1080;&#1085;&#1072;';
+$TEXT['LEVEL'] = '&#1059;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;';
+$TEXT['LINK'] = '&#1057;&#1089;&#1099;&#1083;&#1082;&#1072;';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1089;&#1087;&#1080;&#1089;&#1082;&#1072;';
+$TEXT['LOGGED_IN'] = '&#1042;&#1093;&#1086;&#1076; &#1086;&#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1083;&#1077;&#1085;';
+$TEXT['LOGIN'] = '&#1042;&#1093;&#1086;&#1076;';
+$TEXT['LONG'] = '&#1055;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102;';
+$TEXT['LONG_TEXT'] = '&#1058;&#1077;&#1082;&#1089;&#1090; &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102;';
+$TEXT['LOOP'] = '&#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100;';
+$TEXT['MAIN'] = '&#1043;&#1083;&#1072;&#1074;&#1085;&#1072;&#1103;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;:';
+$TEXT['MANAGE_GROUPS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1075;&#1088;&#1091;&#1087;&#1087;&#1072;&#1084;&#1080;';
+$TEXT['MANAGE_USERS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;&#1084;&#1080;';
+$TEXT['MATCH'] = '&#1057;&#1086;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['MATCHING'] = '&#1057;&#1086;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['MAX_EXCERPT'] = 'Max &#1089;&#1090;&#1088;&#1086;&#1082; &#1089; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1072;&#1084;&#1080;';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1081; &#1074; &#1095;&#1072;&#1089;';
+$TEXT['MEDIA_DIRECTORY'] = '&#1044;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;';
+$TEXT['MENU'] = '&#1052;&#1077;&#1085;&#1102;';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1084;&#1077;&#1085;&#1102;';
+$TEXT['MESSAGE'] = '&#1057;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['MODIFY'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;';
+$TEXT['MODIFY_CONTENT'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1072;&#1085;&#1080;&#1077;';
+$TEXT['MODIFY_SETTINGS'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;';
+$TEXT['MODULE_ORDER'] = '&#1055;&#1086;&#1088;&#1103;&#1076;&#1086;&#1082; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1087;&#1088;&#1080; &#1087;&#1086;&#1080;&#1089;&#1082;&#1077;';
+$TEXT['MODULE_PERMISSIONS'] = '&#1055;&#1088;&#1072;&#1074;&#1072; &#1074; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;';
+$TEXT['MORE'] = '&#1041;&#1086;&#1083;&#1100;&#1096;&#1077;';
+$TEXT['MOVE_DOWN'] = '&#1055;&#1077;&#1088;&#1077;&#1076;&#1074;&#1080;&#1085;&#1091;&#1090;&#1100; &#1074;&#1085;&#1080;&#1079;';
+$TEXT['MOVE_UP'] = '&#1055;&#1077;&#1088;&#1077;&#1076;&#1074;&#1080;&#1085;&#1091;&#1090;&#1100; &#1074;&#1074;&#1077;&#1088;&#1093;';
+$TEXT['MULTIPLE_MENUS'] = '&#1052;&#1091;&#1083;&#1100;&#1090;&#1080;-&#1084;&#1077;&#1085;&#1102;';
+$TEXT['MULTISELECT'] = '&#1052;&#1091;&#1083;&#1100;&#1090;&#1080;-&#1074;&#1099;&#1073;&#1086;&#1088;';
+$TEXT['NAME'] = '&#1048;&#1084;&#1103;';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = '&#1053;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1074;&#1086;&#1081;&#1090;&#1080;?';
+$TEXT['NEW_PASSWORD'] = '&#1053;&#1086;&#1074;&#1099;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['NEW_WINDOW'] = '&#1053;&#1086;&#1074;&#1086;&#1077; &#1086;&#1082;&#1085;&#1086;';
+$TEXT['NEXT'] = '&#1076;&#1072;&#1083;&#1077;&#1077;';
+$TEXT['NEXT_PAGE'] = '&#1057;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1072;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['NO'] = '&#1053;&#1077;&#1090;';
+$TEXT['NONE'] = '&#1053;&#1077;&#1090;';
+$TEXT['NONE_FOUND'] = '&#1053;&#1080;&#1095;&#1077;&#1075;&#1086; &#1053;&#1077; &#1053;&#1072;&#1081;&#1076;&#1077;&#1085;&#1086;';
+$TEXT['NOT_FOUND'] = '&#1053;&#1077; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1086;';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = '&#1053;&#1077;&#1090; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1086;&#1074;';
+$TEXT['OF'] = '&#1080;&#1079;';
+$TEXT['ON'] = '&#1085;&#1072;';
+$TEXT['OPEN'] = '&#1054;&#1090;&#1082;&#1088;&#1099;&#1090;&#1100;';
+$TEXT['OPTION'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1086;';
+$TEXT['OTHERS'] = '&#1054;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077;';
+$TEXT['OUT_OF'] = '&#1089;&#1074;&#1099;&#1096;&#1077;';
+$TEXT['OVERWRITE_EXISTING'] = '&#1055;&#1077;&#1088;&#1077;&#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1080;&#1081;(&#1091;&#1102;)';
+$TEXT['PAGE'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['PAGES_DIRECTORY'] = '&#1044;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = '&#1056;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1077; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = '&#1071;&#1079;&#1099;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$TEXT['PAGE_LEVEL_LIMIT'] = '&#1059;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;';
+$TEXT['PAGE_SPACER'] = '&#1056;&#1072;&#1079;&#1076;&#1077;&#1083;&#1080;&#1090;&#1077;&#1083;&#1100;';
+$TEXT['PAGE_TITLE'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$TEXT['PAGE_TRASH'] = '&#1050;&#1086;&#1088;&#1079;&#1080;&#1085;&#1072;';
+$TEXT['PARENT'] = '&#1056;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;';
+$TEXT['PASSWORD'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['PATH'] = '&#1055;&#1091;&#1090;&#1100;';
+$TEXT['PHP_ERROR_LEVEL'] = '&#1059;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100; &#1074;&#1099;&#1074;&#1086;&#1076;&#1072; &#1086;&#1096;&#1080;&#1073;&#1086;&#1082; PHP';
+$TEXT['PLEASE_LOGIN'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1093;&#1086;&#1076;';
+$TEXT['PLEASE_SELECT'] = '&#1042;&#1099;&#1073;&#1077;&#1088;&#1080;&#1090;&#1077;';
+$TEXT['POST'] = '&#1054;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1100;';
+$TEXT['POSTS_PER_PAGE'] = '&#1057;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1081; &#1085;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091;';
+$TEXT['POST_FOOTER'] = '&#1053;&#1080;&#1078;&#1085;&#1103;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100; &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['POST_HEADER'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1103;';
+$TEXT['PREVIOUS'] = '&#1085;&#1072;&#1079;&#1072;&#1076;';
+$TEXT['PREVIOUS_PAGE'] = '&#1055;&#1088;&#1077;&#1076;&#1099;&#1076;&#1091;&#1097;&#1072;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;';
+$TEXT['PRIVATE'] = '&#1047;&#1072;&#1082;&#1088;&#1099;&#1090;&#1072;&#1103;';
+$TEXT['PRIVATE_VIEWERS'] = 'Private Viewers';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = '&#1044;&#1083;&#1103; &#1054;&#1073;&#1097;&#1077;&#1075;&#1086; &#1044;&#1086;&#1089;&#1090;&#1091;&#1087;&#1072;';
+$TEXT['PUBL_END_DATE'] = '&#1044;&#1072;&#1090;&#1072; &#1086;&#1082;&#1086;&#1085;&#1095;&#1072;&#1085;&#1080;&#1103;';
+$TEXT['PUBL_START_DATE'] = '&#1044;&#1072;&#1090;&#1072; &#1089;&#1090;&#1072;&#1088;&#1090;&#1072;';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radio Button &#1075;&#1088;&#1091;&#1087;&#1087;&#1072;';
+$TEXT['READ'] = '&#1063;&#1090;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['READ_MORE'] = '&#1063;&#1080;&#1090;&#1072;&#1090;&#1100; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = '&#1047;&#1072;&#1088;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1099;&#1077;';
+$TEXT['REGISTERED_VIEWERS'] = '&#1047;&#1072;&#1088;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1080;';
+$TEXT['RELOAD'] = '&#1055;&#1077;&#1088;&#1077;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100;';
+$TEXT['REMEMBER_ME'] = '&#1047;&#1072;&#1087;&#1086;&#1084;&#1085;&#1080;&#1090;&#1100; &#1084;&#1077;&#1085;&#1103;';
+$TEXT['RENAME'] = '&#1055;&#1077;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = '&#1053;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099;&#1077;';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = '&#1057;&#1073;&#1088;&#1086;&#1089;&#1080;&#1090;&#1100;';
+$TEXT['RESIZE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088;';
+$TEXT['RESIZE_IMAGE_TO'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1080; &#1085;&#1072;';
+$TEXT['RESTORE'] = '&#1042;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;';
+$TEXT['RESTORE_DATABASE'] = '&#1042;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1073;&#1072;&#1079;&#1091; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;';
+$TEXT['RESTORE_MEDIA'] = '&#1042;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; Media';
+$TEXT['RESULTS'] = '&#1056;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1099;';
+$TEXT['RESULTS_FOOTER'] = '&#1053;&#1080;&#1078;&#1085;&#1103;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1086;&#1074;';
+$TEXT['RESULTS_FOR'] = '&#1056;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1099; &#1076;&#1083;&#1103;';
+$TEXT['RESULTS_HEADER'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;&#1086;&#1074;';
+$TEXT['RESULTS_LOOP'] = '&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1081; &#1073;&#1083;&#1086;&#1082;';
+$TEXT['RETYPE_NEW_PASSWORD'] = '&#1055;&#1086;&#1074;&#1090;&#1086;&#1088;&#1080;&#1090;&#1100; &#1085;&#1086;&#1074;&#1099;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['RETYPE_PASSWORD'] = '&#1055;&#1086;&#1074;&#1090;&#1086;&#1088;&#1080;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['SAME_WINDOW'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1077;&#1077; &#1086;&#1082;&#1085;&#1086;';
+$TEXT['SAVE'] = '&#1057;&#1086;&#1093;&#1088;&#1072;&#1085;&#1080;&#1090;&#1100;';
+$TEXT['SEARCH'] = '&#1055;&#1086;&#1080;&#1089;&#1082;';
+$TEXT['SEARCHING'] = '&#1048;&#1076;&#1077;&#1090; &#1087;&#1086;&#1080;&#1089;&#1082;';
+$TEXT['SECTION'] = '&#1057;&#1077;&#1082;&#1094;&#1080;&#1103;';
+$TEXT['SECTION_BLOCKS'] = '&#1041;&#1083;&#1086;&#1082;&#1080; &#1089;&#1077;&#1082;&#1094;&#1080;&#1081;';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Select Box';
+$TEXT['SEND_DETAILS'] = '&#1055;&#1086;&#1089;&#1083;&#1072;&#1090;&#1100; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077;';
+$TEXT['SEPARATE'] = '&#1056;&#1072;&#1079;&#1076;&#1077;&#1083;&#1077;&#1085;&#1085;&#1099;&#1081;';
+$TEXT['SEPERATOR'] = '&#1056;&#1072;&#1079;&#1076;&#1077;&#1083;&#1080;&#1090;&#1077;&#1083;&#1100;';
+$TEXT['SERVER_EMAIL'] = 'Email &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'OS &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;';
+$TEXT['SESSION_IDENTIFIER'] = '&#1048;&#1076;&#1077;&#1085;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088; &#1089;&#1077;&#1089;&#1089;&#1080;&#1080;';
+$TEXT['SETTINGS'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$TEXT['SHORT'] = '&#1042; &#1082;&#1088;&#1072;&#1090;&#1094;&#1077;';
+$TEXT['SHORT_TEXT'] = '&#1050;&#1088;&#1072;&#1090;&#1082;&#1080;&#1081; &#1090;&#1077;&#1082;&#1089;&#1090;';
+$TEXT['SHOW'] = '&#1055;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100;';
+$TEXT['SHOW_ADVANCED'] = '&#1055;&#1086;&#1082;&#1072;&#1079;&#1072;&#1090;&#1100; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1085;&#1099;&#1077; &#1086;&#1087;&#1094;&#1080;&#1080;';
+$TEXT['SIGNUP'] = '&#1056;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['SIZE'] = '&#1056;&#1072;&#1079;&#1084;&#1077;&#1088;';
+$TEXT['SMART_LOGIN'] = '&#1059;&#1084;&#1085;&#1099;&#1081; Login';
+$TEXT['START'] = '&#1057;&#1090;&#1072;&#1088;&#1090;';
+$TEXT['START_PUBLISHING'] = '&#1053;&#1072;&#1095;&#1072;&#1090;&#1100; &#1087;&#1091;&#1073;&#1083;&#1080;&#1082;&#1072;&#1094;&#1080;&#1102;';
+$TEXT['SUBJECT'] = '&#1058;&#1077;&#1084;&#1072;';
+$TEXT['SUBMISSIONS'] = '&#1055;&#1086;&#1076;&#1087;&#1080;&#1089;&#1082;&#1080;';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = '&#1057;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1081;, &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1103;&#1077;&#1084;&#1099;&#1093; &#1074; &#1073;&#1072;&#1079;&#1077;';
+$TEXT['SUBMISSION_ID'] = 'ID &#1087;&#1086;&#1076;&#1087;&#1080;&#1089;&#1082;&#1080;';
+$TEXT['SUBMITTED'] = '&#1054;&#1090;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1086;';
+$TEXT['SUCCESS'] = '&#1059;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$TEXT['SYSTEM_DEFAULT'] = '&#1055;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;';
+$TEXT['SYSTEM_PERMISSIONS'] = '&#1057;&#1080;&#1089;&#1090;&#1077;&#1084;&#1085;&#1099;&#1077; &#1087;&#1088;&#1072;&#1074;&#1072;';
+$TEXT['TABLE_PREFIX'] = '&#1055;&#1088;&#1077;&#1092;&#1080;&#1082;&#1089; &#1090;&#1072;&#1073;&#1083;&#1080;&#1094;';
+$TEXT['TARGET'] = '&#1054;&#1090;&#1082;&#1088;&#1099;&#1074;&#1072;&#1090;&#1100; &#1074;';
+$TEXT['TARGET_FOLDER'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1072;&#1103; &#1087;&#1072;&#1087;&#1082;&#1072;';
+$TEXT['TEMPLATE'] = '&#1064;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$TEXT['TEMPLATE_PERMISSIONS'] = '&#1055;&#1088;&#1072;&#1074;&#1072; &#1074; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1072;&#1093;';
+$TEXT['TEXT'] = '&#1058;&#1077;&#1082;&#1089;&#1090;';
+$TEXT['TEXTAREA'] = 'Textarea';
+$TEXT['TEXTFIELD'] = 'Textfield';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = '&#1042;&#1088;&#1077;&#1084;&#1103;';
+$TEXT['TIMEZONE'] = '&#1042;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1072;&#1103; &#1079;&#1086;&#1085;&#1072;';
+$TEXT['TIME_FORMAT'] = '&#1060;&#1086;&#1088;&#1084;&#1072;&#1090; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080;';
+$TEXT['TIME_LIMIT'] = 'Max &#1074;&#1088;&#1077;&#1084;&#1103; &#1087;&#1086;&#1080;&#1089;&#1082;&#1072; &#1074; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;';
+$TEXT['TITLE'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082;';
+$TEXT['TO'] = '&#1074;';
+$TEXT['TOP_FRAME'] = '&#1043;&#1083;&#1072;&#1074;&#1085;&#1099;&#1081; &#1092;&#1088;&#1077;&#1081;&#1084;';
+$TEXT['TRASH_EMPTIED'] = '&#1050;&#1086;&#1088;&#1079;&#1080;&#1085;&#1072; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1072;';
+$TEXT['TXT_EDIT_CSS_FILE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1077; CSS &#1092;&#1072;&#1081;&#1083;, &#1077;&#1089;&#1083;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086;:';
+$TEXT['TYPE'] = '&#1058;&#1080;&#1087;';
+$TEXT['UNDER_CONSTRUCTION'] = '&#1042; &#1089;&#1090;&#1072;&#1076;&#1080;&#1080; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080;';
+$TEXT['UNINSTALL'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;';
+$TEXT['UNKNOWN'] = '&#1053;&#1077;&#1080;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1086;';
+$TEXT['UNLIMITED'] = '&#1053;&#1077;&#1086;&#1075;&#1088;&#1072;&#1085;&#1080;&#1095;&#1077;&#1085;&#1085;&#1086;';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = '&#1042;&#1074;&#1077;&#1088;&#1093;';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = '&#1047;&#1072;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083;(&#1099;)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = '&#1042;&#1083;&#1072;&#1076;&#1077;&#1083;&#1077;&#1094;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = '&#1048;&#1079;&#1086;&#1073;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1077;';
+$TEXT['VERSION'] = '&#1042;&#1077;&#1088;&#1089;&#1080;&#1103;';
+$TEXT['VIEW'] = '&#1055;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100;';
+$TEXT['VIEW_DELETED_PAGES'] = '&#1055;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1085;&#1099;&#1077; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$TEXT['VIEW_DETAILS'] = '&#1055;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1076;&#1077;&#1090;&#1072;&#1083;&#1080;';
+$TEXT['VISIBILITY'] = '&#1042;&#1080;&#1076;&#1080;&#1084;&#1086;&#1089;&#1090;&#1100;';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = '&#1055;&#1080;&#1089;&#1100;&#1084;&#1086; &#1086;&#1090;';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = '&#1048;&#1084;&#1103; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1077;&#1083;&#1103;';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1079;&#1072;&#1076;&#1072;&#1081;&#1090;&#1077; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077; &#1087;&#1086;&#1083;&#1103; "&#1055;&#1080;&#1089;&#1100;&#1084;&#1086; &#1086;&#1090;" &#1080; "&#1048;&#1084;&#1103; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1090;&#1077;&#1083;&#1103;". &#1044;&#1083;&#1103; &#1087;&#1086;&#1083;&#1103; "&#1055;&#1080;&#1089;&#1100;&#1084;&#1086; &#1086;&#1090;" &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1091;&#1077;&#1090;&#1089;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1072;&#1076;&#1088;&#1077;&#1089;&#1072; &#1074;&#1080;&#1076;&#1072;: <strong>admin@yourdomain.com</strong>. &#1053;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1087;&#1086;&#1095;&#1090;&#1086;&#1074;&#1099;&#1077; &#1087;&#1088;&#1086;&#1074;&#1072;&#1081;&#1076;&#1077;&#1088;&#1099; (&#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088; <em>mail.com</em>) &#1084;&#1086;&#1075;&#1091;&#1090; &#1080;&#1075;&#1085;&#1086;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1072;&#1076;&#1088;&#1077;&#1089;&#1072; &#1074;&#1080;&#1076;&#1072; <em>name@mail.com</em>, &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1085;&#1099;&#1077; &#1089; &#1095;&#1091;&#1078;&#1086;&#1075;&#1086; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072;, &#1076;&#1083;&#1103; &#1073;&#1086;&#1088;&#1100;&#1073;&#1099; &#1089;&#1086; &#1089;&#1087;&#1072;&#1084;&#1086;&#1084;.<br /><br />&#1044;&#1072;&#1085;&#1085;&#1099;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1073;&#1091;&#1076;&#1091;&#1090; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1077;&#1089;&#1083;&#1080; &#1074; CMS &#1085;&#1077; &#1079;&#1072;&#1076;&#1072;&#1085;&#1099; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1099;. &#1045;&#1089;&#1083;&#1080; &#1042;&#1072;&#1096; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090; <acronym title="Simple mail transfer protocol">SMTP</acronym>, &#1074;&#1099; &#1084;&#1086;&#1078;&#1077;&#1090;&#1077; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1101;&#1090;&#1080; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1076;&#1083;&#1103; &#1080;&#1089;&#1093;&#1086;&#1076;&#1103;&#1097;&#1077;&#1081; &#1087;&#1086;&#1095;&#1090;&#1099;.';
+$TEXT['WBMAILER_FUNCTION'] = '&#1055;&#1086;&#1095;&#1090;&#1086;&#1074;&#1072;&#1103; &#1089;&#1083;&#1091;&#1078;&#1073;&#1072;';
+$TEXT['WBMAILER_NOTICE'] = '<strong>&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; SMTP:</strong><br />&#1044;&#1072;&#1085;&#1085;&#1099;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1077;&#1089;&#1083;&#1080; &#1042;&#1099; &#1087;&#1083;&#1072;&#1085;&#1080;&#1088;&#1091;&#1077;&#1090;&#1077; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &#1087;&#1080;&#1089;&#1100;&#1084;&#1072;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; <acronym title="Simple mail transfer protocol">SMTP</acronym>. &#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1085;&#1077; &#1079;&#1085;&#1072;&#1077;&#1090;&#1077; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1099; &#1042;&#1072;&#1096;&#1077;&#1075;&#1086; SMTP &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1072; &#1080;&#1083;&#1080; &#1085;&#1077; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099; &#1074; &#1074;&#1099;&#1073;&#1086;&#1088;&#1077;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1081;&#1090;&#1077; PHP MAIL &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1087;&#1086;&#1095;&#1090;&#1086;&#1074;&#1086;&#1081; &#1089;&#1083;&#1091;&#1078;&#1073;&#1099;.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP &#1072;&#1074;&#1090;&#1086;&#1088;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103;';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = '&#1086;&#1090;&#1084;&#1077;&#1090;&#1100;&#1090;&#1077;, &#1077;&#1089;&#1083;&#1080; &#1042;&#1072;&#1096; SMTP &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; &#1072;&#1074;&#1090;&#1086;&#1088;&#1080;&#1079;&#1072;&#1094;&#1080;&#1102;';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = '&#1042;&#1077;&#1073;&#1089;&#1072;&#1081;&#1090;';
+$TEXT['WEBSITE_DESCRIPTION'] = '&#1054;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_FOOTER'] = '&#1053;&#1080;&#1078;&#1085;&#1103;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_HEADER'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_KEYWORDS'] = '&#1050;&#1083;&#1102;&#1095;&#1077;&#1074;&#1099;&#1077; &#1089;&#1083;&#1086;&#1074;&#1072; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WEBSITE_TITLE'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$TEXT['WELCOME_BACK'] = '&#1044;&#1086;&#1073;&#1088;&#1086; &#1087;&#1086;&#1078;&#1072;&#1083;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$TEXT['WIDTH'] = '&#1064;&#1080;&#1088;&#1080;&#1085;&#1072;';
+$TEXT['WINDOW'] = '&#1054;&#1082;&#1085;&#1086;';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = '&#1047;&#1072;&#1087;&#1080;&#1089;&#1100; &#1088;&#1072;&#1079;&#1088;&#1077;&#1096;&#1077;&#1085;&#1072; &#1074;&#1089;&#1077;&#1084;';
+$TEXT['WRITE'] = '&#1047;&#1072;&#1087;&#1080;&#1089;&#1100;';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG &#1089;&#1090;&#1080;&#1083;&#1100;';
+$TEXT['YES'] = '&#1044;&#1072;';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1075;&#1088;&#1091;&#1087;&#1087;&#1091;';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082;';
+$HEADING['ADD_PAGE'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091;';
+$HEADING['ADD_USER'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;';
+$HEADING['ADMINISTRATION_TOOLS'] = '&#1057;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1072; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;';
+$HEADING['BROWSE_MEDIA'] = '&#1055;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083;&#1099;';
+$HEADING['CREATE_FOLDER'] = '&#1057;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1087;&#1072;&#1087;&#1082;&#1091;';
+$HEADING['DEFAULT_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1087;&#1086; &#1091;&#1084;&#1086;&#1083;&#1095;&#1072;&#1085;&#1080;&#1102;';
+$HEADING['DELETED_PAGES'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$HEADING['FILESYSTEM_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&#1086;&#1081; &#1089;&#1080;&#1089;&#1090;&#1077;&#1084;&#1099;';
+$HEADING['GENERAL_SETTINGS'] = '&#1054;&#1073;&#1097;&#1080;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$HEADING['INSTALL_LANGUAGE'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1103;&#1079;&#1099;&#1082;';
+$HEADING['INSTALL_MODULE'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100;';
+$HEADING['INSTALL_TEMPLATE'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1080;&#1090;&#1100; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1103;&#1079;&#1099;&#1082;&#1072;';
+$HEADING['MANAGE_SECTIONS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1089;&#1077;&#1082;&#1094;&#1080;&#1103;&#1084;&#1080;';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1085;&#1099;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$HEADING['MODIFY_DELETE_GROUP'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;/&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1075;&#1088;&#1091;&#1087;&#1087;&#1091;';
+$HEADING['MODIFY_DELETE_PAGE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;/&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091;';
+$HEADING['MODIFY_DELETE_USER'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;/&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;';
+$HEADING['MODIFY_GROUP'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1075;&#1088;&#1091;&#1087;&#1087;&#1091;';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1075;&#1083;&#1072;&#1074;&#1085;&#1091;&#1102; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091;';
+$HEADING['MODIFY_PAGE'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091;';
+$HEADING['MODIFY_PAGE_SETTINGS'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$HEADING['MODIFY_USER'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;';
+$HEADING['MODULE_DETAILS'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103;';
+$HEADING['MY_EMAIL'] = '&#1052;&#1086;&#1081; &#1072;&#1076;&#1088;&#1077;&#1089; e-mail';
+$HEADING['MY_PASSWORD'] = '&#1052;&#1086;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$HEADING['MY_SETTINGS'] = '&#1052;&#1086;&#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;';
+$HEADING['SEARCH_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1087;&#1086;&#1080;&#1089;&#1082;&#1072;';
+$HEADING['SERVER_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1089;&#1088;&#1077;&#1074;&#1077;&#1088;&#1072;';
+$HEADING['TEMPLATE_DETAILS'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1072;';
+$HEADING['UNINSTALL_LANGUAGE'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1103;&#1079;&#1099;&#1082;';
+$HEADING['UNINSTALL_MODULE'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1084;&#1086;&#1076;&#1091;&#1083;&#1100;';
+$HEADING['UNINSTALL_TEMPLATE'] = '&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = '&#1047;&#1072;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083;(&#1099;)';
+$HEADING['WBMAILER_SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1087;&#1086;&#1095;&#1090;&#1086;&#1074;&#1086;&#1081; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1099;';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = '&#1053;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1088;&#1072;&#1074; &#1076;&#1083;&#1103; &#1085;&#1072;&#1093;&#1086;&#1078;&#1076;&#1077;&#1085;&#1080;&#1103; &#1074; &#1101;&#1090;&#1086;&#1081; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080;';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = '&#1048;&#1079;&#1074;&#1080;&#1085;&#1080;&#1090;&#1077;, &#1085;&#1086; &#1074;&#1099; &#1084;&#1086;&#1078;&#1077;&#1090;&#1077; &#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1085;&#1077; &#1095;&#1072;&#1097;&#1077; 1 &#1088;&#1072;&#1079;&#1072; &#1074; &#1095;&#1072;&#1089;';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1099;&#1089;&#1083;&#1072;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;, &#1086;&#1073;&#1088;&#1072;&#1090;&#1080;&#1090;&#1077;&#1089;&#1100; &#1082; &#1074;&#1072;&#1096;&#1077;&#1084;&#1091; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1072;&#1090;&#1086;&#1088;&#1091;';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Email, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1099; &#1074;&#1074;&#1077;&#1083;&#1080;, &#1085;&#1077; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085; &#1074; &#1073;&#1072;&#1079;&#1077;';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1074;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1074;&#1072;&#1096; email';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = '&#1048;&#1079;&#1074;&#1080;&#1085;&#1080;&#1090;&#1077;, &#1085;&#1077;&#1090; &#1072;&#1082;&#1090;&#1080;&#1074;&#1085;&#1099;&#1093; &#1089;&#1077;&#1082;&#1094;&#1080;&#1081;';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = '&#1048;&#1079;&#1074;&#1080;&#1085;&#1080;&#1090;&#1077;, &#1091; &#1074;&#1072;&#1089; &#1085;&#1077;&#1090; &#1087;&#1088;&#1072;&#1074; &#1076;&#1083;&#1103; &#1087;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1072; &#1101;&#1090;&#1086;&#1081; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = '&#1059;&#1078;&#1077; &#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1086;';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1085;&#1091;&#1102; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1102;';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;: &#1092;&#1072;&#1081;&#1083; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1077;&#1090;&#1089;&#1103;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1088;&#1072;&#1079;&#1072;&#1088;&#1093;&#1080;&#1074;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072;.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = '&#1047;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1077;&#1084;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1080;&#1084;&#1077;&#1090;&#1100; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1081; &#1092;&#1086;&#1088;&#1084;&#1072;&#1090;:';
+$MESSAGE['GENERIC_FILE_TYPES'] = '&#1047;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1077;&#1084;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1076;&#1086;&#1083;&#1078;&#1077;&#1085; &#1080;&#1084;&#1077;&#1090;&#1100; &#1090;&#1080;&#1087;:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1074;&#1077;&#1088;&#1085;&#1080;&#1090;&#1077;&#1089;&#1100; &#1080; &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1087;&#1086;&#1083;&#1103;';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1072; &#1087;&#1088;&#1086;&#1096;&#1083;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1072;';
+$MESSAGE['GENERIC_INVALID'] = '&#1047;&#1072;&#1075;&#1088;&#1091;&#1078;&#1077;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1087;&#1086;&#1074;&#1088;&#1077;&#1078;&#1076;&#1077;&#1085;';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = '&#1053;&#1077;&#1091;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1086;';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1087;&#1086;&#1076;&#1086;&#1078;&#1076;&#1080;&#1090;&#1077;, &#1101;&#1090;&#1086; &#1084;&#1086;&#1078;&#1077;&#1090; &#1079;&#1072;&#1085;&#1103;&#1090;&#1100; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103;.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = '&#1047;&#1072;&#1081;&#1076;&#1080;&#1090;&#1077; &#1087;&#1086;&#1087;&#1086;&#1079;&#1078;&#1077;...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = '&#1059;&#1076;&#1072;&#1083;&#1077;&#1085;&#1086; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GENERIC_UPGRADED'] = '&#1054;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1087;&#1088;&#1086;&#1096;&#1083;&#1086; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = '&#1042;&#1077;&#1073;&#1089;&#1072;&#1081;&#1090; &#1074; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1077;';
+$MESSAGE['GROUPS_ADDED'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1072; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = '&#1042;&#1099; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099;, &#1095;&#1090;&#1086; &#1074;&#1099; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1085;&#1091;&#1102; &#1075;&#1088;&#1091;&#1087;&#1087;&#1091; (&#1080; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1077;&#1081; &#1074; &#1085;&#1077;&#1081;)?';
+$MESSAGE['GROUPS_DELETED'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1072;';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = '&#1048;&#1084;&#1103; &#1075;&#1088;&#1091;&#1087;&#1087;&#1099; &#1087;&#1091;&#1089;&#1090;&#1086;&#1077;';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1072; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = '&#1043;&#1088;&#1091;&#1087;&#1087; &#1085;&#1077; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1086;';
+$MESSAGE['GROUPS_SAVED'] = '&#1043;&#1088;&#1091;&#1087;&#1087;&#1072; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1074;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = '&#1059;&#1082;&#1072;&#1079;&#1072;&#1085;&#1085;&#1099;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1076;&#1083;&#1080;&#1085;&#1085;&#1099;&#1081;';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = '&#1059;&#1082;&#1072;&#1079;&#1072;&#1085;&#1085;&#1099;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100; &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1082;&#1086;&#1088;&#1086;&#1090;&#1082;&#1080;&#1081;';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = '&#1042;&#1099; &#1085;&#1077; &#1074;&#1074;&#1077;&#1083;&#1080; &#1088;&#1072;&#1089;&#1096;&#1080;&#1088;&#1077;&#1085;&#1080;&#1077; &#1092;&#1072;&#1081;&#1083;&#1072;';
+$MESSAGE['MEDIA_BLANK_NAME'] = '&#1042;&#1099; &#1085;&#1077; &#1074;&#1074;&#1077;&#1083;&#1080; &#1085;&#1086;&#1074;&#1086;&#1077; &#1080;&#1084;&#1103;';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1091;&#1102; &#1087;&#1072;&#1087;&#1082;&#1091;';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = '&#1042;&#1099; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099;, &#1095;&#1090;&#1086; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1076;&#1072;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083; &#1080;&#1083;&#1080; &#1087;&#1072;&#1087;&#1082;&#1091;?';
+$MESSAGE['MEDIA_DELETED_DIR'] = '&#1055;&#1072;&#1087;&#1082;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1072;';
+$MESSAGE['MEDIA_DELETED_FILE'] = '&#1060;&#1072;&#1081;&#1083; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = '&#1044;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103; &#1085;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = '&#1053;&#1077;&#1083;&#1100;&#1079;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; ../ &#1074; &#1080;&#1084;&#1077;&#1085;&#1080; &#1087;&#1072;&#1087;&#1082;&#1080;';
+$MESSAGE['MEDIA_DIR_EXISTS'] = '&#1055;&#1072;&#1087;&#1082;&#1072; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$MESSAGE['MEDIA_DIR_MADE'] = '&#1055;&#1072;&#1087;&#1082;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1072;';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1089;&#1086;&#1079;&#1076;&#1072;&#1090;&#1100; &#1087;&#1072;&#1087;&#1082;&#1091;';
+$MESSAGE['MEDIA_FILE_EXISTS'] = '&#1060;&#1072;&#1081;&#1083; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = '&#1060;&#1072;&#1081;&#1083; &#1085;&#1077; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = '&#1053;&#1077;&#1083;&#1100;&#1079;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; ../ &#1074; &#1080;&#1084;&#1077;&#1085;&#1080;';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = '&#1053;&#1077;&#1083;&#1100;&#1079;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; index.php &#1074; &#1082;&#1072;&#1095;&#1077;&#1089;&#1090;&#1074;&#1077; &#1080;&#1084;&#1077;&#1085;&#1080;';
+$MESSAGE['MEDIA_NONE_FOUND'] = '&#1042; &#1076;&#1072;&#1085;&#1085;&#1086;&#1081; &#1087;&#1072;&#1087;&#1082;&#1077; &#1085;&#1077;&#1090; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = '&#1059;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1087;&#1077;&#1088;&#1077;&#1080;&#1084;&#1077;&#1085;&#1086;&#1074;&#1072;&#1085;&#1086;';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' &#1092;&#1072;&#1081;&#1083; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1079;&#1072;&#1082;&#1072;&#1095;&#1072;&#1085;';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = '&#1053;&#1077;&#1083;&#1100;&#1079;&#1103; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; ../ &#1074; &#1080;&#1084;&#1077;&#1085;&#1080;';
+$MESSAGE['MEDIA_UPLOADED'] = ' &#1092;&#1072;&#1081;&#1083;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1079;&#1072;&#1082;&#1072;&#1095;&#1072;&#1085;&#1099;';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = '&#1048;&#1079;&#1074;&#1080;&#1085;&#1080;&#1090;&#1077;, &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1084;&#1085;&#1086;&#1075;&#1086; &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1081; &#1079;&#1072; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1095;&#1072;&#1089;. &#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1087;&#1086;&#1087;&#1088;&#1086;&#1073;&#1091;&#1081;&#1090;&#1077; &#1087;&#1086;&#1074;&#1090;&#1086;&#1088;&#1080;&#1090;&#1100; &#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1082;&#1091; &#1095;&#1077;&#1088;&#1077;&#1079; &#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103;.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = '&#1050;&#1086;&#1076; &#1087;&#1086;&#1076;&#1090;&#1074;&#1077;&#1088;&#1078;&#1076;&#1077;&#1085;&#1080;&#1103; &#1074;&#1074;&#1077;&#1076;&#1077;&#1085; &#1085;&#1077;&#1074;&#1077;&#1088;&#1085;&#1086;. &#1045;&#1089;&#1083;&#1080; &#1074;&#1099; &#1085;&#1077; &#1084;&#1086;&#1078;&#1077;&#1090;&#1077; &#1087;&#1088;&#1086;&#1095;&#1077;&#1089;&#1090;&#1100; &#1082;&#1086;&#1076;, &#1087;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1089;&#1086;&#1086;&#1073;&#1097;&#1080;&#1090;&#1077; &#1088;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082;&#1072;&#1084;: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = '&#1042;&#1053;&#1048;&#1052;&#1040;&#1053;&#1048;&#1045;! &#1042;&#1099; &#1076;&#1086;&#1083;&#1078;&#1085;&#1099; &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100; &#1087;&#1086;&#1083;&#1077;';
+$MESSAGE['PAGES_ADDED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_ADDED_HEADING'] = '&#1047;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085;';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = '&#1042;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1084;&#1077;&#1085;&#1102;';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = '&#1042;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072; &#1074; &#1087;&#1072;&#1087;&#1082;&#1077; /pages  (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1088;&#1072;&#1074;)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1080;&#1103; &#1092;&#1072;&#1081;&#1083;&#1072; &#1074; &#1087;&#1072;&#1087;&#1082;&#1077; /pages  (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1088;&#1072;&#1074;)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1087;&#1086;&#1088;&#1103;&#1076;&#1082;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;';
+$MESSAGE['PAGES_DELETED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = '&#1042;&#1099; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099;, &#1095;&#1090;&#1086; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1091;&#1102; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1091; (&#1080; &#1074;&#1089;&#1077; &#1077;&#1105; &#1087;&#1086;&#1076;&#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1099;)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = '&#1059; &#1074;&#1072;&#1089; &#1085;&#1077;&#1090; &#1087;&#1088;&#1072;&#1074; &#1076;&#1083;&#1103; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1101;&#1090;&#1086;&#1081; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$MESSAGE['PAGES_INTRO_LINK'] = '&#1053;&#1072;&#1078;&#1084;&#1080;&#1090;&#1077; &#1047;&#1044;&#1045;&#1057;&#1068; &#1076;&#1083;&#1103; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;-&#1079;&#1072;&#1089;&#1090;&#1072;&#1074;&#1082;&#1080;';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1074; /pages/intro.php (&#1085;&#1077;&#1076;&#1086;&#1089;&#1090;&#1072;&#1090;&#1086;&#1095;&#1085;&#1086; &#1087;&#1088;&#1072;&#1074;)';
+$MESSAGE['PAGES_INTRO_SAVED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;-&#1079;&#1072;&#1089;&#1090;&#1072;&#1074;&#1082;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_LAST_MODIFIED'] = '&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1077; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1077;:';
+$MESSAGE['PAGES_NOT_FOUND'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1085;&#1077; &#1085;&#1072;&#1081;&#1076;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_NOT_SAVED'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1080;&#1103; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;';
+$MESSAGE['PAGES_PAGE_EXISTS'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1089; &#1090;&#1072;&#1082;&#1080;&#1084; &#1080;&#1083;&#1080; &#1089;&#1093;&#1086;&#1078;&#1080;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090;';
+$MESSAGE['PAGES_REORDERED'] = '&#1055;&#1086;&#1088;&#1103;&#1076;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;';
+$MESSAGE['PAGES_RESTORED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1074;&#1086;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = '&#1050; &#1089;&#1087;&#1080;&#1089;&#1082;&#1091; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;';
+$MESSAGE['PAGES_SAVED'] = '&#1057;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1072;';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099;';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = '&#1057;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1089;&#1077;&#1082;&#1094;&#1080;&#1080; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099;';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = '&#1058;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1099; &#1074;&#1074;&#1077;&#1083;&#1080;, &#1085;&#1077;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = '&#1044;&#1072;&#1085;&#1085;&#1099;&#1077; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1100; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = '&#1048;&#1084;&#1077;&#1081;&#1090;&#1077; &#1074;&#1074;&#1080;&#1076;&#1091;, &#1095;&#1090;&#1086; &#1087;&#1088;&#1080; &#1085;&#1072;&#1078;&#1072;&#1090;&#1080;&#1080; &#1085;&#1072; &#1101;&#1090;&#1091; &#1082;&#1085;&#1086;&#1087;&#1082;&#1091; &#1087;&#1088;&#1086;&#1080;&#1079;&#1086;&#1081;&#1076;&#1077;&#1090; &#1089;&#1073;&#1088;&#1086;&#1089; &#1085;&#1077;&#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1085;&#1099;&#1093; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;';
+$MESSAGE['SETTINGS_SAVED'] = '&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086; &#1086;&#1090;&#1082;&#1088;&#1099;&#1090;&#1100; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = '&#1053;&#1077;&#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1072; &#1079;&#1072;&#1087;&#1080;&#1089;&#1100; &#1074; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1099;&#1081; &#1092;&#1072;&#1081;&#1083;';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = '&#1048;&#1084;&#1077;&#1081;&#1090;&#1077; &#1074;&#1074;&#1080;&#1076;&#1091;, &#1095;&#1090;&#1086; &#1101;&#1090;&#1086; &#1088;&#1077;&#1082;&#1086;&#1084;&#1077;&#1085;&#1076;&#1086;&#1074;&#1072;&#1085;&#1086; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1083;&#1103; &#1090;&#1077;&#1089;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = '&#1042;&#1099; &#1076;&#1086;&#1083;&#1078;&#1085;&#1099; &#1074;&#1074;&#1077;&#1089;&#1090;&#1080; email &#1072;&#1076;&#1088;&#1077;&#1089;';
+$MESSAGE['START_CURRENT_USER'] = '&#1042;&#1099; &#1074;&#1086;&#1096;&#1083;&#1080; &#1082;&#1072;&#1082;:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;, &#1080;&#1085;&#1089;&#1090;&#1072;&#1083;&#1103;&#1094;&#1080;&#1086;&#1085;&#1085;&#1072;&#1103; &#1076;&#1080;&#1088;&#1077;&#1082;&#1090;&#1086;&#1088;&#1080;&#1103; &#1074;&#1089;&#1077; &#1077;&#1097;&#1077; &#1085;&#1077; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;&#1072;!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = '&#1044;&#1086;&#1073;&#1088;&#1086; &#1087;&#1086;&#1078;&#1072;&#1083;&#1086;&#1074;&#1072;&#1090;&#1100; &#1074; &#1052;&#1077;&#1085;&#1102; &#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103; &#1057;&#1072;&#1081;&#1090;&#1072;';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = '&#1042;&#1085;&#1080;&#1084;&#1072;&#1085;&#1080;&#1077;! &#1063;&#1090;&#1086;&#1073;&#1099; &#1095;&#1090;&#1086;&#1073;&#1099; &#1089;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085; &#1087;&#1077;&#1088;&#1077;&#1081;&#1076;&#1080;&#1090;&#1077; &#1074; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083; "&#1059;&#1089;&#1090;&#1072;&#1085;&#1086;&#1074;&#1082;&#1080;"';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = '&#1055;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100; &#1076;&#1086;&#1073;&#1072;&#1074;&#1083;&#1077;&#1085; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = '&#1048;&#1084;&#1077;&#1081;&#1090;&#1077; &#1074;&#1074;&#1080;&#1076;&#1091;, &#1095;&#1090;&#1086; &#1074;&#1072;&#1084; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1074;&#1074;&#1077;&#1089;&#1090;&#1080; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1074;&#1077;&#1088;&#1093;&#1085;&#1080;&#1093; &#1087;&#1086;&#1083;&#1103;&#1093; &#1077;&#1089;&#1083;&#1080; &#1074;&#1099; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1080;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;';
+$MESSAGE['USERS_CONFIRM_DELETE'] = '&#1042;&#1099; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;&#1099;, &#1095;&#1090;&#1086; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1085;&#1086;&#1075;&#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;?';
+$MESSAGE['USERS_DELETED'] = '&#1055;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100; &#1073;&#1099;&#1083; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1091;&#1076;&#1072;&#1083;&#1077;&#1085;';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Email, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1074;&#1099; &#1074;&#1074;&#1077;&#1083;&#1080;, &#1091;&#1078;&#1077; &#1077;&#1089;&#1090;&#1100; &#1074; &#1073;&#1072;&#1079;&#1077;';
+$MESSAGE['USERS_INVALID_EMAIL'] = '&#1042;&#1099; &#1074;&#1074;&#1077;&#1083;&#1080; &#1085;&#1077;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083;&#1100;&#1085;&#1099;&#1081; email';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = '&#1053;&#1077; &#1086;&#1076;&#1085;&#1086;&#1081; &#1075;&#1088;&#1091;&#1087;&#1087;&#1099; &#1085;&#1077; &#1073;&#1099;&#1083;&#1086; &#1074;&#1099;&#1073;&#1088;&#1072;&#1085;&#1086;';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1074;&#1099; &#1074;&#1074;&#1077;&#1083;&#1080;, &#1085;&#1077; &#1089;&#1086;&#1074;&#1087;&#1072;&#1076;&#1072;&#1102;&#1090;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = '&#1055;&#1072;&#1088;&#1086;&#1083;&#1100;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1073;&#1099;&#1083; &#1074;&#1074;&#1077;&#1076;&#1077;&#1085;, &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1082;&#1086;&#1088;&#1086;&#1090;&#1086;&#1082;';
+$MESSAGE['USERS_SAVED'] = '&#1044;&#1072;&#1085;&#1085;&#1099;&#1077; &#1086; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1077; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1077;&#1085;&#1099; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086;';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = '&#1044;&#1086;&#1089;&#1090;&#1091;&#1087; &#1082; &#1089;&#1088;&#1077;&#1076;&#1089;&#1090;&#1074;&#1072;&#1084; &#1072;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1103;';
+$OVERVIEW['GROUPS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1075;&#1088;&#1091;&#1087;&#1087;&#1072;&#1084;&#1080; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1077;&#1081; &#1080; &#1087;&#1088;&#1072;&#1074;&#1072; &#1076;&#1086;&#1089;&#1090;&#1091;&#1087;&#1072;';
+$OVERVIEW['HELP'] = '&#1054;&#1090;&#1074;&#1077;&#1090;&#1099; &#1085;&#1072; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;&#1099;';
+$OVERVIEW['LANGUAGES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1103;&#1079;&#1099;&#1082;&#1086;&#1074;&#1099;&#1084;&#1080; &#1087;&#1072;&#1082;&#1077;&#1090;&#1072;&#1084;&#1080;';
+$OVERVIEW['MEDIA'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1092;&#1072;&#1081;&#1083;&#1072;&#1084;&#1080;';
+$OVERVIEW['MODULES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103;&#1084;&#1080;';
+$OVERVIEW['PAGES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072;&#1084;&#1080; &#1089;&#1072;&#1081;&#1090;&#1072;';
+$OVERVIEW['PREFERENCES'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;, &#1090;&#1072;&#1082;&#1080;&#1077; &#1082;&#1072;&#1082; &#1072;&#1076;&#1088;&#1077;&#1089; e-mail, &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;...';
+$OVERVIEW['SETTINGS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1084;';
+$OVERVIEW['START'] = '&#1040;&#1076;&#1084;&#1080;&#1085;&#1080;&#1089;&#1090;&#1088;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;';
+$OVERVIEW['TEMPLATES'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1072;&#1084;&#1080;';
+$OVERVIEW['USERS'] = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;&#1084;&#1080;';
+$OVERVIEW['VIEW'] = '&#1055;&#1088;&#1086;&#1089;&#1084;&#1086;&#1090;&#1088;&#1077;&#1090;&#1100; &#1080;&#1079;&#1084;&#1077;&#1085;&#1077;&#1085;&#1080;&#1103; &#1085;&#1072; &#1089;&#1072;&#1081;&#1090;&#1077; &#1074; &#1085;&#1086;&#1074;&#1086;&#1084; &#1086;&#1082;&#1085;&#1077;';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/SE.php
===================================================================
--- trunk/languages/SE.php	(nonexistent)
+++ trunk/languages/SE.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'SE';
+$language_name = 'Svenska'; 
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Markus Eriksson, Peppe Bergqvist';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'R&auml;ttigheter';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Till&auml;gg';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Skicka inloggningsuppgifter';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Grupper';
+$MENU['HELP'] = 'Hj&auml;lp';
+$MENU['LANGUAGES'] = 'Spr&aring;k';
+$MENU['LOGIN'] = 'Logga in';
+$MENU['LOGOUT'] = 'Logga ut';
+$MENU['MEDIA'] = 'Mediabibliotek';
+$MENU['MODULES'] = 'Moduler';
+$MENU['PAGES'] = 'Sidor';
+$MENU['PREFERENCES'] = 'Mina uppgifter';
+$MENU['SETTINGS'] = 'Inst&auml;llningar';
+$MENU['START'] = 'Hem';
+$MENU['TEMPLATES'] = 'Mallar';
+$MENU['USERS'] = 'Anv&auml;ndare';
+$MENU['VIEW'] = 'Visa sida';
+$TEXT['ACCOUNT_SIGNUP'] = 'Kontoregistrering';
+$TEXT['ACTIONS'] = '&Aring;tg&auml;rder';
+$TEXT['ACTIVE'] = 'Aktiv';
+$TEXT['ADD'] = 'L&auml;gg till';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'L&auml;gg till sektion';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administration';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administrationsverktyg';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Administratorer';
+$TEXT['ADVANCED'] = 'Avancerat';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Till&aring;tna att se';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Till&aring;t flera val';
+$TEXT['ALL_WORDS'] = 'Alla ord';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonym';
+$TEXT['ANY_WORDS'] = 'N&aring;got ord';
+$TEXT['APP_NAME'] = 'Namn p&aring; applikation';
+$TEXT['ARE_YOU_SURE'] = '&Auml;r du s&auml;ker?';
+$TEXT['AUTHOR'] = 'F&ouml;rfattare';
+$TEXT['BACK'] = 'Tillbaka';
+$TEXT['BACKUP'] = 'Backup';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup av samtliga tabeller i databasen';
+$TEXT['BACKUP_DATABASE'] = 'Backup av databas';
+$TEXT['BACKUP_MEDIA'] = 'Backup av media';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup av endast tabeller f&ouml;r WB';
+$TEXT['BASIC'] = 'Standard';
+$TEXT['BLOCK'] = 'Block';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = 'Avbryt';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captchaverifiering (&auml;ven kallat verifierings nummer) ';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = '&Auml;ndra';
+$TEXT['CHANGES'] = '&Auml;ndringar';
+$TEXT['CHANGE_SETTINGS'] = '&Auml;ndra inst&auml;llningar';
+$TEXT['CHARSET'] = 'Typsnitt';
+$TEXT['CHECKBOX_GROUP'] = 'Valruta flera';
+$TEXT['CLOSE'] = 'St&auml;ng';
+$TEXT['CODE'] = 'Kod';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'St&auml;ng';
+$TEXT['COMMENT'] = 'Kommentar';
+$TEXT['COMMENTING'] = 'Kommenterar';
+$TEXT['COMMENTS'] = 'Kommentarer';
+$TEXT['CREATE_FOLDER'] = 'Skapa mapp';
+$TEXT['CURRENT'] = 'Nuvarande';
+$TEXT['CURRENT_FOLDER'] = 'Nuvarande mapp';
+$TEXT['CURRENT_PAGE'] = 'Nuvarande sida';
+$TEXT['CURRENT_PASSWORD'] = 'Nuvarande l&ouml;senord';
+$TEXT['CUSTOM'] = 'Sedvanlig';
+$TEXT['DATABASE'] = 'Databas';
+$TEXT['DATE'] = 'Datum';
+$TEXT['DATE_FORMAT'] = 'Datumformat';
+$TEXT['DEFAULT'] = 'Standard';
+$TEXT['DEFAULT_CHARSET'] = 'Standardtypsnitt';
+$TEXT['DEFAULT_TEXT'] = 'Standardtext';
+$TEXT['DELETE'] = 'Radera';
+$TEXT['DELETED'] = 'Raderat';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'Beskrivning';
+$TEXT['DESIGNED_FOR'] = 'Skapad f&ouml;r';
+$TEXT['DIRECTORIES'] = 'Mappar';
+$TEXT['DIRECTORY_MODE'] = 'Mappar s&auml;tt';
+$TEXT['DISABLED'] = 'Inaktiverad';
+$TEXT['DISPLAY_NAME'] = 'Visa namn';
+$TEXT['EMAIL'] = 'E-post';
+$TEXT['EMAIL_ADDRESS'] = 'E-postadress';
+$TEXT['EMPTY_TRASH'] = 'T&ouml;m papperskorgen';
+$TEXT['ENABLED'] = 'Aktiverad';
+$TEXT['END'] = 'Stopp';
+$TEXT['ERROR'] = 'FEL';
+$TEXT['EXACT_MATCH'] = 'Exakt matchning';
+$TEXT['EXECUTE'] = 'K&ouml;ra script';
+$TEXT['EXPAND'] = '&Ouml;ppna';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'F&auml;lt';
+$TEXT['FILE'] = 'Fil';
+$TEXT['FILES'] = 'Filer';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'R&auml;ttigheter filsystem';
+$TEXT['FILE_MODE'] = 'Fil s&auml;tt';
+$TEXT['FINISH_PUBLISHING'] = 'Avsluta publicering';
+$TEXT['FOLDER'] = 'Mapp';
+$TEXT['FOLDERS'] = 'Mappar';
+$TEXT['FOOTER'] = 'Fot';
+$TEXT['FORGOTTEN_DETAILS'] = 'Gl&ouml;mt dina uppgifter?';
+$TEXT['FORGOT_DETAILS'] = 'Gl&ouml;mt dina uppgifter?';
+$TEXT['FROM'] = 'Fr&aring;n';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Ditt hela namn';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grupp';
+$TEXT['HEADER'] = 'Huvud';
+$TEXT['HEADING'] = 'Rubrik';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'H&ouml;jd';
+$TEXT['HIDDEN'] = 'G&ouml;md';
+$TEXT['HIDE'] = 'G&ouml;m';
+$TEXT['HIDE_ADVANCED'] = 'G&ouml;m avancerade val';
+$TEXT['HOME'] = 'Hem';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Omstyrning hemsida';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Icon';
+$TEXT['IMAGE'] = 'Bild';
+$TEXT['INLINE'] = 'Aktiverad';
+$TEXT['INSTALL'] = 'Installera';
+$TEXT['INSTALLATION'] = 'Installation';
+$TEXT['INSTALLATION_PATH'] = 'Installation s&ouml;kv&auml;g';
+$TEXT['INSTALLATION_URL'] = 'Installation URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Inledning';
+$TEXT['INTRO_PAGE'] = 'F&ouml;rstasida';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Nyckelord';
+$TEXT['LANGUAGE'] = 'Spr&aring;k';
+$TEXT['LAST_UPDATED_BY'] = 'Senast uppdaterad av';
+$TEXT['LENGTH'] = 'L&auml;ngd';
+$TEXT['LEVEL'] = 'Niv&aring;';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Visa val';
+$TEXT['LOGGED_IN'] = 'Inloggad';
+$TEXT['LOGIN'] = 'Logga In';
+$TEXT['LONG'] = 'Br&ouml;dtext';
+$TEXT['LONG_TEXT'] = 'L&aring;ng text';
+$TEXT['LOOP'] = 'Loop';
+$TEXT['MAIN'] = 'Huvudmenyn';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Behandla';
+$TEXT['MANAGE_GROUPS'] = 'Behandla grupper';
+$TEXT['MANAGE_USERS'] = 'Behandla anv&auml;ndare';
+$TEXT['MATCH'] = 'Matcha';
+$TEXT['MATCHING'] = 'Matching';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max poster per timme';
+$TEXT['MEDIA_DIRECTORY'] = 'Media mapp';
+$TEXT['MENU'] = 'Meny';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Menyns titel';
+$TEXT['MESSAGE'] = 'Meddelande';
+$TEXT['MODIFY'] = '&Auml;ndra';
+$TEXT['MODIFY_CONTENT'] = 'Redigera inneh&aring;ll';
+$TEXT['MODIFY_SETTINGS'] = 'Redigera inst&auml;llningar';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Modultill&aring;telse';
+$TEXT['MORE'] = 'Mer';
+$TEXT['MOVE_DOWN'] = 'Flytta Ner';
+$TEXT['MOVE_UP'] = 'Flytta Upp';
+$TEXT['MULTIPLE_MENUS'] = 'Flera menyer';
+$TEXT['MULTISELECT'] = 'Flerval';
+$TEXT['NAME'] = 'Namn';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Logga in?';
+$TEXT['NEW_PASSWORD'] = 'Nytt l&ouml;senord';
+$TEXT['NEW_WINDOW'] = 'Nytt f&ouml;nster';
+$TEXT['NEXT'] = 'N&auml;sta';
+$TEXT['NEXT_PAGE'] = 'N&auml;sta sida';
+$TEXT['NO'] = 'Nej';
+$TEXT['NONE'] = 'Ingen';
+$TEXT['NONE_FOUND'] = 'Inget hittades';
+$TEXT['NOT_FOUND'] = 'Hittades inte';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Inget resultat';
+$TEXT['OF'] = 'Av';
+$TEXT['ON'] = 'Den';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Val';
+$TEXT['OTHERS'] = 'Andra';
+$TEXT['OUT_OF'] = 'Utav';
+$TEXT['OVERWRITE_EXISTING'] = 'Skriv &ouml;ver nuvarande';
+$TEXT['PAGE'] = 'Sida';
+$TEXT['PAGES_DIRECTORY'] = 'Sidors mapp';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Sidors fil&auml;ndelse';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Sidors spr&aring;k';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Sidniv&aring; gr&auml;ns';
+$TEXT['PAGE_SPACER'] = 'Mellanrum sida';
+$TEXT['PAGE_TITLE'] = 'Sidans titel';
+$TEXT['PAGE_TRASH'] = 'Papperskorg';
+$TEXT['PARENT'] = 'Underliggande till';
+$TEXT['PASSWORD'] = 'L&ouml;senord';
+$TEXT['PATH'] = 'S&ouml;kv&auml;g';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP felrapport niv&aring;';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'V&auml;nligen v&auml;lj';
+$TEXT['POST'] = 'Nyhet';
+$TEXT['POSTS_PER_PAGE'] = 'Inl&auml;gg per sida';
+$TEXT['POST_FOOTER'] = 'Nyhet fot';
+$TEXT['POST_HEADER'] = 'Nyhet huvud';
+$TEXT['PREVIOUS'] = 'F&ouml;reg&aring;ende';
+$TEXT['PREVIOUS_PAGE'] = 'F&ouml;reg&aring;ende sida';
+$TEXT['PRIVATE'] = 'Privat';
+$TEXT['PRIVATE_VIEWERS'] = 'Privata anv&auml;ndare';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Offentligt';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radioknapp flera';
+$TEXT['READ'] = 'L&auml;s';
+$TEXT['READ_MORE'] = 'L&auml;s mer';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Registrerad';
+$TEXT['REGISTERED_VIEWERS'] = 'Registrerade anv&auml;ndare';
+$TEXT['RELOAD'] = 'Ladda Om';
+$TEXT['REMEMBER_ME'] = 'Kom ih&aring;g mig';
+$TEXT['RENAME'] = 'D&ouml;p om';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Obligatoriskt';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = '&Aring;ngra';
+$TEXT['RESIZE'] = 'Storleks&auml;ndra';
+$TEXT['RESIZE_IMAGE_TO'] = 'Storleks&auml;ndra bilden till';
+$TEXT['RESTORE'] = '&Aring;terst&auml;ll';
+$TEXT['RESTORE_DATABASE'] = '&Aring;terst&auml;ll databas';
+$TEXT['RESTORE_MEDIA'] = '&Aring;terst&auml;ll media';
+$TEXT['RESULTS'] = 'Resultat';
+$TEXT['RESULTS_FOOTER'] = 'Resultat fot';
+$TEXT['RESULTS_FOR'] = 'Resultat f&ouml;r';
+$TEXT['RESULTS_HEADER'] = 'Resultat huvud';
+$TEXT['RESULTS_LOOP'] = 'Resultat loop';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Nytt l&ouml;senord igen';
+$TEXT['RETYPE_PASSWORD'] = 'Skriv l&ouml;senordet igen';
+$TEXT['SAME_WINDOW'] = 'Samma f&ouml;nster';
+$TEXT['SAVE'] = 'Spara';
+$TEXT['SEARCH'] = 'S&ouml;k';
+$TEXT['SEARCHING'] = 'S&ouml;ker';
+$TEXT['SECTION'] = 'Sektion';
+$TEXT['SECTION_BLOCKS'] = 'Sektioner block';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Valruta';
+$TEXT['SEND_DETAILS'] = 'Skicka uppgifter';
+$TEXT['SEPARATE'] = 'Separerat';
+$TEXT['SEPERATOR'] = 'Separator';
+$TEXT['SERVER_EMAIL'] = 'Server e-post';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Serveroperativsystem';
+$TEXT['SESSION_IDENTIFIER'] = 'Sessionsidentifierare';
+$TEXT['SETTINGS'] = 'Inst&auml;llningar';
+$TEXT['SHORT'] = 'Ingress';
+$TEXT['SHORT_TEXT'] = 'Kort text';
+$TEXT['SHOW'] = 'Visa';
+$TEXT['SHOW_ADVANCED'] = 'Visa avancerade val';
+$TEXT['SIGNUP'] = 'Registrera';
+$TEXT['SIZE'] = 'Storlek';
+$TEXT['SMART_LOGIN'] = 'Smart inloggning';
+$TEXT['START'] = 'Starta';
+$TEXT['START_PUBLISHING'] = 'Starta publicering';
+$TEXT['SUBJECT'] = '&Auml;mne';
+$TEXT['SUBMISSIONS'] = 'Inskickningar';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Poster som sparas i databasen';
+$TEXT['SUBMISSION_ID'] = 'Inskickning ID';
+$TEXT['SUBMITTED'] = 'Inskickat';
+$TEXT['SUCCESS'] = 'Lyckades';
+$TEXT['SYSTEM_DEFAULT'] = 'Systemets standard';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Systemtill&aring;telse';
+$TEXT['TABLE_PREFIX'] = 'Tabell prefix';
+$TEXT['TARGET'] = 'M&aring;lf&ouml;nster';
+$TEXT['TARGET_FOLDER'] = 'M&aring;lmapp';
+$TEXT['TEMPLATE'] = 'Mall';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Till&aring;telse mallar';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = 'Textruta';
+$TEXT['TEXTFIELD'] = 'Textrad';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Tid';
+$TEXT['TIMEZONE'] = 'Tidzon';
+$TEXT['TIME_FORMAT'] = 'Tidsformat';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Titel';
+$TEXT['TO'] = 'Till';
+$TEXT['TOP_FRAME'] = 'Top frame';
+$TEXT['TRASH_EMPTIED'] = 'Papperskorgen t&ouml;md';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Typ';
+$TEXT['UNDER_CONSTRUCTION'] = 'Under uppbygnad.... Kommer snart';
+$TEXT['UNINSTALL'] = 'Avinstallera';
+$TEXT['UNKNOWN'] = 'Ok&auml;nd';
+$TEXT['UNLIMITED'] = 'Obegr&auml;nsat';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Upp';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Ladda upp filer';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Anv&auml;ndare';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifikation';
+$TEXT['VERSION'] = 'Version';
+$TEXT['VIEW'] = 'Visa';
+$TEXT['VIEW_DELETED_PAGES'] = 'Visa raderade sidor';
+$TEXT['VIEW_DETAILS'] = 'Visa detaljer';
+$TEXT['VISIBILITY'] = 'Synlighetsgrad';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Websida';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Websitens beskrivning';
+$TEXT['WEBSITE_FOOTER'] = 'Websitens fot';
+$TEXT['WEBSITE_HEADER'] = 'Websitens huvud';
+$TEXT['WEBSITE_KEYWORDS'] = 'Websitens nyckelord';
+$TEXT['WEBSITE_TITLE'] = 'Websitens titel';
+$TEXT['WELCOME_BACK'] = 'V&auml;lkommen tillbaka';
+$TEXT['WIDTH'] = 'Bredd';
+$TEXT['WINDOW'] = 'F&ouml;nster';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Skrivr&auml;ttigheter filer';
+$TEXT['WRITE'] = 'Skriv';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG redigerare';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG stil';
+$TEXT['YES'] = 'Ja';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Skapa ny grupp';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Rubrik';
+$HEADING['ADD_PAGE'] = 'Skapa ny sida';
+$HEADING['ADD_USER'] = 'Skapa ny anv&auml;ndare';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administrationsverktyg';
+$HEADING['BROWSE_MEDIA'] = 'Mediabibliotek';
+$HEADING['CREATE_FOLDER'] = 'Skapa ny mapp';
+$HEADING['DEFAULT_SETTINGS'] = 'Standardinst&auml;llningar';
+$HEADING['DELETED_PAGES'] = 'Raderade sidor';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Inst&auml;llningar f&ouml;r Filsystem';
+$HEADING['GENERAL_SETTINGS'] = 'Generella inst&auml;llningar';
+$HEADING['INSTALL_LANGUAGE'] = 'Installera spr&aring;k';
+$HEADING['INSTALL_MODULE'] = 'Installera modul';
+$HEADING['INSTALL_TEMPLATE'] = 'Installera mall';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Spr&aring;kdetaljer';
+$HEADING['MANAGE_SECTIONS'] = 'Redigera sektioner';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = '&Auml;ndra avancerade inst&auml;llningar f&ouml;r sidan';
+$HEADING['MODIFY_DELETE_GROUP'] = '&Auml;ndra/radera grupp';
+$HEADING['MODIFY_DELETE_PAGE'] = '&Auml;ndra/radera sida';
+$HEADING['MODIFY_DELETE_USER'] = '&Auml;ndra/radera anv&auml;ndare';
+$HEADING['MODIFY_GROUP'] = '&Auml;ndra grupp';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = '&Auml;ndra F&ouml;rstasidan';
+$HEADING['MODIFY_PAGE'] = '&Auml;ndra sida';
+$HEADING['MODIFY_PAGE_SETTINGS'] = '&Auml;ndra sidans inst&auml;llningar';
+$HEADING['MODIFY_USER'] = '&Auml;ndra anv&auml;ndare';
+$HEADING['MODULE_DETAILS'] = 'Moduldetaljer';
+$HEADING['MY_EMAIL'] = 'Min e-post';
+$HEADING['MY_PASSWORD'] = 'Mitt l&ouml;senord';
+$HEADING['MY_SETTINGS'] = 'Mina uppgifter';
+$HEADING['SEARCH_SETTINGS'] = 'S&ouml;kinst&auml;llningar';
+$HEADING['SERVER_SETTINGS'] = 'Server Inst&auml;llningar';
+$HEADING['TEMPLATE_DETAILS'] = 'Malldetaljer';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Avinstallera spr&aring;k';
+$HEADING['UNINSTALL_MODULE'] = 'Avinstallera modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Avinstallera mall';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Ladda Upp fil(er)';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Du har inte till&aring;telse att vara h&auml;r';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'L&ouml;senordet kan bara &auml;ndras max en g&aring;ng per timme';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Kunde inte skicka l&ouml;senordet, v&auml;nligen kontakta administratat&ouml;ren';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'E-postadressen som du skrev in kan inte hittas i v&aring;r databas';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Skriv din e-postadress';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Tyv&auml;rr, du har inte till&aring;telse att titta p&aring; denna sida';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Redan installerat';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Kan inte skriva i m&aring;lmappen';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Kan inte avinstallera';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Kan inte avinstallera: filen anv&auml;nds just nu';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Kan inte packa upp filen';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Kan inte ladda upp fil';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Fel vid &ouml;ppnande av fil.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Observera att filen du laddar upp m&aring;ste vara i formatet:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Observera att filen du laddar upp m&aring;ste vara i ett av f&ouml;ljande format:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'G&aring; tillbaka och fyll i alla f&auml;lt';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Installerat';
+$MESSAGE['GENERIC_INVALID'] = 'Filen du laddade upp &auml;r ogilltig';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Inte installerat';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'V&auml;nligen ha t&aring;lamod, det h&auml;r kan ta en stund.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'V&auml;nligen kom tillbaka snart...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Avinstallerat';
+$MESSAGE['GENERIC_UPGRADED'] = 'Uppgradering genomf&ouml;rd';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GROUPS_ADDED'] = 'Gruppen lades till';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Vill du verkligen radera gruppen med alla dess anv&auml;ndare?';
+$MESSAGE['GROUPS_DELETED'] = 'Gruppen raderades';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Gruppen m&aring;ste ha ett namn';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Gruppnamnet finns redan';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Ingen grupp hittades';
+$MESSAGE['GROUPS_SAVED'] = 'Gruppen sparades';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Skriv ditt l&ouml;senord';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'L&ouml;senordet &auml;r f&ouml;r l&aring;ngt';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'L&ouml;senordet &auml;r f&ouml;r kort';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Du skrev ingen fil&auml;ndelse';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Du skrev inget nytt namn';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Kan inte radera mappen';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Kan inte radera filen';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Namn&auml;ndring utf&ouml;rdes INTE';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Vill du verkligen radera f&auml;ljande fil/mapp?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Mappen raderades';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Filen raderades';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Mappen finns inte';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Kan inte inkludera ../ i mappens namn';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Det finns redan en mapp med samma namn';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Mappen skapades';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Kunde inte skapa mapp';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Det finns redan en fil med samma namn';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Filen hittades inte';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Kan inte inkludera ../ i namnet';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Kan inte anv&auml;nda index.php som Namn';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Ingen media hittades i mappen';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Namn&auml;ndring utf&ouml;rdes';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' filen laddades upp';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Kan inte ha ../ i mappens m&aring;l';
+$MESSAGE['MEDIA_UPLOADED'] = ' filerna laddades upp';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Tyv&auml;rr, detta formul&auml;r har skickats f&ouml;r m&aring;nga g&aring;nger inom denna timme. F&ouml;rs&ouml;k igen om ett tag.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Verifieringsnumret (ocks&aring; k&auml;nt som Captcha) som du angav &auml;r felaktigt. Om du har problem med att l&auml;sa ut Captcha, v&auml;nligen s&auml;nd email till: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Du m&aring;ste fylla i f&ouml;ljande f&auml;lt';
+$MESSAGE['PAGES_ADDED'] = 'Sidan lades till';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Sidans huvud lades till';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Skriv en titel p&aring; menyn';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Skriv en titel p&aring; sidan';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Fel vid skapande av fil (otillr&auml;cklig till&aring;telse)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Fel vid radering av fil (otillr&auml;cklig till&aring;telse)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Fel vid omordning av sidorna';
+$MESSAGE['PAGES_DELETED'] = 'Sidan raderades';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Vill du verkligen radera sidan med alla dess undersidor?';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Du har inte til&aring;telse att redigera denna sida';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Klicka h&auml;r f&ouml;r att redigera F&ouml;rstasidan';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Kan inte skriva till filen /pages/intro.php (otillr&auml;klig till&aring;telse)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'F&ouml;rstasidan sparades';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Senast redigerad av';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Sidan hittades inte';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Fel n&auml;r sidan sparades';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'En sida med samma eller liknande titel finns redan';
+$MESSAGE['PAGES_REORDERED'] = 'Sidorna omordnades';
+$MESSAGE['PAGES_RESTORED'] = 'Sidan &aring;terskapades';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Tillbaka till Sidor';
+$MESSAGE['PAGES_SAVED'] = 'Sidan sparades';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Sidans inst&auml;llningar sparades';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Sektionens inst&auml;llningar sparades';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Det (nuvarande) l&ouml;senordet du skrev &auml;r inte r&auml;tt';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Uppgifterna sparades';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-postadressen uppdaterades';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'L&ouml;senordet &auml;ndrades';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Observera: Om du klickar p&aring; denna knapp s&aring; f&ouml;rsvinner all ny information som inte sparats';
+$MESSAGE['SETTINGS_SAVED'] = 'Inst&auml;llningarna sparades';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Kunde inte &ouml;ppna konfigurationsfilen';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Kan inte skriva till konfigurationsfilen';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Observera: detta rekomenderas endast f&ouml;r tillf&auml;llig pr&ouml;vning av sidorna';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Du m&aring;ste skriva en e-postadress';
+$MESSAGE['START_CURRENT_USER'] = 'Du &auml;r inloggad som:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'VARNING, installationsmappen finns fortfarande kvar!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'V&auml;lkommen till administrationen av WebsiteBaker';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Observera: f&ouml;r att &auml;ndra Mall, m&aring;ste du g&aring; till Sektionen Inst&auml;llningar';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Anv&auml;ndaren lades till';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Observera: Dessa f&auml;lt ska du bara skriva i om du vill &Auml;NDRA L&ouml;senordet';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Vill du verkligen radera anv&auml;ndaren?';
+$MESSAGE['USERS_DELETED'] = 'Anv&auml;ndaren Raderades';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'E-post adressen du skrev finns redan i v&aring;r Databas';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'E-post adressen &auml;r felaktig';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Ingen grupp valdes';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'L&ouml;senorden du skrev var inte lika';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'L&ouml;senordet &auml;r for kort';
+$MESSAGE['USERS_SAVED'] = 'Anv&auml;ndaren sparades';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Behandla anv&auml;ndargrupper och deras system&aring;tkomst...';
+$OVERVIEW['HELP'] = 'Hitta svar p&aring; dina fr&aring;gor (p&aring; engelska)...';
+$OVERVIEW['LANGUAGES'] = 'Behandla WebsiteBaker spr&aring;k...';
+$OVERVIEW['MEDIA'] = 'Redigera inneh&aring;ll i mediabiblioteket...';
+$OVERVIEW['MODULES'] = 'Behandla WebsiteBaker moduler...';
+$OVERVIEW['PAGES'] = 'Redigera dina sidor...';
+$OVERVIEW['PREFERENCES'] = '&Auml;ndra inst&auml;llningar som e-postadress, l&ouml;senord, etc... ';
+$OVERVIEW['SETTINGS'] = '&Auml;ndra inst&auml;llningar f&ouml;r WebsiteBaker...';
+$OVERVIEW['START'] = 'Administration &ouml;versyn';
+$OVERVIEW['TEMPLATES'] = '&Auml;ndra utseendet med mallar...';
+$OVERVIEW['USERS'] = 'Behandla anv&auml;ndare som kan logga in till WebsiteBaker...';
+$OVERVIEW['VIEW'] = 'Titta p&aring; dina sidor i ett nytt f&ouml;nster...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/SE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/SK.php
===================================================================
--- trunk/languages/SK.php	(nonexistent)
+++ trunk/languages/SK.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'SK';
+$language_name = 'Slovenčina'; // Slovensky
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Michal Kurtulik - YONIX.SK';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Pr&iacute;stup';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Roz&#353;&iacute;renie';
+$MENU['ADMINTOOLS'] = 'N&aacute;stroje';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Z&iacute;ska&#357; zabudnut&eacute; prihlasovacie &uacute;daje';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Skupiny';
+$MENU['HELP'] = 'N&aacute;poveda';
+$MENU['LANGUAGES'] = 'Jazyky';
+$MENU['LOGIN'] = 'Prihl&aacute;senie';
+$MENU['LOGOUT'] = 'Odhl&aacute;si&#357;';
+$MENU['MEDIA'] = 'M&eacute;dia';
+$MENU['MODULES'] = 'Moduly';
+$MENU['PAGES'] = 'Str&aacute;nky';
+$MENU['PREFERENCES'] = 'Mo&#382;nosti';
+$MENU['SETTINGS'] = 'Nastavenia';
+$MENU['START'] = '&Uacute;vod';
+$MENU['TEMPLATES'] = '&#352;ablony';
+$MENU['USERS'] = 'U&#382;&iacute;vatelia';
+$MENU['VIEW'] = 'Zobrazi&#357;';
+$TEXT['ACCOUNT_SIGNUP'] = 'Registr&aacute;cia &uacute;&#269;tu';
+$TEXT['ACTIONS'] = 'Akcia';
+$TEXT['ACTIVE'] = 'Akt&iacute;vny';
+$TEXT['ADD'] = 'Prida&#357;';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'Prida&#357; sekciu';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Administrat&iacute;va';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administrat&iacute;vne n&aacute;stroje';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Spr&aacute;vcovia';
+$TEXT['ADVANCED'] = 'Pokro&#269;il&yacute;';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Opr&aacute;vnenie k prezeraniu';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = 'Povolit viacn&aacute;sobn&eacute; v&yacute;bery';
+$TEXT['ALL_WORDS'] = 'V&#353;etky slov&aacute;';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Anonymn&eacute;';
+$TEXT['ANY_WORDS'] = '&#268;oko&#318;vek';
+$TEXT['APP_NAME'] = 'N&aacute;zov aplik&aacute;cie';
+$TEXT['ARE_YOU_SURE'] = 'Ste si ist&iacute;?';
+$TEXT['AUTHOR'] = 'Autor';
+$TEXT['BACK'] = 'Sp&auml;&#357;';
+$TEXT['BACKUP'] = 'Z&aacute;lohovanie';
+$TEXT['BACKUP_ALL_TABLES'] = 'Z&aacute;lohova&#357; v&#353;etky tabu&#318;ky v datab&aacute;ze';
+$TEXT['BACKUP_DATABASE'] = 'Z&aacute;lohova&#357; datab&aacute;zu';
+$TEXT['BACKUP_MEDIA'] = 'Zaz&aacute;lohova&#357;  m&eacute;dia';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Z&aacute;lohova&#357; iba tabu&#318;ky CMS Syst&eacute;mu';
+$TEXT['BASIC'] = 'Z&aacute;kladn&yacute;';
+$TEXT['BLOCK'] = 'Blok';
+$TEXT['CALENDAR'] = 'Kalend&aacute;r';
+$TEXT['CANCEL'] = 'Zru&#353;i&#357;';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Kontrola obr. k&oacute;dom';
+$TEXT['CAP_EDIT_CSS'] = 'Uprav CSS';
+$TEXT['CHANGE'] = 'Zmeni&#357;';
+$TEXT['CHANGES'] = 'Zmeny';
+$TEXT['CHANGE_SETTINGS'] = 'Zmeni&#357; nastavenie';
+$TEXT['CHARSET'] = 'K&oacute;dov&aacute; str&aacute;nka';
+$TEXT['CHECKBOX_GROUP'] = 'Skupina za&#353;krt&aacute;vac&iacute;ch pol&iacute;';
+$TEXT['CLOSE'] = 'Zavrie&#357;';
+$TEXT['CODE'] = 'K&oacute;d jazyka';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Zbali&#357;';
+$TEXT['COMMENT'] = 'Koment&aacute;r';
+$TEXT['COMMENTING'] = 'Koment&aacute;re';
+$TEXT['COMMENTS'] = 'Koment&aacute;re';
+$TEXT['CREATE_FOLDER'] = 'Vytvorit adres&aacute;r';
+$TEXT['CURRENT'] = 'S&uacute;&#269;asn&yacute;';
+$TEXT['CURRENT_FOLDER'] = 'S&uacute;&#269;asn&yacute; adres&aacute;r';
+$TEXT['CURRENT_PAGE'] = 'Str&aacute;nka';
+$TEXT['CURRENT_PASSWORD'] = 'S&uacute;&#269;asn&eacute; heslo';
+$TEXT['CUSTOM'] = 'Vlastn&eacute; nastavenie';
+$TEXT['DATABASE'] = 'Datab&aacute;za';
+$TEXT['DATE'] = 'D&aacute;tum';
+$TEXT['DATE_FORMAT'] = 'Form&aacute;t d&aacute;tumu';
+$TEXT['DEFAULT'] = 'V&yacute;chodz&iacute;';
+$TEXT['DEFAULT_CHARSET'] = 'V&yacute;chodzia k&oacute;dov&aacute; str&aacute;nka';
+$TEXT['DEFAULT_TEXT'] = 'Prednastaven&yacute; text';
+$TEXT['DELETE'] = 'Vymaza&#357;';
+$TEXT['DELETED'] = 'Vymazan&eacute;';
+$TEXT['DELETE_DATE'] = 'Zmaza&#357; d&aacute;tum';
+$TEXT['DELETE_ZIP'] = 'Zmaza&#357; zip s&uacute;bor po rozbalen&iacute;';
+$TEXT['DESCRIPTION'] = 'Popis';
+$TEXT['DESIGNED_FOR'] = 'Vyvinut&eacute; pre';
+$TEXT['DIRECTORIES'] = 'Adres&aacute;re';
+$TEXT['DIRECTORY_MODE'] = 'M&oacute;d adres&aacute;rov';
+$TEXT['DISABLED'] = 'Vypnut&eacute;';
+$TEXT['DISPLAY_NAME'] = 'Meno';
+$TEXT['EMAIL'] = 'E-mail';
+$TEXT['EMAIL_ADDRESS'] = 'E-mailov&aacute; adresa';
+$TEXT['EMPTY_TRASH'] = 'Vypr&aacute;zdni&#357; k&ocirc;&#353;';
+$TEXT['ENABLED'] = 'Zapnut&eacute;';
+$TEXT['END'] = 'Koniec';
+$TEXT['ERROR'] = 'Chyba';
+$TEXT['EXACT_MATCH'] = 'Presn&aacute; zhoda';
+$TEXT['EXECUTE'] = 'Spustenie';
+$TEXT['EXPAND'] = 'Rozbali&#357;';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Pole';
+$TEXT['FILE'] = 's&uacute;bor';
+$TEXT['FILES'] = 's&uacute;bory';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Pr&aacute;va s&uacute;borov&eacute;ho syst&eacute;mu';
+$TEXT['FILE_MODE'] = 'M&oacute;d s&uacute;borov';
+$TEXT['FINISH_PUBLISHING'] = 'Koniec publik&aacute;cie';
+$TEXT['FOLDER'] = 'adres&aacute;r';
+$TEXT['FOLDERS'] = 'adres&aacute;re';
+$TEXT['FOOTER'] = 'Z&aacute;p&auml;tie';
+$TEXT['FORGOTTEN_DETAILS'] = 'Zabudli ste svoje prihlasovanie &uacute;daje ?';
+$TEXT['FORGOT_DETAILS'] = 'Zabudnut&eacute; heslo?';
+$TEXT['FROM'] = 'od';
+$TEXT['FRONTEND'] = 'Front-end';
+$TEXT['FULL_NAME'] = 'Cel&eacute; meno';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Skupina';
+$TEXT['HEADER'] = 'Z&aacute;hlavie';
+$TEXT['HEADING'] = 'Z&aacute;hlavie';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'V&yacute;&#353;ka';
+$TEXT['HIDDEN'] = 'Skryt&aacute;';
+$TEXT['HIDE'] = 'Skry&#357;';
+$TEXT['HIDE_ADVANCED'] = 'Skry&#357; pokro&#269;il&eacute; vo&#318;by';
+$TEXT['HOME'] = 'Domov';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Presmerovanie hlavnej str&aacute;nky';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Hostite&#318;';
+$TEXT['ICON'] = 'Ikona';
+$TEXT['IMAGE'] = 'Obr&aacute;zok';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'In&#353;talovat';
+$TEXT['INSTALLATION'] = 'In&#353;tal&aacute;cia';
+$TEXT['INSTALLATION_PATH'] = 'Cesta in&#353;tal&aacute;cie';
+$TEXT['INSTALLATION_URL'] = 'URL in&#353;tal&aacute;cia';
+$TEXT['INSTALLED'] = 'Nain&#353;talovan&eacute;';
+$TEXT['INTRO'] = 'Intro';
+$TEXT['INTRO_PAGE'] = '&Uacute;vodn&aacute; (intro) str&aacute;nka';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'K&#318;&uacute;&#269;ov&eacute; slov&aacute;';
+$TEXT['LANGUAGE'] = 'Jazyk';
+$TEXT['LAST_UPDATED_BY'] = 'Posledn&aacute;  zmena:';
+$TEXT['LENGTH'] = 'D&#314;&#382;ka';
+$TEXT['LEVEL'] = '&Uacute;rove&#328;';
+$TEXT['LINK'] = 'Odkaz';
+$TEXT['LINUX_UNIX_BASED'] = 'Zalo&#382;en&yacute; na Linux/Unix';
+$TEXT['LIST_OPTIONS'] = 'Zoznam volieb';
+$TEXT['LOGGED_IN'] = 'prihl&aacute;senie';
+$TEXT['LOGIN'] = 'Prihl&aacute;si&#357;';
+$TEXT['LONG'] = 'Dlh&yacute; popis';
+$TEXT['LONG_TEXT'] = 'Dlh&yacute; text';
+$TEXT['LOOP'] = 'Telo';
+$TEXT['MAIN'] = 'Hlavn&yacute;';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Spravova&#357;';
+$TEXT['MANAGE_GROUPS'] = 'Spravova&#357; skupiny';
+$TEXT['MANAGE_USERS'] = 'Spravova&#357; u&#382;ivate&#318;ov';
+$TEXT['MATCH'] = 'Zhoda';
+$TEXT['MATCHING'] = 'Zodpovedaj&uacute;ci';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Max. po&#269;et odoslan&yacute;ch za hodinu';
+$TEXT['MEDIA_DIRECTORY'] = 'Adres&aacute;r m&eacute;di&iacute;';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Titulok menu';
+$TEXT['MESSAGE'] = 'Spr&aacute;va';
+$TEXT['MODIFY'] = 'Zmeni&#357;';
+$TEXT['MODIFY_CONTENT'] = 'Zmeni&#357; obsah';
+$TEXT['MODIFY_SETTINGS'] = 'Zmeni&#357; nastavenie';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Opr&aacute;vnenie k modulom';
+$TEXT['MORE'] = 'Viacej';
+$TEXT['MOVE_DOWN'] = 'Posun&uacute;&#357; dole';
+$TEXT['MOVE_UP'] = 'Posun&uacute;&#357; nahor';
+$TEXT['MULTIPLE_MENUS'] = 'Viacn&aacute;sobn&eacute; menu';
+$TEXT['MULTISELECT'] = 'Viacn&aacute;sobn&eacute; v&yacute;berov&eacute; pole';
+$TEXT['NAME'] = 'N&aacute;zov';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Chcete sa prihl&aacute;si&#357;?';
+$TEXT['NEW_PASSWORD'] = 'Nov&eacute; heslo';
+$TEXT['NEW_WINDOW'] = 'nov&eacute;ho okna';
+$TEXT['NEXT'] = 'Nasleduj&uacute;ci';
+$TEXT['NEXT_PAGE'] = 'Nasleduj&uacute;ca str&aacute;nka';
+$TEXT['NO'] = 'Nie';
+$TEXT['NONE'] = 'Nie je';
+$TEXT['NONE_FOUND'] = 'Ni&#269; sa nena&#353;lo';
+$TEXT['NOT_FOUND'] = 'Nen&aacute;jdene';
+$TEXT['NOT_INSTALLED'] = 'Nenain&#353;talovan&eacute;';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = '&#381;iadny v&yacute;sledok';
+$TEXT['OF'] = 'Z';
+$TEXT['ON'] = 'Na';
+$TEXT['OPEN'] = 'Otvori&#357;';
+$TEXT['OPTION'] = 'Vo&#318;by';
+$TEXT['OTHERS'] = 'Ostatn&yacute;';
+$TEXT['OUT_OF'] = 'Z';
+$TEXT['OVERWRITE_EXISTING'] = 'Prep&iacute;sa&#357; existuj&uacute;ci';
+$TEXT['PAGE'] = 'Str&aacute;nka';
+$TEXT['PAGES_DIRECTORY'] = 'Adres&aacute;r str&aacute;nok';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Pr&iacute;pona str&aacute;nok';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Jazykov&eacute; verzie str&aacute;nok';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Limit &uacute;rovne str&aacute;nok';
+$TEXT['PAGE_SPACER'] = 'Znak medzery';
+$TEXT['PAGE_TITLE'] = 'Titulok str&aacute;nky';
+$TEXT['PAGE_TRASH'] = 'K&ocirc;&#353; str&aacute;nok';
+$TEXT['PARENT'] = 'Nadraden&yacute;';
+$TEXT['PASSWORD'] = 'Heslo';
+$TEXT['PATH'] = 'Cesta';
+$TEXT['PHP_ERROR_LEVEL'] = '&Uacute;rove&#328; hl&aacute;senia ch&yacute;b PHP';
+$TEXT['PLEASE_LOGIN'] = 'Pros&iacute;m prihl&aacute;ste sa';
+$TEXT['PLEASE_SELECT'] = 'Vyberte pros&iacute;m';
+$TEXT['POST'] = 'pr&iacute;spevok';
+$TEXT['POSTS_PER_PAGE'] = 'Pr&iacute;spevky na str&aacute;nku';
+$TEXT['POST_FOOTER'] = 'Z&aacute;p&auml;tie pr&iacute;spevku';
+$TEXT['POST_HEADER'] = 'Z&aacute;hlavie pr&iacute;spevku';
+$TEXT['PREVIOUS'] = 'Predch&aacute;dzaj&uacute;ci';
+$TEXT['PREVIOUS_PAGE'] = 'Predch&aacute;dzaj&uacute;ca str&aacute;nka';
+$TEXT['PRIVATE'] = 'S&uacute;kromn&aacute;';
+$TEXT['PRIVATE_VIEWERS'] = 'Opr&aacute;vnenie k prezeraniu';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Verejn&aacute;';
+$TEXT['PUBL_END_DATE'] = 'Kone&#269;n&yacute; d&aacute;tum';
+$TEXT['PUBL_START_DATE'] = 'Po&#269;iato&#269;n&yacute; d&aacute;tum';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Skupina radio-pol&iacute;';
+$TEXT['READ'] = '&#268;&iacute;tanie';
+$TEXT['READ_MORE'] = '&#269;&iacute;taj viac...';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Pre registrovan&yacute;ch';
+$TEXT['REGISTERED_VIEWERS'] = 'Opr&aacute;vnenie k prezeraniu';
+$TEXT['RELOAD'] = 'Obnovi&#357;';
+$TEXT['REMEMBER_ME'] = 'Zapam&auml;ta&#357; &uacute;daje';
+$TEXT['RENAME'] = 'Premenova&#357;.';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Povinn&yacute;';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'Vy&#269;isti&#357;';
+$TEXT['RESIZE'] = 'Zmena ve&#318;kosti';
+$TEXT['RESIZE_IMAGE_TO'] = 'Zmeni&#357; ve&#318;kos&#357; obr&aacute;zku na';
+$TEXT['RESTORE'] = 'Obnova zo z&aacute;lohy';
+$TEXT['RESTORE_DATABASE'] = 'Obnovi&#357; datab&aacute;zu zo z&aacute;lohy';
+$TEXT['RESTORE_MEDIA'] = 'Obnovi&#357; m&eacute;dia zo z&aacute;lohy';
+$TEXT['RESULTS'] = 'V&yacute;sledky';
+$TEXT['RESULTS_FOOTER'] = 'Z&aacute;p&auml;tie v&yacute;sledkov';
+$TEXT['RESULTS_FOR'] = 'V&yacute;sledky pre';
+$TEXT['RESULTS_HEADER'] = 'Z&aacute;hlavie v&yacute;sledkov';
+$TEXT['RESULTS_LOOP'] = 'Polo&#382;ka v&yacute;sledkov';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Znovu nov&eacute; heslo';
+$TEXT['RETYPE_PASSWORD'] = 'Znovu heslo';
+$TEXT['SAME_WINDOW'] = 'p&ocirc;vodn&eacute;ho okna';
+$TEXT['SAVE'] = 'Ulo&#382;i&#357;';
+$TEXT['SEARCH'] = 'Vyh&#318;ad&aacute;vanie';
+$TEXT['SEARCHING'] = 'Vyh&#318;ad&aacute;vanie';
+$TEXT['SECTION'] = 'Sekcia';
+$TEXT['SECTION_BLOCKS'] = 'Bloky sekci&iacute;';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'V&yacute;berov&eacute; pole';
+$TEXT['SEND_DETAILS'] = 'Zasla&#357; prihlasovanie &uacute;daje';
+$TEXT['SEPARATE'] = 'Oddelene';
+$TEXT['SEPERATOR'] = 'Odde&#318;ova&#269;';
+$TEXT['SERVER_EMAIL'] = 'Syt&eacute;mov&yacute; e-mail';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Opera&#269;n&yacute; syst&eacute;m serveru';
+$TEXT['SESSION_IDENTIFIER'] = 'Identifik&aacute;tor session';
+$TEXT['SETTINGS'] = 'Nastavenie';
+$TEXT['SHORT'] = 'Kr&aacute;tky popis';
+$TEXT['SHORT_TEXT'] = 'Kr&aacute;tk&yacute; text';
+$TEXT['SHOW'] = 'Zobrazi&#357;';
+$TEXT['SHOW_ADVANCED'] = 'Zobrazi&#357; pokro&#269;il&eacute; vo&#318;by';
+$TEXT['SIGNUP'] = 'Registr&aacute;cia';
+$TEXT['SIZE'] = 'Ve&#318;kos&#357;';
+$TEXT['SMART_LOGIN'] = 'M&uacute;dre prihl&aacute;senie';
+$TEXT['START'] = '&#352;tart';
+$TEXT['START_PUBLISHING'] = 'Za&#269;iatok publik&aacute;cie';
+$TEXT['SUBJECT'] = 'Predmet';
+$TEXT['SUBMISSIONS'] = 'Odoslan&eacute; formul&aacute;re';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Odoslan&eacute; formul&aacute;re';
+$TEXT['SUBMISSION_ID'] = 'ID formul&aacute;re';
+$TEXT['SUBMITTED'] = 'Odoslan&eacute;';
+$TEXT['SUCCESS'] = '&Uacute;spe&#353;ne preveden&eacute;';
+$TEXT['SYSTEM_DEFAULT'] = 'Implicitn&eacute; v syst&eacute;me';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Syst&eacute;mov&eacute; opr&aacute;vnenie';
+$TEXT['TABLE_PREFIX'] = 'Prefix tabuliek';
+$TEXT['TARGET'] = 'Smeruje do';
+$TEXT['TARGET_FOLDER'] = 'Cie&#318;ov&yacute; adres&aacute;r';
+$TEXT['TEMPLATE'] = '&#352;ablona';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Pr&aacute;va k &#353;ablone';
+$TEXT['TEXT'] = 'Text';
+$TEXT['TEXTAREA'] = 'Vstupn&eacute; pole';
+$TEXT['TEXTFIELD'] = 'Vstupn&yacute; riadok';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = '&#268;as';
+$TEXT['TIMEZONE'] = '&#268;asov&eacute; p&aacute;smo';
+$TEXT['TIME_FORMAT'] = 'Form&aacute;t &#269;asu';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'N&aacute;zov';
+$TEXT['TO'] = 'na';
+$TEXT['TOP_FRAME'] = 'vrchn&eacute;ho r&aacute;mu';
+$TEXT['TRASH_EMPTIED'] = 'K&ocirc;&#353; vypr&aacute;zdnen&yacute;';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Typ';
+$TEXT['UNDER_CONSTRUCTION'] = 'Vo v&yacute;stavbe';
+$TEXT['UNINSTALL'] = 'Odin&#353;talovat';
+$TEXT['UNKNOWN'] = 'Nezn&aacute;m&yacute;';
+$TEXT['UNLIMITED'] = 'Neobmedzen&yacute;';
+$TEXT['UNZIP_FILE'] = 'Nahraj a rozba&#318; zip s&uacute;bor';
+$TEXT['UP'] = 'Nahor';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Nahra&#357; s&uacute;bor(y)';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'U&#382;&iacute;vate&#318;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verifik&aacute;cia';
+$TEXT['VERSION'] = 'Verzia';
+$TEXT['VIEW'] = 'Zobrazi&#357;';
+$TEXT['VIEW_DELETED_PAGES'] = 'Zobrazi&#357; vymazan&eacute; str&aacute;nky';
+$TEXT['VIEW_DETAILS'] = 'Zobrazi&#357;';
+$TEXT['VISIBILITY'] = 'Vidite&#318;nos&#357;';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Prednastaven&yacute; E-Mail odosielatela';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Prednastaven&eacute; meno odosielatela';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default FROM address and SENDER name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Sp&ocirc;sob odoslania e-mailu';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title=Simple mail transfer protocol>SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP skript';
+$TEXT['WBMAILER_SMTP'] = 'SMTP server';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Overenie';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP server';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP heslo';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'WWW';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Popis webu';
+$TEXT['WEBSITE_FOOTER'] = 'Z&aacute;p&auml;tie webu';
+$TEXT['WEBSITE_HEADER'] = 'Z&aacute;hlavie webu';
+$TEXT['WEBSITE_KEYWORDS'] = 'K&#318;&uacute;&#269;ov&eacute; slov&aacute;';
+$TEXT['WEBSITE_TITLE'] = 'N&aacute;zov webu';
+$TEXT['WELCOME_BACK'] = 'Vitajte';
+$TEXT['WIDTH'] = '&#352;&iacute;rka';
+$TEXT['WINDOW'] = 'Okno';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Pr&aacute;va z&aacute;pisu &quot;pre cel&yacute; svet&quot;';
+$TEXT['WRITE'] = 'Z&aacute;pis';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG styl';
+$TEXT['YES'] = 'Ano';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Nie s&uacute; splnen&eacute; po&#382;iadavky pre roz&#353;&iacute;renie';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Prida&#357; skupinu';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Prida&#357; z&aacute;hlavie';
+$HEADING['ADD_PAGE'] = 'Prida&#357; str&aacute;nku';
+$HEADING['ADD_USER'] = 'Prida&#357; u&#382;&iacute;vate&#318;ov';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administra&#269;n&eacute; n&aacute;stroje';
+$HEADING['BROWSE_MEDIA'] = 'Prehliada&#269; m&eacute;di&iacute;';
+$HEADING['CREATE_FOLDER'] = 'Vytvori&#357; adres&aacute;r';
+$HEADING['DEFAULT_SETTINGS'] = 'Implicitn&eacute; nastavenie';
+$HEADING['DELETED_PAGES'] = 'Vymazan&eacute; str&aacute;nky';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Nastavenie syst&eacute;mu s&uacute;borov';
+$HEADING['GENERAL_SETTINGS'] = 'Obecn&eacute; nastavenie';
+$HEADING['INSTALL_LANGUAGE'] = 'Nain&#353;talovat jazyk';
+$HEADING['INSTALL_MODULE'] = 'Nain&#353;talovat modul';
+$HEADING['INSTALL_TEMPLATE'] = 'Nain&#353;talovat &#353;ablonu';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Spustite  in&#353;tal&aacute;ciu modulu ru&#269;ne';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Detaily jazyka';
+$HEADING['MANAGE_SECTIONS'] = 'Spravova&#357; sekcie';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Zmeni&#357; pokro&#269;il&eacute; nastavenie str&aacute;nky';
+$HEADING['MODIFY_DELETE_GROUP'] = 'Zmeni&#357;/Vymaza&#357; skupinu';
+$HEADING['MODIFY_DELETE_PAGE'] = 'Zmenit/Vymaza&#357; str&aacute;nku';
+$HEADING['MODIFY_DELETE_USER'] = 'Zmeni&#357;/Vymaza&#357; u&#382;&iacute;vatelov';
+$HEADING['MODIFY_GROUP'] = 'Zmeni&#357; skupinu';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Zmeni&#357; &uacute;vodn&uacute; (intro) str&aacute;nku';
+$HEADING['MODIFY_PAGE'] = 'Upravi&#357; str&aacute;nku';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Zmeni&#357; nastavenie str&aacute;nky';
+$HEADING['MODIFY_USER'] = 'Zmeni&#357; u&#382;&iacute;vatelov';
+$HEADING['MODULE_DETAILS'] = 'Detaily modulu';
+$HEADING['MY_EMAIL'] = 'M&ocirc;j e-mail';
+$HEADING['MY_PASSWORD'] = 'Moje heslo';
+$HEADING['MY_SETTINGS'] = 'Moje nastavenie';
+$HEADING['SEARCH_SETTINGS'] = 'Nastavenie vyh&#318;ad&aacute;vania';
+$HEADING['SERVER_SETTINGS'] = 'Nastavenie serveru';
+$HEADING['TEMPLATE_DETAILS'] = 'Detaily &#353;ablony';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Odin&#353;talovat jazyk';
+$HEADING['UNINSTALL_MODULE'] = 'Odin&#353;talovat modul';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Odi&#353;talovat &#353;ablonu';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Nahra&#357; s&uacute;bor(y)';
+$HEADING['WBMAILER_SETTINGS'] = 'Nastavenia E-Mailu';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Nedostato&#269;n&eacute; opr&aacute;vnenie';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Heslo nem&ocirc;&#382;e by&#357; prenastaven&eacute; viackr&aacute;t  behom jednej hodiny';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Nejde odosla&#357;  heslo e-mailom, kontaktujte pros&iacute;m spr&aacute;vcu syst&eacute;mu';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Zadan&aacute; e-mailov&aacute; adresa alebola n&aacute;jden&aacute;';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'Zadajte svoju e-mailovou adresu:';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = 'Nem&aacute;te opr&aacute;vnenie prezera&#357; t&uacute;to str&aacute;nku';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'U&#382; nain&#353;talovan&eacute;';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Ned&aacute; sa zapisovat do cielov&eacute;ho adres&aacute;ra';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Ned&aacute; sa odin&#353;talova&#357;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Ned&aacute; sa odin&#353;talova&#357;: s&uacute;bor je pr&aacute;ve pou&#382;&iacute;van&yacute;';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> ned&aacute; sa odin&#353;talova&#357;, preto&#382;e sa pou&#382;&iacute;va na {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 't&aacute;to str&aacute;nka; tieto str&aacute;nky';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Nem&ocirc;&#382;e&#357;e odin&#353;talova&#357; &#353;abl&oacute;nu <b>{{name}}</b>, preto&#382;e je nastaven&aacute; ako predvolen&aacute; &#353;abl&oacute;na!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Ned&aacute; sa rozbali&#357; (rozzipova&#357;) s&uacute;bor';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Ned&aacute; sa nahra&#357; s&uacute;bor';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Do&#353;lo k chybe pri otvaran&iacute; s&uacute;boru.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Nahr&aacute;van&eacute; s&uacute;bory musia by&#357; n&aacute;sleduj&uacute;ceho form&aacute;tu:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Nahr&aacute;van&yacute; soubor mus&iacute; ma&#357; jeden z n&aacute;sleduj&uacute;c&iacute;ch form&aacute;tov:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'Pros&iacute;m vra&#357;te se sp&auml;&#357; a vypl&#328;te v&#353;etky polia';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'In&#353;tal&aacute;cia prebehla &uacute;spe&#353;ne';
+$MESSAGE['GENERIC_INVALID'] = 'Nahr&aacute;van&yacute; s&uacute;bor je neplatn&yacute;';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Nenain&#353;talovan&eacute;';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = '&#268;ekejte pros&iacute;m, operacia m&ocirc;&#382;e chv&iacute;&#318;u trva&#357;.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'Pros&iacute;m, nav&#353;t&iacute;vte n&aacute;s nesk&ocirc;r...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Odin&#353;tal&aacute;cia prebehla &uacute;spe&#353;ne';
+$MESSAGE['GENERIC_UPGRADED'] = 'Aktualiz&aacute;cia prebehla &uacute;spe&#353;ne';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Str&aacute;nky sa moment&aacute;lne pripravuj&uacute;';
+$MESSAGE['GROUPS_ADDED'] = 'Skupina bola &uacute;spe&#353;ne pridan&aacute;';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Ste si isti, &#382;e chcete zmaza&#357; t&uacute;to skupimu (a v&#353;etk&yacute;ch jej u&#382;ivatelov)?';
+$MESSAGE['GROUPS_DELETED'] = 'Skupina bola &uacute;spe&#353;ne zmazan&aacute;';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'N&aacute;zov skupiny je pr&aacute;zdny';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Tato skupina u&#382; existuje';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Nen&aacute;jden&aacute; &#382;iadn&aacute; skupina';
+$MESSAGE['GROUPS_SAVED'] = 'Skupina bola &uacute;spe&#353;ne ulo&#382;en&aacute;';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'Zadejte svoje heslo';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = 'Zadan&eacute; heslo je pr&iacute;li&#353; dlh&eacute;';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = 'Zadan&eacute; heslo je pr&iacute;li&#353; kr&aacute;tke';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Nezadali ste pr&iacute;ponu s&uacute;boru';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Nezadali ste nov&yacute; n&aacute;zov';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Ned&aacute; sa zmaza&#357; vybran&yacute; adres&aacute;r';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Ned&aacute; sa zmaza&#357; vybran&yacute; soubor';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Premenovanie sa nepodarilo';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Ste si ist&iacute;, &#382;e chcete zmaza&#357; n&aacute;sleduj&uacute;ce s&uacute;bory alebo adres&aacute;re?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Adres&aacute;r bol &uacute;spe&#353;ne zmazan&yacute;';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'S&uacute;bor bol &uacute;spe&#353;ne zmazan&yacute;';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Adres&aacute;r neexistuje';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Nejde pou&#382;i&#357; ../ v n&aacute;zve adres&aacute;ra';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Adres&aacute;r z rovnak&yacute;m n&aacute;zvem u&#382; existuje';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Adres&aacute;r bol &uacute;spe&#353;ne vytvoren&yacute;';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Ned&aacute; sa vytvori&#357; adres&aacute;r';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'S&uacute;bor z rovnak&yacute;m n&aacute;zvom u&#382; existuje';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'S&uacute;bor nen&aacute;jden&yacute;';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Nejde pou&#382;i&#357; ../ v n&aacute;zvu';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'Nejde pou&#382;i&#357; index.php ako n&aacute;zov';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'Nen&aacute;jden&yacute; &#382;iadn&yacute; s&uacute;bor';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Premenovanie prebehlo &uacute;spe&#353;ne';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' s&uacute;bor bol &uacute;spe&#353;ne nahran&yacute;';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Nejde pou&#382;i&#357; ../ v cielovom adres&aacute;ry';
+$MESSAGE['MEDIA_UPLOADED'] = ' s&uacute;bory boly &uacute;spe&#353;ne nahr&aacute;n&eacute;';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Ospravedl&#328;ujeme sa, ale tento formul&aacute;r dosiahol limitu povolen&yacute;ch odeslan&iacute; pre t&uacute;to hodinu. Pros&iacute;m sk&uacute;ste to znovu v dal&#353;iej hodine..';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Kontroln&yacute; k&oacute;d (zn&aacute;m&yacute; ako Captcha) nezodpoved&aacute;. Pokia&#318; m&aacute;te probl&eacute;my s pre&#269;&iacute;tan&iacute;m tohoto k&oacute;du, kontaktujte <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'Mus&iacute;te vyplni&#357; n&aacute;sleduj&uacute;ce pole';
+$MESSAGE['PAGES_ADDED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne pridan&aacute;';
+$MESSAGE['PAGES_ADDED_HEADING'] = 'Z&aacute;hlavie str&aacute;nky bolo &uacute;spe&#353;ne pridan&eacute;';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'Zadajte n&aacute;zov v menu';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'Zadajte n&aacute;zov str&aacute;nky';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Do&#353;lo k chybe pri vytv&aacute;ran&iacute; pr&iacute;stupov&eacute;ho s&uacute;boru v adres&aacute;ri str&aacute;nok (nedostato&#269;n&eacute; opr&aacute;vnenie)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Do&#353;lo k chybe pri maz&aacute;n&iacute; pr&iacute;supov&eacute;ho s&uacute;boru v adres&aacute;ri str&aacute;nek (nedostato&#269;n&eacute; opr&aacute;vnenie)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Do&#353;lo k chybe pri zmene poradia str&aacute;nky';
+$MESSAGE['PAGES_DELETED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne zmazan&aacute;';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Ste si ist&iacute;, &#382;e chcete zmaza&#357; tuto str&aacute;nku (a v&#353;etky podstr&aacute;nky)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Nem&aacute;te opr&aacute;vnenie k zmene tejto str&aacute;nky';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Zmeni&#357; &uacute;vodn&uacute; (intro) str&aacute;nku';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Ned&aacute; sa zapisova&#357; do s&uacute;boru /pages/intro.php (nedostato&#269;n&eacute; opr&aacute;vnenia)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne ulo&#382;en&aacute;';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Posledn&aacute; zmena:';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Str&aacute;nka nen&aacute;jden&aacute;';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Do&#353;lo k chybe pri ukl&aacute;d&aacute;n&iacute; str&aacute;nky';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Str&aacute;nka z rovnak&yacute;m alebo podobn&yacute;m n&aacute;zvom u&#382; existuje';
+$MESSAGE['PAGES_REORDERED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne presunut&aacute;';
+$MESSAGE['PAGES_RESTORED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne obnoven&aacute;';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Sp&auml;&#357; na str&aacute;nky';
+$MESSAGE['PAGES_SAVED'] = 'Str&aacute;nka bola &uacute;spe&#353;ne ulo&#382;ena';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Nastavenie str&aacute;nky bolo &uacute;spe&#353;ne ulo&#382;en&eacute;';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Nastavenia sekcie boli &uacute;spe&#353;ne ulo&#382;en&eacute;';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'S&uacute;&#269;asn&eacute; heslo nezodpoved&aacute;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Detaily boly &uacute;spe&#353;ne ulo&#382;en&eacute;';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'E-mail bol &uacute;spe&#353;ne ulo&#382;en&yacute;';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Heslo bolo &uacute;spe&#353;ne zmenen&eacute;';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Pozn.: stla&#269;en&iacute;m tohto tla&#269;&iacute;tka d&ocirc;jde k zahodeniu neulo&#382;en&yacute;ch zmien';
+$MESSAGE['SETTINGS_SAVED'] = 'Nastavenie bolo &uacute;&#353;spene ulo&#382;en&eacute;';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Nejde otvori s&uacute;bor s konfigurciou';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Nejde zapisova&#357; do s&uacute;boru s konfigur&aacute;ciou';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Pozn.: zapnutie tejto vo&#318;by sa doporu&#269;uje  len v testovacom prostred&iacute;';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Vase prihlasovacie udaje...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Mus&iacute;te zada&#357; e-mailovou adresu';
+$MESSAGE['START_CURRENT_USER'] = 'Ste prihl&aacute;sen&yacute; ako:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Pozor, st&aacute;le existuje in&#353;tala&#269;n&yacute; adres&aacute;r!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Vitajte v administrat&iacute;vnej &#269;asti';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Pozn.: zmena &#353;ablony sa prov&aacute;dza v sekcii Nastavenia';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'U&#382;&iacute;vate&#318; bol &uacute;spe&#353;ne pridan&yacute;';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Pozn.: vypl&#328;te iba hodnoty hore pokia&#318; si prajete zmeni&#357; heslo';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Ste si ist&yacute;, &#382;e chcete vymaza&#357; tohoto u&#382;&iacute;vate&#318;a?';
+$MESSAGE['USERS_DELETED'] = 'U&#382;&iacute;vate&#318; bol &uacute;spe&#353;ne zmazan&yacute;';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Zadan&aacute; e-mailov&aacute; adresa je u&#382; pou&#382;&iacute;van&aacute;';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Zadan&aacute; e-mailov&aacute; adresa je neplatn&aacute;';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'alebola vybran&aacute; skupina';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Zadan&eacute; hesl&aacute; nie s&uacute; zhodn&eacute;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Zadan&eacute; heslo je pr&iacute;li&#353; kr&aacute;tk&eacute;';
+$MESSAGE['USERS_SAVED'] = 'U&#382;&iacute;vate&#318; bol &uacute;spe&#353;ne ulo&#382;en&yacute;';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Administra&#269;n&eacute; n&aacute;stroje...';
+$OVERVIEW['GROUPS'] = 'Spravova&#357; skupiny u&#382;ivatelov a ich opr&aacute;vnen&iacute;...';
+$OVERVIEW['HELP'] = 'M&aacute;te ot&aacute;zku? H&#318;adajte odpove&#271;...';
+$OVERVIEW['LANGUAGES'] = 'Spravova&#357; jazyky...';
+$OVERVIEW['MEDIA'] = 'Spravova&#357; s&uacute;bory v adres&aacute;ri m&eacute;di&iacute;...';
+$OVERVIEW['MODULES'] = 'Spravova&#357; moduly...';
+$OVERVIEW['PAGES'] = 'Spravova&#357; webov&eacute; str&aacute;nky...';
+$OVERVIEW['PREFERENCES'] = 'Zmena nastavenia e-mailovej adresy, hesla, atd... ';
+$OVERVIEW['SETTINGS'] = 'Zmena nastavenia...';
+$OVERVIEW['START'] = 'Administrat&iacute;vny prehlad';
+$OVERVIEW['TEMPLATES'] = 'Zmeni&#357; vzh&#318;ad a chovanie webu pomocou &#353;ablon...';
+$OVERVIEW['USERS'] = 'Spravova&#357; u&#382;ivatelov...';
+$OVERVIEW['VIEW'] = 'R&yacute;chlo prezrie&#357; str&aacute;nky v novom okne...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/SK.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/TR.php
===================================================================
--- trunk/languages/TR.php	(nonexistent)
+++ trunk/languages/TR.php	(revision 2)
@@ -0,0 +1,684 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+// Define that this file is loaded
+if(!defined('LANGUAGE_LOADED')) {
+define('LANGUAGE_LOADED', true);
+}
+
+// Set the language information
+$language_code = 'TR';
+$language_name = 'Türkçe';
+$language_version = '2.8';
+$language_platform = '2.8.x';
+$language_author = 'Atakan KO&Ccedil;';
+$language_license = 'GNU General Public License';
+$MENU['ACCESS'] = 'Giri&thorn;';
+$MENU['ADDON'] = 'Add-on';
+$MENU['ADDONS'] = 'Eklentiler';
+$MENU['ADMINTOOLS'] = 'Admin-Tools';
+$MENU['BREADCRUMB'] = 'You are here: ';
+$MENU['FORGOT'] = 'Giri&thorn; Bilgilerini Gerial';
+$MENU['GROUP'] = 'Group';
+$MENU['GROUPS'] = 'Gruplar';
+$MENU['HELP'] = 'Yard&yacute;m';
+$MENU['LANGUAGES'] = 'Diller';
+$MENU['LOGIN'] = 'Giri&thorn;';
+$MENU['LOGOUT'] = '&Ccedil;&yacute;k&yacute;&thorn;';
+$MENU['MEDIA'] = 'Resimler';
+$MENU['MODULES'] = 'Mod&uuml;ller';
+$MENU['PAGES'] = 'Sayfalar';
+$MENU['PREFERENCES'] = 'Tercihler';
+$MENU['SETTINGS'] = 'Ayarlar';
+$MENU['START'] = 'Ba&thorn;lat';
+$MENU['TEMPLATES'] = 'Kal&yacute;plar';
+$MENU['USERS'] = 'Kullan&yacute;c&yacute;lar';
+$MENU['VIEW'] = 'G&ouml;r&uuml;nt&uuml;le';
+$TEXT['ACCOUNT_SIGNUP'] = 'Kull&yacute;c&yacute; Kay&yacute;t Ol';
+$TEXT['ACTIONS'] = 'Hareketler';
+$TEXT['ACTIVE'] = 'Aktif';
+$TEXT['ADD'] = 'Ekle';
+$TEXT['ADDON'] = 'Add-On';
+$TEXT['ADD_SECTION'] = 'K&yacute;s&yacute;m Ekle';
+$TEXT['ADMIN'] = 'Admin';
+$TEXT['ADMINISTRATION'] = 'Y&ouml;netici';
+$TEXT['ADMINISTRATION_TOOL'] = 'Administration tool';
+$TEXT['ADMINISTRATOR'] = 'Administrator';
+$TEXT['ADMINISTRATORS'] = 'Y&ouml;nerici';
+$TEXT['ADVANCED'] = '&Yacute;leri';
+$TEXT['ALLOWED_FILETYPES_ON_UPLOAD'] = 'Allowed filetypes on upload';
+$TEXT['ALLOWED_VIEWERS'] = 'Allowed Viewers';
+$TEXT['ALLOW_MULTIPLE_SELECTIONS'] = '&Ccedil;oklu se&ccedil;imlere izin ver';
+$TEXT['ALL_WORDS'] = 'B&uuml;t&uuml;n Kelimeler';
+$TEXT['ANCHOR'] = 'Anchor';
+$TEXT['ANONYMOUS'] = 'Bilinmeyen';
+$TEXT['ANY_WORDS'] = 'Herhangi bir s&ouml;zc&uuml;k';
+$TEXT['APP_NAME'] = 'Application Ad&yacute;';
+$TEXT['ARE_YOU_SURE'] = 'eminmisin?';
+$TEXT['AUTHOR'] = 'Yazar';
+$TEXT['BACK'] = 'Geri';
+$TEXT['BACKUP'] = 'Yedek Al';
+$TEXT['BACKUP_ALL_TABLES'] = 'Backup all tables in database';
+$TEXT['BACKUP_DATABASE'] = 'Database Yedekle';
+$TEXT['BACKUP_MEDIA'] = 'Media Yedekle';
+$TEXT['BACKUP_WB_SPECIFIC'] = 'Backup only WB-specific tables';
+$TEXT['BASIC'] = 'Ba&thorn;lang&yacute;&ccedil;';
+$TEXT['BLOCK'] = 'Blok';
+$TEXT['CALENDAR'] = 'Calender';
+$TEXT['CANCEL'] = '&Yacute;ptal';
+$TEXT['CAN_DELETE_HIMSELF'] = 'Can delete himself';
+$TEXT['CAPTCHA_VERIFICATION'] = 'Captcha Verification';
+$TEXT['CAP_EDIT_CSS'] = 'Edit CSS';
+$TEXT['CHANGE'] = 'De&eth;i&thorn;tir';
+$TEXT['CHANGES'] = 'De&eth;i&thorn;iklikler';
+$TEXT['CHANGE_SETTINGS'] = 'Ayarlar&yacute; De&eth;i&thorn;tir';
+$TEXT['CHARSET'] = 'Charset';
+$TEXT['CHECKBOX_GROUP'] = 'T&yacute;klamal&yacute; Se&ccedil;im';
+$TEXT['CLOSE'] = 'Kapat';
+$TEXT['CODE'] = 'Kod';
+$TEXT['CODE_SNIPPET'] = 'Code-snippet';
+$TEXT['COLLAPSE'] = 'Daralt';
+$TEXT['COMMENT'] = 'Yorum';
+$TEXT['COMMENTING'] = 'Yorum yapan';
+$TEXT['COMMENTS'] = 'Yorumlar';
+$TEXT['CREATE_FOLDER'] = 'Dizin Yarat';
+$TEXT['CURRENT'] = 'Kullan&yacute;lan';
+$TEXT['CURRENT_FOLDER'] = 'Kullan&yacute;lan Dizin';
+$TEXT['CURRENT_PAGE'] = 'Kullan&yacute;lan Sayfa';
+$TEXT['CURRENT_PASSWORD'] = 'Kullan&yacute;lan &THORN;ifre';
+$TEXT['CUSTOM'] = 'Custom';
+$TEXT['DATABASE'] = 'Database';
+$TEXT['DATE'] = 'Tarih';
+$TEXT['DATE_FORMAT'] = 'Tarih Format&yacute;';
+$TEXT['DEFAULT'] = 'Varsay&yacute;lan';
+$TEXT['DEFAULT_CHARSET'] = 'Default Charset';
+$TEXT['DEFAULT_TEXT'] = 'Varsay&yacute;lan Yaz&yacute;';
+$TEXT['DELETE'] = 'Sil';
+$TEXT['DELETED'] = 'Silindi';
+$TEXT['DELETE_DATE'] = 'Delete date';
+$TEXT['DELETE_ZIP'] = 'Delete zip archive after unpacking';
+$TEXT['DESCRIPTION'] = 'A&ccedil;&yacute;klama';
+$TEXT['DESIGNED_FOR'] = 'D&uuml;zenleyen';
+$TEXT['DIRECTORIES'] = 'Dizinler';
+$TEXT['DIRECTORY_MODE'] = 'Dizin Modu';
+$TEXT['DISABLED'] = '&Yacute;ptal';
+$TEXT['DISPLAY_NAME'] = 'G&ouml;r&uuml;n&uuml;m Ad&yacute;';
+$TEXT['EMAIL'] = 'Email';
+$TEXT['EMAIL_ADDRESS'] = 'Email Adresi';
+$TEXT['EMPTY_TRASH'] = '&Ccedil;&ouml;p kutusu bo&thorn;';
+$TEXT['ENABLED'] = '&Yacute;zin Ver';
+$TEXT['END'] = 'Son';
+$TEXT['ERROR'] = 'Hata';
+$TEXT['EXACT_MATCH'] = 'Tam Bul';
+$TEXT['EXECUTE'] = '&Ccedil;al&yacute;&thorn;t&yacute;r';
+$TEXT['EXPAND'] = 'Geni&thorn;let';
+$TEXT['EXTENSION'] = 'Extension';
+$TEXT['FIELD'] = 'Alan';
+$TEXT['FILE'] = 'Dosya';
+$TEXT['FILES'] = 'Dosyalar';
+$TEXT['FILESYSTEM_PERMISSIONS'] = 'Dosya Sistemi &Yacute;zinleri';
+$TEXT['FILE_MODE'] = 'Dosya &Yacute;zini';
+$TEXT['FINISH_PUBLISHING'] = 'Yay&yacute;n&yacute; Bitir';
+$TEXT['FOLDER'] = 'Dizin';
+$TEXT['FOLDERS'] = 'Dizinler';
+$TEXT['FOOTER'] = 'Alt K&yacute;s&yacute;m';
+$TEXT['FORGOTTEN_DETAILS'] = 'Sizin Ayr&yacute;nt&yacute;l&yacute; Detaylar&yacute;n&yacute;z?';
+$TEXT['FORGOT_DETAILS'] = 'Detay Hat&yacute;rlat?';
+$TEXT['FROM'] = 'From';
+$TEXT['FRONTEND'] = 'Son Kullan&yacute;c&yacute;';
+$TEXT['FULL_NAME'] = 'Tam Ad&yacute;n&yacute;z';
+$TEXT['FUNCTION'] = 'Function';
+$TEXT['GROUP'] = 'Grup';
+$TEXT['HEADER'] = '&Uuml;st K&yacute;s&yacute;m';
+$TEXT['HEADING'] = 'Ba&thorn;l&yacute;k';
+$TEXT['HEADING_CSS_FILE'] = 'Actual module file: ';
+$TEXT['HEIGHT'] = 'Y&uuml;kseklik';
+$TEXT['HIDDEN'] = 'Gizli';
+$TEXT['HIDE'] = 'Gizle';
+$TEXT['HIDE_ADVANCED'] = '&Yacute;leri Se&ccedil;enekleri Gizle';
+$TEXT['HOME'] = 'Ana Sayfa';
+$TEXT['HOMEPAGE_REDIRECTION'] = 'Ana sayfa y&ouml;nlendir';
+$TEXT['HOME_FOLDER'] = 'Personal Folder';
+$TEXT['HOME_FOLDERS'] = 'Personal Folders';
+$TEXT['HOST'] = 'Host';
+$TEXT['ICON'] = 'Ikon';
+$TEXT['IMAGE'] = 'Resim';
+$TEXT['INLINE'] = 'In-line';
+$TEXT['INSTALL'] = 'Y&uuml;kle';
+$TEXT['INSTALLATION'] = 'Y&uuml;kle';
+$TEXT['INSTALLATION_PATH'] = 'Y&uuml;kleme Yolu';
+$TEXT['INSTALLATION_URL'] = 'Y&uuml;keleme URL';
+$TEXT['INSTALLED'] = 'installed';
+$TEXT['INTRO'] = 'Demo';
+$TEXT['INTRO_PAGE'] = 'Demo Sayfas&yacute;';
+$TEXT['INVALID_SIGNS'] = 'must begin with a letter or has invalid signs';
+$TEXT['KEYWORDS'] = 'Keywords';
+$TEXT['LANGUAGE'] = 'Dil';
+$TEXT['LAST_UPDATED_BY'] = 'Son G&uuml;ncelleyen';
+$TEXT['LENGTH'] = 'Uzunluk';
+$TEXT['LEVEL'] = 'Limit';
+$TEXT['LINK'] = 'Link';
+$TEXT['LINUX_UNIX_BASED'] = 'Linux/Unix tabanl&yacute;';
+$TEXT['LIST_OPTIONS'] = 'Liste se&ccedil;enekleri';
+$TEXT['LOGGED_IN'] = 'Giri&thorn; Kaydet';
+$TEXT['LOGIN'] = 'Giri&thorn;';
+$TEXT['LONG'] = 'Uzun';
+$TEXT['LONG_TEXT'] = 'Uzun Yaz&yacute;';
+$TEXT['LOOP'] = 'S&uuml;rekli';
+$TEXT['MAIN'] = 'Ana';
+$TEXT['MAINTENANCE_OFF'] = 'Maintenance off';
+$TEXT['MAINTENANCE_ON'] = 'Maintenance on';
+$TEXT['MANAGE'] = 'Y&ouml;net';
+$TEXT['MANAGE_GROUPS'] = 'Grup Y&ouml;netimi';
+$TEXT['MANAGE_USERS'] = 'Kullan&yacute;c&yacute; Y&ouml;netimi';
+$TEXT['MATCH'] = 'Bul';
+$TEXT['MATCHING'] = 'Bulunanlar';
+$TEXT['MAX_EXCERPT'] = 'Max lines of excerpt';
+$TEXT['MAX_SUBMISSIONS_PER_HOUR'] = 'Maksimum Saat Ba&thorn;&yacute; Sunum';
+$TEXT['MEDIA_DIRECTORY'] = 'Resim Dizini';
+$TEXT['MENU'] = 'Menu';
+$TEXT['MENU_ICON_0'] = 'Menu-Icon normal';
+$TEXT['MENU_ICON_1'] = 'Menu-Icon hover';
+$TEXT['MENU_TITLE'] = 'Menu Ba&thorn;l&yacute;&eth;&yacute;';
+$TEXT['MESSAGE'] = 'Mesaj';
+$TEXT['MODIFY'] = 'D&uuml;zenle';
+$TEXT['MODIFY_CONTENT'] = 'D&uuml;zeni De&eth;i&thorn;tir';
+$TEXT['MODIFY_SETTINGS'] = 'Ayarlar&yacute; De&eth;i&thorn;tir';
+$TEXT['MODULE_ORDER'] = 'Module-order for searching';
+$TEXT['MODULE_PERMISSIONS'] = 'Mod&uuml;l &Yacute;zinleri';
+$TEXT['MORE'] = 'Daha &Ccedil;ok';
+$TEXT['MOVE_DOWN'] = 'A&thorn;a&eth;&yacute; Ta&thorn;&yacute;';
+$TEXT['MOVE_UP'] = 'Yukar&yacute; Ta&thorn;&yacute;';
+$TEXT['MULTIPLE_MENUS'] = '&Ccedil;oklu men&uuml;ler';
+$TEXT['MULTISELECT'] = '&Ccedil;oklu Se&ccedil;im';
+$TEXT['NAME'] = '&Yacute;sim';
+$TEXT['NEED_CURRENT_PASSWORD'] = 'confirm with current password';
+$TEXT['NEED_TO_LOGIN'] = 'Need to log-in?';
+$TEXT['NEW_PASSWORD'] = 'Yeni &THORN;ifre';
+$TEXT['NEW_WINDOW'] = 'Yeni Pencere';
+$TEXT['NEXT'] = 'Sonraki';
+$TEXT['NEXT_PAGE'] = 'Sonraki Sayfa';
+$TEXT['NO'] = 'Hay&yacute;r';
+$TEXT['NONE'] = 'Yok';
+$TEXT['NONE_FOUND'] = 'Hi&ccedil;biri bulmad&yacute;';
+$TEXT['NOT_FOUND'] = 'Bulunamad&yacute;';
+$TEXT['NOT_INSTALLED'] = 'not installed';
+$TEXT['NO_IMAGE_SELECTED'] = 'no image selected';
+$TEXT['NO_RESULTS'] = 'Bulunamad&yacute;';
+$TEXT['OF'] = 'Of';
+$TEXT['ON'] = 'On';
+$TEXT['OPEN'] = 'Open';
+$TEXT['OPTION'] = 'Se&ccedil;enekler';
+$TEXT['OTHERS'] = 'Di&eth;erleri';
+$TEXT['OUT_OF'] = 'D&yacute;&thorn;ar&yacute;';
+$TEXT['OVERWRITE_EXISTING'] = '&Uuml;st&uuml;ne Yaz';
+$TEXT['PAGE'] = 'Sayfa';
+$TEXT['PAGES_DIRECTORY'] = 'Sayfa Dizini';
+$TEXT['PAGES_PERMISSION'] = 'Pages Permission';
+$TEXT['PAGES_PERMISSIONS'] = 'Pages Permissions';
+$TEXT['PAGE_EXTENSION'] = 'Sayfa Uzant&yacute;s&yacute;';
+$TEXT['PAGE_ICON'] = 'Page Image';
+$TEXT['PAGE_ICON_DIR'] = 'Path pages/menu images';
+$TEXT['PAGE_LANGUAGES'] = 'Sayfa Dili';
+$TEXT['PAGE_LEVEL_LIMIT'] = 'Sayfa Alt Limiti';
+$TEXT['PAGE_SPACER'] = 'Sayfa Bo&thorn;lu&eth;u';
+$TEXT['PAGE_TITLE'] = 'Sayfa Ba&thorn;l&yacute;&eth;&yacute;';
+$TEXT['PAGE_TRASH'] = 'Sayfay&yacute; Sil';
+$TEXT['PARENT'] = 'Ana Grup';
+$TEXT['PASSWORD'] = '&THORN;ifre';
+$TEXT['PATH'] = 'Yol';
+$TEXT['PHP_ERROR_LEVEL'] = 'PHP Hata Rapor D&uuml;zeyi';
+$TEXT['PLEASE_LOGIN'] = 'Please login';
+$TEXT['PLEASE_SELECT'] = 'L&uuml;tfen Se&ccedil;in';
+$TEXT['POST'] = 'Mesaj';
+$TEXT['POSTS_PER_PAGE'] = 'Sayfa ba&thorn;&yacute;na mesajlar';
+$TEXT['POST_FOOTER'] = 'Alt Mesaj';
+$TEXT['POST_HEADER'] = '&Uuml;st Mesaj&yacute;';
+$TEXT['PREVIOUS'] = '&Ouml;nceki';
+$TEXT['PREVIOUS_PAGE'] = '&Ouml;nceki Sayfa';
+$TEXT['PRIVATE'] = '&Ouml;zel';
+$TEXT['PRIVATE_VIEWERS'] = '&Ouml;zel izleyiciler';
+$TEXT['PROFILES_EDIT'] = 'Change the profile';
+$TEXT['PUBLIC'] = 'Herkez';
+$TEXT['PUBL_END_DATE'] = 'End date';
+$TEXT['PUBL_START_DATE'] = 'Start date';
+$TEXT['RADIO_BUTTON_GROUP'] = 'Radyo D&uuml;&eth;meleri';
+$TEXT['READ'] = 'Oku';
+$TEXT['READ_MORE'] = 'Oku';
+$TEXT['REDIRECT_AFTER'] = 'Redirect after';
+$TEXT['REGISTERED'] = 'Kay&yacute;tl&yacute; Kullan&yacute;c&yacute;';
+$TEXT['REGISTERED_VIEWERS'] = '&Yacute;zleyiciler kaydetti';
+$TEXT['RELOAD'] = 'Tekrarla';
+$TEXT['REMEMBER_ME'] = 'Haz&yacute;rla';
+$TEXT['RENAME'] = 'Yeni isim ver';
+$TEXT['RENAME_FILES_ON_UPLOAD'] = 'No upload for this filetypes';
+$TEXT['REQUIRED'] = 'Gerekli';
+$TEXT['REQUIREMENT'] = 'Requirement';
+$TEXT['RESET'] = 'S&yacute;f&yacute;rla';
+$TEXT['RESIZE'] = 'Tekrar Boyutland&yacute;r';
+$TEXT['RESIZE_IMAGE_TO'] = 'Boyutland&yacute;r resimi';
+$TEXT['RESTORE'] = 'Yede&eth;i y&uuml;kle';
+$TEXT['RESTORE_DATABASE'] = 'Database Geri Y&uuml;kle';
+$TEXT['RESTORE_MEDIA'] = 'Media Geri Y&uuml;kle';
+$TEXT['RESULTS'] = 'Sonu&ccedil;lar';
+$TEXT['RESULTS_FOOTER'] = 'Bulundu&eth;unda Alt K&yacute;s&yacute;m';
+$TEXT['RESULTS_FOR'] = 'Sonu&ccedil;lar';
+$TEXT['RESULTS_HEADER'] = 'Bulundu&eth;unda &Uuml;st K&yacute;s&yacute;m';
+$TEXT['RESULTS_LOOP'] = 'Bulundu&eth;unda D&ouml;ng&uuml;';
+$TEXT['RETYPE_NEW_PASSWORD'] = 'Tekrarla Yeni &THORN;ifre';
+$TEXT['RETYPE_PASSWORD'] = '&THORN;ifreyi Tekrarla';
+$TEXT['SAME_WINDOW'] = 'Ayn&yacute; Pencere';
+$TEXT['SAVE'] = 'Kay&yacute;t et';
+$TEXT['SEARCH'] = 'Ara';
+$TEXT['SEARCHING'] = 'Arama';
+$TEXT['SECTION'] = 'K&yacute;s&yacute;m';
+$TEXT['SECTION_BLOCKS'] = 'K&yacute;s&yacute;m bloklar&yacute;';
+$TEXT['SEC_ANCHOR'] = 'Section-Anchor text';
+$TEXT['SELECT_BOX'] = 'Se&ccedil;meli Men&uuml;';
+$TEXT['SEND_DETAILS'] = 'Detaylar&yacute; G&ouml;nder';
+$TEXT['SEPARATE'] = 'Ay&yacute;r&yacute;c&yacute;';
+$TEXT['SEPERATOR'] = 'B&ouml;l&uuml;c&uuml;';
+$TEXT['SERVER_EMAIL'] = 'Server Email';
+$TEXT['SERVER_OPERATING_SYSTEM'] = 'Server &Yacute;&thorn;letim Sistemi';
+$TEXT['SESSION_IDENTIFIER'] = 'Session Identifier';
+$TEXT['SETTINGS'] = 'Ayarlar';
+$TEXT['SHORT'] = 'K&yacute;sa';
+$TEXT['SHORT_TEXT'] = 'K&yacute;sa Yaz&yacute;';
+$TEXT['SHOW'] = 'G&ouml;ster';
+$TEXT['SHOW_ADVANCED'] = '&Yacute;leri Se&ccedil;enekleri G&ouml;ster';
+$TEXT['SIGNUP'] = 'Kay&yacute;t Ol';
+$TEXT['SIZE'] = 'Boyut';
+$TEXT['SMART_LOGIN'] = 'G&uuml;venli Giri&thorn;';
+$TEXT['START'] = 'Ba&thorn;lat';
+$TEXT['START_PUBLISHING'] = 'Yay&yacute;na Ba&thorn;la';
+$TEXT['SUBJECT'] = 'Konu';
+$TEXT['SUBMISSIONS'] = 'Sunu&thorn;lar';
+$TEXT['SUBMISSIONS_STORED_IN_DATABASE'] = 'Sunu&thorn;lar, veritaban&yacute;nda depolad&yacute;';
+$TEXT['SUBMISSION_ID'] = 'Sunu&thorn;lar ID';
+$TEXT['SUBMITTED'] = 'G&ouml;nderildi';
+$TEXT['SUCCESS'] = '&Yacute;&thorn;lem Ba&thorn;ar&yacute;ld&yacute;';
+$TEXT['SYSTEM_DEFAULT'] = 'Sistem Varsay&yacute;lan&yacute;';
+$TEXT['SYSTEM_PERMISSIONS'] = 'Sistem &Yacute;zinleri';
+$TEXT['TABLE_PREFIX'] = 'Table D&uuml;zen Ad&yacute;';
+$TEXT['TARGET'] = 'Hedef';
+$TEXT['TARGET_FOLDER'] = 'Hedef Dizin';
+$TEXT['TEMPLATE'] = 'Kal&yacute;p';
+$TEXT['TEMPLATE_PERMISSIONS'] = 'Kal&yacute;p &Yacute;zinleri';
+$TEXT['TEXT'] = 'Yaz&yacute;';
+$TEXT['TEXTAREA'] = 'Textarea';
+$TEXT['TEXTFIELD'] = 'Textfield';
+$TEXT['THEME'] = 'Backend-Theme';
+$TEXT['THEME_COPY_CURRENT'] = 'Copy backend theme.';
+$TEXT['THEME_CURRENT'] = 'current active theme';
+$TEXT['THEME_IMPORT_HTT'] = 'Import additional templates';
+$TEXT['THEME_NEW_NAME'] = 'Name of the new Theme';
+$TEXT['THEME_NOMORE_HTT'] = 'no more available';
+$TEXT['THEME_SELECT_HTT'] = 'select templates';
+$TEXT['THEME_START_COPY'] = 'copy';
+$TEXT['THEME_START_IMPORT'] = 'import';
+$TEXT['TIME'] = 'Saat';
+$TEXT['TIMEZONE'] = 'Zaman Dilimi';
+$TEXT['TIME_FORMAT'] = 'Saat Format&yacute;';
+$TEXT['TIME_LIMIT'] = 'Max time to gather excerpts per module';
+$TEXT['TITLE'] = 'Ba&thorn;l&yacute;k';
+$TEXT['TO'] = 'To';
+$TEXT['TOP_FRAME'] = 'Top Frame';
+$TEXT['TRASH_EMPTIED'] = '&Ccedil;&ouml;p kutusu bo&thorn;alt&yacute;ld&yacute;';
+$TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.';
+$TEXT['TYPE'] = 'Tip';
+$TEXT['UNDER_CONSTRUCTION'] = 'Yap&yacute;m A&thorn;amas&yacute;nda';
+$TEXT['UNINSTALL'] = 'Kald&yacute;r';
+$TEXT['UNKNOWN'] = 'Bilinmeyen';
+$TEXT['UNLIMITED'] = 'S&yacute;n&yacute;rs&yacute;z';
+$TEXT['UNZIP_FILE'] = 'Upload and unpack a zip archive';
+$TEXT['UP'] = 'Yukar&yacute;';
+$TEXT['UPGRADE'] = 'Upgrade';
+$TEXT['UPLOAD_FILES'] = 'Dosya Y&uuml;kle';
+$TEXT['URL'] = 'URL';
+$TEXT['USER'] = 'Kullan&yacute;c&yacute;';
+$TEXT['USERNAME'] = 'Loginname';
+$TEXT['USERS_ACTIVE'] = 'User is set active';
+$TEXT['USERS_CAN_SELFDELETE'] = 'User can delete himself';
+$TEXT['USERS_CHANGE_SETTINGS'] = 'User can change his own settings';
+$TEXT['USERS_DELETED'] = 'User is marked as deleted';
+$TEXT['USERS_FLAGS'] = 'User-Flags';
+$TEXT['USERS_PROFILE_ALLOWED'] = 'User can create extended profile';
+$TEXT['VERIFICATION'] = 'Verification';
+$TEXT['VERSION'] = 'Versiyon';
+$TEXT['VIEW'] = 'G&ouml;r&uuml;n&uuml;&thorn;';
+$TEXT['VIEW_DELETED_PAGES'] = 'Silinen Sayfay&yacute; G&ouml;ster';
+$TEXT['VIEW_DETAILS'] = 'Detaylar';
+$TEXT['VISIBILITY'] = 'G&ouml;r&uuml;n&uuml;rl&uuml;k';
+$TEXT['WBMAILER_DEFAULT_SENDER_MAIL'] = 'Default From Mail';
+$TEXT['WBMAILER_DEFAULT_SENDER_NAME'] = 'Default Sender Name';
+$TEXT['WBMAILER_DEFAULT_SETTINGS_NOTICE'] = 'Please specify a default "FROM" address and "SENDER" name below. It is recommended to use a FROM address like: <strong>admin@yourdomain.com</strong>. Some mail provider (e.g. <em>mail.com</em>) may reject mails with a FROM: address like <em>name@mail.com</em> sent via a foreign relay to avoid spam.<br /><br />The default values are only used if no other values are specified by WebsiteBaker. If your server supports <acronym title="Simple mail transfer protocol">SMTP</acronym>, you may want use this option for outgoing mails.';
+$TEXT['WBMAILER_FUNCTION'] = 'Mail Routine';
+$TEXT['WBMAILER_NOTICE'] = '<strong>SMTP Mailer Settings:</strong><br />The settings below are only required if you want to send mails via <acronym title="Simple mail transfer protocol">SMTP</acronym>. If you do not know your SMTP host or you are not sure about the required settings, simply stay with the default mail routine: PHP MAIL.';
+$TEXT['WBMAILER_PHP'] = 'PHP MAIL';
+$TEXT['WBMAILER_SMTP'] = 'SMTP';
+$TEXT['WBMAILER_SMTP_AUTH'] = 'SMTP Authentification';
+$TEXT['WBMAILER_SMTP_AUTH_NOTICE'] = 'only activate if your SMTP host requires authentification';
+$TEXT['WBMAILER_SMTP_HOST'] = 'SMTP Host';
+$TEXT['WBMAILER_SMTP_PASSWORD'] = 'SMTP Password';
+$TEXT['WBMAILER_SMTP_USERNAME'] = 'SMTP Loginname';
+$TEXT['WEBSITE'] = 'Website';
+$TEXT['WEBSITE_DESCRIPTION'] = 'Website A&ccedil;&yacute;klamas&yacute;';
+$TEXT['WEBSITE_FOOTER'] = 'Website Alt K&yacute;s&yacute;m';
+$TEXT['WEBSITE_HEADER'] = 'Website &Uuml;st K&yacute;s&yacute;m';
+$TEXT['WEBSITE_KEYWORDS'] = 'Website Keywords';
+$TEXT['WEBSITE_TITLE'] = 'Website Ba&thorn;l&yacute;&eth;&yacute;';
+$TEXT['WELCOME_BACK'] = 'Ho&thorn;geldiniz';
+$TEXT['WIDTH'] = 'Geni&thorn;lik';
+$TEXT['WINDOW'] = 'Pencere';
+$TEXT['WINDOWS'] = 'Windows';
+$TEXT['WORLD_WRITEABLE_FILE_PERMISSIONS'] = 'Yaz&yacute;labilir dosya izinleri';
+$TEXT['WRITE'] = 'Yaz';
+$TEXT['WYSIWYG_EDITOR'] = 'WYSIWYG Editor';
+$TEXT['WYSIWYG_STYLE'] = 'WYSIWYG Style';
+$TEXT['YES'] = 'Evet';
+$HEADING['ADDON_PRECHECK_FAILED'] = 'Add-On requirements not met';
+$HEADING['ADD_CHILD_PAGE'] = 'Add child page';
+$HEADING['ADD_GROUP'] = 'Grup Ekle';
+$HEADING['ADD_GROUPS'] = 'Add Groups';
+$HEADING['ADD_HEADING'] = 'Ba&thorn;l&yacute;k Ekle';
+$HEADING['ADD_PAGE'] = 'Sayfa Ekle';
+$HEADING['ADD_USER'] = 'Kullan&yacute;c&yacute; Ekle';
+$HEADING['ADMINISTRATION_TOOLS'] = 'Administration Ara&ccedil;lar&yacute;';
+$HEADING['BROWSE_MEDIA'] = 'Resimleri Y&ouml;netme';
+$HEADING['CREATE_FOLDER'] = 'Dizin Yarat';
+$HEADING['DEFAULT_SETTINGS'] = 'Varsay&yacute;lan Ayarlar';
+$HEADING['DELETED_PAGES'] = 'Sayfay&yacute; Sil';
+$HEADING['FILESYSTEM_SETTINGS'] = 'Dosya Sistemi Ayarlar&yacute;';
+$HEADING['GENERAL_SETTINGS'] = 'Genel Ayarlar';
+$HEADING['INSTALL_LANGUAGE'] = 'Dil Y&uuml;kle';
+$HEADING['INSTALL_MODULE'] = 'Mod&uuml;l Y&uuml;kle';
+$HEADING['INSTALL_TEMPLATE'] = 'Kal&yacute;p Y&uuml;kle';
+$HEADING['INVOKE_LANGUAGE_FILES'] = 'Execute language files manually';
+$HEADING['INVOKE_MODULE_FILES'] = 'Execute module files manually';
+$HEADING['INVOKE_TEMPLATE_FILES'] = 'Execute template files manually';
+$HEADING['LANGUAGE_DETAILS'] = 'Dil A&ccedil;&yacute;klamas&yacute;';
+$HEADING['MANAGE_SECTIONS'] = 'K&yacute;s&yacute;mlar&yacute; Y&ouml;net';
+$HEADING['MODIFY_ADVANCED_PAGE_SETTINGS'] = 'Geli&thorn;tirilmi&thorn; Sayfa Ayarlar&yacute;n&yacute; De&eth;i&thorn;tir';
+$HEADING['MODIFY_DELETE_GROUP'] = 'De&eth;i&thorn;tir/Sil Grup';
+$HEADING['MODIFY_DELETE_PAGE'] = 'De&eth;i&thorn;tir/Sil Sayfa';
+$HEADING['MODIFY_DELETE_USER'] = 'De&eth;i&thorn;tir/Sil kullan&yacute;c&yacute;';
+$HEADING['MODIFY_GROUP'] = 'Grup D&uuml;zenle';
+$HEADING['MODIFY_GROUPS'] = 'Modify Groups';
+$HEADING['MODIFY_INTRO_PAGE'] = 'Ba&thorn;lang&yacute;&ccedil; Sayfas&yacute;n&yacute; D&uuml;zenle';
+$HEADING['MODIFY_PAGE'] = 'Sayfay&yacute; De&eth;i&thorn;tir';
+$HEADING['MODIFY_PAGE_SETTINGS'] = 'Sayfa Ayarlar&yacute;n&yacute; De&eth;i&thorn;tir';
+$HEADING['MODIFY_USER'] = 'Kullan&yacute;c&yacute; D&uuml;zenle';
+$HEADING['MODULE_DETAILS'] = 'Mod&uuml;l A&ccedil;&yacute;klamas&yacute;';
+$HEADING['MY_EMAIL'] = 'Emailim';
+$HEADING['MY_PASSWORD'] = '&THORN;ifrem';
+$HEADING['MY_SETTINGS'] = 'Ayarlar&yacute;m';
+$HEADING['SEARCH_SETTINGS'] = 'Arama Ayarlar&yacute;';
+$HEADING['SERVER_SETTINGS'] = 'Server Ayarlar&yacute;';
+$HEADING['TEMPLATE_DETAILS'] = 'Kal&yacute;p A&ccedil;&yacute;klamas&yacute;';
+$HEADING['UNINSTALL_LANGUAGE'] = 'Dil Kald&yacute;r';
+$HEADING['UNINSTALL_MODULE'] = 'Mod&uuml;l Kald&yacute;r';
+$HEADING['UNINSTALL_TEMPLATE'] = 'Kal&yacute;p Kald&yacute;r';
+$HEADING['UPGRADE_LANGUAGE'] = 'Language register/upgrading';
+$HEADING['UPLOAD_FILES'] = 'Dosya Y&uuml;kle';
+$HEADING['WBMAILER_SETTINGS'] = 'Mailer Settings';
+$MESSAGE['ADDON_ERROR_RELOAD'] = 'Error while updating the Add-On information.';
+$MESSAGE['ADDON_LANGUAGES_RELOADED'] = 'Languages reloaded successfully';
+$MESSAGE['ADDON_MANUAL_FTP_LANGUAGE'] = '<strong>ATTENTION!</strong> For safety reasons uploading languages files in the folder/languages/ only by FTP and use the Upgrade function for registering or updating.';
+$MESSAGE['ADDON_MANUAL_FTP_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MANUAL_INSTALLATION'] = 'When modules are uploaded via FTP (not recommended), the module installation functions <tt>install</tt>, <tt>upgrade</tt> or <tt>uninstall</tt> will not be executed automatically. Those modules may not work correct or do not uninstall properly.<br /><br />You can execute the module functions manually for modules uploaded via FTP below.';
+$MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] = 'Warning: Existing module database entries will get lost. Only use this option if you experience problems with modules uploaded via FTP.';
+$MESSAGE['ADDON_MANUAL_RELOAD_WARNING'] = 'Warning: Existing module database entries will get lost. ';
+$MESSAGE['ADDON_MODULES_RELOADED'] = 'Modules reloaded successfully';
+$MESSAGE['ADDON_OVERWRITE_NEWER_FILES'] = 'Overwrite newer Files';
+$MESSAGE['ADDON_PRECHECK_FAILED'] = 'Add-on installation failed. Your system does not fulfill the requirements of this Add-on. To make this Add-on working on your system, please fix the issues summarized below.';
+$MESSAGE['ADDON_RELOAD'] = 'Update database with information from Add-on files (e.g. after FTP upload).';
+$MESSAGE['ADDON_TEMPLATES_RELOADED'] = 'Templates reloaded successfully';
+$MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] = 'Insufficient privelliges to be here';
+$MESSAGE['FORGOT_PASS_ALREADY_RESET'] = 'Paralonuzu 1 saat aral&yacute;klarla de&eth;i&thorn;tirebilirsiniz.';
+$MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] = 'Uygunsuz email &thorn;ifresi, L&uuml;tfen Y&ouml;netici ile Kontak kurun';
+$MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] = 'Bu email adresi veritaban&yacute;nda bulunamad&yacute;';
+$MESSAGE['FORGOT_PASS_NO_DATA'] = 'L&uuml;tfen email adresini girin';
+$MESSAGE['FORGOT_PASS_PASSWORD_RESET'] = 'Your loginname and password have been sent to your email address';
+$MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] = 'Sorry, no active content to display';
+$MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] = '&Uuml;zg&uuml;n&uuml;m, bu sayfay&yacute; g&ouml;r&uuml;nt&uuml;lemeye yetkiniz yok';
+$MESSAGE['GENERIC_ALREADY_INSTALLED'] = 'Daha &ouml;nce y&uuml;klenmi&thorn;ti';
+$MESSAGE['GENERIC_BAD_PERMISSIONS'] = 'Uygunsuz, hedef dizin yaz&yacute;lam&yacute;yor';
+$MESSAGE['GENERIC_BE_PATIENT'] = 'Please be patient.';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL'] = 'Kald&yacute;r&yacute;lam&yacute;yor';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] = 'Kald&yacute;rama: Se&ccedil;ilen dosya, kullan&yacute;mdad&yacute;r';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] = '<br /><br />{{type}} <b>{{type_name}}</b> could not be uninstalled, because it is still in use on {{pages}}.<br /><br />';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] = 'this page;these pages';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default template!';
+$MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_THEME'] = 'Can\'t uninstall the template <b>{{name}}</b>, because it is the default backend theme!';
+$MESSAGE['GENERIC_CANNOT_UNZIP'] = 'Dosya unzip edilemiyor';
+$MESSAGE['GENERIC_CANNOT_UPLOAD'] = 'Dosya Y&uuml;klenemiyor';
+$MESSAGE['GENERIC_COMPARE'] = ' successfully';
+$MESSAGE['GENERIC_ERROR_OPENING_FILE'] = 'Dosya a&ccedil;arken hata.';
+$MESSAGE['GENERIC_FAILED_COMPARE'] = ' failed';
+$MESSAGE['GENERIC_FILE_TYPE'] = 'Y&uuml;kledi&eth;in dosyan&yacute;n izin verilen dosya olmas&yacute;na dikkat edin:';
+$MESSAGE['GENERIC_FILE_TYPES'] = 'Y&uuml;kledi&eth;in dosyalar&yacute;n izin verilen dosya olmas&yacute;na dikkat edin:';
+$MESSAGE['GENERIC_FILL_IN_ALL'] = 'L&uuml;tfen geri d&ouml;n&uuml;p b&uuml;t&uuml;n alanlar&yacute; doldurunuz';
+$MESSAGE['GENERIC_FORGOT_OPTIONS'] = 'You have selected no choice!';
+$MESSAGE['GENERIC_INSTALLED'] = 'Ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde yerle&thorn;tirildi';
+$MESSAGE['GENERIC_INVALID'] = 'Senin y&uuml;kledi&eth;in dosya, ge&ccedil;ersizdir';
+$MESSAGE['GENERIC_INVALID_ADDON_FILE'] = 'Invalid WebsiteBaker installation file. Please check the *.zip format.';
+$MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] = 'Invalid WebsiteBaker language file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_MODULE_FILE'] = 'Invalid WebsiteBaker module file. Please check the text file.';
+$MESSAGE['GENERIC_INVALID_TEMPLATE_FILE'] = 'Invalid WebsiteBaker template file. Please check the text file.';
+$MESSAGE['GENERIC_IN_USE'] = ' but used in ';
+$MESSAGE['GENERIC_MISSING_ARCHIVE_FILE'] = 'Missing Archiv file!';
+$MESSAGE['GENERIC_MODULE_VERSION_ERROR'] = 'The module is not installed properly!';
+$MESSAGE['GENERIC_NOT_COMPARE'] = ' not possibly';
+$MESSAGE['GENERIC_NOT_INSTALLED'] = 'Y&uuml;klenemiyor';
+$MESSAGE['GENERIC_NOT_UPGRADED'] = 'Actualization not possibly';
+$MESSAGE['GENERIC_PLEASE_BE_PATIENT'] = 'Ol hasta memnun et, bu, bir anda alabilirdi.';
+$MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] = 'L&uuml;tfen daha sonra kontrol edin...';
+$MESSAGE['GENERIC_SECURITY_ACCESS'] = 'Security offense!! Access denied!';
+$MESSAGE['GENERIC_SECURITY_OFFENSE'] = 'Security offense!! data storing was refused!!';
+$MESSAGE['GENERIC_UNINSTALLED'] = 'Ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kald&yacute;r&yacute;ld&yacute;';
+$MESSAGE['GENERIC_UPGRADED'] = 'G&uuml;ncelleme ba&thorn;ar&yacute;l&yacute; bir&thorn;ekilde yap&yacute;ld&yacute;';
+$MESSAGE['GENERIC_VERSION_COMPARE'] = 'Version comparison';
+$MESSAGE['GENERIC_VERSION_GT'] = 'Upgrade necessary!';
+$MESSAGE['GENERIC_VERSION_LT'] = 'Downgrade';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'this site is temporarily down for maintenance';
+$MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] = 'Website Under Construction';
+$MESSAGE['GROUPS_ADDED'] = 'Grup, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde ekledi';
+$MESSAGE['GROUPS_CONFIRM_DELETE'] = 'Se&ccedil;ti&eth;iniz grubu silmek istedi&eth;inizden eminmisiniz? (ve bu gruba ekli kullan&yacute;c&yacute;lar&yacute;)?';
+$MESSAGE['GROUPS_DELETED'] = 'Grup, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde silindi';
+$MESSAGE['GROUPS_GROUP_NAME_BLANK'] = 'Grup ad&yacute; bo&thorn;';
+$MESSAGE['GROUPS_GROUP_NAME_EXISTS'] = 'Bu grup ad&yacute; zaten var';
+$MESSAGE['GROUPS_NO_GROUPS_FOUND'] = 'Hi&ccedil;bir grup bulmad&yacute;';
+$MESSAGE['GROUPS_SAVED'] = 'Grup, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['LOGIN_AUTHENTICATION_FAILED'] = 'Loginname or password incorrect';
+$MESSAGE['LOGIN_BOTH_BLANK'] = 'Please enter your loginname and password below';
+$MESSAGE['LOGIN_PASSWORD_BLANK'] = 'L&uuml;tfen &thorn;ifre girin';
+$MESSAGE['LOGIN_PASSWORD_TOO_LONG'] = '&THORN;ifreniz &ccedil;ok uzun';
+$MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] = '&THORN;ifreniz &ccedil;ok k&yacute;sa';
+$MESSAGE['LOGIN_USERNAME_BLANK'] = 'Please enter a loginname';
+$MESSAGE['LOGIN_USERNAME_TOO_LONG'] = 'Supplied loginname to long';
+$MESSAGE['LOGIN_USERNAME_TOO_SHORT'] = 'Supplied loginname to short';
+$MESSAGE['MEDIA_BLANK_EXTENSION'] = 'Mutlaka bir uzant&yacute; girmelisinz';
+$MESSAGE['MEDIA_BLANK_NAME'] = 'Mutlaka bir isim girmelisiniz';
+$MESSAGE['MEDIA_CANNOT_DELETE_DIR'] = 'Se&ccedil;ti&eth;iniz dizin silinemiyor';
+$MESSAGE['MEDIA_CANNOT_DELETE_FILE'] = 'Se&ccedil;ti&eth;iniz dosya silinemiyor';
+$MESSAGE['MEDIA_CANNOT_RENAME'] = 'Yeni isim ver ba&thorn;ar&yacute;s&yacute;z';
+$MESSAGE['MEDIA_CONFIRM_DELETE'] = 'Dosya ve dizinleri silmek istedi&eth;inizden eminmisiniz?';
+$MESSAGE['MEDIA_DELETED_DIR'] = 'Dizin, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde silindi';
+$MESSAGE['MEDIA_DELETED_FILE'] = 'Dosya, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde silindi';
+$MESSAGE['MEDIA_DIR_ACCESS_DENIED'] = 'Specified directory does not exist or is not allowed.';
+$MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] = 'Directory does not exist';
+$MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] = 'Giremezsiniz ../ i&ccedil;indeki dizin ad&yacute;';
+$MESSAGE['MEDIA_DIR_EXISTS'] = 'Girmi&thorn; oldu&eth;unuz dizin zaten var';
+$MESSAGE['MEDIA_DIR_MADE'] = 'Dizin, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde yaratt&yacute;';
+$MESSAGE['MEDIA_DIR_NOT_MADE'] = 'Dizin yaratma ba&thorn;ar&yacute;s&yacute;z';
+$MESSAGE['MEDIA_FILE_EXISTS'] = 'Girmi&thorn; oldu&eth;unuz dosya zaten var';
+$MESSAGE['MEDIA_FILE_NOT_FOUND'] = 'Dosya Bulunamad&yacute;';
+$MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] = 'Giremezsiniz ../ ismine';
+$MESSAGE['MEDIA_NAME_INDEX_PHP'] = 'index.php isimini kullanamazs&yacute;n&yacute;z';
+$MESSAGE['MEDIA_NONE_FOUND'] = 'No media found in the current folder';
+$MESSAGE['MEDIA_NO_FILE_UPLOADED'] = 'No file was recieved';
+$MESSAGE['MEDIA_RENAMED'] = 'Yeni isim ver ba&thorn;ar&yacute;l&yacute;.';
+$MESSAGE['MEDIA_SINGLE_UPLOADED'] = ' Dosya ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde y&uuml;klendi';
+$MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] = 'Cannot have ../ in the folder target';
+$MESSAGE['MEDIA_UPLOADED'] = ' Dosyalar ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde y&uuml;klendi';
+$MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+$MESSAGE['MOD_FORM_REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MESSAGE['PAGES_ADDED'] = 'Sayfa, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde ekledi';
+$MESSAGE['PAGES_ADDED_HEADING'] = '&Uuml;st sayfa, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde ekledi';
+$MESSAGE['PAGES_BLANK_MENU_TITLE'] = 'L&uuml;tfen men&uuml; ba&thorn;l&yacute;&eth;&yacute;n&yacute; girin';
+$MESSAGE['PAGES_BLANK_PAGE_TITLE'] = 'L&uuml;tfen sayfa ba&thorn;l&yacute;&eth;&yacute;n&yacute; girin';
+$MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] = 'Yarat&yacute;rken hatal&yacute; giri&thorn; /pages dizini i&ccedil;in (Yetersiz yetki)';
+$MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Silinirken hatal&yacute; giri&thorn; /pages dizini i&ccedil;in (Yetersiz yetki)';
+$MESSAGE['PAGES_CANNOT_REORDER'] = 'Yenilenen sayfada hata var';
+$MESSAGE['PAGES_DELETED'] = 'Sayfa, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde silindi';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Se&ccedil;ti&eth;iniz sayfay&yacute; silmek istedi&eth;inizden eminmisiniz (B&uuml;t&uuml;n alt sayfalar silinecektir)';
+$MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Sizin bu sayfay&yacute; de&eth;i&thorn;tirme izininiz yok';
+$MESSAGE['PAGES_INTRO_LINK'] = 'Buraya t&yacute;klayarak Giri&thorn; Sayfas&yacute;n&yacute; D&uuml;zenleye Bilirsiniz.';
+$MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Dosyaya yaz&yacute;lam&yacute;yor /pages/intro.php (Yetersiz yetki)';
+$MESSAGE['PAGES_INTRO_SAVED'] = 'Giri&thorn; sayfas&yacute; ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['PAGES_LAST_MODIFIED'] = 'Son de&eth;i&thorn;iklik yapan';
+$MESSAGE['PAGES_NOT_FOUND'] = 'Sayfa bulunamad&yacute;';
+$MESSAGE['PAGES_NOT_SAVED'] = 'Kay&yacute;t edilen sayfa hatal&yacute;';
+$MESSAGE['PAGES_PAGE_EXISTS'] = 'Bu sayfa veya dosya zaten var.';
+$MESSAGE['PAGES_REORDERED'] = 'Ba&thorn;ar&yacute;l&yacute; bi&ccedil;imde yenilendi';
+$MESSAGE['PAGES_RESTORED'] = 'Sayfa, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kurtar&yacute;ld&yacute;';
+$MESSAGE['PAGES_RETURN_TO_PAGES'] = 'Sayfaya Git';
+$MESSAGE['PAGES_SAVED'] = 'Sayfa, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['PAGES_SAVED_SETTINGS'] = 'Sayfa ayarlar&yacute; ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] = 'Section properties saved successfully';
+$MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] = 'Girdi&eth;iniz &thorn;ifre yanl&yacute;&thorn;';
+$MESSAGE['PREFERENCES_DETAILS_SAVED'] = 'Ayr&yacute;nt&yacute;lar, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['PREFERENCES_EMAIL_UPDATED'] = 'Email, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde g&uuml;ncelle&thorn;tirdi';
+$MESSAGE['PREFERENCES_INVALID_CHARS'] = 'Invalid password chars used';
+$MESSAGE['PREFERENCES_PASSWORD_CHANGED'] = 'Parola, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde de&eth;i&thorn;tirdi';
+$MESSAGE['RECORD_MODIFIED_FAILED'] = 'The change of the record has missed.';
+$MESSAGE['RECORD_MODIFIED_SAVED'] = 'The changed record was updated successfully.';
+$MESSAGE['RECORD_NEW_FAILED'] = 'Adding a new record has missed.';
+$MESSAGE['RECORD_NEW_SAVED'] = 'New record was added successfully.';
+$MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] = 'Not Edin: Bu buton b&uuml;t&uuml;n de&eth;i&thorn;iklikleri ilk haline geri getirir';
+$MESSAGE['SETTINGS_SAVED'] = 'Ayarlar ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] = 'Unable to open the configuration file';
+$MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] = 'Cannot write to configuration file';
+$MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] = 'Please note: this is only recommended for testing environments';
+$MESSAGE['SIGNUP2_ADMIN_INFO'] = '
+A new user was registered.
+
+Loginname: {LOGIN_NAME}
+UserId: {LOGIN_ID}
+E-Mail: {LOGIN_EMAIL}
+IP-Adress: {LOGIN_IP}
+Registration date: {SIGNUP_DATE}
+----------------------------------------
+This message was automatic generated!
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+This mail was sent because the \'forgot password\' function has been applied to your account.
+
+Your new \'{LOGIN_WEBSITE_TITLE}\' login details are:
+
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Your password has been reset to the one above.
+This means that your old password will no longer work anymore!
+If you\'ve got any questions or problems within the new login-data
+you should contact the website-team or the admin of \'{LOGIN_WEBSITE_TITLE}\'.
+Please remember to clean you browser-cache before using the new one to avoid unexpected fails.
+
+Regards
+------------------------------------
+This message was automatic generated
+
+';
+$MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] = '
+Hello {LOGIN_DISPLAY_NAME},
+
+Welcome to our \'{LOGIN_WEBSITE_TITLE}\'.
+
+Your \'{LOGIN_WEBSITE_TITLE}\' login details are:
+Loginname: {LOGIN_NAME}
+Password: {LOGIN_PASSWORD}
+
+Regards
+
+Please:
+if you have received this message by an error, please delete it immediately!
+-------------------------------------
+This message was automatic generated!
+';
+$MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] = 'Your login details...';
+$MESSAGE['SIGNUP_NO_EMAIL'] = 'Bir email adresi girmelisiniz.';
+$MESSAGE['START_CURRENT_USER'] = 'Sizin kulland&yacute;&eth;&yacute;n&yacute;z giri&thorn; ismi:';
+$MESSAGE['START_INSTALL_DIR_EXISTS'] = 'Uyar&yacute;! Y&uuml;kleme dizini halen duruyor!';
+$MESSAGE['START_UPGRADE_SCRIPT_EXISTS'] = 'Please delete the file "upgrade-script.php" from your webspace.';
+$MESSAGE['START_WELCOME_MESSAGE'] = 'Ho&thorn;geldiniz WebsiteBaker Y&ouml;netimine';
+$MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] = 'Please note: to change the template you must go to the Settings section';
+$MESSAGE['THEME_ALREADY_EXISTS'] = 'This new theme descriptor already exists.';
+$MESSAGE['THEME_COPY_CURRENT'] = 'Copy the current active theme and save it with a new name.';
+$MESSAGE['THEME_DESTINATION_READONLY'] = 'No rights to create new theme directory!';
+$MESSAGE['THEME_IMPORT_HTT'] = 'Import additional templates into the current active theme.<br />Use these templates to overwrite the corresponding default template.';
+$MESSAGE['THEME_INVALID_SOURCE_DESTINATION'] = 'Invalid descriptor for the new theme given!';
+$MESSAGE['UNKNOW_UPLOAD_ERROR'] = 'Unknown upload error';
+$MESSAGE['UPLOAD_ERR_CANT_WRITE'] = 'Failed to write file to disk';
+$MESSAGE['UPLOAD_ERR_EXTENSION'] = 'File upload stopped by extension';
+$MESSAGE['UPLOAD_ERR_FORM_SIZE'] = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
+$MESSAGE['UPLOAD_ERR_INI_SIZE'] = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
+$MESSAGE['UPLOAD_ERR_NO_FILE'] = 'No file was uploaded';
+$MESSAGE['UPLOAD_ERR_NO_TMP_DIR'] = 'Missing a temporary folder';
+$MESSAGE['UPLOAD_ERR_OK'] = 'File were successful uploaded';
+$MESSAGE['UPLOAD_ERR_PARTIAL'] = 'The uploaded file was only partially uploaded';
+$MESSAGE['USERS_ADDED'] = 'Kullan&yacute;c&yacute;, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde ekledi';
+$MESSAGE['USERS_CANT_SELFDELETE'] = 'Function rejected, You can not delete yourself!';
+$MESSAGE['USERS_CHANGING_PASSWORD'] = 'Not Edin: Sen sadece yukar&yacute;daki alanlara de&eth;erleri gir. E&eth;er bu kullan&yacute;c&yacute;lar&yacute; dile de&eth;i&thorn;tirseydin.';
+$MESSAGE['USERS_CONFIRM_DELETE'] = 'Se&ccedil;ti&eth;iniz kullan&yacute;c&yacute;lar&yacute; silmek istedi&eth;inizden eminmisiniz?';
+$MESSAGE['USERS_DELETED'] = 'Kullan&yacute;c&yacute;, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde silindi';
+$MESSAGE['USERS_EMAIL_TAKEN'] = 'Girdi&eth;iniz email ba&thorn;kas&yacute; taraf&yacute;ndan kullan&yacute;l&yacute;yor';
+$MESSAGE['USERS_INVALID_EMAIL'] = 'Girdi&eth;iniz email adresi ge&ccedil;ersiz';
+$MESSAGE['USERS_NAME_INVALID_CHARS'] = 'Invalid chars for Loginname found';
+$MESSAGE['USERS_NO_GROUP'] = 'Hi&ccedil;bir grup se&ccedil;ilmedi';
+$MESSAGE['USERS_PASSWORD_MISMATCH'] = 'Girdi&eth;iniz &thorn;ifre bulunamad&yacute;';
+$MESSAGE['USERS_PASSWORD_TOO_SHORT'] = 'Girdi&eth;iniz &thorn;ifre k&yacute;sa';
+$MESSAGE['USERS_SAVED'] = 'Kullan&yacute;c&yacute;, ba&thorn;ar&yacute;l&yacute; bir &thorn;ekilde kay&yacute;t edildi';
+$MESSAGE['USERS_USERNAME_TAKEN'] = 'The loginname you entered is already taken';
+$MESSAGE['USERS_USERNAME_TOO_SHORT'] = 'The loginname you entered was too short';
+$OVERVIEW['ADMINTOOLS'] = 'Access the WebsiteBaker administration tools...';
+$OVERVIEW['GROUPS'] = 'Kullan&yacute;c&yacute; Gruplar&yacute;n&yacute;n &Yacute;zinlerini D&uuml;zenleme...';
+$OVERVIEW['HELP'] = 'Sorular&yacute;n&yacute;z? Cevaplar&yacute;...';
+$OVERVIEW['LANGUAGES'] = 'WebsiteBaker Dilleri D&uuml;zenleme...';
+$OVERVIEW['MEDIA'] = 'Resim Deposundaki Dosyalar&yacute; Y&ouml;netme...';
+$OVERVIEW['MODULES'] = 'WebsiteBaker Mod&uuml;llerini Y&ouml;netme...';
+$OVERVIEW['PAGES'] = 'Website Sayfalar&yacute;n&yacute; Y&ouml;netme...';
+$OVERVIEW['PREFERENCES'] = 'Email, &THORN;ifre gibi ayarlar&yacute; d&uuml;zenleme... ';
+$OVERVIEW['SETTINGS'] = 'WebsiteBaker i&ccedil;in ayarlar&yacute; d&uuml;zenleme...';
+$OVERVIEW['START'] = 'Y&ouml;netici G&ouml;r&uuml;n&uuml;m&uuml;';
+$OVERVIEW['TEMPLATES'] = 'Websitenizdeki Kal&yacute;plar&yacute; De&eth;i&thorn;tirme Ve D&uuml;zenleme...';
+$OVERVIEW['USERS'] = 'WebsiteBaker kullan&yacute;c&yacute;lar&yacute;n&yacute; d&uuml;zenleme...';
+$OVERVIEW['VIEW'] = 'Yeni bir pencerede sitenizin &ouml;ng&ouml;r&uuml;n&uuml;m&uuml;...';
+
+/* include old languages format */
+if(file_exists(WB_PATH.'/languages/old.format.inc.php'))
+{
+    include(WB_PATH.'/languages/old.format.inc.php');
+}

Property changes on: trunk/languages/TR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/languages/old.format.inc.php
===================================================================
--- trunk/languages/old.format.inc.php	(nonexistent)
+++ trunk/languages/old.format.inc.php	(revision 2)
@@ -0,0 +1,155 @@
+<?php
+/**
+ *
+ * @category        framework
+ * @package         language
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
+
+$MESSAGE['FRONTEND']['SORRY_NO_VIEWING_PERMISSIONS']  = $MESSAGE['FRONTEND_SORRY_NO_VIEWING_PERMISSIONS'] ;
+$MESSAGE['FRONTEND']['SORRY_NO_ACTIVE_SECTIONS']  = $MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'] ;
+$MESSAGE['ADMIN']['INSUFFICIENT_PRIVELLIGES']  = $MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'] ;
+$MESSAGE['LOGIN']['BOTH_BLANK']  = $MESSAGE['LOGIN_BOTH_BLANK'] ;
+$MESSAGE['LOGIN']['USERNAME_BLANK']  = $MESSAGE['LOGIN_USERNAME_BLANK'] ;
+$MESSAGE['LOGIN']['PASSWORD_BLANK']  = $MESSAGE['LOGIN_PASSWORD_BLANK'] ;
+$MESSAGE['LOGIN']['USERNAME_TOO_SHORT']  = $MESSAGE['LOGIN_USERNAME_TOO_SHORT'] ;
+$MESSAGE['LOGIN']['PASSWORD_TOO_SHORT']  = $MESSAGE['LOGIN_PASSWORD_TOO_SHORT'] ;
+$MESSAGE['LOGIN']['USERNAME_TOO_LONG']  = $MESSAGE['LOGIN_USERNAME_TOO_LONG'] ;
+$MESSAGE['LOGIN']['PASSWORD_TOO_LONG']  = $MESSAGE['LOGIN_PASSWORD_TOO_LONG'] ;
+$MESSAGE['LOGIN']['AUTHENTICATION_FAILED']  = $MESSAGE['LOGIN_AUTHENTICATION_FAILED'] ;
+$MESSAGE['SIGNUP']['NO_EMAIL']  = $MESSAGE['SIGNUP_NO_EMAIL'] ;
+$MESSAGE['SIGNUP2']['SUBJECT_LOGIN_INFO']  = $MESSAGE['SIGNUP2_SUBJECT_LOGIN_INFO'] ;
+$MESSAGE['SIGNUP2']['BODY_LOGIN_INFO']  = $MESSAGE['SIGNUP2_BODY_LOGIN_INFO'] ;
+$MESSAGE['SIGNUP2']['BODY_LOGIN_FORGOT']  = $MESSAGE['SIGNUP2_BODY_LOGIN_FORGOT'] ;
+$MESSAGE['FORGOT_PASS']['NO_DATA']  = $MESSAGE['FORGOT_PASS_NO_DATA'] ;
+$MESSAGE['FORGOT_PASS']['EMAIL_NOT_FOUND']  = $MESSAGE['FORGOT_PASS_EMAIL_NOT_FOUND'] ;
+$MESSAGE['FORGOT_PASS']['CANNOT_EMAIL']  = $MESSAGE['FORGOT_PASS_CANNOT_EMAIL'] ;
+$MESSAGE['FORGOT_PASS']['PASSWORD_RESET']  = $MESSAGE['FORGOT_PASS_PASSWORD_RESET'] ;
+$MESSAGE['FORGOT_PASS']['ALREADY_RESET']  = $MESSAGE['FORGOT_PASS_ALREADY_RESET'] ;
+$MESSAGE['START']['WELCOME_MESSAGE']  = $MESSAGE['START_WELCOME_MESSAGE'] ;
+$MESSAGE['START']['INSTALL_DIR_EXISTS']  = $MESSAGE['START_INSTALL_DIR_EXISTS'] ;
+$MESSAGE['START']['CURRENT_USER']  = $MESSAGE['START_CURRENT_USER'] ;
+$MESSAGE['SETTINGS']['UNABLE_OPEN_CONFIG']  = $MESSAGE['SETTINGS_UNABLE_OPEN_CONFIG'] ;
+$MESSAGE['SETTINGS']['UNABLE_WRITE_CONFIG']  = $MESSAGE['SETTINGS_UNABLE_WRITE_CONFIG'] ;
+$MESSAGE['SETTINGS']['SAVED']  = $MESSAGE['SETTINGS_SAVED'] ;
+$MESSAGE['SETTINGS']['MODE_SWITCH_WARNING']  = $MESSAGE['SETTINGS_MODE_SWITCH_WARNING'] ;
+$MESSAGE['SETTINGS']['WORLD_WRITEABLE_WARNING']  = $MESSAGE['SETTINGS_WORLD_WRITEABLE_WARNING'] ;
+$MESSAGE['USERS']['ADDED']  = $MESSAGE['USERS_ADDED'] ;
+$MESSAGE['USERS']['SAVED']  = $MESSAGE['USERS_SAVED'] ;
+$MESSAGE['USERS']['DELETED']  = $MESSAGE['USERS_DELETED'] ;
+$MESSAGE['USERS']['NO_GROUP']  = $MESSAGE['USERS_NO_GROUP'] ;
+$MESSAGE['USERS']['USERNAME_TOO_SHORT']  = $MESSAGE['USERS_USERNAME_TOO_SHORT'] ;
+$MESSAGE['USERS']['PASSWORD_TOO_SHORT']  = $MESSAGE['USERS_PASSWORD_TOO_SHORT'] ;
+$MESSAGE['USERS']['PASSWORD_MISMATCH']  = $MESSAGE['USERS_PASSWORD_MISMATCH'] ;
+$MESSAGE['USERS']['INVALID_EMAIL']  = $MESSAGE['USERS_INVALID_EMAIL'] ;
+$MESSAGE['USERS']['EMAIL_TAKEN']  = $MESSAGE['USERS_EMAIL_TAKEN'] ;
+$MESSAGE['USERS']['USERNAME_TAKEN']  = $MESSAGE['USERS_USERNAME_TAKEN'] ;
+$MESSAGE['USERS']['CHANGING_PASSWORD']  = $MESSAGE['USERS_CHANGING_PASSWORD'] ;
+$MESSAGE['USERS']['CONFIRM_DELETE']  = $MESSAGE['USERS_CONFIRM_DELETE'] ;
+$MESSAGE['GROUPS']['ADDED']  = $MESSAGE['GROUPS_ADDED'] ;
+$MESSAGE['GROUPS']['SAVED']  = $MESSAGE['GROUPS_SAVED'] ;
+$MESSAGE['GROUPS']['DELETED']  = $MESSAGE['GROUPS_DELETED'] ;
+$MESSAGE['GROUPS']['GROUP_NAME_BLANK']  = $MESSAGE['GROUPS_GROUP_NAME_BLANK'] ;
+$MESSAGE['GROUPS']['CONFIRM_DELETE']  = $MESSAGE['GROUPS_CONFIRM_DELETE'] ;
+$MESSAGE['GROUPS']['NO_GROUPS_FOUND']  = $MESSAGE['GROUPS_NO_GROUPS_FOUND'] ;
+$MESSAGE['GROUPS']['GROUP_NAME_EXISTS']  = $MESSAGE['GROUPS_GROUP_NAME_EXISTS'] ;
+$MESSAGE['PREFERENCES']['DETAILS_SAVED']  = $MESSAGE['PREFERENCES_DETAILS_SAVED'] ;
+$MESSAGE['PREFERENCES']['EMAIL_UPDATED']  = $MESSAGE['PREFERENCES_EMAIL_UPDATED'] ;
+$MESSAGE['PREFERENCES']['CURRENT_PASSWORD_INCORRECT']  = $MESSAGE['PREFERENCES_CURRENT_PASSWORD_INCORRECT'] ;
+$MESSAGE['PREFERENCES']['PASSWORD_CHANGED']  = $MESSAGE['PREFERENCES_PASSWORD_CHANGED'] ;
+$MESSAGE['PREFERENCES']['INVALID_CHARS']  = $MESSAGE['PREFERENCES_INVALID_CHARS'] ;
+$MESSAGE['TEMPLATES']['CHANGE_TEMPLATE_NOTICE']  = $MESSAGE['TEMPLATES_CHANGE_TEMPLATE_NOTICE'] ;
+$MESSAGE['MEDIA']['DIR_DOT_DOT_SLASH']  = $MESSAGE['MEDIA_DIR_DOT_DOT_SLASH'] ;
+$MESSAGE['MEDIA']['DIR_DOES_NOT_EXIST']  = $MESSAGE['MEDIA_DIR_DOES_NOT_EXIST'] ;
+$MESSAGE['MEDIA']['TARGET_DOT_DOT_SLASH']  = $MESSAGE['MEDIA_TARGET_DOT_DOT_SLASH'] ;
+$MESSAGE['MEDIA']['NAME_DOT_DOT_SLASH']  = $MESSAGE['MEDIA_NAME_DOT_DOT_SLASH'] ;
+$MESSAGE['MEDIA']['NAME_INDEX_PHP']  = $MESSAGE['MEDIA_NAME_INDEX_PHP'] ;
+$MESSAGE['MEDIA']['NONE_FOUND']  = $MESSAGE['MEDIA_NONE_FOUND'] ;
+$MESSAGE['MEDIA']['FILE_NOT_FOUND']  = $MESSAGE['MEDIA_FILE_NOT_FOUND'] ;
+$MESSAGE['MEDIA']['DELETED_FILE']  = $MESSAGE['MEDIA_DELETED_FILE'] ;
+$MESSAGE['MEDIA']['DELETED_DIR']  = $MESSAGE['MEDIA_DELETED_DIR'] ;
+$MESSAGE['MEDIA']['CONFIRM_DELETE']  = $MESSAGE['MEDIA_CONFIRM_DELETE'] ;
+$MESSAGE['MEDIA']['CANNOT_DELETE_FILE']  = $MESSAGE['MEDIA_CANNOT_DELETE_FILE'] ;
+$MESSAGE['MEDIA']['CANNOT_DELETE_DIR']  = $MESSAGE['MEDIA_CANNOT_DELETE_DIR'] ;
+$MESSAGE['MEDIA']['BLANK_NAME']  = $MESSAGE['MEDIA_BLANK_NAME'] ;
+$MESSAGE['MEDIA']['BLANK_EXTENSION']  = $MESSAGE['MEDIA_BLANK_EXTENSION'] ;
+$MESSAGE['MEDIA']['RENAMED']  = $MESSAGE['MEDIA_RENAMED'] ;
+$MESSAGE['MEDIA']['CANNOT_RENAME']  = $MESSAGE['MEDIA_CANNOT_RENAME'] ;
+$MESSAGE['MEDIA']['FILE_EXISTS']  = $MESSAGE['MEDIA_FILE_EXISTS'] ;
+$MESSAGE['MEDIA']['DIR_EXISTS']  = $MESSAGE['MEDIA_DIR_EXISTS'] ;
+$MESSAGE['MEDIA']['DIR_MADE']  = $MESSAGE['MEDIA_DIR_MADE'] ;
+$MESSAGE['MEDIA']['DIR_NOT_MADE']  = $MESSAGE['MEDIA_DIR_NOT_MADE'] ;
+$MESSAGE['MEDIA']['SINGLE_UPLOADED']  = $MESSAGE['MEDIA_SINGLE_UPLOADED'] ;
+$MESSAGE['MEDIA']['UPLOADED']  = $MESSAGE['MEDIA_UPLOADED'] ;
+$MESSAGE['PAGES']['ADDED']  = $MESSAGE['PAGES_ADDED'] ;
+$MESSAGE['PAGES']['ADDED_HEADING']  = $MESSAGE['PAGES_ADDED_HEADING'] ;
+$MESSAGE['PAGES']['PAGE_EXISTS']  = $MESSAGE['PAGES_PAGE_EXISTS'] ;
+$MESSAGE['PAGES']['CANNOT_CREATE_ACCESS_FILE']  = $MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'] ;
+$MESSAGE['PAGES']['CANNOT_DELETE_ACCESS_FILE']  = $MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] ;
+$MESSAGE['PAGES']['NOT_FOUND']  = $MESSAGE['PAGES_NOT_FOUND'] ;
+$MESSAGE['PAGES']['SAVED']  = $MESSAGE['PAGES_SAVED'] ;
+$MESSAGE['PAGES']['SAVED_SETTINGS']  = $MESSAGE['PAGES_SAVED_SETTINGS'] ;
+$MESSAGE['PAGES']['NOT_SAVED']  = $MESSAGE['PAGES_NOT_SAVED'] ;
+$MESSAGE['PAGES']['DELETE_CONFIRM']  = $MESSAGE['PAGES_DELETE_CONFIRM'] ;
+$MESSAGE['PAGES']['DELETED']  = $MESSAGE['PAGES_DELETED'] ;
+$MESSAGE['PAGES']['RESTORED']  = $MESSAGE['PAGES_RESTORED'] ;
+$MESSAGE['PAGES']['BLANK_PAGE_TITLE']  = $MESSAGE['PAGES_BLANK_PAGE_TITLE'] ;
+$MESSAGE['PAGES']['BLANK_MENU_TITLE']  = $MESSAGE['PAGES_BLANK_MENU_TITLE'] ;
+$MESSAGE['PAGES']['REORDERED']  = $MESSAGE['PAGES_REORDERED'] ;
+$MESSAGE['PAGES']['CANNOT_REORDER']  = $MESSAGE['PAGES_CANNOT_REORDER'] ;
+$MESSAGE['PAGES']['INSUFFICIENT_PERMISSIONS']  = $MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] ;
+$MESSAGE['PAGES']['INTRO_NOT_WRITABLE']  = $MESSAGE['PAGES_INTRO_NOT_WRITABLE'] ;
+$MESSAGE['PAGES']['INTRO_SAVED']  = $MESSAGE['PAGES_INTRO_SAVED'] ;
+$MESSAGE['PAGES']['LAST_MODIFIED']  = $MESSAGE['PAGES_LAST_MODIFIED'] ;
+$MESSAGE['PAGES']['INTRO_LINK']  = $MESSAGE['PAGES_INTRO_LINK'] ;
+$MESSAGE['PAGES']['SECTIONS_PROPERTIES_SAVED']  = $MESSAGE['PAGES_SECTIONS_PROPERTIES_SAVED'] ;
+$MESSAGE['PAGES']['RETURN_TO_PAGES']  = $MESSAGE['PAGES_RETURN_TO_PAGES'] ;
+$MESSAGE['GENERIC']['FILL_IN_ALL']  = $MESSAGE['GENERIC_FILL_IN_ALL'] ;
+$MESSAGE['GENERIC']['FILE_TYPE']  = $MESSAGE['GENERIC_FILE_TYPE'] ;
+$MESSAGE['GENERIC']['FILE_TYPES']  = $MESSAGE['GENERIC_FILE_TYPES'] ;
+$MESSAGE['GENERIC']['CANNOT_UPLOAD']  = $MESSAGE['GENERIC_CANNOT_UPLOAD'] ;
+$MESSAGE['GENERIC']['ALREADY_INSTALLED']  = $MESSAGE['GENERIC_ALREADY_INSTALLED'] ;
+$MESSAGE['GENERIC']['NOT_INSTALLED']  = $MESSAGE['GENERIC_NOT_INSTALLED'] ;
+$MESSAGE['GENERIC']['CANNOT_UNINSTALL']  = $MESSAGE['GENERIC_CANNOT_UNINSTALL'] ;
+$MESSAGE['GENERIC']['CANNOT_UNZIP']  = $MESSAGE['GENERIC_CANNOT_UNZIP'] ;
+$MESSAGE['GENERIC']['INSTALLED']  = $MESSAGE['GENERIC_INSTALLED'] ;
+$MESSAGE['GENERIC']['UPGRADED']  = $MESSAGE['GENERIC_UPGRADED'] ;
+$MESSAGE['GENERIC']['UNINSTALLED']  = $MESSAGE['GENERIC_UNINSTALLED'] ;
+$MESSAGE['GENERIC']['BAD_PERMISSIONS']  = $MESSAGE['GENERIC_BAD_PERMISSIONS'] ;
+$MESSAGE['GENERIC']['INVALID']  = $MESSAGE['GENERIC_INVALID'] ;
+$MESSAGE['GENERIC']['CANNOT_UNINSTALL_IN_USE']  = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE'] ;
+$MESSAGE['GENERIC']['SECURITY_OFFENSE']  = $MESSAGE['GENERIC_SECURITY_OFFENSE'] ;
+$MESSAGE['GENERIC']['CANNOT_UNINSTALL_IN_USE_TMPL']  = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL'] ;
+$MESSAGE['GENERIC']['CANNOT_UNINSTALL_IN_USE_TMPL_PAGES']  = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IN_USE_TMPL_PAGES'] ;
+$MESSAGE['GENERIC']['CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE']  = $MESSAGE['GENERIC_CANNOT_UNINSTALL_IS_DEFAULT_TEMPLATE'] ;
+$MESSAGE['GENERIC']['WEBSITE_UNDER_CONSTRUCTION']  = $MESSAGE['GENERIC_WEBSITE_UNDER_CONSTRUCTION'] ;
+$MESSAGE['GENERIC']['PLEASE_CHECK_BACK_SOON']  = $MESSAGE['GENERIC_PLEASE_CHECK_BACK_SOON'] ;
+$MESSAGE['GENERIC']['PLEASE_BE_PATIENT']  = $MESSAGE['GENERIC_PLEASE_BE_PATIENT'] ;
+$MESSAGE['GENERIC']['ERROR_OPENING_FILE']  = $MESSAGE['GENERIC_ERROR_OPENING_FILE'] ;
+$MESSAGE['GENERIC']['INVALID_ADDON_FILE']  = $MESSAGE['GENERIC_INVALID_ADDON_FILE'] ;
+$MESSAGE['GENERIC']['INVALID_LANGUAGE_FILE']  = $MESSAGE['GENERIC_INVALID_LANGUAGE_FILE'] ;
+$MESSAGE['MOD_FORM']['REQUIRED_FIELDS']  = $MESSAGE['MOD_FORM_REQUIRED_FIELDS'] ;
+$MESSAGE['MOD_FORM']['EXCESS_SUBMISSIONS']  = $MESSAGE['MOD_FORM_EXCESS_SUBMISSIONS'] ;
+$MESSAGE['MOD_FORM']['INCORRECT_CAPTCHA']  = $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] ;
+$MESSAGE['ADDON']['RELOAD']  = $MESSAGE['ADDON_RELOAD'] ;
+$MESSAGE['ADDON']['ERROR_RELOAD']  = $MESSAGE['ADDON_ERROR_RELOAD'] ;
+$MESSAGE['ADDON']['MODULES_RELOADED']  = $MESSAGE['ADDON_MODULES_RELOADED'] ;
+$MESSAGE['ADDON']['TEMPLATES_RELOADED']  = $MESSAGE['ADDON_TEMPLATES_RELOADED'] ;
+$MESSAGE['ADDON']['LANGUAGES_RELOADED']  = $MESSAGE['ADDON_LANGUAGES_RELOADED'] ;
+$MESSAGE['ADDON']['PRECHECK_FAILED']  = $MESSAGE['ADDON_PRECHECK_FAILED'] ;
+$MESSAGE['ADDON']['MANUAL_INSTALLATION']  = $MESSAGE['ADDON_MANUAL_INSTALLATION'] ;
+$MESSAGE['ADDON']['MANUAL_INSTALLATION_WARNING']  = $MESSAGE['ADDON_MANUAL_INSTALLATION_WARNING'] ;
+

Property changes on: trunk/languages/old.format.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/media/PLACEHOLDER
===================================================================
--- trunk/media/PLACEHOLDER	(nonexistent)
+++ trunk/media/PLACEHOLDER	(revision 2)
@@ -0,0 +1 @@
+/* this file can be removed after installation */
\ No newline at end of file
Index: trunk/modules/SimpleCommandDispatcher.inc
===================================================================
--- trunk/modules/SimpleCommandDispatcher.inc	(nonexistent)
+++ trunk/modules/SimpleCommandDispatcher.inc	(revision 2)
@@ -0,0 +1,148 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+    require (__DIR__.'/SimpleRegister.php');
+
+    // detect if system running backend or frontend is already set by SimpleRegister
+//    $oApp = (isset($GLOBALS['admin']) ? $GLOBALS['admin'] : $GLOBALS['wb']);
+    $bIsBackend = ($oApp instanceof admin);
+    // set addon depending path / url
+    $sAddonPath = $oReg->AppPath.'modules/'.$sAddonName;
+    $sAddonUrl  = $oReg->AppUrl.'modules/'.$sAddonName;
+    $sAddonRel = '/modules/'.basename(__DIR__);
+    $sAddonThemeRel ='/themes/default';
+    // define the theme to use -----------------------------------------------------------
+    if (is_readable($sAddonPath.'/themes/default')) {
+    // first set fallback to system default theme
+        $sAddonThemePath = $sAddonPath.'/themes/default';
+        $sAddonThemeUrl  = $sAddonUrl.'/themes/default';
+    }
+    if (is_readable($sAddonPath.'/themes/'.$oReg->DefaultTheme)) {
+    // overload with the selected theme if accessible
+        $sAddonThemePath = $sAddonPath.'/themes/'.$oReg->DefaultTheme;
+        $sAddonThemeUrl  = $sAddonUrl.'/themes/'.$oReg->DefaultTheme;
+    }
+    // define the template to use --------------------------------------------------------
+    if (is_readable($sAddonPath.'/templates/default')) {
+        // first set fallback to system default template
+        $sAddonTemplatePath = $sAddonPath.'/templates/default';
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/default';
+    }
+    if (is_readable($sAddonPath.'/templates/'.$oReg->DefaultTemplate)) {
+        // try setting to the template of global settings
+        $sAddonTemplatePath = $sAddonPath.'/templates/'.$oReg->DefaultTemplate;
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/'.$oReg->DefaultTemplate;
+    }
+    if (!$bIsBackend && is_readable($sAddonPath.'/templates/'.$oReg->Template)) {
+        // try setting to the template of page depending settings
+        $sAddonTemplatePath = $sAddonPath.'/templates/'.$oReg->Template;
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/'.$oReg->Template;
+    }
+    // load addon depending language file ------------------------------------------------
+    if (is_readable($sAddonPath.'/languages/EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sAddonPath.'/languages/EN.php';
+    }
+    if (is_readable($sAddonPath.'/languages/'.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sAddonPath.'/languages/'.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sAddonPath.'/languages/'.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sAddonPath.'/languages/'.$oReg->Language.'.php';
+    }
+    // load addon Theme/Template depending language file ---------------------------------
+    $sTmp = ($bIsBackend ? $sAddonThemePath : $sAddonTemplatePath).'/languages/';
+    if (is_readable($sTmp.'EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sTmp.'EN.php';
+    }
+    if (is_readable($sTmp.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sTmp.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sTmp.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sTmp.$oReg->Language.'.php';
+    }
+    // Simple Command Dispatcher ---------------------------------------------------------
+     // Include the ordering class
+    if (!class_exists('order')) {
+    include $oReg->AppPath.'framework/class.order.php';
+    }
+    if (!class_exists('admin')) {
+        include $oReg->AppPath.'framework/class.admin.php';
+    }
+    if (!class_exists('Translate')) {
+        include $oReg->AppPath.'framework/Translate.php';
+    }
+    Translate::getInstance ()->enableAddon ('modules\\'.$sAddonName);
+    // sanitize command from compatibility file
+    $sCommand = (isset($sCommand) ? strtolower($sCommand) : '');
+    // sanitize/validate request var 'cmd'
+    $sCmd = preg_replace(
+        '/[^a-z\/0-1]/siu',
+        '',
+        (isset($_REQUEST['cmd']) ? strtolower($_REQUEST['cmd']) : '')
+    );
+    // build valid sCommand string
+    if (($sCommand && $sCmd)) {
+        if (!preg_match('/^'.$sCommand.'/si', $sCmd)) {
+            // concate both arguments if needed
+            $sCommand .= '/'.$sCmd;
+        } else {
+            $sCommand = $sCmd;
+        }
+
+$sCmd = '';
+    }
+    $sCommand = 'cmd'.str_replace( // remove spaces and add prefix 'cmd'
+        ' ', '',
+        ucfirst( // make first char of every word to uppercase
+            str_replace( // change '/' to space
+                '/', ' ',
+                preg_replace( // change leading 'add/' to 'modify/'
+                    '/^add\//s',
+                    'modify/',
+                    trim(($sCommand ?: $sCmd), '/') // remove leading and trailing slashes
+                )
+            )
+        )
+    );
+    // execute command -------------------------------------------------------------------
+    if (is_readable($sAddonPath.'/cmd/'.$sCommand.'.inc') ) {
+        include($sAddonPath.'/cmd/'.$sCommand.'.inc');
+    } else {
+        throw new Exception('call of invalid command ['.$sCommand.'] for [modules/'.$sAddonName.'] failed!');
+    }
+
+// end of file
\ No newline at end of file

Property changes on: trunk/modules/SimpleCommandDispatcher.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/SimpleRegister.php
===================================================================
--- trunk/modules/SimpleRegister.php	(nonexistent)
+++ trunk/modules/SimpleRegister.php	(revision 2)
@@ -0,0 +1,195 @@
+<?php
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+//if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+if (!isset( $oReg ) && !class_exists('WbAdaptor')) {
+    $oThis = new stdClass;
+    // first reinitialize arrays
+    $oThis->aObjects = array('Db' => null, 'Trans' => null, 'App' => null);
+    $oApp    = $oThis->aObjects['App']     = ( isset($GLOBALS['wb']) ?$GLOBALS['wb']: null );
+    $oApp    = $oThis->aObjects['App']     = ( isset($GLOBALS['admin']) ?$GLOBALS['admin']: $oApp );
+    $oDb     = $oThis->aObjects['Db']      = ( isset($GLOBALS['database']) ?$GLOBALS['database']: null );
+    $oTrans  = $oThis->aObjects['Trans']   = (class_exists('Translate') ?Translate::getInstance (): null );
+    $oThis->aReservedVars = array('Db', 'Trans', 'App');
+    $oThis->aProperties = array(
+        'System' => array(),
+        'Request' => array()
+    );
+    // get all defined constants
+    $aConsts = get_defined_constants(true);
+    // iterate all user defined constants
+    foreach ($aConsts['user'] as $sKey=>$sVal) {
+        if (in_array($sKey, $oThis->aReservedVars)) { continue; }
+    // skip possible existing database constants
+        if (preg_match('/^db_/i', $sKey)) { continue; }
+    // change all path items to trailing slash scheme and assign the new naming syntax
+        switch($sKey):
+            case 'DEBUG':
+                $oThis->aProperties['System']['Debug'] = intval($sVal);
+                $oThis->aProperties['System']['DebugLevel'] = intval($sVal);
+                break;
+            case 'WB_URL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AppUrl';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'WB_REL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AppRel';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'WB_PATH':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AppPath';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'ADMIN_URL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AcpUrl';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'ADMIN_REL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AcpRel';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'ADMIN_PATH':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AcpPath';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'THEME_URL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'ThemeUrl';
+                $oThis->aProperties['Request'][$sKey] = $sVal;
+                break;
+            case 'THEME_REL':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'ThemeRel';
+                $oThis->aProperties['Request'][$sKey] = $sVal;
+                break;
+            case 'THEME_PATH':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'ThemePath';
+                $oThis->aProperties['Request'][$sKey] = $sVal;
+                break;
+            case 'TMP_PATH':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'TempPath';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'ADMIN_DIRECTORY':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'AcpDir';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'DOCUMENT_ROOT':
+                $sVal = rtrim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'DocumentRoot';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'PAGES_DIRECTORY':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/').'/';
+                $sVal = $sVal=='/' ? '' : $sVal;
+                $sKey = 'PagesDir';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'MEDIA_DIRECTORY':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/').'/';
+                $sKey = 'MediaDir';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'DEFAULT_TEMPLATE':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/');
+                $sKey = 'DefaultTemplate';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'TEMPLATE':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/');
+                $sKey = 'Template';
+                $oThis->aProperties['Request'][$sKey] = $sVal;
+                break;
+            case 'DEFAULT_THEME':
+                $sVal = trim(str_replace('\\', '/', $sVal), '/');
+                $sKey = 'DefaultTheme';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                $oThis->aProperties['Request']['Theme'] = trim($sVal, '/');
+                break;
+            case 'OCTAL_FILE_MODE':
+                $sVal = ((intval($sVal) & ~0111)|0600); // o-x/g-x/u-x/o+rw
+                $sKey = 'OctalFileMode';
+                $oThis->aProperties['System']['OctalFileMode'] = $sVal;
+                $oThis->aProperties['System']['FileModeOctal'] = $sVal;
+                break;
+            case 'OCTAL_DIR_MODE':
+                $sVal = (intval($sVal) |0711); // o+rwx/g+x/u+x
+                $sKey = 'OctalDirMode';
+                $oThis->aProperties['System']['OctalDirMode'] = $sVal;
+                $oThis->aProperties['System']['DirModeOctal'] = $sVal;
+                break;
+            case 'WB_VERSION':
+                $sKey = 'AppVersion';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'WB_REVISION':
+                $sKey = 'AppRevision';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'WB_SP':
+                $sKey = 'AppServicePack';
+                $oThis->aProperties['System'][$sKey] = $sVal;
+                break;
+            case 'PAGE_ICON_DIR':
+                $sKey = 'PageIconDir';
+                $sVal = trim(str_replace('\\', '/', $sVal), '/').'/';
+                $oThis->aProperties['Request'][$sKey] = $sVal;
+                break;
+            case 'TEMPLATE_DIR':
+                break;
+            case 'TEMPLATE_DIR':
+                break;
+            default:
+                $aSysList = array(
+                // list of values which should be placed in ['System']
+                    'DefaultCharset','DefaultDateFormat','DefaultLanguage','DefaultTimeFormat',
+                    'DefaultTimezone','DevInfos','Timezone'
+                );
+                // convert 'true' or 'false' strings into boolean
+                $sVal = ($sVal == 'true' ? true : ($sVal == 'false' ? false : $sVal));
+                // reformatting constant names
+                $sKey = str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower($sKey))));
+                if (in_array($sKey, $aSysList)) {
+                    $oThis->aProperties['System'][$sKey] = $sVal;
+                } else {
+                    $oThis->aProperties['Request'][$sKey] = $sVal;
+                }
+                break;
+        endswitch;
+    }
+/* now set values which needs dependencies */
+        if (!isset($oThis->aProperties['Request']['Template']) || $oThis->aProperties['Request']['Template'] == '') {
+            $oThis->aProperties['Request']['Template'] = $oThis->aProperties['System']['DefaultTemplate'];
+        }
+        $oThis->aProperties['System']['AppName'] = 'WebsiteBaker';
+        if (isset($oThis->aProperties['Request']['Template'])) {
+            $oThis->aProperties['Request']['TemplateDir']  = 'templates/'.$oThis->aProperties['Request']['Template'].'/';
+            $oThis->aProperties['Request']['TemplateUrl']  = $oThis->aProperties['System']['AppUrl'].'templates/'.$oThis->aProperties['Request']['Template'].'/';
+            $oThis->aProperties['Request']['TemplatePath'] = $oThis->aProperties['System']['AppPath'].'templates/'.$oThis->aProperties['Request']['Template'].'/';
+        }
+/* correct PageIconDir if necessary */
+//        $oThis->aProperties['Request']['PageIconDir'] = str_replace('/*/', '/'.$oThis->aProperties['Request']['Template'], $oReg->aProperties['Request']['PageIconDir']);
+        $oThis->aProperties['System']['VarPath'] = $oThis->aProperties['System']['AppPath'].'var/';
+        $oThis->aProperties['System']['VarUrl'] = $oThis->aProperties['System']['AppUrl'].'var/';
+//        $oThis->aProperties['System']['VarRel'] = $oThis->aProperties['System']['AppRel'].'var/';
+/* cleanup arrays */
+        $oThis->aProperties['Request'] = array_diff_key(
+            $oThis->aProperties['Request'],
+            $oThis->aProperties['System']
+        );
+        ksort($oThis->aProperties['System']);
+        ksort($oThis->aProperties['Request']);
+        $aReg = array_merge( $oThis->aProperties['System'], $oThis->aProperties['Request'],  $oThis->aObjects );
+        $oReg = new ArrayObject( $aReg, ArrayObject::ARRAY_AS_PROPS );
+}

Property changes on: trunk/modules/SimpleRegister.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/admin.php
===================================================================
--- trunk/modules/admin.php	(nonexistent)
+++ trunk/modules/admin.php	(revision 2)
@@ -0,0 +1,244 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+/* -------------------------------------------------------- */
+
+// Create new admin object, you can set the next variable in your module
+// to print with or without header, default is with header
+// it is recommed to set the variable before including the /modules/admin.php
+    $admin_header = (!isset($admin_header)) ? true : $admin_header;
+    if(!class_exists('admin', false)){ include(WB_PATH.'/framework/class.admin.php'); }
+    $admin = new admin('Pages', 'pages_modify',(bool)$admin_header);
+// get request method
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $aRequestVars  = (isset(${$requestMethod}) ? ${$requestMethod} : null);
+// Get page id (on error page_id == 0))
+    $page_id = intval(isset(${$requestMethod}['page_id'])
+                      ? ${$requestMethod}['page_id']
+                      : (isset($page_id) ? $page_id : 0)
+               );
+
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $section_id = intval(isset(${$requestMethod}['section_id'])
+                         ? ${$requestMethod}['section_id']
+                         : (isset($section_id) ? $section_id : 0)
+                  );
+
+$module_dir = basename( dirname($_SERVER["SCRIPT_NAME"]) );
+
+// Create js back link
+$js_back = ADMIN_URL.'/pages/sections.php?page_id='.$page_id;
+
+// Get perms
+// unset($admin_header);
+if( !is_numeric( $page_id ) ) {
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+} elseif ($page_id > 0) {
+      $page = $admin->get_page_details($page_id, ADMIN_URL.'/pages/index.php' );
+} else {
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'], ADMIN_URL );
+}
+
+$old_admin_groups = explode(',', str_replace('_', '', $page['admin_groups']));
+$old_admin_users = explode(',', str_replace('_', '', $page['admin_users']));
+
+$in_group = false;
+foreach($admin->get_groups_id() as $cur_gid){
+    if (in_array($cur_gid, $old_admin_groups)) {
+        $in_group = true;
+    }
+}
+
+if((!$in_group) && !is_numeric(array_search($admin->get_user_id(), $old_admin_users))) {
+    print $admin->get_group_id().$admin->get_user_id();
+    // print_r ($old_admin_groups);
+    $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS']  );
+}
+
+// some additional security checks:
+// Check whether the section_id belongs to the page_id at all
+if( !is_numeric( $section_id ) ) {
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+    } elseif ($section_id > 0) {
+    $section = $admin->get_section_details($section_id, ADMIN_URL.'/pages/index.php');
+    if (!$admin->get_permission($section['module'], 'module'))
+    {
+        $admin->print_error($MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'], ADMIN_URL );
+    }
+}
+
+// Workout if the developer wants to show the info banner
+if(isset($print_info_banner) && $print_info_banner == true) {
+    // Get page details already defined
+
+    // Get display name of person who last modified the page
+    $user = $admin->get_user_details($page['modified_by']);
+
+    // Convert the unix ts for modified_when to human a readable form
+    $modified_ts = 'Unknown';
+    if($page['modified_when'] != 0) {
+        $modified_ts = gmdate(TIME_FORMAT.', '.DATE_FORMAT, $page['modified_when']+TIMEZONE);
+    }
+
+    // Setup template object, parse vars to it, then parse it
+    // Create new template object
+    $template = new Template(dirname($admin->correct_theme_source('pages_modify.htt')));
+    // $template->debug = true;
+    $template->set_file('page', 'pages_modify.htt');
+    $template->set_block('page', 'main_block', 'main');
+    $template->set_block('main_block', 'section_block', 'section_list');
+    $template->set_block('section_block', 'block_block', 'block_list');
+    $template->set_var(array(
+                'PAGE_ID' => $page['page_id'],
+                // 'PAGE_IDKEY' => $admin->getIDKEY($page['page_id']),
+                'PAGE_IDKEY' => $page['page_id'],
+                'PAGE_TITLE' => ($page['page_title']),
+                'MENU_TITLE' => ($page['menu_title']),
+                'ADMIN_URL' => ADMIN_URL,
+                'WB_URL' => WB_URL,
+                'THEME_URL' => THEME_URL
+                ));
+
+    $template->set_var(array(
+                'MODIFIED_BY' => $user['display_name'],
+                'MODIFIED_BY_USERNAME' => $user['username'],
+                'MODIFIED_WHEN' => $modified_ts,
+                'LAST_MODIFIED' => $MESSAGE['PAGES_LAST_MODIFIED'],
+                ));
+
+    $template->set_block('main_block', 'show_modify_block', 'show_modify');
+    if($modified_ts == 'Unknown')
+    {
+        $template->set_block('show_modify', '');
+        $template->set_var('CLASS_DISPLAY_MODIFIED', 'hide');
+
+    } else {
+        $template->set_var('CLASS_DISPLAY_MODIFIED', '');
+        $template->parse('show_modify', 'show_modify_block', true);
+    }
+
+    // Work-out if we should show the "manage sections" link
+    $sql  = 'SELECT `section_id` FROM `'.TABLE_PREFIX.'sections` WHERE `page_id` = '.(int)$page_id.' ';
+    $sql .= 'AND `module` = "menu_link"';
+    $query_sections = $database->query($sql);
+
+    $template->set_block('main_block', 'show_section_block', 'show_section');
+    if($query_sections->numRows() > 0)
+    {
+        $template->set_block('show_section', '');
+        $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+
+    } elseif(MANAGE_SECTIONS == 'enabled')
+    {
+
+        $template->set_var('TEXT_MANAGE_SECTIONS', $HEADING['MANAGE_SECTIONS']);
+        $template->parse('show_section', 'show_section_block', true);
+
+    } else {
+        $template->set_block('show_section', '');
+        $template->set_var('DISPLAY_MANAGE_SECTIONS', 'display:none;');
+
+    }
+
+    // Insert language TEXT
+    $template->set_var(array(
+                    'TEXT_CURRENT_PAGE' => $TEXT['CURRENT_PAGE'],
+                    'TEXT_CHANGE_SETTINGS' => $TEXT['CHANGE_SETTINGS'],
+                    'HEADING_MODIFY_PAGE' => $HEADING['MODIFY_PAGE']
+                    ));
+
+    // Parse and print header template
+    $template->parse('main', 'main_block', false);
+    $template->pparse('output', 'page');
+    // unset($print_info_banner);
+    unset($template);
+    $sSectionBlock = '<div class="block-outer">'."\n";
+
+    if (/*SECTION_BLOCKS && */isset($section) ) {
+        if (isset($block[$section['block']]) && trim(strip_tags(($block[$section['block']]))) != '')
+        {
+            $block_name = htmlentities(strip_tags($block[$section['block']]));
+        } else {
+            if ($section['block'] == 1)
+                     {
+                $block_name = $TEXT['MAIN'];
+            } else {
+                $block_name = '#' . (int) $section['block'];
+            }
+        }
+        $now = time();
+        $bSectionInactive = !(($now<=$section['publ_end'] || $section['publ_end']==0) && ($now>=$section['publ_start'] || $section['publ_start']==0));
+//        $sSectionInfoLine  = ($bSectionInactive ? false: true);
+        $sSectionInfoLine  = ($bSectionInactive ? 'inactive': 'active');
+//        $sSectionInfoLine  = ($bSectionInactive ? '<div class="section-inactive">': '<div class="section-active">')."\n" ;
+/*
+        $sec_anchor = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? 'id="'.SEC_ANCHOR.$section['section_id'].'"' : '');
+        $sSectionInfoLine = '<div class="section-info" '.$sec_anchor.' ><b>'.$TEXT['BLOCK']
+                          . ': </b>'.$block_name.' ('.$section['block'].') <b> Modul: </b>'
+                          . $section['module'].'<b>  ID: </b>'.$section_id.'</div>'.PHP_EOL;
+        echo $sSectionInfoLine;
+*/
+        $sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : '' );
+        $sCallingScript = $_SERVER['SCRIPT_NAME'];
+        $data = array();
+        echo $sSectionBlock;
+
+        $tpl = new Template(dirname($admin->correct_theme_source('SectionInfoLine.htt')),'keep');
+        // $template->debug = true;
+        $tpl->set_file('page', 'SectionInfoLine.htt');
+
+        $tpl->set_block('page', 'main_block', 'main');
+        $tpl->set_block('main_block', 'section_block', 'section_save');
+
+        $data['aTarget.SectionIdPrefix'] = $sSectionIdPrefix.$section_id;
+        $data['aTarget.SectionInfoLine'] = $sSectionInfoLine;
+        $data['aTarget.SectionIdPrefix'] = $sSectionIdPrefix.$section_id;
+        $data['aTarget.sectionBlock'] = $section['block'];
+        $data['aTarget.SectionId'] = $section_id;
+        $data['aTarget.pageId'] = $page_id;
+        $data['aTarget.FTAN'] = $admin->getFTAN();
+        $data['aTarget.BlockName'] = $block_name;
+        $data['aTarget.sectionUrl'] = ADMIN_URL.'/pages/';
+        $data['aTarget.sectionModule'] = $section['module'];
+        $data['aTarget.title'] = $section['title'];
+        $tpl->parse('section_save', '');
+        if( preg_match( '/'.preg_quote(ADMIN_PATH,'/').'\/pages\/(settings|sections)\.php$/is', $sCallingScript)) {
+            if( $admin->get_permission('pages_settings') ) {
+                $data['lang.TEXT_SUBMIT'] = $TEXT['SAVE'];
+                $tpl->parse('section_save', 'section_block');
+            }
+        }
+        $tpl->set_var($data);
+        $tpl->parse('main', 'main_block', false);
+        $tpl->pparse('output', 'page');
+        unset($tpl);
+    }
+//print '<pre>';print_r( $aTokens = unserialize($_SESSION['TOKENS']) );print '</pre>';
+} //
+
+// Work-out if the developer wants us to update the timestamp for when the page was last modified
+if(isset($update_when_modified) && $update_when_modified == true) {
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+          . '`modified_when` = '.time().','
+          . '`modified_by` = '.$admin->get_user_id().' '
+          . 'WHERE `page_id` = '.$page_id;
+    $database->query($sql);
+}

Property changes on: trunk/modules/admin.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/FTAN_SUPPORTED
===================================================================
--- trunk/modules/captcha_control/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/captcha_control/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/captcha_control/index.php
===================================================================
--- trunk/modules/captcha_control/index.php	(nonexistent)
+++ trunk/modules/captcha_control/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        captcha_control
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/captcha_control/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/info.php
===================================================================
--- trunk/modules/captcha_control/info.php	(nonexistent)
+++ trunk/modules/captcha_control/info.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         captcha_control
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$module_directory   = 'captcha_control';
+$module_name        = 'Captcha/Spam-Protection v1.2.4';
+$module_function    = 'tool';
+$module_version     = '1.2.4';
+$module_platform    = '2.8.3 SP6';
+$module_author      = 'Thomas Hornik (thorn)';
+$module_license     = 'GNU General Public License';
+$module_description = 'Admin-Tool to control CAPTCHA and ASP';

Property changes on: trunk/modules/captcha_control/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/install-data.sql
===================================================================
--- trunk/modules/captcha_control/install-data.sql	(nonexistent)
+++ trunk/modules/captcha_control/install-data.sql	(revision 2)
@@ -0,0 +1,26 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 01. Feb 2016 um 19:54
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+-- --------------------------------------------------------
+-- Database structure for module 'captcha_control'
+--
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {FIELD_COLLATION}
+--
+-- --------------------------------------------------------
+--
+--
+-- Daten für Tabelle `mod_captcha_control`
+--
+
+INSERT INTO `{TABLE_PREFIX}mod_captcha_control` (`enabled_captcha`, `enabled_asp`, `captcha_type`, `asp_session_min_age`, `asp_view_min_age`, `asp_input_min_age`, `ct_text`) VALUES
+( 1, 1, 'calc_image', 20, 10, 5, '');
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Property changes on: trunk/modules/captcha_control/install-data.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/install-struct.sql
===================================================================
--- trunk/modules/captcha_control/install-struct.sql	(nonexistent)
+++ trunk/modules/captcha_control/install-struct.sql	(revision 2)
@@ -0,0 +1,35 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 01. Feb 2016 um 19:54
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+-- --------------------------------------------------------
+-- Database structure for module 'captcha_control'
+--
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {FIELD_COLLATION}
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `{TABLE_PREFIX}mod_captcha_control`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_captcha_control`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_captcha_control` (
+  `enabled_captcha` int(11) NOT NULL DEFAULT '1',
+  `enabled_asp` int(11) NOT NULL DEFAULT '1',
+  `captcha_type` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT 'calc_text',
+  `asp_session_min_age` int(11) NOT NULL DEFAULT '20',
+  `asp_view_min_age` int(11) NOT NULL DEFAULT '10',
+  `asp_input_min_age` int(11) NOT NULL DEFAULT '5',
+  `ct_text` longtext{FIELD_COLLATION} NOT NULL
+){TABLE_ENGINE};
+--
+-- Daten für Tabelle `{TABLE_PREFIX}mod_captcha_control`
+--
+INSERT INTO `{TABLE_PREFIX}mod_captcha_control`
+SET `captcha_type`='calc_text', `ct_text`='';
+-- necessary fields only. all others will be set to their default values
+-- fields without an default MUST be set manualy in any case

Property changes on: trunk/modules/captcha_control/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/install.php
===================================================================
--- trunk/modules/captcha_control/install.php	(nonexistent)
+++ trunk/modules/captcha_control/install.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         captcha_control
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+    $msg = 'captcha_control::'.$database->get_error();
+}

Property changes on: trunk/modules/captcha_control/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/DA.php
===================================================================
--- trunk/modules/captcha_control/languages/DA.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/DA.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING'] = 'Captcha og ASP styring';
+$MOD_CAPTCHA_CONTROL['HOWTO'] = 'Her kan du styre anvendelsen af  of "CAPTCHA" og "Avanceres spambeskyttelse" (ASB). For at f&Atilde;&yen; ASB til at fungere sammen med et givet modul, skal det p&Atilde;&yen;g&Atilde;&brvbar;ldende modul  tilrettes til at anvende ASB';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF'] = 'CAPTCHA konfigurering';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE'] = 'Type af CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP'] = 'CAPTCHA indstillinger for moduler findes i modulindstillingerne for de respektive moduler';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA'] = 'Brug af CAPTCHA ved tilmelding';
+$MOD_CAPTCHA_CONTROL['ENABLED'] = 'Sl&Atilde;&yen; til';
+$MOD_CAPTCHA_CONTROL['DISABLED'] = 'Sl&Atilde;&yen; fra';
+$MOD_CAPTCHA_CONTROL['ASP_CONF'] = 'Indstillnger for avanceret spam beskyttelse';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT'] = 'Aktiver ASB (hvis muligt)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP'] = 'ASB fors&Atilde;ger at afg&Atilde;re om en formular er udfyldt af en menneske eller spam-robot';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT'] = 'Beregning som tekst';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE'] = 'Beregning som billede';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE'] = 'Beregning som billede med forskellige fonte og baggrunde';
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE'] = 'Billede med forskellige fonte og baggrunde';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE'] = 'Traditionel m&Atilde;&yen;de (anbefales ikke)';
+$MOD_CAPTCHA_CONTROL['TEXT'] = 'Tekst-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT'] = 'Sp&Atilde;rgsm&Atilde;&yen;l og svar';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Slet alt her for at lave dine egne valg."n".eller dine &Atilde;&brvbar;ndringer bliver ikke gemt!."n".### eksempel ###."n".Her kan du indtaste sp&Atilde;rgsm&Atilde;&yen;l og svar."n".Brug:."n".?Hvad er  <b>Anne</b> Linnets <b>fornavn</b>?."n".!Anne."n".?Sp&Atilde;rgsm&Atilde;&yen;l 2."n".!Svar 2."n".."n".hvis sproget er uden betydning.."n". ... ."n".Eller, hvis sproget har betydning, brug:."n".?EN:Whats <b>Anne</b> Linnets <b>first name</b>?."n".!Anne."n".?EN:Question 2."n".!Answer 2."n".?DE:Wie ist der <b>Vorname</b> von <b>Anne</b> Linnet?."n".!Anne."n". ... ."n".### eksempel ###."n".';
+
+$MOD_CAPTCHA['VERIFICATION'] = 'Verificering';
+$MOD_CAPTCHA['ADDITION'] = 'adder';
+$MOD_CAPTCHA['SUBTRAKTION'] = 'tr&Atilde;&brvbar;k fra';
+$MOD_CAPTCHA['MULTIPLIKATION'] = 'gang';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES'] = 'Inds&Atilde;&brvbar;t resultat';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Inds&Atilde;&brvbar;t tekst';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'Besvar sp&Atilde;rgsm&Atilde;&yen;l';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Verificering mislykkedes';
+
+?>

Property changes on: trunk/modules/captcha_control/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/DE.php
===================================================================
--- trunk/modules/captcha_control/languages/DE.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/DE.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS CAPTCHA-CONTROL ADMINISTRATIONS TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description     = 'Admin-Tool um das Verhalten von CAPTCHA und ASP zu kontrollieren';
+
+// Ueberschriften und Textausgaben
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Captcha- und ASP Steuerung';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Hiermit kann das Verhalten von "CAPTCHA" und "Advanced Spam Protection" (ASP) gesteuert werden. Damit ASP in einem Modul wirken kann, muss das verwendete Modul entsprechend angepasst sein.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'CAPTCHA-Einstellungen';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'CAPTCHA-Typ';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'Die CAPTCHA-Einstellungen f&uuml;r die Module befinden sich in den jeweiligen Modul-Optionen';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'CAPTCHA f&uuml;r Registrierung aktivieren';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Aktiviert';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'Ausgeschaltet';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Erweiterter-Spam-Schutz (ASP) Einstellungen';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'ASP benutzen (wenn im Modul vorhanden)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP versucht anhand der verschiedenen Verhaltensweisen zu erkennen, ob eine Formular-Eingabe von einem Menschen oder einem Spam-Bot kommt.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'Rechnung als Text';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'Rechnung als Bild';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'Rechnung als Bild mit wechselnden Schriften und Hintergr&uuml;nden';
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Bild mit wechselnden Schriften und Hintergr&uuml;nden';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Alter Stil (nicht empfohlen)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'Text-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Fragen und Antworten';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Bitte hier alles l&ouml;schen'."\n".'sonst werden Ihre &Auml;nderungen nicht gespeichert!'."\n".'### Beispiel ###'."\n".'Hier k&ouml;nnen sie Fragen und Antworten eingeben.'."\n".'Entweder:'."\n".'?Wie ist der Vorname von Claudia Schiffer?'."\n".'!Claudia'."\n".'?Frage 2'."\n".'!Antwort 2'."\n".' ... '."\n".'wenn nur eine Sprache benutzt wird.'."\n".''."\n".'Oder, wenn die Sprache relevant ist:'."\n".'?EN:What\'s Claudia Schiffer\'s first name?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der Vorname von Claudia Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### Beispiel ###'."\n".'';
+$MOD_CAPTCHA['VERIFICATION']           = 'Pr&uuml;fziffer';
+$MOD_CAPTCHA['ADDITION']               = 'plus';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'minus';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'mal';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'Bitte Ergebnis eintragen';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Bitte Text eintragen';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'Bitte Frage beantworten';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Das Ergebnis ist falsch. Bitte tragen Sie es erneut ein';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/EN.php
===================================================================
--- trunk/modules/captcha_control/languages/EN.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/EN.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  ENGLISH LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Captcha and ASP control';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Here you can control the behavior of "CAPTCHA" and "Advanced Spam Protection" (ASP). To get ASP work with a given module, this special module has to be adapted to make use of ASP.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'CAPTCHA Configuration';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'Type of CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'CAPTCHA settings for modules are located in the respective module settings';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'Activate CAPTCHA for signup';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Enabled';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'Disabled';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Advanced Spam Protection Configuration';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'Activate ASP (if available)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP tries to determine if a form-input was originated from a human or a spam-bot.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'Calculation as text';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'Calculation as image';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'Calculation as image with varying fonts and backgrounds'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Image with varying fonts and backgrounds';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Old style (not recommended)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'Text-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Questions and Answers';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Delete this all to add your own entries'."\n".'or your changes won\'t be saved!'."\n".'### example ###'."\n".'Here you can enter Questions and Answers.'."\n".'Use:'."\n".'?What\'s Claudia Schiffer\'s first name?'."\n".'!Claudia'."\n".'?Question 2'."\n".'!Answer 2'."\n".''."\n".'if language doesn\'t matter.'."\n".' ... '."\n".'Or, if language do matter, use:'."\n".'?EN:What\'s Claudia Schiffer\'s first name?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der Vorname von Claudia Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### example ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = 'Verification';
+$MOD_CAPTCHA['ADDITION']               = 'add';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'subtract';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'multiply';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'Fill in the result';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Fill in the text';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'Answer the question';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Verification failed';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/FR.php
===================================================================
--- trunk/modules/captcha_control/languages/FR.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/FR.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+//Module Description
+$module_description = 'Outil d&apos;administration de la v&eacute;rification par Captcha et du ASP';
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Contr&ocirc;le du Captcha et de l&apos;ASP';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Ici vous pouvez modifier le comportement du "CAPTCHA" et de l&apos;ASP (Advanced Spam Protection). Pour qu&apos;un module puisse utiliser l&apos;ASP, il doit &ecirc;tre sp&eacute;cifiquement adapt&eacute;.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'Configuration du CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'Type de CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'les r&eacute;glagles des CAPTCHA pour les modules sont d&eacute;finis dans leurs pr&eacute;f&eacute;rences respectives';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'CAPTCHA avant validation';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Activ&eacute;';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'D&eacute;sactiv&eacute;';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Configuration de l&apos;ASP (Advanced Spam Protection)';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'Activer ASP (si disponible)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP tente de d&eacute;terminer si un formulaire &agrave; &eacute;t&eacute; post&eacute; par un humain ou un spam-bot.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'Calcul sous forme de texte';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'Calcul sous forme d&apos;image';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'Calcul sous forme d&apos;image avec polices et fonds al&eacute;atoires'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Image avec polices et fonds al&eacute;atoires';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Ancienne m&eacute;thode (non recommand&eacute;)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'CAPTCHA texte';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Questions et R&eacute;ponses';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Effacez ceci et remplacez le par votre propre texte'."\n".'sinon vos changements ne seront pas enregistr&eacute;s'."\n".'### exemple ###'."\n".'Saisissez ici vos questions et r&eacute;ponses.'."\n".'Utilisation:'."\n".'?Quel est le <b>pr&eacute;nom</b> de <b>Claudia</b> Schiffer ?'."\n".'!Claudia'."\n".'?Question 2'."\n".'!R&eacute;ponse 2'."\n".''."\n".'si le langage n&apos;a pas d&apos;importance.'."\n".' ... '."\n".'Ou, si vous utilisez la localisation:'."\n".'?FR:Quel est le <b>pr&eacute;nom</b> de <b>Claudia</b> Schiffer ?'."\n".'!Claudia'."\n".' ... '."\n".'?EN:What&apos;s <b>Claudia</b> Schiffer&apos;s <b>first name</b>?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'### exemple ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = 'V&eacute;rification';
+$MOD_CAPTCHA['ADDITION']               = 'ajout&eacute; &agrave; (+)';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'moins (-)';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'multipli&eacute; par (x)';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'Indiquez le r&eacute;sultat';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Remplissez le texte';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'R&eacute;pondez &agrave; la question';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Erreur de v&eacute;rification';
+
+?>

Property changes on: trunk/modules/captcha_control/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/NL.php
===================================================================
--- trunk/modules/captcha_control/languages/NL.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/NL.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']                = 'CAPTCHA en Advanced Spam Protection';
+$MOD_CAPTCHA_CONTROL['HOWTO']                = 'Hier kunt u "CAPTCHA" en "Advanced Spam Protection" (ASP) beheren. Let op: alleen daarvoor aangepaste modules werken met ASP.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']        = 'CAPTCHA-configuratie';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']        = 'Type CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']            = 'Let op: CAPTCHA-instellingen voor modules bevinden zich in de desbetreffende module-instellingen.';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']    = 'Activeer CAPTCHA voor aanmeldingen';
+$MOD_CAPTCHA_CONTROL['ENABLED']                = 'Inschakelen';
+$MOD_CAPTCHA_CONTROL['DISABLED']            = 'Uitschakelen';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']            = 'Advanced Spam Protection';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']            = 'Activeer ASP (indien beschikbaar)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']                = 'ASP probeert te detecteren of het formulier ingevuld werd door een persoon of een spam-bot.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']            = 'Rekensom als tekst';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']            = 'Rekensom als afbeelding';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']        = 'Rekensom als afbeelding met verschillende lettertypen en achtergronden';
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']            = 'Afbeelding met verschillende lettertypen en achtergronden';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']            = 'Oude stijl (niet aan te raden)';
+$MOD_CAPTCHA_CONTROL['TEXT']                = 'Tekst-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']    = 'Vragen en antwoorden';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC']    = 'Verwijder dit om uw lijst in te voeren, of de wijzigingen zullen niet bewaard worden!'."\n".'### voorbeeld ###'."\n".'Hier kunt u vragen en antwoorden invoeren.'."\n".'Gebruik:'."\n".'?Wat is de <b>voornaam</b> van <b>Pietje</b> Puk?'."\n".'!Pietje'."\n".'?Vraag 2'."\n".'!Antwoord 2'."\n".' ... '."\n".'indien de taal geen rol speelt.'."\n".''."\n".'Of, indien taal wel een rol speelt, gebruik:'."\n".'?EN:What\'s <b>John</b> Doe\'s <b>first name</b>?'."\n".'!John'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der <b>Vorname</b> von <b>Claudia</b> Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### voorbeeld ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']                = 'Verificatie';
+$MOD_CAPTCHA['ADDITION']                    = 'plus';
+$MOD_CAPTCHA['SUBTRAKTION']                    = 'min';
+$MOD_CAPTCHA['MULTIPLIKATION']                = 'maal';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']        = 'Voer het resultaat in a.u.b.';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT']        = 'Voer de tekst in a.u.b.';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST']        = 'Beantwoord de vraag a.u.b.';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION']        = 'Verificatie mislukt';
+
+?>

Property changes on: trunk/modules/captcha_control/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/NO.php
===================================================================
--- trunk/modules/captcha_control/languages/NO.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/NO.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+-----------------------------------------------------------------------------------------
+NORWEGIAN LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+-----------------------------------------------------------------------------------------
+  */
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Captcha og ASP kontroll';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Her kan du kontrolere hvordan du vil at "CAPTCHA" og "Avansert Spam Beskyttelse" (ASP) skal virke. For &aring; f&aring; ASP til &aring; fungere med en spesifik modul, m&aring; denne tilpasses for bruk sammen med ASP. ASP vil ellers ikke fungere med moduler hvor denne endringen ikke er gjort.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'CAPTCHA Konfigurasjon';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'Type CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'CAPTCHA instillinger for modulene, finner du under innstillinger i de respektive modulene.';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'Aktiver CAPTCHA for brukerregistreringen';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Aktivert';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'Deaktivert';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Konfigrering av Avansert Spam Beskyttelse';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'Aktiver ASP (om tilgjengelig)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP vil pr&oslash;ve &aring; fastsl&aring; hvor hvidt innfyllingen i et skjema ble gjort av et meneske eller en spam-robot.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'Kalkuler som tekst';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'Kalkuler som bilde';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'Kalkulering som bilde med varierende fonter og bakgrunner'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Bilde med varierende fonter og bakgrunner';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Gammel Type (Anbefales ikke!)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'Tekst-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Sp&oslash;rsm&aring;l og svar';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Slett atlt dette for &aring; legge til dine egne innlegg ellers vil ikke endringene bli lagret!'."\n".'### eksempel ###'."\n".'Her kan du legge inn Sp&oslash;rsm&aring;l og Svar.'."\n".'Bruk:'."\n".'?Hva er <b>Claudia</b> Schiffer\'s <b>fornavn</b>?'."\n".'!Claudia'."\n".'?Sp&oslash;rsm&aring;l 2'."\n".'!Svar 2'."\n".''."\n".'om type spr&aring;k ikke er av betydning.'."\n".' ... '."\n".'Eller, om spr&aring;k er av betydning, bruk:'."\n".'?NO:Hva er <b>Claudia</b> Schiffer\'s <b>fornavn</b>?'."\n".'!Claudia'."\n".'?NO:Sp&oslash;rsm&aring;l 2'."\n".'!Svar 2'."\n".'?EN:What\'s <b>Claudia</b> Schiffer\'s <b>first name</b>?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der <b>Vorname</b> von <b>Claudia</b> Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### Eksempel ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = 'Verifikasjon';
+$MOD_CAPTCHA['ADDITION']               = 'pluss';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'minus';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'ganger';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'Skriv inn ressultatet';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Skriv inn teksten';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'Svar p&aring; sp&oslash;rsm&aring;let';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Feil ved verifiseringen';
+
+?>

Property changes on: trunk/modules/captcha_control/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/PL.php
===================================================================
--- trunk/modules/captcha_control/languages/PL.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/PL.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  POLISH LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Captcha i Kontrola ASP';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Tutaj możesz zmieć tryb wyświetlania "CAPTCHA" i ustawić zaawansowaną ochronę przed spamem (ASP).';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'Konfiguracja CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'Rodzaj CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'Ustawienia CAPTCHA dla modułów znajdują się w opcjach modułu';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'Aktywacja CAPTCHA przy rejestracji';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Włączone';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'Wyłączone';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Ustawienia - zaawansowana ochrona przed spamem';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'Aktywuj ASP (jeśli dostępne)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP będzie weryfikować czy dodana treść pochodzi od człowieka czy spam-bota.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'Weryfikacja tekstu';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'Weryfikacja obrazu';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'Weryfikacja obrazu z różnymi czcionkami i tłem'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Obraz z różnych czcionek i tła';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Stary styl (nie polecane)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'Treść-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Pytania i odpowiedzi';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Usuń wszystko aby dodać własną treść.'."\n".'W przeciwnym razie twoje zmiany nie zostaną zapisane!'."\n".'### przykład ###'."\n".'Wpisuj tylko pytania i odpowiedzi.'."\n".'Ułóż treści w następujący sposób:'."\n".'?Jak Adam Małysz ma na imię?'."\n".'!Adam'."\n".'?Pytanie 2'."\n".'!Odpowiedź 2'."\n".''."\n".'Jeśli język treści jest nieistotny.'."\n".' ... '."\n".'bądź jest ułóż treść w pastępujący sposób:'."\n".'?PL:Jak Adam Małysz ma na imię?'."\n".'!Adam'."\n".'?PL:Pytanie 2'."\n".'!Odpowiedź 2'."\n".'?DE:Wie ist der Vorname von Claudia Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### przykład ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = 'Weryfikacja';
+$MOD_CAPTCHA['ADDITION']               = 'plus';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'minus';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'razy';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'wpisz wynik';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'wpisz tekst';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'odpowiedz na pytanie';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'weryfikacja nie powiodła się';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/languages/PL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/RU.php
===================================================================
--- trunk/modules/captcha_control/languages/RU.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/RU.php	(revision 2)
@@ -0,0 +1,61 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project http://www.websitebaker.org/
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  RUSSIAN LANGUAGE FILE FOR THE CAPTCHA-CONTROL ADMIN TOOL
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = '&#1059;&#1087;&#1088;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077; Captcha &#1080; ASP';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = '&#1047;&#1076;&#1077;&#1089;&#1100; &#1074;&#1099; &#1084;&#1086;&#1078;&#1077;&#1090;&#1077; &#1091;&#1087;&#1088;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1084;&#1080; "CAPTCHA" &#1080; "Advanced Spam Protection" (ASP). &#1044;&#1083;&#1103; &#1090;&#1086;&#1075;&#1086; &#1095;&#1090;&#1086;&#1073;&#1099;  ASP &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1083; &#1074; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103;&#1093;, &#1074;&#1072;&#1084; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1086; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086; &#1087;&#1086;&#1074;&#1077;&#1076;&#1077;&#1085;&#1080;&#1077; &#1079;&#1076;&#1077;&#1089;&#1100;.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = '&#1058;&#1080;&#1087; CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; CAPTCHA &#1076;&#1083;&#1103; &#1084;&#1086;&#1076;&#1091;&#1083;&#1077;&#1081; &#1085;&#1072;&#1093;&#1086;&#1076;&#1103;&#1090;&#1089;&#1103; &#1074; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1093; &#1089;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1077;&#1075;&#1086; &#1084;&#1086;&#1076;&#1091;&#1083;&#1103;';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= '&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; CAPTCHA &#1076;&#1083;&#1103; &#1092;&#1086;&#1088;&#1084;&#1099; &#1088;&#1077;&#1075;&#1080;&#1089;&#1090;&#1088;&#1072;&#1094;&#1080;&#1080;';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = '&#1042;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1086;';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = '&#1042;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1086;';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; Advanced Spam Protection';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = '&#1048;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; ASP (&#1077;&#1089;&#1083;&#1080; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP &#1087;&#1099;&#1090;&#1072;&#1077;&#1090;&#1089;&#1103; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100;, &#1079;&#1072;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1072; &#1092;&#1086;&#1088;&#1084;&#1072; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082;&#1086;&#1084; &#1080;&#1083;&#1080; spam-&#1088;&#1086;&#1073;&#1086;&#1090;&#1086;&#1084;.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = '&#1042;&#1099;&#1095;&#1080;&#1089;&#1083;&#1077;&#1085;&#1080;&#1103; (&#1090;&#1077;&#1082;&#1089;&#1090;)';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = '&#1042;&#1099;&#1095;&#1080;&#1089;&#1083;&#1077;&#1085;&#1080;&#1103; (&#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1072;)';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = '&#1042;&#1099;&#1095;&#1080;&#1089;&#1083;&#1077;&#1085;&#1080;&#1103; (&#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1072; &#1089; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1084;&#1080; &#1096;&#1088;&#1080;&#1092;&#1090;&#1072;&#1084;&#1080; &#1080; &#1092;&#1086;&#1085;&#1086;&#1084;)'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = '&#1050;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1072; &#1089; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1084;&#1080; &#1096;&#1088;&#1080;&#1092;&#1090;&#1072;&#1084;&#1080; &#1080; &#1092;&#1086;&#1085;&#1086;&#1084;';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = '&#1057;&#1090;&#1072;&#1088;&#1099;&#1081; &#1089;&#1090;&#1080;&#1083;&#1100; (&#1085;&#1077; &#1088;&#1077;&#1082;&#1086;&#1084;&#1085;&#1076;&#1091;&#1077;&#1090;&#1100;&#1089;&#1103;)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = '&#1058;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1072;&#1103; CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= '&#1042;&#1086;&#1087;&#1088;&#1086;&#1089;&#1099; &#1080; &#1054;&#1090;&#1074;&#1077;&#1090;&#1099;';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Delete this all to add your own entries'."\n".'or your changes won\'t be saved!'."\n".'### example ###'."\n".'Here you can enter Questions and Answers.'."\n".'Use:'."\n".'?What\'s <b>Claudia</b> Schiffer\'s <b>first name</b>?'."\n".'!Claudia'."\n".'?Question 2'."\n".'!Answer 2'."\n".' ... '."\n".'if language doesn\'t matter.'."\n".''."\n".'Or, if language do matter, use:'."\n".'?EN:What\'s <b>Claudia</b> Schiffer\'s <b>first name</b>?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der <b>Vorname</b> von <b>Claudia</b> Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### example ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = '&#1055;&#1088;&#1086;&#1074;&#1077;&#1088;&#1082;&#1072;';
+$MOD_CAPTCHA['ADDITION']               = '&#1087;&#1083;&#1102;&#1089;';
+$MOD_CAPTCHA['SUBTRAKTION']            = '&#1084;&#1080;&#1085;&#1091;&#1089;';
+$MOD_CAPTCHA['MULTIPLIKATION']         = '&#1091;&#1084;&#1085;&#1086;&#1078;&#1080;&#1090;&#1100; &#1085;&#1072;';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = '&#1059;&#1082;&#1072;&#1078;&#1080;&#1090;&#1077; &#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = '&#1059;&#1082;&#1072;&#1078;&#1080;&#1090;&#1077; &#1090;&#1077;&#1082;&#1089;&#1090;';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = '&#1054;&#1090;&#1074;&#1077;&#1090;&#1100;&#1090;&#1077; &#1085;&#1072; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = '&#1054;&#1096;&#1080;&#1073;&#1082;&#1072; &#1074;&#1077;&#1088;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;&#1080;';
+
+?>

Property changes on: trunk/modules/captcha_control/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/SK.php
===================================================================
--- trunk/modules/captcha_control/languages/SK.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/SK.php	(revision 2)
@@ -0,0 +1,52 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         languages
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+// Headings and text outputs
+$MOD_CAPTCHA_CONTROL['HEADING']           = 'Captcha a ASP kontrola';
+$MOD_CAPTCHA_CONTROL['HOWTO']             = 'Tu m&ocirc;&#382;ete ovplyvni&#357; spr&aacute;vanie "CAPTCHA" a "Advanced Spam Protection" (ASP).
+                        Ak chcete pou&#382;&iacute;va&#357; ASP pr&aacute;cu s dan&yacute;m modulom, tento &#353;peci&aacute;lny modul, mus&iacute; by&#357; upraven&yacute; pre vyu&#382;itie ASP.';
+
+// Text and captions of form elements
+$MOD_CAPTCHA_CONTROL['CAPTCHA_CONF']      = 'CAPTCHA Konfigur&aacute;cia';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE']      = 'Typ CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_EXP']       = 'CAPTCHA settings for modules are located in the respective module settings';
+$MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA']= 'Aktivova&#357; CAPTCHA pre prihl&aacute;senie';
+$MOD_CAPTCHA_CONTROL['ENABLED']           = 'Povoli&#357;';
+$MOD_CAPTCHA_CONTROL['DISABLED']          = 'Zak&aacute;za&#357;';
+$MOD_CAPTCHA_CONTROL['ASP_CONF']          = 'Advanced Spam Protection Konfigur&aacute;cia';
+$MOD_CAPTCHA_CONTROL['ASP_TEXT']          = 'Aktivova&#357; ASP (ak je dostupn&eacute;)';
+$MOD_CAPTCHA_CONTROL['ASP_EXP']           = 'ASP sa sna&#382;&iacute; zisti&#357;, &#269;i forma vstupu poch&aacute;dza od &#269;loveka alebo spam-bota.';
+$MOD_CAPTCHA_CONTROL['CALC_TEXT']         = 'V&yacute;po&#269;et ako text';
+$MOD_CAPTCHA_CONTROL['CALC_IMAGE']        = 'V&yacute;po&#269;et ako obr&aacute;zok';
+$MOD_CAPTCHA_CONTROL['CALC_TTF_IMAGE']    = 'V&yacute;po&#269;et ako obr&aacute;zok s r&ocirc;znymi fontmy a pozad&iacute;m'; 
+$MOD_CAPTCHA_CONTROL['TTF_IMAGE']         = 'Obr&aacute;zok s r&ocirc;znymi fontmy a pozad&iacute;m';
+$MOD_CAPTCHA_CONTROL['OLD_IMAGE']         = 'Star&yacute; sp&ocirc;sob (neodpor&uacute;&#269;a sa)';
+$MOD_CAPTCHA_CONTROL['TEXT']              = 'Text-CAPTCHA';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT']= 'Ot&aacute;zky a odpovede';
+$MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'] = 'Delete this all to add your own entries'."\n".'or your changes won\'t be saved!'."\n".'### example ###'."\n".'Here you can enter Questions and Answers.'."\n".'Use:'."\n".'?What\'s <b>Claudia</b> Schiffer\'s <b>first name</b>?'."\n".'!Claudia'."\n".'?Question 2'."\n".'!Answer 2'."\n".''."\n".'if language doesn\'t matter.'."\n".' ... '."\n".'Or, if language do matter, use:'."\n".'?EN:What\'s <b>Claudia</b> Schiffer\'s <b>first name</b>?'."\n".'!Claudia'."\n".'?EN:Question 2'."\n".'!Answer 2'."\n".'?DE:Wie ist der <b>Vorname</b> von <b>Claudia</b> Schiffer?'."\n".'!Claudia'."\n".' ... '."\n".'### example ###'."\n".'';
+
+$MOD_CAPTCHA['VERIFICATION']           = 'Overenie';
+$MOD_CAPTCHA['ADDITION']               = 'plus';
+$MOD_CAPTCHA['SUBTRAKTION']            = 'm&iacute;nus';
+$MOD_CAPTCHA['MULTIPLIKATION']         = 'n&aacute;sobi&#357;';
+$MOD_CAPTCHA['VERIFICATION_INFO_RES']  = 'Vlo&#382;te v&yacute;sledok';
+$MOD_CAPTCHA['VERIFICATION_INFO_TEXT'] = 'Vlo&#382;te text';
+$MOD_CAPTCHA['VERIFICATION_INFO_QUEST'] = 'Odpove na ot&aacute;zku';
+$MOD_CAPTCHA['INCORRECT_VERIFICATION'] = 'Overenie zlyhalo';
+
+?> 
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/languages/SK.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/languages/index.php
===================================================================
--- trunk/modules/captcha_control/languages/index.php	(nonexistent)
+++ trunk/modules/captcha_control/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/tool.php
===================================================================
--- trunk/modules/captcha_control/tool.php	(nonexistent)
+++ trunk/modules/captcha_control/tool.php	(revision 2)
@@ -0,0 +1,206 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         captcha_control
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent this file from being accessed directly
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonsPath = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonsPath.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonsPath.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonsPath.'/languages/'.LANGUAGE .'.php');
+}
+$sModulName = basename(__DIR__);
+$js_back = ADMIN_URL.'/admintools/tool.php';
+$ToolUrl = ADMIN_URL.'/admintools/tool.php?tool=captcha_control';
+if( !$admin->get_permission($sModulName,'module' ) ) {
+//      die($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES']);
+    $admin->print_error($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'], $js_back);
+}
+
+$table = TABLE_PREFIX.'mod_captcha_control';
+
+// check if data was submitted
+if(isset($_POST['save_settings'])) {
+    if (!$admin->checkFTAN())
+    {
+//        if(!$admin_header) { $admin->print_header(); }
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $js_back );
+    }
+
+    // get configuration settings
+    $enabled_captcha = ($_POST['enabled_captcha'] == '1') ? '1' : '0';
+    $enabled_asp = ($_POST['enabled_asp'] == '1') ? '1' : '0';
+    $captcha_type = $admin->add_slashes($_POST['captcha_type']);
+
+    // update database settings
+    $sql_captcha = '';
+
+    if($captcha_type == 'text') { // ct_text
+        $text_qa = isset($_POST['text_qa']) ? $_POST['text_qa'] :'calc_text';
+        if(!preg_match('/### .*? ###/isU', $text_qa)) {
+            $sql_captcha = ', `ct_text` = \''.$database->escapeString($text_qa).'\' ';
+        }
+    }
+
+        $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_captcha_control` SET '
+              .'`enabled_captcha` = '.$database->escapeString($enabled_captcha).', '
+              .'`enabled_asp` = '.$database->escapeString($enabled_asp).', '
+              .'`captcha_type` = \''.$database->escapeString($captcha_type).'\' '
+              .$sql_captcha;
+    $database->query($sql);
+
+    // check if there is a database error, otherwise say successful
+    if(!$admin_header) { $admin->print_header(); }
+    if($database->is_error()) {
+        $admin->print_error($database->get_error(), $ToolUrl);
+    } else {
+        $admin->print_success($MESSAGE['PAGES']['SAVED'], $ToolUrl);
+    }
+
+} else {
+}
+
+    // include captcha-file
+    require_once(WB_PATH .'/include/captcha/captcha.php');
+
+    // load text-captchas
+    $text_qa='';
+    if($query = $database->query("SELECT `ct_text` FROM `$table`")) {
+        $data = $query->fetchRow(MYSQLI_ASSOC);
+        $text_qa = $data['ct_text'];
+    }
+    if($text_qa == '')
+        $text_qa = $MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'];
+
+// script to load image
+?>
+<script type="text/javascript">
+    var pics = new Array();
+
+    pics["ttf_image"] = new Image();
+    pics["ttf_image"].src = "<?php echo WB_URL.'/include/captcha/captchas/ttf_image.png'?>";
+
+    pics["calc_image"] = new Image();
+    pics["calc_image"].src = "<?php echo WB_URL.'/include/captcha/captchas/calc_image.png'?>";
+
+    pics["calc_ttf_image"] = new Image();
+    pics["calc_ttf_image"].src = "<?php echo WB_URL.'/include/captcha/captchas/calc_ttf_image.png'?>";
+
+    pics["old_image"] = new Image();
+    pics["old_image"].src = "<?php echo WB_URL.'/include/captcha/captchas/old_image.png'?>";
+
+    pics["calc_text"] = new Image();
+    pics["calc_text"].src = "<?php echo WB_URL.'/include/captcha/captchas/calc_text.png'?>";
+
+    pics["text"] = new Image();
+    pics["text"].src = "<?php echo WB_URL.'/include/captcha/captchas/text.png'?>";
+
+    function load_captcha_image() {
+        var captcha = document.store_settings.captcha_type.value,
+            example = document.getElementById('captcha_example');
+        example.src = pics[captcha].src;
+        toggle_text_qa();
+    }
+
+    function toggle_text_qa() {
+        if(document.store_settings.captcha_type.value == 'text' ) {
+            document.getElementById('text_qa').style.display = '';
+        } else {
+            document.getElementById('text_qa').style.display = 'none';
+        }
+    }
+
+</script>
+<?php
+
+    // connect to database and read out captcha settings
+    if($query = $database->query("SELECT * FROM $table")) {
+        $data = $query->fetchRow();
+        $enabled_captcha = $data['enabled_captcha'];
+        $enabled_asp = $data['enabled_asp'];
+        $captcha_type = $data['captcha_type'];
+    } else {
+        // something went wrong, use dummy value
+        $enabled_captcha = '1';
+        $enabled_asp = '1';
+        $captcha_type = 'calc_text';
+    }
+
+    // write out heading
+    echo '<h2>' .$MOD_CAPTCHA_CONTROL['HEADING'] .'</h2>';
+
+    // output the form with values from the database
+    echo '<p>' .$MOD_CAPTCHA_CONTROL['HOWTO'] .'</p>';
+?>
+<form name="store_settings" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
+    <?php echo $admin->getFTAN(); ?>
+    <table class="row_a" style="width: 98%;">
+    <tr>
+      <td colspan="2"><strong><?php echo $MOD_CAPTCHA_CONTROL['CAPTCHA_CONF'];?>:</strong></td>
+    </tr>
+    <tr>
+        <td style="width: 30%;"><?php echo $MOD_CAPTCHA_CONTROL['CAPTCHA_TYPE'];?>:</td>
+        <td>
+        <select name="captcha_type" id="captcha_type" onchange="load_captcha_image()" style="width: 98%;">
+            <?php foreach($useable_captchas AS $key=>$text) {
+            echo '<option value="'.$key.'" '.($captcha_type==$key ? ' selected="selected"' : '').">$text</option>";
+            } ?>
+        </select>
+        </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <td>
+            <img alt="captcha_example" id="captcha_example" height="40" src="<?php echo WB_URL.'/include/captcha/captchas/'.$captcha_type.'.png'?>" />
+        </td>
+    </tr>
+    <tr id="text_qa" style="display:<?php if($captcha_type=='text') echo ''; else echo 'none'; ;?>;">
+        <td  style="vertical-align: top;" class="setting_name"><?php echo $MOD_CAPTCHA_CONTROL['CAPTCHA_ENTER_TEXT'];?>:</td>
+        <td class="setting_value" >
+            <textarea name="text_qa" cols="60" rows="10"><?php echo $text_qa; ?></textarea>
+        </td>
+    </tr>
+    <tr>
+        <td><?php echo $MOD_CAPTCHA_CONTROL['USE_SIGNUP_CAPTCHA'];?>:</td>
+        <td>
+            <input type="radio" <?php echo ($enabled_captcha=='1') ?'checked="checked"' :'';?>
+                name="enabled_captcha" value="1" /><?php echo $MOD_CAPTCHA_CONTROL['ENABLED'];?>
+            <input type="radio" <?php echo ($enabled_captcha=='0') ?'checked="checked"' :'';?>
+                name="enabled_captcha" value="0" /><?php echo $MOD_CAPTCHA_CONTROL['DISABLED'];?>
+        </td>
+    </tr>
+    <tr><td>&nbsp;</td><td style="font-size:smaller;"><?php echo $MOD_CAPTCHA_CONTROL['CAPTCHA_EXP'];?></td></tr>
+    <tr><td colspan="2"><br /><strong><?php echo $MOD_CAPTCHA_CONTROL['ASP_CONF'];?>:</strong></td></tr>
+    <tr>
+        <td><?php echo $MOD_CAPTCHA_CONTROL['ASP_TEXT'];?>:</td>
+        <td>
+            <input type="radio" <?php echo ($enabled_asp=='1') ?'checked="checked"' :'';?>
+                name="enabled_asp" value="1" /><?php echo $MOD_CAPTCHA_CONTROL['ENABLED'];?>
+            <input type="radio" <?php echo ($enabled_asp=='0') ?'checked="checked"' :'';?>
+                name="enabled_asp" value="0" /><?php echo $MOD_CAPTCHA_CONTROL['DISABLED'];?>
+        </td>
+    </tr>
+    <tr>
+        <td>&nbsp;</td>
+        <td style="font-size:smaller;"><?php echo $MOD_CAPTCHA_CONTROL['ASP_EXP'];?></td>
+    </tr>
+    </table>
+    <input type="submit" name="save_settings" style="margin-top:10px; width:140px;" value="<?php echo $TEXT['SAVE']; ?>" />
+</form>
\ No newline at end of file

Property changes on: trunk/modules/captcha_control/tool.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/captcha_control/tool_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/captcha_control/tool_icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/captcha_control/upgrade.php
===================================================================
--- trunk/modules/captcha_control/upgrade.php	(nonexistent)
+++ trunk/modules/captcha_control/upgrade.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         
+ * @subpackage      
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    $msg = '';
+    $sTable = TABLE_PREFIX.'mod_captcha_control';
+    if(($sOldType = $database->getTableEngine($sTable))) {
+        if(('myisam' != strtolower($sOldType))) {
+            if(!$database->query('ALTER TABLE `'.$sTable.'` Engine = \'MyISAM\' ')) {
+                $msg = $database->get_error();
+            }
+        }
+    } else {
+        $msg = $database->get_error();
+    }
+// ------------------------------------
+}

Property changes on: trunk/modules/captcha_control/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/DOCS/change.log
===================================================================
--- trunk/modules/ckeditor/DOCS/change.log	(nonexistent)
+++ trunk/modules/ckeditor/DOCS/change.log	(revision 2)
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Changelog
+ * 
+ *  version 4.5.3-dev 6c70c82
+ *  fixed $ckeditor->wysiwyg_admin_exists call, works in 2.8.3 and 2.8.4
+ * 
+ * 
+ *  version 4.5.3 6c70c82
+ *  ! update to CKE 4.5.3
+ * 
+ *  version 4.4.8 150706
+ *  ! update to CKE 4.4.8
+ *
+ *  version 4.4.3 140727
+ *  + function "show_wysiwyg_editor" accepts parameter "$toolbar" now to allow modules to use inidividual toolbars, thanks to dbs for suggesting
+ *  ! using cke 4.4.3 full
+ *  ! update skin moonocolor to v 1.3
+ *  ! update wblink plugin to v 4.4.3
+ *
+ *  version 4.4.1.1 140528
+ *  ! fixed wysiwyg-admin recognition
+ *
+ *  version 4.4.1 140527
+ *  + using cke 4.4.1 full
+ *  ! changed wysiwyg-admin recognition
+ *
+ *  version 4.4.0 140501
+ *  + using cke 4.4.0 full
+ *  ! wblink plugin uses the extended wblink function of wb284 now: http://www.websitebaker.org/forum/index.php/topic,25334.msg187246.html#msg187246
+ *
+ *  version 4.3.4 140404
+ *  + using cke 4.3.4 full
+ *  ! update codemirror plugin to v. 1.10
+ *  ! update youtbue plugin to v. 1.09
+ *
+ *  version 4.3.3 140303
+ *  + using cke 4.3.3 full
+ *  ! update wblink plugin
+ *  ! because of consecutive problems wblink plugin allows now only a defined set of characters for page item selection
+ *
+ *  version 4.3.2 140131
+ *  + using cke 4.3.2 full
+ *  ! bug in wbsave plugin
+ *  ! bug in wblink plugin reported by instantflorian and jacobi22 http://www.websitebaker.org/forum/index.php/topic,25334.msg184283.html#msg184283
+ *
+ *  version 4.3.1.2 140110
+ *  ! filemanager works with IE11 now, reported by argos: http://www.websitebaker.org/forum/index.php/topic,17913.msg182267.html#msg182267
+ *
+ *  version 4.3.1.1 131219
+ *  ! editor was not attached to textarea named "description", reported by bsdzilla: http://www.websitebaker.org/forum/index.php/topic,17913.msg182267.html#msg182267
+ *
+ *  version 4.3.1 131211
+ *  + using cke 4.3.1 full
+ *  ! again fixed problem in wb droplets plugin
+ *  ! fixed problem in wb link plugin
+ *  + bakery items are selectable as wb link, thanks to jacoby22: http://www.websitebaker.org/forum/index.php/topic,25334.msg181817.html#msg181817
+ *    ! wb link plugin: items select is only shown when a news, topis or bakery page is selected
+ *
+ *  version 4.3.0 131120
+ *  + using cke 4.3.0 full
+ *  ! wblink plugin can address news page without selecting a news item
+ *  ! fixed problem in wb droplets plugin
+ *
+ *  version 4.2.2 131024
+ *  + using cke 4.2.2 full
+ *  ! updated moonocolor skin to v 1.1 (1.2 didn't work for some reasons)
+ *
+ *  version 4.2.1 131001
+ *  + using cke 4.2.1 full
+ *  ! message bug in backup plugin
+ *  ! updated youtube plugin to v. 1.0.7
+ *
+ *  version 4.2.0.1 130801
+ *  ! fixed filemanager for IE 10 as reported by argos http://www.websitebaker.org/forum/index.php/topic,25334.msg183193.html#msg183193
+ *  ! corrected version of cke in module description an editor.php
+ *
+ *  version 4.2.0 130724
+ *  + using cke 4.2.0 full
+ *  ! changed wb default toolbar for better overview and to avoid double source button
+ *  ! updated codemirror plugin to v. 1.06
+ *  + added patched/extended version of backup plugin using local browser storage
+ *  ! replaced editor save plugin by wbsave which saves without page reload
+ * 
+ *  version 4.1.2 130616
+ *  + using cke 4.1.2 full
+ *  + added youtube plugin as requested by Bug: http://www.websitebaker.org/forum/index.php/topic,25334.msg176059.html#msg176059
+ *  + added oembed plugin
+ *
+ *  version 4.1.1 130430
+ *  + using cke 4.1.1 full
+ *  ! disabled Advanced Content Filter (ACF) to prevent filtering of wblinks
+ *  ! excluded loading of link plugin because of double entries in context menu, must be loaded for non WB Toolbars
+ *  + topics pages are also selectable as wblink as requested by instantflorian http://www.websitebaker.org/forum/index.php/topic,25334.msg175956.html#msg175956
+ * 
+ *  version 4.1.0 130429
+ *  + using cke 4.1.0 full
+ *  + moonocolor skin as suggested by jacobi22 http://www.websitebaker.org/forum/index.php/topic,25334.msg175711.html#msg175711 (icons for wb plugins need redesign)
+ *  ! fixed language problems as reported and solved by jacobi22 http://www.websitebaker.org/forum/index.php/topic,25334.msg175684.html#msg175684
+ *    and nibz http://www.websitebaker.org/forum/index.php/topic,25334.msg175692.html#msg175692
+ *  - deleted examples folder to keep file size a least bit smaller
+ *  ! some more code cleaning, make toolbar selection work with wysiwyg-admin http://www.websitebakers.com/pages/admin/admin-tools/wysiwyg-admin.php
+ *
+ *  version 4.0.1 130408
+ *  + wb plugins patched for cke 4.0.1
+ *  ! some code cleaning
+ *
+ *  version 4.0.1 130117
+ *  initial release using cke 4.0.1 full heavily based on version 0.7x with cke 3.x
+ *  without wb plugins
+
+ */
\ No newline at end of file
Index: trunk/modules/ckeditor/DOCS/readme-faq.txt
===================================================================
--- trunk/modules/ckeditor/DOCS/readme-faq.txt	(nonexistent)
+++ trunk/modules/ckeditor/DOCS/readme-faq.txt	(revision 2)
@@ -0,0 +1,108 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Woellbrink
+ *  @copyright      2010-2012 Michael Tenschert, Dietrich Roland Pehlke, Luisehahne
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+################################################
+
+---     WebsiteBaker CKEditor module         ---
+---     FAQ: How to use customization         --- 
+
+################################################
+################################################
+
+
+# Question: #
+
+What files are there to customize CKEditor for WebsiteBaker?
+
+# Answer:   #
+
+All default files in CKEditor modules are in the folder: _yourwbinstallation_/modules/ckeditor/wb_config
+
+There are four different files. Please look inside each file with your FTP-Browser / AddonFileEditor / on your local computer:
+
++ wb_ckconfig.js:         Here are most of the configuration issues defined. 
+                        Toolbar-Configuration, behavior on Enter / Shift+Enter, default language and so on.
+
++ editor.css:             The default look of the WYSIWYG textarea and the preview. 
+                        You can also put an editor.css in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.styles.js:     The default styles you can choose from a dropdown in the CKEditor toolbar. 
+                        You can also put an editor.styles.js in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.templates.js:     The default CKE templates you can choose of a button in CKEditor toolbar. 
+                        Please note: We recommend not to use CKE templates, because the WebsiteBaker template
+                        should define the different blocks and the template. 
+                        
+Furthermore this files and some other configurations (we recommend you shouldn't change unless you really know what you are doing) are stored in:
+_yourwbinstallation_/modules/ckeditor/include.php
+
+
+################################################
+
+
+# Question: #
+
+Why back to the roots and not different folders anymore?
+
+# Answer:   #
+
+All four configuration files (wb_ckconfig.js, editor.css, editor.styles.js, editor.templates.js) are available in 
+_yourwbinstallation_/modules/ckeditor/wb_config
+
+The wb_config is loaded and recognized by the CKEditor module unless you copy the folder "wb_config."!
+
+As an example you have two possibilities to call the configuration files
+    
+    1) copy the wb_config to the folder _yourwbinstallation_/templates and all changes in config files are for all templates
+    2) copy the wb_config  to your _yourdefaulttemplate_: _yourwbinstallation_/templates/_yourdefaulttemplate_ 
+       rename folder wb_config to editor, your changes are only for _yourdefaulttemplate_
+    
+    Change the configfiles with your FTP-Browser / AddonFileEditor / ... 
+
+You should never change the files in _yourwbinstallation_/modules/ckeditor/wb_config, as they are overwritten with any update of CKEditor module and / or WebsiteBaker! 
+You never have any problems when upgrading CKEditor module to another version.
+
+
+################################################
+
+
+# Question: #
+
+How is the workflow of reading CKEditor files?
+
+# Answer:   #
+
+Note: The workflow is defined inside _yourwbinstallation_/modules/ckeditor/include.php
+
+1) is called as first if available, 2) is the next one, and so on.
+
+search order for CKEditor files 
+
+editor.css
+
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor.css
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/css/editor.css
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/editor.css
+    4) _yourwbinstallation_/templates/wb_config/editor.css
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/editor.css
+
+wb_ckconfig.js,editor.styles.js,editor.templates.js    
+    
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/wb_ckconfig.js
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/js/wb_ckconfig.js
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/wb_ckconfig.js
+    4) _yourwbinstallation_/templates/wb_config/wb_ckconfig.js
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/wb_ckconfig.js
+
+etc...    
+    
Index: trunk/modules/ckeditor/FTAN_SUPPORTED
===================================================================
--- trunk/modules/ckeditor/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/ckeditor/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/ckeditor/backend.css
===================================================================
--- trunk/modules/ckeditor/backend.css	(nonexistent)
+++ trunk/modules/ckeditor/backend.css	(revision 2)
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/* "Font Size" combo width */
+.cke_combo__font .cke_combo_text,
+.cke_combo__format .cke_combo_text,
+.cke_combo__style .cke_combo_text, 
+.cke_combo__fontsize .cke_combo_text
+{
+    width: auto !important;
+}
+
+/* "Font Size" panel size */
+.cke_combopanel__font,
+.cke_combopanel__format,
+.cke_combopanel__styles, 
+.cke_combopanel__fontsize
+{
+    width: auto !important;
+}
+.fm-modal {
+    z-index: 10011; /** Because CKEditor image dialog was at 10010 */
+    width:80%;
+    height:80%;
+    top: 10%;
+    left:10%;
+    border:0;
+    position:fixed;
+    -moz-box-shadow: 0px 1px 5px 0px #656565;
+    -webkit-box-shadow: 0px 1px 5px 0px #656565;
+    -o-box-shadow: 0px 1px 5px 0px #656565;
+    box-shadow: 0px 1px 5px 0px #656565;
+    filter:progid:DXImageTransform.Microsoft.Shadow(color=#656565, Direction=180, Strength=5);
+}
Index: trunk/modules/ckeditor/ckeditor/CHANGES.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/CHANGES.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/CHANGES.md	(revision 2)
@@ -0,0 +1,1219 @@
+CKEditor 4 Changelog
+====================
+
+## CKEditor 4.6.2
+
+New Features:
+
+* [#16733](http://dev.ckeditor.com/ticket/16733): Added a new pastel color palette for the [Color Button](http://ckeditor.com/addon/colorbutton) plugin and a new [`config.colorButton_colorsPerRow`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-colorButton_colorsPerRow) configuration option for setting the number of rows in the color selector.
+* [#16752](http://dev.ckeditor.com/ticket/16752): Added a new Azerbaijani localization. Thanks to the [Azerbaijani language team](https://www.transifex.com/ckeditor/teams/11143/az/)!
+* [#13818](http://dev.ckeditor.com/ticket/13818): It is now possible to group [Widget](http://ckeditor.com/addon/widget) [style definitions](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles), so applying one style disables the other.
+
+Fixed Issues:
+
+* [#13446](http://dev.ckeditor.com/ticket/13446): [Chrome] Fixed: It is possible to type in an unfocused inline editor.
+* [#14856](http://dev.ckeditor.com/ticket/14856): Fixed: [Font size and font family](http://ckeditor.com/addon/font) reset each other when modified at certain positions.
+* [#16745](http://dev.ckeditor.com/ticket/16745): [Edge] Fixed: List items are lost when [pasted from Word](http://ckeditor.com/addon/pastefromword).
+* [#16682](http://dev.ckeditor.com/ticket/16682): [Edge] Fixed: A list gets [pasted from Word](http://ckeditor.com/addon/pastefromword) as a set of paragraphs. Added the [`config.pasteFromWord_heuristicsEdgeList`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWord_heuristicsEdgeList) configuration option.
+* [#10373](http://dev.ckeditor.com/ticket/10373): Fixed: Context menu items can be dragged into the editor.
+* [#16728](http://dev.ckeditor.com/ticket/16728): [IE] Fixed: [Copy Formatting](http://ckeditor.com/addon/copyformatting) breaks the editor in Quirks Mode.
+* [#16795](http://dev.ckeditor.com/ticket/16795): [IE] Fixed: [Copy Formatting](http://ckeditor.com/addon/copyformatting) breaks the editor in Compatibility Mode.
+* [#16675](http://dev.ckeditor.com/ticket/16675): Fixed: Styles applied with [Copy Formatting](http://ckeditor.com/addon/copyformatting) to a single table cell are applied to the whole table.
+* [#16753](http://dev.ckeditor.com/ticket/16753): Fixed: [`element.setSize`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setSize) sets incorrect editor dimensions if the border width is represented as a fraction of pixels.
+* [#16705](http://dev.ckeditor.com/ticket/16705): [Firefox] Fixed: Unable to paste images as Base64 strings when using [Clipboard](http://ckeditor.com/addon/clipboard).
+* [#14869](http://dev.ckeditor.com/ticket/14869): Fixed: JavaScript error is thrown when trying to use [Find](http://ckeditor.com/addon/find) in a [`<div>`-based editor](http://ckeditor.com/addon/divarea).
+
+## CKEditor 4.6.1
+
+New Features:
+
+* [#16639](http://dev.ckeditor.com/ticket/16639): The `callback` parameter in the [CKEDITOR.ajax.post](http://docs.ckeditor.com/#!/api/CKEDITOR.ajax-method-post) method became optional.
+
+Fixed Issues:
+
+* [#11064](http://dev.ckeditor.com/ticket/11064): [Blink, WebKit] Fixed: Cannot select all editor content when a widget or a non-editable element is the first or last element of the content. Also fixes this issue in the [Select All](http://ckeditor.com/addon/selectall) plugin.
+* [#14755](http://dev.ckeditor.com/ticket/14755): [Blink, WebKit, IE8] Fixed: Browser hangs when a table is inserted in the place of a selected list with an empty last item.
+* [#16624](http://dev.ckeditor.com/ticket/16624): Fixed: Improved the [Color Button](http://ckeditor.com/addon/colorbutton) plugin which will now normalize the CSS `background` property if it only contains a color value. This fixes missing background colors when using [Paste from Word](http://ckeditor.com/addon/pastefromword).
+* [#16600](http://dev.ckeditor.com/ticket/16600): [Blink, WebKit] Fixed: Error thrown occasionally by an uninitialized editable for multiple CKEditor instances on the same page.
+
+## CKEditor 4.6
+
+New Features:
+
+* [#14569](http://dev.ckeditor.com/ticket/14569): Added a new, flat, default CKEditor skin called [Moono-Lisa](http://ckeditor.com/addon/moono-lisa). Refreshed default colors available in the [Color Button](http://ckeditor.com/addon/colorbutton) plugin ([Text Color and Background Color](http://docs.ckeditor.com/#!/guide/dev_colorbutton) feature).
+* [#14707](http://dev.ckeditor.com/ticket/14707): Added a new [Copy Formatting](http://ckeditor.com/addon/copyformatting) feature to enable easy copying of styles between your document parts.
+* Introduced the completely rewritten [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin:
+	* Backward incompatibility: The [`config.pasteFromWordRemoveFontStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveFontStyles) option now defaults to `false`. This option will be deprecated in the future. Use [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf) to replicate the effect of setting it to `true`.
+	* Backward incompatibility: The [`config.pasteFromWordNumberedHeadingToList`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordNumberedHeadingToList) and [`config.pasteFromWordRemoveStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveStyles) options were dropped and no longer have any effect on pasted content.
+	* Major improvements in preservation of list numbering, styling and indentation (nested lists with multiple levels).
+	* Major improvements in document structure parsing that fix plenty of issues with distorted or missing content after paste.
+* Added new translation: Occitan. Thanks to [Cédric Valmary](https://totenoc.eu/)!
+* [#10015](http://dev.ckeditor.com/ticket/10015): Keyboard shortcuts (relevant to the operating system in use) will now be displayed in tooltips and context menus.
+* [#13794](http://dev.ckeditor.com/ticket/13794): The [Upload Image](http://ckeditor.com/addon/uploadimage) feature now uses `uploaded.width/height` if set.
+* [#12541](http://dev.ckeditor.com/ticket/12541): Added the [Upload File](http://ckeditor.com/addon/uploadfile) plugin that lets you upload a file by drag&amp;dropping it into the editor content.
+* [#14449](http://dev.ckeditor.com/ticket/14449): Introduced the [Balloon Panel](http://ckeditor.com/addon/balloonpanel) plugin that lets you create stylish floating UI elements for the editor.
+* [#12077](https://dev.ckeditor.com/ticket/12077): Added support for the HTML5 `download` attribute in link (`<a>`) elements. Selecting the "Force Download" checkbox in the [Link](http://ckeditor.com/addon/link) dialog will cause the linked file to be downloaded automatically. Thanks to [sbusse](https://github.com/sbusse)!
+* [#13518](http://dev.ckeditor.com/ticket/13518): Introduced the [`additionalRequestParameters`](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition-property-additionalRequestParameters) property for file uploads to make it possible to send additional information about the uploaded file to the server.
+* [#14889](http://dev.ckeditor.com/ticket/14889): Added the [`config.image2_altRequired`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_altRequired) option for the [Enhanced Image](http://ckeditor.com/addon/image2) plugin to allow making alternative text a mandatory field. Thanks to [Andrey Fedoseev](https://github.com/andreyfedoseev)!
+
+Fixed Issues:
+
+* [#9991](http://dev.ckeditor.com/ticket/9991): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) should only normalize input data.
+* [#7209](http://dev.ckeditor.com/ticket/7209): Fixed: Lists with 3 levels not [pasted from Word](http://ckeditor.com/addon/pastefromword) correctly.
+* [#14335](http://dev.ckeditor.com/ticket/14335): Fixed: Pasting a numbered list starting with a value different from "1" from Microsoft Word does not work correctly.
+* [#14542](http://dev.ckeditor.com/ticket/14542): Fixed: Copying a numbered list from Microsoft Word does not preserve list formatting.
+* [#14544](http://dev.ckeditor.com/ticket/14544): Fixed: Copying a nested list from Microsoft Word results in an empty list.
+* [#14660](http://dev.ckeditor.com/ticket/14660): Fixed: [Pasting text from  Word](http://ckeditor.com/addon/pastefromword) breaks the styling in some cases.
+* [#14867](http://dev.ckeditor.com/ticket/14867): [Firefox] Fixed: Text gets stripped when [pasting content from Word](http://ckeditor.com/addon/pastefromword).
+* [#2507](http://dev.ckeditor.com/ticket/2507): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) does not detect pasting a part of a paragraph.
+* [#3336](http://dev.ckeditor.com/ticket/3336): Fixed: Extra blank row added on top of the content [pasted from Word](http://ckeditor.com/addon/pastefromword).
+* [#6115](http://dev.ckeditor.com/ticket/6115): Fixed: When Right-to-Left text direction is applied to a table [pasted from Word](http://ckeditor.com/addon/pastefromword), borders are missing on one side.
+* [#6342](http://dev.ckeditor.com/ticket/6342): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filters out a basic text style when it is [configured to use attributes](http://docs.ckeditor.com/#!/guide/dev_basicstyles-section-custom-basic-text-style-definition).
+* [#6457](http://dev.ckeditor.com/ticket/6457): [IE] Fixed: [Pasting from Word](http://ckeditor.com/addon/pastefromword) is extremely slow.
+* [#6789](http://dev.ckeditor.com/ticket/6789): Fixed: The `mso-list: ignore` style is not handled properly when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#7262](http://dev.ckeditor.com/ticket/7262): Fixed: Lists in preformatted body disappear when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#7662](http://dev.ckeditor.com/ticket/7662): [Opera] Fixed: Extra empty number/bullet shown in the editor body when editing a multi-level list [pasted from Word](http://ckeditor.com/addon/pastefromword).
+* [#7807](http://dev.ckeditor.com/ticket/7807): Fixed: Last item in a list not converted to a `<li>` element after [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#7950](http://dev.ckeditor.com/ticket/7950): [IE] Fixed: Content [from Word pasted](http://ckeditor.com/addon/pastefromword) differently than in other browsers.
+* [#7982](http://dev.ckeditor.com/ticket/7982): Fixed: Multi-level lists get split into smaller ones when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#8231](http://dev.ckeditor.com/ticket/8231): [WebKit, Opera] Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) inserts empty paragraphs.
+* [#8266](http://dev.ckeditor.com/ticket/8266): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) inserts a blank line at the top.
+* [#8341](http://dev.ckeditor.com/ticket/8341), [#7646](http://dev.ckeditor.com/ticket/7646): Fixed: Faulty removal of empty `<span>` elements in [Paste from Word](http://ckeditor.com/addon/pastefromword) content cleanup breaking content formatting.
+* [#8754](http://dev.ckeditor.com/ticket/8754): [Firefox] Fixed: Incorrect pasting of multiple nested lists in [Paste from Word](http://ckeditor.com/addon/pastefromword).
+* [#8983](http://dev.ckeditor.com/ticket/8983): Fixed: Alignment lost when [pasting from Word](http://ckeditor.com/addon/pastefromword) with [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) set to [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR).
+* [#9331](http://dev.ckeditor.com/ticket/9331): [IE] Fixed: [Pasting text from Word](http://ckeditor.com/addon/pastefromword) creates a simple Caesar cipher.
+* [#9422](http://dev.ckeditor.com/ticket/9422): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) leaves an unwanted `color:windowtext` style.
+* [#10011](http://dev.ckeditor.com/ticket/10011): [IE9-10] Fixed: [`config.pasteFromWordRemoveFontStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveFontStyles) is ignored under certain conditions.
+* [#10643](http://dev.ckeditor.com/ticket/10643): Fixed: Differences between using <kbd>Ctrl+V</kbd> and pasting from the [Paste from Word](http://ckeditor.com/addon/pastefromword) dialog.
+* [#10784](http://dev.ckeditor.com/ticket/10784): Fixed: Lines missing when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#11294](http://dev.ckeditor.com/ticket/11294): [IE10] Fixed: Font size is not preserved when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#11627](http://dev.ckeditor.com/ticket/11627): Fixed: Missing words when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#12784](http://dev.ckeditor.com/ticket/12784): Fixed: Bulleted list with custom bullets gets changed to a numbered list when [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#13174](http://dev.ckeditor.com/ticket/13174): Fixed: Data loss after [pasting from Word](http://ckeditor.com/addon/pastefromword).
+* [#13828](http://dev.ckeditor.com/ticket/13828): Fixed: Widget classes should be added to the wrapper rather than the widget element.
+* [#13829](http://dev.ckeditor.com/ticket/13829): Fixed: No class in [Widget](http://ckeditor.com/addon/widget) wrapper to identify the widget type.
+* [#13519](http://dev.ckeditor.com/ticket/13519): Server response received when uploading files should be more flexible.
+
+Other Changes:
+
+* Updated [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type) and [WebSpellChecker](http://ckeditor.com/addon/wsc) plugins:
+ 	* Support for the new default Moono-Lisa skin.
+ 	* [#121](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/121): Fixed: [Basic Styles](http://ckeditor.com/addon/basicstyles) do not work when SCAYT is enabled.
+ 	* [#125](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/125): Fixed: Inline styles are not continued when writing multiple lines of styled text with SCAYT enabled.
+ 	* [#127](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/127): Fixed: Uncaught TypeError after enabling SCAYT in the CKEditor `<div>` element.
+ 	* [#128](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/128): Fixed: Error thrown after enabling SCAYT caused by conflicts with RequireJS.
+
+## CKEditor 4.5.11
+
+**Security Updates:**
+
+* [Severity: minor] Fixed the `target="_blank"` vulnerability reported by James Gaskell.
+
+	Issue summary: If a victim had access to a spoofed version of ckeditor.com via HTTP (e.g. due to DNS spoofing, using a hacked public network or mailicious hotspot), then when using a link to the ckeditor.com website it was possible for the attacker to change the current URL of the opening page, even if the opening page was protected with SSL.
+
+  An upgrade is recommended.
+
+New Features:
+
+* [#14747](http://dev.ckeditor.com/ticket/14747): The [Enhanced Image](http://ckeditor.com/addon/image2) caption now supports the link `target` attribute.
+* [#7154](http://dev.ckeditor.com/ticket/7154): Added support for the "Display Text" field to the [Link](http://ckeditor.com/addon/link) dialog. Thanks to [Ryan Guill](https://github.com/ryanguill)!
+
+Fixed Issues:
+
+* [#13362](http://dev.ckeditor.com/ticket/13362): [Blink, WebKit] Fixed: Active widget element is not cached when it is losing focus and it is inside an editable element.
+* [#13755](http://dev.ckeditor.com/ticket/13755): [Edge] Fixed: Pasting images does not work.
+* [#13548](http://dev.ckeditor.com/ticket/13548): [IE] Fixed: Clicking the [elements path](http://ckeditor.com/addon/elementspath) disables Cut and Copy icons.
+* [#13812](http://dev.ckeditor.com/ticket/13812): Fixed: When aborting file upload the placeholder for image is left.
+* [#14659](http://dev.ckeditor.com/ticket/14659): [Blink] Fixed: Content scrolled to the top after closing the dialog in a [`<div>`-based editor](http://ckeditor.com/addon/divarea).
+* [#14825](http://dev.ckeditor.com/ticket/14825): [Edge] Fixed: Focusing the editor causes unwanted scrolling due to dropped support for the `setActive` method.
+
+## CKEditor 4.5.10
+
+Fixed Issues:
+
+* [#10750](http://dev.ckeditor.com/ticket/10750): Fixed: The editor does not escape the `font-style` family property correctly, removing quotes and whitespace from font names.
+* [#14413](http://dev.ckeditor.com/ticket/14413): Fixed: The [Auto Grow](http://ckeditor.com/addon/autogrow) plugin with the [`config.autoGrow_onStartup`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_onStartup) option set to `true` does not work properly for an editor that is not visible.
+* [#14451](http://dev.ckeditor.com/ticket/14451): Fixed: Numeric element ID not escaped properly. Thanks to [Jakub Chalupa](https://github.com/chaluja7)!
+* [#14590](http://dev.ckeditor.com/ticket/14590): Fixed: Additional line break appearing after inline elements when switching modes. Thanks to [dpidcock](https://github.com/dpidcock)!
+* [#14539](https://dev.ckeditor.com/ticket/14539): Fixed: JAWS reads "selected Blank" instead of "selected <widget name>" when selecting a widget.
+* [#14701](http://dev.ckeditor.com/ticket/14701): Fixed: More precise labels for [Enhanced Image](http://ckeditor.com/addon/image2) and [Placeholder](http://ckeditor.com/addon/placeholder) widgets.
+* [#14667](http://dev.ckeditor.com/ticket/14667): [IE] Fixed: Removing background color from selected text removes background color from the whole paragraph.
+* [#14252](http://dev.ckeditor.com/ticket/14252): [IE] Fixed: Styles drop-down list does not always reflect the current style of the text line.
+* [#14275](http://dev.ckeditor.com/ticket/14275): [IE9+] Fixed: `onerror` and `onload` events are not used in browsers it could have been used when loading scripts dynamically.
+
+## CKEditor 4.5.9
+
+Fixed Issues:
+
+* [#10685](http://dev.ckeditor.com/ticket/10685): Fixed: Unreadable toolbar icons after updating to the new editor version. Fixed with [6876179](https://github.com/ckeditor/ckeditor-dev/commit/6876179db4ee97e786b07b8fd72e6b4120732185) in [ckeditor-dev](https://github.com/ckeditor/ckeditor-dev) and [6c9189f4](https://github.com/ckeditor/ckeditor-presets/commit/6c9189f46392d2c126854fe8889b820b8c76d291) in [ckeditor-presets](https://github.com/ckeditor/ckeditor-presets).
+* [#14573](https://dev.ckeditor.com/ticket/14573): Fixed: Missing [Widget](http://ckeditor.com/addon/widget) drag handler CSS when there are multiple editor instances.
+* [#14620](https://dev.ckeditor.com/ticket/14620): Fixed: Setting both the `min-height` style for the `<body>` element and the `height` style for the `<html>` element breaks the [Auto Grow](http://ckeditor.com/addon/autogrow) plugin.
+* [#14538](http://dev.ckeditor.com/ticket/14538): Fixed: Keyboard focus goes into an embedded `<iframe>` element.
+* [#14602](http://dev.ckeditor.com/ticket/14602): Fixed: The [`dom.element.removeAttribute()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeAttribute) method does not remove all attributes if no parameter is given.
+* [#8679](http://dev.ckeditor.com/ticket/8679): Fixed: Better focus indication and ability to style the selected color in the [color picker dialog](http://ckeditor.com/addon/colordialog).
+* [#11697](http://dev.ckeditor.com/ticket/11697): Fixed: Content is replaced ignoring the letter case setting in the [Find and Replace](http://ckeditor.com/addon/find) dialog window.
+* [#13886](http://dev.ckeditor.com/ticket/13886): Fixed: Invalid handling of the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) instance with the `styles` property by [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter).
+* [#14535](http://dev.ckeditor.com/ticket/14535): Fixed: CSS syntax corrections. Thanks to [mdjdenormandie](https://github.com/mdjdenormandie)!
+
+## CKEditor 4.5.8
+
+New Features:
+
+* [#12440](http://dev.ckeditor.com/ticket/12440): Added the [`config.colorButton_enableAutomatic`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-colorButton_enableAutomatic) option to allow hiding the "Automatic" option in the [color picker](http://ckeditor.com/addon/colorbutton).
+
+Fixed Issues:
+
+* [#10448](http://dev.ckeditor.com/ticket/10448): Fixed: Lack of scrollbar in the [right-to-left text direction](http://ckeditor.com/addon/bidi).
+* [#12707](http://dev.ckeditor.com/ticket/12707): Fixed: The order of table elements does not comply with the HTML specification.
+* [#13756](http://dev.ckeditor.com/ticket/13756): [Edge] Fixed: Context menus are cut-off.
+
+## CKEditor 4.5.7
+
+New Features:
+
+* [#14327](http://dev.ckeditor.com/ticket/14327): Added Swiss German localization. Thanks to [Miro Grenda](https://twitter.com/mirogrenda)!
+
+Fixed Issues:
+
+* [#13816](http://dev.ckeditor.com/ticket/13816): Introduced a new strategy for Filling Character handling to avoid changes in DOM. This fixes the following issues:
+	* [#12727](http://dev.ckeditor.com/ticket/12727): [Blink] `IndexSizeError` when using the [Div Editing Area](http://ckeditor.com/addon/divarea) and [Content Templates](http://ckeditor.com/addon/templates) plugins.
+	* [#13377](http://dev.ckeditor.com/ticket/13377): [Widget](http://ckeditor.com/addon/widget) plugin issue when typing in Korean.
+	* [#13389](http://dev.ckeditor.com/ticket/13389): [Blink] [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) fails when the cursor is next to an `<hr>` tag.
+	* [#13513](http://dev.ckeditor.com/ticket/13513): [Blink, WebKit] [Div Editing Area](http://ckeditor.com/addon/divarea) and [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) throw an error when an image is the only data in the editor.
+* [#13884](http://dev.ckeditor.com/ticket/13884): [Firefox] Fixed: Copying and pasting a table results in just the first cell being pasted.
+* [#14234](http://dev.ckeditor.com/ticket/14234): Fixed: URL input field is not marked as required in the [Media Embed](http://ckeditor.com/addon/embed) dialog.
+
+## CKEditor 4.5.6
+
+New Features:
+
+* Introduced the [`CKEDITOR.tools.getCookie()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-getCookie) and [`CKEDITOR.tools.setCookie()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-setCookie) methods for accessing cookies.
+* Introduced the [`CKEDITOR.tools.getCsrfToken()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-getCsrfToken) method. The CSRF token is now automatically sent by the [File Browser](http://ckeditor.com/addon/filebrowser) and [File Tools](http://ckeditor.com/addon/filetools) plugins during file uploads. The server-side upload handlers may check it and use it to additionally secure the communication.
+
+Other Changes:
+
+* Updated [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type):
+	- New features:
+		- CKEditor [Language](http://ckeditor.com/addon/language) plugin support.
+		- CKEditor [Placeholder](http://ckeditor.com/addon/placeholder) plugin support.
+		- [Drag&Drop](http://sdk.ckeditor.com/samples/fileupload.html) support.
+		- **Experimental** [GRAYT](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-grayt_autoStartup) (Grammar As You Type) functionality.
+	- Fixed issues:
+		* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98): SCAYT affects dialog double-click. Fixed in SCAYT core.
+		* [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102): SCAYT core performance enhancements.
+		* [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104): SCAYT's spans leak into the clipboard and after pasting.
+		* [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105): A JavaScript error fired in case of multiple instances of CKEditor on one page.
+		* [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107): SCAYT should not check non-editable parts of content.
+		* [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108): Latest SCAYT copies the ID of the editor element to the iframe.
+		* SCAYT stops working when CKEditor [Undo plugin](http://ckeditor.com/addon/undo) not enabled.
+		* Issue with pasting SCAYT markup in CKEditor.
+		* SCAYT stops working after pressing the *Cancel* button in the WSC dialog.
+
+## CKEditor 4.5.5
+
+Fixed Issues:
+
+* [#13887](https://dev.ckeditor.com/ticket/13887): Fixed: [Link](http://ckeditor.com/addon/link) plugin alters the `target` attribute value. Thanks to [SamZiemer](https://github.com/SamZiemer)!
+* [#12189](http://dev.ckeditor.com/ticket/12189): Fixed: The [Link](http://ckeditor.com/addon/link) plugin dialog does not display the subject of email links if the subject parameter is not lowercase.
+* [#9192](http://dev.ckeditor.com/ticket/9192): Fixed: An `undefined` string is appended to an email address added with the [Link](http://ckeditor.com/addon/link) plugin if subject and email body are empty and [`config.emailProtection`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-emailProtection) is set to `encode`.
+* [#13790](https://dev.ckeditor.com/ticket/13790): Fixed: It is not possible to destroy the editor `<iframe>` after the editor was detached from DOM. Thanks to [Stefan Rijnhart](https://github.com/StefanRijnhart)!
+* [#13803](https://dev.ckeditor.com/ticket/13803): Fixed: The editor cannot be destroyed before being fully initialized. Thanks to [Cyril Fluck](https://github.com/cyril-sf)!
+* [#13867](http://dev.ckeditor.com/ticket/13867): Fixed: CKEditor does not work when the `classList` polyfill is used.
+* [#13885](http://dev.ckeditor.com/ticket/13885): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) requires the [Link](http://ckeditor.com/addon/link) plugin to link an image.
+* [#13883](http://dev.ckeditor.com/ticket/13883): Fixed: Copying a table using the context menu strips off styles.
+* [#13872](http://dev.ckeditor.com/ticket/13872): Fixed: Cutting is possible in the [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode.
+* [#12848](http://dev.ckeditor.com/ticket/12848): [Blink] Fixed: Opening the [Find and Replace](http://ckeditor.com/addon/find) dialog window in the [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode throws an exception.
+* [#13879](http://dev.ckeditor.com/ticket/13879): Fixed: It is not possible to prevent the [`editor.drop`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-drop) event.
+* [#13361](http://dev.ckeditor.com/ticket/13361): Fixed: Skin images fail when the site path includes parentheses because the `background-image` path needs single quotes around the URL value.
+* [#13771](http://dev.ckeditor.com/ticket/13771): Fixed: The `contents.css` style is not used if the [IFrame Editing Area](http://ckeditor.com/addon/wysiwygarea) plugin is missing.
+* [#13782](http://dev.ckeditor.com/ticket/13782): Fixed: Unclear log messages.
+* [#13919](http://dev.ckeditor.com/ticket/13919): [Edge] Fixed: Browser window crashes when accessing the `isContentEditable` property of an `<input>` DOM element.
+
+Other Changes:
+
+* [#13859](http://dev.ckeditor.com/ticket/13859): Test cases created with `bender.tools.createTestsForEditors` will also receive editor bot as a second parameter.
+
+## CKEditor 4.5.4
+
+New Features:
+
+* [#13632](http://dev.ckeditor.com/ticket/13632): Introduce error logging mechanism.
+* [#13730](http://dev.ckeditor.com/ticket/13730): Switch to the new error logging mechanism.
+
+Fixed Issues:
+
+* [#9856](http://dev.ckeditor.com/ticket/9856): Fixed: Cannot use the native context menu together with the [Div Editing Area](http://ckeditor.com/addon/divarea) plugin. Thanks to [Mark Wade](https://github.com/mark-wade)!
+* [#12733](http://dev.ckeditor.com/ticket/12733): [IE9+] Fixed: Radio button `onChange` does not work. Thanks to [Iliya Kostadinov](https://github.com/iliyakostadinov)!
+* [#13142](http://dev.ckeditor.com/ticket/13142): [Edge] Fixed: *Ctrl+A* and then *Backspace* result in an empty `<div>` element.
+* [#13599](http://dev.ckeditor.com/ticket/13599): Fixed: Cross-editor drag and drop of an inline widget results in error/artifacts.
+* [#13640](http://dev.ckeditor.com/ticket/13640): [IE] Fixed: Dropping a widget outside the `<body>` element is not handled correctly.
+* [#13533](http://dev.ckeditor.com/ticket/13533): Fixed: No progress during upload.
+* [#13680](http://dev.ckeditor.com/ticket/13680): Fixed: The parser should allow the `<h1-6>` element to be a child of the `<summary>` element.
+* [#11724](http://dev.ckeditor.com/ticket/11724): [Touch devices] Fixed: Drop-downs often hide right after opening them.
+* [#13690](http://dev.ckeditor.com/ticket/13690): Fixed: Copying content from IE to Chrome adds an extra paragraph.
+* [#13284](http://dev.ckeditor.com/ticket/13284): Fixed: Cannot drag and drop a widget if the text caret is placed just after the widget instance.
+* [#13516](http://dev.ckeditor.com/ticket/13516): Fixed: CKEditor removes empty HTML5 anchors without the `name` attribute.
+* [#13765](http://dev.ckeditor.com/ticket/13765): [Safari 9] Fixed: Problems with rendering samples.
+
+Other Changes:
+
+* [#11725](http://dev.ckeditor.com/ticket/11725): Marked [`CKEDITOR.env.mobile`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-mobile) as deprecated. The reason is that it is no longer clear what "mobile" means.
+* [#13737](http://dev.ckeditor.com/ticket/13737): Upgraded [Bender.js](https://github.com/benderjs/benderjs) to 0.4.1.
+
+## CKEditor 4.5.3
+
+New Features:
+
+* [#13501](http://dev.ckeditor.com/ticket/13501): Added the [`config.fileTools_defaultFileName`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fileTools_defaultFileName) option to allow setting a default file name for paste uploads.
+* [#13603](http://dev.ckeditor.com/ticket/13603): Added support for uploading dropped BMP images.
+
+Fixed Issues:
+
+* [#13590](http://dev.ckeditor.com/ticket/13590): Fixed: Various issues related to the [Paste from Word](http://ckeditor.com/addon/pastefromword) feature. Fixes also:
+  * [#11215](http://dev.ckeditor.com/ticket/11215),
+  * [#8780](http://dev.ckeditor.com/ticket/8780),
+  * [#12762](http://dev.ckeditor.com/ticket/12762).
+* [#13386](http://dev.ckeditor.com/ticket/13386): [Edge] Fixed: Issues with selecting and editing images.
+* [#13568](http://dev.ckeditor.com/ticket/13568): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method returns invalid results for entire content selection.
+* [#13453](http://dev.ckeditor.com/ticket/13453): Fixed: Drag&drop of entire editor content throws an error.
+* [#13465](http://dev.ckeditor.com/ticket/13465): Fixed: Error is thrown and the widget is lost on drag&drop if it is the only content of the editor.
+* [#13414](http://dev.ckeditor.com/ticket/13414): Fixed: Content auto paragraphing in a nested editable despite editor configuration.
+* [#13429](http://dev.ckeditor.com/ticket/13429): Fixed: Incorrect selection after content insertion by the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin.
+* [#13388](http://dev.ckeditor.com/ticket/13388): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) integration with [Undo](http://ckeditor.com/addon/undo) is broken.
+
+Other Changes:
+
+* [#13637](https://dev.ckeditor.com/ticket/13637): Several icons were refactored.
+* Updated [Bender.js](https://github.com/benderjs/benderjs) to 0.3.0 and introduced the ability to run tests via HTTPs ([#13265](https://dev.ckeditor.com/ticket/13265)).
+
+## CKEditor 4.5.2
+
+Fixed Issues:
+
+* [#13609](http://dev.ckeditor.com/ticket/13609): [Edge] Fixed: The browser crashes when switching to the source mode. Thanks to [Andrew Williams and Mark Smeed](http://webxsolution.com/)!
+* [PR#201](https://github.com/ckeditor/ckeditor-dev/pull/201): Fixed: Buttons in the toolbar configurator cause form submission. Thanks to [colemanw](https://github.com/colemanw)!
+* [#13422](http://dev.ckeditor.com/ticket/13422): Fixed: A monospaced font should be used in the `<textarea>` element storing editor configuration in the toolbar configurator.
+* [#13494](http://dev.ckeditor.com/ticket/13494): Fixed: Error thrown in the toolbar configurator if plugin requirements are not met.
+* [#13409](http://dev.ckeditor.com/ticket/13409): Fixed: List elements incorrectly merged when pressing *Backspace* or *Delete*.
+* [#13434](http://dev.ckeditor.com/ticket/13434): Fixed: Dialog state indicator broken in Right–To–Left environments.
+* [#13460](http://dev.ckeditor.com/ticket/13460): [IE8] Fixed: Copying inline widgets is broken when [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf) is disabled.
+* [#13495](http://dev.ckeditor.com/ticket/13495): [Firefox, IE] Fixed: Text is not word-wrapped in the Paste dialog window.
+* [#13528](http://dev.ckeditor.com/ticket/13528): [Firefox@Windows] Fixed: Content copied from Microsoft Word and other external applications is pasted as a plain text. Removed the `CKEDITOR.plugins.clipboard.isHtmlInExternalDataTransfer` property as the check must be dynamic.
+* [#13583](http://dev.ckeditor.com/ticket/13583): Fixed: [`DataTransfer.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer-method-getData) should work consistently in all browsers and should not strip valuable content. Fixed pasting tables from Microsoft Excel on Chrome.
+* [#13468](http://dev.ckeditor.com/ticket/13468): [IE] Fixed: Binding drag&drop `dataTransfer` does not work if `text` data was set in the meantime.
+* [#13451](http://dev.ckeditor.com/ticket/13451): [IE8-9] Fixed: One drag&drop operation may affect following ones.
+* [#13184](http://dev.ckeditor.com/ticket/13184): Fixed: Web page reloaded after a drop on editor UI.
+* [#13129](http://dev.ckeditor.com/ticket/13129) Fixed: Block widget blurred after a drop followed by an undo.
+* [#13397](http://dev.ckeditor.com/ticket/13397): Fixed: Drag&drop of a widget inside its nested widget crashes the editor.
+* [#13385](http://dev.ckeditor.com/ticket/13385): Fixed: [`editor.getSnapshot()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSnapshot) may return a non-string value.
+* [#13419](http://dev.ckeditor.com/ticket/13419): Fixed: The [Auto Link](http://ckeditor.com/addon/autolink) plugin does not encode double quotes in URLs.
+* [#13420](http://dev.ckeditor.com/ticket/13420): Fixed: The [Auto Embed](http://ckeditor.com/addon/autoembed) plugin ignores encoded characters in URL parameters.
+* [#13410](http://dev.ckeditor.com/ticket/13410): Fixed: Error thrown in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin when undoing right after pasting a link.
+* [#13566](http://dev.ckeditor.com/ticket/13566): Fixed: Suppressed notifications in the [Media Embed Base](http://ckeditor.com/addon/embedbase) plugin.
+* [#11616](http://dev.ckeditor.com/ticket/11616): [Chrome] Fixed: Resizing the editor while it is not displayed breaks the editable. Fixes also [#9160](http://dev.ckeditor.com/ticket/9160) and [#9715](http://dev.ckeditor.com/ticket/9715).
+* [#11376](http://dev.ckeditor.com/ticket/11376): [IE11] Fixed: Loss of text when pasting bulleted lists from Microsoft Word.
+* [#13143](http://dev.ckeditor.com/ticket/13143): [Edge] Fixed: Focus lost when opening the panel.
+* [#13387](http://dev.ckeditor.com/ticket/13387): [Edge] Fixed: "Permission denied" error thrown when loading the editor with developer tools open.
+* [#13574](http://dev.ckeditor.com/ticket/13574): [Edge] Fixed: "Permission denied" error thrown when opening editor dialog windows.
+* [#13441](http://dev.ckeditor.com/ticket/13441): [Edge] Fixed: The [Clipboard](http://ckeditor.com/addon/clipboard) plugin breaks the state of [Undo](http://ckeditor.com/addon/undo) commands after a paste.
+* [#13554](http://dev.ckeditor.com/ticket/13554): [Edge] Fixed: Paste dialog's iframe does not receive focus on show.
+* [#13440](http://dev.ckeditor.com/ticket/13440): [Edge] Fixed: Unable to paste a widget.
+
+Other Changes:
+
+* [#13421](http://dev.ckeditor.com/ticket/13421): UX improvements to notifications in the [Auto Embed](http://ckeditor.com/addon/autoembed) plugin.
+
+## CKEditor 4.5.1
+
+Fixed Issues:
+
+* [#13486](http://dev.ckeditor.com/ticket/13486): Fixed: The [Upload Image](http://ckeditor.com/addon/uploadimage) plugin should log an error, not throw an error when upload URL is not set.
+
+## CKEditor 4.5
+
+New Features:
+
+* [#13304](http://dev.ckeditor.com/ticket/13304): Added support for passing DOM elements to [`config.sharedSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-sharedSpaces). Thanks to [Undergrounder](https://github.com/Undergrounder)!
+* [#13215](http://dev.ckeditor.com/ticket/13215): Added ability to cancel fetching a resource by the Embed plugins.
+* [#13213](http://dev.ckeditor.com/ticket/13213): Added the [`dialog#setState()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-method-setState) method and used it in the [Embed](http://ckeditor.com/addon/embed) dialog to indicate that a resource is being loaded.
+* [#13337](http://dev.ckeditor.com/ticket/13337): Added the [`repository.onWidget()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-onWidget) method &mdash; a convenient way to listen to [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) events through the [repository](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository).
+* [#13214](http://dev.ckeditor.com/ticket/13214): Added support for pasting links that convert into embeddable resources on the fly.
+
+Fixed Issues:
+
+* [#13334](http://dev.ckeditor.com/ticket/13334): Fixed: Error after nesting widgets and playing with undo/redo.
+* [#13118](http://dev.ckeditor.com/ticket/13118): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method throws an error when called in the source mode.
+* [#13158](http://dev.ckeditor.com/ticket/13158): Fixed: Error after canceling a dialog when creating a widget.
+* [#13197](http://dev.ckeditor.com/ticket/13197): Fixed: Linked inline [Enhanced Image](http://ckeditor.com/addon/image2) alignment class is not transferred to the widget wrapper.
+* [#13199](http://dev.ckeditor.com/ticket/13199): Fixed: [Semantic Embed](http://ckeditor.com/addon/embedsemantic) does not support widget classes.
+* [#13003](http://dev.ckeditor.com/ticket/13003): Fixed: Anchors are uploaded when moving them by drag and drop.
+* [#13032](http://dev.ckeditor.com/ticket/13032): Fixed: When upload is done, notification update should be marked as important.
+* [#13300](http://dev.ckeditor.com/ticket/13300): Fixed: The `internalCommit` argument in the [Image](http://ckeditor.com/addon/image) dialog seems to be never used.
+* [#13036](http://dev.ckeditor.com/ticket/13036): Fixed: Notifications are moved 10px to the right.
+* [#13280](http://dev.ckeditor.com/ticket/13280): [IE8] Fixed: Undo after inline widget drag&drop throws an error.
+* [#13186](http://dev.ckeditor.com/ticket/13186): Fixed: Content dropped into a nested editable is not filtered by [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf).
+* [#13140](http://dev.ckeditor.com/ticket/13140): Fixed: Error thrown when dropping a block widget right after itself.
+* [#13176](http://dev.ckeditor.com/ticket/13176): [IE8] Fixed: Errors on drag&drop of embed widgets.
+* [#13015](http://dev.ckeditor.com/ticket/13015): Fixed: Dropping an image file on [Enhanced Image](http://ckeditor.com/addon/image2) causes a page reload.
+* [#13080](http://dev.ckeditor.com/ticket/13080): Fixed: Ugly notification shown when the response contains HTML content.
+* [#13011](http://dev.ckeditor.com/ticket/13011): [IE8] Fixed: Anchors are duplicated on drag&drop in specific locations.
+* [#13105](http://dev.ckeditor.com/ticket/13105): Fixed: Various issues related to [`CKEDITOR.tools.htmlEncode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlEncode) and [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) methods.
+* [#11976](http://dev.ckeditor.com/ticket/11976): [Chrome] Fixed: Copy&paste and drag&drop lists from Microsoft Word.
+* [#13128](http://dev.ckeditor.com/ticket/13128): Fixed: Various issues with cloning element IDs:
+  * Fixed the default behavior of [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) and [`range.extractContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) methods which now clone IDs similarly to their native counterparts.
+  * Added `cloneId` arguments to the above methods, [`range.splitBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-splitBlock) and [`element.breakParent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-breakParent). Mind the default values and special behavior in the `extractContents()` method!
+  * Fixed issues where IDs were lost on copy&paste and drag&drop.
+* Toolbar configurators:
+  * [#13185](http://dev.ckeditor.com/ticket/13185): Fixed: Wrong position of the suggestion box if there is not enough space below the caret.
+  * [#13138](http://dev.ckeditor.com/ticket/13138): Fixed: The "Toggle empty elements" button label is unclear.
+  * [#13136](http://dev.ckeditor.com/ticket/13136): Fixed: Autocompleter is far too intrusive.
+  * [#13133](http://dev.ckeditor.com/ticket/13133): Fixed: Tab leaves the editor.
+  * [#13173](http://dev.ckeditor.com/ticket/13173): Fixed: [`config.removeButtons`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-removeButtons) is ignored by the advanced toolbar configurator.
+
+Other Changes:
+
+* [#13119](http://dev.ckeditor.com/ticket/13119): Improved compatibility of editor skins ([Moono](http://ckeditor.com/addon/moono) and [Kama](http://ckeditor.com/addon/kama)) with external web page style sheets.
+* Toolbar configurators:
+  * [#13147](http://dev.ckeditor.com/ticket/13147): Added buttons to the sticky toolbar.
+  * [#13207](http://dev.ckeditor.com/ticket/13207): Used modal window to display toolbar configurator help.
+* [#13316](http://dev.ckeditor.com/ticket/13316): Made [`CKEDITOR.env.isCompatible`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-isCompatible) a blacklist rather than a whitelist. More about the change in the [Browser Compatibility](http://docs.ckeditor.com/#!/guide/dev_browsers) guide.
+* [#13398](http://dev.ckeditor.com/ticket/13398): Renamed `CKEDITOR.fileTools.UploadsRepository` to [`CKEDITOR.fileTools.UploadRepository`](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadRepository) and changed all related properties.
+* [#13279](http://dev.ckeditor.com/ticket/13279): Reviewed CSS vendor prefixes.
+* [#13454](http://dev.ckeditor.com/ticket/13454): Removed unused `lang.image.alertUrl` token from the [Image](http://ckeditor.com/addon/image) plugin.
+
+## CKEditor 4.5 Beta
+
+New Features:
+
+* Clipboard (copy&paste, drag&drop) and file uploading features and improvements ([#11437](http://dev.ckeditor.com/ticket/11437)).
+
+  * Major features:
+    * Support for dropping and pasting files into the editor was introduced. Through a set of new facades for native APIs it is now possible to easily intercept and process inserted files.
+    * [File upload tools](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools) were introduced in order to simplify controlling the loading, uploading and handling server response, properly handle [new upload configuration](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uploadUrl) options, etc.
+    * [Upload Image](http://ckeditor.com/addon/uploadimage) widget was introduced to upload dropped images. A base class for the [upload widget](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition) was exposed, too, to make it simple to create new types of upload widgets which can handle any type of dropped file, show the upload progress and update the content when the process is done. It also handles editing and undo/redo operations when a file is being uploaded and integrates with the [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) to show progress and success or error.
+    * All drag and drop operations were integrated with the editor. All dropped content is passed through the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event and a set of new editor events was introduced &mdash; [`dragstart`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragstart), [`drop`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-drop), [`dragend`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-dragend).
+    * The [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) facade was introduced to unify access to data in various types and files. [Data Transfer](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.clipboard.dataTransfer) is now always available in the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event.
+    * Switched from the pastebin to using the native clipboard access whenever possible. This solved many issues related to pastebin such as unnecessary scrolling or data loss. Additionally, on copy and cut from the editor the clipboard data is set. Therefore, on paste the editor has access to clean data, undisturbed by the browsers.
+    * Drag and drop of inline and block widgets was integrated with the standard clipboard APIs. By listening to drag events you will thus be notified about widgets, too. This opens a possibility to filter pasted and dropped widgets.
+    * The [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event can have the `range` parameter so it is possible to change the paste position in the listener or paste in the not selectable position. Also the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method now accepts `range` as an additional parameter.
+    * [#11621](http://dev.ckeditor.com/ticket/11621): A configurable [paste filter](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFilter) was introduced. The filter is by default turned to `'semantic-content'` on Webkit and Blink for all pasted content coming from external sources because of the low quality of HTML that these engines put into the clipboard. Internal and cross-editor paste is safe due to the change explained in the previous point.
+
+  * Other changes and related fixes:
+    * [#12095](http://dev.ckeditor.com/ticket/12095): On drag and copy of widgets [the same method](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) is used to get selected HTML as in the normal case. Thanks to that styles applied to inline widgets are not lost.
+    * [#11219](http://dev.ckeditor.com/ticket/11219): Fixed: Dragging a [captioned image](http://ckeditor.com/addon/image2) does not fire the [`editor#paste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-paste) event.
+    * [#9554](http://dev.ckeditor.com/ticket/9554): [Webkit Mac] Fixed: Editor scrolls on paste.
+    * [#9898](http://dev.ckeditor.com/ticket/9898): [Webkit&Divarea] Fixed: Pasting causes undesirable scrolling.
+    * [#11993](http://dev.ckeditor.com/ticket/11993): [Chrome] Fixed: Pasting content scrolls the document.
+    * [#12613](http://dev.ckeditor.com/ticket/12613): Show the user that they can not drop on editor UI (toolbar, bottom bar).
+    * [#12851](http://dev.ckeditor.com/ticket/12851): [Blink/Webkit] Fixed: Formatting disappears when pasting content into cells.
+    * [#12914](http://dev.ckeditor.com/ticket/12914): Fixed: Copy/Paste of table broken in `div`-based editor.
+
+  * Browser support.<br>Browser support for related features varies significantly (see http://caniuse.com/clipboard).
+    * File APIs needed to operate and file upload is not supported in Internet Explorer 9 and below.
+    * Only Chrome and Safari on Mac OS support setting custom data items in the clipboard, so currently it is possible to recognize the origin of the copied content in these browsers only. All drag and drop operations can be identified thanks to the new Data Transfer facade.
+    * No Internet Explorer browser supports the standard clipboard API which results in small glitches like where only plain text can be dropped from outside the editor. Thanks to the new Data Transfer facade, internal and cross-editor drag and drop supports the full range of data.
+    * Direct access to clipboard could only be implemented in Chrome, Safari on Mac OS, Opera and Firefox. In other browsers the pastebin must still be used.
+
+* [#12875](http://dev.ckeditor.com/ticket/12875): Samples and toolbar configuration tools.
+  * The old set of samples shipped with every CKEditor package was replaced with a shiny new single-page sample. This change concluded a long term plan which started from introducing the [CKEditor SDK](http://sdk.ckeditor.com/) and [CKEditor Functionality Overview](http://docs.ckeditor.com/#!/guide/dev_features) section in the documentation which essentially redefined the old samples.
+  * Toolbar configurators with live previews were introduced. They will be shipped with every CKEditor package and are meant to help in configuring toolbar layouts.
+
+* [#10925](http://dev.ckeditor.com/ticket/10925): The [Media Embed](http://ckeditor.com/addon/embed) and [Semantic Media Embed](http://ckeditor.com/addon/embedsemantic) plugins were introduced. Read more about the new features in the [Embedding Content](http://docs.ckeditor.com/#!/guide/dev_media_embed) article.
+* [#10931](http://dev.ckeditor.com/ticket/10931): Added support for nesting widgets. It is now possible to insert one widget into another widget's nested editable. Note that unless nested editable's [allowed content](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable.definition-property-allowedContent) is defined precisely, starting from CKEditor 4.5 some widget buttons may become enabled. This feature is not supported in IE8. Included issues:
+  * [#12018](http://dev.ckeditor.com/ticket/12018): Fixed and reviewed: Nested widgets garbage collection.
+  * [#12024](http://dev.ckeditor.com/ticket/12024): [Firefox] Fixed: Outline is extended to the left by unpositioned drag handlers.
+  * [#12006](http://dev.ckeditor.com/ticket/12006): Fixed: Drag and drop of nested block widgets.
+  * [#12008](http://dev.ckeditor.com/ticket/12008): Fixed various cases of inserting a single non-editable element using the [`editor.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml) method. Fixes pasting a widget with a nested editable inside another widget's nested editable.
+
+* Notification system:
+  * [#11580](http://dev.ckeditor.com/ticket/11580): Introduced the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification).
+  * [#12810](http://dev.ckeditor.com/ticket/12810): Introduced a [notification aggregator](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notificationAggregator) for the [notification system](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.notification) which simplifies displaying progress of many concurrent tasks.
+* [#11636](http://dev.ckeditor.com/ticket/11636): Introduced new, UX-focused, methods for getting selected HTML and deleting it &mdash; [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) and [`editor.deleteSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml).
+* [#12416](http://dev.ckeditor.com/ticket/12416): Added the [`widget.definition.upcastPriority`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-upcastPriority) property which gives more control over widget upcasting order to the widget author.
+* [#12036](http://dev.ckeditor.com/ticket/12036): Initialize the editor in [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) mode when the `<textarea>` element has a `readonly` attribute.
+* [#11905](http://dev.ckeditor.com/ticket/11905): The [`resize` event](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-resize) passes the current dimensions in its data.
+* [#12126](http://dev.ckeditor.com/ticket/12126): Introduced [`config.image_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image_prefillDimensions) and [`config.image2_prefillDimensions`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_prefillDimensions) to make pre-filling `width` and `height` configurable for the [Enhanced Image](http://ckeditor.com/addon/image2).
+* [#12746](http://dev.ckeditor.com/ticket/12746): Added a new configuration option to hide the [Enhanced Image](http://ckeditor.com/addon/image2) resizer.
+* [#12150](http://dev.ckeditor.com/ticket/12150): Exposed the [`getNestedEditable()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-static-method-getNestedEditable) and `is*` [widget helper](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) functions (see the static methods).
+* [#12448](http://dev.ckeditor.com/ticket/12448): Introduced the [`editable.insertHtmlIntoRange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertHtmlIntoRange) method.
+* [#12143](http://dev.ckeditor.com/ticket/12143): Added the [`config.floatSpacePreferRight`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-floatSpacePreferRight) configuration option that switches the alignment of the floating toolbar. Thanks to [InvisibleBacon](http://github.com/InvisibleBacon)!
+* [#10986](http://dev.ckeditor.com/ticket/10986): Added support for changing dialog input and textarea text directions by using the *Shift+Alt+Home/End* keystrokes. The direction is stored in the value of the input by prepending the [`\u202A`](http://unicode.org/cldr/utility/character.jsp?a=202A) or [`\u202B`](http://unicode.org/cldr/utility/character.jsp?a=202B) marker to it. Read more in the [documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.definition.textInput-property-bidi). Thanks to [edithkk](https://github.com/edithkk)!
+* [#12770](http://dev.ckeditor.com/ticket/12770): Added support for passing [widget](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget)'s startup data as a widget command's argument. Thanks to [Rebrov Boris](https://github.com/zipp3r) and [Tieme van Veen](https://github.com/tiemevanveen)!
+* [#11583](http://dev.ckeditor.com/ticket/11583): Added support for the HTML5 `required` attribute in various form elements. Thanks to [Steven Busse](https://github.com/sbusse)!
+
+Changes:
+
+* [#12858](http://dev.ckeditor.com/ticket/12858): Basic [Spartan](http://blogs.windows.com/bloggingwindows/2015/03/30/introducing-project-spartan-the-new-browser-built-for-windows-10/) browser compatibility. Full compatibility will be introduced later, because at the moment Spartan is still too unstable to be used for tests and we see many changes from version to version.
+* [#12948](http://dev.ckeditor.com/ticket/12948): The [`config.mathJaxLibrary`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-mathJaxLib) option does not default to the MathJax CDN any more. It needs to be configured to enable the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin now.
+* [#13069](http://dev.ckeditor.com/ticket/13069): Fixed inconsistencies between [`editable.insertHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) and [`editable.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElement) when the `range` parameter is used. Now, the `editor.insertElement()` method works on a higher level, which means that it saves undo snapshots and sets the selection after insertion. Use the [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange) method directly for the pre 4.5 behavior of `editable.insertElement()`.
+* [#12870](http://dev.ckeditor.com/ticket/12870): Use [`editor.showNotification()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-showNotification) instead of `alert()` directly whenever possible. When the [Notification plugin](http://ckeditor.com/addon/notification) is loaded, the notification system is used automatically. Otherwise, the native `alert()` is displayed.
+* [#8024](http://dev.ckeditor.com/ticket/8024): Swapped behavior of the Split Cell Vertically and Horizontally features of the [Table Tools](http://ckeditor.com/addon/tabletools) plugin to be more intuitive. Thanks to [kevinisagit](https://github.com/kevinisagit)!
+* [#10903](http://dev.ckeditor.com/ticket/10903): Performance improvements for the [`dom.element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass), [`dom.element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass) and [`dom.element.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-hasClass) methods. Note: The previous implementation allowed passing multiple classes to `addClass()` although it was only a side effect of that implementation. The new implementation does not allow this.
+* [#11856](http://dev.ckeditor.com/ticket/11856): The jQuery adapter throws a meaningful error if CKEditor or jQuery are not loaded.
+
+Fixed issues:
+
+* [#11586](http://dev.ckeditor.com/ticket/11586): Fixed: [`range.cloneContents()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) should not change the DOM in order not to affect selection.
+* [#12148](http://dev.ckeditor.com/ticket/12148): Fixed: [`dom.element.getChild()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getChild) should not modify a passed array.
+* [#12503](http://dev.ckeditor.com/ticket/12503): [Blink/Webkit] Fixed: Incorrect result of Select All and *Backspace* or *Delete*.
+* [#13001](http://dev.ckeditor.com/ticket/13001): [Firefox] Fixed: The `<br />` filler is placed in the wrong position by the [`range.fixBlock()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-fixBlock) method due to quirky Firefox behavior.
+* [#13101](http://dev.ckeditor.com/ticket/13101): [IE8] Fixed: Colons are prepended to HTML5 element names when cloning them.
+
+## CKEditor 4.4.8
+
+**Security Updates:**
+
+* Fixed XSS vulnerability in the HTML parser reported by [Dheeraj Joshi](https://twitter.com/dheerajhere) and [Prem Kumar](https://twitter.com/iAmPr3m).
+
+	Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
+
+**An upgrade is highly recommended!**
+
+Fixed Issues:
+
+* [#12899](http://dev.ckeditor.com/ticket/12899): Fixed: Corrected wrong tag ending for horizontal box definition in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin. Thanks to [mizafish](https://github.com/mizafish)!
+* [#13254](http://dev.ckeditor.com/ticket/13254): Fixed: Cannot outdent block after indent when using the [Div Editing Area](http://ckeditor.com/addon/divarea) plugin. Thanks to [Jonathan Cottrill](https://github.com/jcttrll)!
+* [#13268](http://dev.ckeditor.com/ticket/13268): Fixed: Documentation for [`CKEDITOR.dom.text`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.text) is incorrect. Thanks to [Ben Kiefer](https://github.com/benkiefer)!
+* [#12739](http://dev.ckeditor.com/ticket/12739): Fixed: Link loses inline styles when edited without the [Advanced Tab for Dialogs](http://ckeditor.com/addon/dialogadvtab) plugin. Thanks to [Віталій Крутько](https://github.com/asmforce)!
+* [#13292](http://dev.ckeditor.com/ticket/13292): Fixed: Protection pattern does not work in attribute in self-closing elements with no space before `/>`. Thanks to [Віталій Крутько](https://github.com/asmforce)!
+* [PR#192](https://github.com/ckeditor/ckeditor-dev/pull/192): Fixed: Variable name typo in the [Dialog User Interface](http://ckeditor.com/addon/dialogui) plugin which caused [`CKEDITOR.ui.dialog.radio`](http://docs.ckeditor.com/#!/api/CKEDITOR.ui.dialog.radio) validation to not work. Thanks to [Florian Ludwig](https://github.com/FlorianLudwig)!
+* [#13232](http://dev.ckeditor.com/ticket/13232): [Safari] Fixed: The [`element.appendText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-appendText) method does not work properly for empty elements.
+* [#13233](http://dev.ckeditor.com/ticket/13233): Fixed: [HTMLDataProcessor](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) can process `foo:href` attributes.
+* [#12796](http://dev.ckeditor.com/ticket/12796): Fixed: The [Indent List](http://ckeditor.com/addon/indentlist) plugin unwraps parent `<li>` elements. Thanks to [Andrew Stucki](https://github.com/andrewstucki)!
+* [#12885](http://dev.ckeditor.com/ticket/12885): Added missing [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) parameter documentation.
+* [#11982](http://dev.ckeditor.com/ticket/11982): Fixed: Bullet added in a wrong position after the *Enter* key is pressed in a nested list.
+* [#13027](http://dev.ckeditor.com/ticket/13027): Fixed: Keyboard navigation in dialog windows with multiple tabs not following IBM CI 162 instructions or [ARIA Authoring Practices](http://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#tabpanel).
+* [#12256](http://dev.ckeditor.com/ticket/12256): Fixed: Basic styles classes are lost when pasting from Microsoft Word if [basic styles](http://ckeditor.com/addon/basicstyles) were configured to use classes.
+* [#12729](http://dev.ckeditor.com/ticket/12729): Fixed: Incorrect structure created when merging a block into a list item on *Backspace* and *Delete*.
+* [#13031](http://dev.ckeditor.com/ticket/13031): [Firefox] Fixed: No more line breaks in source view since Firefox 36.
+* [#13131](http://dev.ckeditor.com/ticket/13131): Fixed: The [Code Snippet](http://ckeditor.com/addon/codesnippet) plugin cannot be used without the [IFrame Editing Area](http://ckeditor.com/addon/wysiwygarea) plugin.
+* [#9086](http://dev.ckeditor.com/ticket/9086): Fixed: Invalid ARIA property used on paste area `<iframe>`.
+* [#13164](http://dev.ckeditor.com/ticket/13164): Fixed: Error when inserting a hidden field.
+* [#13155](http://dev.ckeditor.com/ticket/13155): Fixed: Incorrect [Line Utilities](http://ckeditor.com/addon/lineutils) positioning when `<body>` has a margin.
+* [#13351](http://dev.ckeditor.com/ticket/13351): Fixed: Link lost when editing a linked image with the Link tab disabled. This also fixed a bug when inserting an image into a fully selected link would throw an error ([#12847](https://dev.ckeditor.com/ticket/12847)).
+* [#13344](http://dev.ckeditor.com/ticket/13344): [WebKit/Blink] Fixed: It is possible to remove or change editor content in [read-only mode](http://docs.ckeditor.com/#!/guide/dev_readonly).
+
+Other Changes:
+
+* [#12844](http://dev.ckeditor.com/ticket/12844) and [#13103](http://dev.ckeditor.com/ticket/13103): Upgraded the [testing environment](http://docs.ckeditor.com/#!/guide/dev_tests) to [Bender.js](https://github.com/benderjs/benderjs) `0.2.3`.
+* [#12930](http://dev.ckeditor.com/ticket/12930): Because of licensing issues, `truncated-mathjax/` is now removed from the `tests/` directory. Now `bender.config.mathJaxLibPath` must be configured manually in order to run [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin tests.
+* [#13266](http://dev.ckeditor.com/ticket/13266): Added more shades of gray in the [Color Dialog](http://ckeditor.com/addon/colordialog) window. Thanks to [mizafish](https://github.com/mizafish)!
+
+
+## CKEditor 4.4.7
+
+Fixed Issues:
+
+* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)!
+* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero.
+* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)!
+* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)!
+* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data.
+* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button.
+* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/WebKit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*.
+* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined.
+* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position.
+* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor.
+
+## CKEditor 4.4.6
+
+**Security Updates:**
+
+* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo).
+
+	Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
+
+**An upgrade is highly recommended!**
+
+New Features:
+
+* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format).
+* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `<main>` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd).
+
+Fixed Issues:
+
+* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)!
+* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)!
+* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4).
+* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines.
+* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers.
+* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element.
+* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling.
+* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled.
+* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing.
+* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element.
+* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text.
+* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/WebKit] Fixed: DOM is changed outside the editor area in a certain case.
+* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues.
+* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element.
+* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option.
+
+
+## CKEditor 4.4.5
+
+New Features:
+
+* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant).
+
+Fixed Issues:
+
+* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position.
+* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)!
+* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)!
+* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)!
+* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)!
+* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables.
+* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated.
+* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable).
+* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements.
+* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy.
+* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).
+* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu.
+* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor.
+* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys.
+* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body.
+* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity.
+* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode.
+* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images.
+
+
+## CKEditor 4.4.4
+
+Fixed Issues:
+
+* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)!
+* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
+* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
+* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others:
+  * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.
+  * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys.
+  * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin.
+* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments.
+* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*.
+* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking.
+* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`.
+* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it.
+* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files.
+* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it.
+* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar.
+* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator.
+* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets.
+* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line.
+* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).
+* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor.
+* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image.
+
+
+Other Changes:
+
+* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository.
+
+## CKEditor 4.4.3
+
+**Security Updates:**
+
+* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/).
+
+**An upgrade is highly recommended!**
+
+New Features:
+
+* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window.
+
+Fixed Issues:
+
+* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
+* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)!
+* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows.
+* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed.
+* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements).
+* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available.
+* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element.
+* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified.
+
+## CKEditor 4.4.2
+
+Important Notes:
+
+* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide.
+	Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/).
+
+New Features:
+
+* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots.
+
+Fixed Issues:
+
+* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)!
+* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)!
+* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration.
+* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link.
+* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved.
+* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData).
+* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside.
+* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case).
+* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click.
+* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated.
+* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection).
+* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin.
+* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container.
+* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell.
+* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks.
+* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine.
+* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`.
+* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions.
+* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget.
+* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script.
+* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method.
+* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node.
+
+## CKEditor 4.4.1
+
+New Features:
+
+* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute.
+
+Fixed Issues:
+
+* [#11861](http://dev.ckeditor.com/ticket/11861): [WebKit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release.
+* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)!
+* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)!
+* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element.
+* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element.
+* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample.
+* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes.
+* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor.
+* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget.
+* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width.
+* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass).
+* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)).
+* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu.
+* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode.
+* [#11822](http://dev.ckeditor.com/ticket/11822): [WebKit] Fixed: Editing anchors by double-click is broken in some cases.
+* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar.
+* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window.
+* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`.
+* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table.
+* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred.
+* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly.
+* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute.
+* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin.
+* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border.
+
+Other Changes:
+
+* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0.
+* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer.
+* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces.
+
+## CKEditor 4.4
+
+**Important Notes:**
+
+* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated.
+* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations.
+* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them.
+* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)).
+* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided.
+
+New Features:
+
+* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features:
+  * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers.
+  * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods.
+  * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive).
+  * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules).
+* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin:
+  * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images.
+  * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes.
+  If this setting is defined, the editor produces classes instead of inline styles for aligned images.
+  * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string.
+* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type.
+* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format.
+* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).
+* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library.
+* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)).
+* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles).
+* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities.
+* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source.
+
+Other Changes:
+
+* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects).
+* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code.
+* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that:
+  * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property.
+  * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event.
+  * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)).
+* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version.
+
+Fixed Issues:
+
+* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div.
+* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked.
+
+## CKEditor 4.3.5
+
+New Features:
+
+* Added new translation: Tatar.
+
+Fixed Issues:
+
+* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode.
+* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work.
+
+## CKEditor 4.3.4
+
+Fixed Issues:
+
+* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard.
+* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements.
+* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache.
+* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item.
+* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable.
+* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`.
+* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin.
+* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table.
+* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor.
+* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change.
+
+## CKEditor 4.3.3
+
+Fixed Issues:
+
+* [#11500](http://dev.ckeditor.com/ticket/11500): [WebKit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root).
+* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets.
+* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method.
+* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak).
+* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior.
+* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure.
+* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab.
+* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode.
+* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered.
+* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
+* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin.
+* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row.
+* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values.
+* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast.
+* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely.
+* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument.
+* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+.
+* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set.
+* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output.
+* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).
+* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected.
+
+## CKEditor 4.3.2
+
+Fixed Issues:
+
+* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute.
+* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements:
+  * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty.
+  * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues.
+  * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations.
+  * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization.
+* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor.
+* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements:
+  * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support.
+  * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support.
+* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe.
+* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl).
+* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables.
+* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin.
+* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted.
+* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached.
+* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable.
+* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode.
+* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace.
+* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode.
+* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar.
+* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget.
+* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library.
+* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable.
+* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)).
+* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor.
+* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin.
+* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on.
+* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8.
+* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables.
+* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs.
+* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly.
+* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window.
+
+## CKEditor 4.3.1
+
+**Important Notes:**
+
+* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)).
+* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)).
+
+Fixed Issues:
+
+* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event.
+* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method.
+* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder.
+* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu.
+* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option.
+* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor.
+* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions.
+* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes.
+* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image.
+* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image.
+* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading.
+* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget.
+* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details.
+* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer.
+* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode.
+* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item.
+* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back.
+* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more.
+* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked.
+* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle.
+* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements.
+* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors.
+* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word.
+* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded.
+* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled.
+* [#11200](http://dev.ckeditor.com/ticket/11200):  Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop.
+
+## CKEditor 4.3
+
+New Features:
+
+* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support.
+* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin.
+* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle.
+* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin.
+* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems.
+* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration.
+* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets.
+* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements:
+  * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)),
+  * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)),
+  * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)),
+  * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)),
+  * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)),
+  * fixing other minor bugs.
+* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget.
+* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter.
+* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language.
+* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields.
+* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter).
+* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG.
+
+Fixed Issues:
+
+* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget.
+* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle.
+* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image.
+* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change.
+* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
+* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
+* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables.
+* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable.
+* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused.
+* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables.
+* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample.
+* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty.
+* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor.
+* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content.
+* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System.
+* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly.
+* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset.
+* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event.
+* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin.
+* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused.
+* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu.
+* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets.
+* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System.
+* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method.
+* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop.
+* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions.
+* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data.
+* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`.
+* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea).
+
+## CKEditor 4.3 Beta
+
+New Features:
+
+* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System.
+  * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget).
+  * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
+  * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content.
+      * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode).
+      * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property.
+  * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the  [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method.
+  * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method.
+  * Dozens of new methods were introduced &ndash; most interesting ones:
+      * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find),
+      * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne),
+      * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange),
+      * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition),
+      * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element).
+* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing.
+* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget.
+* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html).
+* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley).
+
+## CKEditor 4.2.3
+
+Fixed Issues:
+
+* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file.
+* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette.
+* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed.
+* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline).
+* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'.
+
+## CKEditor 4.2.2
+
+Fixed Issues:
+
+* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs.
+* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row.
+* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret.
+* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked.
+* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified.
+* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame.
+* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area.
+* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style.
+* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin.
+* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration.
+* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842).
+* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707).
+* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced.
+* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label.
+
+## CKEditor 4.2.1
+
+Fixed Issues:
+
+* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error.
+* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance.
+* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core.
+* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word.
+* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word.
+* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog.
+* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used.
+* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode.
+* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases.
+* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element.
+* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list.
+* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced.
+* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration.
+* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally.
+
+## CKEditor 4.2
+
+**Important Notes:**
+
+* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6.
+
+* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder).
+
+New Features:
+
+* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock).
+* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists.
+* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906).
+* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor.
+* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.
+* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added.
+* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event.
+* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor.
+
+Fixed Issues:
+
+* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin.
+* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors.
+* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData).
+
+## CKEditor 4.1.3
+
+New Features:
+
+* Added new translation: Indonesian.
+
+Fixed Issues:
+
+* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers.
+* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close".
+* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin.
+* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
+* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows.
+
+## CKEditor 4.1.2
+
+New Features:
+
+* Added new translation: Sinhala.
+
+Fixed Issues:
+
+* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing.
+* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts.
+* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted.
+* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered.
+* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly).
+* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files.
+* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR).
+* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows.
+* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels.
+* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances.
+* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad.
+* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template.
+* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style.
+
+## CKEditor 4.1.1
+
+New Features:
+
+* Added new translation: Albanian.
+
+Fixed Issues:
+
+* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell.
+* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event.
+* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin.
+* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start.
+* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view.
+* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor).
+* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode).
+* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering.
+* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed.
+* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured.
+* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases.
+* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop.
+* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state.
+* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat).
+
+## CKEditor 4.1
+
+Fixed Issues:
+
+* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases.
+* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format.
+* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore.
+* Minor issues in plugin integration with Advanced Content Filter:
+  * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter.
+  * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter.
+  * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined.
+
+## CKEditor 4.1 RC
+
+New Features:
+
+* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration.
+
+  Brand new data filtering system that works in 2 modes:
+
+  * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its
+  current configuration can handle.
+  * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data
+  will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed.
+
+  See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter).
+* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances.
+* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation.
+* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances.
+* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing.
+* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string.
+* Included in [#10103](http://dev.ckeditor.com/ticket/10103):
+  * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor.
+  * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized.
+* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5.
+
+## CKEditor 4.0.3
+
+Fixed Issues:
+
+* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled.
+* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view.
+* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy).
+
+## CKEditor 4.0.2
+
+Fixed Issues:
+
+* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`.
+* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins).
+* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order.
+* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set.
+* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window.
+* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin.
+* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable.
+* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll.
+* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag.
+* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode.
+* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available.
+* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors.
+* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable.
+* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes.
+* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time.
+* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases.
+* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set.
+* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release.
+* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items.
+
+## CKEditor 4.0.1.1
+
+Fixed Issues:
+
+* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample.
+
+## CKEditor 4.0.1
+
+Fixed Issues:
+
+* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono).
+* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).
+* [Magic Line](http://ckeditor.com/addon/magicline) plugin:
+    * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line.
+    * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms.
+    * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case.
+* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers.
+* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word.
+* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.
+* Context menu:
+    * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus.
+    * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar.
+    * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element.
+* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window.
+* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space.
+* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements.
+* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types.
+* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window.
+* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly.
+* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell.
+* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog.
+* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window.
+* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`.
+* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button.
+* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified.
+* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode.
+* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images.
+* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements.
+* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles.
+* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools).
+* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window.
+* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting.
+* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs.
+* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options.
+* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor.
+* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works.
+* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration.
+* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker.
+
+
+## CKEditor 4.0
+
+The first stable release of the new CKEditor 4 code line.
+
+The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
+possible. The list of relevant changes can be found in the [API Changes page of
+the CKEditor 4 documentation][1].
+
+[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes"
Index: trunk/modules/ckeditor/ckeditor/CKEditor.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/CKEditor.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/CKEditor.php	(revision 2)
@@ -0,0 +1,689 @@
+<?php
+/*
+* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+* For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * \brief CKEditor class that can be used to create editor
+ * instances in PHP pages on server side.
+ * @see http://ckeditor.com
+ *
+ * Sample usage:
+ * @code
+ * $CKEditor = new CKEditor();
+ * $CKEditor->editor("editor1", "<p>Initial value.</p>");
+ * @endcode
+ */
+class CKEditor
+{
+    /**
+     * The version of %CKEditor.
+     */
+    const version = '4.6.2';
+    /**
+     * A constant string unique for each release of %CKEditor.
+     */
+    const timestamp = 'G2VG';
+    /**
+     * A string indicating the creation date of %CKEditor.
+     * Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
+     */
+    public $timestamp = "G2VG";
+
+    /**
+     * URL to the %CKEditor installation directory (absolute or relative to document root).
+     * If not set, CKEditor will try to guess it's path.
+     *
+     * Example usage:
+     * @code
+     * $CKEditor->basePath = '/ckeditor/';
+     * @endcode
+     */
+    public $basePath;
+    /**
+     * An array that holds the global %CKEditor configuration.
+     * For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
+     *
+     * Example usage:
+     * @code
+     * $CKEditor->config['height'] = 400;
+     * // Use @@ at the beggining of a string to ouput it without surrounding quotes.
+     * $CKEditor->config['width'] = '@@screen.width * 0.8';
+     * @endcode
+     */
+    public $config = array();
+    /**
+     * A boolean variable indicating whether CKEditor has been initialized.
+     * Set it to true only if you have already included
+     * &lt;script&gt; tag loading ckeditor.js in your website.
+     */
+    public $initialized = false;
+    /**
+     * Boolean variable indicating whether created code should be printed out or returned by a function.
+     *
+     * Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
+     * @code
+     * $CKEditor = new CKEditor();
+     * $CKEditor->bOutputAsBuffer = true;
+     * $code = $CKEditor->editor("editor1", "<p>Initial value.</p>");
+     * echo "<p>Editor 1:</p>";
+     * echo $code;
+     * @endcode
+     */
+    public $bOutputAsBuffer = false;
+    /**
+     * An array with textarea attributes.
+     *
+     * When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
+     * it will be displayed to anyone with JavaScript disabled or with incompatible browser.
+     */
+    public $textareaAttributes = array( "rows" => 8, "cols" => 60 );
+    /**
+     * An array that holds event listeners.
+     */
+    private $events = array();
+    /**
+     * An array that holds global event listeners.
+     */
+    private $globalEvents = array();
+  /**
+   * json_last_error — JSON error codes
+   */
+    private $aMessage = array(
+      'JSON_ERROR_NONE',
+      'JSON_ERROR_DEPTH',
+      'JSON_ERROR_STATE_MISMATCH',
+      'JSON_ERROR_CTRL_CHAR',
+      'JSON_ERROR_SYNTAX',
+      'JSON_ERROR_UTF8',
+      );
+  /** Indents a flat JSON string to make it more human-readable. */
+    public $prettyPrintJson = true;
+    protected $sError = '';
+    protected $iErrNo = 0;
+
+    /**
+     * Main Constructor.
+     *
+     *  @param $basePath (string) URL to the %CKEditor installation directory (optional).
+     */
+    public function __construct($basePath = null) {
+        if (!empty($basePath)) {
+            $this->basePath = $basePath;
+
+        }
+    }
+
+    public function __set($name, $value)
+    {
+        throw new Exception('Tried to set a readonly or nonexisting property ['.$name.']!!');
+    }
+
+    public function __get($sPropertyName)
+    {
+        throw new Exception('Tried to get nonexisting property ['.$sPropertyName.']');
+    }
+    public function set($name, $value = '')
+    {
+        if (property_exists($this, $name)) {
+            $this->$name = $value;
+            return true;
+        } else {
+             $this->setError(4, 'variable set' . $name);
+            return false;
+        }
+    }
+/**
+ * check if an error occured
+ * @return bool
+ */
+    public function isError()
+    {
+        return (bool)$this->iErrNo;
+    }
+
+/**
+ * returns last occured error number
+ * @return integer number of last error
+ */
+    public function getErrNo()
+    {
+        return $this->iErrNo;
+    }
+
+/**
+ * returns last occured error message
+ * @return string message of last error
+ */
+    public function getError()
+    {
+        return $this->sError;
+    }
+
+/* *********************************************************************
+ *  internal methods
+ * ********************************************************************/
+/**
+ * set occured error
+ * @param int $iErr Number of the error
+ * @param string $sError Error message
+ */
+    protected function setError($iErr = 0, $sError = 'unknown error')
+    {
+        $this->iErrNo = $iErr;
+        $this->sError = $sError;
+    }
+
+
+    /**
+     * Creates a %CKEditor instance.
+     * In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
+     *
+     * @param $name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
+     * @param $value (string) Initial value (optional).
+     * @param $config (array) The specific configurations to apply to this editor instance (optional).
+     * @param $events (array) Event listeners for this editor instance (optional).
+     *
+     * Example usage:
+     * @code
+     * $CKEditor = new CKEditor();
+     * $CKEditor->editor("field1", "<p>Initial value.</p>");
+     * @endcode
+     *
+     * Advanced example:
+     * @code
+     * $CKEditor = new CKEditor();
+     * $config = array();
+     * $config['toolbar'] = array(
+     *     array( 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike' ),
+     *     array( 'Image', 'Link', 'Unlink', 'Anchor' )
+     * );
+     * $events['instanceReady'] = 'function (ev) {
+     *     alert("Loaded: " + ev.editor.name);
+     * }';
+     * $CKEditor->editor("field1", "<p>Initial value.</p>", $config, $events);
+     * @endcode
+     */
+    public function editor($name, $value = "", $config = array(), $events = array())
+    {
+        $attr = "";
+        foreach ($this->textareaAttributes as $key => $val) {
+            $attr.= " " . $key . '="' . str_replace('"', '&quot;', $val) . '"';
+        }
+        $out = '<textarea id="' . $name . '" name="' . $name . '"'. $attr . '>' . htmlspecialchars($value) . '</textarea>'."\n";
+        if (!$this->initialized) {
+            $out .= $this->init();
+        }
+        $js = $this->returnGlobalEvents();
+        $_config = $this->configSettings($config, $events);
+        if (($_config)){
+            $js .= "CKEDITOR.replace('".$name."', ".($this->jsEncode($_config)).");";
+        } else {
+            $js .= "CKEDITOR.replace('".$name."');";
+        }
+        $out .= $this->script($js);
+        if (!$this->bOutputAsBuffer) {
+            print $out;
+            $out = "";
+        }
+        return $out;
+    }
+
+/**
+ * Replaces a &lt;textarea&gt; with a %CKEditor instance.
+ *
+ * @param $id (string) The id or name of textarea element.
+ * @param $config (array) The specific configurations to apply to this editor instance (optional).
+ * @param $events (array) Event listeners for this editor instance (optional).
+ *
+ * Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
+ * @code
+ * $CKEditor = new CKEditor();
+ * $CKEditor->replace("article");
+ * @endcode
+ */
+    public function replace($id, $config = array(), $events = array())
+    {
+        $out = "";
+        if (!$this->initialized) {
+            $out .= $this->init();
+        }
+        $_config = $this->configSettings($config, $events);
+        $js = $this->returnGlobalEvents();
+        if (($_config)) {
+            $js .= "CKEDITOR.replace('".$id."', ".$this->jsEncode($_config).");";
+        }
+        else {
+            $js .= "CKEDITOR.replace('".$id."');";
+        }
+        $out .= $this->script($js);
+        if (!$this->bOutputAsBuffer) {
+            print $out;
+            $out = "";
+        }
+        return $out;
+    }
+/**
+ * Replace all &lt;textarea&gt; elements available in the document with editor instances.
+ *
+ * @param $className (string) If set, replace all textareas with class className in the page.
+ *
+ * Example 1: replace all &lt;textarea&gt; elements in the page.
+ * @code
+ * $CKEditor = new CKEditor();
+ * $CKEditor->replaceAll();
+ * @endcode
+ *
+ * Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
+ * @code
+ * $CKEditor = new CKEditor();
+ * $CKEditor->replaceAll( 'myClassName' );
+ * @endcode
+ */
+    public function replaceAll($className = null)
+    {
+        $out = "";
+        if (!$this->initialized) {
+            $out .= $this->init();
+        }
+        $_config = $this->configSettings();
+        $js = $this->returnGlobalEvents();
+        if (empty($_config)) {
+            if (empty($className)) {
+                $js .= "CKEDITOR.replaceAll();";
+            }
+            else {
+                $js .= "CKEDITOR.replaceAll('".$className."');";
+            }
+        } else {
+            $classDetection = "";
+            $js .= "CKEDITOR.replaceAll( function(textarea, config) {\n";
+            if (!empty($className)) {
+                $js .= "    var classRegex = new RegExp('(?:^| )' + '". $className ."' + '(?:$| )');\n";
+                $js .= "    if (!classRegex.test(textarea.className))\n";
+                $js .= "        return false;\n";
+            }
+            $js .= "    CKEDITOR.tools.extend(config, ". $this->jsEncode($_config) .", true);";
+            $js .= "} );";
+        }
+        $out .= $this->script($js);
+        if (!$this->bOutputAsBuffer) {
+            print $out;
+            $out = "";
+        }
+        return $out;
+    }
+/**
+ * Adds event listener.
+ * Events are fired by %CKEditor in various situations.
+ *
+ * @param $event (string) Event name.
+ * @param $javascriptCode (string) Javascript anonymous function or function name.
+ *
+ * Example usage:
+ * @code
+ * $CKEditor->addEventHandler('instanceReady', 'function (ev) {
+ *     alert("Loaded: " + ev.editor.name);
+ * }');
+ * @endcode
+ */
+    public function addEventHandler($event, $javascriptCode)
+    {
+        if (!isset($this->events[$event])) {
+            $this->events[$event] = array();
+        }
+        // Avoid duplicates.
+        if (!in_array($javascriptCode, $this->events[$event])) {
+            $this->events[$event][] = $javascriptCode;
+        }
+    }
+/**
+ * Clear registered event handlers.
+ * Note: this function will have no effect on already created editor instances.
+ *
+ * @param $event (string) Event name, if not set all event handlers will be removed (optional).
+ */
+    public function clearEventHandlers($event = null)
+    {
+        if (!empty($event)) {
+            $this->events[$event] = array();
+        }
+        else {
+            $this->events = array();
+        }
+    }
+/**
+ * Adds global event listener.
+ *
+ * @param $event (string) Event name.
+ * @param $javascriptCode (string) Javascript anonymous function or function name.
+ *
+ * Example usage:
+ * @code
+ * $CKEditor->addGlobalEventHandler('dialogDefinition', 'function (ev) {
+ *     alert("Loading dialog: " + ev.data.name);
+ * }');
+ * @endcode
+ */
+    public function addGlobalEventHandler($event, $javascriptCode)
+    {
+        if (!isset($this->globalEvents[$event])) {
+            $this->globalEvents[$event] = array();
+        }
+        // Avoid duplicates.
+        if (!in_array($javascriptCode, $this->globalEvents[$event])) {
+            $this->globalEvents[$event][] = $javascriptCode;
+        }
+    }
+/**
+ * Clear registered global event handlers.
+ * Note: this function will have no effect if the event handler has been already printed/returned.
+ *
+ * @param $event (string) Event name, if not set all event handlers will be removed (optional).
+ */
+    public function clearGlobalEventHandlers($event = null)
+    {
+        if (!empty($event)) {
+            $this->globalEvents[$event] = array();
+        }
+        else {
+            $this->globalEvents = array();
+        }
+    }
+/**
+ *
+ *
+ * @param
+ */
+    protected function loadBackendCss(  )
+    {
+        $sAddonName = basename(dirname(__DIR__));
+        $out = ''
+        . "<script type=\"text/javascript\">\n"
+        . "if (document.querySelectorAll('.cke')) {LoadOnFly('head', "
+        . "WB_URL+'/modules/".$sAddonName."/backend.css');}\n"
+        . "</script>\n";
+        return $out;
+    }
+/**
+ * Prints javascript code.
+ *
+ * @param string $js
+ */
+    private function script($js)
+    {
+        $out  = "<script type=\"text/javascript\">";
+        $out .= $js;
+        $out .= "</script>\n";
+        return $out;
+    }
+/**
+ * Returns the configuration array (global and instance specific settings are merged into one array).
+ *
+ * @param $config (array) The specific configurations to apply to editor instance.
+ * @param $events (array) Event listeners for editor instance.
+ */
+    private function configSettings($config = array(), $events = array())
+    {
+        $_config = $this->config;
+        $_events = $this->events;
+        if (is_array($config) && !empty($config)) {
+            $_config = array_merge($_config, $config);
+        }
+        if (is_array($events) && !empty($events)) {
+            foreach ($events as $eventName => $code) {
+                if (!isset($_events[$eventName])) {
+                    $_events[$eventName] = array();
+                }
+                if (!in_array($code, $_events[$eventName])) {
+                    $_events[$eventName][] = $code;
+                }
+            }
+        }
+        if (!empty($_events)) {
+            foreach($_events as $eventName => $handlers) {
+                if (empty($handlers)) {
+                    continue;
+                } elseif (count($handlers) == 1) {
+                    $_config['on'][$eventName] = '@@'.$handlers[0];
+                } else {
+                    $_config['on'][$eventName] = '@@function (ev){';
+                    foreach ($handlers as $handler => $code) {
+                        $_config['on'][$eventName] .= '('.$code.')(ev);';
+                    }
+                    $_config['on'][$eventName] .= '}';
+                }
+            }
+        }
+        return $_config;
+    }
+/**
+ * CKEditor::setConfig()
+ *
+ * @param mixed $key
+ * @param mixed $value
+ * @return void
+ */
+    public function setConfig ( $key, $value ) {
+        $this->config[$key] = $value;
+    }
+/**
+ * Return global event handlers.
+ */
+    private function returnGlobalEvents()
+    {
+        static $returnedEvents;
+        $out = "";
+        if (!isset($returnedEvents)) {$returnedEvents = array();}
+        if (!empty($this->globalEvents)) {
+            foreach ($this->globalEvents as $eventName => $handlers) {
+                foreach ($handlers as $handler => $code) {
+                    if (!isset($returnedEvents[$eventName])) {
+                        $returnedEvents[$eventName] = array();
+                    }
+                    // Return only new events
+                    if (!in_array($code, $returnedEvents[$eventName])) {
+                        $out .= ($code ? "\n" : "") . "CKEDITOR.on('". $eventName ."', $code);";
+                        $returnedEvents[$eventName][] = $code;
+                    }
+                }
+            }
+        }
+        return $out;
+    }
+/**
+ * Initializes CKEditor (executed only once).
+ */
+    private function init()
+    {
+        static $initComplete;
+        $out = "";
+        if (!empty($initComplete)) {return "";}
+        if ($this->initialized) {
+            $initComplete = true;
+            return "";
+        }
+        $out  = $this->loadBackendCss();
+        $args = "";
+        $ckeditorPath = $this->ckeditorPath();
+        if (!empty($this->timestamp) && $this->timestamp != "%"."TIMESTAMP%") {
+            $args = '?t=' . $this->timestamp;
+        }
+        // Skip relative paths...
+        if (strpos($ckeditorPath, '..') !== 0) {
+            $out .= $this->script("window.CKEDITOR_BASEPATH='". $ckeditorPath ."';");
+        }
+        $out .= "<script type=\"text/javascript\" src=\"" . $ckeditorPath . 'ckeditor.js' . $args . "\"></script>\n";
+        $extraCode = "";
+        if ($this->timestamp != self::timestamp) {
+            $extraCode .= ($extraCode ? "\n" : "") . "CKEDITOR.timestamp = '". $this->timestamp ."';";
+        }
+        if ($extraCode) {
+            $out .= $this->script($extraCode);
+        }
+        $initComplete = $this->initialized = true;
+        return $out;
+    }
+/**
+ * Return path to ckeditor.js.
+ */
+    private function ckeditorPath()
+    {
+        if (!empty($this->basePath)) {return $this->basePath;}
+        /**
+         * The absolute pathname of the currently executing script.
+         * Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php,
+         * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user.
+         */
+        if (isset($_SERVER['SCRIPT_FILENAME'])) {
+            $realPath = dirname($_SERVER['SCRIPT_FILENAME']);
+        } else {
+            /**
+             * realpath - Returns canonicalized absolute pathname
+             */
+            $realPath = realpath( './' ) ;
+        }
+        /**
+         * The filename of the currently executing script, relative to the document root.
+         * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar
+         * would be /test.php/foo.bar.
+         */
+        $selfPath = dirname($_SERVER['PHP_SELF']);
+        $file = str_replace("\\", "/", __FILE__);
+        if (!$selfPath || !$realPath || !$file) {return "/ckeditor/";}
+        $documentRoot = substr($realPath, 0, strlen($realPath) - strlen($selfPath));
+        $fileUrl = substr($file, strlen($documentRoot));
+        $ckeditorUrl = str_replace("ckeditor_php5.php", "", $fileUrl);
+        return $ckeditorUrl;
+    }
+  /**
+   * CKEditor::setJsonEncode()
+   * only works with UTF-8 encoded data.
+   * in moment not in use was for test only
+   *
+   * @param mixed $obj Can be any type except a resource.
+   * @param integer $iBitmask consisting of
+   *                         PHP_JSON_HEX_TAG,
+   *                         PHP_JSON_HEX_AMP,
+   *                         PHP_JSON_HEX_APOS
+   * @return string JSON representation of $obj
+   *
+   */
+  public function setJsonEncode( $obj, $iBitmask = 0)
+  {
+    $iBitmask = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT;
+    //        $retJson = ( (version_compare(PHP_VERSION, '5.3.0') < 0 ) ? json_encode($obj) : json_encode($obj, $iBitmask ) );
+    return '"'.str_replace( array(
+      "\\",
+      "/",
+      "\n",
+      "\t",
+      "\r",
+      "\x08",
+      "\x0c",
+      '"'), array(
+      '\\\\',
+      '\\/',
+      '\\n',
+      '\\t',
+      '\\r',
+      '\\b',
+      '\\f',
+      '\"'), json_encode( $obj)).'"';
+  }
+  /**
+   * Format a flat JSON string to make it more human-readable
+   * original code: http://www.daveperrett.com/articles/2008/03/11/format-json-with-php/
+   * adapted to allow native functionality in php version >= 5.4.0
+   *
+   * @param string $json The original JSON string to process
+   *        When the input is not a string it is assumed the input is RAW
+   *        and should be converted to JSON first of all.
+   * @return string Indented version of the original JSON string
+   *
+   */
+  public function getPrettyPrintJson( $json)
+  {
+    if( !is_string( $json)) {
+      if( phpversion() && ( phpversion() >= 5.4) && $this->prettyPrintJson) {
+        return json_encode( $json, JSON_PRETTY_PRINT);
+      }
+      $json = json_encode( $json);
+    }
+    if( $this->prettyPrintJson === false) {
+      return $json;
+    }
+    $result = '';
+    $pos = 0; // indentation level
+    $strLen = strlen( $json);
+    $indentStr = "\t";
+    $newLine = "\n";
+    $prevChar = '';
+    $outOfQuotes = true;
+    for ( $i = 0; $i < $strLen; $i++)
+    {
+      // Grab the next character in the string
+      $char = substr( $json, $i, 1);
+      // Are we inside a quoted string?
+      if( $char == '"' && $prevChar != '\\') {
+        $outOfQuotes = !$outOfQuotes;
+      } else
+      // If this character is the end of an element,
+      // output a new line and indent the next line
+        if( ( $char == '}' || $char == ']') && $outOfQuotes) {
+          $result .= $newLine;
+          $pos--;
+          for ( $j = 0; $j < $pos; $j++) {
+            $result .= $indentStr;
+          }
+        } else
+      // eat all non-essential whitespace in the input as we do our own here and it would only mess up our process
+          if( $outOfQuotes && false !== strpos( " \t\r\n", $char)) {continue;}
+      // Add the character to the result string
+      $result .= $char;
+      // always add a space after a field colon:
+      if( $char == ':' && $outOfQuotes) {$result .= ' ';}
+      // If the last character was the beginning of an element,
+      // output a new line and indent the next line
+      if( ( $char == ',' || $char == '{' || $char == '[') && $outOfQuotes) {
+        $result .= $newLine;
+        if( $char == '{' || $char == '[') {
+          $pos++;
+        }
+        for ( $j = 0; $j < $pos; $j++) {
+          $result .= $indentStr;
+        }
+      }
+      $prevChar = $char;
+    }
+    return $result;
+  }
+
+  /**
+   * Takes a JSON encoded string and converts it into a PHP variable
+   * JSON::Decode()
+   * @param mixed $json
+   * @param bool $toAssoc
+   * @return array
+   */
+    public function getJsonDecode( $json, $toAssoc = false)
+    {
+      $iError = 0;
+      $retJson = json_decode( $json, $toAssoc);
+      if( ( $iError = intval( json_last_error())) != 0) {
+        throw new Exception( 'JSON Error: '.$this->aMessage[$iError]);
+      }
+      return $retJson;
+    }
+/**
+ * This little function provides a basic JSON support.
+ *
+ * @param mixed $val
+ * @return string
+ */
+    private function jsEncode($val)
+    {
+        return $this->getPrettyPrintJson( $val);
+    }
+}

Property changes on: trunk/modules/ckeditor/ckeditor/CKEditor.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/CKEditorPlus.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/CKEditorPlus.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/CKEditorPlus.php	(revision 2)
@@ -0,0 +1,183 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke,D. Wöllbrink,Marmot
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+class CKEditorPlus extends CKEditor
+{
+    public $pretty = true;
+
+    private $lookup_html = array(
+        '&gt;'    => ">",
+        '&lt;'    => "<",
+        '&quot;'  => "\"",
+        '&amp;'   => "&"
+    );
+
+/**
+ *    Public var to force the editor to use the given params for width and height
+ *
+ */
+    public $force = false;
+
+    public $paths = Array(
+        'contentsCss' => "",
+        'stylesSet' => "",
+        'templates_files' => "",
+        'customConfig' => ""
+    );
+
+    private $templateFolder = '';
+
+    public $files = array(
+        'contentsCss' => Array(
+            '/editor.css',
+            '/css/editor.css',
+            '/editor/editor.css'
+        ),
+        'stylesSet' => Array(
+            '/editor.styles.js',
+            '/js/editor.styles.js',
+            '/editor/editor.styles.js'
+        ),
+        'templates_files' => Array(
+            '/editor.templates.js',
+            '/js/editor.templates.js',
+            '/editor/editor.templates.js'
+        ),
+        'customConfig' => Array(
+            '/wb_ckconfig.js',
+            '/js/wb_ckconfig.js',
+            '/editor/wb_ckconfig.js'
+        )
+    );
+
+//    public function __construct() { }
+
+    public function setTemplatePath ($templateFolder='')
+    {
+//        static $initComplete;
+        if($templateFolder=='') { return; }
+        $this->templateFolder = $templateFolder;
+        $_config = $this->config;
+        foreach($this->files as $key=>$val) {
+            foreach($val as $temp_path) {
+                $base = "/templates/".$this->templateFolder.$temp_path;
+                if (true == file_exists(WB_PATH.$base) ){
+                    $this->paths[$key] = (($key=="stylesSet") ? "wb:" : "").WB_URL.$base;
+                    break;
+                }
+            }
+        }
+        $this->config = array_merge($_config, $this->paths);;
+    }
+
+/**
+ *    JavaScript handels LF/LB in another way as PHP, even inside an array.
+ *    So we're in the need of pre-parse the entries.
+ *
+ */
+    public function javascript_clean_str( &$aStr) {
+        $vars = array(
+            '"' => "\\\"",
+            '\'' => "",
+            "\n" => "<br />",
+            "\r" => ""
+        );
+
+        return str_replace( array_keys($vars), array_values($vars), $aStr);
+    }
+
+/**
+ *    @param    string    Any HTML-Source, pass by reference
+ *
+ */
+    public function reverse_htmlentities(&$html_source) {
+
+        $html_source = str_replace(
+            array_keys( $this->lookup_html ),
+            array_values( $this->lookup_html ),
+            $html_source
+        );
+    }
+
+/**    *************************************
+ *    Additional test for the wysiwyg-admin
+ */
+
+/**
+ *    @var    boolean
+ *
+ */
+    public $wysiwyg_admin_exists = false;
+
+/**
+ *    Public function to look for the wysiwyg-admin table in the used database
+ *
+ *    @param    object    Any DB-Connector instance. Must be able to use a "query" method inside.
+ *
+ */
+    public function looking_for_wysiwyg_admin( $db ) {
+            if ($db->query("SHOW TABLES LIKE '%mod_editor_admin'")->numRows())
+                $this->wysiwyg_admin_exists = true;
+        }
+
+/**
+ *    Looks for an (local) url
+ *
+ *    @param    string    Key for tha assoc. config array
+ *    @param    string    Local file we are looking for
+ *    @param    string    Optional file-default-path if it not exists
+ *    @param    string    Optional a path_addition, e.g. "wb:"
+ *
+ */
+    public function resolve_path($key= "", $aPath, $aPath_default, $path_addition="")
+    {
+        static $initComplete = array();
+        $temp = WB_PATH.$aPath;
+        if (true === file_exists($temp)) {
+            $aPath = $path_addition.WB_URL.$aPath;
+        } else {
+            $aPath = $path_addition.WB_URL.$aPath_default;
+        }
+        if (array_key_exists($key, $this->paths)) {
+            $this->config[$key] = (($this->paths[$key ] == "") ? $aPath : $this->paths[$key]) ;
+            $initComplete[$key] = $this->config[$key];
+        } else {
+            $this->config[$key] = $aPath;
+        }
+
+    }
+
+/**
+ *    More or less for debugging
+ *
+ *    @param    string    Name
+ *    @param    string    Any content. Pass by reference!
+ *    @return   string    The "editor"-JS HTML code
+ *
+ */
+    public function to_HTML( $name, &$content, $config) {
+        $old_return = $this->bOutputAsBuffer;
+        $this->bOutputAsBuffer = true;
+        $temp_HTML = $this->editor( $name, $content, $config);
+        $this->bOutputAsBuffer = $old_return;
+        if (true === $this->pretty) {
+            $temp_HTML = str_replace (", ", ",\n ", $temp_HTML);
+            $temp_HTML = "\n\n\n".$temp_HTML."\n\n\n";
+        }
+        return $temp_HTML;
+    }
+}
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/CKEditorPlus.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/LICENSE.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/LICENSE.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/LICENSE.md	(revision 2)
@@ -0,0 +1,1420 @@
+Software License Agreement
+==========================
+
+CKEditor - The text editor for Internet - http://ckeditor.com
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Sources of Intellectual Property Included in CKEditor
+-----------------------------------------------------
+
+Where not otherwise indicated, all CKEditor content is authored by
+CKSource engineers and consists of CKSource-owned intellectual
+property. In some specific instances, CKEditor will incorporate work
+done by developers outside of CKSource with their express permission.
+
+The following libraries are included in CKEditor under the MIT license (see Appendix D):
+
+* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2017, CKSource - Frederico Knabben.
+* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.
+* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.
+
+Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D):
+
+* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/
+
+The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E):
+
+* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy.
+
+The following libraries are included in CKEditor under the BSD-3 License (see Appendix F):
+
+* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev.
+* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc.
+
+
+Trademarks
+----------
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
+and product names are trademarks, registered trademarks or service
+marks of their respective holders.
+
+---
+
+Appendix A: The GPL License
+---------------------------
+
+```
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+```
+
+Appendix B: The LGPL License
+----------------------------
+
+```
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  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
+```
+
+Appendix C: The MPL License
+---------------------------
+
+```
+MOZILLA PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+```
+
+Appendix D: The MIT License
+---------------------------
+
+```
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+```
+
+Appendix E: The SIL Open Font License Version 1.1
+---------------------------------------------
+
+```
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+```
+
+Appendix F: The BSD-3 License
+-----------------------------
+
+```
+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. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+```
+
Index: trunk/modules/ckeditor/ckeditor/README.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/README.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/README.md	(revision 2)
@@ -0,0 +1,39 @@
+CKEditor 4
+==========
+
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+http://ckeditor.com - See LICENSE.md for license information.
+
+CKEditor is a text editor to be used inside web pages. It's not a replacement
+for desktop text editors like Word or OpenOffice, but a component to be used as
+part of web applications and websites.
+
+## Documentation
+
+The full editor documentation is available online at the following address:
+http://docs.ckeditor.com
+
+## Installation
+
+Installing CKEditor is an easy task. Just follow these simple steps:
+
+ 1. **Download** the latest version from the CKEditor website:
+    http://ckeditor.com. You should have already completed this step, but be
+    sure you have the very latest version.
+ 2. **Extract** (decompress) the downloaded file into the root of your website.
+
+**Note:** CKEditor is by default installed in the `ckeditor` folder. You can
+place the files in whichever you want though.
+
+## Checking Your Installation
+
+The editor comes with a few sample pages that can be used to verify that
+installation proceeded properly. Take a look at the `samples` directory.
+
+To test your installation, just call the following page at your website:
+
+	http://<your site>/<CKEditor installation path>/samples/index.html
+
+For example:
+
+	http://www.example.com/ckeditor/samples/index.html
Index: trunk/modules/ckeditor/ckeditor/build-config.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/build-config.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/build-config.js	(revision 2)
@@ -0,0 +1,159 @@
+﻿/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * This file was added automatically by CKEditor builder.
+ * You may re-use it at any time to build CKEditor again.
+ *
+ * If you would like to build CKEditor online again
+ * (for example to upgrade), visit one the following links:
+ *
+ * (1) http://ckeditor.com/builder
+ *     Visit online builder to build CKEditor from scratch.
+ *
+ * (2) http://ckeditor.com/builder/e3b9fdd611eeeb3bad03cfd5be87410e
+ *     Visit online builder to build CKEditor, starting with the same setup as before.
+ *
+ * (3) http://ckeditor.com/builder/download/e3b9fdd611eeeb3bad03cfd5be87410e
+ *     Straight download link to the latest version of CKEditor (Optimized) with the same setup as before.
+ *
+ * NOTE:
+ *    This file is not used by CKEditor, you may remove it.
+ *    Changing this file will not change your CKEditor configuration.
+ */
+
+var CKBUILDER_CONFIG = {
+    skin: 'moonocolor',
+    preset: 'standard',
+    ignore: [
+        '.bender',
+        'bender.js',
+        'bender-err.log',
+        'bender-out.log',
+        'dev',
+        '.DS_Store',
+        '.editorconfig',
+        '.gitattributes',
+        '.gitignore',
+        'gruntfile.js',
+        '.idea',
+        '.jscsrc',
+        '.jshintignore',
+        '.jshintrc',
+        'less',
+        '.mailmap',
+        'node_modules',
+        'package.json',
+        'README.md',
+        'tests'
+    ],
+    plugins : {
+        'a11yhelp' : 1,
+        'about' : 1,
+        'autogrow' : 1,
+        'basicstyles' : 1,
+        'bidi' : 1,
+        'blockquote' : 1,
+        'button' : 1,
+        'clipboard' : 1,
+        'codemirror' : 1,
+        'colorbutton' : 1,
+        'colordialog' : 1,
+        'contextmenu' : 1,
+        'dialog' : 1,
+        'dialogadvtab' : 1,
+        'dialogui' : 1,
+        'div' : 1,
+        'elementspath' : 1,
+        'enterkey' : 1,
+        'entities' : 1,
+        'fakeobjects' : 1,
+        'filebrowser' : 1,
+        'find' : 1,
+        'flash' : 1,
+        'floatingspace' : 1,
+        'floatpanel' : 1,
+        'font' : 1,
+        'format' : 1,
+        'forms' : 1,
+        'horizontalrule' : 1,
+        'htmlwriter' : 1,
+        'iframe' : 1,
+        'iframedialog' : 1,
+        'image' : 1,
+        'indent' : 1,
+        'indentblock' : 1,
+        'indentlist' : 1,
+        'justify' : 1,
+        'language' : 1,
+        'link' : 1,
+        'list' : 1,
+        'listblock' : 1,
+        'liststyle' : 1,
+        'magicline' : 1,
+        'maximize' : 1,
+        'menu' : 1,
+        'menubutton' : 1,
+        'oembed' : 1,
+        'pagebreak' : 1,
+        'panel' : 1,
+        'panelbutton' : 1,
+        'pastefromword' : 1,
+        'pastetext' : 1,
+        'popup' : 1,
+        'removeformat' : 1,
+        'removespan' : 1,
+        'resize' : 1,
+        'richcombo' : 1,
+        'save' : 1,
+        'scayt' : 1,
+        'selectall' : 1,
+        'showblocks' : 1,
+        'showborders' : 1,
+        'smiley' : 1,
+        'sourcearea' : 1,
+        'sourcedialog' : 1,
+        'specialchar' : 1,
+        'stylescombo' : 1,
+        'syntaxhighlight' : 1,
+        'tab' : 1,
+        'table' : 1,
+        'tabletools' : 1,
+        'templates' : 1,
+        'toolbar' : 1,
+        'undo' : 1,
+        'widget' : 1,
+        'wsc' : 1,
+        'wysiwygarea' : 1,
+        'youtube' : 1
+    },
+    languages : {
+        'bg' : 1,
+        'ca' : 1,
+        'cs' : 1,
+        'cy' : 1,
+        'da' : 1,
+        'de' : 1,
+        'en' : 1,
+        'es' : 1,
+        'et' : 1,
+        'fi' : 1,
+        'fr' : 1,
+        'hr' : 1,
+        'hu' : 1,
+        'it' : 1,
+        'lv' : 1,
+        'nl' : 1,
+        'no' : 1,
+        'pl' : 1,
+        'pt' : 1,
+        'ru' : 1,
+        'si' : 1,
+        'sk' : 1,
+        'sl' : 1,
+        'sv' : 1,
+        'th' : 1
+    }
+};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/ckeditor.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/ckeditor.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/ckeditor.js	(revision 2)
@@ -0,0 +1,1267 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"H0CG",version:"4.6.2",revision:"20af917",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var h=c[d].src.match(a);if(h){b=h[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+
+b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&"/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a)&&(a+=(0<=a.indexOf("?")?"\x26":"?")+"t\x3d"+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",
+a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function d(){try{document.documentElement.doScroll("left")}catch(f){setTimeout(d,1);return}a()}c.push(b);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",
+a);window.attachEvent("onload",a);b=!1;try{b=!window.frameElement}catch(r){}document.documentElement.doScroll&&b&&d()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}());
+CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var d=CKEDITOR.event.prototype,b;for(b in d)null==a[b]&&(a[b]=d[b])},CKEDITOR.event.prototype=function(){function a(a){var e=d(this);return e[a]||(e[a]=new b(a))}var d=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var b=0,d=this.listeners;b<d.length;b++)if(d[b].fn==a)return b;return-1}};
+return{define:function(b,d){var g=a.call(this,b);CKEDITOR.tools.extend(g,d,!0)},on:function(b,d,g,k,h){function p(a,f,B,h){a={name:b,sender:this,editor:a,data:f,listenerData:k,stop:B,cancel:h,removeListener:r};return!1===d.call(g,a)?!1:a.data}function r(){B.removeListener(b,d)}var f=a.call(this,b);if(0>f.getListenerIndex(d)){f=f.listeners;g||(g=this);isNaN(h)&&(h=10);var B=this;p.fn=d;p.priority=h;for(var u=f.length-1;0<=u;u--)if(f[u].priority<=h)return f.splice(u+1,0,p),{removeListener:r};f.unshift(p)}return{removeListener:r}},
+once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,k=function(){g=1};return function(h,p,r){var f=d(this)[h];h=a;var B=g;a=g=0;if(f){var u=f.listeners;if(u.length)for(var u=u.slice(0),z,y=0;y<u.length;y++){if(f.errorProof)try{z=
+u[y].call(this,r,p,b,k)}catch(m){}else z=u[y].call(this,r,p,b,k);!1===z?g=1:"undefined"!=typeof z&&(p=z);if(a||g)break}}p=g?!1:"undefined"==typeof p?!0:p;a=h;g=B;return p}}(),fireOnce:function(a,b,g){b=this.fire(a,b,g);delete d(this)[a];return b},removeListener:function(a,b){var g=d(this)[a];if(g){var k=g.getListenerIndex(b);0<=k&&g.listeners.splice(k,1)}},removeAllListeners:function(){var a=d(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=d(this)[a])&&0<a.listeners.length}}}());
+CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fire.call(this,a,d,this)},CKEDITOR.editor.prototype.fireOnce=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,a,d,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));
+CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),d=a.match(/edge[ \/](\d+.?\d*)/),b=-1<a.indexOf("trident/"),b=!(!d&&!b),b={ie:b,edge:!!d,webkit:!b&&-1<a.indexOf(" applewebkit/"),air:-1<a.indexOf(" adobeair/"),mac:-1<a.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<a.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,b=window.location.hostname;
+return a!=b&&a!="["+b+"]"},secure:"https:"==location.protocol};b.gecko="Gecko"==navigator.product&&!b.webkit&&!b.ie;b.webkit&&(-1<a.indexOf("chrome")?b.chrome=!0:b.safari=!0);var c=0;b.ie&&(c=d?parseFloat(d[1]):b.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode,b.ie9Compat=9==c,b.ie8Compat=8==c,b.ie7Compat=7==c,b.ie6Compat=7>c||b.quirks);b.gecko&&(d=a.match(/rv:([\d\.]+)/))&&(d=d[1].split("."),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));
+b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&7>c)&&!(b.gecko&&4E4>c)&&!(b.webkit&&534>c);b.hidpi=2<=window.devicePixelRatio;b.needsBrFiller=b.gecko||b.webkit||b.ie&&10<c;b.needsNbspFiller=b.ie&&11>c;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");b.quirks&&(b.cssClass+=" cke_browser_quirks");b.ie&&(b.cssClass+=" cke_browser_ie"+(b.quirks?"6 cke_browser_iequirks":b.version));b.air&&(b.cssClass+=" cke_browser_air");
+b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");return b}());
+"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if("basic_ready"!=CKEDITOR.status)CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=
+CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_ready",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:a,additionalData:d})};
+CKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:a,additionalData:d})};
+CKEDITOR.on("log",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:"log",b=a.data.errorCode;if(a=a.data.additionalData)console[d]("[CKEDITOR] Error code: "+b+".",a);else console[d]("[CKEDITOR] Error code: "+b+".");console[d]("[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-"+b)}},null,null,999);CKEDITOR.dom={};
+(function(){var a=[],d=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/</g,g=/"/g,k=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,h={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:"­"},p=function(a,f){return"#"==f[0]?String.fromCharCode(parseInt(f.slice(1),10)):h[f]};CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,f){if(!a&&!f)return!0;if(!a||!f||a.length!=f.length)return!1;for(var b=0;b<a.length;b++)if(a[b]!=f[b])return!1;
+return!0},getIndex:function(a,f){for(var b=0;b<a.length;++b)if(f(a[b]))return b;return-1},clone:function(a){var f;if(a&&a instanceof Array){f=[];for(var b=0;b<a.length;b++)f[b]=CKEDITOR.tools.clone(a[b]);return f}if(null===a||"object"!=typeof a||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;f=new a.constructor;for(b in a)f[b]=CKEDITOR.tools.clone(a[b]);return f},capitalize:function(a,f){return a.charAt(0).toUpperCase()+
+(f?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var f=arguments.length,b,c;"boolean"==typeof(b=arguments[f-1])?f--:"boolean"==typeof(b=arguments[f-2])&&(c=arguments[f-1],f-=2);for(var h=1;h<f;h++){var d=arguments[h],m;for(m in d)if(!0===b||null==a[m])if(!c||m in c)a[m]=d[m]}return a},prototypedCopy:function(a){var f=function(){};f.prototype=a;return new f},copy:function(a){var f={},b;for(b in a)f[b]=a[b];return f},isArray:function(a){return"[object Array]"==Object.prototype.toString.call(a)},
+isEmpty:function(a){for(var f in a)if(a.hasOwnProperty(f))return!1;return!0},cssVendorPrefix:function(a,f,b){if(b)return d+a+":"+f+";"+a+":"+f;b={};b[a]=f;b[d+a]=f;return b},cssStyleToDomStyle:function(){var a=document.createElement("div").style,f="undefined"!=typeof a.cssFloat?"cssFloat":"undefined"!=typeof a.styleFloat?"styleFloat":"float";return function(a){return"float"==a?f:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){a=[].concat(a);for(var f,
+b=[],c=0;c<a.length;c++)if(f=a[c])/@import|[{}]/.test(f)?b.push("\x3cstyle\x3e"+f+"\x3c/style\x3e"):b.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+f+'"\x3e');return b.join("")},htmlEncode:function(a){return void 0===a||null===a?"":String(a).replace(b,"\x26amp;").replace(c,"\x26gt;").replace(e,"\x26lt;")},htmlDecode:function(a){return a.replace(k,p)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(g,"\x26quot;")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},
+transformPlainTextToHtml:function(a,f){var b=f==CKEDITOR.ENTER_BR,c=this.htmlEncode(a.replace(/\r\n/g,"\n")),c=c.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),h=f==CKEDITOR.ENTER_P?"p":"div";if(!b){var d=/\n{2}/g;if(d.test(c))var m="\x3c"+h+"\x3e",p="\x3c/"+h+"\x3e",c=m+c.replace(d,function(){return p+m})+p}c=c.replace(/\n/g,"\x3cbr\x3e");b||(c=c.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+h+"\x3e)"),function(a){return CKEDITOR.tools.repeat(a,2)}));c=c.replace(/^ | $/g,"\x26nbsp;");return c=c.replace(/(>|\s) /g,
+function(a,f){return f+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",f=0;8>f;f++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,f){var b=f(a);b.prototype=a.prototype;return b},setTimeout:function(a,f,b,c,h){h||(h=window);b||(b=h);return h.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)},
+f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if("function"==typeof f)for(var b=0,c=a.length;b<c;b++){if(f(a[b]))return b}else{if(a.indexOf)return a.indexOf(f);b=0;for(c=a.length;b<c;b++)if(a[b]===f)return b}return-1},search:function(a,f){var b=CKEDITOR.tools.indexOf(a,
+f);return 0<=b?a[b]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,b=a.base,c=a.privates||a._,h=a.proto;a=a.statics;!f&&(f=function(){b&&this.base.apply(this,arguments)});if(c)var d=f,f=function(){var a=this._||(this._={}),f;for(f in c){var b=c[f];a[f]="function"==typeof b?CKEDITOR.tools.bind(b,this):b}d.apply(this,arguments)};b&&(f.prototype=this.prototypedCopy(b.prototype),f.prototype.constructor=f,f.base=b,f.baseProto=b.prototype,f.prototype.base=
+function(){this.base=b.prototype.base;b.apply(this,arguments);this.base=arguments.callee});h&&this.extend(f.prototype,h,!0);a&&this.extend(f,a,!0);return f},addFunction:function(b,f){return a.push(function(){return b.apply(f||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var f=a[b];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,f;return function(b){f=CKEDITOR.tools.trim(b+"")+"px";return a.test(f)?
+f:b||""}}(),convertToPx:function(){var a;return function(f){a||(a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e',CKEDITOR.document),CKEDITOR.document.getBody().append(a));return/%$/.test(f)?f:(a.setStyle("width",f),a.$.clientWidth)}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a,f=0,b=arguments.length;f<b;f++){var c=arguments[f];try{a=c();break}catch(h){}}return a},
+genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var f=arguments,b=this;window.setTimeout(function(){a.apply(b,f)},0)}},normalizeCssText:function(a,f){var b=[],c,h=CKEDITOR.tools.parseCssText(a,!0,f);for(c in h)b.push(c+":"+h[c]);b.sort();return b.length?b.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,b,c,h){a=[b,c,h];for(b=0;3>b;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);
+return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,c,h){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+h})},parseCssText:function(a,f,b){var c={};b&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,
+function(a,b,h){f&&(b=b.toLowerCase(),"font-family"==b&&(h=h.replace(/\s*,\s*/g,",")),h=CKEDITOR.tools.trim(h));c[b]=h});return c},writeCssText:function(a,b){var c,h=[];for(c in a)h.push(c+":"+a[c]);b&&h.sort();return h.join("; ")},objectCompare:function(a,b,c){var h;if(!a&&!b)return!0;if(!a||!b)return!1;for(h in a)if(a[h]!=b[h])return!1;if(!c)for(h in b)if(a[h]!=b[h])return!1;return!0},objectKeys:function(a){var b=[],c;for(c in a)b.push(c);return b},convertArrayToObject:function(a,b){var c={};1==
+arguments.length&&(b=!0);for(var h=0,d=a.length;h<d;++h)c[a[h]]=b;return c},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(b){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,b,c){function h(){p=(new Date).getTime();d=!1;c?b.call(c):b()}var d,p=0;return{input:function(){if(!d){var b=(new Date).getTime()-p;b<a?d=setTimeout(h,a-b):h()}},reset:function(){d&&clearTimeout(d);d=p=0}}},enableHtml5Elements:function(a,
+b){for(var c="abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video".split(" "),h=c.length,d;h--;)d=a.createElement(c[h]),b&&a.appendChild(d)},checkIfAnyArrayItemMatches:function(a,b){for(var c=0,h=a.length;c<h;++c)if(a[c].match(b))return!0;return!1},checkIfAnyObjectPropertyMatches:function(a,b){for(var c in a)if(c.match(b))return!0;return!1},keystrokeToString:function(a,b){var c=b&16711680,h=
+b&65535,d=CKEDITOR.env.mac,p=[],m=[];c&CKEDITOR.CTRL&&(p.push(d?"⌘":a[17]),m.push(d?a[224]:a[17]));c&CKEDITOR.ALT&&(p.push(d?"⌥":a[18]),m.push(a[18]));c&CKEDITOR.SHIFT&&(p.push(d?"⇧":a[16]),m.push(a[16]));h&&(a[h]?(p.push(a[h]),m.push(a[h])):(p.push(String.fromCharCode(h)),m.push(String.fromCharCode(h))));return{display:p.join("+"),aria:m.join("+")}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",getCookie:function(a){a=a.toLowerCase();
+for(var b=document.cookie.split(";"),c,h,d=0;d<b.length;d++)if(c=b[d].split("\x3d"),h=decodeURIComponent(CKEDITOR.tools.trim(c[0]).toLowerCase()),h===a)return decodeURIComponent(1<c.length?c[1]:"");return null},setCookie:function(a,b){document.cookie=encodeURIComponent(a)+"\x3d"+encodeURIComponent(b)+";path\x3d/"},getCsrfToken:function(){var a=CKEDITOR.tools.getCookie("ckCsrfToken");if(!a||40!=a.length){var a=[],b="";if(window.crypto&&window.crypto.getRandomValues)a=new Uint8Array(40),window.crypto.getRandomValues(a);
+else for(var c=0;40>c;c++)a.push(Math.floor(256*Math.random()));for(c=0;c<a.length;c++)var h="abcdefghijklmnopqrstuvwxyz0123456789".charAt(a[c]%36),b=b+(.5<Math.random()?h.toUpperCase():h);a=b;CKEDITOR.tools.setCookie("ckCsrfToken",a)}return a},escapeCss:function(a){return a?window.CSS&&CSS.escape?CSS.escape(a):isNaN(parseInt(a.charAt(0),10))?a:"\\3"+a.charAt(0)+" "+a.substring(1,a.length):""},style:{parse:{_colors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",
+beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",
+darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",
+grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",
+lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",
+orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",
+slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(a){var b=[],c=[],c=this._findColor(a);
+c.length&&(b.color=c[0],CKEDITOR.tools.array.forEach(c,function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed=a;return b},margin:function(a){function b(a){c.top=h[a[0]];c.right=h[a[1]];c.bottom=h[a[2]];c.left=h[a[3]]}var c={},h=a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g)||["0px"];switch(h.length){case 1:b([0,0,0,0]);break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}return c},_findColor:function(a){var b=[],c=CKEDITOR.tools.array,b=
+b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(c.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,b,c){var h=[];this.forEach(a,function(d,p){b.call(c,d,p,a)&&h.push(d)});return h},forEach:function(a,b,c){var h=a.length,d;for(d=0;d<h;d++)b.call(c,a[d],d,a)},map:function(a,b,c){for(var h=[],d=0;d<a.length;d++)h.push(b.call(c,
+a[d],d,a));return h},reduce:function(a,b,c,h){for(var d=0;d<a.length;d++)c=b.call(h,c,a[d],d,a);return c}}};CKEDITOR.tools.array.indexOf=CKEDITOR.tools.indexOf;CKEDITOR.tools.array.isArray=CKEDITOR.tools.isArray})();
+CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,d=function(a,b){for(var c=CKEDITOR.tools.clone(a),h=1;h<arguments.length;h++){b=arguments[h];for(var d in b)delete c[d]}return c},b={},c={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},g={command:1,link:1,meta:1,noscript:1,script:1,style:1},k={},h={"#":1},p={center:1,dir:1,noframes:1};
+a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},h,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,e,b,p);d={a:d(b,{a:1,button:1}),abbr:b,address:c,
+area:k,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:k,bdi:b,bdo:b,blockquote:c,body:c,br:k,button:d(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:k,colgroup:{col:1},command:k,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:k,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},g),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:k,html:a({head:1,
+body:1},c,g),i:b,iframe:h,img:k,input:k,ins:b,kbd:b,keygen:k,label:b,legend:b,li:c,link:k,main:c,map:c,mark:b,menu:a({li:1},c),meta:k,meter:d(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:h,output:b,p:b,param:k,pre:b,progress:d(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:h,section:c,select:{optgroup:1,option:1},small:b,source:k,span:b,strong:b,style:h,sub:b,summary:a({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},b),
+sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:h,tfoot:{tr:1},th:c,thead:{tr:1},time:d(b,{time:1}),title:h,tr:{th:1,td:1},track:k,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:k,acronym:b,applet:a({param:1},c),basefont:k,big:b,center:c,dialog:k,dir:{li:1},font:b,isindex:k,noframes:c,strike:b,tt:b};a(d,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},e,p),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,
+fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,
+track:1,wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},d.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,
+s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return d}();
+CKEDITOR.dom.event=function(a){this.$=a};
+CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a+=CKEDITOR.CTRL;this.$.shiftKey&&(a+=CKEDITOR.SHIFT);this.$.altKey&&(a+=CKEDITOR.ALT);return a},preventDefault:function(a){var d=this.$;d.preventDefault?d.preventDefault():d.returnValue=!1;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},getTarget:function(){var a=
+this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;
+CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){a&&(this.$=a)};
+CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){"undefined"!=typeof CKEDITOR&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;(a=this.getCustomData("_"))||this.setCustomData("_",a={});return a},on:function(d){var b=this.getCustomData("_cke_nativeListeners");b||(b={},this.setCustomData("_cke_nativeListeners",b));b[d]||(b=b[d]=a(this,d),this.$.addEventListener?this.$.addEventListener(d,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+
+d,b));return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];c&&(this.$.removeEventListener?this.$.removeEventListener(a,c,!1):this.$.detachEvent&&this.$.detachEvent("on"+a,c),delete b[a])}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent?this.$.detachEvent("on"+
+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,!1);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}();
+(function(a){var d={};CKEDITOR.on("reset",function(){d={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return!1}};a.setCustomData=function(a,c){var e=this.getUniqueId();(d[e]||(d[e]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&d[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&d[c],e,g;c&&(e=c[a],g=a in c,delete c[a]);return g?e:null};a.clearCustomData=function(){this.removeAllListeners();var a=
+this.$["data-cke-expando"];a&&delete d[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype);
+CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;
+CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;
+CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,d){a.append(this,d);return a},clone:function(a,d){function b(c){c["data-cke-expando"]&&(c["data-cke-expando"]=!1);if(c.nodeType==CKEDITOR.NODE_ELEMENT||c.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(d||c.nodeType!=CKEDITOR.NODE_ELEMENT||c.removeAttribute("id",!1),a){c=c.childNodes;for(var e=0;e<c.length;e++)b(c[e])}}function c(b){if(b.type==CKEDITOR.NODE_ELEMENT||b.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(b.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=
+b.getName();":"==d[0]&&b.renameNode(d.substring(1))}if(a)for(d=0;d<b.getChildCount();d++)c(b.getChild(d))}}var e=this.$.cloneNode(a);b(e);e=new CKEDITOR.dom.node(e);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&c(e);return e},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,
+a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&d.unshift(this.getIndex.call({$:c},a));c=e}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var p=c?a.nextSibling:a.previousSibling;return p&&p.nodeType==CKEDITOR.NODE_TEXT?b(p)?d(p,
+c):p:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,e=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(e++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return e},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var e;if(!a){if(this.type==
+CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===b(e,!0))return null;a=e.getNext()}return!a||b&&!1===b(a)?null:d&&d!=a.type?a.getNextSourceNode(!1,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getLast&&this.getLast();var e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getPrevious()}for(;!a&&(e=(e||this).getParent());){if(b&&!1===
+b(e,!0))return null;a=e.getPrevious()}return!a||b&&!1===b(a)?null:d&&a.type!=d?a.getPreviousSourceNode(!1,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&10!=d.nodeType&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT||a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?
+new CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?"push":"unshift"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==
+CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(d.contains){if(d.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(d))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in d)return 0>d.sourceIndex||0>b.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}d=this.getAddress();a=a.getAddress();for(var b=Math.min(d.length,a.length),c=0;c<b;c++)if(d[c]!=
+a[c])return d[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return d.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,d){var b=this.$,c,e;d||(b=b.parentNode);"function"==typeof a?(e=!0,c=a):(e=!1,c=function(b){b="string"==typeof b.nodeName?b.nodeName.toLowerCase():"";return"string"==typeof a?b==a:b in a});for(;b;){if(c(e?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);
+try{b=b.parentNode}catch(g){b=null}}return null},hasAscendant:function(a,d){var b=this.$;d||(b=b.parentNode);for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return!0;b=b.parentNode}return!1},move:function(a,d){a.append(this.remove(),d)},remove:function(a){var d=this.$,b=d.parentNode;if(b){if(a)for(;a=d.firstChild;)b.insertBefore(d.removeChild(a),d);b.removeChild(d)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&
+(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(d)d.length<b&&(a.split(b-d.length),this.$.removeChild(this.$.firstChild));else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var d=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(d)d.length<b&&(a.split(d.length),this.$.lastChild.parentNode.removeChild(this.$.lastChild));else{a.remove();continue}}break}CKEDITOR.env.needsBrFiller&&
+(a=this.$.lastChild)&&1==a.type&&"br"==a.nodeName.toLowerCase()&&a.parentNode.removeChild(a)},isReadOnly:function(a){var d=this;this.type!=CKEDITOR.NODE_ELEMENT&&(d=this.getParent());CKEDITOR.env.edge&&d&&d.is("textarea","input")&&(a=!0);if(!a&&d&&"undefined"!=typeof d.$.isContentEditable)return!(d.$.isContentEditable||d.data("cke-editable"));for(;d;){if(d.data("cke-editable"))return!1;if(d.hasAttribute("contenteditable"))return"false"==d.getAttribute("contenteditable");d=d.getParent()}return!0}});
+CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;
+CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,d="CSS1Compat"==a.compatMode;return{width:(d?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(d?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop||
+a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;
+CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var d=new CKEDITOR.dom.element("link");d.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(d)}},appendStyleText:function(a){if(this.$.createStyleSheet){var d=this.$.createStyleSheet("");d.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return d||
+b.$.sheet},createElement:function(a,d){var b=new CKEDITOR.dom.element(a,this);d&&(d.attributes&&b.setAttributes(d.attributes),d.styles&&b.setStyles(d.styles));return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(d){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,d){for(var b=
+this.$.documentElement,c=0;b&&c<a.length;c++){var e=a[c];if(d)for(var g=-1,k=0;k<b.childNodes.length;k++){var h=b.childNodes[k];if(!0!==d||3!=h.nodeType||!h.previousSibling||3!=h.previousSibling.nodeType)if(g++,g==e){b=h;break}}else b=b.childNodes[e]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,d){CKEDITOR.env.ie&&8>=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];
+return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+
+CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a};
+CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;
+CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()};CKEDITOR.dom.element.setMarker=function(a,d,b,c){var e=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),g=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=d;g[b]=1;return d.setCustomData(b,c)};
+CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)};CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),e=d.getCustomData("list_marker_id"),g;for(g in c)d.removeCustomData(g);d.removeCustomData("list_marker_names");b&&(d.removeCustomData("list_marker_id"),delete a[e])};
+(function(){function a(a,b){return-1<(" "+a+" ").replace(g," ").indexOf(" "+b+" ")}function d(a){var b=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute("id")}}function b(a,b){var c=CKEDITOR.tools.escapeCss(a.$.id);return"#"+c+" "+b.split(/,\s*/).join(", #"+c+" ")}function c(a){for(var b=0,c=0,f=k[a].length;c<f;c++)b+=parseFloat(this.getComputedStyle(k[a][c])||0,10)||0;return b}var e=document.createElement("_").classList,e="undefined"!==typeof e&&
+null!==String(e.add).match(/\[Native code\]/gi),g=/[\n\t\r]/g;CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:e?function(a){this.$.classList.add(a);return this}:function(b){var c=this.$.className;c&&(a(c,b)||(c+=" "+b));this.$.className=c||b;return this},removeClass:e?function(a){var b=this.$;b.classList.remove(a);b.className||b.removeAttribute("class");return this}:function(b){var c=this.getAttribute("class");c&&a(c,b)&&((c=c.replace(new RegExp("(?:^|\\s+)"+
+b+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",c):this.removeAttribute("class"));return this},hasClass:function(b){return a(this.$.className,b)},append:function(a,b){"string"==typeof a&&(a=this.getDocument().createElement(a));b?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var b=new CKEDITOR.dom.element("div",this.getDocument());b.setHtml(a);b.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!=
+this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a);
+var f=c.extractContents(!1,b||!1),d;c.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(c=new CKEDITOR.dom.element("div");d=f.getFirst();)d.$.style.backgroundColor&&(d.$.style.backgroundColor=d.$.style.backgroundColor),c.append(d);c.insertAfter(this);c.remove(!0)}else f.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):
+b!=a.$&&b.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(b){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(!0));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},
+this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var b=this.$;if(this.getParent())return b.innerHTML=a;var c=this.getDocument()._getHtml5ShivFrag();c.appendChild(b);b.innerHTML=a;c.removeChild(b);return a}catch(f){this.$.innerHTML="";b=new CKEDITOR.dom.element("body",this.getDocument());b.$.innerHTML=a;for(b=b.getChildren();b.count();)this.append(b.getItem(0));return a}}:
+function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(b){this.$[a?"textContent":"innerText"]=b}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":return a=this.$.getAttribute(a,
+2),0!==a&&0===this.$.tabIndex&&(a=null),a;case "checked":return a=this.$.attributes.getNamedItem(a),(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getAttributes:function(a){var b={},c=this.$.attributes,f;a=CKEDITOR.tools.isArray(a)?
+a:[];for(f=0;f<c.length;f++)-1===CKEDITOR.tools.indexOf(a,c[f].name)&&(b[c[f].name]=c[f].value);return b},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var b=this.getWindow().$.getComputedStyle(this.$,null);return b?b.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=
+function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute("tabindex"),10)?a:-1},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();
+if(CKEDITOR.env.ie&&8>=document.documentMode){var b=this.$.scopeName;"HTML"!=b&&(a=b.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&a&&!a(b)&&(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},
+is:function(){var a=this.getName();if("object"==typeof arguments[0])return!!arguments[0][a];for(var b=0;b<arguments.length;b++)if(arguments[b]==a)return!0;return!1},isEditable:function(a){var b=this.getName();return this.isReadOnly()||"none"==this.getComputedStyle("display")||"hidden"==this.getComputedStyle("visibility")||CKEDITOR.dtd.$nonEditable[b]||CKEDITOR.dtd.$empty[b]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount()?!1:!1!==a?(a=CKEDITOR.dtd[b]||
+CKEDITOR.dtd.span,!(!a||!a["#"])):!0},isIdentical:function(a){var b=this.clone(0,1);a=a.clone(0,1);b.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(b.$.isEqualNode)return b.$.style.cssText=CKEDITOR.tools.normalizeCssText(b.$.style.cssText),a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText),b.$.isEqualNode(a.$);b=b.getOuterHtml();a=
+a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var c=this.getParent();c.type==CKEDITOR.NODE_ELEMENT&&(c=c.clone(),c.setHtml(b),b=c.getHtml(),c.setHtml(a),a=c.getHtml())}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&"hidden"!=this.getComputedStyle("visibility"),b,c;a&&CKEDITOR.env.webkit&&(b=this.getWindow(),!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement)&&(a=(new CKEDITOR.dom.element(c)).isVisible()));return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return!1;
+for(var a=this.getChildren(),b=0,c=a.count();b<c;b++){var f=a.getItem(b);if(f.type!=CKEDITOR.NODE_ELEMENT||!f.data("cke-bookmark"))if(f.type==CKEDITOR.NODE_ELEMENT&&!f.isEmptyInlineRemoveable()||f.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(f.getText()))return!1}return!0},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,b=0;b<a.length;b++){var c=a[b];switch(c.nodeName){case "class":if(this.getAttribute("class"))return!0;case "data-cke-expando":continue;
+default:if(c.specified)return!0}}return!1}:function(){var a=this.$.attributes,b=a.length,c={"data-cke-expando":1,_moz_dirty:1};return 0<b&&(2<b||!c[a[0].nodeName]||2==b&&!c[a[1].nodeName])},hasAttribute:function(){function a(b){var c=this.$.attributes.getNamedItem(b);if("input"==this.getName())switch(b){case "class":return 0<this.$.className.length;case "checked":return!!this.$.checked;case "value":return b=this.getAttribute("type"),"checkbox"==b||"radio"==b?"on"!=this.$.value:!!this.$.value}return c?
+c.specified:!1}return CKEDITOR.env.ie?8>CKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var f;if(b)for(;f=c.lastChild;)a.insertBefore(c.removeChild(f),a.firstChild);else for(;f=c.firstChild;)a.appendChild(c.removeChild(f))}},mergeSiblings:function(){function a(b,c,f){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d=
+[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=f?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var h=f?b.getLast():b.getFirst();d.length;)d.shift().move(b,!f);c.moveChildren(b,!f);c.remove();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"",
+visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){"class"==b?this.$.className=c:"style"==b?this.$.style.cssText=c:"tabindex"==b?this.$.tabIndex=c:"checked"==b?this.$.checked=c:"contenteditable"==b?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if("src"==b&&c.match(/^http:\/\//))try{a.apply(this,
+arguments)}catch(f){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=
+0;b<a.length;b++)this.removeAttribute(a[b]);else for(b in a=a||this.getAttributes(),a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(b.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)b.removeProperty?b.removeProperty(a):b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var c=["top","left","right","bottom"],f;"border"==a&&(f=["color","style","width"]);for(var b=[],d=0;d<c.length;d++)if(f)for(var u=
+0;u<f.length;u++)b.push([a,c[d],f[u]].join("-"));else b.push([a,c[d]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
+"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();c<f;c++)a=b.getItem(c),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,f=this.getDocument(),d=f.getBody(),u="BackCompat"==f.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie?
+8!==CKEDITOR.env.version:1)){var e=this.$.getBoundingClientRect(),g=f.$.documentElement,m=g.clientTop||d.$.clientTop||0,x=g.clientLeft||d.$.clientLeft||0,k=!0;CKEDITOR.env.ie&&(k=f.getDocumentElement().contains(this),f=f.getBody().contains(this),k=u&&f||!u&&k);k&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(b=d.$.scrollLeft||g.scrollLeft,c=d.$.scrollTop||g.scrollTop):(c=u?d.$:g,b=c.scrollLeft,c=c.scrollTop),b=e.left+b-x,c=e.top+c-m)}else for(m=this,x=null;m&&"body"!=m.getName()&&
+"html"!=m.getName();){b+=m.$.offsetLeft-m.$.scrollLeft;c+=m.$.offsetTop-m.$.scrollTop;m.equals(this)||(b+=m.$.clientLeft||0,c+=m.$.clientTop||0);for(;x&&!x.equals(m);)b-=x.$.scrollLeft,c-=x.$.scrollTop,x=x.getParent();x=m;m=(e=m.$.offsetParent)?new CKEDITOR.dom.element(e):null}a&&(e=this.getWindow(),m=a.getWindow(),!e.equals(m)&&e.$.frameElement&&(a=(new CKEDITOR.dom.element(e.$.frameElement)).getDocumentPosition(a),b+=a.x,c+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||
+u||(b+=this.$.clientLeft?1:0,c+=this.$.clientTop?1:0);return{x:b,y:c}},scrollIntoView:function(a){var b=this.getParent();if(b){do if((b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1),b.is("html")){var c=b.getWindow();try{var f=c.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(d){}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var f,d,e,z;function g(b,c){/body|html/.test(a.getName())?
+a.getWindow().$.scrollBy(b,c):(a.$.scrollLeft+=b,a.$.scrollTop+=c)}function m(a,b){var c={x:0,y:0};if(!a.is(k?"body":"html")){var f=a.$.getBoundingClientRect();c.x=f.left;c.y=f.top}f=a.getWindow();f.equals(b)||(f=m(CKEDITOR.dom.element.get(f.$.frameElement),b),c.x+=f.x,c.y+=f.y);return c}function x(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var k="BackCompat"==e.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=k?e.getBody():e.getDocumentElement());
+CKEDITOR.env.webkit&&(e=this.getEditor(!1))&&(e._.previousScrollTop=null);e=a.getWindow();d=m(this,e);var w=m(a,e),F=this.$.offsetHeight;f=this.$.offsetWidth;var l=a.$.clientHeight,q=a.$.clientWidth;e=d.x-x(this,"left")-w.x||0;z=d.y-x(this,"top")-w.y||0;f=d.x+f+x(this,"right")-(w.x+q)||0;d=d.y+F+x(this,"bottom")-(w.y+l)||0;(0>z||0<d)&&g(0,!0===b?z:!1===b?d:0>z?z:d);c&&(0>e||0<f)&&g(0>e?e:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+
+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}},
+getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){var c=this.$.attributes;b=b||{};for(var f=0;f<c.length;f++){var d=c[f],e=d.nodeName.toLowerCase(),g;if(!(e in b))if("checked"==e&&(g=this.getAttribute(e)))a.setAttribute(e,g);else if(!CKEDITOR.env.ie||this.hasAttribute(e))g=this.getAttribute(e),null===g&&(g=d.nodeValue),a.setAttribute(e,g)}""!==this.$.style.cssText&&
+(a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument();a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);this.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(0<=c&&c<f.length)return f[c]}return function(b){var c=this.$;if(b.slice)for(b=b.slice();0<b.length&&c;)c=a(c,
+b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT&&b.hasClass("cke_enable_context_menu")}this.on("contextmenu",function(b){b.data.getTarget().getAscendant(a,!0)||b.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||
+"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(void 0===b)return this.getAttribute(a);!1===b?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(a){var b=CKEDITOR.instances,c,f,d;a=a||void 0===a;for(c in b)if(f=b[c],f.element.equals(this)&&f.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||!a&&(d=f.editable())&&(d.equals(this)||d.contains(this)))return f;return null},find:function(a){var c=d(this);a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b(this,
+a)));c();return a},findOne:function(a){var c=d(this);a=this.$.querySelector(b(this,a));c();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,b,c){if(!(c||b&&this.type!=b))var f=a(this);if(!1!==f){c=this.getChildren();for(var d=0;d<c.count();d++)f=c.getItem(d),f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):b&&f.type!=b||a(f)}}});var k={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};
+CKEDITOR.dom.element.prototype.setSize=function(a,b,d){"number"==typeof b&&(!d||CKEDITOR.env.ie&&CKEDITOR.env.quirks||(b-=c.call(this,a)),this.setStyle(a,b+"px"))};CKEDITOR.dom.element.prototype.getSize=function(a,b){var d=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;b&&(d-=c.call(this,a));return d}})();CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a};
+CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)},getHtml:function(){var a=new CKEDITOR.dom.element("div");this.clone(1,1).appendTo(a);return a.getHtml().replace(/\s*data-cke-expando=".*?"/g,"")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,
+insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});
+(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed)return this.end(),null;c.optimize()}var f,d=c.startContainer;f=c.endContainer;var e=c.startOffset,B=c.endOffset,g,l=this.guard,q=this.type,n=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var t=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),A=f.type==CKEDITOR.NODE_ELEMENT?f.getChild(B):f.getNext();this._.guardLTR=function(a,b){return(!b||!t.equals(a))&&(!A||
+!a.equals(A))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var C=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),h=d.type==CKEDITOR.NODE_ELEMENT?e?d.getChild(e-1):null:d.getPrevious();this._.guardRTL=function(a,b){return(!b||!C.equals(a))&&(!h||!a.equals(h))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var k=a?this._.guardRTL:this._.guardLTR;g=l?function(a,b){return!1===k(a,b)?!1:l(a,b)}:k;this.current?f=this.current[n](!1,q,g):(a?f.type==CKEDITOR.NODE_ELEMENT&&
+(f=0<B?f.getChild(B-1):!1===g(f,!0)?null:f.getPreviousSourceNode(!0,q,g)):(f=d,f.type==CKEDITOR.NODE_ELEMENT&&((f=f.getChild(e))||(f=!1===g(d,!0)?null:d.getNextSourceNode(!0,q,g)))),f&&!1===g(f)&&(f=null));for(;f&&!this._.end;){this.current=f;if(!this.evaluator||!1!==this.evaluator(f)){if(!b)return f}else if(b&&this.evaluator)return!1;f=f[n](!1,q,g)}this.end();return this.current=null}function d(b){for(var c,f=null;c=a.call(this,b);)f=c;return f}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=
+a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return!1!==a.call(this,0,1)},checkBackward:function(){return!1!==a.call(this,1,1)},lastForward:function(){return d.call(this)},lastBackward:function(){return d.call(this,1)},reset:function(){delete this.current;this._={}}}});var b={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,
+"table-column":1,"table-cell":1,"table-caption":1},c={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return"none"!=this.getComputedStyle("float")||this.getComputedStyle("position")in c||!b[this.getComputedStyle("display")]?!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a)):!0};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};
+CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&"span"==a.getName()&&a.data("cke-bookmark")}return function(f){var d,e;d=f&&f.type!=CKEDITOR.NODE_ELEMENT&&(e=f.getParent())&&c(e);d=a?d:d||c(f);return!!(b^d)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE);return!!(a^c)}};CKEDITOR.dom.walker.invisible=
+function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(f){b(f)?f=1:(f.type==CKEDITOR.NODE_TEXT&&(f=f.getParent()),f=f.$.offsetWidth<=c);return!!(a^f)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!g(a)&&!k(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&e.test(c.getText());f&&(f=c.getParent(),c=c.getNext(b),f=f.isBlockBoundary()&&
+(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()));return!!(a^f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var e=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,g=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),h=CKEDITOR.dom.walker.temp(),p=function(a){return k(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};CKEDITOR.dom.walker.ignored=
+function(a){return function(b){b=g(b)||k(b)||h(b);return!!(a^b)}};var r=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(b){for(var c=0,f=b.getChildCount();c<f;++c)if(!r(b.getChild(c)))return!!a;return!a}};var f=CKEDITOR.dom.walker.empty(),B=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=function(a){return function(b){b=
+r(b)?!1:b.type==CKEDITOR.NODE_TEXT||b.type==CKEDITOR.NODE_ELEMENT&&(b.is(CKEDITOR.dtd.$inline)||b.is("hr")||"false"==b.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&b.is(B)&&f(b))?!0:!1;return!!(a^b)}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(p(a));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&e.test(a.getText()))?a:!1}})();
+CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=!0;var d=a instanceof CKEDITOR.dom.document;this.document=d?a:a.getDocument();this.root=d?a.getBody():a};
+(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,e){function m(a,b,c,f){var d=c?a.getPrevious():a.getNext();if(f&&k)return d;l||f?b.append(a.clone(!0,e),c):(a.remove(),r&&b.append(a));return d}function g(){var a,b,c,f=Math.min(P.length,v.length);for(a=0;a<f;a++)if(b=P[a],c=v[a],!b.equals(c))return a;return a-1}function h(){var b=G-1,c=M&&H&&!q.equals(n);b<E-1||b<I-1||c?(c?a.moveToPosition(n,
+CKEDITOR.POSITION_BEFORE_START):I==b+1&&D?a.moveToPosition(v[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(v[b+1],CKEDITOR.POSITION_BEFORE_START),d&&(b=P[b+1])&&b.type==CKEDITOR.NODE_ELEMENT&&(c=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',a.document),c.insertAfter(b),b.mergeSiblings(!1),a.moveToBookmark({startNode:c}))):a.collapse(!0)}a.optimizeBookmark();var k=0===b,r=1==b,l=2==b;b=l||r;var q=a.startContainer,n=a.endContainer,
+t=a.startOffset,A=a.endOffset,C,D,M,H,p,Q;if(l&&n.type==CKEDITOR.NODE_TEXT&&q.equals(n))q=a.document.createText(q.substring(t,A)),c.append(q);else{n.type==CKEDITOR.NODE_TEXT?l?Q=!0:n=n.split(A):0<n.getChildCount()?A>=n.getChildCount()?(n=n.getChild(A-1),D=!0):n=n.getChild(A):H=D=!0;q.type==CKEDITOR.NODE_TEXT?l?p=!0:q.split(t):0<q.getChildCount()?0===t?(q=q.getChild(t),C=!0):q=q.getChild(t-1):M=C=!0;for(var P=q.getParents(),v=n.getParents(),G=g(),E=P.length-1,I=v.length-1,K=c,L,Z,X,fa=-1,S=G;S<=E;S++){Z=
+P[S];X=Z.getNext();for(S!=E||Z.equals(v[S])&&E<I?b&&(L=K.append(Z.clone(0,e))):C?m(Z,K,!1,M):p&&K.append(a.document.createText(Z.substring(t)));X;){if(X.equals(v[S])){fa=S;break}X=m(X,K)}K=L}K=c;for(S=G;S<=I;S++)if(c=v[S],X=c.getPrevious(),c.equals(P[S]))b&&(K=K.getChild(0));else{S!=I||c.equals(P[S])&&I<E?b&&(L=K.append(c.clone(0,e))):D?m(c,K,!1,H):Q&&K.append(a.document.createText(c.substring(0,A)));if(S>fa)for(;X;)X=m(X,K,!0);K=L}l||h()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),
+c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(e){return c(e)||b(e)?!0:d(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&k(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function e(a){return function(){var b;return this[a?
+"getPreviousNode":"getNextNode"](function(a){!b&&r(a)&&(b=a);return p(a)&&!(k(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},k=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,p=CKEDITOR.dom.walker.editable(),r=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);
+a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||
+d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,e,m=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id",d+(m?"C":"S")));m||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),e=this.clone(),
+e.collapse(),e.insertNode(c));e=this.clone();e.collapse(!0);e.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(m?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:m}},createBookmark2:function(){function a(b){var f=b.container,d=b.offset,e;e=f;var g=d;e=e.type!=CKEDITOR.NODE_ELEMENT||0===g||g==e.getChildCount()?0:e.getChild(g-1).type==CKEDITOR.NODE_TEXT&&e.getChild(g).type==CKEDITOR.NODE_TEXT;e&&(f=f.getChild(d-
+1),d=f.getLength());if(f.type==CKEDITOR.NODE_ELEMENT&&0<d){a:{for(e=f;d--;)if(g=e.getChild(d).getIndex(!0),0<=g){d=g;break a}d=-1}d+=1}if(f.type==CKEDITOR.NODE_TEXT){e=f;for(g=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)g+=e.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,"").length;e=g;f.getText()?d+=e:(g=f.getPrevious(c),e?(d=e,f=g?g.getNext():f.getParent().getFirst()):(f=f.getParent(),d=g?g.getIndex(!0)+1:0))}b.container=f;b.offset=d}function b(a,c){var f=c.getCustomData("cke-fillingChar");
+if(f){var d=a.container;f.equals(d)&&(a.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,e={container:this.startContainer,offset:this.startOffset},g={container:this.endContainer,offset:this.endOffset};c&&(a(e),b(e,this.root),d||(a(g),b(g,this.root)));return{start:e.container.getAddress(c),end:d?null:g.container.getAddress(c),
+startOffset:e.offset,endOffset:g.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode,a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):
+this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>c)a=a.getChild(c);else if(1>e)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(e=b.getChildCount(),e>d)b=b.getChild(d).getPreviousSourceNode(!0);else if(1>e)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=
+b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):
+this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||
+e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var m=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(m,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(e){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset;b||e||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):
+d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var m=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=
+c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return!1;C=f!=a?f.getText():f.substring(b);if(d.test(C))return!1}return!0};if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,k,r,l,q,n,t=!1,A,C;A=this.startContainer;var D=this.startOffset;A.type==CKEDITOR.NODE_TEXT?(D&&(A=!CKEDITOR.tools.trim(A.substring(0,D)).length&&A,t=!!A),A&&((q=A.getPrevious())||(l=A.getParent()))):(D&&(q=A.getChild(D-1)||A.getLast()),q||(l=A));for(l=c(l);l||q;){if(l&&!q){!n&&l.equals(g)&&(n=!0);if(e?l.isBlockBoundary():
+!h.contains(l))break;t&&"inline"==l.getComputedStyle("display")||(t=!1,n?k=l:this.setStartBefore(l));q=l.getPrevious()}for(;q;)if(A=!1,q.type==CKEDITOR.NODE_COMMENT)q=q.getPrevious();else{if(q.type==CKEDITOR.NODE_TEXT)C=q.getText(),d.test(C)&&(q=null),A=/[\s\ufeff]$/.test(C);else if((q.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&q.is("br"))&&!q.data("cke-bookmark"))if(t&&CKEDITOR.dtd.$removeEmpty[q.getName()]){C=q.getText();if(d.test(C))q=null;else for(var D=q.$.getElementsByTagName("*"),M=0,H;H=
+D[M++];)if(!CKEDITOR.dtd.$removeEmpty[H.nodeName.toLowerCase()]){q=null;break}q&&(A=!!C.length)}else q=null;A&&(t?n?k=l:l&&this.setStartBefore(l):t=!0);if(q){A=q.getPrevious();if(!l&&!A){l=q;q=null;break}q=A}else l=null}l&&(l=c(l.getParent()))}A=this.endContainer;D=this.endOffset;l=q=null;n=t=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(D)).length?t=!0:(t=!A.getLength(),D==A.getLength()?(q=A.getNext())||(l=A.getParent()):m(A,D)&&(l=A.getParent())):(q=A.getChild(D))||(l=A);for(;l||
+q;){if(l&&!q){!n&&l.equals(g)&&(n=!0);if(e?l.isBlockBoundary():!h.contains(l))break;t&&"inline"==l.getComputedStyle("display")||(t=!1,n?r=l:l&&this.setEndAfter(l));q=l.getNext()}for(;q;){A=!1;if(q.type==CKEDITOR.NODE_TEXT)C=q.getText(),m(q,0)||(q=null),A=/^[\s\ufeff]/.test(C);else if(q.type==CKEDITOR.NODE_ELEMENT){if((0<q.$.offsetWidth||b&&q.is("br"))&&!q.data("cke-bookmark"))if(t&&CKEDITOR.dtd.$removeEmpty[q.getName()]){C=q.getText();if(d.test(C))q=null;else for(D=q.$.getElementsByTagName("*"),M=
+0;H=D[M++];)if(!CKEDITOR.dtd.$removeEmpty[H.nodeName.toLowerCase()]){q=null;break}q&&(A=!!C.length)}else q=null}else A=1;A&&t&&(n?r=l:this.setEndAfter(l));if(q){A=q.getNext();if(!l&&!A){l=q;q=null;break}q=A}else l=null}l&&(l=c(l.getParent()))}k&&r&&(g=k.contains(r)?r:k,this.setStartBefore(g),this.setEndAfter(g));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:l=new CKEDITOR.dom.range(this.root);h=this.root;l.setStartAt(h,CKEDITOR.POSITION_AFTER_START);l.setEnd(this.startContainer,
+this.startOffset);l=new CKEDITOR.dom.walker(l);var p,Q,P=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),v=null,G=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&"false"==a.getAttribute("contenteditable"))if(v){if(v.equals(a)){v=null;return}}else v=a;else if(v)return;var b=P(a);b||(p=a);return b},e=function(a){var b=G(a);!b&&a.is&&a.is("br")&&(Q=a);return b};l.guard=G;l=l.lastBackward();p=p||h;this.setStartAt(p,!p.is("br")&&(!l&&this.checkStartOfBlock()||l&&p.contains(l))?
+CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){l=this.clone();l=new CKEDITOR.dom.walker(l);var E=CKEDITOR.dom.walker.whitespaces(),I=CKEDITOR.dom.walker.bookmark();l.evaluator=function(a){return!E(a)&&!I(a)};if((l=l.previous())&&l.type==CKEDITOR.NODE_ELEMENT&&l.is("br"))break}l=this.clone();l.collapse();l.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);l=new CKEDITOR.dom.walker(l);l.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:G;p=v=Q=null;l=l.lastForward();
+p=p||h;this.setEndAt(p,!l&&this.checkEndOfBlock()||l&&p.contains(l)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);Q&&this.setEndAfter(Q)}},shrink:function(a,b,c){if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var d=this.clone(),e=this.startContainer,m=this.endContainer,g=this.startOffset,h=this.endOffset,k=1,r=1;e&&e.type==CKEDITOR.NODE_TEXT&&(g?g>=e.getLength()?d.setStartAfter(e):(d.setStartBefore(e),k=0):d.setStartBefore(e));m&&m.type==CKEDITOR.NODE_TEXT&&(h?h>=m.getLength()?d.setEndAfter(m):
+(d.setEndAfter(m),r=0):d.setEndBefore(m));var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var q;d.guard=function(b,d){if(l(b))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(q)||!1===c&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;d||b.type!=CKEDITOR.NODE_ELEMENT||
+(q=b);return!0};k&&(e=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);r&&(d.reset(),(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!k&&!r)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&
+this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=
+c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer||(this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),
+a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b,b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,
+0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var e=d.getBogus();e&&e.remove();
+d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=c.block,m=d.block,g=null;if(!c.blockLimit.equals(d.blockLimit))return null;"br"!=a&&(e||(e=this.fixBlock(!0,a),m=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),m||(m=this.fixBlock(!1,a)));c=e&&this.checkStartOfBlock();d=m&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(m)&&
+(d?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(m,CKEDITOR.POSITION_AFTER_END),m=null):c?(g=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(m=this.splitElement(e,b||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:m,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:g}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);
+var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||d.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||
+d.blockLimit,g;e&&!e.equals(d.root)&&!e.getFirst(a(e));)g=e.getParent(),this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=g;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,e=this.clone();e.collapse(d);e[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:
+CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=c(d);return e[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),h.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);
+a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),h.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();
+d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")||
+"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a,
+CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),
+!0;var d=a,e=c,m=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(m=d[b?"getLast":"getFirst"](r));e||m||(m=d[b?"getPrevious":"getNext"](r));a=m}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,e,m,g=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,g[b?0:1])):c=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))d=1;else if(e=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(m=e.type==CKEDITOR.NODE_ELEMENT)&&
+e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?(c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&m&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(e,0),c.collapse()):c.moveToPosition(e,g[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=
+this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=
+this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:e(),getPreviousEditableNode:e(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,e=this.clone();e.optimize();(d=e.startContainer.type==CKEDITOR.NODE_TEXT)?(c=e.startContainer.getText(),b=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView();
+d&&(e.startContainer.setText(c),b.remove());a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a,b){var c=this.getCommonAncestor(),d=this.getBoundaryNodes(),e=[],m,g,h,k;if(c&&c.find)for(g=c.find(a),m=0;m<g.count();m++)if(c=g.getItem(m),b||!c.isReadOnly())h=c.getPosition(d.startNode)&CKEDITOR.POSITION_FOLLOWING||d.startNode.equals(c),k=c.getPosition(d.endNode)&CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IS_CONTAINED,
+h&&k&&e.push(c);return e}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict";
+(function(){function a(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,e,g){a:{null==g&&(g=d(e));for(var h;h=g.shift();)if(h.getDtd().p){g={element:h,remaining:g};break a}g=null}if(!g)return 0;if((h=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!h.check(c))return b(a,
+c,e,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:e,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0),
+h=function(a){return g(a)&&k(a)},p={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,k,u,z,y;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable=
+null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var m=this.range.clone();k=m.startPath();var x=m.endPath(),J=!m.collapsed&&c(m,k.block),w=!m.collapsed&&c(m,x.block,1);m.shrink(CKEDITOR.SHRINK_ELEMENT,!0);J&&m.setStartAt(k.block,CKEDITOR.POSITION_BEFORE_END);w&&m.setEndAt(x.block,CKEDITOR.POSITION_AFTER_START);k=m.endContainer.hasAscendant("pre",!0)||m.startContainer.hasAscendant("pre",!0);m.enlarge(this.forceBrBreak&&!k||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);
+m.collapsed||(k=new CKEDITOR.dom.walker(m.clone()),x=CKEDITOR.dom.walker.bookmark(!0,!0),k.evaluator=x,this._.nextNode=k.next(),k=new CKEDITOR.dom.walker(m.clone()),k.evaluator=x,k=k.previous(),this._.lastNode=k.getNextSourceNode(!0,null,m.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(x=this.range.clone(),x.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),x.checkEndOfBlock()&&
+(x=new CKEDITOR.dom.elementPath(x.endContainer,x.root),this._.lastNode=(x.block||x.blockLimit).getNextSourceNode(!0))),this._.lastNode&&m.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=m.document.createText(""),this._.lastNode.insertAfter(k)),m=null);this._.started=1;k=m}x=this._.nextNode;m=this._.lastNode;for(this._.nextNode=null;x;){var J=0,w=x.hasAscendant("pre"),F=x.type!=CKEDITOR.NODE_ELEMENT,l=0;if(F)x.type==CKEDITOR.NODE_TEXT&&e.test(x.getText())&&(F=0);else{var q=x.getName();
+if(CKEDITOR.dtd.$block[q]&&"false"==x.getAttribute("contenteditable")){d=x;b(this,a,d);break}else if(x.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if("br"==q)F=1;else if(!k&&!x.getChildCount()&&"hr"!=q){d=x;u=x.equals(m);break}k&&(k.setEndAt(x,CKEDITOR.POSITION_BEFORE_START),"br"!=q&&(this._.nextNode=x));J=1}else{if(x.getFirst()){k||(k=this.range.clone(),k.setStartAt(x,CKEDITOR.POSITION_BEFORE_START));x=x.getFirst();continue}F=1}}F&&!k&&(k=this.range.clone(),k.setStartAt(x,CKEDITOR.POSITION_BEFORE_START));
+u=(!J||F)&&x.equals(m);if(k&&!J)for(;!x.getNext(h)&&!u;){q=x.getParent();if(q.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){J=1;F=0;u||q.equals(m);k.setEndAt(q,CKEDITOR.POSITION_BEFORE_END);break}x=q;F=1;u=x.equals(m);l=1}F&&k.setEndAt(x,CKEDITOR.POSITION_AFTER_END);x=this._getNextSourceNode(x,l,m);if((u=!x)||J&&k)break}if(!d){if(!k)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(k.startContainer,k.root);x=d.blockLimit;J={div:1,th:1,td:1};
+d=d.block;!d&&x&&!this.enforceRealBlocks&&J[x.getName()]&&k.checkStartOfBlock()&&k.checkEndOfBlock()&&!x.equals(k.root)?d=x:!d||this.enforceRealBlocks&&d.is(p)?(d=this.range.document.createElement(a),k.extractContents().appendTo(d),d.trim(),k.insertNode(d),z=y=!0):"li"!=d.getName()?k.checkStartOfBlock()&&k.checkEndOfBlock()||(d=d.clone(!1),k.extractContents().appendTo(d),d.trim(),y=k.splitBlock(),z=!y.wasStartOfBlock,y=!y.wasEndOfBlock,k.insertNode(d)):u||(this._.nextNode=d.equals(m)?null:this._getNextSourceNode(k.getBoundaryNodes().endNode,
+1,m))}z&&(z=d.getPrevious())&&z.type==CKEDITOR.NODE_ELEMENT&&("br"==z.getName()?z.remove():z.getLast()&&"br"==z.getLast().$.nodeName.toLowerCase()&&z.getLast().remove());y&&(z=d.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&"br"==z.getName()&&(!CKEDITOR.env.needsBrFiller||z.getPrevious(g)||z.getNext(g))&&z.remove();this._.nextNode||(this._.nextNode=u||d.equals(m)||!m?null:this._getNextSourceNode(d,1,m));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(e))}var e=
+this.range.root;for(a=a.getNextSourceNode(b,null,d);!g(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})();
+CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh",
+{editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||"boolean"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};
+CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?
+this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;
+CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};
+(function(){function a(a,b,c,d,l){var e,q;a=[];for(e in b){q=b[e];q="boolean"==typeof q?{}:"function"==typeof q?{match:q}:M(q);"$"!=e.charAt(0)&&(q.elements=e);c&&(q.featureName=c.toLowerCase());var n=q;n.elements=k(n.elements,/\s+/)||null;n.propertiesOnly=n.propertiesOnly||!0===n.elements;var f=/\s*,\s*/,t=void 0;for(t in Q){n[t]=k(n[t],f)||null;var m=n,g=P[t],E=k(n[P[t]],f),v=n[t],A=[],I=!0,C=void 0;E?I=!1:E={};for(C in v)"!"==C.charAt(0)&&(C=C.slice(1),A.push(C),E[C]=!0,I=!1);for(;C=A.pop();)v[C]=
+v["!"+C],delete v["!"+C];m[g]=(I?!1:E)||null}n.match=n.match||null;d.push(q);a.push(q)}b=l.elements;l=l.generic;var h;c=0;for(d=a.length;c<d;++c){e=M(a[c]);q=!0===e.classes||!0===e.styles||!0===e.attributes;n=e;t=g=f=void 0;for(f in Q)n[f]=J(n[f]);m=!0;for(t in P){f=P[t];g=n[f];E=[];v=void 0;for(v in g)-1<v.indexOf("*")?E.push(new RegExp("^"+v.replace(/\*/g,".*")+"$")):E.push(v);g=E;g.length&&(n[f]=g,m=!1)}n.nothingRequired=m;n.noProperties=!(n.attributes||n.classes||n.styles);if(!0===e.elements||
+null===e.elements)l[q?"unshift":"push"](e);else for(h in n=e.elements,delete e.elements,n)if(b[h])b[h][q?"unshift":"push"](e);else b[h]=[e]}}function d(a,c,d,l){if(!a.match||a.match(c))if(l||h(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=b(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=b(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;l=d.validClasses;if(a)if(!0===a)a=!0;else{for(var e=0,q=c.length,n;e<q;++e)n=c[e],l[n]||
+(l[n]=a(n));a=!1}else a=!1;d.allClasses=a}}function b(a,b,c){if(!a)return!1;if(!0===a)return!0;for(var d in b)c[d]||(c[d]=a(d));return!1}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return!1;c.hadInvalidAttribute=e(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=e(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=!1,l=!0===a,q=b.length;q--;)if(l||a(b[q]))b.splice(q,1),d=!0;a=d}else a=!1;c.hadInvalidClass=a||c.hadInvalidClass}}function e(a,
+b){if(!a)return!1;var c=!1,d=!0===a,l;for(l in b)if(d||a(l))delete b[l],c=!0;return c}function g(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return!1;a._.cachedChecks={};return!0}function k(a,b){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=H(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(b));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var c={},d=0,l;for(l in a)c[l]=a[l],d++;return d?c:!1}function h(a,b){if(a.nothingRequired)return!0;
+var c,d,l,e;if(l=a.requiredClasses)for(e=b.classes,c=0;c<l.length;++c)if(d=l[c],"string"==typeof d){if(-1==CKEDITOR.tools.indexOf(e,d))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(e,d))return!1;return p(b.styles,a.requiredStyles)&&p(b.attributes,a.requiredAttributes)}function p(a,b){if(!b)return!0;for(var c=0,d;c<b.length;++c)if(d=b[c],"string"==typeof d){if(!(d in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return!1;return!0}function r(a){if(!a)return{};
+a=a.split(/\s*,\s*/).sort();for(var b={};a.length;)b[a.shift()]="cke-test";return b}function f(a){var b,c,d,l,e={},q=1;for(a=H(a);b=a.match(v);)(c=b[2])?(d=B(c,"styles"),l=B(c,"attrs"),c=B(c,"classes")):d=l=c=null,e["$"+q++]={elements:b[1],classes:c,styles:d,attributes:l},a=a.slice(b[0].length);return e}function B(a,b){var c=a.match(G[b]);return c?H(c[1]):null}function u(a){var b=a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||
+"",1));a.classes||(a.classes=c?c.split(/\s+/):[])}function z(a,b,l,e){var n=0,f;e.toHtml&&(b.name=b.name.replace(E,"$1"));if(e.doCallbacks&&a.elementCallbacks){a:{f=a.elementCallbacks;for(var t=0,g=f.length,v;t<g;++t)if(v=f[t](b)){f=v;break a}f=void 0}if(f)return f}if(e.doTransform&&(f=a._.transformations[b.name])){u(b);for(t=0;t<f.length;++t)q(a,b,f[t]);m(b)}if(e.doFilter){a:{t=b.name;g=a._;a=g.allowedRules.elements[t];f=g.allowedRules.generic;t=g.disallowedRules.elements[t];g=g.disallowedRules.generic;
+v=e.skipRequired;var A={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},k,C;if(a||f){u(b);if(t)for(k=0,C=t.length;k<C;++k)if(!1===c(t[k],b,A)){a=null;break a}if(g)for(k=0,C=g.length;k<C;++k)c(g[k],b,A);if(a)for(k=0,C=a.length;k<C;++k)d(a[k],b,A,v);if(f)for(k=0,C=f.length;k<C;++k)d(f[k],b,A,v);a=A}else a=null}if(!a||!a.valid)return l.push(b),1;C=a.validAttributes;var h=a.validStyles;
+f=a.validClasses;var t=b.attributes,M=b.styles,g=b.classes;v=b.classBackup;var K=b.styleBackup,G,D,p=[],A=[],H=/^data-cke-/;k=!1;delete t.style;delete t["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(G in t)C[G]||(H.test(G)?G==(D=G.replace(/^data-cke-saved-/,""))||C[D]||(delete t[G],k=!0):(delete t[G],k=!0));if(!a.allStyles||a.hadInvalidStyle){for(G in M)a.allStyles||h[G]?p.push(G+":"+M[G]):k=!0;p.length&&(t.style=p.sort().join("; "))}else K&&(t.style=K);if(!a.allClasses||
+a.hadInvalidClass){for(G=0;G<g.length;++G)(a.allClasses||f[g[G]])&&A.push(g[G]);A.length&&(t["class"]=A.sort().join(" "));v&&A.length<v.split(/\s+/).length&&(k=!0)}else v&&(t["class"]=v);k&&(n=1);if(!e.skipFinalValidation&&!x(b))return l.push(b),1}e.toHtml&&(b.name=b.name.replace(I,"cke:$1"));return n}function y(a){var b=[],c;for(c in a)-1<c.indexOf("*")&&b.push(c.replace(/\*/g,".*"));return b.length?new RegExp("^(?:"+b.join("|")+")$"):null}function m(a){var b=a.attributes,c;delete b.style;delete b["class"];
+if(c=CKEDITOR.tools.writeCssText(a.styles,!0))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function x(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function J(a){if(!a)return!1;if(!0===a)return!0;var b=y(a);return function(c){return c in a||b&&c.match(b)}}function w(){return new CKEDITOR.htmlParser.element("br")}function F(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==
+a.name||D.$block[a.name])}function l(a,b,c){var d=a.name;if(D.$empty[d]||!a.children.length)"hr"==d&&"br"==b?a.replaceWith(w()):(a.parent&&c.push({check:"it",el:a.parent}),a.remove());else if(D.$block[d]||"tr"==d)if("br"==b)a.previous&&!F(a.previous)&&(b=w(),b.insertBefore(a)),a.next&&!F(a.next)&&(b=w(),b.insertAfter(a)),a.replaceWithChildren();else{var d=a.children,l;b:{l=D[b];for(var e=0,q=d.length,n;e<q;++e)if(n=d[e],n.type==CKEDITOR.NODE_ELEMENT&&!l[n.name]){l=!1;break b}l=!0}if(l)a.name=b,a.attributes=
+{},c.push({check:"parent-down",el:a});else{l=a.parent;for(var e=l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==l.name,t,f,q=d.length;0<q;)n=d[--q],e&&(n.type==CKEDITOR.NODE_TEXT||n.type==CKEDITOR.NODE_ELEMENT&&D.$inline[n.name])?(t||(t=new CKEDITOR.htmlParser.element(b),t.insertAfter(a),c.push({check:"parent-down",el:t})),t.add(n,0)):(t=null,f=D[l.name]||D.span,n.insertAfter(a),l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n.type!=CKEDITOR.NODE_ELEMENT||f[n.name]||c.push({check:"el-up",el:n}));a.remove()}}else d in
+{style:1,script:1}?a.remove():(a.parent&&c.push({check:"it",el:a.parent}),a.replaceWithChildren())}function q(a,b,c){var d,l;for(d=0;d<c.length;++d)if(l=c[d],!(l.check&&!a.check(l.check,!1)||l.left&&!l.left(b))){l.right(b,K);break}}function n(a,b){var c=b.getDefinition(),d=c.attributes,l=c.styles,e,q,n,t;if(a.name!=c.element)return!1;for(e in d)if("class"==e)for(c=d[e].split(/\s+/),n=a.classes.join("|");t=c.pop();){if(-1==n.indexOf(t))return!1}else if(a.attributes[e]!=d[e])return!1;for(q in l)if(a.styles[q]!=
+l[q])return!1;return!0}function t(a,b){var c,d;"string"==typeof a?c=a:a instanceof CKEDITOR.style?d=a:(c=a[0],d=a[1]);return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function A(a){return function(b){return n(b,a)}}function C(a){return function(b,c){c[a](b)}}var D=CKEDITOR.dtd,M=CKEDITOR.tools.copy,H=CKEDITOR.tools.trim,R=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=
+!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a;this.customConfig=!0;var b=a.config.allowedContent;!0===b?this.disabled=!0:(b||(this.customConfig=!1),this.allow(b,"config",1),this.allow(a.config.extraAllowedContent,"extra",1),this.allow(R[a.enterMode]+" "+R[a.shiftEnterMode],"default",
+1),this.disallow(a.config.disallowedContent))}else this.customConfig=!1,this.allow(a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,d){if(!g(this,b,d))return!1;var l,e;if("string"==typeof b)b=f(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,d);l=b.getDefinition();b={};d=l.attributes;b[l.element]=l={styles:l.styles,requiredStyles:l.styles&&CKEDITOR.tools.objectKeys(l.styles)};d&&(d=
+M(d),l.classes=d["class"]?d["class"].split(/\s+/):null,l.requiredClasses=l.classes,delete d["class"],l.attributes=d,l.requiredAttributes=d&&CKEDITOR.tools.objectKeys(d))}else if(CKEDITOR.tools.isArray(b)){for(l=0;l<b.length;++l)e=this.allow(b[l],c,d);return e}a(this,b,c,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,b,c,d){if(this.disabled)return!1;var e=this,q=[],n=this.editor&&this.editor.config.protectedSource,t,f=!1,g={doFilter:!c,doTransform:!0,doCallbacks:!0,toHtml:b};
+a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;if(!b||"span"!=a.name||!~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))if(t=z(e,a,q,g),t&1)f=!0;else if(t&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var l,m,E;if(n)for(m=0;m<n.length;++m)if((E=d.match(n[m]))&&E[0].length==d.length){c=!0;
+break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);1==d.children.length&&(l=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&z(e,l,c,g);c=!c.length}c||q.push(a)}},null,!0);q.length&&(f=!0);var m;a=[];d=R[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var E;c=q.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;m=a.pop();)if(c=m.el,c.parent)switch(E=D[c.parent.name]||D.span,m.check){case "it":D.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):x(c)||l(c,d,a);break;case "el-up":c.parent.type==
+CKEDITOR.NODE_DOCUMENT_FRAGMENT||E[c.name]||l(c,d,a);break;case "parent-down":c.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||E[c.name]||l(c.parent,d,a)}return f},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(b){if(!g(this,b,!0))return!1;"string"==typeof b&&(b=f(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return!0},
+addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],l;for(b=0;b<a.length&&!l;++b)c=a[b],("string"==typeof c||c instanceof CKEDITOR.style)&&this.check(c)&&(l=c);if(l){for(b=0;b<a.length;++b)d.push(t(a[b],l));this.addTransformations(d)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);
+this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):!0},addTransformations:function(a){var b,c;if(!this.disabled&&a){var d=this._.transformations,l;for(l=0;l<a.length;++l){b=a[l];var e=void 0,q=void 0,n=void 0,t=void 0,f=void 0,g=void 0;c=[];for(q=0;q<b.length;++q)n=b[q],"string"==typeof n?(n=n.split(/\s*:\s*/),t=n[0],f=null,g=n[1]):(t=n.check,f=n.left,g=n.right),e||(e=n,e=e.element?e.element:t?t.match(/^([a-z0-9]+)/i)[0]:
+e.left.getDefinition().element),f instanceof CKEDITOR.style&&(f=A(f)),c.push({check:t==e?null:t,left:f,right:"string"==typeof g?C(g):g});b=e;d[b]||(d[b]=[]);d[b].push(c)}}},check:function(a,b,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return!0;return!1}var l,e;if("string"==typeof a){e=a+"\x3c"+(!1===b?"0":"1")+(c?"1":"0")+"\x3e";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=f(a).$1;l=d.styles;var n=d.classes;d.name=d.elements;
+d.classes=n=n?n.split(/\s*,\s*/):[];d.styles=r(l);d.attributes=r(d.attributes);d.children=[];n.length&&(d.attributes["class"]=n.join(" "));l&&(d.attributes.style=CKEDITOR.tools.writeCssText(d.styles));l=d}else d=a.getDefinition(),l=d.styles,n=d.attributes||{},l&&!CKEDITOR.tools.isEmpty(l)?(l=M(l),n.style=CKEDITOR.tools.writeCssText(l,!0)):l={},l={name:d.element,attributes:n,classes:n["class"]?n["class"].split(/\s+/):[],styles:l,children:[]};var n=CKEDITOR.tools.clone(l),t=[],g;if(!1!==b&&(g=this._.transformations[l.name])){for(d=
+0;d<g.length;++d)q(this,l,g[d]);m(l)}z(this,n,t,{doFilter:!0,doTransform:!1!==b,skipRequired:!c,skipFinalValidation:!c});b=0<t.length?!1:CKEDITOR.tools.objectCompare(l.attributes,n.attributes,!0)?!0:!1;"string"==typeof a&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var l=a.slice(),e;if(this.check(R[c]))return c;for(d||(l=l.reverse());e=l.pop();)if(this.check(e))return b[e];
+return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;delete this.disallowedContent}};var Q={styles:1,attributes:1,classes:1},P={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},v=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,G={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},E=/^cke:(object|embed|param)$/,
+I=/^(object|embed|param)$/,K;K=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];d&&(/^\d+$/.test(d)&&(d+="px"),a.styles[c]=d)}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],l=d&&d.match(/^(\d+)(?:\.\d*)?px$/);
+l?a.attributes[c]=l[1]:"cke-test"==d&&(a.attributes[c]="cke-test")}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b=a.attributes.align;if("left"==b||"right"==b)a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if("left"==b||"right"==b)a.attributes.align=b}delete a.styles["float"]},splitBorderShorthand:function(a){function b(d){a.styles["border-top-width"]=c[d[0]];a.styles["border-right-width"]=
+c[d[1]];a.styles["border-bottom-width"]=c[d[2]];a.styles["border-left-width"]=c[d[3]]}if(a.styles.border){var c=a.styles.border.match(/([\.\d]+\w+)/g)||["0px"];switch(c.length){case 1:a.styles["border-width"]=c[0];break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}a.styles["border-style"]=a.styles["border-style"]||(a.styles.border.match(/(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|initial|inherit)/)||[])[0];a.styles["border-style"]||delete a.styles["border-style"];
+delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function b(d){a.styles["margin-top"]=
+c[d[0]];a.styles["margin-right"]=c[d[1]];a.styles["margin-bottom"]=c[d[2]];a.styles["margin-left"]=c[d[3]]}if(a.styles.margin){var c=a.styles.margin.match(/(\-?[\.\d]+\w+)/g)||["0px"];switch(c.length){case 1:a.styles.margin=c[0];break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}delete a.styles.margin}},matchesStyle:n,transform:function(a,b){if("string"==typeof b)a.name=b;else{var c=b.getDefinition(),d=c.styles,l=c.attributes,e,q,n,t;a.name=c.element;for(e in l)if("class"==
+e)for(c=a.classes.join("|"),n=l[e].split(/\s+/);t=n.pop();)-1==c.indexOf(t)&&a.classes.push(t);else a.attributes[e]=l[e];for(q in d)a.styles[q]=d[q]}}}})();
+(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);a&&(this.currentActive=a);this.hasFocus||this._.locked||((a=CKEDITOR.currentInstance)&&a.focusManager.blur(1),this.hasFocus=!0,(a=this._.editor.container)&&a.addClass("cke_focus"),this._.editor.fire("focus"))},lock:function(){this._.locked=
+1},unlock:function(){delete this._.locked},blur:function(a){function d(){var a=this._.editor;this.hasFocus&&(this.hasFocus=!1,CKEDITOR.env.chrome&&a.editable().isInline()&&a.window.$.getSelection().removeAllRanges(),(a=this._.editor.container)&&a.removeClass("cke_focus"),this._.editor.fire("blur"))}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?d.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;d.call(this)},
+b,this)}},add:function(a,d){var b=a.getCustomData("focusmanager");if(!b||b!=this){b&&b.remove(a);var b="focus",c="blur";d&&(CKEDITOR.env.ie?(b="focusin",c="focusout"):CKEDITOR.event.useCapture=1);var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,e.focus,this);a.on(c,e.blur,this);d&&(CKEDITOR.event.useCapture=0);a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",e)}},remove:function(a){a.removeCustomData("focusmanager");
+var d=a.removeCustomData("focusmanager_handlers");a.removeListener("blur",d.blur);a.removeListener("focus",d.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this};
+(function(){var a,d=function(b){b=b.data;var d=b.getKeystroke(),g=this.keystrokes[d],k=this._.editor;a=!1===k.fire("key",{keyCode:d,domEvent:b});a||(g&&(a=!1!==k.execCommand(g,{from:"keystrokeHandler"})),a||(a=!!this.blockedKeystrokes[d]));a&&b.preventDefault(!0);return!a},b=function(b){a&&(a=!1,b.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",d,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})();
+(function(){CKEDITOR.lang={languages:{af:1,ar:1,az:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,oc:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,d,b){a&&CKEDITOR.lang.languages[a]||
+(a=this.detect(d,a));var c=this;d=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?d():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),d,this)},detect:function(a,d){var b=this.languages;d=d||navigator.userLanguage||navigator.language||a;var c=d.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=c[1],c=c[2];b[e+"-"+c]?e=e+"-"+c:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})();
+CKEDITOR.scriptLoader=function(){var a={},d={};return{load:function(b,c,e,g){var k="string"==typeof b;k&&(b=[b]);e||(e=CKEDITOR);var h=b.length,p=[],r=[],f=function(a){c&&(k?c.call(e,a):c.call(e,p,r))};if(0===h)f(!0);else{var B=function(a,b){(b?p:r).push(a);0>=--h&&(g&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),f(b))},u=function(b,c){a[b]=1;var e=d[b];delete d[b];for(var f=0;f<e.length;f++)e[f](b,c)},z=function(b){if(a[b])B(b,!0);else{var e=d[b]||(d[b]=[]);e.push(B);if(!(1<e.length)){var f=
+new CKEDITOR.dom.element("script");f.setAttributes({type:"text/javascript",src:b});c&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?f.$.onreadystatechange=function(){if("loaded"==f.$.readyState||"complete"==f.$.readyState)f.$.onreadystatechange=null,u(b,!0)}:(f.$.onload=function(){setTimeout(function(){u(b,!0)},0)},f.$.onerror=function(){u(b,!1)}));f.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var y=0;y<h;y++)z(b[y])}},
+queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(d,g){var k=this;c.push({scriptUrl:d,callback:function(){g&&g.apply(this,arguments);c.shift();a.call(k)}});1==c.length&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,d){this.basePath=a;this.fileName=d;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}};
+CKEDITOR.resourceManager.prototype={add:function(a,d){if(this.registered[a])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.');var b=this.registered[a]=d||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var d=this.externals[a];return CKEDITOR.getUrl(d&&d.dir||this.basePath+a+"/")},getFilePath:function(a){var d=this.externals[a];
+return CKEDITOR.getUrl(this.getPath(a)+(d?d.file:this.fileName+".js"))},addExternal:function(a,d,b){a=a.split(",");for(var c=0;c<a.length;c++){var e=a[c];b||(d=d.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[e]={dir:d,file:b||this.fileName+".js"}}},load:function(a,d,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,e=this.registered,g=[],k={},h={},p=0;p<a.length;p++){var r=a[p];if(r)if(c[r]||e[r])h[r]=this.get(r);else{var f=this.getFilePath(r);g.push(f);f in k||(k[f]=
+[]);k[f].push(r)}}CKEDITOR.scriptLoader.load(g,function(a,e){if(e.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+k[e[0]].join(",")+'" was not found at "'+e[0]+'".');for(var f=0;f<a.length;f++)for(var g=k[a[f]],m=0;m<g.length;m++){var x=g[m];h[x]=this.get(x);c[x]=1}d.call(b,h)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");
+CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var d={};return function(b,c,e){var g={},k=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(g,a);var b=[],f;for(f in a){var h=a[f],u=h&&h.requires;if(!d[f]){if(h.icons)for(var z=h.icons.split(","),y=z.length;y--;)CKEDITOR.skin.addIcon(z[y],h.path+"icons/"+(CKEDITOR.env.hidpi&&h.hidpi?"hidpi/":"")+z[y]+".png");d[f]=1}if(u)for(u.split&&(u=u.split(",")),h=0;h<u.length;h++)g[u[h]]||b.push(u[h])}if(b.length)k.call(this,
+b);else{for(f in g)h=g[f],h.onLoad&&!h.onLoad._called&&(!1===h.onLoad()&&delete g[f],h.onLoad._called=1);c&&c.call(e||window,g)}},this)};k.call(this,b)}});CKEDITOR.plugins.setLang=function(a,d,b){var c=this.get(a);a=c.langEntries||(c.langEntries={});c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));-1==CKEDITOR.tools.indexOf(c,d)&&c.push(d);a[d]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this};
+CKEDITOR.ui.prototype={add:function(a,d,b){b.name=a.toLowerCase();var c=this.items[a]={type:d,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var d=this.items[a],b=d&&this._.handlers[d.type],c=d&&d.command&&this.editor.getCommand(d.command),b=b&&b.create.apply(this,d.args);this.instances[a]=b;c&&c.uiItems.push(b);b&&!b.type&&(b.type=d.type);return b},addHandler:function(a,d){this._.handlers[a]=
+d},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui);
+(function(){function a(a,e,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==e){if(!(e instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");if(!f)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!b(e,f))throw Error('The specified element mode is not supported on element: "'+e.getName()+'".');
+this.element=e;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(e.getId()||e.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||d();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",
+c);this.on("selectionChange",function(a){g(this,a.data.path)});this.on("activeFilterChange",function(){g(this,this.elementPath(),!0)});this.on("mode",c);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){"destroyed"!==this.status?h(this,a):CKEDITOR.warn("editor-incorrect-destroy")},0,this)}function d(){do var a="editor"+ ++z;while(CKEDITOR.instances[a]);return a}function b(a,
+b){return b==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):b==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function c(){var a=this.commands,b;for(b in a)e(this,a[b])}function e(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function g(a,b,c){if(b){var d,e,l=a.commands;for(e in l)d=l[e],(c||d.contextSensitive)&&d.refresh(a,b)}}function k(a){var b=a.config.customConfig;if(!b)return!1;var b=
+CKEDITOR.getUrl(b),c=y[b]||(y[b]={});c.fn?(c.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=b&&k(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};k(a)});return!0}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,!0);delete a.config.on}c=a.config;a.readOnly=c.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?
+a.element.is("textarea")?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;
+a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;c.skin&&(CKEDITOR.skinName=c.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);p(a)});b&&null!=b.customConfig&&(a.config.customConfig=b.customConfig);k(a)||a.fireOnce("customConfigLoaded")}function p(a){CKEDITOR.skin.loadPart("editor",function(){r(a)})}function r(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,
+c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title="string"==typeof d||!1===d?d:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");f(a)})}function f(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);B(a)})}function B(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e=
+b.removePlugins;if(d)var l=new RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),c=c.replace(l,""),c=c+(","+d);if(e)var q=new RegExp("(?:^|,)(?:"+e.replace(/\s*,\s*/g,"|")+")(?\x3d,|$)","g"),c=c.replace(q,"");CKEDITOR.env.air&&(c+=",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],l=[],e=[];a.plugins=c;for(var f in c){var g=c[f],k=g.lang,h=null,p=g.requires,r;CKEDITOR.tools.isArray(p)&&(p=p.join(","));if(p&&(r=p.match(q)))for(;p=r.pop();)CKEDITOR.error("editor-plugin-required",
+{plugin:p.replace(",",""),requiredBy:f});k&&!a.lang[f]&&(k.split&&(k=k.split(",")),0<=CKEDITOR.tools.indexOf(k,a.langCode)?h=a.langCode:(h=a.langCode.replace(/-.*/,""),h=h!=a.langCode&&0<=CKEDITOR.tools.indexOf(k,h)?h:0<=CKEDITOR.tools.indexOf(k,"en")?"en":k[0]),g.langEntries&&g.langEntries[h]?(a.lang[f]=g.langEntries[h],h=null):e.push(CKEDITOR.getUrl(g.path+"lang/"+h+".js")));l.push(h);d.push(g)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var q=
+0;q<d.length;q++){var n=d[q];0===e&&l[q]&&n.lang&&n.langEntries&&(a.lang[n.name]=n.langEntries[l[q]]);if(n[c[e]])n[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(q=0;q<a.config.blockedKeystrokes.length;q++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[q]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function u(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();
+this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return!0}return!1}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var z=0,y={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var c=new CKEDITOR.command(this,b);this.mode&&e(this,c);return this.commands[a]=c},_attachToForm:function(){function a(b){c.updateElement();c._.required&&!d.getValue()&&!1===c.fire("required")&&b.data.preventDefault()}
+function b(a){return!!(a&&a.call&&a.apply)}var c=this,d=c.element,e=new CKEDITOR.dom.element(d.$.form);d.is("textarea")&&e&&(e.on("submit",a),b(e.$.submit)&&(e.$.submit=CKEDITOR.tools.override(e.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}})),c.on("destroy",function(){e.removeListener("submit",a)}))},destroy:function(a){this.fire("beforeDestroy");!a&&u.call(this);this.editable(null);this.filter&&(this.filter.destroy(),delete this.filter);delete this.activeFilter;this.status=
+"destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};return c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&
+!1!==this.fire("beforeCommandExec",d)&&(d.returnValue=c.exec(d.commandData),!c.async&&!1!==this.fire("afterCommandExec",d))?d.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;"string"!=typeof b&&(b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"");b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");
+"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=!0,e=b;b&&"object"==typeof b&&(c=b.internal,e=b.callback,d=!b.noSnapshot);!c&&d&&this.fire("saveSnapshot");if(e||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");e&&e.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;
+!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly=a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire("readOnly"))},insertHtml:function(a,b,c){this.fire("insertHtml",{dataValue:a,mode:b,range:c})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var b=this.editable(),c=this.getSelection(),c=c&&c.getRanges();if(!b||!c||0===c.length)return null;
+for(var d=new CKEDITOR.dom.documentFragment,e,l,q,n=0;n<c.length;n++){var f=c[n],g=f.startContainer;g.getName&&"tr"==g.getName()?(e||(e=g.getAscendant("table").clone(),e.append(g.getAscendant("tbody").clone()),d.append(e),e=e.findOne("tbody")),l&&l.equals(g)||(l=g,q=g.clone(),e.append(q)),q.append(f.cloneContents())):d.append(f.cloneContents())}b=e?d:b.getHtmlFromRange(c[0]);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var c=this.editable(),d=this.getSelection().getRanges();if(!c||0===
+d.length)return null;d=d[0];c=c.extractHtmlFromRange(d,b);b||this.getSelection().selectRanges([d]);return a?c.getHtml():c},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==this.status&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return u.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,
+0)],c,d,e=b.length;e--;)c=b[e],d=0,CKEDITOR.tools.isArray(c)&&(d=c[1],c=c[0]),d?a[c]=d:delete a[c]},getCommandKeystroke:function(a){var b=a.name,c=this.keystrokeHandler.keystrokes,d;if(a.fakeKeystroke)return a.fakeKeystroke;for(d in c)if(c.hasOwnProperty(d)&&c[d]==b)return d;return null},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire("activeFilterChange"),a===this.filter?this.setActiveEnterMode(null,
+null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b)this.activeEnterMode=a,this.activeShiftEnterMode=b,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)}})})();CKEDITOR.ELEMENT_MODE_NONE=0;
+CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}};
+(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,g=0,k;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>g)if(g=b.substring(g,e),k)k.push(g);else this.onText(g);
+g=this._.htmlPartsRegex.lastIndex;if(e=c[1])if(e=e.toLowerCase(),k&&CKEDITOR.dtd.$cdata[e]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(e);continue}if(k)k.push(c[0]);else if(e=c[3]){if(e=e.toLowerCase(),!/="/.test(e)){var h={},p,r=c[4];c=!!c[5];if(r)for(;p=a.exec(r);){var f=p[1].toLowerCase();p=p[2]||p[3]||p[4]||"";h[f]=!p&&d[f]?f:CKEDITOR.tools.htmlDecodeAttr(p)}this.onTagOpen(e,h,c);!k&&CKEDITOR.dtd.$cdata[e]&&(k=[])}}else if(e=c[2])this.onComment(e)}if(b.length>g)this.onText(b.substring(g,
+b.length))}}})();
+CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("\x3c",a)},openTagClose:function(a,d){d?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(a,d){"string"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'\x3d"',d,'"')},closeTag:function(a){this._.output.push("\x3c/",a,"\x3e")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("\x3c!--",a,
+"--\x3e")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict";
+(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,d=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(d,1);this.parent=null},replaceWith:function(a){var d=this.parent.children,b=CKEDITOR.tools.indexOf(d,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);d[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var d=a.parent.children,
+b=CKEDITOR.tools.indexOf(d,a),c=a.next;d.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var d=a.parent.children,b=CKEDITOR.tools.indexOf(d,a);d.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var d="function"==typeof a?a:"string"==typeof a?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&&
+b.type==CKEDITOR.NODE_ELEMENT;){if(d(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:!1}};
+CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,d){var b=this.value;if(!(b=a.onComment(d,b,this)))return this.remove(),!1;if("string"!=typeof b)return this.replaceWith(b),!1;this.value=b;return!0},writeHtml:function(a,d){d&&this.filter(d);a.comment(this.value)}});"use strict";
+(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict";
+(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}};
+(function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=
+function(g,k,h){function p(a){var b;if(0<x.length)for(var c=0;c<x.length;c++){var d=x[c],l=d.name,e=CKEDITOR.dtd[l],f=w.name&&CKEDITOR.dtd[w.name];f&&!f[l]||a&&e&&!e[a]&&CKEDITOR.dtd[a]?l==w.name&&(B(w,w.parent,1),c--):(b||(r(),b=1),d=d.clone(),d.parent=w,w=d,x.splice(c,1),c--)}}function r(){for(;J.length;)B(J.shift(),w)}function f(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var b=a.children.length,c=a.children[b-1],d;c&&c.type==CKEDITOR.NODE_TEXT&&((d=CKEDITOR.tools.rtrim(c.value))?
+c.value=d:a.children.length=b-1)}}function B(b,c,d){c=c||w||m;var e=w;void 0===b.previous&&(u(c,b)&&(w=c,y.onTagOpen(h,{}),b.returnPoint=c=w),f(b),a(b)&&!b.children.length||c.add(b),"pre"==b.name&&(l=!1),"textarea"==b.name&&(F=!1));b.returnPoint?(w=b.returnPoint,delete b.returnPoint):w=d?c:e}function u(a,b){if((a==m||"body"==a.name)&&h&&(!a.name||CKEDITOR.dtd[a.name][h])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&
+!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function z(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||"dt"==a&&"dd"==b||"dd"==a&&"dt"==b:!1}var y=new CKEDITOR.htmlParser,m=k instanceof CKEDITOR.htmlParser.element?k:"string"==typeof k?new CKEDITOR.htmlParser.element(k):new CKEDITOR.htmlParser.fragment,x=[],J=[],w=m,F="textarea"==m.name,l="pre"==m.name;y.onTagOpen=function(e,n,f,g){n=new CKEDITOR.htmlParser.element(e,n);n.isUnknown&&f&&(n.isEmpty=!0);n.isOptionalClose=g;
+if(a(n))x.push(n);else{if("pre"==e)l=!0;else{if("br"==e&&l){w.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==e&&(F=!0)}if("br"==e)J.push(n);else{for(;!(g=(f=w.name)?CKEDITOR.dtd[f]||(w._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c,n.isUnknown||w.isUnknown||g[e]);)if(w.isOptionalClose)y.onTagClose(f);else if(e in b&&f in b)f=w.children,(f=f[f.length-1])&&"li"==f.name||B(f=new CKEDITOR.htmlParser.element("li"),w),!n.returnPoint&&(n.returnPoint=w),w=f;else if(e in CKEDITOR.dtd.$listItem&&
+!z(e,f))y.onTagOpen("li"==e?"ul":"dl",{},0,1);else if(f in d&&!z(e,f))!n.returnPoint&&(n.returnPoint=w),w=w.parent;else if(f in CKEDITOR.dtd.$inline&&x.unshift(w),w.parent)B(w,w.parent,1);else{n.isOrphan=1;break}p(e);r();n.parent=w;n.isEmpty?B(n):w=n}}};y.onTagClose=function(a){for(var b=x.length-1;0<=b;b--)if(a==x[b].name){x.splice(b,1);return}for(var c=[],d=[],l=w;l!=m&&l.name!=a;)l._.isBlockLike||d.unshift(l),c.push(l),l=l.returnPoint||l.parent;if(l!=m){for(b=0;b<c.length;b++){var e=c[b];B(e,e.parent)}w=
+l;l._.isBlockLike&&r();B(l,l.parent);l==w&&(w=w.parent);x=x.concat(d)}"body"==a&&(h=!1)};y.onText=function(a){if(!(w._.hasInlineStarted&&!J.length||l||F)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var b=w.name,f=b?CKEDITOR.dtd[b]||(w._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!F&&!f["#"]&&b in d)y.onTagOpen(e[b]||""),y.onText(a);else{r();p();l||F||(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a);if(u(w,a))this.onTagOpen(h,{},0,1);w.add(a)}};y.onCDATA=
+function(a){w.add(new CKEDITOR.htmlParser.cdata(a))};y.onComment=function(a){r();p();w.add(new CKEDITOR.htmlParser.comment(a))};y.parse(g);for(r();w!=m;)B(w,w.parent,1);f(m);return m};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=0<b?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT&&(c.value=CKEDITOR.tools.rtrim(c.value),0===c.value.length)){this.children.pop();this.add(a);return}c.next=
+a}a.previous=c;a.parent=this;this.children.splice(b,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,!1,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)!1===this.children[b].filter(a,
+c)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var d=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(d,this);b&&this.filterChildren(b,!1,d);b=0;c=this.children;for(d=c.length;b<d;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!(c||b&&this.type!=b))var d=a(this);if(!1!==d){c=this.children;for(var e=0;e<c.length;e++)d=c[e],d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,b):b&&d.type!=b||a(d)}},getFilterContext:function(a){return a||
+{}}}})();"use strict";
+(function(){function a(){this.rules=[]}function d(b,c,d,g){var k,h;for(k in c)(h=b[k])||(h=b[k]=new a),h.add(c[k],d,g)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var e;"number"==typeof c?e=c:c&&"priority"in c&&(e=
+c.priority);"number"!=typeof e&&(e=10);"object"!=typeof c&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,e,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,e,c);a.elements&&d(this.elementsRules,a.elements,e,c);a.attributes&&d(this.attributesRules,a.attributes,e,c);a.text&&this.textRules.add(a.text,e,c);a.comment&&this.commentRules.add(a.comment,e,c);a.root&&this.rootRules.add(a.root,e,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a,
+c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],g,k=0;3>k;k++)if(g=d[k]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c},
+onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,g){return(d=this.attributesRules[d])?d.exec(a,g,c,this):g}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a,
+c,d){for(var g=[this.findIndex(c),0],k=0,h=a.length;k<h;k++)g.push({value:a[k],priority:c,options:d});this.rules.splice.apply(this.rules,g)},findIndex:function(a){for(var c=this.rules,d=c.length-1;0<=d&&a<c[d].priority;)d--;return d+1},exec:function(a,c){var d=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,g=Array.prototype.slice.call(arguments,1),k=this.rules,h=k.length,p,r,f,B;for(B=0;B<h;B++)if(d&&(p=c.type,r=c.name),f=k[B],!(a.nonEditable&&!f.options.applyToAll||
+a.nestedEditable&&f.options.excludeNestedEditable)){f=f.value.apply(null,g);if(!1===f||d&&f&&(f.name!=r||f.type!=p))return f;null!=f&&(g[0]=c=f)}return c},execOnName:function(a,c){for(var d=0,g=this.rules,k=g.length,h;c&&d<k;d++)h=g[d],a.nonEditable&&!h.options.applyToAll||a.nestedEditable&&h.options.excludeNestedEditable||(c=c.replace(h.value[0],h.value[1]));return c}}})();
+(function(){function a(a,d){function f(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function n(a,d){return function(l){if(l.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],n=b(l),t,E;if(n)for(q(n,1)&&e.push(n);n;)g(n)&&(t=c(n))&&q(t)&&((E=c(t))&&!g(E)?e.push(t):(f(v).insertAfter(t),t.remove())),n=n.previous;for(n=0;n<e.length;n++)e[n].remove();if(e=!a||!1!==("function"==typeof d?d(l):d))v||CKEDITOR.env.needsBrFiller||
+l.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?v||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||l.name in CKEDITOR.dtd.tr||l.name in CKEDITOR.dtd.$listItem)?(e=b(l),e=!e||"form"==l.name&&"input"==e.name):e=!1:e=!1;e&&l.add(f(a))}}}function q(a,b){if((!v||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var c;return a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(x))&&(c.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,c.index))).insertBefore(a),
+a.value=c[0]),!CKEDITOR.env.needsBrFiller&&v&&(!b||a.parent.name in h)||!v&&((c=a.previous)&&"br"==c.name||!c||g(c)))?!0:!1}var t={elements:{}},v="html"==d,h=CKEDITOR.tools.extend({},l),A;for(A in h)"#"in w[A]||delete h[A];for(A in h)t.elements[A]=n(v,a.config.fillEmptyBlocks);t.root=n(v,!1);t.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var d=b.attributes;if("data-cke-bogus"in d||"data-cke-eol"in d)delete d["data-cke-bogus"];else{for(d=b.next;d&&e(d);)d=
+d.next;var l=c(b);!d&&g(b.parent)?k(b.parent,f(a)):g(d)&&l&&!g(l)&&f(a).insertBefore(d)}}}}(v);return t}function d(a,b){return a!=CKEDITOR.ENTER_BR&&!1!==b?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function g(a){return a&&
+(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function k(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;c&&(c.next=b,b.previous=c)}function h(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function p(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function r(a){return a.replace(C,
+function(a,b,c){return"\x3c"+b+c.replace(D,function(a,b){return M.test(b)&&-1==c.indexOf("data-cke-saved-"+b)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function f(a,b){return a.replace(b,function(a,b,c){0===a.indexOf("\x3ctextarea")&&(a=b+z(c).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function B(a){return a.replace(Q,function(a,b){return decodeURIComponent(b)})}function u(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
+function(a){return"\x3c!--"+J+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function z(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)})}function y(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function m(a,b){var c=[],d=b.config.protectedSource,l=b._.dataStore||(b._.dataStore=
+{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var f=0;f<d.length;f++)a=a.replace(d[f],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(c.push(a)-1)+"--\x3e"});a=a.replace(e,function(a,b,d){return"\x3c!--"+J+(b?"{C}":
+"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,b){l[l.id]=decodeURIComponent(b);return"{cke_protected_"+l.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,l){return"\x3c"+c+d+"\x3e"+y(z(l),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c,
+l,e=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=l=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(q);c.addRules(n,{applyToAll:!0});c.addRules(a(b,"data"),{applyToAll:!0});l.addRules(t);l.addRules(A,{applyToAll:!0});l.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,l,c=m(c,b),c=f(c,R),c=r(c),c=f(c,H),c=c.replace(P,"$1cke:$2"),c=c.replace(G,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),
+c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");l=a.context||b.editable().getName();var e;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==l&&(l="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",e=1);l=b.document.createElement(l);l.setHtml("a"+c);c=l.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");e&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(v,"$1$2");c=B(c);c=z(c);l=!1===a.fixForBody?!1:
+d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,l);l&&(e=c,!e.children.length&&CKEDITOR.dtd[e.name][l]&&(l=new CKEDITOR.htmlParser.element(l),e.add(l)));a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(e.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,
+c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=u(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(e.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,
+!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=e.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=z(c);c=y(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var l=this.editor,e,f,n,q;b&&"object"==typeof b?(e=b.context,c=b.fixForBody,d=b.dontFilter,f=b.filter,n=b.enterMode,q=b.protectedWhitespaces):e=b;e||null===e||(e=l.editable().getName());return l.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,
+filter:f||l.filter,enterMode:n||l.enterMode,protectedWhitespaces:q}).dataValue},toDataFormat:function(a,b){var c,d,l;b&&(c=b.context,d=b.filter,l=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:l||this.editor.enterMode}).dataValue}};var x=/(?:&nbsp;|\xa0)$/,J="{cke_protected}",w=CKEDITOR.dtd,F="caption colgroup col thead tfoot tbody".split(" "),l=CKEDITOR.tools.extend({},w.$blockLimit,
+w.$block),q={elements:{input:h,textarea:h}},n={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},t={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},A={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,
+""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,l=0;l<c.length;l++)d="data-cke-saved-"+c[l],d in b&&delete b[c[l]]}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type&&(c=CKEDITOR.tools.indexOf(F,a.name),d=CKEDITOR.tools.indexOf(F,b.name));-1<c&&-1<d&&c!=d||(c=a.parent?a.getIndex():-1,d=b.parent?b.getIndex():-1);return c>d?
+1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&k(a,b=new CKEDITOR.htmlParser.text);
+b.value=a.attributes["data-cke-title"]||""},input:p,textarea:p},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(A.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var C=/<(a|area|img|input|source)\b([^>]*)>/gi,D=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,M=/^(href|src|name)$/i,H=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,
+R=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,Q=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,P=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,v=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,G=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict";
+CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||"br"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}};
+CKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){"font-family"==c&&(e=e.replace(/["']/g,""));d[c.toLowerCase()]=e});return{rules:d,populate:function(a){var c=this.toString();c&&(a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c)},toString:function(){var a=[],c;
+for(c in d)d[c]&&a.push(c,":",d[c],";");return a.join("")}}};
+(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof a?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,k,h;b=d.getFilterContext(b);if(b.off)return!0;
+if(!d.parent)a.onRoot(b,d);for(;;){k=d.name;if(!(h=a.onElementName(b,k)))return this.remove(),!1;d.name=h;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==k)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}k=d.attributes;var p,r;for(p in k){for(h=k[p];;)if(r=a.onAttributeName(b,p))if(r!=p)delete k[p],p=r;else break;else{delete k[p];break}r&&(!1===(h=a.onAttribute(b,d,r,h))?delete k[r]:
+k[r]=h)}d.isEmpty||this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,k=[],h=this.attributes,p,r;a.openTag(g,h);for(p in h)k.push([p,h[p]]);a.sortAttributes&&k.sort(d);p=0;for(r=k.length;p<r;p++)h=k[p],a.attribute(h[0],h[1]);a.openTagClose(g,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(g)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a=this.children,b=a.length;b;)a[--b].insertAfter(this);
+this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;"function"!=typeof b&&(b=a(b));for(var d=0,g=this.children.length;d<g;++d)if(b(this.children[d]))return this.children[d];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children;for(var b=0,d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=
+new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),k=0;k<b.length;++k)b[k].parent=d;d.children=b;b[0]&&(b[0].previous=null);0<a&&(this.children[a-1].next=null);this.parent.add(d,this.getIndex()+1);return d},find:function(a,b){void 0===b&&(b=!1);var d=[],k;for(k=0;k<this.children.length;k++){var h=this.children[k];"function"==typeof a&&a(h)?d.push(h):"string"==typeof a&&h.name===a&&d.push(h);
+b&&h.find&&(d=d.concat(h.find(a,b)))}return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+a}},removeClass:function(a){var b=this.attributes["class"];b&&((b=CKEDITOR.tools.trim(b.replace(new RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"])},hasClass:function(a){var b=this.attributes["class"];return b?(new RegExp("(?:^|\\s)"+a+"(?\x3d\\s|$)")).test(b):!1},getFilterContext:function(a){var b=
+[];a||(a={off:!1,nonEditable:!1,nestedEditable:!1});a.off||"off"!=this.attributes["data-cke-processor"]||b.push("off",!0);a.nonEditable||"false"!=this.attributes.contenteditable?a.nonEditable&&!a.nestedEditable&&"true"==this.attributes.contenteditable&&b.push("nestedEditable",!0):b.push("nonEditable",!0);if(b.length){a=CKEDITOR.tools.copy(a);for(var d=0;d<b.length;d+=2)a[b[d]]=b[d+1]}return a}},!0)})();
+(function(){var a={},d=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,e=/\r/g;CKEDITOR.template=function(g){if(a[g])this.output=a[g];else{var k=g.replace(b,"\\$1").replace(c,"\\n").replace(e,"\\r").replace(d,function(a,b){return"',data['"+b+"']\x3d\x3dundefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[g]=Function("data","buffer","return buffer?buffer.push('"+k+"'):['"+k+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);
+CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){CKEDITOR.currentInstance!=a&&(CKEDITOR.currentInstance=a,CKEDITOR.fire("currentInstance"))});a.on("blur",function(){CKEDITOR.currentInstance==a&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]};
+(function(){var a={};CKEDITOR.addTemplate=function(d,b){var c=a[d];if(c)return c;c={name:d,source:b};CKEDITOR.fire("template",c);return a[d]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(d){return a[d]}})();(function(){var a=[];CKEDITOR.addCss=function(d){a.push(d)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;
+CKEDITOR.TRISTATE_DISABLED=0;
+(function(){CKEDITOR.inline=function(a,d){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(d,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;c?(b.setData(c.getValue(),null,!0),a=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+!!b.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+c.getValue()+"\x3c/div\x3e",CKEDITOR.document),
+a.insertAfter(c),c.hide(),c.$.form&&b._attachToForm()):b.setData(a.getHtml(),null,!0);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.ui.contentsElement=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){c&&(b.container.clearCustomData(),b.container.remove(),c.show());b.element.clearCustomData();delete b.element});
+return b};CKEDITOR.inlineAll=function(){var a,d,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),e=0,g=c.count();e<g;e++)a=c.getItem(e),"true"==a.getAttribute("contenteditable")&&(d={element:a,config:{}},!1!==CKEDITOR.fire("inline",d)&&CKEDITOR.inline(a,d.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor";
+(function(){function a(a,e,g,k){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var h=new CKEDITOR.editor(e,a,k);k==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.setStyle("visibility","hidden"),h._.required=a.hasAttribute("required"),a.removeAttribute("required"));g&&h.setData(g,null,!0);h.on("loaded",function(){b(h);k==CKEDITOR.ELEMENT_MODE_REPLACE&&h.config.autoUpdateElement&&
+a.$.form&&h._attachToForm();h.setMode(h.config.startupMode,function(){h.resetDirty();h.status="ready";h.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,h)})});h.on("destroy",d);return h}function d(){var a=this.container,b=this.element;a&&(a.clearCustomData(),a.remove());b&&(b.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.show(),this._.required&&b.setAttribute("required","required")),delete this.element)}function b(a){var b=a.name,d=a.element,k=a.elementMode,h=
+a.fire("uiSpace",{space:"top",html:""}).html,p=a.fire("uiSpace",{space:"bottom",html:""}).html,r=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'"  dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':"")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'),
+b=CKEDITOR.dom.element.createFromHtml(r.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:h?'\x3cspan id\x3d"'+a.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+h+"\x3c/span\x3e":"",contentId:a.ui.spaceId("contents"),bottomHtml:p?'\x3cspan id\x3d"'+a.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+p+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));k==CKEDITOR.ELEMENT_MODE_REPLACE?
+(d.hide(),b.insertAfter(d)):d.append(b);a.container=b;a.ui.contentsElement=a.ui.space("contents");h&&a.ui.space("top").unselectable();p&&a.ui.space("bottom").unselectable();d=a.config.width;k=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));k&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(k));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,d){return a(b,d,null,CKEDITOR.ELEMENT_MODE_REPLACE)};
+CKEDITOR.appendTo=function(b,d,g){return a(b,d,g,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,k=a[b];if(k.name||k.id){if("string"==typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test(k.className))continue}else if("function"==typeof arguments[0]&&(d={},!1===arguments[0](k,d)))continue;this.replace(k,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes=
+{}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,k=this._.modes;if(a!=d.mode&&k&&k[a]){d.fire("beforeSetMode",a);if(d.mode){var h=d.checkDirty(),k=d._.previousModeData,p,r=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=p=d.getData(1);"source"==d.mode&&k==p&&(d.fire("lockSnapshot",{forceUpdate:!0}),r=1);d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;void 0!==h&&!h&&
+d.resetDirty();r?d.fire("unlockSnapshot"):"wysiwyg"==a&&d.fire("saveSnapshot");setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,k){var h=this.container,p=this.ui.space("contents"),r=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;k=k?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):h;k.setSize("width",a,!0);r&&(r.style.width="1%");var f=(k.$.offsetHeight||0)-(p.$.clientHeight||
+0),h=Math.max(b-(d?0:f),0);b=d?b+f:b;p.setStyle("height",h+"px");r&&(r.style.width="100%");this.fire("resize",{outerHeight:b,contentsHeight:h,outerWidth:a||k.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg";
+(function(){function a(a){var b=a.editor,e=a.data.path,f=e.blockLimit,g=a.data.selection,h=g.getRanges()[0],D;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(g=d(g,e))g.appendBogus(),D=CKEDITOR.env.ie;k(b,e.block,f)&&h.collapsed&&!h.getCommonAncestor().isReadOnly()&&(e=h.clone(),e.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),f=new CKEDITOR.dom.walker(e),f.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!f.checkForward()||e.checkStartOfBlock()&&e.checkEndOfBlock())&&
+(b=h.fixBlock(!0,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||(b=b.getFirst(c))&&b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/)&&b.remove(),D=1,a.cancel());D&&h.select()}function d(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(!(!d||!d.isBlockBoundary()||e&&e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()||d.is("pre")||d.getBogus()))return d}function b(a){var b=a.data.getTarget();b.is("input")&&
+(b=b.getAttribute("type"),"submit"!=b&&"reset"!=b||a.data.preventDefault())}function c(a){return f(a)&&B(a)}function e(a,b){return function(c){var d=c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget;(d=d&&d.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(d):null)&&(b.equals(d)||b.contains(d))||a.call(this,c)}}function g(a){function b(a){return function(b,l){l&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(f)&&(d=b);if(!(l||!c(b)||a&&z(b)))return!1}}var d,e=a.getRanges()[0];a=a.root;
+var f={table:1,ul:1,ol:1,dl:1};if(e.startPath().contains(f)){var g=e.clone();g.collapse(1);g.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(g);a.guard=b();a.checkBackward();if(d)return g=e.clone(),g.collapse(),g.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(g),a.guard=b(!0),d=!1,a.checkForward(),d}return null}function k(a,b,c){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(c)&&!b||b&&"true"==b.getAttribute("contenteditable"))}
+function h(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function p(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function r(a,b,c){var d=a.getCommonAncestor(b);for(b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&1==a.getChildCount();)b=a;b.remove()}var f,B,u,z,y,m,x,J,w,F;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||
+b);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document)?
+this.$.focus():this.$.setActive()}catch(b){if(!CKEDITOR.env.ie)throw b;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(a)&&(a="focus"==a?"focusin":"focusout",b=e(b,this),c[0]=a,c[1]=b);return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=
+Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)a.hasOwnProperty(c)&&(b=a[c],null!==b?this.setAttribute(c,b):this.removeAttribute(c))},attachClass:function(a){var b=this.getCustomData("classes");this.hasClass(a)||(!b&&(b=[]),b.push(a),this.setCustomData("classes",b),this.addClass(a))},changeAttr:function(a,
+b){var c=this.getAttribute(a);b!==c&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=c),this.setAttribute(a,b))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),"text")},transformPlainTextToHtml:function(a){var b=this.editor.getSelection().getStartElement().hasAscendant("pre",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,b)},insertHtml:function(a,b,c){var d=
+this.editor;d.focus();d.fire("saveSnapshot");c||(c=d.getSelection().getRanges()[0]);m(this,b||"html",a,c);c.select();p(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,b,c){m(this,c||"html",a,b);this.editor.fire("afterInsertHtml",{intoRange:b})},insertElement:function(a,b){var d=this.editor;d.focus();d.fire("saveSnapshot");var e=d.activeEnterMode,d=d.getSelection(),f=a.getName(),f=CKEDITOR.dtd.$block[f];b||(b=d.getRanges()[0]);this.insertElementIntoRange(a,b)&&(b.moveToPosition(a,
+CKEDITOR.POSITION_AFTER_END),f&&((f=a.getNext(function(a){return c(a)&&!z(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)?f.getDtd()["#"]?b.moveToElementEditStart(f):b.moveToElementEditEnd(a):f||e==CKEDITOR.ENTER_BR||(f=b.fixBlock(!0,e==CKEDITOR.ENTER_DIV?"div":"p"),b.moveToElementEditStart(f))));d.selectRanges([b]);p(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];
+if(b.checkReadOnly())return!1;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?x(b):b.startContainer.is(CKEDITOR.dtd.$list)&&J(b));var g,k;if(f)for(;(g=b.getCommonAncestor(0,1))&&(k=CKEDITOR.dtd[g.getName()])&&(!k||!k[e]);)g.getName()in CKEDITOR.dtd.span?b.splitElement(g):b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(g),b.collapse(!0),g.remove()):b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());
+b.insertNode(a);return!0},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;
+delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),l;a:if(d.anchorNode&&d.anchorNode==c.$)l=!0;else{if(CKEDITOR.env.webkit&&(l=c.getDocument().getActive())&&l.equals(c)&&!d.anchorNode){l=!0;break a}l=void 0}l&&(l=new CKEDITOR.dom.range(c),l.moveToElementEditStart(c),b=b.createRange(),b.setStart(l.startContainer.$,l.startOffset),b.collapse(!0),d.removeAllRanges(),d.addRange(b))}
+function b(){var a=c.getDocument().$,d=a.selection,l=c.getDocument().getActive();"None"==d.type&&l.equals(c)&&(d=new CKEDITOR.dom.range(c),a=a.body.createTextRange(),d.moveToElementEditStart(c),d=d.startContainer,d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()),a.moveToElementText(d.$),a.collapse(!0),a.select())}var c=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},
+null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};w.eol.detect(a,this);w.bogus.exclude(a);w.cell.shrink(a);a.fragment=a.range.cloneContents();w.tree.rebuild(a,this);w.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=F,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE,
+1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize();
+c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!B(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),u(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();
+return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(y,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,
+"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&"Control"==b.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):
+a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,
+null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var d=function(){var b=a.editable();null!=a._.previousScrollTop&&b.getDocument().equals(CKEDITOR.document)&&(b.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll",d))};this.on("scroll",d)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=
+this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var t=a.config.contentsLangDirection;this.getDirection(1)!=t&&this.changeAttr("dir",t);var k=CKEDITOR.getCss();if(k){var t=e.getHead(),h=t.getCustomData("stylesheet");h?k!=h.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?h.$.styleSheet.cssText=k:h.setText(k)):(k=e.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),t.setCustomData("stylesheet",
+k),k.data("cke-temp",1))}t=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",t+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var D={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;if(c in D){b=a.getSelection();var e,
+n=b.getRanges()[0],q=n.startPath(),t,k,h,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=g(b))?(a.fire("saveSnapshot"),n.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),n.select(),a.fire("saveSnapshot"),d=1):n.collapsed&&((t=q.block)&&(h=t[c?"getPrevious":"getNext"](f))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("table")&&n[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),n[c?"checkEndOfBlock":"checkStartOfBlock"]()&&t.remove(),n["moveToElementEdit"+
+(c?"End":"Start")](h),n.select(),a.fire("saveSnapshot"),d=1):q.blockLimit&&q.blockLimit.is("td")&&(k=q.blockLimit.getAscendant("table"))&&n.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(h=k[c?"getPrevious":"getNext"](f))?(a.fire("saveSnapshot"),n["moveToElementEdit"+(c?"End":"Start")](h),n.checkStartOfBlock()&&n.checkEndOfBlock()?h.remove():n.select(),a.fire("saveSnapshot"),d=1):(k=q.contains(["td","th","caption"]))&&n.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d});
+a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in D&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown",
+function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getOuterHtml().replace(y,""))){var c=a.createRange();
+c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;b=b.data.domEvent.getKey();if(b in D){var c=8==b,d=a.getSelection().getRanges()[0];b=d.startPath();if(d.collapsed)a:{var e=
+b.block;if(e&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(e,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(c?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))b=void 0;else{a.fire("saveSnapshot");var n;(n=(c?d:e).getBogus())&&n.remove();n=a.getSelection();f=n.createBookmarks();(c?e:d).moveChildren(c?
+d:e,!1);b.lastElement.mergeSiblings();r(e,d,!c);n.selectBookmarks(f);b=!0}}else b=!1}else c=d,n=b.block,d=c.endPath().block,n&&d&&!n.equals(d)?(a.fire("saveSnapshot"),(e=n.getBogus())&&e.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(n,!1),b.lastElement.mergeSiblings(),r(n,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(),c.select(),b=!0):b=!1;if(!b)return;a.getSelection().scrollIntoView();
+a.fire("saveSnapshot");return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");--c?a.setCustomData("stylesheet_ref",c):(a.removeCustomData("stylesheet_ref"),b.removeCustomData("stylesheet").remove())}}this.editor.fire("contentDomUnload");
+delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")?
+"true":"1"),a.setAttribute("contentEditable",!1))});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),a(b),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;
+if(d&&(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");f=CKEDITOR.dom.walker.whitespaces(!0);B=CKEDITOR.dom.walker.bookmark(!1,!0);u=CKEDITOR.dom.walker.empty();
+z=CKEDITOR.dom.walker.bogus();y=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;m=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,n,t,g=[],k=d.range.startContainer;e=d.range.startPath();for(var k=p[k.getName()],h=0,C=c.getChildren(),A=C.count(),D=-1,m=-1,r=0,H=e.contains(p.$list);h<A;++h)e=C.getItem(h),a(e)?(n=e.getName(),H&&n in CKEDITOR.dtd.$list?g=g.concat(b(e,d)):(t=!!k[n],
+"br"!=n||!e.data("cke-eol")||h&&h!=A-1||(r=(f=h?g[h-1].node:C.getItem(h+1))&&(!a(f)||!f.is("br")),f=f&&a(f)&&p.$block[f.getName()]),-1!=D||t||(D=h),t||(m=h),g.push({isElement:1,isLineBreak:r,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:n,allowed:t}),f=r=0)):g.push({isElement:0,node:e,allowed:1});-1<D&&(g[D].firstNotAllowed=1);-1<m&&(g[m].lastNotAllowed=1);return g}function d(b,c){var e=[],f=b.getChildren(),q=f.count(),g,t=0,k=p[c],h=!b.is(p.$inline)||b.is("br");for(h&&e.push(" ");t<q;t++)g=
+f.getItem(t),a(g)&&!g.is(k)?e=e.concat(d(g,c)):e.push(g);h&&e.push(" ");return e}function e(b){return a(b.startContainer)&&b.startContainer.getChild(b.startOffset-1)}function f(b){return b&&a(b)&&(b.is(p.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function g(b,c,d,e){var f=b.clone(),n,q;f.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);(n=(new CKEDITOR.dom.walker(f)).next())&&a(n)&&m[n.getName()]&&(q=n.getPrevious())&&a(q)&&!q.getParent().equals(b.startContainer)&&d.contains(q)&&e.contains(n)&&n.isIdentical(q)&&
+(n.moveChildren(q),n.remove(),g(b,c,d,e))}function D(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br"))return b.remove(),1}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);f&&d(f,b[0])&&(c.setEnd(c.endContainer,c.endOffset-1),c.collapse())}var p=CKEDITOR.dtd,m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},r={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},x=CKEDITOR.tools.extend({},
+p.$inline);delete x.br;return function(m,v,G,E){var I=m.editor,K=!1;"unfiltered_html"==v&&(v="html",K=!0);if(!E.checkReadOnly()){var L=(new CKEDITOR.dom.elementPath(E.startContainer,E.root)).blockLimit||E.root;m={type:v,dontFilter:K,editable:m,editor:I,range:E,blockLimit:L,mergeCandidates:[],zombies:[]};v=m.range;E=m.mergeCandidates;var H,u;"text"==m.type&&v.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(H=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",v.document),v.insertNode(H),
+v.setStartAfter(H));K=new CKEDITOR.dom.elementPath(v.startContainer);m.endPath=L=new CKEDITOR.dom.elementPath(v.endContainer);if(!v.collapsed){var I=L.block||L.blockLimit,B=v.getCommonAncestor();I&&!I.equals(B)&&!I.contains(B)&&v.checkEndOfBlock()&&m.zombies.push(I);v.deleteContents()}for(;(u=e(v))&&a(u)&&u.isBlockBoundary()&&K.contains(u);)v.moveToPosition(u,CKEDITOR.POSITION_BEFORE_END);g(v,m.blockLimit,K,L);H&&(v.setEndBefore(H),v.collapse(),H.remove());H=v.startPath();if(I=H.contains(f,!1,1))v.splitElement(I),
+m.inlineStylesRoot=I,m.inlineStylesPeak=H.lastElement;H=v.createBookmark();(I=H.startNode.getPrevious(c))&&a(I)&&f(I)&&E.push(I);(I=H.startNode.getNext(c))&&a(I)&&f(I)&&E.push(I);for(I=H.startNode;(I=I.getParent())&&f(I);)E.push(I);v.moveToBookmark(H);if(H=G){H=m.range;if("text"==m.type&&m.inlineStylesRoot){u=m.inlineStylesPeak;v=u.getDocument().createText("{cke-peak}");for(E=m.inlineStylesRoot.getParent();!u.equals(E);)v=v.appendTo(u.clone()),u=u.getParent();G=v.getOuterHtml().split("{cke-peak}").join(G)}u=
+m.blockLimit.getName();if(/^\s+|\s+$/.test(G)&&"span"in CKEDITOR.dtd[u]){var z='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';G=z+G+z}G=m.editor.dataProcessor.toHtml(G,{context:null,fixForBody:!1,protectedWhitespaces:!!z,dontFilter:m.dontFilter,filter:m.editor.activeFilter,enterMode:m.editor.activeEnterMode});u=H.document.createElement("body");u.setHtml(G);z&&(u.getFirst().remove(),u.getLast().remove());if((z=H.startPath().block)&&(1!=z.getChildCount()||!z.getBogus()))a:{var w;if(1==
+u.getChildCount()&&a(w=u.getFirst())&&w.is(r)&&!w.hasAttribute("contenteditable")){z=w.getElementsByTag("*");H=0;for(E=z.count();H<E;H++)if(v=z.getItem(H),!v.is(x))break a;w.moveChildren(w.getParent(1));w.remove()}}m.dataWrapper=u;H=G}if(H){w=m.range;H=w.document;var y;u=m.blockLimit;E=0;var O,z=[],N,V;G=I=0;var F,J;v=w.startContainer;var K=m.endPath.elements[0],Y,L=K.getPosition(v),B=!!K.getCommonAncestor(v)&&L!=CKEDITOR.POSITION_IDENTICAL&&!(L&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);
+v=b(m.dataWrapper,m);for(D(v,w);E<v.length;E++){L=v[E];if(y=L.isLineBreak){y=w;F=u;var U=void 0,aa=void 0;L.hasBlockSibling?y=1:(U=y.startContainer.getAscendant(p.$block,1))&&U.is({div:1,p:1})?(aa=U.getPosition(F),aa==CKEDITOR.POSITION_IDENTICAL||aa==CKEDITOR.POSITION_CONTAINS?y=0:(F=y.splitElement(U),y.moveToPosition(F,CKEDITOR.POSITION_AFTER_START),y=1)):y=0}if(y)G=0<E;else{y=w.startPath();!L.isBlock&&k(m.editor,y.block,y.blockLimit)&&(V=h(m.editor))&&(V=H.createElement(V),V.appendBogus(),w.insertNode(V),
+CKEDITOR.env.needsBrFiller&&(O=V.getBogus())&&O.remove(),w.moveToPosition(V,CKEDITOR.POSITION_BEFORE_END));if((y=w.startPath().block)&&!y.equals(N)){if(O=y.getBogus())O.remove(),z.push(y);N=y}L.firstNotAllowed&&(I=1);if(I&&L.isElement){y=w.startContainer;for(F=null;y&&!p[y.getName()][L.name];){if(y.equals(u)){y=null;break}F=y;y=y.getParent()}if(y)F&&(J=w.splitElement(F),m.zombies.push(J),m.zombies.push(F));else{F=u.getName();Y=!E;y=E==v.length-1;F=d(L.node,F);for(var U=[],aa=F.length,ba=0,da=void 0,
+ea=0,W=-1;ba<aa;ba++)da=F[ba]," "==da?(ea||Y&&!ba||(U.push(new CKEDITOR.dom.text(" ")),W=U.length),ea=1):(U.push(da),ea=0);y&&W==U.length&&U.pop();Y=U}}if(Y){for(;y=Y.pop();)w.insertNode(y);Y=0}else w.insertNode(L.node);L.lastNotAllowed&&E<v.length-1&&((J=B?K:J)&&w.setEndAt(J,CKEDITOR.POSITION_AFTER_START),I=0);w.collapse()}}1!=v.length?O=!1:(O=v[0],O=O.isElement&&"false"==O.node.getAttribute("contenteditable"));O&&(G=!0,y=v[0].node,w.setStartAt(y,CKEDITOR.POSITION_BEFORE_START),w.setEndAt(y,CKEDITOR.POSITION_AFTER_END));
+m.dontMoveCaret=G;m.bogusNeededBlocks=z}O=m.range;var T;J=m.bogusNeededBlocks;for(Y=O.createBookmark();N=m.zombies.pop();)N.getParent()&&(V=O.clone(),V.moveToElementEditStart(N),V.removeEmptyBlocksAtEnd());if(J)for(;N=J.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(O.document.createText(" "));for(;N=m.mergeCandidates.pop();)N.mergeSiblings();O.moveToBookmark(Y);if(!m.dontMoveCaret){for(N=e(O);N&&a(N)&&!N.is(p.$empty);){if(N.isBlockBoundary())O.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END);
+else{if(f(N)&&N.getHtml().match(/(\s|&nbsp;)$/g)){T=null;break}T=O.clone();T.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(c)}T&&O.moveToRange(T)}}}}();x=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),
+d;for(b;0<b--;)d=a.getItem(b),CKEDITOR.tools.trim(d.getHtml())||(d.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=!1;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is("table")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),
+d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();J=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&
+a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();w={eol:{detect:function(a,b){var c=a.range,
+d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),g=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(c.setEndBefore(g.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c),
+1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!z(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),g;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1,
+table:1})){var k=e.contains("table").getParent();g=function(a){return!a.equals(k)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var h=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(h)}}g||(g=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,g)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e),
+a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is("tr")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};F=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var f;f=e.getNext();)f.insertAfter(d),d=f;u(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);
+d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),f=d.endPath(),l=e.contains(CKEDITOR.dtd.$list),g=f.contains(CKEDITOR.dtd.$list);a.mergeList=l&&g&&l.getParent().equals(g.getParent())&&!l.equals(g);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&&f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=
+d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),l=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var g=f.contains(CKEDITOR.dtd.$list),n=l.contains(CKEDITOR.dtd.$list);g.equals(n)||(n.moveChildren(g),n.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem),l=l.contains(CKEDITOR.dtd.$listItem),f.equals(l)||b(l,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a,
+b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),l=new CKEDITOR.dom.elementPath(e,c),f=f.block,l=l.block;f&&l&&!f.equals(l)&&b(l,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e=
+[],f,l=new CKEDITOR.dom.walker(c),g=c.startPath().contains(d),n=c.endPath().contains(d),k={};l.guard=function(a,l){if(a.type==CKEDITOR.NODE_ELEMENT){var h="visited_"+(l?"out":"in");if(a.getCustomData(h))return;CKEDITOR.dom.element.setMarker(k,a,h,1)}if(l&&g&&a.equals(g))f=c.clone(),f.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!l&&n&&a.equals(n))f=c.clone(),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(h=!l)h=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!g||b(a,g))&&(!n||
+b(a,n));h&&(f=c.clone(),f.selectNodeContents(a),e.push(f))}};l.lastForward();CKEDITOR.dom.element.clearAllMarkers(k);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};
+c.checkForward();if(1<e){var c=b.startPath().contains("table"),f=b.endPath().contains("table");c&&f&&b.checkBoundaryOfElement(c,CKEDITOR.START)&&b.checkBoundaryOfElement(f,CKEDITOR.END)&&(b=a.range.clone(),b.setStartBefore(c),b.setEndAfter(f),a.purgeTableBookmark=b.createBookmark())}},detectRanges:function(e,f){var l=c(f,e.bookmark),g=l.clone(),k,h,v=l.getCommonAncestor();v.is(CKEDITOR.dtd.$tableContent)&&!v.is(d)&&(v=v.getAscendant("table",!0));h=v;v=new CKEDITOR.dom.elementPath(l.startContainer,
+h);h=new CKEDITOR.dom.elementPath(l.endContainer,h);v=v.contains("table");h=h.contains("table");if(v||h)v&&h&&b(v,h)?(e.tableSurroundingRange=g,g.setStartAt(v,CKEDITOR.POSITION_AFTER_END),g.setEndAt(h,CKEDITOR.POSITION_BEFORE_START),g=l.clone(),g.setEndAt(v,CKEDITOR.POSITION_AFTER_END),k=l.clone(),k.setStartAt(h,CKEDITOR.POSITION_BEFORE_START),k=a(g).concat(a(k))):v?h||(e.tableSurroundingRange=g,g.setStartAt(v,CKEDITOR.POSITION_AFTER_END),l.setEndAt(v,CKEDITOR.POSITION_AFTER_END)):(e.tableSurroundingRange=
+g,g.setEndAt(h,CKEDITOR.POSITION_BEFORE_START),l.setStartAt(h,CKEDITOR.POSITION_AFTER_START)),e.tableContentsRanges=k?k:a(l)},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();)b.extractContents(),u(b.startContainer)&&b.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,c=a.range.clone(),b=b.createElement("p");b.insertBefore(a.purgeTableBookmark.startNode);c.moveToBookmark(a.purgeTableBookmark);
+c.deleteContents();a.range.moveToPosition(b,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))},fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,b){var c=b.startPath(),d;k(a,c.block,c.blockLimit)&&(d=h(a))&&(d=b.document.createElement(d),d.appendBogus(),b.insertNode(d),b.moveToPosition(d,
+CKEDITOR.POSITION_AFTER_START))}}}()})();
+(function(){function a(){var a=this._.fakeSelection,b;a&&(b=this.getSelection(1),b&&b.isHidden()||(a.reset(),a=0));if(!a&&(a=b||this.getSelection(1),!a||a.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){var c=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(b.blockLimit);CKEDITOR.env.webkit&&!c&&(this._.previousActive=this.document.getActive());this._.selectionPreviousPath=b;this.fire("selectionChange",
+{selection:a,path:b})}}function d(){x=!0;m||(b.call(this),m=CKEDITOR.tools.setTimeout(b,200,this))}function b(){m=null;x&&(CKEDITOR.tools.setTimeout(a,0,this),x=!1)}function c(a){return J(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function e(a){function b(c,d){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(d?"End":"Start")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var d=a.startContainer,e=a.getPreviousNode(c,null,d),f=a.getNextNode(c,null,
+d);return b(e)||b(f,1)||!(e||f||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?!0:!1}function g(a){k(a,!1);var b=a.getDocument().createText(z);a.setCustomData("cke-fillingChar",b);return b}function k(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(!1!==b){var d=a.getDocument().getSelection().getNative(),e=d&&"None"!=d.type&&d.getRangeAt(0),f=z.length;if(c.getLength()>f&&e&&e.intersectsNode(c.$)){var g=[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];
+d.anchorNode==c.$&&d.anchorOffset>f&&(g[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(g[1].offset-=f)}}c.setText(h(c.getText(),1));g&&(c=a.getDocument().$,d=c.getSelection(),c=c.createRange(),c.setStart(g[0].node,g[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(g[1].node,g[1].offset))}}function h(a,b){return b?a.replace(y,function(a,b){return b?" ":""}):a.replace(z,"")}function p(a,b){var c=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+
+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px")+'"\x3e'+(b||"\x26nbsp;")+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(c);var d=a.getSelection(1),e=a.createRange(),f=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(c,CKEDITOR.POSITION_AFTER_START);e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function r(a){var b=
+{37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function f(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=
+c.startContainer,e;d&&!((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly());)e&&"false"==d.getAttribute("contentEditable")&&c.setStartAfter(d),d=d.getParent();d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&
+d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+1,0,e));return!0}return!1};d.next()}}return a}var B="function"!=typeof window.getSelection,u=1,z=CKEDITOR.tools.repeat("​",7),y=new RegExp(z+"( )?","g"),m,x,J=CKEDITOR.dom.walker.invisible(1),w=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);
+return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected,!a));e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d]));c.fire("saveSnapshot");return!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=
+e.getSelection();a&&a.removeAllRanges()}var e=b.editor;e.on("contentDom",function(){function b(){v=new CKEDITOR.dom.selection(e.getSelection());v.lock()}function c(){l.removeListener("mouseup",c);q.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();"None"!=a.type&&b.parentElement().ownerDocument==f.$&&b.select()}var f=e.document,l=CKEDITOR.document,g=e.editable(),h=f.getBody(),q=f.getDocumentElement(),m=g.isInline(),p,v;CKEDITOR.env.gecko&&g.attachListener(g,"focus",
+function(a){a.removeListener();0!==p&&(a=e.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$&&(a=e.createRange(),a.moveToElementEditStart(g),a.select())},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){p&&CKEDITOR.env.webkit&&(p=e._.previousActive&&e._.previousActive.equals(f.getActive()))&&null!=e._.previousScrollTop&&e._.previousScrollTop!=g.$.scrollTop&&(g.$.scrollTop=e._.previousScrollTop);e.unlockSelection(p);p=0},null,null,-1);g.attachListener(g,
+"mousedown",function(){p=0});if(CKEDITOR.env.ie||m)B?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(e,"selectionCheck",b,null,null,-1),g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){e.lockSelection(v);p=1},null,null,-1),g.attachListener(g,"mousedown",function(){p=0});if(CKEDITOR.env.ie&&!m){var G;g.attachListener(g,"mousedown",function(a){2==a.data.$.button&&((a=e.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(G=e.window.getScrollPosition()))});
+g.attachListener(g,"mouseup",function(a){2==a.data.$.button&&G&&(e.document.$.documentElement.scrollLeft=G.x,e.document.$.documentElement.scrollTop=G.y);G=null});if("BackCompat"!=f.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var E,I;q.on("mousedown",function(a){function b(a){a=a.data.$;if(E){var c=h.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}E.setEndPoint(0>I.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);E.select()}}function c(){q.removeListener("mousemove",
+b);l.removeListener("mouseup",c);q.removeListener("mouseup",c);E.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<q.$.clientHeight&&a.$.x<q.$.clientWidth){E=h.$.createTextRange();try{E.moveToPoint(a.$.clientX,a.$.clientY)}catch(d){}I=E.duplicate();q.on("mousemove",b);l.on("mouseup",c);q.on("mouseup",c)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)q.on("mousedown",function(a){a.data.getTarget().is("html")&&(l.on("mouseup",c),q.on("mouseup",c))})}}g.attachListener(g,"selectionchange",a,
+e);g.attachListener(g,"keyup",d,e);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){e.forceNextSelectionCheck();e.selectionChange(1)});if(m&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var K;g.attachListener(g,"mousedown",function(){K=1});g.attachListener(f.getDocumentElement(),"mouseup",function(){K&&d.call(e);K=0})}else g.attachListener(CKEDITOR.env.ie?g:f.getDocumentElement(),"mouseup",d,e);CKEDITOR.env.webkit&&g.attachListener(f,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:k(g)}},
+null,null,-1);g.attachListener(g,"keydown",r(e),null,null,-1)});e.on("setData",function(){e.unlockSelection();CKEDITOR.env.webkit&&c()});e.on("contentDomUnload",function(){e.unlockSelection()});if(CKEDITOR.env.ie9Compat)e.on("beforeDestroy",c,null,null,9);e.on("dataReady",function(){delete e._.fakeSelection;delete e._.hiddenSelectionContainer;e.selectionChange(1)});e.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=e.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&
+(b.remove(),CKEDITOR.env.gecko&&(a=e.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);e.on("key",function(a){if("wysiwyg"==e.mode){var b=e.getSelection();if(b.isFake){var c=w[a.data.keyCode];if(c)return c({editor:e,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar");
+c&&(c.getCustomData("ready")?k(a):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){k(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=h(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=h(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:d).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==
+this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};
+CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element;
+this.rev=b?b.rev:u++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||
+d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement=null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var F={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:h,
+_createFillingCharSequenceNode:g,FILLING_CHAR_SEQUENCE:z});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=B?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:B?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;"Text"==d&&(b=CKEDITOR.SELECTION_TEXT);"Control"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&&
+(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&F[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=B?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}
+var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,l,g=b.duplicate(),h=0,k=e.length-1,v=-1,n,m;h<=k;)if(v=Math.floor((h+k)/2),f=e[v],g.moveToElementText(f),n=g.compareEndPoints("StartToStart",b),0<n)k=v-1;else if(0>n)h=v+1;else return{container:d,offset:a(f)};if(-1==v||v==e.length-1&&0>n){g.moveToElementText(d);g.setEndPoint("StartToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!g)return f=
+e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0<g&&0<d;)l=e[--d],l.nodeType==CKEDITOR.NODE_TEXT&&(m=l,g-=l.nodeValue.length);return{container:m,offset:-g}}g.collapse(0<n?!0:!1);g.setEndPoint(0<n?"StartToStart":"EndToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;if(!g)return{container:d,offset:a(f)+(0<n?0:1)};for(;0<g;)try{l=f[0<n?"previousSibling":"nextSibling"],l.nodeType==CKEDITOR.NODE_TEXT&&(g-=l.nodeValue.length,
+m=l),f=l}catch(p){return{container:d,offset:a(f)}}return{container:m,offset:0<n?-g:m.nodeValue.length+g}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),d=b(c,!0),a.setStart(new CKEDITOR.dom.node(d.container),d.offset),d=b(c),a.setEnd(new CKEDITOR.dom.node(d.container),d.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&
+a.collapse(),[a];if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),g=f.parentNode,l=0,a=new CKEDITOR.dom.range(this.root);l<g.childNodes.length&&g.childNodes[l]!=f;l++);a.setStart(new CKEDITOR.dom.node(g),l);a.setEnd(new CKEDITOR.dom.node(g),l+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),
+e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;d||(c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this)));return b?f(new CKEDITOR.dom.rangeList(d.slice())):d}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];
+if(c){if(c.collapsed)b=c.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());else{for(c.optimize();b=c.startContainer,c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary();)c.setStartAfter(b);b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();if((b=b.getChild(c.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;)b=c,c=c.getFirst();else b=c.startContainer}b=b.$}}return a.startElement=b?
+new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&!((c=a.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&F[c.getName()]&&(d=c));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=
+this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNative(),b=B?"Control"==b.type?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();a&&(a=b||c[0]&&c[0].getCommonAncestor())&&
+a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=u++},selectElement:function(a){var b=
+new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d)c=a[d],c.endContainer.equals(b)&&(c.endOffset=Math.min(c.endOffset,b.getChildCount()));if(a.length)if(this.isLocked){var f=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();f&&!f.equals(this.root)&&f.focus()}else{var h;a:{var m,p;if(1==a.length&&
+!(p=a[0]).collapsed&&(h=p.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(p=p.clone(),p.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(m=p.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(h=m),"false"==h.getAttribute("contenteditable")))break a;h=void 0}if(h)this.fake(h);else{if(B){p=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};1<a.length&&(h=a[a.length-1],a[0].setEnd(h.endContainer,h.endOffset));h=a[0];a=h.collapsed;var r,u,y;if((c=h.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&
+c.getName()in F&&(!c.is("a")||!c.getText()))try{y=c.$.createControlRange();y.addElement(c.$);y.select();return}catch(w){}if(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b)h.shrink(CKEDITOR.NODE_ELEMENT,!0),a=h.collapsed;y=h.createBookmark();b=y.startNode;a||(f=y.endNode);y=h.document.$.body.createTextRange();y.moveToElementText(b.$);y.moveStart("character",1);f?(m=h.document.$.body.createTextRange(),
+m.moveToElementText(f.$),y.setEndPoint("EndToEnd",m),y.moveEnd("character",-1)):(r=b.getNext(p),u=b.hasAscendant("pre"),r=!(r&&r.getText&&r.getText().match(m))&&(u||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br")),u=h.document.createElement("span"),u.setHtml("\x26#65279;"),u.insertBefore(b),r&&h.document.createText("﻿").insertBefore(b));h.setStartBefore(b);b.remove();a?(r?(y.moveStart("character",-1),y.select(),h.document.$.selection.clear()):y.select(),h.moveToPosition(u,CKEDITOR.POSITION_BEFORE_START),
+u.remove()):(h.setEndBefore(f),f.remove(),y.select())}else{f=this.getNative();if(!f)return;this.removeAllRanges();for(y=0;y<a.length;y++){if(y<a.length-1&&(r=a[y],u=a[y+1],m=r.clone(),m.setStart(r.endContainer,r.endOffset),m.setEnd(u.startContainer,u.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),h=m.getCommonAncestor(),m=m.getEnclosedNode(),h.isReadOnly()||m&&m.isReadOnly()))){u.setStart(r.startContainer,r.startOffset);a.splice(y--,1);continue}h=a[y];u=this.document.$.createRange();
+h.collapsed&&CKEDITOR.env.webkit&&e(h)&&(m=g(this.root),h.insertNode(m),(r=m.getNext())&&!m.getPrevious()&&r.type==CKEDITOR.NODE_ELEMENT&&"br"==r.getName()?(k(this.root),h.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START)):h.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));u.setStart(h.startContainer.$,h.startOffset);try{u.setEnd(h.endContainer.$,h.endOffset)}catch(v){if(0<=v.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))h.collapse(1),u.setEnd(h.endContainer.$,h.endOffset);else throw v;}f.addRange(u)}}this.reset();
+this.root.fire("selectionchange")}}},fake:function(a,b){var c=this.root.editor;void 0===b&&a.hasAttribute("aria-label")&&(b=a.getAttribute("aria-label"));this.reset();p(c,b);var d=this._.cache,e=new CKEDITOR.dom.range(this.root);e.setStartBefore(a);e.setEndAfter(a);d.ranges=new CKEDITOR.dom.rangeList(e);d.selectedElement=d.startElement=a;d.type=CKEDITOR.SELECTION_ELEMENT;d.selectedText=d.nativeSel=null;this.isFake=1;this.rev=u++;c._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=
+this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c,d=0;d<a.length;d++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(a[d]);b.push(e)}a.isFake&&(c=b[0].getEnclosedNode(),c&&c.type==
+CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake?this.fake(c):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[B?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();
+"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;
+(function(){function a(a,b){for(var c,d;(a=a.getParent())&&!a.equals(b);)if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");"false"==e?c=a:"true"==e&&(d=1)}return c}function d(a,b,c,d){return(a.getPosition(b)|d)==d&&(!c.childRule||c.childRule(a))}function b(c){var f=c.document;if(c.collapsed)f=J(this,f),c.insertNode(f),c.moveToPosition(f,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,h=this._.definition,l,k=h.ignoreReadonly,m=k||h.includeReadonly;null==
+m&&(m=c.root.getCustomData("cke_includeReadonly"));var n=CKEDITOR.dtd[g];n||(l=!0,n=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var p=c.createBookmark(),q=p.startNode,r=p.endNode,u=q,t;if(!k){var w=c.getCommonAncestor(),k=a(q,w),w=a(r,w);k&&(u=k.getNextSourceNode(!0));w&&(r=w)}for(u.getPosition(r)==CKEDITOR.POSITION_FOLLOWING&&(u=0);u;){k=!1;if(u.equals(r))u=null,k=!0;else{var z=u.type==CKEDITOR.NODE_ELEMENT?u.getName():null,w=z&&"false"==u.getAttribute("contentEditable"),x=z&&
+u.getAttribute("data-nostyle");if(z&&u.data("cke-bookmark")){u=u.getNextSourceNode(!0);continue}if(w&&m&&CKEDITOR.dtd.$block[z])for(var B=u,A=e(B),C=void 0,D=A.length,F=0,B=D&&new CKEDITOR.dom.range(B.getDocument());F<D;++F){var C=A[F],M=CKEDITOR.filter.instances[C.data("cke-filter")];if(M?M.check(this):1)B.selectNodeContents(C),b.call(this,B)}A=z?!n[z]||x?0:w&&!m?0:d(u,r,h,Q):1;if(A)if(C=u.getParent(),A=h,D=g,F=l,!C||!(C.getDtd()||CKEDITOR.dtd.span)[D]&&!F||A.parentRule&&!A.parentRule(C))k=!0;else{if(t||
+z&&CKEDITOR.dtd.$removeEmpty[z]&&(u.getPosition(r)|Q)!=Q||(t=c.clone(),t.setStartBefore(u)),z=u.type,z==CKEDITOR.NODE_TEXT||w||z==CKEDITOR.NODE_ELEMENT&&!u.getChildCount()){for(var z=u,R;(k=!z.getNext(H))&&(R=z.getParent(),n[R.getName()])&&d(R,q,h,P);)z=R;t.setEndAfter(z)}}else k=!0;u=u.getNextSourceNode(x||w)}if(k&&t&&!t.collapsed){for(var k=J(this,f),w=k.hasAttributes(),x=t.getCommonAncestor(),z={},A={},C={},D={},W,T,ca;k&&x;){if(x.getName()==g){for(W in h.attributes)!D[W]&&(ca=x.getAttribute(T))&&
+(k.getAttribute(W)==ca?A[W]=1:D[W]=1);for(T in h.styles)!C[T]&&(ca=x.getStyle(T))&&(k.getStyle(T)==ca?z[T]=1:C[T]=1)}x=x.getParent()}for(W in A)k.removeAttribute(W);for(T in z)k.removeStyle(T);w&&!k.hasAttributes()&&(k=null);k?(t.extractContents().appendTo(k),t.insertNode(k),y.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),t.extractContents().appendTo(k),t.insertNode(k),y.call(this,k),k.remove(!0));t=null}}c.moveToBookmark(p);c.shrink(CKEDITOR.SHRINK_TEXT);
+c.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function c(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(n.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;p.checkElementRemovable(h,!0)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;p.checkElementRemovable(h,!0)&&(f=h)}f&&n.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var c=
+a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g])&&h!=e.block&&h!=e.blockLimit;g++)if(this.checkElementRemovable(h)){var k;a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(k=a.checkBoundaryOfElement(h,CKEDITOR.START)))?(f=h,f.match=k?"start":"end"):(h.mergeSiblings(),h.is(this.element)?z.call(this,h):m(h,l(this)[h.getName()]))}if(f){h=d;for(g=0;;g++){k=e.elements[g];if(k.equals(f))break;
+else if(k.match)continue;else k=k.clone();k.append(h);h=k}h["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var n=c.endNode,p=this;b();for(e=d;!e.equals(n);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?z.call(this,e):m(e,l(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)&&(b(),f=d.getNext())),e=f}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function e(a){var b=[];a.forEach(function(a){if("true"==
+a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function g(a){var b=a.getEnclosedNode()||a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&w(a,this)}function k(a){var b=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&
+a.removeStyle(e)}}function h(a){var b=a.createBookmark(!0),c=a.createIterator();c.enforceRealBlocks=!0;this._.enterMode&&(c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var d,e=a.document,f;d=c.getNextParagraph();)!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)&&(f=J(this,e,d),r(d,f));a.moveToBookmark(b)}function p(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=!0;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)this.checkElementRemovable(d)&&
+(d.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e),r(d,e)):z.call(this,d));a.moveToBookmark(b)}function r(a,b){var c=!b;c&&(b=a.getDocument().createElement("div"),a.copyAttributes(b));var d=b&&b.is("pre"),e=a.is("pre"),g=!d&&e;if(d&&!e){e=b;(g=a.getBogus())&&g.remove();g=a.getHtml();g=B(g,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");g=g.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+|&nbsp;)/g,
+" ");g=g.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(g);b=e}else g?b=u(c?[a.getHtml()]:f(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(R))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=B(k.getHtml(),/\n$/,"")+"\n\n"+B(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e":
+c.setHtml(d),k.remove())}else c&&x(b)}function f(a){var b=[];B(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function B(a,b,c){var d="",e="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function u(a,b){var c;
+1<a.length&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=B(e,/^[ \t]*\n/,""),e=B(e,/\n$/,""),e=B(e,/^[ \t]+|[ \t]+$/g,function(a,b){return 1==a.length?"\x26nbsp;":b?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"\x3cbr\x3e"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);
+c.append(f)}else b.setHtml(e)}return c||b}function z(a,b){var c=this._.definition,d=c.attributes,c=c.styles,e=l(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if("class"!=g&&!this._.definition.fullMatch||a.getAttribute(g)==q(g,d[g]))b&&"data-"==g.slice(0,5)||(f=a.hasAttribute(g),a.removeAttribute(g));for(var h in c)this._.definition.fullMatch&&a.getStyle(h)!=q(h,c[h],!0)||(f=f||!!a.getStyle(h),a.removeStyle(h));m(a,e,A[a.getName()]);f&&(this._.definition.alwaysRemoveElement?
+x(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?x(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function y(a){for(var b=l(this),c=a.getElementsByTag(this.element),d,e=c.count();0<=--e;)d=c.getItem(e),d.isReadOnly()||z.call(this,d,!0);for(var f in b)if(f!=this.element)for(c=a.getElementsByTag(f),e=c.count()-1;0<=e;e--)d=c.getItem(e),d.isReadOnly()||m(d,b[f])}function m(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],
+f;if(f=a.getAttribute(e)){var g=b[d][1];(null===g||g.test&&g.test(f)||"string"==typeof g&&f==g)&&a.removeAttribute(e)}}c||x(a)}function x(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(R),d=a.getNext(R);!c||c.type!=CKEDITOR.NODE_TEXT&&c.isBlockBoundary({br:1})||a.append("br",1);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else c=a.getFirst(),d=a.getLast(),a.remove(!0),c&&(c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings(),
+d&&!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings())}function J(a,b,c){var d;d=a.element;"*"==d&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=w(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function w(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function F(a,
+b){for(var c in a)a[c]=a[c].replace(M,function(a,c){return b[c]})}function l(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;"string"==typeof e?f=e.toLowerCase():(f=e.element?e.element.toLowerCase():a.element,g=e.attributes);e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function q(a,b,c){var d=new CKEDITOR.dom.element("span");
+d[c?"setStyle":"setAttribute"](a,b);return d[c?"getStyle":"getAttribute"](a)}function n(a,b){function c(a,b){return"font-family"==b.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof b&&(b=CKEDITOR.tools.parseCssText(b,!0));for(var d in a)if(!(d in b)||c(b[d],d)!=c(a[d],d)&&"inherit"!=a[d]&&"inherit"!=b[d])return!1;return!0}function t(a,b,c){var d=a.document,e=a.getRanges();b=b?this.removeFromRange:this.applyToRange;for(var f,g=e.createIterator();f=
+g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var A={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},C={a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},D=/\s*(?:;\s*|$)/,M=/#\((.+?)\)/g,H=CKEDITOR.dom.walker.bookmark(0,
+1),R=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;c&&c.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style)),delete c.style);b&&(a=CKEDITOR.tools.clone(a),F(a.attributes,b),F(a.styles,b));c=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(A[c]?CKEDITOR.STYLE_BLOCK:C[c]?CKEDITOR.STYLE_OBJECT:
+CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return t.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);t.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return t.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),
+a)){var b=this._.enterMode;b||(this._.enterMode=a.activeEnterMode);t.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?g:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?p:this.type==CKEDITOR.STYLE_OBJECT?k:null;return this.removeFromRange(a)},applyToObject:function(a){w(a,
+this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++)if(e=c[d],this.type!=CKEDITOR.STYLE_INLINE||e!=a.block&&e!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!("string"==typeof this.element?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,!0,b))return!0}}return!1},checkApplicable:function(a,
+b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0},checkElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return!1;var d=a.getName();if("string"==typeof this.element?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return!0;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;
+if(f)for(var g in f)e++,d[g]=f[g];if(g=CKEDITOR.style.getStyleText(c))d.style||e++,d.style=g;d._length=e;c=c._AC=d}if(c._length){for(var h in c)if("_length"!=h)if(d=a.getAttribute(h)||"","style"==h?n(c[h],d):c[h]==d){if(!b)return!0}else if(b)return!1;if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return!0;if(b=l(this)[a.getName()]){var d;if(!(b=b.attributes))return!0;for(c=0;c<b.length;c++)if(d=b[c][0],d=a.getAttribute(d)){var e=b[c][1];
+if(null===e)return!0;if("string"==typeof e){if(d==e)return!0}else if(e.test(d))return!0}}return!1},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;"bdo"==d&&(d="span");var c=["\x3c",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'\x3d"',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style\x3d"',e,'"');c.push("\x3e",a||b.name,"\x3c/",d,"\x3e");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;
+var b=a.styles,c=a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(D,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(D,";");"inherit"==f?d+=g:c+=g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,!0));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},
+a,!0);return this.customHandlers[a.type]=b};var Q=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,P=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,d){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,d,!0)};
+CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,d,b){CKEDITOR.stylesSet.addExternal(a,d,"");CKEDITOR.stylesSet.load(a,b)};
+CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,d){var b=this._.styleStateChangeCallbacks;b||(b=this._.styleStateChangeCallbacks=[],this.on("selectionChange",function(a){for(var d=0;d<b.length;d++){var g=b[d],k=g.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;g.fn.call(this,k)}}));b.push({style:a,fn:d})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);
+else{var d=this,b=d.config.stylesCombo_stylesSet||d.config.stylesSet;if(!1===b)a(null);else if(b instanceof Array)d._.stylesDefinitions=b,a(b);else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){d._.stylesDefinitions=b[c];a(d._.stylesDefinitions)})}}}});
+CKEDITOR.dom.comment=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"\x3c!--"+this.$.nodeValue+"--\x3e"}});"use strict";
+(function(){var a={},d={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(d[b]=1);CKEDITOR.dom.elementPath=function(b,e){var g=null,k=null,h=[],p=b,r;e=e||b.getDocument().getBody();do if(p.type==CKEDITOR.NODE_ELEMENT){h.push(p);if(!this.lastElement&&(this.lastElement=p,p.is(CKEDITOR.dtd.$object)||"false"==p.getAttribute("contenteditable")))continue;if(p.equals(e))break;if(!k&&(r=p.getName(),
+"true"==p.getAttribute("contenteditable")?k=p:!g&&d[r]&&(g=p),a[r])){if(r=!g&&"div"==r){a:{r=p.getChildren();for(var f=0,B=r.count();f<B;f++){var u=r.getItem(f);if(u.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[u.getName()]){r=!0;break a}}r=!1}r=!r}r?g=p:k=p}}while(p=p.getParent());k||(k=e);this.block=g;this.blockLimit=k;this.root=e;this.elements=h}})();
+CKEDITOR.dom.elementPath.prototype={compare:function(a){var d=this.elements;a=a&&a.elements;if(!a||d.length!=a.length)return!1;for(var b=0;b<d.length;b++)if(!d[b].equals(a[b]))return!1;return!0},contains:function(a,d,b){var c;"string"==typeof a&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return-1<CKEDITOR.tools.indexOf(a,b.getName())}:"function"==typeof a?c=a:"object"==typeof a&&(c=function(b){return b.getName()in
+a});var e=this.elements,g=e.length;d&&g--;b&&(e=Array.prototype.slice.call(e,0),e.reverse());for(d=0;d<g;d++)if(c(e[d]))return e[d];return null},isContextFor:function(a){var d;return a in CKEDITOR.dtd.$block?(d=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!d.getDtd()[a]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};
+CKEDITOR.dom.text=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;
+CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var d=this.$.parentNode,b=d.childNodes.length,c=this.getLength(),e=this.getDocument(),g=new CKEDITOR.dom.text(this.$.splitText(a),e);d.childNodes.length==b&&(a>=c?(g=e.createText(""),g.insertAfter(this)):(a=e.createText(""),a.insertAfter(g),a.remove()));return g},substring:function(a,
+d){return"number"!=typeof d?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}});
+(function(){function a(a,c,d){var g=a.serializable,k=c[d?"endContainer":"startContainer"],h=d?"endOffset":"startOffset",p=g?c.document.getById(a.startNode):a.startNode;a=g?c.document.getById(a.endNode):a.endNode;k.equals(p.getPrevious())?(c.startOffset=c.startOffset-k.getLength()-a.getPrevious().getLength(),k=a.getNext()):k.equals(a.getPrevious())&&(c.startOffset-=k.getLength(),k=a.getNext());k.equals(p.getParent())&&c[h]++;k.equals(a.getParent())&&c[h]++;c[d?"endContainer":"startContainer"]=k;return c}
+CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],g;return{getNextRange:function(k){g=void 0===g?0:g+1;var h=a[g];if(h&&1<a.length){if(!g)for(var p=a.length-1;0<=p;p--)d.unshift(a[p].createBookmark(!0));if(k)for(var r=0;a[g+r+1];){var f=h.document;k=0;p=f.getById(d[r].endNode);for(f=f.getById(d[r+1].startNode);;){p=
+p.getNextSourceNode(!1);if(f.equals(p))k=1;else if(c(p)||p.type==CKEDITOR.NODE_ELEMENT&&p.isBlockBoundary())continue;break}if(!k)break;r++}for(h.moveToBookmark(d.shift());r--;)p=a[++g],p.moveToBookmark(d.shift()),h.setEnd(p.endContainer,p.endOffset)}return h}}},createBookmarks:function(b){for(var c=[],d,g=0;g<this.length;g++){c.push(d=this[g].createBookmark(b,!0));for(var k=g+1;k<this.length;k++)this[k]=a(d,this[k]),this[k]=a(d,this[k],!0)}return c},createBookmarks2:function(a){for(var c=[],d=0;d<
+this.length;d++)c.push(this[d].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})();
+(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function d(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,g;e<c.length;e++)if(g=c[e],d.ie&&(g.replace(/^ie/,"")==d.version||d.quirks&&"iequirks"==g)&&(g="ie"),d[g]){b+="_"+c[e];break}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){g[a]||(CKEDITOR.document.appendStyleSheet(d(a)),g[a]=1);b&&b()}function c(a){var b=
+a.getById(k);b||(b=a.getHead().append("style"),b.setAttribute("id",k),b.setAttribute("type","text/css"));return b}function e(a,b,c){var d,e,g;if(CKEDITOR.env.webkit)for(b=b.split("}").slice(0,-1),e=0;e<b.length;e++)b[e]=b[e].split("{");for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){g=b[e][1];for(d=0;d<c.length;d++)g=g.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],g)}else{g=b;for(d=0;d<c.length;d++)g=g.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?
+a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var g={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,e){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+"-rtl"]),
+g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;e=e||g&&g.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",g="";"function"==typeof c&&(d=c(this,"editor"),g=
+c(this,"panel"));a=[[p,a]];e([b],d,a);e(h,g,a)}).call(this,a)}});var k="cke_ui_color",h=[],p=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);h.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[p,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})();
+(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!d||d!=b)}catch(c){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");
+CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,d=0;d<a.length;d++)CKEDITOR.editor.prototype.constructor.apply(a[d][0],a[d][1]),CKEDITOR.add(a[d][0])})();/*
+ Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.skin.name="moonocolor";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8";
+CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:linear-gradient(to bottom,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c,a){return b.output({from:c,
+to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),
+panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
+return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g,
+"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},v={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},n={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},q={isChanged:function(){return this.getValue()!=
+this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},r=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})},
+this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),x=/^on([A-Z]\w+)/,t=function(b){for(var a in b)(x.test(a)||"title"==a||"type"==a)&&delete b[a];return b},w=function(b){b=b.data.getKeystroke();b==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):b==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+
+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,e,function(){var e=[],g=a.required?" cke_required":"";"horizontal"!=a.labelLayout?e.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" ',' id\x3d"'+c.labelId+'"',c.inputId?' for\x3d"'+c.inputId+'"':"",(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e",a.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"',
+a.controlStyle?' style\x3d"'+a.controlStyle+'"':"",' role\x3d"presentation"\x3e',f.call(this,b,a),"\x3c/div\x3e"):(g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" id\x3d"'+c.labelId+'" for\x3d"'+c.inputId+'"'+(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(a.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+(a.controlStyle?' style\x3d"'+a.controlStyle+
+'"':"")+"\x3e"+f.call(this,b,a)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e));return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,m=!1;b.on("load",function(){e.getInputElement().on("keydown",
+function(a){13==a.data.getKeystroke()&&(m=!0)});e.getInputElement().on("keyup",function(a){13==a.data.getKeystroke()&&m&&(b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0),m=!1);e.bidi&&w.call(e,a)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b=['\x3cdiv class\x3d"cke_dialog_ui_input_',a.type,'" role\x3d"presentation"'];a.width&&b.push('style\x3d"width:'+a.width+'" ');b.push("\x3e\x3cinput ");c["aria-labelledby"]=this._.labelId;this._.required&&
+(c["aria-required"]=this._.required);for(var e in c)b.push(e+'\x3d"'+c[e]+'" ');b.push(" /\x3e\x3c/div\x3e");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate);e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);if(f.bidi)b.on("load",
+function(){f.getInputElement().on("keyup",w)},f);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',c,'" '],b;for(b in e)a.push(b+'\x3d"'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(f._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(b,
+a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};t(c);a["default"]&&(g.checked="checked");"undefined"!=typeof c.inputStyle&&(c.style=c.inputStyle);
+f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' \x3clabel id\x3d"',d,'" for\x3d"',g.id,'"'+(a.labelStyle?' style\x3d"'+a.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(a.label),"\x3c/label\x3e");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.validate);var f=[],c=this;a.role="radiogroup";a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,
+b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",k=0;k<a.items.length;k++){var l=a.items[k],h=void 0!==l[2]?l[2]:l[0],n=void 0!==l[1]?l[1]:l[0],p=CKEDITOR.tools.getNextId()+"_radio_input",q=p+"_label",p=CKEDITOR.tools.extend({},a,{id:p,title:null,type:null},!0),h=CKEDITOR.tools.extend({},p,{title:h},!0),r={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:n,"aria-labelledby":q},u=[];c._["default"]==n&&(r.checked="checked");t(p);t(h);"undefined"!=typeof p.inputStyle&&
+(p.style=p.inputStyle);p.keyboardFocusable=!0;f.push(new CKEDITOR.ui.dialog.uiElement(b,p,u,"input",null,r));u.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,u,"label",null,{id:q,"for":r.id},l[0]);e.push(u.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var f=this;b.on("load",function(){var a=this.getElement();
+(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button","aria-labelledby":e},'\x3cspan id\x3d"'+e+'" class\x3d"cke_dialog_ui_button"\x3e'+
+CKEDITOR.tools.htmlEncode(a.label)+"\x3c/span\x3e")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};e.push('\x3cdiv class\x3d"cke_dialog_ui_input_',
+a.type,'" role\x3d"presentation"');a.width&&e.push('style\x3d"width:'+a.width+'" ');e.push("\x3e");void 0!==a.size&&(g.size=a.size);void 0!==a.multiple&&(g.multiple=a.multiple);t(c);for(var k=0,l;k<a.items.length&&(l=a.items[k]);k++)d.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==l[1]?l[1]:l[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(l[0]));"undefined"!=typeof c.inputStyle&&(c.style=c.inputStyle);f.select=new CKEDITOR.ui.dialog.uiElement(b,c,e,"select",null,
+g,d.join(""));e.push("\x3c/div\x3e");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"',
+f.frameId,'" title\x3d"',a.label,'" src\x3d"javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"\x3e\x3c/iframe\x3e');return b.join("")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=
+a["for"];e&&!1===e.call(this,c)||(b.getContentElement(d[0],d[1]).submit(),this.disable())};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var m=[],g=c.html;"\x3c"!=g.charAt(0)&&(g="\x3cspan\x3e"+g+"\x3c/span\x3e");var k=c.focus;if(k){var l=this.focus;this.focus=function(){("function"==
+typeof k?k:l).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,m,"span",null,null,"");m=m.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",m[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("\x3clegend"+
+(c.labelStyle?' style\x3d"'+c.labelStyle+'"':"")+"\x3e"+e+"\x3c/legend\x3e");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=
+CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:r},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire("click",{dialog:this._.dialog})},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},
+isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},
+focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){if(this.bidi){var a=b&&b.charAt(0);(a="‪"==a?"ltr":"‫"==a?"rtl":null)&&(b=b.slice(1));this.setDirectionMarker(a)}b||(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},
+getValue:function(){var b=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&b){var a=this.getDirectionMarker();a&&(b=("ltr"==a?"‪":"‫")+b)}return b},setDirectionMarker:function(b){var a=this.getInputElement();b?a.setAttributes({dir:b,"data-cke-dir-marker":b}):this.getDirectionMarker()&&a.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.textarea.prototype=
+new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);
+return this},clear:function(){for(var b=this.getInputElement().$;0<b.length;)b.remove(0);return this},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,
+a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return r.onChange.apply(this,arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},q,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=
+f.getValue()==b;!a&&this.fire("change",{value:b})},getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return r.onChange.apply(this,arguments);b.on("load",function(){for(var a=
+this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",a);return null}}},q,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,q,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):
+this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();
+var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input";d.$.write(['\x3chtml dir\x3d"'+g+'" lang\x3d"'+k+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+g+'" lang\x3d"'+k+'" action\x3d"',CKEDITOR.tools.htmlEncode(f.action),'"\x3e\x3clabel id\x3d"',a.labelId,'" for\x3d"',h,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(f.label),
+'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',h,'" aria-labelledby\x3d"',a.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(f.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<b?b:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+e+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+m+")}","\x3c/script\x3e"].join(""));
+d.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),f=a.definition,c=a.buttons,e=this.formLoadedNumber,m=this.formUnloadNumber,g=a.dialog._.editor.lang.dir,k=a.dialog._.editor.langCode;e||(e=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),m=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(e);
+CKEDITOR.tools.removeFunction(m)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(b,a){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=
+new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",v);CKEDITOR.dialog.addUIElement("password",v);CKEDITOR.dialog.addUIElement("textarea",n);CKEDITOR.dialog.addUIElement("checkbox",n);CKEDITOR.dialog.addUIElement("radio",n);CKEDITOR.dialog.addUIElement("button",n);CKEDITOR.dialog.addUIElement("select",n);CKEDITOR.dialog.addUIElement("file",n);CKEDITOR.dialog.addUIElement("fileButton",n);CKEDITOR.dialog.addUIElement("html",
+n);CKEDITOR.dialog.addUIElement("fieldset",{build:function(b,a,d){for(var f=a.children,c,e=[],h=[],g=0;g<f.length&&(c=f[g]);g++){var k=[];e.push(k);h.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b,c,k))}return new CKEDITOR.ui.dialog[a.type](b,h,e,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;CKEDITOR.DIALOG_STATE_IDLE=1;CKEDITOR.DIALOG_STATE_BUSY=2;
+(function(){function x(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function A(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function K(a,b){for(var c=a.$.getElementsByTagName("input"),
+e=0,d=c.length;e<d;e++){var f=new CKEDITOR.dom.element(c[e]);"text"==f.getAttribute("type").toLowerCase()&&(b?(f.setAttribute("value",f.getCustomData("fake_value")||""),f.removeCustomData("fake_value")):(f.setCustomData("fake_value",f.getAttribute("value")),f.setAttribute("value","")))}}function T(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})}
+function U(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function V(a){var b=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",W).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),c=b.getChild([0,0,0,0,0]),e=c.getChild(0),d=c.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(c);
+!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(c.getParent()));e.unselectable();d.unselectable();return{element:b,parts:{dialog:b.getChild(0),title:e,close:d,tabs:c.getChild(2),contents:c.getChild([3,0,0,0]),
+footer:c.getChild([3,0,1,0])}}}function L(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function X(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();
+c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function M(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function Y(a){function b(b){var c=a.getSize(),k=CKEDITOR.document.getWindow().getViewPaneSize(),q=b.data.$.screenX,n=b.data.$.screenY,r=q-e.x,l=n-e.y;e={x:q,y:n};d.x+=r;d.y+=l;a.move(d.x+h[3]<g?-h[3]:d.x-h[1]>k.width-c.width-g?k.width-c.width+("rtl"==f.lang.dir?0:h[1]):d.x,d.y+h[0]<g?-h[0]:d.y-h[2]>k.height-c.height-g?k.height-c.height+h[2]:d.y,1);b.data.preventDefault()}
+function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null,f=a.getParentEditor(),g=f.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof g&&(g=20);a.parts.title.on("mousedown",function(g){e={x:g.data.$.screenX,y:g.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",
+c);d=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=u.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",c)}g.data.preventDefault()},a)}function Z(a){function b(b){var c="rtl"==f.lang.dir,n=k.width,q=k.height,G=n+(b.data.$.screenX-m.x)*(c?-1:1)*(a._.moved?1:2),H=q+(b.data.$.screenY-m.y)*(a._.moved?1:2),B=a._.element.getFirst(),B=c&&B.getComputedStyle("right"),C=a.getPosition();C.y+H>p.height&&(H=p.height-C.y);(c?B:C.x)+G>p.width&&(G=p.width-(c?B:C.x));if(d==CKEDITOR.DIALOG_RESIZE_WIDTH||
+d==CKEDITOR.DIALOG_RESIZE_BOTH)n=Math.max(e.minWidth||0,G-g);if(d==CKEDITOR.DIALOG_RESIZE_HEIGHT||d==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(e.minHeight||0,H-h);a.resize(n,q);a._.moved||a.layout();b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mouseup",c);CKEDITOR.document.removeListener("mousemove",b);q&&(q.remove(),q=null);if(CKEDITOR.env.ie6Compat){var a=u.getChild(0).getFrameDocument();a.removeListener("mouseup",c);a.removeListener("mousemove",b)}}var e=a.definition,d=e.resizable;
+if(d!=CKEDITOR.DIALOG_RESIZE_NONE){var f=a.getParentEditor(),g,h,p,m,k,q,n=CKEDITOR.tools.addFunction(function(d){k=a.getSize();var e=a.parts.contents;e.$.getElementsByTagName("iframe").length&&(q=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%;"\x3e\x3c/div\x3e'),e.append(q));h=k.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));g=k.width-a.parts.contents.getSize("width",
+1);m={x:d.screenX,y:d.screenY};p=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);CKEDITOR.env.ie6Compat&&(e=u.getChild(0).getFrameDocument(),e.on("mousemove",b),e.on("mouseup",c));d.preventDefault&&d.preventDefault()});a.on("load",function(){var b="";d==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":d==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+
+b+" cke_resizer_"+f.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(f.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+n+', event )"\x3e'+("ltr"==f.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});f.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function I(a){a.data.preventDefault(1)}function N(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=CKEDITOR.skinName||a.config.skin,d=c.dialog_backgroundCoverColor||("moono-lisa"==e?"black":"white"),e=c.dialog_backgroundCoverOpacity,
+f=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,e,f),g=z[c];g?g.show():(f=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",f,"; top: 0px; left: 0px; ",CKEDITOR.env.ie6Compat?"":"background-color: "+d,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(d="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+d+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",f.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),
+f.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())"),f.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),f.push("\x3c/div\x3e"),g=CKEDITOR.dom.element.createFromHtml(f.join("")),g.setOpacity(void 0!==e?e:.5),g.on("keydown",I),g.on("keypress",I),g.on("keyup",I),g.appendTo(CKEDITOR.document.getBody()),
+z[c]=g);a.focusManager.add(g);u=g;a=function(){var a=b.getViewPaneSize();g.setStyles({width:a.width+"px",height:a.height+"px"})};var h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;g.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do a=c.getPosition(),c.move(a.x,a.y);while(c=c._.parentDialog)}};J=a;b.on("resize",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||g.focus();if(CKEDITOR.env.ie6Compat){var p=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){p.prevScrollHandler=
+window.onscroll||function(){};window.onscroll=p},0);h()}}function O(a){u&&(a.focusManager.remove(u),a=CKEDITOR.document.getWindow(),u.hide(),a.removeListener("resize",J),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),J=null)}var v=CKEDITOR.tools.cssLength,W='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+
+CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"position:absolute" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e';
+CKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function e(a){var b=l._.focusList;a=a||0;if(!(1>b.length)){var c=l._.currentFocusIndex;l._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(d){}var e=c,g=1<l._.pageCount;do{e+=a;if(g&&!l._.tabBarMode&&(e==b.length||-1==e)){l._.tabBarMode=!0;l._.tabs[l._.currentTabId][0].focus();
+l._.currentFocusIndex=-1;return}e=(e+b.length)%b.length;if(e==c)break}while(a&&!b[e].isFocusable());b[e].focus();"text"==b[e].type&&b[e].select()}}function d(b){if(l==CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),d="rtl"==a.lang.dir,g=[37,38,39,40];q=n=0;if(9==c||c==CKEDITOR.SHIFT+9)e(c==CKEDITOR.SHIFT+9?-1:1),q=1;else if(c==CKEDITOR.ALT+121&&!l._.tabBarMode&&1<l.getPageCount())l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),l._.currentFocusIndex=-1,q=1;else if(-1!=CKEDITOR.tools.indexOf(g,
+c)&&l._.tabBarMode)c=-1!=CKEDITOR.tools.indexOf([d?39:37,38],c)?x.call(l):A.call(l),l.selectPage(c),l._.tabs[c][0].focus(),q=1;else if(13!=c&&32!=c||!l._.tabBarMode)if(13==c)c=b.data.getTarget(),c.is("a","button","select","textarea")||c.is("input")&&"button"==c.$.type||((c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),q=1),n=1;else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),n=1;else return;else this.selectPage(this._.currentTabId),
+this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1),q=1;f(b)}}function f(a){q?a.data.preventDefault(1):n&&a.data.stopPropagation()}var g=CKEDITOR.dialog._.dialogDefinitions[b],h=CKEDITOR.tools.clone(aa),p=a.config.dialog_buttonsOrder||"OS",m=a.lang.dir,k={},q,n;("OS"==p&&CKEDITOR.env.mac||"rtl"==p&&"ltr"==m||"ltr"==p&&"rtl"==m)&&h.buttons.reverse();g=CKEDITOR.tools.extend(g(a),h);g=CKEDITOR.tools.clone(g);g=new P(this,g);h=V(a);this._={editor:a,element:h.element,name:b,contentSize:{width:0,height:0},
+size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=h.parts;CKEDITOR.tools.setTimeout(function(){a.fire("ariaWidget",this.parts.contents)},0,this);h={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};h["rtl"==m?"right":"left"]=0;this.parts.dialog.setStyles(h);CKEDITOR.event.call(this);this.definition=g=CKEDITOR.fire("dialogDefinition",
+{name:b,definition:g},a).definition;if(!("removeDialogTabs"in a._)&&a.config.removeDialogTabs){h=a.config.removeDialogTabs.split(";");for(m=0;m<h.length;m++)if(p=h[m].split(":"),2==p.length){var r=p[0];k[r]||(k[r]=[]);k[r].push(p[1])}a._.removeDialogTabs=k}if(a._.removeDialogTabs&&(k=a._.removeDialogTabs[b]))for(m=0;m<k.length;m++)g.removeContents(k[m]);if(g.onLoad)this.on("load",g.onLoad);if(g.onShow)this.on("show",g.onShow);if(g.onHide)this.on("hide",g.onHide);if(g.onOk)this.on("ok",function(b){a.fire("saveSnapshot");
+setTimeout(function(){a.fire("saveSnapshot")},0);!1===g.onOk.call(this,b)&&(b.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(g.onCancel)this.on("cancel",function(a){!1===g.onCancel.call(this,a)&&(a.data.hide=!1)});var l=this,t=function(a){var b=l._.contents,c=!1,d;for(d in b)for(var e in b[d])if(c=a.call(this,b[d][e]))return};this.on("ok",function(a){t(function(b){if(b.validate){var c=b.validate(this),d="string"==typeof c||!1===c;d&&(a.data.hide=!1,a.stop());T.call(b,!d,"string"==typeof c?
+c:void 0);return d}})},this,null,0);this.on("cancel",function(b){t(function(c){if(c.isChanged())return a.config.dialog_noConfirmCancel||confirm(a.lang.common.confirmCancel)||(b.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=e;var y=this._.element;a.focusManager.add(y,1);this.on("show",function(){y.on("keydown",d,this);if(CKEDITOR.env.gecko)y.on("keypress",f,this)});this.on("hide",
+function(){y.removeListener("keydown",d);CKEDITOR.env.gecko&&y.removeListener("keypress",f);t(function(a){U.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",d,this,null,0)});this.on("show",function(){c();var b=1<l._.pageCount;a.config.dialog_startupFocusTab&&b?(l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),l._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=b?-1:this._.focusList.length-1,g.onFocus?
+(b=g.onFocus.call(this))&&b.focus():e(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);Y(this);Z(this);(new CKEDITOR.dom.text(g.title,CKEDITOR.document)).appendTo(this.parts.title);for(m=0;m<g.contents.length;m++)(k=g.contents[m])&&this.addPage(k);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),
+this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1)),a.data.preventDefault())},this);m=[];k=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:g.buttons},m).getChild();this.parts.footer.setHtml(m.join(""));for(m=0;m<k.length;m++)this._.buttons[k[m].id]=k[m]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){this._.contentSize&&this._.contentSize.width==
+a&&this._.contentSize.height==b||(CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b})}}(),getSize:function(){var a=this._.element.getFirst();
+return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var e=this._.element.getFirst(),d="rtl"==this._.editor.lang.dir,f="fixed"==e.getComputedStyle("position");CKEDITOR.env.ie&&e.setStyle("zoom","100%");f&&this._.position&&this._.position.x==a&&this._.position.y==b||(this._.position={x:a,y:b},f||(f=CKEDITOR.document.getWindow().getScrollPosition(),a+=f.x,b+=f.y),d&&(f=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-f.width-a),b={top:(0<b?b:0)+"px"},
+b[d?"right":"left"]=(0<a?a:0)+"px",e.setStyles(b),c&&(this._.moved=1))},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;a.getParent()&&a.getParent().equals(CKEDITOR.document.getBody())?a.setStyle("display","block"):a.appendTo(CKEDITOR.document.getBody());this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);
+null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,N(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);
+a.on("keydown",Q);a.on("keyup",R);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],e=this._.tabs[a.id],d=a.requiredContent,f=0;if(e){for(var g in this._.contents[a.id]){var h=this._.contents[a.id][g];"hbox"!=h.type&&"vbox"!=h.type&&h.getInputElement()&&(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),f++))}!f||d&&!this._.editor.activeFilter.check(d)?e[0].addClass("cke_dialog_tab_disabled"):e[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();
+X(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),e=(c.width-b.width)/2,d=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<d?d:0)>c.height||
+b.width+(0<e?e:0)>c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},
+commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(ba(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();
+if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else O(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",Q);a.removeListener("keyup",R);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;
+this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),d=this._.contents[a.id]={},f=e.getChild(),
+g=0;e=f.shift();)e.notAllowed||"hbox"==e.type||"vbox"==e.type||g++,d[e.id]=e,"function"==typeof e.getChild&&f.push.apply(f,e.getChild());g||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");e=CKEDITOR.env;d="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",c,a.hidden?' style\x3d"display:none"':"",' id\x3d"',d,'"',e.gecko&&!e.hc?"":' href\x3d"javascript:void(0)"',
+' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].join(""));b.setAttribute("aria-labelledby",d);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(S(this,this,"CTRL+"+a.accessKey,ca,da),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&
+!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],e=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),e.hide());e.setAttribute("aria-hidden",b!=a)}var d=this._.tabs[a];d[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(K(d[1]),d[1].show(),setTimeout(function(){K(d[1],1)},0)):d[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},
+updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&1!=this._.pageCount&&b.isVisible()&&(a==this._.currentTabId&&this.selectPage(x.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},
+getContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},
+getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if("undefined"==typeof b)b=this._.focusList.length,this._.focusList.push(new L(this,a,b));else{this._.focusList.splice(b,0,new L(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var b=this.getParentEditor().lang.dir,c={attributes:{"class":"cke_dialog_spinner"},
+styles:{"float":"rtl"==b?"right":"left"}};c.styles["margin-"+("rtl"==b?"left":"right")]="8px";this.parts.spinner=CKEDITOR.document.createElement("div",c);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){this._.dialogDefinitions[a]&&
+"function"!=typeof b||(this._.dialogDefinitions[a]=b)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",
+{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,
+b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var aa={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},D=function(a,b,c){for(var e=0,d;d=a[e];e++)if(d.id==b||c&&d[c]&&(d=D(d[c],
+b,c)))return d;return null},E=function(a,b,c,e,d){if(c){for(var f=0,g;g=a[f];f++){if(g.id==c)return a.splice(f,0,b),b;if(e&&g[e]&&(g=E(g[e],b,c,e,!0)))return g}if(d)return null}a.push(b);return b},F=function(a,b,c){for(var e=0,d;d=a[e];e++){if(d.id==b)return a.splice(e,1);if(c&&d[c]&&(d=F(d[c],b,c)))return d}return null},P=function(a,b){this.dialog=a;for(var c=b.contents,e=0,d;d=c[e];e++)c[e]=d&&new M(a,d);CKEDITOR.tools.extend(this,b)};P.prototype={getContents:function(a){return D(this.contents,
+a)},getButton:function(a){return D(this.buttons,a)},addContents:function(a,b){return E(this.contents,a,b)},addButton:function(a,b){return E(this.buttons,a,b)},removeContents:function(a){F(this.contents,a)},removeButton:function(a){F(this.buttons,a)}};M.prototype={get:function(a){return D(this.elements,a,"children")},add:function(a,b){return E(this.elements,a,b,"children")},remove:function(a){F(this.elements,a,"children")}};var J,z={},u,w={},Q=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=
+a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);(b=w[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},R=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);(b=w[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),
+a.data.preventDefault()))},S=function(a,b,c,e,d){(w[c]||(w[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:d||a.accessKeyUp,keydown:e||a.accessKeyDown})},ba=function(a){for(var b in w){for(var c=w[b],e=c.length-1;0<=e;e--)c[e].dialog!=a&&c[e].uiElement!=a||c.splice(e,1);0===c.length&&delete w[b]}},da=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},ca=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,e,d,f,g){if(!(4>arguments.length)){var h=(e.call?e(b):e)||
+"div",p=["\x3c",h," "],m=(d&&d.call?d(b):d)||{},k=(f&&f.call?f(b):f)||{},q=(g&&g.call?g.call(this,a,b):g)||"",n=this.domId=k.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(m.display="none",this.notAllowed=!0);k.id=n;var r={};b.type&&(r["cke_dialog_ui_"+b.type]=1);b.className&&(r[b.className]=1);b.disabled&&(r.cke_disabled=1);for(var l=k["class"]&&k["class"].split?k["class"].split(" "):[],n=0;n<l.length;n++)l[n]&&(r[l[n]]=1);l=
+[];for(n in r)l.push(n);k["class"]=l.join(" ");b.title&&(k.title=b.title);r=(b.style||"").split(";");b.align&&(l=b.align,m["margin-left"]="left"==l?0:"auto",m["margin-right"]="right"==l?0:"auto");for(n in m)r.push(n+":"+m[n]);b.hidden&&r.push("display:none");for(n=r.length-1;0<=n;n--)""===r[n]&&r.splice(n,1);0<r.length&&(k.style=(k.style?k.style+"; ":"")+r.join("; "));for(n in k)p.push(n+'\x3d"'+CKEDITOR.tools.htmlEncode(k[n])+'" ');p.push("\x3e",q,"\x3c/",h,"\x3e");c.push(p.join(""));(this._||(this._=
+{})).dialog=a;"boolean"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);
+this.registerEvents(b);this.accessKeyUp&&this.accessKeyDown&&b.accessKey&&S(this,a,"CTRL+"+b.accessKey);var t=this;a.on("load",function(){var b=t.getInputElement();if(b){var c=t.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;t.fire("focus");c&&this.addClass(c)});b.on("blur",function(){t.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);this.keyboardFocusable&&(this.tabIndex=
+b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=t.focusIndex}))}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var f=this._.children=b,g=d&&d.widths||null,h=d&&d.height||null,p,m={role:"presentation"};d&&d.align&&(m.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"hbox"},e,"table",{},m,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(p=0;p<c.length;p++){var b="cke_dialog_ui_hbox_child",
+e=[];0===p&&(b="cke_dialog_ui_hbox_first");p==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',b,'" role\x3d"presentation" ');g?g[p]&&e.push("width:"+v(g[p])):e.push("width:"+Math.floor(100/c.length)+"%");h&&e.push("height:"+v(h));d&&void 0!==d.padding&&e.push("padding:"+v(d.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f[p].align&&e.push("text-align:"+f[p].align);0<e.length&&a.push('style\x3d"'+e.join("; ")+'" ');a.push("\x3e",c[p],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");
+return a.join("")})}},vbox:function(a,b,c,e,d){if(!(3>arguments.length)){this._||(this._={});var f=this._.children=b,g=d&&d.width||null,h=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" '];b.push('style\x3d"');d&&d.expand&&b.push("height:100%;");b.push("width:"+v(g||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align\x3d"',
+CKEDITOR.tools.htmlEncode(d&&d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("\x3e\x3ctbody\x3e");for(var e=0;e<c.length;e++){var k=[];b.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');g&&k.push("width:"+v(g||"100%"));h?k.push("height:"+v(h[e])):d&&d.expand&&k.push("height:"+Math.floor(100/c.length)+"%");d&&void 0!==d.padding&&k.push("padding:"+v(d.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f[e].align&&k.push("text-align:"+f[e].align);0<k.length&&b.push('style\x3d"',
+k.join("; "),'" ');b.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e',c[e],"\x3c/td\x3e\x3c/tr\x3e")}b.push("\x3c/tbody\x3e\x3c/table\x3e");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},
+isChanged:function(){return!1},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},d;for(d in a)if(c=
+d.match(b))this.eventProcessors[d]?this.eventProcessors[d].call(this,this._.dialog,a[d]):e(this,this._.dialog,c[1].toLowerCase(),a[d]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show",b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=
+this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return this.isEnabled()&&this.isVisible()?!0:!1}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>
+a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,e){for(var d=c.children,f,g=[],h=[],p=0;p<d.length&&(f=d[p]);p++){var m=[];g.push(m);h.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,m))}return new CKEDITOR.ui.dialog[c.type](a,h,g,e,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",
+a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,f=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=
+arguments;return function(){var b=this&&this.getValue?this.getValue():a[0],c,d=CKEDITOR.VALIDATE_AND,e=[],f;for(f=0;f<a.length;f++)if("function"==typeof a[f])e.push(a[f]);else break;f<a.length&&"string"==typeof a[f]&&(c=a[f],f++);f<a.length&&"number"==typeof a[f]&&(d=a[f]);var n=d==CKEDITOR.VALIDATE_AND?!0:!1;for(f=0;f<e.length;f++)n=d==CKEDITOR.VALIDATE_AND?n&&e[f](b):n||e[f](b);return n?!0:c}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return a.test(c)?!0:b}},
+notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return f.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},
+notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in z)z[c].remove();z={}}a=a.editor._.storedDialogs;for(var d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,e=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&N(this);if("function"==typeof e)c=
+this._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c,c),c.show();else{if("failed"==e)throw O(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})})();
+CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(x){x.on("doubleclick",function(A){A.data.dialog&&x.openDialog(A.data.dialog)},null,null,999)}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var c=this;b.addCommand("a11yHelp",{exec:function(){var a=b.langCode,
+a=c.availableLangs[a]?a:c.availableLangs[a.replace(/-.*/,"")]?a.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+a+".js"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");b.on("ariaEditorHelpLabel",function(a){a.data.label=b.lang.common.editorHelp})}})})();CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var b=a.addCommand("about",new CKEDITOR.dialogCommand("about"));b.modes={wysiwyg:1,source:1};b.canUndo=!1;b.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});(function(){function h(a){function m(){e=a.document;n=e[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();c=CKEDITOR.env.quirks?e.getBody():e.getDocumentElement();var d=CKEDITOR.env.quirks?c:c.findOne("body");d&&(d.setStyle("height","auto"),d.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));f=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",e)}function g(){k&&
+c.setStyle("overflow-y","hidden");var d=a.window.getViewPaneSize().height,b;n.append(f);b=f.getDocumentPosition(e).y+f.$.offsetHeight;f.remove();b+=h;b=Math.max(b,r);b=Math.min(b,p);b!=d&&l!=b&&(b=a.fire("autoGrow",{currentHeight:d,newHeight:b}).newHeight,a.resize(a.container.getStyle("width"),b,!0),l=b);k||(b<p&&c.$.scrollHeight>c.$.clientHeight?c.setStyle("overflow-y","hidden"):c.removeStyle("overflow-y"))}var l,e,n,c,f,h=a.config.autoGrow_bottomSpace||0,r=void 0!==a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:
+200,p=a.config.autoGrow_maxHeight||Infinity,k=!a.config.autoGrow_maxHeight;a.addCommand("autogrow",{exec:g,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var t={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},q;for(q in t)a.on(q,function(d){"wysiwyg"==d.editor.mode&&setTimeout(function(){var b=a.getCommand("maximize");!a.window||b&&b.state==CKEDITOR.TRISTATE_ON?l=null:(g(),k||g())},100)});a.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&
+(a.data.command.state==CKEDITOR.TRISTATE_ON?c.removeStyle("overflow-y"):g())});a.on("contentDom",m);m();a.config.autoGrow_onStartup&&a.editable().isVisible()&&a.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){a.editable().isInline()?a.ui.space("contents").setStyle("height","auto"):h(a)})}})})();CKEDITOR.plugins.add("basicstyles",{init:function(c){var e=0,d=function(g,d,b,a){if(a){a=new CKEDITOR.style(a);var f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{label:d,command:b,toolbar:"basicstyles,"+(e+=10)})}},h={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==
+a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=c.config,a=c.lang.basicstyles;d("Bold",a.bold,"bold",b.coreStyles_bold);d("Italic",a.italic,"italic",b.coreStyles_italic);d("Underline",a.underline,"underline",b.coreStyles_underline);d("Strike",a.strike,"strike",b.coreStyles_strike);d("Subscript",a.subscript,
+"subscript",b.coreStyles_subscript);d("Superscript",a.superscript,"superscript",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};
+CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){function q(a,f,d,b){if(!a.isReadOnly()&&!a.equals(d.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);b=a;for(var c=d.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b="useComputedState"in d.config?d.config.useComputedState:1;(b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f&&(a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&&
+a.setAttribute("dir",f)):a.setAttribute("dir",f),d.forceNextSelectionCheck())}}function v(a,f,d){var b=a.getCommonAncestor(!1,!0);a=a.clone();a.enlarge(d==CKEDITOR.ENTER_BR?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(a.checkBoundaryOfElement(b,CKEDITOR.START)&&a.checkBoundaryOfElement(b,CKEDITOR.END)){for(var c;b&&b.type==CKEDITOR.NODE_ELEMENT&&(c=b.getParent())&&1==c.getChildCount()&&!(b.getName()in f);)b=c;return b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in f&&b}}function p(a){return{context:"p",
+allowedContent:{"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td":{propertiesOnly:!0,attributes:"dir"}},requiredContent:"p[dir]",refresh:function(a,d){var b=a.config.useComputedState,c,b=void 0===b||b;if(!b){c=d.lastElement;for(var h=a.editable();c&&!(c.getName()in u||c.equals(h));){var e=c.getParent();if(!e)break;c=e}}c=c||d.block||d.blockLimit;c.equals(a.editable())&&(h=a.getSelection().getRanges()[0].getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(c=h);c&&(b=b?c.getComputedStyle("direction"):
+c.getStyle("direction")||c.getAttribute("dir"),a.getCommand("bidirtl").setState("rtl"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),a.getCommand("bidiltr").setState("ltr"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF));b=(d.block||d.blockLimit||a.editable()).getDirection(1);b!=(a._.selDir||a.lang.dir)&&(a._.selDir=b,a.fire("contentDirChanged",b))},exec:function(f){var d=f.getSelection(),b=f.config.enterMode,c=d.getRanges();if(c&&c.length){for(var h={},e=d.createBookmarks(),c=c.createIterator(),g,
+l=0;g=c.getNextRange(1);){var k=g.getEnclosedNode();k&&(!k||k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in r)||(k=v(g,t,b));k&&q(k,a,f,h);var m=new CKEDITOR.dom.walker(g),n=e[l].startNode,p=e[l++].endNode;m.evaluator=function(a){var c=b==CKEDITOR.ENTER_P?"p":"div",d;if(d=(a?a.type==CKEDITOR.NODE_ELEMENT:!1)&&a.getName()in t){if(c=a.is(c))c=(c=a.getParent())?c.type==CKEDITOR.NODE_ELEMENT:!1;d=!(c&&a.getParent().is("blockquote"))}return!!(d&&a.getPosition(n)&CKEDITOR.POSITION_FOLLOWING&&(a.getPosition(p)&
+CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_CONTAINS)==CKEDITOR.POSITION_PRECEDING)};for(;k=m.next();)q(k,a,f,h);g=g.createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;k=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)q(k,a,f,h)}CKEDITOR.dom.element.clearAllMarkers(h);f.forceNextSelectionCheck();d.selectBookmarks(e);f.focus()}}}}function w(a){var f=a==l.setAttribute,d=a==l.removeAttribute,b=/\bdirection\s*:\s*(.*?)\s*(:?$|;)/;return function(c,h){if(!this.isReadOnly()){var e;if(e=c==(f||d?
+"dir":"direction")||"style"==c&&(d||b.test(h))){a:{e=this;for(var g=e.getDocument().getBody().getParent();e;){if(e.equals(g)){e=!1;break a}e=e.getParent()}e=!0}e=!e}if(e&&(e=this.getDirection(1),g=a.apply(this,arguments),e!=this.getDirection(1)))return this.getDocument().fire("dirChanged",this),g}return a.apply(this,arguments)}}var t={table:1,ul:1,ol:1,blockquote:1,div:1},r={},u={};CKEDITOR.tools.extend(r,t,{tr:1,p:1,div:1,li:1});CKEDITOR.tools.extend(u,r,{td:1});CKEDITOR.plugins.add("bidi",{init:function(a){function f(b,
+c,d,e,f){a.addCommand(d,new CKEDITOR.command(a,e));a.ui.addButton&&a.ui.addButton(b,{label:c,command:d,toolbar:"bidi,"+f})}if(!a.blockless){var d=a.lang.bidi;f("BidiLtr",d.ltr,"bidiltr",p("ltr"),10);f("BidiRtl",d.rtl,"bidirtl",p("rtl"),20);a.on("contentDom",function(){a.document.on("dirChanged",function(b){a.fire("dirChanged",{node:b.data,dir:b.data.getDirection(1)})})});a.on("contentDirChanged",function(b){b=(a.lang.dir!=b.data?"add":"remove")+"Class";var c=a.ui.space(a.config.toolbarLocation);if(c)c[b]("cke_mixed_dir_content")})}}});
+for(var l=CKEDITOR.dom.element.prototype,n=["setStyle","removeStyle","setAttribute","removeAttribute"],m=0;m<n.length;m++)l[n[m]]=CKEDITOR.tools.override(l[n[m]],w)})();(function(){var m={exec:function(g){var a=g.getCommand("blockquote").state,k=g.getSelection(),c=k&&k.getRanges()[0];if(c){var h=k.createBookmarks();if(CKEDITOR.env.ie){var e=h[0].startNode,b=h[0].endNode,d;if(e&&"blockquote"==e.getParent().getName())for(d=e;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){e.move(d,!0);break}if(b&&"blockquote"==b.getParent().getName())for(d=b;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){b.move(d);break}}var f=c.createIterator();
+f.enlargeBr=g.config.enterMode!=CKEDITOR.ENTER_BR;if(a==CKEDITOR.TRISTATE_OFF){for(e=[];a=f.getNextParagraph();)e.push(a);1>e.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text("﻿",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;b<e.length;b++)a=e[b],d=d.getCommonAncestor(a.getParent());for(a={table:1,tbody:1,
+tr:1,ol:1,ul:1};a[d.getName()];)d=d.getParent();for(b=null;0<e.length;){for(a=e.shift();!a.getParent().equals(d);)a=a.getParent();a.equals(b)||c.push(a);b=a}for(;0<c.length;)if(a=c.shift(),"blockquote"==a.getName()){for(b=new CKEDITOR.dom.documentFragment(g.document);a.getFirst();)b.append(a.getFirst().remove()),e.push(b.getLast());b.replace(a)}else e.push(a);c=g.document.createElement("blockquote");for(c.insertBefore(e[0]);0<e.length;)a=e.shift(),c.append(a)}else if(a==CKEDITOR.TRISTATE_ON){b=[];
+for(d={};a=f.getNextParagraph();){for(e=c=null;a.getParent();){if("blockquote"==a.getParent().getName()){c=a.getParent();e=a;break}a=a.getParent()}c&&e&&!e.getCustomData("blockquote_moveout")&&(b.push(e),CKEDITOR.dom.element.setMarker(d,e,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);a=[];e=[];for(d={};0<b.length;)f=b.shift(),c=f.getParent(),f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),e.push(f.getNext())):f.remove().insertAfter(c):f.remove().insertBefore(c),c.getCustomData("blockquote_processed")||
+(e.push(c),CKEDITOR.dom.element.setMarker(d,c,"blockquote_processed",!0)),a.push(f);CKEDITOR.dom.element.clearAllMarkers(d);for(b=e.length-1;0<=b;b--){c=e[b];a:{d=c;for(var f=0,m=d.getChildCount(),l=void 0;f<m&&(l=d.getChild(f));f++)if(l.type==CKEDITOR.NODE_ELEMENT&&l.isBlockBoundary()){d=!1;break a}d=!0}d&&c.remove()}if(g.config.enterMode==CKEDITOR.ENTER_BR)for(c=!0;a.length;)if(f=a.shift(),"div"==f.getName()){b=new CKEDITOR.dom.documentFragment(g.document);!c||!f.getPrevious()||f.getPrevious().type==
+CKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()||b.append(g.document.createElement("br"));for(c=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(b);c&&b.append(g.document.createElement("br"));b.replace(f);c=!1}}k.selectBookmarks(h);g.focus()}},refresh:function(g,a){this.setState(g.elementPath(a.block||a.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",
+requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(g){g.blockless||(g.addCommand("blockquote",m),g.ui.addButton&&g.ui.addButton("Blockquote",{label:g.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();(function(){var c='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(c+=
+' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var c=c+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"'),c=c+'\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',
+t=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),u=CKEDITOR.addTemplate("button",c);CKEDITOR.plugins.add("button",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};
+CKEDITOR.ui.button.prototype={render:function(a,b){function c(){var f=a.mode;f&&(f=this.modes[f]?void 0!==m[f]?m[f]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,f=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:f,this.setState(f),this.refresh&&this.refresh())}var n=CKEDITOR.env,p=this._.id=CKEDITOR.tools.getNextId(),g="",d=this.command,q,k,h;this._.editor=a;var e={id:p,button:this,editor:a,focus:function(){CKEDITOR.document.getById(p).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},
+v=CKEDITOR.tools.addFunction(function(a){if(e.onkey)return a=new CKEDITOR.dom.event(a),!1!==e.onkey(e,a.getKeystroke())}),w=CKEDITOR.tools.addFunction(function(a){var b;e.onfocus&&(b=!1!==e.onfocus(e,new CKEDITOR.dom.event(a)));return b}),r=0;e.clickFn=q=CKEDITOR.tools.addFunction(function(){r&&(a.unlockSelection(1),r=0);e.execute();n.iOS&&a.focus()});if(this.modes){var m={};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(m[a.mode]=this._.state)},this);a.on("activeFilterChange",
+c,this);a.on("mode",c,this);!this.readOnly&&a.on("readOnly",c,this)}else d&&(d=a.getCommand(d))&&(d.on("state",function(){this.setState(d.state)},this),g+=d.state==CKEDITOR.TRISTATE_ON?"on":d.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst();b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(l,
+"rtl"==b,this.icon,this.iconOffset))},this);d?(k=a.getCommandKeystroke(d))&&(h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,k)):g+="off";var l=k=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(l=this.icon,this.icon=null);g={id:p,name:k,iconName:l,label:this.label,cls:this.className||"",state:g,ariaDisabled:"disabled"==g?"true":"false",title:this.title+(h?" ("+h.display+")":""),ariaShortcut:h?a.lang.common.keyboardShortcut+" "+h.aria:"",titleJs:n.gecko&&!n.hc?"":(this.title||
+"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:v,focusFn:w,clickFn:q,style:CKEDITOR.skin.getIconStyle(l,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?t.output():""};u.output(g,b);if(this.onRender)this.onRender();return e},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled"),
+this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;this.allowedContent||this.requiredContent||!this.command||(b=a.getCommand(this.command)||b);return this._.feature=
+b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();(function(){function q(b,a,c){a.type||(a.type="auto");if(c&&!1===b.fire("beforePaste",a)||!a.dataValue&&a.dataTransfer.isEmpty())return!1;a.dataValue||(a.dataValue="");if(CKEDITOR.env.gecko&&"drop"==a.method&&b.toolbox)b.once("afterPaste",function(){b.toolbox.focus()});return b.fire("paste",a)}function z(b){function a(){var a=b.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(a){b.readOnly&&"cut"==a.name||m.initPasteDataTransfer(a,b);a.data.preventDefault()};a.on("copy",
+c);a.on("cut",c);a.on("cut",function(){b.readOnly||b.extractSelectedHtml()},null,null,999)}a.on(m.mainPasteEvent,function(b){"beforepaste"==m.mainPasteEvent&&p||u(b)});"beforepaste"==m.mainPasteEvent&&(a.on("paste",function(a){v||(f(),a.data.preventDefault(),u(a),d("paste")||b.openDialog("paste"))}),a.on("contextmenu",g,null,null,0),a.on("beforepaste",function(b){!b.data||b.data.$.ctrlKey||b.data.$.shiftKey||g()},null,null,0));a.on("beforecut",function(){!p&&h(b)});var e;a.attachListener(CKEDITOR.env.ie?
+a:b.document.getDocumentElement(),"mouseup",function(){e=setTimeout(function(){r()},0)});b.on("destroy",function(){clearTimeout(e)});a.on("keyup",r)}function c(a){return{type:a,canUndo:"cut"==a,startDisabled:!0,fakeKeystroke:"cut"==a?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&h();var a;var c=this.type;if(CKEDITOR.env.ie)a=d(c);else try{a=b.document.$.execCommand(c,!1,null)}catch(g){a=!1}a||b.showNotification(b.lang.clipboard[this.type+"Error"]);return a}}}function e(){return{canUndo:!1,
+async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(b,a){var c=this,d=function(a,d){a&&q(b,a,!!d);b.fire("afterCommandExec",{name:"paste",command:c,returnValue:!!a})};"string"==typeof a?d({dataValue:a,method:"paste",dataTransfer:m.initPasteDataTransfer()},1):b.getClipboardData(d)}}}function f(){v=1;setTimeout(function(){v=0},100)}function g(){p=1;setTimeout(function(){p=0},10)}function d(a){var c=b.document,d=c.getBody(),g=!1,e=function(){g=!0};d.on(a,e);7<CKEDITOR.env.version?c.$.execCommand(a):
+c.$.selection.createRange().execCommand(a);d.removeListener(a,e);return g}function h(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var a=b.getSelection(),c,d,g;a.getType()==CKEDITOR.SELECTION_ELEMENT&&(c=a.getSelectedElement())&&(d=a.getRanges()[0],g=b.document.createText(""),g.insertBefore(c),d.setStartBefore(g),d.setEndAfter(c),a.selectRanges([d]),setTimeout(function(){c.getParent()&&(g.remove(),a.selectElement(c))},0))}}function n(a,c){var d=b.document,g=b.editable(),e=function(b){b.cancel()},h;
+if(!d.getById("cke_pastebin")){var k=b.getSelection(),u=k.createBookmarks();CKEDITOR.env.ie&&k.root.fire("selectionchange");var l=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&!g.is("body")||CKEDITOR.env.ie?"div":"body",d);l.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var f=0,d=d.getWindow();CKEDITOR.env.webkit?(g.append(l),l.addClass("cke_editable"),g.is("body")||(f="static"!=g.getComputedStyle("position")?g:CKEDITOR.dom.element.get(g.$.offsetParent),f=f.getDocumentPosition().y)):g.getAscendant(CKEDITOR.env.ie?
+"body":"html",1).append(l);l.setStyles({position:"absolute",top:d.getScrollPosition().y-f+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&l.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(f=l.getParent().isReadOnly())?(l.setOpacity(0),l.setAttribute("contenteditable",!0)):l.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-10000px");b.on("selectionChange",e,null,null,0);if(CKEDITOR.env.webkit||
+CKEDITOR.env.gecko)h=g.once("blur",e,null,null,-100);f&&l.focus();f=new CKEDITOR.dom.range(l);f.selectNodeContents(l);var n=f.select();CKEDITOR.env.ie&&(h=g.once("blur",function(){b.lockSelection(n)}));var r=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=r);h&&h.removeListener();CKEDITOR.env.ie&&g.focus();k.selectBookmarks(u);l.remove();var a;CKEDITOR.env.webkit&&(a=l.getFirst())&&a.is&&a.hasClass("Apple-style-span")&&
+(l=a);b.removeListener("selectionChange",e);c(l.getHtml())},0)}}function w(){if("paste"==m.mainPasteEvent)return b.fire("beforePaste",{type:"auto",method:"paste"}),!1;b.focus();f();var a=b.focusManager;a.lock();if(b.editable().fire(m.mainPasteEvent)&&!d("paste"))return a.unlock(),!1;a.unlock();return!0}function k(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();f();"paste"==m.mainPasteEvent&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+
+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},50)}}function u(a){var c={type:"auto",method:"paste",dataTransfer:m.initPasteDataTransfer(a)};c.dataTransfer.cacheData();var d=!1!==b.fire("beforePaste",c);d&&m.canClipboardApiBeTrusted(c.dataTransfer,b)?(a.data.preventDefault(),setTimeout(function(){q(b,c)},0)):n(a,function(a){c.dataValue=a.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");d&&q(b,c)})}function r(){if("wysiwyg"==b.mode){var a=t("paste");b.getCommand("cut").setState(t("cut"));
+b.getCommand("copy").setState(t("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function t(a){if(x&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;a=b.getSelection();var c=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==c.length&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var m=CKEDITOR.plugins.clipboard,p=0,v=0,x=0;(function(){b.on("key",k);b.on("contentDom",a);b.on("selectionChange",function(b){x=
+b.data.selection.getRanges()[0].checkReadOnly();r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){x=a.getRanges()[0].checkReadOnly();return{cut:t("cut"),copy:t("copy"),paste:t("paste")}})})();(function(){function a(c,d,g,e,h){var k=b.lang.clipboard[d];b.addCommand(d,g);b.ui.addButton&&b.ui.addButton(c,{label:k,command:d,toolbar:"clipboard,"+e});b.addMenuItems&&b.addMenuItem(d,{label:k,command:d,group:"clipboard",order:h})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste",
+"paste",e(),30,8)})();b.getClipboardData=function(a,c){function d(a){a.removeListener();a.cancel();c(a.data)}function g(a){a.removeListener();a.cancel();f=!0;c({type:k,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}function e(){this.customTitle=a&&a.title}var h=!1,k="auto",f=!1;c||(c=a,a=null);b.on("paste",d,null,null,0);b.on("beforePaste",function(a){a.removeListener();h=!0;k=a.data.type},null,null,1E3);!1===w()&&(b.removeListener("paste",d),h&&b.fire("pasteDialog",
+e)?(b.on("pasteDialogCommit",g),b.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",g);setTimeout(function(){f||c(null)},10)})):c(null))}}function A(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!b.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";
+return"htmlifiedtext"}function B(b,a){function c(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}a=a.replace(/\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi,"\x3cbr\x3e");a=a.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf("\x3cdiv\x3e")&&(a=a.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),
+a.match(/<div>(<br>|)<\/div>/)&&(a="\x3cp\x3e"+a.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return c(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),a=a.replace(/<\/div><div>/g,"\x3cbr\x3e"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<a.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(a="\x3cp\x3e"+a.replace(/(<br>){2,}/g,function(a){return c(a.length/4)})+"\x3c/p\x3e"));return C(b,a)}function D(){function b(){var a=
+{},b;for(b in CKEDITOR.dtd)"$"!=b.charAt(0)&&"div"!=b&&"span"!=b&&(a[b]=1);return a}var a={};return{get:function(c){return"plain-text"==c?a.plainText||(a.plainText=new CKEDITOR.filter("br")):"semantic-content"==c?((c=a.semanticContent)||(c=new CKEDITOR.filter,c.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),c=a.semanticContent=c),c):c?new CKEDITOR.filter(c):null}}}function y(b,a,c){a=CKEDITOR.htmlParser.fragment.fromHtml(a);var e=new CKEDITOR.htmlParser.basicWriter;c.applyTo(a,!0,!1,
+b.activeEnterMode);a.writeHtml(e);return e.getHtml()}function C(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",a.length/7*2)}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return a}function E(b){b.data.preventDefault();b.data.$.dataTransfer.dropEffect="none"}function F(b){var a=CKEDITOR.plugins.clipboard;b.on("contentDom",function(){function c(a,c,d){c.select();q(b,{dataTransfer:d,
+method:"drop"},1);d.sourceEditor.fire("saveSnapshot");d.sourceEditor.editable().extractHtmlFromRange(a);d.sourceEditor.getSelection().selectRanges([a]);d.sourceEditor.fire("saveSnapshot")}function e(d,c){d.select();q(b,{dataTransfer:c,method:"drop"},1);a.resetDragDataTransfer()}function f(a,d,c){var g={$:a.data.$,target:a.data.getTarget()};d&&(g.dragRange=d);c&&(g.dropRange=c);!1===b.fire(a.name,g)&&a.data.preventDefault()}function g(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}
+var d=b.editable(),h=CKEDITOR.plugins.clipboard.getDropTarget(b),n=b.ui.space("top"),w=b.ui.space("bottom");a.preventDefaultDropOnElement(n);a.preventDefaultDropOnElement(w);d.attachListener(h,"dragstart",f);d.attachListener(b,"dragstart",a.resetDragDataTransfer,a,null,1);d.attachListener(b,"dragstart",function(d){a.initDragDataTransfer(d,b)},null,null,2);d.attachListener(b,"dragstart",function(){var d=a.dragRange=b.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(a.dragStartContainerChildCount=
+d?g(d.startContainer):null,a.dragEndContainerChildCount=d?g(d.endContainer):null)},null,null,100);d.attachListener(h,"dragend",f);d.attachListener(b,"dragend",a.initDragDataTransfer,a,null,1);d.attachListener(b,"dragend",a.resetDragDataTransfer,a,null,100);d.attachListener(h,"dragover",function(a){var b=a.data.getTarget();b&&b.is&&b.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()});
+d.attachListener(h,"drop",function(d){if(!d.data.$.defaultPrevented){d.data.preventDefault();var c=d.data.getTarget();if(!c.isReadOnly()||c.type==CKEDITOR.NODE_ELEMENT&&c.is("html")){var c=a.getRangeAtDropPosition(d,b),g=a.dragRange;c&&f(d,g,c)}}},null,null,9999);d.attachListener(b,"drop",a.initDragDataTransfer,a,null,1);d.attachListener(b,"drop",function(d){if(d=d.data){var g=d.dropRange,h=d.dragRange,f=d.dataTransfer;f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){a.internalDrop(h,
+g,f,b)},0):f.getTransferType(b)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?c(h,g,f):e(g,f)}},null,null,9999)})}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a,c=D();b.config.forcePasteAsPlainText?a="plain-text":b.config.pasteFilter?a=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(a="semantic-content");b.pasteFilter=c.get(a);z(b);F(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));if(CKEDITOR.env.gecko){var e=["image/png","image/jpeg",
+"image/gif"],f;b.on("paste",function(a){var d=a.data,c=d.dataTransfer;if(!d.dataValue&&"paste"==d.method&&c&&1==c.getFilesCount()&&f!=c.id&&(c=c.getFile(0),-1!=CKEDITOR.tools.indexOf(e,c.type))){var n=new FileReader;n.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+n.result+'" /\x3e';b.fire("paste",a.data)},!1);n.addEventListener("abort",function(){b.fire("paste",a.data)},!1);n.addEventListener("error",function(){b.fire("paste",a.data)},!1);n.readAsDataURL(c);f=d.dataTransfer.id;
+a.stop()}},null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var d=a.data.dataTransfer,c=d.getData("text/html");if(c)a.data.dataValue=c,a.data.type="html";else if(c=d.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(c),a.data.type="text"}},null,null,1);b.on("paste",function(a){var b=a.data.dataValue,c=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi,
+" "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<b.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var e,f,k=new CKEDITOR.dom.element("div");for(k.setHtml(b);1==k.getChildCount()&&
+(e=k.getFirst())&&e.type==CKEDITOR.NODE_ELEMENT&&(e.hasClass("cke_editable")||e.hasClass("cke_contents"));)k=f=e;f&&(b=f.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,d){return d.toLowerCase()in c?(a.data.preSniffing="html","\x3c"+d):b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){return d in c?(a.data.endsWithEOL=1,"\x3c/"+d+"\x3e"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,
+null,3);b.on("paste",function(a){a=a.data;var d=a.type,e=a.dataValue,f,p=b.config.clipboard_defaultContentType||"html",k=a.dataTransfer.getTransferType(b);f="html"==d||"html"==a.preSniffing?"html":A(e);"htmlifiedtext"==f&&(e=B(b.config,e));"text"==d&&"html"==f?e=y(b,e,c.get("plain-text")):k==CKEDITOR.DATA_TRANSFER_EXTERNAL&&b.pasteFilter&&!a.dontFilter&&(e=y(b,e,b.pasteFilter));a.startsWithEOL&&(e='\x3cbr data-cke-eol\x3d"1"\x3e'+e);a.endsWithEOL&&(e+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==d&&
+(d="html"==f||"html"==p?"html":"text");a.type=d;a.dataValue=e;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:!CKEDITOR.env.ie&&!CKEDITOR.env.iOS,isCustomDataTypesSupported:!CKEDITOR.env.ie,
+isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",canClipboardApiBeTrusted:function(b,a){return b.getTransferType(a)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!b.isEmpty()||CKEDITOR.env.gecko&&(b.getData("text/html")||b.getFilesCount())?!0:!1},getDropTarget:function(b){var a=b.editable();return CKEDITOR.env.ie&&9>CKEDITOR.env.version||a.isInline()?a:b.document},fixSplitNodesAfterDrop:function(b,a,c,e){function f(b,
+c,e){var f=b;f.type==CKEDITOR.NODE_TEXT&&(f=b.getParent());if(f.equals(c)&&e!=c.getChildCount())return b=a.startContainer.getChild(a.startOffset-1),c=a.startContainer.getChild(a.startOffset),b&&b.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(e=b.getLength(),b.setText(b.getText()+c.getText()),c.remove(),a.setStart(b,e),a.collapse(!0)),!0}var g=a.startContainer;"number"==typeof e&&"number"==typeof c&&g.type==CKEDITOR.NODE_ELEMENT&&(f(b.startContainer,g,c)||f(b.endContainer,g,e))},isDropRangeAffectedByDragRange:function(b,
+a){var c=a.startContainer,e=a.endOffset;return b.endContainer.equals(c)&&b.endOffset<=e||b.startContainer.getParent().equals(c)&&b.startContainer.getIndex()<e||b.endContainer.getParent().equals(c)&&b.endContainer.getIndex()<e?!0:!1},internalDrop:function(b,a,c,e){var f=CKEDITOR.plugins.clipboard,g=e.editable(),d,h;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(b,a,f.dragStartContainerChildCount,f.dragEndContainerChildCount);
+(h=this.isDropRangeAffectedByDragRange(b,a))||(d=b.createBookmark(!1));f=a.clone().createBookmark(!1);h&&(d=b.createBookmark(!1));b=d.startNode;a=d.endNode;h=f.startNode;a&&b.getPosition(h)&CKEDITOR.POSITION_PRECEDING&&a.getPosition(h)&CKEDITOR.POSITION_FOLLOWING&&h.insertBefore(b);b=e.createRange();b.moveToBookmark(d);g.extractHtmlFromRange(b,1);a=e.createRange();a.moveToBookmark(f);q(e,{dataTransfer:c,method:"drop",range:a},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(b,a){var c=
+b.data.$,e=c.clientX,f=c.clientY,g=a.getSelection(!0).getRanges()[0],d=a.createRange();if(b.data.testRange)return b.data.testRange;if(document.caretRangeFromPoint)c=a.document.$.caretRangeFromPoint(e,f),d.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),d.collapse(!0);else if(c.rangeParent)d.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),d.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&g&&a.editable().hasFocus)return g;if(document.body.createTextRange){a.focus();
+c=a.document.getBody().$.createTextRange();try{for(var h=!1,n=0;20>n&&!h;n++){if(!h)try{c.moveToPoint(e,f-n),h=!0}catch(p){}if(!h)try{c.moveToPoint(e,f+n),h=!0}catch(k){}}if(h){var u="cke-temp-"+(new Date).getTime();c.pasteHTML('\x3cspan id\x3d"'+u+'"\x3e​\x3c/span\x3e');var r=a.document.getById(u);d.moveToPosition(r,CKEDITOR.POSITION_BEFORE_START);r.remove()}else{var t=a.document.$.elementFromPoint(e,f),m=new CKEDITOR.dom.element(t),q;if(m.equals(a.editable())||"html"==m.getName())return g&&g.startContainer&&
+!g.startContainer.equals(a.editable())?g:null;q=m.getClientRect();e<q.left?d.setStartAt(m,CKEDITOR.POSITION_AFTER_START):d.setStartAt(m,CKEDITOR.POSITION_BEFORE_END);d.collapse(!0)}}catch(v){return null}}else return null}return d},initDragDataTransfer:function(b,a){var c=b.data.$?b.data.$.dataTransfer:null,e=new this.dataTransfer(c,a);c?this.dragData&&e.id==this.dragData.id?e=this.dragData:this.dragData=e:this.dragData?e=this.dragData:this.dragData=e;b.data.dataTransfer=e},resetDragDataTransfer:function(){this.dragData=
+null},initPasteDataTransfer:function(b,a){if(this.isCustomCopyCutSupported){if(b&&b.data&&b.data.$){var c=new this.dataTransfer(b.data.$.clipboardData,a);this.copyCutData&&c.id==this.copyCutData.id?(c=this.copyCutData,c.$=b.data.$.clipboardData):this.copyCutData=c;return c}return new this.dataTransfer(null,a)}return new this.dataTransfer(CKEDITOR.env.edge&&b&&b.data.$&&b.data.$.clipboardData||null,a)},preventDefaultDropOnElement:function(b){b&&b.on("dragover",E)}};var p=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?
+"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(b,a){b&&(this.$=b);this._={metaRegExp:/^<meta.*?>/i,bodyRegExp:/<body(?:[\s\S]*?)>([\s\S]*)<\/body>/i,fragmentRegExp:/\x3c!--(?:Start|End)Fragment--\x3e/g,data:{},files:[],normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this.id=this.getData(p);this.id||(this.id="Text"==p?"":"cke-"+CKEDITOR.tools.getUniqueId());if("Text"!=p)try{this.$.setData(p,this.id)}catch(c){}a&&(this.sourceEditor=
+a,this.setData("text/html",a.getSelectedHtml(1)),"Text"==p||this.getData("text/plain")||this.setData("text/plain",a.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(b){b=this._.normalizeType(b);var a=this._.data[b];if(void 0===a||null===a||""===a)try{a=this.$.getData(b)}catch(c){}if(void 0===a||null===a||""===a)a="";"text/html"==b?(a=a.replace(this._.metaRegExp,
+""),(b=this._.bodyRegExp.exec(a))&&b.length&&(a=b[1],a=a.replace(this._.fragmentRegExp,""))):"Text"==b&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==a.substring(0,7)&&(a="");return a},setData:function(b,a){b=this._.normalizeType(b);this._.data[b]=a;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==b||"Text"==b){"Text"==p&&"Text"==b&&(this.id=a);try{this.$.setData(b,a)}catch(c){}}},getTransferType:function(b){return this.sourceEditor?this.sourceEditor==b?CKEDITOR.DATA_TRANSFER_INTERNAL:
+CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function b(b){b=a._.normalizeType(b);var c=a.getData(b);c&&(a._.data[b]=c)}if(this.$){var a=this,c,e;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;c<this.$.types.length;c++)b(this.$.types[c])}else b("Text"),b("URL");e=this._getImageFromClipboard();if(this.$&&this.$.files||e){this._.files=[];if(this.$.files&&this.$.files.length)for(c=0;c<this.$.files.length;c++)this._.files.push(this.$.files[c]);
+0===this._.files.length&&e&&this._.files.push(e)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(b){return this._.files.length?this._.files[b]:this.$&&this.$.files&&this.$.files.length?this.$.files[b]:0===b?this._getImageFromClipboard():void 0},isEmpty:function(){var b={},a;if(this.getFilesCount())return!1;for(a in this._.data)b[a]=1;if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c=
+0;c<this.$.types.length;c++)b[this.$.types[c]]=1}else b.Text=1,b.URL=1;"Text"!=p&&(b[p]=0);for(a in b)if(b[a]&&""!==this.getData(a))return!1;return!0},_getImageFromClipboard:function(){var b;if(this.$&&this.$.items&&this.$.items[0])try{if((b=this.$.items[0].getAsFile())&&b.type)return b}catch(a){}}}})();(function(){CKEDITOR.plugins.add("codemirror",{version:1.15,init:function(b){function f(){var a=[d+"js/codemirror.addons.min.js"];switch(c.mode){case "bbcode":a.push(d+"js/codemirror.mode.bbcode.min.js");break;case "bbcodemixed":a.push(d+"js/codemirror.mode.bbcodemixed.min.js");break;case "htmlmixed":a.push(d+"js/codemirror.mode.htmlmixed.min.js");break;case "text/html":a.push(d+"js/codemirror.mode.htmlmixed.min.js");break;case "application/x-httpd-php":a.push(d+"js/codemirror.mode.php.min.js");break;
+case "text/javascript":a.push(d+"js/codemirror.mode.javascript.min.js");break;default:a.push(d+"js/codemirror.mode.htmlmixed.min.js")}c.useBeautify&&a.push(d+"js/beautify.min.js");c.enableSearchTools&&a.push(d+"js/codemirror.addons.search.min.js");return a}function h(a){function b(a){for(var c=[[CKEDITOR.SHIFT,"Shift-"],[CKEDITOR.CTRL,"Ctrl-"],[CKEDITOR.ALT,"Alt-"]],d="",e=0;e<c.length;e++)a&c[e][0]&&(a-=c[e][0],d+=c[e][1]);return CodeMirror.keyNames[a]?d+CodeMirror.keyNames[a]:null}var d=a.ui.space("contents").getDocument().createElement("textarea");
+d.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",a.config.sourceAreaTabSize||4)));var f=[a.lang.editor,a.name].join();d.setAttributes({dir:"ltr",tabIndex:CKEDITOR.env.webkit?-1:a.tabIndex,role:"textbox","aria-label":f});d.addClass("cke_source");d.addClass("cke_reset");d.addClass("cke_enable_context_menu");a.ui.space("contents").append(d);window["editable_"+a.id]=a.editable(new e(a,
+d));window["editable_"+a.id].setData(a.getData(1));window["editable_"+a.id].editorID=a.id;a.fire("ariaWidget",this);d=window["editable_"+a.id];f=d.getParent();c.lineNumbers&&c.enableCodeFolding&&(window["foldFunc_"+a.id]=CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder));var k={"Ctrl-Q":function(b){if(c.enableCodeFolding)window["foldFunc_"+a.id](b,b.getCursor().line)}};(function(c){var g=a.config.keystrokes;if(CKEDITOR.tools.isArray(g))for(var d=0;d<g.length;d++){var e=b(g[d][0]);null!==e&&function(b){c[e]=
+function(){a.execCommand(b)}}(g[d][1])}})(k);window["codemirror_"+a.id]=CodeMirror.fromTextArea(d.$,{mode:c.mode,matchBrackets:c.matchBrackets,matchTags:c.matchTags,workDelay:300,workTime:35,readOnly:a.readOnly,lineNumbers:c.lineNumbers,lineWrapping:!0,autoCloseTags:c.autoCloseTags,autoCloseBrackets:c.autoCloseBrackets,highlightSelectionMatches:c.highlightMatches,continueComments:c.continueComments,indentWithTabs:c.indentWithTabs,theme:c.theme,showTrailingSpace:c.showTrailingSpace,showCursorWhenSelecting:!0,
+styleActiveLine:c.styleActiveLine,extraKeys:k,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"]});d=0==f.$.clientHeight?a.ui.space("contents").getStyle("height"):f.$.clientHeight+"px";window["codemirror_"+a.id].config=c;c.autoFormatOnStart&&(c.useBeautify?(f=window["codemirror_"+a.id].getValue(),window["codemirror_"+a.id].setValue(html_beautify(f,4," ",120,"collapse"))):window["codemirror_"+a.id].autoFormatAll({line:0,ch:0},{line:window["codemirror_"+a.id].lineCount(),ch:0}));
+window["codemirror_"+a.id].on("change",function(){window["codemirror_"+a.id].save();a.fire("change",this)});window["codemirror_"+a.id].setSize(null,d);if(c.lineNumbers&&c.enableCodeFolding)window["codemirror_"+a.id].on("gutterClick",window["foldFunc_"+a.id]);if("function"===typeof c.onLoad)c.onLoad(window["codemirror_"+a.id],a);window["codemirror_"+a.id].on("blur",function(){a.fire("blur",this)});window["codemirror_"+a.id].on("keypress",function(b,g){if(c.enableCodeFormatting){var d=window["codemirror_"+
+a.id].getCursor(!0),e=window["codemirror_"+a.id].getCursor(!1);"keydown"!==g.type||!g.ctrlKey||75!==g.keyCode||g.shiftKey||g.altKey?"keydown"===g.type&&g.ctrlKey&&75===g.keyCode&&g.shiftKey&&!g.altKey?(window["codemirror_"+a.id].commentRange(!1,d,e),c.autoFormatOnUncomment&&window["codemirror_"+a.id].autoFormatRange(d,e)):"keydown"===g.type&&g.ctrlKey&&75===g.keyCode&&!g.shiftKey&&g.altKey&&window["codemirror_"+a.id].autoFormatRange(d,e):window["codemirror_"+a.id].commentRange(!0,d,e)}})}var d=this.path,
+c=CKEDITOR.tools.extend({autoCloseBrackets:!0,autoCloseTags:!0,autoFormatOnStart:!1,autoFormatOnUncomment:!0,continueComments:!0,enableCodeFolding:!0,enableCodeFormatting:!0,enableSearchTools:!0,highlightMatches:!0,indentWithTabs:!1,lineNumbers:!0,lineWrapping:!0,mode:"htmlmixed",matchBrackets:!0,matchTags:!0,showAutoCompleteButton:!0,showCommentButton:!0,showFormatButton:!0,showSearchButton:!0,showTrailingSpace:!0,showUncommentButton:!0,styleActiveLine:!0,theme:"default",useBeautify:!1},b.config.codemirror||
+{},!0),k=b.lang.codemirror;b.config.codemirror_theme&&(c.theme=b.config.codemirror_theme);b.config.codemirror_autoFormatOnStart&&(c.autoFormatOnStart=b.config.codemirror_autoFormatOnStart);b.plugins.bbcode&&0>=c.mode.indexOf("bbcode")&&(c.mode="bbcode");(b.elementMode===CKEDITOR.ELEMENT_MODE_INLINE||b.plugins.sourcedialog)&&CKEDITOR.dialog.add("sourcedialog",function(a){function b(a,d){window["codemirror_"+a.id]=CodeMirror.fromTextArea(d,{mode:c.mode,matchBrackets:c.matchBrackets,matchTags:c.matchTags,
+workDelay:300,workTime:35,readOnly:a.readOnly,lineNumbers:c.lineNumbers,lineWrapping:c.lineWrapping,autoCloseTags:c.autoCloseTags,autoCloseBrackets:c.autoCloseBrackets,highlightSelectionMatches:c.highlightMatches,continueComments:c.continueComments,indentWithTabs:c.indentWithTabs,theme:c.theme,showTrailingSpace:c.showTrailingSpace,showCursorWhenSelecting:!0,styleActiveLine:c.styleActiveLine,viewportMargin:Infinity,extraKeys:{"Ctrl-Q":function(b){if(c.enableCodeFolding)window["foldFunc_"+a.id](b,b.getCursor().line)}},
+foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"]});var e=l+"px",f=h+"px";window["codemirror_"+a.id].config=c;if(c.autoFormatOnStart)if(c.useBeautify){var n=window["codemirror_"+a.id].getValue();window["codemirror_"+a.id].setValue(html_beautify(n,4," ",120,"collapse"))}else window["codemirror_"+a.id].autoFormatAll({line:0,ch:0},{line:window["codemirror_"+a.id].lineCount(),ch:0});window["codemirror_"+a.id].on("change",function(){window["codemirror_"+a.id].save();a.fire("change",
+this)});window["codemirror_"+a.id].setSize(f,e);if(c.lineNumbers&&c.enableCodeFolding)window["codemirror_"+a.id].on("gutterClick",window["foldFunc_"+a.id]);if("function"===typeof c.onLoad)c.onLoad(window["codemirror_"+a.id],a);window["codemirror_"+a.id].on("blur",function(){a.fire("blur",this)});window["codemirror_"+a.id].on("keypress",function(b,d){if(c.enableCodeFormatting){var e=window["codemirror_"+a.id].getCursor(!0),f=window["codemirror_"+a.id].getCursor(!1);"keydown"!==d.type||!d.ctrlKey||
+75!==d.keyCode||d.shiftKey||d.altKey?"keydown"===d.type&&d.ctrlKey&&75===d.keyCode&&d.shiftKey&&!d.altKey?(window["codemirror_"+a.id].commentRange(!1,e,f),c.autoFormatOnUncomment&&window["codemirror_"+a.id].autoFormatRange(e,f)):"keydown"===d.type&&d.ctrlKey&&75===d.keyCode&&!d.shiftKey&&d.altKey&&window["codemirror_"+a.id].autoFormatRange(e,f):window["codemirror_"+a.id].commentRange(!0,e,f)}})}var e=CKEDITOR.document.getWindow().getViewPaneSize(),h=Math.min(e.width-70,800),l=e.height/1.5,m;return{title:a.lang.sourcedialog.title,
+minWidth:h,minHeight:l,resizable:CKEDITOR.DIALOG_RESIZE_NONE,onShow:function(){this.getContentElement("main","data").focus();this.getContentElement("main","AutoComplete").setValue(c.autoCloseTags,!0);var e=this.getContentElement("main","data").getInputElement().$;this.setValueOf("main","data",m=a.getData());IsStyleSheetAlreadyLoaded(d+"css/codemirror.min.css")||CKEDITOR.document.appendStyleSheet(d+"css/codemirror.min.css");c.theme.length&&"default"!=c.theme&&!IsStyleSheetAlreadyLoaded(d+"theme/"+
+c.theme+".css")&&CKEDITOR.document.appendStyleSheet(d+"theme/"+c.theme+".css");"undefined"==typeof CodeMirror?CKEDITOR.scriptLoader.load(d+"js/codemirror.min.js",function(){CKEDITOR.scriptLoader.load(f(),function(){b(a,e)})}):CodeMirror.prototype.autoFormatAll?b(a,e):CKEDITOR.scriptLoader.load(f(),function(){b(a,e)})},onCancel:function(b){b.data.hide&&(window["codemirror_"+a.id].toTextArea(),window["codemirror_"+a.id]=null,a.fire("blur",this),a.fire("focus",this))},onOk:function(){function b(c){var d=
+this;a.setData(c,function(){d.hide();var b=a.createRange();b.moveToElementEditStart(a.editable());b.select()})}return function(){window["codemirror_"+a.id].toTextArea();window["codemirror_"+a.id]=null;var c=this.getValueOf("main","data").replace(/\r/g,"");if(c===m)return!0;CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(b,0,this,c):b.call(this,c);a.fire("blur",this);a.fire("focus",this);return!1}}(),contents:[{id:"main",label:a.lang.sourcedialog.title,elements:[{type:"hbox",style:"width: 80px;margin:0;",
+widths:["20px","20px","20px","20px"],children:[{type:"button",id:"searchCode",label:"",title:k.searchCode,"class":"searchCodeButton",onClick:function(){CodeMirror.commands.find(window["codemirror_"+a.id])}},{type:"button",id:"autoFormat",label:"",title:k.autoFormat,"class":"autoFormat",onClick:function(){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].autoFormatRange(b,c)}},{type:"button",id:"CommentSelectedRange",label:"",title:k.commentSelectedRange,
+"class":"CommentSelectedRange",onClick:function(){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].commentRange(!0,b,c)}},{type:"button",id:"UncommentSelectedRange",label:"",title:k.uncommentSelectedRange,"class":"UncommentSelectedRange",onClick:function(){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].commentRange(!1,b,c);window["codemirror_"+a.id].config.autoFormatOnUncomment&&
+window["codemirror_"+a.id].autoFormatRange(b,c)}}]},{type:"checkbox",id:"AutoComplete",label:k.autoCompleteToggle,title:k.autoCompleteToggle,onChange:function(){window["codemirror_"+a.id].setOption("autoCloseTags",this.getValue())}},{type:"textarea",id:"data",dir:"ltr",inputStyle:"cursor:auto;width:"+h+"px;height:"+l+"px;tab-size:4;text-align:left;","class":"cke_source cke_enable_context_menu"}]}]}});b.commands.find&&(b.commands.find.modes={wysiwyg:1,source:1},b.commands.find.exec=function(){"wysiwyg"===
+b.mode?b.openDialog("find"):CodeMirror.commands.find(window["codemirror_"+b.id])});b.commands.replace&&(b.commands.replace.modes={wysiwyg:1,source:1},b.commands.replace.exec=function(){"wysiwyg"===b.mode?b.openDialog("replace"):CodeMirror.commands.replace(window["codemirror_"+b.id])});var l=CKEDITOR.plugins.sourcearea;l.commands.searchCode||(CKEDITOR.plugins.sourcearea.commands={source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(a){"wysiwyg"===a.mode&&a.fire("saveSnapshot");
+a.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);a.setMode("source"===a.mode?"wysiwyg":"source")},canUndo:!1},searchCode:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(a){CodeMirror.commands.find(window["codemirror_"+a.id])},canUndo:!0},autoFormat:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(a){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].autoFormatRange(b,c)},canUndo:!0},
+commentSelectedRange:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(a){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].commentRange(!0,b,c)},canUndo:!0},uncommentSelectedRange:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(a){var b=window["codemirror_"+a.id].getCursor(!0),c=window["codemirror_"+a.id].getCursor(!1);window["codemirror_"+a.id].commentRange(!1,b,c);window["codemirror_"+a.id].config.autoFormatOnUncomment&&
+window["codemirror_"+a.id].autoFormatRange(b,c)},canUndo:!0},autoCompleteToggle:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(a){this.state==CKEDITOR.TRISTATE_ON?window["codemirror_"+a.id].setOption("autoCloseTags",!1):this.state==CKEDITOR.TRISTATE_OFF&&window["codemirror_"+a.id].setOption("autoCloseTags",!0);this.toggleState()},canUndo:!0}});b.addMode("source",function(a){IsStyleSheetAlreadyLoaded(d+"css/codemirror.min.css")||CKEDITOR.document.appendStyleSheet(d+"css/codemirror.min.css");
+c.theme.length&&"default"!=c.theme&&!IsStyleSheetAlreadyLoaded(d+"theme/"+c.theme+".css")&&CKEDITOR.document.appendStyleSheet(d+"theme/"+c.theme+".css");"undefined"==typeof CodeMirror?CKEDITOR.scriptLoader.load(d+"js/codemirror.min.js",function(){CKEDITOR.scriptLoader.load(f(),function(){h(b);a()})}):CodeMirror.prototype.autoFormatAll?(h(b),a()):CKEDITOR.scriptLoader.load(f(),function(){h(b);a()})});b.addCommand("source",l.commands.source);b.ui.addButton&&b.ui.addButton("Source",{label:b.lang.codemirror.toolbar,
+command:"source",toolbar:"mode,10"});c.enableCodeFormatting&&(b.addCommand("searchCode",l.commands.searchCode),b.addCommand("autoFormat",l.commands.autoFormat),b.addCommand("commentSelectedRange",l.commands.commentSelectedRange),b.addCommand("uncommentSelectedRange",l.commands.uncommentSelectedRange),b.addCommand("autoCompleteToggle",l.commands.autoCompleteToggle),b.ui.addButton&&((c.showFormatButton||c.showCommentButton||c.showUncommentButton||c.showSearchButton)&&b.ui.add("-",CKEDITOR.UI_SEPARATOR,
+{toolbar:"mode,30"}),c.showSearchButton&&c.enableSearchTools&&b.ui.addButton("searchCode",{label:k.searchCode,command:"searchCode",toolbar:"mode,40"}),c.showFormatButton&&b.ui.addButton("autoFormat",{label:k.autoFormat,command:"autoFormat",toolbar:"mode,50"}),c.showCommentButton&&b.ui.addButton("CommentSelectedRange",{label:k.commentSelectedRange,command:"commentSelectedRange",toolbar:"mode,60"}),c.showUncommentButton&&b.ui.addButton("UncommentSelectedRange",{label:k.uncommentSelectedRange,command:"uncommentSelectedRange",
+toolbar:"mode,70"}),c.showAutoCompleteButton&&b.ui.addButton("AutoComplete",{label:k.autoCompleteToggle,command:"autoCompleteToggle",toolbar:"mode,80"})));b.on("beforeModeUnload",function(a){if("source"===b.mode&&b.plugins.textselection){var c=b.getTextSelection();c.startOffset=LineChannelToOffSet(window["codemirror_"+b.id],window["codemirror_"+b.id].getCursor(!0));c.endOffset=LineChannelToOffSet(window["codemirror_"+b.id],window["codemirror_"+b.id].getCursor(!1));delete c.element;c.createBookmark(b);
+sourceBookmark=!0;b.undoManager&&b.undoManager.unlock();a.data=c.content}});b.on("mode",function(){b.getCommand("source").setState("source"===b.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);if("source"===b.mode&&(b.getCommand("autoCompleteToggle").setState(window["codemirror_"+b.id].config.autoCloseTags?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),b.plugins.textselection&&textRange)){var a,c;a=OffSetToLineChannel(window["codemirror_"+b.id],textRange.startOffset);"undefined"==typeof textRange.endOffset?
+(window["codemirror_"+b.id].focus(),window["codemirror_"+b.id].setCursor(a)):(window["codemirror_"+b.id].focus(),c=OffSetToLineChannel(window["codemirror_"+b.id],textRange.endOffset),window["codemirror_"+b.id].setSelection(a,c))}});b.on("resize",function(){if(window["editable_"+b.id]&&"source"===b.mode){var a=window["editable_"+b.id].getParent();window["codemirror_"+b.id].setSize(a.$.clientWidth+"px",a.$.clientHeight+"px")}});b.on("readOnly",function(){window["editable_"+b.id]&&"source"===b.mode&&
+window["codemirror_"+b.id].setOption("readOnly",this.readOnly)});b.on("instanceReady",function(a){b.container.getPrivate().events.contextmenu.listeners.splice(0,1);a=b.commands.selectAll;null!=a&&(a.exec=function(){if("source"===b.mode)window["codemirror_"+b.id].setSelection({line:0,ch:0},{line:window["codemirror_"+b.id].lineCount(),ch:0});else{var a=b.editable();if(a.is("body"))b.document.$.execCommand("SelectAll",!1,null);else{var c=b.createRange();c.selectNodeContents(a);c.select()}b.forceNextSelectionCheck();
+b.selectionChange()}})});if("undefined"!=typeof jQuery&&jQuery('a[data-toggle\x3d"tab"]')&&window["codemirror_"+b.id])jQuery('a[data-toggle\x3d"tab"]').on("shown.bs.tab",function(){window["codemirror_"+b.id].refresh()});b.on("setData",function(a){window["editable_"+a.editor.id]&&"source"===a.editor.mode&&window["codemirror_"+a.editor.id].setValue(a.data.dataValue)})}});var e=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(b){this.setValue(b);window["editable_"+this.editor.id]&&
+"source"===this.editor.mode&&window["codemirror_"+this.editor.id].setValue(b);this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(b){this[(b?"set":"remove")+"Attribute"]("readOnly","readonly")},editorID:null,detach:function(){window["codemirror_"+this.editorID].toTextArea();window["editable_"+this.editorID]=null;window["codemirror_"+this.editorID]=null;e.baseProto.detach.call(this);
+this.clearCustomData();this.remove()}}})})();
+CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(e){"wysiwyg"===e.mode&&e.fire("saveSnapshot");e.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);e.setMode("source"===e.mode?"wysiwyg":"source")},canUndo:!1},searchCode:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(e){CodeMirror.commands.find(window["codemirror_"+e.id])},canUndo:!0},autoFormat:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:0,exec:function(e){var b=
+window["codemirror_"+e.id].getCursor(!0),f=window["codemirror_"+e.id].getCursor(!1);window["codemirror_"+e.id].autoFormatRange(b,f)},canUndo:!0},commentSelectedRange:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:0,exec:function(e){var b=window["codemirror_"+e.id].getCursor(!0),f=window["codemirror_"+e.id].getCursor(!1);window["codemirror_"+e.id].commentRange(!0,b,f)},canUndo:!0},uncommentSelectedRange:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:0,exec:function(e){var b=window["codemirror_"+
+e.id].getCursor(!0),f=window["codemirror_"+e.id].getCursor(!1);window["codemirror_"+e.id].commentRange(!1,b,f);window["codemirror_"+e.id].config.autoFormatOnUncomment&&window["codemirror_"+e.id].autoFormatRange(b,f)},canUndo:!0},autoCompleteToggle:{modes:{wysiwyg:0,source:1},editorFocus:!1,readOnly:1,exec:function(e){this.state==CKEDITOR.TRISTATE_ON?window["codemirror_"+e.id].setOption("autoCloseTags",!1):this.state==CKEDITOR.TRISTATE_OFF&&window["codemirror_"+e.id].setOption("autoCloseTags",!0);
+this.toggleState()},canUndo:!0}}};function LineChannelToOffSet(e,b){var f=b.line,h=f+b.ch;for(i=0;i<f;i++)h+=e.getLine(i).length;return h}function OffSetToLineChannel(e,b){var f=0,h=0,d=0;for(i=0;i<e.lineCount();i++){len=e.getLine(i).length;if(b<d+len){f=i;h=b-d;break}len++;d+=len}return{line:f,ch:h}}function IsStyleSheetAlreadyLoaded(e){for(var b=CKEDITOR.document.getHead().find("link"),f=0;f<b.count();f++)if(b.getItem(f).$.href===e)return!0;return!1};CKEDITOR.plugins.add("panelbutton",{requires:"button",onLoad:function(){function e(c){var a=this._;a.state!=CKEDITOR.TRISTATE_DISABLED&&(this.createPanel(c),a.on?a.panel.hide():a.panel.showBlock(this._.id,this.document.getById(this._.id),4))}CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){var a=c.panel||{};delete c.panel;this.base(c);this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.block={attributes:a.attributes};this.hasArrow=a.toolbarRelated=
+!0;this.click=e;this._={panelDefinition:a}},statics:{handler:{create:function(c){return new CKEDITOR.ui.panelButton(c)}}},proto:{createPanel:function(c){var a=this._;if(!a.panel){var f=this._.panelDefinition,e=this._.panelDefinition.block,g=f.parent||CKEDITOR.document.getBody(),d=this._.panel=new CKEDITOR.ui.floatPanel(c,g,f),f=d.addBlock(a.id,e),b=this;d.onShow=function(){b.className&&this.element.addClass(b.className+"_panel");b.setState(CKEDITOR.TRISTATE_ON);a.on=1;b.editorFocus&&c.focus();if(b.onOpen)b.onOpen()};
+d.onHide=function(d){b.className&&this.element.getFirst().removeClass(b.className+"_panel");b.setState(b.modes&&b.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);a.on=0;if(!d&&b.onClose)b.onClose()};d.onEscape=function(){d.hide(1);b.document.getById(a.id).focus()};if(this.onBlock)this.onBlock(d,f);f.onHide=function(){a.on=0;b.setState(CKEDITOR.TRISTATE_OFF)}}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler)}});
+CKEDITOR.UI_PANELBUTTON="panelbutton";(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var f=CKEDITOR.addTemplate("panel",
+'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),g=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),h=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');
+CKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(h.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+
+b+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var d={editorId:a.id,id:this.id,langCode:a.langCode,
+dir:a.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":a.config.baseFloatZIndex+1};if(this.isFramed){var e=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=g.output({id:this.id+"_frame",src:e})}e=f.output(d);b&&b.push(e);return e},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),
+b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){a=this._.blocks[a];var b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=
+CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag("a").getItem(this._.focusIndex=
+a),CKEDITOR.env.webkit&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"),c;c=d.getItem(++e);)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}return c||
+b?!1:(this._.focusIndex=-1,this.onKeyDown(a,1));case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");0<e&&(c=d.getItem(--e));){if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}c=null}return c||b?!1:(this._.focusIndex=d.count(),this.onKeyDown(a,1));case "click":case "mouseup":return e=this._.focusIndex,(c=0<=e&&this.element.getElementsByTag("a").getItem(e))&&(c.$[d]?c.$[d]():c.$["on"+d]()),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"});
+(function(){function v(a,b,c,l,h){h=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",l.css||"",h||"");var g=f[h];g||(g=f[h]=new CKEDITOR.ui.panel(b,l),g.element=c.append(CKEDITOR.dom.element.createFromHtml(g.render(a),b)),g.element.setStyles({display:"none",position:"absolute"}));return g}var f={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,l){function h(){e.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&
+(b=CKEDITOR.document.getById("cke_"+a.name));var g=b.getDocument();l=v(a,g,b,c,l||0);var m=l.element,p=m.getFirst(),e=this;m.disableContextMenu();this.element=m;this._={editor:a,panel:l,parentElement:b,definition:c,document:g,iframe:p,children:[],dir:a.lang.dir,showBlockParams:null};a.on("mode",h);a.on("resize",h);g.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,
+b)},getBlock:function(a){return this._.panel.getBlock(a)},showBlock:function(a,b,c,l,h,g){var m=this._.panel,p=m.showBlock(a);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var e=this._.editor.editable();this._.returnFocus=e.hasFocus?e:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var k=this.element,e=this._.iframe,e=CKEDITOR.env.ie&&!CKEDITOR.env.edge?e:new CKEDITOR.dom.window(e.$.contentWindow),f=k.getDocument(),r=this._.parentElement.getPositionedAncestor(),
+t=b.getDocumentPosition(f),f=r?r.getDocumentPosition(f):{x:0,y:0},q="rtl"==this._.dir,d=t.x+(l||0)-f.x,n=t.y+(h||0)-f.y;!q||1!=c&&4!=c?q||2!=c&&3!=c||(d+=b.$.offsetWidth-1):d+=b.$.offsetWidth;if(3==c||4==c)n+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();k.setStyles({top:n+"px",left:0,display:""});k.setOpacity(0);k.getFirst().removeStyle("width");this._.editor.focusManager.add(e);this._.blurSet||(CKEDITOR.event.useCapture=!0,e.on("blur",function(a){function u(){delete this._.returnFocus;
+this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(u,0,this)):u.call(this))},this),e.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(e.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),e.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,
+this._.blurSet=1);m.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&!1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=k;a.removeStyle("width");if(p.autoSize){var b=p.element.getDocument(),b=(CKEDITOR.env.webkit||CKEDITOR.env.edge?p.element:b.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",b+10+"px");b=p.element.$.scrollHeight;CKEDITOR.env.ie&&
+CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",b+"px");m._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");q&&(d-=k.$.offsetWidth);k.setStyle("left",d+"px");var b=m.element.getWindow(),a=k.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,e=a.height||a.bottom-a.top,l=q?a.right:b.width-a.left,h=q?b.width-a.right:a.left;q?l<c&&(d=h>c?d+c:b.width>c?d-a.left:d-a.right+b.width):
+l<c&&(d=h>c?d-c:b.width>c?d-a.right+b.width:d-a.left);c=a.top;b.height-a.top<e&&(n=c>e?n-e:b.height>e?n-a.bottom+b.height:n-a.top);CKEDITOR.env.ie&&(b=a=new CKEDITOR.dom.element(k.$.offsetParent),"html"==b.getName()&&(b=b.getDocument().getBody()),"rtl"==b.getComputedStyle("direction")&&(d=CKEDITOR.env.ie8Compat?d-2*k.getDocument().getDocumentElement().$.scrollLeft:d-(a.$.scrollWidth-a.$.clientWidth)));var a=k.getFirst(),f;(f=a.getCustomData("activePanel"))&&f.onHide&&f.onHide.call(this,1);a.setCustomData("activePanel",
+this);k.setStyles({top:n+"px",left:d+"px"});k.setOpacity(1);g&&g()},this);m.isLoaded?a():m.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();p.element.focus();CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;
+this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();
+this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide=
+CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),
+b;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(e){function t(a,c,f,g,l){var m=new CKEDITOR.style(k["colorButton_"+c+"Style"]),n=CKEDITOR.tools.getNextId()+"_colorBox";l=l||{};e.ui.add(a,CKEDITOR.UI_PANELBUTTON,{label:f,title:f,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+g,allowedContent:m,requiredContent:m,contentTransformations:l.contentTransformations,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":h.panelTitle}},onBlock:function(a,
+b){b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(x(a,c,n));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var d=b.keys,f="rtl"==e.lang.dir;d[f?37:39]="next";d[40]="next";d[9]="next";d[f?39:37]="prev";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d[32]="click"},refresh:function(){e.activeFilter.check(m)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=e.getSelection(),a=a&&a.getStartElement(),a=e.elementPath(a),b;if(a){a=
+a.block||a.blockLimit||e.document.getBody();do b=a&&a.getComputedStyle("back"==c?"background-color":"color")||"transparent";while("back"==c&&"transparent"==b&&a&&(a=a.getParent()));b&&"transparent"!=b||(b="#ffffff");!1!==k.colorButton_enableAutomatic&&this._.panel._.iframe.getFrameDocument().getById(n).setStyle("background-color",b);return b}}})}function x(a,c,f){var g=[],l=k.colorButton_colors.split(","),m=k.colorButton_colorsPerRow||6,n=e.plugins.colordialog&&!1!==k.colorButton_enableMore,p=l.length+
+(n?2:1),b=CKEDITOR.tools.addFunction(function(b,c){function d(a){this.removeListener("ok",d);this.removeListener("cancel",d);"ok"==a.name&&f(this.getContentElement("picker","selectedColor").getValue(),c)}var f=arguments.callee;if("?"==b)e.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)});else{e.focus();a.hide();e.fire("saveSnapshot");e.removeStyle(new CKEDITOR.style(k["colorButton_"+c+"Style"],{color:"inherit"}));if(b){var g=k["colorButton_"+c+"Style"];g.childRule="back"==
+c?function(a){return u(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||u(a)};e.applyStyle(new CKEDITOR.style(g,{color:b}))}e.fire("saveSnapshot")}});!1!==k.colorButton_enableAutomatic&&g.push('\x3ca class\x3d"cke_colorauto" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"',h.auto,'" onclick\x3d"CKEDITOR.tools.callFunction(',b,",null,'",c,"');return false;\" href\x3d\"javascript:void('",h.auto,'\')" role\x3d"option" aria-posinset\x3d"1" aria-setsize\x3d"',p,'"\x3e\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e\x3ctr\x3e\x3ctd colspan\x3d"'+
+m+'" align\x3d"center"\x3e\x3cspan class\x3d"cke_colorbox" id\x3d"',f,'"\x3e\x3c/span\x3e',h.auto,"\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/a\x3e");g.push('\x3ctable role\x3d"presentation" cellspacing\x3d0 cellpadding\x3d0 width\x3d"100%"\x3e');for(f=0;f<l.length;f++){0===f%m&&g.push("\x3c/tr\x3e\x3ctr\x3e");var d=l[f].split("/"),q=d[0],r=d[1]||q;d[1]||(q="#"+q.replace(/^(.)(.)(.)$/,"$1$1$2$2$3$3"));d=e.lang.colorbutton.colors[r]||r;g.push('\x3ctd\x3e\x3ca class\x3d"cke_colorbox" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"',
+d,'" onclick\x3d"CKEDITOR.tools.callFunction(',b,",'",q,"','",c,"'); return false;\" href\x3d\"javascript:void('",d,'\')" role\x3d"option" aria-posinset\x3d"',f+2,'" aria-setsize\x3d"',p,'"\x3e\x3cspan class\x3d"cke_colorbox" style\x3d"background-color:#',r,'"\x3e\x3c/span\x3e\x3c/a\x3e\x3c/td\x3e')}n&&g.push('\x3c/tr\x3e\x3ctr\x3e\x3ctd colspan\x3d"'+m+'" align\x3d"center"\x3e\x3ca class\x3d"cke_colormore" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"',h.more,'" onclick\x3d"CKEDITOR.tools.callFunction(',
+b,",'?','",c,"');return false;\" href\x3d\"javascript:void('",h.more,"')\"",' role\x3d"option" aria-posinset\x3d"',p,'" aria-setsize\x3d"',p,'"\x3e',h.more,"\x3c/a\x3e\x3c/td\x3e");g.push("\x3c/tr\x3e\x3c/table\x3e");return g.join("")}function u(a){return"false"==a.getAttribute("contentEditable")||a.getAttribute("data-nostyle")}var k=e.config,h=e.lang.colorbutton;if(!CKEDITOR.env.hc){t("TextColor","fore",h.textColorTitle,10,{contentTransformations:[[{element:"font",check:"span{color}",left:function(a){return!!a.attributes.color},
+right:function(a){a.name="span";a.attributes.color&&(a.styles.color=a.attributes.color);delete a.attributes.color}}]]});var v={},w=e.config.colorButton_normalizeBackground;if(void 0===w||w)v.contentTransformations=[[{element:"span",left:function(a){var c=CKEDITOR.tools;if("span"!=a.name||!a.styles||!a.styles.background)return!1;a=c.style.parse.background(a.styles.background);return a.color&&1===c.objectKeys(a).length},right:function(a){var c=(new CKEDITOR.style(e.config.colorButton_backStyle,{color:a.styles.background})).getDefinition();
+a.name=c.element;a.styles=c.styles;a.attributes=c.attributes||{};return a}}]];t("BGColor","back",h.bgColorTitle,20,v)}}});CKEDITOR.config.colorButton_colors="1ABC9C,2ECC71,3498DB,9B59B6,4E5F70,F1C40F,16A085,27AE60,2980B9,8E44AD,2C3E50,F39C12,E67E22,E74C3C,ECF0F1,95A5A6,DDD,FFF,D35400,C0392B,BDC3C7,7F8C8D,999,000";CKEDITOR.config.colorButton_foreStyle={element:"span",styles:{color:"#(color)"},overrides:[{element:"font",attributes:{color:null}}]};
+CKEDITOR.config.colorButton_backStyle={element:"span",styles:{"background-color":"#(color)"}};CKEDITOR.plugins.colordialog={requires:"dialog",init:function(b){var c=new CKEDITOR.dialogCommand("colordialog");c.editorFocus=!1;b.addCommand("colordialog",c);CKEDITOR.dialog.add("colordialog",this.path+"dialogs/colordialog.js");b.getColorFromDialog=function(c,f){var d=function(a){this.removeListener("ok",d);this.removeListener("cancel",d);a="ok"==a.name?this.getValueOf("picker","selectedColor"):null;c.call(f,a)},e=function(a){a.on("ok",d);a.on("cancel",d)};b.execCommand("colordialog");if(b._.storedDialogs&&
+b._.storedDialogs.colordialog)e(b._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(a){if("colordialog"==a.data.name){var b=a.data.definition;a.removeListener();b.onLoad=CKEDITOR.tools.override(b.onLoad,function(a){return function(){e(this);b.onLoad=a;"function"==typeof a&&a.call(this)}})}})}}};CKEDITOR.plugins.add("colordialog",CKEDITOR.plugins.colordialog);CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(l){for(var h=l.config.menu_groups.split(","),r=l._.menuGroups={},t=l._.menuItems={},n=0;n<h.length;n++)r[h[n]]=n+1;l.addMenuGroup=function(a,b){r[a]=b||100};l.addMenuItem=function(a,b){r[b.group]&&(t[a]=new CKEDITOR.menuItem(this,a,b))};l.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};l.getMenuItem=function(a){return t[a]};l.removeMenuItem=function(a){delete t[a]}}});
+(function(){function l(a){a.sort(function(a,d){return a.group<d.group?-1:a.group>d.group?1:a.order<d.order?-1:a.order>d.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"';
+CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(h+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');var h=h+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e'),r=CKEDITOR.addTemplate("menuItem",
+h+'\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e'),t=CKEDITOR.addTemplate("menuArrow",'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),
+n=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var d=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),m=d.block.attributes=d.attributes||{};!m.role&&(m.role="menu");this._.panelDefinition=
+d},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),d=this.editor.elementPath(),m=this._.listeners;this.removeAll();for(var g=0;g<m.length;g++){var k=m[g](b,a,d);if(k)for(var e in k){var f=this.editor.getMenuItem(e);!f||f.command&&!this.editor.getCommand(f.command).state||(f.state=k[e],this.add(f))}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):
+27==a&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,d=this.items[a];if(d=d.getItems&&d.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var m in d){var g=this.editor.getMenuItem(m);g&&(g.state=d[m],b.add(g))}var k=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+
+String(a));setTimeout(function(){b.show(k,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,d,m){if(!this.parent&&(this._.onShow(),!this.items.length))return;b=b||("rtl"==this.editor.lang.dir?2:1);var g=this.items,k=this.editor,e=this._.panel,f=this._.element;if(!e){e=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);
+e.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);e.onShow=function(){e._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};e.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);f=e.addBlock(this.id,this._.panelDefinition.block);f.autoSize=!0;var c=f.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c["rtl"==k.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";c[32]=CKEDITOR.env.ie?"mouseup":
+"click";CKEDITOR.env.ie&&(c[13]="mouseup");f=this._.element=f.element;c=f.getDocument();c.getBody().setStyle("overflow","hidden");c.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,k.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);
+this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}l(g);for(var c=k.elementPath(),c=['\x3cdiv class\x3d"cke_menu'+(c&&c.direction()!=k.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],h=g.length,n=h&&g[0].group,q=0;q<h;q++){var p=g[q];n!=p.group&&(c.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),
+n=p.group);p.render(this,q,c)}c.push("\x3c/div\x3e");f.setHtml(c.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(e,this.id,a,b,d,m):e.showBlock(this.id,a,b,d,m);k.fire("menuShow",[e])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,d){CKEDITOR.tools.extend(this,d,{order:0,className:"cke_menubutton__"+b});this.group=
+a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,d){var h=a.id+String(b),g="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,k="",e=this.editor,f,c,l=g==CKEDITOR.TRISTATE_ON?"on":g==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(k=' aria-checked\x3d"'+(g==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var u=this.getItems,q="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",p=this.name;this.icon&&!/\./.test(this.icon)&&
+(p=this.icon);this.command&&(f=e.getCommand(this.command),(f=e.getCommandKeystroke(f))&&(c=CKEDITOR.tools.keystrokeToString(e.lang.common.keyboard,f)));a={id:h,name:this.name,iconName:p,label:this.label,cls:this.className||"",state:l,hasPopup:u?"true":"false",disabled:g==CKEDITOR.TRISTATE_DISABLED,title:this.label+(c?" ("+c.display+")":""),ariaShortcut:c?e.lang.common.keyboardShortcut+" "+c.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,
+clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(p,"rtl"==this.editor.lang.dir,p==this.icon?null:this.icon,this.iconOffset),shortcutHtml:c?n.output({shortcut:c.display}):"",arrowHtml:u?t.output({label:q}):"",role:this.role?this.role:"menuitem",ariaChecked:k};r.output(a,d)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){a=a.data;var c=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!c){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var c=this.editor,
+b=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);b&&"false"==b.getAttribute("contenteditable")&&c.getSelection().fake(b)}var b=a.getTarget().getDocument(),d=a.getTarget().getDocument().getDocumentElement(),c=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),g=c?a.$.clientX:a.$.pageX||b.x+a.$.clientX,h=c?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,h)},CKEDITOR.env.ie?
+200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",d);a.on("contextmenu",d)}},open:function(a,e,f,d){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,f,d)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)});
+a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){function f(c){var a=this.att;c=c&&c.hasAttribute(a)&&c.getAttribute(a)||"";void 0!==c&&this.setValue(c)}function g(){for(var c,a=0;a<arguments.length;a++)if(arguments[a]instanceof CKEDITOR.dom.element){c=arguments[a];break}if(c){var a=this.att,b=this.getValue();b?c.setAttribute(a,b):c.removeAttribute(a,b)}}var k={id:1,dir:1,classes:1,styles:1};CKEDITOR.plugins.add("dialogadvtab",{requires:"dialog",allowedContent:function(c){c||(c=k);var a=[];c.id&&a.push("id");c.dir&&a.push("dir");var b=
+"";a.length&&(b+="["+a.join(",")+"]");c.classes&&(b+="(*)");c.styles&&(b+="{*}");return b},createAdvancedTab:function(c,a,b){a||(a=k);var d=c.lang.common,h={id:"advanced",label:d.advancedTab,title:d.advancedTab,elements:[{type:"vbox",padding:1,children:[]}]},e=[];if(a.id||a.dir)a.id&&e.push({id:"advId",att:"id",type:"text",requiredContent:b?b+"[id]":null,label:d.id,setup:f,commit:g}),a.dir&&e.push({id:"advLangDir",att:"dir",type:"select",requiredContent:b?b+"[dir]":null,label:d.langDir,"default":"",
+style:"width:100%",items:[[d.notSet,""],[d.langDirLTR,"ltr"],[d.langDirRTL,"rtl"]],setup:f,commit:g}),h.elements[0].children.push({type:"hbox",widths:["50%","50%"],children:[].concat(e)});if(a.styles||a.classes)e=[],a.styles&&e.push({id:"advStyles",att:"style",type:"text",requiredContent:b?b+"{cke-xyz}":null,label:d.styles,"default":"",validate:CKEDITOR.dialog.validate.inlineStyle(d.invalidInlineStyle),onChange:function(){},getStyle:function(a,c){var b=this.getValue().match(new RegExp("(?:^|;)\\s*"+
+a+"\\s*:\\s*([^;]*)","i"));return b?b[1]:c},updateStyle:function(a,b){var d=this.getValue(),e=c.document.createElement("span");e.setAttribute("style",d);e.setStyle(a,b);d=CKEDITOR.tools.normalizeCssText(e.getAttribute("style"));this.setValue(d,1)},setup:f,commit:g}),a.classes&&e.push({type:"hbox",widths:["45%","55%"],children:[{id:"advCSSClasses",att:"class",type:"text",requiredContent:b?b+"(cke-xyz)":null,label:d.cssClasses,"default":"",setup:f,commit:g}]}),h.elements[0].children.push({type:"hbox",
+widths:["50%","50%"],children:[].concat(e)});return h}})})();(function(){CKEDITOR.plugins.add("div",{requires:"dialog",init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv",{allowedContent:b,requiredContent:"div",contextSensitive:!0,contentTransformations:[["div: alignmentToStyle"]],refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF:
+CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",new CKEDITOR.dialogCommand("editdiv",{requiredContent:"div"}));a.addCommand("removediv",{requiredContent:"div",exec:function(a){function c(b){(b=CKEDITOR.plugins.div.getSurroundDiv(a,b))&&!b.data("cke-div-added")&&(f.push(b),b.data("cke-div-added"))}for(var b=a.getSelection(),g=b&&b.getRanges(),e,h=b.createBookmarks(),f=[],d=0;d<g.length;d++)e=g[d],e.collapsed?c(b.getStartElement()):(e=new CKEDITOR.dom.walker(e),e.evaluator=c,e.lastForward());
+for(d=0;d<f.length;d++)f[d].remove(!0);b.selectBookmarks(h)}});a.ui.addButton&&a.ui.addButton("CreateDiv",{label:c.toolbar,command:"creatediv",toolbar:"blocks,50"});a.addMenuItems&&(a.addMenuItems({editdiv:{label:c.edit,command:"editdiv",group:"div",order:1},removediv:{label:c.remove,command:"removediv",group:"div",order:5}}),a.contextMenu&&a.contextMenu.addListener(function(b){return!b||b.isReadOnly()?null:CKEDITOR.plugins.div.getSurroundDiv(a)?{editdiv:CKEDITOR.TRISTATE_OFF,removediv:CKEDITOR.TRISTATE_OFF}:
+null}));CKEDITOR.dialog.add("creatediv",this.path+"dialogs/div.js");CKEDITOR.dialog.add("editdiv",this.path+"dialogs/div.js")}}});CKEDITOR.plugins.div={getSurroundDiv:function(a,c){var b=a.elementPath(c);return a.elementPath(b.blockLimit).contains(function(a){return a.is("div")&&!a.isReadOnly()},1)}}})();(function(){function q(a,e){function l(c){c=k.list[c];var d;c.equals(a.editable())||"true"==c.getAttribute("contenteditable")?(d=a.createRange(),d.selectNodeContents(c),d=d.select()):(d=a.getSelection(),d.selectElement(c));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:d,path:new CKEDITOR.dom.elementPath(c)});a.focus()}function m(){n&&n.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete k.list}var p=a.ui.spaceId("path"),n,k=a._.elementsPath,q=k.idBase;e.html+='\x3cspan id\x3d"'+
+p+'_label" class\x3d"cke_voice_label"\x3e'+a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+p+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+p+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var c=a.ui.space("path");c&&a.focusManager.add(c,1)});k.onClick=l;var v=CKEDITOR.tools.addFunction(l),w=CKEDITOR.tools.addFunction(function(c,d){var g=k.idBase,b;d=new CKEDITOR.dom.event(d);b="rtl"==a.lang.dir;switch(d.getKeystroke()){case b?
+39:37:case 9:return(b=CKEDITOR.document.getById(g+(c+1)))||(b=CKEDITOR.document.getById(g+"0")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(c-1)))||(b=CKEDITOR.document.getById(g+(k.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return l(c),!1}return!0});a.on("selectionChange",function(){for(var c=[],d=k.list=[],g=[],b=k.filters,e=!0,l=a.elementPath().elements,f,u=l.length;u--;){var h=l[u],r=0;f=h.data("cke-display-name")?h.data("cke-display-name"):
+h.data("cke-real-element-type")?h.data("cke-real-element-type"):h.getName();(e=h.hasAttribute("contenteditable")?"true"==h.getAttribute("contenteditable"):e)||h.hasAttribute("contenteditable")||(r=1);for(var t=0;t<b.length;t++){var m=b[t](h,f);if(!1===m){r=1;break}f=m||f}r||(d.unshift(h),g.unshift(f))}d=d.length;for(b=0;b<d;b++)f=g[b],e=a.lang.elementspath.eleTitle.replace(/%1/,f),f=x.output({id:q+b,label:e,text:f,jsTitle:"javascript:void('"+f+"')",index:b,keyDownFn:w,clickFn:v}),c.unshift(f);n||
+(n=CKEDITOR.document.getById(p));g=n;g.setHtml(c.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:g})});a.on("readOnly",m);a.on("contentDomUnload",m);a.addCommand("elementsPathFocus",y.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var y={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},e="";CKEDITOR.env.gecko&&
+CKEDITOR.env.mac&&(e+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(e+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var x=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+e+' hidefocus\x3d"true"  onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e');
+CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(e){"bottom"==e.data.space&&q(a,e.data)})}})})();(function(){function q(b,d,a){a=b.config.forceEnterMode||a;"wysiwyg"==b.mode&&(d||(d=b.activeEnterMode),b.elementPath().isContextFor("p")||(d=CKEDITOR.ENTER_BR,a=1),b.fire("saveSnapshot"),d==CKEDITOR.ENTER_BR?t(b,d,null,a):u(b,d,null,a),b.fire("saveSnapshot"))}function v(b){b=b.getSelection().getRanges(!0);for(var d=b.length-1;0<d;d--)b[d].deleteContents();return b[0]}function y(b){var d=b.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},
+!0);if(b.root.equals(d))return b;d=new CKEDITOR.dom.range(d);d.moveToRange(b);return d}CKEDITOR.plugins.add("enterkey",{init:function(b){b.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){q(b)}});b.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){q(b,b.activeShiftEnterMode,1)}});b.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var z=CKEDITOR.dom.walker.whitespaces(),A=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(b,
+d,a,h){if(a=a||v(b)){a=y(a);var f=a.document,k=a.checkStartOfBlock(),m=a.checkEndOfBlock(),l=b.elementPath(a.startContainer),c=l.block,n=d==CKEDITOR.ENTER_DIV?"div":"p",e;if(k&&m){if(c&&(c.is("li")||c.getParent().is("li"))){c.is("li")||(c=c.getParent());a=c.getParent();e=a.getParent();h=!c.hasPrevious();var p=!c.hasNext(),n=b.getSelection(),g=n.createBookmarks(),k=c.getDirection(1),m=c.getAttribute("class"),r=c.getAttribute("style"),q=e.getDirection(1)!=k;b=b.enterMode!=CKEDITOR.ENTER_BR||q||r||m;
+if(e.is("li"))h||p?(h&&p&&a.remove(),c[p?"insertAfter":"insertBefore"](e)):c.breakParent(e);else{if(b)if(l.block.is("li")?(e=f.createElement(d==CKEDITOR.ENTER_P?"p":"div"),q&&e.setAttribute("dir",k),r&&e.setAttribute("style",r),m&&e.setAttribute("class",m),c.moveChildren(e)):e=l.block,h||p)e[h?"insertBefore":"insertAfter"](a);else c.breakParent(a),e.insertAfter(a);else if(c.appendBogus(!0),h||p)for(;f=c[h?"getFirst":"getLast"]();)f[h?"insertBefore":"insertAfter"](a);else for(c.breakParent(a);f=c.getLast();)f.insertAfter(a);
+c.remove()}n.selectBookmarks(g);return}if(c&&c.getParent().is("blockquote")){c.breakParent(c.getParent());c.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getPrevious().remove();c.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getNext().remove();a.moveToElementEditStart(c);a.select();return}}else if(c&&c.is("pre")&&!m){t(b,d,a,h);return}if(k=a.splitBlock(n)){d=k.previousBlock;c=k.nextBlock;l=k.wasStartOfBlock;b=k.wasEndOfBlock;c?(g=c.getParent(),g.is("li")&&(c.breakParent(g),
+c.move(c.getNext(),1))):d&&(g=d.getParent())&&g.is("li")&&(d.breakParent(g),g=d.getNext(),a.moveToElementEditStart(g),d.move(d.getPrevious()));if(l||b){if(d){if(d.is("li")||!w.test(d.getName())&&!d.is("pre"))e=d.clone()}else c&&(e=c.clone());e?h&&!e.is("li")&&e.renameNode(n):g&&g.is("li")?e=g:(e=f.createElement(n),d&&(p=d.getDirection())&&e.setAttribute("dir",p));if(f=k.elementPath)for(h=0,n=f.elements.length;h<n;h++){g=f.elements[h];if(g.equals(f.block)||g.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[g.getName()]&&
+(g=g.clone(),e.moveChildren(g),e.append(g))}e.appendBogus();e.getParent()||a.insertNode(e);e.is("li")&&e.removeAttribute("value");!CKEDITOR.env.ie||!l||b&&d.getChildCount()||(a.moveToElementEditStart(b?d:e),a.select());a.moveToElementEditStart(l&&!b?c:e)}else c.is("li")&&(e=a.clone(),e.selectNodeContents(c),e=new CKEDITOR.dom.walker(e),e.evaluator=function(a){return!(A(a)||z(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(g=e.next())&&
+g.type==CKEDITOR.NODE_ELEMENT&&g.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?f.createElement("br"):f.createText(" ")).insertBefore(g)),c&&a.moveToElementEditStart(c);a.select();a.scrollIntoView()}}},enterBr:function(b,d,a,h){if(a=a||v(b)){var f=a.document,k=a.checkEndOfBlock(),m=new CKEDITOR.dom.elementPath(b.getSelection().getStartElement()),l=m.block,c=l&&m.block.getName();h||"li"!=c?(!h&&k&&w.test(c)?(k=l.getDirection())?(f=f.createElement("div"),f.setAttribute("dir",k),f.insertAfter(l),a.setStart(f,
+0)):(f.createElement("br").insertAfter(l),CKEDITOR.env.gecko&&f.createText("").insertAfter(l),a.setStartAt(l.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(b="pre"==c&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?f.createText("\r"):f.createElement("br"),a.deleteContents(),a.insertNode(b),CKEDITOR.env.needsBrFiller?(f.createText("﻿").insertAfter(b),k&&(l||m.blockLimit).appendBogus(),b.getNext().$.nodeValue="",a.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)):
+a.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),a.collapse(!0),a.select(),a.scrollIntoView()):u(b,d,a,h)}}};var x=CKEDITOR.plugins.enterkey,t=x.enterBr,u=x.enterBlock,w=/^h[1-6]$/})();(function(){function k(b,f){var g={},c=[],e={nbsp:" ",shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,a){var d=f?"\x26"+a+";":e[a];g[d]=f?e[a]:"\x26"+a+";";c.push(d);return""});if(!f&&b){b=b.split(",");var a=document.createElement("div"),d;a.innerHTML="\x26"+b.join(";\x26")+";";d=a.innerHTML;a=null;for(a=0;a<d.length;a++){var h=d.charAt(a);g[h]="\x26"+b[a]+";";c.push(h)}}g.regex=c.join(f?"|":"");return g}CKEDITOR.plugins.add("entities",
+{afterInit:function(b){function f(a){return h[a]}function g(b){return"force"!=c.entities_processNumerical&&a[b]?a[b]:"\x26#"+b.charCodeAt(0)+";"}var c=b.config;if(b=(b=b.dataProcessor)&&b.htmlFilter){var e=[];!1!==c.basicEntities&&e.push("nbsp,gt,lt,amp");c.entities&&(e.length&&e.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
+c.entities_latin&&e.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),c.entities_greek&&e.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"),
+c.entities_additional&&e.push(c.entities_additional));var a=k(e.join(",")),d=a.regex?"["+a.regex+"]":"a^";delete a.regex;c.entities&&c.entities_processNumerical&&(d="[^ -~]|"+d);var d=new RegExp(d,"g"),h=k("nbsp,gt,lt,amp,shy",!0),l=new RegExp(h.regex,"g");b.addRules({text:function(a){return a.replace(l,f).replace(d,g)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;
+CKEDITOR.config.entities_additional="#39";(function(){function g(a,b){var c=l.exec(a),d=l.exec(b);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return b}var k=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,l=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,m={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes["data-cke-resizable"]){var c=(new k(a)).rules;a=b.attributes;var d=c.width,
+c=c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")},afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(m,{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown;b={"class":b,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type,
+alt:e,title:e,align:a.getAttribute("align")||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,c=new k,d=a.getAttribute("width"),a=a.getAttribute("height"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement("img",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter;
+a.writeHtml(f);f=f.getHtml();b={"class":b,"data-cke-realelement":encodeURIComponent(f),"data-cke-real-node-type":a.type,alt:e,title:e,align:a.attributes.align||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,d=a.attributes,a=new k,c=d.width,d=d.height,void 0!==c&&(a.rules.width=h(c)),void 0!==d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element("img",b)};CKEDITOR.editor.prototype.restoreRealElement=
+function(a){if(a.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data("cke-realelement")),this.document);if(a.data("cke-resizable")){var c=a.getStyle("width");a=a.getStyle("height");c&&b.setAttribute("width",g(b.getAttribute("width"),c));a&&b.setAttribute("height",g(b.getAttribute("height"),a))}return b}})();CKEDITOR.plugins.add("popup");
+CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(e,a,b,d){a=a||"80%";b=b||"70%";"string"==typeof a&&1<a.length&&"%"==a.substr(a.length-1,1)&&(a=parseInt(window.screen.width*parseInt(a,10)/100,10));"string"==typeof b&&1<b.length&&"%"==b.substr(b.length-1,1)&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10));640>a&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10);d=(d||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+
+a+",height\x3d"+b+",top\x3d"+f+",left\x3d"+g;var c=window.open("",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+"\x3d"+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+d.join("\x26")}function k(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function m(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+k(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+k(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||
+"70%",b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function n(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value&&a.getContentElement(this["for"][0],this["for"][1]).getAction()?!0:!1}function p(a,c,d){var b=d.params||
+{};b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function l(a,c,d,b){if(b&&b.length)for(var e,g=b.length;g--;)if(e=b[g],"hbox"!=e.type&&"vbox"!=e.type&&"fieldset"!=e.type||l(a,c,d,e.children),e.filebrowser)if("string"==typeof e.filebrowser&&(e.filebrowser={action:"fileButton"==e.type?"QuickUpload":"Browse",target:e.filebrowser}),"Browse"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config["filebrowser"+
+k(c)+"BrowseUrl"],void 0===f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=m,e.filebrowser.url=f,e.hidden=!1)}else if("QuickUpload"==e.filebrowser.action&&e["for"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config["filebrowser"+k(c)+"UploadUrl"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;if(h&&!1===h.call(b,a))return!1;if(n.call(b,a)){a=b.getDialog().getContentElement(this["for"][0],this["for"][1]).getInputElement();if(b=new CKEDITOR.dom.element(a.$.form))(a=
+b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken());return!0}return!1};e.filebrowser.url=f;e.hidden=!1;p(a,d.getContents(e["for"][0]).get(e["for"][1]),e.filebrowser)}}function h(a,c,d){if(-1!==d.indexOf(";")){d=d.split(";");for(var b=0;b<d.length;b++)if(h(a,c,d[b]))return!0;return!1}return(a=a.getContents(c).get(d).filebrowser)&&a.url}function q(a,
+c){var d=this._.filebrowserSe.getDialog(),b=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;b&&d.getContentElement(b[0],b[1]).reset();if("function"!=typeof c||!1!==c.call(this._.filebrowserSe))if(!e||!1!==e.call(this._.filebrowserSe,a,c))if("string"==typeof c&&c&&alert(c),a&&(b=this._.filebrowserSe,d=b.getDialog(),b=b.filebrowser.target||null))if(b=b.split(":"),e=d.getContentElement(b[0],b[1]))e.setValue(a),d.selectPage(b[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup",
+init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(q,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var c=a.data.definition,d,b=0;b<c.contents.length;++b)if(d=c.contents[b])l(a.editor,a.data.name,c,d.elements),d.hidden&&d.filebrowser&&(d.hidden=!h(c,d.id,d.filebrowser))})})();CKEDITOR.plugins.add("find",{requires:"dialog",init:function(a){var b=a.addCommand("find",new CKEDITOR.dialogCommand("find"));b.canUndo=!1;b.readOnly=1;a.addCommand("replace",new CKEDITOR.dialogCommand("replace")).canUndo=!1;a.ui.addButton&&(a.ui.addButton("Find",{label:a.lang.find.find,command:"find",toolbar:"find,10"}),a.ui.addButton("Replace",{label:a.lang.find.replace,command:"replace",toolbar:"find,20"}));CKEDITOR.dialog.add("find",this.path+"dialogs/find.js");CKEDITOR.dialog.add("replace",this.path+
+"dialogs/find.js")}});CKEDITOR.config.find_highlight={element:"span",styles:{"background-color":"#004",color:"#fff"}};(function(){function d(a){a=a.attributes;return"application/x-shockwave-flash"==a.type||f.test(a.src||"")}function e(a,b){return a.createFakeParserElement(b,"cke_flash","flash",!0)}var f=/\.swf(?:$|\?)/i;CKEDITOR.plugins.add("flash",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss("img.cke_flash{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},
+init:function(a){var b="object[classid,codebase,height,hspace,vspace,width];param[name,value];embed[height,hspace,pluginspage,src,type,vspace,width]";CKEDITOR.dialog.isTabEnabled(a,"flash","properties")&&(b+=";object[align]; embed[allowscriptaccess,quality,scale,wmode]");CKEDITOR.dialog.isTabEnabled(a,"flash","advanced")&&(b+=";object[id]{*}; embed[bgcolor]{*}(*)");a.addCommand("flash",new CKEDITOR.dialogCommand("flash",{allowedContent:b,requiredContent:"embed"}));a.ui.addButton&&a.ui.addButton("Flash",
+{label:a.lang.common.flash,command:"flash",toolbar:"insert,20"});CKEDITOR.dialog.add("flash",this.path+"dialogs/flash.js");a.addMenuItems&&a.addMenuItems({flash:{label:a.lang.flash.properties,command:"flash",group:"flash"}});a.on("doubleclick",function(a){var b=a.data.element;b.is("img")&&"flash"==b.data("cke-real-element-type")&&(a.data.dialog="flash")});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&!a.isReadOnly()&&"flash"==a.data("cke-real-element-type"))return{flash:CKEDITOR.TRISTATE_OFF}})},
+afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{"cke:object":function(b){var c=b.attributes;if(!(c.classid&&String(c.classid).toLowerCase()||d(b))){for(c=0;c<b.children.length;c++)if("cke:embed"==b.children[c].name){if(!d(b.children[c]))break;return e(a,b)}return null}return e(a,b)},"cke:embed":function(b){return d(b)?e(a,b):null}}},5)}})})();CKEDITOR.tools.extend(CKEDITOR.config,{flashEmbedTagOnly:!1,flashAddEmbedTag:!0,flashConvertOnEdit:!1});(function(){function k(a){var l=a.config,p=a.fire("uiSpace",{space:"top",html:""}).html,t=function(){function f(a,c,e){b.setStyle(c,w(e));b.setStyle("position",a)}function e(a){var b=k.getDocumentPosition();switch(a){case "top":f("absolute","top",b.y-q-r);break;case "pin":f("fixed","top",x);break;case "bottom":f("absolute","top",b.y+(c.height||c.bottom-c.top)+r)}m=a}var m,k,n,c,h,q,v,p=l.floatSpaceDockedOffsetX||0,r=l.floatSpaceDockedOffsetY||0,u=l.floatSpacePinnedOffsetX||0,x=l.floatSpacePinnedOffsetY||
+0;return function(d){if(k=a.editable()){var f=d&&"focus"==d.name;f&&b.show();a.fire("floatingSpaceLayout",{show:f});b.removeStyle("left");b.removeStyle("right");n=b.getClientRect();c=k.getClientRect();h=g.getViewPaneSize();q=n.height;v="pageXOffset"in g.$?g.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;m?(q+r<=c.top?e("top"):q+r>h.height-c.bottom?e("pin"):e("bottom"),d=h.width/2,d=l.floatSpacePreferRight?"right":0<c.left&&c.right<h.width&&c.width>n.width?"rtl"==l.contentsLangDirection?
+"right":"left":d-c.left>c.right-d?"left":"right",n.width>h.width?(d="left",f=0):(f="left"==d?0<c.left?c.left:0:c.right<h.width?h.width-c.right:0,f+n.width>h.width&&(d="left"==d?"right":"left",f=0)),b.setStyle(d,w(("pin"==m?u:p)+f+("pin"==m?0:"left"==d?v:-v)))):(m="pin",e("pin"),t(d))}}}();if(p){var k=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?
+" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(a.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(a.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(k.output({content:p,id:a.id,langDir:a.lang.dir,
+langCode:a.langCode,name:a.name,style:"display:none;z-index:"+(l.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),u=CKEDITOR.tools.eventsBuffer(500,t),e=CKEDITOR.tools.eventsBuffer(100,t);b.unselectable();b.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){t(b);a.on("change",u.input);g.on("scroll",e.input);g.on("resize",e.input)});a.on("blur",function(){b.hide();a.removeListener("change",u.input);g.removeListener("scroll",
+e.input);g.removeListener("resize",e.input)});a.on("destroy",function(){g.removeListener("scroll",e.input);g.removeListener("resize",e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var g=CKEDITOR.document.getWindow(),w=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("loaded",function(){k(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var f=CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),g=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" href\x3d"javascript:void(\'{val}\')"  {onclick}\x3d"CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'),
+h=CKEDITOR.addTemplate("panel-list-group",'\x3ch1 id\x3d"{id}" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'),k=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){b=b||{};var c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&&
+(c.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",c.role);c=this.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||
+(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(k,"\\'");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a};
+this._.pendingList.push(g.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display",
+"none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var b=this.element.getDocument().getById(a);
+b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&
+this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus();c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});
+(function(){var d='\x3cspan id\x3d"{id}" class\x3d"cke_combo cke_combo__{name} {cls}" role\x3d"presentation"\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_combo_label"\x3e{label}\x3c/span\x3e\x3ca class\x3d"cke_combo_button" title\x3d"{title}" tabindex\x3d"-1"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress\x3d"return false;"');
+CKEDITOR.env.gecko&&(d+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var d=d+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e'+
+(CKEDITOR.env.hc?"\x26#9660;":CKEDITOR.env.air?"\x26nbsp;":"")+"\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"),k=CKEDITOR.addTemplate("combo",d);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";
+a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function g(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(c=CKEDITOR.TRISTATE_DISABLED);this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=
+CKEDITOR.env,h="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){l&&(a.unlockSelection(1),l=0);c.execute(b)},this),f=this,c={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(c){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var d=f.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(c),4)}},clickFn:e};a.on("activeFilterChange",g,this);a.on("mode",
+g,this);a.on("selectionChange",g,this);!this.readOnly&&a.on("readOnly",g,this);var m=CKEDITOR.tools.addFunction(function(b,d){b=new CKEDITOR.dom.event(b);var g=b.getKeystroke();if(40==g)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(g){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,d);break;default:c.onkey(c,g)}b.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),l=0;c.keyDownFn=m;d={id:h,name:this.name||this.command,label:this.label,
+title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:m,focusFn:n,clickFn:e};k.output(d,b);if(this.onRender)this.onRender();return c},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,d=this._.panelDefinition.block,k=b.parent||CKEDITOR.document.getBody(),h="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,k,b),f=e.addListBlock(this.id,d),c=this;e.onShow=function(){this.element.addClass(h);c.setState(CKEDITOR.TRISTATE_ON);
+c._.on=1;c.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(c.onOpen)c.onOpen();a.once("panelShow",function(){f.focus(!f.multiSelect&&c.getValue())})};e.onHide=function(b){this.element.removeClass(h);c.setState(c.modes&&c.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);c._.on=0;if(!b&&c.onClose)c.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){c.onClick&&c.onClick.call(c,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){c._.on=
+0;c.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var d=this.document.getById("cke_"+this.id+"_text");d&&(a||b?d.removeClass("cke_combo_inlinelabel"):(b=this.label,d.addClass("cke_combo_inlinelabel")),d.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},
+showAll:function(){this._.list.showAll()},add:function(a,b,d){this._.items[a]=d||a;this._.list.add(a,b,d)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=
+a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();(function(){function n(a,c,h,e,q,n,u,w){var x=a.config,r=new CKEDITOR.style(u),g=q.split(";");q=[];for(var m={},d=0;d<g.length;d++){var l=g[d];if(l){var l=l.split("/"),v={},p=g[d]=l[0];v[h]=q[d]=l[1]||p;m[p]=new CKEDITOR.style(u,v);m[p]._.definition.name=p}else g.splice(d--,1)}a.ui.addRichCombo(c,{label:e.label,title:e.panelTitle,toolbar:"styles,"+w,allowedContent:r,requiredContent:r,contentTransformations:[[{element:"font",check:"span",left:function(b){return!!b.attributes.size||!!b.attributes.align||
+!!b.attributes.face},right:function(b){var a=" x-small small medium large x-large xx-large 48px".split(" ");b.name="span";b.attributes.size&&(b.styles["font-size"]=a[b.attributes.size],delete b.attributes.size);b.attributes.align&&(b.styles["text-align"]=b.attributes.align,delete b.attributes.align);b.attributes.face&&(b.styles["font-family"]=b.attributes.face,delete b.attributes.face)}}]],panel:{css:[CKEDITOR.skin.getPath("editor")].concat(x.contentsCss),multiSelect:!1,attributes:{"aria-label":e.panelTitle}},
+init:function(){this.startGroup(e.panelTitle);for(var b=0;b<g.length;b++){var a=g[b];this.add(a,m[a].buildPreview(),a)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var c=this.getValue(),h=m[b];if(c&&b!=c){var e=m[c],f=a.getSelection().getRanges()[0];if(f.collapsed){var g=a.elementPath(),k=g.contains(function(a){return e.checkElementRemovable(a)});if(k){var d=f.checkBoundaryOfElement(k,CKEDITOR.START),l=f.checkBoundaryOfElement(k,CKEDITOR.END);if(d&&l){for(d=f.createBookmark();g=k.getFirst();)g.insertBefore(k);
+k.remove();f.moveToBookmark(d)}else d||l?f.moveToPosition(k,d?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_END):(f.splitElement(k),f.moveToPosition(k,CKEDITOR.POSITION_AFTER_END)),t(f,g.elements.slice(),k);a.getSelection().selectRanges([f])}}else a.removeStyle(e)}a[c==b?"removeStyle":"applyStyle"](h);a.fire("saveSnapshot")},onRender:function(){a.on("selectionChange",function(b){var c=this.getValue();b=b.data.path.elements;for(var d=0,e;d<b.length;d++){e=b[d];for(var f in m)if(m[f].checkElementMatch(e,
+!0,a)){f!=c&&this.setValue(f);return}}this.setValue("",n)},this)},refresh:function(){a.activeFilter.check(r)||this.setState(CKEDITOR.TRISTATE_DISABLED)}})}function t(a,c,h){var e=c.pop();if(e){if(h)return t(a,c,e.equals(h)?null:h);h=e.clone();a.insertNode(h);a.moveToPosition(h,CKEDITOR.POSITION_AFTER_START);t(a,c)}}CKEDITOR.plugins.add("font",{requires:"richcombo",init:function(a){var c=a.config;n(a,"Font","family",a.lang.font,c.font_names,c.font_defaultLabel,c.font_style,30);n(a,"FontSize","size",
+a.lang.font.fontSize,c.fontSize_sizes,c.fontSize_defaultLabel,c.fontSize_style,40)}})})();CKEDITOR.config.font_names="Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif";
+CKEDITOR.config.font_defaultLabel="";CKEDITOR.config.font_style={element:"span",styles:{"font-family":"#(family)"},overrides:[{element:"font",attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes="8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";CKEDITOR.config.fontSize_defaultLabel="";CKEDITOR.config.fontSize_style={element:"span",styles:{"font-size":"#(size)"},overrides:[{element:"font",attributes:{size:null}}]};CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var f=a.config,c=a.lang.format,l=f.format_tags.split(";"),d={},m=0,n=[],g=0;g<l.length;g++){var h=l[g],k=new CKEDITOR.style(f["format_"+h]);if(!a.filter.customConfig||a.filter.check(k))m++,d[h]=k,d[h]._.enterMode=a.config.enterMode,n.push(k)}0!==m&&a.ui.addRichCombo("Format",{label:c.label,title:c.panelTitle,toolbar:"styles,20",allowedContent:n,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(f.contentsCss),
+multiSelect:!1,attributes:{"aria-label":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);for(var a in d){var e=c["tag_"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire("saveSnapshot");b=d[b];var e=a.elementPath();a[b.checkActive(e,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var e=this.getValue();b=b.data.path;this.refresh();for(var c in d)if(d[c].checkActive(b,a)){c!=
+e&&this.setValue(c,a.lang.format["tag_"+c]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in d)a.activeFilter.check(d[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var c in d)if(a.activeFilter.check(d[c]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"};
+CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};CKEDITOR.plugins.add("forms",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss(".cke_editable form{border: 1px dotted #FF0000;padding: 2px;}\n");CKEDITOR.addCss("img.cke_hidden{background-image: url("+CKEDITOR.getUrl(this.path+"images/hiddenfield.gif")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 16px !important;height: 16px !important;}")},init:function(a){var b=a.lang,g=0,h={email:1,password:1,search:1,tel:1,text:1,url:1},l={checkbox:"input[type,name,checked,required]",
+radio:"input[type,name,checked,required]",textfield:"input[type,name,value,size,maxlength,required]",textarea:"textarea[cols,rows,name,required]",select:"select[name,size,multiple,required]; option[value,selected]",button:"input[type,name,value]",form:"form[action,name,id,enctype,target,method]",hiddenfield:"input[type,name,value]",imagebutton:"input[type,alt,src]{width,height,border,border-width,border-style,margin,float}"},m={checkbox:"input",radio:"input",textfield:"input",textarea:"textarea",
+select:"select",button:"input",form:"form",hiddenfield:"input",imagebutton:"input"},e=function(d,c,e){var h={allowedContent:l[c],requiredContent:m[c]};"form"==c&&(h.context="form");a.addCommand(c,new CKEDITOR.dialogCommand(c,h));a.ui.addButton&&a.ui.addButton(d,{label:b.common[d.charAt(0).toLowerCase()+d.slice(1)],command:c,toolbar:"forms,"+(g+=10)});CKEDITOR.dialog.add(c,e)},f=this.path+"dialogs/";!a.blockless&&e("Form","form",f+"form.js");e("Checkbox","checkbox",f+"checkbox.js");e("Radio","radio",
+f+"radio.js");e("TextField","textfield",f+"textfield.js");e("Textarea","textarea",f+"textarea.js");e("Select","select",f+"select.js");e("Button","button",f+"button.js");var k=a.plugins.image;k&&!a.plugins.image2&&e("ImageButton","imagebutton",CKEDITOR.plugins.getPath("image")+"dialogs/image.js");e("HiddenField","hiddenfield",f+"hiddenfield.js");a.addMenuItems&&(e={checkbox:{label:b.forms.checkboxAndRadio.checkboxTitle,command:"checkbox",group:"checkbox"},radio:{label:b.forms.checkboxAndRadio.radioTitle,
+command:"radio",group:"radio"},textfield:{label:b.forms.textfield.title,command:"textfield",group:"textfield"},hiddenfield:{label:b.forms.hidden.title,command:"hiddenfield",group:"hiddenfield"},button:{label:b.forms.button.title,command:"button",group:"button"},select:{label:b.forms.select.title,command:"select",group:"select"},textarea:{label:b.forms.textarea.title,command:"textarea",group:"textarea"}},k&&(e.imagebutton={label:b.image.titleButton,command:"imagebutton",group:"imagebutton"}),!a.blockless&&
+(e.form={label:b.forms.form.menu,command:"form",group:"form"}),a.addMenuItems(e));a.contextMenu&&(!a.blockless&&a.contextMenu.addListener(function(d,c,a){if((d=a.contains("form",1))&&!d.isReadOnly())return{form:CKEDITOR.TRISTATE_OFF}}),a.contextMenu.addListener(function(d){if(d&&!d.isReadOnly()){var c=d.getName();if("select"==c)return{select:CKEDITOR.TRISTATE_OFF};if("textarea"==c)return{textarea:CKEDITOR.TRISTATE_OFF};if("input"==c){var a=d.getAttribute("type")||"text";switch(a){case "button":case "submit":case "reset":return{button:CKEDITOR.TRISTATE_OFF};
+case "checkbox":return{checkbox:CKEDITOR.TRISTATE_OFF};case "radio":return{radio:CKEDITOR.TRISTATE_OFF};case "image":return k?{imagebutton:CKEDITOR.TRISTATE_OFF}:null}if(h[a])return{textfield:CKEDITOR.TRISTATE_OFF}}if("img"==c&&"hiddenfield"==d.data("cke-real-element-type"))return{hiddenfield:CKEDITOR.TRISTATE_OFF}}}));a.on("doubleclick",function(d){var c=d.data.element;if(!a.blockless&&c.is("form"))d.data.dialog="form";else if(c.is("select"))d.data.dialog="select";else if(c.is("textarea"))d.data.dialog=
+"textarea";else if(c.is("img")&&"hiddenfield"==c.data("cke-real-element-type"))d.data.dialog="hiddenfield";else if(c.is("input")){c=c.getAttribute("type")||"text";switch(c){case "button":case "submit":case "reset":d.data.dialog="button";break;case "checkbox":d.data.dialog="checkbox";break;case "radio":d.data.dialog="radio";break;case "image":d.data.dialog="imagebutton"}h[c]&&(d.data.dialog="textfield")}})},afterInit:function(a){var b=a.dataProcessor,g=b&&b.htmlFilter,b=b&&b.dataFilter;CKEDITOR.env.ie&&
+g&&g.addRules({elements:{input:function(a){a=a.attributes;var b=a.type;b||(a.type="text");"checkbox"!=b&&"radio"!=b||"on"!=a.value||delete a.value}}},{applyToAll:!0});b&&b.addRules({elements:{input:function(b){if("hidden"==b.attributes.type)return a.createFakeParserElement(b,"cke_hidden","hiddenfield")}}},{applyToAll:!0})}});(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(a){a.blockless||(a.addCommand("horizontalrule",b),a.ui.addButton&&a.ui.addButton("HorizontalRule",{label:a.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=a}});
+CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" /\x3e";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a]["#"],breakBeforeOpen:1,breakBeforeClose:!b[a]["#"],breakAfterClose:1,needsSpace:a in
+b.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&a&&a.needsSpace&&this._.needsSpace&&this._.output.push("\n");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("\x3c",b);this._.afterCloser=0},
+openTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push("\x3e"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,a){"string"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,"\x26")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(" ",b,'\x3d"',a,'"')},closeTag:function(b){var a=
+this._.rules[b];a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("\x3c/",b,"\x3e");"pre"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&
+this.indentation();this._.output.push("\x3c!--",b,"--\x3e")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0;this._.needsSpace=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=
+a}}});(function(){CKEDITOR.plugins.add("iframe",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss("img.cke_iframe{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},init:function(a){var b=a.lang.iframe,c="iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]";a.plugins.dialogadvtab&&(c+=";iframe"+a.plugins.dialogadvtab.allowedContent({id:1,
+classes:1,styles:1}));CKEDITOR.dialog.add("iframe",this.path+"dialogs/iframe.js");a.addCommand("iframe",new CKEDITOR.dialogCommand("iframe",{allowedContent:c,requiredContent:"iframe"}));a.ui.addButton&&a.ui.addButton("Iframe",{label:b.toolbar,command:"iframe",toolbar:"insert,80"});a.on("doubleclick",function(a){var b=a.data.element;b.is("img")&&"iframe"==b.data("cke-real-element-type")&&(a.data.dialog="iframe")});a.addMenuItems&&a.addMenuItems({iframe:{label:b.title,command:"iframe",group:"image"}});
+a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&"iframe"==a.data("cke-real-element-type"))return{iframe:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{iframe:function(b){return a.createFakeParserElement(b,"cke_iframe","iframe",!0)}}})}})})();CKEDITOR.plugins.add("iframedialog",{requires:"dialog",onLoad:function(){CKEDITOR.dialog.addIframe=function(e,d,a,l,f,n,g){a={type:"iframe",src:a,width:"100%",height:"100%"};a.onContentLoad="function"==typeof n?n:function(){var a=this.getElement().$.contentWindow;if(a.onDialogEvent){var b=this.getDialog(),c=function(b){return a.onDialogEvent(b)};b.on("ok",c);b.on("cancel",c);b.on("resize",c);b.on("hide",function(a){b.removeListener("ok",c);b.removeListener("cancel",c);b.removeListener("resize",c);
+a.removeListener()});a.onDialogEvent({name:"load",sender:this,editor:b._.editor})}};var h={title:d,minWidth:l,minHeight:f,contents:[{id:"iframe",label:d,expand:!0,elements:[a],style:"width:"+a.width+";height:"+a.height}]},k;for(k in g)h[k]=g[k];this.add(e,function(){return h})};(function(){var e=function(d,a,l){if(!(3>arguments.length)){var f=this._||(this._={}),e=a.onContentLoad&&CKEDITOR.tools.bind(a.onContentLoad,this),g=CKEDITOR.tools.cssLength(a.width),h=CKEDITOR.tools.cssLength(a.height);f.frameId=
+CKEDITOR.tools.getNextId()+"_iframe";d.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().setStyles({width:g,height:h})});var k={src:"%2",id:f.frameId,frameborder:0,allowtransparency:!0},m=[];"function"==typeof a.onContentLoad&&(k.onload="CKEDITOR.tools.callFunction(%1);");CKEDITOR.ui.dialog.uiElement.call(this,d,a,m,"iframe",{width:g,height:h},k,"");l.push('\x3cdiv style\x3d"width:'+g+";height:"+h+';" id\x3d"'+this.domId+'"\x3e\x3c/div\x3e');m=m.join("");d.on("show",function(){var b=
+CKEDITOR.document.getById(f.frameId).getParent(),c=CKEDITOR.tools.addFunction(e),c=m.replace("%1",c).replace("%2",CKEDITOR.tools.htmlEncode(a.src));b.setHtml(c)})}};e.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.dialog.addUIElement("iframe",{build:function(d,a,l){return new e(d,a,l)}})})()}});(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is("img")&&!a.data("cke-realelement")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle("float");if("inherit"==a||"none"==a)a=0;a||(a=b.getAttribute("align"));return a}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var a="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}";
+CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(a="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:a,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(b){var a=
+b.data.element;!a.is("img")||a.data("cke-realelement")||a.isReadOnly()||(b.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")):
+c.setStyle("float",a),d.cancel())});d.on("refresh",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:"right"==a||"left"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}b.plugins.image2||(a("left"),a("right"),a("center"),a("block"))}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function m(a,b){var e,f;b.on("refresh",function(a){var b=[k],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,p)?p:k)},b,null,100);b.on("exec",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var k=CKEDITOR.TRISTATE_DISABLED,p=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition;
+m(a,a.addCommand("indent",new b(!0)));m(a,a.addCommand("outdent",new b));a.ui.addButton&&(a.ui.addButton("Indent",{label:a.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),a.ui.addButton("Outdent",{label:a.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));a.on("dirChanged",function(b){var f=a.createRange(),l=b.data.node;f.setStartBefore(l);f.setEndAfter(l);for(var n=new CKEDITOR.dom.walker(f),c;c=n.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(l)&&
+c.getDirection())f.setStartAfter(c),n=new CKEDITOR.dom.walker(f);else{var d=a.config.indentClasses;if(d)for(var g="ltr"==b.data.dir?["_rtl",""]:["","_rtl"],h=0;h<d.length;h++)c.hasClass(d[h]+g[0])&&(c.removeClass(d[h]+g[0]),c.addClass(d[h]+g[1]));d=c.getStyle("margin-right");g=c.getStyle("margin-left");d?c.setStyle("margin-left",d):c.removeStyle("margin-left");g?c.setStyle("margin-right",g):c.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=!!a;
+this.startDisabled=!this.isIndent},specificDefinition:function(a,b,e){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a,b){var e=a.getCommand(b.relatedGlobal),c;for(c in b.jobs)e.on("exec",function(d){d.data.done||(a.fire("lockSnapshot"),b.execJob(a,c)&&(d.data.done=
+!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,c),e.on("refresh",function(d){d.data.states||(d.data.states={});d.data.states[b.name+"@"+c]=b.refreshJob(a,c,d.data.path)},this,null,c);a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,b){var e=this.jobs[b];if(e.state!=k)return e.exec.call(this,a)},refreshJob:function(a,
+b,e){b=this.jobs[b];a.activeFilter.checkFeature(this)?b.state=b.refresh.call(this,a,e):b.state=k;return b.state},getContext:function(a){return a.contains(this.context)}}})();(function(){function f(b,c,a){if(!b.getCustomData("indent_processed")){var d=this.editor,l=this.isIndent;if(c){d=b.$.className.match(this.classNameRegex);a=0;d&&(d=d[1],a=CKEDITOR.tools.indexOf(c,d)+1);if(0>(a+=l?1:-1))return;a=Math.min(a,c.length);a=Math.max(a,0);b.$.className=CKEDITOR.tools.ltrim(b.$.className.replace(this.classNameRegex,""));0<a&&b.addClass(c[a-1])}else{c=m(b,a);a=parseInt(b.getStyle(c),10);var g=d.config.indentOffset||40;isNaN(a)&&(a=0);a+=(l?1:-1)*g;if(0>a)return;a=Math.max(a,
+0);a=Math.ceil(a/g)*g;b.setStyle(c,a?a+(d.config.indentUnit||"px"):"");""===b.getAttribute("style")&&b.removeAttribute("style")}CKEDITOR.dom.element.setMarker(this.database,b,"indent_processed",1)}}function m(b,c){return"ltr"==(c||b.getComputedStyle("direction"))?"margin-left":"margin-right"}var h=CKEDITOR.dtd.$listItem,p=CKEDITOR.dtd.$list,k=CKEDITOR.TRISTATE_DISABLED,n=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentblock",{requires:"indent",init:function(b){function c(){a.specificDefinition.apply(this,
+arguments);this.allowedContent={"div h1 h2 h3 h4 h5 h6 ol p pre ul":{propertiesOnly:!0,styles:d?null:"margin-left,margin-right",classes:d||null}};this.contentTransformations=[["div: splitMarginShorthand"],["h1: splitMarginShorthand"],["h2: splitMarginShorthand"],["h3: splitMarginShorthand"],["h4: splitMarginShorthand"],["h5: splitMarginShorthand"],["h6: splitMarginShorthand"],["ol: splitMarginShorthand"],["p: splitMarginShorthand"],["pre: splitMarginShorthand"],["ul: splitMarginShorthand"]];this.enterBr&&
+(this.allowedContent.div=!0);this.requiredContent=(this.enterBr?"div":"p")+(d?"("+d.join(",")+")":"{margin-left}");this.jobs={20:{refresh:function(a,b){var e=b.block||b.blockLimit;if(!e.is(h))var c=e.getAscendant(h),e=c&&b.contains(c)||e;e.is(h)&&(e=e.getParent());if(this.enterBr||this.getContext(b)){if(d){var c=d,e=e.$.className.match(this.classNameRegex),f=this.isIndent,c=e?f?e[1]!=c.slice(-1):!0:f;return c?n:k}return this.isIndent?n:e?CKEDITOR[0>=(parseInt(e.getStyle(m(e)),10)||0)?"TRISTATE_DISABLED":
+"TRISTATE_OFF"]:k}return k},exec:function(a){var b=a.getSelection(),b=b&&b.getRanges()[0],c;if(c=a.elementPath().contains(p))f.call(this,c,d);else for(b=b.createIterator(),a=a.config.enterMode,b.enforceRealBlocks=!0,b.enlargeBr=a!=CKEDITOR.ENTER_BR;c=b.getNextParagraph(a==CKEDITOR.ENTER_P?"p":"div");)c.isReadOnly()||f.call(this,c,d);return!0}}}}var a=CKEDITOR.plugins.indent,d=b.config.indentClasses;a.registerCommands(b,{indentblock:new c(b,"indentblock",!0),outdentblock:new c(b,"outdentblock")});
+CKEDITOR.tools.extend(c.prototype,a.specificDefinition.prototype,{context:{div:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,p:1,pre:1,table:1},classNameRegex:d?new RegExp("(?:^|\\s+)("+d.join("|")+")(?\x3d$|\\s)"):null})}})})();(function(){function w(c){function f(b){for(var e=d.startContainer,a=d.endContainer;e&&!e.getParent().equals(b);)e=e.getParent();for(;a&&!a.getParent().equals(b);)a=a.getParent();if(!e||!a)return!1;for(var g=e,e=[],k=!1;!k;)g.equals(a)&&(k=!0),e.push(g),g=g.getNext();if(1>e.length)return!1;g=b.getParents(!0);for(a=0;a<g.length;a++)if(g[a].getName&&p[g[a].getName()]){b=g[a];break}for(var g=l.isIndent?1:-1,a=e[0],e=e[e.length-1],k=CKEDITOR.plugins.list.listToArray(b,q),n=k[e.getCustomData("listarray_index")].indent,
+a=a.getCustomData("listarray_index");a<=e.getCustomData("listarray_index");a++)if(k[a].indent+=g,0<g){var h=k[a].parent;k[a].parent=new CKEDITOR.dom.element(h.getName(),h.getDocument())}for(a=e.getCustomData("listarray_index")+1;a<k.length&&k[a].indent>n;a++)k[a].indent+=g;e=CKEDITOR.plugins.list.arrayToList(k,q,null,c.config.enterMode,b.getDirection());if(!l.isIndent){var f;if((f=b.getParent())&&f.is("li"))for(var g=e.listNode.getChildren(),r=[],m,a=g.count()-1;0<=a;a--)(m=g.getItem(a))&&m.is&&m.is("li")&&
+r.push(m)}e&&e.listNode.replace(b);if(r&&r.length)for(a=0;a<r.length;a++){for(m=b=r[a];(m=m.getNext())&&m.is&&m.getName()in p;)CKEDITOR.env.needsNbspFiller&&!b.getFirst(x)&&b.append(d.document.createText(" ")),b.append(m);b.insertAfter(f)}e&&c.fire("contentDomInvalidated");return!0}for(var l=this,q=this.database,p=this.context,n=c.getSelection(),n=(n&&n.getRanges()).createIterator(),d;d=n.getNextRange();){for(var b=d.getCommonAncestor();b&&(b.type!=CKEDITOR.NODE_ELEMENT||!p[b.getName()]);){if(c.editable().equals(b)){b=
+!1;break}b=b.getParent()}b||(b=d.startPath().contains(p))&&d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);if(!b){var h=d.getEnclosedNode();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in p&&(d.setStartAt(h,CKEDITOR.POSITION_AFTER_START),d.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),b=h)}b&&d.startContainer.type==CKEDITOR.NODE_ELEMENT&&d.startContainer.getName()in p&&(h=new CKEDITOR.dom.walker(d),h.evaluator=t,d.startContainer=h.next());b&&d.endContainer.type==CKEDITOR.NODE_ELEMENT&&d.endContainer.getName()in
+p&&(h=new CKEDITOR.dom.walker(d),h.evaluator=t,d.endContainer=h.previous());if(b)return f(b)}return 0}function t(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")}function x(c){return y(c)&&z(c)}var y=CKEDITOR.dom.walker.whitespaces(!0),z=CKEDITOR.dom.walker.bookmark(!1,!0),u=CKEDITOR.TRISTATE_DISABLED,v=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(c){function f(c){l.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];c.on("key",
+function(f){if("wysiwyg"==c.mode&&f.data.keyCode==this.indentKey){var n=this.getContext(c.elementPath());!n||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,c.elementPath(),n)||(c.execCommand(this.relatedGlobal),f.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(c,f){var d=this.getContext(f),b=CKEDITOR.plugins.indentList.firstItemInPath(this.context,f,d);return d&&this.isIndent&&!b?v:u}:function(c,f){return!this.getContext(f)||this.isIndent?
+u:v},exec:CKEDITOR.tools.bind(w,this)}}var l=CKEDITOR.plugins.indent;l.registerCommands(c,{indentlist:new f(c,"indentlist",!0),outdentlist:new f(c,"outdentlist")});CKEDITOR.tools.extend(f.prototype,l.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(c,f,l){var q=f.contains(t);l||(l=f.contains(c));return l&&q&&q.equals(l.getFirst(t))}})();(function(){function n(a,c){c=void 0===c||c;var b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function g(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";c=a.config.justifyClasses;var h=a.config.enterMode==
+CKEDITOR.ENTER_P?"p":"div";if(c){switch(b){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;case "justify":this.cssClassName=c[3]}this.cssClassRegex=new RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?\x3d$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",
+classes:this.cssClassName||null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function l(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),
+d.addClass(e[0])));e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}g.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(),e=this.cssClassName,g,f,k=a.config.useComputedState,k=void 0===k||k,m=d.length-1;0<=m;m--)for(g=d[m].createIterator(),g.enlargeBr=b!=CKEDITOR.ENTER_BR;f=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)if(!f.isReadOnly()){f.removeAttribute("align");
+f.removeStyle("text-align");var l=e&&(f.$.className=CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex,""))),p=this.state==CKEDITOR.TRISTATE_OFF&&(!k||n(f,!0)!=this.value);e?p?f.addClass(e):l||f.removeAttribute("class"):p&&f.setStyle("text-align",this.value)}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&n(b,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};
+CKEDITOR.plugins.add("justify",{init:function(a){if(!a.blockless){var c=new g(a,"justifyleft","left"),b=new g(a,"justifycenter","center"),h=new g(a,"justifyright","right"),d=new g(a,"justifyblock","justify");a.addCommand("justifyleft",c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,
+command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",l)}}})})();CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this),
+this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}});
+CKEDITOR.UI_MENUBUTTON="menubutton";(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(a){var b=a.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,d=a.lang.language,e={},g,h,k,f;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,b){var c=e["language_"+b];if(c)a[c.style.checkActive(a.elementPath(),a)?"removeStyle":"applyStyle"](c.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:
+CKEDITOR.TRISTATE_OFF)}});for(f=0;f<b.length;f++)g=b[f].split(":"),h=g[0],k="language_"+h,e[k]={label:g[1],langId:h,group:"language",order:f,ltr:"rtl"!=(""+g[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},e[k].style=new CKEDITOR.style({element:"span",attributes:{lang:h,dir:e[k].ltr?"ltr":"rtl"}});e.language_remove={label:d.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:e.length,onClick:function(){var b=c.getCurrentLangElement(a);
+b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(e);a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:d.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),f;for(f in e)b[f]=CKEDITOR.TRISTATE_OFF;b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=
+CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var b=a.elementPath();a=b&&b.elements;var c;if(b)for(var d=0;d<a.length;d++)b=a[d],!c&&"span"==b.getName()&&b.hasAttribute("dir")&&b.hasAttribute("lang")&&(c=b);return c}})})();(function(){function p(c){return c.replace(/'/g,"\\$\x26")}function q(c){for(var b,a=c.length,f=[],e=0;e<a;e++)b=c.charCodeAt(e),f.push(b);return"String.fromCharCode("+f.join(",")+")"}function r(c,b){var a=c.plugins.link,f=a.compiledProtectionFunction.params,e,d;d=[a.compiledProtectionFunction.name,"("];for(var g=0;g<f.length;g++)a=f[g].toLowerCase(),e=b[a],0<g&&d.push(","),d.push("'",e?p(encodeURIComponent(b[a])):"","'");d.push(")");return d.join("")}function n(c){c=c.config.emailProtection||"";
+var b;c&&"encode"!=c&&(b={},c.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,e){b.name=c;b.params=[];e.replace(/[^,\s]+/g,function(a){b.params.push(a)})}));return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function c(b){return a.replace(/%1/g,"rtl"==b?"right":"left").replace(/%2/g,"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;",
+a=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(c("ltr")+c("rtl"))},init:function(c){var b="a[!href]";CKEDITOR.dialog.isTabEnabled(c,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type,download]{*}(*)"));CKEDITOR.dialog.isTabEnabled(c,"link","target")&&
+(b=b.replace("]",",target,onclick]"));c.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));c.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));c.addCommand("unlink",new CKEDITOR.unlinkCommand);c.addCommand("removeAnchor",new CKEDITOR.removeAnchorCommand);c.setKeystroke(CKEDITOR.CTRL+76,"link");c.ui.addButton&&(c.ui.addButton("Link",{label:c.lang.link.toolbar,command:"link",toolbar:"links,10"}),
+c.ui.addButton("Unlink",{label:c.lang.link.unlink,command:"unlink",toolbar:"links,20"}),c.ui.addButton("Anchor",{label:c.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"}));CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");c.on("doubleclick",function(a){var b=CKEDITOR.plugins.link.getSelectedLink(c)||a.data.element;b.isReadOnly()||(b.is("a")?(a.data.dialog=!b.getAttribute("name")||b.getAttribute("href")&&b.getChildCount()?
+"link":"anchor",a.data.link=b):CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b)&&(a.data.dialog="anchor"))},null,null,0);c.on("doubleclick",function(a){a.data.dialog in{link:1,anchor:1}&&a.data.link&&c.getSelection().selectElement(a.data.link)},null,null,20);c.addMenuItems&&c.addMenuItems({anchor:{label:c.lang.link.anchor.menu,command:"anchor",group:"anchor",order:1},removeAnchor:{label:c.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:c.lang.link.menu,command:"link",
+group:"link",order:1},unlink:{label:c.lang.link.unlink,command:"unlink",group:"link",order:5}});c.contextMenu&&c.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(c)))return null;var b={};a.getAttribute("href")&&a.getChildCount()&&(b={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});a&&a.hasAttribute("name")&&(b.anchor=b.removeAnchor=CKEDITOR.TRISTATE_OFF);return b});this.compiledProtectionFunction=
+n(c)},afterInit:function(c){c.dataProcessor.dataFilter.addRules({elements:{a:function(a){return a.attributes.name?a.children.length?null:c.createFakeParserElement(a,"cke_anchor","anchor"):null}}});var b=c._.elementsPath&&c._.elementsPath.filters;b&&b.push(function(a,b){if("a"==b&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a)||a.getAttribute("name")&&(!a.getAttribute("href")||!a.getChildCount())))return"anchor"})}});var t=/^javascript:/,u=/^mailto:([^?]+)(?:\?(.+))?$/,v=/subject=([^;?:@&=$,\/]*)/i,
+w=/body=([^;?:@&=$,\/]*)/i,x=/^#(.*)$/,y=/^((?:http|https|ftp|news):\/\/)?(.*)$/,z=/^(_(?:self|top|parent|blank))$/,A=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,B=/^javascript:([^(]+)\(([^)]+)\)$/,C=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,D=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,m={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",
+title:"advTitle",type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"};CKEDITOR.plugins.link={getSelectedLink:function(c){var b=c.getSelection(),a=b.getSelectedElement();return a&&a.is("a")?a:(b=b.getRanges()[0])?(b.shrink(CKEDITOR.SHRINK_TEXT),c.elementPath(b.getCommonAncestor()).contains("a",1)):null},getEditorAnchors:function(c){for(var b=c.editable(),a=b.isInline()&&!c.plugins.divarea?c.document:b,b=a.getElementsByTag("a"),a=a.getElementsByTag("img"),
+f=[],e=0,d;d=b.getItem(e++);)(d.data("cke-saved-name")||d.hasAttribute("name"))&&f.push({name:d.data("cke-saved-name")||d.getAttribute("name"),id:d.getAttribute("id")});for(e=0;d=a.getItem(e++);)(d=this.tryRestoreFakeAnchor(c,d))&&f.push({name:d.getAttribute("name"),id:d.getAttribute("id")});return f},fakeAnchor:!0,tryRestoreFakeAnchor:function(c,b){if(b&&b.data("cke-real-element-type")&&"anchor"==b.data("cke-real-element-type")){var a=c.restoreRealElement(b);if(a.data("cke-saved-name"))return a}},
+parseLinkAttributes:function(c,b){var a=b&&(b.data("cke-saved-href")||b.getAttribute("href"))||"",f=c.plugins.link.compiledProtectionFunction,e=c.config.emailProtection,d,g={};a.match(t)&&("encode"==e?a=a.replace(A,function(a,b,c){c=c||"";return"mailto:"+String.fromCharCode.apply(String,b.split(","))+c.replace(/\\'/g,"'")}):e&&a.replace(B,function(a,b,c){if(b==f.name){g.type="email";a=g.email={};b=/(^')|('$)/g;c=c.match(/[^,\s]+/g);for(var d=c.length,e,h,k=0;k<d;k++)e=decodeURIComponent,h=c[k].replace(b,
+"").replace(/\\'/g,"'"),h=e(h),e=f.params[k].toLowerCase(),a[e]=h;a.address=[a.name,a.domain].join("@")}}));if(!g.type)if(e=a.match(x))g.type="anchor",g.anchor={},g.anchor.name=g.anchor.id=e[1];else if(e=a.match(u)){d=a.match(v);a=a.match(w);g.type="email";var k=g.email={};k.address=e[1];d&&(k.subject=decodeURIComponent(d[1]));a&&(k.body=decodeURIComponent(a[1]))}else a&&(d=a.match(y))&&(g.type="url",g.url={},g.url.protocol=d[1],g.url.url=d[2]);if(b){if(a=b.getAttribute("target"))g.target={type:a.match(z)?
+a:"frame",name:a};else if(a=(a=b.data("cke-pa-onclick")||b.getAttribute("onclick"))&&a.match(C))for(g.target={type:"popup",name:a[1]};e=D.exec(a[2]);)"yes"!=e[2]&&"1"!=e[2]||e[1]in{height:1,width:1,top:1,left:1}?isFinite(e[2])&&(g.target[e[1]]=e[2]):g.target[e[1]]=!0;null!==b.getAttribute("download")&&(g.download=!0);var a={},h;for(h in m)(e=b.getAttribute(h))&&(a[m[h]]=e);if(h=b.data("cke-saved-name")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,
+b){var a=c.config.emailProtection||"",f={};switch(b.type){case "url":var a=b.url&&void 0!==b.url.protocol?b.url.protocol:"http://",e=b.url&&CKEDITOR.tools.trim(b.url.url)||"";f["data-cke-saved-href"]=0===e.indexOf("/")?e:a+e;break;case "anchor":a=b.anchor&&b.anchor.id;f["data-cke-saved-href"]="#"+(b.anchor&&b.anchor.name||a||"");break;case "email":var d=b.email,e=d.address;switch(a){case "":case "encode":var g=encodeURIComponent(d.subject||""),k=encodeURIComponent(d.body||""),d=[];g&&d.push("subject\x3d"+
+g);k&&d.push("body\x3d"+k);d=d.length?"?"+d.join("\x26"):"";"encode"==a?(a=["javascript:void(location.href\x3d'mailto:'+",q(e)],d&&a.push("+'",p(d),"'"),a.push(")")):a=["mailto:",e,d];break;default:a=e.split("@",2),d.name=a[0],d.domain=a[1],a=["javascript:",r(c,d)]}f["data-cke-saved-href"]=a.join("")}if(b.target)if("popup"==b.target.type){for(var a=["window.open(this.href, '",b.target.name||"","', '"],h="resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "),e=h.length,
+g=function(a){b.target[a]&&h.push(a+"\x3d"+b.target[a])},d=0;d<e;d++)h[d]+=b.target[h[d]]?"\x3dyes":"\x3dno";g("width");g("left");g("height");g("top");a.push(h.join(","),"'); return false;");f["data-cke-pa-onclick"]=a.join("")}else"notSet"!=b.target.type&&b.target.name&&(f.target=b.target.name);b.download&&(f.download="");if(b.advanced){for(var l in m)(a=b.advanced[m[l]])&&(f[l]=a);f.name&&(f["data-cke-saved-name"]=f.name)}f["data-cke-saved-href"]&&(f.href=f["data-cke-saved-href"]);l={target:1,onclick:1,
+"data-cke-pa-onclick":1,"data-cke-saved-name":1,download:1};b.advanced&&CKEDITOR.tools.extend(l,m);for(var n in f)delete l[n];return{set:f,removed:CKEDITOR.tools.objectKeys(l)}},showDisplayTextForElement:function(c,b){var a={img:1,table:1,tbody:1,thead:1,tfoot:1,input:1,select:1,textarea:1};return b.widgets&&b.widgets.focused?!1:!c||!c.getName||!c.is(a)}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(c){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,
+alwaysRemoveElement:1});c.removeStyle(b)},refresh:function(c,b){var a=b.lastElement&&b.lastElement.getAscendant("a",!0);a&&"a"==a.getName()&&a.getAttribute("href")&&a.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(c){var b=c.getSelection(),a=b.createBookmarks(),f;if(b&&(f=b.getSelectedElement())&&
+(f.getChildCount()?f.is("a"):CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,f)))f.remove(1);else if(f=CKEDITOR.plugins.link.getSelectedLink(c))f.hasAttribute("href")?(f.removeAttributes({name:1,"data-cke-saved-name":1}),f.removeClass("cke_anchor")):f.remove(1);b.selectBookmarks(a)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0,linkShowTargetTab:!0})})();(function(){function I(b,m,e){function c(c){if(!(!(a=d[c?"getFirst":"getLast"]())||a.is&&a.isBlockBoundary()||!(p=m.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||p.is&&p.isBlockBoundary({br:1})))b.document.createElement("br")[c?"insertBefore":"insertAfter"](a)}for(var f=CKEDITOR.plugins.list.listToArray(m.root,e),g=[],k=0;k<m.contents.length;k++){var h=m.contents[k];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(g.push(h),CKEDITOR.dom.element.setMarker(e,
+h,"list_item_processed",!0))}h=null;for(k=0;k<g.length;k++)h=g[k].getCustomData("listarray_index"),f[h].indent=-1;for(k=h+1;k<f.length;k++)if(f[k].indent>f[k-1].indent+1){g=f[k-1].indent+1-f[k].indent;for(h=f[k].indent;f[k]&&f[k].indent>=h;)f[k].indent+=g,k++;k--}var d=CKEDITOR.plugins.list.arrayToList(f,e,null,b.config.enterMode,m.root.getAttribute("dir")).listNode,a,p;c(!0);c();d.replace(m.root);b.fire("contentDomInvalidated")}function B(b,m){this.name=b;this.context=this.type=m;this.allowedContent=
+m+" li";this.requiredContent=m}function E(b,m,e,c){for(var f,g;f=b[c?"getLast":"getFirst"](J);)(g=f.getDirection(1))!==m.getDirection(1)&&f.setAttribute("dir",g),f.remove(),e?f[c?"insertBefore":"insertAfter"](e):m.append(f,c)}function F(b){function m(e){var c=b[e?"getPrevious":"getNext"](u);c&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(b.getName())&&(E(b,c,null,!e),b.remove(),b=c)}m();m(1)}function G(b){return b.type==CKEDITOR.NODE_ELEMENT&&(b.getName()in CKEDITOR.dtd.$block||b.getName()in CKEDITOR.dtd.$listItem)&&
+CKEDITOR.dtd[b.getName()]["#"]}function C(b,m,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var c=e.extractContents();m.trim(!1,!0);var f=m.createBookmark(),g=new CKEDITOR.dom.elementPath(m.startContainer),k=g.block,g=g.lastElement.getAscendant("li",1)||k,h=new CKEDITOR.dom.elementPath(e.startContainer),d=h.contains(CKEDITOR.dtd.$listItem),h=h.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():h&&(k=h.getPrevious(u))&&z(k)&&k.remove();(k=c.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&
+k.is("br")&&k.remove();(k=m.startContainer.getChild(m.startOffset))?c.insertBefore(k):m.startContainer.append(c);d&&(c=A(d))&&(g.contains(d)?(E(c,d.getParent(),d),c.remove()):g.append(c));for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){h=e.startPath();c=h.block;if(!c)break;c.is("li")&&(g=c.getParent(),c.equals(g.getLast(u))&&c.equals(g.getFirst(u))&&(c=g));e.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove()}e=e.clone();c=b.editable();e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);
+e.evaluator=function(a){return u(a)&&!z(a)};(e=e.next())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list&&F(e);m.moveToBookmark(f);m.select();b.fire("saveSnapshot")}function A(b){return(b=b.getLast(u))&&b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in v?b:null}var v={ol:1,ul:1},K=CKEDITOR.dom.walker.whitespaces(),H=CKEDITOR.dom.walker.bookmark(),u=function(b){return!(K(b)||H(b))},z=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(b,m,e,c,f){if(!v[b.getName()])return[];
+c||(c=0);e||(e=[]);for(var g=0,k=b.getChildCount();g<k;g++){var h=b.getChild(g);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(h,m,e,c+1);if("li"==h.$.nodeName.toLowerCase()){var d={parent:b,indent:c,element:h,contents:[]};f?d.grandparent=f:(d.grandparent=b.getParent(),d.grandparent&&"li"==d.grandparent.$.nodeName.toLowerCase()&&(d.grandparent=d.grandparent.getParent()));m&&CKEDITOR.dom.element.setMarker(m,h,"listarray_index",e.length);e.push(d);
+for(var a=0,p=h.getChildCount(),l;a<p;a++)l=h.getChild(a),l.type==CKEDITOR.NODE_ELEMENT&&v[l.getName()]?CKEDITOR.plugins.list.listToArray(l,m,e,c+1,d.grandparent):d.contents.push(l)}}return e},arrayToList:function(b,m,e,c,f){e||(e=0);if(!b||b.length<e+1)return null;for(var g,k=b[e].parent.getDocument(),h=new CKEDITOR.dom.documentFragment(k),d=null,a=e,p=Math.max(b[e].indent,0),l=null,q,n,t=c==CKEDITOR.ENTER_P?"p":"div";;){var r=b[a];g=r.grandparent;q=r.element.getDirection(1);if(r.indent==p){d&&b[a].parent.getName()==
+d.getName()||(d=b[a].parent.clone(!1,1),f&&d.setAttribute("dir",f),h.append(d));l=d.append(r.element.clone(0,1));q!=d.getDirection(1)&&l.setAttribute("dir",q);for(g=0;g<r.contents.length;g++)l.append(r.contents[g].clone(1,1));a++}else if(r.indent==Math.max(p,0)+1)r=b[a-1].element.getDirection(1),a=CKEDITOR.plugins.list.arrayToList(b,null,a,c,r!=q?q:null),!l.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=k.$.documentMode&&l.append(k.createText(" ")),l.append(a.listNode),a=a.nextIndex;else if(-1==
+r.indent&&!e&&g){v[g.getName()]?(l=r.element.clone(!1,!0),q!=g.getDirection(1)&&l.setAttribute("dir",q)):l=new CKEDITOR.dom.documentFragment(k);var d=g.getDirection(1)!=q,y=r.element,D=y.getAttribute("class"),z=y.getAttribute("style"),A=l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(c!=CKEDITOR.ENTER_BR||d||z||D),w,B=r.contents.length,x;for(g=0;g<B;g++)if(w=r.contents[g],H(w)&&1<B)A?x=w.clone(1,1):l.append(w.clone(1,1));else if(w.type==CKEDITOR.NODE_ELEMENT&&w.isBlockBoundary()){d&&!w.getDirection()&&
+w.setAttribute("dir",q);n=w;var C=y.getAttribute("style");C&&n.setAttribute("style",C.replace(/([^;])$/,"$1;")+(n.getAttribute("style")||""));D&&w.addClass(D);n=null;x&&(l.append(x),x=null);l.append(w.clone(1,1))}else A?(n||(n=k.createElement(t),l.append(n),d&&n.setAttribute("dir",q)),z&&n.setAttribute("style",z),D&&n.setAttribute("class",D),x&&(n.append(x),x=null),n.append(w.clone(1,1))):l.append(w.clone(1,1));x&&((n||l).append(x),x=null);l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&a!=b.length-1&&(CKEDITOR.env.needsBrFiller&&
+(q=l.getLast())&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("br")&&q.remove(),(q=l.getLast(u))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is(CKEDITOR.dtd.$block)||l.append(k.createElement("br")));q=l.$.nodeName.toLowerCase();"div"!=q&&"p"!=q||l.appendBogus();h.append(l);d=null;a++}else return null;n=null;if(b.length<=a||Math.max(b[a].indent,0)<p)break}if(m)for(b=h.getFirst();b;){if(b.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(m,b),b.getName()in CKEDITOR.dtd.$listItem&&(e=b,k=f=c=void 0,c=e.getDirection()))){for(f=
+e.getParent();f&&!(k=f.getDirection());)f=f.getParent();c==k&&e.removeAttribute("dir")}b=b.getNextSourceNode()}return{listNode:h,nextIndex:a}}};var L=/^h[1-6]$/,J=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);B.prototype={exec:function(b){this.refresh(b,b.elementPath());var m=b.config,e=b.getSelection(),c=e&&e.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var f=b.editable();if(f.getFirst(u)){var g=1==c.length&&c[0];(m=g&&g.getEnclosedNode())&&m.is&&this.type==m.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else m.enterMode==
+CKEDITOR.ENTER_BR?f.appendBogus():c[0].fixBlock(1,m.enterMode==CKEDITOR.ENTER_P?"p":"div"),e.selectRanges(c)}for(var m=e.createBookmarks(!0),f=[],k={},c=c.createIterator(),h=0;(g=c.getNextRange())&&++h;){var d=g.getBoundaryNodes(),a=d.startNode,p=d.endNode;a.type==CKEDITOR.NODE_ELEMENT&&"td"==a.getName()&&g.setStartAt(d.startNode,CKEDITOR.POSITION_AFTER_START);p.type==CKEDITOR.NODE_ELEMENT&&"td"==p.getName()&&g.setEndAt(d.endNode,CKEDITOR.POSITION_BEFORE_END);g=g.createIterator();for(g.forceBrBreak=
+this.state==CKEDITOR.TRISTATE_OFF;d=g.getNextParagraph();)if(!d.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(k,d,"list_block",1);for(var l=b.elementPath(d),a=l.elements,p=0,l=l.blockLimit,q,n=a.length-1;0<=n&&(q=a[n]);n--)if(v[q.getName()]&&l.contains(q)){l.removeCustomData("list_group_object_"+h);(a=q.getCustomData("list_group_object"))?a.contents.push(d):(a={root:q,contents:[d]},f.push(a),CKEDITOR.dom.element.setMarker(k,q,"list_group_object",a));p=1;break}p||(p=l,p.getCustomData("list_group_object_"+
+h)?p.getCustomData("list_group_object_"+h).contents.push(d):(a={root:p,contents:[d]},CKEDITOR.dom.element.setMarker(k,p,"list_group_object_"+h,a),f.push(a)))}}for(q=[];0<f.length;)if(a=f.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(v[a.root.getName()]){c=b;h=a;a=k;g=q;p=CKEDITOR.plugins.list.listToArray(h.root,a);l=[];for(d=0;d<h.contents.length;d++)n=h.contents[d],(n=n.getAscendant("li",!0))&&!n.getCustomData("list_item_processed")&&(l.push(n),CKEDITOR.dom.element.setMarker(a,n,"list_item_processed",
+!0));for(var n=h.root.getDocument(),t=void 0,r=void 0,d=0;d<l.length;d++){var y=l[d].getCustomData("listarray_index"),t=p[y].parent;t.is(this.type)||(r=n.createElement(this.type),t.copyAttributes(r,{start:1,type:1}),r.removeStyle("list-style-type"),p[y].parent=r)}a=CKEDITOR.plugins.list.arrayToList(p,a,null,c.config.enterMode);p=void 0;l=a.listNode.getChildCount();for(d=0;d<l&&(p=a.listNode.getChild(d));d++)p.getName()==this.type&&g.push(p);a.listNode.replace(h.root);c.fire("contentDomInvalidated")}else{p=
+b;g=a;d=q;l=g.contents;c=g.root.getDocument();h=[];1==l.length&&l[0].equals(g.root)&&(a=c.createElement("div"),l[0].moveChildren&&l[0].moveChildren(a),l[0].append(a),l[0]=a);g=g.contents[0].getParent();for(n=0;n<l.length;n++)g=g.getCommonAncestor(l[n].getParent());t=p.config.useComputedState;p=a=void 0;t=void 0===t||t;for(n=0;n<l.length;n++)for(r=l[n];y=r.getParent();){if(y.equals(g)){h.push(r);!p&&r.getDirection()&&(p=1);r=r.getDirection(t);null!==a&&(a=a&&a!=r?null:r);break}r=y}if(!(1>h.length)){l=
+h[h.length-1].getNext();n=c.createElement(this.type);d.push(n);for(t=d=void 0;h.length;)d=h.shift(),t=c.createElement("li"),r=d,r.is("pre")||L.test(r.getName())||"false"==r.getAttribute("contenteditable")?d.appendTo(t):(d.copyAttributes(t),a&&d.getDirection()&&(t.removeStyle("direction"),t.removeAttribute("dir")),d.moveChildren(t),d.remove()),t.appendTo(n);a&&p&&n.setAttribute("dir",a);l?n.insertBefore(l):n.appendTo(g)}}else this.state==CKEDITOR.TRISTATE_ON&&v[a.root.getName()]&&I.call(this,b,a,k);
+for(n=0;n<q.length;n++)F(q[n]);CKEDITOR.dom.element.clearAllMarkers(k);e.selectBookmarks(m);b.focus()},refresh:function(b,m){var e=m.contains(v,1),c=m.blockLimit||m.root;e&&c.contains(e)?this.setState(e.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(b){b.blockless||(b.addCommand("numberedlist",new B("numberedlist","ol")),b.addCommand("bulletedlist",new B("bulletedlist","ul")),b.ui.addButton&&
+(b.ui.addButton("NumberedList",{label:b.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),b.ui.addButton("BulletedList",{label:b.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),b.on("key",function(m){var e=m.data.domEvent.getKey(),c;if("wysiwyg"==b.mode&&e in{8:1,46:1}){var f=b.getSelection().getRanges()[0],g=f&&f.startPath();if(f&&f.collapsed){var k=8==e,h=b.editable(),d=new CKEDITOR.dom.walker(f.clone());d.evaluator=function(a){return u(a)&&
+!z(a)};d.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=f.clone();if(k){var a;(a=g.contains(v))&&f.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is("li")&&(a=A(a))?(c=a,a=a.getPrevious(u),e.moveToPosition(a&&z(a)?a:c,CKEDITOR.POSITION_BEFORE_START)):(d.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START),d.range.setEnd(f.startContainer,f.startOffset),(a=d.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in v||a.is("li"))&&(a.is("li")||(d.range.selectNodeContents(a),
+d.reset(),d.evaluator=G,a=d.previous()),c=a,e.moveToElementEditEnd(c),e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END)));if(c)C(b,e,f),m.cancel();else{var p=g.contains(v);p&&f.checkBoundaryOfElement(p,CKEDITOR.START)&&(c=p.getFirst(u),f.checkBoundaryOfElement(c,CKEDITOR.START)&&(a=p.getPrevious(u),A(c)?a&&(f.moveToElementEditEnd(a),f.select()):b.execCommand("outdent"),m.cancel()))}}else if(c=g.contains("li")){if(d.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),k=(h=c.getLast(u))&&
+G(h)?h:c,g=0,(a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in v&&a.equals(h)?(g=1,a=d.next()):f.checkBoundaryOfElement(k,CKEDITOR.END)&&(g=2),g&&a){f=f.clone();f.moveToElementEditStart(a);if(1==g&&(e.optimize(),!e.startContainer.equals(c))){for(c=e.startContainer;c.is(CKEDITOR.dtd.$inline);)p=c,c=c.getParent();p&&e.moveToPosition(p,CKEDITOR.POSITION_AFTER_END)}2==g&&(e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END),f.endPath().block&&f.moveToPosition(f.endPath().block,CKEDITOR.POSITION_AFTER_START));
+C(b,e,f);m.cancel()}}else d.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),(a=d.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(v)&&(a=a.getFirst(u),g.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()?(g.block.remove(),f.moveToElementEditStart(a),f.select()):A(a)?(f.moveToElementEditStart(a),f.select()):(f=f.clone(),f.moveToElementEditStart(a),C(b,e,f)),m.cancel());setTimeout(function(){b.selectionChange(1)})}}}))}})})();(function(){CKEDITOR.plugins.liststyle={requires:"dialog,contextmenu",init:function(a){if(!a.blockless){var b;b=new CKEDITOR.dialogCommand("numberedListStyle",{requiredContent:"ol",allowedContent:"ol{list-style-type}[start]; li{list-style-type}[value]",contentTransformations:[["ol: listTypeToStyle"]]});b=a.addCommand("numberedListStyle",b);a.addFeature(b);CKEDITOR.dialog.add("numberedListStyle",this.path+"dialogs/liststyle.js");b=new CKEDITOR.dialogCommand("bulletedListStyle",{requiredContent:"ul",
+allowedContent:"ul{list-style-type}",contentTransformations:[["ul: listTypeToStyle"]]});b=a.addCommand("bulletedListStyle",b);a.addFeature(b);CKEDITOR.dialog.add("bulletedListStyle",this.path+"dialogs/liststyle.js");a.addMenuGroup("list",108);a.addMenuItems({numberedlist:{label:a.lang.liststyle.numberedTitle,group:"list",command:"numberedListStyle"},bulletedlist:{label:a.lang.liststyle.bulletedTitle,group:"list",command:"bulletedListStyle"}});a.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;
+for(;a;){var b=a.getName();if("ol"==b)return{numberedlist:CKEDITOR.TRISTATE_OFF};if("ul"==b)return{bulletedlist:CKEDITOR.TRISTATE_OFF};a=a.getParent()}return null})}}};CKEDITOR.plugins.add("liststyle",CKEDITOR.plugins.liststyle)})();(function(){function V(a,c,d){return n(c)&&n(d)&&d.equals(c.getNext(function(a){return!(E(a)||F(a)||u(a))}))}function z(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function O(a){var c=a.element;if(c&&n(c)&&(c=c.getAscendant(a.triggers,!0))&&a.editable.contains(c)){var d=P(c);if("true"==d.getAttribute("contenteditable"))return c;if(d.is(a.triggers))return d}return null}function ka(a,c,d){r(a,c);r(a,d);a=c.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function w(a,c,d){return c=
+c[d?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!E(b)||n(b)&&!u(b)&&!A(a,b)})}function q(a,c,d){return a>c&&a<d}function P(a,c){if(a.data("cke-editable"))return null;for(c||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function la(a){var c=a.doc,d=G('\x3cspan contenteditable\x3d"false" style\x3d"'+Q+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',c),b=CKEDITOR.getUrl(this.path+
+"images/"+(t.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");v(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[v(G('\x3cspan title\x3d"'+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',c),{base:Q+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+b+") center no-repeat "+a.boxColor+";cursor:pointer;"+(t.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":
+"")+(t.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),v(G(W,c),{base:X+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),v(G(W,c),{base:X+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px",
+"border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){r(a,this);var b=a.holdDistance,c=this.size;return c&&q(a.mouse.y,c.top-b,c.bottom+b)&&q(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,h=d.upper,g=d.lower,l=h||g,p=l.getParent(),m={};this.trigger=d;h&&r(a,h,!0);g&&r(a,g,!0);r(a,p,!0);a.inInlineMode&&H(a,!0);p.equals(c)?(m.left=b.scroll.x,m.right=-b.scroll.x,m.width=""):(m.left=
+l.size.left-l.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),m.width=l.size.outerWidth+l.size.margin.left+l.size.margin.right+b.scroll.x,m.right="");h&&g?m.top=h.size.margin.bottom===g.size.margin.top?0|h.size.bottom+h.size.margin.bottom/2:h.size.margin.bottom<g.size.margin.top?h.size.bottom+h.size.margin.bottom:h.size.bottom+h.size.margin.bottom-g.size.margin.top:h?g||(m.top=h.size.bottom+h.size.margin.bottom):m.top=g.size.top-g.size.margin.top;d.is(C)||q(m.top,
+b.scroll.y-15,b.scroll.y+5)?(m.top=a.inInlineMode?0:b.scroll.y,this.look(C)):d.is(D)||q(m.top,b.pane.bottom-5,b.pane.bottom+15)?(m.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(D)):(a.inInlineMode&&(m.top-=b.editable.top+b.editable.border.top),this.look(x));a.inInlineMode&&(m.top--,m.top+=b.editable.scroll.top,m.left+=b.editable.scroll.left);for(var n in m)m[n]=CKEDITOR.tools.cssLength(m[n]);this.setStyles(m)},look:function(a){if(this.oldLook!=
+a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new R("span",a.doc)});for(c=d.lineChildren.length;c--;)d.lineChildren[c].appendTo(d);d.look(x);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();S(a,function(b){var c=a.line.trigger;b[c.is(I)?"insertBefore":"insertAfter"](c.is(I)?c.lower:c.upper)},!0);a.editor.focus();t.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();
+b.data.preventDefault(!0)});d.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=d}function S(a,c,d){var b=new CKEDITOR.dom.range(a.doc),e=a.editor,f;t.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(J):(f=(f=P(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new R(K[f],a.doc),f.is("br")||a.doc.createText(J).appendTo(f));d&&e.fire("saveSnapshot");c(f);b.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([b]);a.hotNode=f;d&&e.fire("saveSnapshot")}
+function Y(a,c){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function d(b){var d=t.ie&&9>t.version?" ":J,f=a.hotNode&&a.hotNode.getText()==d&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!c;S(a,function(d){f&&a.hotNode&&a.hotNode.remove();d[c?"insertAfter":"insertBefore"](b);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!c});a.lastCmdDirection=!!c});t.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();a.line.detach()}return function(b){b=b.getSelection().getStartElement();
+var e;b=b.getAscendant(Z,1);if(!aa(a,b)&&b&&!b.equals(a.editable)&&!b.contains(a.editable)){(e=P(b))&&"false"==e.getAttribute("contenteditable")&&(b=e);a.element=b;e=w(a,b,!c);var f;n(e)&&e.is(a.triggers)&&e.is(ma)&&(!w(a,e,!c)||(f=w(a,e,!c))&&n(f)&&f.is(a.triggers))?d(e):(f=O(a,b),n(f)&&(w(a,f,!c)?(b=w(a,f,!c))&&n(b)&&b.is(a.triggers)&&d(f):d(f)))}}}()}}function A(a,c){if(!c||c.type!=CKEDITOR.NODE_ELEMENT||!c.$)return!1;var d=a.line;return d.wrap.equals(c)||d.wrap.contains(c)}function n(a){return a&&
+a.type==CKEDITOR.NODE_ELEMENT&&a.$}function u(a){if(!n(a))return!1;var c;(c=ba(a))||(n(a)?(c={left:1,right:1,center:1},c=!(!c[a.getComputedStyle("float")]&&!c[a.getAttribute("align")])):c=!1);return c}function ba(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function L(a,c){return n(c)?c.is(a.triggers):null}function aa(a,c){if(!c)return!1;for(var d=c.getParents(1),b=d.length;b--;)for(var e=a.tabuList.length;e--;)if(d[b].hasAttribute(a.tabuList[e]))return!0;return!1}function na(a,
+c,d){c=c[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(oa)});if(!c)return!1;r(a,c);return d?c.size.top>a.mouse.y:c.size.bottom<a.mouse.y}function ca(a){var c=a.editable,d=a.mouse,b=a.view,e=a.triggerOffset;H(a);var f=d.y>(a.inInlineMode?b.editable.top+b.editable.height/2:Math.min(b.editable.height,b.pane.height)/2),c=c[f?"getLast":"getFirst"](function(a){return!(E(a)||F(a))});if(!c)return null;A(a,c)&&(c=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(E(a)||F(a))}));
+if(!n(c)||u(c)||!L(a,c))return null;r(a,c);return!f&&0<=c.size.top&&q(d.y,0,c.size.top+e)?(a=a.inInlineMode||0===b.scroll.y?C:x,new z([null,c,I,M,a])):f&&c.size.bottom<=b.pane.height&&q(d.y,c.size.bottom-e,b.pane.height)?(a=a.inInlineMode||q(c.size.bottom,b.pane.height-e,b.pane.height)?D:x,new z([c,null,da,M,a])):null}function ea(a){var c=a.mouse,d=a.view,b=a.triggerOffset,e=O(a);if(!e)return null;r(a,e);var b=Math.min(b,0|e.size.outerHeight/2),f=[],k,h;if(q(c.y,e.size.top-1,e.size.top+b))h=!1;else if(q(c.y,
+e.size.bottom-b,e.size.bottom+1))h=!0;else return null;if(u(e)||na(a,e,h)||e.getParent().is(fa))return null;var g=w(a,e,!h);if(g){if(g&&g.type==CKEDITOR.NODE_TEXT)return null;if(n(g)){if(u(g)||!L(a,g)||g.getParent().is(fa))return null;f=[g,e][h?"reverse":"concat"]().concat([T,M])}}else e.equals(a.editable[h?"getLast":"getFirst"](a.isRelevant))?(H(a),h&&q(c.y,e.size.bottom-b,d.pane.height)&&q(e.size.bottom,d.pane.height-b,d.pane.height)?k=D:q(c.y,0,e.size.top+b)&&(k=C)):k=x,f=[null,e][h?"reverse":
+"concat"]().concat([h?da:I,M,k,e.equals(a.editable[h?"getLast":"getFirst"](a.isRelevant))?h?D:C:x]);return 0 in f?new z(f):null}function U(a,c,d,b){for(var e=c.getDocumentPosition(),f={},k={},h={},g={},l=y.length;l--;)f[y[l]]=parseInt(c.getComputedStyle.call(c,"border-"+y[l]+"-width"),10)||0,h[y[l]]=parseInt(c.getComputedStyle.call(c,"padding-"+y[l]),10)||0,k[y[l]]=parseInt(c.getComputedStyle.call(c,"margin-"+y[l]),10)||0;d&&!b||N(a,b);g.top=e.y-(d?0:a.view.scroll.y);g.left=e.x-(d?0:a.view.scroll.x);
+g.outerWidth=c.$.offsetWidth;g.outerHeight=c.$.offsetHeight;g.height=g.outerHeight-(h.top+h.bottom+f.top+f.bottom);g.width=g.outerWidth-(h.left+h.right+f.left+f.right);g.bottom=g.top+g.outerHeight;g.right=g.left+g.outerWidth;a.inInlineMode&&(g.scroll={top:c.$.scrollTop,left:c.$.scrollLeft});return v({border:f,padding:h,margin:k,ignoreScroll:d},g,!0)}function r(a,c,d){if(!n(c))return c.size=null;if(!c.size)c.size={};else if(c.size.ignoreScroll==d&&c.size.date>new Date-ga)return null;return v(c.size,
+U(a,c,d),{date:+new Date},!0)}function H(a,c){a.view.editable=U(a,a.editable,c,!0)}function N(a,c){a.view||(a.view={});var d=a.view;if(!(!c&&d&&d.date>new Date-ga)){var b=a.win,d=b.getScrollPosition(),b=b.getViewPaneSize();v(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-b.width,height:a.doc.$.documentElement.scrollHeight-b.height},pane:{width:b.width,height:b.height,bottom:b.height+d.y},date:+new Date},!0)}}function pa(a,c,d,b){for(var e=b,f=b,k=0,h=!1,g=!1,l=a.view.pane.height,
+p=a.mouse;p.y+k<l&&0<p.y-k;){h||(h=c(e,b));g||(g=c(f,b));!h&&0<p.y-k&&(e=d(a,{x:p.x,y:p.y-k}));!g&&p.y+k<l&&(f=d(a,{x:p.x,y:p.y+k}));if(h&&g)break;k+=2}return new z([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var c=a.config,d=c.magicline_triggerOffset||30,b={editor:a,enterMode:c.enterMode,triggerOffset:d,holdDistance:0|d*(c.magicline_holdDistance||.5),boxColor:c.magicline_color||"#ff0000",rtl:"rtl"==c.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(c.magicline_tabuList||
+[]),triggers:c.magicline_everywhere?Z:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},e,f,k;b.isRelevant=function(a){return n(a)&&!A(b,a)&&!u(a)};a.on("contentDom",function(){var d=a.editable(),g=a.document,l=a.window;v(b,{editable:d,inInlineMode:d.isInline(),doc:g,win:l,hotNode:null},!0);b.boundary=b.inInlineMode?b.editable:b.doc.getDocumentElement();d.is(B.$inline)||(b.inInlineMode&&!ba(d)&&d.setStyles({position:"relative",top:null,left:null}),la.call(this,b),N(b),d.attachListener(a,"beforeUndoImage",
+function(){b.line.detach()}),d.attachListener(a,"beforeGetData",function(){b.line.wrap.getParent()&&(b.line.detach(),a.once("getData",function(){b.line.attach()},null,null,1E3))},null,null,0),d.attachListener(b.inInlineMode?g:g.getWindow().getFrame(),"mouseout",function(c){if("wysiwyg"==a.mode)if(b.inInlineMode){var d=c.data.$.clientX;c=c.data.$.clientY;N(b);H(b,!0);var e=b.view.editable,f=b.view.scroll;d>e.left-f.x&&d<e.right-f.x&&c>e.top-f.y&&c<e.bottom-f.y||(clearTimeout(k),k=null,b.line.detach())}else clearTimeout(k),
+k=null,b.line.detach()}),d.attachListener(d,"keyup",function(){b.hiddenMode=0}),d.attachListener(d,"keydown",function(c){if("wysiwyg"==a.mode)switch(c.data.getKeystroke()){case 2228240:case 16:b.hiddenMode=1,b.line.detach()}}),d.attachListener(b.inInlineMode?d:g,"mousemove",function(c){f=!0;if("wysiwyg"==a.mode&&!a.readOnly&&!k){var d={x:c.data.$.clientX,y:c.data.$.clientY};k=setTimeout(function(){b.mouse=d;k=b.trigger=null;N(b);f&&!b.hiddenMode&&a.focusManager.hasFocus&&!b.line.mouseNear()&&(b.element=
+ha(b,!0))&&((b.trigger=ca(b)||ea(b)||ia(b))&&!aa(b,b.trigger.upper||b.trigger.lower)?b.line.attach().place():(b.trigger=null,b.line.detach()),f=!1)},30)}}),d.attachListener(l,"scroll",function(){"wysiwyg"==a.mode&&(b.line.detach(),t.webkit&&(b.hiddenMode=1,clearTimeout(e),e=setTimeout(function(){b.mouseDown||(b.hiddenMode=0)},50)))}),d.attachListener(ja?g:l,"mousedown",function(){"wysiwyg"==a.mode&&(b.line.detach(),b.hiddenMode=1,b.mouseDown=1)}),d.attachListener(ja?g:l,"mouseup",function(){b.hiddenMode=
+0;b.mouseDown=0}),a.addCommand("accessPreviousSpace",Y(b)),a.addCommand("accessNextSpace",Y(b,!0)),a.setKeystroke([[c.magicline_keystrokePrevious,"accessPreviousSpace"],[c.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var c,d,e,f;for(f in{p:1,br:1,div:1})for(c=a.document.getElementsByTag(f),e=c.count();e--;)if((d=c.getItem(e)).data("cke-magicline-hot")){b.hotNode=d;b.lastCmdDirection="true"===d.data("cke-magicline-dir")?!0:!1;return}}),this.backdoor={accessFocusSpace:S,
+boxTrigger:z,isLine:A,getAscendantTrigger:O,getNonEmptyNeighbour:w,getSize:U,that:b,triggerEdge:ea,triggerEditable:ca,triggerExpand:ia})},this)}});var v=CKEDITOR.tools.extend,R=CKEDITOR.dom.element,G=R.createFromHtml,t=CKEDITOR.env,ja=CKEDITOR.env.ie&&9>CKEDITOR.env.version,B=CKEDITOR.dtd,K={},I=128,da=64,T=32,M=16,C=4,D=2,x=1,J=" ",fa=B.$listItem,oa=B.$tableContent,ma=v({},B.$nonEditable,B.$empty),Z=B.$block,ga=100,Q="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",
+X=Q+"border-color:transparent;display:block;border-style:solid;",W="\x3cspan\x3e"+J+"\x3c/span\x3e";K[CKEDITOR.ENTER_BR]="br";K[CKEDITOR.ENTER_P]="p";K[CKEDITOR.ENTER_DIV]="div";z.prototype={set:function(a,c,d){this.properties=a+c+(d||x);return this},is:function(a){return(this.properties&a)==a}};var ha=function(){function a(a,d){var b=a.$.elementFromPoint(d.x,d.y);return b&&b.nodeType?new CKEDITOR.dom.element(b):null}return function(c,d,b){if(!c.mouse)return null;var e=c.doc,f=c.line.wrap;b=b||c.mouse;
+var k=a(e,b);d&&A(c,k)&&(f.hide(),k=a(e,b),f.show());return!k||k.type!=CKEDITOR.NODE_ELEMENT||!k.$||t.ie&&9>t.version&&!c.boundary.equals(k)&&!c.boundary.contains(k)?null:k}}(),E=CKEDITOR.dom.walker.whitespaces(),F=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),ia=function(){function a(a){var b=a.element,e,f,k;if(!n(b)||b.contains(a.editable)||b.isReadOnly())return null;k=pa(a,function(a,b){return!b.equals(a)},function(a,b){return ha(a,!0,b)},b);e=k.upper;f=k.lower;if(V(a,e,f))return k.set(T,
+8);if(e&&b.contains(e))for(;!e.getParent().equals(b);)e=e.getParent();else e=b.getFirst(function(b){return c(a,b)});if(f&&b.contains(f))for(;!f.getParent().equals(b);)f=f.getParent();else f=b.getLast(function(b){return c(a,b)});if(!e||!f)return null;r(a,e);r(a,f);if(!q(a.mouse.y,e.size.top,f.size.bottom))return null;for(var b=Number.MAX_VALUE,h,g,l,p;f&&!f.equals(e)&&(g=e.getNext(a.isRelevant));)h=Math.abs(ka(a,e,g)-a.mouse.y),h<b&&(b=h,l=e,p=g),e=g,r(a,e);if(!l||!p||!q(a.mouse.y,l.size.top,p.size.bottom))return null;
+k.upper=l;k.lower=p;return k.set(T,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||F(b)||u(b)||A(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var b=a(c),e;if(e=b){e=b.upper;var f=b.lower;e=!e||!f||u(f)||u(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:L(c,e)&&L(c,f)&&V(c,e,f)?!0:!1}return e?b:null}}(),y=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;
+CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function n(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var e=[],f=["style","className"],b=0;b<f.length;b++){var c=a.$.elements.namedItem(f[b]);c&&(c=new CKEDITOR.dom.element(c),e.push([c,c.nextSibling]),c.remove())}return e}function t(a,e){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],c=e[f][1];c?b.insertBefore(c):b.appendTo(a)}}function r(a,e){var f=n(a),b={},c=a.$;e||(b["class"]=c.className||
+"",c.className="");b.inline=c.style.cssText||"";e||(c.style.cssText="position: static; overflow: visible");t(f);return b}function u(a,e){var f=n(a),b=a.$;"class"in e&&(b.className=e["class"]);"inline"in e&&(b.style.cssText=e.inline);t(f)}function v(a){if(!a.editable().isInline()){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];"wysiwyg"!=b.mode||b.readOnly||(b=b.document.getBody(),b.setAttribute("contentEditable",!1),b.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),
+a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=c.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,c=b.getWindow(),l,m,p,n=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),g=a.ui.space("contents");
+if("wysiwyg"==a.mode){var d=a.getSelection();l=d&&d.getRanges();m=c.getScrollPosition()}else{var k=a.editable().$;l=!CKEDITOR.env.ie&&[k.selectionStart,k.selectionEnd];m=[k.scrollLeft,k.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){c.on("resize",e);p=c.getScrollPosition();for(d=a.container;d=d.getParent();)d.setCustomData("maximize_saved_styles",r(d)),d.setStyle("z-index",a.config.baseFloatZIndex-5);g.setCustomData("maximize_saved_styles",r(g,!0));h.setCustomData("maximize_saved_styles",r(h,!0));
+g={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&b.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(0,0)},0):c.$.scrollTo(0,0);h.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");h.$.offsetLeft;h.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});h.addClass("cke_maximized");
+e();g=h.getDocumentPosition();h.setStyles({left:-1*g.x+"px",top:-1*g.y+"px"});CKEDITOR.env.gecko&&v(a)}else if(this.state==CKEDITOR.TRISTATE_ON){c.removeListener("resize",e);for(var d=[g,h],q=0;q<d.length;q++)u(d[q],d[q].getCustomData("maximize_saved_styles")),d[q].removeCustomData("maximize_saved_styles");for(d=a.container;d=d.getParent();)u(d,d.getCustomData("maximize_saved_styles")),d.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){c.$.scrollTo(p.x,p.y)},0):c.$.scrollTo(p.x,
+p.y);h.removeClass("cke_maximized");CKEDITOR.env.webkit&&(h.setStyle("display","inline"),setTimeout(function(){h.setStyle("display","block")},0));a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:g.$.offsetHeight,outerWidth:a.container.$.offsetWidth})}this.toggleState();if(d=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,d=CKEDITOR.document.getById(d._.id),d.getChild(1).setHtml(g),d.setAttribute("title",g),d.setAttribute("href",'javascript:void("'+
+g+'");');"wysiwyg"==a.mode?l?(CKEDITOR.env.gecko&&v(a),a.getSelection().selectRanges(l),(k=a.getSelection().getStartElement())&&k.scrollIntoView(!0)):c.$.scrollTo(m.x,m.y):(l&&(k.selectionStart=l[0],k.selectionEnd=l[1]),k.scrollLeft=m[0],k.scrollTop=m[1]);l=m=null;n=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==
+CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:n)},null,null,100)}}})})();(function(){function m(a,d){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),doc:a.document,win:a.window},d,!0);this.inline=this.editable.isInline();this.inline||(this.frame=this.win.getFrame());this.target=this[this.inline?"editable":"doc"]}function n(a,d){CKEDITOR.tools.extend(this,d,{editor:a},!0)}function p(a,d){var b=a.editable();CKEDITOR.tools.extend(this,{editor:a,editable:b,inline:b.isInline(),doc:a.document,win:a.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()},
+d,!0);this.hidden={};this.visible={};this.inline||(this.frame=this.win.getFrame());this.queryViewport();var c=CKEDITOR.tools.bind(this.queryViewport,this),e=CKEDITOR.tools.bind(this.hideVisible,this),g=CKEDITOR.tools.bind(this.removeAll,this);b.attachListener(this.winTop,"resize",c);b.attachListener(this.winTop,"scroll",c);b.attachListener(this.winTop,"resize",e);b.attachListener(this.win,"scroll",e);b.attachListener(this.inline?b:this.frame,"mouseout",function(a){var b=a.data.$.clientX;a=a.data.$.clientY;
+this.queryViewport();(b<=this.rect.left||b>=this.rect.right||a<=this.rect.top||a>=this.rect.bottom)&&this.hideVisible();(0>=b||b>=this.winTopPane.width||0>=a||a>=this.winTopPane.height)&&this.hideVisible()},this);b.attachListener(a,"resize",c);b.attachListener(a,"mode",g);a.on("destroy",g);this.lineTpl=(new CKEDITOR.template('\x3cdiv data-cke-lineutils-line\x3d"1" class\x3d"cke_reset_all" style\x3d"{lineStyle}"\x3e\x3cspan style\x3d"{tipLeftStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3cspan style\x3d"{tipRightStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3c/div\x3e')).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},
+t,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},q,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},q,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function l(a){var d;if(d=a&&a.type==CKEDITOR.NODE_ELEMENT)d=!(r[a.getComputedStyle("float")]||r[a.getAttribute("align")]);return d&&
+!u[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1;CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;m.prototype={start:function(a){var d=this,b=this.editor,c=this.doc,e,g,f,h,k=CKEDITOR.tools.eventsBuffer(50,function(){b.readOnly||"wysiwyg"!=b.mode||(d.relations={},(g=c.$.elementFromPoint(f,h))&&g.nodeType&&(e=new CKEDITOR.dom.element(g),d.traverseSearch(e),isNaN(f+h)||d.pixelSearch(e,f,h),a&&a(d.relations,f,h)))});this.listener=this.editable.attachListener(this.target,
+"mousemove",function(a){f=a.data.$.clientX;h=a.data.$.clientY;k.input()});this.editable.attachListener(this.inline?this.editable:this.frame,"mouseout",function(){k.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(d){var b=this.editor.createRange();b.moveToPosition(this.relations[d.uid].element,
+a[d.type]);return b}}(),store:function(){function a(a,b,c){var e=a.getUniqueId();e in c?c[e].type|=b:c[e]={element:a,type:b}}return function(d,b){var c;b&CKEDITOR.LINEUTILS_AFTER&&l(c=d.getNext())&&c.isVisible()&&(a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_AFTER);b&CKEDITOR.LINEUTILS_INSIDE&&l(c=d.getFirst())&&c.isVisible()&&(a(c,CKEDITOR.LINEUTILS_BEFORE,this.relations),b^=CKEDITOR.LINEUTILS_INSIDE);a(d,b,this.relations)}}(),traverseSearch:function(a){var d,b,c;do if(c=a.$["data-cke-expando"],
+!(c&&c in this.relations)){if(a.equals(this.editable))break;if(l(a))for(d in this.lookups)(b=this.lookups[d](a))&&this.store(a,b)}while((!a||a.type!=CKEDITOR.NODE_ELEMENT||"true"!=a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(a,c,e,g,f){for(var h=0,k;f(e);){e+=g;if(25==++h)break;if(k=this.doc.$.elementFromPoint(c,e))if(k==a)h=0;else if(d(a,k)&&(h=0,l(k=new CKEDITOR.dom.element(k))))return k}}var d=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,c){return a.contains(c)}:
+function(a,c){return!!(a.compareDocumentPosition(c)&16)};return function(b,c,d){var g=this.win.getViewPaneSize().height,f=a.call(this,b.$,c,d,-1,function(a){return 0<a});c=a.call(this,b.$,c,d,1,function(a){return a<g});if(f)for(this.traverseSearch(f);!f.getParent().equals(b);)f=f.getParent();if(c)for(this.traverseSearch(c);!c.getParent().equals(b);)c=c.getParent();for(;f||c;){f&&(f=f.getNext(l));if(!f||f.equals(c))break;this.traverseSearch(f);c&&(c=c.getPrevious(l));if(!c||c.equals(f))break;this.traverseSearch(c)}}}(),
+greedySearch:function(){this.relations={};for(var a=this.editable.getElementsByTag("*"),d=0,b,c,e;b=a.getItem(d++);)if(!b.equals(this.editable)&&b.type==CKEDITOR.NODE_ELEMENT&&(b.hasAttribute("contenteditable")||!b.isReadOnly())&&l(b)&&b.isVisible())for(e in this.lookups)(c=this.lookups[e](b))&&this.store(b,c);return this.relations}};n.prototype={locate:function(){function a(a,b){var c=a.element[b===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return c&&l(c)?(a.siblingRect=c.getClientRect(),
+b==CKEDITOR.LINEUTILS_BEFORE?(a.siblingRect.bottom+a.elementRect.top)/2:(a.elementRect.bottom+a.siblingRect.top)/2):b==CKEDITOR.LINEUTILS_BEFORE?a.elementRect.top:a.elementRect.bottom}return function(d){var b;this.locations={};for(var c in d)b=d[c],b.elementRect=b.element.getClientRect(),b.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(c,CKEDITOR.LINEUTILS_BEFORE,a(b,CKEDITOR.LINEUTILS_BEFORE)),b.type&CKEDITOR.LINEUTILS_AFTER&&this.store(c,CKEDITOR.LINEUTILS_AFTER,a(b,CKEDITOR.LINEUTILS_AFTER)),b.type&
+CKEDITOR.LINEUTILS_INSIDE&&this.store(c,CKEDITOR.LINEUTILS_INSIDE,(b.elementRect.top+b.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,d,b,c;return function(e,g){a=this.locations;d=[];for(var f in a)for(var h in a[f])if(b=Math.abs(e-a[f][h]),d.length){for(c=0;c<d.length;c++)if(b<d[c].dist){d.splice(c,0,{uid:+f,type:h,dist:b});break}c==d.length&&d.push({uid:+f,type:h,dist:b})}else d.push({uid:+f,type:h,dist:b});return"undefined"!=typeof g?d.slice(0,g):d}}(),store:function(a,
+d,b){this.locations[a]||(this.locations[a]={});this.locations[a][d]=b}};var q={display:"block",width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},t={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999};p.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(),delete this.visible[a]},hideLine:function(a){var d=a.getUniqueId();
+a.hide();this.hidden[d]=a;delete this.visible[d]},showLine:function(a){var d=a.getUniqueId();a.show();this.visible[d]=a;delete this.hidden[d]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,d){var b,c,e;if(b=this.getStyle(a.uid,a.type)){for(e in this.visible)if(this.visible[e].getCustomData("hash")!==this.hash){c=this.visible[e];break}if(!c)for(e in this.hidden)if(this.hidden[e].getCustomData("hash")!==this.hash){this.showLine(c=this.hidden[e]);
+break}c||this.showLine(c=this.addLine());c.setCustomData("hash",this.hash);this.visible[c.getUniqueId()]=c;c.setStyles(b);d&&d(c)}},getStyle:function(a,d){var b=this.relations[a],c=this.locations[a][d],e={};e.width=b.siblingRect?Math.max(b.siblingRect.width,b.elementRect.width):b.elementRect.width;e.top=this.inline?c+this.winTopScroll.y-this.rect.relativeY:this.rect.top+this.winTopScroll.y+c;if(e.top-this.winTopScroll.y<this.rect.top||e.top-this.winTopScroll.y>this.rect.bottom)return!1;this.inline?
+e.left=b.elementRect.left-this.rect.relativeX:(0<b.elementRect.left?e.left=this.rect.left+b.elementRect.left:(e.width+=b.elementRect.left,e.left=this.rect.left),0<(b=e.left+e.width-(this.rect.left+this.winPane.width))&&(e.width-=b));e.left+=this.winTopScroll.x;for(var g in e)e[g]=CKEDITOR.tools.cssLength(e[g]);return e},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,d){this.relations=a;this.locations=d;this.hash=Math.random()},
+cleanup:function(){var a,d;for(d in this.visible)a=this.visible[d],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.getClientRect(this.inline?this.editable:this.frame)},getClientRect:function(a){a=a.getClientRect();var d=this.container.getDocumentPosition(),b=this.container.getComputedStyle("position");a.relativeX=a.relativeY=
+0;"static"!=b&&(a.relativeY=d.y,a.relativeX=d.x,a.top-=a.relativeY,a.bottom-=a.relativeY,a.left-=a.relativeX,a.right-=a.relativeX);return a}};var r={left:1,right:1,center:1},u={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:m,locator:n,liner:p}})();(function(){function f(a){return a.getName&&!a.hasAttribute("data-cke-temp")}CKEDITOR.plugins.add("widgetselection",{init:function(a){if(CKEDITOR.env.webkit){var b=CKEDITOR.plugins.widgetselection;a.on("contentDom",function(a){a=a.editor;var d=a.document,e=a.editable();e.attachListener(d,"keydown",function(a){var c=a.data.$;65==a.data.getKey()&&(CKEDITOR.env.mac&&c.metaKey||!CKEDITOR.env.mac&&c.ctrlKey)&&CKEDITOR.tools.setTimeout(function(){b.addFillers(e)||b.removeFillers(e)},0)},null,null,-1);a.on("selectionCheck",
+function(a){b.removeFillers(a.editor.editable())});a.on("paste",function(a){a.data.dataValue=b.cleanPasteData(a.data.dataValue)});"selectall"in a.plugins&&b.addSelectAllIntegration(a)})}}});CKEDITOR.plugins.widgetselection={startFiller:null,endFiller:null,fillerAttribute:"data-cke-filler-webkit",fillerContent:"\x26nbsp;",fillerTagName:"div",addFillers:function(a){var b=a.editor;if(!this.isWholeContentSelected(a)&&0<a.getChildCount()){var c=a.getFirst(f),d=a.getLast(f);c&&c.type==CKEDITOR.NODE_ELEMENT&&
+!c.isEditable()&&(this.startFiller=this.createFiller(),a.append(this.startFiller,1));d&&d.type==CKEDITOR.NODE_ELEMENT&&!d.isEditable()&&(this.endFiller=this.createFiller(!0),a.append(this.endFiller,0));if(this.hasFiller(a))return b=b.createRange(),b.selectNodeContents(a),b.select(),!0}return!1},removeFillers:function(a){if(this.hasFiller(a)&&!this.isWholeContentSelected(a)){var b=a.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dstart]"),c=a.findOne(this.fillerTagName+"["+this.fillerAttribute+
+"\x3dend]");this.startFiller&&b&&this.startFiller.equals(b)?this.removeFiller(this.startFiller,a):this.startFiller=b;this.endFiller&&c&&this.endFiller.equals(c)?this.removeFiller(this.endFiller,a):this.endFiller=c}},cleanPasteData:function(a){a&&a.length&&(a=a.replace(this.createFillerRegex(),"").replace(this.createFillerRegex(!0),""));return a},isWholeContentSelected:function(a){var b=a.editor.getSelection().getRanges()[0];return!b||b&&b.collapsed?!1:(b=b.clone(),b.enlarge(CKEDITOR.ENLARGE_ELEMENT),
+!!(b&&a&&b.startContainer&&b.endContainer&&0===b.startOffset&&b.endOffset===a.getChildCount()&&b.startContainer.equals(a)&&b.endContainer.equals(a)))},hasFiller:function(a){return 0<a.find(this.fillerTagName+"["+this.fillerAttribute+"]").count()},createFiller:function(a){var b=new CKEDITOR.dom.element(this.fillerTagName);b.setHtml(this.fillerContent);b.setAttribute(this.fillerAttribute,a?"end":"start");b.setAttribute("data-cke-temp",1);b.setStyles({display:"block",width:0,height:0,padding:0,border:0,
+margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return b},removeFiller:function(a,b){if(a){var c=b.editor,d=b.editor.getSelection().getRanges()[0].startPath(),e=c.createRange(),g,f;d.contains(a)&&(g=a.getHtml(),f=!0);d="start"==a.getAttribute(this.fillerAttribute);a.remove();g&&0<g.length&&g!=this.fillerContent?(b.insertHtmlIntoRange(g,c.getSelection().getRanges()[0]),e.setStartAt(b.getChild(b.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),c.getSelection().selectRanges([e])):
+f&&(d?e.setStartAt(b.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):e.setEndAt(b.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),b.editor.getSelection().selectRanges([e]))}},createFillerRegex:function(a){var b=this.createFiller(a).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi,"\x3e[^\x3c]*\x3c");return new RegExp((a?"":"^")+b+(a?"$":""))},addSelectAllIntegration:function(a){var b=this;a.editable().attachListener(a,"beforeCommandExec",function(c){var d=
+a.editable();"selectAll"==c.data.name&&d&&b.addFillers(d)},null,null,9999)}}})();(function(){function p(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};F(this);G(this);this.on("checkWidgets",H);this.editor.on("contentDomInvalidated",this.checkWidgets,this);I(this);J(this);K(this);L(this);M(this)}function g(a,b,c,d,e){var f=a.editor;CKEDITOR.tools.extend(this,d,{editor:f,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},
+"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:g.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?d.downcasts[d.downcast]:d.downcast}},!0);a.fire("instanceCreated",this);N(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes",
+this.getClasses());this.dataReady=!0;r(this);this.fire("data",this.data);this.isInited()&&f.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function q(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;this._={};b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?(this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function O(a,
+b){a.addCommand(b.name,{exec:function(a,d){function e(){a.widgets.finalizeCreation(k)}var f=a.widgets.focused;if(f&&f.name==b.name)f.edit();else if(b.insert)b.insert();else if(b.template){var f="function"==typeof b.defaults?b.defaults():b.defaults,f=CKEDITOR.dom.element.createFromHtml(b.template.output(f)),h,l=a.widgets.wrapElement(f,b.name),k=new CKEDITOR.dom.documentFragment(l.getDocument());k.append(l);(h=a.widgets.initOn(f,b,d&&d.startupData))?(f=h.once("edit",function(b){if(b.data.dialog)h.once("dialog",
+function(b){b=b.data;var d,f;d=b.once("ok",e,null,null,20);f=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(h,!0)});b.once("hide",function(){d.removeListener();f.removeListener()})});else e()},null,null,999),h.edit(),f.removeListener()):e()}},allowedContent:b.allowedContent,requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function P(a,b){function c(b,d,c){var e=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>
+c});0>e&&(e=a._.upcasts.length);a._.upcasts.splice(e,0,[b,d,c])}var d=b.upcast,e=b.upcastPriority||10;if(d)if("string"==typeof d)for(d=d.split(",");d.length;)c(b.upcasts[d.pop()],b.name,e);else c(d,b.name,e)}function t(a,b){a.focused=null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function H(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,e,f,h;if(b){for(d in c)c[d].isReady()&&
+!b.contains(c[d].wrapper)&&this.destroy(c[d],!0);if(a&&a.initOnlyNew)c=this.initOnAll();else{var l=b.find(".cke_widget_wrapper"),c=[];d=0;for(e=l.count();d<e;d++){f=l.getItem(d);if(h=!this.getByElement(f,!0)){a:{h=Q;for(var k=f;k=k.getParent();)if(h(k)){h=!0;break a}h=!1}h=!h}h&&b.contains(f)&&(f.addClass("cke_widget_new"),c.push(this.initOn(f.getFirst(g.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function u(a,b,c){if(!c.allowedContent)return null;var d=this._.filters[a];
+d||(this._.filters[a]=d={});(a=d[b])||(d[b]=a=new CKEDITOR.filter(c.allowedContent));return a}function R(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var f,h,l,k,m;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(g.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(m=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;k=0;for(f=d.length;k<f;++k)if(!1===d[k](a))return;for(k=0;k<m;++k)if(f=
+c[k],l={},h=f[0](a,l))return h instanceof CKEDITOR.htmlParser.element&&(a=h),a.attributes["data-cke-widget-data"]=encodeURIComponent(JSON.stringify(l)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,f[1]]),!1}}}}function v(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}}function w(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];
+if(d&&!d[c.name]){var d=a.split(b),e=a.parent;b=d.getIndex();a.children.length||(--b,a.remove());d.children.length||d.remove();return w(e,b,c)}}a.add(c,b)}function x(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function Q(a){return a.hasAttribute("data-cke-temp")}function n(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&
+e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function S(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function T(a,b){return CKEDITOR.tools.trim(b)}function L(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;
+b.on("dragstart",function(d){var c=d.data.target;g.isDomDragHandler(c)&&(c=a.getByElement(c),d.data.dataTransfer.setData("cke/widget-id",c.id),b.focus(),c.focus())});b.on("drop",function(d){var c=d.data.dataTransfer,f=c.getData("cke/widget-id"),h=c.getTransferType(b),c=b.createRange();""!==f&&h===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?d.cancel():""!==f&&h==CKEDITOR.DATA_TRANSFER_INTERNAL&&(f=a.instances[f])&&(c.setStartBefore(f.wrapper),c.setEndAfter(f.wrapper),d.data.dragRange=c,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,
+delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,d.data.dataTransfer.setData("text/html",b.editable().getHtmlFromRange(c).getHtml()),b.widgets.destroy(f,!0))});b.on("contentDom",function(){var d=b.editable();CKEDITOR.tools.extend(a,{finder:new c.finder(b,{lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&&!g.isDomNestedEditable(b)&&!a._.draggedWidget.wrapper.contains(b)){var c=g.getNestedEditable(d,b);if(c){b=a._.draggedWidget;if(a.getByElement(c)==
+b)return;c=CKEDITOR.filter.instances[c.data("cke-filter")];b=b.requiredContent;if(c&&b&&!c.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function J(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,e,f;c.attachListener(d,
+"mousedown",function(c){var d=c.data.getTarget();if(!d.type)return!1;e=a.getByElement(d);f=0;e&&(e.inline&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("data-cke-widget-drag-handler")?(f=1,a.focused!=e&&b.getSelection().removeAllRanges()):g.getNestedEditable(e.wrapper,d)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});c.attachListener(d,"mouseup",function(){f&&e&&e.wrapper&&(f=0,e.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){e&&e.wrapper&&
+c.contains(e.wrapper)&&(e.focus(),e=null)})})});b.on("doubleclick",function(b){var d=a.getByElement(b.data.element);if(d&&!g.getNestedEditable(d.wrapper,b.data.element))return d.fire("doubleclick",{element:b.data.element})},null,null,1)}function K(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),
+c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e},null,null,1)}function M(a){function b(b){a.focused&&y(a.focused,"cut"==b.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function I(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});
+a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=g.getNestedEditable(b.editable(),c.data.selection.getStartElement()))&&a.getByElement(c),e=a.widgetHoldingFocusedEditable;e?e===d&&e.focusedEditable.equals(c)||(n(a,e,null),d&&c&&n(a,d,c)):d&&c&&n(a,d,c)});b.on("dataReady",function(){z(a).commit()});b.on("blur",function(){var b;(b=a.focused)&&t(a,b);(b=a.widgetHoldingFocusedEditable)&&n(a,b,null)})}function G(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var e=
+CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=e;c[e]=f;b.data.dataValue.forEach(function(b){var c=b.attributes,d;if("data-cke-widget-id"in c){if(c=a.instances[c["data-cke-widget-id"]])d=b.getFirst(g.isParserWidgetElement),f.push({wrapper:b,element:d,widget:c,editables:{}}),"1"!=d.attributes["data-cke-widget-keep-attr"]&&delete d.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return f[f.length-1].editables[c["data-cke-widget-editable"]]=b,!1},CKEDITOR.NODE_ELEMENT,
+!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId){a=c[a.data.downcastingSessionId];for(var b,f,h,l,g,m;b=a.shift();){f=b.widget;h=b.element;l=f._.downcastFn&&f._.downcastFn.call(f,h);for(m in b.editables)g=b.editables[m],delete g.attributes.contenteditable,g.setHtml(f.editables[m].getData());l||(l=h);b.wrapper.replaceWith(l)}}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function F(a){var b=a.editor,c,d;b.on("toHtml",function(b){var d=R(a),h;
+for(b.data.dataValue.forEach(d.iterator,CKEDITOR.NODE_ELEMENT,!0);h=d.toBeWrapped.pop();){var l=h[0],k=l.parent;k.type==CKEDITOR.NODE_ELEMENT&&k.attributes["data-cke-widget-wrapper"]&&k.replaceWith(l);a.wrapElement(h[0],h[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&g.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&g.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(d)for(var c=b.editable().find(".cke_widget_wrapper"),
+f,h,l=0,k=c.count();l<k;++l)f=c.getItem(l),h=f.getFirst(g.isDomWidgetElement),h.type==CKEDITOR.NODE_ELEMENT&&h.data("widget")?(h.replace(f),a.wrapElement(h)):f.remove();d=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(d=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(U,T);a.range&&(a=g.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&
+b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:c}),b.fire("unlockSnapshot"))})}function z(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,h,g;a.editor.fire("lockSnapshot");for(f&&
+(h=a.focused)&&t(a,h);h=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,h),1),h.isInited()&&(g=h.editor.checkDirty(),h.setSelected(!1),!g&&h.editor.resetDirty());f&&e&&(g=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!g&&a.editor.resetDirty());for(;h=c.pop();)b.push(h),h.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function A(a,b,c){var d=0;b=B(b);var e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f],
+d=1);d&&a.setData("classes",e)}}function C(a){a.cancel()}function y(a,b){var c=a.editor,d=c.document;if(!d.getById("cke_copybin")){var e=c.blockless||CKEDITOR.env.ie?"span":"div",f=d.createElement(e),h=d.createElement(e),e=CKEDITOR.env.ie&&9>CKEDITOR.env.version;h.setAttributes({id:"cke_copybin","data-cke-temp":"1"});f.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});f.setStyle("ltr"==c.config.contentsLangDirection?"left":"right","-5000px");var g=c.createRange();g.setStartBefore(a.wrapper);
+g.setEndAfter(a.wrapper);f.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+c.editable().getHtmlFromRange(g).getHtml()+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');c.fire("saveSnapshot");c.fire("lockSnapshot");h.append(f);c.editable().append(h);var k=c.on("selectionChange",C,null,null,0),m=a.repository.on("checkSelection",C,null,null,0);if(e)var n=d.getDocumentElement().$,p=n.scrollTop;g=c.createRange();g.selectNodeContents(f);g.select();e&&(n.scrollTop=p);setTimeout(function(){b||
+a.focus();h.remove();k.removeListener();m.removeListener();c.fire("unlockSnapshot");b&&(a.repository.del(a),c.fire("saveSnapshot"))},100)}}function B(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function D(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function E(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),
+this.editor.selectionChange(1))}function V(a){var b=null;a.on("data",function(){var a=this.data.classes,d;if(b!=a){for(d in b)a&&a[d]||this.removeClass(d);for(d in a)this.addClass(d);b=a}})}function W(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function X(a){if(a.draggable){var b=a.editor,
+c=a.wrapper.getLast(g.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png)"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1",src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,
+height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",Y,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=c}}function Y(a){function b(){var b;for(q.reset();b=
+g.pop();)b.removeListener();var c=k;b=a.sender;var d=this.repository.finder,e=this.repository.liner,f=this.editor,h=this.editor.editable();CKEDITOR.tools.isEmpty(e.visible)||(c=d.getRange(c[0]),this.focus(),f.fire("drop",{dropRange:c,target:c.startContainer}));h.removeClass("cke_widget_dragging");e.hideVisible();f.fire("dragend",{target:b})}var c=this.repository.finder,d=this.repository.locator,e=this.repository.liner,f=this.editor,h=f.editable(),g=[],k=[],m,n;this.repository._.draggedWidget=this;
+var p=c.greedySearch(),q=CKEDITOR.tools.eventsBuffer(50,function(){m=d.locate(p);k=d.sort(n,1);k.length&&(e.prepare(p,m),e.placeLine(k[0]),e.cleanup())});h.addClass("cke_widget_dragging");g.push(h.on("mousemove",function(a){n=a.data.$.clientY;q.input()}));f.fire("dragstart",{target:a.sender});g.push(f.document.once("mouseup",b,this));h.isInline()||g.push(CKEDITOR.document.once("mouseup",b,this))}function Z(a){var b,c,d=a.editables;a.editables={};if(a.editables)for(b in d)c=d[b],a.initEditable(b,"string"==
+typeof c?{selector:c}:c)}function aa(a){if(a.mask){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}}function ba(a){if(a.parts){var b={},c,d;for(d in a.parts)c=a.wrapper.findOne(a.parts[d]),b[d]=c;a.parts=b}}function N(a,b){ca(a);ba(a);Z(a);aa(a);X(a);V(a);W(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",
+function(b){var d=b.data.getTarget();g.getNestedEditable(a,d)||a.inline&&g.isDomDragHandler(d)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){y(a,b==CKEDITOR.CTRL+88);return}if(b in da||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);
+if(b.edit)a.on("edit",b.edit)}function ca(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function r(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",onLoad:function(){CKEDITOR.addCss(".cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid yellow;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid yellow}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #ace}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:none;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}")},
+beforeInit:function(a){a.widgets=new p(a)},afterInit:function(a){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});S(a)}});p.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(a,b){b=CKEDITOR.tools.prototypedCopy(b);b.name=a;b._=b._||{};this.editor.fire("widgetDefinition",b);b.template&&(b.template=new CKEDITOR.template(b.template));O(this.editor,b);P(this,b);return this.registered[a]=
+b},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=z(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=g.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===
+a){var b=a.editor,c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper,!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&n(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),f=0;f<e;++f)(c=this.getByElement(d.getItem(f),
+!0))&&this.destroy(c)}else for(d in e)c=e[d],this.destroy(c,a)},finalizeCreation:function(a){(a=a.getFirst())&&g.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(a){return a.is(b)&&a.data("cke-widget-id")}var b={div:1,span:1};return function(b,d){if(!b)return null;var e=a(b);if(!d&&!e){var f=this.editor.editable();do b=b.getParent();while(b&&!b.equals(f)&&!(e=a(b)))}return this.instances[e]||null}}(),
+initOn:function(a,b,c){b?"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new g(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){a=(a||this.editor.editable()).find(".cke_widget_new");for(var b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(g.isDomWidgetElement)))&&b.push(c);return b},onWidget:function(a){var b=
+Array.prototype.slice.call(arguments);b.shift();for(var c in this.instances){var d=this.instances[c];d.name==a&&d.on.apply(d,b)}this.on("instanceCreated",function(d){d=d.data;d.name==a&&d.on.apply(d,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,e;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");d=this.registered[b];if(!d)return null;
+if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",b);e=x(d,a.getName());c=new CKEDITOR.dom.element(e?"span":"div");c.setAttributes(v(e,b));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){b=b||a.attributes["data-widget"];d=this.registered[b];
+if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&&c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]=b);e=x(d,a.name);c=new CKEDITOR.htmlParser.element(e?"span":"div",v(e,b));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var f;d&&(f=a.getIndex(),a.remove());c.add(a);d&&w(d,f,c)}return c},_tests_createEditableFilter:u};
+CKEDITOR.event.implementOn(p.prototype);g.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(g.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){A(this,a,1)},checkStyleActive:function(a){a=B(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&this.element.removeAttribute("data-widget"),
+this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a];c.removeListener("focus",E);c.removeListener("blur",D);this.editor.focusManager.remove(c);b||(this.repository.destroyAll(!1,c),c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable",
+"data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var d,e;!1!==b.fire("dialog",a)&&(d=a.on("show",function(){a.setupContent(b)}),e=a.on("ok",function(){var d,e=b.on("data",function(a){d=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);e.removeListener();d&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){d.removeListener();
+e.removeListener()}))});return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var c=this._findOneNotNested(b.selector);return c&&c.is(CKEDITOR.dtd.$editable)?(c=new q(this.editor,c,{filter:u.call(this.repository,this.name,a,b)}),this.editables[a]=c,c.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":c.enterMode}),c.filter&&
+c.data("cke-filter",c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name",b.pathName),this.editor.focusManager.add(c),c.on("focus",E,this),CKEDITOR.env.ie&&c.on("blur",D,this),c._.initialSetData=!0,c.setData(c.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(g.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||
+!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(g.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){A(this,a,0)},setData:function(a,b){var c=this.data,d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=
+e[a])}d&&this.dataReady&&(r(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,b={x:b.offsetLeft,y:b.offsetTop-15};c&&b.x==c.x&&b.y==c.y||(c=a.checkDirty(),
+a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+"px",left:b.x+"px",display:"block"}),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b)}};CKEDITOR.event.implementOn(g.prototype);g.getNestedEditable=function(a,b){return!b||b.equals(a)?null:g.isDomNestedEditable(b)?b:g.getNestedEditable(a,b.getParent())};g.isDomDragHandler=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};g.isDomDragHandlerContainer=function(a){return a.type==
+CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};g.isDomNestedEditable=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};g.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};g.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};g.isParserWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]};
+g.isParserWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-cke-widget-wrapper"]};g.WRAPPER_CLASS_PREFIX="cke_widget_wrapper_";q.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){this._.initialSetData||this.editor.widgets.destroyAll(!1,this);this._.initialSetData=!1;a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},
+getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(),filter:this.filter,enterMode:this.enterMode})}});var U=/^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i,da={37:1,38:1,39:1,40:1,8:1,46:1};(function(){function a(){}
+function b(a,b,c){return c&&this.checkElement(a)?(a=c.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}var c={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;if(this.group="string"==typeof a.group?[a.group]:a.group){a=this.widget;var b;c[a]||(c[a]={});for(var f=0,h=this.group.length;f<h;f++)b=this.group[f],c[a][b]||(c[a][b]=[]),c[a][b].push(this)}},apply:function(a){var b;a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&(b=a.widgets.focused,
+this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},removeStylesFromSameGroup:function(a){var b,f,h=!1;if(!(a instanceof CKEDITOR.editor))return!1;f=a.elementPath();if(this.checkApplicable(f,a))for(var g=0,k=this.group.length;g<k;g++){b=c[this.widget][this.group[g]];for(var m=0;m<b.length;m++)b[m]!==this&&b[m].checkActive(f,a)&&(a.widgets.focused.removeStyle(b[m]),
+h=!0)}return h},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement):!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return g.isDomWidgetWrapper(a)?(a=a.getFirst(g.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];
+var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})})();CKEDITOR.plugins.widget=g;g.repository=p;g.nestedEditable=q})();(function(){CKEDITOR.plugins.add("oembed",{icons:"oembed",hidpi:!0,requires:"widget,dialog",version:1.17,init:function(e){function l(a,d,c,f,g,j,h,b){jQuery("body").oembed(a,{onEmbed:function(d){var g=jQuery.fn.oembed.getOEmbedProvider(a);b.element.data("resizeType",j);if("responsive"==j||"custom"==j)b.element.data("maxWidth",c),b.element.data("maxHeight",f);b.element.data("align",h);"center"==h?(b.inline||b.element.setStyle("text-align","center"),b.element.removeStyle("float")):(b.inline||b.element.removeStyle("text-align"),
+"none"==h?b.element.removeStyle("float"):b.element.setStyle("float",h));"string"===typeof d.code?(b.element.$.firstChild&&b.element.$.removeChild(b.element.$.firstChild),b.element.appendHtml(d.code),b.element.data("oembed",a),b.element.data("oembed_provider",g.name),b.element.addClass("oembed-provider-"+g.name)):"string"===typeof d.code[0].outerHTML?(b.element.$.firstChild&&b.element.$.removeChild(b.element.$.firstChild),b.element.appendHtml(d.code[0].outerHTML),b.element.data("oembed",a),b.element.data("oembed_provider",
+g.name),b.element.addClass("oembed-provider-"+g.name)):alert(e.lang.oembed.noEmbedCode)},onError:function(a){0<a.indexOf("vimeo.com")?alert(e.lang.oembed.noVimeo):alert(e.lang.oembed.Error)},maxHeight:f,maxWidth:c,useResponsiveResize:g,embedMethod:"editor"})}(function(){"undefined"===typeof jQuery?CKEDITOR.scriptLoader.load("//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js",function(){jQuery.noConflict();"undefined"===typeof jQuery.fn.oembed&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath("oembed")+
+"libs/jquery.oembed.min.js"))}):"undefined"===typeof jQuery.fn.oembed&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath("oembed")+"libs/jquery.oembed.min.js"))})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{oEmbed:function(a,d,c,f){function g(){if(null==d||"undefined"==d)d=null;if(null==c||"undefined"==c)c=null;if(null==f||"undefined"==f)f=!1;l(a,e,!1,d,c,f)}if(1>a.length||0>a.indexOf("http"))return alert(e.lang.oembed.invalidUrl),!1;"undefined"===typeof jQuery.fn.oembed?
+CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath("oembed")+"libs/jquery.oembed.min.js"),function(){g()}):g();return!0}});e.widgets.add("oembed",{draggable:!1,mask:!0,dialog:"oembed",allowedContent:{div:{styles:"text-align,float",attributes:"*",classes:null!=e.config.oembed_WrapperClass?e.config.oembed_WrapperClass:"embeddedContent"},"div(embeddedContent,oembed-provider-*) iframe":{attributes:"*"},"div(embeddedContent,oembed-provider-*) blockquote":{attributes:"*"},"div(embeddedContent,oembed-provider-*) script":{attributes:"*"}},
+template:'<div class="'+(null!=e.config.oembed_WrapperClass?e.config.oembed_WrapperClass:"embeddedContent")+'"></div>',upcast:function(a){return"div"==a.name&&a.hasClass(null!=e.config.oembed_WrapperClass?e.config.oembed_WrapperClass:"embeddedContent")},init:function(){var a={oembed:this.element.data("oembed")||"",resizeType:this.element.data("resizeType")||"noresize",maxWidth:this.element.data("maxWidth")||560,maxHeight:this.element.data("maxHeight")||315,align:this.element.data("align")||"none",
+oembed_provider:this.element.data("oembed_provider")||""};this.setData(a);this.element.addClass("oembed-provider-"+a.oembed_provider);this.on("dialog",function(a){a.data.widget=this},this)}});e.ui.addButton("oembed",{label:e.lang.oembed.button,command:"oembed",toolbar:"insert,10",icon:this.path+"icons/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"oembed.png"});var k=function(){var a=this.getDialog(),d=this.getValue(),c=a.getContentElement("general","maxSizeBox").getElement(),a=a.getContentElement("general",
+"sizeBox").getElement();"noresize"==d?(c.hide(),a.hide()):"custom"==d?(c.hide(),a.show()):(c.show(),a.hide())};String.prototype.beginsWith=function(a){return 0===this.indexOf(a)};CKEDITOR.dialog.add("oembed",function(a){return{title:a.lang.oembed.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?568:550,minHeight:155,onShow:function(){var a={oembed:this.widget.element.data("oembed")||"",resizeType:this.widget.element.data("resizeType")||"noresize",maxWidth:this.widget.element.data("maxWidth"),maxHeight:this.widget.element.data("maxHeight"),
+align:this.widget.element.data("align")||"none"};this.widget.setData(a);this.getContentElement("general","resizeType").setValue(a.resizeType);this.getContentElement("general","align").setValue(a.align);var a=this.getContentElement("general","resizeType").getValue(),c=this.getContentElement("general","maxSizeBox").getElement(),f=this.getContentElement("general","sizeBox").getElement();"noresize"==a?(c.hide(),f.hide()):"custom"==a?(c.hide(),f.show()):(c.show(),f.hide())},onOk:function(){},contents:[{label:a.lang.common.generalTab,
+id:"general",elements:[{type:"html",id:"oembedHeader",html:'<div style="white-space:normal;width:500px;padding-bottom:10px">'+a.lang.oembed.pasteUrl+"</div>"},{type:"text",id:"embedCode",focus:function(){this.getElement().focus()},label:a.lang.oembed.url,title:a.lang.oembed.pasteUrl,setup:function(a){a.data.oembed&&this.setValue(a.data.oembed)},commit:function(d){var c=CKEDITOR.dialog.getCurrent(),f=c.getValueOf("general","embedCode").replace(/\s/g,""),g=c.getContentElement("general","resizeType").getValue(),
+e=c.getContentElement("general","align").getValue(),h=null,b=null,i=!1,k=c.getParentEditor();if(1>f.length||0>f.indexOf("http"))return alert(a.lang.oembed.invalidUrl),!1;"noresize"==g?(i=!1,b=h=null):"responsive"==g?(h=c.getContentElement("general","maxWidth").getInputElement().getValue(),b=c.getContentElement("general","maxHeight").getInputElement().getValue(),i=!0):"custom"==g&&(h=c.getContentElement("general","width").getInputElement().getValue(),b=c.getContentElement("general","height").getInputElement().getValue(),
+i=!1);l(f,k,h,b,i,g,e,d);d.setData("oembed",f);d.setData("resizeType",g);d.setData("align",e);d.setData("maxWidth",h);d.setData("maxHeight",b)}},{type:"hbox",widths:["50%","50%"],children:[{id:"resizeType",type:"select",label:a.lang.oembed.resizeType,"default":"noresize",setup:function(a){a.data.resizeType&&this.setValue(a.data.resizeType)},items:[[a.lang.oembed.noresize,"noresize"],[a.lang.oembed.responsive,"responsive"],[a.lang.oembed.custom,"custom"]],onChange:k},{type:"hbox",id:"maxSizeBox",widths:["120px",
+"120px"],style:"float:left;position:absolute;left:58%;width:200px",children:[{type:"text",width:"100px",id:"maxWidth","default":null!=a.config.oembed_maxWidth?a.config.oembed_maxWidth:"560",label:a.lang.oembed.maxWidth,title:a.lang.oembed.maxWidthTitle,setup:function(a){a.data.maxWidth&&this.setValue(a.data.maxWidth)}},{type:"text",id:"maxHeight",width:"120px","default":null!=a.config.oembed_maxHeight?a.config.oembed_maxHeight:"315",label:a.lang.oembed.maxHeight,title:a.lang.oembed.maxHeightTitle,
+setup:function(a){a.data.maxHeight&&this.setValue(a.data.maxHeight)}}]},{type:"hbox",id:"sizeBox",widths:["120px","120px"],style:"float:left;position:absolute;left:58%;width:200px",children:[{type:"text",id:"width",width:"100px","default":null!=a.config.oembed_maxWidth?a.config.oembed_maxWidth:"560",label:a.lang.oembed.width,title:a.lang.oembed.widthTitle,setup:function(a){a.data.maxWidth&&this.setValue(a.data.maxWidth)}},{type:"text",id:"height",width:"120px","default":null!=a.config.oembed_maxHeight?
+a.config.oembed_maxHeight:"315",label:a.lang.oembed.height,title:a.lang.oembed.heightTitle,setup:function(a){a.data.maxHeight&&this.setValue(a.data.maxHeight)}}]}]},{type:"hbox",id:"alignment",children:[{id:"align",type:"radio",items:[[a.lang.oembed.none,"none"],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],label:a.lang.common.align,setup:function(a){this.setValue(a.data.align)}}]}]}]}})}})})();(function(){function e(a){return{"aria-label":a,"class":"cke_pagebreak",contenteditable:"false","data-cke-display-name":"pagebreak","data-cke-pagebreak":1,style:"page-break-after: always",title:a}}CKEDITOR.plugins.add("pagebreak",{requires:"fakeobjects",onLoad:function(){var a=("background:url("+CKEDITOR.getUrl(this.path+"images/pagebreak.gif")+") no-repeat center center;clear:both;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;padding:0;height:7px;cursor:default;").replace(/;/g,
+" !important;");CKEDITOR.addCss("div.cke_pagebreak{"+a+"}")},init:function(a){a.blockless||(a.addCommand("pagebreak",CKEDITOR.plugins.pagebreakCmd),a.ui.addButton&&a.ui.addButton("PageBreak",{label:a.lang.pagebreak.toolbar,command:"pagebreak",toolbar:"insert,70"}),CKEDITOR.env.webkit&&a.on("contentDom",function(){a.document.on("click",function(b){b=b.data.getTarget();b.is("div")&&b.hasClass("cke_pagebreak")&&a.getSelection().selectElement(b)})}))},afterInit:function(a){function b(f){CKEDITOR.tools.extend(f.attributes,
+e(a.lang.pagebreak.alt),!0);f.children.length=0}var c=a.dataProcessor,g=c&&c.dataFilter,c=c&&c.htmlFilter,h=/page-break-after\s*:\s*always/i,k=/display\s*:\s*none/i;c&&c.addRules({attributes:{"class":function(a,b){var c=a.replace("cke_pagebreak","");if(c!=a){var d=CKEDITOR.htmlParser.fragment.fromHtml('\x3cspan style\x3d"display: none;"\x3e\x26nbsp;\x3c/span\x3e').children[0];b.children.length=0;b.add(d);d=b.attributes;delete d["aria-label"];delete d.contenteditable;delete d.title}return c}}},{applyToAll:!0,
+priority:5});g&&g.addRules({elements:{div:function(a){if(a.attributes["data-cke-pagebreak"])b(a);else if(h.test(a.attributes.style)){var c=a.children[0];c&&"span"==c.name&&k.test(c.attributes.style)&&b(a)}}}})}});CKEDITOR.plugins.pagebreakCmd={exec:function(a){var b=a.document.createElement("div",{attributes:e(a.lang.pagebreak.alt)});a.insertElement(b)},context:"div",allowedContent:{div:{styles:"!page-break-after"},span:{match:function(a){return(a=a.parent)&&"div"==a.name&&a.styles&&a.styles["page-break-after"]},
+styles:"display"}},requiredContent:"div{page-break-after}"}})();(function(){function l(a,b,f){var d=CKEDITOR.cleanWord;d?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||b+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!d}function g(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(a){var b=0,f=this.path;a.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a){var c=this;b=1;a.once("beforePaste",g);a.getClipboardData({title:a.lang.pastefromword.title},function(b){b&&a.fire("paste",
+{type:"html",dataValue:b.dataValue,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire("afterCommandExec",{name:"pastefromword",command:c,returnValue:!!b})})}});a.ui.addButton&&a.ui.addButton("PasteFromWord",{label:a.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});a.on("pasteState",function(b){a.getCommand("pastefromword").setState(b.data)});a.on("paste",function(d){var c=d.data,h=c.dataValue,g=/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,
+e={dataValue:h};if(h&&(b||g.test(h))&&(!1!==a.fire("pasteFromWord",e)||b)){c.dontFilter=!0;var k=l(a,f,function(){if(k)a.fire("paste",c);else if(!a.config.pasteFromWordPromptCleanup||b||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(e.dataValue,a),a.fire("afterPasteFromWord",e),c.dataValue=e.dataValue;b=0});k&&d.cancel()}},null,null,3)}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue,method:"paste",dataTransfer:CKEDITOR.plugins.clipboard.initPasteDataTransfer()});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button,
+command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste",function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});
+CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=new RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,m=a.getSelection().getRanges(),n=m.createIterator(),p=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=n.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);
+var l=c.createBookmark(),b=l.startNode,d=l.endNode,k=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};k(b);if(d)for(k(d),b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(p)}else k=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==b.getName()&&b.data("cke-realelement")||!f(a,b)||(h.test(b.getName())?
+b.remove(1):(b.removeAttributes(e),a.fire("removeFormatCleanup",b))),b=k;c.moveToBookmark(l)}a.forceNextSelectionCheck();a.getSelection().selectRanges(m)}}},filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var";
+CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";CKEDITOR.plugins.add("removespan",{icons:"removespan",hidpi:!1,init:function(a){a.ui.addButton("RemoveSpan",{label:"Remove <span> tags",command:"ClearSpan"});a.addCommand("ClearSpan",CKEDITOR.plugins.removeSpan.commands.removespan)}});
+CKEDITOR.plugins.removeSpan={commands:{removespan:{exec:function(a){for(var h=a._.removeSpanRegex||(a._.removeSpanRegex=RegExp("^(?:"+a.config.removeSpanTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeSpanAttributes.split(",")),f=CKEDITOR.plugins.removeSpan.filter,k=a.getSelection().getRanges(1),l=k.createIterator(),c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var i=c.createBookmark(),b=i.startNode,j=i.endNode,d=function(b){for(var c=
+a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};d(b);if(j){d(j);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(j);)d=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?b.remove(1):(b.removeAttributes(e),a.fire("removeSpanCleanup",b))),b=d}c.moveToBookmark(i)}a.forceNextSelectionCheck();a.getSelection().selectRanges(k)}}},
+filter:function(a,h){for(var e=a._.removeSpanFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addremoveSpanFilter=function(a){this._.removeSpanFilters||(this._.removeSpanFilters=[]);this._.removeSpanFilters.push(a)};CKEDITOR.config.removeSpanTags="span";CKEDITOR.config.removeSpanAttributes="class,style,lang,width,height,align,hspace,valign";CKEDITOR.plugins.add("resize",{init:function(b){function f(d){var e=c.width,m=c.height,f=e+(d.data.$.screenX-n.x)*("rtl"==g?-1:1);d=m+(d.data.$.screenY-n.y);h&&(e=Math.max(a.resize_minWidth,Math.min(f,a.resize_maxWidth)));p&&(m=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(h?e:null,m)}function k(){CKEDITOR.document.removeListener("mousemove",f);CKEDITOR.document.removeListener("mouseup",k);b.document&&(b.document.removeListener("mousemove",f),b.document.removeListener("mouseup",
+k))}var a=b.config,r=b.ui.spaceId("resizer"),g=b.element?b.element.getDirection(1):"ltr";!a.resize_dir&&(a.resize_dir="vertical");void 0===a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0===a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0===a.resize_minWidth&&(a.resize_minWidth=750);void 0===a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var l=null,n,c,h=("both"==a.resize_dir||"horizontal"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth,p=("both"==a.resize_dir||"vertical"==
+a.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,q=CKEDITOR.tools.addFunction(function(d){l||(l=b.getResizable());c={width:l.$.offsetWidth||0,height:l.$.offsetHeight||0};n={x:d.screenX,y:d.screenY};a.resize_minWidth>c.width&&(a.resize_minWidth=c.width);a.resize_minHeight>c.height&&(a.resize_minHeight=c.height);CKEDITOR.document.on("mousemove",f);CKEDITOR.document.on("mouseup",k);b.document&&(b.document.on("mousemove",f),b.document.on("mouseup",k));d.preventDefault&&d.preventDefault()});b.on("destroy",
+function(){CKEDITOR.tools.removeFunction(q)});b.on("uiSpace",function(a){if("bottom"==a.data.space){var e="";h&&!p&&(e=" cke_resizer_horizontal");!h&&p&&(e=" cke_resizer_vertical");var c='\x3cspan id\x3d"'+r+'" class\x3d"cke_resizer'+e+" cke_resizer_"+g+'" title\x3d"'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+q+', event)"\x3e'+("ltr"==g?"◢":"◣")+"\x3c/span\x3e";"ltr"==g&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize",
+function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}});(function(){var b={readOnly:1,exec:function(a){if(a.fire("save")&&(a=a.element.$.form))try{a.submit()}catch(b){a.submit.click&&a.submit.click()}}};CKEDITOR.plugins.add("save",{init:function(a){a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.addCommand("save",b).modes={wysiwyg:!!a.element.$.form},a.ui.addButton&&a.ui.addButton("Save",{label:a.lang.save.toolbar,command:"save",toolbar:"document,10"}))}})})();CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",onLoad:function(a){CKEDITOR.plugins.scayt.onLoadTimestamp=(new Date).getTime();"moono-lisa"==(CKEDITOR.skinName||a.config.skin)&&CKEDITOR.document.appendStyleSheet(this.path+"skins/"+CKEDITOR.skin.name+"/scayt.css")},init:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js"));
+this.addMenuItems(a);var b=a.lang.scayt,e=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:b.text_title,title:a.plugins.wsc?a.lang.wsc.title:b.text_title,modes:{wysiwyg:!(e.ie&&(8>e.version||e.quirks))},toolbar:"spellchecker,20",refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=d.state.scayt[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire("scaytButtonState",b)},onRender:function(){var b=this;a.on("scaytButtonState",function(a){void 0!==typeof a.data&&b.setState(a.data)})},
+onMenu:function(){var b=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[b&&d.state.scayt[a.name]?"btn_disable":"btn_enable"];b={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||
+delete b.scaytOptions;a.config.scayt_uiTabs[1]||delete b.scaytLangs;a.config.scayt_uiTabs[2]||delete b.scaytDict;return b}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(b,d){var h=a.scayt,k,e;h&&(e=h.getSelectionNode())&&(k=c.menuGenerator(a,e),h.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" .")));return k}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(b){return function(){var d=a.scayt;d&&d.hideBanner();return b.apply(this)}}))},
+addMenuItems:function(a){var c=this,d=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");for(var b=a.config.scayt_contextMenuItemsOrder.split("|"),e=0;e<b.length;e++)b[e]="scayt_"+b[e];if((b=["grayt_description","grayt_suggest","grayt_control"].concat(b))&&b.length)for(e=0;e<b.length;e++)a.addMenuGroup(b[e],e-10);a.addCommand("scaytToggle",{exec:function(a){var b=a.scayt;d.state.scayt[a.name]=!d.state.scayt[a.name];!0===d.state.scayt[a.name]?b||d.createScayt(a):b&&d.destroy(a)}});a.addCommand("scaytAbout",
+{exec:function(a){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(c.dialogName)}});a.addCommand("scaytOptions",{exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(c.dialogName)}});a.addCommand("scaytLangs",{exec:function(a){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(c.dialogName)}});a.addCommand("scaytDict",{exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(c.dialogName)}});b={scaytToggle:{label:a.lang.scayt.btn_enable,
+group:"scaytButton",command:"scaytToggle"},scaytAbout:{label:a.lang.scayt.btn_about,group:"scaytButton",command:"scaytAbout"},scaytOptions:{label:a.lang.scayt.btn_options,group:"scaytButton",command:"scaytOptions"},scaytLangs:{label:a.lang.scayt.btn_langs,group:"scaytButton",command:"scaytLangs"},scaytDict:{label:a.lang.scayt.btn_dictionaries,group:"scaytButton",command:"scaytDict"}};a.plugins.wsc&&(b.WSC={label:a.lang.wsc.toolbar,group:"scaytButton",onClick:function(){var b=CKEDITOR.plugins.scayt,
+d=a.scayt,c=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(c=c.replace(/\s/g,""))?(d&&b.state.scayt[a.name]&&d.setMarkupPaused&&d.setMarkupPaused(!0),a.lockSelection(),a.execCommand("checkspell")):alert("Nothing to check!")}});a.addMenuItems(b)},bindEvents:function(a){var c=CKEDITOR.plugins.scayt,d=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE,b=function(){c.destroy(a)},e=function(){!c.state.scayt[a.name]||a.readOnly||a.scayt||c.createScayt(a)},f=function(){var b=
+a.editable();b.attachListener(b,"focus",function(b){CKEDITOR.plugins.scayt&&!a.scayt&&setTimeout(e,0);b=CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[a.name]&&a.scayt;var c,h;if((d||b)&&a._.savedSelection){b=a._.savedSelection.getSelectedElement();b=!b&&a._.savedSelection.getRanges();for(var f=0;f<b.length;f++)h=b[f],"string"===typeof h.startContainer.$.nodeValue&&(c=h.startContainer.getText().length,(c<h.startOffset||c<h.endOffset)&&a.unlockSelection(!1))}},this,null,-10)},g=function(){d?
+a.config.scayt_inlineModeImmediateMarkup?e():(a.on("blur",function(){setTimeout(b,0)}),a.on("focus",e),a.focusManager.hasFocus&&e()):e();f();var c=a.editable();c.attachListener(c,"mousedown",function(b){b=b.data.getTarget();var d=a.widgets&&a.widgets.getByElement(b);d&&(d.wrapper=b.getAscendant(function(a){return a.hasAttribute("data-cke-widget-wrapper")},!0))},this,null,-10)};a.on("contentDom",g);a.on("beforeCommandExec",function(b){var d=a.scayt,e=null,f=!1,g=!0;b.data.name in c.options.disablingCommandExec&&
+"wysiwyg"==a.mode?d&&(c.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)):"bold"!==b.data.name&&"italic"!==b.data.name&&"underline"!==b.data.name&&"strike"!==b.data.name&&"subscript"!==b.data.name&&"superscript"!==b.data.name&&"enter"!==b.data.name&&"cut"!==b.data.name&&"language"!==b.data.name||!d||("cut"===b.data.name&&(g=!1,f=!0),"language"===b.data.name&&(e=(e=a.plugins.language.getCurrentLangElement(a))&&e.$,f=!0),a.fire("reloadMarkupScayt",{removeOptions:{removeInside:g,forceBookmark:f,
+selectionNode:e},timeout:0}))});a.on("beforeSetMode",function(b){if("source"==b.data){if(b=a.scayt)c.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED);a.document&&a.document.getBody().removeAttribute("_jquid")}});a.on("afterCommandExec",function(b){"wysiwyg"!=a.mode||"undo"!=b.data.name&&"redo"!=b.data.name||setTimeout(function(){c.reloadMarkup(a.scayt)},250)});a.on("readOnly",function(b){var d;b&&(d=a.scayt,!0===b.editor.readOnly?d&&d.fire("removeMarkupInDocument",{}):d?c.reloadMarkup(d):
+"wysiwyg"==b.editor.mode&&!0===c.state.scayt[b.editor.name]&&(c.createScayt(a),b.editor.fire("scaytButtonState",CKEDITOR.TRISTATE_ON)))});a.on("beforeDestroy",b);a.on("setData",function(){b();(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE||a.plugins.divarea)&&g()},this,null,50);a.on("reloadMarkupScayt",function(b){var d=b.data&&b.data.removeOptions;b=b.data&&b.data.timeout;var e=a.scayt;e&&setTimeout(function(){e.removeMarkupInSelectionNode(d);c.reloadMarkup(e)},b||0)});a.on("insertElement",function(){a.fire("reloadMarkupScayt",
+{removeOptions:{forceBookmark:!0}})},this,null,50);a.on("insertHtml",function(){a.fire("reloadMarkupScayt")},this,null,50);a.on("insertText",function(){a.fire("reloadMarkupScayt")},this,null,50);a.on("scaytDialogShown",function(b){b.data.selectPage(a.scayt.tabToOpen)})},parseConfig:function(a){var c=CKEDITOR.plugins.scayt;c.replaceOldOptionsNames(a.config);"boolean"!==typeof a.config.scayt_autoStartup&&(a.config.scayt_autoStartup=!1);c.state.scayt[a.name]=a.config.scayt_autoStartup;"boolean"!==typeof a.config.grayt_autoStartup&&
+(a.config.grayt_autoStartup=!1);"boolean"!==typeof a.config.scayt_inlineModeImmediateMarkup&&(a.config.scayt_inlineModeImmediateMarkup=!1);c.state.grayt[a.name]=a.config.grayt_autoStartup;a.config.scayt_contextCommands||(a.config.scayt_contextCommands="ignore|ignoreall|add");a.config.scayt_contextMenuItemsOrder||(a.config.scayt_contextMenuItemsOrder="suggest|moresuggest|control");a.config.scayt_sLang||(a.config.scayt_sLang="en_US");if(void 0===a.config.scayt_maxSuggestions||"number"!=typeof a.config.scayt_maxSuggestions||
+0>a.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_minWordLength||"number"!=typeof a.config.scayt_minWordLength||1>a.config.scayt_minWordLength)a.config.scayt_minWordLength=4;if(void 0===a.config.scayt_customDictionaryIds||"string"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds="";if(void 0===a.config.scayt_userDictionaryName||"string"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if("string"===
+typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(",").length){var d=[],b=[];a.config.scayt_uiTabs=a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){1===Number(a)||0===Number(a)?(b.push(!0),d.push(Number(a))):b.push(!1)});null===CKEDITOR.tools.search(b,!1)?a.config.scayt_uiTabs=d:a.config.scayt_uiTabs=[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];"string"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);"string"!=typeof a.config.scayt_serviceHost&&
+(a.config.scayt_serviceHost=null);"string"!=typeof a.config.scayt_servicePort&&(a.config.scayt_servicePort=null);"string"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions="on");"string"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2");"string"!==typeof a.config.scayt_srcUrl&&(c=document.location.protocol,c=-1!=c.search(/https?:/)?
+c:"http:",a.config.scayt_srcUrl=c+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js");"boolean"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);"boolean"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0);CKEDITOR.config.scayt_handleUndoRedo=CKEDITOR.plugins.undo?CKEDITOR.config.scayt_handleUndoRedo:!1;"boolean"!==typeof a.config.scayt_multiLanguageMode&&(a.config.scayt_multiLanguageMode=!1);"object"!==
+typeof a.config.scayt_multiLanguageStyles&&(a.config.scayt_multiLanguageStyles={});a.config.scayt_ignoreAllCapsWords&&"boolean"!==typeof a.config.scayt_ignoreAllCapsWords&&(a.config.scayt_ignoreAllCapsWords=!1);a.config.scayt_ignoreDomainNames&&"boolean"!==typeof a.config.scayt_ignoreDomainNames&&(a.config.scayt_ignoreDomainNames=!1);a.config.scayt_ignoreWordsWithMixedCases&&"boolean"!==typeof a.config.scayt_ignoreWordsWithMixedCases&&(a.config.scayt_ignoreWordsWithMixedCases=!1);a.config.scayt_ignoreWordsWithNumbers&&
+"boolean"!==typeof a.config.scayt_ignoreWordsWithNumbers&&(a.config.scayt_ignoreWordsWithNumbers=!1);if(a.config.scayt_disableOptionsStorage){var c=CKEDITOR.tools.isArray(a.config.scayt_disableOptionsStorage)?a.config.scayt_disableOptionsStorage:"string"===typeof a.config.scayt_disableOptionsStorage?[a.config.scayt_disableOptionsStorage]:void 0,e="all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers".split(" "),f=["lang","ignore-all-caps-words",
+"ignore-domain-names","ignore-words-with-mixed-cases","ignore-words-with-numbers"],g=CKEDITOR.tools.search,h=CKEDITOR.tools.indexOf;a.config.scayt_disableOptionsStorage=function(a){for(var b=[],d=0;d<a.length;d++){var c=a[d],m=!!g(a,"options");if(!g(e,c)||m&&g(f,function(a){if("lang"===a)return!1}))return;g(f,c)&&f.splice(h(f,c),1);if("all"===c||m&&g(a,"lang"))return[];"options"===c&&(f=["lang"])}return b=b.concat(f)}(c)}},addRule:function(a){var c=CKEDITOR.plugins.scayt,d=a.dataProcessor,b=d&&d.htmlFilter,
+e=a._.elementsPath&&a._.elementsPath.filters,d=d&&d.dataFilter,f=a.addRemoveFormatFilter,g=function(b){if(a.scayt&&(b.hasAttribute(c.options.data_attribute_name)||b.hasAttribute(c.options.problem_grammar_data_attribute)))return!1},h=function(b){var d=!0;a.scayt&&(b.hasAttribute(c.options.data_attribute_name)||b.hasAttribute(c.options.problem_grammar_data_attribute))&&(d=!1);return d};e&&e.push(g);d&&d.addRules({elements:{span:function(a){var b=a.hasClass(c.options.misspelled_word_class)&&a.attributes[c.options.data_attribute_name],
+d=a.hasClass(c.options.problem_grammar_class)&&a.attributes[c.options.problem_grammar_data_attribute];c&&(b||d)&&delete a.name;return a}}});b&&b.addRules({elements:{span:function(a){var b=a.hasClass(c.options.misspelled_word_class)&&a.attributes[c.options.data_attribute_name],d=a.hasClass(c.options.problem_grammar_class)&&a.attributes[c.options.problem_grammar_data_attribute];c&&(b||d)&&delete a.name;return a}}});f&&f.call(a,h)},scaytMenuDefinition:function(a){var c=this;a=a.scayt;return{scayt:{scayt_ignore:{label:a.getLocal("btn_ignore"),
+group:"scayt_control",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal("btn_ignoreAll"),group:"scayt_control",order:2,exec:function(a){a.scayt.ignoreAllWords()}},scayt_add:{label:a.getLocal("btn_addWord"),group:"scayt_control",order:3,exec:function(a){var b=a.scayt;setTimeout(function(){b.addWordToUserDictionary()},10)}},scayt_option:{label:a.getLocal("btn_options"),group:"scayt_control",order:4,exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(c.dialogName)},
+verification:function(a){return 1==a.config.scayt_uiTabs[0]?!0:!1}},scayt_language:{label:a.getLocal("btn_langs"),group:"scayt_control",order:5,exec:function(a){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(c.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[1]?!0:!1}},scayt_dictionary:{label:a.getLocal("btn_dictionaries"),group:"scayt_control",order:6,exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(c.dialogName)},verification:function(a){return 1==
+a.config.scayt_uiTabs[2]?!0:!1}},scayt_about:{label:a.getLocal("btn_about"),group:"scayt_control",order:7,exec:function(a){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(c.dialogName)}}},grayt:{grayt_problemdescription:{label:"Grammar problem description",group:"grayt_description",order:1,state:CKEDITOR.TRISTATE_DISABLED,exec:function(a){}},grayt_ignore:{label:a.getLocal("btn_ignore"),group:"grayt_control",order:2,exec:function(a){a.scayt.ignorePhrase()}}}}},buildSuggestionMenuItems:function(a,
+c,d){var b={},e={},f=d?"word":"phrase",g=d?"startGrammarCheck":"startSpellCheck",h=a.scayt;if(0<c.length&&"no_any_suggestions"!==c[0])if(d)for(d=0;d<c.length;d++){var k="scayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[d].replace(" ","_");a.addCommand(k,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d],f,g));d<a.config.scayt_maxSuggestions?(a.addMenuItem(k,{label:c[d],command:k,group:"scayt_suggest",order:d+1}),b[k]=CKEDITOR.TRISTATE_OFF):(a.addMenuItem(k,{label:c[d],command:k,group:"scayt_moresuggest",
+order:d+1}),e[k]=CKEDITOR.TRISTATE_OFF,"on"===a.config.scayt_moreSuggestions&&(a.addMenuItem("scayt_moresuggest",{label:h.getLocal("btn_moreSuggestions"),group:"scayt_moresuggest",order:10,getItems:function(){return e}}),b.scayt_moresuggest=CKEDITOR.TRISTATE_OFF))}else for(d=0;d<c.length;d++)k="grayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[d].replace(" ","_"),a.addCommand(k,this.createCommand(CKEDITOR.plugins.scayt.suggestions[d],f,g)),a.addMenuItem(k,{label:c[d],command:k,group:"grayt_suggest",
+order:d+1}),b[k]=CKEDITOR.TRISTATE_OFF;else b.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED,a.addCommand("no_scayt_suggest",{exec:function(){}}),a.addMenuItem("no_scayt_suggest",{label:h.getLocal("btn_noSuggestions")||"no_scayt_suggest",command:"no_scayt_suggest",group:"scayt_suggest",order:0});return b},menuGenerator:function(a,c){var d=a.scayt,b=this.scaytMenuDefinition(a),e={},f=a.config.scayt_contextCommands.split("|"),g=c.getAttribute(d.getLangAttribute())||d.getLang(),h,k;h=d.isScaytNode(c);k=
+d.isGraytNode(c);h?(b=b.scayt,e=c.getAttribute(d.getScaytNodeAttributeName()),d.fire("getSuggestionsList",{lang:g,word:e}),e=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions,h)):k&&(b=b.grayt,e=c.getAttribute(d.getGraytNodeAttributeName()),k=d.getProblemDescriptionText(e,g),b.grayt_problemdescription&&k&&(b.grayt_problemdescription.label=k),d.fire("getGrammarSuggestionsList",{lang:g,phrase:e}),e=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions,h));if(h&&"off"==
+a.config.scayt_contextCommands)return e;for(var l in b)h&&-1==CKEDITOR.tools.indexOf(f,l.replace("scayt_",""))&&"all"!=a.config.scayt_contextCommands||(e[l]="undefined"!=typeof b[l].state?b[l].state:CKEDITOR.TRISTATE_OFF,"function"!==typeof b[l].verification||b[l].verification(a)||delete e[l],a.addCommand(l,{exec:b[l].exec}),a.addMenuItem(l,{label:a.lang.scayt[b[l].label]||b[l].label,command:l,group:b[l].group,order:b[l].order}));return e},createCommand:function(a,c,d){return{exec:function(b){b=b.scayt;
+var e={};e[c]=a;b.replaceSelectionNode(e);"startGrammarCheck"===d&&b.removeMarkupInSelectionNode({grammarOnly:!0});b.fire(d)}}}});
+CKEDITOR.plugins.scayt={charsToObserve:[{charName:"cke-fillingChar",charCode:function(){var a=CKEDITOR.version.match(/^\d(\.\d*)*/),a=a&&a[0],c;if(a){c="4.5.7";var d,a=a.replace(/\./g,"");c=c.replace(/\./g,"");d=a.length-c.length;d=0<=d?d:0;c=parseInt(a)>=parseInt(c)*Math.pow(10,d)}return c?Array(7).join(String.fromCharCode(8203)):String.fromCharCode(8203)}()}],onLoadTimestamp:"",state:{scayt:{},grayt:{}},warningCounter:0,suggestions:[],options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},
+data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word",problem_grammar_data_attribute:"data-grayt-phrase",problem_grammar_class:"gramm-problem"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol",scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},alarmCompatibilityMessage:function(){5>this.warningCounter&&(console.warn("Note: You are using latest version of SCAYT plug-in. It is recommended to upgrade WebSpellChecker.net application to version v4.8.3.Contact us by e-mail at support@webspellchecker.net."),
+this.warningCounter+=1)},reloadMarkup:function(a){var c;a&&(c=a.getScaytLangList(),a.reloadMarkup?a.reloadMarkup():(this.alarmCompatibilityMessage(),c&&c.ltr&&c.rtl&&a.fire("startSpellCheck, startGrammarCheck")))},replaceOldOptionsNames:function(a){for(var c in a)c in this.backCompatibilityMap&&(a[this.backCompatibilityMap[c]]=a[c],delete a[c])},createScayt:function(a){var c=this,d=CKEDITOR.plugins.scayt;this.loadScaytLibrary(a,function(a){function e(a){return new SCAYT.CKSCAYT(a,function(){},function(){})}
+var f=a.window&&a.window.getFrame()||a.editable();if(f){f={lang:a.config.scayt_sLang,container:f.$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,debug:a.config.scayt_debug,data_attribute_name:c.options.data_attribute_name,misspelled_word_class:c.options.misspelled_word_class,problem_grammar_data_attribute:c.options.problem_grammar_data_attribute,problem_grammar_class:c.options.problem_grammar_class,
+"options-to-restore":a.config.scayt_disableOptionsStorage,focused:a.editable().hasFocus,ignoreElementsRegex:a.config.scayt_elementsToIgnore,minWordLength:a.config.scayt_minWordLength,multiLanguageMode:a.config.scayt_multiLanguageMode,multiLanguageStyles:a.config.scayt_multiLanguageStyles,graytAutoStartup:d.state.grayt[a.name],charsToObserve:d.charsToObserve};a.config.scayt_serviceProtocol&&(f.service_protocol=a.config.scayt_serviceProtocol);a.config.scayt_serviceHost&&(f.service_host=a.config.scayt_serviceHost);
+a.config.scayt_servicePort&&(f.service_port=a.config.scayt_servicePort);a.config.scayt_servicePath&&(f.service_path=a.config.scayt_servicePath);"boolean"===typeof a.config.scayt_ignoreAllCapsWords&&(f["ignore-all-caps-words"]=a.config.scayt_ignoreAllCapsWords);"boolean"===typeof a.config.scayt_ignoreDomainNames&&(f["ignore-domain-names"]=a.config.scayt_ignoreDomainNames);"boolean"===typeof a.config.scayt_ignoreWordsWithMixedCases&&(f["ignore-words-with-mixed-cases"]=a.config.scayt_ignoreWordsWithMixedCases);
+"boolean"===typeof a.config.scayt_ignoreWordsWithNumbers&&(f["ignore-words-with-numbers"]=a.config.scayt_ignoreWordsWithNumbers);var g;try{g=e(f)}catch(h){c.alarmCompatibilityMessage(),delete f.charsToObserve,g=e(f)}g.subscribe("suggestionListSend",function(a){for(var b={},d=[],c=0;c<a.suggestionList.length;c++)b["word_"+a.suggestionList[c]]||(b["word_"+a.suggestionList[c]]=a.suggestionList[c],d.push(a.suggestionList[c]));CKEDITOR.plugins.scayt.suggestions=d});g.subscribe("selectionIsChanged",function(d){a.getSelection().isLocked&&
+a.lockSelection()});g.subscribe("graytStateChanged",function(c){d.state.grayt[a.name]=c.state});g.addMarkupHandler&&g.addMarkupHandler(function(c){var d=a.editable(),e=d.getCustomData(c.charName);e&&(e.$=c.node,d.setCustomData(c.charName,e))});a.scayt=g;a.fire("scaytButtonState",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)}else d.state.scayt[a.name]=!1})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire("scaytButtonState",CKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a,
+c){var d,b=function(){CKEDITOR.fireOnce("scaytReady");a.scayt||"function"===typeof c&&c(a)};"undefined"===typeof window.SCAYT||"function"!==typeof window.SCAYT.CKSCAYT?(d=a.config.scayt_srcUrl+"?"+this.onLoadTimestamp,CKEDITOR.scriptLoader.load(d,function(a){a&&b()})):window.SCAYT&&"function"===typeof window.SCAYT.CKSCAYT&&b()}};
+CKEDITOR.on("dialogDefinition",function(a){var c=a.data.name;a=a.data.definition.dialog;if("scaytDialog"===c)a.on("cancel",function(a){return!1},this,null,-1);if("checkspell"===c)a.on("cancel",function(a){a=a.sender&&a.sender.getParentEditor();var b=CKEDITOR.plugins.scayt,c=a.scayt;c&&b.state.scayt[a.name]&&c.setMarkupPaused&&c.setMarkupPaused(!1);a.unlockSelection()},this,null,-2);if("link"===c)a.on("ok",function(a){var b=a.sender&&a.sender.getParentEditor();b&&setTimeout(function(){b.fire("reloadMarkupScayt",
+{removeOptions:{removeInside:!0,forceBookmark:!0},timeout:0})},0)})});
+CKEDITOR.on("scaytReady",function(){if(!0===CKEDITOR.config.scayt_handleCheckDirty){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var b=null,c=this.scayt;if(CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[this.name]&&this.scayt){if(b="ready"==this.status)var f=c.removeMarkupFromString(this.getSnapshot()),c=c.removeMarkupFromString(this._.previousValue),b=b&&c!==f}else b=a.call(this);return b}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty,
+function(a){return function(){var b=this.scayt;CKEDITOR.plugins.scayt&&CKEDITOR.plugins.scayt.state.scayt[this.name]&&this.scayt?this._.previousValue=b.removeMarkupFromString(this.getSnapshot()):a.call(this)}})}if(!0===CKEDITOR.config.scayt_handleUndoRedo){var a=CKEDITOR.plugins.undo.Image.prototype,c="function"==typeof a.equalsContent?"equalsContent":"equals";a[c]=CKEDITOR.tools.override(a[c],function(a){return function(b){var c=b.editor.scayt,f=this.contents,g=b.contents,h=null;CKEDITOR.plugins.scayt&&
+CKEDITOR.plugins.scayt.state.scayt[b.editor.name]&&b.editor.scayt&&(this.contents=c.removeMarkupFromString(f)||"",b.contents=c.removeMarkupFromString(g)||"");h=a.apply(this,arguments);this.contents=f;b.contents=g;return h}})}});(function(){CKEDITOR.plugins.add("selectall",{init:function(b){b.addCommand("selectAll",{modes:{wysiwyg:1,source:1},exec:function(a){var b=a.editable();if(b.is("textarea"))a=b.$,CKEDITOR.env.ie?a.createTextRange().execCommand("SelectAll"):(a.selectionStart=0,a.selectionEnd=a.value.length),a.focus();else{if(b.is("body"))a.document.$.execCommand("SelectAll",!1,null);else{var c=a.createRange();c.selectNodeContents(b);c.select()}a.forceNextSelectionCheck();a.selectionChange()}},canUndo:!1});b.ui.addButton&&
+b.ui.addButton("SelectAll",{label:b.lang.selectall.toolbar,command:"selectAll",toolbar:"selection,10"})}})})();(function(){var k={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state!=CKEDITOR.TRISTATE_ON||a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!a.focusManager.hasFocus?"removeClass":"attachClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),c,b,e,f,k=CKEDITOR.getUrl(this.path),l=!(CKEDITOR.env.ie&&
+9>CKEDITOR.env.version),g=l?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",d,h;for(c=b=e=f="";d=a.pop();)h=a.length?",":"",c+=".cke_show_blocks "+d+g+h,e+=".cke_show_blocks.cke_contents_ltr "+d+g+h,f+=".cke_show_blocks.cke_contents_rtl "+d+g+h,b+=".cke_show_blocks "+d+g+"{background-image:url("+CKEDITOR.getUrl(k+"images/block_"+d+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(b,e+"{background-position:top left;padding-left:8px}",
+f+"{background-position:top right;padding-right:8px}"));l||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},init:function(a){function c(){b.refresh(a)}
+if(!a.blockless){var b=a.addCommand("showblocks",k);b.canUndo=!1;a.config.startupOutlineBlocks&&b.setState(CKEDITOR.TRISTATE_ON);a.ui.addButton&&a.ui.addButton("ShowBlocks",{label:a.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(a.on("focus",c),a.on("blur",c));a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)})}}})})();(function(){var f={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g,
+"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(a){var b=a.addCommand("showborders",f);b.canUndo=!1;!1!==a.config.startupShowBorders&&b.setState(CKEDITOR.TRISTATE_ON);a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)},null,null,100);a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.on("removeFormatCleanup",function(d){d=d.data;a.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&d.is("table")&&(!d.hasAttribute("border")||
+0>=parseInt(d.getAttribute("border"),10))&&d.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor;a=b&&b.dataFilter;b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){a=a.attributes;var b=a["class"],c=parseInt(a.border,10);c&&!(0>=c)||b&&-1!=b.indexOf("cke_show_border")||(a["class"]=(b||"")+" cke_show_border")}}});b&&b.addRules({elements:{table:function(a){a=a.attributes;var b=a["class"];b&&(a["class"]=b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/,
+""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if("table"==b||"tableProperties"==b)if(a=a.data.definition,b=a.getContents("info").get("txtBorder"),b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,c){a.apply(this,arguments);var e=parseInt(this.getValue(),10);c[!e||0>=e?"addClass":"removeClass"]("cke_show_border")}}),a=(a=a.getContents("advanced"))&&a.get("advCSSClasses"))a.setup=CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,
+arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,c){a.apply(this,arguments);parseInt(c.getAttribute("border"),10)||c.addClass("cke_show_border")}})})})();CKEDITOR.plugins.add("smiley",{requires:"dialog",init:function(a){a.config.smiley_path=a.config.smiley_path||this.path+"images/";a.addCommand("smiley",new CKEDITOR.dialogCommand("smiley",{allowedContent:"img[alt,height,!src,title,width]",requiredContent:"img"}));a.ui.addButton&&a.ui.addButton("Smiley",{label:a.lang.smiley.toolbar,command:"smiley",toolbar:"insert,50"});CKEDITOR.dialog.add("smiley",this.path+"dialogs/smiley.js")}});CKEDITOR.config.smiley_images="regular_smile.png sad_smile.png wink_smile.png teeth_smile.png confused_smile.png tongue_smile.png embarrassed_smile.png omg_smile.png whatchutalkingabout_smile.png angry_smile.png angel_smile.png shades_smile.png devil_smile.png cry_smile.png lightbulb.png thumbs_down.png thumbs_up.png heart.png broken_heart.png kiss.png envelope.png".split(" ");
+CKEDITOR.config.smiley_descriptions="smiley;sad;wink;laugh;frown;cheeky;blush;surprise;indecision;angry;angel;cool;devil;crying;enlightened;no;yes;heart;broken heart;kiss;mail".split(";");(function(){CKEDITOR.plugins.add("sourcearea",{init:function(a){function d(){var a=e&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show();a&&this.focus()}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=CKEDITOR.plugins.sourcearea;a.addMode("source",function(e){var b=a.ui.space("contents").getDocument().createElement("textarea");b.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?
+"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",a.config.sourceAreaTabSize||4)));b.setAttribute("dir","ltr");b.addClass("cke_source").addClass("cke_reset").addClass("cke_enable_context_menu");a.ui.space("contents").append(b);b=a.editable(new c(a,b));b.setData(a.getData(1));CKEDITOR.env.ie&&(b.attachListener(a,"resize",d,b),b.attachListener(CKEDITOR.document.getWindow(),"resize",d,b),CKEDITOR.tools.setTimeout(d,0,b));a.fire("ariaWidget",
+this);e()});a.addCommand("source",f.commands.source);a.ui.addButton&&a.ui.addButton("Source",{label:a.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});a.on("mode",function(){a.getCommand("source").setState("source"==a.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var e=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var c=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},
+insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){c.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();
+CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(c){"wysiwyg"==c.mode&&c.fire("saveSnapshot");c.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);c.setMode("source"==c.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("sourcedialog",{init:function(a){a.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js");a.ui.addButton&&a.ui.addButton("Sourcedialog",{label:a.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}});CKEDITOR.plugins.add("specialchar",{availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var c=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=
+a.langCode,b=c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! \x26quot; # $ % \x26amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; \x26lt; \x3d \x26gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x26euro; \x26lsquo; \x26rsquo; \x26ldquo; \x26rdquo; \x26ndash; \x26mdash; \x26iexcl; \x26cent; \x26pound; \x26curren; \x26yen; \x26brvbar; \x26sect; \x26uml; \x26copy; \x26ordf; \x26laquo; \x26not; \x26reg; \x26macr; \x26deg; \x26sup2; \x26sup3; \x26acute; \x26micro; \x26para; \x26middot; \x26cedil; \x26sup1; \x26ordm; \x26raquo; \x26frac14; \x26frac12; \x26frac34; \x26iquest; \x26Agrave; \x26Aacute; \x26Acirc; \x26Atilde; \x26Auml; \x26Aring; \x26AElig; \x26Ccedil; \x26Egrave; \x26Eacute; \x26Ecirc; \x26Euml; \x26Igrave; \x26Iacute; \x26Icirc; \x26Iuml; \x26ETH; \x26Ntilde; \x26Ograve; \x26Oacute; \x26Ocirc; \x26Otilde; \x26Ouml; \x26times; \x26Oslash; \x26Ugrave; \x26Uacute; \x26Ucirc; \x26Uuml; \x26Yacute; \x26THORN; \x26szlig; \x26agrave; \x26aacute; \x26acirc; \x26atilde; \x26auml; \x26aring; \x26aelig; \x26ccedil; \x26egrave; \x26eacute; \x26ecirc; \x26euml; \x26igrave; \x26iacute; \x26icirc; \x26iuml; \x26eth; \x26ntilde; \x26ograve; \x26oacute; \x26ocirc; \x26otilde; \x26ouml; \x26divide; \x26oslash; \x26ugrave; \x26uacute; \x26ucirc; \x26uuml; \x26yacute; \x26thorn; \x26yuml; \x26OElig; \x26oelig; \x26#372; \x26#374 \x26#373 \x26#375; \x26sbquo; \x26#8219; \x26bdquo; \x26hellip; \x26trade; \x26#9658; \x26bull; \x26rarr; \x26rArr; \x26hArr; \x26diams; \x26asymp;".split(" ");(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(c){var l=c.config,g=c.lang.stylescombo,f={},k=[],m=[];c.on("stylesSet",function(b){if(b=b.data.styles){for(var a,h,d,e=0,n=b.length;e<n;e++)(a=b[e],c.blockless&&a.element in CKEDITOR.dtd.$block||"string"==typeof a.type&&!CKEDITOR.style.customHandlers[a.type]||(h=a.name,a=new CKEDITOR.style(a),c.filter.customConfig&&!c.filter.check(a)))||(a._name=h,a._.enterMode=l.enterMode,a._.type=d=a.assignedTo||a.type,a._.weight=
+e+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3),f[h]=a,k.push(a),m.push(a));k.sort(function(a,b){return a._.weight-b._.weight})}});c.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(l.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,a,c,d,e,f;e=0;for(f=k.length;e<f;e++)b=k[e],a=b._name,d=b._.type,d!=c&&(this.startGroup(g["panelTitle"+String(d)]),
+c=d),this.add(a,b.type==CKEDITOR.STYLE_OBJECT?a:b.buildPreview(),a);this.commit()},onClick:function(b){c.focus();c.fire("saveSnapshot");b=f[b];var a=c.elementPath();if(b.group&&b.removeStylesFromSameGroup(c))c.applyStyle(b);else c[b.checkActive(a,c)?"removeStyle":"applyStyle"](b);c.fire("saveSnapshot")},onRender:function(){c.on("selectionChange",function(b){var a=this.getValue();b=b.data.path.elements;for(var h=0,d=b.length,e;h<d;h++){e=b[h];for(var g in f)if(f[g].checkElementRemovable(e,!0,c)){g!=
+a&&this.setValue(g);return}}this.setValue("")},this)},onOpen:function(){var b=c.getSelection().getSelectedElement(),b=c.elementPath(b),a=[0,0,0,0];this.showAll();this.unmarkAll();for(var h in f){var d=f[h],e=d._.type;d.checkApplicable(b,c,c.activeFilter)?a[e]++:this.hideItem(h);d.checkActive(b,c)&&this.mark(h)}a[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_BLOCK)]);a[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_INLINE)]);a[CKEDITOR.STYLE_OBJECT]||
+this.hideGroup(g["panelTitle"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var b=c.elementPath();if(b){for(var a in f)if(f[a].checkApplicable(b,c,c.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};k=[]}})}})})();CKEDITOR.plugins.add("syntaxhighlight",{requires:"dialog",init:function(a){a.addCommand("syntaxhighlightDialog",new CKEDITOR.dialogCommand("syntaxhighlightDialog",{allowedContent:"pre[title](*)",requiredContent:"pre[title](*)"}));a.ui.addButton&&a.ui.addButton("Syntaxhighlight",{label:a.lang.syntaxhighlight.title,command:"syntaxhighlightDialog",toolbar:"insert,98"});a.contextMenu&&(a.addMenuGroup("syntaxhighlightGroup"),a.addMenuItem("syntaxhighlightItem",{label:a.lang.syntaxhighlight.contextTitle,
+icon:this.path+"icons/syntaxhighlight.png",command:"syntaxhighlightDialog",group:"syntaxhighlightGroup"}),a.contextMenu.addListener(function(a){if(a.getAscendant("pre",!0))return{syntaxhighlightItem:CKEDITOR.TRISTATE_OFF}}));CKEDITOR.dialog.add("syntaxhighlightDialog",this.path+"dialogs/syntaxhighlight.js")}});CKEDITOR.config.syntaxhighlight_hideGutter=!1;CKEDITOR.config.syntaxhighlight_hideControls=!1;CKEDITOR.config.syntaxhighlight_collapse=!1;CKEDITOR.config.syntaxhighlight_codeTitle="";
+CKEDITOR.config.syntaxhighlight_showColumns=!1;CKEDITOR.config.syntaxhighlight_noWrap=!1;CKEDITOR.config.syntaxhighlight_firstLine=0;CKEDITOR.config.syntaxhighlight_highlight=null;CKEDITOR.config.syntaxhighlight_lang=null;CKEDITOR.config.syntaxhighlight_code="";(function(){function k(c){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(d){if(d.editable().hasFocus){var e=d.getSelection(),b;if(b=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=d.createRange(),a=CKEDITOR.tools.tryThese(function(){var a=b.getParent().$.cells[b.$.cellIndex+(c?-1:1)];a.parentNode.parentNode;return a},function(){var a=b.getParent(),a=a.getAscendant("table").$.rows[a.$.rowIndex+(c?-1:1)];return a.cells[c?a.cells.length-1:
+0]});if(a||c)if(a)a=new CKEDITOR.dom.element(a),e.moveToElementEditStart(a),e.checkStartOfBlock()&&e.checkEndOfBlock()||e.selectNodeContents(a);else return!0;else{for(var f=b.getAscendant("table").$,a=b.getParent().$.cells,f=new CKEDITOR.dom.element(f.insertRow(-1),d.document),g=0,h=a.length;g<h;g++)f.append((new CKEDITOR.dom.element(a[g],d.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(f)}e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},g={exec:function(c){c.container.focusNext(!0,
+c.tabIndex)}},f={exec:function(c){c.container.focusPrevious(!0,c.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=!1!==c.config.enableTabKeyTools,e=c.config.tabSpaces||0,b="";e--;)b+=" ";if(b)c.on("key",function(a){9==a.data.keyCode&&(c.insertText(b),a.cancel())});if(d)c.on("key",function(a){(9==a.data.keyCode&&c.execCommand("selectNextCell")||a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});c.addCommand("blur",CKEDITOR.tools.extend(g,h));c.addCommand("blurBack",
+CKEDITOR.tools.extend(f,h));c.addCommand("selectNextCell",k());c.addCommand("selectPreviousCell",k(!0))}})})();
+CKEDITOR.dom.element.prototype.focusNext=function(k,h){var g=void 0===h?this.getTabIndex():h,f,c,d,e,b,a;if(0>=g)for(b=this.getNextSourceNode(k,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,k){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&&
+(f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a<e)?(d=b,e=a):d||0!==a||(d=b,e=a)}}d&&d.focus()};
+CKEDITOR.dom.element.prototype.focusPrevious=function(k,h){for(var g=void 0===h?this.getTabIndex():h,f,c,d,e=0,b,a=this.getDocument().getBody().getLast();a=a.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&a.equals(this)){if(c=!0,k){if(!(a=a.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(a)&&(f=1);if(a.isVisible()&&!(0>(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}b<g&&(!d||b>e)&&(d=a,e=b)}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(b,a){this.setState(a.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab?
+"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(b){b.styles&&(b.styles.border&&b.styles.border.match(/solid/)&&(b.attributes.border=1),"collapse"==b.styles["border-collapse"]&&(b.attributes.cellspacing=0))}}]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(b){var a=
+b.elementPath().contains("table",1);if(a){var d=a.getParent(),c=b.editable();1!=d.getChildCount()||d.is("td","th")||d.equals(c)||(a=d);b=b.createRange();b.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);a.remove();b.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:c.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:c.menu,
+command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function t(e){function d(a){0<b.length||a.type!=CKEDITOR.NODE_ELEMENT||!C.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(c,a,"selected_cell",!0),b.push(a))}e=e.getRanges();for(var b=[],c={},a=0;a<e.length;a++){var f=e[a];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant("td",!0)||f.getAscendant("th",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.table)||(g=g.getAscendant("td",
+!0)||g.getAscendant("th",!0))&&!g.getCustomData("selected_cell")&&(CKEDITOR.dom.element.setMarker(c,g,"selected_cell",!0),b.push(g))}}CKEDITOR.dom.element.clearAllMarkers(c);return b}function p(e,d){for(var b=t(e),c=b[0],a=c.getAscendant("table"),c=c.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(a.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(a),a=b[g],g=d?b[g-1]:b[g+1],b=b[0].length,c=c.createElement("tr"),
+h=0;a[h]&&h<b;h++){var k;1<a[h].rowSpan&&g&&a[h]==g[h]?(k=a[h],k.rowSpan+=1):(k=(new CKEDITOR.dom.element(a[h])).clone(),k.removeAttribute("rowSpan"),k.appendBogus(),c.append(k),k=k.$);h+=k.colSpan-1}d?c.insertBefore(f):c.insertAfter(f)}function u(e){if(e instanceof CKEDITOR.dom.selection){var d=t(e),b=d[0].getAscendant("table"),c=CKEDITOR.tools.buildTableMap(b);e=d[0].getParent().$.rowIndex;for(var d=d[d.length-1],a=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],f=e;f<=a;f++){for(var g=c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),
+k=0;k<g.length;k++){var l=new CKEDITOR.dom.element(g[k]),n=l.getParent().$.rowIndex;1==l.$.rowSpan?l.remove():(--l.$.rowSpan,n==f&&(n=c[f+1],n[k-1]?l.insertAfter(new CKEDITOR.dom.element(n[k-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(l,1)));k+=l.$.colSpan-1}d.push(h)}c=b.$.rows;b=new CKEDITOR.dom.element(c[a+1]||(0<e?c[e-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)u(d[f]);return b}e instanceof CKEDITOR.dom.element&&(b=e.getAscendant("table"),1==b.$.rows.length?b.remove():e.remove());
+return null}function v(e,d){for(var b=d?Infinity:0,c=0;c<e.length;c++){var a;a=e[c];for(var f=d,g=a.getParent().$.cells,h=0,k=0;k<g.length;k++){var l=g[k],h=h+(f?1:l.colSpan);if(l==a.$)break}a=h-1;if(d?a<b:a>b)b=a}return b}function m(e,d){for(var b=t(e),c=b[0].getAscendant("table"),a=v(b,1),b=v(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;h<g;h++)c.push(f[h][a]),b.push(d?f[h][a-1]:f[h][a+1]);for(h=0;h<g;h++)c[h]&&(1<c[h].colSpan&&b[h]==c[h]?(a=c[h],a.colSpan+=1):(a=(new CKEDITOR.dom.element(c[h])).clone(),
+a.removeAttribute("colSpan"),a.appendBogus(),a[d?"insertBefore":"insertAfter"].call(a,new CKEDITOR.dom.element(c[h])),a=a.$),h+=a.rowSpan-1)}function y(e,d){var b=e.getStartElement();if(b=b.getAscendant("td",1)||b.getAscendant("th",1)){var c=b.clone();c.appendBogus();d?c.insertBefore(b):c.insertAfter(b)}}function x(e){if(e instanceof CKEDITOR.dom.selection){e=t(e);var d=e[0]&&e[0].getAscendant("table"),b;a:{var c=0;b=e.length-1;for(var a={},f,g;f=e[c++];)CKEDITOR.dom.element.setMarker(a,f,"delete_cell",
+!0);for(c=0;f=e[c++];)if((g=f.getPrevious())&&!g.getCustomData("delete_cell")||(g=f.getNext())&&!g.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(a);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(a);g=e[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=e[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=e.length-1;0<=g;g--)x(e[g]);b?q(b,!0):d&&d.remove()}else e instanceof CKEDITOR.dom.element&&(d=e.getParent(),1==d.getChildCount()?d.remove():e.remove())}function q(e,
+d){var b=e.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),b.focus());b=new CKEDITOR.dom.range(b);b["moveToElementEdit"+(d?"End":"Start")](e)||(b.selectNodeContents(e),b.collapse(d?!1:!0));b.select(!0)}function z(e,d,b){e=e[d];if("undefined"==typeof b)return e;for(d=0;e&&d<e.length;d++){if(b.is&&e[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(e[d])}return b.is?-1:null}function w(e,d,b){var c=t(e),a;if((d?1!=c.length:2>c.length)||(a=e.getCommonAncestor())&&
+a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))return!1;var f;e=c[0];a=e.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,k=g[0].length,l=e.getParent().$.rowIndex,n=z(g,l,e);if(d){var r;try{var q=parseInt(e.getAttribute("rowspan"),10)||1;f=parseInt(e.getAttribute("colspan"),10)||1;r=g["up"==d?l-q:"down"==d?l+q:l]["left"==d?n-f:"right"==d?n+f:n]}catch(D){return!1}if(!r||e.$==r)return!1;c["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(r))}d=e.getDocument();var p=l,
+q=r=0,u=!b&&new CKEDITOR.dom.documentFragment(d),w=0;for(d=0;d<c.length;d++){f=c[d];var m=f.getParent(),x=f.getFirst(),v=f.$.colSpan,y=f.$.rowSpan,m=m.$.rowIndex,A=z(g,m,f),w=w+v*y,q=Math.max(q,A-n+v);r=Math.max(r,m-l+y);b||(v=f,(y=v.getBogus())&&y.remove(),v.trim(),f.getChildren().count()&&(m==p||!x||x.isBlockBoundary&&x.isBlockBoundary({br:1})||(p=u.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!p||p.is&&p.is("br")||u.append("br")),f.moveChildren(u)),d?f.remove():f.setHtml(""));p=m}if(b)return r*
+q==w;u.moveChildren(e);e.appendBogus();q>=k?e.removeAttribute("rowSpan"):e.$.rowSpan=r;r>=h?e.removeAttribute("colSpan"):e.$.colSpan=q;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function A(e,d){var b=t(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(a),g=c.$.rowIndex,h=z(f,g,b),k=b.$.rowSpan,l;if(1<k){l=Math.ceil(k/2);for(var k=Math.floor(k/
+2),c=g+l,a=new CKEDITOR.dom.element(a.$.rows[c]),f=z(f,c),n,c=b.clone(),g=0;g<f.length;g++)if(n=f[g],n.parentNode==a.$&&g>h){c.insertBefore(new CKEDITOR.dom.element(n));break}else n=null;n||a.append(c)}else for(k=l=1,a=c.clone(),a.insertAfter(c),a.append(c=b.clone()),n=z(f,g),h=0;h<n.length;h++)n[h].rowSpan++;c.appendBogus();b.$.rowSpan=l;c.$.rowSpan=k;1==l&&b.removeAttribute("rowSpan");1==k&&c.removeAttribute("rowSpan");return c}function B(e,d){var b=t(e);if(1<b.length)return!1;if(d)return!0;var b=
+b[0],c=b.getParent(),a=c.getAscendant("table"),a=CKEDITOR.tools.buildTableMap(a),f=z(a,c.$.rowIndex,b),g=b.$.colSpan;if(1<g)c=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=c=1,h=[],k=0;k<a.length;k++){var l=a[k];h.push(l[f]);1<l[f].rowSpan&&(k+=l[f].rowSpan-1)}for(a=0;a<h.length;a++)h[a].colSpan++}a=b.clone();a.insertAfter(b);a.appendBogus();b.$.colSpan=c;a.$.colSpan=g;1==c&&b.removeAttribute("colSpan");1==g&&a.removeAttribute("colSpan");return a}var C=/^(?:td|th)$/;CKEDITOR.plugins.tabletools=
+{requires:"table,dialog,contextmenu",init:function(e){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function b(a,b){var c=e.addCommand(a,b);e.addFeature(c)}var c=e.lang.table;b("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",
+requiredContent:"table",contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&a.styles.background.match(/^(#[a-fA-F0-9]{3,6}|rgb\([\d, ]+\)|\w+)$/)},right:function(a){a.styles["background-color"]=a.styles.background}}]]})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");b("rowDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();q(u(a))}}));b("rowInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();p(a,
+!0)}}));b("rowInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();p(a)}}));b("columnDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();a=t(a);var b=a[0],c=a[a.length-1];a=b.getAscendant("table");for(var d=CKEDITOR.tools.buildTableMap(a),e,l,n=[],r=0,p=d.length;r<p;r++)for(var m=0,u=d[r].length;m<u;m++)d[r][m]==b.$&&(e=m),d[r][m]==c.$&&(l=m);for(r=e;r<=l;r++)for(m=0;m<d.length;m++)c=d[m],b=new CKEDITOR.dom.element(a.$.rows[m]),c=new CKEDITOR.dom.element(c[r]),
+c.$&&(1==c.$.colSpan?c.remove():--c.$.colSpan,m+=c.$.rowSpan-1,b.$.cells.length||n.push(b));l=a.$.rows[0]&&a.$.rows[0].cells;e=new CKEDITOR.dom.element(l[e]||(e?l[e-1]:a.$.parentNode));n.length==p&&a.remove();e&&q(e,!0)}}));b("columnInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();m(a,!0)}}));b("columnInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();m(a)}}));b("cellDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();x(a)}}));
+b("cellMerge",d({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a){q(w(a.getSelection()),!0)}}));b("cellMergeRight",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){q(w(a.getSelection(),"right"),!0)}}));b("cellMergeDown",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){q(w(a.getSelection(),"down"),!0)}}));b("cellVerticalSplit",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){q(B(a.getSelection()))}}));
+b("cellHorizontalSplit",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){q(A(a.getSelection()))}}));b("cellInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();y(a,!0)}}));b("cellInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();y(a)}}));e.addMenuItems&&e.addMenuItems({tablecell:{label:c.cell.menu,group:"tablecell",order:1,getItems:function(){var a=e.getSelection(),b=t(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,
+tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:w(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:w(a,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:w(a,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:B(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:A(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<
+b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:c.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:c.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:c.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:c.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:c.cell.mergeRight,group:"tablecell",
+command:"cellMergeRight",order:17},tablecell_merge_down:{label:c.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:c.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:c.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:c.row.menu,group:"tablerow",
+order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:c.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:c.column.menu,group:"tablecolumn",order:1,
+getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});e.contextMenu&&
+e.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:t};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();
+CKEDITOR.tools.buildTableMap=function(t){t=t.$.rows;for(var p=-1,u=[],v=0;v<t.length;v++){p++;!u[p]&&(u[p]=[]);for(var m=-1,y=0;y<t[v].cells.length;y++){var x=t[v].cells[y];for(m++;u[p][m];)m++;for(var q=isNaN(x.colSpan)?1:x.colSpan,x=isNaN(x.rowSpan)?1:x.rowSpan,z=0;z<x;z++){u[p+z]||(u[p+z]=[]);for(var w=0;w<q;w++)u[p+z][m+w]=t[v].cells[y]}m+=q-1}}return u};(function(){CKEDITOR.plugins.add("templates",{requires:"dialog",init:function(a){CKEDITOR.dialog.add("templates",CKEDITOR.getUrl(this.path+"dialogs/templates.js"));a.addCommand("templates",new CKEDITOR.dialogCommand("templates"));a.ui.addButton&&a.ui.addButton("Templates",{label:a.lang.templates.button,command:"templates",toolbar:"doctools,10"})}});var c={},f={};CKEDITOR.addTemplates=function(a,d){c[a]=d};CKEDITOR.getTemplates=function(a){return c[a]};CKEDITOR.loadTemplates=function(a,d){for(var e=
+[],b=0,c=a.length;b<c;b++)f[a[b]]||(e.push(a[b]),f[a[b]]=1);e.length?CKEDITOR.scriptLoader.load(e,d):setTimeout(d,0)}})();CKEDITOR.config.templates_files=[CKEDITOR.getUrl("plugins/templates/templates/default.js")];CKEDITOR.config.templates_replaceContent=!0;(function(){function D(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||v(a),f=0;f<e.length;f++){var m=e[f];if("/"!=m){"string"==typeof m&&(m=e[f]={name:m});var l,d=m.groups;if(d)for(var h=0;h<d.length;h++)l=d[h],(l=b[l])&&c(m,l);(l=b[m.name])&&c(m,l)}}return e}function g(){var b={},c,f,e;for(c in a.ui.items)f=a.ui.items[c],e=f.toolbar||"others",e=e.split(","),f=e[0],e=parseInt(e[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:e});for(f in b)b[f]=b[f].sort(function(b,
+a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var f;f=e.shift();)f="string"==typeof f?f:f.name,b&&-1!=CKEDITOR.tools.indexOf(b,f)||(f=a.ui.create(f))&&a.addFeature(f)&&c.items.push(f)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},"/"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)),
+h.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(","),e=a.config.toolbar;"string"==typeof e&&(e=a.config["toolbar_"+e]);return a.toolbar=e?h(e):d()}function v(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list",
+"indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var z=function(){this.toolbars=[];this.focusCommandExecuted=!1};z.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var g=0,c;c=d.items[g++];)if(c.focus){c.focus();return}};var E={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},
+100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var d,g=function(c,h){var b,e="rtl"==a.lang.dir,k=a.config.toolbarGroupCycling,q=e?37:39,e=e?39:37,k=void 0===k||k;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)||
+(b=0);c&&c.focus();return!1;case q:b=c;do b=b.next,!b&&k&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():g(c,9);return!1;case 40:return c.button&&c.button.hasArrow?(a.once("panelShow",function(b){b.data._.panel._.currentBlock.onKeyDown(40)}),c.execute()):g(c,40==h?q:e),!1;case e:case 38:b=c;do b=b.previous,!b&&k&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,g(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(),
+!1}return!0};a.on("uiSpace",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();a.toolbox=new z;var d=CKEDITOR.tools.getNextId(),b=['\x3cspan id\x3d"',d,'" class\x3d"cke_voice_label"\x3e',a.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+a.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',d,'" onmousedown\x3d"return false;"\x3e'],d=!1!==a.config.toolbarStartupExpanded,e,k;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&
+b.push('\x3cspan class\x3d"cke_toolbox_main"'+(d?"\x3e":' style\x3d"display:none"\x3e'));for(var q=a.toolbox.toolbars,f=D(a),m=f.length,l=0;l<m;l++){var r,n=0,w,p=f[l],v="/"!==p&&("/"===f[l+1]||l==m-1),x;if(p)if(e&&(b.push("\x3c/span\x3e"),k=e=0),"/"===p)b.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{x=p.items||p;for(var y=0;y<x.length;y++){var t=x[y],A;if(t){var B=function(c){c=c.render(a,b);u=n.items.push(c)-1;0<u&&(c.previous=n.items[u-1],c.previous.next=c);c.toolbar=n;c.onkey=
+g;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}};if(t.type==CKEDITOR.UI_SEPARATOR)k=e&&t;else{A=!1!==t.canGroup;if(!n){r=CKEDITOR.tools.getNextId();n={id:r,items:[]};w=p.name&&(a.lang.toolbar.toolbarGroups[p.name]||p.name);b.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(v?' cke_toolbar_last"':'"'),w?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');w&&b.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',w,"\x3c/span\x3e");b.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');
+var u=q.push(n)-1;0<u&&(n.previous=q[u-1],n.previous.next=n)}A?e||(b.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),e=1):e&&(b.push("\x3c/span\x3e"),e=0);k&&(B(k),k=0);B(t)}}}e&&(b.push("\x3c/span\x3e"),k=e=0);n&&b.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&b.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var C=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});
+a.on("destroy",function(){CKEDITOR.tools.removeFunction(C)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=b.ui.space("toolbar_collapser"),c=a.getPrevious(),e=b.ui.space("contents"),d=c.getParent(),f=parseInt(e.$.style.height,10),h=d.$.offsetHeight,g=a.hasClass("cke_toolbox_collapser_min");g?(c.show(),a.removeClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarExpand));
+a.getFirst().setText(g?"▲":"◀");e.setStyle("height",f-(d.$.offsetHeight-h)+"px");b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:e.$.offsetHeight,outerWidth:b.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");b.push('\x3ca title\x3d"'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');
+d||b.push(" cke_toolbox_collapser_min");b.push('" onclick\x3d"CKEDITOR.tools.callFunction('+C+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',"\x3c/a\x3e")}b.push("\x3c/span\x3e");c.data.html+=b.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,e,g;for(a=this.toolbox.toolbars;d<a.length;d++)for(e=a[d].items,b=0;b<e.length;b++)g=e[b],g.clickFn&&CKEDITOR.tools.removeFunction(g.clickFn),g.keyDownFn&&CKEDITOR.tools.removeFunction(g.keyDownFn)}});a.on("uiReady",function(){var c=
+a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",E);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,g){var c=v(this.editor),h=0===d,b={name:a};if(g){if(g=CKEDITOR.tools.search(c,function(a){return a.name==
+g})){!g.groups&&(g.groups=[]);if(d&&(d=CKEDITOR.tools.indexOf(g.groups,d),0<=d)){g.groups.splice(d+1,0,a);return}h?g.groups.splice(0,0,a):g.groups.push(a);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):"number"==typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";CKEDITOR.config.toolbarLocation="top";(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],n={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),l=d.editingHandler=new k(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&&
+(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],"undo"],[g[1],"redo"],[g[2],"redo"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){d.save(a.data&&a.data.contentOnly)});a.on("contentDom",l.attachListeners,l);a.on("instanceReady",function(){a.fire("saveSnapshot")});
+a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&d.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){d.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){d.currentImage&&d.update()});a.on("lockSnapshot",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",
+d.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1;b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]=
+d;this.previousKeyGroup=c},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked||
+"ready"!=d.status||"wysiwyg"!=d.mode)return!1;var e=d.editable();if(!e||"ready"!=e.status)return!1;e=this.snapshots;b||(b=new f(d));if(!1===b.contents)return!1;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a||b.equalsSelection(this.currentImage))return!1}else!1!==c&&d.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;!1!==c&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,
+c;a.bookmarks&&(b.focus(),c=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?c.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;0<=d;d--){if(a=b[d],!c.equalsContent(a))return a.index=
+d,a}else for(d=this.index+1;d<b.length;d++)if(a=b[d],!c.equalsContent(a))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(a){if(!this.locked){a||
+(a=new f(this.editor));for(var b=this.index,c=this.snapshots;0<b&&this.currentImage.equalsContent(c[b-1]);)--b;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage=a}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,c=b[b.length-1];return c.equalsContent(a)&&!c.equalsSelection(a)?(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=!0;else{var d=new f(this.editor,
+!0);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a=this.locked.update;this.locked=null;if(!0===a)this.update();else if(a){var b=new f(this.editor,!0);a.equalsContent(b)||this.update()}}}};e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups={PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups;
+return n[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var f=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;b||(this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(!0));a.fire("afterUndoImage")},
+h=/\b(?:href|src|name)="[^"]*?"/gi;f.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(h,""),a=a.replace(h,""));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return!1;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end,
+e.end))return!1}}return!0}};var k=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new m;this.lastKeydownImage=null};k.prototype={onKeydown:function(a){var b=a.data.getKey();if(229!==b)if(-1<CKEDITOR.tools.indexOf(g,a.data.getKeystroke()))a.data.preventDefault();else if(this.keyEventsStack.cleanUp(a),a=this.undoManager,this.keyEventsStack.getLast(b)||this.keyEventsStack.push(b),this.lastKeydownImage=new f(a.editor),e.isNavigationKey(b)||
+this.undoManager.keyGroupChanged(b))if(a.strokesRecorded[0]||a.strokesRecorded[1])a.save(!1,this.lastKeydownImage,!1),a.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(a){var b=this.undoManager;
+a=a.data.getKey();var c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);if(!(e.ieFunctionalKeysBug(a)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new f(b.editor,!0))))if(0<c)b.type(a);else if(e.isNavigationKey(a))this.onNavigationKey(!0)},onNavigationKey:function(a){var b=this.undoManager;!a&&b.save(!0,null,!1)||b.updateSelection(new f(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},attachListeners:function(){var a=this.undoManager.editor,
+b=a.editable(),c=this;b.attachListener(b,"keydown",function(a){c.onKeydown(a);if(e.ieFunctionalKeysBug(a.data.getKey()))c.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress":"input",c.onInput,c,null,999);b.attachListener(b,"keyup",c.onKeyup,c,null,999);b.attachListener(b,"paste",c.ignoreInputEventListener,c,null,999);b.attachListener(b,"drop",c.ignoreInputEventListener,c,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){c.onNavigationKey()},
+null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){c.keyEventsStack.remove(9)},null,null,999)}};var m=CKEDITOR.plugins.undo.KeyEventsStack=function(){this.stack=[]};m.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:
+null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"==typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;a.ctrlKey||a.metaKey||this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();CKEDITOR.plugins.add("wsc",{requires:"dialog",parseApi:function(a){a.config.wsc_onFinish="function"===typeof a.config.wsc_onFinish?a.config.wsc_onFinish:function(){};a.config.wsc_onClose="function"===typeof a.config.wsc_onClose?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds||
+CKEDITOR.config.wsc_customDictionaryIds||"";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName||"";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;a.config.wsc_interfaceLang=a.config.wsc_interfaceLang;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||"spell";CKEDITOR.config.wsc_version="v4.3.0-master-d769233";CKEDITOR.config.wsc_removeGlobalVariable=!0},onLoad:function(a){"moono-lisa"==
+(CKEDITOR.skinName||a.config.skin)&&CKEDITOR.document.appendStyleSheet(this.path+"skins/"+CKEDITOR.skin.name+"/wsc.css")},init:function(a){var b=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes={wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(b.ie&&(8>b.version||b.quirks))};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,
+click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});(function(){function m(a){function f(a){var b=!1;g.attachListener(g,"keydown",function(){var d=c.getBody().getElementsByTag(a);if(!b){for(var e=0;e<d.count();e++)d.getItem(e).setCustomData("retain",!0);b=!0}},null,null,1);g.attachListener(g,"keyup",function(){var d=c.getElementsByTag(a);b&&(1!=d.count()||d.getItem(0).getCustomData("retain")||d.getItem(0).hasAttribute("data-cke-temp")||d.getItem(0).remove(1),b=!1)})}var b=this.editor,c=a.document,d=c.body,e=c.getElementById("cke_actscrpt");e&&e.parentNode.removeChild(e);
+(e=c.getElementById("cke_shimscrpt"))&&e.parentNode.removeChild(e);(e=c.getElementById("cke_basetagscrpt"))&&e.parentNode.removeChild(e);d.contentEditable=!0;CKEDITOR.env.ie&&(d.hideFocus=!0,d.disabled=!0,d.removeAttribute("disabled"));delete this._.isLoadingData;this.$=d;c=new CKEDITOR.dom.document(c);this.setup();this.fixInitialSelection();var g=this;CKEDITOR.env.ie&&!CKEDITOR.env.edge&&c.getDocumentElement().addClass(c.$.compatMode);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&b.enterMode!=CKEDITOR.ENTER_P?
+f("p"):CKEDITOR.env.edge&&b.enterMode!=CKEDITOR.ENTER_DIV&&f("div");if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)c.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){b.editable().focus()})});n(b);try{b.document.$.execCommand("2D-position",!1,!0)}catch(h){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==b.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var c=a.data.getKeystroke();if(33==c||34==c)if(CKEDITOR.env.ie)setTimeout(function(){b.getSelection().scrollIntoView()},
+0);else if(b.window.$.innerHeight>this.$.offsetHeight){var d=b.createRange();d[33==c?"moveToElementEditStart":"moveToElementEditEnd"](this);d.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(c,"blur",function(){try{c.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(c,"touchend",function(){a.focus()});d=b.document.getElementsByTag("title").getItem(0);d.data("cke-title",d.getText());CKEDITOR.env.ie&&(b.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"==
+this.status&&(this.status="ready");b.fire("contentDom");this._.isPendingFocus&&(b.focus(),this._.isPendingFocus=!1);setTimeout(function(){b.fire("dataReady")},0)},0,this)}function n(a){function f(){var c;a.editable().attachListener(a,"selectionChange",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent("onresizestart",b),c=null),d.$.attachEvent("onresizestart",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand("enableObjectResizing",
+!1,!a.config.disableObjectResizing);c.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&f(a)}function p(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var f=[],b;for(b in CKEDITOR.dtd.$removeEmpty)f.push("html.CSS1Compat "+b+"[contenteditable\x3dfalse]");a.push(f.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&
+(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}var l;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(f){function b(b){b&&b.removeListener();
+a.editable(new l(a,d.$.contentWindow.document.body));a.setData(a.getData(1),f)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+c+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame").addClass("cke_reset");
+c=a.ui.space("contents");c.append(d);var e=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(e)d.on("load",b);var g=a.title,h=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&h&&(g+=", "+h),d.setAttribute("title",g));if(h){var g=CKEDITOR.tools.getNextId(),k=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+h+"\x3c/span\x3e");c.append(k,1);d.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();k&&k.remove()});
+d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!e&&b();a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var f=this.config,b=f.contentsCss;CKEDITOR.tools.isArray(b)||(f.contentsCss=b?[b]:[]);f.contentsCss.push(a)};l=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(m,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},
+base:CKEDITOR.editable,proto:{setData:function(a,f){var b=this.editor;if(f)this.setHtml(a),this.fixInitialSelection(),b.fire("dataReady");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,d=c.fullPage,e=c.docType,g=CKEDITOR.tools.buildStyleHtml(p()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');d||(g+=CKEDITOR.tools.buildStyleHtml(b.config.contentsCss));var h=c.baseHref?'\x3cbase href\x3d"'+c.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";d&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){b.docType=
+e=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){b.xmlDeclaration=a;return""}));a=b.dataProcessor.toHtml(a);d?(/<body[\s|>]/.test(a)||(a="\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),h&&(a=a.replace(/<head[^>]*?>/,"$\x26"+h)),a=a.replace(/<\/head\s*>/,g+"$\x26"),a=
+e+a):a=c.docType+'\x3chtml dir\x3d"'+c.contentsLangDirection+'" lang\x3d"'+(c.contentsLanguage||b.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+"\x3c/title\x3e"+h+g+"\x3c/head\x3e\x3cbody"+(c.bodyId?' id\x3d"'+c.bodyId+'"':"")+(c.bodyClass?' class\x3d"'+c.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));
+c='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(c+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e');
+h&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(c+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');a=a.replace(/(?=\s*<\/(:?head)>)/,c);this.clearCustomData();this.clearListeners();b.fire("contentDomUnload");var k=this.getDocument();try{k.write(a)}catch(l){setTimeout(function(){k.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var f=a.config,b=f.fullPage,c=b&&a.docType,d=b&&a.xmlDeclaration,
+e=this.getDocument(),b=b?e.getDocumentElement().getOuterHtml():e.getBody().getHtml();CKEDITOR.env.gecko&&f.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/<br>(?=\s*(:?$|<\/body>))/,""));b=a.dataProcessor.toDataFormat(b);d&&(b=d+"\n"+b);c&&(b=c+"\n"+b);return b},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:l.baseProto.focus.call(this)},detach:function(){var a=this.editor,f=a.document,b;try{b=a.window.getFrame()}catch(c){}l.baseProto.detach.call(this);this.clearCustomData();f.getDocumentElement().clearCustomData();
+CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);b&&b.getParent()?(b.clearCustomData(),(a=b.removeCustomData("onResize"))&&a.removeListener(),b.remove()):CKEDITOR.warn("editor-destroy-iframe")}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;(function(){CKEDITOR.plugins.add("youtube",{lang:"en pt ja hu it fr tr ru de ar nl pl vi zh el he es nb nn fi et sk cs".split(" "),init:function(a){a.addCommand("youtube",new CKEDITOR.dialogCommand("youtube",{allowedContent:"div{*}; iframe{*}[!width,!height,!src,!frameborder,!allowfullscreen]; object param[*]"}));a.ui.addButton("Youtube",{label:a.lang.youtube.button,toolbar:"insert",command:"youtube",icon:this.path+"images/icon.png"});CKEDITOR.dialog.add("youtube",function(){var c;return{title:a.lang.youtube.title,
+minWidth:500,minHeight:200,contents:[{id:"youtubePlugin",expand:!0,elements:[{id:"txtEmbed",type:"textarea",label:a.lang.youtube.txtEmbed,autofocus:"autofocus",onChange:function(a){handleEmbedChange(this,a)},onKeyUp:function(a){handleEmbedChange(this,a)},validate:function(){if(this.isEnabled())if(this.getValue()){if(0===this.getValue().length||-1===this.getValue().indexOf("//"))return alert(a.lang.youtube.invalidEmbed),!1}else return alert(a.lang.youtube.noCode),!1}},{type:"html",html:a.lang.youtube.or+
+"<hr>"},{type:"hbox",widths:["70%","15%","15%"],children:[{id:"txtUrl",type:"text",label:a.lang.youtube.txtUrl,onChange:function(a){handleLinkChange(this,a)},onKeyUp:function(a){handleLinkChange(this,a)},validate:function(){if(this.isEnabled())if(this.getValue()){if(c=ytVidId(this.getValue()),0===this.getValue().length||!1===c)return alert(a.lang.youtube.invalidUrl),!1}else return alert(a.lang.youtube.noCode),!1}},{type:"text",id:"txtWidth",width:"60px",label:a.lang.youtube.txtWidth,"default":null!=
+a.config.youtube_width?a.config.youtube_width:"640",validate:function(){if(this.getValue()){if(0===(parseInt(this.getValue())||0))return alert(a.lang.youtube.invalidWidth),!1}else return alert(a.lang.youtube.noWidth),!1}},{type:"text",id:"txtHeight",width:"60px",label:a.lang.youtube.txtHeight,"default":null!=a.config.youtube_height?a.config.youtube_height:"360",validate:function(){if(this.getValue()){if(0===(parseInt(this.getValue())||0))return alert(a.lang.youtube.invalidHeight),!1}else return alert(a.lang.youtube.noHeight),
+!1}}]},{type:"hbox",widths:["100%"],children:[{id:"chkResponsive",type:"checkbox",label:a.lang.youtube.txtResponsive,"default":null!=a.config.youtube_responsive?a.config.youtube_responsive:!1}]},{type:"hbox",widths:["55%","45%"],children:[{id:"chkRelated",type:"checkbox","default":null!=a.config.youtube_related?a.config.youtube_related:!0,label:a.lang.youtube.chkRelated},{id:"chkOlderCode",type:"checkbox","default":null!=a.config.youtube_older?a.config.youtube_older:!1,label:a.lang.youtube.chkOlderCode}]},
+{type:"hbox",widths:["55%","45%"],children:[{id:"chkPrivacy",type:"checkbox",label:a.lang.youtube.chkPrivacy,"default":null!=a.config.youtube_privacy?a.config.youtube_privacy:!1},{id:"chkAutoplay",type:"checkbox","default":null!=a.config.youtube_autoplay?a.config.youtube_autoplay:!1,label:a.lang.youtube.chkAutoplay}]},{type:"hbox",widths:["55%","45%"],children:[{id:"txtStartAt",type:"text",label:a.lang.youtube.txtStartAt,validate:function(){if(this.getValue()&&!/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/i.test(this.getValue()))return alert(a.lang.youtube.invalidTime),
+!1}},{id:"empty",type:"html",html:""}]}]}],onOk:function(){var a="",e="";if(this.getContentElement("youtubePlugin","txtEmbed").isEnabled())a=this.getValueOf("youtubePlugin","txtEmbed");else{var b="//",d=[],f,h=this.getValueOf("youtubePlugin","txtWidth"),i=this.getValueOf("youtubePlugin","txtHeight"),b=!0===this.getContentElement("youtubePlugin","chkPrivacy").getValue()?b+"www.youtube-nocookie.com/":b+"www.youtube.com/",b=b+("embed/"+c);!1===this.getContentElement("youtubePlugin","chkRelated").getValue()&&
+d.push("rel=0");!0===this.getContentElement("youtubePlugin","chkAutoplay").getValue()&&d.push("autoplay=1");if(f=this.getValueOf("youtubePlugin","txtStartAt"))f=hmsToSeconds(f),d.push("start="+f);0<d.length&&(b=b+"?"+d.join("&"));!0===this.getContentElement("youtubePlugin","chkResponsive").getValue()&&(a+='<div class="youtube-embed-wrapper" style="position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden;">',e='style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;"');
+!0===this.getContentElement("youtubePlugin","chkOlderCode").getValue()?(b=b.replace("embed/","v/"),b=b.replace(/&/g,"&amp;"),b=-1===b.indexOf("?")?b+"?":b+"&amp;",b+="hl="+(this.getParentEditor().config.language?this.getParentEditor().config.language:"en")+"&amp;version=3",a=a+('<object width="'+h+'" height="'+i+'" '+e+">")+('<param name="movie" value="'+b+'"></param>')+'<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>'+('<embed src="'+b+'" type="application/x-shockwave-flash" ')+
+('width="'+h+'" height="'+i+'" '+e+' allowscriptaccess="always" ')+'allowfullscreen="true"></embed></object>'):a=a+('<iframe width="'+h+'" height="'+i+'" src="'+b+'" '+e)+'frameborder="0" allowfullscreen></iframe>';!0===this.getContentElement("youtubePlugin","chkResponsive").getValue()&&(a+="</div>")}a=CKEDITOR.dom.element.createFromHtml(a);this.getParentEditor().insertElement(a)}}})}})})();
+function handleLinkChange(a){0<a.getValue().length?a.getDialog().getContentElement("youtubePlugin","txtEmbed").disable():a.getDialog().getContentElement("youtubePlugin","txtEmbed").enable()}function handleEmbedChange(a){0<a.getValue().length?a.getDialog().getContentElement("youtubePlugin","txtUrl").disable():a.getDialog().getContentElement("youtubePlugin","txtUrl").enable()}
+function ytVidId(a){return a.match(/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/)?RegExp.$1:!1}function hmsToSeconds(a){for(var a=a.split(":"),c=0,g=1;0<a.length;)c+=g*parseInt(a.pop(),10),g*=60;return c};CKEDITOR.config.plugins='dialogui,dialog,a11yhelp,about,autogrow,basicstyles,bidi,blockquote,button,clipboard,codemirror,panelbutton,panel,floatpanel,colorbutton,colordialog,menu,contextmenu,dialogadvtab,div,elementspath,enterkey,entities,fakeobjects,popup,filebrowser,find,flash,floatingspace,listblock,richcombo,font,format,forms,horizontalrule,htmlwriter,iframe,iframedialog,image,indent,indentblock,indentlist,justify,menubutton,language,link,list,liststyle,magicline,maximize,lineutils,widgetselection,widget,oembed,pagebreak,pastefromword,pastetext,removeformat,removespan,resize,save,scayt,selectall,showblocks,showborders,smiley,sourcearea,sourcedialog,specialchar,stylescombo,syntaxhighlight,tab,table,tabletools,templates,toolbar,undo,wsc,wysiwygarea,youtube';CKEDITOR.config.skin='moonocolor';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,autocomplete,768,auto,autoformat,816,auto,commentselectedrange,864,auto,searchcode,912,auto,uncommentselectedrange,960,auto,bgcolor,504,,textcolor,528,,creatediv,552,,find-rtl,576,,find,600,,replace,624,,flash,648,,button,672,,checkbox,696,,form,720,,hiddenfield,744,,imagebutton,768,,radio,792,,select-rtl,816,,select,840,,textarea-rtl,864,,textarea,888,,textfield-rtl,912,,textfield,936,,horizontalrule,960,,iframe,984,,image,1008,,indent-rtl,1032,,indent,1056,,outdent-rtl,1080,,outdent,1104,,justifyblock,1128,,justifycenter,1152,,justifyleft,1176,,justifyright,1200,,language,1224,,anchor-rtl,1248,,anchor,1272,,link,1296,,unlink,1320,,bulletedlist-rtl,1344,,bulletedlist,1368,,numberedlist-rtl,1392,,numberedlist,1416,,maximize,1440,,oembed,1464,,pagebreak-rtl,1488,,pagebreak,1512,,pastefromword-rtl,1536,,pastefromword,1560,,pastetext-rtl,1584,,pastetext,1608,,removeformat,1632,,removespan,3312,auto,save,1680,,scayt,1704,,selectall,1728,,showblocks-rtl,1752,,showblocks,1776,,smiley,1800,,source-rtl,1824,,source,1848,,sourcedialog-rtl,1872,,sourcedialog,1896,,specialchar,1920,,syntaxhighlight,3888,auto,table,1968,,templates-rtl,1992,,templates,2016,,redo-rtl,2040,,redo,2064,,undo-rtl,2088,,undo,2112,,spellchecker,2136,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,autocomplete,384,auto,autoformat,408,auto,commentselectedrange,432,auto,searchcode,456,auto,uncommentselectedrange,480,auto,bgcolor,504,auto,textcolor,528,auto,creatediv,552,auto,find-rtl,576,auto,find,600,auto,replace,624,auto,flash,648,auto,button,672,auto,checkbox,696,auto,form,720,auto,hiddenfield,744,auto,imagebutton,768,auto,radio,792,auto,select-rtl,816,auto,select,840,auto,textarea-rtl,864,auto,textarea,888,auto,textfield-rtl,912,auto,textfield,936,auto,horizontalrule,960,auto,iframe,984,auto,image,1008,auto,indent-rtl,1032,auto,indent,1056,auto,outdent-rtl,1080,auto,outdent,1104,auto,justifyblock,1128,auto,justifycenter,1152,auto,justifyleft,1176,auto,justifyright,1200,auto,language,1224,auto,anchor-rtl,1248,auto,anchor,1272,auto,link,1296,auto,unlink,1320,auto,bulletedlist-rtl,1344,auto,bulletedlist,1368,auto,numberedlist-rtl,1392,auto,numberedlist,1416,auto,maximize,1440,auto,oembed,1464,auto,pagebreak-rtl,1488,auto,pagebreak,1512,auto,pastefromword-rtl,1536,auto,pastefromword,1560,auto,pastetext-rtl,1584,auto,pastetext,1608,auto,removeformat,1632,auto,removespan,1656,auto,save,1680,auto,scayt,1704,auto,selectall,1728,auto,showblocks-rtl,1752,auto,showblocks,1776,auto,smiley,1800,auto,source-rtl,1824,auto,source,1848,auto,sourcedialog-rtl,1872,auto,sourcedialog,1896,auto,specialchar,1920,auto,syntaxhighlight,1944,auto,table,1968,auto,templates-rtl,1992,auto,templates,2016,auto,redo-rtl,2040,auto,redo,2064,auto,undo-rtl,2088,auto,undo,2112,auto,spellchecker,2136,auto','icons.png');})();CKEDITOR.lang.languages={"bg":1,"ca":1,"cs":1,"cy":1,"da":1,"de":1,"en":1,"es":1,"et":1,"fi":1,"fr":1,"hr":1,"hu":1,"it":1,"lv":1,"nl":1,"no":1,"pl":1,"pt":1,"ru":1,"si":1,"sk":1,"sl":1,"sv":1,"th":1};}());
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/config.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/config.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/config.js	(revision 2)
@@ -0,0 +1,38 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.editorConfig = function( config ) {
+	// Define changes to default configuration here.
+	// For complete reference see:
+	// http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+	// The toolbar groups arrangement, optimized for two toolbar rows.
+	config.toolbarGroups = [
+		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },
+		{ name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },
+		{ name: 'links' },
+		{ name: 'insert' },
+		{ name: 'forms' },
+		{ name: 'tools' },
+		{ name: 'document',	   groups: [ 'mode', 'document', 'doctools' ] },
+		{ name: 'others' },
+		'/',
+		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
+		{ name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
+		{ name: 'styles' },
+		{ name: 'colors' },
+		{ name: 'about' }
+	];
+
+	// Remove some buttons provided by the standard plugins, which are
+	// not needed in the Standard(s) toolbar.
+	config.removeButtons = 'Underline,Subscript,Superscript';
+
+	// Set the most common block elements.
+	config.format_tags = 'p;h1;h2;h3;pre';
+
+	// Simplify the dialog windows.
+	config.removeDialogTabs = 'image:advanced;link:advanced';
+};
Index: trunk/modules/ckeditor/ckeditor/contents.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/contents.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/contents.css	(revision 2)
@@ -0,0 +1,208 @@
+/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+body
+{
+	/* Font */
+	font-family: sans-serif, Arial, Verdana, "Trebuchet MS";
+	font-size: 12px;
+
+	/* Text color */
+	color: #333;
+
+	/* Remove the background color to make it transparent */
+	background-color: #fff;
+
+	margin: 20px;
+}
+
+.cke_editable
+{
+	font-size: 13px;
+	line-height: 1.6;
+
+	/* Fix for missing scrollbars with RTL texts. (#10488) */
+	word-wrap: break-word;
+}
+
+blockquote
+{
+	font-style: italic;
+	font-family: Georgia, Times, "Times New Roman", serif;
+	padding: 2px 0;
+	border-style: solid;
+	border-color: #ccc;
+	border-width: 0;
+}
+
+.cke_contents_ltr blockquote
+{
+	padding-left: 20px;
+	padding-right: 8px;
+	border-left-width: 5px;
+}
+
+.cke_contents_rtl blockquote
+{
+	padding-left: 8px;
+	padding-right: 20px;
+	border-right-width: 5px;
+}
+
+a
+{
+	color: #0782C1;
+}
+
+ol,ul,dl
+{
+	/* IE7: reset rtl list margin. (#7334) */
+	*margin-right: 0px;
+	/* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/
+	padding: 0 40px;
+}
+
+h1,h2,h3,h4,h5,h6
+{
+	font-weight: normal;
+	line-height: 1.2;
+}
+
+hr
+{
+	border: 0px;
+	border-top: 1px solid #ccc;
+}
+
+img.right
+{
+	border: 1px solid #ccc;
+	float: right;
+	margin-left: 15px;
+	padding: 5px;
+}
+
+img.left
+{
+	border: 1px solid #ccc;
+	float: left;
+	margin-right: 15px;
+	padding: 5px;
+}
+
+pre
+{
+	white-space: pre-wrap; /* CSS 2.1 */
+	word-wrap: break-word; /* IE7 */
+	-moz-tab-size: 4;
+	tab-size: 4;
+}
+
+.marker
+{
+	background-color: Yellow;
+}
+
+span[lang]
+{
+	font-style: italic;
+}
+
+figure
+{
+	text-align: center;
+	border: solid 1px #ccc;
+	border-radius: 2px;
+	background: rgba(0,0,0,0.05);
+	padding: 10px;
+	margin: 10px 20px;
+	display: inline-block;
+}
+
+figure > figcaption
+{
+	text-align: center;
+	display: block; /* For IE8 */
+}
+
+a > img {
+	padding: 1px;
+	margin: 1px;
+	border: none;
+	outline: 1px solid #0782C1;
+}
+
+/* Widget Styles */
+.code-featured
+{
+	border: 5px solid red;
+}
+
+.math-featured
+{
+	padding: 20px;
+	box-shadow: 0 0 2px rgba(200, 0, 0, 1);
+	background-color: rgba(255, 0, 0, 0.05);
+	margin: 10px;
+}
+
+.image-clean
+{
+	border: 0;
+	background: none;
+	padding: 0;
+}
+
+.image-clean > figcaption
+{
+	font-size: .9em;
+	text-align: right;
+}
+
+.image-grayscale
+{
+	background-color: white;
+	color: #666;
+}
+
+.image-grayscale img, img.image-grayscale
+{
+	filter: grayscale(100%);
+}
+
+.embed-240p
+{
+	max-width: 426px;
+	max-height: 240px;
+	margin:0 auto;
+}
+
+.embed-360p
+{
+	max-width: 640px;
+	max-height: 360px;
+	margin:0 auto;
+}
+
+.embed-480p
+{
+	max-width: 854px;
+	max-height: 480px;
+	margin:0 auto;
+}
+
+.embed-720p
+{
+	max-width: 1280px;
+	max-height: 720px;
+	margin:0 auto;
+}
+
+.embed-1080p
+{
+	max-width: 1920px;
+	max-height: 1080px;
+	margin:0 auto;
+}
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.css	(revision 2)
@@ -0,0 +1,73 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * CSS styles used by all pages that compose the File Browser.
+ */
+body { background-color: #bcd5eb; margin-top: 0; margin-bottom: 0; }
+body, td, input, select { font-size: 11px; font-family: Arial, Helvetica, Verdana, sans-serif; }
+body.FileArea { background-color: #f2f9f9; margin: 3px; }
+form { margin: 0; padding: 0; }
+img { border: 0; }
+.ActualFolder {
+	font-size: 18px;
+	font-weight: bold;
+	background-color: #e5eff8;
+	border: solid 2px #f0f0f0;
+}
+.Button, button { -moz-border-radius: 6px; border-radius: 6px; }
+.FolderListCurrentFolder img { background-image: url(images/FolderOpened.gif); }
+.FolderListCurrentFolder a { color: #bf2f42; font-weight: bold; }
+.FolderListFolder img { background-image: url(images/Folder.gif); }
+.FolderListFolder a { color: #003366; }
+.fullHeight { height: 100%; }
+.PopupButtons {
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+.createFolder { background-color: #dbf89f; cursor: pointer; width: 125px; }
+.createFolder:hover { background-color: #ccff66; }
+div.file {
+	background-color: #ffffff;
+	text-align: center;
+	margin: 3px;
+	padding: 3px;
+	width: 150px;
+	height: 150px;
+	float: left;
+	border: double 3px #cccccc;
+	border-radius: 8px;
+	-moz-border-radius: 8px;
+}
+div.file:hover { background-color: #dbf89f; }
+.fSize {
+	color: #444444;
+	background-color: #ededed;
+	text-align: left;
+	display: block;
+	padding: 2px;
+}
+.icon { padding: 35px 10px 10px; }
+.thumbnail { margin: 4px auto; height: 64px; overflow: hidden; }
+img.thumb { padding: 2px; width: auto; height: 78px; }
+img.icon { padding-top: 37px; }
+.filename { background-color: #ededed; margin: 2px; padding: 2px; overflow: hidden; }
+.filename a { color: #003366; font-size: 10px; text-decoration: none; }
+fieldset.fUpload { background-color: #f0f0f0; -moz-border-radius: 6px; border-radius: 6px; }
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/browser.html	(revision 2)
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page compose the File Browser dialog frameset.
+-->
+<html>
+    <head>
+        <title>CKeditor - Resources Browser</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link href="browser.css" type="text/css" rel="stylesheet">
+        <script type="text/javascript" src="js/fckxml.js"></script>
+        <script type="text/javascript">
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+    var d = document.domain ;
+    while ( true )
+    {
+        // Test if we can access a parent property.
+        try
+        {
+            var test = window.opener.document.domain ;
+            break ;
+        }
+        catch( e )
+        {}
+        // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+        d = d.replace( /.*?(?:\.|$)/, '' ) ;
+        if ( d.length == 0 )
+            break ;        // It was not able to detect the domain.
+        try
+        {
+            document.domain = d ;
+        }
+        catch (e)
+        {
+            break ;
+        }
+    }
+})() ;
+
+function GetUrlParam( paramName )
+{
+    var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
+    var oMatch = oRegex.exec( window.top.location.search ) ;
+
+    if ( oMatch && oMatch.length > 1 )
+        return decodeURIComponent( oMatch[1] ) ;
+    else
+        return '' ;
+}
+
+var oConnector = new Object() ;
+oConnector.CurrentFolder    = '/' ;
+var sConnUrl = GetUrlParam( 'Connector' ) ;
+// Gecko has some problems when using relative URLs (not starting with slash).
+if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 )
+    sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ;
+oConnector.ConnectorUrl = sConnUrl + ( sConnUrl.indexOf('?') != -1 ? '&' : '?' ) ;
+var sServerPath = GetUrlParam( 'ServerPath' ) ;
+if ( sServerPath.length > 0 ){
+    oConnector.ConnectorUrl += 'ServerPath=' + encodeURIComponent( sServerPath ) + '&' ;}
+oConnector.ResourceType        = GetUrlParam( 'Type' ) ;
+oConnector.ShowAllTypes        = ( oConnector.ResourceType.length == 0 ) ;
+if ( oConnector.ShowAllTypes ){
+    oConnector.ResourceType = 'File' ;}
+oConnector.SendCommand = function( command, params, callBackFunction )
+{
+    var sUrl = this.ConnectorUrl + 'Command=' + command ;
+    sUrl += '&Type=' + this.ResourceType ;
+    sUrl += '&CurrentFolder=' + encodeURIComponent( this.CurrentFolder ) ;
+
+    if ( params ) sUrl += '&' + params ;
+
+    // Add a random salt to avoid getting a cached version of the command execution
+    sUrl += '&uuid=' + new Date().getTime() ;
+
+    var oXML = new FCKXml() ;
+
+    if ( callBackFunction )
+        oXML.LoadUrl( sUrl, callBackFunction ) ;    // Asynchronous load.
+    else
+        return oXML.LoadUrl( sUrl ) ;
+
+    return null ;
+}
+
+oConnector.CheckError = function( responseXml )
+{
+    var iErrorNumber = 0 ;
+    var oErrorNode = responseXml.SelectSingleNode( 'Connector/Error' ) ;
+
+    if ( oErrorNode )
+    {
+        iErrorNumber = parseInt( oErrorNode.attributes.getNamedItem('number').value, 10 ) ;
+
+        switch ( iErrorNumber )
+        {
+            case 0 :
+                break ;
+            case 1 :    // Custom error. Message placed in the "text" attribute.
+                alert( oErrorNode.attributes.getNamedItem('text').value ) ;
+                break ;
+            case 101 :
+                alert( 'Folder already exists' ) ;
+                break ;
+            case 102 :
+                alert( 'Invalid folder name' ) ;
+                break ;
+            case 103 :
+                alert( 'You have no permissions to create the folder' ) ;
+                break ;
+            case 110 :
+                alert( 'Unknown error creating folder' ) ;
+                break ;
+            default :
+                alert( 'Error on your request. Error number: ' + iErrorNumber ) ;
+                break ;
+        }
+    }
+    return iErrorNumber ;
+}
+
+var oIcons = new Object() ;
+
+oIcons.AvailableIconsArray = [
+    'ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js',
+    'mdb','mp3','pdf','png','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip' ] ;
+
+oIcons.AvailableIcons = new Object() ;
+
+for ( var i = 0 ; i < oIcons.AvailableIconsArray.length ; i++ )
+    oIcons.AvailableIcons[ oIcons.AvailableIconsArray[i] ] = true ;
+
+oIcons.GetIcon = function( fileName )
+{
+    var sExtension = fileName.substr( fileName.lastIndexOf('.') + 1 ).toLowerCase() ;
+
+    if ( this.AvailableIcons[ sExtension ] == true )
+        return sExtension ;
+    else
+        return 'default.icon' ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+    if (errorNumber == "1")
+        window.frames['frmUpload'].OnUploadCompleted( errorNumber, customMsg ) ;
+    else
+        window.frames['frmUpload'].OnUploadCompleted( errorNumber, fileName ) ;
+}
+
+        </script>
+    </head>
+
+<!--
+    <body>
+<div class="frameset Frame">
+    <div class="frameset Frame">
+        <iframe src="frmresourceslist.html"></iframe>
+    </div>
+</div>
+    </body>
+-->
+    <frameset cols="150,*" class="Frame" >
+        <frameset rows="25,*">
+            <frame src="frmresourcetype.html" scrolling="no" frameborder="0">
+            <frame name="frmFolders" src="frmfolders.html" scrolling="auto" frameborder="0">
+        </frameset>
+        <frameset rows="45,*,70">
+            <frame name="frmActualFolder" src="frmactualfolder.html" scrolling="no" frameborder="0">
+            <frame name="frmResourcesList" src="frmresourceslist.html" scrolling="auto" frameborder="0">
+            <frameset cols="1050,*,0" >
+                <frame name="frmCreateFolder" src="frmcreatefolder.html" scrolling="no" frameborder="0">
+                <frame name="frmUpload" src="frmupload.html" scrolling="no" frameborder="0">
+                <frame name="frmUploadWorker" src="javascript:void(0)" scrolling="no" frameborder="0">
+            </frameset>
+        </frameset>
+    </frameset>
+
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmactualfolder.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmactualfolder.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmactualfolder.html	(revision 2)
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML>
+<!--
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the actual folder path.
+-->
+<html>
+    <head>
+        <title>Folder path</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link href="browser.css" type="text/css" rel="stylesheet">
+        <script type="text/javascript">
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+    var d = document.domain ;
+
+    while ( true )
+    {
+        // Test if we can access a parent property.
+        try
+        {
+            var test = window.top.opener.document.domain ;
+            break ;
+        }
+        catch( e )
+        {}
+        // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+        d = d.replace( /.*?(?:\.|$)/, '' ) ;
+        if ( d.length == 0 )
+            break ;        // It was not able to detect the domain.
+        try
+        {
+            document.domain = d ;
+        }
+        catch (e)
+        {
+            break ;
+        }
+    }
+})() ;
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+    document.getElementById('tdName').innerHTML = folderPath ;
+}
+
+window.onload = function()
+{
+    window.top.IsLoadedActualFolder = true ;
+}
+
+        </script>
+    </head>
+    <body>
+        <table class="fullHeight" >
+            <tr>
+                <td>
+                    <button style="WIDTH: 100%" type="button" class="ActualFolder">
+                        <table  >
+                            <tr>
+                                <td><img alt="" src="images/FolderOpened_big.gif" style="width : 24px; white-space: nowrap;"></td>
+                                <td>&nbsp;</td>
+                                <td id="tdName" style="width :100%; white-space: nowrap;" >/</td>
+                                <td>&nbsp;</td>
+                            </tr>
+                        </table>
+                    </button>
+                </td>
+            </tr>
+        </table>
+    </body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html	(revision 2)
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML>
+<!--
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to create new folders in the current folder.
+-->
+<html>
+    <head>
+        <title>Create Folder</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link href="browser.css" type="text/css" rel="stylesheet">
+        <script type="text/javascript" src="js/common.js"></script>
+        <script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+    oConnector.ResourceType = resourceType ;
+    oConnector.CurrentFolder = folderPath ;
+}
+
+function CreateFolder()
+{
+    var sFolderName ;
+    while ( true )
+    {
+        sFolderName = prompt( 'Type the name of the new folder:', '' ) ;
+        if ( sFolderName == null )
+            return ;
+        else if ( sFolderName.length == 0 )
+            alert( 'Please type the folder name' ) ;
+        else
+            break ;
+    }
+    oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + encodeURIComponent( sFolderName) , CreateFolderCallBack ) ;
+}
+
+function CreateFolderCallBack( fckXml )
+{
+    if ( oConnector.CheckError( fckXml ) == 0 )
+        window.parent.frames['frmResourcesList'].Refresh() ;
+
+    /*
+    // Get the current folder path.
+    */
+    var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ;
+    var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ;
+
+    switch ( iErrorNumber )
+    {
+        case 0 :
+            window.parent.frames['frmResourcesList'].Refresh() ;
+            break ;
+        case 101 :
+            alert( 'Folder already exists' ) ;
+            break ;
+        case 102 :
+            alert( 'Invalid folder name' ) ;
+            break ;
+        case 103 :
+            alert( 'You have no permissions to create the folder' ) ;
+            break ;
+        case 110 :
+            alert( 'Unknown error creating folder' ) ;
+            break ;
+        default :
+            alert( 'Error creating folder. Error number: ' + iErrorNumber ) ;
+            break ;
+    }
+}
+
+window.onload = function(){
+    window.top.IsLoadedCreateFolder = true ;
+}
+        </script>
+    </head>
+    <body>
+        <table class="fullHeight" >
+            <tr>
+                <td>&nbsp;</td>
+            </tr>
+        </table>
+    </body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html.org
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html.org	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmcreatefolder.html.org	(revision 2)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to create new folders in the current folder.
+-->
+<html>
+	<head>
+		<title>Create Folder</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	oConnector.ResourceType = resourceType ;
+	oConnector.CurrentFolder = folderPath ;
+}
+
+function CreateFolder()
+{
+	var sFolderName ;
+
+	while ( true )
+	{
+		sFolderName = prompt( 'Type the name of the new folder:', '' ) ;
+
+		if ( sFolderName == null )
+			return ;
+		else if ( sFolderName.length == 0 )
+			alert( 'Please type the folder name' ) ;
+		else
+			break ;
+	}
+
+	oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + encodeURIComponent( sFolderName) , CreateFolderCallBack ) ;
+}
+
+function CreateFolderCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) == 0 )
+		window.parent.frames['frmResourcesList'].Refresh() ;
+
+	/*
+	// Get the current folder path.
+	var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ;
+	var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ;
+
+	switch ( iErrorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 101 :
+			alert( 'Folder already exists' ) ;
+			break ;
+		case 102 :
+			alert( 'Invalid folder name' ) ;
+			break ;
+		case 103 :
+			alert( 'You have no permissions to create the folder' ) ;
+			break ;
+		case 110 :
+			alert( 'Unknown error creating folder' ) ;
+			break ;
+		default :
+			alert( 'Error creating folder. Error number: ' + iErrorNumber ) ;
+			break ;
+	}
+	*/
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedCreateFolder = true ;
+}
+		</script>
+	</head>
+	<body>
+		<table class="fullHeight" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<button type="button" class="createFolder" onclick="CreateFolder();">
+						<img height="20" alt="" src="images/newFolder.gif" width="20">
+						<nobr>New Folder</nobr>
+					</button>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmfolders.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmfolders.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmfolders.html	(revision 2)
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML>
+<!--
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of folders available in the parent folder
+ * of the current folder.
+-->
+<html>
+    <head>
+        <title>Folders</title>
+        <link href="browser.css" type="text/css" rel="stylesheet">
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <script type="text/javascript" src="js/common.js"></script>
+        <script type="text/javascript">
+
+var sActiveFolder ;
+
+var bIsLoaded = false ;
+var iIntervalId ;
+
+var oListManager = new Object() ;
+
+oListManager.Init = function()
+{
+    this.Table = document.getElementById('tableFiles') ;
+    this.UpRow = document.getElementById('trUp') ;
+
+    this.TableRows = new Object() ;
+}
+
+oListManager.Clear = function()
+{
+    // Remove all other rows available.
+    while ( this.Table.rows.length > 1 )
+        this.Table.deleteRow(1) ;
+
+    // Reset the TableRows collection.
+    this.TableRows = new Object() ;
+}
+
+oListManager.AddItem = function( folderName, folderPath )
+{
+    // Create the new row.
+    var oRow = this.Table.insertRow(-1) ;
+    oRow.className = 'FolderListFolder' ;
+
+    // Build the link to view the folder.
+    var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ;
+
+    // Add the folder icon cell.
+    var oCell = oRow.insertCell(-1) ;
+    oCell.width = 20 ;
+    oCell.innerHTML = sLink + '<img alt="" src="images/spacer.gif" width="20" height="20" border="0"><\/a>' ;
+
+    // Add the folder name cell.
+    oCell = oRow.insertCell(-1) ;
+    oCell.noWrap = true ;
+    oCell.innerHTML = '&nbsp;' + sLink + folderName + '<\/a>' ;
+
+    this.TableRows[ folderPath ] = oRow ;
+}
+
+oListManager.ShowUpFolder = function( upFolderPath )
+{
+    this.UpRow.style.display = ( upFolderPath != null ? '' : 'none' ) ;
+
+    if ( upFolderPath != null )
+    {
+        document.getElementById('linkUpIcon').onclick = document.getElementById('linkUp').onclick = function()
+        {
+            LoadFolders( upFolderPath ) ;
+            return false ;
+        }
+    }
+}
+
+function CheckLoaded()
+{
+    if ( window.top.IsLoadedActualFolder
+        && window.top.IsLoadedCreateFolder
+        && window.top.IsLoadedUpload
+        && window.top.IsLoadedResourcesList )
+    {
+        window.clearInterval( iIntervalId ) ;
+        bIsLoaded = true ;
+        OpenFolder( sActiveFolder ) ;
+    }
+}
+
+function OpenFolder( folderPath )
+{
+    sActiveFolder = folderPath ;
+
+    if ( ! bIsLoaded )
+    {
+        if ( ! iIntervalId )
+            iIntervalId = window.setInterval( CheckLoaded, 100 ) ;
+        return ;
+    }
+
+    // Change the style for the select row (to show the opened folder).
+    for ( var sFolderPath in oListManager.TableRows )
+    {
+        oListManager.TableRows[ sFolderPath ].className =
+            ( sFolderPath == folderPath ? 'FolderListCurrentFolder' : 'FolderListFolder' ) ;
+    }
+
+    // Set the current folder in all frames.
+    window.parent.frames['frmActualFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+    window.parent.frames['frmCreateFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+    window.parent.frames['frmUpload'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+
+    // Load the resources list for this folder.
+    window.parent.frames['frmResourcesList'].LoadResources( oConnector.ResourceType, folderPath ) ;
+}
+
+function LoadFolders( folderPath )
+{
+    // Clear the folders list.
+    oListManager.Clear() ;
+
+    // Get the parent folder path.
+    var sParentFolderPath ;
+    if ( folderPath != '/' )
+        sParentFolderPath = folderPath.substring( 0, folderPath.lastIndexOf( '/', folderPath.length - 2 ) + 1 ) ;
+
+    // Show/Hide the Up Folder.
+    oListManager.ShowUpFolder( sParentFolderPath ) ;
+
+    if ( folderPath != '/' )
+    {
+        sActiveFolder = folderPath ;
+        oConnector.CurrentFolder = sParentFolderPath ;
+        oConnector.SendCommand( 'GetFolders', null, GetFoldersCallBack ) ;
+    }
+    else
+        OpenFolder( '/' ) ;
+}
+
+function GetFoldersCallBack( fckXml )
+{
+    if ( oConnector.CheckError( fckXml ) != 0 )
+        return ;
+
+    // Get the current folder path.
+    var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+    var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ;
+
+    var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+
+    for ( var i = 0 ; i < oNodes.length ; i++ )
+    {
+        var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+        oListManager.AddItem( sFolderName, sCurrentFolderPath + sFolderName + '/' ) ;
+    }
+
+    OpenFolder( sActiveFolder ) ;
+}
+
+function SetResourceType( type )
+{
+    oConnector.ResourceType = type ;
+    LoadFolders( '/' ) ;
+}
+
+window.onload = function()
+{
+    oListManager.Init() ;
+    LoadFolders( '/' ) ;
+}
+        </script>
+    </head>
+    <body class="FileArea">
+        <table id="tableFiles" >
+            <tr id="trUp" style="DISPLAY: none">
+                <td><a id="linkUpIcon" href="#">
+                <img alt="" src="images/FolderUp.gif" width="20" height="20"></a>
+                </td>
+                <td  style="width: 100%;">&nbsp;
+                <a id="linkUp" href="#">..</a></td>
+            </tr>
+        </table>
+    </body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourceslist.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourceslist.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourceslist.html	(revision 2)
@@ -0,0 +1,195 @@
+<!DOCTYPE HTML>
+<!--
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows all resources available in a folder in the File Browser.
+-->
+<html>
+<head>
+    <title>Resources</title>
+    <link href="browser.css" type="text/css" rel="stylesheet">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <script type="text/javascript" src="js/common.js"></script>
+
+<script type="text/javascript">
+
+var oListManager = new Object() ;
+
+oListManager.Clear = function()
+{
+    document.body.innerHTML = '' ;
+}
+
+function ProtectPath(path)
+{
+    path = path.replace( /\\/g, '\\\\') ;
+    path = path.replace( /'/g, '\\\'') ;
+    return path ;
+}
+
+oListManager.GetFolderRowHtml = function( folderName, folderPath )
+{
+    // Build the link to view the folder.
+    var sLink = '<a href="#" onclick="OpenFolder(\'' + ProtectPath( folderPath ) + '\');return false;">' ;
+
+    return  '<div class="file" title="'+ folderName +'">' +
+            '<div>' + sLink +
+            '<img class="icon" alt="" src="images/folder_big.gif" border="0" width="48" height="48" ><\/a>' +
+            '<\/div>' +
+            '<br /><div class="filename">'+ sLink + folderName +'<\/a>' + '<\/div>' +
+            '<\/div>';
+}
+
+oListManager.GetFileRowHtml = function( fileName, fileUrl, fileSize ){
+
+    // Build the link to view the folder.
+    var sLink = '<a href="#" onclick="OpenFile(\'' + ProtectPath( fileUrl ) + '\');return false;">' ;
+    var relLink = '<a href="'+ fileUrl +'" rel="lightbox">' ;
+
+    // Get the file icon.
+    var sIcon = oIcons.GetIcon( fileName ) ;
+
+    /**
+     *    Get file extension and decide if thumb or icon should be displayed
+     */
+
+        if( sIcon == 'gif' || sIcon == 'jpg' || sIcon == 'jpeg' || sIcon == 'png' ){
+            var imgTag = '<img class="thumb" alt="" src="' + fileUrl + '" />' ;
+        }
+        else {
+            var imgTag = '<img class="icon" alt="" src="images/icons/' + sIcon + '.gif" />';
+        }
+
+            return '<div class="file" title="'+ fileName +'">' +
+            '<span class="fSize">' +
+            '<nobr><img alt="' + sIcon + '" title="' + sIcon + '" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"> '
+            + fileSize +
+            ' kB</nobr><\/span>' +
+            '<div class="thumbnail">' + sLink + imgTag +'<\/a>' +
+            '<\/div>' +
+            '<br /><div class="filename"><nobr>' + sLink + fileName +    '<\/a>' + '</nobr><\/div>' +
+            '<\/div>' ;
+}
+
+function OpenFolder( folderPath )
+{
+    // Load the resources list for this folder.
+    window.parent.frames['frmFolders'].LoadFolders( folderPath ) ;
+}
+
+function OpenFile( fileUrl )
+{
+    //PATCH: Using CKEditors API we set the file in preview window.
+
+    funcNum = GetUrlParam('CKEditorFuncNum') ;
+    window.top.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl.replace( '#', '%23' ));
+    window.top.close() ;
+//    window.top.opener.focus() ;
+}
+
+function LoadResources( resourceType, folderPath )
+{
+    oListManager.Clear() ;
+    oConnector.ResourceType = resourceType ;
+    oConnector.CurrentFolder = folderPath ;
+    oConnector.SendCommand( 'GetFoldersAndFiles', null, GetFoldersAndFilesCallBack ) ;
+}
+
+function Refresh()
+{
+    LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
+}
+
+function GetFoldersAndFilesCallBack( fckXml )
+{
+    if ( oConnector.CheckError( fckXml ) != 0 ){return ;}
+    // Get the current folder path.
+    var oFolderNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+    if ( oFolderNode == null )
+    {
+        alert( 'The server didn\'t reply with a proper XML data. Please check your configuration.' ) ;
+        return ;
+    }
+    var sCurrentFolderPath    = oFolderNode.attributes.getNamedItem('path').value ;
+    var sCurrentFolderUrl    = oFolderNode.attributes.getNamedItem('url').value ;
+//    var dTimer = new Date() ;
+    var oHtml = new StringBuilder( '<div id="tableFiles"><div>' ) ;
+
+    // Add the Folders.
+    var oNodes ;
+    oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+    for ( var i = 0 ; i < oNodes.length ; i++ )
+    {
+        var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+        oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ) ;
+    }
+
+    // Add the Files.
+    oNodes = fckXml.SelectNodes( 'Connector/Files/File' ) ;
+    for ( var j = 0 ; j < oNodes.length ; j++ )
+    {
+        var oNode = oNodes[j] ;
+        var sFileName = oNode.attributes.getNamedItem('name').value ;
+        var sFileSize = oNode.attributes.getNamedItem('size').value ;
+
+        // Get the optional "url" attribute. If not available, build the url.
+        var oFileUrlAtt = oNodes[j].attributes.getNamedItem('url') ;
+        var sFileUrl = oFileUrlAtt != null ? oFileUrlAtt.value : encodeURI( sCurrentFolderUrl + sFileName ).replace( /#/g, '%23' ) ;
+
+        // hide index.php in browse media - added for WebsiteBaker
+        if (sFileName != "index.php")
+        {
+            oHtml.Append( oListManager.GetFileRowHtml( sFileName, sFileUrl, sFileSize ) ) ;
+        }
+    }
+
+    oHtml.Append( '<\/div><\/div>' ) ;
+    document.body.innerHTML = oHtml.ToString() ;
+    window.top.document.title = 'Finished processing in ' + ( ( ( new Date() ) - dTimer ) / 1000 ) + ' seconds' ;
+
+}
+
+// Helper function to get parameters from the query string.
+function _GetUrlParam( paramName ) {
+    var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' );
+    var match = window.location.search.match( reParam );
+    return ( match && match.length > 1 ) ? match[1] : null;
+}
+
+function GetUrlParam( paramName )
+{
+    var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
+    var oMatch = oRegex.exec( window.top.location.search ) ;
+
+    if ( oMatch && oMatch.length > 1 )
+        return decodeURIComponent( oMatch[1] ) ;
+    else
+        return '' ;
+}
+
+window.onload = function()
+{
+    window.top.IsLoadedResourcesList = true ;
+}
+</script>
+</head>
+<body class="FileArea">
+</body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourcetype.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourcetype.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmresourcetype.html	(revision 2)
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of available resource types.
+-->
+<html>
+    <head>
+        <title>Available types</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link href="browser.css" type="text/css" rel="stylesheet">
+        <script type="text/javascript" src="js/common.js"></script>
+        <script type="text/javascript">
+
+function SetResourceType( type )
+{
+    window.parent.frames["frmFolders"].SetResourceType( type ) ;
+}
+
+var aTypes = [
+    ['File','File'],
+    ['Image','Image'],
+    ['Flash','Flash'],
+    ['Media','Media']
+] ;
+
+window.onload = function()
+{
+    /* HIDE RESOURCE TYPES - NOT USED WITHIN WEBSITEBAKER
+    var oCombo = document.getElementById('cmbType') ;
+    oCombo.innerHTML = '' ;
+    for ( var i = 0 ; i < aTypes.length ; i++ )
+    {
+        if ( oConnector.ShowAllTypes || aTypes[i][0] == oConnector.ResourceType )
+            AddSelectOption( oCombo, aTypes[i][1], aTypes[i][0] ) ;
+    }
+    */
+}
+
+        </script>
+    </head>
+    <body>
+        <!-- HIDE RESOURCE TYPES - NOT USED IN WEBSITEBAKER     
+        <table class="fullHeight" cellSpacing="0" cellPadding="0" width="100%" border="0">
+            <tr>
+                <td nowrap>
+                    Resource Type<BR>
+                    <select id="cmbType" style="WIDTH: 100%" onchange="SetResourceType(this.value);">
+                        <option>&nbsp;
+                    </select>
+                </td>
+            </tr>
+        </table>
+        -->
+    </body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html	(revision 2)
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to upload new files in the current folder.
+-->
+<html>
+    <head>
+        <title>File Upload</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <link href="browser.css" type="text/css" rel="stylesheet" >
+        <script type="text/javascript" src="js/common.js"></script>
+        <script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+    var sUrl = oConnector.ConnectorUrl + 'Command=FileUpload' ;
+    sUrl += '&Type=' + resourceType ;
+    sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
+
+    document.getElementById('frmUpload').action = sUrl ;
+}
+
+function OnSubmit()
+{
+    if ( document.getElementById('NewFile').value.length == 0 )
+    {
+        alert( 'Please select a file from your computer' ) ;
+        return false ;
+    }
+
+    // Set the interface elements.
+    // document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ;
+    document.getElementById('btnUpload').disabled = true ;
+
+    return true ;
+}
+
+function OnUploadCompleted( errorNumber, data )
+{
+    // Reset the Upload Worker Frame.
+    window.parent.frames['frmUploadWorker'].location = 'javascript:void(0)' ;
+
+    // Reset the upload form (On IE we must do a little trick to avoid problems).
+    if ( document.all )
+        document.getElementById('NewFile').outerHTML = '<input id="NewFile" name="NewFile" style="width: 100%" type="file">' ;
+    else
+        document.getElementById('frmUpload').reset() ;
+
+    // Reset the interface elements.
+    // document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ;
+    document.getElementById('btnUpload').disabled = false ;
+
+    switch ( errorNumber )
+    {
+        case 0 :
+            window.parent.frames['frmResourcesList'].Refresh() ;
+            break ;
+        case 1 :    // Custom error.
+            alert( data ) ;
+            break ;
+        case 201 :
+            window.parent.frames['frmResourcesList'].Refresh() ;
+            alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ) ;
+            break ;
+        case 202 :
+            alert( 'Invalid file' ) ;
+            break ;
+        default :
+            alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+            break ;
+    }
+}
+
+window.onload = function()
+{
+    window.top.IsLoadedUpload = true ;
+}
+        </script>
+    </head>
+    <body>
+        <form id="frmUpload" action="" target="frmUploadWorker" method="post" >
+            <table class="fullHeight" >
+            <tr>
+            <td >&nbsp;</td>
+            </tr>
+            </table>
+        </form>
+    </body>
+
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html.org
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html.org	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/frmupload.html.org	(revision 2)
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to upload new files in the current folder.
+-->
+<html>
+	<head>
+		<title>File Upload</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet" >
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	var sUrl = oConnector.ConnectorUrl + 'Command=FileUpload' ;
+	sUrl += '&Type=' + resourceType ;
+	sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
+
+	document.getElementById('frmUpload').action = sUrl ;
+}
+
+function OnSubmit()
+{
+	if ( document.getElementById('NewFile').value.length == 0 )
+	{
+		alert( 'Please select a file from your computer' ) ;
+		return false ;
+	}
+
+	// Set the interface elements.
+	// document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ;
+	document.getElementById('btnUpload').disabled = true ;
+
+	return true ;
+}
+
+function OnUploadCompleted( errorNumber, data )
+{
+	// Reset the Upload Worker Frame.
+	window.parent.frames['frmUploadWorker'].location = 'javascript:void(0)' ;
+
+	// Reset the upload form (On IE we must do a little trick to avoid problems).
+	if ( document.all )
+		document.getElementById('NewFile').outerHTML = '<input id="NewFile" name="NewFile" style="width: 100%" type="file">' ;
+	else
+		document.getElementById('frmUpload').reset() ;
+
+	// Reset the interface elements.
+	// document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ;
+	document.getElementById('btnUpload').disabled = false ;
+
+	switch ( errorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 1 :	// Custom error.
+			alert( data ) ;
+			break ;
+		case 201 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			break ;
+	}
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedUpload = true ;
+}
+		</script>
+	</head>
+	<body>
+		<form id="frmUpload" action="" target="frmUploadWorker" method="post" enctype="multipart/form-data" onsubmit="return OnSubmit();">
+			<table class="fullHeight" cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+				<fieldset class="fUpload">						
+						<table cellspacing="0" cellpadding="0" width="100%" border="0">
+							<tr>
+								<td width="60"><img alt="Upload a new file in this folder" src="images/newFile.gif" /></td>
+								<td width="260"><input id="NewFile" name="NewFile" style="width: 100%" type="file"></td>
+								<td>&nbsp;<input id="btnUpload" type="submit" value="Upload"></td>
+								<td><div id="eUploadMessage"></div></td>
+							</tr>
+						</table>
+				</fieldset>	
+				</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/Folder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/Folder.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderOpened.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderOpened.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderOpened_big.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderOpened_big.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderUp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/FolderUp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/folder_big.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/folder_big.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/ai.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/ai.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/avi.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/avi.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/bmp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/bmp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/cs.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/cs.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/default.icon.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/default.icon.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/dll.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/dll.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/doc.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/doc.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/exe.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/exe.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/fla.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/fla.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/gif.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/gif.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/htm.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/htm.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/html.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/html.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/jpg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/jpg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/js.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/js.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/mdb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/mdb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/mp3.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/mp3.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/pages.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/pages.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/pdf.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/pdf.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/png.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/png.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/ppt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/ppt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/rdp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/rdp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/swf.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/swf.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/swt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/swt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxc.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxc.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxi.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxi.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxw.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/sxw.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/txt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/txt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/vsd.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/vsd.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/xls.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/xls.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/xml.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/xml.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/zip.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/icons/zip.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/newFile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/newFile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/newFolder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/newFolder.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/spacer.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/images/spacer.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/common.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/common.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/common.js	(revision 2)
@@ -0,0 +1,88 @@
+﻿/*
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Common objects and functions shared by all pages that compose the
+ * File Browser dialog window.
+ */
+
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+    var d = document.domain ;
+
+    while ( true )
+    {
+        // Test if we can access a parent property.
+        try
+        {
+            var test = window.top.opener.document.domain ;
+            break ;
+        }
+        catch( e )
+        {}
+
+        // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+        d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+        if ( d.length == 0 )
+            break ;        // It was not able to detect the domain.
+
+        try
+        {
+            document.domain = d ;
+        }
+        catch (e)
+        {
+            break ;
+        }
+    }
+})() ;
+
+function AddSelectOption( selectElement, optionText, optionValue )
+{
+    var oOption = document.createElement("OPTION") ;
+
+    oOption.text    = optionText ;
+    oOption.value    = optionValue ;
+
+    selectElement.options.add(oOption) ;
+
+    return oOption ;
+}
+
+var oConnector    = window.parent.oConnector ;
+var oIcons        = window.parent.oIcons ;
+
+
+function StringBuilder( value )
+{
+    this._Strings = new Array( value || '' ) ;
+}
+
+StringBuilder.prototype.Append = function( value )
+{
+    if ( value )
+        this._Strings.push( value ) ;
+}
+
+StringBuilder.prototype.ToString = function()
+{
+    return this._Strings.join( '' ) ;
+}
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/fckxml.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/fckxml.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/fckxml.js	(revision 2)
@@ -0,0 +1,152 @@
+﻿/*
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXml object that is used for XML data calls
+ * and XML processing.
+ *
+ * This script is shared by almost all pages that compose the
+ * File Browser frameset.
+ */
+
+var FCKXml = function()
+{}
+
+FCKXml.prototype.GetHttpRequest = function()
+{
+    // Gecko / IE7
+    try { return new XMLHttpRequest(); }
+    catch(e) {}
+
+    // IE6
+    try { return new ActiveXObject( 'Msxml2.XMLHTTP' ) ; }
+    catch(e) {}
+
+    // IE5
+    try { return new ActiveXObject( 'Microsoft.XMLHTTP' ) ; }
+    catch(e) {}
+
+    return null ;
+}
+
+FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
+{
+    var oFCKXml = this ;
+
+    var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ;
+
+    var oXmlHttp = this.GetHttpRequest() ;
+
+    oXmlHttp.open( "GET", urlToCall, bAsync ) ;
+    
+     try {
+         oXmlHttp.responseType='msxml-document';
+     }
+     catch (e) {}
+
+    if ( bAsync )
+    {
+        oXmlHttp.onreadystatechange = function()
+        {
+            if ( oXmlHttp.readyState == 4 )
+            {
+                var oXml ;
+                try
+                {
+                    // this is the same test for an FF2 bug as in fckxml_gecko.js
+                    // but we've moved the responseXML assignment into the try{}
+                    // so we don't even have to check the return status codes.
+                    var test = oXmlHttp.responseXML.firstChild ;
+                    oXml = oXmlHttp.responseXML ;
+                }
+                catch ( e )
+                {
+                    try
+                    {
+                        oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+                    }
+                    catch ( e ) {}
+                }
+
+                if ( !oXml || !oXml.firstChild || oXml.firstChild.nodeName == 'parsererror' )
+                {
+                    alert( 'The server didn\'t send back a proper XML response. Please contact your system administrator.\n\n' +
+                            'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')\n\n' +
+                            'Requested URL:\n' + urlToCall + '\n\n' +
+                            'Response text:\n' + oXmlHttp.responseText ) ;
+                    return ;
+                }
+
+                oFCKXml.DOMDocument = oXml ;
+                asyncFunctionPointer( oFCKXml ) ;
+            }
+        }
+    }
+
+    oXmlHttp.send( null ) ;
+
+    if ( ! bAsync )
+    {
+        if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+            this.DOMDocument = oXmlHttp.responseXML ;
+        else
+        {
+            alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
+        }
+    }
+}
+
+FCKXml.prototype.SelectNodes = function( xpath )
+{
+    if ( navigator.userAgent.indexOf('MSIE') >= 0 || !!navigator.userAgent.match(/Trident.*rv.*11\./))        // IE
+        return this.DOMDocument.selectNodes( xpath ) ;
+    else                    // Gecko
+    {
+        var aNodeArray = new Array();
+
+        var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+                this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+        if ( xPathResult )
+        {
+            var oNode = xPathResult.iterateNext() ;
+             while( oNode )
+             {
+                 aNodeArray[aNodeArray.length] = oNode ;
+                 oNode = xPathResult.iterateNext();
+             }
+        }
+        return aNodeArray ;
+    }
+}
+
+FCKXml.prototype.SelectSingleNode = function( xpath )
+{
+    if ( navigator.userAgent.indexOf('MSIE') >= 0 || !!navigator.userAgent.match(/Trident.*rv.*11\./))        // IE
+        return this.DOMDocument.selectSingleNode( xpath ) ;
+    else                    // Gecko
+    {
+        var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+                this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+        if ( xPathResult && xPathResult.singleNodeValue )
+            return xPathResult.singleNodeValue ;
+        else
+            return null ;
+    }
+}
Index: trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/imgpreview.min.0.22.jquery.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/imgpreview.min.0.22.jquery.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/browser/default/js/imgpreview.min.0.22.jquery.js	(revision 2)
@@ -0,0 +1,10 @@
+/*
+ * imgPreview jQuery plugin
+ * Copyright (c) 2009 James Padolsey
+ * j@qd9.co.uk | http://james.padolsey.com
+ * Dual licensed under MIT and GPL.
+ * Updated: 09/02/09
+ * @author James Padolsey
+ * @version 0.22
+ */
+(function(c){c.expr[':'].linkingToImage=function(a,g,e){return!!(c(a).attr(e[3])&&c(a).attr(e[3]).match(/\.(gif|jpe?g|png|bmp)$/i))};c.fn.imgPreview=function(j){var b=c.extend({imgCSS:{},distanceFromCursor:{top:10,left:10},preloadImages:true,onShow:function(){},onHide:function(){},onLoad:function(){},containerID:'imgPreviewContainer',containerLoadingClass:'loading',thumbPrefix:'',srcAttr:'href'},j),d=c('<div/>').attr('id',b.containerID).append('<img/>').hide().css('position','absolute').appendTo('body'),f=c('img',d).css(b.imgCSS),h=this.filter(':linkingToImage('+b.srcAttr+')');function i(a){return a.replace(/(\/?)([^\/]+)$/,'$1'+b.thumbPrefix+'$2')}if(b.preloadImages){(function(a){var g=new Image(),e=arguments.callee;g.src=i(c(h[a]).attr(b.srcAttr));g.onload=function(){h[a+1]&&e(a+1)}})(0)}h.mousemove(function(a){d.css({top:a.pageY+b.distanceFromCursor.top+'px',left:a.pageX+b.distanceFromCursor.left+'px'})}).hover(function(){var a=this;d.addClass(b.containerLoadingClass).show();f.load(function(){d.removeClass(b.containerLoadingClass);f.show();b.onLoad.call(f[0],a)}).attr('src',i(c(a).attr(b.srcAttr)));b.onShow.call(d[0],a)},function(){d.hide();f.unbind('load').attr('src','').hide();b.onHide.call(d[0],this)});return this}})(jQuery);
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/basexml.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/basexml.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/basexml.php	(revision 2)
@@ -0,0 +1,99 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * These functions define the base of the XML response sent by the PHP
+ * connector.
+ */
+
+function SetXmlHeaders()
+{
+    ob_end_clean() ;
+
+    // Prevent the browser from caching the result.
+    // Date in the past
+    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ;
+    // always modified
+    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ;
+    // HTTP/1.1
+    header('Cache-Control: no-store, no-cache, must-revalidate') ;
+    header('Cache-Control: post-check=0, pre-check=0', false) ;
+    // HTTP/1.0
+    header('Pragma: no-cache') ;
+
+    // Set the response format.
+    header( 'Content-Type: text/xml; charset=utf-8' ) ;
+}
+
+function CreateXmlHeader( $command, $resourceType, $currentFolder )
+{
+    SetXmlHeaders() ;
+
+    // Create the XML document header.
+    echo '<?xml version="1.0" encoding="utf-8" ?>' ;
+
+    // Create the main "Connector" node.
+    echo '<Connector command="' . $command . '" resourceType="' . $resourceType . '">' ;
+
+    // Add the current folder node.
+    echo '<CurrentFolder path="' . ConvertToXmlAttribute( $currentFolder ) . '" url="' . ConvertToXmlAttribute( GetUrlFromPath( $resourceType, $currentFolder, $command ) ) . '" />' ;
+
+    $GLOBALS['HeaderSent'] = true ;
+}
+
+function CreateXmlFooter()
+{
+    echo '</Connector>' ;
+}
+
+function SendError( $number, $text )
+{
+    if ( $_GET['Command'] == 'FileUpload' )
+        SendUploadResults( $number, "", "", $text ) ;
+
+    if ( isset( $GLOBALS['HeaderSent'] ) && $GLOBALS['HeaderSent'] )
+    {
+        SendErrorNode( $number, $text ) ;
+        CreateXmlFooter() ;
+    }
+    else
+    {
+        SetXmlHeaders() ;
+
+        // Create the XML document header
+        echo '<?xml version="1.0" encoding="utf-8" ?>' ;
+
+        echo '<Connector>' ;
+
+        SendErrorNode( $number, $text ) ;
+
+        echo '</Connector>' ;
+    }
+    exit ;
+}
+
+function SendErrorNode(  $number, $text )
+{
+    if ($text)
+        echo '<Error number="' . $number . '" text="' . htmlspecialchars( $text ) . '" />' ;
+    else
+        echo '<Error number="' . $number . '" />' ;
+}
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/basexml.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/commands.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/commands.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/commands.php	(revision 2)
@@ -0,0 +1,290 @@
+<?php
+/*
+ * CKeditor - The text editor for Internet - http://www.ckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * http://www.mixedwaves.com/2010/02/integrating-fckeditor-filemanager-in-ckeditor/
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+
+function GetFolders( $resourceType, $currentFolder )
+{
+    // Map the virtual path to the local server path.
+    $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFolders' ) ;
+
+    // Array that will hold the folders names.
+    $aFolders    = array() ;
+
+    $oCurrentFolder = @opendir( $sServerDir ) ;
+
+    if ($oCurrentFolder !== false)
+    {
+        while ( $sFile = readdir( $oCurrentFolder ) )
+        {
+            if ( $sFile != '.' && $sFile != '..' && is_dir( $sServerDir . $sFile ) )
+                $aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
+        }
+        closedir( $oCurrentFolder ) ;
+    }
+
+    // Open the "Folders" node.
+    echo "<Folders>" ;
+
+    natcasesort( $aFolders ) ;
+    foreach ( $aFolders as $sFolder )
+        echo $sFolder ;
+
+    // Close the "Folders" node.
+    echo "</Folders>" ;
+}
+
+function GetFoldersAndFiles( $resourceType, $currentFolder )
+{
+    // Map the virtual path to the local server path.
+    $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFoldersAndFiles' ) ;
+
+    // Arrays that will hold the folders and files names.
+    $aFolders    = array() ;
+    $aFiles        = array() ;
+
+    $oCurrentFolder = @opendir( $sServerDir ) ;
+
+    if ($oCurrentFolder !== false)
+    {
+        while ( $sFile = readdir( $oCurrentFolder ) )
+        {
+            if ( $sFile != '.' && $sFile != '..' )
+            {
+                if ( is_dir( $sServerDir . $sFile ) )
+                    $aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
+                else
+                {
+                    $iFileSize = @filesize( $sServerDir . $sFile ) ;
+                    if ( !$iFileSize ) {
+                        $iFileSize = 0 ;
+                    }
+                    if ( $iFileSize > 0 )
+                    {
+                        $iFileSize = round( $iFileSize / 1024 ) ;
+                        if ( $iFileSize < 1 )
+                            $iFileSize = 1 ;
+                    }
+
+                    $aFiles[] = '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ;
+                }
+            }
+        }
+        closedir( $oCurrentFolder ) ;
+    }
+
+    // Send the folders
+    natcasesort( $aFolders ) ;
+    echo '<Folders>' ;
+
+    foreach ( $aFolders as $sFolder )
+        echo $sFolder ;
+
+    echo '</Folders>' ;
+
+    // Send the files
+    natcasesort( $aFiles ) ;
+    echo '<Files>' ;
+
+    foreach ( $aFiles as $sFiles )
+        echo $sFiles ;
+
+    echo '</Files>' ;
+}
+
+function CreateFolder( $resourceType, $currentFolder )
+{
+    if (!isset($_GET)) {
+        global $_GET;
+    }
+    $sErrorNumber    = '0' ;
+    $sErrorMsg        = '' ;
+
+    if ( isset( $_GET['NewFolderName'] ) )
+    {
+        $sNewFolderName = $_GET['NewFolderName'] ;
+        $sNewFolderName = SanitizeFolderName( $sNewFolderName ) ;
+
+        if ( strpos( $sNewFolderName, '..' ) !== FALSE )
+            $sErrorNumber = '102' ;        // Invalid folder name.
+        else
+        {
+            // Map the virtual path to the local server path of the current folder.
+            $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ;
+
+            if ( is_writable( $sServerDir ) )
+            {
+                $sServerDir .= $sNewFolderName ;
+
+                $sErrorMsg = CreateServerFolder( $sServerDir ) ;
+
+                switch ( $sErrorMsg )
+                {
+                    case '' :
+                        $sErrorNumber = '0' ;
+                        break ;
+                    case 'Invalid argument' :
+                    case 'No such file or directory' :
+                        $sErrorNumber = '102' ;        // Path too long.
+                        break ;
+                    default :
+                        $sErrorNumber = '110' ;
+                        break ;
+                }
+            }
+            else
+                $sErrorNumber = '103' ;
+        }
+    }
+    else
+        $sErrorNumber = '102' ;
+
+    // Create the "Error" node.
+    echo '<Error number="' . $sErrorNumber . '" />' ;
+}
+
+// Notice the last paramter added to pass the CKEditor callback function
+function FileUpload( $resourceType, $currentFolder, $sCommand, $CKEcallback = '' )
+{
+    if (!isset($_FILES)) {
+        global $_FILES;
+    }
+    $sErrorNumber = '0' ;
+    $sFileName = '' ;
+ 
+        //PATCH to detect a quick file upload.
+    if (( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) || (isset( $_FILES['upload'] ) && !is_null( $_FILES['upload']['tmp_name'] ) ))
+    {
+        global $Config ;
+ 
+                 //PATCH to detect a quick file upload.
+        $oFile = isset($_FILES['NewFile']) ? $_FILES['NewFile'] : $_FILES['upload'];
+ 
+        // Map the virtual path to the local server path.
+        $sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;
+ 
+        // Get the uploaded file name.
+        $sFileName = $oFile['name'] ;
+        $sFileName = SanitizeFileName( $sFileName ) ;
+ 
+        $sOriginalFileName = $sFileName ;
+ 
+        // Get the extension.
+        $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
+        $sExtension = strtolower( $sExtension ) ;
+ 
+        if ( isset( $Config['SecureImageUploads'] ) )
+        {
+            if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )
+            {
+                $sErrorNumber = '202' ;
+            }
+        }
+ 
+        if ( isset( $Config['HtmlExtensions'] ) )
+        {
+            if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) &&
+                ( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )
+            {
+                $sErrorNumber = '202' ;
+            }
+        }
+ 
+        // Check if it is an allowed extension.
+        if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) )
+        {
+            $iCounter = 0 ;
+ 
+            while ( true )
+            {
+                $sFilePath = $sServerDir . $sFileName ;
+ 
+                if ( is_file( $sFilePath ) )
+                {
+                    $iCounter++ ;
+                    $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
+                    $sErrorNumber = '201' ;
+                }
+                else
+                {
+                    move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
+ 
+                    if ( is_file( $sFilePath ) )
+                    {
+                        if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )
+                        {
+                            break ;
+                        }
+ 
+                        $permissions = 0777;
+ 
+                        if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )
+                        {
+                            $permissions = $Config['ChmodOnUpload'] ;
+                        }
+ 
+                        $oldumask = umask(0) ;
+                        chmod( $sFilePath, $permissions ) ;
+                        umask( $oldumask ) ;
+                    }
+ 
+                    break ;
+                }
+            }
+ 
+            if ( file_exists( $sFilePath ) )
+            {
+                //previous checks failed, try once again
+                if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false )
+                {
+                    @unlink( $sFilePath ) ;
+                    $sErrorNumber = '202' ;
+                }
+                else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )
+                {
+                    @unlink( $sFilePath ) ;
+                    $sErrorNumber = '202' ;
+                }
+            }
+        }
+        else
+            $sErrorNumber = '202' ;
+    }
+    else
+        $sErrorNumber = '202' ;
+ 
+    $sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ;
+    $sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ;
+ 
+    if($CKEcallback == '')
+    {
+        SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
+    }
+    else
+    {
+        //issue the CKEditor Callback
+        SendCKEditorResults ($sErrorNumber, $CKEcallback, $sFileUrl, $sFileName);
+    }
+    exit ;
+}

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/commands.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/config.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/config.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/config.php	(revision 2)
@@ -0,0 +1,216 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Manager Connector for PHP.
+ */
+
+global $Config ;
+
+// SECURITY: You must explicitly enable this "connector". (Set it to "true").
+// WARNING: don't just set "$Config['Enabled'] = true ;", you must be sure that only
+//        authenticated users can access this file or use some kind of session checking.
+$Config['Enabled'] = false ;
+
+/**
+*    SECURITY PATCH FOR WEBSITEBAKER (doc)
+*    only enable PHP connector if user is authenticated to WB
+*    and has at least permissions to view the WB MEDIA folder
+*/
+// include WB config.php file and admin class
+if(!defined('WB_PATH'))
+{
+    $configFile = ( (dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))))).'/config.php' );
+    if(is_readable($configFile) )
+    {
+      require($configFile);
+    } else {
+      die('tried to read a nonexisting configFile ['.basename($configFile).']!! ');
+    }
+}
+//$oReg = WbAdaptor::getInstance();
+
+if(!class_exists('admin', false)){ include(WB_PATH.'/framework/class.admin.php'); }
+
+$wb_path = str_replace('\\','/', WB_PATH);
+$wb_path = str_replace('//','/', WB_PATH);
+
+// check if user is authenticated if WB and has permission to view MEDIA folder
+$admin = new admin('Media', 'media_view', false, false);
+if(($admin->get_permission('media_view') === true))
+{
+    // user allowed to view MEDIA folder -> enable PHP connector
+    $Config['Enabled'] = true ;
+    // allow actions to list folders and files
+    $Config['ConfigAllowedCommands'] = array('GetFolders', 'GetFoldersAndFiles') ;
+}
+
+// Path to user files relative to the document root.
+// $Config['UserFilesPath'] = '/userfiles/' ;
+$Config['UserFilesPath'] = WB_URL.MEDIA_DIRECTORY.'/' ;
+// use home folder of current user as document root if available
+if(isset($_SESSION['HOME_FOLDER']) && file_exists($wb_path .MEDIA_DIRECTORY .$_SESSION['HOME_FOLDER'])){
+   $Config['UserFilesPath'] = $Config['UserFilesPath'].$_SESSION['HOME_FOLDER'];
+}
+
+// Fill the following value it you prefer to specify the absolute path for the
+// user files directory. Useful if you are using a virtual directory, symbolic
+// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+// Attention: The above 'UserFilesPath' must point to the same directory.
+// $Config['UserFilesAbsolutePath'] = '' ;
+
+$Config['UserFilesAbsolutePath'] = $wb_path .MEDIA_DIRECTORY.'/' ;
+// use home folder of current user as document root if available
+if(isset($_SESSION['HOME_FOLDER']) && file_exists($wb_path .MEDIA_DIRECTORY .$_SESSION['HOME_FOLDER'])){
+   $Config['UserFilesAbsolutePath'] = $Config['UserFilesAbsolutePath'].$_SESSION['HOME_FOLDER'].'/';
+}
+// Due to security issues with Apache modules, it is recommended to leave the
+// following setting enabled.
+$Config['ForceSingleExtension'] = true ;
+
+// Perform additional checks for image files.
+// If set to true, validate image size (using getimagesize).
+$Config['SecureImageUploads'] = true;
+
+// What the user can do with this connector.
+// $Config['ConfigAllowedCommands'] = array('QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder') ;
+
+/**
+   Check WB permissions of the user/group for the MEDIA folder and
+    enable only those FCKEditor commands the user has permissions for
+*/
+// check if user is allowed to upload files to the media directory
+if(($admin->get_permission('media_upload') === true)) {
+    // add actions to upload files to the MEDIA folder
+    array_push($Config['ConfigAllowedCommands'], 'FileUpload', 'QuickUpload');
+}
+
+// check if user is allowed to create new folders in the media directory
+if(($admin->get_permission('media_create') === true)) {
+    // add action to create new folders in the MEDIA folder
+    array_push($Config['ConfigAllowedCommands'], 'CreateFolder');
+}
+
+// Allowed Resource Types.
+$Config['ConfigAllowedTypes'] = array('File', 'Image', 'Flash', 'Media') ;
+
+// For security, HTML is allowed in the first Kb of data for files having the
+// following extensions only.
+$Config['HtmlExtensions'] = array("html", "htm", "xml", "xsd", "txt", "js") ;
+
+// After file is uploaded, sometimes it is required to change its permissions
+// so that it was possible to access it at the later time.
+// If possible, it is recommended to set more restrictive permissions, like 0755.
+// Set to 0 to disable this feature.
+// Note: not needed on Windows-based servers.
+$Config['ChmodOnUpload'] = defined('OCTAL_FILE_MODE') ? OCTAL_FILE_MODE : 0777 ;
+
+// See comments above.
+// Used when creating folders that does not exist.
+$Config['ChmodOnFolderCreate'] = defined('OCTAL_DIR_MODE') ? OCTAL_DIR_MODE : 0777 ;
+
+/*
+    Configuration settings for each Resource Type
+
+    - AllowedExtensions: the possible extensions that can be allowed.
+        If it is empty then any file type can be uploaded.
+    - DeniedExtensions: The extensions that won't be allowed.
+        If it is empty then no restrictions are done here.
+
+    For a file to be uploaded it has to fulfill both the AllowedExtensions
+    and DeniedExtensions (that's it: not being denied) conditions.
+
+    - FileTypesPath: the virtual folder relative to the document root where
+        these resources will be located.
+        Attention: It must start and end with a slash: '/'
+
+    - FileTypesAbsolutePath: the physical path to the above folder. It must be
+        an absolute path.
+        If it's an empty string then it will be autocalculated.
+        Useful if you are using a virtual directory, symbolic link or alias.
+        Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+        Attention: The above 'FileTypesPath' must point to the same directory.
+        Attention: It must end with a slash: '/'
+
+     - QuickUploadPath: the virtual folder relative to the document root where
+        these resources will be uploaded using the Upload tab in the resources
+        dialogs.
+        Attention: It must start and end with a slash: '/'
+
+     - QuickUploadAbsolutePath: the physical path to the above folder. It must be
+        an absolute path.
+        If it's an empty string then it will be autocalculated.
+        Useful if you are using a virtual directory, symbolic link or alias.
+        Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+        Attention: The above 'QuickUploadPath' must point to the same directory.
+        Attention: It must end with a slash: '/'
+
+         NOTE: by default, QuickUploadPath and QuickUploadAbsolutePath point to
+         "userfiles" directory to maintain backwards compatibility with older versions of FCKeditor.
+         This is fine, but you in some cases you will be not able to browse uploaded files using file browser.
+         Example: if you click on "image button", select "Upload" tab and send image
+         to the server, image will appear in FCKeditor correctly, but because it is placed
+         directly in /userfiles/ directory, you'll be not able to see it in built-in file browser.
+         The more expected behaviour would be to send images directly to "image" subfolder.
+         To achieve that, simply change
+            $Config['QuickUploadPath']['Image']            = $Config['UserFilesPath'] ;
+            $Config['QuickUploadAbsolutePath']['Image']    = $Config['UserFilesAbsolutePath'] ;
+        into:
+            $Config['QuickUploadPath']['Image']            = $Config['FileTypesPath']['Image'] ;
+            $Config['QuickUploadAbsolutePath']['Image']     = $Config['FileTypesAbsolutePath']['Image'] ;
+
+*/
+
+/**
+    APPLY MORE RESTRICTIVE SETTINGS FOR WEBSITE BAKER
+    + only allow file types:     only textfiles (no PHP, Javascript or HTML files per default)
+    + only allows images type: bmp, gif, jpges, jpg and png
+    + only allows flash types: swf, flv (no fla ... flash action script per default)
+    + only allows media types: swf, flv, jpg, gif, jpeg, png, avi, mgp, mpeg
+*/
+$Config['AllowedExtensions']['File']            = array();
+$Config['DeniedExtensions']['File']                = array('html','htm','php','php2','php3','php4','php5','phtml','pwml','inc','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','com','dll','vbs','js','reg','cgi','htaccess','asis') ;
+$Config['FileTypesPath']['File']                    = $Config['UserFilesPath'];
+$Config['FileTypesAbsolutePath']['File']        = $Config['UserFilesAbsolutePath'] ;
+$Config['QuickUploadPath']['File']                = $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['File']    = $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Image']            = array('bmp','gif','jpeg','jpg','png') ;
+$Config['DeniedExtensions']['Image']            = array() ;
+$Config['FileTypesPath']['Image']                 = $Config['UserFilesPath'] ;
+$Config['FileTypesAbsolutePath']['Image']     = $Config['UserFilesAbsolutePath'];
+$Config['QuickUploadPath']['Image']             = $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Image']    = $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Flash']            = array('swf','flv') ;
+$Config['DeniedExtensions']['Flash']            = array() ;
+$Config['FileTypesPath']['Flash']                = $Config['UserFilesPath'];
+$Config['FileTypesAbsolutePath']['Flash']     = $Config['UserFilesAbsolutePath'];
+$Config['QuickUploadPath']['Flash']                = $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Flash']    = $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Media']            = array('swf','flv','jpg','gif','jpeg','png','avi','mpg','mpeg') ;
+$Config['DeniedExtensions']['Media']            = array() ;
+$Config['FileTypesPath']['Media']                = $Config['UserFilesPath'] . '' ;
+$Config['FileTypesAbsolutePath']['Media']        = $Config['UserFilesAbsolutePath'];
+$Config['QuickUploadPath']['Media']                = $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Media']    = $Config['UserFilesAbsolutePath'] ;
+
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/config.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/connector.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/connector.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/connector.php	(revision 2)
@@ -0,0 +1,86 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+
+ob_start() ;
+
+require('./config.php') ;
+require('./util.php') ;
+require('./io.php') ;
+require('./basexml.php') ;
+require('./commands.php') ;
+require('./phpcompat.php') ;
+
+if ( !$Config['Enabled'] )
+    SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/php/config.php" file' ) ;
+
+DoResponse() ;
+
+function DoResponse()
+{
+    if (!isset($_GET)) {
+        global $_GET;
+    }
+    if ( !isset( $_GET['Command'] ) || !isset( $_GET['Type'] ) || !isset( $_GET['CurrentFolder'] ) )
+        return ;
+
+    // Get the main request informaiton.
+    $sCommand        = $_GET['Command'] ;
+    $sResourceType    = $_GET['Type'] ;
+    $sCurrentFolder    = GetCurrentFolder() ;
+
+    // Check if it is an allowed command
+    if ( ! IsAllowedCommand( $sCommand ) )
+        SendError( 1, 'The "' . $sCommand . '" command isn\'t allowed' ) ;
+
+    // Check if it is an allowed type.
+    if ( !IsAllowedType( $sResourceType ) )
+        SendError( 1, 'Invalid type specified' ) ;
+
+    // File Upload doesn't have to Return XML, so it must be intercepted before anything.
+    if ( $sCommand == 'FileUpload' )
+    {
+        FileUpload( $sResourceType, $sCurrentFolder, $sCommand ) ;
+        return ;
+    }
+
+    CreateXmlHeader( $sCommand, $sResourceType, $sCurrentFolder ) ;
+
+    // Execute the required command.
+    switch ( $sCommand )
+    {
+        case 'GetFolders' :
+            GetFolders( $sResourceType, $sCurrentFolder ) ;
+            break ;
+        case 'GetFoldersAndFiles' :
+            GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ;
+            break ;
+        case 'CreateFolder' :
+            CreateFolder( $sResourceType, $sCurrentFolder ) ;
+            break ;
+    }
+
+    CreateXmlFooter() ;
+
+    exit ;
+}

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/connector.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/io.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/io.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/io.php	(revision 2)
@@ -0,0 +1,346 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+function CombinePaths( $sBasePath, $sFolder )
+{
+    return RemoveFromEnd( $sBasePath, '/' ) . '/' . RemoveFromStart( $sFolder, '/' ) ;
+}
+function GetResourceTypePath( $resourceType, $sCommand )
+{
+    global $Config ;
+
+    if ( $sCommand == "QuickUpload")
+        return $Config['QuickUploadPath'][$resourceType] ;
+    else
+        return $Config['FileTypesPath'][$resourceType] ;
+}
+
+function GetResourceTypeDirectory( $resourceType, $sCommand )
+{
+    global $Config ;
+    if ( $sCommand == "QuickUpload")
+    {
+        if ( strlen( $Config['QuickUploadAbsolutePath'][$resourceType] ) > 0 )
+            return $Config['QuickUploadAbsolutePath'][$resourceType] ;
+
+        // Map the "UserFiles" path to a local directory.
+        return Server_MapPath( $Config['QuickUploadPath'][$resourceType] ) ;
+    }
+    else
+    {
+        if ( strlen( $Config['FileTypesAbsolutePath'][$resourceType] ) > 0 )
+            return $Config['FileTypesAbsolutePath'][$resourceType] ;
+
+        // Map the "UserFiles" path to a local directory.
+        return Server_MapPath( $Config['FileTypesPath'][$resourceType] ) ;
+    }
+}
+
+function GetUrlFromPath( $resourceType, $folderPath, $sCommand )
+{
+    return CombinePaths( GetResourceTypePath( $resourceType, $sCommand ), $folderPath ) ;
+}
+
+function RemoveExtension( $fileName )
+{
+    return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ;
+}
+
+function ServerMapFolder( $resourceType, $folderPath, $sCommand )
+{
+    // Get the resource type directory.
+    $sResourceTypePath = GetResourceTypeDirectory( $resourceType, $sCommand ) ;
+
+    // Ensure that the directory exists.
+    $sErrorMsg = CreateServerFolder( $sResourceTypePath ) ;
+    if ( $sErrorMsg != '' )
+        SendError( 1, "Error creating folder \"{$sResourceTypePath}\" ({$sErrorMsg})" ) ;
+
+    // Return the resource type directory combined with the required path.
+    return CombinePaths( $sResourceTypePath , $folderPath ) ;
+}
+
+function GetParentFolder( $folderPath )
+{
+    $sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ;
+    return preg_replace( $sPattern, '', $folderPath ) ;
+}
+
+function CreateServerFolder( $folderPath, $lastFolder = null )
+{
+    global $Config ;
+    $sParent = GetParentFolder( $folderPath ) ;
+
+    // Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms
+    while ( strpos($folderPath, '//') !== false )
+    {
+        $folderPath = str_replace( '//', '/', $folderPath ) ;
+    }
+
+    // Check if the parent exists, or create it.
+    if ( !empty($sParent) && !file_exists( $sParent ) )
+    {
+        //prevents agains infinite loop when we can't create root folder
+        if ( !is_null( $lastFolder ) && $lastFolder === $sParent) {
+            return "Can't create $folderPath directory" ;
+        }
+
+        $sErrorMsg = CreateServerFolder( $sParent, $folderPath ) ;
+        if ( $sErrorMsg != '' )
+            return $sErrorMsg ;
+    }
+
+    if ( !file_exists( $folderPath ) )
+    {
+        // Turn off all error reporting.
+        error_reporting( 0 ) ;
+
+        $php_errormsg = '' ;
+        // Enable error tracking to catch the error.
+        ini_set( 'track_errors', '1' ) ;
+
+        if ( isset( $Config['ChmodOnFolderCreate'] ) && !$Config['ChmodOnFolderCreate'] )
+        {
+            mkdir( $folderPath ) ;
+        }
+        else
+        {
+            $permissions = 0777 ;
+            if ( isset( $Config['ChmodOnFolderCreate'] ) )
+            {
+                $permissions = $Config['ChmodOnFolderCreate'] ;
+            }
+            // To create the folder with 0777 permissions, we need to set umask to zero.
+            $oldumask = umask(0) ;
+            mkdir( $folderPath, $permissions ) ;
+            umask( $oldumask ) ;
+        }
+
+        $sErrorMsg = $php_errormsg ;
+
+        // Restore the configurations.
+        ini_restore( 'track_errors' ) ;
+        ini_restore( 'error_reporting' ) ;
+
+        return $sErrorMsg ;
+    }
+    else
+        return '' ;
+}
+
+function GetRootPath()
+{
+    if (!isset($_SERVER)) {
+        global $_SERVER;
+    }
+    $sRealPath = realpath( './' ) ;
+    // #2124 ensure that no slash is at the end
+    $sRealPath = rtrim($sRealPath,"\\/");
+
+    $sSelfPath = $_SERVER['PHP_SELF'] ;
+    $sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ;
+
+    $sSelfPath = str_replace( '/', DIRECTORY_SEPARATOR, $sSelfPath ) ;
+
+    $position = strpos( $sRealPath, $sSelfPath ) ;
+
+    // This can check only that this script isn't run from a virtual dir
+    // But it avoids the problems that arise if it isn't checked
+    if ( $position === false || $position <> strlen( $sRealPath ) - strlen( $sSelfPath ) )
+        SendError( 1, 'Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/php/config.php".' ) ;
+
+    return substr( $sRealPath, 0, $position ) ;
+}
+
+// Emulate the asp Server.mapPath function.
+// given an url path return the physical directory that it corresponds to
+function Server_MapPath( $path )
+{
+    // This function is available only for Apache
+    if ( function_exists( 'apache_lookup_uri' ) )
+    {
+        $info = apache_lookup_uri( $path ) ;
+        return $info->filename . $info->path_info ;
+    }
+
+    // This isn't correct but for the moment there's no other solution
+    // If this script is under a virtual directory or symlink it will detect the problem and stop
+    return GetRootPath() . $path ;
+}
+
+function IsAllowedExt( $sExtension, $resourceType )
+{
+    global $Config ;
+    // Get the allowed and denied extensions arrays.
+    $arAllowed    = $Config['AllowedExtensions'][$resourceType] ;
+    $arDenied    = $Config['DeniedExtensions'][$resourceType] ;
+
+    if ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) )
+        return false ;
+
+    if ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) )
+        return false ;
+
+    return true ;
+}
+
+function IsAllowedType( $resourceType )
+{
+    global $Config ;
+    if ( !in_array( $resourceType, $Config['ConfigAllowedTypes'] ) )
+        return false ;
+
+    return true ;
+}
+
+function IsAllowedCommand( $sCommand )
+{
+    global $Config ;
+
+    if ( !in_array( $sCommand, $Config['ConfigAllowedCommands'] ) )
+        return false ;
+
+    return true ;
+}
+
+function GetCurrentFolder()
+{
+    if (!isset($_GET)) {
+        global $_GET;
+    }
+    $sCurrentFolder    = isset( $_GET['CurrentFolder'] ) ? $_GET['CurrentFolder'] : '/' ;
+
+    // Check the current folder syntax (must begin and start with a slash).
+    if ( !preg_match( '|/$|', $sCurrentFolder ) )
+        $sCurrentFolder .= '/' ;
+    if ( strpos( $sCurrentFolder, '/' ) !== 0 )
+        $sCurrentFolder = '/' . $sCurrentFolder ;
+
+    // Ensure the folder path has no double-slashes
+    while ( strpos ($sCurrentFolder, '//') !== false ) {
+        $sCurrentFolder = str_replace ('//', '/', $sCurrentFolder) ;
+    }
+
+    // Check for invalid folder paths (..)
+    if ( strpos( $sCurrentFolder, '..' ) || strpos( $sCurrentFolder, "\\" ))
+        SendError( 102, '' ) ;
+
+    if ( preg_match(",(/\.)|[[:cntrl:]]|(//)|(\\\\)|([\:\*\?\"\<\>\|]),", $sCurrentFolder))
+        SendError( 102, '' ) ;
+
+    return $sCurrentFolder ;
+}
+
+// Do a cleanup of the folder name to avoid possible problems
+function SanitizeFolderName( $sNewFolderName )
+{
+    $sNewFolderName = stripslashes( $sNewFolderName ) ;
+
+    // Remove . \ / | : ? * " < >
+    $sNewFolderName = preg_replace( '/\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFolderName ) ;
+
+    return $sNewFolderName ;
+}
+
+// Do a cleanup of the file name to avoid possible problems
+function SanitizeFileName( $sNewFileName )
+{
+    global $Config ;
+
+    $sNewFileName = stripslashes( $sNewFileName ) ;
+
+    // Replace dots in the name with underscores (only one dot can be there... security issue).
+    if ( $Config['ForceSingleExtension'] )
+        $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;
+
+    // Remove \ / | : ? * " < >
+    $sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
+
+    return $sNewFileName ;
+}
+
+// This is the function that sends the results of the uploading process.
+function SendUploadResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' )
+{
+    // Minified version of the document.domain automatic fix script (#1919).
+    // The original script can be found at _dev/domain_fix_template.js
+    echo <<<EOF
+<script type="text/javascript">
+(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+EOF;
+
+    if ($errorNumber && $errorNumber != 201) {
+        $fileUrl = "";
+        $fileName = "";
+    }
+
+    $rpl = array( '\\' => '\\\\', '"' => '\\"' ) ;
+    echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . strtr( $fileUrl, $rpl ) . '","' . strtr( $fileName, $rpl ) . '", "' . strtr( $customMsg, $rpl ) . '") ;' ;
+    echo '</script>' ;
+    exit ;
+}
+
+// This is the function that sends the results of the uploading process to CKE.
+function SendCKEditorResults ($errorNumber, $CKECallback, $fileUrl, $fileName, $customMsg ='')
+{
+    // Minified version of the document.domain automatic fix script (#1919).
+    // The original script can be found at _dev/domain_fix_template.js
+    echo <<<EOF
+<script type="text/javascript">
+(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+EOF;
+
+    if ($errorNumber && $errorNumber != 201) {
+        $fileUrl = "";
+        $fileName= "";
+    }
+
+    $msg = "";
+
+    switch ($errorNumber )
+    {
+        case 0 :
+            $msg = "Upload successful";
+            break;
+        case 1 :    // Custom error.
+            $msg = $customMsg;
+            break ;
+        case 201 :
+            $msg = 'A file with the same name is already available. The uploaded file has been renamed to "' . $fileName . '"' ;
+            break ;
+        case 202 :
+            $msg = 'Invalid file' ;
+            break ;
+        default :
+            $msg = 'Error on file upload. Error number: ' + $errorNumber ;
+            break ;
+    }
+
+
+  $rpl = array( '\\' => '\\\\', '"' => '\\"' ) ;
+  echo 'window.parent.CKEDITOR.tools.callFunction("'. $CKECallback. '","'. strtr($fileUrl, $rpl). '", "'. strtr( $msg, $rpl). '");' ;
+
+  echo '</script>';
+}
+
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/io.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/phpcompat.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/phpcompat.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/phpcompat.php	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+
+if ( !isset( $_SERVER ) ) {
+    $_SERVER = $HTTP_SERVER_VARS ;
+}
+if ( !isset( $_GET ) ) {
+    $_GET = $HTTP_GET_VARS ;
+}
+if ( !isset( $_FILES ) ) {
+    $_FILES = $HTTP_POST_FILES ;
+}
+
+if ( !defined( 'DIRECTORY_SEPARATOR' ) ) {
+    define( 'DIRECTORY_SEPARATOR',
+        strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
+    ) ;
+}

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/phpcompat.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/upload.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/upload.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/upload.php	(revision 2)
@@ -0,0 +1,62 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the "File Uploader" for PHP.
+ */
+
+require('./config.php') ;
+require('./util.php') ;
+require('./io.php') ;
+require('./commands.php') ;
+require('./phpcompat.php') ;
+
+function SendError( $number, $text )
+{
+    SendUploadResults( $number, '', '', $text ) ;
+}
+
+
+// Check if this uploader has been enabled.
+if ( !$Config['Enabled'] )
+    SendUploadResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/connectors/php/config.php" file' ) ;
+
+$sCommand = 'QuickUpload' ;
+
+// The file type (from the QueryString, by default 'File').
+$sType = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ;
+
+$sCurrentFolder    = "/" ;
+
+// Is enabled the upload?
+if ( ! IsAllowedCommand( $sCommand ) )
+    SendUploadResults( '1', '', '', 'The ""' . $sCommand . '"" command isn\'t allowed' ) ;
+
+// Check if it is an allowed type.
+if ( !IsAllowedType( $sType ) )
+    SendUploadResults( 1, '', '', 'Invalid type specified' ) ;
+
+// Get the CKEditor Callback
+$CKEcallback = $_GET['CKEditorFuncNum'];
+ 
+//pass it on to file upload function
+FileUpload( $sType, $sCurrentFolder, $sCommand, $CKEcallback );
+
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/upload.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/util.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/util.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/util.php	(revision 2)
@@ -0,0 +1,220 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions for the File Manager Connector for PHP.
+ */
+
+function RemoveFromStart( $sourceString, $charToRemove )
+{
+    $sPattern = '|^' . $charToRemove . '+|' ;
+    return preg_replace( $sPattern, '', $sourceString ) ;
+}
+
+function RemoveFromEnd( $sourceString, $charToRemove )
+{
+    $sPattern = '|' . $charToRemove . '+$|' ;
+    return preg_replace( $sPattern, '', $sourceString ) ;
+}
+
+function FindBadUtf8( $string )
+{
+    $regex =
+    '([\x00-\x7F]'.
+    '|[\xC2-\xDF][\x80-\xBF]'.
+    '|\xE0[\xA0-\xBF][\x80-\xBF]'.
+    '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'.
+    '|\xED[\x80-\x9F][\x80-\xBF]'.
+    '|\xF0[\x90-\xBF][\x80-\xBF]{2}'.
+    '|[\xF1-\xF3][\x80-\xBF]{3}'.
+    '|\xF4[\x80-\x8F][\x80-\xBF]{2}'.
+    '|(.{1}))';
+
+    while (preg_match('/'.$regex.'/S', $string, $matches)) {
+        if ( isset($matches[2])) {
+            return true;
+        }
+        $string = substr($string, strlen($matches[0]));
+    }
+
+    return false;
+}
+
+function ConvertToXmlAttribute( $value )
+{
+    if ( defined( 'PHP_OS' ) )
+    {
+        $os = PHP_OS ;
+    }
+    else
+    {
+        $os = php_uname() ;
+    }
+
+    if ( strtoupper( substr( $os, 0, 3 ) ) === 'WIN' || FindBadUtf8( $value ) )
+    {
+        return ( utf8_encode( htmlspecialchars( $value ) ) ) ;
+    }
+    else
+    {
+        return ( htmlspecialchars( $value ) ) ;
+    }
+}
+
+/**
+ * Check whether given extension is in html etensions list
+ *
+ * @param string $ext
+ * @param array $htmlExtensions
+ * @return boolean
+ */
+function IsHtmlExtension( $ext, $htmlExtensions )
+{
+    if ( !$htmlExtensions || !is_array( $htmlExtensions ) )
+    {
+        return false ;
+    }
+    $lcaseHtmlExtensions = array() ;
+    foreach ( $htmlExtensions as $key => $val )
+    {
+        $lcaseHtmlExtensions[$key] = strtolower( $val ) ;
+    }
+    return in_array( $ext, $lcaseHtmlExtensions ) ;
+}
+
+/**
+ * Detect HTML in the first KB to prevent against potential security issue with
+ * IE/Safari/Opera file type auto detection bug.
+ * Returns true if file contain insecure HTML code at the beginning.
+ *
+ * @param string $filePath absolute path to file
+ * @return boolean
+ */
+function DetectHtml( $filePath )
+{
+    $fp = @fopen( $filePath, 'rb' ) ;
+
+    //open_basedir restriction, see #1906
+    if ( $fp === false || !flock( $fp, LOCK_SH ) )
+    {
+        return -1 ;
+    }
+
+    $chunk = fread( $fp, 1024 ) ;
+    flock( $fp, LOCK_UN ) ;
+    fclose( $fp ) ;
+
+    $chunk = strtolower( $chunk ) ;
+
+    if (!$chunk)
+    {
+        return false ;
+    }
+
+    $chunk = trim( $chunk ) ;
+
+    if ( preg_match( "/<!DOCTYPE\W*X?HTML/sim", $chunk ) )
+    {
+        return true;
+    }
+
+    $tags = array( '<body', '<head', '<html', '<img', '<pre', '<script', '<table', '<title' ) ;
+
+    foreach( $tags as $tag )
+    {
+        if( false !== strpos( $chunk, $tag ) )
+        {
+            return true ;
+        }
+    }
+
+    //type = javascript
+    if ( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) )
+    {
+        return true ;
+    }
+
+    //href = javascript
+    //src = javascript
+    //data = javascript
+    if ( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
+    {
+        return true ;
+    }
+
+    //url(javascript
+    if ( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
+    {
+        return true ;
+    }
+
+    return false ;
+}
+
+/**
+ * Check file content.
+ * Currently this function validates only image files.
+ * Returns false if file is invalid.
+ *
+ * @param string $filePath absolute path to file
+ * @param string $extension file extension
+ * @param integer $detectionLevel 0 = none, 1 = use getimagesize for images, 2 = use DetectHtml for images
+ * @return boolean
+ */
+function IsImageValid( $filePath, $extension )
+{
+    if (!@is_readable($filePath)) {
+        return -1;
+    }
+
+    $imageCheckExtensions = array('gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'iff');
+
+    // version_compare is available since PHP4 >= 4.0.7
+    if ( function_exists( 'version_compare' ) ) {
+        $sCurrentVersion = phpversion();
+        if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) {
+            $imageCheckExtensions[] = "tiff";
+            $imageCheckExtensions[] = "tif";
+        }
+        if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) {
+            $imageCheckExtensions[] = "swc";
+        }
+        if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) {
+            $imageCheckExtensions[] = "jpc";
+            $imageCheckExtensions[] = "jp2";
+            $imageCheckExtensions[] = "jpx";
+            $imageCheckExtensions[] = "jb2";
+            $imageCheckExtensions[] = "xbm";
+            $imageCheckExtensions[] = "wbmp";
+        }
+    }
+
+    if ( !in_array( $extension, $imageCheckExtensions ) ) {
+        return true;
+    }
+
+    if ( @getimagesize( $filePath ) === false ) {
+        return false ;
+    }
+
+    return true;
+}
+
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/filemanager/connectors/php/util.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/index.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/index.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/index.php	(revision 2)
@@ -0,0 +1,20 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/ckeditor/ckeditor/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/lang/_translationstatus.txt
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/_translationstatus.txt	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/_translationstatus.txt	(revision 2)
@@ -0,0 +1,63 @@
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+
+af.js      Found: 62 Missing: 4
+ar.js      Found: 51 Missing: 15
+bg.js      Found: 58 Missing: 8
+bn.js      Found: 40 Missing: 26
+bs.js      Found: 29 Missing: 37
+ca.js      Found: 61 Missing: 5
+cs.js      Found: 66 Missing: 0
+cy.js      Found: 66 Missing: 0
+da.js      Found: 66 Missing: 0
+de.js      Found: 66 Missing: 0
+el.js      Found: 59 Missing: 7
+en-au.js   Found: 38 Missing: 28
+en-ca.js   Found: 37 Missing: 29
+en-gb.js   Found: 61 Missing: 5
+eo.js      Found: 66 Missing: 0
+es.js      Found: 66 Missing: 0
+et.js      Found: 66 Missing: 0
+eu.js      Found: 48 Missing: 18
+fa.js      Found: 66 Missing: 0
+fi.js      Found: 66 Missing: 0
+fo.js      Found: 66 Missing: 0
+fr-ca.js   Found: 42 Missing: 24
+fr.js      Found: 66 Missing: 0
+gl.js      Found: 40 Missing: 26
+gu.js      Found: 66 Missing: 0
+he.js      Found: 66 Missing: 0
+hi.js      Found: 43 Missing: 23
+hr.js      Found: 66 Missing: 0
+hu.js      Found: 63 Missing: 3
+is.js      Found: 41 Missing: 25
+it.js      Found: 66 Missing: 0
+ja.js      Found: 62 Missing: 4
+ka.js      Found: 62 Missing: 4
+km.js      Found: 40 Missing: 26
+ko.js      Found: 40 Missing: 26
+lt.js      Found: 66 Missing: 0
+lv.js      Found: 40 Missing: 26
+mk.js      Found: 0 Missing: 66
+mn.js      Found: 40 Missing: 26
+ms.js      Found: 39 Missing: 27
+nb.js      Found: 66 Missing: 0
+nl.js      Found: 65 Missing: 1
+no.js      Found: 66 Missing: 0
+pl.js      Found: 66 Missing: 0
+pt-br.js   Found: 66 Missing: 0
+pt.js      Found: 52 Missing: 14
+ro.js      Found: 61 Missing: 5
+ru.js      Found: 66 Missing: 0
+sk.js      Found: 49 Missing: 17
+sl.js      Found: 48 Missing: 18
+sr-latn.js Found: 40 Missing: 26
+sr.js      Found: 40 Missing: 26
+sv.js      Found: 62 Missing: 4
+th.js      Found: 40 Missing: 26
+tr.js      Found: 66 Missing: 0
+ug.js      Found: 66 Missing: 0
+uk.js      Found: 66 Missing: 0
+vi.js      Found: 66 Missing: 0
+zh-cn.js   Found: 66 Missing: 0
+zh.js      Found: 58 Missing: 8
Index: trunk/modules/ckeditor/ckeditor/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/bg.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['bg']={"editor":"Текстов редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignJustify":"Двустранно подравняване","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Относно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна информация моля посетете сайта ни:","title":"Относно CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"bidi":{"ltr":"Посока на текста от ляво на дясно","rtl":"Посока на текста от дясно на ляво"},"blockquote":{"toolbar":"Блок за цитат"},"button":{"selectedLabel":"%1 (Избрано)"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.","securityMsg":"Заради настройките за сигурност на Вашия браузър, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"codemirror":{"toolbar":"Източник","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Автоматично","bgColorTitle":"Фонов цвят","colors":{"000":"Черно","800000":"Кестеняво","8B4513":"Светлокафяво","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Индиго","696969":"Тъмно сиво","B22222":"Огнено червено","A52A2A":"Кафяво","DAA520":"Златисто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно синьо","800080":"Пурпурно","808080":"Сиво","F00":"Червено","FF8C00":"Тъмно оранжево","FFD700":"Златно","008000":"Зелено","0FF":"Светло синьо","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Още цветове","panelTitle":"Цветове","textColorTitle":"Цвят на шрифт"},"colordialog":{"clear":"Изчистване","highlight":"Осветяване","options":"Цветови опции","selected":"Изберете цвят","title":"Изберете цвят"},"contextmenu":{"options":"Опции на контекстното меню"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Препоръчително заглавие","cssClassInputLabel":"Класове за CSS","edit":"Промяна на Div","inlineStyleInputLabel":"В редица","langDirLTRLabel":"Ляво на Дясно (ЛнД)","langDirLabel":"Посока на езика","langDirRTLLabel":"Дясно на Ляво (ДнЛ)","languageCodeInputLabel":" Код на езика","remove":"Премахване на Div","styleSelectLabel":"Стил","title":"Създай Div блок","toolbar":"Създаване на Div контейнер"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"find":{"find":"Търсене","findOptions":"Find Options","findWhat":"Търси за:","matchCase":"Съвпадение","matchCyclic":"Циклично съвпадение","matchWord":"Съвпадение с дума","notFoundMsg":"Указаният текст не е намерен.","replace":"Препокриване","replaceAll":"Препокрий всички","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Препокрива с:","title":"Търсене и препокриване"},"flash":{"access":"Достъп до скрипт","accessAlways":"Винаги","accessNever":"Никога","accessSameDomain":"Същият домейн","alignAbsBottom":"Най-долу","alignAbsMiddle":"Точно по средата","alignBaseline":"Базова линия","alignTextTop":"Върху текста","bgcolor":"Цвят на фона","chkFull":"Включи на цял екран","chkLoop":"Цикъл","chkMenu":"Разрешено Flash меню","chkPlay":"Авто. пускане","flashvars":"Променливи за Флаш","hSpace":"Хоризонтален отстъп","properties":"Настройки за флаш","propertiesTab":"Настройки","quality":"Качество","qualityAutoHigh":"Авто. високо","qualityAutoLow":"Авто. ниско","qualityBest":"Отлично","qualityHigh":"Високо","qualityLow":"Ниско","qualityMedium":"Средно","scale":"Оразмеряване","scaleAll":"Показва всичко","scaleFit":"Според мястото","scaleNoBorder":"Без рамка","title":"Настройки за флаш","vSpace":"Вертикален отстъп","validateHSpace":"HSpace трябва да е число.","validateSrc":"Уеб адреса не трябва да е празен.","validateVSpace":"VSpace трябва да е число.","windowMode":"Режим на прозореца","windowModeOpaque":"Плътност","windowModeTransparent":"Прозрачност","windowModeWindow":"Прозорец"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер на шрифт","panelTitle":"Размер на шрифт"},"label":"Шрифт","panelTitle":"Име на шрифт","voiceLabel":"Шрифт"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"forms":{"button":{"title":"Настройки на бутона","text":"Текст (стойност)","type":"Тип","typeBtn":"Бутон","typeSbm":"Добави","typeRst":"Нулиране"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Настройки на радиобутон","value":"Стойност","selected":"Избрано","required":"Required"},"form":{"title":"Настройки на формата","menu":"Настройки на формата","action":"Действие","method":"Метод","encoding":"Кодиране"},"hidden":{"title":"Настройки за скрито поле","name":"Име","value":"Стойност"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Налични опции","value":"Стойност","size":"Размер","lines":"линии","chkMulti":"Allow multiple selections","required":"Required","opText":"Текст","opValue":"Стойност","btnAdd":"Добави","btnModify":"Промени","btnUp":"На горе","btnDown":"На долу","btnSetValue":"Set as selected value","btnDelete":"Изтриване"},"textarea":{"title":"Опции за текстовата зона","cols":"Колони","rows":"Редове"},"textfield":{"title":"Настройки за текстово поле","name":"Име","value":"Стойност","charWidth":"Ширина на знаците","maxChars":"Макс. знаци","required":"Required","type":"Тип","typeText":"Текст","typePass":"Парола","typeEmail":"Email","typeSearch":"Търсене","typeTel":"Телефонен номер","typeUrl":"Уеб адрес"}},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"iframe":{"border":"Показва рамка на карето","noUrl":"Моля въведете URL за iFrame","scrolling":"Вкл. скролбаровете","title":"IFrame настройки","toolbar":"IFrame"},"image":{"alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати я на сървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отстъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за снимка","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки за снимка","resetSize":"Нулиране на размер","title":"Настройки за снимка","titleButton":"Настойки за бутон за снимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отстъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"justify":{"block":"Двустранно подравняване","center":"Център","left":"Подравни в ляво","right":"Подравни в дясно"},"language":{"button":"Задай език","remove":"Премахни език"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","download":"Force Download","displayText":"Display Text","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"liststyle":{"armenian":"Арменско номериране","bulletedTitle":"Bulleted List Properties","circle":"Кръг","decimal":"Числа (1, 2, 3 и др.)","decimalLeadingZero":"Числа с водеща нула (01, 02, 03 и т.н.)","disc":"Диск","georgian":"Грузинско номериране (an, ban, gan, и т.н.)","lowerAlpha":"Малки букви (а, б, в, г, д и т.н.)","lowerGreek":"Малки гръцки букви (алфа, бета, гама и т.н.)","lowerRoman":"Малки римски числа (i, ii, iii, iv, v и т.н.)","none":"Няма","notset":"<не е указано>","numberedTitle":"Numbered List Properties","square":"Квадрат","start":"Старт","type":"Тип","upperAlpha":"Големи букви (А, Б, В, Г, Д и т.н.)","upperRoman":"Големи римски числа (I, II, III, IV, V и т.н.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Вмъкнете параграф тук"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"widget":{"move":"Кликни и влачи, за да преместиш","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Разделяне на страници","toolbar":"Вмъкване на нова страница при печат"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"removeformat":{"toolbar":"Премахване на форматирането"},"save":{"toolbar":"Запис"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Речници","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"Избери всичко"},"showblocks":{"toolbar":"Показва блокове"},"smiley":{"options":"Опции за усмивката","title":"Вмъкване на усмивка","toolbar":"Усмивка"},"sourcearea":{"toolbar":"Изходен код"},"sourcedialog":{"toolbar":"Източник","title":"Източник"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Вътрешни стилове","panelTitle3":"Обектни стилове"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е позитивно число.","invalidCellSpacing":"Интервала в клетките трябва да е позитивно число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"templates":{"button":"Шаблони","emptyListMsg":"(Няма дефинирани шаблони)","insertOption":"Препокрива актуалното съдържание","options":"Опции за шаблона","selectPromptMsg":"Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):","title":"Шаблони"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай всичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий всичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- Няма препоръчани -","notAvailable":"Съжаляваме, но услугата не е достъпна за момента","notInDic":"Не е в речника","oneChange":"Spell check complete: One word changed","progress":"Проверява се правописа...","title":"Проверка на правопис","toolbar":"Проверка на правопис"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/ca.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['ca']={"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignJustify":"Justificat","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"Cap","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retrocés","13":"Intro","16":"Majúscules","17":"Ctrl","18":"Alt","32":"Space","35":"Fi","36":"Inici","46":"Eliminar","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor","help":"Premi $1 per obtenir ajuda.","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:","title":"Quant al CKEditor","userGuide":"Manual d'usuari de CKEditor"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"bidi":{"ltr":"Direcció del text d'esquerra a dreta","rtl":"Direcció del text de dreta a esquerra"},"blockquote":{"toolbar":"Bloc de cita"},"button":{"selectedLabel":"%1 (Seleccionat)"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxar"},"codemirror":{"toolbar":"Codi font","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automàtic","bgColorTitle":"Color de Fons","colors":{"000":"Negre","800000":"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi","696969":"Gris Fosc","B22222":"Foc Maó","A52A2A":"Marró","DAA520":"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2","800080":"Lila","808080":"Gris","F00":"Vermell","FF8C00":"Taronja Fosc","FFD700":"Or","008000":"Verd","0FF":"Cian","00F":"Blau","EE82EE":"Violat","A9A9A9":"Gris clar","FFA07A":"Salmó clar","FFA500":"Taronja","FFFF00":"Groc","00FF00":"Verd Llima","AFEEEE":"Turquesa Pàl·lid","ADD8E6":"Blau Clar","DDA0DD":"Pruna","D3D3D3":"Gris Clar","FFF0F5":"Lavanda rosat","FAEBD7":"Blanc Antic","FFFFE0":"Groc Clar","F0FFF0":"Verd Pàl·lid","F0FFFF":"Atzur","F0F8FF":"Cian pàlid","E6E6FA":"Lavanda","FFF":"Blanc","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Més Colors...","panelTitle":"Colors","textColorTitle":"Color del Text"},"colordialog":{"clear":"Neteja","highlight":"Destacat","options":"Opcions del color","selected":"Color Seleccionat","title":"Seleccioni el color"},"contextmenu":{"options":"Opcions del menú contextual"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Títol de guia","cssClassInputLabel":"Classes de la fulla d'estils","edit":"Edita la Capa","inlineStyleInputLabel":"Estil en línia","langDirLTRLabel":"D'esquerra a dreta (LTR)","langDirLabel":"Direcció de l'idioma","langDirRTLLabel":"De dreta a esquerra (RTL)","languageCodeInputLabel":" Codi d'idioma","remove":"Elimina la Capa","styleSelectLabel":"Estil","title":"Crea una Capa Contenidora","toolbar":"Crea una Capa Contenidora"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"find":{"find":"Cerca","findOptions":"Opcions de Cerca","findWhat":"Cerca el:","matchCase":"Distingeix majúscules/minúscules","matchCyclic":"Coincidència cíclica","matchWord":"Només paraules completes","notFoundMsg":"El text especificat no s'ha trobat.","replace":"Reemplaça","replaceAll":"Reemplaça-ho tot","replaceSuccessMsg":"%1 ocurrència/es reemplaçada/es.","replaceWith":"Reemplaça amb:","title":"Cerca i reemplaça"},"flash":{"access":"Accés a scripts","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"El mateix domini","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Superior","bgcolor":"Color de Fons","chkFull":"Permetre la pantalla completa","chkLoop":"Bucle","chkMenu":"Habilita menú Flash","chkPlay":"Reprodució automàtica","flashvars":"Variables de Flash","hSpace":"Espaiat horitzontal","properties":"Propietats del Flash","propertiesTab":"Propietats","quality":"Qualitat","qualityAutoHigh":"Alta automàtica","qualityAutoLow":"Baixa automàtica","qualityBest":"La millor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Mitjana","scale":"Escala","scaleAll":"Mostra-ho tot","scaleFit":"Mida exacta","scaleNoBorder":"Sense vores","title":"Propietats del Flash","vSpace":"Espaiat vertical","validateHSpace":"L'espaiat horitzontal ha de ser un número.","validateSrc":"La URL no pot estar buida.","validateVSpace":"L'espaiat vertical ha de ser un número.","windowMode":"Mode de la finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Transparent","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Mida","voiceLabel":"Mida de la lletra","panelTitle":"Mida de la lletra"},"label":"Tipus de lletra","panelTitle":"Tipus de lletra","voiceLabel":"Tipus de lletra"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"forms":{"button":{"title":"Propietats del botó","text":"Text (Valor)","type":"Tipus","typeBtn":"Botó","typeSbm":"Transmet formulari","typeRst":"Reinicia formulari"},"checkboxAndRadio":{"checkboxTitle":"Propietats de la casella de verificació","radioTitle":"Propietats del botó d'opció","value":"Valor","selected":"Seleccionat","required":"Necessari"},"form":{"title":"Propietats del formulari","menu":"Propietats del formulari","action":"Acció","method":"Mètode","encoding":"Codificació"},"hidden":{"title":"Propietats del camp ocult","name":"Nom","value":"Valor"},"select":{"title":"Propietats del camp de selecció","selectInfo":"Info","opAvail":"Opcions disponibles","value":"Valor","size":"Mida","lines":"Línies","chkMulti":"Permet múltiples seleccions","required":"Necessari","opText":"Text","opValue":"Valor","btnAdd":"Afegeix","btnModify":"Modifica","btnUp":"Amunt","btnDown":"Avall","btnSetValue":"Selecciona per defecte","btnDelete":"Elimina"},"textarea":{"title":"Propietats de l'àrea de text","cols":"Columnes","rows":"Files"},"textfield":{"title":"Propietats del camp de text","name":"Nom","value":"Valor","charWidth":"Amplada","maxChars":"Nombre màxim de caràcters","required":"Necessari","type":"Tipus","typeText":"Text","typePass":"Contrasenya","typeEmail":"Correu electrònic","typeSearch":"Cercar","typeTel":"Número de telèfon","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"iframe":{"border":"Mostra la vora del marc","noUrl":"Si us plau, introdueixi la URL de l'iframe","scrolling":"Activa les barres de desplaçament","title":"Propietats de l'IFrame","toolbar":"IFrame"},"image":{"alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"justify":{"block":"Justificat","center":"Centrat","left":"Alinea a l'esquerra","right":"Alinea a la dreta"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","download":"Force Download","displayText":"Text a mostrar","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insereix el paràgraf aquí"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"widget":{"move":"Clicar i arrossegar per moure","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Salt de pàgina","toolbar":"Insereix salt de pàgina"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"removeformat":{"toolbar":"Elimina Format"},"save":{"toolbar":"Desa"},"scayt":{"btn_about":"Quant a l'SCAYT","btn_dictionaries":"Diccionaris","btn_disable":"Deshabilita SCAYT","btn_enable":"Habilitat l'SCAYT","btn_langs":"Idiomes","btn_options":"Opcions","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"Selecciona-ho tot"},"showblocks":{"toolbar":"Mostra els blocs"},"smiley":{"options":"Opcions d'emoticones","title":"Insereix una icona","toolbar":"Icona"},"sourcearea":{"toolbar":"Codi font"},"sourcedialog":{"toolbar":"Codi font","title":"Codi font"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la  ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la  ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula  ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula  ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"templates":{"button":"Plantilles","emptyListMsg":"(No hi ha plantilles definides)","insertOption":"Reemplaça el contingut actual","options":"Opcions de plantilla","selectPromptMsg":"Seleccioneu una plantilla per usar a l'editor<br>(per defecte s'elimina el contingut actual):","title":"Plantilles de contingut"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"undo":{"redo":"Refés","undo":"Desfés"},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora-les totes","btnReplace":"Canvia","btnReplaceAll":"Canvia-les totes","btnUndo":"Desfés","changeTo":"Reemplaça amb","errorLoading":"Error carregant el servidor: %s.","ieSpellDownload":"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?","manyChanges":"Verificació ortogràfica: s'han canviat %1 paraules","noChanges":"Verificació ortogràfica: no s'ha canviat cap paraula","noMispell":"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita","noSuggestions":"Cap suggeriment","notAvailable":"El servei no es troba disponible ara.","notInDic":"No és al diccionari","oneChange":"Verificació ortogràfica: s'ha canviat una paraula","progress":"Verificació ortogràfica en curs...","title":"Comprova l'ortografia","toolbar":"Revisa l'ortografia"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/cs.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['cs']={"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na střed","alignJustify":"Zarovnat do bloku","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"Konec","36":"Domů","46":"Smazat","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor","help":"Prohlédněte si $1 pro nápovědu.","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:","title":"O aplikaci CKEditor","userGuide":"Uživatelská příručka CKEditor"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"bidi":{"ltr":"Směr textu zleva doprava","rtl":"Směr textu zprava doleva"},"blockquote":{"toolbar":"Citace"},"button":{"selectedLabel":"%1 (Vybráno)"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"codemirror":{"toolbar":"Zdroj","searchCode":"Prohledat zdroj","autoFormat":"Formátovat výběr","commentSelectedRange":"Zakomentovat výběr","uncommentSelectedRange":"Odkomentovat výběr","autoCompleteToggle":"Povolit/zakázat automatické doplňování HTML tagů"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Barva pozadí","colors":{"000":"Černá","800000":"Kaštanová","8B4513":"Sedlová hněď","2F4F4F":"Tmavě bledě šedá","008080":"Čírka","000080":"Námořnická modř","4B0082":"Inkoustová","696969":"Tmavě šedá","B22222":"Pálená cihla","A52A2A":"Hnědá","DAA520":"Zlatý prut","006400":"Tmavě zelená","40E0D0":"Tyrkisová","0000CD":"Středně modrá","800080":"Purpurová","808080":"Šedá","F00":"Červená","FF8C00":"Tmavě oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azurová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Kalně šedá","FFA07A":"Světle lososová","FFA500":"Oranžová","FFFF00":"Žlutá","00FF00":"Limetková","AFEEEE":"Bledě tyrkisová","ADD8E6":"Světle modrá","DDA0DD":"Švestková","D3D3D3":"Světle šedá","FFF0F5":"Levandulově ruměnná","FAEBD7":"Antická bílá","FFFFE0":"Světle žlutá","F0FFF0":"Medová rosa","F0FFFF":"Azurová","F0F8FF":"Alenčina modrá","E6E6FA":"Levandulová","FFF":"Bílá","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Více barev...","panelTitle":"Barvy","textColorTitle":"Barva textu"},"colordialog":{"clear":"Vyčistit","highlight":"Zvýraznit","options":"Nastavení barvy","selected":"Vybráno","title":"Výběr barvy"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Nápovědní titulek","cssClassInputLabel":"Třídy stylů","edit":"Změnit Div","inlineStyleInputLabel":"Vnitřní styly","langDirLTRLabel":"Zleva doprava (LTR)","langDirLabel":"Směr jazyka","langDirRTLLabel":"Zprava doleva (RTL)","languageCodeInputLabel":" Kód jazyka","remove":"Odstranit Div","styleSelectLabel":"Styly","title":"Vytvořit Div kontejner","toolbar":"Vytvořit Div kontejner"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"find":{"find":"Hledat","findOptions":"Možnosti hledání","findWhat":"Co hledat:","matchCase":"Rozlišovat velikost písma","matchCyclic":"Procházet opakovaně","matchWord":"Pouze celá slova","notFoundMsg":"Hledaný text nebyl nalezen.","replace":"Nahradit","replaceAll":"Nahradit vše","replaceSuccessMsg":"%1 nahrazení.","replaceWith":"Čím nahradit:","title":"Najít a nahradit"},"flash":{"access":"Přístup ke skriptu","accessAlways":"Vždy","accessNever":"Nikdy","accessSameDomain":"Ve stejné doméně","alignAbsBottom":"Zcela dolů","alignAbsMiddle":"Doprostřed","alignBaseline":"Na účaří","alignTextTop":"Na horní okraj textu","bgcolor":"Barva pozadí","chkFull":"Povolit celoobrazovkový režim","chkLoop":"Opakování","chkMenu":"Nabídka Flash","chkPlay":"Automatické spuštění","flashvars":"Proměnné pro Flash","hSpace":"Horizontální mezera","properties":"Vlastnosti Flashe","propertiesTab":"Vlastnosti","quality":"Kvalita","qualityAutoHigh":"Vysoká - auto","qualityAutoLow":"Nízká - auto","qualityBest":"Nejlepší","qualityHigh":"Vysoká","qualityLow":"Nejnižší","qualityMedium":"Střední","scale":"Zobrazit","scaleAll":"Zobrazit vše","scaleFit":"Přizpůsobit","scaleNoBorder":"Bez okraje","title":"Vlastnosti Flashe","vSpace":"Vertikální mezera","validateHSpace":"Zadaná horizontální mezera musí být číslo.","validateSrc":"Zadejte prosím URL odkazu","validateVSpace":"Zadaná vertikální mezera musí být číslo.","windowMode":"Režim okna","windowModeOpaque":"Neprůhledné","windowModeTransparent":"Průhledné","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost písma","panelTitle":"Velikost"},"label":"Písmo","panelTitle":"Písmo","voiceLabel":"Písmo"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"forms":{"button":{"title":"Vlastnosti tlačítka","text":"Popisek","type":"Typ","typeBtn":"Tlačítko","typeSbm":"Odeslat","typeRst":"Obnovit"},"checkboxAndRadio":{"checkboxTitle":"Vlastnosti zaškrtávacího políčka","radioTitle":"Vlastnosti přepínače","value":"Hodnota","selected":"Zaškrtnuto","required":"Vyžadováno"},"form":{"title":"Vlastnosti formuláře","menu":"Vlastnosti formuláře","action":"Akce","method":"Metoda","encoding":"Kódování"},"hidden":{"title":"Vlastnosti skrytého pole","name":"Název","value":"Hodnota"},"select":{"title":"Vlastnosti seznamu","selectInfo":"Info","opAvail":"Dostupná nastavení","value":"Hodnota","size":"Velikost","lines":"Řádků","chkMulti":"Povolit mnohonásobné výběry","required":"Vyžadováno","opText":"Text","opValue":"Hodnota","btnAdd":"Přidat","btnModify":"Změnit","btnUp":"Nahoru","btnDown":"Dolů","btnSetValue":"Nastavit jako vybranou hodnotu","btnDelete":"Smazat"},"textarea":{"title":"Vlastnosti textové oblasti","cols":"Sloupců","rows":"Řádků"},"textfield":{"title":"Vlastnosti textového pole","name":"Název","value":"Hodnota","charWidth":"Šířka ve znacích","maxChars":"Maximální počet znaků","required":"Vyžadováno","type":"Typ","typeText":"Text","typePass":"Heslo","typeEmail":"Email","typeSearch":"Hledat","typeTel":"Telefonní číslo","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"iframe":{"border":"Zobrazit okraj","noUrl":"Zadejte prosím URL obsahu pro IFrame","scrolling":"Zapnout posuvníky","title":"Vlastnosti IFrame","toolbar":"IFrame"},"image":{"alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?","hSpace":"Horizontální mezera","img2Button":"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlačítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých číslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých číslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých číslech."},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"justify":{"block":"Zarovnat do bloku","center":"Zarovnat na střed","left":"Zarovnat vlevo","right":"Zarovnat vpravo"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","download":"Force Download","displayText":"Zobrazit text","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"liststyle":{"armenian":"Arménské","bulletedTitle":"Vlastnosti odrážek","circle":"Kroužky","decimal":"Arabská čísla (1, 2, 3, atd.)","decimalLeadingZero":"Arabská čísla uvozená nulou (01, 02, 03, atd.)","disc":"Kolečka","georgian":"Gruzínské (an, ban, gan, atd.)","lowerAlpha":"Malá latinka (a, b, c, d, e, atd.)","lowerGreek":"Malé řecké (alpha, beta, gamma, atd.)","lowerRoman":"Malé římské (i, ii, iii, iv, v, atd.)","none":"Nic","notset":"<nenastaveno>","numberedTitle":"Vlastnosti číslování","square":"Čtverce","start":"Počátek","type":"Typ","upperAlpha":"Velká latinka (A, B, C, D, E, atd.)","upperRoman":"Velké římské (I, II, III, IV, V, atd.)","validateStartNumber":"Číslování musí začínat celým číslem."},"magicline":{"title":"zde vložit odstavec"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"widget":{"move":"Klepněte a táhněte pro přesunutí","label":"Ovládací prvek %1"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Konec stránky","toolbar":"Vložit konec stránky"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"pastetext":{"button":"Vložit jako čistý text","title":"Vložit jako čistý text"},"removeformat":{"toolbar":"Odstranit formátování"},"save":{"toolbar":"Uložit"},"scayt":{"btn_about":"O aplikaci SCAYT","btn_dictionaries":"Slovníky","btn_disable":"Vypnout SCAYT","btn_enable":"Zapnout SCAYT","btn_langs":"Jazyky","btn_options":"Nastavení","text_title":"Kontrola pravopisu během psaní (SCAYT)"},"selectall":{"toolbar":"Vybrat vše"},"showblocks":{"toolbar":"Ukázat bloky"},"smiley":{"options":"Nastavení smajlíků","title":"Vkládání smajlíků","toolbar":"Smajlíci"},"sourcearea":{"toolbar":"Zdroj"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"templates":{"button":"Šablony","emptyListMsg":"(Není definována žádná šablona)","insertOption":"Nahradit aktuální obsah","options":"Nastavení šablon","selectPromptMsg":"Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):","title":"Šablony obsahu"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"undo":{"redo":"Znovu","undo":"Zpět"},"wsc":{"btnIgnore":"Přeskočit","btnIgnoreAll":"Přeskakovat vše","btnReplace":"Zaměnit","btnReplaceAll":"Zaměňovat vše","btnUndo":"Zpět","changeTo":"Změnit na","errorLoading":"Chyba nahrávání služby aplikace z: %s.","ieSpellDownload":"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?","manyChanges":"Kontrola pravopisu dokončena: %1 slov změněno","noChanges":"Kontrola pravopisu dokončena: Beze změn","noMispell":"Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny","noSuggestions":"- žádné návrhy -","notAvailable":"Omlouváme se, ale služba nyní není dostupná.","notInDic":"Není ve slovníku","oneChange":"Kontrola pravopisu dokončena: Jedno slovo změněno","progress":"Probíhá kontrola pravopisu...","title":"Kontrola pravopisu","toolbar":"Zkontrolovat pravopis"},"youtube":{"button":"Vložit video YouTube","title":"Vložit video YouTube","txtEmbed":"Zde vložte kód pro vložení","txtUrl":"Vložte adresu URL videa YouTube","txtWidth":"Šířka","txtHeight":"Výška","chkRelated":"Po dohrání videa zobrazit navrhovaná videa","txtStartAt":"Začít přehrávat v čase (ss nebo mm:ss nebo hh:mm:ss)","chkPrivacy":"Povolit režim s rozšířeným soukromím","chkOlderCode":"Použít starý kód pro vložení","chkAutoplay":"Automatické spuštění přehrávání","noCode":"Musíte vložit kód pro vložení nebo adresu URL","invalidEmbed":"Vložený kód pro vložení zřejmě není platný","invalidUrl":"Zadaná adresa URL zřejmě není platná","or":"nebo","noWidth":"Musíte zadat šířku","invalidWidth":"Zadejte platnou šířku","noHeight":"Musíte zadat výšku","invalidHeight":"Zadejte platnou výšku","invalidTime":"Zadejte platný počáteční čas","txtResponsive":"Responzivní design (ignorovat výšku a šířku, uzpůsobit šířce)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/cy.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['cy']={"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignJustify":"Unioni","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"Ynghylch CKEditor","help":"Gwirio $1 am gymorth.","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:","title":"Ynghylch CKEditor","userGuide":"Canllawiau Defnyddiwr CKEditor"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"bidi":{"ltr":"Cyfeiriad testun o'r chwith i'r dde","rtl":"Cyfeiriad testun o'r dde i'r chwith"},"blockquote":{"toolbar":"Dyfyniad bloc"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"codemirror":{"toolbar":"HTML","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Awtomatig","bgColorTitle":"Lliw Cefndir","colors":{"000":"Du","800000":"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo","696969":"Llwyd Tywyll","B22222":"Bric Tân","A52A2A":"Brown","DAA520":"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig","800080":"Porffor","808080":"Llwyd","F00":"Coch","FF8C00":"Oren Tywyll","FFD700":"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas","EE82EE":"Fioled","A9A9A9":"Llwyd Pwl","FFA07A":"Samwn Golau","FFA500":"Oren","FFFF00":"Melyn","00FF00":"Leim","AFEEEE":"Gwyrddlas Golau","ADD8E6":"Glas Golau","DDA0DD":"Eirinen","D3D3D3":"Llwyd Golau","FFF0F5":"Gwrid Lafant","FAEBD7":"Gwyn Hynafol","FFFFE0":"Melyn Golau","F0FFF0":"Melwn Gwyrdd Golau","F0FFFF":"Aswr","F0F8FF":"Glas Alys","E6E6FA":"Lafant","FFF":"Gwyn","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Mwy o Liwiau...","panelTitle":"Lliwiau","textColorTitle":"Lliw Testun"},"colordialog":{"clear":"Clirio","highlight":"Uwcholeuo","options":"Opsiynau Lliw","selected":"Lliw a Ddewiswyd","title":"Dewis lliw"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Teitl Cynghorol","cssClassInputLabel":"Dosbarthiadau Ffeil Arddull","edit":"Golygu Div","inlineStyleInputLabel":"Arddull Mewn Llinell","langDirLTRLabel":"Chwith i'r Dde (LTR)","langDirLabel":"Cyfeiriad yr Iaith","langDirRTLLabel":"Dde i'r Chwith (RTL)","languageCodeInputLabel":" Cod Iaith","remove":"Tynnu Div","styleSelectLabel":"Arddull","title":"Creu Cynhwysydd Div","toolbar":"Creu Cynhwysydd Div"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"find":{"find":"Chwilio","findOptions":"Opsiynau Chwilio","findWhat":"Chwilio'r term:","matchCase":"Cydweddu'r cas","matchCyclic":"Cydweddu'n gylchol","matchWord":"Cydweddu gair cyfan","notFoundMsg":"Nid oedd y testun wedi'i ddarganfod.","replace":"Amnewid Un","replaceAll":"Amnewid Pob","replaceSuccessMsg":"Amnewidiwyd %1 achlysur.","replaceWith":"Amnewid gyda:","title":"Chwilio ac Amnewid"},"flash":{"access":"Mynediad Sgript","accessAlways":"Pob amser","accessNever":"Byth","accessSameDomain":"R'un parth","alignAbsBottom":"Gwaelod Abs","alignAbsMiddle":"Canol Abs","alignBaseline":"Baslinell","alignTextTop":"Testun Top","bgcolor":"Lliw cefndir","chkFull":"Caniatàu Sgrin Llawn","chkLoop":"Lwpio","chkMenu":"Galluogi Dewislen Flash","chkPlay":"AwtoChwarae","flashvars":"Newidynnau ar gyfer Flash","hSpace":"BwlchLl","properties":"Priodweddau Flash","propertiesTab":"Priodweddau","quality":"Ansawdd","qualityAutoHigh":"Uchel Awto","qualityAutoLow":"Isel Awto","qualityBest":"Gorau","qualityHigh":"Uchel","qualityLow":"Isel","qualityMedium":"Canolig","scale":"Graddfa","scaleAll":"Dangos pob","scaleFit":"Ffit Union","scaleNoBorder":"Dim Ymyl","title":"Priodweddau Flash","vSpace":"BwlchF","validateHSpace":"Rhaid i'r BwlchLl fod yn rhif.","validateSrc":"Ni all yr URL fod yn wag.","validateVSpace":"Rhaid i'r BwlchF fod yn rhif.","windowMode":"Modd ffenestr","windowModeOpaque":"Afloyw","windowModeTransparent":"Tryloyw","windowModeWindow":"Ffenestr"},"font":{"fontSize":{"label":"Maint","voiceLabel":"Maint y Ffont","panelTitle":"Maint y Ffont"},"label":"Ffont","panelTitle":"Enw'r Ffont","voiceLabel":"Ffont"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"forms":{"button":{"title":"Priodweddau Botymau","text":"Testun (Gwerth)","type":"Math","typeBtn":"Botwm","typeSbm":"Anfon","typeRst":"Ailosod"},"checkboxAndRadio":{"checkboxTitle":"Priodweddau Blwch Ticio","radioTitle":"Priodweddau Botwm Radio","value":"Gwerth","selected":"Dewiswyd","required":"Required"},"form":{"title":"Priodweddau Ffurflen","menu":"Priodweddau Ffurflen","action":"Gweithred","method":"Dull","encoding":"Amgodio"},"hidden":{"title":"Priodweddau Maes Cudd","name":"Enw","value":"Gwerth"},"select":{"title":"Priodweddau Maes Dewis","selectInfo":"Gwyb Dewis","opAvail":"Opsiynau ar Gael","value":"Gwerth","size":"Maint","lines":"llinellau","chkMulti":"Caniatàu aml-ddewisiadau","required":"Required","opText":"Testun","opValue":"Gwerth","btnAdd":"Ychwanegu","btnModify":"Newid","btnUp":"Lan","btnDown":"Lawr","btnSetValue":"Gosod fel gwerth a ddewiswyd","btnDelete":"Dileu"},"textarea":{"title":"Priodweddau Ardal Testun","cols":"Colofnau","rows":"Rhesi"},"textfield":{"title":"Priodweddau Maes Testun","name":"Enw","value":"Gwerth","charWidth":"Lled Nod","maxChars":"Uchafswm y Nodau","required":"Required","type":"Math","typeText":"Testun","typePass":"Cyfrinair","typeEmail":"Ebost","typeSearch":"Chwilio","typeTel":"Rhif Ffôn","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"iframe":{"border":"Dangos ymyl y ffrâm","noUrl":"Rhowch URL yr iframe","scrolling":"Galluogi bariau sgrolio","title":"Priodweddau IFrame","toolbar":"IFrame"},"image":{"alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"justify":{"block":"Unioni","center":"Alinio i'r Canol","left":"Alinio i'r Chwith","right":"Alinio i'r Dde"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","download":"Force Download","displayText":"Display Text","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"liststyle":{"armenian":"Rhifo Armeneg","bulletedTitle":"Priodweddau Rhestr Fwled","circle":"Cylch","decimal":"Degol (1, 2, 3, ayyb.)","decimalLeadingZero":"Degol â sero arweiniol (01, 02, 03, ayyb.)","disc":"Disg","georgian":"Rhifau Sioraidd (an, ban, gan, ayyb.)","lowerAlpha":"Alffa Is (a, b, c, d, e, ayyb.)","lowerGreek":"Groeg Is (alpha, beta, gamma, ayyb.)","lowerRoman":"Rhufeinig Is (i, ii, iii, iv, v, ayyb.)","none":"Dim","notset":"<heb osod>","numberedTitle":"Priodweddau Rhestr Rifol","square":"Sgwâr","start":"Dechrau","type":"Math","upperAlpha":"Alffa Uwch (A, B, C, D, E, ayyb.)","upperRoman":"Rhufeinig Uwch (I, II, III, IV, V, ayyb.)","validateStartNumber":"Rhaid bod y rhif cychwynnol yn gyfanrif."},"magicline":{"title":"Mewnosod paragraff yma"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"widget":{"move":"Clcio a llusgo i symud","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Toriad Tudalen","toolbar":"Mewnosod Toriad Tudalen i Argraffu"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"removeformat":{"toolbar":"Tynnu Fformat"},"save":{"toolbar":"Cadw"},"scayt":{"btn_about":"Ynghylch SCAYT","btn_dictionaries":"Geiriaduron","btn_disable":"Analluogi SCAYT","btn_enable":"Galluogi SCAYT","btn_langs":"Ieithoedd","btn_options":"Opsiynau","text_title":"Gwirio'r Sillafu Wrth Deipio"},"selectall":{"toolbar":"Dewis Popeth"},"showblocks":{"toolbar":"Dangos Blociau"},"smiley":{"options":"Opsiynau Gwenogluniau","title":"Mewnosod Gwenoglun","toolbar":"Gwenoglun"},"sourcearea":{"toolbar":"HTML"},"sourcedialog":{"toolbar":"HTML","title":"HTML"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"templates":{"button":"Templedi","emptyListMsg":"(Dim templedi wedi'u diffinio)","insertOption":"Amnewid y cynnwys go iawn","options":"Opsiynau Templedi","selectPromptMsg":"Dewiswch dempled i'w agor yn y golygydd","title":"Templedi Cynnwys"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"wsc":{"btnIgnore":"Anwybyddu Un","btnIgnoreAll":"Anwybyddu Pob","btnReplace":"Amnewid Un","btnReplaceAll":"Amnewid Pob","btnUndo":"Dadwneud","changeTo":"Newid i","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?","manyChanges":"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair","noChanges":"Gwirio sillafu wedi gorffen: Dim newidiadau","noMispell":"Gwirio sillafu wedi gorffen: Dim camsillaf.","noSuggestions":"- Dim awgrymiadau -","notAvailable":"Nid yw'r gwasanaeth hwn ar gael yn bresennol.","notInDic":"Nid i'w gael yn y geiriadur","oneChange":"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair","progress":"Gwirio sillafu yn ar y gweill...","title":"Gwirio Sillafu","toolbar":"Gwirio Sillafu"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/da.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['da']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignJustify":"Lige margener","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"End","36":"Home","46":"Slet","224":"Command"},"keyboardShortcut":"Tastatur genvej"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor","help":"Se $1 for at få hjælp.","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):","title":"Om CKEditor","userGuide":"CKEditor-brugermanual"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"bidi":{"ltr":"Tekstretning fra venstre til højre","rtl":"Tekstretning fra højre til venstre"},"blockquote":{"toolbar":"Blokcitat"},"button":{"selectedLabel":"%1 (Valgt)"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"codemirror":{"toolbar":"Kilde","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Baggrundsfarve","colors":{"000":"Sort","800000":"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Mørkegrå","B22222":"Scarlet / Rød","A52A2A":"Brun","DAA520":"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå","800080":"Lilla","808080":"Grå","F00":"Rød","FF8C00":"Mørk orange","FFD700":"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå","EE82EE":"Violet","A9A9A9":"Matgrå","FFA07A":"Laksefarve","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Mat tyrkis","ADD8E6":"Lyseblå","DDA0DD":"Plum","D3D3D3":"Lysegrå","FFF0F5":"Lavender Blush","FAEBD7":"Antikhvid","FFFFE0":"Lysegul","F0FFF0":"Gul / Beige","F0FFFF":"Himmeblå","F0F8FF":"Alice blue","E6E6FA":"Lavendel","FFF":"Hvid","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Flere farver...","panelTitle":"Farver","textColorTitle":"Tekstfarve"},"colordialog":{"clear":"Nulstil","highlight":"Markér","options":"Farvemuligheder","selected":"Valgt farve","title":"Vælg farve"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Vejledende titel","cssClassInputLabel":"Typografiark","edit":"Rediger Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Venstre til højre (LTR)","langDirLabel":"Sprogretning","langDirRTLLabel":"Højre til venstre (RTL)","languageCodeInputLabel":" Sprogkode","remove":"Slet Div","styleSelectLabel":"Style","title":"Opret Div Container","toolbar":"Opret Div Container"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"find":{"find":"Søg","findOptions":"Find muligheder","findWhat":"Søg efter:","matchCase":"Forskel på store og små bogstaver","matchCyclic":"Match cyklisk","matchWord":"Kun hele ord","notFoundMsg":"Søgeteksten blev ikke fundet","replace":"Erstat","replaceAll":"Erstat alle","replaceSuccessMsg":"%1 forekomst(er) erstattet.","replaceWith":"Erstat med:","title":"Søg og erstat"},"flash":{"access":"Scriptadgang","accessAlways":"Altid","accessNever":"Aldrig","accessSameDomain":"Samme domæne","alignAbsBottom":"Absolut nederst","alignAbsMiddle":"Absolut centreret","alignBaseline":"Grundlinje","alignTextTop":"Toppen af teksten","bgcolor":"Baggrundsfarve","chkFull":"Tillad fuldskærm","chkLoop":"Gentagelse","chkMenu":"Vis Flash-menu","chkPlay":"Automatisk afspilning","flashvars":"Variabler for Flash","hSpace":"Vandret margen","properties":"Egenskaber for Flash","propertiesTab":"Egenskaber","quality":"Kvalitet","qualityAutoHigh":"Auto høj","qualityAutoLow":"Auto lav","qualityBest":"Bedste","qualityHigh":"Høj","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skalér","scaleAll":"Vis alt","scaleFit":"Tilpas størrelse","scaleNoBorder":"Ingen ramme","title":"Egenskaber for Flash","vSpace":"Lodret margen","validateHSpace":"Vandret margen skal være et tal.","validateSrc":"Indtast hyperlink URL!","validateVSpace":"Lodret margen skal være et tal.","windowMode":"Vinduestilstand","windowModeOpaque":"Gennemsigtig (opaque)","windowModeTransparent":"Transparent","windowModeWindow":"Vindue"},"font":{"fontSize":{"label":"Skriftstørrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrifttype","panelTitle":"Skrifttype","voiceLabel":"Skrifttype"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"forms":{"button":{"title":"Egenskaber for knap","text":"Tekst","type":"Type","typeBtn":"Knap","typeSbm":"Send","typeRst":"Nulstil"},"checkboxAndRadio":{"checkboxTitle":"Egenskaber for afkrydsningsfelt","radioTitle":"Egenskaber for alternativknap","value":"Værdi","selected":"Valgt","required":"Påkrævet"},"form":{"title":"Egenskaber for formular","menu":"Egenskaber for formular","action":"Handling","method":"Metode","encoding":"Kodning (encoding)"},"hidden":{"title":"Egenskaber for skjult felt","name":"Navn","value":"Værdi"},"select":{"title":"Egenskaber for liste","selectInfo":"Generelt","opAvail":"Valgmuligheder","value":"Værdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillad flere valg","required":"Påkrævet","opText":"Tekst","opValue":"Værdi","btnAdd":"Tilføj","btnModify":"Redigér","btnUp":"Op","btnDown":"Ned","btnSetValue":"Sæt som valgt","btnDelete":"Slet"},"textarea":{"title":"Egenskaber for tekstboks","cols":"Kolonner","rows":"Rækker"},"textfield":{"title":"Egenskaber for tekstfelt","name":"Navn","value":"Værdi","charWidth":"Bredde (tegn)","maxChars":"Max. antal tegn","required":"Påkrævet","type":"Type","typeText":"Tekst","typePass":"Adgangskode","typeEmail":"E-mail","typeSearch":"Søg","typeTel":"Telefon nummer","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"iframe":{"border":"Vis kant på rammen","noUrl":"Venligst indsæt URL på iframen","scrolling":"Aktiver scrollbars","title":"Iframe egenskaber","toolbar":"Iframe"},"image":{"alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"justify":{"block":"Lige margener","center":"Centreret","left":"Venstrestillet","right":"Højrestillet"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","download":"Force Download","displayText":"Display Text","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"liststyle":{"armenian":"Armensk nummering","bulletedTitle":"Værdier for cirkelpunktopstilling","circle":"Cirkel","decimal":"Decimal (1, 2, 3, osv.)","decimalLeadingZero":"Decimaler med 0 først (01, 02, 03, etc.)","disc":"Værdier for diskpunktopstilling","georgian":"Georgiansk nummering (an, ban, gan, etc.)","lowerAlpha":"Små alfabet (a, b, c, d, e, etc.)","lowerGreek":"Små græsk (alpha, beta, gamma, etc.)","lowerRoman":"Små romerske (i, ii, iii, iv, v, etc.)","none":"Ingen","notset":"<ikke defineret>","numberedTitle":"Egenskaber for nummereret liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Store alfabet (A, B, C, D, E, etc.)","upperRoman":"Store romerske (I, II, III, IV, V, etc.)","validateStartNumber":"Den nummererede liste skal starte med et rundt nummer"},"magicline":{"title":"Indsæt afsnit"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Sideskift","toolbar":"Indsæt sideskift"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Gem"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøger","btn_disable":"Deaktivér SCAYT","btn_enable":"Aktivér SCAYT","btn_langs":"Sprog","btn_options":"Indstillinger","text_title":"Stavekontrol mens du skriver"},"selectall":{"toolbar":"Vælg alt"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"smiley":{"options":"Smileymuligheder","title":"Vælg smiley","toolbar":"Smiley"},"sourcearea":{"toolbar":"Kilde"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"templates":{"button":"Skabeloner","emptyListMsg":"(Der er ikke defineret nogen skabelon)","insertOption":"Erstat det faktiske indhold","options":"Skabelon muligheder","selectPromptMsg":"Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):","title":"Indholdsskabeloner"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"wsc":{"btnIgnore":"Ignorér","btnIgnoreAll":"Ignorér alle","btnReplace":"Erstat","btnReplaceAll":"Erstat alle","btnUndo":"Tilbage","changeTo":"Forslag","errorLoading":"Fejl ved indlæsning af host: %s.","ieSpellDownload":"Stavekontrol ikke installeret. Vil du installere den nu?","manyChanges":"Stavekontrol færdig: %1 ord ændret","noChanges":"Stavekontrol færdig: Ingen ord ændret","noMispell":"Stavekontrol færdig: Ingen fejl fundet","noSuggestions":"(ingen forslag)","notAvailable":"Stavekontrol er desværre ikke tilgængelig.","notInDic":"Ikke i ordbogen","oneChange":"Stavekontrol færdig: Et ord ændret","progress":"Stavekontrollen arbejder...","title":"Stavekontrol","toolbar":"Stavekontrol"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/de.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignJustify":"Blocksatz","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leer","35":"Ende","36":"Pos1","46":"Entfernen","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfen Sie $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"bidi":{"ltr":"Leserichtung von Links nach Rechts","rtl":"Leserichtung von Rechts nach Links"},"blockquote":{"toolbar":"Zitatblock"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"codemirror":{"toolbar":"Quellcode","searchCode":"Quellcode durchsuchen","autoFormat":"Auswahl formatieren","commentSelectedRange":"Auswahl auskommentieren","uncommentSelectedRange":"Auskommentierung entfernen","autoCompleteToggle":"HTML Tag Autovervollständigen de-/aktivieren"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Hintergrundfarbe","colors":{"000":"Schwarz","800000":"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Marineblau","4B0082":"Indigo","696969":"Dunkelgrau","B22222":"Ziegelrot","A52A2A":"Braun","DAA520":"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Mittelblau","800080":"Lila","808080":"Grau","F00":"Rot","FF8C00":"Dunkelorange","FFD700":"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau","EE82EE":"Violett","A9A9A9":"Dunkelgrau","FFA07A":"Helles Lachsrosa","FFA500":"Orange","FFFF00":"Gelb","00FF00":"Lime","AFEEEE":"Blasstürkis","ADD8E6":"Hellblau","DDA0DD":"Pflaumenblau","D3D3D3":"Hellgrau","FFF0F5":"Lavendel","FAEBD7":"Antik Weiß","FFFFE0":"Hellgelb","F0FFF0":"Honigtau","F0FFFF":"Azurblau","F0F8FF":"Alice Blau","E6E6FA":"Lavendel","FFF":"Weiß","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Weitere Farben...","panelTitle":"Farben","textColorTitle":"Textfarbe"},"colordialog":{"clear":"Entfernen","highlight":"Hervorheben","options":"Farboptionen","selected":"Ausgewählte Farbe","title":"Farbe auswählen"},"contextmenu":{"options":"Kontextmenüoptionen"},"div":{"IdInputLabel":"Kennung","advisoryTitleInputLabel":"Tooltip","cssClassInputLabel":"Formatvorlagenklasse","edit":"Div bearbeiten","inlineStyleInputLabel":"Inline Stil","langDirLTRLabel":"Links nach Rechs (LTR)","langDirLabel":"Sprachrichtung","langDirRTLLabel":"Rechs nach Links (RTL)","languageCodeInputLabel":"Sprachcode","remove":"Div entfernen","styleSelectLabel":"Stil","title":"Div Container erzeugen","toolbar":"Div Container erzeugen"},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"fakeobjects":{"anchor":"Anker","flash":"Flash-Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"find":{"find":"Suchen","findOptions":"Suchoptionen","findWhat":"Suchen nach:","matchCase":"Groß-/Kleinschreibung beachten","matchCyclic":"Zyklische Suche","matchWord":"Nur ganzes Wort suchen","notFoundMsg":"Der angegebene Text wurde nicht gefunden.","replace":"Ersetzen","replaceAll":"Alle ersetzen","replaceSuccessMsg":"%1 Vorkommen ersetzt.","replaceWith":"Ersetzen mit:","title":"Suchen und Ersetzen"},"flash":{"access":"Skriptzugriff","accessAlways":"Immer","accessNever":"Nie","accessSameDomain":"Gleiche Domain","alignAbsBottom":"Abs Unten","alignAbsMiddle":"Abs Mitte","alignBaseline":"Basislinie","alignTextTop":"Text oben","bgcolor":"Hintergrundfarbe","chkFull":"Vollbildmodus erlauben","chkLoop":"Endlosschleife","chkMenu":"Flash-Menü aktivieren","chkPlay":"Automatisch Abspielen","flashvars":"Variablen für Flash","hSpace":"Horizontal-Abstand","properties":"Flash-Eigenschaften","propertiesTab":"Eigenschaften","quality":"Qualität","qualityAutoHigh":"Auto Hoch","qualityAutoLow":"Auto Niedrig","qualityBest":"Beste","qualityHigh":"Hoch","qualityLow":"Niedrig","qualityMedium":"Mittel","scale":"Skalierung","scaleAll":"Alles anzeigen","scaleFit":"Passgenau","scaleNoBorder":"Ohne Rand","title":"Flash-Eigenschaften","vSpace":"Vertikal-Abstand","validateHSpace":"HSpace muss eine Zahl sein.","validateSrc":"URL darf nicht leer sein.","validateVSpace":"VSpace muss eine Zahl sein.","windowMode":"Fenstermodus","windowModeOpaque":"Deckend","windowModeTransparent":"Transparent","windowModeWindow":"Fenster"},"font":{"fontSize":{"label":"Größe","voiceLabel":"Schrifgröße","panelTitle":"Schriftgröße"},"label":"Schriftart","panelTitle":"Schriftartname","voiceLabel":"Schriftart"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"forms":{"button":{"title":"Schaltflächeneigenschaften","text":"Text (Wert)","type":"Typ","typeBtn":"Button","typeSbm":"Absenden","typeRst":"Zurücksetzen"},"checkboxAndRadio":{"checkboxTitle":"Kontrollboxeigenschaften","radioTitle":"Optionsfeldeigenschaften","value":"Wert","selected":"Ausgewählt","required":"Erforderlich"},"form":{"title":"Formulareigenschaften","menu":"Formulareigenschaften","action":"Aktion","method":"Methode","encoding":"Kodierung"},"hidden":{"title":"Versteckte Feldeigenschaften","name":"Name","value":"Wert"},"select":{"title":"Auswahlfeldeigenschaften","selectInfo":"Info auswählen","opAvail":"Verfügbare Optionen","value":"Wert","size":"Größe","lines":"Linien","chkMulti":"Mehrfachauswahl erlauben","required":"Erforderlich","opText":"Text","opValue":"Wert","btnAdd":"Hinzufügen","btnModify":"Ändern","btnUp":"Hoch","btnDown":"Runter","btnSetValue":"Als ausgewählten Wert festlegen","btnDelete":"Entfernen"},"textarea":{"title":"Textfeldeigenschaften","cols":"Spalten","rows":"Reihen"},"textfield":{"title":"Textfeldeigenschaften","name":"Name","value":"Wert","charWidth":"Zeichenbreite","maxChars":"Max. Zeichen","required":"Erforderlich","type":"Typ","typeText":"Text","typePass":"Passwort","typeEmail":"E-mail","typeSearch":"Suche","typeTel":"Telefonnummer","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"iframe":{"border":"Rahmen anzeigen","noUrl":"Bitte geben Sie die IFrame-URL an","scrolling":"Rollbalken anzeigen","title":"IFrame-Eigenschaften","toolbar":"IFrame"},"image":{"alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?","infoTab":"Bildinfo","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","resetSize":"Größe zurücksetzen","title":"Bildeigenschaften","titleButton":"Bildschaltflächeneigenschaften","upload":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muss eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muss eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muss eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"justify":{"block":"Blocksatz","center":"Zentriert","left":"Linksbündig","right":"Rechtsbündig"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker","menu":"Anker bearbeiten","title":"Ankereigenschaften","name":"Ankername","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"Nach Elementkennung","anchorName":"Nach Ankername","charset":"Verknüpfter Ressourcenzeichensatz","cssClasses":"Formatvorlagenklasse","download":"Herunterladen erzwingen","displayText":"Anzeigetext","emailAddress":"E-Mail-Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Kennung","info":"Linkinfo","langCode":"Sprachcode","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link bearbeiten","name":"Name","noAnchors":"(Keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie E-Mail-Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenstereigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adressleiste","popupMenuBar":"Menüleiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Werkzeugleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"liststyle":{"armenian":"Armenische Nummerierung","bulletedTitle":"Aufzählungslisteneigenschaften","circle":"Ring","decimal":"Dezimal (1, 2, 3, etc.)","decimalLeadingZero":"Dezimal mit führender Null (01, 02, 03, usw.)","disc":"Kreis","georgian":"Georgische Nummerierung (an, ban, gan, usw.)","lowerAlpha":"Klein Alpha (a, b, c, d, e, usw.)","lowerGreek":"Klein griechisch (alpha, beta, gamma, usw.)","lowerRoman":"Klein römisch (i, ii, iii, iv, v, usw.)","none":"Keine","notset":"<nicht festgelegt>","numberedTitle":"Nummerierte Listeneigenschaften","square":"Quadrat","start":"Start","type":"Typ","upperAlpha":"Groß alpha (A, B, C, D, E, etc.)","upperRoman":"Groß römisch (I, II, III, IV, V, usw.)","validateStartNumber":"Listenstartnummer muss eine ganze Zahl sein."},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"oembed":{"title":"Medien Inhalt einbinden (Bilder, Video, Inhalt)","button":"Medien Inhalt von Verschiedenen Seiten einbinden","pasteUrl":"Fügen Sie eine Url (Gekürzte Urls werden auch erkannt) ein von einer Seite die Unterstützt wird (z.B.: YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.) ...","invalidUrl":"Sie müssem eine korrekte URL an!","noEmbedCode":"Kein embed Code gefunden, oder Seite wird nicht Unterstützt!","url":"URL:","width":"Breite:","height":"Höhe:","widthTitle":"Breite für den eingebundenen Inhalt","heightTitle":"Höhe für den eingebundenen Inhalt","maxWidth":"Max. Breite:","maxHeight":"Max. Höhe:","maxWidthTitle":"Maximale Breite für den eingebundenen Inhalt","maxHeightTitle":"Maximale Höhe für den eingebundenen Inhalt","resizeType":"Größenveränderungsmodus (Nur Video's):","none":"None","noresize":"Keine Veränderung (Standardgröße)","responsive":"Responsive","custom":"Eigene Größe","noVimeo":"Der Eigentümber dieses Videos hat Domain einschränkungen für dieses Video gesetzt das Video kann nicht in die Webseite eingebunden werden.","Error":"Inhalt konnte nicht gefunden werden, bitte Versuchen sie eine Andere URL."},"pagebreak":{"alt":"Seitenumbruch","toolbar":"Seitenumbruch zum Drucken einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"pastetext":{"button":"Als Klartext einfügen","title":"Als Klartext einfügen"},"removeformat":{"toolbar":"Formatierung entfernen"},"save":{"toolbar":"Speichern"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":"Rechtschreibprüfung während der Texteingabe (SCAYT)"},"selectall":{"toolbar":"Alles auswählen"},"showblocks":{"toolbar":"Blöcke anzeigen"},"smiley":{"options":"Smiley-Optionen","title":"Smiley auswählen","toolbar":"Smiley"},"sourcearea":{"toolbar":"Quellcode"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"syntaxhighlight":{"title":"Einen Quelltextabschnitt einfügen oder aktualisieren","contextTitle":"Quelltext bearbeiten","sourceTab":"Quelltext","langLbl":"Sprache auswählen","sourceTextareaEmptyError":"Das Quelltext-Feld darf nicht leer sein.","advancedTab":"Erweitert","hideGutter":"Verstecke Seitenleiste","hideGutterLbl":"Verstecke Seitenleiste und Zeilennummern.","hideControls":"Verstecke Kontrollfelder","hideControlsLbl":"Verstecke die Menüleiste über dem Quelltextblock.","collapse":"Einklappen","collapseLbl":"Klappe den Quelltextblock standartmäßig ein. (Kontrollfelder müssen aktiviert werden)","codeTitleLbl":"Einen Code-Titel verwenden","showColumns":"Spalten anzeigen","showColumnsLbl":"Zeige Spalten jeder Zeile in der Kopfzeile an.","lineWrap":"Zeilenumbruch","lineWrapLbl":"Deaktiviere Zeilenumbrüche.","lineCount":"Nummerierung der ersten Zeile (falls ungleich 1)","highlight":"Zeilen hervorheben","highlightLbl":"Geben Sie kommasepariert die Zeilen ein, die sie hervorheben wollen, z.B. <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Rahmengröße","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"templates":{"button":"Vorlagen","emptyListMsg":"(Keine Vorlagen definiert)","insertOption":"Aktuelle Inhalte ersetzen","options":"Vorlagenoptionen","selectPromptMsg":"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen","title":"Inhaltsvorlagen"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"},"youtube":{"button":"YouTube Video einbinden","title":"YouTube Video einbinden","txtEmbed":"Embed Code hier einfügen","txtUrl":"YouTube Video URL hier einfügen","txtWidth":"Breite","txtHeight":"Höhe","chkRelated":"Vorschläge am Ende des Videos einblenden","txtStartAt":"Start bei Position (ss oder mm:ss oder hh:mm:ss)","chkPrivacy":"Erweiterten Datenschutzmodus aktivieren","chkOlderCode":"Benutze alten Embed Code","chkAutoplay":"Autoplay","noCode":"Sie müssen einen Embed Code oder URL angeben","invalidEmbed":"Der angegebene Embed Code scheint nicht gültig zu sein.","invalidUrl":"Die angegebene URL scheint nicht gültig zu sein.","or":"oder","noWidth":"Geben Sie eine Breite an","invalidWidth":"Geben Sie eine gültige Breite an","noHeight":"Geben Sie eine Höhe an","invalidHeight":"Geben Sie eine gültige Höhe an","invalidTime":"Geben Sie eine gültige Startzeit an","txtResponsive":"Automatische Größe (ignoriert Breite und Höhe)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/en.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"codemirror":{"toolbar":"Source","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"sourcearea":{"toolbar":"Source"},"sourcedialog":{"toolbar":"Source","title":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/es.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['es']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Space","35":"Fin","36":"Inicio","46":"Suprimir","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor","help":"Lea la  $1 para resolver sus dudas.","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:","title":"Acerca de CKEditor","userGuide":"Guía de usuario de CKEditor"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"bidi":{"ltr":"Dirección del texto de izquierda a derecha","rtl":"Dirección del texto de derecha a izquierda"},"blockquote":{"toolbar":"Cita"},"button":{"selectedLabel":"%1 (Seleccionado)"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"codemirror":{"toolbar":"Fuente HTML","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de Fondo","colors":{"000":"Negro","800000":"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil","696969":"Gris oscuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro","800080":"Púrpura","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa claro","ADD8E6":"Azul claro","DDA0DD":"Violeta claro","D3D3D3":"Gris claro","FFF0F5":"Lavanda rojizo","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Miel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Blanco","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Más Colores...","panelTitle":"Colores","textColorTitle":"Color de Texto"},"colordialog":{"clear":"Borrar","highlight":"Muestra","options":"Opciones de colores","selected":"Elegido","title":"Elegir color"},"contextmenu":{"options":"Opciones del menú contextual"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Clase de hoja de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo","langDirLTRLabel":"Izquierda a Derecha (LTR)","langDirLabel":"Orientación","langDirRTLLabel":"Derecha a Izquierda (RTL)","languageCodeInputLabel":" Codigo de idioma","remove":"Quitar Div","styleSelectLabel":"Estilo","title":"Crear contenedor DIV","toolbar":"Crear contenedor DIV"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"find":{"find":"Buscar","findOptions":"Opciones de búsqueda","findWhat":"Texto a buscar:","matchCase":"Coincidir may/min","matchCyclic":"Buscar en todo el contenido","matchWord":"Coincidir toda la palabra","notFoundMsg":"El texto especificado no ha sido encontrado.","replace":"Reemplazar","replaceAll":"Reemplazar Todo","replaceSuccessMsg":"La expresión buscada ha sido reemplazada %1 veces.","replaceWith":"Reemplazar con:","title":"Buscar y Reemplazar"},"flash":{"access":"Acceso de scripts","accessAlways":"Siempre","accessNever":"Nunca","accessSameDomain":"Mismo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Línea de base","alignTextTop":"Tope del texto","bgcolor":"Color de Fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar Menú Flash","chkPlay":"Autoejecución","flashvars":"Opciones","hSpace":"Esp.Horiz","properties":"Propiedades de Flash","propertiesTab":"Propiedades","quality":"Calidad","qualityAutoHigh":"Auto Alta","qualityAutoLow":"Auto Baja","qualityBest":"La mejor","qualityHigh":"Alta","qualityLow":"Baja","qualityMedium":"Media","scale":"Escala","scaleAll":"Mostrar todo","scaleFit":"Ajustado","scaleNoBorder":"Sin Borde","title":"Propiedades de Flash","vSpace":"Esp.Vert","validateHSpace":"Esp.Horiz debe ser un número.","validateSrc":"Por favor escriba el vínculo URL","validateVSpace":"Esp.Vert debe ser un número.","windowMode":"WindowMode","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Ventana"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de fuente","panelTitle":"Tamaño"},"label":"Fuente","panelTitle":"Fuente","voiceLabel":"Fuente"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"forms":{"button":{"title":"Propiedades de Botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Boton","typeSbm":"Enviar","typeRst":"Reestablecer"},"checkboxAndRadio":{"checkboxTitle":"Propiedades de Casilla","radioTitle":"Propiedades de Botón de Radio","value":"Valor","selected":"Seleccionado","required":"Requerido"},"form":{"title":"Propiedades de Formulario","menu":"Propiedades de Formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades de Campo Oculto","name":"Nombre","value":"Valor"},"select":{"title":"Propiedades de Campo de Selección","selectInfo":"Información","opAvail":"Opciones disponibles","value":"Valor","size":"Tamaño","lines":"Lineas","chkMulti":"Permitir múltiple selección","required":"Requerido","opText":"Texto","opValue":"Valor","btnAdd":"Agregar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Bajar","btnSetValue":"Establecer como predeterminado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades de Area de Texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades de Campo de Texto","name":"Nombre","value":"Valor","charWidth":"Caracteres de ancho","maxChars":"Máximo caracteres","required":"Requerido","type":"Tipo","typeText":"Texto","typePass":"Contraseña","typeEmail":"Correo electrónico","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"iframe":{"border":"Mostrar borde del marco","noUrl":"Por favor, escriba la dirección del iframe","scrolling":"Activar barras de desplazamiento","title":"Propiedades de iframe","toolbar":"IFrame"},"image":{"alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"justify":{"block":"Justificado","center":"Centrar","left":"Alinear a Izquierda","right":"Alinear a Derecha"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","download":"Force Download","displayText":"Display Text","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"liststyle":{"armenian":"Numeración armenia","bulletedTitle":"Propiedades de viñetas","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal con cero inicial (01, 02, 03, etc.)","disc":"Disco","georgian":"Numeración georgiana (an, ban, gan, etc.)","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerGreek":"Letras griegas (alpha, beta, gamma, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ninguno","notset":"<sin establecer>","numberedTitle":"Propiedades de lista numerada","square":"Cuadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en mayúsculas  (A, B, C, D, E, etc.)","upperRoman":"Números romanos en mayúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"El Inicio debe ser un número entero."},"magicline":{"title":"Insertar párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Salto de página","toolbar":"Insertar Salto de Página"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"removeformat":{"toolbar":"Eliminar Formato"},"save":{"toolbar":"Guardar"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":"Comprobar Ortografía Mientras Escribe"},"selectall":{"toolbar":"Seleccionar Todo"},"showblocks":{"toolbar":"Mostrar bloques"},"smiley":{"options":"Opciones de emoticonos","title":"Insertar un Emoticon","toolbar":"Emoticonos"},"sourcearea":{"toolbar":"Fuente HTML"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"templates":{"button":"Plantillas","emptyListMsg":"(No hay plantillas definidas)","insertOption":"Reemplazar el contenido actual","options":"Opciones de plantillas","selectPromptMsg":"Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):","title":"Contenido de Plantillas"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"},"youtube":{"button":"Embed YouTube video","title":"Embed YouTube video","txtEmbed":"Pegar el código embed","txtUrl":"Pegar la URL al video de Youtube","txtWidth":"Anchura","txtHeight":"Altura","chkRelated":"Mostrar videos sugeridos al final de este video","txtStartAt":"Comenzar en (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Habilitar el modo privacy-enhanced","chkOlderCode":"Usar código embed viejo","chkAutoplay":"Autoplay","noCode":"Debes de introducir un código embed o URL","invalidEmbed":"El código embed introducido parece no ser valido","invalidUrl":"La URL introducida parece no ser valida","or":"o","noWidth":"Debes de dar la anchura","invalidWidth":"Da una anchura valida","noHeight":"Debes dar una altura valida","invalidHeight":"Da una altura valida","invalidTime":"Da un tiempo de valido","txtResponsive":"Hacer responsivo (ignorar anchura y altura, ajustar a la anchura)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/et.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['et']={"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignJustify":"Rööpjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"None","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditorist","help":"Abi jaoks vaata $1.","moreInfo":"Litsentsi andmed leiab meie veebilehelt:","title":"CKEditorist","userGuide":"CKEditori kasutusjuhendit"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"bidi":{"ltr":"Teksti suund vasakult paremale","rtl":"Teksti suund paremalt vasakule"},"blockquote":{"toolbar":"Blokktsitaat"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"codemirror":{"toolbar":"Lähtekood","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automaatne","bgColorTitle":"Tausta värv","colors":{"000":"Must","800000":"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine","696969":"Tumehall","B22222":"Šamottkivi","A52A2A":"Pruun","DAA520":"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine","800080":"Lilla","808080":"Hall","F00":"Punanae","FF8C00":"Tumeoranž","FFD700":"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine","00F":"Sinine","EE82EE":"Violetne","A9A9A9":"Tuhm hall","FFA07A":"Hele lõhe","FFA500":"Oranž","FFFF00":"Kollane","00FF00":"Lubja hall","AFEEEE":"Kahvatu türkiis","ADD8E6":"Helesinine","DDA0DD":"Ploomililla","D3D3D3":"Helehall","FFF0F5":"Lavendlipunane","FAEBD7":"Antiikvalge","FFFFE0":"Helekollane","F0FFF0":"Meloniroheline","F0FFFF":"Taevasinine","F0F8FF":"Beebisinine","E6E6FA":"Lavendel","FFF":"Valge","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Rohkem värve...","panelTitle":"Värvid","textColorTitle":"Teksti värv"},"colordialog":{"clear":"Eemalda","highlight":"Näidis","options":"Värvi valikud","selected":"Valitud värv","title":"Värvi valimine"},"contextmenu":{"options":"Kontekstimenüü valikud"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Soovitatav pealkiri","cssClassInputLabel":"Stiililehe klassid","edit":"Muuda Div","inlineStyleInputLabel":"Reasisene stiil","langDirLTRLabel":"Vasakult paremale (LTR)","langDirLabel":"Keele suund","langDirRTLLabel":"Paremalt vasakule (RTL)","languageCodeInputLabel":" Keelekood","remove":"Eemalda Div","styleSelectLabel":"Stiil","title":"Div-konteineri loomine","toolbar":"Div-konteineri loomine"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"find":{"find":"Otsi","findOptions":"Otsingu valikud","findWhat":"Otsitav:","matchCase":"Suur- ja väiketähtede eristamine","matchCyclic":"Jätkatakse algusest","matchWord":"Ainult terved sõnad","notFoundMsg":"Otsitud teksti ei leitud.","replace":"Asenda","replaceAll":"Asenda kõik","replaceSuccessMsg":"%1 vastet asendati.","replaceWith":"Asendus:","title":"Otsimine ja asendamine"},"flash":{"access":"Skriptide ligipääs","accessAlways":"Kõigile","accessNever":"Mitte ühelegi","accessSameDomain":"Samalt domeenilt","alignAbsBottom":"Abs alla","alignAbsMiddle":"Abs keskele","alignBaseline":"Baasjoonele","alignTextTop":"Tekstist üles","bgcolor":"Tausta värv","chkFull":"Täisekraan lubatud","chkLoop":"Korduv","chkMenu":"Flashi menüü lubatud","chkPlay":"Automaatne start ","flashvars":"Flashi muutujad","hSpace":"H. vaheruum","properties":"Flashi omadused","propertiesTab":"Omadused","quality":"Kvaliteet","qualityAutoHigh":"Automaatne kõrge","qualityAutoLow":"Automaatne madal","qualityBest":"Parim","qualityHigh":"Kõrge","qualityLow":"Madal","qualityMedium":"Keskmine","scale":"Mastaap","scaleAll":"Näidatakse kõike","scaleFit":"Täpne sobivus","scaleNoBorder":"Äärist ei ole","title":"Flashi omadused","vSpace":"V. vaheruum","validateHSpace":"H. vaheruum peab olema number.","validateSrc":"Palun kirjuta lingi URL","validateVSpace":"V. vaheruum peab olema number.","windowMode":"Akna režiim","windowModeOpaque":"Läbipaistmatu","windowModeTransparent":"Läbipaistev","windowModeWindow":"Aken"},"font":{"fontSize":{"label":"Suurus","voiceLabel":"Kirja suurus","panelTitle":"Suurus"},"label":"Kiri","panelTitle":"Kiri","voiceLabel":"Kiri"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"forms":{"button":{"title":"Nupu omadused","text":"Tekst (väärtus)","type":"Liik","typeBtn":"Nupp","typeSbm":"Saada","typeRst":"Lähtesta"},"checkboxAndRadio":{"checkboxTitle":"Märkeruudu omadused","radioTitle":"Raadionupu omadused","value":"Väärtus","selected":"Märgitud","required":"Required"},"form":{"title":"Vormi omadused","menu":"Vormi omadused","action":"Toiming","method":"Meetod","encoding":"Kodeering"},"hidden":{"title":"Varjatud lahtri omadused","name":"Nimi","value":"Väärtus"},"select":{"title":"Valiklahtri omadused","selectInfo":"Info","opAvail":"Võimalikud valikud:","value":"Väärtus","size":"Suurus","lines":"ridu","chkMulti":"Võimalik mitu valikut","required":"Required","opText":"Tekst","opValue":"Väärtus","btnAdd":"Lisa","btnModify":"Muuda","btnUp":"Üles","btnDown":"Alla","btnSetValue":"Määra vaikimisi","btnDelete":"Kustuta"},"textarea":{"title":"Tekstiala omadused","cols":"Veerge","rows":"Ridu"},"textfield":{"title":"Tekstilahtri omadused","name":"Nimi","value":"Väärtus","charWidth":"Laius (tähemärkides)","maxChars":"Maksimaalselt tähemärke","required":"Required","type":"Liik","typeText":"Tekst","typePass":"Parool","typeEmail":"E-mail","typeSearch":"Otsi","typeTel":"Telefon","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"iframe":{"border":"Raami äärise näitamine","noUrl":"Vali iframe URLi liik","scrolling":"Kerimisribade lubamine","title":"IFrame omadused","toolbar":"IFrame"},"image":{"alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"justify":{"block":"Rööpjoondus","center":"Keskjoondus","left":"Vasakjoondus","right":"Paremjoondus"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","download":"Force Download","displayText":"Display Text","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"liststyle":{"armenian":"Armeenia numbrid","bulletedTitle":"Punktloendi omadused","circle":"Ring","decimal":"Numbrid (1, 2, 3, jne)","decimalLeadingZero":"Numbrid algusnulliga (01, 02, 03, jne)","disc":"Täpp","georgian":"Gruusia numbrid (an, ban, gan, jne)","lowerAlpha":"Väiketähed (a, b, c, d, e, jne)","lowerGreek":"Kreeka väiketähed (alpha, beta, gamma, jne)","lowerRoman":"Väiksed rooma numbrid (i, ii, iii, iv, v, jne)","none":"Puudub","notset":"<pole määratud>","numberedTitle":"Numberloendi omadused","square":"Ruut","start":"Algus","type":"Liik","upperAlpha":"Suurtähed (A, B, C, D, E, jne)","upperRoman":"Suured rooma numbrid (I, II, III, IV, V, jne)","validateStartNumber":"Loendi algusnumber peab olema täisarv."},"magicline":{"title":"Sisesta siia lõigu tekst"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Lehevahetuskoht","toolbar":"Lehevahetuskoha sisestamine"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"save":{"toolbar":"Salvestamine"},"scayt":{"btn_about":"SCAYT-ist lähemalt","btn_dictionaries":"Sõnaraamatud","btn_disable":"SCAYT keelatud","btn_enable":"SCAYT lubatud","btn_langs":"Keeled","btn_options":"Valikud","text_title":"Õigekirjakontroll kirjutamise ajal"},"selectall":{"toolbar":"Kõige valimine"},"showblocks":{"toolbar":"Blokkide näitamine"},"smiley":{"options":"Emotikonide valikud","title":"Sisesta emotikon","toolbar":"Emotikon"},"sourcearea":{"toolbar":"Lähtekood"},"sourcedialog":{"toolbar":"Lähtekood","title":"Lähtekood"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"templates":{"button":"Mall","emptyListMsg":"(Ühtegi malli ei ole defineeritud)","insertOption":"Praegune sisu asendatakse","options":"Malli valikud","selectPromptMsg":"Palun vali mall, mis avada redaktoris<br />(praegune sisu läheb kaotsi):","title":"Sisumallid"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"wsc":{"btnIgnore":"Ignoreeri","btnIgnoreAll":"Ignoreeri kõiki","btnReplace":"Asenda","btnReplaceAll":"Asenda kõik","btnUndo":"Võta tagasi","changeTo":"Muuda","errorLoading":"Viga rakenduse teenushosti laadimisel: %s.","ieSpellDownload":"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?","manyChanges":"Õigekirja kontroll sooritatud: %1 sõna muudetud","noChanges":"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud","noMispell":"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud","noSuggestions":"- Soovitused puuduvad -","notAvailable":"Kahjuks ei ole teenus praegu saadaval.","notInDic":"Puudub sõnastikust","oneChange":"Õigekirja kontroll sooritatud: üks sõna muudeti","progress":"Toimub õigekirja kontroll...","title":"Õigekirjakontroll","toolbar":"Õigekirjakontroll"},"youtube":{"button":"Lisa YouTube video","title":"YouTube video lisamine","txtEmbed":"Kleepige manustatud kood siia","txtUrl":"Kleepige YouTube video veebiaadress","txtWidth":"Laius","txtHeight":"Kõrgus","chkRelated":"Näita soovitatud videosi antud video lõppus","txtStartAt":"Alguskoht: (ss või mm:ss või hh:mm:ss)","chkPrivacy":"Aktiveerige privaatsust täiendav režiim","chkOlderCode":"Kasutage vana manuskoodi","chkAutoplay":"Automaatesitlus","noCode":"Te peate sisestama video manuskoodi või veebiaadressi","invalidEmbed":"Manuskood mille sisestasite ei paista olevat korrektne","invalidUrl":"Veebiaadress mille sisestasite ei paista olevat korrektne","or":"või","noWidth":"Te peate sisestama video laiuse","invalidWidth":"Sisestage korrektne laius","noHeight":"Te peate sisestama video kõrguse","invalidHeight":"Sisestage korrektne kõrgus","invalidTime":"Sisestage korrektne algusaeg","txtResponsive":"Aktiveerige ekraani laiusega ühilduv režiim"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/fi.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['fi']={"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignJustify":"Tasaa molemmat reunat","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"bidi":{"ltr":"Tekstin suunta vasemmalta oikealle","rtl":"Tekstin suunta oikealta vasemmalle"},"blockquote":{"toolbar":"Lainaus"},"button":{"selectedLabel":"%1 (Valittu)"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"codemirror":{"toolbar":"Koodi","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automaattinen","bgColorTitle":"Taustaväri","colors":{"000":"Musta","800000":"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen","696969":"Tummanharmaa","B22222":"Tiili","A52A2A":"Ruskea","DAA520":"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen","800080":"Purppura","808080":"Harmaa","F00":"Punainen","FF8C00":"Tumma oranssi","FFD700":"Kulta","008000":"Vihreä","0FF":"Syaani","00F":"Sininen","EE82EE":"Violetti","A9A9A9":"Tummanharmaa","FFA07A":"Vaaleanlohenpunainen","FFA500":"Oranssi","FFFF00":"Keltainen","00FF00":"Limetin vihreä","AFEEEE":"Haalea turkoosi","ADD8E6":"Vaaleansininen","DDA0DD":"Luumu","D3D3D3":"Vaaleanharmaa","FFF0F5":"Laventelinpunainen","FAEBD7":"Antiikinvalkoinen","FFFFE0":"Vaaleankeltainen","F0FFF0":"Hunajameloni","F0FFFF":"Asurinsininen","F0F8FF":"Alice Blue -sininen","E6E6FA":"Lavanteli","FFF":"Valkoinen","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Lisää värejä...","panelTitle":"Värit","textColorTitle":"Tekstiväri"},"colordialog":{"clear":"Poista","highlight":"Korostus","options":"Värin ominaisuudet","selected":"Valittu","title":"Valitse väri"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Ohjeistava otsikko","cssClassInputLabel":"Tyylitiedoston luokat","edit":"Muokkaa Diviä","inlineStyleInputLabel":"Sisätyyli","langDirLTRLabel":"Vasemmalta oikealle (LTR)","langDirLabel":"Kielen suunta","langDirRTLLabel":"Oikealta vasemmalle (RTL)","languageCodeInputLabel":" Kielen koodi","remove":"Poista Div","styleSelectLabel":"Tyyli","title":"Luo div-kehikko","toolbar":"Luo div-kehikko"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"find":{"find":"Etsi","findOptions":"Hakuasetukset","findWhat":"Etsi mitä:","matchCase":"Sama kirjainkoko","matchCyclic":"Kierrä ympäri","matchWord":"Koko sana","notFoundMsg":"Etsittyä tekstiä ei löytynyt.","replace":"Korvaa","replaceAll":"Korvaa kaikki","replaceSuccessMsg":"%1 esiintymä(ä) korvattu.","replaceWith":"Korvaa tällä:","title":"Etsi ja korvaa"},"flash":{"access":"Skriptien pääsy","accessAlways":"Aina","accessNever":"Ei koskaan","accessSameDomain":"Sama verkkotunnus","alignAbsBottom":"Aivan alas","alignAbsMiddle":"Aivan keskelle","alignBaseline":"Alas (teksti)","alignTextTop":"Ylös (teksti)","bgcolor":"Taustaväri","chkFull":"Salli kokoruututila","chkLoop":"Toisto","chkMenu":"Näytä Flash-valikko","chkPlay":"Automaattinen käynnistys","flashvars":"Muuttujat Flash:lle","hSpace":"Vaakatila","properties":"Flash-ominaisuudet","propertiesTab":"Ominaisuudet","quality":"Laatu","qualityAutoHigh":"Automaattinen korkea","qualityAutoLow":"Automaattinen matala","qualityBest":"Paras","qualityHigh":"Korkea","qualityLow":"Matala","qualityMedium":"Keskitaso","scale":"Levitä","scaleAll":"Näytä kaikki","scaleFit":"Tarkka koko","scaleNoBorder":"Ei rajaa","title":"Flash ominaisuudet","vSpace":"Pystytila","validateHSpace":"Vaakatilan täytyy olla numero.","validateSrc":"Linkille on kirjoitettava URL","validateVSpace":"Pystytilan täytyy olla numero.","windowMode":"Ikkuna tila","windowModeOpaque":"Läpinäkyvyys","windowModeTransparent":"Läpinäkyvä","windowModeWindow":"Ikkuna"},"font":{"fontSize":{"label":"Koko","voiceLabel":"Kirjaisimen koko","panelTitle":"Koko"},"label":"Kirjaisinlaji","panelTitle":"Kirjaisinlaji","voiceLabel":"Kirjaisinlaji"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"forms":{"button":{"title":"Painikkeen ominaisuudet","text":"Teksti (arvo)","type":"Tyyppi","typeBtn":"Painike","typeSbm":"Lähetä","typeRst":"Tyhjennä"},"checkboxAndRadio":{"checkboxTitle":"Valintaruudun ominaisuudet","radioTitle":"Radiopainikkeen ominaisuudet","value":"Arvo","selected":"Valittu","required":"Required"},"form":{"title":"Lomakkeen ominaisuudet","menu":"Lomakkeen ominaisuudet","action":"Toiminto","method":"Tapa","encoding":"Enkoodaus"},"hidden":{"title":"Piilokentän ominaisuudet","name":"Nimi","value":"Arvo"},"select":{"title":"Valintakentän ominaisuudet","selectInfo":"Info","opAvail":"Ominaisuudet","value":"Arvo","size":"Koko","lines":"Rivit","chkMulti":"Salli usea valinta","required":"Required","opText":"Teksti","opValue":"Arvo","btnAdd":"Lisää","btnModify":"Muuta","btnUp":"Ylös","btnDown":"Alas","btnSetValue":"Aseta valituksi","btnDelete":"Poista"},"textarea":{"title":"Tekstilaatikon ominaisuudet","cols":"Sarakkeita","rows":"Rivejä"},"textfield":{"title":"Tekstikentän ominaisuudet","name":"Nimi","value":"Arvo","charWidth":"Leveys","maxChars":"Maksimi merkkimäärä","required":"Required","type":"Tyyppi","typeText":"Teksti","typePass":"Salasana","typeEmail":"Sähköposti","typeSearch":"Haku","typeTel":"Puhelinnumero","typeUrl":"Osoite"}},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"iframe":{"border":"Näytä kehyksen reunat","noUrl":"Anna IFrame-kehykselle lähdeosoite (src)","scrolling":"Näytä vierityspalkit","title":"IFrame-kehyksen ominaisuudet","toolbar":"IFrame-kehys"},"image":{"alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"justify":{"block":"Tasaa molemmat reunat","center":"Keskitä","left":"Tasaa vasemmat reunat","right":"Tasaa oikeat reunat"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","download":"Force Download","displayText":"Display Text","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"liststyle":{"armenian":"Armeenialainen numerointi","bulletedTitle":"Numeroimattoman listan ominaisuudet","circle":"Ympyrä","decimal":"Desimaalit (1, 2, 3, jne.)","decimalLeadingZero":"Desimaalit, alussa nolla (01, 02, 03, jne.)","disc":"Levy","georgian":"Georgialainen numerointi (an, ban, gan, etc.)","lowerAlpha":"Pienet aakkoset (a, b, c, d, e, jne.)","lowerGreek":"Pienet kreikkalaiset (alpha, beta, gamma, jne.)","lowerRoman":"Pienet roomalaiset (i, ii, iii, iv, v, jne.)","none":"Ei mikään","notset":"<ei asetettu>","numberedTitle":"Numeroidun listan ominaisuudet","square":"Neliö","start":"Alku","type":"Tyyppi","upperAlpha":"Isot aakkoset (A, B, C, D, E, jne.)","upperRoman":"Isot roomalaiset (I, II, III, IV, V, jne.)","validateStartNumber":"Listan ensimmäisen numeron tulee olla kokonaisluku."},"magicline":{"title":"Lisää kappale tähän."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"widget":{"move":"Siirrä klikkaamalla ja raahaamalla","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Sivunvaihto","toolbar":"Lisää sivunvaihto"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"removeformat":{"toolbar":"Poista muotoilu"},"save":{"toolbar":"Tallenna"},"scayt":{"btn_about":"Tietoja oikoluvusta kirjoitetaessa","btn_dictionaries":"Sanakirjat","btn_disable":"Poista käytöstä oikoluku kirjoitetaessa","btn_enable":"Ota käyttöön oikoluku kirjoitettaessa","btn_langs":"Kielet","btn_options":"Asetukset","text_title":"Oikolue kirjoitettaessa"},"selectall":{"toolbar":"Valitse kaikki"},"showblocks":{"toolbar":"Näytä elementit"},"smiley":{"options":"Hymiön ominaisuudet","title":"Lisää hymiö","toolbar":"Hymiö"},"sourcearea":{"toolbar":"Koodi"},"sourcedialog":{"toolbar":"Koodi","title":"Koodi"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"templates":{"button":"Pohjat","emptyListMsg":"(Ei määriteltyjä pohjia)","insertOption":"Korvaa koko sisältö","options":"Sisältöpohjan ominaisuudet","selectPromptMsg":"Valitse editoriin avattava pohja","title":"Sisältöpohjat"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"undo":{"redo":"Toista","undo":"Kumoa"},"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"},"youtube":{"button":"Upota YouTube-video","title":"Upota YouTube-video","txtEmbed":"Syötä YouTube-videon upotuskoodi","txtUrl":"Syötä YouTube-videon www-osoite","txtWidth":"Leveys","txtHeight":"Korkeus","chkRelated":"Näytä suositukset lopussa","txtStartAt":"Aloitusaika (ss tai mm:ss tai tt:mm:ss)","chkPrivacy":"Aktivoi yksityisyyttä parantava tila","chkOlderCode":"Käytä vanhaa upotuskoodia","chkAutoplay":"Soita automaattisesti","noCode":"Sinun täytyy syötää upotuskoodi tai www-osoite","invalidEmbed":"Upotuskoodi on virheellinen","invalidUrl":"Www-osoite on virheellinen","or":"tai","noWidth":"Syötä leveys","invalidWidth":"Leveys on virheellinen","noHeight":"Syötä korkeus","invalidHeight":"Korkeus on virheellinen","invalidTime":"Aloitusaika on virheellinen","txtResponsive":"Responsiivinen leveys (sovita leveys)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/fr.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['fr']={"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Téléverser","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"<indéfini>","id":"ID","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page ?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer ?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à droite (LTR)","langDirRTL":"Droite à gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centrer","alignJustify":"Justifier","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Backspace","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Space","35":"Fin","36":"Origine","46":"Supprimer","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour obtenir de l'aide.","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :","title":"À propos de CKEditor","userGuide":"Guide de l'utilisateur CKEditor (en anglais)"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de la gauche vers la droite","rtl":"Direction du texte de la droite vers la gauche"},"blockquote":{"toolbar":"Citation"},"button":{"selectedLabel":"%1 (Sélectionné)"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur d'accéder directement aux données du presse-papier. Vous devez les coller à nouveau dans cette fenêtre.","title":"Coller"},"codemirror":{"toolbar":"Source","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur d'arrière-plan","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun de selle","2F4F4F":"Gris sombre d'ardoise","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal","800080":"Violet","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris tamisé","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Lime","AFEEEE":"Turquoise clair","ADD8E6":"Bleu clair","DDA0DD":"Prune","D3D3D3":"Gris clair","FFF0F5":"Fard lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune clair","F0FFF0":"Vert rosée","F0FFFF":"Azur","F0F8FF":"Bleu Alice","E6E6FA":"Lavande","FFF":"Blanc","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur du texte"},"colordialog":{"clear":"Effacer","highlight":"Pointée","options":"Options de couleur","selected":"Couleur choisie","title":"Sélectionner une couleur"},"contextmenu":{"options":"Options du menu contextuel"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Infobulle","cssClassInputLabel":"Classes de style","edit":"Modifier la division","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"Gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"Droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Enlever la division","styleSelectLabel":"Style","title":"Créer une division","toolbar":"Créer une division"},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ invisible","iframe":"Cadre de contenu incorporé","unknown":"Objet inconnu"},"find":{"find":"Rechercher","findOptions":"Options de recherche","findWhat":"Rechercher :","matchCase":"Respecter la casse","matchCyclic":"Boucler","matchWord":"Mot entier uniquement","notFoundMsg":"Le texte spécifié ne peut être trouvé.","replace":"Remplacer","replaceAll":"Remplacer tout","replaceSuccessMsg":"%1 occurrence(s) remplacée(s).","replaceWith":"Remplacer par : ","title":"Rechercher et remplacer"},"flash":{"access":"Accès aux scripts","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Ligne de base","alignTextTop":"Haut du texte","bgcolor":"Couleur d'arrière-plan","chkFull":"Permettre le plein écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Lire automatiquement","flashvars":"Variables Flash","hSpace":"Espacement horizontal","properties":"Propriétés du Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute automatique","qualityAutoLow":"Basse automatique","qualityBest":"Maximale","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Échelle","scaleAll":"Afficher tout","scaleFit":"Adaptation automatique","scaleNoBorder":"Aucune bordure","title":"Propriétés du Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un nombre.","validateSrc":"L'URL doit être indiquée.","validateVSpace":"L'espacement vertical doit être un nombre.","windowMode":"Mode fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille de police","panelTitle":"Taille de police"},"label":"Police","panelTitle":"Style de police","voiceLabel":"Police"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Préformaté"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte","type":"Type","typeBtn":"Bouton","typeSbm":"Validation","typeRst":"Remise à zéro"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton radio","value":"Valeur","selected":"Sélectionné","required":"Requis"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ invisible","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du menu déroulant","selectInfo":"Informations sur le menu déroulant","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"lignes","chkMulti":"Permettre les sélections multiples","required":"Requis","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Haut","btnDown":"Bas","btnSetValue":"Définir comme valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Largeur des caractères","maxChars":"Nombre maximum de caractères","required":"Requis","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"Courriel","typeSearch":"Rechercher","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Ligne horizontale"},"iframe":{"border":"Afficher la bordure du cadre","noUrl":"Veuillez entrer l'URL du contenu du cadre","scrolling":"Activer les barres de défilement","title":"Propriétés du cadre de contenu incorporé","toolbar":"Cadre de contenu incorporé"},"image":{"alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton avec image sélectionné en simple image ?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image sélectionnée en bouton avec image ?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Réinitialiser la taille","title":"Propriétés de l'image","titleButton":"Propriétés du bouton avec image","upload":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un nombre entier.","validateHSpace":"L'espacement horizontal doit être un nombre entier.","validateVSpace":"L'espacement vertical doit être un nombre entier."},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"justify":{"block":"Justifier","center":"Centrer","left":"Aligner à gauche","right":"Aligner à droite"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (indicatif)","advisoryTitle":"Infobulle","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Encodage de la ressource liée","cssClasses":"Classes de style","download":"Force Download","displayText":"Display Text","emailAddress":"Adresse électronique","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse électronique","noUrl":"Veuillez entrer l'URL du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre surgissante","popupFullScreen":"Plein écran (IE)","popupLeft":"À gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"En haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Indice de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du cadre affecté","targetPopup":"<fenêtre surgissante>","targetPopupName":"Nom de la fenêtre surgissante","title":"Lien","toAnchor":"Ancre","toEmail":"Courriel","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"liststyle":{"armenian":"Numération arménienne","bulletedTitle":"Propriétés de la liste à puces","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","decimalLeadingZero":"Décimal précédé par un 0 (01, 02, 03, etc.)","disc":"Disque","georgian":"Numération géorgienne (an, ban, gan, etc.)","lowerAlpha":"Lettres minuscules (a, b, c, d, e, etc.)","lowerGreek":"Grec minuscule (alpha, bêta, gamma, etc.)","lowerRoman":"Chiffres romains minuscules (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"<indéfini>","numberedTitle":"Propriétés de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Lettres majuscules (A, B, C, D, E, etc.)","upperRoman":"Chiffres romains majuscules (I, II, III, IV, V, etc.)","validateStartNumber":"Le premier élément de la liste doit être un nombre entier."},"magicline":{"title":"Insérer un paragraphe ici"},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"oembed":{"title":"Intégrer des contenus multimédia externes. (Photo, Video, Audio, ...)","button":"Insérer des contenus multimédia provenant de nombreux sites.","pasteUrl":"Coller l'URL de partage que vous voulez publier. De nombreux services sont pris en charge tels que : (YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.). Vous pouvez aussi utiliser les URLs courtes.","invalidUrl":"Merci de fournir une URL valide !","noEmbedCode":"Aucun code d'intégration trouvé ou le site n'est pas supporté !","url":"URL:","width":"Largeur:","height":"Hauteur:","widthTitle":"Largeur du conteneur.","heightTitle":"Hauteur du conteneur.","maxWidth":"Max. Largeur:","maxHeight":"Max. Hauteur:","maxWidthTitle":"Largeur maximale du conteneur.","maxHeightTitle":"Hauteur maximale du conteneur.","resizeType":"Resize Type (Only Video's):","none":"None","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Saut de page","toolbar":"Insérer un saut de page pour l'impression"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"pastetext":{"button":"Coller comme texte brut","title":"Coller comme texte brut"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"save":{"toolbar":"Enregistrer"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":"Vérification de l'Orthographe en Cours de Frappe (SCAYT)"},"selectall":{"toolbar":"Tout sélectionner"},"showblocks":{"toolbar":"Afficher les blocs"},"smiley":{"options":"Options des frimousses","title":"Insérer une frimousse","toolbar":"Frimousse"},"sourcearea":{"toolbar":"Source"},"sourcedialog":{"toolbar":"Source","title":"Source"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"syntaxhighlight":{"title":"Ajouter ou modifier un morceau de code source","contextTitle":"&Eacute;diter le code source","sourceTab":"Code source","langLbl":"Sélectionnez le langage:","sourceTextareaEmptyError":"Le code source ne doit pas être vide","advancedTab":"Avancé","hideGutter":"Cacher la marge","hideGutterLbl":"Cacher la marge et les numéros de ligne.","hideControls":"Cacher la barre d'outils","hideControlsLbl":"Cacher la barre d'outils en haut du bloc de code.","collapse":"Réduire le code","collapseLbl":"Réduire le bloc de code par défaut. (la barre d'outils doit être activée)","codeTitleLbl":"Employez un titre de code","showColumns":"Montrer les colonnes","showColumnsLbl":"Montrer les colonnes sur la première ligne.","lineWrap":"Désactiver le retour à la ligne automatique","lineWrapLbl":"Désactiver le retour à la ligne automatique (ne fonctionne plus avec SyntaxHighlighter 3).","lineCount":"Numéro de la première ligne (différent de 1)","highlight":"Surligner les lignes","highlightLbl":"Entrez les numéros des lignes que vous souhaitez surligner, séparés par des virgules. ex <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer le contenu actuel","options":"Options des modèles","selectPromptMsg":"Veuillez sélectionner le modèle à ouvrir dans l'éditeur","title":"Contenu des modèles"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"},"youtube":{"button":"Insérer une vidéo Youtube","title":"Insérer une vidéo youtube","txtEmbed":"Coller le code embed ici","txtUrl":"Coller l'url de la vidéo ici","txtWidth":"Largeur","txtHeight":"Hauteur","chkRelated":"Montrer les suggestions de vidéo à la fin","txtStartAt":"Commencer à (ss ou mm:ss ou hh:mm:ss)","chkPrivacy":"Activer la protection de la vie privée","chkOlderCode":"Utiliser l'ancien code embed","chkAutoplay":"Autoplay","noCode":"Vous devez entrer un code embed ou une url","invalidEmbed":"Le code embed est invalide","invalidUrl":"L'url est invalide","or":"ou","noWidth":"Vous devez saisir une largeur","invalidWidth":"La largeur saisie est invalide","noHeight":"Vous devez saisir une hauteur","invalidHeight":"La hauteur saisie est invalide","invalidTime":"Le temps de départ de la vidéo est invalide","txtResponsive":"Responsive video"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/hr.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['hr']={"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Središnje","alignJustify":"Blok poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"None","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O CKEditoru","help":"Provjeri $1 za pomoć.","moreInfo":"Za informacije o licencama posjetite našu web stranicu:","title":"O CKEditoru","userGuide":"Vodič za CKEditor korisnike"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"bidi":{"ltr":"Smjer teksta s lijeva na desno","rtl":"Smjer teksta s desna na lijevo"},"blockquote":{"toolbar":"Blockquote"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"codemirror":{"toolbar":"Kôd","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Crna","800000":"Kesten","8B4513":"Smeđa","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo","696969":"Tamno siva","B22222":"Vatrena cigla","A52A2A":"Smeđa","DAA520":"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava","800080":"Ljubičasta","808080":"Siva","F00":"Crvena","FF8C00":"Tamno naranđasta","FFD700":"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava","EE82EE":"Ljubičasta","A9A9A9":"Mutno siva","FFA07A":"Svijetli losos","FFA500":"Naranđasto","FFFF00":"Žuto","00FF00":"Limun","AFEEEE":"Blijedo tirkizna","ADD8E6":"Svijetlo plava","DDA0DD":"Šljiva","D3D3D3":"Svijetlo siva","FFF0F5":"Lavanda rumeno","FAEBD7":"Antikno bijela","FFFFE0":"Svijetlo žuta","F0FFF0":"Med","F0FFFF":"Azurna","F0F8FF":"Alice plava","E6E6FA":"Lavanda","FFF":"Bijela","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Više boja...","panelTitle":"Boje","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Očisti","highlight":"Istaknuto","options":"Opcije boje","selected":"Odabrana boja","title":"Odaberi boju"},"contextmenu":{"options":"Opcije izbornika"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Savjetodavni naslov","cssClassInputLabel":"Klase stilova","edit":"Uredi DIV","inlineStyleInputLabel":"Stil u liniji","langDirLTRLabel":"S lijeva na desno (LTR)","langDirLabel":"Smjer jezika","langDirRTLLabel":"S desna na lijevo (RTL)","languageCodeInputLabel":"Jezični kod","remove":"Ukloni DIV","styleSelectLabel":"Stil","title":"Napravi DIV kontejner","toolbar":"Napravi DIV kontejner"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"find":{"find":"Pronađi","findOptions":"Opcije traženja","findWhat":"Pronađi:","matchCase":"Usporedi mala/velika slova","matchCyclic":"Usporedi kružno","matchWord":"Usporedi cijele riječi","notFoundMsg":"Traženi tekst nije pronađen.","replace":"Zamijeni","replaceAll":"Zamijeni sve","replaceSuccessMsg":"Zamijenjeno %1 pojmova.","replaceWith":"Zamijeni s:","title":"Pronađi i zamijeni"},"flash":{"access":"Script Access","accessAlways":"Uvijek","accessNever":"Nikad","accessSameDomain":"Ista domena","alignAbsBottom":"Abs dolje","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Omogući Fullscreen","chkLoop":"Ponavljaj","chkMenu":"Omogući Flash izbornik","chkPlay":"Auto Play","flashvars":"Varijable za Flash","hSpace":"HSpace","properties":"Flash svojstva","propertiesTab":"Svojstva","quality":"Kvaliteta","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Omjer","scaleAll":"Prikaži sve","scaleFit":"Točna veličina","scaleNoBorder":"Bez okvira","title":"Flash svojstva","vSpace":"VSpace","validateHSpace":"HSpace mora biti broj.","validateSrc":"Molimo upišite URL link","validateVSpace":"VSpace mora biti broj.","windowMode":"Vrsta prozora","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Veličina","voiceLabel":"Veličina slova","panelTitle":"Veličina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"forms":{"button":{"title":"Button svojstva","text":"Tekst (vrijednost)","type":"Vrsta","typeBtn":"Gumb","typeSbm":"Pošalji","typeRst":"Poništi"},"checkboxAndRadio":{"checkboxTitle":"Checkbox svojstva","radioTitle":"Radio Button svojstva","value":"Vrijednost","selected":"Odabrano","required":"Required"},"form":{"title":"Form svojstva","menu":"Form svojstva","action":"Akcija","method":"Metoda","encoding":"Encoding"},"hidden":{"title":"Hidden Field svojstva","name":"Ime","value":"Vrijednost"},"select":{"title":"Selection svojstva","selectInfo":"Info","opAvail":"Dostupne opcije","value":"Vrijednost","size":"Veličina","lines":"linija","chkMulti":"Dozvoli višestruki odabir","required":"Required","opText":"Tekst","opValue":"Vrijednost","btnAdd":"Dodaj","btnModify":"Promijeni","btnUp":"Gore","btnDown":"Dolje","btnSetValue":"Postavi kao odabranu vrijednost","btnDelete":"Obriši"},"textarea":{"title":"Textarea svojstva","cols":"Kolona","rows":"Redova"},"textfield":{"title":"Text Field svojstva","name":"Ime","value":"Vrijednost","charWidth":"Širina","maxChars":"Najviše karaktera","required":"Required","type":"Vrsta","typeText":"Tekst","typePass":"Šifra","typeEmail":"Email","typeSearch":"Traži","typeTel":"Broj telefona","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"iframe":{"border":"Prikaži okvir IFrame-a","noUrl":"Unesite URL iframe-a","scrolling":"Omogući trake za skrolanje","title":"IFrame svojstva","toolbar":"IFrame"},"image":{"alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","resetSize":"Obriši veličinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"Pošalji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"justify":{"block":"Blok poravnanje","center":"Središnje poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"Pošalji"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"liststyle":{"armenian":"Armenijska numeracija","bulletedTitle":"Svojstva liste","circle":"Krug","decimal":"Decimalna numeracija (1, 2, 3, itd.)","decimalLeadingZero":"Decimalna s vodećom nulom (01, 02, 03, itd)","disc":"Disk","georgian":"Gruzijska numeracija(an, ban, gan, etc.)","lowerAlpha":"Znakovi mala slova (a, b, c, d, e, itd.)","lowerGreek":"Grčka numeracija mala slova (alfa, beta, gama, itd).","lowerRoman":"Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)","none":"Bez","notset":"<nije određen>","numberedTitle":"Svojstva brojčane liste","square":"Kvadrat","start":"Početak","type":"Vrsta","upperAlpha":"Znakovi velika slova (A, B, C, D, E, itd.)","upperRoman":"Romanska numeracija velika slova (I, II, III, IV, V, itd.)","validateStartNumber":"Početak brojčane liste mora biti cijeli broj."},"magicline":{"title":"Ubaci paragraf ovdje"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"widget":{"move":"Klikni i povuci da pomakneš","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Prijelom stranice","toolbar":"Ubaci prijelom stranice"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"pastetext":{"button":"Zalijepi kao čisti tekst","title":"Zalijepi kao čisti tekst"},"removeformat":{"toolbar":"Ukloni formatiranje"},"save":{"toolbar":"Snimi"},"scayt":{"btn_about":"O SCAYT","btn_dictionaries":"Rječnici","btn_disable":"Onemogući SCAYT","btn_enable":"Omogući SCAYT","btn_langs":"Jezici","btn_options":"Opcije","text_title":"Provjeri pravopis tijekom tipkanja (SCAYT)"},"selectall":{"toolbar":"Odaberi sve"},"showblocks":{"toolbar":"Prikaži blokove"},"smiley":{"options":"Opcije smješka","title":"Ubaci smješka","toolbar":"Smješko"},"sourcearea":{"toolbar":"Kôd"},"sourcedialog":{"toolbar":"Kôd","title":"Kôd"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"templates":{"button":"Predlošci","emptyListMsg":"(Nema definiranih predložaka)","insertOption":"Zamijeni trenutne sadržaje","options":"Opcije predložaka","selectPromptMsg":"Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):","title":"Predlošci sadržaja"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"undo":{"redo":"Ponovi","undo":"Poništi"},"wsc":{"btnIgnore":"Zanemari","btnIgnoreAll":"Zanemari sve","btnReplace":"Zamijeni","btnReplaceAll":"Zamijeni sve","btnUndo":"Vrati","changeTo":"Promijeni u","errorLoading":"Greška učitavanja aplikacije: %s.","ieSpellDownload":"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?","manyChanges":"Provjera završena: Promijenjeno %1 riječi","noChanges":"Provjera završena: Nije napravljena promjena","noMispell":"Provjera završena: Nema grešaka","noSuggestions":"-Nema preporuke-","notAvailable":"Žao nam je, ali usluga trenutno nije dostupna.","notInDic":"Nije u rječniku","oneChange":"Provjera završena: Jedna riječ promjenjena","progress":"Provjera u tijeku...","title":"Provjera pravopisa","toolbar":"Provjeri pravopis"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/hu.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['hu']={"editor":"HTML szerkesztő","editorPanel":"Rich Text szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtettmező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignJustify":"Sorkizárt","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"None","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"CKEditor névjegy","help":"Itt találsz segítséget: $1","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:","title":"CKEditor névjegy","userGuide":"CKEditor Felhasználói útmutató"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"bidi":{"ltr":"Szöveg iránya balról jobbra","rtl":"Szöveg iránya jobbról balra"},"blockquote":{"toolbar":"Idézet blokk"},"button":{"selectedLabel":"%1 (Kiválasztva)"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mező","pasteMsg":"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"codemirror":{"toolbar":"Forráskód","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatikus","bgColorTitle":"Háttérszín","colors":{"000":"Fekete","800000":"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék","696969":"Szürke","B22222":"Tégla vörös","A52A2A":"Vörös","DAA520":"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék","800080":"Lila","808080":"Szürke","F00":"Piros","FF8C00":"Sötét narancs","FFD700":"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék","EE82EE":"Rózsaszín","A9A9A9":"Sötét szürke","FFA07A":"Lazac","FFA500":"Narancs","FFFF00":"Citromsárga","00FF00":"Neon zöld","AFEEEE":"Világos türkiz","ADD8E6":"Világos kék","DDA0DD":"Világos lila","D3D3D3":"Világos szürke","FFF0F5":"Lavender Blush","FAEBD7":"Törtfehér","FFFFE0":"Világos sárga","F0FFF0":"Menta","F0FFFF":"Azúr kék","F0F8FF":"Halvány kék","E6E6FA":"Lavender","FFF":"Fehér","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"További színek...","panelTitle":"Színek","textColorTitle":"Betűszín"},"colordialog":{"clear":"Ürítés","highlight":"Nagyítás","options":"Szín opciók","selected":"Kiválasztott","title":"Válasszon színt"},"contextmenu":{"options":"Helyi menü opciók"},"div":{"IdInputLabel":"Azonosító","advisoryTitleInputLabel":"Tipp szöveg","cssClassInputLabel":"Stíluslap osztály","edit":"DIV szerkesztése","inlineStyleInputLabel":"Inline stílus","langDirLTRLabel":"Balról jobbra (LTR)","langDirLabel":"Nyelvi irány","langDirRTLLabel":"Jobbról balra (RTL)","languageCodeInputLabel":" Nyelv kódja","remove":"DIV eltávolítása","styleSelectLabel":"Stílus","title":"DIV tároló létrehozása","toolbar":"DIV tároló létrehozása"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"find":{"find":"Keresés","findOptions":"Beállítások","findWhat":"Keresett szöveg:","matchCase":"Kis- és nagybetű megkülönböztetése","matchCyclic":"Ciklikus keresés","matchWord":"Csak ha ez a teljes szó","notFoundMsg":"A keresett szöveg nem található.","replace":"Csere","replaceAll":"Az összes cseréje","replaceSuccessMsg":"%1 egyezőség cserélve.","replaceWith":"Csere erre:","title":"Keresés és csere"},"flash":{"access":"Szkript hozzáférés","accessAlways":"Mindig","accessNever":"Soha","accessSameDomain":"Azonos domainről","alignAbsBottom":"Legaljára","alignAbsMiddle":"Közepére","alignBaseline":"Alapvonalhoz","alignTextTop":"Szöveg tetejére","bgcolor":"Háttérszín","chkFull":"Teljes képernyő engedélyezése","chkLoop":"Folyamatosan","chkMenu":"Flash menü engedélyezése","chkPlay":"Automata lejátszás","flashvars":"Flash változók","hSpace":"Vízsz. táv","properties":"Flash tulajdonságai","propertiesTab":"Tulajdonságok","quality":"Minőség","qualityAutoHigh":"Automata jó","qualityAutoLow":"Automata gyenge","qualityBest":"Legjobb","qualityHigh":"Jó","qualityLow":"Gyenge","qualityMedium":"Közepes","scale":"Méretezés","scaleAll":"Mindent mutat","scaleFit":"Teljes kitöltés","scaleNoBorder":"Keret nélkül","title":"Flash tulajdonságai","vSpace":"Függ. táv","validateHSpace":"A vízszintes távolsűág mezőbe csak számokat írhat.","validateSrc":"Adja meg a hivatkozás webcímét","validateVSpace":"A függőleges távolsűág mezőbe csak számokat írhat.","windowMode":"Ablak mód","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Méret","voiceLabel":"Betűméret","panelTitle":"Méret"},"label":"Betűtípus","panelTitle":"Betűtípus","voiceLabel":"Betűtípus"},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"forms":{"button":{"title":"Gomb tulajdonságai","text":"Szöveg (Érték)","type":"Típus","typeBtn":"Gomb","typeSbm":"Küldés","typeRst":"Alaphelyzet"},"checkboxAndRadio":{"checkboxTitle":"Jelölőnégyzet tulajdonságai","radioTitle":"Választógomb tulajdonságai","value":"Érték","selected":"Kiválasztott","required":"Required"},"form":{"title":"Űrlap tulajdonságai","menu":"Űrlap tulajdonságai","action":"Adatfeldolgozást végző hivatkozás","method":"Adatküldés módja","encoding":"Kódolás"},"hidden":{"title":"Rejtett mező tulajdonságai","name":"Név","value":"Érték"},"select":{"title":"Legördülő lista tulajdonságai","selectInfo":"Alaptulajdonságok","opAvail":"Elérhető opciók","value":"Érték","size":"Méret","lines":"sor","chkMulti":"több sor is kiválasztható","required":"Required","opText":"Szöveg","opValue":"Érték","btnAdd":"Hozzáad","btnModify":"Módosít","btnUp":"Fel","btnDown":"Le","btnSetValue":"Legyen az alapértelmezett érték","btnDelete":"Töröl"},"textarea":{"title":"Szövegterület tulajdonságai","cols":"Karakterek száma egy sorban","rows":"Sorok száma"},"textfield":{"title":"Szövegmező tulajdonságai","name":"Név","value":"Érték","charWidth":"Megjelenített karakterek száma","maxChars":"Maximális karakterszám","required":"Required","type":"Típus","typeText":"Szöveg","typePass":"Jelszó","typeEmail":"Ímél","typeSearch":"Keresés","typeTel":"Telefonszám","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"iframe":{"border":"Legyen keret","noUrl":"Kérem írja be a iframe URL-t","scrolling":"Gördítősáv bekapcsolása","title":"IFrame Tulajdonságok","toolbar":"IFrame"},"image":{"alt":"Alternatív szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"A kiválasztott képgombból sima képet szeretne csinálni?","hSpace":"Vízsz. táv","img2Button":"A kiválasztott képből képgombot szeretne csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"Függőleges távolságnak egész számot kell beírni!"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"justify":{"block":"Sorkizárt","center":"Középre","left":"Balra","right":"Jobbra"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"liststyle":{"armenian":"Örmény számozás","bulletedTitle":"Pontozott lista tulajdonságai","circle":"Kör","decimal":"Arab számozás (1, 2, 3, stb.)","decimalLeadingZero":"Számozás bevezető nullákkal (01, 02, 03, stb.)","disc":"Korong","georgian":"Grúz számozás (an, ban, gan, stb.)","lowerAlpha":"Kisbetűs (a, b, c, d, e, stb.)","lowerGreek":"Görög (alpha, beta, gamma, stb.)","lowerRoman":"Római kisbetűs (i, ii, iii, iv, v, stb.)","none":"Nincs","notset":"<Nincs beállítva>","numberedTitle":"Sorszámozott lista tulajdonságai","square":"Négyzet","start":"Kezdőszám","type":"Típus","upperAlpha":"Nagybetűs (A, B, C, D, E, stb.)","upperRoman":"Római nagybetűs (I, II, III, IV, V, stb.)","validateStartNumber":"A kezdőszám nem lehet tört érték."},"magicline":{"title":"Szúrja be a bekezdést ide"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"widget":{"move":"Kattints és húzd a mozgatáshoz","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Oldaltörés","toolbar":"Oldaltörés beillesztése"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"removeformat":{"toolbar":"Formázás eltávolítása"},"save":{"toolbar":"Mentés"},"scayt":{"btn_about":"SCAYT névjegy","btn_dictionaries":"Szótár","btn_disable":"SCAYT letiltása","btn_enable":"SCAYT engedélyezése","btn_langs":"Nyelvek","btn_options":"Beállítások","text_title":"Helyesírás ellenőrzés gépelés közben"},"selectall":{"toolbar":"Mindent kijelöl"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"smiley":{"options":"Hangulatjel opciók","title":"Hangulatjel beszúrása","toolbar":"Hangulatjelek"},"sourcearea":{"toolbar":"Forráskód"},"sourcedialog":{"toolbar":"Forráskód","title":"Forráskód"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"templates":{"button":"Sablonok","emptyListMsg":"(Nincs sablon megadva)","insertOption":"Kicseréli a jelenlegi tartalmat","options":"Sablon opciók","selectPromptMsg":"Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):","title":"Elérhető sablonok"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"wsc":{"btnIgnore":"Kihagyja","btnIgnoreAll":"Mindet kihagyja","btnReplace":"Csere","btnReplaceAll":"Összes cseréje","btnUndo":"Visszavonás","changeTo":"Módosítás","errorLoading":"Hiba a szolgáltatás host betöltése közben: %s.","ieSpellDownload":"A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?","manyChanges":"Helyesírás-ellenőrzés kész: %1 szó cserélve","noChanges":"Helyesírás-ellenőrzés kész: Nincs változtatott szó","noMispell":"Helyesírás-ellenőrzés kész: Nem találtam hibát","noSuggestions":"Nincs javaslat","notAvailable":"Sajnálom, de a szolgáltatás jelenleg nem elérhető.","notInDic":"Nincs a szótárban","oneChange":"Helyesírás-ellenőrzés kész: Egy szó cserélve","progress":"Helyesírás-ellenőrzés folyamatban...","title":"Helyesírás ellenörző","toolbar":"Helyesírás-ellenőrzés"},"youtube":{"button":"Youtube videó beillesztése","title":"Youtube videó beillesztése","txtEmbed":"Illessze be a beágyazott kódot","txtUrl":"Illessze be a Youtube videó URL-jét","txtWidth":"Szélesség","txtHeight":"Magasság","txtStartAt":"Kezdő időpont (ss vagy mm:ss vagy hh:mm:ss)","chkRelated":"Ajánlott videók megjelenítése, amikor a videó befejeződik","chkPrivacy":"Fokozott adatvédelmi mód engedélyezése","chkOlderCode":"Régi beágyazott kód használata","chkAutoplay":"Automatikus lejátszás","noCode":"A beágyazott kód, vagy az URL megadása kötelező","invalidEmbed":"A beágyazott kód érvénytelen","invalidUrl":"A megadott URL érvénytelen","or":"vagy","noWidth":"A szélesség megadása kötelező","invalidWidth":"Érvényes szélességet adjon meg","noHeight":"A magasság megadása kötelező","invalidHeight":"Érvényes magasságot adjon meg","invalidTime":"Érvényes kezdő időpontot adjon meg","txtResponsive":"Responsive video"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/it.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['it']={"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignJustify":"Giustifica","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>","keyboard":{"8":"Backspace","13":"Invio","16":"Maiusc","17":"Ctrl","18":"Alt","32":"Spazio","35":"Fine","36":"Inizio","46":"Canc","224":"Comando"},"keyboardShortcut":"Scorciatoia da tastiera"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Riguardo CKEditor","help":"Vedi $1 per l'aiuto.","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:","title":"Riguardo CKEditor","userGuide":"Guida Utente CKEditor"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"bidi":{"ltr":"Direzione del testo da sinistra verso destra","rtl":"Direzione del testo da destra verso sinistra"},"blockquote":{"toolbar":"Citazione"},"button":{"selectedLabel":"%1 (selezionato)"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"codemirror":{"toolbar":"Codice Sorgente","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatico","bgColorTitle":"Colore sfondo","colors":{"000":"Nero","800000":"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo","696969":"Grigio Scuro","B22222":"Giallo Fiamma","A52A2A":"Marrone","DAA520":"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro","800080":"Viola","808080":"Grigio","F00":"Rosso","FF8C00":"Arancio Scuro","FFD700":"Oro","008000":"Verde","0FF":"Ciano","00F":"Blu","EE82EE":"Violetto","A9A9A9":"Grigio Scuro","FFA07A":"Salmone","FFA500":"Arancio","FFFF00":"Giallo","00FF00":"Lime","AFEEEE":"Turchese Chiaro","ADD8E6":"Blu Chiaro","DDA0DD":"Rosso Ciliegia","D3D3D3":"Grigio Chiaro","FFF0F5":"Lavanda Chiara","FAEBD7":"Bianco Antico","FFFFE0":"Giallo Chiaro","F0FFF0":"Verde Mela","F0FFFF":"Azzurro","F0F8FF":"Celeste","E6E6FA":"Lavanda","FFF":"Bianco","1ABC9C":"Ciano intenso","2ECC71":"Smeraldo","3498DB":"Blu luminoso","9B59B6":"Ametista","4E5F70":"Blu grigiastro","F1C40F":"Giallo vivido","16A085":"Ciano scuro","27AE60":"Smeraldo scuro","2980B9":"Blu intenso","8E44AD":"Viola scuro","2C3E50":"Blu desaturato","F39C12":"Arancio","E67E22":"Carota","E74C3C":"Rosso pallido","ECF0F1":"Argento luminoso","95A5A6":"Ciano grigiastro chiaro","DDD":"Grigio chiaro","D35400":"Zucca","C0392B":"Rosso intenso","BDC3C7":"Argento","7F8C8D":"Ciano grigiastro","999":"Grigio scuro"},"more":"Altri colori...","panelTitle":"Colori","textColorTitle":"Colore testo"},"colordialog":{"clear":"cancella","highlight":"Evidenzia","options":"Opzioni colore","selected":"Seleziona il colore","title":"Selezionare il colore"},"contextmenu":{"options":"Opzioni del menù contestuale"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Titolo Avviso","cssClassInputLabel":"Classi di stile","edit":"Modifica DIV","inlineStyleInputLabel":"Stile Inline","langDirLTRLabel":"Da sinistra a destra (LTR)","langDirLabel":"Direzione di scrittura","langDirRTLLabel":"Da destra a sinistra (RTL)","languageCodeInputLabel":"Codice lingua","remove":"Rimuovi DIV","styleSelectLabel":"Stile","title":"Crea DIV contenitore","toolbar":"Crea DIV contenitore"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"find":{"find":"Trova","findOptions":"Opzioni di ricerca","findWhat":"Trova:","matchCase":"Maiuscole/minuscole","matchCyclic":"Ricerca ciclica","matchWord":"Solo parole intere","notFoundMsg":"L'elemento cercato non è stato trovato.","replace":"Sostituisci","replaceAll":"Sostituisci tutto","replaceSuccessMsg":"%1 occorrenza(e) sostituite.","replaceWith":"Sostituisci con:","title":"Cerca e Sostituisci"},"flash":{"access":"Accesso Script","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"Solo stesso dominio","alignAbsBottom":"In basso assoluto","alignAbsMiddle":"Centrato assoluto","alignBaseline":"Linea base","alignTextTop":"In alto al testo","bgcolor":"Colore sfondo","chkFull":"Permetti la modalità tutto schermo","chkLoop":"Riavvio automatico","chkMenu":"Abilita Menu di Flash","chkPlay":"Avvio Automatico","flashvars":"Variabili per Flash","hSpace":"HSpace","properties":"Proprietà Oggetto Flash","propertiesTab":"Proprietà","quality":"Qualità","qualityAutoHigh":"Alta Automatica","qualityAutoLow":"Bassa Automatica","qualityBest":"Massima","qualityHigh":"Alta","qualityLow":"Bassa","qualityMedium":"Intermedia","scale":"Ridimensiona","scaleAll":"Mostra Tutto","scaleFit":"Dimensione Esatta","scaleNoBorder":"Senza Bordo","title":"Proprietà Oggetto Flash","vSpace":"VSpace","validateHSpace":"L'HSpace dev'essere un numero.","validateSrc":"Devi inserire l'URL del collegamento","validateVSpace":"Il VSpace dev'essere un numero.","windowMode":"Modalità finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Trasparente","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Dimensione","voiceLabel":"Dimensione Carattere","panelTitle":"Dimensione"},"label":"Carattere","panelTitle":"Carattere","voiceLabel":"Carattere"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"forms":{"button":{"title":"Proprietà bottone","text":"Testo (Valore)","type":"Tipo","typeBtn":"Bottone","typeSbm":"Invio","typeRst":"Annulla"},"checkboxAndRadio":{"checkboxTitle":"Proprietà checkbox","radioTitle":"Proprietà radio button","value":"Valore","selected":"Selezionato","required":"Richiesto"},"form":{"title":"Proprietà modulo","menu":"Proprietà modulo","action":"Azione","method":"Metodo","encoding":"Codifica"},"hidden":{"title":"Proprietà campo nascosto","name":"Nome","value":"Valore"},"select":{"title":"Proprietà menu di selezione","selectInfo":"Info","opAvail":"Opzioni disponibili","value":"Valore","size":"Dimensione","lines":"righe","chkMulti":"Permetti selezione multipla","required":"Richiesto","opText":"Testo","opValue":"Valore","btnAdd":"Aggiungi","btnModify":"Modifica","btnUp":"Su","btnDown":"Gi","btnSetValue":"Imposta come predefinito","btnDelete":"Rimuovi"},"textarea":{"title":"Proprietà area di testo","cols":"Colonne","rows":"Righe"},"textfield":{"title":"Proprietà campo di testo","name":"Nome","value":"Valore","charWidth":"Larghezza","maxChars":"Numero massimo di caratteri","required":"Richiesto","type":"Tipo","typeText":"Testo","typePass":"Password","typeEmail":"Email","typeSearch":"Cerca","typeTel":"Numero di telefono","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"iframe":{"border":"Mostra il bordo","noUrl":"Inserire l'URL del campo IFrame","scrolling":"Abilita scrollbar","title":"Proprietà IFrame","toolbar":"IFrame"},"image":{"alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"justify":{"block":"Giustifica","center":"Centra","left":"Allinea a sinistra","right":"Allinea a destra"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","download":"Forza scaricamento","displayText":"Mostra testo","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"liststyle":{"armenian":"Numerazione Armena","bulletedTitle":"Proprietà liste puntate","circle":"Cerchio","decimal":"Decimale (1, 2, 3, ecc.)","decimalLeadingZero":"Decimale preceduto da 0 (01, 02, 03, ecc.)","disc":"Disco","georgian":"Numerazione Georgiana (an, ban, gan, ecc.)","lowerAlpha":"Alfabetico minuscolo (a, b, c, d, e, ecc.)","lowerGreek":"Greco minuscolo (alpha, beta, gamma, ecc.)","lowerRoman":"Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)","none":"Nessuno","notset":"<non impostato>","numberedTitle":"Proprietà liste numerate","square":"Quadrato","start":"Inizio","type":"Tipo","upperAlpha":"Alfabetico maiuscolo (A, B, C, D, E, ecc.)","upperRoman":"Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)","validateStartNumber":"Il numero di inizio di una lista numerata deve essere un numero intero."},"magicline":{"title":"Inserisci paragrafo qui"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"widget":{"move":"Fare clic e trascinare per spostare","label":"Widget %1"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Interruzione di pagina","toolbar":"Inserisci interruzione di pagina per la stampa"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"removeformat":{"toolbar":"Elimina formattazione"},"save":{"toolbar":"Salva"},"scayt":{"btn_about":"About COMS","btn_dictionaries":"Dizionari","btn_disable":"Disabilita COMS","btn_enable":"Abilita COMS","btn_langs":"Lingue","btn_options":"Opzioni","text_title":"Controllo Ortografico Mentre Scrivi"},"selectall":{"toolbar":"Seleziona tutto"},"showblocks":{"toolbar":"Visualizza Blocchi"},"smiley":{"options":"Opzioni Smiley","title":"Inserisci emoticon","toolbar":"Emoticon"},"sourcearea":{"toolbar":"Sorgente"},"sourcedialog":{"toolbar":"Sorgente","title":"Sorgente"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"templates":{"button":"Modelli","emptyListMsg":"(Nessun modello definito)","insertOption":"Cancella il contenuto corrente","options":"Opzioni del Modello","selectPromptMsg":"Seleziona il modello da aprire nell'editor","title":"Contenuto dei modelli"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"undo":{"redo":"Ripristina","undo":"Annulla"},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora tutto","btnReplace":"Cambia","btnReplaceAll":"Cambia tutto","btnUndo":"Annulla","changeTo":"Cambia in","errorLoading":"Errore nel caricamento dell'host col servizio applicativo: %s.","ieSpellDownload":"Contollo ortografico non installato. Lo vuoi scaricare ora?","manyChanges":"Controllo ortografico completato: %1 parole cambiate","noChanges":"Controllo ortografico completato: nessuna parola cambiata","noMispell":"Controllo ortografico completato: nessun errore trovato","noSuggestions":"- Nessun suggerimento -","notAvailable":"Il servizio non è momentaneamente disponibile.","notInDic":"Non nel dizionario","oneChange":"Controllo ortografico completato: 1 parola cambiata","progress":"Controllo ortografico in corso","title":"Controllo ortografico","toolbar":"Correttore ortografico"},"youtube":{"button":"Incorpora video Youtube","title":"Incorpora video Youtube","txtEmbed":"Incolla qui il codice di incorporamento","txtUrl":"Incolla l'URL del video Youtube","txtWidth":"Larghezza","txtHeight":"Altezza","chkRelated":"Mostra i video suggeriti dopo il video","txtStartAt":"Inizia a (ss o mm:ss o hh:mm:ss)","chkPrivacy":"Abilita la protezione della privacy","chkOlderCode":"Usa il vecchio codice di incorporamento","chkAutoplay":"Autoplay","noCode":"Devi inserire un codice di incorporamento o un URL","invalidEmbed":"Il codice di incorporamento inserito non sembra valido","invalidUrl":"L'URL inserito non sembra valido","or":"o","noWidth":"Devi indicare la larghezza","invalidWidth":"Indica una larghezza valida","noHeight":"Devi indicare l'altezza","invalidHeight":"Indica un'altezza valida","invalidTime":"Indica un tempo di inizio valido","txtResponsive":"Responsive video"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/lv.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['lv']={"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"Centrēti","alignJustify":"Izlīdzināt malas","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"Nekas","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor","help":"Pārbaudiet $1 palīdzībai.","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:","title":"Par CKEditor","userGuide":"CKEditor Lietotāja pamācība"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"bidi":{"ltr":"Teksta virziens no kreisās uz labo","rtl":"Teksta virziens no labās uz kreiso"},"blockquote":{"toolbar":"Bloka citāts"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteArea":"Ielīmēšanas zona","pasteMsg":"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.","securityMsg":"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.","title":"Ievietot"},"codemirror":{"toolbar":"HTML kods","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automātiska","bgColorTitle":"Fona krāsa","colors":{"000":"Melns","800000":"Sarkanbrūns","8B4513":"Sedlu brūns","2F4F4F":"Tumšas tāfeles pelēks","008080":"Zili-zaļš","000080":"Jūras","4B0082":"Indigo","696969":"Tumši pelēks","B22222":"Ķieģeļsarkans","A52A2A":"Brūns","DAA520":"Zelta","006400":"Tumši zaļš","40E0D0":"Tirkīzs","0000CD":"Vidēji zils","800080":"Purpurs","808080":"Pelēks","F00":"Sarkans","FF8C00":"Tumši oranžs","FFD700":"Zelta","008000":"Zaļš","0FF":"Tumšzils","00F":"Zils","EE82EE":"Violets","A9A9A9":"Pelēks","FFA07A":"Gaiši laškrāsas","FFA500":"Oranžs","FFFF00":"Dzeltens","00FF00":"Laima","AFEEEE":"Gaiši tirkīza","ADD8E6":"Gaiši zils","DDA0DD":"Plūmju","D3D3D3":"Gaiši pelēks","FFF0F5":"Lavandas sārts","FAEBD7":"Antīki balts","FFFFE0":"Gaiši dzeltens","F0FFF0":"Meduspile","F0FFFF":"Debesszils","F0F8FF":"Alises zils","E6E6FA":"Lavanda","FFF":"Balts","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Plašāka palete...","panelTitle":"Krāsa","textColorTitle":"Teksta krāsa"},"colordialog":{"clear":"Notīrīt","highlight":"Paraugs","options":"Krāsas uzstādījumi","selected":"Izvēlētā krāsa","title":"Izvēlies krāsu"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Konsultatīvs virsraksts","cssClassInputLabel":"Stilu klases","edit":"Labot Div","inlineStyleInputLabel":"Iekļautais stils","langDirLTRLabel":"Kreisais uz Labo (LTR)","langDirLabel":"Valodas virziens","langDirRTLLabel":"Labais uz kreiso (RTL)","languageCodeInputLabel":"Valodas kods","remove":"Noņemt Div","styleSelectLabel":"Stils","title":"Izveidot div konteineri","toolbar":"Izveidot div konteineri"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"fakeobjects":{"anchor":"Iezīme","flash":"Flash animācija","hiddenfield":"Slēpts lauks","iframe":"Iframe","unknown":"Nezināms objekts"},"find":{"find":"Meklēt","findOptions":"Meklēt uzstādījumi","findWhat":"Meklēt:","matchCase":"Reģistrjūtīgs","matchCyclic":"Sakrist cikliski","matchWord":"Jāsakrīt pilnībā","notFoundMsg":"Norādītā frāze netika atrasta.","replace":"Nomainīt","replaceAll":"Aizvietot visu","replaceSuccessMsg":"%1 gadījums(i) aizvietoti","replaceWith":"Nomainīt uz:","title":"Meklēt un aizvietot"},"flash":{"access":"Skripta pieeja","accessAlways":"Vienmēr","accessNever":"Nekad","accessSameDomain":"Tas pats domēns","alignAbsBottom":"Absolūti apakšā","alignAbsMiddle":"Absolūti vertikāli centrēts","alignBaseline":"Pamatrindā","alignTextTop":"Teksta augšā","bgcolor":"Fona krāsa","chkFull":"Pilnekrāns","chkLoop":"Nepārtraukti","chkMenu":"Atļaut Flash izvēlni","chkPlay":"Automātiska atskaņošana","flashvars":"Flash mainīgie","hSpace":"Horizontālā telpa","properties":"Flash īpašības","propertiesTab":"Uzstādījumi","quality":"Kvalitāte","qualityAutoHigh":"Automātiski Augsta","qualityAutoLow":"Automātiski Zema","qualityBest":"Labākā","qualityHigh":"Augsta","qualityLow":"Zema","qualityMedium":"Vidēja","scale":"Mainīt izmēru","scaleAll":"Rādīt visu","scaleFit":"Precīzs izmērs","scaleNoBorder":"Bez rāmja","title":"Flash īpašības","vSpace":"Vertikālā telpa","validateHSpace":"Hspace jābūt skaitlim","validateSrc":"Lūdzu norādi hipersaiti","validateVSpace":"Vspace jābūt skaitlim","windowMode":"Loga režīms","windowModeOpaque":"Necaurspīdīgs","windowModeTransparent":"Caurspīdīgs","windowModeWindow":"Logs"},"font":{"fontSize":{"label":"Izmērs","voiceLabel":"Fonta izmeŗs","panelTitle":"Izmērs"},"label":"Šrifts","panelTitle":"Šrifts","voiceLabel":"Fonts"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"forms":{"button":{"title":"Pogas īpašības","text":"Teksts (vērtība)","type":"Tips","typeBtn":"Poga","typeSbm":"Nosūtīt","typeRst":"Atcelt"},"checkboxAndRadio":{"checkboxTitle":"Atzīmēšanas kastītes īpašības","radioTitle":"Izvēles poga īpašības","value":"Vērtība","selected":"Iezīmēts","required":"Required"},"form":{"title":"Formas īpašības","menu":"Formas īpašības","action":"Darbība","method":"Metode","encoding":"Kodējums"},"hidden":{"title":"Paslēptās teksta rindas īpašības","name":"Nosaukums","value":"Vērtība"},"select":{"title":"Iezīmēšanas lauka īpašības","selectInfo":"Informācija","opAvail":"Pieejamās iespējas","value":"Vērtība","size":"Izmērs","lines":"rindas","chkMulti":"Atļaut vairākus iezīmējumus","required":"Required","opText":"Teksts","opValue":"Vērtība","btnAdd":"Pievienot","btnModify":"Veikt izmaiņas","btnUp":"Augšup","btnDown":"Lejup","btnSetValue":"Noteikt kā iezīmēto vērtību","btnDelete":"Dzēst"},"textarea":{"title":"Teksta laukuma īpašības","cols":"Kolonnas","rows":"Rindas"},"textfield":{"title":"Teksta rindas  īpašības","name":"Nosaukums","value":"Vērtība","charWidth":"Simbolu platums","maxChars":"Simbolu maksimālais daudzums","required":"Required","type":"Tips","typeText":"Teksts","typePass":"Parole","typeEmail":"Epasts","typeSearch":"Meklēt","typeTel":"Tālruņa numurs","typeUrl":"Adrese"}},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"iframe":{"border":"Rādīt rāmi","noUrl":"Norādiet iframe adresi","scrolling":"Atļaut ritjoslas","title":"IFrame uzstādījumi","toolbar":"IFrame"},"image":{"alt":"Alternatīvais teksts","border":"Rāmis","btnUpload":"Nosūtīt serverim","button2Img":"Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?","hSpace":"Horizontālā telpa","img2Button":"Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?","infoTab":"Informācija par attēlu","linkTab":"Hipersaite","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","resetSize":"Atjaunot sākotnējo izmēru","title":"Attēla īpašības","titleButton":"Attēlpogas īpašības","upload":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","vSpace":"Vertikālā telpa","validateBorder":"Apmalei jābūt veselam skaitlim","validateHSpace":"HSpace jābūt veselam skaitlim","validateVSpace":"VSpace jābūt veselam skaitlim"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"justify":{"block":"Izlīdzināt malas","center":"Izlīdzināt pret centru","left":"Izlīdzināt pa kreisi","right":"Izlīdzināt pa labi"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"Izvērstais","advisoryContentType":"Konsultatīvs satura tips","advisoryTitle":"Konsultatīvs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezīmi","menu":"Labot iezīmi","title":"Iezīmes uzstādījumi","name":"Iezīmes nosaukums","errorName":"Lūdzu norādiet iezīmes nosaukumu","remove":"Noņemt iezīmi"},"anchorId":"Pēc elementa ID","anchorName":"Pēc iezīmes nosaukuma","charset":"Pievienotā resursa kodējums","cssClasses":"Stilu saraksta klases","download":"Force Download","displayText":"Display Text","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tēma","id":"ID","info":"Hipersaites informācija","langCode":"Valodas kods","langDir":"Valodas lasīšanas virziens","langDirLTR":"No kreisās uz labo (LTR)","langDirRTL":"No labās uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Šajā dokumentā nav iezīmju)","noEmail":"Lūdzu norādi e-pasta adresi","noUrl":"Lūdzu norādi hipersaiti","other":"<cits>","popupDependent":"Atkarīgs (Netscape)","popupFeatures":"Uznirstošā loga nosaukums īpašības","popupFullScreen":"Pilnā ekrānā (IE)","popupLeft":"Kreisā koordināte","popupLocationBar":"Atrašanās vietas josla","popupMenuBar":"Izvēlnes josla","popupResizable":"Mērogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"Rīku josla","popupTop":"Augšējā koordināte","rel":"Relācija","selectAnchor":"Izvēlēties iezīmi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"Mērķis","targetFrame":"<ietvars>","targetFrameName":"Mērķa ietvara nosaukums","targetPopup":"<uznirstošā logā>","targetPopupName":"Uznirstošā loga nosaukums","title":"Hipersaite","toAnchor":"Iezīme šajā lapā","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"Augšupielādēt"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"liststyle":{"armenian":"Armēņu skaitļi","bulletedTitle":"Vienkārša saraksta uzstādījumi","circle":"Aplis","decimal":"Decimālie (1, 2, 3, utt)","decimalLeadingZero":"Decimālie ar nulli (01, 02, 03, utt)","disc":"Disks","georgian":"Gruzīņu skaitļi (an, ban, gan, utt)","lowerAlpha":"Mazie alfabēta (a, b, c, d, e, utt)","lowerGreek":"Mazie grieķu (alfa, beta, gamma, utt)","lowerRoman":"Mazie romāņu (i, ii, iii, iv, v, utt)","none":"Nekas","notset":"<nav norādīts>","numberedTitle":"Numurēta saraksta uzstādījumi","square":"Kvadrāts","start":"Sākt","type":"Tips","upperAlpha":"Lielie alfabēta (A, B, C, D, E, utt)","upperRoman":"Lielie romāņu (I, II, III, IV, V, utt)","validateStartNumber":"Saraksta sākuma numuram jābūt veselam skaitlim"},"magicline":{"title":"Ievietot šeit rindkopu"},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"widget":{"move":"Klikšķina un velc, lai pārvietotu","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Lapas pārnesums","toolbar":"Ievietot lapas pārtraukumu drukai"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","title":"Ievietot kā vienkāršu tekstu"},"removeformat":{"toolbar":"Noņemt stilus"},"save":{"toolbar":"Saglabāt"},"scayt":{"btn_about":"Par SCAYT","btn_dictionaries":"Vārdnīcas","btn_disable":"Atslēgt SCAYT","btn_enable":"Ieslēgt SCAYT","btn_langs":"Valodas","btn_options":"Uzstādījumi","text_title":"Pārbaudīt gramatiku rakstot"},"selectall":{"toolbar":"Iezīmēt visu"},"showblocks":{"toolbar":"Parādīt blokus"},"smiley":{"options":"Smaidiņu uzstādījumi","title":"Ievietot smaidiņu","toolbar":"Smaidiņi"},"sourcearea":{"toolbar":"HTML kods"},"sourcedialog":{"toolbar":"HTML kods","title":"HTML kods"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"templates":{"button":"Sagataves","emptyListMsg":"(Nav norādītas sagataves)","insertOption":"Aizvietot pašreizējo saturu","options":"Sagataves uzstādījumi","selectPromptMsg":"Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):","title":"Satura sagataves"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"wsc":{"btnIgnore":"Ignorēt","btnIgnoreAll":"Ignorēt visu","btnReplace":"Aizvietot","btnReplaceAll":"Aizvietot visu","btnUndo":"Atcelt","changeTo":"Nomainīt uz","errorLoading":"Kļūda ielādējot aplikācijas servisa adresi: %s.","ieSpellDownload":"Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?","manyChanges":"Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti","noChanges":"Pareizrakstības pārbaude pabeigta: nekas netika labots","noMispell":"Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas","noSuggestions":"- Nav ieteikumu -","notAvailable":"Atvainojiet, bet serviss šobrīd nav pieejams.","notInDic":"Netika atrasts vārdnīcā","oneChange":"Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts","progress":"Notiek pareizrakstības pārbaude...","title":"Pārbaudīt gramatiku","toolbar":"Pareizrakstības pārbaude"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/nl.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['nl']={"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignJustify":"Uitvullen","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spatie","35":"End","36":"Home","46":"Verwijderen","224":"Command"},"keyboardShortcut":"Sneltoets"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor","help":"Bekijk de $1 voor hulp.","moreInfo":"Bezoek onze website voor licentieinformatie:","title":"Over CKEditor","userGuide":"CKEditor gebruiksaanwijzing"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"bidi":{"ltr":"Schrijfrichting van links naar rechts","rtl":"Schrijfrichting van rechts naar links"},"blockquote":{"toolbar":"Citaatblok"},"button":{"selectedLabel":"%1 (Geselecteerd)"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"codemirror":{"toolbar":"Broncode","searchCode":"Zoek in broncode","autoFormat":"Formatteer selectie","commentSelectedRange":"Zet selectie in commentaar","uncommentSelectedRange":"Haal selectie uit commentaar","autoCompleteToggle":"Zet automatisch aanvullen van HTML tags aan/uit"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Achtergrondkleur","colors":{"000":"Zwart","800000":"Kastanjebruin","8B4513":"Chocoladebruin","2F4F4F":"Donkerleigrijs","008080":"Blauwgroen","000080":"Marine","4B0082":"Indigo","696969":"Donkergrijs","B22222":"Baksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turquoise","0000CD":"Middenblauw","800080":"Paars","808080":"Grijs","F00":"Rood","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Cyaan","00F":"Blauw","EE82EE":"Violet","A9A9A9":"Donkergrijs","FFA07A":"Lichtzalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Felgroen","AFEEEE":"Lichtturquoise","ADD8E6":"Lichtblauw","DDA0DD":"Pruim","D3D3D3":"Lichtgrijs","FFF0F5":"Linnen","FAEBD7":"Ivoor","FFFFE0":"Lichtgeel","F0FFF0":"Honingdauw","F0FFFF":"Azuur","F0F8FF":"Licht hemelsblauw","E6E6FA":"Lavendel","FFF":"Wit","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Meer kleuren...","panelTitle":"Kleuren","textColorTitle":"Tekstkleur"},"colordialog":{"clear":"Wissen","highlight":"Actief","options":"Kleuropties","selected":"Geselecteerde kleur","title":"Selecteer kleur"},"contextmenu":{"options":"Contextmenu opties"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Adviserende titel","cssClassInputLabel":"Stylesheet klassen","edit":"Div wijzigen","inlineStyleInputLabel":"Inline stijl","langDirLTRLabel":"Links naar rechts (LTR)","langDirLabel":"Schrijfrichting","langDirRTLLabel":"Rechts naar links (RTL)","languageCodeInputLabel":" Taalcode","remove":"Div verwijderen","styleSelectLabel":"Stijl","title":"Div aanmaken","toolbar":"Div aanmaken"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"find":{"find":"Zoeken","findOptions":"Zoekopties","findWhat":"Zoeken naar:","matchCase":"Hoofdlettergevoelig","matchCyclic":"Doorlopend zoeken","matchWord":"Hele woord moet voorkomen","notFoundMsg":"De opgegeven tekst is niet gevonden.","replace":"Vervangen","replaceAll":"Alles vervangen","replaceSuccessMsg":"%1 resultaten vervangen.","replaceWith":"Vervangen met:","title":"Zoeken en vervangen"},"flash":{"access":"Script toegang","accessAlways":"Altijd","accessNever":"Nooit","accessSameDomain":"Zelfde domeinnaam","alignAbsBottom":"Absoluut-onder","alignAbsMiddle":"Absoluut-midden","alignBaseline":"Basislijn","alignTextTop":"Boven tekst","bgcolor":"Achtergrondkleur","chkFull":"Schermvullend toestaan","chkLoop":"Herhalen","chkMenu":"Flashmenu's inschakelen","chkPlay":"Automatisch afspelen","flashvars":"Variabelen voor Flash","hSpace":"HSpace","properties":"Eigenschappen Flash","propertiesTab":"Eigenschappen","quality":"Kwaliteit","qualityAutoHigh":"Automatisch hoog","qualityAutoLow":"Automatisch laag","qualityBest":"Beste","qualityHigh":"Hoog","qualityLow":"Laag","qualityMedium":"Gemiddeld","scale":"Schaal","scaleAll":"Alles tonen","scaleFit":"Precies passend","scaleNoBorder":"Geen rand","title":"Eigenschappen Flash","vSpace":"VSpace","validateHSpace":"De HSpace moet een getal zijn.","validateSrc":"De URL mag niet leeg zijn.","validateVSpace":"De VSpace moet een getal zijn.","windowMode":"Venster modus","windowModeOpaque":"Ondoorzichtig","windowModeTransparent":"Doorzichtig","windowModeWindow":"Venster"},"font":{"fontSize":{"label":"Lettergrootte","voiceLabel":"Lettergrootte","panelTitle":"Lettergrootte"},"label":"Lettertype","panelTitle":"Lettertype","voiceLabel":"Lettertype"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"forms":{"button":{"title":"Eigenschappen knop","text":"Tekst (waarde)","type":"Soort","typeBtn":"Knop","typeSbm":"Versturen","typeRst":"Leegmaken"},"checkboxAndRadio":{"checkboxTitle":"Eigenschappen aanvinkvakje","radioTitle":"Eigenschappen selectievakje","value":"Waarde","selected":"Geselecteerd","required":"Vereist"},"form":{"title":"Eigenschappen formulier","menu":"Eigenschappen formulier","action":"Actie","method":"Methode","encoding":"Codering"},"hidden":{"title":"Eigenschappen verborgen veld","name":"Naam","value":"Waarde"},"select":{"title":"Eigenschappen selectieveld","selectInfo":"Informatie","opAvail":"Beschikbare opties","value":"Waarde","size":"Grootte","lines":"Regels","chkMulti":"Gecombineerde selecties toestaan","required":"Vereist","opText":"Tekst","opValue":"Waarde","btnAdd":"Toevoegen","btnModify":"Wijzigen","btnUp":"Omhoog","btnDown":"Omlaag","btnSetValue":"Als geselecteerde waarde instellen","btnDelete":"Verwijderen"},"textarea":{"title":"Eigenschappen tekstvak","cols":"Kolommen","rows":"Rijen"},"textfield":{"title":"Eigenschappen tekstveld","name":"Naam","value":"Waarde","charWidth":"Breedte (tekens)","maxChars":"Maximum aantal tekens","required":"Vereist","type":"Soort","typeText":"Tekst","typePass":"Wachtwoord","typeEmail":"E-mail","typeSearch":"Zoeken","typeTel":"Telefoonnummer","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"iframe":{"border":"Framerand tonen","noUrl":"Vul de IFrame URL in","scrolling":"Scrollbalken inschakelen","title":"IFrame-eigenschappen","toolbar":"IFrame"},"image":{"alt":"Alternatieve tekst","border":"Rand","btnUpload":"Naar server verzenden","button2Img":"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?","hSpace":"HSpace","img2Button":"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?","infoTab":"Informatie afbeelding","linkTab":"Link","lockRatio":"Afmetingen vergrendelen","menu":"Eigenschappen afbeelding","resetSize":"Afmetingen resetten","title":"Eigenschappen afbeelding","titleButton":"Eigenschappen afbeeldingsknop","upload":"Upload","urlMissing":"De URL naar de afbeelding ontbreekt.","vSpace":"VSpace","validateBorder":"Rand moet een heel nummer zijn.","validateHSpace":"HSpace moet een heel nummer zijn.","validateVSpace":"VSpace moet een heel nummer zijn."},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"justify":{"block":"Uitvullen","center":"Centreren","left":"Links uitlijnen","right":"Rechts uitlijnen"},"language":{"button":"Taal instellen","remove":"Taal verwijderen"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","download":"Download forceren","displayText":"Weergavetekst","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"liststyle":{"armenian":"Armeense nummering","bulletedTitle":"Eigenschappen lijst met opsommingstekens","circle":"Cirkel","decimal":"Cijfers (1, 2, 3, etc.)","decimalLeadingZero":"Cijfers beginnen met nul (01, 02, 03, etc.)","disc":"Schijf","georgian":"Georgische nummering (an, ban, gan, etc.)","lowerAlpha":"Kleine letters (a, b, c, d, e, etc.)","lowerGreek":"Grieks kleine letters (alpha, beta, gamma, etc.)","lowerRoman":"Romeins kleine letters (i, ii, iii, iv, v, etc.)","none":"Geen","notset":"<niet gezet>","numberedTitle":"Eigenschappen genummerde lijst","square":"Vierkant","start":"Start","type":"Type","upperAlpha":"Hoofdletters (A, B, C, D, E, etc.)","upperRoman":"Romeinse hoofdletters (I, II, III, IV, V, etc.)","validateStartNumber":"Startnummer van de lijst moet een heel nummer zijn."},"magicline":{"title":"Hier paragraaf invoeren"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"widget":{"move":"Klik en sleep om te verplaatsen","label":"%1 widget"},"oembed":{"title":"Integratie van media-inhoud (foto's, video, content)","button":"Media-inhoud van externe websites","pasteUrl":"Geef een URL van een pagina in dat ondersteund wordt (Bijv.: YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.) ...","invalidUrl":"Gelieve een geldige URL op te geven!","noEmbedCode":"Geen embed code gevonden, of de website wordt niet ondersteund!","url":"URL:","width":"Breedte:","height":"Hoogte:","widthTitle":"Breedte voor de ingevoegde inhoud","heightTitle":"Hoogte voor de ingevoegde inhoud","maxWidth":"Maximale breedte:","maxHeight":"Maximale hoogte:","maxWidthTitle":"Maximum breedte voor de ingevoegde inhoud","maxHeightTitle":"Maximum hoogte voor de ingevoegde inhoud","none":"None","resizeType":"Type formaat aanpassing (enkel video's):","noresize":"Geen formaat aanpassing (gebruik standaard)","responsive":"Responsieve formaat aanpassing","custom":"Specifieke formaat aanpassing","noVimeo":"De eigenaar van deze video heeft restricties ingesteld waardoor je deze video niet kunt invoegen op je eigen website.","Error":"Media inhoud kon niet worden opgehaald, gelieve een andere URL te proberen."},"pagebreak":{"alt":"Pagina-einde","toolbar":"Pagina-einde invoegen"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"removeformat":{"toolbar":"Opmaak verwijderen"},"save":{"toolbar":"Opslaan"},"scayt":{"btn_about":"Over SCAYT","btn_dictionaries":"Woordenboeken","btn_disable":"SCAYT uitschakelen","btn_enable":"SCAYT inschakelen","btn_langs":"Talen","btn_options":"Opties","text_title":"Controleer de spelling tijdens het typen"},"selectall":{"toolbar":"Alles selecteren"},"showblocks":{"toolbar":"Toon blokken"},"smiley":{"options":"Smiley opties","title":"Smiley invoegen","toolbar":"Smiley"},"sourcearea":{"toolbar":"Broncode"},"sourcedialog":{"toolbar":"Broncode","title":"Broncode"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Randdikte","caption":"Titel","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"templates":{"button":"Sjablonen","emptyListMsg":"(Geen sjablonen gedefinieerd)","insertOption":"Vervang de huidige inhoud","options":"Template opties","selectPromptMsg":"Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):","title":"Inhoud sjablonen"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"wsc":{"btnIgnore":"Negeren","btnIgnoreAll":"Alles negeren","btnReplace":"Vervangen","btnReplaceAll":"Alles vervangen","btnUndo":"Ongedaan maken","changeTo":"Wijzig in","errorLoading":"Er is een fout opgetreden bij het laden van de dienst: %s.","ieSpellDownload":"De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?","manyChanges":"Klaar met spellingscontrole: %1 woorden aangepast","noChanges":"Klaar met spellingscontrole: geen woorden aangepast","noMispell":"Klaar met spellingscontrole: geen fouten gevonden","noSuggestions":"- Geen suggesties -","notAvailable":"Excuses, deze dienst is momenteel niet beschikbaar.","notInDic":"Niet in het woordenboek","oneChange":"Klaar met spellingscontrole: één woord aangepast","progress":"Bezig met spellingscontrole...","title":"Spellingscontrole","toolbar":"Spellingscontrole"},"youtube":{"button":"Youtube video insluiten","title":"Youtube video insluiten","txtEmbed":"Plak embedcode hier","txtUrl":"Plak video URL","txtWidth":"Breedte","txtHeight":"Hoogte","chkRelated":"Toon gesuggereerde video aan het einde van de video","txtStartAt":"Starten op (ss of mm:ss of hh:mm:ss)","chkPrivacy":"Privacy-enhanced mode inschakelen","chkOlderCode":"Gebruik oude embedcode","chkAutoplay":"Automatisch starten","noCode":"U moet een embedcode of url ingeven","invalidEmbed":"De ingegeven embedcode lijkt niet geldig","invalidUrl":"De ingegeven url lijkt niet geldig","or":"of","noWidth":"U moet een breedte ingeven","invalidWidth":"U moet een geldige breedte ingeven","noHeight":"U moet een hoogte ingeven","invalidHeight":"U moet een geldige starttijd ingeven","invalidTime":"Inform a valid start time","txtResponsive":"Responsive video"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/no.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['no']={"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"bidi":{"ltr":"Tekstretning fra venstre til høyre","rtl":"Tekstretning fra høyre til venstre"},"blockquote":{"toolbar":"Blokksitat"},"button":{"selectedLabel":"%1 (Valgt)"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"codemirror":{"toolbar":"Kilde","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrunnsfarge","colors":{"000":"Svart","800000":"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo","696969":"Mørk grå","B22222":"Mørkerød","A52A2A":"Brun","DAA520":"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå","800080":"Purpur","808080":"Grå","F00":"Rød","FF8C00":"Mørk oransje","FFD700":"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå","EE82EE":"Fiolett","A9A9A9":"Svak grå","FFA07A":"Rosa-oransje","FFA500":"Oransje","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Svak turkis","ADD8E6":"Lys Blå","DDA0DD":"Plomme","D3D3D3":"Lys grå","FFF0F5":"Svak lavendelrosa","FAEBD7":"Antikk-hvit","FFFFE0":"Lys gul","F0FFF0":"Honningmelon","F0FFFF":"Svakt asurblått","F0F8FF":"Svak cyan","E6E6FA":"Lavendel","FFF":"Hvit","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Flere farger...","panelTitle":"Farger","textColorTitle":"Tekstfarge"},"colordialog":{"clear":"Tøm","highlight":"Merk","options":"Alternativer for farge","selected":"Valgt","title":"Velg farge"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Tittel","cssClassInputLabel":"Stilark-klasser","edit":"Rediger Div","inlineStyleInputLabel":"Inlinestiler","langDirLTRLabel":"Venstre til høyre (VTH)","langDirLabel":"Språkretning","langDirRTLLabel":"Høyre til venstre (HTV)","languageCodeInputLabel":" Språkkode","remove":"Fjern Div","styleSelectLabel":"Stil","title":"Sett inn Div Container","toolbar":"Sett inn Div Container"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"find":{"find":"Søk","findOptions":"Søkealternativer","findWhat":"Søk etter:","matchCase":"Skill mellom store og små bokstaver","matchCyclic":"Søk i hele dokumentet","matchWord":"Bare hele ord","notFoundMsg":"Fant ikke søketeksten.","replace":"Erstatt","replaceAll":"Erstatt alle","replaceSuccessMsg":"%1 tilfelle(r) erstattet.","replaceWith":"Erstatt med:","title":"Søk og erstatt"},"flash":{"access":"Scripttilgang","accessAlways":"Alltid","accessNever":"Aldri","accessSameDomain":"Samme domene","alignAbsBottom":"Abs bunn","alignAbsMiddle":"Abs midten","alignBaseline":"Bunnlinje","alignTextTop":"Tekst topp","bgcolor":"Bakgrunnsfarge","chkFull":"Tillat fullskjerm","chkLoop":"Loop","chkMenu":"Slå på Flash-meny","chkPlay":"Autospill","flashvars":"Variabler for flash","hSpace":"HMarg","properties":"Egenskaper for Flash-objekt","propertiesTab":"Egenskaper","quality":"Kvalitet","qualityAutoHigh":"Auto høy","qualityAutoLow":"Auto lav","qualityBest":"Best","qualityHigh":"Høy","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skaler","scaleAll":"Vis alt","scaleFit":"Skaler til å passe","scaleNoBorder":"Ingen ramme","title":"Flash-egenskaper","vSpace":"VMarg","validateHSpace":"HMarg må være et tall.","validateSrc":"Vennligst skriv inn lenkens url.","validateVSpace":"VMarg må være et tall.","windowMode":"Vindumodus","windowModeOpaque":"Opaque","windowModeTransparent":"Gjennomsiktig","windowModeWindow":"Vindu"},"font":{"fontSize":{"label":"Størrelse","voiceLabel":"Font Størrelse","panelTitle":"Størrelse"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Font"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"forms":{"button":{"title":"Egenskaper for knapp","text":"Tekst (verdi)","type":"Type","typeBtn":"Knapp","typeSbm":"Send","typeRst":"Nullstill"},"checkboxAndRadio":{"checkboxTitle":"Egenskaper for avmerkingsboks","radioTitle":"Egenskaper for alternativknapp","value":"Verdi","selected":"Valgt","required":"Required"},"form":{"title":"Egenskaper for skjema","menu":"Egenskaper for skjema","action":"Handling","method":"Metode","encoding":"Encoding"},"hidden":{"title":"Egenskaper for skjult felt","name":"Navn","value":"Verdi"},"select":{"title":"Egenskaper for rullegardinliste","selectInfo":"Info","opAvail":"Tilgjenglige alternativer","value":"Verdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillat flervalg","required":"Required","opText":"Tekst","opValue":"Verdi","btnAdd":"Legg til","btnModify":"Endre","btnUp":"Opp","btnDown":"Ned","btnSetValue":"Sett som valgt","btnDelete":"Slett"},"textarea":{"title":"Egenskaper for tekstområde","cols":"Kolonner","rows":"Rader"},"textfield":{"title":"Egenskaper for tekstfelt","name":"Navn","value":"Verdi","charWidth":"Tegnbredde","maxChars":"Maks antall tegn","required":"Required","type":"Type","typeText":"Tekst","typePass":"Passord","typeEmail":"Epost","typeSearch":"Søk","typeTel":"Telefonnummer","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"iframe":{"border":"Viss ramme rundt iframe","noUrl":"Vennligst skriv inn URL for iframe","scrolling":"Aktiver scrollefelt","title":"Egenskaper for IFrame","toolbar":"IFrame"},"image":{"alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"},"language":{"button":"Sett språk","remove":"Fjern språk"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","download":"Force Download","displayText":"Tekst som skal vises","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"liststyle":{"armenian":"Armensk nummerering","bulletedTitle":"Egenskaper for punktmerket liste","circle":"Sirkel","decimal":"Tall (1, 2, 3, osv.)","decimalLeadingZero":"Tall, med førstesiffer null (01, 02, 03, osv.)","disc":"Disk","georgian":"Georgisk nummerering (an, ban, gan, osv.)","lowerAlpha":"Alfabetisk, små (a, b, c, d, e, osv.)","lowerGreek":"Gresk, små (alpha, beta, gamma, osv.)","lowerRoman":"Romertall, små (i, ii, iii, iv, v, osv.)","none":"Ingen","notset":"<ikke satt>","numberedTitle":"Egenskaper for nummerert liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Alfabetisk, store (A, B, C, D, E, osv.)","upperRoman":"Romertall, store (I, II, III, IV, V, osv.)","validateStartNumber":"Starten på listen må være et heltall."},"magicline":{"title":"Sett inn nytt avsnitt her"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Sideskift","toolbar":"Sett inn sideskift for utskrift"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Lagre"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":"Stavekontroll mens du skriver"},"selectall":{"toolbar":"Merk alt"},"showblocks":{"toolbar":"Vis blokker"},"smiley":{"options":"Alternativer for smil","title":"Sett inn smil","toolbar":"Smil"},"sourcearea":{"toolbar":"Kilde"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"templates":{"button":"Maler","emptyListMsg":"(Ingen maler definert)","insertOption":"Erstatt gjeldende innhold","options":"Alternativer for mal","selectPromptMsg":"Velg malen du vil åpne i redigeringsverktøyet:","title":"Innholdsmaler"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"undo":{"redo":"Gjør om","undo":"Angre"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/pl.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['pl']={"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignJustify":"Wyjustuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"spacja","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Skrót klawiszowy"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podręczniku użytkownika programu CKEditor"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"bidi":{"ltr":"Kierunek tekstu od lewej strony do prawej","rtl":"Kierunek tekstu od prawej strony do lewej"},"blockquote":{"toolbar":"Cytat"},"button":{"selectedLabel":"%1 (Wybrany)"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"codemirror":{"toolbar":"Źródło dokumentu","autoFormat":"Sformatuj zaznaczenie","commentSelectedRange":"Zakomentuj zaznaczenie","uncommentSelectedRange":"Odkomentuj zaznaczenie","searchCode":"Wyszukaj w źródle","autoCompleteToggle":"Włącza/Wyłącza automatyczne uzupełniania tagów HTML"},"colorbutton":{"auto":"Automatycznie","bgColorTitle":"Kolor tła","colors":{"000":"Czarny","800000":"Kasztanowy","8B4513":"Czekoladowy","2F4F4F":"Ciemnografitowy","008080":"Morski","000080":"Granatowy","4B0082":"Indygo","696969":"Ciemnoszary","B22222":"Czerwień żelazowa","A52A2A":"Brązowy","DAA520":"Ciemnozłoty","006400":"Ciemnozielony","40E0D0":"Turkusowy","0000CD":"Ciemnoniebieski","800080":"Purpurowy","808080":"Szary","F00":"Czerwony","FF8C00":"Ciemnopomarańczowy","FFD700":"Złoty","008000":"Zielony","0FF":"Cyjan","00F":"Niebieski","EE82EE":"Fioletowy","A9A9A9":"Przygaszony szary","FFA07A":"Łososiowy","FFA500":"Pomarańczowy","FFFF00":"Żółty","00FF00":"Limonkowy","AFEEEE":"Bladoturkusowy","ADD8E6":"Jasnoniebieski","DDA0DD":"Śliwkowy","D3D3D3":"Jasnoszary","FFF0F5":"Jasnolawendowy","FAEBD7":"Kremowobiały","FFFFE0":"Jasnożółty","F0FFF0":"Bladozielony","F0FFFF":"Jasnolazurowy","F0F8FF":"Jasnobłękitny","E6E6FA":"Lawendowy","FFF":"Biały","1ABC9C":"Cyjan","2ECC71":"Szmaragdowy","3498DB":"Jasnoniebieski","9B59B6":"Ametystowy","4E5F70":"Szaroniebieski","F1C40F":"Żółty","16A085":"Ciemny cyjan","27AE60":"Ciemnoszmaragdowy","2980B9":"Ciemnoniebieski","8E44AD":"Ciemnofioletowy","2C3E50":"Nienasycony niebieski","F39C12":"Pomarańczowy","E67E22":"Marchewkowy","E74C3C":"Bladoczerwony","ECF0F1":"Jasnosrebrny","95A5A6":"Szarocyjanowy","DDD":"Jasnoszary","D35400":"Dyniowy","C0392B":"Ciemnoczerwony","BDC3C7":"Srebrny","7F8C8D":"Szarawy cyjan","999":"Ciemnoszary"},"more":"Więcej kolorów...","panelTitle":"Kolory","textColorTitle":"Kolor tekstu"},"colordialog":{"clear":"Wyczyść","highlight":"Zaznacz","options":"Opcje koloru","selected":"Wybrany","title":"Wybierz kolor"},"contextmenu":{"options":"Opcje menu kontekstowego"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Opis obiektu docelowego","cssClassInputLabel":"Klasy arkusza stylów","edit":"Edytuj pojemnik Div","inlineStyleInputLabel":"Style liniowe","langDirLTRLabel":"Od lewej do prawej (LTR)","langDirLabel":"Kierunek tekstu","langDirRTLLabel":"Od prawej do lewej (RTL)","languageCodeInputLabel":"Kod języka","remove":"Usuń pojemnik Div","styleSelectLabel":"Styl","title":"Utwórz pojemnik Div","toolbar":"Utwórz pojemnik Div"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"find":{"find":"Znajdź","findOptions":"Opcje wyszukiwania","findWhat":"Znajdź:","matchCase":"Uwzględnij wielkość liter","matchCyclic":"Cykliczne dopasowanie","matchWord":"Całe słowa","notFoundMsg":"Nie znaleziono szukanego hasła.","replace":"Zamień","replaceAll":"Zamień wszystko","replaceSuccessMsg":"%1 wystąpień zastąpionych.","replaceWith":"Zastąp przez:","title":"Znajdź i zamień"},"flash":{"access":"Dostęp skryptów","accessAlways":"Zawsze","accessNever":"Nigdy","accessSameDomain":"Ta sama domena","alignAbsBottom":"Do dołu","alignAbsMiddle":"Do środka w pionie","alignBaseline":"Do linii bazowej","alignTextTop":"Do góry tekstu","bgcolor":"Kolor tła","chkFull":"Zezwól na pełny ekran","chkLoop":"Pętla","chkMenu":"Włącz menu","chkPlay":"Autoodtwarzanie","flashvars":"Zmienne obiektu Flash","hSpace":"Odstęp poziomy","properties":"Właściwości obiektu Flash","propertiesTab":"Właściwości","quality":"Jakość","qualityAutoHigh":"Auto wysoka","qualityAutoLow":"Auto niska","qualityBest":"Najlepsza","qualityHigh":"Wysoka","qualityLow":"Niska","qualityMedium":"Średnia","scale":"Skaluj","scaleAll":"Pokaż wszystko","scaleFit":"Dokładne dopasowanie","scaleNoBorder":"Bez obramowania","title":"Właściwości obiektu Flash","vSpace":"Odstęp pionowy","validateHSpace":"Odstęp poziomy musi być liczbą.","validateSrc":"Podaj adres URL","validateVSpace":"Odstęp pionowy musi być liczbą.","windowMode":"Tryb okna","windowModeOpaque":"Nieprzezroczyste","windowModeTransparent":"Przezroczyste","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Rozmiar","voiceLabel":"Rozmiar czcionki","panelTitle":"Rozmiar"},"label":"Czcionka","panelTitle":"Czcionka","voiceLabel":"Czcionka"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"forms":{"button":{"title":"Właściwości przycisku","text":"Tekst (Wartość)","type":"Typ","typeBtn":"Przycisk","typeSbm":"Wyślij","typeRst":"Wyczyść"},"checkboxAndRadio":{"checkboxTitle":"Właściwości pola wyboru (checkbox)","radioTitle":"Właściwości przycisku opcji (radio)","value":"Wartość","selected":"Zaznaczone","required":"Wymagane"},"form":{"title":"Właściwości formularza","menu":"Właściwości formularza","action":"Akcja","method":"Metoda","encoding":"Kodowanie"},"hidden":{"title":"Właściwości pola ukrytego","name":"Nazwa","value":"Wartość"},"select":{"title":"Właściwości listy wyboru","selectInfo":"Informacje","opAvail":"Dostępne opcje","value":"Wartość","size":"Rozmiar","lines":"wierszy","chkMulti":"Wielokrotny wybór","required":"Wymagane","opText":"Tekst","opValue":"Wartość","btnAdd":"Dodaj","btnModify":"Zmień","btnUp":"Do góry","btnDown":"Do dołu","btnSetValue":"Ustaw jako zaznaczoną","btnDelete":"Usuń"},"textarea":{"title":"Właściwości obszaru tekstowego","cols":"Liczba kolumn","rows":"Liczba wierszy"},"textfield":{"title":"Właściwości pola tekstowego","name":"Nazwa","value":"Wartość","charWidth":"Szerokość w znakach","maxChars":"Szerokość maksymalna","required":"Wymagane","type":"Typ","typeText":"Tekst","typePass":"Hasło","typeEmail":"Email","typeSearch":"Szukaj","typeTel":"Numer telefonu","typeUrl":"Adres URL"}},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"iframe":{"border":"Pokaż obramowanie obiektu IFrame","noUrl":"Podaj adres URL elementu IFrame","scrolling":"Włącz paski przewijania","title":"Właściwości elementu IFrame","toolbar":"IFrame"},"image":{"alt":"Tekst zastępczy","border":"Obramowanie","btnUpload":"Wyślij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?","hSpace":"Odstęp poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"Hiperłącze","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","resetSize":"Przywróć rozmiar","title":"Właściwości obrazka","titleButton":"Właściwości przycisku graficznego","upload":"Wyślij","urlMissing":"Podaj adres URL obrazka.","vSpace":"Odstęp pionowy","validateBorder":"Wartość obramowania musi być liczbą całkowitą.","validateHSpace":"Wartość odstępu poziomego musi być liczbą całkowitą.","validateVSpace":"Wartość odstępu pionowego musi być liczbą całkowitą."},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"justify":{"block":"Wyjustuj","center":"Wyśrodkuj","left":"Wyrównaj do lewej","right":"Wyrównaj do prawej"},"language":{"button":"Ustaw język","remove":"Usuń język"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","download":"Wymuś pobieranie","displayText":"Wyświetlany tekst","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"liststyle":{"armenian":"Numerowanie armeńskie","bulletedTitle":"Właściwości list wypunktowanych","circle":"Koło","decimal":"Liczby (1, 2, 3 itd.)","decimalLeadingZero":"Liczby z początkowym zerem (01, 02, 03 itd.)","disc":"Okrąg","georgian":"Numerowanie gruzińskie (an, ban, gan itd.)","lowerAlpha":"Małe litery (a, b, c, d, e itd.)","lowerGreek":"Małe litery greckie (alpha, beta, gamma itd.)","lowerRoman":"Małe cyfry rzymskie (i, ii, iii, iv, v itd.)","none":"Brak","notset":"<nie ustawiono>","numberedTitle":"Właściwości list numerowanych","square":"Kwadrat","start":"Początek","type":"Typ punktora","upperAlpha":"Duże litery (A, B, C, D, E itd.)","upperRoman":"Duże cyfry rzymskie (I, II, III, IV, V itd.)","validateStartNumber":"Listę musi rozpoczynać liczba całkowita."},"magicline":{"title":"Wstaw nowy akapit"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"widget":{"move":"Kliknij i przeciągnij, by przenieść.","label":"Widget %1"},"oembed":{"title":"Osadzanie multimediów (zdjęć, filmów, dźwięku, bogatych treści)","button":"Osadzanie multimediów z witryn zewnętrznych","pasteUrl":"Wklej tutaj adres URL (adresy skrócone są również obsługiwane) z jednej z obsługiwanych stron (YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, itp.).","invalidUrl":"Proszę wprowadzić prawidłowy adres URL!","noEmbedCode":"Odnośnik nieprawidłowy lub nieobsługiwany!","url":"URL:","width":"szerokość:","height":"wysokość:","widthTitle":"Szerokość osadzanej zawartości","heightTitle":"Wysokość osadzanej zawartości","maxWidth":"Maks. szerokość:","maxHeight":"Maks. wysokość:","maxWidthTitle":"Maksymalna szerokość osadzanej zawartości","maxHeightTitle":"Maksymalna wysokość osadzanej zawartości","resizeType":"Typ zmiany rozmiaru (tylko nagrania wideo):","none":"None","noresize":"Bez zmiany rozmiaru (domyślne)","responsive":"Responsywna zmiana rozmiaru","custom":"Narzucona zmiana rozmiaru","noVimeo":"Właściciel nagrania wideo nałożył ograniczenia domenowe, nagrania nie można osadzić w witrynie.","Error":"Nie można uzyskać zawartości multimedialnej, proszę spróbować inny adres URL."},"pagebreak":{"alt":"Wstaw podział strony","toolbar":"Wstaw podział strony"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"removeformat":{"toolbar":"Usuń formatowanie"},"save":{"toolbar":"Zapisz"},"scayt":{"btn_about":"Informacje o SCAYT","btn_dictionaries":"Słowniki","btn_disable":"Wyłącz SCAYT","btn_enable":"Włącz SCAYT","btn_langs":"Języki","btn_options":"Opcje","text_title":"Sprawdź pisownię podczas pisania (SCAYT)"},"selectall":{"toolbar":"Zaznacz wszystko"},"showblocks":{"toolbar":"Pokaż bloki"},"smiley":{"options":"Opcje emotikonów","title":"Wstaw emotikona","toolbar":"Emotikony"},"sourcearea":{"toolbar":"Źródło dokumentu"},"sourcedialog":{"toolbar":"Źródło dokumentu","title":"Źródło dokumentu"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"templates":{"button":"Szablony","emptyListMsg":"(Brak zdefiniowanych szablonów)","insertOption":"Zastąp obecną zawartość","options":"Opcje szablonów","selectPromptMsg":"Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):","title":"Szablony zawartości"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"undo":{"redo":"Ponów","undo":"Cofnij"},"wsc":{"btnIgnore":"Ignoruj","btnIgnoreAll":"Ignoruj wszystkie","btnReplace":"Zmień","btnReplaceAll":"Zmień wszystkie","btnUndo":"Cofnij","changeTo":"Zmień na","errorLoading":"Błąd wczytywania hosta aplikacji usługi: %s.","ieSpellDownload":"Słownik nie jest zainstalowany. Czy chcesz go pobrać?","manyChanges":"Sprawdzanie zakończone: zmieniono %l słów","noChanges":"Sprawdzanie zakończone: nie zmieniono żadnego słowa","noMispell":"Sprawdzanie zakończone: nie znaleziono błędów","noSuggestions":"- Brak sugestii -","notAvailable":"Przepraszamy, ale usługa jest obecnie niedostępna.","notInDic":"Słowa nie ma w słowniku","oneChange":"Sprawdzanie zakończone: zmieniono jedno słowo","progress":"Trwa sprawdzanie...","title":"Sprawdź pisownię","toolbar":"Sprawdź pisownię"},"youtube":{"button":"Załącznik wideo z YouTube","title":"Załącznik wideo z YouTube","txtEmbed":"Wklej kod do umieszczenia","txtUrl":"Wklej adres URL do wideo z YouTube","txtWidth":"Szerokość","txtHeight":"Wysokość","chkRelated":"Pokaż sugerowane filmy po zakończeniu odtwarzania","txtStartAt":"Rozpocznij od (ss lub mm:ss lub gg:mm:ss)","chkPrivacy":"Włącz rozszerzony tryb prywatności","chkOlderCode":"Użyj starego kodu","chkAutoplay":"Autoodtwarzanie","noCode":"Musisz wprowadzić kod lub adres URL","invalidEmbed":"Wprowadzony kod nie jest poprawny","invalidUrl":"Wprowadzony adres URL nie jest poprawny","or":"lub","noWidth":"Musisz wpisać szerokość","invalidWidth":"Wprowadzona szerokość nie jest poprawna","noHeight":"Musisz wprowadzić wysokość","invalidHeight":"Wprowadzona wysokość nie jest poprawna","invalidTime":"Musisz wprowadzić poprawny czas rozpoczęcia","txtResponsive":"El. responsywny (ignoruj szerokość i wysokość, dopasuj do szerokości)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/pt.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['pt']={"editor":"Editor de texto enriquecido","editorPanel":"Painel do editor de texto enriquecido","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Navegar no servidor","url":"URL","protocol":"Protocolo","upload":"Carregar","uploadSubmit":"Enviar para o servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de verificação","radio":"Botão","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botão","select":"Campo de seleção","imageButton":"Botão da imagem","notSet":"<Não definido>","id":"ID","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do idioma","longDescr":"Descrição completa do URL","cssClass":"Classes de estilo das folhas","advisoryTitle":"Título consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova janela (_blank)","targetTop":"Janela superior (_top)","targetSelf":"Mesma janela (_self)","targetParent":"Janela dependente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de folhas de estilo","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Base","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"Fim","36":"Entrada","46":"Eliminar","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Doar $1 para ajudar.","moreInfo":"Para informação sobre licenciamento visite o nosso sítio web:","title":"Sobre o CKEditor","userGuide":"CKEditor - Guia do utilizador"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à linha","superscript":"Superior à linha","underline":"Sublinhado"},"bidi":{"ltr":"Direção do texto da esquerda para a direita","rtl":"Direção do texto da direita para a esquerda"},"blockquote":{"toolbar":"Bloco de citação"},"button":{"selectedLabel":"%1 (Selecionado)"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Colar área","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e carregue em <STRONG>OK</STRONG>.","securityMsg":"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.","title":"Colar"},"codemirror":{"toolbar":"Fonte","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor de fundo","colors":{"000":"Black","800000":"Castanho","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Azul naval","4B0082":"Indigo","696969":"Cinza escuro","B22222":"Vermelho tijolo","A52A2A":"Castanho","DAA520":"Dourado (daa520)","006400":"Verde escuro (006400)","40E0D0":"Turquesa","0000CD":"Azul médio (0000cd)","800080":"Purple","808080":"Cinza","F00":"Vermelho","FF8C00":"Laranja escuro","FFD700":"Dourado","008000":"Verde","0FF":"Ciano","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Cinza fosco","FFA07A":"Salmão claro","FFA500":"Laranja","FFFF00":"Amarelo","00FF00":"Limão (Verde espectro)","AFEEEE":"Turquesa pálida (afeeee)","ADD8E6":"Light Blue","DDA0DD":"Ameixa","D3D3D3":"Cinza claro","FFF0F5":"Lavanda avermelhada","FAEBD7":"Branco velho","FFFFE0":"Amarelo claro","F0FFF0":"Maná (f0fff0)","F0FFFF":"Azul celeste","F0F8FF":"Azul Alice (f0f8ff)","E6E6FA":"Lavanda","FFF":"Branco","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Mais cores...","panelTitle":"Cores","textColorTitle":"Cor do texto"},"colordialog":{"clear":"Limpar","highlight":"Realçar","options":"Opções de cor","selected":"Cor selecionada","title":"Selecionar cor"},"contextmenu":{"options":"Menu de opções de contexto"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Classes de folhas de estilo","edit":"Editar Div","inlineStyleInputLabel":"Estilho em Linha","langDirLTRLabel":"Esquerda para a direita (EPD)","langDirLabel":"Orientação de idioma","langDirRTLLabel":"Direita para a Esquerda (DPE)","languageCodeInputLabel":"Codigo do Idioma","remove":"Remover Div","styleSelectLabel":"Estilo","title":"Criar Div","toolbar":"Criar Div"},"elementspath":{"eleLabel":"Caminho dos elementos","eleTitle":"Elemento %1"},"fakeobjects":{"anchor":" Inserir/Editar âncora","flash":"Animação Flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"find":{"find":"Pesquisar","findOptions":"Opções de pesquisa","findWhat":"Texto a procurar:","matchCase":"Maiúsculas/Minúsculas","matchCyclic":"Match cyclic","matchWord":"Coincidir com toda a palavra","notFoundMsg":"O texto especificado não foi encontrado.","replace":"Substituir","replaceAll":"Substituir tudo","replaceSuccessMsg":"%1 ocurrências(s) substituídas.","replaceWith":"Substituir por:","title":"Pesquisar e substituir"},"flash":{"access":"Acesso ao Script","accessAlways":"Sempre","accessNever":"Nunca","accessSameDomain":"Mesmo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Linha de base","alignTextTop":"Topo do texto","bgcolor":"Cor de fundo","chkFull":"Permitir Ecrã inteiro","chkLoop":"Cíclico","chkMenu":"Permitir menu do Flash","chkPlay":"Reproduzir automaticamente","flashvars":"Variaveis para o Flash","hSpace":"Esp. Horiz","properties":"Propriedades do Flash","propertiesTab":"Propriedades","quality":"Qualidade","qualityAutoHigh":"Alta Automaticamente","qualityAutoLow":"Baixa Automaticamente","qualityBest":"Melhor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Média","scale":"Escala","scaleAll":"Mostrar tudo","scaleFit":"Tamanho exato","scaleNoBorder":"Sem bordas","title":"Propriedades do Flash","vSpace":"Esp.Vert","validateHSpace":"HSpace tem de ser um numero.","validateSrc":"O URL não pode ficar vazio","validateVSpace":"VSpace tem de ser um numero.","windowMode":"Modo de janela","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Janela"},"font":{"fontSize":{"label":"Tamanho","voiceLabel":"Tamanho da letra","panelTitle":"Tamanho da letra"},"label":"Fonte","panelTitle":"Nome do tipo de letra","voiceLabel":"Tipo de letra"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"forms":{"button":{"title":"Propriedades do botão","text":"Texto (valor)","type":"Tipo","typeBtn":"Botão","typeSbm":"Enviar","typeRst":"Repor"},"checkboxAndRadio":{"checkboxTitle":"Propriedades da caixa de verificação","radioTitle":"Propriedades do botão de rádio","value":"Valor","selected":"Selecionado","required":"Obrigatório"},"form":{"title":"Propriedades do formulário","menu":"Propriedades do formulário","action":"Ação","method":"Método","encoding":"Codificação"},"hidden":{"title":"Propriedades do campo oculto","name":"Nome","value":"Valor"},"select":{"title":"Propriedades da caixa de seleção","selectInfo":"Informação","opAvail":"Opções disponíveis","value":"Valor","size":"Tamanho","lines":"linhas","chkMulti":"Permitir seleções múltiplas","required":"Obrigatório","opText":"Texto","opValue":"Valor","btnAdd":"Adicionar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Descer","btnSetValue":"Definir como valor selecionado","btnDelete":"Apagar"},"textarea":{"title":"Propriedades da área de texto","cols":"Colunas","rows":"Linhas"},"textfield":{"title":"Propriedades do campo de texto","name":"Nome","value":"Valor","charWidth":"Tamanho do caracter","maxChars":"Máximo de caracteres","required":"Obrigatório","type":"Tipo","typeText":"Texto","typePass":"Senha","typeEmail":"Email","typeSearch":"Pesquisar","typeTel":"Telefone","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Inserir linha horizontal"},"iframe":{"border":"Mostrar a borda da Frame","noUrl":"Por favor, digite o URL da iframe","scrolling":"Ativar barras de rolamento","title":"Propriedades da IFrame","toolbar":"IFrame"},"image":{"alt":"Texto alternativo","border":"Limite","btnUpload":"Enviar para o servidor","button2Img":"Deseja transformar o botão com imagem selecionado em uma imagem?","hSpace":"Esp. Horiz","img2Button":"Deseja transformar a imagem selecionada em um botão com imagem?","infoTab":"Informação da imagem","linkTab":"Hiperligação","lockRatio":"Proporcional","menu":"Propriedades da Imagem","resetSize":"Tamanho original","title":"Propriedades da imagem","titleButton":"Propriedades do botão de imagem","upload":"Carregar","urlMissing":"O URL da fonte da imagem está em falta.","vSpace":"Esp. Vert","validateBorder":"A borda tem de ser um numero.","validateHSpace":"HSpace tem de ser um numero.","validateVSpace":"VSpace tem de ser um numero."},"indent":{"indent":"Aumentar avanço","outdent":"Diminuir avanço"},"justify":{"block":"Justificado","center":"Alinhar ao centro","left":"Alinhar à esquerda","right":"Alinhar à direita"},"language":{"button":"Definir Idioma","remove":"Remover idioma"},"link":{"acccessKey":"Chave de acesso","advanced":"Avançado","advisoryContentType":"Tipo de conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar âncora","menu":"Propriedades da âncora","title":"Propriedades da âncora","name":"Nome da âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remover âncora"},"anchorId":"Por ID do elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo","download":"Force Download","displayText":"Mostrar texto","emailAddress":"Endereço de email","emailBody":"Corpo da mensagem","emailSubject":"Título de mensagem","id":"ID","info":"Informação da hiperligação","langCode":"Código de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","menu":"Editar hiperligação","name":"Nome","noAnchors":"(Não existem âncoras no documento)","noEmail":"Por favor, escreva o endereço de email","noUrl":"Por favor, introduza o endereço URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de janela flutuante","popupFullScreen":"Janela completa (IE)","popupLeft":"Posição esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posição topo","rel":"Relação","selectAnchor":"Selecionar âncora","styles":"Estilo","tabIndex":"Índice de tabulação","target":"Alvo","targetFrame":"<frame>","targetFrameName":"Nome da janela de destino","targetPopup":"<janela de popup>","targetPopupName":"Nome da janela flutuante","title":"Hiperligação","toAnchor":"Ligar a âncora no texto","toEmail":"Email","toUrl":"URL","toolbar":"Hiperligação","type":"Tipo de hiperligação","unlink":"Eliminar hiperligação","upload":"Carregar"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"liststyle":{"armenian":"Numeração armênia","bulletedTitle":"Propriedades da lista não numerada","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Zero decimal à esquerda (01, 02, 03, etc.)","disc":"Disco","georgian":"Numeração georgiana (an, ban, gan, etc.)","lowerAlpha":"Minúsculas (a, b, c, d, e, etc.)","lowerGreek":"Grego em minúsculas (alpha, beta, gamma, etc.)","lowerRoman":"Romano em minúsculas (i, ii, iii, iv, v, etc.)","none":"Nenhum","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Quadrado","start":"Iniciar","type":"Tipo","upperAlpha":"Maiúsculas (A, B, C, D, E, etc.)","upperRoman":"Romanos em maiúscula (I, II, III, IV, V, etc.)","validateStartNumber":"A lista tem iniciar por um número inteiro"},"magicline":{"title":"Insira aqui o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"widget":{"move":"Clique e arraste para mover","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Quebra de página","toolbar":"Inserir quebra de página"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?","error":"Não foi possivel limpar a informação colada decido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"pastetext":{"button":"Colar como texto simples","title":"Colar como texto simples"},"removeformat":{"toolbar":"Limpar formatação"},"save":{"toolbar":"Guardar"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"Selecionar tudo"},"showblocks":{"toolbar":"Exibir blocos"},"smiley":{"options":"Opções de Emoticons","title":"Inserir um Emoticon","toolbar":"Emoticons"},"sourcearea":{"toolbar":"Fonte"},"sourcedialog":{"toolbar":"Fonte","title":"Fonte"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir carácter especial"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de Linha","panelTitle3":"Estilos de Objeto"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Tamanho do contorno","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula antes","insertAfter":"Inserir célula depois","deleteCell":"Apagar células","merge":"Unir células","mergeRight":"Unir à direita","mergeDown":"Fundir abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas na célula","colSpan":"Colunas na célula","wordWrap":"Moldar texto","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Base","bgColor":"Cor de fundo","borderColor":"Cor da margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As filas da célula deve ter um número inteiro.","invalidColSpan":"As colunas da célula devem ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Espaço interior","cellSpace":"Espaçamento de célula","column":{"menu":"Coluna","insertBefore":"Inserir coluna antes","insertAfter":"Inserir coluna depois","deleteColumn":"Apagar colunas"},"columns":"Colunas","deleteTable":"Apagar tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número de linhas tem de ser maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da tabela","row":{"menu":"Linha","insertBefore":"Inserir linha antes","insertAfter":"Inserir linha depois","deleteRow":"Apagar linhas"},"rows":"Linhas","summary":"Resumo","title":"Propriedades da tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pixéis","widthUnit":"unidade da largura"},"templates":{"button":"Temas","emptyListMsg":"(Sem temas definidos)","insertOption":"Substituir conteúdos atuais","options":"Opções do modelo","selectPromptMsg":"Por favor, selecione o modelo a abrir no editor","title":"Conteúdo dos modelos"},"toolbar":{"toolbarCollapse":"Ocultar barra de ferramentas","toolbarExpand":"Expandir barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de barras de ferramentas"},"undo":{"redo":"Refazer","undo":"Anular"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Tudo","btnReplace":"Substituir","btnReplaceAll":"Substituir Tudo","btnUndo":"Anular","changeTo":"Mudar para","errorLoading":"Error loading application service host: %s.","ieSpellDownload":" Verificação ortográfica não instalada. Quer descarregar agora?","manyChanges":"Verificação ortográfica completa: %1 palavras alteradas","noChanges":"Verificação ortográfica completa: não houve alteração de palavras","noMispell":"Verificação ortográfica completa: não foram encontrados erros","noSuggestions":"- Sem sugestões -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Não está num directório","oneChange":"Verificação ortográfica completa: uma palavra alterada","progress":"Verificação ortográfica em progresso…","title":"Spell Checker","toolbar":"Verificação Ortográfica"},"youtube":{"button":"Inserir Vídeo do Youtube","title":"Inserir Vídeo do Youtube","txtEmbed":"Cole aqui o código embed de um vídeo do Youtube","txtUrl":"Cole aqui uma URL de um vídeo do Youtube","txtWidth":"Largura","txtHeight":"Altura","chkRelated":"Mostrar vídeos sugeridos ao final do vídeo","txtStartAt":"Iniciar em (ss ou mm:ss ou hh:mm:ss)","chkPrivacy":"Ativar o modo de privacidade aprimorada","chkOlderCode":"Usar código de incorporação antigo","chkAutoplay":"Reproduzir automaticamente","noCode":"Você precisa informar um código embed ou uma URL","invalidEmbed":"O código informado não parece ser válido","invalidUrl":"A URL informada não parece ser válida","or":"ou","noWidth":"Você deve informar a largura do vídeo","invalidWidth":"Informe uma largura válida","noHeight":"Você deve informar a altura do vídeo","invalidHeight":"Informe uma altura válida","invalidTime":"O tempo informado é inválido","txtResponsive":"Vídeo responsivo"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/ru.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['ru']={"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Чекбокс","radio":"Радиокнопка","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий список","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS классы","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Комбинация клавиш"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"bidi":{"ltr":"Направление текста слева направо","rtl":"Направление текста справа налево"},"blockquote":{"toolbar":"Цитата"},"button":{"selectedLabel":"%1 (Выбрано)"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"codemirror":{"toolbar":"Источник","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Автоматически","bgColorTitle":"Цвет фона","colors":{"000":"Чёрный","800000":"Бордовый","8B4513":"Кожано-коричневый","2F4F4F":"Темный синевато-серый","008080":"Сине-зелёный","000080":"Тёмно-синий","4B0082":"Индиго","696969":"Тёмно-серый","B22222":"Кирпичный","A52A2A":"Коричневый","DAA520":"Золотисто-берёзовый","006400":"Темно-зелёный","40E0D0":"Бирюзовый","0000CD":"Умеренно синий","800080":"Пурпурный","808080":"Серый","F00":"Красный","FF8C00":"Темно-оранжевый","FFD700":"Золотистый","008000":"Зелёный","0FF":"Васильковый","00F":"Синий","EE82EE":"Фиолетовый","A9A9A9":"Тускло-серый","FFA07A":"Светло-лососевый","FFA500":"Оранжевый","FFFF00":"Жёлтый","00FF00":"Лайма","AFEEEE":"Бледно-синий","ADD8E6":"Свелто-голубой","DDA0DD":"Сливовый","D3D3D3":"Светло-серый","FFF0F5":"Розово-лавандовый","FAEBD7":"Античный белый","FFFFE0":"Светло-жёлтый","F0FFF0":"Медвяной росы","F0FFFF":"Лазурный","F0F8FF":"Бледно-голубой","E6E6FA":"Лавандовый","FFF":"Белый","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Ещё цвета...","panelTitle":"Цвета","textColorTitle":"Цвет текста"},"colordialog":{"clear":"Очистить","highlight":"Под курсором","options":"Настройки цвета","selected":"Выбранный цвет","title":"Выберите цвет"},"contextmenu":{"options":"Параметры контекстного меню"},"div":{"IdInputLabel":"Идентификатор","advisoryTitleInputLabel":"Заголовок","cssClassInputLabel":"Классы CSS","edit":"Редактировать контейнер","inlineStyleInputLabel":"Стиль элемента","langDirLTRLabel":"Слева направо (LTR)","langDirLabel":"Направление текста","langDirRTLLabel":"Справа налево (RTL)","languageCodeInputLabel":"Код языка","remove":"Удалить контейнер","styleSelectLabel":"Стиль","title":"Создать Div-контейнер","toolbar":"Создать Div-контейнер"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"find":{"find":"Найти","findOptions":"Опции поиска","findWhat":"Найти:","matchCase":"Учитывать регистр","matchCyclic":"По всему тексту","matchWord":"Только слово целиком","notFoundMsg":"Искомый текст не найден.","replace":"Заменить","replaceAll":"Заменить всё","replaceSuccessMsg":"Успешно заменено %1 раз(а).","replaceWith":"Заменить на:","title":"Поиск и замена"},"flash":{"access":"Доступ к скриптам","accessAlways":"Всегда","accessNever":"Никогда","accessSameDomain":"В том же домене","alignAbsBottom":"По низу текста","alignAbsMiddle":"По середине текста","alignBaseline":"По базовой линии","alignTextTop":"По верху текста","bgcolor":"Цвет фона","chkFull":"Разрешить полноэкранный режим","chkLoop":"Повторять","chkMenu":"Включить меню Flash","chkPlay":"Автоматическое воспроизведение","flashvars":"Переменные для Flash","hSpace":"Гориз. отступ","properties":"Свойства Flash","propertiesTab":"Свойства","quality":"Качество","qualityAutoHigh":"Запуск на высоком","qualityAutoLow":"Запуск на низком","qualityBest":"Лучшее","qualityHigh":"Высокое","qualityLow":"Низкое","qualityMedium":"Среднее","scale":"Масштабировать","scaleAll":"Пропорционально","scaleFit":"Заполнять","scaleNoBorder":"Заходить за границы","title":"Свойства Flash","vSpace":"Вертик. отступ","validateHSpace":"Горизонтальный отступ задается числом.","validateSrc":"Вы должны ввести ссылку","validateVSpace":"Вертикальный отступ задается числом.","windowMode":"Взаимодействие с окном","windowModeOpaque":"Непрозрачный","windowModeTransparent":"Прозрачный","windowModeWindow":"Обычный"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер шрифта","panelTitle":"Размер шрифта"},"label":"Шрифт","panelTitle":"Шрифт","voiceLabel":"Шрифт"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"forms":{"button":{"title":"Свойства кнопки","text":"Текст (Значение)","type":"Тип","typeBtn":"Кнопка","typeSbm":"Отправка","typeRst":"Сброс"},"checkboxAndRadio":{"checkboxTitle":"Свойства флаговой кнопки","radioTitle":"Свойства кнопки выбора","value":"Значение","selected":"Выбрано","required":"Обязательное поле"},"form":{"title":"Свойства формы","menu":"Свойства формы","action":"Действие","method":"Метод","encoding":"Кодировка"},"hidden":{"title":"Свойства скрытого поля","name":"Имя","value":"Значение"},"select":{"title":"Свойства списка выбора","selectInfo":"Информация о списке выбора","opAvail":"Доступные варианты","value":"Значение","size":"Размер","lines":"строк(и)","chkMulti":"Разрешить выбор нескольких вариантов","required":"Обязательное поле","opText":"Текст","opValue":"Значение","btnAdd":"Добавить","btnModify":"Изменить","btnUp":"Поднять","btnDown":"Опустить","btnSetValue":"Пометить как выбранное","btnDelete":"Удалить"},"textarea":{"title":"Свойства многострочного текстового поля","cols":"Колонок","rows":"Строк"},"textfield":{"title":"Свойства текстового поля","name":"Имя","value":"Значение","charWidth":"Ширина поля (в символах)","maxChars":"Макс. количество символов","required":"Обязательное поле","type":"Тип содержимого","typeText":"Текст","typePass":"Пароль","typeEmail":"Email","typeSearch":"Поиск","typeTel":"Номер телефона","typeUrl":"Ссылка"}},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"iframe":{"border":"Показать границы фрейма","noUrl":"Пожалуйста, введите ссылку фрейма","scrolling":"Отображать полосы прокрутки","title":"Свойства iFrame","toolbar":"iFrame"},"image":{"alt":"Альтернативный текст","border":"Граница","btnUpload":"Загрузить на сервер","button2Img":"Вы желаете преобразовать это изображение-кнопку в обычное изображение?","hSpace":"Гориз. отступ","img2Button":"Вы желаете преобразовать это обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"Ссылка","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","resetSize":"Вернуть обычные размеры","title":"Свойства изображения","titleButton":"Свойства изображения-кнопки","upload":"Загрузить","urlMissing":"Не указана ссылка на изображение.","vSpace":"Вертик. отступ","validateBorder":"Размер границ должен быть задан числом.","validateHSpace":"Горизонтальный отступ должен быть задан числом.","validateVSpace":"Вертикальный отступ должен быть задан числом."},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"},"language":{"button":"Установка языка","remove":"Удалить язык"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","download":"Force Download","displayText":"Отображаемый текст","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"liststyle":{"armenian":"Армянская нумерация","bulletedTitle":"Свойства маркированного списка","circle":"Круг","decimal":"Десятичные (1, 2, 3, и т.д.)","decimalLeadingZero":"Десятичные с ведущим нулём (01, 02, 03, и т.д.)","disc":"Окружность","georgian":"Грузинская нумерация (ани, бани, гани, и т.д.)","lowerAlpha":"Строчные латинские (a, b, c, d, e, и т.д.)","lowerGreek":"Строчные греческие (альфа, бета, гамма, и т.д.)","lowerRoman":"Строчные римские (i, ii, iii, iv, v, и т.д.)","none":"Нет","notset":"<не указано>","numberedTitle":"Свойства нумерованного списка","square":"Квадрат","start":"Начиная с","type":"Тип","upperAlpha":"Заглавные латинские (A, B, C, D, E, и т.д.)","upperRoman":"Заглавные римские (I, II, III, IV, V, и т.д.)","validateStartNumber":"Первый номер списка должен быть задан обычным целым числом."},"magicline":{"title":"Вставить здесь параграф"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"oembed":{"title":"Внедрить медиа-контент (видео, аудио, фото и т.д.)","button":"Внедрить медиа-контент с различных сайтов","pasteUrl":"Вставьте ссылку на страницу с медиа-контентом (например YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, и т.д.)","invalidUrl":"Вы ввели некорректный URL","noEmbedCode":"Не обнаружен код для вставки. Возможно, вы ввели ссылку с неподдерживаемого сайта.","url":"URL:","width":"Ширина:","height":"Высота:","widthTitle":"Ширина внедряемого медиа-контента","heightTitle":"Высота внедряемого медиа-контента","maxWidth":"Макс. ширина:","maxHeight":"Макс. высота:","maxWidthTitle":"Максимальная ширина внедряемого медиа-контента","maxHeightTitle":"Максимальная высота внедряемого медиа-контента","resizeType":"Изменение размера (только для видео):","none":"None","noresize":"Без изменения (стандартный размер)","responsive":"Задать максимальный размер","custom":"Задать конкретный размер","noVimeo":"Владелец этого видео установил ограничения на домен, и вы не можете его встроить на ваш сайт.","Error":"Невозможно получить медиа-контент. Попробуйте другой URL."},"pagebreak":{"alt":"Разрыв страницы","toolbar":"Вставить разрыв страницы для печати"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"removeformat":{"toolbar":"Убрать форматирование"},"save":{"toolbar":"Сохранить"},"scayt":{"btn_about":"О SCAYT","btn_dictionaries":"Словари","btn_disable":"Отключить SCAYT","btn_enable":"Включить SCAYT","btn_langs":"Языки","btn_options":"Настройки","text_title":"Проверка орфографии по мере ввода (SCAYT)"},"selectall":{"toolbar":"Выделить все"},"showblocks":{"toolbar":"Отображать блоки"},"smiley":{"options":"Выбор смайла","title":"Вставить смайл","toolbar":"Смайлы"},"sourcearea":{"toolbar":"Источник"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по вертикали","splitVertical":"Разделить ячейку по горизонтали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"templates":{"button":"Шаблоны","emptyListMsg":"(не определено ни одного шаблона)","insertOption":"Заменить текущее содержимое","options":"Параметры шаблона","selectPromptMsg":"Пожалуйста, выберите, какой шаблон следует открыть в редакторе","title":"Шаблоны содержимого"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"undo":{"redo":"Повторить","undo":"Отменить"},"wsc":{"btnIgnore":"Пропустить","btnIgnoreAll":"Пропустить всё","btnReplace":"Заменить","btnReplaceAll":"Заменить всё","btnUndo":"Отменить","changeTo":"Изменить на","errorLoading":"Произошла ошибка при подключении к серверу проверки орфографии: %s.","ieSpellDownload":"Модуль проверки орфографии не установлен. Хотите скачать его?","manyChanges":"Проверка орфографии завершена. Изменено слов: %1","noChanges":"Проверка орфографии завершена. Не изменено ни одного слова","noMispell":"Проверка орфографии завершена. Ошибок не найдено","noSuggestions":"- Варианты отсутствуют -","notAvailable":"Извините, но в данный момент сервис недоступен.","notInDic":"Отсутствует в словаре","oneChange":"Проверка орфографии завершена. Изменено одно слово","progress":"Орфография проверяется...","title":"Проверка орфографии","toolbar":"Проверить орфографию"},"youtube":{"button":"Вставить YouTube видео","title":"Вставить YouTube видео","txtEmbed":"Вставьте HTML-код сюда","txtUrl":"Вставьте адрес видео (URL)","txtWidth":"Ширина","txtHeight":"Высота","chkRelated":"Показать похожие видео после завершения просмотра","txtStartAt":"Начать с (сс или мм:сс или чч:мм:сс)","chkPrivacy":"Включить режим повышенной конфиденциальности","chkOlderCode":"Использовать старый код вставки","chkAutoplay":"Автозапуск","noCode":"Вы должны ввести HTML-код или адрес","invalidEmbed":"Ваш HTML-код не похож на правильный","invalidUrl":"Ваш адрес видео не похож на правильный","or":"или","noWidth":"Вы должны указать ширину","invalidWidth":"Укажите правильную ширину","noHeight":"Вы должны указать высоту","invalidHeight":"Укажите правильную высоту","invalidTime":"Укажите правильное время начала","txtResponsive":"Растягиваемое видео"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/si.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['si']={"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට  ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්‍ය","alignJustify":"Justify","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම  පේළි විලාසයයට ආකෘතිය  අනතර්ග විය යුතය  \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS  ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","help":"උදව් සඳහා $1 ","moreInfo":"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:","title":"CKEditor ගැන විස්තර","userGuide":"CKEditor භාවිතා කිරීම පිළිබඳ "},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"bidi":{"ltr":"වගන්ති දිශාව වමේ සිට දකුණට","rtl":"වගන්ති දිශාව  දකුණේ සිට වමට"},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපාගන්න","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"codemirror":{"toolbar":"Source","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatic","bgColorTitle":"පසුබිම් වර්ණය","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colors...","panelTitle":"වර්ණය","textColorTitle":"අක්ෂර වර්ණ"},"colordialog":{"clear":"පැහැදිලි","highlight":"මතුකර පෙන්වන්න","options":"වර්ණ විකල්ප","selected":"තෙරු වර්ණ","title":"වර්ණ තෝරන්න"},"contextmenu":{"options":"අනතර්ග ලේඛණ  විකල්ප"},"div":{"IdInputLabel":"අංකය","advisoryTitleInputLabel":"උපදේශාත්මක නාමය","cssClassInputLabel":"විලාසපත්‍ර පන්තිය","edit":"වෙනස්කිරීම","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"වමේසිට දකුණුට","langDirLabel":"භාෂා දිශාව","langDirRTLLabel":"දකුණේ සිට වමට","languageCodeInputLabel":"භාෂා ","remove":"ඉවත් කිරීම","styleSelectLabel":"විලාසය","title":"නිර්මාණය ","toolbar":"නිර්මාණය "},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"fakeobjects":{"anchor":"ආධාරය","flash":"Flash Animation","hiddenfield":"සැඟවුණු ප්‍රදේශය","iframe":"IFrame","unknown":"Unknown Object"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"හිලව් කිරීම","replaceAll":"සියල්ලම හිලව් කරන්න","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"flash":{"access":"පිටපත් ප්‍රවේශය","accessAlways":"හැමවිටම","accessNever":"කිසිදා නොවේ","accessSameDomain":"එකම වසමේ","alignAbsBottom":"පතුල","alignAbsMiddle":"Abs ","alignBaseline":"පාද රේඛාව","alignTextTop":"වගන්තිය ඉහල","bgcolor":"පසුබිම් වර්ණය","chkFull":"පුර්ණ තිරය සදහා අවසර","chkLoop":"පුඩුව","chkMenu":"සක්‍රිය බබලන මෙනුව","chkPlay":"ස්‌වයංක්‍රිය ක්‍රියාත්මක වීම","flashvars":"වෙනස්වන දත්ත","hSpace":"HSpace","properties":"බබලන ගුණ","propertiesTab":"ගුණ","quality":"තත්වය","qualityAutoHigh":"ස්‌වයංක්‍රිය  ","qualityAutoLow":" ස්‌වයංක්‍රිය   ","qualityBest":"වඩාත් ගැලපෙන","qualityHigh":"ඉහළ","qualityLow":"පහළ","qualityMedium":"මධ්‍ය","scale":"පරිමාණ","scaleAll":"සියල්ල ","scaleFit":"හරියටම ගැලපෙන","scaleNoBorder":"මාඉම් නොමැති","title":"බබලන ","vSpace":"VSpace","validateHSpace":"HSpace සංක්‍යාවක් විය යුතුය.","validateSrc":"URL හිස් නොවිය ","validateVSpace":"VSpace සංක්‍යාවක් විය යුතුය","windowMode":"ජනෙල ක්‍රමය","windowModeOpaque":"විනිවිද පෙනෙන","windowModeTransparent":"විනිවිද පෙනෙන","windowModeWindow":"ජනෙල"},"font":{"fontSize":{"label":"විශාලත්වය","voiceLabel":"අක්ෂර විශාලත්වය","panelTitle":"අක්ෂර විශාලත්වය"},"label":"අක්ෂරය","panelTitle":"අක්ෂර නාමය","voiceLabel":"අක්ෂර"},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"සාමාන්‍ය(DIV)","tag_h1":"ශීර්ෂය 1","tag_h2":"ශීර්ෂය 2","tag_h3":"ශීර්ෂය 3","tag_h4":"ශීර්ෂය 4","tag_h5":"ශීර්ෂය 5","tag_h6":"ශීර්ෂය 6","tag_p":"සාමාන්‍ය","tag_pre":"ආකෘතියන්"},"forms":{"button":{"title":"බොත්තම් ගුණ","text":"වගන්තිය(වටිනාකම)","type":"වර්ගය","typeBtn":"බොත්තම","typeSbm":"යොමුකරනවා","typeRst":"නැවත ආරම්භකතත්වයට පත් කරනවා"},"checkboxAndRadio":{"checkboxTitle":"ලකුණු කිරීමේ කොටුවේ ලක්ෂණ","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"පෝරමයේ ","menu":"පෝරමයේ ගුණ/","action":"ගන්නා පියවර","method":"ක්‍රමය","encoding":"කේතීකරණය"},"hidden":{"title":"සැඟවුණු ප්‍රදේශයේ ","name":"නම","value":"Value"},"select":{"title":"තේරීම් ප්‍රදේශයේ ","selectInfo":"විස්තර තෝරන්න","opAvail":"ඉතුරුවී ඇති වීකල්ප","value":"Value","size":"විශාලත්වය","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"මකා දැම්ම"},"textarea":{"title":"Textarea Properties","cols":"සිරස් ","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"නම","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"වර්ගය","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"iframe":{"border":"සැකිල්ලේ කඩයිම් ","noUrl":"කරුණාකර රුපයේ URL ලියන්න","scrolling":"සක්ක්‍රිය කරන්න","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"විකල්ප ","border":"සීමාවවල ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","button2Img":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","hSpace":"HSpace","img2Button":"ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්‍යද?","infoTab":"රුපයේ තොරතුරු","linkTab":"සබැඳිය","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","title":"රුපයේ ","titleButton":"රුප බොත්තමේ ගුණ","upload":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්‍ර URL නැත.","vSpace":"VSpace","validateBorder":"මාඉම් සම්පුර්ණ සංක්‍යාවක් විය යුතුය.","validateHSpace":"HSpace  සම්පුර්ණ සංක්‍යාවක් විය යුතුය","validateVSpace":"VSpace සම්පුර්ණ සංක්‍යාවක් විය යුතුය."},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"justify":{"block":"Justify","center":"මධ්‍ය","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"ප්‍රවේශ  යතුර","advanced":"දීය","advisoryContentType":"උපදේශාත්මක අන්තර්ගත ආකාරය","advisoryTitle":"උපදේශාත්මක නාමය","anchor":{"toolbar":"ආධාරය","menu":"ආධාරය වෙනස් කිරීම","title":"ආධාරක ","name":"ආධාරකයේ නාමය","errorName":"කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න","remove":"ආධාරකය ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලාසපත්‍ර පන්තිය","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භාෂා කේතය","langDir":"භාෂා දිශාව","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලාසය","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"සබැඳිය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබැඳිය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"කිසිවක්ම නොවේ","notset":"<යොදා >","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"වර්ගය","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"පිටු බිදුම","toolbar":"මුද්‍රණය සඳහා පිටු බිදුමක් ඇතුලත් කරන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","title":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"save":{"toolbar":"ආරක්ෂා කරන්න"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"සියල්ලම "},"showblocks":{"toolbar":"කොටස පෙන්නන්න"},"smiley":{"options":"හාස්‍ය විකල්ප","title":"හාස්‍යන් ඇතුලත් කිරීම","toolbar":"හාස්‍යන්"},"sourcearea":{"toolbar":"මුලාශ්‍රය"},"sourcedialog":{"toolbar":"මුලාශ්‍රය","title":"මුලාශ්‍රය"},"specialchar":{"options":"විශේෂ  ගුණාංග වීකල්ප","title":"විශේෂ  ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"templates":{"button":"අච්චුව","emptyListMsg":"කිසිම අච්චුවක් කලින් තීරණය කර ","insertOption":"සත්‍ය අන්තර්ගතයන් ප්‍රතිස්ථාපනය කරන්න","options":"අච්චු ","selectPromptMsg":"කරුණාකර සංස්කරණය සදහා අච්චුවක් ","title":"අන්තර්ගත් අච්චුන්"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/sk.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['sk']={"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačením ALT 0 spustiť pomocníka","browseServer":"Prehliadať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie pole","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvorit","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nie je číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignJustify":"Zarovnať do bloku","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Medzerník","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Klávesová skratka"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O CKEditor-e","help":"Zaškrtnite $1 pre pomoc.","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:","title":"O CKEditor-e","userGuide":"Používateľská príručka KCEditor-a"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"bidi":{"ltr":"Smer textu zľava doprava","rtl":"Smer textu sprava doľava"},"blockquote":{"toolbar":"Citácia"},"button":{"selectedLabel":"%1 (Vybrané)"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteArea":"Miesto na vloženie","pasteMsg":"Použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) vložte text do rámčeka a stlačte OK.","securityMsg":"Kvôli bezpečnostným nastaveniam vášho prehliadača editor nemôže pristupovať k schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"Vložiť"},"codemirror":{"toolbar":"Zdroj","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Farba pozadia","colors":{"000":"Čierna","800000":"Gaštanová","8B4513":"Sedlová hnedá","2F4F4F":"Tmavo bridlicovo sivá","008080":"Modrozelená","000080":"Tmavomodrá","4B0082":"Indigo","696969":"Tmavá sivá","B22222":"Ohňová tehlová","A52A2A":"Hnedá","DAA520":"Zlatobyľ","006400":"Tmavá zelená","40E0D0":"Tyrkysová","0000CD":"Stredná modrá","800080":"Purpurová","808080":"Sivá","F00":"Červená","FF8C00":"Tmavá oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azúrová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Tmavá sivá","FFA07A":"Svetlá lososová","FFA500":"Oranžová","FFFF00":"Žltá","00FF00":"Vápenná","AFEEEE":"Svetlá tyrkysová","ADD8E6":"Svetlá modrá","DDA0DD":"Slivková","D3D3D3":"Svetlá sivá","FFF0F5":"Levanduľovo červená","FAEBD7":"Antická biela","FFFFE0":"Svetlá žltá","F0FFF0":"Medová","F0FFFF":"Azúrová","F0F8FF":"Alicovo modrá","E6E6FA":"Levanduľová","FFF":"Biela","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Viac farieb...","panelTitle":"Farby","textColorTitle":"Farba textu"},"colordialog":{"clear":"Vyčistiť","highlight":"Zvýrazniť","options":"Možnosti farby","selected":"Vybraná farba","title":"Vybrať farbu"},"contextmenu":{"options":"Možnosti kontextového menu"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Pomocný titulok","cssClassInputLabel":"Triedy štýlu","edit":"Upraviť Div","inlineStyleInputLabel":"Inline štýl","langDirLTRLabel":"Zľava doprava (LTR)","langDirLabel":"Smer jazyka","langDirRTLLabel":"Zprava doľava (RTL)","languageCodeInputLabel":"Kód jazyka","remove":"Odstrániť Div","styleSelectLabel":"Štýl","title":"Vytvoriť Div kontajner","toolbar":"Vytvoriť Div kontajner"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"find":{"find":"Vyhľadať","findOptions":"Možnosti vyhľadávania","findWhat":"Čo hľadať:","matchCase":"Rozlišovať malé a veľké písmená","matchCyclic":"Po dosiahnutí konca pokračovať od začiatku","matchWord":"Len celé slová","notFoundMsg":"Hľadaný text nebol nájdený.","replace":"Nahradiť","replaceAll":"Nahradiť všetko","replaceSuccessMsg":"%1 výskyt(ov) nahradených.","replaceWith":"Čím nahradiť:","title":"Vyhľadať a nahradiť"},"flash":{"access":"Prístup skriptu","accessAlways":"Vždy","accessNever":"Nikdy","accessSameDomain":"Rovnaká doména","alignAbsBottom":"Úplne dole","alignAbsMiddle":"Do stredu","alignBaseline":"Na základnú čiaru","alignTextTop":"Na horný okraj textu","bgcolor":"Farba pozadia","chkFull":"Povoliť zobrazenie na celú obrazovku (fullscreen)","chkLoop":"Opakovanie","chkMenu":"Povoliť Flash Menu","chkPlay":"Automatické prehrávanie","flashvars":"Premenné pre Flash","hSpace":"H-medzera","properties":"Vlastnosti Flashu","propertiesTab":"Vlastnosti","quality":"Kvalita","qualityAutoHigh":"Automaticky vysoká","qualityAutoLow":"Automaticky nízka","qualityBest":"Najlepšia","qualityHigh":"Vysoká","qualityLow":"Nízka","qualityMedium":"Stredná","scale":"Mierka","scaleAll":"Zobraziť všetko","scaleFit":"Roztiahnuť, aby sedelo presne","scaleNoBorder":"Bez okrajov","title":"Vlastnosti Flashu","vSpace":"V-medzera","validateHSpace":"H-medzera musí byť číslo.","validateSrc":"URL nesmie byť prázdne.","validateVSpace":"V-medzera musí byť číslo","windowMode":"Mód okna","windowModeOpaque":"Nepriehľadný","windowModeTransparent":"Priehľadný","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Veľkosť","voiceLabel":"Veľkosť písma","panelTitle":"Veľkosť písma"},"label":"Písmo","panelTitle":"Názov písma","voiceLabel":"Písmo"},"format":{"label":"Formát","panelTitle":"Odsek","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"forms":{"button":{"title":"Vlastnosti tlačidla","text":"Text (Hodnota)","type":"Typ","typeBtn":"Tlačidlo","typeSbm":"Odoslať","typeRst":"Resetovať"},"checkboxAndRadio":{"checkboxTitle":"Vlastnosti zaškrtávacieho políčka","radioTitle":"Vlastnosti prepínača (radio button)","value":"Hodnota","selected":"Vybrané (selected)","required":"Required"},"form":{"title":"Vlastnosti formulára","menu":"Vlastnosti formulára","action":"Akcia (action)","method":"Metóda (method)","encoding":"Kódovanie (encoding)"},"hidden":{"title":"Vlastnosti skrytého poľa","name":"Názov (name)","value":"Hodnota"},"select":{"title":"Vlastnosti rozbaľovacieho zoznamu","selectInfo":"Informácie o výbere","opAvail":"Dostupné možnosti","value":"Hodnota","size":"Veľkosť","lines":"riadkov","chkMulti":"Povoliť viacnásobný výber","required":"Required","opText":"Text","opValue":"Hodnota","btnAdd":"Pridať","btnModify":"Upraviť","btnUp":"Hore","btnDown":"Dole","btnSetValue":"Nastaviť ako vybranú hodnotu","btnDelete":"Vymazať"},"textarea":{"title":"Vlastnosti textovej oblasti (textarea)","cols":"Stĺpcov","rows":"Riadkov"},"textfield":{"title":"Vlastnosti textového poľa","name":"Názov (name)","value":"Hodnota","charWidth":"Šírka poľa (podľa znakov)","maxChars":"Maximálny počet znakov","required":"Required","type":"Typ","typeText":"Text","typePass":"Heslo","typeEmail":"Email","typeSearch":"Hľadať","typeTel":"Telefónne číslo","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"iframe":{"border":"Zobraziť rám frame-u","noUrl":"Prosím, vložte URL iframe","scrolling":"Povoliť skrolovanie","title":"Vlastnosti IFrame","toolbar":"IFrame"},"image":{"alt":"Alternatívny text","border":"Rám (border)","btnUpload":"Odoslať to na server","button2Img":"Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?","hSpace":"H-medzera","img2Button":"Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?","infoTab":"Informácie o obrázku","linkTab":"Odkaz","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","resetSize":"Pôvodná veľkosť","title":"Vlastnosti obrázka","titleButton":"Vlastnosti obrázkového tlačidla","upload":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","vSpace":"V-medzera","validateBorder":"Rám (border) musí byť celé číslo.","validateHSpace":"H-medzera musí byť celé číslo.","validateVSpace":"V-medzera musí byť celé číslo."},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"justify":{"block":"Zarovnať do bloku","center":"Zarovnať na stred","left":"Zarovnať vľavo","right":"Zarovnať vpravo"},"language":{"button":"Nastaviť jazyk","remove":"Odstrániť jazyk"},"link":{"acccessKey":"Prístupový kľúč","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"Upraviť kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"Odstrániť kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy štýlu","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"Upraviť odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"Závislosť (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosť (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"Vzťah (rel)","selectAnchor":"Vybrať kotvu","styles":"Štýl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstrániť odkaz","upload":"Nahrať"},"list":{"bulletedlist":"Vložiť/odstrániť zoznam s odrážkami","numberedlist":"Vložiť/odstrániť číslovaný zoznam"},"liststyle":{"armenian":"Arménske číslovanie","bulletedTitle":"Vlastnosti odrážkového zoznamu","circle":"Kruh","decimal":"Číselné (1, 2, 3, atď.)","decimalLeadingZero":"Číselné s nulou (01, 02, 03, atď.)","disc":"Disk","georgian":"Gruzínske číslovanie (an, ban, gan, atď.)","lowerAlpha":"Malé latinské (a, b, c, d, e, atď.)","lowerGreek":"Malé grécke (alfa, beta, gama, atď.)","lowerRoman":"Malé rímske (i, ii, iii, iv, v, atď.)","none":"Nič","notset":"<nenastavené>","numberedTitle":"Vlastnosti číselného zoznamu","square":"Štvorec","start":"Začiatok","type":"Typ","upperAlpha":"Veľké latinské (A, B, C, D, E, atď.)","upperRoman":"Veľké rímske (I, II, III, IV, V, atď.)","validateStartNumber":"Začiatočné číslo číselného zoznamu musí byť celé číslo."},"magicline":{"title":"Odsek vložiť sem"},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"widget":{"move":"Kliknite a potiahnite pre presunutie","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Zalomenie strany","toolbar":"Vložiť oddeľovač stránky pre tlač"},"pastefromword":{"confirmCleanup":"Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyčistiť?","error":"Kvôli internej chybe nebolo možné vložené dáta vyčistiť","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"pastetext":{"button":"Vložiť ako čistý text","title":"Vložiť ako čistý text"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"save":{"toolbar":"Uložiť"},"scayt":{"btn_about":"O KPPP (Kontrola pravopisu počas písania)","btn_dictionaries":"Slovníky","btn_disable":"Zakázať  KPPP (Kontrola pravopisu počas písania)","btn_enable":"Povoliť KPPP (Kontrola pravopisu počas písania)","btn_langs":"Jazyky","btn_options":"Možnosti","text_title":"Kontrola pravopisu počas písania"},"selectall":{"toolbar":"Vybrať všetko"},"showblocks":{"toolbar":"Ukázať bloky"},"smiley":{"options":"Možnosti smajlíkov","title":"Vložiť smajlíka","toolbar":"Smajlíky"},"sourcearea":{"toolbar":"Zdroj"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Vnútroriadkové (inline) štýly","panelTitle3":"Štýly objeku"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Šírka orámovania","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalamovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba orámovania","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Šírka orámovania musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"templates":{"button":"Šablóny","emptyListMsg":"(Žiadne šablóny nedefinované)","insertOption":"Nahradiť aktuálny obsah","options":"Možnosti šablóny","selectPromptMsg":"Prosím vyberte šablónu na otvorenie v editore","title":"Šablóny obsahu"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odsek","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"undo":{"redo":"Znovu","undo":"Späť"},"wsc":{"btnIgnore":"Ignorovať","btnIgnoreAll":"Ignorovať všetko","btnReplace":"Prepísat","btnReplaceAll":"Prepísat všetko","btnUndo":"Späť","changeTo":"Zmeniť na","errorLoading":"Chyba pri načítaní slovníka z adresy: %s.","ieSpellDownload":"Kontrola pravopisu nie je naištalovaná. Chcete ju teraz stiahnuť?","manyChanges":"Kontrola pravopisu dokončená: Bolo zmenených %1 slov","noChanges":"Kontrola pravopisu dokončená: Neboli zmenené žiadne slová","noMispell":"Kontrola pravopisu dokončená: Neboli nájdené žiadne chyby pravopisu","noSuggestions":"- Žiadny návrh -","notAvailable":"Prepáčte, ale služba je momentálne nedostupná.","notInDic":"Nie je v slovníku","oneChange":"Kontrola pravopisu dokončená: Bolo zmenené jedno slovo","progress":"Prebieha kontrola pravopisu...","title":"Skontrolovať pravopis","toolbar":"Kontrola pravopisu"},"youtube":{"button":"Vložiť YouTube video","title":"Vložiť YouTube video","txtEmbed":"Vložiť Youtube Embed Video kódu","txtUrl":"Vložiť pomocou YouTube video URL","txtWidth":"Šírka","txtHeight":"Výška","chkRelated":"Zobraziť odporúčané videá po prehratí","txtStartAt":"Začať prehrávanie videa (ss alebo mm:ss alebo hh:mm:ss)","chkPrivacy":"Povoliť pokročilý mód súkromia","chkOlderCode":"Použiť starú metódu vkladania","chkAutoplay":"Automatické prehrávanie","noCode":"Musíte vložiť Youtube Embed kód alebo URL","invalidEmbed":"Vložený kód nie je valídny","invalidUrl":"Vložená URL nie je platná","or":"alebo","noWidth":"Prosím, zadajte šírku videa","invalidWidth":"Zadajte valídnu šírku videa","noHeight":"Prosím, zadajte výšku videa","invalidHeight":"Zadajte valídnu výšku videa","invalidTime":"Zadajte valídny formát začiatku prehrávania videa","txtResponsive":"Prispôsobit rozmery videa rozmerom obrazovky (ignoruje šírku a výšku, prispôsobí sa šírke obrazovky)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/sl.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['sl']={"editor":"Urejevalnik obogatenega besedila","editorPanel":"Plošča urejevalnika obogatenega besedila","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Besedilno polje","textarea":"Besedilno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno polje","imageButton":"Slikovni gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razredi slogovne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Spremenili ste nekaj možnosti. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo okno (_blank)","targetTop":"Vrhovno okno (_top)","targetSelf":"Isto okno (_self)","targetParent":"Starševsko okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razredi slogovne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignJustify":"Obojestranska poravnava","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne CSS-enote za merjenje (px, %, in, cm, mm, em, ex, pt ali pc).","invalidHtmlLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne HTML-enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost, določena za slog v vrstici, mora biti sestavljena iz ene ali več dvojic oblike »ime : vrednost«, ločenih s podpičji.","cssLengthTooltip":"Vnesite število za vrednost v slikovnih pikah ali število z veljavno CSS-enoto (px, %, in, cm, mm, em, ex, pt ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Oglejte si $1 za pomoč.","moreInfo":"Za informacije o licenciranju prosimo obiščite našo spletno stran:","title":"O programu CKEditor","userGuide":"Uporabniški vodnik CKEditor"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"bidi":{"ltr":"Smer besedila od leve proti desni","rtl":"Smer besedila od desne proti levi"},"blockquote":{"toolbar":"Citat"},"button":{"selectedLabel":"%1 (Izbrano)"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi območje","pasteMsg":"Prosimo, prilepite v sleči okvir s pomočjo tipkovnice (<strong>Ctrl/Cmd+V</strong>) in pritisnite V redu.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"codemirror":{"toolbar":"Izvorna koda","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Samodejno","bgColorTitle":"Barva ozadja","colors":{"000":"Črna","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Rjava","DAA520":"Golden Rod","006400":"Temno zelena","40E0D0":"Turkizna","0000CD":"Srednje modra","800080":"Škrlatna","808080":"Siva","F00":"Rdeča","FF8C00":"Temno oranžna","FFD700":"Zlata","008000":"Zelena","0FF":"Sinja","00F":"Modra","EE82EE":"Vijolična","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Oranžna","FFFF00":"Rumena","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Svetlo modra","DDA0DD":"Plum","D3D3D3":"Svetlo siva","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Svetlo rumena","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Bela","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Več barv ...","panelTitle":"Barve","textColorTitle":"Barva besedila"},"colordialog":{"clear":"Počisti","highlight":"Poudarjeno","options":"Možnosti barve","selected":"Izbrana barva","title":"Izberi barvo"},"contextmenu":{"options":"Možnosti kontekstnega menija"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Predlagani naslov","cssClassInputLabel":"Razredi slogovne predloge","edit":"Uredi div","inlineStyleInputLabel":"Slog v vrstici","langDirLTRLabel":"Od leve proti desni (LTR)","langDirLabel":"Smer jezika","langDirRTLLabel":"Od desne proti levi (RTL)","languageCodeInputLabel":"Koda jezika","remove":"Odstrani div","styleSelectLabel":"Slog","title":"Ustvari vsebnik div","toolbar":"Ustvari vsebnik div"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"Element %1"},"fakeobjects":{"anchor":"Sidro","flash":"Animacija flash","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"find":{"find":"Najdi","findOptions":"Možnosti iskanja","findWhat":"Najdi:","matchCase":"Razlikuj velike in male črke","matchCyclic":"Primerjaj znake v cirilici","matchWord":"Samo cele besede","notFoundMsg":"Navedenega besedila nismo našli.","replace":"Zamenjaj","replaceAll":"Zamenjaj vse","replaceSuccessMsg":"Zamenjali smo %1 pojavitev.","replaceWith":"Zamenjaj z:","title":"Najdi in zamenjaj"},"flash":{"access":"Dostop skripta","accessAlways":"Vedno","accessNever":"Nikoli","accessSameDomain":"Samo ista domena","alignAbsBottom":"Popolnoma na dno","alignAbsMiddle":"Popolnoma v sredino","alignBaseline":"Na osnovno črto","alignTextTop":"Besedilo na vrh","bgcolor":"Barva ozadja","chkFull":"Dovoli celozaslonski način","chkLoop":"Ponavljanje","chkMenu":"Omogoči meni flasha","chkPlay":"Samodejno predvajaj","flashvars":"Spremenljivke za flash","hSpace":"Vodoravni odmik","properties":"Lastnosti flasha","propertiesTab":"Lastnosti","quality":"Kakovost","qualityAutoHigh":"Samodejno visoka","qualityAutoLow":"Samodejno nizka","qualityBest":"Najvišja","qualityHigh":"Visoka","qualityLow":"Nizka","qualityMedium":"Srednja","scale":"Povečava","scaleAll":"Pokaži vse","scaleFit":"Natančno prileganje","scaleNoBorder":"Brez obrobe","title":"Lastnosti flasha","vSpace":"Navpični odmik","validateHSpace":"Vodoravni odmik mora biti število.","validateSrc":"Vnesite URL povezave","validateVSpace":"Navpični odmik mora biti število.","windowMode":"Način okna","windowModeOpaque":"Motno","windowModeTransparent":"Prosojno","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost pisave","panelTitle":"Velikost pisave"},"label":"Pisava","panelTitle":"Ime pisave","voiceLabel":"Pisava"},"format":{"label":"Oblika","panelTitle":"Oblika odstavka","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"forms":{"button":{"title":"Lastnosti gumba","text":"Besedilo (Vrednost)","type":"Vrsta","typeBtn":"Gumb","typeSbm":"Potrdi","typeRst":"Ponastavi"},"checkboxAndRadio":{"checkboxTitle":"Lastnosti potrditvenega polja","radioTitle":"Lastnosti izbirnega polja","value":"Vrednost","selected":"Izbrano","required":"Zahtevano"},"form":{"title":"Lastnosti obrazca","menu":"Lastnosti obrazca","action":"Dejanje","method":"Metoda","encoding":"Kodiranje znakov"},"hidden":{"title":"Lastnosti skritega polja","name":"Ime","value":"Vrednost"},"select":{"title":"Lastnosti spustnega seznama","selectInfo":"Podatki","opAvail":"Razpoložljive izbire","value":"Vrednost","size":"Velikost","lines":"vrstic","chkMulti":"Dovoli izbor več vrednosti","required":"Zahtevano","opText":"Besedilo","opValue":"Vrednost","btnAdd":"Dodaj","btnModify":"Spremeni","btnUp":"Gor","btnDown":"Dol","btnSetValue":"Določi kot privzeto izbiro","btnDelete":"Izbriši"},"textarea":{"title":"Lastnosti besedilnega območja","cols":"Stolpcev","rows":"Vrstic"},"textfield":{"title":"Lastnosti besedilnega polja","name":"Ime","value":"Vrednost","charWidth":"Širina","maxChars":"Največje število znakov","required":"Zahtevano","type":"Vrsta","typeText":"Besedilo","typePass":"Geslo","typeEmail":"E-pošta","typeSearch":"Iskanje","typeTel":"Telefonska številka","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"iframe":{"border":"Pokaži obrobo okvirja","noUrl":"Prosimo, vnesite iframe URL","scrolling":"Omogoči drsnike","title":"Lastnosti IFrame","toolbar":"IFrame"},"image":{"alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"Pošlji na strežnik","button2Img":"Želite pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni odmik","img2Button":"Želite pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"Naloži","urlMissing":"Manjka URL vira slike.","vSpace":"Navpični odmik","validateBorder":"Meja mora biti celo število.","validateHSpace":"Vodoravni odmik mora biti celo število.","validateVSpace":"VSpace mora biti celo število."},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"justify":{"block":"Obojestranska poravnava","center":"Sredinska poravnava","left":"Leva poravnava","right":"Desna poravnava"},"language":{"button":"Nastavi jezik","remove":"Odstrani jezik"},"link":{"acccessKey":"Tipka za dostop","advanced":"Napredno","advisoryContentType":"Predlagana vrsta vsebine","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Sidro","menu":"Uredi sidro","title":"Lastnosti sidra","name":"Ime sidra","errorName":"Prosimo, vnesite ime sidra","remove":"Odstrani sidro"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu sidra","charset":"Nabor znakov povezanega vira","cssClasses":"Razredi slogovne predloge","download":"Force Download","displayText":"Display Text","emailAddress":"E-poštni naslov","emailBody":"Telo sporočila","emailSubject":"Zadeva sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Koda jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni sider)","noEmail":"Vnesite e-poštni naslov","noUrl":"Vnesite URL povezave","other":"<drugo>","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonsko (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberite sidro","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Sidro na tej strani","toEmail":"E-pošta","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Naloži"},"list":{"bulletedlist":"Vstavi/odstrani neoštevilčen seznam","numberedlist":"Vstavi/odstrani oštevilčen seznam"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Vstavite odstavek tukaj"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"widget":{"move":"Kliknite in povlecite, da premaknete","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Prelom strani","toolbar":"Vstavi prelom strani"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti, je kopirano iz Worda. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"save":{"toolbar":"Shrani"},"scayt":{"btn_about":"O storitvi SCAYT","btn_dictionaries":"Slovarji","btn_disable":"Onemogoči SCAYT","btn_enable":"Omogoči SCAYT","btn_langs":"Jeziki","btn_options":"Možnosti","text_title":"Črkovanje med tipkanjem"},"selectall":{"toolbar":"Izberi vse"},"showblocks":{"toolbar":"Prikaži ograde"},"smiley":{"options":"Možnosti Smeška","title":"Vstavi smeška","toolbar":"Smeško"},"sourcearea":{"toolbar":"Izvorna koda"},"sourcedialog":{"toolbar":"Izvorna koda","title":"Izvorna koda"},"specialchar":{"options":"Možnosti posebnih znakov","title":"Izberi posebni znak","toolbar":"Vstavi posebni znak"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Velikost obrobe","caption":"Napis","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Združi navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Odmik znotraj celic","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Odmik znotraj celic mora biti pozitivno število.","invalidCellSpacing":"Razmik med celicami mora biti pozitivno število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"odstotkov","widthPx":"pik","widthUnit":"enota širine"},"templates":{"button":"Predloge","emptyListMsg":"(Ni pripravljenih predlog)","insertOption":"Zamenjaj trenutno vsebino","options":"Možnosti Predloge","selectPromptMsg":"Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):","title":"Vsebinske predloge"},"toolbar":{"toolbarCollapse":"Skrči orodno vrstico","toolbarExpand":"Razširi orodno vrstico","toolbarGroups":{"document":"Dokument","clipboard":"Odložišče/Razveljavi","editing":"Urejanje","forms":"Obrazci","basicstyles":"Osnovni slogi","paragraph":"Odstavek","links":"Povezave","insert":"Vstavi","styles":"Slogi","colors":"Barve","tools":"Orodja"},"toolbars":"Orodne vrstice urejevalnika"},"undo":{"redo":"Uveljavi","undo":"Razveljavi"},"wsc":{"btnIgnore":"Prezri","btnIgnoreAll":"Prezri vse","btnReplace":"Zamenjaj","btnReplaceAll":"Zamenjaj vse","btnUndo":"Razveljavi","changeTo":"Spremeni v","errorLoading":"Napaka pri nalaganju storitve programa na naslovu %s.","ieSpellDownload":"Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?","manyChanges":"Črkovanje je končano: Spremenjenih je bilo %1 besed","noChanges":"Črkovanje je končano: Nobena beseda ni bila spremenjena","noMispell":"Črkovanje je končano: Brez napak","noSuggestions":"- Ni predlogov -","notAvailable":"Oprostite, storitev trenutno ni dosegljiva.","notInDic":"Ni v slovarju","oneChange":"Črkovanje je končano: Spremenjena je bila ena beseda","progress":"Preverjanje črkovanja se izvaja...","title":"Črkovalnik","toolbar":"Preveri črkovanje"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/sv.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['sv']={"editor":"Rich Text-editor","editorPanel":"Panel till Rich Text-editor","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignJustify":"Justera till marginaler","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>","keyboard":{"8":"Backsteg","13":"Retur","16":"Skift","17":"Ctrl","18":"Alt","32":"Mellanslag","35":"Slut","36":"Hem","46":"Radera","224":"Kommando"},"keyboardShortcut":"Kortkommando"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information om licensiering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor användarmanual"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"bidi":{"ltr":"Text riktning från vänster till höger","rtl":"Text riktning från höger till vänster"},"blockquote":{"toolbar":"Blockcitat"},"button":{"selectedLabel":"%1 (Vald)"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"codemirror":{"toolbar":"Källa","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrundsfärg","colors":{"000":"Svart","800000":"Rödbrun","8B4513":"Mörkbrun","2F4F4F":"Skiffergrå","008080":"Kricka","000080":"Marinblå","4B0082":"Indigo","696969":"Mörkgrå","B22222":"Tegelsten","A52A2A":"Brun","DAA520":"Mörk guld","006400":"Mörkgrön","40E0D0":"Turkos","0000CD":"Medium blå","800080":"Lila","808080":"Grå","F00":"Röd","FF8C00":"Mörkorange","FFD700":"Guld","008000":"Grön","0FF":"Turkos","00F":"Blå","EE82EE":"Violett","A9A9A9":"Matt grå","FFA07A":"Laxrosa","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Ljusturkos","ADD8E6":"Ljusblå","DDA0DD":"Plommon","D3D3D3":"Ljusgrå","FFF0F5":"Ljus lavendel","FAEBD7":"Antikvit","FFFFE0":"Ljusgul","F0FFF0":"Honungsdagg","F0FFFF":"Azurblå","F0F8FF":"Aliceblå","E6E6FA":"Lavendel","FFF":"Vit","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Fler färger...","panelTitle":"Färger","textColorTitle":"Textfärg"},"colordialog":{"clear":"Rensa","highlight":"Markera","options":"Färgalternativ","selected":"Vald färg","title":"Välj färg"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Rådgivande titel","cssClassInputLabel":"Stilmallar","edit":"Redigera Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Vänster till höger (LTR)","langDirLabel":"Språkriktning","langDirRTLLabel":"Höger till vänster (RTL)","languageCodeInputLabel":" Språkkod","remove":"Ta bort Div","styleSelectLabel":"Stil","title":"Skapa Div container","toolbar":"Skapa Div container"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"find":{"find":"Sök","findOptions":"Sökalternativ","findWhat":"Sök efter:","matchCase":"Skiftläge","matchCyclic":"Matcha cykliska","matchWord":"Inkludera hela ord","notFoundMsg":"Angiven text kunde ej hittas.","replace":"Ersätt","replaceAll":"Ersätt alla","replaceSuccessMsg":"%1 förekomst(er) ersatta.","replaceWith":"Ersätt med:","title":"Sök och ersätt"},"flash":{"access":"Script-tillgång","accessAlways":"Alltid","accessNever":"Aldrig","accessSameDomain":"Samma domän","alignAbsBottom":"Absolut nederkant","alignAbsMiddle":"Absolut centrering","alignBaseline":"Baslinje","alignTextTop":"Text överkant","bgcolor":"Bakgrundsfärg","chkFull":"Tillåt helskärm","chkLoop":"Upprepa/Loopa","chkMenu":"Aktivera Flashmeny","chkPlay":"Automatisk uppspelning","flashvars":"Variabler för Flash","hSpace":"Horis. marginal","properties":"Flashegenskaper","propertiesTab":"Egenskaper","quality":"Kvalitet","qualityAutoHigh":"Auto Hög","qualityAutoLow":"Auto Låg","qualityBest":"Bäst","qualityHigh":"Hög","qualityLow":"Låg","qualityMedium":"Medium","scale":"Skala","scaleAll":"Visa allt","scaleFit":"Exakt passning","scaleNoBorder":"Ingen ram","title":"Flashegenskaper","vSpace":"Vert. marginal","validateHSpace":"HSpace måste vara ett nummer.","validateSrc":"Var god ange länkens URL","validateVSpace":"VSpace måste vara ett nummer.","windowMode":"Fönsterläge","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fönster"},"font":{"fontSize":{"label":"Storlek","voiceLabel":"Teckenstorlek","panelTitle":"Teckenstorlek"},"label":"Typsnitt","panelTitle":"Typsnitt","voiceLabel":"Typsnitt"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"forms":{"button":{"title":"Egenskaper för knapp","text":"Text (värde)","type":"Typ","typeBtn":"Knapp","typeSbm":"Skicka","typeRst":"Återställ"},"checkboxAndRadio":{"checkboxTitle":"Egenskaper för kryssruta","radioTitle":"Egenskaper för alternativknapp","value":"Värde","selected":"Vald","required":"Krävs"},"form":{"title":"Egenskaper för formulär","menu":"Egenskaper för formulär","action":"Funktion","method":"Metod","encoding":"Kodning"},"hidden":{"title":"Egenskaper för dolt fält","name":"Namn","value":"Värde"},"select":{"title":"Egenskaper för flervalslista","selectInfo":"Information","opAvail":"Befintliga val","value":"Värde","size":"Storlek","lines":"Linjer","chkMulti":"Tillåt flerval","required":"Krävs","opText":"Text","opValue":"Värde","btnAdd":"Lägg till","btnModify":"Redigera","btnUp":"Upp","btnDown":"Ner","btnSetValue":"Markera som valt värde","btnDelete":"Radera"},"textarea":{"title":"Egenskaper för textruta","cols":"Kolumner","rows":"Rader"},"textfield":{"title":"Egenskaper för textfält","name":"Namn","value":"Värde","charWidth":"Teckenbredd","maxChars":"Max antal tecken","required":"Krävs","type":"Typ","typeText":"Text","typePass":"Lösenord","typeEmail":"E-post","typeSearch":"Sök","typeTel":"Telefonnummer","typeUrl":"URL"}},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"iframe":{"border":"Visa ramkant","noUrl":"Skriv in URL för iFrame","scrolling":"Aktivera rullningslister","title":"iFrame-egenskaper","toolbar":"iFrame"},"image":{"alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"justify":{"block":"Justera till marginaler","center":"Centrera","left":"Vänsterjustera","right":"Högerjustera"},"language":{"button":"Sätt språk","remove":"Ta bort språk"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"Efter element-id","anchorName":"Efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","download":"Tvinga nerladdning","displayText":"Visningstext","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkkod","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange e-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Skalbart","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"list":{"bulletedlist":"Infoga/ta bort punktlista","numberedlist":"Infoga/ta bort numrerad lista"},"liststyle":{"armenian":"Armenisk numrering","bulletedTitle":"Egenskaper för punktlista","circle":"Cirkel","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal nolla (01, 02, 03, etc.)","disc":"Disk","georgian":"Georgisk numrering (an, ban, gan, etc.)","lowerAlpha":"Alpha gemener (a, b, c, d, e, etc.)","lowerGreek":"Grekiska gemener (alpha, beta, gamma, etc.)","lowerRoman":"Romerska gemener (i, ii, iii, iv, v, etc.)","none":"Ingen","notset":"<ej angiven>","numberedTitle":"Egenskaper för punktlista","square":"Fyrkant","start":"Start","type":"Typ","upperAlpha":"Alpha versaler (A, B, C, D, E, etc.)","upperRoman":"Romerska versaler (I, II, III, IV, V, etc.)","validateStartNumber":"Listans startnummer måste vara ett heltal."},"magicline":{"title":"Infoga paragraf här"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"widget":{"move":"Klicka och drag för att flytta","label":"%1-widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"Sidbrytning","toolbar":"Infoga sidbrytning för utskrift"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"removeformat":{"toolbar":"Radera formatering"},"save":{"toolbar":"Spara"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordlistor","btn_disable":"Inaktivera SCAYT","btn_enable":"Aktivera SCAYT","btn_langs":"Språk","btn_options":"Inställningar","text_title":"Stavningskontroll medan du skriver"},"selectall":{"toolbar":"Markera allt"},"showblocks":{"toolbar":"Visa block"},"smiley":{"options":"Smileyinställningar","title":"Infoga smiley","toolbar":"Smiley"},"sourcearea":{"toolbar":"Källa"},"sourcedialog":{"toolbar":"Källa","title":"Källa"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"stylescombo":{"label":"Stilar","panelTitle":"Formateringsstilar","panelTitle1":"Blockstilar","panelTitle2":"Inbäddade stilar","panelTitle3":"Objektstilar"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"templates":{"button":"Sidmallar","emptyListMsg":"(Ingen mall är vald)","insertOption":"Ersätt aktuellt innehåll","options":"Inställningar för mall","selectPromptMsg":"Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):","title":"Sidmallar"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Urklipp/ångra","editing":"Redigering","forms":"Formulär","basicstyles":"Basstilar","paragraph":"Paragraf","links":"Länkar","insert":"Infoga","styles":"Stilar","colors":"Färger","tools":"Verktyg"},"toolbars":"Editorns verktygsfält"},"undo":{"redo":"Gör om","undo":"Ångra"},"wsc":{"btnIgnore":"Ignorera","btnIgnoreAll":"Ignorera alla","btnReplace":"Ersätt","btnReplaceAll":"Ersätt alla","btnUndo":"Ångra","changeTo":"Ändra till","errorLoading":"Tjänsten är ej tillgänglig: %s.","ieSpellDownload":"Stavningskontrollen är ej installerad. Vill du göra det nu?","manyChanges":"Stavningskontroll slutförd: %1 ord rättades.","noChanges":"Stavningskontroll slutförd: Inga ord rättades.","noMispell":"Stavningskontroll slutförd: Inga stavfel påträffades.","noSuggestions":"- Förslag saknas -","notAvailable":"Tyvärr är tjänsten ej tillgänglig nu","notInDic":"Saknas i ordlistan","oneChange":"Stavningskontroll slutförd: Ett ord rättades.","progress":"Stavningskontroll pågår...","title":"Kontrollera stavning","toolbar":"Stavningskontroll"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/th.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.lang['th']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"กึ่งกลาง","alignJustify":"நியாயப்படுத்தவும்","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"button":{"selectedLabel":"%1 (Selected)"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"codemirror":{"toolbar":"ดูรหัส HTML","searchCode":"Search Source","autoFormat":"Format Selection","commentSelectedRange":"Comment Selection","uncommentSelectedRange":"Uncomment Selection","autoCompleteToggle":"Enable/Disable HTML Tag Autocomplete"},"colorbutton":{"auto":"สีอัตโนมัติ","bgColorTitle":"สีพื้นหลัง","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"เลือกสีอื่นๆ...","panelTitle":"Colors","textColorTitle":"สีตัวอักษร"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"ไอดี","advisoryTitleInputLabel":"คำเกริ่นนำ","cssClassInputLabel":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","edit":"แก้ไข Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"จากซ้ายไปขวา (LTR)","langDirLabel":"การเขียน-อ่านภาษา","langDirRTLLabel":"จากขวามาซ้าย (RTL)","languageCodeInputLabel":"รหัสภาษา","remove":"ลบ Div","styleSelectLabel":"ลักษณะการแสดงผล","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"fakeobjects":{"anchor":"แทรก/แก้ไข Anchor","flash":"ภาพอนิเมชั่นแฟลช","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"วัตถุไม่ทราบชนิด"},"find":{"find":"ค้นหา","findOptions":"Find Options","findWhat":"ค้นหาคำว่า:","matchCase":"ตัวโหญ่-เล็ก ต้องตรงกัน","matchCyclic":"Match cyclic","matchWord":"ต้องตรงกันทุกคำ","notFoundMsg":"ไม่พบคำที่ค้นหา.","replace":"ค้นหาและแทนที่","replaceAll":"แทนที่ทั้งหมดที่พบ","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"แทนที่ด้วย:","title":"Find and Replace"},"flash":{"access":"การเข้าถึงสคริปต์","accessAlways":"ตลอดไป","accessNever":"ไม่เลย","accessSameDomain":"โดเมนเดียวกัน","alignAbsBottom":"ชิดด้านล่างสุด","alignAbsMiddle":"กึ่งกลาง","alignBaseline":"ชิดบรรทัด","alignTextTop":"ใต้ตัวอักษร","bgcolor":"สีพื้นหลัง","chkFull":"อนุญาตให้แสดงเต็มหน้าจอได้","chkLoop":"เล่นวนรอบ Loop","chkMenu":"ให้ใช้งานเมนูของ Flash","chkPlay":"เล่นอัตโนมัติ Auto Play","flashvars":"ตัวแปรสำหรับ Flas","hSpace":"ระยะแนวนอน","properties":"คุณสมบัติของไฟล์ Flash","propertiesTab":"คุณสมบัติ","quality":"คุณภาพ","qualityAutoHigh":"ปรับคุณภาพสูงอัตโนมัติ","qualityAutoLow":"ปรับคุณภาพต่ำอัตโนมัติ","qualityBest":"ดีที่สุด","qualityHigh":"สูง","qualityLow":"ต่ำ","qualityMedium":"ปานกลาง","scale":"อัตราส่วน Scale","scaleAll":"แสดงให้เห็นทั้งหมด Show all","scaleFit":"แสดงให้พอดีกับพื้นที่ Exact Fit","scaleNoBorder":"ไม่แสดงเส้นขอบ No Border","title":"คุณสมบัติของไฟล์ Flash","vSpace":"ระยะแนวตั้ง","validateHSpace":"HSpace ต้องเป็นจำนวนตัวเลข","validateSrc":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","validateVSpace":"VSpace ต้องเป็นจำนวนตัวเลข","windowMode":"โหมดหน้าต่าง","windowModeOpaque":"ความทึบแสง","windowModeTransparent":"ความโปรงแสง","windowModeWindow":"หน้าต่าง"},"font":{"fontSize":{"label":"ขนาด","voiceLabel":"Font Size","panelTitle":"ขนาด"},"label":"แบบอักษร","panelTitle":"แบบอักษร","voiceLabel":"แบบอักษร"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"forms":{"button":{"title":"รายละเอียดของ ปุ่ม","text":"ข้อความ (ค่าตัวแปร)","type":"ข้อความ","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"คุณสมบัติของ เช็คบ๊อก","radioTitle":"คุณสมบัติของ เรดิโอบัตตอน","value":"ค่าตัวแปร","selected":"เลือกเป็นค่าเริ่มต้น","required":"Required"},"form":{"title":"คุณสมบัติของ แบบฟอร์ม","menu":"คุณสมบัติของ แบบฟอร์ม","action":"แอคชั่น","method":"เมธอด","encoding":"Encoding"},"hidden":{"title":"คุณสมบัติของ ฮิดเดนฟิลด์","name":"ชื่อ","value":"ค่าตัวแปร"},"select":{"title":"คุณสมบัติของ แถบตัวเลือก","selectInfo":"อินโฟ","opAvail":"รายการตัวเลือก","value":"ค่าตัวแปร","size":"ขนาด","lines":"บรรทัด","chkMulti":"เลือกหลายค่าได้","required":"Required","opText":"ข้อความ","opValue":"ค่าตัวแปร","btnAdd":"เพิ่ม","btnModify":"แก้ไข","btnUp":"บน","btnDown":"ล่าง","btnSetValue":"เลือกเป็นค่าเริ่มต้น","btnDelete":"ลบ"},"textarea":{"title":"คุณสมบัติของ เท็กแอเรีย","cols":"สดมภ์","rows":"แถว"},"textfield":{"title":"คุณสมบัติของ เท็กซ์ฟิลด์","name":"ชื่อ","value":"ค่าตัวแปร","charWidth":"ความกว้าง","maxChars":"จำนวนตัวอักษรสูงสุด","required":"Required","type":"ชนิด","typeText":"ข้อความ","typePass":"รหัสผ่าน","typeEmail":"อีเมล","typeSearch":"ค้นหาก","typeTel":"หมายเลขโทรศัพท์","typeUrl":"ที่อยู่อ้างอิง URL"}},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"คำประกอบรูปภาพ","border":"ขนาดขอบรูป","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"ระยะแนวนอน","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ข้อมูลของรูปภาพ","linkTab":"ลิ้งค์","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","resetSize":"กำหนดรูปเท่าขนาดจริง","title":"คุณสมบัติของ รูปภาพ","titleButton":"คุณสมบัติของ ปุ่มแบบรูปภาพ","upload":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","vSpace":"ระยะแนวตั้ง","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"justify":{"block":"จัดพอดีหน้ากระดาษ","center":"จัดกึ่งกลาง","left":"จัดชิดซ้าย","right":"จัดชิดขวา"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"แอคเซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเกริ่นนำ","advisoryTitle":"คำเกริ่นนำ","anchor":{"toolbar":"แทรก/แก้ไข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"กรุณาระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","download":"Force Download","displayText":"Display Text","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"การเขียน-อ่านภาษา","langDir":"การเขียน-อ่านภาษา","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","menu":"แก้ไข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)","noEmail":"กรุณาระบุอีเมล์ (E-mail)","noUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"แสดงเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ก (Pop-up)","popupFullScreen":"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิกัดซ้าย (Left Position)","popupLocationBar":"แสดงที่อยู่ของไฟล์","popupMenuBar":"แสดงแถบเมนู","popupResizable":"สามารถปรับขนาดได้","popupScrollBars":"แสดงแถบเลื่อน","popupStatusBar":"แสดงแถบสถานะ","popupToolbar":"แสดงแถบเครื่องมือ","popupTop":"พิกัดบน (Top Position)","rel":"ความสัมพันธ์","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลักษณะการแสดงผล","tabIndex":"ลำดับของ แท็บ","target":"การเปิดหน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เก็ตเฟรม","targetPopup":"<เปิดหน้าจอเล็ก (Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ก (Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"แทรก/แก้ไข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"oembed":{"title":"Embed Media Content (Photo, Video, Audio or Rich Content)","button":"Embed Media from External Sites","pasteUrl":"Paste a URL (shorted URLs are also supported) from one of the supported sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.).","invalidUrl":"Please provide a valid URL.","noEmbedCode":"No embed code found, or site is not supported.","url":"URL:","width":"Width:","height":"Height:","widthTitle":"Width for the embeded content","heightTitle":"Height for the embeded content","maxWidth":"Max. Width:","maxHeight":"Max. Height:","maxWidthTitle":"Maximum Width for the embeded Content","maxHeightTitle":"Maximum Height for the embeded Content","none":"None","resizeType":"Resize Type (videos only):","noresize":"No Resize (use default)","responsive":"Responsive Resize","custom":"Specific Resize","noVimeo":"The owner of this video has set domain restrictions and you will not be able to embed it on your website.","Error":"Media Content could not been retrieved, please try a different URL."},"pagebreak":{"alt":"ตัวแบ่งหน้า","toolbar":"แทรกตัวแบ่งหน้า Page Break"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","title":"วางแบบตัวอักษรธรรมดา"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"save":{"toolbar":"บันทึก"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"selectall":{"toolbar":"เลือกทั้งหมด"},"showblocks":{"toolbar":"แสดงบล็อคข้อมูล"},"smiley":{"options":"ตัวเลือกไอคอนแสดงอารมณ์","title":"แทรกสัญลักษณ์สื่ออารมณ์","toolbar":"รูปสื่ออารมณ์"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"sourcedialog":{"toolbar":"ดูรหัส HTML","title":"ดูรหัส HTML"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"syntaxhighlight":{"title":"Add or update a code snippet","contextTitle":"Edit source code","sourceTab":"Source code","langLbl":"Select language","sourceTextareaEmptyError":"Source code mustn't be empty.","advancedTab":"Advanced","hideGutter":"Hide gutter","hideGutterLbl":"Hide gutter & line numbers.","hideControls":"Hide controls","hideControlsLbl":"Hide code controls at the top of the code block.","collapse":"Collapse","collapseLbl":"Collapse the code block by default. (controls need to be turned on)","codeTitleLbl":"Use a Code Title","showColumns":"Show columns","showColumnsLbl":"Show row columns in the first line.","lineWrap":"Disable line wrapping","lineWrapLbl":"Switch off line wrapping.","lineCount":"Default line count","highlight":"Highlight lines","highlightLbl":"Enter a comma seperated lines of lines you want to highlight, eg <em style=\"font-style:italic\">3,10,15</em>."},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"templates":{"button":"เทมเพลต","emptyListMsg":"(ยังไม่มีการกำหนดเทมเพลต)","insertOption":"แทนที่เนื้อหาเว็บไซต์ที่เลือก","options":"ตัวเลือกเกี่ยวกับเทมเพลท","selectPromptMsg":"กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):","title":"เทมเพลตของส่วนเนื้อหาเว็บไซต์"},"toolbar":{"toolbarCollapse":"ซ่อนแถบเครื่องมือ","toolbarExpand":"เปิดแถบเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"wsc":{"btnIgnore":"ยกเว้น","btnIgnoreAll":"ยกเว้นทั้งหมด","btnReplace":"แทนที่","btnReplaceAll":"แทนที่ทั้งหมด","btnUndo":"ยกเลิก","changeTo":"แก้ไขเป็น","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?","manyChanges":"ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ","noChanges":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ","noMispell":"ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด","noSuggestions":"- ไม่มีคำแนะนำใดๆ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"ไม่พบในดิกชันนารี","oneChange":"ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ","progress":"กำลังตรวจสอบคำสะกด...","title":"Spell Checker","toolbar":"ตรวจการสะกดคำ"},"youtube":{"button":"Embed YouTube Video","title":"Embed YouTube Video","txtEmbed":"Paste Embed Code Here","txtUrl":"Paste YouTube Video URL","txtWidth":"Width","txtHeight":"Height","chkRelated":"Show suggested videos at the video's end","txtStartAt":"Start at (ss or mm:ss or hh:mm:ss)","chkPrivacy":"Enable privacy-enhanced mode","chkOlderCode":"Use old embed code","chkAutoplay":"Autoplay","noCode":"You must input an embed code or URL","invalidEmbed":"The embed code you've entered doesn't appear to be valid","invalidUrl":"The URL you've entered doesn't appear to be valid","or":"or","noWidth":"You must inform the width","invalidWidth":"Inform a valid width","noHeight":"You must inform the height","invalidHeight":"Inform a valid height","invalidTime":"Inform a valid start time","txtResponsive":"Make Responsive (ignore width and height, fit to width)"}};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/lang/tr.js	(revision 2)
@@ -0,0 +1,99 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+* @fileOverview
+*/
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Contains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang[ 'tr' ] = {
+	// ARIA description.
+	editor: 'Zengin Metin Editörü',
+	editorPanel: 'Zengin Metin Editör Paneli',
+
+	// Common messages and labels.
+	common: {
+		// Screenreader titles. Please note that screenreaders are not always capable
+		// of reading non-English words. So be careful while translating it.
+		editorHelp: 'Yardım için ALT 0 tuşlarına basın',
+
+		browseServer: 'Sunucuya Gözat',
+		url: 'URL',
+		protocol: 'Protokol',
+		upload: 'Karşıya Yükle',
+		uploadSubmit: 'Sunucuya Gönder',
+		image: 'Resim',
+		flash: 'Flash',
+		form: 'Form',
+		checkbox: 'Onay Kutusu',
+		radio: 'Seçenek Düğmesi',
+		textField: 'Metin Kutusu',
+		textarea: 'Metin Alanı',
+		hiddenField: 'Gizli Alan',
+		button: 'Düğme',
+		select: 'Seçme Alanı',
+		imageButton: 'Resim Düğmesi',
+		notSet: '<tanımlanmamış>',
+		id: 'Kimlik',
+		name: 'İsim',
+		langDir: 'Dil Yönü',
+		langDirLtr: 'Soldan Sağa (LTR)',
+		langDirRtl: 'Sağdan Sola (RTL)',
+		langCode: 'Dil Kodlaması',
+		longDescr: 'Uzun Tanımlı URL',
+		cssClass: 'Biçem Sayfası Sınıfları',
+		advisoryTitle: 'Öneri Başlığı',
+		cssStyle: 'Biçem',
+		ok: 'Tamam',
+		cancel: 'İptal',
+		close: 'Kapat',
+		preview: 'Önizleme',
+		resize: 'Yeniden Boyutlandır',
+		generalTab: 'Genel',
+		advancedTab: 'Gelişmiş',
+		validateNumberFailed: 'Bu değer bir sayı değildir.',
+		confirmNewPage: 'Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?',
+		confirmCancel: 'Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?',
+		options: 'Seçenekler',
+		target: 'Hedef',
+		targetNew: 'Yeni Pencere (_blank)',
+		targetTop: 'En Üstteki Pencere (_top)',
+		targetSelf: 'Aynı Pencere (_self)',
+		targetParent: 'Üst Pencere (_parent)',
+		langDirLTR: 'Soldan Sağa (LTR)',
+		langDirRTL: 'Sağdan Sola (RTL)',
+		styles: 'Biçem',
+		cssClasses: 'Biçem Sayfası Sınıfları',
+		width: 'Genişlik',
+		height: 'Yükseklik',
+		align: 'Hizalama',
+		alignLeft: 'Sol',
+		alignRight: 'Sağ',
+		alignCenter: 'Ortala',
+		alignJustify: 'İki Kenara Yaslanmış',
+		alignTop: 'Üst',
+		alignMiddle: 'Orta',
+		alignBottom: 'Alt',
+		alignNone: 'Hiçbiri',
+		invalidValue	: 'Geçersiz değer.',
+		invalidHeight: 'Yükseklik değeri bir sayı olmalıdır.',
+		invalidWidth: 'Genişlik değeri bir sayı olmalıdır.',
+		invalidCssLength: '"%1" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.',
+		invalidHtmlLength: 'Belirttiğiniz sayı "%1" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).',
+		invalidInlineStyle: 'Satıriçi biçem için verilen değer, "isim : değer" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.',
+		cssLengthTooltip: 'Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.',
+
+		// Put the voice-only part of the label in the span.
+		unavailable: '%1<span class="cke_accessibility">, kullanılamaz</span>'
+	}
+};
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("a11yHelp",function(h){var a=h.lang.a11yhelp,b=h.lang.common.keyboard,n=CKEDITOR.tools.getNextId(),e={8:b[8],9:a.tab,13:b[13],16:b[16],17:b[17],18:b[18],19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:b[35],36:b[36],37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:b[46],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8,
+105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=b[18];e[CKEDITOR.SHIFT]=b[16];e[CKEDITOR.CTRL]=b[17];var g=[CKEDITOR.ALT,CKEDITOR.SHIFT,
+CKEDITOR.CTRL],p=/\$\{(.*?)\}/g,t=function(){var a=h.keystrokeHandler.keystrokes,b={},d;for(d in a)b[a[d]]=d;return function(a,d){var c;if(b[d]){c=b[d];for(var k,l,m=[],f=0;f<g.length;f++)l=g[f],k=c/g[f],1<k&&2>=k&&(c-=l,m.push(e[l]));m.push(e[c]||String.fromCharCode(c));c=m.join("+")}else c=a;return c}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:h.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()},
+html:function(){for(var b='\x3cdiv class\x3d"cke_accessibility_legend" role\x3d"document" aria-labelledby\x3d"'+n+'_arialbl" tabIndex\x3d"-1"\x3e%1\x3c/div\x3e\x3cspan id\x3d"'+n+'_arialbl" class\x3d"cke_voice_label"\x3e'+a.contents+" \x3c/span\x3e",e=[],d=a.legend,h=d.length,g=0;g<h;g++){for(var c=d[g],k=[],l=c.items,m=l.length,f=0;f<m;f++){var q=l[f],r=q.legend.replace(p,t);r.match(p)||k.push("\x3cdt\x3e%1\x3c/dt\x3e\x3cdd\x3e%2\x3c/dd\x3e".replace("%1",q.name).replace("%2",r))}e.push("\x3ch1\x3e%1\x3c/h1\x3e\x3cdl\x3e%2\x3c/dl\x3e".replace("%1",
+c.name).replace("%2",k.join("")))}return b.replace("%1",e.join(""))}()+'\x3cstyle type\x3d"text/css"\x3e.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}\x3c/style\x3e'}]}],
+buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt	(revision 2)
@@ -0,0 +1,25 @@
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+
+cs.js      Found: 30 Missing: 0
+cy.js      Found: 30 Missing: 0
+da.js      Found: 12 Missing: 18
+de.js      Found: 30 Missing: 0
+el.js      Found: 25 Missing: 5
+eo.js      Found: 30 Missing: 0
+fa.js      Found: 30 Missing: 0
+fi.js      Found: 30 Missing: 0
+fr.js      Found: 30 Missing: 0
+gu.js      Found: 12 Missing: 18
+he.js      Found: 30 Missing: 0
+it.js      Found: 30 Missing: 0
+mk.js      Found: 5 Missing: 25
+nb.js      Found: 30 Missing: 0
+nl.js      Found: 30 Missing: 0
+no.js      Found: 30 Missing: 0
+pt-br.js   Found: 30 Missing: 0
+ro.js      Found: 6 Missing: 24
+tr.js      Found: 30 Missing: 0
+ug.js      Found: 27 Missing: 3
+vi.js      Found: 6 Missing: 24
+zh-cn.js   Found: 30 Missing: 0
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/af.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","af",{title:"Toeganglikheid instruksies",contents:"Hulp inhoud. Druk ESC om toe te maak.",legend:[{name:"Algemeen",items:[{name:"Bewerker balk",legend:"Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig."},{name:"Bewerker dialoog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Bewerkerinhoudmenu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pouse",capslock:"Hoofletterslot",escape:"Ontsnap",pageUp:"Blaaiop",pageDown:"Blaaiaf",leftArrow:"Linkspyl",upArrow:"Oppyl",rightArrow:"Regterpyl",downArrow:"Afpyl",insert:"Toevoeg",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Nommerblok 0",numpad1:"Nommerblok 1",numpad2:"Nommerblok 2",numpad3:"Nommerblok 3",numpad4:"Nommerblok 4",numpad5:"Nommerblok 5",numpad6:"Nommerblok 6",
+numpad7:"Nommerblok 7",numpad8:"Nommerblok 8",numpad9:"Nommerblok 9",multiply:"Maal",add:"Plus",subtract:"Minus",decimalPoint:"Desimaalepunt",divide:"Gedeeldeur",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nommervergrendel",scrollLock:"Rolvergrendel",semiColon:"Kommapunt",equalSign:"Isgelykaan",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Skuinsstreep",graveAccent:"Aksentteken",openBracket:"Oopblokhakkie",backSlash:"Trustreep",
+closeBracket:"Toeblokhakkie",singleQuote:"Enkelaanhaalingsteken"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."},
+{name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se fins al següent element del quadre de diàleg, premi la tecla Shift + TAB per desplaçar-se a l'anterior element del quadre de diàleg, premi la tecla ENTER per confirmar el quadre de diàleg, premi la tecla ESC per cancel·lar el quadre de diàleg. Quan un quadre de diàleg té diverses pestanyes, la llista de pestanyes pot ser assolit ja sigui amb ALT + F10 o TAB, com a part de l'ordre de tabulació del quadre de diàleg. Amb la llista de pestanyes seleccionada, pot anar a la fitxa següent i anterior amb la tecla FLETXA DRETA i ESQUERRA, respectivament."},
+{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."},
+{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"},
+{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat",
+legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],tab:"Tabulació",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape",pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",
+downArrow:"Fletxa Avall",insert:"Inserir",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6",numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8",numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert",backSlash:"Barra Invertida",closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru",
+legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO."},{name:"Kontextové menu editoru",legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí  SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},
+{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."},{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},
+{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva",legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},
+{name:"Příkaz pro přístup k dalšímu prostoru zaměření",legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],tab:"Tabulátor",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru",pageDown:"Stránka dolů",leftArrow:"Šipka vlevo",upArrow:"Šipka nahoru",
+rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7",numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9",multiply:"Numerická klávesa násobení",
+add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka",backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka",
+singleQuote:"Jednoduchá uvozovka"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT+TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."},
+{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]},
+{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."},
+{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",
+insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",
+scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen."},{name:"Editor dialogboks",
+legend:"Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\r\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast."},{name:"Redaktør kontekstmenu",legend:"Tryk ${contextMenu} eller APPLICATION KEY for at åbne kontekstmenuen. Flyt derefter til næste menuvalg med TAB eller PIL NED. Flyt til forrige valg med SHIFT+TAB eller PIL OP. Tryk MELLEMRUM eller RETUR for at vælge menu-muligheder. Åben under-menu af aktuelle valg med MELLEMRUM eller RETUR eller HØJRE PIL. Gå tilbage til overliggende menu-emne med ESC eller VENSTRE PIL. Luk kontekstmenu med ESC."},
+{name:"Redaktør listeboks",legend:"Flyt til næste emne med TAB eller PIL NED inde i en listeboks. Flyt til forrige listeemne med SHIFT+TAB eller PIL OP. Tryk MELLEMRUM eller RETUR for at vælge liste-muligheder. Tryk ESC for at lukke liste-boksen."},{name:"Redaktør elementsti-bar",legend:"Tryk ${elementsPathFocus} for at navigere til elementernes sti-bar. Flyt til næste element-knap med TAB eller HØJRE PIL. Flyt til forrige knap med SHIFT+TAB eller VENSTRE PIL. Klik MELLEMRUM eller RETUR for at vælge element i editoren."}]},
+{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:"Fed kommando",legend:"Klik ${bold}"},{name:"Kursiv kommando",legend:"Klik ${italic}"},{name:"Understregnings kommando",legend:"Klik ${underline}"},{name:"Link kommando",legend:"Klik ${link}"},{name:"Klap værktøjslinje sammen kommando ",legend:"Klik ${toolbarCollapse}"},{name:"Adgang til forrige fokusområde kommando",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Tilgængelighedshjælp",legend:"Kilk ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Venstre pil",upArrow:"Pil op",rightArrow:"Højre pil",downArrow:"Pil ned",insert:"Insert",leftWindowKey:"Venstre Windows tast",
+rightWindowKey:"Højre Windows tast",selectKey:"Select-knap",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Gange",add:"Plus",subtract:"Minus",decimalPoint:"Komma",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",
+equalSign:"Lighedstegn",comma:"Komma",dash:"Bindestreg",period:"Punktum",forwardSlash:"Skråstreg",graveAccent:"Accent grave",openBracket:"Start klamme",backSlash:"Omvendt skråstreg",closeBracket:"Slut klamme",singleQuote:"Enkelt citationstegn"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","de-ch",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."},
+{name:"Editordialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor-Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},
+{name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},
+{name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "},
+{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf",pageDown:"Bild ab",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",
+downArrow:"Untere Pfeiltaste",insert:"Einfügen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8",numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich",closeBracket:"Schliessende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.",legend:[{name:"Allgemein",items:[{name:"Editorwerkzeugleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."},
+{name:"Editordialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor-Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},
+{name:"Editor-Listenbox",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},{name:"Editor-Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},
+{name:"Befehle",items:[{name:"Rückgängig-Befehl",legend:"Drücken Sie ${undo}"},{name:"Wiederherstellen-Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift-Befehl",legend:"Drücken Sie ${bold}"},{name:"Kursiv-Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichen-Befehl",legend:"Drücken Sie ${underline}"},{name:"Link-Befehl",legend:"Drücken Sie ${link}"},{name:"Werkzeugleiste einklappen-Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace}  auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "},
+{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf",pageDown:"Bild ab",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",
+downArrow:"Untere Pfeiltaste",insert:"Einfügen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8",numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich",closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με  TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."},
+{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]},
+{name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "},
+{name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",
+downArrow:"Κάτω Βέλος",insert:"Insert ",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6",numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",
+multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης",backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."},
+{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogelemento, premu la MAJUSKLIGAN+TABAN klavon por iri al la antaŭa dialogelemento, premu la ENEN klavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Kiam dialogo havas multajn langetojn, eblas atingi la langetliston aŭ per ALT+F10 aŭ per la TABA klavo kiel parton de la dialoga taba ordo. En langetlisto, moviĝu al la sekva kaj antaŭa langeto per la klavoj SAGO DEKSTREN KAJ MALDEKSTREN respektive."},
+{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."},
+{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]},
+{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."},
+{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],tab:"Tabo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo",pageDown:"Sekva Paĝo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",
+downArrow:"Sago Suben",insert:"Enmeti",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7",numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo",singleQuote:"Citilo"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo",
+legend:"Dentro del diálogo, presione TAB para navegar a los siguientes elementos de diálogo, presione SHIFT+TAB para moverse a los anteriores elementos de diálogo, presione ENTER para enviar el diálogo, presiona ESC para cancelar el diálogo. Cuando el diálogo tiene multiples pestañas, la lista de pestañas puede ser abarcada con ALT + F10 or con TAB como parte del orden de pestañas del diálogo. ECon la pestaña enfocada, puede moverse a la siguiente o anterior pestaña con las FLECHAS IZQUIRDA y DERECHA respectivamente."},
+{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor",
+legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]},
+{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},
+{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],tab:"Tabulador",pause:"Pausa",capslock:"Bloq. Mayús.",escape:"Escape",pageUp:"Regresar Página",pageDown:"Avanzar Página",leftArrow:"Flecha Izquierda",upArrow:"Flecha Arriba",
+rightArrow:"Flecha Derecha",downArrow:"Flecha Abajo",insert:"Insertar",leftWindowKey:"Tecla Windows Izquierda",rightWindowKey:"Tecla Windows Derecha",selectKey:"Tecla de Selección",numpad0:"Tecla 0 del teclado numérico",numpad1:"Tecla 1 del teclado numérico",numpad2:"Tecla 2 del teclado numérico",numpad3:"Tecla 3 del teclado numérico",numpad4:"Tecla 4 del teclado numérico",numpad5:"Tecla 5 del teclado numérico",numpad6:"Tecla 6 del teclado numérico",numpad7:"Tecla 7 del teclado numérico",numpad8:"Tecla 8 del teclado numérico",
+numpad9:"Tecla 9 del teclado numérico",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto Decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Punto y coma",equalSign:"Signo de Igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Diagonal",graveAccent:"Acento Grave",openBracket:"Abrir llave",backSlash:"Diagonal Invertida",closeBracket:"Cerrar llave",
+singleQuote:"Comillas simples"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","eu",{title:"Erabilerraztasunaren argibideak",contents:"Laguntzaren edukiak. Elkarrizketa-koadro hau ixteko sakatu ESC.",legend:[{name:"Orokorra",items:[{name:"Editorearen tresna-barra",legend:"Sakatu ${toolbarFocus} tresna-barrara nabigatzeko. Tresna-barrako aurreko eta hurrengo taldera joateko erabili TAB eta MAIUS+TAB. Tresna-barrako aurreko eta hurrengo botoira joateko erabili ESKUIN-GEZIA eta EZKER-GEZIA. Sakatu ZURIUNEA edo SARTU tresna-barrako botoia aktibatzeko."},
+{name:"Editorearen elkarrizketa-koadroa",legend:"Elkarrizketa-koadro baten barruan sakatu TAB hurrengo elementura nabigatzeko, sakatu MAIUS+TAB aurreko elementura joateko, sakatu SARTU elkarrizketa-koadroa bidaltzeko eta sakatu ESC uzteko. Elkarrizketa-koadro batek hainbat fitxa dituenean, ALT+F10 erabiliz irits daiteke fitxen zerrendara, edo TAB erabiliz. Fokoa fitxen zerrendak duenean, aurreko eta hurrengo fitxetara joateko erabili EZKER-GEZIA eta ESKUIN-GEZIA."},{name:"Editorearen testuinguru-menua",
+legend:"Sakatu ${contextMenu} edo APLIKAZIO TEKLA testuinguru-menua irekitzeko. Menuko hurrengo aukerara joateko erabili TAB edo BEHERA GEZIA. Aurreko aukerara nabigatzeko erabili MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU menuko aukera hautatzeko. Ireki uneko aukeraren azpi-menua ZURIUNEA edo SARTU edo ESKUIN-GEZIA erabiliz. Menuko aukera gurasora itzultzeko erabili ESC edo EZKER-GEZIA. Testuinguru-menua ixteko sakatu ESC."},{name:"Editorearen zerrenda-koadroa",legend:"Zerrenda-koadro baten barruan, zerrendako hurrengo elementura joateko erabili TAB edo BEHERA GEZIA. Zerrendako aurreko elementura nabigatzeko MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU zerrendako aukera hautatzeko. Sakatu ESC zerrenda-koadroa ixteko."},
+{name:"Editorearen elementuaren bide-barra",legend:"Sakatu ${elementsPathFocus} elementuaren bide-barrara nabigatzeko. Hurrengo elementuaren botoira joateko erabili TAB edo ESKUIN-GEZIA. Aurreko botoira joateko aldiz erabili MAIUS+TAB edo EZKER-GEZIA. Elementua editorean hautatzeko sakatu ZURIUNEA edo SARTU."}]},{name:"Komandoak",items:[{name:"Desegin komandoa",legend:"Sakatu ${undo}"},{name:"Berregin komandoa",legend:"Sakatu ${redo}"},{name:"Lodia komandoa",legend:"Sakatu ${bold}"},{name:"Etzana komandoa",
+legend:"Sakatu ${italic}"},{name:"Azpimarratu komandoa",legend:"Sakatu ${underline}"},{name:"Esteka komandoa",legend:"Sakatu ${link}"},{name:"Tolestu tresna-barra komandoa",legend:"Sakatu ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:"Erabilerraztasunaren laguntza",legend:"Sakatu ${a11yHelp}"}]}],tab:"Tabuladorea",pause:"Pausatu",capslock:"Blok Maius",escape:"Ihes",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Ezker-gezia",upArrow:"Gora gezia",rightArrow:"Eskuin-gezia",downArrow:"Behera gezia",insert:"Txertatu",leftWindowKey:"Ezkerreko Windows tekla",rightWindowKey:"Eskuineko Windows tekla",selectKey:"Hautatu tekla",numpad0:"Zenbakizko teklatua 0",numpad1:"Zenbakizko teklatua 1",numpad2:"Zenbakizko teklatua 2",numpad3:"Zenbakizko teklatua 3",
+numpad4:"Zenbakizko teklatua 4",numpad5:"Zenbakizko teklatua 5",numpad6:"Zenbakizko teklatua 6",numpad7:"Zenbakizko teklatua 7",numpad8:"Zenbakizko teklatua 8",numpad9:"Zenbakizko teklatua 9",multiply:"Biderkatu",add:"Gehitu",subtract:"Kendu",decimalPoint:"Koma hamartarra",divide:"Zatitu",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Blok Zenb",scrollLock:"Blok Korr",semiColon:"Puntu eta koma",equalSign:"Berdin zeinua",comma:"Koma",
+dash:"Marratxoa",period:"Puntua",forwardSlash:"Barra",graveAccent:"Azentu kamutsa",openBracket:"Parentesia ireki",backSlash:"Alderantzizko barra",closeBracket:"Itxi parentesia",singleQuote:"Komatxo bakuna"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."},
+{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]},
+{name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."},
+{name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال:  دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],tab:"برگه",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",leftArrow:"پیکان چپ",upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود",
+leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",
+f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."},
+{name:"Editorin dialogi",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editorin oheisvalikko",legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},
+{name:"Editorin listalaatikko",legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]},
+{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},
+{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",
+downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8",numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",
+divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","fo",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Falda",add:"Pluss",subtract:"Frádráttar",decimalPoint:"Decimal Point",divide:"Býta",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Javnatekn",comma:"Komma",dash:"Dash",period:"Punktum",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide.  Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."},
+{name:"Dialogue de l'éditeur",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."},
+{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]},
+{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents.  Répéter la combinaison pour joindre les éléments d'espaces distantes."},
+{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents.  Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",
+insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",
+scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur la touche Échap.",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers le groupe suivant ou précédent de la barre d'outils avec les touches Tab et Maj+Tab. Se déplacer vers le bouton suivant ou précédent de la barre d'outils avec les touches Flèche droite et Flèche gauche. Appuyer sur la barre d'espace ou la touche Entrée pour activer le bouton de barre d'outils."},
+{name:"Fenêtre de l'éditeur",legend:"Dans une boîte de dialogue, appuyer sur Tab pour passer à l'élément suivant, appuyer sur Maj+Tab pour passer à l'élément précédent, appuyer sur Entrée pour valider, appuyer sur Échap pour annuler. Quand une boîte de dialogue possède des onglets, la liste peut être atteinte avec Alt+F10 ou avec Tab. Dans la liste des onglets, se déplacer vers le suivant et le précédent avec les touches Flèche droite et Flèche gauche respectivement."},{name:"Menu contextuel de l'éditeur",
+legend:"Appuyer sur ${contextMenu} ou sur la touche Menu pour ouvrir le menu contextuel. Se déplacer ensuite vers l'option suivante du menu avec les touches Tab ou Flèche bas. Se déplacer vers l'option précédente avec les touches Maj+Tab ou Flèche haut. Appuyer sur la barre d'espace ou la touche Entrée pour sélectionner l'option du menu. Appuyer sur la barre d'espace, la touche Entrée ou Flèche droite pour ouvrir le sous-menu de l'option sélectionnée. Revenir à l'élément de menu parent avec la touche Échap ou Flèche gauche. Fermer le menu contextuel avec Échap."},
+{name:"Zone de liste de l'éditeur",legend:"Dans une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches Tab ou Flèche bas. Se déplacer vers l'élément précédent de la liste avec les touches Maj+Tab ou Flèche haut. Appuyer sur la barre d'espace ou sur Entrée pour sélectionner l'option dans la liste. Appuyer sur Échap pour fermer le menu déroulant."},{name:"Barre du chemin d'éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre du fil d'Ariane des éléments. Se déplacer vers le bouton de l'élément suivant avec les touches Tab ou Flèche droite. Se déplacer vers le bouton précédent avec les touches Maj+Tab ou Flèche gauche. Appuyer sur la barre d'espace ou sur Entrée pour sélectionner l'élément dans l'éditeur."}]},
+{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Commande restaurer",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Commande d'accès à l'élément sélectionnable précédent",
+legend:"Appuyer sur ${accessNextSpace} pour accéder à l'élément sélectionnable inatteignable le plus proche avant le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables précédents."},{name:"Commande d'accès à l'élément sélectionnable suivant",legend:"Appuyer sur ${accessNextSpace} pour accéder à l'élément sélectionnable inatteignable le plus proche après le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables suivants."},
+{name:" Aide sur l'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],tab:"Tabulation",pause:"Pause",capslock:"Verr. Maj.",escape:"Échap",pageUp:"Page supérieure",pageDown:"Page suivante",leftArrow:"Flèche gauche",upArrow:"Flèche haut",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Inser",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite",selectKey:"Touche Sélectionner",numpad0:"0 du pavé numérique",numpad1:"1 du pavé numérique",numpad2:"2 du pavé numérique",
+numpad3:"3 du pavé numérique",numpad4:"4 du pavé numérique",numpad5:"5 du pavé numérique",numpad6:"6 du pavé numérique",numpad7:"7 du pavé numérique",numpad8:"Pavé numérique 8",numpad9:"9 du pavé numérique",multiply:"Multiplier",add:"Plus",subtract:"Moins",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Verr. Num.",scrollLock:"Arrêt défil.",semiColon:"Point-virgule",equalSign:"Signe égal",
+comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."},
+{name:"Editor de diálogo",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},
+{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."},{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},
+{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"},{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},
+{name:"Orde «acceder ao seguinte espazo en foco»",legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],tab:"Tabulador",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba",pageDown:"Páxina abaixo",leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",
+rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7",numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9",multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",
+divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida",closeBracket:"Pechar corchete",singleQuote:"Comiña simple"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק",
+legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},
+{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"חץ שמאלה",upArrow:"חץ למעלה",rightArrow:"חץ ימינה",downArrow:"חץ למטה",insert:"הכנס",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",
+numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סלאש",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"סלאש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa  SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."},
+{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]},
+{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},
+{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",
+rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",
+equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."},
+{name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]},
+{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},
+{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",
+downArrow:"lefelé nyíl",insert:"Insert",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8",numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",
+divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel",singleQuote:"szimpla idézőjel"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Instruksi Accessibility",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Toolbar Editor",legend:"Tekan ${toolbarFocus} untuk berpindah ke toolbar. Untuk berpindah ke group toolbar selanjutnya dan sebelumnya gunakan TAB dan SHIFT+TAB. Untuk berpindah ke tombol toolbar selanjutnya dan sebelumnya gunakan RIGHT ARROW atau LEFT ARROW. Tekan SPASI atau ENTER untuk mengaktifkan tombol toolbar."},{name:"Dialog Editor",
+legend:"Pada jendela dialog, tekan TAB untuk berpindah pada elemen dialog selanjutnya, tekan SHIFT+TAB untuk berpindah pada elemen dialog sebelumnya, tekan ENTER untuk submit dialog, tekan ESC untuk membatalkan dialog. Pada dialog dengan multi tab, daftar tab dapat diakses dengan ALT+F10 ataupun dengan tombol TAB sesuai urutan tab pada dialog. Jika daftar tab aktif terpilih, untuk berpindah tab dapat menggunakan RIGHT dan LEFT ARROW."},{name:"Context Menu Editor",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
+{name:"List Box Editor",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
+{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",
+rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",
+equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti."},
+{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo è possibile premere TAB per passare all'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all'elenco delle schede sia con ALT+F10 che con TAB, in base all'ordine delle tabulazioni della finestra. Quando l'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente."},
+{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con  MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."},
+{name:"Box Lista Editor",legend:"All'interno di un elenco di opzioni, per spostarsi all'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l'elemento della lista. Premere ESC per chiudere l'elenco di opzioni."},{name:"Barra percorso elementi editor",legend:"Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l'elemento nell'editor."}]},
+{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},
+{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],tab:"Tab",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",
+downArrow:"Freccia giù",insert:"Ins",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico",numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",
+multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave",openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",
+singleQuote:"Apostrofo"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ　このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]},
+{name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},
+{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5",numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",
+divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម",
+legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],tab:"Tab",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"접근성 설명",contents:"도움말. 이 창을 닫으시려면 ESC 를 누르세요.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요."},{name:"편집기 다이얼로그",legend:"TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다."},
+{name:"편집기 환경 메뉴",legend:"${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다."},{name:"편집기 목록 박스",legend:"리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다."},
+{name:"편집기 요소 경로 막대",legend:"${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다."}]},{name:"명령",items:[{name:" 명령 실행 취소",legend:"${undo} 누르시오"},{name:" 명령 다시 실행",legend:"${redo} 누르시오"},{name:" 굵게 명령",legend:"${bold} 누르시오"},{name:" 기울임 꼴 명령",legend:"${italic} 누르시오"},{name:" 밑줄 명령",legend:"${underline} 누르시오"},{name:" 링크 명령",legend:"${link} 누르시오"},{name:" 툴바 줄이기 명령",legend:"${toolbarCollapse} 누르시오"},
+{name:" 이전 포커스 공간 접근 명령",legend:"탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다."},{name:"다음 포커스 공간 접근 명령",legend:"탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. "},{name:" 접근성 도움말",legend:"${a11yHelp} 누르시오"}]}],tab:"탭 키",pause:"일시정지 키",capslock:"캡스 록 키",escape:"이스케이프 키",pageUp:"페이지 업 키",pageDown:"페이지 다운 키",leftArrow:"왼쪽 화살표 키",
+upArrow:"위쪽 화살표 키",rightArrow:"오른쪽 화살표 키",downArrow:"아래쪽 화살표 키",insert:"인서트 키",leftWindowKey:"왼쪽 윈도우 키",rightWindowKey:"오른쪽 윈도우 키",selectKey:"셀렉트 키",numpad0:"숫자 패드 0 키",numpad1:"숫자 패드 1 키",numpad2:"숫자 패드 2 키",numpad3:"숫자 패드 3 키",numpad4:"숫자 패드 4 키",numpad5:"숫자 패드 5 키",numpad6:"숫자 패드 6 키",numpad7:"숫자 패드 7 키",numpad8:"숫자 패드 8 키",numpad9:"숫자 패드 9 키",multiply:"곱셈(*) 키",add:"덧셈(+) 키",subtract:"뺄셈(-) 키",decimalPoint:"온점(.) 키",divide:"나눗셈(/) 키",f1:"F1 키",f2:"F2 키",f3:"F3 키",f4:"F4 키",f5:"F5 키",f6:"F6 키",
+f7:"F7 키",f8:"F8 키",f9:"F9 키",f10:"F10 키",f11:"F11 키",f12:"F12 키",numLock:"Num Lock 키",scrollLock:"Scroll Lock 키",semiColon:"세미콜론(;) 키",equalSign:"등호(\x3d) 키",comma:"쉼표(,) 키",dash:"대시(-) 키",period:"온점(.) 키",forwardSlash:"슬래시(/) 키",graveAccent:"억음 악센트(`) 키",openBracket:"브라켓 열기([) 키",backSlash:"역슬래시(\\\\) 키",closeBracket:"브라켓 닫기(]) 키",singleQuote:"외 따옴표(') 키"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."},
+{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]},
+{name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",
+leftWindowKey:"پەنجەرەی چەپ",rightWindowKey:"پەنجەرەی ڕاست",selectKey:"Select",numpad0:"Numpad 0",numpad1:"1",numpad2:"2",numpad3:"3",numpad4:"4",numpad5:"5",numpad6:"6",numpad7:"7",numpad8:"8",numpad9:"9",multiply:"*",add:"+",subtract:"-",decimalPoint:".",divide:"/",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:";",equalSign:"\x3d",comma:",",dash:"-",period:".",forwardSlash:"/",graveAccent:"`",
+openBracket:"[",backSlash:"\\\\",closeBracket:"}",singleQuote:"'"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."},
+{name:"Redaktora dialoga  logs",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet  SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."},
+{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku."},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]},
+{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai",
+legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},
+{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалог притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за уредувачот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Контекст-мени на уредувачот",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
+{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
+{name:"Наредби",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Пауза",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Up",leftArrow:"Стрелка лево",upArrow:"Стрелка горе",rightArrow:"Стрелка десно",downArrow:"Стрелка доле",insert:"Insert",
+leftWindowKey:"Лево Windows копче",rightWindowKey:"Десно Windows копче",selectKey:"Select копче",numpad0:"Нум. таст. 0",numpad1:"Нум. таст. 1",numpad2:"Нум. таст. 2",numpad3:"Нум. таст. 3",numpad4:"Нум. таст. 4",numpad5:"Нум. таст. 5",numpad6:"Нум. таст. 6",numpad7:"Нум. таст. 7",numpad8:"Нум. таст. 8",numpad9:"Нум. таст. 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",
+f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
+legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
+{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
+{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},
+{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],tab:"Tabulator",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",
+rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Velg nøkkel",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7",numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multipliser",add:"Legg til",
+subtract:"Trekk fra",decimalPoint:"Desimaltegn",divide:"Divider",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grav aksent",openBracket:"Åpne parentes",backSlash:"Bakover skråstrek",closeBracket:"Lukk parentes",singleQuote:"Enkelt sitattegn"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."},
+{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Bij dialoogvensters met meerdere tabbladen kan de tabset bereikt worden met ALT+F10 of met TAB als onderdeel van de tabvolgorde in het dialoogvenster. Als de tabset focus heeft, kun je schakalen naar het volgende en vorige tabblad met respectievelijk PIJL RECHTS en PIJL LINKS."},
+{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."},
+{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht",
+legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},
+{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",
+downArrow:"Pijl naar beneden",insert:"Invoegen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen",subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",
+f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
+legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
+{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
+{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},
+{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",
+downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",
+f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","oc",{title:"Instruccions d'accessibilitat",contents:"Contengut de l'ajuda. Per tampar aquesta fenèstra, quichatz sus la tòca Escap.",legend:[{name:"General",items:[{name:"Barra d'aisinas de l'editor",legend:"Quichar sus ${toolbarFocus} per accedir a la barra d'aisinas. Se desplaçar cap al groupe seguent o precedent de la barra d'aisinas amb las tòcas Tab e Maj+Tab. Se desplaçar cap al boton seguent o precedent de la barra d'aisinas amb las tòcas Sageta dreita e Sageta esquèrra. Quichar sus la barra d'espaci o la tòca Entrada per activer lo boton de barra d'aisinas."},
+{name:"Fenèstra de l'editor",legend:"Dins una bóstia de dialòg, quichar sus Tab per passar a l'element seguent, quichar sus Maj+Tab per passar a l'element precedent, quichar sus Entrada per validar, quichar sus Escap per anullar. Quand una bóstia de dialòg possedís des onglets, la lista pòt èsser atenta amb Alt+F10 o amb Tab. Dins la lista dels onglets, se desplaçar cap al seguent e lo precedent amb las tòcas Sageta dreita e Sageta esquèrra respectivament."},{name:"Menú contextual de l'editor",legend:"Quichar sus ${contextMenu} o sus la tòca Menú per dobrir lo menú contextual. Se desplaçar ensuite cap a l'opcion seguenta del menú amb las tòcas Tab o Sageta bas. Se desplaçar cap a l'opcion precedenta amb las tòcas Maj+Tab o Sageta naut. Quichar sus la barra d'espaci o la tòca Entrada per seleccionar l'opcion del menu. Quichar sus la barra d'espaci, la tòca Entrada o Sageta dreita per dobrir lo sosmenú de l'opcion seleccionada. Tornar a l'element de menú parent amb la tòca Escap o Sageta esquèrra. Tampar lo menú contextual amb Escap."},
+{name:"Zòna de lista de l'editor",legend:"Dins una lista en menú desenrotlant, se desplaçar cap a l'element seguent de la lista amb las tòcas Tab o Sageta bas. Se desplaçar cap a l'element precedent de la lista amb las tòcas Maj+Tab o Sageta naut. Quichar sus la barra d'espaci o sus Entrada per seleccionar l'opcion dins la lista. Quichar sus Escap per tampar lo menú desenrotlant."},{name:"Barra del camin d'elements de l'editor",legend:"Quichar sus ${elementsPathFocus} per naviguer cap a la barra del fial d'Ariana dels elements. Se desplaçar cap al boton de l'element seguent amb las tòcas Tab o Sageta dreita. Se desplaçar cap al boton precedent amb las tòcas Maj+Tab o Sageta esquèrra. Quichar sus la barra d'espaci o sus Entrada per seleccionar l'element dins l'editor."}]},
+{name:"Comandas",items:[{name:"Anullar la comanda",legend:"Quichar sus ${undo}"},{name:"Comanda restablir",legend:"Quichar sus ${redo}"},{name:" Comanda gras",legend:"Quichar sus ${bold}"},{name:" Comanda italica",legend:"Quichar sus ${italic}"},{name:" Comanda solinhat",legend:"Quichar sus ${underline}"},{name:" Comanda ligam",legend:"Quichar sus ${link}"},{name:"Comanda enrotlar la barra d'aisinas",legend:"Quichar sus ${toolbarCollapse}"},{name:"Comanda d'accès a l'element seleccionable precedent",
+legend:"Quichar sus ${accessNextSpace} per accedir a l'element seleccionable inategnible lo mai pròche abans lo cursor, per exemple : doas linhas orizontalas adjacentas. Repetir la combinason de tòcas per aténher los elements seleccionables precedents."},{name:"Comanda d'accès a l'element seleccionable seguent",legend:"Quichar sus ${accessNextSpace} per accedir a l'element seleccionable inatenhible lo mai pròche aprèp lo cursor, per exemple : doas linhas orizontalas adjacentas. Repetir la combinason de tòcas per aténher los elements seleccionables seguents."},
+{name:" Ajuda sus l'accessibilitat",legend:"Quichar sus ${a11yHelp}"}]}],tab:"Tabulacion",pause:"Pausa",capslock:"Verr. Maj.",escape:"Escap",pageUp:"Pagina superiora",pageDown:"Pagina seguenta",leftArrow:"Sageta esquèrra",upArrow:"Sageta naut",rightArrow:"Sageta dreita",downArrow:"Sageta bassa",insert:"Inser",leftWindowKey:"Tòca Windows esquèrra",rightWindowKey:"Tòca Windows dreita",selectKey:"Tòca Seleccionar",numpad0:"0 del pavat numeric",numpad1:"1 del pavat numeric",numpad2:"2 del pavat numeric",
+numpad3:"3 del pavat numeric",numpad4:"4 del pavat numeric",numpad5:"5 del pavat numeric",numpad6:"6 del pavat numeric",numpad7:"7 del pavat numeric",numpad8:"Pavat numeric 8",numpad9:"9 del pavat numeric",multiply:"Multiplicar",add:"Plus",subtract:"Mens",decimalPoint:"Punt decimal",divide:"Devesir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Verr. Num.",scrollLock:"Arrèst desfil.",semiColon:"Punt-virgula",equalSign:"Signe egal",comma:"Virgula",
+dash:"Jonhent",period:"Punt",forwardSlash:"Barra oblica",graveAccent:"Accent grèu",openBracket:"Parentèsi dobèrta",backSlash:"Barra oblica invèrsa",closeBracket:"Parentèsi tampanta",singleQuote:"Apostròfa"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi."},
+{name:"Okno dialogowe edytora",legend:"Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO."},
+{name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze",
+legend:"Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER."}]},
+{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Strzałka w lewo",upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",
+insert:"Insert",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej",numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",
+numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza",period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",
+closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
+{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente."},
+{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},
+{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},
+{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},
+{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],tab:"Tecla Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",
+downArrow:"Seta à Baixo",insert:"Insert",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico",numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",
+subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes",backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade",contents:"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de ferramentas do editor",legend:"Clique em ${toolbarFocus} para navegar na barra de ferramentas. Para navegar entre o grupo da barra de ferramentas anterior e seguinte use TAB e SHIFT+TAB. Para navegar entre o botão da barra de ferramentas seguinte e anterior use a SETA DIREITA ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
+{name:"Janela do editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Menu de contexto do editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com  SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu.  Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente  com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},
+{name:"Editor de caixa em lista",legend:"Dentro de uma lista, para navegar para o item seguinte da lista use TAB ou SETA PARA BAIXO. Para o item anterior da lista use SHIFT+TAB ou SETA PARA BAIXO. Carregue em ESPAÇO ou ENTER para selecionar a opção lista. Carregue em ESC para fechar a caixa da lista."},{name:"Editor da barra de caminho dos elementos",legend:"Clique em ${elementsPathFocus} para navegar na barra de caminho dos elementos. Para o botão do elemento seguinte use TAB ou SETA DIREITA. para o botão anterior use SHIFT+TAB ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para selecionar o elemento no editor."}]},
+{name:"Comandos",items:[{name:"Comando de anular",legend:"Carregar ${undo}"},{name:"Comando de refazer",legend:"Clique ${redo}"},{name:"Comando de negrito",legend:"Pressione ${bold}"},{name:"Comando de itálico",legend:"Pressione ${italic}"},{name:"Comando de sublinhado",legend:"Pressione ${underline}"},{name:"Comando de hiperligação",legend:"Pressione ${link}"},{name:"Comando de ocultar barra de ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Aceder ao comando espaço de foco anterior",
+legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},
+{name:"Ajuda a acessibilidade",legend:"Pressione ${a11yHelp}"}]}],tab:"Tab",pause:"Pausa",capslock:"Maiúsculas",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Seta esquerda",upArrow:"Seta para cima",rightArrow:"Seta direita",downArrow:"Seta para baixo",insert:"Inserir",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",
+numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiplicar",add:"Adicionar",subtract:"Subtrair",decimalPoint:"Decimal Point",divide:"Separar",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Vírgula",dash:"Cardinal",period:"Ponto",forwardSlash:"Forward Slash",graveAccent:"Acento grave",openBracket:"Open Bracket",backSlash:"Backslash",
+closeBracket:"Close Bracket",singleQuote:"Plica"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."},
+{name:"Dialog editor",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu  SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."},
+{name:"Editor Casetă Listă",legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
+{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",
+rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",
+equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:'Внутри диалога, нажмите TAB чтобы перейти к следующему элементу диалога, нажмите SHIFT+TAB чтобы перейти к предыдущему элементу диалога, нажмите ENTER чтобы отправить диалог, нажмите ESC чтобы отменить диалог. Когда диалоговое окно имеет несколько вкладок, получить доступ к панели вкладок как части диалога можно нажатием или сочетания ALT+F10 или TAB, при этом активные элементы диалога будут перебираться с учетом порядка табуляции. При активной панели вкладок, переход к следующей или предыдущей вкладке осуществляется нажатием стрелки "ВПРАВО" или стрелки "ВЛЕВО" соответственно.'},
+{name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка",
+legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]},
+{name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'},
+{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",
+insert:"Insert",leftWindowKey:"Левая клавиша Windows",rightWindowKey:"Правая клавиша Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"Плюс",subtract:"Вычесть",decimalPoint:"Десятичная точка",divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",
+scrollLock:"Scroll Lock",semiColon:"Точка с запятой",equalSign:"Равно",comma:"Запятая",dash:"Тире",period:"Точка",forwardSlash:"Наклонная черта",graveAccent:"Апостроф",openBracket:"Открыть скобку",backSlash:"Обратная наклонная черта",closeBracket:"Закрыть скобку",singleQuote:"Одинарная кавычка"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ  APPLICATION KEY  අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ  UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද,  දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට  ESC හෝ LEFT ARROW බොත්තම ද.  අන්තර්ගත-මෙනුව වැසීමට  ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."},
+{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"},
+{name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර  වැදගත්  විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත්  විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න  ${a11y }"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",
+pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."},
+{name:"Editorový dialóg",legend:"V dialógovom okne stlačte TAB pre presun na ďalší prvok, SHIFT+TAB pre presun na predchádzajúci prvok, ENTER pre odoslanie, ESC pre zrušenie. Keď má dialógové okno viacero kariet, zoznam kariet dosiahnete buď stlačením ALT+F10 alebo s TAB v príslušnom poradí kariet. So zameraným zoznamom kariet sa pohybujte k ďalšej alebo predchádzajúcej karte cez PRAVÚ a ĽAVÚ ŠÍPKU."},{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."},
+{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]},
+{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},
+{name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",
+downArrow:"Šípka dole",insert:"Insert",leftWindowKey:"Ľavé Windows tlačidlo",rightWindowKey:"Pravé Windows tlačidlo",selectKey:"Tlačidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"Sčítanie",subtract:"Odčítanie",decimalPoint:"Desatinná čiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",
+f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Bodkočiarka",equalSign:"Rovná sa",comma:"Čiarka",dash:"Pomĺčka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila za dostopnost",contents:"Vsebina pomoči. Če želite zapreti pogovorno okno, pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Orodna vrstica urejevalnika",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."},
+{name:"Urejevalno Pogovorno Okno",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{name:"Kontekstni meni urejevalnika",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."},
+{name:"Urejevalno Seznamsko Polje",legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]},
+{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},
+{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Puščica levo",upArrow:"Puščica gor",rightArrow:"Puščica desno",
+downArrow:"Puščica dol",insert:"Insert",leftWindowKey:"Leva tipka Windows",rightWindowKey:"Desna tipka Windows",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica",divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",
+f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"Enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Zaklepaj",singleQuote:"Opuščaj"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"},
+{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],tab:"Fletë",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Shenja majtas",upArrow:"Shenja sipër",rightArrow:"Shenja djathtas",downArrow:"Shenja poshtë",insert:"Shto",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Shto",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Presje",dash:"vizë",period:"Pikë",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Hape kllapën",backSlash:"Backslash",closeBracket:"Mbylle kllapën",
+singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
+legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet."},
+{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL."},{name:"Editor för innehållsmeny",legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},
+{name:"Editor för list-box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen."},{name:"Editor för elementens sökväg",legend:"Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren."}]},
+{name:"Kommandon",items:[{name:"Ångra kommando",legend:"Tryck på ${undo}"},{name:"Gör om kommando",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},
+{name:"Tillgå nästa fokuskommandots utrymme",legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],tab:"Tab",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",leftArrow:"Vänsterpil",upArrow:"Uppil",rightArrow:"Högerpil",downArrow:"Nedåtpil",
+insert:"Infoga",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",
+numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้",
+legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",
+numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."},
+{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."},
+{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."},
+{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"},
+{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},
+{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],tab:"Sekme tuşu",pause:"Durdurma tuşu",capslock:"Büyük harf tuşu",escape:"Vazgeç tuşu",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Araya gir",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu",selectKey:"Seçme tuşu",numpad0:"Nümerik 0",numpad1:"Nümerik 1",numpad2:"Nümerik 2",numpad3:"Nümerik 3",numpad4:"Nümerik 4",numpad5:"Nümerik 5",
+numpad6:"Nümerik 6",numpad7:"Nümerik 7",numpad8:"Nümerik 8",numpad9:"Nümerik 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lk",scrollLock:"Scr Lk",semiColon:"Noktalı virgül",equalSign:"Eşittir",comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"İleri eğik çizgi",graveAccent:"Üst tırnak",openBracket:"Parantez aç",backSlash:"Ters eğik çizgi",
+closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
+{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"},
+{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"${toolbarCollapse} басыгыз"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
+{name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],tab:"Tab",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",
+numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык",graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",
+singleQuote:"Бер иңле куштырнаклар"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT+TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT+F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛SHIFT+ TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."},
+{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى",
+legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]},
+{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},
+{name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"سول يا ئوق",
+upArrow:"ئۈستى يا ئوق",rightArrow:"ئوڭ يا ئوق",downArrow:"ئاستى يا ئوق",insert:"قىستۇر",leftWindowKey:"سول Windows كۇنۇپكىسى",rightWindowKey:"ئوڭ Windows كۇنۇپكىسى",selectKey:"تاللاش كۇنۇپكىسى",numpad0:"سان تاختا 0",numpad1:"سان تاختا 1",numpad2:"سان تاختا 2",numpad3:"سان تاختا 3",numpad4:"سان تاختا 4",numpad5:"سان تاختا 5",numpad6:"سان تاختا 6",numpad7:"سان تاختا 7",numpad8:"سان تاختا 8",numpad9:"سان تاختا 9",multiply:"يۇلتۇز كۇنۇپكىسى",add:"قوشۇش",subtract:"ئېلىش",decimalPoint:"كەسىر چېكىت",divide:"بۆلۈش",
+f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"سان قۇلۇپ كۇنۇپكىسى",scrollLock:"سۈرگۈچ قۇلۇپ كۇنۇپكىسى",semiColon:"چېكىتلىك پەش",equalSign:"تەڭلىك بەلگىسى",comma:"پەش",dash:"سىزىقچە",period:"چېكىت",forwardSlash:"سولغا يانتۇ سىزىق",graveAccent:"ئۇرغۇ بەلگىسى",openBracket:"ئېچىلغان تىرناق",backSlash:"ئوڭغا يانتۇ سىزىق",closeBracket:"يېپىلغان تىرناق",singleQuote:"يالاڭ پەش"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів."},{name:"Діалог Редактора",
+legend:'Усередині діалогу, натисніть TAB щоб перейти до наступного елементу діалогу, натисніть SHIFT+TAB щоб перейти до попереднього елемента діалогу, натисніть ENTER щоб відправити діалог, натисніть ESC щоб скасувати діалог. Коли діалогове вікно має декілька вкладок, отримати доступ до панелі вкладок як частині діалогу можна натисканням або поєднання ALT+F10 або TAB, при цьому активні елементи діалогу будуть перебиратися з урахуванням порядку табуляції. При активній панелі вкладок, перехід до наступної або попередньої вкладці здійснюється натисканням стрілки "ВПРАВО" або стрілки "ВЛЕВО" відповідно.'},
+{name:"Контекстне Меню Редактора",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."},{name:"Скринька Списків Редактора",legend:"Усередині списку, перехід до наступного пункту списку виконується клавішею TAB або СТРІЛКА ВНИЗ. Перехід до попереднього елемента списку клавішею SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."},
+{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"},
+{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},
+{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",
+numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання",decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період",forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",
+closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
+{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."},
+{name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo."}]},
+{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},
+{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],tab:"Phím Tab",pause:"Phím Pause",capslock:"Phím Caps Lock",escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",leftArrow:"Phím Left Arrow",
+upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9",multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",
+f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 切换到工具栏，使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内，按 TAB 键移动到下一个字段，按 SHIFT + TAB 组合键移动到上一个字段，按 ENTER 键提交对话框，按 ESC 键取消对话框。对于有多选项卡的对话框，可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表，当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项；SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键，ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"},
+{name:"编辑器列表框",legend:"在列表框中，移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键，用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏，使用 TAB 键或右箭头键选择下一个元素，使用 SHIFT+TAB 组合键或左箭头键选择上一个元素，按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"},
+{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域，例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如：两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],tab:"Tab 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键",insert:"插入键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",
+numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键",semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",
+openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中，按下 TAB 鍵以導覽到下一個對話框元素，按下 SHIFT+TAB 以移動到上一個對話框元素，按下 ENTER 以遞交對話框，按下 ESC 以取消對話框。當對話框有多個分頁時，可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時，分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。"},{name:"編輯器內容功能表",legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"},
+{name:"編輯器清單方塊",legend:"在清單方塊中，使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。"},{name:"編輯器元件路徑工具列",legend:"請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令",legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"},
+{name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例：二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例：二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"向左箭號",upArrow:"向上鍵號",rightArrow:"向右鍵號",downArrow:"向下鍵號",insert:"插入",leftWindowKey:"左方 Windows 鍵",
+rightWindowKey:"右方 Windows 鍵",selectKey:"選擇鍵",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"乘號",add:"新增",subtract:"減號",decimalPoint:"小數點",divide:"除號",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"分號",equalSign:"等號",comma:"逗號",dash:"虛線",
+period:"句點",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"反斜線",closeBracket:"右方括號",singleQuote:"單引號"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/about.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/about.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/about.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("about",function(a){a=a.lang.about;var b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'\x3cstyle type\x3d"text/css"\x3e.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+
+b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}\x3c/style\x3e\x3cdiv class\x3d"cke_about_container"\x3e\x3cdiv class\x3d"cke_about_logo"\x3e\x3c/div\x3e\x3cp\x3eCKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')\x3cbr\x3e\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://ckeditor.com/"\x3ehttp://ckeditor.com\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+
+a.help.replace("$1",'\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://docs.ckeditor.com/user"\x3e'+a.userGuide+"\x3c/a\x3e")+"\x3c/p\x3e\x3cp\x3e"+a.moreInfo+'\x3cbr\x3e\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://ckeditor.com/about/license"\x3ehttp://ckeditor.com/about/license\x3c/a\x3e\x3c/p\x3e\x3cp\x3e'+a.copy.replace("$1",'\x3ca target\x3d"_blank" rel\x3d"noopener noreferrer" href\x3d"http://cksource.com/"\x3eCKSource\x3c/a\x3e - Frederico Knabben')+
+"\x3c/p\x3e\x3c/div\x3e"}]}],buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/logo_ckeditor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/about/dialogs/logo_ckeditor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/conf.json
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/conf.json	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/conf.json	(revision 2)
@@ -0,0 +1,32 @@
+{
+"FILES_ROOT":          "../../../../../../media",
+"SESSION_PATH_KEY":    "",
+"RESIZE_IMAGE_WIDTH":  "0",
+"RESIZE_IMAGE_HEIGHT": "0",
+"MAX_IMAGE_WIDTH":     "1280",
+"MAX_IMAGE_HEIGHT":    "0",
+"MAX_IMAGE_SIZE":      "10000000",
+"FORBIDDEN_UPLOADS":   "zip js jsp jsb mhtml mht xhtml xht php phtml php3 php4 php5 phps shtml jhtml pl sh py cgi exe application gadget hta cpl msc jar vb jse ws wsf wsc wsh ps1 ps2 psc1 psc2 msh msh1 msh2 inf reg scf msp scr dll msi vbs bat com pif cmd vxd cpl htpasswd htaccess",
+"ALLOWED_UPLOADS":     "",
+"FILEPERMISSIONS":     "0644",
+"DIRPERMISSIONS":      "0755",
+"STORE_PREVIEWS_DIR":  "cache",
+
+"DIRLIST":             "php/dirtree.php",
+"CREATEDIR":           "php/createdir.php",
+"DELETEDIR":           "php/deletedir.php",
+"MOVEDIR":             "php/movedir.php",
+"COPYDIR":             "php/copydir.php",
+"RENAMEDIR":           "php/renamedir.php",
+"FILESLIST":           "php/fileslist.php",
+"UPLOAD":              "php/upload.php",
+"UPLOADURL":           "php/uploadurl.php",
+"DOWNLOAD":            "php/download.php",
+"DOWNLOADDIR":         "php/downloaddir.php",
+"DELETEFILE":          "php/deletefile.php",
+"MOVEFILE":            "php/movefile.php",
+"COPYFILE":            "php/copyfile.php",
+"RENAMEFILE":          "php/renamefile.php",
+"GENERATETHUMB":       "php/thumb.php"
+
+}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/index.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/index.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/index.html	(revision 2)
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <title>AlphaManager file manager</title>
+     <script type="text/javascript" src="js/alphamanager.js"></script>
+    <script type="text/javascript">
+    </script>
+</head>
+<body>
+<table id="wraper" style="width: 100%">
+    <tr>
+        <td valign="top" class="pnlDirs" id="dirActions">
+            <div class="actions">
+                <!-- inserted in runtime -->
+            </div>
+            <div class="scrollPane">
+                <ul id="pnlDirList"></ul>
+            </div>
+        </td>
+        <td valign="top" id="fileActions">
+            <input type="hidden" id="hdViewType" value="list">
+            <input type="hidden" id="hdOrder" value="asc">
+
+            <div class="actions">
+                <!-- inserted in runtime -->
+            </div>
+
+            <div id="pnlFiles" class="pnlFiles">
+                <div class="scrollPane">
+
+                    <div id="pnlEmptyDir">
+                        <div data-lang="DirIsEmpty">This folder is empty</div>
+                    </div>
+
+                    <div id="pnlSearchNoFiles">
+                        <div data-lang="NoFilesFound">No files found</div>
+                    </div>
+
+                    <div id="pnlFileList">
+                        <table id="pnlViewList" cellpadding="0" cellmargin="0">
+                            <tbody>
+                                <!-- Files as list are inserted here -->
+                            </tbody>
+                        </table>
+                        <div id="pnlViewThumbs">
+                            <table>
+                                <tbody>
+                                    <tr>
+                                        <td>
+
+                                        </td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                            <!-- Files as thumbs are inserted here -->
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div id="pnlLoading">
+                <div id="pnlLoadingInner" class="scrollPane noScroll">
+                    <div data-lang="LoadingFiles">Loading files...</div>
+                </div>
+            </div>
+
+            <div id="pnlUploadFiles">
+            </div>
+
+        </td>
+    </tr>
+</table>
+
+<iframe name="frmDownloadDir" style="display:none"></iframe>
+
+<div id="menuFile" class="contextMenu">
+    <!-- inserted in runtime -->
+</div>
+<div id="menuDir" class="contextMenu">
+    <!-- inserted in runtime -->
+</div>
+
+<div id="dlgTextBg" class="dlg-bg"></div>
+<div class="dlg-outer" id="dlgText" >
+    <div class="dlg-wrap">
+        <div class="dlg">
+            <div class="title"></div>
+            <div class="content">
+                <input>
+            </div>
+            <div class="buttons">
+                <a href="javascript:void(0)" class="dlg-btn" id="dlgTextBtnOK">OK</a>
+                <a href="javascript:void(0)" class="dlg-btn" id="dlgTextBtnCancel" data-lang="Cancel">Cancel</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+<div id="dlgConfirmBg" class="dlg-bg"></div>
+<div class="dlg-outer" id="dlgConfirm" >
+    <div class="dlg-wrap">
+        <div class="dlg">
+            <div class="content">
+            </div>
+            <div class="buttons">
+                <a href="javascript:void(0)" class="dlg-btn" id="dlgConfirmBtnOK">OK</a>
+                <a href="javascript:void(0)" class="dlg-btn" id="dlgConfirmBtnCancel" data-lang="Cancel">Cancel</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+<div id="dlgAlertBg" class="dlg-bg"></div>
+<div class="dlg-outer" id="dlgAlert" >
+    <div class="dlg-wrap">
+        <div class="dlg">
+            <div class="content">
+            </div>
+            <div class="buttons">
+                <a href="javascript:void(0)" class="dlg-btn" id="dlgAlertBtnOK">OK</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/js/alphamanager.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/js/alphamanager.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/js/alphamanager.js	(revision 2)
@@ -0,0 +1,35 @@
+/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(d,c){"object"==typeof module&&"object"==typeof module.exports?module.exports=d.document?c(d,!0):function(b){if(!b.document){throw new Error("jQuery requires a window with a document");}return c(b);}:c(d);}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b);},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase();};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this);},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this);},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b;},each:function(a,b){return m.each(this,a,b);},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b);}));},slice:function(){return this.pushStack(d.apply(this,arguments));},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[]);},end:function(){return this.prevObject||this.constructor(null);},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++){if(null!=(e=arguments[h])){for(d in e){a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));}}}return g;},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a);},noop:function(){},isFunction:function(a){return"function"===m.type(a);},isArray:Array.isArray||function(a){return"array"===m.type(a);},isWindow:function(a){return null!=a&&a==a.window;},isNumeric:function(a){return !m.isArray(a)&&a-parseFloat(a)>=0;},isEmptyObject:function(a){var b;for(b in a){return !1;}return !0;},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a)){return !1;}try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf")){return !1;}}catch(c){return !1;}if(k.ownLast){for(b in a){return j.call(a,b);}}for(b in a){}return void 0===b||j.call(a,b);},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a;},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b);})(b);},camelCase:function(a){return a.replace(o,"ms-").replace(p,q);},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase();},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++){if(d=b.apply(a[e],c),d===!1){break;}}}else{for(e in a){if(d=b.apply(a[e],c),d===!1){break;}}}}else{if(g){for(;f>e;e++){if(d=b.call(a[e],e,a[e]),d===!1){break;}}}else{for(e in a){if(d=b.call(a[e],e,a[e]),d===!1){break;}}}}return a;},trim:function(a){return null==a?"":(a+"").replace(n,"");},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c;},inArray:function(a,b,c){var d;if(b){if(g){return g.call(b,a,c);}for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++){if(c in b&&b[c]===a){return c;}}}return -1;},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d){a[e++]=b[d++];}if(c!==c){while(void 0!==b[d]){a[e++]=b[d++];}}return a.length=e,a;},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++){d=!b(a[f],f),d!==h&&e.push(a[f]);}return e;},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h){for(;g>f;f++){d=b(a[f],f,c),null!=d&&i.push(d);}}else{for(f in a){d=b(a[f],f,c),null!=d&&i.push(d);}}return e.apply([],i);},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)));},e.guid=a.guid=a.guid||m.guid++,e):void 0;},now:function(){return +new Date;},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase();});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a;}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0;},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++){if(this[b]===a){return b;}}return -1;},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;
+return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320);};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType;}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b));}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]){}a.length=c-1;}};}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a){return d;}if(1!==(k=b.nodeType)&&9!==k){return[];}if(p&&!e){if(f=_.exec(a)){if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode){return d;}if(h.id===j){return d.push(h),d;}}else{if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j){return d.push(h),d;}}}else{if(f[2]){return I.apply(d,b.getElementsByTagName(a)),d;}if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName){return I.apply(d,b.getElementsByClassName(j)),d;}}}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--){o[l]=s+qb(o[l]);}w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",");}if(x){try{return I.apply(d,w.querySelectorAll(x)),d;}catch(y){}finally{r||b.removeAttribute("id");}}}}return i(a.replace(R,"$1"),b,d,e);}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e;}return b;}function hb(a){return a[u]=!0,a;}function ib(a){var b=n.createElement("div");try{return !!a(b);}catch(c){return !1;}finally{b.parentNode&&b.parentNode.removeChild(b),b=null;}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--){d.attrHandle[c[e]]=b;}}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d){return d;}if(c){while(c=c.nextSibling){if(c===b){return -1;}}}return a?1:-1;}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a;};}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a;};}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--){c[e=f[g]]&&(c[e]=!(d[e]=c[e]));}});});}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a;}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1;},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m();},!1):g.attachEvent&&g.attachEvent("onunload",function(){m();})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className");}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length;}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length;}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length;}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[];}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b;};}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b;};}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0;}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++]){1===c.nodeType&&d.push(c);}return d;}return f;},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0;},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked");}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:");})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q);}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;
+return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)));}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return !0;}}}return !1;},B=b?function(a,b){if(a===b){return l=!0,0;}var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1);}:function(a,b){if(a===b){return l=!0,0;}var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g){return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;}if(f===g){return kb(a,b);}c=a;while(c=c.parentNode){h.unshift(c);}c=b;while(c=c.parentNode){i.unshift(c);}while(h[d]===i[d]){d++;}return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0;},e):n;},fb.matches=function(a,b){return fb(a,null,null,b);},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b))){try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType){return d;}}catch(e){}}return fb(b,n,null,[a]).length>0;},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b);},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null;},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a);},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++]){b===a[f]&&(e=d.push(f));}while(e--){a.splice(d[e],1);}}return k=null,a;},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent){return a.textContent;}for(a=a.firstChild;a;a=a.nextSibling){c+=e(a);}}else{if(3===f||4===f){return a.nodeValue;}}}else{while(b=a[d++]){c+=e(b);}}return c;},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4);},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a;},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3));}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return !0;}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b;};},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"");});},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0;};},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return !!a.parentNode;}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p]){if(h?l.nodeName.toLowerCase()===r:1===l.nodeType){return !1;}}o=p="only"===a&&!o&&"nextSibling";}return !0;}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop()){if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break;}}}else{if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w){m=j[1];}else{while(l=++n&&l&&l[p]||(m=n=0)||o.pop()){if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b)){break;}}}}return m-=e,m===d||m%d===0&&m/d>=0;}};},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--){d=K.call(a,f[g]),a[d]=!(c[d]=f[g]);}}):function(a){return e(a,0,c);}):e;}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--){(f=g[h])&&(a[h]=!(b[h]=f));
+}}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop();};}),has:hb(function(a){return function(b){return fb(a,b).length>0;};}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1;};}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do{if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang")){return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");}}while((b=b.parentNode)&&1===b.nodeType);return !1;};}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id;},root:function(a){return a===o;},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex);},enabled:function(a){return a.disabled===!1;},disabled:function(a){return a.disabled===!0;},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected;},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0;},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling){if(a.nodeType<6){return !1;}}return !0;},parent:function(a){return !d.pseudos.empty(a);},header:function(a){return Z.test(a.nodeName);},input:function(a){return Y.test(a.nodeName);},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b;},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase());},first:nb(function(){return[0];}),last:nb(function(a,b){return[b-1];}),eq:nb(function(a,b,c){return[0>c?c+b:c];}),even:nb(function(a,b){for(var c=0;b>c;c+=2){a.push(c);}return a;}),odd:nb(function(a,b){for(var c=1;b>c;c+=2){a.push(c);}return a;}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;){a.push(d);}return a;}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;){a.push(d);}return a;})}},d.pseudos.nth=d.pseudos.eq;for(b in {radio:!0,checkbox:!0,file:!0,password:!0,image:!0}){d.pseudos[b]=lb(b);}for(b in {submit:!0,reset:!0}){d.pseudos[b]=mb(b);}function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k){return b?0:k.slice(0);}h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter){!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));}if(!c){break;}}return b?h.length:h?fb.error(a):z(a,i).slice(0);};function qb(a){for(var b=0,c=a.length,d="";c>b;b++){d+=a[b].value;}return d;}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d]){if(1===b.nodeType||e){return a(b,c,f);}}}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d]){if((1===b.nodeType||e)&&a(b,c,g)){return !0;}}}else{while(b=b[d]){if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f){return j[2]=h[2];}if(i[d]=j,j[2]=a(b,c,g)){return !0;}}}}};}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--){if(!a[e](b,c,d)){return !1;}}return !0;}:a[0];}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++){fb(a,b[d],c);}return c;}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++){(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));}return g;}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--){(l=j[k])&&(r[n[k]]=!(q[n[k]]=l));}}if(f){if(e||a){if(e){j=[],k=r.length;while(k--){(l=r[k])&&j.push(q[k]=l);}e(null,r=[],j,i);}k=r.length;while(k--){(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l));}}}else{r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r);}});}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b;},h,!0),l=rb(function(a){return K.call(b,a)>-1;},h,!0),m=[function(a,c,d){return !g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));}];f>i;i++){if(c=d.relative[a[i].type]){m=[rb(sb(m),c)];}else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++){if(d.relative[a[e].type]){break;}}return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a));}m.push(c);}}return sb(m);}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||0.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++]){if(o(l,g,h)){i.push(l);break;}}k&&(w=v);}c&&((l=!o&&l)&&p--,f&&r.push(l));}if(p+=q,c&&q!==p){m=0;while(o=b[m++]){o(r,s,g,h);}if(f){if(p>0){while(q--){r[q]||s[q]||(s[q]=G.call(i));
+}}s=ub(s);}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i);}return k&&(w=v,j=t),r;};return c?hb(f):f;}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--){f=wb(b[c]),f[u]?d.push(f):e.push(f);}f=A(a,xb(e,d)),f.selector=a;}return f;},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b){return e;}n&&(b=b.parentNode),a=a.slice(j.shift().value.length);}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type]){break;}if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a){return I.apply(e,f),e;}break;}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e;},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"));}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href");})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2);}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value");})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue;}),ib(function(a){return null==a.getAttribute("disabled");})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null;}),fb;}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b)){return m.grep(a,function(a,d){return !!b.call(a,d,a)!==c;});}if(b.nodeType){return m.grep(a,function(a){return a===b!==c;});}if("string"==typeof b){if(v.test(b)){return m.filter(b,a,c);}b=m.filter(b,a);}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c;});}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType;}));},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a){return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++){if(m.contains(d[b],this)){return !0;}}}));}for(b=0;e>b;b++){m.find(a,d[b],c);}return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c;},filter:function(a){return this.pushStack(w(this,a||[],!1));},not:function(a){return this.pushStack(w(this,a||[],!0));},is:function(a){return !!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length;}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a){return this;}if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b){return !b||b.jquery?(b||x).find(a):this.constructor(b).find(a);}if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b)){for(c in b){m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);}}return this;}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2]){return x.find(a);}this.length=1,this[0]=d;}return this.context=y,this.selector=a,this;}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this));};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c))){1===e.nodeType&&d.push(e),e=e[b];}return d;},sibling:function(a,b){for(var c=[];a;a=a.nextSibling){1===a.nodeType&&a!==b&&c.push(a);}return c;}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++){if(m.contains(this,c[b])){return !0;}}});},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++){for(c=this[d];c&&c!==b;c=c.parentNode){if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break;}}}return this.pushStack(f.length>1?m.unique(f):f);},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1;},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))));},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a));
+}});function D(a,b){do{a=a[b];}while(a&&1!==a.nodeType);return a;}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null;},parents:function(a){return m.dir(a,"parentNode");},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c);},next:function(a){return D(a,"nextSibling");},prev:function(a){return D(a,"previousSibling");},nextAll:function(a){return m.dir(a,"nextSibling");},prevAll:function(a){return m.dir(a,"previousSibling");},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c);},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c);},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a);},children:function(a){return m.sibling(a.firstChild);},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes);}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e);};});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0;}),b;}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++){if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break;}}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable());},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c);});}(arguments),b?e=h.length:c&&(g=d,j(c));}return this;},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1){h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--);}}),this;},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length);},empty:function(){return h=[],e=0,this;},disable:function(){return h=i=c=void 0,this;},disabled:function(){return !h;},lock:function(){return i=void 0,c||k.disable(),this;},locked:function(){return !i;},fireWith:function(a,c){return !h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this;},fire:function(){return k.fireWith(this,arguments),this;},fired:function(){return !!d;}};return k;},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c;},always:function(){return e.done(arguments).fail(arguments),this;},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments);});}),a=null;}).promise();},promise:function(a){return null!=a?m.extend(a,d):d;}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h;},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this;},e[f[0]+"With"]=g.fireWith;}),d.promise(e),a&&a.call(e,e),e;},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c);};},i,j,k;if(e>1){for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++){c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;}}return f||g.resolveWith(k,c),g.promise();}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this;},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0);},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body){return setTimeout(m.ready);}m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")));}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J));}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready());}m.ready.promise=function(b){if(!H){if(H=m.Deferred(),"complete"===y.readyState){setTimeout(m.ready);}else{if(y.addEventListener){y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);}else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement;}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left");}catch(a){return setTimeout(e,50);}I(),m.ready();}}();}}}return H.promise(b);};var K="undefined",L;for(L in m(k)){break;}k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;
+c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d));}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test;}catch(b){k.deleteExpando=!1;}}a=null;}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b;};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c;}catch(e){}m.data(a,b,c);}else{c=void 0;}}return c;}function P(a){var b;for(b in a){if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b){return !1;}}return !0;}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b){return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f;}}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--){delete d[b[e]];}if(c?!P(d):!m.isEmptyObject(d)){return;}}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null);}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a);},data:function(a,b,c){return Q(a,b,c);},removeData:function(a,b){return R(a,b);},_data:function(a,b,c){return Q(a,b,c,!0);},_removeData:function(a,b){return R(a,b,!0);}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--){g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));}m._data(f,"parsedAttrs",!0);}return e;}return"object"==typeof a?this.each(function(){m.data(this,a);}):arguments.length>1?this.each(function(){m.data(this,a,b);}):f?O(f,a,m.data(f,a)):void 0;},removeData:function(a){return this.each(function(){m.removeData(this,a);});}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0;},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b);};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire();},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c);})});}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a);});},dequeue:function(a){return this.each(function(){m.dequeue(this,a);});},clearQueue:function(a){return this.queue(a||"fx",[]);},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f]);};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--){c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));}return h(),e.promise(b);}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a);},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c){m.access(a,b,h,c[h],!0,f,g);}}else{if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c);})),b)){for(;i>h;h++){b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));}}}return e?a:j?b.call(a):i?b(a[0],c):f;},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1;
+}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test;}catch(d){k.deleteExpando=!1;}}}(),function(){var b,c,d=y.createElement("div");for(b in {submit:!0,change:!0,focusin:!0}){c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);}d=null;}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return !0;}function bb(){return !1;}function cb(){try{return y.activeElement;}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments);},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--){f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);}a=null;}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--){if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--){g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));}i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o]);}else{for(o in k){m.event.remove(a,o+b[j],c,d,!0);}}}m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"));}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode){o.push(h),l=h;}l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a);}n=0;while((h=o[n++])&&!b.isPropagationStopped()){b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());}if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]();}catch(r){}m.event.triggered=void 0,l&&(d[g]=l);}return b.result;}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped()){(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()));}}return k.postDispatch&&k.postDispatch.call(this,a),a.result;}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type)){for(;i!=this;i=i.parentNode||this){if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++){d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);}e.length&&g.push({elem:i,handlers:e});}}}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g;},fix:function(a){if(a[m.expando]){return a;}var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;
+while(b--){c=d[b],a[c]=f[c];}return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a;},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a;}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a;}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus){try{return this.focus(),!1;}catch(a){}}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0;},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0;},_default:function(a){return m.nodeName(a.target,"a");}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result);}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault();}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1);}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c));},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void (this[m.expando]=!0)):new m.Event(a,b);},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1);},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0);},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation();}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c;}};}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0;}),m._data(c,"submitBubbles",!0));});},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0));},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit");}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0);}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0);})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0);}),m._data(b,"changeBubbles",!0));});},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0;},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName);}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0);};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);
+e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1);},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b));}};}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a){this.on(f,b,c,a[f],e);}return this;}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1){d=bb;}else{if(!d){return this;}}return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments);},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b);});},one:function(a,b,c,d){return this.on(a,b,c,d,1);},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj){return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;}if("object"==typeof a){for(e in a){this.off(e,b,a[e]);}return this;}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b);});},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this);});},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0;}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement){while(b.length){c.createElement(b.pop());}}return c;}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f){for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++){!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));}}return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f;}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked);}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a;}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a;}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a;}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++){m._data(c,"globalEval",!b||m._data(b[d],"globalEval"));}}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h){for(d=0,e=h[c].length;e>d;d++){m.event.add(b,c,h[c][d]);}}}g.data&&(g.data=m.extend({},g.data));}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events){m.removeEvent(b,d,e.handle);}b.removeAttribute(m.expando);}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue);}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a))){for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g){d[g]&&Bb(e,d[g]);}}if(b){if(c){for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++){Ab(e,d[g]);}}else{Ab(a,f);}}return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f;},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++){if(f=a[q],f||0===f){if("object"===m.type(f)){m.merge(p,f.nodeType?[f]:f);}else{if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];
+while(e--){h=h.lastChild;}if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--){m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j);}}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild){h.removeChild(h.firstChild);}h=o.lastChild;}else{p.push(b.createTextNode(f));}}}}h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++]){if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++]){ob.test(f.type||"")&&c.push(f);}}}return h=null,o;},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++){if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events){for(e in g.events){n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);}}j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f));}}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a));},null,a,arguments.length);},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a);}});},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild);}});},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this);});},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling);});},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++){b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));}return this;},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild){a.removeChild(a.firstChild);}a.options&&m.nodeName(a,"select")&&(a.options.length=0);}return this;},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b);});},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a){return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;}if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++){b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);}b=0;}catch(e){}}b&&this.empty().append(a);},null,a,arguments.length);},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this);}),a&&(a.length||a.nodeType)?this:this.remove();},detach:function(a){return this.remove(a,!0);},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p)){return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b);});}if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++){d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);}if(f){for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++){d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));}}i=c=null;}return this;}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++){c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());}return this.pushStack(e);};});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f;}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c;}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a){return a;}a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0;
+};}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null);},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+"";}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle;},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto";});function Lb(a,b){return{get:function(){var c=a();if(null!=c){return c?void delete this.get:(this.get=b).apply(this,arguments);}}};}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g;},boxSizingReliable:function(){return null==f&&i(),f;},pixelPosition:function(){return null==e&&i(),e;},reliableMarginRight:function(){return null==h&&i(),h;}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d));}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b){g[f]=a.style[f],a.style[f]=b[f];}e=c.apply(a,d||[]);for(f in b){a.style[f]=g[f];}return e;};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a){return b;}var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--){if(b=Tb[e]+c,b in a){return b;}}return d;}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++){d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));}for(g=0;h>g;g++){d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));}return a;}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b;}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2){"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));}return g;}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e)){return e;}d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0;}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px";}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c;}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;
+if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c){return g&&"get" in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];}if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set" in g&&void 0===(c=g.set(a,c,d))))){try{i[b]=c;}catch(j){}}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get" in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f;}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d);}):Yb(a,b,d):void 0;},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0);}};}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?0.01*parseFloat(RegExp.$1)+"":b?"1":"";},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e);}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0;}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++){e[a+T[d]+b]=f[d]||f[d-2]||f[0];}return e;}},Gb.test(a)||(m.cssHooks[a+b].set=Wb);}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++){f[b[g]]=m.css(a,b[g],!1,d);}return f;}return void 0!==c?m.style(a,b,c):m.css(a,b);},a,b,arguments.length>1);},show:function(){return Vb(this,!0);},hide:function(){return Vb(this);},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide();});}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e);}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px");},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this);},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this;}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop];},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now;}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now);}},m.easing={linear:function(a){return a;},swing:function(a){return 0.5-Math.cos(a*Math.PI)/2;}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do{h=h||".5",g/=h,m.style(c.elem,a,g+f);}while(h!==(h=c.cur()/d)&&1!==h&&--i);}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c;}]};function fc(){return setTimeout(function(){$b=void 0;}),$b=m.now();}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b){c=T[e],d["margin"+c]=d["padding"+c]=a;}return b&&(d.opacity=d.width=a),d;}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++){if(d=e[f].call(c,b,a)){return d;}}}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i();}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire();});})),1===a.nodeType&&("height" in b||"width" in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2];
+}));for(d in b){if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d]){continue;}q=!0;}o[d]=r&&r[d]||m.style(a,d);}else{j=void 0;}}if(m.isEmptyObject(o)){"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);}else{r?"hidden" in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide();}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o){m.style(a,b,o[b]);}});for(d in o){g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0));}}}function jc(a,b){var c,d,e,f,g;for(c in a){if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand" in g){f=g.expand(f),delete a[d];for(c in f){c in a||(a[c]=f[c],b[c]=e);}}else{b[d]=e;}}}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem;}),i=function(){if(e){return !1;}for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++){j.tweens[g].run(f);}return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1);},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d;},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e){return this;}for(e=!0;d>c;c++){j.tweens[c].run(1);}return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this;}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++){if(d=dc[f].call(j,a,k,j.opts)){return d;}}return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always);}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++){c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b);}},prefilter:function(a,b){b?dc.unshift(a):dc.push(a);}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue);},d;},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d);},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0);};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g);},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c);};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e){g[e]&&g[e].stop&&d(g[e]);}else{for(e in g){g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);}}for(e=f.length;e--;){f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));}(b||!c)&&m.dequeue(this,a);});},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;){f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));}for(b=0;g>b;b++){d[b]&&d[b].finish&&d[b].finish.call(this);}delete c.finish;});}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e);};}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d);};}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++){a=b[c],a()||b[c]!==a||b.splice(c--,1);}b.length||m.fx.stop(),$b=void 0;},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop();},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval));},m.fx.stop=function(){clearInterval(_b),_b=null;},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d);};});},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value;
+}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];if(arguments.length){return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+"";})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set" in b&&void 0!==b.set(this,e,"value")||(this.value=e));});}if(e){return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get" in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c);}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a));}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++){if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f){return b;}g.push(b);}}return g;},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--){if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0){try{d.selected=c=!0;}catch(h){d.scrollHeight;}}else{d.selected=!1;}}return c||(a.selectedIndex=-1),e;}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0;}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value;});});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1);},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a);});}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f){return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get" in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set" in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b));}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType){while(c=f[e++]){d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d);}}},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b;}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c;}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e;}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null;};}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void (a.defaultValue=b):mc&&mc.set(a,b,c);}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0;}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null;},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0;},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c);}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0;}};})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0;},set:function(a,b){return a.style.cssText=b+"";}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1);},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a];}catch(b){}});}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g){return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set" in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get" in e&&null!==(d=e.get(a,b))?d:a[b];}},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1;}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4);}};}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null;}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this;
+}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a)){return this.each(function(b){m(this).addClass(a.call(this,b,this.className));});}if(j){for(b=(a||"").match(E)||[];i>h;h++){if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++]){d.indexOf(" "+e+" ")<0&&(d+=e+" ");}g=m.trim(d),c.className!==g&&(c.className=g);}}}return this;},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a)){return this.each(function(b){m(this).removeClass(a.call(this,b,this.className));});}if(j){for(b=(a||"").match(E)||[];i>h;h++){if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++]){while(d.indexOf(" "+e+" ")>=0){d=d.replace(" "+e+" "," ");}}g=a?m.trim(d):"",c.className!==g&&(c.className=g);}}}return this;},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b);}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++]){e.hasClass(b)?e.removeClass(b):e.addClass(b);}}else{(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"");}});},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++){if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0){return !0;}}return !1;}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b);};}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a);},bind:function(a,b,c){return this.on(a,null,b,c);},unbind:function(a,b){return this.off(a,null,b);},delegate:function(a,b,c,d){return this.on(b,a,c,d);},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c);}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse){return a.JSON.parse(b+"");}var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"");}))?Function("return "+e)():m.error("Invalid JSON: "+b);},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b){return null;}try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b));}catch(e){c=void 0;}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c;};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href;}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href;}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c)){while(d=f[e++]){"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c);}}};}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1);}),i;}return g(b.dataTypes[0])||!e["*"]&&g("*");}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b){void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);}return c&&m.extend(!0,a,c),a;}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0]){i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));}if(e){for(g in h){if(h[g]&&h[g].test(e)){i.unshift(g);break;}}}if(i[0] in c){f=i[0];}else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break;}d||(d=g);}f=f||d;}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0;}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1]){for(g in a.converters){j[g.toLowerCase()]=a.converters[g];}}f=k.shift();while(f){if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift()){if("*"===f){f=i;}else{if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g){for(e in j){if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break;}}}if(g!==!0){if(g&&a["throws"]){b=g(b);}else{try{b=g(b);}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f};
+}}}}}}}return{state:"success",data:b};}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a);},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f)){j[b[1].toLowerCase()]=b[2];}}b=j[a.toLowerCase()];}return null==b?null:b;},getAllResponseHeaders:function(){return 2===t?f:null;},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this;},overrideMimeType:function(a){return t||(k.mimeType=a),this;},statusCode:function(a){var b;if(a){if(2>t){for(b in a){q[b]=[q[b],a[b]];}}else{v.always(a[v.status]);}}return this;},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this;}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t){return v;}h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers){v.setRequestHeader(d,k.headers[d]);}if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t)){return v.abort();}u="abort";for(d in {success:1,error:1,complete:1}){v[d](k[d]);}if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout");},k.timeout));try{t=1,i.send(r,x);}catch(w){if(!(2>t)){throw w;}x(-1,w);}}else{x(-1,"No Transport");}function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")));}return v;},getJSON:function(a,b,c){return m.get(a,b,c,"json");},getScript:function(a,b){return m.get(a,void 0,b,"script");}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d});};}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a);};}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0});},m.fn.extend({wrapAll:function(a){if(m.isFunction(a)){return this.each(function(b){m(this).wrapAll(a.call(this,b));});}if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType){a=a.firstChild;}return a;}).append(this);}return this;},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b));}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a);});},wrap:function(a){var b=m.isFunction(a);
+return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a);});},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes);}).end();}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"));},m.expr.filters.visible=function(a){return !m.expr.filters.hidden(a);};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b)){m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d);});}else{if(c||"object"!==m.type(b)){d(a,b);}else{for(e in b){Vc(a+"["+e+"]",b[e],c,d);}}}}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b);};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a)){m.each(a,function(){e(this.name,this.value);});}else{for(c in a){Vc(c,a[c],b,e);}}return d.join("&").replace(Qc,"+");},m.fn.extend({serialize:function(){return m.param(this.serializeArray());},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this;}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a));}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")};}):{name:b.name,value:c.replace(Sc,"\r\n")};}).get();}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return !this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c();}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc){Xc[a](void 0,!0);}}),k.cors=!!Yc&&"withCredentials" in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields){for(e in a.xhrFields){f[e]=a.xhrFields[e];}}a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c){void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");}f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState)){if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e){4!==f.readyState&&f.abort();}else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText;}catch(k){i="";}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404;}}j&&d(h,i,j,f.getAllResponseHeaders());},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b();},abort:function(){b&&b(void 0,!0);}};}});function Zc(){try{return new a.XMLHttpRequest;}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP");}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a;}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1);}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"));},c.insertBefore(b,c.firstChild);},abort:function(){b&&b.onload(void 0,!0);}};}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a;}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0];},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments;},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0;}),"script"):void 0;}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a){return null;}"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes));
+};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd){return bd.apply(this,arguments);}var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a);}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a]);}),this;},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem;}).length;};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1;}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using" in b?b.using.call(a,n):l.css(n);}},m.fn.extend({offset:function(a){if(arguments.length){return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b);});}var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f){return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d;}},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)};}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position")){a=a.offsetParent;}return a||cd;});}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void (f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e);},a,d,arguments.length,null);};}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0;});}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g);},b,f?d:void 0,f,null);};});}),m.fn.size=function(){return this.length;},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m;});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m;},typeof b===K&&(a.jQuery=a.$=m),m;});window["jq"]=jQuery.noConflict();"use strict";var pa0108={slv:function(b){if(!b){return"";}var a=b.replace(/\\/g,"");a=a.replace(/\/\//g,"/");a=a.replace(":/","://");return a;},nc1:function(b){var a="";try{a=$.format.date(b,oO.jq.dateFormat);}catch(c){a=b.toString();a=a.substr(0,a.indexOf("UTC"));}return a;},mlw:function(b){var a="";b=pa0108.slv(b);if(b.indexOf("/")>-1){a=b.substring(0,b.lastIndexOf("/"));}return a;},kpw:function(e,b){var a="";if(!b){b=self.location.href;}if(b.indexOf("?")>-1){b=b.substr(b.indexOf("?")+1);b=b.split("&");for(var d=0;d<b.length;d++){var c=b[d].split("=");if(c[0]&&c[1]&&c[0]==e){a=c[1];break;}}}return a;},gd3:function(b){var a=b;b=pa0108.slv(b);if(b.indexOf("/")>-1){a=b.substring(b.lastIndexOf("/")+1);}return a;},tiu:function(){var a="";if(arguments&&arguments.length>0){for(var b=0;b<arguments.length;b++){a+=($.isArray(arguments[b])?arguments[b].join("/"):arguments[b]);if(b<(arguments.length-1)){a+="/";}}a=pa0108.slv(a);}return a;},lj4:function(b){var a="";b=pa0108.gd3(b);if(b.indexOf(".")>-1){a=b.substring(b.lastIndexOf(".")+1);}return a;},snt:function(b){var a=false;$.ajax({url:b,type:"HEAD",async:false,dataType:"text",success:function(){a=true;}});return a;},zv:function(b){var a=0;$.ajax({url:b,type:"HEAD",async:false,success:function(f,c,e){a=e.getResponseHeader("Content-Length");}});if(!a){a=0;}return a;},lks:function(b){var a=pa0108.lj4(b).toLowerCase();if(a=="png"||a=="jpg"||a=="gif"||a=="jpeg"){a="image";}return a;},cer9:function(b){var a=false;if(pa0108.lks(b)=="image"){a=true;
+}return a;},jio:function(a){var b="b";if(!a){a=0;}if(a>1024){a=a/1024;b="Kb";}if(a>1024){a=a/1024;b="Mb";}a=new Number(a);return(b=="b"?a:a.toFixed(2))+" "+b;},hex0:function(b,c,a){b+=(b.indexOf("?")>-1?"&":"?")+c+"="+encodeURIComponent(a);return b;},ioe:function(d,f,b){try{var e=document.getElementById(d);if(e.createTextRange){var a=e.createTextRange();a.collapse(true);a.moveStart("character",f);a.moveEnd("character",b-f);a.select();}else{if(e.setSelectionRange){e.setSelectionRange(f,b);}else{if(e.selectionStart){e.selectionStart=f;e.selectionEnd=b;}}}e.focus();}catch(c){}},hoe:function(){$.ajax({url:"conf.json",dataType:"json",async:false,success:function(a){oO.jh=a;pa0109.va3();},error:function(a){pa0109.dex(oO.njn("E_LoadingConf"));}});},qcd:function(){var a="";if(oO.jq.lang&&oO.jq.lang.toLowerCase()=="auto"){var b=window.navigator.userLanguage||window.navigator.language;a="lang/"+b.substr(0,2)+".json";if(!pa0108.snt(a)){a="";}}else{if(oO.jq.lang){a="lang/"+oO.jq.lang.substr(0,2).toLowerCase()+".json";if(!pa0108.snt(a)){a="";}}}if(!a){a="lang/en.json";}$.ajax({url:a,dataType:"json",async:false,success:function(c){oO.jq.currentLang=oO.jq.lang;oO.jq.lang=c;},error:function(c){pa0109.dex("Error loading language file");}});},rt56:function(){pa0108.qcd();$("[data-lang-t]").each(function(){var a=$(this).attr("data-lang-t");$(this).prop("title",oO.njn(a));});$("[data-lang-v]").each(function(){var a=$(this).attr("data-lang-v");$(this).prop("value",oO.njn(a));});$("[data-lang]").each(function(){var a=$(this).attr("data-lang");$(this).html(oO.njn(a));});},oj:function(){var a=new Object();var c=document.cookie.replace(" ","");c=c.split(";");for(var b in c){var d=c[b].split("=");if(d.length>1){a[$.trim(d[0].toString())]=decodeURIComponent($.trim(d[1].toString()))||"";}}return a;},yt:function(b){var a=pa0108.oj();return a[b]||"";},cda:function(c,e,b,d){var a=new Date();if(b){a.setTime(a.getTime()+(b*3600*1000));}if(!d){d="/";}document.cookie=c+"="+encodeURIComponent(e)+"; path="+d+(b?"; expires="+a.toGMTString():"");},fm:function(b){var a=false;b=b.toString().toLowerCase();if(b=="true"||b=="on"||b=="yes"||b=="1"){a=true;}return a;},tbe:function(a){document.cookie=a+"=; expires=Thu, 01 Jan 1972 00:00:00 UTC";},nax:function(a,b){if(b){if(typeof a==="undefined"){a="/";}if(a.indexOf(b)!==0){if(b.substr(-1)=="/"){b=b.substr(0,b.length-1);}a=b+a;}}return a;},extractPrefixFromPath:function(a,b){if(b){if(typeof a==="undefined"){a="/";}if(a.indexOf(b)==0){if(b.substr(-1)=="/"){b=b.substr(0,b.length-1);}a=a.substr(b.length);}}return a;},fru:function(){var a=window.opener;if(typeof a==="undefined"||a==null){return false;}return true;},eqwe:function(){return pa0108.fru()?window.opener:window.parent;},murl:function(){var e=/(^|.*[\\\/])js\/(alphamanager|utils)\.js(?:\?.*|;.*)?$/i;var d="";if(!d){var a=document.getElementsByTagName("script");for(var c=0;c<a.length;c++){var b=a[c].src.match(e);if(b){d=b[1];break;}}}if(d.indexOf(":/")==-1&&d.slice(0,2)!="//"){if(d.indexOf("/")===0){d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;}else{d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;}}if(!d){console.log("AlphaManager: unable to detect base URL of AlphaManager. Please be sure your script name is unchanged.");d="";}return d;}};"use strict";var o0={pgg:function(){return"ckeditor";},wer:function(b){var a=pa0108.eqwe()["alphamanager_"+b];if(!a||a.length==0){if(b=="skin"){return"flat";}}return a;},gre:function(){var c=pa0108.eqwe();if(!c.CKEDITOR){return;}var a=c.CKEDITOR.currentInstance.config;if(!a){window.opener.CKEDITOR.config;}oO.jq.lang=a["language"];if(typeof a["alphamanager"]==="object"){for(var b in a["alphamanager"]){var d=a["alphamanager"][b];oO.jq[b]=d;}}},guf:function(){try{if(window.alphamanager_preselected_file!=null){var d=window.alphamanager_preselected_file;window.alphamanager_preseleted_file=null;return pa0108.extractPrefixFromPath(d,oO.jq.returnUrlPrefix);}var c=o0.wer("parentDlg");var b=c.getValueOf("info",(c.getName()=="link"?"url":"txtUrl"));return pa0108.extractPrefixFromPath(b,oO.jq.returnUrlPrefix);}catch(a){}return null;},mjw:function(a){if(!pa0108.eqwe().CKEDITOR){return;}var b=pa0108.eqwe().CKEDITOR.dialog.getCurrent().getButton("ok").domId;var c=pa0108.eqwe().document.getElementById(b);if(a){$(c).removeClass("cke-btn-disabled");}else{$(c).addClass("cke-btn-disabled");}},sep2:function(){var b=oO.gf256[0];if(!b){pa0109.dex(oO.njn("E_NoFileSelected"));return;}var a=pa0108.nax(b.fullPath,oO.jq.returnUrlPrefix);if(typeof window.alphamanager_on_file_selected=="function"){window.alphamanager_on_file_selected(a);window.alphamanager_on_file_selected=null;}else{pa0108.eqwe().CKEDITOR.tools.callFunction(o0.wer("cke_func_num"),a);}if(pa0108.fru()){self.close();}else{pa0108.eqwe().CKEDITOR.dialog.getCurrent().hide();}},tre2:function(){var a=o0.wer("onload");if(a){a(ap0109.sd());}}};"use strict";var NET={ifo:function(c,a,d,e){var b=oO.jh.RENAMEFILE;$.ajax({url:b,type:"POST",data:{f:c.fullPath,n:a,l:oO.jq.lang},dataType:"json",async:false,success:function(f){if(f.res.toLowerCase()=="ok"){d(f.msg);
+}else{e(f.msg);}},error:function(f){e(oO.njn("E_LoadingAjax")+" "+this.url);}});},glop:function(d,f,e){var b=oO.jh.DELETEFILE;var a=[];for(var c=0;c<d.length;c++){a.push({f:d[c].fullPath});}$.ajax({url:b,type:"POST",data:{fs:a,l:oO.jq.lang},dataType:"json",async:false,success:function(g){if(g.res.toLowerCase()=="ok"){f(g.msg);}else{e(g.msg);}},error:function(g){e(oO.njn("E_LoadingAjax")+" "+this.url);}});},dhg:function(b,d,c){var a=oO.jh.DELETEDIR;$.ajax({url:a,type:"POST",data:{d:b.fullPath,l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(e){if(e.res.toLowerCase()=="ok"){d(e.msg);}else{c(e.msg);}},error:function(e){c(oO.njn("E_LoadingAjax")+" "+this.url);}});},fbv:function(c,a,e,d){var b=oO.jh.CREATEDIR;$.ajax({url:b,type:"POST",data:{d:c.fullPath,n:a,l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(f){if(f.res.toLowerCase()=="ok"){e(f.msg);}else{d(f.msg);}},error:function(f){d(oO.njn("E_LoadingAjax")+" "+this.url);}});},cld:function(c,a,e,d){var b=oO.jh.RENAMEDIR;$.ajax({url:b,type:"POST",data:{d:c.fullPath,n:a,l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(f){if(f.res.toLowerCase()=="ok"){e(f.msg);}else{d(f.msg);}},error:function(f){d(oO.njn("E_LoadingAjax")+" "+this.url);}});},sde:function(c,b){var a=oO.jh.DIRLIST;$.ajax({url:a,type:"POST",data:{type:o0.wer("type"),l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(d){c(d);},error:function(){b(oO.njn("E_LoadingAjax")+" "+this.url);}});},cbn:function(b,d,c){var a=oO.jh.FILESLIST;$.ajax({url:a,type:"POST",data:{d:b.fullPath,type:o0.wer("type"),l:oO.jq.lang},dataType:"json",async:true,cache:false,success:function(e){d(e);},error:function(){c(oO.njn("E_LoadingAjax")+" "+this.url);}});},we33:function(e,d,g,f){var b=oO.jh.COPYFILE;var a=[];for(var c=0;c<e.length;c++){a.push({f:e[c].fullPath});}$.ajax({url:b,type:"POST",data:{fs:a,n:d,l:oO.jq.lang},dataType:"json",async:false,success:function(h){if(h.res.toLowerCase()=="ok"){g(h.msg);}else{f(h.msg);}},error:function(h){f(oO.njn("E_LoadingAjax")+" "+this.url);}});},kui:function(e,d,g,f){var b=oO.jh.MOVEFILE;var a=[];for(var c=0;c<e.length;c++){a.push({f:e[c].fullPath});}$.ajax({url:b,type:"POST",data:{fs:a,n:d,l:oO.jq.lang},dataType:"json",async:false,success:function(h){if(h.res.toLowerCase()=="ok"){g(h.msg);}else{f(h.msg);}},error:function(h){f(oO.njn("E_LoadingAjax")+" "+this.url);}});},qas:function(b,c,e,d){var a=oO.jh.COPYDIR;$.ajax({url:a,type:"POST",data:{d:b.fullPath,n:c,l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(f){if(f.res.toLowerCase()=="ok"){e(f.msg);}else{d(f.msg);}},error:function(f){d(oO.njn("E_LoadingAjax")+" "+this.url);}});},fdz:function(b,c,e,d){var a=oO.jh.MOVEDIR;$.ajax({url:a,type:"POST",data:{d:b.fullPath,n:c,l:oO.jq.lang},dataType:"json",async:false,cache:false,success:function(f){if(f.res.toLowerCase()=="ok"){e(f.msg);}else{d(f.msg);}},error:function(f){d(oO.njn("E_LoadingAjax")+" "+this.url);}});}};"use strict";var ap0109={hi9:function(){return 159;},mmd:function(){return 139;},cas:function(d){var c="skins/"+o0.wer("skin")+"/filetype_list/default.png";var b=d.getExtensionGroup(d.getExtensionGroup);var f="";if(b!=null){f="url(skins/"+o0.wer("skin")+"/filetype_list/"+b+".png), ";}var e="background-image: url("+d.icon+"), "+f+"url("+c+")";var a='<tr class="file" data-file-id="'+d.id+'">';a+='    <td class="file-icon'+(d.isImage?"":" icon-ext")+'" style="'+e+'"></td>';a+='    <td class="file-name">'+d.name+"</td>";a+='    <td class="file-size">'+pa0108.jio(d.size)+"</td>";a+='    <td class="file-date">'+pa0108.nc1(new Date(d.time*1000))+"</td>";a+="</tr>";return a;},mj:function(c){var f=c.bigIcon;var d="";var b=";width:"+ap0109.hi9()+"px;height:"+ap0109.mmd()+"px";if(oO.jh.GENERATETHUMB&&c.isImage){f=pa0108.hex0(oO.jh.GENERATETHUMB,"f",c.fullPath);f=pa0108.hex0(f,"width",ap0109.hi9());f=pa0108.hex0(f,"height",ap0109.mmd());}else{d="skins/"+o0.wer("skin")+"/filetype_thumb/default.png";b+=";background-position: center";}var e="background-image: url("+f+")";if(d.length>0){e+=", url("+d+")";}e+=b;var a='<div class="file" data-file-id="'+c.id+'">';a+='    <div class="file-icon'+(c.isImage?"":" icon-ext")+'" style="'+e+'"></div>';a+='    <div class="file-name">'+c.name+"</div>";a+='    <div class="file-size">'+pa0108.jio(c.size)+"</div>";a+='    <div class="file-date">'+pa0108.nc1(new Date(c.time*1000))+"</div>";a+="</div>";return a;},mac:function(b,a){if(b.isFiltered){return;}var d=ap0109.cas(b);$("#pnlViewList > tbody").append(d);var c=ap0109.mj(b);$("#pnlViewThumbs td").append(c);ap0109.attachEventsToFile(b);$("#pnlEmptyDir").hide();ap0109.fel5(a,[]);},pol:function(){$("#dirActions .scrollPane").on("contextmenu",pa0109.myi3);$("#fileActions .scrollPane").on("contextmenu",pa0109.cc4);$("#btnListView").click(function(){pa0109.xed(0);});$("#btnThumbView").click(function(){pa0109.xed(1);});$("#selectOrder").change(pa0109.ii);$("#txtSearch").keyup(pa0109.plo);$("#txtSearch").change(pa0109.plo);
+$("#txtSearch").on("paste",pa0109.plo);},attachEventsToFile:function(b){var a=ap0109.doc(b);a.click(pa0109.gio);a.dblclick(pa0109.oem7);a.contextmenu(pa0109.cc4);},sh:function(e,b,c){var a=ap0109.doc(e,0);$(a).replaceWith(ap0109.cas(b));var d=ap0109.doc(e,1);$(d).replaceWith(ap0109.mj(b));if(c){ap0109.wec(b,oO.h3);}ap0109.attachEventsToFile(b);},fel5:function(b,a){if(b==0){$("#pnlViewThumbs").hide();$("#pnlViewList").show();$("#btnListView").addClass("selected");$("#btnThumbView").removeClass("selected");}else{$("#pnlViewList").hide();$("#pnlViewThumbs").show();$("#btnThumbView").addClass("selected");$("#btnListView").removeClass("selected");}ap0109.sok(a,b);},doc:function(b,a){if(a===0||a==="0"){return $("#pnlViewList [data-file-id="+b.id+"]");}else{if(a===1||a==="1"){return $("#pnlViewThumbs [data-file-id="+b.id+"]");}else{return $("[data-file-id="+b.id+"]");}}},pf:function(){$("#pnlViewList > tbody").html("");$("#pnlViewThumbs td").html("");$("#pnlViewList").hide();$("#pnlViewThumbs").hide();$("#pnlEmptyDir").css("display","table");},tot:function(c){for(var b=0;b<c.length;b++){var a=ap0109.doc(c[b]);if(c[b].isFiltered){a.hide();}else{a.show();}}},lkg:function(c,b){var d=false;for(var a=0;a<b.length;a++){if(b[a].isFiltered){ap0109.doc(b[a]).hide();}else{ap0109.doc(b[a]).show();d=true;}}for(var a=0;a<c.length&&!d;a++){if(!c[a].isFiltered){d=true;}}if(c.length==0){$("#pnlEmptyDir").css("display","table");$("#pnlFileList").hide();$("#pnlSearchNoFiles").hide();}else{if(d){$("#pnlEmptyDir").hide();$("#pnlFileList").show();$("#pnlSearchNoFiles").hide();}else{$("#pnlEmptyDir").hide();$("#pnlFileList").hide();$("#pnlSearchNoFiles").css("display","table");}}},opu:function(){$("#pnlFiles").hide();$("#pnlLoading").addClass("visible");},ter:function(){$("#pnlDirList").show();},jjt:function(){$("#pnlLoading").removeClass("visible");$("#pnlFiles").show();},wec:function(d,a){var c=[];for(var b=0;b<d.length;b++){c.push(d[b].id);}$(".file").each(function(){if(c.indexOf(parseInt($(this).attr("data-file-id")))!==-1){$(this).addClass("selected");}else{$(this).removeClass("selected");}});ap0109.sok(d,a);},sok:function(d,c){if(d.length==1){var a=ap0109.doc(d[0],c);var b=$("#pnlFiles .scrollPane");if(a[0].offsetTop<b.scrollTop()||a[0].offsetTop+a.height()>b.scrollTop()+b.height()){b.scrollTo(a,180);}}},xxs:function(a){if(a==null){return null;}return $(a).attr("data-file-id");},hew:function(a){if(a==null){return null;}return $(a).attr("data-path");},qd:function(d,b,a){ap0109.pf();for(var c=0;c<d.length;c++){ap0109.mac(d[c],a);}ap0109.wec(b,oO.h3);},cvi:function(b){$("#pnlFiles .file").removeClass("cut");if(b.isFile&&b.isCut){for(var a=0;a<b.getFiles().length;a++){ap0109.doc(b.getFiles()[a]).addClass("cut");}}$("#pnlDirList .si_tree_item").removeClass("cut");if(!b.isFile&&b.isCut){ap0109.wvInner(b.getDir().fullPath).addClass("cut");}},nio:function(){return $("#selectOrder").val();},qer:function(){return $("#txtSearch").val();},now:function(a){switch(a){case"View":return'<div id="btnView" class="si_btns_choose si_toolbar_item">'+'<input type="button" id="btnListView" class="si_btn" value="List" data-lang-v="T_ListView"/>'+'<input type="button" id="btnThumbView" class="si_btn" value="Thumb" data-lang-v="T_ThumbsView"/>'+"</div>";case"Order":return'<div id="btnOrder" class="si_pnl_order si_toolbar_item">'+'<div class="si_pnl_order_desc">'+'<span data-lang="OrderBy" class="hintable">Order by</span>'+"</div>"+'<div class="si_pnl_order_select">'+'<select id="selectOrder">'+'<option value="name" data-lang="Name_asc">&uarr;&nbsp;&nbsp;Name</option>'+'<option value="size" data-lang="Size_asc">&uarr;&nbsp;&nbsp;Size</option>'+'<option value="time" data-lang="Date_asc">&uarr;&nbsp;&nbsp;Date</option>'+'<option value="name_desc" data-lang="Name_desc">&darr;&nbsp;&nbsp;Name</option>'+'<option value="size_desc" data-lang="Size_desc">&darr;&nbsp;&nbsp;Size</option>'+'<option value="time_desc" data-lang="Date_desc">&darr;&nbsp;&nbsp;Date</option>'+"</select>"+"</div>"+"</div>";case"Search":return'<div id="btnSearch" class="si_pnl_find si_toolbar_item">'+'<div class="si_pnl_find_desc">'+'<span data-lang="Search" class="hintable">Search</span>'+"</div>"+'<div class="si_pnl_find_box">'+'<input type="text" id="txtSearch" class="all-shortcuts" />'+"</div>"+"</div>";}},hideTitles:function(){$(".si_btn, .hintable").each(function(){var a=$(this).attr("data-lang-v");if(typeof a!==typeof undefined&&a!==false){$(this).attr("title",$(this).attr("value"));$(this).removeAttr("value");$(this).attr("data-lang-t",$(this).attr("data-lang-v"));$(this).removeAttr("data-lang-v");}else{$(this).attr("title",$(this).text());$(this).text("");$(this).attr("data-lang-t",$(this).attr("data-lang"));$(this).removeAttr("data-lang");}});},piu:function(a){$(a.target.ownerDocument.getElementById("alphamanager_preview")).hide();},vvr:function(){$("#txtSearch").trigger("blur");},lin:function(){setTimeout(function(){$("#txtSearch").trigger("focus");},1);},sd:function(){return $("#wraper").width();
+},jk:function(){$("#pnlDirList").addClass("hide-root");},on982:function(b){var a=ap0109.doc(b);a.remove();},ju:function(c,d,a){var b=ap0109.wv(c);$(b).attr("data-path",d);$(b.find(".name")[0]).text(a);},stn:function(a){var b=ap0109.wv(a.fullPath);$(b.find(".si_tree_item_count")[0]).text(a.files);},mim:function(a,e){if(!e){e=ap0109.wv(a.parent.fullPath).find("ul");}var b=ap0109.ox(a);$(e[0]).append(b);var d=ap0109.wv(a.fullPath);var c=d.find(".directory");d.click(pa0109.sub);d.contextmenu(pa0109.myi3);c.click(pa0109.sub);c.contextmenu(pa0109.myi3);ap0109.c67(a);},fix:function(b){var c=function(d){ap0109.c67(d);for(var e=0;e<d.children.length;e++){ap0109.c67(d.children[e]);}};$("#pnlDirList").html("");for(var a=0;a<b.length;a++){ap0109.mim(b[a],$("#pnlDirList"));c(b[a]);}},ox:function(a){var c='<li data-path="'+a.fullPath+'" data-dirs="'+a.dirs+'" data-files="'+a.files+'" class="directory">';c+='<div class="si_tree_item">';c+='<div class="si_tree_item_plus"></div>';c+='<div class="si_tree_item_dir"></div>';c+='<div class="name">'+a.name+"</div>";c+='<div class="si_tree_item_count">'+a.files+"</div>";c+='<div style="clear:both;"></div>';c+="</div>";c+="<ul>";for(var b=0;b<a.children.length;b++){c+=ap0109.ox(a.children[b]);}c+="</ul>";c+="</li>";return c;},wv:function(a){return $('li[data-path="'+a+'"]');},yu8:function(a){return $('li[data-path="'+a+'"] > .si_tree_item');},fr2:function(a){$(".directory").each(function(){if(a!=null&&$(this).attr("data-path")==a.fullPath){$(this).children().first().addClass("selected");}else{$(this).children().first().removeClass("selected");}});},c67:function(b){var a=ap0109.wv(b.fullPath);var c=a.children("ul");if(b.isExpanded){c.show();}else{c.hide();}if(b.children.length<1){a.children("div").children(".si_tree_item_plus").prop("class","si_tree_item_plus si_tree_item_plus_blank");}else{if(b.isExpanded){a.children("div").children(".si_tree_item_plus").prop("class","si_tree_item_plus si_tree_item_plus_minus");}else{a.children("div").children(".si_tree_item_plus").prop("class","si_tree_item_plus");}}},ghjf:function(a){ap0109.wv(a.fullPath).remove();},lip:function(){$("#pnlFiles").hide();$("#pnlDirList").addClass("disabled");$("#pnlUploadFiles").css("display","table");$("#btnAddFile").addClass("cancel");$("#btnAddFile").val(oO.njn("Cancel"));},ti3:function(){$("#pnlUploadFiles").hide();$("#pnlDirList").removeClass("disabled");$("#pnlFiles").show();$("#btnAddFile").removeClass("cancel");$("#btnAddFile").val(oO.njn("Upload"));},son:function(a){if(a){$("#dirActions").removeClass("selected");$("#fileActions").addClass("selected");}else{$("#dirActions").addClass("selected");$("#fileActions").removeClass("selected");}},vac:function(a){$("#dirActions").click(function(){a(false);});$("#fileActions").click(function(){a(true);});$($(".pnlFiles")[0]).append('<div id="copyright"><a href="http://js.plus/products/alphamanager" target="_blank">AlphaManager</a></div>');},se2:function(a){if(a){$(".pnlFiles").addClass("hc");}},gfo:function(a){return'<input type="button" class="si_btn si_toolbar_item" id="btn'+a.id_btn+'" value="'+a.text+'" data-lang-v="'+a.txt_btn+'"/>';},mas:function(a){return'<a href="#" data-lang="'+a.txt_item+'" id="mnu'+a.id_item+'">Select</a>';},pop:function(a){$("#menuDir").fadeOut(a?0:250);$("#menuFile").fadeOut(a?0:250);},tij:function(){var a=$(window).innerHeight()-$("#fileActions .actions").outerHeight();a-=$("#fileActions .actions").parent().outerHeight(true)-$("#fileActions .actions").parent().height();a-=$("#fileActions .actions").outerHeight(true)-$("#fileActions .actions").height();a-=($("#alphamanager_demo_notice").length>0)?37:0;$(".scrollPane").css("height",a+"px");},vd:function(g){var a=ap0109.imh("dir",oO.jq.dirToolbar,g);$("#dirActions .actions").html(a);var e=ap0109.sdu("dir",oO.jq.dirMenu,g);$("#menuDir").html(e);var d=ap0109.imh("file",oO.jq.fileToolbar,g);$("#fileActions .actions").html(d);var h=ap0109.sdu("file",oO.jq.fileMenu,g);$("#menuFile").html(h);for(var b in g){for(var c in g[b]){var f=g[b][c];$("#btn"+f.id_btn+", #mnu"+f.id_item).click((function(){var j=b;var i=c;return function(){pa0109.klon(j,i);};})());}}},za2:function(b,a,d){if(a=="|"){return'<div class="si_btn si_separator"></div>';}var c=d[b][a];if(typeof(c)==="undefined"){return"";}if(typeof(c.id_item)==="undefined"){return ap0109.now(c.id_btn);}else{return ap0109.gfo(c);}},ln:function(b,a,d){var c=d[b][a];if(typeof(c)==="undefined"){return"";}if(typeof(c.html)!=="undefined"){return"";}return ap0109.mas(c);},imh:function(b,a,e){var d="";for(var c in a){d+=ap0109.za2(b,a[c],e);}return d;},sdu:function(a,d,e){var c="";for(var b in d){if(d[b]=="-"){continue;}c+=ap0109.ln(a,d[b],e);}return c;},nb3:function(d){for(var b in d){for(var a in d[b]){var c=d[b][a];$("#btn"+c.id_btn+", #mnu"+c.id_item).each(function(){if(c.enabled===true){$(this).removeClass("disabled");}else{$(this).addClass("disabled");}});}}},er3:false,showTextDlg:function(g,f,d,c,b,e,a){if(!ap0109.er3){ap0109.er3=true;$("#dlgTextBtnCancel").click(e);
+}$("#dlgTextBtnOK").unbind().click(function(){if($(this).hasClass("disabled")){return;}var h=$.trim($("#dlgText input").val());c(h);});$("#dlgText .title").text(g);$("#dlgText input").val(f).unbind("change keyup paste").on("change keyup paste",function(h){b($("#dlgText input").val());});$("#dlgTextBg").show();$("#dlgText").css("display","table");$("#dlgText input")[0].setSelectionRange(0,d);$("#dlgText input").trigger("focus");if(a!==true){ap0109.jbr(false);}},jbr:function(a){if(a){$("#dlgTextBtnOK").removeClass("disabled");}else{$("#dlgTextBtnOK").addClass("disabled");}},pro:function(){$("#dlgTextBg").hide();$("#dlgText").hide();},hjr:function(){return $("#dlgTextBtnOK");},fop:false,dex:function(c,b,a){if(!ap0109.fop){ap0109.fop=true;$("#dlgAlertBtnOK").click(b);}if(a&&a===true){$("#dlgAlert .content").html(c);}else{$("#dlgAlert .content").text(c);}$("#dlgAlertBg").show();$("#dlgAlert").css("display","table");},ont:function(){$("#dlgAlertBg").hide();$("#dlgAlert").hide();},mnf:false,deb3:function(c,a,b){if(!ap0109.mnf){ap0109.mnf=true;$("#dlgConfirmBtnCancel").click(b);}$("#dlgConfirm .content").text(c);$("#dlgConfirmBtnOK").unbind().click(function(){a();b();});$("#dlgConfirmBg").show();$("#dlgConfirm").css("display","table");},ski:function(){return $("#dlgConfirmBtnOK");},ws:function(){$(document).unbind("keydown");$("#dlgConfirmBg").hide();$("#dlgConfirm").hide();},gb4:function(){return $("#dlgConfirmBtnOK");},rt3:function(b){var a=b.pageY-$("#menuDir").height();if(a<0){a=0;}$("#menuDir").css({top:a+"px",left:b.pageX+"px"}).show();},ht4:function(b){var a=b.pageY-$("#menuFile").height();if(a<0){a=0;}$("#menuFile").css({top:a+"px",left:b.pageX+"px"}).show();},few:function(b){for(var a=0;a<b.length;a++){$("body").addClass("mod_"+b[a]);}},cde:function(){$("#wraper").show();},nhk:function(){$("body > table > tbody").append("<tr><td style='border-top: 1px solid rgb(224, 198, 158);background-color: rgb(255, 238, 207)'></td><td id='alphamanager_demo_notice' style='height: 27px;background-color: rgb(255, 238, 207);vertical-align: top;padding-left: 7px;font-size: 15px;padding-top: 10px;color: rgb(117, 82, 29);border-top: 1px solid rgb(224, 198, 158)'>This is the demo copy of Alpha Manager. Please <a href='http://192.168.0.108:3000/products/alphamanager/purchase'>purchase a license</a> to use it on your website, unlock all <a href='http://js.plus/products/alphamanager/skins'>skins</a> and hide this message.</td></tr>");}};"use strict";var pa0109={io2:function(a){if(a.ctrlKey){return 1;}if(a.shiftKey){return 2;}return 0;},sub:function(a){a.stopPropagation();a.preventDefault();pa0109.mag(false);if(!oO.h1){return;}ap0109.pop(false);pa0109.hix0(this);},myi3:function(a){a.stopPropagation();a.preventDefault();pa0109.mag(false);if(!oO.h1){return;}ap0109.pop(true);pa0109.hix0(this);ap0109.rt3(a);return false;},oem7:function(a){a.stopPropagation();a.preventDefault();pa0109.mag(true);ap0109.pop(false);pa0109.vbn(this,pa0109.io2(a));pa0109.via();},gio:function(a){a.stopPropagation();a.preventDefault();pa0109.mag(true);ap0109.pop(false);pa0109.vbn(this,pa0109.io2(a));},cc4:function(a){a.stopPropagation();a.preventDefault();pa0109.mag(true);ap0109.pop(true);var b=pa0109.io2(a);if(b!=0||oO.gf256.length<2){pa0109.vbn(this,b);}ap0109.ht4(a);return false;},xed:function(a){if(oO.h3!=a){oO.h3=a;pa0108.cda("alphamanagerview",a,10);ap0109.fel5(a,oO.gf256);}},via:function(){pa0109.mag(true);var a=oO.jq.multiSelect?oO.gf256.length>0:oO.gf256.length==1;if(!a){return;}o0.sep2();},tru3:function(b,a){if(oO.sf==b){return;}oO.hmm(b,a);pa0109.her(oO.sf,oO.gf256);var c=oO.sf;while(c!=null){c.isExpanded=true;ap0109.c67(c);c=c.parent;}ap0109.fr2(oO.sf);pa0109.mnd();},hix0:function(c){var b=ap0109.hew(c);var a=oO.vx0097(b);if(a!=null){pa0109.tru3(a,true);}},vbn:function(c,d){var a=ap0109.xxs(c);var b=oO.bn(a);if(b!=null){pa0109.ceo(b,d);}},hhn:function(a){for(var b=0;b<oO.h5.length;b++){if(oO.h5[b].name==a){pa0109.ceo(oO.h5[b],0);return;}}pa0109.ceo(null,0);},ceo:function(c,f){if(oO.gf256.length==0&&c==null){return;}if(f==0||(f==2&&oO.gf1==null)){if(oO.gf256.length==1&&oO.gf256[0].id==c.id){return;}oO.kf();oO.mf(c,true);}if(f==1){if(oO.gf256.indexOf(c)===-1){oO.mf(c,true);}else{oO.vh(c);}}else{if(f==2){var e=oO.h5.indexOf(c);var d=oO.h5.indexOf(oO.gf1);if(e>d){var b=e;e=d;d=b;}for(var a=e+1;a<d;a++){oO.mf(oO.h5[a],false);}oO.mf(c,true);}}ap0109.wec(oO.gf256,oO.h3);pa0109.mnd();},ji5:function(){pa0109.mag(true);if(!oO.jh.DELETEFILE||oO.gf256.length==0){return;}var a=oO.gf256;pa0109.li5(oO.njn("Q_DeleteFile"),function(){NET.glop(a,function(d){var b=oO.gf256[0].dir;while(oO.gf256.length>0){var c=oO.gf256[0];oO.vx0098(c);c.dir.files--;ap0109.on982(c);}oO.vv();ap0109.wec(oO.gf256,oO.h3);ap0109.stn(b);pa0109.mnd();if(d){pa0109.dex(d);}},function(e){pa0109.dex(e);pa0109.her(oO.sf,[]);for(var c=oO.gf256.length;c>=0;c--){var d=false;for(var b=0;b<oO.h5.length&&!d;b++){if(oO.h5[b].id==oO.gf256[c].id){d=true;oO.gf256[c]=oO.h5[b];}}if(!d){if(oO.gf256.splice(c,1)){}}d=false;
+for(var c=0;c<a.length&&!d;c++){if(a[c].id==oO.gf1.id){d=true;oO.gf1=a[c];}}if(!d){oO.gf1=oO.h5.length>0?oO.h5[oO.h5.length-1]:null;}}});});},cu:function(){pa0109.mag(true);var a=oO.gf256[0].name;var b=pa0108.lj4(a).length;if(b>0){b++;}pa0109.hj(oO.njn("T_RenameFile"),a,a.length-b,function(c){NET.ifo(oO.gf256[0],c,function(e){var d=pa0108.tiu(oO.gf256[0].path,c);pa0109.zas(oO.gf256[0],d);if(e){pa0109.dex(e);}pa0109.mnk();},function(d){if(d){pa0109.dex(d);}});},function(c){ap0109.jbr(oO.canFileBeCreated(c,oO.sf,false));});},zas:function(e,f){var c=-1;for(var d=0;d<oO.h5.length&&c==-1;d++){if(oO.h5[d].id==e.id){c=d;}}var b=oO.gf256[0].id==e.id;var a=new oO.h8a(f,e.size,e.time,e.width,e.height,e.dir);var g=e.id;oO.h5[c]=a;ap0109.sh(e,a,b);},ii:function(){pa0109.mag(true);var a=ap0109.nio();var b=oO.sf;if(!b){return;}if(oO.nh(a)){ap0109.qd(oO.h5,oO.gf256,oO.h3);}},plo:function(d){pa0109.mag(true);d.stopPropagation();d.preventDefault();if(d.keyCode==27){ap0109.vvr();return;}var c=ap0109.qer();var e=oO.nh1(c);if(e.length>0){ap0109.lkg(oO.h5,e);var a=false;for(var b=oO.gf256.length-1;b>=0;b--){if(oO.gf256[b].isFiltered){oO.gf256.splice(b,1);a=true;}}if(a){ap0109.wec(oO.gf256,oO.h3);pa0109.mnd();}}},kl1:function(){pa0109.mag(true);oO.a002.cutFiles(oO.gf256);ap0109.cvi(oO.a002);pa0109.mnd();},ras:function(){pa0109.mag(true);oO.a002.copyFiles(oO.gf256);ap0109.cvi(oO.a002);pa0109.mnd();},gen:function(){pa0109.mag(false);oO.a002.cutDir(oO.sf);ap0109.cvi(oO.a002);pa0109.mnd();},pp6:function(){pa0109.mag(false);oO.a002.copyDir(oO.sf);ap0109.cvi(oO.a002);pa0109.mnd();},cm:function(){pa0109.mag(true);if(oO.a002.obj!=null){if(oO.a002.isFile){var a=oO.a002.getFiles();if(oO.a002.isCut){NET.kui(a,oO.sf.fullPath,function(b){pa0109.slim(a[0].dir);pa0109.her(oO.sf,a);},function(b){pa0109.dex(b);});}else{NET.we33(a,oO.sf.fullPath,function(b){pa0109.her(oO.sf,a);},function(b){pa0109.dex(b);});}}else{if(oO.a002.isCut){NET.fdz(oO.a002.getDir(),oO.sf.fullPath,function(b){pa0109.ui4();},function(b){pa0109.dex(b);});}else{NET.qas(oO.a002.getDir(),oO.sf.fullPath,function(b){pa0109.ui4();},function(b){pa0109.dex(b);});}}}oO.a002.clear();ap0109.cvi(oO.a002);},zf:function(){pa0109.cm();},jas:function(){pa0109.mag(false);var a=oO.sf;pa0109.li5(oO.njn("Q_DeleteFolder"),function(){NET.dhg(a,function(b){oO.vx0097(a);ap0109.fr2(oO.sf);ap0109.c67(oO.sf);ap0109.ghjf(a);pa0109.her(oO.sf,[]);pa0109.mnd();if(b){pa0109.dex(b);}},function(b){pa0109.dex(b);});});},min:function(){pa0109.mag(true);oO.h1=false;pa0109.ozz.updateOptions({data:{action:"upload",method:"ajax",d:oO.sf.fullPath}});oO.h7.file.upload.func=pa0109.nol;ap0109.lip();pa0109.mnd();oO.nnn3.push({"esc":pa0109.nol});},nol:function(){pa0109.mag(true);pa0109.ozz.reset();oO.h1=true;oO.h7.file.upload.func=pa0109.min;oO.nnn3.pop();ap0109.ti3();pa0109.mnd();},ffe:function(){pa0109.showDemoNotice();},j56:function(c){var a=oO.gf256[0].ext=="jpg"?"jpg":"jpeg";var b=oO.gf256[0].name.substr(0,oO.gf256[0].name.length-oO.gf256[0].ext.length-1)+"."+a;pa0109.hj(oO.njn("T_SpecifyFileNameForSaving"),b,b.length-(pa0108.lj4(b).length+1),function(f){var d=function(k,i,j){var h=pa0108.lj4(i);if(h.length==0){i+="."+a;}NET.unt(k,oO.sf,i,j,function(l){if(l){pa0109.dex(l);}oO.aa7.close();pa0109.mnk();pa0109.her(oO.sf,oO.gf256,[i]);},function(l){if(l){pa0109.dex(l);}});};var g=false;for(var e=0;e<oO.h5.length&&!g;e++){if(oO.h5[e].name==f){g=true;}}if(!g){d(c,f,false);}else{pa0109.li5(oO.njn("FileExistsOverwrite"),function(){d(c,f,true);});}},function(d){ap0109.jbr(oO.canFileBeCreated(d,oO.sf,true));},true);},j57:function(){var c=oO.gf256[0];if(c&&c.IsImage()){if(oO.jq.imageEditor.useBase64){var b=c.url;var a=new Image();a.crossOrigin="Anonymous";a.onload=function(){oO.aa7.launch({image:this});};a.src=b;}else{oO.aa7.launch({url:c.fullPath});}}},de4:function(){pa0109.mag(true);var a=oO.gf256[0];if(a&&a.IsImage()){ap0109.smo(a,pa0109.jip);oO.nnn3.push({"esc":pa0109.jip});}},jip:function(a){pa0109.mag(true);ap0109.piu(a);oO.nnn3.pop();},su7:function(){pa0109.showDemoNotice();},ol:function(){pa0109.mag(false);pa0109.hj(oO.njn("T_CreateDir"),"",0,function(a){NET.fbv(oO.sf,a,function(c){var b=oO.ui(oO.sf,a);ap0109.mim(b);if(c){pa0109.dex(c);}pa0109.mnk();},function(b){if(b){pa0109.dex(b);}});},function(a){ap0109.jbr(a!=""&&a!="."&&a!=".."&&a.indexOf("/")==-1);});},hu:function(){pa0109.mag(false);var a=oO.sf.name;pa0109.hj(oO.njn("T_RenameDir"),a,a.length,function(b){NET.cld(oO.sf,b,function(d){var c=oO.sf.fullPath;oO.ju(oO.sf,b);oO.saveLastDir(oO.sf.fullPath);ap0109.vau(c,oO.sf.fullPath,oO.sf.name);pa0109.mnk();pa0109.mnd();},function(c){if(c){pa0109.dex(c);}});},function(b){ap0109.jbr(a!=b&&b!=""&&b!="."&&b!=".."&&b.indexOf("/")==-1);});},erc:function(q,p,k,h){if(!k){k=1;}if(h==1){h=2;}pa0109.mag(true);var o=oO.gf1;for(var n=0;n<k;n++){var l=-1;if(oO.gf1!=null){for(var g=0;g<oO.h5.length&&l==-1;g++){if(oO.h5[g]==oO.gf1){l=g;}}}if(oO.gf1==null){for(var g=0;g<oO.h5.length&&oO.gf1==null;g++){if(!oO.h5[g].isFiltered){o=oO.h5[g];
+}}}else{if(((q!=0)&&oO.h3==1)||((p!=0)&&oO.h3==0)){var a=false;var m=q!=0?q:p;while(!a){if(l+m>-1&&l+m<oO.h5.length){var j=oO.h5[l+m];if(!j.isFiltered){o=j;a=true;}else{m=m>0?m+1:m-1;}}else{a=true;}}}else{if((p!=0)&&oO.h3==1){var a=false;var b=ap0109.doc(oO.h5[l],1).offset();while(!a){l+=p;if(l<0||l>=oO.h5.length){a=true;}else{var j=oO.h5[l];if(!j.isFiltered){var e=ap0109.doc(j,oO.h3).offset();if(b.left==e.left&&((b.top<e.top&&p==1)||(b.top>e.top&&p==-1))){o=j;a=true;}}}}}}}}pa0109.ceo(o,h);ap0109.sok([o],oO.h3);},typ:function(b,a){pa0109.mag(false);var d=oO.sf;if(b==-1){var f=d.parent;if(f!=null&&!f.isFiltered){pa0109.tru3(f);}}else{if(b==1){if(d.children.length>0){pa0109.tru3(d.children[0]);}}else{if(a==-1||a==1){var f=d.parent;var c=-1;for(var e=0;e<f.children.length&&c==-1;e++){if(f.children[e]==d){c=e;}}c+=a;if(c>=0&&c<f.children.length){pa0109.tru3(f.children[c]);}}}}pa0109.mnd();},mag:function(a){if(a){var d=0;for(var c=0;c<oO.h5.length&&d==0;c++){if(!oO.h5[c].isFiltered){d=1;}}if(d==0){return;}}oO.gf=a;if(a&&oO.gf256.length==0){var b=null;for(var c=0;c<oO.h5.length&&b==null;c++){if(!oO.h5[c].isFiltered){b=oO.h5[c];}}oO.mf(b,true);ap0109.wec(oO.gf256,oO.h3);pa0109.mnd();}ap0109.son(a);},ric:function(){ap0109.vac(pa0109.mag);if(!oO.jq.showRootDir){ap0109.jk();}var a=o0.wer("skinMod");if(a!=null){a=a.split(",");if(a.length>1||(a.length==1&&a[0].length>0)){ap0109.few(a);}}},ui4:function(a){ap0109.opu();NET.sde(function(e){var c=[];for(var b=0;b<e.length;b++){var f=new oO.h9(e[b].p,e[b].d,e[b].f);c.push(f);}var g=oO.vx0099(c);ap0109.fix(oO.h6);pa0109.tru3(g,false);if(pa0109.gm){pa0109.gm();}},function(b){ap0109.ter();pa0109.dex(b);});},showDemoNotice:function(){pa0109.dex("This feature is available only in Alpha Manager <b>Premium</b> version<br/>"+"Read more on Alpha Manager website:<br/><br/><a target='_blank' href='http://js.plus/products/alphamanager/premium'>js.plus/products/alphamanager/premium</a>",true);},jja:function(){pa0109.showDemoNotice();},slim:function(a){NET.cbn(a,function(b){a.files=b.length;ap0109.stn(a);},function(b){pa0109.dex(b);});},her:function(c,b,a){oO.h5=[];oO.kf();ap0109.pf();ap0109.opu();if(!oO.jh.FILESLIST){pa0109.dex(oO.njn("E_ActionDisabled"));return;}var d=[];NET.cbn(c,function(l){for(var h=0;h<l.length;h++){d.push(new oO.h8a(l[h].p,l[h].s,l[h].t,l[h].w,l[h].h,c));}ap0109.pf();oO.h5=d;var k=false;if(a){for(var h=0;h<a.length;h++){for(var e=0;e<oO.h5.length;e++){if(oO.h5[e].name==a[h]){oO.mf(oO.h5[e],true);k=true;}}}}if(!k){for(var h=0;h<b.length;h++){for(var e=0;e<oO.h5.length;e++){if(oO.h5[e].name==b[h].name){oO.mf(oO.h5[e],true);}}}}oO.nh(oO.h2);oO.nh1(oO.h4);for(var h=0;h<d.length;h++){var m=d[h];ap0109.mac(m,oO.h3);}ap0109.jjt();ap0109.cvi(oO.a002);c.files=oO.h5.length;ap0109.stn(c);ap0109.wec(oO.gf256,oO.h3);pa0109.mnd();var n=o0.guf();var g=pa0108.mlw(n);if(c.fullPath==g){if(pa0109.lp){pa0109.lp();}}},function(e){pa0109.dex(e);});return d;},vey:function(){var g={};var b={"file":{},"dir":{}};var f=["dir","file"];for(var h in f){var j=f[h];for(var c in oO.h7[j]){var d=oO.h7[j][c];var l=d.keys;if(l){for(var e=0;e<l.length;e++){b[j][l[e]]=(function(){var i=d;return function(){if(i.enabled===true){i.func();}};})();}}else{if(d.shortcut){b[j][d.shortcut[0]]=(function(){var m=d.shortcut[1];var i=d;return function(){if(i.enabled===true){m();}};})();}}}}for(var c in b.dir){var a=b.dir[c];var k=b.file[c];if(k){g[c]=(function(){var m=k;var i=a;return function(){if(oO.gf){m();}else{i();}};})();delete b.file[c];}else{g[c]=b.dir[c];}}for(var c in b.file){g[c]=b.file[c];}g["down"]=function(i){if(oO.gf){pa0109.erc(0,1,1,pa0109.io2(i));}else{pa0109.typ(0,1);}};g["ctrl+down"]=g["down"];g["shift+down"]=g["down"];g["up"]=function(i){if(oO.gf){pa0109.erc(0,-1,1,pa0109.io2(i));}else{pa0109.typ(0,-1);}};g["ctrl+up"]=g["up"];g["shift+up"]=g["up"];g["pageup"]=function(m){if(oO.gf){var i=oO.h3==0?10:3;pa0109.erc(0,-1,i,pa0109.io2(m));}};g["pagedown"]=function(m){if(oO.gf){var i=oO.h3==0?10:3;pa0109.erc(0,1,i,pa0109.io2(m));}};g["ctrl+pagedown"]=g["pagedown"];g["shift+pagedown"]=g["pagedown"];g["left"]=function(i){if(oO.gf){pa0109.erc(-1,0,1,pa0109.io2(i));}else{pa0109.typ(-1,0);}};g["ctrl+left"]=g["left"];g["shift+left"]=g["left"];g["right"]=function(i){if(oO.gf){pa0109.erc(1,0,1,pa0109.io2(i));}else{pa0109.typ(1,0);}};g["ctrl+rigth"]=g["right"];g["shift+right"]=g["right"];g["tab"]=function(){pa0109.mag(!oO.gf);};return g;},klon:function(a,b){var b=oO.h7[a][b];if(b.enabled===false){return;}if(b&&b.func){b.func();}},mnd:function(){oO.g67();ap0109.nb3(oO.h7);o0.mjw(oO.gf256.length==1);},hj:function(f,e,d,c,b,a){ap0109.showTextDlg(f,e,d,c,b,pa0109.mnk,a);oO.nnn3.push({"esc":function(){pa0109.mnk();},"enter":function(){ap0109.hjr().trigger("click");}});},mnk:function(){ap0109.pro();oO.nnn3.pop();},dex:function(b,a){ap0109.ky5(b,pa0109.ont,a&&a===true);oO.nnn3.push({"esc":function(){pa0109.ont();},"enter":function(){pa0109.ont();}});},ont:function(){ap0109.mla();oO.nnn3.pop();},li5:function(b,a){ap0109.deb3(b,a,pa0109.fer8);
+oO.nnn3.push({"esc":function(){pa0109.fer8();},"enter":function(){ap0109.ski().trigger("click");}});},fer8:function(){ap0109.ws();oO.nnn3.pop();},ozz:null,va3:function(){var a={uploadUrl:oO.jh.UPLOAD,key:"files[]",data:{action:"upload",method:"ajax"},onFileAdded:function(c,b){},onUploadProgress:function(f,b,d,c,e){},onUploadCompleted:function(f,d,b,e){if(e.target&&e.target.responseText){var c=e.target.responseText;if(c.msg){pa0109.dex(c.msg);}}},onFinished:function(c,b){if(b){pa0109.nol();pa0109.her(oO.sf,oO.gf256);ap0109.c67(oO.sf);pa0109.mnd();pa0109.ozz.reset();pa0109.mnd();}else{pa0109.ozz.disableCancel();}},onFormatSize:function(b){return pa0108.jio(b);},onAlert:function(b){pa0109.dex(b);},onIsUploadSuccessfull:function(c){if(c.error){return c.msg;}if(!c.target||c.target.status!=200){return oO.njn("E_LoadingAjax");}try{var b=JSON.parse(c.target.responseText);if(b&&b.res&&b.res=="ok"){return true;}if(b&&b.res&&b.res=="error"){return b.msg;}return oO.njn("E_LoadingAjax");}catch(d){return false;}}};pa0109.ozz=AlphaUploader.init("pnlUploadFiles",a);},vn:function(){var a=o0.guf();pa0109.lp=null;pa0109.hhn(pa0108.gd3(a));},kj:function(){pa0109.gm=null;pa0109.lp=pa0109.vn;var b=o0.guf();var a=oO.vx0097(pa0108.mlw(b));pa0109.tru3(a);},lol:function(){pa0109.gm=null;var b=oO.gj();if(b!=null||b.length>0){var a=oO.vx0097(b);pa0109.tru3(a);}},gm:null,lp:null,fac3:function(){o0.gre();$.ajaxSetup({cache:false});pa0109.ric();pa0108.hoe();ap0109.vd(oO.h7);if(oO.jq["hideTitles"]===true){ap0109.hideTitles();}ap0109.se2(oO.hideCopyright);var e=false;if(e){ap0109.nhk();}ap0109.pol();oO.nnn3.push(pa0109.vey());pa0109.mnd();var b=o0.guf();if(b!=null&&b.length>0){pa0109.gm=pa0109.kj;}else{if(pa0108.fm(oO.jq.openLastDir)){pa0109.gm=pa0109.lol;}}var c=new oO.h9();pa0109.ui4();ap0109.cde();window.resizeTo(ap0109.sd(),oO.jq.height);pa0108.rt56();$("body").click(function(){ap0109.pop();});var a=pa0108.yt("alphamanagerview");if(!a){a=oO.jq.DEFAULTVIEW;}if(a){pa0109.xed(a);}ap0109.tij();$(window).resize(ap0109.tij);o0.tre2();document.oncontextmenu=function(){return false;};}};window["jq"]=jQuery;window["$"]=jQuery;$(function(){var a=false;if(!a||location.hostname==atob("anMucGx1cw==")||location.hostname==atob("anMubmV3")||location.hostname==atob("ZG9rc29mdC5jb20=")){pa0109.fac3();}else{pa0109.ric();pa0109.dex(atob("VGhpcyBpcyB0aGUgZGVtbyBjb3B5IG9mIEFscGhhIE1hbmFnZXIuIFBsZWFzZSBwdXJjaGFzZSBpdCBvbiBodHRwOi8vanMucGx1cw=="));}});var skin=o0.wer("skin");var link=document.createElement("link");link.href="skins/"+skin+"/skin.css";link.type="text/css";link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link);window["setFile"]=pa0109.via;"use strict";var oO={extentions:{"avi":["webm","mkv","vob","ogv","drc","gifv","mng","mov","qt","wmv","yuv","rmvb","asf","mp4","m4p","m4v","mpg","mp2","mpeg","mpe","mpv","m2v","3gp","xmf","roq","nsv"],"doc":["docx","odf","rtf","abw","ami","cwk","docm","dot","dotx","epub","gdoc","mcw","odm","odt","ott","omm","pages","rpt","sdw","stw","sxw","tex","uof","wdp","wri","wpd","wps","sgl","vor","uot","jtd","jtt","hwp","602","pdb","psw"],"xls":["csv","xlsx","xlsm","xltx","xltm","xlsb","xlam","xlw","xlm","wk1","wks","123","dif","sdc","dbf","slk","uos","uof","pxl","wb2"],"ppt":["pptx","pptm","potx","potm","ppam","ppsx","ppsm","sldx","sldm","pps","pot","sda","sdb","sdp","cgm"],"flv":["fla","swf","swt","swc"],"mp3":["ogg","wav","wma","aac","flac","aa","ac3","adx","ahx","aiff","ape","asf","au","aud","dmf","dts","midi","mod","mp1","mpc","ra","tta","voc","vox","vqf","xm","wv","ofr","m4a","pac","la","tak"],"png":["bmp","gif","jpg","jpeg","tif","tiff","svg"],"psd":["ai","cdr","odg"],"txt":["nfo","info","log","srt","asc","sub","lst","text","ascii","notes","ans"],"conf":["ini","cnf","htaccess","manifest","reg"],"script":["js","php","pl","cpp","rb","asp","bas","tt","java","cmd","sh","bash","c","h","py","cfm","cfc"],"html":["htm","html5","uhtml","xhtm"],"xml":["xml","yml","xsl","xslt"],"css":["sass","less"],"key":["crt","pgp"],"lnk":["url"],"sql":["db"],"zip":["tar","gzip","gz","bzip","bz","rar"]},jh:{},jq:{"returnUrlPrefix":pa0108.murl()+"uploads/","lang":"auto","currentLang":"en","dateFormat":"dd/MM/yyyy HH:mm","openLastDir":"yes","hideCopyright":false,"height":650,"hideTitles":false,dirToolbar:["create","rename","download"],dirMenu:["download","paste","cut","copy","create","rename","del"],fileToolbar:["upload","|","preview","edit","download","del","view","order","search"],fileMenu:["select","-","preview","edit","download","-","paste","cut","copy","-","rename","del"],showRootDir:false,multiSelect:false,externalPreview:true},gf:false,gf1:null,gf256:[],sf:null,q1:null,a002:{isFile:false,isCut:false,obj:null,clear:function(){this.obj=null;this.isFile=false;},cutFiles:function(a){this.isFile=true;this.isCut=true;this.obj=a;},copyFiles:function(a){this.isFile=true;this.isCut=false;this.obj=a;},cutDir:function(a){this.isFile=false;this.isCut=true;this.obj=a;},copyDir:function(a){this.isFile=false;this.isCut=false;
+this.obj=a;},getFiles:function(){return this.isFile?this.obj:[];},getDir:function(){return !this.isFile?this.obj:null;}},h1:true,h2:"name",h3:0,h4:"",h5:[],h6:[],h7:{dir:{download:{id_btn:"DownloadDir",id_item:"DownloadDir",text:"Download",txt_btn:"DownloadFile",txt_item:"DownloadFile",func:pa0109.su7,keys:["ctrl+d"]},create:{id_btn:"AddDir",id_item:"CreateDir",text:"Create",txt_btn:"CreateDir",txt_item:"CreateDir",func:pa0109.ol,keys:["f7"]},paste:{id_btn:"DirPaste",id_item:"DirPaste",text:"Paste",txt_btn:"Paste",txt_item:"Paste",func:pa0109.zf,keys:["ctrl+v","shift+ins"]},cut:{id_btn:"DirCut",id_item:"DirCut",text:"Cut",txt_btn:"Cut",txt_item:"Cut",func:pa0109.gen,keys:["ctrl+x"]},copy:{id_btn:"DirCopy",id_item:"DirCopy",text:"Copy",txt_btn:"Copy",txt_item:"Copy",func:pa0109.pp6,keys:["ctrl+c","ctrl+ins"]},rename:{id_btn:"RenameDir",id_item:"RenameDir",text:"Rename",txt_btn:"RenameDir",txt_item:"RenameDir",func:pa0109.hu,keys:["f2"]},del:{id_btn:"DeleteDir",id_item:"DeleteDir",text:"Delete",txt_btn:"DeleteDir",txt_item:"DeleteDir",func:pa0109.jas,keys:["del"]}},file:{select:{id_btn:"SelectFile",id_item:"SelectFile",text:"Select",txt_btn:"SelectFile",txt_item:"SelectFile",func:pa0109.via,keys:["enter"]},upload:{id_btn:"AddFile",id_item:"AddFile",text:"Upload",txt_btn:"AddFile",txt_item:"Upload",func:pa0109.min,keys:["ctrl+u"]},preview:{id_btn:"PreviewFile",id_item:"Preview",text:"Preview",txt_btn:"Preview",txt_item:"Preview",func:pa0109.de4,keys:["ctrl+e"]},edit:{id_btn:"EditFile",id_item:"Edit",text:"Edit",txt_btn:"Edit",txt_item:"Edit",func:pa0109.ffe,keys:["f4"]},download:{id_btn:"DownloadFile",id_item:"Download",text:"Download",txt_btn:"DownloadFile",txt_item:"DownloadFile",func:pa0109.jja,keys:["ctrl+d"]},paste:{id_btn:"PasteFile",id_item:"FilePaste",text:"Paste",txt_btn:"Paste",txt_item:"Paste",func:pa0109.cm,keys:["ctrl+v","shift+ins"]},cut:{id_btn:"CutFile",id_item:"FileCut",text:"Cut",txt_btn:"Cut",txt_item:"Cut",func:pa0109.kl1,keys:["ctrl+x"]},copy:{id_btn:"CopyFile",id_item:"FileCopy",text:"Copy",txt_btn:"Copy",txt_item:"Copy",func:pa0109.ras,keys:["ctrl+c","ctrl+ins"]},rename:{id_btn:"RenameFile",id_item:"RenameFile",text:"Rename",txt_btn:"RenameFile",txt_item:"RenameFile",func:pa0109.cu,keys:["f2"]},del:{id_btn:"DeleteFile",id_item:"DeleteFile",text:"Delete",txt_btn:"DeleteFile",txt_item:"DeleteFile",func:pa0109.ji5,keys:["del"]},view:{id_btn:"View"},order:{id_btn:"Order"},search:{id_btn:"Search",shortcut:["ctrl+f",ap0109.lin]}}},h8:0,h8a:function(e,a,c,b,f,d){this.id=(oO.h8++);this.fullPath=e;this.type=pa0108.lks(e);this.name=pa0108.gd3(e);this.ext=pa0108.lj4(e);this.path=pa0108.mlw(e);this.icon="skins/"+o0.wer("skin")+"/filetype_list/"+this.ext+".png";this.bigIcon="skins/"+o0.wer("skin")+"/filetype_thumb/"+this.ext+".png";this.image=e;this.size=(a?a:pa0108.zv(e));this.time=c;this.width=(b?b:0);this.height=(f?f:0);this.dir=d;this.url=oO.jq.returnUrlPrefix+this.fullPath;this.isFiltered=false;this.isImage=pa0108.lks(this.fullPath)=="image";this.getUrl=function(){},this.IsImage=function(){var g=false;if(this.type=="image"){g=true;}return g;};this.getExtensionGroup=function(){for(var j in oO.extentions){var h=oO.extentions[j];for(var g=0;g<h.length;g++){if(h[g]==this.ext.toLowerCase()){return j;}}}return null;};},h9:function(c,b,a){if(!c){c="";}this.fullPath=c;this.name=pa0108.gd3(c);if(!this.name){this.name="My files";}this.path=pa0108.mlw(c);this.dirs=b?b:0;this.files=a?a:0;this.parent=null;this.children=[];this.isRoot=false;this.isExpanded=false;this.isFiltered=false;this.addDir=function(d){this.children.push(d);this.dirs++;d.parent=this;},this.removeDir=function(d){this.children.splice(this.children.indexOf(d),1);this.dirs--;};},canFileBeCreated:function(b,d,a){if(b.length==""||b=="."||b==".."||b.indexOf("/")>-1){return false;}var f=d.children;for(var e=0;e<d.dirs.length;e++){if(d.dirs[e].name==b){return false;}}if(!a){for(var e=0;e<d.files.length;e++){if(d.files[e].name==b){return false;}}}return true;},mf:function(b,c){for(var a=0;a<oO.gf256.length;a++){if(b.id==oO.gf256[a].id){return;}}oO.gf256.push(b);if(c){oO.gf1=b;}},vh:function(b){var a=oO.gf256.indexOf(b);if(a!==-1){oO.gf256.splice(a,1);if(oO.gf1==b){oO.gf1=oO.gf256.length>0?oO.gf256[oO.gf256.length-1]:null;}}},kf:function(){oO.gf256=[];oO.gf1=null;},dpkg:function(){for(var a=0;a<oO.h5.length;a++){if(!oO.h5[a].isFiltered){return oO.h5[a];}}return null;},vv:function(){oO.kf();var a=oO.dpkg();if(a!=null){oO.mf(a,true);}},g67:function(){var b=oO.gf256.length>0;var e=oO.gf256.length==1;var c=e&&oO.gf256[0].isImage;var a=oO.a002.obj!=null;if(a&&!oO.a002.isFile){if(oO.sf.fullPath.indexOf(oO.a002.getDir().fullPath)===0){a=false;}}oO.h7.file.select.enabled=oO.h1&&(oO.jq.multiSelect?b:e);oO.h7.file.upload.enabled=oO.jh.UPLOAD!="";oO.h7.file.preview.enabled=oO.h1&&e&&c;oO.h7.file.edit.enabled=oO.h1&&e&&c;oO.h7.file.download.enabled=oO.jh.DOWNLOAD!=""&&oO.h1&&b;oO.h7.file.paste.enabled=(oO.jh.COPYFILE!=""||oO.jh.MOVEFILE!="")&&oO.h1&&a;oO.h7.file.cut.enabled=oO.jh.MOVEFILE!=""&&oO.h1&&b;
+oO.h7.file.copy.enabled=oO.jh.COPYFILE!=""&&oO.h1&&b;oO.h7.file.rename.enabled=oO.jh.RENAMEFILE!=""&&oO.h1&&e;oO.h7.file.del.enabled=oO.jh.DELETEFILE!=""&&oO.h1&&b;oO.h7.file.order.enabled=oO.h1;oO.h7.file.search.enabled=oO.h1;oO.h7.file.view.enabled=oO.h1;var d=oO.sf==null?true:oO.sf.isRoot;oO.h7.dir.download.enabled=oO.jh.DOWNLOADDIR!=""&&oO.h1;oO.h7.dir.create.enabled=oO.jh.CREATEDIR!=""&&oO.h1;oO.h7.dir.paste.enabled=(oO.jh.COPYDIR!=""||oO.jh.MOVEDIR!="")&&oO.h1&&a;oO.h7.dir.cut.enabled=oO.jh.MOVEDIR!=""&&oO.h1&&!d;oO.h7.dir.copy.enabled=oO.jh.COPYDIR!=""&&oO.h1&&true;oO.h7.dir.rename.enabled=oO.jh.RENAMEDIR!=""&&oO.h1&&!d;oO.h7.dir.del.enabled=oO.jh.DELETEDIR!=""&&oO.h1&&!d;},bn:function(b){for(var a=0;a<oO.h5.length;a++){if(oO.h5[a].id==b){return oO.h5[a];}}return null;},bm:function(b,a){b.sort(function(e,d){var c=(a=="desc"?0:2);e=e.name.toLowerCase();d=d.name.toLowerCase();if(e>d){return -1+c;}else{if(e<d){return 1-c;}else{return 0;}}});return b;},j5:function(b,a){b.sort(function(e,d){var c=(a=="desc"?0:2);e=parseInt(e.size);d=parseInt(d.size);if(e>d){return -1+c;}else{if(e<d){return 1-c;}else{return 0;}}});return b;},m445:function(b,a){b.sort(function(e,d){var c=(a=="desc"?0:2);e=parseInt(e.time);d=parseInt(d.time);if(e>d){return -1+c;}else{if(e<d){return 1-c;}else{return 0;}}});return b;},nh:function(a){var b=[];for(var c=0;c<oO.h5.length;c++){b.push(oO.h5[c]);}oO.h2=a;switch(a){case"size":oO.h5=oO.j5(oO.h5,"asc");break;case"size_desc":oO.h5=oO.j5(oO.h5,"desc");break;case"time":oO.h5=oO.m445(oO.h5,"asc");break;case"time_desc":oO.h5=oO.m445(oO.h5,"desc");break;case"name_desc":oO.h5=oO.bm(oO.h5,"desc");break;default:oO.h5=oO.bm(oO.h5,"asc");}for(var c=0;c<b.length;c++){if(b[c].id!=oO.h5[c].id){return true;}}return false;},nh1:function(a){oO.h4=a;var d=[];for(var c=0;c<oO.h5.length;c++){var e=oO.h5[c];var b=false;if(a.length>0){b=e.name.indexOf(a)==-1;}if(e.isFiltered!=b){e.isFiltered=b;d.push(e);}}return d;},vx0098:function(b){var a=oO.h5.indexOf(b);if(a!==-1){oO.h5.splice(a,1);}a=oO.gf256.indexOf(b);if(a!==-1){oO.gf256.splice(a,1);}if(oO.gf1==b){oO.gf1=null;}},vx0099:function(f){oO.h6=[];var b=function(h,k){for(var j=0;j<k.length;j++){if(k[j].fullPath==h){return k[j];}}return null;};for(var d=0;d<f.length;d++){var c=f[d];if(d==0){c.isRoot=true;oO.h6.push(c);}else{var g=b(c.path,f);g.addDir(c);}}var a=null;if(oO.sf==null){a=oO.h6[0];}if(a==null){var e=function(k,j){for(var h=0;h<k.length;h++){if(k[h].fullPath==j){return k[h];}var l=e(k[h].children,j);if(l!=null){return l;}}};a=e(oO.h6,oO.sf);}return a;},vx0097:function(b){function a(c,g){for(var e=0;e<g.length;e++){var h=g[e];if(h.fullPath==c){return h;}else{var f=a(c,h.children);if(f!=null){return f;}}}return null;}if(oO.h6[0].fullPath==b){return oO.h6[0];}return a(b,oO.h6);},vx0096:function(a){if(a.parent==null){oO.h6.splice(oO.h6.indexOf(a),1);}else{a.parent.removeDir(a);}oO.sf=oO.sf.parent;oO.ke1();},ke:function(){if(!oO.po0(oO.sf)){oO.hmm(null);}},ke1:function(){var a;if(oO.a002.isFile){a=oO.a002.obj[0].dir;}else{a=oO.a002.obj;}if(!oO.po0(a)){oO.a002.clear();}},po0:function(a){var b=function(c){for(var d=0;d<c.length;d++){if(c[d]==a){return true;}if(b(c[d].children)){return true;}}return false;};return b(oO.h6);},hmm:function(b,a){if(b==null){b=oO.h6[0];if(b.parent!=null){b=b.parent;}}oO.sf=b;if(b!=null&&(typeof a=="undefined"||a===true)){oO.saveLastDir(b.fullPath);}},saveLastDir:function(a){pa0108.cda("alphamanager_last_dir",a,99999);},gj:function(){return pa0108.yt("alphamanager_last_dir");},ui:function(b,a){var c=new oO.h9(b.fullPath+"/"+a,0,0);c.parent=b;b.addDir(c);return c;},ju:function(b,a){b.name=a;b.fullPath=b.path+"/"+b.name;oO.ke1();},nnn3:{keys:[],push:function(b){var a={map:b,init:function(){window["Mousetrap"].reset();for(var c in this.map){window["Mousetrap"].bind(c,this.map[c]);}}};oO.nnn3.keys.push(a);a.init();},pop:function(a){oO.nnn3.keys.pop();if(oO.nnn3.keys.length>0){oO.nnn3.keys[oO.nnn3.keys.length-1].init();}}},njn:function(a){var b=a;if(oO.jq.lang&&oO.jq.lang[a]){b=oO.jq.lang[a];}return b;}};"use strict";(function(j,m,e){var b={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"};var h={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"};var v={"~":"`","!":"1","@":"2","#":"3","$":"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0","_":"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"};var p={"option":"alt","command":"meta","return":"enter","escape":"esc","plus":"+","mod":/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"};var w;for(var r=1;r<20;++r){b[111+r]="f"+r;}for(r=0;r<=9;++r){b[r+96]=r;}function s(i,x,y){if(i.addEventListener){i.addEventListener(x,y,false);return;}i.attachEvent("on"+x,y);}function u(x){if(x.type=="keypress"){var i=String.fromCharCode(x.which);
+if(!x.shiftKey){i=i.toLowerCase();}return i;}if(b[x.which]){return b[x.which];}if(h[x.which]){return h[x.which];}return String.fromCharCode(x.which).toLowerCase();}function k(x,i){return x.sort().join(",")===i.sort().join(",");}function f(x){var i=[];if(x.shiftKey){i.push("shift");}if(x.altKey){i.push("alt");}if(x.ctrlKey){i.push("ctrl");}if(x.metaKey){i.push("meta");}return i;}function l(i){if(i.preventDefault){i.preventDefault();return;}i.returnValue=false;}function t(i){if(i.stopPropagation){i.stopPropagation();return;}i.cancelBubble=true;}function o(i){return i=="shift"||i=="ctrl"||i=="alt"||i=="meta";}function d(){if(!w){w={};for(var i in b){if(i>95&&i<112){continue;}if(b.hasOwnProperty(i)){w[b[i]]=i;}}}return w;}function n(x,i,y){if(!y){y=d()[x]?"keydown":"keypress";}if(y=="keypress"&&i.length){y="keydown";}return y;}function c(i){if(i==="+"){return["+"];}i=i.replace(/\+{2}/g,"+plus");return i.split("+");}function q(A,C){var B;var z;var y;var x=[];B=c(A);for(y=0;y<B.length;++y){z=B[y];if(p[z]){z=p[z];}if(C&&C!="keypress"&&v[z]){z=v[z];x.push("shift");}if(o(z)){x.push(z);}}C=n(z,x,C);return{key:z,modifiers:x,action:C};}function a(x,i){if(x===m){return false;}if(x===i){return true;}return a(x.parentNode,i);}function g(G){var J=this;G=G||m;if(!(J instanceof g)){return new g(G);}J.target=G;J._callbacks={};J._directMap={};var B={};var A;var x=false;var z=false;var E=false;function H(K){K=K||{};var M=false,L;for(L in B){if(K[L]){M=true;continue;}B[L]=0;}if(!M){E=false;}}function D(P,T,Q,V,R,K){var N;var U;var O=[];var L=Q.type;if(!J._callbacks[P]){return[];}if(L=="keyup"&&o(P)){T=[P];}for(N=0;N<J._callbacks[P].length;++N){U=J._callbacks[P][N];if(!V&&U.seq&&B[U.seq]!=U.level){continue;}if(L!=U.action){continue;}if((L=="keypress"&&!Q.metaKey&&!Q.ctrlKey)||k(T,U.modifiers)){var S=!V&&U.combo==R;var M=V&&U.seq==V&&U.level==K;if(S||M){J._callbacks[P].splice(N,1);}O.push(U);}}return O;}function i(N,L,K,M){if(J.stopCallback(L,L.target||L.srcElement,K,M)){return;}if(N(L,K)===false){l(L);t(L);}}J._handleKey=function(O,R,P){var Q=D(O,R,P);var M;var L={};var S=0;var N=false;for(M=0;M<Q.length;++M){if(Q[M].seq){S=Math.max(S,Q[M].level);}}for(M=0;M<Q.length;++M){if(Q[M].seq){if(Q[M].level!=S){continue;}N=true;L[Q[M].seq]=1;i(Q[M].callback,P,Q[M].combo,Q[M].seq);continue;}if(!N){i(Q[M].callback,P,Q[M].combo);}}var K=P.type=="keypress"&&z;if(P.type==E&&!o(O)&&!K){H(L);}z=N&&P.type=="keydown";};function F(L){if(typeof L.which!=="number"){L.which=L.keyCode;}var K=u(L);if(!K){return;}if(L.type=="keyup"&&x===K){x=false;return;}J.handleKey(K,f(L),L);}function C(){clearTimeout(A);A=setTimeout(H,1000);}function I(M,R,P,N){B[M]=0;function Q(T){return function(){E=T;++B[M];C();};}function S(T){i(P,T,M);if(N!=="keyup"){x=u(T);}setTimeout(H,10);}for(var O=0;O<R.length;++O){var L=O+1===R.length;var K=L?S:Q(N||q(R[O+1]).action);y(R[O],K,N,M,O);}}function y(K,Q,L,N,P){J._directMap[K+":"+L]=Q;K=K.replace(/\s+/g," ");var O=K.split(" ");var M;if(O.length>1){I(K,O,Q,L);return;}M=q(K,L);J._callbacks[M.key]=J._callbacks[M.key]||[];D(M.key,M.modifiers,{type:M.action},N,K,P);J._callbacks[M.key][N?"unshift":"push"]({callback:Q,modifiers:M.modifiers,action:M.action,seq:N,level:P,combo:K});}J._bindMultiple=function(L,N,M){for(var K=0;K<L.length;++K){y(L[K],N,M);}};s(G,"keypress",F);s(G,"keydown",F);s(G,"keyup",F);}g.prototype.bind=function(x,z,y){var i=this;x=x instanceof Array?x:[x];i._bindMultiple.call(i,x,z,y);return i;};g.prototype.unbind=function(x,y){var i=this;return i.bind.call(i,x,function(){},y);};g.prototype.trigger=function(x,y){var i=this;if(i._directMap[x+":"+y]){i._directMap[x+":"+y]({},x);}return i;};g.prototype.reset=function(){var i=this;i._callbacks={};i._directMap={};return i;};g.prototype.stopCallback=function(x,i){if((" "+i.className+" ").indexOf(" all-shortcuts ")>-1){return true;}return false;};g.prototype.handleKey=function(){var i=this;return i._handleKey.apply(i,arguments);};g.init=function(){var x=g(m);for(var i in x){if(i.charAt(0)!=="_"){g[i]=(function(y){return function(){return x[y].apply(x,arguments);};}(i));}}};g.init();j.Mousetrap=g;if(typeof module!=="undefined"&&module.exports){module.exports=g;}if(typeof define==="function"&&define.amd){define(function(){return g;});}})(window,document);document.onkeydown=function(b){b=b||event;var a=(window.event)?b.which:b.keyCode;if((b.ctrlKey===true&&a===70)||(b.ctrlKey===true&&a===73)||a==38||a==40||a==33||a==34||a==9){b.preventDefault();return false;}};"use strict";(function(){var d={},c=function(){},e;function b(h){var g=this;g.dropContainer=h.dropContainer;g.inputField=h.inputField;g.uploadsQueue=[];g.activeUploads=0;g.data=h.data;g.key=h.key;g.maxSimultaneousUploads=h.maxSimultaneousUploads||2;g.onFileAdded=h.onFileAdded||c;g.uploadUrl=h.uploadUrl;g.onFileAddedProxy=function(i){g.onFileAdded(i);};g.onFormatSize=h.onFormatSize;g.onIsUploadSuccessfull=h.onIsUploadSuccessfull;g.isOk=true;g.initialize();}function a(h){var g=this;g.file=h;g.fileName=h.name;g.fileSize=h.size;
+g.uploadSize=h.size;g.uploadedBytes=0;g.eventHandlers={};g.events={onProgress:function(i,k){var j=k/i*100;(g.eventHandlers.onProgress||c)(j,i,k);},onStart:function(){(g.eventHandlers.onStart||c)();},onCompleted:function(i){h=null;(g.eventHandlers.onCompleted||c)(i);}};}a.prototype={on:function(g){this.eventHandlers=g;}};b.prototype={initialize:function(){var j=this,l=j.dropContainer,g=j.inputField,i=function(m){m.preventDefault();m.stopPropagation();},k=function(m){i(m);l.classList.add("drag-over");},h=function(m){i(m);l.classList.remove("drag-over");};if(l){j.on(l,"dragenter",k);j.on(l,"dragover",k);j.on(l,"dragleave",h);j.on(l,"drop",function(m){i(m);h(m);j.processFiles(m.dataTransfer.files);});}if(g){j.on(g,"change",function(){j.processFiles(this.files);});}},processFiles:function(l){var k=this;var g=[];for(var j=0;j<l.length;j+=1){var h=new a(l[j]);k.onFileAdded(h);g.push(h);}for(var j=0;j<g.length;j+=1){k.uploadFile(g[j]);}},uploadFile:function(g){var h=this;if(h.activeUploads===h.maxSimultaneousUploads){h.uploadsQueue.push(g);return;}h.ajaxUpload(g);},ajaxUpload:function(o){var j=this,n,h,k,i=o.file,g,l=j.data,m=j.key||"file";j.activeUploads+=1;n=new window.XMLHttpRequest();h=new window.FormData();k=i.name;n.open("POST",j.uploadUrl);n.upload.onloadstart=function(){o.events.onStart();};n.upload.onprogress=function(p){if(!p.lengthComputable){return;}o.events.onProgress(p.total,p.loaded);};n.onload=function(p){j.activeUploads-=1;o.events.onCompleted(p);if(j.uploadsQueue.length){j.ajaxUpload(j.uploadsQueue.shift());}};n.onerror=function(p){o.events.onCompleted(p);};if(l){for(g in l){if(l.hasOwnProperty(g)){h.append(g,l[g]);}}}h.append(m,i);n.send(h);},on:function(h,g,i){if(!h){return;}if(h.addEventListener){h.addEventListener(g,i,false);}else{if(h.attachEvent){h.attachEvent("on"+g,i);}else{h["on"+g]=i;}}}};d.fileApiSupported=function(){if(typeof e!=="boolean"){var g=document.createElement("input");g.setAttribute("type","file");e=!!g.files;}return e;};d.initialize=function(g){return new b(g);};d.translate=function(g){return oO.njn(g);};var f={attachToElement:function(h){var g='<div class="alphaUploader-dropArea scrollPane noScroll">'+'<div class="alphaUploader-elements">'+'<div class="alphaUploader-txt" data-lang="DragFilesHere">Drag files here</div>'+'<div class="alphaUploader-or" data-lang="Or">or</div>'+'<div class="alphaUploader-input-wrap">'+'<input class="alphaUploader-input" multiple="multiple" name="uploadFiles" type="file">'+"</div>"+"</div>"+'<div class="alphaUploader-files">'+'<div class="alphaUploader-header"><div></div></div>'+'<div class="alphaUploader-total"></div>'+'<div class="alphaUploader-cancel"><input class="alphaUploader-cancelInput" type="button" value="Cancel" data-lang-v="Cancel"/></div>'+'<div class="alphaUploader-filesList"><table><tbody></tbody></table></div>'+"</div>"+"</div>";h.innerHTML=g;},attachCancelListener:function(h,g){h.getElementsByClassName("alphaUploader-cancelInput")[0].onclick=(function(){var j=h;var i=g;return function(){i.cancel();};})();},addFile:function(k,i,m){var j=this.getPanelFiles(k);var l=j.getElementsByTagName("tbody")[0];var h='<td class="alphaUploader-status"></td>'+'<td class="alphaUploader-filename">'+i.name+"</td>"+'<td class="alphaUploader-fileProgress">'+'<div class="alphaUploader-progressOuter">'+'<div class="alphaUploader-progressInner" style="width:0%">'+"</div>"+"</div>"+"</td>"+'<td class="alphaUploader-filesize">'+m(i.size)+"</td>";var g=document.createElement("tr");g.setAttribute("class","alphaUploader-file");g.setAttribute("data-name",i.name);g.innerHTML=h;l.appendChild(g);j.style.display="block";this.showPanelFiles(k);},getPanelElements:function(g){return g.getElementsByClassName("alphaUploader-elements")[0];},getPanelFiles:function(g){return g.getElementsByClassName("alphaUploader-files")[0];},hidePanelFiles:function(n){var g=n.getElementsByClassName("alphaUploader-input")[0];try{g.value="";if(g.value){g.type="text";g.type="file";}}catch(m){}var i=n.getElementsByClassName("alphaUploader-filesList")[0];var h=i.getElementsByTagName("tbody")[0];h.innerHTML="";var l=n.getElementsByClassName("alphaUploader-cancelInput")[0];l.className="alphaUploader-cancelInput";var j=this.getPanelFiles(n);j.style.display="none";var k=this.getPanelElements(n);k.style.display="block";},showPanelFiles:function(j){var g=j.getElementsByClassName("alphaUploader-header")[0];g=g.getElementsByTagName("div")[0];g.innerText=d.translate("UploadingFiles");var h=this.getPanelFiles(j);h.style.display="block";var i=this.getPanelElements(j);i.style.display="none";},setFilesUploadedCount:function(j,g,h){var i=j.getElementsByClassName("alphaUploader-total")[0];i.innerHTML=d.translate("UploadedFiles")+" "+g+" "+d.translate("Of")+" "+h;},getFileElement:function(l,j){var k=l.getElementsByClassName("alphaUploader-file");var g=null;for(var h=0;h<k.length&&g==null;h++){if(k[h].getAttribute("data-name")==j.name){g=k[h];}}return g;},updateFileProgress:function(k,h,i){var g=f.getFileElement(k,h);
+if(g!=null){var j=g.getElementsByClassName("alphaUploader-progressInner")[0];j.style.width=i+"%";}},setFileUploaded:function(k,j,h){var g=f.getFileElement(k,j);var i=g.getElementsByClassName("alphaUploader-status")[0];if(h===true){i.className+=" alphaUploader-status-ok";}else{i.className+=" alphaUploader-status-fail";i.title=h;}},setCanceling:function(h){h.getElementsByClassName("alphaUploader-cancelInput")[0].className+=" alphaUploader-cancelInput-disabled";var g=h.getElementsByClassName("alphaUploader-header")[0];g=g.getElementsByTagName("div")[0];g.innerText=d.translate("Canceling...");}};window["AlphaUploader"]={init:function(i,j){var k;if(typeof i=="string"){k=document.getElementById(i);}else{k=i;}f.attachToElement(k);if(!j){j={};}j.dropContainer=k.getElementsByClassName("alphaUploader-dropArea")[0];j.inputField=k.getElementsByClassName("alphaUploader-input")[0];if(!j.onIsUploadSuccessfull){j.onIsUploadSuccessfull=function(m){if(m.error){return m.error;}return m.status==200;};}if(typeof j.debug==="undefined"){j.debug=false;}if(!j.onFormatSize){j.onFormatSize=function(m){var n="b";if(!m){m=0;}if(m>1024){m=m/1024;n="Kb";}if(m>1024){m=m/1024;n="Mb";}m=new Number(m);return m.toFixed(2)+" "+n;};}var h=null;if(j.onFileAdded){h=j.onFileAdded;}var l=d.initialize(j);var g={elRoot:k,files:[],filesUploaded:[],core:l,isCanceled:false,cancel:function(){if(!this.isCanceled){this.core.uploadsQueue=[];this.isCanceled=true;f.setCanceling(this.elRoot);}},reset:function(){f.hidePanelFiles(this.elRoot);var n=this.elRoot.getElementsByClassName("alphaUploader-cancelInput")[0];n.style.visibility="visible";var m=this.elRoot.getElementsByClassName("alphaUploader-header")[0];m.style.visibility="visible";this.files=[];this.filesUploaded=[];this.core.uploadsQueue=[];this.isCanceled=false;this.isOk=true;},disableCancel:function(){var n=this.elRoot.getElementsByClassName("alphaUploader-cancelInput")[0];n.style.visibility="hidden";var m=this.elRoot.getElementsByClassName("alphaUploader-header")[0];m.style.visibility="hidden";},updateOptions:function(m){for(var n in m){this.core[n]=m[n];}}};f.attachCancelListener(k,g);g.updateOptions({onFileAdded:(function(){var m=g;return function(n){m.files.push(n);f.addFile(m.elRoot,n.file,m.core.onFormatSize);f.setFilesUploadedCount(m.elRoot,m.filesUploaded.length,m.filesUploaded.length+m.files.length);var o=null;if(h){o=(function(){var r=m;var p=n;var q=h;return function(){q(r,p);};})();}n.on({onCompleted:(function(){var r=m;var q=n;var p=j;return function(t){r.files.splice(r.files.indexOf(q),1);r.filesUploaded.push(q);f.setFilesUploadedCount(r.elRoot,r.filesUploaded.length,m.filesUploaded.length+r.files.length);var s=r.core.onIsUploadSuccessfull(t);r.core.isOk=r.core.isOk&&(s===true);f.setFileUploaded(r.elRoot,q.file,s);if(p.onUploadCompleted){p.onUploadCompleted(r,q.file,s,t);}if(r.files.length==0||(r.isCanceled&&r.core.activeUploads===0)){if(p.onFinished){p.onFinished(r,r.core.isOk);}}};})(),onProgress:(function(){var r=m;var q=n;var p=j;return function(t,s,u){f.updateFileProgress(r.elRoot,q.file,t);if(p.onUploadProgress){p.onUploadProgress(r,q,parseInt(t,10),s,u);}};})()});if(o){o();}};})()});return g;}};})();var DateFormat={};!function(h){var g=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],l=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],k=["January","February","March","April","May","June","July","August","September","October","November","December"],j={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"},i=/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/;h.format=function(){function b(n){return g[parseInt(n,10)]||n;}function m(o){var n=parseInt(o,10)-1;return l[n]||o;}function f(o){var n=parseInt(o,10)-1;return k[n]||o;}function e(n){return j[n]||n;}function d(o){var n,u,t,s,r,q=o,p="";return -1!==q.indexOf(".")&&(s=q.split("."),q=s[0],p=s[1]),r=q.split(":"),3===r.length?(n=r[0],u=r[1],t=r[2].replace(/\s.+/,"").replace(/[a-z]/gi,""),q=q.replace(/\s.+/,"").replace(/[a-z]/gi,""),{time:q,hour:n,minute:u,second:t,millis:p}):{time:"",hour:"",minute:"",second:"",millis:""};}function c(o,n){for(var q=n-String(o).length,p=0;q>p;p++){o="0"+o;}return o;}return{parseDate:function(o){var n={date:null,year:null,month:null,dayOfMonth:null,dayOfWeek:null,time:null};if("number"==typeof o){return this.parseDate(new Date(o));}if("function"==typeof o.getFullYear){n.year=String(o.getFullYear()),n.month=String(o.getMonth()+1),n.dayOfMonth=String(o.getDate()),n.time=d(o.toTimeString());}else{if(-1!=o.search(i)){values=o.split(/[T\+-]/),n.year=values[0],n.month=values[1],n.dayOfMonth=values[2],n.time=d(values[3].split(".")[0]);}else{switch(values=o.split(" "),values.length){case 6:n.year=values[5],n.month=e(values[1]),n.dayOfMonth=values[2],n.time=d(values[3]);break;case 2:subValues=values[0].split("-"),n.year=subValues[0],n.month=subValues[1],n.dayOfMonth=subValues[2],n.time=d(values[1]);
+break;case 7:case 9:case 10:n.year=values[3],n.month=e(values[1]),n.dayOfMonth=values[2],n.time=d(values[4]);break;case 1:subValues=values[0].split(""),n.year=subValues[0]+subValues[1]+subValues[2]+subValues[3],n.month=subValues[5]+subValues[6],n.dayOfMonth=subValues[8]+subValues[9],n.time=d(subValues[13]+subValues[14]+subValues[15]+subValues[16]+subValues[17]+subValues[18]+subValues[19]+subValues[20]);break;default:return null;}}}return n.date=new Date(n.year,n.month-1,n.dayOfMonth),n.dayOfWeek=String(n.date.getDay()),n;},date:function(G,F){try{var E=this.parseDate(G);if(null===E){return G;}for(var D=(E.date,E.year),C=E.month,B=E.dayOfMonth,A=E.dayOfWeek,z=E.time,y="",x="",w="",v=!1,u=0;u<F.length;u++){var a=F.charAt(u),I=F.charAt(u+1);if(v){"'"==a?(x+=""===y?"'":y,y="",v=!1):y+=a;}else{switch(y+=a,w="",y){case"ddd":x+=b(A),y="";break;case"dd":if("d"===I){break;}x+=c(B,2),y="";break;case"d":if("d"===I){break;}x+=parseInt(B,10),y="";break;case"D":B=1==B||21==B||31==B?parseInt(B,10)+"st":2==B||22==B?parseInt(B,10)+"nd":3==B||23==B?parseInt(B,10)+"rd":parseInt(B,10)+"th",x+=B,y="";break;case"MMMM":x+=f(C),y="";break;case"MMM":if("M"===I){break;}x+=m(C),y="";break;case"MM":if("M"===I){break;}x+=c(C,2),y="";break;case"M":if("M"===I){break;}x+=parseInt(C,10),y="";break;case"y":case"yyy":if("y"===I){break;}x+=y,y="";break;case"yy":if("y"===I){break;}x+=String(D).slice(-2),y="";break;case"yyyy":x+=D,y="";break;case"HH":x+=c(z.hour,2),y="";break;case"H":if("H"===I){break;}x+=parseInt(z.hour,10),y="";break;case"hh":hour=0===parseInt(z.hour,10)?12:z.hour<13?z.hour:z.hour-12,x+=c(hour,2),y="";break;case"h":if("h"===I){break;}hour=0===parseInt(z.hour,10)?12:z.hour<13?z.hour:z.hour-12,x+=parseInt(hour,10),y="";break;case"mm":x+=c(z.minute,2),y="";break;case"m":if("m"===I){break;}x+=z.minute,y="";break;case"ss":x+=c(z.second.substring(0,2),2),y="";break;case"s":if("s"===I){break;}x+=z.second,y="";break;case"S":case"SS":if("S"===I){break;}x+=y,y="";break;case"SSS":x+=z.millis.substring(0,3),y="";break;case"a":x+=z.hour>=12?"PM":"AM",y="";break;case"p":x+=z.hour>=12?"p.m.":"a.m.",y="";break;case"'":y="",v=!0;break;default:x+=a,y="";}}}return x+=w;}catch(H){return console&&console.log&&console.log(H),G;}},prettyDate:function(o){var n,q,p;return("string"==typeof o||"number"==typeof o)&&(n=new Date(o)),"object"==typeof o&&(n=new Date(o.toString())),q=((new Date).getTime()-n.getTime())/1000,p=Math.floor(q/86400),isNaN(p)||0>p?void 0:60>q?"just now":120>q?"1 minute ago":3600>q?Math.floor(q/60)+" minutes ago":7200>q?"1 hour ago":86400>q?Math.floor(q/3600)+" hours ago":1===p?"Yesterday":7>p?p+" days ago":31>p?Math.ceil(p/7)+" weeks ago":p>=31?"more than 5 weeks ago":void 0;},toBrowserTimeZone:function(o,n){return this.date(new Date(o),n||"MM/dd/yyyy HH:mm:ss");}};}();}(DateFormat),function(b){b.format=DateFormat.format;}(jQuery);(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a);}else{if(typeof module!=="undefined"&&module.exports){module.exports=a(require("jquery"));}else{a(jQuery);}}})(function(d){var a=d.scrollTo=function(g,f,e){return d(window).scrollTo(g,f,e);};a.defaults={axis:"xy",duration:0,limit:true};function b(e){return !e.nodeName||d.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!==-1;}d.fn.scrollTo=function(h,g,f){if(typeof g==="object"){f=g;g=0;}if(typeof f==="function"){f={onAfter:f};}if(h==="max"){h=9000000000;}f=d.extend({},a.defaults,f);g=g||f.duration;var e=f.queue&&f.axis.length>1;if(e){g/=2;}f.offset=c(f.offset);f.over=c(f.over);return this.each(function(){if(h===null){return;}var o=b(this),n=o?this.contentWindow||window:this,l=d(n),m=h,i={},k;switch(typeof m){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(m)){m=c(m);break;}m=o?d(m):d(m,n);if(!m.length){return;}case"object":if(m.is||m.style){k=(m=d(m)).offset();}}var p=d.isFunction(f.offset)&&f.offset(n,m)||f.offset;d.each(f.axis.split(""),function(s,t){var v=t==="x"?"Left":"Top",x=v.toLowerCase(),r="scroll"+v,u=l[r](),q=a.max(n,t);if(k){i[r]=k[x]+(o?0:u-l.offset()[x]);if(f.margin){i[r]-=parseInt(m.css("margin"+v),10)||0;i[r]-=parseInt(m.css("border"+v+"Width"),10)||0;}i[r]+=p[x]||0;if(f.over[x]){i[r]+=m[t==="x"?"width":"height"]()*f.over[x];}}else{var w=m[x];i[r]=w.slice&&w.slice(-1)==="%"?parseFloat(w)/100*q:w;}if(f.limit&&/^\d+$/.test(i[r])){i[r]=i[r]<=0?0:Math.min(i[r],q);}if(!s&&f.axis.length>1){if(u===i[r]){i={};}else{if(e){j(f.onAfterFirst);i={};}}}});j(f.onAfter);function j(r){var q=d.extend({},f,{queue:true,duration:g,complete:r&&function(){r.call(n,m,f);}});l.animate(i,q);}});};a.max=function(k,j){var i=j==="x"?"Width":"Height",f="scroll"+i;if(!b(k)){return k[f]-d(k)[i.toLowerCase()]();}var h="client"+i,l=k.ownerDocument||k.document,g=l.documentElement,e=l.body;return Math.max(g[f],e[f])-Math.min(g[h],e[h]);};function c(e){return d.isFunction(e)||d.isPlainObject(e)?e:{top:e,left:e};}d.Tween.propHooks.scrollLeft=d.Tween.propHooks.scrollTop={get:function(e){return d(e.elem)[e.prop]();
+},set:function(e){var g=this.get(e);if(e.options.interrupt&&e._last&&e._last!==g){return d(e.elem).stop();}var f=Math.round(e.now);if(g!==f){d(e.elem)[e.prop](f);e._last=this.get(e);}}};return a;});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/en.json
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/en.json	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/en.json	(revision 2)
@@ -0,0 +1,99 @@
+{
+"CreateDir":"Create",
+"RenameDir":"Rename",
+"DeleteDir":"Delete",
+"AddFile":"Add file",
+"Preview":"Preview",
+"RenameFile":"Rename",
+"DeleteFile":"Delete",
+"SelectFile":"Select",
+"OrderBy":"Order by",
+"Name_asc":"&uarr;&nbsp;&nbsp;Name",
+"Size_asc":"&uarr;&nbsp;&nbsp;Size",
+"Date_asc":"&uarr;&nbsp;&nbsp;Date",
+"Name_desc":"&darr;&nbsp;&nbsp;Name",
+"Size_desc":"&darr;&nbsp;&nbsp;Size",
+"Date_desc":"&darr;&nbsp;&nbsp;Date",
+"Name":"Name",
+"Size":"Size",
+"Date":"Date",
+"Dimensions":"Dimensions",
+"Cancel":"Cancel",
+"LoadingDirectories":"Loading folders...",
+"LoadingFiles":"Loading files...",
+"DirIsEmpty":"This folder is empty",
+"NoFilesFound":"No files found",
+"Upload":"Upload",
+"T_CreateDir":"Create new folder",
+"T_RenameDir":"Rename folder",
+"T_DeleteDir":"Delete selected folder",
+"T_AddFile":"Upload files",
+"T_Preview":"Preview selected file",
+"T_RenameFile":"Rename file",
+"T_DeleteFile":"Delete file",
+"T_SelectFile":"Select highlighted file",
+"T_ListView":"List",
+"T_ThumbsView":"Thumbnails",
+"Q_DeleteFolder":"Delete selected directory?",
+"Q_DeleteFile":"Delete selected file?",
+"E_LoadingConf":"Error loading configuration",
+"E_ActionDisabled":"This action is disabled",
+"E_LoadingAjax":"Error loading",
+"E_MissingDirName":"Missing folder name",
+"E_SelectFiles":"Select files to upload",
+"E_CannotRenameRoot":"Cannot rename root folder.",
+"E_NoFileSelected":"No file selected.",
+"E_CreateDirFailed":"Error creating directory",
+"E_CreateDirInvalidPath":"Cannot create directory - path doesn't exist",
+"E_CannotDeleteDir":"Error deleting directory",
+"E_DeleteDirInvalidPath":"Cannot delete directory - path doesn't exist",
+"E_DeletеFile":"Error deleting file",
+"E_DeleteFileInvalidPath":"Cannot delete file - path doesn't exist",
+"E_DeleteNonEmpty":"Cannot delete - folder is not empty",
+"E_CannotMoveDirToChild":"Cannot move directory to its subdirectory",
+"E_DirAlreadyExists":"Directory with the same name already exists",
+"E_MoveDir":"Error moving directory",
+"E_MoveDirInvalisPath":"Cannot move directory - directory doesn't exist",
+"E_MoveFile":"Error moving file",
+"E_MoveFileInvalisPath":"Cannot move file - file doesn't exist",
+"E_MoveFileAlreadyExists":"File with the same name already exists",
+"E_RenameDir":"Error renaming directory",
+"E_RenameDirInvalidPath":"Cannot rename directory - path doesn't exist",
+"E_RenameFile":"Error renaming file",
+"E_RenameFileInvalidPath":"Cannot rename file - file doesn't exist",
+"E_UploadNotAll":"There is and error uploading some files. ",
+"E_UploadNoFiles":"There are no files to upload or file is too big.",
+"E_UploadInvalidPath":"Cannot upload files - path doesn't exist",
+"E_FileExtensionForbidden":"This type of files cannot be handeled - invalid extension ",
+"DownloadFile":"Download",
+"T_DownloadFile":"Download file",
+"E_CannotDeleteRoot":"Cannot delete root folder",
+"file":"file",
+"files":"files",
+"Cut":"Cut",
+"Copy":"Copy",
+"Paste":"Paste",
+"E_CopyFile":"Error copying file",
+"E_CopyFileInvalisPath":"Cannot copy file - path doesn't exist",
+"E_CopyDirInvalidPath":"Cannot copy directory - path doesn't exist",
+"E_CreateArchive":"Error creating zip archive.",
+"E_UploadingFile":"error",
+
+"Search": "Search",
+"ClickToClose": "Click to close",
+"DragFilesHere": "Drag files here",
+"Or": "or",
+"UploadingFiles": "Uploading files...",
+"UploadedFiles": "Uploaded files:",
+"Of": "of",
+"Canceling": "Canceling...",
+"E_MissingDirName": "Missing file name",
+"E_FileAlreadyExists": "File or directory with this name already exists",
+"Edit": "Edit",
+"T_SaveAs": "Save as",
+"FileExistsOverwrite": "File already exists. Overwrite?",
+"E_UnableToDownload": "Unable to download file from remote server",
+"E_UnableToSaveFile": "Unable to save file to the server, check write permissions",
+"T_SpecifyFileNameForSaving": "Specify file name for saving"
+
+}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/ru.json
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/ru.json	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/lang/ru.json	(revision 2)
@@ -0,0 +1,99 @@
+{
+"CreateDir":"Создать",
+"RenameDir":"Имя",
+"DeleteDir":"Удалить",
+"AddFile":"Загрузить",
+"Preview":"Просмотр",
+"RenameFile":"Имя",
+"DeleteFile":"Удалить",
+"SelectFile":"Выбор",
+"OrderBy":"Порядок",
+"Name_asc":"&uarr;&nbsp;&nbsp;Имя",
+"Size_asc":"&uarr;&nbsp;&nbsp;Размер",
+"Date_asc":"&uarr;&nbsp;&nbsp;Дата",
+"Name_desc":"&darr;&nbsp;&nbsp;Имя",
+"Size_desc":"&darr;&nbsp;&nbsp;Размер",
+"Date_desc":"&darr;&nbsp;&nbsp;Дата",
+"Name":"Имя",
+"Size":"Объем",
+"Date":"Дата",
+"Dimensions":"Размеры",
+"Cancel":"Отмена",
+"LoadingDirectories":"Загрузка директорий...",
+"LoadingFiles":"Загрузка файлов...",
+"DirIsEmpty":"Директория пуста",
+"NoFilesFound":"Файлы не найдены",
+"Upload":"Загрузить",
+"T_CreateDir":"Создать новую директорию",
+"T_RenameDir":"Переименовать директорию",
+"T_DeleteDir":"Удалить выбранную директорию",
+"T_AddFile":"Загрузить файлы",
+"T_Preview":"Просмотр файлов",
+"T_RenameFile":"Переименовать файл",
+"T_DeleteFile":"Удалить файл",
+"T_SelectFile":"Выбрать выделенные файлы",
+"T_ListView":"Список",
+"T_ThumbsView":"Превью",
+"Q_DeleteFolder":"Удалить выбранную директорию?",
+"Q_DeleteFile":"Удалить выбранный файл?",
+"E_LoadingConf":"Ошибка загрузки конфигурации",
+"E_ActionDisabled":"Действие недоступно",
+"E_LoadingAjax":"Ошибка загрузки",
+"E_MissingDirName":"Отсутствует имя директории",
+"E_SelectFiles":"Выбор файлов для загрузки",
+"E_CannotRenameRoot":"Невозможно переименовать корневую директорию",
+"E_NoFileSelected":"Файлы не выбраны",
+"E_CreateDirFailed":"Ошибка создания директории",
+"E_CreateDirInvalidPath":"Ошибка создания директории - пути не существует",
+"E_CannotDeleteDir":"Ошибка удаления директории",
+"E_DeleteDirInvalidPath":"Ошибка удаления директории - пути не существует",
+"E_DeletеFile":"Ошибка удаления файлов",
+"E_DeleteFileInvalidPath":"Ошибка удаления файла - пути не существует",
+"E_DeleteNonEmpty":"Удаление невозможно - директория не пуста",
+"E_CannotMoveDirToChild":"Не удается переместить директорию в подкаталоге",
+"E_DirAlreadyExists":"Директория с этим именем уже существует в файловой системе",
+"E_MoveDir":"Ошибка перемещения директории",
+"E_MoveDirInvalisPath":"Ошибка перемещения директории - пути не существует",
+"E_MoveFile":"Ошибка перемещения файла",
+"E_MoveFileInvalisPath":"Ошибка перемещения файла - файла не существует",
+"E_MoveFileAlreadyExists":"Файл с этим именем уже существует в файловой системе",
+"E_RenameDir":"Ошибка переименования директории",
+"E_RenameDirInvalidPath":"Ошибка переименования директории - пути не существует",
+"E_RenameFile":"Ошибка переименования файла",
+"E_RenameFileInvalidPath":"Ошибка переименования файла - файла не существует",
+"E_UploadNotAll":"Существуют ошибки загрузки некоторых файлов. ",
+"E_UploadNoFiles":"Нет файлов для загрузки или объем слишком велик.",
+"E_UploadInvalidPath":"Невозможно загрузить файл - директории не существует",
+"E_FileExtensionForbidden":"Недопустимое расширение файла ",
+"DownloadFile":"Скачать",
+"T_DownloadFile":"Скачать файл",
+"E_CannotDeleteRoot":"Невозможно удалить корневую директорию",
+"file":"файл",
+"files":"файлов",
+"Cut":"Вырезать",
+"Copy":"Копия",
+"Paste":"Вставка",
+"E_CopyFile":"Ошибка копирования файла",
+"E_CopyFileInvalisPath":"Невозможно скопировать файл - пути не существует",
+"E_CopyDirInvalidPath":"Невозможно скопировать директорию - пути не существует",
+"E_CreateArchive":"Ошибка создания zip архива",
+"E_UploadingFile":"ошибка",
+
+"Search":"Поиск",
+"ClickToClose": "Кликните, чтобы закрыть",
+"DragFilesHere": "Перетащите файлы сюда",
+"Or": "или",
+"UploadingFiles": "Загрузка файлов...",
+"UploadedFiles": "Загружено файлов:",
+"Of": "из",
+"Canceling": "Отмена...",
+"E_MissingDirName":"Отсутствует имя файла",
+"E_FileAlreadyExists": "Файл или директория с таким именем уже существует",
+"Edit": "Редактор",
+"T_SaveAs": "Сохранить как",
+"FileExistsOverwrite": "Файл уже существует. Перезаписать?",
+"E_UnableToDownload": "Не удалось скачать файл с удаленного сервера",
+"E_UnableToSaveFile": "Не удалось сохранить файл на сервер, проверьте права на запись",
+"T_SpecifyFileNameForSaving": "Имя сохраняемого файла"
+
+}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copydir.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copydir.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copydir.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('COPYDIR');
+checkAccess('COPYDIR');
+
+$path = trim(empty($_POST['d'])?'':$_POST['d']);
+$newPath = trim(empty($_POST['n'])?'':$_POST['n']);
+verifyPath($path);
+verifyPath($newPath);
+
+function copyDir($path, $newPath){
+  $items = listDirectory($path);
+  if(!is_dir($newPath))
+    mkdir ($newPath, octdec(DIRPERMISSIONS));
+  foreach ($items as $item){
+    if($item == '.' || $item == '..')
+      continue;
+    $oldPath = AlphaManagerFile::FixPath($path.'/'.$item);
+    $tmpNewPath = AlphaManagerFile::FixPath($newPath.'/'.$item);
+    if(is_file($oldPath))
+      copy($oldPath, $tmpNewPath);
+    elseif(is_dir($oldPath)){
+      copyDir($oldPath, $tmpNewPath);
+    }
+  }
+}
+
+if(is_dir(fixPath($path))){
+  copyDir(fixPath($path.'/'), fixPath($newPath.'/'.basename($path)));
+  echo getSuccessRes();
+}
+else
+  echo getErrorRes(t('E_CopyDirInvalidPath'));
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copydir.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copyfile.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copyfile.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copyfile.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('COPYFILE');
+checkAccess('COPYFILE');
+
+$newPath = trim(empty($_POST['n'])?'':$_POST['n']);
+verifyPath($newPath);
+
+$files = $_POST['fs'];
+for ($i=0; $i<count($files); $i++) {
+    $path = $files[$i]['f'];
+    verifyPath($path);
+
+    if(is_file(fixPath($path))){
+
+      $newFilePath = $newPath.'/'.AlphaManagerFile::MakeUniqueFilename(fixPath($newPath), basename($path));
+
+      if(!copy(fixPath($path), fixPath($newFilePath))) {
+        echo getErrorRes(t('E_CopyFile'));
+        die;
+      }
+    } else {
+      echo getErrorRes(t('E_CopyFileInvalisPath'));
+      die;
+    }
+}
+
+echo getSuccessRes();
+
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/copyfile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/createdir.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/createdir.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/createdir.php	(revision 2)
@@ -0,0 +1,20 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('CREATEDIR');
+checkAccess('CREATEDIR');
+
+$path = trim(empty($_POST['d'])?'':$_POST['d']);
+$name = trim(empty($_POST['n'])?'':$_POST['n']);
+verifyPath($path);
+
+if(is_dir(fixPath($path))){
+  if(mkdir(fixPath($path).'/'.$name, octdec(DIRPERMISSIONS)))
+    echo getSuccessRes();
+  else
+    echo getErrorRes(t('E_CreateDirFailed').' '.basename($name));
+}
+else
+  echo  getErrorRes(t('E_CreateDirInvalidPath'));
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/createdir.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletedir.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletedir.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletedir.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('DELETEDIR');
+checkAccess('DELETEDIR');
+
+$path = trim(empty($_POST['d'])?'':$_POST['d']);
+verifyPath($path);
+
+function delDir($path) {
+    if (is_dir($path) === true) {
+        $files = scandir($path);
+        for ($i = 0; $i<count($files); $i++)
+            if ($files[$i] != '.' && $files[$i] != '..') {
+                if (delDir($path . '/' . $files[$i]) != null)
+                    return $path . '/' . $files[$i];
+            }
+        return rmdir($path) ? null : $path;
+    } else if (is_file($path) === true || is_link($path) === true) {
+        return unlink($path) ? null : $path;
+    }
+    return "?";
+}
+
+if(is_dir(fixPath($path))){
+  if(fixPath($path.'/') == fixPath(getFilesPath().'/'))
+    echo getErrorRes(t('E_CannotDeleteRoot'));
+  else {
+    $res = delDir(fixPath($path));
+    if ($res == null)
+        echo getSuccessRes();
+    else
+        echo getErrorRes(t('E_CannotDeleteDir').' '.basename($res));
+  }
+}
+else
+  echo getErrorRes(t('E_DeleteDirInvalidPath').' '.$path);
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletedir.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletefile.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletefile.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletefile.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('DELETEFILE');
+checkAccess('DELETEFILE');
+
+$files = $_POST['fs'];
+for ($i=0; $i<count($files); $i++) {
+
+    $path = $files[$i]['f'];
+    verifyPath($path);
+
+    if(is_file(fixPath($path))){
+      if(!unlink(fixPath($path))) {
+        echo getErrorRes(t('E_DeletеFile').' '.basename($path));
+        die;
+      }
+    }
+    else {
+      echo getErrorRes(t('E_DeleteFileInvalidPath'.' '.$path));
+      die;
+    }
+}
+
+echo getSuccessRes();
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/deletefile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/dirtree.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/dirtree.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/dirtree.php	(revision 2)
@@ -0,0 +1,51 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('DIRLIST');
+checkAccess('DIRLIST');
+
+function getFilesNumber($path, $type){
+  $files = 0;
+  $dirs = 0;
+  $tmp = listDirectory($path);
+  foreach ($tmp as $ff){
+    if($ff == '.' || $ff == '..')
+      continue;
+    elseif(is_file($path.'/'.$ff) && ($type == '' || ($type == 'image' && AlphaManagerFile::IsImage($ff)) || ($type == 'flash' && AlphaManagerFile::IsFlash($ff))))
+      $files++;
+    elseif(is_dir($path.'/'.$ff))
+      $dirs++;
+  }
+
+  return array('files'=>$files, 'dirs'=>$dirs);
+}
+function GetDirs($path, $type){
+  $ret = $sort = array();
+  $files = listDirectory(fixPath($path), 0);
+  foreach ($files as $f){
+    $fullPath = $path.'/'.$f;
+    if(!is_dir(fixPath($fullPath)) || $f == '.' || $f == '..')
+      continue;
+    $tmp = getFilesNumber(fixPath($fullPath), $type);
+    $ret[$fullPath] = array('path'=>$fullPath,'files'=>$tmp['files'],'dirs'=>$tmp['dirs']);
+    $sort[$fullPath] = $f;
+  }
+  natcasesort($sort);
+  foreach ($sort as $k => $v) {
+    $tmp = $ret[$k];
+    echo ',{"p":"'.mb_ereg_replace('"', '\\"', $tmp['path']).'","f":"'.$tmp['files'].'","d":"'.$tmp['dirs'].'"}';
+    GetDirs($tmp['path'], $type);
+  }
+}
+
+$type = (empty($_POST['type'])?'':strtolower($_POST['type']));
+if($type != 'image' && $type != 'flash')
+  $type = '';
+
+echo "[\n";
+$tmp = getFilesNumber(fixPath(getFilesPath()), $type);
+echo '{"p":"'.  mb_ereg_replace('"', '\\"', getFilesPath()).'","f":"'.$tmp['files'].'","d":"'.$tmp['dirs'].'"}';
+GetDirs(getFilesPath(), $type);
+echo "\n]";
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/dirtree.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/fileslist.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/fileslist.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/fileslist.php	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('FILESLIST');
+checkAccess('FILESLIST');
+
+$path = (empty($_POST['d'])? getFilesPath(): $_POST['d']);
+$type = (empty($_POST['type'])?'':strtolower($_POST['type']));
+if($type != 'image' && $type != 'flash')
+  $type = '';
+verifyPath($path);
+
+$files = listDirectory(fixPath($path), 0);
+natcasesort($files);
+$str = '';
+echo '[';
+foreach ($files as $f){
+  $fullPath = $path.'/'.$f;
+  if(!is_file(fixPath($fullPath)) || ($type == 'image' && !AlphaManagerFile::IsImage($f)) || ($type == 'flash' && !AlphaManagerFile::IsFlash($f)))
+    continue;
+  $size = filesize(fixPath($fullPath));
+  $time = filemtime(fixPath($fullPath));
+  $w = 0;
+  $h = 0;
+  if(AlphaManagerFile::IsImage($f)){
+    $tmp = @getimagesize(fixPath($fullPath));
+    if($tmp){
+      $w = $tmp[0];
+      $h = $tmp[1];
+    }
+  }
+  $str .= '{"p":"'.mb_ereg_replace('"', '\\"', $fullPath).'","s":"'.$size.'","t":"'.$time.'","w":"'.$w.'","h":"'.$h.'"},';
+}
+$str = mb_substr($str, 0, -1);
+echo $str;
+echo ']';
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/fileslist.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/functions.inc.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/functions.inc.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/functions.inc.php	(revision 2)
@@ -0,0 +1,470 @@
+<?php
+include 'security.inc.php';
+function t($key){
+  global $LANG;
+  if(empty($LANG)){
+    $file = 'en.json';
+    $langPath = '../lang/';
+    if(defined('LANG')){
+      if(LANG == 'auto'){
+        $lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
+        if(is_file($langPath.$lang.'.json'))
+          $file = $lang.'.json';
+      }
+      elseif(is_file($langPath.LANG.'.json'))
+        $file = LANG.'.json';
+    }
+    $file = $langPath.$file;
+    $LANG = json_decode(file_get_contents($file), true);
+  }
+  if(!$LANG[$key])
+    $LANG[$key] = $key;
+
+  return $LANG[$key];
+}
+function checkPath($path){
+  $ret = false;
+  if(mb_strpos($path.'/', getFilesPath()) === 0)
+    $ret = true;
+
+  return $ret;
+}
+function verifyAction($action){
+  /*if(!defined($action) || !constant($action))
+    exit;
+  else{
+    $confUrl = constant($action);
+    $qStr = mb_strpos($confUrl, '?');
+    if($qStr !== false)
+      $confUrl = mb_substr ($confUrl, 0, $qStr);
+    $confUrl = BASE_PATH.'/'.$confUrl;
+    $confUrl = AlphaManagerFile::FixPath($confUrl);
+    $thisUrl = dirname(__FILE__).'/'.basename($_SERVER['PHP_SELF']);
+    $thisUrl = AlphaManagerFile::FixPath($thisUrl);
+    if($thisUrl != $confUrl){
+      echo "$confUrl $thisUrl";
+      exit;
+    }
+  }*/
+}
+function verifyPath($path){
+  if(!checkPath($path)){
+    echo getErrorRes("Access to $path is denied").' '.$path;
+    exit;
+  }
+}
+function fixPath($path){
+  if (strpos('/', $path) === 0)
+    $path = $_SERVER['DOCUMENT_ROOT'].'/'.$path;
+  $path = str_replace('\\', '/', $path);
+  $path = AlphaManagerFile::FixPath($path);
+  return $path;
+}
+function gerResultStr($type, $str = ''){
+  return '{"res":"'.  addcslashes($type, '"\\').'","msg":"'.  addcslashes($str, '"\\').'"}';
+}
+function getSuccessRes($str = ''){
+  return gerResultStr('ok', $str);
+}
+function getErrorRes($str = ''){
+  return gerResultStr('error', $str);
+}
+function getFilesPath(){
+  $ret = (isset($_SESSION[SESSION_PATH_KEY]) && $_SESSION[SESSION_PATH_KEY] != ''?$_SESSION[SESSION_PATH_KEY]:FILES_ROOT);
+  if(!$ret){
+    $ret = AlphaManagerFile::FixPath(BASE_PATH.'/uploads');
+    $tmp = $_SERVER['DOCUMENT_ROOT'];
+    if(mb_substr($tmp, -1) == '/' || mb_substr($tmp, -1) == '\\')
+      $tmp = mb_substr($tmp, 0, -1);
+    $ret = str_replace(AlphaManagerFile::FixPath($tmp), '', $ret);
+  }
+  return $ret;
+}
+function listDirectory($path){
+  $ret = @scandir($path);
+  if($ret === false){
+    $ret = array();
+    $d = opendir($path);
+    if($d){
+      while(($f = readdir($d)) !== false){
+        $ret[] = $f;
+      }
+      closedir($d);
+    }
+  }
+  
+  return $ret;
+}
+class AlphaManagerFile{
+  static public function CheckWritable($dir){
+    $ret = false;
+    if(self::CreatePath($dir)){
+      $dir = self::FixPath($dir.'/');
+      $testFile = 'writetest.txt';
+      $f = @fopen($dir.$testFile, 'w', false);
+      if($f){
+        fclose($f);
+        $ret = true;
+        @unlink($dir.$testFile);
+      }
+    }
+
+    return $ret;
+  }
+  static function CanUploadFile($filename){
+    $ret = false;
+    $forbidden = array_filter(preg_split('/[^\d\w]+/', strtolower(FORBIDDEN_UPLOADS)));
+    $allowed = array_filter(preg_split('/[^\d\w]+/', strtolower(ALLOWED_UPLOADS)));
+    $ext = AlphaManagerFile::GetExtension($filename);
+
+    if((empty($forbidden) || !in_array($ext, $forbidden)) && (empty($allowed) || in_array($ext, $allowed)))
+      $ret = true;
+
+    return $ret;
+  }
+  static function ZipAddDir($path, $zip, $zipPath){
+    $d = opendir($path);
+    $zipPath = str_replace('//', '/', $zipPath);
+    if($zipPath && $zipPath != '/'){
+      $zip->addEmptyDir($zipPath);
+    }
+    while(($f = readdir($d)) !== false){
+      if($f == '.' || $f == '..')
+        continue;
+      $filePath = $path.'/'.$f;
+      if(is_file($filePath)){
+        $zip->addFile($filePath, ($zipPath?$zipPath.'/':'').$f);
+      }
+      elseif(is_dir($filePath)){
+        self::ZipAddDir($filePath, $zip, ($zipPath?$zipPath.'/':'').$f);
+      }
+    }
+    closedir($d);
+  }
+  static function ZipDir($path, $zipFile, $zipPath = ''){
+    $zip = new ZipArchive();
+    $zip->open($zipFile, ZIPARCHIVE::CREATE);
+    self::ZipAddDir($path, $zip, $zipPath);
+    $zip->close();
+  }
+  static function IsImage($fileName){
+    $ret = false;
+    $ext = strtolower(self::GetExtension($fileName));
+    if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'jpe' || $ext == 'png' || $ext == 'gif' || $ext == 'ico')
+      $ret = true;
+    return $ret;
+  }
+  static function IsFlash($fileName){
+    $ret = false;
+    $ext = strtolower(self::GetExtension($fileName));
+    if($ext == 'swf' || $ext == 'flv' || $ext == 'swc' || $ext == 'swt')
+      $ret = true;
+    return $ret;
+  }
+  /**
+   * Returns human formated file size
+   *
+   * @param int $filesize
+   * @return string
+   */
+  static function FormatFileSize($filesize){
+    $ret = '';
+    $unit = 'B';
+    if($filesize > 1024){
+      $unit = 'KB';
+      $filesize = $filesize / 1024;
+    }
+    if($filesize > 1024){
+      $unit = 'MB';
+      $filesize = $filesize / 1024;
+    }
+    if($filesize > 1024){
+      $unit = 'GB';
+      $filesize = $filesize / 1024;
+    }
+
+    $ret = round($filesize, 2).' '.$unit;
+    return $ret;
+  }
+  /**
+   * Returns MIME type of $filename
+   *
+   * @param string $filename
+   * @return string
+   */
+  static function GetMIMEType($filename){
+    $type = 'application/octet-stream';
+    $ext = self::GetExtension($filename);
+
+    switch(strtolower($ext)){
+      case 'jpg':  $type = 'image/jpeg';break;
+      case 'jpeg': $type = 'image/jpeg';break;
+      case 'gif':  $type = 'image/gif';break;
+      case 'png':  $type = 'image/png';break;
+      case 'bmp':  $type = 'image/bmp';break;
+      case 'tiff': $type = 'image/tiff';break;
+      case 'tif':  $type = 'image/tiff';break;
+      case 'pdf':  $type = 'application/pdf';break;
+      case 'rtf':  $type = 'application/msword';break;
+      case 'doc':  $type = 'application/msword';break;
+      case 'xls':  $type = 'application/vnd.ms-excel'; break;
+      case 'zip':  $type = 'application/zip'; break;
+      case 'swf':  $type = 'application/x-shockwave-flash'; break;
+      default: $type = 'application/octet-stream';
+    }
+
+    return $type;
+  }
+
+  /**
+   * Replaces any character that is not letter, digit or underscore from $filename with $sep
+   *
+   * @param string $filename
+   * @param string $sep
+   * @return string
+   */
+  static function CleanupFilename($filename, $sep = '_'){
+    $str = '';
+    if(strpos($filename,'.')){
+      $ext = self::GetExtension($filename) ;
+      $name = self::GetName($filename);
+    }
+    else{
+      $ext = '';
+      $name = $filename;
+    }
+    if(mb_strlen($name) > 32)
+      $name = mb_substr($name, 0, 32);
+    $str = str_replace('.php', '', $str);
+    $str = mb_ereg_replace("[^\\w]", $sep, $name);
+    
+    $str = mb_ereg_replace("$sep+", $sep, $str).($ext?'.'.$ext:'');
+
+    return $str;
+  }
+
+  /**
+   * Returns file extension without dot
+   *
+   * @param string $filename
+   * @return string
+   */
+  static function GetExtension($filename) {
+    $ext = '';
+
+    if(mb_strrpos($filename, '.') !== false)
+      $ext = mb_substr($filename, mb_strrpos($filename, '.') + 1);
+
+    return strtolower($ext);
+  }
+
+  /**
+   * Returns file name without extension
+   *
+   * @param string $filename
+   * @return string
+   */
+  static function GetName($filename) {
+    $name = '';
+    $tmp = mb_strpos($filename, '?');
+    if($tmp !== false)
+        $filename = mb_substr ($filename, 0, $tmp);
+    $dotPos = mb_strrpos($filename, '.');
+    if($dotPos !== false)
+      $name = mb_substr($filename, 0, $dotPos);
+    else
+      $name = $filename;
+
+    return $name;
+  }
+  static function GetFullName($filename) {
+    $tmp = mb_strpos($filename, '?');
+    if($tmp !== false)
+      $filename = mb_substr ($filename, 0, $tmp);
+    $filename = basename($filename);
+
+    return $filename;
+  }
+  static public function FixPath($path){
+    $path = mb_ereg_replace('[\\\/]+', '/', $path);
+    return $path;
+  }
+  /**
+   * creates unique file name using $filename( " - Copy " and number is added if file already exists) in directory $dir
+   *
+   * @param string $dir
+   * @param string $filename
+   * @return string
+   */
+  static function MakeUniqueFilename($dir, $filename){
+    $temp = '';
+    $dir .= '/';
+    $dir = self::FixPath($dir.'/');
+    $ext = self::GetExtension($filename);
+    $name = self::GetName($filename);
+    $name = self::CleanupFilename($name);
+    $name = mb_ereg_replace(' \\- Copy \\d+$', '', $name);
+    if($ext)
+      $ext = '.'.$ext;
+    if(!$name)
+      $name = 'file';
+
+    $i = 0;
+    do{
+      $temp = ($i > 0? $name." - Copy $i": $name).$ext;
+      $i++;
+    }while(file_exists($dir.$temp));
+
+    return $temp;
+  }
+  /**
+   * creates unique directory name using $name( " - Copy " and number is added if directory already exists) in directory $dir
+   *
+   * @param string $dir
+   * @param string $name
+   * @return string
+   */
+  static function MakeUniqueDirname($dir, $name){
+    $temp = '';
+    $dir = self::FixPath($dir.'/');
+    $name = mb_ereg_replace(' - Copy \\d+$', '', $name);
+    if(!$name)
+      $name = 'directory';
+
+    $i = 0;
+    do{
+      $temp = ($i? $name." - Copy $i": $name);
+      $i++;
+    }while(is_dir($dir.$temp));
+
+    return $temp;
+  }
+}
+class AlphaManagerImage{
+  public static function GetImage($path){
+    $img = null;
+    switch(AlphaManagerFile::GetExtension(basename($path))){
+      case 'png':
+        $img = imagecreatefrompng($path);
+        break;
+      case 'gif':
+        $img = imagecreatefromgif($path);
+        break;
+      default:
+        $img = imagecreatefromjpeg($path);
+    }
+    imagealphablending($img, false);
+    imagesavealpha($img, true);
+    return $img;
+  }
+  public static function OutputImage($img, $type, $destination = '', $quality = 90){
+    if(is_string($img))
+      $img = self::GetImage ($img);
+    switch(strtolower($type)){
+      case 'png':
+        imagepng($img, $destination);
+        break;
+      case 'gif':
+        imagegif($img, $destination);
+        break;
+      default:
+        imagejpeg($img, $destination, $quality);
+    }
+  }
+  public static function Resize($source, $thumbFileName, $destination, $width = '150',$height = 0, $quality = 90) {
+    $tmp = getimagesize($source);
+    $w = $tmp[0];
+    $h = $tmp[1];
+    $r = $w / $h;
+
+    if($w <= ($width + 1) && (($h <= ($height + 1)) || (!$height && !$width))){
+      if($source != $destination)
+        self::OutputImage($source, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality);
+      return;
+    }
+    
+    $newWidth = $width;
+    $newHeight = floor($newWidth / $r);
+    if(($height > 0 && $newHeight > $height) || !$width){
+      $newHeight = $height;
+      $newWidth = intval($newHeight * $r);
+    }
+
+    $thumbImg = imagecreatetruecolor($newWidth, $newHeight);
+    imagealphablending($thumbImg, false);
+    imagesavealpha($thumbImg, true);
+    $img = self::GetImage($source);
+    imagecopyresampled($thumbImg, $img, 0, 0, 0, 0, $newWidth, $newHeight, $w, $h);
+
+    self::Cache($thumbImg, $thumbFileName);
+
+    self::OutputImage($thumbImg, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality);
+  }
+  public static function Cache($img, $thumbFileName, $quality = 90) {
+    if (STORE_PREVIEWS_DIR != null && strlen(STORE_PREVIEWS_DIR) > 0 ) {
+       self::OutputImage($img, AlphaManagerFile::GetExtension(basename($thumbFileName)), $thumbFileName, $quality);
+    }
+  }
+  public static function GetThumbFileName($path, $w, $h) {
+      return '../' . STORE_PREVIEWS_DIR . '/' . md5($w . "|" . $h . "|" . $path) . '.' . 'jpg'; //AlphaManagerFile::GetExtension($path);
+  }
+  public static function CropCenter($source, $thumbFileName, $destination, $width, $height, $quality = 90) {
+    $tmp = getimagesize($source);
+    $w = $tmp[0];
+    $h = $tmp[1];
+    if(($w <= $width) && (!$height || ($h <= $height))){
+      self::OutputImage(self::GetImage($source), AlphaManagerFile::GetExtension(basename($source)), $destination, $quality);
+    }
+    $ratio = $width / $height;
+    $top = $left = 0;
+
+    $cropWidth = floor($h * $ratio);
+    $cropHeight = floor($cropWidth / $ratio);
+    if($cropWidth > $w){
+      $cropWidth = $w;
+      $cropHeight = $w / $ratio;
+    }
+    if($cropHeight > $h){
+      $cropHeight = $h;
+      $cropWidth = $h * $ratio;
+    }
+
+    if($cropWidth < $w){
+       $left = floor(($w - $cropWidth) / 2);
+    }
+    if($cropHeight < $h){
+       $top = floor(($h- $cropHeight) / 2);
+    }
+    self::Crop($source, $thumbFileName, $destination, $left, $top, $cropWidth, $cropHeight, $width, $height, $quality);
+  }
+  public static function Crop($source, $thumbFileName, $destination, $x, $y, $cropWidth, $cropHeight, $width, $height, $quality = 90) {
+    $thumbImg = imagecreatetruecolor($width, $height);
+    imagealphablending($thumbImg, false);
+    imagesavealpha($thumbImg, true);
+    $img = self::GetImage($source);
+    imagecopyresampled($thumbImg, $img, 0, 0, $x, $y, $width, $height, $cropWidth, $cropHeight);
+    self::Cache($thumbImg, $thumbFileName);
+    self::OutputImage($thumbImg, AlphaManagerFile::GetExtension(basename($source)), $destination, $quality);
+  }
+}
+$tmp = json_decode(file_get_contents(BASE_PATH.'/conf.json'), true);
+if($tmp){
+  foreach ($tmp as $k=>$v) {
+    if ($k != 'LANG')
+        define($k, $v);
+    else {
+        if (isset($_GET['l']))
+            define($k, $_GET['l']);
+        else if (isset($_POST['l']))
+            define($k, $_POST['l']);
+        else
+            define($k, $v);
+    }
+  }
+}
+else
+  die('Error parsing configuration');
+$FilesRoot = fixPath(getFilesPath());
+if(!is_dir($FilesRoot))
+  @mkdir($FilesRoot, octdec(DIRPERMISSIONS));
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/functions.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movedir.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movedir.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movedir.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('MOVEDIR');
+checkAccess('MOVEDIR');
+
+$path = trim(empty($_POST['d'])?'':$_POST['d']);
+$newPath = trim(empty($_POST['n'])?'':$_POST['n']);
+
+verifyPath($path);
+verifyPath($newPath);
+
+if(is_dir(fixPath($path))){
+  if(mb_strpos($newPath, $path) === 0)
+    echo getErrorRes(t('E_CannotMoveDirToChild'));
+  elseif(file_exists(fixPath($newPath).'/'.basename($path)))
+    echo getErrorRes(t('E_DirAlreadyExists'));
+  elseif(rename(fixPath($path), fixPath($newPath).'/'.basename($path)))
+    echo getSuccessRes();
+  else
+    echo getErrorRes(t('E_MoveDir').' '.basename($path));
+}
+else
+  echo getErrorRes(t('E_MoveDirInvalisPath'));
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movedir.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movefile.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movefile.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movefile.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('MOVEFILE');
+checkAccess('MOVEFILE');
+
+$newPath = trim(empty($_POST['n'])?'':$_POST['n']);
+verifyPath($newPath);
+
+$files = $_POST['fs'];
+for ($i=0; $i<count($files); $i++) {
+    $path = $files[$i]['f'];
+    verifyPath($path);
+
+    $newFilePath = $newPath.'/'.basename($path);
+
+    if(is_file(fixPath($path))){
+      if (file_exists(fixPath($newFilePath))) {
+        echo getErrorRes(t('E_MoveFileAlreadyExists').' '.basename($newFilePath));
+        die;
+      } elseif (!rename(fixPath($path), fixPath($newFilePath))) {
+        echo getErrorRes(t('E_MoveFile').' '.basename($path));
+        die;
+      }
+    } else {
+      echo getErrorRes(t('E_MoveFileInvalisPath'));
+      die;
+    }
+
+}
+
+echo getSuccessRes();
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/movefile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamedir.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamedir.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamedir.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('RENAMEDIR');
+checkAccess('RENAMEDIR');
+
+$path = trim(empty($_POST['d'])? '': $_POST['d']);
+$name = trim(empty($_POST['n'])? '': $_POST['n']);
+verifyPath($path);
+
+$newPath = dirname(fixPath($path)).'/'.$name;
+
+if(is_dir(fixPath($path))){
+  if(fixPath($path.'/') == fixPath(getFilesPath().'/'))
+    echo getErrorRes(t('E_CannotRenameRoot'));
+  else if (is_dir($newPath) || is_file($newPath) || is_link($newPath))
+    echo getErrorRes(t('E_FileAlreadyExists'));
+  else if (rename(fixPath($path), $newPath))
+    echo getSuccessRes();
+  else
+    echo getErrorRes(t('E_RenameDir').' '.basename($path));
+}
+else
+  echo getErrorRes(t('E_RenameDirInvalidPath'));
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamedir.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamefile.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamefile.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamefile.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('RENAMEFILE');
+checkAccess('RENAMEFILE');
+
+$path = trim(empty($_POST['f'])?'':$_POST['f']);
+$name = trim(empty($_POST['n'])?'':$_POST['n']);
+verifyPath($path);
+
+$newPath = dirname(fixPath($path)).'/'.$name;
+if (is_dir($newPath) || is_file($newPath) || is_link($newPath))
+    echo getErrorRes(t('E_FileAlreadyExists'));
+elseif(!AlphaManagerFile::CanUploadFile($name))
+    echo getErrorRes(t('E_FileExtensionForbidden').' ".'.AlphaManagerFile::GetExtension($name).'"');
+elseif(rename(fixPath($path), $newPath))
+    echo getSuccessRes();
+else
+    echo getErrorRes(t('E_RenameFile').' '.basename($path));
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/renamefile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/security.inc.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/security.inc.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/security.inc.php	(revision 2)
@@ -0,0 +1,9 @@
+<?php
+
+header('Access-Control-Allow-Origin: *');
+
+function checkAccess($action){
+  if(!session_id())
+    session_start();
+}
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/security.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/thumb.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/thumb.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/thumb.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+header("Pragma: cache");
+header("Cache-Control: max-age=3600");
+
+verifyAction('GENERATETHUMB');
+checkAccess('GENERATETHUMB');
+
+$path = urldecode(empty($_GET['f'])?'':$_GET['f']);
+verifyPath($path);
+
+@chmod(fixPath(dirname($path)), octdec(DIRPERMISSIONS));
+@chmod(fixPath($path), octdec(FILEPERMISSIONS));
+
+$w = intval(empty($_GET['width'])?'100':$_GET['width']);
+$h = intval(empty($_GET['height'])?'0':$_GET['height']);
+
+//echo($path . " | " . $w . " " . $h . " = " . AlphaManagerImage::getThumbFileName($path, $w, $h)); die;
+
+header('Content-type: '.AlphaManagerFile::GetMIMEType(basename($path)));
+$thumbFileName = AlphaManagerImage::getThumbFileName($path, $w, $h);
+if (STORE_PREVIEWS_DIR != null && strlen(STORE_PREVIEWS_DIR) > 0 ) {
+    if (is_file($thumbFileName)) {
+        AlphaManagerImage::OutputImage($thumbFileName, AlphaManagerFile::GetExtension($thumbFileName));
+        return;
+    }
+}
+
+if($w && $h)
+  AlphaManagerImage::CropCenter(fixPath($path), $thumbFileName, null, $w, $h);
+else
+  AlphaManagerImage::Resize(fixPath($path), $thumbFileName, null, $w, $h);
+?>
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/thumb.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/upload.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/upload.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/upload.php	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+include '../system.inc.php';
+include 'functions.inc.php';
+
+verifyAction('UPLOAD');
+checkAccess('UPLOAD');
+
+$isAjax = (isset($_POST['method']) && $_POST['method'] == 'ajax');
+$path = trim(empty($_POST['d'])?getFilesPath():$_POST['d']);
+verifyPath($path);
+$res = '';
+if(is_dir(fixPath($path))){
+  if(!empty($_FILES['files']) && is_array($_FILES['files']['tmp_name'])){
+    $errors = $errorsExt = array();
+    foreach($_FILES['files']['tmp_name'] as $k=>$v){
+      $filename = $_FILES['files']['name'][$k];
+      $filesize = $_FILES['files']['size'][$k];
+      $filename = AlphaManagerFile::MakeUniqueFilename(fixPath($path), $filename);
+      $filePath = fixPath($path).'/'.$filename;
+      $isUploaded = true;
+      if(!AlphaManagerFile::CanUploadFile($filename)){
+        $errorsExt[] = $filename;
+        $isUploaded = false;
+      } elseif(intval(MAX_FILE_SIZE) > 0 && $filesize > intval(MAX_FILE_SIZE)) {
+         $errors[] = $filename;
+         $isUploaded = false;
+      } else {
+
+        $sizeProhibited = false;
+        if (intval(MAX_IMAGE_WIDTH) > 0 || intval(MAX_IMAGE_HEIGHT) > 0) {
+           $tmp = getimagesize($filePath);
+           $w = $tmp[0];
+           $h = $tmp[1];
+           if ((intval(MAX_IMAGE_WIDTH) > 0 && intval(MAX_IMAGE_WIDTH) < $w) || (intval(MAX_IMAGE_HEIGHT) > 0 && intval(MAX_IMAGE_HEIGHT) < $h)) {
+              $errors[] = $filename;
+              $isUploaded = false;
+              $sizeProhibited = true;
+           }
+        }
+        if($sizePhohibited !== true) {
+            if(!move_uploaded_file($v, $filePath)){
+                $errors[] = $filename;
+                $isUploaded = false;
+            }
+        }
+
+      }
+      if(is_file($filePath)){
+         @chmod ($filePath, octdec(FILEPERMISSIONS));
+      }
+      if($isUploaded && AlphaManagerFile::IsImage($filename) && (intval(RESIZE_IMAGE_WIDTH) > 0 || intval(RESIZE_IMAGE_HEIGHT) > 0)){
+        AlphaManagerImage::Resize($filePath, $filePath, intval(RESIZE_IMAGE_WIDTH), intval(RESIZE_IMAGE_HEIGHT));
+      }
+    }
+    if($errors && $errorsExt)
+      $res = getSuccessRes(t('E_UploadNotAll').' '.t('E_FileExtensionForbidden'));
+    elseif($errorsExt)
+      $res = getSuccessRes(t('E_FileExtensionForbidden'));
+    elseif($errors)
+      $res = getSuccessRes(t('E_UploadNotAll'));
+    else
+      $res = getSuccessRes();
+  }
+  else
+    $res = getErrorRes(t('E_UploadNoFiles'));
+}
+else
+  $res = getErrorRes(t('E_UploadInvalidPath'));
+
+if($isAjax){
+
+  if($errors || $errorsExt)
+    $res = getErrorRes(t('E_UploadNotAll'));
+  echo $res;
+}
+else{
+  echo '
+<script>
+parent.fileUploaded('.$res.');
+</script>';
+}
+?>

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/php/upload.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/plugin.js	(revision 2)
@@ -0,0 +1,2 @@
+(function(){function i(o){return o.name.replace(/\[/,"_").replace(/\]/,"_");}function b(p,o){return p.config[o];}function k(q,p,r){var o=b(q,p);return(typeof o=="object")?o[r]:null;}function m(o,p){CKEDITOR.config[o]=p;}function h(){return CKEDITOR.plugins.getPath("alphamanager");}m("alphamanager_skin","flat");m("alphamanager_skinMod","");function g(p,o){if(e(p,o)){return;}p.className=p.className.length==0?o:p.className+" "+o;}function j(q,o){var p=n(q);while(p.indexOf(o)>-1){p.splice(p.indexOf(o),1);}var r=p.join(" ").trim();if(r.length>0){q.className=r;}else{if(q.hasAttribute("class")){q.removeAttribute("class");}}}function n(o){if(typeof(o.className)==="undefined"||o.className==null){return[];}return o.className.split(/\s+/);}function e(r,o){var q=n(r);for(var p=0;p<q.length;p++){if(q[p].toLowerCase()==o.toLowerCase()){return true;}}return false;}function c(q,o){var p=q.createElement("style");q.getElementsByTagName("head")[0].appendChild(p);p.innerHTML=o;}function l(r,v){var y=r.lang.common.browseServer;var w=document.getElementsByClassName("cke_dialog_ui_button");for(var q=0;q<w.length;q++){var x=w[q];if(x.getAttribute("title")==y&&(x.getAttribute("data-alphamanager-obj")==null)){var t=document.createElement("a");t.setAttribute("style","inline-block; margin-top: 14px; margin-left: auto; margin-right: auto; -webkit-user-select: none");t.setAttribute("href","javascript:void(0");t.setAttribute("title",y);t.setAttribute("hidefocus","true");t.setAttribute("class","cke_dialog_ui_button");t.setAttribute("role","button");t.setAttribute("id","alphamanager_browse_btn");var p=document.createElement("span");p.setAttribute("class","cke_dialog_ui_button");p.innerText=y;t.appendChild(p);var s="info:txtUrl";var u=f;var o=false;if(x.parentElement.parentElement.parentElement.parentElement.parentElement.getAttribute("name")){s="Link:txtUrl";u=a;o=true;}if(v.getName()!="image"){s="info:url";u=a;}if(typeof(window.alphamanager_se)==="undefined"){window.alphamanager_se=[];}t.setAttribute("data-alphamanager-obj",window.alphamanager_se.length);(function(){var z=v;window.alphamanager_se.push({url:u,isImage:o,getDialog:function(){return z;},filebrowser:{onSelect:function(){},target:s}});})();x.parentNode.insertBefore(t,x);x.parentNode.removeChild(x);t.onclick=function(){var z=r;var A=this.getAttribute("data-alphamanager-obj");var B=window.alphamanager_se[A];z._.filebrowserSe=B;window.alphamanager_parentDlg=B.getDialog();window.alphamanager_type=B.isImage?"image":"";var z=r;z.openDialog("alphamanager");};}}}var a;var f;var d=true;CKEDITOR.plugins.add("alphamanager",{lang:"en",init:function(t){var v=k(t,"alphamanager","skin");if(typeof v==="undefined"){v="flat";}var q=k(t,"alphamanager","skinMod");if(typeof q==="undefined"){q="";}window.alphamanager_skin=v;window.alphamanager_skinMod=q;a=h()+"index.html?skin="+v;if(q!=null&&q.length>0){a+="&skinMod="+q;}f=a+"&type=image";m("filebrowserBrowseUrl",a);m("filebrowserImageBrowseUrl",f);t.on("dialogShow",function(w){var x=w.editor;var y=w.data;l(x,y);});var u=window,o="inner";if(!("innerWidth" in window)){o="client";u=document.documentElement||document.body;}var r=u[o+"Height"];var p=1316;var s=700;if(s+90>r){s=r-90;}c(document,".cke-btn-disabled {"+"background-color: lightgray !important;"+"background: none !important;"+"border: #A8A8A8 solid 1px !important;"+"color: #9E9E9E !important;"+"text-shadow: 0px 0px 0px transparent !important;"+"font-weight: normal !important;"+"cursor: default !important;"+"}"+".cke-btn-disabled > span {"+"text-shadow: 0px 0px 0px transparent !important;"+"cursor: default !important;"+"}"+".cke-btn-no-focus:focus {"+"box-shadow: none !important;"+"-webkit-box-shadow: none !important;"+"padding: 4px 0 !important;"+"-moz-box-shadow: none !important;"+"border-width: 1px !important;"+"}");window.alphamanager_external_call=function(x,z,w,y){window.alphamanager_on_file_selected=y;window.alphamanager_preselected_file=z;x.openDialog("alphamanager");};CKEDITOR.dialog.add("alphamanager",function(w){return{title:"Alpha Manager file browser",width:p,height:s,padding:0,resizable:CKEDITOR.DIALOG_RESIZE_NONE,onShow:function(){var y=document.getElementById("alphamanager_iframe_"+i(w));if(y!=null){y.parentNode.removeChild(y);}var x=document.getElementById("alphamanager_iframe_wrap_"+i(w));var y=document.createElement("iframe");y.id="alphamanager_iframe_"+i(w);y.name="alphamanager_iframe_"+i(w);y.setAttribute("style","width:100%;height:"+s+"px");x.appendChild(y);var A=CKEDITOR.currentInstance._.filebrowserFn;window.alphamanager_cke_func_num=A;var C=a=h()+"index.html";window.alphamanager_onload=function(G){var F=y.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;var E=F.offsetWidth;F.style.width=G+"px";var D=F.style.left.substr(0,F.style.left.length-2);F.style.left=(parseInt(D)+(E-parseInt(G))/2)+"px";};y.setAttribute("src",C);g(document.getElementById(this.getButton("ok").domId),"cke-btn-no-focus cke-btn-disabled");
+g(document.getElementById(this.getButton("cancel").domId),"cke-btn-no-focus");if(d){var z=y.parentNode.parentNode;z.setAttribute("style",z.getAttribute("style")+";padding:0");var B=y.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;B.setAttribute("style",B.getAttribute("style")+";padding:0");d=false;}},onOk:function(){var x=document.getElementById("alphamanager_iframe_"+i(w));x.contentWindow.setFile();},contents:[{id:"tab-basic",elements:[{type:"html",html:'<div id="alphamanager_iframe_wrap_'+i(w)+'" style="height:100%"></div>'}]}]};});}});})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/find.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/find.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/list.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/list.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/loading2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/loading2.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/order.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/order.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/thumbnails.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/_img/thumbnails.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/avi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/avi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/conf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/conf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/css.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/css.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/default.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/default.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/doc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/doc.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/flv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/flv.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/htaccess.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/htaccess.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/html.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/html.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/images.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/images.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/js.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/js.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/log.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/log.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/mp3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/mp3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/pdf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/pdf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/php.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/php.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/png.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/png.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/ppt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/ppt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/psd.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/psd.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/script.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/script.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/txt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/txt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/xls.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/xls.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/xml.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/xml.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/zip.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_list/zip.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/avi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/avi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/conf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/conf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/css.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/css.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/default.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/default.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/doc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/doc.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/flv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/flv.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/htaccess.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/htaccess.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/html.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/html.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/js.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/js.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/log.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/log.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/mp3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/mp3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/pdf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/pdf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/php.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/php.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/png.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/png.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/ppt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/ppt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/psd.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/psd.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/script.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/script.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/txt (2).png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/txt (2).png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/txt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/txt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/xls.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/xls.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/xml.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/xml.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/zip.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/filetype_thumb/zip.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/__find.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/__find.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/_find.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/_find.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/_thumbnails.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/_thumbnails.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/add.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/add.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/cancel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/cancel.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/copy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/copy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/cut.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/cut.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/delete2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/delete2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/dir-download.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/dir-download.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/download.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/download.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/download2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/download2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/edit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/edit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/find.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/find.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder-selected.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder_delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder_delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder_rename.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/folder_rename.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/list.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/list.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/loading2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/loading2.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/minus-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/minus-selected.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/minus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/minus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/order.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/order.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/paste.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/paste.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/paste2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/paste2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/plus-selected.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/plus-selected.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/plus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/plus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/preview.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/preview.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/rename.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/rename.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/rename2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/rename2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/select.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/select.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/thumbnails.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/thumbnails.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload_fail.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload_fail.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload_ok.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/img/upload_ok.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/skin.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/skin.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/skins/flat/skin.css	(revision 2)
@@ -0,0 +1,396 @@
+body {
+    font-family: Arial;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor:default !important;
+    padding:0;
+    margin:0;
+    background:#FFF;
+    height:100%;
+    width:100%;
+    overflow: hidden;
+    color: rgb(0, 153, 255);
+}
+::selection { background: #7DCFFD; color: white; }
+
+ul{
+    list-style:none;
+    margin:0;
+    padding:0;
+}
+
+#wraper{
+    height:100%;
+}
+
+#wraper, #menuDir, #menuFile, #pnlEmptyDir, #pnlDirList ul{
+    display:none;
+}
+
+.scrollPane{
+    height:400px;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+.scrollPane.noScroll { overflow-y: hidden; }
+
+a {text-decoration:none; color:#DD7700; }
+
+select:focus, input:focus { outline-width: 0; }
+select { border: 1px solid rgb(168, 168, 168); }
+input::-moz-focus-inner { border: 0; }
+select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; }
+
+#dirActions { padding: 0; min-width: 238px;  }
+#fileActions { padding: 0; }
+#dirActions.selected, #fileActions.selected {}
+.actions { margin-bottom: 10px; white-space: nowrap; overflow-y: hidden; padding: 0; background-color: #526AB6; }
+#dirActions .actions, #dirActions .scrollPane { padding-right: 5px; }
+#fileActions .actions, #fileActions .scrollPane { }
+.pnlDirs { overflow-x: hidden; overflow-y: auto; }
+
+#copyright { position: absolute; bottom: 0; left: 0; font-size: 15px; z-index: 50; padding-bottom: 10px; padding-left: 10px; }
+.hc #copyright { color: white; }
+
+.si_btn {
+    width: 76px;
+    padding: 15px 10px;
+    height: 84px;
+    line-height: 100px;
+    font-size: 12px;
+    background-position: center 15px;
+    background-repeat: no-repeat;
+    background-color: transparent;
+    border: none;
+    cursor: pointer;
+    color: white;
+}
+.si_btn:hover, .si_btn:focus { background-color: #5F81EC; }
+
+.si_toolbar_item.disabled {
+    opacity: 0.3;
+    cursor: default;
+}
+.si_toolbar_item.disabled:hover, .si_toolbar_item.disabled:focus { }
+.si_btn.disabled:hover, .si_btn.disabled:focus { background-color: transparent; }
+#btnSearch.disabled input, #btnOrder.disabled select { pointer-events:none; }
+
+.si_btn.si_separator {
+    width: 5px;
+    border: none;
+    background-color: transparent;
+    cursor: default;
+    display: inline-block;
+    height: 45px;
+    padding: 0;
+    margin: 0;
+}
+.si_toolbar_item { margin-right: 5px; }
+.si_toolbar_item:last-child { margin-right: 0; }
+
+.si_btns_choose { display: inline-block; }
+.si_btns_choose .si_btn { height: 84px; }
+.si_btns_choose .si_btn:first-child { margin-left: 0; }
+.si_btns_choose .si_btn:last-child { border-right: none; }
+.si_btns_choose .si_btn.selected { background-color: #009BD8; }
+
+#btnAddDir { background-image: url(img/add.png); }
+#btnRenameDir { background-image: url(img/folder_rename.png); }
+#btnDeleteDir { background-image: url(img/folder_delete.png); }
+#btnDownloadDir { background-image: url(img/dir-download.png); }
+#btnDirCut { background-image: url(img/cut.png); }
+#btnDirCopy { background-image: url(img/copy.png); }
+#btnDirPaste { background-image: url(img/paste.png); }
+
+#btnSelectFile { background-image: url(img/select.png);}
+#btnAddFile { background-image: url(img/upload.png); }
+#btnAddFile.cancel { background-image: url(img/cancel.png); }
+#btnEditFile { background-image: url(img/edit.png); }
+#btnPreviewFile { background-image: url(img/preview.png); }
+#btnRenameFile { background-image: url(img/rename.png); }
+#btnDownloadFile { background-image: url(img/download.png); }
+#btnDeleteFile { background-image: url(img/delete.png); }
+#btnCutFile { background-image: url(img/cut.png); }
+#btnCopyFile { background-image: url(img/copy.png); }
+#btnPasteFile { background-image: url(img/paste.png); }
+
+#btnListView {  background-image: url(img/list.png); }
+#btnThumbView {  background-image: url(img/thumbnails.png); }
+
+.si_pnl_order {
+    display: inline-block;
+    padding: 10px;
+    height: 52px;
+    font-size: 12px;
+    background-image: url(img/order.png);
+    background-position: 21px 10px;
+    background-repeat: no-repeat;
+    color: white;
+}
+.si_pnl_order_desc {
+    display: inline-block;
+    line-height: 100px;
+    width: 55px;
+    text-align: center;
+}
+.si_pnl_order_select {
+    display: inline-block;
+    margin: 12px 8px 0 15px;
+    vertical-align: top;
+}
+.si_pnl_order_select > select {
+    background: #43BEEE;
+    color: white;
+    border: rgb(139, 201, 241) 1px solid;;
+    font-size: 18px;
+    margin-top: 0px;
+}
+
+.si_pnl_find {
+    display: inline-block;
+    padding: 10px;
+    height: 52px;
+    font-size: 12px;
+    background-image: url('img/find.png');
+    background-position: 21px 10px;
+    background-repeat: no-repeat;
+    color: white;
+}
+.si_pnl_find_desc {
+    display: inline-block;
+    line-height: 100px;
+    width: 55px;
+    text-align: center;
+}
+.si_pnl_find_box {
+    display: inline-block;
+    margin: 12px 8px 0 15px;
+    vertical-align: top;
+    background: #65CEE9;
+    color: white;
+    border: 1px solid #2BABCC;
+    font-size: 18px;
+}
+#txtSearch {
+    font-size: 18px;
+    width: 180px;
+    margin: 0;
+    background: #43BEEE;
+    color: white;
+    border: rgb(139, 201, 241) 1px solid;
+}
+
+.si_tree_item { display:block; padding:6px 3px 3px 3px; cursor:pointer; height: 20px; margin-bottom:3px; color: rgb(0, 153, 255); }
+.si_tree_item.cut { opacity: 0.5; }
+.si_tree_item > div { float: left; }
+.si_tree_item:hover, .si_tree_item.selected { background: #FF8500; color: white; }
+#pnlDirList { margin-left:4px; }
+#pnlDirList ul{ padding:0 0 0 20px; }
+#pnlDirList.disabled .si_tree_item { pointer-events:none; cursor: default; opacity: 0.6; }
+#pnlDirList.disabled .si_tree_item:hover { background: transparent; }
+
+#pnlDirList.hide-root > li > .si_tree_item { display: none; }
+#pnlDirList.hide-root > li > ul { padding-left: 0; }
+
+
+.si_tree_item_dir { display: inline-block; background-image: url(img/folder.png); background-repeat: no-repeat; width: 24px; height: 24px; margin-top: -4px; margin-left: 3px; }
+.si_tree_item:hover .si_tree_item_dir, .si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); }
+.si_tree_item_plus { background-image: url(img/plus.png); background-repeat: no-repeat; background-position: 0 5px; width: 13px; height: 18px; margin-top: -2px; }
+.si_tree_item:hover .si_tree_item_plus, .si_tree_item.selected .si_tree_item_plus { background-image: url(img/plus-selected.png); }
+.si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus.png); }
+.si_tree_item:hover .si_tree_item_plus.si_tree_item_plus_minus, .si_tree_item.selected .si_tree_item_plus.si_tree_item_plus_minus { background-image: url(img/minus-selected.png); }
+
+.si_tree_item_plus.si_tree_item_plus_blank { background-image: none !important; }
+.si_tree_item .name { font-size: 14px; line-height: 18px; margin-left: 4px; margin-right: 4px; }
+.si_tree_item_count {
+    float: right !important;
+    position: relative;
+    right: 0;
+    font-size: 14px;
+    width: 40px;
+    background-color: white;
+    text-align: center;
+    height: 21px;
+    margin-top: -2px;
+    line-height: 23px;
+
+    margin-top: -6px;
+    margin-right: -3px;
+    height: 29px;
+    border-top-right-radius: 3px;
+    border-bottom-right-radius: 3px;
+    line-height: 29px;
+    color: #FF8500;
+}
+
+.si_tree_item.selected, .si_tree_item:hover { font-weight: normal; }
+.si_tree_item:hover .si_tree_item_count, .si_tree_item.selected .si_tree_item_count { background-color: #DA7100; color: white; font-weight: normal; }
+.si_tree_item.selected .si_tree_item_dir { background-image: url(img/folder-selected.png); }
+
+#pnlEmptyDir, #pnlSearchNoFiles { display: none; width: 100%; height: 98%; color: #88B9F8; font-size: 16px; }
+#pnlEmptyDir > div, #pnlSearchNoFiles > div { display: table-cell; vertical-align: middle; text-align: center; }
+
+
+.contextMenu{
+    position:absolute;
+    z-index:1000 !important;
+    background-color: #3FB3E0;
+    font-size: 15px;
+    min-width:140px;
+}
+.contextMenu a {
+    padding: 5px 25px 5px 20px;
+    display: block;
+    background-repeat:no-repeat;
+    background-position: 4px 6px;
+    color:white;
+}
+.contextMenu a:last-child { border-bottom: none; }
+.contextMenu a:hover { color: white; background-color: #FF8500; }
+.contextMenu a.disabled { opacity: 0.4; cursor: default; }
+
+#alphamanager_preview { display: none; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: #333; }
+#alphamanager_preview img { max-width: 100%; max-height: 100%; width: auto; height: auto; position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; }
+#alphamanager_preview_close {
+    position: relative;
+    right: 0;
+    top: 4px;
+    padding: 2px 6px;
+    background-color: #333;
+    color: white;
+    display: inline-block;
+    cursor: default;
+    font-size: 12px;
+}
+
+
+#pnlUploadFiles { width: 100%; display: none; }
+.alphaUploader-dropArea {
+    display: table-cell;
+    vertical-align: middle;
+    text-align: center;
+    width: 99%;
+    box-sizing: border-box;
+    height: 100%;
+    border: 3px dashed #ACD1FF;
+    font-size: 18px;
+}
+.alphaUploader-elements { padding: 0 50px; }
+.alphaUploader-or {
+    padding: 25px;
+    font-size: 16px;
+    color: #66AAFF;
+}
+.alphaUploader-dropArea input { font-size: 16px; }
+.alphaUploader-files { display: none; width: 100%; height: 100%; padding: 30px 0; position: relative; }
+.alphaUploader-files table { margin: 0 auto; }
+.alphaUploader-header { font-size: 16px; font-weight: bolder; padding-bottom: 5px; }
+.alphaUploader-header > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 34px; line-height: 30px; display: inline-block; }
+.alphaUploader-total { font-size: 16px; padding-bottom: 15px; }
+.alphaUploader-cancelInput { background: white; border: #88B9F8 1px solid; padding: 3px 10px; font-size: 14px; cursor: pointer; }
+.alphaUploader-cancelInput:hover { background-color: #EEE; }
+.alphaUploader-cancelInput-disabled { cursor: default; background-color: #F8F8F8 !important; border-color: #C8C8C8; opacity: 0.6;}
+.alphaUploader-cancelInput-disabled:hover, .alphaUploader-cancelInput-disabled:focus { background-color: white; }
+
+.alphaUploader-filesList { position: absolute; top: 135px; bottom: 0; overflow-y: auto; left:0; right: 0; }
+
+.alphaUploader-file { border-bottom: 1px solid #88B9F8; font-size: 15px; }
+.alphaUploader-file:last-child { border-bottom: none; }
+.alphaUploader-status { width: 30px; background-repeat: no-repeat; }
+.alphaUploader-status.alphaUploader-status-ok { background-image: url(img/upload_ok.png); }
+.alphaUploader-status.alphaUploader-status-fail { background-image: url(img/upload_fail.png); }
+.alphaUploader-filename { text-align: right; }
+.alphaUploader-filesize { text-align: right; }
+.alphaUploader-progressOuter { width: 200px; border: 1px solid #5D77FF; text-align: left; height: 20px; overflow: hidden; margin: 0 15px;}
+.alphaUploader-progressInner { display: inline-block; height: 20px; background-color: #5D77FF; width: 0; }
+
+#pnlLoading { width: 100%; display: none; }
+#pnlLoading.visible { display: table; opacity: 1; }
+#pnlLoading > div { width: 100%; height: 100%; font-size: 18px; padding-bottom: 15px; display: table-cell; vertical-align: middle; text-align: center; }
+#pnlLoading > div > div { background-image: url(img/loading.gif); background-position: left 2px; background-repeat: no-repeat; padding-left: 34px; line-height: 30px; display: inline-block; }
+
+.dlg-bg { background-color: #000000; opacity: 0.2; position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 49999; display: none; }
+.dlg-outer {
+    z-index: 50000;
+    position: absolute;
+    left: 0; top: 0; width: 100%; height: 100%;
+    display: none;
+}
+.dlg-wrap {
+    display: table-cell;
+    vertical-align: middle;
+    text-align: center;
+}
+.dlg {
+    background-color: #1DAEFF;
+    border-radius: 6px;
+    color: white;
+    overflow: hidden;
+    display: inline-block;
+}
+.dlg .title { font-size: 18px; padding: 8px 40px 7px 40px; background-color: #005BAF; color: white; }
+.dlg .content { padding: 40px; font-size: 16px; }
+.dlg input { width: 300px; font-size: 16px; border: 1px solid #02AEF1; padding: 5px; color: #3A6D81; }
+.dlg a { color: white; text-decoration: none; border-bottom: white 1px dotted; }
+.dlg a:hover, .dlg a:focus { text-decoration: none; }
+
+.dlg-btn {
+    margin: 0 10px;
+    padding: 5px 0;
+    display: inline-block;
+    color: white;
+    font-size: 15px;
+    margin-bottom: 20px;
+    width: 90px;
+    text-align: center;
+    border-radius: 3px;
+}
+#dlgTextBtnCancel, #dlgConfirmBtnCancel { background-color: #F14444; border-bottom: none; }
+#dlgTextBtnCancel:hover, #dlgTextBtnCancel:focus, #dlgConfirmBtnCancel:hover, #dlgConfirmBtnCancel:focus { background-color: #D33232; border-bottom: none; }
+#dlgTextBtnCancel.disabled:hover, #dlgTextBtnCancel.disabled:focus, #dlgConfirmBtnCancel.disabled:hover, #dlgConfirmBtnCancel.disabled:focus { background-color: #F14444;  border-bottom: none; }
+#dlgTextBtnOK, #dlgConfirmBtnOK, #dlgAlertBtnOK { background-color: #00FFB8; border-bottom: none; }
+#dlgTextBtnOK:hover, #dlgTextBtnOK:focus, #dlgConfirmBtnOK:hover, #dlgConfirmBtnOK:focus, #dlgAlertBtnOK:hover, #dlgAlertBtnOK:focus { background-color: #008661; border-bottom: none; }
+#dlgTextBtnOK.disabled:hover, #dlgTextBtnOK.disabled:focus, #dlgConfirmBtnOK.disabled:hover, #dlgConfirmBtnOK.disabled:focus, #dlgAlertBtnOK.disabled:hover, #dlgAlertBtnOK.disabled:focus { background-color: #00FFB8; border-bottom: none; }
+.dlg-btn.disabled { opacity: 0.6; cursor: default; }
+
+#dlgAlert .buttons { text-align: center; }
+
+#dlgAlert { z-index: 50002; }
+#dlgAlertBg { z-index: 50001; }
+#dlgConfirm, #dlgText { z-index: 49996; }
+#dlgConfirmBg, #dlgTextBg { z-index: 49995; }
+
+#pnlViewList { display: none; width: 100%; border-spacing: 0; font-size: 16px; }
+#pnlViewList td { cursor: pointer; padding-bottom: 0; height: 28px; padding-top: 2px; line-height: 21px; }
+#pnlViewList .file.cut { opacity: 0.5; }
+#pnlViewList .file-icon { width: 26px; text-align: left; background-position: 0 3px; background-repeat: no-repeat; }
+#pnlViewList .file-size { width: 110px; text-align: right; }
+#pnlViewList .file-date { width: 170px; text-align: right; padding-right: 8px; }
+#pnlViewList .file:hover { background-color: #F4F4F4; }
+#pnlViewList .file.selected { background-color: #FF9530; color: white; }
+#pnlViewList .file.selected .file-icon { }
+#fileActions.selected #pnlViewList .file.selected { background-color: #FF8500; color: white; }
+
+#pnlViewThumbs { display: none; }
+#pnlViewThumbs table { width: 100%; border-spacing: 0; }
+#pnlViewThumbs td { width: 200px; }
+#pnlViewThumbs .file { height: 193px; width: 159px; display: inline-block; cursor: pointer; font-size: 14px; padding: 6px; overflow: hidden; }
+#pnlViewThumbs .file.cut { opacity: 0.5; }
+#pnlViewThumbs .file:hover { background-color: #E4E6FF; }
+#pnlViewThumbs .file-icon { background-position: center; background-repeat: no-repeat; }
+#pnlViewThumbs .file-name { padding-top: 14px; text-align: center; white-space: nowrap; }
+#pnlViewThumbs .file-size { padding-top: 3px; text-align: center; white-space: nowrap; color: rgb(117, 200, 255); }
+#pnlViewThumbs .file-date { display: none; }
+#pnlViewThumbs .file.selected { background-color: #FF9530 !important; }
+#fileActions.selected #pnlViewThumbs .file.selected { background-color: #FF8500; }
+#pnlViewThumbs .file.selected .file-icon {}
+#pnlViewThumbs .file.selected .file-icon.icon-ext {}
+#pnlViewThumbs .file.selected .file-name { color: white; }
+#pnlViewThumbs .file.selected .file-size { color: white; }
+
+.mod_sea .actions { background-color: #007EAF; }
+.mod_sea .si_btn:hover, .mod_sea .si_btn:focus { background-color: #009BD8; }
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/system.inc.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/alphamanager/system.inc.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/alphamanager/system.inc.php	(revision 2)
@@ -0,0 +1,8 @@
+<?php
+//error_reporting(0);
+ini_set('display_errors', 'off');
+define('BASE_PATH', dirname(__FILE__));
+date_default_timezone_set('UTC');
+mb_internal_encoding("UTF-8");
+mb_regex_encoding(mb_internal_encoding());
+

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/alphamanager/system.inc.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/autogrow/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/autogrow/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/autogrow/plugin.js	(revision 2)
@@ -0,0 +1,221 @@
+﻿/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The Auto Grow plugin.
+ */
+
+'use strict';
+
+( function() {
+    CKEDITOR.plugins.add( 'autogrow', {
+        init: function( editor ) {
+            // This feature is available only for themed ui instance.
+            if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )
+                return;
+
+            editor.on( 'instanceReady', function() {
+                // Simply set auto height with div wysiwyg.
+                if ( editor.editable().isInline() )
+                    editor.ui.space( 'contents' ).setStyle( 'height', 'auto' );
+                // For classic (`iframe`-based) wysiwyg we need to resize the editor.
+                else
+                    initIframeAutogrow( editor );
+            } );
+        }
+    } );
+
+    function initIframeAutogrow( editor ) {
+        var lastHeight,
+            doc,
+            markerContainer,
+            scrollable,
+            marker,
+            configBottomSpace = editor.config.autoGrow_bottomSpace || 0,
+            configMinHeight = editor.config.autoGrow_minHeight !== undefined ? editor.config.autoGrow_minHeight : 200,
+            configMaxHeight = editor.config.autoGrow_maxHeight || Infinity,
+            maxHeightIsUnlimited = !editor.config.autoGrow_maxHeight;
+
+        editor.addCommand( 'autogrow', {
+            exec: resizeEditor,
+            modes: { wysiwyg: 1 },
+            readOnly: 1,
+            canUndo: false,
+            editorFocus: false
+        } );
+
+        var eventsList = { contentDom: 1, key: 1, selectionChange: 1, insertElement: 1, mode: 1 };
+        for ( var eventName in eventsList ) {
+            editor.on( eventName, function( evt ) {
+                // Some time is required for insertHtml, and it gives other events better performance as well.
+                if ( evt.editor.mode == 'wysiwyg' ) {
+                    setTimeout( function() {
+                        if ( isNotResizable() ) {
+                            lastHeight = null;
+                            return;
+                        }
+
+                        resizeEditor();
+
+                        // Second pass to make correction upon the first resize, e.g. scrollbar.
+                        // If height is unlimited vertical scrollbar was removed in the first
+                        // resizeEditor() call, so we don't need the second pass.
+                        if ( !maxHeightIsUnlimited )
+                            resizeEditor();
+                    }, 100 );
+                }
+            } );
+        }
+
+        // Coordinate with the "maximize" plugin. (#9311)
+        editor.on( 'afterCommandExec', function( evt ) {
+            if ( evt.data.name == 'maximize' && evt.editor.mode == 'wysiwyg' ) {
+                if ( evt.data.command.state == CKEDITOR.TRISTATE_ON )
+                    scrollable.removeStyle( 'overflow-y' );
+                else
+                    resizeEditor();
+            }
+        } );
+
+        editor.on( 'contentDom', refreshCache );
+
+        refreshCache();
+        editor.config.autoGrow_onStartup && editor.execCommand( 'autogrow' );
+
+        function refreshCache() {
+            doc = editor.document;
+            markerContainer = doc[ CKEDITOR.env.ie ? 'getBody' : 'getDocumentElement' ]();
+
+            // Quirks mode overflows body, standards overflows document element.
+            scrollable = CKEDITOR.env.quirks ? doc.getBody() : doc.getDocumentElement();
+
+            marker = CKEDITOR.dom.element.createFromHtml(
+                '<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">' +
+                    ( CKEDITOR.env.webkit ? '&nbsp;' : '' ) +
+                '</span>',
+                doc );
+        }
+
+        function isNotResizable() {
+            var maximizeCommand = editor.getCommand( 'maximize' );
+
+            return (
+                !editor.window ||
+                // Disable autogrow when the editor is maximized. (#6339)
+                maximizeCommand && maximizeCommand.state == CKEDITOR.TRISTATE_ON
+            );
+        }
+
+        // Actual content height, figured out by appending check the last element's document position.
+        function contentHeight() {
+            // Append a temporary marker element.
+            markerContainer.append( marker );
+            var height = marker.getDocumentPosition( doc ).y + marker.$.offsetHeight;
+            marker.remove();
+
+            return height;
+        }
+
+        function resizeEditor() {
+            // Hide scroll because we won't need it at all.
+            // Thanks to that we'll need only one resizeEditor() call per change.
+            if ( maxHeightIsUnlimited )
+                scrollable.setStyle( 'overflow-y', 'hidden' );
+
+            var currentHeight = editor.window.getViewPaneSize().height,
+                newHeight = contentHeight();
+
+            // Additional space specified by user.
+            newHeight += configBottomSpace;
+            newHeight = Math.max( newHeight, configMinHeight );
+            newHeight = Math.min( newHeight, configMaxHeight );
+
+            // #10196 Do not resize editor if new height is equal
+            // to the one set by previous resizeEditor() call.
+            if ( newHeight != currentHeight && lastHeight != newHeight ) {
+                newHeight = editor.fire( 'autoGrow', { currentHeight: currentHeight, newHeight: newHeight } ).newHeight;
+                editor.resize( editor.container.getStyle( 'width' ), newHeight, true );
+                lastHeight = newHeight;
+            }
+
+            if ( !maxHeightIsUnlimited ) {
+                if ( newHeight < configMaxHeight && scrollable.$.scrollHeight > scrollable.$.clientHeight )
+                    scrollable.setStyle( 'overflow-y', 'hidden' );
+                else
+                    scrollable.removeStyle( 'overflow-y' );
+            }
+        }
+    }
+} )();
+
+/**
+ * The minimum height that the editor can assume when adjusting to content by using the Auto Grow
+ * feature. This option accepts a value in pixels, without the unit (for example: `300`).
+ *
+ * Read more in the [documentation](#!/guide/dev_autogrow)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/autogrow.html).
+ *
+ *        config.autoGrow_minHeight = 300;
+ *
+ * @since 3.4
+ * @cfg {Number} [autoGrow_minHeight=200]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The maximum height that the editor can assume when adjusting to content by using the Auto Grow
+ * feature. This option accepts a value in pixels, without the unit (for example: `600`).
+ * Zero (`0`) means that the maximum height is not limited and the editor will expand infinitely.
+ *
+ * Read more in the [documentation](#!/guide/dev_autogrow)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/autogrow.html).
+ *
+ *        config.autoGrow_maxHeight = 400;
+ *
+ * @since 3.4
+ * @cfg {Number} [autoGrow_maxHeight=0]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Whether automatic editor height adjustment brought by the Auto Grow feature should happen on
+ * editor creation.
+ *
+ * Read more in the [documentation](#!/guide/dev_autogrow)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/autogrow.html).
+ *
+ *        config.autoGrow_onStartup = true;
+ *
+ * @since 3.6.2
+ * @cfg {Boolean} [autoGrow_onStartup=false]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Extra vertical space to be added between the content and the editor bottom bar when adjusting
+ * editor height to content by using the Auto Grow feature. This option accepts a value in pixels,
+ * without the unit (for example: `50`).
+ *
+ * Read more in the [documentation](#!/guide/dev_autogrow)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/autogrow.html).
+ *
+ *        config.autoGrow_bottomSpace = 50;
+ *
+ * @since 3.6.2
+ * @cfg {Number} [autoGrow_bottomSpace=0]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Fired when the Auto Grow plugin is about to change the size of the editor.
+ *
+ * @event autogrow
+ * @member CKEDITOR.editor
+ * @param {CKEDITOR.editor} editor This editor instance.
+ * @param data
+ * @param {Number} data.currentHeight The current editor height (before resizing).
+ * @param {Number} data.newHeight The new editor height (after resizing). It can be changed
+ * to achieve a different height value to be used instead.
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/autogrow/samples/autogrow.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/autogrow/samples/autogrow.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/autogrow/samples/autogrow.html	(revision 2)
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+-->
+<html>
+<head>
+	<meta charset="utf-8">
+	<title>AutoGrow Plugin &mdash; CKEditor Sample</title>
+	<script src="../../../ckeditor.js"></script>
+	<link rel="stylesheet" href="../../../samples/old/sample.css">
+	<meta name="ckeditor-sample-name" content="AutoGrow plugin">
+	<meta name="ckeditor-sample-group" content="Plugins">
+	<meta name="ckeditor-sample-description" content="Using the AutoGrow plugin in order to make the editor grow to fit the size of its content.">
+</head>
+<body>
+	<h1 class="samples">
+		<a href="../../../samples/old/index.html">CKEditor Samples</a> &raquo; Using AutoGrow Plugin
+	</h1>
+	<div class="warning deprecated">
+		This sample is not maintained anymore. Check out its <a href="http://sdk.ckeditor.com/samples/autogrow.html">brand new version in CKEditor SDK</a>.
+	</div>
+	<div class="description">
+		<p>
+			This sample shows how to configure CKEditor instances to use the
+			<strong>AutoGrow</strong> (<code>autogrow</code>) plugin that lets the editor window expand
+			and shrink depending on the amount and size of content entered in the editing area.
+		</p>
+		<p>
+			In its default implementation the <strong>AutoGrow feature</strong> can expand the
+			CKEditor window infinitely in order to avoid introducing scrollbars to the editing area.
+		</p>
+		<p>
+			It is also possible to set a maximum height for the editor window. Once CKEditor
+			editing area reaches the value in pixels specified in the
+			<code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_maxHeight">autoGrow_maxHeight</a></code>
+			configuration setting, scrollbars will be added and the editor window will no longer expand.
+		</p>
+		<p>
+			To add a CKEditor instance using the <code>autogrow</code> plugin and its
+			<code>autoGrow_maxHeight</code> attribute, insert the following JavaScript call to your code:
+		</p>
+<pre class="samples">
+CKEDITOR.replace( '<em>textarea_id</em>', {
+	<strong>extraPlugins: 'autogrow',</strong>
+	autoGrow_maxHeight: 800,
+
+	// Remove the Resize plugin as it does not make sense to use it in conjunction with the AutoGrow plugin.
+	removePlugins: 'resize'
+});</pre>
+		<p>
+			Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
+			the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor. The maximum height should
+			be given in pixels.
+		</p>
+	</div>
+	<form action="../../../samples/sample_posteddata.php" method="post">
+		<p>
+			<label for="editor1">
+				CKEditor using the <code>autogrow</code> plugin with its default configuration:
+			</label>
+			<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script>
+
+				CKEDITOR.replace( 'editor1', {
+					extraPlugins: 'autogrow',
+					removePlugins: 'resize'
+				});
+
+			</script>
+		</p>
+		<p>
+			<label for="editor2">
+				CKEditor using the <code>autogrow</code> plugin with maximum height set to 400 pixels:
+			</label>
+			<textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script>
+
+				CKEDITOR.replace( 'editor2', {
+					extraPlugins: 'autogrow',
+					autoGrow_maxHeight: 400,
+					removePlugins: 'resize'
+				});
+
+			</script>
+		</p>
+		<p>
+			<input type="submit" value="Submit">
+		</p>
+	</form>
+	<div id="footer">
+		<hr>
+		<p>
+			CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2015, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/images/_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/backup/images/_icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/images/clear.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/backup/images/clear.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/images/icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/backup/images/icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/backup/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/backup/lang/de.js	(revision 2)
@@ -0,0 +1,6 @@
+ CKEDITOR.plugins.setLang("backup","de",{
+     button : 'Backup aktivieren',
+    mess:'Sind Sie sicher, dass Sie den aktuellen Inhalt mit dem Backup ' + unescape("%FC") + 'berschreiben wollen?',
+    mess1:'Sind Sie sicher, dass Sie das gesamte Backup l' + unescape("%F6") + 'schen wollen?',
+    mess2:'Sind Sie sicher, dass Sie das gew' + unescape("%E4") + 'hlte Backup l' + unescape("%F6") + 'schen wollen?'
+ });
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/backup/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/backup/lang/en.js	(revision 2)
@@ -0,0 +1,6 @@
+ CKEDITOR.plugins.setLang("backup","en",{
+ 	button : 'activate backup',
+	mess:'Are you sure you want to replace the existing text with the text of the backup?',
+	mess1:'Are you sure you want to remove the entire backup?',
+	mess2:'Are you sure you want to remove the selected backup?'
+ });
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/backup/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/backup/lang/ru.js	(revision 2)
@@ -0,0 +1,6 @@
+ CKEDITOR.plugins.setLang("backup","ru",{
+ 	button : 'activate backup',
+	mess:'Вы уверены, что хотите заменить имеющийся текст, текстом из бекапа?',
+	mess1:'Вы уверены, что хотите удалить весь бекап?',
+	mess2:'Are you sure you want to remove the selected backup?'
+ });
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/backup/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/backup/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/backup/plugin.js	(revision 2)
@@ -0,0 +1,120 @@
+CKEDITOR.plugins.add( 'backup',{
+    lang:'ru,en,de',
+    init:function(editor){
+        var delay = 5000;
+        editor.addCommand( 'backup', new CKEDITOR.command(editor, {
+        exec: function( editor ) {
+        this.toggleState();
+        if (editor.getCommand('backup').state === CKEDITOR.TRISTATE_OFF)
+          $('#divbackup_'+editor.name).css('display','none');
+        else
+             $('#divbackup_'+editor.name).css('display','inline');
+             editor.backup();
+      }
+        }));
+      if (editor.config.backup_on_start)
+        editor.getCommand('backup').state = CKEDITOR.TRISTATE_ON;
+    if (editor.config.backup_save_delay)
+        var delay = editor.config.backup_save_delay;
+           
+        editor.ui.addButton( 'Backup',
+        {
+            label: editor.lang.backup.button,
+            command: 'backup',
+            icon: this.path + 'images/icon.png'
+        });
+        
+        editor.on( 'instanceReady', function(e) { 
+            var display = editor.getCommand('backup').state === CKEDITOR.TRISTATE_OFF ? 'display:none;' : 'display:inline;';
+            var div = document.createElement('div'),
+                select = 0,
+                style =  display + ' margin-left:10px;position:relative;margin-top:5px;overflow:hidden;float:right;',
+                bname =  'backup_'+editor.name, init = true, oldtext = '';
+            div.setAttribute('style',style);
+            div.setAttribute('id','divbackup_'+editor.name);
+            if( localStorage.getItem( bname) == undefined )
+                localStorage.setItem( bname,'{}'); // создаем наше хранилище
+            var format = function(_time){
+                var n = new Date(parseInt(_time));
+                var frm = function(dd){
+                    if ( dd < 10 ) dd = '0' + dd;
+                    return dd;
+                };
+                return n.getHours()+'.'+frm(n.getMinutes())+'.'+frm(n.getSeconds());
+            };
+            editor.backup = function(del){
+                if (editor.getCommand('backup').state === CKEDITOR.TRISTATE_OFF) return;
+                var chages = false,now = new Date().getTime(),bu = {};
+                if(del!='del'){
+                    var text = editor.getSnapshot();
+                    if( text!='' ){
+                        if( localStorage.getItem( bname) && oldtext && text!=oldtext ){
+                            bu = JSON.parse(localStorage.getItem( bname));
+                            bu[now] = text;
+                            localStorage.setItem( bname,JSON.stringify(bu));
+                            chages = true;
+                        }
+                    }
+                }else{
+                  var selTime = $('#backuper_'+editor.name).val();
+                  var selIndex = $('#backuper_'+editor.name).prop('selectedIndex');
+                    if( selTime === '---' && confirm( editor.lang.backup.mess1 ) ){
+                        localStorage.setItem( bname,'{}');
+                        chages = true;
+                    }    else if (selTime !== '---' && confirm( editor.lang.backup.mess2 )) {
+                            bu = JSON.parse(localStorage.getItem( bname));
+                            var bu1 = {};
+                            for(var t in bu) {
+                                if (t != (selTime)) {
+                                    bu1[t] = bu[t];
+                                }
+                            }
+                            localStorage.setItem( bname,JSON.stringify(bu1));
+                            $('#backuper_'+editor.name).prop('selectedIndex',0);
+                            bu = bu1;
+                            chages = true;
+                    }
+                }
+                if( chages || init){
+                    if(init&&localStorage.getItem( bname)){
+                        bu = JSON.parse(localStorage.getItem( bname));
+                    }
+                    var opt = '<option>---</option>';
+                    for(var r in bu)
+                        opt+='<option value="'+r+'">'+format(r)+'</option>';
+                    //select.setHtml(opt); does not work with IE 8
+                    $('#backuper_'+editor.name).html(opt);
+                    init = false;
+                }
+                oldtext = text;
+            },
+            editor.restore = function(){
+                if (editor.getCommand('backup').state === CKEDITOR.TRISTATE_OFF) return;
+                var text = editor.getSnapshot();
+                var val = select.getValue();
+                var bu = JSON.parse( localStorage.getItem( bname) );
+                if( bu[val]!=undefined && (text==''||confirm( editor.lang.backup.mess)) ){
+                    editor.loadSnapshot( bu[val] );
+                    restored = true;
+                }
+            };
+            var restored = false;
+            var mixer = 0;
+            editor.on( 'change',function(){
+                clearTimeout(mixer);
+                if (!restored) {
+                    mixer = setTimeout(function(){
+                        editor.backup();
+                    },delay);
+                }
+                restored = false;
+            });
+            div.innerHTML = '<select style="margin-top:-5px;" id="backuper_'+editor.name+'"></select>&nbsp;<input style=" width: 16px;" type="image" value="del" onclick="CKEDITOR.instances[\''+editor.name+'\'].backup(\'del\'); return false;" src="'+CKEDITOR.basePath+'plugins/backup/images/clear.png"/>';
+            //div.onchange = editor.restore; IE8 problems
+            CKEDITOR.document.getById( editor.ui.spaceId?editor.ui.spaceId("bottom"): 'cke_bottom_'+editor.name ).append(new CKEDITOR.dom.node(div));
+            select = CKEDITOR.document.getById( 'backuper_'+editor.name );
+            $('#backuper_'+editor.name).change(editor.restore ); 
+            editor.backup();
+        });
+    }
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/clipboard/dialogs/paste.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/clipboard/dialogs/paste.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/clipboard/dialogs/paste.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("paste",function(c){function k(a){var b=new CKEDITOR.dom.document(a.document),g=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();g.setAttribute("contenteditable",!0);g.on(e.mainPasteEvent,function(a){a=e.initPasteDataTransfer(a);f?a!=f&&(f=e.initPasteDataTransfer()):f=a});if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){a=a.data;var b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+
+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement));b.getWindow().getFrame().removeCustomData("pendingFocus")&&g.focus()}var h=c.lang.clipboard,e=CKEDITOR.plugins.clipboard,f;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data.dataValue,method:"paste",dataTransfer:a.data.dataTransfer||e.initPasteDataTransfer()})},null,null,1E3);return{title:h.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:
+350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||h.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'\x3cdiv style\x3d"white-space:normal;width:340px"\x3e'+
+h.securityMsg+"\x3c/div\x3e"},{type:"html",id:"pasteMsg",html:'\x3cdiv style\x3d"white-space:normal;width:340px"\x3e'+h.pasteMsg+"\x3c/div\x3e"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(),b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='\x3chtml dir\x3d"'+c.config.contentsLangDirection+'" lang\x3d"'+(c.config.contentsLanguage||c.langCode)+
+'"\x3e\x3chead\x3e\x3cstyle\x3ebody{margin:3px;height:95%;word-break:break-all;}\x3c/style\x3e\x3c/head\x3e\x3cbody\x3e\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"\x3ewindow.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(k,a)+",this);\x3c/script\x3e\x3c/body\x3e\x3c/html\x3e",g=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+
+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('\x3ciframe class\x3d"cke_pasteframe" frameborder\x3d"0"  allowTransparency\x3d"true" src\x3d"'+g+'" aria-label\x3d"'+h.pasteArea+'" aria-describedby\x3d"'+a.getContentElement("general","pasteMsg").domId+'"\x3e\x3c/iframe\x3e');f=null;d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody());CKEDITOR.env.air&&k.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");
+a.append(d);if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){var e=CKEDITOR.dom.element.createFromHtml('\x3cspan tabindex\x3d"-1" style\x3d"position:absolute" role\x3d"presentation"\x3e\x3c/span\x3e');e.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(e);this.focus=function(){e.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height",d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),
+b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",{dataValue:d,dataTransfer:f||e.initPasteDataTransfer()})},0)}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/css/codemirror.min.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/css/codemirror.min.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/css/codemirror.min.css	(revision 2)
@@ -0,0 +1 @@
+.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid #c0c0c0}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}100%{}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}100%{}}@keyframes blink{0%{}50%{background-color:transparent}100%{}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}.CodeMirror{font:13px/1.4em monospace;text-align:left}.CodeMirror .activeline{background:#e8f2ff}.CodeMirror .CodeMirror-foldmarker{color:#00f;-ms-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;-webkit-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-matchingtag{background:#ff9600;background:rgba(255,150,0,.3)}.searchCodeButton span,.autoFormat span,.CommentSelectedRange span,.UncommentSelectedRange span{width:16px;height:16px;margin-left:6px}.searchCodeButton span{background:url("../icons/searchcode.png") no-repeat}.autoFormat span{background:url("../icons/autoformat.png") no-repeat}.CommentSelectedRange span{background:url("../icons/commentselectedrange.png") no-repeat}.UncommentSelectedRange span{background:url("../icons/uncommentselectedrange.png") no-repeat}.cke_reset_all .CodeMirror-scroll *{white-space:pre}.cke_reset_all .cm-s-cobalt *,.cke_reset_all .cm-s-erlang-dark *,.cke_reset_all .cm-s-lesser-dark *,.cke_reset_all .cm-s-monokai *,.cke_reset_all .cm-s-night *,.cke_reset_all .cm-s-rubyblue *,.cke_reset_all .cm-s-twilight *,.cke_reset_all .cm-s-xq-dark *,.cke_reset_all .cm-s-base16-dark *,.cke_reset_all .cm-s-3024-night *,.cke_reset_all .cm-s-the-matrix *,.cke_reset_all .cm-s-paraiso-dark *,.cke_reset_all .cm-s-paraiso-light *{color:inherit;font:inherit}.cm-s-cobalt .CodeMirror-selected{background:#b36539 !important}.cm-s-erlang-dark .CodeMirror-selected{background:#b36539 !important}.cm-s-lesser-dark .CodeMirror-selected{background:#45443b !important}.cm-s-monokai .CodeMirror-selected{background:#49483e !important}.cm-s-night .CodeMirror-selected{background:#447 !important}.cm-s-rubyblue .CodeMirror-selected{background:#38566f !important}.cm-s-twilight .CodeMirror-selected{background:#323232 !important}.cm-s-xq-dark .CodeMirror-selected{background:#a8f !important}.cm-s-the-matrix .CodeMirror-selected{background:#494949 !important}.cm-s-mbo .CodeMirror-selected{background:#716c62 !important}.cm-s-blackboard .activeline,.cm-s-cobalt .activeline,.cm-s-erlang-dark .activeline,.cm-s-lesser-dark .activeline,.cm-s-monokai .activeline,.cm-s-night .activeline,.cm-s-rubyblue .activeline,.cm-s-vibrant-ink .activeline,.cm-s-xq-dark .activeline,.cm-s-base16-dark .activeline,.cm-s-3024-night .activeline,.cm-s-paraiso-light .activeline,.cm-s-paraiso-dark .activeline,.cm-s-pastel-on-dark .activeline{background:#757575}.cm-s-pastel-on-dark .activeline{background:#404040}.cm-s-mbo .activeline{background:#716c62}.cm-s-twilight .activeline{background:#494949}.cm-s-the-matrix .activeline{background:#060}.CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px #000;-ms-box-shadow:2px 3px 5px #000;box-shadow:2px 3px 5px #000;border-radius:3px;border:1px solid #c0c0c0;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;max-width:19em;overflow:hidden;white-space:pre;color:#000;cursor:pointer}.CodeMirror-hint-active{background:#08f;color:#fff}.cm-trailingspace{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:none;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25be "}.CodeMirror-foldgutter-folded:after{content:"\25b8 "}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/beautify.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/beautify.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/beautify.min.js	(revision 2)
@@ -0,0 +1,74 @@
+﻿(function(){function n(a,g){for(var h=0;h<g.length;h+=1)if(g[h]===a)return!0;return!1}function F(a,g){return(new O(a,g)).beautify()}function O(r,g){function B(b,d){var e=0;return b&&(e=b.indentation_level,!k.just_added_newline()&&b.line_indent_level>e&&(e=b.line_indent_level)),{mode:d,parent:b,last_text:b?b.last_text:"",last_word:b?b.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,in_case_statement:!1,in_case:!1,
+case_body:!1,indentation_level:e,line_indent_level:b?b.line_indent_level:e,start_line_index:k.get_line_number(),ternary_depth:0}}function y(e){var c=e.newlines,q;if(l.keep_array_indentation&&d.mode===a.ArrayLiteral)for(q=0;q<c;q+=1)p(0<q);else if(l.max_preserve_newlines&&c>l.max_preserve_newlines&&(c=l.max_preserve_newlines),l.preserve_newlines&&1<e.newlines)for(p(),q=1;q<c;q+=1)p(!0);b=e;M[b.type]()}function D(d){(d=void 0===d?!1:d,k.just_added_newline())||(l.preserve_newlines&&b.wanted_newline||
+d?p(!1,!0):l.wrap_line_length&&k.current_line.get_character_count()+b.text.length+(k.space_before_token?1:0)>=l.wrap_line_length&&p(!1,!0))}function p(b,c){if(!c&&";"!==d.last_text&&","!==d.last_text&&"\x3d"!==d.last_text&&"TK_OPERATOR"!==e)for(;d.mode===a.Statement&&!d.if_block&&!d.do_block;)E();k.add_new_line(b)&&(d.multiline_frame=!0)}function A(){k.just_added_newline()&&(l.keep_array_indentation&&d.mode===a.ArrayLiteral&&b.wanted_newline?(k.current_line.push(b.whitespace_before),k.space_before_token=
+!1):k.set_indent(d.indentation_level)&&(d.line_indent_level=d.indentation_level))}function t(d){k.raw?k.add_raw_token(b):(l.comma_first&&"TK_COMMA"===e&&k.just_added_newline()&&","===k.previous_line.last()&&(k.previous_line.pop(),A(),k.add_token(","),k.space_before_token=!0),d=d||b.text,A(),k.add_token(d))}function G(b){d?(v.push(d),m=d):m=B(null,b);d=B(m,b)}function J(b){return n(b,[a.Expression,a.ForInitializer,a.Conditional])}function E(){0<v.length&&(m=d,d=v.pop(),m.mode===a.Statement&&k.remove_redundant_indentation(m))}
+function K(){return d.parent.mode===a.ObjectLiteral&&d.mode===a.Statement&&(":"===d.last_text&&0===d.ternary_depth||"TK_RESERVED"===e&&n(d.last_text,["get","set"]))}function C(){var c;"TK_RESERVED"===e&&n(d.last_text,["var","let","const"])&&"TK_WORD"===b.type||"TK_RESERVED"===e&&"do"===d.last_text||"TK_RESERVED"===e&&"return"===d.last_text&&!b.wanted_newline||"TK_RESERVED"===e&&"else"===d.last_text&&("TK_RESERVED"!==b.type||"if"!==b.text)||"TK_END_EXPR"===e&&(m.mode===a.ForInitializer||m.mode===a.Conditional)||
+"TK_WORD"===e&&d.mode===a.BlockStatement&&!d.in_case&&"--"!==b.text&&"++"!==b.text&&"function"!==u&&"TK_WORD"!==b.type&&"TK_RESERVED"!==b.type||d.mode===a.ObjectLiteral&&(":"===d.last_text&&0===d.ternary_depth||"TK_RESERVED"===e&&n(d.last_text,["get","set"]))?(G(a.Statement),d.indentation_level+=1,c=("TK_RESERVED"===e&&n(d.last_text,["var","let","const"])&&"TK_WORD"===b.type&&(d.declaration_statement=!0),K()||D("TK_RESERVED"===b.type&&n(b.text,["do","for","if","while"])),!0)):c=!1;return c}function L(b){return n(b,
+"case return do if throw else".split(" "))}function H(b){b=c+(b||0);return 0>b||b>=z.length?null:z[b]}function I(){var c,f;if("TK_RESERVED"===b.type&&d.mode!==a.ObjectLiteral&&n(b.text,["set","get"])&&(b.type="TK_WORD"),"TK_RESERVED"===b.type&&d.mode===a.ObjectLiteral&&(c=H(1),":"==c.text&&(b.type="TK_WORD")),C()||!b.wanted_newline||J(d.mode)||"TK_OPERATOR"===e&&"--"!==d.last_text&&"++"!==d.last_text||"TK_EQUALS"===e||!l.preserve_newlines&&"TK_RESERVED"===e&&n(d.last_text,["var","let","const","set",
+"get"])||p(),d.do_block&&!d.do_while){if("TK_RESERVED"===b.type&&"while"===b.text){k.space_before_token=!0;t();k.space_before_token=!0;d.do_while=!0;return}p();d.do_block=!1}if(d.if_block)if(d.else_block||"TK_RESERVED"!==b.type||"else"!==b.text){for(;d.mode===a.Statement;)E();d.if_block=!1;d.else_block=!1}else d.else_block=!0;if("TK_RESERVED"===b.type&&("case"===b.text||"default"===b.text&&d.in_case_statement)){p();if(d.case_body||l.jslint_happy)0<d.indentation_level&&(!d.parent||d.indentation_level>
+d.parent.indentation_level)&&--d.indentation_level,d.case_body=!1;t();d.in_case=!0;d.in_case_statement=!0}else("TK_RESERVED"===b.type&&"function"===b.text&&((n(d.last_text,["}",";"])||k.just_added_newline()&&!n(d.last_text,["[","{",":","\x3d",","]))&&(k.just_added_blankline()||b.comments_before.length||(p(),p(!0))),"TK_RESERVED"===e||"TK_WORD"===e?"TK_RESERVED"===e&&n(d.last_text,"get set new return export async".split(" "))?k.space_before_token=!0:"TK_RESERVED"===e&&"default"===d.last_text&&"export"===
+u?k.space_before_token=!0:p():"TK_OPERATOR"===e||"\x3d"===d.last_text?k.space_before_token=!0:!d.multiline_frame&&(J(d.mode)||d.mode===a.ArrayLiteral)||p()),("TK_COMMA"===e||"TK_START_EXPR"===e||"TK_EQUALS"===e||"TK_OPERATOR"===e)&&(K()||D()),"TK_RESERVED"===b.type&&n(b.text,["function","get","set"]))?(t(),d.last_word=b.text):(x="NONE","TK_END_BLOCK"===e?"TK_RESERVED"===b.type&&n(b.text,["else","catch","finally"])?"expand"===l.brace_style||"end-expand"===l.brace_style||"none"===l.brace_style&&b.wanted_newline?
+x="NEWLINE":(x="SPACE",k.space_before_token=!0):x="NEWLINE":"TK_SEMICOLON"===e&&d.mode===a.BlockStatement?x="NEWLINE":"TK_SEMICOLON"===e&&J(d.mode)?x="SPACE":"TK_STRING"===e?x="NEWLINE":"TK_RESERVED"===e||"TK_WORD"===e||"*"===d.last_text&&"function"===u?x="SPACE":"TK_START_BLOCK"===e?x="NEWLINE":"TK_END_EXPR"===e&&(k.space_before_token=!0,x="NEWLINE"),"TK_RESERVED"===b.type&&n(b.text,q.line_starters)&&")"!==d.last_text&&(x="else"===d.last_text||"export"===d.last_text?"SPACE":"NEWLINE"),"TK_RESERVED"===
+b.type&&n(b.text,["else","catch","finally"])?"TK_END_BLOCK"!==e||"expand"===l.brace_style||"end-expand"===l.brace_style||"none"===l.brace_style&&b.wanted_newline?p():(k.trim(!0),f=k.current_line,"}"!==f.last()&&p(),k.space_before_token=!0):"NEWLINE"===x?"TK_RESERVED"===e&&L(d.last_text)?k.space_before_token=!0:"TK_END_EXPR"!==e?"TK_START_EXPR"===e&&"TK_RESERVED"===b.type&&n(b.text,["var","let","const"])||":"===d.last_text||("TK_RESERVED"===b.type&&"if"===b.text&&"else"===d.last_text?k.space_before_token=
+!0:p()):"TK_RESERVED"===b.type&&n(b.text,q.line_starters)&&")"!==d.last_text&&p():d.multiline_frame&&d.mode===a.ArrayLiteral&&","===d.last_text&&"}"===u?p():"SPACE"===x&&(k.space_before_token=!0),t(),d.last_word=b.text,"TK_RESERVED"===b.type&&"do"===b.text&&(d.do_block=!0),"TK_RESERVED"===b.type&&"if"===b.text&&(d.if_block=!0))}var k,z=[],c,q,b,e,u,f,d,m,v,x,M,l,P="",N;M={TK_START_EXPR:function(){C();var c=a.Expression;if("["===b.text){if("TK_WORD"===e||")"===d.last_text){"TK_RESERVED"===e&&n(d.last_text,
+q.line_starters)&&(k.space_before_token=!0);G(c);t();d.indentation_level+=1;l.space_in_paren&&(k.space_before_token=!0);return}c=a.ArrayLiteral;d.mode!==a.ArrayLiteral||"["!==d.last_text&&(","!==d.last_text||"]"!==u&&"}"!==u)||!l.keep_array_indentation&&p()}else"TK_RESERVED"===e&&"for"===d.last_text?c=a.ForInitializer:"TK_RESERVED"===e&&n(d.last_text,["if","while"])&&(c=a.Conditional);";"===d.last_text||"TK_START_BLOCK"===e?p():"TK_END_EXPR"===e||"TK_START_EXPR"===e||"TK_END_BLOCK"===e||"."===d.last_text?
+D(b.wanted_newline):"TK_RESERVED"===e&&"("===b.text||"TK_WORD"===e||"TK_OPERATOR"===e?"TK_RESERVED"===e&&("function"===d.last_word||"typeof"===d.last_word)||"*"===d.last_text&&"function"===u?l.space_after_anon_function&&(k.space_before_token=!0):"TK_RESERVED"===e&&(n(d.last_text,q.line_starters)||"catch"===d.last_text)&&l.space_before_conditional&&(k.space_before_token=!0):k.space_before_token=!0;"("===b.text&&"TK_RESERVED"===e&&"await"===d.last_word&&(k.space_before_token=!0);"("!==b.text||"TK_EQUALS"!==
+e&&"TK_OPERATOR"!==e||!K()&&D();G(c);t();l.space_in_paren&&(k.space_before_token=!0);d.indentation_level+=1},TK_END_EXPR:function(){for(;d.mode===a.Statement;)E();d.multiline_frame&&D("]"===b.text&&d.mode===a.ArrayLiteral&&!l.keep_array_indentation);l.space_in_paren&&("TK_START_EXPR"!==e||l.space_in_empty_paren?k.space_before_token=!0:(k.trim(),k.space_before_token=!1));"]"===b.text&&l.keep_array_indentation?(t(),E()):(E(),t());k.remove_redundant_indentation(m);d.do_while&&m.mode===a.Conditional&&
+(m.mode=a.Expression,d.do_block=!1,d.do_while=!1)},TK_START_BLOCK:function(){var c=H(1),q=H(2);q&&(":"===q.text&&n(c.type,["TK_STRING","TK_WORD","TK_RESERVED"])||n(c.text,["get","set"])&&n(q.type,["TK_WORD","TK_RESERVED"]))?n(u,["class","interface"])?G(a.BlockStatement):G(a.ObjectLiteral):G(a.BlockStatement);c=!c.comments_before.length&&"}"===c.text&&"function"===d.last_word&&"TK_END_EXPR"===e;"expand"===l.brace_style||"none"===l.brace_style&&b.wanted_newline?"TK_OPERATOR"!==e&&(c||"TK_EQUALS"===
+e||"TK_RESERVED"===e&&L(d.last_text)&&"else"!==d.last_text)?k.space_before_token=!0:p(!1,!0):"TK_OPERATOR"!==e&&"TK_START_EXPR"!==e?"TK_START_BLOCK"===e?p():k.space_before_token=!0:m.mode===a.ArrayLiteral&&","===d.last_text&&("}"===u?k.space_before_token=!0:p());t();d.indentation_level+=1},TK_END_BLOCK:function(){for(;d.mode===a.Statement;)E();var b="TK_START_BLOCK"===e;"expand"===l.brace_style?b||p():b||(d.mode===a.ArrayLiteral&&l.keep_array_indentation?(l.keep_array_indentation=!1,p(),l.keep_array_indentation=
+!0):p());E();t()},TK_WORD:I,TK_RESERVED:I,TK_SEMICOLON:function(){for(C()&&(k.space_before_token=!1);d.mode===a.Statement&&!d.if_block&&!d.do_block;)E();t()},TK_STRING:function(){C()?k.space_before_token=!0:"TK_RESERVED"===e||"TK_WORD"===e?k.space_before_token=!0:"TK_COMMA"===e||"TK_START_EXPR"===e||"TK_EQUALS"===e||"TK_OPERATOR"===e?K()||D():p();t()},TK_EQUALS:function(){C();d.declaration_statement&&(d.declaration_assignment=!0);k.space_before_token=!0;t();k.space_before_token=!0},TK_OPERATOR:function(){if(C(),
+"TK_RESERVED"===e&&L(d.last_text))k.space_before_token=!0,t();else if("*"===b.text&&"TK_DOT"===e)t();else if(":"===b.text&&d.in_case)d.case_body=!0,d.indentation_level+=1,t(),p(),d.in_case=!1;else if("::"===b.text)t();else{"TK_OPERATOR"===e&&D();var c=!0,f=!0;n(b.text,["--","++","!","~"])||n(b.text,["-","+"])&&(n(e,["TK_START_BLOCK","TK_START_EXPR","TK_EQUALS","TK_OPERATOR"])||n(d.last_text,q.line_starters)||","===d.last_text)?(c=!1,f=!1,b.wanted_newline&&("--"===b.text||"++"===b.text)&&p(!1,!0),
+";"===d.last_text&&J(d.mode)&&(c=!0),"TK_RESERVED"===e?c=!0:"TK_END_EXPR"===e?c=!("]"===d.last_text&&("--"===b.text||"++"===b.text)):"TK_OPERATOR"===e&&(c=n(b.text,["--","-","++","+"])&&n(d.last_text,["--","-","++","+"]),n(b.text,["+","-"])&&n(d.last_text,["--","++"])&&(f=!0)),!(d.mode!==a.BlockStatement&&d.mode!==a.Statement||"{"!==d.last_text&&";"!==d.last_text)&&p()):":"===b.text?0===d.ternary_depth?c=!1:--d.ternary_depth:"?"===b.text?d.ternary_depth+=1:"*"===b.text&&"TK_RESERVED"===e&&"function"===
+d.last_text&&(c=!1,f=!1);k.space_before_token=k.space_before_token||c;t();k.space_before_token=f}},TK_COMMA:function(){d.declaration_statement?(J(d.parent.mode)&&(d.declaration_assignment=!1),t(),d.declaration_assignment?(d.declaration_assignment=!1,p(!1,!0)):(k.space_before_token=!0,l.comma_first&&D())):(t(),d.mode===a.ObjectLiteral||d.mode===a.Statement&&d.parent.mode===a.ObjectLiteral?(d.mode===a.Statement&&E(),p()):(k.space_before_token=!0,l.comma_first&&D()))},TK_BLOCK_COMMENT:function(){if(k.raw)k.add_raw_token(b),
+b.directives&&"end"===b.directives.preserve&&(l.test_output_raw||(k.raw=!1));else if(b.directives)p(!1,!0),t(),"start"===b.directives.preserve&&(k.raw=!0),p(!1,!0);else if(w.newline.test(b.text)||b.wanted_newline){var d;d=b.text;d=d.replace(/\x0d/g,"");for(var e=[],c=d.indexOf("\n");-1!==c;)e.push(d.substring(0,c)),d=d.substring(c+1),c=d.indexOf("\n");d=(d.length&&e.push(d),e);var q,c=e=!1,a=b.whitespace_before,f=a.length;p(!1,!0);if(1<d.length){var r;a:{for(var m=d.slice(1),g=0;g<m.length;g++)if(r=
+m[g].replace(/^\s+|\s+$/g,""),"*"!==r.charAt(0)){r=!1;break a}r=!0}if(r)e=!0;else{a:{r=d.slice(1);m=0;for(g=r.length;m<g;m++)if(q=r[m],q&&0!==q.indexOf(a)){q=!1;break a}q=!0}q&&(c=!0)}}t(d[0]);for(q=1;q<d.length;q++)p(!1,!0),e?t(" "+d[q].replace(/^\s+/g,"")):c&&d[q].length>f?t(d[q].substring(f)):k.add_token(d[q]);p(!1,!0)}else k.space_before_token=!0,t(),k.space_before_token=!0},TK_COMMENT:function(){b.wanted_newline?p(!1,!0):k.trim(!0);k.space_before_token=!0;t();p(!1,!0)},TK_DOT:function(){C();
+"TK_RESERVED"===e&&L(d.last_text)?k.space_before_token=!0:D(")"===d.last_text&&l.break_chained_methods);t()},TK_UNKNOWN:function(){t();"\n"===b.text[b.text.length-1]&&p()},TK_EOF:function(){for(;d.mode===a.Statement;)E()}};g=g?g:{};l={};void 0!==g.braces_on_own_line&&(l.brace_style=g.braces_on_own_line?"expand":"collapse");l.brace_style=g.brace_style?g.brace_style:l.brace_style?l.brace_style:"collapse";"expand-strict"===l.brace_style&&(l.brace_style="expand");l.indent_size=g.indent_size?parseInt(g.indent_size,
+10):4;l.indent_char=g.indent_char?g.indent_char:" ";l.eol=g.eol?g.eol:"\n";l.preserve_newlines=void 0===g.preserve_newlines?!0:g.preserve_newlines;l.break_chained_methods=void 0===g.break_chained_methods?!1:g.break_chained_methods;l.max_preserve_newlines=void 0===g.max_preserve_newlines?0:parseInt(g.max_preserve_newlines,10);l.space_in_paren=void 0===g.space_in_paren?!1:g.space_in_paren;l.space_in_empty_paren=void 0===g.space_in_empty_paren?!1:g.space_in_empty_paren;l.jslint_happy=void 0===g.jslint_happy?
+!1:g.jslint_happy;l.space_after_anon_function=void 0===g.space_after_anon_function?!1:g.space_after_anon_function;l.keep_array_indentation=void 0===g.keep_array_indentation?!1:g.keep_array_indentation;l.space_before_conditional=void 0===g.space_before_conditional?!0:g.space_before_conditional;l.unescape_strings=void 0===g.unescape_strings?!1:g.unescape_strings;l.wrap_line_length=void 0===g.wrap_line_length?0:parseInt(g.wrap_line_length,10);l.e4x=void 0===g.e4x?!1:g.e4x;l.end_with_newline=void 0===
+g.end_with_newline?!1:g.end_with_newline;l.comma_first=void 0===g.comma_first?!1:g.comma_first;l.test_output_raw=void 0===g.test_output_raw?!1:g.test_output_raw;l.jslint_happy&&(l.space_after_anon_function=!0);g.indent_with_tabs&&(l.indent_char="\t",l.indent_size=1);l.eol=l.eol.replace(/\\r/,"\r").replace(/\\n/,"\n");for(f="";0<l.indent_size;)f+=l.indent_char,--l.indent_size;if(N=0,r&&r.length){for(;" "===r.charAt(N)||"\t"===r.charAt(N);)P+=r.charAt(N),N+=1;r=r.substring(N)}e="TK_START_BLOCK";u="";
+k=new h(f,P);k.raw=l.test_output_raw;v=[];G(a.BlockStatement);this.beautify=function(){var b,a,m;q=new Q(r,l,f);z=q.tokenize();for(c=0;b=H();){for(m=0;m<b.comments_before.length;m++)y(b.comments_before[m]);y(b);u=d.last_text;e=b.type;d.last_text=b.text;c+=1}return a=k.get_code(),l.end_with_newline&&(a+="\n"),"\n"!=l.eol&&(a=a.replace(/[\n]/g,l.eol)),a}}function A(a){var g=0,h=-1,y=[],n=!0;this.set_indent=function(y){g=a.baseIndentLength+y*a.indent_length;h=y};this.get_character_count=function(){return g};
+this.is_empty=function(){return n};this.last=function(){return this._empty?null:y[y.length-1]};this.push=function(a){y.push(a);g+=a.length;n=!1};this.pop=function(){var a=null;return n||(a=y.pop(),g-=a.length,n=0===y.length),a};this.remove_indent=function(){0<h&&(--h,g-=a.indent_length)};this.trim=function(){for(;" "===this.last();)y.pop(),--g;n=0===y.length};this.toString=function(){var g="";return this._empty||(0<=h&&(g=a.indent_cache[h]),g+=y.join("")),g}}function h(r,g){g=g||"";this.indent_cache=
+[g];this.baseIndentLength=g.length;this.indent_length=r.length;this.raw=!1;var h=[];this.baseIndentString=g;this.indent_string=r;this.current_line=this.previous_line=null;this.space_before_token=!1;this.add_outputline=function(){this.previous_line=this.current_line;this.current_line=new A(this);h.push(this.current_line)};this.add_outputline();this.get_line_number=function(){return h.length};this.add_new_line=function(a){return 1===this.get_line_number()&&this.just_added_newline()?!1:a||!this.just_added_newline()?
+(this.raw||this.add_outputline(),!0):!1};this.get_code=function(){return h.join("\n").replace(/[\r\n\t ]+$/,"")};this.set_indent=function(a){if(1<h.length){for(;a>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(a),!0}return this.current_line.set_indent(0),!1};this.add_raw_token=function(a){for(var r=0;r<a.newlines;r++)this.add_outputline();this.current_line.push(a.whitespace_before);this.current_line.push(a.text);
+this.space_before_token=!1};this.add_token=function(a){this.add_space_before_token();this.current_line.push(a)};this.add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&this.current_line.push(" ");this.space_before_token=!1};this.remove_redundant_indentation=function(r){if(!r.multiline_frame&&r.mode!==a.ForInitializer&&r.mode!==a.Conditional){r=r.start_line_index;for(var g=h.length;r<g;)h[r].remove_indent(),r++}};this.trim=function(a){a=void 0===a?!1:a;for(this.current_line.trim(r,
+g);a&&1<h.length&&this.current_line.is_empty();)h.pop(),this.current_line=h[h.length-1],this.current_line.trim();this.previous_line=1<h.length?h[h.length-2]:null};this.just_added_newline=function(){return this.current_line.is_empty()};this.just_added_blankline=function(){return this.just_added_newline()?1===h.length?!0:h[h.length-2].is_empty():!1}}function Q(a,g){function h(){var b,e=[],u,f,d,m,v;if(H=0,I="",c>=q)return["","TK_EOF"];u=z.length?z[z.length-1]:new M("TK_START_BLOCK","{");f=a.charAt(c);
+for(c+=1;n(f,y);){if(w.newline.test(f)?"\n"===f&&"\r"===a.charAt(c-2)||(H+=1,e=[]):e.push(f),c>=q)return["","TK_EOF"];f=a.charAt(c);c+=1}if(e.length&&(I=e.join("")),A.test(f)){d=v=!0;m=A;for("0"===f&&c<q&&/[Xx]/.test(a.charAt(c))?(v=!1,d=!1,f+=a.charAt(c),c+=1,m=p):(f="",--c);c<q&&m.test(a.charAt(c));)f+=a.charAt(c),c+=1,v&&c<q&&"."===a.charAt(c)&&(f+=a.charAt(c),c+=1,v=!1),d&&c<q&&/[Ee]/.test(a.charAt(c))&&(f+=a.charAt(c),c+=1,c<q&&/[+-]/.test(a.charAt(c))&&(f+=a.charAt(c),c+=1),d=!1,v=!1);return[f,
+"TK_WORD"]}if(w.isIdentifierStart(a.charCodeAt(c-1))){if(c<q)for(;w.isIdentifierChar(a.charCodeAt(c))&&(f+=a.charAt(c),c+=1,c!==q););return"TK_DOT"===u.type||"TK_RESERVED"===u.type&&n(u.text,["set","get"])||!n(f,t)?[f,"TK_WORD"]:"in"===f?[f,"TK_OPERATOR"]:[f,"TK_RESERVED"]}if("("===f||"["===f)return[f,"TK_START_EXPR"];if(")"===f||"]"===f)return[f,"TK_END_EXPR"];if("{"===f)return[f,"TK_START_BLOCK"];if("}"===f)return[f,"TK_END_BLOCK"];if(";"===f)return[f,"TK_SEMICOLON"];if("/"===f){if(e="","*"===a.charAt(c)){c+=
+1;G.lastIndex=c;m=G.exec(a);e="/*"+m[0];c+=m[0].length;v=e;if(v.match(E)){f={};K.lastIndex=0;for(b=K.exec(v);b;)f[b[1]]=b[2],b=K.exec(v);v=f}else v=null;return d=v,d&&"start"===d.ignore&&(C.lastIndex=c,m=C.exec(a),e+=m[0],c+=m[0].length),e=e.replace(w.lineBreak,"\n"),[e,"TK_BLOCK_COMMENT",d]}if("/"===a.charAt(c))return c+=1,J.lastIndex=c,m=J.exec(a),e="//"+m[0],c+=m[0].length,[e,"TK_COMMENT"]}if("`"===f||"'"===f||'"'===f||("/"===f||g.e4x&&"\x3c"===f&&a.slice(c-1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/))&&
+("TK_RESERVED"===u.type&&n(u.text,"return case throw else do typeof yield".split(" "))||"TK_END_EXPR"===u.type&&")"===u.text&&u.parent&&"TK_RESERVED"===u.parent.type&&n(u.parent.text,["if","while","for"])||n(u.type,"TK_COMMENT TK_START_EXPR TK_START_BLOCK TK_END_BLOCK TK_OPERATOR TK_EQUALS TK_EOF TK_SEMICOLON TK_COMMA".split(" ")))){d=f;u=m=!1;if(b=f,"/"===d)for(v=!1;c<q&&(m||v||a.charAt(c)!==d)&&!w.newline.test(a.charAt(c));)b+=a.charAt(c),m?m=!1:(m="\\"===a.charAt(c),"["===a.charAt(c)?v=!0:"]"===
+a.charAt(c)&&(v=!1)),c+=1;else if(g.e4x&&"\x3c"===d){if(f=/<(\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/g,m=a.slice(c-1),(e=f.exec(m))&&0===e.index){d=e[2];for(b=0;e;){u=!!e[1];var x=e[2],B=!!e[e.length-1]||"![CDATA["===x.slice(0,8);if(x!==d||B||(u?--b:++b),0>=b)break;e=f.exec(m)}return v=e?e.index+e[0].length:m.length,m=m.slice(0,v),c+=v-1,m=m.replace(w.lineBreak,"\n"),[m,"TK_STRING"]}}else for(;c<q&&(m||a.charAt(c)!==d&&
+("`"===d||!w.newline.test(a.charAt(c))));)(m||"`"===d)&&w.newline.test(a.charAt(c))?("\r"===a.charAt(c)&&"\n"===a.charAt(c+1)&&(c+=1),b+="\n"):b+=a.charAt(c),m?(("x"===a.charAt(c)||"u"===a.charAt(c))&&(u=!0),m=!1):m="\\"===a.charAt(c),c+=1;if(u&&g.unescape_strings){a:{v=b;f=!1;m="";e=0;b="";for(u=0;f||e<v.length;)if(x=v.charAt(e),e++,f){if(f=!1,"x"===x)b=v.substr(e,2),e+=2;else if("u"===x)b=v.substr(e,4),e+=4;else{m+="\\"+x;continue}if(!b.match(/^[0123456789abcdefABCDEF]+$/))break a;if(u=parseInt(b,
+16),0<=u&&32>u)m+="x"===x?"\\x"+b:"\\u"+b;else if(34===u||39===u||92===u)m+="\\"+String.fromCharCode(u);else{if("x"===x&&126<u&&255>=u)break a;m+=String.fromCharCode(u)}}else"\\"===x?f=!0:m+=x;v=m}b=v}if(c<q&&a.charAt(c)===d&&(b+=d,c+=1,"/"===d))for(;c<q&&w.isIdentifierStart(a.charCodeAt(c));)b+=a.charAt(c),c+=1;return[b,"TK_STRING"]}if("#"===f){if(0===z.length&&"!"===a.charAt(c)){for(b=f;c<q&&"\n"!==f;)f=a.charAt(c),b+=f,c+=1;return[b.replace(/^\s+|\s+$/g,"")+"\n","TK_UNKNOWN"]}if(v="#",c<q&&A.test(a.charAt(c))){do f=
+a.charAt(c),v+=f,c+=1;while(c<q&&"#"!==f&&"\x3d"!==f);return"#"===f||("["===a.charAt(c)&&"]"===a.charAt(c+1)?(v+="[]",c+=2):"{"===a.charAt(c)&&"}"===a.charAt(c+1)&&(v+="{}",c+=2)),[v,"TK_WORD"]}}if("\x3c"===f&&("?"===a.charAt(c)||"%"===a.charAt(c))&&(L.lastIndex=c-1,b=L.exec(a),b))return f=b[0],c+=f.length-1,f=f.replace(w.lineBreak,"\n"),[f,"TK_STRING"];if("\x3c"===f&&"\x3c!--"===a.substring(c-1,c+3)){c+=3;for(f="\x3c!--";!w.newline.test(a.charAt(c))&&c<q;)f+=a.charAt(c),c++;return k=!0,[f,"TK_COMMENT"]}if("-"===
+f&&k&&"--\x3e"===a.substring(c-1,c+2))return k=!1,c+=2,["--\x3e","TK_COMMENT"];if("."===f)return[f,"TK_DOT"];if(n(f,F)){for(;c<q&&n(f+a.charAt(c),F)&&!(f+=a.charAt(c),c+=1,c>=q););return","===f?[f,"TK_COMMA"]:"\x3d"===f?[f,"TK_EQUALS"]:[f,"TK_OPERATOR"]}return[f,"TK_UNKNOWN"]}var y=["\n","\r","\t"," "],A=/[0-9]/,p=/[0123456789abcdefABCDEF]/,F="+ - * / % \x26 ++ -- \x3d +\x3d -\x3d *\x3d /\x3d %\x3d \x3d\x3d \x3d\x3d\x3d !\x3d !\x3d\x3d \x3e \x3c \x3e\x3d \x3c\x3d \x3e\x3e \x3c\x3c \x3e\x3e\x3e \x3e\x3e\x3e\x3d \x3e\x3e\x3d \x3c\x3c\x3d \x26\x26 \x26\x3d | || ! ~ , : ? ^ ^\x3d |\x3d :: \x3d\x3e \x3c%\x3d \x3c% %\x3e \x3c?\x3d \x3c? ?\x3e".split(" ");
+this.line_starters="continue try throw return var let const if switch case default for while break function import export".split(" ");var t=this.line_starters.concat("do in else get set new catch finally typeof yield async await".split(" ")),G=/([\s\S]*?)((?:\*\/)|$)/g,J=/([^\n\r\u2028\u2029]*)/g,E=/\/\* beautify( \w+[:]\w+)+ \*\//g,K=/ (\w+)[:](\w+)/g,C=/([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,L=/((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g,H,I,k,z,c,q;this.tokenize=function(){q=a.length;
+c=0;k=!1;z=[];for(var b,e,g,f=null,d=[],m=[];!e||"TK_EOF"!==e.type;){g=h();for(b=new M(g[1],g[0],H,I);"TK_COMMENT"===b.type||"TK_BLOCK_COMMENT"===b.type||"TK_UNKNOWN"===b.type;)"TK_BLOCK_COMMENT"===b.type&&(b.directives=g[2]),m.push(b),g=h(),b=new M(g[1],g[0],H,I);m.length&&(b.comments_before=m,m=[]);"TK_START_BLOCK"===b.type||"TK_START_EXPR"===b.type?(b.parent=e,d.push(f),f=b):("TK_END_BLOCK"===b.type||"TK_END_EXPR"===b.type)&&f&&("]"===b.text&&"["===f.text||")"===b.text&&"("===f.text||"}"===b.text&&
+"{"===f.text)&&(b.parent=f.parent,f=d.pop());z.push(b);e=b}return z}}var w={},a,M;(function(a){var g=RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ]"),
+h=RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ؚؠ-ىٲ-ۓۧ-ۨۻ-ۼܰ-݊ࠀ-ࠔࠛ-ࠣࠥ-ࠧࠩ-࠭ࡀ-ࡗࣤ-ࣾऀ-ःऺ-़ा-ॏ॑-ॗॢ-ॣ०-९ঁ-ঃ়া-ৄেৈৗয়-ৠਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢ-ૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୟ-ୠ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఁ-ఃె-ైొ-్ౕౖౢ-ౣ౦-౯ಂಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢ-ೣ೦-೯ംഃെ-ൈൗൢ-ൣ൦-൯ංඃ්ා-ුූෘ-ෟෲෳิ-ฺเ-ๅ๐-๙ິ-ູ່-ໍ໐-໙༘༙༠-༩༹༵༷ཁ-ཇཱ-྄྆-྇ྍ-ྗྙ-ྼ࿆က-ဩ၀-၉ၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟ᜎ-ᜐᜠ-ᜰᝀ-ᝐᝲᝳក-ឲ៝០-៩᠋-᠍᠐-᠙ᤠ-ᤫᤰ-᤻ᥑ-ᥭᦰ-ᧀᧈ-ᧉ᧐-᧙ᨀ-ᨕᨠ-ᩓ᩠-᩿᩼-᪉᪐-᪙ᭆ-ᭋ᭐-᭙᭫-᭳᮰-᮹᯦-᯳ᰀ-ᰢ᱀-᱉ᱛ-ᱽ᳐-᳒ᴀ-ᶾḁ-ἕ‌‍‿⁀⁔⃐-⃥⃜⃡-⃰ⶁ-ⶖⷠ-ⷿ〡-〨゙゚Ꙁ-ꙭꙴ-꙽ꚟ꛰-꛱ꟸ-ꠀ꠆ꠋꠣ-ꠧꢀ-ꢁꢴ-꣄꣐-꣙ꣳ-ꣷ꤀-꤉ꤦ-꤭ꤰ-ꥅꦀ-ꦃ꦳-꧀ꨀ-ꨧꩀ-ꩁꩌ-ꩍ꩐-꩙ꩻꫠ-ꫩꫲ-ꫳꯀ-ꯡ꯬꯭꯰-꯹ﬠ-ﬨ︀-️︠-︦︳︴﹍-﹏０-９＿]");
+a.newline=/[\n\r\u2028\u2029]/;a.lineBreak=/\r\n|[\n\r\u2028\u2029]/g;a.isIdentifierStart=function(a){return 65>a?36===a:91>a?!0:97>a?95===a:123>a?!0:170<=a&&g.test(String.fromCharCode(a))};a.isIdentifierChar=function(a){return 48>a?36===a:58>a?!0:65>a?!1:91>a?!0:97>a?95===a:123>a?!0:170<=a&&h.test(String.fromCharCode(a))}})(w);a={BlockStatement:"BlockStatement",Statement:"Statement",ObjectLiteral:"ObjectLiteral",ArrayLiteral:"ArrayLiteral",ForInitializer:"ForInitializer",Conditional:"Conditional",
+Expression:"Expression"};M=function(a,g,h,n){this.type=a;this.text=g;this.comments_before=[];this.newlines=h||0;this.wanted_newline=0<h;this.whitespace_before=n||"";this.directives=this.parent=null};"function"==typeof define&&define.amd?define([],function(){return{js_beautify:F}}):"undefined"!=typeof exports?exports.js_beautify=F:"undefined"!=typeof window?window.js_beautify=F:"undefined"!=typeof global&&(global.js_beautify=F)})();
+(function(){function n(n,h,F,w){var a,M,r,g,B,y,D,p,O,t,G,J,E,K,C,L,H,I,k,z,c;h=h||{};void 0!==h.wrap_line_length&&0!==parseInt(h.wrap_line_length,10)||void 0===h.max_char||0===parseInt(h.max_char,10)||(h.wrap_line_length=h.max_char);M=void 0===h.indent_inner_html?!1:h.indent_inner_html;r=void 0===h.indent_size?4:parseInt(h.indent_size,10);g=void 0===h.indent_char?" ":h.indent_char;y=void 0===h.brace_style?"collapse":h.brace_style;B=0===parseInt(h.wrap_line_length,10)?32786:parseInt(h.wrap_line_length||
+250,10);D=h.unformatted||"a span img bdo em strong dfn code samp kbd var cite abbr acronym q sub sup tt i b big small u s strike font ins del pre address dt h1 h2 h3 h4 h5 h6".split(" ");O=(p=void 0===h.preserve_newlines?!0:h.preserve_newlines)?isNaN(parseInt(h.max_preserve_newlines,10))?32786:parseInt(h.max_preserve_newlines,10):0;t=void 0===h.indent_handlebars?!1:h.indent_handlebars;G=void 0===h.wrap_attributes?"auto":h.wrap_attributes;J=void 0===h.wrap_attributes_indent_size?r:parseInt(h.wrap_attributes_indent_size,
+10)||r;E=void 0===h.end_with_newline?!1:h.end_with_newline;K="object"==typeof h.extra_liners&&h.extra_liners?h.extra_liners.concat():"string"==typeof h.extra_liners?h.extra_liners.split(","):["head","body","/html"];C=h.eol?h.eol:"\n";h.indent_with_tabs&&(g="\t",r=1);C=C.replace(/\\r/,"\r").replace(/\\n/,"\n");a=new function(){return this.pos=0,this.token="",this.current_mode="CONTENT",this.tags={parent:"parent1",parentcount:1,parent1:""},this.tag_type="",this.token_text=this.last_token=this.last_text=
+this.token_type="",this.newlines=0,this.indent_content=M,this.Utils={whitespace:["\n","\r","\t"," "],single_token:"br input link meta source !doctype basefont base area hr wbr param img isindex embed".split(" "),extra_liners:K,in_array:function(a,b){for(var e=0;e<b.length;e++)if(a===b[e])return!0;return!1}},this.is_whitespace=function(a){for(;0<a.length;a++)if(!this.Utils.in_array(a.charAt(0),this.Utils.whitespace))return!1;return!0},this.traverse_whitespace=function(){var a="";if(a=this.input.charAt(this.pos),
+this.Utils.in_array(a,this.Utils.whitespace)){for(this.newlines=0;this.Utils.in_array(a,this.Utils.whitespace);)p&&"\n"===a&&this.newlines<=O&&(this.newlines+=1),this.pos++,a=this.input.charAt(this.pos);return!0}return!1},this.space_or_wrap=function(a){this.line_char_count>=this.wrap_line_length?(this.print_newline(!1,a),this.print_indentation(a)):(this.line_char_count++,a.push(" "))},this.get_content=function(){for(var a="",b=[],e;"\x3c"!==this.input.charAt(this.pos);){if(this.pos>=this.input.length)return b.length?
+b.join(""):["","TK_EOF"];if(this.traverse_whitespace())this.space_or_wrap(b);else{if(t)if(e=this.input.substr(this.pos,3),"{{#"===e||"{{/"===e)break;else{if("{{!"===e)return[this.get_tag(),"TK_TAG_HANDLEBARS_COMMENT"];if("{{"===this.input.substr(this.pos,2)&&"{{else}}"===this.get_tag(!0))break}a=this.input.charAt(this.pos);this.pos++;this.line_char_count++;b.push(a)}}return b.length?b.join(""):""},this.get_contents_to=function(a){var b,e;if(this.pos===this.input.length)return["","TK_EOF"];var c="";
+a=new RegExp("\x3c/"+a+"\\s*\x3e","igm");return a.lastIndex=this.pos,b=a.exec(this.input),e=b?b.index:this.input.length,this.pos<e&&(c=this.input.substring(this.pos,e),this.pos=e),c},this.record_tag=function(a){this.tags[a+"count"]?(this.tags[a+"count"]++,this.tags[a+this.tags[a+"count"]]=this.indent_level):(this.tags[a+"count"]=1,this.tags[a+this.tags[a+"count"]]=this.indent_level);this.tags[a+this.tags[a+"count"]+"parent"]=this.tags.parent;this.tags.parent=a+this.tags[a+"count"]},this.retrieve_tag=
+function(a){if(this.tags[a+"count"]){for(var b=this.tags.parent;b&&a+this.tags[a+"count"]!==b;)b=this.tags[b+"parent"];b&&(this.indent_level=this.tags[a+this.tags[a+"count"]],this.tags.parent=this.tags[b+"parent"]);delete this.tags[a+this.tags[a+"count"]+"parent"];delete this.tags[a+this.tags[a+"count"]];1===this.tags[a+"count"]?delete this.tags[a+"count"]:this.tags[a+"count"]--}},this.indent_to_tag=function(a){if(this.tags[a+"count"]){for(var b=this.tags.parent;b&&a+this.tags[a+"count"]!==b;)b=this.tags[b+
+"parent"];b&&(this.indent_level=this.tags[a+this.tags[a+"count"]])}},this.get_tag=function(a){var b="",e=[],c="",f=!1,d=!0,m,h,k=this.pos,n=this.line_char_count,l,p,r,y,w;a=void 0!==a?a:!1;do{if(this.pos>=this.input.length)return a&&(this.pos=k,this.line_char_count=n),e.length?e.join(""):["","TK_EOF"];if(b=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(b,this.Utils.whitespace))f=!0;else{if(("'"===b||'"'===b)&&(b+=this.get_unformatted(b),f=!0),"\x3d"===b&&(f=!1),e.length&&"\x3d"!==e[e.length-
+1]&&"\x3e"!==b&&f){if(this.space_or_wrap(e),f=!1,!d&&"force"===G&&"/"!==b)for(this.print_newline(!0,e),this.print_indentation(e),l=0;l<J;l++)e.push(g);for(l=0;l<e.length;l++)if(" "===e[l]){d=!1;break}}if(t&&"\x3c"===h&&"{{"===b+this.input.charAt(this.pos)&&(b+=this.get_unformatted("}}"),e.length&&" "!==e[e.length-1]&&"\x3c"!==e[e.length-1]&&(b=" "+b),f=!0),"\x3c"!==b||h||(m=this.pos-1,h="\x3c"),t&&!h&&2<=e.length&&"{"===e[e.length-1]&&"{"===e[e.length-2]&&(m="#"===b||"/"===b||"!"===b?this.pos-3:this.pos-
+2,h="{"),this.line_char_count++,e.push(b),e[1]&&("!"===e[1]||"?"===e[1]||"%"===e[1])){e=[this.get_comment(m)];break}if(t&&e[1]&&"{"===e[1]&&e[2]&&"!"===e[2]){e=[this.get_comment(m)];break}if(t&&"{"===h&&2<e.length&&"}"===e[e.length-2]&&"}"===e[e.length-1])break}}while("\x3e"!==b);return p=e.join(""),r=-1!==p.indexOf(" ")?p.indexOf(" "):"{"===p.charAt(0)?p.indexOf("}"):p.indexOf("\x3e"),y="\x3c"!==p.charAt(0)&&t?"#"===p.charAt(2)?3:2:1,w=p.substring(y,r).toLowerCase(),"/"===p.charAt(p.length-2)||this.Utils.in_array(w,
+this.Utils.single_token)?a||(this.tag_type="SINGLE"):t&&"{"===p.charAt(0)&&"else"===w?a||(this.indent_to_tag("if"),this.tag_type="HANDLEBARS_ELSE",this.indent_content=!0,this.traverse_whitespace()):this.is_unformatted(w,D)?(c=this.get_unformatted("\x3c/"+w+"\x3e",p),e.push(c),this.tag_type="SINGLE"):"script"===w&&(-1===p.search("type")||-1<p.search("type")&&-1<p.search(/\b(text|application)\/(x-)?(javascript|ecmascript|jscript|livescript)/))?a||(this.record_tag(w),this.tag_type="SCRIPT"):"style"===
+w&&(-1===p.search("type")||-1<p.search("type")&&-1<p.search("text/css"))?a||(this.record_tag(w),this.tag_type="STYLE"):"!"===w.charAt(0)?a||(this.tag_type="SINGLE",this.traverse_whitespace()):a||("/"===w.charAt(0)?(this.retrieve_tag(w.substring(1)),this.tag_type="END"):(this.record_tag(w),"html"!==w.toLowerCase()&&(this.indent_content=!0),this.tag_type="START"),this.traverse_whitespace()&&this.space_or_wrap(e),this.Utils.in_array(w,this.Utils.extra_liners)&&(this.print_newline(!1,this.output),this.output.length&&
+"\n"!==this.output[this.output.length-2]&&this.print_newline(!0,this.output))),a&&(this.pos=k,this.line_char_count=n),e.join("")},this.get_comment=function(a){var b="",e="\x3e",c=!1;this.pos=a;input_char=this.input.charAt(this.pos);for(this.pos++;this.pos<=this.input.length&&(b+=input_char,b.charAt(b.length-1)!==e.charAt(e.length-1)||-1===b.indexOf(e));)!c&&10>b.length&&(0===b.indexOf("\x3c![if")?(e="\x3c![endif]\x3e",c=!0):0===b.indexOf("\x3c![cdata[")?(e="]]\x3e",c=!0):0===b.indexOf("\x3c![")?(e=
+"]\x3e",c=!0):0===b.indexOf("\x3c!--")?(e="--\x3e",c=!0):0===b.indexOf("{{!")?(e="}}",c=!0):0===b.indexOf("\x3c?")?(e="?\x3e",c=!0):0===b.indexOf("\x3c%")&&(e="%\x3e",c=!0)),input_char=this.input.charAt(this.pos),this.pos++;return b},this.get_unformatted=function(a,b){if(b&&-1!==b.toLowerCase().indexOf(a))return"";var e="",c="",f=0,d=!0;do{if(this.pos>=this.input.length)break;if(e=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(e,this.Utils.whitespace)){if(!d){this.line_char_count--;continue}if("\n"===
+e||"\r"===e){c+="\n";this.line_char_count=0;continue}}c+=e;this.line_char_count++;d=!0;t&&"{"===e&&c.length&&"{"===c.charAt(c.length-2)&&(c+=this.get_unformatted("}}"),f=c.length)}while(-1===c.toLowerCase().indexOf(a,f));return c},this.get_token=function(){var a,b,c;return"TK_TAG_SCRIPT"===this.last_token||"TK_TAG_STYLE"===this.last_token?(b=this.last_token.substr(7),a=this.get_contents_to(b),"string"!=typeof a)?a:[a,"TK_"+b]:"CONTENT"===this.current_mode?(a=this.get_content(),"string"!=typeof a?
+a:[a,"TK_CONTENT"]):"TAG"===this.current_mode?(a=this.get_tag(),"string"!=typeof a?a:(c="TK_TAG_"+this.tag_type,[a,c])):void 0},this.get_full_indent=function(a){return(a=this.indent_level+a||0,1>a)?"":Array(a+1).join(this.indent_string)},this.is_unformatted=function(a,b){if(!this.Utils.in_array(a,b))return!1;if("a"!==a.toLowerCase()||!this.Utils.in_array("a",b))return!0;var c=(this.get_tag(!0)||"").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);return!c||this.Utils.in_array(c,b)?!0:!1},this.printer=function(a,
+b,c,g,f){this.input=a||"";this.input=this.input.replace(/\r\n|[\r\u2028\u2029]/g,"\n");this.output=[];this.indent_character=b;this.indent_string="";this.indent_size=c;this.brace_style=f;this.indent_level=0;this.wrap_line_length=g;for(a=this.line_char_count=0;a<this.indent_size;a++)this.indent_string+=this.indent_character;this.print_newline=function(a,b){(this.line_char_count=0,b&&b.length)&&(a||"\n"!==b[b.length-1])&&("\n"!==b[b.length-1]&&(b[b.length-1]=b[b.length-1].replace(/\s+$/g,"")),b.push("\n"))};
+this.print_indentation=function(a){for(var b=0;b<this.indent_level;b++)a.push(this.indent_string),this.line_char_count+=this.indent_string.length};this.print_token=function(a){this.is_whitespace(a)&&!this.output.length||((a||""!==a)&&this.output.length&&"\n"===this.output[this.output.length-1]&&(this.print_indentation(this.output),a=a.replace(/^\s+/g,"")),this.print_token_raw(a))};this.print_token_raw=function(a){0<this.newlines&&(a=a.replace(/\s+$/g,""));a&&""!==a&&(1<a.length&&"\n"===a.charAt(a.length-
+1)?(this.output.push(a.slice(0,-1)),this.print_newline(!1,this.output)):this.output.push(a));for(a=0;a<this.newlines;a++)this.print_newline(0<a,this.output);this.newlines=0};this.indent=function(){this.indent_level++};this.unindent=function(){0<this.indent_level&&this.indent_level--}},this};for(a.printer(n,g,r,B,y);L=a.get_token(),a.token_text=L[0],a.token_type=L[1],"TK_EOF"!==a.token_type;){switch(a.token_type){case "TK_TAG_START":a.print_newline(!1,a.output);a.print_token(a.token_text);a.indent_content&&
+(a.indent(),a.indent_content=!1);a.current_mode="CONTENT";break;case "TK_TAG_STYLE":case "TK_TAG_SCRIPT":a.print_newline(!1,a.output);a.print_token(a.token_text);a.current_mode="CONTENT";break;case "TK_TAG_END":"TK_CONTENT"===a.last_token&&""===a.last_text&&(H=a.token_text.match(/\w+/)[0],I=null,a.output.length&&(I=a.output[a.output.length-1].match(/(?:<|{{#)\s*(\w+)/)),null!==I&&(I[1]===H||a.Utils.in_array(I[1],D))||a.print_newline(!1,a.output));a.print_token(a.token_text);a.current_mode="CONTENT";
+break;case "TK_TAG_SINGLE":(n=a.token_text.match(/^\s*<([a-z-]+)/i))&&a.Utils.in_array(n[1],D)||a.print_newline(!1,a.output);a.print_token(a.token_text);a.current_mode="CONTENT";break;case "TK_TAG_HANDLEBARS_ELSE":a.print_token(a.token_text);a.indent_content&&(a.indent(),a.indent_content=!1);a.current_mode="CONTENT";break;case "TK_TAG_HANDLEBARS_COMMENT":a.print_token(a.token_text);a.current_mode="TAG";break;case "TK_CONTENT":a.print_token(a.token_text);a.current_mode="TAG";break;case "TK_STYLE":case "TK_SCRIPT":""!==
+a.token_text&&((a.print_newline(!1,a.output),n=a.token_text,z=1,"TK_SCRIPT"===a.token_type?k="function"==typeof F&&F:"TK_STYLE"===a.token_type&&(k="function"==typeof w&&w),"keep"===h.indent_scripts?z=0:"separate"===h.indent_scripts&&(z=-a.indent_level),r=a.get_full_indent(z),k)?(B=function(){this.eol="\n"},B.prototype=h,B=new B,n=k(n.replace(/^\s*/,r),B)):(B=n.match(/^\s*/)[0].match(/[^\n\r]*$/)[0].split(a.indent_string).length-1,B=a.get_full_indent(z-B),n=n.replace(/^\s*/,r).replace(/\r\n|\r|\n/g,
+"\n"+B).replace(/\s+$/,"")),n&&(a.print_token_raw(n),a.print_newline(!0,a.output)));a.current_mode="TAG";break;default:""!==a.token_text&&a.print_token(a.token_text)}a.last_token=a.token_type;a.last_text=a.token_text}return c=a.output.join("").replace(/[\r\n\t ]+$/,""),E&&(c+="\n"),"\n"!=C&&(c=c.replace(/[\n]/g,C)),c}if("function"==typeof define&&define.amd)define(["require","./beautify","./beautify-css"],function(A){var h=A("./beautify"),F=A("./beautify-css");return{html_beautify:function(w,a){return n(w,
+a,h.js_beautify,F.css_beautify)}}});else if("undefined"!=typeof exports){var F=require("./beautify.js"),O=require("./beautify-css.js");exports.html_beautify=function(A,h){return n(A,h,F.js_beautify,O.css_beautify)}}else"undefined"!=typeof window?window.html_beautify=function(A,h){return n(A,h,window.js_beautify,window.css_beautify)}:"undefined"!=typeof global&&(global.html_beautify=function(A,h){return n(A,h,global.js_beautify,global.css_beautify)})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.min.js	(revision 2)
@@ -0,0 +1,77 @@
+﻿(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(d,f){return"pairs"==f&&"string"==typeof d?d:"object"==typeof d&&null!=d[f]?d[f]:q[f]}function n(d){return function(f){return a(f,d)}}function g(d){var f=d.state.closeBrackets,b;return f?(b=d.getModeAt(d.getCursor()),b.closeBrackets||f):null}function a(d,f){var e=g(d),m,a,q,n;if(!e||d.getOption("disableInput")||
+(m=l(e,"pairs"),a=m.indexOf(f),-1==a))return c.Pass;for(var B=l(e,"triples"),v=m.charAt(a+1)==f,G=d.listSelections(),F=0==a%2,z,e=0;e<G.length;e++){var x=G[e],u=x.head,E=d.getRange(u,p(u.line,u.ch+1));if(F&&!x.empty())x="surround";else if(!v&&F||E!=f)if(v&&1<u.ch&&0<=B.indexOf(f)&&d.getRange(p(u.line,u.ch-2),u)==f+f&&(2>=u.ch||d.getRange(p(u.line,u.ch-3),p(u.line,u.ch-2))!=f))x="addFour";else if(v)if(!c.isWordChar(E)&&h(d,u,f))x="both";else return c.Pass;else if(F&&(d.getLine(u.line).length==u.ch||
+b(E,m)||/\s/.test(E)))x="both";else return c.Pass;else x=v&&k(d,u)?"both":0<=B.indexOf(f)&&d.getRange(u,p(u.line,u.ch+3))==f+f+f?"skipThree":"skip";if(z){if(z!=x)return c.Pass}else z=x}q=a%2?m.charAt(a-1):f;n=a%2?f:m.charAt(a+1);d.operation(function(){var f,b;if("skip"==z)d.execCommand("goCharRight");else if("skipThree"==z)for(b=0;3>b;b++)d.execCommand("goCharRight");else if("surround"==z){f=d.getSelections();for(b=0;b<f.length;b++)f[b]=q+f[b]+n;d.replaceSelections(f,"around");f=d.listSelections().slice();
+for(b=0;b<f.length;b++){var e=f,m=b,a;a=f[b];var h=0<c.cmpPos(a.anchor,a.head);a={anchor:new p(a.anchor.line,a.anchor.ch+(h?-1:1)),head:new p(a.head.line,a.head.ch+(h?1:-1))};e[m]=a}d.setSelections(f)}else"both"==z?(d.replaceSelection(q+n,null),d.triggerElectric(q+n),d.execCommand("goCharLeft")):"addFour"==z&&(d.replaceSelection(q+q+q+q,"before"),d.execCommand("goCharRight"))})}function b(d,f){var b=f.lastIndexOf(d);return-1<b&&1==b%2}function e(d,f){var b=d.getRange(p(f.line,f.ch-1),p(f.line,f.ch+
+1));return 2==b.length?b:null}function h(d,f,b){var a=d.getLine(f.line),e=d.getTokenAt(f);if(/\bstring2?\b/.test(e.type))return!1;b=new c.StringStream(a.slice(0,f.ch)+b+a.slice(f.ch),4);for(b.pos=b.start=e.start;;){if(a=d.getMode().token(b,e.state),b.pos>=f.ch+1)return/\bstring2?\b/.test(a);b.start=b.pos}}function k(d,f){var b=d.getTokenAt(p(f.line,f.ch+1));return/\bstring/.test(b.type)&&b.start==f.ch}var q={pairs:"()[]{}''\"\"",triples:"",explode:"[]{}"},p=c.Pos,f,d,m;c.defineOption("autoCloseBrackets",
+!1,function(f,b,a){a&&a!=c.Init&&(f.removeKeyMap(d),f.state.closeBrackets=null);b&&(f.state.closeBrackets=b,f.addKeyMap(d))});f=q.pairs+"`";d={Backspace:function(d){var f=g(d),b,a,m;if(!f||d.getOption("disableInput"))return c.Pass;b=l(f,"pairs");f=d.listSelections();for(m=0;m<f.length;m++)if(!f[m].empty()||(a=e(d,f[m].head),!a||0!=b.indexOf(a)%2))return c.Pass;for(m=f.length-1;0<=m;m--)a=f[m].head,d.replaceRange("",p(a.line,a.ch-1),p(a.line,a.ch+1),"+delete")},Enter:function(d){var f=g(d),f=f&&l(f,
+"explode"),b,a,m;if(!f||d.getOption("disableInput"))return c.Pass;b=d.listSelections();for(a=0;a<b.length;a++)if(!b[a].empty()||(m=e(d,b[a].head),!m||0!=f.indexOf(m)%2))return c.Pass;d.operation(function(){var f,a;d.replaceSelection("\n\n",null);d.execCommand("goCharLeft");b=d.listSelections();for(f=0;f<b.length;f++)a=b[f].head.line,d.indentLine(a,null,!0),d.indentLine(a+1,null,!0)})}};for(m=0;m<f.length;m++)d["'"+f.charAt(m)+"'"]=n(f.charAt(m))});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror"),require("../fold/xml-fold")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../fold/xml-fold"],c):c(CodeMirror)})(function(c){function l(h){var k,q,p,f,d,m;if(h.getOption("disableInput"))return c.Pass;k=h.listSelections();q=[];for(d=0;d<k.length;d++){if(!k[d].empty())return c.Pass;m=k[d].head;f=h.getTokenAt(m);var r=c.innerMode(h.getMode(),f.state),t=r.state;if("xml"!=r.mode.name||
+!t.tagName)return c.Pass;var l=h.getOption("autoCloseTags"),n="html"==r.mode.configuration,r="object"==typeof l&&l.dontCloseTags||n&&b,n="object"==typeof l&&l.indentTags||n&&e,l=t.tagName;if(f.end>m.ch&&(l=l.slice(0,l.length-f.end+m.ch)),p=l.toLowerCase(),!l||"string"==f.type&&(f.end!=m.ch||!/[\"\']/.test(f.string.charAt(f.string.length-1))||1==f.string.length)||"tag"==f.type&&"closeTag"==t.type||f.string.indexOf("/")==f.string.length-1||r&&-1<g(r,p)||a(h,l,m,t,!0))return c.Pass;f=n&&-1<g(n,p);q[d]=
+{indent:f,text:"\x3e"+(f?"\n\n":"")+"\x3c/"+l+"\x3e",newPos:f?c.Pos(m.line+1,0):c.Pos(m.line,m.ch+1)}}for(d=k.length-1;0<=d;d--)p=q[d],h.replaceRange(p.text,k[d].head,k[d].anchor,"+insert"),m=h.listSelections().slice(0),m[d]={head:p.newPos,anchor:p.newPos},h.setSelections(m),p.indent&&(h.indentLine(p.newPos.line,null,!0),h.indentLine(p.newPos.line+1,null,!0))}function n(b,e){for(var q,p=b.listSelections(),f=[],d=e?"/":"\x3c/",m=0;m<p.length;m++){if(!p[m].empty())return c.Pass;var r=p[m].head,t=b.getTokenAt(r);
+q=c.innerMode(b.getMode(),t.state);var l=q.state;if(e&&("string"==t.type||"\x3c"!=t.string.charAt(0)||t.start!=r.ch-1))return c.Pass;if("xml"!=q.mode.name)if("htmlmixed"==b.getMode().name&&"javascript"==q.mode.name)q=d+"script";else if("htmlmixed"==b.getMode().name&&"css"==q.mode.name)q=d+"style";else return c.Pass;else{if(!l.context||!l.context.tagName||a(b,l.context.tagName,r,l))return c.Pass;q=d+l.context.tagName}"\x3e"!=b.getLine(r.line).charAt(t.end)&&(q+="\x3e");f[m]=q}b.replaceSelections(f);
+p=b.listSelections();for(m=0;m<p.length;m++)(m==p.length-1||p[m].head.line<p[m+1].head.line)&&b.indentLine(p[m].head.line)}function g(b,a){if(b.indexOf)return b.indexOf(a);for(var e=0,c=b.length;e<c;++e)if(b[e]==a)return e;return-1}function a(b,a,e,p,f){var d,m,r;if(!c.scanForClosingTag||(d=Math.min(b.lastLine()+1,e.line+500),m=c.scanForClosingTag(b,e,null,d),!m||m.tag!=a))return!1;e=p.context;for(f=f?1:0;e&&e.tagName==a;e=e.prev)++f;e=m.to;for(m=1;m<f;m++){if(r=c.scanForClosingTag(b,e,null,d),!r||
+r.tag!=a)return!1;e=r.to}return!0}c.defineOption("autoCloseTags",!1,function(b,a,e){if(e!=c.Init&&e&&b.removeKeyMap("autoCloseTags"),a)e={name:"autoCloseTags"},("object"!=typeof a||a.whenClosing)&&(e["'/'"]=function(b){return b.getOption("disableInput")?c.Pass:n(b,!0)}),("object"!=typeof a||a.whenOpening)&&(e["'\x3e'"]=function(b){return l(b)}),b.addKeyMap(e)});var b="area base br col command embed hr img input keygen link meta param source track wbr".split(" "),e="applet blockquote body button div dl fieldset form frameset h1 h2 h3 h4 h5 h6 head html iframe layer legend object ol p select table ul".split(" ");
+c.commands.closeTag=function(b){return n(b)}});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(b){var a,h,k,q,p,f,d,m,r,l,g;if(b.getOption("disableInput"))return c.Pass;a=b.listSelections();k=[];for(q=0;q<a.length;q++){if(p=a[q].head,f=b.getTokenAt(p),"comment"!=f.type)return c.Pass;if(d=c.innerMode(b.getMode(),f.state).mode,h){if(h!=d)return c.Pass}else h=d;if(d=null,h.blockCommentStart&&
+h.blockCommentContinue){if(m=f.string.indexOf(h.blockCommentEnd),r=b.getRange(c.Pos(p.line,0),c.Pos(p.line,f.end)),-1==m||m!=f.string.length-h.blockCommentEnd.length||!(p.ch>=m))if(0==f.string.indexOf(h.blockCommentStart)){if(d=r.slice(0,f.start),!/^\s*$/.test(d))for(d="",r=0;r<f.start;++r)d+=" "}else-1!=(g=r.indexOf(h.blockCommentContinue))&&g+h.blockCommentContinue.length>f.start&&/^\s*$/.test(r.slice(0,g))&&(d=r.slice(0,g));null!=d&&(d+=h.blockCommentContinue)}if(null==d&&h.lineComment&&n(b)&&
+(l=b.getLine(p.line),g=l.indexOf(h.lineComment),-1<g&&(d=l.slice(0,g),/\S/.test(d)?d=null:d+=h.lineComment+l.slice(g+h.lineComment.length).match(/^\s*/)[0])),null==d)return c.Pass;k[q]="\n"+d}b.operation(function(){for(var d=a.length-1;0<=d;d--)b.replaceRange(k[d],a[d].from(),a[d].to(),"+insert")})}function n(b){return(b=b.getOption("continueComments"))&&"object"==typeof b?!1!==b.continueLineComment:!0}for(var g=["clike","css","javascript"],a=0;a<g.length;++a)c.extendMode(g[a],{blockCommentContinue:" * "});
+c.defineOption("continueComments",null,function(b,a,h){var k,q;h&&h!=c.Init&&b.removeKeyMap("continueComment");a&&(k="Enter","string"==typeof a?k=a:"object"==typeof a&&a.key&&(k=a.key),q={name:"continueComment"},q[k]=l,b.addKeyMap(q))})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(b,a,f,d){var m=b.getLineHandle(a.line),c=a.ch-1,m=0<=c&&h[m.text.charAt(c)]||h[m.text.charAt(++c)],k,l,g;return m?(k="\x3e"==m.charAt(1)?1:-1,f&&0<k!=(c==a.ch))?null:(l=b.getTokenTypeAt(e(a.line,c+1)),g=n(b,e(a.line,c+(0<k?1:0)),k,l||null,d),null==g)?null:{from:e(a.line,c),to:g&&g.pos,match:g&&
+g.ch==m.charAt(0),forward:0<k}:null}function n(b,a,f,d,m){var c,k,l,g,n,A=m&&m.maxScanLineLength||1E4,D=m&&m.maxScanLines||1E3,B=[];m=m&&m.bracketRegex?m.bracketRegex:/[(){}[\]]/;for(var D=0<f?Math.min(a.line+D,b.lastLine()+1):Math.max(b.firstLine()-1,a.line-D),v=a.line;v!=D;v+=f)if((c=b.getLine(v),c)&&(k=0<f?0:c.length-1,l=0<f?c.length:-1,!(c.length>A)))for(v==a.line&&(k=a.ch-(0>f?1:0));k!=l;k+=f)if(g=c.charAt(k),m.test(g)&&(void 0===d||b.getTokenTypeAt(e(v,k+1))==d))if(n=h[g],"\x3e"==n.charAt(1)==
+0<f)B.push(g);else if(B.length)B.pop();else return{pos:e(v,k),ch:g};return v-f==(0<f?b.lastLine():b.firstLine())?!1:null}function g(a,c,f){for(var d,m,h=a.state.matchBrackets.maxHighlightLineLength||1E3,k=[],g=a.listSelections(),n=0;n<g.length;n++)(d=g[n].empty()&&l(a,g[n].head,!1,f))&&a.getLine(d.from.line).length<=h&&(m=d.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket",k.push(a.markText(d.from,e(d.from.line,d.from.ch+1),{className:m})),d.to&&a.getLine(d.to.line).length<=h&&k.push(a.markText(d.to,
+e(d.to.line,d.to.ch+1),{className:m})));if(k.length)if(b&&a.state.focused&&a.focus(),f=function(){a.operation(function(){for(var d=0;d<k.length;d++)k[d].clear()})},c)setTimeout(f,800);else return f}function a(b){b.operation(function(){k&&(k(),k=null);k=g(b,!1,b.state.matchBrackets)})}var b=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||8>document.documentMode),e=c.Pos,h={"(":")\x3e",")":"(\x3c","[":"]\x3e","]":"[\x3c","{":"}\x3e","}":"{\x3c"},k=null;c.defineOption("matchBrackets",
+!1,function(b,e,f){if(f&&f!=c.Init&&(b.off("cursorActivity",a),k&&(k(),k=null)),e)b.state.matchBrackets="object"==typeof e?e:{},b.on("cursorActivity",a)});c.defineExtension("matchBrackets",function(){g(this,!0)});c.defineExtension("findMatchingBracket",function(b,a,f){return l(this,b,a,f)});c.defineExtension("scanForBracket",function(b,a,f,d){return n(this,b,a,f,d)})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror"),require("../fold/xml-fold")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../fold/xml-fold"],c):c(CodeMirror)})(function(c){function l(a){a.state.tagHit&&a.state.tagHit.clear();a.state.tagOther&&a.state.tagOther.clear();a.state.tagHit=a.state.tagOther=null}function n(a){a.state.failedTagMatch=!1;a.operation(function(){var b,e,h,k,g;(l(a),a.somethingSelected())||(b=a.getCursor(),
+e=a.getViewport(),e.from=Math.min(e.from,b.line),e.to=Math.max(b.line+1,e.to),h=c.findMatchingTag(a,b,e),h)&&(a.state.matchBothTags&&(k="open"==h.at?h.open:h.close,k&&(a.state.tagHit=a.markText(k.from,k.to,{className:"CodeMirror-matchingtag"}))),g="close"==h.at?h.open:h.close,g?a.state.tagOther=a.markText(g.from,g.to,{className:"CodeMirror-matchingtag"}):a.state.failedTagMatch=!0)})}function g(a){a.state.failedTagMatch&&n(a)}c.defineOption("matchTags",!1,function(a,b,e){if(e&&e!=c.Init&&(a.off("cursorActivity",
+n),a.off("viewportChange",g),l(a)),b)a.state.matchBothTags="object"==typeof b&&b.bothTags,a.on("cursorActivity",n),a.on("viewportChange",g),n(a)});c.commands.toMatchingTag=function(a){var b=c.findMatchingTag(a,a.getCursor()),e;b&&(e="close"==b.at?b.open:b.close,e&&a.extendSelection(e.to,e.from))}});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.defineOption("showTrailingSpace",!1,function(l,n,g){g==c.Init&&(g=!1);g&&!n?l.removeOverlay("trailingspace"):!g&&n&&l.addOverlay({token:function(a){for(var b=a.string.length,e=b;e&&/\s/.test(a.string.charAt(e-1));--e);return e>a.pos?(a.pos=e,null):(a.pos=b,"trailingspace")},name:"trailingspace"})})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(b,a,h,k){function l(d){var c=p(b,a),m,h;if(!c||c.to.line-c.from.line<f)return null;m=b.findMarksAt(c.from);for(h=0;h<m.length;++h)if(m[h].__isFold&&"fold"!==k){if(!d)return null;c.cleared=!0;m[h].clear()}return c}var p,f,d,m,r;if(h&&h.call?(p=h,h=null):p=g(b,h,"rangeFinder"),"number"==typeof a&&
+(a=c.Pos(a,0)),f=g(b,h,"minFoldSize"),d=l(!0),g(b,h,"scanUp"))for(;!d&&a.line>b.firstLine();)a=c.Pos(a.line-1,0),d=l(!1);d&&!d.cleared&&"unfold"!==k&&(m=n(b,h),c.on(m,"mousedown",function(d){r.clear();c.e_preventDefault(d)}),r=b.markText(d.from,d.to,{replacedWith:m,clearOnEnter:g(b,h,"clearOnEnter"),__isFold:!0}),r.on("clear",function(d,a){c.signal(b,"unfold",b,d,a)}),c.signal(b,"fold",b,d.from,d.to))}function n(b,a){var c=g(b,a,"widget"),k;return"string"==typeof c&&(k=document.createTextNode(c),
+c=document.createElement("span"),c.appendChild(k),c.className="CodeMirror-foldmarker"),c}function g(b,c,h){return c&&void 0!==c[h]?c[h]:(b=b.options.foldOptions)&&void 0!==b[h]?b[h]:a[h]}c.newFoldFunction=function(b,a){return function(c,k){l(c,k,{rangeFinder:b,widget:a})}};c.defineExtension("foldCode",function(a,c,h){l(this,a,c,h)});c.defineExtension("isFolded",function(a){a=this.findMarksAt(a);for(var c=0;c<a.length;++c)if(a[c].__isFold)return!0});c.commands.toggleFold=function(a){a.foldCode(a.getCursor())};
+c.commands.fold=function(a){a.foldCode(a.getCursor(),null,"fold")};c.commands.unfold=function(a){a.foldCode(a.getCursor(),null,"unfold")};c.commands.foldAll=function(a){a.operation(function(){for(var e=a.firstLine(),h=a.lastLine();e<=h;e++)a.foldCode(c.Pos(e,0),null,"fold")})};c.commands.unfoldAll=function(a){a.operation(function(){for(var e=a.firstLine(),h=a.lastLine();e<=h;e++)a.foldCode(c.Pos(e,0),null,"unfold")})};c.registerHelper("fold","combine",function(){var a=Array.prototype.slice.call(arguments,
+0);return function(c,h){for(var k,g=0;g<a.length;++g)if(k=a[g](c,h),k)return k}});c.registerHelper("fold","auto",function(a,c){for(var h,k=a.getHelpers(c,"fold"),g=0;g<k.length;g++)if(h=k[g](a,c),h)return h});var a={rangeFinder:c.fold.auto,widget:"↔",minFoldSize:0,scanUp:!1,clearOnEnter:!0};c.defineOption("foldOptions",null);c.defineExtension("foldOption",function(a,c){return g(this,a,c)})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror"),require("./foldcode")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./foldcode"],c):c(CodeMirror)})(function(c){function l(a){this.options=a;this.from=this.to=0}function n(a,d){for(var b=a.findMarks(p(d,0),p(d+1,0)),c=0;c<b.length;++c)if(b[c].__isFold&&b[c].find().from.line==d)return b[c]}function g(a){if("string"==typeof a){var d=document.createElement("div");return d.className=
+a+" CodeMirror-guttermarker-subtle",d}return a.cloneNode(!0)}function a(a,d,b){var c=a.state.foldGutter.options,e=d,k=a.foldOption(c,"minFoldSize"),h=a.foldOption(c,"rangeFinder");a.eachLine(d,b,function(d){var b=null,m,l;n(a,e)?b=g(c.indicatorFolded):(m=p(e,0),l=h&&h(a,m),l&&l.to.line-l.from.line>=k&&(b=g(c.indicatorOpen)));a.setGutterMarker(d,c.gutter,b);++e})}function b(b){var d=b.getViewport(),c=b.state.foldGutter;c&&(b.operation(function(){a(b,d.from,d.to)}),c.from=d.from,c.to=d.to)}function e(a,
+d,b){var c=a.state.foldGutter,e,k;c&&(e=c.options,b==e.gutter)&&(k=n(a,d),k?k.clear():a.foldCode(p(d,0),e.rangeFinder))}function h(a){var d=a.state.foldGutter,c;d&&(c=d.options,d.from=d.to=0,clearTimeout(d.changeUpdate),d.changeUpdate=setTimeout(function(){b(a)},c.foldOnChangeTimeSpan||600))}function k(c){var d=c.state.foldGutter,m;d&&(m=d.options,clearTimeout(d.changeUpdate),d.changeUpdate=setTimeout(function(){var m=c.getViewport();d.from==d.to||20<m.from-d.to||20<d.from-m.to?b(c):c.operation(function(){m.from<
+d.from&&(a(c,m.from,d.from),d.from=m.from);m.to>d.to&&(a(c,d.to,m.to),d.to=m.to)})},m.updateViewportTimeSpan||400))}function q(b,d){var c=b.state.foldGutter,e;c&&(e=d.line,e>=c.from&&e<c.to&&a(b,e,e+1))}c.defineOption("foldGutter",!1,function(a,d,m){if(m&&m!=c.Init&&(a.clearGutter(a.state.foldGutter.options.gutter),a.state.foldGutter=null,a.off("gutterClick",e),a.off("change",h),a.off("viewportChange",k),a.off("fold",q),a.off("unfold",q),a.off("swapDoc",h)),d){m=a.state;var p=d;d=(!0===p&&(p={}),
+null==p.gutter&&(p.gutter="CodeMirror-foldgutter"),null==p.indicatorOpen&&(p.indicatorOpen="CodeMirror-foldgutter-open"),null==p.indicatorFolded&&(p.indicatorFolded="CodeMirror-foldgutter-folded"),p);m.foldGutter=new l(d);b(a);a.on("gutterClick",e);a.on("change",h);a.on("viewportChange",k);a.on("fold",q);a.on("unfold",q);a.on("swapDoc",h)}});var p=c.Pos});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.registerHelper("fold","brace",function(l,n){function g(d){for(var f,m=n.ch,p=0;;)if(f=0>=m?-1:b.lastIndexOf(d,m-1),-1==f){if(1==p)break;p=1;m=b.length}else{if(1==p&&f<n.ch)break;if(e=l.getTokenTypeAt(c.Pos(a,f+1)),!/^(comment|string)/.test(e))return f+1;m=f-1}}var a=n.line,b=l.getLine(a),e,h="{",k="}",
+q=g("{"),p,f,d,m,r,t,w,C,y;if(null==q&&(h="[",k="]",q=g("[")),null!=q){p=1;f=l.lastLine();r=a;a:for(;r<=f;++r)for(t=l.getLine(r),w=r==a?q:0;C=t.indexOf(h,w),y=t.indexOf(k,w),0>C&&(C=t.length),0>y&&(y=t.length),w=Math.min(C,y),w!=t.length;){if(l.getTokenTypeAt(c.Pos(r,w+1))==e)if(w==C)++p;else if(!--p){d=r;m=w;break a}++w}if(null!=d&&(a!=d||m!=q))return{from:c.Pos(a,q),to:c.Pos(d,m)}}});c.registerHelper("fold","import",function(l,n){function g(a){var b,e,f,d;if(a<l.firstLine()||a>l.lastLine()||(b=
+l.getTokenAt(c.Pos(a,1)),/\S/.test(b.string)||(b=l.getTokenAt(c.Pos(a,b.end+1))),"keyword"!=b.type||"import"!=b.string))return null;e=a;for(a=Math.min(l.lastLine(),a+10);e<=a;++e)if(f=l.getLine(e),d=f.indexOf(";"),-1!=d)return{startCh:b.end,end:c.Pos(e,d)}}var a=n.line,b=g(a),e,h;if(!b||g(a-1)||(e=g(a-2))&&e.end.line==a-1)return null;for(e=b.end;h=g(e.line+1),null!=h;)e=h.end;return{from:l.clipPos(c.Pos(a,b.startCh+1)),to:e}});c.registerHelper("fold","include",function(l,n){function g(a){if(a<l.firstLine()||
+a>l.lastLine())return null;var b=l.getTokenAt(c.Pos(a,1));return/\S/.test(b.string)||(b=l.getTokenAt(c.Pos(a,b.end+1))),"meta"==b.type&&"#include"==b.string.slice(0,8)?b.start+8:void 0}var a=n.line,b=g(a),e,h;if(null==b||null!=g(a-1))return null;for(e=a;h=g(e+1),null!=h;)++e;return{from:c.Pos(a,b+1),to:l.clipPos(c.Pos(e))}})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.registerGlobalHelper("fold","comment",function(c){return c.blockCommentStart&&c.blockCommentEnd},function(l,n){var g=l.getModeAt(n),a=g.blockCommentStart,g=g.blockCommentEnd,b,e,h,k,q,p,f,d,m,r,t;if(a&&g){b=n.line;e=l.getLine(b);k=n.ch;for(q=0;;)if(h=0>=k?-1:e.lastIndexOf(a,k-1),-1==h){if(1==q)return;
+q=1;k=e.length}else{if(1==q&&h<n.ch)return;if(/comment/.test(l.getTokenTypeAt(c.Pos(b,h+1)))&&(0==h||e.slice(h-g.length,h)==g||!/comment/.test(l.getTokenTypeAt(c.Pos(b,h))))){h+=a.length;break}k=h-1}e=1;k=l.lastLine();q=b;a:for(;q<=k;++q)for(d=l.getLine(q),m=q==b?h:0;r=d.indexOf(a,m),t=d.indexOf(g,m),0>r&&(r=d.length),0>t&&(t=d.length),m=Math.min(r,t),m!=d.length;){if(m==r)++e;else if(!--e){p=q;f=m;break a}++m}if(null!=p&&(b!=p||f!=h))return{from:c.Pos(b,h),to:c.Pos(p,f)}}})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.registerHelper("fold","indent",function(l,n){var g=l.getOption("tabSize"),a=l.getLine(n.line),b,e,h,k;if(/\S/.test(a)){var q=c.countColumn(a,null,g),p=null;b=n.line+1;for(e=l.lastLine();b<=e;++b)if(h=l.getLine(b),k=c.countColumn(h,null,g),k>q)p=b;else if(/\S/.test(h))break;if(p)return{from:c.Pos(n.line,
+a.length),to:c.Pos(p,l.getLine(p).length)}}})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(a,b,c,f){this.line=b;this.ch=c;this.cm=a;this.text=a.getLine(b);this.min=f?Math.max(f.from,a.firstLine()):a.firstLine();this.max=f?Math.min(f.to-1,a.lastLine()):a.lastLine()}function n(a,b){var c=a.cm.getTokenTypeAt(p(a.line,b));return c&&/\btag\b/.test(c)}function g(a){if(!(a.line>=a.max))return a.ch=
+0,a.text=a.cm.getLine(++a.line),!0}function a(a){if(!(a.line<=a.min))return a.text=a.cm.getLine(--a.line),a.ch=a.text.length,!0}function b(a){for(var b,c,f;;){if(b=a.text.indexOf("\x3e",a.ch),-1==b)if(g(a))continue;else break;if(n(a,b+1))return c=a.text.lastIndexOf("/",b),f=-1<c&&!/\S/.test(a.text.slice(c+1,b)),a.ch=b+1,f?"selfClose":"regular";a.ch=b+1}}function e(b){for(var c,e;;){if(c=b.ch?b.text.lastIndexOf("\x3c",b.ch-1):-1,-1==c)if(a(b))continue;else break;if(!n(b,c+1))b.ch=c;else if(f.lastIndex=
+c,b.ch=c,e=f.exec(b.text),e&&e.index==c)return e}}function h(a){for(;;){f.lastIndex=a.ch;var b=f.exec(a.text);if(!b)if(g(a))continue;else break;if(n(a,b.index+1))return a.ch=b.index+b[0].length,b;a.ch=b.index+1}}function k(a,c){for(var f=[],e;;){var k=h(a),g,l=a.line,n=a.ch-(k?k[0].length:0);if(!k||!(g=b(a)))break;if("selfClose"!=g)if(k[1]){for(e=f.length-1;0<=e;--e)if(f[e]==k[2]){f.length=e;break}if(0>e&&(!c||c==k[2]))return{tag:k[2],from:p(l,n),to:p(a.line,a.ch)}}else f.push(k[2])}}function q(b,
+c){for(var f=[],h,k;;){var g;a:{g=b;for(var l=void 0,q=k=void 0;;){if(l=g.ch?g.text.lastIndexOf("\x3e",g.ch-1):-1,-1==l)if(a(g))continue;else{g=void 0;break a}if(n(g,l+1)){g=(k=g.text.lastIndexOf("/",l),q=-1<k&&!/\S/.test(g.text.slice(k+1,l)),g.ch=l+1,q?"selfClose":"regular");break a}else g.ch=l}}if(h=g,!h)break;if("selfClose"==h)e(b);else{q=b.line;g=b.ch;l=e(b);if(!l)break;if(l[1])f.push(l[2]);else{for(k=f.length-1;0<=k;--k)if(f[k]==l[2]){f.length=k;break}if(0>k&&(!c||c==l[2]))return{tag:l[2],from:p(b.line,
+b.ch),to:p(q,g)}}}}}var p=c.Pos,f=RegExp("\x3c(/?)([A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD-:.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*)","g");c.registerHelper("fold","xml",function(a,c){for(var f=
+new l(a,c.line,0),e,g,n,q;e=h(f),e&&f.line==c.line&&(g=b(f));)if(!e[1]&&"selfClose"!=g)return n=p(f.line,f.ch),q=k(f,e[2]),q&&{from:n,to:q.from}});c.findMatchingTag=function(a,c,f){var g=new l(a,c.line,c.ch,f),h;if(-1!=g.text.indexOf("\x3e")||-1!=g.text.indexOf("\x3c")){var n=b(g),y=n&&p(g.line,g.ch),A=n&&e(g);if(n&&A&&!(0<(g.line-c.line||g.ch-c.ch)))return(h={from:p(g.line,g.ch),to:y,tag:A[2]},"selfClose"==n)?{open:h,close:null,at:"open"}:A[1]?{open:q(g,A[2]),close:h,at:"close"}:(g=new l(a,y.line,
+y.ch,f),{open:h,close:k(g,A[2]),at:"open"})}};c.findEnclosingTag=function(a,b,c){for(var f=new l(a,b.line,b.ch,c),e,g,h;e=q(f),e;)if(g=new l(a,b.line,b.ch,c),h=k(g,e.tag),h)return{open:e,close:h}};c.scanForClosingTag=function(a,b,c,f){a=new l(a,b.line,b.ch,f?{from:0,to:f}:null);return k(a,c)}});
+(function(){CodeMirror.defineExtension("autoFormatAll",function(c,l){for(var n,g=this,a=g.getMode(),b=g.getRange(c,l).split("\n"),e=CodeMirror.copyState(a,g.getTokenAt(c).state),h=g.getOption("tabSize"),k="",q=0,p=0==c.ch,f=0;f<b.length;++f){for(n=new CodeMirror.StringStream(b[f],h);!n.eol();){var d=CodeMirror.innerMode(a,e),m=a.token(n,e),r=n.current();n.start=n.pos;(!p||/\S/.test(r))&&(k+=r,p=!1);!p&&d.mode.newlineAfterToken&&d.mode.newlineAfterToken(m,r,n.string.slice(n.pos)||b[f+1]||"",d.state)&&
+(k+="\n",p=!0,++q)}!n.pos&&a.blankLine&&a.blankLine(e);!p&&f<b.length-1&&(k+="\n",p=!0,++q)}g.operation(function(){g.replaceRange(k,c,l);for(var a=c.line+1,b=c.line+q;a<=b;++a)g.indentLine(a,"smart");g.setCursor({line:0,ch:0})})})})();
+(function(){function c(c){for(var n,g,a=[/for\s*?\((.*?)\)/g,/&#?[a-z0-9]+;[\s\S]/g,/\"(.*?)((\")|$)/g,/\/\*(.*?)(\*\/|$)/g,/^\/\/.*/g],b=[],e=0;e<a.length;e++)for(n=0;n<c.length;)if(g=c.substr(n).match(a[e]),null!=g)b.push({start:n+g.index,end:n+g.index+g[0].length}),n+=g.index+Math.max(1,g[0].length);else break;return b.sort(function(a,b){return a.start-b.start}),b}CodeMirror.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(c,n){return/^[;{}]$/.test(n)}});CodeMirror.extendMode("javascript",
+{commentStart:"/*",commentEnd:"*/",wordWrapChars:[";","\\{","\\}"],autoFormatLineBreaks:function(l){var n=0,g=this.jsonMode?function(a){return a.replace(/([,{])/g,"$1\n").replace(/}/g,"\n}")}:function(a){return a.replace(/(;|\{|\})([^\r\n;])/g,"$1\n$2")},a=c(l),b="",e;if(null!=a){for(e=0;e<a.length;e++)a[e].start>n&&(b+=g(l.substring(n,a[e].start)),n=a[e].start),a[e].start<=n&&a[e].end>=n&&(b+=l.substring(n,a[e].end),n=a[e].end);n<l.length&&(b+=g(l.substr(n)))}else b=g(l);return b.replace(/^\n*|\n*$/,
+"")}});CodeMirror.extendMode("xml",{commentStart:"\x3c!--",commentEnd:"--\x3e",noBreak:!1,noBreakEmpty:null,tagType:"",tagName:"",isXML:!1,newlineAfterToken:function(c,n,g){var a=!1,b=null,e="",h;if(this.isXML="xml"==this.configuration?!0:!1,"comment"==c||/\x3c!--/.test(g))return!1;if("tag"==c){if(0==n.indexOf("\x3c")&&0==!n.indexOf("\x3c/")&&(this.tagType="open",b=n.match(/^<\s*?([\w]+?)$/i),this.tagName=null!=b?b[1]:"",e=this.tagName.toLowerCase(),-1!="|label|li|option|textarea|title|a|b|bdi|bdo|big|center|cite|del|em|font|i|img|ins|s|small|span|strike|strong|sub|sup|u|".indexOf("|"+
+e+"|")&&(this.noBreak=!0)),0==n.indexOf("\x3e")&&"open"==this.tagType)return(this.tagType="",h=this.isXML?"[^\x3c]*?":"",RegExp("^"+h+"\x3c/s*?"+this.tagName+"s*?\x3e","i").test(g))?(this.noBreak=!1,this.isXML||(this.tagName=""),!1):(a=this.noBreak,this.noBreak=!1,a?!1:!0);if(0==n.indexOf("\x3c/")&&(this.tagType="close",b=n.match(/^<\/\s*?([\w]+?)$/i),null!=b&&(e=b[1].toLowerCase()),-1!="|a|b|bdi|bdo|big|center|cite|del|em|font|i|img|ins|s|small|span|strike|strong|sub|sup|u|".indexOf("|"+e+"|")&&
+(this.noBreak=!0)),0==n.indexOf("\x3e")&&"close"==this.tagType)return(this.tagType="",0==g.indexOf("\x3c")&&(b=g.match(/^<\/?\s*?([\w]+?)(\s|>)/i),e=null!=b?b[1].toLowerCase():"",-1=="|label|li|option|textarea|title|a|b|bdi|bdo|big|center|cite|del|em|font|i|img|ins|s|small|span|strike|strong|sub|sup|u|".indexOf("|"+e+"|")))?(this.noBreak=!1,!0):(a=this.noBreak,this.noBreak=!1,a?!1:!0)}return 0==g.indexOf("\x3c")?(this.noBreak=!1,this.isXML&&""!=this.tagName)?(this.tagName="",!1):(b=g.match(/^<\/?\s*?([\w]+?)(\s|>)/i),
+e=null!=b?b[1].toLowerCase():"",-1!="|label|li|option|textarea|title|a|b|bdi|bdo|big|center|cite|del|em|font|i|img|ins|s|small|span|strike|strong|sub|sup|u|".indexOf("|"+e+"|")?!1:!0):!1}});CodeMirror.defineExtension("commentRange",function(c,n,g){var a=this,b=CodeMirror.innerMode(a.getMode(),a.getTokenAt(n).state).mode;a.operation(function(){if(c)a.replaceRange(b.commentEnd,g),a.replaceRange(b.commentStart,n),n.line==g.line&&n.ch==g.ch&&a.setCursor(n.line,n.ch+b.commentStart.length);else{var e=a.getRange(n,
+g),h=e.indexOf(b.commentStart),k=e.lastIndexOf(b.commentEnd);-1<h&&-1<k&&k>h&&(e=e.substr(0,h)+e.substring(h+b.commentStart.length,k)+e.substr(k+b.commentEnd.length));a.replaceRange(e,n,g)}})});CodeMirror.defineExtension("autoIndentRange",function(c,n){var g=this;this.operation(function(){for(var a=c.line;a<=n.line;a++)g.indentLine(a,"smart")})});CodeMirror.defineExtension("autoFormatRange",function(c,n){for(var g,a=this,b=a.getMode(),e=a.getRange(c,n).split("\n"),h=CodeMirror.copyState(b,a.getTokenAt(c).state),
+k=a.getOption("tabSize"),q="",p=0,f=0==c.ch,d=0;d<e.length;++d){for(g=new CodeMirror.StringStream(e[d],k);!g.eol();){var m=CodeMirror.innerMode(b,h),r=b.token(g,h),t=g.current();g.start=g.pos;(!f||/\S/.test(t))&&(q+=t,f=!1);!f&&m.mode.newlineAfterToken&&m.mode.newlineAfterToken(r,t,g.string.slice(g.pos)||e[d+1]||"",m.state)&&(q+="\n",f=!0,++p)}!g.pos&&b.blankLine&&b.blankLine(h);!f&&d<e.length-1&&(q+="\n",f=!0,++p)}a.operation(function(){a.replaceRange(q,c,n);for(var b=c.line+1,f=c.line+p;b<=f;++b)a.indentLine(b,
+"smart");a.setSelection(c,a.getCursor(!1))})})})();
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){function l(a){for(var c=0;c<a.state.activeLines.length;c++)a.removeLineClass(a.state.activeLines[c],"wrap",b),a.removeLineClass(a.state.activeLines[c],"background",e),a.removeLineClass(a.state.activeLines[c],"gutter",h)}function n(a,b){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!=
+b[c])return!1;return!0}function g(a,c){for(var g,f,d=[],m=0;m<c.length;m++)(g=c[m],g.empty())&&(f=a.getLineHandleVisualStart(g.head.line),d[d.length-1]!=f&&d.push(f));n(a.state.activeLines,d)||a.operation(function(){l(a);for(var c=0;c<d.length;c++)a.addLineClass(d[c],"wrap",b),a.addLineClass(d[c],"background",e),a.addLineClass(d[c],"gutter",h);a.state.activeLines=d})}function a(a,b){g(a,b.ranges)}var b="CodeMirror-activeline",e="CodeMirror-activeline-background",h="CodeMirror-activeline-gutter";c.defineOption("styleActiveLine",
+!1,function(b,e,h){h=h&&h!=c.Init;e&&!h?(b.state.activeLines=[],g(b,b.listSelections()),b.on("beforeSelectionChange",a)):!e&&h&&(b.off("beforeSelectionChange",a),l(b),delete b.state.activeLines)})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror"),require("./matchesonscrollbar")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./matchesonscrollbar"],c):c(CodeMirror)})(function(c){function l(a){this.options={};for(var b in q)this.options[b]=(a&&a.hasOwnProperty(b)?a:q)[b];this.matchesonscroll=this.overlay=this.timeout=null;this.active=!1}function n(b){var c=b.state.matchHighlighter;(c.active||b.hasFocus())&&a(b,c)}function g(b){var c=
+b.state.matchHighlighter;c.active||(c.active=!0,a(b,c))}function a(a,b){clearTimeout(b.timeout);b.timeout=setTimeout(function(){h(a)},b.options.delay)}function b(a,b,c,e){var g=a.state.matchHighlighter,h;a.addOverlay(g.overlay=k(b,c,e));g.options.annotateScrollbar&&a.showMatchesOnScrollbar&&(h=c?new RegExp("\\b"+b+"\\b"):b,g.matchesonscroll=a.showMatchesOnScrollbar(h,!1,{className:"CodeMirror-selection-highlight-scrollbar"}))}function e(a){var b=a.state.matchHighlighter;b.overlay&&(a.removeOverlay(b.overlay),
+b.overlay=null,b.matchesonscroll&&(b.matchesonscroll.clear(),b.matchesonscroll=null))}function h(a){a.operation(function(){var c=a.state.matchHighlighter,d,g,h;if(e(a),!a.somethingSelected()&&c.options.showToken){d=!0===c.options.showToken?/[\w$]/:c.options.showToken;h=a.getCursor();g=a.getLine(h.line);for(var k=h=h.ch;h&&d.test(g.charAt(h-1));)--h;for(;k<g.length&&d.test(g.charAt(k));)++k;h<k&&b(a,g.slice(h,k),d,c.options.style)}else{var l;if((l=(d=a.getCursor("from"),g=a.getCursor("to"),d.line==
+g.line))&&!(l=!c.options.wordsOnly)){var n;l=null!==a.getRange(d,g).match(/^\w+$/)?0<d.ch&&(k={line:d.line,ch:d.ch-1},n=a.getRange(k,d),null===n.match(/\W/))?!1:g.ch<a.getLine(d.line).length&&(k={line:g.line,ch:g.ch+1},n=a.getRange(g,k),null===n.match(/\W/))?!1:!0:!1}l&&(h=a.getRange(d,g),c.options.trim&&(h=h.replace(/^\s+|\s+$/g,"")),h.length>=c.options.minChars&&b(a,h,!1,c.options.style))}})}function k(a,b,c){return{token:function(e){var g;if(g=e.match(a))(g=!b)||(g=(!e.start||!b.test(e.string.charAt(e.start-
+1)))&&(e.pos==e.string.length||!b.test(e.string.charAt(e.pos))));if(g)return c;e.next();e.skipTo(a.charAt(0))||e.skipToEnd()}}}var q={style:"matchhighlight",minChars:2,delay:100,wordsOnly:!1,annotateScrollbar:!1,showToken:!1,trim:!0};c.defineOption("highlightSelectionMatches",!1,function(a,b,d){if(d&&d!=c.Init&&(e(a),clearTimeout(a.state.matchHighlighter.timeout),a.state.matchHighlighter=null,a.off("cursorActivity",n),a.off("focus",g)),b){b=a.state.matchHighlighter=new l(b);if(a.hasFocus())b.active=
+!0,h(a);else a.on("focus",g);a.on("cursorActivity",n)}})});
+(function(c){"object"==typeof exports&&"object"==typeof module?c(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],c):c(CodeMirror)})(function(c){c.multiplexingMode=function(l){function n(a,b,c,g){var k,l;return"string"==typeof b?(k=a.indexOf(b,c),g&&-1<k?k+b.length:k):(l=b.exec(c?a.slice(c):a),l?l.index+c+(g?l[0].length:0):-1)}var g=Array.prototype.slice.call(arguments,1);return{startState:function(){return{outer:c.startState(l),innerActive:null,
+inner:null}},copyState:function(a){return{outer:c.copyState(l,a.outer),innerActive:a.innerActive,inner:a.innerActive&&c.copyState(a.innerActive.mode,a.inner)}},token:function(a,b){var e,h,k,q,p,f;if(b.innerActive)return(e=b.innerActive,p=a.string,!e.close&&a.sol())?(b.innerActive=b.inner=null,this.token(a,b)):(f=e.close?n(p,e.close,a.pos,e.parseDelimiters):-1,f!=a.pos||e.parseDelimiters)?(-1<f&&(a.string=p.slice(0,f)),h=e.mode.token(a,b.inner),-1<f&&(a.string=p),f==a.pos&&e.parseDelimiters&&(b.innerActive=
+b.inner=null),e.innerStyle&&(h=h?h+" "+e.innerStyle:e.innerStyle),h):(a.match(e.close),b.innerActive=b.inner=null,e.delimStyle&&e.delimStyle+" "+e.delimStyle+"-close");e=Infinity;p=a.string;for(h=0;h<g.length;++h){if(k=g[h],f=n(p,k.open,a.pos),f==a.pos)return k.parseDelimiters||a.match(k.open),b.innerActive=k,b.inner=c.startState(k.mode,l.indent?l.indent(b.outer,""):0),k.delimStyle&&k.delimStyle+" "+k.delimStyle+"-open";-1!=f&&f<e&&(e=f)}return Infinity!=e&&(a.string=p.slice(0,e)),q=l.token(a,b.outer),
+Infinity!=e&&(a.string=p),q},indent:function(a,b){var e=a.innerActive?a.innerActive.mode:l;return e.indent?e.indent(a.innerActive?a.inner:a.outer,b):c.Pass},blankLine:function(a){var b=a.innerActive?a.innerActive.mode:l,e,h;if(b.blankLine&&b.blankLine(a.innerActive?a.inner:a.outer),a.innerActive)"\n"===a.innerActive.close&&(a.innerActive=a.inner=null);else for(e=0;e<g.length;++e)h=g[e],"\n"===h.open&&(a.innerActive=h,a.inner=c.startState(h.mode,b.indent?b.indent(a.outer,""):0))},electricChars:l.electricChars,
+innerMode:function(a){return a.inner?{state:a.inner,mode:a.innerActive.mode}:{state:a.outer,mode:l}}}}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js	(revision 2)
@@ -0,0 +1,22 @@
+﻿(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],b):b(CodeMirror)})(function(b){function q(b,e,a){var d;return d=b.getWrapperElement().appendChild(document.createElement("div")),d.className=a?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof e?d.innerHTML=e:d.appendChild(e),d}function v(b,e){b.state.currentNotificationClose&&b.state.currentNotificationClose();
+b.state.currentNotificationClose=e}b.defineExtension("openDialog",function(f,e,a){function d(b){if("string"==typeof b)c.value=b;else if(!l&&(l=!0,k.parentNode.removeChild(k),n.focus(),a.onClose))a.onClose(k)}var c;a||(a={});v(this,null);var k=q(this,f,a.bottom),l=!1,n=this;if(c=k.getElementsByTagName("input")[0],c){if(c.focus(),a.value&&(c.value=a.value,!1!==a.selectValueOnOpen&&c.select()),a.onInput)b.on(c,"input",function(b){a.onInput(b,c.value,d)});if(a.onKeyUp)b.on(c,"keyup",function(b){a.onKeyUp(b,
+c.value,d)});b.on(c,"keydown",function(f){a&&a.onKeyDown&&a.onKeyDown(f,c.value,d)||((27==f.keyCode||!1!==a.closeOnEnter&&13==f.keyCode)&&(c.blur(),b.e_stop(f),d()),13==f.keyCode&&e(c.value,f))});if(!1!==a.closeOnBlur)b.on(c,"blur",d)}else if(f=k.getElementsByTagName("button")[0]){b.on(f,"click",function(){d();n.focus()});if(!1!==a.closeOnBlur)b.on(f,"blur",d);f.focus()}return d});b.defineExtension("openConfirm",function(f,e,a){function d(){l||(l=!0,k.parentNode.removeChild(k),n.focus())}var c;v(this,
+null);var k=q(this,f,a&&a.bottom);a=k.getElementsByTagName("button");var l=!1,n=this,r=1;a[0].focus();for(f=0;f<a.length;++f)c=a[f],function(a){b.on(c,"click",function(e){b.e_preventDefault(e);d();a&&a(n)})}(e[f]),b.on(c,"blur",function(){--r;setTimeout(function(){0>=r&&d()},200)}),b.on(c,"focus",function(){++r})});b.defineExtension("openNotification",function(f,e){function a(){c||(c=!0,clearTimeout(k),d.parentNode.removeChild(d))}v(this,a);var d=q(this,f,e&&e.bottom),c=!1,k,l=e&&"undefined"!=typeof e.duration?
+e.duration:5E3;b.on(d,"click",function(e){b.e_preventDefault(e);a()});return l&&(k=setTimeout(a,l)),a})});
+(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror"),require("./searchcursor"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./searchcursor","../dialog/dialog"],b):b(CodeMirror)})(function(b){function q(g,a){return"string"==typeof g?g=new RegExp(g.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$\x26"),a?"gi":"g"):g.global||(g=new RegExp(g.source,g.ignoreCase?"gi":"g")),{token:function(a){g.lastIndex=
+a.pos;var b=g.exec(a.string);if(b&&b.index==a.pos)return a.pos+=b[0].length||1,"searching";b?a.pos=b.index:a.skipToEnd()}}}function v(){this.overlay=this.posFrom=this.posTo=this.lastQuery=this.query=null}function f(g){return g.state.search||(g.state.search=new v)}function e(g){return"string"==typeof g&&g==g.toLowerCase()}function a(g,a,b){return g.getSearchCursor(a,b,e(a))}function d(g,a,b,e,d){g.openDialog(a,e,{value:b,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){w(g)},onKeyDown:d})}function c(g,
+a,b,e,d){g.openDialog?g.openDialog(a,d,{value:e,selectValueOnOpen:!0}):d(prompt(b,e))}function k(g,a,b,e){g.openConfirm?g.openConfirm(a,e):confirm(b)&&e[0]()}function l(g){return g.replace(/\\(.)/g,function(g,a){return"n"==a?"\n":"r"==a?"\r":a})}function n(g){var a=g.match(/^\/(.*)\/([a-z]*)$/);if(a)try{g=new RegExp(a[1],-1==a[2].indexOf("i")?"":"i")}catch(b){}else g=l(g);return("string"==typeof g?""==g:g.test(""))&&(g=/x^/),g}function r(g,a,b){a.queryText=b;a.query=n(b);g.removeOverlay(a.overlay,
+e(a.query));a.overlay=q(a.query,e(a.query));g.addOverlay(a.overlay);g.showMatchesOnScrollbar&&(a.annotate&&(a.annotate.clear(),a.annotate=null),a.annotate=g.showMatchesOnScrollbar(a.query,e(a.query)))}function x(a,e,h,w){var m=f(a),l,p,k;if(m.query)return y(a,e);l=a.getSelection()||m.lastQuery;h&&a.openDialog?(p=null,k=function(e,d){(b.e_stop(d),e)&&(e!=m.queryText&&(r(a,m,e),m.posFrom=m.posTo=a.getCursor()),p&&(p.style.opacity=1),y(a,d.shiftKey,function(b,e){var d;3>e.line&&document.querySelector&&
+(d=a.display.wrapper.querySelector(".CodeMirror-dialog"))&&d.getBoundingClientRect().bottom-4>a.cursorCoords(e,"window").top&&((p=d).style.opacity=.4)}))},d(a,z,l,k,function(e,d){var c=b.keyName(e),m=b.keyMap[a.getOption("keyMap")][c];m||(m=a.getOption("extraKeys")[c]);"findNext"==m||"findPrev"==m||"findPersistentNext"==m||"findPersistentPrev"==m?(b.e_stop(e),r(a,f(a),d),a.execCommand(m)):("find"==m||"findPersistent"==m)&&(b.e_stop(e),k(d,e))}),w&&l&&(r(a,m,l),y(a,e))):c(a,z,"Search for:",l,function(b){b&&
+!m.query&&a.operation(function(){r(a,m,b);m.posFrom=m.posTo=a.getCursor();y(a,e)})})}function y(g,e,d){g.operation(function(){var c=f(g),m=a(g,c.query,e?c.posFrom:c.posTo);(m.find(e)||(m=a(g,c.query,e?b.Pos(g.lastLine()):b.Pos(g.firstLine(),0)),m.find(e)))&&(g.setSelection(m.from(),m.to()),g.scrollIntoView({from:m.from(),to:m.to()},20),c.posFrom=m.from(),c.posTo=m.to(),d&&d(m.from(),m.to()))})}function w(a){a.operation(function(){var b=f(a);(b.lastQuery=b.query,b.query)&&(b.query=b.queryText=null,
+a.removeOverlay(b.overlay),b.annotate&&(b.annotate.clear(),b.annotate=null))})}function p(b,e,d){b.operation(function(){for(var c,m=a(b,e);m.findNext();)"string"!=typeof e?(c=b.getRange(m.from(),m.to()).match(e),m.replace(d.replace(/\$(\d)/g,function(a,b){return c[b]}))):m.replace(d)})}function h(b,e){if(!b.getOption("readOnly")){var d=b.getSelection()||f(b).lastQuery,h=e?"Replace all:":"Replace:";c(b,h+t,h,d,function(d){d&&(d=n(d),c(b,u,"Replace with:","",function(c){if(c=l(c),e)p(b,d,c);else{w(b);
+var f=a(b,d,b.getCursor("from")),h=function(){var e=f.from(),l;!(l=f.findNext())&&(f=a(b,d),!(l=f.findNext())||e&&f.from().line==e.line&&f.from().ch==e.ch)||(b.setSelection(f.from(),f.to()),b.scrollIntoView({from:f.from(),to:f.to()}),k(b,A,"Replace?",[function(){y(l)},h,function(){p(b,d,c)}]))},y=function(a){f.replace("string"==typeof d?c:c.replace(/\$(\d)/g,function(b,e){return a[e]}));h()};h()}}))})}}var z='Search: \x3cinput type\x3d"text" style\x3d"width: 10em" class\x3d"CodeMirror-search-field"/\x3e \x3cspan style\x3d"color: #888" class\x3d"CodeMirror-search-hint"\x3e(Use /re/ syntax for regexp search)\x3c/span\x3e',
+t=' \x3cinput type\x3d"text" style\x3d"width: 10em" class\x3d"CodeMirror-search-field"/\x3e \x3cspan style\x3d"color: #888" class\x3d"CodeMirror-search-hint"\x3e(Use /re/ syntax for regexp search)\x3c/span\x3e',u='With: \x3cinput type\x3d"text" style\x3d"width: 10em" class\x3d"CodeMirror-search-field"/\x3e',A="Replace? \x3cbutton\x3eYes\x3c/button\x3e \x3cbutton\x3eNo\x3c/button\x3e \x3cbutton\x3eAll\x3c/button\x3e \x3cbutton\x3eStop\x3c/button\x3e";b.commands.find=function(a){w(a);x(a)};b.commands.findPersistent=
+function(a){w(a);x(a,!1,!0)};b.commands.findPersistentNext=function(a){x(a,!1,!0,!0)};b.commands.findPersistentPrev=function(a){x(a,!0,!0,!0)};b.commands.findNext=x;b.commands.findPrev=function(a){x(a,!0)};b.commands.clearSearch=w;b.commands.replace=h;b.commands.replaceAll=function(a){h(a,!0)}});
+(function(b){"object"==typeof exports&&"object"==typeof module?b(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],b):b(CodeMirror)})(function(b){function q(b,a,d,c){var k,l,n,r;this.atOccurrence=!1;this.doc=b;null==c&&"string"==typeof a&&(c=!1);d=d?b.clipPos(d):f(0,0);this.pos={from:d,to:d};"string"!=typeof a?(a.global||(a=new RegExp(a.source,a.ignoreCase?"ig":"g")),this.matches=function(d,c){var l,p,h,k,n;if(d){a.lastIndex=0;l=b.getLine(c.line).slice(0,
+c.ch);for(p=0;(a.lastIndex=p,n=a.exec(l),n)&&(h=n,k=h.index,p=h.index+(h[0].length||1),p!=l.length););(p=h&&h[0].length||0)||(0==k&&0==l.length?h=void 0:k!=b.getLine(c.line).length&&p++)}else a.lastIndex=c.ch,l=b.getLine(c.line),p=(h=a.exec(l))&&h[0].length||0,k=h&&h.index,k+p==l.length||p||(p=1);if(h&&p)return{from:f(c.line,k),to:f(c.line,k+p),match:h}}):(k=a,c&&(a=a.toLowerCase()),l=c?function(a){return a.toLowerCase()}:function(a){return a},n=a.split("\n"),1==n.length?this.matches=a.length?function(d,
+c){if(d){var n=b.getLine(c.line).slice(0,c.ch),p=l(n),h=p.lastIndexOf(a);if(-1<h)return h=v(n,p,h),{from:f(c.line,h),to:f(c.line,h+k.length)}}else if(n=b.getLine(c.line).slice(c.ch),p=l(n),h=p.indexOf(a),-1<h)return h=v(n,p,h)+c.ch,{from:f(c.line,h),to:f(c.line,h+k.length)}}:function(){}:(r=k.split("\n"),this.matches=function(a,c){var d=n.length-1,k,h,q,t,u;if(a){if(c.line-(n.length-1)<b.firstLine()||l(b.getLine(c.line).slice(0,r[d].length))!=n[n.length-1])return;k=f(c.line,r[d].length);t=c.line-
+1;for(u=d-1;1<=u;--u,--t)if(n[u]!=l(b.getLine(t)))return;return(h=b.getLine(t),q=h.length-r[0].length,l(h.slice(q))!=n[0])?void 0:{from:f(t,q),to:k}}if(!(c.line+(n.length-1)>b.lastLine())&&(h=b.getLine(c.line),q=h.length-r[0].length,l(h.slice(q))==n[0])){k=f(c.line,q);t=c.line+1;for(u=1;u<d;++u,++t)if(n[u]!=l(b.getLine(t)))return;if(l(b.getLine(t).slice(0,r[d].length))==n[d])return{from:k,to:f(t,r[d].length)}}}))}function v(b,a,d){var c;if(b.length==a.length)return d;for(a=Math.min(d,b.length);;)if(c=
+b.slice(0,a).toLowerCase().length,c<d)++a;else if(c>d)--a;else return a}var f=b.Pos;q.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(b){function a(a){a=f(a,0);return d.pos={from:a,to:a},d.atOccurrence=!1,!1}for(var d=this,c=this.doc.clipPos(b?this.pos.from:this.pos.to),k;;){if(this.pos=this.matches(b,c))return this.atOccurrence=!0,this.pos.match||!0;if(b){if(!c.line)return a(0);c=f(c.line-1,this.doc.getLine(c.line-1).length)}else{if(k=
+this.doc.lineCount(),c.line==k-1)return a(k);c=f(c.line+1,0)}}},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(e,a){if(this.atOccurrence){var d=b.splitLines(e);this.doc.replaceRange(d,this.pos.from,this.pos.to,a);this.pos.to=f(this.pos.from.line+d.length-1,d[d.length-1].length+(1==d.length?this.pos.from.ch:0))}}};b.defineExtension("getSearchCursor",function(b,a,d){return new q(this.doc,b,a,d)});b.defineDocExtension("getSearchCursor",
+function(b,a,d){return new q(this,b,a,d)});b.defineExtension("selectMatches",function(e,a){for(var d=[],c=this.getSearchCursor(e,this.getCursor("from"),a);c.findNext()&&!(0<b.cmpPos(c.to(),this.getCursor("to")));)d.push({anchor:c.from(),head:c.to()});d.length&&this.setSelections(d,0)})});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.min.js	(revision 2)
@@ -0,0 +1,301 @@
+﻿(function(za,X){"object"===typeof exports&&"undefined"!==typeof module?module.exports=X():"function"===typeof define&&define.amd?define(X):za.CodeMirror=X()})(this,function(){function za(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}function X(a){for(var b=a.childNodes.length;0<b;--b)a.removeChild(a.firstChild);return a}function U(a,b){return X(a).appendChild(b)}function r(a,b,c,d){a=document.createElement(a);c&&(a.className=c);d&&(a.style.cssText=d);if("string"==typeof b)a.appendChild(document.createTextNode(b));
+else if(b)for(c=0;c<b.length;++c)a.appendChild(b[c]);return a}function Tb(a,b){3==b.nodeType&&(b=b.parentNode);if(a.contains)return a.contains(b);do if(11==b.nodeType&&(b=b.host),b==a)return!0;while(b=b.parentNode)}function la(){var a;try{a=document.activeElement}catch(b){a=document.body||null}for(;a&&a.root&&a.root.activeElement;)a=a.root.activeElement;return a}function Ma(a,b){var c=a.className;za(b).test(c)||(a.className+=(c?" ":"")+b)}function Gc(a,b){for(var c=a.split(" "),d=0;d<c.length;d++)c[d]&&
+!za(c[d]).test(b)&&(b+=" "+c[d]);return b}function Hc(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function aa(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||!1===c&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function Y(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));d=d||0;for(e=e||0;;){var f=a.indexOf("\t",d);if(0>f||f>=b)return e+(b-d);e+=f-d;e+=c-e%c;d=f+1}}function Aa(){this.id=null}function H(a,b){for(var c=0;c<a.length;++c)if(a[c]==
+b)return c;return-1}function Ic(a,b,c){for(var d=0,e=0;;){var f=a.indexOf("\t",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);e+=f-d;e+=c-e%c;d=f+1;if(e>=b)return d}}function Jc(a){for(;Ub.length<=a;)Ub.push(y(Ub)+" ");return Ub[a]}function y(a){return a[a.length-1]}function Vb(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Of(a,b,c){for(var d=0,e=c(b);d<a.length&&c(a[d])<=e;)d++;a.splice(d,0,b)}function ib(){}function Pd(a,b){var c;Object.create?
+c=Object.create(a):(ib.prototype=a,c=new ib);b&&aa(b,c);return c}function Kc(a){return/\w/.test(a)||""<a&&(a.toUpperCase()!=a.toLowerCase()||Pf.test(a))}function Wb(a,b){return b?-1<b.source.indexOf("\\w")&&Kc(a)?!0:b.test(a):Kc(a)}function Qd(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function jb(a){return 768<=a.charCodeAt(0)&&Qf.test(a)}function Rf(a,b,c){this.input=c;this.scrollbarFiller=r("div",null,"CodeMirror-scrollbar-filler");this.scrollbarFiller.setAttribute("cm-not-content",
+"true");this.gutterFiller=r("div",null,"CodeMirror-gutter-filler");this.gutterFiller.setAttribute("cm-not-content","true");this.lineDiv=r("div",null,"CodeMirror-code");this.selectionDiv=r("div",null,null,"position: relative; z-index: 1");this.cursorDiv=r("div",null,"CodeMirror-cursors");this.measure=r("div",null,"CodeMirror-measure");this.lineMeasure=r("div",null,"CodeMirror-measure");this.lineSpace=r("div",[this.measure,this.lineMeasure,this.selectionDiv,this.cursorDiv,this.lineDiv],null,"position: relative; outline: none");
+this.mover=r("div",[r("div",[this.lineSpace],"CodeMirror-lines")],null,"position: relative");this.sizer=r("div",[this.mover],"CodeMirror-sizer");this.sizerWidth=null;this.heightForcer=r("div",null,null,"position: absolute; height: 30px; width: 1px;");this.gutters=r("div",null,"CodeMirror-gutters");this.lineGutter=null;this.scroller=r("div",[this.sizer,this.heightForcer,this.gutters],"CodeMirror-scroll");this.scroller.setAttribute("tabIndex","-1");this.wrapper=r("div",[this.scrollbarFiller,this.gutterFiller,
+this.scroller],"CodeMirror");B&&8>A&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight=0);I||sa&&kb||(this.scroller.draggable=!0);a&&(a.appendChild?a.appendChild(this.wrapper):a(this.wrapper));this.reportedViewFrom=this.reportedViewTo=this.viewFrom=this.viewTo=b.first;this.view=[];this.externalMeasured=this.renderedView=null;this.lastWrapHeight=this.lastWrapWidth=this.viewOffset=0;this.updateLineNumbers=null;this.nativeBarWidth=this.barHeight=this.barWidth=0;this.scrollbarsClipped=!1;
+this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null;this.alignWidgets=!1;this.maxLine=this.cachedCharWidth=this.cachedTextHeight=this.cachedPaddingH=null;this.maxLineLength=0;this.maxLineChanged=!1;this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null;this.shift=!1;this.activeTouch=this.selForContextMenu=null;c.init(this)}function u(a,b){b-=a.first;if(0>b||b>=a.size)throw Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=
+c.children[d],f=e.chunkSize();if(b<f){c=e;break}b-=f}return c.lines[b]}function Ba(a,b,c){var d=[],e=b.line;a.iter(b.line,c.line+1,function(a){a=a.text;e==c.line&&(a=a.slice(0,c.ch));e==b.line&&(a=a.slice(b.ch));d.push(a);++e});return d}function Lc(a,b,c){var d=[];a.iter(b,c,function(a){d.push(a.text)});return d}function ga(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function C(a){if(null==a.parent)return null;var b=a.parent;a=H(b.lines,a);for(var c=b.parent;c;b=c,c=c.parent)for(var d=
+0;c.children[d]!=b;++d)a+=c.children[d].chunkSize();return a+b.first}function Ca(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(b<f){a=e;continue a}b-=f;c+=e.chunkSize()}return c}while(!a.lines);for(d=0;d<a.lines.length;++d){e=a.lines[d].height;if(b<e)break;b-=e}return c+d}function lb(a,b){return b>=a.first&&b<a.first+a.size}function Mc(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function q(a,b){if(!(this instanceof q))return new q(a,
+b);this.line=a;this.ch=b}function w(a,b){return a.line-b.line||a.ch-b.ch}function Nc(a){return q(a.line,a.ch)}function Xb(a,b){return 0>w(a,b)?b:a}function Yb(a,b){return 0>w(a,b)?a:b}function x(a,b){if(b.line<a.first)return q(a.first,0);var c=a.first+a.size-1;if(b.line>c)return q(c,u(a,c).text.length);var c=u(a,b.line).text.length,d=b.ch,c=null==d||d>c?q(b.line,c):0>d?q(b.line,0):b;return c}function Rd(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=x(a,b[d]);return c}function Zb(a,b,c){this.marker=a;
+this.from=b;this.to=c}function mb(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function Oc(a,b){if(b.full)return null;var c=lb(a,b.from.line)&&u(a,b.from.line).markedSpans,d=lb(a,b.to.line)&&u(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==w(b.from,b.to),h;if(c)for(var k=0;k<c.length;++k){var l=c[k],m=l.marker;if(null==l.from||(m.inclusiveLeft?l.from<=e:l.from<e)||!(l.from!=e||"bookmark"!=m.type||g&&l.marker.insertLeft)){var n=null==l.to||
+(m.inclusiveRight?l.to>=e:l.to>e);(h||(h=[])).push(new Zb(m,l.from,n?null:l.to))}}var c=h,p;if(d)for(h=0;h<d.length;++h)if(k=d[h],l=k.marker,null==k.to||(l.inclusiveRight?k.to>=f:k.to>f)||k.from==f&&"bookmark"==l.type&&(!g||k.marker.insertLeft))m=null==k.from||(l.inclusiveLeft?k.from<=f:k.from<f),(p||(p=[])).push(new Zb(l,m?null:k.from-f,null==k.to?null:k.to-f));d=p;f=1==b.text.length;g=y(b.text).length+(f?e:0);if(c)for(p=0;p<c.length;++p)if(h=c[p],null==h.to)(k=mb(d,h.marker),k)?f&&(h.to=null==k.to?
+null:k.to+g):h.to=e;if(d)for(e=0;e<d.length;++e)p=d[e],null!=p.to&&(p.to+=g),null==p.from?mb(c,p.marker)||(p.from=g,f&&(c||(c=[])).push(p)):(p.from+=g,f&&(c||(c=[])).push(p));c&&(c=Sd(c));d&&d!=c&&(d=Sd(d));e=[c];if(!f){var f=b.text.length-2,t;if(0<f&&c)for(g=0;g<c.length;++g)null==c[g].to&&(t||(t=[])).push(new Zb(c[g].marker,null,null));for(c=0;c<f;++c)e.push(t);e.push(d)}return e}function Sd(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.from==c.to&&!1!==c.marker.clearWhenEmpty&&a.splice(b--,
+1)}return a.length?a:null}function Sf(a,b,c){var d=null;a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=H(d,c)||(d||(d=[])).push(c)}});if(!d)return null;a=[{from:b,to:c}];for(b=0;b<d.length;++b){c=d[b];for(var e=c.find(0),f=0;f<a.length;++f){var g=a[f];if(!(0>w(g.to,e.from)||0<w(g.from,e.to))){var h=[f,1],k=w(g.from,e.from),l=w(g.to,e.to);(0>k||!c.inclusiveLeft&&!k)&&h.push({from:g.from,to:e.from});(0<l||
+!c.inclusiveRight&&!l)&&h.push({from:e.to,to:g.to});a.splice.apply(a,h);f+=h.length-1}}}return a}function Td(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Ud(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Vd(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var c=a.find(),d=b.find(),e=w(c.from,d.from)||(a.inclusiveLeft?-1:0)-(b.inclusiveLeft?-1:0);return e?-e:(c=w(c.to,d.to)||(a.inclusiveRight?
+1:0)-(b.inclusiveRight?1:0))?c:b.id-a.id}function Da(a,b){var c=ta&&a.markedSpans,d;if(c)for(var e=void 0,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||0>Vd(d,e.marker))&&(d=e.marker);return d}function Wd(a,b,c,d,e){a=u(a,b);if(a=ta&&a.markedSpans)for(b=0;b<a.length;++b){var f=a[b];if(f.marker.collapsed){var g=f.marker.find(0),h=w(g.from,c)||(f.marker.inclusiveLeft?-1:0)-(e.inclusiveLeft?-1:0),k=w(g.to,d)||(f.marker.inclusiveRight?1:0)-(e.inclusiveRight?1:0);if(!(0<=h&&
+0>=k||0>=h&&0<=k)&&(0>=h&&(f.marker.inclusiveRight&&e.inclusiveLeft?0<=w(g.to,c):0<w(g.to,c))||0<=h&&(f.marker.inclusiveRight&&e.inclusiveLeft?0>=w(g.from,d):0>w(g.from,d))))return!0}}}function ha(a){for(var b;b=Da(a,!0);)a=b.find(-1,!0).line;return a}function Pc(a,b){var c=u(a,b),d=ha(c);return c==d?b:C(d)}function Xd(a,b){if(b>a.lastLine())return b;var c=u(a,b),d;if(!Ea(a,c))return b;for(;d=Da(c,!1);)c=d.find(1,!0).line;return C(c)+1}function Ea(a,b){var c=ta&&b.markedSpans;if(c)for(var d=void 0,
+e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed&&(null==d.from||!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&Qc(a,b,d)))return!0}function Qc(a,b,c){if(null==c.to)return b=c.marker.find(1,!0),Qc(a,b.line,mb(b.line.markedSpans,c.marker));if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var d=void 0,e=0;e<b.markedSpans.length;++e)if(d=b.markedSpans[e],d.marker.collapsed&&!d.marker.widgetNode&&d.from==c.to&&(null==d.to||d.to!=c.from)&&(d.marker.inclusiveLeft||c.marker.inclusiveRight)&&
+Qc(a,b,d))return!0}function ia(a){a=ha(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;else b+=e.height}for(a=c.parent;a;c=a,a=c.parent)for(d=0;d<a.children.length&&(e=a.children[d],e!=c);++d)b+=e.height;return b}function $b(a){if(0==a.height)return 0;for(var b=a.text.length,c,d=a;c=Da(d,!0);)c=c.find(0,!0),d=c.from.line,b+=c.from.ch-c.to.ch;for(d=a;c=Da(d,!1);)a=c.find(0,!0),b-=d.text.length-a.from.ch,d=a.to.line,b+=d.text.length-a.to.ch;return b}function Rc(a){var b=
+a.display;a=a.doc;b.maxLine=u(a,a.first);b.maxLineLength=$b(b.maxLine);b.maxLineChanged=!0;a.iter(function(a){var d=$b(a);d>b.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function Tf(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];if(g.from<c&&g.to>b||b==c&&g.to==b)d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0}e||d(b,c,"ltr")}function Sc(a){return a.level%2?a.to:a.from}function Tc(a){return a.level%2?a.from:a.to}function ac(a){return(a=ba(a))?
+Sc(a[0]):0}function bc(a){var b=ba(a);return b?Tc(y(b)):a.text.length}function cc(a,b){var c;nb=null;for(var d=0;d<a.length;++d){var e=a[d];if(e.from<b&&e.to>b)return d;if(e.from==b||e.to==b)if(null==c)c=d;else{var f;f=e.level;var g=a[c].level,h=a[0].level;f=f==h?!0:g==h?!1:f<g;if(f)return e.from!=e.to&&(nb=c),d;e.from!=e.to&&(nb=d);break}}return c}function Uc(a,b,c,d){if(!d)return b+c;do b+=c;while(0<b&&jb(a.text.charAt(b)));return b}function Vc(a,b,c,d){var e=ba(a);if(!e)return Yd(a,b,c,d);var f=
+cc(e,b),g=e[f];for(b=Uc(a,b,g.level%2?-c:c,d);;){if(b>g.from&&b<g.to)return b;if(b==g.from||b==g.to){if(cc(e,b)==f)return b;g=e[f+c];return 0<c==g.level%2?g.to:g.from}g=e[f+=c];if(!g)return null;b=0<c==g.level%2?Uc(a,g.to,-1,d):Uc(a,g.from,1,d)}}function Yd(a,b,c,d){b+=c;if(d)for(;0<b&&jb(a.text.charAt(b));)b+=c;return 0>b||b>a.text.length?null:b}function ba(a){var b=a.order;null==b&&(b=a.order=Uf(a.text));return b}function ca(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+
+b,c);else{var d=(a=a._handlers)&&a[b];d&&(c=H(d,c),-1<c&&(a[b]=d.slice(0,c).concat(d.slice(c+1))))}}function E(a,b){var c=a._handlers&&a._handlers[b]||dc;if(c.length)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)}function F(a,b,c){"string"==typeof b&&(b={type:b,preventDefault:function(){this.defaultPrevented=!0}});E(a,c||b.type,a,b);return Wc(b)||b.codemirrorIgnore}function Zd(a){var b=a._handlers&&a._handlers.cursorActivity;if(b){a=a.curOp.cursorActivityHandlers||
+(a.curOp.cursorActivityHandlers=[]);for(var c=0;c<b.length;++c)-1==H(a,b[c])&&a.push(b[c])}}function Z(a,b){return 0<(a._handlers&&a._handlers[b]||dc).length}function Na(a){a.prototype.on=function(a,c){v(this,a,c)};a.prototype.off=function(a,c){ca(this,a,c)}}function L(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function $d(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function Wc(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function ob(a){L(a);$d(a)}
+function ae(a){var b=a.which;null==b&&(a.button&1?b=1:a.button&2?b=3:a.button&4&&(b=2));da&&a.ctrlKey&&1==b&&(b=3);return b}function Vf(a){if(null==Xc){var b=r("span","​");U(a,r("span",[b,document.createTextNode("x")]));0!=a.firstChild.offsetHeight&&(Xc=1>=b.offsetWidth&&2<b.offsetHeight&&!(B&&8>A))}a=Xc?r("span","​"):r("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");a.setAttribute("cm-text","");return a}function Wf(a,b){2<arguments.length&&(b.dependencies=Array.prototype.slice.call(arguments,
+2));Yc[a]=b}function ec(a){if("string"==typeof a&&Oa.hasOwnProperty(a))a=Oa[a];else if(a&&"string"==typeof a.name&&Oa.hasOwnProperty(a.name)){var b=Oa[a.name];"string"==typeof b&&(b={name:b});a=Pd(b,a);a.name=b.name}else{if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return ec("application/xml");if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+json$/.test(a))return ec("application/json")}return"string"==typeof a?{name:a}:a||{name:"null"}}function Zc(a,b){b=ec(b);var c=Yc[b.name];if(!c)return Zc(a,
+"text/plain");c=c(a,b);if(Pa.hasOwnProperty(b.name)){var d=Pa[b.name],e;for(e in d)d.hasOwnProperty(e)&&(c.hasOwnProperty(e)&&(c["_"+e]=c[e]),c[e]=d[e])}c.name=b.name;b.helperType&&(c.helperType=b.helperType);if(b.modeProps)for(var f in b.modeProps)c[f]=b.modeProps[f];return c}function Xf(a,b){var c=Pa.hasOwnProperty(a)?Pa[a]:Pa[a]={};aa(b,c)}function ma(a,b){if(!0===b)return b;if(a.copyState)return a.copyState(b);var c={},d;for(d in b){var e=b[d];e instanceof Array&&(e=e.concat([]));c[d]=e}return c}
+function $c(a,b){for(var c;a.innerMode;){c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state;a=c.mode}return c||{mode:a,state:b}}function be(a,b,c){return a.startState?a.startState(b,c):!0}function ce(a,b,c,d){var e=[a.state.modeGen],f={};de(a,b.text,a.doc.mode,c,function(a,b){return e.push(a,b)},f,d);c=function(d){var c=a.state.overlays[d],k=1,l=0;de(a,b.text,c.mode,!0,function(a,b){for(var d=k;l<a;){var f=e[k];f>a&&e.splice(k,1,a,e[k+1],f);k+=2;l=Math.min(a,f)}if(b)if(c.opaque)e.splice(d,k-d,a,"overlay "+
+b),k=d+2;else for(;d<k;d+=2)f=e[d+1],e[d+1]=(f?f+" ":"")+"overlay "+b},f)};for(d=0;d<a.state.overlays.length;++d)c(d);return{styles:e,classes:f.bgClass||f.textClass?f:null}}function ee(a,b,c){if(!b.styles||b.styles[0]!=a.state.modeGen){var d=pb(a,C(b)),e=ce(a,b,b.text.length>a.options.maxHighlightLength?ma(a.doc.mode,d):d);b.stateAfter=d;b.styles=e.styles;e.classes?b.styleClasses=e.classes:b.styleClasses&&(b.styleClasses=null);c===a.doc.frontier&&a.doc.frontier++}return b.styles}function pb(a,b,c){var d=
+a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Yf(a,b,c),g=f>d.first&&u(d,f-1).stateAfter,g=g?ma(d.mode,g):be(d.mode);d.iter(f,b,function(c){ad(a,c.text,g);c.stateAfter=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo?ma(d.mode,g):null;++f});c&&(d.frontier=f);return g}function ad(a,b,c,d){var e=a.doc.mode;a=new qb(b,a.options.tabSize);a.start=a.pos=d||0;for(""==b&&fe(e,c);!a.eol();)bd(e,a,c),a.start=a.pos}function fe(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=$c(a,b);if(c.mode.blankLine)return c.mode.blankLine(c.state)}}
+function bd(a,b,c,d){for(var e=0;10>e;e++){d&&(d[0]=$c(a,c).mode);var f=a.token(b,c);if(b.pos>b.start)return f}throw Error("Mode "+a.name+" failed to advance stream.");}function ge(a,b,c,d){var e=function(a){return{start:m.start,end:m.pos,string:m.current(),type:h||null,state:a?ma(f.mode,l):l}},f=a.doc,g=f.mode,h;b=x(f,b);var k=u(f,b.line),l=pb(a,b.line,c),m=new qb(k.text,a.options.tabSize),n;for(d&&(n=[]);(d||m.pos<b.ch)&&!m.eol();)m.start=m.pos,h=bd(g,m,l),d&&n.push(e(!0));return d?n:e()}function he(a,
+b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:(new RegExp("(?:^|s)"+c[2]+"(?:$|s)")).test(b[d])||(b[d]+=" "+c[2])}return a}function de(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var k=0,l=null,m=new qb(b,a.options.tabSize),n,p=a.options.addModeClass&&[null];for(""==b&&he(fe(c,d),f);!m.eol();){m.pos>a.options.maxHighlightLength?(h=!1,
+g&&ad(a,b,d,m.pos),m.pos=b.length,n=null):n=he(bd(c,m,d,p),f);if(p){var t=p[0].name;t&&(n="m-"+(n?t+" "+n:t))}if(!h||l!=n){for(;k<m.start;)k=Math.min(m.start,k+5E3),e(k,l);l=n}m.start=m.pos}for(;k<m.pos;)a=Math.min(m.pos,k+5E3),e(a,l),k=a}function Yf(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1E3:100);b>g;--b){if(b<=f.first)return f.first;var h=u(f,b-1);if(h.stateAfter&&(!c||b<=f.frontier))return b;h=Y(h.text,null,a.options.tabSize);if(null==e||d>h)e=b-1,d=h}return e}function Qa(a,
+b,c){this.text=a;Ud(this,b);this.height=c?c(this):1}function ie(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?Zf:$f;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$\x26"))}function je(a,b){var c=r("span",null,null,I?"padding-right: .1px":null),c={pre:r("pre",[c],"CodeMirror-line"),content:c,col:0,pos:0,cm:a,trailingSpace:!1,splitSpaces:(B||I)&&a.getOption("lineWrapping")};b.measure={};for(var d=0;d<=(b.rest?b.rest.length:0);d++){var e=d?b.rest[d-1]:b.line,f=void 0;c.pos=0;c.addToken=ag;var g;
+g=a.display.measure;if(null!=cd)g=cd;else{var h=U(g,document.createTextNode("AخA")),k=Ra(h,0,1).getBoundingClientRect(),h=Ra(h,1,2).getBoundingClientRect();X(g);g=k&&k.left!=k.right?cd=3>h.right-k.right:!1}g&&(f=ba(e))&&(c.addToken=bg(c.addToken,f));c.map=[];g=b!=a.display.externalMeasured&&C(e);a:{f=c;g=ee(a,e,g);var l=e.markedSpans,k=e.text,h=0;if(l)for(var m=k.length,n=0,p=1,t="",q=void 0,sb=void 0,u=0,v=void 0,w=void 0,x=void 0,fc=void 0,M=void 0;;){if(u==n){for(var v=w=x=fc=sb="",M=null,u=Infinity,
+na=[],Q=void 0,y=0;y<l.length;++y){var z=l[y],A=z.marker;"bookmark"==A.type&&z.from==n&&A.widgetNode?na.push(A):z.from<=n&&(null==z.to||z.to>n||A.collapsed&&z.to==n&&z.from==n)?(null!=z.to&&z.to!=n&&u>z.to&&(u=z.to,w=""),A.className&&(v+=" "+A.className),A.css&&(sb=(sb?sb+";":"")+A.css),A.startStyle&&z.from==n&&(x+=" "+A.startStyle),A.endStyle&&z.to==u&&(Q||(Q=[])).push(A.endStyle,z.to),A.title&&!fc&&(fc=A.title),A.collapsed&&(!M||0>Vd(M.marker,A))&&(M=z)):z.from>n&&u>z.from&&(u=z.from)}if(Q)for(y=
+0;y<Q.length;y+=2)Q[y+1]==u&&(w+=" "+Q[y]);if(!M||M.from==n)for(Q=0;Q<na.length;++Q)ke(f,0,na[Q]);if(M&&(M.from||0)==n){ke(f,(null==M.to?m+1:M.to)-n,M.marker,null==M.from);if(null==M.to)break a;M.to==n&&(M=!1)}}if(n>=m)break;for(na=Math.min(m,u);;){if(t){Q=n+t.length;M||(y=Q>na?t.slice(0,na-n):t,f.addToken(f,y,q?q+v:v,x,n+y.length==u?w:"",fc,sb));if(Q>=na){t=t.slice(na-n);n=na;break}n=Q;x=""}t=k.slice(h,h=g[p++]);q=ie(g[p++],f.cm.options)}}else for(l=1;l<g.length;l+=2)f.addToken(f,k.slice(h,h=g[l]),
+ie(g[l+1],f.cm.options))}e.styleClasses&&(e.styleClasses.bgClass&&(c.bgClass=Gc(e.styleClasses.bgClass,c.bgClass||"")),e.styleClasses.textClass&&(c.textClass=Gc(e.styleClasses.textClass,c.textClass||"")));0==c.map.length&&c.map.push(0,0,c.content.appendChild(Vf(a.display.measure)));0==d?(b.measure.map=c.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(c.map),(b.measure.caches||(b.measure.caches=[])).push({}))}I&&(d=c.content.lastChild,/\bcm-tab\b/.test(d.className)||d.querySelector&&
+d.querySelector(".cm-tab"))&&(c.content.className="cm-tab-wrap-hack");E(a,"renderLine",a,b.line,c.pre);c.pre.className&&(c.textClass=Gc(c.pre.className,c.textClass||""));return c}function cg(a){var b=r("span","•","cm-invalidchar");b.title="\\u"+a.charCodeAt(0).toString(16);b.setAttribute("aria-label",b.title);return b}function ag(a,b,c,d,e,f,g){if(b){var h;if(a.splitSpaces)if(h=a.trailingSpace,1<b.length&&!/  /.test(b))h=b;else{for(var k="",l=0;l<b.length;l++){var m=b.charAt(l);" "!=m||!h||l!=b.length-
+1&&32!=b.charCodeAt(l+1)||(m=" ");k+=m;h=" "==m}h=k}else h=b;k=h;l=a.cm.state.specialChars;m=!1;if(l.test(b)){h=document.createDocumentFragment();for(var n=0;;){l.lastIndex=n;var p=l.exec(b),t=p?p.index-n:b.length-n;if(t){var q=document.createTextNode(k.slice(n,n+t));B&&9>A?h.appendChild(r("span",[q])):h.appendChild(q);a.map.push(a.pos,a.pos+t,q);a.col+=t;a.pos+=t}if(!p)break;n+=t+1;t=void 0;"\t"==p[0]?(p=a.cm.options.tabSize,p-=a.col%p,t=h.appendChild(r("span",Jc(p),"cm-tab")),t.setAttribute("role",
+"presentation"),t.setAttribute("cm-text","\t"),a.col+=p):("\r"==p[0]||"\n"==p[0]?(t=h.appendChild(r("span","\r"==p[0]?"␍":"␤","cm-invalidchar")),t.setAttribute("cm-text",p[0])):(t=a.cm.options.specialCharPlaceholder(p[0]),t.setAttribute("cm-text",p[0]),B&&9>A?h.appendChild(r("span",[t])):h.appendChild(t)),a.col+=1);a.map.push(a.pos,a.pos+1,t);a.pos++}}else a.col+=b.length,h=document.createTextNode(k),a.map.push(a.pos,a.pos+b.length,h),B&&9>A&&(m=!0),a.pos+=b.length;a.trailingSpace=32==k.charCodeAt(b.length-
+1);if(c||d||e||m||g)return b=c||"",d&&(b+=d),e&&(b+=e),d=r("span",[h],b,g),f&&(d.title=f),a.content.appendChild(d);a.content.appendChild(h)}}function bg(a,b){return function(c,d,e,f,g,h,k){e=e?e+" cm-force-border":"cm-force-border";for(var l=c.pos,m=l+d.length;;){for(var n=void 0,p=0;p<b.length&&!(n=b[p],n.to>l&&n.from<=l);p++);if(n.to>=m)return a(c,d,e,f,g,h,k);a(c,d.slice(0,n.to-l),e,f,null,h,k);f=null;d=d.slice(n.to-l);l=n.to}}}function ke(a,b,c,d){var e=!d&&c.widgetNode;e&&a.map.push(a.pos,a.pos+
+b,e);!d&&a.cm.display.input.needsContentAttribute&&(e||(e=a.content.appendChild(document.createElement("span"))),e.setAttribute("cm-marker",c.id));e&&(a.cm.display.input.setUneditable(e),a.content.appendChild(e));a.pos+=b;a.trailingSpace=!1}function le(a,b,c){for(var d=this.line=b,e;d=Da(d,!1);)d=d.find(1,!0).line,(e||(e=[])).push(d);this.size=(this.rest=e)?C(y(this.rest))-c+1:1;this.node=this.text=null;this.hidden=Ea(a,b)}function gc(a,b,c){var d=[],e;for(e=b;e<c;)b=new le(a.doc,u(a.doc,e),e),e+=
+b.size,d.push(b);return d}function dg(a,b){var c=a.ownsGroup;if(c)try{var d=c.delayedCallbacks,e=0;do{for(;e<d.length;e++)d[e].call(null);for(var f=0;f<c.ops.length;f++){var g=c.ops[f];if(g.cursorActivityHandlers)for(;g.cursorActivityCalled<g.cursorActivityHandlers.length;)g.cursorActivityHandlers[g.cursorActivityCalled++].call(null,g.cm)}}while(e<d.length)}finally{Sa=null,b(c)}}function R(a,b){var c=a._handlers&&a._handlers[b]||dc;if(c.length){var d=Array.prototype.slice.call(arguments,2),e;Sa?e=
+Sa.delayedCallbacks:tb?e=tb:(e=tb=[],setTimeout(eg,0));for(var f=function(a){e.push(function(){return c[a].apply(null,d)})},g=0;g<c.length;++g)f(g)}}function eg(){var a=tb;tb=null;for(var b=0;b<a.length;++b)a[b]()}function me(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];if("text"==f){var f=b,g=f.text.className,h=ne(a,f);f.text==f.node&&(f.node=h.pre);f.text.parentNode.replaceChild(h.pre,f.text);f.text=h.pre;h.bgClass!=f.bgClass||h.textClass!=f.textClass?(f.bgClass=h.bgClass,f.textClass=
+h.textClass,dd(f)):g&&(f.text.className=g)}else if("gutter"==f)oe(a,b,c,d);else if("class"==f)dd(b);else if("widget"==f){f=a;g=b;h=d;g.alignable&&(g.alignable=null);for(var k=g.node.firstChild,l=void 0;k;k=l)l=k.nextSibling,"CodeMirror-linewidget"==k.className&&g.node.removeChild(k);pe(f,g,h)}}b.changes=null}function ub(a){a.node==a.text&&(a.node=r("div",null,null,"position: relative"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),B&&8>A&&(a.node.style.zIndex=
+2));return a.node}function ne(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):je(a,b)}function dd(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;b&&(b+=" CodeMirror-linebackground");if(a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=ub(a);a.background=c.insertBefore(r("div",null,b),c.firstChild)}a.line.wrapClass?ub(a).className=
+a.line.wrapClass:a.node!=a.text&&(a.node.className="");a.text.className=(a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass)||""}function oe(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);b.gutterBackground&&(b.node.removeChild(b.gutterBackground),b.gutterBackground=null);if(b.line.gutterClass){var e=ub(b);b.gutterBackground=r("div",null,"CodeMirror-gutter-background "+b.line.gutterClass,"left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px; width: "+
+d.gutterTotalWidth+"px");e.insertBefore(b.gutterBackground,b.text)}e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=ub(b),g=b.gutter=r("div",null,"CodeMirror-gutter-wrapper","left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px");a.display.input.setUneditable(g);f.insertBefore(g,b.text);b.line.gutterClass&&(g.className+=" "+b.line.gutterClass);!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(r("div",Mc(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt",
+"left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px")));if(e)for(b=0;b<a.options.gutters.length;++b)c=a.options.gutters[b],(f=e.hasOwnProperty(c)&&e[c])&&g.appendChild(r("div",[f],"CodeMirror-gutter-elt","left: "+d.gutterLeft[c]+"px; width: "+d.gutterWidth[c]+"px"))}}function fg(a,b,c,d){var e=ne(a,b);b.text=b.node=e.pre;e.bgClass&&(b.bgClass=e.bgClass);e.textClass&&(b.textClass=e.textClass);dd(b);oe(a,b,c,d);pe(a,b,d);return b.node}function pe(a,b,c){qe(a,
+b.line,b,c,!0);if(b.rest)for(var d=0;d<b.rest.length;d++)qe(a,b.rest[d],b,c,!1)}function qe(a,b,c,d,e){if(b.widgets){var f=ub(c),g=0;for(b=b.widgets;g<b.length;++g){var h=b[g],k=r("div",[h.node],"CodeMirror-linewidget");h.handleMouseEvents||k.setAttribute("cm-ignore-events","true");var l=h,m=k,n=d;if(l.noHScroll){(c.alignable||(c.alignable=[])).push(m);var p=n.wrapperWidth;m.style.left=n.fixedPos+"px";l.coverGutter||(p-=n.gutterTotalWidth,m.style.paddingLeft=n.gutterTotalWidth+"px");m.style.width=
+p+"px"}l.coverGutter&&(m.style.zIndex=5,m.style.position="relative",l.noHScroll||(m.style.marginLeft=-n.gutterTotalWidth+"px"));a.display.input.setUneditable(k);e&&h.above?f.insertBefore(k,c.gutter||c.text):f.appendChild(k);R(h,"redraw")}}}function vb(a){if(null!=a.height)return a.height;var b=a.doc.cm;if(!b)return 0;if(!Tb(document.body,a.node)){var c="position: relative;";a.coverGutter&&(c+="margin-left: -"+b.display.gutters.offsetWidth+"px;");a.noHScroll&&(c+="width: "+b.display.wrapper.clientWidth+
+"px;");U(b.display.measure,r("div",[a.node],null,c))}return a.height=a.node.parentNode.offsetHeight}function oa(a,b){for(var c=b.target||b.srcElement;c!=a.wrapper;c=c.parentNode)if(!c||1==c.nodeType&&"true"==c.getAttribute("cm-ignore-events")||c.parentNode==a.sizer&&c!=a.mover)return!0}function ed(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function re(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=U(a.measure,r("pre","x")),b=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,
+b={left:parseInt(b.paddingLeft),right:parseInt(b.paddingRight)};isNaN(b.left)||isNaN(b.right)||(a.cachedPaddingH=b);return b}function ja(a){return 30-a.display.nativeBarWidth}function Fa(a){return a.display.scroller.clientWidth-ja(a)-a.display.barWidth}function fd(a){return a.display.scroller.clientHeight-ja(a)-a.display.barHeight}function se(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};
+for(b=0;b<a.rest.length;b++)if(C(a.rest[b])>c)return{map:a.measure.maps[b],cache:a.measure.caches[b],before:!0}}function gd(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Ga(a,b)];var c=a.display.externalMeasured;if(c&&b>=c.lineN&&b<c.lineN+c.size)return c}function hc(a,b){var c=C(b),d=gd(a,c);d&&!d.text?d=null:d&&d.changes&&(me(a,d,c,hd(a)),a.curOp.forceUpdate=!0);if(!d){var e;e=ha(b);d=C(e);e=a.display.externalMeasured=new le(a.doc,e,d);e.lineN=d;d=e.built=je(a,e);e.text=
+d.pre;U(a.display.lineMeasure,d.pre);d=e}c=se(d,b,c);return{line:b,view:d,rect:null,map:c.map,cache:c.cache,before:c.before,hasHeights:!1}}function ic(a,b,c,d,e){b.before&&(c=-1);var f=c+(d||"");if(b.cache.hasOwnProperty(f))a=b.cache[f];else{b.rect||(b.rect=b.view.text.getBoundingClientRect());if(!b.hasHeights){var g=b.view,h=b.rect,k=a.options.lineWrapping,l=k&&Fa(a);if(!g.measure.heights||k&&g.measure.width!=l){var m=g.measure.heights=[];if(k)for(g.measure.width=l,g=g.text.firstChild.getClientRects(),
+k=0;k<g.length-1;k++){var l=g[k],n=g[k+1];2<Math.abs(l.bottom-n.bottom)&&m.push((l.bottom+n.top)/2-h.top)}m.push(h.bottom-h.top)}b.hasHeights=!0}m=d;g=te(b.map,c,m);d=g.node;h=g.start;k=g.end;c=g.collapse;var p;if(3==d.nodeType){for(var t=0;4>t;t++){for(;h&&jb(b.line.text.charAt(g.coverStart+h));)--h;for(;g.coverStart+k<g.coverEnd&&jb(b.line.text.charAt(g.coverStart+k));)++k;if(B&&9>A&&0==h&&k==g.coverEnd-g.coverStart)p=d.parentNode.getBoundingClientRect();else{p=Ra(d,h,k).getClientRects();k=ue;if("left"==
+m)for(l=0;l<p.length&&(k=p[l]).left==k.right;l++);else for(l=p.length-1;0<=l&&(k=p[l]).left==k.right;l--);p=k}if(p.left||p.right||0==h)break;k=h;--h;c="right"}B&&11>A&&((t=!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI)||(null!=id?t=id:(m=U(a.display.measure,r("span","x")),t=m.getBoundingClientRect(),m=Ra(m,0,1).getBoundingClientRect(),t=id=1<Math.abs(t.left-m.left)),t=!t),t||(t=screen.logicalXDPI/screen.deviceXDPI,m=screen.logicalYDPI/screen.deviceYDPI,p={left:p.left*
+t,right:p.right*t,top:p.top*m,bottom:p.bottom*m}))}else 0<h&&(c=m="right"),p=a.options.lineWrapping&&1<(t=d.getClientRects()).length?t["right"==m?t.length-1:0]:d.getBoundingClientRect();!(B&&9>A)||h||p&&(p.left||p.right)||(p=(p=d.parentNode.getClientRects()[0])?{left:p.left,right:p.left+wb(a.display),top:p.top,bottom:p.bottom}:ue);d=p.top-b.rect.top;h=p.bottom-b.rect.top;t=(d+h)/2;m=b.view.measure.heights;for(g=0;g<m.length-1&&!(t<m[g]);g++);c={left:("right"==c?p.right:p.left)-b.rect.left,right:("left"==
+c?p.left:p.right)-b.rect.left,top:g?m[g-1]:0,bottom:m[g]};p.left||p.right||(c.bogus=!0);a.options.singleCursorHeightPerLine||(c.rtop=d,c.rbottom=h);a=c;a.bogus||(b.cache[f]=a)}return{left:a.left,right:a.right,top:e?a.rtop:a.top,bottom:e?a.rbottom:a.bottom}}function te(a,b,c){for(var d,e,f,g,h,k,l=0;l<a.length;l+=3){h=a[l];k=a[l+1];if(b<h)e=0,f=1,g="left";else if(b<k)e=b-h,f=e+1;else if(l==a.length-3||b==k&&a[l+3]>b)f=k-h,e=f-1,b>=k&&(g="right");if(null!=e){d=a[l+2];h==k&&c==(d.insertLeft?"left":"right")&&
+(g=c);if("left"==c&&0==e)for(;l&&a[l-2]==a[l-3]&&a[l-1].insertLeft;)d=a[(l-=3)+2],g="left";if("right"==c&&e==k-h)for(;l<a.length-3&&a[l+3]==a[l+4]&&!a[l+5].insertLeft;)d=a[(l+=3)+2],g="right";break}}return{node:d,start:e,end:f,collapse:g,coverStart:h,coverEnd:k}}function ve(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function we(a){a.display.externalMeasure=null;X(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)ve(a.display.view[b])}
+function xb(a){we(a);a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null;a.options.lineWrapping||(a.display.maxLineChanged=!0);a.display.lineNumChars=null}function jd(a,b,c,d,e){if(!e&&b.widgets)for(e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=vb(b.widgets[e]);c.top+=f;c.bottom+=f}if("line"==d)return c;d||(d="local");b=ia(b);b="local"==d?b+a.display.lineSpace.offsetTop:b-a.display.viewOffset;if("page"==d||"window"==d)a=a.display.lineSpace.getBoundingClientRect(),
+b+=a.top+("window"==d?0:window.pageYOffset||(document.documentElement||document.body).scrollTop),d=a.left+("window"==d?0:window.pageXOffset||(document.documentElement||document.body).scrollLeft),c.left+=d,c.right+=d;c.top+=b;c.bottom+=b;return c}function xe(a,b,c){if("div"==c)return b;var d=b.left;b=b.top;"page"==c?(d-=window.pageXOffset||(document.documentElement||document.body).scrollLeft,b-=window.pageYOffset||(document.documentElement||document.body).scrollTop):"local"!=c&&c||(c=a.display.sizer.getBoundingClientRect(),
+d+=c.left,b+=c.top);a=a.display.lineSpace.getBoundingClientRect();return{left:d-a.left,top:b-a.top}}function jc(a,b,c,d,e){d||(d=u(a.doc,b.line));var f=d;b=b.ch;d=ic(a,hc(a,d),b,e);return jd(a,f,d,c)}function pa(a,b,c,d,e,f){function g(b,g){var h=ic(a,e,b,g?"right":"left",f);g?h.left=h.right:h.right=h.left;return jd(a,d,h,c)}function h(a,b){var d=k[b],c=d.level%2;a==Sc(d)&&b&&d.level<k[b-1].level?(d=k[--b],a=Tc(d)-(d.level%2?0:1),c=!0):a==Tc(d)&&b<k.length-1&&d.level<k[b+1].level&&(d=k[++b],a=Sc(d)-
+d.level%2,c=!1);return c&&a==d.to&&a>d.from?g(a-1):g(a,c)}d=d||u(a.doc,b.line);e||(e=hc(a,d));var k=ba(d);b=b.ch;if(!k)return g(b);var l=cc(k,b),l=h(b,l);null!=nb&&(l.other=h(b,nb));return l}function ye(a,b){var c=0;b=x(a.doc,b);a.options.lineWrapping||(c=wb(a.display)*b.ch);var d=u(a.doc,b.line),e=ia(d)+a.display.lineSpace.offsetTop;return{left:c,right:c,top:e,bottom:e+d.height}}function kc(a,b,c,d){a=q(a,b);a.xRel=d;c&&(a.outside=!0);return a}function kd(a,b,c){var d=a.doc;c+=a.display.viewOffset;
+if(0>c)return kc(d.first,0,!0,-1);var e=Ca(d,c),f=d.first+d.size-1;if(e>f)return kc(d.first+d.size-1,u(d,f).text.length,!0,1);0>b&&(b=0);for(d=u(d,e);;)if(e=gg(a,d,e,b,c),f=(d=Da(d,!1))&&d.find(0,!0),d&&(e.ch>f.from.ch||e.ch==f.from.ch&&0<e.xRel))e=C(d=f.to.line);else return e}function gg(a,b,c,d,e){function f(d){d=pa(a,q(c,d),"line",b,l);h=!0;if(g>d.bottom)return d.left-k;if(g<d.top)return d.left+k;h=!1;return d.left}var g=e-ia(b),h=!1,k=2*a.display.wrapper.clientWidth,l=hc(a,b);e=ba(b);var m=b.text.length,
+n=ac(b),p=bc(b),t=f(n),rb=h,u=f(p),r=h;if(d>u)return kc(c,p,r,1);for(;;){if(e?p==n||p==Vc(b,n,1):1>=p-n){m=d<t||d-t<=u-d?n:p;rb=m==n?rb:r;n=d-(m==n?t:u);r&&!e&&!/\s/.test(b.text.charAt(m))&&0<n&&m<b.text.length&&1<l.view.measure.heights.length&&(e=ic(a,l,m,"right"),g<=e.bottom&&g>=e.top&&Math.abs(d-e.right)<n&&(rb=!1,m++,n=d-e.right));for(;jb(b.text.charAt(m));)++m;return kc(c,m,rb,-1>n?-1:1<n?1:0)}var v=Math.ceil(m/2),w=n+v;if(e)for(var w=n,x=0;x<v;++x)w=Vc(b,w,1);x=f(w);if(x>d){p=w;u=x;if(r=h)u+=
+1E3;m=v}else n=w,t=x,rb=h,m-=v}}function Ha(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==Ia){Ia=r("pre");for(var b=0;49>b;++b)Ia.appendChild(document.createTextNode("x")),Ia.appendChild(r("br"));Ia.appendChild(document.createTextNode("x"))}U(a.measure,Ia);b=Ia.offsetHeight/50;3<b&&(a.cachedTextHeight=b);X(a.measure);return b||1}function wb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=r("span","xxxxxxxxxx"),c=r("pre",[b]);U(a.measure,c);b=b.getBoundingClientRect();
+b=(b.right-b.left)/10;2<b&&(a.cachedCharWidth=b);return b||10}function hd(a){for(var b=a.display,c={},d={},e=b.gutters.clientLeft,f=b.gutters.firstChild,g=0;f;f=f.nextSibling,++g)c[a.options.gutters[g]]=f.offsetLeft+f.clientLeft+e,d[a.options.gutters[g]]=f.clientWidth;return{fixedPos:ld(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function ld(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function ze(a){var b=
+Ha(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/wb(a.display)-3);return function(e){if(Ea(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function md(a){var b=a.doc,c=ze(a);b.iter(function(a){var b=c(a);b!=a.height&&ga(a,b)})}function Ja(a,b,c,d){var e=a.display;if(!c&&"true"==(b.target||b.srcElement).getAttribute("cm-not-content"))return null;
+var f,g;c=e.lineSpace.getBoundingClientRect();try{f=b.clientX-c.left,g=b.clientY-c.top}catch(h){return null}b=kd(a,f,g);var k;d&&1==b.xRel&&(k=u(a.doc,b.line).text).length==b.ch&&(d=Y(k,k.length,a.options.tabSize)-k.length,b=q(b.line,Math.max(0,Math.round((f-re(a.display).left)/wb(a.display))-d)));return b}function Ga(a,b){if(b>=a.display.viewTo)return null;b-=a.display.viewFrom;if(0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function yb(a){a.display.input.showSelection(a.display.input.prepareSelection())}
+function Ae(a,b){for(var c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++)if(!1!==b||g!=c.sel.primIndex){var h=c.sel.ranges[g];if(!(h.from().line>=a.display.viewTo||h.to().line<a.display.viewFrom)){var k=h.empty();(k||a.options.showCursorWhenSelecting)&&Be(a,h.head,e);k||hg(a,h,f)}}return d}function Be(a,b,c){b=pa(a,b,"div",null,null,!a.options.singleCursorHeightPerLine);var d=c.appendChild(r("div"," ","CodeMirror-cursor"));
+d.style.left=b.left+"px";d.style.top=b.top+"px";d.style.height=Math.max(0,b.bottom-b.top)*a.options.cursorHeight+"px";b.other&&(a=c.appendChild(r("div"," ","CodeMirror-cursor CodeMirror-secondarycursor")),a.style.display="",a.style.left=b.other.left+"px",a.style.top=b.other.top+"px",a.style.height=.85*(b.other.bottom-b.other.top)+"px")}function hg(a,b,c){function d(a,b,d,c){0>b&&(b=0);b=Math.round(b);c=Math.round(c);h.appendChild(r("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px;\n                             top: "+
+b+"px; width: "+(null==d?m-a:d)+"px;\n                             height: "+(c-b)+"px"))}function e(b,c,e){var f=u(g,b),h=f.text.length,k,n;Tf(ba(f),c||0,null==e?h:e,function(g,u,r){var w=jc(a,q(b,g),"div",f,"left"),v,x;g==u?(v=w,r=x=w.left):(v=jc(a,q(b,u-1),"div",f,"right"),"rtl"==r&&(r=w,w=v,v=r),r=w.left,x=v.right);null==c&&0==g&&(r=l);3<v.top-w.top&&(d(r,w.top,null,w.bottom),r=l,w.bottom<v.top&&d(r,w.bottom,null,v.top));null==e&&u==h&&(x=m);if(!k||w.top<k.top||w.top==k.top&&w.left<k.left)k=w;
+if(!n||v.bottom>n.bottom||v.bottom==n.bottom&&v.right>n.right)n=v;r<l+1&&(r=l);d(r,v.top,x-r,v.bottom)});return{start:k,end:n}}var f=a.display,g=a.doc,h=document.createDocumentFragment(),k=re(a.display),l=k.left,m=Math.max(f.sizerWidth,Fa(a)-f.sizer.offsetLeft)-k.right,f=b.from();b=b.to();if(f.line==b.line)e(f.line,f.ch,b.ch);else{var n=u(g,f.line),k=u(g,b.line),k=ha(n)==ha(k),f=e(f.line,f.ch,k?n.text.length+1:null).end;b=e(b.line,k?0:null,b.ch).start;k&&(f.top<b.top-2?(d(f.right,f.top,null,f.bottom),
+d(l,b.top,b.left,b.bottom)):d(f.right,f.top,b.left-f.right,f.bottom));f.bottom<b.top&&d(l,f.bottom,null,b.top)}c.appendChild(h)}function nd(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility="";0<a.options.cursorBlinkRate?b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):0>a.options.cursorBlinkRate&&(b.cursorDiv.style.visibility="hidden")}}function Ce(a){a.state.focused||(a.display.input.focus(),
+od(a))}function ig(a){a.state.delayingBlurEvent=!0;setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,zb(a))},100)}function od(a,b){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1);"nocursor"!=a.options.readOnly&&(a.state.focused||(E(a,"focus",a,b),a.state.focused=!0,Ma(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(a.display.input.reset(),I&&setTimeout(function(){return a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),
+nd(a))}function zb(a,b){a.state.delayingBlurEvent||(a.state.focused&&(E(a,"blur",a,b),a.state.focused=!1,Ta(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function pd(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=ld(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&(c[g].gutter&&
+(c[g].gutter.style.left=f),c[g].gutterBackground&&(c[g].gutterBackground.style.left=f));var h=c[g].alignable;if(h)for(var k=0;k<h.length;k++)h[k].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+"px")}}function De(a){if(!a.options.lineNumbers)return!1;var b=a.doc,b=Mc(a.options,b.first+b.size-1),c=a.display;if(b.length!=c.lineNumChars){var d=c.measure.appendChild(r("div",[r("div",b)],"CodeMirror-linenumber CodeMirror-gutter-elt")),e=d.firstChild.offsetWidth,d=d.offsetWidth-e;c.lineGutter.style.width=
+"";c.lineNumInnerWidth=Math.max(e,c.lineGutter.offsetWidth-d)+1;c.lineNumWidth=c.lineNumInnerWidth+d;c.lineNumChars=c.lineNumInnerWidth?b.length:-1;c.lineGutter.style.width=c.lineNumWidth+"px";qd(a);return!0}return!1}function lc(a){a=a.display;for(var b=a.lineDiv.offsetTop,c=0;c<a.view.length;c++){var d=a.view[c],e=void 0;if(!d.hidden){if(B&&8>A)var f=d.node.offsetTop+d.node.offsetHeight,e=f-b,b=f;else e=d.node.getBoundingClientRect(),e=e.bottom-e.top;f=d.line.height-e;2>e&&(e=Ha(a));if(.001<f||-.001>
+f)if(ga(d.line,e),Ee(d.line),d.rest)for(e=0;e<d.rest.length;e++)Ee(d.rest[e])}}}function Ee(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.parentNode.offsetHeight}function rd(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop,d=Math.floor(d-a.lineSpace.offsetTop),e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,d=Ca(b,d),e=Ca(b,e);if(c&&c.ensure){var f=c.ensure.from.line;c=c.ensure.to.line;f<d?(d=f,e=Ca(b,ia(u(b,f))+a.wrapper.clientHeight)):
+Math.min(c,b.lastLine())>=e&&(d=Ca(b,ia(u(b,c))-a.wrapper.clientHeight),e=c)}return{from:d,to:Math.max(e,d+1)}}function Ab(a,b){2>Math.abs(a.doc.scrollTop-b)||(a.doc.scrollTop=b,sa||sd(a,{top:b}),a.display.scroller.scrollTop!=b&&(a.display.scroller.scrollTop=b),a.display.scrollbars.setScrollTop(b),sa&&sd(a),Bb(a,100))}function Ua(a,b,c){(c?b==a.doc.scrollLeft:2>Math.abs(a.doc.scrollLeft-b))||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,pd(a),a.display.scroller.scrollLeft!=
+b&&(a.display.scroller.scrollLeft=b),a.display.scrollbars.setScrollLeft(b))}function Fe(a){var b=a.wheelDeltaX,c=a.wheelDeltaY;null==b&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(b=a.detail);null==c&&a.detail&&a.axis==a.VERTICAL_AXIS?c=a.detail:null==c&&(c=a.wheelDelta);return{x:b,y:c}}function jg(a){a=Fe(a);a.x*=V;a.y*=V;return a}function Ge(a,b){var c=Fe(b),d=c.x,c=c.y,e=a.display,f=e.scroller,g=f.scrollWidth>f.clientWidth,h=f.scrollHeight>f.clientHeight;if(d&&g||c&&h){if(c&&da&&I){var g=b.target,k=
+e.view;a:for(;g!=f;g=g.parentNode)for(var l=0;l<k.length;l++)if(k[l].node==g){a.display.currentWheelTarget=g;break a}}!d||sa||ea||null==V?(c&&null!=V&&(h=c*V,g=a.doc.scrollTop,k=g+e.wrapper.clientHeight,0>h?g=Math.max(0,g+h-50):k=Math.min(a.doc.height,k+h+50),sd(a,{top:g,bottom:k})),20>mc&&(null==e.wheelStartX?(e.wheelStartX=f.scrollLeft,e.wheelStartY=f.scrollTop,e.wheelDX=d,e.wheelDY=c,setTimeout(function(){if(null!=e.wheelStartX){var a=f.scrollLeft-e.wheelStartX,b=f.scrollTop-e.wheelStartY,a=b&&
+e.wheelDY&&b/e.wheelDY||a&&e.wheelDX&&a/e.wheelDX;e.wheelStartX=e.wheelStartY=null;a&&(V=(V*mc+a)/(mc+1),++mc)}},200)):(e.wheelDX+=d,e.wheelDY+=c))):(c&&h&&Ab(a,Math.max(0,Math.min(f.scrollTop+c*V,f.scrollHeight-f.clientHeight))),Ua(a,Math.max(0,Math.min(f.scrollLeft+d*V,f.scrollWidth-f.clientWidth))),(!c||c&&h)&&L(b),e.wheelStartX=null)}}function Cb(a){var b=a.display,c=b.gutters.offsetWidth,d=Math.round(a.doc.height+ed(a.display));return{clientHeight:b.scroller.clientHeight,viewHeight:b.wrapper.clientHeight,
+scrollWidth:b.scroller.scrollWidth,clientWidth:b.scroller.clientWidth,viewWidth:b.wrapper.clientWidth,barLeft:a.options.fixedGutter?c:0,docHeight:d,scrollHeight:d+ja(a)+b.barHeight,nativeBarWidth:b.nativeBarWidth,gutterWidth:c}}function td(a,b,c){this.cm=c;var d=this.vert=r("div",[r("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),e=this.horiz=r("div",[r("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");a(d);a(e);v(d,"scroll",function(){d.clientHeight&&b(d.scrollTop,
+"vertical")});v(e,"scroll",function(){e.clientWidth&&b(e.scrollLeft,"horizontal")});this.checkedZeroWidth=!1;B&&8>A&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function ud(){}function Va(a,b){b||(b=Cb(a));var c=a.display.barWidth,d=a.display.barHeight;He(a,b);for(var e=0;4>e&&c!=a.display.barWidth||d!=a.display.barHeight;e++)c!=a.display.barWidth&&a.options.lineWrapping&&lc(a),He(a,Cb(a)),c=a.display.barWidth,d=a.display.barHeight}function He(a,b){var c=a.display,d=c.scrollbars.update(b);
+c.sizer.style.paddingRight=(c.barWidth=d.right)+"px";c.sizer.style.paddingBottom=(c.barHeight=d.bottom)+"px";c.heightForcer.style.borderBottom=d.bottom+"px solid transparent";d.right&&d.bottom?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=d.bottom+"px",c.scrollbarFiller.style.width=d.right+"px"):c.scrollbarFiller.style.display="";d.bottom&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d.bottom+
+"px",c.gutterFiller.style.width=b.gutterWidth+"px"):c.gutterFiller.style.display=""}function Ie(a){a.display.scrollbars&&(a.display.scrollbars.clear(),a.display.scrollbars.addClass&&Ta(a.display.wrapper,a.display.scrollbars.addClass));a.display.scrollbars=new Je[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller);v(b,"mousedown",function(){a.state.focused&&setTimeout(function(){return a.display.input.focus()},0)});b.setAttribute("cm-not-content","true")},
+function(b,c){"horizontal"==c?Ua(a,b):Ab(a,b)},a);a.display.scrollbars.addClass&&Ma(a.display.wrapper,a.display.scrollbars.addClass)}function nc(a,b,c,d,e){var f=a.display,g=Ha(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,k=fd(a),l={};e-c>k&&(e=c+k);var m=a.doc.height+ed(f),n=c<g,g=e>m-g;c<h?l.scrollTop=n?0:c:e>h+k&&(c=Math.min(c,(g?m:e)-k),c!=h&&(l.scrollTop=c));h=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft;a=Fa(a)-
+(a.options.fixedGutter?f.gutters.offsetWidth:0);(f=d-b>a)&&(d=b+a);10>b?l.scrollLeft=0:b<h?l.scrollLeft=Math.max(0,b-(f?0:10)):d>a+h-3&&(l.scrollLeft=d+(f?0:10)-a);return l}function oc(a,b,c){null==b&&null==c||pc(a);null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b);null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function Wa(a){pc(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?q(b.line,b.ch-1):b,
+d=q(b.line,b.ch+1));a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function pc(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=ye(a,b.from),d=ye(a,b.to),b=nc(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(b.scrollLeft,b.scrollTop)}}function Xa(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,
+cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++kg};a=a.curOp;Sa?Sa.ops.push(a):a.ownsGroup=Sa={ops:[a],delayedCallbacks:[]}}function Ya(a){dg(a.curOp,function(a){for(var c=0;c<a.ops.length;c++)a.ops[c].cm.curOp=null;a=a.ops;for(c=0;c<a.length;c++){var d=a[c],e=d.cm,f=e.display,g=e.display;!g.scrollbarsClipped&&g.scroller.offsetWidth&&(g.nativeBarWidth=g.scroller.offsetWidth-g.scroller.clientWidth,g.heightForcer.style.height=
+ja(e)+"px",g.sizer.style.marginBottom=-g.nativeBarWidth+"px",g.sizer.style.borderRightWidth=ja(e)+"px",g.scrollbarsClipped=!0);d.updateMaxLine&&Rc(e);d.mustUpdate=d.viewChanged||d.forceUpdate||null!=d.scrollTop||d.scrollToPos&&(d.scrollToPos.from.line<f.viewFrom||d.scrollToPos.to.line>=f.viewTo)||f.maxLineChanged&&e.options.lineWrapping;d.update=d.mustUpdate&&new qc(e,d.mustUpdate&&{top:d.scrollTop,ensure:d.scrollToPos},d.forceUpdate)}for(c=0;c<a.length;c++)d=a[c],d.updatedDisplay=d.mustUpdate&&vd(d.cm,
+d.update);for(c=0;c<a.length;c++)if(d=a[c],e=d.cm,f=e.display,d.updatedDisplay&&lc(e),d.barMeasure=Cb(e),f.maxLineChanged&&!e.options.lineWrapping&&(g=void 0,g=f.maxLine.text.length,g=ic(e,hc(e,f.maxLine),g,void 0),d.adjustWidthTo=g.left+3,e.display.sizerWidth=d.adjustWidthTo,d.barMeasure.scrollWidth=Math.max(f.scroller.clientWidth,f.sizer.offsetLeft+d.adjustWidthTo+ja(e)+e.display.barWidth),d.maxScrollLeft=Math.max(0,f.sizer.offsetLeft+d.adjustWidthTo-Fa(e))),d.updatedDisplay||d.selectionChanged)d.preparedSelection=
+f.input.prepareSelection(d.focus);for(c=0;c<a.length;c++)d=a[c],e=d.cm,null!=d.adjustWidthTo&&(e.display.sizer.style.minWidth=d.adjustWidthTo+"px",d.maxScrollLeft<e.doc.scrollLeft&&Ua(e,Math.min(e.display.scroller.scrollLeft,d.maxScrollLeft),!0),e.display.maxLineChanged=!1),f=d.focus&&d.focus==la()&&(!document.hasFocus||document.hasFocus()),d.preparedSelection&&e.display.input.showSelection(d.preparedSelection,f),(d.updatedDisplay||d.startHeight!=e.doc.height)&&Va(e,d.barMeasure),d.updatedDisplay&&
+wd(e,d.barMeasure),d.selectionChanged&&nd(e),e.state.focused&&d.updateInput&&e.display.input.reset(d.typing),f&&Ce(d.cm);for(c=0;c<a.length;c++){d=a[c];e=d.cm;f=e.display;g=e.doc;d.updatedDisplay&&Ke(e,d.update);null==f.wheelStartX||null==d.scrollTop&&null==d.scrollLeft&&!d.scrollToPos||(f.wheelStartX=f.wheelStartY=null);null==d.scrollTop||f.scroller.scrollTop==d.scrollTop&&!d.forceScroll||(g.scrollTop=Math.max(0,Math.min(f.scroller.scrollHeight-f.scroller.clientHeight,d.scrollTop)),f.scrollbars.setScrollTop(g.scrollTop),
+f.scroller.scrollTop=g.scrollTop);null==d.scrollLeft||f.scroller.scrollLeft==d.scrollLeft&&!d.forceScroll||(g.scrollLeft=Math.max(0,Math.min(f.scroller.scrollWidth-f.scroller.clientWidth,d.scrollLeft)),f.scrollbars.setScrollLeft(g.scrollLeft),f.scroller.scrollLeft=g.scrollLeft,pd(e));if(d.scrollToPos){var h=void 0,k=x(g,d.scrollToPos.from),h=x(g,d.scrollToPos.to),l=d.scrollToPos.margin;null==l&&(l=0);for(var m=void 0,n=0;5>n;n++){var p=!1,m=pa(e,k),t=h&&h!=k?pa(e,h):m,t=nc(e,Math.min(m.left,t.left),
+Math.min(m.top,t.top)-l,Math.max(m.left,t.left),Math.max(m.bottom,t.bottom)+l),q=e.doc.scrollTop,u=e.doc.scrollLeft;null!=t.scrollTop&&(Ab(e,t.scrollTop),1<Math.abs(e.doc.scrollTop-q)&&(p=!0));null!=t.scrollLeft&&(Ua(e,t.scrollLeft),1<Math.abs(e.doc.scrollLeft-u)&&(p=!0));if(!p)break}h=m;d.scrollToPos.isCursor&&e.state.focused&&(F(e,"scrollCursorIntoView")||(l=e.display,m=l.sizer.getBoundingClientRect(),k=null,0>h.top+m.top?k=!0:h.bottom+m.top>(window.innerHeight||document.documentElement.clientHeight)&&
+(k=!1),null==k||lg||(h=r("div","​",null,"position: absolute;\n                         top: "+(h.top-l.viewOffset-e.display.lineSpace.offsetTop)+"px;\n                         height: "+(h.bottom-h.top+ja(e)+l.barHeight)+"px;\n                         left: "+h.left+"px; width: 2px;"),e.display.lineSpace.appendChild(h),h.scrollIntoView(k),e.display.lineSpace.removeChild(h))))}h=d.maybeHiddenMarkers;k=d.maybeUnhiddenMarkers;if(h)for(l=0;l<h.length;++l)h[l].lines.length||E(h[l],"hide");if(k)for(h=0;h<
+k.length;++h)k[h].lines.length&&E(k[h],"unhide");f.wrapper.offsetHeight&&(g.scrollTop=e.display.scroller.scrollTop);d.changeObjs&&E(e,"changes",e,d.changeObjs);d.update&&d.update.finish()}})}function W(a,b){if(a.curOp)return b();Xa(a);try{return b()}finally{Ya(a)}}function G(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Xa(a);try{return b.apply(a,arguments)}finally{Ya(a)}}}function O(a){return function(){if(this.curOp)return a.apply(this,arguments);Xa(this);try{return a.apply(this,
+arguments)}finally{Ya(this)}}}function J(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,arguments);Xa(b);try{return a.apply(this,arguments)}finally{Ya(b)}}}function N(a,b,c,d){null==b&&(b=a.doc.first);null==c&&(c=a.doc.first+a.doc.size);d||(d=0);var e=a.display;d&&c<e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>b)&&(e.updateLineNumbers=b);a.curOp.viewChanged=!0;if(b>=e.viewTo)ta&&Pc(a.doc,b)<e.viewTo&&ua(a);else if(c<=e.viewFrom)ta&&Xd(a.doc,c+d)>e.viewFrom?ua(a):
+(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)ua(a);else if(b<=e.viewFrom){var f=rc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):ua(a)}else if(c>=e.viewTo)(f=rc(a,b,b,-1))?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):ua(a);else{var f=rc(a,b,b,-1),g=rc(a,c,c+d,1);f&&g?(e.view=e.view.slice(0,f.index).concat(gc(a,f.lineN,g.lineN)).concat(e.view.slice(g.index)),e.viewTo+=d):ua(a)}if(a=e.externalMeasured)c<a.lineN?a.lineN+=d:b<a.lineN+a.size&&(e.externalMeasured=
+null)}function va(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null);b<d.viewFrom||b>=d.viewTo||(a=d.view[Ga(a,b)],null!=a.node&&(a=a.changes||(a.changes=[]),-1==H(a,c)&&a.push(c)))}function ua(a){a.display.viewFrom=a.display.viewTo=a.doc.first;a.display.view=[];a.display.viewOffset=0}function rc(a,b,c,d){var e=Ga(a,b),f=a.display.view;if(!ta||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var g=a.display.viewFrom,
+h=0;h<e;h++)g+=f[h].size;if(g!=b){if(0<d){if(e==f.length-1)return null;b=g+f[e].size-b;e++}else b=g-b;c+=b}for(;Pc(a.doc,c)!=c;){if(e==(0>d?0:f.length-1))return null;c+=d*f[e-(0>d?1:0)].size;e+=d}return{index:e,lineN:c}}function Le(a){a=a.display.view;for(var b=0,c=0;c<a.length;c++){var d=a[c];d.hidden||d.node&&!d.changes||++b}return b}function Bb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,Hc(mg,a))}function mg(a){var b=a.doc;b.frontier<b.first&&(b.frontier=
+b.first);if(!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=ma(b.mode,pb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=f.text.length>a.options.maxHighlightLength,k=ce(a,f,h?ma(b.mode,d):d,!0);f.styles=k.styles;var l=f.styleClasses;(k=k.classes)?f.styleClasses=k:l&&(f.styleClasses=null);l=!g||g.length!=f.styles.length||l!=k&&(!l||!k||l.bgClass!=k.bgClass||l.textClass!=k.textClass);
+for(k=0;!l&&k<g.length;++k)l=g[k]!=f.styles[k];l&&e.push(b.frontier);f.stateAfter=h?d:ma(b.mode,d)}else f.text.length<=a.options.maxHighlightLength&&ad(a,f.text,d),f.stateAfter=0==b.frontier%5?ma(b.mode,d):null;++b.frontier;if(+new Date>c)return Bb(a,a.options.workDelay),!0});e.length&&W(a,function(){for(var b=0;b<e.length;b++)va(a,e[b],"text")})}}function qc(a,b,c){var d=a.display;this.viewport=b;this.visible=rd(d,a.doc,b);this.editorIsHidden=!d.wrapper.offsetWidth;this.wrapperHeight=d.wrapper.clientHeight;
+this.wrapperWidth=d.wrapper.clientWidth;this.oldDisplayWidth=Fa(a);this.force=c;this.dims=hd(a);this.events=[]}function vd(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return ua(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&c.renderedView==c.view&&0==Le(a))return!1;De(a)&&(ua(a),b.dims=hd(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);
+c.viewFrom<f&&20>f-c.viewFrom&&(f=Math.max(d.first,c.viewFrom));c.viewTo>g&&20>c.viewTo-g&&(g=Math.min(e,c.viewTo));ta&&(f=Pc(a.doc,f),g=Xd(a.doc,g));d=f!=c.viewFrom||g!=c.viewTo||c.lastWrapHeight!=b.wrapperHeight||c.lastWrapWidth!=b.wrapperWidth;e=a.display;0==e.view.length||f>=e.viewTo||g<=e.viewFrom?(e.view=gc(a,f,g),e.viewFrom=f):(e.viewFrom>f?e.view=gc(a,f,e.viewFrom).concat(e.view):e.viewFrom<f&&(e.view=e.view.slice(Ga(a,f))),e.viewFrom=f,e.viewTo<g?e.view=e.view.concat(gc(a,e.viewTo,g)):e.viewTo>
+g&&(e.view=e.view.slice(0,Ga(a,g))));e.viewTo=g;c.viewOffset=ia(u(a.doc,c.viewFrom));a.display.mover.style.top=c.viewOffset+"px";g=Le(a);if(!d&&0==g&&!b.force&&c.renderedView==c.view&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;f=la();4<g&&(c.lineDiv.style.display="none");ng(a,c.updateLineNumbers,b.dims);4<g&&(c.lineDiv.style.display="");c.renderedView=c.view;f&&la()!=f&&f.offsetHeight&&f.focus();X(c.cursorDiv);X(c.selectionDiv);c.gutters.style.height=c.sizer.style.minHeight=
+0;d&&(c.lastWrapHeight=b.wrapperHeight,c.lastWrapWidth=b.wrapperWidth,Bb(a,400));c.updateLineNumbers=null;return!0}function Ke(a,b){for(var c=b.viewport,d=!0;;d=!1){if(!d||!a.options.lineWrapping||b.oldDisplayWidth==Fa(a))if(c&&null!=c.top&&(c={top:Math.min(a.doc.height+ed(a.display)-fd(a),c.top)}),b.visible=rd(a.display,a.doc,c),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!vd(a,b))break;lc(a);d=Cb(a);yb(a);Va(a,d);wd(a,d)}b.signal(a,"update",a);if(a.display.viewFrom!=
+a.display.reportedViewFrom||a.display.viewTo!=a.display.reportedViewTo)b.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo}function sd(a,b){var c=new qc(a,b);if(vd(a,c)){lc(a);Ke(a,c);var d=Cb(a);yb(a);Va(a,d);wd(a,d);c.finish()}}function ng(a,b,c){function d(b){var d=b.nextSibling;I&&da&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b);return d}for(var e=a.display,
+f=a.options.lineNumbers,g=e.lineDiv,h=g.firstChild,k=e.view,e=e.viewFrom,l=0;l<k.length;l++){var m=k[l];if(!m.hidden)if(m.node&&m.node.parentNode==g){for(;h!=m.node;)h=d(h);h=f&&null!=b&&b<=e&&m.lineNumber;m.changes&&(-1<H(m.changes,"gutter")&&(h=!1),me(a,m,e,c));h&&(X(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(Mc(a.options,e))));h=m.node.nextSibling}else{var n=fg(a,m,e,c);g.insertBefore(n,h)}e+=m.size}for(;h;)h=d(h)}function qd(a){a.display.sizer.style.marginLeft=a.display.gutters.offsetWidth+
+"px"}function wd(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";a.display.heightForcer.style.top=b.docHeight+"px";a.display.gutters.style.height=b.docHeight+a.display.barHeight+ja(a)+"px"}function Me(a){var b=a.display.gutters,c=a.options.gutters;X(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(r("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none";qd(a)}function xd(a){var b=
+H(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):-1<b&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function qa(a,b){this.ranges=a;this.primIndex=b}function z(a,b){this.anchor=a;this.head=b}function fa(a,b){var c=a[b];a.sort(function(a,b){return w(a.from(),b.from())});b=H(a,c);for(c=1;c<a.length;c++){var d=a[c],e=a[c-1];if(0<=w(e.to(),d.from())){var f=Yb(e.from(),d.from()),g=Xb(e.to(),d.to()),d=e.empty()?d.from()==
+d.head:e.from()==e.head;c<=b&&--b;a.splice(--c,2,new z(d?g:f,d?f:g))}}return new qa(a,b)}function ra(a,b){return new qa([new z(a,b||a)],0)}function wa(a){return a.text?q(a.from.line+a.text.length-1,y(a.text).length+(1==a.text.length?a.from.ch:0)):a.to}function Ne(a,b){if(0>w(a,b.from))return a;if(0>=w(a,b.to))return wa(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;a.line==b.to.line&&(d+=wa(b).ch-b.to.ch);return q(c,d)}function yd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=
+a.sel.ranges[d];c.push(new z(Ne(e.anchor,b),Ne(e.head,b)))}return fa(c,a.sel.primIndex)}function Oe(a,b,c){return a.line==b.line?q(c.line,a.ch-b.ch+c.ch):q(c.line+(a.line-b.line),a.ch)}function zd(a){a.doc.mode=Zc(a.options,a.doc.modeOption);Db(a)}function Db(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null)});a.doc.frontier=a.doc.first;Bb(a,100);a.state.modeGen++;a.curOp&&N(a)}function Pe(a,b){return 0==b.from.ch&&0==b.to.ch&&""==y(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}
+function Ad(a,b,c,d){function e(a,c,e){a.text=c;a.stateAfter&&(a.stateAfter=null);a.styles&&(a.styles=null);null!=a.order&&(a.order=null);Td(a);Ud(a,e);c=d?d(a):1;c!=a.height&&ga(a,c);R(a,"change",a,b)}function f(a,b){for(var e=[],f=a;f<b;++f)e.push(new Qa(k[f],c?c[f]:null,d));return e}var g=b.from,h=b.to,k=b.text,l=u(a,g.line),m=u(a,h.line),n=y(k),p=c?c[k.length-1]:null,t=h.line-g.line;b.full?(a.insert(0,f(0,k.length)),a.remove(k.length,a.size-k.length)):Pe(a,b)?(h=f(0,k.length-1),e(m,m.text,p),
+t&&a.remove(g.line,t),h.length&&a.insert(g.line,h)):l==m?1==k.length?e(l,l.text.slice(0,g.ch)+n+l.text.slice(h.ch),p):(t=f(1,k.length-1),t.push(new Qa(n+l.text.slice(h.ch),p,d)),e(l,l.text.slice(0,g.ch)+k[0],c?c[0]:null),a.insert(g.line+1,t)):1==k.length?(e(l,l.text.slice(0,g.ch)+k[0]+m.text.slice(h.ch),c?c[0]:null),a.remove(g.line+1,t)):(e(l,l.text.slice(0,g.ch)+k[0],c?c[0]:null),e(m,n+m.text.slice(h.ch),p),p=f(1,k.length-1),1<t&&a.remove(g.line+1,t-1),a.insert(g.line+1,p));R(a,"change",a,b)}function Ka(a,
+b,c){function d(a,f,g){if(a.linked)for(var h=0;h<a.linked.length;++h){var k=a.linked[h];if(k.doc!=f){var l=g&&k.sharedHist;if(!c||l)b(k.doc,l),d(k.doc,a,l)}}}d(a,null,!0)}function Qe(a,b){if(b.cm)throw Error("This document is already in use.");a.doc=b;b.cm=a;md(a);zd(a);a.options.lineWrapping||Rc(a);a.options.mode=b.modeOption;N(a)}function sc(a){this.done=[];this.undone=[];this.undoDepth=Infinity;this.lastModTime=this.lastSelTime=0;this.lastOrigin=this.lastSelOrigin=this.lastOp=this.lastSelOp=null;
+this.generation=this.maxGeneration=a||1}function Bd(a,b){var c={from:Nc(b.from),to:wa(b),text:Ba(a,b.from,b.to)};Re(a,c,b.from.line,b.to.line+1);Ka(a,function(a){return Re(a,c,b.from.line,b.to.line+1)},!0);return c}function Se(a){for(;a.length;)if(y(a).ranges)a.pop();else break}function Te(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g,h,k;if(k=e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))e.lastOp==
+d?(Se(e.done),g=y(e.done)):e.done.length&&!y(e.done).ranges?g=y(e.done):1<e.done.length&&!e.done[e.done.length-2].ranges?(e.done.pop(),g=y(e.done)):g=void 0,k=g;if(k)h=y(g.changes),0==w(b.from,b.to)&&0==w(b.from,h.to)?h.to=wa(b):g.changes.push(Bd(a,b));else for((g=y(e.done))&&g.ranges||tc(a.sel,e.done),g={changes:[Bd(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift();e.done.push(c);e.generation=++e.maxGeneration;e.lastModTime=e.lastSelTime=
+f;e.lastOp=e.lastSelOp=d;e.lastOrigin=e.lastSelOrigin=b.origin;h||E(a,"historyAdded")}function tc(a,b){var c=y(b);c&&c.ranges&&c.equals(a)||b.push(a)}function Re(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(d){d.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=d.markedSpans);++f})}function og(a){if(!a)return null;for(var b,c=0;c<a.length;++c)a[c].marker.explicitlyCleared?b||(b=a.slice(0,c)):b&&b.push(a[c]);return b?b.length?b:null:a}function Ue(a,
+b){var c;if(c=b["spans_"+a.id]){for(var d=[],e=0;e<b.text.length;++e)d.push(og(c[e]));c=d}else c=null;d=Oc(a,b);if(!c)return d;if(!d)return c;for(e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g){var h=0;a:for(;h<g.length;++h){for(var k=g[h],l=0;l<f.length;++l)if(f[l].marker==k.marker)continue a;f.push(k)}}else g&&(c[e]=g)}return c}function Za(a,b,c){for(var d=[],e=0;e<a.length;++e){var f=a[e];if(f.ranges)d.push(c?qa.prototype.deepCopy.call(f):f);else{var f=f.changes,g=[];d.push({changes:g});for(var h=
+0;h<f.length;++h){var k=f[h],l=void 0;g.push({from:k.from,to:k.to,text:k.text});if(b)for(var m in k)(l=m.match(/^spans_(\d+)$/))&&-1<H(b,Number(l[1]))&&(y(g)[m]=k[m],delete k[m])}}}return d}function Eb(a,b,c,d){return a.cm&&a.cm.display.shift||a.extend?(a=b.anchor,d&&(b=0>w(c,a),b!=0>w(d,a)?(a=c,c=d):b!=0>w(c,d)&&(c=d)),new z(a,c)):new z(d||c,c)}function uc(a,b,c,d){K(a,new qa([Eb(a,a.sel.primary(),b,c)],0),d)}function Ve(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=Eb(a,a.sel.ranges[e],
+b[e],null);b=fa(d,a.sel.primIndex);K(a,b,c)}function Cd(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c;K(a,fa(e,a.sel.primIndex),d)}function pg(a,b,c){c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new z(x(a,b[c].anchor),x(a,b[c].head))},origin:c&&c.origin};E(a,"beforeSelectionChange",a,c);a.cm&&E(a.cm,"beforeSelectionChange",a.cm,c);return c.ranges!=b.ranges?fa(c.ranges,c.ranges.length-1):b}function We(a,b,c){var d=a.history.done,e=y(d);e&&e.ranges?(d[d.length-
+1]=b,vc(a,b,c)):K(a,b,c)}function K(a,b,c){vc(a,b,c);b=a.sel;var d=a.cm?a.cm.curOp.id:NaN,e=a.history,f=c&&c.origin,g;if(!(g=d==e.lastSelOp)&&(g=f&&e.lastSelOrigin==f)&&!(g=e.lastModTime==e.lastSelTime&&e.lastOrigin==f)){g=y(e.done);var h=f.charAt(0);g="*"==h||"+"==h&&g.ranges.length==b.ranges.length&&g.somethingSelected()==b.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}g?e.done[e.done.length-1]=b:tc(b,e.done);e.lastSelTime=+new Date;e.lastSelOrigin=
+f;e.lastSelOp=d;c&&!1!==c.clearRedo&&Se(e.undone)}function vc(a,b,c){if(Z(a,"beforeSelectionChange")||a.cm&&Z(a.cm,"beforeSelectionChange"))b=pg(a,b,c);var d=c&&c.bias||(0>w(b.primary().head,a.sel.primary().head)?-1:1);Xe(a,Ye(a,b,d,!0));c&&!1===c.scroll||!a.cm||Wa(a.cm)}function Xe(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,Zd(a.cm)),R(a,"cursorActivity",a))}function Ze(a){Xe(a,Ye(a,a.sel,null,!1),ka)}function Ye(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=
+b.ranges[f],h=b.ranges.length==a.sel.ranges.length&&a.sel.ranges[f],k=Dd(a,g.anchor,h&&h.anchor,c,d),h=Dd(a,g.head,h&&h.head,c,d);if(e||k!=g.anchor||h!=g.head)e||(e=b.ranges.slice(0,f)),e[f]=new z(k,h)}return e?fa(e,b.primIndex):b}function $a(a,b,c,d,e){var f=u(a,b.line);if(f.markedSpans)for(var g=0;g<f.markedSpans.length;++g){var h=f.markedSpans[g],k=h.marker;if((null==h.from||(k.inclusiveLeft?h.from<=b.ch:h.from<b.ch))&&(null==h.to||(k.inclusiveRight?h.to>=b.ch:h.to>b.ch))){if(e&&(E(k,"beforeCursorEnter"),
+k.explicitlyCleared))if(f.markedSpans){--g;continue}else break;if(k.atomic){if(c){g=k.find(0>d?1:-1);h=void 0;if(0>d?k.inclusiveRight:k.inclusiveLeft)g=$e(a,g,-d,g&&g.line==b.line?f:null);if(g&&g.line==b.line&&(h=w(g,c))&&(0>d?0>h:0<h))return $a(a,g,b,d,e)}c=k.find(0>d?-1:1);if(0>d?k.inclusiveLeft:k.inclusiveRight)c=$e(a,c,d,c.line==b.line?f:null);return c?$a(a,c,b,d,e):null}}}return b}function Dd(a,b,c,d,e){d=d||1;b=$a(a,b,c,d,e)||!e&&$a(a,b,c,d,!0)||$a(a,b,c,-d,e)||!e&&$a(a,b,c,-d,!0);return b?
+b:(a.cantEdit=!0,q(a.first,0))}function $e(a,b,c,d){return 0>c&&0==b.ch?b.line>a.first?x(a,q(b.line-1)):null:0<c&&b.ch==(d||u(a,b.line)).text.length?b.line<a.first+a.size-1?q(b.line+1,0):null:new q(b.line,b.ch+c)}function af(a){a.setSelection(q(a.firstLine(),0),q(a.lastLine()),ka)}function bf(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){return d.canceled=!0}};c&&(d.update=function(b,c,g,h){b&&(d.from=x(a,b));c&&(d.to=x(a,c));g&&(d.text=g);void 0!==h&&
+(d.origin=h)});E(a,"beforeChange",a,d);a.cm&&E(a.cm,"beforeChange",a.cm,d);return d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function ab(a,b,c){if(a.cm){if(!a.cm.curOp)return G(a.cm,ab)(a,b,c);if(a.cm.state.suppressEdits)return}if(Z(a,"beforeChange")||a.cm&&Z(a.cm,"beforeChange"))if(b=bf(a,b,!0),!b)return;if(c=cf&&!c&&Sf(a,b.from,b.to))for(var d=c.length-1;0<=d;--d)df(a,{from:c[d].from,to:c[d].to,text:d?[""]:b.text});else df(a,b)}function df(a,b){if(1!=b.text.length||""!=b.text[0]||
+0!=w(b.from,b.to)){var c=yd(a,b);Te(a,b,c,a.cm?a.cm.curOp.id:NaN);Fb(a,b,c,Oc(a,b));var d=[];Ka(a,function(a,c){c||-1!=H(d,a.history)||(ef(a.history,b),d.push(a.history));Fb(a,b,null,Oc(a,b))})}}function wc(a,b,c){if(!a.cm||!a.cm.state.suppressEdits||c){for(var d=a.history,e,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,k=0;k<g.length&&(e=g[k],c?!e.ranges||e.equals(a.sel):e.ranges);k++);if(k!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;;)if(e=g.pop(),e.ranges){tc(e,h);if(c&&
+!e.equals(a.sel)){K(a,e,{clearRedo:!1});return}f=e}else break;var l=[];tc(f,h);h.push({changes:l,generation:d.generation});d.generation=e.generation||++d.maxGeneration;var m=Z(a,"beforeChange")||a.cm&&Z(a.cm,"beforeChange");c=function(d){var c=e.changes[d];c.origin=b;if(m&&!bf(a,c,!1))return g.length=0,{};l.push(Bd(a,c));var f=d?yd(a,c):y(g);Fb(a,c,f,Ue(a,c));!d&&a.cm&&a.cm.scrollIntoView({from:c.from,to:wa(c)});var h=[];Ka(a,function(a,b){b||-1!=H(h,a.history)||(ef(a.history,c),h.push(a.history));
+Fb(a,c,null,Ue(a,c))})};for(d=e.changes.length-1;0<=d;--d)if(f=c(d))return f.v}}}function ff(a,b){if(0!=b&&(a.first+=b,a.sel=new qa(Vb(a.sel.ranges,function(a){return new z(q(a.anchor.line+b,a.anchor.ch),q(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){N(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)va(a.cm,d,"gutter")}}function Fb(a,b,c,d){if(a.cm&&!a.cm.curOp)return G(a.cm,Fb)(a,b,c,d);if(b.to.line<a.first)ff(a,b.text.length-1-(b.to.line-b.from.line));else if(!(b.from.line>
+a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);ff(a,e);b={from:q(a.first,0),to:q(b.to.line+e,b.to.ch),text:[y(b.text)],origin:b.origin}}e=a.lastLine();b.to.line>e&&(b={from:b.from,to:q(e,u(a,e).text.length),text:[b.text[0]],origin:b.origin});b.removed=Ba(a,b.from,b.to);c||(c=yd(a,b));a.cm?qg(a.cm,b,d):Ad(a,b,d);vc(a,c,ka)}}function qg(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,k=f.line;a.options.lineWrapping||(k=C(ha(u(d,f.line))),d.iter(k,g.line+1,function(a){if(a==
+e.maxLine)return h=!0}));-1<d.sel.contains(b.from,b.to)&&Zd(a);Ad(d,b,c,ze(a));a.options.lineWrapping||(d.iter(k,f.line+b.text.length,function(a){var b=$b(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0));d.frontier=Math.min(d.frontier,f.line);Bb(a,400);c=b.text.length-(g.line-f.line)-1;b.full?N(a):f.line!=g.line||1!=b.text.length||Pe(a.doc,b)?N(a,f.line,g.line+1,c):va(a,f.line,"text");c=Z(a,"changes");if((d=Z(a,"change"))||c)b={from:f,
+to:g,text:b.text,removed:b.removed,origin:b.origin},d&&R(a,"change",a,b),c&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(b);a.display.selForContextMenu=null}function bb(a,b,c,d,e){d||(d=c);if(0>w(d,c)){var f=d;d=c;c=f}"string"==typeof b&&(b=a.splitLines(b));ab(a,{from:c,to:d,text:b,origin:e})}function gf(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function hf(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ranges)for(f.copied||(f=a[e]=f.deepCopy(),f.copied=!0),g=0;g<f.ranges.length;g++)gf(f.ranges[g].anchor,
+b,c,d),gf(f.ranges[g].head,b,c,d);else{for(var h=0;h<f.changes.length;++h){var k=f.changes[h];if(c<k.from.line)k.from=q(k.from.line+d,k.from.ch),k.to=q(k.to.line+d,k.to.ch);else if(b<=k.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function ef(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;hf(a.done,c,d,e);hf(a.undone,c,d,e)}function Gb(a,b,c,d){var e=b,f=b;"number"==typeof b?f=u(a,Math.max(a.first,Math.min(b,a.first+a.size-1))):e=C(b);if(null==e)return null;d(f,e)&&a.cm&&va(a.cm,e,
+c);return f}function Hb(a){this.lines=a;this.parent=null;for(var b=0,c=0;c<a.length;++c)a[c].parent=this,b+=a[c].height;this.height=b}function Ib(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d],b=b+e.chunkSize(),c=c+e.height;e.parent=this}this.size=b;this.height=c;this.parent=null}function Jb(a,b,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.doc=a;this.node=b}function rg(a,b,c,d){var e=new Jb(a,c,d),f=a.cm;f&&e.noHScroll&&(f.display.alignWidgets=!0);Gb(a,b,"widget",
+function(b){var d=b.widgets||(b.widgets=[]);null==e.insertAt?d.push(e):d.splice(Math.min(d.length-1,Math.max(0,e.insertAt)),0,e);e.line=b;f&&!Ea(a,b)&&(d=ia(b)<a.scrollTop,ga(b,b.height+vb(e)),d&&oc(f,null,e.height),f.curOp.forceUpdate=!0);return!0});return e}function xa(a,b){this.lines=[];this.type=b;this.doc=a;this.id=++jf}function cb(a,b,c,d,e){if(d&&d.shared)return sg(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return G(a.cm,cb)(a,b,c,d,e);var f=new xa(a,e);e=w(b,c);d&&aa(d,f,!1);if(0<e||0==e&&!1!==f.clearWhenEmpty)return f;
+f.replacedWith&&(f.collapsed=!0,f.widgetNode=r("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||f.widgetNode.setAttribute("cm-ignore-events","true"),d.insertLeft&&(f.widgetNode.insertLeft=!0));if(f.collapsed){if(Wd(a,b.line,b,c,f)||b.line!=c.line&&Wd(a,c.line,b,c,f))throw Error("Inserting collapsed marker partially overlapping an existing one");ta=!0}f.addToHistory&&Te(a,{from:b,to:c,origin:"markText"},a.sel,NaN);var g=b.line,h=a.cm,k;a.iter(g,c.line+1,function(a){h&&f.collapsed&&
+!h.options.lineWrapping&&ha(a)==h.display.maxLine&&(k=!0);f.collapsed&&g!=b.line&&ga(a,0);var d=new Zb(f,g==b.line?b.ch:null,g==c.line?c.ch:null);a.markedSpans=a.markedSpans?a.markedSpans.concat([d]):[d];d.marker.attachLine(a);++g});f.collapsed&&a.iter(b.line,c.line+1,function(b){Ea(a,b)&&ga(b,0)});f.clearOnEnter&&v(f,"beforeCursorEnter",function(){return f.clear()});f.readOnly&&(cf=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory());f.collapsed&&(f.id=++jf,f.atomic=!0);if(h){k&&
+(h.curOp.updateMaxLine=!0);if(f.collapsed)N(h,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle||f.css)for(d=b.line;d<=c.line;d++)va(h,d,"text");f.atomic&&Ze(h.doc);R(h,"markerAdded",h,f)}return f}function Kb(a,b){this.markers=a;this.primary=b;for(var c=0;c<a.length;++c)a[c].parent=this}function sg(a,b,c,d,e){d=aa(d);d.shared=!1;var f=[cb(a,b,c,d,e)],g=f[0],h=d.widgetNode;Ka(a,function(a){h&&(d.widgetNode=h.cloneNode(!0));f.push(cb(a,x(a,b),x(a,c),d,e));for(var l=0;l<a.linked.length;++l)if(a.linked[l].isParent)return;
+g=y(f)});return new Kb(f,g)}function kf(a){return a.findMarks(q(a.first,0),a.clipPos(q(a.lastLine())),function(a){return a.parent})}function tg(a){for(var b=function(b){b=a[b];var c=[b.primary.doc];Ka(b.primary.doc,function(a){return c.push(a)});for(var f=0;f<b.markers.length;f++){var g=b.markers[f];-1==H(c,g.doc)&&(g.parent=null,b.markers.splice(f--,1))}},c=0;c<a.length;c++)b(c)}function ug(a){var b=this;lf(b);if(!F(b,a)&&!oa(b.display,a)){L(a);B&&(mf=+new Date);var c=Ja(b,a,!0),d=a.dataTransfer.files;
+if(c&&!b.isReadOnly())if(d&&d.length&&window.FileReader&&window.File)for(var e=d.length,f=Array(e),g=0,h=function(a,d){if(!b.options.allowDropFileTypes||-1!=H(b.options.allowDropFileTypes,a.type)){var h=new FileReader;h.onload=G(b,function(){var a=h.result;/[\x00-\x08\x0e-\x1f]{2}/.test(a)&&(a="");f[d]=a;++g==e&&(c=x(b.doc,c),a={from:c,to:c,text:b.doc.splitLines(f.join(b.doc.lineSeparator())),origin:"paste"},ab(b.doc,a),We(b.doc,ra(c,wa(a))))});h.readAsText(a)}},k=0;k<e;++k)h(d[k],k);else if(b.state.draggingText&&
+-1<b.doc.sel.contains(c))b.state.draggingText(a),setTimeout(function(){return b.display.input.focus()},20);else try{if(h=a.dataTransfer.getData("Text")){b.state.draggingText&&!b.state.draggingText.copy&&(k=b.listSelections());vc(b.doc,ra(c,c));if(k)for(d=0;d<k.length;++d)bb(b.doc,"",k[d].anchor,k[d].head,"drag");b.replaceSelection(h,"around","paste");b.display.input.focus()}}catch(l){}}}function lf(a){a.display.dragCursor&&(a.display.lineSpace.removeChild(a.display.dragCursor),a.display.dragCursor=
+null)}function nf(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName("CodeMirror"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function vg(){var a;v(window,"resize",function(){null==a&&(a=setTimeout(function(){a=null;nf(wg)},100))});v(window,"blur",function(){return nf(zb)})}function wg(a){var b=a.display;if(b.lastWrapHeight!=b.wrapper.clientHeight||b.lastWrapWidth!=b.wrapper.clientWidth)b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,b.scrollbarsClipped=
+!1,a.setSize()}function xg(a){var b=a.split(/-(?!$)/);a=b[b.length-1];for(var c,d,e,f,g=0;g<b.length-1;g++){var h=b[g];if(/^(cmd|meta|m)$/i.test(h))f=!0;else if(/^a(lt)?$/i.test(h))c=!0;else if(/^(c|ctrl|control)$/i.test(h))d=!0;else if(/^s(hift)?$/i.test(h))e=!0;else throw Error("Unrecognized modifier name: "+h);}c&&(a="Alt-"+a);d&&(a="Ctrl-"+a);f&&(a="Cmd-"+a);e&&(a="Shift-"+a);return a}function yg(a){var b={},c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!/^(name|fallthrough|(de|at)tach)$/.test(c)){if("..."!=
+d)for(var e=Vb(c.split(" "),xg),f=0;f<e.length;f++){var g=void 0,h=void 0;f==e.length-1?(h=e.join(" "),g=d):(h=e.slice(0,f+1).join(" "),g="...");var k=b[h];if(!k)b[h]=g;else if(k!=g)throw Error("Inconsistent bindings for "+h);}delete a[c]}}for(var l in b)a[l]=b[l];return a}function db(a,b,c,d){b=xc(b);var e=b.call?b.call(a,d):b[a];if(!1===e)return"nothing";if("..."===e)return"multi";if(null!=e&&c(e))return"handled";if(b.fallthrough){if("[object Array]"!=Object.prototype.toString.call(b.fallthrough))return db(a,
+b.fallthrough,c,d);for(e=0;e<b.fallthrough.length;e++){var f=db(a,b.fallthrough[e],c,d);if(f)return f}}}function of(a){a="string"==typeof a?a:ya[a.keyCode];return"Ctrl"==a||"Alt"==a||"Shift"==a||"Mod"==a}function pf(a,b){if(ea&&34==a.keyCode&&a["char"])return!1;var c=ya[a.keyCode],d=c;if(null==d||a.altGraphKey)return!1;a.altKey&&"Alt"!=c&&(d="Alt-"+d);(qf?a.metaKey:a.ctrlKey)&&"Ctrl"!=c&&(d="Ctrl-"+d);(qf?a.ctrlKey:a.metaKey)&&"Cmd"!=c&&(d="Cmd-"+d);!b&&a.shiftKey&&"Shift"!=c&&(d="Shift-"+d);return d}
+function xc(a){return"string"==typeof a?Lb[a]:a}function eb(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&0>=w(f.from,y(d).to);){var g=d.pop();if(0>w(g.from,f.from)){f.from=g.from;break}}d.push(f)}W(a,function(){for(var b=d.length-1;0<=b;b--)bb(a.doc,"",d[b].from,d[b].to,"+delete");Wa(a)})}function rf(a,b){var c=u(a.doc,b),d=ha(c);d!=c&&(b=C(d));d=(c=ba(d))?c[0].level%2?bc(d):ac(d):0;return q(b,d)}function sf(a,b){var c=rf(a,b.line),d=u(a.doc,c.line),e=ba(d);
+return e&&0!=e[0].level?c:(d=Math.max(0,d.text.search(/\S/)),q(c.line,b.line==c.line&&b.ch<=d&&b.ch?0:d))}function yc(a,b,c){if("string"==typeof b&&(b=zc[b],!b))return!1;a.display.input.ensurePolled();var d=a.display.shift,e=!1;try{a.isReadOnly()&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Ed}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function zg(a,b,c){for(var d=0;d<a.state.keyMaps.length;d++){var e=db(b,a.state.keyMaps[d],c,a);if(e)return e}return a.options.extraKeys&&
+db(b,a.options.extraKeys,c,a)||db(b,a.options.keyMap,c,a)}function Ac(a,b,c,d){var e=a.state.keySeq;if(e){if(of(b))return"handled";Ag.set(50,function(){a.state.keySeq==e&&(a.state.keySeq=null,a.display.input.reset())});b=e+" "+b}d=zg(a,b,d);"multi"==d&&(a.state.keySeq=b);"handled"==d&&R(a,"keyHandled",a,b,c);if("handled"==d||"multi"==d)L(c),nd(a);return e&&!d&&/\'$/.test(b)?(L(c),!0):!!d}function tf(a,b){var c=pf(b,!0);return c?b.shiftKey&&!a.state.keySeq?Ac(a,"Shift-"+c,b,function(b){return yc(a,
+b,!0)})||Ac(a,c,b,function(b){if("string"==typeof b?/^go[A-Z]/.test(b):b.motion)return yc(a,b)}):Ac(a,c,b,function(b){return yc(a,b)}):!1}function Bg(a,b,c){return Ac(a,"'"+c+"'",b,function(b){return yc(a,b,!0)})}function uf(a){this.curOp.focus=la();if(!F(this,a)){B&&11>A&&27==a.keyCode&&(a.returnValue=!1);var b=a.keyCode;this.display.shift=16==b||a.shiftKey;var c=tf(this,a);ea&&(Fd=c?b:null,!c&&88==b&&!vf&&(da?a.metaKey:a.ctrlKey)&&this.replaceSelection("",null,"cut"));18!=b||/\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className)||
+Cg(this)}}function Cg(a){function b(a){18!=a.keyCode&&a.altKey||(Ta(c,"CodeMirror-crosshair"),ca(document,"keyup",b),ca(document,"mouseover",b))}var c=a.display.lineDiv;Ma(c,"CodeMirror-crosshair");v(document,"keyup",b);v(document,"mouseover",b)}function wf(a){16==a.keyCode&&(this.doc.sel.shift=!1);F(this,a)}function xf(a){if(!(oa(this.display,a)||F(this,a)||a.ctrlKey&&!a.altKey||da&&a.metaKey)){var b=a.keyCode,c=a.charCode;if(ea&&b==Fd)Fd=null,L(a);else if(!ea||a.which&&!(10>a.which)||!tf(this,a))if(b=
+String.fromCharCode(null==c?b:c),"\b"!=b&&!Bg(this,a,b))this.display.input.onKeyPress(a)}}function Dg(a){var b=this.display;if(!(F(this,a)||b.activeTouch&&b.input.supportsTouch()))if(b.input.ensurePolled(),b.shift=a.shiftKey,oa(b,a))I||(b.scroller.draggable=!1,setTimeout(function(){return b.scroller.draggable=!0},100));else if(!Gd(this,a,"gutterClick",!0)){var c=Ja(this,a);window.focus();switch(ae(a)){case 1:this.state.selectingText?this.state.selectingText(a):c?Eg(this,a,c):(a.target||a.srcElement)==
+b.scroller&&L(a);break;case 2:I&&(this.state.lastMiddleDown=+new Date);c&&uc(this.doc,c);setTimeout(function(){return b.input.focus()},20);L(a);break;case 3:Hd?yf(this,a):ig(this)}}}function Eg(a,b,c){B?setTimeout(Hc(Ce,a),0):a.curOp.focus=la();var d=+new Date,e;Bc&&Bc.time>d-400&&0==w(Bc.pos,c)?e="triple":Cc&&Cc.time>d-400&&0==w(Cc.pos,c)?(e="double",Bc={time:d,pos:c}):(e="single",Cc={time:d,pos:c});var d=a.doc.sel,f=da?b.metaKey:b.ctrlKey,g;a.options.dragDrop&&Fg&&!a.isReadOnly()&&"single"==e&&
+-1<(g=d.contains(c))&&(0>w((g=d.ranges[g]).from(),c)||0<c.xRel)&&(0<w(g.to(),c)||0>c.xRel)?Gg(a,b,c,f):Hg(a,b,c,e,f)}function Gg(a,b,c,d){var e=a.display,f=+new Date,g=G(a,function(h){I&&(e.scroller.draggable=!1);a.state.draggingText=!1;ca(document,"mouseup",g);ca(e.scroller,"drop",g);10>Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)&&(L(h),!d&&+new Date-200<f&&uc(a.doc,c),I||B&&9==A?setTimeout(function(){document.body.focus();e.input.focus()},20):e.input.focus())});I&&(e.scroller.draggable=
+!0);a.state.draggingText=g;g.copy=da?b.altKey:b.ctrlKey;e.scroller.dragDrop&&e.scroller.dragDrop();v(document,"mouseup",g);v(e.scroller,"drop",g)}function Hg(a,b,c,d,e){function f(b){if(0!=w(y,b))if(y=b,"rect"==d){for(var e=[],f=a.options.tabSize,g=Y(u(l,c.line).text,c.ch,f),h=Y(u(l,b.line).text,b.ch,f),k=Math.min(g,h),g=Math.max(g,h),h=Math.min(c.line,b.line),t=Math.min(a.lastLine(),Math.max(c.line,b.line));h<=t;h++){var r=u(l,h).text,v=Ic(r,k,f);k==g?e.push(new z(q(h,v),q(h,v))):r.length>v&&e.push(new z(q(h,
+v),q(h,Ic(r,g,f))))}e.length||e.push(new z(c,c));K(l,fa(p.ranges.slice(0,n).concat(e),n),{origin:"*mouse",scroll:!1});a.scrollIntoView(b)}else k=m,e=k.anchor,f=b,"single"!=d&&(b="double"==d?a.findWordAt(b):new z(q(b.line,0),x(l,q(b.line+1,0))),0<w(b.anchor,e)?(f=b.head,e=Yb(k.from(),b.anchor)):(f=b.anchor,e=Xb(k.to(),b.head))),b=p.ranges.slice(0),b[n]=new z(x(l,e),f),K(l,fa(b,n),Id)}function g(b){var c=++B,e=Ja(a,b,!0,"rect"==d);if(e)if(0!=w(e,y)){a.curOp.focus=la();f(e);var h=rd(k,l);(e.line>=h.to||
+e.line<h.from)&&setTimeout(G(a,function(){B==c&&g(b)}),150)}else{var m=b.clientY<A.top?-20:b.clientY>A.bottom?20:0;m&&setTimeout(G(a,function(){B==c&&(k.scroller.scrollTop+=m,g(b))}),50)}}function h(b){a.state.selectingText=!1;B=Infinity;L(b);k.input.focus();ca(document,"mousemove",C);ca(document,"mouseup",D);l.history.lastSelOrigin=null}var k=a.display,l=a.doc;L(b);var m,n,p=l.sel,t=p.ranges;e&&!b.shiftKey?(n=l.sel.contains(c),m=-1<n?t[n]:new z(c,c)):(m=l.sel.primary(),n=l.sel.primIndex);if(Ig?b.shiftKey&&
+b.metaKey:b.altKey)d="rect",e||(m=new z(c,c)),c=Ja(a,b,!0,!0),n=-1;else if("double"==d){var r=a.findWordAt(c);m=a.display.shift||l.extend?Eb(l,m,r.anchor,r.head):r}else"triple"==d?(r=new z(q(c.line,0),x(l,q(c.line+1,0))),m=a.display.shift||l.extend?Eb(l,m,r.anchor,r.head):r):m=Eb(l,m,c);e?-1==n?(n=t.length,K(l,fa(t.concat([m]),n),{scroll:!1,origin:"*mouse"})):1<t.length&&t[n].empty()&&"single"==d&&!b.shiftKey?(K(l,fa(t.slice(0,n).concat(t.slice(n+1)),0),{scroll:!1,origin:"*mouse"}),p=l.sel):Cd(l,
+n,m,Id):(n=0,K(l,new qa([m],0),Id),p=l.sel);var y=c,A=k.wrapper.getBoundingClientRect(),B=0,C=G(a,function(a){ae(a)?g(a):h(a)}),D=G(a,h);a.state.selectingText=D;v(document,"mousemove",C);v(document,"mouseup",D)}function Gd(a,b,c,d){var e,f;try{e=b.clientX,f=b.clientY}catch(g){return!1}if(e>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&L(b);d=a.display;var h=d.lineDiv.getBoundingClientRect();if(f>h.bottom||!Z(a,c))return Wc(b);f-=h.top-d.viewOffset;for(h=0;h<a.options.gutters.length;++h){var k=
+d.gutters.childNodes[h];if(k&&k.getBoundingClientRect().right>=e)return e=Ca(a.doc,f),E(a,c,a,e,a.options.gutters[h],b),Wc(b)}}function yf(a,b){var c;(c=oa(a.display,b))||(c=Z(a,"gutterContextMenu")?Gd(a,b,"gutterContextMenu",!1):!1);if(!c&&!F(a,b,"contextmenu"))a.display.input.onContextMenu(b)}function zf(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-");xb(a)}function Mb(a){Me(a);N(a);setTimeout(function(){return pd(a)},
+20)}function Jg(a,b,c){!b!=!(c&&c!=fb)&&(c=a.display.dragFunctions,b=b?v:ca,b(a.display.scroller,"dragstart",c.start),b(a.display.scroller,"dragenter",c.enter),b(a.display.scroller,"dragover",c.over),b(a.display.scroller,"dragleave",c.leave),b(a.display.scroller,"drop",c.drop))}function Kg(a){a.options.lineWrapping?(Ma(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(Ta(a.display.wrapper,"CodeMirror-wrap"),Rc(a));md(a);N(a);xb(a);setTimeout(function(){return Va(a)},
+100)}function D(a,b){var c=this;if(!(this instanceof D))return new D(a,b);this.options=b=b?aa(b):{};aa(Af,b,!1);xd(b);var d=b.value;"string"==typeof d&&(d=new P(d,b.mode,null,b.lineSeparator));this.doc=d;var e=new D.inputStyles[b.inputStyle](this),e=this.display=new Rf(a,d,e);e.wrapper.CodeMirror=this;Me(this);zf(this);b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap");b.autofocus&&!kb&&e.input.focus();Ie(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,
+focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new Aa,keySeq:null,specialChars:null};B&&11>A&&setTimeout(function(){return c.display.input.reset(!0)},20);Lg(this);Bf||(vg(),Bf=!0);Xa(this);this.curOp.forceUpdate=!0;Qe(this,d);b.autofocus&&!kb||this.hasFocus()?setTimeout(Hc(od,this),20):zb(this);for(var f in Dc)if(Dc.hasOwnProperty(f))Dc[f](c,b[f],fb);De(this);b.finishInit&&b.finishInit(this);for(d=0;d<Jd.length;++d)Jd[d](c);Ya(this);I&&b.lineWrapping&&
+"optimizelegibility"==getComputedStyle(e.lineDiv).textRendering&&(e.lineDiv.style.textRendering="auto")}function Lg(a){function b(){d.activeTouch&&(e=setTimeout(function(){return d.activeTouch=null},1E3),f=d.activeTouch,f.end=+new Date)}function c(a,b){if(null==b.left)return!0;var d=b.left-a.left,c=b.top-a.top;return 400<d*d+c*c}var d=a.display;v(d.scroller,"mousedown",G(a,Dg));B&&11>A?v(d.scroller,"dblclick",G(a,function(b){if(!F(a,b)){var d=Ja(a,b);!d||Gd(a,b,"gutterClick",!0)||oa(a.display,b)||
+(L(b),b=a.findWordAt(d),uc(a.doc,b.anchor,b.head))}})):v(d.scroller,"dblclick",function(b){return F(a,b)||L(b)});Hd||v(d.scroller,"contextmenu",function(b){return yf(a,b)});var e,f={end:0};v(d.scroller,"touchstart",function(b){var c;if(c=!F(a,b))1!=b.touches.length?c=!1:(c=b.touches[0],c=1>=c.radiusX&&1>=c.radiusY),c=!c;c&&(d.input.ensurePolled(),clearTimeout(e),c=+new Date,d.activeTouch={start:c,moved:!1,prev:300>=c-f.end?f:null},1==b.touches.length&&(d.activeTouch.left=b.touches[0].pageX,d.activeTouch.top=
+b.touches[0].pageY))});v(d.scroller,"touchmove",function(){d.activeTouch&&(d.activeTouch.moved=!0)});v(d.scroller,"touchend",function(e){var f=d.activeTouch;if(f&&!oa(d,e)&&null!=f.left&&!f.moved&&300>new Date-f.start){var g=a.coordsChar(d.activeTouch,"page"),f=!f.prev||c(f,f.prev)?new z(g,g):!f.prev.prev||c(f,f.prev.prev)?a.findWordAt(g):new z(q(g.line,0),x(a.doc,q(g.line+1,0)));a.setSelection(f.anchor,f.head);a.focus();L(e)}b()});v(d.scroller,"touchcancel",b);v(d.scroller,"scroll",function(){d.scroller.clientHeight&&
+(Ab(a,d.scroller.scrollTop),Ua(a,d.scroller.scrollLeft,!0),E(a,"scroll",a))});v(d.scroller,"mousewheel",function(b){return Ge(a,b)});v(d.scroller,"DOMMouseScroll",function(b){return Ge(a,b)});v(d.wrapper,"scroll",function(){return d.wrapper.scrollTop=d.wrapper.scrollLeft=0});d.dragFunctions={enter:function(b){F(a,b)||ob(b)},over:function(b){if(!F(a,b)){var d=Ja(a,b);if(d){var c=document.createDocumentFragment();Be(a,d,c);a.display.dragCursor||(a.display.dragCursor=r("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),
+a.display.lineSpace.insertBefore(a.display.dragCursor,a.display.cursorDiv));U(a.display.dragCursor,c)}ob(b)}},start:function(b){if(B&&(!a.state.draggingText||100>+new Date-mf))ob(b);else if(!F(a,b)&&!oa(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.effectAllowed="copyMove",b.dataTransfer.setDragImage&&!Cf)){var d=r("img",null,null,"position: fixed; left: 0; top: 0;");d.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw\x3d\x3d";ea&&(d.width=
+d.height=1,a.display.wrapper.appendChild(d),d._top=d.offsetTop);b.dataTransfer.setDragImage(d,0,0);ea&&d.parentNode.removeChild(d)}},drop:G(a,ug),leave:function(b){F(a,b)||lf(a)}};var g=d.input.getField();v(g,"keyup",function(b){return wf.call(a,b)});v(g,"keydown",G(a,uf));v(g,"keypress",G(a,xf));v(g,"focus",function(b){return od(a,b)});v(g,"blur",function(b){return zb(a,b)})}function Nb(a,b,c,d){var e=a.doc,f;null==c&&(c="add");"smart"==c&&(e.mode.indent?f=pb(a,b):c="prev");var g=a.options.tabSize,
+h=u(e,b),k=Y(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var l=h.text.match(/^\s*/)[0],m;if(!d&&!/\S/.test(h.text))m=0,c="not";else if("smart"==c&&(m=e.mode.indent(f,h.text.slice(l.length),h.text),m==Ed||150<m)){if(!d)return;c="prev"}"prev"==c?m=b>e.first?Y(u(e,b-1).text,null,g):0:"add"==c?m=k+a.options.indentUnit:"subtract"==c?m=k-a.options.indentUnit:"number"==typeof c&&(m=k+c);m=Math.max(0,m);c="";d=0;if(a.options.indentWithTabs)for(a=Math.floor(m/g);a;--a)d+=g,c+="\t";d<m&&(c+=Jc(m-d));if(c!=
+l)return bb(e,c,q(b,0),q(b,l.length),"+input"),h.stateAfter=null,!0;for(g=0;g<e.sel.ranges.length;g++)if(h=e.sel.ranges[g],h.head.line==b&&h.head.ch<l.length){b=q(b,l.length);Cd(e,g,new z(b,b));break}}function Df(a){S=a}function Kd(a,b,c,d,e){var f=a.doc;a.display.shift=!1;d||(d=f.sel);var g=a.state.pasteIncoming||"paste"==e,h=Ld(b),k=null;if(g&&1<d.ranges.length)if(S&&S.text.join("\n")==b){if(0==d.ranges.length%S.text.length)for(var k=[],l=0;l<S.text.length;l++)k.push(f.splitLines(S.text[l]))}else h.length==
+d.ranges.length&&(k=Vb(h,function(a){return[a]}));for(var m,l=d.ranges.length-1;0<=l;l--){m=d.ranges[l];var n=m.from(),p=m.to();m.empty()&&(c&&0<c?n=q(n.line,n.ch-c):a.state.overwrite&&!g?p=q(p.line,Math.min(u(f,p.line).text.length,p.ch+y(h).length)):S&&S.lineWise&&S.text.join("\n")==b&&(n=p=q(n.line,0)));m=a.curOp.updateInput;n={from:n,to:p,text:k?k[l%k.length]:h,origin:e||(g?"paste":a.state.cutIncoming?"cut":"+input")};ab(a.doc,n);R(a,"inputRead",a,n)}b&&!g&&Ef(a,b);Wa(a);a.curOp.updateInput=m;
+a.curOp.typing=!0;a.state.pasteIncoming=a.state.cutIncoming=!1}function Ff(a,b){var c=a.clipboardData&&a.clipboardData.getData("Text");if(c)return a.preventDefault(),b.isReadOnly()||b.options.disableInput||W(b,function(){return Kd(b,c,0,null,"paste")}),!0}function Ef(a,b){if(a.options.electricChars&&a.options.smartIndent)for(var c=a.doc.sel,d=c.ranges.length-1;0<=d;d--){var e=c.ranges[d];if(!(100<e.head.ch||d&&c.ranges[d-1].head.line==e.head.line)){var f=a.getModeAt(e.head),g=!1;if(f.electricChars)for(var h=
+0;h<f.electricChars.length;h++){if(-1<b.indexOf(f.electricChars.charAt(h))){g=Nb(a,e.head.line,"smart");break}}else f.electricInput&&f.electricInput.test(u(a.doc,e.head.line).text.slice(0,e.head.ch))&&(g=Nb(a,e.head.line,"smart"));g&&R(a,"electricInput",a,e.head.line)}}}function Gf(a){for(var b=[],c=[],d=0;d<a.doc.sel.ranges.length;d++){var e=a.doc.sel.ranges[d].head.line,e={anchor:q(e,0),head:q(e+1,0)};c.push(e);b.push(a.getRange(e.anchor,e.head))}return{text:b,ranges:c}}function Hf(a,b){a.setAttribute("autocorrect",
+"off");a.setAttribute("autocapitalize","off");a.setAttribute("spellcheck",!!b)}function If(){var a=r("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),b=r("div",[a],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");I?a.style.width="1000px":a.setAttribute("wrap","off");Ob&&(a.style.border="1px solid black");Hf(a);return b}function Md(a,b,c,d,e){function f(b){var d=(e?Vc:Yd)(l,h,c,!0);if(null==d){if(b=!b)b=g+c,b<a.first||
+b>=a.first+a.size?b=!1:(g=b,b=l=u(a,b));if(b)h=e?(0>c?bc:ac)(l):0>c?l.text.length:0;else return!1}else h=d;return!0}var g=b.line,h=b.ch,k=c,l=u(a,g);if("char"==d)f();else if("column"==d)f(!0);else if("word"==d||"group"==d){var m=null;d="group"==d;for(var n=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||f(!p);p=!1){var t=l.text.charAt(h)||"\n",t=Wb(t,n)?"w":d&&"\n"==t?"n":!d||/\s/.test(t)?null:"p";!d||p||t||(t="s");if(m&&m!=t){0>c&&(c=1,f());break}t&&(m=t);if(0<c&&!f(!p))break}}k=Dd(a,q(g,h),b,k,
+!0);w(b,k)||(k.hitSide=!0);return k}function Jf(a,b,c,d){var e=a.doc,f=b.left,g;"page"==d?(g=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),g=Math.max(g-.5*Ha(a.display),3),g=(0<c?b.bottom:b.top)+c*g):"line"==d&&(g=0<c?b.bottom+3:b.top-3);for(;;){b=kd(a,f,g);if(!b.outside)break;if(0>c?0>=g:g>=e.height){b.hitSide=!0;break}g+=5*c}return b}function Nd(a){this.cm=a;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;
+this.polling=new Aa;this.composing=null;this.gracePeriod=!1;this.readDOMTimeout=null}function Kf(a,b){var c=gd(a,b.line);if(!c||c.hidden)return null;var d=u(a.doc,b.line),c=se(c,d,b.line),d=ba(d),e="left";d&&(e=cc(d,b.ch)%2?"right":"left");c=te(c.map,b.ch,e);c.offset="right"==c.collapse?c.end:c.start;return c}function gb(a,b){b&&(a.bad=!0);return a}function Mg(a,b,c,d,e){function f(a){return function(b){return b.id==a}}function g(b){if(1==b.nodeType){var c=b.getAttribute("cm-text");if(null!=c)h=""==
+c?h+b.textContent.replace(/\u200b/g,""):h+c;else{var c=b.getAttribute("cm-marker"),p;if(c)b=a.findMarks(q(d,0),q(e+1,0),f(+c)),b.length&&(p=b[0].find())&&(h+=Ba(a.doc,p.from,p.to).join(l));else if("false"!=b.getAttribute("contenteditable")){for(p=0;p<b.childNodes.length;p++)g(b.childNodes[p]);/^(pre|div|p)$/i.test(b.nodeName)&&(k=!0)}}}else 3==b.nodeType&&(b=b.nodeValue)&&(k&&(h+=l,k=!1),h+=b)}for(var h="",k=!1,l=a.doc.lineSeparator();;){g(b);if(b==c)break;b=b.nextSibling}return h}function Ec(a,b,
+c){var d;if(b==a.display.lineDiv){d=a.display.lineDiv.childNodes[c];if(!d)return gb(a.clipPos(q(a.display.viewTo-1)),!0);b=null;c=0}else for(d=b;;d=d.parentNode){if(!d||d==a.display.lineDiv)return null;if(d.parentNode&&d.parentNode==a.display.lineDiv)break}for(var e=0;e<a.display.view.length;e++){var f=a.display.view[e];if(f.node==d)return Ng(f,b,c)}}function Ng(a,b,c){function d(b,d,c){for(var e=-1;e<(l?l.length:0);e++)for(var f=0>e?k.map:l[e],g=0;g<f.length;g+=3){var h=f[g+2];if(h==b||h==d){d=C(0>
+e?a.line:a.rest[e]);e=f[g]+c;if(0>c||h!=b)e=f[g+(c?1:0)];return q(d,e)}}}var e=a.text.firstChild,f=!1;if(!b||!Tb(e,b))return gb(q(C(a.line),0),!0);if(b==e&&(f=!0,b=e.childNodes[c],c=0,!b))return c=a.rest?y(a.rest):a.line,gb(q(C(c),c.text.length),f);var g=3==b.nodeType?b:null,h=b;g||1!=b.childNodes.length||3!=b.firstChild.nodeType||(g=b.firstChild,c&&(c=g.nodeValue.length));for(;h.parentNode!=e;)h=h.parentNode;var k=a.measure,l=k.maps;if(b=d(g,h,c))return gb(b,f);e=h.nextSibling;for(g=g?g.nodeValue.length-
+c:0;e;e=e.nextSibling){if(b=d(e,e.firstChild,0))return gb(q(b.line,b.ch-g),f);g+=e.textContent.length}for(h=h.previousSibling;h;h=h.previousSibling){if(b=d(h,h.firstChild,-1))return gb(q(b.line,b.ch+c),f);c+=h.textContent.length}}function Od(a){this.cm=a;this.prevInput="";this.pollingFast=!1;this.polling=new Aa;this.hasSelection=this.inaccurateSelection=!1;this.composing=null}var T=navigator.userAgent,Lf=navigator.platform,sa=/gecko\/\d/i.test(T),Mf=/MSIE \d/.test(T),Nf=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(T),
+B=Mf||Nf,A=B&&(Mf?document.documentMode||6:Nf[1]),I=/WebKit\//.test(T),Og=I&&/Qt\/\d+\.\d+/.test(T),Pg=/Chrome\//.test(T),ea=/Opera\//.test(T),Cf=/Apple Computer/.test(navigator.vendor),Qg=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(T),lg=/PhantomJS/.test(T),Ob=/AppleWebKit/.test(T)&&/Mobile\/\w+/.test(T),kb=Ob||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(T),da=Ob||/Mac/.test(Lf),Ig=/\bCrOS\b/.test(T),Rg=/win/i.test(Lf),La=ea&&T.match(/Version\/(\d*\.\d*)/);La&&(La=Number(La[1]));La&&
+15<=La&&(ea=!1,I=!0);var qf=da&&(Og||ea&&(null==La||12.11>La)),Hd=sa||B&&9<=A,Ta=function(a,b){var c=a.className,d=za(b).exec(c);if(d){var e=c.slice(d.index+d[0].length);a.className=c.slice(0,d.index)+(e?d[1]+e:"")}},Ra;Ra=document.createRange?function(a,b,c,d){var e=document.createRange();e.setEnd(d||a,c);e.setStart(a,b);return e}:function(a,b,c){var d=document.body.createTextRange();try{d.moveToElementText(a.parentNode)}catch(e){return d}d.collapse(!0);d.moveEnd("character",c);d.moveStart("character",
+b);return d};var hb=function(a){a.select()};Ob?hb=function(a){a.selectionStart=0;a.selectionEnd=a.value.length}:B&&(hb=function(a){try{a.select()}catch(b){}});Aa.prototype.set=function(a,b){clearTimeout(this.id);this.id=setTimeout(b,a)};var Ed={toString:function(){return"CodeMirror.Pass"}},ka={scroll:!1},Id={origin:"*mouse"},Pb={origin:"+move"},Ub=[""],Pf=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Qf=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,
+cf=!1,ta=!1,nb=null,Uf=function(){function a(a){return 247>=a?"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(a):1424<=a&&1524>=a?"R":1536<=a&&1773>=a?"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm".charAt(a-
+1536):1774<=a&&2220>=a?"r":8192<=a&&8203>=a?"w":8204==a?"b":"L"}function b(a,b,d){this.level=a;this.from=b;this.to=d}var c=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,d=/[stwN]/,e=/[LRr]/,f=/[Lb1n]/,g=/[1n]/;return function(h){if(!c.test(h))return!1;for(var k=h.length,l=[],m=0;m<k;++m)l.push(a(h.charCodeAt(m)));for(var m=0,n="L";m<k;++m){var p=l[m];"m"==p?l[m]=n:n=p}m=0;for(n="L";m<k;++m)p=l[m],"1"==p&&"r"==n?l[m]="n":e.test(p)&&(n=p,"r"==p&&(l[m]="R"));m=1;for(n=l[0];m<k-1;++m)p=l[m],"+"==p&&"1"==
+n&&"1"==l[m+1]?l[m]="1":","!=p||n!=l[m+1]||"1"!=n&&"n"!=n||(l[m]=n),n=p;for(m=0;m<k;++m)if(n=l[m],","==n)l[m]="N";else if("%"==n){n=void 0;for(n=m+1;n<k&&"%"==l[n];++n);for(p=m&&"!"==l[m-1]||n<k&&"1"==l[n]?"1":"N";m<n;++m)l[m]=p;m=n-1}m=0;for(n="L";m<k;++m)p=l[m],"L"==n&&"1"==p?l[m]="L":e.test(p)&&(n=p);for(n=0;n<k;++n)if(d.test(l[n])){m=void 0;for(m=n+1;m<k&&d.test(l[m]);++m);p="L"==(m<k?l[m]:"L");for(p="L"==(n?l[n-1]:"L")||p?"L":"R";n<m;++n)l[n]=p;n=m-1}for(var m=[],t,n=0;n<k;)if(f.test(l[n])){p=
+n;for(++n;n<k&&f.test(l[n]);++n);m.push(new b(0,p,n))}else{var q=n,p=m.length;for(++n;n<k&&"L"!=l[n];++n);for(var r=q;r<n;)if(g.test(l[r])){q<r&&m.splice(p,0,new b(1,q,r));q=r;for(++r;r<n&&g.test(l[r]);++r);m.splice(p,0,new b(2,q,r));q=r}else++r;q<n&&m.splice(p,0,new b(1,q,n))}1==m[0].level&&(t=h.match(/^\s+/))&&(m[0].from=t[0].length,m.unshift(new b(0,0,t[0].length)));1==y(m).level&&(t=h.match(/\s+$/))&&(y(m).to-=t[0].length,m.push(new b(0,k-t[0].length,k)));2==m[0].level&&m.unshift(new b(1,m[0].to,
+m[0].to));m[0].level!=y(m).level&&m.push(new b(m[0].level,k,k));return m}}(),dc=[],v=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent?a.attachEvent("on"+b,c):(a=a._handlers||(a._handlers={}),a[b]=(a[b]||dc).concat(c))},Fg=function(){if(B&&9>A)return!1;var a=r("div");return"draggable"in a||"dragDrop"in a}(),Xc,cd,Ld=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;b<=d;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?
+e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)},Sg=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){var b;try{b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},vf=function(){var a=r("div");if("oncopy"in a)return!0;a.setAttribute("oncopy","return;");return"function"==typeof a.oncopy}(),
+id=null,Yc={},Oa={},Pa={},qb=function(a,b){this.pos=this.start=0;this.string=a;this.tabSize=b||8;this.lineStart=this.lastColumnPos=this.lastColumnValue=0};qb.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a?b==a:b&&(a.test?
+a.test(b):a(b)))return++this.pos,b},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){a=this.string.indexOf(a,this.pos);if(-1<a)return this.pos=a,!0},backUp:function(a){this.pos-=a},column:function(){this.lastColumnPos<this.start&&(this.lastColumnValue=Y(this.string,this.start,this.tabSize,
+this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start);return this.lastColumnValue-(this.lineStart?Y(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Y(this.string,null,this.tabSize)-(this.lineStart?Y(this.string,this.lineStart,this.tabSize):0)},match:function(a,b,c){if("string"==typeof a){var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);if(d(e)==d(a))return!1!==b&&(this.pos+=a.length),!0}else{if((a=this.string.slice(this.pos).match(a))&&
+0<a.index)return null;a&&!1!==b&&(this.pos+=a[0].length);return a}},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}};Na(Qa);Qa.prototype.lineNo=function(){return C(this)};var $f={},Zf={},Sa=null,tb=null,ue={left:0,right:0,top:0,bottom:0},Ia,mc=0,V=null;B?V=-.53:sa?V=15:Pg?V=-.7:Cf&&(V=-1/3);td.prototype=aa({update:function(a){var b=a.scrollWidth>a.clientWidth+1,c=a.scrollHeight>a.clientHeight+
+1,d=a.nativeBarWidth;c?(this.vert.style.display="block",this.vert.style.bottom=b?d+"px":"0",this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+(a.viewHeight-(b?d:0)))+"px"):(this.vert.style.display="",this.vert.firstChild.style.height="0");b?(this.horiz.style.display="block",this.horiz.style.right=c?d+"px":"0",this.horiz.style.left=a.barLeft+"px",this.horiz.firstChild.style.width=a.scrollWidth-a.clientWidth+(a.viewWidth-a.barLeft-(c?d:0))+"px"):(this.horiz.style.display="",
+this.horiz.firstChild.style.width="0");!this.checkedZeroWidth&&0<a.clientHeight&&(0==d&&this.zeroWidthHack(),this.checkedZeroWidth=!0);return{right:c?d:0,bottom:b?d:0}},setScrollLeft:function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a);this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz)},setScrollTop:function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a);this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert)},zeroWidthHack:function(){this.horiz.style.height=
+this.vert.style.width=da&&!Qg?"12px":"18px";this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none";this.disableHoriz=new Aa;this.disableVert=new Aa},enableZeroWidthBar:function(a,b){function c(){var d=a.getBoundingClientRect();document.elementFromPoint(d.left+1,d.bottom-1)!=a?a.style.pointerEvents="none":b.set(1E3,c)}a.style.pointerEvents="auto";b.set(1E3,c)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz);a.removeChild(this.vert)}},td.prototype);ud.prototype=aa({update:function(){return{bottom:0,
+right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},ud.prototype);var Je={"native":td,"null":ud},kg=0;qc.prototype.signal=function(a,b){Z(a,b)&&this.events.push(arguments)};qc.prototype.finish=function(){for(var a=0;a<this.events.length;a++)E.apply(null,this.events[a])};qa.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(a){if(a==this)return!0;if(a.primIndex!=this.primIndex||a.ranges.length!=this.ranges.length)return!1;for(var b=0;b<
+this.ranges.length;b++){var c=this.ranges[b],d=a.ranges[b];if(0!=w(c.anchor,d.anchor)||0!=w(c.head,d.head))return!1}return!0},deepCopy:function(){for(var a=[],b=0;b<this.ranges.length;b++)a[b]=new z(Nc(this.ranges[b].anchor),Nc(this.ranges[b].head));return new qa(a,this.primIndex)},somethingSelected:function(){for(var a=0;a<this.ranges.length;a++)if(!this.ranges[a].empty())return!0;return!1},contains:function(a,b){b||(b=a);for(var c=0;c<this.ranges.length;c++){var d=this.ranges[c];if(0<=w(b,d.from())&&
+0>=w(a,d.to()))return c}return-1}};z.prototype={from:function(){return Yb(this.anchor,this.head)},to:function(){return Xb(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};Hb.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;c<d;++c){var e=this.lines[c];this.height-=e.height;var f=e;f.parent=null;Td(f);R(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.push.apply(a,this.lines)},
+insertInner:function(a,b,c){this.height+=c;this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(a=0;a<b.length;++a)b[a].parent=this},iterN:function(a,b,c){for(b=a+b;a<b;++a)if(c(this.lines[a]))return!0}};Ib.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(a<e){var f=Math.min(b,e-a),g=d.height;d.removeInner(a,f);this.height-=g-d.height;e==f&&(this.children.splice(c--,
+1),d.parent=null);if(0==(b-=f))break;a=0}else a-=e}25>this.size-b&&(1<this.children.length||!(this.children[0]instanceof Hb))&&(c=[],this.collapse(c),this.children=[new Hb(c)],this.children[0].parent=this)},collapse:function(a){for(var b=0;b<this.children.length;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length;this.height+=c;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<=f){e.insertInner(a,b,c);if(e.lines&&50<e.lines.length){for(b=
+a=e.lines.length%25+25;b<e.lines.length;)c=new Hb(e.lines.slice(b,b+=25)),e.height-=c.height,this.children.splice(++d,0,c),c.parent=this;e.lines=e.lines.slice(0,a);this.maybeSpill()}break}a-=f}},maybeSpill:function(){if(!(10>=this.children.length)){var a=this;do{var b=a.children.splice(a.children.length-5,5),b=new Ib(b);if(a.parent){a.size-=b.size;a.height-=b.height;var c=H(a.parent.children,a);a.parent.children.splice(c+1,0,b)}else c=new Ib(a.children),c.parent=a,a.children=[c,b],a=c;b.parent=a.parent}while(10<
+a.children.length);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<f){f=Math.min(b,f-a);if(e.iterN(a,f,c))return!0;if(0==(b-=f))break;a=0}else a-=f}}};Na(Jb);Jb.prototype.clear=function(){var a=this.doc.cm,b=this.line.widgets,c=this.line,d=C(c);if(null!=d&&b){for(var e=0;e<b.length;++e)b[e]==this&&b.splice(e--,1);b.length||(c.widgets=null);var f=vb(this);ga(c,Math.max(0,c.height-f));a&&W(a,function(){var b=-f;ia(c)<
+(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&oc(a,null,b);va(a,d,"widget")})}};Jb.prototype.changed=function(){var a=this.height,b=this.doc.cm,c=this.line;this.height=null;var d=vb(this)-a;d&&(ga(c,c.height+d),b&&W(b,function(){b.curOp.forceUpdate=!0;ia(c)<(b.curOp&&b.curOp.scrollTop||b.doc.scrollTop)&&oc(b,null,d)}))};var jf=0;Na(xa);xa.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;b&&Xa(a);if(Z(this,"clear")){var c=this.find();c&&R(this,"clear",c.from,
+c.to)}for(var d=c=null,e=0;e<this.lines.length;++e){var f=this.lines[e],g=mb(f.markedSpans,this);a&&!this.collapsed?va(a,C(f),"text"):a&&(null!=g.to&&(d=C(f)),null!=g.from&&(c=C(f)));for(var h=f,k=f.markedSpans,l=g,m=void 0,n=0;n<k.length;++n)k[n]!=l&&(m||(m=[])).push(k[n]);h.markedSpans=m;null==g.from&&this.collapsed&&!Ea(this.doc,f)&&a&&ga(f,Ha(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(e=0;e<this.lines.length;++e)f=ha(this.lines[e]),g=$b(f),g>a.display.maxLineLength&&(a.display.maxLine=
+f,a.display.maxLineLength=g,a.display.maxLineChanged=!0);null!=c&&a&&this.collapsed&&N(a,c,d+1);this.lines.length=0;this.explicitlyCleared=!0;this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Ze(a.doc));a&&R(a,"markerCleared",a,this);b&&Ya(a);this.parent&&this.parent.clear()}};xa.prototype.find=function(a,b){null==a&&"bookmark"==this.type&&(a=1);for(var c,d,e=0;e<this.lines.length;++e){var f=this.lines[e],g=mb(f.markedSpans,this);if(null!=g.from&&(c=q(b?f:C(f),g.from),-1==a))return c;if(null!=
+g.to&&(d=q(b?f:C(f),g.to),1==a))return d}return c&&{from:c,to:d}};xa.prototype.changed=function(){var a=this.find(-1,!0),b=this,c=this.doc.cm;a&&c&&W(c,function(){var d=a.line,e=C(a.line);if(e=gd(c,e))ve(e),c.curOp.selectionChanged=c.curOp.forceUpdate=!0;c.curOp.updateMaxLine=!0;Ea(b.doc,d)||null==b.height||(e=b.height,b.height=null,(e=vb(b)-e)&&ga(d,d.height+e))})};xa.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=H(b.maybeHiddenMarkers,
+this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)};xa.prototype.detachLine=function(a){this.lines.splice(H(this.lines,a),1);!this.lines.length&&this.doc.cm&&(a=this.doc.cm.curOp,(a.maybeHiddenMarkers||(a.maybeHiddenMarkers=[])).push(this))};Na(Kb);Kb.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();R(this,"clear")}};Kb.prototype.find=function(a,b){return this.primary.find(a,
+b)};var Tg=0,P=function(a,b,c,d){if(!(this instanceof P))return new P(a,b,c,d);null==c&&(c=0);Ib.call(this,[new Hb([new Qa("",null)])]);this.first=c;this.scrollTop=this.scrollLeft=0;this.cantEdit=!1;this.cleanGeneration=1;this.frontier=c;c=q(c,0);this.sel=ra(c);this.history=new sc(null);this.id=++Tg;this.modeOption=b;this.lineSep=d;this.extend=!1;"string"==typeof a&&(a=this.splitLines(a));Ad(this,{from:c,to:c,text:a});K(this,ra(c),ka)};P.prototype=Pd(Ib.prototype,{constructor:P,iter:function(a,b,
+c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0;d<b.length;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=Lc(this,this.first,this.first+this.size);return!1===a?b:b.join(a||this.lineSeparator())},setValue:J(function(a){var b=q(this.first,0),c=this.first+this.size-1;ab(this,{from:b,to:q(c,u(this,c).text.length),text:this.splitLines(a),origin:"setValue",
+full:!0},!0);K(this,ra(b))}),replaceRange:function(a,b,c,d){b=x(this,b);c=c?x(this,c):b;bb(this,a,b,c,d)},getRange:function(a,b,c){a=Ba(this,x(this,a),x(this,b));return!1===c?a:a.join(c||this.lineSeparator())},getLine:function(a){return(a=this.getLineHandle(a))&&a.text},getLineHandle:function(a){if(lb(this,a))return u(this,a)},getLineNumber:function(a){return C(a)},getLineHandleVisualStart:function(a){"number"==typeof a&&(a=u(this,a));return ha(a)},lineCount:function(){return this.size},firstLine:function(){return this.first},
+lastLine:function(){return this.first+this.size-1},clipPos:function(a){return x(this,a)},getCursor:function(a){var b=this.sel.primary();return null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||"to"==a||!1===a?b.to():b.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:J(function(a,b,c){a=x(this,"number"==typeof a?q(a,b||0):a);K(this,ra(a,null),c)}),setSelection:J(function(a,b,c){var d=x(this,a);a=x(this,b||a);
+K(this,ra(d,a),c)}),extendSelection:J(function(a,b,c){uc(this,x(this,a),b&&x(this,b),c)}),extendSelections:J(function(a,b){Ve(this,Rd(this,a),b)}),extendSelectionsBy:J(function(a,b){var c=Vb(this.sel.ranges,a);Ve(this,Rd(this,c),b)}),setSelections:J(function(a,b,c){if(a.length){for(var d=[],e=0;e<a.length;e++)d[e]=new z(x(this,a[e].anchor),x(this,a[e].head));null==b&&(b=Math.min(a.length-1,this.sel.primIndex));K(this,fa(d,b),c)}}),addSelection:J(function(a,b,c){var d=this.sel.ranges.slice(0);d.push(new z(x(this,
+a),x(this,b||a)));K(this,fa(d,d.length-1),c)}),getSelection:function(a){for(var b=this.sel.ranges,c,d=0;d<b.length;d++){var e=Ba(this,b[d].from(),b[d].to());c=c?c.concat(e):e}return!1===a?c:c.join(a||this.lineSeparator())},getSelections:function(a){for(var b=[],c=this.sel.ranges,d=0;d<c.length;d++){var e=Ba(this,c[d].from(),c[d].to());!1!==a&&(e=e.join(a||this.lineSeparator()));b[d]=e}return b},replaceSelection:function(a,b,c){for(var d=[],e=0;e<this.sel.ranges.length;e++)d[e]=a;this.replaceSelections(d,
+b,c||"+input")},replaceSelections:J(function(a,b,c){for(var d=[],e=this.sel,f=0;f<e.ranges.length;f++){var g=e.ranges[f];d[f]={from:g.from(),to:g.to(),text:this.splitLines(a[f]),origin:c}}if(a=b&&"end"!=b){a=[];e=c=q(this.first,0);for(f=0;f<d.length;f++){var h=d[f],g=Oe(h.from,c,e),k=Oe(wa(h),c,e);c=h.to;e=k;"around"==b?(h=this.sel.ranges[f],h=0>w(h.head,h.anchor),a[f]=new z(h?k:g,h?g:k)):a[f]=new z(g,g)}a=new qa(a,this.sel.primIndex)}b=a;for(a=d.length-1;0<=a;a--)ab(this,d[a]);b?We(this,b):this.cm&&
+Wa(this.cm)}),undo:J(function(){wc(this,"undo")}),redo:J(function(){wc(this,"redo")}),undoSelection:J(function(){wc(this,"undo",!0)}),redoSelection:J(function(){wc(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d<a.done.length;d++)a.done[d].ranges||++b;for(d=0;d<a.undone.length;d++)a.undone[d].ranges||++c;return{undo:b,redo:c}},clearHistory:function(){this.history=new sc(this.history.maxGeneration)},
+markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(a){a&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null);return this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:Za(this.history.done),undone:Za(this.history.undone)}},setHistory:function(a){var b=this.history=new sc(this.history.maxGeneration);b.done=Za(a.done.slice(0),null,!0);b.undone=Za(a.undone.slice(0),
+null,!0)},setGutterMarker:J(function(a,b,c){return Gb(this,a,"gutter",function(a){var e=a.gutterMarkers||(a.gutterMarkers={});e[b]=c;!c&&Qd(e)&&(a.gutterMarkers=null);return!0})}),clearGutter:J(function(a){var b=this,c=this.first;this.iter(function(d){d.gutterMarkers&&d.gutterMarkers[a]&&Gb(b,d,"gutter",function(){d.gutterMarkers[a]=null;Qd(d.gutterMarkers)&&(d.gutterMarkers=null);return!0});++c})}),lineInfo:function(a){var b;if("number"==typeof a){if(!lb(this,a))return null;b=a;a=u(this,a);if(!a)return null}else if(b=
+C(a),null==b)return null;return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},addLineClass:J(function(a,b,c){return Gb(this,a,"gutter"==b?"gutter":"class",function(a){var e="text"==b?"textClass":"background"==b?"bgClass":"gutter"==b?"gutterClass":"wrapClass";if(a[e]){if(za(c).test(a[e]))return!1;a[e]+=" "+c}else a[e]=c;return!0})}),removeLineClass:J(function(a,b,c){return Gb(this,a,"gutter"==b?"gutter":"class",
+function(a){var e="text"==b?"textClass":"background"==b?"bgClass":"gutter"==b?"gutterClass":"wrapClass",f=a[e];if(f)if(null==c)a[e]=null;else{var g=f.match(za(c));if(!g)return!1;var h=g.index+g[0].length;a[e]=f.slice(0,g.index)+(g.index&&h!=f.length?" ":"")+f.slice(h)||null}else return!1;return!0})}),addLineWidget:J(function(a,b,c){return rg(this,a,b,c)}),removeLineWidget:function(a){a.clear()},markText:function(a,b,c){return cb(this,x(this,a),x(this,b),c,c&&c.type||"range")},setBookmark:function(a,
+b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft,clearWhenEmpty:!1,shared:b&&b.shared,handleMouseEvents:b&&b.handleMouseEvents};a=x(this,a);return cb(this,a,a,c,"bookmark")},findMarksAt:function(a){a=x(this,a);var b=[],c=u(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=x(this,a);b=x(this,b);var d=[],e=a.line;this.iter(a.line,
+b.line+1,function(f){if(f=f.markedSpans)for(var g=0;g<f.length;g++){var h=f[g];null!=h.to&&e==a.line&&a.ch>=h.to||null==h.from&&e!=a.line||null!=h.from&&e==b.line&&h.from>=b.ch||c&&!c(h.marker)||d.push(h.marker.parent||h.marker)}++e});return d},getAllMarks:function(){var a=[];this.iter(function(b){if(b=b.markedSpans)for(var c=0;c<b.length;++c)null!=b[c].from&&a.push(b[c].marker)});return a},posFromIndex:function(a){var b,c=this.first,d=this.lineSeparator().length;this.iter(function(e){e=e.text.length+
+d;if(e>a)return b=a,!0;a-=e;++c});return x(this,q(c,b))},indexFromPos:function(a){a=x(this,a);var b=a.ch;if(a.line<this.first||0>a.ch)return 0;var c=this.lineSeparator().length;this.iter(this.first,a.line,function(a){b+=a.text.length+c});return b},copy:function(a){var b=new P(Lc(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep);b.scrollTop=this.scrollTop;b.scrollLeft=this.scrollLeft;b.sel=this.sel;b.extend=!1;a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory()));
+return b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from);null!=a.to&&a.to<c&&(c=a.to);b=new P(Lc(this,b,c),a.mode||this.modeOption,b,this.lineSep);a.sharedHist&&(b.history=this.history);(this.linked||(this.linked=[])).push({doc:b,sharedHist:a.sharedHist});b.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}];a=kf(this);for(c=0;c<a.length;c++){var d=a[c],e=d.find(),f=b.clipPos(e.from),e=b.clipPos(e.to);w(f,e)&&(f=cb(b,f,e,d.primary,d.primary.type),
+d.markers.push(f),f.parent=d)}return b},unlinkDoc:function(a){a instanceof D&&(a=a.doc);if(this.linked)for(var b=0;b<this.linked.length;++b)if(this.linked[b].doc==a){this.linked.splice(b,1);a.unlinkDoc(this);tg(kf(this));break}if(a.history==this.history){var c=[a.id];Ka(a,function(a){return c.push(a.id)},!0);a.history=new sc(null);a.history.done=Za(this.history.done,c);a.history.undone=Za(this.history.undone,c)}},iterLinkedDocs:function(a){Ka(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm},
+splitLines:function(a){return this.lineSep?a.split(this.lineSep):Ld(a)},lineSeparator:function(){return this.lineSep||"\n"}});P.prototype.eachLine=P.prototype.iter;for(var mf=0,Bf=!1,ya={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"\x3d",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"\x3d",109:"-",110:".",
+111:"/",127:"Delete",173:"-",186:";",187:"\x3d",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Qb=0;10>Qb;Qb++)ya[Qb+48]=ya[Qb+96]=String(Qb);for(var Fc=65;90>=Fc;Fc++)ya[Fc]=String.fromCharCode(Fc);for(var Rb=1;12>=Rb;Rb++)ya[Rb+111]=ya[Rb+63235]="F"+Rb;var Lb={basic:{Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",
+End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},pcDefault:{"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft",
+"Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},emacsy:{"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown",
+"Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},macDefault:{"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft",
+"Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",
+fallthrough:["basic","emacsy"]}};Lb["default"]=da?Lb.macDefault:Lb.pcDefault;var zc={selectAll:af,singleSelection:function(a){return a.setSelection(a.getCursor("anchor"),a.getCursor("head"),ka)},killLine:function(a){return eb(a,function(b){if(b.empty()){var c=u(a.doc,b.head.line).text.length;return b.head.ch==c&&b.head.line<a.lastLine()?{from:b.head,to:q(b.head.line+1,0)}:{from:b.head,to:q(b.head.line,c)}}return{from:b.from(),to:b.to()}})},deleteLine:function(a){return eb(a,function(b){return{from:q(b.from().line,
+0),to:x(a.doc,q(b.to().line+1,0))}})},delLineLeft:function(a){return eb(a,function(a){return{from:q(a.from().line,0),to:a.from()}})},delWrappedLineLeft:function(a){return eb(a,function(b){var c=a.charCoords(b.head,"div").top+5;return{from:a.coordsChar({left:0,top:c},"div"),to:b.from()}})},delWrappedLineRight:function(a){return eb(a,function(b){var c=a.charCoords(b.head,"div").top+5,c=a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},"div");return{from:b.from(),to:c}})},undo:function(a){return a.undo()},
+redo:function(a){return a.redo()},undoSelection:function(a){return a.undoSelection()},redoSelection:function(a){return a.redoSelection()},goDocStart:function(a){return a.extendSelection(q(a.firstLine(),0))},goDocEnd:function(a){return a.extendSelection(q(a.lastLine()))},goLineStart:function(a){return a.extendSelectionsBy(function(b){return rf(a,b.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(a){return a.extendSelectionsBy(function(b){return sf(a,b.head)},{origin:"+move",bias:1})},
+goLineEnd:function(a){return a.extendSelectionsBy(function(b){b=b.head.line;for(var c,d=u(a.doc,b);c=Da(d,!1);)d=c.find(1,!0).line,b=null;c=(c=ba(d))?c[0].level%2?ac(d):bc(d):d.text.length;return q(null==b?C(d):b,c)},{origin:"+move",bias:-1})},goLineRight:function(a){return a.extendSelectionsBy(function(b){b=a.charCoords(b.head,"div").top+5;return a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:b},"div")},Pb)},goLineLeft:function(a){return a.extendSelectionsBy(function(b){b=a.charCoords(b.head,
+"div").top+5;return a.coordsChar({left:0,top:b},"div")},Pb)},goLineLeftSmart:function(a){return a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5,c=a.coordsChar({left:0,top:c},"div");return c.ch<a.getLine(c.line).search(/\S/)?sf(a,b.head):c},Pb)},goLineUp:function(a){return a.moveV(-1,"line")},goLineDown:function(a){return a.moveV(1,"line")},goPageUp:function(a){return a.moveV(-1,"page")},goPageDown:function(a){return a.moveV(1,"page")},goCharLeft:function(a){return a.moveH(-1,
+"char")},goCharRight:function(a){return a.moveH(1,"char")},goColumnLeft:function(a){return a.moveH(-1,"column")},goColumnRight:function(a){return a.moveH(1,"column")},goWordLeft:function(a){return a.moveH(-1,"word")},goGroupRight:function(a){return a.moveH(1,"group")},goGroupLeft:function(a){return a.moveH(-1,"group")},goWordRight:function(a){return a.moveH(1,"word")},delCharBefore:function(a){return a.deleteH(-1,"char")},delCharAfter:function(a){return a.deleteH(1,"char")},delWordBefore:function(a){return a.deleteH(-1,
+"word")},delWordAfter:function(a){return a.deleteH(1,"word")},delGroupBefore:function(a){return a.deleteH(-1,"group")},delGroupAfter:function(a){return a.deleteH(1,"group")},indentAuto:function(a){return a.indentSelection("smart")},indentMore:function(a){return a.indentSelection("add")},indentLess:function(a){return a.indentSelection("subtract")},insertTab:function(a){return a.replaceSelection("\t")},insertSoftTab:function(a){for(var b=[],c=a.listSelections(),d=a.options.tabSize,e=0;e<c.length;e++){var f=
+c[e].from(),f=Y(a.getLine(f.line),f.ch,d);b.push(Jc(d-f%d))}a.replaceSelections(b)},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.execCommand("insertTab")},transposeChars:function(a){return W(a,function(){for(var b=a.listSelections(),c=[],d=0;d<b.length;d++)if(b[d].empty()){var e=b[d].head,f=u(a.doc,e.line).text;if(f)if(e.ch==f.length&&(e=new q(e.line,e.ch-1)),0<e.ch)e=new q(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),q(e.line,e.ch-2),e,"+transpose");
+else if(e.line>a.doc.first){var g=u(a.doc,e.line-1).text;g&&(e=new q(e.line,1),a.replaceRange(f.charAt(0)+a.doc.lineSeparator()+g.charAt(g.length-1),q(e.line-1,g.length-1),e,"+transpose"))}c.push(new z(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){return W(a,function(){for(var b=a.listSelections(),c=b.length-1;0<=c;c--)a.replaceRange(a.doc.lineSeparator(),b[c].anchor,b[c].head,"+input");b=a.listSelections();for(c=0;c<b.length;c++)a.indentLine(b[c].from().line,null,!0);Wa(a)})},openLine:function(a){return a.replaceSelection("\n",
+"start")},toggleOverwrite:function(a){return a.toggleOverwrite()}},Ag=new Aa,Fd=null,Cc,Bc,fb={toString:function(){return"CodeMirror.Init"}},Af={},Dc={};D.defaults=Af;D.optionHandlers=Dc;var Jd=[];D.defineInitHook=function(a){return Jd.push(a)};var S=null;Nd.prototype=aa({init:function(a){function b(a){if(!F(e,a)){if(e.somethingSelected())Df({lineWise:!1,text:e.getSelections()}),"cut"==a.type&&e.replaceSelection("",null,"cut");else if(e.options.lineWiseCopyCut){var b=Gf(e);Df({lineWise:!0,text:b.text});
+"cut"==a.type&&e.operation(function(){e.setSelections(b.ranges,0,ka);e.replaceSelection("",null,"cut")})}else return;if(a.clipboardData){a.clipboardData.clearData();var c=S.text.join("\n");a.clipboardData.setData("Text",c);if(a.clipboardData.getData("Text")==c){a.preventDefault();return}}var l=If();a=l.firstChild;e.display.lineSpace.insertBefore(l,e.display.lineSpace.firstChild);a.value=S.text.join("\n");var m=document.activeElement;hb(a);setTimeout(function(){e.display.lineSpace.removeChild(l);m.focus();
+m==f&&d.showPrimarySelection()},50)}}var c=this,d=this,e=d.cm,f=d.div=a.lineDiv;Hf(f,e.options.spellcheck);v(f,"paste",function(a){F(e,a)||Ff(a,e)||11>=A&&setTimeout(G(e,function(){d.pollContent()||N(e)}),20)});v(f,"compositionstart",function(a){c.composing={data:a.data}});v(f,"compositionupdate",function(a){c.composing||(c.composing={data:a.data})});v(f,"compositionend",function(a){c.composing&&(a.data!=c.composing.data&&c.readFromDOMSoon(),c.composing=null)});v(f,"touchstart",function(){return d.forceCompositionEnd()});
+v(f,"input",function(){c.composing||c.readFromDOMSoon()});v(f,"copy",b);v(f,"cut",b)},prepareSelection:function(){var a=Ae(this.cm,!1);a.focus=this.cm.state.focused;return a},showSelection:function(a,b){a&&this.cm.display.view.length&&((a.focus||b)&&this.showPrimarySelection(),this.showMultipleSelections(a))},showPrimarySelection:function(){var a=window.getSelection(),b=this.cm.doc.sel.primary(),c=Ec(this.cm,a.anchorNode,a.anchorOffset),d=Ec(this.cm,a.focusNode,a.focusOffset);if(!c||c.bad||!d||d.bad||
+0!=w(Yb(c,d),b.from())||0!=w(Xb(c,d),b.to()))if(c=Kf(this.cm,b.from()),d=Kf(this.cm,b.to()),c||d){var e=this.cm.display.view,b=a.rangeCount&&a.getRangeAt(0);c?d||(d=e[e.length-1].measure,d=d.maps?d.maps[d.maps.length-1]:d.map,d={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}):c={node:e[0].measure.map[2],offset:0};var f;try{f=Ra(c.node,c.offset,d.offset,d.node)}catch(g){}f&&(!sa&&this.cm.state.focused?(a.collapse(c.node,c.offset),f.collapsed||(a.removeAllRanges(),a.addRange(f))):(a.removeAllRanges(),
+a.addRange(f)),b&&null==a.anchorNode?a.addRange(b):sa&&this.startGracePeriod());this.rememberSelection()}},startGracePeriod:function(){var a=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){a.gracePeriod=!1;a.selectionChanged()&&a.cm.operation(function(){return a.cm.curOp.selectionChanged=!0})},20)},showMultipleSelections:function(a){U(this.cm.display.cursorDiv,a.cursors);U(this.cm.display.selectionDiv,a.selection)},rememberSelection:function(){var a=window.getSelection();
+this.lastAnchorNode=a.anchorNode;this.lastAnchorOffset=a.anchorOffset;this.lastFocusNode=a.focusNode;this.lastFocusOffset=a.focusOffset},selectionInEditor:function(){var a=window.getSelection();if(!a.rangeCount)return!1;a=a.getRangeAt(0).commonAncestorContainer;return Tb(this.div,a)},focus:function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},blur:function(){this.div.blur()},getField:function(){return this.div},
+supportsTouch:function(){return!0},receivedFocus:function(){function a(){b.cm.state.focused&&(b.pollSelection(),b.polling.set(b.cm.options.pollInterval,a))}var b=this;this.selectionInEditor()?this.pollSelection():W(this.cm,function(){return b.cm.curOp.selectionChanged=!0});this.polling.set(this.cm.options.pollInterval,a)},selectionChanged:function(){var a=window.getSelection();return a.anchorNode!=this.lastAnchorNode||a.anchorOffset!=this.lastAnchorOffset||a.focusNode!=this.lastFocusNode||a.focusOffset!=
+this.lastFocusOffset},pollSelection:function(){if(!this.composing&&null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var a=window.getSelection(),b=this.cm;this.rememberSelection();var c=Ec(b,a.anchorNode,a.anchorOffset),d=Ec(b,a.focusNode,a.focusOffset);c&&d&&W(b,function(){K(b.doc,ra(c,d),ka);if(c.bad||d.bad)b.curOp.selectionChanged=!0})}},pollContent:function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var a=this.cm,b=a.display,
+c=a.doc.sel.primary(),d=c.from(),c=c.to();0==d.ch&&d.line>a.firstLine()&&(d=q(d.line-1,u(a.doc,d.line-1).length));c.ch==u(a.doc,c.line).text.length&&c.line<a.lastLine()&&(c=q(c.line+1,0));if(d.line<b.viewFrom||c.line>b.viewTo-1)return!1;var e;d.line==b.viewFrom||0==(e=Ga(a,d.line))?(d=C(b.view[0].line),e=b.view[0].node):(d=C(b.view[e].line),e=b.view[e-1].node.nextSibling);var f=Ga(a,c.line);f==b.view.length-1?(c=b.viewTo-1,b=b.lineDiv.lastChild):(c=C(b.view[f+1].line)-1,b=b.view[f+1].node.previousSibling);
+if(!e)return!1;b=a.doc.splitLines(Mg(a,e,b,d,c));for(e=Ba(a.doc,q(d,0),q(c,u(a.doc,c).text.length));1<b.length&&1<e.length;)if(y(b)==y(e))b.pop(),e.pop(),c--;else if(b[0]==e[0])b.shift(),e.shift(),d++;else break;for(var g=0,f=0,h=b[0],k=e[0],l=Math.min(h.length,k.length);g<l&&h.charCodeAt(g)==k.charCodeAt(g);)++g;h=y(b);k=y(e);for(l=Math.min(h.length-(1==b.length?g:0),k.length-(1==e.length?g:0));f<l&&h.charCodeAt(h.length-f-1)==k.charCodeAt(k.length-f-1);)++f;b[b.length-1]=h.slice(0,h.length-f).replace(/^\u200b+/,
+"");b[0]=b[0].slice(g).replace(/\u200b+$/,"");d=q(d,g);c=q(c,e.length?y(e).length-f:0);if(1<b.length||b[0]||w(d,c))return bb(a.doc,b,d,c,"+input"),!0},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){this.composing&&(this.composing=null,this.pollContent()||N(this.cm),this.div.blur(),this.div.focus())},readFromDOMSoon:function(){var a=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=
+null;a.composing||!a.cm.isReadOnly()&&a.pollContent()||W(a.cm,function(){return N(a.cm)})},80))},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault();this.cm.isReadOnly()||G(this.cm,Kd)(this.cm,String.fromCharCode(null==a.charCode?a.keyCode:a.charCode),0)},readOnlyChanged:function(a){this.div.contentEditable=String("nocursor"!=a)},onContextMenu:ib,resetPosition:ib,needsContentAttribute:!0},Nd.prototype);Od.prototype=aa({init:function(a){function b(a){if(!F(e,
+a)){if(e.somethingSelected())S={lineWise:!1,text:e.getSelections()},d.inaccurateSelection&&(d.prevInput="",d.inaccurateSelection=!1,g.value=S.text.join("\n"),hb(g));else if(e.options.lineWiseCopyCut){var b=Gf(e);S={lineWise:!0,text:b.text};"cut"==a.type?e.setSelections(b.ranges,null,ka):(d.prevInput="",g.value=b.text.join("\n"),hb(g))}else return;"cut"==a.type&&(e.state.cutIncoming=!0)}}var c=this,d=this,e=this.cm,f=this.wrapper=If(),g=this.textarea=f.firstChild;a.wrapper.insertBefore(f,a.wrapper.firstChild);
+Ob&&(g.style.width="0px");v(g,"input",function(){B&&9<=A&&c.hasSelection&&(c.hasSelection=null);d.poll()});v(g,"paste",function(a){F(e,a)||Ff(a,e)||(e.state.pasteIncoming=!0,d.fastPoll())});v(g,"cut",b);v(g,"copy",b);v(a.scroller,"paste",function(b){oa(a,b)||F(e,b)||(e.state.pasteIncoming=!0,d.focus())});v(a.lineSpace,"selectstart",function(b){oa(a,b)||L(b)});v(g,"compositionstart",function(){var a=e.getCursor("from");d.composing&&d.composing.range.clear();d.composing={start:a,range:e.markText(a,
+e.getCursor("to"),{className:"CodeMirror-composing"})}});v(g,"compositionend",function(){d.composing&&(d.poll(),d.composing.range.clear(),d.composing=null)})},prepareSelection:function(){var a=this.cm,b=a.display,c=a.doc,d=Ae(a);if(a.options.moveInputWithCursor){var a=pa(a,c.sel.primary().head,"div"),c=b.wrapper.getBoundingClientRect(),e=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,a.top+e.top-c.top));d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,
+a.left+e.left-c.left))}return d},showSelection:function(a){var b=this.cm.display;U(b.cursorDiv,a.cursors);U(b.selectionDiv,a.selection);null!=a.teTop&&(this.wrapper.style.top=a.teTop+"px",this.wrapper.style.left=a.teLeft+"px")},reset:function(a){if(!this.contextMenuPending){var b,c,d=this.cm,e=d.doc;d.somethingSelected()?(this.prevInput="",b=e.sel.primary(),c=(b=vf&&(100<b.to().line-b.from().line||1E3<(c=d.getSelection()).length))?"-":c||d.getSelection(),this.textarea.value=c,d.state.focused&&hb(this.textarea),
+B&&9<=A&&(this.hasSelection=c)):a||(this.prevInput=this.textarea.value="",B&&9<=A&&(this.hasSelection=null));this.inaccurateSelection=b}},getField:function(){return this.textarea},supportsTouch:function(){return!1},focus:function(){if("nocursor"!=this.cm.options.readOnly&&(!kb||la()!=this.textarea))try{this.textarea.focus()}catch(a){}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=
+this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){a.poll();a.cm.state.focused&&a.slowPoll()})},fastPoll:function(){function a(){c.poll()||b?(c.pollingFast=!1,c.slowPoll()):(b=!0,c.polling.set(60,a))}var b=!1,c=this;c.pollingFast=!0;c.polling.set(20,a)},poll:function(){var a=this,b=this.cm,c=this.textarea,d=this.prevInput;if(this.contextMenuPending||!b.state.focused||Sg(c)&&!d&&!this.composing||b.isReadOnly()||b.options.disableInput||b.state.keySeq)return!1;var e=c.value;
+if(e==d&&!b.somethingSelected())return!1;if(B&&9<=A&&this.hasSelection===e||da&&/[\uf700-\uf7ff]/.test(e))return b.display.input.reset(),!1;if(b.doc.sel==b.display.selForContextMenu){var f=e.charCodeAt(0);8203!=f||d||(d="​");if(8666==f)return this.reset(),this.cm.execCommand("undo")}for(var g=0,f=Math.min(d.length,e.length);g<f&&d.charCodeAt(g)==e.charCodeAt(g);)++g;W(b,function(){Kd(b,e.slice(g),d.length-g,null,a.composing?"*compose":null);1E3<e.length||-1<e.indexOf("\n")?c.value=a.prevInput="":
+a.prevInput=e;a.composing&&(a.composing.range.clear(),a.composing.range=b.markText(a.composing.start,b.getCursor("to"),{className:"CodeMirror-composing"}))});return!0},ensurePolled:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},onKeyPress:function(){B&&9<=A&&(this.hasSelection=null);this.fastPoll()},onContextMenu:function(a){function b(){if(null!=g.selectionStart){var a=e.somethingSelected(),b="​"+(a?g.value:"");g.value="⇚";g.value=b;d.prevInput=a?"":"​";g.selectionStart=1;g.selectionEnd=
+b.length;f.selForContextMenu=e.doc.sel}}function c(){d.contextMenuPending=!1;d.wrapper.style.cssText=m;g.style.cssText=l;B&&9>A&&f.scrollbars.setScrollTop(f.scroller.scrollTop=k);if(null!=g.selectionStart){(!B||B&&9>A)&&b();var a=0,c=function(){f.selForContextMenu==e.doc.sel&&0==g.selectionStart&&0<g.selectionEnd&&"​"==d.prevInput?G(e,af)(e):10>a++?f.detectingSelectAll=setTimeout(c,500):f.input.reset()};f.detectingSelectAll=setTimeout(c,200)}}var d=this,e=d.cm,f=e.display,g=d.textarea,h=Ja(e,a),k=
+f.scroller.scrollTop;if(h&&!ea){e.options.resetSelectionOnContextMenu&&-1==e.doc.sel.contains(h)&&G(e,K)(e.doc,ra(h),ka);var l=g.style.cssText,m=d.wrapper.style.cssText;d.wrapper.style.cssText="position: absolute";h=d.wrapper.getBoundingClientRect();g.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(a.clientY-h.top-5)+"px; left: "+(a.clientX-h.left-5)+"px;\n      z-index: 1000; background: "+(B?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity\x3d5);";
+var n;I&&(n=window.scrollY);f.input.focus();I&&window.scrollTo(null,n);f.input.reset();e.somethingSelected()||(g.value=d.prevInput=" ");d.contextMenuPending=!0;f.selForContextMenu=e.doc.sel;clearTimeout(f.detectingSelectAll);B&&9<=A&&b();if(Hd){ob(a);var p=function(){ca(window,"mouseup",p);setTimeout(c,20)};v(window,"mouseup",p)}else setTimeout(c,50)}},readOnlyChanged:function(a){a||this.reset()},setUneditable:ib,needsContentAttribute:!1},Od.prototype);(function(a){function b(b,e,f,g){a.defaults[b]=
+e;f&&(c[b]=g?function(a,b,d){d!=fb&&f(a,b,d)}:f)}var c=a.optionHandlers;a.defineOption=b;a.Init=fb;b("value","",function(a,b){return a.setValue(b)},!0);b("mode",null,function(a,b){a.doc.modeOption=b;zd(a)},!0);b("indentUnit",2,zd,!0);b("indentWithTabs",!1);b("smartIndent",!0);b("tabSize",4,function(a){Db(a);xb(a);N(a)},!0);b("lineSeparator",null,function(a,b){if(a.doc.lineSep=b){var c=[],g=a.doc.first;a.doc.iter(function(a){for(var d=0;;){var h=a.text.indexOf(b,d);if(-1==h)break;d=h+b.length;c.push(q(g,
+h))}g++});for(var h=c.length-1;0<=h;h--)bb(a.doc,b,c[h],q(c[h].line,c[h].ch+b.length))}});b("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b,c){a.state.specialChars=new RegExp(b.source+(b.test("\t")?"":"|\t"),"g");c!=fb&&a.refresh()});b("specialCharPlaceholder",cg,function(a){return a.refresh()},!0);b("electricChars",!0);b("inputStyle",kb?"contenteditable":"textarea",function(){throw Error("inputStyle can not (yet) be changed in a running editor");},!0);b("spellcheck",
+!1,function(a,b){return a.getInputField().spellcheck=b},!0);b("rtlMoveVisually",!Rg);b("wholeLineUpdateBefore",!0);b("theme","default",function(a){zf(a);Mb(a)},!0);b("keyMap","default",function(a,b,c){b=xc(b);(c=c!=fb&&xc(c))&&c.detach&&c.detach(a,b);b.attach&&b.attach(a,c||null)});b("extraKeys",null);b("lineWrapping",!1,Kg,!0);b("gutters",[],function(a){xd(a.options);Mb(a)},!0);b("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?ld(a.display)+"px":"0";a.refresh()},!0);b("coverGutterNextToScrollbar",
+!1,function(a){return Va(a)},!0);b("scrollbarStyle","native",function(a){Ie(a);Va(a);a.display.scrollbars.setScrollTop(a.doc.scrollTop);a.display.scrollbars.setScrollLeft(a.doc.scrollLeft)},!0);b("lineNumbers",!1,function(a){xd(a.options);Mb(a)},!0);b("firstLineNumber",1,Mb,!0);b("lineNumberFormatter",function(a){return a},Mb,!0);b("showCursorWhenSelecting",!1,yb,!0);b("resetSelectionOnContextMenu",!0);b("lineWiseCopyCut",!0);b("readOnly",!1,function(a,b){"nocursor"==b?(zb(a),a.display.input.blur(),
+a.display.disabled=!0):a.display.disabled=!1;a.display.input.readOnlyChanged(b)});b("disableInput",!1,function(a,b){b||a.display.input.reset()},!0);b("dragDrop",!0,Jg);b("allowDropFileTypes",null);b("cursorBlinkRate",530);b("cursorScrollMargin",0);b("cursorHeight",1,yb,!0);b("singleCursorHeightPerLine",!0,yb,!0);b("workTime",100);b("workDelay",100);b("flattenSpans",!0,Db,!0);b("addModeClass",!1,Db,!0);b("pollInterval",100);b("undoDepth",200,function(a,b){return a.doc.history.undoDepth=b});b("historyEventDelay",
+1250);b("viewportMargin",10,function(a){return a.refresh()},!0);b("maxHighlightLength",1E4,Db,!0);b("moveInputWithCursor",!0,function(a,b){b||a.display.input.resetPosition()});b("tabindex",null,function(a,b){return a.display.input.getField().tabIndex=b||""});b("autofocus",null)})(D);(function(a){var b=a.optionHandlers,c=a.helpers={};a.prototype={constructor:a,focus:function(){window.focus();this.display.input.focus()},setOption:function(a,c){var f=this.options,g=f[a];if(f[a]!=c||"mode"==a)f[a]=c,
+b.hasOwnProperty(a)&&G(this,b[a])(this,c,g)},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](xc(a))},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||b[c].name==a)return b.splice(c,1),!0},addOverlay:O(function(b,c){var f=b.token?b:a.getMode(this.options,b);if(f.startState)throw Error("Overlays may not be stateful.");Of(this.state.overlays,{mode:f,modeSpec:b,opaque:c&&
+c.opaque,priority:c&&c.priority||0},function(a){return a.priority});this.state.modeGen++;N(this)}),removeOverlay:O(function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var g=b[c].modeSpec;if(g==a||"string"==typeof a&&g.name==a){b.splice(c,1);this.state.modeGen++;N(this);break}}}),indentLine:O(function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract");lb(this.doc,a)&&Nb(this,a,b,c)}),indentSelection:O(function(a){for(var b=
+this.doc.sel.ranges,c=-1,g=0;g<b.length;g++){var h=b[g];if(h.empty())h.head.line>c&&(Nb(this,h.head.line,a,!0),c=h.head.line,g==this.doc.sel.primIndex&&Wa(this));else{for(var k=h.from(),h=h.to(),l=Math.max(c,k.line),c=Math.min(this.lastLine(),h.line-(h.ch?0:1))+1,h=l;h<c;++h)Nb(this,h,a);h=this.doc.sel.ranges;0==k.ch&&b.length==h.length&&0<h[g].from().ch&&Cd(this.doc,g,new z(k,h[g].to()),ka)}}}),getTokenAt:function(a,b){return ge(this,a,b)},getLineTokens:function(a,b){return ge(this,q(a),b,!0)},getTokenTypeAt:function(a){a=
+x(this.doc,a);var b=ee(this,u(this.doc,a.line)),c=0,g=(b.length-1)/2;a=a.ch;if(0==a)b=b[2];else for(;;){var h=c+g>>1;if((h?b[2*h-1]:0)>=a)g=h;else if(b[2*h+1]<a)c=h+1;else{b=b[2*h+2];break}}c=b?b.indexOf("overlay "):-1;return 0>c?b:0==c?null:b.slice(0,c-1)},getModeAt:function(b){var c=this.doc.mode;return c.innerMode?a.innerMode(c,this.getTokenAt(b).state).mode:c},getHelper:function(a,b){return this.getHelpers(a,b)[0]},getHelpers:function(a,b){var f=[];if(!c.hasOwnProperty(b))return f;var g=c[b],
+h=this.getModeAt(a);if("string"==typeof h[b])g[h[b]]&&f.push(g[h[b]]);else if(h[b])for(var k=0;k<h[b].length;k++){var l=g[h[b][k]];l&&f.push(l)}else h.helperType&&g[h.helperType]?f.push(g[h.helperType]):g[h.name]&&f.push(g[h.name]);for(k=0;k<g._global.length;k++)l=g._global[k],l.pred(h,this)&&-1==H(f,l.val)&&f.push(l.val);return f},getStateAfter:function(a,b){var c=this.doc;a=Math.max(c.first,Math.min(null==a?c.first+c.size-1:a,c.first+c.size-1));return pb(this,a+1,b)},cursorCoords:function(a,b){var c;
+c=this.doc.sel.primary();c=null==a?c.head:"object"==typeof a?x(this.doc,a):a?c.from():c.to();return pa(this,c,b||"page")},charCoords:function(a,b){return jc(this,x(this.doc,a),b||"page")},coordsChar:function(a,b){a=xe(this,a,b||"page");return kd(this,a.left,a.top)},lineAtHeight:function(a,b){a=xe(this,{top:a,left:0},b||"page").top;return Ca(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b,c){var g=!1;if("number"==typeof a){var h=this.doc.first+this.doc.size-1;a<this.doc.first?a=this.doc.first:
+a>h&&(a=h,g=!0);a=u(this.doc,a)}return jd(this,a,{top:0,left:0},b||"page",c).top+(g?this.doc.height-ia(a):0)},defaultTextHeight:function(){return Ha(this.display)},defaultCharWidth:function(){return wb(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,g,h){var k=this.display;a=pa(this,x(this.doc,a));var l=a.bottom,m=a.left;b.style.position="absolute";b.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(b);
+k.sizer.appendChild(b);if("over"==g)l=a.top;else if("above"==g||"near"==g){var n=Math.max(k.wrapper.clientHeight,this.doc.height),p=Math.max(k.sizer.clientWidth,k.lineSpace.clientWidth);("above"==g||a.bottom+b.offsetHeight>n)&&a.top>b.offsetHeight?l=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=n&&(l=a.bottom);m+b.offsetWidth>p&&(m=p-b.offsetWidth)}b.style.top=l+"px";b.style.left=b.style.right="";"right"==h?(m=k.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==h?m=0:"middle"==h&&(m=(k.sizer.clientWidth-
+b.offsetWidth)/2),b.style.left=m+"px");c&&(a=nc(this,m,l,m+b.offsetWidth,l+b.offsetHeight),null!=a.scrollTop&&Ab(this,a.scrollTop),null!=a.scrollLeft&&Ua(this,a.scrollLeft))},triggerOnKeyDown:O(uf),triggerOnKeyPress:O(xf),triggerOnKeyUp:wf,execCommand:function(a){if(zc.hasOwnProperty(a))return zc[a].call(null,this)},triggerElectric:O(function(a){Ef(this,a)}),findPosH:function(a,b,c,g){var h=1;0>b&&(h=-1,b=-b);a=x(this.doc,a);for(var k=0;k<b&&(a=Md(this.doc,a,h,c,g),!a.hitSide);++k);return a},moveH:O(function(a,
+b){var c=this;this.extendSelectionsBy(function(g){return c.display.shift||c.doc.extend||g.empty()?Md(c.doc,g.head,a,b,c.options.rtlMoveVisually):0>a?g.from():g.to()},Pb)}),deleteH:O(function(a,b){var c=this.doc;this.doc.sel.somethingSelected()?c.replaceSelection("",null,"+delete"):eb(this,function(g){var h=Md(c,g.head,a,b,!1);return 0>a?{from:h,to:g.head}:{from:g.head,to:h}})}),findPosV:function(a,b,c,g){var h=1;0>b&&(h=-1,b=-b);var k=x(this.doc,a);for(a=0;a<b&&(k=pa(this,k,"div"),null==g?g=k.left:
+k.left=g,k=Jf(this,k,h,c),!k.hitSide);++a);return k},moveV:O(function(a,b){var c=this,g=this.doc,h=[],k=!this.display.shift&&!g.extend&&g.sel.somethingSelected();g.extendSelectionsBy(function(l){if(k)return 0>a?l.from():l.to();var n=pa(c,l.head,"div");null!=l.goalColumn&&(n.left=l.goalColumn);h.push(n.left);var p=Jf(c,n,a,b);"page"==b&&l==g.sel.primary()&&oc(c,null,jc(c,p,"div").top-n.top);return p},Pb);if(h.length)for(var l=0;l<g.sel.ranges.length;l++)g.sel.ranges[l].goalColumn=h[l]}),findWordAt:function(a){var b=
+u(this.doc,a.line).text,c=a.ch,g=a.ch;if(b){var h=this.getHelper(a,"wordChars");(0>a.xRel||g==b.length)&&c?--c:++g;for(var k=b.charAt(c),k=Wb(k,h)?function(a){return Wb(a,h)}:/\s/.test(k)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!Wb(a)};0<c&&k(b.charAt(c-1));)--c;for(;g<b.length&&k(b.charAt(g));)++g}return new z(q(a.line,c),q(a.line,g))},toggleOverwrite:function(a){if(null==a||a!=this.state.overwrite)(this.state.overwrite=!this.state.overwrite)?Ma(this.display.cursorDiv,"CodeMirror-overwrite"):
+Ta(this.display.cursorDiv,"CodeMirror-overwrite"),E(this,"overwriteToggle",this,this.state.overwrite)},hasFocus:function(){return this.display.input.getField()==la()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:O(function(a,b){null==a&&null==b||pc(this);null!=a&&(this.curOp.scrollLeft=a);null!=b&&(this.curOp.scrollTop=b)}),getScrollInfo:function(){var a=this.display.scroller;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-ja(this)-this.display.barHeight,
+width:a.scrollWidth-ja(this)-this.display.barWidth,clientHeight:fd(this),clientWidth:Fa(this)}},scrollIntoView:O(function(a,b){null==a?(a={from:this.doc.sel.primary().head,to:null},null==b&&(b=this.options.cursorScrollMargin)):"number"==typeof a?a={from:q(a,0),to:null}:null==a.from&&(a={from:a,to:null});a.to||(a.to=a.from);a.margin=b||0;if(null!=a.from.line)pc(this),this.curOp.scrollToPos=a;else{var c=nc(this,Math.min(a.from.left,a.to.left),Math.min(a.from.top,a.to.top)-a.margin,Math.max(a.from.right,
+a.to.right),Math.max(a.from.bottom,a.to.bottom)+a.margin);this.scrollTo(c.scrollLeft,c.scrollTop)}}),setSize:O(function(a,b){var c=this,g=function(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a};null!=a&&(this.display.wrapper.style.width=g(a));null!=b&&(this.display.wrapper.style.height=g(b));this.options.lineWrapping&&we(this);var h=this.display.viewFrom;this.doc.iter(h,this.display.viewTo,function(a){if(a.widgets)for(var b=0;b<a.widgets.length;b++)if(a.widgets[b].noHScroll){va(c,
+h,"widget");break}++h});this.curOp.forceUpdate=!0;E(this,"refresh",this)}),operation:function(a){return W(this,a)},refresh:O(function(){var a=this.display.cachedTextHeight;N(this);this.curOp.forceUpdate=!0;xb(this);this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop);qd(this);(null==a||.5<Math.abs(a-Ha(this.display)))&&md(this);E(this,"refresh",this)}),swapDoc:O(function(a){var b=this.doc;b.cm=null;Qe(this,a);xb(this);this.display.input.reset();this.scrollTo(a.scrollLeft,a.scrollTop);this.curOp.forceScroll=
+!0;R(this,"swapDoc",this,b);return b}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};Na(a);a.registerHelper=function(b,e,f){c.hasOwnProperty(b)||(c[b]=a[b]={_global:[]});c[b][e]=f};a.registerGlobalHelper=function(b,e,f,g){a.registerHelper(b,e,g);c[b]._global.push({pred:f,val:g})}})(D);var Ug="iter insert remove copy getEditor constructor".split(" "),
+Sb;for(Sb in P.prototype)P.prototype.hasOwnProperty(Sb)&&0>H(Ug,Sb)&&(D.prototype[Sb]=function(a){return function(){return a.apply(this.doc,arguments)}}(P.prototype[Sb]));Na(P);D.inputStyles={textarea:Od,contenteditable:Nd};D.defineMode=function(a){D.defaults.mode||"null"==a||(D.defaults.mode=a);Wf.apply(this,arguments)};D.defineMIME=function(a,b){Oa[a]=b};D.defineMode("null",function(){return{token:function(a){return a.skipToEnd()}}});D.defineMIME("text/plain","null");D.defineExtension=function(a,
+b){D.prototype[a]=b};D.defineDocExtension=function(a,b){P.prototype[a]=b};D.fromTextArea=function(a,b){function c(){a.value=k.getValue()}b=b?aa(b):{};b.value=a.value;!b.tabindex&&a.tabIndex&&(b.tabindex=a.tabIndex);!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder);if(null==b.autofocus){var d=la();b.autofocus=d==a||null!=a.getAttribute("autofocus")&&d==document.body}var e;if(a.form&&(v(a.form,"submit",c),!b.leaveSubmitMethodAlone)){var f=a.form;e=f.submit;try{var g=f.submit=function(){c();
+f.submit=e;f.submit();f.submit=g}}catch(h){}}b.finishInit=function(b){b.save=c;b.getTextArea=function(){return a};b.toTextArea=function(){b.toTextArea=isNaN;c();a.parentNode.removeChild(b.getWrapperElement());a.style.display="";a.form&&(ca(a.form,"submit",c),"function"==typeof a.form.submit&&(a.form.submit=e))}};a.style.display="none";var k=D(function(b){return a.parentNode.insertBefore(b,a.nextSibling)},b);return k};(function(a){a.off=ca;a.on=v;a.wheelEventPixels=jg;a.Doc=P;a.splitLines=Ld;a.countColumn=
+Y;a.findColumn=Ic;a.isWordChar=Kc;a.Pass=Ed;a.signal=E;a.Line=Qa;a.changeEnd=wa;a.scrollbarModel=Je;a.Pos=q;a.cmpPos=w;a.modes=Yc;a.mimeModes=Oa;a.resolveMode=ec;a.getMode=Zc;a.modeExtensions=Pa;a.extendMode=Xf;a.copyState=ma;a.startState=be;a.innerMode=$c;a.commands=zc;a.keyMap=Lb;a.keyName=pf;a.isModifierKey=of;a.lookupKey=db;a.normalizeKeyMap=yg;a.StringStream=qb;a.SharedTextMarker=Kb;a.TextMarker=xa;a.LineWidget=Jb;a.e_preventDefault=L;a.e_stopPropagation=$d;a.e_stop=ob;a.addClass=Ma;a.contains=
+Tb;a.rmClass=Ta;a.keyNames=ya})(D);D.version="5.21.0";return D});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcode.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcode.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcode.min.js	(revision 2)
@@ -0,0 +1,4 @@
+﻿CodeMirror.defineMode("bbcode",function(h){var k,l,m;k="b i u s img quote code list table  tr td size color url";l="* :-) hr cut";h.hasOwnProperty("bbCodeTags")&&(k=h.bbCodeTags);h.hasOwnProperty("bbCodeUnaryTags")&&(l=h.bbCodeUnaryTags);var c={cont:function(a,b){m=b;return a},escapeRegEx:function(a){return a.replace(/([\:\-\)\(\*\+\?\[\]])/g,"\\$1")}},n=/[a-zA-Z0-9_]/,p=/['"]/,q=new RegExp("(?:"+c.escapeRegEx(k).split(" ").join("|")+")"),r=new RegExp("(?:"+c.escapeRegEx(l).split(" ").join("|")+")"),
+f={tokenizer:function(a,b){if(a.eatSpace())return null;if(a.match("[",!0))return b.tokenize=f.bbcode,c.cont("tag","startTag");a.next();return null},inAttribute:function(a){return function(b,c){for(var d=null,g=null;!b.eol();){g=b.peek();if(b.next()==a&&"\\"!==d){c.tokenize=f.bbcode;break}d=g}return"string"}},bbcode:function(a,b){if(a.match("]",!0))return b.tokenize=f.tokenizer,c.cont("tag",null);if(a.match("[",!0))return c.cont("tag","startTag");var e=a.next();if(p.test(e))return b.tokenize=f.inAttribute(e),
+c.cont("string","string");if(/\d/.test(e))return a.eatWhile(/\d/),c.cont("number","number");if("whitespace"==b.last)return a.eatWhile(n),c.cont("attribute","modifier");if("property"==b.last)return a.eatWhile(n),c.cont("property",null);if(/\s/.test(e))return m="whitespace",null;var d="";"/"!=e&&(d+=e);for(var g=null;g=a.eat(n);)d+=g;return r.test(d)?c.cont("atom","atom"):q.test(d)?c.cont("keyword","keyword"):/\s/.test(e)?null:c.cont("tag","tag")}};return{startState:function(){return{tokenize:f.tokenizer,
+mode:"bbcode",last:null}},token:function(a,b){var c=b.tokenize(a,b);b.last=m;return c},electricChars:""}});CodeMirror.defineMIME("text/x-bbcode","bbcode");
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js	(revision 2)
@@ -0,0 +1,4 @@
+﻿CodeMirror.defineMode("bbcode",function(h){var k,l,m;k="b i u s img quote code list table  tr td size color url";l="* :-) hr cut";h.hasOwnProperty("bbCodeTags")&&(k=h.bbCodeTags);h.hasOwnProperty("bbCodeUnaryTags")&&(l=h.bbCodeUnaryTags);var c={cont:function(a,b){m=b;return a},escapeRegEx:function(a){return a.replace(/([\:\-\)\(\*\+\?\[\]])/g,"\\$1")}},n=/[a-zA-Z0-9_]/,p=/['"]/,q=new RegExp("(?:"+c.escapeRegEx(k).split(" ").join("|")+")"),r=new RegExp("(?:"+c.escapeRegEx(l).split(" ").join("|")+")"),
+f={tokenizer:function(a,b){if(a.eatSpace())return null;if(a.match("[",!0))return b.tokenize=f.bbcode,c.cont("tag","startTag");a.next();return null},inAttribute:function(a){return function(b,c){for(var d=null,g=null;!b.eol();){g=b.peek();if(b.next()==a&&"\\"!==d){c.tokenize=f.bbcode;break}d=g}return"string"}},bbcode:function(a,b){if(a.match("]",!0))return b.tokenize=f.tokenizer,c.cont("tag",null);if(a.match("[",!0))return c.cont("tag","startTag");var e=a.next();if(p.test(e))return b.tokenize=f.inAttribute(e),
+c.cont("string","string");if(/\d/.test(e))return a.eatWhile(/\d/),c.cont("number","number");if("whitespace"==b.last)return a.eatWhile(n),c.cont("attribute","modifier");if("property"==b.last)return a.eatWhile(n),c.cont("property",null);if(/\s/.test(e))return m="whitespace",null;var d="";"/"!=e&&(d+=e);for(var g=null;g=a.eat(n);)d+=g;return r.test(d)?c.cont("atom","atom"):q.test(d)?c.cont("keyword","keyword"):/\s/.test(e)?null:c.cont("tag","tag")}};return{startState:function(){return{tokenize:f.tokenizer,
+mode:"bbcode",last:null}},token:function(a,b){var c=b.tokenize(a,b);b.last=m;return c},electricChars:""}});CodeMirror.defineMIME("text/x-bbcode","bbcode");
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],g):g(CodeMirror)})(function(g){var v={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,
+dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,
+caseFold:!0},y={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};g.defineMode("xml",function(q,r){function A(a,f){function d(d){f.tokenize=d;return d(a,f)}var g=a.next();if("\x3c"==g){if(a.eat("!"))return a.eat("[")?a.match("CDATA[")?d(H("atom","]]\x3e")):null:a.match("--")?d(H("comment","--\x3e")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),d(F(1))):null;if(a.eat("?"))return a.eatWhile(/[\w\._\-]/),f.tokenize=H("meta","?\x3e"),
+"meta";J=a.eat("/")?"closeTag":"openTag";f.tokenize=I;return"tag bracket"}if("\x26"==g)return(a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"))?"atom":"error";a.eatWhile(/[^&<]/);return null}function I(a,f){var d=a.next();if("\x3e"==d||"/"==d&&a.eat("\x3e"))return f.tokenize=A,J="\x3e"==d?"endTag":"selfcloseTag","tag bracket";if("\x3d"==d)return J="equals",null;if("\x3c"==d)return f.tokenize=A,f.state=C,f.tagName=f.tagStart=
+null,(d=f.tokenize(a,f))?d+" tag error":"tag error";if(/[\'\"]/.test(d))return f.tokenize=M(d),f.stringStartCol=a.column(),f.tokenize(a,f);a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);return"word"}function M(a){var f=function(d,f){for(;!d.eol();)if(d.next()==a){f.tokenize=I;break}return"string"};f.isInAttribute=!0;return f}function H(a,f){return function(d,g){for(;!d.eol();){if(d.match(f)){g.tokenize=A;break}d.next()}return a}}function F(a){return function(f,d){for(var g;null!=(g=f.next());){if("\x3c"==
+g)return d.tokenize=F(a+1),d.tokenize(f,d);if("\x3e"==g)if(1==a){d.tokenize=A;break}else return d.tokenize=F(a-1),d.tokenize(f,d)}return"meta"}}function z(a,f,d){this.prev=a.context;this.tagName=f;this.indent=a.indented;this.startOfLine=d;if(E.doNotIndent.hasOwnProperty(f)||a.context&&a.context.noIndent)this.noIndent=!0}function h(a){a.context&&(a.context=a.context.prev)}function a(a,f){for(var d;a.context;){d=a.context.tagName;if(!E.contextGrabbers.hasOwnProperty(d)||!E.contextGrabbers[d].hasOwnProperty(f))break;
+h(a)}}function C(a,f,d){return"openTag"==a?(d.tagStart=f.column(),G):"closeTag"==a?w:C}function G(a,f,d){if("word"==a)return d.tagName=f.current(),B="tag",k;B="error";return G}function w(a,f,d){if("word"==a){a=f.current();d.context&&d.context.tagName!=a&&E.implicitlyClosed.hasOwnProperty(d.context.tagName)&&h(d);if(d.context&&d.context.tagName==a||!1===E.matchClosing)return B="tag",u;B="tag error";return n}B="error";return n}function u(a,f,d){if("endTag"!=a)return B="error",u;h(d);return C}function n(a,
+f,d){B="error";return u(a,f,d)}function k(g,f,d){if("word"==g)return B="attribute",D;if("endTag"==g||"selfcloseTag"==g){f=d.tagName;var t=d.tagStart;d.tagName=d.tagStart=null;"selfcloseTag"==g||E.autoSelfClosers.hasOwnProperty(f)?a(d,f):(a(d,f),d.context=new z(d,f,t==d.indented));return C}B="error";return k}function D(a,f,d){if("equals"==a)return m;E.allowMissing||(B="error");return k(a,f,d)}function m(a,f,d){if("string"==a)return t;if("word"==a&&E.allowUnquoted)return B="string",k;B="error";return k(a,
+f,d)}function t(a,f,d){return"string"==a?t:k(a,f,d)}var Q=q.indentUnit,E={},T=r.htmlMode?v:y,N;for(N in T)E[N]=T[N];for(N in r)E[N]=r[N];var J,B;A.isInText=!0;return{startState:function(a){var f={tokenize:A,state:C,indented:a||0,tagName:null,tagStart:null,context:null};null!=a&&(f.baseIndent=a);return f},token:function(a,f){!f.tagName&&a.sol()&&(f.indented=a.indentation());if(a.eatSpace())return null;J=null;var d=f.tokenize(a,f);(d||J)&&"comment"!=d&&(B=null,f.state=f.state(J||d,a,f),B&&(d="error"==
+B?d+" error":B));return d},indent:function(a,f,d){var t=a.context;if(a.tokenize.isInAttribute)return a.tagStart==a.indented?a.stringStartCol+1:a.indented+Q;if(t&&t.noIndent)return g.Pass;if(a.tokenize!=I&&a.tokenize!=A)return d?d.match(/^(\s*)/)[0].length:0;if(a.tagName)return!1!==E.multilineTagIndentPastTag?a.tagStart+a.tagName.length+2:a.tagStart+Q*(E.multilineTagIndentFactor||1);if(E.alignCDATA&&/<!\[CDATA\[/.test(f))return 0;if((f=f&&/^<(\/)?([\w_:\.-]*)/.exec(f))&&f[1])for(;t;)if(t.tagName==
+f[2]){t=t.prev;break}else if(E.implicitlyClosed.hasOwnProperty(t.tagName))t=t.prev;else break;else if(f)for(;t;)if((d=E.contextGrabbers[t.tagName])&&d.hasOwnProperty(f[2]))t=t.prev;else break;for(;t&&t.prev&&!t.startOfLine;)t=t.prev;return t?t.indent+Q:a.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:E.htmlMode?"html":"xml",helperType:E.htmlMode?"html":"xml",skipAttribute:function(a){a.state==m&&(a.state=k)}}});g.defineMIME("text/xml",
+"xml");g.defineMIME("application/xml","xml");g.mimeModes.hasOwnProperty("text/html")||g.defineMIME("text/html",{name:"xml",htmlMode:!0})});
+(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],g):g(CodeMirror)})(function(g){function v(g,q,r){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(q.lastType)||"quasi"==q.lastType&&/\{\s*$/.test(g.string.slice(0,g.pos-(r||0)))}g.defineMode("javascript",function(y,q){function r(e,a,b){Z=e;da=b;return a}function A(e,a){var b=e.next();if('"'==b||"'"==b)return a.tokenize=
+I(b),a.tokenize(e,a);if("."==b&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return r("number","number");if("."==b&&e.match(".."))return r("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(b))return r(b);if("\x3d"==b&&e.eat("\x3e"))return r("\x3d\x3e","operator");if("0"==b&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),r("number","number");if("0"==b&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),r("number","number");if("0"==b&&e.eat(/b/i))return e.eatWhile(/[01]/i),r("number","number");if(/\d/.test(b))return e.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),
+r("number","number");if("/"==b){if(e.eat("*"))return a.tokenize=M,M(e,a);if(e.eat("/"))return e.skipToEnd(),r("comment","comment");if(v(e,a,1)){a:for(var b=!1,c,d=!1;null!=(c=e.next());){if(!b){if("/"==c&&!d)break a;"["==c?d=!0:d&&"]"==c&&(d=!1)}b=!b&&"\\"==c}e.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);return r("regexp","string-2")}e.eatWhile(ea);return r("operator","operator",e.current())}if("`"==b)return a.tokenize=H,H(e,a);if("#"==b)return e.skipToEnd(),r("error","error");if(ea.test(b))return e.eatWhile(ea),
+r("operator","operator",e.current());if(ja.test(b))return e.eatWhile(ja),b=e.current(),(c=pa.propertyIsEnumerable(b)&&pa[b])&&"."!=a.lastType?r(c.type,c.style,b):r("variable","variable",b)}function I(e){return function(a,b){var c=!1,d;if(fa&&"@"==a.peek()&&a.match(xa))return b.tokenize=A,r("jsonld-keyword","meta");for(;null!=(d=a.next())&&(d!=e||c);)c=!c&&"\\"==d;c||(b.tokenize=A);return r("string","string")}}function M(e,a){for(var b=!1,c;c=e.next();){if("/"==c&&b){a.tokenize=A;break}b="*"==c}return r("comment",
+"comment")}function H(e,a){for(var b=!1,c;null!=(c=e.next());){if(!b&&("`"==c||"$"==c&&e.eat("{"))){a.tokenize=A;break}b=!b&&"\\"==c}return r("quasi","string-2",e.current())}function F(e,a){a.fatArrowAt&&(a.fatArrowAt=null);var b=e.string.indexOf("\x3d\x3e",e.start);if(!(0>b)){if(U){var c=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,b));c&&(b=c.index)}for(var c=0,d=!1,b=b-1;0<=b;--b){var p=e.string.charAt(b),f="([{}])".indexOf(p);if(0<=f&&3>f){if(!c){++b;break}if(0==--c){"("==
+p&&(d=!0);break}}else if(3<=f&&6>f)++c;else if(ja.test(p))d=!0;else{if(/["'\/]/.test(p))return;if(d&&!c){++b;break}}}d&&!c&&(a.fatArrowAt=b)}}function z(e,a,b,c,d,p){this.indented=e;this.column=a;this.type=b;this.prev=d;this.info=p;null!=c&&(this.align=c)}function h(){for(var e=arguments.length-1;0<=e;e--)l.cc.push(arguments[e])}function a(){h.apply(null,arguments);return!0}function C(e){function a(b){for(;b;b=b.next)if(b.name==e)return!0;return!1}var b=l.state;l.marked="def";b.context?a(b.localVars)||
+(b.localVars={name:e,next:b.localVars}):!a(b.globalVars)&&q.globalVars&&(b.globalVars={name:e,next:b.globalVars})}function G(){l.state.context={prev:l.state.context,vars:l.state.localVars};l.state.localVars=ya}function w(){l.state.localVars=l.state.context.vars;l.state.context=l.state.context.prev}function u(e,a){var b=function(){var b=l.state,c=b.indented;if("stat"==b.lexical.type)c=b.lexical.indented;else for(var d=b.lexical;d&&")"==d.type&&d.align;d=d.prev)c=d.indented;b.lexical=new z(c,l.stream.column(),
+e,null,b.lexical,a)};b.lex=!0;return b}function n(){var e=l.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function k(e){function b(c){return c==e?a():";"==e?h():a(b)}return b}function D(e,c){return"var"==e?a(u("vardef",c.length),K,k(";"),n):"keyword a"==e?a(u("form"),Q,D,n):"keyword b"==e?a(u("form"),D,n):"{"==e?a(u("}"),ga,n):";"==e?a():"if"==e?("else"==l.state.lexical.info&&l.state.cc[l.state.cc.length-1]==n&&l.state.cc.pop()(),a(u("form"),
+Q,D,n,qa)):"function"==e?a(O):"for"==e?a(u("form"),za,D,n):"variable"==e?a(u("stat"),Aa):"switch"==e?a(u("form"),Q,u("}","switch"),k("{"),ga,n,n):"case"==e?a(m,k(":")):"default"==e?a(k(":")):"catch"==e?a(u("form"),G,k("("),ka,k(")"),D,n,w):"class"==e?a(u("form"),ra,n):"export"==e?a(u("stat"),Ba,n):"import"==e?a(u("stat"),Ca,n):"module"==e?a(u("form"),b,u("}"),k("{"),ga,n,n):"type"==e?a(L,k("operator"),L,k(";")):"async"==e?a(D):h(u("stat"),m,k(";"),n)}function m(e){return E(e,!1)}function t(e){return E(e,
+!0)}function Q(e){return"("!=e?h():a(u(")"),m,k(")"),n)}function E(e,c){if(l.state.fatArrowAt==l.stream.start){var p=c?oa:d;if("("==e)return a(G,u(")"),R(b,")"),n,k("\x3d\x3e"),p,w);if("variable"==e)return h(G,b,k("\x3d\x3e"),p,w)}p=c?B:J;return Da.hasOwnProperty(e)?a(p):"function"==e?a(O,p):"class"==e?a(u("form"),Ea,n):"keyword c"==e||"async"==e?a(c?N:T):"("==e?a(u(")"),T,k(")"),n,p):"operator"==e||"spread"==e?a(c?t:m):"["==e?a(u("]"),Fa,n,p):"{"==e?aa(la,"}",null,p):"quasi"==e?h(ca,p):"new"==e?
+a(wa(c)):a()}function T(e){return e.match(/[;\}\)\],]/)?h():h(m)}function N(e){return e.match(/[;\}\)\],]/)?h():h(t)}function J(e,b){return","==e?a(m):B(e,b,!1)}function B(e,b,c){var p=0==c?J:B,f=0==c?m:t;if("\x3d\x3e"==e)return a(G,c?oa:d,w);if("operator"==e)return/\+\+|--/.test(b)?a(p):"?"==b?a(m,k(":"),f):a(f);if("quasi"==e)return h(ca,p);if(";"!=e){if("("==e)return aa(t,")","call",p);if("."==e)return a(Ga,p);if("["==e)return a(u("]"),T,k("]"),n,p)}}function ca(e,b){return"quasi"!=e?h():"${"!=
+b.slice(b.length-2)?a(ca):a(m,f)}function f(e){if("}"==e)return l.marked="string-2",l.state.tokenize=H,a(ca)}function d(e){F(l.stream,l.state);return h("{"==e?D:m)}function oa(e){F(l.stream,l.state);return h("{"==e?D:t)}function wa(e){return function(b){return"."==b?a(e?Ha:Ia):h(e?t:m)}}function Ia(e,b){if("target"==b)return l.marked="keyword",a(J)}function Ha(e,b){if("target"==b)return l.marked="keyword",a(B)}function Aa(e){return":"==e?a(n,D):h(J,k(";"),n)}function Ga(e){if("variable"==e)return l.marked=
+"property",a()}function la(e,b){if("async"==e)return l.marked="property",a(la);if("variable"==e||"keyword"==l.style)return l.marked="property","get"==b||"set"==b?a(Ja):a(V);if("number"==e||"string"==e)return l.marked=fa?"property":l.style+" property",a(V);if("jsonld-keyword"==e)return a(V);if("modifier"==e)return a(la);if("["==e)return a(m,k("]"),V);if("spread"==e)return a(m);if(":"==e)return h(V)}function Ja(e){if("variable"!=e)return h(V);l.marked="property";return a(O)}function V(e){if(":"==e)return a(t);
+if("("==e)return h(O)}function R(e,b){function c(d,p){if(","==d){var f=l.state.lexical;"call"==f.info&&(f.pos=(f.pos||0)+1);return a(function(a,c){return a==b||c==b?h():h(e)},c)}return d==b||p==b?a():a(k(b))}return function(d,p){return d==b||p==b?a():h(e,c)}}function aa(e,b,c){for(var d=3;d<arguments.length;d++)l.cc.push(arguments[d]);return a(u(b,c),R(e,b),n)}function ga(e){return"}"==e?a():h(D,ga)}function S(e,b){if(U){if(":"==e)return a(L);if("?"==b)return a(S)}}function L(b){if("variable"==b)return l.marked=
+"variable-3",a(x);if("{"==b)return a(R(ha,"}"));if("("==b)return a(R(W,")"),P)}function P(b){if("\x3d\x3e"==b)return a(L)}function ha(b){if("variable"==b||"keyword"==l.style)return l.marked="property",a(ha);if(":"==b)return a(L)}function W(b){if("variable"==b)return a(W);if(":"==b)return a(L)}function x(b,c){if("\x3c"==c)return a(R(L,"\x3e"),x);if("["==b)return a(k("]"),x)}function K(){return h(b,S,c,Ka)}function b(e,c){if("modifier"==e)return a(b);if("variable"==e)return C(c),a();if("spread"==e)return a(b);
+if("["==e)return aa(b,"]");if("{"==e)return aa(p,"}")}function p(e,d){if("variable"==e&&!l.stream.match(/^\s*:/,!1))return C(d),a(c);"variable"==e&&(l.marked="property");return"spread"==e?a(b):"}"==e?h():a(k(":"),b,c)}function c(b,c){if("\x3d"==c)return a(t)}function Ka(b){if(","==b)return a(K)}function qa(b,c){if("keyword b"==b&&"else"==c)return a(u("form","else"),D,n)}function za(b){if("("==b)return a(u(")"),La,k(")"),n)}function La(b){return"var"==b?a(K,k(";"),ia):";"==b?a(ia):"variable"==b?a(Ma):
+h(m,k(";"),ia)}function Ma(b,c){return"in"==c||"of"==c?(l.marked="keyword",a(m)):a(J,ia)}function ia(b,c){return";"==b?a(sa):"in"==c||"of"==c?(l.marked="keyword",a(m)):h(m,k(";"),sa)}function sa(b){")"!=b&&a(m)}function O(b,c){if("*"==c)return l.marked="keyword",a(O);if("variable"==b)return C(c),a(O);if("("==b)return a(G,u(")"),R(ka,")"),n,S,D,w)}function ka(e){return"spread"==e?a(ka):h(b,S,c)}function Ea(b,a){return"variable"==b?ra(b,a):ma(b,a)}function ra(b,c){if("variable"==b)return C(c),a(ma)}
+function ma(b,c){if("extends"==c||"implements"==c)return a(U?L:m,ma);if("{"==b)return a(u("}"),ba,n)}function ba(b,c){if("variable"==b||"keyword"==l.style){if(("static"==c||"get"==c||"set"==c||U&&("public"==c||"private"==c||"protected"==c||"readonly"==c||"abstract"==c))&&l.stream.match(/^\s+[\w$\xa1-\uffff]/,!1))return l.marked="keyword",a(ba);l.marked="property";return a(U?ta:O,ba)}if("*"==c)return l.marked="keyword",a(ba);if(";"==b)return a(ba);if("}"==b)return a()}function ta(b,d){return"?"==d?
+a(ta):":"==b?a(L,c):h(O)}function Ba(b,c){return"*"==c?(l.marked="keyword",a(ua,k(";"))):"default"==c?(l.marked="keyword",a(m,k(";"))):h(D)}function Ca(b){return"string"==b?a():h(na,ua)}function na(b,c){if("{"==b)return aa(na,"}");"variable"==b&&C(c);"*"==c&&(l.marked="keyword");return a(Na)}function Na(b,c){if("as"==c)return l.marked="keyword",a(na)}function ua(b,c){if("from"==c)return l.marked="keyword",a(m)}function Fa(b){return"]"==b?a():h(R(t,"]"))}var X=y.indentUnit,va=q.statementIndent,fa=
+q.jsonld,Y=q.json||fa,U=q.typescript,ja=q.wordCharacters||/[\w$\xa1-\uffff]/,pa=function(){function b(a){return{type:a,style:"keyword"}}var a=b("keyword a"),c=b("keyword b"),d=b("keyword c"),p=b("operator"),f={type:"atom",style:"atom"},a={"if":b("if"),"while":a,"with":a,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":b("new"),"delete":d,"throw":d,"debugger":d,"var":b("var"),"const":b("var"),let:b("var"),"function":b("function"),"catch":b("catch"),"for":b("for"),"switch":b("switch"),
+"case":b("case"),"default":b("default"),"in":p,"typeof":p,"instanceof":p,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":b("this"),"class":b("class"),"super":b("atom"),yield:d,"export":b("export"),"import":b("import"),"extends":d,await:d,async:b("async")};if(U){var c={type:"variable",style:"variable-3"},d={"interface":b("class"),"implements":d,namespace:d,module:b("module"),"enum":b("module"),type:b("type"),"public":b("modifier"),"private":b("modifier"),"protected":b("modifier"),"abstract":b("modifier"),
+as:p,string:c,number:c,"boolean":c,any:c},g;for(g in d)a[g]=d[g]}return a}(),ea=/[+\-*&%=<>!?|~^]/,xa=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,Z,da,Da={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},l={state:null,column:null,marked:null,cc:null},ya={name:"this",next:{name:"arguments"}};n.lex=!0;return{startState:function(b){b={tokenize:A,lastType:"sof",cc:[],lexical:new z((b||0)-X,0,"block",!1),localVars:q.localVars,
+context:q.localVars&&{vars:q.localVars},indented:b||0};q.globalVars&&"object"==typeof q.globalVars&&(b.globalVars=q.globalVars);return b},token:function(b,a){b.sol()&&(a.lexical.hasOwnProperty("align")||(a.lexical.align=!1),a.indented=b.indentation(),F(b,a));if(a.tokenize!=M&&b.eatSpace())return null;var c=a.tokenize(b,a);if("comment"==Z)return c;a.lastType="operator"!=Z||"++"!=da&&"--"!=da?Z:"incdec";a:{var d=Z,p=da,f=a.cc;l.state=a;l.stream=b;l.marked=null;l.cc=f;l.style=c;a.lexical.hasOwnProperty("align")||
+(a.lexical.align=!0);for(;;)if((f.length?f.pop():Y?m:D)(d,p)){for(;f.length&&f[f.length-1].lex;)f.pop()();if(l.marked){c=l.marked;break a}if(d="variable"==d)b:{for(d=a.localVars;d;d=d.next)if(d.name==p){d=!0;break b}for(f=a.context;f;f=f.prev)for(d=f.vars;d;d=d.next)if(d.name==p){d=!0;break b}d=void 0}if(d){c="variable-2";break a}break a}}return c},indent:function(b,a){if(b.tokenize==M)return g.Pass;if(b.tokenize!=A)return 0;var c=a&&a.charAt(0),d=b.lexical,p;if(!/^\s*else\b/.test(a))for(var f=b.cc.length-
+1;0<=f;--f){var t=b.cc[f];if(t==n)d=d.prev;else if(t!=qa)break}for(;!("stat"!=d.type&&"form"!=d.type||"}"!=c&&(!(p=b.cc[b.cc.length-1])||p!=J&&p!=B||/^[,\.=+\-*:?[\(]/.test(a)));)d=d.prev;va&&")"==d.type&&"stat"==d.prev.type&&(d=d.prev);p=d.type;f=c==p;return"vardef"==p?d.indented+("operator"==b.lastType||","==b.lastType?d.info+1:0):"form"==p&&"{"==c?d.indented:"form"==p?d.indented+X:"stat"==p?(c=d.indented,d="operator"==b.lastType||","==b.lastType||ea.test(a.charAt(0))||/[,.]/.test(a.charAt(0)),
+c+(d?va||X:0)):"switch"!=d.info||f||0==q.doubleIndentSwitch?d.align?d.column+(f?0:1):d.indented+(f?0:X):d.indented+(/^(?:case|default)\b/.test(a)?X:2*X)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Y?null:"/*",blockCommentEnd:Y?null:"*/",lineComment:Y?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Y?"json":"javascript",jsonldMode:fa,jsonMode:Y,expressionAllowed:v,skipExpression:function(b){var a=b.cc[b.cc.length-1];a!=m&&a!=t||b.cc.pop()}}});g.registerHelper("wordChars",
+"javascript",/[\w$]/);g.defineMIME("text/javascript","javascript");g.defineMIME("text/ecmascript","javascript");g.defineMIME("application/javascript","javascript");g.defineMIME("application/x-javascript","javascript");g.defineMIME("application/ecmascript","javascript");g.defineMIME("application/json",{name:"javascript",json:!0});g.defineMIME("application/x-json",{name:"javascript",json:!0});g.defineMIME("application/ld+json",{name:"javascript",jsonld:!0});g.defineMIME("text/typescript",{name:"javascript",
+typescript:!0});g.defineMIME("application/typescript",{name:"javascript",typescript:!0})});
+(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],g):g(CodeMirror)})(function(g){function v(a){for(var g={},k=0;k<a.length;++k)g[a[k].toLowerCase()]=!0;return g}function y(a,g){for(var k=!1,h;null!=(h=a.next());){if(k&&"/"==h){g.tokenize=null;break}k="*"==h}return["comment","comment"]}g.defineMode("css",function(a,k){function h(b,a){W=a;return b}function n(b,a){var c=b.next();if(F[c]){var d=
+F[c](b,a);if(!1!==d)return d}if("@"==c)return b.eatWhile(/[\w\\\-]/),h("def",b.current());if("\x3d"==c||("~"==c||"|"==c)&&b.eat("\x3d"))return h(null,"compare");if('"'==c||"'"==c)return a.tokenize=G(c),a.tokenize(b,a);if("#"==c)return b.eatWhile(/[\w\\\-]/),h("atom","hash");if("!"==c)return b.match(/^\s*\w*/),h("keyword","important");if(/\d/.test(c)||"."==c&&b.eat(/\d/))return b.eatWhile(/[\w.%]/),h("number","unit");if("-"===c){if(/[\d.]/.test(b.peek()))return b.eatWhile(/[\w.%]/),h("number","unit");
+if(b.match(/^-[\w\\\-]+/))return b.eatWhile(/[\w\\\-]/),b.match(/^\s*:/,!1)?h("variable-2","variable-definition"):h("variable-2","variable");if(b.match(/^\w+-/))return h("meta","meta")}else return/[,+>*\/]/.test(c)?h(null,"select-op"):"."==c&&b.match(/^-?[_a-z][_a-z0-9-]*/i)?h("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?h(null,c):"u"==c&&b.match(/rl(-prefix)?\(/)||"d"==c&&b.match("omain(")||"r"==c&&b.match("egexp(")?(b.backUp(1),a.tokenize=w,h("property","word")):/[\w\\\-]/.test(c)?(b.eatWhile(/[\w\\\-]/),
+h("property","word")):h(null,null)}function G(b){return function(a,c){for(var d=!1,f;null!=(f=a.next());){if(f==b&&!d){")"==b&&a.backUp(1);break}d=!d&&"\\"==f}if(f==b||!d&&")"!=b)c.tokenize=null;return h("string","string")}}function w(b,a){b.next();b.match(/\s*[\"\')]/,!1)?a.tokenize=null:a.tokenize=G(")");return h(null,"(")}function u(b,a,c){this.type=b;this.indent=a;this.prev=c}function m(b,a,c,d){b.context=new u(c,a.indentation()+(!1===d?0:q),b.context);return c}function f(b){b.context.prev&&(b.context=
+b.context.prev);return b.context.type}function d(b,a,c,d){for(d=d||1;0<d;d--)c.context=c.context.prev;return K[c.context.type](b,a,c)}function r(b){b=b.current().toLowerCase();x=L.hasOwnProperty(b)?"atom":S.hasOwnProperty(b)?"keyword":"variable"}var H=k.inline;k.propertyKeywords||(k=g.resolveMode("text/css"));var q=a.indentUnit,F=k.tokenHooks,M=k.documentTypes||{},z=k.mediaTypes||{},D=k.mediaFeatures||{},v=k.mediaValueKeywords||{},y=k.propertyKeywords||{},A=k.nonStandardPropertyKeywords||{},C=k.fontProperties||
+{},I=k.counterDescriptors||{},S=k.colorKeywords||{},L=k.valueKeywords||{},P=k.allowNested,ha=!0===k.supportsAtComponent,W,x,K={top:function(b,a,c){if("{"==b)return m(c,a,"block");if("}"==b&&c.context.prev)return f(c);if(ha&&/@component/.test(b))return m(c,a,"atComponentBlock");if(/^@(-moz-)?document$/.test(b))return m(c,a,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/.test(b))return m(c,a,"atBlock");if(/^@(font-face|counter-style)/.test(b))return c.stateArg=b,"restricted_atBlock_before";
+if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(b))return"keyframes";if(b&&"@"==b.charAt(0))return m(c,a,"at");if("hash"==b)x="builtin";else if("word"==b)x="tag";else{if("variable-definition"==b)return"maybeprop";if("interpolation"==b)return m(c,a,"interpolation");if(":"==b)return"pseudo";if(P&&"("==b)return m(c,a,"parens")}return c.context.type},block:function(b,a,c){if("word"==b){b=a.current().toLowerCase();if(y.hasOwnProperty(b))return x="property","maybeprop";if(A.hasOwnProperty(b))return x="string-2",
+"maybeprop";if(P)return x=a.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block";x+=" error";return"maybeprop"}if("meta"==b)return"block";if(P||"hash"!=b&&"qualifier"!=b)return K.top(b,a,c);x="error";return"block"},maybeprop:function(b,a,c){return":"==b?m(c,a,"prop"):K[c.context.type](b,a,c)},prop:function(b,a,c){if(";"==b)return f(c);if("{"==b&&P)return m(c,a,"propBlock");if("}"==b||"{"==b)return d(b,a,c);if("("==b)return m(c,a,"parens");if("hash"==b&&!/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(a.current()))x+=
+" error";else if("word"==b)r(a);else if("interpolation"==b)return m(c,a,"interpolation");return"prop"},propBlock:function(b,a,c){return"}"==b?f(c):"word"==b?(x="property","maybeprop"):c.context.type},parens:function(b,a,c){if("{"==b||"}"==b)return d(b,a,c);if(")"==b)return f(c);if("("==b)return m(c,a,"parens");if("interpolation"==b)return m(c,a,"interpolation");"word"==b&&r(a);return"parens"},pseudo:function(b,a,c){return"word"==b?(x="variable-3",c.context.type):K[c.context.type](b,a,c)},documentTypes:function(b,
+a,c){return"word"==b&&M.hasOwnProperty(a.current())?(x="tag",c.context.type):K.atBlock(b,a,c)},atBlock:function(b,a,c){if("("==b)return m(c,a,"atBlock_parens");if("}"==b||";"==b)return d(b,a,c);if("{"==b)return f(c)&&m(c,a,P?"block":"top");if("interpolation"==b)return m(c,a,"interpolation");"word"==b&&(b=a.current().toLowerCase(),x="only"==b||"not"==b||"and"==b||"or"==b?"keyword":z.hasOwnProperty(b)?"attribute":D.hasOwnProperty(b)?"property":v.hasOwnProperty(b)?"keyword":y.hasOwnProperty(b)?"property":
+A.hasOwnProperty(b)?"string-2":L.hasOwnProperty(b)?"atom":S.hasOwnProperty(b)?"keyword":"error");return c.context.type},atComponentBlock:function(b,a,c){if("}"==b)return d(b,a,c);if("{"==b)return f(c)&&m(c,a,P?"block":"top",!1);"word"==b&&(x="error");return c.context.type},atBlock_parens:function(b,a,c){return")"==b?f(c):"{"==b||"}"==b?d(b,a,c,2):K.atBlock(b,a,c)},restricted_atBlock_before:function(b,a,c){return"{"==b?m(c,a,"restricted_atBlock"):"word"==b&&"@counter-style"==c.stateArg?(x="variable",
+"restricted_atBlock_before"):K[c.context.type](b,a,c)},restricted_atBlock:function(b,a,c){return"}"==b?(c.stateArg=null,f(c)):"word"==b?(x="@font-face"==c.stateArg&&!C.hasOwnProperty(a.current().toLowerCase())||"@counter-style"==c.stateArg&&!I.hasOwnProperty(a.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(b,a,c){return"word"==b?(x="variable","keyframes"):"{"==b?m(c,a,"top"):K[c.context.type](b,a,c)},at:function(b,a,c){if(";"==b)return f(c);if("{"==
+b||"}"==b)return d(b,a,c);"word"==b?x="tag":"hash"==b&&(x="builtin");return"at"},interpolation:function(b,a,c){if("}"==b)return f(c);if("{"==b||";"==b)return d(b,a,c);"word"==b?x="variable":"variable"!=b&&"("!=b&&")"!=b&&(x="error");return"interpolation"}};return{startState:function(b){return{tokenize:null,state:H?"block":"top",stateArg:null,context:new u(H?"block":"top",b||0,null)}},token:function(b,a){if(!a.tokenize&&b.eatSpace())return null;var c=(a.tokenize||n)(b,a);c&&"object"==typeof c&&(W=
+c[1],c=c[0]);x=c;a.state=K[a.state](W,b,a);return x},indent:function(b,a){var c=b.context,d=a&&a.charAt(0),f=c.indent;"prop"!=c.type||"}"!=d&&")"!=d||(c=c.prev);if(c.prev)if("}"==d&&("block"==c.type||"top"==c.type||"interpolation"==c.type||"restricted_atBlock"==c.type))c=c.prev,f=c.indent;else if(")"==d&&("parens"==c.type||"atBlock_parens"==c.type)||"{"==d&&("at"==c.type||"atBlock"==c.type))f=Math.max(0,c.indent-q);return f},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});
+var q=["domain","regexp","url","url-prefix"],r=v(q),A="all aural braille handheld print projection screen tty tv embossed".split(" "),I=v(A),M="width min-width max-width height min-height max-height device-width min-device-width max-device-width device-height min-device-height max-device-height aspect-ratio min-aspect-ratio max-aspect-ratio device-aspect-ratio min-device-aspect-ratio max-device-aspect-ratio color min-color max-color color-index min-color-index max-color-index monochrome min-monochrome max-monochrome resolution min-resolution max-resolution scan grid orientation device-pixel-ratio min-device-pixel-ratio max-device-pixel-ratio pointer any-pointer hover any-hover".split(" "),
+H=v(M),F="landscape portrait none coarse fine on-demand hover interlace progressive".split(" "),z=v(F),h="align-content align-items align-self alignment-adjust alignment-baseline anchor-point animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function appearance azimuth backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size baseline-shift binding bleed bookmark-label bookmark-level bookmark-state bookmark-target border border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip color color-profile column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width columns content counter-increment counter-reset crop cue cue-after cue-before cursor direction display dominant-baseline drop-initial-after-adjust drop-initial-after-align drop-initial-before-adjust drop-initial-before-align drop-initial-size drop-initial-value elevation empty-cells fit fit-position flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float float-offset flow-from flow-into font font-feature-settings font-family font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-rows grid-column grid-column-end grid-column-gap grid-column-start grid-gap grid-row grid-row-end grid-row-gap grid-row-start grid-template grid-template-areas grid-template-columns grid-template-rows hanging-punctuation height hyphens icon image-orientation image-rendering image-resolution inline-box-align justify-content left letter-spacing line-break line-height line-stacking line-stacking-ruby line-stacking-shift line-stacking-strategy list-style list-style-image list-style-position list-style-type margin margin-bottom margin-left margin-right margin-top marks marquee-direction marquee-loop marquee-play-count marquee-speed marquee-style max-height max-width min-height min-width move-to nav-down nav-index nav-left nav-right nav-up object-fit object-position opacity order orphans outline outline-color outline-offset outline-style outline-width overflow overflow-style overflow-wrap overflow-x overflow-y padding padding-bottom padding-left padding-right padding-top page page-break-after page-break-before page-break-inside page-policy pause pause-after pause-before perspective perspective-origin pitch pitch-range play-during position presentation-level punctuation-trim quotes region-break-after region-break-before region-break-inside region-fragment rendering-intent resize rest rest-after rest-before richness right rotation rotation-point ruby-align ruby-overhang ruby-position ruby-span shape-image-threshold shape-inside shape-margin shape-outside size speak speak-as speak-header speak-numeral speak-punctuation speech-rate stress string-set tab-size table-layout target target-name target-new target-position text-align text-align-last text-decoration text-decoration-color text-decoration-line text-decoration-skip text-decoration-style text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-height text-indent text-justify text-outline text-overflow text-shadow text-size-adjust text-space-collapse text-transform text-underline-position text-wrap top transform transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi user-select vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-range voice-rate voice-stress voice-volume volume white-space widows width word-break word-spacing word-wrap z-index clip-path clip-rule mask enable-background filter flood-color flood-opacity lighting-color stop-color stop-opacity pointer-events color-interpolation color-interpolation-filters color-rendering fill fill-opacity fill-rule image-rendering marker marker-end marker-mid marker-start shape-rendering stroke stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-rendering baseline-shift dominant-baseline glyph-orientation-horizontal glyph-orientation-vertical text-anchor writing-mode".split(" "),
+a=v(h),C="scrollbar-arrow-color scrollbar-base-color scrollbar-dark-shadow-color scrollbar-face-color scrollbar-highlight-color scrollbar-shadow-color scrollbar-3d-light-color scrollbar-track-color shape-inside searchfield-cancel-button searchfield-decoration searchfield-results-button searchfield-results-decoration zoom".split(" "),G=v(C),w=v("font-family src unicode-range font-variant font-feature-settings font-stretch font-weight font-style".split(" ")),u=v("additive-symbols fallback negative pad prefix range speak-as suffix symbols system".split(" ")),
+n="aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise darkviolet deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray grey green greenyellow honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray lightgreen lightpink lightsalmon lightseagreen lightskyblue lightslategray lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue slateblue slategray snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen".split(" "),
+k=v(n),D="above absolute activeborder additive activecaption afar after-white-space ahead alias all all-scroll alphabetic alternate always amharic amharic-abegede antialiased appworkspace arabic-indic armenian asterisks attr auto avoid avoid-column avoid-page avoid-region background backwards baseline below bidi-override binary bengali blink block block-axis bold bolder border border-box both bottom break break-all break-word bullets button button-bevel buttonface buttonhighlight buttonshadow buttontext calc cambodian capitalize caps-lock-indicator caption captiontext caret cell center checkbox circle cjk-decimal cjk-earthly-branch cjk-heavenly-stem cjk-ideographic clear clip close-quote col-resize collapse color color-burn color-dodge column column-reverse compact condensed contain content content-box context-menu continuous copy counter counters cover crop cross crosshair currentcolor cursive cyclic darken dashed decimal decimal-leading-zero default default-button dense destination-atop destination-in destination-out destination-over devanagari difference disc discard disclosure-closed disclosure-open document dot-dash dot-dot-dash dotted double down e-resize ease ease-in ease-in-out ease-out element ellipse ellipsis embed end ethiopic ethiopic-abegede ethiopic-abegede-am-et ethiopic-abegede-gez ethiopic-abegede-ti-er ethiopic-abegede-ti-et ethiopic-halehame-aa-er ethiopic-halehame-aa-et ethiopic-halehame-am-et ethiopic-halehame-gez ethiopic-halehame-om-et ethiopic-halehame-sid-et ethiopic-halehame-so-et ethiopic-halehame-ti-er ethiopic-halehame-ti-et ethiopic-halehame-tig ethiopic-numeric ew-resize exclusion expanded extends extra-condensed extra-expanded fantasy fast fill fixed flat flex flex-end flex-start footnotes forwards from geometricPrecision georgian graytext grid groove gujarati gurmukhi hand hangul hangul-consonant hard-light hebrew help hidden hide higher highlight highlighttext hiragana hiragana-iroha horizontal hsl hsla hue icon ignore inactiveborder inactivecaption inactivecaptiontext infinite infobackground infotext inherit initial inline inline-axis inline-block inline-flex inline-grid inline-table inset inside intrinsic invert italic japanese-formal japanese-informal justify kannada katakana katakana-iroha keep-all khmer korean-hangul-formal korean-hanja-formal korean-hanja-informal landscape lao large larger left level lighter lighten line-through linear linear-gradient lines list-item listbox listitem local logical loud lower lower-alpha lower-armenian lower-greek lower-hexadecimal lower-latin lower-norwegian lower-roman lowercase ltr luminosity malayalam match matrix matrix3d media-controls-background media-current-time-display media-fullscreen-button media-mute-button media-play-button media-return-to-realtime-button media-rewind-button media-seek-back-button media-seek-forward-button media-slider media-sliderthumb media-time-remaining-display media-volume-slider media-volume-slider-container media-volume-sliderthumb medium menu menulist menulist-button menulist-text menulist-textfield menutext message-box middle min-intrinsic mix mongolian monospace move multiple multiply myanmar n-resize narrower ne-resize nesw-resize no-close-quote no-drop no-open-quote no-repeat none normal not-allowed nowrap ns-resize numbers numeric nw-resize nwse-resize oblique octal open-quote optimizeLegibility optimizeSpeed oriya oromo outset outside outside-shape overlay overline padding padding-box painted page paused persian perspective plus-darker plus-lighter pointer polygon portrait pre pre-line pre-wrap preserve-3d progress push-button radial-gradient radio read-only read-write read-write-plaintext-only rectangle region relative repeat repeating-linear-gradient repeating-radial-gradient repeat-x repeat-y reset reverse rgb rgba ridge right rotate rotate3d rotateX rotateY rotateZ round row row-resize row-reverse rtl run-in running s-resize sans-serif saturation scale scale3d scaleX scaleY scaleZ screen scroll scrollbar se-resize searchfield searchfield-cancel-button searchfield-decoration searchfield-results-button searchfield-results-decoration semi-condensed semi-expanded separate serif show sidama simp-chinese-formal simp-chinese-informal single skew skewX skewY skip-white-space slide slider-horizontal slider-vertical sliderthumb-horizontal sliderthumb-vertical slow small small-caps small-caption smaller soft-light solid somali source-atop source-in source-out source-over space space-around space-between spell-out square square-button start static status-bar stretch stroke sub subpixel-antialiased super sw-resize symbolic symbols table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group tamil telugu text text-bottom text-top textarea textfield thai thick thin threeddarkshadow threedface threedhighlight threedlightshadow threedshadow tibetan tigre tigrinya-er tigrinya-er-abegede tigrinya-et tigrinya-et-abegede to top trad-chinese-formal trad-chinese-informal translate translate3d translateX translateY translateZ transparent ultra-condensed ultra-expanded underline up upper-alpha upper-armenian upper-greek upper-hexadecimal upper-latin upper-norwegian upper-roman uppercase urdu url var vertical vertical-text visible visibleFill visiblePainted visibleStroke visual w-resize wait wave wider window windowframe windowtext words wrap wrap-reverse x-large x-small xor xx-large xx-small".split(" "),
+m=v(D),q=q.concat(A).concat(M).concat(F).concat(h).concat(C).concat(n).concat(D);g.registerHelper("hintWords","css",q);g.defineMIME("text/css",{documentTypes:r,mediaTypes:I,mediaFeatures:H,mediaValueKeywords:z,propertyKeywords:a,nonStandardPropertyKeywords:G,fontProperties:w,counterDescriptors:u,colorKeywords:k,valueKeywords:m,tokenHooks:{"/":function(a,g){if(!a.eat("*"))return!1;g.tokenize=y;return y(a,g)}},name:"css"});g.defineMIME("text/x-scss",{mediaTypes:I,mediaFeatures:H,mediaValueKeywords:z,
+propertyKeywords:a,nonStandardPropertyKeywords:G,colorKeywords:k,valueKeywords:m,fontProperties:w,allowNested:!0,tokenHooks:{"/":function(a,g){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(g.tokenize=y,y(a,g)):["operator","operator"]},":":function(a){return a.match(/\s*\{/)?[null,"{"]:!1},$:function(a){a.match(/^[\w-]+/);return a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return a.eat("{")?[null,"interpolation"]:!1}},name:"css",
+helperType:"scss"});g.defineMIME("text/x-less",{mediaTypes:I,mediaFeatures:H,mediaValueKeywords:z,propertyKeywords:a,nonStandardPropertyKeywords:G,colorKeywords:k,valueKeywords:m,fontProperties:w,allowNested:!0,tokenHooks:{"/":function(a,g){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(g.tokenize=y,y(a,g)):["operator","operator"]},"@":function(a){if(a.eat("{"))return[null,"interpolation"];if(a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,
+!1))return!1;a.eatWhile(/[\w\\\-]/);return a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"\x26":function(){return["atom","atom"]}},name:"css",helperType:"less"});g.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:I,mediaFeatures:H,propertyKeywords:a,nonStandardPropertyKeywords:G,fontProperties:w,counterDescriptors:u,colorKeywords:k,valueKeywords:m,supportsAtComponent:!0,tokenHooks:{"/":function(a,g){if(!a.eat("*"))return!1;g.tokenize=y;return y(a,g)}},name:"css",
+helperType:"gss"})});
+(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],g):g(CodeMirror)})(function(g){function v(g){var r=I[g];return r?r:I[g]=new RegExp("\\s+"+g+"\\s*\x3d\\s*('|\")?([^'\"]+)('|\")?\\s*")}function y(g,r){var q=g.match(v(r));return q?/^\s*(.*?)\s*$/.exec(q[2])[1]:
+""}function q(g,r){for(var q in g)for(var z=r[q]||(r[q]=[]),h=g[q],a=h.length-1;0<=a;a--)z.unshift(h[a])}function r(g,r){for(var q=0;q<g.length;q++){var z=g[q];if(!z[0]||z[1].test(y(r,z[0])))return z[2]}}var A={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],
+[null,null,"css"]]},I={};g.defineMode("htmlmixed",function(y,v){function F(a,w){var q=z.token(a,w.htmlState),n=/\btag\b/.test(q),k;if(n&&!/[<>\s\/]/.test(a.current())&&(k=w.htmlState.tagName&&w.htmlState.tagName.toLowerCase())&&h.hasOwnProperty(k))w.inTag=k+" ";else if(w.inTag&&n&&/>$/.test(a.current())){n=/^([\S]+) (.*)/.exec(w.inTag);w.inTag=null;k="\x3e"==a.current()&&r(h[n[1]],n[2]);k=g.getMode(y,k);var v=new RegExp("^\x3c/s*"+n[1]+"s*\x3e","i"),m=new RegExp("\x3c/s*"+n[1]+"s*\x3e","i");w.token=
+function(a,g){if(a.match(v,!1))return g.token=F,g.localState=g.localMode=null;var k=g.localMode.token(a,g.localState),h=a.current(),n=h.search(m);-1<n?a.backUp(h.length-n):h.match(/<\/?$/)&&(a.backUp(h.length),a.match(m,!1)||a.match(h));return k};w.localMode=k;w.localState=g.startState(k,z.indent(w.htmlState,""))}else w.inTag&&(w.inTag+=a.current(),a.eol()&&(w.inTag+=" "));return q}var z=g.getMode(y,{name:"xml",htmlMode:!0,multilineTagIndentFactor:v.multilineTagIndentFactor,multilineTagIndentPastTag:v.multilineTagIndentPastTag}),
+h={},a=v&&v.tags,C=v&&v.scriptTypes;q(A,h);a&&q(a,h);if(C)for(a=C.length-1;0<=a;a--)h.script.unshift(["type",C[a].matches,C[a].mode]);return{startState:function(){var a=g.startState(z);return{token:F,inTag:null,localMode:null,localState:null,htmlState:a}},copyState:function(a){var h;a.localState&&(h=g.copyState(a.localMode,a.localState));return{token:a.token,inTag:a.inTag,localMode:a.localMode,localState:h,htmlState:g.copyState(z,a.htmlState)}},token:function(a,g){return g.token(a,g)},indent:function(a,
+h){return!a.localMode||/^\s*<\//.test(h)?z.indent(a.htmlState,h):a.localMode.indent?a.localMode.indent(a.localState,h):g.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||z}}}},"xml","javascript","css");g.defineMIME("text/html","htmlmixed")});
+(function(g){"object"==typeof exports&&"object"==typeof module?g(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../../addon/mode/multiplex")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../../addon/mode/multiplex"],g):g(CodeMirror)})(function(g){g.defineMode("htmlembedded",function(v,y){return g.multiplexingMode(g.getMode(v,"htmlmixed"),{open:y.open||y.scriptStartRegex||"\x3c%",close:y.close||y.scriptEndRegex||"%\x3e",
+mode:g.getMode(v,y.scriptingModeSpec)})},"htmlmixed");g.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"});g.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"});g.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"});g.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"})});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js	(revision 2)
@@ -0,0 +1,28 @@
+﻿(function(q){"object"==typeof exports&&"object"==typeof module?q(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],q):q(CodeMirror)})(function(q){function ha(q,r,p){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(r.lastType)||"quasi"==r.lastType&&/\{\s*$/.test(q.string.slice(0,q.pos-(p||0)))}q.defineMode("javascript",function(va,r){function p(a,d,b){G=a;O=b;return d}function A(a,d){var b=a.next();if('"'==b||"'"==b)return d.tokenize=
+wa(b),d.tokenize(a,d);if("."==b&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return p("number","number");if("."==b&&a.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(b))return p(b);if("\x3d"==b&&a.eat("\x3e"))return p("\x3d\x3e","operator");if("0"==b&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),p("number","number");if("0"==b&&a.eat(/o/i))return a.eatWhile(/[0-7]/i),p("number","number");if("0"==b&&a.eat(/b/i))return a.eatWhile(/[01]/i),p("number","number");if(/\d/.test(b))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),
+p("number","number");if("/"==b){if(a.eat("*"))return d.tokenize=P,P(a,d);if(a.eat("/"))return a.skipToEnd(),p("comment","comment");if(ha(a,d,1)){a:for(var b=!1,c,e=!1;null!=(c=a.next());){if(!b){if("/"==c&&!e)break a;"["==c?e=!0:e&&"]"==c&&(e=!1)}b=!b&&"\\"==c}a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);return p("regexp","string-2")}a.eatWhile(Q);return p("operator","operator",a.current())}if("`"==b)return d.tokenize=W,W(a,d);if("#"==b)return a.skipToEnd(),p("error","error");if(Q.test(b))return a.eatWhile(Q),
+p("operator","operator",a.current());if(X.test(b))return a.eatWhile(X),b=a.current(),(c=ia.propertyIsEnumerable(b)&&ia[b])&&"."!=d.lastType?p(c.type,c.style,b):p("variable","variable",b)}function wa(a){return function(d,b){var c=!1,e;if(R&&"@"==d.peek()&&d.match(xa))return b.tokenize=A,p("jsonld-keyword","meta");for(;null!=(e=d.next())&&(e!=a||c);)c=!c&&"\\"==e;c||(b.tokenize=A);return p("string","string")}}function P(a,d){for(var b=!1,c;c=a.next();){if("/"==c&&b){d.tokenize=A;break}b="*"==c}return p("comment",
+"comment")}function W(a,d){for(var b=!1,c;null!=(c=a.next());){if(!b&&("`"==c||"$"==c&&a.eat("{"))){d.tokenize=A;break}b=!b&&"\\"==c}return p("quasi","string-2",a.current())}function Y(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var e=a.string.indexOf("\x3d\x3e",a.start);if(!(0>e)){if(B){var c=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(a.string.slice(a.start,e));c&&(e=c.index)}for(var c=0,y=!1,e=e-1;0<=e;--e){var g=a.string.charAt(e),f="([{}])".indexOf(g);if(0<=f&&3>f){if(!c){++e;break}if(0==--c){"("==
+g&&(y=!0);break}}else if(3<=f&&6>f)++c;else if(X.test(g))y=!0;else{if(/["'\/]/.test(g))return;if(y&&!c){++e;break}}}y&&!c&&(b.fatArrowAt=e)}}function ja(a,b,e,c,f,g){this.indented=a;this.column=b;this.type=e;this.prev=f;this.info=g;null!=c&&(this.align=c)}function f(){for(var a=arguments.length-1;0<=a;a--)e.cc.push(arguments[a])}function b(){f.apply(null,arguments);return!0}function H(a){function b(d){for(;d;d=d.next)if(d.name==a)return!0;return!1}var l=e.state;e.marked="def";l.context?b(l.localVars)||
+(l.localVars={name:a,next:l.localVars}):!b(l.globalVars)&&r.globalVars&&(l.globalVars={name:a,next:l.globalVars})}function I(){e.state.context={prev:e.state.context,vars:e.state.localVars};e.state.localVars=ya}function J(){e.state.localVars=e.state.context.vars;e.state.context=e.state.context.prev}function k(a,b){var l=function(){var c=e.state,l=c.indented;if("stat"==c.lexical.type)l=c.lexical.indented;else for(var g=c.lexical;g&&")"==g.type&&g.align;g=g.prev)l=g.indented;c.lexical=new ja(l,e.stream.column(),
+a,null,c.lexical,b)};l.lex=!0;return l}function h(){var a=e.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function m(a){function d(e){return e==a?b():";"==a?f():b(d)}return d}function t(a,d){return"var"==a?b(k("vardef",d.length),Z,m(";"),h):"keyword a"==a?b(k("form"),aa,t,h):"keyword b"==a?b(k("form"),t,h):"{"==a?b(k("}"),S,h):";"==a?b():"if"==a?("else"==e.state.lexical.info&&e.state.cc[e.state.cc.length-1]==h&&e.state.cc.pop()(),b(k("form"),
+aa,t,h,ka)):"function"==a?b(x):"for"==a?b(k("form"),za,t,h):"variable"==a?b(k("stat"),Aa):"switch"==a?b(k("form"),aa,k("}","switch"),m("{"),S,h,h):"case"==a?b(n,m(":")):"default"==a?b(m(":")):"catch"==a?b(k("form"),I,m("("),ba,m(")"),t,h,J):"class"==a?b(k("form"),la,h):"export"==a?b(k("stat"),Ba,h):"import"==a?b(k("stat"),Ca,h):"module"==a?b(k("form"),u,k("}"),m("{"),S,h,h):"type"==a?b(w,m("operator"),w,m(";")):"async"==a?b(t):f(k("stat"),n,m(";"),h)}function n(a){return ma(a,!1)}function v(a){return ma(a,
+!0)}function aa(a){return"("!=a?f():b(k(")"),n,m(")"),h)}function ma(a,d){if(e.state.fatArrowAt==e.stream.start){var l=d?na:oa;if("("==a)return b(I,k(")"),z(u,")"),h,m("\x3d\x3e"),l,J);if("variable"==a)return f(I,u,m("\x3d\x3e"),l,J)}l=d?K:C;return Da.hasOwnProperty(a)?b(l):"function"==a?b(x,l):"class"==a?b(k("form"),Ea,h):"keyword c"==a||"async"==a?b(d?Fa:ca):"("==a?b(k(")"),ca,m(")"),h,l):"operator"==a||"spread"==a?b(d?v:n):"["==a?b(k("]"),Ga,h,l):"{"==a?L(da,"}",null,l):"quasi"==a?f(T,l):"new"==
+a?b(Ha(d)):b()}function ca(a){return a.match(/[;\}\)\],]/)?f():f(n)}function Fa(a){return a.match(/[;\}\)\],]/)?f():f(v)}function C(a,d){return","==a?b(n):K(a,d,!1)}function K(a,d,e){var c=0==e?C:K,y=0==e?n:v;if("\x3d\x3e"==a)return b(I,e?na:oa,J);if("operator"==a)return/\+\+|--/.test(d)?b(c):"?"==d?b(n,m(":"),y):b(y);if("quasi"==a)return f(T,c);if(";"!=a){if("("==a)return L(v,")","call",c);if("."==a)return b(Ia,c);if("["==a)return b(k("]"),ca,m("]"),h,c)}}function T(a,d){return"quasi"!=a?f():"${"!=
+d.slice(d.length-2)?b(T):b(n,Ja)}function Ja(a){if("}"==a)return e.marked="string-2",e.state.tokenize=W,b(T)}function oa(a){Y(e.stream,e.state);return f("{"==a?t:n)}function na(a){Y(e.stream,e.state);return f("{"==a?t:v)}function Ha(a){return function(d){return"."==d?b(a?Ka:La):f(a?v:n)}}function La(a,d){if("target"==d)return e.marked="keyword",b(C)}function Ka(a,d){if("target"==d)return e.marked="keyword",b(K)}function Aa(a){return":"==a?b(h,t):f(C,m(";"),h)}function Ia(a){if("variable"==a)return e.marked=
+"property",b()}function da(a,d){if("async"==a)return e.marked="property",b(da);if("variable"==a||"keyword"==e.style)return e.marked="property","get"==d||"set"==d?b(Ma):b(D);if("number"==a||"string"==a)return e.marked=R?"property":e.style+" property",b(D);if("jsonld-keyword"==a)return b(D);if("modifier"==a)return b(da);if("["==a)return b(n,m("]"),D);if("spread"==a)return b(n);if(":"==a)return f(D)}function Ma(a){if("variable"!=a)return f(D);e.marked="property";return b(x)}function D(a){if(":"==a)return b(v);
+if("("==a)return f(x)}function z(a,d){function l(c,h){if(","==c){var g=e.state.lexical;"call"==g.info&&(g.pos=(g.pos||0)+1);return b(function(b,c){return b==d||c==d?f():f(a)},l)}return c==d||h==d?b():b(m(d))}return function(c,e){return c==d||e==d?b():f(a,l)}}function L(a,d,l){for(var c=3;c<arguments.length;c++)e.cc.push(arguments[c]);return b(k(d,l),z(a,d),h)}function S(a){return"}"==a?b():f(t,S)}function U(a,d){if(B){if(":"==a)return b(w);if("?"==d)return b(U)}}function w(a){if("variable"==a)return e.marked=
+"variable-3",b(ea);if("{"==a)return b(z(pa,"}"));if("("==a)return b(z(qa,")"),Na)}function Na(a){if("\x3d\x3e"==a)return b(w)}function pa(a){if("variable"==a||"keyword"==e.style)return e.marked="property",b(pa);if(":"==a)return b(w)}function qa(a){if("variable"==a)return b(qa);if(":"==a)return b(w)}function ea(a,d){if("\x3c"==d)return b(z(w,"\x3e"),ea);if("["==a)return b(m("]"),ea)}function Z(){return f(u,U,M,Oa)}function u(a,d){if("modifier"==a)return b(u);if("variable"==a)return H(d),b();if("spread"==
+a)return b(u);if("["==a)return L(u,"]");if("{"==a)return L(Pa,"}")}function Pa(a,d){if("variable"==a&&!e.stream.match(/^\s*:/,!1))return H(d),b(M);"variable"==a&&(e.marked="property");return"spread"==a?b(u):"}"==a?f():b(m(":"),u,M)}function M(a,d){if("\x3d"==d)return b(v)}function Oa(a){if(","==a)return b(Z)}function ka(a,d){if("keyword b"==a&&"else"==d)return b(k("form","else"),t,h)}function za(a){if("("==a)return b(k(")"),Qa,m(")"),h)}function Qa(a){return"var"==a?b(Z,m(";"),V):";"==a?b(V):"variable"==
+a?b(Ra):f(n,m(";"),V)}function Ra(a,d){return"in"==d||"of"==d?(e.marked="keyword",b(n)):b(C,V)}function V(a,d){return";"==a?b(ra):"in"==d||"of"==d?(e.marked="keyword",b(n)):f(n,m(";"),ra)}function ra(a){")"!=a&&b(n)}function x(a,d){if("*"==d)return e.marked="keyword",b(x);if("variable"==a)return H(d),b(x);if("("==a)return b(I,k(")"),z(ba,")"),h,U,t,J)}function ba(a){return"spread"==a?b(ba):f(u,U,M)}function Ea(a,b){return"variable"==a?la(a,b):fa(a,b)}function la(a,d){if("variable"==a)return H(d),
+b(fa)}function fa(a,d){if("extends"==d||"implements"==d)return b(B?w:n,fa);if("{"==a)return b(k("}"),N,h)}function N(a,d){if("variable"==a||"keyword"==e.style){if(("static"==d||"get"==d||"set"==d||B&&("public"==d||"private"==d||"protected"==d||"readonly"==d||"abstract"==d))&&e.stream.match(/^\s+[\w$\xa1-\uffff]/,!1))return e.marked="keyword",b(N);e.marked="property";return b(B?sa:x,N)}if("*"==d)return e.marked="keyword",b(N);if(";"==a)return b(N);if("}"==a)return b()}function sa(a,d){return"?"==d?
+b(sa):":"==a?b(w,M):f(x)}function Ba(a,d){return"*"==d?(e.marked="keyword",b(ta,m(";"))):"default"==d?(e.marked="keyword",b(n,m(";"))):f(t)}function Ca(a){return"string"==a?b():f(ga,ta)}function ga(a,d){if("{"==a)return L(ga,"}");"variable"==a&&H(d);"*"==d&&(e.marked="keyword");return b(Sa)}function Sa(a,d){if("as"==d)return e.marked="keyword",b(ga)}function ta(a,d){if("from"==d)return e.marked="keyword",b(n)}function Ga(a){return"]"==a?b():f(z(v,"]"))}var E=va.indentUnit,ua=r.statementIndent,R=r.jsonld,
+F=r.json||R,B=r.typescript,X=r.wordCharacters||/[\w$\xa1-\uffff]/,ia=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),e=a("keyword b"),c=a("keyword c"),f=a("operator"),g={type:"atom",style:"atom"},b={"if":a("if"),"while":b,"with":b,"else":e,"do":e,"try":e,"finally":e,"return":c,"break":c,"continue":c,"new":a("new"),"delete":c,"throw":c,"debugger":c,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),
+"case":a("case"),"default":a("default"),"in":f,"typeof":f,"instanceof":f,"true":g,"false":g,"null":g,undefined:g,NaN:g,Infinity:g,"this":a("this"),"class":a("class"),"super":a("atom"),yield:c,"export":a("export"),"import":a("import"),"extends":c,await:c,async:a("async")};if(B){var e={type:"variable",style:"variable-3"},c={"interface":a("class"),"implements":c,namespace:c,module:a("module"),"enum":a("module"),type:a("type"),"public":a("modifier"),"private":a("modifier"),"protected":a("modifier"),"abstract":a("modifier"),
+as:f,string:e,number:e,"boolean":e,any:e},h;for(h in c)b[h]=c[h]}return b}(),Q=/[+\-*&%=<>!?|~^]/,xa=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,G,O,Da={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},e={state:null,column:null,marked:null,cc:null},ya={name:"this",next:{name:"arguments"}};h.lex=!0;return{startState:function(a){a={tokenize:A,lastType:"sof",cc:[],lexical:new ja((a||0)-E,0,"block",!1),localVars:r.localVars,context:r.localVars&&
+{vars:r.localVars},indented:a||0};r.globalVars&&"object"==typeof r.globalVars&&(a.globalVars=r.globalVars);return a},token:function(a,b){a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),Y(a,b));if(b.tokenize!=P&&a.eatSpace())return null;var f=b.tokenize(a,b);if("comment"==G)return f;b.lastType="operator"!=G||"++"!=O&&"--"!=O?G:"incdec";a:{var c=G,h=O,g=b.cc;e.state=b;e.stream=a;e.marked=null;e.cc=g;e.style=f;b.lexical.hasOwnProperty("align")||(b.lexical.align=
+!0);for(;;)if((g.length?g.pop():F?n:t)(c,h)){for(;g.length&&g[g.length-1].lex;)g.pop()();if(e.marked){f=e.marked;break a}if(c="variable"==c)b:{for(c=b.localVars;c;c=c.next)if(c.name==h){c=!0;break b}for(g=b.context;g;g=g.prev)for(c=g.vars;c;c=c.next)if(c.name==h){c=!0;break b}c=void 0}if(c){f="variable-2";break a}break a}}return f},indent:function(a,b){if(a.tokenize==P)return q.Pass;if(a.tokenize!=A)return 0;var e=b&&b.charAt(0),c=a.lexical,f;if(!/^\s*else\b/.test(b))for(var g=a.cc.length-1;0<=g;--g){var k=
+a.cc[g];if(k==h)c=c.prev;else if(k!=ka)break}for(;!("stat"!=c.type&&"form"!=c.type||"}"!=e&&(!(f=a.cc[a.cc.length-1])||f!=C&&f!=K||/^[,\.=+\-*:?[\(]/.test(b)));)c=c.prev;ua&&")"==c.type&&"stat"==c.prev.type&&(c=c.prev);f=c.type;g=e==f;return"vardef"==f?c.indented+("operator"==a.lastType||","==a.lastType?c.info+1:0):"form"==f&&"{"==e?c.indented:"form"==f?c.indented+E:"stat"==f?(e=c.indented,c="operator"==a.lastType||","==a.lastType||Q.test(b.charAt(0))||/[,.]/.test(b.charAt(0)),e+(c?ua||E:0)):"switch"!=
+c.info||g||0==r.doubleIndentSwitch?c.align?c.column+(g?0:1):c.indented+(g?0:E):c.indented+(/^(?:case|default)\b/.test(b)?E:2*E)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:F?null:"/*",blockCommentEnd:F?null:"*/",lineComment:F?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:F?"json":"javascript",jsonldMode:R,jsonMode:F,expressionAllowed:ha,skipExpression:function(a){var b=a.cc[a.cc.length-1];b!=n&&b!=v||a.cc.pop()}}});q.registerHelper("wordChars","javascript",
+/[\w$]/);q.defineMIME("text/javascript","javascript");q.defineMIME("text/ecmascript","javascript");q.defineMIME("application/javascript","javascript");q.defineMIME("application/x-javascript","javascript");q.defineMIME("application/ecmascript","javascript");q.defineMIME("application/json",{name:"javascript",json:!0});q.defineMIME("application/x-json",{name:"javascript",json:!0});q.defineMIME("application/ld+json",{name:"javascript",jsonld:!0});q.defineMIME("text/typescript",{name:"javascript",typescript:!0});
+q.defineMIME("application/typescript",{name:"javascript",typescript:!0})});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js	(revision 2)
@@ -0,0 +1,113 @@
+﻿(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],e):e(CodeMirror)})(function(e){function z(e){var n=d[e];return n?n:d[e]=new RegExp("\\s+"+e+"\\s*\x3d\\s*('|\")?([^'\"]+)('|\")?\\s*")}function C(d,e){var h=d.match(z(e));return h?/^\s*(.*?)\s*$/.exec(h[2])[1]:
+""}function w(d,e){for(var h in d)for(var g=e[h]||(e[h]=[]),l=d[h],b=l.length-1;0<=b;b--)g.unshift(l[b])}function y(d,e){for(var h=0;h<d.length;h++){var g=d[h];if(!g[0]||g[1].test(C(e,g[0])))return g[2]}}var t={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],
+[null,null,"css"]]},d={};e.defineMode("htmlmixed",function(d,n){function h(b,t){var n=g.token(b,t.htmlState),u=/\btag\b/.test(n),p;if(u&&!/[<>\s\/]/.test(b.current())&&(p=t.htmlState.tagName&&t.htmlState.tagName.toLowerCase())&&l.hasOwnProperty(p))t.inTag=p+" ";else if(t.inTag&&u&&/>$/.test(b.current())){u=/^([\S]+) (.*)/.exec(t.inTag);t.inTag=null;p="\x3e"==b.current()&&y(l[u[1]],u[2]);p=e.getMode(d,p);var a=new RegExp("^\x3c/s*"+u[1]+"s*\x3e","i"),c=new RegExp("\x3c/s*"+u[1]+"s*\x3e","i");t.token=
+function(b,d){if(b.match(a,!1))return d.token=h,d.localState=d.localMode=null;var e=d.localMode.token(b,d.localState),g=b.current(),t=g.search(c);-1<t?b.backUp(g.length-t):g.match(/<\/?$/)&&(b.backUp(g.length),b.match(c,!1)||b.match(g));return e};t.localMode=p;t.localState=e.startState(p,g.indent(t.htmlState,""))}else t.inTag&&(t.inTag+=b.current(),b.eol()&&(t.inTag+=" "));return n}var g=e.getMode(d,{name:"xml",htmlMode:!0,multilineTagIndentFactor:n.multilineTagIndentFactor,multilineTagIndentPastTag:n.multilineTagIndentPastTag}),
+l={},b=n&&n.tags,z=n&&n.scriptTypes;w(t,l);b&&w(b,l);if(z)for(b=z.length-1;0<=b;b--)l.script.unshift(["type",z[b].matches,z[b].mode]);return{startState:function(){var b=e.startState(g);return{token:h,inTag:null,localMode:null,localState:null,htmlState:b}},copyState:function(b){var d;b.localState&&(d=e.copyState(b.localMode,b.localState));return{token:b.token,inTag:b.inTag,localMode:b.localMode,localState:d,htmlState:e.copyState(g,b.htmlState)}},token:function(b,d){return d.token(b,d)},indent:function(b,
+d){return!b.localMode||/^\s*<\//.test(d)?g.indent(b.htmlState,d):b.localMode.indent?b.localMode.indent(b.localState,d):e.Pass},innerMode:function(b){return{state:b.localState||b.htmlState,mode:b.localMode||g}}}},"xml","javascript","css");e.defineMIME("text/html","htmlmixed")});
+(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){var z={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,
+dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,
+caseFold:!0},C={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1};e.defineMode("xml",function(w,y){function t(b,a){function c(d){a.tokenize=d;return d(b,a)}var m=b.next();if("\x3c"==m){if(b.eat("!"))return b.eat("[")?b.match("CDATA[")?c(n("atom","]]\x3e")):null:b.match("--")?c(n("comment","--\x3e")):b.match("DOCTYPE",!0,!0)?(b.eatWhile(/[\w\._\-]/),c(h(1))):null;if(b.eat("?"))return b.eatWhile(/[\w\._\-]/),a.tokenize=n("meta","?\x3e"),
+"meta";I=b.eat("/")?"closeTag":"openTag";a.tokenize=d;return"tag bracket"}if("\x26"==m)return(b.eat("#")?b.eat("x")?b.eatWhile(/[a-fA-F\d]/)&&b.eat(";"):b.eatWhile(/[\d]/)&&b.eat(";"):b.eatWhile(/[\w\.\-:]/)&&b.eat(";"))?"atom":"error";b.eatWhile(/[^&<]/);return null}function d(b,a){var c=b.next();if("\x3e"==c||"/"==c&&b.eat("\x3e"))return a.tokenize=t,I="\x3e"==c?"endTag":"selfcloseTag","tag bracket";if("\x3d"==c)return I="equals",null;if("\x3c"==c)return a.tokenize=t,a.state=D,a.tagName=a.tagStart=
+null,(c=a.tokenize(b,a))?c+" tag error":"tag error";if(/[\'\"]/.test(c))return a.tokenize=r(c),a.stringStartCol=b.column(),a.tokenize(b,a);b.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);return"word"}function r(b){var a=function(a,c){for(;!a.eol();)if(a.next()==b){c.tokenize=d;break}return"string"};a.isInAttribute=!0;return a}function n(b,a){return function(c,d){for(;!c.eol();){if(c.match(a)){d.tokenize=t;break}c.next()}return b}}function h(b){return function(a,c){for(var d;null!=(d=a.next());){if("\x3c"==
+d)return c.tokenize=h(b+1),c.tokenize(a,c);if("\x3e"==d)if(1==b){c.tokenize=t;break}else return c.tokenize=h(b-1),c.tokenize(a,c)}return"meta"}}function g(b,a,c){this.prev=b.context;this.tagName=a;this.indent=b.indented;this.startOfLine=c;if(H.doNotIndent.hasOwnProperty(a)||b.context&&b.context.noIndent)this.noIndent=!0}function l(b){b.context&&(b.context=b.context.prev)}function b(b,a){for(var c;b.context;){c=b.context.tagName;if(!H.contextGrabbers.hasOwnProperty(c)||!H.contextGrabbers[c].hasOwnProperty(a))break;
+l(b)}}function D(b,a,c){return"openTag"==b?(c.tagStart=a.column(),A):"closeTag"==b?G:D}function A(b,a,c){if("word"==b)return c.tagName=a.current(),E="tag",p;E="error";return A}function G(b,a,c){if("word"==b){b=a.current();c.context&&c.context.tagName!=b&&H.implicitlyClosed.hasOwnProperty(c.context.tagName)&&l(c);if(c.context&&c.context.tagName==b||!1===H.matchClosing)return E="tag",x;E="tag error";return u}E="error";return u}function x(b,c,a){if("endTag"!=b)return E="error",x;l(a);return D}function u(b,
+c,a){E="error";return x(b,c,a)}function p(c,d,m){if("word"==c)return E="attribute",a;if("endTag"==c||"selfcloseTag"==c){d=m.tagName;var e=m.tagStart;m.tagName=m.tagStart=null;"selfcloseTag"==c||H.autoSelfClosers.hasOwnProperty(d)?b(m,d):(b(m,d),m.context=new g(m,d,e==m.indented));return D}E="error";return p}function a(b,a,d){if("equals"==b)return c;H.allowMissing||(E="error");return p(b,a,d)}function c(b,c,a){if("string"==b)return m;if("word"==b&&H.allowUnquoted)return E="string",p;E="error";return p(b,
+c,a)}function m(b,c,a){return"string"==b?m:p(b,c,a)}var T=w.indentUnit,H={},U=y.htmlMode?z:C,O;for(O in U)H[O]=U[O];for(O in y)H[O]=y[O];var I,E;t.isInText=!0;return{startState:function(b){var c={tokenize:t,state:D,indented:b||0,tagName:null,tagStart:null,context:null};null!=b&&(c.baseIndent=b);return c},token:function(b,c){!c.tagName&&b.sol()&&(c.indented=b.indentation());if(b.eatSpace())return null;I=null;var a=c.tokenize(b,c);(a||I)&&"comment"!=a&&(E=null,c.state=c.state(I||a,b,c),E&&(a="error"==
+E?a+" error":E));return a},indent:function(b,c,a){var m=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+T;if(m&&m.noIndent)return e.Pass;if(b.tokenize!=d&&b.tokenize!=t)return a?a.match(/^(\s*)/)[0].length:0;if(b.tagName)return!1!==H.multilineTagIndentPastTag?b.tagStart+b.tagName.length+2:b.tagStart+T*(H.multilineTagIndentFactor||1);if(H.alignCDATA&&/<!\[CDATA\[/.test(c))return 0;if((c=c&&/^<(\/)?([\w_:\.-]*)/.exec(c))&&c[1])for(;m;)if(m.tagName==
+c[2]){m=m.prev;break}else if(H.implicitlyClosed.hasOwnProperty(m.tagName))m=m.prev;else break;else if(c)for(;m;)if((a=H.contextGrabbers[m.tagName])&&a.hasOwnProperty(c[2]))m=m.prev;else break;for(;m&&m.prev&&!m.startOfLine;)m=m.prev;return m?m.indent+T:b.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:H.htmlMode?"html":"xml",helperType:H.htmlMode?"html":"xml",skipAttribute:function(b){b.state==c&&(b.state=p)}}});e.defineMIME("text/xml",
+"xml");e.defineMIME("application/xml","xml");e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})});
+(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function z(e,w,y){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(w.lastType)||"quasi"==w.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(y||0)))}e.defineMode("javascript",function(C,w){function y(v,b,c){aa=v;da=c;return b}function t(v,b){var c=v.next();if('"'==c||"'"==c)return b.tokenize=
+d(c),b.tokenize(v,b);if("."==c&&v.match(/^\d+(?:[eE][+\-]?\d+)?/))return y("number","number");if("."==c&&v.match(".."))return y("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(c))return y(c);if("\x3d"==c&&v.eat("\x3e"))return y("\x3d\x3e","operator");if("0"==c&&v.eat(/x/i))return v.eatWhile(/[\da-f]/i),y("number","number");if("0"==c&&v.eat(/o/i))return v.eatWhile(/[0-7]/i),y("number","number");if("0"==c&&v.eat(/b/i))return v.eatWhile(/[01]/i),y("number","number");if(/\d/.test(c))return v.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),
+y("number","number");if("/"==c){if(v.eat("*"))return b.tokenize=r,r(v,b);if(v.eat("/"))return v.skipToEnd(),y("comment","comment");if(z(v,b,1)){a:for(var c=!1,a,f=!1;null!=(a=v.next());){if(!c){if("/"==a&&!f)break a;"["==a?f=!0:f&&"]"==a&&(f=!1)}c=!c&&"\\"==a}v.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);return y("regexp","string-2")}v.eatWhile(ea);return y("operator","operator",v.current())}if("`"==c)return b.tokenize=n,n(v,b);if("#"==c)return v.skipToEnd(),y("error","error");if(ea.test(c))return v.eatWhile(ea),
+y("operator","operator",v.current());if(ja.test(c))return v.eatWhile(ja),c=v.current(),(a=ta.propertyIsEnumerable(c)&&ta[c])&&"."!=b.lastType?y(a.type,a.style,c):y("variable","variable",c)}function d(b){return function(c,a){var f=!1,d;if(fa&&"@"==c.peek()&&c.match(Ba))return a.tokenize=t,y("jsonld-keyword","meta");for(;null!=(d=c.next())&&(d!=b||f);)f=!f&&"\\"==d;f||(a.tokenize=t);return y("string","string")}}function r(b,c){for(var a=!1,f;f=b.next();){if("/"==f&&a){c.tokenize=t;break}a="*"==f}return y("comment",
+"comment")}function n(b,c){for(var a=!1,f;null!=(f=b.next());){if(!a&&("`"==f||"$"==f&&b.eat("{"))){c.tokenize=t;break}a=!a&&"\\"==f}return y("quasi","string-2",b.current())}function h(b,c){c.fatArrowAt&&(c.fatArrowAt=null);var a=b.string.indexOf("\x3d\x3e",b.start);if(!(0>a)){if(V){var f=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(b.string.slice(b.start,a));f&&(a=f.index)}for(var f=0,d=!1,a=a-1;0<=a;--a){var k=b.string.charAt(a),m="([{}])".indexOf(k);if(0<=m&&3>m){if(!f){++a;break}if(0==--f){"("==
+k&&(d=!0);break}}else if(3<=m&&6>m)++f;else if(ja.test(k))d=!0;else{if(/["'\/]/.test(k))return;if(d&&!f){++a;break}}}d&&!f&&(c.fatArrowAt=a)}}function g(b,c,a,f,d,k){this.indented=b;this.column=c;this.type=a;this.prev=d;this.info=k;null!=f&&(this.align=f)}function l(){for(var b=arguments.length-1;0<=b;b--)q.cc.push(arguments[b])}function b(){l.apply(null,arguments);return!0}function D(b){function c(a){for(;a;a=a.next)if(a.name==b)return!0;return!1}var a=q.state;q.marked="def";a.context?c(a.localVars)||
+(a.localVars={name:b,next:a.localVars}):!c(a.globalVars)&&w.globalVars&&(a.globalVars={name:b,next:a.globalVars})}function A(){q.state.context={prev:q.state.context,vars:q.state.localVars};q.state.localVars=Ca}function G(){q.state.localVars=q.state.context.vars;q.state.context=q.state.context.prev}function x(b,c){var a=function(){var a=q.state,f=a.indented;if("stat"==a.lexical.type)f=a.lexical.indented;else for(var d=a.lexical;d&&")"==d.type&&d.align;d=d.prev)f=d.indented;a.lexical=new g(f,q.stream.column(),
+b,null,a.lexical,c)};a.lex=!0;return a}function u(){var b=q.state;b.lexical.prev&&(")"==b.lexical.type&&(b.indented=b.lexical.indented),b.lexical=b.lexical.prev)}function p(c){function a(f){return f==c?b():";"==c?l():b(a)}return a}function a(v,d){return"var"==v?b(x("vardef",d.length),J,p(";"),u):"keyword a"==v?b(x("form"),T,a,u):"keyword b"==v?b(x("form"),a,u):"{"==v?b(x("}"),F,u):";"==v?b():"if"==v?("else"==q.state.lexical.info&&q.state.cc[q.state.cc.length-1]==u&&q.state.cc.pop()(),b(x("form"),
+T,a,u,ua)):"function"==v?b(P):"for"==v?b(x("form"),Da,a,u):"variable"==v?b(x("stat"),ka):"switch"==v?b(x("form"),T,x("}","switch"),p("{"),F,u,u):"case"==v?b(c,p(":")):"default"==v?b(p(":")):"catch"==v?b(x("form"),A,p("("),la,p(")"),a,u,G):"class"==v?b(x("form"),va,u):"export"==v?b(x("stat"),Ea,u):"import"==v?b(x("stat"),Fa,u):"module"==v?b(x("form"),f,x("}"),p("{"),F,u,u):"type"==v?b(K,p("operator"),K,p(";")):"async"==v?b(a):l(x("stat"),c,p(";"),u)}function c(b){return H(b,!1)}function m(b){return H(b,
+!0)}function T(a){return"("!=a?l():b(x(")"),c,p(")"),u)}function H(a,d){if(q.state.fatArrowAt==q.stream.start){var k=d?sa:ra;if("("==a)return b(A,x(")"),N(f,")"),u,p("\x3d\x3e"),k,G);if("variable"==a)return l(A,f,p("\x3d\x3e"),k,G)}k=d?E:I;return Ga.hasOwnProperty(a)?b(k):"function"==a?b(P,k):"class"==a?b(x("form"),Ha,u):"keyword c"==a||"async"==a?b(d?O:U):"("==a?b(x(")"),U,p(")"),u,k):"operator"==a||"spread"==a?b(d?m:c):"["==a?b(x("]"),Ia,u,k):"{"==a?M(W,"}",null,k):"quasi"==a?l(ca,k):"new"==a?b(ia(d)):
+b()}function U(b){return b.match(/[;\}\)\],]/)?l():l(c)}function O(b){return b.match(/[;\}\)\],]/)?l():l(m)}function I(a,f){return","==a?b(c):E(a,f,!1)}function E(a,f,d){var k=0==d?I:E,e=0==d?c:m;if("\x3d\x3e"==a)return b(A,d?sa:ra,G);if("operator"==a)return/\+\+|--/.test(f)?b(k):"?"==f?b(c,p(":"),e):b(e);if("quasi"==a)return l(ca,k);if(";"!=a){if("("==a)return M(m,")","call",k);if("."==a)return b(ma,k);if("["==a)return b(x("]"),U,p("]"),u,k)}}function ca(a,f){return"quasi"!=a?l():"${"!=f.slice(f.length-
+2)?b(ca):b(c,Aa)}function Aa(a){if("}"==a)return q.marked="string-2",q.state.tokenize=n,b(ca)}function ra(b){h(q.stream,q.state);return l("{"==b?a:c)}function sa(b){h(q.stream,q.state);return l("{"==b?a:m)}function ia(a){return function(f){return"."==f?b(a?Q:na):l(a?m:c)}}function na(a,c){if("target"==c)return q.marked="keyword",b(I)}function Q(a,c){if("target"==c)return q.marked="keyword",b(E)}function ka(c){return":"==c?b(u,a):l(I,p(";"),u)}function ma(a){if("variable"==a)return q.marked="property",
+b()}function W(a,f){if("async"==a)return q.marked="property",b(W);if("variable"==a||"keyword"==q.style)return q.marked="property","get"==f||"set"==f?b(oa):b(R);if("number"==a||"string"==a)return q.marked=fa?"property":q.style+" property",b(R);if("jsonld-keyword"==a)return b(R);if("modifier"==a)return b(W);if("["==a)return b(c,p("]"),R);if("spread"==a)return b(c);if(":"==a)return l(R)}function oa(a){if("variable"!=a)return l(R);q.marked="property";return b(P)}function R(a){if(":"==a)return b(m);if("("==
+a)return l(P)}function N(a,c){function f(d,k){if(","==d){var m=q.state.lexical;"call"==m.info&&(m.pos=(m.pos||0)+1);return b(function(b,f){return b==c||f==c?l():l(a)},f)}return d==c||k==c?b():b(p(c))}return function(d,k){return d==c||k==c?b():l(a,f)}}function M(a,c,f){for(var d=3;d<arguments.length;d++)q.cc.push(arguments[d]);return b(x(c,f),N(a,c),u)}function F(c){return"}"==c?b():l(a,F)}function L(a,c){if(V){if(":"==a)return b(K);if("?"==c)return b(L)}}function K(a){if("variable"==a)return q.marked=
+"variable-3",b(B);if("{"==a)return b(N(ga,"}"));if("("==a)return b(N(X,")"),S)}function S(a){if("\x3d\x3e"==a)return b(K)}function ga(a){if("variable"==a||"keyword"==q.style)return q.marked="property",b(ga);if(":"==a)return b(K)}function X(a){if("variable"==a)return b(X);if(":"==a)return b(K)}function B(a,c){if("\x3c"==c)return b(N(K,"\x3e"),B);if("["==a)return b(p("]"),B)}function J(){return l(f,L,k,Ja)}function f(a,c){if("modifier"==a)return b(f);if("variable"==a)return D(c),b();if("spread"==a)return b(f);
+if("["==a)return M(f,"]");if("{"==a)return M(Ka,"}")}function Ka(a,c){if("variable"==a&&!q.stream.match(/^\s*:/,!1))return D(c),b(k);"variable"==a&&(q.marked="property");return"spread"==a?b(f):"}"==a?l():b(p(":"),f,k)}function k(a,c){if("\x3d"==c)return b(m)}function Ja(a){if(","==a)return b(J)}function ua(c,f){if("keyword b"==c&&"else"==f)return b(x("form","else"),a,u)}function Da(a){if("("==a)return b(x(")"),La,p(")"),u)}function La(a){return"var"==a?b(J,p(";"),ha):";"==a?b(ha):"variable"==a?b(Ma):
+l(c,p(";"),ha)}function Ma(a,f){return"in"==f||"of"==f?(q.marked="keyword",b(c)):b(I,ha)}function ha(a,f){return";"==a?b(wa):"in"==f||"of"==f?(q.marked="keyword",b(c)):l(c,p(";"),wa)}function wa(a){")"!=a&&b(c)}function P(c,f){if("*"==f)return q.marked="keyword",b(P);if("variable"==c)return D(f),b(P);if("("==c)return b(A,x(")"),N(la,")"),u,L,a,G)}function la(a){return"spread"==a?b(la):l(f,L,k)}function Ha(a,b){return"variable"==a?va(a,b):pa(a,b)}function va(a,c){if("variable"==a)return D(c),b(pa)}
+function pa(a,f){if("extends"==f||"implements"==f)return b(V?K:c,pa);if("{"==a)return b(x("}"),ba,u)}function ba(a,c){if("variable"==a||"keyword"==q.style){if(("static"==c||"get"==c||"set"==c||V&&("public"==c||"private"==c||"protected"==c||"readonly"==c||"abstract"==c))&&q.stream.match(/^\s+[\w$\xa1-\uffff]/,!1))return q.marked="keyword",b(ba);q.marked="property";return b(V?xa:P,ba)}if("*"==c)return q.marked="keyword",b(ba);if(";"==a)return b(ba);if("}"==a)return b()}function xa(a,c){return"?"==c?
+b(xa):":"==a?b(K,k):l(P)}function Ea(f,d){return"*"==d?(q.marked="keyword",b(ya,p(";"))):"default"==d?(q.marked="keyword",b(c,p(";"))):l(a)}function Fa(a){return"string"==a?b():l(qa,ya)}function qa(a,c){if("{"==a)return M(qa,"}");"variable"==a&&D(c);"*"==c&&(q.marked="keyword");return b(Na)}function Na(a,c){if("as"==c)return q.marked="keyword",b(qa)}function ya(a,f){if("from"==f)return q.marked="keyword",b(c)}function Ia(a){return"]"==a?b():l(N(m,"]"))}var Y=C.indentUnit,za=w.statementIndent,fa=w.jsonld,
+Z=w.json||fa,V=w.typescript,ja=w.wordCharacters||/[\w$\xa1-\uffff]/,ta=function(){function a(b){return{type:b,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),f=a("keyword c"),d=a("operator"),k={type:"atom",style:"atom"},b={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":f,"break":f,"continue":f,"new":a("new"),"delete":f,"throw":f,"debugger":f,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),
+"case":a("case"),"default":a("default"),"in":d,"typeof":d,"instanceof":d,"true":k,"false":k,"null":k,undefined:k,NaN:k,Infinity:k,"this":a("this"),"class":a("class"),"super":a("atom"),yield:f,"export":a("export"),"import":a("import"),"extends":f,await:f,async:a("async")};if(V){var c={type:"variable",style:"variable-3"},f={"interface":a("class"),"implements":f,namespace:f,module:a("module"),"enum":a("module"),type:a("type"),"public":a("modifier"),"private":a("modifier"),"protected":a("modifier"),"abstract":a("modifier"),
+as:d,string:c,number:c,"boolean":c,any:c},m;for(m in f)b[m]=f[m]}return b}(),ea=/[+\-*&%=<>!?|~^]/,Ba=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,aa,da,Ga={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},q={state:null,column:null,marked:null,cc:null},Ca={name:"this",next:{name:"arguments"}};u.lex=!0;return{startState:function(a){a={tokenize:t,lastType:"sof",cc:[],lexical:new g((a||0)-Y,0,"block",!1),localVars:w.localVars,
+context:w.localVars&&{vars:w.localVars},indented:a||0};w.globalVars&&"object"==typeof w.globalVars&&(a.globalVars=w.globalVars);return a},token:function(b,f){b.sol()&&(f.lexical.hasOwnProperty("align")||(f.lexical.align=!1),f.indented=b.indentation(),h(b,f));if(f.tokenize!=r&&b.eatSpace())return null;var d=f.tokenize(b,f);if("comment"==aa)return d;f.lastType="operator"!=aa||"++"!=da&&"--"!=da?aa:"incdec";a:{var k=aa,m=da,e=f.cc;q.state=f;q.stream=b;q.marked=null;q.cc=e;q.style=d;f.lexical.hasOwnProperty("align")||
+(f.lexical.align=!0);for(;;)if((e.length?e.pop():Z?c:a)(k,m)){for(;e.length&&e[e.length-1].lex;)e.pop()();if(q.marked){d=q.marked;break a}if(k="variable"==k)b:{for(k=f.localVars;k;k=k.next)if(k.name==m){k=!0;break b}for(e=f.context;e;e=e.prev)for(k=e.vars;k;k=k.next)if(k.name==m){k=!0;break b}k=void 0}if(k){d="variable-2";break a}break a}}return d},indent:function(a,b){if(a.tokenize==r)return e.Pass;if(a.tokenize!=t)return 0;var c=b&&b.charAt(0),f=a.lexical,d;if(!/^\s*else\b/.test(b))for(var k=a.cc.length-
+1;0<=k;--k){var m=a.cc[k];if(m==u)f=f.prev;else if(m!=ua)break}for(;!("stat"!=f.type&&"form"!=f.type||"}"!=c&&(!(d=a.cc[a.cc.length-1])||d!=I&&d!=E||/^[,\.=+\-*:?[\(]/.test(b)));)f=f.prev;za&&")"==f.type&&"stat"==f.prev.type&&(f=f.prev);d=f.type;k=c==d;return"vardef"==d?f.indented+("operator"==a.lastType||","==a.lastType?f.info+1:0):"form"==d&&"{"==c?f.indented:"form"==d?f.indented+Y:"stat"==d?(c=f.indented,f="operator"==a.lastType||","==a.lastType||ea.test(b.charAt(0))||/[,.]/.test(b.charAt(0)),
+c+(f?za||Y:0)):"switch"!=f.info||k||0==w.doubleIndentSwitch?f.align?f.column+(k?0:1):f.indented+(k?0:Y):f.indented+(/^(?:case|default)\b/.test(b)?Y:2*Y)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Z?null:"/*",blockCommentEnd:Z?null:"*/",lineComment:Z?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Z?"json":"javascript",jsonldMode:fa,jsonMode:Z,expressionAllowed:z,skipExpression:function(a){var b=a.cc[a.cc.length-1];b!=c&&b!=m||a.cc.pop()}}});e.registerHelper("wordChars",
+"javascript",/[\w$]/);e.defineMIME("text/javascript","javascript");e.defineMIME("text/ecmascript","javascript");e.defineMIME("application/javascript","javascript");e.defineMIME("application/x-javascript","javascript");e.defineMIME("application/ecmascript","javascript");e.defineMIME("application/json",{name:"javascript",json:!0});e.defineMIME("application/x-json",{name:"javascript",json:!0});e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0});e.defineMIME("text/typescript",{name:"javascript",
+typescript:!0});e.defineMIME("application/typescript",{name:"javascript",typescript:!0})});
+(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function z(a){for(var b={},c=0;c<a.length;++c)b[a[c].toLowerCase()]=!0;return b}function C(a,b){for(var c=!1,d;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}e.defineMode("css",function(a,b){function c(a,b){X=b;return a}function d(a,b){var k=a.next();if(y[k]){var m=
+y[k](a,b);if(!1!==m)return m}if("@"==k)return a.eatWhile(/[\w\\\-]/),c("def",a.current());if("\x3d"==k||("~"==k||"|"==k)&&a.eat("\x3d"))return c(null,"compare");if('"'==k||"'"==k)return b.tokenize=g(k),b.tokenize(a,b);if("#"==k)return a.eatWhile(/[\w\\\-]/),c("atom","hash");if("!"==k)return a.match(/^\s*\w*/),c("keyword","important");if(/\d/.test(k)||"."==k&&a.eat(/\d/))return a.eatWhile(/[\w.%]/),c("number","unit");if("-"===k){if(/[\d.]/.test(a.peek()))return a.eatWhile(/[\w.%]/),c("number","unit");
+if(a.match(/^-[\w\\\-]+/))return a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?c("variable-2","variable-definition"):c("variable-2","variable");if(a.match(/^\w+-/))return c("meta","meta")}else return/[,+>*\/]/.test(k)?c(null,"select-op"):"."==k&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?c("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(k)?c(null,k):"u"==k&&a.match(/rl(-prefix)?\(/)||"d"==k&&a.match("omain(")||"r"==k&&a.match("egexp(")?(a.backUp(1),b.tokenize=t,c("property","word")):/[\w\\\-]/.test(k)?(a.eatWhile(/[\w\\\-]/),
+c("property","word")):c(null,null)}function g(a){return function(b,d){for(var m=!1,e;null!=(e=b.next());){if(e==a&&!m){")"==a&&b.backUp(1);break}m=!m&&"\\"==e}if(e==a||!m&&")"!=a)d.tokenize=null;return c("string","string")}}function t(a,b){a.next();a.match(/\s*[\"\')]/,!1)?b.tokenize=null:b.tokenize=g(")");return c(null,"(")}function l(a,b,c){this.type=a;this.indent=b;this.prev=c}function h(a,b,c,d){a.context=new l(c,b.indentation()+(!1===d?0:w),a.context);return c}function n(a){a.context.prev&&(a.context=
+a.context.prev);return a.context.type}function p(a,b,c,d){for(d=d||1;0<d;d--)c.context=c.context.prev;return J[c.context.type](a,b,c)}function r(a){a=a.current().toLowerCase();B=K.hasOwnProperty(a)?"atom":L.hasOwnProperty(a)?"keyword":"variable"}var u=b.inline;b.propertyKeywords||(b=e.resolveMode("text/css"));var w=a.indentUnit,y=b.tokenHooks,x=b.documentTypes||{},z=b.mediaTypes||{},A=b.mediaFeatures||{},C=b.mediaValueKeywords||{},D=b.propertyKeywords||{},G=b.nonStandardPropertyKeywords||{},M=b.fontProperties||
+{},F=b.counterDescriptors||{},L=b.colorKeywords||{},K=b.valueKeywords||{},S=b.allowNested,ga=!0===b.supportsAtComponent,X,B,J={top:function(a,b,c){if("{"==a)return h(c,b,"block");if("}"==a&&c.context.prev)return n(c);if(ga&&/@component/.test(a))return h(c,b,"atComponentBlock");if(/^@(-moz-)?document$/.test(a))return h(c,b,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/.test(a))return h(c,b,"atBlock");if(/^@(font-face|counter-style)/.test(a))return c.stateArg=a,"restricted_atBlock_before";
+if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return h(c,b,"at");if("hash"==a)B="builtin";else if("word"==a)B="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return h(c,b,"interpolation");if(":"==a)return"pseudo";if(S&&"("==a)return h(c,b,"parens")}return c.context.type},block:function(a,b,c){if("word"==a){a=b.current().toLowerCase();if(D.hasOwnProperty(a))return B="property","maybeprop";if(G.hasOwnProperty(a))return B="string-2",
+"maybeprop";if(S)return B=b.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block";B+=" error";return"maybeprop"}if("meta"==a)return"block";if(S||"hash"!=a&&"qualifier"!=a)return J.top(a,b,c);B="error";return"block"},maybeprop:function(a,b,c){return":"==a?h(c,b,"prop"):J[c.context.type](a,b,c)},prop:function(a,b,c){if(";"==a)return n(c);if("{"==a&&S)return h(c,b,"propBlock");if("}"==a||"{"==a)return p(a,b,c);if("("==a)return h(c,b,"parens");if("hash"==a&&!/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(b.current()))B+=
+" error";else if("word"==a)r(b);else if("interpolation"==a)return h(c,b,"interpolation");return"prop"},propBlock:function(a,b,c){return"}"==a?n(c):"word"==a?(B="property","maybeprop"):c.context.type},parens:function(a,b,c){if("{"==a||"}"==a)return p(a,b,c);if(")"==a)return n(c);if("("==a)return h(c,b,"parens");if("interpolation"==a)return h(c,b,"interpolation");"word"==a&&r(b);return"parens"},pseudo:function(a,b,c){return"word"==a?(B="variable-3",c.context.type):J[c.context.type](a,b,c)},documentTypes:function(a,
+b,c){return"word"==a&&x.hasOwnProperty(b.current())?(B="tag",c.context.type):J.atBlock(a,b,c)},atBlock:function(a,b,c){if("("==a)return h(c,b,"atBlock_parens");if("}"==a||";"==a)return p(a,b,c);if("{"==a)return n(c)&&h(c,b,S?"block":"top");if("interpolation"==a)return h(c,b,"interpolation");"word"==a&&(a=b.current().toLowerCase(),B="only"==a||"not"==a||"and"==a||"or"==a?"keyword":z.hasOwnProperty(a)?"attribute":A.hasOwnProperty(a)?"property":C.hasOwnProperty(a)?"keyword":D.hasOwnProperty(a)?"property":
+G.hasOwnProperty(a)?"string-2":K.hasOwnProperty(a)?"atom":L.hasOwnProperty(a)?"keyword":"error");return c.context.type},atComponentBlock:function(a,b,c){if("}"==a)return p(a,b,c);if("{"==a)return n(c)&&h(c,b,S?"block":"top",!1);"word"==a&&(B="error");return c.context.type},atBlock_parens:function(a,b,c){return")"==a?n(c):"{"==a||"}"==a?p(a,b,c,2):J.atBlock(a,b,c)},restricted_atBlock_before:function(a,b,c){return"{"==a?h(c,b,"restricted_atBlock"):"word"==a&&"@counter-style"==c.stateArg?(B="variable",
+"restricted_atBlock_before"):J[c.context.type](a,b,c)},restricted_atBlock:function(a,b,c){return"}"==a?(c.stateArg=null,n(c)):"word"==a?(B="@font-face"==c.stateArg&&!M.hasOwnProperty(b.current().toLowerCase())||"@counter-style"==c.stateArg&&!F.hasOwnProperty(b.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(a,b,c){return"word"==a?(B="variable","keyframes"):"{"==a?h(c,b,"top"):J[c.context.type](a,b,c)},at:function(a,b,c){if(";"==a)return n(c);if("{"==
+a||"}"==a)return p(a,b,c);"word"==a?B="tag":"hash"==a&&(B="builtin");return"at"},interpolation:function(a,b,c){if("}"==a)return n(c);if("{"==a||";"==a)return p(a,b,c);"word"==a?B="variable":"variable"!=a&&"("!=a&&")"!=a&&(B="error");return"interpolation"}};return{startState:function(a){return{tokenize:null,state:u?"block":"top",stateArg:null,context:new l(u?"block":"top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||d)(a,b);c&&"object"==typeof c&&(X=
+c[1],c=c[0]);B=c;b.state=J[b.state](X,a,b);return B},indent:function(a,b){var c=a.context,d=b&&b.charAt(0),m=c.indent;"prop"!=c.type||"}"!=d&&")"!=d||(c=c.prev);if(c.prev)if("}"==d&&("block"==c.type||"top"==c.type||"interpolation"==c.type||"restricted_atBlock"==c.type))c=c.prev,m=c.indent;else if(")"==d&&("parens"==c.type||"atBlock_parens"==c.type)||"{"==d&&("at"==c.type||"atBlock"==c.type))m=Math.max(0,c.indent-w);return m},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});
+var w=["domain","regexp","url","url-prefix"],y=z(w),t="all aural braille handheld print projection screen tty tv embossed".split(" "),d=z(t),r="width min-width max-width height min-height max-height device-width min-device-width max-device-width device-height min-device-height max-device-height aspect-ratio min-aspect-ratio max-aspect-ratio device-aspect-ratio min-device-aspect-ratio max-device-aspect-ratio color min-color max-color color-index min-color-index max-color-index monochrome min-monochrome max-monochrome resolution min-resolution max-resolution scan grid orientation device-pixel-ratio min-device-pixel-ratio max-device-pixel-ratio pointer any-pointer hover any-hover".split(" "),
+n=z(r),h="landscape portrait none coarse fine on-demand hover interlace progressive".split(" "),g=z(h),l="align-content align-items align-self alignment-adjust alignment-baseline anchor-point animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function appearance azimuth backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size baseline-shift binding bleed bookmark-label bookmark-level bookmark-state bookmark-target border border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip color color-profile column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width columns content counter-increment counter-reset crop cue cue-after cue-before cursor direction display dominant-baseline drop-initial-after-adjust drop-initial-after-align drop-initial-before-adjust drop-initial-before-align drop-initial-size drop-initial-value elevation empty-cells fit fit-position flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float float-offset flow-from flow-into font font-feature-settings font-family font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-rows grid-column grid-column-end grid-column-gap grid-column-start grid-gap grid-row grid-row-end grid-row-gap grid-row-start grid-template grid-template-areas grid-template-columns grid-template-rows hanging-punctuation height hyphens icon image-orientation image-rendering image-resolution inline-box-align justify-content left letter-spacing line-break line-height line-stacking line-stacking-ruby line-stacking-shift line-stacking-strategy list-style list-style-image list-style-position list-style-type margin margin-bottom margin-left margin-right margin-top marks marquee-direction marquee-loop marquee-play-count marquee-speed marquee-style max-height max-width min-height min-width move-to nav-down nav-index nav-left nav-right nav-up object-fit object-position opacity order orphans outline outline-color outline-offset outline-style outline-width overflow overflow-style overflow-wrap overflow-x overflow-y padding padding-bottom padding-left padding-right padding-top page page-break-after page-break-before page-break-inside page-policy pause pause-after pause-before perspective perspective-origin pitch pitch-range play-during position presentation-level punctuation-trim quotes region-break-after region-break-before region-break-inside region-fragment rendering-intent resize rest rest-after rest-before richness right rotation rotation-point ruby-align ruby-overhang ruby-position ruby-span shape-image-threshold shape-inside shape-margin shape-outside size speak speak-as speak-header speak-numeral speak-punctuation speech-rate stress string-set tab-size table-layout target target-name target-new target-position text-align text-align-last text-decoration text-decoration-color text-decoration-line text-decoration-skip text-decoration-style text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-height text-indent text-justify text-outline text-overflow text-shadow text-size-adjust text-space-collapse text-transform text-underline-position text-wrap top transform transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi user-select vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-range voice-rate voice-stress voice-volume volume white-space widows width word-break word-spacing word-wrap z-index clip-path clip-rule mask enable-background filter flood-color flood-opacity lighting-color stop-color stop-opacity pointer-events color-interpolation color-interpolation-filters color-rendering fill fill-opacity fill-rule image-rendering marker marker-end marker-mid marker-start shape-rendering stroke stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-rendering baseline-shift dominant-baseline glyph-orientation-horizontal glyph-orientation-vertical text-anchor writing-mode".split(" "),
+b=z(l),D="scrollbar-arrow-color scrollbar-base-color scrollbar-dark-shadow-color scrollbar-face-color scrollbar-highlight-color scrollbar-shadow-color scrollbar-3d-light-color scrollbar-track-color shape-inside searchfield-cancel-button searchfield-decoration searchfield-results-button searchfield-results-decoration zoom".split(" "),A=z(D),G=z("font-family src unicode-range font-variant font-feature-settings font-stretch font-weight font-style".split(" ")),x=z("additive-symbols fallback negative pad prefix range speak-as suffix symbols system".split(" ")),
+u="aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise darkviolet deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray grey green greenyellow honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray lightgreen lightpink lightsalmon lightseagreen lightskyblue lightslategray lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue slateblue slategray snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen".split(" "),
+p=z(u),a="above absolute activeborder additive activecaption afar after-white-space ahead alias all all-scroll alphabetic alternate always amharic amharic-abegede antialiased appworkspace arabic-indic armenian asterisks attr auto avoid avoid-column avoid-page avoid-region background backwards baseline below bidi-override binary bengali blink block block-axis bold bolder border border-box both bottom break break-all break-word bullets button button-bevel buttonface buttonhighlight buttonshadow buttontext calc cambodian capitalize caps-lock-indicator caption captiontext caret cell center checkbox circle cjk-decimal cjk-earthly-branch cjk-heavenly-stem cjk-ideographic clear clip close-quote col-resize collapse color color-burn color-dodge column column-reverse compact condensed contain content content-box context-menu continuous copy counter counters cover crop cross crosshair currentcolor cursive cyclic darken dashed decimal decimal-leading-zero default default-button dense destination-atop destination-in destination-out destination-over devanagari difference disc discard disclosure-closed disclosure-open document dot-dash dot-dot-dash dotted double down e-resize ease ease-in ease-in-out ease-out element ellipse ellipsis embed end ethiopic ethiopic-abegede ethiopic-abegede-am-et ethiopic-abegede-gez ethiopic-abegede-ti-er ethiopic-abegede-ti-et ethiopic-halehame-aa-er ethiopic-halehame-aa-et ethiopic-halehame-am-et ethiopic-halehame-gez ethiopic-halehame-om-et ethiopic-halehame-sid-et ethiopic-halehame-so-et ethiopic-halehame-ti-er ethiopic-halehame-ti-et ethiopic-halehame-tig ethiopic-numeric ew-resize exclusion expanded extends extra-condensed extra-expanded fantasy fast fill fixed flat flex flex-end flex-start footnotes forwards from geometricPrecision georgian graytext grid groove gujarati gurmukhi hand hangul hangul-consonant hard-light hebrew help hidden hide higher highlight highlighttext hiragana hiragana-iroha horizontal hsl hsla hue icon ignore inactiveborder inactivecaption inactivecaptiontext infinite infobackground infotext inherit initial inline inline-axis inline-block inline-flex inline-grid inline-table inset inside intrinsic invert italic japanese-formal japanese-informal justify kannada katakana katakana-iroha keep-all khmer korean-hangul-formal korean-hanja-formal korean-hanja-informal landscape lao large larger left level lighter lighten line-through linear linear-gradient lines list-item listbox listitem local logical loud lower lower-alpha lower-armenian lower-greek lower-hexadecimal lower-latin lower-norwegian lower-roman lowercase ltr luminosity malayalam match matrix matrix3d media-controls-background media-current-time-display media-fullscreen-button media-mute-button media-play-button media-return-to-realtime-button media-rewind-button media-seek-back-button media-seek-forward-button media-slider media-sliderthumb media-time-remaining-display media-volume-slider media-volume-slider-container media-volume-sliderthumb medium menu menulist menulist-button menulist-text menulist-textfield menutext message-box middle min-intrinsic mix mongolian monospace move multiple multiply myanmar n-resize narrower ne-resize nesw-resize no-close-quote no-drop no-open-quote no-repeat none normal not-allowed nowrap ns-resize numbers numeric nw-resize nwse-resize oblique octal open-quote optimizeLegibility optimizeSpeed oriya oromo outset outside outside-shape overlay overline padding padding-box painted page paused persian perspective plus-darker plus-lighter pointer polygon portrait pre pre-line pre-wrap preserve-3d progress push-button radial-gradient radio read-only read-write read-write-plaintext-only rectangle region relative repeat repeating-linear-gradient repeating-radial-gradient repeat-x repeat-y reset reverse rgb rgba ridge right rotate rotate3d rotateX rotateY rotateZ round row row-resize row-reverse rtl run-in running s-resize sans-serif saturation scale scale3d scaleX scaleY scaleZ screen scroll scrollbar se-resize searchfield searchfield-cancel-button searchfield-decoration searchfield-results-button searchfield-results-decoration semi-condensed semi-expanded separate serif show sidama simp-chinese-formal simp-chinese-informal single skew skewX skewY skip-white-space slide slider-horizontal slider-vertical sliderthumb-horizontal sliderthumb-vertical slow small small-caps small-caption smaller soft-light solid somali source-atop source-in source-out source-over space space-around space-between spell-out square square-button start static status-bar stretch stroke sub subpixel-antialiased super sw-resize symbolic symbols table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group tamil telugu text text-bottom text-top textarea textfield thai thick thin threeddarkshadow threedface threedhighlight threedlightshadow threedshadow tibetan tigre tigrinya-er tigrinya-er-abegede tigrinya-et tigrinya-et-abegede to top trad-chinese-formal trad-chinese-informal translate translate3d translateX translateY translateZ transparent ultra-condensed ultra-expanded underline up upper-alpha upper-armenian upper-greek upper-hexadecimal upper-latin upper-norwegian upper-roman uppercase urdu url var vertical vertical-text visible visibleFill visiblePainted visibleStroke visual w-resize wait wave wider window windowframe windowtext words wrap wrap-reverse x-large x-small xor xx-large xx-small".split(" "),
+c=z(a),w=w.concat(t).concat(r).concat(h).concat(l).concat(D).concat(u).concat(a);e.registerHelper("hintWords","css",w);e.defineMIME("text/css",{documentTypes:y,mediaTypes:d,mediaFeatures:n,mediaValueKeywords:g,propertyKeywords:b,nonStandardPropertyKeywords:A,fontProperties:G,counterDescriptors:x,colorKeywords:p,valueKeywords:c,tokenHooks:{"/":function(a,c){if(!a.eat("*"))return!1;c.tokenize=C;return C(a,c)}},name:"css"});e.defineMIME("text/x-scss",{mediaTypes:d,mediaFeatures:n,mediaValueKeywords:g,
+propertyKeywords:b,nonStandardPropertyKeywords:A,colorKeywords:p,valueKeywords:c,fontProperties:G,allowNested:!0,tokenHooks:{"/":function(a,c){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(c.tokenize=C,C(a,c)):["operator","operator"]},":":function(a){return a.match(/\s*\{/)?[null,"{"]:!1},$:function(a){a.match(/^[\w-]+/);return a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return a.eat("{")?[null,"interpolation"]:!1}},name:"css",
+helperType:"scss"});e.defineMIME("text/x-less",{mediaTypes:d,mediaFeatures:n,mediaValueKeywords:g,propertyKeywords:b,nonStandardPropertyKeywords:A,colorKeywords:p,valueKeywords:c,fontProperties:G,allowNested:!0,tokenHooks:{"/":function(a,c){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(c.tokenize=C,C(a,c)):["operator","operator"]},"@":function(a){if(a.eat("{"))return[null,"interpolation"];if(a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,
+!1))return!1;a.eatWhile(/[\w\\\-]/);return a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"\x26":function(){return["atom","atom"]}},name:"css",helperType:"less"});e.defineMIME("text/x-gss",{documentTypes:y,mediaTypes:d,mediaFeatures:n,propertyKeywords:b,nonStandardPropertyKeywords:A,fontProperties:G,counterDescriptors:x,colorKeywords:p,valueKeywords:c,supportsAtComponent:!0,tokenHooks:{"/":function(a,c){if(!a.eat("*"))return!1;c.tokenize=C;return C(a,c)}},name:"css",
+helperType:"gss"})});
+(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function z(a,c,b,d,e,h){this.indented=a;this.column=c;this.type=b;this.info=d;this.align=e;this.prev=h}function C(a,c,b,d){var e=a.indented;a.context&&"statement"==a.context.type&&"statement"!=b&&(e=a.context.indented);return a.context=new z(e,c,b,d,null,a.context)}function w(a){var c=a.context.type;if(")"==
+c||"]"==c||"}"==c)a.indented=a.context.indented;return a.context=a.context.prev}function y(a,c,b){if("variable"==c.prevToken||"variable-3"==c.prevToken||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(a.string.slice(0,b))||c.typeAtEndOfLine&&a.column()==a.indentation())return!0}function t(a){for(;;){if(!a||"top"==a.type)return!0;if("}"==a.type&&"namespace"!=a.prev.info)return!1;a=a.prev}}function d(a){var c={};a=a.split(" ");for(var b=0;b<a.length;++b)c[a[b]]=!0;return c}function r(a,c){return"function"===typeof a?
+a(c):a.propertyIsEnumerable(c)}function n(a,c){if(!c.startOfLine)return!1;for(var b,d=null;b=a.peek();){if("\\"==b&&a.match(/^.$/)){d=n;break}else if("/"==b&&a.match(/^\/[\/\*]/,!1))break;a.next()}c.tokenize=d;return"meta"}function h(a,b){return"variable-3"==b.prevToken?"variable-3":!1}function g(a){a.eatWhile(/[\w\.']/);return"number"}function l(a,b){a.backUp(1);if(a.match(/(R|u8R|uR|UR|LR)/)){var d=a.match(/"([^\s\\()]{0,16})\(/);if(!d)return!1;b.cpp11RawStringDelim=d[1];b.tokenize=D;return D(a,
+b)}if(a.match(/(u8|u|U|L)/))return a.match(/["']/,!1)?"string":!1;a.next();return!1}function b(a,b){for(var d;null!=(d=a.next());)if('"'==d&&!a.eat('"')){b.tokenize=null;break}return"string"}function D(a,b){var d=b.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$\x26");a.match(new RegExp(".*?\\)"+d+'"'))?b.tokenize=null:a.skipToEnd();return"string"}function A(a,b){function d(a){if(a)for(var b in a)a.hasOwnProperty(b)&&h.push(b)}"string"==typeof a&&(a=[a]);var h=[];d(b.keywords);d(b.types);d(b.builtin);
+d(b.atoms);h.length&&(b.helperType=a[0],e.registerHelper("hintWords",a[0],h));for(var g=0;g<a.length;++g)e.defineMIME(a[g],b)}function G(a,b){for(var d=!1;!a.eol();){if(!d&&a.match('"""')){b.tokenize=null;break}d="\\"==a.next()&&!d}return"string"}function x(a){return function(b,d){for(var e=!1,h,g=!1;!b.eol();){if(!a&&!e&&b.match('"')){g=!0;break}if(a&&b.match('"""')){g=!0;break}h=b.next();!e&&"$"==h&&b.match("{")&&b.skipTo("}");e=!e&&"\\"==h&&!a}if(g||!a)d.tokenize=null;return"string"}}function u(a){return function(b,
+d){for(var e=!1,h,g=!1;!b.eol();){if(!e&&b.match('"')&&("single"==a||b.match('""'))){g=!0;break}if(!e&&b.match("``")){p=u(a);g=!0;break}h=b.next();e="single"==a&&!e&&"\\"==h}g&&(d.tokenize=null);return"string"}}e.defineMode("clike",function(a,b){function d(a,b){var c=a.next();if(Q[c]){var e=Q[c](a,b);if(!1!==e)return e}if('"'==c||"'"==c)return b.tokenize=h(c),b.tokenize(a,b);if(oa.test(c))return F=c,null;if(R.test(c)){a.backUp(1);if(a.match(N))return"number";a.next()}if("/"==c){if(a.eat("*"))return b.tokenize=
+g,g(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(M.test(c)){for(;!a.match(/^\/[\/*]/,!1)&&a.eat(M););return"operator"}a.eatWhile(/[\w\$_\xa1-\uffff]/);if(W)for(;a.match(W);)a.eatWhile(/[\w\$_\xa1-\uffff]/);c=a.current();return r(x,c)?(r(G,c)&&(F="newstatement"),r(ia,c)&&(L=!0),"keyword"):r(A,c)?"variable-3":r(D,c)?(r(G,c)&&(F="newstatement"),"builtin"):r(na,c)?"atom":"variable"}function h(a){return function(b,c){for(var d=!1,e,h=!1;null!=(e=b.next());){if(e==a&&!d){h=!0;break}d=!d&&"\\"==
+e}if(h||!d&&!ka)c.tokenize=null;return"string"}}function g(a,b){for(var c=!1,d;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function l(a,d){b.typeFirstDefinitions&&a.eol()&&t(d.context)&&(d.typeAtEndOfLine=y(a,d,a.pos))}var n=a.indentUnit,p=b.statementIndentUnit||n,u=b.dontAlignCalls,x=b.keywords||{},A=b.types||{},D=b.builtin||{},G=b.blockKeywords||{},ia=b.defKeywords||{},na=b.atoms||{},Q=b.hooks||{},ka=b.multiLineStrings,ma=!1!==b.indentStatements,W=b.namespaceSeparator,
+oa=b.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,R=b.numberStart||/[\d\.]/,N=b.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,M=b.isOperatorChar||/[+\-*&%=<>!?|\/]/,F,L;return{startState:function(a){return{tokenize:null,context:new z((a||0)-n,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(a,e){var h=e.context;a.sol()&&(null==h.align&&(h.align=!1),e.indented=a.indentation(),e.startOfLine=!0);if(a.eatSpace())return l(a,e),null;F=L=null;var g=
+(e.tokenize||d)(a,e);if("comment"==g||"meta"==g)return g;null==h.align&&(h.align=!0);if(";"==F||":"==F||","==F&&a.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==e.context.type;)w(e);else if("{"==F)C(e,a.column(),"}");else if("["==F)C(e,a.column(),"]");else if("("==F)C(e,a.column(),")");else if("}"==F){for(;"statement"==h.type;)h=w(e);for("}"==h.type&&(h=w(e));"statement"==h.type;)h=w(e)}else F==h.type?w(e):ma&&(("}"==h.type||"top"==h.type)&&";"!=F||"statement"==h.type&&"newstatement"==F)&&C(e,a.column(),
+"statement",a.current());"variable"==g&&("def"==e.prevToken||b.typeFirstDefinitions&&y(a,e,a.start)&&t(e.context)&&a.match(/^\s*\(/,!1))&&(g="def");Q.token&&(h=Q.token(a,e,g),void 0!==h&&(g=h));"def"==g&&!1===b.styleDefs&&(g="variable");e.startOfLine=!1;e.prevToken=L?"def":g||F;l(a,e);return g},indent:function(a,h){if(a.tokenize!=d&&null!=a.tokenize||a.typeAtEndOfLine)return e.Pass;var g=a.context,t=h&&h.charAt(0);"statement"==g.type&&"}"==t&&(g=g.prev);if(b.dontIndentStatements)for(;"statement"==
+g.type&&b.dontIndentStatements.test(g.info);)g=g.prev;if(Q.indent){var l=Q.indent(a,g,h);if("number"==typeof l)return l}var l=t==g.type,r=g.prev&&"switch"==g.prev.info;if(b.allmanIndentation&&/[{(]/.test(t)){for(;"top"!=g.type&&"}"!=g.type;)g=g.prev;return g.indented}return"statement"==g.type?g.indented+("{"==t?0:p):!g.align||u&&")"==g.type?")"!=g.type||l?g.indented+(l?0:n)+(l||!r||/^(?:case|default)\b/.test(h)?0:n):g.indented+p:g.column+(l?0:1)},electricInput:!1!==b.indentSwitch?/^\s*(?:case .*?:|default:|\{\}?|\})$/:
+/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}});A(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:d("auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile"),types:d("int long char short double float unsigned signed void size_t ptrdiff_t bool _Complex _Bool float_t double_t intptr_t intmax_t int8_t int16_t int32_t int64_t uintptr_t uintmax_t uint8_t uint16_t uint32_t uint64_t"),
+blockKeywords:d("case do else for if switch while struct"),defKeywords:d("struct"),typeFirstDefinitions:!0,atoms:d("null true false"),hooks:{"#":n,"*":h},modeProps:{fold:["brace","include"]}});A(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:d("auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile asm dynamic_cast namespace reinterpret_cast try explicit new static_cast typeid catch operator template typename class friend private this using const_cast inline public throw virtual delete mutable protected alignas alignof constexpr decltype nullptr noexcept thread_local final static_assert override"),
+types:d("int long char short double float unsigned signed void size_t ptrdiff_t bool wchar_t"),blockKeywords:d("catch class do else finally for if struct switch try while"),defKeywords:d("class namespace struct enum union"),typeFirstDefinitions:!0,atoms:d("true false null"),dontIndentStatements:/^template$/,hooks:{"#":n,"*":h,u:l,U:l,L:l,R:l,0:g,1:g,2:g,3:g,4:g,5:g,6:g,7:g,8:g,9:g,token:function(a,b,d){if(b="variable"==d&&"("==a.peek()&&(";"==b.prevToken||null==b.prevToken||"}"==b.prevToken))a=a.current(),
+b=(a=/(\w+)::(\w+)$/.exec(a))&&a[1]==a[2];if(b)return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}});A("text/x-java",{name:"clike",keywords:d("abstract assert break case catch class const continue default do else enum extends final finally float for goto if implements import instanceof interface native new package private protected public return static strictfp super switch synchronized this throw throws transient try volatile while"),types:d("byte short int long float double boolean char void Boolean Byte Character Double Float Integer Long Number Object Short String StringBuffer StringBuilder Void"),
+blockKeywords:d("catch class do else finally for if switch try while"),defKeywords:d("class interface package enum"),typeFirstDefinitions:!0,atoms:d("true false null"),number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,hooks:{"@":function(a){a.eatWhile(/[\w\$_]/);return"meta"}},modeProps:{fold:["brace","import"]}});A("text/x-csharp",{name:"clike",keywords:d("abstract as async await base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),
+types:d("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),blockKeywords:d("catch class do else finally for foreach if struct switch try while"),defKeywords:d("class interface namespace struct var"),typeFirstDefinitions:!0,atoms:d("true false null"),hooks:{"@":function(a,c){if(a.eat('"'))return c.tokenize=
+b,b(a,c);a.eatWhile(/[\w\$_]/);return"meta"}}});A("text/x-scala",{name:"clike",keywords:d("abstract case catch class def do else extends final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try type val var while with yield _ : \x3d \x3d\x3e \x3c- \x3c: \x3c% \x3e: # @ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble :: #:: "),
+types:d("AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),
+multiLineStrings:!0,blockKeywords:d("catch class do else finally for forSome if match switch try while"),defKeywords:d("class def object package trait type val var"),atoms:d("true false null"),indentStatements:!1,indentSwitch:!1,hooks:{"@":function(a){a.eatWhile(/[\w\$_]/);return"meta"},'"':function(a,b){if(!a.match('""'))return!1;b.tokenize=G;return b.tokenize(a,b)},"'":function(a){a.eatWhile(/[\w\$_\xa1-\uffff]/);return"atom"},"\x3d":function(a,b){var d=b.context;return"}"==d.type&&d.align&&a.eat("\x3e")?
+(b.context=new z(d.indented,d.column,d.type,d.info,null,d.prev),"operator"):!1}},modeProps:{closeBrackets:{triples:'"'}}});A("text/x-kotlin",{name:"clike",keywords:d("package as typealias class interface this super val var fun for is in This throw return break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix"),
+types:d("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,blockKeywords:d("catch class do else finally for if where try while enum"),defKeywords:d("class val var object package interface fun"),
+atoms:d("true false null this"),hooks:{'"':function(a,b){b.tokenize=x(a.match('""'));return b.tokenize(a,b)}},modeProps:{closeBrackets:{triples:'"'}}});A(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:d("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:d("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:d("for while do if else struct"),
+builtin:d("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),
+atoms:d("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),
+indentSwitch:!1,hooks:{"#":n},modeProps:{fold:["brace","include"]}});A("text/x-nesc",{name:"clike",keywords:d("auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatileas atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:d("int long char short double float unsigned signed void size_t ptrdiff_t"),
+blockKeywords:d("case do else for if switch while struct"),atoms:d("null true false"),hooks:{"#":n},modeProps:{fold:["brace","include"]}});A("text/x-objectivec",{name:"clike",keywords:d("auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatileinline restrict _Bool _Complex _Imaginary BOOL Class bycopy byref id IMP in inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"),
+types:d("int long char short double float unsigned signed void size_t ptrdiff_t"),atoms:d("YES NO NULL NILL ON OFF true false"),hooks:{"@":function(a){a.eatWhile(/[\w\$]/);return"keyword"},"#":n,indent:function(a,b,d){if("statement"==b.type&&/^@\w/.test(d))return b.indented}},modeProps:{fold:"brace"}});A("text/x-squirrel",{name:"clike",keywords:d("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),
+types:d("int long char short double float unsigned signed void size_t ptrdiff_t"),blockKeywords:d("case catch class else for foreach if switch try while"),defKeywords:d("function local class"),typeFirstDefinitions:!0,atoms:d("true false null"),hooks:{"#":n},modeProps:{fold:["brace","include"]}});var p=null;A("text/x-ceylon",{name:"clike",keywords:d("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),
+types:function(a){a=a.charAt(0);return a===a.toUpperCase()&&a!==a.toLowerCase()},blockKeywords:d("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:d("class dynamic function interface module object package value"),builtin:d("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,
+isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:d("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(a){a.eatWhile(/[\w\$_]/);return"meta"},'"':function(a,b){b.tokenize=u(a.match('""')?"triple":"single");return b.tokenize(a,b)},"`":function(a,b){if(!p||!a.match("`"))return!1;b.tokenize=
+p;p=null;return b.tokenize(a,b)},"'":function(a){a.eatWhile(/[\w\$_\xa1-\uffff]/);return"atom"},token:function(a,b,d){if(("variable"==d||"variable-3"==d)&&"."==b.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})});
+(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../clike/clike")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../htmlmixed/htmlmixed","../clike/clike"],e):e(CodeMirror)})(function(e){function z(e){var d={};e=e.split(" ");for(var r=0;r<e.length;++r)d[e[r]]=!0;return d}function C(e,d,r){return 0==e.length?w(d):function(n,h){for(var g=e[0],l=0;l<g.length;l++)if(n.match(g[l][0]))return h.tokenize=
+C(e.slice(1),d),g[l][1];h.tokenize=w(d,r);return"string"}}function w(e,d){return function(r,n){var h;if(!1!==d&&r.match("${",!1)||r.match("{$",!1))n.tokenize=null,h="string";else if(!1!==d&&r.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/))r.match("[",!1)&&(n.tokenize=C([[["[",null]],[[/\d[\w\.]*/,"number"],[/\$[a-zA-Z_][a-zA-Z0-9_]*/,"variable-2"],[/[\w\$]+/,"variable"]],[["]",null]]],e,d)),r.match(/\-\>\w/,!1)&&(n.tokenize=C([[["-\x3e",null]],[[/[\w]+/,"variable"]]],e,d)),h="variable-2";else{for(h=!1;!r.eol()&&
+(h||!1===d||!r.match("{$",!1)&&!r.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,!1));){if(!h&&r.match(e)){n.tokenize=null;n.tokStack.pop();n.tokStack.pop();break}h="\\"==r.next()&&!h}h="string"}return h}}e.registerHelper("hintWords","php","abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__ func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count".split(" "));
+e.registerHelper("wordChars","php",/[\w$]/);var y={name:"clike",helperType:"php",keywords:z("abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally"),
+blockKeywords:z("catch do else elseif for foreach if switch try while finally"),defKeywords:z("class function interface namespace trait"),atoms:z("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"),builtin:z("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"),
+multiLineStrings:!0,hooks:{$:function(e){e.eatWhile(/[\w\$_]/);return"variable-2"},"\x3c":function(e,d){var r;if(r=e.match(/<<\s*/)){var n=e.eat(/['"]/);e.eatWhile(/[\w\.]/);r=e.current().slice(r[0].length+(n?2:1));n&&e.eat(n);if(r)return(d.tokStack||(d.tokStack=[])).push(r,0),d.tokenize=w(r,"'"!=n),"string"}return!1},"#":function(e){for(;!e.eol()&&!e.match("?\x3e",!1);)e.next();return"comment"},"/":function(e){if(e.eat("/")){for(;!e.eol()&&!e.match("?\x3e",!1);)e.next();return"comment"}return!1},
+'"':function(e,d){(d.tokStack||(d.tokStack=[])).push('"',0);d.tokenize=w('"');return"string"},"{":function(e,d){d.tokStack&&d.tokStack.length&&d.tokStack[d.tokStack.length-1]++;return!1},"}":function(e,d){d.tokStack&&0<d.tokStack.length&&!--d.tokStack[d.tokStack.length-1]&&(d.tokenize=w(d.tokStack[d.tokStack.length-2]));return!1}}};e.defineMode("php",function(t,d){var r=e.getMode(t,"text/html"),n=e.getMode(t,y);return{startState:function(){var h=e.startState(r),g=d.startOpen?e.startState(n):null;
+return{html:h,php:g,curMode:d.startOpen?n:r,curState:d.startOpen?g:h,pending:null}},copyState:function(d){var g=e.copyState(r,d.html),l=d.php,l=l&&e.copyState(n,l);return{html:g,php:l,curMode:d.curMode,curState:d.curMode==r?g:l,pending:d.pending}},token:function(d,g){var l=g.curMode==n;d.sol()&&g.pending&&'"'!=g.pending&&"'"!=g.pending&&(g.pending=null);if(l)return l&&null==g.php.tokenize&&d.match("?\x3e")?(g.curMode=r,g.curState=g.html,g.php.context.prev||(g.php=null),"meta"):n.token(d,g.curState);
+if(d.match(/^<\?\w*/))return g.curMode=n,g.php||(g.php=e.startState(n,r.indent(g.html,""))),g.curState=g.php,"meta";if('"'==g.pending||"'"==g.pending){for(;!d.eol()&&d.next()!=g.pending;);l="string"}else g.pending&&d.pos<g.pending.end?(d.pos=g.pending.end,l=g.pending.style):l=r.token(d,g.curState);g.pending&&(g.pending=null);var b=d.current(),t=b.search(/<\?/),w;-1!=t&&("string"==l&&(w=b.match(/[\'\"]$/))&&!/\?>/.test(b)?g.pending=w[0]:g.pending={end:d.pos,style:l},d.backUp(b.length-t));return l},
+indent:function(d,e){return d.curMode!=n&&/^\s*<\//.test(e)||d.curMode==n&&/^\?>/.test(e)?r.indent(d.html,e):d.curMode.indent(d.curState,e)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(d){return{state:d.curState,mode:d.curMode}}}},"htmlmixed","clike");e.defineMIME("application/x-httpd-php","php");e.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0});e.defineMIME("text/x-php",y)});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-day.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-day.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-day.css	(revision 2)
@@ -0,0 +1,41 @@
+/*
+
+    Name:       3024 day
+    Author:     Jan T. Sott (http://github.com/idleberg)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-3024-day.CodeMirror { background: #f7f7f7; color: #3a3432; }
+.cm-s-3024-day div.CodeMirror-selected { background: #d6d5d4; }
+
+.cm-s-3024-day .CodeMirror-line::selection, .cm-s-3024-day .CodeMirror-line > span::selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d6d5d4; }
+.cm-s-3024-day .CodeMirror-line::-moz-selection, .cm-s-3024-day .CodeMirror-line > span::-moz-selection, .cm-s-3024-day .CodeMirror-line > span > span::selection { background: #d9d9d9; }
+
+.cm-s-3024-day .CodeMirror-gutters { background: #f7f7f7; border-right: 0px; }
+.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; }
+.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; }
+.cm-s-3024-day .CodeMirror-linenumber { color: #807d7c; }
+
+.cm-s-3024-day .CodeMirror-cursor { border-left: 1px solid #5c5855; }
+
+.cm-s-3024-day span.cm-comment { color: #cdab53; }
+.cm-s-3024-day span.cm-atom { color: #a16a94; }
+.cm-s-3024-day span.cm-number { color: #a16a94; }
+
+.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute { color: #01a252; }
+.cm-s-3024-day span.cm-keyword { color: #db2d20; }
+.cm-s-3024-day span.cm-string { color: #fded02; }
+
+.cm-s-3024-day span.cm-variable { color: #01a252; }
+.cm-s-3024-day span.cm-variable-2 { color: #01a0e4; }
+.cm-s-3024-day span.cm-def { color: #e8bbd0; }
+.cm-s-3024-day span.cm-bracket { color: #3a3432; }
+.cm-s-3024-day span.cm-tag { color: #db2d20; }
+.cm-s-3024-day span.cm-link { color: #a16a94; }
+.cm-s-3024-day span.cm-error { background: #db2d20; color: #5c5855; }
+
+.cm-s-3024-day .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-night.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-night.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/3024-night.css	(revision 2)
@@ -0,0 +1,39 @@
+/*
+
+    Name:       3024 night
+    Author:     Jan T. Sott (http://github.com/idleberg)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-3024-night.CodeMirror { background: #090300; color: #d6d5d4; }
+.cm-s-3024-night div.CodeMirror-selected { background: #3a3432; }
+.cm-s-3024-night .CodeMirror-line::selection, .cm-s-3024-night .CodeMirror-line > span::selection, .cm-s-3024-night .CodeMirror-line > span > span::selection { background: rgba(58, 52, 50, .99); }
+.cm-s-3024-night .CodeMirror-line::-moz-selection, .cm-s-3024-night .CodeMirror-line > span::-moz-selection, .cm-s-3024-night .CodeMirror-line > span > span::-moz-selection { background: rgba(58, 52, 50, .99); }
+.cm-s-3024-night .CodeMirror-gutters { background: #090300; border-right: 0px; }
+.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; }
+.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; }
+.cm-s-3024-night .CodeMirror-linenumber { color: #5c5855; }
+
+.cm-s-3024-night .CodeMirror-cursor { border-left: 1px solid #807d7c; }
+
+.cm-s-3024-night span.cm-comment { color: #cdab53; }
+.cm-s-3024-night span.cm-atom { color: #a16a94; }
+.cm-s-3024-night span.cm-number { color: #a16a94; }
+
+.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute { color: #01a252; }
+.cm-s-3024-night span.cm-keyword { color: #db2d20; }
+.cm-s-3024-night span.cm-string { color: #fded02; }
+
+.cm-s-3024-night span.cm-variable { color: #01a252; }
+.cm-s-3024-night span.cm-variable-2 { color: #01a0e4; }
+.cm-s-3024-night span.cm-def { color: #e8bbd0; }
+.cm-s-3024-night span.cm-bracket { color: #d6d5d4; }
+.cm-s-3024-night span.cm-tag { color: #db2d20; }
+.cm-s-3024-night span.cm-link { color: #a16a94; }
+.cm-s-3024-night span.cm-error { background: #db2d20; color: #807d7c; }
+
+.cm-s-3024-night .CodeMirror-activeline-background { background: #2F2F2F; }
+.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/abcdef.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/abcdef.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/abcdef.css	(revision 2)
@@ -0,0 +1,32 @@
+.cm-s-abcdef.CodeMirror { background: #0f0f0f; color: #defdef; }
+.cm-s-abcdef div.CodeMirror-selected { background: #515151; }
+.cm-s-abcdef .CodeMirror-line::selection, .cm-s-abcdef .CodeMirror-line > span::selection, .cm-s-abcdef .CodeMirror-line > span > span::selection { background: rgba(56, 56, 56, 0.99); }
+.cm-s-abcdef .CodeMirror-line::-moz-selection, .cm-s-abcdef .CodeMirror-line > span::-moz-selection, .cm-s-abcdef .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 56, 56, 0.99); }
+.cm-s-abcdef .CodeMirror-gutters { background: #555; border-right: 2px solid #314151; }
+.cm-s-abcdef .CodeMirror-guttermarker { color: #222; }
+.cm-s-abcdef .CodeMirror-guttermarker-subtle { color: azure; }
+.cm-s-abcdef .CodeMirror-linenumber { color: #FFFFFF; }
+.cm-s-abcdef .CodeMirror-cursor { border-left: 1px solid #00FF00; }
+
+.cm-s-abcdef span.cm-keyword { color: darkgoldenrod; font-weight: bold; }
+.cm-s-abcdef span.cm-atom { color: #77F; }
+.cm-s-abcdef span.cm-number { color: violet; }
+.cm-s-abcdef span.cm-def { color: #fffabc; }
+.cm-s-abcdef span.cm-variable { color: #abcdef; }
+.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; }
+.cm-s-abcdef span.cm-variable-3 { color: #def; }
+.cm-s-abcdef span.cm-property { color: #fedcba; }
+.cm-s-abcdef span.cm-operator { color: #ff0; }
+.cm-s-abcdef span.cm-comment { color: #7a7b7c; font-style: italic;}
+.cm-s-abcdef span.cm-string { color: #2b4; }
+.cm-s-abcdef span.cm-meta { color: #C9F; }
+.cm-s-abcdef span.cm-qualifier { color: #FFF700; }
+.cm-s-abcdef span.cm-builtin { color: #30aabc; }
+.cm-s-abcdef span.cm-bracket { color: #8a8a8a; }
+.cm-s-abcdef span.cm-tag { color: #FFDD44; }
+.cm-s-abcdef span.cm-attribute { color: #DDFF00; }
+.cm-s-abcdef span.cm-error { color: #FF0000; }
+.cm-s-abcdef span.cm-header { color: aquamarine; font-weight: bold; }
+.cm-s-abcdef span.cm-link { color: blueviolet; }
+
+.cm-s-abcdef .CodeMirror-activeline-background { background: #314151; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance-mobile.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance-mobile.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance-mobile.css	(revision 2)
@@ -0,0 +1,5 @@
+.cm-s-ambiance.CodeMirror {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ambiance.css	(revision 2)
@@ -0,0 +1,74 @@
+/* ambiance theme for codemirror */
+
+/* Color scheme */
+
+.cm-s-ambiance .cm-header { color: blue; }
+.cm-s-ambiance .cm-quote { color: #24C2C7; }
+
+.cm-s-ambiance .cm-keyword { color: #cda869; }
+.cm-s-ambiance .cm-atom { color: #CF7EA9; }
+.cm-s-ambiance .cm-number { color: #78CF8A; }
+.cm-s-ambiance .cm-def { color: #aac6e3; }
+.cm-s-ambiance .cm-variable { color: #ffb795; }
+.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }
+.cm-s-ambiance .cm-variable-3 { color: #faded3; }
+.cm-s-ambiance .cm-property { color: #eed1b3; }
+.cm-s-ambiance .cm-operator { color: #fa8d6a; }
+.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }
+.cm-s-ambiance .cm-string { color: #8f9d6a; }
+.cm-s-ambiance .cm-string-2 { color: #9d937c; }
+.cm-s-ambiance .cm-meta { color: #D2A8A1; }
+.cm-s-ambiance .cm-qualifier { color: yellow; }
+.cm-s-ambiance .cm-builtin { color: #9999cc; }
+.cm-s-ambiance .cm-bracket { color: #24C2C7; }
+.cm-s-ambiance .cm-tag { color: #fee4ff; }
+.cm-s-ambiance .cm-attribute { color: #9B859D; }
+.cm-s-ambiance .cm-hr { color: pink; }
+.cm-s-ambiance .cm-link { color: #F4C20B; }
+.cm-s-ambiance .cm-special { color: #FF9D00; }
+.cm-s-ambiance .cm-error { color: #AF2018; }
+
+.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }
+.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }
+
+.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); }
+.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
+.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
+
+/* Editor styling */
+
+.cm-s-ambiance.CodeMirror {
+  line-height: 1.40em;
+  color: #E6E1DC;
+  background-color: #202020;
+  -webkit-box-shadow: inset 0 0 10px black;
+  -moz-box-shadow: inset 0 0 10px black;
+  box-shadow: inset 0 0 10px black;
+}
+
+.cm-s-ambiance .CodeMirror-gutters {
+  background: #3D3D3D;
+  border-right: 1px solid #4D4D4D;
+  box-shadow: 0 10px 20px black;
+}
+
+.cm-s-ambiance .CodeMirror-linenumber {
+  text-shadow: 0px 1px 1px #4d4d4d;
+  color: #111;
+  padding: 0 5px;
+}
+
+.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }
+.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }
+
+.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; }
+
+.cm-s-ambiance .CodeMirror-activeline-background {
+  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);
+}
+
+.cm-s-ambiance.CodeMirror,
+.cm-s-ambiance .CodeMirror-gutters {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC");
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-dark.css	(revision 2)
@@ -0,0 +1,38 @@
+/*
+
+    Name:       Base16 Default Dark
+    Author:     Chris Kempson (http://chriskempson.com)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-base16-dark.CodeMirror { background: #151515; color: #e0e0e0; }
+.cm-s-base16-dark div.CodeMirror-selected { background: #303030; }
+.cm-s-base16-dark .CodeMirror-line::selection, .cm-s-base16-dark .CodeMirror-line > span::selection, .cm-s-base16-dark .CodeMirror-line > span > span::selection { background: rgba(48, 48, 48, .99); }
+.cm-s-base16-dark .CodeMirror-line::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span::-moz-selection, .cm-s-base16-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(48, 48, 48, .99); }
+.cm-s-base16-dark .CodeMirror-gutters { background: #151515; border-right: 0px; }
+.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; }
+.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; }
+.cm-s-base16-dark .CodeMirror-linenumber { color: #505050; }
+.cm-s-base16-dark .CodeMirror-cursor { border-left: 1px solid #b0b0b0; }
+
+.cm-s-base16-dark span.cm-comment { color: #8f5536; }
+.cm-s-base16-dark span.cm-atom { color: #aa759f; }
+.cm-s-base16-dark span.cm-number { color: #aa759f; }
+
+.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute { color: #90a959; }
+.cm-s-base16-dark span.cm-keyword { color: #ac4142; }
+.cm-s-base16-dark span.cm-string { color: #f4bf75; }
+
+.cm-s-base16-dark span.cm-variable { color: #90a959; }
+.cm-s-base16-dark span.cm-variable-2 { color: #6a9fb5; }
+.cm-s-base16-dark span.cm-def { color: #d28445; }
+.cm-s-base16-dark span.cm-bracket { color: #e0e0e0; }
+.cm-s-base16-dark span.cm-tag { color: #ac4142; }
+.cm-s-base16-dark span.cm-link { color: #aa759f; }
+.cm-s-base16-dark span.cm-error { background: #ac4142; color: #b0b0b0; }
+
+.cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; }
+.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-light.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-light.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/base16-light.css	(revision 2)
@@ -0,0 +1,38 @@
+/*
+
+    Name:       Base16 Default Light
+    Author:     Chris Kempson (http://chriskempson.com)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; }
+.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; }
+.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; }
+.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; }
+.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; }
+.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }
+.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }
+.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; }
+.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; }
+
+.cm-s-base16-light span.cm-comment { color: #8f5536; }
+.cm-s-base16-light span.cm-atom { color: #aa759f; }
+.cm-s-base16-light span.cm-number { color: #aa759f; }
+
+.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; }
+.cm-s-base16-light span.cm-keyword { color: #ac4142; }
+.cm-s-base16-light span.cm-string { color: #f4bf75; }
+
+.cm-s-base16-light span.cm-variable { color: #90a959; }
+.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; }
+.cm-s-base16-light span.cm-def { color: #d28445; }
+.cm-s-base16-light span.cm-bracket { color: #202020; }
+.cm-s-base16-light span.cm-tag { color: #ac4142; }
+.cm-s-base16-light span.cm-link { color: #aa759f; }
+.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; }
+
+.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; }
+.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/bespin.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/bespin.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/bespin.css	(revision 2)
@@ -0,0 +1,34 @@
+/*
+
+    Name:       Bespin
+    Author:     Mozilla / Jan T. Sott
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;}
+.cm-s-bespin div.CodeMirror-selected {background: #36312e !important;}
+.cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;}
+.cm-s-bespin .CodeMirror-linenumber {color: #666666;}
+.cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;}
+
+.cm-s-bespin span.cm-comment {color: #937121;}
+.cm-s-bespin span.cm-atom {color: #9b859d;}
+.cm-s-bespin span.cm-number {color: #9b859d;}
+
+.cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;}
+.cm-s-bespin span.cm-keyword {color: #cf6a4c;}
+.cm-s-bespin span.cm-string {color: #f9ee98;}
+
+.cm-s-bespin span.cm-variable {color: #54be0d;}
+.cm-s-bespin span.cm-variable-2 {color: #5ea6ea;}
+.cm-s-bespin span.cm-def {color: #cf7d34;}
+.cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;}
+.cm-s-bespin span.cm-bracket {color: #9d9b97;}
+.cm-s-bespin span.cm-tag {color: #cf6a4c;}
+.cm-s-bespin span.cm-link {color: #9b859d;}
+
+.cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
+.cm-s-bespin .CodeMirror-activeline-background { background: #404040; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/blackboard.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/blackboard.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/blackboard.css	(revision 2)
@@ -0,0 +1,32 @@
+/* Port of TextMate's Blackboard theme */
+
+.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }
+.cm-s-blackboard div.CodeMirror-selected { background: #253B76; }
+.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); }
+.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); }
+.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }
+.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }
+.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }
+.cm-s-blackboard .CodeMirror-linenumber { color: #888; }
+.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }
+
+.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
+.cm-s-blackboard .cm-atom { color: #D8FA3C; }
+.cm-s-blackboard .cm-number { color: #D8FA3C; }
+.cm-s-blackboard .cm-def { color: #8DA6CE; }
+.cm-s-blackboard .cm-variable { color: #FF6400; }
+.cm-s-blackboard .cm-operator { color: #FBDE2D; }
+.cm-s-blackboard .cm-comment { color: #AEAEAE; }
+.cm-s-blackboard .cm-string { color: #61CE3C; }
+.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
+.cm-s-blackboard .cm-meta { color: #D8FA3C; }
+.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
+.cm-s-blackboard .cm-tag { color: #8DA6CE; }
+.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
+.cm-s-blackboard .cm-header { color: #FF6400; }
+.cm-s-blackboard .cm-hr { color: #AEAEAE; }
+.cm-s-blackboard .cm-link { color: #8DA6CE; }
+.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
+
+.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; }
+.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/cobalt.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/cobalt.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/cobalt.css	(revision 2)
@@ -0,0 +1,25 @@
+.cm-s-cobalt.CodeMirror { background: #002240; color: white; }
+.cm-s-cobalt div.CodeMirror-selected { background: #b36539; }
+.cm-s-cobalt .CodeMirror-line::selection, .cm-s-cobalt .CodeMirror-line > span::selection, .cm-s-cobalt .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); }
+.cm-s-cobalt .CodeMirror-line::-moz-selection, .cm-s-cobalt .CodeMirror-line > span::-moz-selection, .cm-s-cobalt .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); }
+.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; }
+.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-cobalt span.cm-comment { color: #08f; }
+.cm-s-cobalt span.cm-atom { color: #845dc4; }
+.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }
+.cm-s-cobalt span.cm-keyword { color: #ffee80; }
+.cm-s-cobalt span.cm-string { color: #3ad900; }
+.cm-s-cobalt span.cm-meta { color: #ff9d00; }
+.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
+.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
+.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
+.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
+.cm-s-cobalt span.cm-link { color: #845dc4; }
+.cm-s-cobalt span.cm-error { color: #9d1e15; }
+
+.cm-s-cobalt .CodeMirror-activeline-background { background: #002D57; }
+.cm-s-cobalt .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/colorforth.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/colorforth.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/colorforth.css	(revision 2)
@@ -0,0 +1,33 @@
+.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; }
+.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; }
+.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; }
+.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; }
+.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-colorforth span.cm-comment     { color: #ededed; }
+.cm-s-colorforth span.cm-def         { color: #ff1c1c; font-weight:bold; }
+.cm-s-colorforth span.cm-keyword     { color: #ffd900; }
+.cm-s-colorforth span.cm-builtin     { color: #00d95a; }
+.cm-s-colorforth span.cm-variable    { color: #73ff00; }
+.cm-s-colorforth span.cm-string      { color: #007bff; }
+.cm-s-colorforth span.cm-number      { color: #00c4ff; }
+.cm-s-colorforth span.cm-atom        { color: #606060; }
+
+.cm-s-colorforth span.cm-variable-2  { color: #EEE; }
+.cm-s-colorforth span.cm-variable-3  { color: #DDD; }
+.cm-s-colorforth span.cm-property    {}
+.cm-s-colorforth span.cm-operator    {}
+
+.cm-s-colorforth span.cm-meta        { color: yellow; }
+.cm-s-colorforth span.cm-qualifier   { color: #FFF700; }
+.cm-s-colorforth span.cm-bracket     { color: #cc7; }
+.cm-s-colorforth span.cm-tag         { color: #FFBD40; }
+.cm-s-colorforth span.cm-attribute   { color: #FFF700; }
+.cm-s-colorforth span.cm-error       { color: #f00; }
+
+.cm-s-colorforth div.CodeMirror-selected { background: #333d53; }
+
+.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); }
+
+.cm-s-colorforth .CodeMirror-activeline-background { background: #253540; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/dracula.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/dracula.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/dracula.css	(revision 2)
@@ -0,0 +1,41 @@
+/*
+
+    Name:       dracula
+    Author:     Michael Kaminsky (http://github.com/mkaminsky11)
+
+    Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)
+
+*/
+
+
+.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {
+  background-color: #282a36 !important;
+  color: #f8f8f2 !important;
+  border: none;
+}
+.cm-s-dracula .CodeMirror-gutters { color: #282a36; }
+.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }
+.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }
+.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
+.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-dracula span.cm-comment { color: #6272a4; }
+.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }
+.cm-s-dracula span.cm-number { color: #bd93f9; }
+.cm-s-dracula span.cm-variable { color: #50fa7b; }
+.cm-s-dracula span.cm-variable-2 { color: white; }
+.cm-s-dracula span.cm-def { color: #ffb86c; }
+.cm-s-dracula span.cm-keyword { color: #ff79c6; }
+.cm-s-dracula span.cm-operator { color: #ff79c6; }
+.cm-s-dracula span.cm-keyword { color: #ff79c6; }
+.cm-s-dracula span.cm-atom { color: #bd93f9; }
+.cm-s-dracula span.cm-meta { color: #f8f8f2; }
+.cm-s-dracula span.cm-tag { color: #ff79c6; }
+.cm-s-dracula span.cm-attribute { color: #50fa7b; }
+.cm-s-dracula span.cm-qualifier { color: #50fa7b; }
+.cm-s-dracula span.cm-property { color: #66d9ef; }
+.cm-s-dracula span.cm-builtin { color: #50fa7b; }
+.cm-s-dracula span.cm-variable-3 { color: #50fa7b; }
+
+.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }
+.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/eclipse.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/eclipse.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/eclipse.css	(revision 2)
@@ -0,0 +1,23 @@
+.cm-s-eclipse span.cm-meta { color: #FF1717; }
+.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }
+.cm-s-eclipse span.cm-atom { color: #219; }
+.cm-s-eclipse span.cm-number { color: #164; }
+.cm-s-eclipse span.cm-def { color: #00f; }
+.cm-s-eclipse span.cm-variable { color: black; }
+.cm-s-eclipse span.cm-variable-2 { color: #0000C0; }
+.cm-s-eclipse span.cm-variable-3 { color: #0000C0; }
+.cm-s-eclipse span.cm-property { color: black; }
+.cm-s-eclipse span.cm-operator { color: black; }
+.cm-s-eclipse span.cm-comment { color: #3F7F5F; }
+.cm-s-eclipse span.cm-string { color: #2A00FF; }
+.cm-s-eclipse span.cm-string-2 { color: #f50; }
+.cm-s-eclipse span.cm-qualifier { color: #555; }
+.cm-s-eclipse span.cm-builtin { color: #30a; }
+.cm-s-eclipse span.cm-bracket { color: #cc7; }
+.cm-s-eclipse span.cm-tag { color: #170; }
+.cm-s-eclipse span.cm-attribute { color: #00c; }
+.cm-s-eclipse span.cm-link { color: #219; }
+.cm-s-eclipse span.cm-error { color: #f00; }
+
+.cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/elegant.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/elegant.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/elegant.css	(revision 2)
@@ -0,0 +1,13 @@
+.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; }
+.cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; }
+.cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; }
+.cm-s-elegant span.cm-variable { color: black; }
+.cm-s-elegant span.cm-variable-2 { color: #b11; }
+.cm-s-elegant span.cm-qualifier { color: #555; }
+.cm-s-elegant span.cm-keyword { color: #730; }
+.cm-s-elegant span.cm-builtin { color: #30a; }
+.cm-s-elegant span.cm-link { color: #762; }
+.cm-s-elegant span.cm-error { background-color: #fdd; }
+
+.cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/erlang-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/erlang-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/erlang-dark.css	(revision 2)
@@ -0,0 +1,34 @@
+.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }
+.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; }
+.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); }
+.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); }
+.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; }
+.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-erlang-dark span.cm-quote      { color: #ccc; }
+.cm-s-erlang-dark span.cm-atom       { color: #f133f1; }
+.cm-s-erlang-dark span.cm-attribute  { color: #ff80e1; }
+.cm-s-erlang-dark span.cm-bracket    { color: #ff9d00; }
+.cm-s-erlang-dark span.cm-builtin    { color: #eaa; }
+.cm-s-erlang-dark span.cm-comment    { color: #77f; }
+.cm-s-erlang-dark span.cm-def        { color: #e7a; }
+.cm-s-erlang-dark span.cm-keyword    { color: #ffee80; }
+.cm-s-erlang-dark span.cm-meta       { color: #50fefe; }
+.cm-s-erlang-dark span.cm-number     { color: #ffd0d0; }
+.cm-s-erlang-dark span.cm-operator   { color: #d55; }
+.cm-s-erlang-dark span.cm-property   { color: #ccc; }
+.cm-s-erlang-dark span.cm-qualifier  { color: #ccc; }
+.cm-s-erlang-dark span.cm-special    { color: #ffbbbb; }
+.cm-s-erlang-dark span.cm-string     { color: #3ad900; }
+.cm-s-erlang-dark span.cm-string-2   { color: #ccc; }
+.cm-s-erlang-dark span.cm-tag        { color: #9effff; }
+.cm-s-erlang-dark span.cm-variable   { color: #50fe50; }
+.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }
+.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; }
+.cm-s-erlang-dark span.cm-error      { color: #9d1e15; }
+
+.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; }
+.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/hopscotch.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/hopscotch.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/hopscotch.css	(revision 2)
@@ -0,0 +1,34 @@
+/*
+
+    Name:       Hopscotch
+    Author:     Jan T. Sott
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;}
+.cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;}
+.cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;}
+.cm-s-hopscotch .CodeMirror-linenumber {color: #797379;}
+.cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;}
+
+.cm-s-hopscotch span.cm-comment {color: #b33508;}
+.cm-s-hopscotch span.cm-atom {color: #c85e7c;}
+.cm-s-hopscotch span.cm-number {color: #c85e7c;}
+
+.cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;}
+.cm-s-hopscotch span.cm-keyword {color: #dd464c;}
+.cm-s-hopscotch span.cm-string {color: #fdcc59;}
+
+.cm-s-hopscotch span.cm-variable {color: #8fc13e;}
+.cm-s-hopscotch span.cm-variable-2 {color: #1290bf;}
+.cm-s-hopscotch span.cm-def {color: #fd8b19;}
+.cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;}
+.cm-s-hopscotch span.cm-bracket {color: #d5d3d5;}
+.cm-s-hopscotch span.cm-tag {color: #dd464c;}
+.cm-s-hopscotch span.cm-link {color: #c85e7c;}
+
+.cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
+.cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/icecoder.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/icecoder.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/icecoder.css	(revision 2)
@@ -0,0 +1,43 @@
+/*
+ICEcoder default theme by Matt Pass, used in code editor available at https://icecoder.net
+*/
+
+.cm-s-icecoder { color: #666; background: #1d1d1b; }
+
+.cm-s-icecoder span.cm-keyword { color: #eee; font-weight:bold; }  /* off-white 1 */
+.cm-s-icecoder span.cm-atom { color: #e1c76e; }                    /* yellow */
+.cm-s-icecoder span.cm-number { color: #6cb5d9; }                  /* blue */
+.cm-s-icecoder span.cm-def { color: #b9ca4a; }                     /* green */
+
+.cm-s-icecoder span.cm-variable { color: #6cb5d9; }                /* blue */
+.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; }              /* pink */
+.cm-s-icecoder span.cm-variable-3 { color: #f9602c; }              /* orange */
+
+.cm-s-icecoder span.cm-property { color: #eee; }                   /* off-white 1 */
+.cm-s-icecoder span.cm-operator { color: #9179bb; }                /* purple */
+.cm-s-icecoder span.cm-comment { color: #97a3aa; }                 /* grey-blue */
+
+.cm-s-icecoder span.cm-string { color: #b9ca4a; }                  /* green */
+.cm-s-icecoder span.cm-string-2 { color: #6cb5d9; }                /* blue */
+
+.cm-s-icecoder span.cm-meta { color: #555; }                       /* grey */
+
+.cm-s-icecoder span.cm-qualifier { color: #555; }                  /* grey */
+.cm-s-icecoder span.cm-builtin { color: #214e7b; }                 /* bright blue */
+.cm-s-icecoder span.cm-bracket { color: #cc7; }                    /* grey-yellow */
+
+.cm-s-icecoder span.cm-tag { color: #e8e8e8; }                     /* off-white 2 */
+.cm-s-icecoder span.cm-attribute { color: #099; }                  /* teal */
+
+.cm-s-icecoder span.cm-header { color: #6a0d6a; }                  /* purple-pink */
+.cm-s-icecoder span.cm-quote { color: #186718; }                   /* dark green */
+.cm-s-icecoder span.cm-hr { color: #888; }                         /* mid-grey */
+.cm-s-icecoder span.cm-link { color: #e1c76e; }                    /* yellow */
+.cm-s-icecoder span.cm-error { color: #d00; }                      /* red */
+
+.cm-s-icecoder .CodeMirror-cursor { border-left: 1px solid white; }
+.cm-s-icecoder div.CodeMirror-selected { color: #fff; background: #037; }
+.cm-s-icecoder .CodeMirror-gutters { background: #1d1d1b; min-width: 41px; border-right: 0; }
+.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; }
+.cm-s-icecoder .CodeMirror-matchingbracket { color: #fff !important; background: #555 !important; }
+.cm-s-icecoder .CodeMirror-activeline-background { background: #000; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/isotope.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/isotope.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/isotope.css	(revision 2)
@@ -0,0 +1,34 @@
+/*
+
+    Name:       Isotope
+    Author:     David Desandro / Jan T. Sott
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;}
+.cm-s-isotope div.CodeMirror-selected {background: #404040 !important;}
+.cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;}
+.cm-s-isotope .CodeMirror-linenumber {color: #808080;}
+.cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;}
+
+.cm-s-isotope span.cm-comment {color: #3300ff;}
+.cm-s-isotope span.cm-atom {color: #cc00ff;}
+.cm-s-isotope span.cm-number {color: #cc00ff;}
+
+.cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;}
+.cm-s-isotope span.cm-keyword {color: #ff0000;}
+.cm-s-isotope span.cm-string {color: #ff0099;}
+
+.cm-s-isotope span.cm-variable {color: #33ff00;}
+.cm-s-isotope span.cm-variable-2 {color: #0066ff;}
+.cm-s-isotope span.cm-def {color: #ff9900;}
+.cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;}
+.cm-s-isotope span.cm-bracket {color: #e0e0e0;}
+.cm-s-isotope span.cm-tag {color: #ff0000;}
+.cm-s-isotope span.cm-link {color: #cc00ff;}
+
+.cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
+.cm-s-isotope .CodeMirror-activeline-background { background: #202020; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/lesser-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/lesser-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/lesser-dark.css	(revision 2)
@@ -0,0 +1,47 @@
+/*
+http://lesscss.org/ dark theme
+Ported to CodeMirror by Peter Kroon
+*/
+.cm-s-lesser-dark {
+  line-height: 1.3em;
+}
+.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
+.cm-s-lesser-dark div.CodeMirror-selected { background: #45443B; } /* 33322B*/
+.cm-s-lesser-dark .CodeMirror-line::selection, .cm-s-lesser-dark .CodeMirror-line > span::selection, .cm-s-lesser-dark .CodeMirror-line > span > span::selection { background: rgba(69, 68, 59, .99); }
+.cm-s-lesser-dark .CodeMirror-line::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, .cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(69, 68, 59, .99); }
+.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white; }
+.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/
+
+.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
+
+.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; }
+.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; }
+.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; }
+.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; }
+
+.cm-s-lesser-dark span.cm-header { color: #a0a; }
+.cm-s-lesser-dark span.cm-quote { color: #090; }
+.cm-s-lesser-dark span.cm-keyword { color: #599eff; }
+.cm-s-lesser-dark span.cm-atom { color: #C2B470; }
+.cm-s-lesser-dark span.cm-number { color: #B35E4D; }
+.cm-s-lesser-dark span.cm-def { color: white; }
+.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }
+.cm-s-lesser-dark span.cm-variable-2 { color: #669199; }
+.cm-s-lesser-dark span.cm-variable-3 { color: white; }
+.cm-s-lesser-dark span.cm-property { color: #92A75C; }
+.cm-s-lesser-dark span.cm-operator { color: #92A75C; }
+.cm-s-lesser-dark span.cm-comment { color: #666; }
+.cm-s-lesser-dark span.cm-string { color: #BCD279; }
+.cm-s-lesser-dark span.cm-string-2 { color: #f50; }
+.cm-s-lesser-dark span.cm-meta { color: #738C73; }
+.cm-s-lesser-dark span.cm-qualifier { color: #555; }
+.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }
+.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }
+.cm-s-lesser-dark span.cm-tag { color: #669199; }
+.cm-s-lesser-dark span.cm-attribute { color: #00c; }
+.cm-s-lesser-dark span.cm-hr { color: #999; }
+.cm-s-lesser-dark span.cm-link { color: #00c; }
+.cm-s-lesser-dark span.cm-error { color: #9d1e15; }
+
+.cm-s-lesser-dark .CodeMirror-activeline-background { background: #3C3A3A; }
+.cm-s-lesser-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/liquibyte.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/liquibyte.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/liquibyte.css	(revision 2)
@@ -0,0 +1,95 @@
+.cm-s-liquibyte.CodeMirror {
+	background-color: #000;
+	color: #fff;
+	line-height: 1.2em;
+	font-size: 1em;
+}
+.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight {
+	text-decoration: underline;
+	text-decoration-color: #0f0;
+	text-decoration-style: wavy;
+}
+.cm-s-liquibyte .cm-trailingspace {
+	text-decoration: line-through;
+	text-decoration-color: #f00;
+	text-decoration-style: dotted;
+}
+.cm-s-liquibyte .cm-tab {
+	text-decoration: line-through;
+	text-decoration-color: #404040;
+	text-decoration-style: dotted;
+}
+.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; }
+.cm-s-liquibyte .CodeMirror-gutter-elt div { font-size: 1.2em; }
+.cm-s-liquibyte .CodeMirror-guttermarker {  }
+.cm-s-liquibyte .CodeMirror-guttermarker-subtle {  }
+.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0; }
+.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee; }
+
+.cm-s-liquibyte span.cm-comment     { color: #008000; }
+.cm-s-liquibyte span.cm-def         { color: #ffaf40; font-weight: bold; }
+.cm-s-liquibyte span.cm-keyword     { color: #c080ff; font-weight: bold; }
+.cm-s-liquibyte span.cm-builtin     { color: #ffaf40; font-weight: bold; }
+.cm-s-liquibyte span.cm-variable    { color: #5967ff; font-weight: bold; }
+.cm-s-liquibyte span.cm-string      { color: #ff8000; }
+.cm-s-liquibyte span.cm-number      { color: #0f0; font-weight: bold; }
+.cm-s-liquibyte span.cm-atom        { color: #bf3030; font-weight: bold; }
+
+.cm-s-liquibyte span.cm-variable-2  { color: #007f7f; font-weight: bold; }
+.cm-s-liquibyte span.cm-variable-3  { color: #c080ff; font-weight: bold; }
+.cm-s-liquibyte span.cm-property    { color: #999; font-weight: bold; }
+.cm-s-liquibyte span.cm-operator    { color: #fff; }
+
+.cm-s-liquibyte span.cm-meta        { color: #0f0; }
+.cm-s-liquibyte span.cm-qualifier   { color: #fff700; font-weight: bold; }
+.cm-s-liquibyte span.cm-bracket     { color: #cc7; }
+.cm-s-liquibyte span.cm-tag         { color: #ff0; font-weight: bold; }
+.cm-s-liquibyte span.cm-attribute   { color: #c080ff; font-weight: bold; }
+.cm-s-liquibyte span.cm-error       { color: #f00; }
+
+.cm-s-liquibyte div.CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25); }
+
+.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); }
+
+.cm-s-liquibyte .CodeMirror-activeline-background { background-color: rgba(0, 255, 0, 0.15); }
+
+/* Default styles for common addons */
+.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; }
+.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; }
+.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); }
+/* Scrollbars */
+/* Simple */
+.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, div.CodeMirror-simplescroll-vertical div:hover {
+	background-color: rgba(80, 80, 80, .7);
+}
+.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, div.CodeMirror-simplescroll-vertical div {
+	background-color: rgba(80, 80, 80, .3);
+	border: 1px solid #404040;
+	border-radius: 5px;
+}
+.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div {
+	border-top: 1px solid #404040;
+	border-bottom: 1px solid #404040;
+}
+.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div {
+	border-left: 1px solid #404040;
+	border-right: 1px solid #404040;
+}
+.cm-s-liquibyte div.CodeMirror-simplescroll-vertical {
+	background-color: #262626;
+}
+.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal {
+	background-color: #262626;
+	border-top: 1px solid #404040;
+}
+/* Overlay */
+.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div {
+	background-color: #404040;
+	border-radius: 5px;
+}
+.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div {
+	border: 1px solid #404040;
+}
+.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div {
+	border: 1px solid #404040;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/material.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/material.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/material.css	(revision 2)
@@ -0,0 +1,53 @@
+/*
+
+    Name:       material
+    Author:     Michael Kaminsky (http://github.com/mkaminsky11)
+
+    Original material color scheme by Mattia Astorino (https://github.com/equinusocio/material-theme)
+
+*/
+
+.cm-s-material {
+  background-color: #263238;
+  color: rgba(233, 237, 237, 1);
+}
+.cm-s-material .CodeMirror-gutters {
+  background: #263238;
+  color: rgb(83,127,126);
+  border: none;
+}
+.cm-s-material .CodeMirror-guttermarker, .cm-s-material .CodeMirror-guttermarker-subtle, .cm-s-material .CodeMirror-linenumber { color: rgb(83,127,126); }
+.cm-s-material .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }
+.cm-s-material div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); }
+.cm-s-material.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
+.cm-s-material .CodeMirror-line::selection, .cm-s-material .CodeMirror-line > span::selection, .cm-s-material .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-material .CodeMirror-line::-moz-selection, .cm-s-material .CodeMirror-line > span::-moz-selection, .cm-s-material .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
+
+.cm-s-material .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0); }
+.cm-s-material .cm-keyword { color: rgba(199, 146, 234, 1); }
+.cm-s-material .cm-operator { color: rgba(233, 237, 237, 1); }
+.cm-s-material .cm-variable-2 { color: #80CBC4; }
+.cm-s-material .cm-variable-3 { color: #82B1FF; }
+.cm-s-material .cm-builtin { color: #DECB6B; }
+.cm-s-material .cm-atom { color: #F77669; }
+.cm-s-material .cm-number { color: #F77669; }
+.cm-s-material .cm-def { color: rgba(233, 237, 237, 1); }
+.cm-s-material .cm-string { color: #C3E88D; }
+.cm-s-material .cm-string-2 { color: #80CBC4; }
+.cm-s-material .cm-comment { color: #546E7A; }
+.cm-s-material .cm-variable { color: #82B1FF; }
+.cm-s-material .cm-tag { color: #80CBC4; }
+.cm-s-material .cm-meta { color: #80CBC4; }
+.cm-s-material .cm-attribute { color: #FFCB6B; }
+.cm-s-material .cm-property { color: #80CBAE; }
+.cm-s-material .cm-qualifier { color: #DECB6B; }
+.cm-s-material .cm-variable-3 { color: #DECB6B; }
+.cm-s-material .cm-tag { color: rgba(255, 83, 112, 1); }
+.cm-s-material .cm-error {
+  color: rgba(255, 255, 255, 1.0);
+  background-color: #EC5F67;
+}
+.cm-s-material .CodeMirror-matchingbracket {
+  text-decoration: underline;
+  color: white !important;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mbo.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mbo.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mbo.css	(revision 2)
@@ -0,0 +1,37 @@
+/****************************************************************/
+/*   Based on mbonaci's Brackets mbo theme                      */
+/*   https://github.com/mbonaci/global/blob/master/Mbo.tmTheme  */
+/*   Create your own: http://tmtheme-editor.herokuapp.com       */
+/****************************************************************/
+
+.cm-s-mbo.CodeMirror { background: #2c2c2c; color: #ffffec; }
+.cm-s-mbo div.CodeMirror-selected { background: #716C62; }
+.cm-s-mbo .CodeMirror-line::selection, .cm-s-mbo .CodeMirror-line > span::selection, .cm-s-mbo .CodeMirror-line > span > span::selection { background: rgba(113, 108, 98, .99); }
+.cm-s-mbo .CodeMirror-line::-moz-selection, .cm-s-mbo .CodeMirror-line > span::-moz-selection, .cm-s-mbo .CodeMirror-line > span > span::-moz-selection { background: rgba(113, 108, 98, .99); }
+.cm-s-mbo .CodeMirror-gutters { background: #4e4e4e; border-right: 0px; }
+.cm-s-mbo .CodeMirror-guttermarker { color: white; }
+.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; }
+.cm-s-mbo .CodeMirror-linenumber { color: #dadada; }
+.cm-s-mbo .CodeMirror-cursor { border-left: 1px solid #ffffec; }
+
+.cm-s-mbo span.cm-comment { color: #95958a; }
+.cm-s-mbo span.cm-atom { color: #00a8c6; }
+.cm-s-mbo span.cm-number { color: #00a8c6; }
+
+.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute { color: #9ddfe9; }
+.cm-s-mbo span.cm-keyword { color: #ffb928; }
+.cm-s-mbo span.cm-string { color: #ffcf6c; }
+.cm-s-mbo span.cm-string.cm-property { color: #ffffec; }
+
+.cm-s-mbo span.cm-variable { color: #ffffec; }
+.cm-s-mbo span.cm-variable-2 { color: #00a8c6; }
+.cm-s-mbo span.cm-def { color: #ffffec; }
+.cm-s-mbo span.cm-bracket { color: #fffffc; font-weight: bold; }
+.cm-s-mbo span.cm-tag { color: #9ddfe9; }
+.cm-s-mbo span.cm-link { color: #f54b07; }
+.cm-s-mbo span.cm-error { border-bottom: #636363; color: #ffffec; }
+.cm-s-mbo span.cm-qualifier { color: #ffffec; }
+
+.cm-s-mbo .CodeMirror-activeline-background { background: #494b41; }
+.cm-s-mbo .CodeMirror-matchingbracket { color: #ffb928 !important; }
+.cm-s-mbo .CodeMirror-matchingtag { background: rgba(255, 255, 255, .37); }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mdn-like.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mdn-like.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/mdn-like.css	(revision 2)
@@ -0,0 +1,46 @@
+/*
+  MDN-LIKE Theme - Mozilla
+  Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>
+  Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues
+  GitHub: @peterkroon
+
+  The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation
+
+*/
+.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; }
+.cm-s-mdn-like div.CodeMirror-selected { background: #cfc; }
+.cm-s-mdn-like .CodeMirror-line::selection, .cm-s-mdn-like .CodeMirror-line > span::selection, .cm-s-mdn-like .CodeMirror-line > span > span::selection { background: #cfc; }
+.cm-s-mdn-like .CodeMirror-line::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span::-moz-selection, .cm-s-mdn-like .CodeMirror-line > span > span::-moz-selection { background: #cfc; }
+
+.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }
+.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; }
+.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }
+
+.cm-s-mdn-like .cm-keyword { color: #6262FF; }
+.cm-s-mdn-like .cm-atom { color: #F90; }
+.cm-s-mdn-like .cm-number { color:  #ca7841; }
+.cm-s-mdn-like .cm-def { color: #8DA6CE; }
+.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }
+.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; }
+
+.cm-s-mdn-like .cm-variable { color: #07a; }
+.cm-s-mdn-like .cm-property { color: #905; }
+.cm-s-mdn-like .cm-qualifier { color: #690; }
+
+.cm-s-mdn-like .cm-operator { color: #cda869; }
+.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }
+.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }
+.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/
+.cm-s-mdn-like .cm-meta { color: #000; } /*?*/
+.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/
+.cm-s-mdn-like .cm-tag { color: #997643; }
+.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/
+.cm-s-mdn-like .cm-header { color: #FF6400; }
+.cm-s-mdn-like .cm-hr { color: #AEAEAE; }
+.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; }
+.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }
+
+div.cm-s-mdn-like .CodeMirror-activeline-background { background: #efefff; }
+div.cm-s-mdn-like span.CodeMirror-matchingbracket { outline:1px solid grey; color: inherit; }
+
+.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/midnight.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/midnight.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/midnight.css	(revision 2)
@@ -0,0 +1,45 @@
+/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */
+
+/*<!--match-->*/
+.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; }
+.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; }
+
+/*<!--activeline-->*/
+.cm-s-midnight .CodeMirror-activeline-background { background: #253540; }
+
+.cm-s-midnight.CodeMirror {
+    background: #0F192A;
+    color: #D1EDFF;
+}
+
+.cm-s-midnight.CodeMirror { border-top: 1px solid black; border-bottom: 1px solid black; }
+
+.cm-s-midnight div.CodeMirror-selected { background: #314D67; }
+.cm-s-midnight .CodeMirror-line::selection, .cm-s-midnight .CodeMirror-line > span::selection, .cm-s-midnight .CodeMirror-line > span > span::selection { background: rgba(49, 77, 103, .99); }
+.cm-s-midnight .CodeMirror-line::-moz-selection, .cm-s-midnight .CodeMirror-line > span::-moz-selection, .cm-s-midnight .CodeMirror-line > span > span::-moz-selection { background: rgba(49, 77, 103, .99); }
+.cm-s-midnight .CodeMirror-gutters { background: #0F192A; border-right: 1px solid; }
+.cm-s-midnight .CodeMirror-guttermarker { color: white; }
+.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-midnight .CodeMirror-linenumber { color: #D0D0D0; }
+.cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0; }
+
+.cm-s-midnight span.cm-comment { color: #428BDD; }
+.cm-s-midnight span.cm-atom { color: #AE81FF; }
+.cm-s-midnight span.cm-number { color: #D1EDFF; }
+
+.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute { color: #A6E22E; }
+.cm-s-midnight span.cm-keyword { color: #E83737; }
+.cm-s-midnight span.cm-string { color: #1DC116; }
+
+.cm-s-midnight span.cm-variable { color: #FFAA3E; }
+.cm-s-midnight span.cm-variable-2 { color: #FFAA3E; }
+.cm-s-midnight span.cm-def { color: #4DD; }
+.cm-s-midnight span.cm-bracket { color: #D1EDFF; }
+.cm-s-midnight span.cm-tag { color: #449; }
+.cm-s-midnight span.cm-link { color: #AE81FF; }
+.cm-s-midnight span.cm-error { background: #F92672; color: #F8F8F0; }
+
+.cm-s-midnight .CodeMirror-matchingbracket {
+  text-decoration: underline;
+  color: white !important;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/monokai.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/monokai.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/monokai.css	(revision 2)
@@ -0,0 +1,36 @@
+/* Based on Sublime Text's Monokai theme */
+
+.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; }
+.cm-s-monokai div.CodeMirror-selected { background: #49483E; }
+.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); }
+.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); }
+.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; }
+.cm-s-monokai .CodeMirror-guttermarker { color: white; }
+.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }
+
+.cm-s-monokai span.cm-comment { color: #75715e; }
+.cm-s-monokai span.cm-atom { color: #ae81ff; }
+.cm-s-monokai span.cm-number { color: #ae81ff; }
+
+.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; }
+.cm-s-monokai span.cm-keyword { color: #f92672; }
+.cm-s-monokai span.cm-builtin { color: #66d9ef; }
+.cm-s-monokai span.cm-string { color: #e6db74; }
+
+.cm-s-monokai span.cm-variable { color: #f8f8f2; }
+.cm-s-monokai span.cm-variable-2 { color: #9effff; }
+.cm-s-monokai span.cm-variable-3 { color: #66d9ef; }
+.cm-s-monokai span.cm-def { color: #fd971f; }
+.cm-s-monokai span.cm-bracket { color: #f8f8f2; }
+.cm-s-monokai span.cm-tag { color: #f92672; }
+.cm-s-monokai span.cm-header { color: #ae81ff; }
+.cm-s-monokai span.cm-link { color: #ae81ff; }
+.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; }
+
+.cm-s-monokai .CodeMirror-activeline-background { background: #373831; }
+.cm-s-monokai .CodeMirror-matchingbracket {
+  text-decoration: underline;
+  color: white !important;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neat.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neat.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neat.css	(revision 2)
@@ -0,0 +1,12 @@
+.cm-s-neat span.cm-comment { color: #a86; }
+.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }
+.cm-s-neat span.cm-string { color: #a22; }
+.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }
+.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }
+.cm-s-neat span.cm-variable { color: black; }
+.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
+.cm-s-neat span.cm-meta { color: #555; }
+.cm-s-neat span.cm-link { color: #3a3; }
+
+.cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neo.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neo.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/neo.css	(revision 2)
@@ -0,0 +1,43 @@
+/* neo theme for codemirror */
+
+/* Color scheme */
+
+.cm-s-neo.CodeMirror {
+  background-color:#ffffff;
+  color:#2e383c;
+  line-height:1.4375;
+}
+.cm-s-neo .cm-comment { color:#75787b; }
+.cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; }
+.cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; }
+.cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; }
+.cm-s-neo .cm-string { color:#b35e14; }
+.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; }
+
+
+/* Editor styling */
+
+.cm-s-neo pre {
+  padding:0;
+}
+
+.cm-s-neo .CodeMirror-gutters {
+  border:none;
+  border-right:10px solid transparent;
+  background-color:transparent;
+}
+
+.cm-s-neo .CodeMirror-linenumber {
+  padding:0;
+  color:#e0e2e5;
+}
+
+.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }
+.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }
+
+.cm-s-neo .CodeMirror-cursor {
+  width: auto;
+  border: 0;
+  background: rgba(155,157,162,0.37);
+  z-index: 1;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/night.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/night.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/night.css	(revision 2)
@@ -0,0 +1,27 @@
+/* Loosely based on the Midnight Textmate theme */
+
+.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }
+.cm-s-night div.CodeMirror-selected { background: #447; }
+.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); }
+.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); }
+.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-night .CodeMirror-guttermarker { color: white; }
+.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }
+.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
+.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-night span.cm-comment { color: #8900d1; }
+.cm-s-night span.cm-atom { color: #845dc4; }
+.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
+.cm-s-night span.cm-keyword { color: #599eff; }
+.cm-s-night span.cm-string { color: #37f14a; }
+.cm-s-night span.cm-meta { color: #7678e2; }
+.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
+.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
+.cm-s-night span.cm-bracket { color: #8da6ce; }
+.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
+.cm-s-night span.cm-link { color: #845dc4; }
+.cm-s-night span.cm-error { color: #9d1e15; }
+
+.cm-s-night .CodeMirror-activeline-background { background: #1C005A; }
+.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-dark.css	(revision 2)
@@ -0,0 +1,38 @@
+/*
+
+    Name:       Paraíso (Dark)
+    Author:     Jan T. Sott
+
+    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
+    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+
+*/
+
+.cm-s-paraiso-dark.CodeMirror { background: #2f1e2e; color: #b9b6b0; }
+.cm-s-paraiso-dark div.CodeMirror-selected { background: #41323f; }
+.cm-s-paraiso-dark .CodeMirror-line::selection, .cm-s-paraiso-dark .CodeMirror-line > span::selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::selection { background: rgba(65, 50, 63, .99); }
+.cm-s-paraiso-dark .CodeMirror-line::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(65, 50, 63, .99); }
+.cm-s-paraiso-dark .CodeMirror-gutters { background: #2f1e2e; border-right: 0px; }
+.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; }
+.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; }
+.cm-s-paraiso-dark .CodeMirror-linenumber { color: #776e71; }
+.cm-s-paraiso-dark .CodeMirror-cursor { border-left: 1px solid #8d8687; }
+
+.cm-s-paraiso-dark span.cm-comment { color: #e96ba8; }
+.cm-s-paraiso-dark span.cm-atom { color: #815ba4; }
+.cm-s-paraiso-dark span.cm-number { color: #815ba4; }
+
+.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute { color: #48b685; }
+.cm-s-paraiso-dark span.cm-keyword { color: #ef6155; }
+.cm-s-paraiso-dark span.cm-string { color: #fec418; }
+
+.cm-s-paraiso-dark span.cm-variable { color: #48b685; }
+.cm-s-paraiso-dark span.cm-variable-2 { color: #06b6ef; }
+.cm-s-paraiso-dark span.cm-def { color: #f99b15; }
+.cm-s-paraiso-dark span.cm-bracket { color: #b9b6b0; }
+.cm-s-paraiso-dark span.cm-tag { color: #ef6155; }
+.cm-s-paraiso-dark span.cm-link { color: #815ba4; }
+.cm-s-paraiso-dark span.cm-error { background: #ef6155; color: #8d8687; }
+
+.cm-s-paraiso-dark .CodeMirror-activeline-background { background: #4D344A; }
+.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-light.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-light.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/paraiso-light.css	(revision 2)
@@ -0,0 +1,38 @@
+/*
+
+    Name:       Paraíso (Light)
+    Author:     Jan T. Sott
+
+    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
+    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+
+*/
+
+.cm-s-paraiso-light.CodeMirror { background: #e7e9db; color: #41323f; }
+.cm-s-paraiso-light div.CodeMirror-selected { background: #b9b6b0; }
+.cm-s-paraiso-light .CodeMirror-line::selection, .cm-s-paraiso-light .CodeMirror-line > span::selection, .cm-s-paraiso-light .CodeMirror-line > span > span::selection { background: #b9b6b0; }
+.cm-s-paraiso-light .CodeMirror-line::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span::-moz-selection, .cm-s-paraiso-light .CodeMirror-line > span > span::-moz-selection { background: #b9b6b0; }
+.cm-s-paraiso-light .CodeMirror-gutters { background: #e7e9db; border-right: 0px; }
+.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; }
+.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; }
+.cm-s-paraiso-light .CodeMirror-linenumber { color: #8d8687; }
+.cm-s-paraiso-light .CodeMirror-cursor { border-left: 1px solid #776e71; }
+
+.cm-s-paraiso-light span.cm-comment { color: #e96ba8; }
+.cm-s-paraiso-light span.cm-atom { color: #815ba4; }
+.cm-s-paraiso-light span.cm-number { color: #815ba4; }
+
+.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute { color: #48b685; }
+.cm-s-paraiso-light span.cm-keyword { color: #ef6155; }
+.cm-s-paraiso-light span.cm-string { color: #fec418; }
+
+.cm-s-paraiso-light span.cm-variable { color: #48b685; }
+.cm-s-paraiso-light span.cm-variable-2 { color: #06b6ef; }
+.cm-s-paraiso-light span.cm-def { color: #f99b15; }
+.cm-s-paraiso-light span.cm-bracket { color: #41323f; }
+.cm-s-paraiso-light span.cm-tag { color: #ef6155; }
+.cm-s-paraiso-light span.cm-link { color: #815ba4; }
+.cm-s-paraiso-light span.cm-error { background: #ef6155; color: #776e71; }
+
+.cm-s-paraiso-light .CodeMirror-activeline-background { background: #CFD1C4; }
+.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/pastel-on-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/pastel-on-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/pastel-on-dark.css	(revision 2)
@@ -0,0 +1,52 @@
+/**
+ * Pastel On Dark theme ported from ACE editor
+ * @license MIT
+ * @copyright AtomicPages LLC 2014
+ * @author Dennis Thompson, AtomicPages LLC
+ * @version 1.1
+ * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme
+ */
+
+.cm-s-pastel-on-dark.CodeMirror {
+	background: #2c2827;
+	color: #8F938F;
+	line-height: 1.5;
+}
+.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2); }
+.cm-s-pastel-on-dark .CodeMirror-line::selection, .cm-s-pastel-on-dark .CodeMirror-line > span::selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::selection { background: rgba(221,240,255,0.2); }
+.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span::-moz-selection, .cm-s-pastel-on-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(221,240,255,0.2); }
+
+.cm-s-pastel-on-dark .CodeMirror-gutters {
+	background: #34302f;
+	border-right: 0px;
+	padding: 0 3px;
+}
+.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; }
+.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; }
+.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; }
+.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }
+.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; }
+.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; }
+.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; }
+.cm-s-pastel-on-dark span.cm-property { color: #8F938F; }
+.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; }
+.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; }
+.cm-s-pastel-on-dark span.cm-string { color: #66A968; }
+.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; }
+.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; }
+.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; }
+.cm-s-pastel-on-dark span.cm-def { color: #757aD8; }
+.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; }
+.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; }
+.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; }
+.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; }
+.cm-s-pastel-on-dark span.cm-error {
+	background: #757aD8;
+	color: #f8f8f0;
+}
+.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031); }
+.cm-s-pastel-on-dark .CodeMirror-matchingbracket {
+	border: 1px solid rgba(255,255,255,0.25);
+	color: #8F938F !important;
+	margin: -1px -1px 0 -1px;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/railscasts.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/railscasts.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/railscasts.css	(revision 2)
@@ -0,0 +1,34 @@
+/*
+
+    Name:       Railscasts
+    Author:     Ryan Bates (http://railscasts.com)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-railscasts.CodeMirror {background: #2b2b2b; color: #f4f1ed;}
+.cm-s-railscasts div.CodeMirror-selected {background: #272935 !important;}
+.cm-s-railscasts .CodeMirror-gutters {background: #2b2b2b; border-right: 0px;}
+.cm-s-railscasts .CodeMirror-linenumber {color: #5a647e;}
+.cm-s-railscasts .CodeMirror-cursor {border-left: 1px solid #d4cfc9 !important;}
+
+.cm-s-railscasts span.cm-comment {color: #bc9458;}
+.cm-s-railscasts span.cm-atom {color: #b6b3eb;}
+.cm-s-railscasts span.cm-number {color: #b6b3eb;}
+
+.cm-s-railscasts span.cm-property, .cm-s-railscasts span.cm-attribute {color: #a5c261;}
+.cm-s-railscasts span.cm-keyword {color: #da4939;}
+.cm-s-railscasts span.cm-string {color: #ffc66d;}
+
+.cm-s-railscasts span.cm-variable {color: #a5c261;}
+.cm-s-railscasts span.cm-variable-2 {color: #6d9cbe;}
+.cm-s-railscasts span.cm-def {color: #cc7833;}
+.cm-s-railscasts span.cm-error {background: #da4939; color: #d4cfc9;}
+.cm-s-railscasts span.cm-bracket {color: #f4f1ed;}
+.cm-s-railscasts span.cm-tag {color: #da4939;}
+.cm-s-railscasts span.cm-link {color: #b6b3eb;}
+
+.cm-s-railscasts .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
+.cm-s-railscasts .CodeMirror-activeline-background { background: #303040; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/rubyblue.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/rubyblue.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/rubyblue.css	(revision 2)
@@ -0,0 +1,25 @@
+.cm-s-rubyblue.CodeMirror { background: #112435; color: white; }
+.cm-s-rubyblue div.CodeMirror-selected { background: #38566F; }
+.cm-s-rubyblue .CodeMirror-line::selection, .cm-s-rubyblue .CodeMirror-line > span::selection, .cm-s-rubyblue .CodeMirror-line > span > span::selection { background: rgba(56, 86, 111, 0.99); }
+.cm-s-rubyblue .CodeMirror-line::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span::-moz-selection, .cm-s-rubyblue .CodeMirror-line > span > span::-moz-selection { background: rgba(56, 86, 111, 0.99); }
+.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; }
+.cm-s-rubyblue .CodeMirror-guttermarker { color: white; }
+.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; }
+.cm-s-rubyblue .CodeMirror-linenumber { color: white; }
+.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }
+.cm-s-rubyblue span.cm-atom { color: #F4C20B; }
+.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }
+.cm-s-rubyblue span.cm-keyword { color: #F0F; }
+.cm-s-rubyblue span.cm-string { color: #F08047; }
+.cm-s-rubyblue span.cm-meta { color: #F0F; }
+.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
+.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
+.cm-s-rubyblue span.cm-bracket { color: #F0F; }
+.cm-s-rubyblue span.cm-link { color: #F4C20B; }
+.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
+.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
+.cm-s-rubyblue span.cm-error { color: #AF2018; }
+
+.cm-s-rubyblue .CodeMirror-activeline-background { background: #173047; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/seti.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/seti.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/seti.css	(revision 2)
@@ -0,0 +1,44 @@
+/*
+
+    Name:       seti
+    Author:     Michael Kaminsky (http://github.com/mkaminsky11)
+
+    Original seti color scheme by Jesse Weed (https://github.com/jesseweed/seti-syntax)
+
+*/
+
+
+.cm-s-seti.CodeMirror {
+  background-color: #151718 !important;
+  color: #CFD2D1 !important;
+  border: none;
+}
+.cm-s-seti .CodeMirror-gutters {
+  color: #404b53;
+  background-color: #0E1112;
+  border: none;
+}
+.cm-s-seti .CodeMirror-cursor { border-left: solid thin #f8f8f0; }
+.cm-s-seti .CodeMirror-linenumber { color: #6D8A88; }
+.cm-s-seti.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
+.cm-s-seti .CodeMirror-line::selection, .cm-s-seti .CodeMirror-line > span::selection, .cm-s-seti .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-seti .CodeMirror-line::-moz-selection, .cm-s-seti .CodeMirror-line > span::-moz-selection, .cm-s-seti .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
+.cm-s-seti span.cm-comment { color: #41535b; }
+.cm-s-seti span.cm-string, .cm-s-seti span.cm-string-2 { color: #55b5db; }
+.cm-s-seti span.cm-number { color: #cd3f45; }
+.cm-s-seti span.cm-variable { color: #55b5db; }
+.cm-s-seti span.cm-variable-2 { color: #a074c4; }
+.cm-s-seti span.cm-def { color: #55b5db; }
+.cm-s-seti span.cm-keyword { color: #ff79c6; }
+.cm-s-seti span.cm-operator { color: #9fca56; }
+.cm-s-seti span.cm-keyword { color: #e6cd69; }
+.cm-s-seti span.cm-atom { color: #cd3f45; }
+.cm-s-seti span.cm-meta { color: #55b5db; }
+.cm-s-seti span.cm-tag { color: #55b5db; }
+.cm-s-seti span.cm-attribute { color: #9fca56; }
+.cm-s-seti span.cm-qualifier { color: #9fca56; }
+.cm-s-seti span.cm-property { color: #a074c4; }
+.cm-s-seti span.cm-variable-3 { color: #9fca56; }
+.cm-s-seti span.cm-builtin { color: #9fca56; }
+.cm-s-seti .CodeMirror-activeline-background { background: #101213; }
+.cm-s-seti .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/solarized.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/solarized.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/solarized.css	(revision 2)
@@ -0,0 +1,169 @@
+/*
+Solarized theme for code-mirror
+http://ethanschoonover.com/solarized
+*/
+
+/*
+Solarized color palette
+http://ethanschoonover.com/solarized/img/solarized-palette.png
+*/
+
+.solarized.base03 { color: #002b36; }
+.solarized.base02 { color: #073642; }
+.solarized.base01 { color: #586e75; }
+.solarized.base00 { color: #657b83; }
+.solarized.base0 { color: #839496; }
+.solarized.base1 { color: #93a1a1; }
+.solarized.base2 { color: #eee8d5; }
+.solarized.base3  { color: #fdf6e3; }
+.solarized.solar-yellow  { color: #b58900; }
+.solarized.solar-orange  { color: #cb4b16; }
+.solarized.solar-red { color: #dc322f; }
+.solarized.solar-magenta { color: #d33682; }
+.solarized.solar-violet  { color: #6c71c4; }
+.solarized.solar-blue { color: #268bd2; }
+.solarized.solar-cyan { color: #2aa198; }
+.solarized.solar-green { color: #859900; }
+
+/* Color scheme for code-mirror */
+
+.cm-s-solarized {
+  line-height: 1.45em;
+  color-profile: sRGB;
+  rendering-intent: auto;
+}
+.cm-s-solarized.cm-s-dark {
+  color: #839496;
+  background-color: #002b36;
+  text-shadow: #002b36 0 1px;
+}
+.cm-s-solarized.cm-s-light {
+  background-color: #fdf6e3;
+  color: #657b83;
+  text-shadow: #eee8d5 0 1px;
+}
+
+.cm-s-solarized .CodeMirror-widget {
+  text-shadow: none;
+}
+
+.cm-s-solarized .cm-header { color: #586e75; }
+.cm-s-solarized .cm-quote { color: #93a1a1; }
+
+.cm-s-solarized .cm-keyword { color: #cb4b16; }
+.cm-s-solarized .cm-atom { color: #d33682; }
+.cm-s-solarized .cm-number { color: #d33682; }
+.cm-s-solarized .cm-def { color: #2aa198; }
+
+.cm-s-solarized .cm-variable { color: #839496; }
+.cm-s-solarized .cm-variable-2 { color: #b58900; }
+.cm-s-solarized .cm-variable-3 { color: #6c71c4; }
+
+.cm-s-solarized .cm-property { color: #2aa198; }
+.cm-s-solarized .cm-operator { color: #6c71c4; }
+
+.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; }
+
+.cm-s-solarized .cm-string { color: #859900; }
+.cm-s-solarized .cm-string-2 { color: #b58900; }
+
+.cm-s-solarized .cm-meta { color: #859900; }
+.cm-s-solarized .cm-qualifier { color: #b58900; }
+.cm-s-solarized .cm-builtin { color: #d33682; }
+.cm-s-solarized .cm-bracket { color: #cb4b16; }
+.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; }
+.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; }
+.cm-s-solarized .cm-tag { color: #93a1a1; }
+.cm-s-solarized .cm-attribute { color: #2aa198; }
+.cm-s-solarized .cm-hr {
+  color: transparent;
+  border-top: 1px solid #586e75;
+  display: block;
+}
+.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; }
+.cm-s-solarized .cm-special { color: #6c71c4; }
+.cm-s-solarized .cm-em {
+  color: #999;
+  text-decoration: underline;
+  text-decoration-style: dotted;
+}
+.cm-s-solarized .cm-strong { color: #eee; }
+.cm-s-solarized .cm-error,
+.cm-s-solarized .cm-invalidchar {
+  color: #586e75;
+  border-bottom: 1px dotted #dc322f;
+}
+
+.cm-s-solarized.cm-s-dark div.CodeMirror-selected { background: #073642; }
+.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); }
+.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(7, 54, 66, 0.99); }
+
+.cm-s-solarized.cm-s-light div.CodeMirror-selected { background: #eee8d5; }
+.cm-s-solarized.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: #eee8d5; }
+.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-ligh .CodeMirror-line > span::-moz-selection, .cm-s-ligh .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; }
+
+/* Editor styling */
+
+
+
+/* Little shadow on the view-port of the buffer view */
+.cm-s-solarized.CodeMirror {
+  -moz-box-shadow: inset 7px 0 12px -6px #000;
+  -webkit-box-shadow: inset 7px 0 12px -6px #000;
+  box-shadow: inset 7px 0 12px -6px #000;
+}
+
+/* Remove gutter border */
+.cm-s-solarized .CodeMirror-gutters {
+  border-right: 0;
+}
+
+/* Gutter colors and line number styling based of color scheme (dark / light) */
+
+/* Dark */
+.cm-s-solarized.cm-s-dark .CodeMirror-gutters {
+  background-color: #073642;
+}
+
+.cm-s-solarized.cm-s-dark .CodeMirror-linenumber {
+  color: #586e75;
+  text-shadow: #021014 0 -1px;
+}
+
+/* Light */
+.cm-s-solarized.cm-s-light .CodeMirror-gutters {
+  background-color: #eee8d5;
+}
+
+.cm-s-solarized.cm-s-light .CodeMirror-linenumber {
+  color: #839496;
+}
+
+/* Common */
+.cm-s-solarized .CodeMirror-linenumber {
+  padding: 0 5px;
+}
+.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; }
+.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; }
+.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; }
+
+.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text {
+  color: #586e75;
+}
+
+/* Cursor */
+.cm-s-solarized .CodeMirror-cursor { border-left: 1px solid #819090; }
+
+/* Fat cursor */
+.cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; }
+.cm-s-solarized.cm-s-light .cm-animate-fat-cursor { background-color: #77ee77; }
+.cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: #586e75; }
+.cm-s-solarized.cm-s-dark .cm-animate-fat-cursor { background-color: #586e75; }
+
+/* Active line */
+.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background {
+  background: rgba(255, 255, 255, 0.06);
+}
+.cm-s-solarized.cm-s-light .CodeMirror-activeline-background {
+  background: rgba(0, 0, 0, 0.06);
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/the-matrix.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/the-matrix.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/the-matrix.css	(revision 2)
@@ -0,0 +1,30 @@
+.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; }
+.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D; }
+.cm-s-the-matrix .CodeMirror-line::selection, .cm-s-the-matrix .CodeMirror-line > span::selection, .cm-s-the-matrix .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); }
+.cm-s-the-matrix .CodeMirror-line::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span::-moz-selection, .cm-s-the-matrix .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); }
+.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; }
+.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; }
+.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; }
+.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; }
+.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00; }
+
+.cm-s-the-matrix span.cm-keyword { color: #008803; font-weight: bold; }
+.cm-s-the-matrix span.cm-atom { color: #3FF; }
+.cm-s-the-matrix span.cm-number { color: #FFB94F; }
+.cm-s-the-matrix span.cm-def { color: #99C; }
+.cm-s-the-matrix span.cm-variable { color: #F6C; }
+.cm-s-the-matrix span.cm-variable-2 { color: #C6F; }
+.cm-s-the-matrix span.cm-variable-3 { color: #96F; }
+.cm-s-the-matrix span.cm-property { color: #62FFA0; }
+.cm-s-the-matrix span.cm-operator { color: #999; }
+.cm-s-the-matrix span.cm-comment { color: #CCCCCC; }
+.cm-s-the-matrix span.cm-string { color: #39C; }
+.cm-s-the-matrix span.cm-meta { color: #C9F; }
+.cm-s-the-matrix span.cm-qualifier { color: #FFF700; }
+.cm-s-the-matrix span.cm-builtin { color: #30a; }
+.cm-s-the-matrix span.cm-bracket { color: #cc7; }
+.cm-s-the-matrix span.cm-tag { color: #FFBD40; }
+.cm-s-the-matrix span.cm-attribute { color: #FFF700; }
+.cm-s-the-matrix span.cm-error { color: #FF0000; }
+
+.cm-s-the-matrix .CodeMirror-activeline-background { background: #040; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-bright.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-bright.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-bright.css	(revision 2)
@@ -0,0 +1,35 @@
+/*
+
+    Name:       Tomorrow Night - Bright
+    Author:     Chris Kempson
+
+    Port done by Gerard Braad <me@gbraad.nl>
+
+*/
+
+.cm-s-tomorrow-night-bright.CodeMirror { background: #000000; color: #eaeaea; }
+.cm-s-tomorrow-night-bright div.CodeMirror-selected { background: #424242; }
+.cm-s-tomorrow-night-bright .CodeMirror-gutters { background: #000000; border-right: 0px; }
+.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; }
+.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; }
+.cm-s-tomorrow-night-bright .CodeMirror-linenumber { color: #424242; }
+.cm-s-tomorrow-night-bright .CodeMirror-cursor { border-left: 1px solid #6A6A6A; }
+
+.cm-s-tomorrow-night-bright span.cm-comment { color: #d27b53; }
+.cm-s-tomorrow-night-bright span.cm-atom { color: #a16a94; }
+.cm-s-tomorrow-night-bright span.cm-number { color: #a16a94; }
+
+.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute { color: #99cc99; }
+.cm-s-tomorrow-night-bright span.cm-keyword { color: #d54e53; }
+.cm-s-tomorrow-night-bright span.cm-string { color: #e7c547; }
+
+.cm-s-tomorrow-night-bright span.cm-variable { color: #b9ca4a; }
+.cm-s-tomorrow-night-bright span.cm-variable-2 { color: #7aa6da; }
+.cm-s-tomorrow-night-bright span.cm-def { color: #e78c45; }
+.cm-s-tomorrow-night-bright span.cm-bracket { color: #eaeaea; }
+.cm-s-tomorrow-night-bright span.cm-tag { color: #d54e53; }
+.cm-s-tomorrow-night-bright span.cm-link { color: #a16a94; }
+.cm-s-tomorrow-night-bright span.cm-error { background: #d54e53; color: #6A6A6A; }
+
+.cm-s-tomorrow-night-bright .CodeMirror-activeline-background { background: #2a2a2a; }
+.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-eighties.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-eighties.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/tomorrow-night-eighties.css	(revision 2)
@@ -0,0 +1,38 @@
+/*
+
+    Name:       Tomorrow Night - Eighties
+    Author:     Chris Kempson
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-tomorrow-night-eighties.CodeMirror { background: #000000; color: #CCCCCC; }
+.cm-s-tomorrow-night-eighties div.CodeMirror-selected { background: #2D2D2D; }
+.cm-s-tomorrow-night-eighties .CodeMirror-line::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::selection { background: rgba(45, 45, 45, 0.99); }
+.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span::-moz-selection, .cm-s-tomorrow-night-eighties .CodeMirror-line > span > span::-moz-selection { background: rgba(45, 45, 45, 0.99); }
+.cm-s-tomorrow-night-eighties .CodeMirror-gutters { background: #000000; border-right: 0px; }
+.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; }
+.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; }
+.cm-s-tomorrow-night-eighties .CodeMirror-linenumber { color: #515151; }
+.cm-s-tomorrow-night-eighties .CodeMirror-cursor { border-left: 1px solid #6A6A6A; }
+
+.cm-s-tomorrow-night-eighties span.cm-comment { color: #d27b53; }
+.cm-s-tomorrow-night-eighties span.cm-atom { color: #a16a94; }
+.cm-s-tomorrow-night-eighties span.cm-number { color: #a16a94; }
+
+.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute { color: #99cc99; }
+.cm-s-tomorrow-night-eighties span.cm-keyword { color: #f2777a; }
+.cm-s-tomorrow-night-eighties span.cm-string { color: #ffcc66; }
+
+.cm-s-tomorrow-night-eighties span.cm-variable { color: #99cc99; }
+.cm-s-tomorrow-night-eighties span.cm-variable-2 { color: #6699cc; }
+.cm-s-tomorrow-night-eighties span.cm-def { color: #f99157; }
+.cm-s-tomorrow-night-eighties span.cm-bracket { color: #CCCCCC; }
+.cm-s-tomorrow-night-eighties span.cm-tag { color: #f2777a; }
+.cm-s-tomorrow-night-eighties span.cm-link { color: #a16a94; }
+.cm-s-tomorrow-night-eighties span.cm-error { background: #f2777a; color: #6A6A6A; }
+
+.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background { background: #343600; }
+.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ttcn.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ttcn.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/ttcn.css	(revision 2)
@@ -0,0 +1,64 @@
+.cm-s-ttcn .cm-quote { color: #090; }
+.cm-s-ttcn .cm-negative { color: #d44; }
+.cm-s-ttcn .cm-positive { color: #292; }
+.cm-s-ttcn .cm-header, .cm-strong { font-weight: bold; }
+.cm-s-ttcn .cm-em { font-style: italic; }
+.cm-s-ttcn .cm-link { text-decoration: underline; }
+.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; }
+.cm-s-ttcn .cm-header { color: #00f; font-weight: bold; }
+
+.cm-s-ttcn .cm-atom { color: #219; }
+.cm-s-ttcn .cm-attribute { color: #00c; }
+.cm-s-ttcn .cm-bracket { color: #997; }
+.cm-s-ttcn .cm-comment { color: #333333; }
+.cm-s-ttcn .cm-def { color: #00f; }
+.cm-s-ttcn .cm-em { font-style: italic; }
+.cm-s-ttcn .cm-error { color: #f00; }
+.cm-s-ttcn .cm-hr { color: #999; }
+.cm-s-ttcn .cm-invalidchar { color: #f00; }
+.cm-s-ttcn .cm-keyword { font-weight:bold; }
+.cm-s-ttcn .cm-link { color: #00c; text-decoration: underline; }
+.cm-s-ttcn .cm-meta { color: #555; }
+.cm-s-ttcn .cm-negative { color: #d44; }
+.cm-s-ttcn .cm-positive { color: #292; }
+.cm-s-ttcn .cm-qualifier { color: #555; }
+.cm-s-ttcn .cm-strikethrough { text-decoration: line-through; }
+.cm-s-ttcn .cm-string { color: #006400; }
+.cm-s-ttcn .cm-string-2 { color: #f50; }
+.cm-s-ttcn .cm-strong { font-weight: bold; }
+.cm-s-ttcn .cm-tag { color: #170; }
+.cm-s-ttcn .cm-variable { color: #8B2252; }
+.cm-s-ttcn .cm-variable-2 { color: #05a; }
+.cm-s-ttcn .cm-variable-3 { color: #085; }
+
+.cm-s-ttcn .cm-invalidchar { color: #f00; }
+
+/* ASN */
+.cm-s-ttcn .cm-accessTypes,
+.cm-s-ttcn .cm-compareTypes { color: #27408B; }
+.cm-s-ttcn .cm-cmipVerbs { color: #8B2252; }
+.cm-s-ttcn .cm-modifier { color:#D2691E; }
+.cm-s-ttcn .cm-status { color:#8B4545; }
+.cm-s-ttcn .cm-storage { color:#A020F0; }
+.cm-s-ttcn .cm-tags { color:#006400; }
+
+/* CFG */
+.cm-s-ttcn .cm-externalCommands { color: #8B4545; font-weight:bold; }
+.cm-s-ttcn .cm-fileNCtrlMaskOptions,
+.cm-s-ttcn .cm-sectionTitle { color: #2E8B57; font-weight:bold; }
+
+/* TTCN */
+.cm-s-ttcn .cm-booleanConsts,
+.cm-s-ttcn .cm-otherConsts,
+.cm-s-ttcn .cm-verdictConsts { color: #006400; }
+.cm-s-ttcn .cm-configOps,
+.cm-s-ttcn .cm-functionOps,
+.cm-s-ttcn .cm-portOps,
+.cm-s-ttcn .cm-sutOps,
+.cm-s-ttcn .cm-timerOps,
+.cm-s-ttcn .cm-verdictOps { color: #0000FF; }
+.cm-s-ttcn .cm-preprocessor,
+.cm-s-ttcn .cm-templateMatch,
+.cm-s-ttcn .cm-ttcn3Macros { color: #27408B; }
+.cm-s-ttcn .cm-types { color: #A52A2A; font-weight:bold; }
+.cm-s-ttcn .cm-visibilityModifiers { font-weight:bold; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/twilight.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/twilight.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/twilight.css	(revision 2)
@@ -0,0 +1,32 @@
+.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/
+.cm-s-twilight div.CodeMirror-selected { background: #323232; } /**/
+.cm-s-twilight .CodeMirror-line::selection, .cm-s-twilight .CodeMirror-line > span::selection, .cm-s-twilight .CodeMirror-line > span > span::selection { background: rgba(50, 50, 50, 0.99); }
+.cm-s-twilight .CodeMirror-line::-moz-selection, .cm-s-twilight .CodeMirror-line > span::-moz-selection, .cm-s-twilight .CodeMirror-line > span > span::-moz-selection { background: rgba(50, 50, 50, 0.99); }
+
+.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; }
+.cm-s-twilight .CodeMirror-guttermarker { color: white; }
+.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; }
+.cm-s-twilight .CodeMirror-linenumber { color: #aaa; }
+.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/
+.cm-s-twilight .cm-atom { color: #FC0; }
+.cm-s-twilight .cm-number { color:  #ca7841; } /**/
+.cm-s-twilight .cm-def { color: #8DA6CE; }
+.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/
+.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/
+.cm-s-twilight .cm-operator { color: #cda869; } /**/
+.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/
+.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/
+.cm-s-twilight .cm-string-2 { color:#bd6b18; } /*?*/
+.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/
+.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/
+.cm-s-twilight .cm-tag { color: #997643; } /**/
+.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/
+.cm-s-twilight .cm-header { color: #FF6400; }
+.cm-s-twilight .cm-hr { color: #AEAEAE; }
+.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/
+.cm-s-twilight .cm-error { border-bottom: 1px solid red; }
+
+.cm-s-twilight .CodeMirror-activeline-background { background: #27282E; }
+.cm-s-twilight .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/vibrant-ink.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/vibrant-ink.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/vibrant-ink.css	(revision 2)
@@ -0,0 +1,34 @@
+/* Taken from the popular Visual Studio Vibrant Ink Schema */
+
+.cm-s-vibrant-ink.CodeMirror { background: black; color: white; }
+.cm-s-vibrant-ink div.CodeMirror-selected { background: #35493c; }
+.cm-s-vibrant-ink .CodeMirror-line::selection, .cm-s-vibrant-ink .CodeMirror-line > span::selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::selection { background: rgba(53, 73, 60, 0.99); }
+.cm-s-vibrant-ink .CodeMirror-line::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span::-moz-selection, .cm-s-vibrant-ink .CodeMirror-line > span > span::-moz-selection { background: rgba(53, 73, 60, 0.99); }
+
+.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; }
+.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-vibrant-ink .cm-keyword { color: #CC7832; }
+.cm-s-vibrant-ink .cm-atom { color: #FC0; }
+.cm-s-vibrant-ink .cm-number { color:  #FFEE98; }
+.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }
+.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; }
+.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D; }
+.cm-s-vibrant-ink .cm-operator { color: #888; }
+.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }
+.cm-s-vibrant-ink .cm-string { color:  #A5C25C; }
+.cm-s-vibrant-ink .cm-string-2 { color: red; }
+.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }
+.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-header { color: #FF6400; }
+.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }
+.cm-s-vibrant-ink .cm-link { color: blue; }
+.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }
+
+.cm-s-vibrant-ink .CodeMirror-activeline-background { background: #27282E; }
+.cm-s-vibrant-ink .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-dark.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-dark.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-dark.css	(revision 2)
@@ -0,0 +1,53 @@
+/*
+Copyright (C) 2011 by MarkLogic Corporation
+Author: Mike Brevoort <mike@brevoort.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; }
+.cm-s-xq-dark div.CodeMirror-selected { background: #27007A; }
+.cm-s-xq-dark .CodeMirror-line::selection, .cm-s-xq-dark .CodeMirror-line > span::selection, .cm-s-xq-dark .CodeMirror-line > span > span::selection { background: rgba(39, 0, 122, 0.99); }
+.cm-s-xq-dark .CodeMirror-line::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span::-moz-selection, .cm-s-xq-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(39, 0, 122, 0.99); }
+.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; }
+.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-xq-dark span.cm-keyword { color: #FFBD40; }
+.cm-s-xq-dark span.cm-atom { color: #6C8CD5; }
+.cm-s-xq-dark span.cm-number { color: #164; }
+.cm-s-xq-dark span.cm-def { color: #FFF; text-decoration:underline; }
+.cm-s-xq-dark span.cm-variable { color: #FFF; }
+.cm-s-xq-dark span.cm-variable-2 { color: #EEE; }
+.cm-s-xq-dark span.cm-variable-3 { color: #DDD; }
+.cm-s-xq-dark span.cm-property {}
+.cm-s-xq-dark span.cm-operator {}
+.cm-s-xq-dark span.cm-comment { color: gray; }
+.cm-s-xq-dark span.cm-string { color: #9FEE00; }
+.cm-s-xq-dark span.cm-meta { color: yellow; }
+.cm-s-xq-dark span.cm-qualifier { color: #FFF700; }
+.cm-s-xq-dark span.cm-builtin { color: #30a; }
+.cm-s-xq-dark span.cm-bracket { color: #cc7; }
+.cm-s-xq-dark span.cm-tag { color: #FFBD40; }
+.cm-s-xq-dark span.cm-attribute { color: #FFF700; }
+.cm-s-xq-dark span.cm-error { color: #f00; }
+
+.cm-s-xq-dark .CodeMirror-activeline-background { background: #27282E; }
+.cm-s-xq-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-light.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-light.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/xq-light.css	(revision 2)
@@ -0,0 +1,43 @@
+/*
+Copyright (C) 2011 by MarkLogic Corporation
+Author: Mike Brevoort <mike@brevoort.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+.cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; }
+.cm-s-xq-light span.cm-atom { color: #6C8CD5; }
+.cm-s-xq-light span.cm-number { color: #164; }
+.cm-s-xq-light span.cm-def { text-decoration:underline; }
+.cm-s-xq-light span.cm-variable { color: black; }
+.cm-s-xq-light span.cm-variable-2 { color:black; }
+.cm-s-xq-light span.cm-variable-3 { color: black; }
+.cm-s-xq-light span.cm-property {}
+.cm-s-xq-light span.cm-operator {}
+.cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; }
+.cm-s-xq-light span.cm-string { color: red; }
+.cm-s-xq-light span.cm-meta { color: yellow; }
+.cm-s-xq-light span.cm-qualifier { color: grey; }
+.cm-s-xq-light span.cm-builtin { color: #7EA656; }
+.cm-s-xq-light span.cm-bracket { color: #cc7; }
+.cm-s-xq-light span.cm-tag { color: #3F7F7F; }
+.cm-s-xq-light span.cm-attribute { color: #7F007F; }
+.cm-s-xq-light span.cm-error { color: #f00; }
+
+.cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; }
+.cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/yeti.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/yeti.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/yeti.css	(revision 2)
@@ -0,0 +1,44 @@
+/*
+
+    Name:       yeti
+    Author:     Michael Kaminsky (http://github.com/mkaminsky11)
+
+    Original yeti color scheme by Jesse Weed (https://github.com/jesseweed/yeti-syntax)
+
+*/
+
+
+.cm-s-yeti.CodeMirror {
+  background-color: #ECEAE8 !important;
+  color: #d1c9c0 !important;
+  border: none;
+}
+
+.cm-s-yeti .CodeMirror-gutters {
+  color: #adaba6;
+  background-color: #E5E1DB;
+  border: none;
+}
+.cm-s-yeti .CodeMirror-cursor { border-left: solid thin #d1c9c0; }
+.cm-s-yeti .CodeMirror-linenumber { color: #adaba6; }
+.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected { background: #DCD8D2; }
+.cm-s-yeti .CodeMirror-line::selection, .cm-s-yeti .CodeMirror-line > span::selection, .cm-s-yeti .CodeMirror-line > span > span::selection { background: #DCD8D2; }
+.cm-s-yeti .CodeMirror-line::-moz-selection, .cm-s-yeti .CodeMirror-line > span::-moz-selection, .cm-s-yeti .CodeMirror-line > span > span::-moz-selection { background: #DCD8D2; }
+.cm-s-yeti span.cm-comment { color: #d4c8be; }
+.cm-s-yeti span.cm-string, .cm-s-yeti span.cm-string-2 { color: #96c0d8; }
+.cm-s-yeti span.cm-number { color: #a074c4; }
+.cm-s-yeti span.cm-variable { color: #55b5db; }
+.cm-s-yeti span.cm-variable-2 { color: #a074c4; }
+.cm-s-yeti span.cm-def { color: #55b5db; }
+.cm-s-yeti span.cm-operator { color: #9fb96e; }
+.cm-s-yeti span.cm-keyword { color: #9fb96e; }
+.cm-s-yeti span.cm-atom { color: #a074c4; }
+.cm-s-yeti span.cm-meta { color: #96c0d8; }
+.cm-s-yeti span.cm-tag { color: #96c0d8; }
+.cm-s-yeti span.cm-attribute { color: #9fb96e; }
+.cm-s-yeti span.cm-qualifier { color: #96c0d8; }
+.cm-s-yeti span.cm-property { color: #a074c4; }
+.cm-s-yeti span.cm-builtin { color: #a074c4; }
+.cm-s-yeti span.cm-variable-3 { color: #96c0d8; }
+.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; }
+.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; }
Index: trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/zenburn.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/zenburn.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/codemirror/theme/zenburn.css	(revision 2)
@@ -0,0 +1,37 @@
+/**
+ * "
+ *  Using Zenburn color palette from the Emacs Zenburn Theme
+ *  https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el
+ *
+ *  Also using parts of https://github.com/xavi/coderay-lighttable-theme
+ * "
+ * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css
+ */
+
+.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; }
+.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; }
+.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white; }
+.cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; }
+.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; }
+.cm-s-zenburn span.cm-comment { color: #7f9f7f; }
+.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; }
+.cm-s-zenburn span.cm-atom { color: #bfebbf; }
+.cm-s-zenburn span.cm-def { color: #dcdccc; }
+.cm-s-zenburn span.cm-variable { color: #dfaf8f; }
+.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; }
+.cm-s-zenburn span.cm-string { color: #cc9393; }
+.cm-s-zenburn span.cm-string-2 { color: #cc9393; }
+.cm-s-zenburn span.cm-number { color: #dcdccc; }
+.cm-s-zenburn span.cm-tag { color: #93e0e3; }
+.cm-s-zenburn span.cm-property { color: #dfaf8f; }
+.cm-s-zenburn span.cm-attribute { color: #dfaf8f; }
+.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; }
+.cm-s-zenburn span.cm-meta { color: #f0dfaf; }
+.cm-s-zenburn span.cm-header { color: #f0efd0; }
+.cm-s-zenburn span.cm-operator { color: #f0efd0; }
+.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; }
+.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; }
+.cm-s-zenburn .CodeMirror-activeline { background: #000000; }
+.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; }
+.cm-s-zenburn div.CodeMirror-selected { background: #545454; }
+.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected { background: #4f4f4f; }
Index: trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.css	(revision 2)
@@ -0,0 +1,20 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+.cke_colordialog_colorcell {
+	width: 12px; /* All cells have equal width which depends on parent width (in this case table parent). Width works more like max-width. */
+	height: 14px;
+	padding: 1px; /* Padding is replaced by border for focused cells. Prevents 'jumping' when adding borders. */
+}
+
+.cke_colordialog_colorcell.cke_colordialog_focused_light,
+.cke_colordialog_colorcell.cke_colordialog_focused_dark {
+	padding: 0; /* Shrink cell to allow 1px border indicating focus. */
+	border: 1px dotted #000;
+}
+
+.cke_colordialog_colorcell.cke_colordialog_focused_dark {
+	border-color: #FFF;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/colordialog/dialogs/colordialog.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("colordialog",function(x){function m(){h.getById(n).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");y()}function z(a){a=a.data.getTarget();var c;"td"==a.getName()&&(c=a.getChild(0).getHtml())&&(y(),f=a,f.setAttribute("aria-selected",!0),f.addClass("cke_colordialog_selected"),p.getContentElement("picker","selectedColor").setValue(c))}function y(){f&&(f.removeClass("cke_colordialog_selected"),f.removeAttribute("aria-selected"),f=null)}function D(a){a=
+a.replace(/^#/,"");for(var c=0,b=[];2>=c;c++)b[c]=parseInt(a.substr(2*c,2),16);return 165<=.2126*b[0]+.7152*b[1]+.0722*b[2]}function A(a){!a.name&&(a=new CKEDITOR.event(a));var c=!/mouse/.test(a.name),b=a.data.getTarget(),g;"td"==b.getName()&&(g=b.getChild(0).getHtml())&&(q(a),c?d=b:B=b,c&&b.addClass(D(g)?"cke_colordialog_focused_light":"cke_colordialog_focused_dark"),r(g))}function q(a){if(a=!/mouse/.test(a.name)&&d)a.removeClass("cke_colordialog_focused_light"),a.removeClass("cke_colordialog_focused_dark");
+d||B||r(!1)}function r(a){a?(h.getById(t).setStyle("background-color",a),h.getById(u).setHtml(a)):(h.getById(t).removeStyle("background-color"),h.getById(u).setHtml("\x26nbsp;"))}function E(a){var c=a.data,b=c.getTarget(),g=c.getKeystroke(),e="rtl"==x.lang.dir;switch(g){case 38:if(a=b.getParent().getPrevious())a=a.getChild([b.getIndex()]),a.focus();c.preventDefault();break;case 40:(a=b.getParent().getNext())&&(a=a.getChild([b.getIndex()]))&&1==a.type&&a.focus();c.preventDefault();break;case 32:case 13:z(a);
+c.preventDefault();break;case e?37:39:(a=b.getNext())?1==a.type&&(a.focus(),c.preventDefault(!0)):(a=b.getParent().getNext())&&(a=a.getChild([0]))&&1==a.type&&(a.focus(),c.preventDefault(!0));break;case e?39:37:if(a=b.getPrevious())a.focus(),c.preventDefault(!0);else if(a=b.getParent().getPrevious())a=a.getLast(),a.focus(),c.preventDefault(!0)}}var v=CKEDITOR.dom.element,h=CKEDITOR.document,e=x.lang.colordialog,p,f,C={type:"html",html:"\x26nbsp;"},d,B,l=function(a){return CKEDITOR.tools.getNextId()+
+"_"+a},t=l("hicolor"),u=l("hicolortext"),n=l("selhicolor"),k;(function(){function a(a,d){for(var w=a;w<a+3;w++){var f=new v(k.$.insertRow(-1));f.setAttribute("role","row");for(var e=d;e<d+3;e++)for(var g=0;6>g;g++)c(f.$,"#"+b[e]+b[g]+b[w])}}function c(a,c){var b=new v(a.insertCell(-1));b.setAttribute("class","ColorCell cke_colordialog_colorcell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",E);b.on("click",z);b.on("focus",A);b.on("blur",q);b.setStyle("background-color",
+c);var d=l("color_table_cell");b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+d+'" class\x3d"cke_voice_label"\x3e'+c+"\x3c/span\x3e",CKEDITOR.document))}k=CKEDITOR.dom.element.createFromHtml('\x3ctable tabIndex\x3d"-1" class\x3d"cke_colordialog_table" aria-label\x3d"'+e.options+'" role\x3d"grid" style\x3d"border-collapse:separate;" cellspacing\x3d"0"\x3e\x3ccaption class\x3d"cke_voice_label"\x3e'+e.options+'\x3c/caption\x3e\x3ctbody role\x3d"presentation"\x3e\x3c/tbody\x3e\x3c/table\x3e');
+k.on("mouseover",A);k.on("mouseout",q);var b="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0,3);a(3,3);var g=new v(k.$.insertRow(-1));g.setAttribute("role","row");c(g.$,"#000000");for(var f=0;16>f;f++){var d=f.toString(16);c(g.$,"#"+d+d+d+d+d+d)}c(g.$,"#ffffff")})();CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(CKEDITOR.plugins.get("colordialog").path+"dialogs/colordialog.css"));return{title:e.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){m();d.removeClass("cke_colordialog_focused_light");
+d.removeClass("cke_colordialog_focused_dark");r(!1);d=null},contents:[{id:"picker",label:e.title,accessKey:"I",elements:[{type:"hbox",padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e",onLoad:function(){CKEDITOR.document.getById(this.domId).append(k)},focus:function(){(d||this.getElement().getElementsByTag("td").getItem(0)).focus()}},C,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"\x3cspan\x3e"+e.highlight+'\x3c/span\x3e\x3cdiv id\x3d"'+
+t+'" style\x3d"border: 1px solid; height: 74px; width: 74px;"\x3e\x3c/div\x3e\x3cdiv id\x3d"'+u+'"\x3e\x26nbsp;\x3c/div\x3e\x3cspan\x3e'+e.selected+'\x3c/span\x3e\x3cdiv id\x3d"'+n+'" style\x3d"border: 1px solid; height: 20px; width: 74px;"\x3e\x3c/div\x3e'},{type:"text",label:e.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{h.getById(n).setStyle("background-color",this.getValue())}catch(a){m()}}},C,{type:"button",id:"clear",label:e.clear,
+onClick:m}]}]}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/dialog/dialogDefinition.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/dialog/dialogDefinition.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/dialog/dialogDefinition.js	(revision 2)
@@ -0,0 +1,4 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
Index: trunk/modules/ckeditor/ckeditor/plugins/div/dialogs/div.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/div/dialogs/div.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/div/dialogs/div.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿(function(){function t(a,m,r){m.is&&m.getCustomData("block_processed")||(m.is&&CKEDITOR.dom.element.setMarker(r,m,"block_processed",!0),a.push(m))}function q(a,m){function r(){this.foreach(function(a){/^(?!vbox|hbox)/.test(a.type)&&(a.setup||(a.setup=function(c){a.setValue(c.getAttribute(a.id)||"",1)}),a.commit||(a.commit=function(c){var g=this.getValue();if("dir"!=a.id||c.getComputedStyle("direction")!=g)g?c.setAttribute(a.id,g):c.removeAttribute(a.id)}))})}var q=function(){var f=CKEDITOR.tools.extend({},
+CKEDITOR.dtd.$blockLimit);a.config.div_wrapTable&&(delete f.td,delete f.th);return f}(),u=CKEDITOR.dtd.div,n={},p=[];return{title:a.lang.div.title,minWidth:400,minHeight:165,contents:[{id:"info",label:a.lang.common.generalTab,title:a.lang.common.generalTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"elementStyle",type:"select",style:"width: 100%;",label:a.lang.div.styleSelectLabel,"default":"",items:[[a.lang.common.notSet,""]],onChange:function(){var f=["info:elementStyle","info:class",
+"advanced:dir","advanced:style"],c=this.getDialog(),g=c._element&&c._element.clone()||new CKEDITOR.dom.element("div",a.document);this.commit(g,!0);for(var f=[].concat(f),b=f.length,k,e=0;e<b;e++)(k=c.getContentElement.apply(c,f[e].split(":")))&&k.setup&&k.setup(g,!0)},setup:function(f){for(var c in n)n[c].checkElementRemovable(f,!0,a)&&this.setValue(c,1)},commit:function(f){var c;(c=this.getValue())?n[c].applyToObject(f,a):f.removeAttribute("style")}},{id:"class",type:"text",requiredContent:"div(cke-xyz)",
+label:a.lang.common.cssClass,"default":""}]}]},{id:"advanced",label:a.lang.common.advancedTab,title:a.lang.common.advancedTab,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"id",requiredContent:"div[id]",label:a.lang.common.id,"default":""},{type:"text",id:"lang",requiredContent:"div[lang]",label:a.lang.common.langCode,"default":""}]},{type:"hbox",children:[{type:"text",id:"style",requiredContent:"div{cke-xyz}",style:"width: 100%;",label:a.lang.common.cssStyle,
+"default":"",commit:function(a){a.setAttribute("style",this.getValue())}}]},{type:"hbox",children:[{type:"text",id:"title",requiredContent:"div[title]",style:"width: 100%;",label:a.lang.common.advisoryTitle,"default":""}]},{type:"select",id:"dir",requiredContent:"div[dir]",style:"width: 100%;",label:a.lang.common.langDir,"default":"",items:[[a.lang.common.notSet,""],[a.lang.common.langDirLtr,"ltr"],[a.lang.common.langDirRtl,"rtl"]]}]}]}],onLoad:function(){r.call(this);var f=this,c=this.getContentElement("info",
+"elementStyle");a.getStylesSet(function(g){var b,k;if(g)for(var e=0;e<g.length;e++)k=g[e],k.element&&"div"==k.element&&(b=k.name,n[b]=k=new CKEDITOR.style(k),a.filter.check(k)&&(c.items.push([b,b]),c.add(b,b)));c[1<c.items.length?"enable":"disable"]();setTimeout(function(){f._element&&c.setup(f._element)},0)})},onShow:function(){"editdiv"==m&&this.setupContent(this._element=CKEDITOR.plugins.div.getSurroundDiv(a))},onOk:function(){if("editdiv"==m)p=[this._element];else{var f=[],c={},g=[],b,k=a.getSelection(),
+e=k.getRanges(),n=k.createBookmarks(),h,l;for(h=0;h<e.length;h++)for(l=e[h].createIterator();b=l.getNextParagraph();)if(b.getName()in q&&!b.isReadOnly()){var d=b.getChildren();for(b=0;b<d.count();b++)t(g,d.getItem(b),c)}else{for(;!u[b.getName()]&&!b.equals(e[h].root);)b=b.getParent();t(g,b,c)}CKEDITOR.dom.element.clearAllMarkers(c);e=[];h=null;for(l=0;l<g.length;l++)b=g[l],d=a.elementPath(b).blockLimit,d.isReadOnly()&&(d=d.getParent()),a.config.div_wrapTable&&d.is(["td","th"])&&(d=a.elementPath(d.getParent()).blockLimit),
+d.equals(h)||(h=d,e.push([])),e[e.length-1].push(b);for(h=0;h<e.length;h++){d=e[h][0];g=d.getParent();for(b=1;b<e[h].length;b++)g=g.getCommonAncestor(e[h][b]);l=new CKEDITOR.dom.element("div",a.document);for(b=0;b<e[h].length;b++){for(d=e[h][b];!d.getParent().equals(g);)d=d.getParent();e[h][b]=d}for(b=0;b<e[h].length;b++)d=e[h][b],d.getCustomData&&d.getCustomData("block_processed")||(d.is&&CKEDITOR.dom.element.setMarker(c,d,"block_processed",!0),b||l.insertBefore(d),l.append(d));CKEDITOR.dom.element.clearAllMarkers(c);
+f.push(l)}k.selectBookmarks(n);p=f}f=p.length;for(c=0;c<f;c++)this.commitContent(p[c]),!p[c].getAttribute("style")&&p[c].removeAttribute("style");this.hide()},onHide:function(){"editdiv"==m&&this._element.removeCustomData("elementStyle");delete this._element}}}CKEDITOR.dialog.add("creatediv",function(a){return q(a,"creatediv")});CKEDITOR.dialog.add("editdiv",function(a){return q(a,"editdiv")})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/filebrowser/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/filebrowser/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/filebrowser/plugin.js	(revision 2)
@@ -0,0 +1,573 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The "filebrowser" plugin that adds support for file uploads and
+ *               browsing.
+ *
+ * When a file is uploaded or selected inside the file browser, its URL is
+ * inserted automatically into a field defined in the <code>filebrowser</code>
+ * attribute. In order to specify a field that should be updated, pass the tab ID and
+ * the element ID, separated with a colon.<br /><br />
+ *
+ * <strong>Example 1: (Browse)</strong>
+ *
+ * <pre>
+ * {
+ *     type : 'button',
+ *     id : 'browse',
+ *     filebrowser : 'tabId:elementId',
+ *     label : editor.lang.common.browseServer
+ * }
+ * </pre>
+ *
+ * If you set the <code>filebrowser</code> attribute for an element other than
+ * the <code>fileButton</code>, the <code>Browse</code> action will be triggered.<br /><br />
+ *
+ * <strong>Example 2: (Quick Upload)</strong>
+ *
+ * <pre>
+ * {
+ *     type : 'fileButton',
+ *     id : 'uploadButton',
+ *     filebrowser : 'tabId:elementId',
+ *     label : editor.lang.common.uploadSubmit,
+ *     'for' : [ 'upload', 'upload' ]
+ * }
+ * </pre>
+ *
+ * If you set the <code>filebrowser</code> attribute for a <code>fileButton</code>
+ * element, the <code>QuickUpload</code> action will be executed.<br /><br />
+ *
+ * The filebrowser plugin also supports more advanced configuration performed through
+ * a JavaScript object.
+ *
+ * The following settings are supported:
+ *
+ * <ul>
+ * <li><code>action</code> &ndash; <code>Browse</code> or <code>QuickUpload</code>.</li>
+ * <li><code>target</code> &ndash; the field to update in the <code><em>tabId:elementId</em></code> format.</li>
+ * <li><code>params</code> &ndash; additional arguments to be passed to the server connector (optional).</li>
+ * <li><code>onSelect</code> &ndash; a function to execute when the file is selected/uploaded (optional).</li>
+ * <li><code>url</code> &ndash; the URL to be called (optional).</li>
+ * </ul>
+ *
+ * <strong>Example 3: (Quick Upload)</strong>
+ *
+ * <pre>
+ * {
+ *     type : 'fileButton',
+ *     label : editor.lang.common.uploadSubmit,
+ *     id : 'buttonId',
+ *     filebrowser :
+ *     {
+ *         action : 'QuickUpload', // required
+ *         target : 'tab1:elementId', // required
+ *         params : // optional
+ *         {
+ *             type : 'Files',
+ *             currentFolder : '/folder/'
+ *         },
+ *         onSelect : function( fileUrl, errorMessage ) // optional
+ *         {
+ *             // Do not call the built-in selectFuntion.
+ *             // return false;
+ *         }
+ *     },
+ *     'for' : [ 'tab1', 'myFile' ]
+ * }
+ * </pre>
+ *
+ * Suppose you have a file element with an ID of <code>myFile</code>, a text
+ * field with an ID of <code>elementId</code> and a <code>fileButton</code>.
+ * If the <code>filebowser.url</code> attribute is not specified explicitly,
+ * the form action will be set to <code>filebrowser[<em>DialogWindowName</em>]UploadUrl</code>
+ * or, if not specified, to <code>filebrowserUploadUrl</code>. Additional parameters
+ * from the <code>params</code> object will be added to the query string. It is
+ * possible to create your own <code>uploadHandler</code> and cancel the built-in
+ * <code>updateTargetElement</code> command.<br /><br />
+ *
+ * <strong>Example 4: (Browse)</strong>
+ *
+ * <pre>
+ * {
+ *     type : 'button',
+ *     id : 'buttonId',
+ *     label : editor.lang.common.browseServer,
+ *     filebrowser :
+ *     {
+ *         action : 'Browse',
+ *         url : '/ckfinder/ckfinder.html&amp;type=Images',
+ *         target : 'tab1:elementId'
+ *     }
+ * }
+ * </pre>
+ *
+ * In this example, when the button is pressed, the file browser will be opened in a
+ * popup window. If you do not specify the <code>filebrowser.url</code> attribute,
+ * <code>filebrowser[<em>DialogName</em>]BrowseUrl</code> or
+ * <code>filebrowserBrowseUrl</code> will be used. After selecting a file in the file
+ * browser, an element with an ID of <code>elementId</code> will be updated. Just
+ * like in the third example, a custom <code>onSelect</code> function may be defined.
+ */
+
+( function() {
+    // Default input element name for CSRF protection token.
+    var TOKEN_INPUT_NAME = 'ckCsrfToken';
+
+    // Adds (additional) arguments to given url.
+    //
+    // @param {String}
+    //            url The url.
+    // @param {Object}
+    //            params Additional parameters.
+    function addQueryString( url, params ) {
+        var queryString = [];
+
+        if ( !params )
+            return url;
+        else {
+            for ( var i in params )
+                queryString.push( i + '=' + encodeURIComponent( params[ i ] ) );
+        }
+
+        return url + ( ( url.indexOf( '?' ) != -1 ) ? '&' : '?' ) + queryString.join( '&' );
+    }
+
+    // Make a string's first character uppercase.
+    //
+    // @param {String}
+    //            str String.
+    function ucFirst( str ) {
+        str += '';
+        var f = str.charAt( 0 ).toUpperCase();
+        return f + str.substr( 1 );
+    }
+
+    // The onlick function assigned to the 'Browse Server' button. Opens the
+    // file browser and updates target field when file is selected.
+    //
+    // @param {CKEDITOR.event}
+    //            evt The event object.
+    function browseServer() {
+        var dialog = this.getDialog();
+        var editor = dialog.getParentEditor();
+
+        editor._.filebrowserSe = this;
+
+        var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ] || editor.config.filebrowserWindowWidth || '80%';
+        var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ] || editor.config.filebrowserWindowHeight || '70%';
+
+        var params = this.filebrowser.params || {};
+        params.CKEditor = editor.name;
+        params.CKEditorFuncNum = editor._.filebrowserFn;
+        if ( !params.langCode )
+            params.langCode = editor.langCode;
+
+        var url = addQueryString( this.filebrowser.url, params );
+        // TODO: V4: Remove backward compatibility (#8163).
+        editor.popup( url, width, height, editor.config.filebrowserWindowFeatures || editor.config.fileBrowserWindowFeatures );
+    }
+
+    // Appends token preventing CSRF attacks to the form of provided file input.
+    //
+    // @since 4.5.6
+    // @param {CKEDITOR.dom.element} fileInput
+    function appendToken( fileInput ) {
+        var tokenElement;
+        var form = new CKEDITOR.dom.element( fileInput.$.form );
+
+        if ( form ) {
+            // Check if token input element already exists.
+            tokenElement = form.$.elements[ TOKEN_INPUT_NAME ];
+
+            // Create new if needed.
+            if ( !tokenElement ) {
+                tokenElement = new CKEDITOR.dom.element( 'input' );
+                tokenElement.setAttributes( {
+                    name: TOKEN_INPUT_NAME,
+                    type: 'hidden'
+                } );
+
+                form.append( tokenElement );
+            } else {
+                tokenElement = new CKEDITOR.dom.element( tokenElement );
+            }
+
+            tokenElement.setAttribute( 'value', CKEDITOR.tools.getCsrfToken() );
+        }
+    }
+
+    // The onlick function assigned to the 'Upload' button. Makes the final
+    // decision whether form is really submitted and updates target field when
+    // file is uploaded.
+    //
+    // @param {CKEDITOR.event}
+    //            evt The event object.
+    function uploadFile() {
+        var dialog = this.getDialog();
+        var editor = dialog.getParentEditor();
+
+        editor._.filebrowserSe = this;
+
+        // If user didn't select the file, stop the upload.
+        if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value )
+            return false;
+
+        if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() )
+            return false;
+
+        return true;
+    }
+
+    // Setups the file element.
+    //
+    // @param {CKEDITOR.ui.dialog.file}
+    //            fileInput The file element used during file upload.
+    // @param {Object}
+    //            filebrowser Object containing filebrowser settings assigned to
+    //            the fileButton associated with this file element.
+    function setupFileElement( editor, fileInput, filebrowser ) {
+        var params = filebrowser.params || {};
+        params.CKEditor = editor.name;
+        params.CKEditorFuncNum = editor._.filebrowserFn;
+        if ( !params.langCode )
+            params.langCode = editor.langCode;
+
+        fileInput.action = addQueryString( filebrowser.url, params );
+        fileInput.filebrowser = filebrowser;
+    }
+
+    // Traverse through the content definition and attach filebrowser to
+    // elements with 'filebrowser' attribute.
+    //
+    // @param String
+    //            dialogName Dialog name.
+    // @param {CKEDITOR.dialog.definitionObject}
+    //            definition Dialog definition.
+    // @param {Array}
+    //            elements Array of {@link CKEDITOR.dialog.definition.content}
+    //            objects.
+    function attachFileBrowser( editor, dialogName, definition, elements ) {
+        if ( !elements || !elements.length )
+            return;
+
+        var element;
+
+        for ( var i = elements.length; i--; ) {
+            element = elements[ i ];
+
+            if ( element.type == 'hbox' || element.type == 'vbox' || element.type == 'fieldset' )
+                attachFileBrowser( editor, dialogName, definition, element.children );
+
+            if ( !element.filebrowser )
+                continue;
+
+            if ( typeof element.filebrowser == 'string' ) {
+                var fb = {
+                    action: ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse',
+                    target: element.filebrowser
+                };
+                element.filebrowser = fb;
+            }
+
+            if ( element.filebrowser.action == 'Browse' ) {
+                var url = element.filebrowser.url;
+                if ( url === undefined ) {
+                    url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ];
+                    if ( url === undefined )
+                        url = editor.config.filebrowserBrowseUrl;
+                }
+
+                if ( url ) {
+                    element.onClick = browseServer;
+                    element.filebrowser.url = url;
+                    element.hidden = false;
+                }
+            } else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] ) {
+                url = element.filebrowser.url;
+                if ( url === undefined ) {
+                    url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ];
+                    if ( url === undefined )
+                        url = editor.config.filebrowserUploadUrl;
+                }
+
+                if ( url ) {
+                    var onClick = element.onClick;
+                    element.onClick = function( evt ) {
+                        // "element" here means the definition object, so we need to find the correct
+                        // button to scope the event call
+                        var sender = evt.sender;
+                        if ( onClick && onClick.call( sender, evt ) === false )
+                            return false;
+
+                        if ( uploadFile.call( sender, evt ) ) {
+                            var fileInput = sender.getDialog().getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement();
+
+                            // Append token preventing CSRF attacks.
+                            appendToken( fileInput );
+                            return true;
+                        }
+
+
+                        return false;
+                    };
+
+                    element.filebrowser.url = url;
+                    element.hidden = false;
+                    setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser );
+                }
+            }
+        }
+    }
+
+    // Updates the target element with the url of uploaded/selected file.
+    //
+    // @param {String}
+    //            url The url of a file.
+    function updateTargetElement( url, sourceElement ) {
+        var dialog = sourceElement.getDialog();
+        var targetElement = sourceElement.filebrowser.target || null;
+
+        // If there is a reference to targetElement, update it.
+        if ( targetElement ) {
+            var target = targetElement.split( ':' );
+            var element = dialog.getContentElement( target[ 0 ], target[ 1 ] );
+            if ( element ) {
+                element.setValue( url );
+                dialog.selectPage( target[ 0 ] );
+            }
+        }
+    }
+
+    // Returns true if filebrowser is configured in one of the elements.
+    //
+    // @param {CKEDITOR.dialog.definitionObject}
+    //            definition Dialog definition.
+    // @param String
+    //            tabId The tab id where element(s) can be found.
+    // @param String
+    //            elementId The element id (or ids, separated with a semicolon) to check.
+    function isConfigured( definition, tabId, elementId ) {
+        if ( elementId.indexOf( ';' ) !== -1 ) {
+            var ids = elementId.split( ';' );
+            for ( var i = 0; i < ids.length; i++ ) {
+                if ( isConfigured( definition, tabId, ids[ i ] ) )
+                    return true;
+            }
+            return false;
+        }
+
+        var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser;
+        return ( elementFileBrowser && elementFileBrowser.url );
+    }
+
+    function setUrl( fileUrl, data ) {
+        var dialog = this._.filebrowserSe.getDialog(),
+            targetInput = this._.filebrowserSe[ 'for' ],
+            onSelect = this._.filebrowserSe.filebrowser.onSelect;
+
+        if ( targetInput )
+            dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset();
+
+        if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false )
+            return;
+
+        if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false )
+            return;
+
+        // The "data" argument may be used to pass the error message to the editor.
+        if ( typeof data == 'string' && data )
+            alert( data ); // jshint ignore:line
+
+        if ( fileUrl )
+            updateTargetElement( fileUrl, this._.filebrowserSe );
+    }
+
+    CKEDITOR.plugins.add( 'filebrowser', {
+        requires: 'popup',
+        init: function( editor ) {
+            editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor );
+            editor.on( 'destroy', function() {
+                CKEDITOR.tools.removeFunction( this._.filebrowserFn );
+            } );
+        }
+    } );
+
+    CKEDITOR.on( 'dialogDefinition', function( evt ) {
+        // We require filebrowser plugin to be loaded.
+        if ( !evt.editor.plugins.filebrowser )
+            return;
+
+        var definition = evt.data.definition,
+            element;
+        // Associate filebrowser to elements with 'filebrowser' attribute.
+        for ( var i = 0; i < definition.contents.length; ++i ) {
+            if ( ( element = definition.contents[ i ] ) ) {
+                attachFileBrowser( evt.editor, evt.data.name, definition, element.elements );
+                if ( element.hidden && element.filebrowser )
+                    element.hidden = !isConfigured( definition, element.id, element.filebrowser );
+
+            }
+        }
+    } );
+
+} )();
+
+/**
+ * The location of an external file manager that should be launched when the **Browse Server**
+ * button is pressed. If configured, the **Browse Server** button will appear in the
+ * **Link**, **Image**, and **Flash** dialog windows.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_browse_upload)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserBrowseUrl = '/browser/browse.php';
+ *
+ * @since 3.0
+ * @cfg {String} [filebrowserBrowseUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of the script that handles file uploads.
+ * If set, the **Upload** tab will appear in the **Link**, **Image**,
+ * and **Flash** dialog windows.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_browse_upload)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserUploadUrl = '/uploader/upload.php';
+ *
+ * **Note:** This is a configuration setting for a [file browser/uploader](#!/guide/dev_file_browse_upload).
+ * To configure [uploading dropped or pasted files](#!/guide/dev_file_upload) use the {@link CKEDITOR.config#uploadUrl}
+ * configuration option.
+ *
+ * @since 3.0
+ * @cfg {String} [filebrowserUploadUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of an external file manager that should be launched when the **Browse Server**
+ * button is pressed in the **Image** dialog window.
+ *
+ * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images';
+ *
+ * @since 3.0
+ * @cfg {String} [filebrowserImageBrowseUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of an external file browser that should be launched when the **Browse Server**
+ * button is pressed in the **Flash** dialog window.
+ *
+ * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserFlashBrowseUrl = '/browser/browse.php?type=Flash';
+ *
+ * @since 3.0
+ * @cfg {String} [filebrowserFlashBrowseUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of the script that handles file uploads in the **Image** dialog window.
+ *
+ * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserImageUploadUrl = '/uploader/upload.php?type=Images';
+ *
+ * **Note:** This is a configuration setting for a [file browser/uploader](#!/guide/dev_file_browse_upload).
+ * To configure [uploading dropped or pasted files](#!/guide/dev_file_upload) use the {@link CKEDITOR.config#uploadUrl}
+ * or {@link CKEDITOR.config#imageUploadUrl} configuration option.
+ *
+ * @since 3.0
+ * @cfg {String} [filebrowserImageUploadUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of the script that handles file uploads in the **Flash** dialog window.
+ *
+ * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserFlashUploadUrl = '/uploader/upload.php?type=Flash';
+ *
+ * @since 3.0
+ * @cfg {String} filebrowserFlashUploadUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The location of an external file manager that should be launched when the **Browse Server**
+ * button is pressed in the **Link** tab of the **Image** dialog window.
+ *
+ * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserImageBrowseLinkUrl = '/browser/browse.php';
+ *
+ * @since 3.2
+ * @cfg {String} [filebrowserImageBrowseLinkUrl='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The features to use in the file manager popup window.
+ *
+ *        config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no';
+ *
+ * @since 3.4.1
+ * @cfg {String} [filebrowserWindowFeatures='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes']
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The width of the file manager popup window. It can be a number denoting a value in
+ * pixels or a percent string.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-file-manager-window-size)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserWindowWidth = 750;
+ *
+ *        config.filebrowserWindowWidth = '50%';
+ *
+ * @cfg {Number/String} [filebrowserWindowWidth='80%']
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The height of the file manager popup window. It can be a number denoting a value in
+ * pixels or a percent string.
+ *
+ * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-file-manager-window-size)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html).
+ *
+ *        config.filebrowserWindowHeight = 580;
+ *
+ *        config.filebrowserWindowHeight = '50%';
+ *
+ * @cfg {Number/String} [filebrowserWindowHeight='70%']
+ * @member CKEDITOR.config
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/find/dialogs/find.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/find/dialogs/find.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/find/dialogs/find.js	(revision 2)
@@ -0,0 +1,25 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function C(c){return c.type==CKEDITOR.NODE_TEXT&&0<c.getLength()&&(!r||!c.isReadOnly())}function w(c){return!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)))}function q(c,g){function n(a,b){var d=this,c=new CKEDITOR.dom.walker(a);c.guard=b?w:function(a){!w(a)&&(d._.matchBoundary=!0)};c.evaluator=C;c.breakOnFalse=1;a.startContainer.type==CKEDITOR.NODE_TEXT&&(this.textNode=a.startContainer,this.offset=a.startOffset-
+1);this._={matchWord:b,walker:c,matchBoundary:!1}}function q(a,b){var d=c.createRange();d.setStart(a.textNode,b?a.offset:a.offset+1);d.setEndAt(c.editable(),CKEDITOR.POSITION_BEFORE_END);return d}function t(a){var b=c.getSelection().getRanges()[0],d=c.editable();b&&!a?(a=b.clone(),a.collapse(!0)):(a=c.createRange(),a.setStartAt(d,CKEDITOR.POSITION_AFTER_START));a.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);return a}var x=new CKEDITOR.style(CKEDITOR.tools.extend({attributes:{"data-cke-highlight":1},fullMatch:1,
+ignoreReadonly:1,childRule:function(){return 0}},c.config.find_highlight,!0));n.prototype={next:function(){return this.move()},back:function(){return this.move(!0)},move:function(a){var b=this.textNode;if(null===b)return y.call(this);this._.matchBoundary=!1;if(b&&a&&0<this.offset)this.offset--;else if(b&&this.offset<b.getLength()-1)this.offset++;else{for(b=null;!b&&!(b=this._.walker[a?"previous":"next"].call(this._.walker),this._.matchWord&&!b||this._.walker._.end););this.offset=(this.textNode=b)?
+a?b.getLength()-1:0:0}return y.call(this)}};var u=function(a,b){this._={walker:a,cursors:[],rangeLength:b,highlightRange:null,isMatched:0}};u.prototype={toDomRange:function(){var a=c.createRange(),b=this._.cursors;if(1>b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new n(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a);
+while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1>this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();x.applyToRange(a,c);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}},
+removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();x.removeFromRange(this._.highlightRange,c);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange);this._.highlightRange=null}},isReadOnly:function(){return this._.highlightRange?this._.highlightRange.startContainer.isReadOnly():0},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&&
+b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors;return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new n(q(b)):this._.walker;return new u(d,a)},getCursors:function(){return this._.cursors}};var z=function(a,b){var d=[-1];b&&(a=a.toLowerCase());
+for(var c=0;c<a.length;c++)for(d.push(d[c]+1);0<d[c+1]&&a.charAt(c)!=a.charAt(d[c+1]-1);)d[c+1]=d[d[c+1]-1]+1;this._={overlap:d,state:0,ignoreCase:!!b,pattern:a}};z.prototype={feedCharacter:function(a){for(this._.ignoreCase&&(a=a.toLowerCase());;){if(a==this._.pattern.charAt(this._.state))return this._.state++,this._.state==this._.pattern.length?(this._.state=0,2):1;if(this._.state)this._.state=this._.overlap[this._.state];else return 0}},reset:function(){this._.state=0}};var D=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,
+A=function(a){if(!a)return!0;var b=a.charCodeAt(0);return 9<=b&&13>=b||8192<=b&&8202>=b||D.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,E){this.matchRange?(this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new u(new n(this.searchRange),a.length);for(var k=new z(a,!b),l=0,m="%";null!==m;){for(this.matchRange.moveNext();m=this.matchRange.getEndCharacter();){l=k.feedCharacter(m);if(2==l)break;this.matchRange.moveNext().hitMatchBoundary&&
+k.reset()}if(2==l){if(d){var h=this.matchRange.getCursors(),p=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START);g.setEnd(h.textNode,h.offset);h=g;p=q(p);h.trim();p.trim();h=new n(h,!0);p=new n(p,!0);if(!A(h.back().character)||!A(p.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!E?(this.searchRange=t(1),this.matchRange=null,
+arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,k){r=1;a=0;a=this.hasMatchOptionsChanged(b,f,e);if(!this.matchRange||!this.matchRange.isMatched()||this.matchRange._.isReplaced||this.matchRange.isReadOnly()||a)a&&this.matchRange&&(this.matchRange.clearMatched(),this.matchRange.removeHighlight(),this.matchRange=null),a=this.find(b,f,e,g,!k);else{this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);
+if(!k){var l=c.getSelection();l.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);k||(l.selectRanges([b]),c.fire("saveSnapshot"));this.matchRange.updateFromDomRange(b);k||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}r=0;return a},matchOptions:null,hasMatchOptionsChanged:function(a,b,c){a=[a,b,c].join(".");b=this.matchOptions&&this.matchOptions!=a;this.matchOptions=a;return b}},f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,
+minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton(c,{label:c.lang.common.close})],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog();e.find(a.getValueOf("find","txtFindFind"),a.getValueOf("find","txtFindCaseChk"),
+a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",className:"cke_dialog_find_fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]},{id:"replace",
+label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a=this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),a.getValueOf("replace",
+"txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1,onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=t(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a,a.getValueOf("replace",
+"txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk",isChanged:!1,
+label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a,e);var g=a._.tabs[e],k;k="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,k);g.initialized||(CKEDITOR.document.getById(b._.inputId),
+g.initialized=!0);if(c){var l;e="find"===e?1:0;var g=1-e,m,h=v.length;for(m=0;m<h;m++)k=this.getContentElement(B[e],v[m][e]),l=this.getContentElement(B[g],v[m][g]),l.setValue(k.getValue())}}})},onShow:function(){e.searchRange=t();var a=this.getParentEditor().getSelection().getSelectedText(),b=this.getContentElement(g,"find"==g?"txtFindFind":"txtFindReplace");b.setValue(a);b.select();this.selectPage(g);this[("find"==g&&this._.editor.readOnly?"hide":"show")+"Page"]("replace")},onHide:function(){var a;
+e.matchRange&&e.matchRange.isMatched()&&(e.matchRange.removeHighlight(),(a=e.matchRange.toDomRange())&&c.getSelection().selectRanges([a]),c.focus());delete e.matchRange},onFocus:function(){return"replace"==g?this.getContentElement("replace","txtFindReplace"):this.getContentElement("find","txtFindFind")}}}var r,y=function(){return{textNode:this.textNode,offset:this.offset,character:this.textNode?this.textNode.getText().charAt(this.offset):null,hitMatchBoundary:this._.matchBoundary}},B=["find","replace"],
+v=[["txtFindFind","txtFindReplace"],["txtFindCaseChk","txtReplaceCaseChk"],["txtFindWordChk","txtReplaceWordChk"],["txtFindCyclic","txtReplaceCyclic"]];CKEDITOR.dialog.add("find",function(c){return q(c,"find")});CKEDITOR.dialog.add("replace",function(c){return q(c,"replace")})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/flash/dialogs/flash.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/flash/dialogs/flash.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/flash/dialogs/flash.js	(revision 2)
@@ -0,0 +1,24 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function b(a,b,c){var h=n[this.id];if(h)for(var f=this instanceof CKEDITOR.ui.dialog.checkbox,e=0;e<h.length;e++){var d=h[e];switch(d.type){case 1:if(!a)continue;if(null!==a.getAttribute(d.name)){a=a.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case 2:if(!a)continue;if(d.name in c){a=c[d.name];f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case 4:if(!b)continue;
+if(b.getAttribute(d.name)){a=b.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"])}}}function c(a,b,c){var h=n[this.id];if(h)for(var f=""===this.getValue(),e=this instanceof CKEDITOR.ui.dialog.checkbox,d=0;d<h.length;d++){var g=h[d];switch(g.type){case 1:if(!a||"data"==g.name&&b&&!a.hasAttribute("data"))continue;var m=this.getValue();f||e&&m===g["default"]?a.removeAttribute(g.name):a.setAttribute(g.name,m);break;case 2:if(!a)continue;
+m=this.getValue();if(f||e&&m===g["default"])g.name in c&&c[g.name].remove();else if(g.name in c)c[g.name].setAttribute("value",m);else{var p=CKEDITOR.dom.element.createFromHtml("\x3ccke:param\x3e\x3c/cke:param\x3e",a.getDocument());p.setAttributes({name:g.name,value:m});1>a.getChildCount()?p.appendTo(a):p.insertBefore(a.getFirst())}break;case 4:if(!b)continue;m=this.getValue();f||e&&m===g["default"]?b.removeAttribute(g.name):b.setAttribute(g.name,m)}}}for(var n={id:[{type:1,name:"id"}],classid:[{type:1,
+name:"classid"}],codebase:[{type:1,name:"codebase"}],pluginspage:[{type:4,name:"pluginspage"}],src:[{type:2,name:"movie"},{type:4,name:"src"},{type:1,name:"data"}],name:[{type:4,name:"name"}],align:[{type:1,name:"align"}],"class":[{type:1,name:"class"},{type:4,name:"class"}],width:[{type:1,name:"width"},{type:4,name:"width"}],height:[{type:1,name:"height"},{type:4,name:"height"}],hSpace:[{type:1,name:"hSpace"},{type:4,name:"hSpace"}],vSpace:[{type:1,name:"vSpace"},{type:4,name:"vSpace"}],style:[{type:1,
+name:"style"},{type:4,name:"style"}],type:[{type:4,name:"type"}]},k="play loop menu quality scale salign wmode bgcolor base flashvars allowScriptAccess allowFullScreen".split(" "),l=0;l<k.length;l++)n[k[l]]=[{type:4,name:k[l]},{type:2,name:k[l]}];k=["play","loop","menu"];for(l=0;l<k.length;l++)n[k[l]][0]["default"]=n[k[l]][1]["default"]=!0;CKEDITOR.dialog.add("flash",function(a){var l=!a.config.flashEmbedTagOnly,k=a.config.flashAddEmbedTag||a.config.flashEmbedTagOnly,h,f="\x3cdiv\x3e"+CKEDITOR.tools.htmlEncode(a.lang.common.preview)+
+'\x3cbr\x3e\x3cdiv id\x3d"cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style\x3d"display:none"\x3e\x3cdiv class\x3d"loading"\x3e\x26nbsp;\x3c/div\x3e\x3c/div\x3e\x3cdiv id\x3d"cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class\x3d"FlashPreviewBox"\x3e\x3c/div\x3e\x3c/div\x3e';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;h=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();
+if(e&&e.data("cke-real-element-type")&&"flash"==e.data("cke-real-element-type")){this.fakeImage=e;var d=a.restoreRealElement(e),g=null,b=null,c={};if("cke:object"==d.getName()){g=d;d=g.getElementsByTag("embed","cke");0<d.count()&&(b=d.getItem(0));for(var d=g.getElementsByTag("param","cke"),f=0,l=d.count();f<l;f++){var k=d.getItem(f),n=k.getAttribute("name"),k=k.getAttribute("value");c[n]=k}}else"cke:embed"==d.getName()&&(b=d);this.objectNode=g;this.embedNode=b;this.setupContent(g,b,c,e)}},onOk:function(){var e=
+null,d=null,b=null;this.fakeImage?(e=this.objectNode,d=this.embedNode):(l&&(e=CKEDITOR.dom.element.createFromHtml("\x3ccke:object\x3e\x3c/cke:object\x3e",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version\x3d6,0,40,0"})),k&&(d=CKEDITOR.dom.element.createFromHtml("\x3ccke:embed\x3e\x3c/cke:embed\x3e",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),
+e&&d.appendTo(e)));if(e)for(var b={},c=e.getElementsByTag("param","cke"),f=0,h=c.count();f<h;f++)b[c.getItem(f).getAttribute("name")]=c.getItem(f);c={};f={};this.commitContent(e,d,b,c,f);e=a.createFakeElement(e||d,"cke_flash","flash",!0);e.setAttributes(f);e.setStyles(c);this.fakeImage?(e.replace(this.fakeImage),a.getSelection().selectElement(e)):a.insertElement(e)},onHide:function(){this.preview&&this.preview.setHtml("")},contents:[{id:"info",label:a.lang.common.generalTab,accessKey:"I",elements:[{type:"vbox",
+padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",className:"cke_dialog_flash_url",children:[{id:"src",type:"text",label:a.lang.common.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(a.lang.flash.validateSrc),setup:b,commit:c,onLoad:function(){var a=this.getDialog(),b=function(b){h.setAttribute("src",b);a.preview.setHtml('\x3cembed height\x3d"100%" width\x3d"100%" src\x3d"'+CKEDITOR.tools.htmlEncode(h.getAttribute("src"))+'" type\x3d"application/x-shockwave-flash"\x3e\x3c/embed\x3e')};
+a.preview=a.getContentElement("info","preview").getElement().getChild(3);this.on("change",function(a){a.data&&a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:14px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",requiredContent:"embed[width]",style:"width:95px",label:a.lang.common.width,
+validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",requiredContent:"embed[height]",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",requiredContent:"embed[hspace]",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),
+setup:b,commit:c},{type:"text",id:"vSpace",requiredContent:"embed[vspace]",style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace),setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,
+filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties",label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",requiredContent:"embed[scale]",label:a.lang.flash.scale,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",requiredContent:"embed[allowscriptaccess]",
+label:a.lang.flash.access,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode",type:"select",requiredContent:"embed[wmode]",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,
+"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]],setup:b,commit:c},{id:"quality",type:"select",requiredContent:"embed[quality]",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"],[a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%",
+"50%"],children:[{id:"align",type:"select",requiredContent:"object[align]",label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle,"middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],
+setup:b,commit:function(a,b,f,k,l){var h=this.getValue();c.apply(this,arguments);h&&(l.align=h)}},{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e"}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay,"default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,
+commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0,setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",requiredContent:"object[id]",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",requiredContent:"embed[bgcolor]",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class",requiredContent:"embed(cke-xyz)",label:a.lang.common.cssClass,
+setup:b,commit:c}]},{type:"text",id:"style",requiredContent:"embed{cke-xyz}",validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/flash/images/placeholder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/flash/images/placeholder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/button.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/button.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/button.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button=
+a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name",
+type:"text",bidi:!0,label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst,
+"reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/checkbox.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/checkbox.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/checkbox.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info",
+label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value,
+"default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();!c||CKEDITOR.env.ie&&"on"==c?CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value"):b.setAttribute("value",c)}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",
+accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('\x3cinput type\x3d"checkbox"'+(e?' checked\x3d"checked"':"")+"/\x3e",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}},
+{id:"required",type:"checkbox",label:d.lang.forms.checkboxAndRadio.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){a=a.element;this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/form.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/form.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/form.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)||
+"")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",bidi:!0,type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):
+(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",
+type:"select",label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/hiddenfield.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/hiddenfield.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/hiddenfield.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type")&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"),
+b=this.getParentEditor(),a=CKEDITOR.env.ie&&8>CKEDITOR.document.$.documentMode?b.document.createElement('\x3cinput name\x3d"'+CKEDITOR.tools.htmlEncode(a)+'"\x3e'):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title,elements:[{id:"_cke_saved_name",
+type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/radio.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/radio.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/radio.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("radio",function(b){return{title:b.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"input"==a.getName()&&"radio"==a.getAttribute("type")&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,c=this.radioButton,b=!c;b&&(a=this.getParentEditor(),c=a.document.createElement("input"),c.setAttribute("type","radio"));b&&a.insertElement(c);this.commitContent({element:c})},
+contents:[{id:"info",label:b.lang.forms.checkboxAndRadio.radioTitle,title:b.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.checkboxAndRadio.value,"default":"",
+accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:b.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var c=a.element;if(CKEDITOR.env.ie){var d=c.getAttribute("checked"),e=!!this.getValue();d!=e&&(d=CKEDITOR.dom.element.createFromHtml('\x3cinput type\x3d"radio"'+
+(e?' checked\x3d"checked"':"")+"\x3e\x3c/input\x3e",b.document),c.copyAttributes(d,{type:1,checked:1}),d.replace(c),b.getSelection().selectElement(d),a.element=d)}else this.getValue()?c.setAttribute("checked","checked"):c.removeAttribute("checked")}},{id:"required",type:"checkbox",label:b.lang.forms.checkboxAndRadio.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){a=a.element;this.getValue()?a.setAttribute("required",
+"required"):a.removeAttribute("required")}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/select.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/select.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/select.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0<b.length?b:"",d.$.value=e):(null!==c&&c<a.getChildCount()?a.getChild(0>c?0:c).insertBeforeMe(d):a.append(d),d.setText(0<b.length?b:""),d.setValue(e));else return!1;return d}function p(a){a=f(a);for(var b=g(a),e=a.getChildren().count()-1;0<=
+e;e--)a.getChild(e).$.selected&&a.getChild(e).remove();k(a,b)}function q(a,b,e,d){a=f(a);if(0>b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function m(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function l(a,b,e){a=f(a);var d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),r=d.getValue();d.remove();d=h(a,c,r,e?e:null,b);k(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1}
+function k(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function n(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox=
+a;this.setupContent(a.getName(),a);for(var a=n(a),b=0;b<a.count();b++)this.setupContent("option",a.getItem(b))}},onOk:function(){var a=this.getParentEditor(),b=this.selectBox,e=!b;e&&(b=a.document.createElement("select"));this.commitContent(b);if(e&&(a.insertElement(b),CKEDITOR.env.ie)){var d=a.getSelection(),c=d.createBookmarks();setTimeout(function(){d.selectBookmarks(c)},0)}},contents:[{id:"info",label:c.lang.forms.select.selectInfo,title:c.lang.forms.select.selectInfo,accessKey:"",elements:[{id:"txtName",
+type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.common.name,"default":"",accessKey:"N",style:"width:350px",setup:function(a,b){"clear"==a?this.setValue(this["default"]||""):"select"==a&&this.setValue(b.data("cke-saved-name")||b.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.forms.select.value,
+style:"width:350px","default":"",className:"cke_disabled",onLoad:function(){this.getInputElement().setAttribute("readOnly",!0)},setup:function(a,b){"clear"==a?this.setValue(""):"option"==a&&b.getAttribute("selected")&&this.setValue(b.$.value)}},{type:"hbox",className:"cke_dialog_forms_select_order_txtsize",widths:["175px","170px"],children:[{id:"txtSize",type:"text",labelLayout:"horizontal",label:c.lang.forms.select.size,"default":"",accessKey:"S",style:"width:175px",validate:function(){var a=CKEDITOR.dialog.validate.integer(c.lang.common.validateNumberFailed);
+return""===this.getValue()||a.apply(this)},setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("size")||"");CKEDITOR.env.webkit&&this.getInputElement().setStyle("width","86px")},commit:function(a){this.getValue()?a.setAttribute("size",this.getValue()):a.removeAttribute("size")}},{type:"html",html:"\x3cspan\x3e"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+"\x3c/span\x3e"}]},{type:"html",html:"\x3cspan\x3e"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+"\x3c/span\x3e"},{type:"hbox",
+widths:["115px","115px","100px"],className:"cke_dialog_forms_select_order",children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),
+d=g(this);k(b,d);e.setValue(this.getValue());a.setValue(b.getValue())},setup:function(a,b){"clear"==a?m(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=n(this),d=n(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();m(a);for(var f=0;f<e.count();f++){var g=h(a,e.getItem(f).getValue(),d.getItem(f).getValue(),b.getParentEditor().document);d.getItem(f).getValue()==c&&(g.setAttribute("selected",
+"selected"),g.selected=!0)}}}]},{type:"vbox",children:[{id:"txtOptValue",type:"text",label:c.lang.forms.select.opValue,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbValue",label:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);k(b,d);e.setValue(b.getValue());a.setValue(this.getValue())},
+setup:function(a,b){if("clear"==a)m(this);else if("option"==a){var e=b.getValue();h(this,e,e,this.getDialog().getParentEditor().document);"selected"==b.getAttribute("selected")&&this.getDialog().getContentElement("info","txtValue").setValue(e)}}}]},{type:"vbox",padding:5,children:[{type:"button",id:"btnAdd",label:c.lang.forms.select.btnAdd,title:c.lang.forms.select.btnAdd,style:"width:100%;",onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info",
+"txtOptValue"),d=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");h(d,b.getValue(),b.getValue(),a.getParentEditor().document);h(c,e.getValue(),e.getValue(),a.getParentEditor().document);b.setValue("");e.setValue("")}},{type:"button",id:"btnModify",label:c.lang.forms.select.btnModify,title:c.lang.forms.select.btnModify,style:"width:100%;",onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=
+a.getContentElement("info","cmbName"),a=a.getContentElement("info","cmbValue"),c=g(d);0<=c&&(q(d,c,b.getValue(),b.getValue()),q(a,c,e.getValue(),e.getValue()))}},{type:"button",id:"btnUp",style:"width:100%;",label:c.lang.forms.select.btnUp,title:c.lang.forms.select.btnUp,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");l(b,-1,a.getParentEditor().document);l(c,-1,a.getParentEditor().document)}},{type:"button",id:"btnDown",style:"width:100%;",
+label:c.lang.forms.select.btnDown,title:c.lang.forms.select.btnDown,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");l(b,1,a.getParentEditor().document);l(c,1,a.getParentEditor().document)}}]}]},{type:"hbox",widths:["40%","20%","40%"],children:[{type:"button",id:"btnSetValue",label:c.lang.forms.select.btnSetValue,title:c.lang.forms.select.btnSetValue,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue");
+a.getContentElement("info","txtValue").setValue(b.getValue())}},{type:"button",id:"btnDelete",label:c.lang.forms.select.btnDelete,title:c.lang.forms.select.btnDelete,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue"),d=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue");p(b);p(c);d.setValue("");a.setValue("")}},{type:"vbox",children:[{id:"chkMulti",type:"checkbox",label:c.lang.forms.select.chkMulti,
+"default":"",accessKey:"M",value:"checked",setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("multiple"))},commit:function(a){this.getValue()?a.setAttribute("multiple",this.getValue()):a.removeAttribute("multiple")}},{id:"required",type:"checkbox",label:c.lang.forms.select.required,"default":"",accessKey:"Q",value:"checked",setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("required"))},commit:function(a){this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textarea.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textarea.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textarea.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("textarea",function(b){return{title:b.lang.forms.textarea.title,minWidth:350,minHeight:220,onShow:function(){delete this.textarea;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"textarea"==a.getName()&&(this.textarea=a,this.setupContent(a))},onOk:function(){var a,b=this.textarea,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("textarea"));this.commitContent(b);c&&a.insertElement(b)},contents:[{id:"info",label:b.lang.forms.textarea.title,title:b.lang.forms.textarea.title,
+elements:[{id:"_cke_saved_name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{type:"hbox",widths:["50%","50%"],children:[{id:"cols",type:"text",label:b.lang.forms.textarea.cols,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),
+setup:function(a){a=a.hasAttribute("cols")&&a.getAttribute("cols");this.setValue(a||"")},commit:function(a){this.getValue()?a.setAttribute("cols",this.getValue()):a.removeAttribute("cols")}},{id:"rows",type:"text",label:b.lang.forms.textarea.rows,"default":"",accessKey:"R",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),setup:function(a){a=a.hasAttribute("rows")&&a.getAttribute("rows");this.setValue(a||"")},commit:function(a){this.getValue()?a.setAttribute("rows",
+this.getValue()):a.removeAttribute("rows")}}]},{id:"value",type:"textarea",label:b.lang.forms.textfield.value,"default":"",setup:function(a){this.setValue(a.$.defaultValue)},commit:function(a){a.$.value=a.$.defaultValue=this.getValue()}},{id:"required",type:"checkbox",label:b.lang.forms.textfield.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},commit:function(a){this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textfield.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textfield.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/forms/dialogs/textfield.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("textfield",function(b){function e(a){a=a.element;var b=this.getValue();b?a.setAttribute(this.id,b):a.removeAttribute(this.id)}function f(a){a=a.hasAttribute(this.id)&&a.getAttribute(this.id);this.setValue(a||"")}var g={email:1,password:1,search:1,tel:1,text:1,url:1};return{title:b.lang.forms.textfield.title,minWidth:350,minHeight:150,onShow:function(){delete this.textField;var a=this.getParentEditor().getSelection().getSelectedElement();!a||"input"!=a.getName()||!g[a.getAttribute("type")]&&
+a.getAttribute("type")||(this.textField=a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.textField,c=!b;c&&(b=a.document.createElement("input"),b.setAttribute("type","text"));b={element:b};c&&a.insertElement(b.element);this.commitContent(b);c||a.getSelection().selectElement(b.element)},onLoad:function(){this.foreach(function(a){a.getValue&&(a.setup||(a.setup=f),a.commit||(a.commit=e))})},contents:[{id:"info",label:b.lang.forms.textfield.title,title:b.lang.forms.textfield.title,
+elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"_cke_saved_name",type:"text",label:b.lang.forms.textfield.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.textfield.value,"default":"",accessKey:"V",commit:function(a){if(CKEDITOR.env.ie&&
+!this.getValue()){var d=a.element,c=new CKEDITOR.dom.element("input",b.document);d.copyAttributes(c,{value:1});c.replace(d);a.element=c}else e.call(this,a)}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"size",type:"text",label:b.lang.forms.textfield.charWidth,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)},{id:"maxLength",type:"text",label:b.lang.forms.textfield.maxChars,"default":"",accessKey:"M",style:"width:50px",
+validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)}],onLoad:function(){CKEDITOR.env.ie7Compat&&this.getElement().setStyle("zoom","100%")}},{id:"type",type:"select",label:b.lang.forms.textfield.type,"default":"text",accessKey:"M",items:[[b.lang.forms.textfield.typeEmail,"email"],[b.lang.forms.textfield.typePass,"password"],[b.lang.forms.textfield.typeSearch,"search"],[b.lang.forms.textfield.typeTel,"tel"],[b.lang.forms.textfield.typeText,"text"],[b.lang.forms.textfield.typeUrl,
+"url"]],setup:function(a){this.setValue(a.getAttribute("type"))},commit:function(a){var d=a.element;if(CKEDITOR.env.ie){var c=d.getAttribute("type"),e=this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('\x3cinput type\x3d"'+e+'"\x3e\x3c/input\x3e',b.document),d.copyAttributes(c,{type:1}),c.replace(d),a.element=c)}else d.setAttribute("type",this.getValue())}},{id:"required",type:"checkbox",label:b.lang.forms.textfield.required,"default":"",accessKey:"Q",value:"required",setup:function(a){this.setValue(a.getAttribute("required"))},
+commit:function(a){a=a.element;this.getValue()?a.setAttribute("required","required"):a.removeAttribute("required")}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/forms/images/hiddenfield.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/forms/images/hiddenfield.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/icons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/icons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/icons_hidpi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/icons_hidpi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/iframe/dialogs/iframe.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/iframe/dialogs/iframe.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/iframe/dialogs/iframe.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}};
+CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type")&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d={};
+this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]",
+style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight,
+"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder",
+type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/iframe/images/placeholder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/iframe/images/placeholder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/image/dialogs/image.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image/dialogs/image.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image/dialogs/image.js	(revision 2)
@@ -0,0 +1,44 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){var v=function(d,l){function v(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function k(a){if(!w){w=1;var b=this.getDialog(),c=b.imageElement;if(c){this.commit(1,c);a=[].concat(a);for(var d=a.length,f,g=0;g<d;g++)(f=b.getContentElement.apply(b,a[g].split(":")))&&f.setup(1,c)}w=0}}var m=/^\s*(\d+)((px)|\%)?\s*$/i,z=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,r=/^\d+px$/,
+A=function(){var a=this.getValue(),b=this.getDialog(),c=a.match(m);c&&("%"==c[2]&&n(b,!1),a=c[1]);b.lockRatio&&(c=b.originalElement,"true"==c.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(a/c.$.height*c.$.width)),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(a/c.$.width*c.$.height)),isNaN(a)||b.setValueOf("info","txtHeight",a))));e(b)},e=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},w,n=function(a,
+b){if(!a.getContentElement("info","ratioLock"))return null;var c=a.originalElement;if(!c)return null;if("check"==b){if(!a.userlockRatio&&"true"==c.getCustomData("isReady")){var d=a.getValueOf("info","txtWidth"),f=a.getValueOf("info","txtHeight"),c=1E3*c.$.width/c.$.height,g=1E3*d/f;a.lockRatio=!1;d||f?isNaN(c)||isNaN(g)||Math.round(c)!=Math.round(g)||(a.lockRatio=!0):a.lockRatio=!0}}else void 0!==b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);d=CKEDITOR.document.getById(t);a.lockRatio?
+d.removeClass("cke_btn_unlocked"):d.addClass("cke_btn_unlocked");d.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&d.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢");return a.lockRatio},B=function(a,b){var c=a.originalElement;if("true"==c.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),f=a.getContentElement("info","txtHeight"),g;b?c=g=0:(g=c.$.width,c=c.$.height);d&&d.setValue(g);f&&f.setValue(c)}e(a)},C=function(a,b){function c(a,b){var c=
+a.match(m);return c?("%"==c[2]&&(c[1]+="%",n(d,!1)),c[1]):b}if(1==a){var d=this.getDialog(),f="",g="txtWidth"==this.id?"width":"height",e=b.getAttribute(g);e&&(f=c(e,f));f=c(b.getStyle(g),f);this.setValue(f)}},x,u=function(){var a=this.originalElement,b=CKEDITOR.document.getById(p);a.setCustomData("isReady","true");a.removeListener("load",u);a.removeListener("error",h);a.removeListener("abort",h);b&&b.setStyle("display","none");this.dontResetSize||B(this,!1===d.config.image_prefillDimensions);this.firstLoad&&
+CKEDITOR.tools.setTimeout(function(){n(this,"check")},0,this);this.dontResetSize=this.firstLoad=!1;e(this)},h=function(){var a=this.originalElement,b=CKEDITOR.document.getById(p);a.removeListener("load",u);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);b&&b.setStyle("display","none");n(this,!1)},q=function(a){return CKEDITOR.tools.getNextId()+"_"+a},t=q("btnLockSizes"),
+y=q("btnResetSize"),p=q("ImagePreviewLoader"),E=q("previewLink"),D=q("previewImage");return{title:d.lang.image["image"==l?"title":"titleButton"],minWidth:"moono-lisa"==(CKEDITOR.skinName||d.config.skin)?500:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),c=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",
+1),d=CKEDITOR.document.getById(p);d&&d.setStyle("display","none");x=new CKEDITOR.dom.element("img",a.document);this.preview=CKEDITOR.document.getById(D);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");c&&(this.linkElement=c,this.addLink=this.linkEditMode=!0,a=c.getChildren(),1==a.count()&&(d=a.getItem(0),d.type==CKEDITOR.NODE_ELEMENT&&(d.is("img")||d.is("input"))&&(this.imageElement=a.getItem(0),
+this.imageElement.is("img")?this.imageEditMode="img":this.imageElement.is("input")&&(this.imageEditMode="input"))),"image"==l&&this.setupContent(2,c));if(this.customImageElement)this.imageEditMode="img",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode&&(this.cleanImageElement=this.imageElement,
+this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(1,this.imageElement));n(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display","none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==l&&"input"==a&&confirm(d.lang.image.button2Img)?(this.imageElement=d.document.createElement("img"),this.imageElement.setAttribute("alt",""),d.insertElement(this.imageElement)):"image"!=l&&"img"==
+a&&confirm(d.lang.image.img2Button)?(this.imageElement=d.document.createElement("input"),this.imageElement.setAttributes({type:"image",alt:""}),d.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==l?this.imageElement=d.document.createElement("img"):(this.imageElement=d.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=d.document.createElement("a"));
+this.commitContent(1,this.imageElement);this.commitContent(2,this.linkElement);this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(d.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(d.getSelection().selectElement(this.linkElement),d.insertElement(this.imageElement)):this.addLink?this.linkEditMode?this.linkElement.equals(d.getSelection().getSelectedElement())?
+(this.linkElement.setHtml(""),this.linkElement.append(this.imageElement,!1)):d.insertElement(this.imageElement):(d.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):d.insertElement(this.imageElement)},onLoad:function(){"image"!=l&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(y),5),this.addFocusable(a.getById(t),5));this.commitContent=v},onHide:function(){this.preview&&this.commitContent(8,
+this.preview);this.originalElement&&(this.originalElement.removeListener("load",u),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement=!1);delete this.imageElement},contents:[{id:"info",label:d.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",className:"cke_dialog_image_url",children:[{id:"txtUrl",type:"text",label:d.lang.common.url,
+required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),c=a.originalElement;a.preview&&a.preview.removeStyle("display");c.setCustomData("isReady","false");var d=CKEDITOR.document.getById(p);d&&d.setStyle("display","");c.on("load",u,a);c.on("error",h,a);c.on("abort",h,a);c.setAttribute("src",b);a.preview&&(x.setAttribute("src",b),a.preview.setAttribute("src",x.$.src),e(a))}else a.preview&&(a.preview.removeAttribute("src"),a.preview.setStyle("display",
+"none"))},setup:function(a,b){if(1==a){var c=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(c);this.setInitValue()}},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()),b.setAttribute("src",this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(d.lang.image.urlMissing)},{type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",
+align:"center",label:d.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:d.lang.image.alt,accessKey:"T","default":"",onChange:function(){e(this.getDialog())},setup:function(a,b){1==a&&this.setValue(b.getAttribute("alt"))},commit:function(a,b){1==a?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",
+requiredContent:"img{width,height}",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"45px",id:"txtWidth",label:d.lang.common.width,onKeyUp:A,onChange:function(){k.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(z);(a=!(!a||0===parseInt(a[1],10)))||alert(d.lang.common.invalidWidth);return a},setup:C,commit:function(a,b){var c=this.getValue();1==a?(c&&d.activeFilter.check("img{width,height}")?b.setStyle("width",CKEDITOR.tools.cssLength(c)):
+b.removeStyle("width"),b.removeAttribute("width")):4==a?c.match(m)?b.setStyle("width",CKEDITOR.tools.cssLength(c)):(c=this.getDialog().originalElement,"true"==c.getCustomData("isReady")&&b.setStyle("width",c.$.width+"px")):8==a&&(b.removeAttribute("width"),b.removeStyle("width"))}},{type:"text",id:"txtHeight",width:"45px",label:d.lang.common.height,onKeyUp:A,onChange:function(){k.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(z);(a=!(!a||0===parseInt(a[1],10)))||
+alert(d.lang.common.invalidHeight);return a},setup:C,commit:function(a,b){var c=this.getValue();1==a?(c&&d.activeFilter.check("img{width,height}")?b.setStyle("height",CKEDITOR.tools.cssLength(c)):b.removeStyle("height"),b.removeAttribute("height")):4==a?c.match(m)?b.setStyle("height",CKEDITOR.tools.cssLength(c)):(c=this.getDialog().originalElement,"true"==c.getCustomData("isReady")&&b.setStyle("height",c.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",
+type:"html",className:"cke_dialog_image_ratiolock",style:"margin-top:30px;width:40px;height:40px;",onLoad:function(){var a=CKEDITOR.document.getById(y),b=CKEDITOR.document.getById(t);a&&(a.on("click",function(a){B(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover",function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")},a));b&&(b.on("click",function(a){n(this);var b=this.originalElement,d=this.getValueOf("info","txtWidth");"true"==
+b.getCustomData("isReady")&&d&&(b=b.$.height/b.$.width*d,isNaN(b)||(this.setValueOf("info","txtHeight",Math.round(b)),e(this)));a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")},b))},html:'\x3cdiv\x3e\x3ca href\x3d"javascript:void(0)" tabindex\x3d"-1" title\x3d"'+d.lang.image.lockRatio+'" class\x3d"cke_btn_locked" id\x3d"'+t+'" role\x3d"checkbox"\x3e\x3cspan class\x3d"cke_icon"\x3e\x3c/span\x3e\x3cspan class\x3d"cke_label"\x3e'+
+d.lang.image.lockRatio+'\x3c/span\x3e\x3c/a\x3e\x3ca href\x3d"javascript:void(0)" tabindex\x3d"-1" title\x3d"'+d.lang.image.resetSize+'" class\x3d"cke_btn_reset" id\x3d"'+y+'" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3e'+d.lang.image.resetSize+"\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}",width:"60px",label:d.lang.image.border,"default":"",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,
+"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateBorder),setup:function(a,b){if(1==a){var c;c=(c=(c=b.getStyle("border-width"))&&c.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(c[1],10);isNaN(parseInt(c,10))&&(c=b.getAttribute("border"));this.setValue(c)}},commit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style",
+"solid")),1==a&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:d.lang.image.hSpace,"default":"",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateHSpace),setup:function(a,b){if(1==a){var c,
+d;c=b.getStyle("margin-left");d=b.getStyle("margin-right");c=c&&c.match(r);d=d&&d.match(r);c=parseInt(c,10);d=parseInt(d,10);c=c==d&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("hspace"));this.setValue(c)}},commit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):(b.setStyle("margin-left",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(c))),1==a&&b.removeAttribute("hspace")):
+8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:d.lang.image.vSpace,"default":"",onKeyUp:function(){e(this.getDialog())},onChange:function(){k.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(d.lang.image.validateVSpace),setup:function(a,b){if(1==a){var c,d;c=b.getStyle("margin-top");d=b.getStyle("margin-bottom");c=c&&c.match(r);
+d=d&&d.match(r);c=parseInt(c,10);d=parseInt(d,10);c=c==d&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b){var c=parseInt(this.getValue(),10);1==a||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(c))),1==a&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},
+{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:d.lang.common.align,"default":"",items:[[d.lang.common.notSet,""],[d.lang.common.alignLeft,"left"],[d.lang.common.alignRight,"right"]],onChange:function(){e(this.getDialog());k.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(1==a){var c=b.getStyle("float");switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,
+b){var c=this.getValue();if(1==a||4==a){if(c?b.setStyle("float",c):b.removeStyle("float"),1==a)switch(c=(b.getAttribute("align")||"").toLowerCase(),c){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"\x3cdiv\x3e"+CKEDITOR.tools.htmlEncode(d.lang.common.preview)+'\x3cbr\x3e\x3cdiv id\x3d"'+p+'" class\x3d"ImagePreviewLoader" style\x3d"display:none"\x3e\x3cdiv class\x3d"loading"\x3e\x26nbsp;\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d"ImagePreviewBox"\x3e\x3ctable\x3e\x3ctr\x3e\x3ctd\x3e\x3ca href\x3d"javascript:void(0)" target\x3d"_blank" onclick\x3d"return false;" id\x3d"'+
+E+'"\x3e\x3cimg id\x3d"'+D+'" alt\x3d"" /\x3e\x3c/a\x3e'+(d.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+
+"\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/div\x3e"}]}]}]},{id:"Link",requiredContent:"a[href]",label:d.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:d.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var c=this.getValue();b.data("cke-saved-href",c);b.setAttribute("href",c);this.getValue()||
+!d.config.image_removeLinkByEmptyURL?this.getDialog().addLink=!0:this.getDialog().addLink=!1}}},{type:"button",id:"browse",className:"cke_dialog_image_browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:d.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:d.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:d.lang.common.target,"default":"",items:[[d.lang.common.notSet,""],[d.lang.common.targetNew,"_blank"],[d.lang.common.targetTop,
+"_top"],[d.lang.common.targetSelf,"_self"],[d.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")||"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:d.lang.image.upload,elements:[{type:"file",id:"upload",label:d.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:d.lang.image.btnUpload,
+"for":["Upload","upload"]}]},{id:"advanced",label:d.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"],children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:d.lang.common.id,setup:function(a,b){1==a&&this.setValue(b.getAttribute("id"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:d.lang.common.langDir,"default":"",items:[[d.lang.common.notSet,
+""],[d.lang.common.langDirLtr,"ltr"],[d.lang.common.langDirRtl,"rtl"]],setup:function(a,b){1==a&&this.setValue(b.getAttribute("dir"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:d.lang.common.langCode,"default":"",setup:function(a,b){1==a&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},
+{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:d.lang.common.longDescr,setup:function(a,b){1==a&&this.setValue(b.getAttribute("longDesc"))},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:d.lang.common.cssClass,"default":"",setup:function(a,b){1==a&&this.setValue(b.getAttribute("class"))},commit:function(a,
+b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:d.lang.common.advisoryTitle,"default":"",onChange:function(){e(this.getDialog())},setup:function(a,b){1==a&&this.setValue(b.getAttribute("title"))},commit:function(a,b){1==a?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",
+requiredContent:"img{cke-xyz}",label:d.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(d.lang.common.invalidInlineStyle),"default":"",setup:function(a,b){if(1==a){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var d=b.$.style.height,c=b.$.style.width,d=(d?d:"").match(m),c=(c?c:"").match(m);this.attributesInStyle={height:!!d,width:!!c}}},onChange:function(){k.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));
+e(this)},commit:function(a,b){1==a&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}};CKEDITOR.dialog.add("image",function(d){return v(d,"image")});CKEDITOR.dialog.add("imagebutton",function(d){return v(d,"imagebutton")})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/image/images/noimage.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/image/images/noimage.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/dialogs/image2.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/dialogs/image2.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/dialogs/image2.js	(revision 2)
@@ -0,0 +1,550 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview Image plugin based on Widgets API
+ */
+
+'use strict';
+
+CKEDITOR.dialog.add( 'image2', function( editor ) {
+
+   // RegExp: 123, 123px, empty string ""
+   var regexGetSizeOrEmpty = /(^\s*(\d+)(px)?\s*$)|^$/i,
+
+      lockButtonId = CKEDITOR.tools.getNextId(),
+      resetButtonId = CKEDITOR.tools.getNextId(),
+
+      lang = editor.lang.image2,
+      commonLang = editor.lang.common,
+
+      lockResetStyle = 'margin-top:18px;width:40px;height:20px;',
+      lockResetHtml = new CKEDITOR.template(
+         '<div>' +
+            '<a href="javascript:void(0)" tabindex="-1" title="' + lang.lockRatio + '" class="cke_btn_locked" id="{lockButtonId}" role="checkbox">' +
+               '<span class="cke_icon"></span>' +
+               '<span class="cke_label">' + lang.lockRatio + '</span>' +
+            '</a>' +
+
+            '<a href="javascript:void(0)" tabindex="-1" title="' + lang.resetSize + '" class="cke_btn_reset" id="{resetButtonId}" role="button">' +
+               '<span class="cke_label">' + lang.resetSize + '</span>' +
+            '</a>' +
+         '</div>' ).output( {
+            lockButtonId: lockButtonId,
+            resetButtonId: resetButtonId
+         } ),
+
+      helpers = CKEDITOR.plugins.image2,
+
+      // Editor instance configuration.
+      config = editor.config,
+
+      // Content restrictions defined by the widget which
+      // impact on dialog structure and presence of fields.
+      features = editor.widgets.registered.image.features,
+
+      // Functions inherited from image2 plugin.
+      getNatural = helpers.getNatural,
+
+      // Global variables referring to the dialog's context.
+      doc, widget, image,
+
+      // Global variable referring to this dialog's image pre-loader.
+      preLoader,
+
+      // Global variables holding the original size of the image.
+      domWidth, domHeight,
+
+      // Global variables related to image pre-loading.
+      preLoadedWidth, preLoadedHeight, srcChanged,
+
+      // Global variables related to size locking.
+      lockRatio, userDefinedLock,
+
+      // Global variables referring to dialog fields and elements.
+      lockButton, resetButton, widthField, heightField,
+
+      natural;
+
+   // Validates dimension. Allowed values are:
+   // "123px", "123", "" (empty string)
+   function validateDimension() {
+      var match = this.getValue().match( regexGetSizeOrEmpty ),
+         isValid = !!( match && parseInt( match[ 1 ], 10 ) !== 0 );
+
+      if ( !isValid )
+         alert( commonLang[ 'invalid' + CKEDITOR.tools.capitalize( this.id ) ] ); // jshint ignore:line
+
+      return isValid;
+   }
+
+   // Creates a function that pre-loads images. The callback function passes
+   // [image, width, height] or null if loading failed.
+   //
+   // @returns {Function}
+   function createPreLoader() {
+      var image = doc.createElement( 'img' ),
+         listeners = [];
+
+      function addListener( event, callback ) {
+         listeners.push( image.once( event, function( evt ) {
+            removeListeners();
+            callback( evt );
+         } ) );
+      }
+
+      function removeListeners() {
+         var l;
+
+         while ( ( l = listeners.pop() ) )
+            l.removeListener();
+      }
+
+      // @param {String} src.
+      // @param {Function} callback.
+      return function( src, callback, scope ) {
+         addListener( 'load', function() {
+            // Don't use image.$.(width|height) since it's buggy in IE9-10 (#11159)
+            var dimensions = getNatural( image );
+
+            callback.call( scope, image, dimensions.width, dimensions.height );
+         } );
+
+         addListener( 'error', function() {
+            callback( null );
+         } );
+
+         addListener( 'abort', function() {
+            callback( null );
+         } );
+
+         image.setAttribute( 'src',
+            ( config.baseHref || '' ) + src + '?' + Math.random().toString( 16 ).substring( 2 ) );
+      };
+   }
+
+   // This function updates width and height fields once the
+   // "src" field is altered. Along with dimensions, also the
+   // dimensions lock is adjusted.
+   function onChangeSrc() {
+      var value = this.getValue();
+
+      toggleDimensions( false );
+
+      // Remember that src is different than default.
+      if ( value !== widget.data.src ) {
+         // Update dimensions of the image once it's preloaded.
+         preLoader( value, function( image, width, height ) {
+            // Re-enable width and height fields.
+            toggleDimensions( true );
+
+            // There was problem loading the image. Unlock ratio.
+            if ( !image )
+               return toggleLockRatio( false );
+
+            // Fill width field with the width of the new image.
+            widthField.setValue( editor.config.image2_prefillDimensions === false ? 0 : width );
+
+            // Fill height field with the height of the new image.
+            heightField.setValue( editor.config.image2_prefillDimensions === false ? 0 : height );
+
+            // Cache the new width.
+            preLoadedWidth = width;
+
+            // Cache the new height.
+            preLoadedHeight = height;
+
+            // Check for new lock value if image exist.
+            toggleLockRatio( helpers.checkHasNaturalRatio( image ) );
+         } );
+
+         srcChanged = true;
+      }
+
+      // Value is the same as in widget data but is was
+      // modified back in time. Roll back dimensions when restoring
+      // default src.
+      else if ( srcChanged ) {
+         // Re-enable width and height fields.
+         toggleDimensions( true );
+
+         // Restore width field with cached width.
+         widthField.setValue( domWidth );
+
+         // Restore height field with cached height.
+         heightField.setValue( domHeight );
+
+         // Src equals default one back again.
+         srcChanged = false;
+      }
+
+      // Value is the same as in widget data and it hadn't
+      // been modified.
+      else {
+         // Re-enable width and height fields.
+         toggleDimensions( true );
+      }
+   }
+
+   function onChangeDimension() {
+      // If ratio is un-locked, then we don't care what's next.
+      if ( !lockRatio )
+         return;
+
+      var value = this.getValue();
+
+      // No reason to auto-scale or unlock if the field is empty.
+      if ( !value )
+         return;
+
+      // If the value of the field is invalid (e.g. with %), unlock ratio.
+      if ( !value.match( regexGetSizeOrEmpty ) )
+         toggleLockRatio( false );
+
+      // No automatic re-scale when dimension is '0'.
+      if ( value === '0' )
+         return;
+
+      var isWidth = this.id == 'width',
+         // If dialog opened for the new image, domWidth and domHeight
+         // will be empty. Use dimensions from pre-loader in such case instead.
+         width = domWidth || preLoadedWidth,
+         height = domHeight || preLoadedHeight;
+
+      // If changing width, then auto-scale height.
+      if ( isWidth )
+         value = Math.round( height * ( value / width ) );
+
+      // If changing height, then auto-scale width.
+      else
+         value = Math.round( width * ( value / height ) );
+
+      // If the value is a number, apply it to the other field.
+      if ( !isNaN( value ) )
+         ( isWidth ? heightField : widthField ).setValue( value );
+   }
+
+   // Set-up function for lock and reset buttons:
+   //    * Adds lock and reset buttons to focusables. Check if button exist first
+   //      because it may be disabled e.g. due to ACF restrictions.
+   //    * Register mouseover and mouseout event listeners for UI manipulations.
+   //    * Register click event listeners for buttons.
+   function onLoadLockReset() {
+      var dialog = this.getDialog();
+
+      function setupMouseClasses( el ) {
+         el.on( 'mouseover', function() {
+            this.addClass( 'cke_btn_over' );
+         }, el );
+
+         el.on( 'mouseout', function() {
+            this.removeClass( 'cke_btn_over' );
+         }, el );
+      }
+
+      // Create references to lock and reset buttons for this dialog instance.
+      lockButton = doc.getById( lockButtonId );
+      resetButton = doc.getById( resetButtonId );
+
+      // Activate (Un)LockRatio button
+      if ( lockButton ) {
+         // Consider that there's an additional focusable field
+         // in the dialog when the "browse" button is visible.
+         dialog.addFocusable( lockButton, 4 + hasFileBrowser );
+
+         lockButton.on( 'click', function( evt ) {
+            toggleLockRatio();
+            evt.data && evt.data.preventDefault();
+         }, this.getDialog() );
+
+         setupMouseClasses( lockButton );
+      }
+
+      // Activate the reset size button.
+      if ( resetButton ) {
+         // Consider that there's an additional focusable field
+         // in the dialog when the "browse" button is visible.
+         dialog.addFocusable( resetButton, 5 + hasFileBrowser );
+
+         // Fills width and height fields with the original dimensions of the
+         // image (stored in widget#data since widget#init).
+         resetButton.on( 'click', function( evt ) {
+            // If there's a new image loaded, reset button should revert
+            // cached dimensions of pre-loaded DOM element.
+            if ( srcChanged ) {
+               widthField.setValue( preLoadedWidth );
+               heightField.setValue( preLoadedHeight );
+            }
+
+            // If the old image remains, reset button should revert
+            // dimensions as loaded when the dialog was first shown.
+            else {
+               widthField.setValue( domWidth );
+               heightField.setValue( domHeight );
+            }
+
+            evt.data && evt.data.preventDefault();
+         }, this );
+
+         setupMouseClasses( resetButton );
+      }
+   }
+
+   function toggleLockRatio( enable ) {
+      // No locking if there's no radio (i.e. due to ACF).
+      if ( !lockButton )
+         return;
+
+      if ( typeof enable == 'boolean' ) {
+         // If user explicitly wants to decide whether
+         // to lock or not, don't do anything.
+         if ( userDefinedLock )
+            return;
+
+         lockRatio = enable;
+      }
+
+      // Undefined. User changed lock value.
+      else {
+         var width = widthField.getValue(),
+            height;
+
+         userDefinedLock = true;
+         lockRatio = !lockRatio;
+
+         // Automatically adjust height to width to match
+         // the original ratio (based on dom- dimensions).
+         if ( lockRatio && width ) {
+            height = domHeight / domWidth * width;
+
+            if ( !isNaN( height ) )
+               heightField.setValue( Math.round( height ) );
+         }
+      }
+
+      lockButton[ lockRatio ? 'removeClass' : 'addClass' ]( 'cke_btn_unlocked' );
+      lockButton.setAttribute( 'aria-checked', lockRatio );
+
+      // Ratio button hc presentation - WHITE SQUARE / BLACK SQUARE
+      if ( CKEDITOR.env.hc ) {
+         var icon = lockButton.getChild( 0 );
+         icon.setHtml( lockRatio ? CKEDITOR.env.ie ? '\u25A0' : '\u25A3' : CKEDITOR.env.ie ? '\u25A1' : '\u25A2' );
+      }
+   }
+
+   function toggleDimensions( enable ) {
+      var method = enable ? 'enable' : 'disable';
+
+      widthField[ method ]();
+      heightField[ method ]();
+   }
+
+   var hasFileBrowser = !!( config.filebrowserImageBrowseUrl || config.filebrowserBrowseUrl ),
+      srcBoxChildren = [
+         {
+            id: 'src',
+            type: 'text',
+            label: commonLang.url,
+            onKeyup: onChangeSrc,
+            onChange: onChangeSrc,
+            setup: function( widget ) {
+               this.setValue( widget.data.src );
+            },
+            commit: function( widget ) {
+               widget.setData( 'src', this.getValue() );
+            },
+            validate: CKEDITOR.dialog.validate.notEmpty( lang.urlMissing )
+         }
+      ];
+
+   // Render the "Browse" button on demand to avoid an "empty" (hidden child)
+   // space in dialog layout that distorts the UI.
+   if ( hasFileBrowser ) {
+      srcBoxChildren.push( {
+         type: 'button',
+         id: 'browse',
+         // v-align with the 'txtUrl' field.
+         // TODO: We need something better than a fixed size here.
+         style: 'display:inline-block;margin-top:14px;',
+         align: 'center',
+         label: editor.lang.common.browseServer,
+         hidden: true,
+         filebrowser: 'info:src'
+      } );
+   }
+
+   return {
+      title: lang.title,
+      minWidth: 250,
+      minHeight: 100,
+      onLoad: function() {
+         // Create a "global" reference to the document for this dialog instance.
+         doc = this._.element.getDocument();
+
+         // Create a pre-loader used for determining dimensions of new images.
+         preLoader = createPreLoader();
+      },
+      onShow: function() {
+         // Create a "global" reference to edited widget.
+         widget = this.widget;
+
+         // Create a "global" reference to widget's image.
+         image = widget.parts.image;
+
+         // Reset global variables.
+         srcChanged = userDefinedLock = lockRatio = false;
+
+         // Natural dimensions of the image.
+         natural = getNatural( image );
+
+         // Get the natural width of the image.
+         preLoadedWidth = domWidth = natural.width;
+
+         // Get the natural height of the image.
+         preLoadedHeight = domHeight = natural.height;
+      },
+      contents: [
+         {
+            id: 'info',
+            label: lang.infoTab,
+            elements: [
+               {
+                  type: 'vbox',
+                  padding: 0,
+                  children: [
+                     {
+                        type: 'hbox',
+                        widths: [ '100%' ],
+                        children: srcBoxChildren
+                     }
+                  ]
+               },
+               {
+                  id: 'alt',
+                  type: 'text',
+                  label: lang.alt,
+                  setup: function( widget ) {
+                     this.setValue( widget.data.alt );
+                  },
+                  commit: function( widget ) {
+                     widget.setData( 'alt', this.getValue() );
+                  }
+               },
+               {
+                  type: 'hbox',
+                  widths: [ '25%', '25%', '50%' ],
+                  requiredContent: features.dimension.requiredContent,
+                  children: [
+                     {
+                        type: 'text',
+                        width: '45px',
+                        id: 'width',
+                        label: commonLang.width,
+                        validate: validateDimension,
+                        onKeyUp: onChangeDimension,
+                        onLoad: function() {
+                           widthField = this;
+                        },
+                        setup: function( widget ) {
+                           this.setValue( widget.data.width );
+                        },
+                        commit: function( widget ) {
+                           widget.setData( 'width', this.getValue() );
+                        }
+                     },
+                     {
+                        type: 'text',
+                        id: 'height',
+                        width: '45px',
+                        label: commonLang.height,
+                        validate: validateDimension,
+                        onKeyUp: onChangeDimension,
+                        onLoad: function() {
+                           heightField = this;
+                        },
+                        setup: function( widget ) {
+                           this.setValue( widget.data.height );
+                        },
+                        commit: function( widget ) {
+                           widget.setData( 'height', this.getValue() );
+                        }
+                     },
+                     {
+                        id: 'lock',
+                        type: 'html',
+                        style: lockResetStyle,
+                        onLoad: onLoadLockReset,
+                        setup: function( widget ) {
+                           toggleLockRatio( widget.data.lock );
+                        },
+                        commit: function( widget ) {
+                           widget.setData( 'lock', lockRatio );
+                        },
+                        html: lockResetHtml
+                     }
+                  ]
+               },
+               {
+                  type: 'hbox',
+                  id: 'alignment',
+                  requiredContent: features.align.requiredContent,
+                  children: [
+                     {
+                        id: 'align',
+                        type: 'radio',
+                        items: [
+                           [ commonLang.alignNone, 'none' ],
+                           [ commonLang.alignLeft, 'left' ],
+                           [ commonLang.alignCenter, 'center' ],
+                           [ commonLang.alignRight, 'right' ]
+                        ],
+                        label: commonLang.align,
+                        setup: function( widget ) {
+                           this.setValue( widget.data.align );
+                        },
+                        commit: function( widget ) {
+                           widget.setData( 'align', this.getValue() );
+                        }
+                     }
+                  ]
+               },
+               {
+                  id: 'hasCaption',
+                  type: 'checkbox',
+                  label: lang.captioned,
+                  requiredContent: features.caption.requiredContent,
+                  setup: function( widget ) {
+                     this.setValue( widget.data.hasCaption );
+                  },
+                  commit: function( widget ) {
+                     widget.setData( 'hasCaption', this.getValue() );
+                  }
+               }
+            ]
+         },
+         {
+            id: 'Upload',
+            hidden: true,
+            filebrowser: 'uploadButton',
+            label: lang.uploadTab,
+            elements: [
+               {
+                  type: 'file',
+                  id: 'upload',
+                  label: lang.btnUpload,
+                  style: 'height:40px'
+               },
+               {
+                  type: 'fileButton',
+                  id: 'uploadButton',
+                  filebrowser: 'info:src',
+                  label: lang.btnUpload,
+                  'for': [ 'Upload', 'upload' ]
+               }
+            ]
+         }
+      ]
+   };
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/icons/hidpi/image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/image2/icons/hidpi/image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/icons/image.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/image2/icons/image.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/af.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'af', {
+	alt: 'Alternatiewe teks',
+	btnUpload: 'Stuur na bediener',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Afbeelding informasie',
+	lockRatio: 'Vaste proporsie',
+	menu: 'Afbeelding eienskappe',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Herstel grootte',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Afbeelding eienskappe',
+	uploadTab: 'Oplaai',
+	urlMissing: 'Die URL na die afbeelding ontbreek.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ar.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ar', {
+	alt: 'عنوان الصورة',
+	btnUpload: 'أرسلها للخادم',
+	captioned: 'صورة ذات اسم',
+	captionPlaceholder: 'تسمية',
+	infoTab: 'معلومات الصورة',
+	lockRatio: 'تناسق الحجم',
+	menu: 'خصائص الصورة',
+	pathName: 'صورة',
+	pathNameCaption: 'تسمية',
+	resetSize: 'إستعادة الحجم الأصلي',
+	resizer: 'انقر ثم اسحب للتحجيم',
+	title: 'خصائص الصورة',
+	uploadTab: 'رفع',
+	urlMissing: 'عنوان مصدر الصورة مفقود'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bg.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'bg', {
+	alt: 'Алтернативен текст',
+	btnUpload: 'Изпрати я на сървъра',
+	captioned: 'Надписано изображение',
+	captionPlaceholder: 'Надпис',
+	infoTab: 'Детайли за изображението',
+	lockRatio: 'Заключване на съотношението',
+	menu: 'Настройки на изображението',
+	pathName: 'изображение',
+	pathNameCaption: 'надпис',
+	resetSize: 'Нулиране на размер',
+	resizer: 'Кликни и влачи, за да преоразмериш',
+	title: 'Настройки на изображението',
+	uploadTab: 'Качване',
+	urlMissing: 'URL адреса на изображението липсва.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bn.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'bn', {
+	alt: 'বিকল্প টেক্সট',
+	btnUpload: 'ইহাকে সার্ভারে প্রেরন কর',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'ছবির তথ্য',
+	lockRatio: 'অনুপাত লক কর',
+	menu: 'ছবির প্রোপার্টি',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'ছবির প্রোপার্টি',
+	uploadTab: 'আপলোড',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/bs.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'bs', {
+	alt: 'Tekst na slici',
+	btnUpload: 'Šalji na server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Info slike',
+	lockRatio: 'Zakljuèaj odnos',
+	menu: 'Svojstva slike',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Resetuj dimenzije',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Svojstva slike',
+	uploadTab: 'Šalji',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ca.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ca', {
+	alt: 'Text alternatiu',
+	btnUpload: 'Envia-la al servidor',
+	captioned: 'Imatge amb subtítol',
+	captionPlaceholder: 'Títol',
+	infoTab: 'Informació de la imatge',
+	lockRatio: 'Bloqueja les proporcions',
+	menu: 'Propietats de la imatge',
+	pathName: 'imatge',
+	pathNameCaption: 'subtítol',
+	resetSize: 'Restaura la mida',
+	resizer: 'Clicar i arrossegar per redimensionar',
+	title: 'Propietats de la imatge',
+	uploadTab: 'Puja',
+	urlMissing: 'Falta la URL de la imatge.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cs.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'cs', {
+	alt: 'Alternativní text',
+	btnUpload: 'Odeslat na server',
+	captioned: 'Obrázek s popisem',
+	captionPlaceholder: 'Popis',
+	infoTab: 'Informace o obrázku',
+	lockRatio: 'Zámek',
+	menu: 'Vlastnosti obrázku',
+	pathName: 'Obrázek',
+	pathNameCaption: 'Popis',
+	resetSize: 'Původní velikost',
+	resizer: 'Klepněte a táhněte pro změnu velikosti',
+	title: 'Vlastnosti obrázku',
+	uploadTab: 'Odeslat',
+	urlMissing: 'Zadané URL zdroje obrázku nebylo nalezeno.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/cy.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'cy', {
+	alt: 'Testun Amgen',
+	btnUpload: 'Anfon i\'r Gweinydd',
+	captioned: 'Delwedd â phennawd',
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Gwyb Delwedd',
+	lockRatio: 'Cloi Cymhareb',
+	menu: 'Priodweddau Delwedd',
+	pathName: 'delwedd',
+	pathNameCaption: 'pennawd',
+	resetSize: 'Ailosod Maint',
+	resizer: 'Clicio a llusgo i ail-meintio',
+	title: 'Priodweddau Delwedd',
+	uploadTab: 'Lanlwytho',
+	urlMissing: 'URL gwreiddiol y ddelwedd ar goll.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/da.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'da', {
+	alt: 'Alternativ tekst',
+	btnUpload: 'Upload fil til serveren',
+	captioned: 'Tekstet billede',
+	captionPlaceholder: 'Tekst',
+	infoTab: 'Generelt',
+	lockRatio: 'Lås størrelsesforhold',
+	menu: 'Egenskaber for billede',
+	pathName: 'billede',
+	pathNameCaption: 'tekst',
+	resetSize: 'Nulstil størrelse',
+	resizer: 'Klik og træk for at ændre størrelsen',
+	title: 'Egenskaber for billede',
+	uploadTab: 'Upload',
+	urlMissing: 'Kilde på billed-URL mangler'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/de.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'de', {
+	alt: 'Alternativer Text',
+	btnUpload: 'Zum Server senden',
+	captioned: 'Bild mit Überschrift',
+	captionPlaceholder: 'Überschrift',
+	infoTab: 'Bildinfo',
+	lockRatio: 'Größenverhältnis beibehalten',
+	menu: 'Bildeigenschaften',
+	pathName: 'Bild',
+	pathNameCaption: 'Überschrift',
+	resetSize: 'Größe zurücksetzen',
+	resizer: 'Zum Vergrößern auswählen und ziehen',
+	title: 'Bild-Eigenschaften',
+	uploadTab: 'Hochladen',
+	urlMissing: 'Bildquellen-URL fehlt.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/el.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'el', {
+	alt: 'Εναλλακτικό Κείμενο',
+	btnUpload: 'Αποστολή στον Διακομιστή',
+	captioned: 'Εικόνα με λεζάντα',
+	captionPlaceholder: 'Λεζάντα',
+	infoTab: 'Πληροφορίες Εικόνας',
+	lockRatio: 'Κλείδωμα Αναλογίας',
+	menu: 'Ιδιότητες Εικόνας',
+	pathName: 'εικόνα',
+	pathNameCaption: 'λεζάντα',
+	resetSize: 'Επαναφορά Αρχικού Μεγέθους',
+	resizer: 'Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος',
+	title: 'Ιδιότητες Εικόνας',
+	uploadTab: 'Αποστολή',
+	urlMissing: 'Λείπει το πηγαίο URL της εικόνας.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-au.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-au.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-au.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'en-au', {
+	alt: 'Alternative Text',
+	btnUpload: 'Send it to the Server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Image Info',
+	lockRatio: 'Lock Ratio',
+	menu: 'Image Properties',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Reset Size',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Image Properties',
+	uploadTab: 'Upload',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-ca.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'en-ca', {
+	alt: 'Alternative Text',
+	btnUpload: 'Send it to the Server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Image Info',
+	lockRatio: 'Lock Ratio',
+	menu: 'Image Properties',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Reset Size',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Image Properties',
+	uploadTab: 'Upload',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en-gb.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'en-gb', {
+	alt: 'Alternative Text',
+	btnUpload: 'Send it to the Server',
+	captioned: 'Captioned image',
+	captionPlaceholder: 'Caption',
+	infoTab: 'Image Info',
+	lockRatio: 'Lock Ratio',
+	menu: 'Image Properties',
+	pathName: 'image',
+	pathNameCaption: 'caption',
+	resetSize: 'Reset Size',
+	resizer: 'Click and drag to resize',
+	title: 'Image Properties',
+	uploadTab: 'Upload',
+	urlMissing: 'Image source URL is missing.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/en.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'en', {
+	alt: 'Alternative Text',
+	btnUpload: 'Send it to the Server',
+	captioned: 'Captioned image',
+	captionPlaceholder: 'Caption',
+	infoTab: 'Image Info',
+	lockRatio: 'Lock Ratio',
+	menu: 'Image Properties',
+	pathName: 'image',
+	pathNameCaption: 'caption',
+	resetSize: 'Reset Size',
+	resizer: 'Click and drag to resize',
+	title: 'Image Properties',
+	uploadTab: 'Upload',
+	urlMissing: 'Image source URL is missing.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eo.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'eo', {
+	alt: 'Anstataŭiga Teksto',
+	btnUpload: 'Sendu al Servilo',
+	captioned: 'Bildo kun apudskribo',
+	captionPlaceholder: 'Apudskribo',
+	infoTab: 'Informoj pri Bildo',
+	lockRatio: 'Konservi Proporcion',
+	menu: 'Atributoj de Bildo',
+	pathName: 'bildo',
+	pathNameCaption: 'apudskribo',
+	resetSize: 'Origina Grando',
+	resizer: 'Kliki kaj treni por ŝanĝi la grandon',
+	title: 'Atributoj de Bildo',
+	uploadTab: 'Alŝuti',
+	urlMissing: 'La fontretadreso de la bildo mankas.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/es.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'es', {
+	alt: 'Texto Alternativo',
+	btnUpload: 'Enviar al Servidor',
+	captioned: 'Imagen subtitulada',
+	captionPlaceholder: 'Leyenda',
+	infoTab: 'Información de Imagen',
+	lockRatio: 'Proporcional',
+	menu: 'Propiedades de Imagen',
+	pathName: 'image',
+	pathNameCaption: 'subtítulo',
+	resetSize: 'Tamaño Original',
+	resizer: 'Dar clic y arrastrar para cambiar tamaño',
+	title: 'Propiedades de Imagen',
+	uploadTab: 'Cargar',
+	urlMissing: 'Debe indicar la URL de la imagen.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/et.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'et', {
+	alt: 'Alternatiivne tekst',
+	btnUpload: 'Saada serverisse',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Pildi info',
+	lockRatio: 'Lukusta kuvasuhe',
+	menu: 'Pildi omadused',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Lähtesta suurus',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Pildi omadused',
+	uploadTab: 'Lae üles',
+	urlMissing: 'Pildi lähte-URL on puudu.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/eu.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'eu', {
+	alt: 'Ordezko testua',
+	btnUpload: 'Bidali zerbitzarira',
+	captioned: 'Argazki oina',
+	captionPlaceholder: 'Argazki oina',
+	infoTab: 'Irudiaren informazioa',
+	lockRatio: 'Blokeatu erlazioa',
+	menu: 'Irudiaren propietateak',
+	pathName: 'Irudia',
+	pathNameCaption: 'Argazki oina',
+	resetSize: 'Berrezarri tamaina',
+	resizer: 'Klikatu eta arrastatu tamainaz aldatzeko',
+	title: 'Irudiaren propietateak',
+	uploadTab: 'Kargatu',
+	urlMissing: 'Irudiaren iturburuaren URLa falta da.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fa.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'fa', {
+	alt: 'متن جایگزین',
+	btnUpload: 'به سرور بفرست',
+	captioned: 'تصویر زیرنویس شده',
+	captionPlaceholder: 'عنوان',
+	infoTab: 'اطلاعات تصویر',
+	lockRatio: 'قفل کردن نسبت',
+	menu: 'ویژگی​های تصویر',
+	pathName: 'تصویر',
+	pathNameCaption: 'عنوان',
+	resetSize: 'بازنشانی اندازه',
+	resizer: 'کلیک و کشیدن برای تغییر اندازه',
+	title: 'ویژگی​های تصویر',
+	uploadTab: 'بالاگذاری',
+	urlMissing: 'آدرس URL اصلی تصویر یافت نشد.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fi.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'fi', {
+	alt: 'Vaihtoehtoinen teksti',
+	btnUpload: 'Lähetä palvelimelle',
+	captioned: 'Kuva kuvatekstillä',
+	captionPlaceholder: 'Kuvateksti',
+	infoTab: 'Kuvan tiedot',
+	lockRatio: 'Lukitse suhteet',
+	menu: 'Kuvan ominaisuudet',
+	pathName: 'kuva',
+	pathNameCaption: 'kuvateksti',
+	resetSize: 'Alkuperäinen koko',
+	resizer: 'Klikkaa ja raahaa muuttaaksesi kokoa',
+	title: 'Kuvan ominaisuudet',
+	uploadTab: 'Lisää tiedosto',
+	urlMissing: 'Kuvan lähdeosoite puuttuu.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fo.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'fo', {
+	alt: 'Alternativur tekstur',
+	btnUpload: 'Send til ambætaran',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Myndaupplýsingar',
+	lockRatio: 'Læs lutfallið',
+	menu: 'Myndaeginleikar',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Upprunastødd',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Myndaeginleikar',
+	uploadTab: 'Send til ambætaran',
+	urlMissing: 'URL til mynd manglar.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'fr-ca', {
+	alt: 'Texte alternatif',
+	btnUpload: 'Envoyer sur le serveur',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Informations sur l\'image2',
+	lockRatio: 'Verrouiller les proportions',
+	menu: 'Propriétés de l\'image2',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Taille originale',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Propriétés de l\'image2',
+	uploadTab: 'Téléverser',
+	urlMissing: 'L\'URL de la source de l\'image est manquant.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/fr.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'fr', {
+	alt: 'Texte de remplacement',
+	btnUpload: 'Envoyer sur le serveur',
+	captioned: 'Image légendée',
+	captionPlaceholder: 'Légende',
+	infoTab: 'Informations sur l\'image2',
+	lockRatio: 'Conserver les proportions',
+	menu: 'Propriétés de l\'image2',
+	pathName: 'image',
+	pathNameCaption: 'légende',
+	resetSize: 'Taille d\'origine',
+	resizer: 'Cliquer et glisser pour redimensionner',
+	title: 'Propriétés de l\'image2',
+	uploadTab: 'Envoyer',
+	urlMissing: 'L\'adresse source de l\'image est manquante.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gl.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'gl', {
+	alt: 'Texto alternativo',
+	btnUpload: 'Enviar ao servidor',
+	captioned: 'Imaxe con lenda',
+	captionPlaceholder: 'Lenda',
+	infoTab: 'Información da imaxe',
+	lockRatio: 'Proporcional',
+	menu: 'Propiedades da imaxe',
+	pathName: 'Imaxe',
+	pathNameCaption: 'lenda',
+	resetSize: 'Tamaño orixinal',
+	resizer: 'Prema e arrastre para axustar o tamaño',
+	title: 'Propiedades da imaxe',
+	uploadTab: 'Cargar',
+	urlMissing: 'Non se atopa o URL da imaxe.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/gu.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'gu', {
+	alt: 'ઑલ્ટર્નટ ટેક્સ્ટ',
+	btnUpload: 'આ સર્વરને મોકલવું',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'ચિત્ર ની જાણકારી',
+	lockRatio: 'લૉક ગુણોત્તર',
+	menu: 'ચિત્રના ગુણ',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'રીસેટ સાઇઝ',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'ચિત્રના ગુણ',
+	uploadTab: 'અપલોડ',
+	urlMissing: 'ઈમેજની મૂળ URL છે નહી.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/he.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'he', {
+	alt: 'טקסט חלופי',
+	btnUpload: 'שליחה לשרת',
+	captioned: 'כותרת תמונה',
+	captionPlaceholder: 'כותרת',
+	infoTab: 'מידע על התמונה',
+	lockRatio: 'נעילת היחס',
+	menu: 'תכונות התמונה',
+	pathName: 'תמונה',
+	pathNameCaption: 'כותרת',
+	resetSize: 'איפוס הגודל',
+	resizer: 'לחץ וגרור לשינוי הגודל',
+	title: 'מאפייני התמונה',
+	uploadTab: 'העלאה',
+	urlMissing: 'כתובת התמונה חסרה.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hi.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'hi', {
+	alt: 'वैकल्पिक टेक्स्ट',
+	btnUpload: 'इसे सर्वर को भेजें',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'तस्वीर की जानकारी',
+	lockRatio: 'लॉक अनुपात',
+	menu: 'तस्वीर प्रॉपर्टीज़',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'रीसॅट साइज़',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'तस्वीर प्रॉपर्टीज़',
+	uploadTab: 'अपलोड',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hr.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'hr', {
+	alt: 'Alternativni tekst',
+	btnUpload: 'Pošalji na server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Info slike',
+	lockRatio: 'Zaključaj odnos',
+	menu: 'Svojstva slika',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Obriši veličinu',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Svojstva slika',
+	uploadTab: 'Pošalji',
+	urlMissing: 'Nedostaje URL slike.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/hu.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'hu', {
+	alt: 'Buborék szöveg',
+	btnUpload: 'Küldés a szerverre',
+	captioned: 'Feliratozott kép',
+	captionPlaceholder: 'Képfelirat',
+	infoTab: 'Alaptulajdonságok',
+	lockRatio: 'Arány megtartása',
+	menu: 'Kép tulajdonságai',
+	pathName: 'kép',
+	pathNameCaption: 'felirat',
+	resetSize: 'Eredeti méret',
+	resizer: 'Kattints és húzz az átméretezéshez',
+	title: 'Kép tulajdonságai',
+	uploadTab: 'Feltöltés',
+	urlMissing: 'Hiányzik a kép URL-je'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/id.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/id.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/id.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'id', {
+	alt: 'Teks alternatif',
+	btnUpload: 'Kirim ke Server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Info Gambar',
+	lockRatio: 'Lock Ratio', // MISSING
+	menu: 'Image Properties', // MISSING
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Atur Ulang Ukuran',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Image Properties', // MISSING
+	uploadTab: 'Unggah',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/is.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/is.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/is.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'is', {
+	alt: 'Baklægur texti',
+	btnUpload: 'Hlaða upp',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Almennt',
+	lockRatio: 'Festa stærðarhlutfall',
+	menu: 'Eigindi myndar',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Reikna stærð',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Eigindi myndar',
+	uploadTab: 'Senda upp',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/it.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'it', {
+	alt: 'Testo alternativo',
+	btnUpload: 'Invia al server',
+	captioned: 'Immagine con didascalia',
+	captionPlaceholder: 'Didascalia',
+	infoTab: 'Informazioni immagine',
+	lockRatio: 'Blocca rapporto',
+	menu: 'Proprietà immagine',
+	pathName: 'immagine',
+	pathNameCaption: 'didascalia',
+	resetSize: 'Reimposta dimensione',
+	resizer: 'Fare clic e trascinare per ridimensionare',
+	title: 'Proprietà immagine',
+	uploadTab: 'Carica',
+	urlMissing: 'Manca l\'URL dell\'immagine.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ja.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ja', {
+	alt: '代替テキスト',
+	btnUpload: 'サーバーに送信',
+	captioned: 'キャプションを付ける',
+	captionPlaceholder: 'キャプション',
+	infoTab: '画像情報',
+	lockRatio: '比率を固定',
+	menu: '画像のプロパティ',
+	pathName: 'image',
+	pathNameCaption: 'caption',
+	resetSize: 'サイズをリセット',
+	resizer: 'ドラッグしてリサイズ',
+	title: '画像のプロパティ',
+	uploadTab: 'アップロード',
+	urlMissing: '画像のURLを入力してください。'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ka.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ka.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ka.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ka', {
+	alt: 'სანაცვლო ტექსტი',
+	btnUpload: 'სერვერისთვის გაგზავნა',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'სურათის ინფორმცია',
+	lockRatio: 'პროპორციის შენარჩუნება',
+	menu: 'სურათის პარამეტრები',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'ზომის დაბრუნება',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'სურათის პარამეტრები',
+	uploadTab: 'აქაჩვა',
+	urlMissing: 'სურათის URL არაა შევსებული.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/km.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'km', {
+	alt: 'អត្ថបទជំនួស',
+	btnUpload: 'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',
+	captioned: 'រូប​ដែល​មាន​ចំណង​ជើង',
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'ពត៌មានអំពីរូបភាព',
+	lockRatio: 'ចាក់​សោ​ផល​ធៀប',
+	menu: 'លក្ខណៈ​សម្បត្តិ​រូប​ភាព',
+	pathName: 'រូបភាព',
+	pathNameCaption: 'ចំណងជើង',
+	resetSize: 'កំណត់ទំហំឡើងវិញ',
+	resizer: 'ចុច​ហើយ​ទាញ​ដើម្បី​ប្ដូរ​ទំហំ',
+	title: 'លក្ខណៈ​សម្បត្តិ​រូប​ភាប',
+	uploadTab: 'ផ្ទុក​ឡើង',
+	urlMissing: 'ខ្វះ URL ប្រភព​រូប​ភាព។'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ko.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ko', {
+	alt: '대체 문자열',
+	btnUpload: '서버로 전송',
+	captioned: '이미지 설명 넣기',
+	captionPlaceholder: '설명',
+	infoTab: '이미지 정보',
+	lockRatio: '비율 유지',
+	menu: '이미지 속성',
+	pathName: '이미지',
+	pathNameCaption: '설명',
+	resetSize: '원래 크기로',
+	resizer: '크기를 조절하려면 클릭 후 드래그 하세요',
+	title: '이미지 속성',
+	uploadTab: '업로드',
+	urlMissing: '이미지 원본 주소(URL)가 없습니다.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ku.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ku', {
+	alt: 'جێگرەوەی دەق',
+	btnUpload: 'ناردنی بۆ ڕاژه',
+	captioned: 'وێنەی بەسەردێر',
+	captionPlaceholder: 'سەردێر',
+	infoTab: 'زانیاری وێنه',
+	lockRatio: 'داخستنی ڕێژه',
+	menu: 'خاسیەتی وێنه',
+	pathName: 'وێنە',
+	pathNameCaption: 'سەردێر',
+	resetSize: 'ڕێکخستنەوەی قەباره',
+	resizer: 'کرتەبکە و ڕایبکێشە بۆ قەبارە گۆڕین',
+	title: 'خاسیەتی وێنه',
+	uploadTab: 'بارکردن',
+	urlMissing: 'سەرچاوەی بەستەری وێنه بزره'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lt.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'lt', {
+	alt: 'Alternatyvus Tekstas',
+	btnUpload: 'Siųsti į serverį',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Vaizdo informacija',
+	lockRatio: 'Išlaikyti proporciją',
+	menu: 'Vaizdo savybės',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Atstatyti dydį',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Vaizdo savybės',
+	uploadTab: 'Siųsti',
+	urlMissing: 'Paveiksliuko nuorodos nėra.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/lv.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'lv', {
+	alt: 'Alternatīvais teksts',
+	btnUpload: 'Nosūtīt serverim',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Informācija par attēlu',
+	lockRatio: 'Nemainīga Augstuma/Platuma attiecība',
+	menu: 'Attēla īpašības',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Atjaunot sākotnējo izmēru',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Attēla īpašības',
+	uploadTab: 'Augšupielādēt',
+	urlMissing: 'Trūkst attēla atrašanās adrese.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mk.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'mk', {
+	alt: 'Alternative Text', // MISSING
+	btnUpload: 'Send it to the Server', // MISSING
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Image Info', // MISSING
+	lockRatio: 'Lock Ratio', // MISSING
+	menu: 'Image Properties', // MISSING
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Reset Size', // MISSING
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Image Properties', // MISSING
+	uploadTab: 'Upload', // MISSING
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/mn.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'mn', {
+	alt: 'Зургийг орлох бичвэр',
+	btnUpload: 'Үүнийг сервэррүү илгээ',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Зурагны мэдээлэл',
+	lockRatio: 'Радио түгжих',
+	menu: 'Зураг',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'хэмжээ дахин оноох',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Зураг',
+	uploadTab: 'Илгээж ачаалах',
+	urlMissing: 'Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ms.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ms.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ms.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ms', {
+	alt: 'Text Alternatif',
+	btnUpload: 'Hantar ke Server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Info Imej',
+	lockRatio: 'Tetapkan Nisbah',
+	menu: 'Ciri-ciri Imej',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Saiz Set Semula',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Ciri-ciri Imej',
+	uploadTab: 'Muat Naik',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nb.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'nb', {
+	alt: 'Alternativ tekst',
+	btnUpload: 'Send det til serveren',
+	captioned: 'Bilde med bildetekst',
+	captionPlaceholder: 'Bildetekst',
+	infoTab: 'Bildeinformasjon',
+	lockRatio: 'Lås forhold',
+	menu: 'Bildeegenskaper',
+	pathName: 'bilde',
+	pathNameCaption: 'bildetekst',
+	resetSize: 'Tilbakestill størrelse',
+	resizer: 'Klikk og dra for å endre størrelse',
+	title: 'Bildeegenskaper',
+	uploadTab: 'Last opp',
+	urlMissing: 'Bildets adresse mangler.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/nl.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'nl', {
+	alt: 'Alternatieve tekst',
+	btnUpload: 'Naar server verzenden',
+	captioned: 'Afbeelding met onderschrift',
+	captionPlaceholder: 'Onderschrift',
+	infoTab: 'Afbeeldingsinformatie',
+	lockRatio: 'Verhouding vergrendelen',
+	menu: 'Eigenschappen afbeelding',
+	pathName: 'afbeelding',
+	pathNameCaption: 'onderschrift',
+	resetSize: 'Afmetingen herstellen',
+	resizer: 'Klik en sleep om te herschalen',
+	title: 'Afbeeldingseigenschappen',
+	uploadTab: 'Uploaden',
+	urlMissing: 'De URL naar de afbeelding ontbreekt.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/no.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'no', {
+	alt: 'Alternativ tekst',
+	btnUpload: 'Send det til serveren',
+	captioned: 'Bilde med bildetekst',
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Bildeinformasjon',
+	lockRatio: 'Lås forhold',
+	menu: 'Bildeegenskaper',
+	pathName: 'bilde',
+	pathNameCaption: 'bildetekst',
+	resetSize: 'Tilbakestill størrelse',
+	resizer: 'Klikk og dra for å endre størrelse',
+	title: 'Bildeegenskaper',
+	uploadTab: 'Last opp',
+	urlMissing: 'Bildets adresse mangler.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pl.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'pl', {
+	alt: 'Tekst zastępczy',
+	btnUpload: 'Wyślij',
+	captioned: 'Obrazek z podpisem',
+	captionPlaceholder: 'Podpis',
+	infoTab: 'Informacje o obrazku',
+	lockRatio: 'Zablokuj proporcje',
+	menu: 'Właściwości obrazka',
+	pathName: 'obrazek',
+	pathNameCaption: 'podpis',
+	resetSize: 'Przywróć rozmiar',
+	resizer: 'Kliknij i przeciągnij, by zmienić rozmiar.',
+	title: 'Właściwości obrazka',
+	uploadTab: 'Wyślij',
+	urlMissing: 'Podaj adres URL obrazka.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt-br.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'pt-br', {
+	alt: 'Texto Alternativo',
+	btnUpload: 'Enviar para o Servidor',
+	captioned: 'Legenda da Imagem',
+	captionPlaceholder: 'Legenda',
+	infoTab: 'Informações da Imagem',
+	lockRatio: 'Travar Proporções',
+	menu: 'Formatar Imagem',
+	pathName: 'Imagem',
+	pathNameCaption: 'Legenda',
+	resetSize: 'Redefinir para o Tamanho Original',
+	resizer: 'Click e arraste para redimensionar',
+	title: 'Formatar Imagem',
+	uploadTab: 'Enviar ao Servidor',
+	urlMissing: 'URL da imagem está faltando.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/pt.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'pt', {
+	alt: 'Texto Alternativo',
+	btnUpload: 'Enviar para o Servidor',
+	captioned: 'Imagem legendada',
+	captionPlaceholder: 'Legenda',
+	infoTab: 'Informação da Imagem',
+	lockRatio: 'Proporcional',
+	menu: 'Propriedades da Imagem',
+	pathName: 'imagem',
+	pathNameCaption: 'legenda',
+	resetSize: 'Tamanho Original',
+	resizer: 'Clique e arraste para redimensionar',
+	title: 'Propriedades da Imagem',
+	uploadTab: 'Enviar',
+	urlMissing: 'O URL da fonte da imagem está em falta.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ro.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ro.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ro.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ro', {
+	alt: 'Text alternativ',
+	btnUpload: 'Trimite la server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Informaţii despre imagine',
+	lockRatio: 'Păstrează proporţiile',
+	menu: 'Proprietăţile imaginii',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Resetează mărimea',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Proprietăţile imaginii',
+	uploadTab: 'Încarcă',
+	urlMissing: 'Sursa URL a imaginii lipsește.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ru.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ru', {
+	alt: 'Альтернативный текст',
+	btnUpload: 'Загрузить на сервер',
+	captioned: 'Отображать название',
+	captionPlaceholder: 'Название',
+	infoTab: 'Данные об изображении',
+	lockRatio: 'Сохранять пропорции',
+	menu: 'Свойства изображения',
+	pathName: 'изображение',
+	pathNameCaption: 'название',
+	resetSize: 'Вернуть обычные размеры',
+	resizer: 'Нажмите и растяните',
+	title: 'Свойства изображения',
+	uploadTab: 'Загрузка файла',
+	urlMissing: 'Не указана ссылка на изображение.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/si.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'si', {
+	alt: 'විකල්ප ',
+	btnUpload: 'සේවාදායකය වෙත යොමුකිරිම',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'රුපයේ තොරතුරු',
+	lockRatio: 'නවතන අනුපාතය ',
+	menu: 'රුපයේ ගුණ',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'නැවතත් විශාලත්වය වෙනස් කිරීම',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'රුපයේ ',
+	uploadTab: 'උඩුගතකිරීම',
+	urlMissing: 'රුප මුලාශ්‍ර URL නැත.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sk.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sk', {
+	alt: 'Alternatívny text',
+	btnUpload: 'Odoslať to na server',
+	captioned: 'Opísaný obrázok',
+	captionPlaceholder: 'Popis',
+	infoTab: 'Informácie o obrázku',
+	lockRatio: 'Pomer zámky',
+	menu: 'Vlastnosti obrázka',
+	pathName: 'obrázok',
+	pathNameCaption: 'popis',
+	resetSize: 'Pôvodná veľkosť',
+	resizer: 'Kliknite a potiahnite pre zmenu veľkosti',
+	title: 'Vlastnosti obrázka',
+	uploadTab: 'Nahrať',
+	urlMissing: 'Chýba URL zdroja obrázka.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sl.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sl', {
+	alt: 'Nadomestno besedilo',
+	btnUpload: 'Pošlji na strežnik',
+	captioned: 'Podnaslovljena slika',
+	captionPlaceholder: 'Napis',
+	infoTab: 'Podatki o sliki',
+	lockRatio: 'Zakleni razmerje',
+	menu: 'Lastnosti slike',
+	pathName: 'slika',
+	pathNameCaption: 'napis',
+	resetSize: 'Ponastavi velikost',
+	resizer: 'Kliknite in povlecite, da spremeniti velikost',
+	title: 'Lastnosti slike',
+	uploadTab: 'Naloži',
+	urlMissing: 'Manjka vir (URL) slike.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sq.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sq.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sq.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sq', {
+	alt: 'Tekst Alternativ',
+	btnUpload: 'Dërgo në server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Informacione mbi Fotografinë',
+	lockRatio: 'Mbyll Racionin',
+	menu: 'Karakteristikat e Fotografisë',
+	pathName: 'foto',
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Rikthe Madhësinë',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Karakteristikat e Fotografisë',
+	uploadTab: 'Ngarko',
+	urlMissing: 'Mungon URL e burimit të fotografisë.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr-latn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr-latn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr-latn.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sr-latn', {
+	alt: 'Alternativni tekst',
+	btnUpload: 'Pošalji na server',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Info slike',
+	lockRatio: 'Zaključaj odnos',
+	menu: 'Osobine slika',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Resetuj veličinu',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Osobine slika',
+	uploadTab: 'Pošalji',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sr.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sr', {
+	alt: 'Алтернативни текст',
+	btnUpload: 'Пошаљи на сервер',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'Инфо слике',
+	lockRatio: 'Закључај однос',
+	menu: 'Особине слика',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'Ресетуј величину',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'Особине слика',
+	uploadTab: 'Пошаљи',
+	urlMissing: 'Недостаје УРЛ слике.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/sv.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'sv', {
+	alt: 'Alternativ text',
+	btnUpload: 'Skicka till server',
+	captioned: 'Rubricerad bild',
+	captionPlaceholder: 'Bildtext',
+	infoTab: 'Bildinformation',
+	lockRatio: 'Lås höjd/bredd förhållanden',
+	menu: 'Bildegenskaper',
+	pathName: 'bild',
+	pathNameCaption: 'rubrik',
+	resetSize: 'Återställ storlek',
+	resizer: 'Klicka och drag för att ändra storlek',
+	title: 'Bildegenskaper',
+	uploadTab: 'Ladda upp',
+	urlMissing: 'Bildkällans URL saknas.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/th.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'th', {
+	alt: 'คำประกอบรูปภาพ',
+	btnUpload: 'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',
+	captioned: 'Captioned image', // MISSING
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'ข้อมูลของรูปภาพ',
+	lockRatio: 'กำหนดอัตราส่วน กว้าง-สูง แบบคงที่',
+	menu: 'คุณสมบัติของ รูปภาพ',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'กำหนดรูปเท่าขนาดจริง',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'คุณสมบัติของ รูปภาพ',
+	uploadTab: 'อัพโหลดไฟล์',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tr.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'tr', {
+	alt: 'Alternatif Yazı',
+	btnUpload: 'Sunucuya Yolla',
+	captioned: 'Başlıklı resim',
+	captionPlaceholder: 'Başlık',
+	infoTab: 'Resim Bilgisi',
+	lockRatio: 'Oranı Kilitle',
+	menu: 'Resim Özellikleri',
+	pathName: 'Resim',
+	pathNameCaption: 'başlık',
+	resetSize: 'Boyutu Başa Döndür',
+	resizer: 'Boyutlandırmak için, tıklayın ve sürükleyin',
+	title: 'Resim Özellikleri',
+	uploadTab: 'Karşıya Yükle',
+	urlMissing: 'Resmin URL kaynağı bulunamadı.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/tt.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'tt', {
+	alt: 'Альтернатив текст',
+	btnUpload: 'Серверга җибәрү',
+	captioned: 'Исеме куелган рәсем',
+	captionPlaceholder: 'Исем',
+	infoTab: 'Рәсем тасвирламасы',
+	lockRatio: 'Lock Ratio', // MISSING
+	menu: 'Рәсем үзлекләре',
+	pathName: 'рәсем',
+	pathNameCaption: 'исем',
+	resetSize: 'Баштагы зурлык',
+	resizer: 'Күчереп куер өчен басып шудырыгыз',
+	title: 'Рәсем үзлекләре',
+	uploadTab: 'Йөкләү',
+	urlMissing: 'Image source URL is missing.' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/ug.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'ug', {
+	alt: 'تېكىست ئالماشتۇر',
+	btnUpload: 'مۇلازىمېتىرغا يۈكلە',
+	captioned: 'ماۋزۇلۇق سۈرەت',
+	captionPlaceholder: 'Caption', // MISSING
+	infoTab: 'سۈرەت',
+	lockRatio: 'نىسبەتنى قۇلۇپلا',
+	menu: 'سۈرەت خاسلىقى',
+	pathName: 'image', // MISSING
+	pathNameCaption: 'caption', // MISSING
+	resetSize: 'ئەسلى چوڭلۇق',
+	resizer: 'Click and drag to resize', // MISSING
+	title: 'سۈرەت خاسلىقى',
+	uploadTab: 'يۈكلە',
+	urlMissing: 'سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/uk.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'uk', {
+	alt: 'Альтернативний текст',
+	btnUpload: 'Надіслати на сервер',
+	captioned: 'Підписане зображення',
+	captionPlaceholder: 'Заголовок',
+	infoTab: 'Інформація про зображення',
+	lockRatio: 'Зберегти пропорції',
+	menu: 'Властивості зображення',
+	pathName: 'Зображення',
+	pathNameCaption: 'заголовок',
+	resetSize: 'Очистити поля розмірів',
+	resizer: 'Клікніть та потягніть для зміни розмірів',
+	title: 'Властивості зображення',
+	uploadTab: 'Надіслати',
+	urlMissing: 'Вкажіть URL зображення.'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/vi.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'vi', {
+	alt: 'Chú thích ảnh',
+	btnUpload: 'Tải lên máy chủ',
+	captioned: 'Ảnh có chú thích',
+	captionPlaceholder: 'Nhãn',
+	infoTab: 'Thông tin của ảnh',
+	lockRatio: 'Giữ nguyên tỷ lệ',
+	menu: 'Thuộc tính của ảnh',
+	pathName: 'ảnh',
+	pathNameCaption: 'chú thích',
+	resetSize: 'Kích thước gốc',
+	resizer: 'Kéo rê để thay đổi kích cỡ',
+	title: 'Thuộc tính của ảnh',
+	uploadTab: 'Tải lên',
+	urlMissing: 'Thiếu đường dẫn hình ảnh'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'zh-cn', {
+	alt: '替换文本',
+	btnUpload: '上传到服务器',
+	captioned: '带标题图像',
+	captionPlaceholder: '标题',
+	infoTab: '图像信息',
+	lockRatio: '锁定比例',
+	menu: '图像属性',
+	pathName: '图像',
+	pathNameCaption: '标题',
+	resetSize: '原始尺寸',
+	resizer: '点击并拖拽以改变尺寸',
+	title: '图像属性',
+	uploadTab: '上传',
+	urlMissing: '缺少图像源文件地址'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/lang/zh.js	(revision 2)
@@ -0,0 +1,20 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'image2', 'zh', {
+	alt: '替代文字',
+	btnUpload: '傳送至伺服器',
+	captioned: '已加標題之圖片',
+	captionPlaceholder: '標題',
+	infoTab: '影像資訊',
+	lockRatio: '固定比例',
+	menu: '影像屬性',
+	pathName: '圖片',
+	pathNameCaption: '標題',
+	resetSize: '重設大小',
+	resizer: '拖曳以改變大小',
+	title: '影像屬性',
+	uploadTab: '上傳',
+	urlMissing: '遺失圖片來源之 URL '
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/image2/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/image2/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/image2/plugin.js	(revision 2)
@@ -0,0 +1,1685 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+'use strict';
+
+( function() {
+
+	var template = '<img alt="" src="" />',
+		templateBlock = new CKEDITOR.template(
+			'<figure class="{captionedClass}">' +
+				template +
+				'<figcaption>{captionPlaceholder}</figcaption>' +
+			'</figure>' ),
+		alignmentsObj = { left: 0, center: 1, right: 2 },
+		regexPercent = /^\s*(\d+\%)\s*$/i;
+
+	CKEDITOR.plugins.add( 'image2', {
+		// jscs:disable maximumLineLength
+		lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+		// jscs:enable maximumLineLength
+		requires: 'widget,dialog',
+		icons: 'image',
+		hidpi: true,
+
+		onLoad: function() {
+			CKEDITOR.addCss(
+			'.cke_image_nocaption{' +
+				// This is to remove unwanted space so resize
+				// wrapper is displayed property.
+				'line-height:0' +
+			'}' +
+			'.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}' +
+			'.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}' +
+			'.cke_image_resizer{' +
+				'display:none;' +
+				'position:absolute;' +
+				'width:10px;' +
+				'height:10px;' +
+				'bottom:-5px;' +
+				'right:-5px;' +
+				'background:#000;' +
+				'outline:1px solid #fff;' +
+				// Prevent drag handler from being misplaced (#11207).
+				'line-height:0;' +
+				'cursor:se-resize;' +
+			'}' +
+			'.cke_image_resizer_wrapper{' +
+				'position:relative;' +
+				'display:inline-block;' +
+				'line-height:0;' +
+			'}' +
+			// Bottom-left corner style of the resizer.
+			'.cke_image_resizer.cke_image_resizer_left{' +
+				'right:auto;' +
+				'left:-5px;' +
+				'cursor:sw-resize;' +
+			'}' +
+			'.cke_widget_wrapper:hover .cke_image_resizer,' +
+			'.cke_image_resizer.cke_image_resizing{' +
+				'display:block' +
+			'}' +
+			// Expand widget wrapper when linked inline image.
+			'.cke_widget_wrapper>a{' +
+				'display:inline-block' +
+			'}' );
+		},
+
+		init: function( editor ) {
+			// Adapts configuration from original image plugin. Should be removed
+			// when we'll rename image2 to image.
+			var config = editor.config,
+				lang = editor.lang.image2,
+				image = widgetDef( editor );
+
+			// Since filebrowser plugin discovers config properties by dialog (plugin?)
+			// names (sic!), this hack will be necessary as long as Image2 is not named
+			// Image. And since Image2 will never be Image, for sure some filebrowser logic
+			// got to be refined.
+			config.filebrowserImage2BrowseUrl = config.filebrowserImageBrowseUrl;
+			config.filebrowserImage2UploadUrl = config.filebrowserImageUploadUrl;
+
+			// Add custom elementspath names to widget definition.
+			image.pathName = lang.pathName;
+			image.editables.caption.pathName = lang.pathNameCaption;
+
+			// Register the widget.
+			editor.widgets.add( 'image', image );
+
+			// Add toolbar button for this plugin.
+			editor.ui.addButton && editor.ui.addButton( 'Image', {
+				label: editor.lang.common.image,
+				command: 'image',
+				toolbar: 'insert,10'
+			} );
+
+			// Register context menu option for editing widget.
+			if ( editor.contextMenu ) {
+				editor.addMenuGroup( 'image', 10 );
+
+				editor.addMenuItem( 'image', {
+					label: lang.menu,
+					command: 'image',
+					group: 'image'
+				} );
+			}
+
+			CKEDITOR.dialog.add( 'image2', this.path + 'dialogs/image2.js' );
+		},
+
+		afterInit: function( editor ) {
+			// Integrate with align commands (justify plugin).
+			var align = { left: 1, right: 1, center: 1, block: 1 },
+				integrate = alignCommandIntegrator( editor );
+
+			for ( var value in align )
+				integrate( value );
+
+			// Integrate with link commands (link plugin).
+			linkCommandIntegrator( editor );
+		}
+	} );
+
+	// Wiget states (forms) depending on alignment and configuration.
+	//
+	// Non-captioned widget (inline styles)
+	// 		┌──────┬───────────────────────────────┬─────────────────────────────┐
+	// 		│Align │Internal form                  │Data                         │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│none  │<wrapper>                      │<img />                      │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│left  │<wrapper style=”float:left”>   │<img style=”float:left” />   │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│center│<wrapper>                      │<p style=”text-align:center”>│
+	// 		│      │ <p style=”text-align:center”> │  <img />                    │
+	// 		│      │   <img />                     │</p>                         │
+	// 		│      │ </p>                          │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│right │<wrapper style=”float:right”>  │<img style=”float:right” />  │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		└──────┴───────────────────────────────┴─────────────────────────────┘
+	//
+	// Non-captioned widget (config.image2_alignClasses defined)
+	// 		┌──────┬───────────────────────────────┬─────────────────────────────┐
+	// 		│Align │Internal form                  │Data                         │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│none  │<wrapper>                      │<img />                      │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│left  │<wrapper class=”left”>         │<img class=”left” />         │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│center│<wrapper>                      │<p class=”center”>           │
+	// 		│      │ <p class=”center”>            │ <img />                     │
+	// 		│      │   <img />                     │</p>                         │
+	// 		│      │ </p>                          │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		├──────┼───────────────────────────────┼─────────────────────────────┤
+	// 		│right │<wrapper class=”right”>        │<img class=”right” />        │
+	// 		│      │ <img />                       │                             │
+	// 		│      │</wrapper>                     │                             │
+	// 		└──────┴───────────────────────────────┴─────────────────────────────┘
+	//
+	// Captioned widget (inline styles)
+	// 		┌──────┬────────────────────────────────────────┬────────────────────────────────────────┐
+	// 		│Align │Internal form                           │Data                                    │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│none  │<wrapper>                               │<figure />                              │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│left  │<wrapper style=”float:left”>            │<figure style=”float:left” />           │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│center│<wrapper style=”text-align:center”>     │<div style=”text-align:center”>         │
+	// 		│      │ <figure style=”display:inline-block” />│ <figure style=”display:inline-block” />│
+	// 		│      │</wrapper>                              │</p>                                    │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│right │<wrapper style=”float:right”>           │<figure style=”float:right” />          │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		└──────┴────────────────────────────────────────┴────────────────────────────────────────┘
+	//
+	// Captioned widget (config.image2_alignClasses defined)
+	// 		┌──────┬────────────────────────────────────────┬────────────────────────────────────────┐
+	// 		│Align │Internal form                           │Data                                    │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│none  │<wrapper>                               │<figure />                              │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│left  │<wrapper class=”left”>                  │<figure class=”left” />                 │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│center│<wrapper class=”center”>                │<div class=”center”>                    │
+	// 		│      │ <figure />                             │ <figure />                             │
+	// 		│      │</wrapper>                              │</p>                                    │
+	// 		├──────┼────────────────────────────────────────┼────────────────────────────────────────┤
+	// 		│right │<wrapper class=”right”>                 │<figure class=”right” />                │
+	// 		│      │ <figure />                             │                                        │
+	// 		│      │</wrapper>                              │                                        │
+	// 		└──────┴────────────────────────────────────────┴────────────────────────────────────────┘
+	//
+	// @param {CKEDITOR.editor}
+	// @returns {Object}
+	function widgetDef( editor ) {
+		var alignClasses = editor.config.image2_alignClasses,
+			captionedClass = editor.config.image2_captionedClass;
+
+		function deflate() {
+			if ( this.deflated )
+				return;
+
+			// Remember whether widget was focused before destroyed.
+			if ( editor.widgets.focused == this.widget )
+				this.focused = true;
+
+			editor.widgets.destroy( this.widget );
+
+			// Mark widget was destroyed.
+			this.deflated = true;
+		}
+
+		function inflate() {
+			var editable = editor.editable(),
+			doc = editor.document;
+
+			// Create a new widget. This widget will be either captioned
+			// non-captioned, block or inline according to what is the
+			// new state of the widget.
+			if ( this.deflated ) {
+				this.widget = editor.widgets.initOn( this.element, 'image', this.widget.data );
+
+				// Once widget was re-created, it may become an inline element without
+				// block wrapper (i.e. when unaligned, end not captioned). Let's do some
+				// sort of autoparagraphing here (#10853).
+				if ( this.widget.inline && !( new CKEDITOR.dom.elementPath( this.widget.wrapper, editable ).block ) ) {
+					var block = doc.createElement( editor.activeEnterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
+					block.replace( this.widget.wrapper );
+					this.widget.wrapper.move( block );
+				}
+
+				// The focus must be transferred from the old one (destroyed)
+				// to the new one (just created).
+				if ( this.focused ) {
+					this.widget.focus();
+					delete this.focused;
+				}
+
+				delete this.deflated;
+			}
+
+			// If now widget was destroyed just update wrapper's alignment.
+			// According to the new state.
+			else {
+				setWrapperAlign( this.widget, alignClasses );
+			}
+		}
+
+		return {
+			allowedContent: getWidgetAllowedContent( editor ),
+
+			requiredContent: 'img[src,alt]',
+
+			features: getWidgetFeatures( editor ),
+
+			styleableElements: 'img figure',
+
+			// This widget converts style-driven dimensions to attributes.
+			contentTransformations: [
+				[ 'img[width]: sizeToAttribute' ]
+			],
+
+			// This widget has an editable caption.
+			editables: {
+				caption: {
+					selector: 'figcaption',
+					allowedContent: 'br em strong sub sup u s; a[!href]'
+				}
+			},
+
+			parts: {
+				image: 'img',
+				caption: 'figcaption'
+				// parts#link defined in widget#init
+			},
+
+			// The name of this widget's dialog.
+			dialog: 'image2',
+
+			// Template of the widget: plain image.
+			template: template,
+
+			data: function() {
+				var features = this.features;
+
+				// Image can't be captioned when figcaption is disallowed (#11004).
+				if ( this.data.hasCaption && !editor.filter.checkFeature( features.caption ) )
+					this.data.hasCaption = false;
+
+				// Image can't be aligned when floating is disallowed (#11004).
+				if ( this.data.align != 'none' && !editor.filter.checkFeature( features.align ) )
+					this.data.align = 'none';
+
+				// Convert the internal form of the widget from the old state to the new one.
+				this.shiftState( {
+					widget: this,
+					element: this.element,
+					oldData: this.oldData,
+					newData: this.data,
+					deflate: deflate,
+					inflate: inflate
+				} );
+
+				// Update widget.parts.link since it will not auto-update unless widget
+				// is destroyed and re-inited.
+				if ( !this.data.link ) {
+					if ( this.parts.link )
+						delete this.parts.link;
+				} else {
+					if ( !this.parts.link )
+						this.parts.link = this.parts.image.getParent();
+				}
+
+				this.parts.image.setAttributes( {
+					src: this.data.src,
+
+					// This internal is required by the editor.
+					'data-cke-saved-src': this.data.src,
+
+					alt: this.data.alt
+				} );
+
+				// If shifting non-captioned -> captioned, remove classes
+				// related to styles from <img/>.
+				if ( this.oldData && !this.oldData.hasCaption && this.data.hasCaption ) {
+					for ( var c in this.data.classes )
+						this.parts.image.removeClass( c );
+				}
+
+				// Set dimensions of the image according to gathered data.
+				// Do it only when the attributes are allowed (#11004).
+				if ( editor.filter.checkFeature( features.dimension ) )
+					setDimensions( this );
+
+				// Cache current data.
+				this.oldData = CKEDITOR.tools.extend( {}, this.data );
+			},
+
+			init: function() {
+				var helpers = CKEDITOR.plugins.image2,
+					image = this.parts.image,
+					data = {
+						hasCaption: !!this.parts.caption,
+						src: image.getAttribute( 'src' ),
+						alt: image.getAttribute( 'alt' ) || '',
+						width: image.getAttribute( 'width' ) || '',
+						height: image.getAttribute( 'height' ) || '',
+
+						// Lock ratio is on by default (#10833).
+						lock: this.ready ? helpers.checkHasNaturalRatio( image ) : true
+					};
+
+				// If we used 'a' in widget#parts definition, it could happen that
+				// selected element is a child of widget.parts#caption. Since there's no clever
+				// way to solve it with CSS selectors, it's done like that. (#11783).
+				var link = image.getAscendant( 'a' );
+
+				if ( link && this.wrapper.contains( link ) )
+					this.parts.link = link;
+
+				// Depending on configuration, read style/class from element and
+				// then remove it. Removed style/class will be set on wrapper in #data listener.
+				// Note: Center alignment is detected during upcast, so only left/right cases
+				// are checked below.
+				if ( !data.align ) {
+					var alignElement = data.hasCaption ? this.element : image;
+
+					// Read the initial left/right alignment from the class set on element.
+					if ( alignClasses ) {
+						if ( alignElement.hasClass( alignClasses[ 0 ] ) ) {
+							data.align = 'left';
+						} else if ( alignElement.hasClass( alignClasses[ 2 ] ) ) {
+							data.align = 'right';
+						}
+
+						if ( data.align ) {
+							alignElement.removeClass( alignClasses[ alignmentsObj[ data.align ] ] );
+						} else {
+							data.align = 'none';
+						}
+					}
+					// Read initial float style from figure/image and then remove it.
+					else {
+						data.align = alignElement.getStyle( 'float' ) || 'none';
+						alignElement.removeStyle( 'float' );
+					}
+				}
+
+				// Update data.link object with attributes if the link has been discovered.
+				if ( editor.plugins.link && this.parts.link ) {
+					data.link = helpers.getLinkAttributesParser()( editor, this.parts.link );
+
+					// Get rid of cke_widget_* classes in data. Otherwise
+					// they might appear in link dialog.
+					var advanced = data.link.advanced;
+					if ( advanced && advanced.advCSSClasses ) {
+						advanced.advCSSClasses = CKEDITOR.tools.trim( advanced.advCSSClasses.replace( /cke_\S+/, '' ) );
+					}
+				}
+
+				// Get rid of extra vertical space when there's no caption.
+				// It will improve the look of the resizer.
+				this.wrapper[ ( data.hasCaption ? 'remove' : 'add' ) + 'Class' ]( 'cke_image_nocaption' );
+
+				this.setData( data );
+
+				// Setup dynamic image resizing with mouse.
+				// Don't initialize resizer when dimensions are disallowed (#11004).
+				if ( editor.filter.checkFeature( this.features.dimension ) && editor.config.image2_disableResizer !== true )
+					setupResizer( this );
+
+				this.shiftState = helpers.stateShifter( this.editor );
+
+				// Add widget editing option to its context menu.
+				this.on( 'contextMenu', function( evt ) {
+					evt.data.image = CKEDITOR.TRISTATE_OFF;
+
+					// Integrate context menu items for link.
+					// Note that widget may be wrapped in a link, which
+					// does not belong to that widget (#11814).
+					if ( this.parts.link || this.wrapper.getAscendant( 'a' ) )
+						evt.data.link = evt.data.unlink = CKEDITOR.TRISTATE_OFF;
+				} );
+
+				// Pass the reference to this widget to the dialog.
+				this.on( 'dialog', function( evt ) {
+					evt.data.widget = this;
+				}, this );
+			},
+
+			// Overrides default method to handle internal mutability of Image2.
+			// @see CKEDITOR.plugins.widget#addClass
+			addClass: function( className ) {
+				getStyleableElement( this ).addClass( className );
+			},
+
+			// Overrides default method to handle internal mutability of Image2.
+			// @see CKEDITOR.plugins.widget#hasClass
+			hasClass: function( className ) {
+				return getStyleableElement( this ).hasClass( className );
+			},
+
+			// Overrides default method to handle internal mutability of Image2.
+			// @see CKEDITOR.plugins.widget#removeClass
+			removeClass: function( className ) {
+				getStyleableElement( this ).removeClass( className );
+			},
+
+			// Overrides default method to handle internal mutability of Image2.
+			// @see CKEDITOR.plugins.widget#getClasses
+			getClasses: ( function() {
+				var classRegex = new RegExp( '^(' + [].concat( captionedClass, alignClasses ).join( '|' ) + ')$' );
+
+				return function() {
+					var classes = this.repository.parseElementClasses( getStyleableElement( this ).getAttribute( 'class' ) );
+
+					// Neither config.image2_captionedClass nor config.image2_alignClasses
+					// do not belong to style classes.
+					for ( var c in classes ) {
+						if ( classRegex.test( c ) )
+							delete classes[ c ];
+					}
+
+					return classes;
+				};
+			} )(),
+
+			upcast: upcastWidgetElement( editor ),
+			downcast: downcastWidgetElement( editor )
+		};
+	}
+
+	/**
+	 * A set of Enhanced Image (image2) plugin helpers.
+	 *
+	 * @class
+	 * @singleton
+	 */
+	CKEDITOR.plugins.image2 = {
+		stateShifter: function( editor ) {
+			// Tag name used for centering non-captioned widgets.
+			var doc = editor.document,
+				alignClasses = editor.config.image2_alignClasses,
+				captionedClass = editor.config.image2_captionedClass,
+				editable = editor.editable(),
+
+				// The order that stateActions get executed. It matters!
+				shiftables = [ 'hasCaption', 'align', 'link' ];
+
+			// Atomic procedures, one per state variable.
+			var stateActions = {
+				align: function( shift, oldValue, newValue ) {
+					var el = shift.element;
+
+					// Alignment changed.
+					if ( shift.changed.align ) {
+						// No caption in the new state.
+						if ( !shift.newData.hasCaption ) {
+							// Changed to "center" (non-captioned).
+							if ( newValue == 'center' ) {
+								shift.deflate();
+								shift.element = wrapInCentering( editor, el );
+							}
+
+							// Changed to "non-center" from "center" while caption removed.
+							if ( !shift.changed.hasCaption && oldValue == 'center' && newValue != 'center' ) {
+								shift.deflate();
+								shift.element = unwrapFromCentering( el );
+							}
+						}
+					}
+
+					// Alignment remains and "center" removed caption.
+					else if ( newValue == 'center' && shift.changed.hasCaption && !shift.newData.hasCaption ) {
+						shift.deflate();
+						shift.element = wrapInCentering( editor, el );
+					}
+
+					// Finally set display for figure.
+					if ( !alignClasses && el.is( 'figure' ) ) {
+						if ( newValue == 'center' )
+							el.setStyle( 'display', 'inline-block' );
+						else
+							el.removeStyle( 'display' );
+					}
+				},
+
+				hasCaption:	function( shift, oldValue, newValue ) {
+					// This action is for real state change only.
+					if ( !shift.changed.hasCaption )
+						return;
+
+					// Get <img/> or <a><img/></a> from widget. Note that widget element might itself
+					// be what we're looking for. Also element can be <p style="text-align:center"><a>...</a></p>.
+					var imageOrLink;
+					if ( shift.element.is( { img: 1, a: 1 } ) )
+						imageOrLink = shift.element;
+					else
+						imageOrLink =  shift.element.findOne( 'a,img' );
+
+					// Switching hasCaption always destroys the widget.
+					shift.deflate();
+
+					// There was no caption, but the caption is to be added.
+					if ( newValue ) {
+						// Create new <figure> from widget template.
+						var figure = CKEDITOR.dom.element.createFromHtml( templateBlock.output( {
+							captionedClass: captionedClass,
+							captionPlaceholder: editor.lang.image2.captionPlaceholder
+						} ), doc );
+
+						// Replace element with <figure>.
+						replaceSafely( figure, shift.element );
+
+						// Use old <img/> or <a><img/></a> instead of the one from the template,
+						// so we won't lose additional attributes.
+						imageOrLink.replace( figure.findOne( 'img' ) );
+
+						// Update widget's element.
+						shift.element = figure;
+					}
+
+					// The caption was present, but now it's to be removed.
+					else {
+						// Unwrap <img/> or <a><img/></a> from figure.
+						imageOrLink.replace( shift.element );
+
+						// Update widget's element.
+						shift.element = imageOrLink;
+					}
+				},
+
+				link: function( shift, oldValue, newValue ) {
+					if ( shift.changed.link ) {
+						var img = shift.element.is( 'img' ) ?
+								shift.element : shift.element.findOne( 'img' ),
+							link = shift.element.is( 'a' ) ?
+								shift.element : shift.element.findOne( 'a' ),
+							// Why deflate:
+							// If element is <img/>, it will be wrapped into <a>,
+							// which becomes a new widget.element.
+							// If element is <a><img/></a>, it will be unlinked
+							// so <img/> becomes a new widget.element.
+							needsDeflate = ( shift.element.is( 'a' ) && !newValue ) || ( shift.element.is( 'img' ) && newValue ),
+							newEl;
+
+						if ( needsDeflate )
+							shift.deflate();
+
+						// If unlinked the image, returned element is <img>.
+						if ( !newValue )
+							newEl = unwrapFromLink( link );
+						else {
+							// If linked the image, returned element is <a>.
+							if ( !oldValue )
+								newEl = wrapInLink( img, shift.newData.link );
+
+							// Set and remove all attributes associated with this state.
+							var attributes = CKEDITOR.plugins.image2.getLinkAttributesGetter()( editor, newValue );
+
+							if ( !CKEDITOR.tools.isEmpty( attributes.set ) )
+								( newEl || link ).setAttributes( attributes.set );
+
+							if ( attributes.removed.length )
+								( newEl || link ).removeAttributes( attributes.removed );
+						}
+
+						if ( needsDeflate )
+							shift.element = newEl;
+					}
+				}
+			};
+
+			function wrapInCentering( editor, element ) {
+				var attribsAndStyles = {};
+
+				if ( alignClasses )
+					attribsAndStyles.attributes = { 'class': alignClasses[ 1 ] };
+				else
+					attribsAndStyles.styles = { 'text-align': 'center' };
+
+				// There's no gentle way to center inline element with CSS, so create p/div
+				// that wraps widget contents and does the trick either with style or class.
+				var center = doc.createElement(
+					editor.activeEnterMode == CKEDITOR.ENTER_P ? 'p' : 'div', attribsAndStyles );
+
+				// Replace element with centering wrapper.
+				replaceSafely( center, element );
+				element.move( center );
+
+				return center;
+			}
+
+			function unwrapFromCentering( element ) {
+				var imageOrLink = element.findOne( 'a,img' );
+
+				imageOrLink.replace( element );
+
+				return imageOrLink;
+			}
+
+			// Wraps <img/> -> <a><img/></a>.
+			// Returns reference to <a>.
+			//
+			// @param {CKEDITOR.dom.element} img
+			// @param {Object} linkData
+			// @returns {CKEDITOR.dom.element}
+			function wrapInLink( img, linkData ) {
+				var link = doc.createElement( 'a', {
+					attributes: {
+						href: linkData.url
+					}
+				} );
+
+				link.replace( img );
+				img.move( link );
+
+				return link;
+			}
+
+			// De-wraps <a><img/></a> -> <img/>.
+			// Returns the reference to <img/>
+			//
+			// @param {CKEDITOR.dom.element} link
+			// @returns {CKEDITOR.dom.element}
+			function unwrapFromLink( link ) {
+				var img = link.findOne( 'img' );
+
+				img.replace( link );
+
+				return img;
+			}
+
+			function replaceSafely( replacing, replaced ) {
+				if ( replaced.getParent() ) {
+					var range = editor.createRange();
+
+					range.moveToPosition( replaced, CKEDITOR.POSITION_BEFORE_START );
+
+					// Remove old element. Do it before insertion to avoid a case when
+					// element is moved from 'replaced' element before it, what creates
+					// a tricky case which insertElementIntorRange does not handle.
+					replaced.remove();
+
+					editable.insertElementIntoRange( replacing, range );
+				}
+				else {
+					replacing.replace( replaced );
+				}
+			}
+
+			return function( shift ) {
+				var name, i;
+
+				shift.changed = {};
+
+				for ( i = 0; i < shiftables.length; i++ ) {
+					name = shiftables[ i ];
+
+					shift.changed[ name ] = shift.oldData ?
+						shift.oldData[ name ] !== shift.newData[ name ] : false;
+				}
+
+				// Iterate over possible state variables.
+				for ( i = 0; i < shiftables.length; i++ ) {
+					name = shiftables[ i ];
+
+					stateActions[ name ]( shift,
+						shift.oldData ? shift.oldData[ name ] : null,
+						shift.newData[ name ] );
+				}
+
+				shift.inflate();
+			};
+		},
+
+		/**
+		 * Checks whether the current image ratio matches the natural one
+		 * by comparing dimensions.
+		 *
+		 * @param {CKEDITOR.dom.element} image
+		 * @returns {Boolean}
+		 */
+		checkHasNaturalRatio: function( image ) {
+			var $ = image.$,
+				natural = this.getNatural( image );
+
+			// The reason for two alternative comparisons is that the rounding can come from
+			// both dimensions, e.g. there are two cases:
+			// 	1. height is computed as a rounded relation of the real height and the value of width,
+			//	2. width is computed as a rounded relation of the real width and the value of heigh.
+			return Math.round( $.clientWidth / natural.width * natural.height ) == $.clientHeight ||
+				Math.round( $.clientHeight / natural.height * natural.width ) == $.clientWidth;
+		},
+
+		/**
+		 * Returns natural dimensions of the image. For modern browsers
+		 * it uses natural(Width|Height). For old ones (IE8) it creates
+		 * a new image and reads the dimensions.
+		 *
+		 * @param {CKEDITOR.dom.element} image
+		 * @returns {Object}
+		 */
+		getNatural: function( image ) {
+			var dimensions;
+
+			if ( image.$.naturalWidth ) {
+				dimensions = {
+					width: image.$.naturalWidth,
+					height: image.$.naturalHeight
+				};
+			} else {
+				var img = new Image();
+				img.src = image.getAttribute( 'src' );
+
+				dimensions = {
+					width: img.width,
+					height: img.height
+				};
+			}
+
+			return dimensions;
+		},
+
+		/**
+		 * Returns an attribute getter function. Default getter comes from the Link plugin
+		 * and is documented by {@link CKEDITOR.plugins.link#getLinkAttributes}.
+		 *
+		 * **Note:** It is possible to override this method and use a custom getter e.g.
+		 * in the absence of the Link plugin.
+		 *
+		 * **Note:** If a custom getter is used, a data model format it produces
+		 * must be compatible with {@link CKEDITOR.plugins.link#getLinkAttributes}.
+		 *
+		 * **Note:** A custom getter must understand the data model format produced by
+		 * {@link #getLinkAttributesParser} to work correctly.
+		 *
+		 * @returns {Function} A function that gets (composes) link attributes.
+		 * @since 4.5.5
+		 */
+		getLinkAttributesGetter: function() {
+			// #13885
+			return CKEDITOR.plugins.link.getLinkAttributes;
+		},
+
+		/**
+		 * Returns an attribute parser function. Default parser comes from the Link plugin
+		 * and is documented by {@link CKEDITOR.plugins.link#parseLinkAttributes}.
+		 *
+		 * **Note:** It is possible to override this method and use a custom parser e.g.
+		 * in the absence of the Link plugin.
+		 *
+		 * **Note:** If a custom parser is used, a data model format produced by the parser
+		 * must be compatible with {@link #getLinkAttributesGetter}.
+		 *
+		 * **Note:** If a custom parser is used, it should be compatible with the
+		 * {@link CKEDITOR.plugins.link#parseLinkAttributes} data model format. Otherwise the
+		 * Link plugin dialog may not be populated correctly with parsed data. However
+		 * as long as Enhanced Image is **not** used with the Link plugin dialog, any custom data model
+		 * will work, being stored as an internal property of Enhanced Image widget's data only.
+		 *
+		 * @returns {Function} A function that parses attributes.
+		 * @since 4.5.5
+		 */
+		getLinkAttributesParser: function() {
+			// #13885
+			return CKEDITOR.plugins.link.parseLinkAttributes;
+		}
+	};
+
+	function setWrapperAlign( widget, alignClasses ) {
+		var wrapper = widget.wrapper,
+			align = widget.data.align,
+			hasCaption = widget.data.hasCaption;
+
+		if ( alignClasses ) {
+			// Remove all align classes first.
+			for ( var i = 3; i--; )
+				wrapper.removeClass( alignClasses[ i ] );
+
+			if ( align == 'center' ) {
+				// Avoid touching non-captioned, centered widgets because
+				// they have the class set on the element instead of wrapper:
+				//
+				// 	<div class="cke_widget_wrapper">
+				// 		<p class="center-class">
+				// 			<img />
+				// 		</p>
+				// 	</div>
+				if ( hasCaption ) {
+					wrapper.addClass( alignClasses[ 1 ] );
+				}
+			} else if ( align != 'none' ) {
+				wrapper.addClass( alignClasses[ alignmentsObj[ align ] ] );
+			}
+		} else {
+			if ( align == 'center' ) {
+				if ( hasCaption )
+					wrapper.setStyle( 'text-align', 'center' );
+				else
+					wrapper.removeStyle( 'text-align' );
+
+				wrapper.removeStyle( 'float' );
+			}
+			else {
+				if ( align == 'none' )
+					wrapper.removeStyle( 'float' );
+				else
+					wrapper.setStyle( 'float', align );
+
+				wrapper.removeStyle( 'text-align' );
+			}
+		}
+	}
+
+	// Returns a function that creates widgets from all <img> and
+	// <figure class="{config.image2_captionedClass}"> elements.
+	//
+	// @param {CKEDITOR.editor} editor
+	// @returns {Function}
+	function upcastWidgetElement( editor ) {
+		var isCenterWrapper = centerWrapperChecker( editor ),
+			captionedClass = editor.config.image2_captionedClass;
+
+		// @param {CKEDITOR.htmlParser.element} el
+		// @param {Object} data
+		return function( el, data ) {
+			var dimensions = { width: 1, height: 1 },
+				name = el.name,
+				image;
+
+			// #11110 Don't initialize on pasted fake objects.
+			if ( el.attributes[ 'data-cke-realelement' ] )
+				return;
+
+			// If a center wrapper is found, there are 3 possible cases:
+			//
+			// 1. <div style="text-align:center"><figure>...</figure></div>.
+			//    In this case centering is done with a class set on widget.wrapper.
+			//    Simply replace centering wrapper with figure (it's no longer necessary).
+			//
+			// 2. <p style="text-align:center"><img/></p>.
+			//    Nothing to do here: <p> remains for styling purposes.
+			//
+			// 3. <div style="text-align:center"><img/></div>.
+			//    Nothing to do here (2.) but that case is only possible in enterMode different
+			//    than ENTER_P.
+			if ( isCenterWrapper( el ) ) {
+				if ( name == 'div' ) {
+					var figure = el.getFirst( 'figure' );
+
+					// Case #1.
+					if ( figure ) {
+						el.replaceWith( figure );
+						el = figure;
+					}
+				}
+				// Cases #2 and #3 (handled transparently)
+
+				// If there's a centering wrapper, save it in data.
+				data.align = 'center';
+
+				// Image can be wrapped in link <a><img/></a>.
+				image = el.getFirst( 'img' ) || el.getFirst( 'a' ).getFirst( 'img' );
+			}
+
+			// No center wrapper has been found.
+			else if ( name == 'figure' && el.hasClass( captionedClass ) ) {
+				image = el.getFirst( 'img' ) || el.getFirst( 'a' ).getFirst( 'img' );
+
+				// Upcast linked image like <a><img/></a>.
+			} else if ( isLinkedOrStandaloneImage( el ) ) {
+				image = el.name == 'a' ? el.children[ 0 ] : el;
+			}
+
+			if ( !image )
+				return;
+
+			// If there's an image, then cool, we got a widget.
+			// Now just remove dimension attributes expressed with %.
+			for ( var d in dimensions ) {
+				var dimension = image.attributes[ d ];
+
+				if ( dimension && dimension.match( regexPercent ) )
+					delete image.attributes[ d ];
+			}
+
+			return el;
+		};
+	}
+
+	// Returns a function which transforms the widget to the external format
+	// according to the current configuration.
+	//
+	// @param {CKEDITOR.editor}
+	function downcastWidgetElement( editor ) {
+		var alignClasses = editor.config.image2_alignClasses;
+
+		// @param {CKEDITOR.htmlParser.element} el
+		return function( el ) {
+			// In case of <a><img/></a>, <img/> is the element to hold
+			// inline styles or classes (image2_alignClasses).
+			var attrsHolder = el.name == 'a' ? el.getFirst() : el,
+				attrs = attrsHolder.attributes,
+				align = this.data.align;
+
+			// De-wrap the image from resize handle wrapper.
+			// Only block widgets have one.
+			if ( !this.inline ) {
+				var resizeWrapper = el.getFirst( 'span' );
+
+				if ( resizeWrapper )
+					resizeWrapper.replaceWith( resizeWrapper.getFirst( { img: 1, a: 1 } ) );
+			}
+
+			if ( align && align != 'none' ) {
+				var styles = CKEDITOR.tools.parseCssText( attrs.style || '' );
+
+				// When the widget is captioned (<figure>) and internally centering is done
+				// with widget's wrapper style/class, in the external data representation,
+				// <figure> must be wrapped with an element holding an style/class:
+				//
+				// 	<div style="text-align:center">
+				// 		<figure class="image" style="display:inline-block">...</figure>
+				// 	</div>
+				// or
+				// 	<div class="some-center-class">
+				// 		<figure class="image">...</figure>
+				// 	</div>
+				//
+				if ( align == 'center' && el.name == 'figure' ) {
+					el = el.wrapWith( new CKEDITOR.htmlParser.element( 'div',
+						alignClasses ? { 'class': alignClasses[ 1 ] } : { style: 'text-align:center' } ) );
+				}
+
+				// If left/right, add float style to the downcasted element.
+				else if ( align in { left: 1, right: 1 } ) {
+					if ( alignClasses )
+						attrsHolder.addClass( alignClasses[ alignmentsObj[ align ] ] );
+					else
+						styles[ 'float' ] = align;
+				}
+
+				// Update element styles.
+				if ( !alignClasses && !CKEDITOR.tools.isEmpty( styles ) )
+					attrs.style = CKEDITOR.tools.writeCssText( styles );
+			}
+
+			return el;
+		};
+	}
+
+	// Returns a function that checks if an element is a centering wrapper.
+	//
+	// @param {CKEDITOR.editor} editor
+	// @returns {Function}
+	function centerWrapperChecker( editor ) {
+		var captionedClass = editor.config.image2_captionedClass,
+			alignClasses = editor.config.image2_alignClasses,
+			validChildren = { figure: 1, a: 1, img: 1 };
+
+		return function( el ) {
+			// Wrapper must be either <div> or <p>.
+			if ( !( el.name in { div: 1, p: 1 } ) )
+				return false;
+
+			var children = el.children;
+
+			// Centering wrapper can have only one child.
+			if ( children.length !== 1 )
+				return false;
+
+			var child = children[ 0 ];
+
+			// Only <figure> or <img /> can be first (only) child of centering wrapper,
+			// regardless of its type.
+			if ( !( child.name in validChildren ) )
+				return false;
+
+			// If centering wrapper is <p>, only <img /> can be the child.
+			//   <p style="text-align:center"><img /></p>
+			if ( el.name == 'p' ) {
+				if ( !isLinkedOrStandaloneImage( child ) )
+					return false;
+			}
+			// Centering <div> can hold <img/> or <figure>, depending on enterMode.
+			else {
+				// If a <figure> is the first (only) child, it must have a class.
+				//   <div style="text-align:center"><figure>...</figure><div>
+				if ( child.name == 'figure' ) {
+					if ( !child.hasClass( captionedClass ) )
+						return false;
+				} else {
+					// Centering <div> can hold <img/> or <a><img/></a> only when enterMode
+					// is ENTER_(BR|DIV).
+					//   <div style="text-align:center"><img /></div>
+					//   <div style="text-align:center"><a><img /></a></div>
+					if ( editor.enterMode == CKEDITOR.ENTER_P )
+						return false;
+
+					// Regardless of enterMode, a child which is not <figure> must be
+					// either <img/> or <a><img/></a>.
+					if ( !isLinkedOrStandaloneImage( child ) )
+						return false;
+				}
+			}
+
+			// Centering wrapper got to be... centering. If image2_alignClasses are defined,
+			// check for centering class. Otherwise, check the style.
+			if ( alignClasses ? el.hasClass( alignClasses[ 1 ] ) :
+					CKEDITOR.tools.parseCssText( el.attributes.style || '', true )[ 'text-align' ] == 'center' )
+				return true;
+
+			return false;
+		};
+	}
+
+	// Checks whether element is <img/> or <a><img/></a>.
+	//
+	// @param {CKEDITOR.htmlParser.element}
+	function isLinkedOrStandaloneImage( el ) {
+		if ( el.name == 'img' )
+			return true;
+		else if ( el.name == 'a' )
+			return el.children.length == 1 && el.getFirst( 'img' );
+
+		return false;
+	}
+
+	// Sets width and height of the widget image according to current widget data.
+	//
+	// @param {CKEDITOR.plugins.widget} widget
+	function setDimensions( widget ) {
+		var data = widget.data,
+			dimensions = { width: data.width, height: data.height },
+			image = widget.parts.image;
+
+		for ( var d in dimensions ) {
+			if ( dimensions[ d ] )
+				image.setAttribute( d, dimensions[ d ] );
+			else
+				image.removeAttribute( d );
+		}
+	}
+
+	// Defines all features related to drag-driven image resizing.
+	//
+	// @param {CKEDITOR.plugins.widget} widget
+	function setupResizer( widget ) {
+		var editor = widget.editor,
+			editable = editor.editable(),
+			doc = editor.document,
+
+			// Store the resizer in a widget for testing (#11004).
+			resizer = widget.resizer = doc.createElement( 'span' );
+
+		resizer.addClass( 'cke_image_resizer' );
+		resizer.setAttribute( 'title', editor.lang.image2.resizer );
+		resizer.append( new CKEDITOR.dom.text( '\u200b', doc ) );
+
+		// Inline widgets don't need a resizer wrapper as an image spans the entire widget.
+		if ( !widget.inline ) {
+			var imageOrLink = widget.parts.link || widget.parts.image,
+				oldResizeWrapper = imageOrLink.getParent(),
+				resizeWrapper = doc.createElement( 'span' );
+
+			resizeWrapper.addClass( 'cke_image_resizer_wrapper' );
+			resizeWrapper.append( imageOrLink );
+			resizeWrapper.append( resizer );
+			widget.element.append( resizeWrapper, true );
+
+			// Remove the old wrapper which could came from e.g. pasted HTML
+			// and which could be corrupted (e.g. resizer span has been lost).
+			if ( oldResizeWrapper.is( 'span' ) )
+				oldResizeWrapper.remove();
+		} else {
+			widget.wrapper.append( resizer );
+		}
+
+		// Calculate values of size variables and mouse offsets.
+		resizer.on( 'mousedown', function( evt ) {
+			var image = widget.parts.image,
+
+				// "factor" can be either 1 or -1. I.e.: For right-aligned images, we need to
+				// subtract the difference to get proper width, etc. Without "factor",
+				// resizer starts working the opposite way.
+				factor = widget.data.align == 'right' ? -1 : 1,
+
+				// The x-coordinate of the mouse relative to the screen
+				// when button gets pressed.
+				startX = evt.data.$.screenX,
+				startY = evt.data.$.screenY,
+
+				// The initial dimensions and aspect ratio of the image.
+				startWidth = image.$.clientWidth,
+				startHeight = image.$.clientHeight,
+				ratio = startWidth / startHeight,
+
+				listeners = [],
+
+				// A class applied to editable during resizing.
+				cursorClass = 'cke_image_s' + ( !~factor ? 'w' : 'e' ),
+
+				nativeEvt, newWidth, newHeight, updateData,
+				moveDiffX, moveDiffY, moveRatio;
+
+			// Save the undo snapshot first: before resizing.
+			editor.fire( 'saveSnapshot' );
+
+			// Mousemove listeners are removed on mouseup.
+			attachToDocuments( 'mousemove', onMouseMove, listeners );
+
+			// Clean up the mousemove listener. Update widget data if valid.
+			attachToDocuments( 'mouseup', onMouseUp, listeners );
+
+			// The entire editable will have the special cursor while resizing goes on.
+			editable.addClass( cursorClass );
+
+			// This is to always keep the resizer element visible while resizing.
+			resizer.addClass( 'cke_image_resizing' );
+
+			// Attaches an event to a global document if inline editor.
+			// Additionally, if classic (`iframe`-based) editor, also attaches the same event to `iframe`'s document.
+			function attachToDocuments( name, callback, collection ) {
+				var globalDoc = CKEDITOR.document,
+					listeners = [];
+
+				if ( !doc.equals( globalDoc ) )
+					listeners.push( globalDoc.on( name, callback ) );
+
+				listeners.push( doc.on( name, callback ) );
+
+				if ( collection ) {
+					for ( var i = listeners.length; i--; )
+						collection.push( listeners.pop() );
+				}
+			}
+
+			// Calculate with first, and then adjust height, preserving ratio.
+			function adjustToX() {
+				newWidth = startWidth + factor * moveDiffX;
+				newHeight = Math.round( newWidth / ratio );
+			}
+
+			// Calculate height first, and then adjust width, preserving ratio.
+			function adjustToY() {
+				newHeight = startHeight - moveDiffY;
+				newWidth = Math.round( newHeight * ratio );
+			}
+
+			// This is how variables refer to the geometry.
+			// Note: x corresponds to moveOffset, this is the position of mouse
+			// Note: o corresponds to [startX, startY].
+			//
+			// 	+--------------+--------------+
+			// 	|              |              |
+			// 	|      I       |      II      |
+			// 	|              |              |
+			// 	+------------- o -------------+ _ _ _
+			// 	|              |              |      ^
+			// 	|      VI      |     III      |      | moveDiffY
+			// 	|              |         x _ _ _ _ _ v
+			// 	+--------------+---------|----+
+			// 	               |         |
+			// 	                <------->
+			// 	                moveDiffX
+			function onMouseMove( evt ) {
+				nativeEvt = evt.data.$;
+
+				// This is how far the mouse is from the point the button was pressed.
+				moveDiffX = nativeEvt.screenX - startX;
+				moveDiffY = startY - nativeEvt.screenY;
+
+				// This is the aspect ratio of the move difference.
+				moveRatio = Math.abs( moveDiffX / moveDiffY );
+
+				// Left, center or none-aligned widget.
+				if ( factor == 1 ) {
+					if ( moveDiffX <= 0 ) {
+						// Case: IV.
+						if ( moveDiffY <= 0 )
+							adjustToX();
+
+						// Case: I.
+						else {
+							if ( moveRatio >= ratio )
+								adjustToX();
+							else
+								adjustToY();
+						}
+					} else {
+						// Case: III.
+						if ( moveDiffY <= 0 ) {
+							if ( moveRatio >= ratio )
+								adjustToY();
+							else
+								adjustToX();
+						}
+
+						// Case: II.
+						else {
+							adjustToY();
+						}
+					}
+				}
+
+				// Right-aligned widget. It mirrors behaviours, so I becomes II,
+				// IV becomes III and vice-versa.
+				else {
+					if ( moveDiffX <= 0 ) {
+						// Case: IV.
+						if ( moveDiffY <= 0 ) {
+							if ( moveRatio >= ratio )
+								adjustToY();
+							else
+								adjustToX();
+						}
+
+						// Case: I.
+						else {
+							adjustToY();
+						}
+					} else {
+						// Case: III.
+						if ( moveDiffY <= 0 )
+							adjustToX();
+
+						// Case: II.
+						else {
+							if ( moveRatio >= ratio ) {
+								adjustToX();
+							} else {
+								adjustToY();
+							}
+						}
+					}
+				}
+
+				// Don't update attributes if less than 10.
+				// This is to prevent images to visually disappear.
+				if ( newWidth >= 15 && newHeight >= 15 ) {
+					image.setAttributes( { width: newWidth, height: newHeight } );
+					updateData = true;
+				} else {
+					updateData = false;
+				}
+			}
+
+			function onMouseUp() {
+				var l;
+
+				while ( ( l = listeners.pop() ) )
+					l.removeListener();
+
+				// Restore default cursor by removing special class.
+				editable.removeClass( cursorClass );
+
+				// This is to bring back the regular behaviour of the resizer.
+				resizer.removeClass( 'cke_image_resizing' );
+
+				if ( updateData ) {
+					widget.setData( { width: newWidth, height: newHeight } );
+
+					// Save another undo snapshot: after resizing.
+					editor.fire( 'saveSnapshot' );
+				}
+
+				// Don't update data twice or more.
+				updateData = false;
+			}
+		} );
+
+		// Change the position of the widget resizer when data changes.
+		widget.on( 'data', function() {
+			resizer[ widget.data.align == 'right' ? 'addClass' : 'removeClass' ]( 'cke_image_resizer_left' );
+		} );
+	}
+
+	// Integrates widget alignment setting with justify
+	// plugin's commands (execution and refreshment).
+	// @param {CKEDITOR.editor} editor
+	// @param {String} value 'left', 'right', 'center' or 'block'
+	function alignCommandIntegrator( editor ) {
+		var execCallbacks = [],
+			enabled;
+
+		return function( value ) {
+			var command = editor.getCommand( 'justify' + value );
+
+			// Most likely, the justify plugin isn't loaded.
+			if ( !command )
+				return;
+
+			// This command will be manually refreshed along with
+			// other commands after exec.
+			execCallbacks.push( function() {
+				command.refresh( editor, editor.elementPath() );
+			} );
+
+			if ( value in { right: 1, left: 1, center: 1 } ) {
+				command.on( 'exec', function( evt ) {
+					var widget = getFocusedWidget( editor );
+
+					if ( widget ) {
+						widget.setData( 'align', value );
+
+						// Once the widget changed its align, all the align commands
+						// must be refreshed: the event is to be cancelled.
+						for ( var i = execCallbacks.length; i--; )
+							execCallbacks[ i ]();
+
+						evt.cancel();
+					}
+				} );
+			}
+
+			command.on( 'refresh', function( evt ) {
+				var widget = getFocusedWidget( editor ),
+					allowed = { right: 1, left: 1, center: 1 };
+
+				if ( !widget )
+					return;
+
+				// Cache "enabled" on first use. This is because filter#checkFeature may
+				// not be available during plugin's afterInit in the future — a moment when
+				// alignCommandIntegrator is called.
+				if ( enabled === undefined )
+					enabled = editor.filter.checkFeature( editor.widgets.registered.image.features.align );
+
+				// Don't allow justify commands when widget alignment is disabled (#11004).
+				if ( !enabled )
+					this.setState( CKEDITOR.TRISTATE_DISABLED );
+				else {
+					this.setState(
+						( widget.data.align == value ) ? (
+							CKEDITOR.TRISTATE_ON
+						) : (
+							( value in allowed ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
+						)
+					);
+				}
+
+				evt.cancel();
+			} );
+		};
+	}
+
+	function linkCommandIntegrator( editor ) {
+		// Nothing to integrate with if link is not loaded.
+		if ( !editor.plugins.link )
+			return;
+
+		CKEDITOR.on( 'dialogDefinition', function( evt ) {
+			var dialog = evt.data;
+
+			if ( dialog.name == 'link' ) {
+				var def = dialog.definition;
+
+				var onShow = def.onShow,
+					onOk = def.onOk;
+
+				def.onShow = function() {
+					var widget = getFocusedWidget( editor );
+
+					// Widget cannot be enclosed in a link, i.e.
+					//		<a>foo<inline widget/>bar</a>
+					if ( widget && ( widget.inline ? !widget.wrapper.getAscendant( 'a' ) : 1 ) )
+						this.setupContent( widget.data.link || {} );
+					else
+						onShow.apply( this, arguments );
+				};
+
+				// Set widget data if linking the widget using
+				// link dialog (instead of default action).
+				// State shifter handles data change and takes
+				// care of internal DOM structure of linked widget.
+				def.onOk = function() {
+					var widget = getFocusedWidget( editor );
+
+					// Widget cannot be enclosed in a link, i.e.
+					//		<a>foo<inline widget/>bar</a>
+					if ( widget && ( widget.inline ? !widget.wrapper.getAscendant( 'a' ) : 1 ) ) {
+						var data = {};
+
+						// Collect data from fields.
+						this.commitContent( data );
+
+						// Set collected data to widget.
+						widget.setData( 'link', data );
+					} else {
+						onOk.apply( this, arguments );
+					}
+				};
+			}
+		} );
+
+		// Overwrite default behaviour of unlink command.
+		editor.getCommand( 'unlink' ).on( 'exec', function( evt ) {
+			var widget = getFocusedWidget( editor );
+
+			// Override unlink only when link truly belongs to the widget.
+			// If wrapped inline widget in a link, let default unlink work (#11814).
+			if ( !widget || !widget.parts.link )
+				return;
+
+			widget.setData( 'link', null );
+
+			// Selection (which is fake) may not change if unlinked image in focused widget,
+			// i.e. if captioned image. Let's refresh command state manually here.
+			this.refresh( editor, editor.elementPath() );
+
+			evt.cancel();
+		} );
+
+		// Overwrite default refresh of unlink command.
+		editor.getCommand( 'unlink' ).on( 'refresh', function( evt ) {
+			var widget = getFocusedWidget( editor );
+
+			if ( !widget )
+				return;
+
+			// Note that widget may be wrapped in a link, which
+			// does not belong to that widget (#11814).
+			this.setState( widget.data.link || widget.wrapper.getAscendant( 'a' ) ?
+				CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
+
+			evt.cancel();
+		} );
+	}
+
+	// Returns the focused widget, if of the type specific for this plugin.
+	// If no widget is focused, `null` is returned.
+	//
+	// @param {CKEDITOR.editor}
+	// @returns {CKEDITOR.plugins.widget}
+	function getFocusedWidget( editor ) {
+		var widget = editor.widgets.focused;
+
+		if ( widget && widget.name == 'image' )
+			return widget;
+
+		return null;
+	}
+
+	// Returns a set of widget allowedContent rules, depending
+	// on configurations like config#image2_alignClasses or
+	// config#image2_captionedClass.
+	//
+	// @param {CKEDITOR.editor}
+	// @returns {Object}
+	function getWidgetAllowedContent( editor ) {
+		var alignClasses = editor.config.image2_alignClasses,
+			rules = {
+				// Widget may need <div> or <p> centering wrapper.
+				div: {
+					match: centerWrapperChecker( editor )
+				},
+				p: {
+					match: centerWrapperChecker( editor )
+				},
+				img: {
+					attributes: '!src,alt,width,height'
+				},
+				figure: {
+					classes: '!' + editor.config.image2_captionedClass
+				},
+				figcaption: true
+			};
+
+		if ( alignClasses ) {
+			// Centering class from the config.
+			rules.div.classes = alignClasses[ 1 ];
+			rules.p.classes = rules.div.classes;
+
+			// Left/right classes from the config.
+			rules.img.classes = alignClasses[ 0 ] + ',' + alignClasses[ 2 ];
+			rules.figure.classes += ',' + rules.img.classes;
+		} else {
+			// Centering with text-align.
+			rules.div.styles = 'text-align';
+			rules.p.styles = 'text-align';
+
+			rules.img.styles = 'float';
+			rules.figure.styles = 'float,display';
+		}
+
+		return rules;
+	}
+
+	// Returns a set of widget feature rules, depending
+	// on editor configuration. Note that the following may not cover
+	// all the possible cases since requiredContent supports a single
+	// tag only.
+	//
+	// @param {CKEDITOR.editor}
+	// @returns {Object}
+	function getWidgetFeatures( editor ) {
+		var alignClasses = editor.config.image2_alignClasses,
+			features = {
+				dimension: {
+					requiredContent: 'img[width,height]'
+				},
+				align: {
+					requiredContent: 'img' +
+						( alignClasses ? '(' + alignClasses[ 0 ] + ')' : '{float}' )
+				},
+				caption: {
+					requiredContent: 'figcaption'
+				}
+			};
+
+		return features;
+	}
+
+	// Returns element which is styled, considering current
+	// state of the widget.
+	//
+	// @see CKEDITOR.plugins.widget#applyStyle
+	// @param {CKEDITOR.plugins.widget} widget
+	// @returns {CKEDITOR.dom.element}
+	function getStyleableElement( widget ) {
+		return widget.data.hasCaption ? widget.element : widget.parts.image;
+	}
+} )();
+
+/**
+ * A CSS class applied to the `<figure>` element of a captioned image.
+ *
+ * Read more in the [documentation](#!/guide/dev_captionedimage) and see the
+ * [SDK sample](http://sdk.ckeditor.com/samples/captionedimage.html).
+ *
+ *		// Changes the class to "captionedImage".
+ *		config.image2_captionedClass = 'captionedImage';
+ *
+ * @cfg {String} [image2_captionedClass='image']
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.image2_captionedClass = 'image';
+
+/**
+ * Determines whether dimension inputs should be automatically filled when the image URL changes in the Enhanced Image
+ * plugin dialog window.
+ *
+ * Read more in the [documentation](#!/guide/dev_captionedimage) and see the
+ * [SDK sample](http://sdk.ckeditor.com/samples/captionedimage.html).
+ *
+ *		config.image2_prefillDimensions = false;
+ *
+ * @since 4.5
+ * @cfg {Boolean} [image2_prefillDimensions=true]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Disables the image resizer. By default the resizer is enabled.
+ *
+ * Read more in the [documentation](#!/guide/dev_captionedimage) and see the
+ * [SDK sample](http://sdk.ckeditor.com/samples/captionedimage.html).
+ *
+ *		config.image2_disableResizer = true;
+ *
+ * @since 4.5
+ * @cfg {Boolean} [image2_disableResizer=false]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * CSS classes applied to aligned images. Useful to take control over the way
+ * the images are aligned, i.e. to customize output HTML and integrate external stylesheets.
+ *
+ * Classes should be defined in an array of three elements, containing left, center, and right
+ * alignment classes, respectively. For example:
+ *
+ *		config.image2_alignClasses = [ 'align-left', 'align-center', 'align-right' ];
+ *
+ * **Note**: Once this configuration option is set, the plugin will no longer produce inline
+ * styles for alignment. It means that e.g. the following HTML will be produced:
+ *
+ *		<img alt="My image" class="custom-center-class" src="foo.png" />
+ *
+ * instead of:
+ *
+ *		<img alt="My image" style="float:left" src="foo.png" />
+ *
+ * **Note**: Once this configuration option is set, corresponding style definitions
+ * must be supplied to the editor:
+ *
+ * * For [classic editor](#!/guide/dev_framed) it can be done by defining additional
+ * styles in the {@link CKEDITOR.config#contentsCss stylesheets loaded by the editor}. The same
+ * styles must be provided on the target page where the content will be loaded.
+ * * For [inline editor](#!/guide/dev_inline) the styles can be defined directly
+ * with `<style> ... <style>` or `<link href="..." rel="stylesheet">`, i.e. within the `<head>`
+ * of the page.
+ *
+ * For example, considering the following configuration:
+ *
+ *		config.image2_alignClasses = [ 'align-left', 'align-center', 'align-right' ];
+ *
+ * CSS rules can be defined as follows:
+ *
+ *		.align-left {
+ *			float: left;
+ *		}
+ *
+ *		.align-right {
+ *			float: right;
+ *		}
+ *
+ *		.align-center {
+ *			text-align: center;
+ *		}
+ *
+ *		.align-center > figure {
+ *			display: inline-block;
+ *		}
+ *
+ * Read more in the [documentation](#!/guide/dev_captionedimage) and see the
+ * [SDK sample](http://sdk.ckeditor.com/samples/captionedimage.html).
+ *
+ * @since 4.4
+ * @cfg {String[]} [image2_alignClasses=null]
+ * @member CKEDITOR.config
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/README.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/README.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/README.md	(revision 2)
@@ -0,0 +1,47 @@
+CKEditor Imageresponsive Plugin
+==========
+
+Copyright (c) 2003-2014, Clemens Krack All rights reserved.
+See http://ckeditor.com/license for license information.
+
+This is a further enhancement to the image2 plugin (enhanced image) by CKSource.
+It includes support for the responsive images attributes `srcset` and `sizes`.
+Two textfields are added to the dialog window, and it is possible to integrate with your custom fileuploader.
+
+## Installation
+
+ 1. Download the package.
+ 2. Extract files and save them in ckeditor/plugins/imageresponsive directory.
+ 3. Enable the plugin:
+    `config.extraPlugins = 'imageresponsive';`
+
+**Dependencies:** Requires the following plugins to work: Image2, Widget, Line Utilities, Dialog, Clipboard.
+
+## How to use
+
+Either simply let users set the sizes and srcset attributes by hand, or integrate it with your own filebrowser/quickupload plugin.
+
+## Integrating with your own filebrowser
+
+You can integrate this plugin further, when using a custom quickupload / filebrowser plugin for CKEditor.
+
+You should implement the logic to save uploaded images in different sizes in your connector.
+These can either be static sizes or just percentages based on the width of the uploaded image.
+When using static sizes, you should check for the original dimensions and only use sizes lower than that.
+
+When putting the callback to CKEditor into your custom filebrowser, you can pass in a complete srcset.
+This is done via the third parameter, which is executed in the scope of the dialog, if it is a function.
+
+    window.parent.CKEDITOR.tools.callFunction(callback, "/images/upload.jpg", function() {
+        // Get the reference to a dialog window.
+        var element,
+            dialog = this.getDialog();
+        // Check if this is the Image dialog window.
+        if ( dialog.getName() == 'imageresponsive' ) {
+            // Get the reference to a text field that holds the "srcset" attribute.
+            element = dialog.getContentElement( 'info', 'srcset' );
+            // Assign the new value.
+            if ( element )
+                element.setValue( 'upload-small.jpg 100w, upload-medium.jpg 500w, upload-big.jpg 1000w' );
+        }
+    });
Index: trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/de.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'imageresponsive', 'de', {
+	sizes: 'Größenabgrenzung (responsive)',
+	srcset: 'Quellenverzeichnis (responsive)',
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/lang/en.js	(revision 2)
@@ -0,0 +1,8 @@
+﻿/*
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'imageresponsive', 'en', {
+	sizes: 'Sizes (responsive)',
+	srcset: 'Sourceset (responsive)'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/imageresponsive/plugin.js	(revision 2)
@@ -0,0 +1,105 @@
+﻿/**
+ * @license Copyright (c) 2003-2014, Clemens Krack. All rights reserved.
+ * @author Clemens Krack <info@clemenskrack.com>
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+'use strict';
+
+( function() {
+    CKEDITOR.plugins.add( 'imageresponsive', {
+        lang: 'en,de',
+        requires: 'widget,dialog,image2',
+        beforeInit: function(editor) {
+            editor.on('widgetDefinition', function(e) {
+                var widget = e.data;
+                // figure out if this is the image dialog.
+                if(widget.name != 'image')
+                    return;
+
+                // should not happen but anyway...
+                if(!widget.allowedContent.img || !widget.allowedContent.img.attributes)
+                    return;
+
+                if(widget.allowedContent.img.attributes.indexOf('srcset') == -1)
+                    widget.allowedContent.img.attributes += ',srcset'
+                if(widget.allowedContent.img.attributes.indexOf('sizes') == -1)
+                    widget.allowedContent.img.attributes += ',sizes'
+            });
+        },
+        init: function(editor) {
+            // bind to widget#instanceCreated so we can see when the image widget is about to be initiated
+            editor.widgets.on('instanceCreated', function(e) {
+                var widget = e.data;
+
+                // figure out if this is the image dialog.
+                if(widget.name != 'image')
+                    return;
+
+                // register handler for data
+                widget.on('data', function(e) {
+                    widget = e.data;
+                    // keep srcset & sizes attributes only when set.
+                    if(widget.srcset)
+                        e.sender.parts.image.setAttribute('srcset', widget.srcset);
+                    else
+                        e.sender.parts.image.removeAttribute('srcset');
+
+                    if(widget.sizes)
+                        e.sender.parts.image.setAttribute('sizes', widget.sizes);
+                    else
+                        e.sender.parts.image.removeAttribute('sizes');
+                });
+
+                // set data from existing variables.
+                var image = widget.element;
+
+                // since the img-tag can be wrapped with a caption, make sure we use the right element.
+                if(image.getName() != 'img')
+                    image = image.findOne('img');
+
+                var data = {
+                    srcset: image.getAttribute( 'srcset' ) || '',
+                    sizes: image.getAttribute( 'sizes' ) || ''
+                };
+                widget.setData(data);
+            });
+
+            CKEDITOR.on('dialogDefinition', function(e) {
+                // make sure this is the right editor (there can be more on one page) and the right dialog.
+                if ((e.editor != editor) || (e.data.name != 'image2'))
+                    return;
+
+                // Get a reference to the "Link Info" tab.
+                var infoTab = e.data.definition.getContents( 'info' );
+
+                // Add text fields for srcset and sizes.
+                infoTab.add({
+                    id: 'srcset',
+                    type: 'text',
+                    requiredContent: 'img[srcset]',
+                    label: e.editor.lang.imageresponsive.srcset,
+                    setup: function(widget) {
+                        this.setValue(widget.data.srcset);
+                    },
+                    commit: function (widget) {
+                        widget.setData('srcset', this.getValue());
+                    }
+                }, 'alt');
+
+                infoTab.add({
+                    id: 'sizes',
+                    type: 'text',
+                    requiredContent: 'img[sizes]',
+                    label: e.editor.lang.imageresponsive.sizes,
+                    setup: function(widget) {
+                        this.setValue(widget.data.sizes);
+                    },
+                    commit: function (widget) {
+                        widget.setData('sizes', this.getValue());
+                    }
+                }, 'alignment');
+            });
+        }
+    });
+} )();
Index: trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/anchor.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/anchor.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/anchor.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)):
+this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c);
+if(e){this._.selectedElement=e;var f=e.data("cke-saved-name");this.setValueOf("info","txtName",f||"");!d&&a.selectElement(e);b&&(this._.selectedElement=b)}this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return this.getValue()?!0:(alert(c.lang.link.anchor.errorName),!1)}}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/link.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/link.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/link/dialogs/link.js	(revision 2)
@@ -0,0 +1,28 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){CKEDITOR.dialog.add("link",function(e){var m=CKEDITOR.plugins.link,p,q=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),n=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),n){case "frame":a.setLabel(e.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(e.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(n),a.getElement().hide()}},
+h=function(a){a.target&&this.setValue(a.target[this.id]||"")},f=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},k=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},l=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=e.lang.common,b=e.lang.link,g;return{title:b.title,minWidth:"moono-lisa"==(CKEDITOR.skinName||e.config.skin)?450:350,minHeight:240,contents:[{id:"info",label:b.info,title:b.info,elements:[{type:"text",id:"linkDisplayText",
+label:b.displayText,setup:function(){this.enable();this.setValue(e.getSelection().getSelectedText());p=this.getValue()},commit:function(a){a.linkText=this.isEnabled()?this.getValue():""}},{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"],[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],n=this.getValue(),d=a.definition.getContents("upload"),d=d&&d.hidden;"url"==n?(e.config.linkShowTargetTab&&
+a.showPage("target"),d||a.showPage("upload")):(a.hidePage("target"),d||a.hidePage("upload"));for(d=0;d<b.length;d++){var c=a.getContentElement("info",b[d]);c&&(c=c.getElement().getParent().getParent(),b[d]==n+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type||"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎",
+"http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange=!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),c=/^((javascript:)|[#\/\.\?])/i,d=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);
+d?(this.setValue(b.substr(d[0].length)),a.setValue(d[0].toLowerCase())):c.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")?!0:!e.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=
+!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button",id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){g=
+m.getEditorAnchors(e);this.getElement()[g&&g.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(g)for(var b=0;b<g.length;b++)g[b].name&&this.add(g[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});
+a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(g)for(var b=0;b<g.length;b++)g[b].id&&this.add(g[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor||(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[g&&g.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'\x3cdiv role\x3d"note" tabIndex\x3d"-1"\x3e'+
+CKEDITOR.tools.htmlEncode(b.noAnchors)+"\x3c/div\x3e",focus:!0,setup:function(){this.getElement()[g&&g.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress",label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"email"==a.getValueOf("info","linkType")?CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this):
+!0},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject,setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&
+this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target,elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,
+"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:q,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");q.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName",label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/([^\x00-\x7F]|\s)/gi,"")}}]},{type:"vbox",
+width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:h,commit:k},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:h,commit:k}]},{type:"hbox",children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:h,commit:k},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:h,commit:k}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",
+label:b.popupMenuBar,setup:h,commit:k},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:h,commit:k}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:h,commit:k},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:h,commit:k}]},{type:"hbox",children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:h,commit:k},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",
+setup:h,commit:k}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:h,commit:k},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:h,commit:k}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0,filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload",
+"upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:f,commit:l},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir,"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:f,commit:l},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,
+maxLength:1,setup:f,commit:l}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:f,commit:l},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:f,commit:l},{type:"text",label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:f,commit:l}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,
+requiredContent:"a[title]","default":"",id:"advTitle",setup:f,commit:l},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:f,commit:l}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)","default":"",id:"advCSSClasses",setup:f,commit:l},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:f,commit:l}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",
+label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:f,commit:l},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(e.lang.common.invalidInlineStyle),setup:f,commit:l}]},{type:"hbox",widths:["45%","55%"],children:[{type:"checkbox",id:"download",requiredContent:"a[download]",label:b.download,setup:function(a){void 0!==a.download&&this.setValue("checked","checked")},commit:function(a){this.getValue()&&(a.download=
+this.getValue())}}]}]}]}],onShow:function(){var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement(),d=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent(),e=null;(e=m.getSelectedLink(a))&&e.hasAttribute("href")?c||(b.selectElement(e),c=e):e=null;m.showDisplayTextForElement(c,a)?d.show():d.hide();a=m.parseLinkAttributes(a,e);this._.selectedElement=e;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=e.getSelection(),c=m.getLinkAttributes(e,
+a);if(this._.selectedElement){var d=this._.selectedElement,g=d.data("cke-saved-href"),h=d.getHtml(),f;d.setAttributes(c.set);d.removeAttributes(c.removed);if(a.linkText&&p!=a.linkText)f=a.linkText;else if(g==h||"email"==a.type&&-1!=h.indexOf("@"))f="email"==a.type?a.email.address:c.set["data-cke-saved-href"];f&&(d.setText(f),b.selectElement(d));delete this._.selectedElement}else{b=b.getRanges()[0];b.collapsed?(a=new CKEDITOR.dom.text(a.linkText||("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),
+e.document),b.insertNode(a),b.selectNodeContents(a)):p!==a.linkText&&(a=new CKEDITOR.dom.text(a.linkText,e.document),b.shrink(CKEDITOR.SHRINK_TEXT),e.editable().extractHtmlFromRange(b),b.insertNode(a));a=b._find("a");for(d=0;d<a.length;d++)a[d].remove(!0);c=new CKEDITOR.style({element:"a",attributes:c.set});c.type=CKEDITOR.STYLE_INLINE;c.applyToRange(b,e);b.select()}},onLoad:function(){e.config.linkShowAdvancedTab||this.hidePage("advanced");e.config.linkShowTargetTab||this.hidePage("target")},onFocus:function(){var a=
+this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/link/images/anchor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/link/images/anchor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/link/images/hidpi/anchor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/link/images/hidpi/anchor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/liststyle/dialogs/liststyle.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/liststyle/dialogs/liststyle.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/liststyle/dialogs/liststyle.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){a=
+a.getStyle("list-style-type")||h[a.getAttribute("type")]||a.getAttribute("type")||"";this.setValue(a)},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,
+"lower-alpha"],[b.upperAlpha,"upper-alpha"],[b.decimal,"decimal"]];(!CKEDITOR.env.ie||7<CKEDITOR.env.version)&&g.concat([[b.armenian,"armenian"],[b.decimalLeadingZero,"decimal-leading-zero"],[b.georgian,"georgian"],[b.lowerGreek,"lower-greek"]]);return{title:b.numberedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"hbox",widths:["25%","75%"],children:[{label:b.start,type:"text",id:"start",validate:CKEDITOR.dialog.validate.integer(b.validateStartNumber),setup:function(a){a=
+a.getFirst(f).getAttribute("value")||a.getAttribute("start")||1;this.setValue(a)},commit:function(a){var b=a.getFirst(f),c=b.getAttribute("value")||a.getAttribute("start")||1;a.getFirst(f).removeAttribute("value");var d=parseInt(this.getValue(),10);isNaN(d)?a.removeAttribute("start"):a.setAttribute("start",d);a=b;b=c;for(d=isNaN(d)?1:d;(a=a.getNext(f))&&b++;)a.getAttribute("value")==b&&a.setAttribute("value",d+b-c)}},{type:"select",label:b.type,id:"type",style:"width: 100%;",items:g,setup:function(a){a=
+a.getStyle("list-style-type")||h[a.getAttribute("type")]||a.getAttribute("type")||"";this.setValue(a)},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.commitContent(a)}}}}var f=function(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")},h={a:"lower-alpha",A:"upper-alpha",i:"lower-roman",
+I:"upper-roman",1:"decimal",disc:"disc",circle:"circle",square:"square"};CKEDITOR.dialog.add("numberedListStyle",function(c){return e(c,"numberedListStyle")});CKEDITOR.dialog.add("bulletedListStyle",function(c){return e(c,"bulletedListStyle")})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/hidpi/icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/hidpi/icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/icon-rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/icon-rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/magicline/images/icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/oembed/LICENSE.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/oembed/LICENSE.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/oembed/LICENSE.md	(revision 2)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Ingo Herbote
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: trunk/modules/ckeditor/ckeditor/plugins/oembed/README.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/oembed/README.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/oembed/README.md	(revision 2)
@@ -0,0 +1,201 @@
+CKEditor-oEmbed-Plugin
+======================
+
+oEmbed Plugin for CKEditor
+
+This Plugin allows to insert embedded content (such as photos, videos, audio, and other rich media) via the OEmbed API. You only have to provide the url to the site (It works also when the url is shortened) you want to embed and the plugin does the rest.
+
+This Plugin uses the jquery-oembed-all Plugin  located at https://github.com/starfishmod/jquery-oembed-all.
+
+####Demo
+
+http://w8tcha.github.com/CKEditor-oEmbed-Plugin/
+
+####Currently Supported Sites...
+
+###Video
+* Youtube - oembed - YQL
+* Blip - oEmbed
+* Hulu - oEmbed
+* Vimeo - oEmbed
+* National film board of Canada - oEmbed
+* Qik - oEmbed
+* Dotsub - oEmbed
+* Clikthrough - oEmbed
+* Kino Map - oEmbed
+* Funny Or Die - Embedded
+* College Humour - Embedded
+* Metacafe - Embedded
+* embedr - Embedded
+* 5min - oEmbed is XML only - using YQL to translate it
+* ustream.tv - oEmbed is not JSONP enabled - using YQL to translate it
+* viddler - OGP
+* twitvid - Embedded
+* bambuser - Embedded
+* xtranormal - Embedded
+* Gametrailers - Embedded
+* Vzarr - Embedded
+* VHX - oembed
+* bambuser - oembed
+* dailymotion.com - oembed
+* animoto - oembed
+* justin.tv - YQL JSON
+* livestream - OGP
+* scivee - embedded
+* veoh - embedded
+* minoto-video - oembed using YQL
+* TrailerAddict - OGP
+* vodpod - oembed YQL - broken as the oembed has absolute positioning which breaks the display
+* fora.tv -OGP YQL
+* TED - OGP YQL
+* Aniboom - embedded
+* Comedy Central - OGP
+* snotr - embedded
+* zapiks - OGP
+* youku - embedded
+* wistia - Oembed
+
+###Audio
+* Soundcloud - oEmbed
+* HuffDuffer - oEmbed
+* BandCamp - YQL and Embedded
+* podomatic - OGP
+* rdio.com - oEmbed
+* hark.com - OGP
+* chirb.it - YQL and oembed
+* official.fm - YQL and oembed
+* mixcloud - YQL and oembed
+* shoudio - oembed
+* audioboo.fm - OGP
+* Spotify - OGP YQL
+
+###Photo
+* flickr - oEmbed
+* photobucket - oEmbed
+* instagram - oEmbed
+* yfrog - oEmbed
+* 23HQ - oEmbed
+* Smugmug - oEmbed
+* twitpic - OGP YQL
+* 500px.com - OGP
+* visual.ly - YQL Lookup
+* img.ly - Thumbnail view
+* imgur.com - Thumbnail view
+* twitgoo.com - Thumbnail view
+* gravatar - Thumbnail view when using mailto
+* pintrest - YQL - Embedded view of a sort.
+* circuitlab - image view
+* skitch - YQL oembed
+* graphic.ly  - OGP
+* dribble - jsonp lookup
+* Lockerz - YQL lookup
+* AsciiArtFarts - YQL Lookup
+* lego cusoo - OGP over YQL
+* plannary - OGP over YQL
+* propic - OGP
+* avairy.com - OGP
+* lomography - ogp
+* weheartit - ogp
+* glogster - ogp
+* chart.ly - embedded
+* twitrpix - OGP
+* chictopia - OGP
+
+###Rich
+* Meetup - oEmbed
+* gigapans - Embedded
+* Slideshare - oEmbed
+* ebay - Embedded
+* scribd - Embedded
+* screenr - Embedded
+* tumblr- JSONP lookup
+* imdb - JSONP lookup via imdbapi.com
+* wikipedia- JSONP lookup
+* github- JSONP lookup (CSS)
+* eventful - OGP
+* myspace - OGP
+* live Journal - JSONP Lookup (CSS)
+* wordpress - oEmbed (wordpress.com, wp.me, blogs.cnn.com, techcrunch.com). I can add other wordpress sites as well.
+* circuitbee -Embedded
+* stack overflow - JSONP Lookup (CSS)
+* Facebook - JSONP Lookup (CSS)
+* Pastebin - Embedded
+* Pastie - YQL lookup
+* kickstarter - Embedded
+* issuu - OGP
+* reelapp.com - Embedded
+* Etsy - OGP over YQL
+* Amazon - Embedded - Requires Affiliate code
+* linkedin - Embedded IFRAME - found a link that works :)
+* Lanyrd - YQL (CSS)
+* twitter - Oembed - status only - but that is ok I think
+* github gist - oembed
+* speakerdeck - yql oembed
+* dipity - yql oembed
+* dailymile - oembed
+* deviantart - oembed
+* Roomshare Japan - oembed
+* mobypictures - oembed
+* prezi - embedded
+* popplet - embedded
+* authorstream - OGP
+* googlecalendar - Iframe
+* cacoo - oembed
+* pearltrees - embedded
+* urtak - oembed - is broken in iframe return atm -seems to be an embed.ly issue??
+* jotform - embedded
+* Urban Dictionary - YQL lookup
+* Ars Technica - YQL Lookup
+* Eventbrite - OGP YQL
+* last.fm OGP YQL
+* Rotten Tomatoes - OGP YQL
+* iFixit - OGP
+* qwiki - OGP
+* brighttalk - Meta info
+* tinychat - OGP
+* tourwrist - embedded
+* bnter - OGP
+* bigthink - OGP
+* wirewax - OGP
+* whosay - OGP
+* timetoast - embedded
+* tripline - OGP
+* jsfiddle - embedded
+
+
+####License
+
+Licensed under the terms of the MIT License.
+
+####Dependencies
+This Plugin requires the following plugins to work: Widget, Dialog.
+
+####Installation
+
+ 1. Before you can use the plugin you also need to download & install the widget plugin, if you have it not installed. http://ckeditor.com/addon/widget
+ 2. Extract the contents of the file into the "plugins" folder of CKEditor.
+ 3. In the CKEditor configuration file (config.js) add the following code:
+
+````js
+config.extraPlugins = 'oembed,widget';
+````
+
+2a. Additionally you can also set the default values vor the Max. Width/Height Values
+
+````js
+config.oembed_maxWidth = '560';
+config.oembed_maxHeight = '315';
+````
+
+and also you can define an css class for the embeded content wrapper (div), by default there is no Class defined
+
+````js
+config.oembed_WrapperClass = 'embededContent';
+````
+
+
+3. and also include the plugin in the toolbar
+
+````js
+toolbar :[ ... ['oembed']...]
+````
Index: trunk/modules/ckeditor/ckeditor/plugins/oembed/icons/hidpi/oembed.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/oembed/icons/hidpi/oembed.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/oembed/icons/oembed.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/oembed/icons/oembed.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/oembed/libs/jquery.oembed.min.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/oembed/libs/jquery.oembed.min.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/oembed/libs/jquery.oembed.min.js	(revision 2)
@@ -0,0 +1,71 @@
+﻿(function(b){function m(){return"file:"===window.location.protocol?"http://":"//"}function o(a,b){return b=b?b:"",a?o(--a,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(60*Math.random()))+b):b}function q(a,b){var h=a.apiendpoint,d="",c,h=h+(0>=h.indexOf("?")?"?":"&"),h=h.replace("#","%23");null!==a.maxWidth&&("undefined"==typeof a.params.maxwidth||null===a.params.maxwidth)&&(a.params.maxwidth=a.maxWidth);null!==a.maxHeight&&("undefined"==typeof a.params.maxheight||
+null===a.params.maxheight)&&(a.params.maxheight=a.maxHeight);for(c in a.params)c!=a.callbackparameter&&null!==a.params[c]&&(d+="&"+escape(c)+"="+a.params[c]);return h+="format="+a.format+"&url="+escape(b)+d,"json"!=a.dataType&&(h+="&"+a.callbackparameter+"=?"),h}function n(a,l,h){b("#jqoembeddata").data(l,a.code);j.beforeEmbed.call(h,a);j.onEmbed.call(h,a);j.afterEmbed.call(h,a)}function e(a,l,h){var d,c,f;if(void 0!=b("#jqoembeddata").data(l)&&"iframe"!=h.embedtag.tag)c={code:b("#jqoembeddata").data(l)},
+n(c,l,a);else if(h.yql){c=h.yql.from||"htmlstring";var g=h.yql.url?h.yql.url(l):l;f="SELECT * FROM "+c+' WHERE url="'+g+'" and '+(/html/.test(c)?"xpath":"itemPath")+"='"+(h.yql.xpath||"/")+"'";"html"==c&&(f+=" and compat='html5'");f=b.extend({url:m()+"query.yahooapis.com/v1/public/yql",dataType:"jsonp",data:{q:f,format:"json",env:"store://datatables.org/alltableswithkeys",callback:"?"},success:function(c){var d,f,e,k,j;if(h.yql.xpath&&"//meta|//title|//link"==h.yql.xpath){d={};null==c.query.results&&
+(c.query.results={meta:[]});e=0;for(k=c.query.results.meta.length;e<k;e++)(f=c.query.results.meta[e].name||c.query.results.meta[e].property||null,null!=f)&&(d[f.toLowerCase()]=c.query.results.meta[e].content);if(d.hasOwnProperty("title")&&d.hasOwnProperty("og:title")||null!=c.query.results.title&&(d.title=c.query.results.title),!d.hasOwnProperty("og:image")&&c.query.results.hasOwnProperty("link")){e=0;for(k=c.query.results.link.length;e<k;e++)c.query.results.link[e].hasOwnProperty("rel")&&"apple-touch-icon"==
+c.query.results.link[e].rel&&(d["og:image"]="/"==c.query.results.link[e].href.charAt(0)?g.match(/^(([a-z]+:)?(\/\/)?[^\/]+\/).*$/)[1]+c.query.results.link[e].href:c.query.results.link[e].href)}c=h.yql.datareturn(d)}else c=h.yql.datareturn?h.yql.datareturn(c.query.results):c.query.results.result;!1!==c&&(j=b.extend({},c),j.code=c,n(j,l,a))},error:function(){j.onError.call(a,l,h)}},j.ajaxOptions||{});b.ajax(f)}else if(h.templateRegex)if(""!==h.embedtag.tag){c=h.embedtag.flashvars||"";f=h.embedtag.tag||
+"embed";d=h.embedtag.width||"auto";var e=h.embedtag.height||"auto",p=l.replace(h.templateRegex,h.apiendpoint);if(h.nocache||(p+="&jqoemcache="+o(5)),h.apikey&&(p=p.replace("_APIKEY_",j.apikeys[h.name])),j.maxHeight&&j.maxWidth)if(j.useResponsiveResize){var r=0,s=d,t=e;d>j.maxWidth&&(r=j.maxWidth/d,s=j.maxWidth,t=e*r,e*=r,d*=r);e>j.maxHeight&&(r=j.maxHeight/e,t=j.maxHeight,s=d*r,d*=r);e=t;d=s}else e=j.maxHeight,d=j.maxWidth;d=b("<"+f+"/>").attr("src",p).attr("width",d).attr("height",e).attr("allowfullscreen",
+h.embedtag.allowfullscreen||"true").attr("allowscriptaccess",h.embedtag.allowfullscreen||"always").css("max-height",j.maxHeight||"auto").css("max-width",j.maxWidth||"auto");"embed"==f&&d.attr("type",h.embedtag.type||"application/x-shockwave-flash").attr("flashvars",l.replace(h.templateRegex,c));"iframe"==f&&d.attr("scrolling",h.embedtag.scrolling||"no").attr("frameborder",h.embedtag.frameborder||"0");c={code:d};n(c,l,a)}else h.apiendpoint?(h.apikey&&(h.apiendpoint=h.apiendpoint.replace("_APIKEY_",
+j.apikeys[h.name])),f=b.extend({url:l.replace(h.templateRegex,h.apiendpoint),dataType:"jsonp",success:function(c){var d=b.extend({},c);d.code=h.templateData(c);n(d,l,a)},error:function(){j.onError.call(a,l,h)}},j.ajaxOptions||{}),b.ajax(f)):(c={code:l.replace(h.templateRegex,h.template)},n(c,l,a));else c=q(h,l),f=b.extend({url:c,dataType:h.dataType||"jsonp",success:function(c){c=b.extend({},c);switch(c.type){case "file":case "photo":c.code=b.fn.oembed.getPhotoCode(l,c);break;case "link":c.code="Flickr"==
+c.provider_name?b.fn.oembed.getPhotoCode(l,c):b.fn.oembed.getGenericCode(l,c);break;case "video":case "rich":c.code=b.fn.oembed.getRichCode(l,c);break;default:c.code=b.fn.oembed.getGenericCode(l,c)}n(c,l,a)},error:function(){j.onError.call(a,l,h)}},j.ajaxOptions||{}),b.ajax(f)}function p(a){if(null===a)return null;var b,e={};for(b in a)null!==b&&(e[b.toLowerCase()]=a[b]);return e}b.fn.oembed=function(a,l,h){j=b.extend(!0,b.fn.oembed.defaults,l);var d="0rz.tw 1link.in 1url.com 2.gp 2big.at 2tu.us 3.ly 307.to 4ms.me 4sq.com 4url.cc 6url.com 7.ly a.gg a.nf aa.cx abcurl.net ad.vu adf.ly adjix.com afx.cc all.fuseurl.com alturl.com amzn.to ar.gy arst.ch atu.ca azc.cc b23.ru b2l.me bacn.me bcool.bz binged.it bit.ly bizj.us bloat.me bravo.ly bsa.ly budurl.com canurl.com chilp.it chzb.gr cl.lk cl.ly clck.ru cli.gs cliccami.info clickthru.ca clop.in conta.cc cort.as cot.ag crks.me ctvr.us cutt.us dai.ly decenturl.com dfl8.me digbig.com http://digg.com/[^/]+$ disq.us dld.bz dlvr.it do.my doiop.com dopen.us easyuri.com easyurl.net eepurl.com eweri.com fa.by fav.me fb.me fbshare.me ff.im fff.to fire.to firsturl.de firsturl.net flic.kr flq.us fly2.ws fon.gs freak.to fuseurl.com fuzzy.to fwd4.me fwib.net g.ro.lt gizmo.do gl.am go.9nl.com go.ign.com go.usa.gov goo.gl goshrink.com gurl.es hex.io hiderefer.com hmm.ph href.in hsblinks.com htxt.it huff.to hulu.com hurl.me hurl.ws icanhaz.com idek.net ilix.in is.gd its.my ix.lt j.mp jijr.com kl.am klck.me korta.nu krunchd.com l9k.net lat.ms liip.to liltext.com linkbee.com linkbun.ch liurl.cn ln-s.net ln-s.ru lnk.gd lnk.ms lnkd.in lnkurl.com lru.jp lt.tl lurl.no macte.ch mash.to merky.de migre.me miniurl.com minurl.fr mke.me moby.to moourl.com mrte.ch myloc.me myurl.in n.pr nbc.co nblo.gs nn.nf not.my notlong.com nsfw.in nutshellurl.com nxy.in nyti.ms o-x.fr oc1.us om.ly omf.gd omoikane.net on.cnn.com on.mktw.net onforb.es orz.se ow.ly ping.fm pli.gs pnt.me politi.co post.ly pp.gg profile.to ptiturl.com pub.vitrue.com qlnk.net qte.me qu.tc qy.fi r.ebay.com r.im rb6.me read.bi readthis.ca reallytinyurl.com redir.ec redirects.ca redirx.com retwt.me ri.ms rickroll.it riz.gd rt.nu ru.ly rubyurl.com rurl.org rww.tw s4c.in s7y.us safe.mn sameurl.com sdut.us shar.es shink.de shorl.com short.ie short.to shortlinks.co.uk shorturl.com shout.to show.my shrinkify.com shrinkr.com shrt.fr shrt.st shrten.com shrunkin.com simurl.com slate.me smallr.com smsh.me smurl.name sn.im snipr.com snipurl.com snurl.com sp2.ro spedr.com srnk.net srs.li starturl.com stks.co su.pr surl.co.uk surl.hu t.cn t.co t.lh.com ta.gd tbd.ly tcrn.ch tgr.me tgr.ph tighturl.com tiniuri.com tiny.cc tiny.ly tiny.pl tinylink.in tinyuri.ca tinyurl.com tk. tl.gd tmi.me tnij.org tnw.to tny.com to.ly togoto.us totc.us toysr.us tpm.ly tr.im tra.kz trunc.it twhub.com twirl.at twitclicks.com twitterurl.net twitterurl.org twiturl.de twurl.cc twurl.nl u.mavrev.com u.nu u76.org ub0.cc ulu.lu updating.me ur1.ca url.az url.co.uk url.ie url360.me url4.eu urlborg.com urlbrief.com urlcover.com urlcut.com urlenco.de urli.nl urls.im urlshorteningservicefortwitter.com urlx.ie urlzen.com usat.ly use.my vb.ly vevo.ly vgn.am vl.am vm.lc w55.de wapo.st wapurl.co.uk wipi.es wp.me x.vu xr.com xrl.in xrl.us xurl.es xurl.jp y.ahoo.it yatuc.com ye.pe yep.it yfrog.com yhoo.it yiyd.com youtu.be yuarel.com z0p.de zi.ma zi.mu zipmyurl.com zud.me zurl.ws zz.gd zzang.kr ›.ws ✩.ws ✿.ws ❥.ws ➔.ws ➞.ws ➡.ws ➨.ws ➯.ws ➹.ws ➽.ws".split(" ");
+return 0===b("#jqoembeddata").length&&b('<span id="jqoembeddata"></span>').appendTo("body"),this.each(function(){var c=b(this),f=a&&(!a.indexOf("http://")||!a.indexOf("https://"))?a:c.attr("href"),g,l,m,n,o;if(h?j.onEmbed=h:j.onEmbed||(j.onEmbed=function(a){b.fn.oembed.insertCode(this,j.embedMethod,a)}),null!==f&&void 0!==f){l=0;for(m=d.length;l<m;l++)if(n=RegExp("://"+d[l]+"/","i"),null!==f.match(n))return o=b.extend({url:"http://api.longurl.org/v2/expand",dataType:"jsonp",data:{url:f,format:"json"},
+success:function(a){f=a["long-url"];g=b.fn.oembed.getOEmbedProvider(a["long-url"]);null!==g?(g.params=p(j[g.name])||{},g.maxWidth=j.maxWidth,g.maxHeight=j.maxHeight,e(c,f,g)):j.onProviderNotFound.call(c,f)}},j.ajaxOptions||{}),b.ajax(o),c;g=b.fn.oembed.getOEmbedProvider(f);null!==g?(g.params=p(j[g.name])||{},g.maxWidth=j.maxWidth,g.maxHeight=j.maxHeight,e(c,f,g)):j.onProviderNotFound.call(c,f)}return c})};var j;b.fn.oembed.defaults={maxWidth:null,maxHeight:null,useResponsiveResize:!1,includeHandle:!0,
+embedMethod:"auto",onProviderNotFound:function(){},beforeEmbed:function(){},afterEmbed:function(){},onEmbed:!1,onError:function(){},ajaxOptions:{timeout:2E3}};b.fn.oembed.insertCode=function(a,l,e){if(null!==e)switch("auto"==l&&null!==a.attr("href")?l="append":"auto"==l&&(l="replace"),l){case "replace":a.replaceWith(e.code);break;case "fill":a.html(e.code);break;case "append":a.wrap('<div class="oembedall-container"></div>');l=a.parent();j.includeHandle&&b('<span class="oembedall-closehide">&darr;</span>').insertBefore(a).click(function(){var a=
+encodeURIComponent(b(this).text());b(this).html("%E2%86%91"==a?"&darr;":"&uarr;");b(this).parent().children().last().toggle()});l.append("<br/>");try{e.code.clone().appendTo(l)}catch(d){l.append(e.code)}}};b.fn.oembed.getPhotoCode=function(a,b){var e,d=b.title?b.title:"",c;return d+=b.author_name?" - "+b.author_name:"",d+=b.provider_name?" - "+b.provider_name:"",b.url?e='<div><a href="'+a+"\" target='_blank'><img src=\""+b.url+'" alt="'+d+'"/></a></div>':b.thumbnail_url?(c=b.thumbnail_url.replace("_s",
+"_b"),e='<div><a href="'+a+"\" target='_blank'><img src=\""+c+'" alt="'+d+'"/></a></div>'):e="Flickr"==b.provider_name?'<p><a href="'+a+"\" target='_blank'>"+a+"</a></p>":"<div>Error loading this picture</div>",e};b.fn.oembed.getRichCode=function(a,b){return b.html};b.fn.oembed.getGenericCode=function(a,b){var e='<a href="'+a+'">'+(null!==b.title?b.title:a)+"</a>";return b.html&&(e+="<div>"+b.html+"</div>"),e};b.fn.oembed.getOEmbedProvider=function(a){for(var e,h,d,c=0;c<b.fn.oembed.providers.length;c++){e=
+0;for(h=b.fn.oembed.providers[c].urlschemes.length;e<h;e++)if(d=RegExp(b.fn.oembed.providers[c].urlschemes[e],"i"),null!==a.match(d))return b.fn.oembed.providers[c]}return null};b.fn.oembed.OEmbedProvider=function(a,e,h,d,c){this.name=a;this.type=e;this.urlschemes=h;this.apiendpoint=d;this.maxWidth=500;this.maxHeight=400;c=c||{};c.useYQL&&(c.yql="xml"==c.useYQL?{xpath:"//oembed/html",from:"xml",apiendpoint:this.apiendpoint,url:function(a){return this.apiendpoint+"?format=xml&url="+a},datareturn:function(a){return a.html.replace(/.*\[CDATA\[(.*)\]\]>$/,
+"$1")||""}}:{from:"json",apiendpoint:this.apiendpoint,url:function(a){return this.apiendpoint+"?format=json&url="+a},datareturn:function(a){var c,d,e;if("video"!=a.json.type&&(a.json.url||a.json.thumbnail_url)&&!a.json.html.indexOf("iframe"))return'<img src="'+(a.json.url||a.json.thumbnail_url)+'"  />';if(a.json.html.indexOf("iframe")){a.json.html.indexOf("allowfullscreen>")&&(a.json.html=a.json.html.replace("allowfullscreen>",'allowfullscreen="false">'));var a=b.parseHTML(a.json.html),f=a[0].width,
+l=a[0].height;return j.maxHeight&&j.maxWidth&&(j.useResponsiveResize?(d=f,e=l,f>j.maxWidth&&(c=j.maxWidth/f,d=j.maxWidth,e=l*c,l*=c,f*=c),l>j.maxHeight&&(c=j.maxHeight/l,e=j.maxHeight,d=f*c),l=e,f=d):(l=j.maxHeight,f=j.maxWidth)),a[0].width=f,a[0].height=l,a[0].outerHTML}return a.json.html||""}},this.apiendpoint=null);for(var f in c)this[f]=c[f];this.format=this.format||"json";this.callbackparameter=this.callbackparameter||"callback";this.embedtag=this.embedtag||{tag:""}};b.fn.updateOEmbedProvider=
+function(a,e,h,d,c){for(var f,g=0;g<b.fn.oembed.providers.length;g++)if(b.fn.oembed.providers[g].name===a&&(null!==e&&(b.fn.oembed.providers[g].type=e),null!==h&&(b.fn.oembed.providers[g].urlschemes=h),null!==d&&(b.fn.oembed.providers[g].apiendpoint=d),null!==c))for(f in b.fn.oembed.providers[g].extraSettings=c,c)null!==c[f]&&(b.fn.oembed.providers[g][f]=c[f])};b.fn.oembed.providers=[new b.fn.oembed.OEmbedProvider("youtube","video",["youtube\\.com/watch.+v=[\\w-]+&?","youtu\\.be/[\\w-]+","youtube.com/embed"],
+m()+"www.youtube.com/embed/$1?wmode=transparent",{templateRegex:/.*(?:v\=|be\/|embed\/)([\w\-]+)&?.*/,embedtag:{tag:"iframe",width:"425",height:"349"}}),new b.fn.oembed.OEmbedProvider("youtubeiframe","video",["youtube.com/embed"],"$1?wmode=transparent",{templateRegex:/(.*)/,embedtag:{tag:"iframe",width:"425",height:"349"}}),new b.fn.oembed.OEmbedProvider("wistia","video",["wistia.com/m/.+","wistia.com/embed/.+","wi.st/m/.+","wi.st/embed/.+"],"http://fast.wistia.com/oembed",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("xtranormal",
+"video",["xtranormal\\.com/watch/.+"],"http://www.xtranormal.com/xtraplayr/$1/$2",{templateRegex:/.*com\/watch\/([\w\-]+)\/([\w\-]+).*/,embedtag:{tag:"iframe",width:"320",height:"269"}}),new b.fn.oembed.OEmbedProvider("scivee","video",["scivee.tv/node/.+"],"http://www.scivee.tv/flash/embedCast.swf?",{templateRegex:/.*tv\/node\/(.+)/,embedtag:{width:"480",height:"400",flashvars:"id=$1&type=3"}}),new b.fn.oembed.OEmbedProvider("veoh","video",["veoh.com/watch/.+"],"http://www.veoh.com/swf/webplayer/WebPlayer.swf?version=AFrontend.5.7.0.1337&permalinkId=$1&player=videodetailsembedded&videoAutoPlay=0&id=anonymous",
+{templateRegex:/.*watch\/([^\?]+).*/,embedtag:{width:"410",height:"341"}}),new b.fn.oembed.OEmbedProvider("gametrailers","video",["gametrailers\\.com/video/.+"],"http://media.mtvnservices.com/mgid:moses:video:gametrailers.com:$2",{templateRegex:/.*com\/video\/([\w\-]+)\/([\w\-]+).*/,embedtag:{width:"512",height:"288"}}),new b.fn.oembed.OEmbedProvider("funnyordie","video",["funnyordie\\.com/videos/.+"],"http://player.ordienetworks.com/flash/fodplayer.swf?",{templateRegex:/.*videos\/([^\/]+)\/([^\/]+)?/,
+embedtag:{width:512,height:328,flashvars:"key=$1"}}),new b.fn.oembed.OEmbedProvider("colledgehumour","video",["collegehumor\\.com/video/.+"],"http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=$1&use_node_id=true&fullscreen=1",{templateRegex:/.*video\/([^\/]+).*/,embedtag:{width:600,height:338}}),new b.fn.oembed.OEmbedProvider("metacafe","video",["metacafe\\.com/watch/.+"],"http://www.metacafe.com/fplayer/$1/$2.swf",{templateRegex:/.*watch\/(\d+)\/(\w+)\/.*/,embedtag:{width:400,height:345}}),
+new b.fn.oembed.OEmbedProvider("bambuser","video",["bambuser\\.com/channel/.*/broadcast/.*"],"http://static.bambuser.com/r/player.swf?vid=$1",{templateRegex:/.*bambuser\.com\/channel\/.*\/broadcast\/(\w+).*/,embedtag:{width:512,height:339}}),new b.fn.oembed.OEmbedProvider("twitvid","video",["twitvid\\.com/.+"],"http://www.twitvid.com/embed.php?guid=$1&autoplay=0",{templateRegex:/.*twitvid\.com\/(\w+).*/,embedtag:{tag:"iframe",width:480,height:360}}),new b.fn.oembed.OEmbedProvider("aniboom","video",
+["aniboom\\.com/animation-video/.+"],"http://api.aniboom.com/e/$1",{templateRegex:/.*animation-video\/(\d+).*/,embedtag:{width:594,height:334}}),new b.fn.oembed.OEmbedProvider("vzaar","video",["vzaar\\.com/videos/.+","vzaar.tv/.+"],"http://view.vzaar.com/$1/player?",{templateRegex:/.*\/(\d+).*/,embedtag:{tag:"iframe",width:576,height:324}}),new b.fn.oembed.OEmbedProvider("snotr","video",["snotr\\.com/video/.+"],"http://www.snotr.com/embed/$1",{templateRegex:/.*\/(\d+).*/,embedtag:{tag:"iframe",width:400,
+height:330,nocache:1}}),new b.fn.oembed.OEmbedProvider("youku","video",["v.youku.com/v_show/id_.+"],"http://player.youku.com/player.php/sid/$1/v.swf",{templateRegex:/.*id_(.+)\.html.*/,embedtag:{width:480,height:400,nocache:1}}),new b.fn.oembed.OEmbedProvider("tudou","video",["tudou.com/programs/view/.+/"],"http://www.tudou.com/v/$1/v.swf",{templateRegex:/.*view\/(.+)\//,embedtag:{width:480,height:400,nocache:1}}),new b.fn.oembed.OEmbedProvider("embedr","video",["embedr\\.com/playlist/.+"],"http://embedr.com/swf/slider/$1/425/520/default/false/std?",
+{templateRegex:/.*playlist\/([^\/]+).*/,embedtag:{width:425,height:520}}),new b.fn.oembed.OEmbedProvider("blip","video",["blip\\.tv/.+"],"http://blip.tv/oembed/"),new b.fn.oembed.OEmbedProvider("minoto-video","video",["http://api.minoto-video.com/publishers/.+/videos/.+","http://dashboard.minoto-video.com/main/video/details/.+","http://embed.minoto-video.com/.+"],"http://api.minoto-video.com/services/oembed.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("animoto","video",["animoto.com/play/.+"],
+"http://animoto.com/services/oembed"),new b.fn.oembed.OEmbedProvider("hulu","video",["hulu\\.com/watch/.*"],"http://www.hulu.com/api/oembed.json"),new b.fn.oembed.OEmbedProvider("ustream","video",["ustream\\.tv/recorded/.*"],"http://www.ustream.tv/oembed",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("videojug","video",["videojug\\.com/(film|payer|interview).*"],"http://www.videojug.com/oembed.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("sapo","video",["videos\\.sapo\\.pt/.*"],"http://videos.sapo.pt/oembed",
+{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("vodpod","video",["vodpod.com/watch/.*"],"http://vodpod.com/oembed.js",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("vimeo","video",["www.vimeo.com/groups/.*/videos/.*","www.vimeo.com/.*","vimeo.com/groups/.*/videos/.*","vimeo.com/.*"],"//vimeo.com/api/oembed.json"),new b.fn.oembed.OEmbedProvider("dailymotion","video",["dailymotion\\.com/.+"],"http://www.dailymotion.com/services/oembed"),new b.fn.oembed.OEmbedProvider("5min","video",["www\\.5min\\.com/.+"],
+"http://api.5min.com/oembed.xml",{useYQL:"xml"}),new b.fn.oembed.OEmbedProvider("National Film Board of Canada","video",["nfb\\.ca/film/.+"],"http://www.nfb.ca/remote/services/oembed/",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("qik","video",["qik\\.com/\\w+"],"http://qik.com/api/oembed.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("revision3","video",["revision3\\.com"],"http://revision3.com/api/oembed/"),new b.fn.oembed.OEmbedProvider("dotsub","video",["dotsub\\.com/view/.+"],"http://dotsub.com/services/oembed",
+{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("clikthrough","video",["clikthrough\\.com/theater/video/\\d+"],"http://clikthrough.com/services/oembed"),new b.fn.oembed.OEmbedProvider("Kinomap","video",["kinomap\\.com/.+"],"http://www.kinomap.com/oembed"),new b.fn.oembed.OEmbedProvider("VHX","video",["vhx.tv/.+"],"http://vhx.tv/services/oembed.json"),new b.fn.oembed.OEmbedProvider("bambuser","video",["bambuser.com/.+"],"http://api.bambuser.com/oembed/iframe.json"),new b.fn.oembed.OEmbedProvider("justin.tv",
+"video",["justin.tv/.+"],"http://api.justin.tv/api/embed/from_url.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("official.fm","rich",["official.fm/.+"],"http://official.fm/services/oembed",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("chirbit","rich",["chirb.it/.+"],"http://chirb.it/oembed.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("Huffduffer","rich",["huffduffer.com/[-.\\w@]+/\\d+"],"http://huffduffer.com/oembed"),new b.fn.oembed.OEmbedProvider("Spotify","rich",["open.spotify.com/(track|album|user)/"],
+"https://embed.spotify.com/oembed/"),new b.fn.oembed.OEmbedProvider("shoudio","rich",["shoudio.com/.+","shoud.io/.+"],"http://shoudio.com/api/oembed"),new b.fn.oembed.OEmbedProvider("mixcloud","rich",["mixcloud.com/.+"],m()+"www.mixcloud.com/oembed/",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("rdio.com","rich",["rd.io/.+","rdio.com"],m()+"www.rdio.com/api/oembed/"),new b.fn.oembed.OEmbedProvider("Soundcloud","rich",["soundcloud.com/.+","snd.sc/.+"],m()+"soundcloud.com/oembed",{format:"js"}),
+new b.fn.oembed.OEmbedProvider("bandcamp","rich",["bandcamp\\.com/album/.+"],null,{yql:{xpath:"//meta[contains(@content, \\'EmbeddedPlayer\\')]",from:"html",datareturn:function(a){return a.meta?'<iframe width="400" height="100" src="'+a.meta.content+'" allowtransparency="true" frameborder="0"></iframe>':!1}}}),new b.fn.oembed.OEmbedProvider("deviantart","photo",["deviantart.com/.+","fav.me/.+","deviantart.com/.+"],"http://backend.deviantart.com/oembed",{format:"jsonp"}),new b.fn.oembed.OEmbedProvider("skitch",
+"photo",["skitch.com/.+"],null,{yql:{xpath:"json",from:"json",url:function(a){return"http://skitch.com/oembed/?format=json&url="+a},datareturn:function(a){return b.fn.oembed.getPhotoCode(a.json.url,a.json)}}}),new b.fn.oembed.OEmbedProvider("mobypicture","photo",["mobypicture.com/user/.+/view/.+","moby.to/.+"],"http://api.mobypicture.com/oEmbed"),new b.fn.oembed.OEmbedProvider("flickr","photo",["flickr\\.com/photos/.+"],"http://flickr.com/services/oembed",{callbackparameter:"jsoncallback"}),new b.fn.oembed.OEmbedProvider("photobucket",
+"photo",["photobucket\\.com/(albums|groups)/.+"],m()+"photobucket.com/oembed/"),new b.fn.oembed.OEmbedProvider("instagram","photo",["instagr\\.?am(\\.com)?/.+"],m()+"api.instagram.com/oembed"),new b.fn.oembed.OEmbedProvider("SmugMug","photo",["smugmug.com/[-.\\w@]+/.+"],"http://api.smugmug.com/services/oembed/"),new b.fn.oembed.OEmbedProvider("dribbble","photo",["dribbble.com/shots/.+"],"http://api.dribbble.com/shots/$1?callback=?",{templateRegex:/.*shots\/([\d]+).*/,templateData:function(a){return a.image_teaser_url?
+'<img src="'+a.image_teaser_url+'"/>':!1}}),new b.fn.oembed.OEmbedProvider("chart.ly","photo",["chart\\.ly/[a-z0-9]{6,8}"],"http://chart.ly/uploads/large_$1.png",{templateRegex:/.*ly\/([^\/]+).*/,embedtag:{tag:"img"},nocache:1}),new b.fn.oembed.OEmbedProvider("circuitlab","photo",["circuitlab.com/circuit/.+"],"https://www.circuitlab.com/circuit/$1/screenshot/540x405/",{templateRegex:/.*circuit\/([^\/]+).*/,embedtag:{tag:"img"},nocache:1}),new b.fn.oembed.OEmbedProvider("23hq","photo",["23hq.com/[-.\\w@]+/photo/.+"],
+"http://www.23hq.com/23/oembed",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("img.ly","photo",["img\\.ly/.+"],"http://img.ly/show/thumb/$1",{templateRegex:/.*ly\/([^\/]+).*/,embedtag:{tag:"img"},nocache:1}),new b.fn.oembed.OEmbedProvider("twitgoo.com","photo",["twitgoo\\.com/.+"],"http://twitgoo.com/show/thumb/$1",{templateRegex:/.*com\/([^\/]+).*/,embedtag:{tag:"img"},nocache:1}),new b.fn.oembed.OEmbedProvider("imgur.com","photo",["imgur\\.com/gallery/.+"],m()+"imgur.com/$1l.jpg",{templateRegex:/.*gallery\/([^\/]+).*/,
+embedtag:{tag:"img"},nocache:1}),new b.fn.oembed.OEmbedProvider("visual.ly","rich",["visual\\.ly/.+"],null,{yql:{xpath:"//a[@id=\\'gc_article_graphic_image\\']/img",from:"htmlstring"}}),new b.fn.oembed.OEmbedProvider("gravtar","photo",["mailto:.+"],null,{templateRegex:/mailto:([^\/]+).*/,template:function(a,b){return'<img src="http://gravatar.com/avatar/'+b.md5()+'.jpg" alt="on Gravtar" class="jqoaImg">'}}),new b.fn.oembed.OEmbedProvider("twitter","rich",["twitter.com/.+"],"https://api.twitter.com/1/statuses/oembed.json?id="),
+new b.fn.oembed.OEmbedProvider("gmep","rich",["gmep.imeducate.com/.*","gmep.org/.*"],"http://gmep.org/oembed.json"),new b.fn.oembed.OEmbedProvider("urtak","rich",["urtak.com/(u|clr)/.+"],"http://oembed.urtak.com/1/oembed"),new b.fn.oembed.OEmbedProvider("cacoo","rich",["cacoo.com/.+"],"http://cacoo.com/oembed.json"),new b.fn.oembed.OEmbedProvider("dailymile","rich",["dailymile.com/people/.*/entries/.*"],"http://api.dailymile.com/oembed"),new b.fn.oembed.OEmbedProvider("dipity","rich",["dipity.com/timeline/.+"],
+"http://www.dipity.com/oembed/timeline/",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("sketchfab","rich",["sketchfab.com/show/.+"],"http://sketchfab.com/oembed",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("speakerdeck","rich",["speakerdeck.com/.+"],"http://speakerdeck.com/oembed.json",{useYQL:"json"}),new b.fn.oembed.OEmbedProvider("popplet","rich",["popplet.com/app/.*"],"http://popplet.com/app/Popplet_Alpha.swf?page_id=$1&em=1",{templateRegex:/.*#\/([^\/]+).*/,embedtag:{width:460,height:460}}),
+new b.fn.oembed.OEmbedProvider("pearltrees","rich",["pearltrees.com/.*"],"http://cdn.pearltrees.com/s/embed/getApp?",{templateRegex:/.*N-f=1_(\d+).*N-p=(\d+).*/,embedtag:{width:460,height:460,flashvars:"lang=en_US&amp;embedId=pt-embed-$1-693&amp;treeId=$1&amp;pearlId=$2&amp;treeTitle=Diagrams%2FVisualization&amp;site=www.pearltrees.com%2FF"}}),new b.fn.oembed.OEmbedProvider("prezi","rich",["prezi.com/.*"],"http://prezi.com/bin/preziloader.swf?",{templateRegex:/.*com\/([^\/]+)\/.*/,embedtag:{width:550,
+height:400,flashvars:"prezi_id=$1&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"}}),new b.fn.oembed.OEmbedProvider("tourwrist","rich",["tourwrist.com/tours/.+"],null,{templateRegex:/.*tours.([\d]+).*/,template:function(a,b){return setTimeout(function(){loadEmbeds&&loadEmbeds()},2E3),"<div id='"+b+"' class='tourwrist-tour-embed direct'></div> <script type='text/javascript' src='http://tourwrist.com/tour_embed.js'><\/script>"}}),new b.fn.oembed.OEmbedProvider("meetup","rich",
+["meetup\\.(com|ps)/.+"],m()+"api.meetup.com/oembed"),new b.fn.oembed.OEmbedProvider("ebay","rich",["ebay\\.*"],m()+"togo.ebay.com/togo/togo.swf?2008013100",{templateRegex:/.*\/([^\/]+)\/(\d{10,13}).*/,embedtag:{width:355,height:300,flashvars:"base=http://togo.ebay.com/togo/&lang=en-us&mode=normal&itemid=$2&query=$1"}}),new b.fn.oembed.OEmbedProvider("wikipedia","rich",["wikipedia.org/wiki/.+"],"http://$1.wikipedia.org/w/api.php?action=parse&page=$2&format=json&section=0&callback=?",{templateRegex:/.*\/\/([\w]+).*\/wiki\/([^\/]+).*/,
+templateData:function(a){if(!a.parse)return!1;var b=a.parse.text["*"].replace(/href="\/wiki/g,'href="http://en.wikipedia.org/wiki');return'<div id="content"><h3><a class="nav-link" href="http://en.wikipedia.org/wiki/'+a.parse.displaytitle+'">'+a.parse.displaytitle+"</a></h3>"+b+"</div>"}}),new b.fn.oembed.OEmbedProvider("imdb","rich",["imdb.com/title/.+"],"http://www.imdbapi.com/?i=$1&callback=?",{templateRegex:/.*\/title\/([^\/]+).*/,templateData:function(a){return a.Title?'<div id="content"><h3><a class="nav-link" href="http://imdb.com/title/'+
+a.ID+'/">'+a.Title+"</a> ("+a.Year+")</h3><p>Starring: "+a.Actors+'</p><div id="photo-wrap" style="margin: auto;width:600px;height:450px;"><img class="photo" id="photo-display" src="'+a.Poster+'" alt="'+a.Title+'"></div>  <div id="view-photo-caption">'+a.Plot+"</div></div>":!1}}),new b.fn.oembed.OEmbedProvider("livejournal","rich",["livejournal.com/"],"http://ljpic.seacrow.com/json/$2$4?jsonp=?",{templateRegex:/(http:\/\/(((?!users).)+)\.livejournal\.com|.*users\.livejournal\.com\/([^\/]+)).*/,templateData:function(a){return!!a.username&&
+'<div><img src="'+a.image+'" align="left" style="margin-right: 1em;" /><span class="oembedall-ljuser"><a href="http://'+a.username+'.livejournal.com/profile"><img src="http://www.livejournal.com/img/userinfo.gif" alt="[info]" width="17" height="17" /></a><a href="http://'+a.username+'.livejournal.com/">'+a.username+"</a></span><br />"+a.name+"</div>"}}),new b.fn.oembed.OEmbedProvider("circuitbee","rich",["circuitbee\\.com/circuit/view/.+"],"http://c.circuitbee.com/build/r/schematic-embed.html?id=$1",
+{templateRegex:/.*circuit\/view\/(\d+).*/,embedtag:{tag:"iframe",width:"500",height:"350"}}),new b.fn.oembed.OEmbedProvider("googlecalendar","rich",["www.google.com/calendar/embed?.+"],"$1",{templateRegex:/(.*)/,embedtag:{tag:"iframe",width:"800",height:"600"}}),new b.fn.oembed.OEmbedProvider("jsfiddle","rich",["jsfiddle.net/[^/]+/?"],"http://jsfiddle.net/$1/embedded/result,js,resources,html,css/?",{templateRegex:/.*net\/([^\/]+).*/,embedtag:{tag:"iframe",width:"100%",height:"300"}}),new b.fn.oembed.OEmbedProvider("jsbin",
+"rich",["jsbin.com/.+"],"http://jsbin.com/$1/?",{templateRegex:/.*com\/([^\/]+).*/,embedtag:{tag:"iframe",width:"100%",height:"300"}}),new b.fn.oembed.OEmbedProvider("jotform","rich",["form.jotform.co/form/.+"],"$1?",{templateRegex:/(.*)/,embedtag:{tag:"iframe",width:"100%",height:"507"}}),new b.fn.oembed.OEmbedProvider("reelapp","rich",["reelapp\\.com/.+"],"http://www.reelapp.com/$1/embed",{templateRegex:/.*com\/(\S{6}).*/,embedtag:{tag:"iframe",width:"400",height:"338"}}),new b.fn.oembed.OEmbedProvider("linkedin",
+"rich",["linkedin.com/pub/.+"],"https://www.linkedin.com/cws/member/public_profile?public_profile_url=$1&format=inline&isFramed=true",{templateRegex:/(.*)/,embedtag:{tag:"iframe",width:"368px",height:"auto"}}),new b.fn.oembed.OEmbedProvider("timetoast","rich",["timetoast.com/timelines/[0-9]+"],"http://www.timetoast.com/flash/TimelineViewer.swf?passedTimelines=$1",{templateRegex:/.*timelines\/([0-9]*)/,embedtag:{width:550,height:400,nocache:1}}),new b.fn.oembed.OEmbedProvider("pastebin","rich",["pastebin\\.com/[\\S]{8}"],
+"http://pastebin.com/embed_iframe.php?i=$1",{templateRegex:/.*\/(\S{8}).*/,embedtag:{tag:"iframe",width:"100%",height:"auto"}}),new b.fn.oembed.OEmbedProvider("mixlr","rich",["mixlr.com/.+"],"http://mixlr.com/embed/$1?autoplay=ae",{templateRegex:/.*com\/([^\/]+).*/,embedtag:{tag:"iframe",width:"100%",height:"auto"}}),new b.fn.oembed.OEmbedProvider("pastie","rich",["pastie\\.org/pastes/.+"],null,{yql:{xpath:'//pre[@class="textmate-source"]'}}),new b.fn.oembed.OEmbedProvider("github","rich",["gist.github.com/.+"],
+"https://github.com/api/oembed"),new b.fn.oembed.OEmbedProvider("github","rich",["github.com/[-.\\w@]+/[-.\\w@]+"],"https://api.github.com/repos/$1/$2?callback=?",{templateRegex:/.*\/([^\/]+)\/([^\/]+).*/,templateData:function(a){return a.data.html_url?'<div class="oembedall-githubrepos"><ul class="oembedall-repo-stats"><li>'+a.data.language+'</li><li class="oembedall-watchers"><a title="Watchers" href="'+a.data.html_url+'/watchers">&#x25c9; '+a.data.watchers+'</a></li><li class="oembedall-forks"><a title="Forks" href="'+
+a.data.html_url+'/network">&#x0265; '+a.data.forks+'</a></li></ul><h3><a href="'+a.data.html_url+'">'+a.data.name+'</a></h3><div class="oembedall-body"><p class="oembedall-description">'+a.data.description+'</p><p class="oembedall-updated-at">Last updated: '+a.data.pushed_at+"</p></div></div>":!1}}),new b.fn.oembed.OEmbedProvider("facebook","rich",["facebook.com/(people/[^\\/]+/\\d+|[^\\/]+$)"],"https://graph.facebook.com/$2$3/?callback=?",{templateRegex:/.*facebook.com\/(people\/[^\/]+\/(\d+).*|([^\/]+$))/,
+templateData:function(a){if(!a.id)return!1;var b='<div class="oembedall-facebook1"><div class="oembedall-facebook2"><a href="http://www.facebook.com/">facebook</a> ';return b+=a.from?'<a href="http://www.facebook.com/'+a.from.id+'">'+a.from.name+"</a>":a.link?'<a href="'+a.link+'">'+a.name+"</a>":a.username?'<a href="http://www.facebook.com/'+a.username+'">'+a.name+"</a>":'<a href="http://www.facebook.com/'+a.id+'">'+a.name+"</a>",b+='</div><div class="oembedall-facebookBody"><div class="contents">',
+b+=a.picture?'<a href="'+a.link+'"><img src="'+a.picture+'"></a>':'<img src="https://graph.facebook.com/'+a.id+'/picture">',a.from&&(b+='<a href="'+a.link+'">'+a.name+"</a>"),a.founded&&(b+="Founded: <strong>"+a.founded+"</strong><br>"),a.category&&(b+="Category: <strong>"+a.category+"</strong><br>"),a.website&&(b+='Website: <strong><a href="'+a.website+'">'+a.website+"</a></strong><br>"),a.gender&&(b+="Gender: <strong>"+a.gender+"</strong><br>"),a.description&&(b+=a.description+"<br>"),b+"</div></div>"}}),
+new b.fn.oembed.OEmbedProvider("stackoverflow","rich",["stackoverflow.com/questions/[\\d]+"],"http://api.stackoverflow.com/1.1/questions/$1?body=true&jsonp=?",{templateRegex:/.*questions\/([\d]+).*/,templateData:function(a){if(!a.questions)return!1;var a=a.questions[0],e=b(a.body).text(),e='<div class="oembedall-stoqembed"><div class="oembedall-statscontainer"><div class="oembedall-statsarrow"></div><div class="oembedall-stats"><div class="oembedall-vote"><div class="oembedall-votes"><span class="oembedall-vote-count-post"><strong>'+
+(a.up_vote_count-a.down_vote_count)+'</strong></span><div class="oembedall-viewcount">vote(s)</div></div></div><div class="oembedall-status"><strong>'+a.answer_count+'</strong>answer</div></div><div class="oembedall-views">'+a.view_count+' view(s)</div></div><div class="oembedall-summary"><h3><a class="oembedall-question-hyperlink" href="http://stackoverflow.com/questions/'+a.question_id+'/">'+a.title+'</a></h3><div class="oembedall-excerpt">'+e.substring(0,100)+'...</div><div class="oembedall-tags">';
+for(i in a.tags)e+='<a title="" class="oembedall-post-tag" href="http://stackoverflow.com/questions/tagged/'+a.tags[i]+'">'+a.tags[i]+"</a>";return e+('</div><div class="oembedall-fr"><div class="oembedall-user-info"><div class="oembedall-user-gravatar32"><a href="http://stackoverflow.com/users/'+a.owner.user_id+"/"+a.owner.display_name+'"><img width="32" height="32" alt="" src="http://www.gravatar.com/avatar/'+a.owner.email_hash+'?s=32&amp;d=identicon&amp;r=PG"></a></div><div class="oembedall-user-details"><a href="http://stackoverflow.com/users/'+
+a.owner.user_id+"/"+a.owner.display_name+'">'+a.owner.display_name+'</a><br><span title="reputation score" class="oembedall-reputation-score">'+a.owner.reputation+"</span></div></div></div></div></div>")}}),new b.fn.oembed.OEmbedProvider("wordpress","rich",["wordpress\\.com/.+","blogs\\.cnn\\.com/.+","techcrunch\\.com/.+","wp\\.me/.+"],"http://public-api.wordpress.com/oembed/1.0/?for=jquery-oembed-all"),new b.fn.oembed.OEmbedProvider("screenr","rich",["screenr.com"],"http://www.screenr.com/embed/$1",
+{templateRegex:/.*\/([^\/]+).*/,embedtag:{tag:"iframe",width:"650",height:396}}),new b.fn.oembed.OEmbedProvider("gigpans","rich",["gigapan\\.org/[-.\\w@]+/\\d+"],"http://gigapan.org/gigapans/$1/options/nosnapshots/iframe/flash.html",{templateRegex:/.*\/(\d+)\/?.*/,embedtag:{tag:"iframe",width:"100%",height:400}}),new b.fn.oembed.OEmbedProvider("scribd","rich",["scribd\\.com/.+"],m()+"www.scribd.com/embeds/$1/content?start_page=1&view_mode=list",{templateRegex:/.*doc\/([^\/]+).*/,embedtag:{tag:"iframe",
+width:"100%",height:600}}),new b.fn.oembed.OEmbedProvider("kickstarter","rich",["kickstarter\\.com/projects/.+"],"$1/widget/card.html",{templateRegex:/([^\?]+).*/,embedtag:{tag:"iframe",width:"220",height:380}}),new b.fn.oembed.OEmbedProvider("amazon","rich",["amzn.com/B+","amazon.com.*/(B\\S+)($|\\/.*)"],m()+"rcm.amazon.com/e/cm?t=_APIKEY_&o=1&p=8&l=as1&asins=$1&ref=qf_br_asin_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr",{apikey:!0,templateRegex:/.*\/(B[0-9A-Z]+)($|\/.*)/,
+embedtag:{tag:"iframe",width:"120px",height:"240px"}}),new b.fn.oembed.OEmbedProvider("slideshare","rich",["slideshare.net"],m()+"www.slideshare.net/api/oembed/2",{format:"jsonp"}),new b.fn.oembed.OEmbedProvider("roomsharejp","rich",["roomshare\\.jp/(en/)?post/.*"],"http://roomshare.jp/oembed.json"),new b.fn.oembed.OEmbedProvider("lanyard","rich",["lanyrd.com/\\d+/.+"],null,{yql:{xpath:'(//div[@class="primary"])[1]',from:"htmlstring",datareturn:function(a){return a.result?'<div class="oembedall-lanyard">'+
+a.result+"</div>":!1}}}),new b.fn.oembed.OEmbedProvider("asciiartfarts","rich",["asciiartfarts.com/\\d+.html"],null,{yql:{xpath:"//pre/font",from:"htmlstring",datareturn:function(a){return a.result?'<pre style="background-color:000;">'+a.result+"</div>":!1}}}),new b.fn.oembed.OEmbedProvider("opengraph","rich",[".*"],null,{yql:{xpath:"//meta|//title|//link",from:"html",datareturn:function(a){var e,h,d;return(!a["og:title"]&&a.title&&a.description&&(a["og:title"]=a.title),!a["og:title"]&&!a.title)?
+!1:(e=b("<p/>"),a["og:video"]?(h=b('<embed src="'+a["og:video"]+'"/>'),h.attr("type",a["og:video:type"]||"application/x-shockwave-flash").css("max-height",j.maxHeight||"auto").css("max-width",j.maxWidth||"auto"),a["og:video:width"]&&h.attr("width",a["og:video:width"]),a["og:video:height"]&&h.attr("height",a["og:video:height"]),e.append(h)):a["og:image"]&&(d=b('<img src="'+a["og:image"]+'">'),d.css("max-height",j.maxHeight||"auto").css("max-width",j.maxWidth||"auto"),a["og:image:width"]&&d.attr("width",
+a["og:image:width"]),a["og:image:height"]&&d.attr("height",a["og:image:height"]),e.append(d)),a["og:title"]&&e.append("<b>"+a["og:title"]+"</b><br/>"),a["og:description"]?e.append(a["og:description"]+"<br/>"):a.description&&e.append(a.description+"<br/>"),e)}}})]})(jQuery);
+String.prototype.md5=function(){var b=function(b,m){var j=(b&65535)+(m&65535);return(b>>16)+(m>>16)+(j>>16)<<16|j&65535},m=function(e,m,j,a,l,h){e=b(b(m,e),b(a,h));return b(e<<l|e>>>32-l,j)},o=function(b,p,j,a,l,h,d){return m(p&j|~p&a,b,p,l,h,d)},q=function(b,p,j,a,l,h,d){return m(p&a|j&~a,b,p,l,h,d)},n=function(b,p,j,a,l,h,d){return m(j^(p|~a),b,p,l,h,d)};return function(b){for(var m="",j=4*b.length,a=0;a<j;a++)m+="0123456789abcdef".charAt(b[a>>2]>>8*(a%4)+4&15)+"0123456789abcdef".charAt(b[a>>2]>>
+8*(a%4)&15);return m}(function(e){for(var p,j,a,l,h=e.length,d=1732584193,c=-271733879,f=-1732584194,g=271733878,k=0;k<h;k+=16)p=d,j=c,a=f,l=g,d=o(d,c,f,g,e[k+0],7,-680876936),g=o(g,d,c,f,e[k+1],12,-389564586),f=o(f,g,d,c,e[k+2],17,606105819),c=o(c,f,g,d,e[k+3],22,-1044525330),d=o(d,c,f,g,e[k+4],7,-176418897),g=o(g,d,c,f,e[k+5],12,1200080426),f=o(f,g,d,c,e[k+6],17,-1473231341),c=o(c,f,g,d,e[k+7],22,-45705983),d=o(d,c,f,g,e[k+8],7,1770035416),g=o(g,d,c,f,e[k+9],12,-1958414417),f=o(f,g,d,c,e[k+10],
+17,-42063),c=o(c,f,g,d,e[k+11],22,-1990404162),d=o(d,c,f,g,e[k+12],7,1804603682),g=o(g,d,c,f,e[k+13],12,-40341101),f=o(f,g,d,c,e[k+14],17,-1502002290),c=o(c,f,g,d,e[k+15],22,1236535329),d=q(d,c,f,g,e[k+1],5,-165796510),g=q(g,d,c,f,e[k+6],9,-1069501632),f=q(f,g,d,c,e[k+11],14,643717713),c=q(c,f,g,d,e[k+0],20,-373897302),d=q(d,c,f,g,e[k+5],5,-701558691),g=q(g,d,c,f,e[k+10],9,38016083),f=q(f,g,d,c,e[k+15],14,-660478335),c=q(c,f,g,d,e[k+4],20,-405537848),d=q(d,c,f,g,e[k+9],5,568446438),g=q(g,d,c,f,e[k+
+14],9,-1019803690),f=q(f,g,d,c,e[k+3],14,-187363961),c=q(c,f,g,d,e[k+8],20,1163531501),d=q(d,c,f,g,e[k+13],5,-1444681467),g=q(g,d,c,f,e[k+2],9,-51403784),f=q(f,g,d,c,e[k+7],14,1735328473),c=q(c,f,g,d,e[k+12],20,-1926607734),d=m(c^f^g,d,c,e[k+5],4,-378558),g=m(d^c^f,g,d,e[k+8],11,-2022574463),f=m(g^d^c,f,g,e[k+11],16,1839030562),c=m(f^g^d,c,f,e[k+14],23,-35309556),d=m(c^f^g,d,c,e[k+1],4,-1530992060),g=m(d^c^f,g,d,e[k+4],11,1272893353),f=m(g^d^c,f,g,e[k+7],16,-155497632),c=m(f^g^d,c,f,e[k+10],23,-1094730640),
+d=m(c^f^g,d,c,e[k+13],4,681279174),g=m(d^c^f,g,d,e[k+0],11,-358537222),f=m(g^d^c,f,g,e[k+3],16,-722521979),c=m(f^g^d,c,f,e[k+6],23,76029189),d=m(c^f^g,d,c,e[k+9],4,-640364487),g=m(d^c^f,g,d,e[k+12],11,-421815835),f=m(g^d^c,f,g,e[k+15],16,530742520),c=m(f^g^d,c,f,e[k+2],23,-995338651),d=n(d,c,f,g,e[k+0],6,-198630844),g=n(g,d,c,f,e[k+7],10,1126891415),f=n(f,g,d,c,e[k+14],15,-1416354905),c=n(c,f,g,d,e[k+5],21,-57434055),d=n(d,c,f,g,e[k+12],6,1700485571),g=n(g,d,c,f,e[k+3],10,-1894986606),f=n(f,g,d,c,
+e[k+10],15,-1051523),c=n(c,f,g,d,e[k+1],21,-2054922799),d=n(d,c,f,g,e[k+8],6,1873313359),g=n(g,d,c,f,e[k+15],10,-30611744),f=n(f,g,d,c,e[k+6],15,-1560198380),c=n(c,f,g,d,e[k+13],21,1309151649),d=n(d,c,f,g,e[k+4],6,-145523070),g=n(g,d,c,f,e[k+11],10,-1120210379),f=n(f,g,d,c,e[k+2],15,718787259),c=n(c,f,g,d,e[k+9],21,-343485551),d=b(d,p),c=b(c,j),f=b(f,a),g=b(g,l);return[d,c,f,g]}(function(b){for(var m=(b.length+8>>6)+1,j=[],a=16*m,l=b.length,h=0;h<a;h++)j.push(0);for(a=0;a<l;a++)j[a>>2]|=(b.charCodeAt(a)&
+255)<<8*(a%4);return j[a>>2]|=128<<8*(a%4),j[16*m-2]=8*l,j}(this)))};
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/pagebreak/images/pagebreak.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/pagebreak/images/pagebreak.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/pastefromword/filter/default.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/pastefromword/filter/default.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/pastefromword/filter/default.js	(revision 2)
@@ -0,0 +1,43 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function t(){return!1}function x(a,b){var c,d=[];a.filterChildren(b);for(c=a.children.length-1;0<=c;c--)d.unshift(a.children[c]),a.children[c].remove();c=a.attributes;var e=a,h=!0,g;for(g in c)if(h)h=!1;else{var m=new CKEDITOR.htmlParser.element(a.name);m.attributes[g]=c[g];e.add(m);e=m;delete c[g]}for(c=0;c<d.length;c++)e.add(d[c])}var f,k,u,r,l=CKEDITOR.tools,y=["o:p","xml","script","meta","link"],w={},v=0;CKEDITOR.plugins.pastefromword={};CKEDITOR.cleanWord=function(a,b){var c=Boolean(a.match(/mso-list:\s*l\d+\s+level\d+\s+lfo\d+/));
+a=a.replace(/<!\[/g,"\x3c!--[").replace(/\]>/g,"]--\x3e");var d=CKEDITOR.htmlParser.fragment.fromHtml(a);r=new CKEDITOR.htmlParser.filter({root:function(a){a.filterChildren(r);CKEDITOR.plugins.pastefromword.lists.cleanup(f.createLists(a))},elementNames:[[/^\?xml:namespace$/,""],[/^v:shapetype/,""],[new RegExp(y.join("|")),""]],elements:{a:function(a){if(a.attributes.name){if("_GoBack"==a.attributes.name){delete a.name;return}if(a.attributes.name.match(/^OLE_LINK\d+$/)){delete a.name;return}}if(a.attributes.href&&
+a.attributes.href.match(/#.+$/)){var b=a.attributes.href.match(/#(.+)$/)[1];w[b]=a}a.attributes.name&&w[a.attributes.name]&&(a=w[a.attributes.name],a.attributes.href=a.attributes.href.replace(/.*#(.*)$/,"#$1"))},div:function(a){k.createStyleStack(a,r,b)},img:function(a){if(a.parent){var b=a.parent.attributes;(b=b.style||b.STYLE)&&b.match(/mso\-list:\s?Ignore/)&&(a.attributes["cke-ignored"]=!0)}k.mapStyles(a,{width:function(b){k.setStyle(a,"width",b+"px")},height:function(b){k.setStyle(a,"height",
+b+"px")}});a.attributes.src&&a.attributes.src.match(/^file:\/\//)&&a.attributes.alt&&a.attributes.alt.match(/^https?:\/\//)&&(a.attributes.src=a.attributes.alt)},p:function(a){a.filterChildren(r);if(a.attributes.style&&a.attributes.style.match(/display:\s*none/i))return!1;if(f.thisIsAListItem(b,a))f.convertToFakeListItem(b,a);else{var c=a.getAscendant(function(a){return"ul"==a.name||"ol"==a.name}),d=l.parseCssText(a.attributes.style);c&&!c.attributes["cke-list-level"]&&d["mso-list"]&&d["mso-list"].match(/level/)&&
+(c.attributes["cke-list-level"]=d["mso-list"].match(/level(\d+)/)[1])}k.createStyleStack(a,r,b)},pre:function(a){f.thisIsAListItem(b,a)&&f.convertToFakeListItem(b,a);k.createStyleStack(a,r,b)},h1:function(a){f.thisIsAListItem(b,a)&&f.convertToFakeListItem(b,a);k.createStyleStack(a,r,b)},font:function(a){if(a.getHtml().match(/^\s*$/))return(new CKEDITOR.htmlParser.text(" ")).insertAfter(a),!1;b&&!0===b.config.pasteFromWordRemoveFontStyles&&a.attributes.size&&delete a.attributes.size;x(a,r)},ul:function(a){if(c)return"li"==
+a.parent.name&&0===l.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),f.dissolveList(a),!1},li:function(a){c&&(a.attributes.style=k.normalizedStyles(a,b),k.pushStylesLower(a))},ol:function(a){if(c)return"li"==a.parent.name&&0===l.indexOf(a.parent.children,a)&&k.setStyle(a.parent,"list-style-type","none"),f.dissolveList(a),!1},span:function(a){a.filterChildren(r);a.attributes.style=k.normalizedStyles(a,b);if(!a.attributes.style||a.attributes.style.match(/^mso\-bookmark:OLE_LINK\d+$/)||
+a.getHtml().match(/^(\s|&nbsp;)+$/)){for(var c=a.children.length-1;0<=c;c--)a.children[c].insertAfter(a);return!1}k.createStyleStack(a,r,b)},table:function(a){a._tdBorders={};a.filterChildren(r);var b,c=0,d;for(d in a._tdBorders)a._tdBorders[d]>c&&(c=a._tdBorders[d],b=d);k.setStyle(a,"border",b)},td:function(a){var b=a.getAscendant("table"),c=b._tdBorders,d=["border","border-top","border-right","border-bottom","border-left"],b=l.parseCssText(b.attributes.style),e=b.background||b.BACKGROUND;e&&k.setStyle(a,
+"background",e,!0);(b=b["background-color"]||b["BACKGROUND-COLOR"])&&k.setStyle(a,"background-color",b,!0);var b=l.parseCssText(a.attributes.style),p;for(p in b)e=b[p],delete b[p],b[p.toLowerCase()]=e;for(p=0;p<d.length;p++)b[d[p]]&&(e=b[d[p]],c[e]=c[e]?c[e]+1:1);k.pushStylesLower(a,{background:!0})},"v:imagedata":t,"v:shape":function(a){var b=!1;a.parent.getFirst(function(c){"img"==c.name&&c.attributes&&c.attributes["v:shapes"]==a.attributes.id&&(b=!0)});if(b)return!1;var c="";a.forEach(function(a){a.attributes&&
+a.attributes.src&&(c=a.attributes.src)},CKEDITOR.NODE_ELEMENT,!0);a.filterChildren(r);a.name="img";a.attributes.src=a.attributes.src||c;delete a.attributes.type},style:function(){return!1}},attributes:{style:function(a,c){return k.normalizedStyles(c,b)||!1},"class":function(a){a=a.replace(/msonormal|msolistparagraph\w*/ig,"");return""===a?!1:a},cellspacing:t,cellpadding:t,border:t,valign:t,"v:shapes":t,"o:spid":t},comment:function(a){a.match(/\[if.* supportFields.*\]/)&&v++;"[endif]"==a&&(v=0<v?v-
+1:0);return!1},text:function(a){return v?"":a.replace(/&nbsp;/g," ")}});var e=new CKEDITOR.htmlParser.basicWriter;r.applyTo(d);d.writeHtml(e);return e.getHtml()};CKEDITOR.plugins.pastefromword.styles={setStyle:function(a,b,c,d){var e=l.parseCssText(a.attributes.style);d&&e[b]||(""===c?delete e[b]:e[b]=c,a.attributes.style=CKEDITOR.tools.writeCssText(e))},mapStyles:function(a,b){for(var c in b)if(a.attributes[c]){if("function"===typeof b[c])b[c](a.attributes[c]);else k.setStyle(a,b[c],a.attributes[c]);
+delete a.attributes[c]}},normalizedStyles:function(a,b){var c="background-color:transparent border-image:none color:windowtext direction:ltr mso- text-indent visibility:visible div:border:none".split(" "),d="font-family font font-size color background-color line-height text-decoration".split(" "),e=function(){for(var a=[],b=0;b<arguments.length;b++)arguments[b]&&a.push(arguments[b]);return-1!==l.indexOf(c,a.join(":"))},h=b&&!0===b.config.pasteFromWordRemoveFontStyles,g=l.parseCssText(a.attributes.style);
+"cke:li"==a.name&&g["TEXT-INDENT"]&&g.MARGIN&&(a.attributes["cke-indentation"]=f.getElementIndentation(a),g.MARGIN=g.MARGIN.replace(/(([\w\.]+ ){3,3})[\d\.]+(\w+$)/,"$10$3"));for(var m=l.objectKeys(g),q=0;q<m.length;q++){var n=m[q].toLowerCase(),p=g[m[q]],k=CKEDITOR.tools.indexOf;(h&&-1!==k(d,n.toLowerCase())||e(null,n,p)||e(null,n.replace(/\-.*$/,"-"))||e(null,n)||e(a.name,n,p)||e(a.name,n.replace(/\-.*$/,"-"))||e(a.name,n)||e(p))&&delete g[m[q]]}return CKEDITOR.tools.writeCssText(g)},createStyleStack:function(a,
+b,c){var d=[];a.filterChildren(b);for(b=a.children.length-1;0<=b;b--)d.unshift(a.children[b]),a.children[b].remove();k.sortStyles(a);b=l.parseCssText(k.normalizedStyles(a,c));c=a;var e="span"===a.name,h;for(h in b)if(!h.match(/margin|text\-align|width|border|padding/i))if(e)e=!1;else{var g=new CKEDITOR.htmlParser.element("span");g.attributes.style=h+":"+b[h];c.add(g);c=g;delete b[h]}"{}"!==JSON.stringify(b)?a.attributes.style=CKEDITOR.tools.writeCssText(b):delete a.attributes.style;for(b=0;b<d.length;b++)c.add(d[b])},
+sortStyles:function(a){for(var b=["border","border-bottom","font-size","background"],c=l.parseCssText(a.attributes.style),d=l.objectKeys(c),e=[],h=[],g=0;g<d.length;g++)-1!==l.indexOf(b,d[g].toLowerCase())?e.push(d[g]):h.push(d[g]);e.sort(function(a,c){var d=l.indexOf(b,a.toLowerCase()),e=l.indexOf(b,c.toLowerCase());return d-e});d=[].concat(e,h);e={};for(g=0;g<d.length;g++)e[d[g]]=c[d[g]];a.attributes.style=CKEDITOR.tools.writeCssText(e)},pushStylesLower:function(a,b){if(!a.attributes.style||0===
+a.children.length)return!1;b=b||{};var c={"list-style-type":!0,width:!0,border:!0,"border-":!0},d=l.parseCssText(a.attributes.style),e;for(e in d)if(!(e.toLowerCase()in c||c[e.toLowerCase().replace(/\-.*$/,"-")]||e.toLowerCase()in b)){for(var h=!1,g=0;g<a.children.length;g++){var m=a.children[g];m.type===CKEDITOR.NODE_ELEMENT&&(h=!0,k.setStyle(m,e,d[e]))}h&&delete d[e]}a.attributes.style=CKEDITOR.tools.writeCssText(d);return!0}};k=CKEDITOR.plugins.pastefromword.styles;CKEDITOR.plugins.pastefromword.lists=
+{thisIsAListItem:function(a,b){return u.isEdgeListItem(a,b)||b.attributes.style&&b.attributes.style.match(/mso\-list:\s?l\d/)&&"li"!==b.parent.name||b.attributes["cke-dissolved"]||b.getHtml().match(/<!\-\-\[if !supportLists]\-\->/)||b.getHtml().match(/^( )*.*?[\.\)] ( ){2,700}/)?!0:!1},convertToFakeListItem:function(a,b){u.isEdgeListItem(a,b)&&u.assignListLevels(a,b);this.getListItemInfo(b);if(!b.attributes["cke-dissolved"]){var c;b.forEach(function(a){!c&&"img"==a.name&&a.attributes["cke-ignored"]&&
+"*"==a.attributes.alt&&(c="·",a.remove())},CKEDITOR.NODE_ELEMENT);b.forEach(function(a){c||a.value.match(/^ /)||(c=a.value)},CKEDITOR.NODE_TEXT);if("undefined"==typeof c)return;b.attributes["cke-symbol"]=c.replace(/ .*$/,"");f.removeSymbolText(b)}if(b.attributes.style){var d=l.parseCssText(b.attributes.style);d["margin-left"]&&(delete d["margin-left"],b.attributes.style=CKEDITOR.tools.writeCssText(d))}b.name="cke:li"},convertToRealListItems:function(a){var b=[];a.forEach(function(a){"cke:li"==a.name&&
+(a.name="li",b.push(a))},CKEDITOR.NODE_ELEMENT,!1);return b},removeSymbolText:function(a){var b,c=a.attributes["cke-symbol"];a.forEach(function(d){!b&&d.value.match(c.replace(")","\\)").replace("(",""))&&(d.value=d.value.replace(c,""),d.parent.getHtml().match(/^(\s|&nbsp;)*$/)&&(b=d.parent!==a?d.parent:null))},CKEDITOR.NODE_TEXT);b&&b.remove()},setListSymbol:function(a,b,c){c=c||1;var d=l.parseCssText(a.attributes.style);if("ol"==a.name){if(a.attributes.type||d["list-style-type"])return;var e={"[ivx]":"lower-roman",
+"[IVX]":"upper-roman","[a-z]":"lower-alpha","[A-Z]":"upper-alpha","\\d":"decimal"},h;for(h in e)if(f.getSubsectionSymbol(b).match(new RegExp(h))){d["list-style-type"]=e[h];break}a.attributes["cke-list-style-type"]=d["list-style-type"]}else e={"·":"disc",o:"circle","§":"square"},!d["list-style-type"]&&e[b]&&(d["list-style-type"]=e[b]);f.setListSymbol.removeRedundancies(d,c);(a.attributes.style=CKEDITOR.tools.writeCssText(d))||delete a.attributes.style},setListStart:function(a){for(var b=[],c=0,d=0;d<
+a.children.length;d++)b.push(a.children[d].attributes["cke-symbol"]||"");b[0]||c++;switch(a.attributes["cke-list-style-type"]){case "lower-roman":case "upper-roman":a.attributes.start=f.toArabic(f.getSubsectionSymbol(b[c]))-c;break;case "lower-alpha":case "upper-alpha":a.attributes.start=f.getSubsectionSymbol(b[c]).replace(/\W/g,"").toLowerCase().charCodeAt(0)-96-c;break;case "decimal":a.attributes.start=parseInt(f.getSubsectionSymbol(b[c]),10)-c||1}"1"==a.attributes.start&&delete a.attributes.start;
+delete a.attributes["cke-list-style-type"]},numbering:{toNumber:function(a,b){function c(a){a=a.toUpperCase();for(var b=1,c=1;0<a.length;c*=26)b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(a.charAt(a.length-1))*c,a=a.substr(0,a.length-1);return b}function d(a){var b=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];a=a.toUpperCase();for(var c=b.length,d=0,f=0;f<c;++f)for(var n=b[f],p=n[1].length;a.substr(0,p)==n[1];a=a.substr(p))d+=
+n[0];return d}return"decimal"==b?Number(a):"upper-roman"==b||"lower-roman"==b?d(a.toUpperCase()):"lower-alpha"==b||"upper-alpha"==b?c(a):1},getStyle:function(a){a=a.slice(0,1);var b={i:"lower-roman",v:"lower-roman",x:"lower-roman",l:"lower-roman",m:"lower-roman",I:"upper-roman",V:"upper-roman",X:"upper-roman",L:"upper-roman",M:"upper-roman"}[a];b||(b="decimal",a.match(/[a-z]/)&&(b="lower-alpha"),a.match(/[A-Z]/)&&(b="upper-alpha"));return b}},getSubsectionSymbol:function(a){return(a.match(/([\da-zA-Z]+).?$/)||
+["placeholder",1])[1]},setListDir:function(a){var b=0,c=0;a.forEach(function(a){"li"==a.name&&("rtl"==(a.attributes.dir||a.attributes.DIR||"").toLowerCase()?c++:b++)},CKEDITOR.ELEMENT_NODE);c>b&&(a.attributes.dir="rtl")},createList:function(a){return(a.attributes["cke-symbol"].match(/([\da-np-zA-NP-Z]).?/)||[])[1]?new CKEDITOR.htmlParser.element("ol"):new CKEDITOR.htmlParser.element("ul")},createLists:function(a){var b,c,d,e=f.convertToRealListItems(a);if(0===e.length)return[];var h=f.groupLists(e);
+for(a=0;a<h.length;a++){var g=h[a],m=g[0];for(d=0;d<g.length;d++)if(1==g[d].attributes["cke-list-level"]){m=g[d];break}var m=[f.createList(m)],k=m[0],n=[m[0]];k.insertBefore(g[0]);for(d=0;d<g.length;d++){b=g[d];for(c=b.attributes["cke-list-level"];c>m.length;){var p=f.createList(b),l=k.children;0<l.length?l[l.length-1].add(p):(l=new CKEDITOR.htmlParser.element("li",{style:"list-style-type:none"}),l.add(p),k.add(l));m.push(p);n.push(p);k=p;c==m.length&&f.setListSymbol(p,b.attributes["cke-symbol"],
+c)}for(;c<m.length;)m.pop(),k=m[m.length-1],c==m.length&&f.setListSymbol(k,b.attributes["cke-symbol"],c);b.remove();k.add(b)}m[0].children.length&&(d=m[0].children[0].attributes["cke-symbol"],!d&&1<m[0].children.length&&(d=m[0].children[1].attributes["cke-symbol"]),d&&f.setListSymbol(m[0],d));for(d=0;d<n.length;d++)f.setListStart(n[d]);for(d=0;d<g.length;d++)this.determineListItemValue(g[d])}return e},cleanup:function(a){var b=["cke-list-level","cke-symbol","cke-list-id","cke-indentation","cke-dissolved"],
+c,d;for(c=0;c<a.length;c++)for(d=0;d<b.length;d++)delete a[c].attributes[b[d]]},determineListItemValue:function(a){if("ol"===a.parent.name){var b=this.calculateValue(a),c=a.attributes["cke-symbol"].match(/[a-z0-9]+/gi),d;c&&(c=c[c.length-1],d=a.parent.attributes["cke-list-style-type"]||this.numbering.getStyle(c),c=this.numbering.toNumber(c,d),c!==b&&(a.attributes.value=c))}},calculateValue:function(a){if(!a.parent)return 1;var b=a.parent;a=a.getIndex();var c=null,d,e,h;for(h=a;0<=h&&null===c;h--)e=
+b.children[h],e.attributes&&void 0!==e.attributes.value&&(d=h,c=parseInt(e.attributes.value,10));null===c&&(c=void 0!==b.attributes.start?parseInt(b.attributes.start,10):1,d=0);return c+(a-d)},dissolveList:function(a){function b(a){return 50<=a?"l"+b(a-50):40<=a?"xl"+b(a-40):10<=a?"x"+b(a-10):9==a?"ix":5<=a?"v"+b(a-5):4==a?"iv":1<=a?"i"+b(a-1):""}function c(a,b){function c(b,d){return b&&b.parent?a(b.parent)?c(b.parent,d+1):c(b.parent,d):d}return c(b,0)}var d=function(a){return function(b){return b.name==
+a}},e=function(a){return d("ul")(a)||d("ol")(a)},h=CKEDITOR.tools.array,g=[],f,q;a.forEach(function(a){g.push(a)},CKEDITOR.NODE_ELEMENT,!1);f=h.filter(g,d("li"));var n=h.filter(g,e);h.forEach(n,function(a){var g=a.attributes.type,f=parseInt(a.attributes.start,10)||1,k=c(e,a)+1;g||(g=l.parseCssText(a.attributes.style)["list-style-type"]);h.forEach(h.filter(a.children,d("li")),function(c,d){var e;switch(g){case "disc":e="·";break;case "circle":e="o";break;case "square":e="§";break;case "1":case "decimal":e=
+f+d+".";break;case "a":case "lower-alpha":e=String.fromCharCode(97+f-1+d)+".";break;case "A":case "upper-alpha":e=String.fromCharCode(65+f-1+d)+".";break;case "i":case "lower-roman":e=b(f+d)+".";break;case "I":case "upper-roman":e=b(f+d).toUpperCase()+".";break;default:e="ul"==a.name?"·":f+d+"."}c.attributes["cke-symbol"]=e;c.attributes["cke-list-level"]=k})});f=h.reduce(f,function(a,b){var c=b.children[0];if(c&&c.name&&c.attributes.style&&c.attributes.style.match(/mso-list:/i)){k.pushStylesLower(b,
+{"list-style-type":!0,display:!0});var d=l.parseCssText(c.attributes.style,!0);k.setStyle(b,"mso-list",d["mso-list"],!0);k.setStyle(c,"mso-list","");delete b["cke-list-level"];(c=d.display?"display":d.DISPLAY?"DISPLAY":"")&&k.setStyle(b,"display",d[c],!0)}if(1===b.children.length&&e(b.children[0]))return a;b.name="p";b.attributes["cke-dissolved"]=!0;a.push(b);return a},[]);for(q=f.length-1;0<=q;q--)f[q].insertAfter(a);for(q=n.length-1;0<=q;q--)delete n[q].name},groupLists:function(a){var b,c,d=[[a[0]]],
+e=d[0];c=a[0];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||f.getElementIndentation(c);for(b=1;b<a.length;b++){c=a[b];var h=a[b-1];c.attributes["cke-indentation"]=c.attributes["cke-indentation"]||f.getElementIndentation(c);c.previous!==h&&(f.chopDiscontinuousLists(e,d),d.push(e=[]));e.push(c)}f.chopDiscontinuousLists(e,d);return d},chopDiscontinuousLists:function(a,b){for(var c={},d=[[]],e,h=0;h<a.length;h++){var g=c[a[h].attributes["cke-list-level"]],k=this.getListItemInfo(a[h]),
+q,n;g?(n=g.type.match(/alpha/)&&7==g.index?"alpha":n,n="o"==a[h].attributes["cke-symbol"]&&14==g.index?"alpha":n,q=f.getSymbolInfo(a[h].attributes["cke-symbol"],n),k=this.getListItemInfo(a[h]),(g.type!=q.type||e&&k.id!=e.id&&!this.isAListContinuation(a[h]))&&d.push([])):q=f.getSymbolInfo(a[h].attributes["cke-symbol"]);for(e=parseInt(a[h].attributes["cke-list-level"],10)+1;20>e;e++)c[e]&&delete c[e];c[a[h].attributes["cke-list-level"]]=q;d[d.length-1].push(a[h]);e=k}[].splice.apply(b,[].concat([l.indexOf(b,
+a),1],d))},isAListContinuation:function(a){var b=a;do if((b=b.previous)&&b.type===CKEDITOR.NODE_ELEMENT){if(void 0===b.attributes["cke-list-level"])break;if(b.attributes["cke-list-level"]===a.attributes["cke-list-level"])return b.attributes["cke-list-id"]===a.attributes["cke-list-id"]}while(b);return!1},getElementIndentation:function(a){a=l.parseCssText(a.attributes.style);if(a.margin||a.MARGIN){a.margin=a.margin||a.MARGIN;var b={styles:{margin:a.margin}};CKEDITOR.filter.transformationsTools.splitMarginShorthand(b);
+a["margin-left"]=b.styles["margin-left"]}return parseInt(l.convertToPx(a["margin-left"]||"0px"),10)},toArabic:function(a){return a.match(/[ivxl]/i)?a.match(/^l/i)?50+f.toArabic(a.slice(1)):a.match(/^lx/i)?40+f.toArabic(a.slice(1)):a.match(/^x/i)?10+f.toArabic(a.slice(1)):a.match(/^ix/i)?9+f.toArabic(a.slice(2)):a.match(/^v/i)?5+f.toArabic(a.slice(1)):a.match(/^iv/i)?4+f.toArabic(a.slice(2)):a.match(/^i/i)?1+f.toArabic(a.slice(1)):f.toArabic(a.slice(1)):0},getSymbolInfo:function(a,b){var c=a.toUpperCase()==
+a?"upper-":"lower-",d={"·":["disc",-1],o:["circle",-2],"§":["square",-3]};if(a in d||b&&b.match(/(disc|circle|square)/))return{index:d[a][1],type:d[a][0]};if(a.match(/\d/))return{index:a?parseInt(f.getSubsectionSymbol(a),10):0,type:"decimal"};a=a.replace(/\W/g,"").toLowerCase();return!b&&a.match(/[ivxl]+/i)||b&&"alpha"!=b||"roman"==b?{index:f.toArabic(a),type:c+"roman"}:a.match(/[a-z]/i)?{index:a.charCodeAt(0)-97,type:c+"alpha"}:{index:-1,type:"disc"}},getListItemInfo:function(a){if(void 0!==a.attributes["cke-list-id"])return{id:a.attributes["cke-list-id"],
+level:a.attributes["cke-list-level"]};var b=l.parseCssText(a.attributes.style)["mso-list"],c={id:"0",level:"1"};b&&(b+=" ",c.level=b.match(/level(.+?)\s+/)[1],c.id=b.match(/l(\d+?)\s+/)[1]);a.attributes["cke-list-level"]=void 0!==a.attributes["cke-list-level"]?a.attributes["cke-list-level"]:c.level;a.attributes["cke-list-id"]=c.id;return c}};f=CKEDITOR.plugins.pastefromword.lists;CKEDITOR.plugins.pastefromword.heuristics={isEdgeListItem:function(a,b){return CKEDITOR.env.edge&&a.config.pasteFromWord_heuristicsEdgeList?
+b.attributes.style&&!b.attributes.style.match(/mso\-list/)&&!!b.find(function(a){var b=l.parseCssText(a.attributes&&a.attributes.style);if(!b)return!1;var e=b["font-family"]||"";return(b.font||b["font-size"]||"").match(/7pt/i)&&!!a.previous||e.match(/symbol/i)},!0).length:!1},assignListLevels:function(a,b){if(!b.attributes||void 0===b.attributes["cke-list-level"]){for(var c=[f.getElementIndentation(b)],d=[b],e=[],h=CKEDITOR.tools.array,g=h.map;b.next&&b.next.attributes&&!b.next.attributes["cke-list-level"]&&
+u.isEdgeListItem(a,b.next);)b=b.next,c.push(f.getElementIndentation(b)),d.push(b);var k=g(c,function(a,b){return 0===b?0:a-c[b-1]}),l=this.guessIndentationStep(h.filter(c,function(a){return 0!==a})),e=g(c,function(a){return Math.round(a/l)});-1!==h.indexOf(e,0)&&(e=g(e,function(a){return a+1}));h.forEach(d,function(a,b){a.attributes["cke-list-level"]=e[b]});return{indents:c,levels:e,diffs:k}}},guessIndentationStep:function(a){return a.length?Math.min.apply(null,a):null}};u=CKEDITOR.plugins.pastefromword.heuristics;
+f.setListSymbol.removeRedundancies=function(a,b){(1===b&&"disc"===a["list-style-type"]||"decimal"===a["list-style-type"])&&delete a["list-style-type"]};CKEDITOR.plugins.pastefromword.createAttributeStack=x;CKEDITOR.config.pasteFromWord_heuristicsEdgeList=!0})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/dialogs/placeholder.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/dialogs/placeholder.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/dialogs/placeholder.js	(revision 2)
@@ -0,0 +1,49 @@
+
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview Definition for placeholder plugin dialog.
+ *
+ */
+
+'use strict';
+
+CKEDITOR.dialog.add( 'placeholder', function( editor ) {
+	var lang = editor.lang.placeholder,
+		generalLabel = editor.lang.common.generalTab,
+		validNameRegex = /^[^\[\]<>]+$/;
+
+	return {
+		title: lang.title,
+		minWidth: 300,
+		minHeight: 80,
+		contents: [
+			{
+				id: 'info',
+				label: generalLabel,
+				title: generalLabel,
+				elements: [
+					// Dialog window UI elements.
+					{
+						id: 'name',
+						type: 'text',
+						style: 'width: 100%;',
+						label: lang.name,
+						'default': '',
+						required: true,
+						validate: CKEDITOR.dialog.validate.regex( validNameRegex, lang.invalidName ),
+						setup: function( widget ) {
+							this.setValue( widget.data.name );
+						},
+						commit: function( widget ) {
+							widget.setData( 'name', this.getValue() );
+						}
+					}
+				]
+			}
+		]
+	};
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/icons/placeholder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/placeholder/icons/placeholder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/af.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'af', {
+	title: 'Plekhouer eienskappe',
+	toolbar: 'Plekhouer',
+	name: 'Plekhouer naam',
+	invalidName: 'Die plekhouer mag nie leeg wees nie, en kan geen van die volgende karakters bevat nie.  [, ], <, >',
+	pathName: 'plekhouer'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ar.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ar', {
+	title: 'خصائص الربط الموضعي',
+	toolbar: 'الربط الموضعي',
+	name: 'اسم الربط الموضعي',
+	invalidName: 'لا يمكن ترك الربط الموضعي فارغا و لا أن يحتوي على الرموز التالية  [, ], <, >',
+	pathName: 'الربط الموضعي'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/az.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/az.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/az.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'az', {
+	title: 'Yertutanın xüsusiyyətləri',
+	toolbar: 'Yertutan',
+	name: 'Yertutanın adı',
+	invalidName: 'Yertutan boş ola bilməz, həm də [, ], <, > işarələrdən ehtiva edə bilməz',
+	pathName: 'yertutan'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/bg.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'bg', {
+	title: 'Настройки на контейнера',
+	toolbar: 'Нов контейнер',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ca.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ca', {
+	title: 'Propietats del marcador de posició',
+	toolbar: 'Marcador de posició',
+	name: 'Nom del marcador de posició',
+	invalidName: 'El marcador de posició no pot estar en blanc ni pot contenir cap dels caràcters següents: [,],<,>',
+	pathName: 'marcador de posició'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cs.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'cs', {
+	title: 'Vlastnosti vyhrazeného prostoru',
+	toolbar: 'Vytvořit vyhrazený prostor',
+	name: 'Název vyhrazeného prostoru',
+	invalidName: 'Vyhrazený prostor nesmí být prázdný či obsahovat následující znaky: [, ], <, >',
+	pathName: 'Vyhrazený prostor'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/cy.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'cy', {
+	title: 'Priodweddau\'r Daliwr Geiriau',
+	toolbar: 'Daliwr Geiriau',
+	name: 'Enw\'r Daliwr Geiriau',
+	invalidName: 'Dyw\'r daliwr geiriau methu â bod yn wag ac na all gynnyws y nodau [, ], <, > ',
+	pathName: 'daliwr geiriau'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/da.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'da', {
+	title: 'Egenskaber for pladsholder',
+	toolbar: 'Opret pladsholder',
+	name: 'Navn på pladsholder',
+	invalidName: 'Pladsholderen kan ikke være tom og må ikke indeholde nogen af følgende tegn: [, ], <, >',
+	pathName: 'pladsholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de-ch.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de-ch.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de-ch.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'de-ch', {
+	title: 'Platzhaltereinstellungen',
+	toolbar: 'Platzhalter',
+	name: 'Platzhaltername',
+	invalidName: 'Der Platzhalter darf nicht leer sein und folgende Zeichen nicht enthalten: [, ], <, >',
+	pathName: 'Platzhalter'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/de.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'de', {
+	title: 'Platzhaltereinstellungen',
+	toolbar: 'Platzhalter',
+	name: 'Platzhaltername',
+	invalidName: 'Der Platzhalter darf nicht leer sein und folgende Zeichen nicht enthalten: [, ], <, >',
+	pathName: 'Platzhalter'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/el.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'el', {
+	title: 'Ιδιότητες Υποκαθιστόμενου Κειμένου',
+	toolbar: 'Δημιουργία Υποκαθιστόμενου Κειμένου',
+	name: 'Όνομα Υποκαθιστόμενου Κειμένου',
+	invalidName: 'Το υποκαθιστόμενου κειμένο πρέπει να μην είναι κενό και να μην έχει κανέναν από τους ακόλουθους χαρακτήρες: [, ], <, >',
+	pathName: 'υποκαθιστόμενο κείμενο'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en-gb.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'en-gb', {
+	title: 'Placeholder Properties',
+	toolbar: 'Placeholder',
+	name: 'Placeholder Name',
+	invalidName: 'The placeholder can not be empty and can not contain any of the following characters: [, ], <, >',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/en.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'en', {
+	title: 'Placeholder Properties',
+	toolbar: 'Placeholder',
+	name: 'Placeholder Name',
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eo.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'eo', {
+	title: 'Atributoj de la rezervita spaco',
+	toolbar: 'Rezervita Spaco',
+	name: 'Nomo de la rezervita spaco',
+	invalidName: 'La rezervita spaco ne povas esti malplena kaj ne povas enteni la sekvajn signojn : [, ], <, >',
+	pathName: 'rezervita spaco'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/es.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'es', {
+	title: 'Propiedades del Marcador de Posición',
+	toolbar: 'Crear Marcador de Posición',
+	name: 'Nombre del Marcador de Posición',
+	invalidName: 'El marcador de posición no puede estar vacío y no puede contener ninguno de los siguientes caracteres: [, ], <, >',
+	pathName: 'marcador de posición'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/et.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'et', {
+	title: 'Kohahoidja omadused',
+	toolbar: 'Kohahoidja loomine',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/eu.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'eu', {
+	title: 'Leku-marka propietateak',
+	toolbar: 'Leku-marka',
+	name: 'Leku-markaren izena',
+	invalidName: 'Leku-markak ezin du hutsik egon eta ezin ditu karaktere hauek eduki: [, ], <, >',
+	pathName: 'leku-marka'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fa.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'fa', {
+	title: 'ویژگی‌های محل نگهداری',
+	toolbar: 'ایجاد یک محل نگهداری',
+	name: 'نام مکان نگهداری',
+	invalidName: 'مکان نگهداری نمی‌تواند خالی باشد و همچنین نمی‌تواند محتوی نویسه‌های مقابل باشد: [, ], <, >',
+	pathName: 'مکان نگهداری'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fi.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'fi', {
+	title: 'Paikkamerkin ominaisuudet',
+	toolbar: 'Luo paikkamerkki',
+	name: 'Paikkamerkin nimi',
+	invalidName: 'Paikkamerkki ei voi olla tyhjä eikä sisältää seuraavia merkkejä: [, ], <, >',
+	pathName: 'paikkamerkki'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'fr-ca', {
+	title: 'Propriétés de l\'espace réservé',
+	toolbar: 'Créer un espace réservé',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/fr.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'fr', {
+	title: 'Propriétés de l\'espace réservé',
+	toolbar: 'Espace réservé',
+	name: 'Nom de l\'espace réservé',
+	invalidName: 'L\'espace réservé ne peut pas être vide ni contenir l\'un de ces caractères : [, ], <, >',
+	pathName: 'espace réservé'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/gl.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'gl', {
+	title: 'Propiedades do marcador de posición',
+	toolbar: 'Crear un marcador de posición',
+	name: 'Nome do marcador de posición',
+	invalidName: 'O marcador de posición non pode estar baleiro e non pode conter ningún dos caracteres seguintes: [, ], <, >',
+	pathName: 'marcador de posición'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/he.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'he', {
+	title: 'מאפייני שומר מקום',
+	toolbar: 'צור שומר מקום',
+	name: 'שם שומר מקום',
+	invalidName: 'שומר מקום לא יכול להיות ריק ולא יכול להכיל את הסימנים: [, ], <, >',
+	pathName: 'שומר מקום'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hr.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'hr', {
+	title: 'Svojstva rezerviranog mjesta',
+	toolbar: 'Napravi rezervirano mjesto',
+	name: 'Ime rezerviranog mjesta',
+	invalidName: 'Rezervirano mjesto ne može biti prazno niti može sadržavati ijedan od sljedećih znakova: [, ], <, >',
+	pathName: 'rezervirano mjesto'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/hu.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'hu', {
+	title: 'Helytartó beállítások',
+	toolbar: 'Helytartó készítése',
+	name: 'Helytartó neve',
+	invalidName: 'A helytartó nem lehet üres, és nem tartalmazhatja a következő karaktereket:[, ], <, > ',
+	pathName: 'helytartó'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/id.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/id.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/id.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'id', {
+	title: 'Properti isian sementara',
+	toolbar: 'Buat isian sementara',
+	name: 'Nama Isian Sementara',
+	invalidName: 'Isian sementara tidak boleh kosong dan tidak boleh mengandung karakter berikut: [, ], <, >',
+	pathName: 'isian sementara'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/it.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'it', {
+	title: 'Proprietà segnaposto',
+	toolbar: 'Crea segnaposto',
+	name: 'Nome segnaposto',
+	invalidName: 'Il segnaposto non può essere vuoto e non può contenere nessuno dei seguenti caratteri: [, ], <, >',
+	pathName: 'segnaposto'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ja.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ja', {
+	title: 'プレースホルダのプロパティ',
+	toolbar: 'プレースホルダを作成',
+	name: 'プレースホルダ名',
+	invalidName: 'プレースホルダは空欄にできません。また、[, ], <, > の文字は使用できません。',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/km.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'km', {
+	title: 'លក្ខណៈ Placeholder',
+	toolbar: 'បង្កើត Placeholder',
+	name: 'ឈ្មោះ Placeholder',
+	invalidName: 'Placeholder មិន​អាច​ទទេរ ហើយក៏​មិន​អាច​មាន​តួ​អក្សរ​ទាំង​នេះ​ទេ៖ [, ], <, >',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ko.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ko', {
+	title: '플레이스홀더 속성',
+	toolbar: '플레이스홀더',
+	name: '플레이스홀더 이름',
+	invalidName: '플레이스홀더는 빈칸이거나 다음 문자열을 포함할 수 없습니다: [, ], <, >',
+	pathName: '플레이스홀더'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ku.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ku', {
+	title: 'خاسیەتی شوێن هەڵگر',
+	toolbar: 'درووستکردنی شوێن هەڵگر',
+	name: 'ناوی شوێنگر',
+	invalidName: 'شوێنگر نابێت بەتاڵ بێت یان هەریەکێک لەم نووسانەی خوارەوەی تێدابێت: [, ], <, >',
+	pathName: 'شوێنگر'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/lv.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'lv', {
+	title: 'Viettura uzstādījumi',
+	toolbar: 'Izveidot vietturi',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nb.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'nb', {
+	title: 'Egenskaper for plassholder',
+	toolbar: 'Opprett plassholder',
+	name: 'Navn på plassholder',
+	invalidName: 'Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >',
+	pathName: 'plassholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/nl.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'nl', {
+	title: 'Eigenschappen placeholder',
+	toolbar: 'Placeholder aanmaken',
+	name: 'Naam placeholder',
+	invalidName: 'De placeholder mag niet leeg zijn, en mag niet een van de volgende tekens bevatten: [, ], <, >',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/no.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'no', {
+	title: 'Egenskaper for plassholder',
+	toolbar: 'Opprett plassholder',
+	name: 'Navn på plassholder',
+	invalidName: 'Plassholderen kan ikke være tom, og kan ikke inneholde følgende tegn: [, ], <, >',
+	pathName: 'plassholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/oc.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/oc.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/oc.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'oc', {
+	title: 'Proprietats de l\'espaci reservat',
+	toolbar: 'Espaci reservat',
+	name: 'Nom de l\'espaci reservat',
+	invalidName: 'L\'espaci reservat pòt pas èsser void ni conténer un d\'aquestes caractèrs : [, ], <, >',
+	pathName: 'espaci reservat'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pl.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'pl', {
+	title: 'Właściwości wypełniacza',
+	toolbar: 'Utwórz wypełniacz',
+	name: 'Nazwa wypełniacza',
+	invalidName: 'Wypełniacz nie może być pusty ani nie może zawierać żadnego z następujących znaków: [, ], < oraz >',
+	pathName: 'wypełniacz'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt-br.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'pt-br', {
+	title: 'Propriedades do Espaço Reservado',
+	toolbar: 'Criar Espaço Reservado',
+	name: 'Nome do Espaço Reservado',
+	invalidName: 'O espaço reservado não pode estar vazio e não pode conter nenhum dos seguintes caracteres:  [, ], <, >',
+	pathName: 'Espaço Reservado'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/pt.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'pt', {
+	title: 'Propriedades dos marcadores',
+	toolbar: 'Marcador',
+	name: 'Nome do marcador',
+	invalidName: 'O marcador não pode estar em branco e não pode conter qualquer dos seguintes carateres: [, ], <, >',
+	pathName: 'marcador'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ru.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ru', {
+	title: 'Свойства плейсхолдера',
+	toolbar: 'Создать плейсхолдер',
+	name: 'Имя плейсхолдера',
+	invalidName: 'Плейсхолдер не может быть пустым и содержать один из следующих символов: "[, ], <, >"',
+	pathName: 'плейсхолдер'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/si.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'si', {
+	title: 'ස්ථාන හීම්කරුගේ ',
+	toolbar: 'ස්ථාන හීම්කරු නිර්මාණය කිරීම',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sk.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'sk', {
+	title: 'Vlastnosti placeholdera',
+	toolbar: 'Vytvoriť placeholder',
+	name: 'Názov placeholdera',
+	invalidName: 'Placeholder nemôže byť prázdny a nemôže obsahovať žiadny z nasledujúcich znakov: [,],<,>',
+	pathName: 'placeholder'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sl.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'sl', {
+	title: 'Lastnosti ograde',
+	toolbar: 'Ograda',
+	name: 'Ime ograde',
+	invalidName: 'Ograda ne more biti prazna in ne sme vsebovati katerega od naslednjih znakov: [, ], <, >',
+	pathName: 'ograda'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sq.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sq.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sq.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'sq', {
+	title: 'Karakteristikat e Mbajtësit të Vendit',
+	toolbar: 'Krijo Mabjtës Vendi',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/sv.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'sv', {
+	title: 'Innehållsrutans egenskaper',
+	toolbar: 'Skapa innehållsruta',
+	name: 'Innehållsrutans namn',
+	invalidName: 'Innehållsrutan får inte vara tom och får inte innehålla någon av följande tecken: [, ], <, >',
+	pathName: 'innehållsruta'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/th.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'th', {
+	title: 'คุณสมบัติเกี่ยวกับตัวยึด',
+	toolbar: 'สร้างตัวยึด',
+	name: 'Placeholder Name', // MISSING
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tr.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'tr', {
+	title: 'Yer tutucu özellikleri',
+	toolbar: 'Yer tutucu oluşturun',
+	name: 'Yer Tutucu Adı',
+	invalidName: 'Yer tutucu adı boş bırakılamaz ve şu karakterleri içeremez: [, ], <, >',
+	pathName: 'yertutucu'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/tt.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'tt', {
+	title: 'Тутырма үзлекләре',
+	toolbar: 'Тутырма',
+	name: 'Тутырма исеме',
+	invalidName: 'Тутырма буш булмаска тиеш һәм эчендә алдагы символлар булмаска тиеш: [, ], <, >',
+	pathName: 'тутырма'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/ug.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'ug', {
+	title: 'ئورۇن بەلگە خاسلىقى',
+	toolbar: 'ئورۇن بەلگە قۇر',
+	name: 'ئورۇن بەلگە ئىسمى',
+	invalidName: 'The placeholder can not be empty and can not contain any of following characters: [, ], <, >', // MISSING
+	pathName: 'placeholder' // MISSING
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/uk.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'uk', {
+	title: 'Налаштування Заповнювача',
+	toolbar: 'Створити Заповнювач',
+	name: 'Назва заповнювача',
+	invalidName: 'Заповнювач не може бути порожнім і не може містити наступні символи: [, ], <, >',
+	pathName: 'заповнювач'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/vi.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'vi', {
+	title: 'Thuộc tính đặt chỗ',
+	toolbar: 'Tạo đặt chỗ',
+	name: 'Tên giữ chỗ',
+	invalidName: 'Giữ chỗ không thể để trống và không thể chứa bất kỳ ký tự sau: [,], <, >',
+	pathName: 'giữ chỗ'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'zh-cn', {
+	title: '占位符属性',
+	toolbar: '占位符',
+	name: '占位符名称',
+	invalidName: '占位符名称不能为空，并且不能包含以下字符：[、]、<、>',
+	pathName: '占位符'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/lang/zh.js	(revision 2)
@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'placeholder', 'zh', {
+	title: '預留位置屬性',
+	toolbar: '建立預留位置',
+	name: 'Placeholder 名稱',
+	invalidName: '「預留位置」不可為空白且不可包含以下字元：[, ], <, >',
+	pathName: '預留位置'
+} );
Index: trunk/modules/ckeditor/ckeditor/plugins/placeholder/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/placeholder/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/placeholder/plugin.js	(revision 2)
@@ -0,0 +1,99 @@
+﻿/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The "placeholder" plugin.
+ *
+ */
+
+'use strict';
+
+( function() {
+	CKEDITOR.plugins.add( 'placeholder', {
+		requires: 'widget,dialog',
+		lang: 'af,ar,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ru,si,sk,sl,sq,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+		icons: 'placeholder', // %REMOVE_LINE_CORE%
+		hidpi: true, // %REMOVE_LINE_CORE%
+
+		onLoad: function() {
+			// Register styles for placeholder widget frame.
+			CKEDITOR.addCss( '.cke_placeholder{background-color:#ff0}' );
+		},
+
+		init: function( editor ) {
+
+			var lang = editor.lang.placeholder;
+
+			// Register dialog.
+			CKEDITOR.dialog.add( 'placeholder', this.path + 'dialogs/placeholder.js' );
+
+			// Put ur init code here.
+			editor.widgets.add( 'placeholder', {
+				// Widget code.
+				dialog: 'placeholder',
+				pathName: lang.pathName,
+				// We need to have wrapping element, otherwise there are issues in
+				// add dialog.
+				template: '<span class="cke_placeholder">[[]]</span>',
+
+				downcast: function() {
+					return new CKEDITOR.htmlParser.text( '[[' + this.data.name + ']]' );
+				},
+
+				init: function() {
+					// Note that placeholder markup characters are stripped for the name.
+					this.setData( 'name', this.element.getText().slice( 2, -2 ) );
+				},
+
+				data: function() {
+					this.element.setText( '[[' + this.data.name + ']]' );
+				},
+
+				getLabel: function() {
+					return this.editor.lang.widget.label.replace( /%1/, this.data.name + ' ' + this.pathName );
+				}
+			} );
+
+			editor.ui.addButton && editor.ui.addButton( 'CreatePlaceholder', {
+				label: lang.toolbar,
+				command: 'placeholder',
+				toolbar: 'insert,5',
+				icon: 'placeholder'
+			} );
+		},
+
+		afterInit: function( editor ) {
+			var placeholderReplaceRegex = /\[\[([^\[\]])+\]\]/g;
+
+			editor.dataProcessor.dataFilter.addRules( {
+				text: function( text, node ) {
+					var dtd = node.parent && CKEDITOR.dtd[ node.parent.name ];
+
+					// Skip the case when placeholder is in elements like <title> or <textarea>
+					// but upcast placeholder in custom elements (no DTD).
+					if ( dtd && !dtd.span )
+						return;
+
+					return text.replace( placeholderReplaceRegex, function( match ) {
+						// Creating widget code.
+						var widgetWrapper = null,
+							innerElement = new CKEDITOR.htmlParser.element( 'span', {
+								'class': 'cke_placeholder'
+							} );
+
+						// Adds placeholder identifier as innertext.
+						innerElement.add( new CKEDITOR.htmlParser.text( match ) );
+						widgetWrapper = editor.widgets.wrapElement( innerElement, 'placeholder' );
+
+						// Return outerhtml of widget wrapper so it will be placed
+						// as replacement.
+						return widgetWrapper.getOuterHtml();
+					} );
+				}
+			} );
+		}
+	} );
+
+} )();
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/CHANGELOG.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/CHANGELOG.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/CHANGELOG.md	(revision 2)
@@ -0,0 +1,20 @@
+SCAYT plugin for CKEditor 4 Changelog
+====================
+### CKEditor 4.5.6
+
+New Features:
+* CKEditor [language addon](http://ckeditor.com/addon/language) support
+* CKEditor [placeholder addon](http://ckeditor.com/addon/placeholder) support
+* Drag and Drop support
+* *Experimental* GRAYT functionality http://www.webspellchecker.net/samples/scayt-ckeditor-plugin.html#25
+
+Fixed issues:
+* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98) SCAYT Affects Dialog Double Click. Fixed in SCAYT Core.
+* [#102](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/102) SCAYT Core performance enhancements
+* [#104](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/104) SCAYT's spans leak into the clipboard and after pasting
+* [#105](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/105) Javascript error fired in case of multiple instances of CKEditor in one page
+* [#107](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/107) SCAYT should not check non-editable parts of content
+* [#108](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/108) Latest SCAYT copies id of editor element to the iframe
+* SCAYT stops working when CKEditor Undo plug-in not enabled
+* Issue with pasting SCAYT markup in CKEditor
+* [#32](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/32) SCAYT stops working after pressing Cancel button in WSC dialog
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/LICENSE.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/LICENSE.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/LICENSE.md	(revision 2)
@@ -0,0 +1,28 @@
+Software License Agreement
+==========================
+
+**CKEditor SCAYT Plugin**
+Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your choice:
+
+*   GNU General Public License Version 2 or later (the "GPL"):
+    http://www.gnu.org/licenses/gpl.html
+
+*   GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
+    http://www.gnu.org/licenses/lgpl.html
+
+*   Mozilla Public License Version 1.1 or later (the "MPL"):
+    http://www.mozilla.org/MPL/MPL-1.1.html
+
+You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
+
+Sources of Intellectual Property Included in this plugin
+--------------------------------------------------------
+
+Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
+
+Trademarks
+----------
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/README.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/README.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/README.md	(revision 2)
@@ -0,0 +1,25 @@
+CKEditor SCAYT Plugin
+=====================
+
+This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+.
+
+SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
+
+Installation
+------------
+
+1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation.
+2. Enable the "scayt" plugin in the CKEditor configuration file (config.js):
+
+        config.extraPlugins = 'scayt';
+
+That's all. SCAYT will appear on the editor toolbar and will be ready to use.
+
+License
+-------
+
+Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
+
+See LICENSE.md for more information.
+
+Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/options.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/options.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/options.js	(revision 2)
@@ -0,0 +1,19 @@
+﻿CKEDITOR.dialog.add("scaytDialog",function(d){var f=d.scayt,p='\x3cp\x3e\x3cimg src\x3d"'+f.getLogo()+'" /\x3e\x3c/p\x3e\x3cp\x3e'+f.getLocal("version")+f.getVersion()+"\x3c/p\x3e\x3cp\x3e"+f.getLocal("text_copyrights")+"\x3c/p\x3e",q=CKEDITOR.document,l={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:f.getLang(),newLang:null,reset:function(){this.currentLang=f.getLang();this.newLang=null},id:"lang"},p=[{id:"options",label:f.getLocal("tab_options"),
+onShow:function(){},elements:[{type:"vbox",id:"scaytOptions",children:function(){var a=f.getApplicationConfig(),b=[],e={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},h;for(h in a)a={type:"checkbox"},a.id=h,a.label=f.getLocal(e[h]),b.push(a);return b}(),onShow:function(){this.getChild();for(var a=d.scayt,b=0;b<this.getChild().length;b++)this.getChild()[b].setValue(a.getApplicationConfig()[this.getChild()[b].id])}}]},
+{id:"langs",label:f.getLocal("tab_languages"),elements:[{id:"leftLangColumn",type:"vbox",align:"left",widths:["100"],children:[{type:"html",id:"langBox",style:"overflow: hidden; white-space: normal;margin-bottom:15px;",html:'\x3cdiv\x3e\x3cdiv style\x3d"float:left;width:45%;margin-left:5px;" id\x3d"left-col-'+d.name+'" class\x3d"scayt-lang-list"\x3e\x3c/div\x3e\x3cdiv style\x3d"float:left;width:45%;margin-left:15px;" id\x3d"right-col-'+d.name+'" class\x3d"scayt-lang-list"\x3e\x3c/div\x3e\x3c/div\x3e',
+onShow:function(){var a=d.scayt.getLang();q.getById("scaytLang_"+d.name+"_"+a).$.checked=!0}},{type:"html",id:"graytLanguagesHint",html:'\x3cdiv style\x3d"margin:5px auto; width:95%;white-space:normal;" id\x3d"'+d.name+'graytLanguagesHint"\x3e\x3cspan style\x3d"width:10px;height:10px;display: inline-block; background:#02b620;vertical-align:top;margin-top:2px;"\x3e\x3c/span\x3e - This languages are supported by Grammar As You Type(GRAYT).\x3c/div\x3e',onShow:function(){var a=q.getById(d.name+"graytLanguagesHint");
+d.config.grayt_autoStartup||(a.$.style.display="none")}}]}]},{id:"dictionaries",label:f.getLocal("tab_dictionaries"),elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:f.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var b=a.sender,e=d.scayt;setTimeout(function(){b.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=e.getUserDictionaryName()&&""!=e.getUserDictionaryName()&&
+b.getContentElement("dictionaries","dictionaryName").setValue(e.getUserDictionaryName())},0)}},{type:"hbox",id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:f.getLocal("btn_createDic"),title:f.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),b=n,e=d.scayt,h=a.getContentElement("dictionaries","dictionaryName").getValue();e.createUserDictionary(h,function(c){c.error||b.toggleDictionaryButtons.call(a,!0);c.dialog=
+a;c.command="create";c.name=h;d.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create";c.name=h;d.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:f.getLocal("btn_restoreDic"),title:f.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),b=d.scayt,e=n,h=a.getContentElement("dictionaries","dictionaryName").getValue();b.restoreUserDictionary(h,function(c){c.dialog=a;c.error||e.toggleDictionaryButtons.call(a,!0);c.command="restore";
+c.name=h;d.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=h;d.fire("scaytUserDictionaryActionError",c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:f.getLocal("btn_deleteDic"),title:f.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),b=d.scayt,e=n,h=a.getContentElement("dictionaries","dictionaryName"),c=h.getValue();b.removeUserDictionary(c,function(b){h.setValue("");
+b.error||e.toggleDictionaryButtons.call(a,!1);b.dialog=a;b.command="remove";b.name=c;d.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="remove";b.name=c;d.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:f.getLocal("btn_renameDic"),title:f.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),b=d.scayt,e=a.getContentElement("dictionaries","dictionaryName").getValue();b.renameUserDictionary(e,function(b){b.dialog=a;b.command="rename";
+b.name=e;d.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="rename";b.name=e;d.fire("scaytUserDictionaryActionError",b)})}}]},{type:"html",id:"dicInfo",html:'\x3cdiv id\x3d"dic_info_editor1" style\x3d"margin:5px auto; width:95%;white-space:normal;"\x3e'+f.getLocal("text_descriptionDic")+"\x3c/div\x3e"}]}]},{id:"about",label:f.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'\x3cdiv\x3e\x3cdiv id\x3d"scayt_about_"\x3e'+p+"\x3c/div\x3e\x3c/div\x3e"}]}];
+d.on("scaytUserDictionaryAction",function(a){var b=SCAYT.prototype.UILib,e=a.data.dialog,d=e.getContentElement("dictionaries","dictionaryNote").getElement(),c=a.editor.scayt,g;void 0===a.data.error?(g=c.getLocal("message_success_"+a.data.command+"Dic"),g=g.replace("%s",a.data.name),d.setText(g),b.css(d.$,{color:"blue"})):(""===a.data.name?d.setText(c.getLocal("message_info_emptyDic")):(g=c.getLocal("message_error_"+a.data.command+"Dic"),g=g.replace("%s",a.data.name),d.setText(g)),b.css(d.$,{color:"red"}),
+null!=c.getUserDictionaryName()&&""!=c.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(c.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))});d.on("scaytUserDictionaryActionError",function(a){var b=SCAYT.prototype.UILib,e=a.data.dialog,d=e.getContentElement("dictionaries","dictionaryNote").getElement(),c=a.editor.scayt,g;""===a.data.name?d.setText(c.getLocal("message_info_emptyDic")):(g=c.getLocal("message_error_"+a.data.command+
+"Dic"),g=g.replace("%s",a.data.name),d.setText(g));b.css(d.$,{color:"red"});null!=c.getUserDictionaryName()&&""!=c.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(c.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue("")});var n={title:f.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:"moono-lisa"==(CKEDITOR.skinName||d.config.skin)?450:340,minHeight:260,onLoad:function(){if(0!=d.config.scayt_uiTabs[1]){var a=
+n,b=a.getLangBoxes.call(this);b.getParent().setStyle("white-space","normal");a.renderLangList(b);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){l.reset()},onHide:function(){d.unlockSelection()},onShow:function(){d.fire("scaytDialogShown",this);if(0!=d.config.scayt_uiTabs[2]){var a=d.scayt,b=this.getContentElement("dictionaries","dictionaryName"),e=this.getContentElement("dictionaries","existDic").getElement().getParent(),
+h=this.getContentElement("dictionaries","notExistDic").getElement().getParent();e.hide();h.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),e.show()):(b.setValue(""),h.show())}},onOk:function(){var a=n,b=d.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);b.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var b=this.getContentElement("dictionaries",
+"existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(b.show(),d.hide()):(b.hide(),d.show())},getChangedOption:function(){var a={};if(1==d.config.scayt_uiTabs[0])for(var b=this.getContentElement("options","scaytOptions").getChild(),e=0;e<b.length;e++)b[e].isChanged()&&(a[b[e].id]=b[e].getValue());l.isChanged()&&(a[l.id]=d.config.scayt_sLang=l.currentLang=l.newLang);return a},buildRadioInputs:function(a,b,e){var h=new CKEDITOR.dom.element("div"),
+c="scaytLang_"+d.name+"_"+b,g=CKEDITOR.dom.element.createFromHtml('\x3cinput id\x3d"'+c+'" type\x3d"radio"  value\x3d"'+b+'" name\x3d"scayt_lang" /\x3e'),f=new CKEDITOR.dom.element("label"),m=d.scayt;h.setStyles({"white-space":"normal",position:"relative","padding-bottom":"2px"});g.on("click",function(a){l.newLang=a.sender.getValue()});f.appendText(a);f.setAttribute("for",c);e&&d.config.grayt_autoStartup&&f.setStyles({color:"#02b620"});h.append(g);h.append(f);b===m.getLang()&&(g.setAttribute("checked",
+!0),g.setAttribute("defaultChecked","defaultChecked"));return h},renderLangList:function(a){var b=a.find("#left-col-"+d.name).getItem(0);a=a.find("#right-col-"+d.name).getItem(0);var e=f.getScaytLangList(),h=f.getGraytLangList(),c={},g=[],l=0,m=!1,k;for(k in e.ltr)c[k]=e.ltr[k];for(k in e.rtl)c[k]=e.rtl[k];for(k in c)g.push([k,c[k]]);g.sort(function(a,b){var c=0;a[1]>b[1]?c=1:a[1]<b[1]&&(c=-1);return c});c={};for(m=0;m<g.length;m++)c[g[m][0]]=g[m][1];g=Math.round(g.length/2);for(k in c)l++,m=k in
+h.ltr||k in h.rtl,this.buildRadioInputs(c[k],k,m).appendTo(l<=g?b:a)},getLangBoxes:function(){return this.getContentElement("langs","langBox").getElement()},contents:function(a,b){var d=[],f=b.config.scayt_uiTabs;if(f){for(var c in f)1==f[c]&&d.push(a[c]);d.push(a[a.length-1])}else return a;return d}(p,d)};return n});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/toolbar.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/toolbar.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/dialogs/toolbar.css	(revision 2)
@@ -0,0 +1,71 @@
+a
+{
+	text-decoration:none;
+	padding: 2px 4px 4px 6px;
+	display : block;
+	border-width: 1px;
+	border-style: solid;
+	margin : 0px;
+}
+
+a.cke_scayt_toogle:hover,
+a.cke_scayt_toogle:focus,
+a.cke_scayt_toogle:active
+{
+	border-color: #316ac5;
+	background-color: #dff1ff;
+	color : #000;
+	cursor: pointer;
+	margin : 0px;
+}
+a.cke_scayt_toogle {
+	color : #316ac5;
+	border-color: #fff;
+}
+.scayt_enabled a.cke_scayt_item {
+	color : #316ac5;
+	border-color: #fff;
+	margin : 0px;
+}
+.scayt_disabled a.cke_scayt_item {
+	color : gray;
+	border-color : #fff;
+}
+.scayt_enabled a.cke_scayt_item:hover,
+.scayt_enabled a.cke_scayt_item:focus,
+.scayt_enabled a.cke_scayt_item:active
+{
+	border-color: #316ac5;
+	background-color: #dff1ff;
+	color : #000;
+	cursor: pointer;
+}
+.scayt_disabled a.cke_scayt_item:hover,
+.scayt_disabled a.cke_scayt_item:focus,
+.scayt_disabled a.cke_scayt_item:active
+{
+	border-color: gray;
+	background-color: #dff1ff;
+	color : gray;
+	cursor: no-drop;
+}
+.cke_scayt_set_on, .cke_scayt_set_off
+{
+	display: none;
+}
+.scayt_enabled .cke_scayt_set_on
+{
+	display: none;
+}
+.scayt_disabled .cke_scayt_set_on
+{
+	display: inline;
+}
+.scayt_disabled .cke_scayt_set_off
+{
+	display: none;
+}
+.scayt_enabled  .cke_scayt_set_off
+{
+	display: inline;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css	(revision 2)
@@ -0,0 +1,20 @@
+.scayt-lang-list > div
+{
+    padding-bottom: 6px !important;
+}
+
+.scayt-lang-list > div input
+{
+    margin-right: 4px;
+}
+
+#scayt_about_
+{
+    width: 190px;
+    margin: 30px auto 0 auto;
+}
+
+.cke_dialog_contents_body div[name=dictionaries] .cke_dialog_ui_hbox_last > a.cke_dialog_ui_button
+{
+    margin-top: 0;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_address.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_address.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_blockquote.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_blockquote.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_div.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_div.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h4.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h5.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h5.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h6.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_h6.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_p.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_p.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_pre.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/showblocks/images/block_pre.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/images/_shybutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/shybutton/images/_shybutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/images/shybutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/shybutton/images/shybutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/de.js	(revision 2)
@@ -0,0 +1,3 @@
+﻿CKEDITOR.plugins.setLang( 'shybutton', 'de', {
+	insBtn : 'Ein bedingtes Trennzeichen einfügen'
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/en.js	(revision 2)
@@ -0,0 +1,3 @@
+﻿CKEDITOR.plugins.setLang( 'shybutton', 'en', {
+	insBtn : 'Insert a conditioned separator' // translation needed
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/shybutton/lang/nl.js	(revision 2)
@@ -0,0 +1,3 @@
+﻿CKEDITOR.plugins.setLang( 'shybutton', 'nl', {
+	insBtn : 'Insert a conditioned separator' // translation needed
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/shybutton/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/shybutton/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/shybutton/plugin.js	(revision 2)
@@ -0,0 +1,16 @@
+﻿/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+//(function(){CKEDITOR.plugins.add('shybutton',{lang:['en','de','nl'],init:function(a){a.addCommand('insertShybutton',{exec:function(b){b.insertHtml('&#173;');}});a.ui.addButton('Shy',{label:a.lang.shybutton.insBtn,command:'insertShybutton',icon:this.path+'images/shybutton.png'});}});})();
+CKEDITOR.plugins.add('shybutton',{
+	lang: 'en,de,nl',
+	init:function(editor){
+		editor.addCommand('insertShybutton',{exec:function(b){b.insertHtml('&#173;');}});
+		editor.ui.addButton('Shy',{
+			label: editor.lang.shybutton.insBtn,
+			command: 'insertShybutton',
+			icon: this.path+'images/shybutton.png'
+		});
+	}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/dialogs/smiley.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/smiley/dialogs/smiley.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/smiley/dialogs/smiley.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,k,m=function(l){var c=l.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);k.hide();l.data.preventDefault()},q=CKEDITOR.tools.addFunction(function(a,c){a=
+new CKEDITOR.dom.event(a);c=new CKEDITOR.dom.element(c);var b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:(b=c.getParent().getParent().getNext())&&(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:m({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0);
+else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['\x3cdiv\x3e\x3cspan id\x3d"'+d+'" class\x3d"cke_voice_label"\x3e'+a.options+"\x3c/span\x3e",'\x3ctable role\x3d"listbox" aria-labelledby\x3d"'+
+d+'" style\x3d"width:100%;height:100%;border-collapse:separate;" cellspacing\x3d"2" cellpadding\x3d"2"',CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style\x3d"position:absolute;"':"","\x3e\x3ctbody\x3e"],n=h.length,a=0;a<n;a++){0===a%g&&d.push('\x3ctr role\x3d"presentation"\x3e');var p="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('\x3ctd class\x3d"cke_dark_background cke_centered" style\x3d"vertical-align: middle;" role\x3d"presentation"\x3e\x3ca href\x3d"javascript:void(0)" role\x3d"option"',
+' aria-posinset\x3d"'+(a+1)+'"',' aria-setsize\x3d"'+n+'"',' aria-labelledby\x3d"'+p+'"',' class\x3d"cke_smile cke_hand" tabindex\x3d"-1" onkeydown\x3d"CKEDITOR.tools.callFunction( ',q,', event, this );"\x3e','\x3cimg class\x3d"cke_hand" title\x3d"',e.smiley_descriptions[a],'" cke_src\x3d"',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'" alt\x3d"',e.smiley_descriptions[a],'"',' src\x3d"',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'"',CKEDITOR.env.ie?" onload\x3d\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":
+"",'\x3e\x3cspan id\x3d"'+p+'" class\x3d"cke_voice_label"\x3e'+e.smiley_descriptions[a]+"\x3c/span\x3e\x3c/a\x3e","\x3c/td\x3e");a%g==g-1&&d.push("\x3c/tr\x3e")}if(a<g-1){for(;a<g-1;a++)d.push("\x3ctd\x3e\x3c/td\x3e");d.push("\x3c/tr\x3e")}d.push("\x3c/tbody\x3e\x3c/table\x3e\x3c/div\x3e");e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){k=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:m,style:"width: 100%; border-collapse: separate;"};
+return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angel_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angel_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angel_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angel_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angry_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angry_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angry_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/angry_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/broken_heart.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/broken_heart.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/broken_heart.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/broken_heart.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/confused_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/confused_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/confused_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/confused_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/cry_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/cry_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/cry_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/cry_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/devil_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/devil_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/devil_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/devil_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embaressed_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embaressed_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embarrassed_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embarrassed_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embarrassed_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/embarrassed_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/envelope.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/envelope.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/envelope.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/envelope.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/heart.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/heart.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/heart.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/heart.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/kiss.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/kiss.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/kiss.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/kiss.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/lightbulb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/lightbulb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/lightbulb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/lightbulb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/omg_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/omg_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/omg_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/omg_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/regular_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/regular_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/regular_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/regular_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/sad_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/sad_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/sad_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/sad_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/shades_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/shades_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/shades_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/shades_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/teeth_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/teeth_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/teeth_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/teeth_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_down.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_down.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_down.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tongue_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tongue_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tongue_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tongue_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tounge_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/tounge_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/wink_smile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/wink_smile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/wink_smile.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/smiley/images/wink_smile.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js	(revision 2)
@@ -0,0 +1,6 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("sourcedialog",function(a){var b=CKEDITOR.document.getWindow().getViewPaneSize(),e=Math.min(b.width-70,800),b=b.height/1.5,d;return{title:a.lang.sourcedialog.title,minWidth:100,minHeight:100,onShow:function(){this.setValueOf("main","data",d=a.getData())},onOk:function(){function b(f,c){a.focus();a.setData(c,function(){f.hide();var b=a.createRange();b.moveToElementEditStart(a.editable());b.select()})}return function(){var a=this.getValueOf("main","data").replace(/\r/g,""),c=this;
+if(a===d)return!0;setTimeout(function(){b(c,a)});return!1}}(),contents:[{id:"main",label:a.lang.sourcedialog.title,elements:[{type:"textarea",id:"data",dir:"ltr",inputStyle:"cursor:auto;width:"+e+"px;height:"+b+"px;tab-size:4;text-align:left;","class":"cke_source"}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt	(revision 2)
@@ -0,0 +1,20 @@
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+
+cs.js      Found: 118 Missing: 0
+cy.js      Found: 118 Missing: 0
+de.js      Found: 118 Missing: 0
+el.js      Found: 16 Missing: 102
+eo.js      Found: 118 Missing: 0
+et.js      Found: 31 Missing: 87
+fa.js      Found: 24 Missing: 94
+fi.js      Found: 23 Missing: 95
+fr.js      Found: 118 Missing: 0
+hr.js      Found: 23 Missing: 95
+it.js      Found: 118 Missing: 0
+nb.js      Found: 118 Missing: 0
+nl.js      Found: 118 Missing: 0
+no.js      Found: 118 Missing: 0
+tr.js      Found: 118 Missing: 0
+ug.js      Found: 39 Missing: 79
+zh-cn.js   Found: 118 Missing: 0
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/af.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","af",{euro:"Euroteken",lsquo:"Linker enkelkwotasie",rsquo:"Regter enkelkwotasie",ldquo:"Linker dubbelkwotasie",rdquo:"Regter dubbelkwotasie",ndash:"Kortkoppelteken",mdash:"Langkoppelteken",iexcl:"Omgekeerdeuitroepteken",cent:"Centteken",pound:"Pondteken",curren:"Geldeenheidteken",yen:"Yenteken",brvbar:"Gebreekte balk",sect:"Afdeelingsteken",uml:"Deelteken",copy:"Kopieregteken",ordf:"Vroulikekenteken",laquo:"Linkgeoorienteerde aanhaalingsteken",not:"Verbodeteken",
+reg:"Regestrasieteken",macr:"Lengteteken",deg:"Gradeteken",sup2:"Kwadraatteken",sup3:"Kubiekteken",acute:"Akuutaksentteken",micro:"Mikroteken",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ar.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/bg.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ca.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení",
+laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit",
+Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex",
+Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla",
+Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu",
+aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi",
+igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi",
+divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex",
+374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant",
+asymp:"Gairebé igual a"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cs.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo",
+not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku",
+Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm",
+Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou",
+Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo",
+acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo",
+icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo",
+uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá",
+8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/cy.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid",
+reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig",
+Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom",
+Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild",
+Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig",
+aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom",
+euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom",
+otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod",
+OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith",
+diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/da.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","da",{euro:"Euro-tegn",lsquo:"Venstre enkelt anførselstegn",rsquo:"Højre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Højre dobbelt anførselstegn",ndash:"Bindestreg",mdash:"Tankestreg",iexcl:"Omvendt udråbstegn",cent:"Cent-tegn",pound:"Pund-tegn",curren:"Kurs-tegn",yen:"Yen-tegn",brvbar:"Brudt streg",sect:"Paragraftegn",uml:"Umlaut",copy:"Copyright-tegn",ordf:"Feminin ordinal indikator",laquo:"Venstre dobbel citations-vinkel",not:"Negation",
+reg:"Registreret varemærke tegn",macr:"Macron",deg:"Grad-tegn",sup2:"Superscript to",sup3:"Superscript tre",acute:"Prim-tegn",micro:"Mikro-tegn",para:"Pilcrow-tegn",middot:"Punkt-tegn",cedil:"Cedille",sup1:"Superscript et",ordm:"Maskulin ordinal indikator",raquo:"Højre dobbel citations-vinkel",frac14:"En fjerdedel",frac12:"En halv",frac34:"En tredjedel",iquest:"Omvendt udråbstegn",Agrave:"Stort A med accent grave",Aacute:"Stort A med accent aigu",Acirc:"Stort A med cirkumfleks",Atilde:"Stort A med tilde",
+Auml:"Stort A med umlaut",Aring:"Stort Å",AElig:"Stort Æ",Ccedil:"Stort C med cedille",Egrave:"Stort E med accent grave",Eacute:"Stort E med accent aigu",Ecirc:"Stort E med cirkumfleks",Euml:"Stort E med umlaut",Igrave:"Stort I med accent grave",Iacute:"Stort I med accent aigu",Icirc:"Stort I med cirkumfleks",Iuml:"Stort I med umlaut",ETH:"Stort Ð (edd)",Ntilde:"Stort N med tilde",Ograve:"Stort O med accent grave",Oacute:"Stort O med accent aigu",Ocirc:"Stort O med cirkumfleks",Otilde:"Stort O med tilde",
+Ouml:"Stort O med umlaut",times:"Gange-tegn",Oslash:"Stort Ø",Ugrave:"Stort U med accent grave",Uacute:"Stort U med accent aigu",Ucirc:"Stort U med cirkumfleks",Uuml:"Stort U med umlaut",Yacute:"Stort Y med accent aigu",THORN:"Stort Thorn",szlig:"Lille eszett",agrave:"Lille a med accent grave",aacute:"Lille a med accent aigu",acirc:"Lille a med cirkumfleks",atilde:"Lille a med tilde",auml:"Lille a med umlaut",aring:"Lilla å",aelig:"Lille æ",ccedil:"Lille c med cedille",egrave:"Lille e med accent grave",
+eacute:"Lille e med accent aigu",ecirc:"Lille e med cirkumfleks",euml:"Lille e med umlaut",igrave:"Lille i med accent grave",iacute:"Lille i med accent aigu",icirc:"Lille i med cirkumfleks",iuml:"Lille i med umlaut",eth:"Lille ð (edd)",ntilde:"Lille n med tilde",ograve:"Lille o med accent grave",oacute:"Lille o med accent aigu",ocirc:"Lille o med cirkumfleks",otilde:"Lille o med tilde",ouml:"Lille o med umlaut",divide:"Divisions-tegn",oslash:"Lille ø",ugrave:"Lille u med accent grave",uacute:"Lille u med accent aigu",
+ucirc:"Lille u med cirkumfleks",uuml:"Lille u med umlaut",yacute:"Lille y med accent aigu",thorn:"Lille thorn",yuml:"Lille y med umlaut",OElig:"Stort Æ",oelig:"Lille æ",372:"Stort W med cirkumfleks",374:"Stort Y med cirkumfleks",373:"Lille w med cirkumfleks",375:"Lille y med cirkumfleks",sbquo:"Lavt enkelt 9-komma citationstegn",8219:"Højt enkelt 9-komma citationstegn",bdquo:"Dobbelt 9-komma citationstegn",hellip:"Tre horizontale prikker",trade:"Varemærke-tegn",9658:"Sort højre pil",bull:"Punkt",
+rarr:"Højre pil",rArr:"Højre dobbelt pil",hArr:"Venstre højre dobbelt pil",diams:"Sort diamant",asymp:"Næsten lig med"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","de-ch",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"Kleiner Strich",mdash:"Mittlerer Strich",iexcl:"Invertiertes Ausrufezeichen",cent:"Cent-Zeichen",pound:"Pfund-Zeichen",curren:"Währungszeichen",yen:"Yen",brvbar:"Gestrichelte Linie",sect:"Paragrafenzeichen",uml:"Diäresis",copy:"Copyright-Zeichen",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",
+not:"Not-Zeichen",reg:"Registriert-Zeichen",macr:"Längezeichen",deg:"Grad-Zeichen",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Mikro-Zeichen",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",
+Acirc:"Lateinischer Buchstabe A mit Zirkumflex",Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",
+Icirc:"Lateinischer Buchstabe I mit Zirkumflex",Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",
+Uacute:"Lateinischer Buchstabe U mit Akutakzent",Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",
+aring:"Kleiner lateinischer Buchstabe a mit Ring oben",aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",
+iuml:"Kleiner lateinischer Buchstabe i mit Trema",eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",
+uacute:"Kleiner lateinischer Buchstabe u mit Akut",ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",
+375:"Kleiner lateinischer Buchstabe y mit Zirkumflex",sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/de.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"Kleiner Strich",mdash:"Mittlerer Strich",iexcl:"Invertiertes Ausrufezeichen",cent:"Cent-Zeichen",pound:"Pfund-Zeichen",curren:"Währungszeichen",yen:"Yen",brvbar:"Gestrichelte Linie",sect:"Paragrafenzeichen",uml:"Diäresis",copy:"Copyright-Zeichen",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",
+not:"Not-Zeichen",reg:"Registriert-Zeichen",macr:"Längezeichen",deg:"Grad-Zeichen",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Mikro-Zeichen",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",
+Acirc:"Lateinischer Buchstabe A mit Zirkumflex",Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",
+Icirc:"Lateinischer Buchstabe I mit Zirkumflex",Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",
+Uacute:"Lateinischer Buchstabe U mit Akutakzent",Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",
+aring:"Kleiner lateinischer Buchstabe a mit Ring oben",aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",
+iuml:"Kleiner lateinischer Buchstabe i mit Trema",eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",
+uacute:"Kleiner lateinischer Buchstabe u mit Akut",ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",
+375:"Kleiner lateinischer Buchstabe y mit Zirkumflex",sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/el.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας ευθύγραμμων εισαγωγικών",rdquo:"Δεξιός χαρακτήρας ευθύγραμμων εισαγωγικών",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων",
+ordf:"Θηλυκός τακτικός δείκτης",laquo:"Γωνιώδη εισαγωγικά αριστερής κατάδειξης",not:"Σύμβολο άρνησης",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Αρσενικός τακτικός δείκτης",raquo:"Γωνιώδη εισαγωγικά δεξιάς κατάδειξης",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων",
+iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ",
+Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I  με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη",
+Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία",
+acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία",
+icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία",
+uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη",
+sbquo:"Ενιαίο χαμηλο -9 εισαγωγικό ",8219:"Ενιαίο υψηλο ανεστραμμένο-9 εισαγωγικό ",bdquo:"Διπλό χαμηλό-9 εισαγωγικό ",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/en.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eo.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno",
+sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao",
+Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo",
+Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno",
+szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao",
+igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno",
+uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo",
+bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/es.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares",
+not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave",
+Aacute:"Letra A latina  mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis",
+Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis",
+times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo",
+acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave",
+iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada",
+ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo",
+373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/et.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above",
+aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
+ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
+thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer",
+bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/eu.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","eu",{euro:"Euro zeinua",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Libera zeinua",curren:"Currency sign",yen:"Yen zeinua",brvbar:"Broken bar",sect:"Section sign",uml:"Dieresia",copy:"Copyright zeinua",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Ez zeinua",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Bider zeinua",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Buleta",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fa.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده",
+macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی",
+Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد",
+Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت",
+aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان",
+iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز",
+thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه",
+asymp:"تقریبا برابر با"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fi.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant",
+not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma",
+Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe",
+Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma",
+eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe",
+373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/fr.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret demi-cadratin",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole cent",pound:"Symbole Livre sterling",curren:"Symbole monétaire",yen:"Symbole yen",brvbar:"Barre verticale scindée",sect:"Signe de section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",
+laquo:"Guillemet français ouvrant",not:"Crochet de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Symbole degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigu",micro:"Symbole micro",para:"Symbole pied-de-mouche",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Fraction un quart",frac12:"Fraction un demi",frac34:"Fraction trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A accent grave majuscule",
+Aacute:"A accent aigu majuscule",Acirc:"A accent circonflexe majuscule",Atilde:"A caron majuscule",Auml:"A tréma majuscule",Aring:"A rond majuscule",AElig:"Ligature Æ majuscule",Ccedil:"C cédille majuscule",Egrave:"E accent grave majuscule",Eacute:"E accent aigu majuscule",Ecirc:"E accent circonflexe majuscule",Euml:"E tréma majuscule",Igrave:"I accent grave majuscule",Iacute:"I accent aigu majuscule",Icirc:"I accent circonflexe majuscule",Iuml:"I tréma majuscule",ETH:"Lettre majuscule islandaise ED",
+Ntilde:"N caron majuscule",Ograve:"O accent grave majuscule",Oacute:"O accent aigu majuscule",Ocirc:"O accent circonflexe majuscule",Otilde:"O caron majuscule",Ouml:"O tréma majuscule",times:"Symbole de multiplication",Oslash:"O barré majuscule",Ugrave:"U accent grave majuscule",Uacute:"U accent aigu majuscule",Ucirc:"U accent circonflexe majuscule",Uuml:"U tréma majuscule",Yacute:"Y accent aigu majuscule",THORN:"Lettre islandaise thorn majuscule",szlig:"Lettre minuscule allemande S dur",agrave:"A accent grave minuscule",
+aacute:"A accent aigu minuscule",acirc:"A accent circonflexe minuscule",atilde:"A tilde minuscule",auml:"A tréma minuscule",aring:"A rond minuscule",aelig:"Ligature Æ minuscule",ccedil:"C cédille minuscule",egrave:"E accent grave minuscule",eacute:"E accent aigu minuscule",ecirc:"E accent circonflexe minuscule",euml:"E tréma minuscule",igrave:"I accent grave minuscule",iacute:"I accent aigu minuscule",icirc:"I accent circonflexe minuscule",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",
+ntilde:"N caron minuscule",ograve:"O minuscule accent grave",oacute:"O accent aigu minuscule",ocirc:"O accent circonflexe minuscule",otilde:"O tilde minuscule",ouml:"O tréma minuscule",divide:"Symbole de division",oslash:"O barré minuscule",ugrave:"U accent grave minuscule",uacute:"U accent aigu minuscule",ucirc:"U accent circonflexe minuscule",uuml:"U tréma minuscule",yacute:"Y accent aigu minuscule",thorn:"Lettre islandaise thorn minuscule",yuml:"Y tréma minuscule",OElig:"Ligature Œ majuscule",
+oelig:"Ligature Œ minuscule",372:"W accent circonflexe majuscule",374:"Y accent circonflexe majuscule",373:"W accent circonflexe minuscule",375:"Y accent circonflexe minuscule",sbquo:"Guillemet simple fermant inférieur",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque commerciale",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",
+hArr:"Double flèche vers la gauche",diams:"Losange noir",asymp:"Environ égal"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/gl.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura",
+not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave",
+Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese",
+Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese",
+times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo",
+acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave",
+iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal",
+ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo",
+373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/he.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום",
+macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",
+Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",
+ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",
+Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent",
+ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",
+divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",
+373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hr.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak",
+reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom",
+Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
+Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
+Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
+aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
+ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
+thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
+bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/hu.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel",
+reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel",
+Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel",
+Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű",
+agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel",
+icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel",
+uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele",
+9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/id.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/id.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/id.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/it.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte",
+not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave",
+Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina Æ",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso",
+Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso",
+Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S",
+agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto",
+ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto",
+ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn",
+yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale",
+trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ja.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号",
+frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O",
+times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth",
+ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸",
+rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/km.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ko.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ko",{euro:"유로화 기호",lsquo:"왼쪽 외 따옴표",rsquo:"오른쪽 외 따옴표",ldquo:"왼쪽 쌍 따옴표",rdquo:"오른쪽 쌍 따옴표",ndash:"반각 대시",mdash:"전각 대시",iexcl:"반전된 느낌표",cent:"센트 기호",pound:"파운드화 기호",curren:"커런시 기호",yen:"위안화 기호",brvbar:"Broken bar",sect:"섹션 기호",uml:"분음 부호",copy:"저작권 기호",ordf:"Feminine ordinal indicator",laquo:"왼쪽 쌍꺽쇠 인용 부호",not:"금지 기호",reg:"등록 기호",macr:"장음 기호",deg:"도 기호",sup2:"위첨자 2",sup3:"위첨자 3",acute:"양음 악센트 부호",micro:"마이크로 기호",para:"단락 기호",middot:"가운데 점",cedil:"세디유",sup1:"위첨자 1",
+ordm:"Masculine ordinal indicator",raquo:"오른쪽 쌍꺽쇠 인용 부호",frac14:"분수 사분의 일",frac12:"분수 이분의 일",frac34:"분수 사분의 삼",iquest:"뒤집힌 물음표",Agrave:"억음 부호가 있는 라틴 대문자 A",Aacute:"양음 악센트 부호가 있는 라틴 대문자 A",Acirc:"곡절 악센트 부호가 있는 라틴 대문자 A",Atilde:"틸데가 있는 라틴 대문자 A",Auml:"분음 기호가 있는 라틴 대문자 A",Aring:"윗고리가 있는 라틴 대문자 A",AElig:"라틴 대문자 Æ",Ccedil:"세디유가 있는 라틴 대문자 C",Egrave:"억음 부호가 있는 라틴 대문자 E",Eacute:"양음 악센트 부호가 있는 라틴 대문자 E",Ecirc:"곡절 악센트 부호가 있는 라틴 대문자 E",Euml:"분음 기호가 있는 라틴 대문자 E",Igrave:"억음 부호가 있는 라틴 대문자 I",Iacute:"양음 악센트 부호가 있는 라틴 대문자 I",
+Icirc:"곡절 악센트 부호가 있는 라틴 대문자 I",Iuml:"분음 기호가 있는 라틴 대문자 I",ETH:"라틴 대문자 Eth",Ntilde:"틸데가 있는 라틴 대문자 N",Ograve:"억음 부호가 있는 라틴 대문자 O",Oacute:"양음 부호가 있는 라틴 대문자 O",Ocirc:"곡절 악센트 부호가 있는 라틴 대문자 O",Otilde:"틸데가 있는 라틴 대문자 O",Ouml:"분음 기호가 있는 라틴 대문자 O",times:"곱하기 기호",Oslash:"사선이 있는 라틴 대문자 O",Ugrave:"억음 부호가 있는 라틴 대문자 U",Uacute:"양음 부호가 있는 라틴 대문자 U",Ucirc:"곡절 악센트 부호가 있는 라틴 대문자 U",Uuml:"분음 기호가 있는 라틴 대문자 U",Yacute:"양음 부호가 있는 라틴 대문자 Y",THORN:"라틴 대문자 Thorn",szlig:"라틴 소문자 sharp s",agrave:"억음 부호가 있는 라틴 소문자 a",aacute:"양음 부호가 있는 라틴 소문자 a",
+acirc:"곡절 악센트 부호가 있는 라틴 소문자 a",atilde:"틸데가 있는 라틴 소문자 a",auml:"분음 기호가 있는 라틴 소문자 a",aring:"윗고리가 있는 라틴 소문자 a",aelig:"라틴 소문자 æ",ccedil:"세디유가 있는 라틴 소문자 c",egrave:"억음 부호가 있는 라틴 소문자 e",eacute:"양음 부호가 있는 라틴 소문자 e",ecirc:"곡절 악센트 부호가 있는 라틴 소문자 e",euml:"분음 기호가 있는 라틴 소문자 e",igrave:"억음 부호가 있는 라틴 소문자 i",iacute:"양음 부호가 있는 라틴 소문자 i",icirc:"곡절 악센트 부호가 있는 라틴 소문자 i",iuml:"분음 기호가 있는 라틴 소문자 i",eth:"라틴 소문자 eth",ntilde:"틸데가 있는 라틴 소문자 n",ograve:"억음 부호가 있는 라틴 소문자 o",oacute:"양음 부호가 있는 라틴 소문자 o",ocirc:"곡절 악센트 부호가 있는 라틴 소문자 o",
+otilde:"틸데가 있는 라틴 소문자 o",ouml:"분음 기호가 있는 라틴 소문자 o",divide:"나누기 기호",oslash:"사선이 있는 라틴 소문자 o",ugrave:"억음 부호가 있는 라틴 소문자 u",uacute:"양음 부호가 있는 라틴 소문자 u",ucirc:"곡절 악센트 부호가 있는 라틴 소문자 u",uuml:"분음 기호가 있는 라틴 소문자 u",yacute:"양음 부호가 있는 라틴 소문자 y",thorn:"라틴 소문자 thorn",yuml:"분음 기호가 있는 라틴 소문자 y",OElig:"라틴 대문합자 OE",oelig:"라틴 소문합자 oe",372:"곡절 악센트 부호가 있는 라틴 대문자 W",374:"곡절 악센트 부호가 있는 라틴 대문자 Y",373:"곡절 악센트 부호가 있는 라틴 소문자 w",375:"곡절 악센트 부호가 있는 라틴 소문자 y",sbquo:"외 아래-9 인용 부호",8219:"외 위쪽-뒤집힌-9 인용 부호",bdquo:"쌍 아래-9 인용 부호",hellip:"수평 생략 부호",
+trade:"상표 기호",9658:"검정 오른쪽 포인터",bull:"큰 점",rarr:"오른쪽 화살표",rArr:"오른쪽 두 줄 화살표",hArr:"양쪽 두 줄 화살표",diams:"검정 다이아몬드",asymp:"근사"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ku.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ",
+ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار",
+Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",
+Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",
+times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",
+atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ",
+icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار",
+uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری",
+375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lt.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","lt",{euro:"Euro ženklas",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cento ženklas",pound:"Svaro ženklas",curren:"Valiutos ženklas",yen:"Jenos ženklas",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Ne ženklas",reg:"Registered sign",macr:"Makronas",deg:"Laipsnio ženklas",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro ženklas",para:"Pilcrow sign",middot:"Vidurinis taškas",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/lv.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā  vienkārtīga pēdiņa",rsquo:"Labā  vienkārtīga pēdiņa",ldquo:"Kreisā  dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs",
+laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi",
+Aacute:"Lielais  latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi",
+Igrave:"Lielais latīņu burts I ar uzsvaras  zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi",
+times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi",
+acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi",
+icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ",
+uacute:"Mazs latīņu burts u ar  akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar  akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ",
+sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nb.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
+reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
+Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
+times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
+ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
+uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
+rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/nl.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken",
+reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe",
+Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu",
+Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave",
+Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema",
+aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe",
+iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave",
+uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe",
+375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/no.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
+reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
+Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
+times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
+ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
+uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
+rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/oc.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/oc.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/oc.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","oc",{euro:"Simbòl èuro",lsquo:"Vergueta simpla dobrenta",rsquo:"Vergueta simpla tampanta",ldquo:"Vergueta dobla dobrenta",rdquo:"Vergueta dobla tampanta",ndash:"Jonhent semi-quadratin",mdash:"Jonhent quadratin",iexcl:"Punt d'exclamacion inversat",cent:"Simbòl cent",pound:"Simbòl Liura sterling",curren:"Simbòl monetari",yen:"Simbòl ièn",brvbar:"Barra verticala separada",sect:"Signe de seccion",uml:"Trèma",copy:"Simbòl Copyright",ordf:"Indicador ordinal femenin",
+laquo:"Vergueta francesa dobrenta",not:"Croquet de negacion",reg:"Simbòl de marca depausada",macr:"Macron",deg:"Simbòl gra",sup2:"Exponent 2",sup3:"Exponent 3",acute:"Accent agut",micro:"Simbòl micro",para:"Simbòl pè de mòsca",middot:"Punt median",cedil:"Cedilha",sup1:"Exponent 1",ordm:"Indicador ordenal masculin",raquo:"Vergueta francesa tampanta",frac14:"Fraccion un quart",frac12:"Fraccion un mièg",frac34:"Fraccion tres quarts",iquest:"Punt d'interrogacion inversat",Agrave:"A accent grèu majuscula",
+Aacute:"A accent agut majuscula",Acirc:"A accent circonflèxe majuscula",Atilde:"A caron majuscula",Auml:"A trèma majuscula",Aring:"A redond majuscula",AElig:"Ligatura Æ majuscula",Ccedil:"C cédille majuscula",Egrave:"E accent grèu majuscula",Eacute:"E accent agut majuscula",Ecirc:"E accent circonflèxe majuscula",Euml:"E trèma majuscula",Igrave:"I accent grèu majuscula",Iacute:"I accent agut majuscula",Icirc:"I accent circonflèxe majuscula",Iuml:"I trèma majuscula",ETH:"Letra majuscula islandaise ED",
+Ntilde:"N caron majuscula",Ograve:"O accent grèu majuscula",Oacute:"O accent agut majuscula",Ocirc:"O accent circonflèxe majuscula",Otilde:"O caron majuscula",Ouml:"O trèma majuscula",times:"Simbòl de multiplicacion",Oslash:"O raiat majuscula",Ugrave:"U accent grèu majuscula",Uacute:"U accent agut majuscula",Ucirc:"U accent circonflèxe majuscula",Uuml:"U trèma majuscula",Yacute:"Y accent agut majuscula",THORN:"Letra islandesa thorn majuscula",szlig:"Letra minuscula alemanda S dur",agrave:"A accent grèu minuscula",
+aacute:"A accent agut minuscula",acirc:"A accent circonflèxe minuscula",atilde:"A tilda minuscula",auml:"A trèma minuscula",aring:"A redond minuscula",aelig:"Ligatura Æ minuscula",ccedil:"C cédille minuscula",egrave:"E accent grèu minuscula",eacute:"E accent agut minuscula",ecirc:"E accent circonflèxe minuscula",euml:"E trèma minuscula",igrave:"I accent grèu minuscula",iacute:"I accent agut minuscula",icirc:"I accent circonflèxe minuscula",iuml:"i minuscula trèma",eth:"Letra minuscula islandaise ED",
+ntilde:"N caron minuscula",ograve:"O minuscula accent grèu",oacute:"O accent agut minuscula",ocirc:"O accent circonflèxe minuscula",otilde:"O tilda minuscula",ouml:"O trèma minuscula",divide:"Simbòl de division",oslash:"O raiat minuscula",ugrave:"U accent grèu minuscula",uacute:"U accent agut minuscula",ucirc:"U accent circonflèxe minuscula",uuml:"U trèma minuscula",yacute:"Y accent agut minuscula",thorn:"Letra islandaise thorn minuscula",yuml:"Y trèma minuscula",OElig:"Ligatura Œ majuscula",oelig:"Ligatura Œ minuscula",
+372:"W accent circonflèxe majuscula",374:"Y accent circonflèxe majuscula",373:"W accent circonflèxe minuscula",375:"Y accent circonflèxe minuscula",sbquo:"Vergueta simpla tampanta inferior",8219:"Vergueta-virgula superior culbuté",bdquo:"Vergueta-virgula double inferior",hellip:"Punts de suspension",trade:"Simbòl de marca comerciala",9658:"Sageta negra puntant cap a dreita",bull:"Gròs punt median",rarr:"Sageta cap a dreita",rArr:"Sageta dobla cap a dreita",hArr:"Sageta dobla cap a esquèrra",diams:"Lausange negre",
+asymp:"Environ egal"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pl.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego",
+laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania",
+Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim",
+Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym",
+Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim",
+eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą",
+divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym",
+375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka obustronna",diams:"Czarny znak karo",asymp:"Znak prawie równe"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada",
+macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema",
+Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo",
+Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema",
+aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo",
+otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo",
+373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/pt.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo de Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão simples",mdash:"Travessão longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo de cêntimo",pound:"Símbolo de Libra",curren:"Símbolo de Moeda",yen:"Símbolo de Iene",brvbar:"Barra quebrada",sect:"Símbolo de secção",uml:"Trema",copy:"Símbolo de direitos de autor",ordf:"Indicador ordinal feminino",laquo:"Aspa esquerda ângulo duplo",
+not:"Não símbolo",reg:"Símbolo de registado",macr:"Mácron",deg:"Símbolo de graus",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de micro",para:"Símbolo de parágrafo",middot:"Ponto do meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo para a direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrogação invertido",Agrave:"Letra maiúscula latina A com acento grave",Aacute:"Letra maiúscula latina A com acento agudo",
+Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra maiúscula latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema",Igrave:"Letra maiúscula latina I com acento grave",
+Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema",times:"Símbolo de multiplicação",Oslash:"Letra maiúscula O com barra",
+Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo",atilde:"Letra minúscula latina a com til",
+auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo",icirc:"Letra minúscula latina i com circunflexo",
+iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave",uacute:"Letra minúscula latina u com acento agudo",
+ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo",sbquo:"Aspa Simples inferior-9",
+8219:"Aspa simples superior invertida-9",bdquo:"Aspa duplas inferior-9",hellip:"Elipse horizontal ",trade:"Símbolo de marca registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ru.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»",
+not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом",
+Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением",
+Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом",
+Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом",
+aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth",
+ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом",
+uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка",
+bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/si.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව  උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව  උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම",
+macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
+Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
+Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
+Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
+aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
+ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
+thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
+bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sk.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor",
+reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom",
+Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom",
+Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom",
+Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad",
+aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom",
+oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami",
+OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo",
+hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sl.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Znak za evro",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"Pomišljaj",mdash:"Dolgi pomišljaj",iexcl:"Obrnjen klicaj",cent:"Znak za cent",pound:"Znak za funt",curren:"Znak valute",yen:"Znak za jen",brvbar:"Zlomljena črta",sect:"Znak za člen",uml:"Diereza",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi dvojni lomljeni narekovaj",not:"Znak za ne",
+reg:"Registrirani znak",macr:"Nadčrtano",deg:"Znak za stopinje",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Znak za mikro",para:"Znak za odstavek",middot:"Usredinjena pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",
+Atilde:"Velika latinska črka A z tildo",Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",
+Iuml:"Velika latinska črka I z diaeresis-om",ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",
+Uuml:"Velika latinska črka U z diaeresis-om",Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",
+eacute:"Mala latinska črka e z ostrivcem",ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",
+ouml:"Mala latinska črka o z diaeresis-om",divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",
+374:"Velika latinska črka Y s strešico",373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sq.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sq.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sq.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë",
+Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika",
+Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika",
+times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë",
+acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë",
+iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes",
+ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor",
+373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/sv.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken",
+not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex",
+Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex",
+Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ",
+ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø",
+ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken",
+trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/th.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
+not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
+Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
+Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
+Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
+aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
+ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
+yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
+trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tr.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti",
+not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi",
+Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi",
+ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi",
+THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi",
+igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi",
+uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti",
+bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/tt.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Параграф билгесе",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя",
+not:"Юклык ишарəсе",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Уртадагы нокта",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе",
+Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе",
+Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе",
+Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе",
+ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе",
+ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе",
+oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Маркер",rarr:"Уң якка ук",rArr:"Уң якка икеләтә ук",hArr:"Ике якка икеләтә ук",diams:"Black diamond suit",
+asymp:"якынча"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ug.js	(revision 2)
@@ -0,0 +1,13 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى",
+deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
+Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
+Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",
+Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",
+ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent",
+oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",
+yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer",
+bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/uk.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки",
+not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом",
+Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом",
+Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом",
+Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом",
+igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом",
+ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки",
+hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/vi.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự",
+reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc",
+Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu",
+Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu",
+times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ",
+atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền",
+iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu",
+divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE",
+372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi",
+asymp:"Gần bằng với"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号",
+Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O",
+Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I",
+iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y",
+373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/zh.js	(revision 2)
@@ -0,0 +1,9 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"破折號",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"微",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"二分之一符號",frac34:"四分之三符號",
+iquest:"倒置的問號",Agrave:"拉丁大寫字母 A 帶抑音符號",Aacute:"拉丁大寫字母 A 帶尖音符號",Acirc:"拉丁大寫字母 A 帶揚抑符",Atilde:"拉丁大寫字母 A 帶波浪號",Auml:"拉丁大寫字母 A 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"拉丁大寫字母 E 帶抑音符號",Eacute:"拉丁大寫字母 E 帶尖音符號",Ecirc:"拉丁大寫字母 E 帶揚抑符",Euml:"拉丁大寫字母 E 帶分音符號",Igrave:"拉丁大寫字母 I 帶抑音符號",Iacute:"拉丁大寫字母 I 帶尖音符號",Icirc:"拉丁大寫字母 I 帶揚抑符",Iuml:"拉丁大寫字母 I 帶分音符號",ETH:"拉丁大寫字母 Eth",Ntilde:"拉丁大寫字母 N 帶波浪號",Ograve:"拉丁大寫字母 O 帶抑音符號",Oacute:"拉丁大寫字母 O 帶尖音符號",Ocirc:"拉丁大寫字母 O 帶揚抑符",Otilde:"拉丁大寫字母 O 帶波浪號",
+Ouml:"拉丁大寫字母 O 帶分音符號",times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"拉丁大寫字母 U 帶抑音符號",Uacute:"拉丁大寫字母 U 帶尖音符號",Ucirc:"拉丁大寫字母 U 帶揚抑符",Uuml:"拉丁大寫字母 U 帶分音符號",Yacute:"拉丁大寫字母 Y 帶尖音符號",THORN:"拉丁大寫字母 Thorn",szlig:"拉丁小寫字母 s",agrave:"拉丁小寫字母 a 帶抑音符號",aacute:"拉丁小寫字母 a 帶尖音符號",acirc:"拉丁小寫字母 a 帶揚抑符",atilde:"拉丁小寫字母 a 帶波浪號",auml:"拉丁小寫字母 a 帶分音符號",aring:"拉丁小寫字母 a 帶上圓圈",aelig:"拉丁小寫字母 æ",ccedil:"拉丁小寫字母 c 帶下尾符號",egrave:"拉丁小寫字母 e 帶抑音符號",eacute:"拉丁小寫字母 e 帶尖音符號",ecirc:"拉丁小寫字母 e 帶揚抑符",euml:"拉丁小寫字母 e 帶分音符號",igrave:"拉丁小寫字母 i 帶抑音符號",
+iacute:"拉丁小寫字母 i 帶尖音符號",icirc:"拉丁小寫字母 i 帶揚抑符",iuml:"拉丁小寫字母 i 帶分音符號",eth:"拉丁小寫字母 eth",ntilde:"拉丁小寫字母 n 帶波浪號",ograve:"拉丁小寫字母 o 帶抑音符號",oacute:"拉丁小寫字母 o 帶尖音符號",ocirc:"拉丁小寫字母 o 帶揚抑符",otilde:"拉丁小寫字母 o 帶波浪號",ouml:"拉丁小寫字母 o 帶分音符號",divide:"除號",oslash:"拉丁小寫字母 o 帶粗線符號",ugrave:"拉丁小寫字母 u 帶抑音符號",uacute:"拉丁小寫字母 u 帶尖音符號",ucirc:"拉丁小寫字母 u 帶揚抑符",uuml:"拉丁小寫字母 u 帶分音符號",yacute:"拉丁小寫字母 y 帶尖音符號",thorn:"拉丁小寫字母 thorn",yuml:"拉丁小寫字母 y 帶分音符號",OElig:"拉丁大寫字母 OE",oelig:"拉丁小寫字母 oe",372:"拉丁大寫字母 W 帶揚抑符",374:"拉丁大寫字母 Y 帶揚抑符",373:"拉丁小寫字母 w 帶揚抑符",
+375:"拉丁小寫字母 y 帶揚抑符",sbquo:"低 9 單引號",8219:"高 9 反轉單引號",bdquo:"低 9 雙引號",hellip:"水平刪節號",trade:"商標符號",9658:"黑色向右指箭號",bull:"項目符號",rarr:"向右箭號",rArr:"向右雙箭號",hArr:"左右雙箭號",diams:"黑鑽套裝",asymp:"約等於"});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/specialchar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/specialchar/dialogs/specialchar.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("specialchar",function(k){var e,n=k.lang.specialchar,m=function(c){var b;c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);"a"==c.getName()&&(b=c.getChild(0).getHtml())&&(c.removeClass("cke_light_background"),e.hide(),c=k.document.createElement("span"),c.setHtml(b),k.insertText(c.getText()))},p=CKEDITOR.tools.addFunction(m),l,g=function(c,b){var a;b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){l&&d(null,l);
+var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");l=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("\x26nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("\x26nbsp;"),b.getParent().removeClass("cke_light_background"),
+l=void 0)},q=CKEDITOR.tools.addFunction(function(c){c=new CKEDITOR.dom.event(c);var b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==k.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:(a=b.getParent().getParent().getNext())&&(a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type&&(a.focus(),d(null,b),g(null,a));c.preventDefault();break;case 32:m({data:c});c.preventDefault();
+break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):
+d(null,b)}});return{title:n.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=k.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['\x3ctable role\x3d"listbox" aria-labelledby\x3d"'+a+'" style\x3d"width: 320px; height: 100%; border-collapse: separate;" align\x3d"center" cellspacing\x3d"2" cellpadding\x3d"2" border\x3d"0"\x3e'],d=0,g=b.length,h,e;d<g;){f.push('\x3ctr role\x3d"presentation"\x3e');
+for(var l=0;l<c;l++,d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("\x26","").replace(";","").replace("#",""),e=n[e]||h);var m="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('\x3ctd class\x3d"cke_dark_background" style\x3d"cursor: default" role\x3d"presentation"\x3e\x3ca href\x3d"javascript: void(0);" role\x3d"option" aria-posinset\x3d"'+(d+1)+'"',' aria-setsize\x3d"'+g+'"',' aria-labelledby\x3d"'+m+'"',' class\x3d"cke_specialchar" title\x3d"',CKEDITOR.tools.htmlEncode(e),
+'" onkeydown\x3d"CKEDITOR.tools.callFunction( '+q+', event, this )" onclick\x3d"CKEDITOR.tools.callFunction('+p+', this); return false;" tabindex\x3d"-1"\x3e\x3cspan style\x3d"margin: 0 auto;cursor: inherit"\x3e'+h+'\x3c/span\x3e\x3cspan class\x3d"cke_voice_label" id\x3d"'+m+'"\x3e'+e+"\x3c/span\x3e\x3c/a\x3e")}else f.push('\x3ctd class\x3d"cke_dark_background"\x3e\x26nbsp;');f.push("\x3c/td\x3e")}f.push("\x3c/tr\x3e")}f.push("\x3c/tbody\x3e\x3c/table\x3e",'\x3cspan id\x3d"'+a+'" class\x3d"cke_voice_label"\x3e'+
+n.options+"\x3c/span\x3e");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:k.lang.common.generalTab,title:k.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,
+0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox",align:"top",children:[{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"},{type:"html",
+id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"\x3cdiv\x3e\x26nbsp;\x3c/div\x3e"}]}]}]}]}]}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/dialogs/syntaxhighlight.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/dialogs/syntaxhighlight.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/dialogs/syntaxhighlight.js	(revision 2)
@@ -0,0 +1,16 @@
+﻿CKEDITOR.dialog.add("syntaxhighlightDialog",function(c){var f=function(){var b={};b.hideGutter="true"===(""+c.config.syntaxhighlight_hideGutter).toLowerCase();b.hideControls="true"===(""+c.config.syntaxhighlight_hideControls).toLowerCase();b.collapse="true"===(""+c.config.syntaxhighlight_collapse).toLowerCase();b.codeTitle=c.config.syntaxhighlight_codeTitle;b.showColumns="true"===(""+c.config.syntaxhighlight_showColumns).toLowerCase();b.noWrap="true"===(""+c.config.syntaxhighlight_noWrap).toLowerCase();
+b.firstLine=c.config.syntaxhighlight_firstLine;b.highlightChecked="true"===(""+c.config.syntaxhighlight_highlightChecked).toLowerCase();b.highlight=c.config.syntaxhighlight_highlight;b.lang=-1<"applescript actionscript3 as3 bash shell sh coldfusion cf cpp c c# c-sharp csharp css delphi pascal pas diff patch erl erlang groovy haxe hx java jfx javafx js jscript javascript perl Perl pl php text plain powershell ps posh py python ruby rails ror rb sass scss scala sql tap Tap TAP ts typescript vb vbnet xml xhtml xslt html".split(" ").indexOf(c.config.syntaxhighlight_lang)?
+c.config.syntaxhighlight_lang:"as3";b.code=c.config.syntaxhighlight_code;return b};return{title:c.lang.syntaxhighlight.title,minWidth:500,minHeight:400,contents:[{id:"source",label:c.lang.syntaxhighlight.sourceTab,accessKey:"S",elements:[{type:"vbox",children:[{id:"cmbLang",type:"select",labelLayout:"horizontal",label:c.lang.syntaxhighlight.langLbl,widths:["25%","75%"],items:[["ActionScript3","as3"],["AppleScript","applescript"],["Bash (Shell)","bash"],["ColdFusion","cf"],["C#","csharp"],["C++","cpp"],
+["CSS","css"],["Delphi","delphi"],["Diff","diff"],["Erlang","erl"],["Groovy","groovy"],["Haxe","hx"],["Javascript","jscript"],["Java","java"],["Java FX","javafx"],["Perl","perl"],["PHP","php"],["Plain (Text)","plain"],["PowerShell","ps"],["Python","python"],["Ruby","ruby"],["Sass","scss"],["Scala","scala"],["SQL","sql"],["TAP","tap"],["TypeScript","ts"],["VB","vb"],["XML/XHTML","xml"]],setup:function(b){b.lang&&this.setValue(b.lang)},commit:function(b){b.lang=this.getValue()}}]},{type:"textarea",
+id:"hl_code",rows:22,style:"width:100%",validate:CKEDITOR.dialog.validate.notEmpty(c.lang.syntaxhighlight.sourceTextareaEmptyError),setup:function(b){b.code&&this.setValue(b.code)},commit:function(b){b.code=this.getValue()}}]},{id:"advanced",label:c.lang.syntaxhighlight.advancedTab,accessKey:"A",elements:[{type:"vbox",children:[{type:"html",html:"<strong>"+c.lang.syntaxhighlight.hideGutter+"</strong>"},{type:"checkbox",id:"hide_gutter",label:c.lang.syntaxhighlight.hideGutterLbl,setup:function(b){this.setValue(b.hideGutter)},
+commit:function(b){b.hideGutter=this.getValue()}},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.hideControls+"</strong>"},{type:"checkbox",id:"hide_controls",label:c.lang.syntaxhighlight.hideControlsLbl,setup:function(b){this.setValue(b.hideControls)},commit:function(b){b.hideControls=this.getValue()}},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.collapse+"</strong>"},{type:"checkbox",id:"collapse",label:c.lang.syntaxhighlight.collapseLbl,setup:function(b){this.setValue(b.collapse)},
+commit:function(b){b.collapse=this.getValue()}},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.codeTitleLbl+"</strong>"},{type:"hbox",widths:["5%","95%"],children:[{type:"text",id:"default_ti",style:"width:40%",label:"",setup:function(b){null!=b.codeTitle&&this.setValue(b.codeTitle)},commit:function(b){this.getValue()&&""!=this.getValue()&&(b.codeTitle=this.getValue())}}]},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.showColumns+"</strong>"},{type:"checkbox",id:"show_columns",label:c.lang.syntaxhighlight.showColumnsLbl,
+setup:function(b){this.setValue(b.showColumns)},commit:function(b){b.showColumns=this.getValue()}},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.lineWrap+"</strong>"},{type:"checkbox",id:"line_wrap",label:c.lang.syntaxhighlight.lineWrapLbl,setup:function(b){this.setValue(b.noWrap)},commit:function(b){b.noWrap=this.getValue()}},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.lineCount+"</strong>"},{type:"hbox",widths:["5%","95%"],children:[{type:"text",id:"default_lc",style:"width:15%",label:"",
+setup:function(b){1<b.firstLine&&this.setValue(b.firstLine)},commit:function(b){this.getValue()&&""!=this.getValue()&&(b.firstLine=this.getValue())}}]},{type:"html",html:"<strong>"+c.lang.syntaxhighlight.highlight+"</strong>"},{type:"hbox",widths:["5%","95%"],children:[{type:"text",id:"default_hl",style:"width:40%",label:"",setup:function(b){null!=b.highlight&&this.setValue(b.highlight)},commit:function(b){this.getValue()&&""!=this.getValue()&&(b.highlight=this.getValue())}}]},{type:"hbox",widths:["5%",
+"95%"],children:[{type:"html",html:"<i>"+c.lang.syntaxhighlight.highlightLbl+"</i>"}]}]}]}],onShow:function(){var b=this.getParentEditor().getSelection().getStartElement(),b=b&&b.getAscendant("pre",!0),a=null;if(b){code=b.getHtml().replace(/<br>/g,"\n").replace(/&nbsp;/g," ").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&amp;/g,"&");var a=f(),c=b.getAttribute("class");if(c){if(-1<c.indexOf("brush")){var d=/brush:[ ]*(\w*)/.exec(c);if(null!=d&&0<d.length)if(a.lang=d[1].replace(/^\s+|\s+$/g,
+""),"actionscript"==a.lang)a.lang="as3";else if("shell"==a.lang||"sh"==a.lang)a.lang="bash";else if("coldfusion"==a.lang)a.lang="cf";else if("c"==a.lang)a.lang="cpp";else if("c#"==a.lang||"c-sharp"==a.lang)a.lang="csharp";else if("pascal"==a.lang||"pas"==a.lang)a.lang="delphi";else if("patch"==a.lang)a.lang="diff";else if("erlang"==a.lang)a.lang="erl";else if("haxe"==a.lang)a.lang="hx";else if("jfx"==a.lang)a.lang="javafx";else if("js"==a.lang||"javascript"==a.lang)a.lang="jscript";else if("Perl"==
+a.lang||"pl"==a.lang)a.lang="perl";else if("text"==a.lang)a.lang="plain";else if("powershell"==a.lang||"posh"==a.lang)a.lang="ps";else if("py"==a.lang)a.lang="python";else if("rails"==a.lang||"ror"==a.lang||"rb"==a.lang)a.lang="ruby";else if("sass"==a.lang)a.lang="scss";else if("Tap"==a.lang||"TAP"==a.lang)a.lang="tap";else if("typescript"==a.lang)a.lang="ts";else if("vbnet"==a.lang)a.lang="vb";else if("xhtml"==a.lang||"xslt"==a.lang||"html"==a.lang)a.lang="xml"}-1<c.indexOf("gutter")&&(a.hideGutter=
+!0);-1<c.indexOf("toolbar")&&(a.hideControls=!0);-1<c.indexOf("collapse")&&(a.collapse=!0);-1<c.indexOf("first-line")&&(d=/first-line:[ ]*([0-9]{1,4})/.exec(c),null!=d&&(0<d.length&&1<d[1])&&(a.firstLine=d[1]));-1<c.indexOf("highlight")&&c.match(/highlight:[ ]*\[[0-9]+(,[0-9]+)*\]/)&&(d=/highlight:[ ]*\[(.*)\]/.exec(c),null!=d&&0<d.length&&(a.highlightChecked=!0,a.highlight=d[1]));-1<c.indexOf("ruler")&&(a.showColumns=!0);-1<c.indexOf("wrap-lines")&&(a.noWrap=!0);if(b=b.getAttribute("title"))b=b.replace(/^\s+|\s+$/g,
+""),0<b.length&&(a.codeTitle=b)}a.code=code}else a=f();this.setupContent(a)},onOk:function(){var b=this.getParentEditor(),a=b.getSelection().getStartElement(),c=a&&a.getAscendant("pre",!0),a=f();this.commitContent(a);var d;d="brush:"+a.lang+";";a.hideGutter&&(d+="gutter:false;");a.hideControls&&(d+="toolbar:false;");a.collapse&&(d+="collapse:true;");a.showColumns&&(d+="ruler:true;");a.noWrap&&(d+="wrap-lines:false;");0<a.firstLine.length&&(a.firstLine=a.firstLine.replace(/[^0-9]+/g,""),0<a.firstLine.length&&
+1<a.firstLine&&(d+="first-line:"+a.firstLine+";"));null!=a.highlight&&0<a.highlight.length&&(a.highlight=a.highlight.replace(/[^\d,]+/g,"").replace(/,{2,}/g,",").replace(/(^,)|(,$)/g,""),0<a.highlight.length&&(d+="highlight:["+a.highlight.replace(/\s/gi,"")+"];"));var e;a.codeTitle=a.codeTitle.replace(/^\s+|\s+$/g,"");e=0<a.codeTitle.length?a.codeTitle:!1;c?(c.setAttribute("class",d),!1!=e?c.setAttribute("title",e):c.removeAttribute("title"),c.setText(a.code)):(c=new CKEDITOR.dom.element("pre"),c.setAttribute("class",
+d),!1!=e&&c.setAttribute("title",e),c.setText(a.code),b.insertElement(c))}}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/icons/syntaxhighlight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/icons/syntaxhighlight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/de.js	(revision 2)
@@ -0,0 +1,22 @@
+﻿CKEDITOR.plugins.setLang('syntaxhighlight', 'de', {
+    title:'Einen Quelltextabschnitt einfügen oder aktualisieren',
+    contextTitle:'Quelltext bearbeiten',
+    sourceTab:'Quelltext',
+    langLbl:'Sprache auswählen',
+    sourceTextareaEmptyError:'Das Quelltext-Feld darf nicht leer sein.',
+    advancedTab:'Erweitert',
+    hideGutter:'Verstecke Seitenleiste',
+    hideGutterLbl:'Verstecke Seitenleiste und Zeilennummern.',
+    hideControls:'Verstecke Kontrollfelder',
+    hideControlsLbl:'Verstecke die Menüleiste über dem Quelltextblock.',
+    collapse:'Einklappen',
+    collapseLbl:'Klappe den Quelltextblock standartmäßig ein. (Kontrollfelder müssen aktiviert werden)',
+    codeTitleLbl:'Einen Code-Titel verwenden',
+    showColumns:'Spalten anzeigen',
+    showColumnsLbl:'Zeige Spalten jeder Zeile in der Kopfzeile an.',
+    lineWrap:'Zeilenumbruch',
+    lineWrapLbl:'Deaktiviere Zeilenumbrüche.',
+    lineCount:'Nummerierung der ersten Zeile (falls ungleich 1)',
+    highlight:'Zeilen hervorheben',
+    highlightLbl:'Geben Sie kommasepariert die Zeilen ein, die sie hervorheben wollen, z.B. <em style="font-style:italic">3,10,15</em>.'
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/en.js	(revision 2)
@@ -0,0 +1,22 @@
+﻿CKEDITOR.plugins.setLang('syntaxhighlight', 'en', {
+    title:'Add or update a code snippet',
+    contextTitle:'Edit source code',
+    sourceTab:'Source code',
+    langLbl:'Select language',
+    sourceTextareaEmptyError:'Source code mustn\'t be empty.',
+    advancedTab:'Advanced',
+    hideGutter:'Hide gutter',
+    hideGutterLbl:'Hide gutter & line numbers.',
+    hideControls:'Hide controls',
+    hideControlsLbl:'Hide code controls at the top of the code block.',
+    collapse:'Collapse',
+    collapseLbl:'Collapse the code block by default. (controls need to be turned on)',
+    codeTitleLbl:'Use a Code Title',
+    showColumns:'Show columns',
+    showColumnsLbl:'Show row columns in the first line.',
+    lineWrap:'Disable line wrapping',
+    lineWrapLbl:'Switch off line wrapping.',
+    lineCount:'Default line count',
+    highlight:'Highlight lines',
+    highlightLbl:'Enter a comma seperated lines of lines you want to highlight, eg <em style="font-style:italic">3,10,15</em>.'
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/fr.js	(revision 2)
@@ -0,0 +1,22 @@
+﻿CKEDITOR.plugins.setLang('syntaxhighlight', 'fr', {
+    title:'Ajouter ou modifier un morceau de code source',
+    contextTitle:'&Eacute;diter le code source',
+    sourceTab:'Code source',
+    langLbl:'Sélectionnez le langage:',
+    sourceTextareaEmptyError:'Le code source ne doit pas être vide',
+    advancedTab:'Avancé',
+    hideGutter:'Cacher la marge',
+    hideGutterLbl:'Cacher la marge et les numéros de ligne.',
+    hideControls:'Cacher la barre d\'outils',
+    hideControlsLbl:'Cacher la barre d\'outils en haut du bloc de code.',
+    collapse:'Réduire le code',
+    collapseLbl:'Réduire le bloc de code par défaut. (la barre d\'outils doit être activée)',
+    codeTitleLbl:'Employez un titre de code',
+    showColumns:'Montrer les colonnes',
+    showColumnsLbl:'Montrer les colonnes sur la première ligne.',
+    lineWrap:'Désactiver le retour à la ligne automatique',
+    lineWrapLbl:'Désactiver le retour à la ligne automatique (ne fonctionne plus avec SyntaxHighlighter 3).',
+    lineCount:'Numéro de la première ligne (différent de 1)',
+    highlight:'Surligner les lignes',
+    highlightLbl:'Entrez les numéros des lignes que vous souhaitez surligner, séparés par des virgules. ex <em style="font-style:italic">3,10,15</em>.'
+});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,22 @@
+﻿CKEDITOR.plugins.setLang( 'syntaxhighlight', 'zh-cn', {
+    title:'插入代码',
+    contextTitle:'编辑源代码',
+    sourceTab:'源代码',
+    langLbl:'选择语言',
+    sourceTextareaEmptyError:'源代码不能为空!',
+    advancedTab:'高级',
+    hideGutter:'隐藏栏距',
+    hideGutterLbl:'隐藏左侧的栏距和行号',
+    hideControls:'隐藏控件',
+    hideControlsLbl:'隐藏代码块顶端的所有控件',
+    collapse:'折叠',
+    collapseLbl:'初始化时折叠代码块',
+    codeTitleLbl:'添加代码片段标题',
+    showColumns:'显示列',
+    showColumnsLbl:'在首行显示行列',
+    lineWrap:'禁用自动换行',
+    lineWrapLbl:'关闭自动换行',
+    lineCount:'自定义起始行号',
+    highlight:'自定义高亮行号(用于强调某些行)',
+    highlightLbl:'用逗号分隔需要高亮显示的行号, 例如<em style="font-style:italic">3,10,15</em>.'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/syntaxhighlight/plugin.js	(revision 2)
@@ -0,0 +1,144 @@
+﻿CKEDITOR.plugins.add( 'syntaxhighlight', {
+    requires : 'dialog',
+    lang : 'en,de,fr,zh-cn', // %REMOVE_LINE_CORE%
+    icons : 'syntaxhighlight', // %REMOVE_LINE_CORE%
+    init : function( editor ) {
+        editor.addCommand( 'syntaxhighlightDialog', new CKEDITOR.dialogCommand( 'syntaxhighlightDialog', {
+            allowedContent: 'pre[title](*)',
+            requiredContent: 'pre[title](*)'
+        } ) );
+        editor.ui.addButton && editor.ui.addButton( 'Syntaxhighlight',
+        {
+            label : editor.lang.syntaxhighlight.title,
+            command : 'syntaxhighlightDialog',
+            toolbar : 'insert,98'
+        } );
+
+        if ( editor.contextMenu ) {
+            editor.addMenuGroup( 'syntaxhighlightGroup' );
+            editor.addMenuItem( 'syntaxhighlightItem', {
+                label: editor.lang.syntaxhighlight.contextTitle,
+                icon: this.path + 'icons/syntaxhighlight.png',
+                command: 'syntaxhighlightDialog',
+                group: 'syntaxhighlightGroup'
+            });
+            editor.contextMenu.addListener( function( element ) {
+                if ( element.getAscendant( 'pre', true ) ) {
+                    return { syntaxhighlightItem: CKEDITOR.TRISTATE_OFF };
+                }
+            });
+        }
+
+        CKEDITOR.dialog.add( 'syntaxhighlightDialog', this.path + 'dialogs/syntaxhighlight.js' );
+    }
+});
+
+/**
+ * Whether the "Hide gutter & line numbers" checkbox is checked by default in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_hideGutter = false;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_hideGutter = false;
+
+/**
+ * Whether the "Hide code controls at the top of the code block" checkbox is checked by default in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_hideControls = false;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_hideControls = false;
+
+/**
+ * Whether the "Collapse the code block by default" checkbox is checked by default in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_collapse = false;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_collapse = false;
+
+/**
+ * "Default code title" text-field default value in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_codeTitle = '';
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_codeTitle = '';
+
+/**
+ * Whether the "Show row columns in the first line" checkbox is checked by default in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_showColumns = false;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_showColumns = false;
+
+/**
+ * Whether the "Switch off line wrapping" checkbox is checked by default in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_noWrap = false;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_noWrap = false;
+
+/**
+ * "Default line count" text-field default value in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_firstLine = 0;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_firstLine = 0;
+
+/**
+ * "Enter a comma seperated lines of lines you want to highlight" text-field default value in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_highlight = null;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_highlight = null;
+
+/**
+ * "Select language" select default selection in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_lang = null;
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_lang = null;
+
+/**
+ * Default content of the "Code" textarea in the
+ * Syntaxhighlight dialog.
+ *
+ *        config.syntaxhighlight_code = '';
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.syntaxhighlight_code = '';
Index: trunk/modules/ckeditor/ckeditor/plugins/table/dialogs/table.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/table/dialogs/table.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/table/dialogs/table.js	(revision 2)
@@ -0,0 +1,21 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){function v(a){for(var f=0,n=0,l=0,p,e=a.$.rows.length;l<e;l++){p=a.$.rows[l];for(var d=f=0,b,c=p.cells.length;d<c;d++)b=p.cells[d],f+=b.colSpan;f>n&&(n=f)}return n}function r(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer()(f)&&0<f);f||(alert(a),this.select());return f}}function q(a,f){var n=function(e){return new CKEDITOR.dom.element(e,a.document)},q=a.editable(),p=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?
+310:280,onLoad:function(){var e=this,a=e.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),c=e.getContentElement("info","txtWidth");c&&c.setValue(a,!0);a=this.getStyle("height","");(c=e.getContentElement("info","txtHeight"))&&c.setValue(a,!0)})},onShow:function(){var e=a.getSelection(),d=e.getRanges(),b,c=this.getContentElement("info","txtRows"),g=this.getContentElement("info","txtCols"),t=this.getContentElement("info","txtWidth"),m=this.getContentElement("info",
+"txtHeight");"tableProperties"==f&&((e=e.getSelectedElement())&&e.is("table")?b=e:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),b=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=b);b?(this.setupContent(b),c&&c.disable(),g&&g.disable()):(c&&c.enable(),g&&g.enable());t&&t.onChange();m&&m.onChange()},onOk:function(){var e=a.getSelection(),d=this._.selectedElement&&e.createBookmarks(),b=this._.selectedElement||n("table"),c={};this.commitContent(c,
+b);if(c.info){c=c.info;if(!this._.selectedElement)for(var g=b.append(n("tbody")),f=parseInt(c.txtRows,10)||0,m=parseInt(c.txtCols,10)||0,k=0;k<f;k++)for(var h=g.append(n("tr")),l=0;l<m;l++)h.append(n("td")).appendBogus();f=c.selHeaders;if(!b.$.tHead&&("row"==f||"both"==f)){h=b.getElementsByTag("thead").getItem(0);g=b.getElementsByTag("tbody").getItem(0);m=g.getElementsByTag("tr").getItem(0);h||(h=new CKEDITOR.dom.element("thead"),h.insertBefore(g));for(k=0;k<m.getChildCount();k++)g=m.getChild(k),
+g.type!=CKEDITOR.NODE_ELEMENT||g.data("cke-bookmark")||(g.renameNode("th"),g.setAttribute("scope","col"));h.append(m.remove())}if(null!==b.$.tHead&&"row"!=f&&"both"!=f){h=new CKEDITOR.dom.element(b.$.tHead);g=b.getElementsByTag("tbody").getItem(0);for(l=g.getFirst();0<h.getChildCount();){m=h.getFirst();for(k=0;k<m.getChildCount();k++)g=m.getChild(k),g.type==CKEDITOR.NODE_ELEMENT&&(g.renameNode("td"),g.removeAttribute("scope"));m.insertBefore(l)}h.remove()}if(!this.hasColumnHeaders&&("col"==f||"both"==
+f))for(h=0;h<b.$.rows.length;h++)g=new CKEDITOR.dom.element(b.$.rows[h].cells[0]),g.renameNode("th"),g.setAttribute("scope","row");if(this.hasColumnHeaders&&"col"!=f&&"both"!=f)for(k=0;k<b.$.rows.length;k++)h=new CKEDITOR.dom.element(b.$.rows[k]),"tbody"==h.getParent().getName()&&(g=new CKEDITOR.dom.element(h.$.cells[0]),g.renameNode("td"),g.removeAttribute("scope"));c.txtHeight?b.setStyle("height",c.txtHeight):b.removeStyle("height");c.txtWidth?b.setStyle("width",c.txtWidth):b.removeStyle("width");
+b.getAttribute("style")||b.removeAttribute("style")}if(this._.selectedElement)try{e.selectBookmarks(d)}catch(p){}else a.insertElement(b),setTimeout(function(){var e=new CKEDITOR.dom.element(b.$.rows[0].cells[0]),c=a.createRange();c.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);c.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,
+required:!0,controlStyle:"width:5em",validate:r(a.lang.table.invalidRows),setup:function(e){this.setValue(e.$.rows.length)},commit:l},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:r(a.lang.table.invalidCols),setup:function(e){this.setValue(v(e))},commit:l},{type:"html",html:"\x26nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,
+"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(e){var a=this.getDialog();a.hasColumnHeaders=!0;for(var b=0;b<e.$.rows.length;b++){var c=e.$.rows[b].cells[0];if(c&&"th"!=c.nodeName.toLowerCase()){a.hasColumnHeaders=!1;break}}null!==e.$.tHead?this.setValue(a.hasColumnHeaders?"both":"row"):this.setValue(a.hasColumnHeaders?"col":"")},commit:l},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,
+controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")||"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],
+setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]},{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>q.getSize("width")?"100%":500:0,getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
+a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){a=a.getStyle("width");this.setValue(a)},commit:l}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
+a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:l}]},{type:"html",html:"\x26nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),
+setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,
+d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){a=a.getItem(0);var d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),
+this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var b=this.getValue(),c=d.getElementsByTag("caption");if(b)0<c.count()?(c=c.getItem(0),c.setHtml("")):(c=new CKEDITOR.dom.element("caption",a.document),d.append(c,!0)),c.append(new CKEDITOR.dom.text(b,a.document));else if(0<c.count())for(b=c.count()-1;0<=b;b--)c.getItem(b).remove()}}},{type:"text",id:"txtSummary",bidi:!0,requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||
+"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()):d.removeAttribute("summary")}}]}]},p&&p.createAdvancedTab(a,null,"table")]}}var u=CKEDITOR.tools.cssLength,l=function(a){var f=this.id;a.info||(a.info={});a.info[f]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return q(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return q(a,"tableProperties")})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/tabletools/dialogs/tableCell.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/tabletools/dialogs/tableCell.js	(revision 2)
@@ -0,0 +1,17 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&"select"==this.type&&!c&&(this.getInputElement().$.selectedIndex=-1))}}function l(a){if(a=n.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,k=CKEDITOR.dialog.validate,n=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"\x26nbsp;"},p="rtl"==
+g.lang.dir,m=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:k.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info",
+"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10);a=parseInt(a.getStyle("width"),10);return isNaN(a)?isNaN(b)?"":b:a}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||l(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType",
+label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(l)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:k.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=
+parseInt(a.getAttribute("height"),10);a=parseInt(a.getStyle("height"),10);return isNaN(a)?isNaN(b)?"":b:a}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"\x3cbr /\x3e"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==
+a.getStyle("white-space")||b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",
+b):a.removeStyle("text-align");a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign");a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");
+a.removeAttribute("vAlign")}}]},f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:k.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",
+this.getValue()):a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:k.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor");
+return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},m?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f,
+{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},m?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(p?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align",
+"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()},
+onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.css	(revision 2)
@@ -0,0 +1,84 @@
+/*
+Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+.cke_tpl_list
+{
+	border: #dcdcdc 2px solid;
+	background-color: #ffffff;
+	overflow-y: auto;
+	overflow-x: hidden;
+	width: 100%;
+	height: 220px;
+}
+
+.cke_tpl_item
+{
+	margin: 5px;
+	padding: 7px;
+	border: #eeeeee 1px solid;
+	*width: 88%;
+}
+
+.cke_tpl_preview
+{
+	border-collapse: separate;
+	text-indent:0;
+	width: 100%;
+}
+.cke_tpl_preview td
+{
+	padding: 2px;
+	vertical-align: middle;
+}
+.cke_tpl_preview .cke_tpl_preview_img
+{
+	width: 100px;
+}
+.cke_tpl_preview span
+{
+	white-space: normal;
+}
+
+.cke_tpl_title
+{
+	font-weight: bold;
+}
+
+.cke_tpl_list a:hover .cke_tpl_item,
+.cke_tpl_list a:focus .cke_tpl_item,
+.cke_tpl_list a:active .cke_tpl_item
+{
+	border: #ff9933 1px solid;
+	background-color: #fffacd;
+}
+
+.cke_tpl_list a:hover *,
+.cke_tpl_list a:focus *,
+.cke_tpl_list a:active *
+{
+	cursor: pointer;
+}
+
+/* IE Quirks contextual selectors children will not get :hover transition until
+	the hover style of the link itself contains certain CSS declarations. */
+.cke_browser_quirks .cke_tpl_list a:active,
+.cke_browser_quirks .cke_tpl_list a:hover,
+.cke_browser_quirks .cke_tpl_list a:focus
+{
+	background-position: 0 0;
+}
+
+.cke_hc .cke_tpl_list a:hover .cke_tpl_item,
+.cke_hc .cke_tpl_list a:focus .cke_tpl_item,
+.cke_hc .cke_tpl_list a:active .cke_tpl_item
+{
+	border-width: 3px;
+}
+
+.cke_tpl_empty, .cke_tpl_loading
+{
+	text-align: center;
+	padding: 5px;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/templates/dialogs/templates.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+(function(){CKEDITOR.dialog.add("templates",function(c){function r(a,b){var m=CKEDITOR.dom.element.createFromHtml('\x3ca href\x3d"javascript:void(0)" tabIndex\x3d"-1" role\x3d"option" \x3e\x3cdiv class\x3d"cke_tpl_item"\x3e\x3c/div\x3e\x3c/a\x3e'),d='\x3ctable style\x3d"width:350px;" class\x3d"cke_tpl_preview" role\x3d"presentation"\x3e\x3ctr\x3e';a.image&&b&&(d+='\x3ctd class\x3d"cke_tpl_preview_img"\x3e\x3cimg src\x3d"'+CKEDITOR.getUrl(b+a.image)+'"'+(CKEDITOR.env.ie6Compat?' onload\x3d"this.width\x3dthis.width"':
+"")+' alt\x3d"" title\x3d""\x3e\x3c/td\x3e');d+='\x3ctd style\x3d"white-space:normal;"\x3e\x3cspan class\x3d"cke_tpl_title"\x3e'+a.title+"\x3c/span\x3e\x3cbr/\x3e";a.description&&(d+="\x3cspan\x3e"+a.description+"\x3c/span\x3e");d+="\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e";m.getFirst().setHtml(d);m.on("click",function(){t(a.html)});return m}function t(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();
+a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function k(a){var b=a.data.getTarget(),c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+
+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,n=c.config;return{title:c.lang.templates.title,minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:"\x3cspan\x3e"+f.selectPromptMsg+"\x3c/span\x3e"},{id:"templatesList",type:"html",focus:!0,html:'\x3cdiv class\x3d"cke_tpl_list" tabIndex\x3d"-1" role\x3d"listbox" aria-labelledby\x3d"'+
+h+'"\x3e\x3cdiv class\x3d"cke_tpl_loading"\x3e\x3cspan\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3cspan class\x3d"cke_voice_label" id\x3d"'+h+'"\x3e'+f.options+"\x3c/span\x3e"},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption,"default":n.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(n.templates_files,function(){var b=(n.templates||"default").split(",");
+if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d<h;d++)for(var e=CKEDITOR.getTemplates(b[d]),k=e.imagesPath,e=e.templates,q=e.length,l=0;l<q;l++){var p=r(e[l],k);p.setAttribute("aria-posinset",l+1);p.setAttribute("aria-setsize",q);c.append(p)}a.focus()}else g.setHtml('\x3cdiv class\x3d"cke_tpl_empty"\x3e\x3cspan\x3e'+f.emptyListMsg+"\x3c/span\x3e\x3c/div\x3e")});this._.element.on("keydown",k)},onHide:function(){this._.element.removeListener("keydown",k)}}})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/default.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/templates/templates/default.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/templates/templates/default.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+ Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'\x3ch3\x3e\x3cimg src\x3d" " alt\x3d"" style\x3d"margin-right: 10px" height\x3d"100" width\x3d"100" align\x3d"left" /\x3eType the title here\x3c/h3\x3e\x3cp\x3eType the text here\x3c/p\x3e'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two columns, each one with a title, and some text.",
+html:'\x3ctable cellspacing\x3d"0" cellpadding\x3d"0" style\x3d"width:100%" border\x3d"0"\x3e\x3ctr\x3e\x3ctd style\x3d"width:50%"\x3e\x3ch3\x3eTitle 1\x3c/h3\x3e\x3c/td\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd style\x3d"width:50%"\x3e\x3ch3\x3eTitle 2\x3c/h3\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3eText 1\x3c/td\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd\x3eText 2\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3cp\x3eMore text goes here.\x3c/p\x3e'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",
+html:'\x3cdiv style\x3d"width: 80%"\x3e\x3ch3\x3eTitle goes here\x3c/h3\x3e\x3ctable style\x3d"width:150px;float: right" cellspacing\x3d"0" cellpadding\x3d"0" border\x3d"1"\x3e\x3ccaption style\x3d"border:solid 1px black"\x3e\x3cstrong\x3eTable title\x3c/strong\x3e\x3c/caption\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3ctd\x3e\x26nbsp;\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3cp\x3eType the text here\x3c/p\x3e\x3c/div\x3e'}]});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/pageflip.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/pageflip.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template2.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template3.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template3.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template_dream.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/templates/templates/images/template_dream.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/icons/powered.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbabout/icons/powered.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/icons/wb-logo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbabout/icons/wb-logo.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/bg.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'bg', {
+    copy: 'Copyright &copy; $1. All rights reserved.',
+    dlgTitle: 'Относно CKEditor',
+    help: 'Проверете $1 за помощ.',
+    moreInfo: 'За лицензионна информация моля посетете сайта ни:',
+    title: 'Относно CKEditor',
+    userGuide: 'CKEditor User\'s Guide',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ca.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'ca', {
+    copy: 'Copyright &copy; $1. Tots els drets reservats.',
+    dlgTitle: 'Quant al CKEditor',
+    help: 'Premi $1 per obtenir ajuda.',
+    moreInfo: 'Per informació sobre llicències visiteu el nostre lloc web:',
+    title: 'Quant al CKEditor',
+    userGuide: 'Manual d\'usuari de CKEditor',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/cs.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'cs', {
+    copy: 'Copyright &copy; $1. All rights reserved.',
+    dlgTitle: 'O aplikaci CKEditor',
+    help: 'Prohlédněte si $1 pro nápovědu.',
+    moreInfo: 'Pro informace o lincenci navštivte naši webovou stránku:',
+    title: 'O aplikaci CKEditor',
+    userGuide: 'Uživatelská příručka CKEditor',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/da.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'da', {
+    copy: 'Copyright &copy; $1. Alle rettigheder forbeholdes.',
+    dlgTitle: 'Om CKEditor',
+    help: 'Se $1 for at få hjælp.',
+    moreInfo: 'For informationer omkring licens, se venligst vores hjemmeside (på engelsk):',
+    title: 'Om CKEditor',
+    userGuide: 'CKEditor-brugermanual',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/de.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'de', {
+    copy           : 'Copyright &copy; $1. Alle Rechte vorbehalten!',
+    dlgTitle       : 'CKEditor Versions-Informationen',
+    help           : 'Prüfe $1 für Hilfe.',
+    moreInfo       : 'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte <br>unsere Webseite:',
+    title          : 'CKEditor Versions-Information',
+    userGuide      : 'CKEditor Benutzerhandbuch',
+    labelTitle     : 'Über CKEditor',
+
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'Betriebssystem',
+    browserLang    : 'Browser Sprache',
+    wbLabelTitle   : 'Über WebsiteBaker',
+    wbHelp         : 'Hilfe finden sie im <a href="http://wiki.websitebaker.org/doku.php/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Modulversion ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (Revision: ',
+    wbUserGuide    : 'WebsiteBaker Benutzerhandbuch',
+    wbMoreInfo     : 'Für Informationen über unsere Lizenzen lesen sie bitte die <a href="http://websitebaker.org/">Lizenzbestimmungen</a>',
+    wbCopy         : 'Copyright &copy; <a href="http://websitebaker.org/">WebsiteBaker Org e.V.</a> - WebsiteBaker Projekt. Alle Rechte vorbehalten.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/en.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'en', {
+    copy           : 'Copyright &copy; $1. All rights reserved!',
+    dlgTitle       : 'CKEditor Version-Information',
+    help           : 'Check $1 for help.',
+    moreInfo       : 'For licensing information please visit our web site:',
+    title          : 'CKEditor Version-Information',
+    userGuide      : 'CKEditor User\'s Guide',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/es.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'es', {
+    copy: 'Copyright &copy; $1. Todos los derechos reservados.',
+    dlgTitle: 'Acerca de CKEditor',
+    help: 'Lea la  $1 para resolver sus dudas.',
+    moreInfo: 'Para información de licencia, por favor visite nuestro sitio web:',
+    title: 'Acerca de CKEditor',
+    userGuide: 'Guía de usuario de CKEditor',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/et.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'et', {
+    copy: 'Copyright &copy; $1. Kõik õigused kaitstud.',
+    dlgTitle: 'CKEditorist',
+    help: 'Abi jaoks vaata $1.',
+    moreInfo: 'Litsentsi andmed leiab meie veebilehelt:',
+    title: 'CKEditorist',
+    userGuide: 'CKEditori kasutusjuhendit',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fi.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'fi', {
+    copy: 'Copyright &copy; $1. Kaikki oikeuden pidätetään.',
+    dlgTitle: 'Tietoa CKEditorista',
+    help: 'Katso ohjeet: $1.',
+    moreInfo: 'Lisenssitiedot löytyvät kotisivuiltamme:',
+    title: 'Tietoa CKEditorista',
+    userGuide: 'CKEditorin käyttäjäopas',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/doku.php/en/start">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'WebsiteBaker Version $1, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/fr.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'fr', {
+    copy: 'Copyright &copy; $1. Tous droits réservés.',
+    dlgTitle: 'À propos de CKEditor',
+    help: 'Consulter $1 pour l\'aide.',
+    moreInfo: 'Pour les informations de licence, veuillez visiter notre site web:',
+    title: 'À propos de CKEditor',
+    userGuide: 'Guide de l\'utilisateur CKEditor en anglais',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hr.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'hr', {
+    copy: 'Copyright &copy; $1. All rights reserved.',
+    dlgTitle: 'O CKEditoru',
+    help: 'Provjeri $1 za pomoć.',
+    moreInfo: 'Za informacije o licencama posjetite našu web stranicu:',
+    title: 'O CKEditoru',
+    userGuide: 'Vodič za CKEditor korisnike',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/hu.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'hu', {
+    copy: 'Copyright &copy; $1. Minden jog fenntartva.',
+    dlgTitle: 'CKEditor névjegy',
+    help: 'Itt találsz segítséget: $1',
+    moreInfo: 'Licenszelési információkért kérjük látogassa meg weboldalunkat:',
+    title: 'CKEditor névjegy',
+    userGuide: 'CKEditor Felhasználói útmutató',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/it.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'it', {
+    copy: 'Copyright &copy; $1. Tutti i diritti riservati.',
+    dlgTitle: 'Riguardo CKEditor',
+    help: 'Vedi $1 per l\'aiuto.',
+    moreInfo: 'Per le informazioni sulla licenza si prega di visitare il nostro sito:',
+    title: 'Riguardo CKEditor',
+    userGuide: 'Guida Utente CKEditor',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/lv.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'lv', {
+    copy: 'Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.',
+    dlgTitle: 'Par CKEditor',
+    help: 'Pārbaudiet $1 palīdzībai.',
+    moreInfo: 'Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:',
+    title: 'Par CKEditor',
+    userGuide: 'CKEditor Lietotāja pamācība',
+
+    labelTitle     : 'About CKEditor',
+    browserInfo    : 'Browser-Info',
+    userAgent      : 'User Agent',
+    browserDetail  : 'Browser',
+    platform       : 'System platform',
+    browserLang    : 'Browser language',
+    wbLabelTitle   : 'About WebsiteBaker',
+    wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+    wbModulversion : 'WebsiteBaker Module Version ',
+    wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+    wbUserGuide    : 'WebsiteBaker User\'s Guide',
+    wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+    wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/nl.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'nl', {
+    copy: 'Copyright &copy; $1. Alle rechten voorbehouden.',
+    dlgTitle: 'Over CKEditor',
+    help: 'Bekijk de $1 voor hulp.',
+    moreInfo: 'Voor licentie informatie, bezoek onze website:',
+    title: 'Over CKEditor',
+    userGuide: 'CKEditor gebruiksaanwijzing',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/no.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'no', {
+    copy: 'Copyright &copy; $1. Alle rettigheter reservert.',
+    dlgTitle: 'Om CKEditor',
+    help: 'Se $1 for hjelp.',
+    moreInfo: 'For lisensieringsinformasjon, vennligst besøk vårt nettsted:',
+    title: 'Om CKEditor',
+    userGuide: 'CKEditors brukerveiledning',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pl.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'pl', {
+    copy: 'Copyright &copy; $1. Wszelkie prawa zastrzeżone.',
+    dlgTitle: 'Informacje o programie CKEditor',
+    help: 'Pomoc znajdziesz w $1.',
+    moreInfo: 'Informacje na temat licencji można znaleźć na naszej stronie:',
+    title: 'Informacje o programie CKEditor',
+    userGuide: 'podręczniku użytkownika programu CKEditor',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/pt.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'pt', {
+    copy: 'Direitos de Autor &copy; $1. Todos os direitos reservados.',
+    dlgTitle: 'Sobre o CKEditor',
+    help: 'Doar $1 para ajudar.',
+    moreInfo: 'Para informação sobre o licenciamento, visite o nosso site da web:',
+    title: 'Sobre o CKEditor',
+    userGuide: 'CKEditor - Guia do Utilizador',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/ru.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'ru', {
+    copy: 'Copyright &copy; $1. Все права защищены.',
+    dlgTitle: 'О CKEditor',
+    help: '$1 содержит подробную справку по использованию.',
+    moreInfo: 'Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:',
+    title: 'О CKEditor',
+    userGuide: 'Руководство пользователя CKEditor',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/se.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/se.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/se.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'sv', {
+    copy: 'Copyright &copy; $1. Alla rättigheter reserverade.',
+    dlgTitle: 'Om CKEditor',
+    help: 'Se $1 för hjälp.',
+    moreInfo: 'För information av licensiering besök vår hemsida:',
+    title: 'Om CKEditor',
+    userGuide: 'CKEditor User\'s Guide',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/sk.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'sk', {
+    copy: 'Copyright &copy; $1. Všetky práva vyhradené.',
+    dlgTitle: 'O CKEditor-e',
+    help: 'Zaškrtnite $1 pre pomoc.',
+    moreInfo: 'Pre informácie o licenciách, prosíme, navštívte našu web stránku:',
+    title: 'O CKEditor-e',
+    userGuide: 'Používateľská príručka KCEditor-a',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/lang/tr.js	(revision 2)
@@ -0,0 +1,27 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbabout', 'tr', {
+    copy: 'Copyright &copy; $1. Tüm hakları saklıdır.',
+    dlgTitle: 'CKEditor Hakkında',
+    help: 'Yardım için $1 kontrol edin.',
+    moreInfo: 'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:',
+    title: 'CKEditor Hakkında',
+    userGuide: 'CKEditor Kullanıcı Kılavuzu',
+
+        labelTitle     : 'About CKEditor',
+        browserInfo    : 'Browser-Info',
+        userAgent      : 'User Agent',
+        browserDetail  : 'Browser',
+        platform       : 'System platform',
+        browserLang    : 'Browser language',
+        wbLabelTitle   : 'About WebsiteBaker',
+        wbHelp         : 'Please find help at <a href="http://www.websitebaker.org/en/help/user-guide.php">WebsiteBaker Benutzerhandbuch</a>',
+        wbModulversion : 'WebsiteBaker Module Version ',
+        wbModuleinfo   : 'Modifiedt for WebsiteBaker Version $1 and higher, (revision: ',
+        wbUserGuide    : 'WebsiteBaker User\'s Guide',
+        wbMoreInfo     : 'For information about our licenzes please read the <a href="http://www.websitebaker.org/en/download/license.php">Licenz Agreements </a>',
+        wbCopy         : 'Copyright &copy; <a href="http://www.websitebaker.org/en/legal-notice-privacy-policy.php">WebsiteBaker Org e.V.</a> - WebsiteBaker Project. All rights reserved.'
+
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbabout/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbabout/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbabout/plugin.js	(revision 2)
@@ -0,0 +1,111 @@
+﻿/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+( function()
+{
+    CKEDITOR.plugins.add( 'wbabout',
+    {
+        requires: 'dialog',
+        lang :
+        [
+            CKEDITOR.config.defaultLanguage,
+            CKEDITOR.lang.detect(CKEDITOR.config.language )
+        ],
+        icons: 'wbabout', // %REMOVE_LINE_CORE%
+        hidpi: true // %REMOVE_LINE_CORE%
+//     lang : ['en','de','nl'],
+    }, //lang
+    {
+        init : function( editor )
+        {
+            // It doesn't add commands, buttons or dialogs, it doesn't do anything here
+//  console.log( editor);
+        } //Init
+    } );
+
+    CKEDITOR.on( 'dialogDefinition', function( evt )
+    {
+        var dialog = evt.data,
+            dialogName = dialog.name,
+            dialogDefinition = dialog.definition,
+            editor = evt.editor,
+            lang = editor.lang.wbabout,
+            wblogoPath = CKEDITOR.plugins.get( 'wbabout' ).path + 'icons/' + ( CKEDITOR.env.hidpi ? 'hidpi/' : '' ) + 'powered.png';
+        var ua   = navigator.userAgent;
+        var ie   = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"),
+            ie11 = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
+    // editor.on( 'commit', function(ev) { console.log( ev ) });
+        if ( (dialogName == 'about') )
+        {
+            var linkTab = dialogDefinition.getContents('tab1');
+
+            linkTab.title = CKEDITOR.env.ie ? lang.dlgTitle : lang.title,
+            linkTab.label = lang.labelTitle;
+console.info(linkTab);
+        // Get dialog definition.
+            var def = evt.data.definition;
+        // Add some stuff to definition.
+            def.addContents( {
+                id: 'WebsiteBaker',
+                label: lang.wbLabelTitle,
+                title: '',
+                padding: 10,
+                elements: [
+                    {
+                    type: 'html',
+                    html: '<style type="text/css">' +
+                        '.cke_about_container' +
+                        '{' +
+                            'color:#000 !important;' +
+                            'padding:10px 10px 0;' +
+                            'margin-top:5px' +
+                            'max-width:' + '390px;' + 
+                            '' +
+                        '}' +
+                        '.cke_about_container p' +
+                        '{' +
+                            'margin: 0 0 10px;' +
+                        '}' +
+                        '.cke_about_container .cke_wbabout_logo' +
+                        '{' +
+                            'height:80px;' +
+                            'background-color:#fff;' +
+                            'background-image:url(' + wblogoPath + ');' +
+                            ( CKEDITOR.env.hidpi ? 'background-size:163px 58px;' : '' ) +
+                            'background-position:center; ' +
+                            'background-repeat:no-repeat;' +
+                            'margin-bottom:10px;' +
+                        '}' +
+                        '.cke_about_container a' +
+                        '{' +
+                            'cursor:pointer !important;' +
+                            'color:#00B2CE !important;' +
+                            'text-decoration:underline !important;' +
+                        '}' +
+                        '</style>' +
+                        '<div class="cke_about_container">' +
+                        '<div class="cke_wbabout_logo"></div>' +
+                        '<p>' + 
+                            lang.wbModuleinfo.replace( '$1', editor.config.WBversion) + editor.config.WBrevision +') ' + 
+                        '</p>' +
+                        '<p>' +
+                            lang.wbModulversion.replace( '$1', editor.config.ModulVersion) + editor.config.ModulVersion +' ' + 
+                        '</p>' +
+                        '<p>' +
+                            lang.wbHelp.replace( '$1', '<a href="http://websitebaker.org/">' + lang.wbUserGuide + '</a>' ) +
+                        '</p>' +
+                        '<p>' +
+                            lang.wbMoreInfo.replace( '$1', '<a href="http://websitebaker.org/">' + lang.wbUserGuide + '</a>' ) +
+                        '</p>' +
+                        '<p>' +
+                            lang.wbCopy.replace( '$1', '<a href="http://websitebaker.org/">WebsiteBaker Org e.V.</a> - WebsiteBaker Project' ) +
+                        '</p>' +
+                        '</div>'
+                }
+                ]
+            });
+            
+        } // if ( (dialogName == 'about')
+    });
+})();
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/dialogs/wbdroplets.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/dialogs/wbdroplets.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/dialogs/wbdroplets.js	(revision 2)
@@ -0,0 +1,124 @@
+﻿/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.dialog.add( 'wbdroplets', function( editor ) {
+    
+    // Function called in onShow to load selected element.
+    var loadElements = function( element ) {
+        this._.selectedElement = element;
+        var attributeValue = element.data( 'cke-saved-name' );
+        this.setValueOf( 'info', 'txtName', attributeValue || '' );
+    };
+
+    return {
+        title: editor.lang.wbdroplets.wbdroplets.title,
+        minWidth: 300,
+        minHeight: 60,
+        onOk: function() {
+            var name = CKEDITOR.tools.trim( this.getValueOf( 'info', 'droplet-edit' ) );
+            editor.insertHtml(name);
+        },            
+        
+        onShow: function(){
+            var dropletText = CKEDITOR.plugins.wbdroplets.getSelectedDroplet( editor );
+            var dropletName = DropletSelectBox[0][1];
+            var isListed = false;
+            if (dropletText) {
+                dropletParts = (dropletText+' ').split("?");
+                for (i = 0; i < DropletSelectBox.length; i++) {
+                    if (dropletParts[0] === DropletSelectBox[i][1]) {
+                      dropletName = dropletParts[0];
+                      isListed = true;
+                 }
+                };
+            }
+            this.setValueOf( 'info', 'txtName', dropletName );
+            if (isListed)
+                this.setValueOf( 'info', 'droplet-edit', '[['+dropletText+']]' );
+        },
+
+        contents: [
+            {
+            id: 'info',
+            label: editor.lang.wbdroplets.wbdroplets.title,
+            accessKey: 'I',
+            elements: [
+            {
+                type: 'select',
+                id: 'txtName',
+                items:DropletSelectBox,
+                label: editor.lang.wbdroplets.wbdroplets.name,
+                required: true,
+                onChange:function(){
+                    var e=editor.lang.wbdroplets,
+                    droplet=this.getValue(),
+                    g=window.DropletInfoBox,
+                    h,
+                    info=document.getElementById('droplet-info'),
+                    use=document.getElementById('droplet-usage');
+                    var dialog = this.getDialog();
+                    
+                    for(h in DropletInfoBox){
+                        if(droplet==''){
+                            info.innerHTML=e.empty;
+                            use.innerHTML='';
+                            dialog.setValueOf( 'info', 'droplet-edit','' );
+                            break;
+                        }
+                        if(droplet==DropletInfoBox[h].slice(0,1)){
+                            info.innerHTML=DropletInfoBox[h].slice(-1);
+                            use.innerHTML=DropletUsageBox[h].slice(-1);
+                            if ((DropletUsageBox[h].slice(-1) + '').search(/.*\[\[.*\]\].*/) > -1) {
+                                droplet = (DropletUsageBox[h].slice(-1) + '').match(/.*\[\[(.*)\]\].*/);
+                                droplet = droplet[1];
+                            }
+                            droplet = '[['+droplet+']]';
+                            dialog.setValueOf( 'info', 'droplet-edit', droplet );
+                            break;
+                        }
+                    }
+                },
+                onLoad: function( data ) {
+                    this.onChange();
+                },
+            },
+
+            {
+                type: 'text',
+                id: 'droplet-edit',
+                label: editor.lang.wbdroplets.editDroplet,
+                required: true,
+                onLoad: function() {
+                    this.allowOnChange = true;
+                },
+
+                validate: function() {
+                    var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.wbdroplets.noUrl );
+                    return func.apply( this );
+                },
+            },
+
+            {
+                id:'infoPreview',
+                type:'html',
+                expand:true,
+                label:'',
+                widths:['100%'],
+                style:'font-weight:normal;',
+                html:'<div style="overflow:hidden;display:inline; width:350px; height:22px;"><div id="droplet-info" style="overflow:hidden;width:350px; white-space:normal;">Here description...</div></div>'
+            },
+            {
+                id:'infoUsage',
+                type:'html',
+                expand:true,
+                label:'',widths:['100%'],
+                style:'font-weight:normal;',
+                html:'<div style="overflow:hidden;display:inline; width:350px; height:40px;"><div id="droplet-usage" style="overflow:hidden;width:350px; white-space:normal;">Here usage...</div></div>'
+            }        
+            ]
+        }
+        ]
+    };
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/icons/_wbdroplets.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/icons/_wbdroplets.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/icons/wbdroplets.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/icons/wbdroplets.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/images/wbdroplets.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/images/wbdroplets.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/af.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'af', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ar.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ar', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bg.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'bg', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bn.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'bn', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/bs.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'bs', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ca.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ca', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cs.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'cs', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/cy.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'cy', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/da.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'da', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/de.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'de', {
+	wbdroplets: {
+		toolbar: 'WB-Droplets einfügen',
+		menu: 'Droplet-Eigenschaften',
+		title: 'WB-Droplets',
+		name: 'Droplet Name',
+		errorName: 'Bitte geben Sie den Namen des Droplets ein'
+	},
+	editDroplet: 'Droplet bearbeiten'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/el.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'el', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-au.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-au.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-au.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'en-au', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-ca.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'en-ca', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en-gb.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'en-gb', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/en.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'en', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eo.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'eo', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/es.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'es', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/et.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'et', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/eu.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'eu', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fa.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'fa', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fi.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'fi', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fo.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'fo', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'fr-ca', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/fr.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'fr', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gl.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'gl', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/gu.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'gu', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/he.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'he', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hi.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'hi', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hr.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'hr', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/hu.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'hu', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/is.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/is.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/is.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'is', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/it.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'it', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ja.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ja', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ka.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ka.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ka.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ka', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/km.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'km', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ko.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ko', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ku.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ku', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lt.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'lt', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/lv.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'lv', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mk.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'mk', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/mn.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'mn', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ms.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ms.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ms.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ms', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nb.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'nb', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/nl.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'nl', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/no.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'no', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pl.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'pl', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt-br.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'pt-br', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/pt.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'pt', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ro.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ro.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ro.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ro', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ru.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ru', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/se.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/se.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/se.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sv', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sk.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sk', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sl.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sl', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr-latn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr-latn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr-latn.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sr-latn', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sr.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sr', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/sv.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'sv', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/th.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'th', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/tr.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'tr', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/ug.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'ug', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/uk.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'uk', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/vi.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'vi', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'zh-cn', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/lang/zh.js	(revision 2)
@@ -0,0 +1,14 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbdroplets', 'zh', {
+    wbdroplets: {
+        toolbar: 'Insert WB Droplets into page',
+        menu: 'Droplet-properties',
+        title: 'WB-Droplets',
+        name: 'Droplet name',
+        errorName: 'Please insert a name for the Droplet'
+    },
+    editDroplet: 'edit Droplet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/log/LOCK
===================================================================
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/pages.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/pages.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/pages.php	(revision 2)
@@ -0,0 +1,91 @@
+<?PHP
+header('Content-type: application/javascript');
+header('Cache-Control: no-store, no-cache, must-revalidate');
+header('Cache-Control: post-check=0, pre-check=0, false');
+header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
+header('Pragma: no-cache');
+
+/*
+    This Plugin read files of a directory and outputs
+    a javascript array. Output is:
+
+    var DropletSelectBox = new Array(
+        new Array( empty, empty ),
+        new Array( name, link ),
+        new Array( name, link )...
+    );
+
+    DropletSelectBox will loaded as select options
+    to wbdroplets plugin.
+*/
+
+if ( !defined( 'WB_PATH' ) ){ require ( dirname(dirname(dirname(dirname(dirname(__DIR__))))).'/config.php'); }
+
+$wb284  = (file_exists(dirname(dirname(dirname(dirname(dirname(__DIR__))))).'/setup.ini.php')) ? true : false;
+
+
+// Create new admin object
+if(!class_exists('admin', false)){ require(WB_PATH.'/framework/class.admin.php'); }
+$admin = new admin('Pages', 'pages_modify', false);
+
+
+if(!function_exists('cleanup')) {
+  function cleanup ($string) {
+    global $database;
+    // if magic quotes on
+    if (get_magic_quotes_gpc())
+    {
+        $string = stripslashes($string);
+    }
+    if(isset($database)&&method_exists($database,"escapeString")) {
+      return preg_replace("/\r?\n/", "\\n", $database->escapeString($string));
+    } elseif (is_object($database->db_handle) && (get_class($database->db_handle) === 'mysqli')){
+      return preg_replace("/\r?\n/", "\\n", mysqli_real_escape_string($database->db_handle, $string)); 
+    } else {
+      return preg_replace("/\r?\n/", "\\n", mysql_real_escape_string($string)); 
+    }
+  } // end function cleanup
+}
+
+/**
+ * setPrettyArray()
+ * 
+ * @param integer $bLinefeed
+ * @param integer $iWhiteSpaces
+ * @param integer $iTabs
+ * @return string 
+ */
+    function setPrettyArray ( $bLinefeed = 1, $iWhiteSpaces = 0, $iTabs = 0 ){
+        $sRetVal  = "";
+        if ( $bLinefeed > 0 ) { $sRetVal .= "\n"; }
+        if ( $iWhiteSpaces > 0 ) { $sRetVal .= str_repeat(" ",$iWhiteSpaces); }
+        if ( $iTabs >  0 ) { $sRetVal .= str_repeat("\t",$iTabs); }
+        return $sRetVal;
+    }
+
+
+$DropletSelectBox = "var DropletSelectBox = new Array( new Array( '', '' )";
+$description = "var DropletInfoBox = new Array( new Array( '', '' )";
+$usage = "var DropletUsageBox = new Array( new Array( '', '' )";
+
+$array = array();
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` ';
+    $sql .= 'WHERE `active`=1 ';
+    $sql .= 'ORDER BY `name` ASC';
+    if($resRec = $database->query($sql))
+    {
+        while( !false == ($droplet = $resRec->fetchRow() ) )
+        {
+            $title = cleanup($droplet['name']);
+            $desc = cleanup($droplet['description']);
+            $comments = cleanup($droplet['comments']);
+
+            $DropletSelectBox .=  ", new Array( '".$title."', '".$droplet['name']."')";
+            $description .=  ", new Array( '".$title."', '".$desc."')";
+            $usage .=  ", new Array( '".$title."', '".$comments."')";
+        }
+    }
+
+echo $DropletSelectBox .= " );\n";
+echo $description .= " );\n";
+echo $usage .= " );\n";

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/pages.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbdroplets/plugin.js	(revision 2)
@@ -0,0 +1,90 @@
+﻿/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.add( 'wbdroplets', {
+    requires: 'dialog,fakeobjects',
+    lang: [
+            CKEDITOR.config.defaultLanguage,
+            CKEDITOR.lang.detect(CKEDITOR.config.language )
+        ],
+/*
+    lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh', // %REMOVE_LINE_CORE%
+*/
+    icons: 'wbdroplets', // %REMOVE_LINE_CORE%
+    init: function( editor ) {
+        // Add the link and unlink buttons.
+        editor.addCommand( 'wbdroplets', new CKEDITOR.dialogCommand( 'wbdroplets' ) );
+
+        if ( editor.ui.addButton ) {
+            editor.ui.addButton( 'Wbdroplets', {
+                label: editor.lang.wbdroplets.wbdroplets.toolbar,
+                command: 'wbdroplets',
+                toolbar: 'wblinks,10'
+            });
+        }
+
+        CKEDITOR.dialog.add( 'wbdroplets', this.path + 'dialogs/wbdroplets.js' );
+
+        editor.on( 'doubleclick', function( evt ) {
+            var dropletText = CKEDITOR.plugins.wbdroplets.getSelectedDroplet( editor );
+            if (dropletText) 
+                evt.data.dialog = 'wbdroplets';
+        });
+
+        // If the "menu" plugin is loaded, register the menu items.
+        if ( editor.addMenuItems ) {
+            editor.addMenuGroup( 'wbdroplets' );
+            editor.addMenuItems({
+                wbdroplets: {
+                    label: editor.lang.wbdroplets.wbdroplets.menu,
+                    command: 'wbdroplets',
+                    group: 'wbdroplets',
+                    order: 1
+                }
+            });
+        }
+
+        // If the "contextmenu" plugin is loaded, register the listeners.
+        if ( editor.contextMenu ) {
+            editor.contextMenu.addListener( function( element, selection ) {
+
+            var dropletText = CKEDITOR.plugins.wbdroplets.getSelectedDroplet( editor );
+            if (!dropletText) 
+                return null;
+
+            return { wbdroplets : CKEDITOR.TRISTATE_OFF};
+            });
+        }
+    }
+});
+
+/**
+ * Set of wblink plugin's helpers.
+ *
+ * @class
+ * @singleton
+ */
+CKEDITOR.plugins.wbdroplets = {
+    /**
+     * Get the surrounding link element of current selection.
+     *
+     */
+    getSelectedDroplet: function( editor ) {
+        var selection = editor.getSelection();
+        var range = selection.getRanges( )[ 0 ];
+
+        if ( range ) {
+            range.shrink( CKEDITOR.SHRINK_TEXT );
+            content = editor.elementPath( range.getCommonAncestor() ).elements[0].$.innerHTML;
+            content = content.match(/\[\[([^\]]*)\]\]/);
+            if (content === null)        return null
+            else return     content[1];
+        }
+        return null;
+    }
+};
+
+CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('wbdroplets')+'pages.php');
+
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/anchor.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/anchor.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/anchor.js	(revision 2)
@@ -0,0 +1,108 @@
+﻿/**
+ * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+CKEDITOR.dialog.add( 'anchor', function( editor ) {
+    // Function called in onShow to load selected element.
+    var loadElements = function( element ) {
+            this._.selectedElement = element;
+
+            var attributeValue = element.data( 'cke-saved-name' );
+            this.setValueOf( 'info', 'txtName', attributeValue || '' );
+        };
+
+    function createFakeAnchor( editor, attributes ) {
+        return editor.createFakeElement( editor.document.createElement( 'a', {
+            attributes: attributes
+        } ), 'cke_anchor', 'anchor' );
+    }
+
+    return {
+        title: editor.lang.wblink.anchor.title,
+        minWidth: 300,
+        minHeight: 60,
+        onOk: function() {
+            var name = CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtName' ) );
+            var attributes = {
+                id: name,
+                name: name,
+                'data-cke-saved-name': name
+            };
+
+    if ( this._.selectedElement ) {
+                if ( this._.selectedElement.data( 'cke-realelement' ) ) {
+                    var newFake = createFakeAnchor( editor, attributes );
+                    newFake.replace( this._.selectedElement );
+
+                    // Selecting fake element for IE. (#11377)
+                    if ( CKEDITOR.env.ie )
+                        editor.getSelection().selectElement( newFake );
+                } else
+                    this._.selectedElement.setAttributes( attributes );
+            } else {
+                var sel = editor.getSelection(),
+                    range = sel && sel.getRanges()[ 0 ];
+
+                // Empty anchor
+                if ( range.collapsed ) {
+                    var anchor = createFakeAnchor( editor, attributes );
+                    range.insertNode( anchor );
+                } else {
+                    if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 )
+                        attributes[ 'class' ] = 'cke_anchor';
+
+                    // Apply style.
+                    var style = new CKEDITOR.style( { element: 'a', attributes: attributes } );
+                    style.type = CKEDITOR.STYLE_INLINE;
+                    editor.applyStyle( style );
+                }
+            }
+        },
+
+        onHide: function() {
+            delete this._.selectedElement;
+        },
+
+        onShow: function() {
+            var sel = editor.getSelection(),
+                fullySelected = sel.getSelectedElement(),
+                fakeSelected = fullySelected && fullySelected.data( 'cke-realelement' ),
+                linkElement = fakeSelected ?
+                    CKEDITOR.plugins.wblink.tryRestoreFakeAnchor( editor, fullySelected ) :
+                    CKEDITOR.plugins.wblink.getSelectedLink( editor );
+
+            if ( linkElement ) {
+                loadElements.call( this, linkElement );
+                !fakeSelected && sel.selectElement( linkElement );
+
+                if ( fullySelected )
+                    this._.selectedElement = fullySelected;
+            }
+
+            this.getContentElement( 'info', 'txtName' ).focus();
+        },
+        contents: [
+            {
+            id: 'info',
+            label: editor.lang.wblink.anchor.title,
+            accessKey: 'I',
+            elements: [
+                {
+                type: 'text',
+                id: 'txtName',
+                label: editor.lang.wblink.anchor.name,
+                required: true,
+                validate: function() {
+                    if ( !this.getValue() ) {
+                        alert( editor.lang.wblink.anchor.errorName );
+                        return false;
+                    }
+                    return true;
+                }
+            }
+            ]
+        }
+        ]
+    };
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/wblink.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/wblink.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/dialogs/wblink.js	(revision 2)
@@ -0,0 +1,982 @@
+﻿/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+//    'use strict';
+
+( function() {
+    CKEDITOR.dialog.add( 'wblink', function( editor ) {
+        var plugin = CKEDITOR.plugins.wblink;
+
+        // Handles the event when the "Target" selection box is changed.
+        var targetChanged = function() {
+                var dialog = this.getDialog(),
+                    popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ),
+                    targetName = dialog.getContentElement( 'target', 'linkTargetName' ),
+                    value = this.getValue();
+
+                if ( !popupFeatures || !targetName )
+                    return;
+
+                popupFeatures = popupFeatures.getElement();
+                popupFeatures.hide();
+                targetName.setValue( '' );
+
+                switch ( value ) {
+                    case 'frame':
+                        targetName.setLabel( editor.lang.wblink.targetFrameName );
+                        targetName.getElement().show();
+                        break;
+                    case 'popup':
+                        popupFeatures.show();
+                        targetName.setLabel( editor.lang.wblink.targetPopupName );
+                        targetName.getElement().show();
+                        break;
+                    default:
+                        targetName.setValue( value );
+                        targetName.getElement().hide();
+                        break;
+                }
+
+            };
+
+        // Handles the event when the "Type" selection box is changed.
+        var linkTypeChanged = function() {
+                var dialog = this.getDialog(),
+                    partIds = [ 'urlOptions', 'wblinkOptions', 'anchorOptions', 'emailOptions' ],
+                    typeValue = this.getValue(),
+                    uploadTab = dialog.definition.getContents( 'upload' ),
+                    uploadInitiallyHidden = uploadTab && uploadTab.hidden;
+
+                if ( typeValue == 'url' ) {
+                    if ( editor.config.linkShowTargetTab )
+                        dialog.showPage( 'target' );
+                    if ( !uploadInitiallyHidden )
+                        dialog.showPage( 'upload' );
+                } else if ( typeValue == 'wblink' ) {
+                        if ( editor.config.linkShowTargetTab )
+                            dialog.showPage( 'target' );
+                        dialog.hidePage( 'upload' );
+                } else {
+                    dialog.hidePage( 'target' );
+                    if ( !uploadInitiallyHidden )
+                        dialog.hidePage( 'upload' );
+                }
+
+                for ( var i = 0; i < partIds.length; i++ ) {
+                    var element = dialog.getContentElement( 'info', partIds[ i ] );
+                    if ( !element )
+                        continue;
+
+                    element = element.getElement().getParent().getParent();
+                    if ( partIds[ i ] == typeValue + 'Options' )
+                        element.show();
+                    else
+                        element.hide();
+                }
+
+                dialog.layout();
+            };
+
+        var setupParams = function( page, data ) {
+                if ( data[ page ] )
+                    this.setValue( data[ page ][ this.id ] || '' );
+            };
+
+        var setupPopupParams = function( data ) {
+                return setupParams.call( this, 'target', data );
+            };
+
+        var setupAdvParams = function( data ) {
+                return setupParams.call( this, 'advanced', data );
+            };
+
+        var commitParams = function( page, data ) {
+                if ( !data[ page ] )
+                    data[ page ] = {};
+
+                data[ page ][ this.id ] = this.getValue() || '';
+            };
+
+        var commitPopupParams = function( data ) {
+                return commitParams.call( this, 'target', data );
+            };
+
+        var commitAdvParams = function( data ) {
+                return commitParams.call( this, 'advanced', data );
+            };
+
+        var commonLang = editor.lang.common,
+            linkLang = editor.lang.wblink,
+            anchors;
+
+        return {
+            title: linkLang.title,
+            minWidth: 350,
+            minHeight: 230,
+            contents: [ {
+                id: 'info',
+                label: linkLang.info,
+                title: linkLang.info,
+                elements: [ {
+                    id: 'linkType',
+                    type: 'select',
+                    label: linkLang.type,
+                    'default': 'url',
+                    items: [
+                        [ linkLang.toUrl, 'url' ],
+                        [ linkLang.toWb, 'wblink' ],
+                        [ linkLang.toAnchor, 'anchor' ],
+                        [ linkLang.toEmail, 'email' ]
+                    ],
+                    onChange: linkTypeChanged,
+                    setup: function( data ) {
+                        this.setValue( data.type || 'url' );
+                    },
+                    commit: function( data ) {
+                        data.type = this.getValue();
+                    }
+                },
+                {
+                    type: 'vbox',
+                    id: 'wblinkOptions',
+                    children: [ {
+                        type: 'hbox',
+                        children: [ {
+                            id: 'wblink',
+                            type: 'select',
+                            label: linkLang.wbPage,
+                            items:InternPagesSelectBox,
+                            onChange : function() {
+                                pageId = this.getValue().match(/\[wblink(\d*)\]/);
+                                sel = this.getDialog().getContentElement( 'info', 'newslink');
+                                sel.clear();
+                                if (NewsItemsSelectBox[pageId[1]]) {
+                                    sel.getElement().show();
+                                    sel.add(eval('linkLang.select' + ModuleList[pageId[1]]), "");
+                                    for (i = 0; i < NewsItemsSelectBox[pageId[1]].length; i++) {
+                                        sel.add(NewsItemsSelectBox[pageId[1]][i][0], NewsItemsSelectBox[pageId[1]][i][1]);
+                                    }
+                                } else {
+                                    sel.add(linkLang.noNews,'');
+                                    sel.getElement().hide();
+                                }
+                            },
+                            setup: function( data ) {
+                                var selPage = InternPagesSelectBox[0].slice(1);
+                                if (data.url) {
+                                    wbl = data.url.url;                        
+                                    for(p in InternPagesSelectBox){
+                                        if(wbl == InternPagesSelectBox[p].slice(1)){
+                                            selPage = InternPagesSelectBox[p].slice(1);
+                                        }
+                                    }
+                                }
+                                this.setValue(selPage);
+                            },
+                            commit: function( data ) {
+                                if ( !data.wblink )
+                                    data.wblink = {};
+                                data.wblink.url = this.getValue();
+                            }
+                        } ],
+                        setup: function() { //  data 
+                            if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
+                                this.getElement().show();
+                        }
+                    },
+
+                    {
+                        type: 'hbox',
+                        children: [ {
+                            id: 'newslink',
+                            type: 'select',
+                            label: linkLang.newsItem,
+                            items: new Array(new Array(linkLang.noNews,'')),
+                            setup: function( data ) {
+                            },
+                            commit: function( data ) {
+                                if ( !data.newslink )
+                                    data.newslink = {};
+                                data.newslink.url = this.getValue();
+                            }
+                        }
+                        ],
+                        setup: function( data ) {
+                            if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
+                                this.getElement().show();
+                        }
+                    }
+
+                    ]
+                },
+                {
+                    type: 'vbox',
+                    id: 'urlOptions',
+                    children: [ {
+                        type: 'hbox',
+                        widths: [ '25%', '75%' ],
+                        children: [ {
+                            id: 'protocol',
+                            type: 'select',
+                            label: commonLang.protocol,
+                            'default': 'http://',
+                            items: [
+                                // Force 'ltr' for protocol names in BIDI. (#5433)
+                                [ 'http://\u200E', 'http://' ],
+                                [ 'https://\u200E', 'https://' ],
+                                [ 'ftp://\u200E', 'ftp://' ],
+                                [ 'news://\u200E', 'news://' ],
+                                [ linkLang.other, '' ]
+                            ],
+                            setup: function( data ) {
+                                if ( data.url )
+                                    this.setValue( data.url.protocol || '' );
+                            },
+                            commit: function( data ) {
+                                if ( !data.url )
+                                    data.url = {};
+
+                                data.url.protocol = this.getValue();
+                            }
+                        },
+                        {
+                            type: 'text',
+                            id: 'url',
+                            label: commonLang.url,
+                            required: true,
+                            onLoad: function() {
+                                this.allowOnChange = true;
+                            },
+                            onKeyUp: function() {
+                                this.allowOnChange = false;
+                                var protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),
+                                    url = this.getValue(),
+                                    urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/i,
+                                    urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/i;
+
+                                var protocol = urlOnChangeProtocol.exec( url );
+                                if ( protocol ) {
+                                    this.setValue( url.substr( protocol[ 0 ].length ) );
+                                    protocolCmb.setValue( protocol[ 0 ].toLowerCase() );
+                                } else if ( urlOnChangeTestOther.test( url ) ) {
+                                    protocolCmb.setValue( '' );
+                                }
+
+                                this.allowOnChange = true;
+                            },
+                            onChange: function() {
+                                if ( this.allowOnChange ) // Dont't call on dialog load.
+                                this.onKeyUp();
+                            },
+                            validate: function() {
+                                var dialog = this.getDialog();
+
+                                if ( dialog.getContentElement( 'info', 'linkType' ) && dialog.getValueOf( 'info', 'linkType' ) != 'url' )
+                                    return true;
+
+                                if ( !editor.config.linkJavaScriptLinksAllowed && ( /javascript\:/ ).test( this.getValue() ) ) {
+                                    alert( commonLang.invalidValue );
+                                    return false;
+                                }
+
+                                if ( this.getDialog().fakeObj ) // Edit Anchor.
+                                return true;
+
+                                var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noUrl );
+                                    return func.apply( this );
+                            },
+                            setup: function( data ) {
+                                this.allowOnChange = false;
+                                if ( data.url )
+                                    this.setValue( data.url.url );
+                                this.allowOnChange = true;
+
+                            },
+                            commit: function( data ) {
+                                // IE will not trigger the onChange event if the mouse has been used
+                                // to carry all the operations #4724
+                                this.onChange();
+
+                                if ( !data.url )
+                                    data.url = {};
+
+                                data.url.url = this.getValue();
+                                this.allowOnChange = false;
+                            }
+                        } ],
+                        setup: function() { //  data 
+                            if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
+                                this.getElement().show();
+                        }
+                    },
+                    {
+                        type: 'button',
+                        id: 'browse',
+                        hidden: 'true',
+                        filebrowser: 'info:url',
+                        label: commonLang.browseServer
+                    } ]
+                },
+                {
+                    type: 'vbox',
+                    id: 'anchorOptions',
+                    width: 260,
+                    align: 'center',
+                    padding: 0,
+                    children: [ {
+                        type: 'fieldset',
+                        id: 'selectAnchorText',
+                        label: linkLang.selectAnchor,
+                        setup: function() { //  data 
+                            anchors = plugin.getEditorAnchors( editor );
+
+                            this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ]();
+                        },
+                        children: [ {
+                            type: 'hbox',
+                            id: 'selectAnchor',
+                            children: [ {
+                                type: 'select',
+                                id: 'anchorName',
+                                'default': '',
+                                label: linkLang.anchorName,
+                                style: 'width: 100%;',
+                                items: [
+                                    [ '' ]
+                                ],
+                                setup: function( data ) {
+                                    this.clear();
+                                    this.add( '' );
+
+                                    if ( anchors ) {
+                                        for ( var i = 0; i < anchors.length; i++ ) {
+                                            if ( anchors[ i ].name )
+                                                this.add( anchors[ i ].name );
+                                        }
+                                    }
+
+                                    if ( data.anchor )
+                                        this.setValue( data.anchor.name );
+
+                                    var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
+                                    if ( linkType && linkType.getValue() == 'email' )
+                                        this.focus();
+                                },
+                                commit: function( data ) {
+                                    if ( !data.anchor )
+                                        data.anchor = {};
+
+                                    data.anchor.name = this.getValue();
+                                }
+                            },
+                            {
+                                type: 'select',
+                                id: 'anchorId',
+                                'default': '',
+                                label: linkLang.anchorId,
+                                style: 'width: 100%;',
+                                items: [
+                                    [ '' ]
+                                ],
+                                setup: function( data ) {
+                                    this.clear();
+                                    this.add( '' );
+
+                                    if ( anchors ) {
+                                        for ( var i = 0; i < anchors.length; i++ ) {
+                                            if ( anchors[ i ].id )
+                                                this.add( anchors[ i ].id );
+                                        }
+                                    }
+
+                                    if ( data.anchor )
+                                        this.setValue( data.anchor.id );
+                                },
+                                commit: function( data ) {
+                                    if ( !data.anchor )
+                                        data.anchor = {};
+
+                                    data.anchor.id = this.getValue();
+                                }
+                            } ],
+                            setup: function() { //  data 
+                                this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ]();
+                            }
+                        } ]
+                    },
+                    {
+                        type: 'html',
+                        id: 'noAnchors',
+                        style: 'text-align: center;',
+                        html: '<div role="note" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( linkLang.noAnchors ) + '</div>',
+                        // Focus the first element defined in above html.
+                        focus: true,
+                        setup: function() { // data 
+                            this.getElement()[ anchors && anchors.length ? 'hide' : 'show' ]();
+                        }
+                    } ],
+                    setup: function() { // data 
+                        if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
+                            this.getElement().hide();
+                    }
+                },
+                {
+                    type: 'vbox',
+                    id: 'emailOptions',
+                    padding: 1,
+                    children: [ {
+                        type: 'text',
+                        id: 'emailAddress',
+                        label: linkLang.emailAddress,
+                        required: true,
+                        validate: function() {
+                            var dialog = this.getDialog();
+
+                            if ( !dialog.getContentElement( 'info', 'linkType' ) || dialog.getValueOf( 'info', 'linkType' ) != 'email' )
+                                return true;
+
+                            var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noEmail );
+                            return func.apply( this );
+                        },
+                        setup: function( data ) {
+                            if ( data.email )
+                                this.setValue( data.email.address );
+
+                            var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
+                            if ( linkType && linkType.getValue() == 'email' )
+                                this.select();
+                        },
+                        commit: function( data ) {
+                            if ( !data.email )
+                                data.email = {};
+
+                            data.email.address = this.getValue();
+                        }
+                    },
+                    {
+                        type: 'text',
+                        id: 'emailSubject',
+                        label: linkLang.emailSubject,
+                        setup: function( data ) {
+                            if ( data.email )
+                                this.setValue( data.email.subject );
+                        },
+                        commit: function( data ) {
+                            if ( !data.email )
+                                data.email = {};
+
+                            data.email.subject = this.getValue();
+                        }
+                    },
+                    {
+                        type: 'textarea',
+                        id: 'emailBody',
+                        label: linkLang.emailBody,
+                        rows: 3,
+                        'default': '',
+                        setup: function( data ) {
+                            if ( data.email )
+                                this.setValue( data.email.body );
+                        },
+                        commit: function( data ) {
+                            if ( !data.email )
+                                data.email = {};
+
+                            data.email.body = this.getValue();
+                    }
+                    } ],
+                    setup: function() {  // data
+                        if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )
+                            this.getElement().hide();
+                    }
+                } ]
+            },
+            {
+                id: 'target',
+                requiredContent: 'a[target]', // This is not fully correct, because some target option requires JS.
+                label: linkLang.target,
+                title: linkLang.target,
+                elements: [ {
+                    type: 'hbox',
+                    widths: [ '50%', '50%' ],
+                    children: [ {
+                        type: 'select',
+                        id: 'linkTargetType',
+                        label: commonLang.target,
+                        'default': 'notSet',
+                        style: 'width : 100%;',
+                        'items': [
+                            [ commonLang.notSet, 'notSet' ],
+                            [ linkLang.targetFrame, 'frame' ],
+                            [ linkLang.targetPopup, 'popup' ],
+                            [ commonLang.targetNew, '_blank' ],
+                            [ commonLang.targetTop, '_top' ],
+                            [ commonLang.targetSelf, '_self' ],
+                            [ commonLang.targetParent, '_parent' ]
+                        ],
+                        onChange: targetChanged,
+                        setup: function( data ) {
+                            if ( data.target )
+                                this.setValue( data.target.type || 'notSet' );
+                            targetChanged.call( this );
+                        },
+                        commit: function( data ) {
+                            if ( !data.target )
+                                data.target = {};
+
+                            data.target.type = this.getValue();
+                        }
+                    },
+                    {
+                        type: 'text',
+                        id: 'linkTargetName',
+                        label: linkLang.targetFrameName,
+                        'default': '',
+                        setup: function( data ) {
+                            if ( data.target )
+                                this.setValue( data.target.name );
+                        },
+                        commit: function( data ) {
+                            if ( !data.target )
+                                data.target = {};
+
+                            data.target.name = this.getValue().replace( /\W/gi, '' );
+                        }
+                    } ]
+                },
+                {
+                    type: 'vbox',
+                    width: '100%',
+                    align: 'center',
+                    padding: 2,
+                    id: 'popupFeatures',
+                    children: [ {
+                        type: 'fieldset',
+                        label: linkLang.popupFeatures,
+                        children: [ {
+                            type: 'hbox',
+                            children: [ {
+                                type: 'checkbox',
+                                id: 'resizable',
+                                label: linkLang.popupResizable,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+                            },
+                            {
+                                type: 'checkbox',
+                                id: 'status',
+                                label: linkLang.popupStatusBar,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        },
+                        {
+                            type: 'hbox',
+                            children: [ {
+                                type: 'checkbox',
+                                id: 'location',
+                                label: linkLang.popupLocationBar,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            },
+                            {
+                                type: 'checkbox',
+                                id: 'toolbar',
+                                label: linkLang.popupToolbar,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        },
+                        {
+                            type: 'hbox',
+                            children: [ {
+                                type: 'checkbox',
+                                id: 'menubar',
+                                label: linkLang.popupMenuBar,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            },
+                            {
+                                type: 'checkbox',
+                                id: 'fullscreen',
+                                label: linkLang.popupFullScreen,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        },
+                        {
+                            type: 'hbox',
+                            children: [ {
+                                type: 'checkbox',
+                                id: 'scrollbars',
+                                label: linkLang.popupScrollBars,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            },
+                            {
+                                type: 'checkbox',
+                                id: 'dependent',
+                                label: linkLang.popupDependent,
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        },
+                        {
+                        type: 'hbox',
+                        children: [ {
+                            type: 'text',
+                            widths: [ '50%', '50%' ],
+                            labelLayout: 'horizontal',
+                            label: commonLang.width,
+                            id: 'width',
+                            setup: setupPopupParams,
+                            commit: commitPopupParams
+
+                            },
+                            {
+                                type: 'text',
+                                labelLayout: 'horizontal',
+                                widths: [ '50%', '50%' ],
+                                label: linkLang.popupLeft,
+                                id: 'left',
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        },
+                        {
+                            type: 'hbox',
+                            children: [ {
+                                type: 'text',
+                                labelLayout: 'horizontal',
+                                widths: [ '50%', '50%' ],
+                                label: commonLang.height,
+                                id: 'height',
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            },
+                            {
+                                type: 'text',
+                                labelLayout: 'horizontal',
+                                label: linkLang.popupTop,
+                                widths: [ '50%', '50%' ],
+                                id: 'top',
+                                setup: setupPopupParams,
+                                commit: commitPopupParams
+
+                            } ]
+                        } ]
+                    } ]
+                } ]
+            },
+            {
+                id: 'upload',
+                label: linkLang.upload,
+                title: linkLang.upload,
+                hidden: true,
+                filebrowser: 'uploadButton',
+                elements: [ {
+                    type: 'file',
+                    id: 'upload',
+                    label: commonLang.upload,
+                    style: 'height:40px',
+                    size: 29
+                },
+                {
+                    type: 'fileButton',
+                    id: 'uploadButton',
+                    label: commonLang.uploadSubmit,
+                    filebrowser: 'info:url',
+                    'for': [ 'upload', 'upload' ]
+                } ]
+            },
+            {
+                id: 'advanced',
+                label: linkLang.advanced,
+                title: linkLang.advanced,
+                elements: [ {
+                    type: 'vbox',
+                    padding: 1,
+                    children: [ {
+                        type: 'hbox',
+                        widths: [ '45%', '35%', '20%' ],
+                        children: [ {
+                            type: 'text',
+                            id: 'advId',
+                            requiredContent: 'a[id]',
+                            label: linkLang.id,
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+                        },
+                        {
+                            type: 'select',
+                            id: 'advLangDir',
+                            requiredContent: 'a[dir]',
+                            label: linkLang.langDir,
+                            'default': '',
+                            style: 'width:110px',
+                            items: [
+                                [ commonLang.notSet, '' ],
+                                [ linkLang.langDirLTR, 'ltr' ],
+                                [ linkLang.langDirRTL, 'rtl' ]
+                            ],
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+                        },
+                        {
+                            type: 'text',
+                            id: 'advAccessKey',
+                            requiredContent: 'a[accesskey]',
+                            width: '80px',
+                            label: linkLang.acccessKey,
+                            maxLength: 1,
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        } ]
+                    },
+                    {
+                        type: 'hbox',
+                        widths: [ '45%', '35%', '20%' ],
+                        children: [ {
+                            type: 'text',
+                            label: linkLang.name,
+                            id: 'advName',
+                            requiredContent: 'a[name]',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        },
+                        {
+                            type: 'text',
+                            label: linkLang.langCode,
+                            id: 'advLangCode',
+                            requiredContent: 'a[lang]',
+                            width: '110px',
+                            'default': '',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        },
+                        {
+                            type: 'text',
+                            label: linkLang.tabIndex,
+                            id: 'advTabIndex',
+                            requiredContent: 'a[tabindex]',
+                            width: '80px',
+                            maxLength: 5,
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        } ]
+                    } ]
+                },
+                {
+                    type: 'vbox',
+                    padding: 1,
+                    children: [ {
+                        type: 'hbox',
+                        widths: [ '45%', '55%' ],
+                        children: [ {
+                            type: 'text',
+                            label: linkLang.advisoryTitle,
+                            requiredContent: 'a[title]',
+                            'default': '',
+                            id: 'advTitle',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        },
+                            {
+                            type: 'text',
+                            label: linkLang.advisoryContentType,
+                            requiredContent: 'a[type]',
+                            'default': '',
+                            id: 'advContentType',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        } ]
+                    },
+                    {
+                        type: 'hbox',
+                        widths: [ '45%', '55%' ],
+                        children: [ {
+                            type: 'text',
+                            label: linkLang.cssClasses,
+                            requiredContent: 'a(cke-xyz)', // Random text like 'xyz' will check if all are allowed.
+                            'default': '',
+                            id: 'advCSSClasses',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        },
+                        {
+                            type: 'text',
+                            label: linkLang.charset,
+                            requiredContent: 'a[charset]',
+                            'default': '',
+                            id: 'advCharset',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+
+                        } ]
+                    },
+                    {
+                        type: 'hbox',
+                        widths: [ '45%', '55%' ],
+                        children: [ {
+                            type: 'text',
+                            label: linkLang.rel,
+                            requiredContent: 'a[rel]',
+                            'default': '',
+                            id: 'advRel',
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+                        },
+                        {
+                            type: 'text',
+                            label: linkLang.styles,
+                            requiredContent: 'a{cke-xyz}', // Random text like 'xyz' will check if all are allowed.
+                            'default': '',
+                            id: 'advStyles',
+                            validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ),
+                            setup: setupAdvParams,
+                            commit: commitAdvParams
+                        } ]
+                    } ]
+                } ]
+            } ],
+            onShow: function() {
+                var editor = this.getParentEditor(),
+                    selection = editor.getSelection(),
+                    element = null;
+
+                // Fill in all the relevant fields if there's already one link selected.
+                if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) ) {
+                    // Don't change selection if some element is already selected.
+                    // For example - don't destroy fake selection.
+                    if ( !selection.getSelectedElement() )
+                        selection.selectElement( element );
+                } else {
+                    element = null;
+                }
+
+                var data = plugin.parseLinkAttributes( editor, element );
+
+                // Record down the selected element in the dialog.
+                this._.selectedElement = element;
+
+                this.setupContent( data );
+            },
+            onOk: function() {
+                var data = {};
+
+                // Collect data from fields.
+                this.commitContent( data );
+
+                var selection = editor.getSelection(),
+                    attributes = plugin.getLinkAttributes( editor, data );
+
+                if ( !this._.selectedElement ) {
+                    var range = selection.getRanges()[ 0 ];
+
+                    // Use link URL as text with a collapsed cursor.
+                    if ( range.collapsed ) {
+                        // Short mailto link text view (#5736).
+                        var text = new CKEDITOR.dom.text( data.type == 'email' ?
+                            data.email.address : attributes.set[ 'data-cke-saved-href' ], editor.document );
+                        range.insertNode( text );
+                        range.selectNodeContents( text );
+                    }
+
+                    // Apply style.
+                    var style = new CKEDITOR.style( {
+                        element: 'a',
+                        attributes: attributes.set
+                    } );
+
+                    style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why.
+                    style.applyToRange( range, editor );
+                    range.select();
+                } else {
+                    // We're only editing an existing link, so just overwrite the attributes.
+                    var element = this._.selectedElement,
+                        href = element.data( 'cke-saved-href' ),
+                        textView = element.getHtml();
+
+                    element.setAttributes( attributes.set );
+                    element.removeAttributes( attributes.removed );
+
+                    // Update text view when user changes protocol (#4612).
+                    if ( href == textView || data.type == 'email' && textView.indexOf( '@' ) != -1 ) {
+                        // Short mailto link text view (#5736).
+                        element.setHtml( data.type == 'email' ?
+                            data.email.address : attributes.set[ 'data-cke-saved-href' ] );
+
+                        // We changed the content, so need to select it again.
+                        selection.selectElement( element );
+                    }
+
+                    delete this._.selectedElement;
+                }
+            },
+            onLoad: function() {
+                if ( !editor.config.linkShowAdvancedTab )
+                    this.hidePage( 'advanced' ); //Hide Advanded tab.
+
+                if ( !editor.config.linkShowTargetTab )
+                    this.hidePage( 'target' ); //Hide Target tab.
+            },
+            // Inital focus on 'url' field if link is of type URL.
+            onFocus: function() {
+                var linkType = this.getContentElement( 'info', 'linkType' ),
+                    urlField;
+
+                if ( linkType && linkType.getValue() == 'url' ) {
+                    urlField = this.getContentElement( 'info', 'url' );
+                    urlField.select();
+                }
+            }
+        };
+    } );
+} )(); 
+// jscs:disable maximumLineLength
+/**
+ * The e-mail address anti-spam protection option. The protection will be
+ * applied when creating or modifying e-mail links through the editor interface.
+ *
+ * Two methods of protection can be chosen:
+ *
+ * 1. The e-mail parts (name, domain, and any other query string) are
+ *     assembled into a function call pattern. Such function must be
+ *     provided by the developer in the pages that will use the contents.
+ * 2. Only the e-mail address is obfuscated into a special string that
+ *     has no meaning for humans or spam bots, but which is properly
+ *     rendered and accepted by the browser.
+ *
+ * Both approaches require JavaScript to be enabled.
+ *
+ *        // href="mailto:tester@ckeditor.com?subject=subject&body=body"
+ *        config.emailProtection = '';
+ *
+ *        // href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>"
+ *        config.emailProtection = 'encode';
+ *
+ *        // href="javascript:mt('tester','ckeditor.com','subject','body')"
+ *        config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)';
+ *
+ * @since 3.1
+ * @cfg {String} [emailProtection='' (empty string = disabled)]
+ * @member CKEDITOR.config
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/_wblink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/_wblink.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/anchor-rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/anchor-rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/anchor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/anchor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/link.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/unlink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/unlink.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/wblink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/icons/wblink.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/anchor.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/anchor.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/anchor.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/anchor.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/link.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/link.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/link.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/unlink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/images/unlink.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/af.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'af', {
+	acccessKey: 'Toegangsleutel',
+	advanced: 'Gevorderd',
+	advisoryContentType: 'Aanbevole inhoudstipe',
+	advisoryTitle: 'Aanbevole titel',
+	anchor: {
+		toolbar: 'Anker byvoeg/verander',
+		menu: 'Anker-eienskappe',
+		title: 'Anker-eienskappe',
+		name: 'Ankernaam',
+		errorName: 'Voltooi die ankernaam asseblief',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Op element Id',
+	anchorName: 'Op ankernaam',
+	charset: 'Karakterstel van geskakelde bron',
+	cssClasses: 'CSS klasse',
+	emailAddress: 'E-posadres',
+	emailBody: 'Berig-inhoud',
+	emailSubject: 'Berig-onderwerp',
+	id: 'Id',
+	info: 'Skakel informasie',
+	langCode: 'Taalkode',
+	langDir: 'Skryfrigting',
+	langDirLTR: 'Links na regs (LTR)',
+	langDirRTL: 'Regs na links (RTL)',
+	menu: 'Wysig skakel',
+	name: 'Naam',
+	noAnchors: '(Geen ankers beskikbaar in dokument)',
+	noEmail: 'Gee die e-posadres',
+	noUrl: 'Gee die skakel se URL',
+	other: '<ander>',
+	popupDependent: 'Afhanklik (Netscape)',
+	popupFeatures: 'Eienskappe van opspringvenster',
+	popupFullScreen: 'Volskerm (IE)',
+	popupLeft: 'Posisie links',
+	popupLocationBar: 'Adresbalk',
+	popupMenuBar: 'Spyskaartbalk',
+	popupResizable: 'Herskaalbaar',
+	popupScrollBars: 'Skuifbalke',
+	popupStatusBar: 'Statusbalk',
+	popupToolbar: 'Werkbalk',
+	popupTop: 'Posisie bo',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Kies \'n anker',
+	styles: 'Styl',
+	tabIndex: 'Tab indeks',
+	target: 'Doel',
+	targetFrame: '<raam>',
+	targetFrameName: 'Naam van doelraam',
+	targetPopup: '<opspringvenster>',
+	targetPopupName: 'Naam van opspringvenster',
+	title: 'Skakel',
+	toAnchor: 'Anker in bladsy',
+	toEmail: 'E-pos',
+	toUrl: 'URL',
+	toolbar: 'Skakel invoeg/wysig',
+	type: 'Skakelsoort',
+	unlink: 'Verwyder skakel',
+	upload: 'Oplaai',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ar.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ar', {
+	acccessKey: 'مفاتيح الإختصار',
+	advanced: 'متقدم',
+	advisoryContentType: 'نوع التقرير',
+	advisoryTitle: 'عنوان التقرير',
+	anchor: {
+		toolbar: 'إشارة مرجعية',
+		menu: 'تحرير الإشارة المرجعية',
+		title: 'خصائص الإشارة المرجعية',
+		name: 'اسم الإشارة المرجعية',
+		errorName: 'الرجاء كتابة اسم الإشارة المرجعية',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'حسب رقم العنصر',
+	anchorName: 'حسب الاسم',
+	charset: 'ترميز المادة المطلوبة',
+	cssClasses: 'فئات التنسيق',
+	emailAddress: 'عنوان البريد إلكتروني',
+	emailBody: 'محتوى الرسالة',
+	emailSubject: 'موضوع الرسالة',
+	id: 'هوية',
+	info: 'معلومات الرابط',
+	langCode: 'كود النص',
+	langDir: 'إتجاه النص',
+	langDirLTR: 'اليسار لليمين (LTR)',
+	langDirRTL: 'اليمين لليسار (RTL)',
+	menu: 'تحرير رابط',
+	name: 'الاسم',
+	noAnchors: '(لا توجد علامات مرجعية في هذا المستند)',
+	noEmail: 'من فضلك أدخل عنوان البريد الإلكتروني',
+	noUrl: 'من فضلك أدخل عنوان الموقع الذي يشير إليه الرابط',
+	other: '<أخرى>',
+	popupDependent: 'تابع (Netscape)',
+	popupFeatures: 'خصائص النافذة المنبثقة',
+	popupFullScreen: 'ملئ الشاشة (IE)',
+	popupLeft: 'التمركز لليسار',
+	popupLocationBar: 'شريط العنوان',
+	popupMenuBar: 'القوائم الرئيسية',
+	popupResizable: 'قابلة التشكيل',
+	popupScrollBars: 'أشرطة التمرير',
+	popupStatusBar: 'شريط الحالة',
+	popupToolbar: 'شريط الأدوات',
+	popupTop: 'التمركز للأعلى',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'اختر علامة مرجعية',
+	styles: 'نمط',
+	tabIndex: 'الترتيب',
+	target: 'هدف الرابط',
+	targetFrame: '<إطار>',
+	targetFrameName: 'اسم الإطار المستهدف',
+	targetPopup: '<نافذة منبثقة>',
+	targetPopupName: 'اسم النافذة المنبثقة',
+	title: 'إرتباط تشعبي',
+	toAnchor: 'مكان في هذا المستند',
+	toEmail: 'بريد إلكتروني',
+	toUrl: 'الرابط',
+	toolbar: 'رابط',
+	type: 'نوع الربط',
+	unlink: 'إزالة رابط',
+	upload: 'رفع',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bg.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'bg', {
+	acccessKey: 'Ключ за достъп',
+	advanced: 'Разширено',
+	advisoryContentType: 'Препоръчителен тип на съдържанието',
+	advisoryTitle: 'Препоръчително заглавие',
+	anchor: {
+		toolbar: 'Котва',
+		menu: 'Промяна на котва',
+		title: 'Настройки на котва',
+		name: 'Име на котва',
+		errorName: 'Моля въведете име на котвата',
+		remove: 'Премахване на котва'
+	},
+	anchorId: 'По ID на елемент',
+	anchorName: 'По име на котва',
+	charset: 'Тип на свързания ресурс',
+	cssClasses: 'Класове за CSS',
+	emailAddress: 'E-mail aдрес',
+	emailBody: 'Съдържание',
+	emailSubject: 'Тема',
+	id: 'ID',
+	info: 'Инфо за връзката',
+	langCode: 'Код за езика',
+	langDir: 'Посока на езика',
+	langDirLTR: 'Ляво на Дясно (ЛнД)',
+	langDirRTL: 'Дясно на Ляво (ДнЛ)',
+	menu: 'Промяна на връзка',
+	name: 'Име',
+	noAnchors: '(Няма котви в текущия документ)',
+	noEmail: 'Моля въведете e-mail aдрес',
+	noUrl: 'Моля въведете URL адреса',
+	other: '<друго>',
+	popupDependent: 'Зависимост (Netscape)',
+	popupFeatures: 'Функции на изкачащ прозорец',
+	popupFullScreen: 'Цял екран (IE)',
+	popupLeft: 'Лява позиция',
+	popupLocationBar: 'Лента с локацията',
+	popupMenuBar: 'Лента за меню',
+	popupResizable: 'Оразмеряем',
+	popupScrollBars: 'Скролери',
+	popupStatusBar: 'Статусна лента',
+	popupToolbar: 'Лента с инструменти',
+	popupTop: 'Горна позиция',
+	rel: 'Връзка',
+	selectAnchor: 'Изберете котва',
+	styles: 'Стил',
+	tabIndex: 'Ред на достъп',
+	target: 'Цел',
+	targetFrame: '<frame>',
+	targetFrameName: 'Име на целевият прозорец',
+	targetPopup: '<изкачащ прозорец>',
+	targetPopupName: 'Име на изкачащ прозорец',
+	title: 'Връзка',
+	toAnchor: 'Връзка към котва в текста',
+	toEmail: 'E-mail',
+	toUrl: 'Уеб адрес',
+	toolbar: 'Връзка',
+	type: 'Тип на връзката',
+	unlink: 'Премахни връзката',
+	upload: 'Качване',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bn.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'bn', {
+	acccessKey: 'এক্সেস কী',
+	advanced: 'এডভান্সড',
+	advisoryContentType: 'পরামর্শ কন্টেন্টের প্রকার',
+	advisoryTitle: 'পরামর্শ শীর্ষক',
+	anchor: {
+		toolbar: 'নোঙ্গর',
+		menu: 'নোঙর প্রোপার্টি',
+		title: 'নোঙর প্রোপার্টি',
+		name: 'নোঙরের নাম',
+		errorName: 'নোঙরের নাম টাইপ করুন',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'নোঙরের আইডি দিয়ে',
+	anchorName: 'নোঙরের নাম দিয়ে',
+	charset: 'লিংক রিসোর্স ক্যারেক্টর সেট',
+	cssClasses: 'স্টাইল-শীট ক্লাস',
+	emailAddress: 'ইমেইল ঠিকানা',
+	emailBody: 'মেসেজের দেহ',
+	emailSubject: 'মেসেজের বিষয়',
+	id: 'আইডি',
+	info: 'লিংক তথ্য',
+	langCode: 'ভাষা লেখার দিক',
+	langDir: 'ভাষা লেখার দিক',
+	langDirLTR: 'বাম থেকে ডান (LTR)',
+	langDirRTL: 'ডান থেকে বাম (RTL)',
+	menu: 'লিংক সম্পাদন',
+	name: 'নাম',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন',
+	noUrl: 'অনুগ্রহ করে URL লিংক টাইপ করুন',
+	other: '<other>', // MISSING
+	popupDependent: 'ডিপেন্ডেন্ট (Netscape)',
+	popupFeatures: 'পপআপ উইন্ডো ফীচার সমূহ',
+	popupFullScreen: 'পূর্ণ পর্দা জুড়ে (IE)',
+	popupLeft: 'বামের পজিশন',
+	popupLocationBar: 'লোকেশন বার',
+	popupMenuBar: 'মেন্যু বার',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'স্ক্রল বার',
+	popupStatusBar: 'স্ট্যাটাস বার',
+	popupToolbar: 'টুল বার',
+	popupTop: 'ডানের পজিশন',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'নোঙর বাছাই',
+	styles: 'স্টাইল',
+	tabIndex: 'ট্যাব ইন্ডেক্স',
+	target: 'টার্গেট',
+	targetFrame: '<ফ্রেম>',
+	targetFrameName: 'টার্গেট ফ্রেমের নাম',
+	targetPopup: '<পপআপ উইন্ডো>',
+	targetPopupName: 'পপআপ উইন্ডোর নাম',
+	title: 'লিংক',
+	toAnchor: 'এই পেজে নোঙর কর',
+	toEmail: 'ইমেইল',
+	toUrl: 'URL',
+	toolbar: 'লিংক যুক্ত কর',
+	type: 'লিংক প্রকার',
+	unlink: 'লিংক সরাও',
+	upload: 'আপলোড',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/bs.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'bs', {
+	acccessKey: 'Pristupna tipka',
+	advanced: 'Naprednije',
+	advisoryContentType: 'Advisory vrsta sadržaja',
+	advisoryTitle: 'Advisory title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Po Id-u elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Klase CSS stilova',
+	emailAddress: 'E-Mail Adresa',
+	emailBody: 'Poruka',
+	emailSubject: 'Subjekt poruke',
+	id: 'Id',
+	info: 'Link info',
+	langCode: 'Smjer pisanja',
+	langDir: 'Smjer pisanja',
+	langDirLTR: 'S lijeva na desno (LTR)',
+	langDirRTL: 'S desna na lijevo (RTL)',
+	menu: 'Izmjeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema dostupnih sidra na stranici)',
+	noEmail: 'Molimo ukucajte e-mail adresu',
+	noUrl: 'Molimo ukucajte URL link',
+	other: '<other>', // MISSING
+	popupDependent: 'Ovisno (Netscape)',
+	popupFeatures: 'Moguænosti popup prozora',
+	popupFullScreen: 'Cijeli ekran (IE)',
+	popupLeft: 'Lijeva pozicija',
+	popupLocationBar: 'Traka za lokaciju',
+	popupMenuBar: 'Izborna traka',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll traka',
+	popupStatusBar: 'Statusna traka',
+	popupToolbar: 'Traka sa alatima',
+	popupTop: 'Gornja pozicija',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Izaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab indeks',
+	target: 'Prozor',
+	targetFrame: '<frejm>',
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup prozor>',
+	targetPopupName: 'Naziv popup prozora',
+	title: 'Link',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Ubaci/Izmjeni link',
+	type: 'Tip linka',
+	unlink: 'Izbriši link',
+	upload: 'Šalji',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ca.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ca', {
+	acccessKey: 'Clau d\'accés',
+	advanced: 'Avançat',
+	advisoryContentType: 'Tipus de contingut consultiu',
+	advisoryTitle: 'Títol consultiu',
+	anchor: {
+		toolbar: 'Insereix/Edita àncora',
+		menu: 'Propietats de l\'àncora',
+		title: 'Propietats de l\'àncora',
+		name: 'Nom de l\'àncora',
+		errorName: 'Si us plau, escriviu el nom de l\'ancora',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Per Id d\'element',
+	anchorName: 'Per nom d\'àncora',
+	charset: 'Conjunt de caràcters font enllaçat',
+	cssClasses: 'Classes del full d\'estil',
+	emailAddress: 'Adreça de correu electrònic',
+	emailBody: 'Cos del missatge',
+	emailSubject: 'Assumpte del missatge',
+	id: 'Id',
+	info: 'Informació de l\'enllaç',
+	langCode: 'Direcció de l\'idioma',
+	langDir: 'Direcció de l\'idioma',
+	langDirLTR: 'D\'esquerra a dreta (LTR)',
+	langDirRTL: 'De dreta a esquerra (RTL)',
+	menu: 'Edita l\'enllaç',
+	name: 'Nom',
+	noAnchors: '(No hi ha àncores disponibles en aquest document)',
+	noEmail: 'Si us plau, escrigui l\'adreça correu electrònic',
+	noUrl: 'Si us plau, escrigui l\'enllaç URL',
+	other: '<altre>',
+	popupDependent: 'Depenent (Netscape)',
+	popupFeatures: 'Característiques finestra popup',
+	popupFullScreen: 'Pantalla completa (IE)',
+	popupLeft: 'Posició esquerra',
+	popupLocationBar: 'Barra d\'adreça',
+	popupMenuBar: 'Barra de menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barres d\'scroll',
+	popupStatusBar: 'Barra d\'estat',
+	popupToolbar: 'Barra d\'eines',
+	popupTop: 'Posició dalt',
+	rel: 'Relació',
+	selectAnchor: 'Selecciona una àncora',
+	styles: 'Estil',
+	tabIndex: 'Index de Tab',
+	target: 'Destí',
+	targetFrame: '<marc>',
+	targetFrameName: 'Nom del marc de destí',
+	targetPopup: '<finestra emergent>',
+	targetPopupName: 'Nom finestra popup',
+	title: 'Enllaç',
+	toAnchor: 'Àncora en aquesta pàgina',
+	toEmail: 'Correu electrònic',
+	toUrl: 'URL',
+	toolbar: 'Insereix/Edita enllaç',
+	type: 'Tipus d\'enllaç',
+	unlink: 'Elimina l\'enllaç',
+	upload: 'Puja',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cs.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'cs', {
+	acccessKey: 'Přístupový klíč',
+	advanced: 'Rozšířené',
+	advisoryContentType: 'Pomocný typ obsahu',
+	advisoryTitle: 'Pomocný titulek',
+	anchor: {
+		toolbar: 'Záložka',
+		menu: 'Vlastnosti záložky',
+		title: 'Vlastnosti záložky',
+		name: 'Název záložky',
+		errorName: 'Zadejte prosím název záložky',
+		remove: 'Odstranit záložku'
+	},
+	anchorId: 'Podle Id objektu',
+	anchorName: 'Podle jména kotvy',
+	charset: 'Přiřazená znaková sada',
+	cssClasses: 'Třída stylu',
+	emailAddress: 'E-mailová adresa',
+	emailBody: 'Tělo zprávy',
+	emailSubject: 'Předmět zprávy',
+	id: 'Id',
+	info: 'Informace o odkazu',
+	langCode: 'Kód jazyka',
+	langDir: 'Směr jazyka',
+	langDirLTR: 'Zleva doprava (LTR)',
+	langDirRTL: 'Zprava doleva (RTL)',
+	menu: 'Změnit odkaz',
+	name: 'Jméno',
+	noAnchors: '(Ve stránce není definována žádná kotva!)',
+	noEmail: 'Zadejte prosím e-mailovou adresu',
+	noUrl: 'Zadejte prosím URL odkazu',
+	other: '<jiný>',
+	popupDependent: 'Závislost (Netscape)',
+	popupFeatures: 'Vlastnosti vyskakovacího okna',
+	popupFullScreen: 'Celá obrazovka (IE)',
+	popupLeft: 'Levý okraj',
+	popupLocationBar: 'Panel umístění',
+	popupMenuBar: 'Panel nabídky',
+	popupResizable: 'Umožňující měnit velikost',
+	popupScrollBars: 'Posuvníky',
+	popupStatusBar: 'Stavový řádek',
+	popupToolbar: 'Panel nástrojů',
+	popupTop: 'Horní okraj',
+	rel: 'Vztah',
+	selectAnchor: 'Vybrat kotvu',
+	styles: 'Styl',
+	tabIndex: 'Pořadí prvku',
+	target: 'Cíl',
+	targetFrame: '<rámec>',
+	targetFrameName: 'Název cílového rámu',
+	targetPopup: '<vyskakovací okno>',
+	targetPopupName: 'Název vyskakovacího okna',
+	title: 'Odkaz',
+	toAnchor: 'Kotva v této stránce',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Odkaz',
+	type: 'Typ odkazu',
+	unlink: 'Odstranit odkaz',
+	upload: 'Odeslat',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/cy.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'cy', {
+	acccessKey: 'Allwedd Mynediad',
+	advanced: 'Uwch',
+	advisoryContentType: 'Math y Cynnwys Cynghorol',
+	advisoryTitle: 'Teitl Cynghorol',
+	anchor: {
+		toolbar: 'Angor',
+		menu: 'Golygwch yr Angor',
+		title: 'Priodweddau\'r Angor',
+		name: 'Enw\'r Angor',
+		errorName: 'Teipiwch enw\'r angor',
+		remove: 'Tynnwch yr Angor'
+	},
+	anchorId: 'Gan Id yr Elfen',
+	anchorName: 'Gan Enw\'r Angor',
+	charset: 'Set nodau\'r Adnodd Cysylltiedig',
+	cssClasses: 'Dosbarthiadau Dalen Arddull',
+	emailAddress: 'Cyfeiriad E-Bost',
+	emailBody: 'Pwnc y Neges',
+	emailSubject: 'Testun y Message Subject',
+	id: 'Id',
+	info: 'Gwyb ar y Ddolen',
+	langCode: 'Cod Iaith',
+	langDir: 'Cyfeiriad Iaith',
+	langDirLTR: 'Chwith i\'r Dde (LTR)',
+	langDirRTL: 'Dde i\'r Chwith (RTL)',
+	menu: 'Golygu Dolen',
+	name: 'Enw',
+	noAnchors: '(Dim angorau ar gael yn y ddogfen)',
+	noEmail: 'Teipiwch gyfeiriad yr e-bost',
+	noUrl: 'Teipiwch URL y ddolen',
+	other: '<eraill>',
+	popupDependent: 'Dibynnol (Netscape)',
+	popupFeatures: 'Nodweddion Ffenestr Bop',
+	popupFullScreen: 'Sgrin Llawn (IE)',
+	popupLeft: 'Safle Chwith',
+	popupLocationBar: 'Bar Safle',
+	popupMenuBar: 'Dewislen',
+	popupResizable: 'Ailfeintiol',
+	popupScrollBars: 'Barrau Sgrolio',
+	popupStatusBar: 'Bar Statws',
+	popupToolbar: 'Bar Offer',
+	popupTop: 'Safle Top',
+	rel: 'Perthynas',
+	selectAnchor: 'Dewiswch Angor',
+	styles: 'Arddull',
+	tabIndex: 'Indecs Tab',
+	target: 'Targed',
+	targetFrame: '<ffrâm>',
+	targetFrameName: 'Enw Ffrâm y Targed',
+	targetPopup: '<ffenestr bop>',
+	targetPopupName: 'Enw Ffenestr Bop',
+	title: 'Dolen',
+	toAnchor: 'Dolen at angor yn y testun',
+	toEmail: 'E-bost',
+	toUrl: 'URL',
+	toolbar: 'Dolen',
+	type: 'Math y Ddolen',
+	unlink: 'Datgysylltu',
+	upload: 'Lanlwytho',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/da.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'da', {
+	acccessKey: 'Genvejstast',
+	advanced: 'Avanceret',
+	advisoryContentType: 'Indholdstype',
+	advisoryTitle: 'Titel',
+	anchor: {
+		toolbar: 'Indsæt/redigér bogmærke',
+		menu: 'Egenskaber for bogmærke',
+		title: 'Egenskaber for bogmærke',
+		name: 'Bogmærkenavn',
+		errorName: 'Indtast bogmærkenavn',
+		remove: 'Fjern bogmærke'
+	},
+	anchorId: 'Efter element-Id',
+	anchorName: 'Efter ankernavn',
+	charset: 'Tegnsæt',
+	cssClasses: 'Typografiark',
+	emailAddress: 'E-mailadresse',
+	emailBody: 'Besked',
+	emailSubject: 'Emne',
+	id: 'Id',
+	info: 'Generelt',
+	langCode: 'Tekstretning',
+	langDir: 'Tekstretning',
+	langDirLTR: 'Fra venstre mod højre (LTR)',
+	langDirRTL: 'Fra højre mod venstre (RTL)',
+	menu: 'Redigér hyperlink',
+	name: 'Navn',
+	noAnchors: '(Ingen bogmærker i dokumentet)',
+	noEmail: 'Indtast e-mailadresse!',
+	noUrl: 'Indtast hyperlink-URL!',
+	other: '<anden>',
+	popupDependent: 'Koblet/dependent (Netscape)',
+	popupFeatures: 'Egenskaber for popup',
+	popupFullScreen: 'Fuld skærm (IE)',
+	popupLeft: 'Position fra venstre',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menulinje',
+	popupResizable: 'Justérbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Værktøjslinje',
+	popupTop: 'Position fra toppen',
+	rel: 'Relation',
+	selectAnchor: 'Vælg et anker',
+	styles: 'Typografi',
+	tabIndex: 'Tabulatorindeks',
+	target: 'Mål',
+	targetFrame: '<ramme>',
+	targetFrameName: 'Destinationsvinduets navn',
+	targetPopup: '<popup vindue>',
+	targetPopupName: 'Popupvinduets navn',
+	title: 'Egenskaber for hyperlink',
+	toAnchor: 'Bogmærke på denne side',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Indsæt/redigér hyperlink',
+	type: 'Type',
+	unlink: 'Fjern hyperlink',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/de.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'de', {
+	acccessKey: 'Zugriffstaste',
+	advanced: 'Erweitert',
+	advisoryContentType: 'Inhaltstyp',
+	advisoryTitle: 'Titel Beschreibung',
+	anchor: {
+		toolbar: 'Anker einfügen/editieren',
+		menu: 'Anker-Eigenschaften',
+		title: 'Anker-Eigenschaften',
+		name: 'Anker Name',
+		errorName: 'Bitte geben Sie den Namen des Ankers ein',
+		remove: 'Anker entfernen'
+	},
+	anchorId: 'nach Element Id',
+	anchorName: 'nach Anker Name',
+	charset: 'Ziel-Zeichensatz',
+	cssClasses: 'Stylesheet Klasse',
+	emailAddress: 'E-Mail Adresse',
+	emailBody: 'Nachrichtentext',
+	emailSubject: 'Betreffzeile',
+	id: 'Id',
+	info: 'Link-Info',
+	langCode: 'Sprachenkürzel',
+	langDir: 'Schreibrichtung',
+	langDirLTR: 'Links nach Rechts (LTR)',
+	langDirRTL: 'Rechts nach Links (RTL)',
+	menu: 'Link editieren',
+	name: 'Name',
+	noAnchors: '(keine Anker im Dokument vorhanden)',
+	noEmail: 'Bitte geben Sie e-Mail Adresse an',
+	noUrl: 'Bitte geben Sie die Link-URL an',
+	other: '<andere>',
+	popupDependent: 'Abhängig (Netscape)',
+	popupFeatures: 'Pop-up Fenster-Eigenschaften',
+	popupFullScreen: 'Vollbild (IE)',
+	popupLeft: 'Linke Position',
+	popupLocationBar: 'Adress-Leiste',
+	popupMenuBar: 'Menü-Leiste',
+	popupResizable: 'Größe änderbar',
+	popupScrollBars: 'Rollbalken',
+	popupStatusBar: 'Statusleiste',
+	popupToolbar: 'Symbolleiste',
+	popupTop: 'Obere Position',
+	rel: 'Beziehung',
+	selectAnchor: 'Anker auswählen',
+	styles: 'Style',
+	tabIndex: 'Tab-Index',
+	target: 'Zielseite',
+	targetFrame: '<Frame>',
+	targetFrameName: 'Ziel-Fenster-Name',
+	targetPopup: '<Pop-up Fenster>',
+	targetPopupName: 'Pop-up Fenster-Name',
+	title: 'WB-Link',
+	toAnchor: 'Anker in dieser Seite',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Link einfügen/editieren',
+	type: 'Link-Typ',
+	unlink: 'Link entfernen',
+	upload: 'Hochladen',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Seite',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Bitte einen News-Beitrag wählen',
+	selectTopics: 'Bitte einen Topics-Beitrag wählen',
+	selectBakery: 'Bitte einen Bakery-Artikel wählen',
+	noNews: 'Keine News Seite gewählt'	
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/el.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'el', {
+	acccessKey: 'Συντόμευση',
+	advanced: 'Για προχωρημένους',
+	advisoryContentType: 'Ενδεικτικός Τύπος Περιεχομένου',
+	advisoryTitle: 'Ενδεικτικός Τίτλος',
+	anchor: {
+		toolbar: 'Εισαγωγή/επεξεργασία Άγκυρας',
+		menu: 'Ιδιότητες άγκυρας',
+		title: 'Ιδιότητες άγκυρας',
+		name: 'Όνομα άγκυρας',
+		errorName: 'Παρακαλούμε εισάγετε όνομα άγκυρας',
+		remove: 'Αφαίρεση Άγκυρας'
+	},
+	anchorId: 'Βάσει του Element Id',
+	anchorName: 'Βάσει του Ονόματος της άγκυρας',
+	charset: 'Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'Διεύθυνση e-mail',
+	emailBody: 'Κείμενο Μηνύματος',
+	emailSubject: 'Θέμα Μηνύματος',
+	id: 'Id',
+	info: 'Πληροφορίες Συνδέσμου',
+	langCode: 'Κατεύθυνση Κειμένου',
+	langDir: 'Κατεύθυνση Κειμένου',
+	langDirLTR: 'Αριστερά προς Δεξιά (LTR)',
+	langDirRTL: 'Δεξιά προς Αριστερά (RTL)',
+	menu: 'Επεξεργασία Συνδέσμου',
+	name: 'Όνομα',
+	noAnchors: '(Δεν υπάρχουν άγκυρες στο κείμενο)',
+	noEmail: 'Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου',
+	noUrl: 'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',
+	other: '<άλλο>',
+	popupDependent: 'Εξαρτημένο (Netscape)',
+	popupFeatures: 'Επιλογές Αναδυόμενου Παραθύρου',
+	popupFullScreen: 'Πλήρης Οθόνη (IE)',
+	popupLeft: 'Θέση Αριστερά',
+	popupLocationBar: 'Γραμμή Τοποθεσίας',
+	popupMenuBar: 'Γραμμή Επιλογών',
+	popupResizable: 'Προσαρμοζόμενο Μέγεθος',
+	popupScrollBars: 'Μπάρες Κύλισης',
+	popupStatusBar: 'Γραμμή Κατάστασης',
+	popupToolbar: 'Εργαλειοθήκη',
+	popupTop: 'Θέση Πάνω',
+	rel: 'Σχέση',
+	selectAnchor: 'Επιλέξτε μια άγκυρα',
+	styles: 'Μορφή',
+	tabIndex: 'Σειρά Μεταπήδησης',
+	target: 'Παράθυρο Προορισμού',
+	targetFrame: '<πλαίσιο>',
+	targetFrameName: 'Όνομα Παραθύρου Προορισμού',
+	targetPopup: '<αναδυόμενο παράθυρο>',
+	targetPopupName: 'Όνομα Αναδυόμενου Παραθύρου',
+	title: 'Σύνδεσμος',
+	toAnchor: 'Άγκυρα σε αυτή τη σελίδα',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Σύνδεσμος',
+	type: 'Τύπος Συνδέσμου',
+	unlink: 'Αφαίρεση Συνδέσμου (Link)',
+	upload: 'Ανέβασμα',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-au.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-au.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-au.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'en-au', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	other: '<other>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-ca.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'en-ca', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	other: '<other>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en-gb.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'en-gb', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	other: '<other>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/en.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'en', {
+	acccessKey: 'Access Key',
+	advanced: 'Advanced',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id',
+	anchorName: 'By Anchor Name',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'E-Mail Address',
+	emailBody: 'Message Body',
+	emailSubject: 'Message Subject',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Language Code',
+	langDir: 'Language Direction',
+	langDirLTR: 'Left to Right (LTR)',
+	langDirRTL: 'Right to Left (RTL)',
+	menu: 'Edit Link',
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)',
+	noEmail: 'Please type the e-mail address',
+	noUrl: 'Please type the link URL',
+	other: '<other>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Popup Window Features',
+	popupFullScreen: 'Full Screen (IE)',
+	popupLeft: 'Left Position',
+	popupLocationBar: 'Location Bar',
+	popupMenuBar: 'Menu Bar',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scroll Bars',
+	popupStatusBar: 'Status Bar',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Top Position',
+	rel: 'Relationship',
+	selectAnchor: 'Select an Anchor',
+	styles: 'Style',
+	tabIndex: 'Tab Index',
+	target: 'Target',
+	targetFrame: '<frame>',
+	targetFrameName: 'Target Frame Name',
+	targetPopup: '<popup window>',
+	targetPopupName: 'Popup Window Name',
+	title: 'Link',
+	toAnchor: 'Link to anchor in the text',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Link',
+	type: 'Link Type',
+	unlink: 'Unlink',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eo.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'eo', {
+	acccessKey: 'Fulmoklavo',
+	advanced: 'Speciala',
+	advisoryContentType: 'Enhavotipo',
+	advisoryTitle: 'Priskriba Titolo',
+	anchor: {
+		toolbar: 'Ankro',
+		menu: 'Enmeti/Ŝanĝi Ankron',
+		title: 'Ankraj Atributoj',
+		name: 'Ankra Nomo',
+		errorName: 'Bv entajpi la ankran nomon',
+		remove: 'Forigi Ankron'
+	},
+	anchorId: 'Per Elementidentigilo',
+	anchorName: 'Per Ankronomo',
+	charset: 'Signaro de la Ligita Rimedo',
+	cssClasses: 'Klasoj de Stilfolioj',
+	emailAddress: 'Retpoŝto',
+	emailBody: 'Mesaĝa korpo',
+	emailSubject: 'Mesaĝa Temo',
+	id: 'Id',
+	info: 'Informoj pri la Ligilo',
+	langCode: 'Lingva Kodo',
+	langDir: 'Skribdirekto',
+	langDirLTR: 'De maldekstro dekstren (LTR)',
+	langDirRTL: 'De dekstro maldekstren (RTL)',
+	menu: 'Ŝanĝi Ligilon',
+	name: 'Nomo',
+	noAnchors: '<Ne disponeblas ankroj en la dokumento>',
+	noEmail: 'Bonvolu entajpi la retpoŝtadreson',
+	noUrl: 'Bonvolu entajpi la URL-on',
+	other: '<alia>',
+	popupDependent: 'Dependa (Netscape)',
+	popupFeatures: 'Atributoj de la Ŝprucfenestro',
+	popupFullScreen: 'Tutekrane (IE)',
+	popupLeft: 'Maldekstra Pozicio',
+	popupLocationBar: 'Adresobreto',
+	popupMenuBar: 'Menubreto',
+	popupResizable: 'Dimensiŝanĝebla',
+	popupScrollBars: 'Rulumskaloj',
+	popupStatusBar: 'Statobreto',
+	popupToolbar: 'Ilobreto',
+	popupTop: 'Supra Pozicio',
+	rel: 'Rilato',
+	selectAnchor: 'Elekti Ankron',
+	styles: 'Stilo',
+	tabIndex: 'Taba Indekso',
+	target: 'Celo',
+	targetFrame: '<kadro>',
+	targetFrameName: 'Nomo de CelKadro',
+	targetPopup: '<ŝprucfenestro>',
+	targetPopupName: 'Nomo de Ŝprucfenestro',
+	title: 'Ligilo',
+	toAnchor: 'Ankri en tiu ĉi paĝo',
+	toEmail: 'Retpoŝto',
+	toUrl: 'URL',
+	toolbar: 'Enmeti/Ŝanĝi Ligilon',
+	type: 'Tipo de Ligilo',
+	unlink: 'Forigi Ligilon',
+	upload: 'Alŝuti',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/es.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'es', {
+	acccessKey: 'Tecla de Acceso',
+	advanced: 'Avanzado',
+	advisoryContentType: 'Tipo de Contenido',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Referencia',
+		menu: 'Propiedades de Referencia',
+		title: 'Propiedades de Referencia',
+		name: 'Nombre de la Referencia',
+		errorName: 'Por favor, complete el nombre de la Referencia',
+		remove: 'Quitar Referencia'
+	},
+	anchorId: 'Por ID de elemento',
+	anchorName: 'Por Nombre de Referencia',
+	charset: 'Fuente de caracteres vinculado',
+	cssClasses: 'Clases de hojas de estilo',
+	emailAddress: 'Dirección de E-Mail',
+	emailBody: 'Cuerpo del Mensaje',
+	emailSubject: 'Título del Mensaje',
+	id: 'Id',
+	info: 'Información de Vínculo',
+	langCode: 'Código idioma',
+	langDir: 'Orientación',
+	langDirLTR: 'Izquierda a Derecha (LTR)',
+	langDirRTL: 'Derecha a Izquierda (RTL)',
+	menu: 'Editar Vínculo',
+	name: 'Nombre',
+	noAnchors: '(No hay referencias disponibles en el documento)',
+	noEmail: 'Por favor escriba la dirección de e-mail',
+	noUrl: 'Por favor escriba el vínculo URL',
+	other: '<otro>',
+	popupDependent: 'Dependiente (Netscape)',
+	popupFeatures: 'Características de Ventana Emergente',
+	popupFullScreen: 'Pantalla Completa (IE)',
+	popupLeft: 'Posición Izquierda',
+	popupLocationBar: 'Barra de ubicación',
+	popupMenuBar: 'Barra de Menú',
+	popupResizable: 'Redimensionable',
+	popupScrollBars: 'Barras de desplazamiento',
+	popupStatusBar: 'Barra de Estado',
+	popupToolbar: 'Barra de Herramientas',
+	popupTop: 'Posición Derecha',
+	rel: 'Relación',
+	selectAnchor: 'Seleccionar una referencia',
+	styles: 'Estilo',
+	tabIndex: 'Indice de tabulación',
+	target: 'Destino',
+	targetFrame: '<marco>',
+	targetFrameName: 'Nombre del Marco Destino',
+	targetPopup: '<ventana emergente>',
+	targetPopupName: 'Nombre de Ventana Emergente',
+	title: 'Vínculo',
+	toAnchor: 'Referencia en esta página',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Insertar/Editar Vínculo',
+	type: 'Tipo de vínculo',
+	unlink: 'Eliminar Vínculo',
+	upload: 'Cargar',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/et.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'et', {
+	acccessKey: 'Juurdepääsu võti',
+	advanced: 'Täpsemalt',
+	advisoryContentType: 'Juhendava sisu tüüp',
+	advisoryTitle: 'Juhendav tiitel',
+	anchor: {
+		toolbar: 'Ankru sisestamine/muutmine',
+		menu: 'Ankru omadused',
+		title: 'Ankru omadused',
+		name: 'Ankru nimi',
+		errorName: 'Palun sisesta ankru nimi',
+		remove: 'Eemalda ankur'
+	},
+	anchorId: 'Elemendi id järgi',
+	anchorName: 'Ankru nime järgi',
+	charset: 'Lingitud ressursi märgistik',
+	cssClasses: 'Stiilistiku klassid',
+	emailAddress: 'E-posti aadress',
+	emailBody: 'Sõnumi tekst',
+	emailSubject: 'Sõnumi teema',
+	id: 'ID',
+	info: 'Lingi info',
+	langCode: 'Keele suund',
+	langDir: 'Keele suund',
+	langDirLTR: 'Vasakult paremale (LTR)',
+	langDirRTL: 'Paremalt vasakule (RTL)',
+	menu: 'Muuda linki',
+	name: 'Nimi',
+	noAnchors: '(Selles dokumendis pole ankruid)',
+	noEmail: 'Palun kirjuta e-posti aadress',
+	noUrl: 'Palun kirjuta lingi URL',
+	other: '<muu>',
+	popupDependent: 'Sõltuv (Netscape)',
+	popupFeatures: 'Hüpikakna omadused',
+	popupFullScreen: 'Täisekraan (IE)',
+	popupLeft: 'Vasak asukoht',
+	popupLocationBar: 'Aadressiriba',
+	popupMenuBar: 'Menüüriba',
+	popupResizable: 'Suurust saab muuta',
+	popupScrollBars: 'Kerimisribad',
+	popupStatusBar: 'Olekuriba',
+	popupToolbar: 'Tööriistariba',
+	popupTop: 'Ülemine asukoht',
+	rel: 'Suhe',
+	selectAnchor: 'Vali ankur',
+	styles: 'Laad',
+	tabIndex: 'Tab indeks',
+	target: 'Sihtkoht',
+	targetFrame: '<raam>',
+	targetFrameName: 'Sihtmärk raami nimi',
+	targetPopup: '<hüpikaken>',
+	targetPopupName: 'Hüpikakna nimi',
+	title: 'Link',
+	toAnchor: 'Ankur sellel lehel',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toolbar: 'Lingi lisamine/muutmine',
+	type: 'Lingi liik',
+	unlink: 'Lingi eemaldamine',
+	upload: 'Lae üles',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/eu.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'eu', {
+	acccessKey: 'Sarbide-gakoa',
+	advanced: 'Aurreratua',
+	advisoryContentType: 'Eduki Mota (Content Type)',
+	advisoryTitle: 'Izenburua',
+	anchor: {
+		toolbar: 'Aingura',
+		menu: 'Ainguraren Ezaugarriak',
+		title: 'Ainguraren Ezaugarriak',
+		name: 'Ainguraren Izena',
+		errorName: 'Idatzi ainguraren izena',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Elementuaren ID-gatik',
+	anchorName: 'Aingura izenagatik',
+	charset: 'Estekatutako Karaktere Multzoa',
+	cssClasses: 'Estilo-orriko Klaseak',
+	emailAddress: 'ePosta Helbidea',
+	emailBody: 'Mezuaren Gorputza',
+	emailSubject: 'Mezuaren Gaia',
+	id: 'Id',
+	info: 'Estekaren Informazioa',
+	langCode: 'Hizkuntzaren Norabidea',
+	langDir: 'Hizkuntzaren Norabidea',
+	langDirLTR: 'Ezkerretik Eskumara(LTR)',
+	langDirRTL: 'Eskumatik Ezkerrera (RTL)',
+	menu: 'Aldatu Esteka',
+	name: 'Izena',
+	noAnchors: '(Ez daude aingurak eskuragarri dokumentuan)',
+	noEmail: 'Mesedez ePosta helbidea idatzi',
+	noUrl: 'Mesedez URL esteka idatzi',
+	other: '<other>', // MISSING
+	popupDependent: 'Menpekoa (Netscape)',
+	popupFeatures: 'Popup Leihoaren Ezaugarriak',
+	popupFullScreen: 'Pantaila Osoa (IE)',
+	popupLeft: 'Ezkerreko  Posizioa',
+	popupLocationBar: 'Kokaleku Barra',
+	popupMenuBar: 'Menu Barra',
+	popupResizable: 'Tamaina Aldakorra',
+	popupScrollBars: 'Korritze Barrak',
+	popupStatusBar: 'Egoera Barra',
+	popupToolbar: 'Tresna Barra',
+	popupTop: 'Goiko Posizioa',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Aingura bat hautatu',
+	styles: 'Estiloa',
+	tabIndex: 'Tabulazio Indizea',
+	target: 'Target (Helburua)',
+	targetFrame: '<marko>',
+	targetFrameName: 'Marko Helburuaren Izena',
+	targetPopup: '<popup leihoa>',
+	targetPopupName: 'Popup Leihoaren Izena',
+	title: 'Esteka',
+	toAnchor: 'Aingura orrialde honetan',
+	toEmail: 'ePosta',
+	toUrl: 'URL',
+	toolbar: 'Txertatu/Editatu Esteka',
+	type: 'Esteka Mota',
+	unlink: 'Kendu Esteka',
+	upload: 'Gora kargatu',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fa.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'fa', {
+	acccessKey: 'کلید دستیابی',
+	advanced: 'پیشرفته',
+	advisoryContentType: 'نوع محتوای کمکی',
+	advisoryTitle: 'عنوان کمکی',
+	anchor: {
+		toolbar: 'گنجاندن/ویرایش لنگر',
+		menu: 'ویژگیهای لنگر',
+		title: 'ویژگیهای لنگر',
+		name: 'نام لنگر',
+		errorName: 'لطفا نام لنگر را بنویسید',
+		remove: 'حذف لنگر'
+	},
+	anchorId: 'با شناسهٴ المان',
+	anchorName: 'با نام لنگر',
+	charset: 'نویسهگان منبع پیوند شده',
+	cssClasses: 'کلاسهای شیوهنامه(Stylesheet)',
+	emailAddress: 'نشانی پست الکترونیکی',
+	emailBody: 'متن پیام',
+	emailSubject: 'موضوع پیام',
+	id: 'شناسه',
+	info: 'اطلاعات پیوند',
+	langCode: 'جهتنمای زبان',
+	langDir: 'جهتنمای زبان',
+	langDirLTR: 'چپ به راست (LTR)',
+	langDirRTL: 'راست به چپ (RTL)',
+	menu: 'ویرایش پیوند',
+	name: 'نام',
+	noAnchors: '(در این سند لنگری دردسترس نیست)',
+	noEmail: 'لطفا نشانی پست الکترونیکی را بنویسید',
+	noUrl: 'لطفا URL پیوند را بنویسید',
+	other: '<سایر>',
+	popupDependent: 'وابسته (Netscape)',
+	popupFeatures: 'ویژگیهای پنجرهٴ پاپاپ',
+	popupFullScreen: 'تمامصفحه (IE)',
+	popupLeft: 'موقعیت چپ',
+	popupLocationBar: 'نوار موقعیت',
+	popupMenuBar: 'نوار منو',
+	popupResizable: 'قابل تغییر اندازه',
+	popupScrollBars: 'میلههای پیمایش',
+	popupStatusBar: 'نوار وضعیت',
+	popupToolbar: 'نوارابزار',
+	popupTop: 'موقعیت بالا',
+	rel: 'وابستگی',
+	selectAnchor: 'یک لنگر برگزینید',
+	styles: 'شیوه(style)',
+	tabIndex: 'نمایهٴ دسترسی با برگه',
+	target: 'مقصد',
+	targetFrame: '<فریم>',
+	targetFrameName: 'نام فریم مقصد',
+	targetPopup: '<پنجرهٴ پاپاپ>',
+	targetPopupName: 'نام پنجرهٴ پاپاپ',
+	title: 'پیوند',
+	toAnchor: 'لنگر در همین صفحه',
+	toEmail: 'پست الکترونیکی',
+	toUrl: 'URL',
+	toolbar: 'گنجاندن/ویرایش پیوند',
+	type: 'نوع پیوند',
+	unlink: 'برداشتن پیوند',
+	upload: 'انتقال به سرور',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fi.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'fi', {
+	acccessKey: 'Pikanäppäin',
+	advanced: 'Lisäominaisuudet',
+	advisoryContentType: 'Avustava sisällön tyyppi',
+	advisoryTitle: 'Avustava otsikko',
+	anchor: {
+		toolbar: 'Lisää ankkuri/muokkaa ankkuria',
+		menu: 'Ankkurin ominaisuudet',
+		title: 'Ankkurin ominaisuudet',
+		name: 'Nimi',
+		errorName: 'Ankkurille on kirjoitettava nimi',
+		remove: 'Poista ankkuri'
+	},
+	anchorId: 'Ankkurin ID:n mukaan',
+	anchorName: 'Ankkurin nimen mukaan',
+	charset: 'Linkitetty kirjaimisto',
+	cssClasses: 'Tyyliluokat',
+	emailAddress: 'Sähköpostiosoite',
+	emailBody: 'Viesti',
+	emailSubject: 'Aihe',
+	id: 'Tunniste',
+	info: 'Linkin tiedot',
+	langCode: 'Kielen suunta',
+	langDir: 'Kielen suunta',
+	langDirLTR: 'Vasemmalta oikealle (LTR)',
+	langDirRTL: 'Oikealta vasemmalle (RTL)',
+	menu: 'Muokkaa linkkiä',
+	name: 'Nimi',
+	noAnchors: '(Ei ankkureita tässä dokumentissa)',
+	noEmail: 'Kirjoita sähköpostiosoite',
+	noUrl: 'Linkille on kirjoitettava URL',
+	other: '<muu>',
+	popupDependent: 'Riippuva (Netscape)',
+	popupFeatures: 'Popup ikkunan ominaisuudet',
+	popupFullScreen: 'Täysi ikkuna (IE)',
+	popupLeft: 'Vasemmalta (px)',
+	popupLocationBar: 'Osoiterivi',
+	popupMenuBar: 'Valikkorivi',
+	popupResizable: 'Venytettävä',
+	popupScrollBars: 'Vierityspalkit',
+	popupStatusBar: 'Tilarivi',
+	popupToolbar: 'Vakiopainikkeet',
+	popupTop: 'Ylhäältä (px)',
+	rel: 'Suhde',
+	selectAnchor: 'Valitse ankkuri',
+	styles: 'Tyyli',
+	tabIndex: 'Tabulaattori indeksi',
+	target: 'Kohde',
+	targetFrame: '<kehys>',
+	targetFrameName: 'Kohdekehyksen nimi',
+	targetPopup: '<popup ikkuna>',
+	targetPopupName: 'Popup ikkunan nimi',
+	title: 'Linkki',
+	toAnchor: 'Ankkuri tässä sivussa',
+	toEmail: 'Sähköposti',
+	toUrl: 'Osoite',
+	toolbar: 'Lisää linkki/muokkaa linkkiä',
+	type: 'Linkkityyppi',
+	unlink: 'Poista linkki',
+	upload: 'Lisää tiedosto',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fo.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'fo', {
+	acccessKey: 'Snarvegisknöttur',
+	advanced: 'Fjølbroytt',
+	advisoryContentType: 'Vegleiðandi innihaldsslag',
+	advisoryTitle: 'Vegleiðandi heiti',
+	anchor: {
+		toolbar: 'Ger/broyt marknastein',
+		menu: 'Eginleikar fyri marknastein',
+		title: 'Eginleikar fyri marknastein',
+		name: 'Heiti marknasteinsins',
+		errorName: 'Vinarliga rita marknasteinsins heiti',
+		remove: 'Strika marknastein'
+	},
+	anchorId: 'Eftir element Id',
+	anchorName: 'Eftir navni á marknasteini',
+	charset: 'Atknýtt teknsett',
+	cssClasses: 'Typografi klassar',
+	emailAddress: 'Teldupost-adressa',
+	emailBody: 'Breyðtekstur',
+	emailSubject: 'Evni',
+	id: 'Id',
+	info: 'Tilknýtis upplýsingar',
+	langCode: 'Tekstkós',
+	langDir: 'Tekstkós',
+	langDirLTR: 'Frá vinstru til høgru (LTR)',
+	langDirRTL: 'Frá høgru til vinstru (RTL)',
+	menu: 'Broyt tilknýti',
+	name: 'Navn',
+	noAnchors: '(Eingir marknasteinar eru í hesum dokumentið)',
+	noEmail: 'Vinarliga skriva teldupost-adressu',
+	noUrl: 'Vinarliga skriva tilknýti (URL)',
+	other: '<annað>',
+	popupDependent: 'Bundið (Netscape)',
+	popupFeatures: 'Popup vindeygans víðkaðu eginleikar',
+	popupFullScreen: 'Fullur skermur (IE)',
+	popupLeft: 'Frástøða frá vinstru',
+	popupLocationBar: 'Adressulinja',
+	popupMenuBar: 'Skrábjálki',
+	popupResizable: 'Stødd kann broytast',
+	popupScrollBars: 'Rullibjálki',
+	popupStatusBar: 'Støðufrágreiðingarbjálki',
+	popupToolbar: 'Amboðsbjálki',
+	popupTop: 'Frástøða frá íerva',
+	rel: 'Relatión',
+	selectAnchor: 'Vel ein marknastein',
+	styles: 'Typografi',
+	tabIndex: 'Tabulator indeks',
+	target: 'Target',
+	targetFrame: '<ramma>',
+	targetFrameName: 'Vís navn vindeygans',
+	targetPopup: '<popup vindeyga>',
+	targetPopupName: 'Popup vindeygans navn',
+	title: 'Tilknýti',
+	toAnchor: 'Tilknýti til marknastein í tekstinum',
+	toEmail: 'Teldupostur',
+	toUrl: 'URL',
+	toolbar: 'Ger/broyt tilknýti',
+	type: 'Tilknýtisslag',
+	unlink: 'Strika tilknýti',
+	upload: 'Send til ambætaran',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'fr-ca', {
+	acccessKey: 'Équivalent clavier',
+	advanced: 'Avancée',
+	advisoryContentType: 'Type de contenu',
+	advisoryTitle: 'Titre',
+	anchor: {
+		toolbar: 'Insérer/modifier l\'ancre',
+		menu: 'Propriétés de l\'ancre',
+		title: 'Propriétés de l\'ancre',
+		name: 'Nom de l\'ancre',
+		errorName: 'Veuillez saisir le nom de l\'ancre',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Par id',
+	anchorName: 'Par nom',
+	charset: 'Encodage de caractère',
+	cssClasses: 'Classes de feuilles de style',
+	emailAddress: 'Adresse E-Mail',
+	emailBody: 'Corps du message',
+	emailSubject: 'Sujet du message',
+	id: 'Id',
+	info: 'Informations sur le lien',
+	langCode: 'Sens d\'écriture',
+	langDir: 'Sens d\'écriture',
+	langDirLTR: 'De gauche à droite (LTR)',
+	langDirRTL: 'De droite à gauche (RTL)',
+	menu: 'Modifier le lien',
+	name: 'Nom',
+	noAnchors: '(Pas d\'ancre disponible dans le document)',
+	noEmail: 'Veuillez saisir l\'adresse e-mail',
+	noUrl: 'Veuillez saisir l\'URL',
+	other: '<other>', // MISSING
+	popupDependent: 'Dépendante (Netscape)',
+	popupFeatures: 'Caractéristiques de la fenêtre popup',
+	popupFullScreen: 'Plein écran (IE)',
+	popupLeft: 'Position à partir de la gauche',
+	popupLocationBar: 'Barre d\'adresses',
+	popupMenuBar: 'Barre de menu',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Barres de défilement',
+	popupStatusBar: 'Barre d\'état',
+	popupToolbar: 'Barre d\'outils',
+	popupTop: 'Position à partir du haut',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Sélectionner une ancre',
+	styles: 'Style',
+	tabIndex: 'Ordre de tabulation',
+	target: 'Destination',
+	targetFrame: '<Cadre>',
+	targetFrameName: 'Nom du cadre de destination',
+	targetPopup: '<fenêtre popup>',
+	targetPopupName: 'Nom de la fenêtre popup',
+	title: 'Propriétés du lien',
+	toAnchor: 'Ancre dans cette page',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Insérer/modifier le lien',
+	type: 'Type de lien',
+	unlink: 'Supprimer le lien',
+	upload: 'Télécharger',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/fr.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'fr', {
+	acccessKey: 'Touche d\'accessibilité',
+	advanced: 'Avancé',
+	advisoryContentType: 'Type de contenu (ex: text/html)',
+	advisoryTitle: 'Description (title)',
+	anchor: {
+		toolbar: 'Ancre',
+		menu: 'Editer l\'ancre',
+		title: 'Propriétés de l\'ancre',
+		name: 'Nom de l\'ancre',
+		errorName: 'Veuillez entrer le nom de l\'ancre.',
+		remove: 'Supprimer l\'ancre'
+	},
+	anchorId: 'Par ID d\'élément',
+	anchorName: 'Par nom d\'ancre',
+	charset: 'Charset de la cible',
+	cssClasses: 'Classe CSS',
+	emailAddress: 'Adresse E-Mail',
+	emailBody: 'Corps du message',
+	emailSubject: 'Sujet du message',
+	id: 'Id',
+	info: 'Infos sur le lien',
+	langCode: 'Code de langue',
+	langDir: 'Sens d\'écriture',
+	langDirLTR: 'Gauche à droite',
+	langDirRTL: 'Droite à gauche',
+	menu: 'Editer le lien',
+	name: 'Nom',
+	noAnchors: '(Aucune ancre disponible dans ce document)',
+	noEmail: 'Veuillez entrer l\'adresse e-mail',
+	noUrl: 'Veuillez entrer l\'adresse du lien',
+	other: '<autre>',
+	popupDependent: 'Dépendante (Netscape)',
+	popupFeatures: 'Options de la fenêtre popup',
+	popupFullScreen: 'Plein écran (IE)',
+	popupLeft: 'Position gauche',
+	popupLocationBar: 'Barre d\'adresse',
+	popupMenuBar: 'Barre de menu',
+	popupResizable: 'Redimensionnable',
+	popupScrollBars: 'Barres de défilement',
+	popupStatusBar: 'Barre de status',
+	popupToolbar: 'Barre d\'outils',
+	popupTop: 'Position haute',
+	rel: 'Relation',
+	selectAnchor: 'Sélectionner l\'ancre',
+	styles: 'Style',
+	tabIndex: 'Index de tabulation',
+	target: 'Cible',
+	targetFrame: '<cadre>',
+	targetFrameName: 'Nom du Cadre destination',
+	targetPopup: '<fenêtre popup>',
+	targetPopupName: 'Nom de la fenêtre popup',
+	title: 'Lien',
+	toAnchor: 'Transformer le lien en ancre dans le texte',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Lien',
+	type: 'Type de lien',
+	unlink: 'Supprimer le lien',
+	upload: 'Envoyer',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gl.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'gl', {
+	acccessKey: 'Chave de Acceso',
+	advanced: 'Advanzado',
+	advisoryContentType: 'Tipo de Contido',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Inserir/Editar Referencia',
+		menu: 'Propriedades da Referencia',
+		title: 'Propriedades da Referencia',
+		name: 'Nome da Referencia',
+		errorName: 'Por favor, escriba o nome da referencia',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Por Element Id',
+	anchorName: 'Por Nome de Referencia',
+	charset: 'Fonte de Caracteres Vinculado',
+	cssClasses: 'Clases da Folla de Estilos',
+	emailAddress: 'Enderezo de E-Mail',
+	emailBody: 'Corpo do Mensaxe',
+	emailSubject: 'Asunto do Mensaxe',
+	id: 'Id',
+	info: 'Información da Ligazón',
+	langCode: 'Orientación do Idioma',
+	langDir: 'Orientación do Idioma',
+	langDirLTR: 'Esquerda a Dereita (LTR)',
+	langDirRTL: 'Dereita a Esquerda (RTL)',
+	menu: 'Editar Ligazón',
+	name: 'Nome',
+	noAnchors: '(Non hai referencias disponibles no documento)',
+	noEmail: 'Por favor, escriba o enderezo de e-mail',
+	noUrl: 'Por favor, escriba a ligazón URL',
+	other: '<outro>',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Características da Xanela Emerxente',
+	popupFullScreen: 'A Toda Pantalla (IE)',
+	popupLeft: 'Posición Esquerda',
+	popupLocationBar: 'Barra de Localización',
+	popupMenuBar: 'Barra de Menú',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Barras de Desplazamento',
+	popupStatusBar: 'Barra de Estado',
+	popupToolbar: 'Barra de Ferramentas',
+	popupTop: 'Posición dende Arriba',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Seleccionar unha Referencia',
+	styles: 'Estilo',
+	tabIndex: 'Índice de Tabulación',
+	target: 'Destino',
+	targetFrame: '<frame>',
+	targetFrameName: 'Nome do Marco Destino',
+	targetPopup: '<Xanela Emerxente>',
+	targetPopupName: 'Nome da Xanela Emerxente',
+	title: 'Ligazón',
+	toAnchor: 'Referencia nesta páxina',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Inserir/Editar Ligazón',
+	type: 'Tipo de Ligazón',
+	unlink: 'Eliminar Ligazón',
+	upload: 'Carregar',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/gu.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'gu', {
+	acccessKey: 'ઍક્સેસ કી',
+	advanced: 'અડ્વાન્સડ',
+	advisoryContentType: 'મુખ્ય કન્ટેન્ટ પ્રકાર',
+	advisoryTitle: 'મુખ્ય મથાળું',
+	anchor: {
+		toolbar: 'ઍંકર ઇન્સર્ટ/દાખલ કરવી',
+		menu: 'ઍંકરના ગુણ',
+		title: 'ઍંકરના ગુણ',
+		name: 'ઍંકરનું નામ',
+		errorName: 'ઍંકરનું નામ ટાઈપ કરો',
+		remove: 'સ્થિર નકરવું'
+	},
+	anchorId: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',
+	anchorName: 'ઍંકર નામથી પસંદ કરો',
+	charset: 'લિંક રિસૉર્સ કૅરિક્ટર સેટ',
+	cssClasses: 'સ્ટાઇલ-શીટ ક્લાસ',
+	emailAddress: 'ઈ-મેલ સરનામું',
+	emailBody: 'સંદેશ',
+	emailSubject: 'ઈ-મેલ વિષય',
+	id: 'Id',
+	info: 'લિંક ઇન્ફૉ ટૅબ',
+	langCode: 'ભાષા લેખવાની પદ્ધતિ',
+	langDir: 'ભાષા લેખવાની પદ્ધતિ',
+	langDirLTR: 'ડાબે થી જમણે (LTR)',
+	langDirRTL: 'જમણે થી ડાબે (RTL)',
+	menu: ' લિંક એડિટ/માં ફેરફાર કરવો',
+	name: 'નામ',
+	noAnchors: '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',
+	noEmail: 'ઈ-મેલ સરનામું ટાઇપ કરો',
+	noUrl: 'લિંક  URL ટાઇપ કરો',
+	other: '<other> <અન્ય>',
+	popupDependent: 'ડિપેન્ડન્ટ (Netscape)',
+	popupFeatures: 'પૉપ-અપ વિન્ડો ફીચરસૅ',
+	popupFullScreen: 'ફુલ સ્ક્રીન (IE)',
+	popupLeft: 'ડાબી બાજુ',
+	popupLocationBar: 'લોકેશન બાર',
+	popupMenuBar: 'મેન્યૂ બાર',
+	popupResizable: 'રીસાઈઝએબલ',
+	popupScrollBars: 'સ્ક્રોલ બાર',
+	popupStatusBar: 'સ્ટૅટસ બાર',
+	popupToolbar: 'ટૂલ બાર',
+	popupTop: 'જમણી બાજુ',
+	rel: 'સંબંધની સ્થિતિ',
+	selectAnchor: 'ઍંકર પસંદ કરો',
+	styles: 'સ્ટાઇલ',
+	tabIndex: 'ટૅબ ઇન્ડેક્સ',
+	target: 'ટાર્ગેટ/લક્ષ્ય',
+	targetFrame: '<ફ્રેમ>',
+	targetFrameName: 'ટાર્ગેટ ફ્રેમ નું નામ',
+	targetPopup: '<પૉપ-અપ વિન્ડો>',
+	targetPopupName: 'પૉપ-અપ વિન્ડો નું નામ',
+	title: 'લિંક',
+	toAnchor: 'આ પેજનો ઍંકર',
+	toEmail: 'ઈ-મેલ',
+	toUrl: 'URL',
+	toolbar: 'લિંક ઇન્સર્ટ/દાખલ કરવી',
+	type: 'લિંક પ્રકાર',
+	unlink: 'લિંક કાઢવી',
+	upload: 'અપલોડ',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/he.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'he', {
+	acccessKey: 'מקש גישה',
+	advanced: 'אפשרויות מתקדמות',
+	advisoryContentType: 'Content Type מוצע',
+	advisoryTitle: 'כותרת מוצעת',
+	anchor: {
+		toolbar: 'הוספת/עריכת נקודת עיגון',
+		menu: 'מאפייני נקודת עיגון',
+		title: 'מאפייני נקודת עיגון',
+		name: 'שם לנקודת עיגון',
+		errorName: 'יש להקליד שם לנקודת עיגון',
+		remove: 'מחיקת נקודת עיגון'
+	},
+	anchorId: 'עפ"י זיהוי (ID) האלמנט',
+	anchorName: 'עפ"י שם העוגן',
+	charset: 'קידוד המשאב המקושר',
+	cssClasses: 'גיליונות עיצוב קבוצות',
+	emailAddress: 'כתובת הדוא"ל',
+	emailBody: 'גוף ההודעה',
+	emailSubject: 'נושא ההודעה',
+	id: 'זיהוי (ID)',
+	info: 'מידע על הקישור',
+	langCode: 'קוד שפה',
+	langDir: 'כיוון שפה',
+	langDirLTR: 'שמאל לימין (LTR)',
+	langDirRTL: 'ימין לשמאל (RTL)',
+	menu: 'מאפייני קישור',
+	name: 'שם',
+	noAnchors: '(אין עוגנים זמינים בדף)',
+	noEmail: 'יש להקליד את כתובת הדוא"ל',
+	noUrl: 'יש להקליד את כתובת הקישור (URL)',
+	other: '<אחר>',
+	popupDependent: 'תלוי (Netscape)',
+	popupFeatures: 'תכונות החלון הקופץ',
+	popupFullScreen: 'מסך מלא (IE)',
+	popupLeft: 'מיקום צד שמאל',
+	popupLocationBar: 'סרגל כתובת',
+	popupMenuBar: 'סרגל תפריט',
+	popupResizable: 'שינוי גודל',
+	popupScrollBars: 'ניתן לגלילה',
+	popupStatusBar: 'סרגל חיווי',
+	popupToolbar: 'סרגל הכלים',
+	popupTop: 'מיקום צד עליון',
+	rel: 'קשר גומלין',
+	selectAnchor: 'בחירת עוגן',
+	styles: 'סגנון',
+	tabIndex: 'מספר טאב',
+	target: 'מטרה',
+	targetFrame: '<מסגרת>',
+	targetFrameName: 'שם מסגרת היעד',
+	targetPopup: '<חלון קופץ>',
+	targetPopupName: 'שם החלון הקופץ',
+	title: 'קישור',
+	toAnchor: 'עוגן בעמוד זה',
+	toEmail: 'דוא"ל',
+	toUrl: 'כתובת (URL)',
+	toolbar: 'הוספת/עריכת קישור',
+	type: 'סוג קישור',
+	unlink: 'הסרת הקישור',
+	upload: 'העלאה',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hi.js	(revision 2)
@@ -0,0 +1,73 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'hi', {
+	acccessKey: 'ऍक्सॅस की',
+	advanced: 'ऍड्वान्स्ड',
+	advisoryContentType: 'परामर्श कन्टॅन्ट प्रकार',
+	advisoryTitle: 'परामर्श शीर्शक',
+	anchor: {
+		toolbar: 'ऐंकर इन्सर्ट/संपादन',
+		menu: 'ऐंकर प्रॉपर्टीज़',
+		title: 'ऐंकर प्रॉपर्टीज़',
+		name: 'ऐंकर का नाम',
+		errorName: 'ऐंकर का नाम टाइप करें',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ऍलीमॅन्ट Id से',
+	anchorName: 'ऐंकर नाम से',
+	charset: 'लिंक रिसोर्स करॅक्टर सॅट',
+	cssClasses: 'स्टाइल-शीट क्लास',
+	emailAddress: 'ई-मेल पता',
+	emailBody: 'संदेश',
+	emailSubject: 'संदेश विषय',
+	id: 'Id',
+	info: 'लिंक  ',
+	langCode: 'भाषा लिखने की दिशा',
+	langDir: 'भाषा लिखने की दिशा',
+	langDirLTR: 'बायें से दायें (LTR)',
+	langDirRTL: 'दायें से बायें (RTL)',
+	menu: 'लिंक संपादन',
+	name: 'नाम',
+	noAnchors: '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',
+	noEmail: 'ई-मेल पता टाइप करें',
+	noUrl: 'लिंक URL टाइप करें',
+	other: '<अन्य>',
+	popupDependent: 'डिपेन्डॅन्ट (Netscape)',
+	popupFeatures: 'पॉप-अप विन्डो फ़ीचर्स',
+	popupFullScreen: 'फ़ुल स्क्रीन (IE)',
+	popupLeft: 'बायीं तरफ',
+	popupLocationBar: 'लोकेशन बार',
+	popupMenuBar: 'मॅन्यू बार',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'स्क्रॉल बार',
+	popupStatusBar: 'स्टेटस बार',
+	popupToolbar: 'टूल बार',
+	popupTop: 'दायीं तरफ',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'ऐंकर चुनें',
+	styles: 'स्टाइल',
+	tabIndex: 'टैब इन्डॅक्स',
+	target: 'टार्गेट',
+	targetFrame: '<फ़्रेम>',
+	targetFrameName: 'टार्गेट फ़्रेम का नाम',
+	targetPopup: '<पॉप-अप विन्डो>',
+	targetPopupName: 'पॉप-अप विन्डो का नाम',
+	title: 'लिंक',
+	toAnchor: 'इस पेज का ऐंकर',
+	toEmail: 'ई-मेल',
+	toUrl: 'URL',
+	toolbar: 'लिंक इन्सर्ट/संपादन',
+	type: 'लिंक प्रकार',
+	unlink: 'लिंक हटायें',
+	upload: 'अपलोड',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+    });
+        
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hr.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'hr', {
+	acccessKey: 'Pristupna tipka',
+	advanced: 'Napredno',
+	advisoryContentType: 'Advisory vrsta sadržaja',
+	advisoryTitle: 'Advisory naslov',
+	anchor: {
+		toolbar: 'Ubaci/promijeni sidro',
+		menu: 'Svojstva sidra',
+		title: 'Svojstva sidra',
+		name: 'Ime sidra',
+		errorName: 'Molimo unesite ime sidra',
+		remove: 'Ukloni sidro'
+	},
+	anchorId: 'Po Id elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Kodna stranica povezanih resursa',
+	cssClasses: 'Stylesheet klase',
+	emailAddress: 'E-Mail adresa',
+	emailBody: 'Sadržaj poruke',
+	emailSubject: 'Naslov',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Smjer jezika',
+	langDir: 'Smjer jezika',
+	langDirLTR: 'S lijeva na desno (LTR)',
+	langDirRTL: 'S desna na lijevo (RTL)',
+	menu: 'Promijeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema dostupnih sidra)',
+	noEmail: 'Molimo upišite e-mail adresu',
+	noUrl: 'Molimo upišite URL link',
+	other: '<drugi>',
+	popupDependent: 'Ovisno (Netscape)',
+	popupFeatures: 'Mogućnosti popup prozora',
+	popupFullScreen: 'Cijeli ekran (IE)',
+	popupLeft: 'Lijeva pozicija',
+	popupLocationBar: 'Traka za lokaciju',
+	popupMenuBar: 'Izborna traka',
+	popupResizable: 'Promjenjiva veličina',
+	popupScrollBars: 'Scroll traka',
+	popupStatusBar: 'Statusna traka',
+	popupToolbar: 'Traka s alatima',
+	popupTop: 'Gornja pozicija',
+	rel: 'Veza',
+	selectAnchor: 'Odaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab Indeks',
+	target: 'Meta',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Ime ciljnog okvira',
+	targetPopup: '<popup prozor>',
+	targetPopupName: 'Naziv popup prozora',
+	title: 'Link',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Ubaci/promijeni link',
+	type: 'Link vrsta',
+	unlink: 'Ukloni link',
+	upload: 'Pošalji',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/hu.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'hu', {
+	acccessKey: 'Billentyűkombináció',
+	advanced: 'További opciók',
+	advisoryContentType: 'Súgó tartalomtípusa',
+	advisoryTitle: 'Súgócimke',
+	anchor: {
+		toolbar: 'Horgony beillesztése/szerkesztése',
+		menu: 'Horgony tulajdonságai',
+		title: 'Horgony tulajdonságai',
+		name: 'Horgony neve',
+		errorName: 'Kérem adja meg a horgony nevét',
+		remove: 'Horgony eltávolítása'
+	},
+	anchorId: 'Azonosító szerint',
+	anchorName: 'Horgony név szerint',
+	charset: 'Hivatkozott tartalom kódlapja',
+	cssClasses: 'Stíluskészlet',
+	emailAddress: 'E-Mail cím',
+	emailBody: 'Üzenet',
+	emailSubject: 'Üzenet tárgya',
+	id: 'Id',
+	info: 'Alaptulajdonságok',
+	langCode: 'Írás iránya',
+	langDir: 'Írás iránya',
+	langDirLTR: 'Balról jobbra',
+	langDirRTL: 'Jobbról balra',
+	menu: 'Hivatkozás módosítása',
+	name: 'Név',
+	noAnchors: '(Nincs horgony a dokumentumban)',
+	noEmail: 'Adja meg az E-Mail címet',
+	noUrl: 'Adja meg a hivatkozás webcímét',
+	other: '<más>',
+	popupDependent: 'Szülőhöz kapcsolt (csak Netscape)',
+	popupFeatures: 'Felugró ablak jellemzői',
+	popupFullScreen: 'Teljes képernyő (csak IE)',
+	popupLeft: 'Bal pozíció',
+	popupLocationBar: 'Címsor',
+	popupMenuBar: 'Menü sor',
+	popupResizable: 'Átméretezés',
+	popupScrollBars: 'Gördítősáv',
+	popupStatusBar: 'Állapotsor',
+	popupToolbar: 'Eszköztár',
+	popupTop: 'Felső pozíció',
+	rel: 'Kapcsolat típusa',
+	selectAnchor: 'Horgony választása',
+	styles: 'Stílus',
+	tabIndex: 'Tabulátor index',
+	target: 'Tartalom megjelenítése',
+	targetFrame: '<keretben>',
+	targetFrameName: 'Keret neve',
+	targetPopup: '<felugró ablakban>',
+	targetPopupName: 'Felugró ablak neve',
+	title: 'Hivatkozás tulajdonságai',
+	toAnchor: 'Horgony az oldalon',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Hivatkozás beillesztése/módosítása',
+	type: 'Hivatkozás típusa',
+	unlink: 'Hivatkozás törlése',
+	upload: 'Feltöltés',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/is.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/is.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/is.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'is', {
+	acccessKey: 'Skammvalshnappur',
+	advanced: 'Tæknilegt',
+	advisoryContentType: 'Tegund innihalds',
+	advisoryTitle: 'Titill',
+	anchor: {
+		toolbar: 'Stofna/breyta kaflamerki',
+		menu: 'Eigindi kaflamerkis',
+		title: 'Eigindi kaflamerkis',
+		name: 'Nafn bókamerkis',
+		errorName: 'Sláðu inn nafn bókamerkis!',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Eftir auðkenni einingar',
+	anchorName: 'Eftir akkerisnafni',
+	charset: 'Táknróf',
+	cssClasses: 'Stílsniðsflokkur',
+	emailAddress: 'Netfang',
+	emailBody: 'Meginmál',
+	emailSubject: 'Efni',
+	id: 'Auðkenni',
+	info: 'Almennt',
+	langCode: 'Lesstefna',
+	langDir: 'Lesstefna',
+	langDirLTR: 'Frá vinstri til hægri (LTR)',
+	langDirRTL: 'Frá hægri til vinstri (RTL)',
+	menu: 'Breyta stiklu',
+	name: 'Nafn',
+	noAnchors: '<Engin bókamerki á skrá>',
+	noEmail: 'Sláðu inn netfang!',
+	noUrl: 'Sláðu inn veffang stiklunnar!',
+	other: '<annar>',
+	popupDependent: 'Háð venslum (Netscape)',
+	popupFeatures: 'Eigindi sprettiglugga',
+	popupFullScreen: 'Heilskjár (IE)',
+	popupLeft: 'Fjarlægð frá vinstri',
+	popupLocationBar: 'Fanglína',
+	popupMenuBar: 'Vallína',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Skrunstikur',
+	popupStatusBar: 'Stöðustika',
+	popupToolbar: 'Verkfærastika',
+	popupTop: 'Fjarlægð frá efri brún',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Veldu akkeri',
+	styles: 'Stíll',
+	tabIndex: 'Raðnúmer innsláttarreits',
+	target: 'Mark',
+	targetFrame: '<rammi>',
+	targetFrameName: 'Nafn markglugga',
+	targetPopup: '<sprettigluggi>',
+	targetPopupName: 'Nafn sprettiglugga',
+	title: 'Stikla',
+	toAnchor: 'Bókamerki á þessari síðu',
+	toEmail: 'Netfang',
+	toUrl: 'Vefslóð',
+	toolbar: 'Stofna/breyta stiklu',
+	type: 'Stikluflokkur',
+	unlink: 'Fjarlægja stiklu',
+	upload: 'Senda upp',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/it.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'it', {
+	acccessKey: 'Scorciatoia<br />da tastiera',
+	advanced: 'Avanzate',
+	advisoryContentType: 'Tipo della risorsa collegata',
+	advisoryTitle: 'Titolo',
+	anchor: {
+		toolbar: 'Inserisci/Modifica Ancora',
+		menu: 'Proprietà ancora',
+		title: 'Proprietà ancora',
+		name: 'Nome ancora',
+		errorName: 'Inserici il nome dell\'ancora',
+		remove: 'Rimuovi l\'ancora'
+	},
+	anchorId: 'Per id elemento',
+	anchorName: 'Per Nome',
+	charset: 'Set di caretteri della risorsa collegata',
+	cssClasses: 'Nome classe CSS',
+	emailAddress: 'Indirizzo E-Mail',
+	emailBody: 'Corpo del messaggio',
+	emailSubject: 'Oggetto del messaggio',
+	id: 'Id',
+	info: 'Informazioni collegamento',
+	langCode: 'Direzione scrittura',
+	langDir: 'Direzione scrittura',
+	langDirLTR: 'Da Sinistra a Destra (LTR)',
+	langDirRTL: 'Da Destra a Sinistra (RTL)',
+	menu: 'Modifica collegamento',
+	name: 'Nome',
+	noAnchors: '(Nessuna ancora disponibile nel documento)',
+	noEmail: 'Devi inserire un\'indirizzo e-mail',
+	noUrl: 'Devi inserire l\'URL del collegamento',
+	other: '<altro>',
+	popupDependent: 'Dipendente (Netscape)',
+	popupFeatures: 'Caratteristiche finestra popup',
+	popupFullScreen: 'A tutto schermo (IE)',
+	popupLeft: 'Posizione da sinistra',
+	popupLocationBar: 'Barra degli indirizzi',
+	popupMenuBar: 'Barra del menu',
+	popupResizable: 'Ridimensionabile',
+	popupScrollBars: 'Barre di scorrimento',
+	popupStatusBar: 'Barra di stato',
+	popupToolbar: 'Barra degli strumenti',
+	popupTop: 'Posizione dall\'alto',
+	rel: 'Relazioni',
+	selectAnchor: 'Scegli Ancora',
+	styles: 'Stile',
+	tabIndex: 'Ordine di tabulazione',
+	target: 'Destinazione',
+	targetFrame: '<riquadro>',
+	targetFrameName: 'Nome del riquadro di destinazione',
+	targetPopup: '<finestra popup>',
+	targetPopupName: 'Nome finestra popup',
+	title: 'Collegamento',
+	toAnchor: 'Ancora nella pagina',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Inserisci/Modifica collegamento',
+	type: 'Tipo di Collegamento',
+	unlink: 'Elimina collegamento',
+	upload: 'Carica',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ja.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ja', {
+	acccessKey: 'アクセスキー',
+	advanced: '高度な設定',
+	advisoryContentType: 'Content Type属性',
+	advisoryTitle: 'Title属性',
+	anchor: {
+		toolbar: 'アンカー挿入/編集',
+		menu: 'アンカー プロパティ',
+		title: 'アンカー プロパティ',
+		name: 'アンカー名',
+		errorName: 'アンカー名を必ず入力してください。',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'エレメントID',
+	anchorName: 'アンカー名',
+	charset: 'リンクcharset属性',
+	cssClasses: 'スタイルシートクラス',
+	emailAddress: 'E-Mail アドレス',
+	emailBody: '本文',
+	emailSubject: '件名',
+	id: 'Id',
+	info: 'ハイパーリンク 情報',
+	langCode: '言語コード',
+	langDir: '文字表記の方向',
+	langDirLTR: '左から右 (LTR)',
+	langDirRTL: '右から左 (RTL)',
+	menu: 'リンク編集',
+	name: 'Name属性',
+	noAnchors: '(ドキュメントにおいて利用可能なアンカーはありません。)',
+	noEmail: 'メールアドレスを入力してください。',
+	noUrl: 'リンクURLを入力してください。',
+	other: '<その他の>',
+	popupDependent: '開いたウィンドウに連動して閉じる (Netscape)',
+	popupFeatures: 'ポップアップウィンドウ特徴',
+	popupFullScreen: '全画面モード(IE)',
+	popupLeft: '左端からの座標で指定',
+	popupLocationBar: 'ロケーションバー',
+	popupMenuBar: 'メニューバー',
+	popupResizable: 'サイズ可変',
+	popupScrollBars: 'スクロールバー',
+	popupStatusBar: 'ステータスバー',
+	popupToolbar: 'ツールバー',
+	popupTop: '上端からの座標で指定',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'アンカーを選択',
+	styles: 'スタイルシート',
+	tabIndex: 'タブインデックス',
+	target: 'ターゲット',
+	targetFrame: '<フレーム>',
+	targetFrameName: '目的のフレーム名',
+	targetPopup: '<ポップアップウィンドウ>',
+	targetPopupName: 'ポップアップウィンドウ名',
+	title: 'ハイパーリンク',
+	toAnchor: 'このページのアンカー',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'リンク挿入/編集',
+	type: 'リンクタイプ',
+	unlink: 'リンク削除',
+	upload: 'アップロード',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ka.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ka.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ka.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ka', {
+	acccessKey: 'წვდომის ღილაკი',
+	advanced: 'დაწვრილებით',
+	advisoryContentType: 'შიგთავსის ტიპი',
+	advisoryTitle: 'სათაური',
+	anchor: {
+		toolbar: 'ღუზა',
+		menu: 'ღუზის რედაქტირება',
+		title: 'ღუზის პარამეტრები',
+		name: 'ღუზუს სახელი',
+		errorName: 'აკრიფეთ ღუზის სახელი',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ელემენტის Id-თ',
+	anchorName: 'ღუზის სახელით',
+	charset: 'კოდირება',
+	cssClasses: 'CSS კლასი',
+	emailAddress: 'ელფოსტის მისამართები',
+	emailBody: 'წერილის ტექსტი',
+	emailSubject: 'წერილის სათაური',
+	id: 'Id',
+	info: 'ბმულის ინფორმაცია',
+	langCode: 'ენის კოდი',
+	langDir: 'ენის მიმართულება',
+	langDirLTR: 'მარცხნიდან მარჯვნივ (LTR)',
+	langDirRTL: 'მარჯვნიდან მარცხნივ (RTL)',
+	menu: 'ბმულის რედაქტირება',
+	name: 'სახელი',
+	noAnchors: '(ამ დოკუმენტში ღუზა არაა)',
+	noEmail: 'აკრიფეთ ელფოსტის მისამართი',
+	noUrl: 'აკრიფეთ ბმულის URL',
+	other: '<სხვა>',
+	popupDependent: 'დამოკიდებული (Netscape)',
+	popupFeatures: 'Popup ფანჯრის პარამეტრები',
+	popupFullScreen: 'მთელი ეკრანი (IE)',
+	popupLeft: 'მარცხენა პოზიცია',
+	popupLocationBar: 'ნავიგაციის ზოლი',
+	popupMenuBar: 'მენიუს ზოლი',
+	popupResizable: 'ცვალებადი ზომით',
+	popupScrollBars: 'გადახვევის ზოლები',
+	popupStatusBar: 'სტატუსის ზოლი',
+	popupToolbar: 'ხელსაწყოთა ზოლი',
+	popupTop: 'ზედა პოზიცია',
+	rel: 'კავშირი',
+	selectAnchor: 'აირჩიეთ ღუზა',
+	styles: 'CSS სტილი',
+	tabIndex: 'Tab-ის ინდექსი',
+	target: 'გახსნის ადგილი',
+	targetFrame: '<frame>',
+	targetFrameName: 'Frame-ის სახელი',
+	targetPopup: '<popup ფანჯარა>',
+	targetPopupName: 'Popup ფანჯრის სახელი',
+	title: 'ბმული',
+	toAnchor: 'ბმული ტექსტში ღუზაზე',
+	toEmail: 'ელფოსტა',
+	toUrl: 'URL',
+	toolbar: 'ბმული',
+	type: 'ბმულის ტიპი',
+	unlink: 'ბმულის მოხსნა',
+	upload: 'აქაჩვა',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/km.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'km', {
+	acccessKey: 'ឃី សំរាប់ចូល',
+	advanced: 'កំរិតខ្ពស់',
+	advisoryContentType: 'ប្រភេទអត្ថបទ ប្រឹក្សា',
+	advisoryTitle: 'ចំណងជើង ប្រឹក្សា',
+	anchor: {
+		toolbar: 'បន្ថែម/កែប្រែ យុថ្កា',
+		menu: 'ការកំណត់យុថ្កា',
+		title: 'ការកំណត់យុថ្កា',
+		name: 'ឈ្មោះយុទ្ធថ្កា',
+		errorName: 'សូមសរសេរ ឈ្មោះយុទ្ធថ្កា',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'តាម Id',
+	anchorName: 'តាមឈ្មោះរបស់យុថ្កា',
+	charset: 'លេខកូតអក្សររបស់ឈ្នាប់',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: 'អ៊ីមែល',
+	emailBody: 'អត្ថបទ',
+	emailSubject: 'ចំណងជើងអត្ថបទ',
+	id: 'Id',
+	info: 'ពត៌មានអំពីឈ្នាប់',
+	langCode: 'ទិសដៅភាសា',
+	langDir: 'ទិសដៅភាសា',
+	langDirLTR: 'ពីឆ្វេងទៅស្តាំ(LTR)',
+	langDirRTL: 'ពីស្តាំទៅឆ្វេង(RTL)',
+	menu: 'កែប្រែឈ្នាប់',
+	name: 'ឈ្មោះ',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល',
+	noUrl: 'សូមសរសេរ អាស័យដ្ឋាន URL',
+	other: '<other>', // MISSING
+	popupDependent: 'អាស្រ័យលើ (Netscape)',
+	popupFeatures: 'លក្ខណះរបស់វីនដូលលោត',
+	popupFullScreen: 'អេក្រុងពេញ(IE)',
+	popupLeft: 'ទីតាំងខាងឆ្វេង',
+	popupLocationBar: 'របា ទីតាំង',
+	popupMenuBar: 'របា មឺនុយ',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'របា ទាញ',
+	popupStatusBar: 'របា ពត៌មាន',
+	popupToolbar: 'របា ឩបករណ៍',
+	popupTop: 'ទីតាំងខាងលើ',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'ជ្រើសរើសយុថ្កា',
+	styles: 'ម៉ូត',
+	tabIndex: 'លេខ Tab',
+	target: 'គោលដៅ',
+	targetFrame: '<ហ្វ្រេម>',
+	targetFrameName: 'ឈ្មោះហ្រ្វេមដែលជាគោលដៅ',
+	targetPopup: '<វីនដូវ លោត>',
+	targetPopupName: 'ឈ្មោះវីនដូវលោត',
+	title: 'ឈ្នាប់',
+	toAnchor: 'យុថ្កានៅក្នុងទំព័រនេះ',
+	toEmail: 'អ៊ីមែល',
+	toUrl: 'URL',
+	toolbar: 'បន្ថែម/កែប្រែ ឈ្នាប់',
+	type: 'ប្រភេទឈ្នាប់',
+	unlink: 'លប់ឈ្នាប់',
+	upload: 'ទាញយក',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ko.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ko', {
+	acccessKey: '엑세스 키',
+	advanced: '자세히',
+	advisoryContentType: 'Advisory Content Type',
+	advisoryTitle: 'Advisory Title',
+	anchor: {
+		toolbar: '책갈피 삽입/변경',
+		menu: '책갈피 속성',
+		title: '책갈피 속성',
+		name: '책갈피 이름',
+		errorName: '책갈피 이름을 입력하십시요.',
+		remove: 'Remove Anchor'
+	},
+	anchorId: '책갈피 ID',
+	anchorName: '책갈피 이름',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet Classes',
+	emailAddress: '이메일 주소',
+	emailBody: '내용',
+	emailSubject: '제목',
+	id: 'ID',
+	info: '링크 정보',
+	langCode: '쓰기 방향',
+	langDir: '쓰기 방향',
+	langDirLTR: '왼쪽에서 오른쪽 (LTR)',
+	langDirRTL: '오른쪽에서 왼쪽 (RTL)',
+	menu: '링크 수정',
+	name: 'Name',
+	noAnchors: '(문서에 책갈피가 없습니다.)',
+	noEmail: '이메일주소를 입력하십시요.',
+	noUrl: '링크 URL을 입력하십시요.',
+	other: '<기타>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: '팝업창 설정',
+	popupFullScreen: '전체화면 (IE)',
+	popupLeft: '왼쪽 위치',
+	popupLocationBar: '주소표시줄',
+	popupMenuBar: '메뉴바',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: '스크롤바',
+	popupStatusBar: '상태바',
+	popupToolbar: '툴바',
+	popupTop: '윗쪽 위치',
+	rel: 'Relationship', // MISSING
+	selectAnchor: '책갈피 선택',
+	styles: 'Style',
+	tabIndex: '탭 순서',
+	target: '타겟',
+	targetFrame: '<프레임>',
+	targetFrameName: '타겟 프레임 이름',
+	targetPopup: '<팝업창>',
+	targetPopupName: '팝업창 이름',
+	title: '링크',
+	toAnchor: '책갈피',
+	toEmail: '이메일',
+	toUrl: 'URL',
+	toolbar: '링크 삽입/변경',
+	type: '링크 종류',
+	unlink: '링크 삭제',
+	upload: '업로드',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ku.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ku', {
+	acccessKey: 'کلیلی دهستپێگهیشتن',
+	advanced: 'پێشکهوتوو',
+	advisoryContentType: 'جۆری ناوهڕۆکی ڕاویژکار',
+	advisoryTitle: 'ڕاوێژکاری سهردێڕ',
+	anchor: {
+		toolbar: 'دانان/چاکسازی لهنگهر',
+		menu: 'چاکسازی لهنگهر',
+		title: 'خاسیهتی لهنگهر',
+		name: 'ناوی لهنگهر',
+		errorName: 'تکایه ناوی لهنگهر بنووسه',
+		remove: 'لابردنی لهنگهر'
+	},
+	anchorId: 'بهپێی ناسنامهی توخم',
+	anchorName: 'بهپێی ناوی لهنگهر',
+	charset: 'بەستەری سەرچاوەی نووسه',
+	cssClasses: 'شێوازی چینی پهڕه',
+	emailAddress: 'ناونیشانی ئیمهیل',
+	emailBody: 'ناوهڕۆکی نامه',
+	emailSubject: 'بابهتی نامه',
+	id: 'ناسنامه',
+	info: 'زانیاری بەستەر',
+	langCode: 'هێمای زمان',
+	langDir: 'ئاراستهی زمان',
+	langDirLTR: 'چهپ بۆ ڕاست (LTR)',
+	langDirRTL: 'ڕاست بۆ چهپ (RTL)',
+	menu: 'چاکسازی بەستەر',
+	name: 'ناو',
+	noAnchors: '(هیچ جۆرێکی لهنگهر ئاماده نیه لهم پهڕهیه)',
+	noEmail: 'تکایه ناونیشانی ئیمهیل بنووسه',
+	noUrl: 'تکایه ناونیشانی بهستهر بنووسه',
+	other: '<هیتر>',
+	popupDependent: 'پێوهبهستراو (Netscape)',
+	popupFeatures: 'خاسیهتی پهنجهرهی سهرههڵدهر',
+	popupFullScreen: 'پڕ بهپڕی شاشه (IE)',
+	popupLeft: 'جێگای چهپ',
+	popupLocationBar: 'هێڵی ناونیشانی بهستهر',
+	popupMenuBar: 'هێڵی لیسته',
+	popupResizable: 'توانای گۆڕینی قهباره',
+	popupScrollBars: 'هێڵی هاتووچۆپێکردن',
+	popupStatusBar: 'هێڵی دۆخ',
+	popupToolbar: 'هێڵی تووڵامراز',
+	popupTop: 'جێگای سهرهوه',
+	rel: 'پهیوهندی (rel)',
+	selectAnchor: 'ههڵبژاردنی لهنگهرێك',
+	styles: 'شێواز',
+	tabIndex: 'بازدهری تابی  ئیندێکس',
+	target: 'ئامانج',
+	targetFrame: '<چووارچێوه>',
+	targetFrameName: 'ناوی ئامانجی چووارچێوه',
+	targetPopup: '<پهنجهرهی سهرههڵدهر>',
+	targetPopupName: 'ناوی پهنجهرهی سهرههڵدهر',
+	title: 'بەستەر',
+	toAnchor: 'بهستهر بۆ لهنگهر له دهق',
+	toEmail: 'ئیمهیل',
+	toUrl: 'ناونیشانی بهستهر',
+	toolbar: 'دانان/ڕێکخستنی بەستەر',
+	type: 'جۆری بهستهر',
+	unlink: 'لابردنی بەستەر',
+	upload: 'بارکردن',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lt.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'lt', {
+	acccessKey: 'Prieigos raktas',
+	advanced: 'Papildomas',
+	advisoryContentType: 'Konsultacinio turinio tipas',
+	advisoryTitle: 'Konsultacinė antraštė',
+	anchor: {
+		toolbar: 'Įterpti/modifikuoti žymę',
+		menu: 'Žymės savybės',
+		title: 'Žymės savybės',
+		name: 'Žymės vardas',
+		errorName: 'Prašome įvesti žymės vardą',
+		remove: 'Pašalinti žymę'
+	},
+	anchorId: 'Pagal žymės Id',
+	anchorName: 'Pagal žymės vardą',
+	charset: 'Susietų išteklių simbolių lentelė',
+	cssClasses: 'Stilių lentelės klasės',
+	emailAddress: 'El.pašto adresas',
+	emailBody: 'Žinutės turinys',
+	emailSubject: 'Žinutės tema',
+	id: 'Id',
+	info: 'Nuorodos informacija',
+	langCode: 'Teksto kryptis',
+	langDir: 'Teksto kryptis',
+	langDirLTR: 'Iš kairės į dešinę (LTR)',
+	langDirRTL: 'Iš dešinės į kairę (RTL)',
+	menu: 'Taisyti nuorodą',
+	name: 'Vardas',
+	noAnchors: '(Šiame dokumente žymių nėra)',
+	noEmail: 'Prašome įvesti el.pašto adresą',
+	noUrl: 'Prašome įvesti nuorodos URL',
+	other: '<kitas>',
+	popupDependent: 'Priklausomas (Netscape)',
+	popupFeatures: 'Išskleidžiamo lango savybės',
+	popupFullScreen: 'Visas ekranas (IE)',
+	popupLeft: 'Kairė pozicija',
+	popupLocationBar: 'Adreso juosta',
+	popupMenuBar: 'Meniu juosta',
+	popupResizable: 'Kintamas dydis',
+	popupScrollBars: 'Slinkties juostos',
+	popupStatusBar: 'Būsenos juosta',
+	popupToolbar: 'Mygtukų juosta',
+	popupTop: 'Viršutinė pozicija',
+	rel: 'Sąsajos',
+	selectAnchor: 'Pasirinkite žymę',
+	styles: 'Stilius',
+	tabIndex: 'Tabuliavimo indeksas',
+	target: 'Paskirties vieta',
+	targetFrame: '<kadras>',
+	targetFrameName: 'Paskirties kadro vardas',
+	targetPopup: '<išskleidžiamas langas>',
+	targetPopupName: 'Paskirties lango vardas',
+	title: 'Nuoroda',
+	toAnchor: 'Žymė šiame puslapyje',
+	toEmail: 'El.paštas',
+	toUrl: 'Nuoroda',
+	toolbar: 'Įterpti/taisyti nuorodą',
+	type: 'Nuorodos tipas',
+	unlink: 'Panaikinti nuorodą',
+	upload: 'Siųsti',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/lv.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'lv', {
+	acccessKey: 'Pieejas taustiņš',
+	advanced: 'Izvērstais',
+	advisoryContentType: 'Konsultatīvs satura tips',
+	advisoryTitle: 'Konsultatīvs virsraksts',
+	anchor: {
+		toolbar: 'Ievietot/Labot iezīmi',
+		menu: 'Labot iezīmi',
+		title: 'Iezīmes uzstādījumi',
+		name: 'Iezīmes nosaukums',
+		errorName: 'Lūdzu norādiet iezīmes nosaukumu',
+		remove: 'Noņemt iezīmi'
+	},
+	anchorId: 'Pēc elementa ID',
+	anchorName: 'Pēc iezīmes nosaukuma',
+	charset: 'Pievienotā resursa kodējums',
+	cssClasses: 'Stilu saraksta klases',
+	emailAddress: 'E-pasta adrese',
+	emailBody: 'Ziņas saturs',
+	emailSubject: 'Ziņas tēma',
+	id: 'ID',
+	info: 'Hipersaites informācija',
+	langCode: 'Valodas kods',
+	langDir: 'Valodas lasīšanas virziens',
+	langDirLTR: 'No kreisās uz labo (LTR)',
+	langDirRTL: 'No labās uz kreiso (RTL)',
+	menu: 'Labot hipersaiti',
+	name: 'Nosaukums',
+	noAnchors: '(Šajā dokumentā nav iezīmju)',
+	noEmail: 'Lūdzu norādi e-pasta adresi',
+	noUrl: 'Lūdzu norādi hipersaiti',
+	other: '<cits>',
+	popupDependent: 'Atkarīgs (Netscape)',
+	popupFeatures: 'Uznirstošā loga nosaukums īpašības',
+	popupFullScreen: 'Pilnā ekrānā (IE)',
+	popupLeft: 'Kreisā koordināte',
+	popupLocationBar: 'Atrašanās vietas josla',
+	popupMenuBar: 'Izvēlnes josla',
+	popupResizable: 'Mērogojams',
+	popupScrollBars: 'Ritjoslas',
+	popupStatusBar: 'Statusa josla',
+	popupToolbar: 'Rīku josla',
+	popupTop: 'Augšējā koordināte',
+	rel: 'Relācija',
+	selectAnchor: 'Izvēlēties iezīmi',
+	styles: 'Stils',
+	tabIndex: 'Ciļņu indekss',
+	target: 'Mērķis',
+	targetFrame: '<ietvars>',
+	targetFrameName: 'Mērķa ietvara nosaukums',
+	targetPopup: '<uznirstošā logā>',
+	targetPopupName: 'Uznirstošā loga nosaukums',
+	title: 'Hipersaite',
+	toAnchor: 'Iezīme šajā lapā',
+	toEmail: 'E-pasts',
+	toUrl: 'Adrese',
+	toolbar: 'Ievietot/Labot hipersaiti',
+	type: 'Hipersaites tips',
+	unlink: 'Noņemt hipersaiti',
+	upload: 'Augšupielādēt',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mk.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'mk', {
+	acccessKey: 'Access Key', // MISSING
+	advanced: 'Advanced', // MISSING
+	advisoryContentType: 'Advisory Content Type', // MISSING
+	advisoryTitle: 'Advisory Title', // MISSING
+	anchor: {
+		toolbar: 'Anchor',
+		menu: 'Edit Anchor',
+		title: 'Anchor Properties',
+		name: 'Anchor Name',
+		errorName: 'Please type the anchor name',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'By Element Id', // MISSING
+	anchorName: 'By Anchor Name', // MISSING
+	charset: 'Linked Resource Charset', // MISSING
+	cssClasses: 'Stylesheet Classes', // MISSING
+	emailAddress: 'E-Mail Address', // MISSING
+	emailBody: 'Message Body', // MISSING
+	emailSubject: 'Message Subject', // MISSING
+	id: 'Id', // MISSING
+	info: 'Link Info', // MISSING
+	langCode: 'Language Code', // MISSING
+	langDir: 'Language Direction', // MISSING
+	langDirLTR: 'Left to Right (LTR)', // MISSING
+	langDirRTL: 'Right to Left (RTL)', // MISSING
+	menu: 'Edit Link', // MISSING
+	name: 'Name',
+	noAnchors: '(No anchors available in the document)', // MISSING
+	noEmail: 'Please type the e-mail address', // MISSING
+	noUrl: 'Please type the link URL', // MISSING
+	other: '<other>', // MISSING
+	popupDependent: 'Dependent (Netscape)', // MISSING
+	popupFeatures: 'Popup Window Features', // MISSING
+	popupFullScreen: 'Full Screen (IE)', // MISSING
+	popupLeft: 'Left Position', // MISSING
+	popupLocationBar: 'Location Bar', // MISSING
+	popupMenuBar: 'Menu Bar', // MISSING
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll Bars', // MISSING
+	popupStatusBar: 'Status Bar', // MISSING
+	popupToolbar: 'Toolbar', // MISSING
+	popupTop: 'Top Position', // MISSING
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Select an Anchor', // MISSING
+	styles: 'Style', // MISSING
+	tabIndex: 'Tab Index', // MISSING
+	target: 'Target', // MISSING
+	targetFrame: '<frame>', // MISSING
+	targetFrameName: 'Target Frame Name', // MISSING
+	targetPopup: '<popup window>', // MISSING
+	targetPopupName: 'Popup Window Name', // MISSING
+	title: 'Link', // MISSING
+	toAnchor: 'Link to anchor in the text', // MISSING
+	toEmail: 'E-mail', // MISSING
+	toUrl: 'URL', // MISSING
+	toolbar: 'Link', // MISSING
+	type: 'Link Type', // MISSING
+	unlink: 'Unlink', // MISSING
+	upload: 'Upload', // MISSING,
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/mn.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'mn', {
+	acccessKey: 'Холбох түлхүүр',
+	advanced: 'Нэмэлт',
+	advisoryContentType: 'Зөвлөлдөх төрлийн агуулга',
+	advisoryTitle: 'Зөвлөлдөх гарчиг',
+	anchor: {
+		toolbar: 'Зангуу',
+		menu: 'Зангууг болосруулах',
+		title: 'Зангуугийн шинж чанар',
+		name: 'Зангуугийн нэр',
+		errorName: 'Зангуугийн нэрийг оруулна уу',
+		remove: 'Зангууг устгах'
+	},
+	anchorId: 'Элемэнтйн Id нэрээр',
+	anchorName: 'Зангуугийн нэрээр',
+	charset: 'Тэмдэгт оноох нөөцөд холбогдсон',
+	cssClasses: 'Stylesheet классууд',
+	emailAddress: 'Э-шуудангийн хаяг',
+	emailBody: 'Зурвасны их бие',
+	emailSubject: 'Зурвасны гарчиг',
+	id: 'Id',
+	info: 'Холбоосын тухай мэдээлэл',
+	langCode: 'Хэлний код',
+	langDir: 'Хэлний чиглэл',
+	langDirLTR: 'Зүүнээс баруун (LTR)',
+	langDirRTL: 'Баруунаас зүүн (RTL)',
+	menu: 'Холбоос засварлах',
+	name: 'Нэр',
+	noAnchors: '(Баримт бичиг зангуугүй байна)',
+	noEmail: 'Э-шуудангий хаягаа шивнэ үү',
+	noUrl: 'Холбоосны URL хаягийг шивнэ үү',
+	other: '<other>', // MISSING
+	popupDependent: 'Хамаатай (Netscape)',
+	popupFeatures: 'Popup цонхны онцлог',
+	popupFullScreen: 'Цонх дүүргэх (Internet Explorer)',
+	popupLeft: 'Зүүн байрлал',
+	popupLocationBar: 'Location хэсэг',
+	popupMenuBar: 'Цэсний самбар',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Скрол хэсэгүүд',
+	popupStatusBar: 'Статус хэсэг',
+	popupToolbar: 'Багажны самбар',
+	popupTop: 'Дээд байрлал',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Нэг зангууг сонгоно уу',
+	styles: 'Загвар',
+	tabIndex: 'Tab индекс',
+	target: 'Байрлал',
+	targetFrame: '<Агуулах хүрээ>',
+	targetFrameName: 'Очих фремын нэр',
+	targetPopup: '<popup цонх>',
+	targetPopupName: 'Popup цонхны нэр',
+	title: 'Холбоос',
+	toAnchor: 'Энэ бичвэр дэх зангуу руу очих холбоос',
+	toEmail: 'Э-захиа',
+	toUrl: 'цахим хуудасны хаяг (URL)',
+	toolbar: 'Холбоос',
+	type: 'Линкийн төрөл',
+	unlink: 'Холбоос авч хаях',
+	upload: 'Хуулах',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ms.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ms.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ms.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ms', {
+	acccessKey: 'Kunci Akses',
+	advanced: 'Advanced',
+	advisoryContentType: 'Jenis Kandungan Makluman',
+	advisoryTitle: 'Tajuk Makluman',
+	anchor: {
+		toolbar: 'Masukkan/Sunting Pautan',
+		menu: 'Ciri-ciri Pautan',
+		title: 'Ciri-ciri Pautan',
+		name: 'Nama Pautan',
+		errorName: 'Sila taip nama pautan',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'dengan menggunakan ID elemen',
+	anchorName: 'dengan menggunakan nama pautan',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Kelas-kelas Stylesheet',
+	emailAddress: 'Alamat E-Mail',
+	emailBody: 'Isi Kandungan Mesej',
+	emailSubject: 'Subjek Mesej',
+	id: 'Id',
+	info: 'Butiran Sambungan',
+	langCode: 'Arah Tulisan',
+	langDir: 'Arah Tulisan',
+	langDirLTR: 'Kiri ke Kanan (LTR)',
+	langDirRTL: 'Kanan ke Kiri (RTL)',
+	menu: 'Sunting Sambungan',
+	name: 'Nama',
+	noAnchors: '(Tiada pautan terdapat dalam dokumen ini)',
+	noEmail: 'Sila taip alamat e-mail',
+	noUrl: 'Sila taip sambungan URL',
+	other: '<lain>',
+	popupDependent: 'Bergantungan (Netscape)',
+	popupFeatures: 'Ciri Tetingkap Popup',
+	popupFullScreen: 'Skrin Penuh (IE)',
+	popupLeft: 'Posisi Kiri',
+	popupLocationBar: 'Bar Lokasi',
+	popupMenuBar: 'Bar Menu',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Bar-bar skrol',
+	popupStatusBar: 'Bar Status',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Posisi Atas',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Sila pilih pautan',
+	styles: 'Stail',
+	tabIndex: 'Indeks Tab ',
+	target: 'Sasaran',
+	targetFrame: '<bingkai>',
+	targetFrameName: 'Nama Bingkai Sasaran',
+	targetPopup: '<tetingkap popup>',
+	targetPopupName: 'Nama Tetingkap Popup',
+	title: 'Sambungan',
+	toAnchor: 'Pautan dalam muka surat ini',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Masukkan/Sunting Sambungan',
+	type: 'Jenis Sambungan',
+	unlink: 'Buang Sambungan',
+	upload: 'Muat Naik',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nb.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'nb', {
+	acccessKey: 'Aksessknapp',
+	advanced: 'Avansert',
+	advisoryContentType: 'Type',
+	advisoryTitle: 'Tittel',
+	anchor: {
+		toolbar: 'Sett inn/Rediger anker',
+		menu: 'Egenskaper for anker',
+		title: 'Egenskaper for anker',
+		name: 'Ankernavn',
+		errorName: 'Vennligst skriv inn ankernavnet',
+		remove: 'Fjern anker'
+	},
+	anchorId: 'Element etter ID',
+	anchorName: 'Anker etter navn',
+	charset: 'Lenket tegnsett',
+	cssClasses: 'Stilarkklasser',
+	emailAddress: 'E-postadresse',
+	emailBody: 'Melding',
+	emailSubject: 'Meldingsemne',
+	id: 'Id',
+	info: 'Lenkeinfo',
+	langCode: 'Språkkode',
+	langDir: 'Språkretning',
+	langDirLTR: 'Venstre til høyre (VTH)',
+	langDirRTL: 'Høyre til venstre (HTV)',
+	menu: 'Rediger lenke',
+	name: 'Navn',
+	noAnchors: '(Ingen anker i dokumentet)',
+	noEmail: 'Vennligst skriv inn e-postadressen',
+	noUrl: 'Vennligst skriv inn lenkens URL',
+	other: '<annen>',
+	popupDependent: 'Avhenging (Netscape)',
+	popupFeatures: 'Egenskaper for popup-vindu',
+	popupFullScreen: 'Fullskjerm (IE)',
+	popupLeft: 'Venstre posisjon',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menylinje',
+	popupResizable: 'Skalerbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Verktøylinje',
+	popupTop: 'Topp-posisjon',
+	rel: 'Relasjon (rel)',
+	selectAnchor: 'Velg et anker',
+	styles: 'Stil',
+	tabIndex: 'Tabindeks',
+	target: 'Mål',
+	targetFrame: '<ramme>',
+	targetFrameName: 'Målramme',
+	targetPopup: '<popup-vindu>',
+	targetPopupName: 'Navn på popup-vindu',
+	title: 'Lenke',
+	toAnchor: 'Lenke til anker i teksten',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toolbar: 'Sett inn/Rediger lenke',
+	type: 'Lenketype',
+	unlink: 'Fjern lenke',
+	upload: 'Last opp',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/nl.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'nl', {
+	acccessKey: 'Toegangstoets',
+	advanced: 'Geavanceerd',
+	advisoryContentType: 'Aanbevolen content-type',
+	advisoryTitle: 'Adviserende titel',
+	anchor: {
+		toolbar: 'Interne link',
+		menu: 'Eigenschappen interne link',
+		title: 'Eigenschappen interne link',
+		name: 'Naam interne link',
+		errorName: 'Geef de naam van de interne link op',
+		remove: 'Interne link verwijderen'
+	},
+	anchorId: 'Op kenmerk interne link',
+	anchorName: 'Op naam interne link',
+	charset: 'Karakterset van gelinkte bron',
+	cssClasses: 'Stylesheet-klassen',
+	emailAddress: 'E-mailadres',
+	emailBody: 'Inhoud bericht',
+	emailSubject: 'Onderwerp bericht',
+	id: 'Id',
+	info: 'Linkomschrijving',
+	langCode: 'Taalcode',
+	langDir: 'Schrijfrichting',
+	langDirLTR: 'Links naar rechts (LTR)',
+	langDirRTL: 'Rechts naar links (RTL)',
+	menu: 'Link wijzigen',
+	name: 'Naam',
+	noAnchors: '(Geen interne links in document gevonden)',
+	noEmail: 'Geef een e-mailadres',
+	noUrl: 'Geef de link van de URL',
+	other: '<ander>',
+	popupDependent: 'Afhankelijk (Netscape)',
+	popupFeatures: 'Instellingen popupvenster',
+	popupFullScreen: 'Volledig scherm (IE)',
+	popupLeft: 'Positie links',
+	popupLocationBar: 'Locatiemenu',
+	popupMenuBar: 'Menubalk',
+	popupResizable: 'Herschaalbaar',
+	popupScrollBars: 'Schuifbalken',
+	popupStatusBar: 'Statusbalk',
+	popupToolbar: 'Werkbalk',
+	popupTop: 'Positie boven',
+	rel: 'Relatie',
+	selectAnchor: 'Kies een interne link',
+	styles: 'Stijl',
+	tabIndex: 'Tabvolgorde',
+	target: 'Doelvenster',
+	targetFrame: '<frame>',
+	targetFrameName: 'Naam doelframe',
+	targetPopup: '<popupvenster>',
+	targetPopupName: 'Naam popupvenster',
+	title: 'Link',
+	toAnchor: 'Interne link in pagina',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Link invoegen/wijzigen',
+	type: 'Linktype',
+	unlink: 'Link verwijderen',
+	upload: 'Upload',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/no.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'no', {
+	acccessKey: 'Aksessknapp',
+	advanced: 'Avansert',
+	advisoryContentType: 'Type',
+	advisoryTitle: 'Tittel',
+	anchor: {
+		toolbar: 'Sett inn/Rediger anker',
+		menu: 'Egenskaper for anker',
+		title: 'Egenskaper for anker',
+		name: 'Ankernavn',
+		errorName: 'Vennligst skriv inn ankernavnet',
+		remove: 'Fjern anker'
+	},
+	anchorId: 'Element etter ID',
+	anchorName: 'Anker etter navn',
+	charset: 'Lenket tegnsett',
+	cssClasses: 'Stilarkklasser',
+	emailAddress: 'E-postadresse',
+	emailBody: 'Melding',
+	emailSubject: 'Meldingsemne',
+	id: 'Id',
+	info: 'Lenkeinfo',
+	langCode: 'Språkkode',
+	langDir: 'Språkretning',
+	langDirLTR: 'Venstre til høyre (VTH)',
+	langDirRTL: 'Høyre til venstre (HTV)',
+	menu: 'Rediger lenke',
+	name: 'Navn',
+	noAnchors: '(Ingen anker i dokumentet)',
+	noEmail: 'Vennligst skriv inn e-postadressen',
+	noUrl: 'Vennligst skriv inn lenkens URL',
+	other: '<annen>',
+	popupDependent: 'Avhenging (Netscape)',
+	popupFeatures: 'Egenskaper for popup-vindu',
+	popupFullScreen: 'Fullskjerm (IE)',
+	popupLeft: 'Venstre posisjon',
+	popupLocationBar: 'Adresselinje',
+	popupMenuBar: 'Menylinje',
+	popupResizable: 'Skalerbar',
+	popupScrollBars: 'Scrollbar',
+	popupStatusBar: 'Statuslinje',
+	popupToolbar: 'Verktøylinje',
+	popupTop: 'Topp-posisjon',
+	rel: 'Relasjon (rel)',
+	selectAnchor: 'Velg et anker',
+	styles: 'Stil',
+	tabIndex: 'Tabindeks',
+	target: 'Mål',
+	targetFrame: '<ramme>',
+	targetFrameName: 'Målramme',
+	targetPopup: '<popup-vindu>',
+	targetPopupName: 'Navn på popup-vindu',
+	title: 'Lenke',
+	toAnchor: 'Lenke til anker i teksten',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toolbar: 'Sett inn/Rediger lenke',
+	type: 'Lenketype',
+	unlink: 'Fjern lenke',
+	upload: 'Last opp',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pl.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'pl', {
+	acccessKey: 'Klawisz dostępu',
+	advanced: 'Zaawansowane',
+	advisoryContentType: 'Typ MIME obiektu docelowego',
+	advisoryTitle: 'Opis obiektu docelowego',
+	anchor: {
+		toolbar: 'Wstaw/edytuj kotwicę',
+		menu: 'Właściwości kotwicy',
+		title: 'Właściwości kotwicy',
+		name: 'Nazwa kotwicy',
+		errorName: 'Wpisz nazwę kotwicy',
+		remove: 'Usuń kotwicę'
+	},
+	anchorId: 'Wg identyfikatora',
+	anchorName: 'Wg nazwy',
+	charset: 'Kodowanie znaków obiektu docelowego',
+	cssClasses: 'Nazwa klasy CSS',
+	emailAddress: 'Adres e-mail',
+	emailBody: 'Treść',
+	emailSubject: 'Temat',
+	id: 'Id',
+	info: 'Informacje ',
+	langCode: 'Kod języka',
+	langDir: 'Kierunek tekstu',
+	langDirLTR: 'Od lewej do prawej (LTR)',
+	langDirRTL: 'Od prawej do lewej (RTL)',
+	menu: 'Edytuj odnośnik',
+	name: 'Nazwa',
+	noAnchors: '(W dokumencie nie zdefiniowano żadnych kotwic)',
+	noEmail: 'Podaj adres e-mail',
+	noUrl: 'Podaj adres URL',
+	other: '<inny>',
+	popupDependent: 'Okno zależne (Netscape)',
+	popupFeatures: 'Właściwości wyskakującego okna',
+	popupFullScreen: 'Pełny ekran (IE)',
+	popupLeft: 'Pozycja w poziomie',
+	popupLocationBar: 'Pasek adresu',
+	popupMenuBar: 'Pasek menu',
+	popupResizable: 'Skalowalny',
+	popupScrollBars: 'Paski przewijania',
+	popupStatusBar: 'Pasek statusu',
+	popupToolbar: 'Pasek narzędzi',
+	popupTop: 'Pozycja w pionie',
+	rel: 'Relacja',
+	selectAnchor: 'Wybierz kotwicę',
+	styles: 'Styl',
+	tabIndex: 'Indeks kolejności',
+	target: 'Obiekt docelowy',
+	targetFrame: '<ramka>',
+	targetFrameName: 'Nazwa ramki docelowej',
+	targetPopup: '<wyskakujące okno>',
+	targetPopupName: 'Nazwa wyskakującego okna',
+	title: 'Odnośnik',
+	toAnchor: 'Odnośnik wewnątrz strony (kotwica)',
+	toEmail: 'Adres e-mail',
+	toUrl: 'Adres URL',
+	toolbar: 'Wstaw/edytuj odnośnik',
+	type: 'Typ odnośnika',
+	unlink: 'Usuń odnośnik',
+	upload: 'Wyślij',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt-br.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'pt-br', {
+	acccessKey: 'Chave de Acesso',
+	advanced: 'Avançado',
+	advisoryContentType: 'Tipo de Conteúdo',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: 'Inserir/Editar Âncora',
+		menu: 'Formatar Âncora',
+		title: 'Formatar Âncora',
+		name: 'Nome da Âncora',
+		errorName: 'Por favor, digite o nome da âncora',
+		remove: 'Remover Âncora'
+	},
+	anchorId: 'Id da âncora',
+	anchorName: 'Nome da âncora',
+	charset: 'Charset do Link',
+	cssClasses: 'Classe de CSS',
+	emailAddress: 'Endereço E-Mail',
+	emailBody: 'Corpo da Mensagem',
+	emailSubject: 'Assunto da Mensagem',
+	id: 'Id',
+	info: 'Informações',
+	langCode: 'Direção do idioma',
+	langDir: 'Direção do idioma',
+	langDirLTR: 'Esquerda para Direita (LTR)',
+	langDirRTL: 'Direita para Esquerda (RTL)',
+	menu: 'Editar Link',
+	name: 'Nome',
+	noAnchors: '(Não há âncoras no documento)',
+	noEmail: 'Por favor, digite o endereço de e-mail',
+	noUrl: 'Por favor, digite o endereço do Link',
+	other: '<outro>',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Propriedades da Janela Pop-up',
+	popupFullScreen: 'Modo Tela Cheia (IE)',
+	popupLeft: 'Esquerda',
+	popupLocationBar: 'Barra de Endereços',
+	popupMenuBar: 'Barra de Menus',
+	popupResizable: 'Redimensionável',
+	popupScrollBars: 'Barras de Rolagem',
+	popupStatusBar: 'Barra de Status',
+	popupToolbar: 'Barra de Ferramentas',
+	popupTop: 'Topo',
+	rel: 'Tipo de Relação',
+	selectAnchor: 'Selecione uma âncora',
+	styles: 'Estilos',
+	tabIndex: 'Índice de Tabulação',
+	target: 'Destino',
+	targetFrame: '<frame>',
+	targetFrameName: 'Nome do Frame de Destino',
+	targetPopup: '<janela popup>',
+	targetPopupName: 'Nome da Janela Pop-up',
+	title: 'Editar Link',
+	toAnchor: 'Âncora nesta página',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Inserir/Editar Link',
+	type: 'Tipo de hiperlink',
+	unlink: 'Remover Link',
+	upload: 'Enviar ao Servidor',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/pt.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'pt', {
+	acccessKey: 'Chave de Acesso',
+	advanced: 'Avançado',
+	advisoryContentType: 'Tipo de Conteúdo',
+	advisoryTitle: 'Título',
+	anchor: {
+		toolbar: ' Inserir/Editar Âncora',
+		menu: 'Propriedades da Âncora',
+		title: 'Propriedades da Âncora',
+		name: 'Nome da Âncora',
+		errorName: 'Por favor, introduza o nome da âncora',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Por ID de elemento',
+	anchorName: 'Por Nome de Referência',
+	charset: 'Fonte de caracteres vinculado',
+	cssClasses: 'Classes de Estilo de Folhas Classes',
+	emailAddress: 'Endereço de E-Mail',
+	emailBody: 'Corpo da Mensagem',
+	emailSubject: 'Título de Mensagem',
+	id: 'ID',
+	info: 'Informação de Hiperligação',
+	langCode: 'Orientação de idioma',
+	langDir: 'Orientação de idioma',
+	langDirLTR: 'Esquerda à Direita (LTR)',
+	langDirRTL: 'Direita a Esquerda (RTL)',
+	menu: 'Editar Hiperligação',
+	name: 'Nome',
+	noAnchors: '(Não há referências disponíveis no documento)',
+	noEmail: 'Por favor introduza o endereço de e-mail',
+	noUrl: 'Por favor introduza a hiperligação URL',
+	other: '<outro>',
+	popupDependent: 'Dependente (Netscape)',
+	popupFeatures: 'Características de Janela de Popup',
+	popupFullScreen: 'Janela Completa (IE)',
+	popupLeft: 'Posição Esquerda',
+	popupLocationBar: 'Barra de localização',
+	popupMenuBar: 'Barra de Menu',
+	popupResizable: 'Redimensionável',
+	popupScrollBars: 'Barras de deslocamento',
+	popupStatusBar: 'Barra de Estado',
+	popupToolbar: 'Barra de Ferramentas',
+	popupTop: 'Posição Direita',
+	rel: 'Relação',
+	selectAnchor: 'Seleccionar una referência',
+	styles: 'Estilo',
+	tabIndex: 'Índice de Tubulação',
+	target: 'Destino',
+	targetFrame: '<Frame>',
+	targetFrameName: 'Nome do Frame Destino',
+	targetPopup: '<Janela de popup>',
+	targetPopupName: 'Nome da Janela de Popup',
+	title: 'Hiperligação',
+	toAnchor: 'Referência a esta página',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Inserir/Editar Hiperligação',
+	type: 'Tipo de Hiperligação',
+	unlink: 'Eliminar Hiperligação',
+	upload: 'Carregar',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ro.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ro.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ro.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ro', {
+	acccessKey: 'Tasta de acces',
+	advanced: 'Avansat',
+	advisoryContentType: 'Tipul consultativ al titlului',
+	advisoryTitle: 'Titlul consultativ',
+	anchor: {
+		toolbar: 'Inserează/Editează ancoră',
+		menu: 'Proprietăţi ancoră',
+		title: 'Proprietăţi ancoră',
+		name: 'Numele ancorei',
+		errorName: 'Vă rugăm scrieţi numele ancorei',
+		remove: 'Elimină ancora'
+	},
+	anchorId: 'după Id-ul elementului',
+	anchorName: 'după numele ancorei',
+	charset: 'Setul de caractere al resursei legate',
+	cssClasses: 'Clasele cu stilul paginii (CSS)',
+	emailAddress: 'Adresă de e-mail',
+	emailBody: 'Opțiuni Meniu Contextual',
+	emailSubject: 'Subiectul mesajului',
+	id: 'Id',
+	info: 'Informaţii despre link (Legătură web)',
+	langCode: 'Direcţia cuvintelor',
+	langDir: 'Direcţia cuvintelor',
+	langDirLTR: 'stânga-dreapta (LTR)',
+	langDirRTL: 'dreapta-stânga (RTL)',
+	menu: 'Editează Link',
+	name: 'Nume',
+	noAnchors: '(Nicio ancoră disponibilă în document)',
+	noEmail: 'Vă rugăm să scrieţi adresa de e-mail',
+	noUrl: 'Vă rugăm să scrieţi URL-ul',
+	other: '<alt>',
+	popupDependent: 'Dependent (Netscape)',
+	popupFeatures: 'Proprietăţile ferestrei popup',
+	popupFullScreen: 'Tot ecranul (Full Screen)(IE)',
+	popupLeft: 'Poziţia la stânga',
+	popupLocationBar: 'Bara de locaţie',
+	popupMenuBar: 'Bara de meniu',
+	popupResizable: 'Redimensionabil',
+	popupScrollBars: 'Bare de derulare',
+	popupStatusBar: 'Bara de status',
+	popupToolbar: 'Bara de opţiuni',
+	popupTop: 'Poziţia la dreapta',
+	rel: 'Relație',
+	selectAnchor: 'Selectaţi o ancoră',
+	styles: 'Stil',
+	tabIndex: 'Indexul tabului',
+	target: 'Ţintă (Target)',
+	targetFrame: '<frame>',
+	targetFrameName: 'Numele frameului ţintă',
+	targetPopup: '<fereastra popup>',
+	targetPopupName: 'Numele ferestrei popup',
+	title: 'Link (Legătură web)',
+	toAnchor: 'Ancoră în această pagină',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Inserează/Editează link (legătură web)',
+	type: 'Tipul link-ului (al legăturii web)',
+	unlink: 'Înlătură link (legătură web)',
+	upload: 'Încarcă',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ru.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ru', {
+	acccessKey: 'Клавиша доступа',
+	advanced: 'Дополнительно',
+	advisoryContentType: 'Тип содержимого',
+	advisoryTitle: 'Заголовок',
+	anchor: {
+		toolbar: 'Вставить / редактировать якорь',
+		menu: 'Изменить якорь',
+		title: 'Свойства якоря',
+		name: 'Имя якоря',
+		errorName: 'Пожалуйста, введите имя якоря',
+		remove: 'Удалить якорь'
+	},
+	anchorId: 'По идентификатору',
+	anchorName: 'По имени',
+	charset: 'Кодировка ресурса',
+	cssClasses: 'Классы CSS',
+	emailAddress: 'Email адрес',
+	emailBody: 'Текст сообщения',
+	emailSubject: 'Тема сообщения',
+	id: 'Идентификатор',
+	info: 'Информация о ссылке',
+	langCode: 'Код языка',
+	langDir: 'Направление текста',
+	langDirLTR: 'Слева направо (LTR)',
+	langDirRTL: 'Справа налево (RTL)',
+	menu: 'Редактировать ссылку',
+	name: 'Имя',
+	noAnchors: '(В документе нет ни одного якоря)',
+	noEmail: 'Пожалуйста, введите email адрес',
+	noUrl: 'Пожалуйста, введите ссылку',
+	other: '<другой>',
+	popupDependent: 'Зависимое (Netscape)',
+	popupFeatures: 'Параметры всплывающего окна',
+	popupFullScreen: 'Полноэкранное (IE)',
+	popupLeft: 'Отступ слева',
+	popupLocationBar: 'Панель адреса',
+	popupMenuBar: 'Панель меню',
+	popupResizable: 'Изменяемый размер',
+	popupScrollBars: 'Полосы прокрутки',
+	popupStatusBar: 'Строка состояния',
+	popupToolbar: 'Панель инструментов',
+	popupTop: 'Отступ сверху',
+	rel: 'Отношение',
+	selectAnchor: 'Выберите якорь',
+	styles: 'Стиль',
+	tabIndex: 'Последовательность перехода',
+	target: 'Цель',
+	targetFrame: '<фрейм>',
+	targetFrameName: 'Имя целевого фрейма',
+	targetPopup: '<всплывающее окно>',
+	targetPopupName: 'Имя всплывающего окна',
+	title: 'Ссылка',
+	toAnchor: 'Ссылка на якорь в тексте',
+	toEmail: 'Email',
+	toUrl: 'Ссылка',
+	toolbar: 'Вставить/Редактировать ссылку',
+	type: 'Тип ссылки',
+	unlink: 'Убрать ссылку',
+	upload: 'Загрузка',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/se.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/se.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/se.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sv', {
+	acccessKey: 'Behörighetsnyckel',
+	advanced: 'Avancerad',
+	advisoryContentType: 'Innehållstyp',
+	advisoryTitle: 'Titel',
+	anchor: {
+		toolbar: 'Infoga/Redigera ankarlänk',
+		menu: 'Egenskaper för ankarlänk',
+		title: 'Egenskaper för ankarlänk',
+		name: 'Ankarnamn',
+		errorName: 'Var god ange ett ankarnamn',
+		remove: 'Radera ankare'
+	},
+	anchorId: 'efter objektid',
+	anchorName: 'efter ankarnamn',
+	charset: 'Teckenuppställning',
+	cssClasses: 'Stylesheet class',
+	emailAddress: 'E-postadress',
+	emailBody: 'Innehåll',
+	emailSubject: 'Ämne',
+	id: 'Id',
+	info: 'Länkinformation',
+	langCode: 'Språkriktning',
+	langDir: 'Språkriktning',
+	langDirLTR: 'Vänster till höger (VTH)',
+	langDirRTL: 'Höger till vänster (HTV)',
+	menu: 'Redigera länk',
+	name: 'Namn',
+	noAnchors: '(Inga ankare kunde hittas)',
+	noEmail: 'Var god ange E-postadress',
+	noUrl: 'Var god ange länkens URL',
+	other: '<annan>',
+	popupDependent: 'Beroende (endast Netscape)',
+	popupFeatures: 'Popup-fönstrets egenskaper',
+	popupFullScreen: 'Helskärm (endast IE)',
+	popupLeft: 'Position från vänster',
+	popupLocationBar: 'Adressfält',
+	popupMenuBar: 'Menyfält',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scrolllista',
+	popupStatusBar: 'Statusfält',
+	popupToolbar: 'Verktygsfält',
+	popupTop: 'Position från sidans topp',
+	rel: 'Förhållande',
+	selectAnchor: 'Välj ett ankare',
+	styles: 'Stilmall',
+	tabIndex: 'Tabindex',
+	target: 'Mål',
+	targetFrame: '<ram>',
+	targetFrameName: 'Målets ramnamn',
+	targetPopup: '<popup-fönster>',
+	targetPopupName: 'Popup-fönstrets namn',
+	title: 'Länk',
+	toAnchor: 'Ankare i sidan',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toolbar: 'Infoga/Redigera länk',
+	type: 'Länktyp',
+	unlink: 'Radera länk',
+	upload: 'Ladda upp',
+	toWb: 'WB-Link',
+	selectPage: 'Please select an page',
+	wbPage: 'WB-Pages',
+	addon: 'Addon',
+	addonItem: 'Addon posts',
+	selectAddon: 'Please select an addon post',
+	noAddon: 'No addon posts found'	
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sk.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sk', {
+	acccessKey: 'Prístupový kľúč',
+	advanced: 'Rozšírené',
+	advisoryContentType: 'Pomocný typ obsahu',
+	advisoryTitle: 'Pomocný titulok',
+	anchor: {
+		toolbar: 'Kotva',
+		menu: 'Upraviť kotvu',
+		title: 'Vlastnosti kotvy',
+		name: 'Názov kotvy',
+		errorName: 'Zadajte prosím názov kotvy',
+		remove: 'Odstrániť kotvu'
+	},
+	anchorId: 'Podľa Id objektu',
+	anchorName: 'Podľa mena kotvy',
+	charset: 'Priradená znaková sada',
+	cssClasses: 'Triedy štýlu',
+	emailAddress: 'E-Mailová adresa',
+	emailBody: 'Telo správy',
+	emailSubject: 'Predmet správy',
+	id: 'Id',
+	info: 'Informácie o odkaze',
+	langCode: 'Orientácia jazyka',
+	langDir: 'Orientácia jazyka',
+	langDirLTR: 'Zľava doprava (LTR)',
+	langDirRTL: 'Sprava doľava (RTL)',
+	menu: 'Upraviť odkaz',
+	name: 'Názov',
+	noAnchors: '(V dokumente nie sú dostupné žiadne kotvy)',
+	noEmail: 'Zadajte prosím e-mailovú adresu',
+	noUrl: 'Zadajte prosím URL odkazu',
+	other: '<iný>',
+	popupDependent: 'Závislosť (Netscape)',
+	popupFeatures: 'Vlastnosti vyskakovacieho okna',
+	popupFullScreen: 'Celá obrazovka (IE)',
+	popupLeft: 'Ľavý okraj',
+	popupLocationBar: 'Panel umiestnenia (location bar)',
+	popupMenuBar: 'Panel ponuky (menu bar)',
+	popupResizable: 'Meniteľná veľkosť (resizable)',
+	popupScrollBars: 'Posuvníky (scroll bars)',
+	popupStatusBar: 'Stavový riadok (status bar)',
+	popupToolbar: 'Panel nástrojov (toolbar)',
+	popupTop: 'Horný okraj',
+	rel: 'Vzťah (rel)',
+	selectAnchor: 'Vybrať kotvu',
+	styles: 'Štýl',
+	tabIndex: 'Poradie prvku (tab index)',
+	target: 'Cieľ',
+	targetFrame: '<rámec>',
+	targetFrameName: 'Názov rámu cieľa',
+	targetPopup: '<vyskakovacie okno>',
+	targetPopupName: 'Názov vyskakovacieho okna',
+	title: 'Odkaz',
+	toAnchor: 'Odkaz na kotvu v texte',
+	toEmail: 'E-mail',
+	toUrl: 'URL',
+	toolbar: 'Odkaz',
+	type: 'Typ odkazu',
+	unlink: 'Odstrániť odkaz',
+	upload: 'Nahrať',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sl.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sl', {
+	acccessKey: 'Vstopno geslo',
+	advanced: 'Napredno',
+	advisoryContentType: 'Predlagani tip vsebine (content-type)',
+	advisoryTitle: 'Predlagani naslov',
+	anchor: {
+		toolbar: 'Vstavi/uredi zaznamek',
+		menu: 'Lastnosti zaznamka',
+		title: 'Lastnosti zaznamka',
+		name: 'Ime zaznamka',
+		errorName: 'Prosim vnesite ime zaznamka',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Po ID-ju elementa',
+	anchorName: 'Po imenu zaznamka',
+	charset: 'Kodna tabela povezanega vira',
+	cssClasses: 'Razred stilne predloge',
+	emailAddress: 'Elektronski naslov',
+	emailBody: 'Vsebina sporočila',
+	emailSubject: 'Predmet sporočila',
+	id: 'Id',
+	info: 'Podatki o povezavi',
+	langCode: 'Smer jezika',
+	langDir: 'Smer jezika',
+	langDirLTR: 'Od leve proti desni (LTR)',
+	langDirRTL: 'Od desne proti levi (RTL)',
+	menu: 'Uredi povezavo',
+	name: 'Ime',
+	noAnchors: '(V tem dokumentu ni zaznamkov)',
+	noEmail: 'Vnesite elektronski naslov',
+	noUrl: 'Vnesite URL povezave',
+	other: '<drug>',
+	popupDependent: 'Podokno (Netscape)',
+	popupFeatures: 'Značilnosti pojavnega okna',
+	popupFullScreen: 'Celozaslonska slika (IE)',
+	popupLeft: 'Lega levo',
+	popupLocationBar: 'Naslovna vrstica',
+	popupMenuBar: 'Menijska vrstica',
+	popupResizable: 'Spremenljive velikosti',
+	popupScrollBars: 'Drsniki',
+	popupStatusBar: 'Vrstica stanja',
+	popupToolbar: 'Orodna vrstica',
+	popupTop: 'Lega na vrhu',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Izberi zaznamek',
+	styles: 'Slog',
+	tabIndex: 'Številka tabulatorja',
+	target: 'Cilj',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Ime ciljnega okvirja',
+	targetPopup: '<pojavno okno>',
+	targetPopupName: 'Ime pojavnega okna',
+	title: 'Povezava',
+	toAnchor: 'Zaznamek na tej strani',
+	toEmail: 'Elektronski naslov',
+	toUrl: 'URL',
+	toolbar: 'Vstavi/uredi povezavo',
+	type: 'Vrsta povezave',
+	unlink: 'Odstrani povezavo',
+	upload: 'Prenesi',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr-latn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr-latn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr-latn.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sr-latn', {
+	acccessKey: 'Pristupni taster',
+	advanced: 'Napredni tagovi',
+	advisoryContentType: 'Advisory vrsta sadržaja',
+	advisoryTitle: 'Advisory naslov',
+	anchor: {
+		toolbar: 'Unesi/izmeni sidro',
+		menu: 'Osobine sidra',
+		title: 'Osobine sidra',
+		name: 'Ime sidra',
+		errorName: 'Unesite ime sidra',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Po Id-ju elementa',
+	anchorName: 'Po nazivu sidra',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet klase',
+	emailAddress: 'E-Mail adresa',
+	emailBody: 'Sadržaj poruke',
+	emailSubject: 'Naslov',
+	id: 'Id',
+	info: 'Link Info',
+	langCode: 'Smer jezika',
+	langDir: 'Smer jezika',
+	langDirLTR: 'S leva na desno (LTR)',
+	langDirRTL: 'S desna na levo (RTL)',
+	menu: 'Izmeni link',
+	name: 'Naziv',
+	noAnchors: '(Nema dostupnih sidra)',
+	noEmail: 'Otkucajte adresu elektronske pote',
+	noUrl: 'Unesite URL linka',
+	other: '<остало>',
+	popupDependent: 'Zavisno (Netscape)',
+	popupFeatures: 'Mogućnosti popup prozora',
+	popupFullScreen: 'Prikaz preko celog ekrana (IE)',
+	popupLeft: 'Od leve ivice ekrana (px)',
+	popupLocationBar: 'Lokacija',
+	popupMenuBar: 'Kontekstni meni',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Scroll bar',
+	popupStatusBar: 'Statusna linija',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Od vrha ekrana (px)',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Odaberi sidro',
+	styles: 'Stil',
+	tabIndex: 'Tab indeks',
+	target: 'Meta',
+	targetFrame: '<okvir>',
+	targetFrameName: 'Naziv odredišnog frejma',
+	targetPopup: '<popup prozor>',
+	targetPopupName: 'Naziv popup prozora',
+	title: 'Link',
+	toAnchor: 'Sidro na ovoj stranici',
+	toEmail: 'E-Mail',
+	toUrl: 'URL',
+	toolbar: 'Unesi/izmeni link',
+	type: 'Vrsta linka',
+	unlink: 'Ukloni link',
+	upload: 'Pošalji',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sr.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sr', {
+	acccessKey: 'Приступни тастер',
+	advanced: 'Напредни тагови',
+	advisoryContentType: 'Advisory врста садржаја',
+	advisoryTitle: 'Advisory наслов',
+	anchor: {
+		toolbar: 'Унеси/измени сидро',
+		menu: 'Особине сидра',
+		title: 'Особине сидра',
+		name: 'Име сидра',
+		errorName: 'Молимо Вас да унесете име сидра',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'Пo Ид-jу елемента',
+	anchorName: 'По називу сидра',
+	charset: 'Linked Resource Charset',
+	cssClasses: 'Stylesheet класе',
+	emailAddress: 'Адреса електронске поште',
+	emailBody: 'Садржај поруке',
+	emailSubject: 'Наслов',
+	id: 'Ид',
+	info: 'Линк инфо',
+	langCode: 'Смер језика',
+	langDir: 'Смер језика',
+	langDirLTR: 'С лева на десно (LTR)',
+	langDirRTL: 'С десна на лево (RTL)',
+	menu: 'Промени линк',
+	name: 'Назив',
+	noAnchors: '(Нема доступних сидра)',
+	noEmail: 'Откуцајте адресу електронске поште',
+	noUrl: 'Унесите УРЛ линка',
+	other: '<other>', // MISSING
+	popupDependent: 'Зависно (Netscape)',
+	popupFeatures: 'Могућности искачућег прозора',
+	popupFullScreen: 'Приказ преко целог екрана (ИE)',
+	popupLeft: 'Од леве ивице екрана (пиксела)',
+	popupLocationBar: 'Локација',
+	popupMenuBar: 'Контекстни мени',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'Скрол бар',
+	popupStatusBar: 'Статусна линија',
+	popupToolbar: 'Toolbar',
+	popupTop: 'Од врха екрана (пиксела)',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'Одабери сидро',
+	styles: 'Стил',
+	tabIndex: 'Таб индекс',
+	target: 'Meтa',
+	targetFrame: '<оквир>',
+	targetFrameName: 'Назив одредишног фрејма',
+	targetPopup: '<искачући прозор>',
+	targetPopupName: 'Назив искачућег прозора',
+	title: 'Линк',
+	toAnchor: 'Сидро на овој страници',
+	toEmail: 'Eлектронска пошта',
+	toUrl: 'УРЛ',
+	toolbar: 'Унеси/измени линк',
+	type: 'Врста линка',
+	unlink: 'Уклони линк',
+	upload: 'Пошаљи',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/sv.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'sv', {
+	acccessKey: 'Behörighetsnyckel',
+	advanced: 'Avancerad',
+	advisoryContentType: 'Innehållstyp',
+	advisoryTitle: 'Titel',
+	anchor: {
+		toolbar: 'Infoga/Redigera ankarlänk',
+		menu: 'Egenskaper för ankarlänk',
+		title: 'Egenskaper för ankarlänk',
+		name: 'Ankarnamn',
+		errorName: 'Var god ange ett ankarnamn',
+		remove: 'Radera ankare'
+	},
+	anchorId: 'efter objektid',
+	anchorName: 'efter ankarnamn',
+	charset: 'Teckenuppställning',
+	cssClasses: 'Stylesheet class',
+	emailAddress: 'E-postadress',
+	emailBody: 'Innehåll',
+	emailSubject: 'Ämne',
+	id: 'Id',
+	info: 'Länkinformation',
+	langCode: 'Språkriktning',
+	langDir: 'Språkriktning',
+	langDirLTR: 'Vänster till höger (VTH)',
+	langDirRTL: 'Höger till vänster (HTV)',
+	menu: 'Redigera länk',
+	name: 'Namn',
+	noAnchors: '(Inga ankare kunde hittas)',
+	noEmail: 'Var god ange E-postadress',
+	noUrl: 'Var god ange länkens URL',
+	other: '<annan>',
+	popupDependent: 'Beroende (endast Netscape)',
+	popupFeatures: 'Popup-fönstrets egenskaper',
+	popupFullScreen: 'Helskärm (endast IE)',
+	popupLeft: 'Position från vänster',
+	popupLocationBar: 'Adressfält',
+	popupMenuBar: 'Menyfält',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Scrolllista',
+	popupStatusBar: 'Statusfält',
+	popupToolbar: 'Verktygsfält',
+	popupTop: 'Position från sidans topp',
+	rel: 'Förhållande',
+	selectAnchor: 'Välj ett ankare',
+	styles: 'Stilmall',
+	tabIndex: 'Tabindex',
+	target: 'Mål',
+	targetFrame: '<ram>',
+	targetFrameName: 'Målets ramnamn',
+	targetPopup: '<popup-fönster>',
+	targetPopupName: 'Popup-fönstrets namn',
+	title: 'Länk',
+	toAnchor: 'Ankare i sidan',
+	toEmail: 'E-post',
+	toUrl: 'URL',
+	toolbar: 'Infoga/Redigera länk',
+	type: 'Länktyp',
+	unlink: 'Radera länk',
+	upload: 'Ladda upp',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/th.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'th', {
+	acccessKey: 'แอคเซส คีย์',
+	advanced: 'ขั้นสูง',
+	advisoryContentType: 'ชนิดของคำเกริ่นนำ',
+	advisoryTitle: 'คำเกริ่นนำ',
+	anchor: {
+		toolbar: 'แทรก/แก้ไข Anchor',
+		menu: 'รายละเอียด Anchor',
+		title: 'รายละเอียด Anchor',
+		name: 'ชื่อ Anchor',
+		errorName: 'กรุณาระบุชื่อของ Anchor',
+		remove: 'Remove Anchor'
+	},
+	anchorId: 'ไอดี',
+	anchorName: 'ชื่อ',
+	charset: 'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',
+	cssClasses: 'คลาสของไฟล์กำหนดลักษณะการแสดงผล',
+	emailAddress: 'อีเมล์ (E-Mail)',
+	emailBody: 'ข้อความ',
+	emailSubject: 'หัวเรื่อง',
+	id: 'ไอดี',
+	info: 'รายละเอียด',
+	langCode: 'การเขียน-อ่านภาษา',
+	langDir: 'การเขียน-อ่านภาษา',
+	langDirLTR: 'จากซ้ายไปขวา (LTR)',
+	langDirRTL: 'จากขวามาซ้าย (RTL)',
+	menu: 'แก้ไข ลิงค์',
+	name: 'ชื่อ',
+	noAnchors: '(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',
+	noEmail: 'กรุณาระบุอีเมล์ (E-mail)',
+	noUrl: 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',
+	other: '<อื่น ๆ>',
+	popupDependent: 'แสดงเต็มหน้าจอ (Netscape)',
+	popupFeatures: 'คุณสมบัติของหน้าจอเล็ก (Pop-up)',
+	popupFullScreen: 'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)',
+	popupLeft: 'พิกัดซ้าย (Left Position)',
+	popupLocationBar: 'แสดงที่อยู่ของไฟล์',
+	popupMenuBar: 'แสดงแถบเมนู',
+	popupResizable: 'Resizable', // MISSING
+	popupScrollBars: 'แสดงแถบเลื่อน',
+	popupStatusBar: 'แสดงแถบสถานะ',
+	popupToolbar: 'แสดงแถบเครื่องมือ',
+	popupTop: 'พิกัดบน (Top Position)',
+	rel: 'Relationship', // MISSING
+	selectAnchor: 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',
+	styles: 'ลักษณะการแสดงผล',
+	tabIndex: 'ลำดับของ แท็บ',
+	target: 'การเปิดหน้าลิงค์',
+	targetFrame: '<เปิดในเฟรม>',
+	targetFrameName: 'ชื่อทาร์เก็ตเฟรม',
+	targetPopup: '<เปิดหน้าจอเล็ก (Pop-up)>',
+	targetPopupName: 'ระบุชื่อหน้าจอเล็ก (Pop-up)',
+	title: 'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ',
+	toAnchor: 'จุดเชื่อมโยง (Anchor)',
+	toEmail: 'ส่งอีเมล์ (E-Mail)',
+	toUrl: 'ที่อยู่อ้างอิง URL',
+	toolbar: 'แทรก/แก้ไข ลิงค์',
+	type: 'ประเภทของลิงค์',
+	unlink: 'ลบ ลิงค์',
+	upload: 'อัพโหลดไฟล์',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/tr.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'tr', {
+	acccessKey: 'Erişim Tuşu',
+	advanced: 'Gelişmiş',
+	advisoryContentType: 'Danışma İçerik Türü',
+	advisoryTitle: 'Danışma Başlığı',
+	anchor: {
+		toolbar: 'Bağlantı Ekle/Düzenle',
+		menu: 'Bağlantı Özellikleri',
+		title: 'Bağlantı Özellikleri',
+		name: 'Bağlantı Adı',
+		errorName: 'Lütfen bağlantı için ad giriniz',
+		remove: 'Bağlantıyı Kaldır'
+	},
+	anchorId: 'Eleman Kimlik Numarası ile',
+	anchorName: 'Bağlantı Adı ile',
+	charset: 'Bağlı Kaynak Karakter Gurubu',
+	cssClasses: 'Biçem Sayfası Sınıfları',
+	emailAddress: 'E-Posta Adresi',
+	emailBody: 'İleti Gövdesi',
+	emailSubject: 'İleti Konusu',
+	id: 'Id',
+	info: 'Link Bilgisi',
+	langCode: 'Dil Yönü',
+	langDir: 'Dil Yönü',
+	langDirLTR: 'Soldan Sağa (LTR)',
+	langDirRTL: 'Sağdan Sola (RTL)',
+	menu: 'Link Düzenle',
+	name: 'Ad',
+	noAnchors: '(Bu belgede hiç çapa yok)',
+	noEmail: 'Lütfen E-posta adresini yazın',
+	noUrl: 'Lütfen Link URL\'sini yazın',
+	other: '<diğer>',
+	popupDependent: 'Bağımlı (Netscape)',
+	popupFeatures: 'Yeni Açılan Pencere Özellikleri',
+	popupFullScreen: 'Tam Ekran (IE)',
+	popupLeft: 'Sola Göre Konum',
+	popupLocationBar: 'Yer Çubuğu',
+	popupMenuBar: 'Menü Çubuğu',
+	popupResizable: 'Resizable',
+	popupScrollBars: 'Kaydırma Çubukları',
+	popupStatusBar: 'Durum Çubuğu',
+	popupToolbar: 'Araç Çubuğu',
+	popupTop: 'Yukarıya Göre Konum',
+	rel: 'İlişki',
+	selectAnchor: 'Bağlantı Seç',
+	styles: 'Biçem',
+	tabIndex: 'Sekme İndeksi',
+	target: 'Hedef',
+	targetFrame: '<çerçeve>',
+	targetFrameName: 'Hedef Çerçeve Adı',
+	targetPopup: '<yeni açılan pencere>',
+	targetPopupName: 'Yeni Açılan Pencere Adı',
+	title: 'Link',
+	toAnchor: 'Bu sayfada çapa',
+	toEmail: 'E-Posta',
+	toUrl: 'URL',
+	toolbar: 'Link Ekle/Düzenle',
+	type: 'Link Türü',
+	unlink: 'Köprü Kaldır',
+	upload: 'Karşıya Yükle',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/ug.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'ug', {
+	acccessKey: 'زىيارەت كۇنۇپكا',
+	advanced: 'ئالىي',
+	advisoryContentType: 'مەزمۇن تىپى',
+	advisoryTitle: 'ماۋزۇ',
+	anchor: {
+		toolbar: 'لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە',
+		menu: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى',
+		title: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى',
+		name: 'لەڭگەرلىك نۇقتا ئاتى',
+		errorName: 'لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ',
+		remove: 'لەڭگەرلىك نۇقتا ئۆچۈر'
+	},
+	anchorId: 'لەڭگەرلىك نۇقتا ID سى بويىچە',
+	anchorName: 'لەڭگەرلىك نۇقتا ئاتى بويىچە',
+	charset: 'ھەرپ كودلىنىشى',
+	cssClasses: 'ئۇسلۇب خىلى ئاتى',
+	emailAddress: 'ئادرېس',
+	emailBody: 'مەزمۇن',
+	emailSubject: 'ماۋزۇ',
+	id: 'ID',
+	info: 'ئۇلانما ئۇچۇرى',
+	langCode: 'تىل كودى',
+	langDir: 'تىل يۆنىلىشى',
+	langDirLTR: 'سولدىن ئوڭغا (LTR)',
+	langDirRTL: 'ئوڭدىن سولغا (RTL)',
+	menu: 'ئۇلانما تەھرىر',
+	name: 'ئات',
+	noAnchors: '(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)',
+	noEmail: 'ئېلخەت ئادرېسىنى كىرگۈزۈڭ',
+	noUrl: 'ئۇلانما ئادرېسىنى كىرگۈزۈڭ',
+	other: '‹باشقا›',
+	popupDependent: 'تەۋە (NS)',
+	popupFeatures: 'قاڭقىش كۆزنەك خاسلىقى',
+	popupFullScreen: 'پۈتۈن ئېكران (IE)',
+	popupLeft: 'سول',
+	popupLocationBar: 'ئادرېس بالداق',
+	popupMenuBar: 'تىزىملىك بالداق',
+	popupResizable: 'چوڭلۇقى ئۆزگەرتىشچان',
+	popupScrollBars: 'دومىلىما سۈرگۈچ',
+	popupStatusBar: 'ھالەت بالداق',
+	popupToolbar: 'قورال بالداق',
+	popupTop: 'ئوڭ',
+	rel: 'باغلىنىش',
+	selectAnchor: 'بىر لەڭگەرلىك نۇقتا تاللاڭ',
+	styles: 'قۇر ئىچىدىكى ئۇسلۇبى',
+	tabIndex: 'Tab تەرتىپى',
+	target: 'نىشان',
+	targetFrame: '‹كاندۇك›',
+	targetFrameName: 'نىشان كاندۇك ئاتى',
+	targetPopup: '‹قاڭقىش كۆزنەك›',
+	targetPopupName: 'قاڭقىش كۆزنەك ئاتى',
+	title: 'ئۇلانما',
+	toAnchor: 'بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى',
+	toEmail: 'ئېلخەت',
+	toUrl: 'ئادرېس',
+	toolbar: 'ئۇلانما قىستۇر/تەھرىرلە',
+	type: 'ئۇلانما تىپى',
+	unlink: 'ئۇلانما بىكار قىل',
+	upload: 'يۈكلە',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/uk.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'uk', {
+	acccessKey: 'Гаряча клавіша',
+	advanced: 'Додаткове',
+	advisoryContentType: 'Тип вмісту',
+	advisoryTitle: 'Заголовок',
+	anchor: {
+		toolbar: 'Вставити/Редагувати якір',
+		menu: 'Властивості якоря',
+		title: 'Властивості якоря',
+		name: 'Ім\'я якоря',
+		errorName: 'Будь ласка, вкажіть ім\'я якоря',
+		remove: 'Прибрати якір'
+	},
+	anchorId: 'За ідентифікатором елементу',
+	anchorName: 'За ім\'ям елементу',
+	charset: 'Кодування',
+	cssClasses: 'Клас CSS',
+	emailAddress: 'Адреса ел. пошти',
+	emailBody: 'Тіло повідомлення',
+	emailSubject: 'Тема листа',
+	id: 'Ідентифікатор',
+	info: 'Інформація посилання',
+	langCode: 'Код мови',
+	langDir: 'Напрямок мови',
+	langDirLTR: 'Зліва направо (LTR)',
+	langDirRTL: 'Справа наліво (RTL)',
+	menu: 'Вставити посилання',
+	name: 'Ім\'я',
+	noAnchors: '(В цьому документі немає якорів)',
+	noEmail: 'Будь ласка, вкажіть адрес ел. пошти',
+	noUrl: 'Будь ласка, вкажіть URL посилання',
+	other: '<інший>',
+	popupDependent: 'Залежний (Netscape)',
+	popupFeatures: 'Властивості випливаючого вікна',
+	popupFullScreen: 'Повний екран (IE)',
+	popupLeft: 'Позиція зліва',
+	popupLocationBar: 'Панель локації',
+	popupMenuBar: 'Панель меню',
+	popupResizable: 'Масштабоване',
+	popupScrollBars: 'Стрічки прокрутки',
+	popupStatusBar: 'Рядок статусу',
+	popupToolbar: 'Панель інструментів',
+	popupTop: 'Позиція зверху',
+	rel: 'Зв\'язок',
+	selectAnchor: 'Оберіть якір',
+	styles: 'Стиль CSS',
+	tabIndex: 'Послідовність переходу',
+	target: 'Ціль',
+	targetFrame: '<фрейм>',
+	targetFrameName: 'Ім\'я цільового фрейму',
+	targetPopup: '<випливаюче вікно>',
+	targetPopupName: 'Ім\'я випливаючого вікна',
+	title: 'Посилання',
+	toAnchor: 'Якір на цю сторінку',
+	toEmail: 'Ел. пошта',
+	toUrl: 'URL',
+	toolbar: 'Вставити/Редагувати посилання',
+	type: 'Тип посилання',
+	unlink: 'Видалити посилання',
+	upload: 'Надіслати',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/vi.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'vi', {
+	acccessKey: 'Phím hỗ trợ truy cập',
+	advanced: 'Mở rộng',
+	advisoryContentType: 'Nội dung hướng dẫn',
+	advisoryTitle: 'Nhan đề hướng dẫn',
+	anchor: {
+		toolbar: 'Chèn/Sửa điểm neo',
+		menu: 'Thuộc tính điểm neo',
+		title: 'Thuộc tính điểm neo',
+		name: 'Tên của điểm neo',
+		errorName: 'Hãy nhập vào tên của điểm neo',
+		remove: 'Xóa neo'
+	},
+	anchorId: 'Theo định danh thành phần',
+	anchorName: 'Theo tên điểm neo',
+	charset: 'Bảng mã của tài nguyên được liên kết đến',
+	cssClasses: 'Lớp Stylesheet',
+	emailAddress: 'Thư điện tử',
+	emailBody: 'Nội dung thông điệp',
+	emailSubject: 'Tiêu đề thông điệp',
+	id: 'Định danh',
+	info: 'Thông tin liên kết',
+	langCode: 'Mã ngôn ngữ',
+	langDir: 'Hướng ngôn ngữ',
+	langDirLTR: 'Trái sang phải (LTR)',
+	langDirRTL: 'Phải sang trái (RTL)',
+	menu: 'Sửa liên kết',
+	name: 'Tên',
+	noAnchors: '(Không có điểm neo nào trong tài liệu)',
+	noEmail: 'Hãy đưa vào địa chỉ thư điện tử',
+	noUrl: 'Hãy đưa vào đường dẫn liên kết (URL)',
+	other: '<khác>',
+	popupDependent: 'Phụ thuộc (Netscape)',
+	popupFeatures: 'Đặc điểm của cửa sổ Popup',
+	popupFullScreen: 'Toàn màn hình (IE)',
+	popupLeft: 'Vị trí bên trái',
+	popupLocationBar: 'Thanh vị trí',
+	popupMenuBar: 'Thanh Menu',
+	popupResizable: 'Có thể thay đổi kích cỡ',
+	popupScrollBars: 'Thanh cuộn',
+	popupStatusBar: 'Thanh trạng thái',
+	popupToolbar: 'Thanh công cụ',
+	popupTop: 'Vị trí phía trên',
+	rel: 'Quan hệ',
+	selectAnchor: 'Chọn một điểm neo',
+	styles: 'Kiểu (style)',
+	tabIndex: 'Chỉ số của Tab',
+	target: 'Đích',
+	targetFrame: '<khung>',
+	targetFrameName: 'Tên khung đích',
+	targetPopup: '<cửa sổ popup>',
+	targetPopupName: 'Tên cửa sổ Popup',
+	title: 'Liên kết',
+	toAnchor: 'Neo trong trang này',
+	toEmail: 'Thư điện tử',
+	toUrl: 'URL',
+	toolbar: 'Chèn/Sửa liên kết',
+	type: 'Kiểu liên kết',
+	unlink: 'Xoá liên kết',
+	upload: 'Tải lên',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'zh-cn', {
+	acccessKey: '访问键',
+	advanced: '高级',
+	advisoryContentType: '内容类型',
+	advisoryTitle: '标题',
+	anchor: {
+		toolbar: '插入/编辑锚点链接',
+		menu: '锚点链接属性',
+		title: '锚点链接属性',
+		name: '锚点名称',
+		errorName: '请输入锚点名称',
+		remove: '删除锚点'
+	},
+	anchorId: '按锚点 ID',
+	anchorName: '按锚点名称',
+	charset: '字符编码',
+	cssClasses: '样式类名称',
+	emailAddress: '地址',
+	emailBody: '内容',
+	emailSubject: '主题',
+	id: 'ID',
+	info: '超链接信息',
+	langCode: '语言代码',
+	langDir: '语言方向',
+	langDirLTR: '从左到右 (LTR)',
+	langDirRTL: '从右到左 (RTL)',
+	menu: '编辑超链接',
+	name: '名称',
+	noAnchors: '(此文档没有可用的锚点)',
+	noEmail: '请输入电子邮件地址',
+	noUrl: '请输入超链接地址',
+	other: '<其他>',
+	popupDependent: '依附 (NS)',
+	popupFeatures: '弹出窗口属性',
+	popupFullScreen: '全屏 (IE)',
+	popupLeft: '左',
+	popupLocationBar: '地址栏',
+	popupMenuBar: '菜单栏',
+	popupResizable: '可缩放',
+	popupScrollBars: '滚动条',
+	popupStatusBar: '状态栏',
+	popupToolbar: '工具栏',
+	popupTop: '右',
+	rel: '关联',
+	selectAnchor: '选择一个锚点',
+	styles: '行内样式',
+	tabIndex: 'Tab 键次序',
+	target: '目标',
+	targetFrame: '<框架>',
+	targetFrameName: '目标框架名称',
+	targetPopup: '<弹出窗口>',
+	targetPopupName: '弹出窗口名称',
+	title: '超链接',
+	toAnchor: '页内锚点链接',
+	toEmail: '电子邮件',
+	toUrl: '地址',
+	toolbar: '插入/编辑超链接',
+	type: '超链接类型',
+	unlink: '取消超链接',
+	upload: '上传',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/lang/zh.js	(revision 2)
@@ -0,0 +1,72 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wblink', 'zh', {
+	acccessKey: '存取鍵',
+	advanced: '進階',
+	advisoryContentType: '內容類型',
+	advisoryTitle: '標題',
+	anchor: {
+		toolbar: '插入/編輯錨點',
+		menu: '錨點屬性',
+		title: '錨點屬性',
+		name: '錨點名稱',
+		errorName: '請輸入錨點名稱',
+		remove: 'Remove Anchor'
+	},
+	anchorId: '依元件 ID',
+	anchorName: '依錨點名稱',
+	charset: '連結資源之編碼',
+	cssClasses: '樣式表類別',
+	emailAddress: '電子郵件',
+	emailBody: '郵件內容',
+	emailSubject: '郵件主旨',
+	id: 'ID',
+	info: '超連結資訊',
+	langCode: '語言方向',
+	langDir: '語言方向',
+	langDirLTR: '由左而右 (LTR)',
+	langDirRTL: '由右而左 (RTL)',
+	menu: '編輯超連結',
+	name: '名稱',
+	noAnchors: '(本文件尚無可用之錨點)',
+	noEmail: '請輸入電子郵件位址',
+	noUrl: '請輸入欲連結的 URL',
+	other: '<其他>',
+	popupDependent: '從屬 (NS)',
+	popupFeatures: '快顯視窗屬性',
+	popupFullScreen: '全螢幕 (IE)',
+	popupLeft: '左',
+	popupLocationBar: '網址列',
+	popupMenuBar: '選單列',
+	popupResizable: '可縮放',
+	popupScrollBars: '捲軸',
+	popupStatusBar: '狀態列',
+	popupToolbar: '工具列',
+	popupTop: '右',
+	rel: 'Relationship', // MISSING
+	selectAnchor: '請選擇錨點',
+	styles: '樣式',
+	tabIndex: '定位順序',
+	target: '目標',
+	targetFrame: '<框架>',
+	targetFrameName: '目標框架名稱',
+	targetPopup: '<快顯視窗>',
+	targetPopupName: '快顯視窗名稱',
+	title: '超連結',
+	toAnchor: '本頁錨點',
+	toEmail: '電子郵件',
+	toUrl: 'URL',
+	toolbar: '插入/編輯超連結',
+	type: '超連接類型',
+	unlink: '移除超連結',
+	upload: '上傳',
+	toWb: 'WB-Link',
+	wbPage: 'WB-Page',
+	newsItem: 'Direkt - Link',
+	selectNews: 'Please select a news-item',
+	selectTopics: 'Please select a topics-item',
+	selectBakery: 'Please select a bakery-item',
+	noNews: 'no news page selected'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/log/LOCK
===================================================================
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/pages.php
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/pages.php	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/pages.php	(revision 2)
@@ -0,0 +1,179 @@
+<?PHP
+header('Content-type: application/javascript');
+header('Cache-Control: no-store, no-cache, must-revalidate');
+header('Cache-Control: post-check=0, pre-check=0, false');
+header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
+header('Pragma: no-cache');
+
+/*
+    This Plugin read files of a directory and outputs
+    a javascript array. Output is:
+
+    var InternPagesSelectBox = new Array(
+        new Array( empty, empty ),
+        new Array( name, link ),
+        new Array( name, link )...
+    );
+
+    InternPagesSelectBox will loaded as select options
+    to internpage plugin.
+*/
+
+// Include the config file
+if ( !defined( 'WB_PATH' ) ){ require ( dirname(dirname(dirname(dirname(dirname(__DIR__))))).'/config.php'); }
+// > wb283 to use new wblink options
+$wb284  = (file_exists(WB_PATH.'/setup.ini.php')) ? true : false;
+
+// Create new admin object
+require(WB_PATH.'/framework/class.admin.php');
+$admin = new admin('Pages', 'pages_modify', false);
+
+if(!function_exists('cleanup')) {
+
+    function cleanup ($string) {
+        global $database;
+        // if magic quotes on
+        if (get_magic_quotes_gpc())
+        {
+            $string = stripslashes($string);
+        }
+        if(isset($database)&&method_exists($database,"escapeString")) {
+          return preg_replace("/\r?\n/", "\\n", $database->escapeString($string));
+        } elseif (is_object($database->db_handle) && (get_class($database->db_handle) === 'mysqli')){
+          return preg_replace("/\r?\n/", "\\n", mysqli_real_escape_string($database->db_handle, $string)); 
+        } else {
+          return preg_replace("/\r?\n/", "\\n", mysql_real_escape_string($string)); 
+        }
+   } // end function cleanup
+}
+
+ /**
+  * setPrettyArray()
+  * 
+  * @param integer $bLinefeed
+  * @param integer $iWhiteSpaces
+  * @param integer $iTabs
+  * @return string 
+  */
+ function setPrettyArray($bLinefeed = 1, $iWhiteSpaces = 0, $iTabs = 0) {
+   $sRetVal = "";
+   if($bLinefeed > 0) {
+     $sRetVal .= "\n";
+   }
+   if($iWhiteSpaces > 0) {
+     $sRetVal .= str_repeat(" ", $iWhiteSpaces);
+   }
+   if($iTabs > 0) {
+     $sRetVal .= str_repeat("\t", $iTabs);
+   }
+   return $sRetVal;
+ }
+
+$InternPagesSelectBox = "var InternPagesSelectBox = new Array( ";
+$PagesTitleSelectBox = "var PagesTitleSelectBox = new Array( ";
+
+
+function getPageTree($parent)
+{
+    global $admin, $database,$InternPagesSelectBox,$PagesTitleSelectBox;
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '
+          . 'WHERE `parent`= '.(int)$parent.' AND ' 
+          .    '`level`<='.PAGE_LEVEL_LIMIT.' '
+          .    ((PAGE_TRASH != 'inline') ?  'AND `visibility` != \'deleted\' ' : ' ')
+          . 'ORDER BY `position` ASC';
+    if (($resPage = $database->query($sql))) {
+        while (!(false == ($page = $resPage->fetchRow( MYSQLI_ASSOC )))) {
+            if (!$admin->page_is_visible($page)) { continue; }
+            $menu_title = cleanup( $page['menu_title'] );
+            $page_title = cleanup( $page['page_title'] );
+            $title_prefix = str_repeat(' - ', $page['level']);
+            $InternPagesSelectBox .= "new Array( '".$title_prefix.$menu_title."', '[wblink".$page['page_id']."]'), ";
+            $PagesTitleSelectBox .= "new Array( '".$page_title."', '[wblink".$page['page_id']."]'), ";
+            if($page['level'] < PAGE_LEVEL_LIMIT) {
+                getPageTree($page['page_id']);
+            }
+        }
+    }
+}
+// end of function
+
+getPageTree(0);
+
+$InternPagesSelectBox = substr($InternPagesSelectBox,0,-2);
+$PagesTitleSelectBox = substr($PagesTitleSelectBox,0,-2);
+echo $InternPagesSelectBox .= " );\n";
+echo $PagesTitleSelectBox .= " );\n";
+
+//generate news lists
+$wblink_allowed_chars = "/[^ a-zA-Z0-9_äöüÄÖÜß!\"§$%&\/\(\)\[\]=\{\}\?\*#~+-;:,\.\'\`@€|]/";
+
+$NewsItemsSelectBox = "var NewsItemsSelectBox = new Array();";
+$ModuleList = "var ModuleList = new Array();";
+
+
+if( is_readable( WB_PATH.'/modules/news/info.php' ) ) {
+  
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'sections`  WHERE `module` = \'news\' ';
+    $newsSections = $database->query($sql);
+
+    while($section = $newsSections->fetchRow(MYSQLI_ASSOC)){
+        $news = $database->query("SELECT `title`, `link`, `page_id`, `post_id` FROM `".TABLE_PREFIX."mod_news_posts` WHERE `active` = 1 AND `section_id` = ".$section['section_id']);
+
+        $ModuleList .= "ModuleList[".$section['page_id']."] = 'News';";
+        $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."] = new Array();";
+
+        while($item = $news->fetchRow(MYSQLI_ASSOC)) {
+          $item['title'] = preg_replace($wblink_allowed_chars , "" , $item['title']);
+          if ($wb284)
+              $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '[wblink".$item['page_id'].'?addon=news&item='.$item['post_id']."]');";
+            else    
+                $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '".WB_URL.PAGES_DIRECTORY.(addslashes($item['link'])).PAGE_EXTENSION."');";
+        }
+    }
+}
+
+if( is_readable( WB_PATH.'/modules/topics/info.php' ) ) {
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'sections`  WHERE `module` = \'topics\' ';
+    $topicsSections = $database->query($sql);
+
+    while($section = $topicsSections->fetchRow(MYSQLI_ASSOC)){
+        $topics = $database->query("SELECT `title`, `link`, `page_id`, `topic_id` FROM `".TABLE_PREFIX."mod_topics` WHERE `active` > 0 AND `section_id` = ".$section['section_id']);
+
+        $ModuleList .= "ModuleList[".$section['page_id']."] = 'Topics';";
+        $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."] = new Array();";
+
+        while($item = $topics->fetchRow(MYSQLI_ASSOC)) {
+          $item['title'] = preg_replace($wblink_allowed_chars , "" , $item['title']);
+
+          if ($wb284 && file_exists( WB_PATH."/modules/topics/WbLink.php"  ) )
+              $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '[wblink".$item['page_id'].'?addon=topics&item='.$item['topic_id']."]');";
+            else
+                $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '".WB_URL.PAGES_DIRECTORY."/topics/".(addslashes($item['link'])).PAGE_EXTENSION."');";
+        }
+    }
+}
+
+if( is_readable( WB_PATH.'/modules/bakery/info.php' ) ) {
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'sections`  WHERE `module` = \'bakery\' ';
+    $bakerySections = $database->query($sql);
+
+    while($section = $bakerySections->fetchRow(MYSQLI_ASSOC)){
+      $bakery = $database->query("SELECT `title`, `link`, `page_id`, `item_id` FROM `".TABLE_PREFIX."mod_bakery_items` WHERE `active`=1 AND `section_id` = ".$section['section_id']);
+
+      $ModuleList .= "ModuleList[".$section['page_id']."] = 'Bakery';";
+      $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."] = new Array();";
+
+      while($item = $bakery->fetchRow(MYSQLI_ASSOC)) {
+          $item['title'] = preg_replace($wblink_allowed_chars , "" , $item['title']);
+
+          if ($wb284 && file_exists(WB_PATH."/modules/bakery/WbLink.php"))
+            $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '[wblink".$item['page_id'].'?addon=bakery&item='.$item['item_id']."]');";  
+        else
+            $NewsItemsSelectBox .= "NewsItemsSelectBox[".$section['page_id']."][NewsItemsSelectBox[".$section['page_id']."].length] = new Array('".(addslashes($item['title']))."', '".WB_URL.PAGES_DIRECTORY.(addslashes($item['link'])).PAGE_EXTENSION."');";
+      }
+    }
+}
+
+echo $NewsItemsSelectBox;
+
+echo $ModuleList;

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wblink/pages.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wblink/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wblink/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wblink/plugin.js	(revision 2)
@@ -0,0 +1,796 @@
+﻿/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+'use strict';
+ */
+
+
+( function() {
+    CKEDITOR.plugins.add( 'wblink', {
+        requires: 'dialog,fakeobjects',
+        // jscs:disable maximumLineLength
+        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+        // jscs:enable maximumLineLength
+        icons: 'anchor,anchor-rtl,wblink,unlink', // %REMOVE_LINE_CORE%
+        hidpi: true, // %REMOVE_LINE_CORE%
+        onLoad: function() {
+            // Add the CSS styles for anchor placeholders.
+            var iconPath = CKEDITOR.getUrl( this.path + 'images' + ( CKEDITOR.env.hidpi ? '/hidpi' : '' ) + '/anchor.png' ),
+                baseStyle = 'background:url(' + CKEDITOR.getUrl( this.path + 'images/anchor.png' ) + ') no-repeat %1 center; border:1px dotted #00f;background-size:16px;';
+
+            var template = '.%2 a.cke_anchor,' +
+                '.%2 a.cke_anchor_empty' +
+                ',.cke_editable.%2 a[name]' +
+                ',.cke_editable.%2 a[data-cke-saved-name]' +
+                '{' +
+                    baseStyle +
+                    'padding-%1:18px;' +
+                    // Show the arrow cursor for the anchor image (FF at least).
+                    'cursor:auto;' +
+                '}' +
+                '.%2 img.cke_anchor' +
+                '{' +
+                    baseStyle +
+                    'width:16px;' +
+                    'min-height:15px;' +
+                    // The default line-height on IE.
+                    'height:1.15em;' +
+                    // Opera works better with "middle" (even if not perfect)
+                    'vertical-align:text-bottom;' +
+                '}';
+
+            // Styles with contents direction awareness.
+            function cssWithDir( dir ) {
+                return template.replace( /%1/g, dir == 'rtl' ? 'right' : 'left' ).replace( /%2/g, 'cke_contents_' + dir );
+            }
+
+            CKEDITOR.addCss( cssWithDir( 'ltr' ) + cssWithDir( 'rtl' ) );
+        },
+
+        init: function( editor ) {
+            var allowed = 'a[!href]',
+                required = 'a[href]';
+
+            if ( CKEDITOR.dialog.isTabEnabled( editor, 'wblink', 'advanced' ) )
+                allowed = allowed.replace( ']', ',accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)' );
+            if ( CKEDITOR.dialog.isTabEnabled( editor, 'wblink', 'target' ) )
+                allowed = allowed.replace( ']', ',target,onclick]' );
+
+            // Add the link and unlink buttons.
+            editor.addCommand( 'wblink', new CKEDITOR.dialogCommand( 'wblink', {
+                allowedContent: allowed,
+                requiredContent: required
+            } ) );
+            editor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor', {
+                allowedContent: 'a[!name,id]',
+                requiredContent: 'a[name]'
+            } ) );
+            editor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() );
+            editor.addCommand( 'removeAnchor', new CKEDITOR.removeAnchorCommand() );
+
+            editor.setKeystroke( CKEDITOR.CTRL + 76 /*L*/, 'wblink' );
+
+            if ( editor.ui.addButton ) {
+                editor.ui.addButton( 'Wblink', {
+                    label: editor.lang.wblink.toolbar,
+                    command: 'wblink',
+                    toolbar: 'links,10'
+                } );
+                editor.ui.addButton( 'Unlink', {
+                    label: editor.lang.wblink.unlink,
+                    command: 'unlink',
+                    toolbar: 'links,20'
+                } );
+                editor.ui.addButton( 'Anchor', {
+                    label: editor.lang.wblink.anchor.toolbar,
+                    command: 'anchor',
+                    toolbar: 'links,30'
+                } );
+            }
+
+            CKEDITOR.dialog.add( 'wblink', this.path + 'dialogs/wblink.js' );
+            CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' );
+
+            editor.on( 'doubleclick', function( evt ) {
+                var element = CKEDITOR.plugins.wblink.getSelectedLink( editor ) || evt.data.element;
+
+                if ( !element.isReadOnly() ) {
+                    if ( element.is( 'a' ) ) {
+                        evt.data.dialog = ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ? 'anchor' : 'wblink';
+
+                        // Pass the link to be selected along with event data.
+                        evt.data.link = element;
+                    } else if ( CKEDITOR.plugins.wblink.tryRestoreFakeAnchor( editor, element ) ) {
+                        evt.data.dialog = 'anchor';
+                    }
+                }
+            }, null, null, 0 );
+
+            // If event was cancelled, link passed in event data will not be selected.
+            editor.on( 'doubleclick', function( evt ) {
+                // Make sure both links and anchors are selected (#11822).
+                if ( evt.data.dialog in { link: 1, anchor: 1 } && evt.data.link )
+                    editor.getSelection().selectElement( evt.data.link );
+            }, null, null, 20 );
+
+            // If the "menu" plugin is loaded, register the menu items.
+            if ( editor.addMenuItems ) {
+                editor.addMenuItems( {
+                    anchor: {
+                        label: editor.lang.wblink.anchor.menu,
+                        command: 'anchor',
+                        group: 'anchor',
+                        order: 1
+                    },
+
+                    removeAnchor: {
+                        label: editor.lang.wblink.anchor.remove,
+                        command: 'removeAnchor',
+                        group: 'anchor',
+                        order: 5
+                    },
+
+                    wblink: {
+                        label: editor.lang.wblink.menu,
+                        command: 'wblink',
+                        group: 'link',
+                        order: 1
+                    },
+
+                    unlink: {
+                        label: editor.lang.wblink.unlink,
+                        command: 'unlink',
+                        group: 'link',
+                        order: 5
+                    }
+                } );
+            }
+
+            // If the "contextmenu" plugin is loaded, register the listeners.
+            if ( editor.contextMenu ) {
+                editor.contextMenu.addListener( function( element, selection ) {
+                    if ( !element || element.isReadOnly() )
+                        return null;
+
+                    var anchor = CKEDITOR.plugins.wblink.tryRestoreFakeAnchor( editor, element );
+
+                    if ( !anchor && !( anchor = CKEDITOR.plugins.wblink.getSelectedLink( editor ) ) )
+                        return null;
+
+                    var menu = {};
+
+                    if ( anchor.getAttribute( 'href' ) && anchor.getChildCount() )
+                        menu = { wblink : CKEDITOR.TRISTATE_OFF, unlink : CKEDITOR.TRISTATE_OFF };
+
+                    if ( anchor && anchor.hasAttribute( 'name' ) )
+                        menu.anchor = menu.removeAnchor = CKEDITOR.TRISTATE_OFF;
+
+                    return menu;
+                } );
+            }
+
+            this.compiledProtectionFunction = getCompiledProtectionFunction( editor );
+        },
+
+        afterInit: function( editor ) {
+            // Empty anchors upcasting to fake objects.
+            editor.dataProcessor.dataFilter.addRules( {
+                elements: {
+                    a: function( element ) {
+                        if ( !element.attributes.name )
+                            return null;
+
+                        if ( !element.children.length )
+                            return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' );
+
+                        return null;
+                    }
+                }
+            } );
+
+            var pathFilters = editor._.elementsPath && editor._.elementsPath.filters;
+            if ( pathFilters ) {
+                pathFilters.push( function( element, name ) {
+                    if ( name == 'a' ) {
+                        if ( CKEDITOR.plugins.wblink.tryRestoreFakeAnchor( editor, element ) || ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ) {
+                            return 'anchor';
+                        }
+                    }
+                } );
+            }
+        }
+    } );
+
+    // Loads the parameters in a selected link to the link dialog fields.
+    var javascriptProtocolRegex = /^javascript:/,
+        emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,
+        emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/i,
+        emailBodyRegex = /body=([^;?:@&=$,\/]*)/i,
+        anchorRegex = /^#(.*)$/,
+        urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/,
+        selectableTargets = /^(_(?:self|top|parent|blank))$/,
+        encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,
+        functionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\(([^)]+)\)$/,
+        popupRegex = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,
+        popupFeaturesRegex = /(?:^|,)([^=]+)=(\d+|yes|no)/gi;
+
+    var advAttrNames = {
+        id: 'advId',
+        dir: 'advLangDir',
+        accessKey: 'advAccessKey',
+        // 'data-cke-saved-name': 'advName',
+        name: 'advName',
+        lang: 'advLangCode',
+        tabindex: 'advTabIndex',
+        title: 'advTitle',
+        type: 'advContentType',
+        'class': 'advCSSClasses',
+        charset: 'advCharset',
+        style: 'advStyles',
+        rel: 'advRel'
+    };
+
+    function unescapeSingleQuote( str ) {
+        return str.replace( /\\'/g, '\'' );
+    }
+
+    function escapeSingleQuote( str ) {
+        return str.replace( /'/g, '\\$&' );
+    }
+
+    function protectEmailAddressAsEncodedString( address ) {
+        var charCode,
+            length = address.length,
+            encodedChars = [];
+
+        for ( var i = 0; i < length; i++ ) {
+            charCode = address.charCodeAt( i );
+            encodedChars.push( charCode );
+        }
+
+        return 'String.fromCharCode(' + encodedChars.join( ',' ) + ')';
+    }
+
+    function protectEmailLinkAsFunction( editor, email ) {
+        var plugin = editor.plugins.wblink,
+            name = plugin.compiledProtectionFunction.name,
+            params = plugin.compiledProtectionFunction.params,
+            paramName, paramValue, retval;
+
+        retval = [ name, '(' ];
+        for ( var i = 0; i < params.length; i++ ) {
+            paramName = params[ i ].toLowerCase();
+            paramValue = email[ paramName ];
+
+            i > 0 && retval.push( ',' );
+            retval.push( '\'', paramValue ? escapeSingleQuote( encodeURIComponent( email[ paramName ] ) ) : '', '\'' );
+        }
+        retval.push( ')' );
+        return retval.join( '' );
+    }
+
+    function getCompiledProtectionFunction( editor ) {
+        var emailProtection = editor.config.emailProtection || '',
+            compiledProtectionFunction;
+
+        // Compile the protection function pattern.
+        if ( emailProtection && emailProtection != 'encode' ) {
+            compiledProtectionFunction = {};
+
+            emailProtection.replace( /^([^(]+)\(([^)]+)\)$/, function( match, funcName, params ) {
+                compiledProtectionFunction.name = funcName;
+                compiledProtectionFunction.params = [];
+                params.replace( /[^,\s]+/g, function( param ) {
+                    compiledProtectionFunction.params.push( param );
+                } );
+            } );
+        }
+
+        return compiledProtectionFunction;
+    }
+
+    /**
+     * Set of wblink plugin's helpers.
+     *
+     * @class
+     * @singleton
+     */
+    CKEDITOR.plugins.wblink = {
+        /**
+         * Get the surrounding link element of the current selection.
+         *
+         *        CKEDITOR.plugins.link.getSelectedLink( editor );
+         *
+         *        // The following selections will all return the link element.
+         *
+         *        <a href="#">li^nk</a>
+         *        <a href="#">[link]</a>
+         *        text[<a href="#">link]</a>
+         *        <a href="#">li[nk</a>]
+         *        [<b><a href="#">li]nk</a></b>]
+         *        [<a href="#"><b>li]nk</b></a>
+         *
+         * @since 3.2.1
+         * @param {CKEDITOR.editor} editor
+         */
+        getSelectedLink: function( editor ) {
+            var selection = editor.getSelection();
+            var selectedElement = selection.getSelectedElement();
+            if ( selectedElement && selectedElement.is( 'a' ) )
+                return selectedElement;
+
+            var range = selection.getRanges()[ 0 ];
+
+            if ( range ) {
+                range.shrink( CKEDITOR.SHRINK_TEXT );
+                return editor.elementPath( range.getCommonAncestor() ).contains( 'a', 1 );
+            }
+            return null;
+        },
+
+        /**
+         * Collects anchors available in the editor (i.e. used by the Link plugin).
+         * Note that the scope of search is different for inline (the "global" document) and
+         * classic (`iframe`-based) editors (the "inner" document).
+         *
+         * @since 4.3.3
+         * @param {CKEDITOR.editor} editor
+         * @returns {CKEDITOR.dom.element[]} An array of anchor elements.
+         */
+        getEditorAnchors: function( editor ) {
+            var editable = editor.editable(),
+
+                // The scope of search for anchors is the entire document for inline editors
+                // and editor's editable for classic editor/divarea (#11359).
+                scope = ( editable.isInline() && !editor.plugins.divarea ) ? editor.document : editable,
+
+                links = scope.getElementsByTag( 'a' ),
+                imgs = scope.getElementsByTag( 'img' ),
+                anchors = [],
+                i = 0,
+                item;
+
+            // Retrieve all anchors within the scope.
+            while ( ( item = links.getItem( i++ ) ) ) {
+                if ( item.data( 'cke-saved-name' ) || item.hasAttribute( 'name' ) ) {
+                    anchors.push( {
+                        name: item.data( 'cke-saved-name' ) || item.getAttribute( 'name' ),
+                        id: item.getAttribute( 'id' )
+                    } );
+                }
+            }
+            // Retrieve all "fake anchors" within the scope.
+            i = 0;
+
+            while ( ( item = imgs.getItem( i++ ) ) ) {
+                if ( ( item = this.tryRestoreFakeAnchor( editor, item ) ) ) {
+                    anchors.push( {
+                        name: item.getAttribute( 'name' ),
+                        id: item.getAttribute( 'id' )
+                    } );
+                }
+            }
+
+            return anchors;
+        },
+
+        /**
+         * Opera and WebKit do not make it possible to select empty anchors. Fake
+         * elements must be used for them.
+         *
+         * @readonly
+         * @deprecated 4.3.3 It is set to `true` in every browser.
+         * @property {Boolean}
+         */
+        fakeAnchor: true,
+
+        /**
+         * For browsers that do not support CSS3 `a[name]:empty()`. Note that IE9 is included because of #7783.
+         *
+         * @readonly
+         * @deprecated 4.3.3 It is set to `false` in every browser.
+         * @property {Boolean} synAnchorSelector
+         */
+
+        /**
+         * For browsers that have editing issues with an empty anchor.
+         *
+         * @readonly
+         * @deprecated 4.3.3 It is set to `false` in every browser.
+         * @property {Boolean} emptyAnchorFix
+         */
+
+        /**
+         * Returns an element representing a real anchor restored from a fake anchor.
+         *
+         * @param {CKEDITOR.editor} editor
+         * @param {CKEDITOR.dom.element} element
+         * @returns {CKEDITOR.dom.element} Restored anchor element or nothing if the
+         * passed element was not a fake anchor.
+         */
+        tryRestoreFakeAnchor: function( editor, element ) {
+            if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' ) {
+                var link = editor.restoreRealElement( element );
+                if ( link.data( 'cke-saved-name' ) )
+                    return link;
+            }
+        },
+
+        /**
+         * Parses attributes of the link element and returns an object representing
+         * the current state (data) of the link. This data format is a plain object accepted
+         * e.g. by the Link dialog window and {@link #getLinkAttributes}.
+         *
+         * **Note:** Data model format produced by the parser must be compatible with the Link
+         * plugin dialog because it is passed directly to {@link CKEDITOR.dialog#setupContent}.
+         *
+         * @since 4.4
+         * @param {CKEDITOR.editor} editor
+         * @param {CKEDITOR.dom.element} element
+         * @returns {Object} An object of link data.
+         */
+        parseLinkAttributes: function( editor, element ) {
+            var href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '',
+                compiledProtectionFunction = editor.plugins.wblink.compiledProtectionFunction,
+                emailProtection = editor.config.emailProtection,
+                javascriptMatch, emailMatch, anchorMatch, urlMatch,
+                retval = {};
+
+            if ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) ) {
+                if ( emailProtection == 'encode' ) {
+                    href = href.replace( encodedEmailLinkRegex, function( match, protectedAddress, rest ) {
+                        // Without it 'undefined' is appended to e-mails without subject and body (#9192).
+                        rest = rest || '';
+
+                        return 'mailto:' +
+                            String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) +
+                            ( rest && unescapeSingleQuote( rest ) );
+                    } );
+                }
+                // Protected email link as function call.
+                else if ( emailProtection ) {
+                    href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs ) {
+                        if ( funcName == compiledProtectionFunction.name ) {
+                            retval.type = 'email';
+                            var email = retval.email = {};
+
+                            var paramRegex = /[^,\s]+/g,
+                                paramQuoteRegex = /(^')|('$)/g,
+                                paramsMatch = funcArgs.match( paramRegex ),
+                                paramsMatchLength = paramsMatch.length,
+                                paramName, paramVal;
+
+                            for ( var i = 0; i < paramsMatchLength; i++ ) {
+                                paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
+                                paramName = compiledProtectionFunction.params[ i ].toLowerCase();
+                                email[ paramName ] = paramVal;
+                            }
+                            email.address = [ email.name, email.domain ].join( '@' );
+                        }
+                    } );
+                }
+            }
+
+            if ( !retval.type ) {
+                if ( ( anchorMatch = href.match( anchorRegex ) ) ) {
+                    retval.type = 'anchor';
+                    retval.anchor = {};
+                    retval.anchor.name = retval.anchor.id = anchorMatch[ 1 ];
+                }
+                // Protected email link as encoded string.
+                else if ( ( emailMatch = href.match( emailRegex ) ) ) {
+                    var subjectMatch = href.match( emailSubjectRegex ),
+                        bodyMatch = href.match( emailBodyRegex );
+
+                    retval.type = 'email';
+                    var email = ( retval.email = {} );
+                    email.address = emailMatch[ 1 ];
+                    subjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) );
+                    bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) );
+                }
+                // urlRegex matches empty strings, so need to check for href as well.
+                else if ( href && ( urlMatch = href.match( urlRegex ) ) ) {
+                    retval.type = 'url';
+                    if (urlMatch[ 2 ].search(/\[wblink/) === 0) retval.type = 'wblink';
+                    retval.url = {};
+                    retval.url.protocol = urlMatch[ 1 ];
+                    retval.url.url = urlMatch[ 2 ];
+                }else
+                    retval.type = 'url';
+            }
+
+            // Load target and popup settings.
+            if ( element ) {
+                var target = element.getAttribute( 'target' );
+
+                // IE BUG: target attribute is an empty string instead of null in IE if it's not set.
+                if ( !target ) {
+                    var onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ),
+                        onclickMatch = onclick && onclick.match( popupRegex );
+
+                    if ( onclickMatch ) {
+                        retval.target = {
+                            type: 'popup',
+                            name: onclickMatch[ 1 ]
+                        };
+
+                        var featureMatch;
+                        while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[ 2 ] ) ) ) {
+                            // Some values should remain numbers (#7300)
+                            if ( ( featureMatch[ 2 ] == 'yes' || featureMatch[ 2 ] == '1' ) && !( featureMatch[ 1 ] in { height: 1, width: 1, top: 1, left: 1 } ) )
+                                retval.target[ featureMatch[ 1 ] ] = true;
+                            else if ( isFinite( featureMatch[ 2 ] ) )
+                                retval.target[ featureMatch[ 1 ] ] = featureMatch[ 2 ];
+                        }
+                    }
+                } else {
+                    retval.target = {
+                        type: target.match( selectableTargets ) ? target : 'frame',
+                        name: target
+                    };
+                }
+
+                var advanced = {};
+
+                for ( var a in advAttrNames ) {
+                    var val = element.getAttribute( a );
+
+                    if ( val )
+                        advanced[ advAttrNames[ a ] ] = val;
+                }
+
+                var advName = element.data( 'cke-saved-name' ) || advanced.advName;
+
+                if ( advName )
+                    advanced.advName = advName;
+
+                if ( !CKEDITOR.tools.isEmpty( advanced ) )
+                    retval.advanced = advanced;
+            }
+
+            return retval;
+        },
+
+        /**
+         * Converts link data produced by {@link #parseLinkAttributes} into an object which consists
+         * of attributes to be set (with their values) and an array of attributes to be removed.
+         * This method can be used to compose or to update any link element with the given data.
+         *
+         * @since 4.4
+         * @param {CKEDITOR.editor} editor
+         * @param {Object} data Data in {@link #parseLinkAttributes} format.
+         * @returns {Object} An object consisting of two keys, i.e.:
+         *
+         *        {
+         *            // Attributes to be set.
+         *            set: {
+         *                href: 'http://foo.bar',
+         *                target: 'bang'
+         *            },
+         *            // Attributes to be removed.
+         *            removed: [
+         *                'id', 'style'
+         *            ]
+         *        }
+         *
+         */
+        getLinkAttributes: function( editor, data ) {
+            var emailProtection = editor.config.emailProtection || '',
+                set = {};
+
+            // Compose the URL.
+            switch ( data.type ) {
+                case 'url':
+                    var protocol = ( data.url && data.url.protocol !== undefined ) ? data.url.protocol : 'http://',
+                        url = ( data.url && CKEDITOR.tools.trim( data.url.url ) ) || '';
+
+                    set[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;
+
+                    break;
+                case 'wblink':
+                  if (data.newslink && data.newslink.url !== "") {
+                    var url = ( CKEDITOR.tools.trim( data.newslink.url ) );
+                  } else {
+                      var url = ( CKEDITOR.tools.trim( data.wblink.url ) ) || '';
+                    }
+                    set[ 'data-cke-saved-href' ] = url;
+                    break;
+                case 'anchor':
+                    var name = ( data.anchor && data.anchor.name ),
+                        id = ( data.anchor && data.anchor.id );
+
+                    set[ 'data-cke-saved-href' ] = '#' + ( name || id || '' );
+
+                    break;
+                case 'email':
+                    var email = data.email,
+                        address = email.address,
+                        linkHref;
+
+                    switch ( emailProtection ) {
+                        case '':
+                        case 'encode':
+                            var subject = encodeURIComponent( email.subject || '' ),
+                                body = encodeURIComponent( email.body || '' ),
+                                argList = [];
+
+                            // Build the e-mail parameters first.
+                            subject && argList.push( 'subject=' + subject );
+                            body && argList.push( 'body=' + body );
+                            argList = argList.length ? '?' + argList.join( '&' ) : '';
+
+                            if ( emailProtection == 'encode' ) {
+                                linkHref = [
+                                    'javascript:void(location.href=\'mailto:\'+', // jshint ignore:line
+                                    protectEmailAddressAsEncodedString( address )
+                                ];
+                                // parameters are optional.
+                                argList && linkHref.push( '+\'', escapeSingleQuote( argList ), '\'' );
+
+                                linkHref.push( ')' );
+                            } else {
+                                linkHref = [ 'mailto:', address, argList ];
+                            }
+
+                            break;
+                        default:
+                            // Separating name and domain.
+                            var nameAndDomain = address.split( '@', 2 );
+                            email.name = nameAndDomain[ 0 ];
+                            email.domain = nameAndDomain[ 1 ];
+
+                            linkHref = [ 'javascript:', protectEmailLinkAsFunction( editor, email ) ]; // jshint ignore:line
+                    }
+
+                    set[ 'data-cke-saved-href' ] = linkHref.join( '' );
+                    break;
+            }
+
+            // Popups and target.
+            if ( data.target ) {
+                if ( data.target.type == 'popup' ) {
+                    var onclickList = [
+                            'window.open(this.href, \'', data.target.name || '', '\', \''
+                        ],
+                        featureList = [
+                            'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', 'scrollbars', 'dependent'
+                        ],
+                        featureLength = featureList.length,
+                        addFeature = function( featureName ) {
+                            if ( data.target[ featureName ] )
+                                featureList.push( featureName + '=' + data.target[ featureName ] );
+                        };
+
+                    for ( var i = 0; i < featureLength; i++ )
+                        featureList[ i ] = featureList[ i ] + ( data.target[ featureList[ i ] ] ? '=yes' : '=no' );
+
+                    addFeature( 'width' );
+                    addFeature( 'left' );
+                    addFeature( 'height' );
+                    addFeature( 'top' );
+
+                    onclickList.push( featureList.join( ',' ), '\'); return false;' );
+                    set[ 'data-cke-pa-onclick' ] = onclickList.join( '' );
+                }
+                else if ( data.target.type != 'notSet' && data.target.name ) {
+                    set.target = data.target.name;
+                }
+            }
+
+            // Advanced attributes.
+            if ( data.advanced ) {
+                for ( var a in advAttrNames ) {
+                    var val = data.advanced[ advAttrNames[ a ] ];
+
+                    if ( val )
+                        set[ a ] = val;
+                }
+
+                if ( set.name )
+                    set[ 'data-cke-saved-name' ] = set.name;
+            }
+
+            // Browser need the "href" fro copy/paste link to work. (#6641)
+            if ( set[ 'data-cke-saved-href' ] )
+                set.href = set[ 'data-cke-saved-href' ];
+
+            var removed = CKEDITOR.tools.extend( {
+                target: 1,
+                onclick: 1,
+                'data-cke-pa-onclick': 1,
+                'data-cke-saved-name': 1
+            }, advAttrNames );
+
+            // Remove all attributes which are not currently set.
+            for ( var s in set )
+                delete removed[ s ];
+
+            return {
+                set: set,
+                removed: CKEDITOR.tools.objectKeys( removed )
+            };
+        }
+    };
+
+// TODO Much probably there's no need to expose these as public objects.
+
+CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('wblink')+'pages.php');
+
+CKEDITOR.unlinkCommand = function() {};
+CKEDITOR.unlinkCommand.prototype = {
+        exec: function( editor ) {
+            var style = new CKEDITOR.style( { element:'a',type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1 } );
+            editor.removeStyle( style );
+        },
+
+        refresh: function( editor, path ) {
+            // Despite our initial hope, document.queryCommandEnabled() does not work
+            // for this in Firefox. So we must detect the state by element paths.
+
+            var element = path.lastElement && path.lastElement.getAscendant( 'a', true );
+
+            if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) && element.getChildCount() )
+                this.setState( CKEDITOR.TRISTATE_OFF );
+            else
+                this.setState( CKEDITOR.TRISTATE_DISABLED );
+        },
+
+        contextSensitive: 1,
+        startDisabled: 1,
+        requiredContent: 'a[href]'
+    };
+
+    CKEDITOR.removeAnchorCommand = function() {};
+    CKEDITOR.removeAnchorCommand.prototype = {
+        exec: function( editor ) {
+            var sel = editor.getSelection(),
+                bms = sel.createBookmarks(),
+                anchor;
+            if ( sel && ( anchor = sel.getSelectedElement() ) && ( !anchor.getChildCount() ? CKEDITOR.plugins.wblink.tryRestoreFakeAnchor( editor, anchor ) : anchor.is( 'a' ) ) )
+                anchor.remove( 1 );
+            else {
+                if ( ( anchor = CKEDITOR.plugins.wblink.getSelectedLink( editor ) ) ) {
+                    if ( anchor.hasAttribute( 'href' ) ) {
+                        anchor.removeAttributes( { name:1,'data-cke-saved-name':1 } );
+                        anchor.removeClass( 'cke_anchor' );
+                    } else
+                        anchor.remove( 1 );
+                }
+            }
+            sel.selectBookmarks( bms );
+        },
+        requiredContent: 'a[name]'
+    };
+
+    CKEDITOR.tools.extend( CKEDITOR.config, {
+        /**
+         * Whether to show the Advanced tab in the Link dialog window.
+         *
+         * @cfg {Boolean} [linkShowAdvancedTab=true]
+         * @member CKEDITOR.config
+         */
+        linkShowAdvancedTab: true,
+
+        /**
+         * Whether to show the Target tab in the Link dialog window.
+         *
+         * @cfg {Boolean} [linkShowTargetTab=true]
+         * @member CKEDITOR.config
+         */
+        linkShowTargetTab: true
+
+            /**
+             * Whether JavaScript code is allowed as a `href` attribute in an anchor tag.
+             * With this option enabled it is possible to create links like:
+             *
+             *        <a href="javascript:alert('Hello world!')">hello world</a>
+             *
+             * By default JavaScript links are not allowed and will not pass
+             * the Link dialog window validation.
+             *
+             * @since 4.4.1
+             * @cfg {Boolean} [linkJavaScriptLinksAllowed=false]
+             * @member CKEDITOR.config
+             */
+    } );
+} )();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/bg.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wbrelation', 'bg',
+{
+        title : 'Relationship (rel=)',
+        advisoryTitle : 'Advisory Title',
+        cssClasses    : 'Stylesheet Classes',
+        rel : 'Relationship (rel=)',
+        noUrl : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ca.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'ca', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/cs.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'cs', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/da.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'da', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/de.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wbrelation', 'de',
+{
+    title         : 'Beziehung (rel=)',
+    advisoryTitle : 'Titel Beschreibung',
+    cssClasses    : 'Stylesheet Klasse',
+    rel           : 'Beziehung (rel=)',
+    noUrl         : 'Bitte geben Sie die Link-URL an'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/en.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'en', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/es.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'es', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/et.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'et', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fi.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'fi', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/fr.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'fr', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hr.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'hr', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/hu.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'hu', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/it.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'it', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/lv.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'lv', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/nl.js	(revision 2)
@@ -0,0 +1,12 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wbrelation', 'nl',
+{
+        title : 'Relationship (rel=)',
+        advisoryTitle : 'Advisory Title',
+        cssClasses    : 'Stylesheet Classes',
+        rel : 'Relationship (rel=)',
+        noUrl : 'Geef a.u.b. de URL op'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/no.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'no', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pl.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'pl', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/pt.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'pt', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/ru.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'ru', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/se.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/se.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/se.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'sv', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/sk.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'sk', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/lang/tr.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbrelation', 'tr', {
+    title         : 'Relationship (rel=)',
+    advisoryTitle : 'Advisory Title',
+    cssClasses    : 'Stylesheet Classes',
+    rel           : 'Relationship (rel=)',
+    noUrl         : 'Please type the link URL'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbrelation/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbrelation/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbrelation/plugin.js	(revision 2)
@@ -0,0 +1,241 @@
+﻿/**
+ *
+ * @category        ckeditor
+ * @package         image
+ * @author          WebsiteBaker Project, Luisehahne
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.9.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id: plugin.js 65 2017-03-03 21:38:16Z manu $
+ * @filesource      $HeadURL: svn://isteam.dynxs.de/wb2.10/branches/wb/modules/ckeditor/ckeditor/plugins/wbrelation/plugin.js $
+ * @lastmodified    $Date: 2017-03-03 22:38:16 +0100 (Fr, 03. Mrz 2017) $
+ *
+ */
+( function()
+{
+    CKEDITOR.plugins.add( 'wbrelation',
+    {
+        lang : 
+        [
+            CKEDITOR.config.defaultLanguage,
+            CKEDITOR.lang.detect(CKEDITOR.config.language )
+        ]
+//     lang : ['en','de','nl'],
+    }, //lang
+    {
+        init : function( editor )
+        {
+            // It doesn't add commands, buttons or dialogs, it doesn't do anything here
+//                 console.log( editor);
+        } //Init
+
+    } );
+//        editor.on( 'change', function(e) { console.log( e ) });
+
+    CKEDITOR.on( 'dialogDefinition', function( ev )
+    {
+        var dialog = ev.data,
+            dialogName = dialog.name,
+            dialogDefinition = dialog.definition,
+            editor = ev.editor,
+            lang = editor.lang.wbrelation;
+
+    // editor.on( 'commit', function(ev) { console.log( ev ) });
+console.info( lang ) ;
+        var IMAGE = 1,
+            LINK = 2,
+            PREVIEW = 4,
+            CLEANUP = 8,
+            regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i,
+            regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i,
+            pxLengthRegex = /^\d+px$/;
+
+        function var_dump(obj) {
+// console.log( obj ) ;
+            if(typeof obj == "object") {
+                return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
+            } else {
+                return "Type: "+typeof(obj)+"\nValue: "+obj;
+            }
+        }
+
+           function getSelectedLink( editor )
+           {
+               try
+               {
+                   var selection = editor.getSelection();
+                   if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT )
+                   {
+                       var selectedElement = selection.getSelectedElement();
+                       if ( selectedElement.is( 'a' ) )
+                           return selectedElement;
+                   }
+
+                   var range = selection.getRanges( true )[ 0 ];
+                   range.shrink( CKEDITOR.SHRINK_TEXT );
+                   var root = range.getCommonAncestor();
+                   return root.getAscendant( 'a', true );
+               }
+               catch( e ) { return null; }
+           }
+
+        if ( (dialogName == 'image') )
+        {
+            var linkTab = dialogDefinition.getContents('Link');
+            var advTab = dialogDefinition.getContents('advanced');
+            var cssField = advTab.get( 'txtGenClass' ); //CSS Classes
+            cssField['default'] = 'img-responsive';
+
+//console.log( cssField );
+//console.info( this );
+
+            linkTab.add (
+            {
+                type : 'vbox',
+                padding : 0,
+                children :
+                [
+
+                    {
+                        type : 'hbox',
+                        widths : [ '40%', '60%' ],
+                        style : 'margin-top:10px;',
+                        children :
+                        [
+                            {
+                                type : 'text',
+                                label : editor.lang.wbrelation.rel,
+                                'default' : '',
+                                id : 'cmbRel',
+                                setup : function()
+                                {
+//    console.log( CKEDITOR.config.language ) ;
+                                    var link = getSelectedLink( editor );
+                                    if(link) {
+                                        this.setValue( link.getAttribute( 'rel' ) || '' );
+                                        var d = CKEDITOR.dialog.getCurrent();
+                                        var LinkField = d.getContentElement( 'Link', 'txtUrl' ),
+                                            orgLinkField = LinkField.getValue(),
+                                            RelObj = d.getContentElement( 'Link', 'cmbRel' );
+                                        var RelValue = RelObj.getValue('cmbRel');
+                                       if(orgLinkField != '' && RelObj.getValue('cmbRel') != '') {
+
+                                        }
+                                    }
+                                },
+                                onChange : function ()
+                                {
+
+                                },
+                                //commit : function( element )
+                                commit : function( type, element )
+                                {
+                                    this.linkElement = this.getDialog().linkElement;
+                                    if ( this.linkElement ) {
+//console.info( this.linkElement );
+                                        this.linkElement.setAttribute( 'rel', this.getValue() );
+                                        if ( type == LINK && ( this.getValue() || this.isChanged() ) ) {
+                                           this.linkElement.setAttribute( 'rel', this.getValue() );
+                                        }
+                                        if ( this.getValue() === '' ) {
+                                            this.linkElement.removeAttribute( 'rel' );
+                                        }
+                                    }
+                                }
+                            },
+
+                            {
+                                type : 'text',
+                                label : editor.lang.wbrelation.cssClasses,
+                                'default' : 'colorbox',
+                                id : 'cmbClass',
+                                setup : function()
+                                {
+                                    var link = getSelectedLink( editor );
+                                    var element = editor.getSelection().getStartElement();
+                                    var element = element.getParent();
+                                    if ( element.getName() == 'a' )
+                                    {
+                                        this.setValue( link.getAttribute( 'class' ) || '' );
+
+                                        var d = CKEDITOR.dialog.getCurrent();
+                                        var LinkField = d.getContentElement( 'Link', 'txtUrl' ),
+                                            orgLinkField = LinkField.getValue(),
+                                            TitleObj = d.getContentElement( 'Link', 'cmbClass' );
+                                        if(orgLinkField != '' && TitleObj.getValue() != '') {
+                                        }
+                                    }
+                                },
+                                onChange : function ()
+                                {
+                                },
+                                //commit : function(  data, selectedElement  )
+                                commit : function( type, element )
+                                {
+                                    this.linkElement = this.getDialog().linkElement;
+                                    if ( this.linkElement ) {
+                                        this.linkElement.setAttribute( 'class', this.getValue() );
+                                        if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) {
+                                            this.linkElement.setAttribute( 'class', this.getValue() );
+                                        }
+                                        if ( this.getValue() === '' ) {
+                                            this.linkElement.removeAttribute( 'class' );
+                                        }
+                                    }
+                                }
+                            }
+                        ]
+                    },
+
+                    {
+                        type : 'hbox',
+                        widths : [ '50%', '50%' ],
+                           style : 'margin-top:10px;',
+                        children :
+                        [
+                            {
+                                type : 'text',
+                                label : editor.lang.wbrelation.advisoryTitle,
+                                'default' : '',
+                                id : 'cmbTitle',
+                                setup : function()
+                                {
+                                    var link = getSelectedLink( editor );
+                                    if(link) {
+                                        this.setValue( link.getAttribute( 'title' ) || '' );
+                                        var d = CKEDITOR.dialog.getCurrent();
+                                        var LinkField = d.getContentElement( 'Link', 'txtUrl' ),
+                                            orgLinkField = LinkField.getValue(),
+                                            TitleObj = d.getContentElement( 'Link', 'cmbTitle' );
+                                        if(orgLinkField != '' && TitleObj.getValue() != '') {
+                                        }
+                                    }
+                                },
+                                    onChange : function ()
+                                {
+                                },
+                            //commit : function( element )
+                                commit : function( type, element )
+                                {
+                                    this.linkElement = this.getDialog().linkElement;
+                                    if ( this.linkElement ) {
+                                        this.linkElement.setAttribute( 'title', this.getValue() );
+                                        if ( this.getValue() != '' ) {
+                                            this.linkElement.setAttribute( 'title', this.getValue() );
+                                        } else {
+                                            this.linkElement.removeAttribute( 'title' );
+                                        }
+                                    }
+                                }
+                            }
+                        ]
+                    },
+                ]
+            });
+        }
+    });
+})();
+
+
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/__plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/__plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/__plugin.js	(revision 2)
@@ -0,0 +1,73 @@
+﻿/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The Save plugin.
+ */
+
+(function() {
+    var wbsaveCmd = {
+        readOnly: 1,
+
+        exec: function( editor ) {
+            if ( editor.fire( 'save' ) ) {
+        var $form = editor.element.$.form;
+                if ( $form ) {
+                    try {
+                        $form.submit();
+                    } catch ( e ) {
+                        // If there's a button named "submit" then the form.submit
+                        // function is masked and can't be called in IE/FF, so we
+                        // call the click() method of that button.
+                        if ( $form.submit.click )
+                            $form.submit.click();
+                    }
+                }
+            }
+        }
+    };
+
+    var pluginName = 'wbsave';
+
+    // Register a plugin named "wbsave".
+    CKEDITOR.plugins.add( pluginName, {
+        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+        icons: 'wbsave', // %REMOVE_LINE_CORE%
+        hidpi: true, // %REMOVE_LINE_CORE%
+        init: function( editor ) {
+            // Save plugin is for replace mode only.
+            if ( editor.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE )
+                return;
+
+            var command = editor.addCommand( pluginName, wbsaveCmd );
+            command.modes = { wysiwyg: !!( editor.element.$.form ) };
+
+            editor.ui.addButton && editor.ui.addButton( 'wbSave', {
+                label: editor.lang.wbsave.toolbar,
+                command: pluginName,
+                toolbar: 'document,10'
+            });
+            var $form = editor.element.$.form;
+            if ( $("#dummy_iframe").length == 0 ) {
+            var ifrm = document.createElement('iframe');
+              ifrm.setAttribute('style','display: none;');
+              ifrm.setAttribute('id','dummy_iframe');
+              ifrm.setAttribute('name','dummy_iframe');
+              $form.parentNode.appendChild(ifrm);
+            }  
+          $form.target = 'dummy_iframe';        
+        }
+    });
+})();
+
+/**
+ * Fired when the user clicks the Save button on the editor toolbar.
+ * This event allows to overwrite the default Save button behavior.
+ *
+ * @since 4.2
+ * @event save
+ * @member CKEDITOR.editor
+ * @param {CKEDITOR.editor} editor This editor instance.
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.js	(revision 2)
@@ -0,0 +1,3 @@
+var iBox=function(){var _pub={close_label:"Close",inherit_frames:false,fade_in_speed:200,fade_out_speed:200,attribute_name:"rel",tags_to_hide:["select","embed","object"],default_width:450,version_number:"2.2",build_number:"1612",is_opera:navigator.userAgent.indexOf("Opera/9")!=-1,is_ie:navigator.userAgent.indexOf("MSIE ")!=-1,is_ie6:false
+/*@cc_on || @_jscript_version < 5.7 @*/
+,is_firefox:navigator.appName=="Netscape"&&navigator.userAgent.indexOf("Gecko")!=-1&&navigator.userAgent.indexOf("Netscape")==-1,is_mac:navigator.userAgent.indexOf("Macintosh")!=-1,base_url:"",setPath:function(path){_pub.base_url=path},checkTags:function(container,tag_name){if(!container){var container=document.body}if(!tag_name){var tag_name="a"}var els=container.getElementsByTagName(tag_name);for(var i=0;i<els.length;i++){if(els[i].getAttribute(_pub.attribute_name)){var t=els[i].getAttribute(_pub.attribute_name);if((t.indexOf("ibox")!=-1)||t.toLowerCase()=="ibox"){els[i].onclick=_pub.handleTag}}}},bind:function(fn){var args=[];for(var n=1;n<arguments.length;n++){args.push(arguments[n])}return function(e){return fn.apply(this,[e].concat(args))}},html:function(content,params){if(content===undefined){return els.content}if(params===undefined){var params={}}if(!active.is_loaded){return }_pub.clear();_pub.updateObject(els.wrapper.style,{display:"block",visibility:"hidden",left:0,top:0,height:"",width:""});if(typeof (content)=="string"){els.content.innerHTML=content}else{els.content.appendChild(content)}var pagesize=_pub.getPageSize();if(params.can_resize===undefined){params.can_resize=true}if(params.fade_in===undefined){params.use_fade=true}if(params.fullscreen){params.width="100%";params.height="100%"}offset.container=[els.wrapper.offsetLeft*2,els.wrapper.offsetTop*2];offset.wrapper=[els.wrapper.offsetWidth-els.content.offsetWidth,els.wrapper.offsetHeight-els.content.offsetHeight];offset.wrapper[1]+=4;if(params.width){var width=params.width}else{var width=_pub.default_width}if(params.height){var height=params.height}else{els.content.style.height="100%";var height=els.content.offsetHeight+12;els.content.style.height=""}active.dimensions=[width,height];active.params=params;_pub.reposition();for(var i=0;i<_pub.tags_to_hide.length;i++){showTags(_pub.tags_to_hide[i],els.content)}els.wrapper.style.visibility="visible"},clear:function(){els.loading.style.display="none";while(els.content.firstChild){els.content.removeChild(els.content.firstChild)}},show:function(text,title,params){showInit(title,params,function(){_pub.html(text,active.params)})},showURL:function(url,title,params){showInit(title,params,function(){for(var i=0;i<_pub.plugins.list.length;i++){var plugin=_pub.plugins.list[i];if(plugin.match(url)){active.plugin=plugin;plugin.render(url,active.params);break}}})},hide:function(){if(active.plugin){if(active.plugin.unload){active.plugin.unload()}}active={};_pub.clear();for(var i=0;i<_pub.tags_to_hide.length;i++){showTags(_pub.tags_to_hide[i])}els.loading.style.display="none";els.wrapper.style.display="none";_pub.fade(els.overlay,_pub.getOpacity(null,els.overlay),0,_pub.fade_out_speed,function(){els.overlay.style.display="none"});_pub.fireEvent("hide")},reposition:function(){if(!active.is_loaded){return }if(els.loading.style.display!="none"){_pub.center(els.loading)}if(active.dimensions){var pagesize=_pub.getPageSize();var width=active.dimensions[0];var height=active.dimensions[1];if(height.toString().indexOf("%")!=-1){els.wrapper.style.height=(Math.max(document.documentElement.clientHeight,document.body.clientHeight,pagesize.height)-offset.container[0])*(parseInt(height)/100)+"px"}else{if(height){els.content.style.height=height+"px";els.wrapper.style.height=els.content.offsetHeight+offset.wrapper[1]+"px"}else{els.wrapper.style.height=els.content.offsetHeight+offset.wrapper[1]+"px"}}var container_offset=(els.content.offsetHeight-els.content.firstChild.offsetHeight);if(width.toString().indexOf("%")!=-1){els.wrapper.style.width=(Math.max(document.documentElement.clientWidth,document.body.clientWidth,pagesize.width)-offset.container[1])*(parseInt(width)/100)+"px";var container_offset=0}else{els.content.style.width=width+"px";els.wrapper.style.width=els.content.offsetWidth+offset.wrapper[0]+"px"}_pub.updateObject(els.content.style,{width:"",height:""});var width=parseInt(els.wrapper.style.width);var height=parseInt(els.wrapper.style.height);if(active.params.can_resize){var x=pagesize.width;var y=pagesize.height;x-=offset.container[0];y-=offset.container[1];if(width>x){if(active.params.constrain){height=height*(x/width)}width=x}if(height>y){if(active.params.constrain){width=width*(y/height)}height=y}_pub.updateObject(els.wrapper.style,{width:width+"px",height:height+"px"})}els.content.style.height=height-offset.wrapper[1]+"px";if(active.dimensions!=["100%","100%"]){_pub.center(els.wrapper)}}els.overlay.style.height=Math.max(document.body.clientHeight,document.documentElement.clientHeight)+"px"},updateObject:function(obj,params){for(var i in params){obj[i]=params[i]}},center:function(obj){var pageSize=_pub.getPageSize();var scrollPos=_pub.getScrollPos();var emSize=_pub.getElementSize(obj);var x=Math.round((pageSize.width-emSize.width)/2+scrollPos.scrollX);var y=Math.round((pageSize.height-emSize.height)/2+scrollPos.scrollY);if(obj.offsetLeft){x-=obj.offsetLeft}if(obj.offsetTop){y-=obj.offsetTop}if(obj.style.left){x+=parseInt(obj.style.left)}if(obj.style.top){y+=parseInt(obj.style.top)}x-=10;_pub.updateObject(obj.style,{top:y+"px",left:x+"px"})},getStyle:function(obj,styleProp){if(obj.currentStyle){return obj.currentStyle[styleProp]}else{if(window.getComputedStyle){return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp)}}},getScrollPos:function(){var docElem=document.documentElement;return{scrollX:document.body.scrollLeft||window.pageXOffset||(docElem&&docElem.scrollLeft),scrollY:document.body.scrollTop||window.pageYOffset||(docElem&&docElem.scrollTop)}},getPageSize:function(){return{width:window.innerWidth||(document.documentElement&&document.documentElement.clientWidth)||document.body.clientWidth,height:window.innerHeight||(document.documentElement&&document.documentElement.clientHeight)||document.body.clientHeight}},getElementSize:function(obj){return{width:obj.offsetWidth||obj.style.pixelWidth,height:obj.offsetHeight||obj.style.pixelHeight}},fade:function(obj,start,end,speed,callback){if(start===undefined||!(start>=0)||!(start<=100)){var start=0}if(end===undefined||!(end>=0)||!(end<=100)){var end=100}if(speed===undefined){var speed=0}if(obj.fader){clearInterval(obj.fader)}if(!speed){_pub.setOpacity(null,obj,end);if(callback){callback()}}var opacity_difference=end-start;var time_total=speed;var step_size=25;var steps=time_total/step_size;var increment=Math.ceil(opacity_difference/steps);obj.fader=setInterval(_pub.bind(function(e,obj,increment,end,callback){var opacity=_pub.getOpacity(e,obj)+increment;_pub.setOpacity(e,obj,opacity);if((increment<0&&opacity<=end)||(increment>0&&opacity>=end)){_pub.setOpacity(e,obj,end);clearInterval(obj.fader);if(callback){callback()}}},obj,increment,end,callback),step_size)},setOpacity:function(e,obj,value){value=Math.round(value);obj.style.opacity=value/100;obj.style.filter="alpha(opacity="+value+")"},getOpacity:function(e,obj){return _pub.getStyle(obj,"opacity")*100},createXMLHttpRequest:function(){var http;if(window.XMLHttpRequest){http=new XMLHttpRequest();if(http.overrideMimeType){http.overrideMimeType("text/html")}}else{if(window.ActiveXObject){try{http=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{http=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}}}if(!http){alert("Cannot create XMLHTTP instance");return false}return http},addEvent:function(obj,evType,fn){if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true}else{if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r}else{return false}}},addEventListener:function(name,callback){if(!events[name]){events[name]=new Array()}events[name].push(callback)},fireEvent:function(name){if(events[name]&&events[name].length){for(var i=0;i<events[name].length;i++){var args=[];for(var n=1;n<arguments.length;n++){args.push(arguments[n])}if(events[name][i](args)===false){break}}}},parseQuery:function(query){var params=new Object();if(!query){return params}var pairs=query.split(/[;&]/);var end_token;for(var i=0;i<pairs.length;i++){var keyval=pairs[i].split("=");if(!keyval||keyval.length!=2){continue}var key=unescape(keyval[0]);var val=unescape(keyval[1]);val=val.replace(/\+/g," ");if(val[0]=='"'){var token='"'}else{if(val[0]=="'"){var token="'"}else{var token=null}}if(token){if(val[val.length-1]!=token){do{i+=1;val+="&"+pairs[i]}while((end_token=pairs[i][pairs[i].length-1])!=token)}val=val.substr(1,val.length-2)}if(val=="true"){val=true}else{if(val=="false"){val=false}else{if(val=="null"){val=null}}}params[key]=val}return params},handleTag:function(e){var t=this.getAttribute("rel");var params=_pub.parseQuery(t.substr(5,999));if(params.target){var url=params.target}else{if(this.target&&!params.ignore_target){var url=this.target}else{var url=this.href}}var title=this.title;if(_pub.inherit_frames&&window.parent){window.parent.iBox.showURL(url,title,params)}else{_pub.showURL(url,title,params)}return false},plugins:{list:new Array(),register:function(func,last){if(last===undefined){var last=false}if(!last){_pub.plugins.list=[func].concat(_pub.plugins.list)}else{_pub.plugins.list.push(func)}}}};var active={};var events={};var els={};var offset={};var create=function(elem){pagesize=_pub.getPageSize();els.container=document.createElement("div");els.container.id="ibox";els.overlay=document.createElement("div");els.overlay.style.display="none";_pub.setOpacity(null,els.overlay,0);if(!_pub.is_firefox){els.overlay.style.background="#000000"}else{els.overlay.style.backgroundImage="url('"+_pub.base_url+"images/bg.png')"}els.overlay.id="ibox_overlay";params={position:"absolute",top:0,left:0,width:"100%"};_pub.updateObject(els.overlay.style,params);els.overlay.onclick=_pub.hide;els.container.appendChild(els.overlay);els.loading=document.createElement("div");els.loading.id="ibox_loading";els.loading.innerHTML="Loading...";els.loading.style.display="none";els.loading.onclick=_pub.hide;els.container.appendChild(els.loading);els.wrapper=document.createElement("div");els.wrapper.id="ibox_wrapper";_pub.updateObject(els.wrapper.style,{position:"absolute",top:0,left:0,display:"none"});els.content=document.createElement("div");els.content.id="ibox_content";_pub.updateObject(els.content.style,{overflow:"auto"});els.wrapper.appendChild(els.content);var child=document.createElement("div");child.id="ibox_footer_wrapper";var child2=document.createElement("a");child2.innerHTML=_pub.close_label;child2.href="javascript:void(0)";child2.onclick=_pub.hide;child.appendChild(child2);els.footer=document.createElement("div");els.footer.id="ibox_footer";els.footer.innerHTML="&nbsp;";child.appendChild(els.footer);els.wrapper.appendChild(child);els.container.appendChild(els.wrapper);elem.appendChild(els.container);_pub.updateObject(els.wrapper.style,{right:"",bottom:""});return els.container};var hideTags=function(tag,container){if(container===undefined){var container=document.body}var list=container.getElementsByTagName(tag);for(var i=0;i<list.length;i++){if(_pub.getStyle(list[i],"visibility")!="hidden"&&list[i].style.display!="none"){list[i].style.visibility="hidden";list[i].wasHidden=true}}};var showTags=function(tag,container){if(container===undefined){var container=document.body}var list=container.getElementsByTagName(tag);for(var i=0;i<list.length;i++){if(list[i].wasHidden){list[i].style.visibility="visible";list[i].wasHidden=null}}};var showInit=function(title,params,callback){if(!_initialized){initialize()}if(params===undefined){var params={}}if(active.plugin){_pub.hide()}active.is_loaded=true;active.params=params;els.loading.style.display="block";_pub.center(els.loading);_pub.reposition();for(var i=0;i<_pub.tags_to_hide.length;i++){hideTags(_pub.tags_to_hide[i])}els.footer.innerHTML=title||"&nbsp;";els.overlay.style.display="block";if(!_pub.is_firefox){var amount=70}else{var amount=100}_pub.fade(els.overlay,_pub.getOpacity(null,els.overlay),amount,_pub.fade_in_speed,callback);_pub.fireEvent("show")};var drawCSS=function(){var core_styles="#ibox {z-index:1000000;text-align:left;} #ibox_overlay {z-index:1000000;} #ibox_loading {position:absolute;z-index:1000001;} #ibox_wrapper {margin:30px;position:absolute;top:0;left:0;z-index:1000001;} #ibox_content {z-index:1000002;margin:27px 5px 5px 5px;padding:2px;} #ibox_content object {display:block;} #ibox_content .ibox_image {width:100%;height:100%;margin:0;padding:0;border:0;display:block;} #ibox_footer_wrapper a {float:right;display:block;outline:0;margin:0;padding:0;} #ibox_footer_wrapper {text-align:left;position:absolute;top:5px;right:5px;left:5px;white-space:nowrap;overflow:hidden;}";var default_skin="#ibox_footer_wrapper {font-weight:bold;height:20px;line-height:20px;} #ibox_footer_wrapper a {text-decoration:none;background:#888;border:1px solid #666;line-height:16px;padding:0 5px;color:#333;font-weight:bold;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:10px;} #ibox_footer_wrapper a:hover {background-color:#bbb;color:#111;} #ibox_footer_wrapper {font-size:12px;font-family:Verdana, Arial, Helvetica, sans-serif;color:#111;} #ibox_wrapper {border:1px solid #ccc;} #ibox_wrapper {background-color:#999;}#ibox_content {background-color:#eee;border:1px solid #666;} #ibox_loading {padding:50px; background:#000;color:#fff;font-size:16px;font-weight:bold;}";var head=document.getElementsByTagName("head")[0];var htmDiv=document.createElement("div");htmDiv.innerHTML='<p>x</p><style type="text/css">'+default_skin+"</style>";head.insertBefore(htmDiv.childNodes[1],head.firstChild);htmDiv.innerHTML='<p>x</p><style type="text/css">'+core_styles+"</style>";head.insertBefore(htmDiv.childNodes[1],head.firstChild)};var _initialized=false;var initialize=function(){if(_initialized){return }_initialized=true;drawCSS();var els=document.getElementsByTagName("script");var src;for(var i=0,el=null;(el=els[i]);i++){if(!(src=el.getAttribute("src"))){continue}src=src.split("?")[0];if(src.substr(src.length-8)=="/ibox.js"){_pub.setPath(src.substr(0,src.length-7));break}}create(document.body);_pub.checkTags(document.body,"a");_pub.http=_pub.createXMLHttpRequest();_pub.fireEvent("load")};_pub.addEvent(window,"keypress",function(e){if(e.keyCode==(window.event?27:e.DOM_VK_ESCAPE)){iBox.hide()}});_pub.addEvent(window,"resize",_pub.reposition);_pub.addEvent(window,"load",initialize);_pub.addEvent(window,"scroll",_pub.reposition);var iBoxPlugin_Container=function(){var was_error=false;var original_wrapper=null;return{match:function(url){return url.indexOf("#")!=-1},unload:function(){if(was_error){return }var elemSrc=_pub.html().firstChild;if(elemSrc){elemSrc.style.display="none";original_wrapper.appendChild(elemSrc)}},render:function(url,params){was_error=false;var elemSrcId=url.substr(url.indexOf("#")+1);var elemSrc=document.getElementById(elemSrcId);if(!elemSrc){was_error=true;_pub.html(document.createTextNode("There was an error loading the document."),params)}else{original_wrapper=elemSrc.parentNode;elemSrc.style.display="block";_pub.html(elemSrc,params)}}}}();_pub.plugins.register(iBoxPlugin_Container,true);var iBoxPlugin_Image=function(){var image_types=/\.jpg|\.jpeg|\.png|\.gif/gi;return{match:function(url){return url.match(image_types)},render:function(url,params){var img=document.createElement("img");img.onclick=_pub.hide;img.className="ibox_image";img.style.cursor="pointer";img.onload=function(){_pub.html(img,{width:this.width,height:this.height,constrain:true})};img.onerror=function(){_pub.html(document.createTextNode("There was an error loading the document."),params)};img.src=url}}}();_pub.plugins.register(iBoxPlugin_Image);var iBoxPlugin_YouTube=function(){var youtube_url=/(?:http:\/\/)?(?:www\d*\.)?(youtube\.(?:[a-z]+))\/(?:v\/|(?:watch(?:\.php)?)?\?(?:.+&)?v=)([^&]+).*/;return{match:function(url){return url.match(youtube_url)},render:function(url,params){var _match=url.match(youtube_url);var domain=_match[1];var id=_match[2];params.width=425;params.height=355;params.constrain=true;var html='<span><object width="100%" height="100%" style="overflow: hidden; display: block;"><param name="movie" value="http://www.'+domain+"/v/"+id+'"/><param name="wmode" value="transparent"/><embed src="http://www.'+domain+"/v/"+id+'" type="application/x-shockwave-flash" wmode="transparent" width="100%" height="100%"></embed></object></span>';_pub.html(html,params)}}}();_pub.plugins.register(iBoxPlugin_YouTube);var iBoxPlugin_Document=function(){return{match:function(url){return true},render:function(url,params){_pub.http.open("get",url,true);_pub.http.onreadystatechange=function(){if(_pub.http.readyState==4){if(_pub.http.status==200||_pub.http.status==0){_pub.html(_pub.http.responseText,params)}else{_pub.html(document.createTextNode("There was an error loading the document."),params)}}};_pub.http.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");try{_pub.http.send(null)}catch(ex){_pub.html(document.createTextNode("There was an error loading the document."),params)}}}}();_pub.plugins.register(iBoxPlugin_Document,true);return _pub}();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.src.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.src.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox.src.js	(revision 2)
@@ -0,0 +1,844 @@
+/**
+ * iBox 2.2 (Build 1612)
+ * For more info & download: http://www.ibegin.com/labs/ibox/
+ * Created as a part of the iBegin Labs Project - http://www.ibegin.com/labs/
+ * For licensing please see readme.html (MIT Open Source License)
+*/
+var iBox = function() {
+    var _pub = {
+        // label for the close link
+        close_label: 'Close',
+
+        // show iframed content in the parent window
+        // this *does not* work with #containers
+        inherit_frames: false,
+
+        // how fast to fade in the overlay/ibox (this is each step in ms)
+        fade_in_speed: 150,
+        fade_out_speed: 150,
+
+        // our attribute identifier for our iBox elements
+        attribute_name: 'rel',
+        
+        // tags to hide when we show our box
+        tags_to_hide: ['select', 'embed', 'object'],
+
+        // default width of the box (when displaying html only)
+        // height is calculated automatically
+        default_width: 500,
+
+        // public version number
+        version_number: '2.2',
+        // internal build number
+        build_number: '1612',
+
+        // browser checks        
+        is_opera: navigator.userAgent.indexOf('Opera/9') != -1,
+        is_ie: navigator.userAgent.indexOf("MSIE ") != -1,
+        is_ie6: false /*@cc_on || @_jscript_version < 5.7 @*/,
+        is_firefox: navigator.appName == "Netscape" && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1,
+        is_mac: navigator.userAgent.indexOf('Macintosh') != -1,
+
+        // url for including images/external files
+        base_url: '',
+        
+        /**
+         * Updates the base_url variable.
+         * @param {String} path Relative or absolute path to this file.
+         */
+        setPath: function(path) {
+            _pub.base_url = path;
+        },
+        
+        /**
+         * Checks a container for specified tags containing rel="ibox"
+         * @param {Object} container
+         * @param {String} tag_name
+         */
+        checkTags: function(container, tag_name) {
+            if (!container) var container = document.body;
+            if (!tag_name) var tag_name = 'a';
+            var els = container.getElementsByTagName(tag_name);
+            for (var i=0; i<els.length; i++) {
+                if (els[i].getAttribute(_pub.attribute_name)) {
+                    var t = els[i].getAttribute(_pub.attribute_name);
+                    if ((t.indexOf("ibox") != -1) || t.toLowerCase() == "ibox") { // check if this element is an iBox element
+                        els[i].onclick = _pub.handleTag;
+                    }
+                }
+            }
+        },
+        
+        /**
+         * Binds arguments to a callback function
+         */
+        bind: function(fn) {
+                var args = [];
+                for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
+                return function(e) { return fn.apply(this, [e].concat(args)); };
+        },
+
+        /**
+         * Sets the content of the ibox
+         * @param {String} content HTML content
+         * @param {Object} params
+         */
+        html: function(content, params) {
+            if (content === undefined) return els.content;
+            if (params === undefined) var params = {};
+            if (!active.is_loaded) return;
+            _pub.clear();
+
+            _pub.updateObject(els.wrapper.style, {display: 'block', visibility: 'hidden', left: 0, top: 0, height: '', width: ''});
+            
+            if (typeof(content) == 'string') els.content.innerHTML = content;
+            else els.content.appendChild(content);
+
+            var pagesize = _pub.getPageSize();
+
+            if (params.can_resize === undefined) params.can_resize = true;
+            if (params.fade_in === undefined) params.use_fade = true;
+
+            if (params.fullscreen) {
+                params.width = '100%';
+                params.height = '100%';
+            }
+            
+            // reset offsets
+            offset.container = [els.wrapper.offsetLeft*2, els.wrapper.offsetTop*2];
+            offset.wrapper = [els.wrapper.offsetWidth-els.content.offsetWidth, els.wrapper.offsetHeight-els.content.offsetHeight];
+
+            // TODO: remove the +4 when issue is solved with calculations
+            offset.wrapper[1] += 4;
+
+            if (params.width) var width = params.width;
+            else var width = _pub.default_width;
+
+            if (params.height) var height = params.height;
+            else {
+                els.content.style.height = '100%';
+                var height = els.content.offsetHeight + 12;
+                els.content.style.height = '';
+            }
+            active.dimensions = [width, height];
+            active.params = params;
+            _pub.reposition();
+
+            // XXX: Fix for inline containers which had elements that were hidden
+            for (var i=0; i<_pub.tags_to_hide.length; i++) {
+                showTags(_pub.tags_to_hide[i], els.content);
+            }
+
+            els.wrapper.style.visibility = 'visible';
+        },
+        
+        /**
+         * Empties the content of the iBox (also hides the loading indicator)
+         */
+        clear: function() {
+            els.loading.style.display = "none";
+            while (els.content.firstChild) els.content.removeChild(els.content.firstChild);
+        },
+        
+        /**
+         * Loads text into the ibox
+         * @param {String} text
+         * @param {String} title
+         * @param {Object} params
+         */
+        show: function(text, title, params) {
+            showInit(title, params, function() {
+                _pub.html(text, active.params);
+            });
+        },
+        /**
+         * Loads a url into the ibox
+         * @param {String} url
+         * @param {String} title
+         * @param {Object} params
+         */
+        showURL: function(url, title, params) {
+            showInit(title, params, function() {
+                for (var i=0; i<_pub.plugins.list.length; i++) {
+                    var plugin = _pub.plugins.list[i];
+                    if (plugin.match(url)) {
+                        active.plugin = plugin;
+                        plugin.render(url, active.params);
+                        break;
+                    }
+                }
+            });
+        },
+
+        /**
+         * Hides the iBox
+         */
+        hide: function() {
+            if (active.plugin) {
+                // call the plugins unload method
+                if (active.plugin.unload) active.plugin.unload();
+            }
+            active = {}
+            _pub.clear();
+            // restore elements that were hidden
+            for (var i=0; i<_pub.tags_to_hide.length; i++) showTags(_pub.tags_to_hide[i]);
+
+            els.loading.style.display = 'none';
+            els.wrapper.style.display = 'none';
+            _pub.fade(els.overlay, _pub.getOpacity(null, els.overlay), 0, _pub.fade_out_speed, function() { els.overlay.style.display = 'none';});
+            _pub.fireEvent('hide');
+        },
+
+        /**
+         * Repositions the iBox wrapper based on the params set originally.
+         */
+        reposition: function() {
+            if (!active.is_loaded) return;
+
+            // center loading box
+            if (els.loading.style.display != 'none') _pub.center(els.loading);
+            
+            // update ibox width/height/position
+            if (active.dimensions) {
+                var pagesize = _pub.getPageSize();
+
+                var width = active.dimensions[0];
+                var height = active.dimensions[1];
+                
+                if (height.toString().indexOf('%') != -1) {
+                    els.wrapper.style.height = (Math.max(document.documentElement.clientHeight, document.body.clientHeight, pagesize.height) - offset.container[0])*(parseInt(height)/100) + 'px';
+                }
+                else if (height) {
+                    els.content.style.height = height + 'px';
+                    // TODO: if we dont set wrapper height, it doesnt restrict the height and the box is fine
+                    // so offset.wrapper[1] must not be correct
+                    els.wrapper.style.height = els.content.offsetHeight + offset.wrapper[1] + 'px';
+                }
+                else {
+                    els.wrapper.style.height = els.content.offsetHeight + offset.wrapper[1] + 'px';
+                }
+                var container_offset = (els.content.offsetHeight - els.content.firstChild.offsetHeight);
+                if (width.toString().indexOf('%') != -1) {
+                    els.wrapper.style.width = (Math.max(document.documentElement.clientWidth, document.body.clientWidth, pagesize.width) - offset.container[1])*(parseInt(width)/100) + 'px';
+                    var container_offset = 0;
+                }
+                else {
+                    els.content.style.width = width + 'px';
+                    els.wrapper.style.width = els.content.offsetWidth + offset.wrapper[0] + 'px';
+                }
+
+                _pub.updateObject(els.content.style, {width: '', height: ''});
+
+                var width = parseInt(els.wrapper.style.width);
+                var height = parseInt(els.wrapper.style.height);
+
+                // if we can resize this, make sure it fits in our page bounds
+                if (active.params.can_resize) {
+                    var x = pagesize.width;
+                    var y = pagesize.height;
+                    
+                    x -= offset.container[0];
+                    y -= offset.container[1];
+                    if (width > x) {
+                        if (active.params.constrain) height = height * (x/width);
+                        width = x;
+                    }
+                    if (height > y) {
+                        if (active.params.constrain) width = width * (y/height);
+                        height = y;
+                    }
+                    _pub.updateObject(els.wrapper.style, {width: width + 'px', height: height + 'px'});
+                }
+
+                //els.content.style.width = width - offset.wrapper[0] + 'px';
+                // TODO: this isn't adjusting to the right height for containers that are smaller than the page height
+                // resize the wrappers height based on the content boxes height
+                // this needs to be height - ibox_content[margin+padding+border]
+                els.content.style.height = height - offset.wrapper[1] + 'px';
+                if (active.dimensions != ['100%', '100%']) _pub.center(els.wrapper);
+            }
+            
+            // fix overlay width/height (cant use css fixed on ie6 or fx or any
+            // browser really due to issues)
+            els.overlay.style.height = Math.max(document.body.clientHeight, document.documentElement.clientHeight) + 'px';
+        },
+
+        updateObject: function(obj, params) {
+            for (var i in params) obj[i] = params[i];
+        },
+
+        /**
+         * Centers an object
+         * @param {Object} obj
+         */
+        center: function(obj) {
+            var pageSize = _pub.getPageSize();
+            var scrollPos = _pub.getScrollPos();
+            var emSize = _pub.getElementSize(obj);
+            var x = Math.round((pageSize.width - emSize.width) / 2 + scrollPos.scrollX);
+            var y = Math.round((pageSize.height - emSize.height) / 2 + scrollPos.scrollY);
+            if (obj.offsetLeft) x -= obj.offsetLeft;
+            if (obj.offsetTop) y -= obj.offsetTop;
+            if (obj.style.left) x += parseInt(obj.style.left);
+            if (obj.style.top) y += parseInt(obj.style.top);
+            // this nearly centers it due to scrollbars
+            x -= 10;
+            _pub.updateObject(obj.style, {top: y + 'px', left: x + 'px'});
+        },
+        
+        getStyle: function(obj, styleProp) {
+            if (obj.currentStyle)
+                return obj.currentStyle[styleProp];
+            else if (window.getComputedStyle)
+                return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
+        },
+
+        /**
+         * Gets the scroll positions
+         */
+        getScrollPos: function() {
+            var docElem = document.documentElement;
+            return {
+                scrollX: document.body.scrollLeft || window.pageXOffset || (docElem && docElem.scrollLeft),
+                scrollY: document.body.scrollTop || window.pageYOffset || (docElem && docElem.scrollTop)
+            };
+        },
+
+        /**
+         * Gets the page constraints
+         */
+        getPageSize: function() {
+            return {
+                width: window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth,
+                height: window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight
+            };
+        },
+
+        /**
+         * Gets an objects offsets
+         * @param {Object} obj
+         */
+        getElementSize: function(obj) {
+            return {
+                width: obj.offsetWidth || obj.style.pixelWidth,
+                height: obj.offsetHeight || obj.style.pixelHeight
+            };
+        },
+        
+        fade: function(obj, start, end, speed, callback) {
+            if (start === undefined || !(start >= 0) || !(start <= 100)) var start = 0;
+            if (end === undefined || !(end >= 0) || !(end <= 100)) var end = 100;
+            if (speed === undefined) var speed = 0;
+
+            if (obj.fader) clearInterval(obj.fader);
+
+            if (!speed) {
+                _pub.setOpacity(null, obj, end);
+                if (callback) callback();
+            }
+            
+            var opacity_difference = end - start; 
+            var time_total = speed; // time is speed (jQuery compat)
+            var step_size = 25; // step size in ms
+            var steps = time_total / step_size; // total number of steps
+            var increment = Math.ceil(opacity_difference / steps); // how much to incr per step
+            
+            obj.fader = setInterval(_pub.bind(function(e, obj, increment, end, callback) {
+                var opacity = _pub.getOpacity(e, obj) + increment;
+                _pub.setOpacity(e, obj, opacity);
+                if ((increment < 0 && opacity <= end) || (increment > 0 && opacity >= end)) {
+                    _pub.setOpacity(e, obj, end);
+                    clearInterval(obj.fader);
+                    if (callback) callback();
+                }
+            }, obj, increment, end, callback), step_size);
+        },
+
+        /**
+         * Sets the opacity of an element
+         * @param {Object} obj
+         * @param {Integer} value
+         */
+        setOpacity: function(e, obj, value) {
+            value = Math.round(value);
+            obj.style.opacity = value/100;
+            obj.style.filter = 'alpha(opacity=' + value + ')';
+        },
+        
+        /**
+         * Gets the opacity of an element
+         * @param {Object} obj
+         * @return {Integer} value
+         */
+        getOpacity: function(e, obj) {
+            return _pub.getStyle(obj, 'opacity')*100;
+        },
+        
+        /**
+         * Creates a new XMLHttpRequest object based on browser
+         */
+        createXMLHttpRequest: function() {
+            var http;
+            if (window.XMLHttpRequest) { // Mozilla, Safari,...
+                http = new XMLHttpRequest();
+                if (http.overrideMimeType) {
+                    // set type accordingly to anticipated content type
+                    http.overrideMimeType('text/html');
+                }
+            }
+            else if (window.ActiveXObject) { // IE
+                try {
+                    http = new ActiveXObject("Msxml2.XMLHTTP");
+                } catch (e) {
+                    try {
+                        http = new ActiveXObject("Microsoft.XMLHTTP");
+                    } catch (e) {}
+                }
+            }
+            if (!http) {
+                alert('Cannot create XMLHTTP instance');
+                return false;
+            }
+            return http;
+        },
+        
+        addEvent: function(obj, evType, fn) {
+            if (obj.addEventListener) {
+                obj.addEventListener(evType, fn, false);
+                return true;
+            }
+            else if (obj.attachEvent) {
+                var r = obj.attachEvent("on"+evType, fn);
+                return r;
+            }
+            else {
+                return false;
+            }
+        },
+        
+        addEventListener: function(name, callback) {
+            if (!events[name]) events[name] = new Array();
+            events[name].push(callback);
+        },
+        
+        /**
+         * Causes all event listeners attached to `name` event to
+         * execute.
+         * @param {String} name Event name
+         */
+        fireEvent: function(name) {
+                if (events[name] && events[name].length) {
+                    for (var i=0; i<events[name].length; i++) {
+                        var args = [];
+                        for (var n=1; n<arguments.length; n++) args.push(arguments[n]);
+                        // Events returning false stop propagation
+                        if (events[name][i](args) === false) break;
+                    }
+                }
+        },
+        
+        /**
+         * Parses the arguments in the rel attribute
+         * @param {String} query
+         */
+        parseQuery: function(query) {
+             var params = new Object();
+             if (!query) return params; 
+             var pairs = query.split(/[;&]/);
+             var end_token;
+             for (var i=0; i<pairs.length; i++) {
+                    var keyval = pairs[i].split('=');
+                    if (!keyval || keyval.length != 2) continue;
+                    var key = unescape(keyval[0]);
+                    var val = unescape(keyval[1]);
+                    val = val.replace(/\+/g, ' ');
+                    if (val[0] == '"') var token = '"';
+                    else if (val[0] == "'") var token = "'";
+                    else var token = null;
+                    if (token) {
+                        if (val[val.length-1] != token) {
+                            do {
+                                i += 1;
+                                val += '&'+pairs[i];
+                            }
+                            while ((end_token = pairs[i][pairs[i].length-1]) != token)
+                        }
+                        val = val.substr(1, val.length-2);
+                    }
+                    if (val == 'true') val = true;
+                    else if (val == 'false') val = false;
+                    else if (val == 'null') val = null;
+                    params[key] = val;
+             }
+             return params;
+        },
+        /**
+         * Handles the onclick event for iBox anchors.
+         * @param {Event} e
+         */
+        handleTag: function(e) {
+            var t = this.getAttribute('rel');
+            var params = _pub.parseQuery(t.substr(5,999));
+            if (params.target) var url = params.target;
+            else if (this.target && !params.ignore_target) var url = this.target;
+            else var url = this.href;
+            var title = this.title;
+            if (_pub.inherit_frames && window.parent) window.parent.iBox.showURL(url, title, params);
+            else _pub.showURL(url, title, params);
+            return false;
+        },
+        
+        plugins: {
+            list: new Array(),
+            register: function(func, last) {
+                if (last === undefined) var last = false;
+                if (!last) {
+                    _pub.plugins.list = [func].concat(_pub.plugins.list);
+                }
+                else {
+                    _pub.plugins.list.push(func);
+                }
+            }
+        }
+    };
+    
+    // private methods and variables
+    var active = {};
+    
+    // events
+    var events = {};
+
+    // some containers
+    // we store these in memory instead of finding them each time
+    var els = {};
+    
+    var offset = {};
+
+    /**
+     * Creates the iBox container and appends it to an element
+     * @param {HTMLObject} elem Container to attach to
+     * @return {HTMLObject} iBox element
+     */
+    var create = function(elem) {
+        pagesize = _pub.getPageSize();
+console.info(pagesize);
+        // TODO: why isnt this using DOM tools
+        // a trick on just creating an ibox wrapper then doing an innerHTML on our root ibox element
+        els.container = document.createElement('div');
+        els.container.id = 'ibox';
+
+        els.overlay = document.createElement('div');
+        els.overlay.style.display = 'none';
+        _pub.setOpacity(null, els.overlay, 0);
+        // firefox mac has issues with opacity and flash
+        if (!_pub.is_firefox) els.overlay.style.background = '#000000';
+        else els.overlay.style.backgroundImage = "url('" + _pub.base_url + "images/bg.png')";
+        els.overlay.id = 'ibox_overlay';
+        params = {position: 'absolute', top: 0, left: 0, width: '100%'};
+        _pub.updateObject(els.overlay.style, params);
+        els.overlay.onclick = _pub.hide;
+        els.container.appendChild(els.overlay);
+
+        els.loading = document.createElement('div');
+        els.loading.id = 'ibox_loading';
+        els.loading.innerHTML = 'Loading...';
+        els.loading.style.display = 'none';
+        els.loading.onclick = _pub.hide
+        els.container.appendChild(els.loading);
+
+        els.wrapper = document.createElement('div')
+        els.wrapper.id = 'ibox_wrapper';
+        _pub.updateObject(els.wrapper.style, {position: 'absolute', top: 0, left: 0, display: 'none'});
+
+        els.content = document.createElement('div');
+        els.content.id = 'ibox_content';
+        _pub.updateObject(els.content.style, {overflow: 'auto'})
+        els.wrapper.appendChild(els.content);
+    
+        var child = document.createElement('div');
+        child.id = 'ibox_footer_wrapper';
+    
+        var child2 = document.createElement('a');
+        child2.innerHTML = _pub.close_label;
+        child2.href = 'javascript:void(0)';
+        child2.onclick = _pub.hide;
+        child.appendChild(child2);
+    
+        els.footer = document.createElement('div');
+        els.footer.id = 'ibox_footer';
+        els.footer.innerHTML = '&nbsp;';
+        child.appendChild(els.footer);
+        els.wrapper.appendChild(child);
+
+        els.container.appendChild(els.wrapper);
+
+        elem.appendChild(els.container);
+                
+        _pub.updateObject(els.wrapper.style, {right: '', bottom: ''});
+        
+        return els.container;
+    };
+    
+    /**
+     * Hides tags within the container
+     * @param {String} tag The name of the tag (e.g. 'a')
+     * @param {HTMLObject} container The container to restore tags within (defaults to document)
+     */
+    var hideTags = function(tag, container) {
+        if (container === undefined) var container = document.body;
+        var list = container.getElementsByTagName(tag);
+        for (var i=0; i<list.length; i++) {
+            if (_pub.getStyle(list[i], 'visibility') != 'hidden' && list[i].style.display != 'none') {
+                list[i].style.visibility = 'hidden';
+                list[i].wasHidden = true;
+            }
+        }
+    };
+    
+    /**
+     * Shows all previously hidden tags in a container.
+     * @param {String} tag The name of the tag (e.g. 'a')
+     * @param {HTMLObject} container The container to restore tags within (defaults to document)
+     */
+    var showTags = function(tag, container) {
+        if (container === undefined) var container = document.body;
+        var list = container.getElementsByTagName(tag);
+        for (var i=0; i<list.length; i++) {
+            if (list[i].wasHidden) {
+                list[i].style.visibility = 'visible';
+                list[i].wasHidden = null;
+            }
+        }
+    };
+    
+    var showInit = function(title, params, callback) {
+        if (!_initialized) initialize();
+        if (params === undefined) var params = {};
+        if (active.plugin) _pub.hide();
+
+        active.is_loaded = true;
+        active.params = params;
+        
+        els.loading.style.display = "block";
+        
+        _pub.center(els.loading);
+        _pub.reposition();
+
+        // hide tags
+        for (var i=0; i<_pub.tags_to_hide.length; i++) {
+            hideTags(_pub.tags_to_hide[i]);
+        }
+
+        // set title here
+        els.footer.innerHTML = title || "&nbsp;";
+
+        // setup background
+        els.overlay.style.display = "block";
+        
+        if (!_pub.is_firefox) var amount = 70;
+        else var amount = 100;
+        _pub.fade(els.overlay, _pub.getOpacity(null, els.overlay), amount, _pub.fade_in_speed, callback);
+        
+        _pub.fireEvent('show');
+    };
+    
+    var drawCSS = function() {
+        // Core CSS (positioning/etc)
+        var core_styles = "#ibox {z-index:1000000;text-align:left;}"+
+        " #ibox_overlay {z-index:1000000;}"+
+        " #ibox_loading {position:absolute;z-index:1000001;}"+
+        " #ibox_wrapper {margin:30px;position:absolute;top:0;left:0;z-index:1000001;}"+
+        " #ibox_content {z-index:1000002;margin:27px 5px 5px 5px;padding:2px;}"+
+        " #ibox_content object {display:block;}"
+        +" #ibox_content .ibox_image {width:100%;height:100%;margin:0;padding:0;border:0;display:block;}"+
+        " #ibox_footer_wrapper a {float:right;display:block;outline:0;margin:0;padding:0;}"+
+        " #ibox_footer_wrapper {text-align:left;position:absolute;top:5px;right:5px;left:5px;white-space:nowrap;overflow:hidden;}";
+        
+        // Default style/theme/skin/whatever
+        var default_skin = "#ibox_footer_wrapper {font-weight:bold;height:20px;line-height:20px;}"+
+        " #ibox_footer_wrapper a {text-decoration:none;background:#888;border:1px solid #666;line-height:16px;padding:0 5px;color:#333;font-weight:bold;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:10px;}"+
+        " #ibox_footer_wrapper a:hover {background-color:#bbb;color:#111;}"+
+        " #ibox_footer_wrapper {font-size:12px;font-family:Verdana, Arial, Helvetica, sans-serif;color:#111;}"+
+        " #ibox_wrapper {border:1px solid #ccc;}"+
+        " #ibox_wrapper {background-color:#9ABBEA;}#ibox_content {background-color:#eee;border:1px solid #666;} #ibox_loading {padding:50px; background:#000;color:#fff;font-size:16px;font-weight:bold;}"+
+        " #ibox_wrapper {background-image: linear-gradient(to bottom, #f8fbfd, #bfd7eb); border-bottom-color: #abc1d3;}";
+
+        var head = document.getElementsByTagName("head")[0];
+
+        // tricky hack for IE
+        // because IE doesn't like when you insert stuff the proper way
+        // and we cant use relative paths to include this as an external
+        // stylesheet
+        var htmDiv = document.createElement('div');
+
+        htmDiv.innerHTML = '<p>x</p><style type="text/css">'+default_skin+'</style>';
+        head.insertBefore(htmDiv.childNodes[1], head.firstChild);
+
+        htmDiv.innerHTML = '<p>x</p><style type="text/css">'+core_styles+'</style>';
+        head.insertBefore(htmDiv.childNodes[1], head.firstChild);
+    };
+
+    var _initialized = false;
+    var initialize = function() {
+        // make sure we haven't already done this
+        if (_initialized) return;
+        _initialized = true;
+        // elements here start the look up from the start non <a> tags
+        drawCSS();
+        var els = document.getElementsByTagName('script');
+        var src;
+        for (var i=0, el=null; (el = els[i]); i++) {
+            if (!(src = el.getAttribute('src'))) continue;
+            src = src.split('?')[0];
+            if (src.substr(src.length-8) == '/ibox.js') {
+                _pub.setPath(src.substr(0, src.length-7));
+                break;
+            }
+        }
+        create(document.body);
+        _pub.checkTags(document.body, 'a');
+        _pub.http = _pub.createXMLHttpRequest();
+        _pub.fireEvent('load');
+    };
+    
+    _pub.addEvent(window, 'keypress', function(e){ if (e.keyCode == (window.event ? 27 : e.DOM_VK_ESCAPE)) { iBox.hide(); }});
+    _pub.addEvent(window, 'resize', _pub.reposition);
+    _pub.addEvent(window, 'load', initialize);
+    _pub.addEvent(window, 'scroll', _pub.reposition);
+
+    // DEFAULT PLUGINS
+
+    /**
+     * Handles embedded containers in the page based on url of #container.
+     * This _ONLY_ works with hidden containers.
+     */
+    var iBoxPlugin_Container = function() {
+        var was_error = false;
+        var original_wrapper = null;
+        return {
+            /**
+             * Matches the url and returns true if it fits this plugin.
+             */
+            match: function(url) {
+                return url.indexOf('#') != -1;
+            },
+            /**
+             * Called when this plugin is unloaded.
+             */
+            unload: function() {
+                if (was_error) return;
+                var elemSrc = _pub.html().firstChild;
+                if (elemSrc) {
+                    elemSrc.style.display = 'none';
+                    original_wrapper.appendChild(elemSrc);
+                }
+            },
+            /**
+             * Handles the output
+             * @param {iBox} ibox
+             * @param {String} url
+             * @return {iBoxContent} an instance or subclass of iBoxContent
+             */
+            render: function(url, params) {
+                was_error = false;
+                var elemSrcId = url.substr(url.indexOf("#") + 1);
+                var elemSrc = document.getElementById(elemSrcId);
+                // If the element doesnt exist, break the switch
+                if (!elemSrc) {
+                    was_error = true;
+                    _pub.html(document.createTextNode('There was an error loading the document.'), params);
+                }
+                else {
+                    original_wrapper = elemSrc.parentNode;
+                    elemSrc.style.display = 'block';
+                    _pub.html(elemSrc, params);
+                }
+            }
+        }
+    }();
+    _pub.plugins.register(iBoxPlugin_Container, true);
+
+    /**
+     * Handles images
+     */
+    var iBoxPlugin_Image = function() {
+        // Image types (for auto detection of image display)
+        var image_types = /\.jpg|\.jpeg|\.png|\.gif/gi;
+
+        return {
+            match: function(url) {
+                return url.match(image_types);
+            },
+
+            render: function(url, params) {    
+                var img = document.createElement('img');
+                img.onclick = _pub.hide;
+                img.className = 'ibox_image'
+                img.style.cursor = 'pointer';
+                img.onload = function() {
+                    _pub.html(img, {width: this.width, height: this.height, constrain: true})
+                }
+                img.onerror = function() {
+                    _pub.html(document.createTextNode('There was an error loading the document.'), params);
+                }
+                img.src = url;
+            }
+        }
+    }();
+    _pub.plugins.register(iBoxPlugin_Image);
+
+    var iBoxPlugin_YouTube = function() {
+        var youtube_url = /(?:http:\/\/)?(?:www\d*\.)?(youtube\.(?:[a-z]+))\/(?:v\/|(?:watch(?:\.php)?)?\?(?:.+&)?v=)([^&]+).*/;
+        return {
+            match: function(url) {
+                return url.match(youtube_url);
+            },
+
+            render: function(url, params) {
+                var _match = url.match(youtube_url);
+                var domain = _match[1];
+                var id = _match[2];
+                params.width = 425;
+                params.height = 355;
+                params.constrain = true;
+                var html = '<span><object width="100%" height="100%" style="overflow: hidden; display: block;"><param name="movie" value="http://www.' + domain + '/v/' + id + '"/><param name="wmode" value="transparent"/><embed src="http://www.' + domain + '/v/' + id + '" type="application/x-shockwave-flash" wmode="transparent" width="100%" height="100%"></embed></object></span>';
+                _pub.html(html, params);
+            }
+        }
+    }();
+    _pub.plugins.register(iBoxPlugin_YouTube);
+
+    var iBoxPlugin_Document = function() {
+        return {
+            match: function(url) {
+                return true;
+            },
+
+            render: function(url, params) {
+                _pub.http.open('get', url, true);
+
+                _pub.http.onreadystatechange = function() {
+                    if (_pub.http.readyState == 4) {
+                        // XXX: why does status return 0?
+                        if (_pub.http.status == 200 || _pub.http.status == 0) {
+                            _pub.html(_pub.http.responseText, params);
+                        }
+                        else {
+                            _pub.html(document.createTextNode('There was an error loading the document.'), params);
+                        }
+                    }
+                }
+                _pub.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+                try {
+                    _pub.http.send(null);
+                }
+                catch (ex) {
+                    _pub.html(document.createTextNode('There was an error loading the document.'), params);
+                }
+            }
+        };
+    }();
+    _pub.plugins.register(iBoxPlugin_Document, true);
+
+    return _pub;
+}();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox_LICENSE
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox_LICENSE	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/ibox_LICENSE	(revision 2)
@@ -0,0 +1,19 @@
+Copyright (c) 2006-2009 Enthropia Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/icons/hidpi/wbsave.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbsave/icons/hidpi/wbsave.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/icons/wbsave.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbsave/icons/wbsave.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/images/bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbsave/images/bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/images/indicator.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/wbsave/images/indicator.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/af.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/af.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/af.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'af', {
+	toolbar: 'Bewaar'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ar.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ar.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ar.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ar', {
+	toolbar: 'حفظ'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bg.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bg.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bg.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'bg', {
+	toolbar: 'Запис'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bn.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'bn', {
+	toolbar: 'সংরক্ষন কর'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/bs.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'bs', {
+	toolbar: 'Snimi'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ca.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ca', {
+	toolbar: 'Desa'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cs.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cs.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cs.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'cs', {
+	toolbar: 'Uložit'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cy.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cy.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/cy.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'cy', {
+	toolbar: 'Cadw'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/da.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/da.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/da.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'da', {
+	toolbar: 'Gem'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/de.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/de.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/de.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'de', {
+	toolbar: 'wbSpeichern'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/el.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/el.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/el.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'el', {
+	toolbar: 'Αποθήκευση'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-au.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-au.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-au.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'en-au', {
+	toolbar: 'Save'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-ca.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'en-ca', {
+	toolbar: 'Save'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-gb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-gb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en-gb.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'en-gb', {
+	toolbar: 'Save'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/en.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'en', {
+	toolbar: 'wbSave'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eo.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'eo', {
+	toolbar: 'Konservi'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/es.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/es.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/es.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'es', {
+	toolbar: 'Guardar'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/et.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/et.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/et.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'et', {
+	toolbar: 'Salvestamine'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/eu.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'eu', {
+	toolbar: 'Gorde'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fa.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fa.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fa.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'fa', {
+	toolbar: 'ذخیره'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fi.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'fi', {
+	toolbar: 'Tallenna'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fo.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fo.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fo.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'fo', {
+	toolbar: 'Goym'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr-ca.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr-ca.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr-ca.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'fr-ca', {
+	toolbar: 'Sauvegarder'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/fr.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'fr', {
+	toolbar: 'Enregistrer'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gl.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'gl', {
+	toolbar: 'Gardar'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/gu.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'gu', {
+	toolbar: 'સેવ'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/he.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/he.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/he.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'he', {
+	toolbar: 'שמירה'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hi.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'hi', {
+	toolbar: 'सेव'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hr.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'hr', {
+	toolbar: 'Snimi'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hu.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hu.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/hu.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'hu', {
+	toolbar: 'Mentés'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/id.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/id.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/id.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'id', {
+	toolbar: 'Simpan'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/is.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/is.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/is.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'is', {
+	toolbar: 'Vista'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/it.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/it.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/it.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'it', {
+	toolbar: 'Salva'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ja.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ja.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ja.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ja', {
+	toolbar: '保存'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ka.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ka.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ka.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ka', {
+	toolbar: 'ჩაწერა'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/km.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/km.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/km.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'km', {
+	toolbar: 'រក្សាទុក'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ko.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ko.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ko.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ko', {
+	toolbar: '저장하기'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ku.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ku.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ku.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ku', {
+	toolbar: 'پاشکەوتکردن'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lt.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'lt', {
+	toolbar: 'Išsaugoti'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/lv.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'lv', {
+	toolbar: 'Saglabāt'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mk.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'mk', {
+	toolbar: 'Save' // MISSING
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/mn.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'mn', {
+	toolbar: 'Хадгалах'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ms.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ms.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ms.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ms', {
+	toolbar: 'Simpan'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nb.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nb.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nb.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'nb', {
+	toolbar: 'Lagre'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/nl.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'nl', {
+	toolbar: 'Opslaan'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/no.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/no.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/no.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'no', {
+	toolbar: 'Lagre'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pl.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'pl', {
+	toolbar: 'Zapisz'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt-br.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt-br.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt-br.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'pt-br', {
+	toolbar: 'Salvar'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/pt.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'pt', {
+	toolbar: 'Guardar'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ro.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ro.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ro.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ro', {
+	toolbar: 'Salvează'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ru.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ru.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ru.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ru', {
+	toolbar: 'Сохранить'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/se.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/se.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/se.js	(revision 2)
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sv', {
+	toolbar: 'Spara'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/si.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/si.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/si.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'si', {
+	toolbar: 'ආරක්ෂා කරන්න'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sk.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sk', {
+	toolbar: 'Uložiť'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sl.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sl.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sl.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sl', {
+	toolbar: 'Shrani'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sq.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sq.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sq.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sq', {
+	toolbar: 'Ruaje'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr-latn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr-latn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr-latn.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sr-latn', {
+	toolbar: 'Sačuvaj'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sr.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sr', {
+	toolbar: 'Сачувај'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sv.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sv.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/sv.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'sv', {
+	toolbar: 'Spara'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/th.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/th.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/th.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'th', {
+	toolbar: 'บันทึก'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/tr.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/tr.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/tr.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'tr', {
+	toolbar: 'Kaydet'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ug.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ug.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/ug.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'ug', {
+	toolbar: 'ساقلا'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/uk.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/uk.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/uk.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'uk', {
+	toolbar: 'Зберегти'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/vi.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/vi.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/vi.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'vi', {
+	toolbar: 'Lưu'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh-cn.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh-cn.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh-cn.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'zh-cn', {
+	toolbar: '保存'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/lang/zh.js	(revision 2)
@@ -0,0 +1,7 @@
+﻿/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'wbsave', 'zh', {
+	toolbar: '儲存'
+});
Index: trunk/modules/ckeditor/ckeditor/plugins/wbsave/plugin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wbsave/plugin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wbsave/plugin.js	(revision 2)
@@ -0,0 +1,81 @@
+﻿/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The Save plugin.
+ */
+
+(function() {
+    var wbsaveCmd = {
+        readOnly: 1,
+
+        exec: function( editor ) {
+            if ( editor.fire( 'save' ) ) {
+        var $form = editor.element.$.form;
+                    var $form = editor.element.$.form;
+
+          var ifrm = document.createElement('iframe');
+          ifrm.setAttribute('style','display: none;');
+          ifrm.setAttribute('id','dummy_iframe');
+          ifrm.setAttribute('name','dummy_iframe');
+          $form.parentNode.appendChild(ifrm);
+          $("#dummy_iframe").load(function() {
+              reply = $("#dummy_iframe").contents().find('.content').html();
+              reply = reply.replace(/<input.*>/ig,'');
+              iBox.show(reply);
+              $("#dummy_iframe").remove();
+              $form.target = '';
+          });            
+          $form.target = 'dummy_iframe';
+
+                if ( $form ) {
+                    try {
+                        $form.submit();
+                    } catch ( e ) {
+                        // If there's a button named "submit" then the form.submit
+                        // function is masked and can't be called in IE/FF, so we
+                        // call the click() method of that button.
+                        if ( $form.submit.click )
+                            $form.submit.click();
+                    }
+                }
+            }
+        }
+    };
+
+    var pluginName = 'wbsave';
+
+    // Register a plugin named "wbsave".
+    CKEDITOR.plugins.add( pluginName, {
+        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+        icons: 'wbsave', // %REMOVE_LINE_CORE%
+        hidpi: true, // %REMOVE_LINE_CORE%
+        init: function( editor ) {
+            // Save plugin is for replace mode only.
+            if ( editor.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE )
+                return;
+
+            var command = editor.addCommand( pluginName, wbsaveCmd );
+            command.modes = { wysiwyg: !!( editor.element.$.form ) };
+
+            editor.ui.addButton && editor.ui.addButton( 'wbSave', {
+                label: editor.lang.wbsave.toolbar,
+                command: pluginName,
+                toolbar: 'document,10'
+            });
+            CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('wbsave')+'ibox.src.js');
+        }
+    });
+})();
+
+/**
+ * Fired when the user clicks the Save button on the editor toolbar.
+ * This event allows to overwrite the default Save button behavior.
+ *
+ * @since 4.2
+ * @event save
+ * @member CKEDITOR.editor
+ * @param {CKEDITOR.editor} editor This editor instance.
+ */
Index: trunk/modules/ckeditor/ckeditor/plugins/widget/images/handle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/widget/images/handle.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/LICENSE.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/LICENSE.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/LICENSE.md	(revision 2)
@@ -0,0 +1,28 @@
+Software License Agreement
+==========================
+
+**CKEditor WSC Plugin**
+Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your choice:
+
+*   GNU General Public License Version 2 or later (the "GPL"):
+    http://www.gnu.org/licenses/gpl.html
+
+*   GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
+    http://www.gnu.org/licenses/lgpl.html
+
+*   Mozilla Public License Version 1.1 or later (the "MPL"):
+    http://www.mozilla.org/MPL/MPL-1.1.html
+
+You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
+
+Sources of Intellectual Property Included in this plugin
+--------------------------------------------------------
+
+Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
+
+Trademarks
+----------
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/README.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/README.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/README.md	(revision 2)
@@ -0,0 +1,25 @@
+CKEditor WebSpellChecker Plugin
+===============================
+
+This plugin brings Web Spell Checker (WSC) into CKEditor.
+
+WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
+
+Installation
+------------
+
+1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation.
+2. Enable the "wsc" plugin in the CKEditor configuration file (config.js):
+
+        config.extraPlugins = 'wsc';
+
+That's all. WSC will appear on the editor toolbar and will be ready to use.
+
+License
+-------
+
+Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
+
+See LICENSE.md for more information.
+
+Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/ciframe.html
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/ciframe.html	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/ciframe.html	(revision 2)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!--
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html>
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<script type="text/javascript">
+
+function gup( name )
+{
+	name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
+	var regexS = '[\\?&]' + name + '=([^&#]*)' ;
+	var regex = new RegExp( regexS ) ;
+	var results = regex.exec( window.location.href ) ;
+
+	if ( results )
+		return results[ 1 ] ;
+	else
+		return '' ;
+}
+
+var interval;
+
+function sendData2Master()
+{
+	var destination = window.parent.parent ;
+	try
+	{
+		if ( destination.XDTMaster )
+		{
+			var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
+			window.clearInterval( interval ) ;
+		}
+	}
+	catch (e) {}
+}
+
+function OnMessage (event) {
+	        var message = event.data;
+	        var destination = window.parent.parent;
+	        destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ;
+}
+
+function listenPostMessage() {
+    if (window.addEventListener) { // all browsers except IE before version 9
+            window.addEventListener ("message", OnMessage, false);
+    }else {
+            if (window.attachEvent) { // IE before version 9
+                        window.attachEvent("onmessage", OnMessage);
+                }
+        }
+}
+
+function onLoad()
+{
+	interval = window.setInterval( sendData2Master, 100 );
+	listenPostMessage();
+}
+
+</script>
+</head>
+<body onload="onLoad()"><p></p></body>
+</html>
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.css	(revision 2)
@@ -0,0 +1,82 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+.midtext
+{
+	padding:0px;
+	margin:10px;
+}
+
+.midtext p
+{
+	padding:0px;
+	margin:10px;
+}
+
+.Button
+{
+	border: #737357 1px solid;
+	color: #3b3b1f;
+	background-color: #c7c78f;
+}
+
+.PopupTabArea
+{
+	color: #737357;
+	background-color: #e3e3c7;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+.PopupTabEmptyArea
+{
+	padding-left: 10px;
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #d5d59d 1px solid;
+	border-top: #d5d59d 1px solid;
+	border-left: #d5d59d 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #737357;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #d5d59d 1px solid;
+	cursor: pointer;
+}
+
+.PopupTabSelected
+{
+	font-weight: bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f1f1e3;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc.js	(revision 2)
@@ -0,0 +1,92 @@
+﻿/*
+ Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+(function(){function z(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}function I(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],e="",d;for(d in a)for(var f in a[d]){var h=a[d][f];"en_US"==h?e=h:c.push(h)}c.sort();e&&c.unshift(e);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var e in a[d])if(e.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var e in a[d])c[a[d][e]]=
+e;return c}()}}var g=function(){var a=function(a,b,d){d=d||{};var f=d.expires;if("number"==typeof f&&f){var h=new Date;h.setTime(h.getTime()+1E3*f);f=d.expires=h}f&&f.toUTCString&&(d.expires=f.toUTCString());b=encodeURIComponent(b);a=a+"\x3d"+b;for(var k in d)b=d[k],a+="; "+k,!0!==b&&(a+="\x3d"+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,
+d=a.fn||null,f=a.id||"",h=a.target||window,k=a.message||{id:f};a.message&&"[object Object]"==b.call(a.message)&&(a.message.id?a.message.id:a.message.id=f,k=a.message);a=window.JSON.stringify(k,d);h.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,
+"\\$1")+"\x3d([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}},misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){var b;(b=0===a.offsetWidth||0==a.offsetHeight)||(b="none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display));
+return!b},hasClass:function(a,b){return!(!a.className||!a.className.match(new RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=
+null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.sessionid="";a.LocalizationButton={ChangeTo_button:{instance:null,text:"Change to",localizationID:"ChangeTo"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking_button:{instance:null,text:"Finish Checking",
+localizationID:"FinishChecking"},FinishChecking_button_block:{instance:null,text:"Finish Checking",localizationID:"FinishChecking"}};a.LocalizationLabel={ChangeTo_label:{instance:null,text:"Change to",localizationID:"ChangeTo"},Suggestions:{instance:null,text:"Suggestions"},Categories:{instance:null,text:"Categories"},Synonyms:{instance:null,text:"Synonyms"}};var J=function(b){var c,e,d;for(d in b)c=(c=a.dialog.getContentElement(a.dialog._.currentTabId,d))?c.getElement():b[d].instance.getElement().getFirst()||
+b[d].instance.getElement(),e=b[d].localizationID||d,c.setText(a.LocalizationComing[e])},K=function(b){var c,e,d;for(d in b)c=a.dialog.getContentElement(a.dialog._.currentTabId,d),c||(c=b[d].instance),c.setLabel&&(e=b[d].localizationID||d,c.setLabel(a.LocalizationComing[e]+":"))},r,A;a.framesetHtml=function(b){return"\x3ciframe id\x3d"+a.iframeNumber+"_"+b+' frameborder\x3d"0" allowtransparency\x3d"1" style\x3d"width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"\x3e\x3c/iframe\x3e'};
+a.setIframe=function(b,c){var e;e=a.framesetHtml(c);var d=a.iframeNumber+"_"+c;b.getElement().setHtml(e);e=document.getElementById(d);e=e.contentWindow?e.contentWindow:e.contentDocument.document?e.contentDocument.document:e.contentDocument;e.document.open();e.document.write('\x3c!DOCTYPE html\x3e\x3chtml\x3e\x3chead\x3e\x3cmeta charset\x3d"UTF-8"\x3e\x3ctitle\x3eiframe\x3c/title\x3e\x3cstyle\x3ehtml,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}\x3c/style\x3e\x3c/head\x3e\x3cbody\x3e\x3cdiv id\x3d"content" class\x3d"main-box"\x3e\x3c/div\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"spelltext" name\x3d"spelltext" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadsuggestfirst" name\x3d"loadsuggestfirst" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadspellsuggestall" name\x3d"loadspellsuggestall" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3ciframe src\x3d"" frameborder\x3d"0" id\x3d"loadOptionsForm" name\x3d"loadOptionsForm" style\x3d"display:none; width: 100%" \x3e\x3c/iframe\x3e\x3cscript\x3e(function(window) {var ManagerPostMessage \x3d function() {var _init \x3d function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd \x3d function(o) {var str,type \x3d Object.prototype.toString,fn \x3d o.fn || null,id \x3d o.id || "",target \x3d o.target || window,message \x3d o.message || { "id": id };if (o.message \x26\x26 type.call(o.message) \x3d\x3d "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] \x3d id;message \x3d o.message;};str \x3d JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp \x3d new ManagerPostMessage;var appString \x3d (function(){var spell \x3d parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl \x3d parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag \x3d document.createElement("script");scriptTag.type \x3d "text/javascript";callback ? callback : callback \x3d function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange \x3d function() {if (scriptTag.readyState \x3d\x3d "loaded" ||scriptTag.readyState \x3d\x3d "complete") {scriptTag.onreadystatechange \x3d null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload \x3d function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src \x3d src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload \x3d function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);\x3c/script\x3e\x3c/body\x3e\x3c/html\x3e');
+e.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),e=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");e.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height=
+"240px"};a.sendData=function(b){var c=b._.currentTabId,e=b._.contents[c].Content,d,f;a.previousTab=c;a.setIframe(e,c);var h=function(h){c=b._.currentTabId;h=h||window.event;h.data.getTarget().is("a")&&c!==a.previousTab&&(a.previousTab=c,e=b._.contents[c].Content,d=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),e.getElement().getChildCount()?E(a.targetFromFrame[d],a.cmd[c]):(a.setIframe(e,c),f=document.getElementById(d),a.targetFromFrame[d]=f.contentWindow))};b.parts.tabs.removeListener("click",h);
+b.parts.tabs.on("click",h)};a.buildSelectLang=function(a){var c=new CKEDITOR.dom.element("div"),e=new CKEDITOR.dom.element("select");a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});e.setAttribute("id",a);e.addClass("cke_dialog_ui_input_select");e.setStyles({width:"160px"});c.append(e);return c};a.buildOptionLang=function(b,c){var e=document.getElementById("wscLang"+
+c),d=document.createDocumentFragment(),f,h,k=[];if(0===e.options.length){for(f in b)k.push([f,b[f]]);k.sort();for(var p=0;p<k.length;p++)f=document.createElement("option"),f.setAttribute("value",k[p][1]),h=document.createTextNode(k[p][0]),f.appendChild(h),d.appendChild(f);e.appendChild(d)}for(d=0;d<e.options.length;d++)e.options[d].value==a.selectingLang&&(e.options[d].selected="selected")};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];var c=z(a.selectNode.Synonyms);a.selectNode.Synonyms.clear();
+for(var e=0;e<b.length;e++){var d=document.createElement("option");d.text=b[e];d.value=b[e];c.$.add(d,e)}a.selectNode.Synonyms.getInputElement().$.firstChild.selected=!0;a.textNode.Thesaurus.setValue(a.selectNode.Synonyms.getInputElement().getValue())};var B=function(a){var c=document,e=a.target||c.body,d=a.id||"overlayBlock",f=a.opacity||"0.9";a=a.background||"#f1f1f1";var h=c.getElementById(d),k=h||c.createElement("div");k.style.cssText="position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:"+
+a+";opacity: "+f+";filter: alpha(opacity\x3d"+100*f+");display: none;";k.id=d;h||e.appendChild(k);return{setDisable:function(){k.style.display="none"},setEnable:function(){k.style.display="block"}}},L=function(b,c,e){var d=new CKEDITOR.dom.element("div"),f=new CKEDITOR.dom.element("input"),h=new CKEDITOR.dom.element("label"),k="wscGrammerSuggest"+b+"_"+c;d.addClass("cke_dialog_ui_input_radio");d.setAttribute("role","presentation");d.setStyles({width:"97%",padding:"5px","white-space":"normal"});f.setAttributes({type:"radio",
+value:c,name:"wscGrammerSuggest",id:k});f.setStyles({"float":"left"});f.on("click",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())});e?f.setAttribute("checked",!0):!1;f.addClass("cke_dialog_ui_radio_input");h.appendText(b);h.setAttribute("for",k);h.setStyles({display:"block","line-height":"16px","margin-left":"18px","white-space":"normal"});d.append(f);d.append(h);return d},F=function(a){a=a||"true";null!==a&&"false"==a&&t()},w=function(b){var c=new I(b);b="wscLang"+a.dialog.getParentEditor().name;
+b=document.getElementById(b);var e=a.iframeNumber+"_"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name);u[c.getCurrentLangGroup(a.selectingLang)].onShow();F(a.show_grammar);b.onchange=function(b){b=c.getCurrentLangGroup(this.value);var f=a.dialog._.currentTabId;u[b].onShow();F(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;f=a.cmd[f];b&&u[b]&&u[b].allowedTabCommands[f]||(f=u[b].defaultTabCommand);for(var h in a.cmd)if(a.cmd[h]==f){a.previousTab=
+h;break}g.postMessage.send({message:{changeLang:a.selectingLang,interfaceLang:a.interfaceLang,text:a.dataTemp,cmd:f},target:a.targetFromFrame[e],id:"selectionLang_outer__page"})}},M=function(b){var c,e=function(b){b=a.dialog.getContentElement(a.dialog._.currentTabId,b)||a.LocalizationButton[b].instance;b.getElement().hasClass("cke_disabled")?b.getElement().setStyle("color","#a0a0a0"):b.disable()};c=function(b){b=a.dialog.getContentElement(a.dialog._.currentTabId,b)||a.LocalizationButton[b].instance;
+b.enable();b.getElement().setStyle("color","#333")};"no_any_suggestions"==b?(b="No suggestions",c=a.dialog.getContentElement(a.dialog._.currentTabId,"ChangeTo_button")||a.LocalizationButton.ChangeTo_button.instance,c.disable(),c=a.dialog.getContentElement(a.dialog._.currentTabId,"ChangeAll")||a.LocalizationButton.ChangeAll.instance,c.disable(),e("ChangeTo_button"),e("ChangeAll")):(c("ChangeTo_button"),c("ChangeAll"));return b},O={iframeOnload:function(b){a.div_overlay.setEnable();b=a.dialog._.currentTabId;
+E(a.targetFromFrame[a.iframeNumber+"_"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();C();w(a.langList);var c=M(b.word),e="";c instanceof Array&&(c=b.word[0]);e=c=c.split(",");a.textNode.SpellTab.setValue(e[0]);b=z(A);A.clear();for(c=0;c<e.length;c++){var d=document.createElement("option");d.text=e[c];d.value=e[c];b.$.add(d,c)}v();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;C();w(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml("");
+a.textNode.GrammTab.reset();a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml("");a.textNodeInfo.GrammTab.getElement().setText(b.info);b=b.grammSuggest;for(var c=b.length,e=!0,d=0;d<c;d++)a.grammerSuggest.getElement().append(L(b[d],b[d],e)),e=!1;v();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;C();w(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();var c=z(a.selectNode.Categories),e=0;a.selectNode.Categories.clear();
+for(var d in b)b=document.createElement("option"),b.text=d,b.value=d,c.$.add(b,e),e++;c=a.selectNode.Categories.getInputElement().getChildren().$[0].value;a.selectNode.Categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(c);v();a.div_overlay.setDisable()},finish:function(b){delete b.id;N();b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show();a.div_overlay.setDisable()},
+settext:function(b){delete b.id;a.dialog.getParentEditor().getCommand("checkspell");var c=a.dialog.getParentEditor();if(c.scayt&&c.wsc.isSsrvSame){var e=c.wsc.udn;e?c.wsc.DataStorage.setData("scayt_user_dictionary_name",e):c.wsc.DataStorage.setData("scayt_user_dictionary_name","")}try{c.focus()}catch(d){}c.setData(b.text,function(){a.dataTemp="";c.unlockSelection();c.fire("saveSnapshot");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=
+b.currentLang;(b.cmd="0"!==b.len&&b.len)?a.div_overlay.setDisable():window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);J(a.LocalizationButton);K(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:g.cookie.get("osp"),udn:g.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids};g.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+a.dialog._.currentTabId],id:"options_outer__page"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=
+b.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;a.bnr=b.bannerId;a.sessionid=b.sessionid;if(b.bannerId){a.setHeightBannerFrame();var e=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,"banner").getElement().setHtml(e)}else a.setHeightFrame();"undefined"==c&&(a.userDictionaryName?(c=a.userDictionaryName,e={osp:g.cookie.get("osp"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:"create"},g.postMessage.send({message:e,
+target:a.targetFromFrame[void 0]})):c="");g.cookie.set("osp",b.DefOptions.osp);g.cookie.set("udn",c);g.cookie.set("cust_dic_ids",b.DefOptions.cust_dic_ids);g.postMessage.send({id:"giveOptions"})},options_dic_send:function(b){b={osp:g.cookie.get("osp"),udn:g.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:g.cookie.get("udnCmd")};g.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},
+setOptionsConfirmF:function(){},setOptionsConfirmT:function(){r.setValue("")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){w(a.langList)}},G=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)O[a.id](a)},E=function(b,c,e,d){c=c||CKEDITOR.config.wsc_cmd;e=e||a.dataTemp;g.postMessage.send({message:{customerId:a.wsc_customerId,text:e,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,
+udn:a.userDictionaryName,slang:a.selectingLang,interfaceLang:a.interfaceLang,reset_suggest:d||!1,sessionid:a.sessionid},target:b,id:"data_outer__page"});a.div_overlay.setEnable()},u={superset:{onShow:function(){a.dialog.showPage("Thesaurus");a.dialog.showPage("GrammTab");l()},allowedTabCommands:{spell:!0,grammar:!0,thes:!0},defaultTabCommand:"spell"},usual:{onShow:function(){x();t();l()},allowedTabCommands:{spell:!0},defaultTabCommand:"spell"},rtl:{onShow:function(){x();t();l()},allowedTabCommands:{spell:!0},
+defaultTabCommand:"spell"},spellgrammar:{onShow:function(){x();a.dialog.showPage("GrammTab");l()},allowedTabCommands:{spell:!0,grammar:!0},defaultTabCommand:"spell"},spellthes:{onShow:function(){a.dialog.showPage("Thesaurus");t();l()},allowedTabCommands:{spell:!0,thes:!0},defaultTabCommand:"spell"}},H=function(b){var c=(new function(a){var b={};return{getCmdByTab:function(c){for(var h in a)b[a[h]]=h;return b[c]}}}(a.cmd)).getCmdByTab(CKEDITOR.config.wsc_cmd);b.selectPage(c);a.sendData(b)},x=function(){a.dialog.hidePage("Thesaurus")},
+t=function(){a.dialog.hidePage("GrammTab")},l=function(){a.dialog.showPage("SpellTab")},v=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show()},N=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement(),c=document.activeElement,e;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");
+b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();e=g.misc.findFocusable(a.dialog.parts.contents);if(g.misc.hasClass(c,"cke_dialog_tab")||g.misc.hasClass(c,"cke_dialog_contents_body")||!g.misc.isVisible(c))for(var d=0,f;d<e.count();d++){if(f=e.getItem(d),g.misc.isVisible(f.$)){try{f.$.focus()}catch(h){}break}}else try{c.focus()}catch(k){}},0)},C=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement(),
+c=document.activeElement,e;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();e=g.misc.findFocusable(a.dialog.parts.contents);if(g.misc.hasClass(c,"cke_dialog_tab")||g.misc.hasClass(c,"cke_dialog_contents_body")||!g.misc.isVisible(c))for(var d=0,f;d<e.count();d++){if(f=e.getItem(d),g.misc.isVisible(f.$)){try{f.$.focus()}catch(h){}break}}else try{c.focus()}catch(k){}},
+0)};CKEDITOR.dialog.add("checkspell",function(b){function c(a){var c=parseInt(b.config.wsc_left,10),d=parseInt(b.config.wsc_top,10),e=parseInt(b.config.wsc_width,10),g=parseInt(b.config.wsc_height,10),m=CKEDITOR.document.getWindow().getViewPaneSize();a.getPosition();var n=a.getSize(),q=0;if(!a._.resized){var q=n.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.opera||CKEDITOR.env.ie&&CKEDITOR.env.quirks)),D=n.width-a.parts.contents.getSize("width",1);if(e<f.minWidth||isNaN(e))e=
+f.minWidth;e>m.width-D&&(e=m.width-D);if(g<f.minHeight||isNaN(g))g=f.minHeight;g>m.height-q&&(g=m.height-q);n.width=e+D;n.height=g+q;a._.fromResizeEvent=!1;a.resize(e,g);setTimeout(function(){a._.fromResizeEvent=!1;CKEDITOR.dialog.fire("resize",{dialog:a,width:e,height:g},b)},300)}a._.moved||(q=isNaN(c)&&isNaN(d)?0:1,isNaN(c)&&(c=(m.width-n.width)/2),0>c&&(c=0),c>m.width-n.width&&(c=m.width-n.width),isNaN(d)&&(d=(m.height-n.height)/2),0>d&&(d=0),d>m.height-n.height&&(d=m.height-n.height),a.move(c,
+d,q))}function e(){b.wsc={};(function(a){var b={separator:"\x3c$\x3e",getDataType:function(a){return"undefined"===typeof a?"undefined":null===a?"null":Object.prototype.toString.call(a).slice(8,-1)},convertDataToString:function(a){return this.getDataType(a).toLowerCase()+this.separator+a},restoreDataFromString:function(a){var b=a,c;a=this.backCompatibility(a);if("string"===typeof a)switch(b=a.indexOf(this.separator),c=a.substring(0,b),b=a.substring(b+this.separator.length),c){case "boolean":b="true"===
+b;break;case "number":b=parseFloat(b);break;case "array":b=""===b?[]:b.split(",");break;case "null":b=null;break;case "undefined":b=void 0}return b},backCompatibility:function(a){var b=a,c;"string"===typeof a&&(c=a.indexOf(this.separator),0>c&&(b=parseFloat(a),isNaN(b)&&("["===a[0]&&"]"===a[a.length-1]?(a=a.replace("[",""),a=a.replace("]",""),b=""===a?[]:a.split(",")):b="true"===a||"false"===a?"true"===a:a),b=this.convertDataToString(b)));return b}},c={get:function(a){return b.restoreDataFromString(window.localStorage.getItem(a))},
+set:function(a,c){var d=b.convertDataToString(c);window.localStorage.setItem(a,d)},del:function(a){window.localStorage.removeItem(a)},clear:function(){window.localStorage.clear()}},d={expiration:31622400,get:function(a){return b.restoreDataFromString(this.getCookie(a))},set:function(a,c){var d=b.convertDataToString(c);this.setCookie(a,d,{expires:this.expiration})},del:function(a){this.deleteCookie(a)},getCookie:function(a){return(a=document.cookie.match(new RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,
+"\\$1")+"\x3d([^;]*)")))?decodeURIComponent(a[1]):void 0},setCookie:function(a,b,c){c=c||{};var d=c.expires;if("number"===typeof d&&d){var e=new Date;e.setTime(e.getTime()+1E3*d);d=c.expires=e}d&&d.toUTCString&&(c.expires=d.toUTCString());b=encodeURIComponent(b);a=a+"\x3d"+b;for(var h in c)b=c[h],a+="; "+h,!0!==b&&(a+="\x3d"+b);document.cookie=a},deleteCookie:function(a){this.setCookie(a,null,{expires:-1})},clear:function(){for(var a=document.cookie.split(";"),b=0;b<a.length;b++){var c=a[b],d=c.indexOf("\x3d"),
+c=-1<d?c.substr(0,d):c;this.deleteCookie(c)}}},e=window.localStorage?c:d;a.DataStorage={getData:function(a){return e.get(a)},setData:function(a,b){e.set(a,b)},deleteData:function(a){e.del(a)},clear:function(){e.clear()}}})(b.wsc);b.wsc.operationWithUDN=function(b,c){g.postMessage.send({message:{udn:c,id:"operationWithUDN",udnCmd:b},target:a.targetFromFrame[a.iframeNumber+"_"+a.dialog._.currentTabId]})};b.wsc.getLocalStorageUDN=function(){var a=b.wsc.DataStorage.getData("scayt_user_dictionary_name");
+if(a)return a};b.wsc.getLocalStorageUD=function(){var a=b.wsc.DataStorage.getData("scayt_user_dictionary");if(a)return a};b.wsc.addWords=function(a,c){var d=b.config.wsc.DefaultParams.serviceHost+b.config.wsc.DefaultParams.ssrvHost+"?cmd\x3ddictionary\x26format\x3djson\x26customerid\x3d1%3AncttD3-fIoSf2-huzwE4-Y5muI2-mD0Tt-kG9Wz-UEDFC-tYu243-1Uq474-d9Z2l3\x26action\x3daddword\x26word\x3d"+a+"\x26callback\x3dtoString\x26synchronization\x3dtrue",e=document.createElement("script");e.type="text/javascript";
+e.src=d;document.getElementsByTagName("head")[0].appendChild(e);e.onload=c;e.onreadystatechange=function(){"loaded"===this.readyState&&c()}};b.wsc.cgiOrigin=function(){var a=b.config.wsc.DefaultParams.serviceHost.split("/");return a[0]+"//"+a[2]};b.wsc.isSsrvSame=!1}var d=function(c){this.getElement().focus();a.div_overlay.setEnable();c=a.dialog._.currentTabId;var d=a.iframeNumber+"_"+c,e=a.textNode[c].getValue(),f=this.getElement().getAttribute("title-cmd");g.postMessage.send({message:{cmd:f,tabId:c,
+new_word:e},target:a.targetFromFrame[d],id:"cmd_outer__page"});"ChangeTo"!=f&&"ChangeAll"!=f||b.fire("saveSnapshot");"FinishChecking"==f&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())},f={minWidth:560,minHeight:444};return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:f.minWidth,minHeight:f.minHeight,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;x();t();l();b.plugins.scayt&&e()},onShow:function(){a.dialog=this;b.lockSelection(b.getSelection());
+a.TextAreaNumber="cke_textarea_"+b.name;g.postMessage.init(G);a.dataTemp=b.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds;a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var d="file:"==document.location.protocol?"http:":document.location.protocol,d=b.config.wsc_customLoaderScript||d+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin\x3dfck2\x26customerid\x3d"+
+a.wsc_customerId+"\x26cmd\x3dscript\x26doc\x3dwsc\x26schema\x3d22";c(this);CKEDITOR.scriptLoader.load(d,function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost,a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):
+(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path);a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+"dialogs/tmp.html";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode)||"en_US";a.interfaceLang=b.config.wsc_interfaceLang;
+a.selectingLang=a.currentLang;a.div_overlay=new B({opacity:"1",background:"#fff url("+a.loadIcon+") no-repeat 50% 50%",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle("width","97%");d.getElementsByTag("DIV").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name));a.div_overlay_no_check=new B({opacity:"1",id:"no_check_over",background:"#fff url("+a.loadIconEmptyEditor+") no-repeat 50% 50%",target:a.OverlayPlace});c&&(H(a.dialog),a.dialog.setupContent(a.dialog));
+b.plugins.scayt&&(b.wsc.isSsrvSame=function(){var a=CKEDITOR.config.wsc.DefaultParams.serviceHost.replace("lf/22/js/../../../","").split("//")[1],c=CKEDITOR.config.wsc.DefaultParams.ssrvHost,d=b.config.scayt_srcUrl,e,h,f,g,p;window.SCAYT&&window.SCAYT.CKSCAYT&&(f=SCAYT.CKSCAYT.prototype.basePath,f.split("//"),g=f.split("//")[1].split("/")[0],p=f.split(g+"/")[1].replace("/lf/scayt3/ckscayt/","")+"/script/ssrv.cgi");!d||f||b.config.scayt_servicePath||(d.split("//"),e=d.split("//")[1].split("/")[0],
+h=d.split(e+"/")[1].replace("/lf/scayt3/ckscayt/ckscayt.js","")+"/script/ssrv.cgi");return"//"+a+c==="//"+(b.config.scayt_serviceHost||g||e)+"/"+(b.config.scayt_servicePath||p||h)}());if(window.SCAYT&&b.wsc&&b.wsc.isSsrvSame){var e=b.wsc.cgiOrigin();b.wsc.syncIsDone=!1;c=function(a){a.origin===e&&(a=JSON.parse(a.data),a.ud&&"undefined"!==a.ud?b.wsc.ud=a.ud:"undefined"===a.ud&&(b.wsc.ud=void 0),a.udn&&"undefined"!==a.udn?b.wsc.udn=a.udn:"undefined"===a.udn&&(b.wsc.udn=void 0),b.wsc.syncIsDone||(h(b.wsc.ud),
+b.wsc.syncIsDone=!0))};var h=function(c){c=b.wsc.getLocalStorageUD();var d;c instanceof Array&&(d=c.toString());void 0!==d&&""!==d&&setTimeout(function(){b.wsc.addWords(d,function(){H(a.dialog);a.dialog.setupContent(a.dialog)})},400)};window.addEventListener?addEventListener("message",c,!1):window.attachEvent("onmessage",c);setTimeout(function(){var a=b.wsc.getLocalStorageUDN();void 0!==a&&b.wsc.operationWithUDN("restore",a)},500)}})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,
+d=b.scayt;b.unlockSelection();c&&d&&c.state[b.name]&&d.setMarkupPaused(!1);a.dataTemp="";a.sessionid="";g.postMessage.unbindHandler(G);if(b.plugins.scayt&&b.wsc&&b.wsc.isSsrvSame){var c=b.wsc.udn,e=b.wsc.ud,f,l;b.scayt?(c?(b.wsc.DataStorage.setData("scayt_user_dictionary_name",c),b.scayt.restoreUserDictionary(c)):(b.wsc.DataStorage.setData("scayt_user_dictionary_name",""),b.scayt.removeUserDictionary()),e&&setTimeout(function(){f=e.split(",");for(l=0;l<f.length;l+=1)b.scayt.addWordToUserDictionary(f[l])},
+200),e||b.wsc.DataStorage.setData("scayt_user_dictionary",[])):(c?b.wsc.DataStorage.setData("scayt_user_dictionary_name",c):b.wsc.DataStorage.setData("scayt_user_dictionary_name",""),e&&(f=e.split(","),b.wsc.DataStorage.setData("scayt_user_dictionary",f)))}},contents:[{id:"SpellTab",label:"SpellChecker",accessKey:"S",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){b=a.iframeNumber+"_"+
+b._.currentTabId;var c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],className:"wsc-spelltab-bottom",children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"ChangeTo_label",label:a.LocalizationLabel.ChangeTo_label.text+":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px",
+"default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo_label.instance=this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:"none"})}},{type:"html",id:"logo",html:'\x3cimg width\x3d"99" height\x3d"68" border\x3d"0" src\x3d"" title\x3d"WebSpellChecker.net" alt\x3d"WebSpellChecker.net" style\x3d"display: inline-block;"\x3e',
+setup:function(b){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){A=this},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%",
+"50%","50%"],children:[{type:"button",id:"ChangeTo_button",label:a.LocalizationButton.ChangeTo_button.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd","ChangeTo");a.LocalizationButton.ChangeTo_button.instance=this},onClick:d},{type:"button",id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=
+this},onClick:d},{type:"button",id:"AddWord",label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:d},{type:"button",id:"FinishChecking_button",label:a.LocalizationButton.FinishChecking_button.text,title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking");a.LocalizationButton.FinishChecking_button.instance=
+this},onClick:d}]},{type:"vbox",id:"rightCol_col__right",widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this},onClick:d},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",
+this.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:d},{type:"button",id:"Options",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(y=document.activeElement,b.openDialog("options"))}}]}]}]},
+{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:v,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src=a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'\x3cimg width\x3d"99" height\x3d"68" border\x3d"0" src\x3d"" title\x3d"WebSpellChecker.net" alt\x3d"WebSpellChecker.net" style\x3d"display: inline-block;"\x3e'}]}]},
+{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):
+(y=document.activeElement,b.openDialog("options"))}},{type:"button",id:"FinishChecking_button_block",label:a.LocalizationButton.FinishChecking_button_block.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking")},onClick:d}]}]}]}]},{id:"GrammTab",label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=
+a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},
+{type:"html",id:"html_text",html:"\x3cdiv style\x3d'min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'\x3e\x3c/div\x3e",onShow:function(b){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox",children:[{type:"button",id:"ChangeTo_button",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",
+"ChangeTo")},onClick:d},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:d},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:d},{type:"button",id:"FinishChecking_button",label:a.LocalizationButton.FinishChecking_button.text,
+title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking")},onClick:d}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:v,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",
+id:"logo",html:'\x3cimg width\x3d"99" height\x3d"68" border\x3d"0" src\x3d"" title\x3d"WebSpellChecker.net" alt\x3d"WebSpellChecker.net" style\x3d"display: inline-block;"\x3e',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking_button_block",label:a.LocalizationButton.FinishChecking_button_block.text,
+title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking")},onClick:d}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"\x3cdiv\x3e\x3c/div\x3e"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",
+style:"width:560px; margin: -10px auto; overflow: hidden;",children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo_label",label:a.LocalizationLabel.ChangeTo_label.text+":",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(b){a.textNode.Thesaurus=this;a.LocalizationLabel.ChangeTo_label.instance=this},onHide:function(){this.reset()}},
+{type:"button",id:"ChangeTo_button",label:a.LocalizationButton.ChangeTo_button.text,title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd","ChangeTo");a.LocalizationButton.ChangeTo_button.instance=this},onClick:d}]},{type:"hbox",children:[{type:"select",id:"Categories",label:a.LocalizationLabel.Categories.text+":",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.Categories=
+this;a.LocalizationLabel.Categories.instance=this},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:"select",id:"Synonyms",label:a.LocalizationLabel.Synonyms.text+":",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.Synonyms=this;a.textNode.Thesaurus.setValue(this.getValue());a.LocalizationLabel.Synonyms.instance=this},onChange:function(b){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},
+{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'\x3cimg width\x3d"99" height\x3d"68" border\x3d"0" src\x3d"" title\x3d"WebSpellChecker.net" alt\x3d"WebSpellChecker.net" style\x3d"display: inline-block;"\x3e',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}},{type:"button",id:"FinishChecking_button",label:a.LocalizationButton.FinishChecking_button.text,title:"Finish Checking",
+style:"width: 100%; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking")},onClick:d}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'\x3cimg width\x3d"99" height\x3d"68" border\x3d"0" src\x3d"" title\x3d"WebSpellChecker.net" alt\x3d"WebSpellChecker.net" style\x3d"display: inline-block;"\x3e',
+setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking_button_block",label:a.LocalizationButton.FinishChecking_button_block.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd","FinishChecking")},onClick:d}]}]}]}]}]}});var y=null;CKEDITOR.dialog.add("options",
+function(b){var c=null,e={},d={},f=null,h=null;g.cookie.get("udn");g.cookie.get("osp");b=function(a){h=this.getElement().getAttribute("title-cmd");a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");g.cookie.set("osp",a);g.cookie.set("udnCmd",h?h:"ignore");"delete"!=h&&(a="",""!==r.getValue()&&(a=r.getValue()),g.cookie.set("udn",a));g.postMessage.send({id:"options_dic_send"})};var k=function(){f.getElement().setHtml(a.LocalizationComing.error);
+f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red",html:"\x3cdiv\x3e\x3c/div\x3e",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%",
+"48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;",
+"default":"",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:"checkbox",id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",
+style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=this.getValue()?1:0}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=this.getValue()?1:0}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",
+labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){r=this;var b=a.userDictionaryName?a.userDictionaryName:(g.cookie.get("udn"),this.getValue());this.setValue(b)},onShow:function(){r=this;var b=g.cookie.get("udn")?g.cookie.get("udn"):this.getValue();this.setValue(b);this.setLabel(a.LocalizationComing.DictionaryName)},onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],
+children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:b},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},
+onClick:b}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:b},{type:"button",id:"delete",label:"Remove",title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||
+this.getElement()).setText(a.LocalizationComing.Remove)},onClick:b}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"\x3cdiv\x3e"+a.LocalizationComing.OptionsTextIntro+"\x3c/div\x3e",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;
+a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");g.cookie.set("osp",a);g.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){c=this;e.IgnoreAllCapsWords=c.getContentElement("OptionsTab","IgnoreAllCapsWords");e.IgnoreWordsNumbers=c.getContentElement("OptionsTab","IgnoreWordsNumbers");e.IgnoreMixedCaseWords=c.getContentElement("OptionsTab","IgnoreMixedCaseWords");e.IgnoreDomainNames=
+c.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){g.postMessage.init(k);var b=g.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];parseInt(d.IgnoreAllCapsWords,10)?e.IgnoreAllCapsWords.setValue("checked",!1):e.IgnoreAllCapsWords.setValue("",!1);parseInt(d.IgnoreWordsNumbers,10)?e.IgnoreWordsNumbers.setValue("checked",!1):e.IgnoreWordsNumbers.setValue("",!1);parseInt(d.IgnoreMixedCaseWords,10)?
+e.IgnoreMixedCaseWords.setValue("checked",!1):e.IgnoreMixedCaseWords.setValue("",!1);parseInt(d.IgnoreDomainNames,10)?e.IgnoreDomainNames.setValue("checked",!1):e.IgnoreDomainNames.setValue("",!1);d.IgnoreAllCapsWords=e.IgnoreAllCapsWords.getValue()?1:0;d.IgnoreWordsNumbers=e.IgnoreWordsNumbers.getValue()?1:0;d.IgnoreMixedCaseWords=e.IgnoreMixedCaseWords.getValue()?1:0;d.IgnoreDomainNames=e.IgnoreDomainNames.getValue()?1:0;e.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;
+e.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;e.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;e.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){g.postMessage.unbindHandler(k);if(y)try{y.focus()}catch(a){}}}});CKEDITOR.dialog.on("resize",function(b){b=b.data;var c=b.dialog,e=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);
+"checkspell"==c._.name&&(a.bnr?e&&e.setSize("height",b.height-310):e&&e.setSize("height",b.height-220),c._.fromResizeEvent&&!c._.resized&&(c._.resized=!0),c._.fromResizeEvent=!0)});CKEDITOR.on("dialogDefinition",function(b){if("checkspell"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new B({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("cancel",function(b){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());
+a.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc_ie.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc_ie.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/dialogs/wsc_ie.js	(revision 2)
@@ -0,0 +1,11 @@
+﻿/*
+ Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),l(a)):180==d++&&window._cancelOnError(c)}}function l(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang||
+f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display",
+"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",k=a.lang.wsc.notAvailable,m='\x3ctextarea style\x3d"display: none" id\x3d"'+g+'" rows\x3d"10" cols\x3d"40"\x3e \x3c/textarea\x3e\x3cdiv id\x3d"'+h+'" style\x3d"display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;"\x3e\x3c/div\x3e\x3ciframe src\x3d"" style\x3d"width:100%;background-color:#f1f1e3;" frameborder\x3d"0" name\x3d"'+
+d+'" id\x3d"'+d+'" allowtransparency\x3d"1"\x3e\x3c/iframe\x3e',n=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin\x3dfck2\x26customerid\x3d"+a.config.wsc_customerId+"\x26cmd\x3dscript\x26doc\x3dwsc\x26schema\x3d22";a.config.wsc_customLoaderScript&&(k+='\x3cp style\x3d"color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px"\x3e'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"\x3c/p\x3e");window._cancelOnError=
+function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display","none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(m);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=
+typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script",{attributes:{type:"text/javascript",src:n}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,k),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}});
+CKEDITOR.dialog.on("resize",function(a){a=a.data;var c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))});
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css	(revision 2)
@@ -0,0 +1,43 @@
+.cke_dialog_body #overlayBlock,
+.cke_dialog_body #no_check_over
+{
+    top: 39px !important;
+}
+
+div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_vbox td > .cke_dialog_ui_button:first-child
+{
+    margin-top: 4px;
+}
+
+div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select > label
+{
+    margin-left: 0;
+}
+
+div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select div.cke_dialog_ui_input_select
+{
+    width: 140px !important;
+}
+
+div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select,
+div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select
+{
+    margin-top: 1px;
+}
+
+div[name=SpellTab] .wsc-spelltab-bottom .cke_dialog_ui_hbox_first .cke_dialog_ui_select select.cke_dialog_ui_input_select:focus,
+div[name=Thesaurus] div.cke_dialog_ui_input_select select.cke_dialog_ui_input_select:focus
+{
+    margin-top: 0;
+}
+
+div[name=GrammTab] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button,
+div[name=Thesaurus] .cke_dialog_ui_vbox tbody > tr:first-child .cke_dialog_ui_button
+{
+    margin-top: 4px !important;
+}
+
+div[name=Thesaurus] div.cke_dialog_ui_input_select
+{
+    width: 180px !important;
+}
Index: trunk/modules/ckeditor/ckeditor/plugins/youtube/images/icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/plugins/youtube/images/icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/dialog.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/dialog.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/dialog.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie7.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie7.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie7.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie8.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie8.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/dialog_ie8.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/dialog_iequirks.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/dialog_iequirks.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/dialog_iequirks.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor_gecko.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor_gecko.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor_gecko.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie7.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie7.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie7.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie8.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie8.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor_ie8.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/editor_iequirks.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/editor_iequirks.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/editor_iequirks.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=b47abaf) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2016px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2040px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2064px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2088px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2112px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=b47abaf) no-repeat 0 -2136px !important;background-size: 16px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moono/icons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/icons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/icons_hidpi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/icons_hidpi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/arrow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/close.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/close.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/lock-open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/lock-open.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/lock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/refresh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/hidpi/refresh.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/lock-open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/lock-open.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/lock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/refresh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/refresh.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/images/spinner.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moono/images/spinner.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moono/presets.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/presets.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/presets.css	(revision 2)
@@ -0,0 +1,47 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/* "Source" button label */
+.cke_button__source_label,
+.cke_button__sourcedialog_label
+{
+    display: inline;
+}
+
+/* "Font Size" combo width */
+.cke_combo__font .cke_combo_text,
+.cke_combo__format .cke_combo_text,
+.cke_combo__style .cke_combo_text, 
+.cke_combo__fontsize .cke_combo_text
+{
+    width: 5em;
+}
+
+/* "Font Size" panel size */
+.cke_combopanel__font,
+.cke_combopanel__format,
+.cke_combopanel__styles, 
+.cke_combopanel__fontsize
+{
+    width: auto;
+}
+
+/* Editable regions */
+textarea.cke_source
+{
+    font-family: 'Courier New', Monospace;
+    font-size: small;
+    background-color: #fff;
+    white-space: pre-wrap;
+    border: none;
+    padding: 0;
+    margin: 0;
+    display: block;
+}
+
+.cke_wysiwyg_frame, .cke_wysiwyg_div
+{
+    background-color: #fff;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moono/readme.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moono/readme.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moono/readme.md	(revision 2)
@@ -0,0 +1,49 @@
+"Moono" Skin
+====================
+
+This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
+[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
+the CKEditor team. "Moono" is maintained by the core developers.
+
+For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
+documentation.
+
+Features
+-------------------
+"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
+It comes with the following features:
+
+- Chameleon feature with brightness,
+- high-contrast compatibility,
+- graphics source provided in SVG.
+
+Directory Structure
+-------------------
+
+CSS parts:
+- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
+- **mainui.css**: the file contains styles of entire editor outline structures,
+- **toolbar.css**: the file contains styles of the editor toolbar space (top),
+- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
+- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
+until the first panel open up,
+- **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
+- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
+it's not loaded until the first menu open up,
+- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
+- **reset.css**: the file defines the basis of style resets among all editor UI spaces,
+- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
+- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
+
+Other parts:
+- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
+- **icons/**: contains all skin defined icons,
+- **images/**: contains a fill general used images,
+- **dev/**: contains SVG source of the skin icons.
+
+License
+-------
+
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+
+For licensing, see LICENSE.md or [http://ckeditor.com/license](http://ckeditor.com/license)
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/colorpanel.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/colorpanel.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/colorpanel.css	(revision 2)
@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+colorpanel.css (part of editor.css)
+=====================================
+
+The color panel is related to the contents part of the panels that are
+displayed when clicking the color buttons of the toolbar. See panels.css for
+styles related to the outer part of panels.
+
+The following is the visual representation of the color panel contents:
+
++-- .cke_panel_block.cke_colorblock --+
+| +-- a.cke_colorauto --------------+ |
+| |                                 | |
+| |         AUTOMATIC COLOR         | |
+| |                                 | |
+| +---------------------------------+ |
+| +-- table ------------------------+ |
+| |                                 | |
+| |          COLOR PALETTE          | |
+| |                                 | |
+| |---------------------------------| |
+| |          "More Colors"          | |
+| +---------------------------------+ |
++-------------------------------------+
+
+The AUTOMATIC COLOR section is an <a> containing a table with two cells with
+the following contents:
+
++-- TD -----------------+ +-- TD -----------------+
+| +-- .cke_colorbox --+ | |                       |
+| |                   | | |      "Automatic"      |
+| +-------------------+ | |                       |
++-----------------------+ +-----------------------+
+
+The COLOR PALETTE section instead is a table with a variable number of cells
+(by default 8). Each cell represents a color box, with the following structure:
+
++-- A.cke_colorbox ---------+
+| +-- SPAN.cke_colorbox --+ |
+| |                       | |
+| +-----------------------+ |
++---------------------------+
+*/
+
+/* The container of the color palette. */
+.cke_colorblock
+{
+    padding: 3px;
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.cke_colorblock,
+.cke_colorblock a
+{
+    text-decoration: none;
+    color: #000;
+}
+
+/* The box which is to represent a single color on the color palette.
+   It is a small, square-shaped element which can be selected from the palette. */
+span.cke_colorbox
+{
+    width: 10px;
+    height: 10px;
+    border: #808080 1px solid;
+    float: left;
+}
+
+.cke_rtl span.cke_colorbox
+{
+    float: right;
+}
+
+/* The wrapper of the span.cke_colorbox. It provides an extra border and padding. */
+a.cke_colorbox
+{
+    border: #fff 1px solid;
+    padding: 2px;
+    float: left;
+    width: 12px;
+    height: 12px;
+}
+
+.cke_rtl a.cke_colorbox
+{
+    float: right;
+}
+
+/* Different states of the a.cke_colorbox wrapper. */
+a:hover.cke_colorbox,
+a:focus.cke_colorbox,
+a:active.cke_colorbox
+{
+    border: #b6b6b6 1px solid;
+    background-color: #e5e5e5;
+}
+
+/* Buttons which are visible at the top/bottom of the color palette:
+   - cke_colorauto (TOP) applies the automatic color.
+   - cke_colormore (BOTTOM) executes the color dialog.
+*/
+a.cke_colorauto,
+a.cke_colormore
+{
+    border: #fff 1px solid;
+    padding: 2px;
+    display: block;
+    cursor: pointer;
+}
+
+/* Different states of cke_colorauto/cke_colormore buttons. */
+a:hover.cke_colorauto,
+a:hover.cke_colormore,
+a:focus.cke_colorauto,
+a:focus.cke_colormore,
+a:active.cke_colorauto,
+a:active.cke_colormore
+{
+    border: #b6b6b6 1px solid;
+    background-color: #e5e5e5;
+}
+.cke_button__oembed_icon {background-position: 0 2px !important;}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie7.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie7.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie7.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie8.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie8.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_ie8.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_iequirks.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_iequirks.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/dialog_iequirks.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border-top:2px solid rgba(102,102,102,0.2);border-right:2px solid rgba(102,102,102,0.2);border-bottom:2px solid rgba(102,102,102,0.2);border-left:2px solid rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:linear-gradient(to bottom,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover,a.cke_dialog_tab:focus{background:#ebebeb;background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus,{background:#ededed;background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:4px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:linear-gradient(to bottom,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok.cke_disabled{border-color:#7d9f51;background:#8dad62;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3d271),to(#8dad62));background-image:-webkit-linear-gradient(top,#b3d271,#8dad62);background-image:-o-linear-gradient(top,#b3d271,#8dad62);background-image:linear-gradient(to bottom,#b3d271,#8dad62);background-image:-moz-linear-gradient(top,#b3d271,#8dad62);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#B3D271',endColorstr='#8DAD62')}a.cke_dialog_ui_button_ok.cke_disabled span{color:#e0e8d1}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok.cke_disabled:focus,a.cke_dialog_ui_button_ok.cke_disabled:active{border-color:#6f8c49}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_gecko.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_gecko.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_gecko.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie7.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie7.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie7.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie8.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie8.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_ie8.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_iequirks.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_iequirks.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/editor_iequirks.css	(revision 2)
@@ -0,0 +1,5 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;border-radius:2px 2px 0 0;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:linear-gradient(to bottom,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}a.cke_button_on{box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:linear-gradient(to bottom,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:linear-gradient(to bottom,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;border-radius:3px;text-align:center;opacity:.95;filter:alpha(opacity = 95);box-shadow:2px 2px 3px 0 rgba(50,50,50,0.3);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png?t=20af917) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=20af917) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=20af917) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=20af917) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=20af917) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=20af917) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png?t=20af917) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png?t=20af917) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=20af917) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=20af917) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=20af917) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=20af917) no-repeat 0 -360px !important;}.cke_button__autocomplete_icon {background: url(icons.png?t=20af917) no-repeat 0 -384px !important;}.cke_button__autoformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -408px !important;}.cke_button__commentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -432px !important;}.cke_button__searchcode_icon {background: url(icons.png?t=20af917) no-repeat 0 -456px !important;}.cke_button__uncommentselectedrange_icon {background: url(icons.png?t=20af917) no-repeat 0 -480px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -504px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=20af917) no-repeat 0 -528px !important;}.cke_button__creatediv_icon {background: url(icons.png?t=20af917) no-repeat 0 -552px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -576px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png?t=20af917) no-repeat 0 -600px !important;}.cke_button__replace_icon {background: url(icons.png?t=20af917) no-repeat 0 -624px !important;}.cke_button__flash_icon {background: url(icons.png?t=20af917) no-repeat 0 -648px !important;}.cke_button__button_icon {background: url(icons.png?t=20af917) no-repeat 0 -672px !important;}.cke_button__checkbox_icon {background: url(icons.png?t=20af917) no-repeat 0 -696px !important;}.cke_button__form_icon {background: url(icons.png?t=20af917) no-repeat 0 -720px !important;}.cke_button__hiddenfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -744px !important;}.cke_button__imagebutton_icon {background: url(icons.png?t=20af917) no-repeat 0 -768px !important;}.cke_button__radio_icon {background: url(icons.png?t=20af917) no-repeat 0 -792px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -816px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png?t=20af917) no-repeat 0 -840px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -864px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png?t=20af917) no-repeat 0 -888px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -912px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png?t=20af917) no-repeat 0 -936px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=20af917) no-repeat 0 -960px !important;}.cke_button__iframe_icon {background: url(icons.png?t=20af917) no-repeat 0 -984px !important;}.cke_button__image_icon {background: url(icons.png?t=20af917) no-repeat 0 -1008px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1032px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1080px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=20af917) no-repeat 0 -1104px !important;}.cke_button__justifyblock_icon {background: url(icons.png?t=20af917) no-repeat 0 -1128px !important;}.cke_button__justifycenter_icon {background: url(icons.png?t=20af917) no-repeat 0 -1152px !important;}.cke_button__justifyleft_icon {background: url(icons.png?t=20af917) no-repeat 0 -1176px !important;}.cke_button__justifyright_icon {background: url(icons.png?t=20af917) no-repeat 0 -1200px !important;}.cke_button__language_icon {background: url(icons.png?t=20af917) no-repeat 0 -1224px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=20af917) no-repeat 0 -1272px !important;}.cke_button__link_icon {background: url(icons.png?t=20af917) no-repeat 0 -1296px !important;}.cke_button__unlink_icon {background: url(icons.png?t=20af917) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=20af917) no-repeat 0 -1416px !important;}.cke_button__maximize_icon {background: url(icons.png?t=20af917) no-repeat 0 -1440px !important;}.cke_button__oembed_icon {background: url(icons.png?t=20af917) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png?t=20af917) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=20af917) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=20af917) no-repeat 0 -1608px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=20af917) no-repeat 0 -1632px !important;}.cke_button__removespan_icon {background: url(icons.png?t=20af917) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png?t=20af917) no-repeat 0 -1680px !important;}.cke_button__scayt_icon {background: url(icons.png?t=20af917) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png?t=20af917) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png?t=20af917) no-repeat 0 -1776px !important;}.cke_button__smiley_icon {background: url(icons.png?t=20af917) no-repeat 0 -1800px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1824px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=20af917) no-repeat 0 -1848px !important;}.cke_rtl .cke_button__sourcedialog_icon, .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1872px !important;}.cke_ltr .cke_button__sourcedialog_icon {background: url(icons.png?t=20af917) no-repeat 0 -1896px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=20af917) no-repeat 0 -1920px !important;}.cke_button__syntaxhighlight_icon {background: url(icons.png?t=20af917) no-repeat 0 -1944px !important;}.cke_button__table_icon {background: url(icons.png?t=20af917) no-repeat 0 -1968px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -1992px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2040px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2064px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2088px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=20af917) no-repeat 0 -2112px !important;}.cke_button__spellchecker_icon {background: url(icons.png?t=20af917) no-repeat 0 -2136px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -48px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -144px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -240px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -288px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -336px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -384px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -432px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -480px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -528px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -624px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -672px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -720px !important;}.cke_hidpi .cke_button__autocomplete_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -768px !important;}.cke_hidpi .cke_button__autoformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -816px !important;}.cke_hidpi .cke_button__commentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__searchcode_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -912px !important;}.cke_hidpi .cke_button__uncommentselectedrange_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -960px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1008px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1056px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1104px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1152px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1200px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1248px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1296px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1392px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1440px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1488px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1536px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1584px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1632px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1680px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1728px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1776px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1824px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1920px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1968px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2016px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2064px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2112px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2160px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2208px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2256px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2304px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2352px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2400px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2496px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2544px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2592px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2640px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2688px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2736px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2784px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2832px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2880px !important;}.cke_hidpi .cke_button__oembed_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -2976px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3024px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3072px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3120px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3168px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3216px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3264px !important;}.cke_hidpi .cke_button__removespan_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3312px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3360px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3408px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3456px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3504px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3552px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3600px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3648px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3696px !important;}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3840px !important;}.cke_hidpi .cke_button__syntaxhighlight_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3888px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3936px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -3984px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4032px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4080px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4128px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4176px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4224px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png?t=20af917) no-repeat 0 -4272px !important;}
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/elementspath.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/elementspath.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/elementspath.css	(revision 2)
@@ -0,0 +1,76 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+elementspath.css (part of editor.css)
+=======================================
+
+This file styles the "Elements Path", whith is the list of element names
+present at the the bottom bar of the CKEditor interface.
+
+The following is a visual representation of its main elements:
+
++-- .cke_path ---------------------------------------------------------------+
+| +-- .cke_path_item ----+ +-- .cke_path_item ----+ +-- .cke_path_empty ---+ |
+| |                      | |                      | |                      | |
+| +----------------------+ +----------------------+ +----------------------+ |
++----------------------------------------------------------------------------+
+*/
+
+/* The box that holds the entire elements path. */
+.cke_path
+{
+    float: left;
+    margin: -2px 0 2px;
+}
+
+/* Each item of the elements path. */
+a.cke_path_item,
+/* Empty element available at the end of the elements path, to help us keeping
+   the proper box size when the elements path is empty. */
+span.cke_path_empty
+{
+    display: inline-block;
+    float: left;
+    padding: 3px 4px;
+    margin-right: 2px;
+    cursor: default;
+    text-decoration: none;
+    outline: 0;
+    border: 0;
+    color: #4c4c4c;
+    text-shadow: 0 1px 0 #fff;
+    font-weight: bold;
+    font-size: 11px;
+}
+
+.cke_rtl .cke_path,
+.cke_rtl .cke_path_item,
+.cke_rtl .cke_path_empty
+{
+    float: right;
+}
+
+/* The items are <a> elements, so we define its hover states here. */
+a.cke_path_item:hover,
+a.cke_path_item:focus,
+a.cke_path_item:active
+{
+    background-color: #bfbfbf;
+    color: #333;
+    text-shadow: 0 1px 0 rgba(255,255,255,.5);
+
+    border-radius: 2px;
+
+    box-shadow: 0 0 4px rgba(0,0,0,.5) inset, 0 1px 0 rgba(255,255,255,.5);
+}
+
+.cke_hc a.cke_path_item:hover,
+.cke_hc a.cke_path_item:focus,
+.cke_hc a.cke_path_item:active
+{
+    border: 2px solid;
+    padding: 1px 2px;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons.psd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons.psd
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons_hidpi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/icons_hidpi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/arrow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/close.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/close.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/lock-open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/lock-open.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/lock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/refresh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/hidpi/refresh.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/lock-open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/lock-open.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/lock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/refresh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/refresh.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/spinner.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/ckeditor/ckeditor/skins/moonocolor/images/spinner.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/mainui.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/mainui.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/mainui.css	(revision 2)
@@ -0,0 +1,214 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+mainui.css (part of editor.css)
+=================================
+
+This file styles the basic structure of the CKEditor user interface - the box
+that holds everything.
+
+CKEditor offers two main editing modes. The main UI blocks that compose these
+modes are:
+
+    For "Theme UI" mode, the one most generally used:
+
+    +-- .cke_chrome ----------------------+
+    |+-- .cke_inner ---------------------+|
+    || +-- .cke_top -------------------+ ||
+    || |                               | ||
+    || +-------------------------------+ ||
+    || +-- .cke_contents --------------+ ||
+    || |                               | ||
+    || +-------------------------------+ ||
+    || +-- .cke_bottom ----------------+ ||
+    || |                               | ||
+    || +-------------------------------+ ||
+    |+-----------------------------------+|
+    +-------------------------------------+
+
+    For "Inline Editing" mode:
+
+    +-- .cke_chrome .cke_float------------+
+    |+-- .cke_inner ---------------------+|
+    || +-- .cke_top -------------------+ ||
+    || |                               | ||
+    || +-------------------------------+ ||
+    |+-----------------------------------+|
+    +-------------------------------------+
+
+Special outer level classes used in this file:
+
+    .cke_hc: Available when the editor is rendered on "High Contrast".
+
+*/
+
+/* The outer boundary of the interface. */
+.cke_chrome
+{
+    /* This is <span>, so transform it into a block.*/
+    display: block;
+    border: 1px solid #b6b6b6;
+    padding: 0;
+
+    box-shadow: 0 0 3px rgba(0,0,0,.15);
+}
+
+/* The inner boundary of the interface. */
+.cke_inner
+{
+    /* This is <span>, so transform it into a block.*/
+    display: block;
+
+    -webkit-touch-callout: none;
+
+    background: #fff;
+    padding: 0;
+}
+
+/* Added to the outer boundary of the UI when in inline editing,
+   when the UI is floating. */
+.cke_float
+{
+    /* Make white the space between the outer and the inner borders. */
+    border: none;
+}
+
+.cke_float .cke_inner
+{
+    /* As we don't have blocks following top (toolbar) we suppress the padding
+       as the toolbar defines its own margin. */
+    padding-bottom: 0;
+}
+
+/* Make the main spaces enlarge to hold potentially floated content. */
+.cke_top,
+.cke_contents,
+.cke_bottom
+{
+    /* These are <span>s, so transform them into blocks.*/
+    display: block;
+
+    /* Ideally this should be "auto", but it shows scrollbars in IE7. */
+    overflow: hidden;
+}
+
+.cke_top
+{
+    /*border: 1px solid #b2b2b2;*/
+    border-bottom: 1px solid #b6b6b6;
+    padding: 6px 8px 2px;
+
+    /* Allow breaking toolbars when in a narrow editor. (#9947) */
+    white-space: normal;
+
+    box-shadow: 0 1px 0 #fff inset;
+
+    background: #cfd1cf;
+    background-image: linear-gradient(to bottom, #f5f5f5, #cfd1cf);
+    filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f5f5f5', endColorstr='#cfd1cf');
+}
+
+.cke_float .cke_top
+{
+    border: 1px solid #b6b6b6;
+    border-bottom-color: #999;
+}
+
+.cke_bottom
+{
+    padding: 6px 8px 2px;
+    position: relative;
+
+    border-top: 1px solid #bfbfbf;
+
+    box-shadow: 0 1px 0 #fff inset;
+
+    background: #cfd1cf;
+    background-image: linear-gradient(to bottom, #ebebeb, #cfd1cf);
+    filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#ebebeb', endColorstr='#cfd1cf');
+}
+
+/* On iOS we need to manually enable scrolling in the contents block. (#9945) */
+.cke_browser_ios .cke_contents
+{
+    overflow-y: auto;
+    -webkit-overflow-scrolling: touch;
+}
+
+/* The resizer is the small UI element that is rendered at the bottom right
+   part of the editor. It makes is possible to resize the editor UI. */
+.cke_resizer
+{
+    /* To avoid using images for the resizer, we create a small triangle,
+       using some CSS magic. */
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    border-width: 10px 10px 0 0;
+    border-color: transparent #666 transparent transparent;
+    border-style: dashed solid dashed dashed;
+
+    font-size: 0;
+    vertical-align: bottom;
+
+    margin-top: 6px;
+
+    /*     A margin in case of no other element in the same container
+        to keep a distance to the bottom edge. */
+    margin-bottom: 2px;
+
+    box-shadow: 0 1px 0 rgba(255,255,255,.3);
+}
+
+.cke_hc .cke_resizer
+{
+    font-size: 15px;
+    width: auto;
+    height: auto;
+    border-width: 0;
+}
+
+.cke_resizer_ltr
+{
+    cursor: se-resize;
+
+    float: right;
+    margin-right: -4px;
+}
+
+/* This class is added in RTL mode. This is a special case for the resizer
+   (usually the .cke_rtl class is used), because it may not necessarily be in
+   RTL mode if the main UI is RTL. It depends instead on the context where the
+   editor is inserted on. */
+.cke_resizer_rtl
+{
+    border-width: 10px 0 0 10px;
+    border-color: transparent transparent transparent #A5A5A5;
+    border-style: dashed dashed dashed solid;
+
+    cursor: sw-resize;
+
+    float: left;
+    margin-left: -4px;
+    right: auto;
+}
+
+/* The editing area (where users type) can be rendered as an editable <div>
+   element (e.g. divarea plugin). In that case, this is the class applied to
+   that element. */
+.cke_wysiwyg_div
+{
+    display: block;
+    height: 100%;
+    overflow: auto;
+    padding: 0 8px;
+    outline-style: none;
+
+    box-sizing: border-box;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/menu.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/menu.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/menu.css	(revision 2)
@@ -0,0 +1,201 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+menu.css (part of editor.css)
+===============================
+
+This file styles menus used in the editor UI. These menus are the list of
+options available inside some "floating panels", like menu buttons of the
+toolbar or the context menu.
+
+Note that the menu itself doesn't include the floating element that holds it.
+That element is styles in the panel.css file.
+
+The following is a visual representation of the main elements of a menu:
+
++-- .cke_menu -----------------+
+| +-- .cke_menuitem  --------+ |
+| | +-- .cke_menubutton ---+ | |
+| | |                      | | |
+| | +----------------------+ | |
+| +--------------------------+ |
+| +-- .cke_menuseparator ----+ |
+| ...                          |
++------------------------------+
+
+This is the .cke_menubutton structure:
+(Note that the menu button icon shares with toolbar button the common class .cke_button_icon to achieve the same outlook.)
+
++-- .cke_menubutton -------------------------------------------------------------------------+
+| +-- .cke_menubutton_inner ---------------------------------------------------------------+ |
+| | +-- .cke_menubutton_icon ---+ +-- .cke_menubutton_label --+ +-- .cke_cke_menuarrow --+ | |
+| | | +-- .cke_button_icon ---+ | |                           | |                        | | |
+| | | |                       | | |                           | |                        | | |
+| | | +-----------------------+ | |                           | |                        | | |
+| | +---------------------------+ +---------------------------+ +------------------------+ | |
+| +----------------------------------------------------------------------------------------+ |
++--------------------------------------------------------------------------------------------+
+
+Special outer level classes used in this file:
+
+	.cke_hc: Available when the editor is rendered on "High Contrast".
+	.cke_rtl: Available when the editor UI is on RTL.
+*/
+
+/* .cke_menuitem is the element that holds the entire structure of each of the
+   menu items. */
+
+.cke_menubutton
+{
+	/* The "button" inside a menu item is a <a> element.
+	   Transforms it into a block. */
+	display: block;
+}
+
+.cke_menuitem span
+{
+	/* Avoid the text selection cursor inside menu items. */
+	cursor: default;
+}
+
+.cke_menubutton:hover,
+.cke_menubutton:focus,
+.cke_menubutton:active
+{
+	background-color: #D3D3D3;
+	display: block;
+}
+
+.cke_hc .cke_menubutton
+{
+	padding: 2px;
+}
+
+.cke_hc .cke_menubutton:hover,
+.cke_hc .cke_menubutton:focus,
+.cke_hc .cke_menubutton:active
+{
+	border: 2px solid;
+	padding: 0;
+}
+
+.cke_menubutton_inner {
+	display: table-row;
+}
+
+.cke_menubutton_icon,
+.cke_menubutton_label,
+.cke_menuarrow {
+	display: table-cell;
+}
+
+/* The menu item icon. */
+.cke_menubutton_icon
+{
+	background-color: #D7D8D7;
+	opacity: 0.70; /* Safari, Opera and Mozilla */
+	filter: alpha(opacity=70); /* IE */
+	padding: 4px;
+}
+
+.cke_hc .cke_menubutton_icon
+{
+	height: 16px;
+	width: 0;
+	padding: 4px 0;
+}
+
+.cke_menubutton:hover .cke_menubutton_icon,
+.cke_menubutton:focus .cke_menubutton_icon,
+.cke_menubutton:active .cke_menubutton_icon
+{
+	background-color: #D0D2D0;
+}
+
+.cke_menubutton_disabled:hover .cke_menubutton_icon,
+.cke_menubutton_disabled:focus .cke_menubutton_icon,
+.cke_menubutton_disabled:active .cke_menubutton_icon
+{
+	/* The icon will get opacity as well when hovered. */
+	opacity: 0.3;
+	filter: alpha(opacity=30);
+}
+
+/* The textual part of each menu item. */
+.cke_menubutton_label
+{
+	padding: 0 5px;
+	background-color: transparent;
+	width: 100%;
+	vertical-align: middle;
+}
+
+.cke_menubutton_disabled .cke_menubutton_label
+{
+	/* Greyed label text indicates a disabled menu item. */
+	opacity: 0.3;
+	filter: alpha(opacity=30);
+}
+
+.cke_menubutton_on
+{
+	border: 1px solid #dedede;
+	background-color: #f2f2f2;
+
+	box-shadow: 0 0 2px rgba(0,0,0,.1) inset;
+}
+
+.cke_menubutton_on .cke_menubutton_icon
+{
+	padding-right: 3px;
+}
+
+.cke_menubutton:hover,
+.cke_menubutton:focus,
+.cke_menubutton:active
+{
+	background-color: #EFF0EF;
+}
+
+.cke_panel_frame .cke_menubutton_label
+{
+	display: none;
+}
+
+/* The separator used to separate menu item groups. */
+.cke_menuseparator
+{
+	background-color: #D3D3D3;
+	height: 1px;
+	filter: alpha(opacity=70); /* IE */
+	opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+/* The small arrow shown for item with sub-menus. */
+.cke_menuarrow
+{
+	background-image: url(images/arrow.png);
+	background-position: 0 10px;
+	background-repeat: no-repeat;
+	padding: 0 5px;
+}
+
+.cke_rtl .cke_menuarrow
+{
+	background-position: 5px -13px;
+	background-repeat: no-repeat;
+}
+
+.cke_menuarrow span
+{
+	display: none;
+}
+
+.cke_hc .cke_menuarrow span
+{
+	vertical-align: middle;
+	display: inline;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/notification.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/notification.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/notification.css	(revision 2)
@@ -0,0 +1,168 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/**
+ * Progress notification structure:
+ *
+ * +---div.cke_notification cke_notification_info--------------------------+
+ * |                                                                       |
+ * | +---div.cke_notification_progress-----------------------------------+ |
+ * | |                                                                   | |
+ * | +-------------------------------------------------------------------+ |
+ * |                                                                       |
+ * | +---p.cke_notification_message--------------------------------------+ |
+ * | | Foo                                                               | |
+ * | +-------------------------------------------------------------------+ |
+ * |                                                                       |
+ * | +---a.cke_notification_close----------------------------------------+ |
+ * | | +---span.cke_label----------------------------------------------+ | |
+ * | | | X                                                             | | |
+ * | | +---------------------------------------------------------------+ | |
+ * | +-------------------------------------------------------------------+ |
+ * |                                                                       |
+ * +-----------------------------------------------------------------------+
+ *
+ *
+ * Warning notification structure:
+ *
+ * +---div.cke_notification cke_notification_warning-----------------------+
+ * |                                                                       |
+ * | +---p.cke_notification_message--------------------------------------+ |
+ * | | Foo                                                               | |
+ * | +-------------------------------------------------------------------+ |
+ * |                                                                       |
+ * | +---a.cke_notification_close----------------------------------------+ |
+ * | | +---span.cke_label----------------------------------------------+ | |
+ * | | | X                                                             | | |
+ * | | +---------------------------------------------------------------+ | |
+ * | +-------------------------------------------------------------------+ |
+ * |                                                                       |
+ * +-----------------------------------------------------------------------+
+ *
+ * Success and info notifications have the same structure as warning, but use
+ * `cke_notification_success` and `cke_notification_info` instead of `cke_notification_warning`.
+ */
+.cke_notifications_area
+{
+	/* Prevent notification margin capture clicking. */
+	pointer-events: none;
+}
+.cke_notification
+{
+	pointer-events: auto;
+	position: relative;
+	margin: 10px;
+	width: 300px;
+	color: white;
+	border-radius: 3px;
+	text-align: center;
+	opacity: 0.95;
+	filter: alpha(opacity = 95);
+	box-shadow: 2px 2px 3px 0px rgba(50, 50, 50, 0.3);
+
+	-webkit-animation: fadeIn 0.7s;
+	animation: fadeIn 0.7s;
+}
+
+.cke_notification_message a
+{
+	color: #12306F;
+}
+
+@-webkit-keyframes fadeIn
+{
+	from { opacity: 0.4; }
+	to { opacity: 0.95; }
+}
+
+@keyframes fadeIn
+{
+	from { opacity: 0.4; }
+	to { opacity: 0.95; }
+}
+
+.cke_notification_success
+{
+	background: #72B572;
+	border: 1px solid #63A563;
+}
+
+.cke_notification_warning
+{
+	background: #C83939;
+	border: 1px solid #902B2B;
+}
+
+.cke_notification_info
+{
+	background: #2E9AD0;
+	border: 1px solid #0F74A8;
+}
+
+.cke_notification_info span.cke_notification_progress
+{
+	background-color: #0F74A8;
+	display: block;
+	padding: 0;
+	margin: 0;
+	height: 100%;
+	overflow: hidden;
+	position: absolute;
+	z-index: 1;
+}
+
+.cke_notification_message
+{
+	position: relative;
+	margin: 4px 23px 3px;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 12px;
+	line-height: 18px;
+	z-index: 4;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.cke_notification_close
+{
+	background-image: url(images/close.png);
+	background-repeat: no-repeat;
+	background-position: 50%;
+	position: absolute;
+	cursor: pointer;
+	text-align: center;
+	height: 20px;
+	width: 20px;
+	top: 1px;
+	right: 1px;
+	padding: 0;
+	margin: 0;
+	z-index: 5;
+	opacity: 0.6;
+	filter: alpha(opacity = 60);
+}
+
+.cke_notification_close:hover
+{
+	opacity: 1;
+	filter: alpha(opacity = 100);
+}
+
+.cke_notification_close span
+{
+	display: none;
+}
+
+.cke_notification_warning a.cke_notification_close
+{
+	opacity: 0.8;
+	filter: alpha(opacity = 80);
+}
+
+.cke_notification_warning a.cke_notification_close:hover
+{
+	opacity: 1;
+	filter: alpha(opacity = 100);
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/panel.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/panel.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/panel.css	(revision 2)
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+panel.css (part of editor.css)
+================================
+
+Panels are floating elements that can hold different types of contents.
+The following are common uses of it:
+
+	- The element that toolbar combos display when opening them.
+	- The context menu.
+	- The list of items displayed by "menu buttons" (e.g. scayt).
+	- The panel shown when opening "panel buttons" (e.g. color buttons).
+
+Panel contents are wrapped into an iframe, so it is possible to have additional
+CSS loaded inside them (e.g. to have more accurate preview on the styles combo).
+
+The following is a visual representation of the outer elements of a panel:
+
++-- .cke_panel(*) ---------------------+
+| +-- IFRAME.cke_panel_frame --------+ |
+| | +-- HTML.cke_panel_container --+ | |
+| | | +-- .cke_panel_block ------+ | | |
+| | | |                          | | | |
+| | | |     (contents here)      | | | |
+| | | |                          | | | |
+| | | +--------------------------+ | | |
+| | +------------------------------+ | |
+| +----------------------------------+ |
++--------------------------------------+
+
+(*) All kinds of panel share the above structure. Menu panels adds the
+    .cke_menu_panel class to the outer element, while toolbar combos add the
+	.cke_combopanel class.
+
+This file also defines styles for panel lists (used by combos). For menu-like
+panel contents and color panels check menu.css and colorpanel.css.
+*/
+
+/* The box that holds an IFRAME. It's inserted into a host document and positioned
+   absolutely by the application. It floats above the host document/editor. */
+.cke_panel
+{
+	/* Restore the loading hide */
+	visibility: visible;
+    width: 120px;
+   	height: 100px;
+   	overflow: hidden;
+
+	background-color: #fff;
+    border: 1px solid #b6b6b6;
+    border-bottom-color: #999;
+
+   	border-radius: 3px;
+
+    box-shadow: 0 0 3px rgba(0,0,0,.15);
+}
+
+/* This class represents panels which are used as context menus. */
+.cke_menu_panel
+{
+	padding: 0;
+	margin: 0;
+}
+
+/* This class represents panels which are used by rich combos. */
+.cke_combopanel
+{
+    width: 150px;
+    height: 170px;
+}
+
+/* The IFRAME the panel is wrapped into. */
+.cke_panel_frame
+{
+	width: 100%;
+	height: 100%;
+	font-size: 12px;
+
+	overflow: auto;
+	overflow-x: hidden;
+}
+
+/* The HTML document which is a direct descendant of the IFRAME */
+.cke_panel_container
+{
+	overflow-y: auto;
+	overflow-x: hidden;
+}
+
+/*
+Here we start the definition of panel lists (e.g. combo panels). The following
+is its visual representation:
+
++-- .cke_panel_block -----------------+
+| +-- .cke_panel_grouptitle --------+ |
+| |                                 | |
+| +---------------------------------+ |
+| +-- .cke_panel_list --------------+ |
+| | +-- .cke_panel_listItem ------+ | |
+| | | +-- a --------------------+ | | |
+| | | | +-- span -------------+ | | | |
+| | | | |                     | | | | |
+| | | | +---------------------+ | | | |
+| | | +-------------------------+ | | |
+| | +-----------------------------+ | |
+| | +-- .cke_panel_listItem ------+ | |
+| | | +-- a --------------------+ | | |
+| | | | +-- span -------------+ | | | |
+| | | | |                     | | | | |
+| | | | +---------------------+ | | | |
+| | | +-------------------------+ | | |
+| | +-----------------------------+ | |
+| | ...                             | |
+| +---------------------------------+ |
++-------------------------------------+
+*/
+
+
+/* The list of panel items. */
+.cke_panel_list
+{
+	list-style-type: none;
+	margin: 3px;
+	padding: 0;
+	white-space: nowrap;
+}
+
+/* The item of .cke_panel_list */
+.cke_panel_listItem
+{
+	margin: 0;
+    padding-bottom: 1px;
+}
+
+/* The child of .cke_panel_listItem. These elements contain spans which are
+   to display a real name of the property which is visible for an end-user. */
+.cke_panel_listItem a
+{
+	padding: 3px 4px;
+	display: block;
+	border: 1px solid #fff;
+	color: inherit !important;
+	text-decoration: none;
+	overflow: hidden;
+	text-overflow: ellipsis;
+
+    border-radius: 2px;
+}
+
+/* IE6 */
+* html .cke_panel_listItem a
+{
+	width : 100%;
+
+	/* IE is not able to inherit the color, so we must force it to black */
+	color: #000;
+}
+
+/* IE7 */
+*:first-child+html .cke_panel_listItem a
+{
+	/* IE is not able to inherit the color, so we must force it to black */
+	color: #000;
+}
+
+.cke_panel_listItem.cke_selected a
+{
+	border: 1px solid #dedede;
+	background-color: #f2f2f2;
+
+    box-shadow: 0 0 2px rgba(0,0,0,.1) inset;
+}
+
+.cke_panel_listItem a:hover,
+.cke_panel_listItem a:focus,
+.cke_panel_listItem a:active
+{
+	border-color: #dedede;
+	background-color: #f2f2f2;
+
+    box-shadow: 0 0 2px rgba(0,0,0,.1) inset;
+}
+
+.cke_hc .cke_panel_listItem a
+{
+	border-style: none;
+}
+
+.cke_hc .cke_panel_listItem a:hover,
+.cke_hc .cke_panel_listItem a:focus,
+.cke_hc .cke_panel_listItem a:active
+{
+	border: 2px solid;
+	padding: 1px 2px;
+}
+
+/* The title of the entire panel which is visible on top of the list. */
+.cke_panel_grouptitle
+{
+	cursor: default;
+	font-size: 11px;
+	font-weight: bold;
+	white-space: nowrap;
+	margin: 0;
+	padding: 4px 6px;
+
+    color: #474747;
+    text-shadow: 0 1px 0 rgba(255,255,255,.75);
+    border-bottom: 1px solid #b6b6b6;
+
+    border-radius: 2px 2px 0 0;
+
+    box-shadow: 0 1px 0 #fff inset;
+
+    background: #cfd1cf;
+    background-image: linear-gradient(to bottom, #f5f5f5, #cfd1cf);
+    filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f5f5f5', endColorstr='#cfd1cf');
+}
+
+/* The following styles set defaults of the elements used by the Paragraph
+   Format panel. */
+.cke_panel_listItem p,
+.cke_panel_listItem h1,
+.cke_panel_listItem h2,
+.cke_panel_listItem h3,
+.cke_panel_listItem h4,
+.cke_panel_listItem h5,
+.cke_panel_listItem h6,
+.cke_panel_listItem pre
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/presets.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/presets.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/presets.css	(revision 2)
@@ -0,0 +1,47 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/* "Source" button label */
+.cke_button__source_label,
+.cke_button__sourcedialog_label
+{
+    display: inline;
+}
+
+/* "Font Size" combo width */
+.cke_combo__font .cke_combo_text,
+.cke_combo__format .cke_combo_text,
+.cke_combo__style .cke_combo_text, 
+.cke_combo__fontsize .cke_combo_text
+{
+    width: 5em;
+}
+
+/* "Font Size" panel size */
+.cke_combopanel__font,
+.cke_combopanel__format,
+.cke_combopanel__styles, 
+.cke_combopanel__fontsize
+{
+    width: auto;
+}
+
+/* Editable regions */
+textarea.cke_source
+{
+    font-family: 'Courier New', Monospace;
+    font-size: small;
+    background-color: #fff;
+    white-space: pre-wrap;
+    border: none;
+    padding: 0;
+    margin: 0;
+    display: block;
+}
+
+.cke_wysiwyg_frame, .cke_wysiwyg_div
+{
+    background-color: #fff;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/readme.md
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/readme.md	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/readme.md	(revision 2)
@@ -0,0 +1,51 @@
+"Moono" Skin
+====================
+
+This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
+[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
+the CKEditor team. "Moono" is maintained by the core developers.
+
+For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
+documentation.
+
+Features
+-------------------
+"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
+It comes with the following features:
+
+- Chameleon feature with brightness,
+- high-contrast compatibility,
+- graphics source provided in SVG.
+
+Directory Structure
+-------------------
+
+CSS parts:
+- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
+- **mainui.css**: the file contains styles of entire editor outline structures,
+- **toolbar.css**: the file contains styles of the editor toolbar space (top),
+- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
+- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
+until the first panel open up,
+- **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
+- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
+it's not loaded until the first menu open up,
+- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
+- **reset.css**: the file defines the basis of style resets among all editor UI spaces,
+- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
+- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
+
+Other parts:
+- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
+- **icons/**: contains all skin defined icons,
+- **images/**: contains a fill general used images,
+- **dev/**: contains SVG source of the skin icons.
+
+License
+-------
+
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
+
+See LICENSE.md for more information.
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/reset.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/reset.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/reset.css	(revision 2)
@@ -0,0 +1,115 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+reset.css (part of editor.css)
+================================
+
+This file holds the "reset" requirements of CKEditor, as well as define the
+default interface styles.
+
+CKEditor includes two main "reset" class names in the DOM structure created for
+editors:
+
+	* .cke_reset: Intended to reset a specific element, but not its children.
+	  Because of this, only styles that will not be inherited can be defined.
+
+	* .cke_reset_all: Intended to reset not only the element holding it, but
+	   also its child elements.
+
+To understand why "reset" is needed, check the CKEditor Skin SDK:
+http://docs.cksource.com/CKEditor_4.x/Skin_SDK/Reset
+*/
+
+/* Reset for single elements, not their children. */
+.cke_reset
+{
+	/* Do not include inheritable rules here. */
+	margin: 0;
+	padding: 0;
+	border: 0;
+	background: transparent;
+	text-decoration: none;
+	width: auto;
+	height: auto;
+	vertical-align: baseline;
+	box-sizing: content-box;
+	position: static;
+	transition: none;
+}
+
+/* Reset for elements and their children. */
+.cke_reset_all, .cke_reset_all *,
+.cke_reset_all a, .cke_reset_all textarea
+{
+	/* The following must be identical to .cke_reset. */
+	margin: 0;
+	padding: 0;
+	border: 0;
+	background: transparent;
+	text-decoration: none;
+	width: auto;
+	height: auto;
+	vertical-align: baseline;
+	box-sizing: content-box;
+	position: static;
+	transition: none;
+
+	/* These are rule inherited by all children elements. */
+	border-collapse: collapse;
+	font: normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;
+	color: #000;
+	text-align: left;
+	white-space: nowrap;
+	cursor: auto;
+	float: none;
+}
+
+.cke_reset_all .cke_rtl *
+{
+	text-align: right;
+}
+
+/* Defaults for some elements. */
+
+.cke_reset_all iframe
+{
+	vertical-align: inherit;	/** For IE */
+}
+
+.cke_reset_all textarea
+{
+	white-space: pre-wrap;
+}
+
+.cke_reset_all textarea,
+.cke_reset_all input[type="text"],
+.cke_reset_all input[type="password"]
+{
+	cursor: text;
+}
+
+.cke_reset_all textarea[disabled],
+.cke_reset_all input[type="text"][disabled],
+.cke_reset_all input[type="password"][disabled]
+{
+	cursor: default;
+}
+
+.cke_reset_all fieldset
+{
+	padding: 10px;
+	border: 2px groove #E0DFE3;
+}
+
+.cke_reset_all select
+{
+	box-sizing: border-box;
+}
+
+.cke_reset_all table
+{
+	table-layout: auto;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/richcombo.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/richcombo.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/richcombo.css	(revision 2)
@@ -0,0 +1,210 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+richcombo.css (part of editor.css)
+=================================
+
+This file holds the style set of the "Rich Combo" widget which is commonly used
+in the toolbar. It doesn't, however, styles the panel that is displayed when
+clicking on the combo, which is instead styled by panel.css.
+
+The visual representation of a rich combo widget looks as follows:
+
++-- .cke_combo----------------------------------------------------------------------+
+| +-- .cke_combo_label --+ +-- .cke_combo_button ---------------------------------+ |
+| |                      | | +-- .cke_combo_text --+ +-- .cke_combo_open -------+ | |
+| |                      | | |                     | | +-- .cke_combo_arrow --+ | | |
+| |                      | | |                     | | |                      | | | |
+| |                      | | |                     | | +----------------------+ | | |
+| |                      | | +---------------------+ +--------------------------+ | |
+| +----------------------+ +------------------------------------------------------+ |
++-----------------------------------------------------------------------------------+
+*/
+
+/* The box that hold the entire combo widget */
+.cke_combo
+{
+	display: inline-block;
+	float: left;
+}
+
+.cke_rtl .cke_combo
+{
+	float: right;
+}
+
+.cke_hc .cke_combo
+{
+	margin-top: -2px;
+}
+
+/* The label of the combo widget. It is invisible by default, yet
+   it's important for semantics and accessibility. */
+.cke_combo_label
+{
+	display: none;
+	float: left;
+	line-height: 26px;
+	vertical-align: top;
+	margin-right: 5px;
+}
+
+.cke_rtl .cke_combo_label
+{
+	float: right;
+	margin-left: 5px;
+	margin-right: 0;
+}
+
+/* The container for combo text and arrow. */
+a.cke_combo_button
+{
+	cursor: default;
+	display: inline-block;
+	float: left;
+	margin: 0 6px 5px 0;
+
+	border: 1px solid #a6a6a6;
+	border-bottom-color: #979797;
+
+	border-radius: 3px;
+
+	box-shadow: 0 1px 0 rgba(255,255,255,.5), 0 0 2px rgba(255,255,255,.15) inset, 0 1px 0 rgba(255,255,255,.15) inset;
+
+	background: #e4e4e4;
+	background-image: linear-gradient(to bottom, #ffffff, #e4e4e4);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#ffffff', endColorstr='#e4e4e4');
+}
+
+/* Different states of the container. */
+.cke_combo_off a.cke_combo_button:hover,
+.cke_combo_off a.cke_combo_button:focus
+{
+	background: #ccc;
+	background-image: linear-gradient(to bottom, #f2f2f2, #ccc);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f2f2f2', endColorstr='#cccccc');
+
+	outline: none;
+}
+
+.cke_combo_off a.cke_combo_button:active,
+.cke_combo_on a.cke_combo_button
+{
+	border: 1px solid #777;
+
+	box-shadow: 0 1px 0 rgba(255,255,255,.5), 0 1px 5px rgba(0,0,0,.6) inset;
+
+	background: #b5b5b5;
+	background-image: linear-gradient(to bottom, #aaa, #cacaca);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#aaaaaa', endColorstr='#cacaca');
+}
+
+.cke_combo_on a.cke_combo_button:hover,
+.cke_combo_on a.cke_combo_button:focus,
+.cke_combo_on a.cke_combo_button:active
+{
+	box-shadow: 0 1px 6px rgba(0,0,0,.7) inset, 0 1px 0 rgba(0,0,0,.2);
+}
+
+.cke_rtl .cke_combo_button
+{
+	float: right;
+	margin-left: 5px;
+	margin-right: 0;
+}
+
+.cke_hc a.cke_combo_button
+{
+	padding: 3px;
+}
+
+.cke_hc .cke_combo_on a.cke_combo_button,
+.cke_hc .cke_combo_off a.cke_combo_button:hover,
+.cke_hc .cke_combo_off a.cke_combo_button:focus,
+.cke_hc .cke_combo_off a.cke_combo_button:active
+{
+	border-width: 3px;
+	padding: 1px;
+}
+
+/* The label that shows the current value of the rich combo.
+   By default, it holds the name of the property.
+   See: .cke_combo_inlinelabel */
+.cke_combo_text
+{
+	line-height: 26px;
+	padding-left: 10px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	float: left;
+	cursor: default;
+	color: #474747;
+	text-shadow: 0 1px 0 rgba(255,255,255,.5);
+    width: 60px;
+}
+
+.cke_rtl .cke_combo_text
+{
+	float: right;
+	text-align: right;
+	padding-left: 0;
+	padding-right: 10px;
+}
+
+.cke_hc .cke_combo_text
+{
+	line-height: 18px;
+	font-size: 12px;
+}
+
+/* The handler which opens the panel of rich combo properties.
+   It holds an arrow as a visual indicator. */
+.cke_combo_open
+{
+	cursor: default;
+	display: inline-block;
+	font-size: 0;
+	height: 19px;
+	line-height: 17px;
+	margin: 1px 7px 1px;
+	width: 5px;
+}
+
+.cke_hc .cke_combo_open
+{
+	height: 12px;
+}
+
+/* The arrow which is displayed inside of the .cke_combo_open handler. */
+.cke_combo_arrow
+{
+	cursor: default;
+	margin: 11px 0 0;
+	float: left;
+
+	/* Pure CSS Arrow */
+	height: 0;
+	width: 0;
+	font-size: 0;
+	border-left: 3px solid transparent;
+	border-right: 3px solid transparent;
+	border-top: 3px solid #474747;
+}
+
+.cke_hc .cke_combo_arrow
+{
+	font-size: 10px;
+	width: auto;
+	border: 0;
+	margin-top: 3px;
+}
+
+/* Disabled combo button styles. */
+.cke_combo_disabled .cke_combo_inlinelabel,
+.cke_combo_disabled .cke_combo_open
+{
+	opacity: 0.3;
+}
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/skin.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/skin.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/skin.js	(revision 2)
@@ -0,0 +1,10 @@
+﻿/*
+ Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.skin.name="moonocolor";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8";
+CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:linear-gradient(to bottom,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c,a){return b.output({from:c,
+to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),
+panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
+return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g,
+"{").replace(/\]/g,"}")}}();
\ No newline at end of file
Index: trunk/modules/ckeditor/ckeditor/skins/moonocolor/toolbar.css
===================================================================
--- trunk/modules/ckeditor/ckeditor/skins/moonocolor/toolbar.css	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/skins/moonocolor/toolbar.css	(revision 2)
@@ -0,0 +1,387 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+/*
+toolbar.css (part of editor.css)
+==================================
+
+This files styles the CKEditor toolbar and its buttons. For toolbar combo
+styles, check richcombo.css.
+
+The toolbar is rendered as a big container (called toolbox), which contains
+smaller "toolbars". Each toolbar represents a group of items that cannot be
+separated. The following is the visual representation of the toolbox.
+
++-- .cke_toolbox ----------------------------------------------------------+
+| +-- .cke_toolbar --+ +-- .cke_toolbar --+ ... +-- .cke_toolbar_break --+ |
+| |                  | |                  |     |                        | |
+| +------------------+ +------------------+     +------------------------+ |
+| +-- .cke_toolbar --+ +-- .cke_toolbar --+ ...                            |
+| |                  | |                  |                                |
+| +------------------+ +------------------+                                |
++--------------------------------------------------------------------------+
+
+The following instead is the visual representation of a single toolbar:
+
++-- .cke_toolbar ----------------------------------------------------------------+
+| +-- .cke_toolbar_start --+ +-- .cke_toolgroup (*) --+ +-- .cke_toolbar_end --+ |
+| |                        | |                        | |                      | |
+| +------------------------+ +------------------------+ +----------------------+ |
++--------------------------------------------------------------------------------+
+(*) .cke_toolgroup is available only when the toolbar items can be grouped
+    (buttons). If the items can't be group (combos), this box is not available
+	and the items are rendered straight in that place.
+
+This file also styles toolbar buttons, which are rendered inside the above
+.cke_toolgroup containers. This is the visual representation of a button:
+
++-- .cke_button -------------------------------------+
+| +-- .cke_button_icon --+ +-- .cke_button_label --+ |
+| |                      | |                       | |
+| +----------------------+ +-----------------------+ |
++----------------------------------------------------+
+
+Special outer level classes used in this file:
+
+	.cke_hc: Available when the editor is rendered on "High Contrast".
+	.cke_rtl: Available when the editor UI is on RTL.
+*/
+
+/* The box that holds each toolbar. */
+.cke_toolbar
+{
+	float: left;
+}
+
+.cke_rtl .cke_toolbar
+{
+	float: right;
+}
+
+/* The box that holds buttons. */
+.cke_toolgroup
+{
+	float: left;
+	margin: 0 6px 5px 0;
+	border: 1px solid #a6a6a6;
+	border-bottom-color: #979797;
+
+	border-radius: 3px;
+
+	box-shadow: 0 1px 0 rgba(255,255,255,.5), 0 0 2px rgba(255,255,255,.15) inset, 0 1px 0 rgba(255,255,255,.15) inset;
+
+	background: #e4e4e4;
+	background-image: linear-gradient(to bottom, #ffffff, #e4e4e4);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#ffffff', endColorstr='#e4e4e4');
+}
+
+.cke_hc .cke_toolgroup
+{
+	border: 0;
+	margin-right: 10px;
+	margin-bottom: 10px;
+}
+
+.cke_rtl .cke_toolgroup
+{
+	float: right;
+	margin-left: 6px;
+	margin-right: 0;
+}
+
+/* A toolbar button . */
+a.cke_button
+{
+	display: inline-block;
+	height: 18px;
+	padding: 4px 6px;
+	outline: none;
+	cursor: default;
+	float: left;
+	border: 0;
+}
+
+.cke_ltr .cke_button:last-child,
+.cke_rtl .cke_button:first-child
+{
+	/* Don't distort parent's rounded border. */
+	border-radius: 0 2px 2px 0;
+}
+
+.cke_ltr .cke_button:first-child,
+.cke_rtl .cke_button:last-child
+{
+	/* Don't distort parent's rounded border. */
+	border-radius: 2px 0 0 2px;
+}
+
+.cke_rtl .cke_button
+{
+	float: right;
+}
+
+.cke_hc .cke_button
+{
+	border: 1px solid black;
+
+	/* Compensate the added border */
+	padding: 3px 5px;
+	margin: -2px 4px 0 -2px;
+}
+
+/* This class is applied to the button when it is "active" (pushed).
+   This style indicates that the feature associated with the button is active
+   i.e. currently writing in bold or when spell checking is enabled. */
+a.cke_button_on
+{
+	box-shadow: 0 1px 5px rgba(0,0,0,.6) inset, 0 1px 0 rgba(0,0,0,.2);
+
+	background: #b5b5b5;
+	background-image: linear-gradient(to bottom, #aaa, #cacaca);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#aaaaaa', endColorstr='#cacaca');
+}
+
+.cke_hc .cke_button_on,
+.cke_hc a.cke_button_off:hover,
+.cke_hc a.cke_button_off:focus,
+.cke_hc a.cke_button_off:active,
+.cke_hc a.cke_button_disabled:hover,
+.cke_hc a.cke_button_disabled:focus,
+.cke_hc a.cke_button_disabled:active
+{
+	border-width: 3px;
+
+	/* Compensate the border change */
+	padding: 1px 3px;
+}
+
+/* This class is applied to the button when the feature associated with the
+   button cannot be used (grayed-out).
+   i.e. paste button remains disabled when there is nothing in the clipboard to
+   be pasted. */
+.cke_button_disabled .cke_button_icon
+{
+	opacity: 0.3;
+}
+
+.cke_hc .cke_button_disabled
+{
+	opacity: 0.5;
+}
+
+a.cke_button_on:hover,
+a.cke_button_on:focus,
+a.cke_button_on:active
+{
+	box-shadow: 0 1px 6px rgba(0,0,0,.7) inset, 0 1px 0 rgba(0,0,0,.2);
+}
+
+a.cke_button_off:hover,
+a.cke_button_off:focus,
+a.cke_button_off:active,
+a.cke_button_disabled:hover,
+a.cke_button_disabled:focus,
+a.cke_button_disabled:active
+{
+	box-shadow: 0 0 1px rgba(0,0,0,.3) inset;
+
+	background: #ccc;
+	background-image: linear-gradient(to bottom, #f2f2f2, #ccc);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f2f2f2', endColorstr='#cccccc');
+}
+
+/* The icon which is a visual representation of the button. */
+.cke_button_icon
+{
+	cursor: inherit;
+	background-repeat: no-repeat;
+	margin-top: 1px;
+	width: 16px;
+	height: 16px;
+	float: left;
+	display: inline-block;
+}
+
+.cke_rtl .cke_button_icon
+{
+	float: right;
+}
+
+.cke_hc .cke_button_icon
+{
+	display: none;
+}
+
+/* The label of the button that stores the name of the feature. By default,
+   labels are invisible. They can be revealed on demand though. */
+.cke_button_label
+{
+	display: none;
+	padding-left: 3px;
+	margin-top: 1px;
+	line-height: 17px;
+	vertical-align: middle;
+	float: left;
+	cursor: default;
+	color: #474747;
+	text-shadow: 0 1px 0 rgba(255,255,255,.5);
+}
+
+.cke_rtl .cke_button_label
+{
+	padding-right: 3px;
+	padding-left: 0;
+	float: right;
+}
+
+.cke_hc .cke_button_label
+{
+	padding: 0;
+	display: inline-block;
+	font-size: 12px;
+}
+
+/* The small arrow available on buttons that can be expanded
+   (e.g. the color buttons). */
+.cke_button_arrow
+{
+	/* Arrow in CSS */
+	display: inline-block;
+	margin: 8px 0 0 1px;
+	width: 0;
+	height: 0;
+	cursor: default;
+	vertical-align: top;
+	border-left: 3px solid transparent;
+	border-right: 3px solid transparent;
+	border-top: 3px solid #474747;
+}
+
+.cke_rtl .cke_button_arrow
+{
+	margin-right: 5px;
+	margin-left: 0;
+}
+
+.cke_hc .cke_button_arrow
+{
+	font-size: 10px;
+	margin: 3px -2px 0 3px;
+	width: auto;
+	border: 0;
+}
+
+/* The vertical separator which is used within a single toolbar to split
+   buttons into sub-groups. */
+.cke_toolbar_separator
+{
+	float: left;
+	background-color: #c0c0c0;
+	background-color: rgba(0,0,0,.2);
+	margin: 5px 2px 0;
+	height: 18px;
+	width: 1px;
+
+	box-shadow: 1px 0 1px rgba(255,255,255,.5);
+}
+
+.cke_rtl .cke_toolbar_separator
+{
+	float: right;
+
+	box-shadow: -1px 0 1px rgba(255,255,255,.1);
+}
+
+.cke_hc .cke_toolbar_separator
+{
+	width: 0;
+	border-left: 1px solid;
+	margin: 1px 5px 0 0px;
+}
+
+/* The dummy element that breaks toolbars.
+   Once it is placed, the very next toolbar is moved to the new row. */
+.cke_toolbar_break
+{
+	display: block;
+	clear: left;
+}
+
+.cke_rtl .cke_toolbar_break
+{
+	clear: right;
+}
+
+/* The button, which when clicked hides (collapses) all the toolbars. */
+a.cke_toolbox_collapser
+{
+	width: 12px;
+	height: 11px;
+	float: right;
+	margin: 11px 0 0;
+	font-size: 0;
+	cursor: default;
+	text-align: center;
+
+	border: 1px solid #a6a6a6;
+	border-bottom-color: #979797;
+
+	border-radius: 3px;
+
+	box-shadow: 0 1px 0 rgba(255,255,255,.5), 0 0 2px rgba(255,255,255,.15) inset, 0 1px 0 rgba(255,255,255,.15) inset;
+
+	background: #e4e4e4;
+	background-image: linear-gradient(to bottom, #ffffff, #e4e4e4);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#ffffff', endColorstr='#e4e4e4');
+}
+
+.cke_toolbox_collapser:hover
+{
+	background: #ccc;
+	background-image: linear-gradient(to bottom, #f2f2f2, #ccc);
+	filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f2f2f2', endColorstr='#cccccc');
+}
+
+.cke_toolbox_collapser.cke_toolbox_collapser_min
+{
+	margin: 0 2px 4px;
+}
+
+.cke_rtl .cke_toolbox_collapser
+{
+	float: left;
+}
+
+/* The CSS arrow, which belongs to the toolbar collapser. */
+.cke_toolbox_collapser .cke_arrow
+{
+	display: inline-block;
+
+	/* Pure CSS Arrow */
+	height: 0;
+	width: 0;
+	font-size: 0;
+	margin-top: 1px;
+	border-left: 3px solid transparent;
+	border-right: 3px solid transparent;
+	border-bottom: 3px solid #474747;
+	border-top: 3px solid transparent;
+}
+
+.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow
+{
+	margin-top: 4px;
+	border-bottom-color: transparent;
+	border-top-color: #474747;
+}
+
+.cke_hc .cke_toolbox_collapser .cke_arrow
+{
+	font-size: 8px;
+	width: auto;
+	border: 0;
+	margin-top: 0;
+	margin-right: 2px;
+}
Index: trunk/modules/ckeditor/ckeditor/styles.js
===================================================================
--- trunk/modules/ckeditor/ckeditor/styles.js	(nonexistent)
+++ trunk/modules/ckeditor/ckeditor/styles.js	(revision 2)
@@ -0,0 +1,137 @@
+﻿/**
+ * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+// This file contains style definitions that can be used by CKEditor plugins.
+//
+// The most common use for it is the "stylescombo" plugin which shows the Styles drop-down
+// list containing all styles in the editor toolbar. Other plugins, like
+// the "div" plugin, use a subset of the styles for their features.
+//
+// If you do not have plugins that depend on this file in your editor build, you can simply
+// ignore it. Otherwise it is strongly recommended to customize this file to match your
+// website requirements and design properly.
+//
+// For more information refer to: http://docs.ckeditor.com/#!/guide/dev_styles-section-style-rules
+
+CKEDITOR.stylesSet.add( 'default', [
+	/* Block styles */
+
+	// These styles are already available in the "Format" drop-down list ("format" plugin),
+	// so they are not needed here by default. You may enable them to avoid
+	// placing the "Format" combo in the toolbar, maintaining the same features.
+	/*
+	{ name: 'Paragraph',		element: 'p' },
+	{ name: 'Heading 1',		element: 'h1' },
+	{ name: 'Heading 2',		element: 'h2' },
+	{ name: 'Heading 3',		element: 'h3' },
+	{ name: 'Heading 4',		element: 'h4' },
+	{ name: 'Heading 5',		element: 'h5' },
+	{ name: 'Heading 6',		element: 'h6' },
+	{ name: 'Preformatted Text',element: 'pre' },
+	{ name: 'Address',			element: 'address' },
+	*/
+
+	{ name: 'Italic Title',		element: 'h2', styles: { 'font-style': 'italic' } },
+	{ name: 'Subtitle',			element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
+	{
+		name: 'Special Container',
+		element: 'div',
+		styles: {
+			padding: '5px 10px',
+			background: '#eee',
+			border: '1px solid #ccc'
+		}
+	},
+
+	/* Inline styles */
+
+	// These are core styles available as toolbar buttons. You may opt enabling
+	// some of them in the Styles drop-down list, removing them from the toolbar.
+	// (This requires the "stylescombo" plugin.)
+	/*
+	{ name: 'Strong',			element: 'strong', overrides: 'b' },
+	{ name: 'Emphasis',			element: 'em'	, overrides: 'i' },
+	{ name: 'Underline',		element: 'u' },
+	{ name: 'Strikethrough',	element: 'strike' },
+	{ name: 'Subscript',		element: 'sub' },
+	{ name: 'Superscript',		element: 'sup' },
+	*/
+
+	{ name: 'Marker',			element: 'span', attributes: { 'class': 'marker' } },
+
+	{ name: 'Big',				element: 'big' },
+	{ name: 'Small',			element: 'small' },
+	{ name: 'Typewriter',		element: 'tt' },
+
+	{ name: 'Computer Code',	element: 'code' },
+	{ name: 'Keyboard Phrase',	element: 'kbd' },
+	{ name: 'Sample Text',		element: 'samp' },
+	{ name: 'Variable',			element: 'var' },
+
+	{ name: 'Deleted Text',		element: 'del' },
+	{ name: 'Inserted Text',	element: 'ins' },
+
+	{ name: 'Cited Work',		element: 'cite' },
+	{ name: 'Inline Quotation',	element: 'q' },
+
+	{ name: 'Language: RTL',	element: 'span', attributes: { 'dir': 'rtl' } },
+	{ name: 'Language: LTR',	element: 'span', attributes: { 'dir': 'ltr' } },
+
+	/* Object styles */
+
+	{
+		name: 'Styled Image (left)',
+		element: 'img',
+		attributes: { 'class': 'left' }
+	},
+
+	{
+		name: 'Styled Image (right)',
+		element: 'img',
+		attributes: { 'class': 'right' }
+	},
+
+	{
+		name: 'Compact Table',
+		element: 'table',
+		attributes: {
+			cellpadding: '5',
+			cellspacing: '0',
+			border: '1',
+			bordercolor: '#ccc'
+		},
+		styles: {
+			'border-collapse': 'collapse'
+		}
+	},
+
+	{ name: 'Borderless Table',		element: 'table',	styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
+	{ name: 'Square Bulleted List',	element: 'ul',		styles: { 'list-style-type': 'square' } },
+
+	/* Widget styles */
+
+	{ name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } },
+	{ name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } },
+
+	{ name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } },
+
+	{ name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } },
+
+	{ name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' },
+	{ name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' },
+	{ name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' },
+	{ name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' },
+	{ name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' },
+
+	// Adding space after the style name is an intended workaround. For now, there
+	// is no option to create two styles with the same name for different widget types. See #16664.
+	{ name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' },
+	{ name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' },
+	{ name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' },
+	{ name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' },
+	{ name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' }
+
+] );
+
Index: trunk/modules/ckeditor/include.php
===================================================================
--- trunk/modules/ckeditor/include.php	(nonexistent)
+++ trunk/modules/ckeditor/include.php	(revision 2)
@@ -0,0 +1,348 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke, Marmot, Luisehahne
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+/**
+ *    Function called by parent, default by the wysiwyg-module
+ *
+ *    @param    string    The name of the textarea to watch
+ *    @param    mixed    The "id" - some other modules handel this param differ
+ *    @param    string    Optional the width, default "100%" of given space.
+ *    @param    string    Optional the height of the editor - default is '250px'
+ *
+ *
+ */
+function show_wysiwyg_editor(
+    $name,
+    $id,
+    $content,
+    $width = '100%',
+    $height = '250px',
+    $toolbar = false,
+    $OutputAsBuffer=false
+    ) {
+    global $database,$admin, $section_id;
+
+    $modAbsPath = str_replace('\\','/',dirname(__FILE__));
+    $ckeAbsPath = $modAbsPath.'/ckeditor/';
+    if (isset($_SERVER['SCRIPT_FILENAME'])) {
+        $realPath = str_replace('\\','/',dirname($_SERVER['SCRIPT_FILENAME']));
+    } else {
+        /**
+         * realpath - Returns canonicalized absolute pathname
+         */
+        $realPath = str_replace('\\','/',realpath( './' )) ;
+    }
+
+    $selfPath = str_replace('\\','/',dirname($_SERVER['SCRIPT_NAME']));
+    $documentRoot = str_replace('\\','/',realpath(substr($realPath, 0, strlen($realPath) - strlen($selfPath))));
+    $tplAbsPath = str_replace('\\','/',$documentRoot.'/templates');
+    $tplRelPath = str_replace($documentRoot,'',$tplAbsPath);
+    $modRelPath = str_replace($documentRoot,'',$modAbsPath);
+    $ckeRelPath = $modRelPath.'/ckeditor/';
+
+    $url = parse_url(WB_URL);
+    $url['path'] = (isset($url['path']) ? $url['path'] : '');
+    $ModPath = str_replace($url['path'],'',$modRelPath).'/';
+    $ckeModPath = str_replace($url['path'],'',$ckeRelPath);
+    $tplPath = str_replace($url['path'],'',$tplRelPath).'/';
+    require ( $modAbsPath.'/info.php' );
+/**
+ * http://docs.ckeditor.com/#!/api/CKEDITOR.config
+ *
+ * @param boolean
+ * true: set some config.index by wb_config.js
+ * false: set some config['index'] by include.php
+ *
+ * possible config.indexes for setting in wb_config.js
+ * that were normaly set in include.php
+ * format_tags, resize_dir, autoParagraph, skin, toolbar,
+ * extraPlugins, removePlugins, browserContextMenuOnCtrl, entities,
+ * scayt_autoStartup,
+ *
+ *
+ */
+    $bWbConfigSetting = false;
+
+/**
+ *    Create new CKeditor instance.
+ *    But first - we've got to revamp this pretty old class a little bit.
+ *
+ */
+if (!file_exists($ckeAbsPath.'CKEditor.php')) {
+    throw new RuntimeException('Error loading editor file CKEditor.php, please check configuration');
+}
+    if ( !class_exists('CKEditor', false ))     { require ($ckeAbsPath.'CKEditor.php'); }
+    if ( !class_exists('CKEditorPlus', false )) { require ($ckeAbsPath.'CKEditorPlus.php'); }   // $ckeAbsPath ends with /
+
+    $ckeditor = new CKEditorPlus( $ckeRelPath );
+/******************************************************************************************/
+
+    $ckeditor->config['ModulVersion'] = isset($module_version) ? $module_version :  'none';
+    $ckeditor->config['WBrevision'] = defined('REVISION') ? REVISION :  '';
+    $ckeditor->config['WBversion'] = defined('VERSION') ? VERSION :  '';
+
+/******************************************************************************************/
+
+    $temp = '';
+    if (isset($admin->page_id)) {
+        $query = "SELECT `template` from `".TABLE_PREFIX."pages` where `page_id`='".intval($page_id)."'";
+        $temp = $database->get_one( $query );
+    }
+    $templateFolder = ($temp == "") ? DEFAULT_TEMPLATE : $temp;
+    $ckeditor->setTemplatePath($templateFolder);
+
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+//     $ckeditor->config['defaultLanguage']  = strtolower(DEFAULT_LANGUAGE);
+  $ckeditor->config['defaultLanguage']  = 'en';
+
+/**
+ *    Setup the CKE language
+ *
+ */
+$ckeditor->config['language'] = strtolower( (@LANGUAGE ?: 'en') );
+
+/**
+ * A list of semi colon separated style names (by default tags) representing
+ * the style definition for each entry to be displayed in the Format combo in
+ * the toolbar. Each entry must have its relative definition configuration in a
+ * setting named "format_(tagName)". For example, the "p" entry has its
+ * definition taken from config.format_p.
+ * @type String
+ * @default 'p;h1;h2;h3;h4;h5;h6;pre;address;div'
+ */
+if (!$bWbConfigSetting ) { $ckeditor->config['format_tags'] = 'p;div;h1;h2;h3;h4;h5;h6;pre'; }
+
+if (!$bWbConfigSetting ) { $ckeditor->config['resize_dir'] = 'both'; }
+
+if (!$bWbConfigSetting ) { $ckeditor->config['autoParagraph'] = false; }
+
+/**
+* The skin to load. It may be the name of the skin folder inside the editor installation path,
+* or the name and the path separated by a comma.
+* Available skins: moono, moonocolor, kama, bootstrapck
+*
+*/
+if (!$bWbConfigSetting ) { $ckeditor->config['skin'] = 'moonocolor'; }
+
+/**
+ *    Additional test for wysiwyg-admin
+ *
+ */
+$ckeditor->looking_for_wysiwyg_admin( $database );
+
+/**
+ *    Define all extra CKEditor plugins in _yourwb_/modules/ckeditor067/ckeditor/plugins here
+ *
+ */
+if (!$bWbConfigSetting ) {
+    $ckeditor->config['extraPlugins'] = 'justify,find,flash,colorbutton,colordialog,dialogadvtab,autogrow'
+                                      . ',div,font,forms,iframe,indentblock,bidi,liststyle,pagebreak'
+                                      . ',selectall,showblocks,smiley,templates,codemirror,syntaxhighlight'
+                                      . ',wblink,wbdroplets,oembed,backup,wbabout,wbrelation,filebrowser'
+                                      . ''
+                                      . '';
+
+    $ckeditor->config['removePlugins']  = 'link,wsc,save,newpage,print,shybutton,preview,wbsave,youtube'
+                                        . ',sourcearea,sourcedialog,imageresponsive,image2,language,flash,alphamanager'
+                                        . ',placeholder';
+ }
+
+if (!$bWbConfigSetting ) { $ckeditor->config['uiColor'] = '#BFD7EB'; }
+
+//if ($toolbar && !$bWbConfigSetting) {$ckeditor->config['toolbar'] = $toolbar;}
+if ($toolbar) {$ckeditor->config['toolbar'] = $toolbar;}
+
+/**
+ *  Whether to show the browser native context menu when the Ctrl
+ *  or Meta (Mac) key is pressed on opening the context menu with the right mouse button click or the Menu key.
+ *
+ */
+if (!$bWbConfigSetting ) { $ckeditor->config['browserContextMenuOnCtrl'] = true; }
+
+/**
+ *    Force the object to print/echo direct instead of returning the
+ *    HTML source string.
+ *
+ */
+$ckeditor->bOutputAsBuffer = $OutputAsBuffer;
+
+if (!$bWbConfigSetting ) { $ckeditor->config['entities'] = false; }
+
+/**
+ * Sets the DOCTYPE to be used when loading the editor content as HTML.
+ * <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+ * <!DOCTYPE html>
+ */
+    $ckeditor->config['docType'] = '<!DOCTYPE html>';
+
+    /**
+     *
+     * Define Marmots CKEditor plugin in ../ckeditor/plugins/backup
+     * backup_on_start true or false
+     * backup_save_delay in ms
+     *
+     */
+    $ckeditor->config['backup_on_start'] = true;
+    $ckeditor->config['backup_save_delay'] = 500;
+
+
+/**
+ *    SCAYT
+ *    Spellchecker settings.
+ *
+ */
+    $ckeditor->config['scayt_sLang'] = strtolower(LANGUAGE)."_".(LANGUAGE == "EN" ? "US" : LANGUAGE);
+if (!$bWbConfigSetting ) {
+    $ckeditor->config['scayt_autoStartup'] = false;
+ }
+/**
+$ckeditor->config['filebrowserBrowseUrl'] = $ckeditor->basePath.'filemanager/browser/elfinder/elfinder.html';
+ */
+
+$connectorPath = $ckeditor->basePath.'/filemanager/connectors/php/connector.php';
+$ckeditor->config['filebrowserBrowseUrl'] = $ckeditor->basePath.'filemanager/browser/default/browser.html?Connector='.$connectorPath;
+$ckeditor->config['filebrowserImageBrowseUrl'] = $ckeditor->basePath.'filemanager/browser/default/browser.html?Type=Image&Connector='.$connectorPath;
+$ckeditor->config['filebrowserFlashBrowseUrl'] = $ckeditor->basePath.'filemanager/browser/default/browser.html?Type=Flash&Connector='.$connectorPath;
+/**
+ *    The filebrowser are called in the include, because later on we can make switches, use WB_URL and so on
+   $ckeditor->config['filebrowserBrowseUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/browse.php?opener=ckeditor&type=files';
+   $ckeditor->config['filebrowserImageBrowseUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/browse.php?opener=ckeditor&type=images';
+   $ckeditor->config['filebrowserFlashBrowseUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/browse.php?opener=ckeditor&type=flash';
+ */
+
+$ckeditor->config['uploader'] = false; // disabled for security reasons
+
+/**
+ *    The Uploader has to be called, too.
+if($ckeditor->config['uploader']==true) {
+   $ckeditor->config['filebrowserUploadUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/upload.php?opener=ckeditor&type=files';
+   $ckeditor->config['filebrowserImageUploadUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/upload.php?opener=ckeditor&type=images';
+   $ckeditor->config['filebrowserFlashUploadUrl'] = $ckeditor->basePath.'/filemanager/kcfinder/upload.php?opener=ckeditor&type=flash';
+}
+ */
+
+/**
+ */
+if($ckeditor->config['uploader']==true) {
+    $uploadPath = $ckeditor->basePath.'filemanager/connectors/php/upload.php?Type=';
+    $ckeditor->config['filebrowserUploadUrl'] = $uploadPath.'File';
+    $ckeditor->config['filebrowserImageUploadUrl'] = $uploadPath.'Image';
+    $ckeditor->config['filebrowserFlashUploadUrl'] = $uploadPath.'Flash';
+}
+/******************************************************************************************/
+/**
+ *    Looking for the styles
+ *
+ */
+$ckeditor->resolve_path(
+    'contentsCss',
+    $tplPath.'wb_config/editor.css',
+    $ModPath.'wb_config/editor.css'
+);
+
+/**
+ *    Looking for the editor.styles at all ...
+ *
+ */
+$ckeditor->resolve_path(
+    'stylesSet',
+    $tplPath.'wb_config/editor.styles.js',
+    $ModPath.'wb_config/editor.styles.js',
+    'wb:'
+);
+
+/**
+ *    The list of templates definition files to load.
+ *
+ */
+$ckeditor->resolve_path(
+    'templates_files',
+    $tplPath.'wb_config/editor.templates.js',
+    $ModPath.'wb_config/editor.templates.js'
+);
+
+/**
+ *    Bugfix for the template files as the ckeditor want an array instead a string ...
+ *
+ */
+$ckeditor->config['templates_files'] = array($ckeditor->config['templates_files']);
+
+/**
+ *    Get the config file
+ *
+ */
+$ckeditor->resolve_path(
+    'customConfig',
+    $tplPath.'wb_config/wb_ckconfig.js',
+    $ModPath.'wb_config/wb_ckconfig.js'
+);
+/******************************************************************************************/
+
+/**
+ *    To avoid a double "else" inside the following condition, we set the
+ *    default toolbar here to "WB_Full". Keep in mind, that the config will overwrite all
+ *    settings inside the config.js or wb_config.js BUT you will have to define the toolbar inside
+ *    them at all!
+ *
+ */
+
+if (isset($database) && $ckeditor->wysiwyg_admin_exists ) {
+    $aSection = $GLOBALS['section'];
+    $data = null;
+    $query = 'SELECT * from `'.TABLE_PREFIX.'mod_editor_admin` WHERE `editor`="ckeditor"';
+    if (method_exists($database,'doQuery')) {
+        if (($result = $database->query($query))) {
+            $data = $result->fetchArray(MYSQLI_ASSOC);
+        }
+    } else {
+        if (($result = $database->query($query))) {
+            $data = $result->fetchRow(MYSQLI_ASSOC);
+        }
+    }
+// import data into $ckeditor->config
+    if ( $data ) {
+        foreach ($data as $key => $value) {
+            $ckeditor->config[$key] = $value;
+            if(!$ckeditor->config[$key]){unset($ckeditor->config[$key]);}
+        }
+    }
+}
+if (isset($ckeditor->config['menu'])) {$ckeditor->config['toolbar'] = $ckeditor->config['menu'];}
+/*
+if( !$bWbConfigSetting ) {
+    if ( (!$ckeditor->wysiwyg_admin_exists) || ($ckeditor->force) ) {
+    }
+ }
+*/
+$ckeditor->config['height'] = $height;
+$ckeditor->config['width']  = $width;
+
+$ckeditor->config['autoGrow_minHeight'] =  200;
+$ckeditor->config['autoGrow_maxHeight'] = $height;
+$ckeditor->config['autoGrow_bottomSpace'] = 50;
+$ckeditor->config['autoGrow_onStartup'] = false;
+
+$ckeditor->reverse_htmlentities($content);
+
+$output = $ckeditor->to_HTML( $name, $content, $ckeditor->config);
+
+if (!$OutputAsBuffer){
+    echo $output;
+} else {
+    return $output;
+}
+
+}

Property changes on: trunk/modules/ckeditor/include.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/index.php
===================================================================
--- trunk/modules/ckeditor/index.php	(nonexistent)
+++ trunk/modules/ckeditor/index.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once( dirname(dirname(__DIR__)).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/ckeditor/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/info.php
===================================================================
--- trunk/modules/ckeditor/info.php	(nonexistent)
+++ trunk/modules/ckeditor/info.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ *
+ *
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory   = 'ckeditor';
+$module_name        = 'CKEditor v4.6.2';
+$module_function    = 'WYSIWYG';
+$module_version     = '4.6.2';
+$module_platform    = '2.8.3 SP6';
+$module_author      = 'Michael Tenschert, Dietrich Roland Pehlke, erpe, WebBird, Marmot, Luisehahne';
+$module_license     = '<a target="_blank" href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>';
+$module_description = 'includes CKEditor 4.6.2 Standard, CKE allows editing content and can be integrated in frontend and backend modules.';

Property changes on: trunk/modules/ckeditor/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/install.php
===================================================================
--- trunk/modules/ckeditor/install.php	(nonexistent)
+++ trunk/modules/ckeditor/install.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+if (is_writeable(__DIR__.'/ckeditor/plugins/wblink/plugin.js.bak')){
+    unlink (__DIR__.'/ckeditor/plugins/wblink/plugin.js.bak');
+}
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/uninstall.php
===================================================================
--- trunk/modules/ckeditor/uninstall.php	(nonexistent)
+++ trunk/modules/ckeditor/uninstall.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke
+ * @copyright      2009-2011, Website Baker Org. e.V.
+ * @link           http://www.websitebaker2.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.2
+ * @requirements   PHP 5.2.2 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/ckeditor/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/upgrade.php
===================================================================
--- trunk/modules/ckeditor/upgrade.php	(nonexistent)
+++ trunk/modules/ckeditor/upgrade.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        ckeditor
+ * @authors        WebsiteBaker Project, Michael Tenschert, Dietrich Roland Pehlke
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+if (is_writeable(__DIR__.'/ckeditor/plugins/wblink/plugin.js.bak')){
+    unlink (__DIR__.'/ckeditor/plugins/wblink/plugin.js.bak');
+}
\ No newline at end of file

Property changes on: trunk/modules/ckeditor/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/ckeditor/wb_config/editor.css
===================================================================
--- trunk/modules/ckeditor/wb_config/editor.css	(nonexistent)
+++ trunk/modules/ckeditor/wb_config/editor.css	(revision 2)
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body
+{
+    font-family: Arial, Verdana, sans-serif;
+    font-size: 12px;
+    color: #222;
+    /* Remove the background color to make it transparent */
+    background-color: #fff;
+}
+
+html
+{
+    /* #3658: [IE6] Editor document has horizontal scrollbar on long lines
+    To prevent this misbehavior, we show the scrollbar always */
+    _overflow-y: scroll
+}
+
+img:-moz-broken
+{
+    -moz-force-broken-image-icon : 1;
+    width : 24px;
+    height : 24px;
+}
+img, input, textarea
+{
+    cursor: default;
+}
+
+.indent1 {
+  margin-left: 40px;
+}
+.indent2 {
+  margin-left: 80px;
+}
+.indent3 {
+  margin-left: 120px;
+}
+.indent4 {
+  margin-left: 160px;
+}
+.left {
+  text-align: left;
+}
+.right {
+  text-align: right;
+}
+.center {
+  text-align: center;
+}
+.justify {
+  text-align: justify;
+}
+.ibimage_left {
+  float: left;
+}
+.ibimage_right {
+  float: right;
+}
+.marker-red { color :#cc0000; }
+.marker-blue { color : #000099; }
+.Yellow { color : #ffff33; }
+.Lime { color : #339900; }
+
+td { white-space :normal; }
Index: trunk/modules/ckeditor/wb_config/editor.styles.js
===================================================================
--- trunk/modules/ckeditor/wb_config/editor.styles.js	(nonexistent)
+++ trunk/modules/ckeditor/wb_config/editor.styles.js	(revision 2)
@@ -0,0 +1,92 @@
+﻿/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke
+ *  @copyright      2010-2011 Michael Tenschert, Dietrich Roland Pehlke
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+ 
+ CKEDITOR.addStylesSet( 'wb',
+[
+    /* Block Styles */
+
+    // These styles are defined per editor.css in your template and can be found in "Format".
+    /*
+    { name : 'Paragraph'        , element : 'p' },
+    { name : 'Heading 1'        , element : 'h1' },
+    { name : 'Heading 2'        , element : 'h2' },
+    { name : 'Heading 3'        , element : 'h3' },
+    { name : 'Heading 4'        , element : 'h4' },
+    { name : 'Heading 5'        , element : 'h5' },
+    { name : 'Heading 6'        , element : 'h6' },
+    { name : 'Preformatted Text', element : 'pre' },
+    { name : 'Address'            , element : 'address' },
+    */
+
+    { name : 'Blue Title'       , element : 'h3', attributes  : { 'class' : 'marker-blue' } },
+    { name : 'Red Title'        , element : 'h3', attributes  : { 'class' : 'marker-red' } },
+
+    /* Inline Styles */
+
+    // These are core styles available as toolbar buttons. You may opt enabling
+    // some of them in the Styles combo, removing them from the toolbar.
+    /*
+    { name : 'Strong'           , element : 'strong', overrides : 'b' },
+    { name : 'Emphasis'         , element : 'em'    , overrides : 'i' },
+    { name : 'Underline'        , element : 'u' },
+    { name : 'Strikethrough'    , element : 'strike' },
+    { name : 'Subscript'        , element : 'sub' },
+    { name : 'Superscript'      , element : 'sup' },
+    */
+
+    { name : 'Marker: Yellow'   , element : 'span', attributes : { 'class' : 'Yellow' } },
+    { name : 'Marker: Green'    , element : 'span', attributes : { 'class' : 'Lime' } },
+
+    { name : 'Big'              , element : 'big' },
+    { name : 'Small'            , element : 'small' },
+    { name : 'Typewriter'       , element : 'tt' },
+
+    { name : 'Computer Code'    , element : 'code' },
+    { name : 'Keyboard Phrase'  , element : 'kbd' },
+    { name : 'Sample Text'      , element : 'samp' },
+    { name : 'Variable'         , element : 'var' },
+
+    { name : 'Deleted Text'     , element : 'del' },
+    { name : 'Inserted Text'    , element : 'ins' },
+
+    { name : 'Cited Work'       , element : 'cite' },
+    { name : 'Inline Quotation' , element : 'q' },
+
+    { name : 'Language: RTL'    , element : 'span', attributes : { 'dir' : 'rtl' } },
+    { name : 'Language: LTR'    , element : 'span', attributes : { 'dir' : 'ltr' } },
+
+    /* Object Styles */
+    //  This styles are only available when you select the defined objects. E.g. when selecting an image 
+    //  you can control here with the styles dropdown the styling.
+    {
+        name : 'Image on Left',
+        element : 'img',
+        attributes :
+        {
+            'style' : 'padding: 5px; margin-right: 5px',
+            'border' : '2',
+            'align' : 'left'
+        }
+    },
+
+    {
+        name : 'Image on Right',
+        element : 'img',
+        attributes :
+        {
+            'style' : 'padding: 5px; margin-left: 5px',
+            'border' : '2',
+            'align' : 'right'
+        }
+    }
+
+
+]);
\ No newline at end of file
Index: trunk/modules/ckeditor/wb_config/editor.templates.js
===================================================================
--- trunk/modules/ckeditor/wb_config/editor.templates.js	(nonexistent)
+++ trunk/modules/ckeditor/wb_config/editor.templates.js	(revision 2)
@@ -0,0 +1,94 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// Register a templates definition set named "default".
+CKEDITOR.addTemplates( 'default',
+{
+    // The name of sub folder which hold the shortcut preview images of the
+    // templates.
+    imagesPath : CKEDITOR.getUrl( CKEDITOR.plugins.getPath( 'templates' ) + '/templates/images/' ),
+
+    // The templates definitions.
+    templates :
+        [
+            {
+                title: 'Image and Title',
+                image: 'template1.gif',
+                description: 'One main image with a title and text that surround the image.',
+                html:
+                    '<h3>' +
+                        '<img style="margin-right: 10px" height="100" width="100" align="left"/>' +
+                        'Type the title here'+
+                    '</h3>' +
+                    '<p>' +
+                        'Type the text here' +
+                    '</p>'
+            },
+            {
+                title: 'Strange Template',
+                image: 'template2.gif',
+                description: 'A template that defines two colums, each one with a title, and some text.',
+                html:
+                    '<table style="width:100%; border-collapse: collapse;">' +
+                        '<tr>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 1</h3>' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 2</h3>' +
+                            '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' +
+                                'Text 1' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td>' +
+                                'Text 2' +
+                            '</td>' +
+                        '</tr>' +
+                    '</table>' +
+                    '<p>' +
+                        'More text goes here.' +
+                    '</p>'
+            },
+            {
+                title: 'Text and Table',
+                image: 'template3.gif',
+                description: 'A title with some text and a table.',
+                html:
+                    '<div style="width: 80%">' +
+                        '<h3>' +
+                            'Title goes here' +
+                        '</h3>' +
+                        '<table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1">' +
+                            '<caption style="border:solid 1px black">' +
+                                '<strong>Table title</strong>' +
+                            '</caption>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                        '</table>' +
+                        '<p>' +
+                            'Type the text here' +
+                        '</p>' +
+                    '</div>'
+            }
+        ]
+});
Index: trunk/modules/ckeditor/wb_config/readme-faq.txt
===================================================================
--- trunk/modules/ckeditor/wb_config/readme-faq.txt	(nonexistent)
+++ trunk/modules/ckeditor/wb_config/readme-faq.txt	(revision 2)
@@ -0,0 +1,108 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Woellbrink
+ *  @copyright      2010-2012 Michael Tenschert, Dietrich Roland Pehlke, Luisehahne
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+################################################
+
+---     WebsiteBaker CKEditor module         ---
+---     FAQ: How to use customization         --- 
+
+################################################
+################################################
+
+
+# Question: #
+
+What files are there to customize CKEditor for WebsiteBaker?
+
+# Answer:   #
+
+All default files in CKEditor modules are in the folder: _yourwbinstallation_/modules/ckeditor/wb_config
+
+There are four different files. Please look inside each file with your FTP-Browser / AddonFileEditor / on your local computer:
+
++ wb_ckconfig.js:         Here are most of the configuration issues defined. 
+                        Toolbar-Configuration, behavior on Enter / Shift+Enter, default language and so on.
+
++ editor.css:             The default look of the WYSIWYG textarea and the preview. 
+                        You can also put an editor.css in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.styles.js:     The default styles you can choose from a dropdown in the CKEditor toolbar. 
+                        You can also put an editor.styles.js in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.templates.js:     The default CKE templates you can choose of a button in CKEditor toolbar. 
+                        Please note: We recommend not to use CKE templates, because the WebsiteBaker template
+                        should define the different blocks and the template. 
+                        
+Furthermore this files and some other configurations (we recommend you shouldn't change unless you really know what you are doing) are stored in:
+_yourwbinstallation_/modules/ckeditor/include.php
+
+
+################################################
+
+
+# Question: #
+
+Why back to the roots and not different folders anymore?
+
+# Answer:   #
+
+All four configuration files (wb_ckconfig.js, editor.css, editor.styles.js, editor.templates.js) are available in 
+_yourwbinstallation_/modules/ckeditor/wb_config
+
+The wb_config is loaded and recognized by the CKEditor module unless you copy the folder "wb_config."!
+
+As an example you have two possibilities to call the configuration files
+    
+    1) copy the wb_config to the folder _yourwbinstallation_/templates and all changes in config files are for all templates
+    2) copy the wb_config  to your _yourdefaulttemplate_: _yourwbinstallation_/templates/_yourdefaulttemplate_ 
+       rename folder wb_config to editor, your changes are only for _yourdefaulttemplate_
+    
+    Change the configfiles with your FTP-Browser / AddonFileEditor / ... 
+
+You should never change the files in _yourwbinstallation_/modules/ckeditor/wb_config, as they are overwritten with any update of CKEditor module and / or WebsiteBaker! 
+You never have any problems when upgrading CKEditor module to another version.
+
+
+################################################
+
+
+# Question: #
+
+How is the workflow of reading CKEditor files?
+
+# Answer:   #
+
+Note: The workflow is defined inside _yourwbinstallation_/modules/ckeditor/include.php
+
+1) is called as first if available, 2) is the next one, and so on.
+
+search order for CKEditor files 
+
+editor.css
+
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor.css
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/css/editor.css
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/editor.css
+    4) _yourwbinstallation_/templates/wb_config/editor.css
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/editor.css
+
+wb_ckconfig.js,editor.styles.js,editor.templates.js    
+    
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/wb_ckconfig.js
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/js/wb_ckconfig.js
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/wb_ckconfig.js
+    4) _yourwbinstallation_/templates/wb_config/wb_ckconfig.js
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/wb_ckconfig.js
+
+etc...    
+    
Index: trunk/modules/ckeditor/wb_config/wb_ckconfig.js
===================================================================
--- trunk/modules/ckeditor/wb_config/wb_ckconfig.js	(nonexistent)
+++ trunk/modules/ckeditor/wb_config/wb_ckconfig.js	(revision 2)
@@ -0,0 +1,365 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink, Marmot, Luisehahne
+ *  @copyright      Frederico Knabben
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+/*
+* WARNING: Clear the cache of your browser cache after you modify this file!
+* If you don't do this, you may notice that your browser is ignoring all your changes.
+*
+* --------------------------------------------------
+*
+* Note: Some CKEditor configs are set in _yourwb_/modules/ckeditor/include.php
+*
+* Example: "$ckeditor->config['toolbar']" is PHP code in include.php. The very same here in the
+* wb_ckconfig.js would be: "config.toolbar" inside CKEDITOR.editorConfig = function( config ).
+*
+* Please read "readme-faq.txt" in the wb_config folder for more information about customizing.
+*
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+    // Define changes to default configuration here.
+    // For complete reference see:
+    // http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+  // Different Toolbars. Remove, add or move 'SomeButton', with the quotes and following comma
+    config.toolbar_Full =
+    [
+        { name: 'document',  items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing',   items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'forms',     items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+        { name: 'paragraph',   items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links',       items : [ 'Link','Unlink','Anchor' ] },
+        { name: 'insert',      items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+    ];
+
+  config.toolbar_WB_Mini = [
+            ['Source','Cut','Copy'],['PasteText','PasteFromWord'],['Undo','Redo','-','RemoveFormat'],['Wbdroplets','Wblink','Unlink','Anchor'],
+            ['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+            ['Styles','Format','Font','FontSize'],['NumberedList','BulletedList','-','Blockquote','CreateDiv'],['About']];
+
+  config.toolbar_WB_Basic = [
+            ['Source','Preview'],['Cut','Copy','Paste','PasteText','PasteFromWord'],['Image','Flash','Table','HorizontalRule'],['Wbdroplets','Wblink','Unlink','Anchor'],['Undo','Redo','-','SelectAll','RemoveFormat'],['Maximize','ShowBlocks','-','Code','About'],'/',
+            ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv']];
+
+    // see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar
+    config.toolbar_WB_Full =
+    [
+        { name: 'document', items : [ 'Source','-','Save','Print','-','DocProps','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Code','-','About' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+         { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton','HiddenField' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'links', items : [ 'Link','Unlink','Anchor','Wbdroplets','Wblink' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }
+
+    ];
+
+    config.toolbar_WB_Default =
+    [
+        { name: 'mode', items : [ 'Source','autoFormat','CommentSelectedRange','UncommentSelectedRange' ] },
+        { name: 'document', items : [ 'Save','wbSave','Print','-','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo','Backup' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links', items : [ 'Wbdroplets','Wblink','Unlink','Anchor' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe','Youtube','oembed', 'slideshow' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','Syntaxhighlight','CreatePlaceholder','-','About' ] }
+
+    ];
+
+    config.toolbar_Basic = [['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','Code','About']];
+    config.toolbar_WB_Simple = [['Bold','Italic','-','NumberedList','BulletedList','-','Wbdroplets','Wblink','Unlink','-','Scayt','-','Code','About']];
+
+    // The default toolbar. Default: WB_Default
+  config.toolbar = 'WB_Default';
+
+  // The standard color of CKEditor. Can be changed in any hexadecimal color you like. Use the
+  // UIColor Plugin in your CKEditor to pick the right color.
+    config.uiColor = '#BFD7EB';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.ModulVersion  = '';
+    config.WBrevision    = '';
+    config.WBversion     = '2.8.3 SP6';
+
+    config.fullPage = false;
+
+    config.format_tags = 'p;div;h1;h2;h3;h4;h5;h6;pre;address';
+
+    config.autoParagraph = true;
+
+    /* The skin to load. It may be the name of the skin folder inside the editor installation path,
+    * or the name and the path separated by a comma.
+    * Available skins: moono, moonocolor*/
+    config.skin = 'moonocolor';
+
+  // Define all extra CKEditor plugins in _yourwb_/modules/ckeditor/ckeditor/plugins here
+  //config.extraPlugins = 'timestamp';
+    config.extraPlugins  = 'justify,find,flash,colorbutton,colordialog,dialogadvtab'
+                         + ',div,font,forms,iframe,indentblock,language,bidi,liststyle,pagebreak,save'
+                         + ',selectall,showblocks,smiley,templates,codemirror,autogrow,filebrowser'
+                         + ',wblink,wbdroplets,youtube,oembed,backup,wbrelation,wbabout';
+
+    config.removePlugins = 'wsc,link,save,newpage,print,shybutton,syntaxhighlight,preview,alphamanager'
+                         + ',sourcearea,sourcedialog,imageresponsive,image2,wbsave,youtube,language,flash,placeholder';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.entities = false;
+
+    config.scayt_autoStartup = false;
+
+    // The standard height and width of CKEditor in pixels.
+    config.height           = '350';
+    config.width            = '100%';
+    config.toolbarLocation  = 'top';
+
+    config.autoGrow_minHeight = 100;
+    config.autoGrow_maxHeight = 350;
+    config.autoGrow_bottomSpace = 50;
+    config.autoGrow_onStartup = false;
+    // Define possibilities of automatic resizing in pixels. Set config.resize_enabled to false to
+    // deactivate resizing.
+    config.resize_enabled   = true;
+    config.resize_minWidth  = 500;
+    config.resize_maxWidth  = 1500;
+    config.resize_minHeight = 100;
+    config.resize_maxHeight = 1678;
+    config.resize_dir = 'both';
+
+  config.docType           = '<!DOCTYPE html>';
+
+  config.image_previewText = 'WebsiteBaker helps you to create the website you want: A free, easy and secure, flexible and extensible open source content management system (CMS). Create new templates within minutes - powered by (X)HTML, CSS and jQuery. With WebsiteBaker it\'s quite natural your site is W3C-valid, SEO-friendly and accessible - there are no limitations at all. Use droplets - the new and revolutionary way of inserting PHP code - everywhere you want. In addition to that, WebsiteBaker and the community are offering lots of extensions: Just download, install with two clicks and use them. That is not enough? You want more? No problem, build your own modules! The WebsiteBaker API gives many opportunities you can rely on.';
+
+  // Both options are for XHTML 1.0 strict compatibility
+  // config.indentClasses = [ 'indent1', 'indent2', 'indent3', 'indent4' ];
+  // [ Left, Center, Right, Justified ]
+  // config.justifyClasses = [ 'left', 'center', 'right', 'justify' ];
+
+  config.templates_replaceContent =   false;
+
+  config.syntaxhighlight_lang = 'js', 'jscript', 'javascript', 'perl', 'Perl', 'pl', 'php', 'text', 'plain', 'sass', 'scss', 'scala', 'sql', 'xml', 'xhtml', 'xslt', 'html';
+
+  // Explanation: _P: new <p> paragraphs are created; _BR: lines are broken with <br> elements;
+  //              _DIV: new <div> blocks are created.
+  // Sets the behavior for the ENTER key. Default is _P allowed tags: _P | _BR | _DIV
+  config.enterMode = CKEDITOR.ENTER_P;
+
+  // Sets the behavior for the Shift + ENTER keys. allowed tags: _P | _BR | _DIV
+  config.shiftEnterMode = CKEDITOR.ENTER_BR;
+
+  /* Allows to force CKEditor not to localize the editor to the user language.
+  * Default: Empty (''); Example: ('fr') for French.
+  * Note: Language configuration is based on the backend language of WebsiteBaker.
+  * It's defined in include.php
+  * config.language         = ''; */
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+  config.defaultLanguage   = 'en';
+
+    /* Protect PHP code tags (<?...?>) so CKEditor will not break them when switching from Source to WYSIWYG.
+    *  Uncommenting this line doesn't mean the user will not be able to type PHP code in the source.
+    *  This kind of prevention must be done in the server side, so just leave this line as is. */
+    config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+//    config.protectedSource.push(/\[\[[\s\S]*?\]\]/g); //  droplets
+//    config.protectedSource.push( /<i[\s\S]*?\>/g ); //allows beginning <i> tag
+//    config.protectedSource.push( /<\/i[\s\S]*?\>/g ); //allows ending </i> tag
+//    config.protectedSource.push( /<span[\s\S]*?\>/g ); //allows beginning <span> tag
+//    config.protectedSource.push( /<\/span[\s\S]*?\>/g ); //allows ending </span> tag
+    //disable ckes Advanced Content Filter (ACF) to avoid wblinks to be filtered?
+    config.allowedContent = true;
+
+    config.jsplus_image_editor_init_tool = 'text';
+
+    // Simplify the dialog windows.
+//    config.removeDialogTabs = 'image:advanced;link:advanced';
+
+    config.filebrowserWindowWidth = '80%';
+    config.filebrowserWindowHeight = '70%';
+
+};
+
+CKEDITOR.on( 'instanceReady', function( ev )
+{
+    var writer = ev.editor.dataProcessor.writer;
+    // The character sequence to use for every indentation step.
+    writer.indentationChars = '\t';
+    // The way to close self closing tags, like <br />.
+    writer.selfClosingEnd   = ' />';
+    // The character sequence to be used for line breaks.
+    writer.lineBreakChars   = '\n';
+    // Setting rules for several HTML tags.
+
+    var dtd = CKEDITOR.dtd;
+    for (var e in CKEDITOR.tools.extend( {}, dtd.$block ))
+    {
+        writer.setRules( e,
+        {
+            // Indicates that this tag causes indentation on line breaks inside of it.
+            indent : false,
+            // Insert a line break before the <h1> tag.
+            breakBeforeOpen : true,
+            // Insert a line break after the <h1> tag.
+            breakAfterOpen : false,
+            // Insert a line break before the </h1> closing tag.
+            breakBeforeClose : false,
+            // Insert a line break after the </h1> closing tag.
+            breakAfterClose : true
+        });
+    };
+    writer.setRules( 'p',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <p> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <p> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </p> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </p> closing tag.
+        breakAfterClose : true
+    });
+    writer.setRules( 'br',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <br /> tag.
+        breakBeforeOpen : false,
+        // Insert a line break after the <br /> tag.
+        breakAfterOpen : true
+    });
+    writer.setRules( 'a',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <a> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <a> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </a> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </a> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'div',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <div> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <div> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </div> closing tag.
+        breakBeforeClose : true,
+        // Insert a line break after the </div> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'img',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <img> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <img> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </img>> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </img> closing tag.
+        breakAfterClose : false
+    });
+/*
+*/
+    ev.editor.dataProcessor.htmlFilter.addRules(
+    {
+        elements:
+        {
+            $: function (element) {
+                // Output dimensions of images as width and height
+                if (element.name == 'img') {
+                    var style = element.attributes.style;
+                    if (style) {
+                        // Get the width from the style.
+                        var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec(style),
+                            width = match && match[1];
+
+                        // Get the height from the style.
+                        match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec(style);
+                        var height = match && match[1];
+console.log( element );
+
+                        if (width) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)width\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.width = width;
+                        }
+
+                        if (height) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)height\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.height = height;
+                        }
+                    }
+                }
+/**
+ *
+                if (!element.attributes.style)
+                    delete element.attributes.style;
+ */
+
+                return element;
+            }
+        }
+    });
+
+});
+
+CKEDITOR.on( 'dialogDefinition', function( ev )
+{
+        // Take the dialog name and its definition from the event data.
+        var editor = ev.editor;
+        var dialogName = ev.data.name;
+        var dialogDefinition = ev.data.definition;
+
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'image' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var linkTab = dialogDefinition.getContents('Link');
+        }
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'wblink' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var infoTab = dialogDefinition.getContents( 'info' );
+            // Set the default value for the URL field.
+            var urlField = infoTab.get( 'url' );
+            urlField['default'] = 'www.example.com';
+        }
+
+    }); // dialogDefinition
Index: trunk/modules/code/FTAN_SUPPORTED
===================================================================
--- trunk/modules/code/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/code/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/code/add.php
===================================================================
--- trunk/modules/code/add.php	(nonexistent)
+++ trunk/modules/code/add.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/*
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+// Insert an extra row into the database
+    $query = 'INSERT INTO `'.TABLE_PREFIX.'mod_code` SET '
+           .'`section_id` = \''.$section_id.'\', '
+           .'`page_id` = \''.$page_id.'\', '
+           .'`content` = \'\' ';
+
+    $database->query($query);
+}

Property changes on: trunk/modules/code/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/delete.php
===================================================================
--- trunk/modules/code/delete.php	(nonexistent)
+++ trunk/modules/code/delete.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+// Delete record from the database
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_code` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+}

Property changes on: trunk/modules/code/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/htt/modify.htt
===================================================================
--- trunk/modules/code/htt/modify.htt	(nonexistent)
+++ trunk/modules/code/htt/modify.htt	(revision 2)
@@ -0,0 +1,22 @@
+<!-- BEGIN main_block -->
+{REGISTER_EDIT_AREA}
+<form action="{WB_URL}/modules/{ADDON_NAME}/save.php" method="post">
+    <input type="hidden" name="page_id" value="{PAGE_ID}" />
+    <input type="hidden" name="section_id" value="{SECTION_ID}" />
+    {FTAN}
+<textarea cols="2"  id="content{SECTION}" name="content" style="width: 100%; height: 20.225em">{CONTENT}</textarea>
+
+<table style="width: 100%;">
+<tr>
+    <td>
+        <input type="submit" value="{TEXT_SAVE}" style="min-width: 100px; margin-top: 5px;" />
+        <input name="pagetree" type="submit" value="{TEXT_SAVE} &amp; {TEXT_BACK}" style="min-width: 100px; margin-top: 5px;" />
+    </td>
+    <td style="float: right;">
+        <input type="button" value="{TEXT_CANCEL}" onclick="window.location = 'index.php';" style="width: 100px; margin-top: 5px;" />
+    </td>
+</tr>
+</table>
+</form>
+<p>&nbsp;</p>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/code/index.php
===================================================================
--- trunk/modules/code/index.php	(nonexistent)
+++ trunk/modules/code/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        code
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/code/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/info.php
===================================================================
--- trunk/modules/code/info.php	(nonexistent)
+++ trunk/modules/code/info.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory   = 'code';
+$module_name        = 'Code v3.0.2';
+$module_function    = 'page';
+$module_version     = '3.0.2';
+$module_platform    = '2.8.3';
+$module_author      = 'Ryan Djurovich';
+$module_license     = 'GNU General Public License';
+$module_description = 'This module allows you to execute PHP commands (limit access to users you trust!!)';
+

Property changes on: trunk/modules/code/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/install-struct.sql
===================================================================
--- trunk/modules/code/install-struct.sql	(nonexistent)
+++ trunk/modules/code/install-struct.sql	(revision 2)
@@ -0,0 +1,25 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 31. Jan 2016 um 22:53
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+--
+-- Datenbank: `dw283-sp3db1`
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_code`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_code`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_code` (
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `content` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE};
+

Property changes on: trunk/modules/code/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/install.php
===================================================================
--- trunk/modules/code/install.php	(nonexistent)
+++ trunk/modules/code/install.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/code/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/DA.php
===================================================================
--- trunk/modules/code/languages/DA.php	(nonexistent)
+++ trunk/modules/code/languages/DA.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+ DANISH LANNGUAGE FILE FOR MODULE: CODE
+ -----------------------------------------------------------------------------------------
+*/
+
+// Dansk modulbeskrivelse
+$module_description = 'Dette modul g&oslash;r det muligt at udf&oslash;re PHP kommandoer (adgangen b&oslash;r begr&aelig;nses til p&aring;lidelige personer!)';
+
+?>

Property changes on: trunk/modules/code/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/DE.php
===================================================================
--- trunk/modules/code/languages/DE.php	(nonexistent)
+++ trunk/modules/code/languages/DE.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS MODUL: CODE
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'Dieses Modul erlaubt das ausf&uuml;hren von PHP Befehlen (bitte begrenzen Sie den Zugriff auf vertrauensw&uuml;rdige Personen!!)';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/code/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/EN.php
===================================================================
--- trunk/modules/code/languages/EN.php	(nonexistent)
+++ trunk/modules/code/languages/EN.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+$module_description = 'This module allows you to execute PHP commands (limit access to users you trust!!)';

Property changes on: trunk/modules/code/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/FR.php
===================================================================
--- trunk/modules/code/languages/FR.php	(nonexistent)
+++ trunk/modules/code/languages/FR.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: CODE
+ -----------------------------------------------------------------------------------------
+*/
+//Module Description
+$module_description = 'Ce module permet d&apos;ex&eacute;cuter des commandes PHP (merci de limiter l&apos;acc&egrave;s &agrave; des personnes dignes de confiance!)';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/code/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/NL.php
===================================================================
--- trunk/modules/code/languages/NL.php	(nonexistent)
+++ trunk/modules/code/languages/NL.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE CODE MODULE
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'In deze module kan je PHP instructies ingeven (Gelieve de toegang ervan te beperken tot betrouwbare personen!!)';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/code/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/NO.php
===================================================================
--- trunk/modules/code/languages/NO.php	(nonexistent)
+++ trunk/modules/code/languages/NO.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  NORWEGIAN LANGUAGE FILE FOR THE ADDON: CODE 
+ -----------------------------------------------------------------------------------------
+*/
+
+//Module Description
+$module_description = 'Denne modulen gir deg mulighet for &aring; kj&oslash;re PHP kommandoer og rutiner(OBS!! Begrens tilgangen til denne modulen. Tilgang m&aring; kun gis til personer du har full tiltro til og som du vet har kunnsakp til &aring; benytte den!!)';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/code/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/RU.php
===================================================================
--- trunk/modules/code/languages/RU.php	(nonexistent)
+++ trunk/modules/code/languages/RU.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project http://www.websitebaker.org/
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  RUSIIAN LANGUAGE FOR MODULE: CODE
+ -----------------------------------------------------------------------------------------
+*/
+
+//Russian translation
+$module_description = '&#1052;&#1086;&#1076;&#1091;&#1083;&#1100; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1103;&#1090;&#1100; PHP &#1082;&#1086;&#1076; (&#1088;&#1072;&#1079;&#1088;&#1077;&#1096;&#1072;&#1081;&#1090;&#1077; &#1077;&#1075;&#1086; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1076;&#1086;&#1074;&#1077;&#1088;&#1077;&#1085;&#1085;&#1099;&#1084; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;&#1084;!)';
+
+?>

Property changes on: trunk/modules/code/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/languages/index.php
===================================================================
--- trunk/modules/code/languages/index.php	(nonexistent)
+++ trunk/modules/code/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/code/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/modify.php
===================================================================
--- trunk/modules/code/modify.php	(nonexistent)
+++ trunk/modules/code/modify.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+$sModulName = basename(__DIR__);
+if( !$admin->get_permission($sModulName,'module' ) ) {
+      die($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES']);
+}
+require(WB_PATH . '/include/editarea/wb_wrapper_edit_area.php');
+
+// Setup template object
+$template = new Template(WB_PATH.'/modules/'.$sAddonName);
+$template->set_file('page', 'htt/modify.htt');
+$template->set_block('page', 'main_block', 'main');
+
+// Get page content
+
+$query = "SELECT content FROM `".TABLE_PREFIX."mod_code` WHERE `section_id` = '$section_id'";
+$get_content = $database->query($query);
+$content = $get_content->fetchRow(MYSQLI_ASSOC);
+$content = htmlspecialchars($content['content']);
+
+// Insert vars
+$template->set_var(
+    array(
+        'ADDON_NAME'            => $sAddonName,
+        'PAGE_ID'               => $page_id,
+        'SECTION_ID'            => $section_id,
+        'REGISTER_EDIT_AREA'    => (function_exists('registerEditArea') ? registerEditArea('content'.$section_id, 'php', false) : ''),
+        'WB_URL'                => WB_URL,
+        'CONTENT'               => $content,
+        'TEXT_SAVE'             => $TEXT['SAVE'],
+        'TEXT_BACK'             => $TEXT['BACK'],
+        'TEXT_CANCEL'           => $TEXT['CANCEL'],
+        'SECTION'               => $section_id,
+        'FTAN'                  => $admin->getFTAN()
+    )
+);
+
+// Parse template object
+$template->set_unknowns('keep');
+$template->parse('main', 'main_block', false);
+$template->pparse('output', 'page', false);

Property changes on: trunk/modules/code/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/save.php
===================================================================
--- trunk/modules/code/save.php	(nonexistent)
+++ trunk/modules/code/save.php	(revision 2)
@@ -0,0 +1,71 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+$aErrorMessage = array();
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$bBackAfterSave = intval(isset($aRequestVars['pagetree']));
+$OverviewUrl = ADMIN_URL.'/pages/modify.php?page_id='.$page_id;
+if ( !$admin->checkFTAN())
+{
+    $admin->print_header();
+    $sInfo = strtoupper(basename(__DIR__).'_'.basename(__FILE__, ''.PAGE_EXTENSION).'::');
+    $sDEBUG=(@DEBUG?$sInfo:'');
+    $admin->print_error($sDEBUG.$MESSAGE['GENERIC_SECURITY_ACCESS'], $OverviewUrl);
+}
+$admin->print_header();
+// Update the mod_wysiwygs table with the contents
+if(isset($_POST['content'])) {
+    $notAllowedTags = array('<?php', '?>' , '<?', '<?=');
+    $content = (str_replace($notAllowedTags, '', $_POST['content']));
+
+    $sqlSet = '`'.TABLE_PREFIX.'mod_code` SET '
+            . '`section_id`='.$section_id.', '
+            . '`page_id`='.$page_id.', '
+            . '`content` = \''.$database->escapeString($content).'\' ';
+    // search for instance of this module in section
+    $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'mod_code` '
+         . 'WHERE `section_id`='.$section_id;
+    if ($database->get_one($sql)) {
+    // if matching record already exists run UPDATE
+        $sql  = 'UPDATE '.$sqlSet
+              .'WHERE `section_id`='.$section_id;
+    } else {
+    // if no matching record exists INSERT new record
+        $sql = 'INSERT INTO '.$sqlSet;
+    }
+    if (!$database->query($sql)){
+        $aErrorMessage[] = ($database->is_error()?$database->get_error():'');
+    }
+}
+// Check if there is a database error, otherwise say successful
+if (sizeof($aErrorMessage)) {
+    $admin->print_error(implode('<br />', $aErrorMessage), $OverviewUrl);
+} else {
+    $sIndexUrl = ADMIN_URL.'/pages/index.php';
+    $OverviewUrl = (@$bBackAfterSave ? $sIndexUrl : $OverviewUrl);
+    $admin->print_success($MESSAGE['PAGES_SAVED'], $OverviewUrl);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/code/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/uninstall.php
===================================================================
--- trunk/modules/code/uninstall.php	(nonexistent)
+++ trunk/modules/code/uninstall.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // delete tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/code/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/upgrade.php
===================================================================
--- trunk/modules/code/upgrade.php	(nonexistent)
+++ trunk/modules/code/upgrade.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$msg = '';
+$sTable = TABLE_PREFIX.'mod_code';
+if(($sOldType = $database->getTableEngine($sTable))) {
+    if(('myisam' != strtolower($sOldType))) {
+        if(!$database->query('ALTER TABLE `'.$sTable.'` Engine = \'MyISAM\' ')) {
+            $msg = $database->get_error();
+        }
+    }
+} else {
+    $msg = $database->get_error();
+}
+// ------------------------------------
\ No newline at end of file

Property changes on: trunk/modules/code/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/code/view.php
===================================================================
--- trunk/modules/code/view.php	(nonexistent)
+++ trunk/modules/code/view.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         code
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// Get content
+$get_content = $database->query("SELECT `content` FROM `".TABLE_PREFIX."mod_code` WHERE `section_id` = '$section_id'");
+$fetch_content = $get_content->fetchRow(MYSQLI_ASSOC);
+$content = $fetch_content['content'];
+eval($content);
+

Property changes on: trunk/modules/code/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/DOC/index.php
===================================================================
--- trunk/modules/droplets/DOC/index.php	(nonexistent)
+++ trunk/modules/droplets/DOC/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/droplets/DOC/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/DOC/readme.css
===================================================================
--- trunk/modules/droplets/DOC/readme.css	(nonexistent)
+++ trunk/modules/droplets/DOC/readme.css	(revision 2)
@@ -0,0 +1,85 @@
+html {
+font-size:76%;
+}
+body {
+font-family:"Trebuchet MS",Tahoma,Verdana,Arial,Helvetica,sans-serif;
+font-size:1.1em;
+line-height:1.5em;
+margin:10px;
+padding:0;
+text-align:left;
+}
+h1, h2, h3, h4, h5, h6 {
+color:#009999;
+font-family:"Trebuchet MS",Tahoma,Verdana,Arial,Helvetica,sans-serif;
+font-weight:normal;
+letter-spacing:-1px;
+margin:0;
+}
+h1, h2 {
+border-bottom:1px solid #009999;
+font-size:1.8em;
+margin:15px 0 5px;
+padding-bottom:15px;
+}
+h3 {
+border-bottom:1px solid #009999;
+font-size:1.8em;
+margin:15px 0 5px;
+padding-bottom:15px;
+}
+h4 {
+font-size:1.4em;
+margin:10px 0 5px;
+}
+h5 {
+font-size:1.2em;
+margin:10px 0 5px;
+}
+h6 {
+font-size:1em;
+margin:10px 0 0;
+}
+p {
+margin:8px 0;
+}
+acronym {
+cursor:help;
+}
+code, blockquote {
+background:#FFFFFF none repeat scroll 0 0;
+border:1px dashed #DDDDDD;
+color:#666666;
+display:block;
+margin:15px 0;
+padding:5px;
+}
+pre {
+background:#FFFFFF none repeat scroll 0 0;
+border:1px dashed #DDDDDD;
+color:#666666;
+display:inline;
+margin:15px 0;
+padding:5px;
+}
+hr {
+background-color:#009999;
+border:0 none;
+color:#DDDDDD;
+height:1px;
+margin:5px 0;
+}
+.left {
+float:left;
+}
+.right {
+float:right;
+}
+.hide {
+display:none;
+}
+
+#body {
+background:#222222;
+padding:20px;
+}
Index: trunk/modules/droplets/DOC/readme.html
===================================================================
--- trunk/modules/droplets/DOC/readme.html	(nonexistent)
+++ trunk/modules/droplets/DOC/readme.html	(revision 2)
@@ -0,0 +1,51 @@
+<html>
+    <head>
+    <meta charset="utf-8" />
+    <title>Droplets</title>
+    <link href="readme.css" rel="stylesheet" type="text/css" media="screen" />
+    </head>
+    <body>
+        <h2> <img src="../themes/default/img/droplets_logo.png" alt="" width="297" height="81" ></h2> <br />
+        Droplets are small chunks of php code (just like the code module) that can be included in your template or any other content section. <br />
+        Including a droplet is done by encapsulating the droplet name in double brackets. <br />
+        If you want to use the droplet &quot;ModifiedWhen&quot; (to show the last modified date and time of the current page) you only need to add <b>[[ModifiedWhen]]</b> to your template or WYSIWYG contentpage. <br />
+        <br />
+        You are encouraged to create your own droplets and share them with the community. <br />
+        <br />
+        <h3>Installation</h3>
+        <br />
+        Droplets are installed as a admin tool. The installation is done using the normal &quot;Add module&quot; page in the WB backend. <br />
+        When the installation is successfull, there is a new tool added to the Admin-Tools menu. <br />
+        Clicking the tool will display the current installed droplets, and a button to create your own. <br />
+        <br />
+        <h3>Getting Droplets</h3>
+        <br />
+        A fast growing number of Droplets are available for use, you can use the <a href="http://www.websitebakers.com/pages/droplets/official-library.php" target="_new">Official Droplets Library</a> in the AMASP project website, or you can search the WB Forum. <br />
+        <br />
+        <h3>Coding Droplets</h3>
+        <br />
+        Droplets run in PHP mode, no <span style="color: #ff0000">&lt;?php</span> or <span style="color: #ff0000">?&gt;</span> is allowed in the code! If any of these tags are found in the code they will be removed. Your code will not run as expected. <br />
+        The droplet code can NOT echo or print data to the output stream directly. The Droplet name is replaced by the return value of the PHP code.<br />
+        Example: [[HelloWorld]] <br />
+        <br />
+        <span style="color: #ff0000">Wrong code:</span> echo &quot;Hello World&quot;; <br />
+        <span style="color: #339966">Correct code:</span> return &quot;Hello World&quot;; <br />
+        <br />
+        Since version 0.3 Droplets can modify the complete page content. <br />
+        When the Droplet is called, an extra variable ($wb_page_data) is made available.
+        This variable holds all the content of your current generated webpage.
+        You can modify any part of this content simply by replacing it in the variable. There is no need to return this variable, the Droplet code will process changed content automatically.<br /><br />
+
+        Since version 0.3 Droplets will check the PHP code you have saved for validity. <br />
+        When the code will not execute correctly a red flashing icon will apear in the backend Droplets list. <br />
+        The standard blue icon is no guarantee that the Droplets does what you would expect it to do, it will just tell you if the code is valid PHP code.<br /><br />
+
+        Since version 0.3 Droplets you do not need to return any data. When you end your code with <pre>return true;</pre> there will not be an errormessage. The processed Droplet tag will be removed.<br />
+        <br />
+        <h3>PHP color coding</h3>
+        <br />
+        The Droplets edit page is ready to use the EditArea module. This module creates a color coded editor for PHP code. <br />
+        <br />
+        <br />
+    </body>
+</html>
Index: trunk/modules/droplets/FTAN_SUPPORTED
===================================================================
--- trunk/modules/droplets/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/droplets/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/droplets/ModalDialog.php
===================================================================
--- trunk/modules/droplets/ModalDialog.php	(nonexistent)
+++ trunk/modules/droplets/ModalDialog.php	(revision 2)
@@ -0,0 +1,15 @@
+
+
+    <!-- modal -->
+    <div class="modal">
+        <header class="modal-header">
+            <h1 class="modal-header-title left">Title of Modal</h1>
+            <button class="modal-header-btn right modal-close" title="Close Modal">OK</button>
+        </header>
+        <div class="modal-body">
+            <section class="modal-content">
+
+            </section>
+        </div>
+    </div>
+    <!-- modal -->

Property changes on: trunk/modules/droplets/ModalDialog.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/SimpleCommandDispatcher.inc
===================================================================
--- trunk/modules/droplets/SimpleCommandDispatcher.inc	(nonexistent)
+++ trunk/modules/droplets/SimpleCommandDispatcher.inc	(revision 2)
@@ -0,0 +1,163 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+//    require (dirname(__DIR__).'/SimpleRegister.php');
+
+    // detect if system running backend or frontend is already set by SimpleRegister
+//    $oApp = (isset($GLOBALS['admin']) ? $GLOBALS['admin'] : $GLOBALS['wb']);
+    $bIsBackend = ($oApp instanceof admin);
+    // set addon depending path / url
+    $sAddonPath = $oReg->AppPath.'modules/'.$sAddonName;
+    $sAddonUrl  = $oReg->AppUrl.'modules/'.$sAddonName;
+    $sAddonRel = '/modules/'.basename(__DIR__);
+    $sAddonThemeRel ='/themes/default';
+    // define the theme to use -----------------------------------------------------------
+    if (is_readable($sAddonPath.'/themes/default')) {
+    // first set fallback to system default theme
+        $sAddonThemePath = $sAddonPath.'/themes/default';
+        $sAddonThemeUrl  = $sAddonUrl.'/themes/default';
+    }
+    if (is_readable($sAddonPath.'/themes/'.$oReg->DefaultTheme)) {
+    // overload with the selected theme if accessible
+        $sAddonThemePath = $sAddonPath.'/themes/'.$oReg->DefaultTheme;
+        $sAddonThemeUrl  = $sAddonUrl.'/themes/'.$oReg->DefaultTheme;
+    }
+    // define the template to use --------------------------------------------------------
+    if (is_readable($sAddonPath.'/templates/default')) {
+        // first set fallback to system default template
+        $sAddonTemplatePath = $sAddonPath.'/templates/default';
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/default';
+    }
+    if (is_readable($sAddonPath.'/templates/'.$oReg->DefaultTemplate)) {
+        // try setting to the template of global settings
+        $sAddonTemplatePath = $sAddonPath.'/templates/'.$oReg->DefaultTemplate;
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/'.$oReg->DefaultTemplate;
+    }
+    if (!$bIsBackend && is_readable($sAddonPath.'/templates/'.$oReg->Template)) {
+        // try setting to the template of page depending settings
+        $sAddonTemplatePath = $sAddonPath.'/templates/'.$oReg->Template;
+        $sAddonTemplateUrl  = $sAddonUrl.'/templates/'.$oReg->Template;
+    }
+        // load core depending language file ------------------------------------------------
+        if(is_readable($oReg->AppPath.'/languages/EN.php') ){
+            include($oReg->AppPath.'languages/EN.php');
+        }
+        if(is_readable($oReg->AppPath.'/languages/'.$oReg->Language.'.php') ){
+            include($oReg->AppPath.'/languages/'.$oReg->Language.'.php');
+        }
+    // load addon depending language file ------------------------------------------------
+    if (is_readable($sAddonPath.'/languages/EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sAddonPath.'/languages/EN.php';
+    }
+    if (is_readable($sAddonPath.'/languages/'.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sAddonPath.'/languages/'.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sAddonPath.'/languages/'.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sAddonPath.'/languages/'.$oReg->Language.'.php';
+    }
+    // load addon Theme/Template depending language file ---------------------------------
+    $sTmp = ($bIsBackend ? $sAddonThemePath : $sAddonTemplatePath).'/languages/';
+    if (is_readable($sTmp.'EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sTmp.'EN.php';
+    }
+    if (is_readable($sTmp.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sTmp.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sTmp.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sTmp.$oReg->Language.'.php';
+    }
+
+    if( !function_exists( 'make_dir' ) ) { require($oReg->AppPath.'/framework/functions.php');  }
+    // Simple Command Dispatcher ---------------------------------------------------------
+     // Include the ordering class
+    if (!class_exists('order')) {
+    include $oReg->AppPath.'framework/class.order.php';
+    }
+    if (!class_exists('admin')) {
+        include $oReg->AppPath.'framework/class.admin.php';
+    }
+    if (!class_exists('Translate')) {
+        include $oReg->AppPath.'framework/Translate.php';
+    }
+    Translate::getInstance ()->enableAddon ('modules\\'.$sAddonName);
+
+    // sanitize command from compatibility file
+    $sCommand = (isset($sCommand) ? strtolower($sCommand) : 'overview');
+    // sanitize/validate request var 'cmd'
+    $sCmd = preg_replace(
+        '/[^a-z\/0-1]/siu',
+        '',
+        (isset($_REQUEST['cmd']) ? strtolower($_REQUEST['cmd']) : '')
+    );
+    // build valid sCommand string
+    if (($sCommand && $sCmd)) {
+        if (!preg_match('/^'.$sCommand.'/si', $sCmd)) {
+            // concate both arguments if needed
+            $sCommand .= '/'.$sCmd;
+        } else {
+            $sCommand = $sCmd;
+        }
+$sCmd = '';
+    }
+
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $sCommand ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+    $sCommand = 'cmd'.str_replace( // remove spaces and add prefix 'cmd'
+        ' ', '',
+        ucfirst( // make first char of every word to uppercase
+            str_replace( // change '/' to space
+                '/', ' ',
+                preg_replace( // change leading 'add/' to 'modify/'
+                    '/^add\//s',
+                    'modify/',
+                    trim(($sCommand ?: $sCmd), '/') // remove leading and trailing slashes
+                )
+            )
+        )
+    );
+
+    // execute command -------------------------------------------------------------------
+    if (is_readable($sAddonPath.'/cmd/'.$sCommand.'.inc') ) {
+        include($sAddonPath.'/cmd/'.$sCommand.'.inc');
+    } else {
+        throw new Exception('call of invalid command ['.$sCommand.'] for [modules/'.$sAddonName.'] failed!');
+    }
+*/
+
+// end of file
\ No newline at end of file

Property changes on: trunk/modules/droplets/SimpleCommandDispatcher.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/ajax/ajax.php
===================================================================
--- trunk/modules/droplets/ajax/ajax.php	(nonexistent)
+++ trunk/modules/droplets/ajax/ajax.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+
+    $aJsonRespond = [];
+    $sModuleDir   = basename(dirname(__DIR__));
+    // require config for Constants and DB access
+    require(dirname(dirname(dirname(__DIR__))).'/config.php');
+    // Check if user has enough rights to do this:
+    // initialize json_respond array  (will be sent back)
+    try{
+        if (!class_exists('admin', false)){require(WB_PATH.'/framework/class.admin.php');}
+        $admin = new admin('Modules', 'module_view', FALSE, FALSE);
+    // first read and validate the $_POST arguments
+        $aAllowedActions = ['toggle_active_status'];
+        $sRequestAction  = $_POST['action'] ?:'';
+        // test if action value is in allowed list of actions
+        if ( !in_array($sRequestAction, $aAllowedActions)) {
+            throw new Exception('no valid "action" was set');
+        }
+        $sRequestIdKey = $_POST['iRecordId'];
+//        $iIdKey = $admin->checkIDKEY('iRecordId');
+//        $iIdKey = $admin->checkIDKEY('iRecordId', 0, '', true);
+        $iIdKey = $sRequestIdKey;
+        if (!($iRequestRecordId = (int)$iIdKey ?: 0)) {
+            throw new Exception('no valid RecordId was set '.$iRequestRecordId);
+        }
+        if (!($admin->is_authenticated() && $admin->get_permission($sModuleDir, 'module'))) {
+            throw new Exception('You\'re not allowed to make changes to Module: ['.$sModuleDir.']');
+        }
+        switch ($sRequestAction):
+            case 'toggle_active_status':
+                // Check the Parameters
+                $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` SET '
+                     . '`active`= (`active` IS NOT TRUE) '
+                     . 'WHERE `id`='.$iRequestRecordId;
+                if (!(bool)$database->query($sql)) {
+                    throw new Exception('DB access fail ['.$database->get_error().']');
+                }
+                break;
+            default:
+                throw new Exception('no valid "action" was set ');
+                break;
+        endswitch;
+        $aJsonRespond['message'] = 'Activity Status successfully changed';
+        $aJsonRespond['success'] = true;
+//        $aJsonRespond['sIdKey']  = $admin->getIDKEY($iIdKey);
+        $aJsonRespond['sIdKey']  = $iIdKey;
+    } catch (Exception $e) {
+        $aJsonRespond['message'] = $e->getMessage();
+        $aJsonRespond['success'] = false;
+//        $aJsonRespond['sIdKey']  = $admin->getIDKEY($iIdKey);
+        $aJsonRespond['sIdKey']  = $iIdKey;
+    }
+    // echo the json_respond to the ajax function
+    exit(json_encode($aJsonRespond));

Property changes on: trunk/modules/droplets/ajax/ajax.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/ajax/ajaxActiveStatus.js
===================================================================
--- trunk/modules/droplets/ajax/ajaxActiveStatus.js	(nonexistent)
+++ trunk/modules/droplets/ajax/ajaxActiveStatus.js	(revision 2)
@@ -0,0 +1,65 @@
+/**
+ * AJAX
+ *        Plugin to delete Records from a given table without a new page load (no reload)
+ */
+// Building a jQuery Plugin
+// using the Tutorial: http://www.learningjquery.com/2007/10/a-plugin-development-pattern
+// plugin definition
+/*
+ajaxActiveStatus OPTIONS
+=====================================================================================
+MODULE = 'modulename',   // (string)
+DB_RECORD_TABLE: 'modulename_table',        // (string)
+DB_COLUMN: 'item_id',                       // (string) the key column you will use as reference
+sFTAN: ''                                   // (string) FTAN
+*/
+
+(function($) {
+        $.fn.ajaxActiveStatus = function(options) {
+                var aOpts = $.extend({}, $.fn.ajaxActiveStatus.defaults, options);
+//console.info(aOpts);
+                $(this).find('a').removeAttr("href").css('cursor', 'pointer');
+                $(this).click(function() {
+                        var oLink = $(this).find('a');
+                        var oElement = $(this).find('img');
+                        var iRecordId = oElement.attr("id").substring(7);
+console.info(iRecordId);
+                        var oRecord = $("td#" + 'id_' + iRecordId);
+                        switch(oElement.attr("src")){
+                            case Droplet.ThemeUrl + 'img/24' +"/status_1.png": var action = "0"; break;
+                            case Droplet.ThemeUrl + 'img/24' +"/status_0.png": var action = "1"; break;
+                        }
+console.info(oRecord);
+                                // pregenerate the data string
+/*
+                        var sDataString = 'purpose=active_status&action=active_status'+'&MODULE='
+                                        +aOpts.MODULE+'&DB_COLUMN='
+                                        +aOpts.DB_COLUMN+'&iRecordID='
+                                        +iRecordID;
+*/
+                        var sDataString = 'action=toggle_active_status&iRecordId='+iRecordId;
+                        $.ajax({
+                                url: Droplet.AddonUrl +"ajax/ajax.php",
+                                type: "POST",
+                                dataType: 'json',
+                                data: sDataString,
+                                success: function(json_respond) {
+                                    if(json_respond.success === true) {
+/*
+*/
+                                        oRecord.attr("id", json_respond.sIdKey);
+                                        oElement.attr("id", "active_"+ json_respond.sIdKey);
+console.info(oRecord.attr);
+                                        oElement.attr("src", Droplet.ThemeUrl + 'img/24' +"/status_"+ action +".png");
+//                                        oElement.animate({opacity: 1});
+                                    } else {
+                                            oRecord.attr("id", json_respond.sIdKey);
+                                            oElement.attr("id", "active_"+ json_respond.sIdKey);
+                                            alert(json_respond.message);
+                                    }
+                                }
+                        });
+
+                });
+        }
+})(jQuery);
Index: trunk/modules/droplets/backend.css
===================================================================
--- trunk/modules/droplets/backend.css	(nonexistent)
+++ trunk/modules/droplets/backend.css	(revision 2)
@@ -0,0 +1,2 @@
+/* switch path to default or ownstyle */
+@import url("themes/default/css/default.css");
Index: trunk/modules/droplets/backend_body.js
===================================================================
--- trunk/modules/droplets/backend_body.js	(nonexistent)
+++ trunk/modules/droplets/backend_body.js	(revision 2)
@@ -0,0 +1,165 @@
+/**
+ *
+ */
+domReady(function() {
+
+//    LoadOnFly ( 'body', WB_URL + '/modules/droplets/js/draggabilly.pkgd.js' );
+//    LoadOnFly ( 'body', WB_URL + '/modules/droplets/js/modal.js' );
+
+    function toggle_visibility(id) {
+       var e = document.getElementById(id);
+       if(e.style.display == 'block')
+          e.style.display = 'none';
+       else
+          e.style.display = 'block';
+    }
+// CHANGELOG 20160323
+    function addEvent(elem, event, fn) {
+        if(!elem) { return false; }
+//console.info (elem);
+        if (elem.addEventListener) {
+            elem.addEventListener(event, fn, false);
+        } else {
+            elem.attachEvent("on" + event, function() {
+                // set the this pointer same as addEventListener when fn is called
+                return(fn.call(elem, window.event));
+            });
+        }
+    }
+
+    function mouseX (e) {
+      if (e.pageX) {
+        return e.pageX;
+      }
+      if (e.clientX) {
+        return e.clientX + (document.documentElement.scrollLeft ?
+                            document.documentElement.scrollLeft :
+                            document.body.scrollLeft);
+      }
+      return null;
+    }
+
+    function mouseY (e) {
+      if (e.pageY) {
+        return e.pageY;
+      }
+      if (e.clientY) {
+        return e.clientY + (document.documentElement.scrollTop ?
+                            document.documentElement.scrollTop :
+                            document.body.scrollTop);
+      }
+      return null;
+    }
+
+    function dragable (clickEl,dragEl) {
+      var p = get(clickEl);
+      var t = get(dragEl);
+      var drag = false;
+      offsetX = 0;
+      offsetY = 0;
+      var mousemoveTemp = null;
+      if (t) {
+        var move = function (x,y) {
+          t.style.left = (parseInt(t.style.left)+x) + "px";
+          t.style.top  = (parseInt(t.style.top) +y) + "px";
+        }
+        var mouseMoveHandler = function (e) {
+          e = e || window.event;
+          if(!drag){return true};
+          var x = mouseX(e);
+          var y = mouseY(e);
+          if (x != offsetX || y != offsetY) {
+            move(x-offsetX,y-offsetY);
+            offsetX = x;
+            offsetY = y;
+          }
+          return false;
+        }
+        var start_drag = function (e) {
+          e = e || window.event;
+          offsetX=mouseX(e);
+          offsetY=mouseY(e);
+          drag=true; // basically we're using this to detect dragging
+          // save any previous mousemove event handler:
+          if (document.body.onmousemove) {
+            mousemoveTemp = document.body.onmousemove;
+          }
+          document.body.onmousemove = mouseMoveHandler;
+          return false;
+        }
+        var stop_drag = function () {
+          drag=false;
+          // restore previous mousemove event handler if necessary:
+          if (mousemoveTemp) {
+            document.body.onmousemove = mousemoveTemp;
+            mousemoveTemp = null;
+          }
+          return false;
+        }
+        p.onmousedown = start_drag;
+        p.onmouseup = stop_drag;
+      }
+    }
+
+    function move(ev) {
+      ev.dataTransfer.setData('text', ev.target.id);
+    }
+
+    window.addEventListener("load",function () {
+      initCheckboxes();
+//      addEvent(document.getElementById('selectOrder'), 'change', changeOrder);
+      var dragItems = document.querySelectorAll("[draggable=true]")
+      for (var i = 0; i < dragItems.length; i++) {
+        var draggable = dragItems[i];
+        draggable.addEventListener("dragstart",move);
+      };
+    });
+//    addEvent( window, 'load', initCheckboxes );
+    function initCheckboxes() {
+        addEvent(document.getElementById('select_all'), 'click', setCheckboxes);
+    }
+    function setCheckboxes() {
+        var cb = document.getElementById( 'cb-droplets' ).getElementsByTagName('input');
+        var isChecked = document.getElementById('select_all').checked;
+        for (var i = 0; i < cb.length; i++) {
+            cb[i].checked = isChecked;
+        }
+    }
+
+    function selectSingleElement(IdSuffix, el ) {
+        document.getElementById(el.id + IdSuffix).checked ='checked';
+        document.getElementById('select_all').checked =false;
+    }
+
+    function deselectAllElements(IdSuffix, el ) {
+        for ( i = 0;; i++) {
+            if (!(e = document.getElementById('L' + i + IdSuffix))) {
+                break;
+            }
+            e.checked = el.checked;
+        }
+    }
+    function changeOrder(){
+console.info(this);
+    }
+
+});
+/*-------------------------------------------------------------------------------------------------*/
+if (typeof Droplet ==="object"){
+    var DR_MODULE_URL = Droplet.AddonUrl;
+    var DR_ICONS = Droplet.ThemeUrl + 'img';
+    var DR_AJAX_PLUGINS =  Droplet.AddonUrl + 'ajax';  // this var could change in the future
+    var LANGUAGE = LANGUAGE ? LANGUAGE : 'EN'; // set var LANGUAGE to EN if LANGUAGE not set before
+    /*
+    console.info(DR_MODULE_URL);
+    console.info(DR_ICONS);
+    console.info(DR_AJAX_PLUGINS);
+    */
+            $.insert(  Droplet.AddonUrl + 'ajax' +"/ajaxActiveStatus.js");
+            // AjaxHelper change item active status
+            $("td.toggle_active_status").ajaxActiveStatus({
+                    MODULE : Droplet.AddonUrl,
+                    DB_COLUMN: 'id',
+                    sIdKey: ''
+            });
+}
Index: trunk/modules/droplets/commands/ToggleStatus.php
===================================================================
--- trunk/modules/droplets/commands/ToggleStatus.php	(nonexistent)
+++ trunk/modules/droplets/commands/ToggleStatus.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         droplets
+ * @subpackage      ToggleStatus
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.4
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ /* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+/*
+*/
+if ($droplet_id === false) {
+    $oApp->print_error('TOGGLE_DROPLET_IDKEY::'.$MESSAGE['GENERIC_SECURITY_ACCESS'], $ToolUrl);
+    exit();
+}
+    $sql  = 'SELECT `active` FROM `'.TABLE_PREFIX.'mod_droplets` ';
+    $sqlWhere  = 'WHERE `id` = '.(int)$droplet_id;
+    $val = !(bool)$oDb->get_one($sql.$sqlWhere);
+    $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` SET '
+//         .  '`active`='.$val.' ';
+         .  '`active`='.($val ? true : 0).' ';
+   if (!$oDb->query($sql.$sqlWhere)){
+        msgQueue::add($sql.$sqlWhere.'<br />TOGGLE_DROPLET::'.$oDb->get_error() );
+   } else {
+//            msgQueue::add('TOGGLE_DROPLET::'.$TEXT['SUCCESS'], true );
+   }
+

Property changes on: trunk/modules/droplets/commands/ToggleStatus.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/add_droplet.php
===================================================================
--- trunk/modules/droplets/commands/add_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/add_droplet.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+$droplet_id = $oApp->getIDKEY(0);
+if ($oApp->get_permission('admintools') == true) {
+    $modified_when = time();
+    $modified_by = intval($oApp->get_user_id());
+}

Property changes on: trunk/modules/droplets/commands/add_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/backup_droplets.php
===================================================================
--- trunk/modules/droplets/commands/backup_droplets.php	(nonexistent)
+++ trunk/modules/droplets/commands/backup_droplets.php	(revision 2)
@@ -0,0 +1,118 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $aFilesInDir ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+$sOverviewDroplets = $oTrans->TEXT_LIST_OPTIONS;
+
+// suppress to print the header, so no new FTAN will be set
+//$oApp = new admin('Addons', 'templates_uninstall', false);
+if( !$oApp->checkFTAN() ){
+    $oApp->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+    exit();
+}
+// After check print the header
+
+if (!function_exists( 'make_dir' ) ) { require($oReg->AppPath.'/framework/functions.php');  }
+if (!function_exists('insertDropletFile')) { require($sAddonPath.'/droplets.functions.php'); }
+//$oApp->print_header();
+// create backup filename with pre index
+$sBackupDir = $sAddonRel.'/data/archiv/';
+make_dir( $oReg->AppPath.$sBackupDir );
+
+$sDropletTmpDir = $sAddonRel.'/data/tmp/';
+$sDropletTmpDir = 'temp/modules/'.$sAddonName.'/tmp/';
+rm_full_dir($oReg->AppPath.$sDropletTmpDir, true);
+make_dir( $oReg->AppPath.$sDropletTmpDir );
+
+$sTimeStamp = '_'.strftime('%Y%m%d_%H%M%S', time() + $oReg->Timezone ).'.zip';
+
+$FilesInDB = '*';
+$aFullList = glob($sAddonPath.'/data/archiv/*.zip', GLOB_NOSORT);
+
+if( isset( $aRequestVars['cb'] ) && sizeof( $aRequestVars['cb']) == 1  ) {
+    $FilesInDB  = '';
+    foreach( $aRequestVars['cb'] as $FileName ) {
+        $sSearchFor = $FileName;
+        $FilesInDB .= '\''.$FileName.'\'';
+    }
+    $sBackupName = 'Droplet_'.$FileName.$sTimeStamp;
+} elseif( isset( $aRequestVars['cb'] ) && sizeof( $aRequestVars['cb'] > 1 ) ) {
+    $FilesInDB  = '';
+    foreach( $aRequestVars['cb'] as $FileName ) {
+        $sSearchFor = $FileName;
+        $FilesInDB .= '\''.$FileName.'\',';
+    }
+    $sBackupName = 'DropletsBackup'.$sTimeStamp;
+} else {
+    $sSearchFor  = 'DropletsFullBackup';
+    $sBackupName = 'DropletsFullBackup'.$sTimeStamp;
+}
+
+$aFilesInDir = array();
+foreach ($aFullList as $index =>$sItem) {
+    if (preg_match('/[0-9]+_('.$sSearchFor.'_[^\.]*?)\.zip/si', $sItem, $aMatch)) {
+        $aFilesInDir[$index+1] = $aMatch[1];
+    }
+}
+
+unset($aFullList);
+
+$sZipFile = $sBackupDir.$sBackupName;
+if( !class_exists('PclZip',false) ) { require( $oReg->AppPath.'/include/pclzip/pclzip.lib.php'); }
+$aFilesToZip = backupDropletFromDatabase( $oReg->AppPath.$sDropletTmpDir, $FilesInDB, $oDb );
+
+$oArchive = new PclZip( $oReg->AppPath.$sZipFile );
+$archiveList = $oArchive->create(
+                   $aFilesToZip
+                  ,PCLZIP_OPT_REMOVE_ALL_PATH
+              );
+if ($archiveList == 0){
+    echo 'Packaging error: '.$oArchive->errorInfo(true);
+    msgQueue::add("Error : ".$oArchive->errorInfo(true));
+} elseif(is_readable($oReg->AppPath.$sBackupDir)) {
+?>
+
+<header class="droplets"><h4 >Create archive: <?php echo basename($sZipFile); ?></h4></header>
+
+<section class="droplets drop-outer">
+<ol>
+<?php
+    foreach($archiveList AS $key=>$aDroplet ) {
+?>
+    <li>Backup <strong> <?php echo $aDroplet['stored_filename']; ?></strong></li>
+<?php } ?>
+
+</ol>
+<div class="drop-backup">
+<h2>Backup created - <a class="btn" href="<?php echo $oReg->AppUrl.$sBackupDir.$sBackupName; ?>"><?php echo $Droplet_Message['GENERIC_LOCAL_DOWNLOAD']; ?></a>
+                  <button style="padding: 0.2825em 0.8525em; " name="cancel" class="btn" type="button" onclick="window.location='<?php echo $ToolUrl; ?>';"><?php echo $TEXT['CANCEL']; ?></button>
+
+</h2>
+</div>
+</section>
+<?php  } else {
+    msgQueue::add('Backup not created - '.$oTrans->TEXT_BACK.'');
+}
+

Property changes on: trunk/modules/droplets/commands/backup_droplets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/call_help.php
===================================================================
--- trunk/modules/droplets/commands/call_help.php	(nonexistent)
+++ trunk/modules/droplets/commands/call_help.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// Create new template object with phplib
+    $oTpl = new Template($sAddonThemePath, 'keep' );
+    $oTpl->set_file('page', 'call_help.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+    $oTpl->set_var($aLang);
+    $oTpl->set_var($aTplDefaults);
+/*-- finalize the page -----------------------------------------------------------------*/
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');
+

Property changes on: trunk/modules/droplets/commands/call_help.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/call_import.php
===================================================================
--- trunk/modules/droplets/commands/call_import.php	(nonexistent)
+++ trunk/modules/droplets/commands/call_import.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$sBackupDir = $sAddonRel.'/data/archiv/';
+$aZipFiles = glob($oReg->AppPath.$sAddonRel.'/data/archiv/*.zip', GLOB_NOSORT);
+?><form action="<?php echo $ToolUrl; ?>" method="post" name="droplets_form" enctype="multipart/form-data" >
+    <div class="droplet-import block-outer modalDialog" id="import" draggable="true" style="overflow: hidden;">
+    <div style="width: 71.525em;">
+         <button name="cancel" class="close" type="button" onclick="window.location='<?php echo $ToolUrl; ?>';">X</button>
+        <header class="modal-label"><h2><?php echo $oTrans->DR_TEXT_RESTORE; ?></h2></header>
+        <div class="modal-inner file-select-box">
+            <span style="margin-left: 10.525em;"></span>
+            <span style="text-align: left; padding: 0.525em 0;">
+                <select size="1" name="zipFiles" >
+                    <option style=" padding: 0.225em 0.455em;" value=""><?php echo $oTrans->DR_TEXT_PLEASE_SELECT; ?></option>
+<?php
+foreach( $aZipFiles as $files ) {
+      $value =  basename($files);
+      $files = str_replace($oReg->AppPath, '', $files );
+ ?>
+              <option style=" padding: 0.225em 0.455em;" value="<?php echo $files; ?>"><?php echo $value; ?></option>
+<?php } ?></select>
+            <button class="btn" type="submit" name="command" value="import_droplets"><?php echo $oTrans->DR_TEXT_ARCHIV_LOAD; ?></button>
+            <button class="btn" type="submit" name="command" value="delete_archiv"><?php echo $oTrans->TEXT_DELETE; ?></button>
+            </span>
+            <div class="file-box">
+                <span style="margin-left: 10.025em;"> </span>
+                <span style="text-align: left; padding: 0.525em 0; display: inline-block; margin: 0.525em;">
+                    <input type="file" name="zipFiles" id="file" class="inputfile inputfile-6" data-multiple-caption="{count} files selected" multiple />
+                    <label for="file"><span></span> <strong>
+                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
+                    <path d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"/>
+                    </svg> Choose a file&hellip;</strong>
+                    </label>
+                    <button  class="input-file btn command" name="command" value="import_droplets" type="submit"><?php echo $oTrans->DROPLET_MESSAGE_GENERIC_LOCAL_UPLOAD; ?></button>
+                </span>
+            </div>
+        </div>
+        <footer class="modal-label">
+            <h4 style="margin-left: 0.955em; top: 0.925em; position: relative;">Upload icon by <a href="http://www.flaticon.com/free-icon/outbox_3686" target="_blank">FlatIcon</a>.</h4>
+        </footer>
+    </div>
+  </div>
+</form>

Property changes on: trunk/modules/droplets/commands/call_import.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/copy_droplet.php
===================================================================
--- trunk/modules/droplets/commands/copy_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/copy_droplet.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         droplets
+ * @subpackage      copy_droplets
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.4
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ /* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+//$sTimeStamp  = '_'.strftime('%Y%m%d_%H%M%S', time()+ TIMEZONE );
+$sTimeStamp  = '';
+if ($iDropletAddId === false) {
+    $oApp->print_error('COPY_DROPLET::'.$oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl);
+    exit();
+}
+    // Get header and footer
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` '
+          . 'WHERE `id` = '.$iDropletAddId;
+    $oDroplet = $oDb->query($sql);
+    $aCopyDroplet = $oDroplet->fetchRow(MYSQLI_ASSOC);
+//    $aCopyDroplet['name'] = '';
+    $content = (htmlspecialchars($aCopyDroplet['code']));
+    $droplet_id = $oApp->getIDKEY(0);

Property changes on: trunk/modules/droplets/commands/copy_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/delete_archiv.php
===================================================================
--- trunk/modules/droplets/commands/delete_archiv.php	(nonexistent)
+++ trunk/modules/droplets/commands/delete_archiv.php	(revision 2)
@@ -0,0 +1,55 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         test
+ * @subpackage      test
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ /* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+if( !$oApp->checkFTAN() ){
+    $oApp->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+    exit();
+}
+if ( @$aRequestVars['zipFiles'] == '' ) {
+    msgQueue::add( $oTrans->DROPLET_MESSAGE_GENERIC_MISSING_ARCHIVE_FILE );
+} else {
+
+    $sArchFile = $oReg->AppPath.$aRequestVars['zipFiles'];
+    $unlink = @unlink($sArchFile);
+
+    if( $unlink==false ) {
+        msgQueue::add( $oTrans->DROPLET_MESSAGE_ARCHIVE_NOT_DELETED );
+    } else {
+        msgQueue::add( $oTrans->DROPLET_MESSAGE_ARCHIVE_DELETED, true );
+    }
+
+}
+

Property changes on: trunk/modules/droplets/commands/delete_archiv.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/delete_droplet.php
===================================================================
--- trunk/modules/droplets/commands/delete_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/delete_droplet.php	(revision 2)
@@ -0,0 +1,89 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// Get id
+if ($droplet_id===false) {
+    $oApp->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl);
+    exit();
+}
+
+if( !$oApp->checkFTAN() ){
+    $oApp->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+    exit();
+}
+
+if (!isset( $aRequestVars['DropletsToDelete']))
+{
+    $sDropletsToDelete = ( isset($droplet_id) && !isset( $aRequestVars['cb']) ? $droplet_id : '' );
+    $iDELETED = (isset($droplet_id) ? 1 : 0 );
+    if( isset( $aRequestVars['cb'])  ) {
+        $aRequestVars['cb'] = array_flip(  $aRequestVars['cb'] );
+        $aRequestVars['cb'] = array_unique($aRequestVars['cb'], SORT_NUMERIC);
+        $iDELETED = sizeof( $aRequestVars['cb'] );
+        $sDropletsToDelete = ( isset($droplet_id) ? implode(',',$aRequestVars['cb'] ) : '' );
+    }
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` '
+          . 'WHERE `id` IN ('.$sDropletsToDelete.') ';
+    $inDroplets = '';
+    if ( $oRes = $oDb->query($sql)) {
+        while( $aRow = $oRes->fetchRow( MYSQLI_ASSOC ) ) {
+          $inDroplets .= $aRow['name'].', ';
+        }
+    }
+    $iDropletIdKey = $oApp->getIDKEY($droplet_id);
+    $aFtan = $admin->getFTAN('');
+    // prepare default data for phplib and twig
+    $aTplData = array (
+        'FTAN_NAME' => $aFtan['name'],
+        'FTAN_VALUE' => $aFtan['value'],
+        'iDropletIdKey' => $iDropletIdKey,
+        'sDropletsToDelete' => $sDropletsToDelete,
+        'inDroplets' =>  rtrim($inDroplets, ', '),
+        );
+// Create new template object with phplib
+    $oTpl = new Template($sAddonThemePath, 'keep' );
+    $oTpl->set_file('page', 'delete_droplets.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+//    $oTpl->set_var('FTAN_NAME', $aFtan['name']);
+//    $oTpl->set_var('FTAN_VALUE', $aFtan['value']);
+    $oTpl->set_var($aLang);
+    $oTpl->set_var($aTplDefaults);
+    $oTpl->set_var($aTplData);
+/*-- finalize the page -----------------------------------------------------------------*/
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');
+
+} elseif (!isset($aRequestVars['cancel'])) {
+    $sDropletsToDelete = $aRequestVars['DropletsToDelete'];
+    $iDELETED = sizeof( explode(',', $sDropletsToDelete) );
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_droplets` '
+          . 'WHERE `id` IN ('.$sDropletsToDelete.') ';
+    // Delete droplet
+    $oDb->query($sql);
+
+    // Check if there is a db error, otherwise say successful
+    if($oDb->is_error()) {
+        msgQueue::add( $oDb->get_error().'<br />'.$sql );
+    } else {
+        msgQueue::add( sprintf("%'.02d", $iDELETED ).'  '.$oTrans->DR_TEXT_DROPLETS_DELETED, true );
+    }
+} else { /* do nothing */}

Property changes on: trunk/modules/droplets/commands/delete_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/import_droplets.php
===================================================================
--- trunk/modules/droplets/commands/import_droplets.php	(nonexistent)
+++ trunk/modules/droplets/commands/import_droplets.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+if( !$oApp->checkFTAN() ){
+    $oApp->print_error($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+    exit();
+}
+
+            if( isset( $_FILES['zipFiles'] ) && !$_FILES['zipFiles']['error']) {
+                $aRequestVars['uploads']  = $_FILES['zipFiles'];
+                $sArchiveFile = $_FILES['zipFiles']['tmp_name'];
+
+                move_uploaded_file (
+                     $_FILES['zipFiles']['tmp_name'] ,
+                     $oReg->AppPath.'/temp/'. $_FILES['zipFiles']['name']
+                );
+                $sArchiveFile = ( $oReg->AppPath.'/temp/'. $_FILES['zipFiles']['name'] );
+            } else {
+                $sArchiveFile = ( $oReg->AppPath.$aRequestVars['zipFiles']);
+            }
+if (!is_readable( $sArchiveFile)) {
+    msgQueue::add( $oTrans->DROPLET_MESSAGE_GENERIC_MISSING_ARCHIVE_FILE );
+} else if ( is_readable( $sArchiveFile ) ) {
+
+    if( !class_exists('PclZip',false) ) { require( $oReg->AppPath.'/include/pclzip/pclzip.lib.php'); }
+    $oArchive = new PclZip( $sArchiveFile );
+    $aFilesInArchiv = $oArchive->listContent();
+    if ($aFilesInArchiv == 0) {
+        msgQueue::add( $oTrans->DROPLET_MESSAGE_GENERIC_MISSING_ARCHIVE_FILE );
+    } else {
+        $aFtan = $admin->getFTAN('');
+        // prepare default data for phplib and twig
+        $aTplData = array (
+            'FTAN_NAME' => $aFtan['name'],
+            'FTAN_VALUE' => $aFtan['value'],
+            'sArchiveFile' => $sArchiveFile,
+            'sArchiveFilename' => basename($sArchiveFile),
+            );
+    // Create new template object with phplib
+        $oTpl = new Template($sAddonThemePath, 'keep' );
+        $oTpl->set_file('page', 'import_droplets.htt');
+        $oTpl->set_block('page', 'main_block', 'main');
+        $oTpl->set_var($aLang);
+        $oTpl->set_var($aTplDefaults);
+        $oTpl->set_var($aTplData);
+        $oTpl->set_block('main_block', 'list_archiv_block', 'list_archiv');
+        $oTpl->set_block('main_block', 'show_archiv_folder_block', 'show_archiv_folder');
+        foreach ($aFilesInArchiv as $key=>$value) {
+            $aData = array (
+                'index' => $value['index'],
+                'filename' => basename($value['filename'],'.php'),
+                'comment' => $value['comment'],
+                'size' => $value['size'],
+                'created_when' => date('d.m.Y'.' '.'H:i', $value['mtime']+TIMEZONE),
+                );
+            $oTpl->set_var($aData);
+            if ( $value['folder'] ) {
+                $oTpl->parse('show_archiv_folder', 'show_archiv_folder_block', true);
+            } else {
+                $oTpl->set_block('show_archiv_folder_block', '');
+            }
+            $oTpl->parse('list_archiv', 'list_archiv_block', true);
+        }
+/*-- finalize the page -----------------------------------------------------------------*/
+        $oTpl->parse('main', 'main_block', false);
+        $oTpl->pparse('output', 'page');
+    }
+}

Property changes on: trunk/modules/droplets/commands/import_droplets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/modify_droplet.php
===================================================================
--- trunk/modules/droplets/commands/modify_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/modify_droplet.php	(revision 2)
@@ -0,0 +1,188 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// Get id
+if(!isset($dropletAddId)) {
+    $droplet_id = (@$droplet_id?:'droplet_id');
+    $droplet_id = ($oApp->checkIDKEY($droplet_id, false, ''));
+}
+if ($droplet_id === false) {
+    $oApp->print_error('MODIFY_DROPLET_IDKEY::'.$oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl);
+    exit();
+}
+
+$sOverviewDroplets = $oTrans->DR_TEXT_DROPLETS;
+$sTimeStamp = (@$sTimeStamp?:'');
+$modified_by = $oApp->get_user_id();
+if (($droplet_id > 0)) {
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` '
+          . 'WHERE `id` = '.$droplet_id;
+    $oDroplet = $oDb->query($sql);
+    $aDroplet = $oDroplet->fetchRow(MYSQLI_ASSOC);
+    $content  = (htmlspecialchars($aDroplet['code']));
+    $sSubmitButton = $oTrans->TEXT_SAVE;
+    $iDropletIdKey = $oApp->getIDKEY($droplet_id);
+    $dropletAddId = $droplet_id;
+} else {
+    $aDroplet = array();
+    // check if it is a normal add or a copy
+    if (sizeof($aDroplet)==0) {
+        $aDroplet = array(
+            'id' => $dropletAddId,
+            'name' => 'Dropletname',
+            'code' => 'return true;',
+            'description' => '',
+            'modified_when' => 0,
+            'modified_by' => 0,
+            'active' => 0,
+            'admin_edit' => 0,
+            'admin_view' => 0,
+            'show_wysiwyg' => 0,
+            'comments' => ''
+            );
+        $content = '';
+    }
+    $dropletAddId = 0;
+    $sSubmitButton = $oTrans->TEXT_ADD;
+    $iDropletIdKey = $oApp->getIDKEY($droplet_id);
+}
+require_once($oReg->AppPath . '/include/editarea/wb_wrapper_edit_area.php');
+echo registerEditArea ('contentedit','php');
+//'contentedit','php',true,'both',true,true,600,450,'search,fullscreen, |, undo, redo, |, select_font,|,highlight, reset_highlight, |, help');
+
+?><br /><div class="block-outer droplets">
+<form name="modify" action="<?php echo $ToolUrl; ?>" method="post" style="margin: 0;">
+    <input type="hidden" name="command" value="save_droplet" />
+    <input type="hidden" name="data_codepress" value="" />
+    <input type="hidden" name="droplet_id" value="<?php echo $iDropletIdKey; ?>" />
+    <input type="hidden" name="id" value="<?php echo $dropletAddId; ?>" />
+    <input type="hidden" name="show_wysiwyg" value="<?php echo $aDroplet['show_wysiwyg']; ?>" />
+    <?php echo $oApp->getFTAN(); ?>
+    <table class="droplets droplets-modify" style="width: 100%;">
+        <tbody>
+        <tr>
+            <td class="setting_name">
+                <?php echo $oTrans->TEXT_NAME; ?>:
+            </td>
+            <td >
+                <div class="block-outer" style="width: 98%;">
+<?php if ($droplet_id ==0 ){ ?>
+                     <input type="text" class="rename-input" name="title" value="<?php echo stripslashes($aDroplet['name']).$sTimeStamp; ?>" style="width: 100%;" maxlength="32" />
+<?php } else { ?>
+                     <div class="noInput"><?php echo stripslashes($aDroplet['name']).$sTimeStamp; ?></div>
+<?php }?>
+                </div>
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name" ><?php echo $oTrans->TEXT_DESCRIPTION; ?>:</td>
+            <td>
+                <input type="text" name="description" value="<?php echo stripslashes($aDroplet['description']); ?>" style="width: 98%;" />
+            </td>
+        </tr>
+        <tr>
+            <td class="setting_name" >
+                <?php echo $oTrans->TEXT_ACTIVE; ?>:
+            </td>
+            <td>
+                <input type="radio" name="active" id="active_true" value="1" <?php if($aDroplet['active'] == 1) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="javascript: document.getElementById('active_true').checked = true;">
+                <label><?php echo $oTrans->TEXT_YES; ?></label>
+                </a>
+                <input type="radio" name="active" id="active_false" value="0" <?php if($aDroplet['active'] == 0) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="javascript: document.getElementById('active_false').checked = true;">
+                <label><?php echo $oTrans->TEXT_NO; ?></label>
+                </a>
+            </td>
+        </tr>
+<?php
+// Next show only if admin is logged in, user_id = 1
+if ($modified_by == 1) {
+    ?>
+        <tr>
+            <td class="setting_name">
+                <?php echo $oTrans->TEXT_ADMIN; ?>:
+            </td>
+            <td>
+                <?php echo $oTrans->DR_TEXT_ADMIN_EDIT; ?>&nbsp;
+                <input type="radio" name="admin_edit" id="admin_edit_true" value="1" <?php if($aDroplet['admin_edit'] == 1) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="document.getElementById('admin_edit_true').checked = true;">
+                <label><?php echo $oTrans->TEXT_YES; ?></label>
+                </a>
+                <input type="radio" name="admin_edit" id="admin_edit_false" value="0" <?php if($aDroplet['admin_edit'] == 0) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="document.getElementById('admin_edit_false').checked = true;">
+                <label><?php echo $oTrans->TEXT_NO; ?></label>
+                </a>
+                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+                <?php echo $oTrans->DR_TEXT_ADMIN_VIEW; ?>:
+                <input type="radio" name="admin_view" id="admin_view_true" value="1" <?php if($aDroplet['admin_view'] == 1) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="document.getElementById('admin_view_true').checked = true;">
+                <label><?php echo $oTrans->TEXT_YES; ?></label>
+                </a>
+                <input type="radio" name="admin_view" id="admin_view_false" value="0" <?php if($aDroplet['admin_view'] == 0) { echo ' checked="checked"'; } ?> />
+                <a href="#" onclick="document.getElementById('admin_view_false').checked = true;">
+                <label><?php echo $oTrans->TEXT_NO; ?></label>
+                </a>
+            </td>
+        </tr>
+    <?php
+}
+?>
+        <tr>
+            <td class="setting_name"><?php echo $oTrans->TEXT_CODE; ?>:</td>
+            <td >
+            <textarea name="savecontent" id ="contentedit" style="width: 98%; height: 450px;" rows="50" cols="120"><?php echo $content; ?></textarea>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2"></td>
+        </tr>
+        <tr>
+            <td class="setting_name" ><?php echo $oTrans->TEXT_COMMENTS; ?>:</td>
+            <td>
+                <textarea name="comments" style="width: 98%; height: 100px;" rows="50" cols="120"><?php echo ($aDroplet['comments']); ?></textarea>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">&nbsp;</td>
+        </tr>
+        </tbody>
+    </table>
+<br />
+<table>
+    <tr>
+        <td>
+<?php
+// Show only save button if allowed....
+if ($modified_by == 1 || $aDroplet['admin_edit'] == 0 ) {
+?>
+            <button  class="btn" name="command" value="save_droplet?droplet_id=<?php echo $iDropletIdKey; ?>" type="submit"><?php echo $sSubmitButton; ?></button>
+<?php
+}
+?>
+            <button class="btn" type="button" onclick="window.location = '<?php echo $ToolUrl; ?>';"><?php echo $TEXT['CANCEL']; ?></button>
+        </td>
+    </tr>
+</table>
+</form>
+<br />
+</div>

Property changes on: trunk/modules/droplets/commands/modify_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/overview.php
===================================================================
--- trunk/modules/droplets/commands/overview.php	(nonexistent)
+++ trunk/modules/droplets/commands/overview.php	(revision 2)
@@ -0,0 +1,129 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$msg = array();
+if (!$oApp->get_permission($sAddonName,'module' ) ) {
+    $oApp->print_error($oTrans->MESSAGE_ADMIN_INSUFFICIENT_PRIVELLIGES, $js_back);
+    exit();
+}
+// Get userid for showing admin only droplets or not
+$loggedin_user  = ($oApp->ami_group_member('1') ? 1 : $oApp->get_user_id() );
+$loggedin_group = $oApp->get_groups_id();
+$oApp_user      = (($oApp->get_home_folder() == '') && ($oApp->ami_group_member('1') ) || ($loggedin_user == '1'));
+//removes empty entries from the table so they will not be displayed
+$sql = 'DELETE FROM `'.TABLE_PREFIX.'mod_droplets` '
+     . 'WHERE name = \'\' ';
+if( !$oDb->query($sql) ) {
+    $msg[] = $oDb->get_error();
+}
+// if import failed after installation, should be only 1 time
+$sql = 'SELECT COUNT(`id`) FROM `'.TABLE_PREFIX.'mod_droplets` ';
+if( !$oDb->get_one($sql) ) {
+    include($sAddonPath.'/install.php');
+}
+
+function check_syntax($code) {
+    if (class_exists('ParseError')) {
+        $bRetval = true;
+        try{
+            $bRetval = (@eval('return true;' . $code));
+        } catch(ParseError $e) {
+            $bRetval = false;
+        }
+    } else {
+        $bRetval = false;
+        $bRetval = (@eval('return true;' . $code));
+    }
+    return $bRetval;
+}
+$sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` ';
+if (!$oApp_user) {
+    $sql .= 'WHERE `admin_view` <> 1 ';
+}
+$sql .= 'ORDER BY `modified_when` DESC';
+$oDroplets = $oDb->query($sql);
+$num_droplets = $oDroplets->numRows();
+$aFtan = $admin->getFTAN('');
+// prepare default data for phplib and twig
+    $aTplData = array (
+            'action' => $action,
+            'FTAN_NAME' => $aFtan['name'],
+            'FTAN_VALUE' => $aFtan['value'],
+            'IDKEY0' => $oApp->getIDKEY(0),
+            );
+// Create new template object with phplib  IDKEY0
+    $oTpl = new Template($sAddonThemePath, 'keep' );
+    $oTpl->set_file('page', 'overview.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+    $oTpl->set_var($aLang);
+    $oTpl->set_var($aTplDefaults);
+    $oTpl->set_var($aTplData);
+    $oTpl->set_block('main_block', 'list_droplet_block', 'list_droplet');
+/*----------------------------------------------------------------------------------------------------------------------*/
+    while($aDroplets = $oDroplets->fetchRow(MYSQLI_ASSOC))
+    {
+        $aComment =  array();
+        $modified_user = $TEXT['UNKNOWN'];
+        $modified_userid = 0;
+        $sql = 'SELECT `display_name`,`username`, `user_id` FROM `'.TABLE_PREFIX.'users` '
+        .'WHERE `user_id` = '.$aDroplets['modified_by'];
+        $get_modified_user = $oDb->query($sql);
+        if($get_modified_user->numRows() > 0) {
+            $fetch_modified_user = $get_modified_user->fetchRow(MYSQLI_ASSOC);
+            $modified_user = $fetch_modified_user['username'];
+            $modified_userid = $fetch_modified_user['user_id'];
+        }
+        $sDropletName  =  mb_strlen($aDroplets['name']) > 20 ? mb_substr($aDroplets['name'], 0, 19).'…' : $aDroplets['name'];
+#        $sDropletDescription  =  mb_strlen($aDroplets['description']) > 60 ? mb_substr($aDroplets['description'], 0, 59).'…' : $aDroplets['description'];
+        $sDropletDescription  =  $aDroplets['description'];
+//        $iDropletIdKey = $aDroplets['id'];
+        $iDropletIdKey = $oApp->getIDKEY($aDroplets['id']);
+        $comments = '';
+//        $comments = str_replace(array("\r\n", "\n", "\r"), '<br >', $aDroplets['comments']);
+        if (!strpos($comments,"[[")) $comments = "Use: [[".$aDroplets['name']."]]<br />".$comments;
+        $comments = str_replace(array("[[", "]]"), array('<b>[[',']]</b>'), $comments);
+        $valid_code = true;
+        $valid_code = check_syntax($aDroplets['code']);
+        if (!$valid_code === true) $comments = '<span color=\'red\'><strong>'.$oTrans->DR_TEXT_INVALIDCODE.'</strong></span><br />'.$comments;
+        $unique_droplet = true;
+        if ($unique_droplet === false ) {$comments = '<span color=\'red\'><strong>'.$oTrans->DR_TEXT_NOTUNIQUE.'</strong></span><br />'.$comments;}
+
+        $aTplData = array(
+            'iDropletIdKey'         => $iDropletIdKey,
+            'sDropletName'          => $sDropletName,
+            'sDropletTitle'         => $aDroplets['name'],
+            'comments'              => '',
+            'icon'                  => ($valid_code && $unique_droplet ? 'droplet' : 'invalid'),
+            'sDropletDescription'   => $sDropletDescription,
+            'DropletId'             => $aDroplets['id'],
+            'iDropletId'            => $aDroplets['id'],
+            'modified_when'         => date('d.m.Y'.' '.'H:i', $aDroplets['modified_when']+TIMEZONE),
+            'active'                => $aDroplets['id'],
+            'ActiveIcon'            => ($aDroplets['active']?'1':'0'),
+        );
+/*----------------------------------------------------------------------------------------------------------------------*/
+        $oTpl->set_var($aTplData);
+        $oTpl->parse('list_droplet', 'list_droplet_block', true);
+    }
+/*-- finalize the page -----------------------------------------------------------------*/
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');

Property changes on: trunk/modules/droplets/commands/overview.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/rename_droplet.php
===================================================================
--- trunk/modules/droplets/commands/rename_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/rename_droplet.php	(revision 2)
@@ -0,0 +1,107 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+// Get id
+if(!isset($iDropletAddId)) {
+    $droplet_id = (@$droplet_id?:'droplet_id');
+    $droplet_id = ($oApp->checkIDKEY($droplet_id, false, ''));
+}
+if ($droplet_id === false) {
+    $oApp->print_error('MODIFY_DROPLET_IDKEY::'.$oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl);
+    exit();
+}
+$sOverviewDroplets = $oTrans->DR_TEXT_DROPLETS;
+$sTimeStamp = (@$sTimeStamp?:'');
+$modified_by = $oApp->get_user_id();
+$sHeaderDroplet = $oTrans->DR_TEXT_ADD_DROPLET;
+$sDropletHelp = $oTrans->DROPLET_HELP_DROPLET_RENAME_ADD;
+if (($droplet_id > 0)) {
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_droplets` '
+          . 'WHERE `id` = '.$droplet_id;
+    $oDroplet = $oDb->query($sql);
+    $aDroplet = $oDroplet->fetchRow(MYSQLI_ASSOC);
+    $content  = (htmlspecialchars($aDroplet['code']));
+    $DropletName    = $aDroplet['name'];
+    $sSubmitButton  = $oTrans->TEXT_SAVE;
+    $iDropletIdKey  = $oApp->getIDKEY($droplet_id);
+    $iDropletAddId  = $droplet_id;
+    $sHeaderDroplet = $oTrans->DROPLET_HEADER_RENAME_DROPLET;
+    $sDropletHelp   = $oTrans->DROPLET_HELP_DROPLET_RENAME;
+} else if (isset($aCopyDroplet)){
+    $aDroplet = $aCopyDroplet;
+    $DropletName   = $aDroplet['name'];
+    $sSubmitButton = $oTrans->TEXT_ADD;
+    $iDropletIdKey = $droplet_id;
+} else {
+    $aDroplet = array();
+    // check if it is a normal add or a copy
+    if (sizeof($aDroplet)==0) {
+        $aDroplet = array(
+            'id' => 0,
+            'name' => 'Dropletname',
+            'code' => 'return true;',
+            'description' => '',
+            'modified_when' => 0,
+            'modified_by' => 0,
+            'active' => 0,
+            'admin_edit' => 0,
+            'admin_view' => 0,
+            'show_wysiwyg' => 0,
+            'comments' => ''
+            );
+        $DropletName   = $aDroplet['name'];
+        $content = '';
+    }
+    $sDropletHelp = $oTrans->DROPLET_HELP_DROPLET_RENAME_ADD;
+    $sSubmitButton = $oTrans->TEXT_ADD;
+    $iDropletIdKey = $oApp->getIDKEY($aDroplet['id']);
+}
+    $aFtan = $admin->getFTAN('');
+    // prepare default data for phplib and twig
+    $aTplData = array (
+        'action' => $action,
+        'FTAN_NAME' => $aFtan['name'],
+        'FTAN_VALUE' => $aFtan['value'],
+        'DropletName' => $aDroplet['name'],
+        'iDropletAddId' => $iDropletAddId,
+        'iDropletIdKey' => $iDropletIdKey,
+        'show_wysiwyg' => $aDroplet['show_wysiwyg'],
+        'sSubmitButton' => $sSubmitButton,
+        'HEADER_DROPLET' => $sHeaderDroplet,
+        'sDropletHelp' => $sDropletHelp,
+        );
+// Create new template object with phplib
+    $oTpl = new Template($sAddonThemePath, 'keep' );
+    $oTpl->set_file('page', 'rename_droplet.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+    $oTpl->set_var($aLang);
+    $oTpl->set_var($aTplDefaults);
+    $oTpl->set_var($aTplData);
+    $oTpl->set_block('main_block', 'show_admin_edit_block', 'show_admin_edit');
+    if ($admin->ami_group_member('1') || $aDroplet['admin_edit'] == 0 ) {
+        $oTpl->parse('show_admin_edit', 'show_admin_edit_block', true);
+    } else {
+        $oTpl->set_block('show_admin_edit', '');
+    }
+/*-- finalize the page -----------------------------------------------------------------*/
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');

Property changes on: trunk/modules/droplets/commands/rename_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/restore_droplets.php
===================================================================
--- trunk/modules/droplets/commands/restore_droplets.php	(nonexistent)
+++ trunk/modules/droplets/commands/restore_droplets.php	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         droplets
+ * @subpackage      restore_droplets
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.4
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ /* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+    $aUnzipDroplets = array();
+/**
+ *
+*/
+     if(!$oApp->checkFTAN() ) {
+        msgQueue::add($oTrans->MESSAGE_GENERIC_SECURITY_ACCESS);
+    } elseif(!isset($aRequestVars['restore_id']) || !is_array($aRequestVars['restore_id'])) {
+        msgQueue::add('::'.$oTrans->DROPLET_MESSAGE_MISSING_UNMARKED_ARCHIVE_FILES );
+    } else {
+        $aDroplet = array();
+        if( !class_exists('PclZip',false) ) { require( $oReg->AppPath.'/include/pclzip/pclzip.lib.php'); }
+        if(!function_exists('insertDropletFile')) { require($sAddonPath.'/droplets.functions.php'); }
+      // unzip to buffer and store in DB / fetch ach entry as single process, to surpress buffer overflow
+        foreach($aRequestVars['restore_id'] as $index => $iArchiveIndex ) {
+            $oArchive = new PclZip( $aRequestVars['ArchiveFile'] );
+            $sDroplet = $oArchive->extract(PCLZIP_OPT_BY_INDEX, $iArchiveIndex,
+                                           PCLZIP_OPT_EXTRACT_AS_STRING);
+            if ($sDroplet == 0) {
+                  msgQueue::add( 'UNABLE TO UNZIP FILE'.'::'.$oArchive->errorInfo(true) );
+            } else {
+//                $sSearchFor = 'php';
+//                $file_types  = preg_replace( '/\s*[,;\|#]\s*/','|',$sSearchFor );
+//        if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) {
+                $aDroplet['name'] = $sDroplet[0]['filename'];
+                $aDroplet['content'] = explode("\n",$sDroplet[0]['content']);
+//                if ( !preg_match('/'.$file_types.'/si', $aDroplet['name'], $aMatch) ) {
+//                  continue; }
+                if( $sTmp = insertDroplet($aDroplet, $oDb, $oApp, false)) {
+                    $aUnzipDroplets[] = $sTmp;
+                }
+            }
+        }
+//
+        if (($error = $oArchive->errorCode()) != 0 )
+        {
+            msgQueue::add( sizeof( $aUnzipDroplets ).' '. $oTrans->DROPLET_IMPORT_ARCHIV_IMPORTED);
+        } else {
+            if ( sizeof( $aUnzipDroplets ) > 0 ) {
+                msgQueue::add( implode(', ',$aUnzipDroplets).'<br />'.sizeof( $aUnzipDroplets ).' '. $oTrans->DROPLET_IMPORT_ARCHIV_IMPORTED, true);
+            } else {
+                msgQueue::add( sizeof( $aUnzipDroplets ).' '. $oTrans->DROPLET_IMPORT_ARCHIV_IMPORTED, true);
+            }
+        }
+    }

Property changes on: trunk/modules/droplets/commands/restore_droplets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/save_droplet.php
===================================================================
--- trunk/modules/droplets/commands/save_droplet.php	(nonexistent)
+++ trunk/modules/droplets/commands/save_droplet.php	(revision 2)
@@ -0,0 +1,85 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+        if ( !class_exists('admin', false) ) { require($oReg->AppPath.'/framework/class.admin.php'); }
+        // Include WB admin wrapper script
+        $oApp = new admin('admintools', 'admintools',false);
+        /* later
+        if (!$oApp->checkFTAN()) {
+        //    $oApp->print_header();
+            $oApp->print_error('FTAN_DROPLET::'. $MESSAGE['GENERIC_SECURITY_ACCESS'], $ToolUrl );
+        }
+        */
+        if (($droplet_id === false)) {
+         //   $oApp->print_header();
+            $oApp->print_error('IDKEY_DROPLET::'. $oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+        }
+        // Validate all fields
+        if( ($oApp->get_post('title') == '') && ($droplet_id==0) ) {
+            $oApp->print_error($MESSAGE['GENERIC_FILL_IN_ALL'].' ( Droplet Name )', $ToolUrl );
+        } else {
+            $title = $oApp->StripCodeFromText($oApp->get_post('title'));
+            $active = (int) $oApp->get_post('active');
+            $oApp_view = (int) $oApp->get_post('admin_view');
+            $oApp_edit = (int) $oApp->get_post('admin_edit');
+            $show_wysiwyg = (int) $oApp->get_post('show_wysiwyg');
+            $description = $oApp->get_post('description');
+            $aForbiddenTags = array('<?php', '?>' , '<?');
+            $content = str_replace($aForbiddenTags, '', $_POST['savecontent']);
+            $comments = trim(($oApp->get_post('comments')));
+            $modified_when = time();
+            $modified_by = (int) $oApp->get_user_id();
+        }
+        $sqlBody = ''
+                . '`active` = '.(int)$active.', '
+                . '`admin_view` = '.(int)$oApp_view.', '
+                . '`admin_edit` = '.(int)$oApp_edit.', '
+                . '`show_wysiwyg` = '.(int)$show_wysiwyg.', '
+                . '`description` = \''.$oDb->escapeString($description).'\', '
+                . '`code` = \''.$oDb->escapeString($content).'\', '
+                . '`comments` = \''.$oDb->escapeString($comments).'\', '
+                . '`modified_when` = '.(int)$modified_when.', '
+                . '`modified_by` = '.(int)$modified_by.' ';
+
+        if ($droplet_id == 0){
+            $title = getUniqueName($oDb, $title);
+            $sql  = 'INSERT INTO `'.TABLE_PREFIX.'mod_droplets` SET '
+                  . '`name` = \''.$oDb->escapeString($title).'\', ';
+            $sqlWhere  = '';
+            if (!$oDb->query($sql.$sqlBody)) {
+
+            }
+        } else {
+            $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` SET ';
+            $sqlWhere  = 'WHERE `id` = '.(int)$droplet_id;
+            $oDb->query($sql.$sqlBody.$sqlWhere);}
+
+        // Check if there is a db error, otherwise say successful
+        if($oDb->is_error()) {
+            msgQueue::add($oDb->get_error());
+        } else {
+            msgQueue::add( $oTrans->TEXT_SUCCESS, true );
+        }
+}
+

Property changes on: trunk/modules/droplets/commands/save_droplet.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/save_rename.php
===================================================================
--- trunk/modules/droplets/commands/save_rename.php	(nonexistent)
+++ trunk/modules/droplets/commands/save_rename.php	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    if (($droplet_id === false)) {
+     //   $oApp->print_header();
+        $oApp->print_error('IDKEY_DROPLET::'. $oTrans->MESSAGE_GENERIC_SECURITY_ACCESS, $ToolUrl );
+    }
+    $modified_when = time();
+    $modified_by   = (int) $oApp->get_user_id();
+    $sNewName      = trim($aRequestVars['title']);
+    if (!$sNewName) {
+        msgQueue::add($oTrans->DROPLET_MESSAGE_GENERIC_MISSING_TITLE);
+    } else {
+        $sOldName      = trim(@$aRequestVars['existingTitle']?:$sNewName);
+        $sGenericNewName = getUniqueName($oDb, $sNewName);
+        switch ($subCommand):
+            case 'add_droplet':
+                $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_droplets` SET '
+                  .    '`name`=\''.$oDb->escapeString($sGenericNewName).'\','
+                  .    '`code`=\'\', '
+                  .    '`description`=\'\', '
+                 .     '`modified_when`='.$modified_when.','
+                 .     '`modified_by`='.$modified_by.','
+                  .    '`active`=0,'
+                  .    '`admin_edit`=0,'
+                  .    '`admin_view`=0,'
+                  .    '`show_wysiwyg`=0,'
+                  .    '`comments`=\'\'';
+                break;
+            case 'copy_droplet':
+                $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_droplets` '
+                  .        'SELECT '
+                  .        'NULL,'
+                  .        '\''.$oDb->escapeString($sGenericNewName).'\','
+                  .        '`code`,`description`,'.$modified_when.','.$modified_by.','
+                  .        '`active`,`admin_edit`,`admin_view`,`show_wysiwyg`,`comments`'
+                 . 'FROM `'.TABLE_PREFIX.'mod_droplets` '
+                     .     'WHERE `name`=\''.$oDb->escapeString($sOldName).'\'';
+                break;
+            case 'rename_droplet':
+                if ($sNewName == $sOldName) {$sGenericNewName = $sOldName;}
+                $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` '
+                     . 'SET `name`=\''.$sGenericNewName.'\', '
+                  .        '`modified_when`='.$modified_when.','
+                  .        '`modified_by`='.$modified_by.' '
+                     . 'WHERE `name`=\''.$sOldName.'\'';
+                break;
+            default: /* do nothing */  break;
+        endswitch;
+        if (!$oDb->query($sql))
+        {
+            if($oDb->is_error()) {
+                msgQueue::add($oDb->get_error());
+            }
+        } else {
+            msgQueue::add($oTrans->TEXT_SUCCESS, true );
+        }
+    }
+}

Property changes on: trunk/modules/droplets/commands/save_rename.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/commands/select_archiv.php
===================================================================
--- trunk/modules/droplets/commands/select_archiv.php	(nonexistent)
+++ trunk/modules/droplets/commands/select_archiv.php	(revision 2)
@@ -0,0 +1,50 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+    $sBackupDir = $sAddonRel.'/data/archiv/';
+    $aZipFiles = glob($oReg->AppPath.$sAddonRel.'/data/archiv/*.zip', GLOB_NOSORT);
+    $aFtan = $admin->getFTAN('');
+    // prepare default data for phplib and twig
+    $aTplData = array (
+        'FTAN_NAME' => $aFtan['name'],
+        'FTAN_VALUE' => $aFtan['value'],
+        );
+// Create new template object with phplib
+    $oTpl = new Template($sAddonThemePath, 'keep' );
+    $oTpl->set_file('page', 'select_archiv.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+    $oTpl->set_var($aLang);
+    $oTpl->set_var($aTplDefaults);
+    $oTpl->set_var($aTplData);
+    $oTpl->set_block('main_block', 'list_archiv_block', 'list_archiv');
+    foreach( $aZipFiles as $files ) {
+        $value =  basename($files);
+        $files = str_replace($oReg->AppPath, '', $files );
+        $oTpl->set_var('files', $files);
+        $oTpl->set_var('value', $value);
+        $oTpl->parse('list_archiv', 'list_archiv_block', true);
+    }
+
+/*-- finalize the page -----------------------------------------------------------------*/
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');
+

Property changes on: trunk/modules/droplets/commands/select_archiv.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/data/archiv/PLACEHOLDER
===================================================================
--- trunk/modules/droplets/data/archiv/PLACEHOLDER	(nonexistent)
+++ trunk/modules/droplets/data/archiv/PLACEHOLDER	(revision 2)
@@ -0,0 +1 @@
+/* this file can be removed after installation */
\ No newline at end of file
Index: trunk/modules/droplets/droplets.functions.php
===================================================================
--- trunk/modules/droplets/droplets.functions.php	(nonexistent)
+++ trunk/modules/droplets/droplets.functions.php	(revision 2)
@@ -0,0 +1,278 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+function prepareDropletToFile($aDroplet) {
+    $retVal = '';
+    $aComment =  array();
+    $sDescription = '//:'.(($aDroplet['description']!='') ? $aDroplet['description']: 'Add a desription');
+    $sComments = '';
+    $aComment = explode("\n", $aDroplet['comments']);
+    if( (sizeof($aComment)) ){
+        foreach($aComment as $isComments) {
+          if( trim($isComments) !='') {
+              $sComments .= '//:'.$isComments."\n";
+          }
+        }
+    }
+    if( !$sComments ){
+        $sComments .= '//:use [['.$aDroplet['name'].']]'."\n";
+    }
+    $sCode = '';
+    $aCode = explode("\n",$aDroplet['code']);
+    if( (sizeof($aCode)) ){
+        foreach($aCode AS $isCode) {
+          if( $isCode!='') {
+                $sCode .= $isCode."\n";
+          }
+        }
+    }
+    $retVal = $sDescription."\n".$sComments.rtrim($sCode,"\n");
+    return $retVal;
+}
+
+function backupDropletFromDatabase( $sTmpDir, $FilesInDB='*', $oDb) {
+    if (!class_exists('PclZip',false) ) { require( WB_PATH.'/include/pclzip/Constants.php'); }
+    $retVal = array();
+    $sDescription = '';
+    $FilesInDB = rtrim($FilesInDB, ',');
+    $sqlWhere = ( ($FilesInDB=='*') ? '': 'WHERE `name` IN ('.$FilesInDB.') ');
+    $sql = 'SELECT `name`,`description`,`comments`,`code`  FROM `'.TABLE_PREFIX.'mod_droplets` '
+         . $sqlWhere
+         . 'ORDER BY `modified_when` DESC';
+    if( $oRes = $oDb->query($sql) ) {
+        while($aDroplet = $oRes->fetchRow(MYSQLI_ASSOC)) {
+            $sData = prepareDropletToFile($aDroplet);
+            $sFileName = $sTmpDir.$aDroplet['name'].'.php';
+            if(file_put_contents($sFileName,$sData)) {
+                $sDescription = ($aDroplet['description']);
+                $retVal[] = array(
+                                PCLZIP_ATT_FILE_NAME => $sFileName,
+                                PCLZIP_ATT_FILE_COMMENT => $sDescription
+                               );
+            }
+        }
+    }
+    return $retVal;
+}
+
+    function getUniqueName($oDb, $sName)
+    {
+        $sBaseName = preg_replace('/^(.*?)(\_[0-9]+)?$/', '$1', $sName);
+        $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'mod_droplets` '
+             . 'WHERE `name` RLIKE \'^'.$sBaseName.'(\_[0-9]+)?$\' '
+             . 'ORDER BY `name` DESC';
+        if (($sMaxName = $oDb->get_one($sql))) {
+            $iCount = intval(preg_replace('/^'.$sBaseName.'\_([0-9]+)$/', '$1', $sMaxName));
+            $sName = $sBaseName.sprintf('_%03d', ++$iCount);
+        }
+        return $sName;
+    }
+/**
+ * importDropletToDB()
+ *
+ * @param mixed $aDroplet
+ * @param mixed $msg
+ * @param mixed $bOverwriteDroplets
+ * @return
+ */
+function insertDroplet( array $aDroplet, $oDb, $oApp, $bUpdateDroplets = false )
+{
+        $sImportDroplets = '';
+        $extraSql = '';
+        $sPattern = "#//:#im";
+        $sDropletFile = $aDroplet['name'];
+        $sDropletFile = preg_replace('/^\xEF\xBB\xBF/', '', $sDropletFile);
+        $sDropletName = pathinfo ($sDropletFile, PATHINFO_FILENAME);
+        // get right $aFileData a) from Zip or b) from File
+        if( isset($aDroplet['content']) ) {
+            $aFileData = $aDroplet['content'];
+            $sFileData = $aFileData[0];
+            $bRetval  = (bool)preg_match_all($sPattern, $sFileData, $matches, PREG_SET_ORDER);
+            if ( $bRetval == false ) { return $bRetval; }
+        }
+        if( isset($aDroplet['output']) ) { $aFileData = file($sDropletFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); }
+        // prepare table mod_droplets fields
+        if( sizeof($aFileData) > 0 ) {
+                // get description, comments and oode
+                $bDescription = false;
+                $bComments = false;
+                $bCode = false;
+                $sDescription = '';
+                $sComments = '';
+                $sCode = '';
+                while ( sizeof($aFileData) > 0 ) {
+                    $sSqlLine = (array_shift($aFileData));
+                    $isNotCode = (bool)preg_match($sPattern, $sSqlLine);
+                    if( $isNotCode==true ) {
+// first step line is description
+                        if($bDescription==false) {
+                            $sDescription .= str_replace('//:','',$sSqlLine);
+                            $bDescription = true;
+                        } else {
+// second step fill comments
+                            $sComments .= trim(str_replace('//:','',$sSqlLine)."\n");
+                        }
+                    } else {
+// third step fill code
+                        $sCode .= str_replace('//:','',$sSqlLine)."\n";
+                    }
+                }
+        }
+            // TODO future set parameter to class RawDropletInterface
+            $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'mod_droplets` '
+                 . 'WHERE `name` LIKE \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
+            if( !( $sTmpName = $oDb->get_one($sql)) )
+            {
+                $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_droplets`';
+                $sImportDroplets = $sDropletName ;
+            } elseif ($bUpdateDroplets) {
+                $sDropletName = $sTmpName;
+                $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` ';
+                $extraSql = 'WHERE `name` = \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
+                $sImportDroplets = $sDropletName;
+            }
+            if( !isset($sTmpName) || $bUpdateDroplets) {
+              $iModifiedWhen = time();
+              $iModifiedBy = (method_exists($oApp, 'get_user_id') && ($oApp->get_user_id()!=null) ? $oApp->get_user_id() : 1);
+              $sql .= 'SET  `name` =\''.$oDb->escapeString($sDropletName).'\','
+                   .       '`description` =\''.$oDb->escapeString($sDescription).'\','
+                   .       '`comments` =\''.$oDb->escapeString($sComments).'\','
+                   .       '`code` =\''.$oDb->escapeString($sCode).'\','
+                   .       '`modified_when` = '.$iModifiedWhen.','
+                   .       '`modified_by` = '.$iModifiedBy.','
+                   .       '`active` = 1'
+                   .       $extraSql;
+          }
+          if( $oDb->query($sql) ) {
+          } else {
+          }
+
+    return ($sImportDroplets != '') ? $sImportDroplets : false;
+}
+
+function insertDropletFile($aDropletFiles, $oDb, $oApp, &$msg,$bOverwriteDroplets)
+{
+//    $oApp = new admin ('##skip##');
+    $OK  = ' <span style="color:#006400; font-weight:bold;">OK</span> ';
+    $FAIL = ' <span style="color:#ff0000; font-weight:bold;">FAILED</span> ';
+    foreach ($aDropletFiles as $sDropletFile) {
+        $msgSql = '';
+        $extraSql = '';
+        $sDropletName = pathinfo ($sDropletFile, PATHINFO_FILENAME);
+        $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'mod_droplets` '
+             . 'WHERE `name` LIKE \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
+        if( !( $sTmpName = $oDb->get_one($sql)) )
+        {
+            $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_droplets`';
+            $msgSql = 'INSERT Droplet `'.$oDb->escapeString($sDropletName).'` INTO`'.TABLE_PREFIX.'mod_droplets`'." $OK";
+        } elseif ($bOverwriteDroplets)
+        {
+            $sDropletName = $sTmpName;
+            $sql = 'UPDATE `'.TABLE_PREFIX.'mod_droplets` ';
+            $extraSql = 'WHERE `name` = \''.addcslashes($oDb->escapeString($sDropletName), '%_').'\' ';
+            $msgSql   = 'UPDATE Droplet `'.$sDropletName.'` INTO`'.TABLE_PREFIX.'mod_droplets`'." $OK";
+        }
+// get description, comments and oode
+        $sDropletFile = preg_replace('/^\xEF\xBB\xBF/', '', $sDropletFile);
+        if( ($msgSql!='') && ($aFileData = file($sDropletFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES))){
+                $bDescription = false;
+                $bComments = false;
+                $bCode = false;
+                $sDescription = '';
+                $sComments = '';
+                $sCode = '';
+                $sPattern = "#//:#im";
+                while ( sizeof($aFileData) > 0 ) {
+                    $sSqlLine = (array_shift($aFileData));
+                    $isNotCode = (bool)preg_match($sPattern, $sSqlLine);
+                    if ($isNotCode==true ) {
+// first step line is description
+                        if($bDescription==false) {
+                            $sDescription .= str_replace('//:','',$sSqlLine);
+                            $bDescription = true;
+                        } else {
+// second step fill comments
+                            $sComments .= str_replace('//:','',$sSqlLine)."\n";
+                        }
+                    } else {
+// third step fill code
+                        $sCode .= str_replace('//:','',$sSqlLine)."\n";
+                    }
+                }
+            $iModifiedWhen = time();
+            $iModifiedBy = (method_exists($oApp, 'get_user_id') && ($oApp->get_user_id()!=null) ? $oApp->get_user_id() : 1);
+            $sql .= 'SET  `name` =\''.$oDb->escapeString($sDropletName).'\','
+                 .       '`description` =\''.$oDb->escapeString($sDescription).'\','
+                 .       '`comments` =\''.$oDb->escapeString($sComments).'\','
+                 .       '`code` =\''.$oDb->escapeString($sCode).'\','
+                 .       '`modified_when` = '.$iModifiedWhen.','
+                 .       '`modified_by` = '.$iModifiedBy.','
+                 .       '`active` = 1'
+                 .       $extraSql;
+        }
+        if( $oDb->query($sql) ) {
+            if( $msgSql!='' ) { $msg[] = $msgSql; }
+        } else {
+            $msg[] = $oDb->get_error();
+        }
+    }
+    return;
+}
+/* -------------------------------------------------------- */
+
+function isDropletFile($sFileName)
+{
+    $bRetval = false;
+    $matches = array();
+    if(($sFileData = file_get_contents($sFileName)) !== false)
+    {
+//        $sPattern = "#(?://:)+[\w]*\w?#is";
+//        $sPattern = "#//:[\w].+#imS";
+        $sPattern = "#//:#im";
+        $bRetval  = (bool)preg_match_all($sPattern, $sFileData, $matches, PREG_SET_ORDER);
+    }
+    return $bRetval;
+}
+
+/* -------------------------------------------------------- */
+    function getDropletFromFiles($sBaseDir)
+    {
+        $aRetval = array();
+        $oIterator = new DirectoryIterator($sBaseDir);
+        foreach ($oIterator as $fileInfo) {
+        // iterate the directory
+            if($fileInfo->isDot()) continue;
+            $sFileName = rtrim(str_replace('\\', '/', $fileInfo->getPathname()), '/');
+            if($fileInfo->isFile()) {
+            // only droplets are interesting
+                if((file_exists($sFileName) && isDropletFile($sFileName))) {
+                // if dir has no corresponding accessfile remember it
+                    $aRetval[] = $sFileName;
+                }
+            }
+        }
+        return $aRetval;
+    }

Property changes on: trunk/modules/droplets/droplets.functions.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/droplets.php
===================================================================
--- trunk/modules/droplets/droplets.php	(nonexistent)
+++ trunk/modules/droplets/droplets.php	(revision 2)
@@ -0,0 +1,120 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplets
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ *    droplets are small codeblocks that are called from anywhere in the template.
+ *     To call a droplet just use [[dropletname]]. optional parameters for a droplet can be used like [[dropletname?parameter=value&parameter2=value]]\
+ *
+ *  1.0.2, bugfix, Reused the evalDroplet function so the extracted parameters will be only available within the scope of the eval and cleared when ready.
+ *  1.0.3, optimize, reduce memory consumption, increase speed, remove CSS, enable nested droplets
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+    function do_eval($_x_codedata, $_x_varlist, &$wb_page_data)
+    {
+        extract($_x_varlist, EXTR_SKIP);
+        return(eval($_x_codedata));
+    }
+
+    function processDroplets( &$wb_page_data ) {
+// collect all droplets from document
+        $droplet_tags = array();
+        $droplet_replacements = array();
+        $droplet_search = '\[\[(.*?)\]\]'; // \[\[(\S*?)\]\]
+        if( preg_match_all( '/'.$droplet_search.'/', $wb_page_data, $found_droplets ) )
+        {
+            foreach( $found_droplets[1] as $droplet )
+            {
+                if(array_key_exists( '[['.$droplet.']]', $droplet_tags) == false)
+                {
+// go in if same droplet with same arguments is not processed already
+                    $varlist = array();
+// split each droplet command into droplet_name and request_string
+                    $tmp = preg_split('/\?/', $droplet, 2);
+                    $droplet_name = $tmp[0];
+                    $request_string = (isset($tmp[1]) ? $tmp[1] : '');
+                    if( $request_string != '' )
+                    {
+// make sure we can parse the arguments correctly
+                        $request_string = html_entity_decode($request_string, ENT_COMPAT,DEFAULT_CHARSET);
+// create array of arguments from query_string
+                        $argv = preg_split( '/&(?!amp;)/', $request_string );
+                        foreach ($argv as $argument)
+                        {
+// split argument in pair of varname, value
+                            list( $variable, $value ) = explode('=', $argument,2);
+                            if( !empty($value) )
+                            {
+// re-encode the value and push the var into varlist
+                                $varlist[$variable] = htmlentities($value, ENT_COMPAT,DEFAULT_CHARSET);
+                            }
+                        }
+                    }
+                    else
+                    {
+// no arguments given, so
+                        $droplet_name = $droplet;
+                    }
+// request the droplet code from database
+                    $sql  = 'SELECT `code` FROM `'.TABLE_PREFIX.'mod_droplets` '
+                          . 'WHERE `name` LIKE \''.$droplet_name.'\''
+                          .   'AND `active` = 1';
+                    $codedata = $GLOBALS['database']->get_one($sql);
+                    if (!is_null($codedata))
+                    {
+                        $newvalue = do_eval($codedata, $varlist, $wb_page_data);
+// check returnvalue (must be a string of 1 char at least or (bool)true
+                        if ($newvalue == '' && $newvalue !== true)
+                        {
+                            if(DEBUG === true)
+                            {
+                                $newvalue = '<span class="mod_droplets_err">Error in: '.$droplet.', no valid returnvalue.</span>';
+                            } else {
+                                $newvalue = true;
+                            }
+                        }
+                        if ($newvalue === true) { $newvalue = ""; }
+// remove any defined CSS section from code. For valid XHTML a CSS-section is allowed inside <head>...</head> only!
+                        $newvalue = preg_replace('/<style.*>.*<\/style>/siU', '', $newvalue);
+// push droplet-tag and it's replacement into Search/Replace array after executing only
+                        $droplet_tags[]         = '[['.$droplet.']]';
+                        $droplet_replacements[] = $newvalue;
+                    }
+                }
+            }    // End foreach( $found_droplets[1] as $droplet )
+// replace each Droplet-Tag with coresponding $newvalue
+            $wb_page_data = str_replace($droplet_tags, $droplet_replacements, $wb_page_data);
+        }
+// returns TRUE if droplets found in content, FALSE if not
+        return( count($droplet_tags)!=0 );
+    }
+
+    function evalDroplets( &$wb_page_data, $max_loops = 3 ) {
+        $max_loops = ((int)$max_loops = 0 ? 3 : (int)$max_loops);
+        while( (processDroplets($wb_page_data) == true) && ($max_loops > 0))
+        {
+            $max_loops--;
+        }
+        return $wb_page_data;
+    }

Property changes on: trunk/modules/droplets/droplets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/EmailFilter.php
===================================================================
--- trunk/modules/droplets/example/EmailFilter.php	(nonexistent)
+++ trunk/modules/droplets/example/EmailFilter.php	(revision 2)
@@ -0,0 +1,3 @@
+//:Emailfiltering on your output - dummy Droplet
+//:usage:  [[EmailFilter]]
+return true;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/EmailFilter.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/LoginBox.php
===================================================================
--- trunk/modules/droplets/example/LoginBox.php	(nonexistent)
+++ trunk/modules/droplets/example/LoginBox.php	(revision 2)
@@ -0,0 +1,116 @@
+//:Puts a Login / Logout box on your page.
+//:Use: [[LoginBox?redirect=url]]
+//:Absolute or relative url possible
+//:Remember to enable frontend login in your website settings!!
+global $database,$wb, $TEXT, $MENU, $HEADING;
+$return_value = '<div class="login-box">'."\n";
+$return_admin = ' ';
+// Return a system permission
+$get_permission = function ($name, $type = 'system') use ( $wb )
+{
+// Append to permission type
+$type .= '_permissions';
+// Check if we have a section to check for
+if($name == 'start') {
+return true;
+} else {
+// Set system permissions var
+$system_permissions = $wb->get_session('SYSTEM_PERMISSIONS');
+// Set module permissions var
+$module_permissions = $wb->get_session('MODULE_PERMISSIONS');
+// Set template permissions var
+$template_permissions = $wb->get_session('TEMPLATE_PERMISSIONS');
+// Return true if system perm = 1
+if (isset($$type) && is_array($$type) && is_numeric(array_search($name, $$type))) {
+if($type == 'system_permissions') {
+return true;
+} else {
+return false;
+}
+} else {
+if($type == 'system_permissions') {
+return false;
+} else {
+return true;
+}
+}
+}
+};
+$get_page_permission = function ($page, $action='admin') use ( $database, $wb )
+{
+if ($action!='viewing'){ $action='admin';}
+$action_groups = $action.'_groups';
+$action_users  = $action.'_users';
+if (is_array($page)) {
+$groups = $page[$action_groups];
+$users  = $page[$action_users];
+} else {
+$sql  = 'SELECT '.$action_groups.','.$action_users.' FROM '.TABLE_PREFIX.'pages '
+. 'WHERE page_id = \''.$page.'\'';
+if($oResults = $database->query( $sql )){
+$aResult  = $oResults->fetchRow( MYSQLI_ASSOC );
+$groups  = explode(',', str_replace('_', '', $aResult[$action_groups]));
+$users   = explode(',', str_replace('_', '', $aResult[$action_users]));
+}
+}
+$in_group = false;
+foreach($wb->get_groups_id() as $cur_gid){
+if (in_array( $cur_gid, $groups )) {
+$in_group = true;
+}
+}
+if( !$in_group && !is_numeric(array_search( $wb->get_user_id(), $users )) ) {
+return false;
+}
+return true;
+};
+// Get redirect
+$redirect_url = ((isset($_SESSION['HTTP_REFERER']) && $_SESSION['HTTP_REFERER'] != '') ? $_SESSION['HTTP_REFERER'] : WB_URL );
+$redirect_url = ( isset($redirect) && ($redirect!='') ? $redirect : $redirect_url);
+if ( ( FRONTEND_LOGIN == 'enabled') && ( VISIBILITY != 'private') && ( $wb->get_session('USER_ID') == '')  )
+{
+$return_value .= '<form action="'.LOGIN_URL.'" method="post">'."\n";
+$return_value .= '<input type="hidden" name="redirect" value="'.$redirect_url.'" />'."\n";
+$return_value .= '<fieldset>'."\n";
+$return_value .= '<h1>'.$TEXT['LOGIN'].'</h1>'."\n";
+$return_value .= '<label for="username">'.$TEXT['USERNAME'].':</label>'."\n";
+$return_value .= '<p><input type="text" name="username" id="username"  /></p>'."\n";
+$return_value .= '<label for="password">'.$TEXT['PASSWORD'].':</label>'."\n";
+$return_value .= '<p><input type="password" name="password" id="password"/></p>'."\n";
+$return_value .= '<p><input type="submit" id="submit" value="'.$TEXT['LOGIN'].'" class="dbutton" /></p>'."\n";
+$return_value .= '<ul class="login-advance">'."\n";
+$return_value .= '<li class="forgot"><a href="'.FORGOT_URL.'"><span>'.$TEXT['FORGOT_DETAILS'].'</span></a></li>'."\n";
+if (intval(FRONTEND_SIGNUP) > 0)
+{
+$return_value .= '<li class="sign"><a href="'.SIGNUP_URL.'">'.$TEXT['SIGNUP'].'</a></li>'."\n";
+}
+$return_value .= '</ul>'."\n";
+$return_value .= '</fieldset>'."\n";
+$return_value .= '</form>'."\n";
+} elseif( (FRONTEND_LOGIN == 'enabled') && (is_numeric($wb->get_session('USER_ID'))) )
+{
+$return_value .= '<form action="'.LOGOUT_URL.'" method="post" class="login-table">'."\n";
+$return_value .= '<input type="hidden" name="redirect" value="'.$redirect_url.'" />'."\n";
+$return_value .= '<fieldset>'."\n";
+$return_value .= '<h1>'.$TEXT["LOGGED_IN"].'</h1>'."\n";
+$return_value .= '<label>'.$TEXT['WELCOME_BACK'].', '.$wb->get_display_name().'</label>'."\n";
+$return_value .= '<p><input type="submit" name="submit" value="'.$MENU['LOGOUT'].'" class="dbutton" /></p>'."\n";
+$return_value .= '<ul class="logout-advance">'."\n";
+$return_value .= '<li class="preference"><a href="'.PREFERENCES_URL.'" title="'.$MENU['PREFERENCES'].'">'.$MENU['PREFERENCES'].'</a></li>'."\n";
+if ($wb->ami_group_member('1'))  //change ot the group that should get special links
+{
+$return_admin .= '<li class="admin"><a target="_blank" href="'.ADMIN_URL.'/index.php" title="'.$TEXT['ADMINISTRATION'].'" class="blank_target">'.$TEXT["ADMINISTRATION"].'</a></li>'."\n";
+//you can add more links for your users like userpage, lastchangedpages or something
+$return_value .= $return_admin;
+}
+//change ot the group that should get special links
+if( $get_permission('pages_modify') && $get_page_permission( PAGE_ID ) )
+{
+$return_value .= '<li class="modify"><a target="_blank" href="'.ADMIN_URL.'/pages/modify.php?page_id='.PAGE_ID.'" title="'.$HEADING['MODIFY_PAGE'].'" class="blank_target">'.$HEADING['MODIFY_PAGE'].'</a></li>'."\n";
+}
+$return_value .= '</ul>'."\n";
+$return_value .= '</fieldset>'."\n";
+$return_value .= '</form>'."\n";
+}
+$return_value .= '</div>'."\n";
+return $return_value;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/LoginBox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/Lorem.php
===================================================================
--- trunk/modules/droplets/example/Lorem.php	(nonexistent)
+++ trunk/modules/droplets/example/Lorem.php	(revision 2)
@@ -0,0 +1,18 @@
+//:Create Lorum Ipsum text
+//:Use: [[Lorem?blocks=6]] (max 6 paragraphs)
+$lorem = array();
+$lorem[] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut odio. Nam sed est. Nam a risus et est iaculis adipiscing. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut justo. In tincidunt viverra nisl. Donec dictum malesuada magna. Curabitur id nibh auctor tellus adipiscing pharetra. Fusce vel justo non orci semper feugiat. Cras eu leo at purus ultrices tristique.<br /><br />";
+$lorem[] = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.<br /><br />";
+$lorem[] = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.<br /><br />";
+$lorem[] = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.<br /><br />";
+$lorem[] = "Cras consequat magna ac tellus. Duis sed metus sit amet nunc faucibus blandit. Fusce tempus cursus urna. Sed bibendum, dolor et volutpat nonummy, wisi justo convallis neque, eu feugiat leo ligula nec quam. Nulla in mi. Integer ac mauris vel ligula laoreet tristique. Nunc eget tortor in diam rhoncus vehicula. Nulla quis mi. Fusce porta fringilla mauris. Vestibulum sed dolor. Aliquam tincidunt interdum arcu. Vestibulum eget lacus. Curabitur pellentesque egestas lectus. Duis dolor. Aliquam erat volutpat. Aliquam erat volutpat. Duis egestas rhoncus dui. Sed iaculis, metus et mollis tincidunt, mauris dolor ornare odio, in cursus justo felis sit amet arcu. Aenean sollicitudin. Duis lectus leo, eleifend mollis, consequat ut, venenatis at, ante.<br /><br />";
+$lorem[] = "Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.<br /><br />";
+if (!isset($blocks)) $blocks=1;
+$blocks = (int)$blocks - 1;
+if ($blocks <= 0) $blocks = 0;
+if ($blocks > 5) $blocks = 5;
+$returnvalue = "";
+for ( $i=0 ; $i<=$blocks ; $i++) {
+$returnvalue .= $lorem[$i];
+}
+return $returnvalue;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/Lorem.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/ModifiedWhen.php
===================================================================
--- trunk/modules/droplets/example/ModifiedWhen.php	(nonexistent)
+++ trunk/modules/droplets/example/ModifiedWhen.php	(revision 2)
@@ -0,0 +1,8 @@
+//:Displays the last modification time of the current page
+//:Use [[ModifiedWhen]]
+global $database, $wb;
+if (PAGE_ID>0) {
+$query=$database->query("SELECT modified_when FROM ".TABLE_PREFIX."pages where page_id=".PAGE_ID);
+$mod_details=$query->fetchRow();
+return "This page was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0]).".";
+}
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/ModifiedWhen.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/NextPage.php
===================================================================
--- trunk/modules/droplets/example/NextPage.php	(nonexistent)
+++ trunk/modules/droplets/example/NextPage.php	(revision 2)
@@ -0,0 +1,10 @@
+//:Create a next link to your page
+//:Display a link to the next page on the same menu level
+$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', '');
+list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info);
+// show next
+$nxt = $nSib < $nSibCount ? $nSib + 1 : 0;
+if ($nxt > 0) {
+return show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER,    "[if(sib==$nxt){&gt;&gt; [a][menu_title]</a>}]", '', '', '');
+}
+else return '(no next)';
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/NextPage.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/Oneliner.php
===================================================================
--- trunk/modules/droplets/example/Oneliner.php	(nonexistent)
+++ trunk/modules/droplets/example/Oneliner.php	(revision 2)
@@ -0,0 +1,6 @@
+//:Create a random oneliner on your page
+//:Use: [[OneLiner]].
+//:The file with the oneliner data is located in /modules/droplets/example/oneliners.txt;
+$line = file (dirname(__FILE__)."/example/oneliners.txt");
+shuffle($line);
+return $line[0];
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/Oneliner.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/ParentPage.php
===================================================================
--- trunk/modules/droplets/example/ParentPage.php	(nonexistent)
+++ trunk/modules/droplets/example/ParentPage.php	(revision 2)
@@ -0,0 +1,11 @@
+//:Create a parent link to your page
+//:Display a link to the parent page of the current page
+$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', '');
+list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info);
+// show up level
+if ($nLevel > 0) {
+$lev = $nLevel - 1;
+return show_menu2(0, SM2_ROOT, SM2_CURR, SM2_CRUMB|SM2_BUFFER, "[if(level==$lev){[a][menu_title]</a>}]", '', '', '');
+}
+else
+return '(no parent)';
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/ParentPage.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/PreviousPage.php
===================================================================
--- trunk/modules/droplets/example/PreviousPage.php	(nonexistent)
+++ trunk/modules/droplets/example/PreviousPage.php	(revision 2)
@@ -0,0 +1,11 @@
+//:Create a previous link to your page
+//:Display a link to the previous page on the same menu level
+$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, '[if(class==menu-current){[level] [sib] [sibCount] [parent]}]', '', '', '');
+list($nLevel, $nSib, $nSibCount, $nParent) = explode(' ', $info);
+// show previous
+$prv = $nSib > 1 ? $nSib - 1 : 0;
+if ($prv > 0) {
+return show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, "[if(sib==$prv){[a][menu_title]</a> <<}]", '', '', '');
+}
+else
+return '(no previous)';
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/PreviousPage.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/RandomImage.php
===================================================================
--- trunk/modules/droplets/example/RandomImage.php	(nonexistent)
+++ trunk/modules/droplets/example/RandomImage.php	(revision 2)
@@ -0,0 +1,16 @@
+//:Get a random image from a folder in the MEDIA folder.
+//:Commandline to use: [[RandomImage?dir=subfolder_in_mediafolder]]
+$dir = ( (isset($dir) && ($dir!='') ) ? $dir : '');
+$folder=opendir(WB_PATH.MEDIA_DIRECTORY.'/'.$dir.'/.');
+$names = array();
+while ($file = readdir($folder))  {
+$ext=strtolower(substr($file,-4));
+if ($ext==".jpg"||$ext==".gif"||$ext==".png"){
+$names[count($names)] = $file;
+}
+}
+closedir($folder);
+shuffle($names);
+$image=$names[0];
+$name=substr($image,0,-4);
+return '<img src="'.WB_URL.MEDIA_DIRECTORY.'/'.$dir.'/'.$image.'" alt="'.$name.'" width="95%" />';
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/RandomImage.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/SearchBox.php
===================================================================
--- trunk/modules/droplets/example/SearchBox.php	(nonexistent)
+++ trunk/modules/droplets/example/SearchBox.php	(revision 2)
@@ -0,0 +1,16 @@
+//:Create a searchbox on the position
+//:usage: [[searchbox]].
+//:Optional parameter "?msg=the search message"
+global $TEXT;
+$return_value = true;
+if (!isset($msg)) $msg='search this site..';
+$j = "onfocus=\"if(this.value=='$msg'){this.value='';this.style.color='#000';}else{this.select();}\"
+onblur=\"if(this.value==''){this.value='$msg';this.style.color='#b3b3b3';}\"";
+if(SHOW_SEARCH) {
+$return_value  = '<div class="searchbox">';
+$return_value  .= '<form action="'.WB_URL.'/search/index'.PAGE_EXTENSION.'" method="get" name="search" class="searchform" id="search">';
+$return_value  .= '<input style="color:#b3b3b3;" type="text" name="string" size="25" class="textbox" value="'.$msg.'" '.$j.'  />&nbsp;';
+$return_value  .= '</form>';
+$return_value  .= '</div>';
+}
+return $return_value;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/SearchBox.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/SectionPicker.php
===================================================================
--- trunk/modules/droplets/example/SectionPicker.php	(nonexistent)
+++ trunk/modules/droplets/example/SectionPicker.php	(revision 2)
@@ -0,0 +1,58 @@
+//:Load the view.php from any other section-module
+//:Use [[SectionPicker?sid=123]]
+global $database, $wb, $TEXT, $DGTEXT,$section_id,$page_id;
+    $sRetVal = '';
+    $content = '';
+    $_sFrontendCss = '';
+    $sid = isset( $sid) ? intval( $sid) : 0;
+    if ( intval( $sid) > 0) {
+        $now = time();
+        $sql = 'SELECT `s`.*'
+              .     ', `p`.`viewing_groups`'
+              .     ', `p`.`visibility`'
+              .     ', `p`.`menu_title`'
+              .     ', `p`.`link` '
+              . 'FROM `'.TABLE_PREFIX.'sections` `s`'
+              . 'INNER JOIN `'.TABLE_PREFIX.'pages` `p` '
+              .    'ON `p`.`page_id`=`s`.`page_id` '
+              . 'WHERE `s`.`section_id` = '.( int)$sid.' '
+              .   'AND ('
+              .         '('.$now.'>=`s`.`publ_start` OR `s`.`publ_start`=0) AND '
+              .         '('.$now.'<=`s`.`publ_end` OR `s`.`publ_end`=0) '
+              .       ')'
+              .   'AND `p`.`visibility` NOT IN (\'deleted\') '
+              .   '  ';
+        if ( $oSection = $database->query( $sql)) {
+            while ( $aSection = $oSection->fetchRow( MYSQLI_ASSOC)) {
+                $section_id = $aSection['section_id'];
+                $module = $aSection['module'];
+                ob_start();
+                require ( WB_PATH.'/modules/'.$module.'/view.php');
+                $content = ob_get_clean();
+                $_sFrontendCss = '/modules/'.$module.'/frontend.css';
+                $_sFrontendCssrUrl = WB_URL.$_sFrontendCss;
+                $_sSearch = preg_quote( WB_URL.'/modules/'.$module.'/frontend.css', '/');
+                if ( preg_match( '/<link[^>]*?href\s*=\s*\"'.$_sSearch.'\".*?\/>/si', $content)) {
+                    $_sFrontendCss = '';
+                } else {
+//                    $_sFrontendCss = '<link href="'.WB_URL.$_sFrontendCss.'" rel="stylesheet" type="text/css" media="screen" />';
+                    $_sFrontendCss = '
+                      <script type="text/javascript">
+                      <!--
+                         var ModuleCss = WB_URL+"/modules/'.$module.'/frontend.css";
+                         var ModuleJs = WB_URL+"/modules/'.$module.'/frontend.js";
+                          include_file(ModuleJs, "js");
+                          if (typeof LoadOnFly === "undefined"){
+                              include_file(ModuleCss, "css");
+                          } else {
+                              LoadOnFly("head", ModuleCss);
+                          }
+                      -->
+                      </script>
+                      ';
+                }
+            }
+        }
+    }
+
+    return $_sFrontendCss.$content;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/SectionPicker.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/ShowRandomWysiwyg.php
===================================================================
--- trunk/modules/droplets/example/ShowRandomWysiwyg.php	(nonexistent)
+++ trunk/modules/droplets/example/ShowRandomWysiwyg.php	(revision 2)
@@ -0,0 +1,19 @@
+//:Randomly display one WYSIWYG section from a given list
+//:Use [[ShowRandomWysiwyg?section=10,12,15,20]]
+//:possible Delimiters: [ ,;:|-+#/ ]
+global $database;
+$content = ' ';
+if (isset($section)) {
+if( preg_match('/^[0-9]+(?:\s*[\,\|\-\;\:\+\#\/]\s*[0-9]+\s*)*$/', $section)) {
+if (is_readable(WB_PATH.'/modules/wysiwyg/view.php')) {
+// if valid arguments given and module wysiwyg is installed
+// split and sanitize arguments
+$aSections = preg_split('/[\s\,\|\-\;\:\+\#\/]+/', $section);
+$section_id = $aSections[array_rand($aSections)]; // get random element
+ob_start(); // generate output by wysiwyg module
+require(WB_PATH.'/modules/wysiwyg/view.php');
+$content = ob_get_clean();
+}
+}
+}
+return $content;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/ShowRandomWysiwyg.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/ShowWysiwyg.php
===================================================================
--- trunk/modules/droplets/example/ShowWysiwyg.php	(nonexistent)
+++ trunk/modules/droplets/example/ShowWysiwyg.php	(revision 2)
@@ -0,0 +1,17 @@
+//:Display one defined WYSIWYG section
+//:Use [[ShowWysiwyg?section=10]]
+global $database, $section_id, $module;
+$content = ' ';
+$section = isset($section) ? intval($section) : 0;
+if ($section) {
+if (is_readable(WB_PATH.'/modules/wysiwyg/view.php')) {
+// if valid section is given and module wysiwyg is installed
+$iOldSectionId = intval($section_id); // save old SectionID
+$section_id = $section;
+ob_start(); // generate output by regulary wysiwyg module
+require(WB_PATH.'/modules/wysiwyg/view.php');
+$content = ob_get_clean();
+$section_id = $iOldSectionId; // restore old SectionId
+}
+}
+return $content;
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/ShowWysiwyg.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/SiteModified.php
===================================================================
--- trunk/modules/droplets/example/SiteModified.php	(nonexistent)
+++ trunk/modules/droplets/example/SiteModified.php	(revision 2)
@@ -0,0 +1,8 @@
+//:Create information on when your site was last updated.
+//:Create information on when your site was last updated. Any page update counts.
+global $database, $wb;
+if (PAGE_ID>0) {
+$query=$database->query("SELECT max(modified_when) FROM ".TABLE_PREFIX."pages");
+$mod_details=$query->fetchRow();
+return "This site was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0]).".";
+}
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/SiteModified.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/Text2Image.php
===================================================================
--- trunk/modules/droplets/example/Text2Image.php	(nonexistent)
+++ trunk/modules/droplets/example/Text2Image.php	(revision 2)
@@ -0,0 +1,27 @@
+//:Create an image from the textparameter
+//:Use [[text2image?text=The text to create]]
+//clean up old files..
+$dir = WB_PATH.'/temp/';
+$dp = opendir($dir) or die ('Could not open '.$dir);
+while ($file = readdir($dp)) {
+if ((preg_match('/img_/',$file)) && (filemtime($dir.$file)) <  (strtotime('-10 minutes'))) {
+unlink($dir.$file);
+}
+}
+closedir($dp);
+$imgfilename = 'img_'.rand().'_'.time().'.jpg';
+//create image
+$padding = 0;
+$font = 3;
+$height = imagefontheight($font) + ($padding * 2);
+$width = imagefontwidth($font) * strlen($text) + ($padding * 2);
+$image_handle = imagecreatetruecolor($width, $height);
+$text_color = imagecolorallocate($image_handle, 0, 0, 0);
+$background_color = imagecolorallocate($image_handle, 255, 255, 255);
+$bg_height = imagesy($image_handle);
+$bg_width = imagesx($image_handle);
+imagefilledrectangle($image_handle, 0, 0, $bg_width, $bg_height, $background_color);
+imagestring($image_handle, $font, $padding, $padding, $text, $text_color);
+imagejpeg($image_handle,WB_PATH.'/temp/'.$imgfilename,100);
+imagedestroy($image_handle);
+return '<img src="'.WB_URL.'/temp/'.$imgfilename.'" style="border:0px;margin:0px;padding:0px;vertical-align:middle;" />';
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/Text2Image.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/Zitate.php
===================================================================
--- trunk/modules/droplets/example/Zitate.php	(nonexistent)
+++ trunk/modules/droplets/example/Zitate.php	(revision 2)
@@ -0,0 +1,6 @@
+//:Create a random oneliner on your page
+//:Use: [[Zitate]].
+//:The file with the oneliner data is located in /modules/droplets/example/oneliners.txt;
+$line = file (dirname(__FILE__)."/example/oneliners.txt");
+shuffle($line);
+return $line[0];
\ No newline at end of file

Property changes on: trunk/modules/droplets/example/Zitate.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/example/oneliners.txt
===================================================================
--- trunk/modules/droplets/example/oneliners.txt	(nonexistent)
+++ trunk/modules/droplets/example/oneliners.txt	(revision 2)
@@ -0,0 +1,151 @@
+A bug in the code is worth two in the documentation.
+According to my calculations the problem doesn't exist.
+A computer's attention span is as long as its power cord.
+A computer scientist is someone who fixes things that aren't broken.
+Adding manpower to a late software project makes it later.
+Air conditioned environment - Do NOT open Windows!
+All computers wait at the same speed.
+All wiyht. Rho sritched mg kegtops awound?
+Willyoupleasehelpmefixmykeyboard?Thespacebarisbroken!
+All you need to know is the user interface.
+Alpha. Software undergoes alpha testing as a first step in getting user feedback. Alpha is Latin for "doesn't work."
+Any programming language is at its best before it is implemented and used.
+Any program that runs right is obsolete.
+A paperless office has about as much chance as a paperless bathroom.
+A printer consists of three main parts: the case, the jammed paper tray and the blinking red light.
+A Life? Cool! Where can I download one of those from?
+A program is never finished until the programmer dies.
+ASCII stupid question, get a stupid ANSI!
+As far as we know, our computer has never had an undetected error.
+A user friendly computer first requires a friendly user.
+A user will find any interface design intuitive...with enough practice.
+Backup not found: (A)bort (R)etry (P)anic
+Bad or missing mouse driver. Spank the cat [Y/N]?
+Be aware of Programmers who carry screwdrivers.
+Best file compression around: "DEL *.*" = 100% compression
+Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for "still doesn't work."
+Bug? That's not a bug, that's a feature.
+Build a system that even a fool can use, and only a fool will use it.
+Buy a Pentium IV 2GHz so you can reboot faster.
+Cannot load Windows 95, Incorrect DOS Version.
+COFFEE.EXE Missing---Insert Cup and Press Any Key.
+Compatible: Gracefully accepts erroneous data from any source.
+Computer analyst to programmer: "You start coding. I'll go find out what they want."
+Computer and car salesmen differ in that the latter know when they are lying.
+Computer programmers do it byte by byte.
+Computer programmers don't byte, they nibble a bit.
+Computers are a more fun way to do the same work you'd have to do without them.
+Computers are like air-conditioners: both stop working, if you open windows.
+Computers are not intelligent. They only think they are.
+Computers are unreliable, but humans are even more unreliable.
+Computers can never replace human stupidity.
+Computer Science: solving today's problems tomorrow.
+Computers follow your orders, not your intentions.
+Computers make very fast, very accurate mistakes.
+Crashing is the only thing windows does quickly.
+Daddy, what does FORMATTING DRIVE C mean?
+Disclaimer: Any errors in spelling, tact, or fact are transmission errors.
+Disinformation is not as good as datinformation.
+Don't compute and drive; the life you save may be your own.
+Don't document the program; program the document.
+Don't hit the keys so hard, it hurts.
+Don't let the computer bugs bite!
+DOS=HIGH? I knew it was on something!
+DOS Tip #1: Add DEVICE=FNGRCROS.SYS to CONFIG.SYS
+DOS Tip #2: Add BUGS=OFF to your CONFIG.SYS
+Email returned to sender -- insufficient voltage.
+Enter any 11-digit prime number to continue...
+Error:015: Unable to exit Windows. Try the door.
+Error reading FAT record: Try the SKINNY one? (Y/N)
+Ever notice how fast Windows runs? Neither did I...
+Every bug you find is the last one.
+Every time I type 'win', I loose ...
+Excuse me for butting in, but I'm interrupt-driven.
+Failure is not an option, it comes bundled with the software.
+.....File not found. Should I fake it? (Y/N)
+For any problem there is a solution that is simple, quick, and ultimately worse than the problem.
+Hardware: The parts of a computer system that can be kicked.
+Hi, my name is Any Key. Please don't hit me!
+Hiroshima..45........Tjernobil..86........Windows..95....
+Hit any user to continue.
+Home is where the computer is plugged in.
+How an engineer writes a program: Start by debugging an empty file...
+I am a computer, dumber than any human and smarter than an administrator.
+If at first you don't succeed, call it version 1.0.
+If a train station is where the train stops, what is a work station?
+I finally made my stupid computer faster; I dropped it out of the window, and it went really fast.
+If the automobile had followed the same development cycle as the computer, a Rolls-Royce today would cost $100, get a million miles to the gallon, and explode once a year, illing everyone inside.
+If the pen is mightier than the sword, and a picture is worth a thousand words, how dangerous is a fax?
+If your computer says, "Printer out of Paper," this problem cannot be resolved by continuously clicking the "OK" button.
+I have a dream: 1073741824 bytes free.
+I haven't lost my mind; it's backed up on tape somewhere.
+I hit the CTRL key but I'm still not in control!
+I'm writing a book. I've got the page numbers done.
+In a few minutes a computer can make a mistake so great that it would take many men many months to equal it.
+Is reading in the bathroom considered Multi-Tasking.
+It is easier to write an incorrect program than understand a correct one.
+It said "Insert disk 3..." but only 2 fit.
+It's not a bug; it's an undocumented feature.
+It works! Now if only I could remember what I did...
+I wish life has a scroll back buffer.
+Keyboard : Instrument used to enter errors into computer.
+Keyboard not connected, press F1 to continue.
+MACINTOSH stands for Most Applications Crash If Not The Operating System Hangs.
+Maintenance-free: When it breaks, it can't be fixed...
+Math problems? Call 1-800-[(10x)(ln(13e))]-[sin(xy)/2.362x]
+Melted fruit snacks found on Keyboard. Delete nephew [Y/N]?
+MICROSOFT: Most Intelligent Customers Realize Our Software is Only for Fools and Teenagers.
+Mommy! The cursor's winking at me!
+My software never has bugs. It just develops random features.
+Never say "OOPS!" always say "Ah, Interesting!"
+No matter how much data you add to your laptop, it will not get heavier.
+Of course I know how to copy disks. Where's the xerox machine?
+One person's error is another person's data.
+One picture is worth 128K words.
+Operator! Trace this call and tell me where I am.
+Owners of digital watches: Your day's are numbered!
+Oxymoron: Microsoft Works.
+Press any key...no, no, no, NOT THAT ONE!
+Press any key to continue or any other key to quit...
+Press CTRL-ALT-DEL to continue....
+Programmers don't die, they just GOSUB without RETURN.
+Programmer's Time-Space Continuum: Programmers continuously space the time.
+RAM disk is NOT an installation procedure.
+Reference Manual: Object that raises the monitor to eye level. Also used to compensate for that short table leg.
+Scheduled Release Date: A carefully calculated date determined by estimating the actual shipping date and subtracting six months from it.
+Shift to the left! Shift to the right! Pop up, push down, byte, byte, byte!
+Southern DOS: Y'all reckon? (Yep/Nope)
+Speed Kills! Use Windows 95.
+System going down at 1:45 for disk crashing.
+The box said: 'install on Windows 95, NT 4.0 or better'. So I installed it on Linux.
+The definition of an upgrade: Take old bugs out, put new ones in.
+The name is Baud......, James Baud.
+The program is absolutely right; therefore the computer must be wrong.
+The programmer's national anthem is 'AAAAAAAAHHHHHHHH'.
+The Queue Principle: The longer you wait in line, the greater the likelihood that you are standing in the wrong line.
+There are never enough hours in a day, but always too many days before Saturday.
+There are two ways to write error-free programs; only the third one works.
+There can never be a computer language in which you cannot write a bad program.
+There were computers in Biblical times. Eve had an Apple.
+These settings will have no effect until you restart the system.
+Reset Universe (Y/N) ?
+Those who can, do. Those who cannot, teach. Those who cannot teach, HACK!
+To be, or not to be, those are the parameters.
+To err is human, but to really foul things up requires a computer.
+User error: replace user and press any key to continue.
+Warning, keyboard not found. Press Enter to continue.
+What boots up must come down.
+Who's General Failure and why's he reading my disk?
+Why doesn't DOS ever say "EXCELLENT command or filename!"
+Why do they call this a word processor? It's simple, ... you've seen what food processors do to food, right?
+Why do we want intelligent terminals when there are so many stupid users?
+Will the information superhighway have any rest stops?
+Windows 3.1 not found: (C)heer, (P)arty, (D)ance?
+Windows is NOT a virus. Viruses DO something.
+WINDOWS stands for Will Install Needless Data On Whole System.
+Windows: the ultimate triumph of marketing over technology.
+You are making progress if each mistake is a new one.
+You don't have to know how the computer works, just how to work the computer.
+You forgot to do your backup 16 days ago. Tomorrow you'll need that version.
+You had mail, but the super-user read it, and DELETED it!
+You never finish a program, you just stop working on it. 
\ No newline at end of file
Index: trunk/modules/droplets/info.php
===================================================================
--- trunk/modules/droplets/info.php	(nonexistent)
+++ trunk/modules/droplets/info.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory   = 'droplets';
+$module_name        = 'Droplets v3.1.0';
+$module_type        = 'addon';
+$module_function    = 'tool';
+$module_version     = '3.1.0';
+$module_platform    = '2.10.0';
+$module_author      = 'Ruud and pcwacht, Luisehahne';
+$module_license     = 'GNU General Public License';
+$module_description = 'This tool allows you to manage your local Droplets.';

Property changes on: trunk/modules/droplets/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/install-data.sql
===================================================================
--- trunk/modules/droplets/install-data.sql	(nonexistent)
+++ trunk/modules/droplets/install-data.sql	(revision 2)
@@ -0,0 +1,44 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 01. Feb 2016 um 19:55
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Daten für Tabelle `{TABLE_PREFIX}mod_droplets`
+--
+
+INSERT INTO `{TABLE_PREFIX}mod_droplets` (`id`, `name`, `code`, `description`, `modified_when`, `modified_by`, `active`, `admin_edit`, `admin_view`, `show_wysiwyg`, `comments`) VALUES
+(1, 'EmailFilter', 'return \'\';\n', 'Emailfiltering on your output - dummy Droplet', 1453286422, 1, 1, 0, 0, 0, 'usage:  [[EmailFilter]]\n'),
+(2, 'LoginBox', 'global $database,$wb,$page_id,$TEXT, $MENU, $HEADING;\r\n$return_value = \'<div class="login-box">\'."\\n";\r\n$return_admin = \' \';\r\n// Return a system permission\r\n$get_permission = function ($name, $type = \'system\') use ( $wb )\r\n{\r\n// Append to permission type\r\n$type .= \'_permissions\';\r\n// Check if we have a section to check for\r\nif($name == \'start\') {\r\nreturn true;\r\n} else {\r\n// Set system permissions var\r\n$system_permissions = $wb->get_session(\'SYSTEM_PERMISSIONS\');\r\n// Set module permissions var\r\n$module_permissions = $wb->get_session(\'MODULE_PERMISSIONS\');\r\n// Set template permissions var\r\n$template_permissions = $wb->get_session(\'TEMPLATE_PERMISSIONS\');\r\n// Return true if system perm = 1\r\nif (isset($$type) && is_array($$type) && is_numeric(array_search($name, $$type))) {\r\nif($type == \'system_permissions\') {\r\nreturn true;\r\n} else {\r\nreturn false;\r\n}\r\n} else {\r\nif($type == \'system_permissions\') {\r\nreturn false;\r\n} else {\r\nreturn true;\r\n}\r\n}\r\n}\r\n};\r\n$get_page_permission = function ($page, $action=\'admin\') use ( $database, $wb )\r\n{\r\nif ($action!=\'viewing\'){ $action=\'admin\';}\r\n$action_groups=$action.\'_groups\';\r\n$action_users=$action.\'_users\';\r\nif (is_array($page)) {\r\n$groups=$page[$action_groups];\r\n$users=$page[$action_users];\r\n} else {\r\n$sql = \'SELECT \'.$action_groups.\',\'.$action_users.\' FROM \'.TABLE_PREFIX.\'pages \'\r\n. \'WHERE page_id = \\\'\'.$page.\'\\\'\';\r\n$results = $database->query( $sql );\r\n$result = $results->fetchRow( MYSQLI_ASSOC );\r\n$groups = explode(\',\', str_replace(\'_\', \'\', $result[$action_groups]));\r\n$users = explode(\',\', str_replace(\'_\', \'\', $result[$action_users]));\r\n}\r\n$in_group = FALSE;\r\nforeach($wb->get_groups_id() as $cur_gid){\r\nif (in_array($cur_gid, $groups)) {\r\n$in_group = TRUE;\r\n}\r\n}\r\nif((!$in_group) AND !is_numeric(array_search($wb->get_user_id(), $users))) {\r\nreturn false;\r\n}\r\nreturn true;\r\n};\r\n// Get redirect\r\n$redirect_url = ((isset($_SESSION[\'HTTP_REFERER\']) && $_SESSION[\'HTTP_REFERER\'] != \'\') ? $_SESSION[\'HTTP_REFERER\'] : WB_URL );\r\n$redirect_url = (isset($redirect) && ($redirect!=\'\') ? $redirect : $redirect_url);\r\nif ( ( FRONTEND_LOGIN == \'enabled\') &&\r\n( VISIBILITY != \'private\') &&\r\n( $wb->get_session(\'USER_ID\') == \'\')  )\r\n{\r\n$return_value .= \'<form action="\'.LOGIN_URL.\'" method="post">\'."\\n";\r\n$return_value .= \'<input type="hidden" name="redirect" value="\'.$redirect_url.\'" />\'."\\n";\r\n$return_value .= \'<fieldset>\'."\\n";\r\n$return_value .= \'<h1>\'.$TEXT[\'LOGIN\'].\'</h1>\'."\\n";\r\n$return_value .= \'<label for="username">\'.$TEXT[\'USERNAME\'].\':</label>\'."\\n";\r\n$return_value .= \'<p><input type="text" name="username" id="username"  /></p>\'."\\n";\r\n$return_value .= \'<label for="password">\'.$TEXT[\'PASSWORD\'].\':</label>\'."\\n";\r\n$return_value .= \'<p><input type="password" name="password" id="password"/></p>\'."\\n";\r\n$return_value .= \'<p><input type="submit" id="submit" value="\'.$TEXT[\'LOGIN\'].\'" class="dbutton" /></p>\'."\\n";\r\n$return_value .= \'<ul class="login-advance">\'."\\n";\r\n$return_value .= \'<li class="forgot"><a href="\'.FORGOT_URL.\'"><span>\'.$TEXT[\'FORGOT_DETAILS\'].\'</span></a></li>\'."\\n";\r\nif (intval(FRONTEND_SIGNUP) > 0)\r\n{\r\n$return_value .= \'<li class="sign"><a href="\'.SIGNUP_URL.\'">\'.$TEXT[\'SIGNUP\'].\'</a></li>\'."\\n";\r\n}\r\n$return_value .= \'</ul>\'."\\n";\r\n$return_value .= \'</fieldset>\'."\\n";\r\n$return_value .= \'</form>\'."\\n";\r\n} elseif( (FRONTEND_LOGIN == \'enabled\') &&\r\n(is_numeric($wb->get_session(\'USER_ID\'))) )\r\n{\r\n$return_value .= \'<form action="\'.LOGOUT_URL.\'" method="post" class="login-table">\'."\\n";\r\n$return_value .= \'<fieldset>\'."\\n";\r\n$return_value .= \'<h1>\'.$TEXT["LOGGED_IN"].\'</h1>\'."\\n";\r\n$return_value .= \'<label>\'.$TEXT[\'WELCOME_BACK\'].\', \'.$wb->get_display_name().\'</label>\'."\\n";\r\n$return_value .= \'<p><input type="submit" name="submit" value="\'.$MENU[\'LOGOUT\'].\'" class="dbutton" /></p>\'."\\n";\r\n$return_value .= \'<ul class="logout-advance">\'."\\n";\r\n$return_value .= \'<li class="preference"><a href="\'.PREFERENCES_URL.\'" title="\'.$MENU[\'PREFERENCES\'].\'">\'.$MENU[\'PREFERENCES\'].\'</a></li>\'."\\n";\r\nif ($wb->ami_group_member(\'1\'))  //change ot the group that should get special links\r\n{\r\n$return_admin .= \'<li class="admin"><a target="_blank" href="\'.ADMIN_URL.\'/index.php" title="\'.$TEXT[\'ADMINISTRATION\'].\'" class="blank_target">\'.$TEXT["ADMINISTRATION"].\'</a></li>\'."\\n";\r\n//you can add more links for your users like userpage, lastchangedpages or something\r\n$return_value .= $return_admin;\r\n}\r\n//change ot the group that should get special links\r\nif( $get_permission(\'pages_modify\') && $get_page_permission( PAGE_ID ) )\r\n{\r\n$return_value .= \'<li class="modify"><a target="_blank" href="\'.ADMIN_URL.\'/pages/modify.php?page_id=\'.PAGE_ID.\'" title="\'.$HEADING[\'MODIFY_PAGE\'].\'" class="blank_target">\'.$HEADING[\'MODIFY_PAGE\'].\'</a></li>\'."\\n";\r\n}\r\n$return_value .= \'</ul>\'."\\n";\r\n$return_value .= \'</fieldset>\'."\\n";\r\n$return_value .= \'</form>\'."\\n";\r\n}\r\n$return_value .= \'</div>\'."\\n";\r\nreturn $return_value;\r\n', 'Puts a Login / Logout box on your page.', 1453286576, 1, 1, 0, 0, 0, 'Use: [[LoginBox?redirect=url]]\r\nAbsolute or relative url possible\r\nRemember to enable frontend login in your website settings!!'),
+(3, 'Lorem', '$lorem = array();\n$lorem[] = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut odio. Nam sed est. Nam a risus et est iaculis adipiscing. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut justo. In tincidunt viverra nisl. Donec dictum malesuada magna. Curabitur id nibh auctor tellus adipiscing pharetra. Fusce vel justo non orci semper feugiat. Cras eu leo at purus ultrices tristique.<br /><br />";\n$lorem[] = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.<br /><br />";\n$lorem[] = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.<br /><br />";\n$lorem[] = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.<br /><br />";\n$lorem[] = "Cras consequat magna ac tellus. Duis sed metus sit amet nunc faucibus blandit. Fusce tempus cursus urna. Sed bibendum, dolor et volutpat nonummy, wisi justo convallis neque, eu feugiat leo ligula nec quam. Nulla in mi. Integer ac mauris vel ligula laoreet tristique. Nunc eget tortor in diam rhoncus vehicula. Nulla quis mi. Fusce porta fringilla mauris. Vestibulum sed dolor. Aliquam tincidunt interdum arcu. Vestibulum eget lacus. Curabitur pellentesque egestas lectus. Duis dolor. Aliquam erat volutpat. Aliquam erat volutpat. Duis egestas rhoncus dui. Sed iaculis, metus et mollis tincidunt, mauris dolor ornare odio, in cursus justo felis sit amet arcu. Aenean sollicitudin. Duis lectus leo, eleifend mollis, consequat ut, venenatis at, ante.<br /><br />";\n$lorem[] = "Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.<br /><br />";\nif (!isset($blocks)) $blocks=1;\n$blocks = (int)$blocks - 1;\nif ($blocks <= 0) $blocks = 0;\nif ($blocks > 5) $blocks = 5;\n$returnvalue = "";\nfor ( $i=0 ; $i<=$blocks ; $i++) {\n$returnvalue .= $lorem[$i];\n}\nreturn $returnvalue;\n', 'Create Lorum Ipsum text', 1453286422, 1, 1, 0, 0, 0, 'Use: [[Lorem?blocks=6]] (max 6 paragraphs)\n'),
+(4, 'ModifiedWhen', 'global $database, $wb;\nif (PAGE_ID>0) {\n$query=$database->query("SELECT modified_when FROM ".TABLE_PREFIX."pages where page_id=".PAGE_ID);\n$mod_details=$query->fetchRow();\nreturn "This page was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0]).".";\n}\n', 'Displays the last modification time of the current page', 1453286422, 1, 1, 0, 0, 0, 'Use [[ModifiedWhen]]\n'),
+(5, 'NextPage', '$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, \'[if(class==menu-current){[level] [sib] [sibCount] [parent]}]\', \'\', \'\', \'\');\nlist($nLevel, $nSib, $nSibCount, $nParent) = explode(\' \', $info);\n// show next\n$nxt = $nSib < $nSibCount ? $nSib + 1 : 0;\nif ($nxt > 0) {\nreturn show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER,    "[if(sib==$nxt){&gt;&gt; [a][menu_title]</a>}]", \'\', \'\', \'\');\n}\nelse return \'(no next)\';\n', 'Create a next link to your page', 1453286422, 1, 1, 0, 0, 0, 'Display a link to the next page on the same menu level\n'),
+(6, 'Oneliner', '$line = file (dirname(__FILE__)."/example/oneliners.txt");\nshuffle($line);\nreturn $line[0];\n', 'Create a random oneliner on your page', 1453286422, 1, 1, 0, 0, 0, 'Use: [[OneLiner]].\nThe file with the oneliner data is located in /modules/droplets/example/oneliners.txt;\n'),
+(7, 'ParentPage', '$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, \'[if(class==menu-current){[level] [sib] [sibCount] [parent]}]\', \'\', \'\', \'\');\nlist($nLevel, $nSib, $nSibCount, $nParent) = explode(\' \', $info);\n// show up level\nif ($nLevel > 0) {\n$lev = $nLevel - 1;\nreturn show_menu2(0, SM2_ROOT, SM2_CURR, SM2_CRUMB|SM2_BUFFER, "[if(level==$lev){[a][menu_title]</a>}]", \'\', \'\', \'\');\n}\nelse\nreturn \'(no parent)\';\n', 'Create a parent link to your page', 1453286422, 1, 1, 0, 0, 0, 'Display a link to the parent page of the current page\n'),
+(8, 'PreviousPage', '$info = show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, \'[if(class==menu-current){[level] [sib] [sibCount] [parent]}]\', \'\', \'\', \'\');\nlist($nLevel, $nSib, $nSibCount, $nParent) = explode(\' \', $info);\n// show previous\n$prv = $nSib > 1 ? $nSib - 1 : 0;\nif ($prv > 0) {\nreturn show_menu2(0, SM2_CURR, SM2_START, SM2_ALL|SM2_BUFFER, "[if(sib==$prv){[a][menu_title]</a> <<}]", \'\', \'\', \'\');\n}\nelse\nreturn \'(no previous)\';\n', 'Create a previous link to your page', 1453286422, 1, 1, 0, 0, 0, 'Display a link to the previous page on the same menu level\n'),
+(9, 'RandomImage', '$dir = ( (isset($dir) && ($dir!=\'\') ) ? $dir : \'\');\n$folder=opendir(WB_PATH.MEDIA_DIRECTORY.\'/\'.$dir.\'/.\');\n$names = array();\nwhile ($file = readdir($folder))  {\n$ext=strtolower(substr($file,-4));\nif ($ext==".jpg"||$ext==".gif"||$ext==".png"){\n$names[count($names)] = $file;\n}\n}\nclosedir($folder);\nshuffle($names);\n$image=$names[0];\n$name=substr($image,0,-4);\nreturn \'<img src="\'.WB_URL.MEDIA_DIRECTORY.\'/\'.$dir.\'/\'.$image.\'" alt="\'.$name.\'" width="95%" />\';\n', 'Get a random image from a folder in the MEDIA folder.', 1453286422, 1, 1, 0, 0, 0, 'Commandline to use: [[RandomImage?dir=subfolder_in_mediafolder]]\n'),
+(10, 'SearchBox', 'global $TEXT;\n$return_value = true;\nif (!isset($msg)) $msg=\'search this site..\';\n$j = "onfocus=\\"if(this.value==\'$msg\'){this.value=\'\';this.style.color=\'#000\';}else{this.select();}\\"\nonblur=\\"if(this.value==\'\'){this.value=\'$msg\';this.style.color=\'#b3b3b3\';}\\"";\nif(SHOW_SEARCH) {\n$return_value  = \'<div class="searchbox">\';\n$return_value  .= \'<form action="\'.WB_URL.\'/search/index\'.PAGE_EXTENSION.\'" method="get" name="search" class="searchform" id="search">\';\n$return_value  .= \'<input style="color:#b3b3b3;" type="text" name="string" size="25" class="textbox" value="\'.$msg.\'" \'.$j.\'  />&nbsp;\';\n$return_value  .= \'</form>\';\n$return_value  .= \'</div>\';\n}\nreturn $return_value;\n', 'Create a searchbox on the position', 1453286422, 1, 1, 0, 0, 0, 'usage: [[searchbox]].\nOptional parameter "?msg=the search message"\n'),
+(11, 'SectionPicker', 'global $database, $wb, $TEXT, $DGTEXT,$section_id,$page_id;\n$content = \'\';\n$sid = isset($sid) ? intval($sid) : 0;\nif( $sid ) {\n$oldSid = $section_id; // save old sectionID\n$sql  = \'SELECT `module` FROM `\'.TABLE_PREFIX.\'sections` \';\n$sql .= \'WHERE `section_id`=\'.$sid;\nif (($module = $database->get_one($sql))) {\nif (is_readable(WB_PATH.\'/modules/\'.$module.\'/view.php\')) {\n$_sFrontendCss = \'/modules/\'.$module.\'/frontend.css\';\nif(is_readable(WB_PATH.$_sFrontendCss)) {\n$_sSearch = preg_quote(WB_URL.\'/modules/\'.$module.\'/frontend.css\', \'/\');\nif(preg_match(\'/<link[^>]*?href\\s*=\\s*\\"\'.$_sSearch.\'\\".*?\\/>/si\', $wb_page_data)) {\n$_sFrontendCss = \'\';\n}else {\n$_sFrontendCss = \'<link href="\'.WB_URL.$_sFrontendCss.\'" rel="stylesheet" type="text/css" media="screen" />\';\n}\n} else { $_sFrontendCss = \'\'; }\n$section_id = $sid;\nob_start();\nrequire(WB_PATH.\'/modules/\'.$module.\'/view.php\');\n$content = $_sFrontendCss.ob_get_clean();\n$section_id = $oldSid; // restore old sectionID\n}\n}\n}\nreturn $content;\n', 'Load the view.php from any other section-module', 1453286422, 1, 1, 0, 0, 0, 'Use [[SectionPicker?sid=123]]\n'),
+(12, 'ShowRandomWysiwyg', 'global $database;\n$content = \'\';\nif (isset($section)) {\nif( preg_match(\'/^[0-9]+(?:\\s*[\\,\\|\\-\\;\\:\\+\\#\\/]\\s*[0-9]+\\s*)*$/\', $section)) {\nif (is_readable(WB_PATH.\'/modules/wysiwyg/view.php\')) {\n// if valid arguments given and module wysiwyg is installed\n// split and sanitize arguments\n$aSections = preg_split(\'/[\\s\\,\\|\\-\\;\\:\\+\\#\\/]+/\', $section);\n$section_id = $aSections[array_rand($aSections)]; // get random element\nob_start(); // generate output by wysiwyg module\nrequire(WB_PATH.\'/modules/wysiwyg/view.php\');\n$content = ob_get_clean();\n}\n}\n}\nreturn $content;\n', 'Randomly display one WYSIWYG section from a given list', 1453286422, 1, 1, 0, 0, 0, 'Use [[ShowRandomWysiwyg?section=10,12,15,20]]\npossible Delimiters: [ ,;:|-+#/ ]\n'),
+(13, 'ShowWysiwyg', 'global $database, $section_id, $module;\n$content = \'\';\n$section = isset($section) ? intval($section) : 0;\nif ($section) {\nif (is_readable(WB_PATH.\'/modules/wysiwyg/view.php\')) {\n// if valid section is given and module wysiwyg is installed\n$iOldSectionId = intval($section_id); // save old SectionID\n$section_id = $section;\nob_start(); // generate output by regulary wysiwyg module\nrequire(WB_PATH.\'/modules/wysiwyg/view.php\');\n$content = ob_get_clean();\n$section_id = $iOldSectionId; // restore old SectionId\n}\n}\nreturn $content;\n', 'Display one defined WYSIWYG section', 1453286422, 1, 1, 0, 0, 0, 'Use [[ShowWysiwyg?section=10]]\n'),
+(14, 'SiteModified', 'global $database, $wb;\nif (PAGE_ID>0) {\n$query=$database->query("SELECT max(modified_when) FROM ".TABLE_PREFIX."pages");\n$mod_details=$query->fetchRow();\nreturn "This site was last modified on ".date("d/m/Y",$mod_details[0]). " at ".date("H:i",$mod_details[0]).".";\n}\n', 'Create information on when your site was last updated.', 1453286422, 1, 1, 0, 0, 0, 'Create information on when your site was last updated. Any page update counts.\n'),
+(15, 'Skype', '$content=\'<div class="popup">Check skypename!</div>\';\n$user = (isset($user) && ($user!=\'\') ? $user : \'\');\nif($user==\'\') { return $content; }\nreturn \'<div class="popup"><img src="http://mystatus.skype.com/\'.$user.\'.png?t=\'.time().\'" alt="My Skype status" /></div>\';\n', 'Your skype status as an image', 1453286422, 1, 1, 0, 0, 0, 'Commandline to use: [[skype?user=skypename]]\n'),
+(16, 'Text2Image', '//clean up old files..\n$dir = WB_PATH.\'/temp/\';\n$dp = opendir($dir) or die (\'Could not open \'.$dir);\nwhile ($file = readdir($dp)) {\nif ((preg_match(\'/img_/\',$file)) && (filemtime($dir.$file)) <  (strtotime(\'-10 minutes\'))) {\nunlink($dir.$file);\n}\n}\nclosedir($dp);\n$imgfilename = \'img_\'.rand().\'_\'.time().\'.jpg\';\n//create image\n$padding = 0;\n$font = 3;\n$height = imagefontheight($font) + ($padding * 2);\n$width = imagefontwidth($font) * strlen($text) + ($padding * 2);\n$image_handle = imagecreatetruecolor($width, $height);\n$text_color = imagecolorallocate($image_handle, 0, 0, 0);\n$background_color = imagecolorallocate($image_handle, 255, 255, 255);\n$bg_height = imagesy($image_handle);\n$bg_width = imagesx($image_handle);\nimagefilledrectangle($image_handle, 0, 0, $bg_width, $bg_height, $background_color);\nimagestring($image_handle, $font, $padding, $padding, $text, $text_color);\nimagejpeg($image_handle,WB_PATH.\'/temp/\'.$imgfilename,100);\nimagedestroy($image_handle);\nreturn \'<img src="\'.WB_URL.\'/temp/\'.$imgfilename.\'" style="border:0px;margin:0px;padding:0px;vertical-align:middle;" />\';\n', 'Create an image from the textparameter', 1453286422, 1, 1, 0, 0, 0, 'Use [[text2image?text=The text to create]]\n'),
+(17, 'Zitate', '$line = file (dirname(__FILE__)."/example/oneliners.txt");\nshuffle($line);\nreturn $line[0];\n', 'Create a random oneliner on your page', 1453286422, 1, 1, 0, 0, 0, 'Use: [[Zitate]].\nThe file with the oneliner data is located in /modules/droplets/example/oneliners.txt;\n');
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Property changes on: trunk/modules/droplets/install-data.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/install-struct.sql
===================================================================
--- trunk/modules/droplets/install-struct.sql	(nonexistent)
+++ trunk/modules/droplets/install-struct.sql	(revision 2)
@@ -0,0 +1,32 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 01. Feb 2016 um 19:54
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_droplets`
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {FIELD_COLLATION}
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_droplets`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_droplets` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(32){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `code` longtext{FIELD_COLLATION} NOT NULL,
+  `description` text{FIELD_COLLATION} NOT NULL,
+  `modified_when` int(11) NOT NULL DEFAULT '0',
+  `modified_by` int(11) NOT NULL DEFAULT '0',
+  `active` int(11) NOT NULL DEFAULT '0',
+  `comments` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`id`)
+){TABLE_ENGINE=MyISAM};
+
+ALTER TABLE `{TABLE_PREFIX}mod_droplets` ADD `admin_edit` INT(11) NOT NULL DEFAULT '0' AFTER `active`;
+ALTER TABLE `{TABLE_PREFIX}mod_droplets` ADD `admin_view` INT(11) NOT NULL DEFAULT '0' AFTER `admin_edit`;
+ALTER TABLE `{TABLE_PREFIX}mod_droplets` ADD `show_wysiwyg` INT(11) NOT NULL DEFAULT '0' AFTER `admin_view`;
+ALTER TABLE `{TABLE_PREFIX}mod_droplets` ADD UNIQUE `droplet_name` ( `name` );

Property changes on: trunk/modules/droplets/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/install.php
===================================================================
--- trunk/modules/droplets/install.php	(nonexistent)
+++ trunk/modules/droplets/install.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if(defined('WB_PATH'))
+{
+    if (is_writable(WB_PATH.'/temp/cache')) {
+        Translate::getInstance()->clearCache();
+    }
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+    if (!function_exists('insertDropletFile')) { require('droplets.functions.php'); }
+    $msg = array();
+    $sBaseDir = rtrim(str_replace('\\', '/',realpath(dirname(__FILE__).'/example/')), '/').'/';
+    $aDropletFiles = getDropletFromFiles($sBaseDir);
+    $bOverwriteDroplets = false;
+    insertDropletFile($aDropletFiles, $database, $admin,$msg,$bOverwriteDroplets);
+}

Property changes on: trunk/modules/droplets/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/languages/DE.php
===================================================================
--- trunk/modules/droplets/languages/DE.php	(nonexistent)
+++ trunk/modules/droplets/languages/DE.php	(revision 2)
@@ -0,0 +1,112 @@
+<?php
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+// Deutsche Modulbeschreibung
+$module_description     = 'Droplets sind relativ frei programmierbare Ausgabefilter vom Typ "Suchen&Ersetzen". Der jeweilige Droplet-Tag wird bei der Ausgabe der Seite durch das berechnete Ergebnis ersetzt.';
+// Ueberschriften und Textausgaben
+$DR_TEXT['ADD_DROPLET']   = 'Droplet hinzufügen';
+$DR_TEXT['ADMIN_EDIT']    = 'bearbeiten';
+$DR_TEXT['ADMIN_VIEW']    = 'ansehen';
+$DR_TEXT['ARCHIV_LOAD']   = 'Archivdatei laden';
+$DR_TEXT['ACTION']        = 'Droplets '.PHP_EOL.'umbenennen'.PHP_EOL.''.'einschalten/ausschalten'.PHP_EOL.'löschen';
+$DR_TEXT['BACKUP']        = 'Droplets sichern (Zip)';
+$DR_TEXT['COPY']          = 'Ein Droplet kopieren';
+$DR_TEXT['DELETE']        = 'Löschen';
+$DR_TEXT['DROPLET']       = 'Droplet';
+$DR_TEXT['DROPLETS']      = 'Droplets';
+$DR_TEXT['DROPLETS_DELETED'] = 'Droplets erfolgreich gelöscht.';
+$DR_TEXT['HELP']          = 'Hilfe';
+$DR_TEXT['IMPORT']        = 'Droplets importieren';
+$DR_TEXT['INVALIDCODE']   = 'Dieses Droplet enthält ungültigen PHP code';
+$DR_TEXT['INVALID_BACK']  = 'Ungültige Auswahl. Zurück zur Übersicht';
+$DR_TEXT['MODIFY']        = 'Editieren';
+$DR_TEXT['MODIFIED_WHEN'] = 'Bearbeitet';
+$DR_TEXT['RESTORE']       = 'Droplets wiederherstellen (Zipped)';
+$DR_TEXT['README']        = 'readme.html';
+$DR_TEXT['SHOW']          = 'Übersicht';
+$DR_TEXT['SAVE']          = 'Speichern';
+$DR_TEXT['NOTUNIQUE']     = 'Dieser Dropletname ist bereits vorhanden!';
+$DR_TEXT['WYSIWYG']       = 'Wysiwyg';
+$DR_TEXT['UPLOAD']        = 'Hochladen';
+$DR_TEXT['USED']          = 'Dieses Droplet wird auf folgenden Seiten benutzt (-s):<br />';
+$DR_TEXT['PLEASE_SELECT'] = 'Bitte eine Archivdatei auswählen';
+$DR_TEXT['INACTIVE']      = 'Inaktiv';
+$DR_TEXT['VALID_CODE']    = 'Code valide';
+$DR_TEXT['INVALID_CODE']  = 'Code fehlerhaft';
+$DR_TEXT['COPY_DROPLET']  = 'Duplizieren';
+$TEXT['INACTIVE']         = 'Inaktiv';
+$TEXT['ACTIVE']           = 'Aktiv';
+
+$DROPLET_MESSAGE = array (
+    'ARCHIVE_DELETED' => 'Archivdatei erfolgreich gelöscht.',
+    'ARCHIVE_NOT_DELETED' => 'Archivdatei konnte nicht gelöscht werden.',
+    'CONFIRM_DROPLET_DELETING' => 'Möchten Sie folgende Droplets wirklich löschen?',
+    'DELETED' => 'Droplets erfolgreich gelöscht.',
+    'DELETE_DROPLETS' => 'Droplets löschen',
+    'MISSING_UNMARKED_ARCHIVE_FILES' => 'Sie haben keine Droplets zum importieren ausgewählt.',
+    'GENERIC_MISSING_ARCHIVE_FILE' => 'Sie haben keine Archiv Datei ausgewählt.',
+    'GENERIC_MISSING_TITLE' => 'Geben sie bitte einen Dropletnamen ein.',
+    'GENERIC_LOCAL_DOWNLOAD' => 'Archiv herunterladen',
+    'GENERIC_LOCAL_UPLOAD' => 'Lokales Archiv laden und wiederherstellen',
+    );
+
+$DROPLET_HEADER = array (
+    'INDEX' => 'Id',
+    'PATH' => 'Verzeichnis',
+    'FILENAME' => 'Dropletname',
+    'DESCRIPTION' => 'Beschreibung',
+    'SIZE' => 'Größe',
+    'DATE' => 'Datum',
+    'RENAME_DROPLET' => 'Droplet umbenennen',
+    'SELECT_DROPLET' => 'Droplet auswählen',
+    );
+
+$DROPLET_SELECT_ORDER = array (
+    'CHOOSE_ORDER'=>'Droplets sortieren nach',
+    'ASC' => 'Aufsteigend',
+    'DESC'=> 'Absteigend',
+    );
+
+$DROPLET_SELECT_OPTION = array (
+        'ASC' => 'Aufsteigend', array(
+        '1' => 'Dropletname',
+        '2' => 'Zuletzt bearbeitet'
+        ),
+        'DESC' => 'Absteigend', array(
+        '4' => 'Dropletname',
+        '8' => 'Zuletzt bearbeitet'
+        )
+    );
+
+$DROPLET_HELP = array (
+    'DROPLET_DELETE' => 'Löschen von Droplets. Klick löscht das entsprechende Droplet in der ausgewählten Zeile. Durch Auswahl lassen sich auch mehrere Droplets auf einmal löschen. ',
+    'DROPLET_RENAME' => 'Sie können jetzt das Droplet umbenennen. ',
+    'DROPLET_RENAME_ADD' => 'Geben Sie jetzt einen neuen Dropletnamen ein. ',
+);
+
+$DROPLET_IMPORT = array (
+      'ARCHIV_LOADED' => 'Archivdatei erfolgreich geladen! Wählen Sie ein odere mehrere Droplets zur Wiederherstellung aus.',
+      'ARCHIV_IMPORTED' => 'Ausgewählte Droplets in Datenbank importiert! ',
+      'UPATE_EXISTING_DROPLETS' => 'Sollen bestehende Droplets überschrieben werden?',
+      );

Property changes on: trunk/modules/droplets/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/languages/EN.php
===================================================================
--- trunk/modules/droplets/languages/EN.php	(nonexistent)
+++ trunk/modules/droplets/languages/EN.php	(revision 2)
@@ -0,0 +1,112 @@
+<?php
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+// english module description
+$module_description     = 'Droplets are small chunks of php code (just like the code module) that can be included in your template or any other content section. Including a droplet is done by encapsulating the droplet name in double brackets.';
+// headers and text
+$DR_TEXT['ADD_DROPLET']   = 'Add a Droplet';
+$DR_TEXT['ADMIN_EDIT']    = 'Edit a Droplet';
+$DR_TEXT['ADMIN_VIEW']    = 'View';
+$DR_TEXT['ARCHIV_LOAD']   = 'Load an Archive file';
+$DR_TEXT['ACTION']        = 'Droplets '.PHP_EOL.'rename'.PHP_EOL.''.'enabled/disabled'.PHP_EOL.'delete';
+$DR_TEXT['BACKUP']        = 'Backup Droplets (Zip)';
+$DR_TEXT['COPY']          = 'Copy a Droplet';
+$DR_TEXT['DELETE']        = 'Delete a Droplet';
+$DR_TEXT['DROPLET']       = 'Droplet';
+$DR_TEXT['DROPLETS']      = 'Droplets';
+$DR_TEXT['DROPLETS_DELETED'] = 'Droplets deleted successfully.';
+$DR_TEXT['HELP']          = 'Help';
+$DR_TEXT['IMPORT']        = 'Import selected Droplet';
+$DR_TEXT['INVALIDCODE']   = 'This Droplet has invalid PHP code';
+$DR_TEXT['INVALID_BACK']  = 'Invalid choice. Back to the overview';
+$DR_TEXT['MODIFIED_WHEN'] = 'Modified';
+$DR_TEXT['MODIFY']        = 'Edit';
+$DR_TEXT['RESTORE']       = 'Droplets restored';
+$DR_TEXT['README']        = 'readme.html';
+$DR_TEXT['SHOW']          = 'Overview';
+$DR_TEXT['SAVE']          = 'Save';
+$DR_TEXT['NOTUNIQUE']     = 'This droplet name is used!';
+$DR_TEXT['WYSIWYG']       = 'Wysiwyg';
+$DR_TEXT['UPLOAD']        = 'Upload';
+$DR_TEXT['USED']          = 'This droplet is used on the following page(-s):<br />';
+$DR_TEXT['PLEASE_SELECT'] = 'Please select an Archive file';
+$DR_TEXT['VALID_CODE']    = 'Code valide';
+$DR_TEXT['INVALID_CODE']  = 'Code not valide';
+$DR_TEXT['COPY_DROPLET']  = 'Duplicate';
+$DR_TEXT['INACTIVE']      = 'Disabled';
+$TEXT['INACTIVE']         = 'Disabled';
+$TEXT['ACTIVE']           = 'Enabled';
+
+$DROPLET_MESSAGE = array (
+    'ARCHIVE_DELETED' => 'Zip(s) deleted successfully.',
+    'ARCHIVE_NOT_DELETED' => 'Cannot delete the selected Zip(s).',
+    'CONFIRM_DROPLET_DELETING' => 'Are you sure you want to delete the selected droplets?',
+    'DELETED' => 'Droplets deleted successfully.',
+    'DELETE_DROPLETS' => 'Delete a Droplet',
+    'MISSING_UNMARKED_ARCHIVE_FILES' => 'No Droplet-File selected to import.',
+    'GENERIC_MISSING_ARCHIVE_FILE' => 'No Zip-File selected to delete!',
+    'GENERIC_MISSING_TITLE' => 'Insert a Droplet name.',
+    'GENERIC_LOCAL_DOWNLOAD' => 'Download Zip',
+    'GENERIC_LOCAL_UPLOAD' => 'Load and restore a locale Zip',
+);
+
+$DROPLET_HEADER = array (
+    'INDEX' => 'Id',
+    'PATH' => 'Folder',
+    'FILENAME' => 'Dropletname',
+    'DESCRIPTION' => 'Description',
+    'SIZE' => 'Size',
+    'DATE' => 'Date',
+    'RENAME_DROPLET' => 'Rename Droplet',
+    'SELECT_DROPLET' => 'Select a Zip',
+    );
+
+$DROPLET_SELECT_ORDER = array (
+    'CHOOSE_ORDER'=>'Select Droplet Sorting Order',
+    'ASC' => 'Ascending',
+    'DESC'=> 'Descending',
+    );
+
+$DROPLET_SELECT_OPTION = array (
+        'ASC' => 'Ascending', array(
+        '1' => 'Dropletname',
+        '2' => 'Modified Whem',
+        ),
+        'DESC' => 'Ascending', array(
+        '4' => 'Dropletname',
+        '8' => 'Modified Whem',
+        )
+    );
+
+$DROPLET_HELP = array (
+    'DROPLET_DELETE' => 'Delete a Droplet. Click to delete the selected droplet in this row. Durch Auswahl lassen sich auch mehrere Droplets auf einmal löschen. ',
+    'DROPLET_RENAME' => 'Now you can rename the Droplet',
+    'DROPLET_RENAME_ADD' => 'Input your new Dropletname',
+);
+
+$DROPLET_IMPORT = array (
+      'ARCHIV_LOADED' => 'Zip loaded successfully! Choose one or more droplets to restore.',
+      'ARCHIV_IMPORTED' => 'Selected droplets import into the database ! ',
+      'UPATE_EXISTING_DROPLETS' => 'Overwrite existing droplets?',
+      );

Property changes on: trunk/modules/droplets/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/css/backend.css
===================================================================
--- trunk/modules/droplets/templates/default/css/backend.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/backend.css	(revision 2)
@@ -0,0 +1,101 @@
+@import url(dialogBox.css);
+@import url(fileupload.css);
+div.droplets { width: 100%; margin: auto; padding: 1.225em; padding-bottom: 2.525em; }
+div.droplets table { border-collapse: collapse; width: 100%; }
+.droplets ul, .droplets li { list-style: none; margin: 0; padding: 0; }
+.droplets .setting_name { vertical-align: top; }
+.droplets .newsection { border-top: 1px dashed #FFFFFF; }
+div.droplets table.droplets_data thead tr { font-weight: bold; font-size: 1.2525em; height: 3.225em; padding: 0.525em 0; background: #A0A0A0; }
+div.droplets table.droplets_data tbody tr { line-height: 1.225em; background: #CCD5DD; }
+div.droplets table.droplets_data tbody td { padding: 0.2525em 0; font-weight: normal; }
+div.droplets table.droplets_data tbody td:nth-child(5) { font-weight: normal; }
+
+div.droplets table.droplets_data thead th.sortierbar { vertical-align: middle; cursor: pointer; }
+div.droplets table.droplets_data thead th:first-child,
+div.droplets table.droplets_data tbody td:first-child { padding: 0 0.2525em; text-align: center; }
+div.droplets table.droplets_data tbody td:nth-child(2) { text-align: center; }
+div.droplets table.droplets_data tbody td:nth-child(3) { padding-bottom: 0.3525em; }
+div.droplets table.droplets_data tbody td:last-child { padding: 0 0.4525em; text-align: center; }
+div.droplets table.droplets_data tbody td div { margin: 0.4525em auto; padding: 0.3525em 0; height: 1.625em; }
+div.droplets table.droplets_data tbody tr:nth-child(odd) { background: #FFFFFF; }
+div.droplets table.droplets_data tbody tr:hover { background: #E1F8B3; cursor: default; }
+
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.65+100 */
+div.droplets table.droplets_data thead tr ,
+div.droplets table.droplets_import thead tr { font-weight: bold; font-size: 1.2525em; height: 2.225em; padding: 0.525em 0; background: #C1C0C0; 
+background: -moz-linear-gradient(top, rgba(96,96,96,0) 0%, rgba(0,0,0,0.51) 100%); /* FF3.6-15 */
+background: -webkit-linear-gradient(top, rgba(96,96,96,0) 0%,rgba(0,0,0,0.51) 100%); /* Chrome10-25,Safari5.1-6 */
+background: linear-gradient(to bottom, rgba(96,96,96,0) 0%,rgba(0,0,0,0.51) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00606060', endColorstr='#82000000',GradientType=0 ); /* IE6-9 */}
+div.droplets table.droplets_import tbody tr { line-height: 1.625em; background: #DDD6CE; }
+div.droplets table.droplets_import tbody td { padding: 0.2525em 0; font-weight: bold; }
+div.droplets table.droplets_import tbody td:nth-child(5) { font-weight: normal; }
+div.droplets table.droplets_import thead th { vertical-align: middle; }
+div.droplets table.droplets_import thead th:first-child,
+div.droplets table.droplets_import tbody td:first-child { padding: 0 0.2525em; text-align: center; }
+div.droplets table.droplets_import tbody td:nth-child(2) { text-align: center; }
+div.droplets table.droplets_import tbody td:nth-child(3) { padding-bottom: 0.3525em; }
+div.droplets table.droplets_import tbody td:last-child { padding: 0 0.4525em; text-align: center; font-weight: normal; }
+div.droplets table.droplets_import tbody td div { margin: 0.4525em auto; padding: 0.3525em 0; height: 1.625em; }
+div.droplets table.droplets_import tbody tr:nth-child(odd) { background: #FFFFFF; }
+div.droplets table.droplets_import tbody tr:hover { background: #E1F8B3; cursor: default; }
+
+div.droplets img { vertical-align: middle; }
+
+div.droplets .noButton { color: #434343; border: none; background: transparent; width: 100%; text-align: left; font-weight: bold; cursor: pointer; }
+section.droplets.drop-outer { padding: 1px; border: 1px solid #DEE5F8; border-radius: 5px; margin: 0.925em auto; box-shadow: 1px 1px 5px #666666; }
+section.droplets .button:hover { color: #000000; }
+header.droplets { margin: 1.1525em 0; }
+
+div.drop-backup .btn,
+div.droplets .btn { color: #003366; -moz-user-select: none; border: 1px solid #AAAAAA; border-radius: 4px; display: inline-block; font-size: 1.0925em; font-weight: normal; margin-bottom: 2px; padding: 0.455em 1.125em; text-align: center; vertical-align: middle; white-space: nowrap; background: #E1E1E1 none; }
+div.drop-backup .btn { font-size: 0.8925em; font-weight: bold; margin-left: 0.525em; }
+div.drop-backup .btn:hover,
+div.droplets .btn:hover { cursor: pointer; border: 1px solid #5D819F; -webkit-box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); -moz-box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); background: #FFFFFF; }
+.drop-backup { margin: 1.8525em 0.925em; }
+div.drop-backup button.btn { padding: 0.165em 1.125em; }
+
+div.droplet-import,
+div.droplet-import div { padding-top: 0.125em; }
+div.droplet-import span,
+div.droplet-import div span { font-weight: normal; font-size: 1.025em; }
+div.droplet-import span select,
+div.droplet-import div span input { line-height: 1.525em; padding: 0.125em; }
+div.droplets div.success { font-size: 1.525em; color: #3D6F8A; text-align: left; }
+div.droplets h2 { font-size: 1.825em; color: #3D6F8A; }
+div.droplets h4 {
+  border-bottom: 0px solid #dddddd;
+  margin: 0;
+  padding-bottom: 5px;
+  color: #3D6F8A;
+}
+.fileUpload { position: relative; overflow: hidden; margin: 10px; }
+.fileUpload input.upload-file { position: absolute; top: 0; right: 0; margin: 0; padding: 0; font-size: 20px; cursor: default; opacity: 0; filter: alpha(opacity=0); }
+
+.droplets button span.tooltip { display: none; }
+.droplets button:hover span.tooltip { position: absolute; display: block; top: 1.5em; left: 2em; border: 1px solid black; background-color:#D9D093; padding: 0.2em; }
+/* */ 
+input.upload-file {border: medium none; cursor: pointer; margin: 0; opacity: 1; padding: 0.525em; right: 0; top: 0;}
+
+select.selectOrder { 
+width: 35%; 
+height: 2.125em; 
+border-radius: 0.225em; 
+font-size: 1.225em;
+font-weight: bold; 
+text-overflow: ellipsis;
+border: 1px solid #15697B;
+color: #28659A;
+background-color: #fff;
+}
+select.selectOrder optgroup { 
+color: #F00101;
+font-weight: bold;
+}
+select.selectOrder optgroup option { 
+color: #000;
+background-color: #fff;
+font-weight: bold;
+font-size: 0.925em;
+padding: 0.225em 1.825em;
+}
Index: trunk/modules/droplets/templates/default/css/component.css
===================================================================
--- trunk/modules/droplets/templates/default/css/component.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/component.css	(revision 2)
@@ -0,0 +1,283 @@
+@font-face {
+    font-weight: normal;
+    font-style: normal;
+    font-family: 'codropsicons';
+    src: url('../fonts/codropsicons/codropsicons.eot');
+    src: url('../fonts/codropsicons/codropsicons.eot?#iefix') format('embedded-opentype'), url('../fonts/codropsicons/codropsicons.woff') format('woff'), url('../fonts/codropsicons/codropsicons.ttf') format('truetype'), url('../fonts/codropsicons/codropsicons.svg#codropsicons') format('svg');
+}
+
+*,
+*:after,
+*:before {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.clearfix:before,
+.clearfix:after {
+    display: table;
+    content: '';
+}
+
+.clearfix:after {
+    clear: both;
+}
+
+.inputfile {
+    width: 0.1px;
+    height: 0.1px;
+    opacity: 0;
+    overflow: hidden;
+    position: absolute;
+    z-index: -1;
+}
+
+.input-file {
+opacity: 1;
+overflow: hidden;
+height: 2.625em;
+right: 11.225em;
+margin-top: -2.825em;
+}
+
+.js .inputfile {
+width: 0.1px;
+height: 0.1px;
+opacity: 0;
+overflow: hidden;
+position: absolute;
+z-index: -1;
+}
+
+.inputfile + label {
+max-width: 80%;
+font-size: 1.25rem;
+/* 20px */
+font-weight: 700;
+text-overflow: ellipsis;
+white-space: nowrap;
+cursor: pointer;
+display: inline-block;
+overflow: hidden;
+padding: 0.625rem 1.25rem;
+/* 10px 20px */
+}
+
+.no-js .inputfile + label {
+display: none;
+}
+
+.inputfile:focus + label,
+.inputfile.has-focus + label {
+outline: 1px dotted #000;
+outline: -webkit-focus-ring-color auto 5px;
+}
+
+.inputfile + label * {
+/* pointer-events: none; */
+/* in case of FastClick lib use */
+}
+
+.inputfile + label svg {
+width: 1em;
+height: 1em;
+vertical-align: middle;
+fill: currentColor;
+margin-top: -0.25em;
+/* 4px */
+margin-right: 0.25em;
+/* 4px */
+}
+
+
+/* style 1 */
+
+.inputfile-1 + label {
+color: #f1e5e6;
+background-color: #d3394c;
+}
+
+.inputfile-1:focus + label,
+.inputfile-1.has-focus + label,
+.inputfile-1 + label:hover {
+background-color: #722040;
+}
+
+
+/* style 2 */
+
+.inputfile-2 + label {
+color: #d3394c;
+border: 2px solid currentColor;
+}
+
+.inputfile-2:focus + label,
+.inputfile-2.has-focus + label,
+.inputfile-2 + label:hover {
+color: #722040;
+}
+
+
+/* style 3 */
+
+.inputfile-3 + label {
+color: #d3394c;
+}
+
+.inputfile-3:focus + label,
+.inputfile-3.has-focus + label,
+.inputfile-3 + label:hover {
+color: #722040;
+}
+
+
+/* style 4 */
+
+.inputfile-4 + label {
+color: #d3394c;
+}
+
+.inputfile-4:focus + label,
+.inputfile-4.has-focus + label,
+.inputfile-4 + label:hover {
+color: #722040;
+}
+
+.inputfile-4 + label figure {
+width: 100px;
+height: 100px;
+border-radius: 50%;
+background-color: #d3394c;
+display: block;
+padding: 20px;
+margin: 0 auto 10px;
+}
+
+.inputfile-4:focus + label figure,
+.inputfile-4.has-focus + label figure,
+.inputfile-4 + label:hover figure {
+background-color: #722040;
+}
+
+.inputfile-4 + label svg {
+width: 100%;
+height: 100%;
+fill: #f1e5e6;
+}
+
+
+/* style 5 */
+
+.inputfile-5 + label {
+color: #d3394c;
+}
+
+.inputfile-5:focus + label,
+.inputfile-5.has-focus + label,
+.inputfile-5 + label:hover {
+color: #722040;
+}
+
+.inputfile-5 + label figure {
+width: 100px;
+height: 135px;
+background-color: #d3394c;
+display: block;
+position: relative;
+padding: 30px;
+margin: 0 auto 10px;
+}
+
+.inputfile-5:focus + label figure,
+.inputfile-5.has-focus + label figure,
+.inputfile-5 + label:hover figure {
+background-color: #722040;
+}
+
+.inputfile-5 + label figure::before,
+.inputfile-5 + label figure::after {
+width: 0;
+height: 0;
+content: '';
+position: absolute;
+top: 0;
+right: 0;
+}
+
+.inputfile-5 + label figure::before {
+border-top: 20px solid #dfc8ca;
+border-left: 20px solid transparent;
+}
+
+.inputfile-5 + label figure::after {
+border-bottom: 20px solid #722040;
+border-right: 20px solid transparent;
+}
+
+.inputfile-5:focus + label figure::after,
+.inputfile-5.has-focus + label figure::after,
+.inputfile-5 + label:hover figure::after {
+border-bottom-color: #d3394c;
+}
+
+.inputfile-5 + label svg {
+width: 100%;
+height: 100%;
+fill: #f1e5e6;
+}
+
+
+/* style 6 */
+
+.inputfile-6 + label {
+color: #d3394c;
+}
+
+.inputfile-6 + label {
+border: 1px solid #d3394c;
+background-color: #f1e5e6;
+padding: 0;
+}
+
+.inputfile-6:focus + label,
+.inputfile-6.has-focus + label,
+.inputfile-6 + label:hover {
+border-color: #722040;
+}
+
+.inputfile-6 + label span,
+.inputfile-6 + label strong {
+padding: 0.625rem 1.25rem;
+font-weight: normal;
+font-size: 0.925em;
+/* 10px 20px */
+}
+
+.inputfile-6 + label span {
+width: 200px;
+min-height: 2em;
+display: inline-block;
+text-overflow: ellipsis;
+white-space: nowrap;
+overflow: hidden;
+vertical-align: top;
+}
+
+.inputfile-6 + label strong {
+height: 100%;
+color: #f1e5e6;
+background-color: #d3394c;
+display: inline-block;
+}
+
+.inputfile-6:focus + label strong,
+.inputfile-6.has-focus + label strong,
+.inputfile-6 + label:hover strong {
+background-color: #722040;
+}
+
+@media screen and (max-width: 50em) {
+.inputfile-6 + label strong {
+display: block;
+}
+}
Index: trunk/modules/droplets/templates/default/css/customAlert.css
===================================================================
--- trunk/modules/droplets/templates/default/css/customAlert.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/customAlert.css	(revision 2)
@@ -0,0 +1,73 @@
+/**
+ * customAlert
+ * Author: Philippe Assis
+ * Doc and repo: https://github.com/PhilippeAssis/custom-alert
+ *
+ * Alert e confirm personalizados.
+ * FF, Chromer, IE(>=9)
+ *
+ *                              ATENÇÂO
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes,
+ * a não ser que você saiba o que esta fazendo.
+ */
+#customAlert-overlay, 
+#customConfirm-overlay { display: none; opacity: 0.5; position: fixed; top: 0px; left: 0px; width: 100vw; height: 100vh; z-index: 99999; background: #000000; }
+#customAlert { background: #FFFFFF; }
+#customAlert button { color: #5E5E5E; background: #BABABA; }
+#customAlert button:hover { color: #E6E6E6; background: #666666; }
+#customConfirm { background: #FFFFFF; }
+#droplets-delete.modal-Dialog { background: rgba(0, 0, 0, 0.4) none repeat scroll 0 0; bottom: 0; left: 0; opacity: 1.0; /*pointer-events: none;*/ position: fixed; right: 0; top: 0; }
+
+#customConfirm button.cancel,
+#customConfirm button.confirm { font-weight: bold; }
+
+#customConfirm button.confirm { margin-right: 10px; color: #204625; background: #68BB74; }
+#customConfirm button.confirm:hover { color: #DCEFDF; background: #3F8D4B; }
+#customConfirm button.cancel { color: #F8D8D3; background: #E2614B; }
+#customConfirm button.cancel:hover { color: #F8D8D3; background: #B0321C; }
+
+#customAlert,
+#customConfirm { border-radius: 5px; width: 40%; font-size: 1.125em; /*display: none;*/ position: fixed; max-width: 100vw; max-height: 100vh; /*z-index: 1000;*/ top: 5%; left: 50%; padding: 0.125em; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-transition: opacity 400ms ease-in 0s; -moz-transition: opacity 400ms ease-in 0s; transition: opacity 400ms ease-in 0s; margin-left: -275px; }
+
+#customAlert header,
+#customConfirm header { color: #3E6D86; text-align: left; font-size: 1.125em; font-weight: bold; background: rgba(0, 0, 0, 0) linear-gradient(#fff, #999) repeat scroll 0 0; height: 1.925em; }
+
+#customAlert .body,
+#customConfirm .body { padding: 0; color: #5C5C5C; font-size: 1.125em; background: #FFFFFF; text-align: center; opacity: 1; }
+#customConfirm .body p { font-weight: bold; color: #F00606; }
+
+#customAlert .footer,
+#customConfirm .footer { background: #FFFFFF; text-align: center; margin-bottom: 0.925em; }
+#customAlert button,
+#customConfirm button { width: 100px; margin-top: 5px; margin-bottom: 5px; padding: 5px; font-size: 0.9em; word-wrap: break-word; border: none; }
+#customAlert button:hover,
+#customConfirm button:hover { cursor: pointer; }
+
+#customAlert button.close,
+#customConfirm button.close {
+  background: #215a7a none repeat scroll 0 0;
+  border-radius: 1.925em;
+  box-shadow: 1px 1px 3px #000000;
+  color: #ffffff !important;
+  font-size: 1.225em;
+  font-weight: bold;
+  line-height: 2.025em;
+  position: absolute;
+  right: -12px;
+  text-align: center;
+  text-decoration: none;
+  top: -10px;
+  width: 3.025em;
+}
+#customAlert button.close:hover,
+#customConfirm button.close:hover { background: #FE0606 none repeat scroll 0 0; }
+
+
+@media (min-width: 321px) {
+    #customAlert,
+    #customConfirm { top: 25%; }
+}
+@media (max-width: 550px) {
+    #customAlert,
+    #customConfirm { margin-left: -50vw; }
+}
Index: trunk/modules/droplets/templates/default/css/dialogBox.css
===================================================================
--- trunk/modules/droplets/templates/default/css/dialogBox.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/dialogBox.css	(revision 2)
@@ -0,0 +1,14 @@
+/*ADDED TO STOP SCROLLING TO TOP*/
+#close { display: none; }
+.modalDialog { position: fixed; font-family: Arial, Helvetica, sans-serif; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.6); z-index: 99999; opacity: 0; -webkit-transition: opacity 400ms ease-in; -moz-transition: opacity 400ms ease-in; transition: opacity 400ms ease-in; pointer-events: none; }
+.modalDialog:target { opacity: 1; pointer-events: auto; }
+.modalDialog > div { width: 60.525em; position: relative; margin: 10% auto; border-radius: 10px; background: -moz-linear-gradient(#fff, #999); background: -webkit-linear-gradient(#fff, #999); background: -o-linear-gradient(#fff, #999); background: #FFFFFF; }
+.close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 3.025em; position: absolute; right: -12px; text-align: center; top: -10px; width: 3.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.close:hover { background: #FF1100; }
+.modalDialog form, 
+.modalDialog iframe { width: 50.225em; height: 25.525em; border: none; }
+footer.modal-label, header.modal-label { background: -moz-linear-gradient(#fff, #999); /*height: 3.525em;*/ padding: 0 0.525em 0.525em; }
+footer.modal-label { padding: 1.525em 0; }
+div.modal-inner { padding: 0.825em 1.525em; margin: 3.925em auto; }
+[draggable=true] { -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; user-select: none; /* Required to make elements draggable in old WebKit */ -khtml-user-drag: element; -webkit-user-drag: element; }
+[draggable=true] header { cursor: move; }
Index: trunk/modules/droplets/templates/default/css/fileupload.css
===================================================================
--- trunk/modules/droplets/templates/default/css/fileupload.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/fileupload.css	(revision 2)
@@ -0,0 +1,166 @@
+@font-face {
+    font-weight: normal;
+    font-style: normal;
+    font-family: 'codropsicons';
+    src: url('../fonts/codropsicons/codropsicons.eot');
+    src: url('../fonts/codropsicons/codropsicons.eot?#iefix') format('embedded-opentype'), url('../fonts/codropsicons/codropsicons.woff') format('woff'), url('../fonts/codropsicons/codropsicons.ttf') format('truetype'), url('../fonts/codropsicons/codropsicons.svg#codropsicons') format('svg');
+}
+
+*,
+*:after,
+*:before {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.clearfix:before,
+.clearfix:after {
+    display: table;
+    content: '';
+}
+
+.clearfix:after {
+    clear: both;
+}
+
+.inputfile {
+    width: 0.1px;
+    height: 0.1px;
+    opacity: 0;
+    overflow: hidden;
+    position: absolute;
+    z-index: -1;
+}
+
+.input-file {
+opacity: 1;
+overflow: hidden;
+height: 2.625em;
+right: 11.225em;
+margin-top: -2.825em;
+}
+
+.js .inputfile {
+width: 0.1px;
+height: 0.1px;
+opacity: 0;
+overflow: hidden;
+position: absolute;
+z-index: -1;
+}
+
+.inputfile + label {
+max-width: 80%;
+font-size: 1.125rem;
+text-overflow: ellipsis;
+white-space: nowrap;
+cursor: pointer;
+display: inline-block;
+overflow: hidden;
+padding: 0.625rem 1.25rem;
+/* 10px 20px */
+}
+
+.no-js .inputfile + label {
+display: none;
+}
+
+.inputfile:focus + label,
+.inputfile.has-focus + label {
+outline: 1px dotted #000;
+outline: -webkit-focus-ring-color auto 5px;
+}
+
+.inputfile + label * {
+/* pointer-events: none; */
+/* in case of FastClick lib use */
+}
+
+.inputfile + label svg {
+width: 1em;
+height: 1em;
+vertical-align: middle;
+fill: currentColor;
+margin-top: -0.25em;
+/* 4px */
+margin-right: 0.25em;
+/* 4px */
+}
+
+/* style 6 */
+
+.inputfile-6 + label {
+color: #d3394c;
+}
+
+.inputfile-6 + label {
+border: 1px solid #d3394c;
+background-color: #f1e5e6;
+height: 2.125em; 
+padding: 0;
+}
+
+.inputfile-6:focus + label,
+.inputfile-6.has-focus + label,
+.inputfile-6 + label:hover {
+border-color: #722040;
+}
+
+.inputfile-6 + label span,
+.inputfile-6 + label strong {
+padding: 0.425rem 0.25rem;
+font-weight: normal;
+font-size: 0.925em;
+/* 10px 20px */
+}
+
+.inputfile-6 + label span {
+width: 14.225em;
+min-height: 2.525em;
+display: inline-block;
+text-overflow: ellipsis;
+white-space: nowrap;
+overflow: hidden;
+vertical-align: top;
+border-radius: 0.125em;
+}
+
+.inputfile-6 + label strong {
+height: 100%;
+color: #f1e5e6;
+background-color: #d3394c;
+display: inline-block;
+}
+
+.inputfile-6:focus + label strong,
+.inputfile-6.has-focus + label strong,
+.inputfile-6 + label:hover strong {
+background-color: #722040;
+}
+
+div.file-select-box span select { 
+width: 35%; 
+height: 2.125em; 
+border-radius: 0.125em; 
+font-size: 1.225em;
+font-weight: bold; 
+text-overflow: ellipsis;
+border: 1px solid #d3394c;
+color: #d3394c;
+background-color: #f1e5e6;
+}
+div.file-select-box span select option{ 
+color: #000;
+background-color: #fff;
+font-weight: normal;
+font-size: 0.925em;
+}
+div.file-box { padding-top: 1.525em !important; white-space: nowrap;}
+div.file-box span button { margin: -1.925em auto; }
+
+@media screen and (max-width: 50em) {
+.inputfile-6 + label strong {
+display: block;
+}
+}
+
Index: trunk/modules/droplets/templates/default/css/tooltips.css
===================================================================
--- trunk/modules/droplets/templates/default/css/tooltips.css	(nonexistent)
+++ trunk/modules/droplets/templates/default/css/tooltips.css	(revision 2)
@@ -0,0 +1,115 @@
+.demo {
+	padding:2%;
+	border-radius:3px;
+	box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1), 0px 1px 3px rgba(0,0,0,0.1);
+	border:1px solid #acac9c;
+	background:#d7d8c8 url('body-bg.png');
+}
+
+.demo p + p {
+	margin:30px 0px 0px;
+}
+
+.demo p {
+	font-size:14px;
+}
+
+.demo a {
+	margin:5px 10px 0px 0px;
+	float:left;
+}
+
+	.demo .tooltip {
+		width:10px;
+		height:10px;
+		display:inline-block;
+		position:relative;
+		box-shadow:0px 0px 0px 2px #aaaa9e;
+		border-radius:1000px;
+		border:1px solid #fdfdfc;
+		background:#f2f3ee;
+	}
+
+	.demo .tooltip:hover .txt {
+		display:inline-block;
+	}
+
+		.demo .tooltip .txt {
+			width:200px;
+			padding:10px 15px;
+			display:none;
+			position:absolute;
+			z-index:1000;
+			border-radius:3px;
+			background:rgba(0,0,0,0.75);
+			font-size:12px;
+			font-weight:normal;
+			text-shadow:-1px 1px 0px rgba(0,0,0,0.2);
+			line-height:150%;
+			color:#fff;
+		}
+
+		.demo .tooltip .txt:before {
+			width:0px;
+			padding:0px;
+			position:absolute;
+			content:'';
+		}
+
+		/* Top */
+		.demo .tooltip.top .txt {
+			bottom:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.top .txt:before {
+			bottom:-5px;
+			left:10px;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-top:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Right */
+		.demo .tooltip.right .txt {
+			top:-10px;
+			left:20px;
+		}
+
+		.demo .tooltip.right .txt:before {
+			top:10px;
+			left:-5px;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-right:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Bottom */
+		.demo .tooltip.bottom .txt {
+			top:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.bottom .txt:before {
+			top:-5px;
+			left:10px;
+			bottom:auto;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-bottom:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Left */
+		.demo .tooltip.left .txt {
+			top:-10px;
+			right:20px;
+		}
+
+		.demo .tooltip.left .txt:before {
+			top:10px;
+			right:-5px;
+			bottom:auto;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-left:5px solid rgba(0,0,0,0.75); 
+		}
Index: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.eot
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.eot
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.svg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/svg

Property changes on: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.svg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/svg
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/templates/default/fonts/codropsicons/codropsicons.woff
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/fonts/codropsicons/license.txt
===================================================================
--- trunk/modules/droplets/templates/default/fonts/codropsicons/license.txt	(nonexistent)
+++ trunk/modules/droplets/templates/default/fonts/codropsicons/license.txt	(revision 2)
@@ -0,0 +1,6 @@
+Icon Set:	Font Awesome -- http://fortawesome.github.com/Font-Awesome/
+License:	SIL -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
+
+
+Icon Set:	Eco Ico -- http://dribbble.com/shots/665585-Eco-Ico
+License:	CC0 -- http://creativecommons.org/publicdomain/zero/1.0/
\ No newline at end of file
Index: trunk/modules/droplets/templates/default/img/empty.txt
===================================================================
--- trunk/modules/droplets/templates/default/img/empty.txt	(nonexistent)
+++ trunk/modules/droplets/templates/default/img/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/droplets/templates/default/js/TableSort.js
===================================================================
--- trunk/modules/droplets/templates/default/js/TableSort.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/TableSort.js	(revision 2)
@@ -0,0 +1,275 @@
+// TableSort 8.20
+// Jrgen Berkemeier, 16. 11. 2015
+// www.j-berkemeier.de
+
+( function() {
+
+    "use strict";
+
+    var JB_Table = function(tab) {
+    
+        var up = String.fromCharCode(9650);
+        var down = String.fromCharCode(9660);
+        // var up = String.fromCharCode(8593);
+        // var down = String.fromCharCode(8595);
+        // var up = String.fromCharCode(11014);
+        // var down = String.fromCharCode(11015);
+        var no = String.fromCharCode(160,160,160,160); // Idee: 9674 ???
+        var dieses = this;
+        var defsort = 0;
+        var startsort_u = -1,startsort_d = -1;
+        var first = true;
+        var ssort;
+        var tbdy = tab.getElementsByTagName("tbody")[0];
+        var tz = tbdy.rows;
+        var nzeilen = tz.length;
+        if (nzeilen==0) return;
+        var nspalten = tz[0].cells.length;
+        var Titel = tab.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
+console.info(Titel);
+        var Arr = new Array(nzeilen);
+        var ct = 0;
+        var sdir = new Array(nspalten);
+        var stype = new Array(nspalten); 
+        var sortable = new Array(nspalten); 
+        for(var i=0;i<nspalten;i++) { 
+            stype[i] = "n";
+            sdir[i] = "u";
+            sortable[i] = false;
+        }
+
+        var initTableHead = function(t,nr) {
+            t.style.cursor = "pointer";
+            t.onclick = function() { dieses.sort(nr); };
+            sortsymbol.init(t,no);
+//            t.title = 'Die Tabelle nach "'+elementText(t)+'" sortieren.';
+//            t.title = '';
+            if(t.className.indexOf("vorsortiert-")>-1) {
+                sortsymbol.set(t,down);
+                ssort = nr;
+            }
+            else if(t.className.indexOf("vorsortiert")>-1) {
+                sortsymbol.set(t,up);
+                ssort = nr;
+            }
+            if(t.className.indexOf("sortiere-")>-1) startsort_d=nr;
+            else if(t.className.indexOf("sortiere")>-1) startsort_u=nr;
+            sortable[nr] = true;
+        } // initTableHead
+
+        var sortsymbol = {
+            init: function(t,s) {
+                var sp = t.getElementsByTagName("span");
+                for(var i=0;i<sp.length;i++) {
+                    if(!sp[i].hasChildNodes()) {
+                        t.sym = sp[i].appendChild(document.createTextNode(s));
+                        break;
+                    }
+                }
+                if(typeof(t.sym)=="undefined") t.sym = t.appendChild(document.createTextNode(s));
+            },
+            set: function(t,s) {
+                t.sym.data = s;
+            },
+            get: function(t) {
+                return t.sym.data;
+            }
+        } // sortsymbol
+
+        var VglFkt_s = function(a,b) {
+            var as = a[ssort], bs = b[ssort];
+            var ret=(as>bs)?1:(as<bs)?-1:0;
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { as = a[defsort]; bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort])
+            }
+            return ret;
+        } // VglFkt_s
+
+        var VglFkt_n = function(a,b) {
+            var ret = parseFloat(a[ssort])-parseFloat(b[ssort]);
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { var as = a[defsort],bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort]);
+            }
+            return ret;
+        } // VglFkt_n
+
+        var convert = function(val,s) {
+            var dmy;
+            var trmdat = function() {
+                if(dmy[0]<10) dmy[0] = "0" + dmy[0];
+                if(dmy[1]<10) dmy[1] = "0" + dmy[1];
+                if(dmy[2]<10) dmy[2] = "200" + dmy[2];
+                else if(dmy[2]<20) dmy[2] = "20" + dmy[2];
+                else if(dmy[2]<99) dmy[2] = "19" + dmy[2];
+                else if(dmy[2]>9999) dmy[2] = "9999";
+            }
+            if(val.length==0) val = "0";
+            if(!isNaN(val) && val.search(/[0-9]/)!=-1) return val;
+            var n = val.replace(",",".");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            n = n.replace(/\s|&nbsp;|&#160;|\u00A0/g,"");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                dmy[5] = val.substring(dp+4,dp+6);
+                for(var i=0;i<6;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<6;i++) if(dmy[i]<10) dmy[i] = "0" + dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]+dmy[5]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                for(var i=0;i<5;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<5;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<3;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]+"."+dmy[2]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<2;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<2;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+/)) {
+                dmy = val.split(".");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                return (""+dmy[2]+dmy[1]+dmy[0]).replace(/ /g,"");
+            }
+            stype[s] = "s";
+            return val.toLowerCase().replace(/\u00e4/g,"ae").replace(/\u00f6/g,"oe").replace(/\u00fc/g,"ue").replace(/\u00df/g,"ss");
+        } // convert
+        
+        var elementText;
+        if(document.body.textContent) 
+            elementText = function(elem) {
+                return elem.textContent;
+            }
+        else
+            elementText = function(elem) {
+                var eT = function(ele) {
+                    var uele = ele.firstChild;
+                    while(uele) {
+                        if(uele.hasChildNodes()) eT(uele);
+                        if(uele.nodeType == 1) {
+                            // if(child.tagName=='INPUT'||child.tagName=='BUTTON')txt+=child.value; //Idee
+                            Text += " ";
+                        }
+                        else if(uele.nodeType == 3) Text += uele.data;
+                        uele = uele.nextSibling;
+                    }
+                }
+                var Text = "";
+                eT(elem);
+                return Text.replace(/\s+/g," ");
+            } // elementText
+
+        this.sort = function(sp) {
+            if(sp<0 || sp>=nspalten) return;
+            if(!sortable[sp]) return;
+            if (first) {
+                for(var z=0;z<nzeilen;z++) {
+                    var zelle = tz[z].getElementsByTagName("td"); // cells;
+                    Arr[z] = new Array(nspalten+1);
+                    Arr[z][nspalten] = tz[z];
+                    for(var s=0;s<nspalten;s++) {
+                        if (zelle[s].getAttribute("data-sort_key")) 
+                            var zi = convert(zelle[s].getAttribute("data-sort_key"),s);
+                        else if (zelle[s].getAttribute("sort_key")) 
+                            var zi = convert(zelle[s].getAttribute("sort_key"),s);
+                        else 
+                            var zi = convert(elementText(zelle[s]),s);
+                        Arr[z][s] = zi ;
+                        // zelle[s].innerHTML += "<br>"+zi; // zum Debuggen
+                    }
+                }
+                first = false;
+            }
+            if(sp==ssort) {
+                Arr.reverse() ;
+                if ( sortsymbol.get(Titel[ssort])==down )
+                    sortsymbol.set(Titel[ssort],up);
+                else
+                    sortsymbol.set(Titel[ssort],down);
+            }
+            else {
+                if ( ssort>=0 && ssort<nspalten ) sortsymbol.set(Titel[ssort],no);
+                    ssort = sp;
+                if(stype[ssort]=="s") Arr.sort(VglFkt_s);
+                else                  Arr.sort(VglFkt_n);
+                if(sdir[ssort]=="u") {
+                    sortsymbol.set(Titel[ssort],up);
+                }
+                else {
+                    Arr.reverse() ;
+                    sortsymbol.set(Titel[ssort],down);
+                }
+            }
+            for(var z=0;z<nzeilen;z++)
+                tbdy.appendChild(Arr[z][nspalten]);
+            if(typeof(JB_aftersort)=="function") JB_aftersort(tab,tbdy,tz,nzeilen,nspalten,ssort);
+        } // sort
+
+//        if(!tab.title.length) tab.title="Ein Klick auf die Spalten\u00fcberschrift sortiert die Tabelle.";
+console.info(tab);
+        if(!tab.title.length) tab.title="";
+        for(var i=Titel.length-1;i>-1;i--) {
+            var t=Titel[i];
+            if(t.className.indexOf("sortier")>-1) {
+                ct++;
+                initTableHead(t,i);
+                defsort = i ;
+                if(t.className.indexOf("sortierbar-")>-1) sdir[i] = "d";
+            }
+    }
+        if(ct==0) {
+            for(var i=0;i<Titel.length;i++) 
+                initTableHead(Titel[i],i);
+            defsort = 0;
+        }
+        if(startsort_u>=0) this.sort(startsort_u);
+        if(startsort_d>=0) { this.sort(startsort_d); this.sort(startsort_d); }
+        if(typeof(JB_aftersortinit)=="function") JB_aftersortinit(tab,tbdy,tz,nzeilen,nspalten,-1);
+
+    } // JB_Table
+
+    var JB_initTableSort = function() {
+        if (!document.querySelectorAll) return;
+        var Sort_Table = document.querySelectorAll("table.sortierbar");
+        var JB_Tables = [];
+        for(var i=0;i<Sort_Table.length;i++) JB_Tables[i] = new JB_Table(Sort_Table[i]);
+
+        var pars = decodeURI(window.location.search.substring(1));
+        if(pars.length) { // jbts=((0,1),(10,0),(3,3),(2,2))   tnr,snr
+            pars = pars.replace(/\s/g,"");
+            pars = pars.match(/jbts=\(?(\(\d+,\d+\),?){1,}\)?/gi); 
+            if(pars) {
+                pars = pars[0].substr(pars[0].search("=")+1); 
+                pars = pars.replace(/\(\(/g,"(").replace(/\)\)/g,")").replace(/\)\(/g,")|(").replace(/\),\(/g,")|("); 
+                pars = pars.split("|");
+                for(var i=0;i<pars.length;i++) {
+                    var p = pars[i].substring(1,pars[i].length-1).split(","); 
+                    if(p[0]>-1&&p[0]<JB_Tables.length) JB_Tables[p[0]].sort(p[1]);
+                }
+            }
+        } 
+    } // initTableSort
+
+    if(window.addEventListener) window.addEventListener("DOMContentLoaded",JB_initTableSort,false);
+    else if(window.attachEvent) window.attachEvent("onload",JB_initTableSort); 
+
+})();
Index: trunk/modules/droplets/templates/default/js/custom-file-input.js
===================================================================
--- trunk/modules/droplets/templates/default/js/custom-file-input.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/custom-file-input.js	(revision 2)
@@ -0,0 +1,35 @@
+/*
+    By Osvaldas Valutis, www.osvaldas.info
+    Available for use under the MIT License
+*/
+'use strict';
+;( function ( document, window, index )
+{
+    var inputs = document.querySelectorAll( '.inputfile' );
+    Array.prototype.forEach.call( inputs, function( input )
+    {
+        var label     = input.nextElementSibling,
+            labelVal = label.innerHTML;
+        input.addEventListener( 'change', function( e )
+        {
+            var fileName = '';
+            if( this.files && this.files.length > 1 )
+                fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
+            else
+                fileName = e.target.value.split( '\\' ).pop();
+            if( fileName )
+                label.querySelector( 'span' ).innerHTML = fileName;
+            else
+                label.innerHTML = labelVal;
+        });
+        // Firefox bug fix
+        input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
+        input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
+    });
+}( document, window, 0 ));
+
+/*
+           onchange=
+               document.upload.target.value.substr(6,100);
+           document.create.target.value = document.upload.target.value;
+*/
Index: trunk/modules/droplets/templates/default/js/customAlert.js
===================================================================
--- trunk/modules/droplets/templates/default/js/customAlert.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/customAlert.js	(revision 2)
@@ -0,0 +1,165 @@
+/**
+ * customAlerts.js
+ * Author: Philippe Assis
+ * Doc and repo: https://github.com/PhilippeAssis/custom-alert
+ *
+ * Alert e confirm personalizados.
+ * FF, Chromer, IE(>=9)*
+ *
+ * 
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes,
+ * a não ser que você saiba o que esta fazendo.
+ */
+var customKit = {
+    createDiv: function (attr, name, parent) {
+        var div = document.createElement("div");
+        div.setAttribute(attr, name);
+        if (parent) {
+            var parent = document.getElementById(parent)
+            parent.appendChild(div);
+            return;
+        }
+
+        document.body.appendChild(div);
+    },
+    mergeObjects: function (obj1, obj2) {
+        var obj3 = {};
+        for (var attrname in obj1) {
+            obj3[attrname] = obj1[attrname];
+        }
+        for (var attrname in obj2) {
+            obj3[attrname] = obj2[attrname];
+        }
+        return obj3;
+    }
+};
+
+function customAlert(options) {
+
+    this.defaultOptions = {
+        'ok': 'OK',
+        'title': 'Alert!'
+    };
+
+    if (options)
+        this.defaultOptions = customKit.mergeObjects(this.defaultOptions, options);
+
+    this.options = this.defaultOptions;
+
+    if (document.getElementById("customAlert") == null) {
+        customKit.createDiv("id", "customAlert-overlay");
+        customKit.createDiv("id", "customAlert");
+        customKit.createDiv("class", "header", "customAlert");
+        customKit.createDiv("class", "body", "customAlert");
+        customKit.createDiv("class", "footer", "customAlert");
+
+        //Os nomes podem ser alterados, window.alert e window.Alert, ao seu gosto!
+        window.alert = window.Alert = function (dialog, options) {
+            if (options)
+                window.customAlert.options = customKit.mergeObjects(window.customAlert.options, options);
+            window.customAlert.render(dialog);
+        };
+    }
+
+    this.render = function (dialog) {
+        alertBox = document.getElementById("customAlert");
+        alertBox.getElementsByClassName("header")[0].innerHTML = this.options.title;
+        alertBox.getElementsByClassName("body")[0].innerHTML = dialog;
+        alertBox.getElementsByClassName("footer")[0].innerHTML = "<button onclick=\"window.customAlert.ok()\">" + this.options.ok + "</button>";
+        document.getElementsByTagName("html")[0].style.overflow = "hidden";
+        document.getElementById("customAlert-overlay").style.display = "block";
+        alertBox.style.display = "block";
+    };
+
+    this.ok = function () {
+        document.getElementById("customAlert").style.display = "none";
+        document.getElementById("customAlert-overlay").style.display = "none";
+        document.getElementsByTagName("html")[0].style.overflow = "auto";
+        this.options = this.defaultOptions;
+    }
+}
+
+function customConfirm(options) {
+
+    this.defaultOptions = {
+        'yes': 'YES',
+        'no': 'NO',
+        'title': 'Confirm it:',
+        'return': false
+    };
+
+    if (options)
+        this.defaultOptions = customKit.mergeObjects(this.defaultOptions, options);
+
+    this.options = this.defaultOptions;
+
+    if (document.getElementById("customConfirm") == null) {
+        customKit.createDiv("id", "customConfirm-overlay");
+        customKit.createDiv("id", "customConfirm");
+        customKit.createDiv("class", "header", "customConfirm");
+        customKit.createDiv("class", "body", "customConfirm");
+        customKit.createDiv("class", "footer", "customConfirm");
+
+        //Os nomes podem ser alterados, window.confirm e window.Confirm, ao seu gosto!
+        window.confirm = window.Confirm = function (dialog, callback, options) {
+            if (options)
+                window.customConfirm.options = customKit.mergeObjects(window.customConfirm.options, options);
+            window.customConfirm.render(dialog, callback);
+        };
+    }
+
+    this.callback = function (data) {
+        if (data != undefined) console.log(data)
+    };
+
+    this.render = function (dialog, callback) {
+        this.callback = callback;
+        confirmBox = document.getElementById("customConfirm");
+        confirmBox.getElementsByClassName("header")[0].innerHTML = this.options.title;
+        confirmBox.getElementsByClassName("body")[0].innerHTML = dialog;
+        confirmBox.getElementsByClassName("footer")[0].innerHTML = "<button class=\"confirm\" onclick=\"window.customConfirm.ok()\">" + (this.options.yes) + "</button><button class=\"cancel\" onclick=\"window.customConfirm.cancel()\">" + (this.options.no) + "</button>";
+        document.getElementsByTagName("html")[0].style.overflow = "hidden";
+        document.getElementById("customConfirm-overlay").style.display = "block";
+        confirmBox.style.display = "block";
+    };
+
+    this.ok = function () {
+        this.end();
+        if (this.options.return) {
+            this.clear();
+            this.callback(true);
+            return;
+        }
+
+        this.clear();
+        this.callback();
+    }
+
+    this.cancel = function () {
+        this.end();
+        if (this.options.return) {
+            this.clear();
+            this.callback(false);
+            return;
+        }
+        this.clear();
+    }
+
+    this.end = function () {
+        document.getElementById("customConfirm").style.display = "none";
+        document.getElementById("customConfirm-overlay").style.display = "none";
+        document.getElementsByTagName("html")[0].style.overflow = "auto";
+    }
+
+    this.clear = function () {
+        this.options = this.defaultOptions;
+    }
+}
+
+/*
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes, a não se que vc saiba o que esta fazendo.
+ * Vocẽ pode adicionar configuraçãos na declaração de ambos, ex: new customConfirm({execute:false});
+ * */
+window.customAlert = new customAlert({title: ''});
+
+window.customConfirm = new customConfirm({title: ''});
\ No newline at end of file
Index: trunk/modules/droplets/templates/default/js/draggabilly.pkgd.js
===================================================================
--- trunk/modules/droplets/templates/default/js/draggabilly.pkgd.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/draggabilly.pkgd.js	(revision 2)
@@ -0,0 +1,1509 @@
+/*!
+ * Draggabilly PACKAGED v1.1.2
+ * Make that shiz draggable
+ * http://draggabilly.desandro.com
+ * MIT license
+ */
+
+/*!
+ * classie - class helper functions
+ * from bonzo https://github.com/ded/bonzo
+ * 
+ * classie.has( elem, 'my-class' ) -> true/false
+ * classie.add( elem, 'my-new-class' )
+ * classie.remove( elem, 'my-unwanted-class' )
+ * classie.toggle( elem, 'my-class' )
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*global define: false */
+
+( function( window ) {
+
+// class helper functions from bonzo https://github.com/ded/bonzo
+
+function classReg( className ) {
+  return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
+}
+
+// classList support for class management
+// altho to be fair, the api sucks because it won't accept multiple classes at once
+var hasClass, addClass, removeClass;
+
+if ( 'classList' in document.documentElement ) {
+  hasClass = function( elem, c ) {
+    return elem.classList.contains( c );
+  };
+  addClass = function( elem, c ) {
+    elem.classList.add( c );
+  };
+  removeClass = function( elem, c ) {
+    elem.classList.remove( c );
+  };
+}
+else {
+  hasClass = function( elem, c ) {
+    return classReg( c ).test( elem.className );
+  };
+  addClass = function( elem, c ) {
+    if ( !hasClass( elem, c ) ) {
+      elem.className = elem.className + ' ' + c;
+    }
+  };
+  removeClass = function( elem, c ) {
+    elem.className = elem.className.replace( classReg( c ), ' ' );
+  };
+}
+
+function toggleClass( elem, c ) {
+  var fn = hasClass( elem, c ) ? removeClass : addClass;
+  fn( elem, c );
+}
+
+var classie = {
+  // full names
+  hasClass: hasClass,
+  addClass: addClass,
+  removeClass: removeClass,
+  toggleClass: toggleClass,
+  // short names
+  has: hasClass,
+  add: addClass,
+  remove: removeClass,
+  toggle: toggleClass
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'classie/classie',classie );
+} else {
+  // browser global
+  window.classie = classie;
+}
+
+})( window );
+
+/*!
+ * EventEmitter v4.2.2 - git.io/ee
+ * Oliver Caldwell
+ * MIT license
+ * @preserve
+ */
+
+(function () {
+    
+
+    /**
+     * Class for managing events.
+     * Can be extended to provide event functionality in other classes.
+     *
+     * @class EventEmitter Manages event registering and emitting.
+     */
+    function EventEmitter() {}
+
+    // Shortcuts to improve speed and size
+
+    // Easy access to the prototype
+    var proto = EventEmitter.prototype;
+
+    /**
+     * Finds the index of the listener for the event in it's storage array.
+     *
+     * @param {Function[]} listeners Array of listeners to search through.
+     * @param {Function} listener Method to look for.
+     * @return {Number} index of the specified listener, -1 if not found
+     * @api private
+     */
+    function indexOfListener(listeners, listener) {
+        var i = listeners.length;
+        while (i--) {
+            if (listeners[i].listener === listener) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Alias a method while keeping the context correct, to allow for overwriting of target method.
+     *
+     * @param {String} name The name of the target method.
+     * @return {Function} The aliased method
+     * @api private
+     */
+    function alias(name) {
+        return function aliasClosure() {
+            return this[name].apply(this, arguments);
+        };
+    }
+
+    /**
+     * Returns the listener array for the specified event.
+     * Will initialise the event object and listener arrays if required.
+     * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.
+     * Each property in the object response is an array of listener functions.
+     *
+     * @param {String|RegExp} evt Name of the event to return the listeners from.
+     * @return {Function[]|Object} All listener functions for the event.
+     */
+    proto.getListeners = function getListeners(evt) {
+        var events = this._getEvents();
+        var response;
+        var key;
+
+        // Return a concatenated array of all matching events if
+        // the selector is a regular expression.
+        if (typeof evt === 'object') {
+            response = {};
+            for (key in events) {
+                if (events.hasOwnProperty(key) && evt.test(key)) {
+                    response[key] = events[key];
+                }
+            }
+        }
+        else {
+            response = events[evt] || (events[evt] = []);
+        }
+
+        return response;
+    };
+
+    /**
+     * Takes a list of listener objects and flattens it into a list of listener functions.
+     *
+     * @param {Object[]} listeners Raw listener objects.
+     * @return {Function[]} Just the listener functions.
+     */
+    proto.flattenListeners = function flattenListeners(listeners) {
+        var flatListeners = [];
+        var i;
+
+        for (i = 0; i < listeners.length; i += 1) {
+            flatListeners.push(listeners[i].listener);
+        }
+
+        return flatListeners;
+    };
+
+    /**
+     * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.
+     *
+     * @param {String|RegExp} evt Name of the event to return the listeners from.
+     * @return {Object} All listener functions for an event in an object.
+     */
+    proto.getListenersAsObject = function getListenersAsObject(evt) {
+        var listeners = this.getListeners(evt);
+        var response;
+
+        if (listeners instanceof Array) {
+            response = {};
+            response[evt] = listeners;
+        }
+
+        return response || listeners;
+    };
+
+    /**
+     * Adds a listener function to the specified event.
+     * The listener will not be added if it is a duplicate.
+     * If the listener returns true then it will be removed after it is called.
+     * If you pass a regular expression as the event name then the listener will be added to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to attach the listener to.
+     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addListener = function addListener(evt, listener) {
+        var listeners = this.getListenersAsObject(evt);
+        var listenerIsWrapped = typeof listener === 'object';
+        var key;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {
+                listeners[key].push(listenerIsWrapped ? listener : {
+                    listener: listener,
+                    once: false
+                });
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of addListener
+     */
+    proto.on = alias('addListener');
+
+    /**
+     * Semi-alias of addListener. It will add a listener that will be
+     * automatically removed after it's first execution.
+     *
+     * @param {String|RegExp} evt Name of the event to attach the listener to.
+     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addOnceListener = function addOnceListener(evt, listener) {
+        return this.addListener(evt, {
+            listener: listener,
+            once: true
+        });
+    };
+
+    /**
+     * Alias of addOnceListener.
+     */
+    proto.once = alias('addOnceListener');
+
+    /**
+     * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.
+     * You need to tell it what event names should be matched by a regex.
+     *
+     * @param {String} evt Name of the event to create.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.defineEvent = function defineEvent(evt) {
+        this.getListeners(evt);
+        return this;
+    };
+
+    /**
+     * Uses defineEvent to define multiple events.
+     *
+     * @param {String[]} evts An array of event names to define.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.defineEvents = function defineEvents(evts) {
+        for (var i = 0; i < evts.length; i += 1) {
+            this.defineEvent(evts[i]);
+        }
+        return this;
+    };
+
+    /**
+     * Removes a listener function from the specified event.
+     * When passed a regular expression as the event name, it will remove the listener from all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to remove the listener from.
+     * @param {Function} listener Method to remove from the event.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeListener = function removeListener(evt, listener) {
+        var listeners = this.getListenersAsObject(evt);
+        var index;
+        var key;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key)) {
+                index = indexOfListener(listeners[key], listener);
+
+                if (index !== -1) {
+                    listeners[key].splice(index, 1);
+                }
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of removeListener
+     */
+    proto.off = alias('removeListener');
+
+    /**
+     * Adds listeners in bulk using the manipulateListeners method.
+     * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.
+     * You can also pass it a regular expression to add the array of listeners to all events that match it.
+     * Yeah, this function does quite a bit. That's probably a bad thing.
+     *
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to add.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addListeners = function addListeners(evt, listeners) {
+        // Pass through to manipulateListeners
+        return this.manipulateListeners(false, evt, listeners);
+    };
+
+    /**
+     * Removes listeners in bulk using the manipulateListeners method.
+     * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+     * You can also pass it an event name and an array of listeners to be removed.
+     * You can also pass it a regular expression to remove the listeners from all events that match it.
+     *
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to remove.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeListeners = function removeListeners(evt, listeners) {
+        // Pass through to manipulateListeners
+        return this.manipulateListeners(true, evt, listeners);
+    };
+
+    /**
+     * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.
+     * The first argument will determine if the listeners are removed (true) or added (false).
+     * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+     * You can also pass it an event name and an array of listeners to be added/removed.
+     * You can also pass it a regular expression to manipulate the listeners of all events that match it.
+     *
+     * @param {Boolean} remove True if you want to remove listeners, false if you want to add.
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to add/remove.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {
+        var i;
+        var value;
+        var single = remove ? this.removeListener : this.addListener;
+        var multiple = remove ? this.removeListeners : this.addListeners;
+
+        // If evt is an object then pass each of it's properties to this method
+        if (typeof evt === 'object' && !(evt instanceof RegExp)) {
+            for (i in evt) {
+                if (evt.hasOwnProperty(i) && (value = evt[i])) {
+                    // Pass the single listener straight through to the singular method
+                    if (typeof value === 'function') {
+                        single.call(this, i, value);
+                    }
+                    else {
+                        // Otherwise pass back to the multiple function
+                        multiple.call(this, i, value);
+                    }
+                }
+            }
+        }
+        else {
+            // So evt must be a string
+            // And listeners must be an array of listeners
+            // Loop over it and pass each one to the multiple method
+            i = listeners.length;
+            while (i--) {
+                single.call(this, evt, listeners[i]);
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Removes all listeners from a specified event.
+     * If you do not specify an event then all listeners will be removed.
+     * That means every event will be emptied.
+     * You can also pass a regex to remove all events that match it.
+     *
+     * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeEvent = function removeEvent(evt) {
+        var type = typeof evt;
+        var events = this._getEvents();
+        var key;
+
+        // Remove different things depending on the state of evt
+        if (type === 'string') {
+            // Remove all listeners for the specified event
+            delete events[evt];
+        }
+        else if (type === 'object') {
+            // Remove all events matching the regex.
+            for (key in events) {
+                if (events.hasOwnProperty(key) && evt.test(key)) {
+                    delete events[key];
+                }
+            }
+        }
+        else {
+            // Remove all listeners in all events
+            delete this._events;
+        }
+
+        return this;
+    };
+
+    /**
+     * Emits an event of your choice.
+     * When emitted, every listener attached to that event will be executed.
+     * If you pass the optional argument array then those arguments will be passed to every listener upon execution.
+     * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.
+     * So they will not arrive within the array on the other side, they will be separate.
+     * You can also pass a regular expression to emit to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+     * @param {Array} [args] Optional array of arguments to be passed to each listener.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.emitEvent = function emitEvent(evt, args) {
+        var listeners = this.getListenersAsObject(evt);
+        var listener;
+        var i;
+        var key;
+        var response;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key)) {
+                i = listeners[key].length;
+
+                while (i--) {
+                    // If the listener returns true then it shall be removed from the event
+                    // The function is executed either with a basic call or an apply if there is an args array
+                    listener = listeners[key][i];
+                    response = listener.listener.apply(this, args || []);
+                    if (response === this._getOnceReturnValue() || listener.once === true) {
+                        this.removeListener(evt, listener.listener);
+                    }
+                }
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of emitEvent
+     */
+    proto.trigger = alias('emitEvent');
+
+    /**
+     * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.
+     * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+     * @param {...*} Optional additional arguments to be passed to each listener.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.emit = function emit(evt) {
+        var args = Array.prototype.slice.call(arguments, 1);
+        return this.emitEvent(evt, args);
+    };
+
+    /**
+     * Sets the current value to check against when executing listeners. If a
+     * listeners return value matches the one set here then it will be removed
+     * after execution. This value defaults to true.
+     *
+     * @param {*} value The new value to check for when executing listeners.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.setOnceReturnValue = function setOnceReturnValue(value) {
+        this._onceReturnValue = value;
+        return this;
+    };
+
+    /**
+     * Fetches the current value to check against when executing listeners. If
+     * the listeners return value matches this one then it should be removed
+     * automatically. It will return true by default.
+     *
+     * @return {*|Boolean} The current value to check for or the default, true.
+     * @api private
+     */
+    proto._getOnceReturnValue = function _getOnceReturnValue() {
+        if (this.hasOwnProperty('_onceReturnValue')) {
+            return this._onceReturnValue;
+        }
+        else {
+            return true;
+        }
+    };
+
+    /**
+     * Fetches the events object and creates one if required.
+     *
+     * @return {Object} The events storage object.
+     * @api private
+     */
+    proto._getEvents = function _getEvents() {
+        return this._events || (this._events = {});
+    };
+
+    // Expose the class either via AMD, CommonJS or the global object
+    if (typeof define === 'function' && define.amd) {
+        define('eventEmitter/EventEmitter',[],function () {
+            return EventEmitter;
+        });
+    }
+    else if (typeof module === 'object' && module.exports){
+        module.exports = EventEmitter;
+    }
+    else {
+        this.EventEmitter = EventEmitter;
+    }
+}.call(this));
+
+/*!
+ * eventie v1.0.3
+ * event binding helper
+ *   eventie.bind( elem, 'click', myFn )
+ *   eventie.unbind( elem, 'click', myFn )
+ */
+
+/*jshint browser: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window ) {
+
+
+
+var docElem = document.documentElement;
+
+var bind = function() {};
+
+if ( docElem.addEventListener ) {
+  bind = function( obj, type, fn ) {
+    obj.addEventListener( type, fn, false );
+  };
+} else if ( docElem.attachEvent ) {
+  bind = function( obj, type, fn ) {
+    obj[ type + fn ] = fn.handleEvent ?
+      function() {
+        var event = window.event;
+        // add event.target
+        event.target = event.target || event.srcElement;
+        fn.handleEvent.call( fn, event );
+      } :
+      function() {
+        var event = window.event;
+        // add event.target
+        event.target = event.target || event.srcElement;
+        fn.call( obj, event );
+      };
+    obj.attachEvent( "on" + type, obj[ type + fn ] );
+  };
+}
+
+var unbind = function() {};
+
+if ( docElem.removeEventListener ) {
+  unbind = function( obj, type, fn ) {
+    obj.removeEventListener( type, fn, false );
+  };
+} else if ( docElem.detachEvent ) {
+  unbind = function( obj, type, fn ) {
+    obj.detachEvent( "on" + type, obj[ type + fn ] );
+    try {
+      delete obj[ type + fn ];
+    } catch ( err ) {
+      // can't delete window object properties
+      obj[ type + fn ] = undefined;
+    }
+  };
+}
+
+var eventie = {
+  bind: bind,
+  unbind: unbind
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'eventie/eventie',eventie );
+} else {
+  // browser global
+  window.eventie = eventie;
+}
+
+})( this );
+
+/*!
+ * getStyleProperty by kangax
+ * http://perfectionkills.com/feature-testing-css-properties/
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*globals define: false */
+
+( function( window ) {
+
+
+
+var prefixes = 'Webkit Moz ms Ms O'.split(' ');
+var docElemStyle = document.documentElement.style;
+
+function getStyleProperty( propName ) {
+  if ( !propName ) {
+    return;
+  }
+
+  // test standard property first
+  if ( typeof docElemStyle[ propName ] === 'string' ) {
+    return propName;
+  }
+
+  // capitalize
+  propName = propName.charAt(0).toUpperCase() + propName.slice(1);
+
+  // test vendor specific properties
+  var prefixed;
+  for ( var i=0, len = prefixes.length; i < len; i++ ) {
+    prefixed = prefixes[i] + propName;
+    if ( typeof docElemStyle[ prefixed ] === 'string' ) {
+      return prefixed;
+    }
+  }
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'get-style-property/get-style-property',[],function() {
+    return getStyleProperty;
+  });
+} else {
+  // browser global
+  window.getStyleProperty = getStyleProperty;
+}
+
+})( window );
+
+/**
+ * getSize v1.1.4
+ * measure size of elements
+ */
+
+/*jshint browser: true, strict: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window, undefined ) {
+
+
+
+// -------------------------- helpers -------------------------- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+  function( elem ) {
+    return defView.getComputedStyle( elem, null );
+  } :
+  function( elem ) {
+    return elem.currentStyle;
+  };
+
+// get a number from a string, not a percentage
+function getStyleSize( value ) {
+  var num = parseFloat( value );
+  // not a percent like '100%', and a number
+  var isValid = value.indexOf('%') === -1 && !isNaN( num );
+  return isValid && num;
+}
+
+// -------------------------- measurements -------------------------- //
+
+var measurements = [
+  'paddingLeft',
+  'paddingRight',
+  'paddingTop',
+  'paddingBottom',
+  'marginLeft',
+  'marginRight',
+  'marginTop',
+  'marginBottom',
+  'borderLeftWidth',
+  'borderRightWidth',
+  'borderTopWidth',
+  'borderBottomWidth'
+];
+
+function getZeroSize() {
+  var size = {
+    width: 0,
+    height: 0,
+    innerWidth: 0,
+    innerHeight: 0,
+    outerWidth: 0,
+    outerHeight: 0
+  };
+  for ( var i=0, len = measurements.length; i < len; i++ ) {
+    var measurement = measurements[i];
+    size[ measurement ] = 0;
+  }
+  return size;
+}
+
+
+
+function defineGetSize( getStyleProperty ) {
+
+// -------------------------- box sizing -------------------------- //
+
+var boxSizingProp = getStyleProperty('boxSizing');
+var isBoxSizeOuter;
+
+/**
+ * WebKit measures the outer-width on style.width on border-box elems
+ * IE & Firefox measures the inner-width
+ */
+( function() {
+  if ( !boxSizingProp ) {
+    return;
+  }
+
+  var div = document.createElement('div');
+  div.style.width = '200px';
+  div.style.padding = '1px 2px 3px 4px';
+  div.style.borderStyle = 'solid';
+  div.style.borderWidth = '1px 2px 3px 4px';
+  div.style[ boxSizingProp ] = 'border-box';
+
+  var body = document.body || document.documentElement;
+  body.appendChild( div );
+  var style = getStyle( div );
+
+  isBoxSizeOuter = getStyleSize( style.width ) === 200;
+  body.removeChild( div );
+})();
+
+
+// -------------------------- getSize -------------------------- //
+
+function getSize( elem ) {
+  // use querySeletor if elem is string
+  if ( typeof elem === 'string' ) {
+    elem = document.querySelector( elem );
+  }
+
+  // do not proceed on non-objects
+  if ( !elem || typeof elem !== 'object' || !elem.nodeType ) {
+    return;
+  }
+
+  var style = getStyle( elem );
+
+  // if hidden, everything is 0
+  if ( style.display === 'none' ) {
+    return getZeroSize();
+  }
+
+  var size = {};
+  size.width = elem.offsetWidth;
+  size.height = elem.offsetHeight;
+
+  var isBorderBox = size.isBorderBox = !!( boxSizingProp &&
+    style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' );
+
+  // get all measurements
+  for ( var i=0, len = measurements.length; i < len; i++ ) {
+    var measurement = measurements[i];
+    var value = style[ measurement ];
+    var num = parseFloat( value );
+    // any 'auto', 'medium' value will be 0
+    size[ measurement ] = !isNaN( num ) ? num : 0;
+  }
+
+  var paddingWidth = size.paddingLeft + size.paddingRight;
+  var paddingHeight = size.paddingTop + size.paddingBottom;
+  var marginWidth = size.marginLeft + size.marginRight;
+  var marginHeight = size.marginTop + size.marginBottom;
+  var borderWidth = size.borderLeftWidth + size.borderRightWidth;
+  var borderHeight = size.borderTopWidth + size.borderBottomWidth;
+
+  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;
+
+  // overwrite width and height if we can get it from style
+  var styleWidth = getStyleSize( style.width );
+  if ( styleWidth !== false ) {
+    size.width = styleWidth +
+      // add padding and border unless it's already including it
+      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );
+  }
+
+  var styleHeight = getStyleSize( style.height );
+  if ( styleHeight !== false ) {
+    size.height = styleHeight +
+      // add padding and border unless it's already including it
+      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );
+  }
+
+  size.innerWidth = size.width - ( paddingWidth + borderWidth );
+  size.innerHeight = size.height - ( paddingHeight + borderHeight );
+
+  size.outerWidth = size.width + marginWidth;
+  size.outerHeight = size.height + marginHeight;
+
+  return size;
+}
+
+return getSize;
+
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'get-size/get-size',[ 'get-style-property/get-style-property' ], defineGetSize );
+} else {
+  // browser global
+  window.getSize = defineGetSize( window.getStyleProperty );
+}
+
+})( window );
+
+/*!
+ * Draggabilly v1.1.2
+ * Make that shiz draggable
+ * http://draggabilly.desandro.com
+ * MIT license
+ */
+
+( function( window ) {
+
+
+
+// vars
+var document = window.document;
+
+// -------------------------- helpers -------------------------- //
+
+// extend objects
+function extend( a, b ) {
+  for ( var prop in b ) {
+    a[ prop ] = b[ prop ];
+  }
+  return a;
+}
+
+function noop() {}
+
+// ----- get style ----- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+  function( elem ) {
+    return defView.getComputedStyle( elem, null );
+  } :
+  function( elem ) {
+    return elem.currentStyle;
+  };
+
+
+// http://stackoverflow.com/a/384380/182183
+var isElement = ( typeof HTMLElement === 'object' ) ?
+  function isElementDOM2( obj ) {
+    return obj instanceof HTMLElement;
+  } :
+  function isElementQuirky( obj ) {
+    return obj && typeof obj === 'object' &&
+      obj.nodeType === 1 && typeof obj.nodeName === 'string';
+  };
+
+// -------------------------- requestAnimationFrame -------------------------- //
+
+// https://gist.github.com/1866474
+
+var lastTime = 0;
+var prefixes = 'webkit moz ms o'.split(' ');
+// get unprefixed rAF and cAF, if present
+var requestAnimationFrame = window.requestAnimationFrame;
+var cancelAnimationFrame = window.cancelAnimationFrame;
+// loop through vendor prefixes and get prefixed rAF and cAF
+var prefix;
+for( var i = 0; i < prefixes.length; i++ ) {
+  if ( requestAnimationFrame && cancelAnimationFrame ) {
+    break;
+  }
+  prefix = prefixes[i];
+  requestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];
+  cancelAnimationFrame  = cancelAnimationFrame  || window[ prefix + 'CancelAnimationFrame' ] ||
+                            window[ prefix + 'CancelRequestAnimationFrame' ];
+}
+
+// fallback to setTimeout and clearTimeout if either request/cancel is not supported
+if ( !requestAnimationFrame || !cancelAnimationFrame )  {
+  requestAnimationFrame = function( callback ) {
+    var currTime = new Date().getTime();
+    var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) );
+    var id = window.setTimeout( function() {
+      callback( currTime + timeToCall );
+    }, timeToCall );
+    lastTime = currTime + timeToCall;
+    return id;
+  };
+
+  cancelAnimationFrame = function( id ) {
+    window.clearTimeout( id );
+  };
+}
+
+// -------------------------- definition -------------------------- //
+
+function draggabillyDefinition( classie, EventEmitter, eventie, getStyleProperty, getSize ) {
+
+// -------------------------- support -------------------------- //
+
+var transformProperty = getStyleProperty('transform');
+// TODO fix quick & dirty check for 3D support
+var is3d = !!getStyleProperty('perspective');
+
+// --------------------------  -------------------------- //
+
+function Draggabilly( element, options ) {
+  // querySelector if string
+  this.element = typeof element === 'string' ?
+    document.querySelector( element ) : element;
+
+  this.options = extend( {}, this.options );
+  extend( this.options, options );
+
+  this._create();
+}
+
+// inherit EventEmitter methods
+extend( Draggabilly.prototype, EventEmitter.prototype );
+
+Draggabilly.prototype.options = {
+};
+
+Draggabilly.prototype._create = function() {
+
+  // properties
+  this.position = {};
+  this._getPosition();
+
+  this.startPoint = { x: 0, y: 0 };
+  this.dragPoint = { x: 0, y: 0 };
+
+  this.startPosition = extend( {}, this.position );
+
+  // set relative positioning
+  var style = getStyle( this.element );
+  if ( style.position !== 'relative' && style.position !== 'absolute' ) {
+    this.element.style.position = 'relative';
+  }
+
+  this.enable();
+  this.setHandles();
+
+};
+
+/**
+ * set this.handles and bind start events to 'em
+ */
+Draggabilly.prototype.setHandles = function() {
+  this.handles = this.options.handle ?
+    this.element.querySelectorAll( this.options.handle ) : [ this.element ];
+
+  this.bindHandles( true );
+};
+
+// -------------------------- bind -------------------------- //
+
+/**
+ * @param {Boolean} isBind - will unbind if falsey
+ */
+Draggabilly.prototype.bindHandles = function( isBind ) {
+  var binder;
+  if ( window.navigator.pointerEnabled ) {
+    binder = this.bindPointer;
+  } else if ( window.navigator.msPointerEnabled ) {
+    binder = this.bindMSPointer;
+  } else {
+    binder = this.bindMouseTouch;
+  }
+  // munge isBind, default to true
+  isBind = isBind === undefined ? true : !!isBind;
+  for ( var i=0, len = this.handles.length; i < len; i++ ) {
+    var handle = this.handles[i];
+    binder.call( this, handle, isBind );
+  }
+};
+
+Draggabilly.prototype.bindPointer = function( handle, isBind ) {
+  // W3C Pointer Events, IE11. See https://coderwall.com/p/mfreca
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'pointerdown', this );
+  // disable scrolling on the element
+  handle.style.touchAction = isBind ? 'none' : '';
+};
+
+Draggabilly.prototype.bindMSPointer = function( handle, isBind ) {
+  // IE10 Pointer Events
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'MSPointerDown', this );
+  // disable scrolling on the element
+  handle.style.msTouchAction = isBind ? 'none' : '';
+};
+
+Draggabilly.prototype.bindMouseTouch = function( handle, isBind ) {
+  // listen for both, for devices like Chrome Pixel
+  //   which has touch and mouse events
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'mousedown', this );
+  eventie[ bindMethod ]( handle, 'touchstart', this );
+  // TODO re-enable img.ondragstart when unbinding
+  if ( isBind ) {
+    disableImgOndragstart( handle );
+  }
+};
+
+// remove default dragging interaction on all images in IE8
+// IE8 does its own drag thing on images, which messes stuff up
+
+function noDragStart() {
+  return false;
+}
+
+// TODO replace this with a IE8 test
+var isIE8 = 'attachEvent' in document.documentElement;
+
+// IE8 only
+var disableImgOndragstart = !isIE8 ? noop : function( handle ) {
+
+  if ( handle.nodeName === 'IMG' ) {
+    handle.ondragstart = noDragStart;
+  }
+
+  var images = handle.querySelectorAll('img');
+  for ( var i=0, len = images.length; i < len; i++ ) {
+    var img = images[i];
+    img.ondragstart = noDragStart;
+  }
+};
+
+// -------------------------- position -------------------------- //
+
+// get left/top position from style
+Draggabilly.prototype._getPosition = function() {
+  // properties
+  var style = getStyle( this.element );
+
+  var x = parseInt( style.left, 10 );
+  var y = parseInt( style.top, 10 );
+
+  // clean up 'auto' or other non-integer values
+  this.position.x = isNaN( x ) ? 0 : x;
+  this.position.y = isNaN( y ) ? 0 : y;
+
+  this._addTransformPosition( style );
+};
+
+// add transform: translate( x, y ) to position
+Draggabilly.prototype._addTransformPosition = function( style ) {
+  if ( !transformProperty ) {
+    return;
+  }
+  var transform = style[ transformProperty ];
+  // bail out if value is 'none'
+  if ( transform.indexOf('matrix') !== 0 ) {
+    return;
+  }
+  // split matrix(1, 0, 0, 1, x, y)
+  var matrixValues = transform.split(',');
+  // translate X value is in 12th or 4th position
+  var xIndex = transform.indexOf('matrix3d') === 0 ? 12 : 4;
+  var translateX = parseInt( matrixValues[ xIndex ], 10 );
+  // translate Y value is in 13th or 5th position
+  var translateY = parseInt( matrixValues[ xIndex + 1 ], 10 );
+  this.position.x += translateX;
+  this.position.y += translateY;
+};
+
+// -------------------------- events -------------------------- //
+
+// trigger handler methods for events
+Draggabilly.prototype.handleEvent = function( event ) {
+  var method = 'on' + event.type;
+  if ( this[ method ] ) {
+    this[ method ]( event );
+  }
+};
+
+// returns the touch that we're keeping track of
+Draggabilly.prototype.getTouch = function( touches ) {
+  for ( var i=0, len = touches.length; i < len; i++ ) {
+    var touch = touches[i];
+    if ( touch.identifier === this.pointerIdentifier ) {
+      return touch;
+    }
+  }
+};
+
+// ----- start event ----- //
+
+Draggabilly.prototype.onmousedown = function( event ) {
+  // dismiss clicks from right or middle buttons
+  var button = event.button;
+  if ( button && ( button !== 0 && button !== 1 ) ) {
+    return;
+  }
+  this.dragStart( event, event );
+};
+
+Draggabilly.prototype.ontouchstart = function( event ) {
+  // disregard additional touches
+  if ( this.isDragging ) {
+    return;
+  }
+
+  this.dragStart( event, event.changedTouches[0] );
+};
+
+Draggabilly.prototype.onMSPointerDown =
+Draggabilly.prototype.onpointerdown = function( event ) {
+  // disregard additional touches
+  if ( this.isDragging ) {
+    return;
+  }
+
+  this.dragStart( event, event );
+};
+
+function setPointerPoint( point, pointer ) {
+  point.x = pointer.pageX !== undefined ? pointer.pageX : pointer.clientX;
+  point.y = pointer.pageY !== undefined ? pointer.pageY : pointer.clientY;
+}
+
+// hash of events to be bound after start event
+var postStartEvents = {
+  mousedown: [ 'mousemove', 'mouseup' ],
+  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],
+  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],
+  MSPointerDown: [ 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel' ]
+};
+
+/**
+ * drag start
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragStart = function( event, pointer ) {
+  if ( !this.isEnabled ) {
+    return;
+  }
+
+  if ( event.preventDefault ) {
+    event.preventDefault();
+  } else {
+    event.returnValue = false;
+  }
+
+  // save pointer identifier to match up touch events
+  this.pointerIdentifier = pointer.pointerId !== undefined ?
+    // pointerId for pointer events, touch.indentifier for touch events
+    pointer.pointerId : pointer.identifier;
+
+  this._getPosition();
+
+  this.measureContainment();
+
+  // point where drag began
+  setPointerPoint( this.startPoint, pointer );
+  // position _when_ drag began
+  this.startPosition.x = this.position.x;
+  this.startPosition.y = this.position.y;
+
+  // reset left/top style
+  this.setLeftTop();
+
+  this.dragPoint.x = 0;
+  this.dragPoint.y = 0;
+
+  // bind move and end events
+  this._bindEvents({
+    // get proper events to match start event
+    events: postStartEvents[ event.type ],
+    // IE8 needs to be bound to document
+    node: event.preventDefault ? window : document
+  });
+
+  classie.add( this.element, 'is-dragging' );
+
+  // reset isDragging flag
+  this.isDragging = true;
+
+  this.emitEvent( 'dragStart', [ this, event, pointer ] );
+
+  // start animation
+  this.animate();
+};
+
+Draggabilly.prototype._bindEvents = function( args ) {
+  for ( var i=0, len = args.events.length; i < len; i++ ) {
+    var event = args.events[i];
+    eventie.bind( args.node, event, this );
+  }
+  // save these arguments
+  this._boundEvents = args;
+};
+
+Draggabilly.prototype._unbindEvents = function() {
+  var args = this._boundEvents;
+  // IE8 can trigger dragEnd twice, check for _boundEvents
+  if ( !args || !args.events ) {
+    return;
+  }
+
+  for ( var i=0, len = args.events.length; i < len; i++ ) {
+    var event = args.events[i];
+    eventie.unbind( args.node, event, this );
+  }
+  delete this._boundEvents;
+};
+
+Draggabilly.prototype.measureContainment = function() {
+  var containment = this.options.containment;
+  if ( !containment ) {
+    return;
+  }
+
+  this.size = getSize( this.element );
+  var elemRect = this.element.getBoundingClientRect();
+
+  // use element if element
+  var container = isElement( containment ) ? containment :
+    // fallback to querySelector if string
+    typeof containment === 'string' ? document.querySelector( containment ) :
+    // otherwise just `true`, use the parent
+    this.element.parentNode;
+
+  this.containerSize = getSize( container );
+  var containerRect = container.getBoundingClientRect();
+
+  this.relativeStartPosition = {
+    x: elemRect.left - containerRect.left,
+    y: elemRect.top  - containerRect.top
+  };
+};
+
+// ----- move event ----- //
+
+Draggabilly.prototype.onmousemove = function( event ) {
+  this.dragMove( event, event );
+};
+
+Draggabilly.prototype.onMSPointerMove =
+Draggabilly.prototype.onpointermove = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragMove( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchmove = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  if ( touch ) {
+    this.dragMove( event, touch );
+  }
+};
+
+/**
+ * drag move
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragMove = function( event, pointer ) {
+
+  setPointerPoint( this.dragPoint, pointer );
+  var dragX = this.dragPoint.x - this.startPoint.x;
+  var dragY = this.dragPoint.y - this.startPoint.y;
+
+  var grid = this.options.grid;
+  var gridX = grid && grid[0];
+  var gridY = grid && grid[1];
+
+  dragX = applyGrid( dragX, gridX );
+  dragY = applyGrid( dragY, gridY );
+
+  dragX = this.containDrag( 'x', dragX, gridX );
+  dragY = this.containDrag( 'y', dragY, gridY );
+
+  // constrain to axis
+  dragX = this.options.axis === 'y' ? 0 : dragX;
+  dragY = this.options.axis === 'x' ? 0 : dragY;
+
+  this.position.x = this.startPosition.x + dragX;
+  this.position.y = this.startPosition.y + dragY;
+  // set dragPoint properties
+  this.dragPoint.x = dragX;
+  this.dragPoint.y = dragY;
+
+  this.emitEvent( 'dragMove', [ this, event, pointer ] );
+};
+
+function applyGrid( value, grid, method ) {
+  method = method || 'round';
+  return grid ? Math[ method ]( value / grid ) * grid : value;
+}
+
+Draggabilly.prototype.containDrag = function( axis, drag, grid ) {
+  if ( !this.options.containment ) {
+    return drag;
+  }
+  var measure = axis === 'x' ? 'width' : 'height';
+
+  var rel = this.relativeStartPosition[ axis ];
+  var min = applyGrid( -rel, grid, 'ceil' );
+  var max = this.containerSize[ measure ] - rel - this.size[ measure ];
+  max = applyGrid( max, grid, 'floor' );
+  return  Math.min( max, Math.max( min, drag ) );
+};
+
+// ----- end event ----- //
+
+Draggabilly.prototype.onmouseup = function( event ) {
+  this.dragEnd( event, event );
+};
+
+Draggabilly.prototype.onMSPointerUp =
+Draggabilly.prototype.onpointerup = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragEnd( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchend = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  if ( touch ) {
+    this.dragEnd( event, touch );
+  }
+};
+
+/**
+ * drag end
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragEnd = function( event, pointer ) {
+  this.isDragging = false;
+
+  delete this.pointerIdentifier;
+
+  // use top left position when complete
+  if ( transformProperty ) {
+    this.element.style[ transformProperty ] = '';
+    this.setLeftTop();
+  }
+
+  // remove events
+  this._unbindEvents();
+
+  classie.remove( this.element, 'is-dragging' );
+
+  this.emitEvent( 'dragEnd', [ this, event, pointer ] );
+
+};
+
+// ----- cancel event ----- //
+
+// coerce to end event
+
+Draggabilly.prototype.onMSPointerCancel =
+Draggabilly.prototype.onpointercancel = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragEnd( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchcancel = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  this.dragEnd( event, touch );
+};
+
+// -------------------------- animation -------------------------- //
+
+Draggabilly.prototype.animate = function() {
+  // only render and animate if dragging
+  if ( !this.isDragging ) {
+    return;
+  }
+
+  this.positionDrag();
+
+  var _this = this;
+  requestAnimationFrame( function animateFrame() {
+    _this.animate();
+  });
+
+};
+
+// transform translate function
+var translate = is3d ?
+  function( x, y ) {
+    return 'translate3d( ' + x + 'px, ' + y + 'px, 0)';
+  } :
+  function( x, y ) {
+    return 'translate( ' + x + 'px, ' + y + 'px)';
+  };
+
+// left/top positioning
+Draggabilly.prototype.setLeftTop = function() {
+  this.element.style.left = this.position.x + 'px';
+  this.element.style.top  = this.position.y + 'px';
+};
+
+Draggabilly.prototype.positionDrag = transformProperty ?
+  function() {
+    // position with transform
+    this.element.style[ transformProperty ] = translate( this.dragPoint.x, this.dragPoint.y );
+  } : Draggabilly.prototype.setLeftTop;
+
+// -----  ----- //
+
+Draggabilly.prototype.enable = function() {
+  this.isEnabled = true;
+};
+
+Draggabilly.prototype.disable = function() {
+  this.isEnabled = false;
+  if ( this.isDragging ) {
+    this.dragEnd();
+  }
+};
+
+Draggabilly.prototype.destroy = function() {
+  this.disable();
+  // reset styles
+  if ( transformProperty ) {
+    this.element.style[ transformProperty ] = '';
+  }
+  this.element.style.left = '';
+  this.element.style.top = '';
+  this.element.style.position = '';
+  // unbind handles
+  this.bindHandles( false );
+};
+
+// -----  ----- //
+
+return Draggabilly;
+
+} // end definition
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( [
+      'classie/classie',
+      'eventEmitter/EventEmitter',
+      'eventie/eventie',
+      'get-style-property/get-style-property',
+      'get-size/get-size'
+    ],
+    draggabillyDefinition );
+} else if ( typeof exports === 'object' ) {
+  // CommonJS
+  module.exports = draggabillyDefinition(
+    require('desandro-classie'),
+    require('wolfy87-eventemitter'),
+    require('eventie'),
+    require('desandro-get-style-property'),
+    require('get-size')
+  );
+} else {
+  // browser global
+  window.Draggabilly = draggabillyDefinition(
+    window.classie,
+    window.EventEmitter,
+    window.eventie,
+    window.getStyleProperty,
+    window.getSize
+  );
+}
+
+})( window );
+
Index: trunk/modules/droplets/templates/default/js/empty.txt
===================================================================
--- trunk/modules/droplets/templates/default/js/empty.txt	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/droplets/templates/default/js/modal.js
===================================================================
--- trunk/modules/droplets/templates/default/js/modal.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/modal.js	(revision 2)
@@ -0,0 +1,137 @@
+
+    "use strict";
+
+var Modal = function(){
+
+    var modalOverlay = document.createElement('div');
+        modalOverlay.setAttribute('class', 'modal-overlay');
+        document.body.appendChild(modalOverlay);
+
+    var config = {
+        $modal: document.querySelector('.modal'),
+        $modalOverlay: document.querySelector('.modal-overlay'),
+         modalOverlayColor: 'rgba(255,255,255,0.7)',
+        $modalClose: document.querySelector('.modal-close'),
+        $modalTrigger: document.querySelector('.modal-trigger'),
+        $draggie: new Draggabilly( document.querySelector('.modal'), {
+              handle: '.modal-header',
+              containment: 'html'
+        })
+    }
+    $modal.$modalOverlay.style.background = config.modalOverlayColor;
+
+    var Modal = {
+        createEvent: function(eventName, callback){
+            var event = document.createEvent('HTMLEvents');
+            event.initEvent(eventName, true, false);
+            config.$modal.dispatchEvent(event);
+
+            if (callback && typeof(callback) === "function") {
+                callback();
+            }
+        },
+        open: function(){
+            config.$modal.style.visibility = "visible";
+            config.$modal.classList.add('opening');
+            config.$modal.classList.remove('closing');
+            config.$modalOverlay.style.visibility = "visible";
+            config.$modalOverlay.classList.add('opening');
+            config.$modalOverlay.classList.remove('closing');
+            Modal.createEvent('modalOpened', function(){
+                //callback
+            })
+        },
+        close: function(){
+            config.$modal.classList.add('closing');
+            config.$modal.classList.remove('opening');
+            config.$modalOverlay.classList.add('closing');
+            config.$modalOverlay.classList.remove('opening');
+            var timer = window.setTimeout(function(){
+                config.$modal.style.visibility = "hidden";
+                config.$modalOverlay.style.visibility = "hidden";
+                Modal.createEvent('modalClosed', function(){
+                    //callback
+                });
+            },500);
+        },
+        init: function(){
+            config.$draggie.on( 'dragStart', function( instance, event, pointer ){
+                console.log( 'dragMove on ' + event.type + pointer.pageX + ', ' + pointer.pageY + ' position at ' + instance.position.x + ', ' + instance.position.y );
+            });
+
+            config.$modalClose.addEventListener("click", function(){
+                Modal.close();
+            }, false); 
+
+            config.$modalTrigger.addEventListener("click", function(){
+                Modal.open();
+            }, false); 
+
+            window.addEventListener("keydown", function(e){
+                console.log(e.keyCode);
+                if (e.keyCode == 27) {
+                    if( config.$modal.style.display != 'none'){
+                        Modal.close();
+                    }
+                }
+
+                if (e.keyCode == 38 && e.ctrlKey) {
+                    console.log('full');
+                    if(config.$modal.classList.contains("is-right") || config.$modal.classList.contains("is-left")){
+                        config.$modal.classList.remove("is-right");
+                        config.$modal.classList.remove("is-left");
+                        config.$draggie.enable();
+                    } else {
+                        config.$draggie.disable();
+                        config.$modal.classList.add("is-full");
+                    }
+                }
+
+                if (e.keyCode == 37 && e.ctrlKey) {
+                    console.log('left');
+                    if(config.$modal.classList.contains("is-right") || config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-right");
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    } else {
+                        config.$modal.classList.add("is-left");
+                        config.$draggie.disable();
+                    }
+                }
+
+                if (e.keyCode == 39 && e.ctrlKey) {
+                     console.log('right');
+                    if(config.$modal.classList.contains("is-left") || config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-left");
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    } else {
+                         config.$modal.classList.add("is-right");
+                         config.$draggie.disable();
+                    }
+                }
+
+                if (e.keyCode == 40 && e.ctrlKey) {
+                    if(config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    }
+                }
+
+            });
+
+            config.$modal.addEventListener("modalOpened", function(){
+                console.log("Modal Opened");
+            })
+            config.$modal.addEventListener("modalClosed", function(){
+                console.log("Modal Closed");
+            })
+
+        }
+    }
+    Modal.config = config;
+
+    return Modal;
+
+};
+
Index: trunk/modules/droplets/templates/default/js/msc-script.js
===================================================================
--- trunk/modules/droplets/templates/default/js/msc-script.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/msc-script.js	(revision 2)
@@ -0,0 +1,110 @@
+(function(){
+    function ce(tag, clas, txt) {
+        var ele = document.createElement(tag);
+        ele.setAttribute('class', clas);
+        if(typeof txt === 'undefined' || txt === null){
+            return ele;
+        }
+        var tn = document.createTextNode(txt);
+        ele.appendChild(tn);
+        return ele;
+    }
+    var KEY_ESC = 27;
+
+    var MscConfirm = function(title, sub, onOk, onCancel) {
+        var prev = document.getElementsByClassName('msc-confirm');
+        if(prev.length > 0){
+            document.body.removeChild(prev[0]);
+        }
+
+        var options = {
+            title: 'Confirm',
+            subtitle: '',
+            onOk: null,
+            onCancel: null,
+            okText: 'OK',
+            cancelText: 'Cancel'
+        };
+
+        if(typeof title === 'object') {
+            for(var key in title) {
+                options[key] = title[key];
+            }
+        } else {
+            options.title = (typeof title === 'string') ? title : options.title;
+            options.subtitle = (typeof sub === 'string') ? sub : options.subtitle;
+            options.onOk = (typeof onOk === 'function') ? onOk : options.onOk;
+            options.onCancel = (typeof onCancel === 'function') ? onCancel : options.onCancel;
+
+            if(typeof sub === 'function') {
+                options.onOk = sub;
+            }
+        }
+
+        var dialog = ce('div', 'msc-confirm'),
+            overlay = ce('div', 'msc-overlay'),
+            closeBtn = ce('button', 'msc-close');
+        closeBtn.innerHTML = '&times;';
+        overlay.appendChild(closeBtn);
+
+        closeBtn.addEventListener('click', destroy);
+
+        var content = ce('div', 'msc-content'),
+            cTitle = ce('h3', 'msc-title', options.title),
+            body = ce('div', 'msc-body', options.subtitle),
+            action = ce('div', 'msc-action'),
+            okBtn = ce('button', 'msc-ok', options.okText),
+            cancelbtn = ce('button', 'msc-cancel', options.cancelText);
+
+        action.appendChild(okBtn);
+        action.appendChild(cancelbtn);
+
+        okBtn.addEventListener('click', ok);
+        cancelbtn.addEventListener('click', cancel);
+
+        content.appendChild(cTitle);
+        content.appendChild(body);
+        content.appendChild(action);
+
+        dialog.appendChild(overlay);
+        dialog.appendChild(content);
+        document.body.appendChild(dialog);
+        dialog.style.display = 'block';
+        content.classList.add('msc-confirm--animate');
+        cancelbtn.focus();
+
+        document.addEventListener('keyup', _hide);
+
+        function destroy() {
+            closeBtn.removeEventListener('click', destroy);
+            okBtn.removeEventListener('click', ok);
+            cancelbtn.removeEventListener('click', cancel);
+            document.removeEventListener('keyup', _hide);
+            document.body.removeChild(dialog);
+        }
+
+        function ok() {
+            destroy();
+            if(options.onOk !== null) {
+                options.onOk();
+            }
+        }
+
+        function cancel() {
+            destroy();
+            if(options.onCancel !== null) {
+                options.onCancel();
+            }
+        }
+
+        function _hide(e) {
+            if(e.keyCode == 27) {
+                destroy();
+            }
+        }
+    };
+
+    //window.msc = MscConfirm;
+    window.mscConfirm = MscConfirm;
+})();
+
Index: trunk/modules/droplets/templates/default/js/tip_balloon.js
===================================================================
--- trunk/modules/droplets/templates/default/js/tip_balloon.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/tip_balloon.js	(revision 2)
@@ -0,0 +1,221 @@
+/*
+tip_balloon.js  v. 1.81
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 2.2.2009
+
+Extension for the tooltip library wz_tooltip.js.
+Implements balloon tooltips.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. Balloon a command BALLOON will automatically be
+// created.
+
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+config. Balloon                = false    // true or false - set to true if you want this to be the default behaviour
+config. BalloonImgPath         = Droplet.AddonUrl+"/img/tip_balloon/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file.
+// Sizes of balloon images
+config. BalloonEdgeSize        = 6        // Integer - sidelength of quadratic corner images
+config. BalloonStemWidth       = 15    // Integer
+config. BalloonStemHeight      = 19    // Integer
+config. BalloonStemOffset      = -7    // Integer - horizontal offset of left stem edge from mouse (recommended: -stemwidth/2 to center the stem above the mouse)
+config. BalloonImgExt          = "gif";// File name extension of default balloon images, e.g. "gif" or "png"
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here balloon, is unique amongst the extensions available for wz_tooltips.js):
+var balloon = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+
+balloon.OnLoadConfig = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        // Turn off native style properties which are not appropriate
+        balloon.padding = Math.max(tt_aV[PADDING] - tt_aV[BALLOONEDGESIZE], 0);
+        balloon.width = tt_aV[WIDTH];
+        //if(tt_bBoxOld)
+        //    balloon.width += (balloon.padding << 1);
+        tt_aV[BORDERWIDTH] = 0;
+        tt_aV[WIDTH] = 0;
+        tt_aV[PADDING] = 0;
+        tt_aV[BGCOLOR] = "";
+        tt_aV[BGIMG] = "";
+        tt_aV[SHADOW] = false;
+        // Append slash to img path if missing
+        if(tt_aV[BALLOONIMGPATH].charAt(tt_aV[BALLOONIMGPATH].length - 1) != '/')
+            tt_aV[BALLOONIMGPATH] += "/";
+        return true;
+    }
+    return false;
+};
+balloon.OnCreateContentString = function()
+{
+    if(!tt_aV[BALLOON])
+        return false;
+        
+    var aImg, sImgZ, sCssCrn, sVaT, sVaB, sCss0;
+
+    // Cache balloon images in advance:
+    // Either use the pre-cached default images...
+    if(tt_aV[BALLOONIMGPATH] == config.BalloonImgPath)
+        aImg = balloon.aDefImg;
+    // ...or load images from different directory
+    else
+        aImg = Balloon_CacheImgs(tt_aV[BALLOONIMGPATH], tt_aV[BALLOONIMGEXT]);
+    sCss0 = 'padding:0;margin:0;border:0;line-height:0;overflow:hidden;';
+    sCssCrn = ' style="position:relative;width:' + tt_aV[BALLOONEDGESIZE] + 'px;' + sCss0 + 'overflow:hidden;';
+    sVaT = 'vertical-align:top;" valign="top"';
+    sVaB = 'vertical-align:bottom;" valign="bottom"';
+    sImgZ = '" style="' + sCss0 + '" />';
+    
+    tt_sContent = '<table  style="width:auto;padding:0;margin:0;left:0;top:0;border-collapse: collapse;"><tr>'
+        // Left-top corner
+        + '<td' + sCssCrn + sVaB + '>'
+        + '<img src="' + aImg[1].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        // Top border
+        + '<td valign="bottom" style="position:relative;' + sCss0 + '">'
+        + '<img id="bALlOOnT" style="position:relative;top:1px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[9].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />'
+        + '<div style="position:relative;z-index:0;top:0;' + sCss0 + 'width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[2].src + ');">'
+        + '</div>'
+        + '</td>'
+        // Right-top corner
+        + '<td' + sCssCrn + sVaB + '>'
+        + '<img src="' + aImg[3].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        + '</tr><tr>'
+        // Left border (background-repeat fix courtesy Dirk Schnitzler)
+        + '<td style="position:relative;background-repeat:repeat;' + sCss0 + 'width:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[8].src + ');">'
+        // Redundant image for bugous old Geckos which won't auto-expand TD height to 100%
+        + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[8].src + sImgZ
+        + '</td>'
+        // Content
+        + '<td id="bALlO0nBdY" style="position:relative;line-height:normal;background-repeat:repeat;'
+        + ';background-image:url(' + aImg[0].src + ')'
+        + ';color:' + tt_aV[FONTCOLOR]
+        + ';font-family:' + tt_aV[FONTFACE]
+        + ';font-size:' + tt_aV[FONTSIZE]
+        + ';font-weight:' + tt_aV[FONTWEIGHT]
+        + ';text-align:' + tt_aV[TEXTALIGN]
+        + ';padding:' + balloon.padding + 'px'
+        + ';width:' + ((balloon.width > 0) ? (balloon.width + 'px') : 'auto')
+        + ';">' + tt_sContent + '</td>'
+        // Right border
+        + '<td style="position:relative;background-repeat:repeat;' + sCss0 + 'width:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[4].src + ');">'
+        // Image redundancy for bugous old Geckos that won't auto-expand TD height to 100%
+        + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[4].src + sImgZ
+        + '</td>'
+        + '</tr><tr>'
+        // Left-bottom corner
+        + '<td' + sCssCrn + sVaT + '>'
+        + '<img src="' + aImg[7].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        // Bottom border
+        + '<td valign="top" style="position:relative;' + sCss0 + '">'
+        + '<div style="position:relative;left:0;top:0;' + sCss0 + 'width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[6].src + ');"></div>'
+        + '<img id="bALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[10].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />'
+        + '</td>'
+        // Right-bottom corner
+        + '<td' + sCssCrn + sVaT + '>'
+        + '<img src="' + aImg[5].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        + '</tr></table>';//alert(tt_sContent);
+    return true;
+};
+balloon.OnSubDivsCreated = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        var bdy = tt_GetElt("bALlO0nBdY");
+
+        // Insert a TagToTip() HTML element into the central body TD
+        if (tt_t2t && !tt_aV[COPYCONTENT] && bdy)
+            tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), bdy);
+        balloon.iStem = tt_aV[ABOVE] * 1;
+        balloon.aStem = [tt_GetElt("bALlOOnT"), tt_GetElt("bALlOOnB")];
+        balloon.aStem[balloon.iStem].style.display = "inline";
+        if (balloon.width < -1)
+            Balloon_MaxW(bdy);
+        return true;
+    }
+    return false;
+};
+// Display the stem appropriately
+balloon.OnMoveAfter = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        var iStem = (tt_aV[ABOVE] != tt_bJmpVert) * 1;
+
+        // Tooltip position vertically flipped?
+        if(iStem != balloon.iStem)
+        {
+            // Display opposite stem
+            balloon.aStem[balloon.iStem].style.display = "none";
+            balloon.aStem[iStem].style.display = "inline";
+            balloon.iStem = iStem;
+        }
+        
+        balloon.aStem[iStem].style.left = Balloon_CalcStemX() + "px";
+        return true;
+    }
+    return false;
+};
+function Balloon_CalcStemX()
+{
+    var x = tt_musX - tt_x + tt_aV[BALLOONSTEMOFFSET] - tt_aV[BALLOONEDGESIZE];
+    return Math.max(Math.min(x, tt_w - tt_aV[BALLOONSTEMWIDTH] - (tt_aV[BALLOONEDGESIZE] << 1) - 2), 2);
+}
+function Balloon_CacheImgs(sPath, sExt)
+{
+    var asImg = ["background", "lt", "t", "rt", "r", "rb", "b", "lb", "l", "stemt", "stemb"],
+    n = asImg.length,
+    aImg = new Array(n),
+    img;
+
+    while(n)
+    {--n;
+        img = aImg[n] = new Image();
+        img.src = sPath + asImg[n] + "." + sExt;
+    }
+    return aImg;
+}
+function Balloon_MaxW(bdy)
+{
+    if (bdy)
+    {
+        var iAdd = tt_bBoxOld ? (balloon.padding << 1) : 0, w = tt_GetDivW(bdy);
+        if (w > -balloon.width + iAdd)
+            bdy.style.width = (-balloon.width + iAdd) + "px";
+    }
+}
+// This mechanism pre-caches the default images specified by
+// congif.BalloonImgPath, so, whenever a balloon tip using these default images
+// is created, no further server connection is necessary.
+function Balloon_PreCacheDefImgs()
+{
+    // Append slash to img path if missing
+    if(config.BalloonImgPath.charAt(config.BalloonImgPath.length - 1) != '/')
+        config.BalloonImgPath += "/";
+    // Preload default images into array
+    balloon.aDefImg = Balloon_CacheImgs(config.BalloonImgPath, config.BalloonImgExt);
+}
+Balloon_PreCacheDefImgs();
Index: trunk/modules/droplets/templates/default/js/tip_centerwindow.js
===================================================================
--- trunk/modules/droplets/templates/default/js/tip_centerwindow.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/tip_centerwindow.js	(revision 2)
@@ -0,0 +1,104 @@
+/*
+tip_centerwindow.js  v. 1.21
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 3.6.2008
+
+Extension for the tooltip library wz_tooltip.js.
+Centers a sticky tooltip in the window's visible clientarea,
+optionally even if the window is being scrolled or resized.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. CenterWindow a command CENTERWINDOW will automatically be
+// created.
+
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+config. CenterWindow = false    // true or false - set to true if you want this to be the default behaviour
+config. CenterAlways = false    // true or false - recenter if window is resized or scrolled
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here ctrwnd, is unique amongst the extensions available for
+// wz_tooltips.js):
+var ctrwnd = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+ctrwnd.OnLoadConfig = function()
+{
+    if(tt_aV[CENTERWINDOW])
+    {
+        // Permit CENTERWINDOW only if the tooltip is sticky
+        if(tt_aV[STICKY])
+        {
+            if(tt_aV[CENTERALWAYS])
+            {
+                // IE doesn't support style.position "fixed"
+                if(tt_ie)
+                    tt_AddEvtFnc(window, "scroll", Ctrwnd_DoCenter);
+                else
+                    tt_aElt[0].style.position = "fixed";
+                tt_AddEvtFnc(window, "resize", Ctrwnd_DoCenter);
+            }
+            return true;
+        }
+        tt_aV[CENTERWINDOW] = false;
+    }
+    return false;
+};
+// We react on the first OnMouseMove event to center the tip on that occasion
+ctrwnd.OnMoveBefore = Ctrwnd_DoCenter;
+ctrwnd.OnKill = function()
+{
+    if(tt_aV[CENTERWINDOW] && tt_aV[CENTERALWAYS])
+    {
+        tt_RemEvtFnc(window, "resize", Ctrwnd_DoCenter);
+        if(tt_ie)
+            tt_RemEvtFnc(window, "scroll", Ctrwnd_DoCenter);
+        else
+            tt_aElt[0].style.position = "absolute";
+    }
+    return false;
+};
+// Helper function
+function Ctrwnd_DoCenter()
+{
+    if(tt_aV[CENTERWINDOW])
+    {
+        var x, y, dx, dy;
+
+        // Here we use some functions and variables (tt_w, tt_h) which the
+        // extension API of wz_tooltip.js provides for us
+        if(tt_ie || !tt_aV[CENTERALWAYS])
+        {
+            dx = tt_GetScrollX();
+            dy = tt_GetScrollY();
+        }
+        else
+        {
+            dx = 0;
+            dy = 0;
+        }
+        // Position the tip, offset from the center by OFFSETX and OFFSETY
+        x = (tt_GetClientW() - tt_w) / 2 + dx + tt_aV[OFFSETX];
+        y = (tt_GetClientH() - tt_h) / 2 + dy + tt_aV[OFFSETY];
+        tt_SetTipPos(x, y);
+        return true;
+    }
+    return false;
+}
Index: trunk/modules/droplets/templates/default/js/tip_followscroll.js
===================================================================
--- trunk/modules/droplets/templates/default/js/tip_followscroll.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/tip_followscroll.js	(revision 2)
@@ -0,0 +1,88 @@
+/*
+tip_followscroll.js    v. 1.11
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 3.6.2008
+
+Extension for the tooltip library wz_tooltip.js.
+Lets a "sticky" tooltip keep its position inside the clientarea if the window
+is scrolled.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. FollowScroll a command FOLLOWSCROLL will automatically be
+// created.
+
+//===================    GLOBAL TOOLTIP CONFIGURATION    ======================//
+config. FollowScroll = false        // true or false - set to true if you want this to be the default behaviour
+//=======    END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW    ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here fscrl, is unique amongst the extensions available for
+// wz_tooltips.js):
+var fscrl = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+fscrl.OnShow = function()
+{
+    if(tt_aV[FOLLOWSCROLL])
+    {
+        // Permit FOLLOWSCROLL only if the tooltip is sticky
+        if(tt_aV[STICKY])
+        {
+            var x = tt_x - tt_GetScrollX(), y = tt_y - tt_GetScrollY();
+
+            if(tt_ie)
+            {
+                fscrl.MoveOnScrl.offX = x;
+                fscrl.MoveOnScrl.offY = y;
+                fscrl.AddRemEvtFncs(tt_AddEvtFnc);
+            }
+            else
+            {
+                tt_SetTipPos(x, y);
+                tt_aElt[0].style.position = "fixed";
+            }
+            return true;
+        }
+        tt_aV[FOLLOWSCROLL] = false;
+    }
+    return false;
+};
+fscrl.OnHide = function()
+{
+    if(tt_aV[FOLLOWSCROLL])
+    {
+        if(tt_ie)
+            fscrl.AddRemEvtFncs(tt_RemEvtFnc);
+        else
+            tt_aElt[0].style.position = "absolute";
+    }
+};
+// Helper functions (encapsulate in the class to avoid conflicts with other
+// extensions)
+fscrl.MoveOnScrl = function()
+{
+    tt_SetTipPos(fscrl.MoveOnScrl.offX + tt_GetScrollX(), fscrl.MoveOnScrl.offY + tt_GetScrollY());
+};
+fscrl.AddRemEvtFncs = function(PAddRem)
+{
+    PAddRem(window, "resize", fscrl.MoveOnScrl);
+    PAddRem(window, "scroll", fscrl.MoveOnScrl);
+};
+
Index: trunk/modules/droplets/templates/default/js/transparentpixel.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/templates/default/js/transparentpixel.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/templates/default/js/wz_dragdrop.js
===================================================================
--- trunk/modules/droplets/templates/default/js/wz_dragdrop.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/wz_dragdrop.js	(revision 2)
@@ -0,0 +1,1437 @@
+/* This notice must be untouched at all times, and must not be removed.
+
+wz_dragdrop.js	v. 4.91
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Copyright (c) Walter Zorn. All rights reserved.
+Created 26. 8. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
+Last modified: 10.10.2008
+
+This DHTML & Drag&Drop Library adds Drag&Drop functionality to:
+- images, even those not positioned via layers,
+  nor via stylesheets or any other kind of "hard-coding";
+- relatively and absolutely positioned layers (DIV elements).
+Moreover, it provides extended DHTML capabilities.
+
+LICENSE: LGPL
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License (LGPL) 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.
+
+For more details on the GNU Lesser General Public License,
+see http://www.gnu.org/copyleft/lesser.html
+*/
+
+
+// PATH TO THE TRANSPARENT 1*1 PX IMAGE (required by NS 4 as spacer)
+var spacer = 'transparentpixel.gif';
+
+
+
+
+//window.onerror = new Function('return true;');
+
+
+// Optional commands passed to SET_DHTML() on the html-page (g: may be applied globally, i: individually)
+var CLONE            = 'C10nE';   // i  img      clone image
+var COPY            = 'C0pY';    // i  img      create copies
+var DETACH_CHILDREN = 'd37aCH';  // i  lyr      detach images
+var HORIZONTAL        = 'H0r1Z';   // i  img,lyr  horizontally draggable only
+var MAXHEIGHT        = 'm7x8I';   // i  img,lyr  maximum height limit, "
+var MAXOFFBOTTOM    = 'm7xd0wN'; // i  img,lyr  downward offset limit
+var MAXOFFLEFT        = 'm7x23Ft'; // i  img,lyr  leftward offset limit
+var MAXOFFRIGHT        = 'm7x0Ff8'; // i  img,lyr  rightward offset limit
+var MAXOFFTOP        = 'm7xu9';   // i  img,lyr  upward offset limit
+var MAXWIDTH        = 'm7xW1';   // i  img,lyr  maximum width limit, use with resizable or scalable
+var MINWIDTH        = 'm1nw1';   // i  img,lyr  minimum width limit, "
+var MINHEIGHT        = 'm1n8I';   // i  img,lyr  minimum height limit, "
+var NO_ALT            = 'no81T';   // gi img      disable alt and title attributes
+var NO_DRAG            = 'N0d4Ag';  // i  img,lyr  disable draggability
+var RESET_Z            = 'r35E7z';  // gi img,lyr  reset z-index when dropped
+var RESIZABLE        = 'r5IZbl';  // gi img,lyr  resizable if <ctrl> or <shift> pressed
+var SCALABLE        = 'SCLbl';   // gi img,lyr  scalable           "
+var SCROLL            = 'sC8lL';   // gi img,lyr  enable auto scroll functionality
+var TRANSPARENT        = 'dIApHAn'; // gi img,lyr  translucent while dragged
+var VERTICAL        = 'V3Rt1C';  // i  img,lyr  vertically draggable only
+var dd_cursors = new Array(
+	'c:default',
+	'c:crosshair',
+	'c:e-resize',
+	'c:hand',
+	'c:help',
+	'c:move',
+	'c:n-resize',
+	'c:ne-resize',
+	'c:nw-resize',
+	'c:s-resize',
+	'c:se-resize',
+	'c:sw-resize',
+	'c:text',
+	'c:w-resize',
+	'c:wait'
+);
+for(var dd_i = dd_cursors.length; dd_i;)
+{--dd_i;
+	eval('var CURSOR_' + (dd_cursors[dd_i].substring(2).toUpperCase().replace('-', '_')) + ' = "' + dd_cursors[dd_i] + '";');
+}
+var dd_u = "undefined";
+function WZDD()
+{
+	this.elements = new Array(0);
+	this.obj = null;
+	this.n = navigator.userAgent.toLowerCase();
+	this.db = (document.compatMode && document.compatMode.toLowerCase() != "backcompat")?
+		document.documentElement
+		: (document.body || null);
+	this.op = !!(window.opera && document.getElementById);
+	if(this.op) document.onmousedown = new Function('e',
+		'if(((e = e || window.event).target || e.srcElement).tagName == "IMAGE") return false;');
+	this.ie = !!(this.n.indexOf("msie") >= 0 && document.all && this.db && !this.op);
+	this.iemac = !!(this.ie && this.n.indexOf("mac") >= 0);
+	this.ie4 = !!(this.ie && !document.getElementById);
+	this.n4 = !!(document.layers && typeof document.classes != dd_u);
+	this.n6 = !!(typeof window.getComputedStyle != dd_u && typeof document.createRange != dd_u);
+	this.w3c = !!(!this.op && !this.ie && !this.n6 && document.getElementById);
+	this.ce = !!(document.captureEvents && document.releaseEvents && !this.n6);
+	this.px = this.n4? '' : 'px';
+	this.tWait = this.w3c? 40 : 10;
+	this.noRecalc = false;
+}
+var dd = new WZDD();
+
+dd.Int = function(d_x, d_y)
+{
+	return isNaN(d_y = parseInt(d_x))? 0 : d_y;
+};
+dd.getWndW = function()
+{
+	return dd.Int(
+		(dd.db && !dd.op && !dd.w3c && dd.db.clientWidth)? dd.db.clientWidth
+		: (window.innerWidth || 0)
+	);
+};
+dd.getWndH = function()
+{
+	return dd.Int(
+		(dd.db && !dd.op && !dd.w3c && dd.db.clientHeight)? dd.db.clientHeight
+		: (window.innerHeight || 0)
+	);
+};
+dd.getScrollX = function()
+{
+	return dd.Int(window.pageXOffset || (dd.db? dd.db.scrollLeft : 0));
+};
+dd.getScrollY = function()
+{
+	return dd.Int(window.pageYOffset || (dd.db? dd.db.scrollTop : 0));
+};
+dd.getPageXY = function(d_o)
+{
+	if(dd.n4 && d_o)
+	{
+		dd.x = d_o.pageX || 0;
+		dd.y = d_o.pageY || 0;
+	}
+	else
+	{
+		dd.x = dd.y = 0; //global helper vars
+		while(d_o)
+		{
+			dd.x += dd.Int(d_o.offsetLeft);
+			dd.y += dd.Int(d_o.offsetTop);
+			d_o = d_o.offsetParent || null;
+		}
+	}
+};
+dd.getCssXY = function(d_o)
+{
+	if(d_o.div)
+	{
+		if(dd.n4)
+		{
+			d_o.cssx = d_o.div.x;
+			d_o.cssy = d_o.div.y;
+		}
+		else if(dd.ie4)
+		{
+			d_o.cssx = d_o.css.pixelLeft;
+			d_o.cssy = d_o.css.pixelTop;
+		}
+		else
+		{
+			d_o.css.left = d_o.css.top = 0 + dd.px;
+			dd.getPageXY(d_o.div);
+			d_o.cssx = d_o.x - dd.x;
+			d_o.cssy = d_o.y - dd.y;
+			d_o.css.left = d_o.cssx + dd.px;
+			d_o.css.top = d_o.cssy + dd.px;
+		}
+	}
+	else
+	{
+		d_o.cssx = 0;
+		d_o.cssy = 0;
+	}
+};
+dd.getImgW = function(d_o)
+{
+	return d_o? dd.Int(d_o.width) : 0;
+};
+dd.getImgH = function(d_o)
+{
+	return d_o? dd.Int(d_o.height) : 0;
+};
+dd.getDivW = function(d_o)
+{
+	return dd.Int(
+		dd.n4? (d_o.div? d_o.div.clip.width : 0)
+		: d_o.div? (d_o.div.offsetWidth || d_o.css.pixelWidth || d_o.css.width || 0)
+		: 0
+	);
+};
+dd.getDivH = function(d_o)
+{
+	return dd.Int(
+		dd.n4? (d_o.div? d_o.div.clip.height : 0)
+		: d_o.div? (d_o.div.offsetHeight || d_o.css.pixelHeight || d_o.css.height || 0)
+		: 0
+	);
+};
+dd.getWH = function(d_o)
+{
+	d_o.w = dd.getDivW(d_o);
+	d_o.h = dd.getDivH(d_o);
+	if(d_o.css)
+	{
+		d_o.css.width = d_o.w + dd.px;
+		d_o.css.height = d_o.h + dd.px;
+		d_o.dw = dd.getDivW(d_o)-d_o.w;
+		d_o.dh = dd.getDivH(d_o)-d_o.h;
+		d_o.css.width = (d_o.w-d_o.dw) + dd.px;
+		d_o.css.height = (d_o.h-d_o.dh) + dd.px;
+	}
+	else d_o.dw = d_o.dh = 0;
+};
+dd.getCssProp = function(d_o, d_pn6, d_pstyle, d_pn4)
+{
+	if(d_o && dd.n6) return ''+window.getComputedStyle(d_o, null).getPropertyValue(d_pn6);
+	if(d_o && d_o.currentStyle) return ''+eval('d_o.currentStyle.'+d_pstyle);
+	if(d_o && d_o.style) return ''+eval('d_o.style.'+d_pstyle);
+	if(d_o && dd.n4) return ''+eval('d_o.'+d_pn4);
+	return '';
+};
+dd.getDiv = function(d_x, d_d)
+{
+	d_d = d_d || document;
+	if(dd.n4)
+	{
+		if(d_d.layers[d_x]) return d_d.layers[d_x];
+		for(var d_i = d_d.layers.length; d_i;)
+		{
+			var d_y = dd.getDiv(d_x, d_d.layers[--d_i].document);
+			if(d_y) return d_y;
+		}
+	}
+	if(dd.ie) return d_d.all[d_x] || null;
+	if(d_d.getElementById) return d_d.getElementById(d_x) || null;
+	return null;
+};
+dd.getImg = function(d_o, d_nm, d_xy, d_w)
+{
+	d_w = d_w || window;
+	var d_img;
+	if(document.images && (d_img = d_w.document.images[d_nm]))
+	{
+		if(d_xy)
+		{
+			if(dd.n4)
+			{
+				dd.getPageXY(d_w);
+				d_o.defx = d_img.x + dd.x;
+				d_o.defy = d_img.y + dd.y;
+			}
+			else
+			{
+				dd.getPageXY(d_img);
+				d_o.defx = dd.x;
+				d_o.defy = dd.y;
+			}
+		}
+		return d_img;
+	}
+	if(dd.n4) for(var d_i = d_w.document.layers.length; d_i;)
+	{
+		var d_y = dd.getImg(d_o, d_nm, d_xy, d_w.document.layers[--d_i]);
+		if(d_y) return d_y;
+	}
+	return null;
+};
+dd.getParent = function(d_o, d_p)
+{
+	if(dd.n4)
+	{
+		for(var d_i = dd.elements.length; d_i;)
+		{
+			if(!((d_p = dd.elements[--d_i]).is_image) && d_p.div && (d_p.div.document.layers[d_o.name] || d_o.oimg && d_p.div.document.images[d_o.oimg.name]))
+				d_p.addChild(d_o, d_p.detach, 1);
+		}
+	}
+	else
+	{
+		d_p = d_o.is_image? dd.getImg(d_o, d_o.oimg.name) : (d_o.div || null);
+		while(d_p && !!(d_p = d_p.offsetParent || d_p.parentNode || null))
+		{
+			if(d_p.ddObj)
+			{
+				d_p.ddObj.addChild(d_o, d_p.ddObj.detach, 1);
+				break;
+			}
+		}
+	}
+};
+dd.getCmd = function(d_o, d_cmd, d_cmdStr)
+{
+	var d_i = d_o.id.indexOf(d_cmd), d_j,
+	d_y = (d_i >= 0)*1;
+	if(d_y)
+	{
+		d_j = d_i+d_cmd.length;
+		if(d_cmdStr) d_o.cmd += d_o.id.substring(d_i, d_j);
+		d_o.id = d_o.id.substring(0, d_i) + d_o.id.substring(d_j);
+	}
+	return d_y;
+};
+dd.getCmdVal = function(d_o, d_cmd, d_cmdStr, int0)
+{
+	var d_i = d_o.id.indexOf(d_cmd), d_j,
+	d_y = (d_o.id.indexOf(d_cmd) >= 0)? dd.Int(d_o.id.substring(d_o.id.indexOf(d_cmd)+d_cmd.length)) : int0? -1 : 0;
+	if(!int0 && d_y || int0 && d_y >= 0)
+	{
+		d_j = d_i+d_cmd.length+(""+d_y).length;
+		if(d_cmdStr) d_o.cmd += d_o.id.substring(d_i, d_j);
+		d_o.id = d_o.id.substring(0, d_i) + d_o.id.substring(d_j);
+	}
+	return d_y;
+};
+dd.addElt = function(d_o, d_p)
+{
+	dd.elements[d_o.name] = dd.elements[d_o.index = dd.elements.length] = d_o;
+	if(d_p) d_p.copies[d_o.name] = d_p.copies[d_p.copies.length] = d_o;
+};
+dd.mkWzDom = function()
+{
+	var d_o, d_l = dd.elements.length, d_i;
+	for(d_i = d_l; d_i;) dd.getParent(dd.elements[--d_i]);
+	for(d_i = d_l; d_i;)
+	{
+		if((d_o = dd.elements[--d_i]).children && !d_o.parent)
+		{
+			for(var d_j = d_o.children.length; d_j;)
+			{--d_j;
+				d_o.children[d_j].setZ(d_o.z+d_o.children[d_j].z, 1);
+			}
+		}
+	}
+};
+dd.addProps = function(d_o)
+{
+	if(d_o.is_image)
+	{
+		d_o.div = dd.getDiv(d_o.id);
+		d_o.css = (d_o.div && typeof d_o.div.style != dd_u)? d_o.div.style : null;
+		d_o.nimg = (dd.n4 && d_o.div)? d_o.div.document.images[0] : (document.images[d_o.id+"NI1m6G"] || null);
+		if(!d_o.noalt && !dd.noalt && d_o.nimg && d_o.oimg)
+		{
+			d_o.nimg.alt = d_o.oimg.alt || '';
+			d_o.nimg.title = d_o.oimg.title;
+			d_o.nimg.onmouseover = d_o.oimg.onmouseover;
+			d_o.nimg.onmouseout = d_o.oimg.onmouseout;
+		}
+		d_o.bgColor = '';
+	}
+	else
+	{
+		d_o.bgColor = dd.getCssProp(d_o.div, 'background-color','backgroundColor','bgColor').toLowerCase();
+		if(dd.n6 && d_o.div)
+		{
+			var d_c = d_o.bgColor.toLowerCase();
+			if(d_c.indexOf('rgb') >= 0)
+			{
+				d_c = d_c.substring(4, d_c.length-1).split(',');
+				d_o.bgColor = '#';
+				for(var d_l = d_c.length, d_i = 0; d_i < d_l; d_i++) d_o.bgColor += parseInt(d_c[d_i]).toString(0x10);
+			}
+			else d_o.bgColor = d_c;
+		}
+	}
+	if(dd.scalable) d_o.scalable = d_o.resizable^1;
+	else if(dd.resizable) d_o.resizable = d_o.scalable^1;
+	d_o.setZ(d_o.defz);
+	d_o.cursor = d_o.cursor || dd.cursor || 'auto';
+	d_o._setCrs(d_o.nodrag? 'auto' : d_o.cursor);
+	d_o.diaphan = d_o.diaphan || dd.diaphan || 0;
+	d_o.opacity = 1.0;
+	d_o.visible = true;
+};
+dd.initz = function()
+{
+	if(!(dd && (dd.n4 || dd.n6 || dd.ie || dd.op || dd.w3c))) return;
+	else if(dd.n6 || dd.ie || dd.op || dd.w3c) dd.recalc(1);
+	var d_drag = (document.onmousemove == DRAG),
+	d_resize = (document.onmousemove == RESIZE);
+	if(dd.loadFunc) dd.loadFunc();
+	if(d_drag) dd.setMovHdl(DRAG);
+	else if(d_resize) dd.setMovHdl(RESIZE);
+	if(d_drag || d_resize) dd.setUpHdl(DROP);
+	dd.setDwnHdl(PICK);
+};
+dd.finlz = function()
+{
+	if(dd.ie && dd.elements)
+	{
+		dd.noRecalc = true;
+		for(var d_i = dd.elements.length; d_i;)
+			dd.elements[--d_i].del();
+		dd.noRecalc = false;
+	}
+	if(dd.uloadFunc) dd.uloadFunc();
+};
+dd.setCe = function(d_e, d_fnc)
+{
+	d_fnc? document.captureEvents(d_e) : document.releaseEvents(d_e);
+};
+dd.setDwnHdl = function(d_x)
+{
+	if(document.onmousedown != d_x)
+	{
+		dd.downFunc = document.onmousedown;
+		document.onmousedown = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEDOWN, d_x);
+	}
+};
+dd.setMovHdl = function(d_x)
+{
+	if(document.onmousemove != d_x)
+	{
+		dd.moveFunc = document.onmousemove;
+		document.onmousemove = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEMOVE, d_x);
+	}
+};
+dd.setUpHdl = function(d_x)
+{
+	if(document.onmouseup != d_x)
+	{
+		dd.upFunc = document.onmouseup;
+		document.onmouseup = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEUP, d_x);
+	}
+};
+dd.evt = function(d_e)
+{
+	this.but = (this.e = d_e || window.event).which || this.e.button || 0;
+	this.button = (this.e.type == 'mousedown')? this.but
+		: (dd.e && dd.e.button)? dd.e.button
+		: 0;
+	this.src = this.e.target || this.e.srcElement || null;
+	this.src.tag = ("" + (this.src.tagName || this.src)).toLowerCase();
+	this.x = dd.Int(this.e.pageX || this.e.clientX || 0);
+	this.y = dd.Int(this.e.pageY || this.e.clientY || 0);
+	if(dd.ie)
+	{
+		this.x += dd.getScrollX() - (dd.ie && !dd.iemac)*1;
+		this.y += dd.getScrollY() - (dd.ie && !dd.iemac)*1;
+	}
+	this.modifKey = this.e.modifiers? this.e.modifiers&Event.SHIFT_MASK : (this.e.shiftKey || false);
+};
+dd.getEventTarget = function(d_e, d_s, d_n)
+{
+	d_e = d_e || window.event;
+	if(d_e && (d_s = d_e.target || d_e.srcElement || null) != null)
+	{
+		if(null != (d_n = d_s.id || d_s.name || null))
+		{
+			if(d_n.indexOf("dIi15vNI1m6G") == d_n.length-12)
+				return dd.elements[d_n.substring(0, d_n.length-12)] || null;
+			if(d_n.indexOf("dIi15v") == d_n.length-6)
+				return dd.elements[d_n.substring(0, d_n.length-6)] || null;
+			return dd.elements[d_n] || null;
+		}
+	}
+	return null;
+};
+dd.recalc = function(d_x)
+{
+	if(dd.noRecalc) return;
+	for(var d_o, d_i = dd.elements.length; d_i;)
+	{
+		if(!(d_o = dd.elements[--d_i]).is_image && d_o.div)
+		{
+			dd.getWH(d_o);
+			if(d_o.div.pos_rel)
+			{
+				dd.getPageXY(d_o.div);
+				var d_dx = dd.x - d_o.x, d_dy = dd.y - d_o.y;
+				d_o.defx += d_dx;
+				d_o.x += d_dx;
+				d_o.defy += d_dy;
+				d_o.y += d_dy;
+				for(var d_p, d_j = d_o.children.length; d_j;)
+				{
+					if(!(d_p = d_o.children[--d_j]).detached && (d_o != d_p.defparent || !(d_p.is_image && dd.getImg(d_p, d_p.oimg.name, 1))))
+					{
+						d_p.defx += d_dx;
+						d_p.defy += d_dy;
+						d_p.moveBy(d_dx, d_dy);
+					}
+				}
+			}
+		}
+		else if(d_o.is_image && !dd.n4)
+		{
+			if(dd.n6 && d_x && !d_o.defw) d_o.resizeTo(d_o.defw = dd.getImgW(d_o.oimg), d_o.defh = dd.getImgH(d_o.oimg));
+			var d_defx = d_o.defx, d_defy = d_o.defy;
+			if(!(d_o.parent && d_o.parent != d_o.defparent) && (d_x || !d_o.detached || d_o.horizontal || d_o.vertical) && dd.getImg(d_o, d_o.oimg.name, 1))
+				d_o.moveBy(d_o.defx-d_defx, d_o.defy-d_defy);
+		}
+	}
+};
+function WINSZ(d_x)
+{
+	if(d_x)
+	{
+		if(dd.n4)
+		{
+			dd.iW = innerWidth;
+			dd.iH = innerHeight;
+		}
+		window.onresize = new Function('WINSZ();');
+	}
+	else if(dd.n4 && (innerWidth != dd.iW || innerHeight != dd.iH)) location.reload();
+	else if(!dd.n4) setTimeout('dd.recalc()', 0xa);
+}
+WINSZ(1);
+
+function DDObj(d_o, d_i)
+{
+	this.id = d_o;
+	this.cmd = '';
+	this.cpy_n = dd.getCmdVal(this, COPY);
+	this.maxoffb = dd.getCmdVal(this, MAXOFFBOTTOM, 0, 1);
+	this.maxoffl = dd.getCmdVal(this, MAXOFFLEFT, 0, 1);
+	this.maxoffr = dd.getCmdVal(this, MAXOFFRIGHT, 0, 1);
+	this.maxofft = dd.getCmdVal(this, MAXOFFTOP, 0, 1);
+	var d_j = dd_cursors.length; while(d_j--)
+		if(dd.getCmd(this, dd_cursors[d_j], 1)) this.cursor = dd_cursors[d_j].substring(2);
+	this.clone = dd.getCmd(this, CLONE, 1);
+	this.detach = dd.getCmd(this, DETACH_CHILDREN);
+	this.scalable = dd.getCmd(this, SCALABLE, 1);
+	this.horizontal = dd.getCmd(this, HORIZONTAL);
+	this.noalt = dd.getCmd(this, NO_ALT, 1);
+	this.nodrag = dd.getCmd(this, NO_DRAG);
+	this.scroll = dd.getCmd(this, SCROLL, 1);
+	this.resizable = dd.getCmd(this, RESIZABLE, 1);
+	this.re_z = dd.getCmd(this, RESET_Z, 1);
+	this.diaphan = dd.getCmd(this, TRANSPARENT, 1);
+	this.vertical = dd.getCmd(this, VERTICAL);
+	this.maxw = dd.getCmdVal(this, MAXWIDTH, 1, 1);
+	this.minw = Math.abs(dd.getCmdVal(this, MINWIDTH, 1, 1));
+	this.maxh = dd.getCmdVal(this, MAXHEIGHT, 1, 1);
+	this.minh = Math.abs(dd.getCmdVal(this, MINHEIGHT, 1, 1));
+	this.pickFunc = this.dragFunc = this.resizeFunc = this.dropFunc = null;
+
+	this.name = this.id + (d_i || '');
+	this.oimg = dd.getImg(this, this.id, 1);
+	this.is_image = !!this.oimg;
+	this.copies = new Array();
+	this.children = new Array();
+	this.parent = this.original = null;
+	if(this.oimg)
+	{
+		this.id = this.name + "dIi15v";
+		this.w = dd.getImgW(this.oimg);
+		this.h = dd.getImgH(this.oimg);
+		this.dw = this.dh = 0;
+		this.defz = dd.Int(dd.getCssProp(this.oimg, 'z-index','zIndex','zIndex')) || 1;
+		this.defsrc = this.src = this.oimg.src;
+		this.htm = '<img name="' + this.id + 'NI1m6G"'+
+			' src="' + this.oimg.src + '" '+
+			'width="' + this.w + '" height="' + this.h + '">';
+		this.t_htm = '<div id="' + this.id +
+			'" style="position:absolute;'+
+			'left:' + (this.cssx = this.x = this.defx) + 'px;'+
+			'top:' + (this.cssy = this.y = this.defy) + 'px;'+
+			'width:' + this.w + 'px;'+
+			'height:' + this.h + 'px;">'+
+			this.htm + '</div>';
+	}
+	else
+	{
+		if(!!(this.div = dd.getDiv(this.id)) && typeof this.div.style != dd_u) this.css = this.div.style;
+		dd.getWH(this);
+		if(this.div)
+		{
+			this.div.ddObj = this;
+			this.div.pos_rel = dd.getCssProp(this.div, 'position','position','position') == "relative";
+		}
+		dd.getPageXY(this.div);
+		this.defx = this.x = dd.x;
+		this.defy = this.y = dd.y;
+		dd.getCssXY(this);
+		this.defz = dd.Int(dd.getCssProp(this.div, 'z-index','zIndex','zIndex'));
+	}
+	this.defw = this.w || 0;
+	this.defh = this.h || 0;
+}
+DDObj.prototype.setPickFunc = function(d_x)
+{
+	this.pickFunc = d_x;
+};
+DDObj.prototype.setDragFunc = function(d_x)
+{
+	this.dragFunc = d_x;
+};
+DDObj.prototype.setResizeFunc = function(d_x)
+{
+	this.resizeFunc = d_x;
+};
+DDObj.prototype.setDropFunc = function(d_x)
+{
+	this.dropFunc = d_x;
+};
+DDObj.prototype.moveBy = function(d_x, d_y, d_kds, d_o)
+{
+	if(!this.div) return;
+	this.x += (d_x = dd.Int(d_x));
+	this.y += (d_y = dd.Int(d_y));
+	if(!d_kds || this.is_image || this.parent != this.defparent)
+	{
+		(d_o = this.css || this.div).left = (this.cssx += d_x) + dd.px;
+		d_o.top = (this.cssy += d_y) + dd.px;
+	}
+	for(var d_i = this.children.length; d_i;)
+	{
+		if(!(d_o = this.children[--d_i]).detached) d_o.moveBy(d_x, d_y, 1);
+		d_o.defx += d_x;
+		d_o.defy += d_y;
+	}
+};
+
+DDObj.prototype.moveTo = function(d_x, d_y)
+{
+	this.moveBy(dd.Int(d_x)-this.x, dd.Int(d_y)-this.y);
+};
+DDObj.prototype.hide = function(d_m, d_o, d_p)
+{
+	if(this.div && this.visible)
+	{
+		d_p = this.css || this.div;
+		if(d_m && !dd.n4)
+		{
+			this.display = dd.getCssProp(this.div, "display", "display", "display");
+			if(this.oimg)
+			{
+				this.oimg.display = dd.getCssProp(this.oimg, "display", "display", "display");
+				this.oimg.style.display = "none";
+			}
+			d_p.display = "none";
+			dd.recalc();
+		}
+		else d_p.visibility = "hidden";
+	}
+	this.visible = false;
+	for(var d_i = this.children.length; d_i;)
+		if(!(d_o = this.children[--d_i]).detached) d_o.hide(d_m);
+};
+DDObj.prototype.show = function(d_o, d_p)
+{
+	if(this.div)
+	{
+		d_p = this.css || this.div;
+		if(d_p.display && d_p.display == "none")
+		{
+			d_p.display = this.display || "block";
+			if(this.oimg) this.oimg.style.display = this.oimg.display || "inline";
+			dd.recalc();
+		}
+		else d_p.visibility = "visible";
+	}
+	this.visible = true;
+	for(var d_i = this.children.length; d_i;)
+		if(!(d_o = this.children[--d_i]).detached) d_o.show();
+};
+DDObj.prototype.resizeTo = function(d_w, d_h, d_o)
+{
+	if(!this.div) return;
+	d_w = (this.w = dd.Int(d_w))-this.dw;
+	d_h = (this.h = dd.Int(d_h))-this.dh;
+	if(dd.n4)
+	{
+		this.div.resizeTo(d_w, d_h);
+		if(this.is_image)
+		{
+			this.write('<img src="' + this.src + '" width="' + d_w + '" height="' + d_h + '">');
+			(this.nimg = this.div.document.images[0]).src = this.src;
+		}
+	}
+	else if(typeof this.css.pixelWidth != dd_u)
+	{
+		this.css.pixelWidth = d_w;
+		this.css.pixelHeight = d_h;
+		if(this.is_image)
+		{
+			(d_o = this.nimg.style).pixelWidth = d_w;
+			d_o.pixelHeight = d_h;
+		}
+	}
+	else
+	{
+		this.css.width = d_w + dd.px;
+		this.css.height = d_h + dd.px;
+		if(this.is_image)
+		{
+			(d_o = this.nimg).width = d_w;
+			d_o.height = d_h;
+			if(!d_o.complete) d_o.src = this.src;
+		}
+	}
+};
+DDObj.prototype.resizeBy = function(d_dw, d_dh)
+{
+	this.resizeTo(this.w+dd.Int(d_dw), this.h+dd.Int(d_dh));
+};
+DDObj.prototype.swapImage = function(d_x, d_cp)
+{
+	if(!this.nimg) return;
+	this.nimg.src = d_x;
+	this.src = this.nimg.src;
+	if(d_cp)
+	{
+		for(var d_i = this.copies.length; d_i;)
+		{--d_i;
+			this.copies[d_i].src = this.copies[d_i].nimg.src = this.nimg.src;
+		}
+	}
+};
+DDObj.prototype.setBgColor = function(d_x)
+{
+	if(dd.n4 && this.div) this.div.bgColor = d_x;
+	else if(this.css) this.css.background = d_x;
+	this.bgColor = d_x;
+};
+DDObj.prototype.write = function(d_x, d_o)
+{
+	this.text = d_x;
+	if(!this.div) return;
+	if(dd.n4)
+	{
+		(d_o = this.div.document).open();
+		d_o.write(d_x);
+		d_o.close();
+		dd.getWH(this);
+	}
+	else
+	{
+		this.css.height = 'auto';
+		this.div.innerHTML = d_x;
+		if(!dd.ie4) dd.recalc();
+		if(dd.ie4 || dd.n6) setTimeout('dd.recalc();', 0); // n6.0: recalc twice
+	}
+};
+DDObj.prototype.copy = function(d_n, d_p, d_b)
+{
+	if(!this.oimg) return;
+	d_b = (dd.ie && document.all.tags('body'))? document.all.tags('body')[0] : document.getElementsByTagName? (document.getElementsByTagName('body')[0] || dd.db) : dd.db;
+	for(d_n = d_n || 1; d_n > 0; --d_n)
+	{
+		var d_l = this.copies.length,
+		d_o = new DDObj(this.name+this.cmd, d_l+1);
+		if(dd.n4)
+		{
+			d_o.id = (d_p = new Layer(d_o.w)).name;
+			d_p.clip.height = d_o.h;
+			d_p.visibility = 'show';
+			(d_p = d_p.document).open();
+			d_p.write(d_o.htm);
+			d_p.close();
+		}
+		else if(d_b && d_b.insertAdjacentHTML) d_b.insertAdjacentHTML("AfterBegin", d_o.t_htm);
+		else if(document.createElement && d_b && d_b.appendChild)
+		{
+			d_b.appendChild(d_p = document.createElement("dIi15v"));
+			d_p.innerHTML = d_o.htm;
+			d_p.id = d_o.id;
+			d_p.style.position = 'absolute';
+			d_p.style.width = d_o.w + 'px';
+			d_p.style.height = d_o.h + 'px';
+		}
+		else if(d_b && d_b.innerHTML) d_b.innerHTML += d_o.t_htm;
+		d_o.defz = this.defz+1+d_l;
+		dd.addProps(d_o);
+		d_o.original = this;
+		dd.addElt(d_o, this);
+		if(this.parent)
+		{
+			this.parent.addChild(d_o, this.detached);
+			d_o.defparent = this.defparent;
+		}
+		d_o.moveTo(d_o.defx = this.defx, d_o.defy = this.defy);
+		if(dd.n4) d_o.defsrc = d_o.src = this.defsrc;
+		d_o.swapImage(this.src);
+	}
+};
+DDObj.prototype.addChild = function(d_kd, detach, defp)
+{
+	if(typeof d_kd != "object") d_kd = dd.elements[d_kd];
+	if(d_kd.parent && d_kd.parent == this || d_kd == this || !d_kd.is_image && d_kd.defparent && !defp) return;
+
+	this.children[this.children.length] = this.children[d_kd.name] = d_kd;
+	d_kd.detached = detach || 0;
+	if(defp) d_kd.defparent = this;
+	else if(this == d_kd.defparent && d_kd.is_image) dd.getImg(this, d_kd.oimg.name, 1);
+	if(!d_kd.defparent || this != d_kd.defparent)
+	{
+		d_kd.defx = d_kd.x;
+		d_kd.defy = d_kd.y;
+	}
+	if(!detach)
+	{
+		d_kd.defz = d_kd.defz+this.defz-(d_kd.parent? d_kd.parent.defz : 0)+(!d_kd.is_image*1);
+		d_kd.setZ(d_kd.z+this.z-(d_kd.parent? d_kd.parent.z : 0)+(!d_kd.is_image*1), 1);
+	}
+	if(d_kd.parent) d_kd.parent.removeChild(d_kd, 1);
+	d_kd.parent = this;
+};
+DDObj.prototype.removeChild = function(d_kd, d_newp)
+{
+	if(typeof d_kd != "object") d_kd = this.children[d_kd];
+	var d_oc = this.children, d_nc = new Array();
+	for(var d_i = 0; d_i < d_oc.length; d_i++)
+		if(d_oc[d_i] != d_kd) d_nc[d_nc.length] = d_oc[d_i];
+	this.children = d_nc;
+	d_kd.parent = null;
+	if(!d_newp)
+	{
+		d_kd.detached = d_kd.defp = 0;
+		if(d_kd.is_image) dd.getImg(d_kd, d_kd.oimg.name, 1);
+	}
+};
+DDObj.prototype.attachChild = function(d_kd)
+{
+	(d_kd = (typeof d_kd != "object")? this.children[d_kd]: d_kd).detached = 0;
+	d_kd.setZ(d_kd.defz + this.z-this.defz, 1);
+};
+DDObj.prototype.detachChild = function(d_kd)
+{
+	(d_kd = (typeof d_kd != "object")? this.children[d_kd]: d_kd).detached = 1;
+};
+DDObj.prototype.setZ = function(d_x, d_kds, d_o)
+{
+	if(d_kds)
+	{
+		for(var d_dz = d_x-this.z, d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o.setZ(d_o.z+d_dz, 1);
+	}
+	dd.z = Math.max(dd.z, this.z = this.div? ((this.css || this.div).zIndex = d_x) : 0);
+};
+DDObj.prototype.maximizeZ = function()
+{
+	this.setZ(dd.z+1, 1);
+};
+DDObj.prototype._resetZ = function(d_o)
+{
+	if(this.re_z || dd.re_z)
+	{
+		this.setZ(this.defz);
+		for(var d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o.setZ(d_o.defz);
+	}
+};
+DDObj.prototype.setOpacity = function(d_x)
+{
+	this.opacity = d_x;
+	this._setOpaRel(1.0, 1);
+};
+DDObj.prototype._setOpaRel = function(d_x, d_kd, d_y, d_o)
+{
+	if(this.css && (this.diaphan || d_kd))
+	{
+		d_y = this.opacity*d_x;
+		if(typeof this.css.MozOpacity != dd_u) this.css.MozOpacity = d_y;
+		else if (typeof this.css.opacity != dd_u) this.css.opacity = d_y;
+		else if(typeof this.css.filter != dd_u)
+			this.css.filter = "Alpha(opacity="+parseInt(100*d_y)+")";
+		for(var d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o._setOpaRel(d_x, 1);
+	}
+};
+DDObj.prototype.setCursor = function(d_x)
+{
+	this._setCrs(this.cursor = (d_x.indexOf('c:')+1)? d_x.substring(2) : d_x);
+};
+DDObj.prototype._setCrs = function(d_x)
+{
+	if(this.css) this.css.cursor = ((!dd.ie || dd.iemac) && d_x == 'hand')? 'pointer' : d_x;
+};
+DDObj.prototype.setDraggable = function(d_x)
+{
+	this.nodrag = !d_x*1;
+	this._setCrs(d_x? this.cursor : 'auto');
+};
+DDObj.prototype.setResizable = function(d_x)
+{
+	this.resizable = d_x*1;
+	if(d_x) this.scalable = 0;
+};
+DDObj.prototype.setScalable = function(d_x)
+{
+	this.scalable = d_x*1;
+	if(d_x) this.resizable = 0;
+};
+DDObj.prototype.setHorizontal = function(d_x)
+{
+	this.horizontal = d_x*1;
+};
+DDObj.prototype.setVertical = function(d_x)
+{
+	this.vertical = d_x*1;
+};
+DDObj.prototype.getEltBelow = function(d_ret, d_x, d_y)
+{
+	var d_o, d_cmp = -1, d_i = dd.elements.length; while(d_i--)
+	{
+		d_o = dd.elements[d_i];
+		d_x = d_o.x-this.w/2;
+		d_y = d_o.y-this.h/2;
+		if(d_o.visible && d_o.z < this.z && this.x >= d_x && this.x <= d_x+d_o.w && this.y >= d_y && this.y <= d_y+d_o.h)
+		{
+			if(d_o.z > d_cmp)
+			{
+				d_cmp = d_o.z;
+				d_ret = d_o;
+			}
+		}
+	}
+	return d_ret;
+};
+DDObj.prototype.del = function(d_os, d_o)
+{
+	var d_i, d_l;
+	if(this.parent && this.parent.removeChild) this.parent.removeChild(this);
+	if(this.original)
+	{
+		this.hide();
+		if(this.original.copies)
+		{
+			d_os = new Array();
+			for(d_l = this.original.copies.length, d_i = 0; d_i < d_l; d_i++)
+				if((d_o = this.original.copies[d_i]) != this) d_os[d_o.name] = d_os[d_os.length] = d_o;
+			this.original.copies = d_os;
+		}
+	}
+	else if(this.is_image)
+	{
+		this.hide();
+		if(this.oimg)
+		{
+		  if(dd.n4) this.oimg.src = this.defsrc;
+		  else this.oimg.style.visibility = 'visible';
+		}
+	}
+	else if(this.moveTo)
+	{
+		if(this.css) this.css.cursor = 'default';
+		this.moveTo(this.defx, this.defy);
+		this.resizeTo(this.defw, this.defh);
+	}
+	d_os = new Array();
+	for(d_l = dd.elements.length, d_i = 0; d_i < d_l; d_i++)
+	{
+		if((d_o = dd.elements[d_i]) != this) d_os[d_o.name] = d_os[d_o.index = d_os.length] = d_o;
+		else d_o._free();
+	}
+	dd.elements = d_os;
+	if(!dd.n4) dd.recalc();
+};
+DDObj.prototype._free = function()
+{
+	for(var d_i in this)
+		this[d_i] = null;
+	dd.elements[this.name] = null;
+};
+dd.n4RectVis = function(vis)
+{
+	for(var d_i = 4; d_i;)
+	{--d_i;
+		dd.rectI[d_i].visibility = dd.rectA[d_i].visibility = vis? 'show' : 'hide';
+		if(vis) dd.rectI[d_i].zIndex = dd.rectA[d_i].zIndex = dd.z+2;
+	}
+};
+dd.n4RectPos = function(d_o, d_x, d_y, d_w, d_h)
+{
+	d_o.x = d_x;
+	d_o.y = d_y;
+	d_o.clip.width = d_w;
+	d_o.clip.height = d_h;
+};
+// NN4: Draw img sizing rect
+dd.n4Rect = function(d_w, d_h)
+{
+	var d_i;
+	if(!dd.rectI)
+	{
+		dd.rectI = new Array();
+		dd.rectA = new Array();
+	}
+	if(!dd.rectI[0])
+	{
+		for(d_i = 4; d_i;)
+		{
+			(dd.rectI[--d_i] = new Layer(1)).bgColor = '#000000';
+			(dd.rectA[d_i] = new Layer(1)).bgColor = '#ffffff';
+		}
+	}
+	if(!dd.rectI[0].visibility || dd.rectI[0].visibility == 'hide') dd.n4RectVis(1);
+	dd.obj.w = d_w;
+	dd.obj.h = d_h;
+	for(d_i = 4; d_i;)
+	{--d_i;
+		dd.n4RectPos(dd.rectI[d_i], dd.obj.x + (!(d_i-1)? (dd.obj.w-1) : 0), dd.obj.y + (!(d_i-2)? (dd.obj.h-1) : 0), d_i&1 || dd.obj.w, !(d_i&1) || dd.obj.h);
+		dd.n4RectPos(dd.rectA[d_i], !(d_i-1)? dd.rectI[1].x+1 : (dd.obj.x-1), !(d_i-2)? dd.rectI[2].y+1 : (dd.obj.y-1), d_i&1 || dd.obj.w+2, !(d_i&1) || dd.obj.h+2);
+	}
+};
+dd.reszTo = function(d_w, d_h)
+{
+	if(dd.n4 && dd.obj.is_image) dd.n4Rect(d_w, d_h);
+	else dd.obj.resizeTo(d_w, d_h);
+};
+dd.embedVis = function(d_vis)
+{
+	var d_o = new Array('iframe', 'applet', 'embed', 'object');
+	for(var d_i = d_o.length; d_i;)
+	{--d_i;
+		var d_p = dd.ie? document.all.tags(d_o[d_i]) : document.getElementsByTagName? document.getElementsByTagName(d_o[d_i]) : null;
+		if(d_p)
+		{
+			for(var d_j = d_p.length; d_j;)
+			{
+				var d_q = d_p[--d_j];
+				while(d_q.offsetParent || d_q.parentNode)
+				{
+					if((d_q = d_q.parentNode || d_q.offsetParent || null) == dd.obj.div)
+					{
+						d_p[d_j].style.visibility = d_vis;
+						break;
+					}
+				}
+			}
+		}
+	}
+};
+
+dd.maxOffX = function(d_x, d_y)
+{
+	return(
+		(dd.obj.maxoffl+1 && (d_y = dd.obj.defx-dd.obj.maxoffl)-d_x > 0
+		|| dd.obj.maxoffr+1 && (d_y = dd.obj.defx+dd.obj.maxoffr)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.maxOffY = function(d_x, d_y)
+{
+	return(
+		(dd.obj.maxofft+1 && (d_y = dd.obj.defy-dd.obj.maxofft)-d_x > 0
+		|| dd.obj.maxoffb+1 && (d_y = dd.obj.defy+dd.obj.maxoffb)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.inWndW = function(d_x, d_y)
+{
+	var d_wx = dd.getScrollX(),
+	d_ww = dd.getWndW();
+	return(
+		((d_y = d_wx+2)-d_x > 0) || ((d_y = d_wx+d_ww+dd.obj.w-2)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.inWndH = function(d_x, d_y)
+{
+	var d_wy = dd.getScrollY(),
+	d_wh = dd.getWndH();
+	return(
+		((d_y = d_wy+2)-d_x > 0) || ((d_y = d_wy+d_wh+dd.obj.h-2)-d_x < 0)? d_y
+		: d_x
+	);
+};
+// These two funcs limit the size of element when mouseresized.
+// Implemented 22.5.2003 by Gregor Ltolf, modified by Walter Zorn
+dd.limW = function(d_w)
+{
+	return(
+		(dd.obj.minw-d_w > 0)? dd.obj.minw
+		: (dd.obj.maxw > 0 && dd.obj.maxw-d_w < 0)? dd.obj.maxw
+		: d_w
+	);
+};
+dd.limH = function(d_h)
+{
+	return(
+		(dd.obj.minh-d_h > 0)? dd.obj.minh
+		: (dd.obj.maxh > 0 && dd.obj.maxh-d_h < 0)? dd.obj.maxh
+		: d_h
+	);
+};
+// Optional autoscroll-page functionality. Courtesy Cedric Savarese.
+// Modified by Walter Zorn.
+function DDScroll()
+{
+	if(!dd.obj || !dd.obj.scroll && !dd.scroll || dd.ie4 || dd.whratio)
+	{
+		dd.scrx = dd.scry = 0;
+		return;
+	}
+	var d_bnd = 0x1c,
+	d_wx = dd.getScrollX(), d_wy = dd.getScrollY();
+	if(dd.msmoved)
+	{
+		var d_ww = dd.getWndW(), d_wh = dd.getWndH(), d_y;
+		dd.scrx = ((d_y = dd.e.x-d_ww-d_wx+d_bnd) > 0)? (d_y>>=2)*d_y
+			: ((d_y = d_wx+d_bnd-dd.e.x) > 0)? -(d_y>>=2)*d_y
+			: 0;
+		dd.scry = ((d_y = dd.e.y-d_wh-d_wy+d_bnd) > 0)? (d_y>>=2)*d_y
+			: ((d_y = d_wy+d_bnd-dd.e.y) > 0)? -(d_y>>=2)*d_y
+			: 0;
+	}
+	if(dd.scrx || dd.scry)
+	{
+		window.scrollTo(
+			d_wx + (dd.scrx = dd.obj.is_resized? dd.limW(dd.obj.w+dd.scrx)-dd.obj.w : dd.obj.vertical? 0 : (dd.maxOffX(dd.obj.x+dd.scrx)-dd.obj.x)),
+			d_wy + (dd.scry = dd.obj.is_resized? dd.limH(dd.obj.h+dd.scry)-dd.obj.h : dd.obj.horizontal? 0 : (dd.maxOffY(dd.obj.y+dd.scry)-dd.obj.y))
+		);
+		dd.obj.is_dragged? dd.obj.moveTo(dd.obj.x+dd.getScrollX()-d_wx, dd.obj.y+dd.getScrollY()-d_wy)
+			: dd.reszTo(dd.obj.w+dd.getScrollX()-d_wx, dd.obj.h+dd.getScrollY()-d_wy);
+	}
+	dd.msmoved = 0;
+	window.setTimeout('DDScroll()', 0x33);
+}
+function PICK(d_ev)
+{
+	dd.e = new dd.evt(d_ev);
+	if(dd.e.x >= dd.getWndW()+dd.getScrollX() || dd.e.y >= dd.getWndH()+dd.getScrollY()) return true; // on scrollbar
+	for(var d_o, d_t, d_cmp = -1, d_i = dd.elements.length; d_i;)
+	{
+		d_o = dd.elements[--d_i];
+		if(dd.n4 && dd.e.but > 1 && dd.e.src == d_o.oimg && !d_o.clone) return false;
+		if(d_o.visible && dd.e.but <= 1 && dd.e.x >= d_o.x && dd.e.x <= d_o.x+d_o.w && dd.e.y >= d_o.y && dd.e.y <= d_o.y+d_o.h)
+		{
+			if(d_o.z > d_cmp && (d_t = dd.e.src.tag).indexOf('inpu') < 0 && d_t.indexOf('texta') < 0 && d_t.indexOf('sele') < 0 && d_t.indexOf('opti') < 0 && d_t.indexOf('scrol') < 0)
+			{
+				d_cmp = d_o.z;
+				dd.obj = d_o;
+			}
+		}
+	}
+	if(dd.obj)
+	{
+		if(dd.obj.nodrag) dd.obj = null;
+		else
+		{
+			dd.e.e.cancelBubble = true;
+			var d_rsz = dd.e.modifKey && (dd.obj.resizable || dd.obj.scalable);
+			if(dd.op)
+			{
+				(d_o = document.getElementById('OpBlUr')).style.pixelLeft = dd.e.x;
+				d_o.style.pixelTop = dd.e.y;
+				(d_o = d_o.children[0].children[0]).focus();
+				d_o.blur();
+			}
+			else if(dd.ie && !dd.ie4)
+			{
+				if(document.selection && document.selection.empty) document.selection.empty();
+				dd.db.onselectstart = function()
+				{
+					event.returnValue = false;
+				};
+			}
+			if(d_rsz)
+			{
+				dd.obj._setCrs('se-resize');
+				dd.obj.is_resized = 1;
+				dd.whratio = dd.obj.scalable? dd.obj.defw/dd.obj.defh : 0;
+				if(dd.ie)
+				{
+					if(dd.ie4)
+					{
+						window.dd_x = dd.getScrollX();
+						window.dd_y = dd.getScrollY();
+					}
+					setTimeout(
+						'if(dd.obj && document.selection && document.selection.empty)'+
+						'{'+
+							'document.selection.empty();'+
+							'if(dd.ie4) window.scrollTo(window.dd_x, window.dd_y);'+
+						'}'
+					,0);
+				}
+				dd.setMovHdl(RESIZE);
+				dd.reszTo(dd.obj.w, dd.obj.h);
+			}
+			else
+			{
+				dd.obj.is_dragged = 1;
+				dd.setMovHdl(DRAG);
+			}
+			dd.setUpHdl(DROP);
+			dd.embedVis('hidden');
+			dd.obj._setOpaRel(0.7);
+			dd.obj.maximizeZ();
+			dd.ofx = dd.obj.x+dd.obj.w-dd.e.x;
+			dd.ofy = dd.obj.y+dd.obj.h-dd.e.y;
+			if(window.my_PickFunc) my_PickFunc();
+			if(dd.obj.pickFunc) dd.obj.pickFunc();
+			DDScroll();
+			return !(
+				dd.obj.is_resized
+				|| dd.n4 && dd.obj.is_image
+				|| dd.n6 || dd.w3c
+			);
+		}
+	}
+	if(dd.downFunc) return dd.downFunc(d_ev);
+	return true;
+}
+function DRAG(d_ev)
+{
+	if(!dd.obj || !dd.obj.visible) return true;
+	if(dd.ie4 || dd.w3c || dd.n6 || dd.obj.children.length > 0xf)
+	{
+		if(dd.wait) return false;
+		dd.wait = 1;
+		setTimeout('dd.wait = 0;', dd.tWait);
+	}
+	dd.e = new dd.evt(d_ev);
+	if(dd.ie && !dd.e.but)
+	{
+		DROP(d_ev);
+		return true;
+	}
+	dd.msmoved = 1;
+	dd.obj.moveTo(
+		dd.obj.vertical? dd.obj.x : dd.maxOffX(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.w),
+		dd.obj.horizontal? dd.obj.y : dd.maxOffY(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.h)
+	);
+
+	if(window.my_DragFunc) my_DragFunc();
+	if(dd.obj.dragFunc) dd.obj.dragFunc();
+	if(dd.moveFunc) return dd.moveFunc(d_ev);
+	return false;
+}
+function RESIZE(d_ev)
+{
+	if(!dd.obj || !dd.obj.visible) return true;
+	if(dd.wait) return false;
+	dd.wait = 1;
+	setTimeout('dd.wait = 0;', dd.tWait);
+	dd.e = new dd.evt(d_ev);
+	if(dd.ie && !dd.e.but)
+	{
+		DROP(d_ev);
+		return true;
+	}
+	dd.msmoved = 1;
+	var d_w = dd.limW(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.x), d_h;
+	if(!dd.whratio) d_h = dd.limH(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.y);
+	else
+	{
+		d_h = dd.limH(dd.inWndH(Math.round(d_w/dd.whratio)+dd.obj.y)-dd.obj.y);
+		d_w = Math.round(d_h*dd.whratio);
+	}
+	dd.reszTo(d_w, d_h);
+	if(window.my_ResizeFunc) my_ResizeFunc();
+	if(dd.obj.resizeFunc) dd.obj.resizeFunc();
+	if(dd.moveFunc) return dd.moveFunc(d_ev);
+	return false;
+}
+function DROP(d_ev)
+{
+	if(dd.obj)
+	{
+		if(dd.obj.is_dragged)
+		{
+			if(!dd.obj.is_image) dd.getWH(dd.obj);
+		}
+		else if(dd.n4)
+		{
+			if(dd.obj.is_image)
+			{
+				dd.n4RectVis(0);
+				dd.obj.resizeTo(dd.obj.w, dd.obj.h);
+			}
+		}
+		if(!dd.n4 || !dd.obj.is_image) dd.recalc();
+		dd.setMovHdl(dd.moveFunc);
+		dd.setUpHdl(dd.upFunc);
+		if(dd.db) dd.db.onselectstart = null;
+		dd.obj._setOpaRel(1.0);
+		dd.obj._setCrs(dd.obj.cursor);
+		dd.embedVis('visible');
+		dd.obj._resetZ();
+		dd.e = new dd.evt(d_ev);
+		if(window.my_DropFunc) my_DropFunc();
+		if(dd.obj.dropFunc) dd.obj.dropFunc();
+		dd.msmoved = dd.obj.is_dragged = dd.obj.is_resized = dd.whratio = 0;
+		dd.obj = null;
+	}
+	dd.setDwnHdl(PICK);
+}
+function SET_DHTML()
+{
+	var d_a = arguments, d_ai, d_htm = '', d_o, d_i = d_a.length;
+	while(d_i)
+	{
+		if(!(d_ai = d_a[--d_i]).indexOf('c:')) dd.cursor = d_ai.substring(2);
+		else if(d_ai == NO_ALT) dd.noalt = 1;
+		else if(d_ai == SCROLL) dd.scroll = 1;
+		else if(d_ai == RESET_Z) dd.re_z = 1;
+		else if(d_ai == RESIZABLE) dd.resizable = 1;
+		else if(d_ai == SCALABLE) dd.scalable = 1;
+		else if(d_ai == TRANSPARENT) dd.diaphan = 1;
+		else
+		{
+			d_o = new DDObj(d_ai);
+			dd.addElt(d_o);
+			d_htm += d_o.t_htm || '';
+			if(d_o.oimg && d_o.cpy_n)
+			{
+				for(var d_l = d_o.cpy_n, d_j = 0; d_j < d_l;)
+				{
+					var d_p = new DDObj(d_o.name+d_o.cmd, ++d_j);
+					dd.addElt(d_p, d_o);
+					d_p.defz = d_o.defz+d_j;
+					d_p.original = d_o;
+					d_htm += d_p.t_htm;
+				}
+			}
+		}
+	}
+	if (dd.n4 || dd.n6 || dd.ie || dd.op || dd.w3c) document.write(
+		(dd.n4? '<div style="position:absolute;"><\/div>\n'
+		: (dd.op && !dd.op6)? '<div id="OpBlUr" style="position:absolute;visibility:hidden;width:0px;height:0px;"><form><input type="text" style="width:0px;height:0px;"><\/form><\/div>'
+		: '') + d_htm
+	);
+	dd.z = 0x33;
+	for(d_i = dd.elements.length; d_i;)
+	{
+		dd.addProps(d_o = dd.elements[--d_i]);
+		if(d_o.is_image && !d_o.original && !d_o.clone)
+			dd.n4? d_o.oimg.src = spacer : d_o.oimg.style.visibility = 'hidden';
+	}
+	dd.mkWzDom();
+	if(window.onload) dd.loadFunc = window.onload;
+	if(window.onunload) dd.uloadFunc = window.onunload;
+	window.onload = dd.initz;
+	window.onunload = dd.finlz;
+	dd.setDwnHdl(PICK);
+}
+function ADD_DHTML() // layers only!
+{
+	var d_a = arguments, d_o, d_i = d_a.length; while(d_i)
+	{
+		d_o = new DDObj(d_a[--d_i]);
+		dd.addElt(d_o);
+		dd.addProps(d_o);
+	}
+	dd.mkWzDom();
+}
+
+
+
+
+////////////////////////////////////////////////////////////
+// If not needed, all code below this line may be removed
+
+
+// For backward compatibility
+dd.d = document;			// < v. 2.72
+var RESET_ZINDEX = RESET_Z; // < 3.44
+var KEYDOWN_RESIZE = RESIZABLE; // < 4.43
+var CURSOR_POINTER = CURSOR_HAND; // < 4.44
+var NO_SCROLL = '';		 // < v. 4.49
+
+
+
+
+////////////////////////////////////////////////////////////
+// FUNCTIONS FOR EXTENDED SCRIPTING
+// Use these for your own extensions,
+// or to call functions defined elsewhere
+
+
+
+/* my_PickFunc IS AUTOMATICALLY CALLED WHEN AN ITEM STARTS TO BE DRAGGED.
+The following objects/properties are accessible from here:
+
+- dd.e: current mouse event
+- dd.e.property: access to a property of the current mouse event.
+  Mostly requested properties:
+  - dd.e.x: document-related x co-ordinate
+  - dd.e.y: document-related y co-ord
+  - dd.e.src: target of mouse event (not identical with the drag drop object itself).
+  - dd.e.button: currently pressed mouse button. Left button: dd.e.button <= 1
+
+- dd.obj: reference to currently dragged item.
+- dd.obj.property: access to any property of that item.
+- dd.obj.method(): for example dd.obj.resizeTo() or dd.obj.swapImage() .
+  Mostly requested properties:
+	- dd.obj.name: image name or layer ID passed to SET_DHTML();
+	- dd.obj.x and dd.obj.y: co-ordinates;
+	- dd.obj.w and dd.obj.h: size;
+	- dd.obj.is_dragged: 1 while item is dragged, else 0;
+	- dd.obj.is_resized: 1 while item is resized, i.e. if <ctrl> or <shift> is pressed, else 0
+
+For more properties and details, visit the API documentation
+at http://www.walterzorn.com/dragdrop/api_e.htm (english) or
+http://www.walterzorn.de/dragdrop/api.htm (german)	*/
+function my_PickFunc()
+{
+}
+
+
+
+
+/* my_DragFunc IS CALLED WHILE AN ITEM IS DRAGGED
+See the description of my_PickFunc above for what's accessible from here. */
+function my_DragFunc()
+{
+	//window.status = 'dd.elements.' + dd.obj.name + '.x  = ' + dd.obj.x + '	 dd.elements.' + dd.obj.name + '.y = ' + dd.obj.y;
+}
+
+
+
+
+/* my_ResizeFunc IS CALLED WHILE AN ITEM IS RESIZED
+See the description of my_PickFunc above for what's accessible from here. */
+function my_ResizeFunc()
+{
+	//window.status = 'dd.elements.' + dd.obj.name + '.w  = ' + dd.obj.w + '	 dd.elements.' + dd.obj.name + '.h = ' + dd.obj.h;
+}
+
+
+
+
+/* THIS ONE IS CALLED ONCE AN ITEM IS DROPPED
+See the description of my_PickFunc for what's accessible from here.
+Here may be investigated, for example, what's the name (dd.obj.name)
+of the dropped item, and where (dd.obj.x, dd.obj.y) it has been dropped... */
+function my_DropFunc()
+{
+}
Index: trunk/modules/droplets/templates/default/js/wz_tooltip.js
===================================================================
--- trunk/modules/droplets/templates/default/js/wz_tooltip.js	(nonexistent)
+++ trunk/modules/droplets/templates/default/js/wz_tooltip.js	(revision 2)
@@ -0,0 +1,1301 @@
+/* This notice must be untouched at all times.
+Copyright (c) 2002-2008 Walter Zorn. All rights reserved.
+
+wz_tooltip.js     v. 5.31
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Created 1.12.2002 by Walter Zorn (Web: http://www.walterzorn.com )
+Last modified: 7.11.2008
+
+Easy-to-use cross-browser tooltips.
+Just include the script at the beginning of the <body> section, and invoke
+Tip('Tooltip text') to show and UnTip() to hide the tooltip, from the desired
+HTML eventhandlers. Example:
+<a onmouseover="Tip('Some text')" onmouseout="UnTip()" href="index.htm">My home page</a>
+No container DIV required.
+By default, width and height of tooltips are automatically adapted to content.
+Is even capable of dynamically converting arbitrary HTML elements to tooltips
+by calling TagToTip('ID_of_HTML_element_to_be_converted') instead of Tip(),
+which means you can put important, search-engine-relevant stuff into tooltips.
+Appearance & behaviour of tooltips can be individually configured
+via commands passed to Tip() or TagToTip().
+
+Tab Width: 4
+LICENSE: LGPL
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License (LGPL) 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.
+
+For more details on the GNU Lesser General Public License,
+see http://www.gnu.org/copyleft/lesser.html
+*/
+
+var config = new Object();
+
+
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+var tt_Debug    = true        // false or true - recommended: false once you release your page to the public
+var tt_Enabled  = true        // Allows to (temporarily) suppress tooltips, e.g. by providing the user with a button that sets this global variable to false
+var TagsToTip   = true        // false or true - if true, HTML elements to be converted to tooltips via TagToTip() are automatically hidden;
+                            // if false, you should hide those HTML elements yourself
+
+// For each of the following config variables there exists a command, which is
+// just the variablename in uppercase, to be passed to Tip() or TagToTip() to
+// configure tooltips individually. Individual commands override global
+// configuration. Order of commands is arbitrary.
+// Example: onmouseover="Tip('Tooltip text', LEFT, true, BGCOLOR, '#FF9900', FADEIN, 400)"
+
+config. Above            = false        // false or true - tooltip above mousepointer
+config. BgColor            = '#E2E7FF'    // Background colour (HTML colour value, in quotes)
+config. BgImg            = ''        // Path to background image, none if empty string ''
+config. BorderColor        = '#003099'
+config. BorderStyle        = 'solid'    // Any permitted CSS value, but I recommend 'solid', 'dotted' or 'dashed'
+config. BorderWidth        = 1
+config. CenterMouse        = false        // false or true - center the tip horizontally below (or above) the mousepointer
+config. ClickClose        = false        // false or true - close tooltip if the user clicks somewhere
+config. ClickSticky        = false        // false or true - make tooltip sticky if user left-clicks on the hovered element while the tooltip is active
+config. CloseBtn        = false        // false or true - closebutton in titlebar
+config. CloseBtnColors    = ['#990000', '#FFFFFF', '#DD3333', '#FFFFFF']    // [Background, text, hovered background, hovered text] - use empty strings '' to inherit title colours
+config. CloseBtnText    = '&nbsp;X&nbsp;'    // Close button text (may also be an image tag)
+config. CopyContent        = true        // When converting a HTML element to a tooltip, copy only the element's content, rather than converting the element by its own
+config. Delay            = 400        // Time span in ms until tooltip shows up
+config. Duration        = 0            // Time span in ms after which the tooltip disappears; 0 for infinite duration, < 0 for delay in ms _after_ the onmouseout until the tooltip disappears
+config. Exclusive        = false        // false or true - no other tooltip can appear until the current one has actively been closed
+config. FadeIn            = 100        // Fade-in duration in ms, e.g. 400; 0 for no animation
+config. FadeOut            = 100
+config. FadeInterval    = 30        // Duration of each fade step in ms (recommended: 30) - shorter is smoother but causes more CPU-load
+config. Fix                = null        // Fixated position, two modes. Mode 1: x- an y-coordinates in brackets, e.g. [210, 480]. Mode 2: Show tooltip at a position related to an HTML element: [ID of HTML element, x-offset, y-offset from HTML element], e.g. ['SomeID', 10, 30]. Value null (default) for no fixated positioning.
+config. FollowMouse        = true        // false or true - tooltip follows the mouse
+config. FontColor        = '#000044'
+config. FontFace        = 'Verdana,Geneva,sans-serif'
+config. FontSize        = '8pt'        // E.g. '9pt' or '12px' - unit is mandatory
+config. FontWeight        = 'normal'    // 'normal' or 'bold';
+config. Height            = 0            // Tooltip height; 0 for automatic adaption to tooltip content, < 0 (e.g. -100) for a maximum for automatic adaption
+config. JumpHorz        = false        // false or true - jump horizontally to other side of mouse if tooltip would extend past clientarea boundary
+config. JumpVert        = true        // false or true - jump vertically        "
+config. Left            = false        // false or true - tooltip on the left of the mouse
+config. OffsetX            = 14        // Horizontal offset of left-top corner from mousepointer
+config. OffsetY            = 8            // Vertical offset
+config. Opacity            = 100        // Integer between 0 and 100 - opacity of tooltip in percent
+config. Padding            = 3            // Spacing between border and content
+config. Shadow            = false        // false or true
+config. ShadowColor        = '#C0C0C0'
+config. ShadowWidth        = 5
+config. Sticky            = false        // false or true - fixate tip, ie. don't follow the mouse and don't hide on mouseout
+config. TextAlign        = 'left'    // 'left', 'right' or 'justify'
+config. Title            = ''        // Default title text applied to all tips (no default title: empty string '')
+config. TitleAlign        = 'left'    // 'left' or 'right' - text alignment inside the title bar
+config. TitleBgColor    = ''        // If empty string '', BorderColor will be used
+config. TitleFontColor    = '#FFFFFF'    // Color of title text - if '', BgColor (of tooltip body) will be used
+config. TitleFontFace    = ''        // If '' use FontFace (boldified)
+config. TitleFontSize    = ''        // If '' use FontSize
+config. TitlePadding    = 2
+config. Width            = 0            // Tooltip width; 0 for automatic adaption to tooltip content; < -1 (e.g. -240) for a maximum width for that automatic adaption;
+                                    // -1: tooltip width confined to the width required for the titlebar
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+
+
+
+//=====================  PUBLIC  =============================================//
+function Tip()
+{
+    tt_Tip(arguments, null);
+}
+function TagToTip()
+{
+    var t2t = tt_GetElt(arguments[0]);
+    if(t2t)
+        tt_Tip(arguments, t2t);
+}
+function UnTip()
+{
+    tt_OpReHref();
+    if(tt_aV[DURATION] < 0 && (tt_iState & 0x2))
+        tt_tDurt.Timer("tt_HideInit()", -tt_aV[DURATION], true);
+    else if(!(tt_aV[STICKY] && (tt_iState & 0x2)))
+        tt_HideInit();
+}
+
+//==================  PUBLIC PLUGIN API     =====================================//
+// Extension eventhandlers currently supported:
+// OnLoadConfig, OnCreateContentString, OnSubDivsCreated, OnShow, OnMoveBefore,
+// OnMoveAfter, OnHideInit, OnHide, OnKill
+
+var tt_aElt = new Array(10), // Container DIV, outer title & body DIVs, inner title & body TDs, closebutton SPAN, shadow DIVs, and IFRAME to cover windowed elements in IE
+tt_aV = new Array(),    // Caches and enumerates config data for currently active tooltip
+tt_sContent,            // Inner tooltip text or HTML
+tt_t2t, tt_t2tDad,        // Tag converted to tip, and its DOM parent element
+tt_musX, tt_musY,
+tt_over,
+tt_x, tt_y, tt_w, tt_h; // Position, width and height of currently displayed tooltip
+
+function tt_Extension()
+{
+    tt_ExtCmdEnum();
+    tt_aExt[tt_aExt.length] = this;
+    return this;
+}
+function tt_SetTipPos(x, y)
+{
+    var css = tt_aElt[0].style;
+
+    tt_x = x;
+    tt_y = y;
+    css.left = x + "px";
+    css.top = y + "px";
+    if(tt_ie56)
+    {
+        var ifrm = tt_aElt[tt_aElt.length - 1];
+        if(ifrm)
+        {
+            ifrm.style.left = css.left;
+            ifrm.style.top = css.top;
+        }
+    }
+}
+function tt_HideInit()
+{
+    if(tt_iState)
+    {
+        tt_ExtCallFncs(0, "HideInit");
+        tt_iState &= ~(0x4 | 0x8);
+        if(tt_flagOpa && tt_aV[FADEOUT])
+        {
+            tt_tFade.EndTimer();
+            if(tt_opa)
+            {
+                var n = Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * (tt_aV[OPACITY] / tt_opa)));
+                tt_Fade(tt_opa, tt_opa, 0, n);
+                return;
+            }
+        }
+        tt_tHide.Timer("tt_Hide();", 1, false);
+    }
+}
+function tt_Hide()
+{
+    if(tt_db && tt_iState)
+    {
+        tt_OpReHref();
+        if(tt_iState & 0x2)
+        {
+            tt_aElt[0].style.visibility = "hidden";
+            tt_ExtCallFncs(0, "Hide");
+        }
+        tt_tShow.EndTimer();
+        tt_tHide.EndTimer();
+        tt_tDurt.EndTimer();
+        tt_tFade.EndTimer();
+        if(!tt_op && !tt_ie)
+        {
+            tt_tWaitMov.EndTimer();
+            tt_bWait = false;
+        }
+        if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY])
+            tt_RemEvtFnc(document, "mouseup", tt_OnLClick);
+        tt_ExtCallFncs(0, "Kill");
+        // In case of a TagToTip tip, hide converted DOM node and
+        // re-insert it into DOM
+        if(tt_t2t && !tt_aV[COPYCONTENT])
+            tt_UnEl2Tip();
+        tt_iState = 0;
+        tt_over = null;
+        tt_ResetMainDiv();
+        if(tt_aElt[tt_aElt.length - 1])
+            tt_aElt[tt_aElt.length - 1].style.display = "none";
+    }
+}
+function tt_GetElt(id)
+{
+    return(document.getElementById ? document.getElementById(id)
+            : document.all ? document.all[id]
+            : null);
+}
+function tt_GetDivW(el)
+{
+    return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0);
+}
+function tt_GetDivH(el)
+{
+    return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0);
+}
+function tt_GetScrollX()
+{
+    return(window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0));
+}
+function tt_GetScrollY()
+{
+    return(window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0));
+}
+function tt_GetClientW()
+{
+    return tt_GetWndCliSiz("Width");
+}
+function tt_GetClientH()
+{
+    return tt_GetWndCliSiz("Height");
+}
+function tt_GetEvtX(e)
+{
+    return (e ? ((typeof(e.pageX) != tt_u) ? e.pageX : (e.clientX + tt_GetScrollX())) : 0);
+}
+function tt_GetEvtY(e)
+{
+    return (e ? ((typeof(e.pageY) != tt_u) ? e.pageY : (e.clientY + tt_GetScrollY())) : 0);
+}
+function tt_AddEvtFnc(el, sEvt, PFnc)
+{
+    if(el)
+    {
+        if(el.addEventListener)
+            el.addEventListener(sEvt, PFnc, false);
+        else
+            el.attachEvent("on" + sEvt, PFnc);
+    }
+}
+function tt_RemEvtFnc(el, sEvt, PFnc)
+{
+    if(el)
+    {
+        if(el.removeEventListener)
+            el.removeEventListener(sEvt, PFnc, false);
+        else
+            el.detachEvent("on" + sEvt, PFnc);
+    }
+}
+function tt_GetDad(el)
+{
+    return(el.parentNode || el.parentElement || el.offsetParent);
+}
+function tt_MovDomNode(el, dadFrom, dadTo)
+{
+    if(dadFrom)
+        dadFrom.removeChild(el);
+    if(dadTo)
+        dadTo.appendChild(el);
+}
+
+//======================  PRIVATE  ===========================================//
+var tt_aExt = new Array(),    // Array of extension objects
+
+tt_db, tt_op, tt_ie, tt_ie56, tt_bBoxOld,    // Browser flags
+tt_body,
+tt_ovr_,                // HTML element the mouse is currently over
+tt_flagOpa,                // Opacity support: 1=IE, 2=Khtml, 3=KHTML, 4=Moz, 5=W3C
+tt_maxPosX, tt_maxPosY,
+tt_iState = 0,            // Tooltip active |= 1, shown |= 2, move with mouse |= 4, exclusive |= 8
+tt_opa,                    // Currently applied opacity
+tt_bJmpVert, tt_bJmpHorz,// Tip temporarily on other side of mouse
+tt_elDeHref,            // The tag from which we've removed the href attribute
+// Timer
+tt_tShow = new Number(0), tt_tHide = new Number(0), tt_tDurt = new Number(0),
+tt_tFade = new Number(0), tt_tWaitMov = new Number(0),
+tt_bWait = false,
+tt_u = "undefined";
+
+
+function tt_Init()
+{
+    tt_MkCmdEnum();
+    // Send old browsers instantly to hell
+    if(!tt_Browser() || !tt_MkMainDiv())
+        return;
+    tt_IsW3cBox();
+    tt_OpaSupport();
+    tt_AddEvtFnc(document, "mousemove", tt_Move);
+    // In Debug mode we search for TagToTip() calls in order to notify
+    // the user if they've forgotten to set the TagsToTip config flag
+    if(TagsToTip || tt_Debug)
+        tt_SetOnloadFnc();
+    // Ensure the tip be hidden when the page unloads
+    tt_AddEvtFnc(window, "unload", tt_Hide);
+}
+// Creates command names by translating config variable names to upper case
+function tt_MkCmdEnum()
+{
+    var n = 0;
+    for(var i in config)
+        eval("window." + i.toString().toUpperCase() + " = " + n++);
+    tt_aV.length = n;
+}
+function tt_Browser()
+{
+    var n, nv, n6, w3c;
+
+    n = navigator.userAgent.toLowerCase(),
+    nv = navigator.appVersion;
+    tt_op = (document.defaultView && typeof(eval("w" + "indow" + "." + "o" + "p" + "er" + "a")) != tt_u);
+    tt_ie = n.indexOf("msie") != -1 && document.all && !tt_op;
+    if(tt_ie)
+    {
+        var ieOld = (!document.compatMode || document.compatMode == "BackCompat");
+        tt_db = !ieOld ? document.documentElement : (document.body || null);
+        if(tt_db)
+            tt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5
+                    && typeof document.body.style.maxHeight == tt_u;
+    }
+    else
+    {
+        tt_db = document.documentElement || document.body ||
+                (document.getElementsByTagName ? document.getElementsByTagName("body")[0]
+                : null);
+        if(!tt_op)
+        {
+            n6 = document.defaultView && typeof document.defaultView.getComputedStyle != tt_u;
+            w3c = !n6 && document.getElementById;
+        }
+    }
+    tt_body = (document.getElementsByTagName ? document.getElementsByTagName("body")[0]
+                : (document.body || null));
+    if(tt_ie || n6 || tt_op || w3c)
+    {
+        if(tt_body && tt_db)
+        {
+            if(document.attachEvent || document.addEventListener)
+                return true;
+        }
+        else
+            tt_Err("wz_tooltip.js must be included INSIDE the body section,"
+                    + " immediately after the opening <body> tag.", false);
+    }
+    tt_db = null;
+    return false;
+}
+function tt_MkMainDiv()
+{
+    // Create the tooltip DIV
+    if(tt_body.insertAdjacentHTML)
+        tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm());
+    else if(typeof tt_body.innerHTML != tt_u && document.createElement && tt_body.appendChild)
+        tt_body.appendChild(tt_MkMainDivDom());
+    if(window.tt_GetMainDivRefs /* FireFox Alzheimer */ && tt_GetMainDivRefs())
+        return true;
+    tt_db = null;
+    return false;
+}
+function tt_MkMainDivHtm()
+{
+    return(
+        '<div id="WzTtDiV"></div>' +
+        (tt_ie56 ? ('<iframe id="WzTtIfRm" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>')
+        : '')
+    );
+}
+function tt_MkMainDivDom()
+{
+    var el = document.createElement("div");
+    if(el)
+        el.id = "WzTtDiV";
+    return el;
+}
+function tt_GetMainDivRefs()
+{
+    tt_aElt[0] = tt_GetElt("WzTtDiV");
+    if(tt_ie56 && tt_aElt[0])
+    {
+        tt_aElt[tt_aElt.length - 1] = tt_GetElt("WzTtIfRm");
+        if(!tt_aElt[tt_aElt.length - 1])
+            tt_aElt[0] = null;
+    }
+    if(tt_aElt[0])
+    {
+        var css = tt_aElt[0].style;
+
+        css.visibility = "hidden";
+        css.position = "absolute";
+        css.overflow = "hidden";
+        return true;
+    }
+    return false;
+}
+function tt_ResetMainDiv()
+{
+    tt_SetTipPos(0, 0);
+    tt_aElt[0].innerHTML = "";
+    tt_aElt[0].style.width = "0px";
+    tt_h = 0;
+}
+function tt_IsW3cBox()
+{
+    var css = tt_aElt[0].style;
+
+    css.padding = "10px";
+    css.width = "40px";
+    tt_bBoxOld = (tt_GetDivW(tt_aElt[0]) == 40);
+    css.padding = "0px";
+    tt_ResetMainDiv();
+}
+function tt_OpaSupport()
+{
+    var css = tt_body.style;
+
+    tt_flagOpa = (typeof(css.KhtmlOpacity) != tt_u) ? 2
+                : (typeof(css.KHTMLOpacity) != tt_u) ? 3
+                : (typeof(css.MozOpacity) != tt_u) ? 4
+                : (typeof(css.opacity) != tt_u) ? 5
+                : (typeof(css.filter) != tt_u) ? 1
+                : 0;
+}
+// Ported from http://dean.edwards.name/weblog/2006/06/again/
+// (Dean Edwards et al.)
+function tt_SetOnloadFnc()
+{
+    tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags);
+    tt_AddEvtFnc(window, "load", tt_HideSrcTags);
+    if(tt_body.attachEvent)
+        tt_body.attachEvent("onreadystatechange",
+            function() {
+                if(tt_body.readyState == "complete")
+                    tt_HideSrcTags();
+            } );
+    if(/WebKit|KHTML/i.test(navigator.userAgent))
+    {
+        var t = setInterval(function() {
+                    if(/loaded|complete/.test(document.readyState))
+                    {
+                        clearInterval(t);
+                        tt_HideSrcTags();
+                    }
+                }, 10);
+    }
+}
+function tt_HideSrcTags()
+{
+    if(!window.tt_HideSrcTags || window.tt_HideSrcTags.done)
+        return;
+    window.tt_HideSrcTags.done = true;
+    if(!tt_HideSrcTagsRecurs(tt_body))
+        tt_Err("There are HTML elements to be converted to tooltips.\nIf you"
+                + " want these HTML elements to be automatically hidden, you"
+                + " must edit wz_tooltip.js, and set TagsToTip in the global"
+                + " tooltip configuration to true.", true);
+}
+function tt_HideSrcTagsRecurs(dad)
+{
+    var ovr, asT2t;
+    // Walk the DOM tree for tags that have an onmouseover or onclick attribute
+    // containing a TagToTip('...') call.
+    // (.childNodes first since .children is bugous in Safari)
+    var a = dad.childNodes || dad.children || null;
+
+    for(var i = a ? a.length : 0; i;)
+    {--i;
+        if(!tt_HideSrcTagsRecurs(a[i]))
+            return false;
+        ovr = a[i].getAttribute ? (a[i].getAttribute("onmouseover") || a[i].getAttribute("onclick"))
+                : (typeof a[i].onmouseover == "function") ? (a[i].onmouseover || a[i].onclick)
+                : null;
+        if(ovr)
+        {
+            asT2t = ovr.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/);
+            if(asT2t && asT2t.length)
+            {
+                if(!tt_HideSrcTag(asT2t[0]))
+                    return false;
+            }
+        }
+    }
+    return true;
+}
+function tt_HideSrcTag(sT2t)
+{
+    var id, el;
+
+    // The ID passed to the found TagToTip() call identifies an HTML element
+    // to be converted to a tooltip, so hide that element
+    id = sT2t.replace(/.+'([^'.]+)'.+/, "$1");
+    el = tt_GetElt(id);
+    if(el)
+    {
+        if(tt_Debug && !TagsToTip)
+            return false;
+        else
+            el.style.display = "none";
+    }
+    else
+        tt_Err("Invalid ID\n'" + id + "'\npassed to TagToTip()."
+                + " There exists no HTML element with that ID.", true);
+    return true;
+}
+function tt_Tip(arg, t2t)
+{
+    if(!tt_db || (tt_iState & 0x8))
+        return;
+    if(tt_iState)
+        tt_Hide();
+    if(!tt_Enabled)
+        return;
+    tt_t2t = t2t;
+    if(!tt_ReadCmds(arg))
+        return;
+    tt_iState = 0x1 | 0x4;
+    tt_AdaptConfig1();
+    tt_MkTipContent(arg);
+    tt_MkTipSubDivs();
+    tt_FormatTip();
+    tt_bJmpVert = false;
+    tt_bJmpHorz = false;
+    tt_maxPosX = tt_GetClientW() + tt_GetScrollX() - tt_w - 1;
+    tt_maxPosY = tt_GetClientH() + tt_GetScrollY() - tt_h - 1;
+    tt_AdaptConfig2();
+    // Ensure the tip be shown and positioned before the first onmousemove
+    tt_OverInit();
+    tt_ShowInit();
+    tt_Move();
+}
+function tt_ReadCmds(a)
+{
+    var i;
+
+    // First load the global config values, to initialize also values
+    // for which no command is passed
+    i = 0;
+    for(var j in config)
+        tt_aV[i++] = config[j];
+    // Then replace each cached config value for which a command is
+    // passed (ensure the # of command args plus value args be even)
+    if(a.length & 1)
+    {
+        for(i = a.length - 1; i > 0; i -= 2)
+            tt_aV[a[i - 1]] = a[i];
+        return true;
+    }
+    tt_Err("Incorrect call of Tip() or TagToTip().\n"
+            + "Each command must be followed by a value.", true);
+    return false;
+}
+function tt_AdaptConfig1()
+{
+    tt_ExtCallFncs(0, "LoadConfig");
+    // Inherit unspecified title formattings from body
+    if(!tt_aV[TITLEBGCOLOR].length)
+        tt_aV[TITLEBGCOLOR] = tt_aV[BORDERCOLOR];
+    if(!tt_aV[TITLEFONTCOLOR].length)
+        tt_aV[TITLEFONTCOLOR] = tt_aV[BGCOLOR];
+    if(!tt_aV[TITLEFONTFACE].length)
+        tt_aV[TITLEFONTFACE] = tt_aV[FONTFACE];
+    if(!tt_aV[TITLEFONTSIZE].length)
+        tt_aV[TITLEFONTSIZE] = tt_aV[FONTSIZE];
+    if(tt_aV[CLOSEBTN])
+    {
+        // Use title colours for non-specified closebutton colours
+        if(!tt_aV[CLOSEBTNCOLORS])
+            tt_aV[CLOSEBTNCOLORS] = new Array("", "", "", "");
+        for(var i = 4; i;)
+        {--i;
+            if(!tt_aV[CLOSEBTNCOLORS][i].length)
+                tt_aV[CLOSEBTNCOLORS][i] = (i & 1) ? tt_aV[TITLEFONTCOLOR] : tt_aV[TITLEBGCOLOR];
+        }
+        // Enforce titlebar be shown
+        if(!tt_aV[TITLE].length)
+            tt_aV[TITLE] = " ";
+    }
+    // Circumvents broken display of images and fade-in flicker in Geckos < 1.8
+    if(tt_aV[OPACITY] == 100 && typeof tt_aElt[0].style.MozOpacity != tt_u && !Array.every)
+        tt_aV[OPACITY] = 99;
+    // Smartly shorten the delay for fade-in tooltips
+    if(tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100)
+        tt_aV[DELAY] = Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100);
+}
+function tt_AdaptConfig2()
+{
+    if(tt_aV[CENTERMOUSE])
+    {
+        tt_aV[OFFSETX] -= ((tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0)) >> 1);
+        tt_aV[JUMPHORZ] = false;
+    }
+}
+// Expose content globally so extensions can modify it
+function tt_MkTipContent(a)
+{
+    if(tt_t2t)
+    {
+        if(tt_aV[COPYCONTENT])
+            tt_sContent = tt_t2t.innerHTML;
+        else
+            tt_sContent = "";
+    }
+    else
+        tt_sContent = a[0];
+    tt_ExtCallFncs(0, "CreateContentString");
+}
+function tt_MkTipSubDivs()
+{
+    var sCss = 'position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;',
+    sTbTrTd = ' cellspacing="0" cellpadding="0" border="0" style="' + sCss + '"><tbody style="' + sCss + '"><tr><td ';
+
+    tt_aElt[0].style.width = tt_GetClientW() + "px";
+    tt_aElt[0].innerHTML =
+        (''
+        + (tt_aV[TITLE].length ?
+            ('<div id="WzTiTl" style="position:relative;z-index:1;">'
+            + '<table id="WzTiTlTb"' + sTbTrTd + 'id="WzTiTlI" style="' + sCss + '">'
+            + tt_aV[TITLE]
+            + '</td>'
+            + (tt_aV[CLOSEBTN] ?
+                ('<td align="right" style="' + sCss
+                + 'text-align:right;">'
+                + '<span id="WzClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;'
+                + 'cursor:' + (tt_ie ? 'hand' : 'pointer')
+                + ';" onmouseover="tt_OnCloseBtnOver(1)" onmouseout="tt_OnCloseBtnOver(0)" onclick="tt_HideInit()">'
+                + tt_aV[CLOSEBTNTEXT]
+                + '</span></td>')
+                : '')
+            + '</tr></tbody></table></div>')
+            : '')
+        + '<div id="WzBoDy" style="position:relative;z-index:0;">'
+        + '<table' + sTbTrTd + 'id="WzBoDyI" style="' + sCss + '">'
+        + tt_sContent
+        + '</td></tr></tbody></table></div>'
+        + (tt_aV[SHADOW]
+            ? ('<div id="WzTtShDwR" style="position:absolute;overflow:hidden;"></div>'
+                + '<div id="WzTtShDwB" style="position:relative;overflow:hidden;"></div>')
+            : '')
+        );
+    tt_GetSubDivRefs();
+    // Convert DOM node to tip
+    if(tt_t2t && !tt_aV[COPYCONTENT])
+        tt_El2Tip();
+    tt_ExtCallFncs(0, "SubDivsCreated");
+}
+function tt_GetSubDivRefs()
+{
+    var aId = new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", "WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR");
+
+    for(var i = aId.length; i; --i)
+        tt_aElt[i] = tt_GetElt(aId[i - 1]);
+}
+function tt_FormatTip()
+{
+    var css, w, h, pad = tt_aV[PADDING], padT, wBrd = tt_aV[BORDERWIDTH],
+    iOffY, iOffSh, iAdd = (pad + wBrd) << 1;
+
+    //--------- Title DIV ----------
+    if(tt_aV[TITLE].length)
+    {
+        padT = tt_aV[TITLEPADDING];
+        css = tt_aElt[1].style;
+        css.background = tt_aV[TITLEBGCOLOR];
+        css.paddingTop = css.paddingBottom = padT + "px";
+        css.paddingLeft = css.paddingRight = (padT + 2) + "px";
+        css = tt_aElt[3].style;
+        css.color = tt_aV[TITLEFONTCOLOR];
+        if(tt_aV[WIDTH] == -1)
+            css.whiteSpace = "nowrap";
+        css.fontFamily = tt_aV[TITLEFONTFACE];
+        css.fontSize = tt_aV[TITLEFONTSIZE];
+        css.fontWeight = "bold";
+        css.textAlign = tt_aV[TITLEALIGN];
+        // Close button DIV
+        if(tt_aElt[4])
+        {
+            css = tt_aElt[4].style;
+            css.background = tt_aV[CLOSEBTNCOLORS][0];
+            css.color = tt_aV[CLOSEBTNCOLORS][1];
+            css.fontFamily = tt_aV[TITLEFONTFACE];
+            css.fontSize = tt_aV[TITLEFONTSIZE];
+            css.fontWeight = "bold";
+        }
+        if(tt_aV[WIDTH] > 0)
+            tt_w = tt_aV[WIDTH];
+        else
+        {
+            tt_w = tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]);
+            // Some spacing between title DIV and closebutton
+            if(tt_aElt[4])
+                tt_w += pad;
+            // Restrict auto width to max width
+            if(tt_aV[WIDTH] < -1 && tt_w > -tt_aV[WIDTH])
+                tt_w = -tt_aV[WIDTH];
+        }
+        // Ensure the top border of the body DIV be covered by the title DIV
+        iOffY = -wBrd;
+    }
+    else
+    {
+        tt_w = 0;
+        iOffY = 0;
+    }
+
+    //-------- Body DIV ------------
+    css = tt_aElt[5].style;
+    css.top = iOffY + "px";
+    if(wBrd)
+    {
+        css.borderColor = tt_aV[BORDERCOLOR];
+        css.borderStyle = tt_aV[BORDERSTYLE];
+        css.borderWidth = wBrd + "px";
+    }
+    if(tt_aV[BGCOLOR].length)
+        css.background = tt_aV[BGCOLOR];
+    if(tt_aV[BGIMG].length)
+        css.backgroundImage = "url(" + tt_aV[BGIMG] + ")";
+    css.padding = pad + "px";
+    css.textAlign = tt_aV[TEXTALIGN];
+    if(tt_aV[HEIGHT])
+    {
+        css.overflow = "auto";
+        if(tt_aV[HEIGHT] > 0)
+            css.height = (tt_aV[HEIGHT] + iAdd) + "px";
+        else
+            tt_h = iAdd - tt_aV[HEIGHT];
+    }
+    // TD inside body DIV
+    css = tt_aElt[6].style;
+    css.color = tt_aV[FONTCOLOR];
+    css.fontFamily = tt_aV[FONTFACE];
+    css.fontSize = tt_aV[FONTSIZE];
+    css.fontWeight = tt_aV[FONTWEIGHT];
+    css.textAlign = tt_aV[TEXTALIGN];
+    if(tt_aV[WIDTH] > 0)
+        w = tt_aV[WIDTH];
+    // Width like title (if existent)
+    else if(tt_aV[WIDTH] == -1 && tt_w)
+        w = tt_w;
+    else
+    {
+        // Measure width of the body's inner TD, as some browsers would expand
+        // the container and outer body DIV to 100%
+        w = tt_GetDivW(tt_aElt[6]);
+        // Restrict auto width to max width
+        if(tt_aV[WIDTH] < -1 && w > -tt_aV[WIDTH])
+            w = -tt_aV[WIDTH];
+    }
+    if(w > tt_w)
+        tt_w = w;
+    tt_w += iAdd;
+
+    //--------- Shadow DIVs ------------
+    if(tt_aV[SHADOW])
+    {
+        tt_w += tt_aV[SHADOWWIDTH];
+        iOffSh = Math.floor((tt_aV[SHADOWWIDTH] * 4) / 3);
+        // Bottom shadow
+        css = tt_aElt[7].style;
+        css.top = iOffY + "px";
+        css.left = iOffSh + "px";
+        css.width = (tt_w - iOffSh - tt_aV[SHADOWWIDTH]) + "px";
+        css.height = tt_aV[SHADOWWIDTH] + "px";
+        css.background = tt_aV[SHADOWCOLOR];
+        // Right shadow
+        css = tt_aElt[8].style;
+        css.top = iOffSh + "px";
+        css.left = (tt_w - tt_aV[SHADOWWIDTH]) + "px";
+        css.width = tt_aV[SHADOWWIDTH] + "px";
+        css.background = tt_aV[SHADOWCOLOR];
+    }
+    else
+        iOffSh = 0;
+
+    //-------- Container DIV -------
+    tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]);
+    tt_FixSize(iOffY, iOffSh);
+}
+// Fixate the size so it can't dynamically change while the tooltip is moving.
+function tt_FixSize(iOffY, iOffSh)
+{
+    var wIn, wOut, h, add, pad = tt_aV[PADDING], wBrd = tt_aV[BORDERWIDTH], i;
+
+    tt_aElt[0].style.width = tt_w + "px";
+    tt_aElt[0].style.pixelWidth = tt_w;
+    wOut = tt_w - ((tt_aV[SHADOW]) ? tt_aV[SHADOWWIDTH] : 0);
+    // Body
+    wIn = wOut;
+    if(!tt_bBoxOld)
+        wIn -= (pad + wBrd) << 1;
+    tt_aElt[5].style.width = wIn + "px";
+    // Title
+    if(tt_aElt[1])
+    {
+        wIn = wOut - ((tt_aV[TITLEPADDING] + 2) << 1);
+        if(!tt_bBoxOld)
+            wOut = wIn;
+        tt_aElt[1].style.width = wOut + "px";
+        tt_aElt[2].style.width = wIn + "px";
+    }
+    // Max height specified
+    if(tt_h)
+    {
+        h = tt_GetDivH(tt_aElt[5]);
+        if(h > tt_h)
+        {
+            if(!tt_bBoxOld)
+                tt_h -= (pad + wBrd) << 1;
+            tt_aElt[5].style.height = tt_h + "px";
+        }
+    }
+    tt_h = tt_GetDivH(tt_aElt[0]) + iOffY;
+    // Right shadow
+    if(tt_aElt[8])
+        tt_aElt[8].style.height = (tt_h - iOffSh) + "px";
+    i = tt_aElt.length - 1;
+    if(tt_aElt[i])
+    {
+        tt_aElt[i].style.width = tt_w + "px";
+        tt_aElt[i].style.height = tt_h + "px";
+    }
+}
+function tt_DeAlt(el)
+{
+    var aKid;
+
+    if(el)
+    {
+        if(el.alt)
+            el.alt = "";
+        if(el.title)
+            el.title = "";
+        aKid = el.childNodes || el.children || null;
+        if(aKid)
+        {
+            for(var i = aKid.length; i;)
+                tt_DeAlt(aKid[--i]);
+        }
+    }
+}
+// This hack removes the native tooltips over links in Opera
+function tt_OpDeHref(el)
+{
+    if(!tt_op)
+        return;
+    if(tt_elDeHref)
+        tt_OpReHref();
+    while(el)
+    {
+        if(el.hasAttribute && el.hasAttribute("href"))
+        {
+            el.t_href = el.getAttribute("href");
+            el.t_stats = window.status;
+            el.removeAttribute("href");
+            el.style.cursor = "hand";
+            tt_AddEvtFnc(el, "mousedown", tt_OpReHref);
+            window.status = el.t_href;
+            tt_elDeHref = el;
+            break;
+        }
+        el = tt_GetDad(el);
+    }
+}
+function tt_OpReHref()
+{
+    if(tt_elDeHref)
+    {
+        tt_elDeHref.setAttribute("href", tt_elDeHref.t_href);
+        tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref);
+        window.status = tt_elDeHref.t_stats;
+        tt_elDeHref = null;
+    }
+}
+function tt_El2Tip()
+{
+    var css = tt_t2t.style;
+
+    // Store previous positioning
+    tt_t2t.t_cp = css.position;
+    tt_t2t.t_cl = css.left;
+    tt_t2t.t_ct = css.top;
+    tt_t2t.t_cd = css.display;
+    // Store the tag's parent element so we can restore that DOM branch
+    // when the tooltip is being hidden
+    tt_t2tDad = tt_GetDad(tt_t2t);
+    tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]);
+    css.display = "block";
+    css.position = "static";
+    css.left = css.top = css.marginLeft = css.marginTop = "0px";
+}
+function tt_UnEl2Tip()
+{
+    // Restore positioning and display
+    var css = tt_t2t.style;
+
+    css.display = tt_t2t.t_cd;
+    tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), tt_t2tDad);
+    css.position = tt_t2t.t_cp;
+    css.left = tt_t2t.t_cl;
+    css.top = tt_t2t.t_ct;
+    tt_t2tDad = null;
+}
+function tt_OverInit()
+{
+    if(window.event)
+        tt_over = window.event.target || window.event.srcElement;
+    else
+        tt_over = tt_ovr_;
+    tt_DeAlt(tt_over);
+    tt_OpDeHref(tt_over);
+}
+function tt_ShowInit()
+{
+    tt_tShow.Timer("tt_Show()", tt_aV[DELAY], true);
+    if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY])
+        tt_AddEvtFnc(document, "mouseup", tt_OnLClick);
+}
+function tt_Show()
+{
+    var css = tt_aElt[0].style;
+
+    // Override the z-index of the topmost wz_dragdrop.js D&D item
+    css.zIndex = Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1010);
+    if(tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE])
+        tt_iState &= ~0x4;
+    if(tt_aV[EXCLUSIVE])
+        tt_iState |= 0x8;
+    if(tt_aV[DURATION] > 0)
+        tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], true);
+    tt_ExtCallFncs(0, "Show")
+    css.visibility = "visible";
+    tt_iState |= 0x2;
+    if(tt_aV[FADEIN])
+        tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / tt_aV[FADEINTERVAL]));
+    tt_ShowIfrm();
+}
+function tt_ShowIfrm()
+{
+    if(tt_ie56)
+    {
+        var ifrm = tt_aElt[tt_aElt.length - 1];
+        if(ifrm)
+        {
+            var css = ifrm.style;
+            css.zIndex = tt_aElt[0].style.zIndex - 1;
+            css.display = "block";
+        }
+    }
+}
+function tt_Move(e)
+{
+    if(e)
+        tt_ovr_ = e.target || e.srcElement;
+    e = e || window.event;
+    if(e)
+    {
+        tt_musX = tt_GetEvtX(e);
+        tt_musY = tt_GetEvtY(e);
+    }
+    if(tt_iState & 0x4)
+    {
+        // Prevent jam of mousemove events
+        if(!tt_op && !tt_ie)
+        {
+            if(tt_bWait)
+                return;
+            tt_bWait = true;
+            tt_tWaitMov.Timer("tt_bWait = false;", 1, true);
+        }
+        if(tt_aV[FIX])
+        {
+            tt_iState &= ~0x4;
+            tt_PosFix();
+        }
+        else if(!tt_ExtCallFncs(e, "MoveBefore"))
+            tt_SetTipPos(tt_Pos(0), tt_Pos(1));
+        tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter")
+    }
+}
+function tt_Pos(iDim)
+{
+    var iX, bJmpMod, cmdAlt, cmdOff, cx, iMax, iScrl, iMus, bJmp;
+
+    // Map values according to dimension to calculate
+    if(iDim)
+    {
+        bJmpMod = tt_aV[JUMPVERT];
+        cmdAlt = ABOVE;
+        cmdOff = OFFSETY;
+        cx = tt_h;
+        iMax = tt_maxPosY;
+        iScrl = tt_GetScrollY();
+        iMus = tt_musY;
+        bJmp = tt_bJmpVert;
+    }
+    else
+    {
+        bJmpMod = tt_aV[JUMPHORZ];
+        cmdAlt = LEFT;
+        cmdOff = OFFSETX;
+        cx = tt_w;
+        iMax = tt_maxPosX;
+        iScrl = tt_GetScrollX();
+        iMus = tt_musX;
+        bJmp = tt_bJmpHorz;
+    }
+    if(bJmpMod)
+    {
+        if(tt_aV[cmdAlt] && (!bJmp || tt_CalcPosAlt(iDim) >= iScrl + 16))
+            iX = tt_PosAlt(iDim);
+        else if(!tt_aV[cmdAlt] && bJmp && tt_CalcPosDef(iDim) > iMax - 16)
+            iX = tt_PosAlt(iDim);
+        else
+            iX = tt_PosDef(iDim);
+    }
+    else
+    {
+        iX = iMus;
+        if(tt_aV[cmdAlt])
+            iX -= cx + tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);
+        else
+            iX += tt_aV[cmdOff];
+    }
+    // Prevent tip from extending past clientarea boundary
+    if(iX > iMax)
+        iX = bJmpMod ? tt_PosAlt(iDim) : iMax;
+    // In case of insufficient space on both sides, ensure the left/upper part
+    // of the tip be visible
+    if(iX < iScrl)
+        iX = bJmpMod ? tt_PosDef(iDim) : iScrl;
+    return iX;
+}
+function tt_PosDef(iDim)
+{
+    if(iDim)
+        tt_bJmpVert = tt_aV[ABOVE];
+    else
+        tt_bJmpHorz = tt_aV[LEFT];
+    return tt_CalcPosDef(iDim);
+}
+function tt_PosAlt(iDim)
+{
+    if(iDim)
+        tt_bJmpVert = !tt_aV[ABOVE];
+    else
+        tt_bJmpHorz = !tt_aV[LEFT];
+    return tt_CalcPosAlt(iDim);
+}
+function tt_CalcPosDef(iDim)
+{
+    return iDim ? (tt_musY + tt_aV[OFFSETY]) : (tt_musX + tt_aV[OFFSETX]);
+}
+function tt_CalcPosAlt(iDim)
+{
+    var cmdOff = iDim ? OFFSETY : OFFSETX;
+    var dx = tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);
+    if(tt_aV[cmdOff] > 0 && dx <= 0)
+        dx = 1;
+    return((iDim ? (tt_musY - tt_h) : (tt_musX - tt_w)) - dx);
+}
+function tt_PosFix()
+{
+    var iX, iY;
+
+    if(typeof(tt_aV[FIX][0]) == "number")
+    {
+        iX = tt_aV[FIX][0];
+        iY = tt_aV[FIX][1];
+    }
+    else
+    {
+        if(typeof(tt_aV[FIX][0]) == "string")
+            el = tt_GetElt(tt_aV[FIX][0]);
+        // First slot in array is direct reference to HTML element
+        else
+            el = tt_aV[FIX][0];
+        iX = tt_aV[FIX][1];
+        iY = tt_aV[FIX][2];
+        // By default, vert pos is related to bottom edge of HTML element
+        if(!tt_aV[ABOVE] && el)
+            iY += tt_GetDivH(el);
+        for(; el; el = el.offsetParent)
+        {
+            iX += el.offsetLeft || 0;
+            iY += el.offsetTop || 0;
+        }
+    }
+    // For a fixed tip positioned above the mouse, use the bottom edge as anchor
+    // (recommended by Christophe Rebeschini, 31.1.2008)
+    if(tt_aV[ABOVE])
+        iY -= tt_h;
+    tt_SetTipPos(iX, iY);
+}
+function tt_Fade(a, now, z, n)
+{
+    if(n)
+    {
+        now += Math.round((z - now) / n);
+        if((z > a) ? (now >= z) : (now <= z))
+            now = z;
+        else
+            tt_tFade.Timer(
+                "tt_Fade("
+                + a + "," + now + "," + z + "," + (n - 1)
+                + ")",
+                tt_aV[FADEINTERVAL],
+                true
+            );
+    }
+    now ? tt_SetTipOpa(now) : tt_Hide();
+}
+function tt_SetTipOpa(opa)
+{
+    // To circumvent the opacity nesting flaws of IE, we set the opacity
+    // for each sub-DIV separately, rather than for the container DIV.
+    tt_SetOpa(tt_aElt[5], opa);
+    if(tt_aElt[1])
+        tt_SetOpa(tt_aElt[1], opa);
+    if(tt_aV[SHADOW])
+    {
+        opa = Math.round(opa * 0.8);
+        tt_SetOpa(tt_aElt[7], opa);
+        tt_SetOpa(tt_aElt[8], opa);
+    }
+}
+function tt_OnCloseBtnOver(iOver)
+{
+    var css = tt_aElt[4].style;
+
+    iOver <<= 1;
+    css.background = tt_aV[CLOSEBTNCOLORS][iOver];
+    css.color = tt_aV[CLOSEBTNCOLORS][iOver + 1];
+}
+function tt_OnLClick(e)
+{
+    //  Ignore right-clicks
+    e = e || window.event;
+    if(!((e.button && e.button & 2) || (e.which && e.which == 3)))
+    {
+        if(tt_aV[CLICKSTICKY] && (tt_iState & 0x4))
+        {
+            tt_aV[STICKY] = true;
+            tt_iState &= ~0x4;
+        }
+        else if(tt_aV[CLICKCLOSE])
+            tt_HideInit();
+    }
+}
+function tt_Int(x)
+{
+    var y;
+
+    return(isNaN(y = parseInt(x)) ? 0 : y);
+}
+Number.prototype.Timer = function(s, iT, bUrge)
+{
+    if(!this.value || bUrge)
+        this.value = window.setTimeout(s, iT);
+}
+Number.prototype.EndTimer = function()
+{
+    if(this.value)
+    {
+        window.clearTimeout(this.value);
+        this.value = 0;
+    }
+}
+function tt_GetWndCliSiz(s)
+{
+    var db, y = window["inner" + s], sC = "client" + s, sN = "number";
+    if(typeof y == sN)
+    {
+        var y2;
+        return(
+            // Gecko or Opera with scrollbar
+            // ... quirks mode
+            ((db = document.body) && typeof(y2 = db[sC]) == sN && y2 &&  y2 <= y) ? y2 
+            // ... strict mode
+            : ((db = document.documentElement) && typeof(y2 = db[sC]) == sN && y2 && y2 <= y) ? y2
+            // No scrollbar, or clientarea size == 0, or other browser (KHTML etc.)
+            : y
+        );
+    }
+    // IE
+    return(
+        // document.documentElement.client+s functional, returns > 0
+        ((db = document.documentElement) && (y = db[sC])) ? y
+        // ... not functional, in which case document.body.client+s 
+        // is the clientarea size, fortunately
+        : document.body[sC]
+    );
+}
+function tt_SetOpa(el, opa)
+{
+    var css = el.style;
+
+    tt_opa = opa;
+    if(tt_flagOpa == 1)
+    {
+        if(opa < 100)
+        {
+            // Hacks for bugs of IE:
+            // 1.) Once a CSS filter has been applied, fonts are no longer
+            // anti-aliased, so we store the previous 'non-filter' to be
+            // able to restore it
+            if(typeof(el.filtNo) == tt_u)
+                el.filtNo = css.filter;
+            // 2.) A DIV cannot be made visible in a single step if an
+            // opacity < 100 has been applied while the DIV was hidden
+            var bVis = css.visibility != "hidden";
+            // 3.) In IE6, applying an opacity < 100 has no effect if the
+            //       element has no layout (position, size, zoom, ...)
+            css.zoom = "100%";
+            if(!bVis)
+                css.visibility = "visible";
+            css.filter = "alpha(opacity=" + opa + ")";
+            if(!bVis)
+                css.visibility = "hidden";
+        }
+        else if(typeof(el.filtNo) != tt_u)
+            // Restore 'non-filter'
+            css.filter = el.filtNo;
+    }
+    else
+    {
+        opa /= 100.0;
+        switch(tt_flagOpa)
+        {
+        case 2:
+            css.KhtmlOpacity = opa; break;
+        case 3:
+            css.KHTMLOpacity = opa; break;
+        case 4:
+            css.MozOpacity = opa; break;
+        case 5:
+            css.opacity = opa; break;
+        }
+    }
+}
+function tt_Err(sErr, bIfDebug)
+{
+    if(tt_Debug || !bIfDebug)
+        alert("Tooltip Script Error Message:\n\n" + sErr);
+}
+
+//============  EXTENSION (PLUGIN) MANAGER  ===============//
+function tt_ExtCmdEnum()
+{
+    var s;
+
+    // Add new command(s) to the commands enum
+    for(var i in config)
+    {
+        s = "window." + i.toString().toUpperCase();
+        if(eval("typeof(" + s + ") == tt_u"))
+        {
+            eval(s + " = " + tt_aV.length);
+            tt_aV[tt_aV.length] = null;
+        }
+    }
+}
+function tt_ExtCallFncs(arg, sFnc)
+{
+    var b = false;
+    for(var i = tt_aExt.length; i;)
+    {--i;
+        var fnc = tt_aExt[i]["On" + sFnc];
+        // Call the method the extension has defined for this event
+        if(fnc && fnc(arg))
+            b = true;
+    }
+    return b;
+}
+
+tt_Init();
Index: trunk/modules/droplets/themes/default/call_help.htt
===================================================================
--- trunk/modules/droplets/themes/default/call_help.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/call_help.htt	(revision 2)
@@ -0,0 +1,38 @@
+<!-- BEGIN main_block -->
+<div id="openModal" class="modal-Dialog" draggable="true">
+    <div>
+        <span id="customConfirm" style="display: block;">
+            <header class="modal-label">
+                <h2>Droplet {DR_TEXT_HELP}</h2>
+            </header>
+            <button id="closeHelpBox" class="close" name="cancel" type="button" onclick="window.location='{ToolUrl}';">X</button>
+            <div class="modal-inner">
+                <iframe  src="{sAddonUrl}/DOC/readme.html" style="width: 100%;"></iframe>
+                <div class="footer">
+                    <button class="cancel btn btn-danger" name="cancel" type="button" onclick="window.location='{ToolUrl}';">{TEXT_CANCEL}</button>
+                </div>
+            </div>
+            <footer class="modal-label">
+<!--
+            <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+            <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+-->
+            </footer>
+        </span>
+    </div>
+</div>
+<script >
+<!--
+domReady(function() {
+    if (typeof LoadOnFly ==='defin ded') {
+        LoadOnFly('head', "{sAddonThemeUrl}/css/dialogBox.css");
+        LoadOnFly('head', "{sAddonThemeUrl}/css/customAlert.css");
+    } else {
+        $.insert("{sAddonThemeUrl}/css/dialogBox.css");
+        $.insert("{sAddonThemeUrl}/css/customAlert.css");
+    }
+
+});
+-->
+</script>
+<!-- END main_block -->
Index: trunk/modules/droplets/themes/default/css/TableScroll.css
===================================================================
--- trunk/modules/droplets/themes/default/css/TableScroll.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/TableScroll.css	(revision 2)
@@ -0,0 +1,79 @@
+
+.fixed-headers {
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: collapse;
+}
+.fixed-headers th {
+  text-decoration: none;
+}
+.fixed-headers th,
+.fixed-headers td {
+  padding: 5px;
+  text-align: left;
+}
+.fixed-headers th:nth-child(1) { min-width: 36px; width: 2%; }
+.fixed-headers td:nth-child(1) { min-width: 32px; width: 2%; }
+
+.fixed-headers th:nth-child(2) { min-width: 36px; width: 2%; }
+.fixed-headers td:nth-child(2) { min-width: 32px; width: 2%; }
+
+.fixed-headers th:nth-child(3) { min-width: 36px; width: 2%; }
+.fixed-headers td:nth-child(3) { min-width: 32px; width: 2%; }
+
+.fixed-headers th:nth-child(4) { min-width: 36px; width: 2%; }
+.fixed-headers td:nth-child(4) { min-width: 32px; width: 3%; }
+
+.fixed-headers th:nth-child(5) { min-width: 150px; width: 15%; }
+.fixed-headers td:nth-child(5) { min-width: 150px; width: 15%; }
+
+.fixed-headers th:nth-child(6) { min-width: 300px; width: 62%; }
+.fixed-headers td:nth-child(6) { min-width: 250px; width: 58%; }
+
+.fixed-headers th:nth-child(7) { min-width: 100px; width: 25%; }
+.fixed-headers td:nth-child(7) { min-width: 100px; width: 20%; }
+
+.fixed-headers th:nth-child(8) { min-width: 36px; width: 3%; }
+.fixed-headers td:nth-child(8) { min-width: 32px; width: 3%; }
+
+.fixed-headers th:nth-child(9) { min-width: 36px; width: 3%; }
+.fixed-headers td:nth-child(9) { min-width: 32px; width: 3%; }
+
+.fixed-headers th:nth-child(10) { min-width: 72px; }
+.fixed-headers td:nth-child(10) { min-width: 32px; width: 3%; }
+
+.fixed-headers thead {
+  background-color: #333;
+  color: #FDFDFD;
+}
+.fixed-headers thead tr { display: block; position: relative; }
+.fixed-headers tbody {
+  display: block;
+  overflow-y: scroll;
+  overflow-x: hidden;
+  width: 100%;
+  height: 24em;
+}
+.fixed-headers tbody tr:nth-child(even) { background-color: #DDD; }
+.old_ie_wrapper {
+  height: 300px;
+  width: 750px;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.old_ie_wrapper tbody {
+  height: auto;
+}
+
+span.truncate {
+  display: block;
+  /* Fallback for non-webkit */
+  display: -webkit-box;
+  max-width: 100%;
+  /* Fallback for non-webkit */
+  margin: 0 auto;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
Index: trunk/modules/droplets/themes/default/css/component.css
===================================================================
--- trunk/modules/droplets/themes/default/css/component.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/component.css	(revision 2)
@@ -0,0 +1,283 @@
+@font-face {
+    font-weight: normal;
+    font-style: normal;
+    font-family: 'codropsicons';
+    src: url('../fonts/codropsicons/codropsicons.eot');
+    src: url('../fonts/codropsicons/codropsicons.eot?#iefix') format('embedded-opentype'), url('../fonts/codropsicons/codropsicons.woff') format('woff'), url('../fonts/codropsicons/codropsicons.ttf') format('truetype'), url('../fonts/codropsicons/codropsicons.svg#codropsicons') format('svg');
+}
+
+*,
+*:after,
+*:before {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.clearfix:before,
+.clearfix:after {
+    display: table;
+    content: '';
+}
+
+.clearfix:after {
+    clear: both;
+}
+
+.inputfile {
+    width: 0.1px;
+    height: 0.1px;
+    opacity: 0;
+    overflow: hidden;
+    position: absolute;
+    z-index: -1;
+}
+
+.input-file {
+opacity: 1;
+overflow: hidden;
+height: 2.625em;
+right: 11.225em;
+margin-top: -2.825em;
+}
+
+.js .inputfile {
+width: 0.1px;
+height: 0.1px;
+opacity: 0;
+overflow: hidden;
+position: absolute;
+z-index: -1;
+}
+
+.inputfile + label {
+max-width: 80%;
+font-size: 1.25rem;
+/* 20px */
+font-weight: 700;
+text-overflow: ellipsis;
+white-space: nowrap;
+cursor: pointer;
+display: inline-block;
+overflow: hidden;
+padding: 0.625rem 1.25rem;
+/* 10px 20px */
+}
+
+.no-js .inputfile + label {
+display: none;
+}
+
+.inputfile:focus + label,
+.inputfile.has-focus + label {
+outline: 1px dotted #000;
+outline: -webkit-focus-ring-color auto 5px;
+}
+
+.inputfile + label * {
+/* pointer-events: none; */
+/* in case of FastClick lib use */
+}
+
+.inputfile + label svg {
+width: 1em;
+height: 1em;
+vertical-align: middle;
+fill: currentColor;
+margin-top: -0.25em;
+/* 4px */
+margin-right: 0.25em;
+/* 4px */
+}
+
+
+/* style 1 */
+
+.inputfile-1 + label {
+color: #f1e5e6;
+background-color: #d3394c;
+}
+
+.inputfile-1:focus + label,
+.inputfile-1.has-focus + label,
+.inputfile-1 + label:hover {
+background-color: #722040;
+}
+
+
+/* style 2 */
+
+.inputfile-2 + label {
+color: #d3394c;
+border: 2px solid currentColor;
+}
+
+.inputfile-2:focus + label,
+.inputfile-2.has-focus + label,
+.inputfile-2 + label:hover {
+color: #722040;
+}
+
+
+/* style 3 */
+
+.inputfile-3 + label {
+color: #d3394c;
+}
+
+.inputfile-3:focus + label,
+.inputfile-3.has-focus + label,
+.inputfile-3 + label:hover {
+color: #722040;
+}
+
+
+/* style 4 */
+
+.inputfile-4 + label {
+color: #d3394c;
+}
+
+.inputfile-4:focus + label,
+.inputfile-4.has-focus + label,
+.inputfile-4 + label:hover {
+color: #722040;
+}
+
+.inputfile-4 + label figure {
+width: 100px;
+height: 100px;
+border-radius: 50%;
+background-color: #d3394c;
+display: block;
+padding: 20px;
+margin: 0 auto 10px;
+}
+
+.inputfile-4:focus + label figure,
+.inputfile-4.has-focus + label figure,
+.inputfile-4 + label:hover figure {
+background-color: #722040;
+}
+
+.inputfile-4 + label svg {
+width: 100%;
+height: 100%;
+fill: #f1e5e6;
+}
+
+
+/* style 5 */
+
+.inputfile-5 + label {
+color: #d3394c;
+}
+
+.inputfile-5:focus + label,
+.inputfile-5.has-focus + label,
+.inputfile-5 + label:hover {
+color: #722040;
+}
+
+.inputfile-5 + label figure {
+width: 100px;
+height: 135px;
+background-color: #d3394c;
+display: block;
+position: relative;
+padding: 30px;
+margin: 0 auto 10px;
+}
+
+.inputfile-5:focus + label figure,
+.inputfile-5.has-focus + label figure,
+.inputfile-5 + label:hover figure {
+background-color: #722040;
+}
+
+.inputfile-5 + label figure::before,
+.inputfile-5 + label figure::after {
+width: 0;
+height: 0;
+content: '';
+position: absolute;
+top: 0;
+right: 0;
+}
+
+.inputfile-5 + label figure::before {
+border-top: 20px solid #dfc8ca;
+border-left: 20px solid transparent;
+}
+
+.inputfile-5 + label figure::after {
+border-bottom: 20px solid #722040;
+border-right: 20px solid transparent;
+}
+
+.inputfile-5:focus + label figure::after,
+.inputfile-5.has-focus + label figure::after,
+.inputfile-5 + label:hover figure::after {
+border-bottom-color: #d3394c;
+}
+
+.inputfile-5 + label svg {
+width: 100%;
+height: 100%;
+fill: #f1e5e6;
+}
+
+
+/* style 6 */
+
+.inputfile-6 + label {
+color: #d3394c;
+}
+
+.inputfile-6 + label {
+border: 1px solid #d3394c;
+background-color: #f1e5e6;
+padding: 0;
+}
+
+.inputfile-6:focus + label,
+.inputfile-6.has-focus + label,
+.inputfile-6 + label:hover {
+border-color: #722040;
+}
+
+.inputfile-6 + label span,
+.inputfile-6 + label strong {
+padding: 0.625rem 1.25rem;
+font-weight: normal;
+font-size: 0.925em;
+/* 10px 20px */
+}
+
+.inputfile-6 + label span {
+width: 200px;
+min-height: 2em;
+display: inline-block;
+text-overflow: ellipsis;
+white-space: nowrap;
+overflow: hidden;
+vertical-align: top;
+}
+
+.inputfile-6 + label strong {
+height: 100%;
+color: #f1e5e6;
+background-color: #d3394c;
+display: inline-block;
+}
+
+.inputfile-6:focus + label strong,
+.inputfile-6.has-focus + label strong,
+.inputfile-6 + label:hover strong {
+background-color: #722040;
+}
+
+@media screen and (max-width: 50em) {
+.inputfile-6 + label strong {
+display: block;
+}
+}
Index: trunk/modules/droplets/themes/default/css/customAlert.css
===================================================================
--- trunk/modules/droplets/themes/default/css/customAlert.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/customAlert.css	(revision 2)
@@ -0,0 +1,76 @@
+/**
+ * customAlert
+ * Author: Philippe Assis
+ * Doc and repo: https://github.com/PhilippeAssis/custom-alert
+ *
+ * Alert e confirm personalizados.
+ * FF, Chromer, IE(>=9)
+ *
+ *                              ATENÇÂO
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes,
+ * a não ser que você saiba o que esta fazendo.
+ */
+#customAlert-overlay,
+#customConfirm-overlay { display: none; opacity: 0.5; position: fixed; top: 0px; left: 0px; width: 100vw; height: 100vh; z-index: 99999; background: #000000; }
+#customAlert { background: #FFFFFF; }
+#customAlert button { color: #5E5E5E; background: #BABABA; }
+#customAlert button:hover { color: #E6E6E6; background: #666666; }
+#customConfirm { background: #FFFFFF; }
+
+
+#customConfirm button.cancel,
+#customConfirm button.confirm { font-weight: bold; }
+
+#customConfirm button.confirm { margin-right: 10px; color: #204625; background: #68BB74; }
+#customConfirm button.confirm:hover { color: #DCEFDF; background: #3F8D4B; }
+#customConfirm button.cancel { color: #F8D8D3; background: #E2614B; }
+#customConfirm button.cancel:hover { color: #F8D8D3; background: #B0321C; }
+
+#customAlert,
+#customConfirm { border-radius: 5px; width: 40%; font-size: 1.125em; /*display: none;*/ position: fixed; max-width: 100vw; max-height: 100vh; /*z-index: 1000;*/ top: 5%; margin: auto 30%; padding: 0.125em; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-transition: opacity 400ms ease-in 0s; -moz-transition: opacity 400ms ease-in 0s; transition: opacity 400ms ease-in 0s; }
+
+#customAlert header,
+#customConfirm header { color: #3E6D86; text-align: left; font-size: 1.125em; font-weight: bold; background: rgba(0, 0, 0, 0) linear-gradient(#fff, #999) repeat scroll 0 0; }
+
+#customAlert .body,
+#customConfirm .body { padding: 0; color: #5C5C5C; font-size: 1.125em; background: #FFFFFF; text-align: center; opacity: 1; }
+#customConfirm .body p { font-weight: bold; color: #F00606; }
+
+#customAlert .footer,
+#customConfirm .footer { background: #FFFFFF; text-align: center; margin: 1.925em auto 0; }
+#customAlert button,
+#customConfirm button { min-width: 3.025em; margin-bottom: 5px; padding: 5px; font-size: 0.9em; word-wrap: break-word; }
+#customAlert button:hover,
+#customConfirm button:hover { cursor: pointer; }
+
+#customAlert button.close,
+#customConfirm button.close {
+  background: #215a7a none repeat scroll 0 0;
+  border-radius: 1.925em;
+  box-shadow: 1px 1px 3px #000000;
+  color: #ffffff !important;
+  font-size: 1.225em;
+  font-weight: bold;
+  line-height: 2.025em;
+  position: absolute;
+  right: -12px;
+  text-align: center;
+  text-decoration: none;
+  top: -10px;
+  width: 3.025em;
+}
+#customAlert button.close:hover,
+#customConfirm button.close:hover { background: #FE0606 none repeat scroll 0 0; }
+
+div.droplets h2 {
+  color: #3d6f8a;
+  font-size: 1.125em;
+}
+@media (min-width: 321px) {
+    #customAlert,
+    #customConfirm { top: 20%; }
+}
+@media (max-width: 550px) {
+    #customAlert,
+    #customConfirm { margin-left: -50vw; }
+}
Index: trunk/modules/droplets/themes/default/css/default.css
===================================================================
--- trunk/modules/droplets/themes/default/css/default.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/default.css	(revision 2)
@@ -0,0 +1,174 @@
+@import url("TableScroll.css");
+/*
+table.droplets thead tr {
+  background: #7d9ab6 none repeat scroll 0 0;
+  font-size: 0.9525em;
+  font-weight: normal;
+  height: 3.225em;
+  padding: 0.325em 0;
+}
+div#dr-legende ul li { display: block; line-height: 1.5; margin-bottom: 2px; text-align: center; vertical-align: middle; white-space: nowrap; }
+.droplets ul, .droplets li { list-style: none; margin: 0; padding: 0; }
+*/
+
+div.droplets { margin: auto; padding-bottom: 1.525em; }
+div.droplets table { border-collapse: collapse; width: 100%;  }
+.droplets .setting_name { vertical-align: top; }
+.droplets .newsection { border-top: 1px dashed #FFFFFF; }
+div.droplets table.droplets_data tbody tr:hover { background: #FBFCE0; cursor: default; }
+div.droplets table.droplets_data tbody td { font-weight: normal; white-space: nowrap; }
+div.droplets table.droplets_data tbody td:nth-child(5) { font-weight: normal; }
+.active_status { cursor: pointer; text-align: center; }
+table.droplets tbody td.setting_name { text-align: right; padding-right: 0.525em; font-weight: bold; color: #105171; }
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.65+100 */
+div.droplets table.droplets_import thead tr { font-weight: bold; font-size: 1.2525em; height: 2.225em; padding: 0.525em 0; background: #538199; color: #fff; }
+div.droplets table.droplets_import tbody tr:nth-child(odd) { background: #FFFFFF; }
+div.droplets table.droplets_import tbody tr { line-height: 1.625em; background: #e8e8e8; }
+div.droplets table.droplets_import tbody tr:hover { background: #FBFCE0; cursor: default; }
+div.droplets table.droplets_import tbody td { padding: 0.2525em 0; font-weight: bold; }
+div.droplets table.droplets_import tbody td:nth-child(5) { font-weight: normal; }
+div.droplets table.droplets_import thead th { vertical-align: middle; }
+div.droplets table.droplets_import thead th:first-child,
+div.droplets table.droplets_import tbody td:first-child { padding: 0 0.2525em; text-align: center; }
+div.droplets table.droplets_import tbody td:nth-child(2) { text-align: center; }
+div.droplets table.droplets_import tbody td:nth-child(3) { padding-bottom: 0.3525em; }
+div.droplets table.droplets_import tbody td:last-child { padding: 0 0.4525em; text-align: center; font-weight: normal; }
+div.droplets table.droplets_import tbody td div { margin: 0.4525em auto; padding: 0.3525em 0; height: 1.625em; }
+
+div.droplets img { vertical-align: middle; margin-bottom: 0; }
+
+div.droplets .noButton { color: #434343; border: none; background: transparent; text-align: left; font-weight: bold; cursor: pointer; padding: 0; }
+section.droplets.drop-outer { padding: 1px; border: 1px solid #DEE5F8; border-radius: 5px; margin: 0.925em auto; box-shadow: 1px 1px 5px #666666; }
+section.droplets .button:hover { color: #000000; }
+header.droplets { margin: 1.1525em 0; }
+
+div.drop-backup .btn,
+div.droplets .btn { color: #003366; -moz-user-select: none; border: 1px solid #AAAAAA; border-radius: 4px; display: inline-block; /*font-size: 1.0925em; */font-weight: normal; margin-bottom: 2px; padding: 0.455em 1.125em; text-align: center; vertical-align: middle; white-space: nowrap; background: #E1E1E1 none; }
+div.drop-backup .btn { font-size: 0.8925em; font-weight: bold; margin-left: 0.525em; }
+div.drop-backup .btn:hover,
+div.droplets .btn:hover { cursor: pointer; border: 1px solid #5D819F; -webkit-box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); -moz-box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); box-shadow: inset 1px -10px 10px -11px rgba(77,106,179,0.51); background: #FFFFFF; }
+.drop-backup { margin: 1.8525em 0.925em; }
+div.drop-backup button.btn { padding: 0.165em 1.125em; }
+
+div.droplets .btn {
+  -moz-user-select: none;
+  border: 1px solid transparent;
+  border-radius: 0.525em;
+  cursor: pointer;
+  display: inline-block;
+  vertical-align: middle;
+  white-space: nowrap;
+}
+div.droplets .btn {
+  background-image: none;
+  font-size: 1.0em;
+  font-weight: normal;
+  line-height: 1.42857;
+  margin: 0;
+  padding: 6px 12px;
+  text-align: center;
+}
+
+div.droplets .btn.input-file { margin-bottom: 1.9525em!important; }
+
+div.droplets .btn-lg, div.droplets .btn-group-lg > div.droplets .btn {
+  border-radius: 6px;
+  font-size: 18px;
+  line-height: 1.33333;
+  padding: 10px 16px;
+}
+div.droplets .btn-default {
+  background-color: #DFDFDF;
+  border-color: #ccc;
+  color: #3C3838;
+}
+
+div.droplets .btn-danger {
+  background-color: #F71B13;
+  border-color: #d43f3a;
+  color: #DEDADA;
+}
+
+div.droplets .btn-success {
+  background-color: #73C46C;
+  border-color: #2C8B39;
+  color: #3C3838;
+}
+
+div.droplets .btn:hover {
+  background-color: #DADADA;
+  border: 1px solid #3E3E3E;
+ /* color: #000000;*/
+}
+#custom-modal-template.btn:hover { border: 1px solid transparent; }
+
+div.droplet-import,
+div.droplet-import div { padding-top: 2.125em; }
+div.droplet-import span,
+div.droplet-import div span { font-weight: normal; font-size: 1.025em; }
+div.droplet-import span select,
+div.droplet-import div span input { line-height: 1.525em; padding: 0.125em; width: 30%; }
+div.droplets div.success { font-size: 1.425em; color: #3D6F8A; text-align: left; line-height: 1.625em; }
+div.droplets.overview h2 { font-size: 1.825em; color: #3D6F8A; }
+div.droplets h4 { border-bottom: 0px solid #dddddd; margin: 0; padding-bottom: 5px; color: #3D6F8A; }
+.fileUpload { position: relative; overflow: hidden; margin: 10px; }
+.fileUpload input.upload-file { position: absolute; top: 0; right: 0; margin: 0; padding: 0; font-size: 20px; cursor: default; opacity: 0; filter: alpha(opacity=0); }
+
+.droplets button span.tooltip { display: none; }
+.droplets button:hover span.tooltip { position: absolute; display: block; top: 1.5em; left: 2em; border: 1px solid black; background-color:#D9D093; padding: 0.2em; }
+/* */
+input.upload-file {border: medium none; cursor: pointer; margin: 0; opacity: 1; padding: 0.525em; right: 0; top: 0;}
+.noInput { background-color: #e9e9e9; border: 0 groove #6799c4; font-weight: bold; margin: 0; min-width: 250px; text-align: left; width: 100%; line-height: 2.225em; }
+tr.noHeight, tr.noHeight td { height: 0; padding: 0; display: none; }
+/*---------------------------------------------------------------------*/
+div#dr-legende { line-height: 2.225; font-size: 0.95em; }
+div#dr-legende nav ul li img{ width: 26px; height: 20px; padding: 0 6px; }
+div#dr-legende img:first-child{padding-left:0;}
+div#dr-legende img:first-child {
+    min-height: 1em;
+    padding-left: 0;
+    min-width: 1em;
+}
+nav.table {
+  border: 0px solid #cd9556;
+  border-collapse: collapse;
+  border-spacing: 1px;
+  width: 100%;
+}
+ul.tr {
+  display: table-row;
+}
+
+li.td {
+  display: table-cell;
+  padding: 3px;
+}
+
+.nowrap {
+  white-space: nowrap;
+}
+.cursor { cursor: pointer; }
+/*---------------------------------------------------------------------*/
+tbody.icons td button img { width: 32px; height: 20px; padding: 0 6px; }
+thead.icons th button img { width: 32px; height: 20px; padding: 0 6px; }
+div ~ li img { width: 36px; height: 20px; padding: 0 6px; }
+
+tr.sectionrow { line-height: 1.525; }
+
+.w3-table th:first-child, .w3-table td:first-child,
+.w3-table-all th:first-child,
+.w3-table-all td:first-child { padding: 6px; }
+
+.w3-table td, .w3-table th, .w3-table-all td, .w3-table-all th {
+  padding: 5px 4px;
+  display: table-cell;
+  text-align: left;
+  vertical-align: text-bottom;
+}
+
+.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
+.w3-table-all tr:nth-child(odd){background-color:#fff}
+.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
+.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}
+.w3-centered tr th,.w3-centered tr td{text-align:center}
+/* ----------- Retina Screens ----------- */
Index: trunk/modules/droplets/themes/default/css/dialogBox.css
===================================================================
--- trunk/modules/droplets/themes/default/css/dialogBox.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/dialogBox.css	(revision 2)
@@ -0,0 +1,27 @@
+#close { display: none; }
+.modalDialog { position: fixed; font-family: Arial, Helvetica, sans-serif; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.6); z-index: 99999; opacity: 0; -webkit-transition: opacity 400ms ease-in; -moz-transition: opacity 400ms ease-in; transition: opacity 400ms ease-in; pointer-events: none; }
+.modalDialog:target { opacity: 1; pointer-events: auto; }
+.modalDialog > div { width: 60.525em; position: relative; margin: 10% auto; border-radius: 10px; background: -moz-linear-gradient(#fff, #999); background: -webkit-linear-gradient(#fff, #999); background: -o-linear-gradient(#fff, #999); background: #FFFFFF; }
+.close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 3.025em; position: absolute; right: -12px; text-align: center; top: -10px; width: 3.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.close:hover { background: #FF1100; }
+
+.modal-Dialog { background: rgba(0, 0, 0, 0.6) none repeat scroll 0 0; position: fixed; top: 0; right: 0; bottom: 0; left: 0; height: 100%; z-index: 99999; }
+.modal-Dialog { -webkit-transition: opacity 800ms ease-in; -moz-transition: opacity 800ms ease-in; transition: opacity 800ms ease-in; }
+.modal-Dialog > div {
+    -webkit-transition: width 2s, height 2s, background-color 2s, -webkit-transform 2s;
+    transition: width 2s, height 2s, background-color 2s, transform 2s;
+ }
+.modal-Dialog .close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 3.025em; position: absolute; top: 1.125em; right: 0; text-align: center; width: 3.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.modal-Dialog .close:hover { background: #FF1100; }
+
+.modal-Dialog form {  }
+
+.modalDialog form,
+.modalDialog iframe { width: 50.225em; height: 25.525em; border: none; }
+
+footer.modal-label, header.modal-label { background: -moz-linear-gradient(#fff, #999); /*height: 3.525em;*/ padding: 0 0.525em 0.525em; }
+footer.modal-label { padding: 1.525em 0; }
+div.modal-inner { padding: 0.825em 0.525em 0; margin: auto 4%; overflow: hidden; }
+div.modal-inner iframe { border: none; height: 20.225em; }
+[draggable=true] { -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; user-select: none; /* Required to make elements draggable in old WebKit */ -khtml-user-drag: element; -webkit-user-drag: element; }
+[draggable=true] header { cursor: move; }
Index: trunk/modules/droplets/themes/default/css/fileupload.css
===================================================================
--- trunk/modules/droplets/themes/default/css/fileupload.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/fileupload.css	(revision 2)
@@ -0,0 +1,36 @@
+@font-face { font-weight: normal; font-style: normal; font-family: 'codropsicons'; src: url('../fonts/codropsicons/codropsicons.eot'); src: url('../fonts/codropsicons/codropsicons.eot?#iefix') format('embedded-opentype'), url('../fonts/codropsicons/codropsicons.woff') format('woff'), url('../fonts/codropsicons/codropsicons.ttf') format('truetype'), url('../fonts/codropsicons/codropsicons.svg#codropsicons') format('svg'); }
+*,
+*:after,
+*:before { -webkit-box-sizing: border-box; box-sizing: border-box; }
+.clearfix:before,
+.clearfix:after { display: table; content: ''; }
+.clearfix:after { clear: both; }
+.inputfile { width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1; }
+.input-file { opacity: 1; overflow: hidden; height: 2.625em; right: 11.225em; margin-top: -2.825em; }
+.js .inputfile { width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1; }
+.inputfile + label { max-width: 80%; font-size: 1.125rem; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; display: inline-block; overflow: hidden; padding: 0.625rem 1.25rem; /* 10px 20px */ }
+.no-js .inputfile + label { display: none; }
+.inputfile:focus + label,
+.inputfile.has-focus + label { outline: -webkit-focus-ring-color auto 5px; outline: 1px dotted #000000; }
+.inputfile + label * { }
+.inputfile + label svg { width: 1em; height: 1em; vertical-align: middle; fill: currentColor; margin-top: -0.25em; /* 4px */ margin-right: 0.25em; /* 4px */ }
+/* style 6 */
+.inputfile-6 + label { color: #D3394C; }
+.inputfile-6 + label { border: 1px solid #1E5582; height: 2.125em; padding: 0; background: #e3f1f6; }
+.inputfile-6:focus + label,
+.inputfile-6.has-focus + label,
+.inputfile-6 + label:hover { border-color: #1E5582; }
+.inputfile-6 + label span,
+.inputfile-6 + label strong { padding: 0.425rem 0.25rem; font-weight: normal; font-size: 0.925em; /* 10px 20px */ }
+.inputfile-6 + label span { width: 2.525em; min-height: 2.525em; display: inline-block; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; vertical-align: top; border-radius: 0.125em; }
+.inputfile-6 + label strong { height: 100%; color: #F1E5E6; display: inline-block; background: #1E5582; }
+.inputfile-6:focus + label strong,
+.inputfile-6.has-focus + label strong,
+.inputfile-6 + label:hover strong { background: #3088A5; }
+div.file-select-box span select { width: 35%; height: 2.125em; border-radius: 0.125em; font-size: 1.225em; font-weight: bold; text-overflow: ellipsis; border: 1px solid #1E5582; color: #1E5582; background: #E3F1F6; }
+div.file-select-box span select option{ color: #000000; font-weight: normal; font-size: 0.925em; background: #FFFFFF; }
+div.file-box { padding-top: 1.525em !important; white-space: normal; }
+div.file-box span button { margin: -1.925em auto; }
+@media screen and (max-width: 50em) {
+    .inputfile-6 + label strong { display: block; }
+}
Index: trunk/modules/droplets/themes/default/css/form.css
===================================================================
--- trunk/modules/droplets/themes/default/css/form.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/form.css	(revision 2)
@@ -0,0 +1,31 @@
+.form-field {
+border: 3px solid #1f3885;
+background: #EDEDED;
+-webkit-border-radius: 4px;
+-moz-border-radius: 4px;
+border-radius: 4px;
+color: #1f4863;
+-webkit-box-shadow: rgba(255,255,255,0.4) 0 2px 0, inset rgba(43, 106, 133,0.4) 0 3px 2px;
+-moz-box-shadow: rgba(255,255,255,0.4) 0 2px 0, inset rgba(43, 106, 133,0.4) 0 3px 2px;
+box-shadow: rgba(255,255,255,0.4) 0 2px 0, inset rgba(43, 106, 133,0.4) 0 3px 2px;
+padding:8px;
+margin-bottom:20px;
+font-size: 1.225em;
+} 
+.form-field:focus {
+background: #fff;
+color: #395E96;
+}
+.form-container h2 {
+text-shadow: #386B92 0 2px 0;
+font-size: 1.225em;
+margin: 0 0 10px 0;
+font-weight:bold;
+text-align:center;
+}
+.form-title {
+margin-bottom:10px;
+color: #725129;
+text-shadow: #fdf2e4 0 1px 0;
+}
+.rename-input { border: 0.025em groove #5492AC; width: 90%;  margin: auto 4%; }
Index: trunk/modules/droplets/themes/default/css/reset.css
===================================================================
--- trunk/modules/droplets/themes/default/css/reset.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/reset.css	(revision 2)
@@ -0,0 +1,48 @@
+/* http://meyerweb.com/eric/tools/css/reset/ 
+   v2.0 | 20110126
+   License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed, 
+figure, figcaption, footer, header, hgroup, 
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	font-size: 100%;
+	font: inherit;
+	vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure, 
+footer, header, hgroup, menu, nav, section {
+	display: block;
+}
+body {
+	line-height: 1;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: '';
+	content: none;
+}
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/css/scrollTable.css
===================================================================
--- trunk/modules/droplets/themes/default/css/scrollTable.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/scrollTable.css	(revision 2)
@@ -0,0 +1,93 @@
+/*
+.table-fixed { width: 100%; background-color: #f3f3f3;}
+.table-fixed tbody { height: 200px; overflow-y: auto; width: 100%;}
+.table-fixed thead, .table-fixed tbody, .table-fixed tr, .table-fixed td, .table-fixed th { display: flexbox;}
+.table-fixed tbody td { }
+.table-fixed thead tr th { border-color: #e67e22;}
+*/
+tbody.scrolling {
+    max-height: 31.625em;
+    overflow: auto;
+    display: inline-block;
+    width: 100%;
+}
+/*
+table#tableData,
+table#news-ScrollTable {
+    color: #333;
+    font-family: Helvetica, Arial, sans-serif;
+    width: 100%;
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+td.news-Scroll, th.news-Scroll {
+    height: 2.255em;
+}
+th.news-Scroll {
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    color: #FFF;
+    font-weight: bold;
+}
+td.news-Scroll { background: #FFFFFF; text-align: left; }
+tr.news-Scroll td { background: #FFFFFF; }
+tr.news-Scroll:nth-child(odd) td { background: #e8e8e8; }
+tr.news-Scroll:hover td { background: #FBFCE0; }
+ tr.news-Scroll td.news-Scroll:first-child, tr.news-Scroll th.news-Scroll:first-child {
+    font-size: 0.9525em;
+    text-align: right;
+   padding-right: 5px;
+    width: 100%;
+}
+ tr.news-Scroll:first-child th.news-Scroll:nth-child(2) { border-radius: 5px 0 0 0;}
+tr.news-Scroll:first-child th.news-Scroll:last-child { border-radius: 0 5px 0 0;}
+
+thead.news-Scroll { display: table; float: left; width: 100%; }
+
+table#news-ScrollTable { text-align :left; font-size :12px; border :1px ridge #dadada; font-family :verdana; background :transparent; color :#0066ff; }
+table.mod_form,
+table#news-ScrollTable { border-collapse: collapse; width: 100%; }
+table#news-ScrollTable thead  { cursor :pointer; width: 100%; }
+
+table#news-ScrollTable thead tr,
+table#news-ScrollTable tfoot tr { font-weight: bold; font-size: 0.9525em; height: 1.925em; padding: 0.525em 0; background: #7D9AB6; background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #45788D; }
+
+table#news-ScrollTable tbody tr {  }
+table#news-ScrollTable tbody tr { line-height: 1.225em; background: #e8e8e8;  }
+table#news-ScrollTable tbody tr:nth-child(odd) { background: #FFFFFF; }
+table#news-ScrollTable tbody tr:hover { background: #FBFCE0; }
+*/
+
+/*****************************************/
+
+.scrolling-table-container {
+    height: 21.225em;
+    overflow-y: scroll;
+    overflow-x: hidden;
+}
+
+  div.outer
+  {
+    width : 100%;
+  }
+  table.table-scroll
+  {
+     table-layout:fixed;
+     width: 100%; /* same as containing div */
+  }
+  table.table-scroll th, table.table-scroll td
+  {
+   /* border: solid 0px #ccc;*/
+  }
+table.table-scroll thead { display: block; }
+table.table-scroll tbody { display: block; }
+
+table.table-scroll tbody {
+    height: 42.025em;       /* Just for the demo          */
+    width: 100%;
+/*
+    overflow-y: auto;
+    overflow-x: hidden;
+*/
+}
Index: trunk/modules/droplets/themes/default/css/toollTips.css
===================================================================
--- trunk/modules/droplets/themes/default/css/toollTips.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/toollTips.css	(revision 2)
@@ -0,0 +1,115 @@
+.demo {
+	padding:2%;
+	border-radius:3px;
+	box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1), 0px 1px 3px rgba(0,0,0,0.1);
+	border:1px solid #acac9c;
+	background:#d7d8c8 url('body-bg.png');
+}
+
+.demo p + p {
+	margin:30px 0px 0px;
+}
+
+.demo p {
+	font-size:14px;
+}
+
+.demo a {
+	margin:5px 10px 0px 0px;
+	float:left;
+}
+
+	.demo .tooltip {
+		width:10px;
+		height:10px;
+		display:inline-block;
+		position:relative;
+		box-shadow:0px 0px 0px 2px #aaaa9e;
+		border-radius:1000px;
+		border:1px solid #fdfdfc;
+		background:#f2f3ee;
+	}
+
+	.demo .tooltip:hover .txt {
+		display:inline-block;
+	}
+
+		.demo .tooltip .txt {
+			width:200px;
+			padding:10px 15px;
+			display:none;
+			position:absolute;
+			z-index:1000;
+			border-radius:3px;
+			background:rgba(0,0,0,0.75);
+			font-size:12px;
+			font-weight:normal;
+			text-shadow:-1px 1px 0px rgba(0,0,0,0.2);
+			line-height:150%;
+			color:#fff;
+		}
+
+		.demo .tooltip .txt:before {
+			width:0px;
+			padding:0px;
+			position:absolute;
+			content:'';
+		}
+
+		/* Top */
+		.demo .tooltip.top .txt {
+			bottom:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.top .txt:before {
+			bottom:-5px;
+			left:10px;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-top:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Right */
+		.demo .tooltip.right .txt {
+			top:-10px;
+			left:20px;
+		}
+
+		.demo .tooltip.right .txt:before {
+			top:10px;
+			left:-5px;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-right:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Bottom */
+		.demo .tooltip.bottom .txt {
+			top:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.bottom .txt:before {
+			top:-5px;
+			left:10px;
+			bottom:auto;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-bottom:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Left */
+		.demo .tooltip.left .txt {
+			top:-10px;
+			right:20px;
+		}
+
+		.demo .tooltip.left .txt:before {
+			top:10px;
+			right:-5px;
+			bottom:auto;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-left:5px solid rgba(0,0,0,0.75); 
+		}
Index: trunk/modules/droplets/themes/default/css/tooltips.css
===================================================================
--- trunk/modules/droplets/themes/default/css/tooltips.css	(nonexistent)
+++ trunk/modules/droplets/themes/default/css/tooltips.css	(revision 2)
@@ -0,0 +1,115 @@
+.demo {
+	padding:2%;
+	border-radius:3px;
+	box-shadow:inset 0px 1px 0px rgba(255,255,255,0.1), 0px 1px 3px rgba(0,0,0,0.1);
+	border:1px solid #acac9c;
+	background:#d7d8c8 url('body-bg.png');
+}
+
+.demo p + p {
+	margin:30px 0px 0px;
+}
+
+.demo p {
+	font-size:14px;
+}
+
+.demo a {
+	margin:5px 10px 0px 0px;
+	float:left;
+}
+
+	.demo .tooltip {
+		width:10px;
+		height:10px;
+		display:inline-block;
+		position:relative;
+		box-shadow:0px 0px 0px 2px #aaaa9e;
+		border-radius:1000px;
+		border:1px solid #fdfdfc;
+		background:#f2f3ee;
+	}
+
+	.demo .tooltip:hover .txt {
+		display:inline-block;
+	}
+
+		.demo .tooltip .txt {
+			width:200px;
+			padding:10px 15px;
+			display:none;
+			position:absolute;
+			z-index:1000;
+			border-radius:3px;
+			background:rgba(0,0,0,0.75);
+			font-size:12px;
+			font-weight:normal;
+			text-shadow:-1px 1px 0px rgba(0,0,0,0.2);
+			line-height:150%;
+			color:#fff;
+		}
+
+		.demo .tooltip .txt:before {
+			width:0px;
+			padding:0px;
+			position:absolute;
+			content:'';
+		}
+
+		/* Top */
+		.demo .tooltip.top .txt {
+			bottom:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.top .txt:before {
+			bottom:-5px;
+			left:10px;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-top:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Right */
+		.demo .tooltip.right .txt {
+			top:-10px;
+			left:20px;
+		}
+
+		.demo .tooltip.right .txt:before {
+			top:10px;
+			left:-5px;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-right:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Bottom */
+		.demo .tooltip.bottom .txt {
+			top:20px;
+			left:-10px;
+		}
+
+		.demo .tooltip.bottom .txt:before {
+			top:-5px;
+			left:10px;
+			bottom:auto;
+			border-left:5px solid transparent;
+			border-right:5px solid transparent; 
+			border-bottom:5px solid rgba(0,0,0,0.75); 
+		}
+
+		/* Left */
+		.demo .tooltip.left .txt {
+			top:-10px;
+			right:20px;
+		}
+
+		.demo .tooltip.left .txt:before {
+			top:10px;
+			right:-5px;
+			bottom:auto;
+			border-top:5px solid transparent;
+			border-bottom:5px solid transparent; 
+			border-left:5px solid rgba(0,0,0,0.75); 
+		}
Index: trunk/modules/droplets/themes/default/delete_droplets.htt
===================================================================
--- trunk/modules/droplets/themes/default/delete_droplets.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/delete_droplets.htt	(revision 2)
@@ -0,0 +1,36 @@
+<!-- BEGIN main_block -->
+  <div id="openModal" class="modal-Dialog" draggable="true">
+    <div>
+        <form action="{ToolUrl}" method="post">
+            <input type="hidden" name="DropletsToDelete" value="{sDropletsToDelete}" />
+            <input type="hidden" name="{FTAN_NAME}" value="{FTAN_VALUE}" />
+            <div id="customConfirm" style="display: block;">
+                <button name="cancel" class="close" type="button" onclick="window.location='{ToolUrl}';">X</button>
+                <header class=" modal-label">{DROPLET_MESSAGE_DELETE_DROPLETS}</header>
+                <div class="body">
+                    <h4>{DROPLET_MESSAGE_CONFIRM_DROPLET_DELETING}</h4>
+                    <p>{inDroplets}</p>
+                </div>
+                <div class="footer">
+                    <button name="command" type="submit" value="delete_droplet?droplet_id={iDropletIdKey}" class="confirm btn btn-success">{DR_TEXT_DELETE}</button>
+                    <button name="cancel" class="cancel btn btn-danger" type="button" onclick="window.location='{ToolUrl}';">{TEXT_CANCEL}</button>
+                </div>
+              <footer class="modal-label">
+<!--
+          <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+          <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+-->
+              </footer>
+            </div>
+        </form>
+    </div>
+</div>
+<script >
+<!--
+domReady(function() {
+    LoadOnFly('head', "{sAddonThemeUrl}/css/dialogBox.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/customAlert.css");
+});
+-->
+</script>
+<!-- END main_block -->
Index: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.eot
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.eot
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.svg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/svg

Property changes on: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.svg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/svg
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/modules/droplets/themes/default/fonts/codropsicons/codropsicons.woff
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/fonts/codropsicons/license.txt
===================================================================
--- trunk/modules/droplets/themes/default/fonts/codropsicons/license.txt	(nonexistent)
+++ trunk/modules/droplets/themes/default/fonts/codropsicons/license.txt	(revision 2)
@@ -0,0 +1,6 @@
+Icon Set:	Font Awesome -- http://fortawesome.github.com/Font-Awesome/
+License:	SIL -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
+
+
+Icon Set:	Eco Ico -- http://dribbble.com/shots/665585-Eco-Ico
+License:	CC0 -- http://creativecommons.org/publicdomain/zero/1.0/
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/img/16/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/16/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/copy_old.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/copy_old.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/edit_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/edit_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/16/help.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/info.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/info.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/invalid.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/16/invalid.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/ok_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/ok_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/16/trash_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/16/trash_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/RedCross.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/RedCross.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/24/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/closebutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/closebutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/copy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/copy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/droplet.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/droplet.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/droplet_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/droplet_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/group_status_0.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/24/group_status_0.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/group_status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/group_status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/group_status_1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/24/group_status_1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/group_status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/group_status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/info.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/24/info.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/info.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/info.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/invalid.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/invalid.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/modify.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/modify.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/rename.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/rename.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/24/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/24/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/copy_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/copy_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/copy_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/copy_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/delete_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/delete_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/delete_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/delete_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/download.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/download.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/modify_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/modify_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/modify_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/modify_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page add_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page add_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page add_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page add_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page_remove_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page_remove_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/32/page_remove_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/32/page_remove_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/RedCross.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/RedCross.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/closebutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/closebutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/copy_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/copy_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/copy_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/copy_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/copy_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/copy_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/copy_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/copy_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/delete_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/delete_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/delete_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/delete_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/delete_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/delete_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/droplet.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/droplet.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/droplet_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/droplet_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/droplets_logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/droplets_logo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/edit_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/edit_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/empty.txt
===================================================================
--- trunk/modules/droplets/themes/default/img/empty.txt	(nonexistent)
+++ trunk/modules/droplets/themes/default/img/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/img/group_status_0.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/group_status_0.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/group_status_1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/group_status_1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/help.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/invalid.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/invalid.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/invalid.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/invalid.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/invalid_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/invalid_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/modify_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/modify_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/modify_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/modify_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/modify_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/modify_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/ok_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/ok_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page add_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page add_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page add_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page add_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page_remove_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page_remove_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/page_remove_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/page_remove_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/rename_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/rename_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/s-radio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/s-radio.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/settings.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/settings.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/b.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/b.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/background.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/background.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/l.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/l.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/lb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/lb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/lt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/lt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/r.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/r.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/rb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/rb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/rt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/rt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/stemb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/stemb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/stemt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/stemt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/tip_balloon/t.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/img/tip_balloon/t.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/img/trash_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/themes/default/img/trash_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/import_droplets.htt
===================================================================
--- trunk/modules/droplets/themes/default/import_droplets.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/import_droplets.htt	(revision 2)
@@ -0,0 +1,67 @@
+<!-- BEGIN main_block -->
+<div class="droplets">
+    <form action="{ToolUrl}" method="post" name="droplets_form" >
+        <input name="ArchiveFile" type="hidden" value="{sArchiveFile}" />
+        <input type="hidden" name="{FTAN_NAME}" value="{FTAN_VALUE}" />
+        <div class="msg-box rounded">
+            <div>
+              <div class="subcolumns">
+                  <div class="success">{sArchiveFilename}</div>
+                  <div class="success">{DROPLET_IMPORT_ARCHIV_LOADED}
+                      <span style="float: right; vertical-align: middle;">
+                          <button class="btn btn-success" name="command" value="restore_droplets" type="submit">{TEXT_EXECUTE}</button>
+                          <button class="btn btn-danger" type="button" onclick="window.location='{ToolUrl}';">{TEXT_CANCEL}</button>
+                      </span>
+                  </div>
+              </div>
+            </div>
+        </div>
+        <div class="cb-import" id="cb-droplets" >
+            <table class="droplets droplets_data" style="margin-bottom: 1.225em;">
+                <thead>
+                    <tr>
+                      <th  style="width: 3%;text-align: center;">
+                          <label>
+                              <input name="select_all" id="select_all" type="checkbox" value="1" />
+                          </label>
+                      </th>
+                      <th style="width: 3%;"></th>
+                      <th style="width: 3%;"></th>
+                      <th style="width: 20%;">{DROPLET_HEADER_FILENAME}</th>
+                      <th style="width: 40%;">{DROPLET_HEADER_DESCRIPTION}</th>
+                      <th style="width: 8%;text-align: right;">{DROPLET_HEADER_SIZE}</th>
+                      <th style="width: 12%;text-align: right;padding-right: 0.525em;">{DROPLET_HEADER_DATE}</th>
+                    </tr>
+                </thead>
+                <tfoot>
+                    <tr>
+                        <td colspan="7"> </td>
+                    </tr>
+                </tfoot>
+                <tbody>
+                <!-- BEGIN list_archiv_block -->
+                    <tr>
+                      <td style="text-align: center;">
+                         <input type="checkbox" name="restore_id[{index}]" id="L{index}cb" value="{index}" />
+                      </td>
+                      <td style="text-align: center; font-weight: normal;">{index}</td>
+                      <td style="text-align: center;">
+                <!-- BEGIN show_archiv_folder_block -->
+                      <img src="{THEME_URL}/images/folder_16.png" alt=""/>
+                <!-- END show_archiv_folder_block -->
+                      </td>
+                      <td style="text-align: left;">{filename}</td>
+                      <td style="text-align: left;">{comment}</td>
+                      <td style="text-align: right;">{size} Byte(s)</td>
+                      <td style="text-align: right;">{created_when}</td>
+                    </tr>
+                <!-- END list_archiv_block -->
+                    <tr id="import">
+                        <td colspan="7"></td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+     </form>
+</div>
+<!-- END main_block -->
Index: trunk/modules/droplets/themes/default/js/TableSort.js
===================================================================
--- trunk/modules/droplets/themes/default/js/TableSort.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/TableSort.js	(revision 2)
@@ -0,0 +1,277 @@
+// TableSort 8.20
+// Jrgen Berkemeier, 16. 11. 2015
+// www.j-berkemeier.de
+
+( function() {
+
+    "use strict";
+
+    var JB_Table = function(tab) {
+
+        var up = String.fromCharCode(9650);
+        var down = String.fromCharCode(9660);
+        // var up = String.fromCharCode(8593);
+        // var down = String.fromCharCode(8595);
+        // var up = String.fromCharCode(11014);
+        // var down = String.fromCharCode(11015);
+        var no = String.fromCharCode(160,160,160,160); // Idee: 9674 ???
+        var dieses = this;
+        var defsort = 0;
+        var startsort_u = -1,startsort_d = -1;
+        var first = true;
+        var ssort;
+        var tbdy = tab.getElementsByTagName("tbody")[0];
+        var tz = tbdy.rows;
+        var nzeilen = tz.length;
+        if (nzeilen==0) return;
+        var nspalten = tz[0].cells.length;
+        var Titel = tab.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
+//console.info(Titel);
+        var Arr = new Array(nzeilen);
+        var ct = 0;
+        var sdir = new Array(nspalten);
+        var stype = new Array(nspalten);
+        var sortable = new Array(nspalten);
+        for(var i=0;i<nspalten;i++) {
+            stype[i] = "n";
+            sdir[i] = "u";
+            sortable[i] = false;
+        }
+
+        var initTableHead = function(t,nr) {
+            t.style.cursor = "pointer";
+            t.onclick = function() { dieses.sort(nr); };
+            sortsymbol.init(t,no);
+//            t.title = 'Die Tabelle nach "'+elementText(t)+'" sortieren.';
+//            t.title = '';
+            if(t.className.indexOf("vorsortiert-")>-1) {
+                sortsymbol.set(t,down);
+                ssort = nr;
+            }
+            else if(t.className.indexOf("vorsortiert")>-1) {
+                sortsymbol.set(t,up);
+                ssort = nr;
+            }
+            if(t.className.indexOf("sortiere-")>-1) startsort_d=nr;
+            else if(t.className.indexOf("sortiere")>-1) startsort_u=nr;
+            sortable[nr] = true;
+        } // initTableHead
+
+        var sortsymbol = {
+            init: function(t,s) {
+                var sp = t.getElementsByTagName("span");
+                for(var i=0;i<sp.length;i++) {
+                    if(!sp[i].hasChildNodes()) {
+                        t.sym = sp[i].appendChild(document.createTextNode(s));
+                        break;
+                    }
+                }
+                if(typeof(t.sym)=="undefined") t.sym = t.appendChild(document.createTextNode(s));
+            },
+            set: function(t,s) {
+                t.sym.data = s;
+            },
+            get: function(t) {
+                return t.sym.data;
+            }
+        } // sortsymbol
+
+        var VglFkt_s = function(a,b) {
+            var as = a[ssort], bs = b[ssort];
+            var ret=(as>bs)?1:(as<bs)?-1:0;
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { as = a[defsort]; bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort])
+            }
+            return ret;
+        } // VglFkt_s
+
+        var VglFkt_n = function(a,b) {
+            var ret = parseFloat(a[ssort])-parseFloat(b[ssort]);
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { var as = a[defsort],bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort]);
+            }
+            return ret;
+        } // VglFkt_n
+
+        var convert = function(val,s) {
+            var dmy;
+            var trmdat = function() {
+                if(dmy[0]<10) dmy[0] = "0" + dmy[0];
+                if(dmy[1]<10) dmy[1] = "0" + dmy[1];
+                if(dmy[2]<10) dmy[2] = "200" + dmy[2];
+                else if(dmy[2]<20) dmy[2] = "20" + dmy[2];
+                else if(dmy[2]<99) dmy[2] = "19" + dmy[2];
+                else if(dmy[2]>9999) dmy[2] = "9999";
+            }
+            if(val.length==0) val = "0";
+            if(!isNaN(val) && val.search(/[0-9]/)!=-1) return val;
+            var n = val.replace(",",".");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            n = n.replace(/\s|&nbsp;|&#160;|\u00A0/g,"");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                dmy[5] = val.substring(dp+4,dp+6);
+                for(var i=0;i<6;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<6;i++) if(dmy[i]<10) dmy[i] = "0" + dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]+dmy[5]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                for(var i=0;i<5;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<5;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<3;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]+"."+dmy[2]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<2;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<2;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+/)) {
+                dmy = val.split(".");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                return (""+dmy[2]+dmy[1]+dmy[0]).replace(/ /g,"");
+            }
+            stype[s] = "s";
+            return val.toLowerCase().replace(/\u00e4/g,"ae").replace(/\u00f6/g,"oe").replace(/\u00fc/g,"ue").replace(/\u00df/g,"ss");
+        } // convert
+
+        var elementText;
+        if(document.body.textContent)
+            elementText = function(elem) {
+                return elem.textContent;
+            }
+        else
+            elementText = function(elem) {
+                var eT = function(ele) {
+                    var uele = ele.firstChild;
+                    while(uele) {
+                        if(uele.hasChildNodes()) eT(uele);
+                        if(uele.nodeType == 1) {
+                            // if(child.tagName=='INPUT'||child.tagName=='BUTTON')txt+=child.value; //Idee
+                            Text += " ";
+                        }
+                        else if(uele.nodeType == 3) Text += uele.data;
+                        uele = uele.nextSibling;
+                    }
+                }
+                var Text = "";
+                eT(elem);
+                return Text.replace(/\s+/g," ");
+            } // elementText
+
+        this.sort = function(sp) {
+            if(sp<0 || sp>=nspalten) return;
+            if(!sortable[sp]) return;
+            if (first) {
+                for(var z=0;z<nzeilen;z++) {
+                    var zelle = tz[z].getElementsByTagName("td"); // cells;
+                    Arr[z] = new Array(nspalten+1);
+                    Arr[z][nspalten] = tz[z];
+                    for(var s=0;s<nspalten;s++) {
+                        if (zelle[s].getAttribute("data-sort_key"))
+                            var zi = convert(zelle[s].getAttribute("data-sort_key"),s);
+                        else if (zelle[s].getAttribute("sort_key"))
+                            var zi = convert(zelle[s].getAttribute("sort_key"),s);
+                        else
+                            var zi = convert(elementText(zelle[s]),s);
+                        Arr[z][s] = zi ;
+                        // zelle[s].innerHTML += "<br>"+zi; // zum Debuggen
+                    }
+                }
+                first = false;
+            }
+            if(sp==ssort) {
+                Arr.reverse() ;
+                if ( sortsymbol.get(Titel[ssort])==down )
+                    sortsymbol.set(Titel[ssort],up);
+                else
+                    sortsymbol.set(Titel[ssort],down);
+            }
+            else {
+                if ( ssort>=0 && ssort<nspalten ) sortsymbol.set(Titel[ssort],no);
+                    ssort = sp;
+                if(stype[ssort]=="s") Arr.sort(VglFkt_s);
+                else                  Arr.sort(VglFkt_n);
+                if(sdir[ssort]=="u") {
+                    sortsymbol.set(Titel[ssort],up);
+                }
+                else {
+                    Arr.reverse() ;
+                    sortsymbol.set(Titel[ssort],down);
+                }
+            }
+            for(var z=0;z<nzeilen;z++)
+                tbdy.appendChild(Arr[z][nspalten]);
+            if(typeof(JB_aftersort)=="function") JB_aftersort(tab,tbdy,tz,nzeilen,nspalten,ssort);
+        } // sort
+
+//        if(!tab.title.length) tab.title="Ein Klick auf die Spalten\u00fcberschrift sortiert die Tabelle.";
+//console.info(tab);
+        if(!tab.title.length) tab.title="";
+        for(var i=Titel.length-1;i>-1;i--) {
+            var t=Titel[i];
+            if(t.className.indexOf("sortier")>-1) {
+                ct++;
+                initTableHead(t,i);
+                defsort = i ;
+                if(t.className.indexOf("sortierbar-")>-1) sdir[i] = "d";
+            }
+    }
+        if(ct==0) {
+//console.info(Titel);
+            for(var i=0;i<Titel.length;i++)
+                initTableHead(Titel[i],i);
+            defsort = 0;
+        }
+        if(startsort_u>=0) this.sort(startsort_u);
+        if(startsort_d>=0) { this.sort(startsort_d); this.sort(startsort_d); }
+        if(typeof(JB_aftersortinit)=="function") JB_aftersortinit(tab,tbdy,tz,nzeilen,nspalten,-1);
+
+    } // JB_Table
+
+    var JB_initTableSort = function() {
+        if (!document.querySelectorAll) return;
+        var Sort_Table = document.querySelectorAll("table.sortierbar");
+        var JB_Tables = [];
+        for(var i=0;i<Sort_Table.length;i++){ JB_Tables[i] = new JB_Table(Sort_Table[i]);}
+//console.info(JB_Tables);
+
+        var pars = decodeURI(window.location.search.substring(1));
+        if(pars.length) { // jbts=((0,1),(10,0),(3,3),(2,2))   tnr,snr
+            pars = pars.replace(/\s/g,"");
+            pars = pars.match(/jbts=\(?(\(\d+,\d+\),?){1,}\)?/gi);
+            if(pars) {
+                pars = pars[0].substr(pars[0].search("=")+1);
+                pars = pars.replace(/\(\(/g,"(").replace(/\)\)/g,")").replace(/\)\(/g,")|(").replace(/\),\(/g,")|(");
+                pars = pars.split("|");
+                for(var i=0;i<pars.length;i++) {
+                    var p = pars[i].substring(1,pars[i].length-1).split(",");
+                    if(p[0]>-1&&p[0]<JB_Tables.length) JB_Tables[p[0]].sort(p[1]);
+                }
+            }
+        }
+    } // initTableSort
+
+    if(window.addEventListener) window.addEventListener("DOMContentLoaded",JB_initTableSort,false);
+    else if(window.attachEvent) window.attachEvent("onload",JB_initTableSort);
+
+})();
Index: trunk/modules/droplets/themes/default/js/custom-file-input.js
===================================================================
--- trunk/modules/droplets/themes/default/js/custom-file-input.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/custom-file-input.js	(revision 2)
@@ -0,0 +1,35 @@
+/*
+    By Osvaldas Valutis, www.osvaldas.info
+    Available for use under the MIT License
+*/
+'use strict';
+;( function ( document, window, index )
+{
+    var inputs = document.querySelectorAll( '.inputfile' );
+    Array.prototype.forEach.call( inputs, function( input )
+    {
+        var label     = input.nextElementSibling,
+            labelVal = label.innerHTML;
+        input.addEventListener( 'change', function( e )
+        {
+            var fileName = '';
+            if( this.files && this.files.length > 1 )
+                fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
+            else
+                fileName = e.target.value.split( '\\' ).pop();
+            if( fileName )
+                label.querySelector( 'span' ).innerHTML = fileName;
+            else
+                label.innerHTML = labelVal;
+        });
+        // Firefox bug fix
+        input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
+        input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
+    });
+}( document, window, 0 ));
+
+/*
+           onchange=
+               document.upload.target.value.substr(6,100);
+           document.create.target.value = document.upload.target.value;
+*/
Index: trunk/modules/droplets/themes/default/js/customAlert.js
===================================================================
--- trunk/modules/droplets/themes/default/js/customAlert.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/customAlert.js	(revision 2)
@@ -0,0 +1,165 @@
+/**
+ * customAlerts.js
+ * Author: Philippe Assis
+ * Doc and repo: https://github.com/PhilippeAssis/custom-alert
+ *
+ * Alert e confirm personalizados.
+ * FF, Chromer, IE(>=9)*
+ *
+ *
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes,
+ * a não ser que você saiba o que esta fazendo.
+ */
+var customKit = {
+    createDiv: function (attr, name, parent) {
+        var div = document.createElement("div");
+        div.setAttribute(attr, name);
+        if (parent) {
+            var parent = document.getElementById(parent)
+            parent.appendChild(div);
+            return;
+        }
+
+        document.body.appendChild(div);
+    },
+    mergeObjects: function (obj1, obj2) {
+        var obj3 = {};
+        for (var attrname in obj1) {
+            obj3[attrname] = obj1[attrname];
+        }
+        for (var attrname in obj2) {
+            obj3[attrname] = obj2[attrname];
+        }
+        return obj3;
+    }
+};
+
+function customAlert(options) {
+
+    this.defaultOptions = {
+        'ok': 'OK',
+        'title': 'Alert!'
+    };
+
+    if (options)
+        this.defaultOptions = customKit.mergeObjects(this.defaultOptions, options);
+
+    this.options = this.defaultOptions;
+
+    if (document.getElementById("customAlert") == null) {
+        customKit.createDiv("id", "customAlert-overlay");
+        customKit.createDiv("id", "customAlert");
+        customKit.createDiv("class", "header", "customAlert");
+        customKit.createDiv("class", "body", "customAlert");
+        customKit.createDiv("class", "footer", "customAlert");
+
+        //Os nomes podem ser alterados, window.alert e window.Alert, ao seu gosto!
+        window.alert = window.Alert = function (dialog, options) {
+            if (options)
+                window.customAlert.options = customKit.mergeObjects(window.customAlert.options, options);
+            window.customAlert.render(dialog);
+        };
+    }
+
+    this.render = function (dialog) {
+        alertBox = document.getElementById("customAlert");
+        alertBox.getElementsByClassName("header")[0].innerHTML = this.options.title;
+        alertBox.getElementsByClassName("body")[0].innerHTML = dialog;
+        alertBox.getElementsByClassName("footer")[0].innerHTML = "<button onclick=\"window.customAlert.ok()\">" + this.options.ok + "</button>";
+        document.getElementsByTagName("html")[0].style.overflow = "hidden";
+        document.getElementById("customAlert-overlay").style.display = "block";
+        alertBox.style.display = "block";
+    };
+
+    this.ok = function () {
+        document.getElementById("customAlert").style.display = "none";
+        document.getElementById("customAlert-overlay").style.display = "none";
+        document.getElementsByTagName("html")[0].style.overflow = "auto";
+        this.options = this.defaultOptions;
+    }
+}
+
+function customConfirm(options) {
+
+    this.defaultOptions = {
+        'yes': 'YES',
+        'no': 'NO',
+        'title': 'Confirm it:',
+        'return': false
+    };
+
+    if (options)
+        this.defaultOptions = customKit.mergeObjects(this.defaultOptions, options);
+
+    this.options = this.defaultOptions;
+
+    if (document.getElementById("customConfirm") == null) {
+        customKit.createDiv("id", "customConfirm-overlay");
+        customKit.createDiv("id", "customConfirm");
+        customKit.createDiv("class", "header", "customConfirm");
+        customKit.createDiv("class", "body", "customConfirm");
+        customKit.createDiv("class", "footer", "customConfirm");
+
+        //Os nomes podem ser alterados, window.confirm e window.Confirm, ao seu gosto!
+        window.confirm = window.Confirm = function (dialog, callback, options) {
+            if (options)
+                window.customConfirm.options = customKit.mergeObjects(window.customConfirm.options, options);
+            window.customConfirm.render(dialog, callback);
+        };
+    }
+
+    this.callback = function (data) {
+        if (data != undefined) console.log(data)
+    };
+
+    this.render = function (dialog, callback) {
+        this.callback = callback;
+        confirmBox = document.getElementById("customConfirm");
+        confirmBox.getElementsByClassName("header")[0].innerHTML = this.options.title;
+        confirmBox.getElementsByClassName("body")[0].innerHTML = dialog;
+        confirmBox.getElementsByClassName("footer")[0].innerHTML = "<button class=\"confirm\" onclick=\"window.customConfirm.ok()\">" + (this.options.yes) + "</button><button class=\"cancel\" onclick=\"window.customConfirm.cancel()\">" + (this.options.no) + "</button>";
+        document.getElementsByTagName("html")[0].style.overflow = "hidden";
+        document.getElementById("customConfirm-overlay").style.display = "block";
+        confirmBox.style.display = "block";
+    };
+
+    this.ok = function () {
+        this.end();
+        if (this.options.return) {
+            this.clear();
+            this.callback(true);
+            return;
+        }
+
+        this.clear();
+        this.callback();
+    }
+
+    this.cancel = function () {
+        this.end();
+        if (this.options.return) {
+            this.clear();
+            this.callback(false);
+            return;
+        }
+        this.clear();
+    }
+
+    this.end = function () {
+        document.getElementById("customConfirm").style.display = "none";
+        document.getElementById("customConfirm-overlay").style.display = "none";
+        document.getElementsByTagName("html")[0].style.overflow = "auto";
+    }
+
+    this.clear = function () {
+        this.options = this.defaultOptions;
+    }
+}
+
+/*
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes, a não se que vc saiba o que esta fazendo.
+ * Vocẽ pode adicionar configuraçãos na declaração de ambos, ex: new customConfirm({execute:false});
+ * */
+window.customAlert = new customAlert({title: ''});
+
+window.customConfirm = new customConfirm({title: ''});
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/js/draggabilly.pkgd.js
===================================================================
--- trunk/modules/droplets/themes/default/js/draggabilly.pkgd.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/draggabilly.pkgd.js	(revision 2)
@@ -0,0 +1,1509 @@
+/*!
+ * Draggabilly PACKAGED v1.1.2
+ * Make that shiz draggable
+ * http://draggabilly.desandro.com
+ * MIT license
+ */
+
+/*!
+ * classie - class helper functions
+ * from bonzo https://github.com/ded/bonzo
+ * 
+ * classie.has( elem, 'my-class' ) -> true/false
+ * classie.add( elem, 'my-new-class' )
+ * classie.remove( elem, 'my-unwanted-class' )
+ * classie.toggle( elem, 'my-class' )
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*global define: false */
+
+( function( window ) {
+
+// class helper functions from bonzo https://github.com/ded/bonzo
+
+function classReg( className ) {
+  return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
+}
+
+// classList support for class management
+// altho to be fair, the api sucks because it won't accept multiple classes at once
+var hasClass, addClass, removeClass;
+
+if ( 'classList' in document.documentElement ) {
+  hasClass = function( elem, c ) {
+    return elem.classList.contains( c );
+  };
+  addClass = function( elem, c ) {
+    elem.classList.add( c );
+  };
+  removeClass = function( elem, c ) {
+    elem.classList.remove( c );
+  };
+}
+else {
+  hasClass = function( elem, c ) {
+    return classReg( c ).test( elem.className );
+  };
+  addClass = function( elem, c ) {
+    if ( !hasClass( elem, c ) ) {
+      elem.className = elem.className + ' ' + c;
+    }
+  };
+  removeClass = function( elem, c ) {
+    elem.className = elem.className.replace( classReg( c ), ' ' );
+  };
+}
+
+function toggleClass( elem, c ) {
+  var fn = hasClass( elem, c ) ? removeClass : addClass;
+  fn( elem, c );
+}
+
+var classie = {
+  // full names
+  hasClass: hasClass,
+  addClass: addClass,
+  removeClass: removeClass,
+  toggleClass: toggleClass,
+  // short names
+  has: hasClass,
+  add: addClass,
+  remove: removeClass,
+  toggle: toggleClass
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'classie/classie',classie );
+} else {
+  // browser global
+  window.classie = classie;
+}
+
+})( window );
+
+/*!
+ * EventEmitter v4.2.2 - git.io/ee
+ * Oliver Caldwell
+ * MIT license
+ * @preserve
+ */
+
+(function () {
+    
+
+    /**
+     * Class for managing events.
+     * Can be extended to provide event functionality in other classes.
+     *
+     * @class EventEmitter Manages event registering and emitting.
+     */
+    function EventEmitter() {}
+
+    // Shortcuts to improve speed and size
+
+    // Easy access to the prototype
+    var proto = EventEmitter.prototype;
+
+    /**
+     * Finds the index of the listener for the event in it's storage array.
+     *
+     * @param {Function[]} listeners Array of listeners to search through.
+     * @param {Function} listener Method to look for.
+     * @return {Number} index of the specified listener, -1 if not found
+     * @api private
+     */
+    function indexOfListener(listeners, listener) {
+        var i = listeners.length;
+        while (i--) {
+            if (listeners[i].listener === listener) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Alias a method while keeping the context correct, to allow for overwriting of target method.
+     *
+     * @param {String} name The name of the target method.
+     * @return {Function} The aliased method
+     * @api private
+     */
+    function alias(name) {
+        return function aliasClosure() {
+            return this[name].apply(this, arguments);
+        };
+    }
+
+    /**
+     * Returns the listener array for the specified event.
+     * Will initialise the event object and listener arrays if required.
+     * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.
+     * Each property in the object response is an array of listener functions.
+     *
+     * @param {String|RegExp} evt Name of the event to return the listeners from.
+     * @return {Function[]|Object} All listener functions for the event.
+     */
+    proto.getListeners = function getListeners(evt) {
+        var events = this._getEvents();
+        var response;
+        var key;
+
+        // Return a concatenated array of all matching events if
+        // the selector is a regular expression.
+        if (typeof evt === 'object') {
+            response = {};
+            for (key in events) {
+                if (events.hasOwnProperty(key) && evt.test(key)) {
+                    response[key] = events[key];
+                }
+            }
+        }
+        else {
+            response = events[evt] || (events[evt] = []);
+        }
+
+        return response;
+    };
+
+    /**
+     * Takes a list of listener objects and flattens it into a list of listener functions.
+     *
+     * @param {Object[]} listeners Raw listener objects.
+     * @return {Function[]} Just the listener functions.
+     */
+    proto.flattenListeners = function flattenListeners(listeners) {
+        var flatListeners = [];
+        var i;
+
+        for (i = 0; i < listeners.length; i += 1) {
+            flatListeners.push(listeners[i].listener);
+        }
+
+        return flatListeners;
+    };
+
+    /**
+     * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.
+     *
+     * @param {String|RegExp} evt Name of the event to return the listeners from.
+     * @return {Object} All listener functions for an event in an object.
+     */
+    proto.getListenersAsObject = function getListenersAsObject(evt) {
+        var listeners = this.getListeners(evt);
+        var response;
+
+        if (listeners instanceof Array) {
+            response = {};
+            response[evt] = listeners;
+        }
+
+        return response || listeners;
+    };
+
+    /**
+     * Adds a listener function to the specified event.
+     * The listener will not be added if it is a duplicate.
+     * If the listener returns true then it will be removed after it is called.
+     * If you pass a regular expression as the event name then the listener will be added to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to attach the listener to.
+     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addListener = function addListener(evt, listener) {
+        var listeners = this.getListenersAsObject(evt);
+        var listenerIsWrapped = typeof listener === 'object';
+        var key;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {
+                listeners[key].push(listenerIsWrapped ? listener : {
+                    listener: listener,
+                    once: false
+                });
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of addListener
+     */
+    proto.on = alias('addListener');
+
+    /**
+     * Semi-alias of addListener. It will add a listener that will be
+     * automatically removed after it's first execution.
+     *
+     * @param {String|RegExp} evt Name of the event to attach the listener to.
+     * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addOnceListener = function addOnceListener(evt, listener) {
+        return this.addListener(evt, {
+            listener: listener,
+            once: true
+        });
+    };
+
+    /**
+     * Alias of addOnceListener.
+     */
+    proto.once = alias('addOnceListener');
+
+    /**
+     * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.
+     * You need to tell it what event names should be matched by a regex.
+     *
+     * @param {String} evt Name of the event to create.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.defineEvent = function defineEvent(evt) {
+        this.getListeners(evt);
+        return this;
+    };
+
+    /**
+     * Uses defineEvent to define multiple events.
+     *
+     * @param {String[]} evts An array of event names to define.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.defineEvents = function defineEvents(evts) {
+        for (var i = 0; i < evts.length; i += 1) {
+            this.defineEvent(evts[i]);
+        }
+        return this;
+    };
+
+    /**
+     * Removes a listener function from the specified event.
+     * When passed a regular expression as the event name, it will remove the listener from all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to remove the listener from.
+     * @param {Function} listener Method to remove from the event.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeListener = function removeListener(evt, listener) {
+        var listeners = this.getListenersAsObject(evt);
+        var index;
+        var key;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key)) {
+                index = indexOfListener(listeners[key], listener);
+
+                if (index !== -1) {
+                    listeners[key].splice(index, 1);
+                }
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of removeListener
+     */
+    proto.off = alias('removeListener');
+
+    /**
+     * Adds listeners in bulk using the manipulateListeners method.
+     * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.
+     * You can also pass it a regular expression to add the array of listeners to all events that match it.
+     * Yeah, this function does quite a bit. That's probably a bad thing.
+     *
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to add.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.addListeners = function addListeners(evt, listeners) {
+        // Pass through to manipulateListeners
+        return this.manipulateListeners(false, evt, listeners);
+    };
+
+    /**
+     * Removes listeners in bulk using the manipulateListeners method.
+     * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+     * You can also pass it an event name and an array of listeners to be removed.
+     * You can also pass it a regular expression to remove the listeners from all events that match it.
+     *
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to remove.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeListeners = function removeListeners(evt, listeners) {
+        // Pass through to manipulateListeners
+        return this.manipulateListeners(true, evt, listeners);
+    };
+
+    /**
+     * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.
+     * The first argument will determine if the listeners are removed (true) or added (false).
+     * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+     * You can also pass it an event name and an array of listeners to be added/removed.
+     * You can also pass it a regular expression to manipulate the listeners of all events that match it.
+     *
+     * @param {Boolean} remove True if you want to remove listeners, false if you want to add.
+     * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.
+     * @param {Function[]} [listeners] An optional array of listener functions to add/remove.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {
+        var i;
+        var value;
+        var single = remove ? this.removeListener : this.addListener;
+        var multiple = remove ? this.removeListeners : this.addListeners;
+
+        // If evt is an object then pass each of it's properties to this method
+        if (typeof evt === 'object' && !(evt instanceof RegExp)) {
+            for (i in evt) {
+                if (evt.hasOwnProperty(i) && (value = evt[i])) {
+                    // Pass the single listener straight through to the singular method
+                    if (typeof value === 'function') {
+                        single.call(this, i, value);
+                    }
+                    else {
+                        // Otherwise pass back to the multiple function
+                        multiple.call(this, i, value);
+                    }
+                }
+            }
+        }
+        else {
+            // So evt must be a string
+            // And listeners must be an array of listeners
+            // Loop over it and pass each one to the multiple method
+            i = listeners.length;
+            while (i--) {
+                single.call(this, evt, listeners[i]);
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Removes all listeners from a specified event.
+     * If you do not specify an event then all listeners will be removed.
+     * That means every event will be emptied.
+     * You can also pass a regex to remove all events that match it.
+     *
+     * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.removeEvent = function removeEvent(evt) {
+        var type = typeof evt;
+        var events = this._getEvents();
+        var key;
+
+        // Remove different things depending on the state of evt
+        if (type === 'string') {
+            // Remove all listeners for the specified event
+            delete events[evt];
+        }
+        else if (type === 'object') {
+            // Remove all events matching the regex.
+            for (key in events) {
+                if (events.hasOwnProperty(key) && evt.test(key)) {
+                    delete events[key];
+                }
+            }
+        }
+        else {
+            // Remove all listeners in all events
+            delete this._events;
+        }
+
+        return this;
+    };
+
+    /**
+     * Emits an event of your choice.
+     * When emitted, every listener attached to that event will be executed.
+     * If you pass the optional argument array then those arguments will be passed to every listener upon execution.
+     * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.
+     * So they will not arrive within the array on the other side, they will be separate.
+     * You can also pass a regular expression to emit to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+     * @param {Array} [args] Optional array of arguments to be passed to each listener.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.emitEvent = function emitEvent(evt, args) {
+        var listeners = this.getListenersAsObject(evt);
+        var listener;
+        var i;
+        var key;
+        var response;
+
+        for (key in listeners) {
+            if (listeners.hasOwnProperty(key)) {
+                i = listeners[key].length;
+
+                while (i--) {
+                    // If the listener returns true then it shall be removed from the event
+                    // The function is executed either with a basic call or an apply if there is an args array
+                    listener = listeners[key][i];
+                    response = listener.listener.apply(this, args || []);
+                    if (response === this._getOnceReturnValue() || listener.once === true) {
+                        this.removeListener(evt, listener.listener);
+                    }
+                }
+            }
+        }
+
+        return this;
+    };
+
+    /**
+     * Alias of emitEvent
+     */
+    proto.trigger = alias('emitEvent');
+
+    /**
+     * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.
+     * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.
+     *
+     * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+     * @param {...*} Optional additional arguments to be passed to each listener.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.emit = function emit(evt) {
+        var args = Array.prototype.slice.call(arguments, 1);
+        return this.emitEvent(evt, args);
+    };
+
+    /**
+     * Sets the current value to check against when executing listeners. If a
+     * listeners return value matches the one set here then it will be removed
+     * after execution. This value defaults to true.
+     *
+     * @param {*} value The new value to check for when executing listeners.
+     * @return {Object} Current instance of EventEmitter for chaining.
+     */
+    proto.setOnceReturnValue = function setOnceReturnValue(value) {
+        this._onceReturnValue = value;
+        return this;
+    };
+
+    /**
+     * Fetches the current value to check against when executing listeners. If
+     * the listeners return value matches this one then it should be removed
+     * automatically. It will return true by default.
+     *
+     * @return {*|Boolean} The current value to check for or the default, true.
+     * @api private
+     */
+    proto._getOnceReturnValue = function _getOnceReturnValue() {
+        if (this.hasOwnProperty('_onceReturnValue')) {
+            return this._onceReturnValue;
+        }
+        else {
+            return true;
+        }
+    };
+
+    /**
+     * Fetches the events object and creates one if required.
+     *
+     * @return {Object} The events storage object.
+     * @api private
+     */
+    proto._getEvents = function _getEvents() {
+        return this._events || (this._events = {});
+    };
+
+    // Expose the class either via AMD, CommonJS or the global object
+    if (typeof define === 'function' && define.amd) {
+        define('eventEmitter/EventEmitter',[],function () {
+            return EventEmitter;
+        });
+    }
+    else if (typeof module === 'object' && module.exports){
+        module.exports = EventEmitter;
+    }
+    else {
+        this.EventEmitter = EventEmitter;
+    }
+}.call(this));
+
+/*!
+ * eventie v1.0.3
+ * event binding helper
+ *   eventie.bind( elem, 'click', myFn )
+ *   eventie.unbind( elem, 'click', myFn )
+ */
+
+/*jshint browser: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window ) {
+
+
+
+var docElem = document.documentElement;
+
+var bind = function() {};
+
+if ( docElem.addEventListener ) {
+  bind = function( obj, type, fn ) {
+    obj.addEventListener( type, fn, false );
+  };
+} else if ( docElem.attachEvent ) {
+  bind = function( obj, type, fn ) {
+    obj[ type + fn ] = fn.handleEvent ?
+      function() {
+        var event = window.event;
+        // add event.target
+        event.target = event.target || event.srcElement;
+        fn.handleEvent.call( fn, event );
+      } :
+      function() {
+        var event = window.event;
+        // add event.target
+        event.target = event.target || event.srcElement;
+        fn.call( obj, event );
+      };
+    obj.attachEvent( "on" + type, obj[ type + fn ] );
+  };
+}
+
+var unbind = function() {};
+
+if ( docElem.removeEventListener ) {
+  unbind = function( obj, type, fn ) {
+    obj.removeEventListener( type, fn, false );
+  };
+} else if ( docElem.detachEvent ) {
+  unbind = function( obj, type, fn ) {
+    obj.detachEvent( "on" + type, obj[ type + fn ] );
+    try {
+      delete obj[ type + fn ];
+    } catch ( err ) {
+      // can't delete window object properties
+      obj[ type + fn ] = undefined;
+    }
+  };
+}
+
+var eventie = {
+  bind: bind,
+  unbind: unbind
+};
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'eventie/eventie',eventie );
+} else {
+  // browser global
+  window.eventie = eventie;
+}
+
+})( this );
+
+/*!
+ * getStyleProperty by kangax
+ * http://perfectionkills.com/feature-testing-css-properties/
+ */
+
+/*jshint browser: true, strict: true, undef: true */
+/*globals define: false */
+
+( function( window ) {
+
+
+
+var prefixes = 'Webkit Moz ms Ms O'.split(' ');
+var docElemStyle = document.documentElement.style;
+
+function getStyleProperty( propName ) {
+  if ( !propName ) {
+    return;
+  }
+
+  // test standard property first
+  if ( typeof docElemStyle[ propName ] === 'string' ) {
+    return propName;
+  }
+
+  // capitalize
+  propName = propName.charAt(0).toUpperCase() + propName.slice(1);
+
+  // test vendor specific properties
+  var prefixed;
+  for ( var i=0, len = prefixes.length; i < len; i++ ) {
+    prefixed = prefixes[i] + propName;
+    if ( typeof docElemStyle[ prefixed ] === 'string' ) {
+      return prefixed;
+    }
+  }
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'get-style-property/get-style-property',[],function() {
+    return getStyleProperty;
+  });
+} else {
+  // browser global
+  window.getStyleProperty = getStyleProperty;
+}
+
+})( window );
+
+/**
+ * getSize v1.1.4
+ * measure size of elements
+ */
+
+/*jshint browser: true, strict: true, undef: true, unused: true */
+/*global define: false */
+
+( function( window, undefined ) {
+
+
+
+// -------------------------- helpers -------------------------- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+  function( elem ) {
+    return defView.getComputedStyle( elem, null );
+  } :
+  function( elem ) {
+    return elem.currentStyle;
+  };
+
+// get a number from a string, not a percentage
+function getStyleSize( value ) {
+  var num = parseFloat( value );
+  // not a percent like '100%', and a number
+  var isValid = value.indexOf('%') === -1 && !isNaN( num );
+  return isValid && num;
+}
+
+// -------------------------- measurements -------------------------- //
+
+var measurements = [
+  'paddingLeft',
+  'paddingRight',
+  'paddingTop',
+  'paddingBottom',
+  'marginLeft',
+  'marginRight',
+  'marginTop',
+  'marginBottom',
+  'borderLeftWidth',
+  'borderRightWidth',
+  'borderTopWidth',
+  'borderBottomWidth'
+];
+
+function getZeroSize() {
+  var size = {
+    width: 0,
+    height: 0,
+    innerWidth: 0,
+    innerHeight: 0,
+    outerWidth: 0,
+    outerHeight: 0
+  };
+  for ( var i=0, len = measurements.length; i < len; i++ ) {
+    var measurement = measurements[i];
+    size[ measurement ] = 0;
+  }
+  return size;
+}
+
+
+
+function defineGetSize( getStyleProperty ) {
+
+// -------------------------- box sizing -------------------------- //
+
+var boxSizingProp = getStyleProperty('boxSizing');
+var isBoxSizeOuter;
+
+/**
+ * WebKit measures the outer-width on style.width on border-box elems
+ * IE & Firefox measures the inner-width
+ */
+( function() {
+  if ( !boxSizingProp ) {
+    return;
+  }
+
+  var div = document.createElement('div');
+  div.style.width = '200px';
+  div.style.padding = '1px 2px 3px 4px';
+  div.style.borderStyle = 'solid';
+  div.style.borderWidth = '1px 2px 3px 4px';
+  div.style[ boxSizingProp ] = 'border-box';
+
+  var body = document.body || document.documentElement;
+  body.appendChild( div );
+  var style = getStyle( div );
+
+  isBoxSizeOuter = getStyleSize( style.width ) === 200;
+  body.removeChild( div );
+})();
+
+
+// -------------------------- getSize -------------------------- //
+
+function getSize( elem ) {
+  // use querySeletor if elem is string
+  if ( typeof elem === 'string' ) {
+    elem = document.querySelector( elem );
+  }
+
+  // do not proceed on non-objects
+  if ( !elem || typeof elem !== 'object' || !elem.nodeType ) {
+    return;
+  }
+
+  var style = getStyle( elem );
+
+  // if hidden, everything is 0
+  if ( style.display === 'none' ) {
+    return getZeroSize();
+  }
+
+  var size = {};
+  size.width = elem.offsetWidth;
+  size.height = elem.offsetHeight;
+
+  var isBorderBox = size.isBorderBox = !!( boxSizingProp &&
+    style[ boxSizingProp ] && style[ boxSizingProp ] === 'border-box' );
+
+  // get all measurements
+  for ( var i=0, len = measurements.length; i < len; i++ ) {
+    var measurement = measurements[i];
+    var value = style[ measurement ];
+    var num = parseFloat( value );
+    // any 'auto', 'medium' value will be 0
+    size[ measurement ] = !isNaN( num ) ? num : 0;
+  }
+
+  var paddingWidth = size.paddingLeft + size.paddingRight;
+  var paddingHeight = size.paddingTop + size.paddingBottom;
+  var marginWidth = size.marginLeft + size.marginRight;
+  var marginHeight = size.marginTop + size.marginBottom;
+  var borderWidth = size.borderLeftWidth + size.borderRightWidth;
+  var borderHeight = size.borderTopWidth + size.borderBottomWidth;
+
+  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;
+
+  // overwrite width and height if we can get it from style
+  var styleWidth = getStyleSize( style.width );
+  if ( styleWidth !== false ) {
+    size.width = styleWidth +
+      // add padding and border unless it's already including it
+      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );
+  }
+
+  var styleHeight = getStyleSize( style.height );
+  if ( styleHeight !== false ) {
+    size.height = styleHeight +
+      // add padding and border unless it's already including it
+      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );
+  }
+
+  size.innerWidth = size.width - ( paddingWidth + borderWidth );
+  size.innerHeight = size.height - ( paddingHeight + borderHeight );
+
+  size.outerWidth = size.width + marginWidth;
+  size.outerHeight = size.height + marginHeight;
+
+  return size;
+}
+
+return getSize;
+
+}
+
+// transport
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( 'get-size/get-size',[ 'get-style-property/get-style-property' ], defineGetSize );
+} else {
+  // browser global
+  window.getSize = defineGetSize( window.getStyleProperty );
+}
+
+})( window );
+
+/*!
+ * Draggabilly v1.1.2
+ * Make that shiz draggable
+ * http://draggabilly.desandro.com
+ * MIT license
+ */
+
+( function( window ) {
+
+
+
+// vars
+var document = window.document;
+
+// -------------------------- helpers -------------------------- //
+
+// extend objects
+function extend( a, b ) {
+  for ( var prop in b ) {
+    a[ prop ] = b[ prop ];
+  }
+  return a;
+}
+
+function noop() {}
+
+// ----- get style ----- //
+
+var defView = document.defaultView;
+
+var getStyle = defView && defView.getComputedStyle ?
+  function( elem ) {
+    return defView.getComputedStyle( elem, null );
+  } :
+  function( elem ) {
+    return elem.currentStyle;
+  };
+
+
+// http://stackoverflow.com/a/384380/182183
+var isElement = ( typeof HTMLElement === 'object' ) ?
+  function isElementDOM2( obj ) {
+    return obj instanceof HTMLElement;
+  } :
+  function isElementQuirky( obj ) {
+    return obj && typeof obj === 'object' &&
+      obj.nodeType === 1 && typeof obj.nodeName === 'string';
+  };
+
+// -------------------------- requestAnimationFrame -------------------------- //
+
+// https://gist.github.com/1866474
+
+var lastTime = 0;
+var prefixes = 'webkit moz ms o'.split(' ');
+// get unprefixed rAF and cAF, if present
+var requestAnimationFrame = window.requestAnimationFrame;
+var cancelAnimationFrame = window.cancelAnimationFrame;
+// loop through vendor prefixes and get prefixed rAF and cAF
+var prefix;
+for( var i = 0; i < prefixes.length; i++ ) {
+  if ( requestAnimationFrame && cancelAnimationFrame ) {
+    break;
+  }
+  prefix = prefixes[i];
+  requestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];
+  cancelAnimationFrame  = cancelAnimationFrame  || window[ prefix + 'CancelAnimationFrame' ] ||
+                            window[ prefix + 'CancelRequestAnimationFrame' ];
+}
+
+// fallback to setTimeout and clearTimeout if either request/cancel is not supported
+if ( !requestAnimationFrame || !cancelAnimationFrame )  {
+  requestAnimationFrame = function( callback ) {
+    var currTime = new Date().getTime();
+    var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) );
+    var id = window.setTimeout( function() {
+      callback( currTime + timeToCall );
+    }, timeToCall );
+    lastTime = currTime + timeToCall;
+    return id;
+  };
+
+  cancelAnimationFrame = function( id ) {
+    window.clearTimeout( id );
+  };
+}
+
+// -------------------------- definition -------------------------- //
+
+function draggabillyDefinition( classie, EventEmitter, eventie, getStyleProperty, getSize ) {
+
+// -------------------------- support -------------------------- //
+
+var transformProperty = getStyleProperty('transform');
+// TODO fix quick & dirty check for 3D support
+var is3d = !!getStyleProperty('perspective');
+
+// --------------------------  -------------------------- //
+
+function Draggabilly( element, options ) {
+  // querySelector if string
+  this.element = typeof element === 'string' ?
+    document.querySelector( element ) : element;
+
+  this.options = extend( {}, this.options );
+  extend( this.options, options );
+
+  this._create();
+}
+
+// inherit EventEmitter methods
+extend( Draggabilly.prototype, EventEmitter.prototype );
+
+Draggabilly.prototype.options = {
+};
+
+Draggabilly.prototype._create = function() {
+
+  // properties
+  this.position = {};
+  this._getPosition();
+
+  this.startPoint = { x: 0, y: 0 };
+  this.dragPoint = { x: 0, y: 0 };
+
+  this.startPosition = extend( {}, this.position );
+
+  // set relative positioning
+  var style = getStyle( this.element );
+  if ( style.position !== 'relative' && style.position !== 'absolute' ) {
+    this.element.style.position = 'relative';
+  }
+
+  this.enable();
+  this.setHandles();
+
+};
+
+/**
+ * set this.handles and bind start events to 'em
+ */
+Draggabilly.prototype.setHandles = function() {
+  this.handles = this.options.handle ?
+    this.element.querySelectorAll( this.options.handle ) : [ this.element ];
+
+  this.bindHandles( true );
+};
+
+// -------------------------- bind -------------------------- //
+
+/**
+ * @param {Boolean} isBind - will unbind if falsey
+ */
+Draggabilly.prototype.bindHandles = function( isBind ) {
+  var binder;
+  if ( window.navigator.pointerEnabled ) {
+    binder = this.bindPointer;
+  } else if ( window.navigator.msPointerEnabled ) {
+    binder = this.bindMSPointer;
+  } else {
+    binder = this.bindMouseTouch;
+  }
+  // munge isBind, default to true
+  isBind = isBind === undefined ? true : !!isBind;
+  for ( var i=0, len = this.handles.length; i < len; i++ ) {
+    var handle = this.handles[i];
+    binder.call( this, handle, isBind );
+  }
+};
+
+Draggabilly.prototype.bindPointer = function( handle, isBind ) {
+  // W3C Pointer Events, IE11. See https://coderwall.com/p/mfreca
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'pointerdown', this );
+  // disable scrolling on the element
+  handle.style.touchAction = isBind ? 'none' : '';
+};
+
+Draggabilly.prototype.bindMSPointer = function( handle, isBind ) {
+  // IE10 Pointer Events
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'MSPointerDown', this );
+  // disable scrolling on the element
+  handle.style.msTouchAction = isBind ? 'none' : '';
+};
+
+Draggabilly.prototype.bindMouseTouch = function( handle, isBind ) {
+  // listen for both, for devices like Chrome Pixel
+  //   which has touch and mouse events
+  var bindMethod = isBind ? 'bind' : 'unbind';
+  eventie[ bindMethod ]( handle, 'mousedown', this );
+  eventie[ bindMethod ]( handle, 'touchstart', this );
+  // TODO re-enable img.ondragstart when unbinding
+  if ( isBind ) {
+    disableImgOndragstart( handle );
+  }
+};
+
+// remove default dragging interaction on all images in IE8
+// IE8 does its own drag thing on images, which messes stuff up
+
+function noDragStart() {
+  return false;
+}
+
+// TODO replace this with a IE8 test
+var isIE8 = 'attachEvent' in document.documentElement;
+
+// IE8 only
+var disableImgOndragstart = !isIE8 ? noop : function( handle ) {
+
+  if ( handle.nodeName === 'IMG' ) {
+    handle.ondragstart = noDragStart;
+  }
+
+  var images = handle.querySelectorAll('img');
+  for ( var i=0, len = images.length; i < len; i++ ) {
+    var img = images[i];
+    img.ondragstart = noDragStart;
+  }
+};
+
+// -------------------------- position -------------------------- //
+
+// get left/top position from style
+Draggabilly.prototype._getPosition = function() {
+  // properties
+  var style = getStyle( this.element );
+
+  var x = parseInt( style.left, 10 );
+  var y = parseInt( style.top, 10 );
+
+  // clean up 'auto' or other non-integer values
+  this.position.x = isNaN( x ) ? 0 : x;
+  this.position.y = isNaN( y ) ? 0 : y;
+
+  this._addTransformPosition( style );
+};
+
+// add transform: translate( x, y ) to position
+Draggabilly.prototype._addTransformPosition = function( style ) {
+  if ( !transformProperty ) {
+    return;
+  }
+  var transform = style[ transformProperty ];
+  // bail out if value is 'none'
+  if ( transform.indexOf('matrix') !== 0 ) {
+    return;
+  }
+  // split matrix(1, 0, 0, 1, x, y)
+  var matrixValues = transform.split(',');
+  // translate X value is in 12th or 4th position
+  var xIndex = transform.indexOf('matrix3d') === 0 ? 12 : 4;
+  var translateX = parseInt( matrixValues[ xIndex ], 10 );
+  // translate Y value is in 13th or 5th position
+  var translateY = parseInt( matrixValues[ xIndex + 1 ], 10 );
+  this.position.x += translateX;
+  this.position.y += translateY;
+};
+
+// -------------------------- events -------------------------- //
+
+// trigger handler methods for events
+Draggabilly.prototype.handleEvent = function( event ) {
+  var method = 'on' + event.type;
+  if ( this[ method ] ) {
+    this[ method ]( event );
+  }
+};
+
+// returns the touch that we're keeping track of
+Draggabilly.prototype.getTouch = function( touches ) {
+  for ( var i=0, len = touches.length; i < len; i++ ) {
+    var touch = touches[i];
+    if ( touch.identifier === this.pointerIdentifier ) {
+      return touch;
+    }
+  }
+};
+
+// ----- start event ----- //
+
+Draggabilly.prototype.onmousedown = function( event ) {
+  // dismiss clicks from right or middle buttons
+  var button = event.button;
+  if ( button && ( button !== 0 && button !== 1 ) ) {
+    return;
+  }
+  this.dragStart( event, event );
+};
+
+Draggabilly.prototype.ontouchstart = function( event ) {
+  // disregard additional touches
+  if ( this.isDragging ) {
+    return;
+  }
+
+  this.dragStart( event, event.changedTouches[0] );
+};
+
+Draggabilly.prototype.onMSPointerDown =
+Draggabilly.prototype.onpointerdown = function( event ) {
+  // disregard additional touches
+  if ( this.isDragging ) {
+    return;
+  }
+
+  this.dragStart( event, event );
+};
+
+function setPointerPoint( point, pointer ) {
+  point.x = pointer.pageX !== undefined ? pointer.pageX : pointer.clientX;
+  point.y = pointer.pageY !== undefined ? pointer.pageY : pointer.clientY;
+}
+
+// hash of events to be bound after start event
+var postStartEvents = {
+  mousedown: [ 'mousemove', 'mouseup' ],
+  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],
+  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],
+  MSPointerDown: [ 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel' ]
+};
+
+/**
+ * drag start
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragStart = function( event, pointer ) {
+  if ( !this.isEnabled ) {
+    return;
+  }
+
+  if ( event.preventDefault ) {
+    event.preventDefault();
+  } else {
+    event.returnValue = false;
+  }
+
+  // save pointer identifier to match up touch events
+  this.pointerIdentifier = pointer.pointerId !== undefined ?
+    // pointerId for pointer events, touch.indentifier for touch events
+    pointer.pointerId : pointer.identifier;
+
+  this._getPosition();
+
+  this.measureContainment();
+
+  // point where drag began
+  setPointerPoint( this.startPoint, pointer );
+  // position _when_ drag began
+  this.startPosition.x = this.position.x;
+  this.startPosition.y = this.position.y;
+
+  // reset left/top style
+  this.setLeftTop();
+
+  this.dragPoint.x = 0;
+  this.dragPoint.y = 0;
+
+  // bind move and end events
+  this._bindEvents({
+    // get proper events to match start event
+    events: postStartEvents[ event.type ],
+    // IE8 needs to be bound to document
+    node: event.preventDefault ? window : document
+  });
+
+  classie.add( this.element, 'is-dragging' );
+
+  // reset isDragging flag
+  this.isDragging = true;
+
+  this.emitEvent( 'dragStart', [ this, event, pointer ] );
+
+  // start animation
+  this.animate();
+};
+
+Draggabilly.prototype._bindEvents = function( args ) {
+  for ( var i=0, len = args.events.length; i < len; i++ ) {
+    var event = args.events[i];
+    eventie.bind( args.node, event, this );
+  }
+  // save these arguments
+  this._boundEvents = args;
+};
+
+Draggabilly.prototype._unbindEvents = function() {
+  var args = this._boundEvents;
+  // IE8 can trigger dragEnd twice, check for _boundEvents
+  if ( !args || !args.events ) {
+    return;
+  }
+
+  for ( var i=0, len = args.events.length; i < len; i++ ) {
+    var event = args.events[i];
+    eventie.unbind( args.node, event, this );
+  }
+  delete this._boundEvents;
+};
+
+Draggabilly.prototype.measureContainment = function() {
+  var containment = this.options.containment;
+  if ( !containment ) {
+    return;
+  }
+
+  this.size = getSize( this.element );
+  var elemRect = this.element.getBoundingClientRect();
+
+  // use element if element
+  var container = isElement( containment ) ? containment :
+    // fallback to querySelector if string
+    typeof containment === 'string' ? document.querySelector( containment ) :
+    // otherwise just `true`, use the parent
+    this.element.parentNode;
+
+  this.containerSize = getSize( container );
+  var containerRect = container.getBoundingClientRect();
+
+  this.relativeStartPosition = {
+    x: elemRect.left - containerRect.left,
+    y: elemRect.top  - containerRect.top
+  };
+};
+
+// ----- move event ----- //
+
+Draggabilly.prototype.onmousemove = function( event ) {
+  this.dragMove( event, event );
+};
+
+Draggabilly.prototype.onMSPointerMove =
+Draggabilly.prototype.onpointermove = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragMove( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchmove = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  if ( touch ) {
+    this.dragMove( event, touch );
+  }
+};
+
+/**
+ * drag move
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragMove = function( event, pointer ) {
+
+  setPointerPoint( this.dragPoint, pointer );
+  var dragX = this.dragPoint.x - this.startPoint.x;
+  var dragY = this.dragPoint.y - this.startPoint.y;
+
+  var grid = this.options.grid;
+  var gridX = grid && grid[0];
+  var gridY = grid && grid[1];
+
+  dragX = applyGrid( dragX, gridX );
+  dragY = applyGrid( dragY, gridY );
+
+  dragX = this.containDrag( 'x', dragX, gridX );
+  dragY = this.containDrag( 'y', dragY, gridY );
+
+  // constrain to axis
+  dragX = this.options.axis === 'y' ? 0 : dragX;
+  dragY = this.options.axis === 'x' ? 0 : dragY;
+
+  this.position.x = this.startPosition.x + dragX;
+  this.position.y = this.startPosition.y + dragY;
+  // set dragPoint properties
+  this.dragPoint.x = dragX;
+  this.dragPoint.y = dragY;
+
+  this.emitEvent( 'dragMove', [ this, event, pointer ] );
+};
+
+function applyGrid( value, grid, method ) {
+  method = method || 'round';
+  return grid ? Math[ method ]( value / grid ) * grid : value;
+}
+
+Draggabilly.prototype.containDrag = function( axis, drag, grid ) {
+  if ( !this.options.containment ) {
+    return drag;
+  }
+  var measure = axis === 'x' ? 'width' : 'height';
+
+  var rel = this.relativeStartPosition[ axis ];
+  var min = applyGrid( -rel, grid, 'ceil' );
+  var max = this.containerSize[ measure ] - rel - this.size[ measure ];
+  max = applyGrid( max, grid, 'floor' );
+  return  Math.min( max, Math.max( min, drag ) );
+};
+
+// ----- end event ----- //
+
+Draggabilly.prototype.onmouseup = function( event ) {
+  this.dragEnd( event, event );
+};
+
+Draggabilly.prototype.onMSPointerUp =
+Draggabilly.prototype.onpointerup = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragEnd( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchend = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  if ( touch ) {
+    this.dragEnd( event, touch );
+  }
+};
+
+/**
+ * drag end
+ * @param {Event} event
+ * @param {Event or Touch} pointer
+ */
+Draggabilly.prototype.dragEnd = function( event, pointer ) {
+  this.isDragging = false;
+
+  delete this.pointerIdentifier;
+
+  // use top left position when complete
+  if ( transformProperty ) {
+    this.element.style[ transformProperty ] = '';
+    this.setLeftTop();
+  }
+
+  // remove events
+  this._unbindEvents();
+
+  classie.remove( this.element, 'is-dragging' );
+
+  this.emitEvent( 'dragEnd', [ this, event, pointer ] );
+
+};
+
+// ----- cancel event ----- //
+
+// coerce to end event
+
+Draggabilly.prototype.onMSPointerCancel =
+Draggabilly.prototype.onpointercancel = function( event ) {
+  if ( event.pointerId === this.pointerIdentifier ) {
+    this.dragEnd( event, event );
+  }
+};
+
+Draggabilly.prototype.ontouchcancel = function( event ) {
+  var touch = this.getTouch( event.changedTouches );
+  this.dragEnd( event, touch );
+};
+
+// -------------------------- animation -------------------------- //
+
+Draggabilly.prototype.animate = function() {
+  // only render and animate if dragging
+  if ( !this.isDragging ) {
+    return;
+  }
+
+  this.positionDrag();
+
+  var _this = this;
+  requestAnimationFrame( function animateFrame() {
+    _this.animate();
+  });
+
+};
+
+// transform translate function
+var translate = is3d ?
+  function( x, y ) {
+    return 'translate3d( ' + x + 'px, ' + y + 'px, 0)';
+  } :
+  function( x, y ) {
+    return 'translate( ' + x + 'px, ' + y + 'px)';
+  };
+
+// left/top positioning
+Draggabilly.prototype.setLeftTop = function() {
+  this.element.style.left = this.position.x + 'px';
+  this.element.style.top  = this.position.y + 'px';
+};
+
+Draggabilly.prototype.positionDrag = transformProperty ?
+  function() {
+    // position with transform
+    this.element.style[ transformProperty ] = translate( this.dragPoint.x, this.dragPoint.y );
+  } : Draggabilly.prototype.setLeftTop;
+
+// -----  ----- //
+
+Draggabilly.prototype.enable = function() {
+  this.isEnabled = true;
+};
+
+Draggabilly.prototype.disable = function() {
+  this.isEnabled = false;
+  if ( this.isDragging ) {
+    this.dragEnd();
+  }
+};
+
+Draggabilly.prototype.destroy = function() {
+  this.disable();
+  // reset styles
+  if ( transformProperty ) {
+    this.element.style[ transformProperty ] = '';
+  }
+  this.element.style.left = '';
+  this.element.style.top = '';
+  this.element.style.position = '';
+  // unbind handles
+  this.bindHandles( false );
+};
+
+// -----  ----- //
+
+return Draggabilly;
+
+} // end definition
+
+// -------------------------- transport -------------------------- //
+
+if ( typeof define === 'function' && define.amd ) {
+  // AMD
+  define( [
+      'classie/classie',
+      'eventEmitter/EventEmitter',
+      'eventie/eventie',
+      'get-style-property/get-style-property',
+      'get-size/get-size'
+    ],
+    draggabillyDefinition );
+} else if ( typeof exports === 'object' ) {
+  // CommonJS
+  module.exports = draggabillyDefinition(
+    require('desandro-classie'),
+    require('wolfy87-eventemitter'),
+    require('eventie'),
+    require('desandro-get-style-property'),
+    require('get-size')
+  );
+} else {
+  // browser global
+  window.Draggabilly = draggabillyDefinition(
+    window.classie,
+    window.EventEmitter,
+    window.eventie,
+    window.getStyleProperty,
+    window.getSize
+  );
+}
+
+})( window );
+
Index: trunk/modules/droplets/themes/default/js/empty.txt
===================================================================
--- trunk/modules/droplets/themes/default/js/empty.txt	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/js/modal.js
===================================================================
--- trunk/modules/droplets/themes/default/js/modal.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/modal.js	(revision 2)
@@ -0,0 +1,137 @@
+
+    "use strict";
+
+var Modal = function(){
+
+    var modalOverlay = document.createElement('div');
+        modalOverlay.setAttribute('class', 'modal-overlay');
+        document.body.appendChild(modalOverlay);
+
+    var config = {
+        $modal: document.querySelector('.modal'),
+        $modalOverlay: document.querySelector('.modal-overlay'),
+         modalOverlayColor: 'rgba(255,255,255,0.7)',
+        $modalClose: document.querySelector('.modal-close'),
+        $modalTrigger: document.querySelector('.modal-trigger'),
+        $draggie: new Draggabilly( document.querySelector('.modal'), {
+              handle: '.modal-header',
+              containment: 'html'
+        })
+    }
+    $modal.$modalOverlay.style.background = config.modalOverlayColor;
+
+    var Modal = {
+        createEvent: function(eventName, callback){
+            var event = document.createEvent('HTMLEvents');
+            event.initEvent(eventName, true, false);
+            config.$modal.dispatchEvent(event);
+
+            if (callback && typeof(callback) === "function") {
+                callback();
+            }
+        },
+        open: function(){
+            config.$modal.style.visibility = "visible";
+            config.$modal.classList.add('opening');
+            config.$modal.classList.remove('closing');
+            config.$modalOverlay.style.visibility = "visible";
+            config.$modalOverlay.classList.add('opening');
+            config.$modalOverlay.classList.remove('closing');
+            Modal.createEvent('modalOpened', function(){
+                //callback
+            })
+        },
+        close: function(){
+            config.$modal.classList.add('closing');
+            config.$modal.classList.remove('opening');
+            config.$modalOverlay.classList.add('closing');
+            config.$modalOverlay.classList.remove('opening');
+            var timer = window.setTimeout(function(){
+                config.$modal.style.visibility = "hidden";
+                config.$modalOverlay.style.visibility = "hidden";
+                Modal.createEvent('modalClosed', function(){
+                    //callback
+                });
+            },500);
+        },
+        init: function(){
+            config.$draggie.on( 'dragStart', function( instance, event, pointer ){
+                console.log( 'dragMove on ' + event.type + pointer.pageX + ', ' + pointer.pageY + ' position at ' + instance.position.x + ', ' + instance.position.y );
+            });
+
+            config.$modalClose.addEventListener("click", function(){
+                Modal.close();
+            }, false);
+
+            config.$modalTrigger.addEventListener("click", function(){
+                Modal.open();
+            }, false);
+
+            window.addEventListener("keydown", function(e){
+                console.log(e.keyCode);
+                if (e.keyCode == 27) {
+                    if( config.$modal.style.display != 'none'){
+                        Modal.close();
+                    }
+                }
+
+                if (e.keyCode == 38 && e.ctrlKey) {
+                    console.log('full');
+                    if(config.$modal.classList.contains("is-right") || config.$modal.classList.contains("is-left")){
+                        config.$modal.classList.remove("is-right");
+                        config.$modal.classList.remove("is-left");
+                        config.$draggie.enable();
+                    } else {
+                        config.$draggie.disable();
+                        config.$modal.classList.add("is-full");
+                    }
+                }
+
+                if (e.keyCode == 37 && e.ctrlKey) {
+                    console.log('left');
+                    if(config.$modal.classList.contains("is-right") || config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-right");
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    } else {
+                        config.$modal.classList.add("is-left");
+                        config.$draggie.disable();
+                    }
+                }
+
+                if (e.keyCode == 39 && e.ctrlKey) {
+                     console.log('right');
+                    if(config.$modal.classList.contains("is-left") || config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-left");
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    } else {
+                         config.$modal.classList.add("is-right");
+                         config.$draggie.disable();
+                    }
+                }
+
+                if (e.keyCode == 40 && e.ctrlKey) {
+                    if(config.$modal.classList.contains("is-full")){
+                        config.$modal.classList.remove("is-full");
+                        config.$draggie.enable();
+                    }
+                }
+
+            });
+
+            config.$modal.addEventListener("modalOpened", function(){
+                console.log("Modal Opened");
+            })
+            config.$modal.addEventListener("modalClosed", function(){
+                console.log("Modal Closed");
+            })
+
+        }
+    }
+    Modal.config = config;
+
+    return Modal;
+
+};
+
Index: trunk/modules/droplets/themes/default/js/msc-script.js
===================================================================
--- trunk/modules/droplets/themes/default/js/msc-script.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/msc-script.js	(revision 2)
@@ -0,0 +1,110 @@
+(function(){
+    function ce(tag, clas, txt) {
+        var ele = document.createElement(tag);
+        ele.setAttribute('class', clas);
+        if(typeof txt === 'undefined' || txt === null){
+            return ele;
+        }
+        var tn = document.createTextNode(txt);
+        ele.appendChild(tn);
+        return ele;
+    }
+    var KEY_ESC = 27;
+
+    var MscConfirm = function(title, sub, onOk, onCancel) {
+        var prev = document.getElementsByClassName('msc-confirm');
+        if(prev.length > 0){
+            document.body.removeChild(prev[0]);
+        }
+
+        var options = {
+            title: 'Confirm',
+            subtitle: '',
+            onOk: null,
+            onCancel: null,
+            okText: 'OK',
+            cancelText: 'Cancel'
+        };
+
+        if(typeof title === 'object') {
+            for(var key in title) {
+                options[key] = title[key];
+            }
+        } else {
+            options.title = (typeof title === 'string') ? title : options.title;
+            options.subtitle = (typeof sub === 'string') ? sub : options.subtitle;
+            options.onOk = (typeof onOk === 'function') ? onOk : options.onOk;
+            options.onCancel = (typeof onCancel === 'function') ? onCancel : options.onCancel;
+
+            if(typeof sub === 'function') {
+                options.onOk = sub;
+            }
+        }
+
+        var dialog = ce('div', 'msc-confirm'),
+            overlay = ce('div', 'msc-overlay'),
+            closeBtn = ce('button', 'msc-close');
+        closeBtn.innerHTML = '&times;';
+        overlay.appendChild(closeBtn);
+
+        closeBtn.addEventListener('click', destroy);
+
+        var content = ce('div', 'msc-content'),
+            cTitle = ce('h3', 'msc-title', options.title),
+            body = ce('div', 'msc-body', options.subtitle),
+            action = ce('div', 'msc-action'),
+            okBtn = ce('button', 'msc-ok', options.okText),
+            cancelbtn = ce('button', 'msc-cancel', options.cancelText);
+
+        action.appendChild(okBtn);
+        action.appendChild(cancelbtn);
+
+        okBtn.addEventListener('click', ok);
+        cancelbtn.addEventListener('click', cancel);
+
+        content.appendChild(cTitle);
+        content.appendChild(body);
+        content.appendChild(action);
+
+        dialog.appendChild(overlay);
+        dialog.appendChild(content);
+        document.body.appendChild(dialog);
+        dialog.style.display = 'block';
+        content.classList.add('msc-confirm--animate');
+        cancelbtn.focus();
+
+        document.addEventListener('keyup', _hide);
+
+        function destroy() {
+            closeBtn.removeEventListener('click', destroy);
+            okBtn.removeEventListener('click', ok);
+            cancelbtn.removeEventListener('click', cancel);
+            document.removeEventListener('keyup', _hide);
+            document.body.removeChild(dialog);
+        }
+
+        function ok() {
+            destroy();
+            if(options.onOk !== null) {
+                options.onOk();
+            }
+        }
+
+        function cancel() {
+            destroy();
+            if(options.onCancel !== null) {
+                options.onCancel();
+            }
+        }
+
+        function _hide(e) {
+            if(e.keyCode == 27) {
+                destroy();
+            }
+        }
+    };
+
+    //window.msc = MscConfirm;
+    window.mscConfirm = MscConfirm;
+})();
+
Index: trunk/modules/droplets/themes/default/js/scrollTable.js
===================================================================
--- trunk/modules/droplets/themes/default/js/scrollTable.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/scrollTable.js	(revision 2)
@@ -0,0 +1,37 @@
+/* http://www.alistapart.com/articles/zebratables/ */
+function removeClassName (elem, className) {
+    elem.className = elem.className.replace(className, "").trim();
+}
+
+function addCSSClass (elem, className) {
+    removeClassName (elem, className);
+    elem.className = (elem.className + " " + className).trim();
+}
+
+String.prototype.trim = function() {
+    return this.replace( /^\s+|\s+$/, "" );
+}
+
+function stripedTable() {
+    return false;
+    if (document.getElementById && document.getElementsByTagName) {  
+        var allTables = document.getElementsByTagName('table');
+        if (!allTables) { return; }
+
+        for (var i = 0; i < allTables.length; i++) {
+            if (allTables[i].className.match(/[\w\s ]*scrollTable[\w\s ]*/)) {
+                var trs = allTables[i].getElementsByTagName("tr");
+                for (var j = 0; j < trs.length; j++) {
+                    removeClassName(trs[j], 'alternateRow');
+                    addCSSClass(trs[j], 'normalRow');
+                }
+                for (var k = 0; k < trs.length; k += 2) {
+                    removeClassName(trs[k], 'normalRow');
+                    addCSSClass(trs[k], 'alternateRow');
+                }
+            }
+        }
+    }
+}
+
+window.onload = function() { stripedTable(); }
Index: trunk/modules/droplets/themes/default/js/tip_balloon.js
===================================================================
--- trunk/modules/droplets/themes/default/js/tip_balloon.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/tip_balloon.js	(revision 2)
@@ -0,0 +1,222 @@
+/*
+tip_balloon.js  v. 1.81
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 2.2.2009
+
+Extension for the tooltip library wz_tooltip.js.
+Implements balloon tooltips.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. Balloon a command BALLOON will automatically be
+// created.
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+config. Balloon                = false    // true or false - set to true if you want this to be the default behaviour
+config. BalloonImgPath         = Droplet.ThemeUrl+"img/tip_balloon/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file.
+// Sizes of balloon images
+config. BalloonEdgeSize        = 6        // Integer - sidelength of quadratic corner images
+config. BalloonStemWidth       = 15    // Integer
+config. BalloonStemHeight      = 19    // Integer
+config. BalloonStemOffset      = -7    // Integer - horizontal offset of left stem edge from mouse (recommended: -stemwidth/2 to center the stem above the mouse)
+config. BalloonImgExt          = "gif";// File name extension of default balloon images, e.g. "gif" or "png"
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here balloon, is unique amongst the extensions available for wz_tooltips.js):
+var balloon = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+
+balloon.OnLoadConfig = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        // Turn off native style properties which are not appropriate
+        balloon.padding = Math.max(tt_aV[PADDING] - tt_aV[BALLOONEDGESIZE], 0);
+        balloon.width = tt_aV[WIDTH];
+        //if(tt_bBoxOld)
+        //    balloon.width += (balloon.padding << 1);
+        tt_aV[BORDERWIDTH] = 0;
+        tt_aV[WIDTH] = 0;
+        tt_aV[PADDING] = 0;
+        tt_aV[BGCOLOR] = "";
+        tt_aV[BGIMG] = "";
+        tt_aV[SHADOW] = false;
+console.info(Droplet.ThemeUrl);
+console.info(BALLOONIMGPATH);
+        // Append slash to img path if missing
+        if(tt_aV[BALLOONIMGPATH].charAt(tt_aV[BALLOONIMGPATH].length - 1) != '/')
+            tt_aV[BALLOONIMGPATH] += "/";
+        return true;
+    }
+    return false;
+};
+balloon.OnCreateContentString = function()
+{
+    if(!tt_aV[BALLOON])
+        return false;
+
+    var aImg, sImgZ, sCssCrn, sVaT, sVaB, sCss0;
+
+    // Cache balloon images in advance:
+    // Either use the pre-cached default images...
+    if(tt_aV[BALLOONIMGPATH] == config.BalloonImgPath)
+        aImg = balloon.aDefImg;
+    // ...or load images from different directory
+    else
+        aImg = Balloon_CacheImgs(tt_aV[BALLOONIMGPATH], tt_aV[BALLOONIMGEXT]);
+    sCss0 = 'padding:0;margin:0;border:0;line-height:0;overflow:hidden;';
+    sCssCrn = ' style="position:relative;width:' + tt_aV[BALLOONEDGESIZE] + 'px;' + sCss0 + 'overflow:hidden;';
+    sVaT = 'vertical-align:top;" valign="top"';
+    sVaB = 'vertical-align:bottom;" valign="bottom"';
+    sImgZ = '" style="' + sCss0 + '" />';
+
+    tt_sContent = '<table  style="width:auto;padding:0;margin:0;left:0;top:0;border-collapse: collapse;"><tr>'
+        // Left-top corner
+        + '<td' + sCssCrn + sVaB + '>'
+        + '<img src="' + aImg[1].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        // Top border
+        + '<td valign="bottom" style="position:relative;' + sCss0 + '">'
+        + '<img id="bALlOOnT" style="position:relative;top:1px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[9].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />'
+        + '<div style="position:relative;z-index:0;top:0;' + sCss0 + 'width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[2].src + ');">'
+        + '</div>'
+        + '</td>'
+        // Right-top corner
+        + '<td' + sCssCrn + sVaB + '>'
+        + '<img src="' + aImg[3].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        + '</tr><tr>'
+        // Left border (background-repeat fix courtesy Dirk Schnitzler)
+        + '<td style="position:relative;background-repeat:repeat;' + sCss0 + 'width:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[8].src + ');">'
+        // Redundant image for bugous old Geckos which won't auto-expand TD height to 100%
+        + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[8].src + sImgZ
+        + '</td>'
+        // Content
+        + '<td id="bALlO0nBdY" style="position:relative;line-height:normal;background-repeat:repeat;'
+        + ';background-image:url(' + aImg[0].src + ')'
+        + ';color:' + tt_aV[FONTCOLOR]
+        + ';font-family:' + tt_aV[FONTFACE]
+        + ';font-size:' + tt_aV[FONTSIZE]
+        + ';font-weight:' + tt_aV[FONTWEIGHT]
+        + ';text-align:' + tt_aV[TEXTALIGN]
+        + ';padding:' + balloon.padding + 'px'
+        + ';width:' + ((balloon.width > 0) ? (balloon.width + 'px') : 'auto')
+        + ';">' + tt_sContent + '</td>'
+        // Right border
+        + '<td style="position:relative;background-repeat:repeat;' + sCss0 + 'width:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[4].src + ');">'
+        // Image redundancy for bugous old Geckos that won't auto-expand TD height to 100%
+        + '<img width="' + tt_aV[BALLOONEDGESIZE] + '" height="100%" src="' + aImg[4].src + sImgZ
+        + '</td>'
+        + '</tr><tr>'
+        // Left-bottom corner
+        + '<td' + sCssCrn + sVaT + '>'
+        + '<img src="' + aImg[7].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        // Bottom border
+        + '<td valign="top" style="position:relative;' + sCss0 + '">'
+        + '<div style="position:relative;left:0;top:0;' + sCss0 + 'width:auto;height:' + tt_aV[BALLOONEDGESIZE] + 'px;background-image:url(' + aImg[6].src + ');"></div>'
+        + '<img id="bALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[10].src + '" width="' + tt_aV[BALLOONSTEMWIDTH] + '" height="' + tt_aV[BALLOONSTEMHEIGHT] + '" />'
+        + '</td>'
+        // Right-bottom corner
+        + '<td' + sCssCrn + sVaT + '>'
+        + '<img src="' + aImg[5].src + '" width="' + tt_aV[BALLOONEDGESIZE] + '" height="' + tt_aV[BALLOONEDGESIZE] + sImgZ
+        + '</td>'
+        + '</tr></table>';//alert(tt_sContent);
+    return true;
+};
+balloon.OnSubDivsCreated = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        var bdy = tt_GetElt("bALlO0nBdY");
+
+        // Insert a TagToTip() HTML element into the central body TD
+        if (tt_t2t && !tt_aV[COPYCONTENT] && bdy)
+            tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), bdy);
+        balloon.iStem = tt_aV[ABOVE] * 1;
+        balloon.aStem = [tt_GetElt("bALlOOnT"), tt_GetElt("bALlOOnB")];
+        balloon.aStem[balloon.iStem].style.display = "inline";
+        if (balloon.width < -1)
+            Balloon_MaxW(bdy);
+        return true;
+    }
+    return false;
+};
+// Display the stem appropriately
+balloon.OnMoveAfter = function()
+{
+    if(tt_aV[BALLOON])
+    {
+        var iStem = (tt_aV[ABOVE] != tt_bJmpVert) * 1;
+
+        // Tooltip position vertically flipped?
+        if(iStem != balloon.iStem)
+        {
+            // Display opposite stem
+            balloon.aStem[balloon.iStem].style.display = "none";
+            balloon.aStem[iStem].style.display = "inline";
+            balloon.iStem = iStem;
+        }
+
+        balloon.aStem[iStem].style.left = Balloon_CalcStemX() + "px";
+        return true;
+    }
+    return false;
+};
+function Balloon_CalcStemX()
+{
+    var x = tt_musX - tt_x + tt_aV[BALLOONSTEMOFFSET] - tt_aV[BALLOONEDGESIZE];
+    return Math.max(Math.min(x, tt_w - tt_aV[BALLOONSTEMWIDTH] - (tt_aV[BALLOONEDGESIZE] << 1) - 2), 2);
+}
+function Balloon_CacheImgs(sPath, sExt)
+{
+    var asImg = ["background", "lt", "t", "rt", "r", "rb", "b", "lb", "l", "stemt", "stemb"],
+    n = asImg.length,
+    aImg = new Array(n),
+    img;
+
+    while(n)
+    {--n;
+        img = aImg[n] = new Image();
+        img.src = sPath + asImg[n] + "." + sExt;
+    }
+    return aImg;
+}
+function Balloon_MaxW(bdy)
+{
+    if (bdy)
+    {
+        var iAdd = tt_bBoxOld ? (balloon.padding << 1) : 0, w = tt_GetDivW(bdy);
+        if (w > -balloon.width + iAdd)
+            bdy.style.width = (-balloon.width + iAdd) + "px";
+    }
+}
+// This mechanism pre-caches the default images specified by
+// congif.BalloonImgPath, so, whenever a balloon tip using these default images
+// is created, no further server connection is necessary.
+function Balloon_PreCacheDefImgs()
+{
+    // Append slash to img path if missing
+    if(config.BalloonImgPath.charAt(config.BalloonImgPath.length - 1) != '/')
+        config.BalloonImgPath += "/";
+    // Preload default images into array
+    balloon.aDefImg = Balloon_CacheImgs(config.BalloonImgPath, config.BalloonImgExt);
+}
+Balloon_PreCacheDefImgs();
Index: trunk/modules/droplets/themes/default/js/tip_centerwindow.js
===================================================================
--- trunk/modules/droplets/themes/default/js/tip_centerwindow.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/tip_centerwindow.js	(revision 2)
@@ -0,0 +1,104 @@
+/*
+tip_centerwindow.js  v. 1.21
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 3.6.2008
+
+Extension for the tooltip library wz_tooltip.js.
+Centers a sticky tooltip in the window's visible clientarea,
+optionally even if the window is being scrolled or resized.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. CenterWindow a command CENTERWINDOW will automatically be
+// created.
+
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+config. CenterWindow = false    // true or false - set to true if you want this to be the default behaviour
+config. CenterAlways = false    // true or false - recenter if window is resized or scrolled
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here ctrwnd, is unique amongst the extensions available for
+// wz_tooltips.js):
+var ctrwnd = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+ctrwnd.OnLoadConfig = function()
+{
+    if(tt_aV[CENTERWINDOW])
+    {
+        // Permit CENTERWINDOW only if the tooltip is sticky
+        if(tt_aV[STICKY])
+        {
+            if(tt_aV[CENTERALWAYS])
+            {
+                // IE doesn't support style.position "fixed"
+                if(tt_ie)
+                    tt_AddEvtFnc(window, "scroll", Ctrwnd_DoCenter);
+                else
+                    tt_aElt[0].style.position = "fixed";
+                tt_AddEvtFnc(window, "resize", Ctrwnd_DoCenter);
+            }
+            return true;
+        }
+        tt_aV[CENTERWINDOW] = false;
+    }
+    return false;
+};
+// We react on the first OnMouseMove event to center the tip on that occasion
+ctrwnd.OnMoveBefore = Ctrwnd_DoCenter;
+ctrwnd.OnKill = function()
+{
+    if(tt_aV[CENTERWINDOW] && tt_aV[CENTERALWAYS])
+    {
+        tt_RemEvtFnc(window, "resize", Ctrwnd_DoCenter);
+        if(tt_ie)
+            tt_RemEvtFnc(window, "scroll", Ctrwnd_DoCenter);
+        else
+            tt_aElt[0].style.position = "absolute";
+    }
+    return false;
+};
+// Helper function
+function Ctrwnd_DoCenter()
+{
+    if(tt_aV[CENTERWINDOW])
+    {
+        var x, y, dx, dy;
+
+        // Here we use some functions and variables (tt_w, tt_h) which the
+        // extension API of wz_tooltip.js provides for us
+        if(tt_ie || !tt_aV[CENTERALWAYS])
+        {
+            dx = tt_GetScrollX();
+            dy = tt_GetScrollY();
+        }
+        else
+        {
+            dx = 0;
+            dy = 0;
+        }
+        // Position the tip, offset from the center by OFFSETX and OFFSETY
+        x = (tt_GetClientW() - tt_w) / 2 + dx + tt_aV[OFFSETX];
+        y = (tt_GetClientH() - tt_h) / 2 + dy + tt_aV[OFFSETY];
+        tt_SetTipPos(x, y);
+        return true;
+    }
+    return false;
+}
Index: trunk/modules/droplets/themes/default/js/tip_followscroll.js
===================================================================
--- trunk/modules/droplets/themes/default/js/tip_followscroll.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/tip_followscroll.js	(revision 2)
@@ -0,0 +1,88 @@
+/*
+tip_followscroll.js    v. 1.11
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Initial author: Walter Zorn
+Last modified: 3.6.2008
+
+Extension for the tooltip library wz_tooltip.js.
+Lets a "sticky" tooltip keep its position inside the clientarea if the window
+is scrolled.
+*/
+
+// Make sure that the core file wz_tooltip.js is included first
+if(typeof config == "undefined")
+    alert("Error:\nThe core tooltip script file 'wz_tooltip.js' must be included first, before the plugin files!");
+
+// Here we define new global configuration variable(s) (as members of the
+// predefined "config." class).
+// From each of these config variables, wz_tooltip.js will automatically derive
+// a command which can be passed to Tip() or TagToTip() in order to customize
+// tooltips individually. These command names are just the config variable
+// name(s) translated to uppercase,
+// e.g. from config. FollowScroll a command FOLLOWSCROLL will automatically be
+// created.
+
+//===================    GLOBAL TOOLTIP CONFIGURATION    ======================//
+config. FollowScroll = false        // true or false - set to true if you want this to be the default behaviour
+//=======    END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW    ==============//
+
+
+// Create a new tt_Extension object (make sure that the name of that object,
+// here fscrl, is unique amongst the extensions available for
+// wz_tooltips.js):
+var fscrl = new tt_Extension();
+
+// Implement extension eventhandlers on which our extension should react
+fscrl.OnShow = function()
+{
+    if(tt_aV[FOLLOWSCROLL])
+    {
+        // Permit FOLLOWSCROLL only if the tooltip is sticky
+        if(tt_aV[STICKY])
+        {
+            var x = tt_x - tt_GetScrollX(), y = tt_y - tt_GetScrollY();
+
+            if(tt_ie)
+            {
+                fscrl.MoveOnScrl.offX = x;
+                fscrl.MoveOnScrl.offY = y;
+                fscrl.AddRemEvtFncs(tt_AddEvtFnc);
+            }
+            else
+            {
+                tt_SetTipPos(x, y);
+                tt_aElt[0].style.position = "fixed";
+            }
+            return true;
+        }
+        tt_aV[FOLLOWSCROLL] = false;
+    }
+    return false;
+};
+fscrl.OnHide = function()
+{
+    if(tt_aV[FOLLOWSCROLL])
+    {
+        if(tt_ie)
+            fscrl.AddRemEvtFncs(tt_RemEvtFnc);
+        else
+            tt_aElt[0].style.position = "absolute";
+    }
+};
+// Helper functions (encapsulate in the class to avoid conflicts with other
+// extensions)
+fscrl.MoveOnScrl = function()
+{
+    tt_SetTipPos(fscrl.MoveOnScrl.offX + tt_GetScrollX(), fscrl.MoveOnScrl.offY + tt_GetScrollY());
+};
+fscrl.AddRemEvtFncs = function(PAddRem)
+{
+    PAddRem(window, "resize", fscrl.MoveOnScrl);
+    PAddRem(window, "scroll", fscrl.MoveOnScrl);
+};
+
Index: trunk/modules/droplets/themes/default/js/transparentpixel.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/droplets/themes/default/js/transparentpixel.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/droplets/themes/default/js/wz_dragdrop.js
===================================================================
--- trunk/modules/droplets/themes/default/js/wz_dragdrop.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/wz_dragdrop.js	(revision 2)
@@ -0,0 +1,1437 @@
+/* This notice must be untouched at all times, and must not be removed.
+
+wz_dragdrop.js	v. 4.91
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Copyright (c) Walter Zorn. All rights reserved.
+Created 26. 8. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
+Last modified: 10.10.2008
+
+This DHTML & Drag&Drop Library adds Drag&Drop functionality to:
+- images, even those not positioned via layers,
+  nor via stylesheets or any other kind of "hard-coding";
+- relatively and absolutely positioned layers (DIV elements).
+Moreover, it provides extended DHTML capabilities.
+
+LICENSE: LGPL
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License (LGPL) 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.
+
+For more details on the GNU Lesser General Public License,
+see http://www.gnu.org/copyleft/lesser.html
+*/
+
+
+// PATH TO THE TRANSPARENT 1*1 PX IMAGE (required by NS 4 as spacer)
+var spacer = 'transparentpixel.gif';
+
+
+
+
+//window.onerror = new Function('return true;');
+
+
+// Optional commands passed to SET_DHTML() on the html-page (g: may be applied globally, i: individually)
+var CLONE			= 'C10nE';   // i  img	  clone image
+var COPY			= 'C0pY';	// i  img	  create copies
+var DETACH_CHILDREN = 'd37aCH';  // i  lyr	  detach images
+var HORIZONTAL		= 'H0r1Z';   // i  img,lyr  horizontally draggable only
+var MAXHEIGHT		= 'm7x8I';   // i  img,lyr  maximum height limit, "
+var MAXOFFBOTTOM	= 'm7xd0wN'; // i  img,lyr  downward offset limit
+var MAXOFFLEFT		= 'm7x23Ft'; // i  img,lyr  leftward offset limit
+var MAXOFFRIGHT		= 'm7x0Ff8'; // i  img,lyr  rightward offset limit
+var MAXOFFTOP		= 'm7xu9';   // i  img,lyr  upward offset limit
+var MAXWIDTH		= 'm7xW1';   // i  img,lyr  maximum width limit, use with resizable or scalable
+var MINWIDTH		= 'm1nw1';   // i  img,lyr  minimum width limit, "
+var MINHEIGHT		= 'm1n8I';   // i  img,lyr  minimum height limit, "
+var NO_ALT			= 'no81T';   // gi img	  disable alt and title attributes
+var NO_DRAG			= 'N0d4Ag';  // i  img,lyr  disable draggability
+var RESET_Z			= 'r35E7z';  // gi img,lyr  reset z-index when dropped
+var RESIZABLE		= 'r5IZbl';  // gi img,lyr  resizable if <ctrl> or <shift> pressed
+var SCALABLE		= 'SCLbl';   // gi img,lyr  scalable		   "
+var SCROLL			= 'sC8lL';   // gi img,lyr  enable auto scroll functionality
+var TRANSPARENT		= 'dIApHAn'; // gi img,lyr  translucent while dragged
+var VERTICAL		= 'V3Rt1C';  // i  img,lyr  vertically draggable only
+var dd_cursors = new Array(
+	'c:default',
+	'c:crosshair',
+	'c:e-resize',
+	'c:hand',
+	'c:help',
+	'c:move',
+	'c:n-resize',
+	'c:ne-resize',
+	'c:nw-resize',
+	'c:s-resize',
+	'c:se-resize',
+	'c:sw-resize',
+	'c:text',
+	'c:w-resize',
+	'c:wait'
+);
+for(var dd_i = dd_cursors.length; dd_i;)
+{--dd_i;
+	eval('var CURSOR_' + (dd_cursors[dd_i].substring(2).toUpperCase().replace('-', '_')) + ' = "' + dd_cursors[dd_i] + '";');
+}
+var dd_u = "undefined";
+function WZDD()
+{
+	this.elements = new Array(0);
+	this.obj = null;
+	this.n = navigator.userAgent.toLowerCase();
+	this.db = (document.compatMode && document.compatMode.toLowerCase() != "backcompat")?
+		document.documentElement
+		: (document.body || null);
+	this.op = !!(window.opera && document.getElementById);
+	if(this.op) document.onmousedown = new Function('e',
+		'if(((e = e || window.event).target || e.srcElement).tagName == "IMAGE") return false;');
+	this.ie = !!(this.n.indexOf("msie") >= 0 && document.all && this.db && !this.op);
+	this.iemac = !!(this.ie && this.n.indexOf("mac") >= 0);
+	this.ie4 = !!(this.ie && !document.getElementById);
+	this.n4 = !!(document.layers && typeof document.classes != dd_u);
+	this.n6 = !!(typeof window.getComputedStyle != dd_u && typeof document.createRange != dd_u);
+	this.w3c = !!(!this.op && !this.ie && !this.n6 && document.getElementById);
+	this.ce = !!(document.captureEvents && document.releaseEvents && !this.n6);
+	this.px = this.n4? '' : 'px';
+	this.tWait = this.w3c? 40 : 10;
+	this.noRecalc = false;
+}
+var dd = new WZDD();
+
+dd.Int = function(d_x, d_y)
+{
+	return isNaN(d_y = parseInt(d_x))? 0 : d_y;
+};
+dd.getWndW = function()
+{
+	return dd.Int(
+		(dd.db && !dd.op && !dd.w3c && dd.db.clientWidth)? dd.db.clientWidth
+		: (window.innerWidth || 0)
+	);
+};
+dd.getWndH = function()
+{
+	return dd.Int(
+		(dd.db && !dd.op && !dd.w3c && dd.db.clientHeight)? dd.db.clientHeight
+		: (window.innerHeight || 0)
+	);
+};
+dd.getScrollX = function()
+{
+	return dd.Int(window.pageXOffset || (dd.db? dd.db.scrollLeft : 0));
+};
+dd.getScrollY = function()
+{
+	return dd.Int(window.pageYOffset || (dd.db? dd.db.scrollTop : 0));
+};
+dd.getPageXY = function(d_o)
+{
+	if(dd.n4 && d_o)
+	{
+		dd.x = d_o.pageX || 0;
+		dd.y = d_o.pageY || 0;
+	}
+	else
+	{
+		dd.x = dd.y = 0; //global helper vars
+		while(d_o)
+		{
+			dd.x += dd.Int(d_o.offsetLeft);
+			dd.y += dd.Int(d_o.offsetTop);
+			d_o = d_o.offsetParent || null;
+		}
+	}
+};
+dd.getCssXY = function(d_o)
+{
+	if(d_o.div)
+	{
+		if(dd.n4)
+		{
+			d_o.cssx = d_o.div.x;
+			d_o.cssy = d_o.div.y;
+		}
+		else if(dd.ie4)
+		{
+			d_o.cssx = d_o.css.pixelLeft;
+			d_o.cssy = d_o.css.pixelTop;
+		}
+		else
+		{
+			d_o.css.left = d_o.css.top = 0 + dd.px;
+			dd.getPageXY(d_o.div);
+			d_o.cssx = d_o.x - dd.x;
+			d_o.cssy = d_o.y - dd.y;
+			d_o.css.left = d_o.cssx + dd.px;
+			d_o.css.top = d_o.cssy + dd.px;
+		}
+	}
+	else
+	{
+		d_o.cssx = 0;
+		d_o.cssy = 0;
+	}
+};
+dd.getImgW = function(d_o)
+{
+	return d_o? dd.Int(d_o.width) : 0;
+};
+dd.getImgH = function(d_o)
+{
+	return d_o? dd.Int(d_o.height) : 0;
+};
+dd.getDivW = function(d_o)
+{
+	return dd.Int(
+		dd.n4? (d_o.div? d_o.div.clip.width : 0)
+		: d_o.div? (d_o.div.offsetWidth || d_o.css.pixelWidth || d_o.css.width || 0)
+		: 0
+	);
+};
+dd.getDivH = function(d_o)
+{
+	return dd.Int(
+		dd.n4? (d_o.div? d_o.div.clip.height : 0)
+		: d_o.div? (d_o.div.offsetHeight || d_o.css.pixelHeight || d_o.css.height || 0)
+		: 0
+	);
+};
+dd.getWH = function(d_o)
+{
+	d_o.w = dd.getDivW(d_o);
+	d_o.h = dd.getDivH(d_o);
+	if(d_o.css)
+	{
+		d_o.css.width = d_o.w + dd.px;
+		d_o.css.height = d_o.h + dd.px;
+		d_o.dw = dd.getDivW(d_o)-d_o.w;
+		d_o.dh = dd.getDivH(d_o)-d_o.h;
+		d_o.css.width = (d_o.w-d_o.dw) + dd.px;
+		d_o.css.height = (d_o.h-d_o.dh) + dd.px;
+	}
+	else d_o.dw = d_o.dh = 0;
+};
+dd.getCssProp = function(d_o, d_pn6, d_pstyle, d_pn4)
+{
+	if(d_o && dd.n6) return ''+window.getComputedStyle(d_o, null).getPropertyValue(d_pn6);
+	if(d_o && d_o.currentStyle) return ''+eval('d_o.currentStyle.'+d_pstyle);
+	if(d_o && d_o.style) return ''+eval('d_o.style.'+d_pstyle);
+	if(d_o && dd.n4) return ''+eval('d_o.'+d_pn4);
+	return '';
+};
+dd.getDiv = function(d_x, d_d)
+{
+	d_d = d_d || document;
+	if(dd.n4)
+	{
+		if(d_d.layers[d_x]) return d_d.layers[d_x];
+		for(var d_i = d_d.layers.length; d_i;)
+		{
+			var d_y = dd.getDiv(d_x, d_d.layers[--d_i].document);
+			if(d_y) return d_y;
+		}
+	}
+	if(dd.ie) return d_d.all[d_x] || null;
+	if(d_d.getElementById) return d_d.getElementById(d_x) || null;
+	return null;
+};
+dd.getImg = function(d_o, d_nm, d_xy, d_w)
+{
+	d_w = d_w || window;
+	var d_img;
+	if(document.images && (d_img = d_w.document.images[d_nm]))
+	{
+		if(d_xy)
+		{
+			if(dd.n4)
+			{
+				dd.getPageXY(d_w);
+				d_o.defx = d_img.x + dd.x;
+				d_o.defy = d_img.y + dd.y;
+			}
+			else
+			{
+				dd.getPageXY(d_img);
+				d_o.defx = dd.x;
+				d_o.defy = dd.y;
+			}
+		}
+		return d_img;
+	}
+	if(dd.n4) for(var d_i = d_w.document.layers.length; d_i;)
+	{
+		var d_y = dd.getImg(d_o, d_nm, d_xy, d_w.document.layers[--d_i]);
+		if(d_y) return d_y;
+	}
+	return null;
+};
+dd.getParent = function(d_o, d_p)
+{
+	if(dd.n4)
+	{
+		for(var d_i = dd.elements.length; d_i;)
+		{
+			if(!((d_p = dd.elements[--d_i]).is_image) && d_p.div && (d_p.div.document.layers[d_o.name] || d_o.oimg && d_p.div.document.images[d_o.oimg.name]))
+				d_p.addChild(d_o, d_p.detach, 1);
+		}
+	}
+	else
+	{
+		d_p = d_o.is_image? dd.getImg(d_o, d_o.oimg.name) : (d_o.div || null);
+		while(d_p && !!(d_p = d_p.offsetParent || d_p.parentNode || null))
+		{
+			if(d_p.ddObj)
+			{
+				d_p.ddObj.addChild(d_o, d_p.ddObj.detach, 1);
+				break;
+			}
+		}
+	}
+};
+dd.getCmd = function(d_o, d_cmd, d_cmdStr)
+{
+	var d_i = d_o.id.indexOf(d_cmd), d_j,
+	d_y = (d_i >= 0)*1;
+	if(d_y)
+	{
+		d_j = d_i+d_cmd.length;
+		if(d_cmdStr) d_o.cmd += d_o.id.substring(d_i, d_j);
+		d_o.id = d_o.id.substring(0, d_i) + d_o.id.substring(d_j);
+	}
+	return d_y;
+};
+dd.getCmdVal = function(d_o, d_cmd, d_cmdStr, int0)
+{
+	var d_i = d_o.id.indexOf(d_cmd), d_j,
+	d_y = (d_o.id.indexOf(d_cmd) >= 0)? dd.Int(d_o.id.substring(d_o.id.indexOf(d_cmd)+d_cmd.length)) : int0? -1 : 0;
+	if(!int0 && d_y || int0 && d_y >= 0)
+	{
+		d_j = d_i+d_cmd.length+(""+d_y).length;
+		if(d_cmdStr) d_o.cmd += d_o.id.substring(d_i, d_j);
+		d_o.id = d_o.id.substring(0, d_i) + d_o.id.substring(d_j);
+	}
+	return d_y;
+};
+dd.addElt = function(d_o, d_p)
+{
+	dd.elements[d_o.name] = dd.elements[d_o.index = dd.elements.length] = d_o;
+	if(d_p) d_p.copies[d_o.name] = d_p.copies[d_p.copies.length] = d_o;
+};
+dd.mkWzDom = function()
+{
+	var d_o, d_l = dd.elements.length, d_i;
+	for(d_i = d_l; d_i;) dd.getParent(dd.elements[--d_i]);
+	for(d_i = d_l; d_i;)
+	{
+		if((d_o = dd.elements[--d_i]).children && !d_o.parent)
+		{
+			for(var d_j = d_o.children.length; d_j;)
+			{--d_j;
+				d_o.children[d_j].setZ(d_o.z+d_o.children[d_j].z, 1);
+			}
+		}
+	}
+};
+dd.addProps = function(d_o)
+{
+	if(d_o.is_image)
+	{
+		d_o.div = dd.getDiv(d_o.id);
+		d_o.css = (d_o.div && typeof d_o.div.style != dd_u)? d_o.div.style : null;
+		d_o.nimg = (dd.n4 && d_o.div)? d_o.div.document.images[0] : (document.images[d_o.id+"NI1m6G"] || null);
+		if(!d_o.noalt && !dd.noalt && d_o.nimg && d_o.oimg)
+		{
+			d_o.nimg.alt = d_o.oimg.alt || '';
+			d_o.nimg.title = d_o.oimg.title;
+			d_o.nimg.onmouseover = d_o.oimg.onmouseover;
+			d_o.nimg.onmouseout = d_o.oimg.onmouseout;
+		}
+		d_o.bgColor = '';
+	}
+	else
+	{
+		d_o.bgColor = dd.getCssProp(d_o.div, 'background-color','backgroundColor','bgColor').toLowerCase();
+		if(dd.n6 && d_o.div)
+		{
+			var d_c = d_o.bgColor.toLowerCase();
+			if(d_c.indexOf('rgb') >= 0)
+			{
+				d_c = d_c.substring(4, d_c.length-1).split(',');
+				d_o.bgColor = '#';
+				for(var d_l = d_c.length, d_i = 0; d_i < d_l; d_i++) d_o.bgColor += parseInt(d_c[d_i]).toString(0x10);
+			}
+			else d_o.bgColor = d_c;
+		}
+	}
+	if(dd.scalable) d_o.scalable = d_o.resizable^1;
+	else if(dd.resizable) d_o.resizable = d_o.scalable^1;
+	d_o.setZ(d_o.defz);
+	d_o.cursor = d_o.cursor || dd.cursor || 'auto';
+	d_o._setCrs(d_o.nodrag? 'auto' : d_o.cursor);
+	d_o.diaphan = d_o.diaphan || dd.diaphan || 0;
+	d_o.opacity = 1.0;
+	d_o.visible = true;
+};
+dd.initz = function()
+{
+	if(!(dd && (dd.n4 || dd.n6 || dd.ie || dd.op || dd.w3c))) return;
+	else if(dd.n6 || dd.ie || dd.op || dd.w3c) dd.recalc(1);
+	var d_drag = (document.onmousemove == DRAG),
+	d_resize = (document.onmousemove == RESIZE);
+	if(dd.loadFunc) dd.loadFunc();
+	if(d_drag) dd.setMovHdl(DRAG);
+	else if(d_resize) dd.setMovHdl(RESIZE);
+	if(d_drag || d_resize) dd.setUpHdl(DROP);
+	dd.setDwnHdl(PICK);
+};
+dd.finlz = function()
+{
+	if(dd.ie && dd.elements)
+	{
+		dd.noRecalc = true;
+		for(var d_i = dd.elements.length; d_i;)
+			dd.elements[--d_i].del();
+		dd.noRecalc = false;
+	}
+	if(dd.uloadFunc) dd.uloadFunc();
+};
+dd.setCe = function(d_e, d_fnc)
+{
+	d_fnc? document.captureEvents(d_e) : document.releaseEvents(d_e);
+};
+dd.setDwnHdl = function(d_x)
+{
+	if(document.onmousedown != d_x)
+	{
+		dd.downFunc = document.onmousedown;
+		document.onmousedown = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEDOWN, d_x);
+	}
+};
+dd.setMovHdl = function(d_x)
+{
+	if(document.onmousemove != d_x)
+	{
+		dd.moveFunc = document.onmousemove;
+		document.onmousemove = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEMOVE, d_x);
+	}
+};
+dd.setUpHdl = function(d_x)
+{
+	if(document.onmouseup != d_x)
+	{
+		dd.upFunc = document.onmouseup;
+		document.onmouseup = d_x;
+		if(dd.ce) dd.setCe(Event.MOUSEUP, d_x);
+	}
+};
+dd.evt = function(d_e)
+{
+	this.but = (this.e = d_e || window.event).which || this.e.button || 0;
+	this.button = (this.e.type == 'mousedown')? this.but
+		: (dd.e && dd.e.button)? dd.e.button
+		: 0;
+	this.src = this.e.target || this.e.srcElement || null;
+	this.src.tag = ("" + (this.src.tagName || this.src)).toLowerCase();
+	this.x = dd.Int(this.e.pageX || this.e.clientX || 0);
+	this.y = dd.Int(this.e.pageY || this.e.clientY || 0);
+	if(dd.ie)
+	{
+		this.x += dd.getScrollX() - (dd.ie && !dd.iemac)*1;
+		this.y += dd.getScrollY() - (dd.ie && !dd.iemac)*1;
+	}
+	this.modifKey = this.e.modifiers? this.e.modifiers&Event.SHIFT_MASK : (this.e.shiftKey || false);
+};
+dd.getEventTarget = function(d_e, d_s, d_n)
+{
+	d_e = d_e || window.event;
+	if(d_e && (d_s = d_e.target || d_e.srcElement || null) != null)
+	{
+		if(null != (d_n = d_s.id || d_s.name || null))
+		{
+			if(d_n.indexOf("dIi15vNI1m6G") == d_n.length-12)
+				return dd.elements[d_n.substring(0, d_n.length-12)] || null;
+			if(d_n.indexOf("dIi15v") == d_n.length-6)
+				return dd.elements[d_n.substring(0, d_n.length-6)] || null;
+			return dd.elements[d_n] || null;
+		}
+	}
+	return null;
+};
+dd.recalc = function(d_x)
+{
+	if(dd.noRecalc) return;
+	for(var d_o, d_i = dd.elements.length; d_i;)
+	{
+		if(!(d_o = dd.elements[--d_i]).is_image && d_o.div)
+		{
+			dd.getWH(d_o);
+			if(d_o.div.pos_rel)
+			{
+				dd.getPageXY(d_o.div);
+				var d_dx = dd.x - d_o.x, d_dy = dd.y - d_o.y;
+				d_o.defx += d_dx;
+				d_o.x += d_dx;
+				d_o.defy += d_dy;
+				d_o.y += d_dy;
+				for(var d_p, d_j = d_o.children.length; d_j;)
+				{
+					if(!(d_p = d_o.children[--d_j]).detached && (d_o != d_p.defparent || !(d_p.is_image && dd.getImg(d_p, d_p.oimg.name, 1))))
+					{
+						d_p.defx += d_dx;
+						d_p.defy += d_dy;
+						d_p.moveBy(d_dx, d_dy);
+					}
+				}
+			}
+		}
+		else if(d_o.is_image && !dd.n4)
+		{
+			if(dd.n6 && d_x && !d_o.defw) d_o.resizeTo(d_o.defw = dd.getImgW(d_o.oimg), d_o.defh = dd.getImgH(d_o.oimg));
+			var d_defx = d_o.defx, d_defy = d_o.defy;
+			if(!(d_o.parent && d_o.parent != d_o.defparent) && (d_x || !d_o.detached || d_o.horizontal || d_o.vertical) && dd.getImg(d_o, d_o.oimg.name, 1))
+				d_o.moveBy(d_o.defx-d_defx, d_o.defy-d_defy);
+		}
+	}
+};
+function WINSZ(d_x)
+{
+	if(d_x)
+	{
+		if(dd.n4)
+		{
+			dd.iW = innerWidth;
+			dd.iH = innerHeight;
+		}
+		window.onresize = new Function('WINSZ();');
+	}
+	else if(dd.n4 && (innerWidth != dd.iW || innerHeight != dd.iH)) location.reload();
+	else if(!dd.n4) setTimeout('dd.recalc()', 0xa);
+}
+WINSZ(1);
+
+function DDObj(d_o, d_i)
+{
+	this.id = d_o;
+	this.cmd = '';
+	this.cpy_n = dd.getCmdVal(this, COPY);
+	this.maxoffb = dd.getCmdVal(this, MAXOFFBOTTOM, 0, 1);
+	this.maxoffl = dd.getCmdVal(this, MAXOFFLEFT, 0, 1);
+	this.maxoffr = dd.getCmdVal(this, MAXOFFRIGHT, 0, 1);
+	this.maxofft = dd.getCmdVal(this, MAXOFFTOP, 0, 1);
+	var d_j = dd_cursors.length; while(d_j--)
+		if(dd.getCmd(this, dd_cursors[d_j], 1)) this.cursor = dd_cursors[d_j].substring(2);
+	this.clone = dd.getCmd(this, CLONE, 1);
+	this.detach = dd.getCmd(this, DETACH_CHILDREN);
+	this.scalable = dd.getCmd(this, SCALABLE, 1);
+	this.horizontal = dd.getCmd(this, HORIZONTAL);
+	this.noalt = dd.getCmd(this, NO_ALT, 1);
+	this.nodrag = dd.getCmd(this, NO_DRAG);
+	this.scroll = dd.getCmd(this, SCROLL, 1);
+	this.resizable = dd.getCmd(this, RESIZABLE, 1);
+	this.re_z = dd.getCmd(this, RESET_Z, 1);
+	this.diaphan = dd.getCmd(this, TRANSPARENT, 1);
+	this.vertical = dd.getCmd(this, VERTICAL);
+	this.maxw = dd.getCmdVal(this, MAXWIDTH, 1, 1);
+	this.minw = Math.abs(dd.getCmdVal(this, MINWIDTH, 1, 1));
+	this.maxh = dd.getCmdVal(this, MAXHEIGHT, 1, 1);
+	this.minh = Math.abs(dd.getCmdVal(this, MINHEIGHT, 1, 1));
+	this.pickFunc = this.dragFunc = this.resizeFunc = this.dropFunc = null;
+
+	this.name = this.id + (d_i || '');
+	this.oimg = dd.getImg(this, this.id, 1);
+	this.is_image = !!this.oimg;
+	this.copies = new Array();
+	this.children = new Array();
+	this.parent = this.original = null;
+	if(this.oimg)
+	{
+		this.id = this.name + "dIi15v";
+		this.w = dd.getImgW(this.oimg);
+		this.h = dd.getImgH(this.oimg);
+		this.dw = this.dh = 0;
+		this.defz = dd.Int(dd.getCssProp(this.oimg, 'z-index','zIndex','zIndex')) || 1;
+		this.defsrc = this.src = this.oimg.src;
+		this.htm = '<img name="' + this.id + 'NI1m6G"'+
+			' src="' + this.oimg.src + '" '+
+			'width="' + this.w + '" height="' + this.h + '">';
+		this.t_htm = '<div id="' + this.id +
+			'" style="position:absolute;'+
+			'left:' + (this.cssx = this.x = this.defx) + 'px;'+
+			'top:' + (this.cssy = this.y = this.defy) + 'px;'+
+			'width:' + this.w + 'px;'+
+			'height:' + this.h + 'px;">'+
+			this.htm + '</div>';
+	}
+	else
+	{
+		if(!!(this.div = dd.getDiv(this.id)) && typeof this.div.style != dd_u) this.css = this.div.style;
+		dd.getWH(this);
+		if(this.div)
+		{
+			this.div.ddObj = this;
+			this.div.pos_rel = dd.getCssProp(this.div, 'position','position','position') == "relative";
+		}
+		dd.getPageXY(this.div);
+		this.defx = this.x = dd.x;
+		this.defy = this.y = dd.y;
+		dd.getCssXY(this);
+		this.defz = dd.Int(dd.getCssProp(this.div, 'z-index','zIndex','zIndex'));
+	}
+	this.defw = this.w || 0;
+	this.defh = this.h || 0;
+}
+DDObj.prototype.setPickFunc = function(d_x)
+{
+	this.pickFunc = d_x;
+};
+DDObj.prototype.setDragFunc = function(d_x)
+{
+	this.dragFunc = d_x;
+};
+DDObj.prototype.setResizeFunc = function(d_x)
+{
+	this.resizeFunc = d_x;
+};
+DDObj.prototype.setDropFunc = function(d_x)
+{
+	this.dropFunc = d_x;
+};
+DDObj.prototype.moveBy = function(d_x, d_y, d_kds, d_o)
+{
+	if(!this.div) return;
+	this.x += (d_x = dd.Int(d_x));
+	this.y += (d_y = dd.Int(d_y));
+	if(!d_kds || this.is_image || this.parent != this.defparent)
+	{
+		(d_o = this.css || this.div).left = (this.cssx += d_x) + dd.px;
+		d_o.top = (this.cssy += d_y) + dd.px;
+	}
+	for(var d_i = this.children.length; d_i;)
+	{
+		if(!(d_o = this.children[--d_i]).detached) d_o.moveBy(d_x, d_y, 1);
+		d_o.defx += d_x;
+		d_o.defy += d_y;
+	}
+};
+
+DDObj.prototype.moveTo = function(d_x, d_y)
+{
+	this.moveBy(dd.Int(d_x)-this.x, dd.Int(d_y)-this.y);
+};
+DDObj.prototype.hide = function(d_m, d_o, d_p)
+{
+	if(this.div && this.visible)
+	{
+		d_p = this.css || this.div;
+		if(d_m && !dd.n4)
+		{
+			this.display = dd.getCssProp(this.div, "display", "display", "display");
+			if(this.oimg)
+			{
+				this.oimg.display = dd.getCssProp(this.oimg, "display", "display", "display");
+				this.oimg.style.display = "none";
+			}
+			d_p.display = "none";
+			dd.recalc();
+		}
+		else d_p.visibility = "hidden";
+	}
+	this.visible = false;
+	for(var d_i = this.children.length; d_i;)
+		if(!(d_o = this.children[--d_i]).detached) d_o.hide(d_m);
+};
+DDObj.prototype.show = function(d_o, d_p)
+{
+	if(this.div)
+	{
+		d_p = this.css || this.div;
+		if(d_p.display && d_p.display == "none")
+		{
+			d_p.display = this.display || "block";
+			if(this.oimg) this.oimg.style.display = this.oimg.display || "inline";
+			dd.recalc();
+		}
+		else d_p.visibility = "visible";
+	}
+	this.visible = true;
+	for(var d_i = this.children.length; d_i;)
+		if(!(d_o = this.children[--d_i]).detached) d_o.show();
+};
+DDObj.prototype.resizeTo = function(d_w, d_h, d_o)
+{
+	if(!this.div) return;
+	d_w = (this.w = dd.Int(d_w))-this.dw;
+	d_h = (this.h = dd.Int(d_h))-this.dh;
+	if(dd.n4)
+	{
+		this.div.resizeTo(d_w, d_h);
+		if(this.is_image)
+		{
+			this.write('<img src="' + this.src + '" width="' + d_w + '" height="' + d_h + '">');
+			(this.nimg = this.div.document.images[0]).src = this.src;
+		}
+	}
+	else if(typeof this.css.pixelWidth != dd_u)
+	{
+		this.css.pixelWidth = d_w;
+		this.css.pixelHeight = d_h;
+		if(this.is_image)
+		{
+			(d_o = this.nimg.style).pixelWidth = d_w;
+			d_o.pixelHeight = d_h;
+		}
+	}
+	else
+	{
+		this.css.width = d_w + dd.px;
+		this.css.height = d_h + dd.px;
+		if(this.is_image)
+		{
+			(d_o = this.nimg).width = d_w;
+			d_o.height = d_h;
+			if(!d_o.complete) d_o.src = this.src;
+		}
+	}
+};
+DDObj.prototype.resizeBy = function(d_dw, d_dh)
+{
+	this.resizeTo(this.w+dd.Int(d_dw), this.h+dd.Int(d_dh));
+};
+DDObj.prototype.swapImage = function(d_x, d_cp)
+{
+	if(!this.nimg) return;
+	this.nimg.src = d_x;
+	this.src = this.nimg.src;
+	if(d_cp)
+	{
+		for(var d_i = this.copies.length; d_i;)
+		{--d_i;
+			this.copies[d_i].src = this.copies[d_i].nimg.src = this.nimg.src;
+		}
+	}
+};
+DDObj.prototype.setBgColor = function(d_x)
+{
+	if(dd.n4 && this.div) this.div.bgColor = d_x;
+	else if(this.css) this.css.background = d_x;
+	this.bgColor = d_x;
+};
+DDObj.prototype.write = function(d_x, d_o)
+{
+	this.text = d_x;
+	if(!this.div) return;
+	if(dd.n4)
+	{
+		(d_o = this.div.document).open();
+		d_o.write(d_x);
+		d_o.close();
+		dd.getWH(this);
+	}
+	else
+	{
+		this.css.height = 'auto';
+		this.div.innerHTML = d_x;
+		if(!dd.ie4) dd.recalc();
+		if(dd.ie4 || dd.n6) setTimeout('dd.recalc();', 0); // n6.0: recalc twice
+	}
+};
+DDObj.prototype.copy = function(d_n, d_p, d_b)
+{
+	if(!this.oimg) return;
+	d_b = (dd.ie && document.all.tags('body'))? document.all.tags('body')[0] : document.getElementsByTagName? (document.getElementsByTagName('body')[0] || dd.db) : dd.db;
+	for(d_n = d_n || 1; d_n > 0; --d_n)
+	{
+		var d_l = this.copies.length,
+		d_o = new DDObj(this.name+this.cmd, d_l+1);
+		if(dd.n4)
+		{
+			d_o.id = (d_p = new Layer(d_o.w)).name;
+			d_p.clip.height = d_o.h;
+			d_p.visibility = 'show';
+			(d_p = d_p.document).open();
+			d_p.write(d_o.htm);
+			d_p.close();
+		}
+		else if(d_b && d_b.insertAdjacentHTML) d_b.insertAdjacentHTML("AfterBegin", d_o.t_htm);
+		else if(document.createElement && d_b && d_b.appendChild)
+		{
+			d_b.appendChild(d_p = document.createElement("dIi15v"));
+			d_p.innerHTML = d_o.htm;
+			d_p.id = d_o.id;
+			d_p.style.position = 'absolute';
+			d_p.style.width = d_o.w + 'px';
+			d_p.style.height = d_o.h + 'px';
+		}
+		else if(d_b && d_b.innerHTML) d_b.innerHTML += d_o.t_htm;
+		d_o.defz = this.defz+1+d_l;
+		dd.addProps(d_o);
+		d_o.original = this;
+		dd.addElt(d_o, this);
+		if(this.parent)
+		{
+			this.parent.addChild(d_o, this.detached);
+			d_o.defparent = this.defparent;
+		}
+		d_o.moveTo(d_o.defx = this.defx, d_o.defy = this.defy);
+		if(dd.n4) d_o.defsrc = d_o.src = this.defsrc;
+		d_o.swapImage(this.src);
+	}
+};
+DDObj.prototype.addChild = function(d_kd, detach, defp)
+{
+	if(typeof d_kd != "object") d_kd = dd.elements[d_kd];
+	if(d_kd.parent && d_kd.parent == this || d_kd == this || !d_kd.is_image && d_kd.defparent && !defp) return;
+
+	this.children[this.children.length] = this.children[d_kd.name] = d_kd;
+	d_kd.detached = detach || 0;
+	if(defp) d_kd.defparent = this;
+	else if(this == d_kd.defparent && d_kd.is_image) dd.getImg(this, d_kd.oimg.name, 1);
+	if(!d_kd.defparent || this != d_kd.defparent)
+	{
+		d_kd.defx = d_kd.x;
+		d_kd.defy = d_kd.y;
+	}
+	if(!detach)
+	{
+		d_kd.defz = d_kd.defz+this.defz-(d_kd.parent? d_kd.parent.defz : 0)+(!d_kd.is_image*1);
+		d_kd.setZ(d_kd.z+this.z-(d_kd.parent? d_kd.parent.z : 0)+(!d_kd.is_image*1), 1);
+	}
+	if(d_kd.parent) d_kd.parent.removeChild(d_kd, 1);
+	d_kd.parent = this;
+};
+DDObj.prototype.removeChild = function(d_kd, d_newp)
+{
+	if(typeof d_kd != "object") d_kd = this.children[d_kd];
+	var d_oc = this.children, d_nc = new Array();
+	for(var d_i = 0; d_i < d_oc.length; d_i++)
+		if(d_oc[d_i] != d_kd) d_nc[d_nc.length] = d_oc[d_i];
+	this.children = d_nc;
+	d_kd.parent = null;
+	if(!d_newp)
+	{
+		d_kd.detached = d_kd.defp = 0;
+		if(d_kd.is_image) dd.getImg(d_kd, d_kd.oimg.name, 1);
+	}
+};
+DDObj.prototype.attachChild = function(d_kd)
+{
+	(d_kd = (typeof d_kd != "object")? this.children[d_kd]: d_kd).detached = 0;
+	d_kd.setZ(d_kd.defz + this.z-this.defz, 1);
+};
+DDObj.prototype.detachChild = function(d_kd)
+{
+	(d_kd = (typeof d_kd != "object")? this.children[d_kd]: d_kd).detached = 1;
+};
+DDObj.prototype.setZ = function(d_x, d_kds, d_o)
+{
+	if(d_kds)
+	{
+		for(var d_dz = d_x-this.z, d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o.setZ(d_o.z+d_dz, 1);
+	}
+	dd.z = Math.max(dd.z, this.z = this.div? ((this.css || this.div).zIndex = d_x) : 0);
+};
+DDObj.prototype.maximizeZ = function()
+{
+	this.setZ(dd.z+1, 1);
+};
+DDObj.prototype._resetZ = function(d_o)
+{
+	if(this.re_z || dd.re_z)
+	{
+		this.setZ(this.defz);
+		for(var d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o.setZ(d_o.defz);
+	}
+};
+DDObj.prototype.setOpacity = function(d_x)
+{
+	this.opacity = d_x;
+	this._setOpaRel(1.0, 1);
+};
+DDObj.prototype._setOpaRel = function(d_x, d_kd, d_y, d_o)
+{
+	if(this.css && (this.diaphan || d_kd))
+	{
+		d_y = this.opacity*d_x;
+		if(typeof this.css.MozOpacity != dd_u) this.css.MozOpacity = d_y;
+		else if (typeof this.css.opacity != dd_u) this.css.opacity = d_y;
+		else if(typeof this.css.filter != dd_u)
+			this.css.filter = "Alpha(opacity="+parseInt(100*d_y)+")";
+		for(var d_i = this.children.length; d_i;)
+			if(!(d_o = this.children[--d_i]).detached) d_o._setOpaRel(d_x, 1);
+	}
+};
+DDObj.prototype.setCursor = function(d_x)
+{
+	this._setCrs(this.cursor = (d_x.indexOf('c:')+1)? d_x.substring(2) : d_x);
+};
+DDObj.prototype._setCrs = function(d_x)
+{
+	if(this.css) this.css.cursor = ((!dd.ie || dd.iemac) && d_x == 'hand')? 'pointer' : d_x;
+};
+DDObj.prototype.setDraggable = function(d_x)
+{
+	this.nodrag = !d_x*1;
+	this._setCrs(d_x? this.cursor : 'auto');
+};
+DDObj.prototype.setResizable = function(d_x)
+{
+	this.resizable = d_x*1;
+	if(d_x) this.scalable = 0;
+};
+DDObj.prototype.setScalable = function(d_x)
+{
+	this.scalable = d_x*1;
+	if(d_x) this.resizable = 0;
+};
+DDObj.prototype.setHorizontal = function(d_x)
+{
+	this.horizontal = d_x*1;
+};
+DDObj.prototype.setVertical = function(d_x)
+{
+	this.vertical = d_x*1;
+};
+DDObj.prototype.getEltBelow = function(d_ret, d_x, d_y)
+{
+	var d_o, d_cmp = -1, d_i = dd.elements.length; while(d_i--)
+	{
+		d_o = dd.elements[d_i];
+		d_x = d_o.x-this.w/2;
+		d_y = d_o.y-this.h/2;
+		if(d_o.visible && d_o.z < this.z && this.x >= d_x && this.x <= d_x+d_o.w && this.y >= d_y && this.y <= d_y+d_o.h)
+		{
+			if(d_o.z > d_cmp)
+			{
+				d_cmp = d_o.z;
+				d_ret = d_o;
+			}
+		}
+	}
+	return d_ret;
+};
+DDObj.prototype.del = function(d_os, d_o)
+{
+	var d_i, d_l;
+	if(this.parent && this.parent.removeChild) this.parent.removeChild(this);
+	if(this.original)
+	{
+		this.hide();
+		if(this.original.copies)
+		{
+			d_os = new Array();
+			for(d_l = this.original.copies.length, d_i = 0; d_i < d_l; d_i++)
+				if((d_o = this.original.copies[d_i]) != this) d_os[d_o.name] = d_os[d_os.length] = d_o;
+			this.original.copies = d_os;
+		}
+	}
+	else if(this.is_image)
+	{
+		this.hide();
+		if(this.oimg)
+		{
+		  if(dd.n4) this.oimg.src = this.defsrc;
+		  else this.oimg.style.visibility = 'visible';
+		}
+	}
+	else if(this.moveTo)
+	{
+		if(this.css) this.css.cursor = 'default';
+		this.moveTo(this.defx, this.defy);
+		this.resizeTo(this.defw, this.defh);
+	}
+	d_os = new Array();
+	for(d_l = dd.elements.length, d_i = 0; d_i < d_l; d_i++)
+	{
+		if((d_o = dd.elements[d_i]) != this) d_os[d_o.name] = d_os[d_o.index = d_os.length] = d_o;
+		else d_o._free();
+	}
+	dd.elements = d_os;
+	if(!dd.n4) dd.recalc();
+};
+DDObj.prototype._free = function()
+{
+	for(var d_i in this)
+		this[d_i] = null;
+	dd.elements[this.name] = null;
+};
+dd.n4RectVis = function(vis)
+{
+	for(var d_i = 4; d_i;)
+	{--d_i;
+		dd.rectI[d_i].visibility = dd.rectA[d_i].visibility = vis? 'show' : 'hide';
+		if(vis) dd.rectI[d_i].zIndex = dd.rectA[d_i].zIndex = dd.z+2;
+	}
+};
+dd.n4RectPos = function(d_o, d_x, d_y, d_w, d_h)
+{
+	d_o.x = d_x;
+	d_o.y = d_y;
+	d_o.clip.width = d_w;
+	d_o.clip.height = d_h;
+};
+// NN4: Draw img sizing rect
+dd.n4Rect = function(d_w, d_h)
+{
+	var d_i;
+	if(!dd.rectI)
+	{
+		dd.rectI = new Array();
+		dd.rectA = new Array();
+	}
+	if(!dd.rectI[0])
+	{
+		for(d_i = 4; d_i;)
+		{
+			(dd.rectI[--d_i] = new Layer(1)).bgColor = '#000000';
+			(dd.rectA[d_i] = new Layer(1)).bgColor = '#ffffff';
+		}
+	}
+	if(!dd.rectI[0].visibility || dd.rectI[0].visibility == 'hide') dd.n4RectVis(1);
+	dd.obj.w = d_w;
+	dd.obj.h = d_h;
+	for(d_i = 4; d_i;)
+	{--d_i;
+		dd.n4RectPos(dd.rectI[d_i], dd.obj.x + (!(d_i-1)? (dd.obj.w-1) : 0), dd.obj.y + (!(d_i-2)? (dd.obj.h-1) : 0), d_i&1 || dd.obj.w, !(d_i&1) || dd.obj.h);
+		dd.n4RectPos(dd.rectA[d_i], !(d_i-1)? dd.rectI[1].x+1 : (dd.obj.x-1), !(d_i-2)? dd.rectI[2].y+1 : (dd.obj.y-1), d_i&1 || dd.obj.w+2, !(d_i&1) || dd.obj.h+2);
+	}
+};
+dd.reszTo = function(d_w, d_h)
+{
+	if(dd.n4 && dd.obj.is_image) dd.n4Rect(d_w, d_h);
+	else dd.obj.resizeTo(d_w, d_h);
+};
+dd.embedVis = function(d_vis)
+{
+	var d_o = new Array('iframe', 'applet', 'embed', 'object');
+	for(var d_i = d_o.length; d_i;)
+	{--d_i;
+		var d_p = dd.ie? document.all.tags(d_o[d_i]) : document.getElementsByTagName? document.getElementsByTagName(d_o[d_i]) : null;
+		if(d_p)
+		{
+			for(var d_j = d_p.length; d_j;)
+			{
+				var d_q = d_p[--d_j];
+				while(d_q.offsetParent || d_q.parentNode)
+				{
+					if((d_q = d_q.parentNode || d_q.offsetParent || null) == dd.obj.div)
+					{
+						d_p[d_j].style.visibility = d_vis;
+						break;
+					}
+				}
+			}
+		}
+	}
+};
+
+dd.maxOffX = function(d_x, d_y)
+{
+	return(
+		(dd.obj.maxoffl+1 && (d_y = dd.obj.defx-dd.obj.maxoffl)-d_x > 0
+		|| dd.obj.maxoffr+1 && (d_y = dd.obj.defx+dd.obj.maxoffr)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.maxOffY = function(d_x, d_y)
+{
+	return(
+		(dd.obj.maxofft+1 && (d_y = dd.obj.defy-dd.obj.maxofft)-d_x > 0
+		|| dd.obj.maxoffb+1 && (d_y = dd.obj.defy+dd.obj.maxoffb)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.inWndW = function(d_x, d_y)
+{
+	var d_wx = dd.getScrollX(),
+	d_ww = dd.getWndW();
+	return(
+		((d_y = d_wx+2)-d_x > 0) || ((d_y = d_wx+d_ww+dd.obj.w-2)-d_x < 0)? d_y
+		: d_x
+	);
+};
+dd.inWndH = function(d_x, d_y)
+{
+	var d_wy = dd.getScrollY(),
+	d_wh = dd.getWndH();
+	return(
+		((d_y = d_wy+2)-d_x > 0) || ((d_y = d_wy+d_wh+dd.obj.h-2)-d_x < 0)? d_y
+		: d_x
+	);
+};
+// These two funcs limit the size of element when mouseresized.
+// Implemented 22.5.2003 by Gregor Ltolf, modified by Walter Zorn
+dd.limW = function(d_w)
+{
+	return(
+		(dd.obj.minw-d_w > 0)? dd.obj.minw
+		: (dd.obj.maxw > 0 && dd.obj.maxw-d_w < 0)? dd.obj.maxw
+		: d_w
+	);
+};
+dd.limH = function(d_h)
+{
+	return(
+		(dd.obj.minh-d_h > 0)? dd.obj.minh
+		: (dd.obj.maxh > 0 && dd.obj.maxh-d_h < 0)? dd.obj.maxh
+		: d_h
+	);
+};
+// Optional autoscroll-page functionality. Courtesy Cedric Savarese.
+// Modified by Walter Zorn.
+function DDScroll()
+{
+	if(!dd.obj || !dd.obj.scroll && !dd.scroll || dd.ie4 || dd.whratio)
+	{
+		dd.scrx = dd.scry = 0;
+		return;
+	}
+	var d_bnd = 0x1c,
+	d_wx = dd.getScrollX(), d_wy = dd.getScrollY();
+	if(dd.msmoved)
+	{
+		var d_ww = dd.getWndW(), d_wh = dd.getWndH(), d_y;
+		dd.scrx = ((d_y = dd.e.x-d_ww-d_wx+d_bnd) > 0)? (d_y>>=2)*d_y
+			: ((d_y = d_wx+d_bnd-dd.e.x) > 0)? -(d_y>>=2)*d_y
+			: 0;
+		dd.scry = ((d_y = dd.e.y-d_wh-d_wy+d_bnd) > 0)? (d_y>>=2)*d_y
+			: ((d_y = d_wy+d_bnd-dd.e.y) > 0)? -(d_y>>=2)*d_y
+			: 0;
+	}
+	if(dd.scrx || dd.scry)
+	{
+		window.scrollTo(
+			d_wx + (dd.scrx = dd.obj.is_resized? dd.limW(dd.obj.w+dd.scrx)-dd.obj.w : dd.obj.vertical? 0 : (dd.maxOffX(dd.obj.x+dd.scrx)-dd.obj.x)),
+			d_wy + (dd.scry = dd.obj.is_resized? dd.limH(dd.obj.h+dd.scry)-dd.obj.h : dd.obj.horizontal? 0 : (dd.maxOffY(dd.obj.y+dd.scry)-dd.obj.y))
+		);
+		dd.obj.is_dragged? dd.obj.moveTo(dd.obj.x+dd.getScrollX()-d_wx, dd.obj.y+dd.getScrollY()-d_wy)
+			: dd.reszTo(dd.obj.w+dd.getScrollX()-d_wx, dd.obj.h+dd.getScrollY()-d_wy);
+	}
+	dd.msmoved = 0;
+	window.setTimeout('DDScroll()', 0x33);
+}
+function PICK(d_ev)
+{
+	dd.e = new dd.evt(d_ev);
+	if(dd.e.x >= dd.getWndW()+dd.getScrollX() || dd.e.y >= dd.getWndH()+dd.getScrollY()) return true; // on scrollbar
+	for(var d_o, d_t, d_cmp = -1, d_i = dd.elements.length; d_i;)
+	{
+		d_o = dd.elements[--d_i];
+		if(dd.n4 && dd.e.but > 1 && dd.e.src == d_o.oimg && !d_o.clone) return false;
+		if(d_o.visible && dd.e.but <= 1 && dd.e.x >= d_o.x && dd.e.x <= d_o.x+d_o.w && dd.e.y >= d_o.y && dd.e.y <= d_o.y+d_o.h)
+		{
+			if(d_o.z > d_cmp && (d_t = dd.e.src.tag).indexOf('inpu') < 0 && d_t.indexOf('texta') < 0 && d_t.indexOf('sele') < 0 && d_t.indexOf('opti') < 0 && d_t.indexOf('scrol') < 0)
+			{
+				d_cmp = d_o.z;
+				dd.obj = d_o;
+			}
+		}
+	}
+	if(dd.obj)
+	{
+		if(dd.obj.nodrag) dd.obj = null;
+		else
+		{
+			dd.e.e.cancelBubble = true;
+			var d_rsz = dd.e.modifKey && (dd.obj.resizable || dd.obj.scalable);
+			if(dd.op)
+			{
+				(d_o = document.getElementById('OpBlUr')).style.pixelLeft = dd.e.x;
+				d_o.style.pixelTop = dd.e.y;
+				(d_o = d_o.children[0].children[0]).focus();
+				d_o.blur();
+			}
+			else if(dd.ie && !dd.ie4)
+			{
+				if(document.selection && document.selection.empty) document.selection.empty();
+				dd.db.onselectstart = function()
+				{
+					event.returnValue = false;
+				};
+			}
+			if(d_rsz)
+			{
+				dd.obj._setCrs('se-resize');
+				dd.obj.is_resized = 1;
+				dd.whratio = dd.obj.scalable? dd.obj.defw/dd.obj.defh : 0;
+				if(dd.ie)
+				{
+					if(dd.ie4)
+					{
+						window.dd_x = dd.getScrollX();
+						window.dd_y = dd.getScrollY();
+					}
+					setTimeout(
+						'if(dd.obj && document.selection && document.selection.empty)'+
+						'{'+
+							'document.selection.empty();'+
+							'if(dd.ie4) window.scrollTo(window.dd_x, window.dd_y);'+
+						'}'
+					,0);
+				}
+				dd.setMovHdl(RESIZE);
+				dd.reszTo(dd.obj.w, dd.obj.h);
+			}
+			else
+			{
+				dd.obj.is_dragged = 1;
+				dd.setMovHdl(DRAG);
+			}
+			dd.setUpHdl(DROP);
+			dd.embedVis('hidden');
+			dd.obj._setOpaRel(0.7);
+			dd.obj.maximizeZ();
+			dd.ofx = dd.obj.x+dd.obj.w-dd.e.x;
+			dd.ofy = dd.obj.y+dd.obj.h-dd.e.y;
+			if(window.my_PickFunc) my_PickFunc();
+			if(dd.obj.pickFunc) dd.obj.pickFunc();
+			DDScroll();
+			return !(
+				dd.obj.is_resized
+				|| dd.n4 && dd.obj.is_image
+				|| dd.n6 || dd.w3c
+			);
+		}
+	}
+	if(dd.downFunc) return dd.downFunc(d_ev);
+	return true;
+}
+function DRAG(d_ev)
+{
+	if(!dd.obj || !dd.obj.visible) return true;
+	if(dd.ie4 || dd.w3c || dd.n6 || dd.obj.children.length > 0xf)
+	{
+		if(dd.wait) return false;
+		dd.wait = 1;
+		setTimeout('dd.wait = 0;', dd.tWait);
+	}
+	dd.e = new dd.evt(d_ev);
+	if(dd.ie && !dd.e.but)
+	{
+		DROP(d_ev);
+		return true;
+	}
+	dd.msmoved = 1;
+	dd.obj.moveTo(
+		dd.obj.vertical? dd.obj.x : dd.maxOffX(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.w),
+		dd.obj.horizontal? dd.obj.y : dd.maxOffY(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.h)
+	);
+
+	if(window.my_DragFunc) my_DragFunc();
+	if(dd.obj.dragFunc) dd.obj.dragFunc();
+	if(dd.moveFunc) return dd.moveFunc(d_ev);
+	return false;
+}
+function RESIZE(d_ev)
+{
+	if(!dd.obj || !dd.obj.visible) return true;
+	if(dd.wait) return false;
+	dd.wait = 1;
+	setTimeout('dd.wait = 0;', dd.tWait);
+	dd.e = new dd.evt(d_ev);
+	if(dd.ie && !dd.e.but)
+	{
+		DROP(d_ev);
+		return true;
+	}
+	dd.msmoved = 1;
+	var d_w = dd.limW(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.x), d_h;
+	if(!dd.whratio) d_h = dd.limH(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.y);
+	else
+	{
+		d_h = dd.limH(dd.inWndH(Math.round(d_w/dd.whratio)+dd.obj.y)-dd.obj.y);
+		d_w = Math.round(d_h*dd.whratio);
+	}
+	dd.reszTo(d_w, d_h);
+	if(window.my_ResizeFunc) my_ResizeFunc();
+	if(dd.obj.resizeFunc) dd.obj.resizeFunc();
+	if(dd.moveFunc) return dd.moveFunc(d_ev);
+	return false;
+}
+function DROP(d_ev)
+{
+	if(dd.obj)
+	{
+		if(dd.obj.is_dragged)
+		{
+			if(!dd.obj.is_image) dd.getWH(dd.obj);
+		}
+		else if(dd.n4)
+		{
+			if(dd.obj.is_image)
+			{
+				dd.n4RectVis(0);
+				dd.obj.resizeTo(dd.obj.w, dd.obj.h);
+			}
+		}
+		if(!dd.n4 || !dd.obj.is_image) dd.recalc();
+		dd.setMovHdl(dd.moveFunc);
+		dd.setUpHdl(dd.upFunc);
+		if(dd.db) dd.db.onselectstart = null;
+		dd.obj._setOpaRel(1.0);
+		dd.obj._setCrs(dd.obj.cursor);
+		dd.embedVis('visible');
+		dd.obj._resetZ();
+		dd.e = new dd.evt(d_ev);
+		if(window.my_DropFunc) my_DropFunc();
+		if(dd.obj.dropFunc) dd.obj.dropFunc();
+		dd.msmoved = dd.obj.is_dragged = dd.obj.is_resized = dd.whratio = 0;
+		dd.obj = null;
+	}
+	dd.setDwnHdl(PICK);
+}
+function SET_DHTML()
+{
+	var d_a = arguments, d_ai, d_htm = '', d_o, d_i = d_a.length;
+	while(d_i)
+	{
+		if(!(d_ai = d_a[--d_i]).indexOf('c:')) dd.cursor = d_ai.substring(2);
+		else if(d_ai == NO_ALT) dd.noalt = 1;
+		else if(d_ai == SCROLL) dd.scroll = 1;
+		else if(d_ai == RESET_Z) dd.re_z = 1;
+		else if(d_ai == RESIZABLE) dd.resizable = 1;
+		else if(d_ai == SCALABLE) dd.scalable = 1;
+		else if(d_ai == TRANSPARENT) dd.diaphan = 1;
+		else
+		{
+			d_o = new DDObj(d_ai);
+			dd.addElt(d_o);
+			d_htm += d_o.t_htm || '';
+			if(d_o.oimg && d_o.cpy_n)
+			{
+				for(var d_l = d_o.cpy_n, d_j = 0; d_j < d_l;)
+				{
+					var d_p = new DDObj(d_o.name+d_o.cmd, ++d_j);
+					dd.addElt(d_p, d_o);
+					d_p.defz = d_o.defz+d_j;
+					d_p.original = d_o;
+					d_htm += d_p.t_htm;
+				}
+			}
+		}
+	}
+	if (dd.n4 || dd.n6 || dd.ie || dd.op || dd.w3c) document.write(
+		(dd.n4? '<div style="position:absolute;"><\/div>\n'
+		: (dd.op && !dd.op6)? '<div id="OpBlUr" style="position:absolute;visibility:hidden;width:0px;height:0px;"><form><input type="text" style="width:0px;height:0px;"><\/form><\/div>'
+		: '') + d_htm
+	);
+	dd.z = 0x33;
+	for(d_i = dd.elements.length; d_i;)
+	{
+		dd.addProps(d_o = dd.elements[--d_i]);
+		if(d_o.is_image && !d_o.original && !d_o.clone)
+			dd.n4? d_o.oimg.src = spacer : d_o.oimg.style.visibility = 'hidden';
+	}
+	dd.mkWzDom();
+	if(window.onload) dd.loadFunc = window.onload;
+	if(window.onunload) dd.uloadFunc = window.onunload;
+	window.onload = dd.initz;
+	window.onunload = dd.finlz;
+	dd.setDwnHdl(PICK);
+}
+function ADD_DHTML() // layers only!
+{
+	var d_a = arguments, d_o, d_i = d_a.length; while(d_i)
+	{
+		d_o = new DDObj(d_a[--d_i]);
+		dd.addElt(d_o);
+		dd.addProps(d_o);
+	}
+	dd.mkWzDom();
+}
+
+
+
+
+////////////////////////////////////////////////////////////
+// If not needed, all code below this line may be removed
+
+
+// For backward compatibility
+dd.d = document;			// < v. 2.72
+var RESET_ZINDEX = RESET_Z; // < 3.44
+var KEYDOWN_RESIZE = RESIZABLE; // < 4.43
+var CURSOR_POINTER = CURSOR_HAND; // < 4.44
+var NO_SCROLL = '';		 // < v. 4.49
+
+
+
+
+////////////////////////////////////////////////////////////
+// FUNCTIONS FOR EXTENDED SCRIPTING
+// Use these for your own extensions,
+// or to call functions defined elsewhere
+
+
+
+/* my_PickFunc IS AUTOMATICALLY CALLED WHEN AN ITEM STARTS TO BE DRAGGED.
+The following objects/properties are accessible from here:
+
+- dd.e: current mouse event
+- dd.e.property: access to a property of the current mouse event.
+  Mostly requested properties:
+  - dd.e.x: document-related x co-ordinate
+  - dd.e.y: document-related y co-ord
+  - dd.e.src: target of mouse event (not identical with the drag drop object itself).
+  - dd.e.button: currently pressed mouse button. Left button: dd.e.button <= 1
+
+- dd.obj: reference to currently dragged item.
+- dd.obj.property: access to any property of that item.
+- dd.obj.method(): for example dd.obj.resizeTo() or dd.obj.swapImage() .
+  Mostly requested properties:
+	- dd.obj.name: image name or layer ID passed to SET_DHTML();
+	- dd.obj.x and dd.obj.y: co-ordinates;
+	- dd.obj.w and dd.obj.h: size;
+	- dd.obj.is_dragged: 1 while item is dragged, else 0;
+	- dd.obj.is_resized: 1 while item is resized, i.e. if <ctrl> or <shift> is pressed, else 0
+
+For more properties and details, visit the API documentation
+at http://www.walterzorn.com/dragdrop/api_e.htm (english) or
+http://www.walterzorn.de/dragdrop/api.htm (german)	*/
+function my_PickFunc()
+{
+}
+
+
+
+
+/* my_DragFunc IS CALLED WHILE AN ITEM IS DRAGGED
+See the description of my_PickFunc above for what's accessible from here. */
+function my_DragFunc()
+{
+	//window.status = 'dd.elements.' + dd.obj.name + '.x  = ' + dd.obj.x + '	 dd.elements.' + dd.obj.name + '.y = ' + dd.obj.y;
+}
+
+
+
+
+/* my_ResizeFunc IS CALLED WHILE AN ITEM IS RESIZED
+See the description of my_PickFunc above for what's accessible from here. */
+function my_ResizeFunc()
+{
+	//window.status = 'dd.elements.' + dd.obj.name + '.w  = ' + dd.obj.w + '	 dd.elements.' + dd.obj.name + '.h = ' + dd.obj.h;
+}
+
+
+
+
+/* THIS ONE IS CALLED ONCE AN ITEM IS DROPPED
+See the description of my_PickFunc for what's accessible from here.
+Here may be investigated, for example, what's the name (dd.obj.name)
+of the dropped item, and where (dd.obj.x, dd.obj.y) it has been dropped... */
+function my_DropFunc()
+{
+}
Index: trunk/modules/droplets/themes/default/js/wz_tooltip.js
===================================================================
--- trunk/modules/droplets/themes/default/js/wz_tooltip.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/js/wz_tooltip.js	(revision 2)
@@ -0,0 +1,1297 @@
+/* This notice must be untouched at all times.
+Copyright (c) 2002-2008 Walter Zorn. All rights reserved.
+
+wz_tooltip.js     v. 5.31
+
+The latest version is available at
+http://www.walterzorn.com
+or http://www.devira.com
+or http://www.walterzorn.de
+
+Created 1.12.2002 by Walter Zorn (Web: http://www.walterzorn.com )
+Last modified: 7.11.2008
+
+Easy-to-use cross-browser tooltips.
+Just include the script at the beginning of the <body> section, and invoke
+Tip('Tooltip text') to show and UnTip() to hide the tooltip, from the desired
+HTML eventhandlers. Example:
+<a onmouseover="Tip('Some text')" onmouseout="UnTip()" href="index.htm">My home page</a>
+No container DIV required.
+By default, width and height of tooltips are automatically adapted to content.
+Is even capable of dynamically converting arbitrary HTML elements to tooltips
+by calling TagToTip('ID_of_HTML_element_to_be_converted') instead of Tip(),
+which means you can put important, search-engine-relevant stuff into tooltips.
+Appearance & behaviour of tooltips can be individually configured
+via commands passed to Tip() or TagToTip().
+
+Tab Width: 4
+LICENSE: LGPL
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License (LGPL) 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.
+
+For more details on the GNU Lesser General Public License,
+see http://www.gnu.org/copyleft/lesser.html
+*/
+
+var config = new Object();
+
+//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
+var tt_Debug    = true        // false or true - recommended: false once you release your page to the public
+var tt_Enabled  = true        // Allows to (temporarily) suppress tooltips, e.g. by providing the user with a button that sets this global variable to false
+var TagsToTip   = true        // false or true - if true, HTML elements to be converted to tooltips via TagToTip() are automatically hidden;
+                            // if false, you should hide those HTML elements yourself
+
+// For each of the following config variables there exists a command, which is
+// just the variablename in uppercase, to be passed to Tip() or TagToTip() to
+// configure tooltips individually. Individual commands override global
+// configuration. Order of commands is arbitrary.
+// Example: onmouseover="Tip('Tooltip text', LEFT, true, BGCOLOR, '#FF9900', FADEIN, 400)"
+
+config. Above            = false        // false or true - tooltip above mousepointer
+config. BgColor          = '#F8F6CC'    // Background colour (HTML colour value, in quotes)
+config. BgImg            = ''        // Path to background image, none if empty string ''
+config. BorderColor      = '#003099'
+config. BorderStyle      = 'solid'    // Any permitted CSS value, but I recommend 'solid', 'dotted' or 'dashed'
+config. BorderWidth      = 1
+config. CenterMouse      = false        // false or true - center the tip horizontally below (or above) the mousepointer
+config. ClickClose       = false        // false or true - close tooltip if the user clicks somewhere
+config. ClickSticky      = false        // false or true - make tooltip sticky if user left-clicks on the hovered element while the tooltip is active
+config. CloseBtn         = false        // false or true - closebutton in titlebar
+config. CloseBtnColors   = ['#990000', '#FFFFFF', '#DD3333', '#FFFFFF']    // [Background, text, hovered background, hovered text] - use empty strings '' to inherit title colours
+config. CloseBtnText     = '&nbsp;X&nbsp;'    // Close button text (may also be an image tag)
+config. CopyContent      = true        // When converting a HTML element to a tooltip, copy only the element's content, rather than converting the element by its own
+config. Delay            = 400        // Time span in ms until tooltip shows up
+config. Duration         = 0            // Time span in ms after which the tooltip disappears; 0 for infinite duration, < 0 for delay in ms _after_ the onmouseout until the tooltip disappears
+config. Exclusive        = false        // false or true - no other tooltip can appear until the current one has actively been closed
+config. FadeIn           = 100        // Fade-in duration in ms, e.g. 400; 0 for no animation
+config. FadeOut          = 100
+config. FadeInterval     = 30        // Duration of each fade step in ms (recommended: 30) - shorter is smoother but causes more CPU-load
+config. Fix              = null        // Fixated position, two modes. Mode 1: x- an y-coordinates in brackets, e.g. [210, 480]. Mode 2: Show tooltip at a position related to an HTML element: [ID of HTML element, x-offset, y-offset from HTML element], e.g. ['SomeID', 10, 30]. Value null (default) for no fixated positioning.
+config. FollowMouse      = true        // false or true - tooltip follows the mouse
+config. FontColor        = '#000044'
+config. FontFace         = 'Verdana,Geneva,sans-serif'
+config. FontSize         = '8pt'        // E.g. '9pt' or '12px' - unit is mandatory
+config. FontWeight       = 'normal'    // 'normal' or 'bold';
+config. Height           = 0            // Tooltip height; 0 for automatic adaption to tooltip content, < 0 (e.g. -100) for a maximum for automatic adaption
+config. JumpHorz         = false        // false or true - jump horizontally to other side of mouse if tooltip would extend past clientarea boundary
+config. JumpVert         = true        // false or true - jump vertically        "
+config. Left             = false        // false or true - tooltip on the left of the mouse
+config. OffsetX          = 14        // Horizontal offset of left-top corner from mousepointer
+config. OffsetY          = 8            // Vertical offset
+config. Opacity          = 100        // Integer between 0 and 100 - opacity of tooltip in percent
+config. Padding          = 3            // Spacing between border and content
+config. Shadow           = false        // false or true
+config. ShadowColor      = '#C0C0C0'
+config. ShadowWidth      = 5
+config. Sticky           = false        // false or true - fixate tip, ie. don't follow the mouse and don't hide on mouseout
+config. TextAlign        = 'left'    // 'left', 'right' or 'justify'
+config. Title            = ''        // Default title text applied to all tips (no default title: empty string '')
+config. TitleAlign       = 'left'    // 'left' or 'right' - text alignment inside the title bar
+config. TitleBgColor     = ''        // If empty string '', BorderColor will be used
+config. TitleFontColor   = '#FFFFFF'    // Color of title text - if '', BgColor (of tooltip body) will be used
+config. TitleFontFace    = ''        // If '' use FontFace (boldified)
+config. TitleFontSize    = ''        // If '' use FontSize
+config. TitlePadding     = 2
+config. Width            = 0            // Tooltip width; 0 for automatic adaption to tooltip content; < -1 (e.g. -240) for a maximum width for that automatic adaption;
+                                    // -1: tooltip width confined to the width required for the titlebar
+//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//
+
+//=====================  PUBLIC  =============================================//
+function Tip()
+{
+    tt_Tip(arguments, null);
+}
+function TagToTip()
+{
+    var t2t = tt_GetElt(arguments[0]);
+    if(t2t)
+        tt_Tip(arguments, t2t);
+}
+function UnTip()
+{
+    tt_OpReHref();
+    if(tt_aV[DURATION] < 0 && (tt_iState & 0x2))
+        tt_tDurt.Timer("tt_HideInit()", -tt_aV[DURATION], true);
+    else if(!(tt_aV[STICKY] && (tt_iState & 0x2)))
+        tt_HideInit();
+}
+
+//==================  PUBLIC PLUGIN API     =====================================//
+// Extension eventhandlers currently supported:
+// OnLoadConfig, OnCreateContentString, OnSubDivsCreated, OnShow, OnMoveBefore,
+// OnMoveAfter, OnHideInit, OnHide, OnKill
+
+var tt_aElt = new Array(10), // Container DIV, outer title & body DIVs, inner title & body TDs, closebutton SPAN, shadow DIVs, and IFRAME to cover windowed elements in IE
+tt_aV = new Array(),    // Caches and enumerates config data for currently active tooltip
+tt_sContent,            // Inner tooltip text or HTML
+tt_t2t, tt_t2tDad,        // Tag converted to tip, and its DOM parent element
+tt_musX, tt_musY,
+tt_over,
+tt_x, tt_y, tt_w, tt_h; // Position, width and height of currently displayed tooltip
+
+function tt_Extension()
+{
+    tt_ExtCmdEnum();
+    tt_aExt[tt_aExt.length] = this;
+    return this;
+}
+function tt_SetTipPos(x, y)
+{
+    var css = tt_aElt[0].style;
+
+    tt_x = x;
+    tt_y = y;
+    css.left = x + "px";
+    css.top = y + "px";
+    if(tt_ie56)
+    {
+        var ifrm = tt_aElt[tt_aElt.length - 1];
+        if(ifrm)
+        {
+            ifrm.style.left = css.left;
+            ifrm.style.top = css.top;
+        }
+    }
+}
+function tt_HideInit()
+{
+    if(tt_iState)
+    {
+        tt_ExtCallFncs(0, "HideInit");
+        tt_iState &= ~(0x4 | 0x8);
+        if(tt_flagOpa && tt_aV[FADEOUT])
+        {
+            tt_tFade.EndTimer();
+            if(tt_opa)
+            {
+                var n = Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * (tt_aV[OPACITY] / tt_opa)));
+                tt_Fade(tt_opa, tt_opa, 0, n);
+                return;
+            }
+        }
+        tt_tHide.Timer("tt_Hide();", 1, false);
+    }
+}
+function tt_Hide()
+{
+    if(tt_db && tt_iState)
+    {
+        tt_OpReHref();
+        if(tt_iState & 0x2)
+        {
+            tt_aElt[0].style.visibility = "hidden";
+            tt_ExtCallFncs(0, "Hide");
+        }
+        tt_tShow.EndTimer();
+        tt_tHide.EndTimer();
+        tt_tDurt.EndTimer();
+        tt_tFade.EndTimer();
+        if(!tt_op && !tt_ie)
+        {
+            tt_tWaitMov.EndTimer();
+            tt_bWait = false;
+        }
+        if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY])
+            tt_RemEvtFnc(document, "mouseup", tt_OnLClick);
+        tt_ExtCallFncs(0, "Kill");
+        // In case of a TagToTip tip, hide converted DOM node and
+        // re-insert it into DOM
+        if(tt_t2t && !tt_aV[COPYCONTENT])
+            tt_UnEl2Tip();
+        tt_iState = 0;
+        tt_over = null;
+        tt_ResetMainDiv();
+        if(tt_aElt[tt_aElt.length - 1])
+            tt_aElt[tt_aElt.length - 1].style.display = "none";
+    }
+}
+function tt_GetElt(id)
+{
+    return(document.getElementById ? document.getElementById(id)
+            : document.all ? document.all[id]
+            : null);
+}
+function tt_GetDivW(el)
+{
+    return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0);
+}
+function tt_GetDivH(el)
+{
+    return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0);
+}
+function tt_GetScrollX()
+{
+    return(window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0));
+}
+function tt_GetScrollY()
+{
+    return(window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0));
+}
+function tt_GetClientW()
+{
+    return tt_GetWndCliSiz("Width");
+}
+function tt_GetClientH()
+{
+    return tt_GetWndCliSiz("Height");
+}
+function tt_GetEvtX(e)
+{
+    return (e ? ((typeof(e.pageX) != tt_u) ? e.pageX : (e.clientX + tt_GetScrollX())) : 0);
+}
+function tt_GetEvtY(e)
+{
+    return (e ? ((typeof(e.pageY) != tt_u) ? e.pageY : (e.clientY + tt_GetScrollY())) : 0);
+}
+function tt_AddEvtFnc(el, sEvt, PFnc)
+{
+    if(el)
+    {
+        if(el.addEventListener)
+            el.addEventListener(sEvt, PFnc, false);
+        else
+            el.attachEvent("on" + sEvt, PFnc);
+    }
+}
+function tt_RemEvtFnc(el, sEvt, PFnc)
+{
+    if(el)
+    {
+        if(el.removeEventListener)
+            el.removeEventListener(sEvt, PFnc, false);
+        else
+            el.detachEvent("on" + sEvt, PFnc);
+    }
+}
+function tt_GetDad(el)
+{
+    return(el.parentNode || el.parentElement || el.offsetParent);
+}
+function tt_MovDomNode(el, dadFrom, dadTo)
+{
+    if(dadFrom)
+        dadFrom.removeChild(el);
+    if(dadTo)
+        dadTo.appendChild(el);
+}
+
+//======================  PRIVATE  ===========================================//
+var tt_aExt = new Array(),    // Array of extension objects
+
+tt_db, tt_op, tt_ie, tt_ie56, tt_bBoxOld,    // Browser flags
+tt_body,
+tt_ovr_,                // HTML element the mouse is currently over
+tt_flagOpa,                // Opacity support: 1=IE, 2=Khtml, 3=KHTML, 4=Moz, 5=W3C
+tt_maxPosX, tt_maxPosY,
+tt_iState = 0,            // Tooltip active |= 1, shown |= 2, move with mouse |= 4, exclusive |= 8
+tt_opa,                    // Currently applied opacity
+tt_bJmpVert, tt_bJmpHorz,// Tip temporarily on other side of mouse
+tt_elDeHref,            // The tag from which we've removed the href attribute
+// Timer
+tt_tShow = new Number(0), tt_tHide = new Number(0), tt_tDurt = new Number(0),
+tt_tFade = new Number(0), tt_tWaitMov = new Number(0),
+tt_bWait = false,
+tt_u = "undefined";
+
+
+function tt_Init()
+{
+    tt_MkCmdEnum();
+    // Send old browsers instantly to hell
+    if(!tt_Browser() || !tt_MkMainDiv())
+        return;
+    tt_IsW3cBox();
+    tt_OpaSupport();
+    tt_AddEvtFnc(document, "mousemove", tt_Move);
+    // In Debug mode we search for TagToTip() calls in order to notify
+    // the user if they've forgotten to set the TagsToTip config flag
+    if(TagsToTip || tt_Debug)
+        tt_SetOnloadFnc();
+    // Ensure the tip be hidden when the page unloads
+    tt_AddEvtFnc(window, "unload", tt_Hide);
+}
+// Creates command names by translating config variable names to upper case
+function tt_MkCmdEnum()
+{
+    var n = 0;
+    for(var i in config)
+        eval("window." + i.toString().toUpperCase() + " = " + n++);
+    tt_aV.length = n;
+}
+function tt_Browser()
+{
+    var n, nv, n6, w3c;
+
+    n = navigator.userAgent.toLowerCase(),
+    nv = navigator.appVersion;
+    tt_op = (document.defaultView && typeof(eval("w" + "indow" + "." + "o" + "p" + "er" + "a")) != tt_u);
+    tt_ie = n.indexOf("msie") != -1 && document.all && !tt_op;
+    if(tt_ie)
+    {
+        var ieOld = (!document.compatMode || document.compatMode == "BackCompat");
+        tt_db = !ieOld ? document.documentElement : (document.body || null);
+        if(tt_db)
+            tt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5
+                    && typeof document.body.style.maxHeight == tt_u;
+    }
+    else
+    {
+        tt_db = document.documentElement || document.body ||
+                (document.getElementsByTagName ? document.getElementsByTagName("body")[0]
+                : null);
+        if(!tt_op)
+        {
+            n6 = document.defaultView && typeof document.defaultView.getComputedStyle != tt_u;
+            w3c = !n6 && document.getElementById;
+        }
+    }
+    tt_body = (document.getElementsByTagName ? document.getElementsByTagName("body")[0]
+                : (document.body || null));
+    if(tt_ie || n6 || tt_op || w3c)
+    {
+        if(tt_body && tt_db)
+        {
+            if(document.attachEvent || document.addEventListener)
+                return true;
+        }
+        else
+            tt_Err("wz_tooltip.js must be included INSIDE the body section,"
+                    + " immediately after the opening <body> tag.", false);
+    }
+    tt_db = null;
+    return false;
+}
+function tt_MkMainDiv()
+{
+    // Create the tooltip DIV
+    if(tt_body.insertAdjacentHTML)
+        tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm());
+    else if(typeof tt_body.innerHTML != tt_u && document.createElement && tt_body.appendChild)
+        tt_body.appendChild(tt_MkMainDivDom());
+    if(window.tt_GetMainDivRefs /* FireFox Alzheimer */ && tt_GetMainDivRefs())
+        return true;
+    tt_db = null;
+    return false;
+}
+function tt_MkMainDivHtm()
+{
+    return(
+        '<div id="WzTtDiV"></div>' +
+        (tt_ie56 ? ('<iframe id="WzTtIfRm" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>')
+        : '')
+    );
+}
+function tt_MkMainDivDom()
+{
+    var el = document.createElement("div");
+    if(el)
+        el.id = "WzTtDiV";
+    return el;
+}
+function tt_GetMainDivRefs()
+{
+    tt_aElt[0] = tt_GetElt("WzTtDiV");
+    if(tt_ie56 && tt_aElt[0])
+    {
+        tt_aElt[tt_aElt.length - 1] = tt_GetElt("WzTtIfRm");
+        if(!tt_aElt[tt_aElt.length - 1])
+            tt_aElt[0] = null;
+    }
+    if(tt_aElt[0])
+    {
+        var css = tt_aElt[0].style;
+
+        css.visibility = "hidden";
+        css.position = "absolute";
+        css.overflow = "hidden";
+        return true;
+    }
+    return false;
+}
+function tt_ResetMainDiv()
+{
+    tt_SetTipPos(0, 0);
+    tt_aElt[0].innerHTML = "";
+    tt_aElt[0].style.width = "0px";
+    tt_h = 0;
+}
+function tt_IsW3cBox()
+{
+    var css = tt_aElt[0].style;
+
+    css.padding = "10px";
+    css.width = "40px";
+    tt_bBoxOld = (tt_GetDivW(tt_aElt[0]) == 40);
+    css.padding = "0px";
+    tt_ResetMainDiv();
+}
+function tt_OpaSupport()
+{
+    var css = tt_body.style;
+
+    tt_flagOpa = (typeof(css.KhtmlOpacity) != tt_u) ? 2
+                : (typeof(css.KHTMLOpacity) != tt_u) ? 3
+                : (typeof(css.MozOpacity) != tt_u) ? 4
+                : (typeof(css.opacity) != tt_u) ? 5
+                : (typeof(css.filter) != tt_u) ? 1
+                : 0;
+}
+// Ported from http://dean.edwards.name/weblog/2006/06/again/
+// (Dean Edwards et al.)
+function tt_SetOnloadFnc()
+{
+    tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags);
+    tt_AddEvtFnc(window, "load", tt_HideSrcTags);
+    if(tt_body.attachEvent)
+        tt_body.attachEvent("onreadystatechange",
+            function() {
+                if(tt_body.readyState == "complete")
+                    tt_HideSrcTags();
+            } );
+    if(/WebKit|KHTML/i.test(navigator.userAgent))
+    {
+        var t = setInterval(function() {
+                    if(/loaded|complete/.test(document.readyState))
+                    {
+                        clearInterval(t);
+                        tt_HideSrcTags();
+                    }
+                }, 10);
+    }
+}
+function tt_HideSrcTags()
+{
+    if(!window.tt_HideSrcTags || window.tt_HideSrcTags.done)
+        return;
+    window.tt_HideSrcTags.done = true;
+    if(!tt_HideSrcTagsRecurs(tt_body))
+        tt_Err("There are HTML elements to be converted to tooltips.\nIf you"
+                + " want these HTML elements to be automatically hidden, you"
+                + " must edit wz_tooltip.js, and set TagsToTip in the global"
+                + " tooltip configuration to true.", true);
+}
+function tt_HideSrcTagsRecurs(dad)
+{
+    var ovr, asT2t;
+    // Walk the DOM tree for tags that have an onmouseover or onclick attribute
+    // containing a TagToTip('...') call.
+    // (.childNodes first since .children is bugous in Safari)
+    var a = dad.childNodes || dad.children || null;
+
+    for(var i = a ? a.length : 0; i;)
+    {--i;
+        if(!tt_HideSrcTagsRecurs(a[i]))
+            return false;
+        ovr = a[i].getAttribute ? (a[i].getAttribute("onmouseover") || a[i].getAttribute("onclick"))
+                : (typeof a[i].onmouseover == "function") ? (a[i].onmouseover || a[i].onclick)
+                : null;
+        if(ovr)
+        {
+            asT2t = ovr.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/);
+            if(asT2t && asT2t.length)
+            {
+                if(!tt_HideSrcTag(asT2t[0]))
+                    return false;
+            }
+        }
+    }
+    return true;
+}
+function tt_HideSrcTag(sT2t)
+{
+    var id, el;
+
+    // The ID passed to the found TagToTip() call identifies an HTML element
+    // to be converted to a tooltip, so hide that element
+    id = sT2t.replace(/.+'([^'.]+)'.+/, "$1");
+    el = tt_GetElt(id);
+    if(el)
+    {
+        if(tt_Debug && !TagsToTip)
+            return false;
+        else
+            el.style.display = "none";
+    }
+    else
+        tt_Err("Invalid ID\n'" + id + "'\npassed to TagToTip()."
+                + " There exists no HTML element with that ID.", true);
+    return true;
+}
+function tt_Tip(arg, t2t)
+{
+    if(!tt_db || (tt_iState & 0x8))
+        return;
+    if(tt_iState)
+        tt_Hide();
+    if(!tt_Enabled)
+        return;
+    tt_t2t = t2t;
+    if(!tt_ReadCmds(arg))
+        return;
+    tt_iState = 0x1 | 0x4;
+    tt_AdaptConfig1();
+    tt_MkTipContent(arg);
+    tt_MkTipSubDivs();
+    tt_FormatTip();
+    tt_bJmpVert = false;
+    tt_bJmpHorz = false;
+    tt_maxPosX = tt_GetClientW() + tt_GetScrollX() - tt_w - 1;
+    tt_maxPosY = tt_GetClientH() + tt_GetScrollY() - tt_h - 1;
+    tt_AdaptConfig2();
+    // Ensure the tip be shown and positioned before the first onmousemove
+    tt_OverInit();
+    tt_ShowInit();
+    tt_Move();
+}
+function tt_ReadCmds(a)
+{
+    var i;
+
+    // First load the global config values, to initialize also values
+    // for which no command is passed
+    i = 0;
+    for(var j in config)
+        tt_aV[i++] = config[j];
+    // Then replace each cached config value for which a command is
+    // passed (ensure the # of command args plus value args be even)
+    if(a.length & 1)
+    {
+        for(i = a.length - 1; i > 0; i -= 2)
+            tt_aV[a[i - 1]] = a[i];
+        return true;
+    }
+    tt_Err("Incorrect call of Tip() or TagToTip().\n"
+            + "Each command must be followed by a value.", true);
+    return false;
+}
+function tt_AdaptConfig1()
+{
+    tt_ExtCallFncs(0, "LoadConfig");
+    // Inherit unspecified title formattings from body
+    if(!tt_aV[TITLEBGCOLOR].length)
+        tt_aV[TITLEBGCOLOR] = tt_aV[BORDERCOLOR];
+    if(!tt_aV[TITLEFONTCOLOR].length)
+        tt_aV[TITLEFONTCOLOR] = tt_aV[BGCOLOR];
+    if(!tt_aV[TITLEFONTFACE].length)
+        tt_aV[TITLEFONTFACE] = tt_aV[FONTFACE];
+    if(!tt_aV[TITLEFONTSIZE].length)
+        tt_aV[TITLEFONTSIZE] = tt_aV[FONTSIZE];
+    if(tt_aV[CLOSEBTN])
+    {
+        // Use title colours for non-specified closebutton colours
+        if(!tt_aV[CLOSEBTNCOLORS])
+            tt_aV[CLOSEBTNCOLORS] = new Array("", "", "", "");
+        for(var i = 4; i;)
+        {--i;
+            if(!tt_aV[CLOSEBTNCOLORS][i].length)
+                tt_aV[CLOSEBTNCOLORS][i] = (i & 1) ? tt_aV[TITLEFONTCOLOR] : tt_aV[TITLEBGCOLOR];
+        }
+        // Enforce titlebar be shown
+        if(!tt_aV[TITLE].length)
+            tt_aV[TITLE] = " ";
+    }
+    // Circumvents broken display of images and fade-in flicker in Geckos < 1.8
+    if(tt_aV[OPACITY] == 100 && typeof tt_aElt[0].style.MozOpacity != tt_u && !Array.every)
+        tt_aV[OPACITY] = 99;
+    // Smartly shorten the delay for fade-in tooltips
+    if(tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100)
+        tt_aV[DELAY] = Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100);
+}
+function tt_AdaptConfig2()
+{
+    if(tt_aV[CENTERMOUSE])
+    {
+        tt_aV[OFFSETX] -= ((tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0)) >> 1);
+        tt_aV[JUMPHORZ] = false;
+    }
+}
+// Expose content globally so extensions can modify it
+function tt_MkTipContent(a)
+{
+    if(tt_t2t)
+    {
+        if(tt_aV[COPYCONTENT])
+            tt_sContent = tt_t2t.innerHTML;
+        else
+            tt_sContent = "";
+    }
+    else
+        tt_sContent = a[0];
+    tt_ExtCallFncs(0, "CreateContentString");
+}
+function tt_MkTipSubDivs()
+{
+    var sCss = 'position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;',
+    sTbTrTd = ' cellspacing="0" cellpadding="0" border="0" style="' + sCss + '"><tbody style="' + sCss + '"><tr><td ';
+
+    tt_aElt[0].style.width = tt_GetClientW() + "px";
+    tt_aElt[0].innerHTML =
+        (''
+        + (tt_aV[TITLE].length ?
+            ('<div id="WzTiTl" style="position:relative;z-index:1;">'
+            + '<table id="WzTiTlTb"' + sTbTrTd + 'id="WzTiTlI" style="' + sCss + '">'
+            + tt_aV[TITLE]
+            + '</td>'
+            + (tt_aV[CLOSEBTN] ?
+                ('<td align="right" style="' + sCss
+                + 'text-align:right;">'
+                + '<span id="WzClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;'
+                + 'cursor:' + (tt_ie ? 'hand' : 'pointer')
+                + ';" onmouseover="tt_OnCloseBtnOver(1)" onmouseout="tt_OnCloseBtnOver(0)" onclick="tt_HideInit()">'
+                + tt_aV[CLOSEBTNTEXT]
+                + '</span></td>')
+                : '')
+            + '</tr></tbody></table></div>')
+            : '')
+        + '<div id="WzBoDy" style="position:relative;z-index:0;">'
+        + '<table' + sTbTrTd + 'id="WzBoDyI" style="' + sCss + '">'
+        + tt_sContent
+        + '</td></tr></tbody></table></div>'
+        + (tt_aV[SHADOW]
+            ? ('<div id="WzTtShDwR" style="position:absolute;overflow:hidden;"></div>'
+                + '<div id="WzTtShDwB" style="position:relative;overflow:hidden;"></div>')
+            : '')
+        );
+    tt_GetSubDivRefs();
+    // Convert DOM node to tip
+    if(tt_t2t && !tt_aV[COPYCONTENT])
+        tt_El2Tip();
+    tt_ExtCallFncs(0, "SubDivsCreated");
+}
+function tt_GetSubDivRefs()
+{
+    var aId = new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", "WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR");
+
+    for(var i = aId.length; i; --i)
+        tt_aElt[i] = tt_GetElt(aId[i - 1]);
+}
+function tt_FormatTip()
+{
+    var css, w, h, pad = tt_aV[PADDING], padT, wBrd = tt_aV[BORDERWIDTH],
+    iOffY, iOffSh, iAdd = (pad + wBrd) << 1;
+
+    //--------- Title DIV ----------
+    if(tt_aV[TITLE].length)
+    {
+        padT = tt_aV[TITLEPADDING];
+        css = tt_aElt[1].style;
+        css.background = tt_aV[TITLEBGCOLOR];
+        css.paddingTop = css.paddingBottom = padT + "px";
+        css.paddingLeft = css.paddingRight = (padT + 2) + "px";
+        css = tt_aElt[3].style;
+        css.color = tt_aV[TITLEFONTCOLOR];
+        if(tt_aV[WIDTH] == -1)
+            css.whiteSpace = "nowrap";
+        css.fontFamily = tt_aV[TITLEFONTFACE];
+        css.fontSize = tt_aV[TITLEFONTSIZE];
+        css.fontWeight = "bold";
+        css.textAlign = tt_aV[TITLEALIGN];
+        // Close button DIV
+        if(tt_aElt[4])
+        {
+            css = tt_aElt[4].style;
+            css.background = tt_aV[CLOSEBTNCOLORS][0];
+            css.color = tt_aV[CLOSEBTNCOLORS][1];
+            css.fontFamily = tt_aV[TITLEFONTFACE];
+            css.fontSize = tt_aV[TITLEFONTSIZE];
+            css.fontWeight = "bold";
+        }
+        if(tt_aV[WIDTH] > 0)
+            tt_w = tt_aV[WIDTH];
+        else
+        {
+            tt_w = tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]);
+            // Some spacing between title DIV and closebutton
+            if(tt_aElt[4])
+                tt_w += pad;
+            // Restrict auto width to max width
+            if(tt_aV[WIDTH] < -1 && tt_w > -tt_aV[WIDTH])
+                tt_w = -tt_aV[WIDTH];
+        }
+        // Ensure the top border of the body DIV be covered by the title DIV
+        iOffY = -wBrd;
+    }
+    else
+    {
+        tt_w = 0;
+        iOffY = 0;
+    }
+
+    //-------- Body DIV ------------
+    css = tt_aElt[5].style;
+    css.top = iOffY + "px";
+    if(wBrd)
+    {
+        css.borderColor = tt_aV[BORDERCOLOR];
+        css.borderStyle = tt_aV[BORDERSTYLE];
+        css.borderWidth = wBrd + "px";
+    }
+    if(tt_aV[BGCOLOR].length)
+        css.background = tt_aV[BGCOLOR];
+    if(tt_aV[BGIMG].length)
+        css.backgroundImage = "url(" + tt_aV[BGIMG] + ")";
+    css.padding = pad + "px";
+    css.textAlign = tt_aV[TEXTALIGN];
+    if(tt_aV[HEIGHT])
+    {
+        css.overflow = "auto";
+        if(tt_aV[HEIGHT] > 0)
+            css.height = (tt_aV[HEIGHT] + iAdd) + "px";
+        else
+            tt_h = iAdd - tt_aV[HEIGHT];
+    }
+    // TD inside body DIV
+    css = tt_aElt[6].style;
+    css.color = tt_aV[FONTCOLOR];
+    css.fontFamily = tt_aV[FONTFACE];
+    css.fontSize = tt_aV[FONTSIZE];
+    css.fontWeight = tt_aV[FONTWEIGHT];
+    css.textAlign = tt_aV[TEXTALIGN];
+    if(tt_aV[WIDTH] > 0)
+        w = tt_aV[WIDTH];
+    // Width like title (if existent)
+    else if(tt_aV[WIDTH] == -1 && tt_w)
+        w = tt_w;
+    else
+    {
+        // Measure width of the body's inner TD, as some browsers would expand
+        // the container and outer body DIV to 100%
+        w = tt_GetDivW(tt_aElt[6]);
+        // Restrict auto width to max width
+        if(tt_aV[WIDTH] < -1 && w > -tt_aV[WIDTH])
+            w = -tt_aV[WIDTH];
+    }
+    if(w > tt_w)
+        tt_w = w;
+    tt_w += iAdd;
+
+    //--------- Shadow DIVs ------------
+    if(tt_aV[SHADOW])
+    {
+        tt_w += tt_aV[SHADOWWIDTH];
+        iOffSh = Math.floor((tt_aV[SHADOWWIDTH] * 4) / 3);
+        // Bottom shadow
+        css = tt_aElt[7].style;
+        css.top = iOffY + "px";
+        css.left = iOffSh + "px";
+        css.width = (tt_w - iOffSh - tt_aV[SHADOWWIDTH]) + "px";
+        css.height = tt_aV[SHADOWWIDTH] + "px";
+        css.background = tt_aV[SHADOWCOLOR];
+        // Right shadow
+        css = tt_aElt[8].style;
+        css.top = iOffSh + "px";
+        css.left = (tt_w - tt_aV[SHADOWWIDTH]) + "px";
+        css.width = tt_aV[SHADOWWIDTH] + "px";
+        css.background = tt_aV[SHADOWCOLOR];
+    }
+    else
+        iOffSh = 0;
+
+    //-------- Container DIV -------
+    tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]);
+    tt_FixSize(iOffY, iOffSh);
+}
+// Fixate the size so it can't dynamically change while the tooltip is moving.
+function tt_FixSize(iOffY, iOffSh)
+{
+    var wIn, wOut, h, add, pad = tt_aV[PADDING], wBrd = tt_aV[BORDERWIDTH], i;
+
+    tt_aElt[0].style.width = tt_w + "px";
+    tt_aElt[0].style.pixelWidth = tt_w;
+    wOut = tt_w - ((tt_aV[SHADOW]) ? tt_aV[SHADOWWIDTH] : 0);
+    // Body
+    wIn = wOut;
+    if(!tt_bBoxOld)
+        wIn -= (pad + wBrd) << 1;
+    tt_aElt[5].style.width = wIn + "px";
+    // Title
+    if(tt_aElt[1])
+    {
+        wIn = wOut - ((tt_aV[TITLEPADDING] + 2) << 1);
+        if(!tt_bBoxOld)
+            wOut = wIn;
+        tt_aElt[1].style.width = wOut + "px";
+        tt_aElt[2].style.width = wIn + "px";
+    }
+    // Max height specified
+    if(tt_h)
+    {
+        h = tt_GetDivH(tt_aElt[5]);
+        if(h > tt_h)
+        {
+            if(!tt_bBoxOld)
+                tt_h -= (pad + wBrd) << 1;
+            tt_aElt[5].style.height = tt_h + "px";
+        }
+    }
+    tt_h = tt_GetDivH(tt_aElt[0]) + iOffY;
+    // Right shadow
+    if(tt_aElt[8])
+        tt_aElt[8].style.height = (tt_h - iOffSh) + "px";
+    i = tt_aElt.length - 1;
+    if(tt_aElt[i])
+    {
+        tt_aElt[i].style.width = tt_w + "px";
+        tt_aElt[i].style.height = tt_h + "px";
+    }
+}
+function tt_DeAlt(el)
+{
+    var aKid;
+
+    if(el)
+    {
+        if(el.alt)
+            el.alt = "";
+        if(el.title)
+            el.title = "";
+        aKid = el.childNodes || el.children || null;
+        if(aKid)
+        {
+            for(var i = aKid.length; i;)
+                tt_DeAlt(aKid[--i]);
+        }
+    }
+}
+// This hack removes the native tooltips over links in Opera
+function tt_OpDeHref(el)
+{
+    if(!tt_op)
+        return;
+    if(tt_elDeHref)
+        tt_OpReHref();
+    while(el)
+    {
+        if(el.hasAttribute && el.hasAttribute("href"))
+        {
+            el.t_href = el.getAttribute("href");
+            el.t_stats = window.status;
+            el.removeAttribute("href");
+            el.style.cursor = "hand";
+            tt_AddEvtFnc(el, "mousedown", tt_OpReHref);
+            window.status = el.t_href;
+            tt_elDeHref = el;
+            break;
+        }
+        el = tt_GetDad(el);
+    }
+}
+function tt_OpReHref()
+{
+    if(tt_elDeHref)
+    {
+        tt_elDeHref.setAttribute("href", tt_elDeHref.t_href);
+        tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref);
+        window.status = tt_elDeHref.t_stats;
+        tt_elDeHref = null;
+    }
+}
+function tt_El2Tip()
+{
+    var css = tt_t2t.style;
+
+    // Store previous positioning
+    tt_t2t.t_cp = css.position;
+    tt_t2t.t_cl = css.left;
+    tt_t2t.t_ct = css.top;
+    tt_t2t.t_cd = css.display;
+    // Store the tag's parent element so we can restore that DOM branch
+    // when the tooltip is being hidden
+    tt_t2tDad = tt_GetDad(tt_t2t);
+    tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]);
+    css.display = "block";
+    css.position = "static";
+    css.left = css.top = css.marginLeft = css.marginTop = "0px";
+}
+function tt_UnEl2Tip()
+{
+    // Restore positioning and display
+    var css = tt_t2t.style;
+
+    css.display = tt_t2t.t_cd;
+    tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), tt_t2tDad);
+    css.position = tt_t2t.t_cp;
+    css.left = tt_t2t.t_cl;
+    css.top = tt_t2t.t_ct;
+    tt_t2tDad = null;
+}
+function tt_OverInit()
+{
+    if(window.event)
+        tt_over = window.event.target || window.event.srcElement;
+    else
+        tt_over = tt_ovr_;
+    tt_DeAlt(tt_over);
+    tt_OpDeHref(tt_over);
+}
+function tt_ShowInit()
+{
+    tt_tShow.Timer("tt_Show()", tt_aV[DELAY], true);
+    if(tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY])
+        tt_AddEvtFnc(document, "mouseup", tt_OnLClick);
+}
+function tt_Show()
+{
+    var css = tt_aElt[0].style;
+
+    // Override the z-index of the topmost wz_dragdrop.js D&D item
+    css.zIndex = Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1010);
+    if(tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE])
+        tt_iState &= ~0x4;
+    if(tt_aV[EXCLUSIVE])
+        tt_iState |= 0x8;
+    if(tt_aV[DURATION] > 0)
+        tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], true);
+    tt_ExtCallFncs(0, "Show")
+    css.visibility = "visible";
+    tt_iState |= 0x2;
+    if(tt_aV[FADEIN])
+        tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / tt_aV[FADEINTERVAL]));
+    tt_ShowIfrm();
+}
+function tt_ShowIfrm()
+{
+    if(tt_ie56)
+    {
+        var ifrm = tt_aElt[tt_aElt.length - 1];
+        if(ifrm)
+        {
+            var css = ifrm.style;
+            css.zIndex = tt_aElt[0].style.zIndex - 1;
+            css.display = "block";
+        }
+    }
+}
+function tt_Move(e)
+{
+    if(e)
+        tt_ovr_ = e.target || e.srcElement;
+    e = e || window.event;
+    if(e)
+    {
+        tt_musX = tt_GetEvtX(e);
+        tt_musY = tt_GetEvtY(e);
+    }
+    if(tt_iState & 0x4)
+    {
+        // Prevent jam of mousemove events
+        if(!tt_op && !tt_ie)
+        {
+            if(tt_bWait)
+                return;
+            tt_bWait = true;
+            tt_tWaitMov.Timer("tt_bWait = false;", 1, true);
+        }
+        if(tt_aV[FIX])
+        {
+            tt_iState &= ~0x4;
+            tt_PosFix();
+        }
+        else if(!tt_ExtCallFncs(e, "MoveBefore"))
+            tt_SetTipPos(tt_Pos(0), tt_Pos(1));
+        tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter")
+    }
+}
+function tt_Pos(iDim)
+{
+    var iX, bJmpMod, cmdAlt, cmdOff, cx, iMax, iScrl, iMus, bJmp;
+
+    // Map values according to dimension to calculate
+    if(iDim)
+    {
+        bJmpMod = tt_aV[JUMPVERT];
+        cmdAlt = ABOVE;
+        cmdOff = OFFSETY;
+        cx = tt_h;
+        iMax = tt_maxPosY;
+        iScrl = tt_GetScrollY();
+        iMus = tt_musY;
+        bJmp = tt_bJmpVert;
+    }
+    else
+    {
+        bJmpMod = tt_aV[JUMPHORZ];
+        cmdAlt = LEFT;
+        cmdOff = OFFSETX;
+        cx = tt_w;
+        iMax = tt_maxPosX;
+        iScrl = tt_GetScrollX();
+        iMus = tt_musX;
+        bJmp = tt_bJmpHorz;
+    }
+    if(bJmpMod)
+    {
+        if(tt_aV[cmdAlt] && (!bJmp || tt_CalcPosAlt(iDim) >= iScrl + 16))
+            iX = tt_PosAlt(iDim);
+        else if(!tt_aV[cmdAlt] && bJmp && tt_CalcPosDef(iDim) > iMax - 16)
+            iX = tt_PosAlt(iDim);
+        else
+            iX = tt_PosDef(iDim);
+    }
+    else
+    {
+        iX = iMus;
+        if(tt_aV[cmdAlt])
+            iX -= cx + tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);
+        else
+            iX += tt_aV[cmdOff];
+    }
+    // Prevent tip from extending past clientarea boundary
+    if(iX > iMax)
+        iX = bJmpMod ? tt_PosAlt(iDim) : iMax;
+    // In case of insufficient space on both sides, ensure the left/upper part
+    // of the tip be visible
+    if(iX < iScrl)
+        iX = bJmpMod ? tt_PosDef(iDim) : iScrl;
+    return iX;
+}
+function tt_PosDef(iDim)
+{
+    if(iDim)
+        tt_bJmpVert = tt_aV[ABOVE];
+    else
+        tt_bJmpHorz = tt_aV[LEFT];
+    return tt_CalcPosDef(iDim);
+}
+function tt_PosAlt(iDim)
+{
+    if(iDim)
+        tt_bJmpVert = !tt_aV[ABOVE];
+    else
+        tt_bJmpHorz = !tt_aV[LEFT];
+    return tt_CalcPosAlt(iDim);
+}
+function tt_CalcPosDef(iDim)
+{
+    return iDim ? (tt_musY + tt_aV[OFFSETY]) : (tt_musX + tt_aV[OFFSETX]);
+}
+function tt_CalcPosAlt(iDim)
+{
+    var cmdOff = iDim ? OFFSETY : OFFSETX;
+    var dx = tt_aV[cmdOff] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);
+    if(tt_aV[cmdOff] > 0 && dx <= 0)
+        dx = 1;
+    return((iDim ? (tt_musY - tt_h) : (tt_musX - tt_w)) - dx);
+}
+function tt_PosFix()
+{
+    var iX, iY;
+
+    if(typeof(tt_aV[FIX][0]) == "number")
+    {
+        iX = tt_aV[FIX][0];
+        iY = tt_aV[FIX][1];
+    }
+    else
+    {
+        if(typeof(tt_aV[FIX][0]) == "string")
+            el = tt_GetElt(tt_aV[FIX][0]);
+        // First slot in array is direct reference to HTML element
+        else
+            el = tt_aV[FIX][0];
+        iX = tt_aV[FIX][1];
+        iY = tt_aV[FIX][2];
+        // By default, vert pos is related to bottom edge of HTML element
+        if(!tt_aV[ABOVE] && el)
+            iY += tt_GetDivH(el);
+        for(; el; el = el.offsetParent)
+        {
+            iX += el.offsetLeft || 0;
+            iY += el.offsetTop || 0;
+        }
+    }
+    // For a fixed tip positioned above the mouse, use the bottom edge as anchor
+    // (recommended by Christophe Rebeschini, 31.1.2008)
+    if(tt_aV[ABOVE])
+        iY -= tt_h;
+    tt_SetTipPos(iX, iY);
+}
+function tt_Fade(a, now, z, n)
+{
+    if(n)
+    {
+        now += Math.round((z - now) / n);
+        if((z > a) ? (now >= z) : (now <= z))
+            now = z;
+        else
+            tt_tFade.Timer(
+                "tt_Fade("
+                + a + "," + now + "," + z + "," + (n - 1)
+                + ")",
+                tt_aV[FADEINTERVAL],
+                true
+            );
+    }
+    now ? tt_SetTipOpa(now) : tt_Hide();
+}
+function tt_SetTipOpa(opa)
+{
+    // To circumvent the opacity nesting flaws of IE, we set the opacity
+    // for each sub-DIV separately, rather than for the container DIV.
+    tt_SetOpa(tt_aElt[5], opa);
+    if(tt_aElt[1])
+        tt_SetOpa(tt_aElt[1], opa);
+    if(tt_aV[SHADOW])
+    {
+        opa = Math.round(opa * 0.8);
+        tt_SetOpa(tt_aElt[7], opa);
+        tt_SetOpa(tt_aElt[8], opa);
+    }
+}
+function tt_OnCloseBtnOver(iOver)
+{
+    var css = tt_aElt[4].style;
+
+    iOver <<= 1;
+    css.background = tt_aV[CLOSEBTNCOLORS][iOver];
+    css.color = tt_aV[CLOSEBTNCOLORS][iOver + 1];
+}
+function tt_OnLClick(e)
+{
+    //  Ignore right-clicks
+    e = e || window.event;
+    if(!((e.button && e.button & 2) || (e.which && e.which == 3)))
+    {
+        if(tt_aV[CLICKSTICKY] && (tt_iState & 0x4))
+        {
+            tt_aV[STICKY] = true;
+            tt_iState &= ~0x4;
+        }
+        else if(tt_aV[CLICKCLOSE])
+            tt_HideInit();
+    }
+}
+function tt_Int(x)
+{
+    var y;
+
+    return(isNaN(y = parseInt(x)) ? 0 : y);
+}
+Number.prototype.Timer = function(s, iT, bUrge)
+{
+    if(!this.value || bUrge)
+        this.value = window.setTimeout(s, iT);
+}
+Number.prototype.EndTimer = function()
+{
+    if(this.value)
+    {
+        window.clearTimeout(this.value);
+        this.value = 0;
+    }
+}
+function tt_GetWndCliSiz(s)
+{
+    var db, y = window["inner" + s], sC = "client" + s, sN = "number";
+    if(typeof y == sN)
+    {
+        var y2;
+        return(
+            // Gecko or Opera with scrollbar
+            // ... quirks mode
+            ((db = document.body) && typeof(y2 = db[sC]) == sN && y2 &&  y2 <= y) ? y2 
+            // ... strict mode
+            : ((db = document.documentElement) && typeof(y2 = db[sC]) == sN && y2 && y2 <= y) ? y2
+            // No scrollbar, or clientarea size == 0, or other browser (KHTML etc.)
+            : y
+        );
+    }
+    // IE
+    return(
+        // document.documentElement.client+s functional, returns > 0
+        ((db = document.documentElement) && (y = db[sC])) ? y
+        // ... not functional, in which case document.body.client+s 
+        // is the clientarea size, fortunately
+        : document.body[sC]
+    );
+}
+function tt_SetOpa(el, opa)
+{
+    var css = el.style;
+
+    tt_opa = opa;
+    if(tt_flagOpa == 1)
+    {
+        if(opa < 100)
+        {
+            // Hacks for bugs of IE:
+            // 1.) Once a CSS filter has been applied, fonts are no longer
+            // anti-aliased, so we store the previous 'non-filter' to be
+            // able to restore it
+            if(typeof(el.filtNo) == tt_u)
+                el.filtNo = css.filter;
+            // 2.) A DIV cannot be made visible in a single step if an
+            // opacity < 100 has been applied while the DIV was hidden
+            var bVis = css.visibility != "hidden";
+            // 3.) In IE6, applying an opacity < 100 has no effect if the
+            //       element has no layout (position, size, zoom, ...)
+            css.zoom = "100%";
+            if(!bVis)
+                css.visibility = "visible";
+            css.filter = "alpha(opacity=" + opa + ")";
+            if(!bVis)
+                css.visibility = "hidden";
+        }
+        else if(typeof(el.filtNo) != tt_u)
+            // Restore 'non-filter'
+            css.filter = el.filtNo;
+    }
+    else
+    {
+        opa /= 100.0;
+        switch(tt_flagOpa)
+        {
+        case 2:
+            css.KhtmlOpacity = opa; break;
+        case 3:
+            css.KHTMLOpacity = opa; break;
+        case 4:
+            css.MozOpacity = opa; break;
+        case 5:
+            css.opacity = opa; break;
+        }
+    }
+}
+function tt_Err(sErr, bIfDebug)
+{
+    if(tt_Debug || !bIfDebug)
+        alert("Tooltip Script Error Message:\n\n" + sErr);
+}
+
+//============  EXTENSION (PLUGIN) MANAGER  ===============//
+function tt_ExtCmdEnum()
+{
+    var s;
+
+    // Add new command(s) to the commands enum
+    for(var i in config)
+    {
+        s = "window." + i.toString().toUpperCase();
+        if(eval("typeof(" + s + ") == tt_u"))
+        {
+            eval(s + " = " + tt_aV.length);
+            tt_aV[tt_aV.length] = null;
+        }
+    }
+}
+function tt_ExtCallFncs(arg, sFnc)
+{
+    var b = false;
+    for(var i = tt_aExt.length; i;)
+    {--i;
+        var fnc = tt_aExt[i]["On" + sFnc];
+        // Call the method the extension has defined for this event
+        if(fnc && fnc(arg))
+            b = true;
+    }
+    return b;
+}
+
+tt_Init();
Index: trunk/modules/droplets/themes/default/overview.htt
===================================================================
--- trunk/modules/droplets/themes/default/overview.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/overview.htt	(revision 2)
@@ -0,0 +1,154 @@
+<!-- BEGIN main_block -->
+<script type="text/javascript">
+<!--
+var Droplet = {
+    ADMIN_DIRECTORY : '{ADMIN_DIRECTORY}',
+    WB_URL : '{AppUrl}',
+    ADMIN_URL : '{AcpUrl}',
+    AddonUrl : '{sAddonUrl}/',
+    ThemeUrl : '{sAddonThemeUrl}/'
+};
+-->
+</script>
+    <div class="droplets overview" id="cb-droplets" >
+        <form action="{ToolUrl}" method="post" name="droplets_form">
+            <input type="hidden" name="{FTAN_NAME}" value="{FTAN_VALUE}" />
+            <table class="droplets w3-table-all" id="DropletsTable">
+                <tbody>
+                    <tr>
+                        <td >
+                            <button class="btn" type="submit" name="command" value="add_droplet?droplet_id={IDKEY0}">{DR_TEXT_ADD_DROPLET}</button>
+                            <button class="btn" type="submit" name="command" value="select_archiv#openModal">{DR_TEXT_IMPORT}</button>
+                       </td>
+                        <td style="float: right;">
+                            <button class="btn modal-header_btn modal-trigger btn-fixed" type="submit" name="command" value="call_help#openModal" >Droplet {DR_TEXT_HELP}</button>
+                            <button class="btn" type="submit" name="command" value="backup_droplets">{TEXT_BACKUP}</button>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+            <h2>{DR_TEXT_MODIFY}/{DR_TEXT_DELETE} {DR_TEXT_DROPLETS}</h2>
+            <div id="dr-legende" class="nowrap">
+              <nav class="table">
+                <ul class="tr">
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/modify.png" alt="" /> {DR_TEXT_MODIFY}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/copy.png" alt="" /> {DR_TEXT_COPY_DROPLET}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/rename.png" alt="" /> {TEXT_RENAME}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/delete.png" alt="" /> {TEXT_DELETE}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/status_1.png" alt="" /> {TEXT_ACTIVE}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/status_0.png" alt="" /> {TEXT_INACTIVE}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/droplet.png" alt="" /> {DR_TEXT_VALID_CODE}</li>
+                    <li class="td dr-btn"><img src="{sAddonThemeUrl}/img/24/invalid.png" alt="" /> {DR_TEXT_INVALID_CODE}</li>
+                </ul>
+              </nav>
+            </div>
+            <div class="outer">
+                <table class="fixed-headers sortierbar droplets-data w3-border w3-hoverable" id="tableData" >
+                    <thead>
+                        <tr class="w3-header-blue-wb">
+                            <th>
+                                <input name="select_all" id="select_all" type="checkbox" value="1"  />
+                            </th>
+                            <th>
+                                <img src="{sAddonThemeUrl}/img/24/blank.gif" alt="" />
+                            </th>
+                            <th>
+                                <img src="{sAddonThemeUrl}/img/24/blank.gif" alt="" />
+                            </th>
+                            <th>
+                                <img src="{sAddonThemeUrl}/img/24/blank.gif" alt="" />
+                            </th>
+                            <th class="sortierbar">{TEXT_NAME}</th>
+                            <th class="sortierbar">{TEXT_DESCRIPTION}</th>
+                            <th class="sortierbar vorsortiert+">{DR_TEXT_MODIFIED_WHEN}</th>
+                            <th>
+                                <img src="{sAddonThemeUrl}/img/24/blank.gif" alt="" />
+                            </th>
+                            <th id="DropletsActive" style="cursor: help;">
+                            <img src="{sAddonThemeUrl}/img/24/info.png" alt="" title="{DR_TEXT_ACTION}" />
+                            </th>
+                            <th>
+                                <img src="{sAddonThemeUrl}/img/24/blank.gif" alt="" />
+                            </th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                <!-- BEGIN list_droplet_block -->
+                        <tr >
+                            <td>
+                                 <input type="checkbox" name="cb[{DropletId}]" id="L{DropletId}cb" value="{sDropletName}" />
+                            </td>
+                            <td >
+                                <button name="command" type="submit" class="noButton" value="copy_droplet?droplet_id={iDropletIdKey}" title="">
+                                    <img src="{sAddonThemeUrl}/img/24/copy.png" alt="" />
+                                </button>
+                            </td>
+                            <td>
+                                <button name="command" type="submit" class="noButton" value="modify_droplet?droplet_id={iDropletIdKey}" title="">
+                                    <img src="{sAddonThemeUrl}/img/24/modify.png" alt="" />
+                                </button>
+                            </td>
+                            <td>
+                                <button name="command" type="submit" class="noButton" value="modify_droplet?droplet_id={iDropletIdKey}">
+                                     <img src="{sAddonThemeUrl}/img/24/{icon}.png" alt="" />
+                                </button>
+                            </td>
+                            <td>
+                                <button class="noButton" name="command" type="submit" value="modify_droplet?droplet_id={iDropletIdKey}" title="{sDropletTitle}">
+                                    <span class="truncate" >{sDropletName}</span>
+                                    <span id="tooltip_{DropletId}">{comments}</span>
+                                </button>
+                            </td>
+                            <td>
+                                  <span class="truncate" title="{sDropletDescription}">{sDropletDescription}</span>
+                            </td>
+                            <td>
+                                <b>{modified_when}</b>
+                            </td>
+                            <td >
+                                <button name="command" type="submit" class="noButton" value="rename_droplet?droplet_id={iDropletIdKey}" title="">
+                                    <img src="{sAddonThemeUrl}/img/24/rename.png" alt="" />
+                                </button>
+                            </td>
+                            <td id="id_{DropletId}" class="toggle_active_status cursor">
+                                <img id="active_{DropletId}" src="{sAddonThemeUrl}/img/24/status_{ActiveIcon}.png" alt=""  />
+                            </td>
+                            <td>
+                                <button name="command" type="submit" class="noButton" value="delete_droplet?droplet_id={iDropletIdKey}" title="">
+                                    <img src="{sAddonThemeUrl}/img/24/delete.png" alt="" />
+                                </button>
+                            </td>
+                        </tr>
+                <!-- END list_droplet_block -->
+                        <tr class="noHeight">
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </form><!-- droplets_form -->
+    </div><!-- droplets -->
+<script src="{sAddonThemeUrl}/js/TableSort.js" type="text/javascript"></script>
+<script type="text/javascript">
+<!--
+/*
+    var table = $('#DropletsTable').DataTable( {
+        ajax: "data.json"
+    });
+    setInterval( function () {
+        table.ajax.reload( null, false ); // user paging is not reset on reload
+    }, 30000 );
+    setInterval();
+*/
+-->
+</script>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/droplets/themes/default/rename_droplet.htt
===================================================================
--- trunk/modules/droplets/themes/default/rename_droplet.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/rename_droplet.htt	(revision 2)
@@ -0,0 +1,47 @@
+<!-- BEGIN main_block -->
+<div id="openModal" class="modal-Dialog">
+    <div>
+        <form name="modify" action="{ToolUrl}" method="post" style="margin: 0;">
+            <input type="hidden" name="command" value="save_droplet" />
+            <input type="hidden" name="subCommand" value="{action}" />
+            <input type="hidden" name="data_codepress" value="" />
+            <input type="hidden" name="droplet_id" value="{iDropletIdKey}" />
+            <input type="hidden" name="existingTitle" value="{DropletName}" />
+            <input type="hidden" name="CopyDropletId" value="{iDropletAddId}" />
+            <input type="hidden" name="show_wysiwyg" value="{show_wysiwyg}" />
+            <input type="hidden" name="{FTAN_NAME}" value="{FTAN_VALUE}" />
+            <span id="customConfirm" style="display: block;">
+                <button name="cancel" class="close" type="button" onclick="window.location='{ToolUrl}';">X</button>
+                <header class="modal-label"><h3>{HEADER_DROPLET}</h3></header>
+                <div class="modal-inner ">
+                     <h4 style="padding-left: 1.825em;">{sDropletHelp}</h4>
+                    <div class="subcolumn" class="block-outer" >
+                        <input type="text" name="title" value="{DropletName}" class="rename-input form-field " maxlength="32" />
+                    </div>
+                    <div class="footer">
+            <!-- BEGIN show_admin_edit_block -->
+                        <button name="command" type="submit" value="save_rename?droplet_id={iDropletIdKey}" class="confirm">{sSubmitButton}</button>
+            <!-- END show_admin_edit_block -->
+                        <button name="cancel" class="cancel" type="button" onclick="window.location='{ToolUrl}';">{TEXT_CANCEL}</button>
+                    </div>
+                </div>
+                <footer class="modal-label">
+<!--
+            <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+            <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+-->
+                </footer>
+            </span>
+        </form>
+    </div>
+</div>
+<script >
+<!--
+domReady(function() {
+    LoadOnFly('head', "{sAddonThemeUrl}/css/dialogBox.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/customAlert.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/form.css");
+});
+-->
+</script>
+<!-- END main_block -->
Index: trunk/modules/droplets/themes/default/rename_droplets.htt
===================================================================
--- trunk/modules/droplets/themes/default/rename_droplets.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/rename_droplets.htt	(revision 2)
@@ -0,0 +1,3 @@
+<!-- BEGIN main_block -->
+
+<!-- END main_block -->
Index: trunk/modules/droplets/themes/default/scrollTable.js
===================================================================
--- trunk/modules/droplets/themes/default/scrollTable.js	(nonexistent)
+++ trunk/modules/droplets/themes/default/scrollTable.js	(revision 2)
@@ -0,0 +1,37 @@
+/* http://www.alistapart.com/articles/zebratables/ */
+function removeClassName (elem, className) {
+    elem.className = elem.className.replace(className, "").trim();
+}
+
+function addCSSClass (elem, className) {
+    removeClassName (elem, className);
+    elem.className = (elem.className + " " + className).trim();
+}
+
+String.prototype.trim = function() {
+    return this.replace( /^\s+|\s+$/, "" );
+}
+
+function stripedTable() {
+    return false;
+    if (document.getElementById && document.getElementsByTagName) {  
+        var allTables = document.getElementsByTagName('table');
+        if (!allTables) { return; }
+
+        for (var i = 0; i < allTables.length; i++) {
+            if (allTables[i].className.match(/[\w\s ]*scrollTable[\w\s ]*/)) {
+                var trs = allTables[i].getElementsByTagName("tr");
+                for (var j = 0; j < trs.length; j++) {
+                    removeClassName(trs[j], 'alternateRow');
+                    addCSSClass(trs[j], 'normalRow');
+                }
+                for (var k = 0; k < trs.length; k += 2) {
+                    removeClassName(trs[k], 'normalRow');
+                    addCSSClass(trs[k], 'alternateRow');
+                }
+            }
+        }
+    }
+}
+
+window.onload = function() { stripedTable(); }
Index: trunk/modules/droplets/themes/default/select_archiv.htt
===================================================================
--- trunk/modules/droplets/themes/default/select_archiv.htt	(nonexistent)
+++ trunk/modules/droplets/themes/default/select_archiv.htt	(revision 2)
@@ -0,0 +1,53 @@
+<!-- BEGIN main_block -->
+<div class="droplets droplet-import block-outer modal-Dialog" id="openModal" draggable="true" style="overflow: hidden;">
+    <div >
+        <form action="{ToolUrl}" method="post" name="droplets_form" enctype="multipart/form-data" >
+            <input type="hidden" name="{FTAN_NAME}" value="{FTAN_VALUE}" />
+            <span id="customConfirm" style="display: block; width: 40.225%; margin: auto 24%;">
+                    <button class="close" name="cancel" type="button" onclick="window.location='{ToolUrl}';">X</button>
+                    <header class="modal-label"><h2>{TEXT_RESTORE}</h2></header>
+                    <div class="modal-inner file-select-box">
+                        <span style="margin-left: 10.525%;"></span>
+                        <span style="text-align: left; padding: 0.525em 0;">
+                            <select size="1" name="zipFiles" >
+                                <option style=" padding: 0.225em 0.455em;" value="">{TEXT_PLEASE_SELECT}</option>
+                        <!-- BEGIN list_archiv_block -->
+                                <option style=" padding: 0.225em 0.455em;" value="{files}">{value}</option>
+                        <!-- END list_archiv_block -->
+                            </select>
+                            <button class="btn" type="submit" name="command" value="import_droplets">{DR_TEXT_ARCHIV_LOAD}</button>
+                            <button class="btn" type="submit" name="command" value="delete_archiv">{DR_TEXT_DELETE}</button>
+                        </span>
+                        <div class="file-box">
+                            <span style="margin-left: 10.025%;"> </span>
+                            <span style="text-align: left; padding: 0.525em 0; display: inline-block; margin: 0.525em;">
+                                <input type="file" name="zipFiles" id="file" class="inputfile inputfile-6" data-multiple-caption="{count} files selected" multiple />
+                                <label for="file"><span></span> <strong>
+                                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
+                                <path d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"/>
+                                </svg> Choose a file&hellip;</strong>
+                                </label>
+                                <button  class="input-file btn command" name="command" value="import_droplets" type="submit">{DROPLET_MESSAGE_GENERIC_LOCAL_UPLOAD}</button>
+                            </span>
+                        </div>
+                    </div>
+                        <div style="float: right; margin: -1.225em 1.225em 0;">
+                        <button class="cancel btn btn-danger" name="cancel" type="button" onclick="window.location='{ToolUrl}';">{TEXT_CANCEL}</button>
+                    </div>
+                    <footer class="modal-label">
+                        <h4 style="margin-left: 0.955em; top: 0.925em; position: relative;">Upload icon by <a href="http://www.flaticon.com/free-icon/outbox_3686" target="_blank">FlatIcon</a>.</h4>
+                    </footer>
+            </span>
+        </form>
+    </div>
+</div>
+<script >
+<!--
+domReady(function() {
+    LoadOnFly('head', "{sAddonThemeUrl}/css/fileupload.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/dialogBox.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/customAlert.css");
+});
+-->
+</script>
+<!-- END main_block -->
Index: trunk/modules/droplets/tool.php
===================================================================
--- trunk/modules/droplets/tool.php	(nonexistent)
+++ trunk/modules/droplets/tool.php	(revision 2)
@@ -0,0 +1,136 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+    function executeDropletTool()
+    {
+/* -------------------------------------------------------- */
+        $sAddonName = basename(__DIR__);
+/*
+*/
+        if (is_readable(dirname(__DIR__).'/SimpleRegister.php')) {
+            require (dirname(__DIR__).'/SimpleRegister.php');
+        }
+/*******************************************************************************************/
+//      SimpleCommandDispatcher
+/*******************************************************************************************/
+        if (is_readable(__DIR__.'/SimpleCommandDispatcher.inc')) {
+            require (__DIR__.'/SimpleCommandDispatcher.inc');
+        }
+
+        $database    = $oDb;
+        $wb = $admin = $oApp;
+        if(!function_exists('getUniqueName')) { require($sAddonPath.'/droplets.functions.php'); }
+        $ToolUrl  = $oReg->AcpUrl.'admintools/tool.php?tool=droplets';
+        $ApptoolLink = $oReg->AcpUrl.'admintools/index.php';
+        // create default placeholder array for templates htt or Twig use
+        $oTrans->enableAddon('modules\\'.$sAddonName);
+        $aLang = $oTrans->getLangArray();
+        $aTplDefaults = array (
+              'ADMIN_DIRECTORY' => ADMIN_DIRECTORY,
+              'ToolUrl' => $ToolUrl,
+              'sAddonUrl' => $sAddonUrl,
+              'ApptoolLink' => $ApptoolLink,
+              'sAddonThemeUrl'  => $sAddonThemeUrl,
+              'AcpUrl' =>  $oReg->AcpUrl,
+              'AppUrl' =>  $oReg->AppUrl,
+              );
+        $output = '';
+        if ( !class_exists('msgQueue', false) ) { require($oReg->AppPath.'/framework/class.msg_queue.php'); }
+        msgQueue::clear();
+        if( !$oApp->get_permission($sAddonName,'module' ) ) {
+            $oApp->print_error($oTrans->MESSAGE_ADMIN_INSUFFICIENT_PRIVELLIGES, $js_back);
+            exit();
+        }
+        $sOverviewDroplets = $oTrans->TEXT_LIST_OPTIONS.' '.$oTrans->DR_TEXT_DROPLETS;
+        // prepare to get parameters (query)) from this URL string e.g. modify_droplet?droplet_id
+        $aQuery = array('command'=>'overview');
+        $sql = '';
+        $aRequestVars = $_REQUEST;
+        $aParseUrl  = ( isset($aRequestVars['command'])?  parse_url ($aRequestVars['command']): $aQuery );
+        // sanitize command from compatibility file
+        $action = preg_replace(
+            '/[^a-z\/0-1_]/siu',
+            '',
+            (isset($aParseUrl['path']) ? $aParseUrl['path'] : 'overview')
+        );
+        $sCommand = $sAddonPath.'/commands/'.$action.'.php';
+        $subCommand = (isset($aRequestVars['subCommand'])?$aRequestVars['subCommand']:$action);
+        if ( isset( $aParseUrl['query']) ) { parse_str($aParseUrl['query'], $aQuery); }
+//        if( !function_exists( 'make_dir' ) ) { require($oReg->AppPath.'/framework/functions.php');  }
+        ob_start();
+        extract($aQuery, EXTR_PREFIX_SAME, "dr");
+        switch ($action):
+            case 'add_droplet':
+            case 'copy_droplet':
+                $iDropletAddId = ($oApp->checkIDKEY($droplet_id, false, ''));
+                if ( is_readable($sCommand)) { include ( $sCommand ); }
+                $sCommand = $sAddonPath.'/commands/'.'rename_droplet.php';
+            case 'rename_droplet':
+                if ( is_readable($sCommand)) { include ( $sCommand ); }
+                $sCommand = $sAddonPath.'/commands/'.'overview.php';
+            case 'modify_droplet':
+            case 'backup_droplets':
+            case 'import_droplets':
+                if (is_readable($sCommand)) { include ( $sCommand ); }
+                break;
+            case 'save_rename':
+                $droplet_id = $aRequestVars['CopyDropletId'];
+//                $droplet_id = ($oApp->checkIDKEY($droplet_id, false, ''));
+                if ( is_readable($sCommand)) { include ( $sCommand ); }
+                $sCommand = $sAddonPath.'/commands/'.'overview.php';
+                if (is_readable($sCommand)) { include ( $sCommand ); }
+                break;
+            case 'save_droplet':
+                $droplet_id = $aRequestVars['droplet_id'];
+            case 'ToggleStatus':
+            case 'delete_droplet':
+                $droplet_id = ($oApp->checkIDKEY($droplet_id, false, ''));
+            case 'restore_droplets':
+            case 'call_help':
+            case 'call_import':
+            case 'select_archiv':
+            case 'delete_archiv':
+                if ( is_readable($sCommand)) { include ( $sCommand ); }
+            default:
+                $sCommand = $sAddonPath.'/commands/'.'overview.php';
+                if (is_readable($sCommand)) { include ( $sCommand ); }
+                break;
+        endswitch;
+        $output = ob_get_clean();
+        if( ($msg = msgQueue::getSuccess()) != '')
+        {
+            $output = $oApp->print_success($msg, $ToolUrl ).$output;
+        }
+        if( ($msg = msgQueue::getError()) != '')
+        {
+            $output = $oApp->print_error($msg, $ToolUrl).$output;
+        }
+        print $output;
+        $oApp->print_footer();
+    } // end executeDropletTool
+/* -------------------------------------------------------------------------------------------- */
+/*                                                                                              */
+/* -------------------------------------------------------------------------------------------- */
+    if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+    if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+    $oApp = new admin('admintools', 'admintools', false);
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $aRequestVars  = (isset(${$requestMethod})) ? ${$requestMethod} : null;
+    executeDropletTool();
+    exit;
+// end of file

Property changes on: trunk/modules/droplets/tool.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/tool_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/droplets/tool_icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/droplets/uninstall.php
===================================================================
--- trunk/modules/droplets/uninstall.php	(nonexistent)
+++ trunk/modules/droplets/uninstall.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // delete tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/droplets/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/droplets/upgrade.php
===================================================================
--- trunk/modules/droplets/upgrade.php	(nonexistent)
+++ trunk/modules/droplets/upgrade.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         droplet
+ * @author          Ruud Eisinga (Ruud) John (PCWacht)
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (defined('WB_PATH') == false) {
+    die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).'');
+} else {
+/* -------------------------------------------------------- */
+    if (!function_exists('insertDropletFile')) {require('droplets.functions.php');}
+    $msg = array();
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        if (!$database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, true )){
+            echo $msg[] = $database->get_error();
+        } else {
+        }
+        if (is_writable(WB_PATH.'/temp/cache')) {
+            Translate::getInstance()->clearCache();
+        }
+        $sBaseDir = realpath(dirname(__FILE__).'/example/');
+        $sBaseDir    = rtrim(str_replace('\\', '/', $sBaseDir), '/').'/';
+        $aDropletFiles = getDropletFromFiles($sBaseDir);
+        $bOverwriteDroplets = false;
+        insertDropletFile($aDropletFiles, $database, $admin,$msg,$bOverwriteDroplets);
+    }
+}

Property changes on: trunk/modules/droplets/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/edit_module_files.php
===================================================================
--- trunk/modules/edit_module_files.php	(nonexistent)
+++ trunk/modules/edit_module_files.php	(revision 2)
@@ -0,0 +1,135 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         modules
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// include required libraries
+if(!defined('WB_PATH'))
+{
+    require(dirname(__DIR__).'/config.php');
+}
+
+// include edit area wrapper script
+   require_once(WB_PATH.'/include/editarea/wb_wrapper_edit_area.php');
+// include functions to edit the optional module CSS files (frontend.css, backend.css)
+   require_once(WB_PATH.'/framework/module.functions.php');
+
+// $admin_header = false;
+    $admin_header = false;
+// Tells script to update when this page was last updated
+   $update_when_modified = false;
+// show the info banner
+//    $print_info_banner = true;
+// Include WB admin wrapper script
+    require(WB_PATH.'/modules/admin.php');
+    if(!$admin->checkFTAN()) {
+      $admin->print_header();
+      $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+    }
+// After check print the header
+$admin->print_header();
+
+   $_action = (isset($_POST['action']) ? strtolower($_POST['action']) : '');
+   $_action = ($_action != 'save' ? 'edit' : 'save');
+   $mod_dir = (isset($_POST['mod_dir']) ? $_POST['mod_dir'] : '');
+   $_edit_file = (isset($_POST['edit_file']) ? $_POST['edit_file'] : '');
+//check if given mod_dir + edit_file is valid path/file
+   $_realpath = realpath(WB_PATH.'/modules/'.$mod_dir.'/'.$_edit_file);
+   if($_realpath){
+   // realpath is a valid path, now test if it's inside WB_PATH
+      $_realpath = str_replace('\\','/', $_realpath);
+      $_fileValid = (strpos($_realpath, (str_replace('\\','/', WB_PATH))) !== false);
+   }
+// check if all needed args are valid
+   if(!$page_id || !$section_id || !$_realpath || !$_fileValid) {
+      die('Invalid arguments passed - script stopped.');
+   }
+
+   // echo registerEditArea('code_area', 'css');
+   echo (function_exists('registerEditArea')) ? registerEditArea('code_area', 'css') : 'none';
+// set default text output if varibles are not defined in the global WB language files
+   if(!isset($TEXT['HEADING_CSS_FILE'])) { $TEXT['HEADING_CSS_FILE'] = 'Actual module file: '; }
+   if(!isset($TEXT['TXT_EDIT_CSS_FILE'])) { $TEXT['TXT_EDIT_CSS_FILE'] = 'Edit the CSS definitions in the textarea below.'; }
+
+// check if action is: save or edit
+   if($_action == 'save') {
+   // SAVE THE UPDATED CONTENTS TO THE CSS FILE
+      $css_content = '';
+      if (isset($_POST['css_data']) && strlen($_POST['css_data']) > 0) {
+         $css_content = stripslashes($_POST['css_data']);
+      }
+      $modFileName = WB_PATH .'/modules/' .$mod_dir .'/' .$_edit_file;
+      if(($fileHandle = fopen($modFileName, 'wb'))) {
+         if(fwrite($fileHandle, $css_content)) {
+            fclose($fileHandle);
+            $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+            exit;
+         }
+         fclose($fileHandle);
+      }
+      $admin->print_error($TEXT['ERROR'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+      exit;
+   } else {
+   // MODIFY CONTENTS OF THE CSS FILE VIA TEXT AREA
+   // check which module file to edit (frontend.css, backend.css or '')
+      $css_file = (in_array($_edit_file, array('frontend.css', 'backend.css'))) ? $_edit_file : '';
+
+   // display output
+      if($css_file == '')   {
+      // no valid module file to edit; display error message and backlink to modify.php
+         echo "<h2>Nothing to edit</h2>";
+         echo "<p>No valid module file exists for this module.</p>";
+         $output  = "<a href=\"#\" onclick=\"javascript: window.location = '";
+         $output .= ADMIN_URL ."/pages/modify.php?page_id=" .$page_id ."'\">back</a>";
+         echo $output;
+      } else {
+      // store content of the module file in variable
+      $css_content = @file_get_contents(WB_PATH .'/modules/' .$mod_dir .'/' .$css_file);
+      // write out heading
+      echo '<h2>' .$TEXT['HEADING_CSS_FILE'] .'"' .$css_file .'"</h2>';
+      // include button to switch between frontend.css and backend.css (only shown if both files exists)
+      toggle_css_file($mod_dir, $css_file);
+      echo '<p>'.$TEXT['TXT_EDIT_CSS_FILE'].'</p>';
+      $sScriptUrl = $_SERVER['SCRIPT_NAME'];
+      // output content of module file to textareas
+     ?><form name="edit_module_file" action="<?php echo $sScriptUrl;?>" method="post" style="margin: 0;">
+        <?php echo $admin->getFTAN(); ?>
+        <input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+        <input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+        <input type="hidden" name="mod_dir" value="<?php echo $mod_dir; ?>" />
+        <input type="hidden" name="edit_file" value="<?php echo $css_file; ?>" />
+        <input type="hidden" name="action" value="save" />
+        <textarea id="code_area" name="css_data" cols="100" rows="25" wrap="VIRTUAL" style="margin:2px;width:100%;">
+<?php echo htmlspecialchars($css_content); ?>
+      </textarea>
+           <table cellpadding="0" cellspacing="0" border="0" width="100%">
+           <tr>
+             <td class="left">
+             <input name="save" type="submit" value="<?php echo $TEXT['SAVE'];?>" style="width: 100px; margin-top: 5px;" />
+             </td>
+              <td class="right">
+               <input type="button" value="<?php echo $TEXT['CANCEL']; ?>"
+                  onclick="javascript: window.location = '<?php echo ADMIN_URL;?>/pages/modify.php?page_id=<?php echo $page_id; ?>';"
+                  style="width: 100px; margin-top: 5px;" />
+              </td>
+           </tr>
+           </table>
+      </form>
+<?php
+   }
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/edit_module_files.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/DiggPagination.php
===================================================================
--- trunk/modules/form/DiggPagination.php	(nonexistent)
+++ trunk/modules/form/DiggPagination.php	(revision 2)
@@ -0,0 +1,130 @@
+<?php
+
+class m_form_DiggPagination
+{
+
+/**
+ * Builds & returns a variable containing the HTML code to display pagination links based on given params
+ *
+ * @param int $page - the current page
+ * @param int $totalitems - the number of items to paginate (not total number of pages)
+ * @param int $limit - the number of items per page
+ * @param int $adjacents - the number of page links to put adjacent to the current page
+ * @param string $targetpage - URL to the web page requiring pagination links
+ * @param string $pagestring - the URL params to pass the new page value e.g. page/ (the number is inserted at the end of the string)
+ * @param string $cssClass - the class of the containing DIV tag for the returned pagination
+ * @return void
+ * @author Stranger Studios, adapted by Rich Milns
+ * @see http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
+ */
+  static public function Pager( $page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = null,
+    $pagestring = "?page=", $cssClass = 'pagination')
+  {
+    $sScriptUrl = $_SERVER['SCRIPT_NAME'];
+    $query_string = '&amp;' . preg_replace( "/page=[0-9]{0,10}&/", "", $_SERVER['QUERY_STRING']) . '#submissions';
+    //$query_string = $_SERVER['QUERY_STRING'];
+
+    //defaults
+    if ( !$adjacents) { $adjacents = 1; }
+    if ( !$limit) { $limit = 15; }
+    if ( !$page) { $page = 1; }
+    if ( !$targetpage) { $targetpage = $sScriptUrl; }
+    if ( !isset( $margin)) { $margin = 5; }
+    if ( !isset( $padding)) { $padding = 1; }
+    //other vars
+    $prev = $page - 1; //previous page is page - 1
+    $next = $page + 1; //next page is page + 1
+    $lastpage = ceil( $totalitems / $limit); //lastpage is = total items / items per page, rounded up.
+    $lpm1 = $lastpage - 1; //last page minus 1
+
+    /*
+    Now we apply our rules and draw the pagination object.
+    We're actually saving the code to a variable in case we want to draw it more than once.
+    */
+    $pagination = "";
+    if ( $lastpage > 1) {
+      $pagination .= "<div class=\"" . $cssClass . "\"";
+      if ( $margin || $padding) {
+        $pagination .= " style=\"";
+        if ( $margin) { $pagination .= "margin: $margin;"; }
+        if ( $padding) { $pagination .= "padding: $padding;"; }
+        $pagination .= "\"";
+      }
+      $pagination .= ">";
+
+      //previous button
+      if ( $page > 1) {
+        $pagination .= "<a href=\"$targetpage$pagestring$prev$query_string\">« prev</a>";
+      } else {
+        $pagination .= "<span class=\"disabled\">« prev</span>";
+      }
+
+      //pages
+      if ( $lastpage < ( $adjacents * 2) + 7) //not enough pages to bother breaking it up
+        {
+        for ( $counter = 1; $counter <= $lastpage; $counter++) {
+          if ( $counter == $page) {
+            $pagination .= "<span class=\"current\">$counter</span>";
+          } else {
+            $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . $query_string . "\">$counter</a>";
+          }
+        }
+      } elseif ( $lastpage >= ( $adjacents * 2) + 7) //enough pages to hide some
+      {
+        //close to beginning; only hide later pages
+        if ( $page < 1 + ( $adjacents * 3)) {
+          for ( $counter = 1; $counter < 4 + ( $adjacents * 2); $counter++) {
+            if ( $counter == $page) {
+              $pagination .= "<span class=\"current\">$counter</span>";
+            } else {
+              $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . $query_string . "\">$counter</a>";
+            }
+          }
+          $pagination .= "<span class=\"elipses\">...</span>";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . $query_string . "\">$lpm1</a>";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . $query_string . "\">$lastpage</a>";
+        }
+        //in middle; hide some front and some back
+        elseif ( $lastpage - ( $adjacents * 2) > $page && $page > ( $adjacents * 2)) {
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . "1$query_string\">1</a>";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . "2$query_string\">2</a>";
+          $pagination .= "<span class=\"elipses\">...</span>";
+          for ( $counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
+            if ( $counter == $page) {
+              $pagination .= "<span class=\"current\">$counter</span>";
+            } else {
+              $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . $query_string . "\">$counter</a>";
+            }
+          }
+          $pagination .= "...";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . $query_string . "\">$lpm1</a>";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . $query_string . "\">$lastpage</a>";
+        }
+        //close to end; only hide early pages
+        else {
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . "1$query_string\">1</a>";
+          $pagination .= "<a href=\"" . $targetpage . $pagestring . "2$query_string\">2</a>";
+          $pagination .= "<span class=\"elipses\">...</span>";
+          for ( $counter = $lastpage - ( 1 + ( $adjacents * 3)); $counter <= $lastpage; $counter++) {
+            if ( $counter == $page) {
+              $pagination .= "<span class=\"current\">$counter</span>";
+            } else {
+              $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . $query_string . "\">$counter</a>";
+            }
+          }
+        }
+      }
+
+      //next button
+      if ( $page < $lastpage - 0) {
+        $pagination .= "<a href=\"" . $targetpage . $pagestring . $next . $query_string . "\">next »</a>";
+      } else {
+        $pagination .= "<span class=\"disabled\">next »</span>";
+      }
+      $pagination .= "</div>\n";
+    }
+
+    return $pagination;
+
+  }
+}

Property changes on: trunk/modules/form/DiggPagination.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/README.de.txt
===================================================================
--- trunk/modules/form/README.de.txt	(nonexistent)
+++ trunk/modules/form/README.de.txt	(revision 2)
@@ -0,0 +1,19 @@
+
+Maileinstellungen in Optionen ( nur vom Superadmin einzurichten )
+-----------------------------------------------------------------
+Standard "VON" Adresse: SERVER_EMAIL
+Standard Absender Name: WBMAILER_DEFAULT_SENDERNAME
+
+E-Mail Optionen in Formular Einstellungen
+-----------------------------------------
+E-Mail Empfänger: wenn leer dann wird automatisch mit Superadmin (user_id==1) E-Mail vorbelegt
+Angezeigter Name: Benutzerdefiniert oder WBMAILER_DEFAULT_SENDERNAME
+E-Mail Betreff:   Benutzerdefiniert oder wenn leer dann senden mit $MOD_FORM['EMAIL_SUBJECT']
+
+E-Mail Bestätigung in Formular Einstellungen
+--------------------------------------------
+E-Mail Empfänger: Auswahlliste, wenn Auswahl "keine"" dann keine Bestätigungs E-Mail an Sender
+Angezeigter Name: Benutzerdefiniert oder WBMAILER_DEFAULT_SENDERNAME (Eintrag unter Optionen Maileinstellungen)
+E-Mail Betreff:   Benutzerdefiniert oder wenn leer dann senden mit $MOD_FORM['SUCCESS_EMAIL_SUBJECT']
+E-Mail Text:      Benutzerdefiniert oder wenn leer dann senden mit $MOD_FORM['SUCCESS_EMAIL_TEXT'].$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED']
+
Index: trunk/modules/form/add.php
===================================================================
--- trunk/modules/form/add.php	(nonexistent)
+++ trunk/modules/form/add.php	(revision 2)
@@ -0,0 +1,84 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://wwebsitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    $table_name = TABLE_PREFIX.'mod_form_settings';
+    $field_name = 'perpage_submissions';
+    $description = "INT NOT NULL DEFAULT '10' AFTER `max_submissions`";
+    if(!$database->field_exists($table_name,$field_name)) {
+        $database->field_add($table_name, $field_name, $description);
+    }
+
+// Insert an extra rows into the database
+    $header     = '<table class="frm-field_table">'.PHP_EOL
+                . '    <tbody>'.PHP_EOL;
+    $field_loop = '        <tr>'.PHP_EOL
+                . '            <td class="frm-field_title">{TITLE}{REQUIRED}:</td>'.PHP_EOL
+                . '            <td>{FIELD}</td>'.PHP_EOL
+                . '        </tr>';
+    $footer     = '        <tr>'.PHP_EOL
+                . '            <td>&#32;</td>'.PHP_EOL
+                . '            <td>'.PHP_EOL
+                . '                <input type="submit" name="submit" value="{SUBMIT_FORM}" />'.PHP_EOL
+                . '            </td>'.PHP_EOL
+                . '        </tr>'.PHP_EOL
+                . '    </tbody>'.PHP_EOL
+                . '</table>'.PHP_EOL;
+
+    $email_to = '';
+    $email_from = '';
+    $email_fromname = '';
+    $email_subject = '';
+    $success_page = 0;
+    $success_email_to = '';
+    $success_email_from = '';
+    $success_email_fromname = '';
+    $success_email_text = '';
+    // $success_email_text = addslashes($success_email_text);
+    $success_email_subject = '';
+    $max_submissions = 50;
+    $stored_submissions = 50;
+    $perpage_submissions = 10;
+    $use_captcha = true;
+
+    // Insert settings
+    $sql  = 'INSERT INTO  `'.TABLE_PREFIX.'mod_form_settings` SET '
+          . '`section_id` = \''.$database->escapeString($section_id).'\', '
+          . '`page_id` = \''.$database->escapeString($page_id).'\', '
+          . '`header` = \''.$database->escapeString($header).'\', '
+          . '`field_loop` = \''.$database->escapeString($field_loop).'\', '
+          . '`footer` = \''.$database->escapeString($footer).'\', '
+          . '`email_to` = \''.$database->escapeString($email_to).'\', '
+          . '`email_from` = \''.$database->escapeString($email_from).'\', '
+          . '`email_fromname` = \''.$database->escapeString($email_fromname).'\', '
+          . '`email_subject` = \''.$database->escapeString($email_subject).'\', '
+          . '`success_page` = \''.$database->escapeString($success_page).'\', '
+          . '`success_email_to` = \''.$database->escapeString($success_email_to).'\', '
+          . '`success_email_from` = \''.$database->escapeString($success_email_from).'\', '
+          . '`success_email_fromname` = \''.$database->escapeString($success_email_fromname).'\', '
+          . '`success_email_text` = \''.$database->escapeString($success_email_text).'\', '
+          . '`success_email_subject` = \''.$database->escapeString($success_email_subject).'\', '
+          . '`max_submissions` = \''.$database->escapeString($max_submissions).'\', '
+          . '`stored_submissions` = \''.$database->escapeString($stored_submissions).'\', '
+          . '`perpage_submissions` = \''.$database->escapeString($perpage_submissions).'\', '
+          . '`use_captcha` = \''.$database->escapeString($use_captcha).'\' ';
+   if($database->query($sql)) {
+
+    }
+}

Property changes on: trunk/modules/form/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/add_field.php
===================================================================
--- trunk/modules/form/add_field.php	(nonexistent)
+++ trunk/modules/form/add_field.php	(revision 2)
@@ -0,0 +1,58 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$sBacklink = ADMIN_URL.'/pages/modify.php?page_id='.$page_id;
+if (!$admin->checkFTAN( $_SERVER["REQUEST_METHOD"] ))
+{
+//    $admin->print_header();
+    $admin->print_error($_SERVER["REQUEST_METHOD"].':: '.$MESSAGE['GENERIC_SECURITY_ACCESS'], $sBacklink);
+}
+//$aFtan = $admin->getFTAN('');
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+// Get new order
+$order = new order(TABLE_PREFIX.'mod_form_fields', 'position', 'field_id', 'section_id');
+$position = $order->get_new($section_id);
+$field_id = 0;
+try {
+// Insert new row into database
+ $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_form_fields` SET '
+      . '`section_id` = '.$database->escapeString($section_id).', '
+      . '`page_id` = '.$database->escapeString($page_id).', '
+      . '`position` = '.$database->escapeString($position).', '
+      . '`title` = \'\', '
+      . '`type` = \'\', '
+      . '`required` = 0, '
+      . '`value` = \'\', '
+      . '`extra` = \'\' ';
+    if(!$database->query($sql)) {
+        $admin->print_error($database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+    }
+    $field_id = $database->getLastInsertId();
+} catch(ErrorMsgException $e) {
+    $admin->print_error($database->get_error(), WB_URL.'/modules/form/modify_field.php?page_id='.$page_id.'&section_id='.$section_id.'&field_id='.$admin->getIDKEY($field_id));
+}
+
+$admin->print_success($TEXT['SUCCESS'], WB_URL.'/modules/form/modify_field.php?page_id='.$page_id.'&section_id='.$section_id.'&field_id='.$admin->getIDKEY($field_id));
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/add_field.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/backend.css
===================================================================
--- trunk/modules/form/backend.css	(nonexistent)
+++ trunk/modules/form/backend.css	(revision 2)
@@ -0,0 +1,161 @@
+.frm-table { border-collapse: collapse; width: 100%; white-space: nowrap; }
+.frm-setting_name { vertical-align :top; width :25%; white-space :nowrap; }
+.frm-setting_value { vertical-align :top; width :70%; line-height: 1.5; }
+.frm-newsection { border-top :1px dashed #ffffff; }
+.frm-warning { background :#FFEEEE; border :0.1em #884444 solid; color :#E10000; margin-bottom :1em; padding :0.5em 2.8em; font-size :96.5%; font-weight :normal; }
+.frm-note { background :#EEFFEE; border :0.2em #448844 solid; color :#004400; margin-bottom :1em; padding :0.8em; font-size :1.2em; font-weight :bold; }
+table.form tbody tr { line-height: 2.125; }
+.frm-setting_name,
+table.form tbody td.setting_name {
+  color: #0d4b6e;
+  font-weight: bold;
+  min-width: 200px;
+  padding-right: 0.525em;
+  text-align: right;
+  vertical-align: top;
+  width: 20%;
+}
+table.form caption.form-header {
+  background: #215a7a none repeat scroll 0 0;
+  color: #fff;
+  font-size: 1.425em;
+  height: 2.225em;
+  text-align: left;
+}
+table.form caption.form-header {
+  line-height: 2.225em;
+  margin: 0 0 0.825em;
+  white-space: normal;
+  padding-left: 0.925em;
+}
+/*
+.row_a { background : transparent; }
+.row_b { background : #dfebff; }
+  The definitions below provide the style for the edit CSS button
+  Required CSS class name: input.mod_moduledirectory_edit_css
+*/
+table#frm-ScrollTable { text-align :left; font-size :12px; border :1px ridge #dadada; font-family :verdana; background :transparent; color :#0066ff; }
+input.mod_form_edit_css { color :#000000; background-color :#f0f0f0; border :1px solid #808080; padding :2px; margin :0; margin-left :625px; margin-top :-20px; margin-bottom :5px; width :110px; }
+table.mod_form,
+table#frm-ScrollTable { border-collapse: collapse; width: 100%; }
+table#frm-ScrollTable thead  { cursor :pointer; width: 100%; }
+
+table#frm-ScrollTable thead tr,
+table#frm-ScrollTable tfoot tr { font-weight: bold; font-size: 1.2525em; height: 1.925em; padding: 0.525em 0; background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #46919a; color: #fff; }
+
+table.mod_form { border-collapse: collapse; width: 100%; }
+table.mod_form td form.mod_form { padding: 0 0.325em; }
+table.mod_form td:first-child { text-align:right; padding: 0 0.525em; }
+/**/
+table#frm-ScrollTable {
+    color: #333;
+    font-family: Helvetica, Arial, sans-serif;
+    width: 100%;
+    /* Table reset stuff */
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+tbody.scrolling {
+    max-height: 21.925em;
+    overflow: auto;
+    display: inline-block;
+    width: 100%;
+}
+td.frm-Scroll, th.frm-Scroll {
+    border: 0 none;
+    height: 2.255em;
+}
+th.frm-Scroll {
+    /* Gradient Background
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+*/
+    background: #507279;
+    color: #FFF;
+    font-weight: bold;
+   /* height: 40px;*/
+}
+td.frm-Scroll { background: #FFFFFF; text-align: left; }
+/* Zebra Stripe Rows */
+tr.frm-Scroll td { background: #FFFFFF; }
+tr.frm-Scroll:nth-child(odd) td { background: #e8e8e8; }
+tr.frm-Scroll:hover td { background: #FBFCE0; }
+/* First-child blank cells! */
+ tr.frm-Scroll td.frm-Scroll:first-child, tr.frm-Scroll th.frm-Scroll:first-child {
+   /* background: none;*/
+    font-size: 0.9525em;
+    text-align: right;
+   /* padding-right: 5px;*/
+    width: 100%;
+}
+/* Add border-radius to specific cells! */
+ tr.frm-Scroll:first-child th.frm-Scroll:nth-child(2) {
+    border-radius: 5px 0 0 0;
+}
+tr.frm-Scroll:first-child th.frm-Scroll:last-child {
+    border-radius: 0 5px 0 0;
+}
+
+/*****************************************/
+thead.frm-Scroll { display: table; float: left; width: 100%; }
+/*
+thead th.frm-Scroll {
+    text-align: left;
+}
+tbody.scrolling {
+    float: left;
+    width: 100%;
+}
+tbody tr.frm-Scroll {
+    display: table;
+    width: 100%;
+}
+*/
+table.mod_form td a {
+    background:transparent none 0 0 no-repeat;
+    color:#000;
+    font-weight:bold;
+    opacity:.7;
+    padding: 3px 0 3px 6px;
+    -webkit-transition:all .2s ease-in-out;
+    -moz-transition:all .2s ease-in-out;
+    }
+table.mod_form thead {
+/*
+    background:#215a7a;
+    background: linear-gradient(#215a7a 0%, #507279 100%);
+*/
+    background: #507279;
+    color:#fff;
+}
+table.mod_form tr { background: #46919A; }
+
+table.mod_form th {
+/*
+    background:#215a7a;
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+
+*/
+    border-bottom:1px solid rgba(255,255,255,.7);
+    -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    -moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    -o-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    padding:6px 10px;
+    color:#fff;
+    }
+
+table.mod_form td {
+    border-bottom:1px solid #fafafa;
+    border-bottom:1px solid rgba(0,0,0,.05);
+   /* padding:6px 10px;*/
+    color:rgba(0,0,0,.7);
+}
+
+table.mod_form tbody tr { line-height: 1.225em; background: #e8e8e8; }
+table.mod_form tbody tr:nth-child(odd) { background: #FFFFFF; }
+table.mod_form tbody tr:hover { background: #FBFCE0; }
+
+table#frm-ScrollTable tbody tr {  }
+table#frm-ScrollTable tbody tr { line-height: 1.225em; background: #e8e8e8;  }
+table#frm-ScrollTable tbody tr:nth-child(odd) { background: #FFFFFF; }
+table#frm-ScrollTable tbody tr:hover { background: #FBFCE0; }
Index: trunk/modules/form/css/512megasStyle.css
===================================================================
--- trunk/modules/form/css/512megasStyle.css	(nonexistent)
+++ trunk/modules/form/css/512megasStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/* 512megasStyle   512megas.com */
+    div.pagination { padding :3px; margin :3px; text-align :left; }
+    div.pagination a { border :1px solid #dedfde; margin-right :3px; padding :2px 6px; background-position :bottom; text-decoration :none; color :#99210b; }
+    div.pagination a:hover, div.pagination a:active { border :1px solid #000000; background-image :none; background-color :#777777; color :#ffffff; }
+    div.pagination span.current { border :1px solid #000; margin-right :3px; padding :2px 6px; font-weight :bold; color :#000; }
+    div.pagination span.disabled { margin-right :3px; padding :2px 6px; color :#adaaad; }
Index: trunk/modules/form/css/Black-RedStyle.css
===================================================================
--- trunk/modules/form/css/Black-RedStyle.css	(nonexistent)
+++ trunk/modules/form/css/Black-RedStyle.css	(revision 2)
@@ -0,0 +1,11 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+div.pagination { font-size :11px; font-family :Tahoma, Arial, Helvetica, Sans-serif; background-color :#3e3e3e; color :#ffffff; }
+div.pagination a { padding :2px 5px 2px 5px; margin :2px; background-color :#3e3e3e; text-decoration :none; /* no underline */ color :#ffffff; }
+div.pagination a:hover, div.pagination a:active { background-color :#ec5210; color :#ffffff; }
+div.pagination span.current { padding :2px 5px 2px 5px; margin :2px; font-weight :bold; background-color :#313131; color :#ffffff; }
+div.pagination span.disabled { padding :2px 5px 2px 5px; margin :2px; background-color :#3e3e3e; color :#868686; }
Index: trunk/modules/form/css/DiggStyle.css
===================================================================
--- trunk/modules/form/css/DiggStyle.css	(nonexistent)
+++ trunk/modules/form/css/DiggStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*CSS Digg style pagination*/
+    div.pagination { padding :3px; margin :3px; text-align :left; }
+    div.pagination a { padding :2px 5px 2px 5px; margin :2px; border :1px solid #aaaadd; text-decoration :none; /* no underline */ color :#000099; }
+    div.pagination a:hover, div.digg a:active { border :1px solid #000099; color :#000000; }
+    div.pagination span.current { padding :2px 5px 2px 5px; margin :2px; border :1px solid #000099; font-weight :bold; background-color :#000099; color :#ffffff; }
+    div.pagination span.disabled { padding :2px 5px 2px 5px; margin :2px; border :1px solid #eeeeee; color :#dddddd; }
Index: trunk/modules/form/css/FlickrStyle.css
===================================================================
--- trunk/modules/form/css/FlickrStyle.css	(nonexistent)
+++ trunk/modules/form/css/FlickrStyle.css	(revision 2)
@@ -0,0 +1,14 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+http://www.mis-algoritmos.com/some-styles-for-your-pagination
+http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*CSS FlickrStyle pagination*/
+    div.pagination { padding :3px; margin :3px; text-align :left; }
+    div.pagination a { border :1px solid #dedfde; margin-right :3px; padding :2px 6px; background-position :bottom; text-decoration :none; color :#0061de; }
+    div.pagination a:hover, div.meneame a:active { border :1px solid #000000; background-image :none; background-color :#0061de; color :#ffffff; }
+    div.pagination span.current { margin-right :3px; padding :2px 6px; font-weight :bold; color :#ff0084; }
+    div.pagination span.disabled { margin-right :3px; padding :2px 6px; color :#adaaad; }
Index: trunk/modules/form/css/GrayRedStyle.css
===================================================================
--- trunk/modules/form/css/GrayRedStyle.css	(nonexistent)
+++ trunk/modules/form/css/GrayRedStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*GrayRedStyle Pagination*/
+div.pagination { font-size :11px; font-family :Tahoma, Arial, Helvetica, Sans-serif; padding :2px; background-color :#c1c1c1; }
+div.pagination a { padding :2px 5px 2px 5px; margin :2px; background-color :#c1c1c1; text-decoration :none; /* no underline */ color :#000000; }
+div.pagination a:hover, div.pagination a:active { background-color :#99ffff; color :#000000; }
+div.pagination span.current { padding :2px 5px 2px 5px; margin :2px; font-weight :bold; background-color :#ffffff; color :#303030; }
+div.pagination span.disabled { padding :2px 5px 2px 5px; margin :2px; background-color :#c1c1c1; color :#797979; }
Index: trunk/modules/form/css/MsdnSearchStyle.css
===================================================================
--- trunk/modules/form/css/MsdnSearchStyle.css	(nonexistent)
+++ trunk/modules/form/css/MsdnSearchStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*CSS MsdnSearchStyle pagination*/
+div.pagination { font-family :Verdana,Tahoma,Arial,Helvetica,Sans-Serif; font-size :13px; text-align :left; padding :4px 6px 4px 0; background-color :#ffffff; color :#313031; }
+div.pagination a { color :#0030ce; text-decoration :none; padding :5px 6px 4px 5px; margin :0 3px 0 3px; border :1px solid #b7d8ee; }
+div.pagination a:hover, div.pagination a:active { color :#0066a7; border :1px solid #b7d8ee; background-color :#d2eaf6; }
+div.pagination span.current { padding :5px 6px 4px 5px; margin :0 3px 0 3px; border :1px solid #b7d8ee; font-weight :bold; color :#444444; background-color :#d2eaf6; }
+div.pagination span.disabled { display :none; }
Index: trunk/modules/form/css/QuotesStyle.css
===================================================================
--- trunk/modules/form/css/QuotesStyle.css	(nonexistent)
+++ trunk/modules/form/css/QuotesStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*QuotesStyle*/
+div.pagination { padding :3px; margin :3px; text-align :left; }
+div.pagination a { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #dddddd; text-decoration :none; color :#aaaaaa; }
+div.pagination a:hover, div.pagination a:active { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #a0a0a0; }
+div.pagination span.current { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #e0e0e0; font-weight :bold; background-color :#f0f0f0; color :#aaaaaa; }
+div.pagination span.disabled { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #f3f3f3; color :#cccccc; }
Index: trunk/modules/form/css/SabrosusStyle.css
===================================================================
--- trunk/modules/form/css/SabrosusStyle.css	(nonexistent)
+++ trunk/modules/form/css/SabrosusStyle.css	(revision 2)
@@ -0,0 +1,12 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*CSS SabrosusStyle pagination*/
+div.pagination { padding :3px; margin :3px; text-align :left; }
+div.pagination a { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #9aafe5; text-decoration :none; color :#2e6ab1; }
+div.pagination a:hover, div.pagination a:active { border :1px solid #2b66a5; color :#000000; background-color :#ffffe0; }
+div.pagination span.current { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #000080; font-weight :bold; background-color :#2e6ab1; color :#ffffff; }
+div.pagination span.disabled { padding :2px 5px 2px 5px; margin-right :2px; border :1px solid #929292; color :#929292; }
Index: trunk/modules/form/css/YahooStyle.css
===================================================================
--- trunk/modules/form/css/YahooStyle.css	(nonexistent)
+++ trunk/modules/form/css/YahooStyle.css	(revision 2)
@@ -0,0 +1,16 @@
+/*
+Plugin Name: WP-Digg Style Paginator
+Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
+Author: Victor De la Rocha
+Author URI: http://www.mis-algoritmos.com
+*/
+/*CSS Yahoo new version style pagination*/
+	div.pagination { padding :3px; margin :3px; text-align :left; font-family :Tahoma,Helvetica,sans-serif; font-size :.85em; }
+	div.pagination a { border :1px solid #ccdbe4; margin-right :3px; padding :2px 8px; background-position :bottom; text-decoration :none; color :#0061de; }
+	div.pagination a:hover, div.pagination a:active { border :1px solid #2b55af; background-image :none; background-color :#3666d4; color :#ffffff; }
+	div.pagination span.current { margin-right :3px; padding :2px 6px; font-weight :bold; color :#000000; }
+	div.pagination span.disabled { display :none; }
+	div.pagination a.next{ border :2px solid #ccdbe4; margin :0 0 0 10px; }
+	div.pagination a.next:hover{ border :2px solid #2b55af; }
+	div.pagination a.prev{ border :2px solid #ccdbe4; margin :0 10px 0 0; }
+	div.pagination a.prev:hover{ border :2px solid #2b55af; }
Index: trunk/modules/form/css/bar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/form/css/bar.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/form/css/invbar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/form/css/invbar.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/form/css/meneame.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/modules/form/css/meneame.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/modules/form/delete.php
===================================================================
--- trunk/modules/form/delete.php	(nonexistent)
+++ trunk/modules/form/delete.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    // Delete page from mod_wysiwyg
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_form_fields` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_form_settings` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+}

Property changes on: trunk/modules/form/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/delete_field.php
===================================================================
--- trunk/modules/form/delete_field.php	(nonexistent)
+++ trunk/modules/form/delete_field.php	(revision 2)
@@ -0,0 +1,50 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Include WB admin wrapper script
+$update_when_modified = true; // Tells script to update when this page was last updated
+require(WB_PATH.'/modules/admin.php');
+
+// Get id
+$field_id = intval($admin->checkIDKEY('field_id', false, 'GET'));
+if (!$field_id) {
+ $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+
+// Delete row
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_form_fields` '
+          . 'WHERE `field_id` = '.$database->escapeString($field_id);
+    $database->query($sql);
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+
+// Create new order object an reorder
+$order = new order(TABLE_PREFIX.'mod_form_fields', 'position', 'field_id', 'section_id');
+
+if(!$order->clean($section_id)) {
+    $admin->print_error($database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id);
+} else {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/delete_field.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/delete_submission.php
===================================================================
--- trunk/modules/form/delete_submission.php	(nonexistent)
+++ trunk/modules/form/delete_submission.php	(revision 2)
@@ -0,0 +1,45 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description     
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Include WB admin wrapper script
+$update_when_modified = true; // Tells script to update when this page was last updated
+require(WB_PATH.'/modules/admin.php');
+
+// Get id
+$submission_id = intval($admin->checkIDKEY('submission_id', false, 'GET'));
+if (!$submission_id) {
+//    $admin->clearIDKEY();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Delete row
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_form_submissions` '
+          . 'WHERE `submission_id` = '.$database->escapeString($submission_id);
+    $database->query($sql);
+//    $admin->clearIDKEY();
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+} else {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/delete_submission.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/frontend.css
===================================================================
--- trunk/modules/form/frontend.css	(nonexistent)
+++ trunk/modules/form/frontend.css	(revision 2)
@@ -0,0 +1,37 @@
+.frm-field_table { width :100%; vertical-align :middle; table-layout :auto; border-collapse :separate; border :none; }
+.frm-field_table tbody { font-size :100%; padding :0.4em 0.2em; }
+.frm-field_table tbody td { border :none; }
+.frm-field_table tbody td.field_heading,
+.frm-field_table tbody td.frm-field_heading { border-bottom :1px solid #666666; border-top :1px solid #666666; color :#666666; font-weight :bold; background: #DADADA; }
+.frm-formular { float: none; }
+.frm-required { color :#FF0000; }
+.frm-field_title { width :25%; vertical-align :top; white-space :nowrap; text-align :right; }
+.frm-textfield { width : 100%; }
+.frm-textarea { width :100%; height :100px; }
+.frm-select { width :50%; }
+.frm-select option { width :95%; }
+.frm-field_checkbox { cursor :pointer; width : 1.025em; vertical-align :top; }
+.frm-checkbox_label { cursor :pointer; vertical-align :middle; }
+.frm-radio_label { cursor :pointer; }
+.frm-email { width : 100%; }
+.frm-field_heading label { padding-left: 0.825em; }
+/*** Don't remove the class nixhier, this is required for ASP ***/
+.nixhier,
+.frm-nixhier { display :none; }
+.frm-submission { margin :0 auto; position :relative; width :auto; }
+.print-email { font-size :0.8em; color :#000000; margin :10px auto; }
+.frm-warning { background :#FFEEEE; border :0.1em #884444 solid; color :#E10000; margin-bottom :1em; padding :0.5em 2.8em; font-size :96.5%; font-weight :normal; }
+.frm-note { background :#EEFFEE; border :0.2em #448844 solid; color :#004400; margin-bottom :1em; padding :0.8em; font-size :1.2em; font-weight :bold; }
+.previewprinttop { text-align :right; }
+.previewprinttop img { padding-left :1em; }
+.frm-thankyou { }
+.frm-field_table tbody tr { line-height: 1.955; height: 1.925em; }
+.frm-warning h3 { font-size :120%; line-height :1.3em; margin :0.1em; padding :0.1em; }
+ .frm-warning ol { color :#333333; margin :0.1em; }
+.frm-field_table input[type="submit"] { padding :0.1em 0.8em; }
+ .frm-warning a,
+ p.frm-warning a { background :transparent; padding-left :0; }
+fieldset.frm-fieldset { border :none; margin :0 auto; padding :0%; width: 90%; }
+.frm-warning-success-email { display :block; }
+.previewPrintTop { float :right; }
+.previewPrintTop span { display : none; }
Index: trunk/modules/form/htt/OverviewSubmission.htt
===================================================================
--- trunk/modules/form/htt/OverviewSubmission.htt	(nonexistent)
+++ trunk/modules/form/htt/OverviewSubmission.htt	(revision 2)
@@ -0,0 +1,53 @@
+<!-- BEGIN main_block -->
+<br /><br />
+<h2 id="submissions">{TEXT_SUBMISSIONS}</h2>
+<table class="">
+<thead>
+<tr style="background-color: #dddddd; font-weight: bold;">
+    <th width="23" style="text-align: center;">&nbsp;</th>
+    <th width="33" style="text-align: right;"> ID </th>
+    <th width="200" style="padding-left: 10px;">{TEXT_SUBMITTED}</th>
+    <th width="200" style="padding-left: 10px;">{TEXT_USER}</th>
+    <th width="350">{TEXT_EMAIL} {MOD_FORM_FROM}</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+</tr>
+</thead>
+<tfoot class="frm-pagination">
+    <tr style="background-color: #dddddd; font-weight: bold;">
+        <td colspan="9" style="text-align: left;">
+{PAGINATION}
+        </td>
+    </tr>
+</tfoot>
+<tbody>
+<!-- BEGIN loop_submmission_block -->
+<tr class="row_{ROW_BIT}">
+    <td width="20" style="padding-left: 5px;text-align: center;">
+        <a href="{WB_URL}/modules/form/view_submission.php?{QUERYSTR}" title="{TEXT_OPEN}">
+            <img src="{THEME_URL}/images/folder_16.png" alt="{TEXT_OPEN}" />
+        </a>
+    </td>
+    <td width="30" style="padding-right: 5px;text-align: right;">{SUBMISSION_ID}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_CREATE_WHEN}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_BY}</td>
+    <td width="350">{SUBMISSION_EMAIL}</td>
+    <td width="20" style="text-align: center;">&nbsp;</td>
+    <td width="20">&nbsp;</td>
+    <td width="20" style="text-align: center;">
+        <a href="javascript:confirm_link('{TEXT_ARE_YOU_SURE}','{WB_URL}/modules/form/delete_submission.php?{QUERYSTR}');" title="{TEXT_DELETE}">
+            <img src="{THEME_URL}/images/delete_16.png" alt="X" />
+        </a>
+    </td>
+    <td width="20">&nbsp;</td>
+</tr>
+<!-- END loop_submmission_block -->
+
+<tr><td colspan="9">{TEXT_NONE_FOUND}</td></tr>
+
+</tbody>
+</table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/htt/print.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/form/htt/print.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/form/htt/submessage.htt
===================================================================
--- trunk/modules/form/htt/submessage.htt	(nonexistent)
+++ trunk/modules/form/htt/submessage.htt	(revision 2)
@@ -0,0 +1,41 @@
+<!-- BEGIN main_block -->
+
+<div class="previewPrintTop">
+
+<a title="{TEXT_PRINT_PAGE} ({TEXT_REQUIRED_JS})" href="javascript:window.print()">
+<span>{TEXT_PRINT_PAGE}</span><img width="16" height="14" alt="" src="{MODULE_URL}/htt/print.gif" />
+</a>
+</div>
+<br /><hr />
+<table class="frm-submission print-email">
+    <thead>
+        <tr class="frm-thankyou">
+            <td colspan="2">{SUCCESS_EMAIL_TEXT}<br /><hr /></td>
+        </tr>
+    </thead>
+    <tbody class="frm-tbody">
+        <tr class=" {NIX_HIER}">
+           <td colspan="2" ><p class="frm-warning frm-warning-success-email">{SUCCESS_PRINT}</p></td>
+        </tr>
+        <tr class="frm-submission_submission_id">
+            <td>{TEXT_SUBMISSION_ID}: {submission_submission_id}</td>
+            <td></td>
+        </tr>
+        <tr class="frm-submission_submitted_when">
+            <td>{TEXT_SUBMITTED}: {submission_submitted_when}</td>
+            <td></td>
+        </tr>
+        <tr class="frm-user_display_name">
+            <td>{TEXT_USER}: {user_display_name}</td>
+            <td> </td>
+        </tr>
+        <tr class="frm-hr">
+            <td colspan="2"><hr /></td>
+        </tr>
+        <tr class="frm-submission_body">
+            <td colspan="2">{submission_body}</td>
+        </tr>
+    </tbody>
+</table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/index.php
===================================================================
--- trunk/modules/form/index.php	(nonexistent)
+++ trunk/modules/form/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description     
+ */
+
+header('Location: ../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/form/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/info.php
===================================================================
--- trunk/modules/form/info.php	(nonexistent)
+++ trunk/modules/form/info.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+$module_directory = 'form';
+$module_name = 'Form Modul v3.1.4';
+$module_function = 'page';
+$module_version = '3.1.4';
+$module_platform = '2.10.0';
+$module_author = 'Ryan Djurovich & Rudolph Lartey - additions John Maats - PCWacht, dev-team';
+$module_license = 'GNU General Public License';
+$module_description = 'This module allows you to create customised online forms, such as a feedback form. '.
+'Thank-you to Rudolph Lartey who help enhance this module, providing code for extra field types, etc.';

Property changes on: trunk/modules/form/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/install-struct.sql
===================================================================
--- trunk/modules/form/install-struct.sql	(nonexistent)
+++ trunk/modules/form/install-struct.sql	(revision 2)
@@ -0,0 +1,85 @@
+-- --------------------------------------------------------
+-- SQL-Import-Struct-File
+-- generated with ConvertDump Version 0.2.1
+-- WebsiteBaker Edition
+-- Creation time: Tue, 03 Feb 2015 11:25:46 +0100
+-- --------------------------------------------------------
+-- phpMyAdmin SQL Dump
+-- version 3.5.7
+-- http://www.phpmyadmin.net
+--
+-- Host: 127.0.0.1
+-- Erstellungszeit: 03. Feb 2015 um 11:14
+-- Server Version: 5.5.27
+-- PHP-Version: 5.4.19
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `{TABLE_PREFIX}mod_form_fields`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_form_fields`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_form_fields` (
+  `field_id` int(11) NOT NULL AUTO_INCREMENT,
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `position` int(11) NOT NULL DEFAULT '0',
+  `title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `type` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `required` int(11) NOT NULL DEFAULT '0',
+  `value` text{FIELD_COLLATION} NOT NULL,
+  `extra` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`field_id`)
+){TABLE_ENGINE=MyISAM};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `{TABLE_PREFIX}mod_form_settings`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_form_settings`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_form_settings` (
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `header` text{FIELD_COLLATION} NOT NULL,
+  `field_loop` text{FIELD_COLLATION} NOT NULL,
+  `footer` text{FIELD_COLLATION} NOT NULL,
+  `email_to` text{FIELD_COLLATION} NOT NULL,
+  `email_from` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `email_fromname` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `email_subject` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `success_page`  int(11) NOT NULL DEFAULT '0',
+  `success_email_to` text{FIELD_COLLATION} NOT NULL,
+  `success_email_from` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `success_email_fromname` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `success_email_text` text{FIELD_COLLATION} NOT NULL,
+  `success_email_subject` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `stored_submissions` int(11) NOT NULL DEFAULT '0',
+  `max_submissions` int(11) NOT NULL DEFAULT '0',
+  `perpage_submissions` int(11) NOT NULL DEFAULT '10',
+  `use_captcha` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE=MyISAM};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `{TABLE_PREFIX}mod_form_submissions`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_form_submissions`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_form_submissions` (
+  `submission_id` int(11) NOT NULL AUTO_INCREMENT,
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `submitted_when` int(11) NOT NULL DEFAULT '0',
+  `submitted_by` int(11) NOT NULL DEFAULT '0',
+  `body` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`submission_id`)
+){TABLE_ENGINE=MyISAM};
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+-- --------------------------------------------------------
+-- END OF SQL-Import-Struct-File
+-- --------------------------------------------------------

Property changes on: trunk/modules/form/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/install.php
===================================================================
--- trunk/modules/form/install.php	(nonexistent)
+++ trunk/modules/form/install.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         form
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/form/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/DA.php
===================================================================
--- trunk/modules/form/languages/DA.php	(nonexistent)
+++ trunk/modules/form/languages/DA.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modul Description
+$module_description = 'Dette modul giver mulighed for at lave tilpassede online formularer, f.eks. en kontaktformular. Tak til  Rudolph Lartey som har hjulpet med at forbedre dette modul ved at lave kode for ekstra felttyper osv.';
+
+//Variables for the  backend
+$MOD_FORM['SETTINGS'] = 'Form Settings';
+$MOD_FORM['CONFIRM'] = 'Confirmation';
+$MOD_FORM['SUBMIT_FORM'] = 'Submit';
+$MOD_FORM['EMAIL_SUBJECT'] = 'Delivering a message from {{WEBSITE_TITLE}}';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'You have submitted a message by {{WEBSITE_TITLE}}';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] = 'Thank you for sending your message to {{WEBSITE_TITLE}}! ';
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] .= 'We will be going to contact you as soon as possible';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n\n\n"
+."****************************************************************************\n"
+."This is an automatically generated e-mail. The sender address of this e-mail\n"
+."is furnished only for dispatch, not to receive messages!\n"
+."If you have received this e-mail by mistake, please contact us and delete this message\n"
+."****************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail reply to';
+$MOD_FORM['FROM'] = 'Sender';
+$MOD_FORM['TO'] = 'Recipient';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MOD_FORM['INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email to the <a href="mailto:{{webmaster_email}}">webmaster</a>';
+
+$MOD_FORM['PRINT']  = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible! ';
+$MOD_FORM['PRINT'] .= 'Please print this message!';
+
+$MOD_FORM['REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MOD_FORM['RECIPIENT'] = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible!';
+$MOD_FORM['ERROR'] = 'E-Mail could not send!!';
+$MOD_FORM['SPAM'] = 'Caution! Answering an unchecked email can be perceived as spamming and entail the risk of receiving a cease-and-desist letter! ';
+
+$TEXT['GUEST'] = 'Guest';
+$TEXT['UNKNOWN'] = 'unkown';
+$TEXT['PRINT_PAGE'] = 'Print page';
+$TEXT['REQUIRED_JS'] = 'Required Javascript';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Show submissions rows per page';

Property changes on: trunk/modules/form/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/DE.php
===================================================================
--- trunk/modules/form/languages/DE.php	(nonexistent)
+++ trunk/modules/form/languages/DE.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modulbeschreibung
+$module_description = 'Mit diesem Modul können sie ein beliebiges Formular für ihre Seite erzeugen';
+
+//Variablen fuer backend Texte
+$MOD_FORM['SETTINGS'] = 'Formular Einstellungen';
+$MOD_FORM['CONFIRM'] = 'Bestätigung';
+$MOD_FORM['SUBMIT_FORM'] = 'Absenden';
+$MOD_FORM['EMAIL_SUBJECT'] = 'Sie haben eine Nachricht über {{WEBSITE_TITLE}} erhalten';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'Sie haben ein Forumlar über {{WEBSITE_TITLE}} gesendet';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT']  = 'Vielen Dank für die Übermittlung Ihrer Nachricht an {{WEBSITE_TITLE}}. '.PHP_EOL;
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] .= 'Wir setzen uns schnellstens mit Ihnen in Verbindung.';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n"
+."******************************************************************************\n"
+."Dies ist eine automatisch generierte E-Mail. Die Absenderadresse dieser E-Mail\n"
+."ist nur zum Versand, und nicht zum Empfang von Nachrichten eingerichtet!\n"
+."Falls Sie diese E-Mail versehentlich erhalten haben, setzen Sie sich bitte\n"
+."mit uns in Verbindung und löschen diese Nachricht von Ihrem Computer.\n"
+."******************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail Antwortadresse';
+$MOD_FORM['FROM'] = 'Absender';
+$MOD_FORM['TO'] = 'Empfänger';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Dieses Formular wurde zu oft aufgerufen. Bitte versuchen Sie es in einer Stunde noch einmal.';
+$MOD_FORM['INCORRECT_CAPTCHA'] = 'Die eingegebene Prüfziffer stimmt nicht überein. Wenn Sie Probleme mit dem Lesen der Prüfziffer haben, bitte schreiben Sie eine E-Mail an den <a href="mailto:{{webmaster_email}}">Webmaster</a>';
+
+$MOD_FORM['PRINT']  = 'Versand einer E-Mail Bestätigung ist nicht möglich! ';
+$MOD_FORM['PRINT'] .= 'Drucken Sie bitte diese Nachricht aus!';
+$MOD_FORM['RECIPIENT'] = 'Die E-Mail Bestätigung erfolgt nur an angemeldete Benutzer!';
+
+$MOD_FORM['REQUIRED_FIELDS'] = 'Bitte folgende Angaben erg&auml;nzen';
+$MOD_FORM['ERROR'] = 'E-Mail konnte nicht gesendet werden!!';
+$MOD_FORM['SPAM'] = 'ACHTUNG! Beantworten einer ungeprüften E-Mail kann als Spam abgemahnt werden! ';
+
+$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = 'Die eingegebene Prüfziffer stimmt nicht überein. Wenn Sie Probleme mit dem Lesen der Prüfziffer haben, schreiben Sie bitte eine E-Mail an uns: <a href="mailto:{SERVER_EMAIL}">{SERVER_EMAIL}</a>';
+
+$TEXT['GUEST'] = 'Gast';
+$TEXT['UNKNOWN'] = 'unbekannt';
+$TEXT['PRINT_PAGE'] = 'Seite drucken';
+$TEXT['REQUIRED_JS'] = 'Javascript erforderlich';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Gespeicherte Einträge pro Seite';
+$TEXT['ADMIN'] = 'Admin';
+$MENU['USERS'] = 'Benutzer';

Property changes on: trunk/modules/form/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/EN.php
===================================================================
--- trunk/modules/form/languages/EN.php	(nonexistent)
+++ trunk/modules/form/languages/EN.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modul Description
+$module_description = 'This module allows you to create customised online forms, such as a feedback form. Thank-you to Rudolph Lartey who help enhance this module, providing code for extra field types, etc.';
+
+//Variables for the  backend
+$MOD_FORM['SETTINGS']              = 'Form Settings';
+$MOD_FORM['CONFIRM']               = 'Confirmation';
+$MOD_FORM['SUBMIT_FORM']           = 'Submit';
+$MOD_FORM['EMAIL_SUBJECT']         = 'You have received a form via {{WEBSITE_TITLE}}';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'Your form has been submitted to {{WEBSITE_TITLE}}';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT']    = 'Thank you for sending your message to {{WEBSITE_TITLE}}! '.PHP_EOL;
+$MOD_FORM['SUCCESS_EMAIL_TEXT']   .= 'We will be going to contact you as soon as possible';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n"
+."**************************************************************************************\n"
+."This is an automatically generated e-mail. The sender address of this e-mail\n"
+."is furnished only for dispatch, not to receive messages!\n"
+."If you have received this e-mail by mistake, please contact us and delete this message\n"
+."**************************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail reply to';
+$MOD_FORM['FROM']    = 'Sender';
+$MOD_FORM['TO']      = 'Recipient';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Sorry, this form has exceeded the maximum hourly submissions. Please retry in the next hour.';
+$MOD_FORM['INCORRECT_CAPTCHA']  = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email to the <a href="mailto:{{webmaster_email}}">webmaster</a>';
+
+$MOD_FORM['PRINT']     = 'Sending an e-mail confirmation is not possible. ';
+$MOD_FORM['PRINT']     = 'Dispatch to unchecked e-mail addresses is not possible! '.PHP_EOL;
+$MOD_FORM['PRINT']    .= 'Please print this page, if a copy is desired for your records.';
+
+$MOD_FORM['RECIPIENT'] = 'E-mail confirmations will only be sent to registered users!';
+
+$MOD_FORM['ERROR']           = 'E-Mail could not send!!';
+$MOD_FORM['SPAM']            = 'Caution! Answering an unchecked email can be perceived as spamming and entail the risk to get a cease-and-desist warning! ';
+$MOD_FORM['REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+
+$TEXT['GUEST']       = 'Guest';
+$TEXT['UNKNOWN']     = 'unkown';
+$TEXT['PRINT_PAGE']  = 'Print page';
+$TEXT['REQUIRED_JS'] = 'Required Javascript';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Show submissions rows per page';

Property changes on: trunk/modules/form/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/FR.php
===================================================================
--- trunk/modules/form/languages/FR.php	(nonexistent)
+++ trunk/modules/form/languages/FR.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modul Description
+$module_description = 'This module allows you to create customised online forms, such as a feedback form. Thank-you to Rudolph Lartey who help enhance this module, providing code for extra field types, etc.';
+
+//Variables for the  backend
+$MOD_FORM['SETTINGS'] = 'Form Settings';
+$MOD_FORM['CONFIRM'] = 'Confirmation';
+$MOD_FORM['SUBMIT_FORM'] = 'Submit';
+$MOD_FORM['EMAIL_SUBJECT'] = 'Delivering a message from {{WEBSITE_TITLE}}';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'You have submitted a message by {{WEBSITE_TITLE}}';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] = 'Thank you for sending your message to {{WEBSITE_TITLE}}! ';
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] .= 'We will be going to contact you as soon as possible';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n\n\n"
+."****************************************************************************\n"
+."This is an automatically generated e-mail. The sender address of this e-mail\n"
+."is furnished only for dispatch, not to receive messages!\n"
+."If you have received this e-mail by mistake, please contact us and delete this message\n"
+."****************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail reply to';
+$MOD_FORM['FROM'] = 'Sender';
+$MOD_FORM['TO'] = 'Recipient';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MOD_FORM['INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email to the <a href="mailto:{{webmaster_email}}">webmaster</a>';
+
+$MOD_FORM['PRINT']  = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible! ';
+$MOD_FORM['PRINT'] .= 'Please print this message!';
+
+$MOD_FORM['REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MOD_FORM['RECIPIENT'] = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible!';
+$MOD_FORM['ERROR'] = 'E-Mail could not send!!';
+$MOD_FORM['SPAM'] = 'Caution! Answering an unchecked email can be perceived as spamming and entail the risk of receiving a cease-and-desist letter! ';
+
+$TEXT['GUEST'] = 'Guest';
+$TEXT['UNKNOWN'] = 'unkown';
+$TEXT['PRINT_PAGE'] = 'Print page';
+$TEXT['REQUIRED_JS'] = 'Required Javascript';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Show submissions rows per page';

Property changes on: trunk/modules/form/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/NL.php
===================================================================
--- trunk/modules/form/languages/NL.php	(nonexistent)
+++ trunk/modules/form/languages/NL.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modul Description
+$module_description = 'Deze module makt het mogelijk om aangepaste online formulieren te maken zoals een feedback formulier. Met dank aan Rudolph Lartey voor het aanpassen van deze module.';
+
+//Variables for the  backend
+$MOD_FORM['SETTINGS'] = 'Form Settings';
+$MOD_FORM['CONFIRM'] = 'Confirmation';
+$MOD_FORM['SUBMIT_FORM'] = 'Submit';
+$MOD_FORM['EMAIL_SUBJECT'] = 'Delivering a message from {{WEBSITE_TITLE}}';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'You have submitted a message by {{WEBSITE_TITLE}}';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] = 'Thank you for sending your message to {{WEBSITE_TITLE}}! ';
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] .= 'We will be going to contact you as soon as possible';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n\n\n"
+."****************************************************************************\n"
+."This is an automatically generated e-mail. The sender address of this e-mail\n"
+."is furnished only for dispatch, not to receive messages!\n"
+."If you have received this e-mail by mistake, please contact us and delete this message\n"
+."****************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail reply to';
+$MOD_FORM['FROM'] = 'Sender';
+$MOD_FORM['TO'] = 'Recipient';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MOD_FORM['INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email to the <a href="mailto:{{webmaster_email}}">webmaster</a>';
+
+$MOD_FORM['PRINT']  = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible! ';
+$MOD_FORM['PRINT'] .= 'Please print this message!';
+
+$MOD_FORM['REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MOD_FORM['RECIPIENT'] = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible!';
+$MOD_FORM['ERROR'] = 'E-Mail could not send!!';
+$MOD_FORM['SPAM'] = 'Caution! Answering an unchecked email can be perceived as spamming and entail the risk of receiving a cease-and-desist letter! ';
+
+$TEXT['GUEST'] = 'Guest';
+$TEXT['UNKNOWN'] = 'unkown';
+$TEXT['PRINT_PAGE'] = 'Print page';
+$TEXT['REQUIRED_JS'] = 'Required Javascript';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Show submissions rows per page';

Property changes on: trunk/modules/form/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/NO.php
===================================================================
--- trunk/modules/form/languages/NO.php	(nonexistent)
+++ trunk/modules/form/languages/NO.php	(revision 2)
@@ -0,0 +1,64 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Must include code to stop this file being access directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(dirname(__FILE__)))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//Modul Description
+$module_description = 'Med denne modulen kan du lage d&iacute;ne egne spesialtilpassede elektroniske skjemaer, som for eksempe et tilbakemeldings skjema. En stor takk til Rudolph Lartey for hjelpen med &aring; videreutvikkle denne modulen, og for bidrag med koding av ekstra felt typer , osv.';
+
+//Variables for the  backend
+$MOD_FORM['SETTINGS'] = 'Form Settings';
+$MOD_FORM['CONFIRM'] = 'Confirmation';
+$MOD_FORM['SUBMIT_FORM'] = 'Submit';
+$MOD_FORM['EMAIL_SUBJECT'] = 'Delivering a message from {{WEBSITE_TITLE}}';
+$MOD_FORM['SUCCESS_EMAIL_SUBJECT'] = 'You have submitted a message by {{WEBSITE_TITLE}}';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] = 'Thank you for sending your message to {{WEBSITE_TITLE}}! ';
+$MOD_FORM['SUCCESS_EMAIL_TEXT'] .= 'We will be going to contact you as soon as possible';
+
+$MOD_FORM['SUCCESS_EMAIL_TEXT_GENERATED'] = "\n\n\n"
+."****************************************************************************\n"
+."This is an automatically generated e-mail. The sender address of this e-mail\n"
+."is furnished only for dispatch, not to receive messages!\n"
+."If you have received this e-mail by mistake, please contact us and delete this message\n"
+."****************************************************************************\n";
+
+$MOD_FORM['REPLYTO'] = 'E-Mail reply to';
+$MOD_FORM['FROM'] = 'Sender';
+$MOD_FORM['TO'] = 'Recipient';
+
+$MOD_FORM['EXCESS_SUBMISSIONS'] = 'Sorry, this form has been submitted too many times so far this hour. Please retry in the next hour.';
+$MOD_FORM['INCORRECT_CAPTCHA'] = 'The verification number (also known as Captcha) that you entered is incorrect. If you are having problems reading the Captcha, please email to the <a href="mailto:{{webmaster_email}}">webmaster</a>';
+
+$MOD_FORM['PRINT']  = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible! ';
+$MOD_FORM['PRINT'] .= 'Please print this message!';
+
+$MOD_FORM['REQUIRED_FIELDS'] = 'You must enter details for the following fields';
+$MOD_FORM['RECIPIENT'] = 'E-mail confirmation occurs only to valid e-mail address of the user announced in each case! Dispatch to unchecked addresses is not possible!';
+$MOD_FORM['ERROR'] = 'E-Mail could not send!!';
+$MOD_FORM['SPAM'] = 'Caution! Answering an unchecked email can be perceived as spamming and entail the risk of receiving a cease-and-desist letter! ';
+
+$TEXT['GUEST'] = 'Guest';
+$TEXT['UNKNOWN'] = 'unkown';
+$TEXT['PRINT_PAGE'] = 'Print page';
+$TEXT['REQUIRED_JS'] = 'Required Javascript';
+$TEXT['SUBMISSIONS_PERPAGE'] = 'Show submissions rows per page';

Property changes on: trunk/modules/form/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/languages/index.php
===================================================================
--- trunk/modules/form/languages/index.php	(nonexistent)
+++ trunk/modules/form/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/form/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/lib/Helpers.lib
===================================================================
--- trunk/modules/form/lib/Helpers.lib	(nonexistent)
+++ trunk/modules/form/lib/Helpers.lib	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+  class m_mapbaker_lib_Helpers
+{
+
+
+
+}

Property changes on: trunk/modules/form/lib/Helpers.lib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/lib/example.lib
===================================================================
--- trunk/modules/form/lib/example.lib	(nonexistent)
+++ trunk/modules/form/lib/example.lib	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+// a placeholder file only
+/*
+in this folder you can place library files for your addon.
+some little rules:
+
+naming conventions:
+- use prefix "m_AddonName_FunctionName()"
+- use '.lib' as only one extension inside this folder
+coding hints:
+- take care for sideeffects. place functions or classes here only
+- do not declare variables outside of functions/classes
+- do not declare constants outside of classes
+- do not place executable code outside of functions/classes
+
+
+*/

Property changes on: trunk/modules/form/lib/example.lib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/lib/save_field.php
===================================================================
--- trunk/modules/form/lib/save_field.php	(nonexistent)
+++ trunk/modules/form/lib/save_field.php	(revision 2)
@@ -0,0 +1,138 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+$backUrl = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id;
+// check FTAN
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error( ''.$MESSAGE['GENERIC_SECURITY_ACCESS'], $backUrl );
+}
+// Get id
+$field_id = intval($admin->checkIDKEY('field_id', false ));
+if (!$field_id) {
+    $admin->print_header();
+    $admin->print_error( ''.$MESSAGE['GENERIC_SECURITY_ACCESS'].'', $backUrl );
+}
+$backModuleUrl = WB_URL.'/modules/'.basename(__DIR__).'/modify_field.php?page_id='.$page_id.'&section_id='.$section_id.'&field_id='.$admin->getIDKEY($field_id);
+// After check print the header to get a new FTAN
+$admin->print_header();
+// Validate all fields
+if( ($admin->get_post('title') == '') || ($admin->get_post('type') == '') ) {
+    $admin->print_error($MESSAGE['GENERIC_FILL_IN_ALL'], $backModuleUrl );
+} else {
+    $title = $admin->StripCodeFromText(($admin->get_post('title')));
+    $type = ($admin->get_post('type'));
+    $required = (int) ($admin->get_post('required'));
+}
+
+// Update row
+$sql  = 'UPDATE `'.TABLE_PREFIX.'mod_form_fields SET` '
+      . 'title = \''.$database->escapeString($title).'\', '
+      . 'type = \''.$database->escapeString($type).'\', '
+      . 'required = \''.$database->escapeString($required).'\' '
+      . 'WHERE field_id = '.(int)$field_id.' ';
+if($database->query($sql)) { }
+
+// If field type has multiple options, get all values and implode them
+    $value = $extra = '';
+    $list_count = $admin->get_post('list_count');
+    if(is_numeric($list_count)) {
+        $values = array();
+        for($i = 1; $i <= $list_count; $i++) {
+            if($admin->get_post('value'.$i) != '') {
+                $values[] = str_replace(",","&#44;",$admin->get_post('value'.$i));
+            }
+        }
+        $value = implode(',', $values);
+    } else {
+        $admin->print_error( ''.$MESSAGE['GENERIC_SECURITY_ACCESS'].'', $backUrl );
+    }
+/**
+ * 
+// Get extra fields for field-type-specific settings
+if($admin->get_post('type') == 'textfield') {
+    $extra = intval($admin->get_post('length'));
+    $value = $admin->StripCodeFromText( $admin->get_post('value'));
+} elseif($admin->get_post('type') == 'textarea') {
+    $value = $admin->StripCodeFromText( $admin->get_post('value'));
+    $extra = '';
+//    $database->query("UPDATE ".TABLE_PREFIX."mod_form_fields SET value = '$value', extra = '' WHERE field_id = '$field_id'");
+} elseif($admin->get_post('type') == 'heading') {
+    $extra = $admin->StripCodeFromText( $admin->get_post('template'));
+    if(trim($extra) == '') $extra = '<tr><td class="frm-field_heading" colspan="2">{TITLE}{FIELD}</td></tr>';
+//    $extra = $admin->add_slashes($extra);
+    $value = '';
+//    $database->query("UPDATE ".TABLE_PREFIX."mod_form_fields SET value = '', extra = '$extra' WHERE field_id = '$field_id'");
+} elseif($admin->get_post('type') == 'select') {
+    $extra = intval($admin->get_post('size')).','.$admin->get_post('multiselect');
+//    $database->query("UPDATE ".TABLE_PREFIX."mod_form_fields SET value = '$value', extra = '$extra' WHERE field_id = '$field_id'");
+} elseif($admin->get_post('type') == 'checkbox') {
+    $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+//    $database->query("UPDATE ".TABLE_PREFIX."mod_form_fields SET value = '$value', extra = '$extra' WHERE field_id = '$field_id'");
+} elseif($admin->get_post('type') == 'radio') {
+    $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+//    $database->query("UPDATE ".TABLE_PREFIX."mod_form_fields SET value = '$value', extra = '$extra' WHERE field_id = '$field_id'");
+}
+ */
+
+// prepare sql-update
+    switch($admin->get_post('type')):
+        case 'textfield':
+            $value = $admin->StripCodeFromText($admin->get_post('value'));
+            $extra = intval($admin->get_post('length'));
+            break;
+        case 'textarea':
+            $value = $admin->StripCodeFromText($admin->get_post('value'));
+            $extra = '';
+            break;
+        case 'heading':
+            $extra = $admin->StripCodeFromText( $admin->get_post('template'));
+            if(trim($extra) == '') $extra = '<tr><td class="frm-field_heading" colspan="2">{TITLE}{FIELD}</td></tr>';
+            break;
+        case 'select':
+            $extra = intval($admin->get_post('size')).','.$admin->get_post('multiselect');
+            break;
+        case 'checkbox':
+            $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+            break;
+        case 'radio':
+            $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+            break;
+        default:
+            $value = '';
+            $extra = '';
+            break;
+    endswitch;
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_form_fields` SET '
+          . '`value` = \''.$database->escapeString($value).'\', '
+          . '`extra` = \''.$database->escapeString($extra).'\' '
+          . 'WHERE `field_id` = \''.$database->escapeString($field_id).'\'';
+    if( $database->query($sql) ) {
+        $admin->print_success($TEXT['SUCCESS'], $backModuleUrl );
+    }else {
+        $admin->print_error($database->get_error(), $backModuleUrl );
+    }
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/lib/save_field.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/modify.php
===================================================================
--- trunk/modules/form/modify.php	(nonexistent)
+++ trunk/modules/form/modify.php	(revision 2)
@@ -0,0 +1,351 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+//overwrite php.ini on Apache servers for valid SESSION ID Separator
+$sQuerySep = ini_get('arg_separator.output');
+//if(function_exists('ini_set')) {
+//    ini_set('arg_separator.output', '&amp;');
+//}
+
+$sModulName = basename(__DIR__);
+$sModulName = $sModulName;
+$ModuleRel = '/modules/'.basename(__DIR__).'/';
+$ModuleUrl = WB_URL.'/modules/'.basename(__DIR__).'/';
+$ModulePath = WB_PATH.'/modules/'.basename(__DIR__).'/';
+
+// load module language file
+$sAddonName = basename(__DIR__);
+require(__DIR__.'/languages/EN.php');
+if(file_exists(__DIR__.'/languages/'.LANGUAGE .'.php')) {
+    require(__DIR__.'/languages/'.LANGUAGE .'.php');
+}
+
+if( !function_exists( 'make_dir' ) )  {  require(WB_PATH.'/framework/functions.php');  }
+
+$sec_anchor = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? '#'.SEC_ANCHOR.$section['section_id'] : '' );
+
+//Delete all form fields with no title
+$sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_form_fields` ';
+$sql .= 'WHERE page_id = '.(int)$page_id.' ';
+$sql .=   'AND section_id = '.(int)$section_id.' ';
+$sql .=   'AND title=\'\' ';
+if( !$database->query($sql) ) {
+// error msg
+}
+
+// later in upgrade.php
+$table_name = TABLE_PREFIX.'mod_form_settings';
+$field_name = 'perpage_submissions';
+$description = "INT NOT NULL DEFAULT '10' AFTER `max_submissions`";
+if(!$database->field_exists($table_name,$field_name)) {
+    $database->field_add($table_name, $field_name, $description);
+}
+$FTAN = $admin->getFTAN('');
+
+?><table class="mod_form" style="width: 100%;">
+    <tbody>
+        <tr>
+            <td style="width: 33.336%;">
+                <form action="<?php echo $ModuleUrl; ?>add_field.php" method="post" class="mod_form" >
+                    <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+                    <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+                    <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+                    <input type="submit" value="<?php echo $TEXT['ADD'].' '.$TEXT['FIELD']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+                </form>
+            </td>
+            <td style="width: 33.336%;">
+                <form action="<?php echo $ModuleUrl; ?>modify_settings.php" method="post" class="mod_form" >
+                    <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+                    <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+                    <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+                    <input type="submit" value="<?php echo $TEXT['SETTINGS']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+                </form>
+            </td>
+<?php if(@DEBUG && $admin->ami_group_member('1') ) {  ?>
+            <td style="width: 33.336%;">
+                <form action="<?php echo WB_URL; ?>/modules/form/reorgPosition.php" method="post" class="mod_form" >
+                    <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+                    <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+                    <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+                    <input type="submit" value="Reorg Position" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+                </form>
+            </td>
+<?php } ?>
+        </tr>
+    </tbody>
+</table>
+<p id="tablecontent" ></p>
+<br />
+
+<h2><?php echo $TEXT['MODIFY'].'/'.$TEXT['DELETE'].' '.$TEXT['FIELD']; ?></h2>
+<?php
+
+// Loop through existing fields
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_fields` '
+      . 'WHERE `section_id` = '.(int)$section_id.' '
+      . 'ORDER BY `position` ASC';
+if($oFields = $database->query($sql)) {
+    $num_fields = $oFields->numRows();
+    if($num_fields) {
+        ?><div class="jsadmin hide"></div>
+        <table class="mod_form w3-table" id="tableData" >
+            <thead>
+                <tr class="w3-header-blue-wb">
+                    <th style="padding-left: 5px; width: 3%;" >&nbsp;</th>
+                    <th style="text-align: right; width: 3%;" >ID</th>
+                    <th style=" width: 50%;" ><?php print $TEXT['FIELD']; ?></th>
+                    <th style=" width: 20%;" ><?php print $TEXT['TYPE']; ?></th>
+                    <th style=" width: 5%;" ><?php print $TEXT['REQUIRED']; ?></th>
+                    <th style=" width: 5%;" >
+                    <?php
+                        echo $TEXT['MULTISELECT'];
+                    ?>
+                    </th>
+                    <th style=" width: 10%;" colspan="3" >
+                    <?php
+                        echo $TEXT['ACTIONS'];
+                    ?></th>
+                    <th style=" width: 3%;" >POS</th>
+                </tr>
+            </thead>
+            <tbody>
+<?php
+        while($aFields = $oFields->fetchRow(MYSQLI_ASSOC)) {
+          $sFielIdkey = $admin->getIDKEY($aFields['field_id']);
+?><tr class=" sectionrow">
+                <td style="padding-left: 5px;">
+                    <a href="<?php echo $ModuleUrl; ?>modify_field.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;field_id=<?php echo $sFielIdkey; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/modify_16.png" alt="^" />
+                    </a>
+                </td>
+                <td style="text-align: right;">
+                    <a style=" font-weight: normal;" href="<?php echo $ModuleUrl; ?>modify_field.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;field_id=<?php echo $sFielIdkey; ?>">
+                        <?php echo $aFields['field_id']; ?>
+                    </a>
+                </td>
+                <td>
+                    <a href="<?php echo $ModuleUrl; ?>modify_field.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;field_id=<?php echo $sFielIdkey; ?>">
+                        <?php echo $aFields['title']; ?>
+                    </a>
+                </td>
+                <td>
+<?php
+                    $key = $aFields['type'];
+                    switch ($key):
+                        case 'textfield':
+                            $sTitle = $TEXT['SHORT_TEXT'];
+                            break;
+                        case 'textarea':
+                            $sTitle = $TEXT['LONG_TEXT'];
+                            break;
+                        case 'heading':
+                            $sTitle = $TEXT['HEADING'];
+                            break;
+                        case 'select':
+                            $sTitle = $TEXT['SELECT_BOX'];
+                            break;
+                        case 'checkbox':
+                            $sTitle = $TEXT['CHECKBOX_GROUP'];
+                            break;
+                        case 'radio':
+                            $sTitle = $TEXT['RADIO_BUTTON_GROUP'];
+                            break;
+                        case 'email':
+                            $sTitle = $TEXT['EMAIL_ADDRESS'];
+                            break;
+                        default:
+                        break;
+                    endswitch;
+                    echo $sTitle;
+?></td>
+                <td style="text-align: center;">
+<?php
+                if ($aFields['type'] != 'group_begin') {
+                    if($aFields['required'] == 1) { echo $TEXT['YES']; } else { echo $TEXT['NO']; }
+                }
+?>
+                </td>
+                <td>
+<?php
+                if ($aFields['type'] == 'select') {
+                    $aFields['extra'] = explode(',',$aFields['extra']);
+                     if($aFields['extra'][1] == 'multiple') { echo $TEXT['YES']; } else { echo $TEXT['NO']; }
+                }
+?>
+                </td>
+                <td style="text-align: center;">
+<?php if($aFields['position'] != 1) { ?>
+                    <a href="<?php echo $ModuleUrl; ?>move_up.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;field_id=<?php echo $sFielIdkey; ?>&amp;move_id=<?php echo $aFields['field_id']; ?>&amp;position=<?php echo $aFields['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="up" />
+                    </a>
+<?php } ?>
+                </td>
+                <td  style="text-align: center;">
+<?php if($aFields['position'] != $num_fields) { ?>
+                    <a href="<?php echo $ModuleUrl; ?>move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;field_id=<?php echo $sFielIdkey; ?>&amp;move_id=<?php echo $aFields['field_id']; ?>&amp;position=<?php echo $aFields['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="down" />
+                    </a>
+<?php } ?>
+                </td>
+                <td style="text-align: center;">
+<?php
+                $url = ($ModuleUrl.'delete_field.php?page_id='.$page_id.'&amp;section_id='.$section_id.'&amp;field_id='.$sFielIdkey)
+?>
+                    <a href="javascript:confirm_link('<?php echo url_encode($TEXT['ARE_YOU_SURE']); ?>','<?php echo $url; ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="X" />
+                    </a>
+                </td>
+                <td style="text-align: right; padding-right: 5px;">
+<?php
+                    echo $aFields['position'];
+if ( DEBUG ) {
+}
+?>
+                </td>
+            </tr>
+<?php
+            // Alternate row color
+        }
+?>
+        </tbody>
+        </table>
+<?php
+        // include the required file for Javascript admin
+        if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php'))
+        {
+//            $js_buttonCell = 6;
+            include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+        }
+    } else {
+        echo $TEXT['NONE_FOUND'];
+    }
+}
+?>
+
+<br /><br />
+
+<h2><?php echo $TEXT['SUBMISSIONS']; ?></h2>
+
+<?php
+// Query submissions table
+/*
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_submissions`  ';
+$sql .= 'WHERE `section_id` = '.(int)$section_id.' ';
+$sql .= 'ORDER BY `submitted_when` ASC ';
+*/
+$sql  = 'SELECT s.*, u.`display_name`, u.`email` ';
+$sql .=            'FROM `'.TABLE_PREFIX.'mod_form_submissions` s ';
+$sql .= 'LEFT OUTER JOIN `'.TABLE_PREFIX.'users` u ';
+$sql .= 'ON u.`user_id` = s.`submitted_by` ';
+$sql .= 'WHERE s.`section_id` = '.(int)$section_id.' ';
+$sql .= 'ORDER BY s.`submitted_when` DESC ';
+
+if($oSubmissions = $database->query($sql)) {
+?>
+<!-- submissions -->
+    <div class="frm-ScrollTableDiv">
+        <table id="frm-ScrollTable" class=" w3-table">
+            <thead class="frm-Scroll w3-header-blue-wb">
+                <tr id="frm-Scroll" class="w3-header-blue-wb">
+                    <th style="text-align: center; width: 3%;">&nbsp;</th>
+                    <th style="text-align: center; width: 3%;"> ID </th>
+                    <th style=" width: 19%;"><?php echo $TEXT['SUBMITTED'] ?></th>
+                    <th style=" width: 19%;"><?php echo $TEXT['USER']; ?></th>
+                    <th style=" width: 10%;"><?php echo $TEXT['EMAIL'].' '.$MOD_FORM['FROM'] ?></th>
+                    <th style="text-align: center; width: 5%;">&nbsp;</th>
+                    <th style="text-align: center; width: 5%;">&nbsp;</th>
+                    <th style="text-align: center; width: 3%;">&nbsp;</th>
+                    <th style="text-align: center; width: 3%;">&nbsp;</th>
+                </tr>
+            </thead>
+            <tfoot>
+                <tr class="w3-header-blue-wb"><td colspan="9"></td></tr>
+            </tfoot>
+        <tbody class="scrolling">
+<?php
+    if($oSubmissions->numRows() > 0) {
+        // List submissions
+       $emailUser = (function ($userid=0) use ($database)
+       {
+            $retval = '';
+            if ($userid!='0') {
+                $sql  = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                      . 'WHERE `user_id`=\' '.$userid.'\' ';
+                $retval = $database->get_one($sql);
+            }
+            return $retval;
+        });
+        while($submission = $oSubmissions->fetchRow(MYSQLI_ASSOC)) {
+            $submission['display_name'] = (($submission['display_name']!=null) ? $submission['display_name'] : $TEXT['GUEST']);
+            $sBody = $submission['body'];
+            $submission['email'] = $emailUser($submission['submitted_by']);
+            if ($submission['email']==''){
+                $regex = "/[a-z0-9\-_]?[a-z0-9.\-_]+[a-z0-9\-_]?@[a-z0-9.-]+\.[a-z]{2,}/i";
+                preg_match ($regex, $sBody, $output);
+// workout if output is empty
+                $submission['email'] = (isset($output['0']) ? $output['0'] : '');
+            }
+            $sSubmissionIdkey = $admin->getIDKEY($submission['submission_id']);
+?>
+            <tr class="frm-Scroll" >
+                <td class="frm-Scroll" style="text-align: center; width: 3%;">
+                    <a href="<?php echo WB_URL; ?>/modules/form/view_submission.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;submission_id=<?php echo $sSubmissionIdkey; ?>" title="<?php echo $TEXT['OPEN']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/folder_16.png" alt="<?php echo $TEXT['OPEN']; ?>" />
+                    </a>
+                </td>
+                <td class="frm-Scroll" style="padding-right: 15px;text-align: right; width: 3%; font-weight: normal;"><?php echo $submission['submission_id']; ?></td>
+                <td class="frm-Scroll" style=" width: 16%;"><?php echo gmdate(DATE_FORMAT.', '.TIME_FORMAT, $submission['submitted_when']+TIMEZONE ); ?></td>
+                <td class="frm-Scroll" style=" width: 33%;"><?php echo $submission['display_name']; ?></td>
+                <td class="frm-Scroll" style=" width: 30%;" ><?php echo $submission['email']; ?></td>
+                <td class="frm-Scroll" style="text-align: center; width: 5%;">&nbsp;</td>
+                <td class="frm-Scroll" style=" width: 5%;"  >&nbsp;</td>
+                <td class="frm-Scroll"  style="text-align: center; width: 5%;">
+<?php
+                $url = (WB_URL.'/modules/form/delete_submission.php?page_id='.$page_id.'&amp;section_id='.$section_id.'&amp;submission_id='.$sSubmissionIdkey)
+?>
+                    <a href="javascript:confirm_link('<?php echo url_encode($TEXT['ARE_YOU_SURE']); ?>', '<?php echo $url; ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="X" />
+                    </a>
+                </td>
+<?php
+if ( DEBUG ) { ?>
+                <td class="frm-Scroll" style=" width: 3%;" ><?php echo $sSubmissionIdkey; ?></td>
+<?php } else  { ?>
+                <td class="frm-Scroll" style=" width: 3%;" >&nbsp;</td>
+<?php }  ?>
+
+            </tr>
+<?php
+        }
+    } else {
+?>
+<tr><td colspan="8"><?php echo $TEXT['NONE_FOUND'] ?></td></tr>
+<?php
+    }
+?>
+        </tbody>
+        </table><br />
+    </div>
+<?php
+} else {
+    echo $database->get_error().'<br />';
+    echo $sql;
+}
\ No newline at end of file

Property changes on: trunk/modules/form/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/modify_field.php
===================================================================
--- trunk/modules/form/modify_field.php	(nonexistent)
+++ trunk/modules/form/modify_field.php	(revision 2)
@@ -0,0 +1,217 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2013, WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$print_info_banner = true;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+/* */
+// Get id
+$field_id = intval($admin->checkIDKEY('field_id', false, 'GET'));
+if (!$field_id) {
+ $admin->print_error('IDKEY:: '.$MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id);
+}
+// load module language file
+$sAddonName = basename(__DIR__);
+require(__DIR__.'/languages/EN.php');
+if(file_exists(__DIR__.'/languages/'.LANGUAGE .'.php')) {
+    require(__DIR__.'/languages/'.LANGUAGE .'.php');
+}
+
+$type = 'none';
+// Get header and footer
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_fields` ';
+$sql .= 'WHERE `field_id` = '.$field_id.'';
+$sql .= '';
+if($query_content = $database->query($sql)) {
+    $form = $query_content->fetchRow(MYSQL_ASSOC);
+    $type = (($form['type'] == '') ? 'none' : $form['type']);
+}
+// set new idkey for save_field
+$field_id = $admin->getIDKEY($form['field_id']);
+// Set raw html <'s and >'s to be replaced by friendly html code
+$raw = array('<', '>');
+$friendly = array('&lt;', '&gt;');
+$aFtan = $admin->getFTAN('');
+$sToken = $aFtan['name'].'='.$aFtan['value'];
+?><form name="modify" action="<?php echo WB_URL; ?>/modules/form/save_field_new.php" method="post" style="margin: 0;">
+<input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+<input type="hidden" name="field_id" value="<?php echo $field_id; ?>" />
+<input type="hidden" name="<?php echo $aFtan['name']; ?>" value="<?php echo $aFtan['value']; ?>">
+
+<table class="frm-table">
+    <tr>
+        <td colspan="2"><strong><?php echo $TEXT['MODIFY'].' '.$TEXT['FIELD']; ?></strong></td>
+    </tr>
+    <tr>
+        <td width="20%"><?php echo $TEXT['TITLE']; ?>:</td>
+        <td>
+            <input type="text" name="title" value="<?php echo htmlspecialchars(($form['title'])); ?>" style="width: 98%;" maxlength="255" />
+        </td>
+    </tr>
+    <tr>
+        <td><?php echo $TEXT['TYPE']; ?>:</td>
+        <td>
+            <select name="type" style="width: 98%;">
+                <option value=""><?php echo $TEXT['PLEASE_SELECT']; ?>...</option>
+                <option value="heading"<?php if($type == 'heading') { echo ' selected="selected"'; } ?>><?php echo $TEXT['HEADING']; ?></option>
+                <option value="textfield"<?php if($type == 'textfield') { echo ' selected="selected"'; } ?>><?php echo $TEXT['SHORT'].' '.$TEXT['TEXT']; ?> (input)</option>
+                <option value="textarea"<?php if($type == 'textarea') { echo ' selected="selected"'; } ?>><?php echo $TEXT['LONG'].' '.$TEXT['TEXT']; ?> (textarea)</option>
+                <option value="select"<?php if($type == 'select') { echo ' selected="selected"'; } ?>><?php echo $TEXT['SELECT_BOX']; ?> (select)</option>
+                <option value="checkbox"<?php if($type == 'checkbox') { echo ' selected="selected"'; } ?>><?php echo $TEXT['CHECKBOX_GROUP']; ?> (checkbox)</option>
+                <option value="radio"<?php if($type == 'radio') { echo ' selected="selected"'; } ?>><?php echo $TEXT['RADIO_BUTTON_GROUP']; ?> (radiobox)</option>
+                <option value="email"<?php if($type == 'email') { echo ' selected="selected"'; } ?>><?php echo $TEXT['EMAIL_ADDRESS']; ?></option>
+            </select>
+        </td>
+    </tr>
+<?php if($type != 'none' AND $type != 'email') { ?>
+    <?php if($type == 'heading') { ?>
+    <tr>
+        <td valign="top"><?php echo $TEXT['TEMPLATE']; ?>:</td>
+        <td>
+            <textarea name="template" style="width: 98%; height: 20px;"><?php echo htmlspecialchars(($form['extra'])); ?></textarea>
+        </td>
+    </tr>
+    <?php } elseif($type == 'textfield') { ?>
+    <tr>
+        <td><?php echo $TEXT['LENGTH']; ?>:</td>
+        <td>
+            <input type="text" name="length" value="<?php echo $form['extra']; ?>" style="width: 98%;" maxlength="3" />
+        </td>
+    </tr>
+    <tr>
+        <td><?php echo $TEXT['DEFAULT_TEXT']; ?>:</td>
+        <td>
+            <input type="text" name="value" value="<?php echo $form['value']; ?>" style="width: 98%;" />
+        </td>
+    </tr>
+    <?php } elseif($type == 'textarea') { ?>
+    <tr>
+        <td valign="top"><?php echo $TEXT['DEFAULT_TEXT']; ?>:</td>
+        <td>
+            <textarea name="value" style="width: 98%; height: 100px;"><?php echo $form['value']; ?></textarea>
+        </td>
+    </tr>
+    <?php } elseif($type == 'select' OR $type = 'radio' OR $type = 'checkbox') { ?>
+    <tr>
+        <td valign="top"><?php echo $TEXT['LIST_OPTIONS']; ?>:</td>
+        <td>
+            <table >
+<?php
+            $option_count = 0;
+            $list = explode(',', $form['value']);
+            foreach($list AS $option_value) {
+                $option_count = $option_count+1;
+?>
+                <tr>
+                    <td width="70"><?php echo $TEXT['OPTION'].' '.$option_count; ?>:</td>
+                    <td>
+                        <input type="text" name="value<?php echo $option_count; ?>" value="<?php echo $option_value; ?>" style="width: 250px;" />
+                    </td>
+                </tr>
+                <?php
+            }
+            for($i = 0; $i < 2; $i++) {
+                $option_count = $option_count+1;
+?>
+                <tr>
+                    <td width="70"><?php echo $TEXT['OPTION'].' '.$option_count; ?>:</td>
+                    <td>
+                        <input type="text" name="value<?php echo $option_count; ?>" value="" style="width: 250px;" />
+                    </td>
+                </tr>
+                <?php
+            }
+?>
+                </table>
+            <input type="hidden" name="list_count" value="<?php echo $option_count; ?>" />
+        </td>
+    </tr>
+    <?php } ?>
+    <?php if($type == 'select') { ?>
+    <tr>
+        <td><?php echo $TEXT['SIZE']; ?>:</td>
+        <td>
+            <?php
+            $form['extra'] = explode(',',$form['extra']);
+            $form['extra'][0] = (@$form['extra'][0]?:3);
+            ?>
+            <input type="text" name="size" value="<?php echo trim($form['extra'][0]); ?>" style="width: 98%;" maxlength="3" />
+        </td>
+    </tr>
+    <tr>
+        <td><?php echo $TEXT['ALLOW_MULTIPLE_SELECTIONS']; ?>:</td>
+        <td>
+            <input type="radio" name="multiselect" id="multiselect_true" value="multiple" <?php if($form['extra'][1] == 'multiple') { echo ' checked="checked"'; } ?> />
+            <a href="#" onclick="javascript:document.getElementById('multiselect_true').checked = true;">
+            <?php echo $TEXT['YES']; ?>
+            </a>
+            &nbsp;
+            <input type="radio" name="multiselect" id="multiselect_false" value="" <?php if($form['extra'][1] == '') { echo ' checked="checked"'; } ?> />
+            <a href="#" onclick="javascript:document.getElementById('multiselect_false').checked = true;">
+            <?php echo $TEXT['NO']; ?>
+            </a>
+        </td>
+    </tr>
+    <?php } elseif($type == 'checkbox' OR $type == 'radio') { ?>
+    <tr>
+        <td valign="top"><?php echo $TEXT['SEPERATOR']; ?>:</td>
+        <td>
+            <input type="text" name="seperator" value="<?php echo $form['extra']; ?>" style="width: 98%;" />
+        </td>
+    </tr>
+    <?php } ?>
+<?php } ?>
+<?php if($type != 'heading' AND $type != 'none') { ?>
+    <tr>
+        <td><?php echo $TEXT['REQUIRED']; ?>:</td>
+        <td>
+            <input type="radio" name="required" id="required_true" value="1" <?php if($form['required'] == 1) { echo ' checked="checked"'; } ?> />
+            <label for="required_true">
+            <?php echo $TEXT['YES']; ?>
+            </label>
+            &nbsp;
+            <input type="radio" name="required" id="required_false" value="0" <?php if($form['required'] == 0) { echo ' checked="checked"'; } ?> />
+            <label for="required_false">
+            <?php echo $TEXT['NO']; ?>
+            </label>
+        </td>
+    </tr>
+<?php } ?>
+</table>
+
+<table>
+    <tr>
+        <td align="left">
+            <input name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="width: 100px; margin-top: 5px;" />
+        </td>
+        <td align="right">
+            <input type="button" value="<?php echo $TEXT['CLOSE']; ?>" onclick="window.location = '<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page_id.'#'.$sSectionIdPrefix.$section_id; ?>';" style="width: 100px; margin-top: 5px;" />
+        </td>
+    </tr>
+</table>
+</form>
+<?php
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/modify_field.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/modify_settings.php
===================================================================
--- trunk/modules/form/modify_settings.php	(nonexistent)
+++ trunk/modules/form/modify_settings.php	(revision 2)
@@ -0,0 +1,293 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$print_info_banner = true;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$sAddonName = basename(__DIR__);
+$ModuleRel  = '/modules/'.$sAddonName;
+$ModuleUrl  = WB_URL.$ModuleRel;
+$ModulePath = WB_PATH.$ModuleRel;
+
+// include core functions of WB 2.7 to edit the optional module CSS files (frontend.css, backend.css)
+include_once(WB_PATH .'/framework/module.functions.php');
+
+// load module language file
+//$sAddonName = basename(__DIR__);
+require(__DIR__.'/languages/EN.php');
+if(file_exists(__DIR__.'/languages/'.LANGUAGE .'.php')) {
+    require(__DIR__.'/languages/'.LANGUAGE .'.php');
+}
+
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+
+$sBacklink = ADMIN_URL.'/pages/modify.php?page_id='.$page_id;
+
+if (!$admin->checkFTAN())
+{
+//    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $sBacklink);
+}
+
+if (!function_exists('emailAdmin')) {
+    function emailAdmin() {
+        global $database,$admin;
+        $retval = $admin->get_email();
+        if($admin->get_user_id()!='1') {
+            $sql  = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                  . 'WHERE `user_id`=\'1\' ';
+            $retval = $database->get_one($sql);
+        }
+        return $retval;
+    }
+}
+
+// Get Settings from DB $aSettings['
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_settings` '
+      . 'WHERE `section_id` = '.(int)$section_id.'';
+if($oSetting = $database->query($sql)) {
+    $aSettings = $oSetting->fetchRow(MYSQLI_ASSOC);
+    $aSettings['email_to'] = ( ($aSettings['email_to'] != '') ? $aSettings['email_to'] : emailAdmin());
+    $aSettings['email_subject'] = ( ($aSettings['email_subject']  != '') ? $aSettings['email_subject'] : '' );
+    $aSettings['success_email_subject'] = ($aSettings['success_email_subject']  != '') ? $aSettings['success_email_subject'] : '';
+    $aSettings['success_email_from'] = $admin->add_slashes(SERVER_EMAIL);
+    $aSettings['success_email_fromname'] = ($aSettings['success_email_fromname'] != '' ? $aSettings['success_email_fromname'] : WBMAILER_DEFAULT_SENDERNAME);
+    $aSettings['success_email_subject'] = ($aSettings['success_email_subject']  != '') ? $aSettings['success_email_subject'] : '';
+}
+
+// Set raw html <'s and >'s to be replace by friendly html code
+$raw = array('<', '>');
+$friendly = array('&lt;', '&gt;');
+?>
+<?php
+if ($print_info_banner) {
+?>
+    </div><!--end class="block-outer" -->
+<?php } ?>
+<h2><?php echo $MOD_FORM['SETTINGS']; ?></h2>
+<?php
+// include the button to edit the optional module CSS files
+// Note: CSS styles for the button are defined in backend.css (div class="mod_moduledirectory_edit_css")
+// Place this call outside of any <form></form> construct!!!
+?>
+<div class="form">
+<?php
+if(function_exists('edit_module_css')) {
+    edit_module_css('form');
+}
+?><form name="edit" action="<?php echo $ModuleUrl; ?>/save_settings.php" method="post" style="margin: 0;">
+<input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+<input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<input type="hidden" name="success_email_to" value="" />
+<?php echo $admin->getFTAN(); ?>
+<div class="form block-outer">
+    <table class="form frm-table">
+        <caption class="form-header w3-header-blue-wb"><?php echo $HEADING['GENERAL_SETTINGS']; ?></caption>
+        <tbody>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['CAPTCHA_VERIFICATION']; ?>:</td>
+            <td>
+                <input type="radio" name="use_captcha" id="use_captcha_true" value="1"<?php if($aSettings['use_captcha'] == true) { echo ' checked="checked"'; } ?> />
+                <label for="use_captcha_true"><?php echo $TEXT['ENABLED']; ?></label>
+                <input type="radio" name="use_captcha" id="use_captcha_false" value="0"<?php if($aSettings['use_captcha'] == false) { echo ' checked="checked"'; } ?> />
+                <label for="use_captcha_false"><?php echo $TEXT['DISABLED']; ?></label>
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['MAX_SUBMISSIONS_PER_HOUR']; ?>:</td>
+            <td class="frm-setting_value">
+                <input type="text" name="max_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['max_submissions'])); ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['SUBMISSIONS_STORED_IN_DATABASE']; ?>:</td>
+            <td class="frm-setting_value">
+                <input type="text" name="stored_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['stored_submissions'])); ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['SUBMISSIONS_PERPAGE']; ?>:</td>
+            <td class="frm-setting_value">
+                <input type="text" name="perpage_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['perpage_submissions'])); ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['HEADER']; ?>:</td>
+            <td class="frm-setting_value">
+                <textarea name="header" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo ($aSettings['header']); ?></textarea>
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['FIELD'].' '.$TEXT['LOOP']; ?>:</td>
+            <td class="frm-setting_value">
+                <textarea name="field_loop" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo ($aSettings['field_loop']); ?></textarea>
+            </td>
+        </tr>
+        <tr>
+            <td class="frm-setting_name"><?php echo $TEXT['FOOTER']; ?>:</td>
+            <td class="frm-setting_value">
+                <textarea name="footer" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($aSettings['footer'])); ?></textarea>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+    </div>
+    <div class="form block-outer" style="margin-top: 2.225em;">
+<!-- E-Mail Optionen -->
+      <table title="<?php echo $TEXT['EMAIL'].' '.$TEXT['SETTINGS'].' '.$TEXT['ADMIN']; ?>"  class="form frm-table" style="margin-top: 3px;">
+          <caption class="form-header w3-header-blue-wb"><?php echo $TEXT['EMAIL'].' '.$TEXT['SETTINGS'].' '.$TEXT['ADMIN']; ?></caption>
+          </thead>
+          <tbody>
+          <tr>
+              <td class="frm-setting_name"><?php echo $TEXT['EMAIL'].' '.$MOD_FORM['TO']; ?>:</td>
+              <td class="frm-setting_value">
+                  <input type="text" name="email_to" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['email_to'])); ?>" />
+              </td>
+          </tr>
+
+          <tr>
+              <td class="frm-setting_name"><?php echo $TEXT['DISPLAY_NAME']; ?>:</td>
+              <td class="frm-setting_value">
+                  <input type="text" name="email_fromname" id="email_fromname" style="width: 98%;" maxlength="255" value="<?php  echo $aSettings['email_fromname'];  ?>" />
+              </td>
+          </tr>
+          <tr>
+              <td class="frm-setting_name"><?php echo $TEXT['EMAIL'].' '.$TEXT['SUBJECT']; ?>:</td>
+              <td class="frm-setting_value">
+                  <input type="text" name="email_subject" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['email_subject'])); ?>" />
+              </td>
+          </tr>
+          <tr><td>&nbsp;</td></tr>
+          </tbody>
+      </table>
+    </div>
+    <div class="form block-outer" style="margin-top: 2.225em;">
+<!-- Erfolgreich Optionen -->
+        <table title="<?php echo $TEXT['EMAIL'].' '.$MOD_FORM['CONFIRM'].' '.$MENU['USERS']; ?>"  class="form frm-table w3-table"  style="margin-top: 3px;">
+            <caption class="form-header w3-header-blue-wb"><?php echo $TEXT['EMAIL'].' '.$MOD_FORM['CONFIRM'].' '.$MENU['USERS']; ?></caption>
+            <tbody>
+            <tr>
+                <td class="frm-setting_name"><?php echo $TEXT['EMAIL'].' '.$MOD_FORM['TO']; ?>:</td>
+                <td class="frm-setting_value "><p class="frm-warning w3-container w3-section w3-pale-red w3-leftbar w3-border-red w3-hover-border-green"><?php echo  $MOD_FORM['RECIPIENT'] ?><br /><?php echo $MOD_FORM['SPAM']; ?> </p>   </td>
+            </tr>
+            <tr>
+                <td colspan="2"><p></p></td>
+            </tr>
+            <tr>
+                <td class="frm-setting_name"><?php echo $MOD_FORM['REPLYTO']; ?>:</td>
+                <td class="frm-setting_value">
+                    <select name="success_email_to" style="width: 98%;">
+                    <option value="" onclick="javascript: document.getElementById('success_email_to').style.display = 'block';"><?php echo $TEXT['NONE']; ?></option>
+<?php
+                    $success_email_to = str_replace($raw, $friendly, ($aSettings['success_email_to']));
+                    $sql  = 'SELECT `field_id`, `title` FROM `'.TABLE_PREFIX.'mod_form_fields` '
+                          . 'WHERE `section_id` = '.(int)$section_id.' '
+                          . '  AND  `type` = \'email\' '
+                          . 'ORDER BY `position` ASC ';
+                    if($query_email_fields = $database->query($sql)) {
+                        if($query_email_fields->numRows() > 0) {
+                            while($field = $query_email_fields->fetchRow(MYSQL_ASSOC)) {
+?>
+                                <option value="field<?php echo $field['field_id']; ?>"<?php if($success_email_to == 'field'.$field['field_id']) { echo ' selected'; $selected = true; } ?> onclick="javascript: document.getElementById('email_from').style.display = 'none';">
+                                    <?php echo $TEXT['FIELD'].': '.$field['title']; ?>
+                                </option>
+<?php
+                            }
+                        }
+                    }
+?>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+
+                <td class="frm-setting_name"><?php echo $TEXT['DISPLAY_NAME']; ?>:</td>
+                <td class="frm-setting_value">
+                    <?php $aSettings['success_email_fromname'] = ($aSettings['success_email_fromname'] != '' ? $aSettings['success_email_fromname'] : WBMAILER_DEFAULT_SENDERNAME); ?>
+                    <input type="text" name="success_email_fromname" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['success_email_fromname'])); ?>" />
+                </td>
+            </tr>
+
+            <tr>
+                <td class="frm-setting_name"><?php echo $TEXT['EMAIL'].' '.$TEXT['SUBJECT']; ?>:</td>
+                <td class="frm-setting_value">
+                    <input type="text" name="success_email_subject" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['success_email_subject'])); ?>" />
+                </td>
+            </tr>
+            <tr>
+                <td class="frm-setting_name"><?php echo $TEXT['EMAIL'].' '.$TEXT['TEXT']; ?>:</td>
+                <td class="frm-setting_value">
+                    <textarea name="success_email_text" cols="80" rows="1" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($aSettings['success_email_text'])); ?></textarea>
+                </td>
+            </tr>
+            <tr><td> </td></tr>
+            <tr>
+                <td class="frm-setting_name frm-newsection"><?php echo $TEXT['SUCCESS'].' '.$TEXT['PAGE']; ?>:</td>
+                <td class="frm-newsection">
+<?php
+                    // Get exisiting pages and show the pagenames
+                    $aSelectPages = array();
+                    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages`  '
+                          . 'WHERE `visibility` <> \'deleted\' ';
+                    $old_page_id = $page_id;
+                    $query = $database->query($sql);
+                    while($mail_page = $query->fetchRow(MYSQL_ASSOC)) {
+                        if(!$admin->page_is_visible($mail_page)) { continue; }
+                        $page_id = $mail_page['page_id'];
+                        $success_page = $aSettings['success_page'];
+                      //    echo $success_page.':'.$aSettings['success_page'].':'; not vailde
+                        $aSelectPages[$page_id]['menu_title'] = $mail_page['menu_title'];
+                        $aSelectPages[$page_id]['success_page'] = $mail_page['page_id'];
+                        $aSelectPages[$page_id]['selected'] = ( ($success_page == $page_id)? ' selected="selected"':'');
+                     }
+?>
+                    <select name="success_page">
+                    <option value=""><?php echo $TEXT['NONE']; ?></option>
+<?php
+                        foreach( $aSelectPages as $key=> $aValues ) {
+                        echo '<option value="'.$aValues['success_page'].'"'.$aValues['selected'].'>'.$aValues['menu_title'].'</option>';
+                        }
+?>
+                    </select>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+
+<table  class="form frm-table">
+    <tr>
+        <td>
+            <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="width: 25%; margin-top: 5px;margin-left:10px;margin-bottom:6px;">
+        </td>
+        <td>
+            <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="javascript:window.location='<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $old_page_id.'#'.$sSectionIdPrefix.$section_id; ?>';" style="width: 25%; margin-top: 5px;margin-bottom:6px; float: right;" />
+        </td>
+    </tr>
+</table>
+</form>
+</div><!--end class="form" -->
+
+<?php
+
+// Print admin footer
+$admin->print_footer();
\ No newline at end of file

Property changes on: trunk/modules/form/modify_settings.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/move_down.php
===================================================================
--- trunk/modules/form/move_down.php	(nonexistent)
+++ trunk/modules/form/move_down.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+//require('../../config.php');
+// Include the configuration file
+if (!defined('WB_PATH')) {
+    $sStartupFile = dirname(dirname(__DIR__)).'/config.php';
+    if (is_readable($sStartupFile)) {
+        require($sStartupFile);
+    } else {
+        die(
+            'tried to read a nonexisting or not readable startup file ['
+          . basename(dirname($sStartupFile)).'/'.basename($sStartupFile).']!!'
+        );
+    }
+}
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+// Get id
+$field_id = $admin->checkIDKEY('field_id', false, 'GET');
+if (!$field_id) {
+ $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Include the ordering class
+if (!class_exists('order', false)){require(WB_PATH.'/framework/class.order.php');}
+
+// Create new order object an reorder
+$order = new order(TABLE_PREFIX.'mod_form_fields', 'position', 'field_id', 'section_id');
+if($order->move_down($field_id)) {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+} else {
+    $admin->print_error($TEXT['ERROR'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/move_down.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/move_to.php
===================================================================
--- trunk/modules/form/move_to.php	(nonexistent)
+++ trunk/modules/form/move_to.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       (C) 2006, Stepan Riha
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to prevent this file from being accessed directly
+if(defined('WB_PATH') == false) { exit('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+    $aJsonRespond['modules'] = $aRequestVars['module'];
+    $aJsonRespond['success'] = true;
+    $aJsonRespond['modules_dir'] = '/modules/'.$aRequestVars['module'];
+
+// Get id
+    $table = TABLE_PREFIX.'mod_form_fields';
+    $id = (int)$aRequestVars['move_id'];
+    $id_field = 'field_id';
+    $common_field = 'section_id';
+    $sFieldOrderName = 'position';
+    $aJsonRespond['message'] = 'Activity position '.$id.' successfully changed';
+//    $group = (int)$aRequestVars['section_id'];
+

Property changes on: trunk/modules/form/move_to.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/move_up.php
===================================================================
--- trunk/modules/form/move_up.php	(nonexistent)
+++ trunk/modules/form/move_up.php	(revision 2)
@@ -0,0 +1,56 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+// Include the configuration file
+if (!defined('WB_PATH')) {
+    $sStartupFile = dirname(dirname(__DIR__)).'/config.php';
+    if (is_readable($sStartupFile)) {
+        require($sStartupFile);
+    } else {
+        die(
+            'tried to read a nonexisting or not readable startup file ['
+          . basename(dirname($sStartupFile)).'/'.basename($sStartupFile).']!!'
+        );
+    }
+}
+
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+// Get id
+$field_id = $admin->checkIDKEY('field_id', false, 'GET');
+if (!$field_id) {
+ $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $field_id ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+// Include the ordering class
+if (!class_exists('order', false)){require(WB_PATH.'/framework/class.order.php');}
+
+// Create new order object an reorder
+$order = new order(TABLE_PREFIX.'mod_form_fields', 'position', 'field_id', 'section_id');
+if($order->move_up($field_id)) {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+} else {
+    $admin->print_error($TEXT['ERROR'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/move_up.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/pastie-768561.php
===================================================================
--- trunk/modules/form/pastie-768561.php	(nonexistent)
+++ trunk/modules/form/pastie-768561.php	(revision 2)
@@ -0,0 +1,128 @@
+<?php
+class Zend_View_Helper_DiggPagination
+{
+    /**
+     * Builds & returns a variable containing the HTML code to display pagination links based on given params
+     *
+     * @param int $page - the current page
+     * @param int $totalitems - the number of items to paginate (not total number of pages)
+     * @param int $limit - the number of items per page
+     * @param int $adjacents - the number of page links to put adjacent to the current page
+     * @param string $targetpage - URL to the web page requiring pagination links e.g. /module/controller/action/id/abc123123/
+     * @param string $pagestring - the URL params to pass the new page value e.g. page/ (the number is inserted at the end of the string)
+     * @param string $cssClass - the class of the containing DIV tag for the returned pagination
+     * @return void
+     * @author Stranger Studios, adapted by Rich Milns
+     * @see http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
+     */
+    public function diggPagination($page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = "/", $pagestring = "page/", $cssClass='diggPagination')
+    {
+        //defaults
+        if(!$adjacents) $adjacents = 1;
+        if(!$limit) $limit = 15;
+        if(!$page) $page = 1;
+        if(!$targetpage) $targetpage = "/";
+
+        //other vars
+        $prev = $page - 1;                                    //previous page is page - 1
+        $next = $page + 1;                                    //next page is page + 1
+        $lastpage = ceil($totalitems / $limit);                //lastpage is = total items / items per page, rounded up.
+        $lpm1 = $lastpage - 1;                                //last page minus 1
+
+        /*
+            Now we apply our rules and draw the pagination object.
+            We're actually saving the code to a variable in case we want to draw it more than once.
+        */
+        $pagination = "";
+        if($lastpage > 1)
+        {
+            $pagination .= "<div class=\"" . $cssClass . "\"";
+            if($margin || $padding)
+            {
+                $pagination .= " style=\"";
+                if($margin)
+                    $pagination .= "margin: $margin;";
+                if($padding)
+                    $pagination .= "padding: $padding;";
+                $pagination .= "\"";
+            }
+            $pagination .= ">";
+
+            //previous button
+            if ($page > 1)
+                $pagination .= "<a href=\"$targetpage$pagestring$prev\">« prev</a>";
+            else
+                $pagination .= "<span class=\"disabled\">« prev</span>";
+
+            //pages
+            if ($lastpage < 7 + ($adjacents * 2))    //not enough pages to bother breaking it up
+            {
+                for ($counter = 1; $counter <= $lastpage; $counter++)
+                {
+                    if ($counter == $page)
+                        $pagination .= "<span class=\"current\">$counter</span>";
+                    else
+                        $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
+                }
+            }
+            elseif($lastpage >= 7 + ($adjacents * 2))    //enough pages to hide some
+            {
+                //close to beginning; only hide later pages
+                if($page < 1 + ($adjacents * 3))
+                {
+                    for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
+                    {
+                        if ($counter == $page)
+                            $pagination .= "<span class=\"current\">$counter</span>";
+                        else
+                            $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
+                    }
+                    $pagination .= "<span class=\"elipses\">...</span>";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";
+                }
+                //in middle; hide some front and some back
+                elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
+                {
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>";
+                    $pagination .= "<span class=\"elipses\">...</span>";
+                    for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
+                    {
+                        if ($counter == $page)
+                            $pagination .= "<span class=\"current\">$counter</span>";
+                        else
+                            $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
+                    }
+                    $pagination .= "...";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";
+                }
+                //close to end; only hide early pages
+                else
+                {
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>";
+                    $pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>";
+                    $pagination .= "<span class=\"elipses\">...</span>";
+                    for ($counter = $lastpage - (1 + ($adjacents * 3)); $counter <= $lastpage; $counter++)
+                    {
+                        if ($counter == $page)
+                            $pagination .= "<span class=\"current\">$counter</span>";
+                        else
+                            $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
+                    }
+                }
+            }
+
+            //next button
+            if ($page < $counter - 1)
+                $pagination .= "<a href=\"" . $targetpage . $pagestring . $next . "\">next »</a>";
+            else
+                $pagination .= "<span class=\"disabled\">next »</span>";
+            $pagination .= "</div>\n";
+        }
+
+        return $pagination;
+
+    }
+}
\ No newline at end of file

Property changes on: trunk/modules/form/pastie-768561.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/reorgPosition.php
===================================================================
--- trunk/modules/form/reorgPosition.php	(nonexistent)
+++ trunk/modules/form/reorgPosition.php	(revision 2)
@@ -0,0 +1,44 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         news
+ * @subpackage      reorgPosition
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ 
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+require(WB_PATH.'/modules/admin.php');
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+if(!$admin->checkFTAN()) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+if ( !class_exists('order', false) ) { require(WB_PATH.'/framework/class.order.php'); }
+$form   = new order(TABLE_PREFIX.'mod_form_fields', 'position', 'field_id', 'section_id');
+$form->clean( $section_id );
+
+$admin->print_success($TEXT['SUCCESS'], $backlink );
+

Property changes on: trunk/modules/form/reorgPosition.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/save_field_new.php
===================================================================
--- trunk/modules/form/save_field_new.php	(nonexistent)
+++ trunk/modules/form/save_field_new.php	(revision 2)
@@ -0,0 +1,106 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+$backUrl = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id;
+// check FTAN
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error( 'checkFTAN'.$MESSAGE['GENERIC_SECURITY_ACCESS'], $backUrl );
+}
+// Get id
+$field_id = intval($admin->checkIDKEY('field_id', false ));
+if (!$field_id) {
+    $admin->print_header();
+    $admin->print_error( '$field_id'.$MESSAGE['GENERIC_SECURITY_ACCESS'].'', $backUrl );
+}
+$backModuleUrl = WB_URL.'/modules/'.basename(__DIR__).'/modify_field.php?page_id='.$page_id.'&section_id='.$section_id.'&field_id='.$admin->getIDKEY($field_id);
+// After check print the header to get a new FTAN
+$admin->print_header();
+// Validate all fields
+if( ($admin->get_post('title') == '') || ($admin->get_post('type') == '') ) {
+    $admin->print_error($MESSAGE['GENERIC_FILL_IN_ALL'], $backModuleUrl );
+} else {
+    $title = $admin->StripCodeFromText(($admin->get_post('title')));
+    $type = ($admin->get_post('type'));
+    $required = (int) ($admin->get_post('required'));
+}
+// If field type has multiple options, get all values and implode them
+    $value = $extra = '';
+    $list_count = intval($admin->get_post('list_count'));
+    if(is_numeric($list_count)) {
+        $values = array();
+        for($i = 1; $i <= $list_count; $i++) {
+            if($admin->get_post('value'.$i) != '') {
+                $values[] = str_replace(",","&#44;",$admin->get_post('value'.$i));
+            }
+        }
+        $value = implode(',', $values);
+    } else {
+        $admin->print_error( ''.$MESSAGE['GENERIC_SECURITY_ACCESS'].''.$list_count, $backUrl );
+    }
+
+// prepare sql-update
+    switch($admin->get_post('type')):
+        case 'textfield':
+            $value = $admin->StripCodeFromText($admin->get_post('value'));
+            $extra = intval($admin->get_post('length'));
+            break;
+        case 'textarea':
+            $value = $admin->StripCodeFromText($admin->get_post('value'));
+            $extra = '';
+            break;
+        case 'heading':
+            $extra = $admin->StripCodeFromText( $admin->get_post('template'));
+            if(trim($extra) == '') $extra = '<tr><td class="frm-field_heading" colspan="2">{TITLE}{FIELD}</td></tr>';
+            break;
+        case 'select':
+            $extra = intval($admin->get_post('size')).','.$admin->get_post('multiselect');
+            break;
+        case 'checkbox':
+            $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+            break;
+        case 'radio':
+            $extra = $admin->StripCodeFromText( $admin->get_post('seperator'));
+            break;
+        default:
+            $value = '';
+            $extra = '';
+            break;
+    endswitch;
+// Update row
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_form_fields` SET '
+    . '`title`=\''.$database->escapeString($title).'\', '
+    . '`type`=\''.$database->escapeString($type).'\', '
+    . '`required`=\''.$database->escapeString($required).'\', '
+    . '`extra`=\''.$database->escapeString($extra).'\', '
+    . '`value`=\''.$database->escapeString($value).'\' '
+    . 'WHERE field_id = '.(int)$field_id.' ';
+    if( $database->query($sql) ) {
+        $admin->print_success($TEXT['SUCCESS'], $backModuleUrl );
+    }else {
+        $admin->print_error($database->get_error(), $backModuleUrl );
+    }
+// Print admin footer
+    $admin->print_footer();
\ No newline at end of file

Property changes on: trunk/modules/form/save_field_new.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/save_settings.php
===================================================================
--- trunk/modules/form/save_settings.php	(nonexistent)
+++ trunk/modules/form/save_settings.php	(revision 2)
@@ -0,0 +1,142 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$sBacklink = ADMIN_URL.'/pages/modify.php?page_id='.$page_id;
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $sBacklink);
+}
+$admin->print_header();
+
+if (!function_exists('emailAdmin')) {
+    function emailAdmin() {
+        global $database,$admin;
+        $retval = $admin->get_email();
+        if($admin->get_user_id()!='1') {
+            $sql  = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                  . 'WHERE `user_id`=\'1\' ';
+            $retval = $database->get_one($sql);
+        }
+        return $retval;
+    }
+}
+
+// load module language file
+$sAddonName = basename(__DIR__);
+require(__DIR__.'/languages/EN.php');
+if(file_exists(__DIR__.'/languages/'.LANGUAGE .'.php')) {
+    require(__DIR__.'/languages/'.LANGUAGE .'.php');
+}
+
+// This code removes any <?php tags and adds slashes
+$friendly = array('&lt;', '&gt;', '?php');
+$raw = array('<', '>', '');
+
+//$header     = CleanInput('header');
+$header = $admin->StripCodeFromText($admin->get_post('header'),true);
+//$field_loop = CleanInput('field_loop');
+$field_loop = $admin->StripCodeFromText($admin->get_post('field_loop'),true);
+$footer = $admin->StripCodeFromText($admin->get_post('footer'),true);
+//$email_to   = CleanInput('email_to');
+$email_to   = $admin->StripCodeFromText($admin->get_post('email_to'), true);
+$email_to   = $admin->StripCodeFromText($email_to != '' ? $email_to : emailAdmin());
+$email_from = SERVER_EMAIL;
+//$use_captcha =CleanInput('use_captcha');
+$use_captcha = $admin->StripCodeFromText($admin->get_post('use_captcha'),true);
+
+if( isset($_POST['email_fromname_field']) && ($_POST['email_fromname_field'] != '')) {
+    $email_fromname = $admin->StripCodeFromText($admin->get_post('email_fromname_field'),true);
+} else {
+    $email_fromname = $admin->StripCodeFromText($admin->get_post('email_fromname'),true);
+}
+
+$email_fromname = ($email_fromname != '' ? $email_fromname : WBMAILER_DEFAULT_SENDERNAME);
+$email_subject = ($admin->StripCodeFromText($admin->get_post('email_subject'),true));
+$success_page = ($admin->StripCodeFromText($admin->get_post('success_page'),true));
+$success_email_to = ($admin->StripCodeFromText($admin->get_post('success_email_to'),true));
+$success_email_from = (SERVER_EMAIL);
+$success_email_fromname = ($admin->StripCodeFromText($admin->get_post('success_email_fromname'),true));
+$success_email_fromname = ($success_email_fromname != '' ? $success_email_fromname : $email_fromname);
+$success_email_text = ($admin->StripCodeFromText($admin->get_post('success_email_text'),true));
+$success_email_text = (($success_email_text != '') ? $success_email_text : '');
+$success_email_subject = ($admin->StripCodeFromText($admin->get_post('success_email_subject'),true));
+$success_email_subject = (($success_email_subject  != '') ? $success_email_subject : '');
+
+if(!is_numeric($_POST['max_submissions'])) {
+    $max_submissions = 50;
+} else {
+    $max_submissions = intval($_POST['max_submissions']);
+}
+if(!is_numeric($_POST['stored_submissions'])) {
+    $stored_submissions = 100;
+} else {
+    $stored_submissions = intval($_POST['stored_submissions']);
+}
+if(!is_numeric($_POST['perpage_submissions'])) {
+    $perpage_submissions = 10;
+} else {
+    $perpage_submissions = intval($_POST['perpage_submissions']);
+}
+
+// Make sure max submissions is not greater than stored submissions if stored_submissions <>0
+if($max_submissions > $stored_submissions) {
+    $max_submissions = $stored_submissions;
+}
+$sSectionIdPrefix = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? SEC_ANCHOR : 'Sec' );
+
+$sBacklink = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#'.$sSectionIdPrefix.$section_id;
+
+// Update settings
+$sql  = 'UPDATE `'.TABLE_PREFIX.'mod_form_settings` SET '
+      . '`header` = \''.$database->escapeString($header).'\', '
+      . '`field_loop` = \''.$database->escapeString($field_loop).'\', '
+      . '`footer` = \''.$database->escapeString($footer).'\', '
+      . '`email_to` = \''.$database->escapeString($email_to).'\', '
+      . '`email_from` = \''.$database->escapeString($email_from).'\', '
+      . '`email_fromname` = \''.$database->escapeString($email_fromname).'\', '
+      . '`email_subject` = \''.$database->escapeString($email_subject).'\', '
+      . '`success_page` = '.(int)$success_page.', '
+      . '`success_email_to` = \''.$database->escapeString($success_email_to).'\', '
+      . '`success_email_from` = \''.$database->escapeString($success_email_from).'\', '
+      . '`success_email_fromname` = \''.$database->escapeString($success_email_fromname).'\', '
+      . '`success_email_text` = \''.$database->escapeString($success_email_text).'\', '
+      . '`success_email_subject` = \''.$database->escapeString($success_email_subject).'\', '
+      . '`max_submissions` = \''.$database->escapeString($max_submissions).'\', '
+      . '`stored_submissions` = \''.$database->escapeString($stored_submissions).'\', '
+      . '`perpage_submissions` = \''.$database->escapeString($perpage_submissions).'\', '
+      . '`use_captcha` = \''.$database->escapeString($use_captcha).'\' '
+      . 'WHERE `section_id` = '.(int)$section_id.' ';
+
+if($database->query($sql)) {
+
+    $admin->print_success($TEXT['SUCCESS'], $sBacklink);
+}
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), $sBacklink);
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/save_settings.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/search.php
===================================================================
--- trunk/modules/form/search.php	(nonexistent)
+++ trunk/modules/form/search.php	(revision 2)
@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ * @description     
+ */
+// Must include code to stop this file being access directly
+/* -------------------------------------------------------- */
+if(defined('WB_PATH') == false)
+{
+    // Stop this file being access directly
+        die('<head><title>Access denied</title></head><body><h2 style="color:red;margin:3em auto;text-align:center;">Cannot access this file directly</h2></body></html>');
+}
+/* -------------------------------------------------------- */
+
+function form_search($func_vars) {
+    extract($func_vars, EXTR_PREFIX_ALL, 'func');
+    
+    // how many lines of excerpt we want to have at most
+    $max_excerpt_num = $func_default_max_excerpt;
+    $divider = ".";
+    $result = false;
+    
+    // fetch all form-fields on this page
+    $table = TABLE_PREFIX."mod_form_fields";
+    $query = $func_database->query("
+        SELECT title, value
+        FROM $table
+        WHERE section_id='$func_section_id'
+        ORDER BY position ASC
+    ");
+    // now call print_excerpt() only once for all items
+    if($query->numRows() > 0) {
+        $text="";
+        while($res = $query->fetchRow()) {
+            $text .= $res['title'].$divider.$res['value'].$divider;
+        }
+        $mod_vars = array(
+            'page_link' => $func_page_link,
+            'page_link_target' => "#wb_section_$func_section_id",
+            'page_title' => $func_page_title,
+            'page_description' => $func_page_description,
+            'page_modified_when' => $func_page_modified_when,
+            'page_modified_by' => $func_page_modified_by,
+            'text' => $text,
+            'max_excerpt_num' => $max_excerpt_num
+        );
+        if(print_excerpt2($mod_vars, $func_vars)) {
+            $result = true;
+        }
+    }
+    return $result;
+}

Property changes on: trunk/modules/form/search.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/templates/default/OverviewSubmission.htt
===================================================================
--- trunk/modules/form/templates/default/OverviewSubmission.htt	(nonexistent)
+++ trunk/modules/form/templates/default/OverviewSubmission.htt	(revision 2)
@@ -0,0 +1,53 @@
+<!-- BEGIN main_block -->
+<br /><br />
+<h2 id="submissions">{TEXT_SUBMISSIONS}</h2>
+<table summary="" width="100%" cellpadding="2" cellspacing="0" border="0" class="">
+<thead>
+<tr style="background-color: #dddddd; font-weight: bold;">
+    <th width="23" style="text-align: center;">&nbsp;</th>
+    <th width="33" style="text-align: right;"> ID </th>
+    <th width="200" style="padding-left: 10px;">{TEXT_SUBMITTED}</th>
+    <th width="200" style="padding-left: 10px;">{TEXT_USER}</th>
+    <th width="350">{TEXT_EMAIL} {MOD_FORM_FROM}</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+</tr>
+</thead>
+<tfoot class="frm-pagination">
+    <tr style="background-color: #dddddd; font-weight: bold;">
+        <td colspan="9" style="text-align: left;">
+{PAGINATION}
+        </td>
+    </tr>
+</tfoot>
+<tbody>
+<!-- BEGIN loop_submmission_block -->
+<tr class="row_{ROW_BIT}">
+    <td width="20" style="padding-left: 5px;text-align: center;">
+        <a href="{WB_URL}/modules/form/view_submission.php?{QUERYSTR}" title="{TEXT_OPEN}">
+            <img src="{THEME_URL}/images/folder_16.png" alt="{TEXT_OPEN}" />
+        </a>
+    </td>
+    <td width="30" style="padding-right: 5px;text-align: right;">{SUBMISSION_ID}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_CREATE_WHEN}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_BY}</td>
+    <td width="350">{SUBMISSION_EMAIL}</td>
+    <td width="20" style="text-align: center;">&nbsp;</td>
+    <td width="20">&nbsp;</td>
+    <td width="20" style="text-align: center;">
+        <a href="javascript:confirm_link('{TEXT_ARE_YOU_SURE}','{WB_URL}/modules/form/delete_submission.php?{QUERYSTR}');" title="{TEXT_DELETE}">
+            <img src="{THEME_URL}/images/delete_16.png" alt="X" />
+        </a>
+    </td>
+    <td width="20">&nbsp;</td>
+</tr>
+<!-- END loop_submmission_block -->
+
+<tr><td colspan="9">{TEXT_NONE_FOUND}</td></tr>
+
+</tbody>
+</table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/templates/default/css/frontend.css
===================================================================
--- trunk/modules/form/templates/default/css/frontend.css	(nonexistent)
+++ trunk/modules/form/templates/default/css/frontend.css	(revision 2)
@@ -0,0 +1,36 @@
+.frm-field_table { width :100%; vertical-align :middle; table-layout :auto; border-collapse :separate; border :none; }
+.frm-field_table tbody { font-size :100%; padding :0.4em 0.2em; }
+.frm-field_table tbody td { border :none; }
+.frm-field_table tbody td.field_heading,
+.frm-field_table tbody td.frm-field_heading { border-bottom :1px solid #666666; border-top :1px solid #666666; color :#666666; font-weight :bold; background: #DADADA; }
+.frm-formular { float: none; }
+.frm-required { color :#FF0000; }
+.frm-field_title { width :25%; vertical-align :top; white-space :nowrap; text-align :right; }
+.frm-textfield { width : 100%; }
+.frm-textarea { width :100%; height :100px; }
+.frm-select { width :50%; }
+.frm-select option { width :95%; }
+.frm-field_checkbox { cursor :pointer; width : 1.025em; vertical-align :middle; }
+.frm-checkbox_label { cursor :pointer; vertical-align :middle; }
+.frm-radio_label { cursor :pointer; }
+.frm-email { width : 100%; }
+/*** Don't remove the class nixhier, this is required for ASP ***/
+.nixhier,
+.frm-nixhier { display :none; }
+.frm-submission { margin :0 auto; position :relative; width :auto; }
+.print-email { font-size :0.8em; color :#000000; margin :10px auto; }
+.frm-warning { background :#FFEEEE; border :0.1em #884444 solid; color :#E10000; margin-bottom :1em; padding :0.5em 2.8em; font-size :96.5%; font-weight :normal; }
+.frm-note { background :#EEFFEE; border :0.2em #448844 solid; color :#004400; margin-bottom :1em; padding :0.8em; font-size :1.2em; font-weight :bold; }
+.previewprinttop { text-align :right; }
+.previewprinttop img { padding-left :1em; }
+.frm-thankyou { }
+.frm-field_table tbody tr { line-height: 1.955; }
+.frm-warning h3 { font-size :120%; line-height :1.3em; margin :0.1em; padding :0.1em; }
+ .frm-warning ol { color :#333333; margin :0.1em; }
+.frm-field_table input[type="submit"] { padding :0.1em 0.8em; }
+ .frm-warning a,
+ p.frm-warning a { background :transparent; padding-left :0; }
+fieldset.frm-fieldset { border :none; margin :0 auto; padding :0%; width: 90%; }
+.frm-warning-success-email { display :block; }
+.previewPrintTop { float :right; }
+.previewPrintTop span { display : none; }
Index: trunk/modules/form/templates/default/img/empty.txt
===================================================================
--- trunk/modules/form/templates/default/img/empty.txt	(nonexistent)
+++ trunk/modules/form/templates/default/img/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/form/templates/default/img/print.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/form/templates/default/img/print.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/form/templates/default/js/empty.txt
===================================================================
--- trunk/modules/form/templates/default/js/empty.txt	(nonexistent)
+++ trunk/modules/form/templates/default/js/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/form/templates/default/submessage.htt
===================================================================
--- trunk/modules/form/templates/default/submessage.htt	(nonexistent)
+++ trunk/modules/form/templates/default/submessage.htt	(revision 2)
@@ -0,0 +1,41 @@
+<!-- BEGIN main_block -->
+
+<div class="previewPrintTop">
+
+<a title="{TEXT_PRINT_PAGE} ({TEXT_REQUIRED_JS})" href="javascript:window.print()">
+<span>{TEXT_PRINT_PAGE}</span><img width="16" height="14" alt="" src="{MODULE_URL}/htt/print.gif" />
+</a>
+</div>
+<br /><hr />
+<table class="frm-submission print-email">
+    <thead>
+        <tr class="frm-thankyou">
+            <td colspan="2">{SUCCESS_EMAIL_TEXT}<br /><hr /></td>
+        </tr>
+    </thead>
+    <tbody class="frm-tbody">
+        <tr class=" {NIX_HIER}">
+           <td colspan="2" ><p class="frm-note frm-warning-success-email">{SUCCESS_PRINT}</p></td>
+        </tr>
+        <tr class="frm-submission_submission_id">
+            <td>{TEXT_SUBMISSION_ID}: {submission_submission_id}</td>
+            <td></td>
+        </tr>
+        <tr class="frm-submission_submitted_when">
+            <td>{TEXT_SUBMITTED}: {submission_submitted_when}</td>
+            <td></td>
+        </tr>
+        <tr class="frm-user_display_name">
+            <td>{TEXT_USER}: {user_display_name}</td>
+            <td> </td>
+        </tr>
+        <tr class="frm-hr">
+            <td colspan="2"><hr /></td>
+        </tr>
+        <tr class="frm-submission_body">
+            <td colspan="2">{submission_body}</td>
+        </tr>
+    </tbody>
+</table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/templates/default/view.htt
===================================================================
--- trunk/modules/form/templates/default/view.htt	(nonexistent)
+++ trunk/modules/form/templates/default/view.htt	(revision 2)
@@ -0,0 +1,14 @@
+<!-- BEGIN main_block -->
+
+<!-- available replacements
+    URL
+    HEIGHT
+    NOTICE
+-->
+
+<iframe src="{URL}" width="100%" height="{HEIGHT}">
+    {NOTICE}
+    <a href="{URL}" target="_blank">{URL}</a>
+</iframe>
+
+<!-- END main_block -->
Index: trunk/modules/form/templates/default/view.twig
===================================================================
--- trunk/modules/form/templates/default/view.twig	(nonexistent)
+++ trunk/modules/form/templates/default/view.twig	(revision 2)
@@ -0,0 +1,14 @@
+
+{#
+- available replacements
+    URL
+    HEIGHT
+    NOTICE
+#}
+
+<iframe src="{{ URL }}" width="100%" height="{{ HEIGHT }}" frameborder="0" scrolling="auto">
+    {NOTICE}
+    <a href="{{ URL }}" target="_blank">{{ URL }}</a>
+</iframe>
+
+{# end of file #}

Property changes on: trunk/modules/form/templates/default/view.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/themes/default/OverviewSubmission.htt
===================================================================
--- trunk/modules/form/themes/default/OverviewSubmission.htt	(nonexistent)
+++ trunk/modules/form/themes/default/OverviewSubmission.htt	(revision 2)
@@ -0,0 +1,53 @@
+<!-- BEGIN main_block -->
+<br /><br />
+<h2 id="submissions">{TEXT_SUBMISSIONS}</h2>
+<table summary="" width="100%" cellpadding="2" cellspacing="0" border="0" class="">
+<thead>
+<tr style="background-color: #dddddd; font-weight: bold;">
+    <th width="23" style="text-align: center;">&nbsp;</th>
+    <th width="33" style="text-align: right;"> ID </th>
+    <th width="200" style="padding-left: 10px;">{TEXT_SUBMITTED}</th>
+    <th width="200" style="padding-left: 10px;">{TEXT_USER}</th>
+    <th width="350">{TEXT_EMAIL} {MOD_FORM_FROM}</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+    <th width="20">&nbsp;</th>
+</tr>
+</thead>
+<tfoot class="frm-pagination">
+    <tr style="background-color: #dddddd; font-weight: bold;">
+        <td colspan="9" style="text-align: left;">
+{PAGINATION}
+        </td>
+    </tr>
+</tfoot>
+<tbody>
+<!-- BEGIN loop_submmission_block -->
+<tr class="row_{ROW_BIT}">
+    <td width="20" style="padding-left: 5px;text-align: center;">
+        <a href="{WB_URL}/modules/form/view_submission.php?{QUERYSTR}" title="{TEXT_OPEN}">
+            <img src="{THEME_URL}/images/folder_16.png" alt="{TEXT_OPEN}" />
+        </a>
+    </td>
+    <td width="30" style="padding-right: 5px;text-align: right;">{SUBMISSION_ID}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_CREATE_WHEN}</td>
+    <td width="200" style="padding-left: 10px;">{SUBMISSION_BY}</td>
+    <td width="350">{SUBMISSION_EMAIL}</td>
+    <td width="20" style="text-align: center;">&nbsp;</td>
+    <td width="20">&nbsp;</td>
+    <td width="20" style="text-align: center;">
+        <a href="javascript:confirm_link('{TEXT_ARE_YOU_SURE}','{WB_URL}/modules/form/delete_submission.php?{QUERYSTR}');" title="{TEXT_DELETE}">
+            <img src="{THEME_URL}/images/delete_16.png" alt="X" />
+        </a>
+    </td>
+    <td width="20">&nbsp;</td>
+</tr>
+<!-- END loop_submmission_block -->
+
+<tr><td colspan="9">{TEXT_NONE_FOUND}</td></tr>
+
+</tbody>
+</table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/themes/default/css/backend.css
===================================================================
--- trunk/modules/form/themes/default/css/backend.css	(nonexistent)
+++ trunk/modules/form/themes/default/css/backend.css	(revision 2)
@@ -0,0 +1,154 @@
+.frm-table { border-collapse: collapse; width: 100%; white-space: nowrap; }
+.frm-setting_name { vertical-align :top; width :25%; white-space :nowrap; }
+.frm-setting_value { vertical-align :top; width :70%; }
+.frm-newsection { border-top :1px dashed #ffffff; }
+.frm-warning { background :#FFEEEE; border :0.1em #884444 solid; color :#E10000; margin-bottom :1em; padding :0.5em 2.8em; font-size :96.5%; font-weight :normal; }
+.frm-note { background :#EEFFEE; border :0.2em #448844 solid; color :#004400; margin-bottom :1em; padding :0.8em; font-size :1.2em; font-weight :bold; }
+table.form tbody tr { line-height: 3.225em; }
+.frm-setting_name,
+table.form tbody td.setting_name {
+  color: #0d4b6e;
+  font-weight: bold;
+  min-width: 200px;
+  padding-right: 0.525em;
+  text-align: right;
+  vertical-align: top;
+  width: 20%;
+}
+table.form caption.form-header {
+  background: #538199 none repeat scroll 0 0;
+  color: #fff;
+  font-size: 1.425em;
+  height: 2.225em;
+  text-align: left;
+}
+table.form caption.form-header {
+  line-height: 2.225em;
+  margin: 0 0 0.825em;
+  white-space: normal;
+  padding-left: 0.925em;
+}
+input.mod_form_edit_css { color :#000000; background-color :#f0f0f0; border :1px solid #808080; padding :2px; margin :0; margin-left :625px; margin-top :-20px; margin-bottom :5px; width :110px; }
+/*
+.row_a { background : transparent; }
+.row_b { background : #dfebff; }
+  The definitions below provide the style for the edit CSS button
+  Required CSS class name: input.mod_moduledirectory_edit_css
+*/
+table#frm-ScrollTable { text-align :left; font-size :12px; border :1px ridge #dadada; font-family :verdana; background :transparent; color :#0066ff; }
+table.mod_form,
+table#frm-ScrollTable { border-collapse: collapse; width: 100%; }
+table#frm-ScrollTable thead  { cursor :pointer; width: 100%; }
+
+table#frm-ScrollTable thead tr,
+table#frm-ScrollTable tfoot tr { font-weight: bold; font-size: 0.9525em; height: 1.925em; padding: 0.525em 0; background: #7D9AB6; background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #45788D; }
+
+table.mod_form { border-collapse: collapse; width: 100%; }
+table.mod_form td form.mod_form { padding: 0 0.325em; }
+table.mod_form td:first-child { text-align:right; padding: 0 0.525em; }
+/**/
+table#frm-ScrollTable {
+    color: #333;
+    font-family: Helvetica, Arial, sans-serif;
+    width: 100%;
+    /* Table reset stuff */
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+tbody.scrolling {
+    max-height: 21.925em;
+    overflow: auto;
+    display: inline-block;
+    width: 100%;
+}
+td.frm-Scroll, th.frm-Scroll {
+    border: 0 none;
+    height: 2.255em;
+}
+th.frm-Scroll {
+    /* Gradient Background */
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    color: #FFF;
+    font-weight: bold;
+   /* height: 40px;*/
+}
+td.frm-Scroll { background: #FFFFFF; text-align: left; }
+/* Zebra Stripe Rows */
+tr.frm-Scroll td { background: #FFFFFF; }
+tr.frm-Scroll:nth-child(odd) td { background: #e8e8e8; }
+tr.frm-Scroll:hover td { background: #FBFCE0; }
+/* First-child blank cells! */
+ tr.frm-Scroll td.frm-Scroll:first-child, tr.frm-Scroll th.frm-Scroll:first-child {
+   /* background: none;*/
+    font-size: 0.9525em;
+    text-align: right;
+   /* padding-right: 5px;*/
+    width: 100%;
+}
+/* Add border-radius to specific cells! */
+ tr.frm-Scroll:first-child th.frm-Scroll:nth-child(2) {
+    border-radius: 5px 0 0 0;
+}
+tr.frm-Scroll:first-child th.frm-Scroll:last-child {
+    border-radius: 0 5px 0 0;
+}
+
+/*****************************************/
+thead.frm-Scroll { display: table; float: left; width: 100%; }
+/*
+thead th.frm-Scroll {
+    text-align: left;
+}
+tbody.scrolling {
+    float: left;
+    width: 100%;
+}
+tbody tr.frm-Scroll {
+    display: table;
+    width: 100%;
+}
+*/
+table.mod_form td a {
+    background:transparent none 0 0 no-repeat;
+    color:#000;
+    font-weight:bold;
+    opacity:.7;
+    padding: 3px 0 3px 6px;
+    -webkit-transition:all .2s ease-in-out;
+    -moz-transition:all .2s ease-in-out;
+    }
+table.mod_form thead {
+    background:#7D9AB6;
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    color:#fff;
+}
+table.mod_form th {
+    background:#7D9AB6;
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    border-bottom:1px solid rgba(255,255,255,.7);
+    -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    -moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    -o-box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
+    padding:6px 10px;
+    color:#fff;
+    }
+
+table.mod_form td {
+    border-bottom:1px solid #fafafa;
+    border-bottom:1px solid rgba(0,0,0,.05);
+   /* padding:6px 10px;*/
+    color:rgba(0,0,0,.7);
+}
+
+table.mod_form tbody tr { line-height: 2.225em; background: #e8e8e8; }
+table.mod_form tbody tr:nth-child(odd) { background: #FFFFFF; }
+table.mod_form tbody tr:hover { background: #FBFCE0; }
+
+table#frm-ScrollTable tbody tr {  }
+table#frm-ScrollTable tbody tr { line-height: 1.225em; background: #e8e8e8;  }
+table#frm-ScrollTable tbody tr:nth-child(odd) { background: #FFFFFF; }
+table#frm-ScrollTable tbody tr:hover { background: #FBFCE0; }
Index: trunk/modules/form/themes/default/css/scrolltable.css
===================================================================
--- trunk/modules/form/themes/default/css/scrolltable.css	(nonexistent)
+++ trunk/modules/form/themes/default/css/scrolltable.css	(revision 2)
@@ -0,0 +1,71 @@
+/*
+.table-fixed { width: 100%; background-color: #f3f3f3;}
+.table-fixed tbody { height: 200px; overflow-y: auto; width: 100%;}
+.table-fixed thead, .table-fixed tbody, .table-fixed tr, .table-fixed td, .table-fixed th { display: flexbox;}
+.table-fixed tbody td { }
+.table-fixed thead tr th { border-color: #e67e22;}
+*/
+
+table#tableData,
+table#news-ScrollTable {
+    color: #333;
+    font-family: Helvetica, Arial, sans-serif;
+    width: 100%;
+    /* Table reset stuff */
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+tbody.scrolling {
+    max-height: 21.925em;
+    overflow: auto;
+    display: inline-block;
+    width: 98%;
+}
+td.news-Scroll, th.frm-Scroll {
+    border: 0 none;
+    height: 2.255em;
+}
+th.news-Scroll {
+    /* Gradient Background */
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    color: #FFF;
+    font-weight: bold;
+   /* height: 40px;*/
+}
+td.news-Scroll { background: #FFFFFF; text-align: left; }
+/* Zebra Stripe Rows */
+tr.news-Scroll td { background: #FFFFFF; }
+tr.news-Scroll:nth-child(odd) td { background: #e8e8e8; }
+tr.news-Scroll:hover td { background: #FBFCE0; }
+/* First-child blank cells! */
+ tr.news-Scroll td.news-Scroll:first-child, tr.news-Scroll th.news-Scroll:first-child {
+   /* background: none;*/
+    font-size: 0.9525em;
+    text-align: right;
+   /* padding-right: 5px;*/
+    width: 100%;
+}
+/* Add border-radius to specific cells! */
+ tr.news-Scroll:first-child th.news-Scroll:nth-child(2) {
+    border-radius: 5px 0 0 0;
+}
+tr.news-Scroll:first-child th.news-Scroll:last-child {
+    border-radius: 0 5px 0 0;
+}
+
+thead.news-Scroll { /*display: table; float: left;*/ width: 100%; }
+
+table#news-ScrollTable { text-align :left; font-size :12px; border :1px ridge #dadada; font-family :verdana; background :transparent; color :#0066ff; }
+table.mod_form,
+table#news-ScrollTable { border-collapse: collapse; width: 100%; }
+table#news-ScrollTable thead  { cursor :pointer; width: 100%; }
+
+table#news-ScrollTable thead tr,
+table#news-ScrollTable tfoot tr { font-weight: bold; font-size: 0.9525em; height: 1.925em; padding: 0.525em 0; background: #7D9AB6; background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #45788D; }
+
+table#news-ScrollTable tbody tr {  }
+table#news-ScrollTable tbody tr { line-height: 1.225em; background: #e8e8e8;  }
+table#news-ScrollTable tbody tr:nth-child(odd) { background: #FFFFFF; }
+table#news-ScrollTable tbody tr:hover { background: #FBFCE0; }
+/*****************************************/
\ No newline at end of file
Index: trunk/modules/form/themes/default/img/empty.txt
===================================================================
--- trunk/modules/form/themes/default/img/empty.txt	(nonexistent)
+++ trunk/modules/form/themes/default/img/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/form/themes/default/img/print.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/form/themes/default/img/print.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/form/themes/default/js/empty.txt
===================================================================
--- trunk/modules/form/themes/default/js/empty.txt	(nonexistent)
+++ trunk/modules/form/themes/default/js/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/form/themes/default/modify.htt
===================================================================
--- trunk/modules/form/themes/default/modify.htt	(nonexistent)
+++ trunk/modules/form/themes/default/modify.htt	(revision 2)
@@ -0,0 +1,43 @@
+<!-- BEGIN main_block -->
+
+<!-- available replacements
+    WB_URL
+    THEME_URL
+    THEME_PATH
+    SAVE_URL
+    TEXT_URL
+    CANCEL_URL
+    TEXT_HEIGHT
+    TEXT_SAVE
+    TEXT_CANCEL
+    HEIGHT
+    URL
+    FTAN
+-->
+
+<form action="{SAVE_URL}" method="post">
+    <input type="hidden" name="page_id" value="{PAGE_ID}" />
+    <input type="hidden" name="section_id" value="{SECTION_ID}" />
+    <input type="hidden" name="cmd" value="save" />
+    {FTAN}
+    <table class="frm-table">
+        <tr>
+            <td align="left" width="50">{TEXT_URL}:</td>
+            <td><input type="text" name="url" value="{URL}" style="width: 100%;" /></td>
+        </tr>
+        <tr>
+            <td align="left" width="50">{TEXT_HEIGHT}:</td>
+            <td><input type="text" name="height" value="{HEIGHT}" maxlength="4" style="width: 100%;" /></td>
+        </tr>
+    </table>
+    <table class="frm-table">
+        <tr>
+            <td align="left"><input type="submit" value="{TEXT_SAVE}" style="width: 200px; margin-top: 5px;" /></td>
+            <td align="right">
+                <input type="button" value="{TEXT_CANCEL}" onclick="javascript: window.location = '{CANCEL_URL}';" style="width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+
+<!-- END main_block -->
Index: trunk/modules/form/themes/default/modify.twig
===================================================================
--- trunk/modules/form/themes/default/modify.twig	(nonexistent)
+++ trunk/modules/form/themes/default/modify.twig	(revision 2)
@@ -0,0 +1,42 @@
+{# 
+- available replacements
+    WB_URL
+    THEME_URL
+    THEME_PATH
+    SAVE_URL
+    TEXT_URL
+    CANCEL_URL
+    TEXT_HEIGHT
+    TEXT_SAVE
+    TEXT_CANCEL
+    HEIGHT
+    URL
+    FTAN
+#}
+<form action="{{ SAVE_URL }}" method="post">
+    <input type="hidden" name="page_id" value="{{ PAGE_ID }}" />
+    <input type="hidden" name="section_id" value="{{ SECTION_ID }}" />
+    <input type="hidden" name="cmd" value="save" />
+    {{ FTAN }}
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left" width="50">{{ TEXT_URL }}:</td>
+            <td><input type="text" name="url" value="{{ URL }}" style="width: 100%;" /></td>
+        </tr>
+        <tr>
+            <td align="left" width="50">{TEXT_HEIGHT}:</td>
+            <td><input type="text" name="height" value="{{ HEIGHT }}" maxlength="4" style="width: 100%;" /></td>
+        </tr>
+    </table>
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left"><input type="submit" value="{{ TEXT_SAVE }}" style="width: 200px; margin-top: 5px;" /></td>
+            <td align="right">
+                <input type="button" value="{{ TEXT_CANCEL }}" onclick="javascript: window.location = '{{ CANCEL_URL }}';" style="width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+
+{# end of file #}
+

Property changes on: trunk/modules/form/themes/default/modify.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/themes/default/settings.htt
===================================================================
--- trunk/modules/form/themes/default/settings.htt	(nonexistent)
+++ trunk/modules/form/themes/default/settings.htt	(revision 2)
@@ -0,0 +1,199 @@
+<!-- BEGIN main_block -->
+<form name="edit" action="{ModuleUrl}/save_settings.php" method="post" style="margin: 0;">
+<input type="hidden" name="page_id" value="{page_id}" />
+<input type="hidden" name="section_id" value="{section_id}" />
+<input type="hidden" name="success_email_to" value="" />
+{FTAN}
+<table  class="frm-table">
+    <thead>
+    <tr>
+        <th colspan="2"><h3>{HEADING_GENERAL_SETTINGS}</h3></th>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td class="frm-setting_name">{TEXT_CAPTCHA_VERIFICATION}:</td>                                                              
+        <td>
+            <input type="radio" name="use_captcha" id="use_captcha_true" value="1"<?php if($aSettings['use_captcha'] == true) { echo ' checked="checked"'; } ?> />
+            <label for="use_captcha_true">{TEXT_ENABLED}</label>
+            <input type="radio" name="use_captcha" id="use_captcha_false" value="0"<?php if($aSettings['use_captcha'] == false) { echo ' checked="checked"'; } ?> />
+            <label for="use_captcha_false">{TEXT_DISABLED}</label>
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_MAX_SUBMISSIONS_PER_HOUR}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="max_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['max_submissions'])); ?>" />
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_SUBMISSIONS_STORED_IN_DATABASE}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="stored_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['stored_submissions'])); ?>" />
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_SUBMISSIONS_PERPAGE}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="perpage_submissions" style="width: 30px;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['perpage_submissions'])); ?>" />
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_HEADER}:</td>
+        <td class="frm-setting_value">
+            <textarea name="header" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo ($aSettings['header']); ?></textarea>
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_FIELD} {TEXT_LOOP}:</td>
+        <td class="frm-setting_value">
+            <textarea name="field_loop" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo ($aSettings['field_loop']); ?></textarea>
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_FOOTER}:</td>
+        <td class="frm-setting_value">
+            <textarea name="footer" cols="80" rows="6" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($aSettings['footer'])); ?></textarea>
+        </td>
+    </tr>
+    </tbody>
+</table>
+<!-- E-Mail Optionen -->
+<table title="{TEXT_EMAIL} {TEXT_SETTINGS}"  class="frm-table" style="margin-top: 3px;">
+    <thead>
+    <tr>
+        <th colspan="2" ><h3>{TEXT_EMAIL} {$TEXT_SETTINGS}</h3></th>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td class="frm-setting_name">{TEXT_EMAIL} {MOD_FORM_TO}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="email_to" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['email_to'])); ?>" />
+        </td>
+    </tr>
+
+    <tr>
+        <td class="frm-setting_name">{TEXT_DISPLAY_NAME}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="email_fromname" id="email_fromname" style="width: 98%;" maxlength="255" value="<?php  echo $aSettings['email_fromname'];  ?>" />
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_EMAIL} {TEXT_SUBJECT}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="email_subject" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['email_subject'])); ?>" />
+        </td>
+    </tr>
+    <tr><td>&nbsp;</td></tr>
+    </tbody>
+</table>
+<!-- Erfolgreich Optionen -->
+<table title="{TEXT_EMAIL} {MOD_FORM_CONFIRM}"  class="frm-table "  style="margin-top: 3px;">
+    <thead>
+    <tr>
+        <th colspan="2"><h3 class="">{TEXT_EMAIL} {MOD_FORM_CONFIRM}</h3></th>
+    </tr>
+    </thead>
+    <tbody>
+    <tr>
+        <td class="frm-setting_name">{TEXT_EMAIL} {MOD_FORM_TO}:</td>
+        <td class="frm-setting_value "><p class="frm-warning">MOD_FORM_RECIPIENT}<br />{MOD_FORM_SPAM} </p>   </td>
+    </tr>
+    <tr>
+        <td colspan="2"><p class=""></p></td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{MOD_FORM_REPLYTO}:</td>
+        <td class="frm-setting_value">
+            <select name="success_email_to" style="width: 98%;">
+            <option value="" onclick="javascript: document.getElementById('success_email_to').style.display = 'block';">{TEXT_NONE}</option>
+<?php
+            $success_email_to = str_replace($raw, $friendly, ($aSettings['success_email_to']));
+            $sql  = 'SELECT `field_id`, `title` FROM `'.TABLE_PREFIX.'mod_form_fields` '
+                  . 'WHERE `section_id` = '.(int)$section_id.' '
+                  . '  AND  `type` = \'email\' '
+                  . 'ORDER BY `position` ASC ';
+            if($query_email_fields = $database->query($sql)) {
+                if($query_email_fields->numRows() > 0) {
+                    while($field = $query_email_fields->fetchRow(MYSQL_ASSOC)) {
+?>
+                        <option value="field{field['field_id}"<?php if($success_email_to == 'field'.$field['field_id']) { echo ' selected'; $selected = true; } ?> onclick="javascript: document.getElementById('email_from').style.display = 'none';">
+                            {TEXT_FIELD']: '.$field['title}
+                        </option>
+<?php
+                    }
+                }
+            }
+?>
+            </select>
+        </td>
+    </tr>
+    <tr>
+
+        <td class="frm-setting_name">{TEXT_DISPLAY_NAME}:</td>
+        <td class="frm-setting_value">
+            <?php $aSettings['success_email_fromname'] = ($aSettings['success_email_fromname'] != '' ? $aSettings['success_email_fromname'] : WBMAILER_DEFAULT_SENDERNAME); ?>
+            <input type="text" name="success_email_fromname" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['success_email_fromname'])); ?>" />
+        </td>
+    </tr>
+
+    <tr>
+        <td class="frm-setting_name">{TEXT_EMAIL} {TEXT_SUBJECT}:</td>
+        <td class="frm-setting_value">
+            <input type="text" name="success_email_subject" style="width: 98%;" maxlength="255" value="<?php echo str_replace($raw, $friendly, ($aSettings['success_email_subject'])); ?>" />
+        </td>
+    </tr>
+    <tr>
+        <td class="frm-setting_name">{TEXT_EMAIL} {TEXT_TEXT}:</td>
+        <td class="frm-setting_value">
+            <textarea name="success_email_text" cols="80" rows="1" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($aSettings['success_email_text'])); ?></textarea>
+        </td>
+    </tr>
+    <tr><td> </td></tr>
+    <tr>
+        <td class="frm-newsection">{TEXT_SUCCESS} {TEXT_PAGE}:</td>
+        <td class="frm-newsection">
+<?php
+            // Get exisiting pages and show the pagenames
+            $aSelectPages = array();
+            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages`  '
+                  . 'WHERE `visibility` <> \'deleted\' ';
+            $old_page_id = $page_id;
+            $query = $database->query($sql);
+            while($mail_page = $query->fetchRow(MYSQL_ASSOC)) {
+                if(!$admin->page_is_visible($mail_page)) { continue; }
+                $page_id = $mail_page['page_id'];
+                $success_page = $aSettings['success_page'];
+              //    echo $success_page.':'.$aSettings['success_page'].':'; not vailde
+                $aSelectPages[$page_id]['menu_title'] = $mail_page['menu_title'];
+                $aSelectPages[$page_id]['success_page'] = $mail_page['page_id'];
+                $aSelectPages[$page_id]['selected'] = ( ($success_page == $page_id)? ' selected="selected"':'');
+             }
+
+?>
+            <select name="success_page">
+            <option value="">{TEXT_NONE}</option>
+            <?php
+                foreach( $aSelectPages as $key=> $aValues ) {
+                echo '<option value="'.$aValues['success_page'].'"'.$aValues['selected'].'>'.$aValues['menu_title'].'</option>';
+                }
+            ?>
+            </select>
+        </td>
+    </tr>
+    </tbody>
+</table>
+
+<table  class="frm-table">
+    <tr>
+        <td>
+            <input name="save" type="submit" value="{TEXT_SAVE}" style="width: 100px; margin-top: 5px;">
+        </td>
+        <td>
+            <input type="button" value="{TEXT_CANCEL}" onclick="javascript:window.location='<?php echo ADMIN_URL; ?>/pages/modify.php?page_id={old_page_id.'#'.$sSectionIdPrefix.$section_id; ?>';" style="width: 100px; margin-top: 5px;" />
+        </td>
+    </tr>
+</table>
+</form>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/form/uninstall.php
===================================================================
--- trunk/modules/form/uninstall.php	(nonexistent)
+++ trunk/modules/form/uninstall.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description     
+ */
+if(defined('WB_PATH'))
+{
+    // delete tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/form/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/upgrade.php
===================================================================
--- trunk/modules/form/upgrade.php	(nonexistent)
+++ trunk/modules/form/upgrade.php	(revision 2)
@@ -0,0 +1,135 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * upgrade.php
+ *
+ * @category     Module
+ * @package      Module_form
+ * @subpackage   upgrade
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker.org>
+ * @author       Werner v.d.Decken <wkl@isteam.de>
+ * @copyright    Werner v.d.Decken <wkl@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        File available since 17.01.2013
+ * @description  xyz
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_URL')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */
+
+//if(!function_exists('mod_form_upgrade')){
+    function mod_form_upgrade($bDebug=false) {
+        global $OK ,$FAIL, $callingScript, $globalStarted;
+        $oDb = ( @$GLOBALS['database'] ?: null );
+        $msg = array();
+        if (is_writable(WB_PATH.'/temp/cache')) {
+            Translate::getInstance()->clearCache();
+        }
+        $getMissingTables = (function (array $aTablesList) use ( $oDb )
+        {
+            $aTablesList = array_flip($aTablesList);
+            $sPattern =  $oDb->escapeString( TABLE_PREFIX, '%_' );
+            $sql = 'SHOW TABLES LIKE \''.$sPattern.'%\'';
+            if (($oTables = $oDb->query( $sql ))) {
+                while ($aTable = $oTables->fetchRow(MYSQLI_NUM)) {
+                    $sTable =  preg_replace('/^'.preg_quote(TABLE_PREFIX, '/').'/s', '', $aTable[0]);
+                    if (isset($aTablesList[$sTable])) {
+                        unset($aTablesList[$sTable]);
+                    }
+                }
+            }
+            return array_flip($aTablesList);
+        });
+
+// check for missing tables, if true stop the upgrade
+        $aTable = array('mod_form_fields','mod_form_settings','mod_form_submissions');
+        $aPackage = $getMissingTables($aTable);
+
+        if( sizeof($aPackage) > 0){
+            $msg[] =  'TABLE '.implode(' missing! '.$FAIL.'<br />TABLE ',$aPackage).' missing! '.$FAIL;
+            $msg[] = 'Form upgrade failed'." $FAIL";
+            if(!$globalStarted) {
+//                echo '<strong>'.implode('<br />',$msg).'</strong><br />';
+            }
+            return ( ($globalStarted==true ) ? $globalStarted : $msg);
+        } else {
+            for($x=0; $x<sizeof($aTable);$x++) {
+                if(($sOldType = $oDb->getTableEngine(TABLE_PREFIX.$aTable[$x]))) {
+                    if(('myisam' != strtolower($sOldType))) {
+                        if(!$oDb->query('ALTER TABLE `'.TABLE_PREFIX.$aTable[$x].'` Engine = \'MyISAM\' ')) {
+                            $msg[] = $oDb->get_error();
+                        } else{
+                            $msg[] = 'TABLE `'.TABLE_PREFIX.$aTable[$x].'` changed to Engine = \'MyISAM\''." $OK";
+                        }
+                    } else {
+                        $msg[] = 'TABLE `'.TABLE_PREFIX.$aTable[$x].'` has Engine = \'MyISAM\''." $OK";
+                    }
+                } else {
+//                    $msg[] = $oDb->get_error();
+                }
+            }
+
+            $table_name = TABLE_PREFIX.'mod_form_settings';
+            $field_name = 'perpage_submissions';
+            $description = "INT NOT NULL DEFAULT '10' AFTER `max_submissions`";
+            if(!$oDb->field_exists($table_name,$field_name)) {
+                $oDb->field_add($table_name, $field_name, $description);
+                $msg[] = 'Add field `perpage_submissions` AFTER `max_submissions`';
+            } else {
+                $msg[] = 'Field `perpage_submissions` already exists'." $OK";
+            }
+// only for upgrade-script
+            if (!$globalStarted) {
+                if($bDebug) {
+                    $msg[] = '<strong>'.implode('<br />',$msg).'</strong><br />';
+                }
+            }
+        }
+        $msg[] = 'Form upgrade successfull finished ';
+        if(!$globalStarted) {
+            $msg[] = "<strong>Form upgrade successfull finished $OK</strong><br />";
+        }
+        $msg = [];
+        return ( ($globalStarted==true ) ? $globalStarted : $msg);
+    }
+//}
+// ------------------------------------
+
+    $bDebugModus = ((isset($bDebugModus)) ? $bDebugModus : false);
+    $callingScript = $_SERVER["SCRIPT_NAME"];
+    // check if upgrade startet by upgrade-script to echo a message
+    $globalStarted = preg_match('/upgrade\-script\.php$/', $callingScript);
+
+/*
+    $tmp = 'upgrade-script.php';
+    $globalStarted = substr_compare($callingScript, $tmp,(0-strlen($tmp)),strlen($tmp)) === 0;
+*/
+if( is_array($msg = mod_form_upgrade($bDebugModus))) {
+    if (!$globalStarted) {print implode("\n", $msg)."\n";}
+//    echo '<strong>'.implode('<br />',$msg).'</strong><br />';
+}
+

Property changes on: trunk/modules/form/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/view.php
===================================================================
--- trunk/modules/form/view.php	(nonexistent)
+++ trunk/modules/form/view.php	(revision 2)
@@ -0,0 +1,762 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+// load module language file
+$sAddonName = basename(__DIR__);
+include_once(WB_PATH .'/framework/functions.php');
+
+if (!isset($oTrans) || !($oTrans instanceof Translate)) { $oTrans = Translate::getInstance(); }
+$oTrans->enableAddon('modules\\'.$sAddonName);
+
+$aWebsiteTitle = (defined('WEBSITE_TITLE') && WEBSITE_TITLE != '' ? WEBSITE_TITLE : $_SERVER['SERVER_NAME']);
+$aReplace = array('WEBSITE_TITLE' => $aWebsiteTitle );
+$MOD_FORM_EMAIL_SUBJECT = replace_vars($oTrans->MOD_FORM_EMAIL_SUBJECT, $aReplace);
+$MOD_FORM_SUCCESS_EMAIL_TEXT = replace_vars($oTrans->MOD_FORM_SUCCESS_EMAIL_TEXT, $aReplace);
+$MOD_FORM_SUCCESS_EMAIL_SUBJECT = replace_vars($oTrans->MOD_FORM_SUCCESS_EMAIL_SUBJECT, $aReplace);
+
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $oTrans ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/
+
+function removebreaks($value) {
+    return trim(preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $value));
+}
+function checkbreaks($value) {
+    return $value === removebreaks($value);
+}
+$aSuccess =array();
+if (!function_exists('emailAdmin')) {
+    function emailAdmin() {
+        global $database,$wb;
+        $retval = $wb->get_email();
+        if($wb->get_user_id()!='1') {
+            $sql  = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                  . 'WHERE `user_id`=\'1\' ';
+            $retval = $database->get_one($sql);
+        }
+        return $retval;
+    }
+}
+
+   $emailAdmin = (function () use ( $database, $wb )
+   {
+        $retval = $wb->get_email();
+        if($wb->get_user_id()!='1') {
+            $sql  = 'SELECT `email` FROM `'.TABLE_PREFIX.'users` '
+                  . 'WHERE `user_id`=\'1\' ';
+            $retval = $database->get_one($sql);
+        }
+        return $retval;
+    });
+
+// Function for generating an optionsfor a select field
+if (!function_exists('make_option')) {
+    function make_option(&$n, $k, $values) {
+        // start option group if it exists
+        if (substr($n,0,2) == '[=') {
+             $n = '<optgroup label="'.substr($n,2,strlen($n)).'">';
+        } elseif ($n == ']') {
+            $n = '</optgroup>'."\n";
+        } else {
+            if(in_array($n, $values)) {
+                $n = '<option selected="selected" value="'.$n.'">'.$n.'</option>'."\n";
+            } else {
+                $n = '<option value="'.$n.'">'.$n.'</option>'."\n";
+            }
+        }
+    }
+}
+// Function for generating a checkbox
+if (!function_exists('make_checkbox')) {
+    function make_checkbox(&$key, $idx, $params) {
+        $field_id = $params[0][0];
+        $seperator = $params[0][1];
+        $label_id = 'wb_'.preg_replace('/[^a-z0-9]/i', '_', $key).$field_id;
+        if(in_array($key, $params[1])) {
+            $key = '<input class="frm-field_checkbox" type="checkbox" id="'.$label_id.'" name="field'.$field_id.'['.$idx.']" value="'.$key.'" />'.PHP_EOL.'<label for="'.$label_id.'" class="frm-checkbox_label">'.$key.'</lable>'.$seperator;
+        } else {
+            $key = '<input class="frm-field_checkbox" type="checkbox" id="'.$label_id.'" name="field'.$field_id.'['.$idx.']" value="'.$key.'" />'.PHP_EOL.'<label for="'.$label_id.'" class="frm-checkbox_label">'.$key.'</label>'.$seperator;
+        }
+    }
+}
+// Function for generating a radio button
+if (!function_exists('make_radio')) {
+    function make_radio(&$n, $idx, $params) {
+        $field_id = $params[0];
+        $group = $params[1];
+        $seperator = $params[2];
+        $label_id = 'wb_'.preg_replace('/[^a-z0-9]/i', '_', $n).$field_id;
+        if($n == $params[3]) {
+            $n = '<input class="frm-field_checkbox" type="radio" id="'.$label_id.'" name="field'.$field_id.'" value="'.$n.'" checked="checked" />'.PHP_EOL.'<label for="'.$label_id.'" class="frm-checkbox_label">'.$n.'</label>'.$seperator;
+        } else {
+            $n = '<input class="frm-field_checkbox" type="radio" id="'.$label_id.'" name="field'.$field_id.'" value="'.$n.'" />'.PHP_EOL.'<label for="'.$label_id.'" class="frm-checkbox_label">'.$n.'</label>'.$seperator;
+        }
+    }
+}
+
+if (!function_exists("new_submission_id") ) {
+    function new_submission_id() {
+        $submission_id = '';
+        $salt = "abchefghjkmnpqrstuvwxyz0123456789";
+        srand((double)microtime()*1000000);
+        $i = 0;
+        while ($i <= 7) {
+            $num = rand() % 33;
+            $tmp = substr($salt, $num, 1);
+            $submission_id = $submission_id . $tmp;
+            $i++;
+        }
+        return $submission_id;
+    }
+}
+    $sRecallUrl = WB_URL.PAGES_DIRECTORY.$wb->page['link'].PAGE_EXTENSION ;
+// Work-out if the form has been submitted or not
+    if($_POST == array())
+    {
+        require_once(WB_PATH.'/include/captcha/captcha.php');
+
+        // Set new submission ID in session
+        $_SESSION['form_submission_id'] = new_submission_id();
+        $out = '';
+        $header = '';
+        $field_loop = '';
+        $footer = '';
+        $form_name = 'form';
+        $use_xhtml_strict = false;
+        // Get settings
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_settings` '
+              . 'WHERE section_id = '.(int)$section_id.' ';
+        if($oSetting = $database->query($sql))
+        {
+            if($oSetting->numRows() > 0)    // $query_settings  $fetch_settings
+            {
+                $aSettings = $oSetting->fetchRow(MYSQLI_ASSOC);
+                $header = str_replace('{WB_URL}',WB_URL, $aSettings['header']);
+                $field_loop = $aSettings['field_loop'];
+                $footer = str_replace('{WB_URL}',WB_URL, $aSettings['footer']);
+                $use_captcha = $aSettings['use_captcha'];
+                $form_name = 'form';
+                $use_xhtml_strict = false;
+                $page_id = $aSettings['page_id'];
+            }
+        }
+
+    // do not use sec_anchor, can destroy some layouts
+
+        // Get list of fields
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_fields` '
+              . 'WHERE section_id = '.$section_id.' '
+              . 'ORDER BY position ASC ';
+
+        if($query_fields = $database->query($sql)) {
+            if($query_fields->numRows() > 0) {
+                $sScriptUrl = $_SERVER['SCRIPT_NAME'];
+                $sActionUrl = $sScriptUrl;
+
+?>
+                <form style="float: none;" class="frm-formular" <?php echo ( ( (strlen($form_name) > 0) AND (false == $use_xhtml_strict) ) ? "id=\"".$form_name.$section_id."\"" : ""); ?> action="<?php echo $sActionUrl.'';?>" method="post">
+<?php // echo $admin->getFTAN(); ?>
+                <fieldset class="frm-fieldset">
+                    <input type="hidden" name="submission_id" value="<?php echo $_SESSION['form_submission_id']; ?>" />
+<?php
+                    $iFormRequestId = isset($_GET['fri']) ? intval($_GET['fri']) : 0;
+                    if($iFormRequestId) {
+                        echo '<input type="hidden" name="fri" value="'.$iFormRequestId.'" />'."\n";
+                    }
+?>
+<?php
+                    if(ENABLED_ASP) { // first add some honeypot-fields
+?>
+                        <input type="hidden" name="submitted_when" value="<?php $t=time(); echo $t; $_SESSION['submitted_when']=$t; ?>" />
+                        <p class="nixhier">
+                        email address:
+                        <label for="email">Leave this field email-address blank:</label>
+                        <input id="email" name="email" size="56" value="" /><br />
+                        Homepage:
+                        <label for="homepage">Leave this field homepage blank:</label>
+                        <input id="homepage" name="homepage" size="55" value="" /><br />
+                        URL:
+                        <label for="url">Leave this field url blank:</label>
+                        <input id="url" name="url" size="61" value="" /><br />
+                        Comment:
+                        <label for="comment">Leave this field comment blank:</label>
+                        <textarea id="comment" name="comment" cols="50" rows="10"></textarea><br />
+                        </p>
+<?php }
+
+        // Print header  MYSQL_ASSOC
+               echo $header."\n";
+                while($field = $query_fields->fetchRow(MYSQLI_ASSOC)) {
+                    // Set field values
+                    $field_id = $field['field_id'];
+                    $value = $field['value'];
+                    // Print field_loop after replacing vars with values
+                    $vars = array('{TITLE}', '{REQUIRED}');
+                    if (($field['type'] == "radio") || ($field['type'] == "checkbox")) {
+                        $field_title = PHP_EOL.'<label>'.$field['title'].'</label>'.PHP_EOL;
+                    } elseif($field['type'] == 'heading') {
+                        $field_title = PHP_EOL.'<label>'.$field['title'].'</label>'.PHP_EOL;
+                    } else {
+                        $field_title = PHP_EOL.'<label for="field'.$field_id.'">'.$field['title'].'</label>'.PHP_EOL;
+                    }
+                    $values = array($field_title);
+                    if ($field['required'] == 1) {
+                        $values[] = '<span class="frm-required">*</span>';
+                    } else {
+                        $values[] = '';
+                    }
+                    if($field['type'] == 'textfield') {
+                        $vars[] = '{FIELD}';
+                        $max_lenght_para = (intval($field['extra']) ? ' maxlength="'.intval($field['extra']).'"' : '');
+                        $values[] = '<input type="text" name="field'.$field_id.'" id="field'.$field_id.'"'.$max_lenght_para.' value="'.(isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:$value).'" class="frm-textfield" />';
+                    } elseif($field['type'] == 'textarea') {
+                        $vars[] = '{FIELD}';
+                        $values[] = '<textarea name="field'.$field_id.'" id="field'.$field_id.'" class="frm-textarea" cols="30" rows="8">'.(isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:$value).'</textarea>';
+                    } elseif($field['type'] == 'select') {
+                        $vars[] = '{FIELD}';
+                        $options = explode(',', $value);
+                        array_walk($options, 'make_option', (isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:array()));
+                        $field['extra'] = explode(',',$field['extra']);
+                        $field['extra'][1] = ($field['extra'][1]=='multiple') ? $field['extra'][1].'="'.$field['extra'][1].'"' : '';
+                        $values[] = '<select name="field'.$field_id.'[]" id="field'.$field_id.'" size="'.$field['extra'][0].'" '.$field['extra'][1].' class="frm-select">'.implode($options).'</select>'."\n";
+                    } elseif($field['type'] == 'heading') {
+                        $vars[] = '{FIELD}';
+                        $str = '<input type="hidden" name="field'.$field_id.'" id="field'.$field_id.'" value="===['.$field['title'].']===" />';
+                        $values[] = ( true == $use_xhtml_strict) ? "<div>".$str."</div>" : $str;
+                        $tmp_field_loop = $field_loop;        // temporarily modify the field loop template
+                        $field_loop = $field['extra'];
+                    } elseif($field['type'] == 'checkbox') {
+                        $vars[] = '{FIELD}';
+                        $options = explode(',', $value);
+                        array_walk($options, 'make_checkbox', array(array($field_id,$field['extra']),(isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:array())));
+    //                    array_walk($options, 'make_radio', array($field_id,$field['title'],$field['extra'], (isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:array())));
+                        $x = sizeof($options)-1;
+                        $options[$x]=substr($options[$x],0,strlen($options[$x]));
+                        $values[] = implode($options);
+                    } elseif($field['type'] == 'radio') {
+                        $vars[] = '{FIELD}';
+                        $options = explode(',', $value);
+                        array_walk($options, 'make_radio', array($field_id,$field['title'],$field['extra'], (isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:'')));
+                        $x = sizeof($options)-1;
+                        $options[$x]=substr($options[$x],0,strlen($options[$x]));
+                        $values[] = implode($options);
+                    } elseif($field['type'] == 'email') {
+                        $vars[] = '{FIELD}';
+                        $max_lenght_para = (intval($field['extra']) ? ' maxlength="'.intval($field['extra']).'"' : '');
+                        $values[] = '<input type="text" name="field'.$field_id.'" id="field'.$field_id.'" value="'.(isset($_SESSION['field'.$field_id])?$_SESSION['field'.$field_id]:'').'"'.$max_lenght_para.' class="frm-email" />';
+                    }
+                    if(isset($_SESSION['field'.$field_id])) unset($_SESSION['field'.$field_id]);
+                    if($field['type'] != '') {
+                        echo str_replace($vars, $values, $field_loop);
+                    }
+                    if (isset($tmp_field_loop)){ $field_loop = $tmp_field_loop; }
+                } // end while
+                // Captcha
+                if($use_captcha) { ?>
+                    <tr>
+                    <td class="frm-field_title"><label><?php echo $oTrans->TEXT_VERIFICATION; ?></label>:</td>
+                    <td><?php call_captcha(); ?></td>
+                    </tr>
+                    <?php
+                }
+            // Print footer
+            // $out = $footer.PHP_EOL;
+            $out .= str_replace('{SUBMIT_FORM}', $oTrans->MOD_FORM_SUBMIT_FORM, $footer);
+            echo $out;
+    // Add form end code
+?>
+            </fieldset>
+    </form>
+<?php
+            }
+        }
+    } else {  // $_POST form was send
+    // Check that submission ID matches
+    if( isset($_SESSION['form_submission_id'])
+        && isset($_POST['submission_id'])
+        && ($_SESSION['form_submission_id'] == $_POST['submission_id'])
+    ) {
+        $aMailValues = array();
+        $aMailValues = array (
+            'is_authenticated' => false,
+            'mail_replyto' => '',
+            'mail_replyName' => '',
+        );
+        $mail_replyto = '';
+        $mail_replyName = '';
+
+        if ($wb->is_authenticated() && $wb->get_email()) {
+          $mail_replyto = $wb->get_email();
+          $mail_replyName = htmlspecialchars($database->escapeString($wb->get_display_name()));
+          $aMailValues = array (
+              'is_authenticated' => true,
+              'mail_replyto' => $mail_replyto,
+              'mail_replyName' => $mail_replyName,
+          );
+        }
+
+        // Set new submission ID in session
+        $_SESSION['form_submission_id'] = new_submission_id();
+/* */
+        if(ENABLED_ASP && ( // form faked? Check the honeypot-fields.
+            (!isset($_POST['submitted_when']) OR !isset($_SESSION['submitted_when'])) OR
+            ($_POST['submitted_when'] != $_SESSION['submitted_when']) OR
+            (!isset($_POST['email']) OR $_POST['email']) OR
+            (!isset($_POST['homepage']) OR $_POST['homepage']) OR
+            (!isset($_POST['comment']) OR $_POST['comment']) OR
+            (!isset($_POST['url']) OR $_POST['url'])
+        )) {
+            // spam
+            header("Location: ".WB_URL."");
+            exit();
+        }
+        // First start message settings
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_settings` '
+              . 'WHERE `section_id` = '.(int)$section_id.'';
+        if($oSetting = $database->query($sql) )
+        {
+            if($oSetting->numRows() > 0)
+            {
+                $aSettings = $oSetting->fetchRow(MYSQLI_ASSOC);
+                // who should manage the formular
+                $email_to = (($aSettings['email_to'] != '') ? $aSettings['email_to'] : $emailAdmin());
+                $mail_replyName = $email_toname = @$_SESSION['DISPLAY_NAME']?:$oTrans->TEXT_GUEST;
+                // where the formular comes from
+                $email_from = $database->escapeString(SERVER_EMAIL);
+                $email_fromname = $aSettings['email_fromname'];
+
+                if(substr($email_fromname, 0, 5) == 'field') {
+                    // Set the email_fromname to field to what the user entered in the specified field
+                    $email_fromname = htmlspecialchars($database->escapeString($_POST[$email_fromname]));
+                }
+
+                $email_subject = (($aSettings['email_subject'] != '') ? $aSettings['email_subject'] : $MOD_FORM_EMAIL_SUBJECT);
+                $success_page = $aSettings['success_page'];
+                $success_email_to = $mail_replyto;
+                $success_email_toName = $mail_replyName;
+                $success_email_from = $database->escapeString(SERVER_EMAIL);
+                $success_email_fromname = $aSettings['success_email_fromname'];
+
+                if ($mail_replyto == '') {
+                    $success_email_to = (($aSettings['success_email_to'] != '') ? $aSettings['success_email_to'] : '');
+                    if(substr($success_email_to, 0, 5) == 'field') {
+                        // Set the success_email to field to what the user entered in the specified field
+                        $success_email_to = htmlspecialchars($database->escapeString($_POST[$success_email_to]));
+                        $mail_replyto = ($aMailValues['is_authenticated']?$mail_replyto:$success_email_to);
+                    }
+//                    $success_email_to = '';
+                }
+
+                $success_email_text = $aSettings['success_email_text'];
+                $success_email_text = (($success_email_text != '') ? $success_email_text : $MOD_FORM_SUCCESS_EMAIL_TEXT);
+
+                $success_email_subject = (($aSettings['success_email_subject'] != '') ? $aSettings['success_email_subject'] : $MOD_FORM_SUCCESS_EMAIL_SUBJECT);
+                $max_submissions = $aSettings['max_submissions'];
+                $stored_submissions = $aSettings['stored_submissions'];
+                $use_captcha = $aSettings['use_captcha'];
+
+            } else {
+                exit($oTrans->TEXT_UNDER_CONSTRUCTION);
+            }
+        }
+
+        $email_body = '';
+        // Create blank "required" array
+        $aRequired = array();
+
+        // Captcha
+        if($use_captcha) {
+            if(isset($_POST['captcha']) && $_POST['captcha'] != ''){
+                // Check for a mismatch get email user_id
+                if(!isset($_POST['captcha']) || !isset($_SESSION['captcha']) || $_POST['captcha'] != $_SESSION['captcha']) {
+                    $replace = array('webmaster_email' => $emailAdmin() );
+                    $captcha_error = replace_vars($oTrans->MOD_FORM_INCORRECT_CAPTCHA, $replace);
+                    $aRequired[]= '';
+                }
+            } else {
+                $replace = array('webmaster_email'=>$emailAdmin() );
+                $captcha_error = replace_vars($oTrans->MOD_FORM_INCORRECT_CAPTCHA,$replace );
+                $aRequired[]= '';
+            }
+        }
+        if(isset($_SESSION['captcha'])) { unset($_SESSION['captcha']); }
+
+        // Loop through fields and add to message body
+        // Get list of fields
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_fields` '
+              . 'WHERE `section_id` = '.(int)$section_id.' '
+              . 'ORDER BY position ASC';
+        if($oField = $database->query($sql))
+        {
+            while($aFields = $oField->fetchRow(MYSQLI_ASSOC))
+            {
+                // Add to message body $field
+                if($aFields['type'] != '') {
+                    if(!empty($_POST['field'.$aFields['field_id']]))
+                    {
+                        $sPostVar = '';
+                        $aPostVar['field'.$aFields['field_id']] = array();
+                        // do not allow code in user input!
+                        if (is_array($_POST['field'.$aFields['field_id']])) {
+
+                            foreach ($_POST['field'.$aFields['field_id']] as $key=>$val) {
+                                $aPostVar['field'.$aFields['field_id']][$key] =  $wb->strip_slashes($wb->StripCodeFromText($val),true);
+                            }
+                            $_SESSION['field'.$aFields['field_id']] = $aPostVar['field'.$aFields['field_id']];
+                        } else {
+                            $sPostVar = $wb->strip_slashes($wb->StripCodeFromText($wb->get_post('field'.$aFields['field_id']),true));
+                            $_SESSION['field'.$aFields['field_id']] = $sPostVar;
+                        }
+
+                        if($aFields['type'] == 'email' AND $wb->validate_email($sPostVar) == false) {
+                            $email_error = $MESSAGE['USERS_INVALID_EMAIL'];
+                            $aRequired[]= '';
+                        }
+                        if($aFields['type'] == 'heading') {
+                            $email_body .= $sPostVar."\n\n";
+
+                        } elseif (($sPostVar!='')) {
+                            $email_body .= $aFields['title'].": ".$sPostVar."\n\n";
+                        } elseif(sizeof($aPostVar['field'.$aFields['field_id']] > 0) ) {
+                            $email_body .= $aFields['title'].": ";
+                            foreach ($aPostVar['field'.$aFields['field_id']] as $key=>$val) {
+                                $email_body .= $val."\n";
+                            }
+                            $email_body .= "\n";
+                        }
+
+                    } elseif($aFields['required'] == 1) {
+                        $aRequired[] = $aFields['title'];
+                    }
+                }
+            } //  while
+        } //  query
+
+// only for dump to test if all parameters are set
+                $aMailValues = array_merge (
+                        $aMailValues,
+                        array (
+                        'email_from' => $email_from,
+                        'email_to' => $email_to,
+                        'email_subject' => $email_subject,
+                        'email_body' => $email_body,
+                        'email_fromname' => $email_fromname,
+                        'email_toname' => $email_toname,
+                        'mail_replyto' => $mail_replyto,
+                        'mail_replyName' => $mail_replyName,
+                        'success_page' => $success_page,
+                        'SERVER_EMAIL' => SERVER_EMAIL,
+                        'success_email_from' => $success_email_from,
+                        'success_email_to' => $success_email_to,
+                        'success_email_subject' => $success_email_subject,
+                        'success_email_text' => $success_email_text."\n".$email_body.$oTrans->MOD_FORM_SUCCESS_EMAIL_TEXT_GENERATED,
+                        'success_email_toName' => $success_email_toName,
+                        'success_email_fromname' => $success_email_fromname,
+                        )
+                );
+
+// Check if the user forgot to enter values into all the required fields
+        if(sizeof($aRequired )) {
+            echo "<div class=\"frm-warning\">\n";
+            if(!isset($oTrans->MESSAGE_MOD_FORM_REQUIRED_FIELDS)) {
+                echo '<h3>You must enter details for the following fields</h3>';
+            } else {
+                echo '<h3>'.$oTrans->MESSAGE_MOD_FORM_REQUIRED_FIELDS.'</h3>';
+            }
+            echo "<ol>\n";
+            foreach($aRequired AS $field_title) {
+                if($field_title!=''){
+                    echo '<li>'.$field_title."</li>\n";
+                }
+            }
+            if(isset($email_error)) {
+                echo '<li>'.$email_error."</li>\n";
+            }
+            if(isset($captcha_error)) {
+                echo '<li>'.$captcha_error."</li>\n";
+            }
+            // Create blank "required" array
+            $aRequired = array();
+            echo "</ol>\n";
+            echo "</div>\n";
+            echo '<p class="frm-warning"><a href="'.$sRecallUrl.'">'.$oTrans->TEXT_BACK.'</a></p>'."\n";
+        } else {
+            if(isset($email_error)) {
+            echo "<div class=\"frm-warning\">\n";
+                echo '<br /><ol>'."\n";
+                echo '<li>'.$email_error.'</li>'."\n";
+                echo '</ol>'."\n";
+            echo "</div>\n";
+                echo '<p class="frm-warning"><a href="'.$sRecallUrl.'">'.$oTrans->TEXT_BACK.'</a></p>'."\n";
+            } elseif(isset($captcha_error)) {
+            echo "<div class=\"frm-warning\">\n";
+                echo '<br /><ol>'."\n";
+                echo '<li>'.$captcha_error.'</li>'."\n";
+                echo '</ol>'."\n";
+            echo "</div>\n";
+                echo '<p class="frm-warning"><a href="'.$sRecallUrl.'">'.$oTrans->TEXT_BACK.'</a></p>'."\n";
+            } else {
+                $success = false;
+// Check how many times form has been submitted in last hour
+                $last_hour = time()-3600;
+                $sql  = 'SELECT `submission_id` FROM `'.TABLE_PREFIX.'mod_form_submissions` '
+                      . 'WHERE `submitted_when` >= '.$last_hour.'';
+                if($oSubmissions = $database->query($sql))
+                {
+                    if($oSubmissions->numRows() > $max_submissions)
+                    {
+// Too many submissions so far this hour
+                        echo $oTrans->MESSAGE_MOD_FORM_EXCESS_SUBMISSIONS;
+                        $success = false;
+                    } else {
+                        // Adding the IP to the body and try to send the email
+                        // $email_body .= "\n\nIP: ".$_SERVER['REMOTE_ADDR'];
+                        $iFormRequestId = isset($_POST['fri']) ? intval($_POST['fri']) : 0;
+                        if($iFormRequestId) {
+                            $email_body .= "\n\nFormRequestID: ".$iFormRequestId;
+                        }
+                        $aAttachment=null;
+                        $aArray = array(
+                            'SERVER_EMAIL' => SERVER_EMAIL,
+                            'email_to' => $email_to,
+                            'email_subject' => $email_subject,
+                            'email_fromname' => $email_fromname,
+                            'mail_replyto' => $mail_replyto,
+                            'mail_replyName' => $mail_replyName,
+                            );
+
+// $aMailValues['is_authenticated']
+                        if($email_from != '') {
+                            if($mail_replyto != '') {
+                                // send form to admin, can replyto to given e-mail adress
+                                $success = $wb->mail(
+                                    SERVER_EMAIL,
+                                    $email_to,
+                                    $email_subject,
+                                    $email_body,
+                                    $email_fromname,
+                                    $email_toname,
+                                    $mail_replyto,
+                                    $mail_replyName,
+                                    '',
+                                    $aAttachment
+                                );
+                            } else {
+                                $success = $wb->mail(
+                                    $email_from,
+                                    $email_to,
+                                    $email_subject,
+                                    $email_body,
+                                    $email_fromname,
+                                    $email_toname,
+                                    $success_email_to,
+                                    $success_email_fromname,
+                                    '',
+                                    $aAttachment
+                                );
+                            }
+                        }
+// send only if is_authenticated
+                        if (($success==true) && $aMailValues['is_authenticated'])
+                        {
+                            $success = true;
+                            if ($success_email_to != '')
+                            {
+                                if($success_email_from != '')
+                                {
+                                // send confirmation to authenticated user -mail
+                                    $success = $wb->mail(
+                                        $success_email_from,
+                                        $success_email_to,
+                                        $success_email_subject,
+                                        ($success_email_text)."\n".($email_body).$oTrans->MOD_FORM_SUCCESS_EMAIL_TEXT_GENERATED,
+                                        $success_email_fromname,
+                                        $success_email_toName,
+                                        '',
+                                        '',
+                                        '',
+                                        $aAttachment
+                                    );
+                                }/* else {
+                                    $success = $wb->mail(
+                                        SERVER_EMAIL,
+                                        $success_email_to,
+                                        $success_email_subject,
+                                        ($success_email_text)."\n".($email_body).$oTrans->MOD_FORM_SUCCESS_EMAIL_TEXT_GENERATED,
+                                        $success_email_fromname,
+                                        $success_email_toName,
+                                        '',
+                                        '',
+                                        '',
+                                        $aAttachment
+                                    );
+                                }*/
+                            }
+                        }
+
+                        if($success==true)
+                        {
+                            $aSuccess[] .= 'INSERT INTO '.TABLE_PREFIX.'mod_form_submissions<br /> ';;
+                            // Write submission to database
+                            if(isset($wb) AND $wb->is_authenticated() AND $wb->get_user_id() > 0) {
+                                $submitted_by = $wb->get_user_id();
+                            } else {
+                                $submitted_by = 0;
+                            }
+                            $email_body = htmlspecialchars($wb->add_slashes($email_body));
+                            $sql  = 'INSERT INTO '.TABLE_PREFIX.'mod_form_submissions SET '
+                                  . 'page_id='.$wb->page_id.','
+                                  . 'section_id='.$section_id.','
+                                  . 'submitted_when='.time().','
+                                  . 'submitted_by=\''.$submitted_by.'\', '
+                                  . 'body=\''.$email_body.'\' ';
+                            if($database->query($sql))
+                            {
+                                // Get the page id
+                                $iSubmissionId = intval($database->get_one("SELECT LAST_INSERT_ID()"));
+
+                                if(!$database->is_error()) {
+                                    $success = true;
+                                }
+                                // Make sure submissions table isn't too full
+                                $query_submissions = $database->query("SELECT submission_id FROM ".TABLE_PREFIX."mod_form_submissions ORDER BY submitted_when");
+                                $num_submissions = $query_submissions->numRows();
+                                if($num_submissions > $stored_submissions)
+                                {
+                                    // Remove excess submission
+                                    $num_to_remove = $num_submissions-$stored_submissions;
+                                    while($submission = $query_submissions->fetchRow(MYSQLI_ASSOC))
+                                    {
+                                        if($num_to_remove > 0)
+                                        {
+                                            $submission_id = $submission['submission_id'];
+                                            $database->query("DELETE FROM ".TABLE_PREFIX."mod_form_submissions WHERE submission_id = '$submission_id'");
+                                            $num_to_remove = $num_to_remove-1;
+                                        }
+                                    }
+                                } // $num_submissions
+                            }  // numRows
+                        } // $success
+                     }
+                 } // end how many times form has been submitted in last hour
+            }
+        }  // email_error
+    } else {
+
+    echo '<p>&nbsp;</p>'."\n".'<p><a href="'.$sRecallUrl.'">'.$oTrans->TEXT_BACK.'</a></p>'."\n";
+    }
+
+    $success_page = ( (isset($success_page) ) ? $success_page : $page_id);
+    $sql  = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` '
+          . 'WHERE `page_id` = '.(int)$success_page;
+    $sSuccessLink = WB_URL;  // if failed set default
+    if( ($link = $database->get_one($sql)) ) {
+       $sSuccessLink = WB_URL.PAGES_DIRECTORY.$link.PAGE_EXTENSION;
+    }
+    // Now check if the email was sent successfully
+    if (isset($success) && $success == true)
+    {
+        if (!$success_page) {
+            // Get submission details
+            $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_submissions` '
+                  . 'WHERE submission_id = '.$iSubmissionId.' ';
+            if($query_content = $database->query($sql)) {
+                $submission = $query_content->fetchRow(MYSQLI_ASSOC);
+            }
+            $Message = '';
+            $NixHier = 'frm-nixhier';
+            // Get the user details of whoever did this submission
+            $sql  = 'SELECT `username`,`display_name` FROM `'.TABLE_PREFIX.'users` '
+                  . 'WHERE `user_id` = '.$submission['submitted_by'];
+            if($get_user = $database->query($sql))
+            {
+                if($get_user->numRows() != 0) {
+                    $user = $get_user->fetchRow(MYSQLI_ASSOC);
+                } else {
+                    $Message = $oTrans->MOD_FORM_PRINT;
+                    $NixHier = '';
+                    $user['display_name'] = $oTrans->TEXT_GUEST;
+                    $user['username'] = $oTrans->TEXT_UNKNOWN;
+                }
+            }
+
+            $aSubSuccess = array();
+            // set template file and assign module and template block
+            $oTpl = new Template(WB_PATH.'/modules/form/templates/default','keep');
+            // $tpl = new Template(dirname($admin->correct_theme_source('switchform.htt')),'keep');
+            $oTpl->set_file('page', 'submessage.htt');
+            $oTpl->debug = false; // false, true
+            $oTpl->set_block('page', 'main_block', 'main');
+
+            $aPaths = array(
+                    'ADMIN_URL' => ADMIN_URL,
+                    'THEME_URL' => THEME_URL,
+                    'MODULE_URL' => WB_URL.'/modules/form',
+                    'WB_URL' => WB_URL
+                );
+            $oTpl->set_var($aPaths);
+
+            $success_email_text = preg_replace('/[\n\r]/', '',nl2br(($success_email_text)));
+            $aDatas = array (
+                    'SUCCESS_EMAIL_TEXT' => $success_email_text,
+                    'TEXT_SUBMISSION_ID' => $oTrans->TEXT_SUBMISSION_ID,
+                    'submission_submission_id' => $submission['submission_id'],
+                    'submission_submitted_when' => gmdate( DATE_FORMAT .', '.TIME_FORMAT, $submission['submitted_when']+TIMEZONE ),
+            );
+            $oTpl->set_var($aDatas);
+
+            $aLangs = array(
+                    'TEXT_SUBMITTED' => $oTrans->TEXT_SUBMITTED,
+                    'NIX_HIER' => $NixHier,
+                    'TEXT_USER' => $oTrans->TEXT_USER,
+                    'TEXT_USERNAME' => $oTrans->TEXT_USERNAME,
+                    'TEXT_PRINT_PAGE' => $oTrans->TEXT_PRINT_PAGE,
+                    'TEXT_REQUIRED_JS' => $oTrans->TEXT_REQUIRED_JS,
+                    'user_display_name' => $user['display_name'],
+                    'user_username' => $user['username'],
+                    'SUCCESS_PRINT' => $Message,
+                    'submission_body' => nl2br($submission['body'])
+                    );
+            $oTpl->set_var($aLangs);
+
+            $oTpl->parse('main', 'main_block', false);
+            $output = $oTpl->finish($oTpl->parse('output', 'page'));
+            unset($oTpl);
+            print $output;
+
+        } else {
+            echo "<script>location.href='".$sSuccessLink."';</script>";
+        }
+        // clearing session on success
+        $sql  = 'SELECT `field_id` FROM `'.TABLE_PREFIX.'mod_form_fields` '
+              . 'WHERE `section_id` = '.$section_id.'';
+        $query_fields = $database->query( $sql );
+        while($field = $query_fields->fetchRow(MYSQLI_ASSOC)) {
+            $field_id = $field['field_id'];
+            if(isset($_SESSION['field'.$field_id])) unset($_SESSION['field'.$field_id]);
+        }
+    } else {
+        if(isset($success) && $success == false) {
+            echo '<br />'.$oTrans->MOD_FORM_ERROR;
+            echo '<p>&nbsp;</p>'."\n".'<p><a href="'.$sRecallUrl.'">'.$oTrans->TEXT_BACK.'</a></p>'."\n";
+        }
+    }
+}

Property changes on: trunk/modules/form/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/form/view_submission.php
===================================================================
--- trunk/modules/form/view_submission.php	(nonexistent)
+++ trunk/modules/form/view_submission.php	(revision 2)
@@ -0,0 +1,107 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         Form
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @description
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+//if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+// load module language file
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+/* */
+
+include_once (WB_PATH.'/framework/functions.php');
+
+// Get page
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$page = intval(isset(${$requestMethod}['page'])) ? ${$requestMethod}['page'] : 1;
+
+// Get id
+$submission_id = intval($admin->checkIDKEY('submission_id', false, 'GET'));
+if (!$submission_id) {
+ $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page='.$page.'&amp;page_id='.$page_id.'#submissions');
+}
+
+// Get submission details
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_form_submissions` '
+      . 'WHERE `submission_id` = '.$submission_id.' ';
+if($query_content = $database->query($sql)) {
+
+    $submission = $query_content->fetchRow(MYSQLI_ASSOC);
+}
+
+//print '<pre style="text-align: left;"><strong>function '.__FUNCTION__.'( '.''.' );</strong>  basename: '.basename(__FILE__).'  line: '.__LINE__.' -> <br />';
+//print_r( $page ); print '</pre>';
+
+// Get the user details of whoever did this submission
+$sql  = 'SELECT `username`,`display_name`, `email` FROM `'.TABLE_PREFIX.'users` '
+      . 'WHERE `user_id` = '.$submission['submitted_by'];
+if($get_user = $database->query($sql)) {
+    if($get_user->numRows() != 0) {
+        $user = $get_user->fetchRow(MYSQLI_ASSOC);
+    } else {
+        $user['display_name'] = $TEXT['GUEST'];
+        $user['username'] = $TEXT['UNKNOWN'];
+        $user['email'] = $TEXT['UNKNOWN'];
+    }
+}
+//$sSectionIdPrefix = ( defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? '#'.SEC_ANCHOR : 'Sec' );
+$sSectionIdPrefix = 'submissions';
+?>
+<table class="frm-submission" >
+    <tbody>
+        <tr>
+            <td><?php echo $TEXT['SUBMISSION_ID']; ?>:</td>
+            <td><?php echo $submission['submission_id']; ?></td>
+        </tr>
+        <tr>
+            <td><?php echo $TEXT['SUBMITTED']; ?>:</td>
+            <td><?php echo gmdate(DATE_FORMAT .', '.TIME_FORMAT, $submission['submitted_when']+TIMEZONE); ?></td>
+        </tr>
+        <tr>
+            <td><?php echo $TEXT['USER'].' '; ?>:</td>
+            <td><?php echo $user['display_name'].' '; ?></td>
+        </tr>
+        <tr>
+            <td><?php echo $TEXT['EMAIL'].' '; ?>:</td>
+            <td><?php echo $user['email'].' '; ?></td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <hr />
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <?php echo nl2br($submission['body']); ?>
+            </td>
+        </tr>
+    </tbody>
+</table>
+
+<br />
+
+<input type="button" value="<?php echo $TEXT['CLOSE']; ?>" onclick="window.location = '<?php echo ADMIN_URL; ?>/pages/modify.php?page=<?php echo $page?>&amp;page_id=<?php echo $page_id.'#'.$sSectionIdPrefix; ?>';" style="width: 150px; margin-top: 5px;" />
+<input type="button" value="<?php echo $TEXT['DELETE']; ?>" onclick="confirm_link('<?php echo $TEXT['ARE_YOU_SURE']; ?>', '<?php echo WB_URL; ?>/modules/form/delete_submission.php?page_id=<?php echo $page_id; ?>&section_id=<?php echo $section_id; ?>&submission_id=<?php echo $admin->getIDKEY($submission_id).'#'.$sSectionIdPrefix; ?>');" style="width: 150px; margin-top: 5px;" />
+<?php
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/form/view_submission.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/FTAN_SUPPORTED
===================================================================
--- trunk/modules/jsadmin/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/jsadmin/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/jsadmin/README.txt
===================================================================
--- trunk/modules/jsadmin/README.txt	(nonexistent)
+++ trunk/modules/jsadmin/README.txt	(revision 2)
@@ -0,0 +1,65 @@
+Javscript Admin
+
+Release 1.2
+ On Sourcecode of
+(C) Copyright 2006 Stepan Riha (www.nonplus.net)
+* -----------------------------------------------------------------------------------------
+*    MODIFICATION HISTORY:
+*   by Swen Uth; 01/24/2008
+*   + Update to 1.2
+*   + Update to Website Baker (include/yui)-> YUI to Version 2.4.1
+*   + take the YUI folder to wb/include/
+*   + Website Baker 2.7 Kompatible
+*   + Multilingual
+*   + initial release of the English language file
+*   + initial release of the German language file
+*   + include the Option for backend.cs
+*   + include the option for backend.js
+*   + renamed footer.php to jsadmin_backend_include.php for a better understanding for integration and development
+*   + INCLUDE ERRORHANDLING for missing YUI - Files
+*   + the Array $js_yui_scripts are defined in the jsadmin.php for better development
+* -----------------------------------------------------------------------------------------
+*
+______________________________________________________________
+
+DESCRIPTION
+
+This tool module adds Javascript functionality to the Website Baker Admin to
+improve some of the UI interactions.
+
+Portions of this module use scripts from the Yahoo! UI Library
+You can find it in the WB/include folder
+
+    http://developer.yahoo.com/yui/
+    
+______________________________________________________________
+
+REQUIREMENTS
+
+This module is supported on Website Baker 2.7 and later.
+
+______________________________________________________________
+
+INSTALLATION
+
+The module includes the following files:
+
+    !!! footer.php is canceled -> renamed to jsadmin_backend_include.php
+    images/busy.gif
+    images/failure.gif
+    images/success.gif
+    index.php
+    info.php
+    js/dragdrop.js
+    js/jsadmin.js
+    js/restore_pages.js
+    js/tool.js
+     + languages/EN.php
+    + languages/DE.php
+    jsadmin.php
+    move_to.php
+    README.txt
+    tool.php
+
+______________________________________________________________
+
Index: trunk/modules/jsadmin/backend.css
===================================================================
--- trunk/modules/jsadmin/backend.css	(nonexistent)
+++ trunk/modules/jsadmin/backend.css	(revision 2)
@@ -0,0 +1,34 @@
+/* Fix for funky spacing on page listing */
+.pages_list li {
+  margin-bottom:  2px;
+}
+
+body.jsadmin_busy td.content {
+  background: url(images/busy.gif) 4px 4px no-repeat;
+}
+
+body.jsadmin_success td.content {
+  background: url(images/success.gif) 4px 4px no-repeat;
+}
+
+body.jsadmin_failure td.content {
+  background: url(images/failure.gif) 4px 4px no-repeat;
+}
+
+.jsadmin_drag {
+  cursor: move;
+}
+
+.jsadmin_drag a, .jsadmin_drag input, .jsadmin_drag select {
+  cursor: pointer;
+  cursor: hand;
+}
+ul.jsadmin_drag_area {
+  border: solid 1px #99f;
+}
+
+.jsadmin_drag img {
+  cursor: pointer;
+}
+
+
Index: trunk/modules/jsadmin/images/busy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/jsadmin/images/busy.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/jsadmin/images/failure.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/jsadmin/images/failure.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/jsadmin/images/index.php
===================================================================
--- trunk/modules/jsadmin/images/index.php	(nonexistent)
+++ trunk/modules/jsadmin/images/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/images/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/images/success.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/jsadmin/images/success.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/jsadmin/index.php
===================================================================
--- trunk/modules/jsadmin/index.php	(nonexistent)
+++ trunk/modules/jsadmin/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        jsadmin
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/jsadmin/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/info.php
===================================================================
--- trunk/modules/jsadmin/info.php	(nonexistent)
+++ trunk/modules/jsadmin/info.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         jsadmin
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory = 'jsadmin';
+$module_name = 'Javascript Admin v2.0.7';
+$module_function = 'tool';
+$module_version = '2.0.7';
+$module_platform = '2.8.3 SP7';
+$module_author = 'Stepan Riha, Swen Uth';
+$module_license    = 'BSD License';
+$module_description = 'This module adds Javascript functionality to the Website Baker Admin to improve some of the UI interactions. Uses the YahooUI library.';

Property changes on: trunk/modules/jsadmin/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/install-data.sql
===================================================================
--- trunk/modules/jsadmin/install-data.sql	(nonexistent)
+++ trunk/modules/jsadmin/install-data.sql	(revision 2)
@@ -0,0 +1,34 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 29. Jan 2016 um 14:10
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Datenbank: `dw283-sp3db1`
+--
+
+--
+-- Daten für Tabelle `mod_jsadmin`
+--
+
+INSERT INTO `{TABLE_PREFIX}mod_jsadmin` (`id`, `name`, `value`) VALUES
+(1, 'mod_jsadmin_persist_order', 1),
+(2, 'mod_jsadmin_ajax_order_pages', 1),
+(3, 'mod_jsadmin_ajax_order_sections', 1);
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Property changes on: trunk/modules/jsadmin/install-data.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/install-struct.sql
===================================================================
--- trunk/modules/jsadmin/install-struct.sql	(nonexistent)
+++ trunk/modules/jsadmin/install-struct.sql	(revision 2)
@@ -0,0 +1,40 @@
+-- --------------------------------------------------------
+-- SQL-Import-Struct-File
+-- generated with ConvertDump Version 0.2.1
+-- WebsiteBaker Edition
+-- Creation time: Fri, 29 Jan 2016 14:11:55 +0100
+-- --------------------------------------------------------
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 29. Jan 2016 um 14:10
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+--
+-- Datenbank: `dw283-sp3db1`
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_jsadmin`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_jsadmin`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_jsadmin` (
+  `id` int(11) NOT NULL DEFAULT '0',
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `value` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`)
+){TABLE_ENGINE};
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+-- --------------------------------------------------------
+-- END OF SQL-Import-Struct-File
+-- --------------------------------------------------------

Property changes on: trunk/modules/jsadmin/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/install.php
===================================================================
--- trunk/modules/jsadmin/install.php	(nonexistent)
+++ trunk/modules/jsadmin/install.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for WebsiteBaker 2.7
+ * @copyright       Stepan Riha, WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+        $database->SqlImport(__DIR__.'/install-data.sql', TABLE_PREFIX, __FILE__ );
+    }
+
+}
+

Property changes on: trunk/modules/jsadmin/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/js/dragdrop.js
===================================================================
--- trunk/modules/jsadmin/js/dragdrop.js	(nonexistent)
+++ trunk/modules/jsadmin/js/dragdrop.js	(revision 2)
@@ -0,0 +1,365 @@
+// Copyright 2006 Stepan Riha
+// www.nonplus.net
+// $Id: dragdrop.js 65 2017-03-03 21:38:16Z manu $
+/**
+* -----------------------------------------------------------------------------------------
+*  MODIFICATON FOR THE JSADMIN MODULE
+* -----------------------------------------------------------------------------------------
+*    MODIFICATION HISTORY:
+*   Swen Uth; 01/24/2008
+*   +INCLUDE VARIABLE buttonCell FOR ADAPTATION TO LATER LAYOUTS
+*
+**/
+JsAdmin.DD = {};
+JsAdmin.movable_rows = {};
+
+JsAdmin.init_drag_drop = function() {
+
+    // There seems to be many different ways the ordering is set up
+    //        pages/index.php has UL/LI containing tables with single row
+    //        pages/sections.php has a TABLE with many rows
+    //        pages/modify.php for manuals is completely weird...
+    // So we only want to deal with pages & sections...
+    var StashAllULIds =(function () {
+        // Stash all UL ids
+        var ids = {};
+        var lists = document.getElementsByTagName('ul.draggable');
+        for(var i = 0; i < lists.length; i++) {
+            if(lists[i].id) {
+                ids[lists[i].id] = true;
+            }
+        }
+        // Now fix all LIs
+        var items = document.getElementsByTagName('li');
+         for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            // Fix duplicate ID
+            if(ids[item.id]) {
+                item.id =  JsAdmin.util.getUniqueId();
+            }
+            // Fix UL parented by UL
+            var ul = JsAdmin.util.getNextSiblingNode(item, 'ul');
+            if(ul) {
+                var lis = ul.getElementsByTagName('li');
+                 if(!lis || lis.length == 0) {
+                    // Remove list without items
+                    ul.parentNode.removeChild(ul);
+                } else {
+                    // Make list child of list item
+                    item.appendChild(ul);
+                }
+            }
+        }
+    });
+
+    var page_type = '';
+    var is_tree = false;
+    var is_list = false;
+    if(document.URL.indexOf(JsAdmin.ADMIN_DIRECTORY + "/pages/index.php") > -1) {
+        is_list  = document.querySelector('ul.draggable');
+        is_tree = ((is_list!==null)?true:false);
+        page_type = 'pages';
+//        is_tree = true;
+        // This page uses duplicate IDs and incorrectly nested lists:
+        // <ul id="p1">
+        //        <li id="p1"><table /></li>
+        //        <ul>... sub items ...</ul>
+        // </ul>
+        //
+        // We need to fix that to the following:
+        // <ul id="p1">
+        //        <li id="uniqueID"><table />
+        //        <ul>... sub items ...</ul>
+        //        </li>
+        // </ul>
+
+    } else if(document.URL.indexOf(JsAdmin.ADMIN_DIRECTORY + "/pages/sections.php") > 0) {
+        is_list  = document.querySelector('ul.draggable');
+        is_tree = ((is_list!==null)?true:false);
+        page_type = 'sections';
+    } else if(document.URL.indexOf(JsAdmin.ADMIN_DIRECTORY + "/pages/modify.php") > 0) {
+        is_list  = document.querySelector('ul.draggable');
+        is_tree = ((is_list!==null)?true:false);
+        page_type = 'modules';
+    } else if(document.URL.indexOf(JsAdmin.ADMIN_DIRECTORY + "/admintools/tool.php") > 0) {
+        is_list  = document.querySelector('ul.draggable');
+        is_tree = ((is_list!==null)?true:false);
+        page_type = 'tool';
+    } else {
+//         We don't do any other pages
+        return false;
+    }
+console.log(is_list);
+console.log('is_tree: '+is_tree);
+    if (is_list){StashAllULIds();}
+//    var linkType = ((page_type==='modules')?'button':'a');
+//    var linkType = ((page_type==='modules')?'a':'a');
+    var linkType = 'a';
+    var links = document.getElementsByTagName(linkType);
+    var reImg = /(.*)move_(down|up)\.php(.*)/;
+    for(var i = 0; i < links.length; i++) {
+        var link = links[i];
+        var href = link.href || '';
+        var match = href.match(reImg);
+        if(!match) {
+            continue;
+        }
+        var url = match[1];
+        var op = match[2];
+        var params = match[3];
+        var tr = JsAdmin.util.getAncestorNode(link, 'tr');
+        var item = is_tree ? JsAdmin.util.getAncestorNode(tr, 'li') : tr;
+        if(!item) {
+            continue;
+        }
+        // Make sure we have a unique id
+        if(!item.id || YAHOO.util.Dom.get(item.id) != item) {
+            item.id = JsAdmin.util.getUniqueId();
+        }
+        if(is_tree) {
+            var parent = JsAdmin.util.getAncestorNode(item, 'ul');
+            new JsAdmin.DD.liDDSwap(item.id, (parent && parent.id) ? parent.id : 'top');
+        } else {
+            new JsAdmin.DD.trDDSwap(item.id);
+        }
+        item.className += " jsadmin_drag";
+        this.movable_rows[item.id] = { item: item, tr : tr, url : url, params : params };
+    }
+};
+
+//==========================================================================
+// Drag-drop utils
+//==========================================================================
+
+JsAdmin.DD.dragee = null;
+
+JsAdmin.DD.addMoveButton = function(tr, cell, op) {
+    if(op === 'down') {
+        cell++;
+    }
+console.log(tr);
+    if (tr) {
+        var item = JsAdmin.movable_rows[tr.id];
+    } else { return;}
+    if(!JsAdmin.util.isNodeType(tr, 'tr')) {
+        var rows = tr.getElementsByTagName('tr');
+        tr = rows[0];
+    }
+
+    var html = '<a href="' + item.url + 'move_' + op + '.php' + item.params
+                + '"><img src="' + JsAdminTheme.THEME_URL + '/images/' + op
+                + '_16.png" border="0" alt="' + op + '" /></a>';
+    tr.cells[cell].innerHTML = html;
+//console.log(html);
+
+};
+
+JsAdmin.DD.deleteMoveButton = function(tr, cell, op) {
+    if(op == 'down') {
+        cell++;
+    }
+    if(!JsAdmin.util.isNodeType(tr, 'tr')) {
+        var rows = tr.getElementsByTagName('tr');
+        tr = rows[0];
+    }
+
+    tr.cells[cell].innerHTML = "";
+};
+
+//==========================================================================
+// Drag-drop handling for table rows
+//==========================================================================
+
+JsAdmin.DD.trDDSwap = function(id, sGroup) {
+    this.init(id, sGroup);
+    this.addInvalidHandleType('a');
+    this.addInvalidHandleType('input');
+    this.addInvalidHandleType('select');
+    this.initFrame();
+    this.buttonCell = buttonCell;//, by Swen Uth
+
+    // For Connection
+    this.scope = this;
+};
+//console.log('buttonCell: '+buttonCell);
+
+JsAdmin.DD.trDDSwap.prototype = new YAHOO.util.DDProxy();
+
+JsAdmin.DD.trDDSwap.prototype.startDrag = function(x, y) {
+    if (JsAdmin.DD.dragee != this) {
+        this.rowIndex = this.getEl().rowIndex;
+        this.numRows = this.getEl().parentNode.rows.length;
+        this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
+        this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
+        YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
+        YAHOO.util.Dom.setStyle(this.getEl(), "background", "transparent");
+    }
+    JsAdmin.DD.dragee = this;
+};
+
+JsAdmin.DD.trDDSwap.prototype.onDragEnter = function(e, id) {
+  var elt = id ? YAHOO.util.Dom.get(id) : null;
+    var item = JsAdmin.movable_rows[this.getEl().id];
+    var rows = item.tr.parentNode.rows;
+    var wasFirst = item.tr.rowIndex == 1;
+    var wasLast = item.tr.rowIndex == this.numRows - 2;
+    if(elt.rowIndex < item.tr.rowIndex) {
+        elt.parentNode.insertBefore(item.tr, elt);
+    } else {
+        elt.parentNode.insertBefore(elt, item.tr);
+    }
+    // Fixup buttons
+    var isFirst = item.tr.rowIndex == 1;
+    var isLast  = item.tr.rowIndex == this.numRows - 2;
+//console.log(this.numRows);
+    if(wasFirst != isFirst) {
+        if(isFirst) {
+            JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
+//console.log(JsAdmin.util.getNextSiblingNode(item.tr));
+            JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.tr), this.buttonCell, 'up');
+        } else {
+            JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'up');
+            JsAdmin.DD.deleteMoveButton(rows[1], this.buttonCell, 'up');
+        }
+    }
+    if(wasLast != isLast) {
+        if(isLast) {
+            JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
+            JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.tr), this.buttonCell, 'down');
+        } else {
+            JsAdmin.DD.addMoveButton(item.tr, this.buttonCell, 'down');
+            JsAdmin.DD.deleteMoveButton(rows[rows.length-2], this.buttonCell, 'down');
+        }
+    }
+
+    this.DDM.refreshCache(this.groups);
+};
+
+JsAdmin.DD.trDDSwap.prototype.endDrag = function(e) {
+    YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
+    YAHOO.util.Dom.setStyle(this.getEl(), "background", "#f0f0f0");
+
+    JsAdmin.DD.dragee = null;
+
+    var newIndex = this.getEl().rowIndex;
+    if(newIndex != this.rowIndex) {
+
+        var url = JsAdmin.WB_URL + "/modules/"+JsAdmin.ModuleUrl+"/move_to.php";
+        url += JsAdmin.movable_rows[this.getEl().id].params + "&newposition=" + newIndex;
+//console.info(url);
+        document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
+        YAHOO.util.Connect.asyncRequest('GET', url, this, null);
+    }
+};
+
+JsAdmin.DD.trDDSwap.prototype.success = function(o) {
+    document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
+};
+
+JsAdmin.DD.trDDSwap.prototype.failure = function(o) {
+    document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
+};
+
+//==========================================================================
+// Drag-drop handling for list items
+//==========================================================================
+
+JsAdmin.DD.liDDSwap = function(id, sGroup) {
+    this.init(id, sGroup);
+    this.addInvalidHandleType('a');
+    this.addInvalidHandleType('input');
+    this.addInvalidHandleType('select');
+    this.initFrame();
+    this.buttonCell = buttonCell;//, by Swen Uth
+    this.counter = 0;
+};
+
+JsAdmin.DD.liDDSwap.prototype = new YAHOO.util.DDProxy();
+
+JsAdmin.DD.liDDSwap.prototype.startDrag = function(x, y) {
+    // On IE, startDrag is sometimes called twice
+    if(JsAdmin.DD.dragee && JsAdmin.DD.dragee != this) {
+        JsAdmin.DD.dragee.endDrag(null);
+    }
+    if(JsAdmin.DD.dragee != this) {
+        this.rowIndex = JsAdmin.util.getItemIndex(this.getEl());
+        this.opacity = YAHOO.util.Dom.getStyle(this.getEl(), "opacity");
+        this.background = YAHOO.util.Dom.getStyle(this.getEl(), "background");
+        YAHOO.util.Dom.setStyle(this.getEl(), "opacity", 0.5);
+
+        this.list = JsAdmin.util.getAncestorNode(this.getEl(), "ul");
+        this.list.className += " jsadmin_drag_area";
+    }
+    JsAdmin.DD.dragee = this;
+};
+
+JsAdmin.DD.liDDSwap.prototype.onDragEnter = function(e, id) {
+    // Swap with other element
+    var elt = id ? YAHOO.util.Dom.get(id) : null;
+    var item = JsAdmin.movable_rows[this.getEl().id];
+    var eltRowIndex = JsAdmin.util.getItemIndex(elt);
+    var rowIndex = JsAdmin.util.getItemIndex(this.getEl());
+    var wasFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
+    var wasLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
+
+    if(eltRowIndex < rowIndex) {
+        elt.parentNode.insertBefore(this.getEl(), elt);
+    } else {
+        elt.parentNode.insertBefore(elt, this.getEl());
+    }
+    // Fixup buttons
+    var isFirst = !JsAdmin.util.getPreviousSiblingNode(this.getEl());
+    var isLast = !JsAdmin.util.getNextSiblingNode(this.getEl());
+
+    if(wasFirst != isFirst) {
+        if(isFirst) {
+            JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'up');
+            JsAdmin.DD.addMoveButton(JsAdmin.util.getNextSiblingNode(item.item), this.buttonCell, 'up');
+        } else {
+            JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'up');
+            var first, prev = JsAdmin.util.getPreviousSiblingNode(item.item);
+            while(prev) {
+                first = prev;
+                prev = JsAdmin.util.getPreviousSiblingNode(prev);
+            }
+            JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[first.id].tr, this.buttonCell, 'up');
+        }
+    }
+    if(wasLast != isLast) {
+        if(isLast) {
+            JsAdmin.DD.deleteMoveButton(item.tr, this.buttonCell, 'down');
+            JsAdmin.DD.addMoveButton(JsAdmin.util.getPreviousSiblingNode(item.item), this.buttonCell, 'down');
+        } else {
+            JsAdmin.DD.addMoveButton(item.item, this.buttonCell, 'down');
+            var last, next = JsAdmin.util.getNextSiblingNode(item.item);
+            while(next) {
+                last = next;
+                next = JsAdmin.util.getNextSiblingNode(next);
+            }
+            JsAdmin.DD.deleteMoveButton(JsAdmin.movable_rows[last.id].tr, this.buttonCell, 'down');
+        }
+    }
+
+    this.DDM.refreshCache(this.groups);
+};
+
+JsAdmin.DD.liDDSwap.prototype.endDrag = function(e) {
+    YAHOO.util.Dom.setStyle(this.getEl(), "opacity", this.opacity);
+    this.list.className = String(this.list.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1");
+    JsAdmin.DD.dragee = null;
+    var newIndex = JsAdmin.util.getItemIndex(this.getEl());
+    if(newIndex != this.rowIndex) {
+        var url = JsAdmin.WB_URL + "/modules/"+JsAdmin.ModuleUrl+"/move_to.php";
+        url += JsAdmin.movable_rows[this.getEl().id].params + "&newposition=" + (newIndex+1);
+        document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_busy";
+        YAHOO.util.Connect.asyncRequest('GET', url, this, null);
+    }
+};
+
+JsAdmin.DD.liDDSwap.prototype.success = function(o) {
+    document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/g, "$1") + " jsadmin_success";
+};
+
+JsAdmin.DD.liDDSwap.prototype.failure = function(o) {
+    document.body.className = String(document.body.className).replace(/(\s*)jsadmin_([a-z]+)/, "$1") + " jsadmin_failure";
+};
Index: trunk/modules/jsadmin/js/index.php
===================================================================
--- trunk/modules/jsadmin/js/index.php	(nonexistent)
+++ trunk/modules/jsadmin/js/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/js/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/js/jsadmin.js
===================================================================
--- trunk/modules/jsadmin/js/jsadmin.js	(nonexistent)
+++ trunk/modules/jsadmin/js/jsadmin.js	(revision 2)
@@ -0,0 +1,162 @@
+// Copyright 2006 Stepan Riha
+// www.nonplus.net
+// $Id: jsadmin.js 65 2017-03-03 21:38:16Z manu $
+
+// Initialize JsAdmin when page loads
+JsAdmin.loadHandler = function(ev, self) {
+    if(self.init_tool) {
+        self.init_tool();
+    }
+    if(self.restore_toggled) {
+        self.restore_toggled();
+        YAHOO.util.Event.addListener(window, 'unload', JsAdmin.unloadHandler, self, false);
+    }
+    if(self.init_drag_drop) {
+        self.init_drag_drop();
+    }
+};
+
+// Store JsAdmin cookies when page unloads
+JsAdmin.unloadHandler = function(ev, self) {
+    self.save_toggled();
+};
+
+JsAdmin.rowMouseOverHandler = function(ev, tr) {
+    YAHOO.util.Dom.setStyle(tr, 'background' ,'#fea');
+};
+
+JsAdmin.rowMouseOutHandler = function(ev, tr) {
+    YAHOO.util.Dom.setStyle(tr, 'background' ,'');
+};
+
+YAHOO.util.Event.addListener(window, 'load', JsAdmin.loadHandler, JsAdmin, false);
+
+JsAdmin.util = {
+    createCookie : function(name,value,days)
+    {
+        if (days)
+        {
+            var date = new Date();
+            date.setTime(date.getTime()+(days*24*60*60*1000));
+            var expires = "; expires="+date.toGMTString();
+        }
+        else var expires = "";
+        document.cookie = name+"="+value+expires+"; path=/";
+    },
+
+    readCookie : function(name)
+    {
+        var nameEQ = name + "=";
+        var ca = document.cookie.split(';');
+        for(var i=0;i < ca.length;i++)
+        {
+            var c = ca[i];
+            while (c.charAt(0)==' ') c = c.substring(1,c.length);
+            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+        }
+        return null;
+    },
+
+    eraseCookie : function(name)
+    {
+        this.createCookie(name,"",-1);
+    },
+
+    next_id : 1,
+    getUniqueId : function () {
+        var id;
+        do {
+            id = 'jsadmin_id_' + this.next_id++;
+        } while(YAHOO.util.Dom.get(id));
+        return id;
+    },
+    
+    isNodeType : function(elt, type) {
+        if(elt) {
+            return elt.nodeName.toUpperCase() == type.toUpperCase();
+        }
+        return false;
+    },
+
+    getItemIndex : function (elt) {
+        var type = elt.nodeName;
+        var index = 0;
+        for(var sib = elt.previousSibling; sib; sib = sib.previousSibling) {
+            if(sib.nodeName == type) {
+                index++;
+            }
+        }
+        return index;
+    },
+    
+    getAncestorNode : function(elt, type) {
+        if(elt) {
+            if(type) {
+                type = type.toUpperCase();
+            } else {
+                type = elt.nodeName.toUpperCase();
+            }
+            elt = elt.parentNode;
+            while(elt && elt.nodeName.toUpperCase() != type) {
+                elt = elt.parentNode;
+            }
+        }
+        return elt;
+    },
+    
+    getNextSiblingNode : function (elt, type) {
+        if(elt) {
+            if(type) {
+                type = type.toUpperCase();
+            } else {
+                type = elt.nodeName.toUpperCase();
+            }
+            elt = elt.nextSibling;
+            while(elt && elt.nodeName.toUpperCase() != type) {
+                elt = elt.nextSibling;
+            }
+        }
+        return elt;
+    },
+
+    matchNextSibling : function (elt, re) {
+        if(elt) {
+            elt = elt.nextSibling;
+            while(elt && !elt.nodeName.match(re)) {
+                elt = elt.nextSibling;
+            }
+        }
+        return elt;
+    },
+
+    getPreviousSiblingNode : function (elt, type) {
+        if(elt) {
+            if(type) {
+                type = type.toUpperCase();
+            } else {
+                type = elt.nodeName.toUpperCase();
+            }
+            elt = elt.previousSibling;
+            while(elt && elt.nodeName.toUpperCase() != type) {
+                elt = elt.previousSibling;
+            }
+        }
+        return elt;
+    },
+
+    insertBefore : function(parent, newChild, beforeChild) {
+        if(beforeChild) {
+            parent.insertBefore(newChild, beforeChild);
+        } else {
+            parent.appendChild(newChild);
+        }
+    },
+
+    insertAfter : function(parent, newChild, afterChild) {
+        if(afterChild) {
+            this.insertBefore(parent, newChild, afterChild.nextSibling);
+        } else {
+            this.insertBefore(parent, newChild, parent.firstChild);
+        }
+    }
+};
Index: trunk/modules/jsadmin/js/restore_pages.js
===================================================================
--- trunk/modules/jsadmin/js/restore_pages.js	(nonexistent)
+++ trunk/modules/jsadmin/js/restore_pages.js	(revision 2)
@@ -0,0 +1,81 @@
+// Copyright 2006 Stepan Riha
+// www.nonplus.net
+// $Id: restore_pages.js 65 2017-03-03 21:38:16Z manu $
+//console.info(ids);
+
+// Array of ids that can be toggled using toggle_visibility()
+JsAdmin.toggled_ids = function() {
+    var links = document.getElementsByTagName('a');
+    var ids = [];
+    var reId = /toggle_visibility\s*\(\s*\'([^\']+)/;
+
+    for(var i = 0; i < links.length; i++) {
+        var href = links[i].href || '';
+        var match = href.match(reId);
+
+        if(!match) {
+            continue;
+        }
+        var id = match[1];
+        ids.push(id);
+    }
+
+    if(ids.length > 0) {
+console.info(ids);
+        return ids;
+    } else {
+        return false;
+    }
+};
+
+// Expand sections stored in the wb_jsadmin_pages cookie
+JsAdmin.restore_toggled = function() {
+    var ids = this.toggled_ids();
+
+    if(!ids) {
+        return;
+    }
+
+    var saved = this.util.readCookie('wb_jsadmin_pages');
+    if(!saved) {
+        return;
+    }
+
+    var reNum = /(\d+)/;
+
+    saved = ',' + saved + ',';
+
+    for(var i = ids.length-1; i >= 0; i--) {
+        var id = ids[i];
+        if(saved.indexOf(',' + id + ',') >= 0) {
+            toggle_visibility(id);
+            var match = id.match(reNum);
+            if(match)
+                toggle_plus_minus(match[1]);
+        }
+    }
+};
+
+// Store expanded section ids in the wb_jsadmin_pages cookie
+JsAdmin.save_toggled = function() {
+
+    var ids = this.toggled_ids();
+
+    if(!ids) {
+        return;
+    }
+
+    var visible = [];
+    for(var i = 0; i < ids.length; i++) {
+        var id = ids[i];
+        var elt = YAHOO.util.Dom.get(id);
+        var display = elt.style.display;
+        if(display == 'block') {
+            visible.push(ids[i]);
+        }
+    }
+
+    var ids = visible.join(",");
+    this.util.createCookie('wb_jsadmin_pages', ids, 14);
+};
+
Index: trunk/modules/jsadmin/js/tool.js
===================================================================
--- trunk/modules/jsadmin/js/tool.js	(nonexistent)
+++ trunk/modules/jsadmin/js/tool.js	(revision 2)
@@ -0,0 +1,14 @@
+// Copyright 2006 Stepan Riha
+// www.nonplus.net
+// $Id: tool.js 65 2017-03-03 21:38:16Z manu $
+
+JsAdmin.init_tool = function() {
+    var instruction = YAHOO.util.Dom.get('jsadmin_install');
+    if(instruction) {
+        instruction.style.display = 'none';
+    }
+    var form = YAHOO.util.Dom.get('jsadmin_form');
+    if(form) {
+        form.style.display = '';
+    }
+};
Index: trunk/modules/jsadmin/jsadmin.php
===================================================================
--- trunk/modules/jsadmin/jsadmin.php	(nonexistent)
+++ trunk/modules/jsadmin/jsadmin.php	(revision 2)
@@ -0,0 +1,55 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http:/websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+function get_setting($name, $default = '') {
+    global $database;
+    $retVal = $default;
+    $sql  = 'SELECT `value` FROM `'.TABLE_PREFIX.'mod_jsadmin` '
+          . 'WHERE `name` = \''.$database->escapeString($name).'\'';
+    if ($retVal = $database->get_one($sql) ) { }
+    return $retVal;
+}
+
+function save_setting($name, $value) {
+    global $database;
+    $prev_value = get_setting ( $name, '' );
+    if($prev_value === false) {
+        $sql   = 'INSERT INTO `'.TABLE_PREFIX.'mod_jsadmin` SET ';
+    } else {
+        $sql   = 'UPDATE `'.TABLE_PREFIX.'mod_jsadmin` SET ';
+    }
+        $sql  .= '`name`  = \''.$database->escapeString($name).'\', '
+              . '`value`  = '.(int)$value.' '
+              . 'WHERE `name` = \''.$database->escapeString($name).'\'';
+        $database->query($sql);
+        return $sql;
+}
+
+// the follwing variables to use and check existing the YUI
+$WB_MAIN_RELATIVE_PATH="../..";
+$YUI_PATH = '/include/yui';
+$js_yui_min = "-min";  // option for smaller code so faster
+$js_yui_scripts = Array();
+$js_yui_scripts[] = $YUI_PATH.'/yahoo/yahoo'.$js_yui_min.'.js';
+$js_yui_scripts[] = $YUI_PATH.'/event/event'.$js_yui_min.'.js';
+$js_yui_scripts[] = $YUI_PATH.'/dom/dom'.$js_yui_min.'.js';
+$js_yui_scripts[] = $YUI_PATH.'/connection/connection'.$js_yui_min.'.js';
+$js_yui_scripts[] = $YUI_PATH.'/dragdrop/dragdrop'.$js_yui_min.'.js';

Property changes on: trunk/modules/jsadmin/jsadmin.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/jsadmin_backend_include.php
===================================================================
--- trunk/modules/jsadmin/jsadmin_backend_include.php	(nonexistent)
+++ trunk/modules/jsadmin/jsadmin_backend_include.php	(revision 2)
@@ -0,0 +1,187 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// obtain the admin folder (e.g. /admin)
+$admin_folder = str_replace(WB_PATH, '', ADMIN_PATH);
+
+$JSADMIN_PATH = WB_URL.'/modules/jsadmin';
+$YUI_PATH = WB_URL.'/include/yui';
+$sCallingScript = $_SERVER['SCRIPT_NAME'];
+$sAddonName = basename(__DIR__);
+$page_type = '';
+//$module_dir = $script;
+if( !isset( $module_dir ) ) { $module_dir = $sAddonName; }
+
+if(strstr($sCallingScript, $admin_folder."/pages/index.php")){
+    $page_type = 'pages';
+}elseif(strstr($sCallingScript, $admin_folder."/pages/sections.php")){
+    $page_type = 'sections';
+/*
+}elseif(strstr($sCallingScript, $admin_folder."/settings/tool.php")
+    && isset($_REQUEST["tool"]) && $_REQUEST["tool"] == $sAddonName){
+    $page_type = 'settings';
+*/
+}elseif(strstr($sCallingScript, $admin_folder."/pages/modify.php"))  {
+    $page_type = 'modules';
+}elseif(strstr($sCallingScript, $admin_folder."/admintools/tool.php"))  {
+    $page_type = 'tool';
+}
+
+if( preg_match( '/'.'(pages|sections|settings|modules|tool|config)$/is', $page_type)) {
+//if($page_type!='') {
+    if (!function_exists('get_setting')){require(WB_PATH.'/modules/'.$sAddonName.'/jsadmin.php');}
+    // Default scripts
+    $js_scripts = Array();
+    $js_scripts[] = 'jsadmin.js';
+
+    switch ($page_type):
+        case 'tool':
+        case 'modules':
+            // This ist the Cell where the Button "Up" is , by Swen Uth
+            $js_buttonCell= (isset($js_buttonCell)?$js_buttonCell:6);
+            if(!get_setting('mod_jsadmin_persist_order', '0')) {   //Maybe Bug settings to negativ for persist , by Swen Uth
+                $js_scripts[] = 'restore_pages.js';
+              }
+            if(get_setting('mod_jsadmin_ajax_order_pages', '1')) {
+                $js_scripts[] = 'dragdrop.js';
+            }
+            break;
+        case 'pages':
+            $js_buttonCell= (isset($js_buttonCell)?$js_buttonCell:7);
+            if(!get_setting('mod_jsadmin_persist_order', '0')) {   //Maybe Bug settings to negativ for persist , by Swen Uth
+                $js_scripts[] = 'restore_pages.js';
+              }
+            if(get_setting('mod_jsadmin_ajax_order_pages', '1')) {
+                $js_scripts[] = 'dragdrop.js';
+                // This ist the Cell where the Button "Up" is , by Swen Uth
+                $js_buttonCell= 7;
+            }
+            break;
+        case 'sections':
+            $js_buttonCell= (isset($js_buttonCell)?$js_buttonCell:9);
+            if(get_setting('mod_jsadmin_ajax_order_sections', '1')) {
+                $js_scripts[] = 'dragdrop.js';
+              // This ist the Cell where the Button "Up" is , by Swen Uth
+                if(SECTION_BLOCKS) {
+                } else {
+                  --$js_buttonCell;
+                }
+            }
+            break;
+        case 'config':
+            $js_buttonCell= (isset($js_buttonCell)?$js_buttonCell:5);
+            $js_scripts[] = 'tool.js';
+            break;
+        default:
+            $admin->print_error('PageTtype '.$TEXT['ERROR'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+    endswitch;
+    // if not declared set it to buttoncell 10
+    $js_buttonCell = (isset($js_buttonCell)?$js_buttonCell:9);
+    // For variable cell structure in the tables of admin content
+    // echo "<script >buttonCell=".$js_buttonCell.";</script>\n";   // , by Swen  Uth
+    unset($js_buttonCell);
+
+?>
+<script  type="text/javascript">
+<!--
+
+var JsAdmin = {
+    ADMIN_DIRECTORY : '<?php echo '/'.ADMIN_DIRECTORY; ?>',
+    WB_URL : '<?php echo WB_URL; ?>',
+    ADMIN_URL : '<?php echo ADMIN_URL; ?>',
+    ModuleUrl : '<?php echo $module_dir; ?>'
+};
+var JsAdminTheme = { THEME_URL : '<?php echo THEME_URL; ?>' };
+
+// Get the Cell where the Button "Up" is
+function callFunc(){
+    var trim = function (str, chr) {
+      var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g')  : new RegExp('^' + chr + '+|' + chr + '+$', 'g');
+      return str.replace(rgxtrim, '');
+    };
+
+    var aRetVal = null;
+    var reImg = /(.*)move_(up)\.php(.*)/;
+    var oTable = document.getElementsByTagName('table');
+    //gets rows of table
+    for(var i = 0, table; table = oTable[i]; i++){
+      for (var j = 0, row; row = oTable[i].rows[j]; j++) {
+//         console.info("Content in row" + j+" : \n"  );
+       for (var k = 0, col; col = row.cells[k]; k++) {
+          var value = col.innerHTML;
+//         console.log("cell "+k+" value    :  " + value);
+          var match = value.match(reImg);
+          if(!match) {
+            continue;
+          } else {
+              return {
+                       buttonCell : k,
+                       url : trim(match[1]),
+                       op : match[2],
+                       params : match[3]
+                       }
+          }
+       }
+     }
+   }
+ }
+var aCell = callFunc();
+if(aCell){
+  var buttonCell = aCell.buttonCell;
+console.log('buttonCell: '+buttonCell);
+//console.log(aCell);
+}
+//
+//-->
+</script>
+<?php
+    // Check and Load the needed YUI functions  //, all by Swen Uth
+    $YUI_ERROR = false; // ist there an Error
+    $YUI_PUT ='';   // String with javascipt includes
+    $YUI_PUT_MISSING_Files=''; // String with missing files
+
+    reset($js_yui_scripts);
+    foreach($js_yui_scripts as $script) {
+        if(file_exists($WB_MAIN_RELATIVE_PATH.$script)){
+            $YUI_PUT = $YUI_PUT."<script src='".$WB_MAIN_RELATIVE_PATH.$script."' ></script>\n"; // go and include
+        } else {
+            $YUI_ERROR=true;
+            $YUI_PUT_MISSING_Files=$YUI_PUT_MISSING_Files."- ".WB_URL.$script."\\n";   // catch all missing files
+        }
+    }
+/*  */
+    if(!$YUI_ERROR)
+    {
+        echo $YUI_PUT;  // no Error so go and include
+        // Load the needed functions
+        foreach($js_scripts as $script) {
+            echo "<script src='".$JSADMIN_PATH."/js/".$script."' type='text/javascript'></script>\n";
+        }
+    } else {
+        echo "<script type='text/javascript'>alert('YUI ERROR!! File not Found!! > \\n".$YUI_PUT_MISSING_Files." so look in the include folder or switch Javascript Admin off!');</script>\n"; //, by Swen Uth
+    }
+} else {
+}
+
+/*
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( $page_type.'/'.$js_buttonCell ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+*/

Property changes on: trunk/modules/jsadmin/jsadmin_backend_include.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/DA.php
===================================================================
--- trunk/modules/jsadmin/languages/DA.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/DA.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B'] = 'V&aelig;lg de Javascript funktioner, du vil g&oslash;re aktive';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B'] = 'Husk udvidede sider';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B'] = 'Byt om p&aring; sider ved hj&aelig;lp af  drag-and-drop';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = 'Byt om p&aring; sektioner ved hj&aelig;lp af  drag-and-drop';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B'] = '<h1>Fejl</h1><p>JavaScript Admin kr&aelig;ver YUI (Yahoo User Interface) framework.<br />F&oslash;lgende filer er n&oslash;dvendige for at f&aring; Javascript Admin til at virke som forventet:<br /><br />';
+
+?>

Property changes on: trunk/modules/jsadmin/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/DE.php
===================================================================
--- trunk/modules/jsadmin/languages/DE.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/DE.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS MODUL: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description     = 'Dieses Modul stellt Javascript Funktionen f&uuml;r die Website Baker Benutzeroberfl&auml;che zur Verf&uuml;gung. Verwendet das YahooUI Javascript Framework.';
+
+// Ueberschriften und Textausgaben
+$MOD_JSADMIN['TXT_HEADING_B']                 = 'Bitte w&auml;hlen Sie die gew&uuml;nschten Javascript Funktionen aus';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']         = 'Ge&ouml;ffneten Seitenbaum merken';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']     = 'Sortierung von Seiten per "drag-and-drop" erlauben';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = 'Sortierung von Abschnitten per "drag-and-drop" erlauben';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']     = '<h1>Fehler</h1><p>JavaScript Admin ben&ouml;tigt das YUI (Yahoo User Interface) Framework.<br />Folgende Dateien werden f&uuml;r das Modul ben&ouml;tigt:<br /><br />';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/EN.php
===================================================================
--- trunk/modules/jsadmin/languages/EN.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/EN.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  ENGLISH LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B']                 = 'Please choose the Javascript functions you want to enable';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']         = 'Remember expanded pages';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']     = 'Reorder pages by the use of drag-and-drop';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = 'Reorder sections by the use of drag-and-drop';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']     = '<h1>Error</h1><p>JavaScript Admin requires the YUI (Yahoo User Interface) framework.<br />The following files are required to get Javascript Admin work as expected:<br /><br />';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/FR.php
===================================================================
--- trunk/modules/jsadmin/languages/FR.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/FR.php	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+//Module Description
+$module_description = 'Ce module am&eacute;liore l&apos;interactivit&eacute; de l&apos;interface d&apos;administration gr&acirc;ce &agrave; l&apos;ajout de fonctionnalit&eacute;s javascript am&eacute;lior&eacute;es. Utilise la librairie YahooUI.';
+
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B']                 = 'Veuillez s&eacute;lectionner la fonctionnalit&eacute; Javascript &agrave; activer';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']         = 'Garder en m&eacute;moire l&apos;arborescence des pages';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']     = 'R&eacute;organisation des pages gr&acirc;ce au glisser-d&eacute;poser';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = 'R&eacute;organisation des sections gr&acirc;ce au glisser-d&eacute;poser';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']     = '<h1>Erreur</h1><p>JavaScript Admin a besoin du framework YUI (Yahoo User Interface).<br />Les fichiers suivants sont requis pour que Javascript Admin fonctionne correctement:<br /><br />';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/NL.php
===================================================================
--- trunk/modules/jsadmin/languages/NL.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/NL.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B']                 = 'Kies de Javascript functies die je wenst te gebruiken';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']         = "Onthouden van uitgeklapte pagina's";
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']     = "Klikken-en-slepen om pagina's te herordenen";
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = 'Klikken-en-slepen om secties te herordenen';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']     = '<h1>Fout</h1><p>JavaScript Admin heeft de YUI (Yahoo User Interface) code nodig.<br />De volgende bestanden zijn nodig om Javascript Admin te laten werken:<br /><br />';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/NO.php
===================================================================
--- trunk/modules/jsadmin/languages/NO.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/NO.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+  -----------------------------------------------------------------------------------------
+  NORSK LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+  -----------------------------------------------------------------------------------------
+   */
+  
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B']                = 'Venligst velg de  Javascript funksjonene du vil aktivere';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']            = 'Husk udtvidede grener i side oversikten';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']        = 'Ordne siderekkef&oslash;lge ved &aring; bruke Dra og Slipp';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B']    = 'Ordne seksjonsrekkef&oslash;lge ved &aring; bruke Dra og Slipp';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']        = '<h1>Feil</h1><p>JavaScript Admin krever  YUI (Yahoo User Interface) .<br />Det er behov for f&oslash;lgende filer for at Javascript Admin skal funger som forventet:<br /><br />';
+  
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/RU.php
===================================================================
--- trunk/modules/jsadmin/languages/RU.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/RU.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project http://www.websitebaker.org/
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  RUSSIAN LANGUAGE FILE FOR THE ADDON: JAVASCRIPT ADMIN
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_JSADMIN['TXT_HEADING_B']                 = '&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072; &#1074;&#1099;&#1073;&#1077;&#1088;&#1080;&#1090;&#1077; Javascript &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1074;&#1099; &#1093;&#1086;&#1090;&#1080;&#1090;&#1077; &#1074;&#1082;&#1083;&#1102;&#1095;&#1080;&#1090;&#1100;';
+$MOD_JSADMIN['TXT_PERSIST_ORDER_B']         = '&#1047;&#1072;&#1087;&#1086;&#1084;&#1080;&#1085;&#1072;&#1090;&#1100; &#1087;&#1086;&#1088;&#1103;&#1076;&#1086;&#1082; &#1080; &#1074;&#1080;&#1076; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094; &#1074; &#1084;&#1077;&#1085;&#1102;';
+$MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']     = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1087;&#1086;&#1088;&#1103;&#1076;&#1086;&#1082; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; drag-and-drop';
+$MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B'] = '&#1048;&#1079;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; &#1087;&#1086;&#1088;&#1103;&#1076;&#1086;&#1082; &#1089;&#1077;&#1082;&#1094;&#1080;&#1081;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; drag-and-drop';
+$MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B']     = '<h1>&#1054;&#1096;&#1080;&#1073;&#1082;&#1072;</h1><p>JavaScript Admin &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1090; YUI (Yahoo User Interface) framework.<br />&#1057;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099; &#1085;&#1077;&#1086;&#1073;&#1093;&#1086;&#1076;&#1080;&#1084;&#1099; &#1076;&#1083;&#1103; &#1082;&#1086;&#1088;&#1088;&#1077;&#1082;&#1090;&#1085;&#1086;&#1081; &#1088;&#1072;&#1073;&#1086;&#1090;&#1099; Javascript Admin:<br /><br />';
+
+?>

Property changes on: trunk/modules/jsadmin/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/languages/index.php
===================================================================
--- trunk/modules/jsadmin/languages/index.php	(nonexistent)
+++ trunk/modules/jsadmin/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/jsadmin/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/move_to.php
===================================================================
--- trunk/modules/jsadmin/move_to.php	(nonexistent)
+++ trunk/modules/jsadmin/move_to.php	(revision 2)
@@ -0,0 +1,153 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       (C) 2006, Stepan Riha
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+// Include the configuration file
+if (!defined('WB_PATH')) {
+    $sStartupFile = dirname(dirname(__DIR__)).'/config.php';
+    if (is_readable($sStartupFile)) {
+        require($sStartupFile);
+    } else {
+        die(
+            'tried to read a nonexisting or not readable startup file ['
+          . basename(dirname($sStartupFile)).'/'.basename($sStartupFile).']!!'
+        );
+    }
+}
+
+    $aJsonRespond = array();
+    $aJsonRespond['jsadmin'] = array();
+    $aJsonRespond['modules'] = '';
+    $aJsonRespond['modules_dir'] = '';
+    $aJsonRespond['message'] = 'ajax operation failed';
+    $aJsonRespond['success'] = false;
+    // Include WB admin wrapper script
+    $update_when_modified = false;
+// Tells script to update when this page was last updated
+    $admin_header = false;
+    require(WB_PATH.'/modules/admin.php');
+
+if (isset($aRequestVars['page_id']) && is_numeric($aRequestVars['page_id']) && is_numeric(@$aRequestVars['newposition']))
+{
+
+// Include the ordering class
+    if (!class_exists('order', false)){require(WB_PATH.'/framework/class.order.php');}
+
+  $cleanOrder = (function($common_id) use ($database){
+        global $table,$sFieldOrderName,$common_field;
+// Loop through all records and give new order
+        $sql  = 'SET @c:=0';
+        $database->query($sql);
+        $sql  = 'UPDATE `'.$table.'` SET `'.$sFieldOrderName.'`=(SELECT @c:=@c+1) '
+              . 'WHERE `'.$common_field.'`=\''.$common_id.'\' '
+              . 'ORDER BY `'.$sFieldOrderName.'` ASC;';
+        if ($database->query($sql)){
+            echo "$sql".PHP_EOL;
+        } else {
+          $aJsonRespond['message'] = $sFieldOrderName.PHP-EOL.$database->get_error();
+          $aJsonRespond['success'] = false;
+          exit (json_encode($aJsonRespond));
+        }
+  });
+
+    $position = (int)$aRequestVars['newposition'];
+    // Interface move_to.php from modules
+    if (isset($aRequestVars['module'])) {
+        $aJsonRespond['jsadmin'] = $aRequestVars;
+        $sParameterFileName = WB_PATH.'/modules/'.$aRequestVars['module'].'/move_to.php';
+        if (is_readable($sParameterFileName)){require $sParameterFileName;}
+//        exit(json_encode($aJsonRespond));
+    } else {
+    // default Interface move_to.php from core
+        if( isset($aRequestVars['page_id']) || (isset($aRequestVars['section_id'])) ) {
+            // Get common fields
+            if(isset($aRequestVars['section_id']) && is_numeric($aRequestVars['section_id'])) {
+//                $page_id = (int)$aRequestVars['page_id'];
+                $id = (int)$aRequestVars['section_id'];
+                $id_field = 'section_id';
+//                $group = (int)$aRequestVars['section_id'];
+                $sFieldOrderName = 'position';
+                $common_field = 'page_id';
+                $table = TABLE_PREFIX.'sections';
+                $aJsonRespond['modules'] = '/'.ADMIN_DIRECTORY.'(pages/sections.php';
+            } else {
+                $id = (int)$aRequestVars['page_id'];
+                $id_field = 'page_id';
+//                $group = (int)$aRequestVars['page_id'];
+                $sFieldOrderName = 'position';
+                $common_field = 'parent';
+                $table = TABLE_PREFIX.'pages';
+                $aJsonRespond['modules'] = '/'.ADMIN_DIRECTORY.'(pages/index.php';
+            }
+        }
+    }
+
+    // Get current index
+    $sql = <<<EOT
+SELECT `$common_field`, `$sFieldOrderName` FROM `$table` WHERE `$id_field` = $id
+EOT;
+    echo "$sql".PHP_EOL;
+    if ($oRes = $database->query($sql)){
+        if( $row = $oRes->fetchRow(MYSQLI_ASSOC)) {
+            $common_id = $row[$common_field];
+            $old_position = $row['position'];
+        }
+    } else {
+      $aJsonRespond['message'] = $sFieldOrderName.PHP-EOL.$database->get_error();
+      $aJsonRespond['success'] = false;
+      exit (json_encode($aJsonRespond));
+    }
+    echo "Old Position: $old_position".PHP_EOL;
+    echo "New Position: $position".PHP_EOL;
+    if($old_position == $position){
+      $cleanOrder($common_id);
+      return;
+    }
+
+    // Build query to update affected rows
+    if($old_position < $position)
+        $sql = <<<EOT
+UPDATE `$table` SET `$sFieldOrderName` = `$sFieldOrderName` - 1
+    WHERE `$sFieldOrderName` > $old_position AND `$sFieldOrderName` <= $position
+        AND `$common_field` = $common_id
+EOT;
+    else
+        $sql = <<<EOT
+UPDATE `$table` SET `position` = `position` + 1
+    WHERE `$sFieldOrderName` >= $position AND `$sFieldOrderName` < $old_position
+        AND `$common_field` = $common_id
+EOT;
+    if ($database->query($sql)){
+        echo "$sql".PHP_EOL;
+    }
+    // Build query to update specified row
+    $sql = <<<EOT
+UPDATE `$table` SET `$sFieldOrderName` = $position
+    WHERE `$id_field` = $id
+EOT;
+    if ($database->query($sql))
+    {
+        echo "$sql".PHP_EOL;
+        $cleanOrder($common_id);
+        $aJsonRespond['success'] = true;
+        echo (json_encode($aJsonRespond));
+    }
+} else {
+    $aJsonRespond['message'] = "Missing parameters";
+    $aJsonRespond['success'] = false;
+    exit (json_encode($aJsonRespond));
+}

Property changes on: trunk/modules/jsadmin/move_to.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/tool.php
===================================================================
--- trunk/modules/jsadmin/tool.php	(nonexistent)
+++ trunk/modules/jsadmin/tool.php	(revision 2)
@@ -0,0 +1,117 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+$sModulName = basename(__DIR__);
+$js_back = ADMIN_URL.'/admintools/tool.php';
+$ToolUrl = ADMIN_URL.'/admintools/tool.php?tool=jsadmin';
+if( !$admin->get_permission($sModulName,'module' ) ) {
+    $admin->print_error($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'], $js_back);
+}
+if( !function_exists( 'get_setting' ) )  {  require(WB_PATH.'/modules/'.basename(__DIR__).'/jsadmin.php');  }
+
+// Check if user selected what add-ons to reload
+if(isset($_POST['save_settings']))  {
+    if (!$admin->checkFTAN())
+    {
+        if(!$admin_header) { $admin->print_header(); }
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],$_SERVER['REQUEST_URI']);
+    }
+    $aSql = array();
+
+    $aSql[] = save_setting('mod_jsadmin_persist_order', intval(isset($_POST['persist_order'])) );
+    $aSql[] = save_setting('mod_jsadmin_ajax_order_pages', intval(isset($_POST['ajax_order_pages'])) );
+    $aSql[] = save_setting('mod_jsadmin_ajax_order_sections', intval(isset($_POST['ajax_order_sections'])) );
+
+    // check if there is a database error, otherwise say successful implode('<br />',$aSql ). 
+    if(!$admin_header) { $admin->print_header(); }
+    if($database->is_error()) {
+        $admin->print_error($database->get_error(), $js_back);
+    } else {
+        $admin->print_success( $MESSAGE['PAGES_SAVED'], $ToolUrl);
+    }
+
+} else {
+    // $admin->print_header();
+}
+
+// Display form
+    $persist_order = get_setting('mod_jsadmin_persist_order' ) ? 'checked="checked"' : '';
+    $ajax_order_pages = get_setting('mod_jsadmin_ajax_order_pages'  ) ? 'checked="checked"' : '';
+    $ajax_order_sections = get_setting('mod_jsadmin_ajax_order_sections' ) ? 'checked="checked"' : '';
+
+// THIS ROUTINE CHECKS THE EXISTING OFF ALL NEEDED YUI FILES
+  $YUI_ERROR=false; // ist there an Error
+  $YUI_PUT ='';   // String with javascipt includes
+  $YUI_PUT_MISSING_Files=''; // String with missing files
+  reset($js_yui_scripts);
+  foreach($js_yui_scripts as $script) {
+     if(!file_exists($WB_MAIN_RELATIVE_PATH.$script)){
+        $YUI_ERROR=true;
+        $YUI_PUT_MISSING_Files =$YUI_PUT_MISSING_Files."- ".WB_URL.$script."<br />";   // catch all missing files
+    }
+    }
+    if($YUI_ERROR)
+    {
+?>
+    <div id="jsadmin_install" style="border: solid 2px #c99; background: #ffd; padding: 0.5em; margin-top: 1em">
+
+     <?php echo $MOD_JSADMIN['TXT_ERROR_INSTALLINFO_B'].$YUI_PUT_MISSING_Files; ?>
+      </div>
+<?php
+  }
+  else
+  {
+  ?>
+   <form id="jsadmin_form" name="store_settings" style="margin-top: 1em; display: true;" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
+    <?php echo $admin->getFTAN(); ?>
+   <table >
+   <tr>
+         <td colspan="2"><?php echo $MOD_JSADMIN['TXT_HEADING_B']; ?>:</td>
+   </tr>
+   <tr>
+         <td width="20"><input type="checkbox" name="persist_order" id="persist_order" value="true" <?php echo $persist_order; ?>/></td>
+         <td><label for="persist_order"><?php echo $MOD_JSADMIN['TXT_PERSIST_ORDER_B']; ?></label></td>
+   </tr>
+   <tr>
+         <td width="20"><input type="checkbox" name="ajax_order_pages" id="ajax_order_pages" value="true" <?php echo $ajax_order_pages; ?>/></td>
+         <td><label for="ajax_order_pages"><?php echo $MOD_JSADMIN['TXT_AJAX_ORDER_PAGES_B']; ?></label></td>
+   </tr>
+   <tr>
+         <td width="20"><input type="checkbox" name="ajax_order_sections" id="ajax_order_sections" value="true" <?php echo $ajax_order_sections; ?>/></td>
+         <td><label for="ajax_order_sections"><?php echo $MOD_JSADMIN['TXT_AJAX_ORDER_SECTIONS_B']; ?></label></td>
+   </tr>
+   <tr>
+         <td>&nbsp;</td>
+         <td>
+           <input type="submit" name="save_settings" value="<?php echo $TEXT['SAVE']; ?>" />
+        </td>
+   </tr>
+   </table>
+   </form>
+ <?php
+ }

Property changes on: trunk/modules/jsadmin/tool.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/jsadmin/tool_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/jsadmin/tool_icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/jsadmin/upgrade.php
===================================================================
--- trunk/modules/jsadmin/upgrade.php	(nonexistent)
+++ trunk/modules/jsadmin/upgrade.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         jsadmin
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http:/websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$msg = '';
+$sTable = TABLE_PREFIX.'mod_jsadmin';
+if(($sOldType = $database->getTableEngine($sTable))) {
+    if(('myisam' != strtolower($sOldType))) {
+        if(!$database->query('ALTER TABLE `'.$sTable.'` Engine = \'MyISAM\' ')) {
+            $msg = $database->get_error();
+        }
+    }
+} else {
+    $msg = $database->get_error();
+}
+// ------------------------------------
+    $sInstallStruct = __DIR__.'/install-struct.sql';
+    if (!is_readable($sInstallStruct)) {
+        $msg[] = '<strong>\'missing or not readable file [install-struct.sql]\'</strong> '.$FAIL.'<br />';
+        $iErr = true;
+    } else {
+        $database->SqlImport($sInstallStruct, TABLE_PREFIX, true );
+    }

Property changes on: trunk/modules/jsadmin/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/add.php
===================================================================
--- trunk/modules/menu_link/add.php	(nonexistent)
+++ trunk/modules/menu_link/add.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+    // Insert new row into database
+    $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_menu_link` SET '
+         . '`page_id` = '.$database->escapeString($page_id).', '
+         . '`section_id` = '.$database->escapeString($section_id).', '
+         . '`target_page_id` = 0, '
+         . '`redirect_type`  = \'301\', '
+         . '`anchor` = 0, '
+         . '`extern` = \'\' ';
+    $database->query($sql);
+

Property changes on: trunk/modules/menu_link/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/change.log
===================================================================
--- trunk/modules/menu_link/change.log	(nonexistent)
+++ trunk/modules/menu_link/change.log	(revision 2)
@@ -0,0 +1,18 @@
+
+
+/* History:
+2.8 - June 2009
+- Improved the pagelist (thorn)
+- Added different redirect types 301 or 302 (thorn)
+- Set platform version 2.8
+
+2.7 - 24. Jan. 2008 - doc
+- added language support, changed platform to 2.7
+
+2.6.1.1 - 16. Jan. 2008 - thorn
+- added table mod_menu_link
+- added install.php, delete.php, add.php
+- changed wb/index.php: redirect if page is menu_link
+- removed special-handling of menu_link in: admin/pages/settings2.php
+
+*/
Index: trunk/modules/menu_link/delete.php
===================================================================
--- trunk/modules/menu_link/delete.php	(nonexistent)
+++ trunk/modules/menu_link/delete.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         Menu Link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+$sql = 'DELETE FROM `'.TABLE_PREFIX .'mod_menu_link` '
+     . 'WHERE `section_id` ='.$database->escapeString($section_id);
+$database->query( $sql );

Property changes on: trunk/modules/menu_link/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/index.php
===================================================================
--- trunk/modules/menu_link/index.php	(nonexistent)
+++ trunk/modules/menu_link/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        menu_link
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/menu_link/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/info.php
===================================================================
--- trunk/modules/menu_link/info.php	(nonexistent)
+++ trunk/modules/menu_link/info.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory = 'menu_link';
+$module_name = 'Menu Link v2.9.0';
+$module_function = 'page';
+$module_version = '2.9.0';
+$module_platform = '2.8.3 SP7';
+$module_author = 'Ryan Djurovich, thorn';
+$module_license = 'GNU General Public License';
+$module_description = 'This module allows you to insert a link into the menu.';
+

Property changes on: trunk/modules/menu_link/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/install-struct.sql
===================================================================
--- trunk/modules/menu_link/install-struct.sql	(nonexistent)
+++ trunk/modules/menu_link/install-struct.sql	(revision 2)
@@ -0,0 +1,28 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 31. Jan 2016 um 22:35
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+--
+-- Datenbank: `dw283-sp3db1`
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_menu_link`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_menu_link`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_menu_link` (
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `target_page_id` int(11) NOT NULL DEFAULT '0',
+  `redirect_type` int(11) NOT NULL DEFAULT '301',
+  `anchor` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '0',
+  `extern` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE=MyISAM};
+

Property changes on: trunk/modules/menu_link/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/install.php
===================================================================
--- trunk/modules/menu_link/install.php	(nonexistent)
+++ trunk/modules/menu_link/install.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/menu_link/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/DA.php
===================================================================
--- trunk/modules/menu_link/languages/DA.php	(nonexistent)
+++ trunk/modules/menu_link/languages/DA.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT'] = 'Klik HER for at f&Atilde;&yen; til hovedsiden';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = 'Eksternt link';
+$MOD_MENU_LINK['R_TYPE'] = 'Redirect-type';
+
+?>

Property changes on: trunk/modules/menu_link/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/DE.php
===================================================================
--- trunk/modules/menu_link/languages/DE.php	(nonexistent)
+++ trunk/modules/menu_link/languages/DE.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS MODUL: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description     = 'Dieses Modul erm&ouml;glicht die Anzeige eines Links im Seitenmen&uuml;.';
+
+// Ueberschriften und Textausgaben
+$MOD_MENU_LINK['TEXT']                = 'Klicken Sie HIER um zur Startseite zu gelangen';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = 'Entfernte Adresse';
+$MOD_MENU_LINK['R_TYPE'] = 'Redirect-Typ';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/menu_link/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/EN.php
===================================================================
--- trunk/modules/menu_link/languages/EN.php	(nonexistent)
+++ trunk/modules/menu_link/languages/EN.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  ENGLISH LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT']                = 'Click HERE to go to the main page';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = 'External Link';
+$MOD_MENU_LINK['R_TYPE'] = 'Redirect-Type';
+

Property changes on: trunk/modules/menu_link/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/FR.php
===================================================================
--- trunk/modules/menu_link/languages/FR.php	(nonexistent)
+++ trunk/modules/menu_link/languages/FR.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT']                = 'Cliquez ICI pour retourn&eacute; &agrave; la page principale';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = 'Lien externe';
+

Property changes on: trunk/modules/menu_link/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/NL.php
===================================================================
--- trunk/modules/menu_link/languages/NL.php	(nonexistent)
+++ trunk/modules/menu_link/languages/NL.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT']                = 'Klik HIER om naar de hoofdpagina te gaan';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = 'Externe Link';
+$MOD_MENU_LINK['R_TYPE'] = 'Redirect-Type';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/menu_link/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/NO.php
===================================================================
--- trunk/modules/menu_link/languages/NO.php	(nonexistent)
+++ trunk/modules/menu_link/languages/NO.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  NORWEGIAN LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT']            = 'Klikk HER for &aring; komme til hovedsiden';
+$MOD_MENU_LINK['EXTERNAL_LINK']    = 'Ekstern lenke';
+$MOD_MENU_LINK['R_TYPE'] = 'Omdirigerings Type';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/menu_link/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/RU.php
===================================================================
--- trunk/modules/menu_link/languages/RU.php	(nonexistent)
+++ trunk/modules/menu_link/languages/RU.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project http://www.websitebaker.org/
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  RUSSIAN LANGUAGE FILE FOR THE ADDON: MENU_LINK
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_MENU_LINK['TEXT']                = '&#1053;&#1072;&#1078;&#1084;&#1080;&#1090;&#1077; &#1079;&#1076;&#1077;&#1089;&#1100; &#1076;&#1083;&#1103; &#1087;&#1077;&#1088;&#1077;&#1093;&#1086;&#1076;&#1072; &#1085;&#1072; &#1075;&#1083;&#1072;&#1074;&#1085;&#1091;&#1102;';
+$MOD_MENU_LINK['EXTERNAL_LINK'] = '&#1042;&#1085;&#1077;&#1096;&#1085;&#1103;&#1103; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;';
+$MOD_MENU_LINK['R_TYPE'] = 'Redirect-Type';
+
+?>

Property changes on: trunk/modules/menu_link/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/languages/index.php
===================================================================
--- trunk/modules/menu_link/languages/index.php	(nonexistent)
+++ trunk/modules/menu_link/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/menu_link/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/modify.php
===================================================================
--- trunk/modules/menu_link/modify.php	(nonexistent)
+++ trunk/modules/menu_link/modify.php	(revision 2)
@@ -0,0 +1,231 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonsPath = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonsPath.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonsPath.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonsPath.'/languages/'.LANGUAGE .'.php');
+}
+
+// get target page_id
+$table = TABLE_PREFIX.'mod_menu_link';
+$sql_result = $database->query("SELECT * FROM `$table` WHERE `section_id` = '$section_id'");
+
+$sql_row = $sql_result->fetchRow( MYSQLI_ASSOC );
+$target_page_id = $sql_row['target_page_id'];
+$r_type = $sql_row['redirect_type'];
+$extern = $sql_row['extern'];
+$anchor = $sql_row['anchor'];
+$sel = ' selected="selected"';
+
+// Get list of all visible pages and build a page-tree
+
+// this function will fetch the page_tree, recursive
+if(!function_exists('menulink_make_tree')) {
+function menulink_make_tree($parent, $link_pid, $tree) {
+    global $database, $admin, $menulink_titles;
+    $table_p = TABLE_PREFIX."pages";
+    // get list of page-trails, recursive
+    if($query_page = $database->query("SELECT * FROM `$table_p` WHERE `parent`=$parent ORDER BY `position`")) {
+        while($page = $query_page->fetchRow(MYSQLI_ASSOC)) {
+            if($admin->page_is_visible($page) ) {
+                $pids = explode(',', $page['page_trail']);
+                $entry = '';
+                foreach($pids as $pid)
+                    $entry .= $menulink_titles[$pid].' / ';
+                $tree[$page['page_id']] = rtrim($entry, '/ ');
+                $tree = menulink_make_tree($page['page_id'], $link_pid, $tree);
+            }
+        }
+    }
+    return($tree);
+}
+}
+
+// get list of all page_ids and page_titles
+global $menulink_titles;
+$menulink_titles = array();
+$table_p = TABLE_PREFIX."pages";
+if($query_page = $database->query("SELECT `page_id`,`menu_title` FROM `$table_p`")) {
+    while($page = $query_page->fetchRow(MYSQLI_ASSOC))
+        $menulink_titles[$page['page_id']] = $page['menu_title'];
+}
+// now get the tree
+$links = array();
+$links = menulink_make_tree(0, $page_id, $links);
+
+// Get list of targets (id=... or <a name ...>) from pages in $links
+$targets = array();
+$table_mw = TABLE_PREFIX."mod_wysiwyg";
+$table_s = TABLE_PREFIX."sections";
+foreach($links as $pid=>$l) {
+    if($query_section = $database->query("SELECT `section_id`, `module` FROM `$table_s` WHERE `page_id` = '$pid' ORDER BY position")) {
+        while($aMenuLink = $query_section->fetchRow(MYSQLI_ASSOC)) {
+            // get section-anchor
+            if(defined('SEC_ANCHOR') && SEC_ANCHOR!='') {
+                $targets[$pid][] = SEC_ANCHOR.$aMenuLink['section_id'];
+            } else {
+                $targets[$pid] = array();
+            }
+            if($aMenuLink['module'] == 'wysiwyg') {
+                if($query_page = $database->query("SELECT `content` FROM $table_mw WHERE `section_id` = '{$aMenuLink['section_id']}' ")) {
+                    $page = $query_page->fetchRow(MYSQLI_ASSOC);
+                    if(preg_match_all('/<(?:a[^>]+name|[^>]+id)\s*=\s*"([^"]+)"/i',$page['content'], $match)) {
+                        foreach($match[1] AS $t) {
+                            $targets[$pid][$t] = $t;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+// get target-window for actual page
+$table = TABLE_PREFIX."pages";
+$query_page = $database->query("SELECT target FROM $table WHERE page_id = '$page_id'");
+$page = $query_page->fetchRow();
+$target = $page['target'];
+
+
+// script for target-select-box
+?>
+<script language="JavaScript" type="text/javascript">
+/*<![CDATA[*/
+    function populate() {
+        o=document.getElementById('menu_link');
+        d=document.getElementById('page_target');
+        e=document.getElementById('extern');
+        if(!d){return;}
+        var mitems=new Array();
+        mitems['0']=[' ','0'];
+        mitems['-1']=[' ','0'];
+        <?php
+        foreach($links AS $pid=>$link) {
+            $str="mitems['$pid']=[";
+            $str.="' ',";
+            $str.="'0',";
+            if(is_array($targets) && is_array($targets[$pid])) {
+                foreach($targets[$pid] AS $value) {
+                    $str.="'#$value',";
+                    $str.="'$value',";
+                }
+                $str=rtrim($str, ',');
+                $str.="];\n";
+            }
+            echo $str;
+        }
+        ?>
+        d.options.length=0;
+        cur=mitems[o.options[o.selectedIndex].value];
+        if(!cur){return;}
+        d.options.length=cur.length/2;
+        j=0;
+        for(var i=0;i<cur.length;i=i+2)
+        {
+            d.options[j].text=cur[i];
+            d.options[j++].value=cur[i+1];
+        }
+
+        if(o.value=='-1') {
+            e.disabled = false;
+        } else {
+            e.disabled = true;
+        }
+    }
+
+/*]]>*/
+</script>
+<form name="menulink" action="<?php echo WB_URL ?>/modules/menu_link/save.php" method="post">
+<input type="hidden" name="page_id" value="<?php echo $page_id ?>" />
+<input type="hidden" name="section_id" value="<?php echo $section_id ?>" />
+<?php echo $admin->getFTAN(); ?>
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+<tr>
+    <td>
+        <?php echo $TEXT['LINK'].':' ?>
+    </td>
+    <td>
+        <select name="menu_link" id="menu_link" onchange="populate()" style="width:250px;" >
+            <option value="0"<?php echo $target_page_id=='0'?$sel:''?>><?php echo $TEXT['PLEASE_SELECT']; ?></option>
+            <option value="-1"<?php echo $target_page_id=='-1'?$sel:''?>><?php echo $MOD_MENU_LINK['EXTERNAL_LINK']; ?></option>
+            <?php foreach($links AS $pid=>$link) {
+                if ($pid == $page_id)  // Display current page with selection disabled
+                    echo "<option value=\"$pid\" disabled=\"disabled\">$link *</option>\n";
+                else
+                    echo "<option value=\"$pid\" ".($target_page_id==$pid?$sel:'').">$link</option>\n";
+            } ?>
+        </select>
+        &nbsp;
+        <input type="text" name="extern" id="extern" value="<?php echo $extern; ?>" style="width:250px;" <?php if($target_page_id!='-1') echo 'disabled="disabled"'; ?> />
+    </td>
+</tr>
+<tr>
+    <td>
+        <?php echo $TEXT['ANCHOR'].':' ?>
+    </td>
+    <td>
+        <select name="page_target" id="page_target" onfocus="populate()" style="width:250px;" >
+            <option value="<?php echo $anchor ?>" selected="selected"><?php echo $anchor=='0'?' ':'#'.$anchor ?></option>
+        </select>
+    </td>
+</tr>
+<tr>
+    <td>
+        <?php echo $TEXT['TARGET'].':' ?>
+    </td>
+    <td>
+        <select name="target" style="width:250px;" >
+            <option value="_blank"<?php if($target=='_blank') echo ' selected="selected"'; ?>><?php echo $TEXT['NEW_WINDOW'] ?></option>
+            <option value="_self"<?php if($target=='_self') echo ' selected="selected"'; ?>><?php echo $TEXT['SAME_WINDOW'] ?></option>
+            <option value="_top"<?php if($target=='_top') echo ' selected="selected"'; ?>><?php echo $TEXT['TOP_FRAME'] ?></option>
+        </select>
+    </td>
+</tr>
+<tr>
+    <td>
+        <?php echo $MOD_MENU_LINK['R_TYPE'].':' ?>
+    </td>
+    <td>
+        <select name="r_type" style="width:250px;" >
+            <option value="301"<?php if($r_type=='301') echo ' selected="selected"'; ?>>301</option>
+            <option value="302"<?php if($r_type=='302') echo ' selected="selected"'; ?>>302</option>
+        </select>
+    </td>
+</tr>
+</table>
+
+<br />
+
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+<tr>
+    <td align="left">
+        <input type="submit" value="<?php echo $TEXT['SAVE'] ?>" style="width: 100px; margin-top: 5px;" />
+    </td>
+    <td align="right">
+        <input type="button" value="<?php echo $TEXT['CANCEL'] ?>" onclick="javascript: window.location = 'index.php';" style="width: 100px; margin-top: 5px;" />
+    </td>
+</tr>
+</table>
+
+</form>

Property changes on: trunk/modules/menu_link/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/save.php
===================================================================
--- trunk/modules/menu_link/save.php	(nonexistent)
+++ trunk/modules/menu_link/save.php	(revision 2)
@@ -0,0 +1,72 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],$backlink );
+}
+$admin->print_header();
+
+// Update id, anchor and target
+if(isset($_POST['menu_link'])) {
+    $iTargetPageId = intval($admin->get_post('menu_link'));
+    $iRedirectType = intval($admin->get_post('r_type'));
+    $anchor = ($admin->get_post('page_target'));
+    $sTarget = $admin->get_post('target');
+    $extern='';
+    if(isset($_POST['extern'])) {
+        include_once WB_PATH.'/include/idna_convert/idna_convert.class.php';
+        $oIdn = new idna_convert();
+        $extern = $oIdn->encode($_POST['extern']);
+        $extern = (filter_var($extern, FILTER_VALIDATE_URL) === false ? '' : $extern);
+        $extern = $oIdn->decode($extern);
+        unset($oIdn);
+    } else { $extern = ''; }
+
+    $table_pages = TABLE_PREFIX.'pages';
+    $sql = 'UPDATE `'.TABLE_PREFIX.'pages` SET '
+        .'`target` = \''.$database->escapeString($sTarget).'\' '
+        .'WHERE `page_id` = '.$page_id;
+    $database->query($sql);
+
+    $sql = 'UPDATE `'.TABLE_PREFIX.'mod_menu_link` SET '
+        .'`target_page_id` = '.$iTargetPageId.', '
+        .'`redirect_type`  = '.$iRedirectType.', '
+        .'`anchor` = \''.$database->escapeString($anchor).'\', '
+        .'`extern` = \''.$database->escapeString($extern).'\' '
+        .'WHERE `page_id` = '.$page_id;
+    $database->query($sql);
+}
+
+// Check if there is a database error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), $js_back);
+} else {
+    $admin->print_success($MESSAGE['PAGES_SAVED'],$backlink );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/menu_link/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/upgrade.php
===================================================================
--- trunk/modules/menu_link/upgrade.php	(nonexistent)
+++ trunk/modules/menu_link/upgrade.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$msg = '';
+$sTable = TABLE_PREFIX.'mod_menu_link';
+if(($sOldType = $database->getTableEngine($sTable))) {
+    if(('myisam' != strtolower($sOldType))) {
+        if(!$database->query('ALTER TABLE `'.$sTable.'` Engine = \'MyISAM\' ')) {
+            $msg = $database->get_error();
+        }
+    }
+} else {
+    $msg = $database->get_error();
+}
+// ------------------------------------
\ No newline at end of file

Property changes on: trunk/modules/menu_link/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/menu_link/view.php
===================================================================
--- trunk/modules/menu_link/view.php	(nonexistent)
+++ trunk/modules/menu_link/view.php	(revision 2)
@@ -0,0 +1,92 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         menu_link
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+
+// redirect menu-link
+$this_page_id = PAGE_ID;
+
+$php43 = version_compare(phpversion(), '4.3', '>=');
+
+$sql  = 'SELECT `module`, `block` FROM `'.TABLE_PREFIX.'sections` ';
+$sql .= 'WHERE `page_id` = '.(int)$this_page_id.' AND `module` = "menu_link"';
+$query_this_module = $database->query($sql);
+if($query_this_module->numRows() == 1)  // This is a menu_link. Get link of target-page and redirect
+{
+    // get target_page_id
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_menu_link` WHERE `page_id` = '.(int)$this_page_id;
+    $query_tpid = $database->query($sql);
+    if($query_tpid->numRows() == 1)
+    {
+        $res = $query_tpid->fetchRow();
+        $target_page_id = $res['target_page_id'];
+        $redirect_type = $res['redirect_type'];
+        $anchor = ($res['anchor'] != '0' ? '#'.(string)$res['anchor'] : '');
+        $extern = $res['extern'];
+        // set redirect-type
+        if($redirect_type == 301)
+        {
+            if($php43)
+            {
+                @header('HTTP/1.1 301 Moved Permanently', TRUE, 301);
+            }
+            else
+            {
+                @header('HTTP/1.1 301 Moved Permanently');
+            }
+        }
+        if($target_page_id == -1)
+        {
+            if($extern != '')
+            {
+                $target_url = $extern.$anchor;
+                @header('Location: '.$target_url);
+                exit;
+            }
+        }
+        else
+        {
+            // get link of target-page
+            $sql  = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.$target_page_id;
+            $target_page_link = $database->get_one($sql);
+            if($target_page_link != null)
+            {
+                $target_url = WB_URL.PAGES_DIRECTORY.$target_page_link.PAGE_EXTENSION.$anchor;
+                @header('Location: '.$target_url);
+                exit;
+            }
+        }
+    }
+} else {
+
+?>
+
+<a href="<?php echo WB_URL; ?>">
+<?php echo $MOD_MENU_LINK['TEXT']; ?>
+</a>
+<?php }

Property changes on: trunk/modules/menu_link/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/add.php
===================================================================
--- trunk/modules/news/add.php	(nonexistent)
+++ trunk/modules/news/add.php	(revision 2)
@@ -0,0 +1,91 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    $header = '<table class="loop-header">'."\n";
+    $post_loop = '<tr class="post-top">
+    <td class="post-title"><a href="[LINK]">[TITLE]</a></td>
+    <td class="post-date">[PUBLISHED_DATE], [PUBLISHED_TIME]</td>
+    </tr>
+    <tr>
+    <td class="post-short" colspan="2">
+    [SHORT]
+    <h3 style="visibility:[SHOW_READ_MORE];"><a href="[LINK]">[TEXT_READ_MORE]</a></h3>
+    </td>
+    </tr>';
+    $footer = '</table>
+    <table  class="page-header" style="display: [DISPLAY_PREVIOUS_NEXT_LINKS]">
+    <tr>
+    <td class="page-left">[PREVIOUS_PAGE_LINK]</td>
+    <td class="page-center">[OF]</td>
+    <td class="page-right">[NEXT_PAGE_LINK]</td>
+    </tr>
+    </table>';
+    $post_header = ('<table  class="post-header">
+    <tr>
+    <td><h1>[TITLE]</h1></td>
+    <td rowspan="3" style="display: [DISPLAY_IMAGE]">[GROUP_IMAGE]</td>
+    </tr>
+    <tr>
+    <td class="public-info"><b>[TEXT_POSTED_BY] [DISPLAY_NAME] [TEXT_ON] [PUBLISHED_DATE]</b></td>
+    </tr>
+    <tr style="display: [DISPLAY_GROUP]">
+    <td class="group-page"><a href="[BACK]">[PAGE_TITLE]</a> &gt;&gt; <a href="[BACK]?g=[GROUP_ID]">[GROUP_TITLE]</a></td>
+    </tr>
+    </table>');
+    $post_footer = '<p>[TEXT_LAST_CHANGED]: [MODI_DATE] [TEXT_AT] [MODI_TIME]</p>
+    <a href="[BACK]">[TEXT_BACK]</a>';
+    $comments_header = ('<br /><br />
+    <h2>[TEXT_COMMENTS]</h2>
+    <table cellpadding="2" cellspacing="0" class="comment-header">');
+    $comments_loop = ('<tr>
+    <td class="comment_title">[TITLE]</td>
+    <td class="comment_info">[TEXT_BY] [DISPLAY_NAME] [TEXT_ON] [DATE] [TEXT_AT] [TIME]</td>
+    </tr>
+    <tr>
+    <td colspan="2" class="comment-text">[COMMENT]</td>
+    </tr>');
+    $comments_footer = '</table>
+    <br /><a href="[ADD_COMMENT_URL]">[TEXT_ADD_COMMENT]</a>';
+    $comments_page = '<h2>[TEXT_COMMENT]</h2>
+    <h2>[POST_TITLE]</h2>
+    <br />';
+    $commenting = 'none';
+    $use_captcha = true;
+    $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_news_settings` SET '
+         . '`section_id`='.$database->escapeString($section_id).', '
+         . '`page_id`='.$database->escapeString($page_id).', '
+         . '`header`=\''.$database->escapeString($header).'\', '
+         . '`post_loop`=\''.$database->escapeString($post_loop).'\', '
+         . '`footer`=\''.$database->escapeString($footer).'\', '
+         . '`posts_per_page`=5, '
+         . '`post_header`=\''.$database->escapeString($post_header).'\', '
+         . '`post_footer`=\''.$database->escapeString($post_footer).'\', '
+         . '`comments_header`=\''.$database->escapeString($comments_header).'\', '
+         . '`comments_loop`=\''.$database->escapeString($comments_loop).'\', '
+         . '`comments_footer`=\''.$database->escapeString($comments_footer).'\', '
+         . '`comments_page`=\''.$database->escapeString($comments_page).'\', '
+         . '`commenting`=\''.$database->escapeString($commenting).'\', '
+         . '`resize`=0, '
+         . '`use_captcha`='.$database->escapeString($use_captcha).' '
+         . ''.'';
+    $database->query( $sql );
+    }

Property changes on: trunk/modules/news/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/add_group.php
===================================================================
--- trunk/modules/news/add_group.php	(nonexistent)
+++ trunk/modules/news/add_group.php	(revision 2)
@@ -0,0 +1,65 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$ 
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// show the info banner
+//$print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+if(!$admin->checkFTAN('GET')) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL );
+}
+
+// After check print the header
+$admin->print_header();
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+// Get new order
+$order = new order(TABLE_PREFIX.'mod_news_groups', 'position', 'group_id', 'section_id');
+$position = $order->get_new($section_id);
+
+// Insert new row into database
+
+    // Insert new row into database
+    $sql  = 'INSERT INTO `'.TABLE_PREFIX.'mod_news_groups` SET '
+          . '`section_id` = '.$database->escapeString($section_id).', '
+          . '`page_id` = '.$database->escapeString($page_id).', '
+          . '`position` = '.$database->escapeString($position).', '
+          . '`active` = 1, '
+          . '`title` = \'\' ';
+
+$database->query($sql);
+
+// Get the id
+$group_id = $admin->getIDKEY(intval($database->getLastInsertId()));
+
+// Say that a new record has been added, then redirect to modify page
+if($database->is_error()) {
+   $admin->print_error($database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+} else {
+   $admin->print_success($TEXT['SUCCESS'], WB_URL.'/modules/'.basename(__DIR__).'/modify_group.php?page_id='.$page_id.'&section_id='.$section_id.'&group_id='.$group_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/add_group.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/add_post.php
===================================================================
--- trunk/modules/news/add_post.php	(nonexistent)
+++ trunk/modules/news/add_post.php	(revision 2)
@@ -0,0 +1,73 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// show the info banner
+//$print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+if(!$admin->checkFTAN('GET')) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// After check print the header
+$admin->print_header();
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+// Get new order
+$order = new order(TABLE_PREFIX.'mod_news_posts', 'position', 'post_id', 'section_id');
+$position = $order->get_new($section_id);
+
+// Get default commenting
+$sql = 'SELECT `commenting` FROM `'.TABLE_PREFIX.'mod_news_settings` '
+     . 'WHERE `section_id`='.(int)$section_id;
+$commenting = $database->get_one($sql);
+$now = time();
+$sUrl = WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.'&section_id='.$section_id.'&post_id=';
+$sql  = 'INSERT INTO `'.TABLE_PREFIX.'mod_news_posts` SET '
+      . '`section_id`='.$database->escapeString($section_id).', '
+      . '`page_id`='.$database->escapeString($page_id).', '
+      . '`position`='.$database->escapeString($position).', '
+      . '`active`=1, '
+      . '`title`=\'\', '
+      . '`link`=\'\', '
+      . '`content_short`=\'\', '
+      . '`content_long`=\'\', '
+      . '`commenting`=\''.$database->escapeString($commenting).'\', '
+      . '`created_when`='.$now.', '
+      . '`created_by`='.$admin->get_user_id().', '
+      . '`published_when` ='.$now.', '
+      . '`published_until` =0, '
+      . '`posted_when` ='.$now.', '
+      . '`posted_by` ='.$admin->get_user_id().'';
+
+if (($database->query($sql))) {
+    $post_id = $admin->getIDKEY($database->getLastInsertId());
+    $admin->print_success($TEXT['SUCCESS'], $sUrl.$post_id);
+} else {
+    $post_id = $admin->getIDKEY(0);
+    $admin->print_error($database->get_error(), $sUrl.$post_id);
+}
+$admin->print_footer();

Property changes on: trunk/modules/news/add_post.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/ajax/ajax.php
===================================================================
--- trunk/modules/news/ajax/ajax.php	(nonexistent)
+++ trunk/modules/news/ajax/ajax.php	(revision 2)
@@ -0,0 +1,54 @@
+<?php
+
+    $aJsonRespond = [];
+    $sModuleDir   = basename(dirname(__DIR__));
+    // require config for Constants and DB access
+    require(dirname(dirname(dirname(__DIR__))).'/config.php');
+    // Check if user has enough rights to do this:
+    // initialize json_respond array  (will be sent back)
+    try{
+        if (!class_exists('admin', false)){require(WB_PATH.'/framework/class.admin.php');}
+        $admin = new admin('Modules', 'module_view', FALSE, FALSE);
+    // first read and validate the $_POST arguments
+        $aAllowedActions = ['toggle_active_status'];
+        $sRequestAction  = $_POST['action'] ?:'';
+        // test if action value is in allowed list of actions
+        if ( !in_array($sRequestAction, $aAllowedActions)) {
+            throw new Exception('no valid "action" was set');
+        }
+        $sRequestIdKey = $_POST['iRecordId'];
+//        $iIdKey = $admin->checkIDKEY('iRecordId');
+//        $iIdKey = $admin->checkIDKEY('iRecordId', 0, '', true);
+        $iIdKey = $sRequestIdKey;
+        if (!($iRequestRecordId = (int)$iIdKey ?: 0)) {
+            throw new Exception('no valid RecordId was set '.$iRequestRecordId);
+        }
+        if (!($admin->is_authenticated() && $admin->get_permission($sModuleDir, 'module'))) {
+            throw new Exception('You\'re not allowed to make changes to Module: ['.$sModuleDir.']');
+        }
+        switch ($sRequestAction):
+            case 'toggle_active_status':
+                // Check the Parameters
+                $sql = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` SET '
+                     . '`active`= (`active` IS NOT TRUE) '
+                     . 'WHERE `post_id`='.$iRequestRecordId;
+                if (!(bool)$database->query($sql)) {
+                    throw new Exception('DB access fail ['.$database->get_error().']');
+                }
+                break;
+            default:
+                throw new Exception('no valid "action" was set ');
+                break;
+        endswitch;
+        $aJsonRespond['message'] = 'Activity Status successfully changed';
+        $aJsonRespond['success'] = true;
+//        $aJsonRespond['sIdKey']  = $admin->getIDKEY($iIdKey);
+        $aJsonRespond['sIdKey']  = $iIdKey;
+    } catch (Exception $e) {
+        $aJsonRespond['message'] = $e->getMessage();
+        $aJsonRespond['success'] = false;
+//        $aJsonRespond['sIdKey']  = $admin->getIDKEY($iIdKey);
+        $aJsonRespond['sIdKey']  = $iIdKey;
+    }
+    // echo the json_respond to the ajax function
+    exit(json_encode($aJsonRespond));

Property changes on: trunk/modules/news/ajax/ajax.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/ajax/ajaxActiveStatus.js
===================================================================
--- trunk/modules/news/ajax/ajaxActiveStatus.js	(nonexistent)
+++ trunk/modules/news/ajax/ajaxActiveStatus.js	(revision 2)
@@ -0,0 +1,63 @@
+/**
+ * AJAX
+ *        Plugin to delete Records from a given table without a new page load (no reload)
+ */
+// Building a jQuery Plugin
+// using the Tutorial: http://www.learningjquery.com/2007/10/a-plugin-development-pattern
+// plugin definition
+/*
+ajaxActiveStatus OPTIONS
+=====================================================================================
+MODULE = 'modulename',   // (string)
+DB_RECORD_TABLE: 'modulename_table',        // (string)
+DB_COLUMN: 'item_id',                       // (string) the key column you will use as reference
+sFTAN: ''                                   // (string) FTAN
+*/
+
+(function($) {
+        $.fn.ajaxActiveStatus = function(options) {
+                var aOpts = $.extend({}, $.fn.ajaxActiveStatus.defaults, options);
+//console.info(aOpts);
+                $(this).find('a').removeAttr("href").css('cursor', 'pointer');
+                $(this).click(function() {
+                        var oLink = $(this).find('a');
+                        var oElement = $(this).find('img');
+                        var iRecordId = oElement.attr("id").substring(7);
+                        var oRecord = $("td#" + 'id_' + iRecordId);
+                        switch(oElement.attr("src")){
+                            case News.ThemeUrl + 'img/24' +"/status_1.png": var action = "0"; break;
+                            case News.ThemeUrl + 'img/24' +"/status_0.png": var action = "1"; break;
+                        }
+                                // pregenerate the data string
+/*
+                        var sDataString = 'purpose=active_status&action=active_status'+'&MODULE='
+                                        +aOpts.MODULE+'&DB_COLUMN='
+                                        +aOpts.DB_COLUMN+'&iRecordId='
+                                        +iRecordID;
+*/
+                        var sDataString = 'action=toggle_active_status&iRecordId='+iRecordId;
+                        $.ajax({
+                                url: News.AddonUrl +"ajax/ajax.php",
+                                type: "POST",
+                                dataType: 'json',
+                                data: sDataString,
+                                success: function(json_respond) {
+                                    if(json_respond.success === true) {
+/*
+*/
+                                        oRecord.attr("id", json_respond.sIdKey);
+                                        oElement.attr("id", "active_"+ json_respond.sIdKey);
+console.info(oRecord.attr);
+                                        oElement.attr("src", News.ThemeUrl + 'img/24' +"/status_"+ action +".png");
+//                                        oElement.animate({opacity: 1});
+                                    } else {
+                                            oRecord.attr("id", json_respond.sIdKey);
+                                            oElement.attr("id", "active_"+ json_respond.sIdKey);
+                                            alert(json_respond.message);
+                                    }
+                                }
+                        });
+
+                });
+        }
+})(jQuery);
Index: trunk/modules/news/backend.css
===================================================================
--- trunk/modules/news/backend.css	(nonexistent)
+++ trunk/modules/news/backend.css	(revision 2)
@@ -0,0 +1,5 @@
+/* switch path to default or ownstyle */
+@import url("templates/default/css/backend.css"); 
+
+
+
Index: trunk/modules/news/backend_body.js
===================================================================
--- trunk/modules/news/backend_body.js	(nonexistent)
+++ trunk/modules/news/backend_body.js	(revision 2)
@@ -0,0 +1,51 @@
+
+//console.info('News ==='+typeof News);
+    // Function to toggle active/inavtive of a categorie in the overview
+    function toggle_active_inactive(id) {
+        var img = $("#i" + id);
+    console.log(img);
+        if( img.attr("src") == News.ThemeUrl+"/img/24/active_1.png") {
+            var action = "disable";
+            var src = News.ThemeUrl+"/img/24/active_0.png";
+        } else {
+            var action = "enable";
+            var src = News.ThemeUrl+"/img/24/active_1.png";
+        }
+        $.ajax({
+            url: News.AddonUrl+"/ajax/post_switch_active_inactive.php",
+            type: "POST",
+            data: 'cat_id='+id+'&action='+action,
+            dataType: 'json',
+            success: function(data) {
+                if(data.success == "true") {
+                    img.attr("src", src);
+                    img.attr("title", data.message);
+                } else {
+                    alert(data.message);
+                }
+            },
+            complete: function() {}
+        });
+    }
+    // End of toggle_active_inactive
+
+/*-------------------------------------------------------------------------------------------------*/
+if (typeof News ==="object"){
+    var NW_MODULE_URL = News.AddonUrl;
+    var NW_ICONS = News.ThemeUrl + 'img';
+    var NW_AJAX_PLUGINS =  News.AddonUrl + 'ajax';  // this var could change in the future
+    var LANGUAGE = LANGUAGE ? LANGUAGE : 'EN'; // set var LANGUAGE to EN if LANGUAGE not set before
+    /*
+    console.info(News.AddonUrl + 'ajax' +"/ajaxActiveStatus.js");
+    console.info(NW_AJAX_PLUGINS);
+                    DB_COLUMN: 'post_id',
+    */
+            $.insert(  News.AddonUrl + 'ajax' +"/ajaxActiveStatus.js");
+            // AjaxHelper change item active status
+            $("td.toggle_active_status").ajaxActiveStatus({
+                    MODULE : News.AddonUrl,
+                    DB_RECORD_TABLE: '',
+                    DB_COLUMN: 'post_id',
+                    sIdKey: ''
+            });
+}
Index: trunk/modules/news/change.log
===================================================================
--- trunk/modules/news/change.log	(nonexistent)
+++ trunk/modules/news/change.log	(revision 2)
@@ -0,0 +1,175 @@
+
+Version 3.5.8      11. Dec 2011
+
+Version 3.5.7      30. Mrz 2013
+
+25 Jan-2012
+    + module news: added sql-dump to create database tables
+    # module news: some little fixes in install/upgrade
+
+Version 3.5.6      11. Dec 2011
+
+Version 3.5.5      25. Jun 2011
+
+10 Jun-2011
+    + add PL languages to news and captcha_control (tks to vixrealitum)
+
+Version 3.3        12. Jan 2011
+
+16 Jan-2011
+    # Security fix to filter out droplets from user input in news and form modules
+15 Jan-2011
+    # Security fix for news module
+01-Feb-2010
+    ! to hold content, install don't drop existing tables (code, form, menu_link, news, wrapper, wysiwyg)
+28-Jan-2010
+    + Ticket #927 news module language file in swedish
+
+Version 3.5        24. Jan 2010
+
+Version 3.3        16. Dec 2009
+
+09-Oct-2009
+    # fixes and recoded news module
+9-Aug-2009
+    # Fixed bug in news modul introduced in changeset [1057]
+6-Aug-2009
+    ! Updated upgrade_script to make use of the changed news settings
+    # Fixed again some bugs in news modul (ticket #756) (Thanks to Aldus and Luisehahne)
+18-July 2009
+    # Again added some &amp; to news and form to get more valid output (Thanks to Luisehahne)
+16-July 2009 
+    # Fixed E_ALL notice in news/view.php
+    ! replaced in form and news delimiter "&amp;" with "&"
+15-July 2009
+    # fixed display issue of jscalendar in news modul (Thanks to Aldus)
+14-July 2009
+    # Fixed some validiation bugs in news modul (ticket #742) (Thanks to Luisehahne)
+13-July 2009
+    + added changes from news/add.php to the upgrade-script.php
+    # News-Modul: add the unlink-routine for the ".news" folder inside uninstall.php
+    # News-Modul: add the unlink-routine for the ".news" folder inside uninstall.php
+    ! News-Modul: add <tr><td> and </td></tr>-tags to the "none found" part in the view.php to
+    ! The news module post_title link made unclickable when there is no full post.
+11-July-2009
+    + Added changed news settings to upgrade-script
+09-July-2009
+    ! Added a better option to hide the READ_MORE link in the news module. (ticket #739)
+
+Version 2.8        25. Feb 2009
+
+25-Feb-2009
+    # fixed wrong path to images in news and form modul
+    + corrected info.php of news-modul
+
+Version 2.7        24. Feb 2009
+
+17-Jan-2009
+    ! changed handling of post_date in news modul (thanks to susigross)
+    + added hour and minute support to default published_when field in news modul
+13-Jan-2009
+    # fixed bug for the rss of news, see ticket #609
+04-Jan-2009
+    # made news Modul multilingual, see ticket #676 (some additional translations are needed)
+03-Jan-2009
+    # fixed bug in view.php of news module (ticket #676 Thanks to susigross)
+    # fixed another bug in view.php of news modul introduced in changeset [892]
+29-Dec-2008
+    # replaced in news modul special chars with entities to get valid output
+    - Removed the <p> tag around the news as it is added from the editor
+28-Dec-2008
+    + ticket 607: include the frontend.css in the comment_page.php file of the news-module.
+02-Nov-2008
+    ! news: added PAGE_SPACER to $page_title (creates e.g. title-32.php instead of title32.php)
+29-Oct-2008
+    # News: total number of news wasn't calculated correctly
+    # News: total number of news wasn't calculated correctly
+    # applied bugfix for ticket #608 (redeclaration of news module)
+21-Oct-2008
+    # fixed display issue in news modul
+05-Jul-2008
+    # fixed MODI_DATE/PUBLISHED_DATE issue in news-module. Added PUBLISHED_TIME, removed PUBL_DATE,PUBL_TIME. Thanks to forum-member timorotha
+06-Apr-2008
+    ! removed some obsolete language variables from news and form module (now defined in global WB language files)
+03-Apr-2008
+    ! some code clean up in news/form module
+02-Apr-2008
+    ! some code clean-up in News module
+01-Apr-2008
+    ! added updated edit CSS functions to the News module
+24-Mar-2008
+    !  Added class nixhier to frontend.css from form and news Modul (required for ASP)
+08-Mar-2008
+    # fixed issue with news and end-date
+18-Feb-2008
+    ! Modified news module to create a default index.php during installation (directory spoofing)
+08-Feb-2008
+    ! module news: set focus on captcha-field if user have to re-enter captcha
+29-Jan-2008
+     Had to fix some issues in admin/pages/sections and module news.
+26-Jan-2008
+     Improved ASP in news-module.
+    + module news: added publish_until field to control the visibility of a news-posting by date and time
+    + module news: added publish_until field to control the visibility of a news-posting by date and time
+25-Jan-2008
+    + Added new CAPTCHA. Adapted core: signup and modules: news and form.
+    + Added Advanced Spam Protection (ASP) to core: signup and modules news and form.
+    # module news: it was possible to post comments to postings with commenting disabled
+24-Jan-2008
+    + added language support to all integrated modules (except for news and form module)
+20-Jan-2008
+    # fixed E_NOTICE-warning in news-module (about SECTION_ID in comment.php)
+19-Jan-2008
+    # Fixed bug in news modul with missing variable PAGE_DIRECTORY
+    - Module news: removed old calendar
+    + Module news: adapted news to use the new include/jscalendar
+    + Module news: adapted news to use the new include/jscalendar
+18-Jan-2008
+    ! Updated news modul with features from the advanced news modul
+    ! Updated news modul with features from the advanced news modul
+07-Jan-2007
+    # Fixed error when uninstalling the news modul
+17-Nov-2006
+    # Fixed fatal error in line 46 news/comment.php (thanks to eki)(#358)
+20-Oct-2006
+    # Fixed group images in news modul cannot be stored (#342)
+    # Fixed specialchars problem in the news modul (#339)
+    # Fixed news modul stores empty records (#338)
+    # Fixed Captcha didn't work in news comments (#337)
+20-May-2006
+    # Fixed typo in news save comment page (#282)
+    # Fixed typo in news delete post page (#283)
+16-Mar-2006
+    # Removed duplicate expression from modules/news/install.php which caused
+12-Dec-2005
+    # Fixed bugs in RSS news feeder
+    + Added Captcha to News module
+    ! News mod now hides read more link if no need for it (see ticket #56)
+04-Sep-2005
+    + Added and RSS newsfeed script to the News module
+21-Jun-2005
+    # Added htmlspecialchars for modifying WYSIWYG, news, etc. modules (Bug #78)
+13-Jun-2005
+    # Fixed bug (#88) with news module
+07-Apr-2005
+    # Fixed bug with news module when pages directory set to root
+05-Apr-2005
+    # Fixed bug where stripslashes not run on news post titles in admin
+02-Apr-2005
+    # Fixed many bugs with news module when viewing posts by group
+28-Mar-2005
+    + Added option to News module to specify how many posts should be listed
+    # Fixed bug when displaying comments in News module (WB Bug #14)
+    # Fixed stripslashes problem for viewing news comments
+    # News items are displayed with name of poster instead of "Unknown"
+03-Fed-2005
+    ! All "access files" for the news module now stored in pages/posts instead
+26-Jan-2005
+    # Added ordering cleaning to delete_post.php on line 53 for news module
+23-Dec-2004
+    ! News module now use's WYSIWYG for modifying news posts
+20-Dec-2004
+    # Fixed bug when deleting post's in News module
+14-Dec-2004
+    + Added "News" module
+
Index: trunk/modules/news/comment.php
===================================================================
--- trunk/modules/news/comment.php	(nonexistent)
+++ trunk/modules/news/comment.php	(revision 2)
@@ -0,0 +1,97 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('wb')) { require(WB_PATH.'/framework/class.wb.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof wb)) { $wb = new wb(); }
+
+// Check if there is a post id
+// $post_id = $wb->checkIDKEY('post_id', false, 'GET');
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$aRequestVars  = (isset(${$requestMethod}) ? ${$requestMethod} : null);
+$section_id = intval(isset($aRequestVars['section_id'])) ? $aRequestVars['section_id'] : (isset($section_id) ? intval($section_id) : 0);
+$post_id = (intval(isset($aRequestVars['post_id'])) ? $aRequestVars['post_id'] : (isset($post_id) ? intval($post_id) : 0));
+$position = (isset($aRequestVars['p']) ? $aRequestVars['p'] : '' );
+/*
+$post_id = (int)$_GET['post_id'];
+$section_id = (int)$_GET['section_id'];
+$position = 0;
+*/
+if (!$post_id OR !isset($_GET['section_id']) OR !is_numeric($_GET['section_id'])) {
+    $_SESSION['message'][] = ('ABORT::'.$MESSAGE['GENERIC_SECURITY_ACCESS'] );
+    exit();
+}
+
+// Query post for page id
+$query_post = $database->query("SELECT post_id,title,section_id,page_id FROM ".TABLE_PREFIX."mod_news_posts WHERE post_id = '$post_id'");
+if($query_post->numRows() == 0)
+{
+    header("Location: ".WB_URL."/index.php");
+    exit( 0 );
+}
+else
+{
+    $fetch_post = $query_post->fetchRow( MYSQLI_ASSOC );
+    $page_id = $fetch_post['page_id'];
+    $section_id = $fetch_post['section_id'];
+    $post_id = $fetch_post['post_id'];
+    $post_title = $fetch_post['title'];
+    define('SECTION_ID', $section_id);
+    define('POST_ID', $post_id);
+    define('POST_TITLE', $post_title);
+
+    // don't allow commenting if its disabled, or if post or group is inactive
+    $t = time();
+    $table_posts = TABLE_PREFIX."mod_news_posts";
+    $table_groups = TABLE_PREFIX."mod_news_groups";
+    $query = $database->query("
+        SELECT p.post_id
+        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
+        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
+        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t)
+    ");
+    if($query->numRows() == 0)
+    {
+        header("Location: ".WB_URL."/index.php");
+        exit( 0 );
+    }
+
+    // don't allow commenting if ASP enabled and user doesn't comes from the right view.php
+    if(ENABLED_ASP && (!isset($_SESSION['comes_from_view']) OR $_SESSION['comes_from_view']!=POST_ID))
+    {
+        header("Location: ".WB_URL."/index.php");
+        exit( 0 );
+    }
+
+    // Get page details
+    $query_page = $database->query("SELECT parent,page_title,menu_title,keywords,description,visibility FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'");
+    if($query_page->numRows() == 0)
+    {
+        header("Location: ".WB_URL."/index.php");
+        exit( 0 );
+    }
+    else
+    {
+        $page = $query_page->fetchRow( MYSQLI_ASSOC );
+        // Required page details
+        define('PAGE_CONTENT', WB_PATH.'/modules/news/comment_page.php');
+        // Include index (wrapper) file
+        require(WB_PATH.'/index.php');
+    }
+}

Property changes on: trunk/modules/news/comment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/comment_page.php
===================================================================
--- trunk/modules/news/comment_page.php	(nonexistent)
+++ trunk/modules/news/comment_page.php	(revision 2)
@@ -0,0 +1,127 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+
+$sRecallAddress = WB_URL.PAGES_DIRECTORY.$GLOBALS['wb']->page['link'].PAGE_EXTENSION;
+
+require_once(WB_PATH.'/include/captcha/captcha.php');
+// Get comments page template details from db
+$query_settings = $database->query(
+"SELECT `comments_page`, `use_captcha`, `commenting` FROM `".TABLE_PREFIX."mod_news_settings` WHERE `section_id` = '".SECTION_ID."'"
+);
+if($query_settings->numRows() == 0)
+{
+    header("Location: ".$sRecallAddress."");
+    exit( 0 );
+}
+else
+{
+    $settings = $query_settings->fetchRow( MYSQLI_ASSOC );
+
+    // Print comments page
+    $vars = array('[POST_TITLE]','[TEXT_COMMENT]');
+    $values = array(POST_TITLE, $MOD_NEWS['TEXT_COMMENT']);
+    echo str_replace($vars, $values, ($settings['comments_page']));
+    if( isset($_SESSION['message']) ){
+       echo '<p class="warning">'.implode('<br />',$_SESSION['message']).'</p>';
+       unset($_SESSION['message']);
+    }
+
+?>
+    <form id="news-wrapper" name="comment" action="<?php echo WB_URL.'/modules/'.basename(__DIR__).'/submit_comment.php' ?>" method="post">
+      <input type="hidden" name="page_id" value="<?php echo PAGE_ID ;?>" />
+      <input type="hidden" name="section_id" value="<?php echo SECTION_ID ;?>" />
+      <input type="hidden" name="post_id" value="<?php echo POST_ID ;?>" />
+      <input type="hidden" name="redirect" value="<?php echo $sRecallAddress ;?>" />
+      <?php echo $wb->getFTAN(); ?>
+    <?php if(ENABLED_ASP) { // add some honeypot-fields
+    ?>
+    <input type="hidden" name="submitted_when" value="<?php $t=time(); echo $t; $_SESSION['submitted_when']=$t; ?>" />
+    <p class="nixhier">
+    email address:
+    <label for="email">Leave this field email blank:</label>
+    <input id="email" name="email" size="60" value="" /><br />
+    Homepage:
+    <label for="homepage">Leave this field homepage blank:</label>
+    <input id="homepage" name="homepage" size="60" value="" /><br />
+    URL:
+    <label for="url">Leave this field url blank:</label>
+    <input id="url" name="url" size="60" value="" /><br />
+    Comment:
+    <label for="comment">Leave this field comment blank:</label>
+    <input id="comment" name="comment" size="60" value="" /><br />
+    </p>
+    <?php }
+    echo $TEXT['TITLE']; ?>:
+    <br />
+    <input type="text" name="title" maxlength="255" style="width: 90%;"<?php if(isset($_SESSION['comment_title'])) { echo ' value="'.$_SESSION['comment_title'].'"'; unset($_SESSION['comment_title']); } ?> />
+    <br /><br />
+    <?php echo $TEXT['COMMENT']; 
+    ?>:
+    <br />
+    <?php if(ENABLED_ASP) { ?>
+        <textarea name="comment_<?php echo date('W'); ?>" rows="10" cols="1" style="width: 90%; height: 150px;"><?php if(isset($_SESSION['comment_body'])) { echo $_SESSION['comment_body']; unset($_SESSION['comment_body']); } ?></textarea>
+    <?php } else { ?>
+        <textarea name="comment" rows="10" cols="1" style="width: 90%; height: 150px;"><?php if(isset($_SESSION['comment_body'])) { echo $_SESSION['comment_body']; unset($_SESSION['comment_body']); } ?></textarea>
+    <?php } ?>
+    <br /><br />
+    <?php
+    if(isset($_SESSION['captcha_error'])) {
+        echo '<font color="#FF0000">'.$_SESSION['captcha_error'].'</font><br />';
+        $_SESSION['captcha_retry_news'] = true;
+    }
+    // Captcha
+    if($settings['use_captcha']) {
+    ?>
+    <table>
+    <tr>
+        <td><?php echo $TEXT['VERIFICATION']; ?>:</td>
+        <td><?php call_captcha(); ?></td>
+    </tr>
+    </table>
+    <?php
+    if(isset($_SESSION['captcha_error'])) {
+        unset($_SESSION['captcha_error']);
+        ?><script>document.comment.captcha.focus();</script><?php
+    }?>
+    <?php
+    }
+    ?>
+    <table class="news-table">
+    <tr>
+        <td>
+            <input type="submit" name="submit" value="<?php echo $MOD_NEWS['TEXT_ADD_COMMENT']; ?>" />
+        </td>
+        <td>
+            <input type="submit" value="<?php echo $TEXT['CANCEL']; ?>" name="cancel"  />
+        </td>
+    </tr>
+    </table>
+    </form>
+    <?php
+}

Property changes on: trunk/modules/news/comment_page.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/delete.php
===================================================================
--- trunk/modules/news/delete.php	(nonexistent)
+++ trunk/modules/news/delete.php	(revision 2)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+function mod_news_delete($database, $page_id, $section_id)
+{
+
+    //get and remove all php files created for the news section
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $oPosts = $database->query($sql);
+    if($oPosts->numRows() > 0) {
+        while($aPost = $oPosts->fetchRow(MYSQLI_ASSOC)) {
+            if(is_writable(WB_PATH.PAGES_DIRECTORY.$aPost['link'].PAGE_EXTENSION)) {
+            unlink(WB_PATH.PAGES_DIRECTORY.$aPost['link'].PAGE_EXTENSION);
+            }
+        }
+    }
+
+    //check to see if any other sections are part of the news page, if only 1 news is there delete it
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'sections` '
+          . 'WHERE `page_id` = '.$database->escapeString($page_id);
+    $oSection = $database->query($sql);
+    if($oSection->numRows() == 1) {
+        $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '
+              . 'WHERE `page_id` = '.$database->escapeString($page_id);
+        $oPages = $database->query($sql);
+        $link = $oPages->fetchRow(MYSQLI_ASSOC);
+        if(is_writable(WB_PATH.PAGES_DIRECTORY.$link['link'].PAGE_EXTENSION)) {
+            unlink(WB_PATH.PAGES_DIRECTORY.$link['link'].PAGE_EXTENSION);
+        }
+    }
+
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_groups` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_posts` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_comments` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_settings` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+}
+
+if( !function_exists('mod_news_delete') ){ mod_news_delete($database, $page_id, $section_id );}
+

Property changes on: trunk/modules/news/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/delete_comment.php
===================================================================
--- trunk/modules/news/delete_comment.php	(nonexistent)
+++ trunk/modules/news/delete_comment.php	(revision 2)
@@ -0,0 +1,50 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$admin_header = true;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$comment_id = intval($admin->checkIDKEY('comment_id', false, 'GET'));
+$post_id = intval($admin->checkIDKEY('post_id', false, 'GET'));
+if (!$post_id || !$comment_id) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.'&section_id='.$section_id/*.'&post_id='.$post_id */);
+} else {
+    $post_id = $admin->getIDKEY($post_id);
+}
+
+// Update row
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_comments` '
+          . 'WHERE `comment_id` = '.$database->escapeString($comment_id);
+    $database->query($sql);
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error())
+{
+    $admin->print_error($database->get_error(), WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.'&section_id='.$section_id.'&post_id='.$post_id );
+}
+else
+{
+    $admin->print_success($TEXT['SUCCESS'], WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.'&section_id='.$section_id.'&post_id='.$post_id );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/delete_comment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/delete_group.php
===================================================================
--- trunk/modules/news/delete_group.php	(nonexistent)
+++ trunk/modules/news/delete_group.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+    if (!defined('WB_PATH')) {
+        require( dirname(dirname((__DIR__))).'/config.php' );
+    }
+    // Tells script to update when this page was last updated
+    $update_when_modified = true;
+    // Include WB admin wrapper script
+    require(WB_PATH.'/modules/admin.php');
+    $group_id = intval($admin->checkIDKEY('group_id', false, 'GET'));
+    if (!$group_id) {
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+    }
+    try {
+        $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` SET '
+              . '`group_id`=0 '
+              . 'WHERE `group_id` = '.(int) $group_id;
+        $database->query($sql);
+    // Update row
+        $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_groups` '
+              . 'WHERE `group_id` = '.(int) $group_id;
+        $database->query($sql);
+        $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+        $admin->print_footer();
+    } catch (DatabaseException $e) {
+        $admin->print_error($e->getMessage().' - '.$database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+    }

Property changes on: trunk/modules/news/delete_group.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/delete_post.php
===================================================================
--- trunk/modules/news/delete_post.php	(nonexistent)
+++ trunk/modules/news/delete_post.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$post_id = ($admin->checkIDKEY('post_id', false, 'GET'));
+if (!$post_id) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+$admin->print_header();
+
+// Get post details
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+          . 'WHERE `post_id` ='.$post_id;
+$query_details = $database->query($sql);
+if($query_details->numRows() > 0) {
+    $get_details = $query_details->fetchRow( MYSQLI_ASSOC );
+} else {
+    $admin->print_error($TEXT['NOT_FOUND'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Unlink post access file
+if(is_writable(WB_PATH.PAGES_DIRECTORY.$get_details['link'].PAGE_EXTENSION)) {
+    unlink(WB_PATH.PAGES_DIRECTORY.$get_details['link'].PAGE_EXTENSION);
+}
+
+// Delete post
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_posts` '
+          . 'WHERE `post_id` = '.$database->escapeString($post_id);
+    $database->query($sql);
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_comments` '
+          . 'WHERE `post_id` = '.$database->escapeString($post_id);
+    $database->query($sql);
+
+// Clean up ordering
+require(WB_PATH.'/framework/class.order.php');
+$order = new order(TABLE_PREFIX.'mod_news_posts', 'position', 'post_id', 'section_id');
+$order->clean($section_id); 
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.'&post_id='.$post_id);
+} else {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/delete_post.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/frontend.css
===================================================================
--- trunk/modules/news/frontend.css	(nonexistent)
+++ trunk/modules/news/frontend.css	(revision 2)
@@ -0,0 +1,111 @@
+.captcha-table,
+.captcha_table,
+.news-table {
+    border: 0px;
+}
+
+.post_title, .post_date,
+.post-title, .post-date {
+    border-bottom: 1px solid #DDDDDD;
+   font-size :1.0em;
+}
+.post_title,
+.post-title {
+    font-weight: normal;
+    color: #000000;
+}
+.post_date,
+.post-date {
+    text-align: right;
+    font-weight: normal;
+    font-size :0.825em;
+}
+.post_short,
+.post-short {
+    text-align: justify;
+    padding-bottom: 5px;
+}
+
+.comment_title,
+.comment-title {
+    font-weight: bold;
+}
+.comment_text,
+.comment-text {
+    font-weight: normal;
+    background-color: #FDFDFD;
+    border-bottom: 1px solid #DDDDDD;
+    padding-bottom: 15px;
+}
+.comment_title, .comment_text,
+.comment-title, .comment-text {
+    border-left: 1px solid #DDDDDD;
+}
+.comment_info,
+.comment-info {
+    text-align: right;
+    border-right: 1px solid #DDDDDD;
+}
+.comment_title, .comment_info,
+.comment-title, .comment-info {
+    border-top: 1px solid #DDDDDD;
+    background-color: #EEEEEE;
+}
+.selected_group_title,
+.selected-group-title { 
+    font-size: 0.825em;
+    text-align: center;
+}
+/*** Don't remove the class nixhier, this is required for ASP ***/
+.nixhier {
+    display:none;
+}
+.loop_header,
+.loop-header {
+    width: 100%;
+}
+.page_header,
+.page-header {
+    width: 100%;    
+}
+.post_header,
+.post-header {
+    width: 100%;    
+}
+.page_left,
+.page-left {
+    text-align: left;
+}
+.page_center,
+.page-center {
+    text-align: center;
+}
+.page_right,
+.page-right {
+    text-align: right;
+}
+.comment_header,
+.comment-header {
+    width: 100%;
+}
+.public_info,
+.public-info {
+    text-align: right;
+}
+.group_page,
+.group-page {
+    text-align: center;
+}
+
+.post_loop { font-size :1.0em; margin :0px 0px 10px; }
+.post_loop div {  line-height :1.6em; margin :0px 0px 2px; }
+
+form#news-wrapper  {
+  float: none !important;
+  position: relative;
+}
+
+.info { padding :10px; margin-bottom :0.5em; background :#f8f8f8; color :#666666; font-size :91.7%; }
+.note { border :2px #448844 solid; padding :10px; margin :10px auto; background :#eeffee; color :#004400; }
+.important { border :2px #888844 solid; padding :10px; margin-bottom :1em; background :#ffffee; color :#444400; }
+.warning { border :2px #884444 solid; padding :10px; margin-bottom :1em; background :#ffeeee; color :#440000; }
Index: trunk/modules/news/index.php
===================================================================
--- trunk/modules/news/index.php	(nonexistent)
+++ trunk/modules/news/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        news
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/news/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/info.php
===================================================================
--- trunk/modules/news/info.php	(nonexistent)
+++ trunk/modules/news/info.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory   = 'news';
+$module_name        = 'News v3.8.0-dev.1';
+$module_function    = 'page';
+$module_version     = '3.8.0-dev.1';
+$module_platform    = '2.8.3 SP7';
+$module_author      = 'Ryan Djurovich, Rob Smith, Werner v.d.Decken';
+$module_license     = 'GNU General Public License';
+$module_description = 'This page type is designed for making a news page.';

Property changes on: trunk/modules/news/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/install-struct.sql
===================================================================
--- trunk/modules/news/install-struct.sql	(nonexistent)
+++ trunk/modules/news/install-struct.sql	(revision 2)
@@ -0,0 +1,88 @@
+-- phpMyAdmin SQL Dump
+-- Erstellungszeit: 20. Januar 2012 um 12:37
+-- Server Version: 5.1.41
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+-- --------------------------------------------------------
+-- Database structure for module 'news'
+--
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {FIELD_COLLATION}
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_news_comments`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_news_comments`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_news_comments` (
+  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `post_id` int(11) NOT NULL DEFAULT '0',
+  `title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `comment` text{FIELD_COLLATION} NOT NULL,
+  `commented_when` int(11) NOT NULL DEFAULT '0',
+  `commented_by` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`comment_id`)
+){TABLE_ENGINE};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_news_groups`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_news_groups`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_news_groups` (
+  `group_id` int(11) NOT NULL AUTO_INCREMENT,
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `active` int(11) NOT NULL DEFAULT '0',
+  `position` int(11) NOT NULL DEFAULT '0',
+  `title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  PRIMARY KEY (`group_id`)
+){TABLE_ENGINE};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_news_posts`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_news_posts`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_news_posts` (
+  `post_id` int(11) NOT NULL AUTO_INCREMENT,
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `group_id` int(11) NOT NULL DEFAULT '0',
+  `active` int(11) NOT NULL DEFAULT '0',
+  `position` int(11) NOT NULL DEFAULT '0',
+  `title` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `link` text{FIELD_COLLATION} NOT NULL,
+  `content_short` text{FIELD_COLLATION} NOT NULL,
+  `content_long` text{FIELD_COLLATION} NOT NULL,
+  `commenting` varchar(7){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `created_when` int(11) NOT NULL DEFAULT '0',
+  `created_by` int(11) NOT NULL DEFAULT '0',
+  `published_when` int(11) NOT NULL DEFAULT '0',
+  `published_until` int(11) NOT NULL DEFAULT '0',
+  `posted_when` int(11) NOT NULL DEFAULT '0',
+  `posted_by` int(11) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`post_id`)
+){TABLE_ENGINE};
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_news_settings`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_news_settings`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_news_settings` (
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `header` text{FIELD_COLLATION} NOT NULL,
+  `post_loop` text{FIELD_COLLATION} NOT NULL,
+  `footer` text{FIELD_COLLATION} NOT NULL,
+  `posts_per_page` int(11) NOT NULL DEFAULT '5',
+  `post_header` text{FIELD_COLLATION} NOT NULL,
+  `post_footer` text{FIELD_COLLATION} NOT NULL,
+  `comments_header` text{FIELD_COLLATION} NOT NULL,
+  `comments_loop` text{FIELD_COLLATION} NOT NULL,
+  `comments_footer` text{FIELD_COLLATION} NOT NULL,
+  `comments_page` text{FIELD_COLLATION} NOT NULL,
+  `commenting` varchar(7){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `resize` int(11) NOT NULL DEFAULT '0',
+  `use_captcha` int(11) NOT NULL DEFAULT '1',
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE};
+-- EndOfFile

Property changes on: trunk/modules/news/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/install.php
===================================================================
--- trunk/modules/news/install.php	(nonexistent)
+++ trunk/modules/news/install.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+// Make news post access files dir
+            require_once(WB_PATH.'/framework/functions.php');
+            if(make_dir(WB_PATH.PAGES_DIRECTORY.'/posts')) {
+            }
+    }
+}
+/* **** END INSTALL ********************************************************* */
\ No newline at end of file

Property changes on: trunk/modules/news/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/DA.php
===================================================================
--- trunk/modules/news/languages/DA.php	(nonexistent)
+++ trunk/modules/news/languages/DA.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'Denne side er beregnet til at lave en nyhedsside.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'Nyhedsindstillinger';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'L&aelig;s mere';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Indsendt af';
+$MOD_NEWS['TEXT_ON'] = 'den';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Sidst &aelig;ndret';
+$MOD_NEWS['TEXT_AT'] = 'kl.';
+$MOD_NEWS['TEXT_BACK'] = 'Tilbage';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Kommentarer';
+$MOD_NEWS['TEXT_COMMENT'] = 'Kommentar';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Tilf&oslash;j kommentar';
+$MOD_NEWS['TEXT_BY'] = 'Af';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Page not found';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+
+?>

Property changes on: trunk/modules/news/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/DE.php
===================================================================
--- trunk/modules/news/languages/DE.php	(nonexistent)
+++ trunk/modules/news/languages/DE.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'Mit diesem Modul k&ouml;nnen sie eine News Seite ihrer Seite hinzuf&uuml;gen.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'News Einstellungen';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'Weiterlesen';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Ver&ouml;ffentlicht von';
+$MOD_NEWS['TEXT_ON'] = 'am';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Zuletzt ge&auml;ndert am';
+$MOD_NEWS['TEXT_AT'] = 'um';
+$MOD_NEWS['TEXT_BACK'] = 'Zur&uuml;ck zur Übersicht';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Kommentare';
+$MOD_NEWS['TEXT_COMMENT'] = 'Kommentar';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Kommentar hinzuf&uuml;gen';
+$MOD_NEWS['TEXT_BY'] = 'von';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Seite nicht gefunden';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'Kein Kommentar gefunden';
+
+$TEXT['UNKNOWN'] = 'Gast';

Property changes on: trunk/modules/news/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/EN.php
===================================================================
--- trunk/modules/news/languages/EN.php	(nonexistent)
+++ trunk/modules/news/languages/EN.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'This page type is designed for making a news page.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'News Settings';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'Read More';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Posted by';
+$MOD_NEWS['TEXT_ON'] = 'on';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Last changed';
+$MOD_NEWS['TEXT_AT'] = 'at';
+$MOD_NEWS['TEXT_BACK'] = 'Back to Overview';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Comments';
+$MOD_NEWS['TEXT_COMMENT'] = 'Comment';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Add Comment';
+$MOD_NEWS['TEXT_BY'] = 'By';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Page not found';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+

Property changes on: trunk/modules/news/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/FR.php
===================================================================
--- trunk/modules/news/languages/FR.php	(nonexistent)
+++ trunk/modules/news/languages/FR.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Module Description
+$module_description = 'Ce type de page est conu &agrave faire une page de nouvelles.';
+
+//Variables for the  backend
+$MOD_NEWS['SETTINGS'] = 'Configurations Nouvelles';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'En savoir plus';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Post&eacute; par';
+$MOD_NEWS['TEXT_ON'] = '&agrave;';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Derni&egrave;re modification';
+$MOD_NEWS['TEXT_AT'] = '&agrave;';
+$MOD_NEWS['TEXT_BACK'] = 'Retour';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Commentaires';
+$MOD_NEWS['TEXT_COMMENT'] = 'Commentaire';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Ajouter un commentaire';
+$MOD_NEWS['TEXT_BY'] = 'Par';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Page non trouv&eacute;e';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Invit&eacute;';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/NL.php
===================================================================
--- trunk/modules/news/languages/NL.php	(nonexistent)
+++ trunk/modules/news/languages/NL.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+
+//Modul Description
+$module_description = 'Met deze module maak je een nieuwspagina.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'Eigenschappen van de Nieuwsmodule';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'Lees verder';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Geplaatst door';
+$MOD_NEWS['TEXT_ON'] = 'op';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Laatst vernieuwd';
+$MOD_NEWS['TEXT_AT'] = 'om';
+$MOD_NEWS['TEXT_BACK'] = 'Terug';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Commentaren';
+$MOD_NEWS['TEXT_COMMENT'] = 'Commentaar';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Toevoegen commentaar';
+$MOD_NEWS['TEXT_BY'] = 'door';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Pagina niet gevonden';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/NO.php
===================================================================
--- trunk/modules/news/languages/NO.php	(nonexistent)
+++ trunk/modules/news/languages/NO.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'Med denne modulen kan du lage Nyhets sider.';
+  
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'Innstillinger for Nyheter';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'Les Mer';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Skervet Av';
+$MOD_NEWS['TEXT_ON'] = 'P&aring;';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Sist Endret';
+$MOD_NEWS['TEXT_AT'] = 'p&aring;';
+$MOD_NEWS['TEXT_BACK'] = 'Tilbake';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Kommentarer';
+$MOD_NEWS['TEXT_COMMENT'] = 'Kommentar';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Legg Til Kommentar';
+$MOD_NEWS['TEXT_BY'] = 'Av';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Finner ikke siden ';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/PL.php
===================================================================
--- trunk/modules/news/languages/PL.php	(nonexistent)
+++ trunk/modules/news/languages/PL.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'Ten moduł wyświetla stronę Newsów.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'Ustawienia';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'Czytaj więcej';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Napisał(a):';
+$MOD_NEWS['TEXT_ON'] = 'dnia';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Edytowano';
+$MOD_NEWS['TEXT_AT'] = 'o';
+$MOD_NEWS['TEXT_BACK'] = 'Wstecz';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Komentarze';
+$MOD_NEWS['TEXT_COMMENT'] = 'Dodaj komentarz';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Dodaj komentarz';
+$MOD_NEWS['TEXT_BY'] = 'Dodano:';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Strona nie istnieje';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Gość';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/PL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/RU.php
===================================================================
--- trunk/modules/news/languages/RU.php	(nonexistent)
+++ trunk/modules/news/languages/RU.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = '&#1052;&#1086;&#1076;&#1091;&#1083;&#1100; &#1087;&#1088;&#1077;&#1076;&#1085;&#1072;&#1079;&#1085;&#1072;&#1095;&#1077;&#1085; &#1076;&#1083;&#1103; &#1089;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1103; &#1083;&#1077;&#1085;&#1090;&#1099; &#1085;&#1086;&#1074;&#1086;&#1089;&#1090;&#1077;&#1081;';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1085;&#1086;&#1074;&#1086;&#1089;&#1090;&#1085;&#1086;&#1081; &#1083;&#1077;&#1085;&#1090;&#1099;';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = '&#1063;&#1080;&#1090;&#1072;&#1090;&#1100; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Posted by';
+$MOD_NEWS['TEXT_ON'] = 'on';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = '&#1055;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1077; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;';
+$MOD_NEWS['TEXT_AT'] = 'at';
+$MOD_NEWS['TEXT_BACK'] = '&#1053;&#1072;&#1079;&#1072;&#1076;';
+$MOD_NEWS['TEXT_COMMENTS'] = '&#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080;';
+$MOD_NEWS['TEXT_COMMENT'] = '&#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = '&#1044;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100; &#1050;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100;';
+$MOD_NEWS['TEXT_BY'] = 'By';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Page not found';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/SE.php
===================================================================
--- trunk/modules/news/languages/SE.php	(nonexistent)
+++ trunk/modules/news/languages/SE.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Modul Description
+$module_description = 'Den h&auml;r sidtypen &auml;r designad f&ouml;r att skapa en nyhetssida.';
+
+//Variables for the backend
+$MOD_NEWS['SETTINGS'] = 'Inst&auml;llningar';
+
+//Variables for the frontend
+$MOD_NEWS['TEXT_READ_MORE'] = 'L&auml;s mer';
+$MOD_NEWS['TEXT_POSTED_BY'] = 'Postat av';
+$MOD_NEWS['TEXT_ON'] = 'den';
+$MOD_NEWS['TEXT_LAST_CHANGED'] = 'Senaste &auml;ndring';
+$MOD_NEWS['TEXT_AT'] = 'kl.';
+$MOD_NEWS['TEXT_BACK'] = 'Tillbaka';
+$MOD_NEWS['TEXT_COMMENTS'] = 'Kommentarer';
+$MOD_NEWS['TEXT_COMMENT'] = 'kommentar';
+$MOD_NEWS['TEXT_ADD_COMMENT'] = 'Kommentera';
+$MOD_NEWS['TEXT_BY'] = 'Av';
+$MOD_NEWS['PAGE_NOT_FOUND'] = 'Sidan kunde inte hittas';
+$MOD_NEWS['NO_COMMENT_FOUND'] = 'No comment found';
+$TEXT['UNKNOWN'] = 'Guest';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/SE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/languages/index.php
===================================================================
--- trunk/modules/news/languages/index.php	(nonexistent)
+++ trunk/modules/news/languages/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/news/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/modify.php
===================================================================
--- trunk/modules/news/modify.php	(nonexistent)
+++ trunk/modules/news/modify.php	(revision 2)
@@ -0,0 +1,363 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+//overwrite php.ini on Apache servers for valid SESSION ID Separator
+if(function_exists('ini_set')) {
+    ini_set('arg_separator.output', '&amp;');
+}
+
+$sql = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_posts`  WHERE `section_id` = 0 OR title=\'\'';
+$database->query($sql);
+
+$sql = 'DELETE FROM `'.TABLE_PREFIX.'mod_news_groups`  WHERE `section_id` = 0 OR title=\'\'';
+$database->query($sql);
+
+$sAppUrl = WB_URL;
+$sModulName = basename(__DIR__);
+$ModuleRel = '/modules/'.basename(__DIR__).'/';
+$sAddonUrl = $ModuleUrl = WB_URL.'/modules/'.basename(__DIR__).'/';
+$ModulePath = WB_PATH.'/modules/'.basename(__DIR__).'/';
+$sAddonThemeUrl = $sAddonUrl.'templates/default/';
+
+$FTAN = $admin->getFTAN('');
+$sFtan = $FTAN['name'].'='.$FTAN['value'];
+// load module language file
+$sModulName = $sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+
+if( !function_exists( 'make_dir' ) )  {  require(WB_PATH.'/framework/functions.php');  }
+
+?>
+<script type="text/javascript">
+<!--
+var News = {
+    WB_URL : '<?php echo $sAppUrl;?>',
+    AddonUrl : '<?php echo $sAddonUrl;?>',
+    THEME_URL : '<?php echo THEME_URL;?>',
+    ThemeUrl:  '<?php echo $sAddonThemeUrl;?>'
+};
+-->
+</script>
+
+<table style="width: 100%;">
+<?php  ?>
+<tbody>
+<tr style="width: 100%; line-height: 2.825em;">
+    <td style="width: 25%;">
+        <form action="<?php echo WB_URL; ?>/modules/news/add_post.php" method="get" >
+            <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+            <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+            <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+            <input type="submit" value="<?php echo $TEXT['ADD'].' '.$TEXT['POST']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+        </form>
+    </td>
+    <td style="width: 25%;">
+        <form action="<?php echo WB_URL; ?>/modules/news/add_group.php" method="get" >
+            <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+            <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+            <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+            <input type="submit" value="<?php echo $TEXT['ADD'].' '.$TEXT['GROUP']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+        </form>
+    </td>
+    <td style="width: 25%;">
+        <form action="<?php echo WB_URL; ?>/modules/news/modify_settings.php" method="get" >
+            <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+            <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+            <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+            <input type="submit" value="<?php echo $TEXT['SETTINGS']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+        </form>
+    </td>
+<?php if(defined('DEBUG')&& DEBUG && $admin->ami_group_member('1') ) {  ?>
+    <td style="width: 25%;">
+        <form action="<?php echo WB_URL; ?>/modules/news/reorgPosition.php" method="get" >
+            <input type="hidden" value="<?php echo $page_id; ?>" name="page_id">
+            <input type="hidden" value="<?php echo $section_id; ?>" name="section_id">
+            <input type="hidden" value="<?php echo $FTAN['value'];?>" name="<?php echo $FTAN['name'];?>">
+            <input type="submit" value="Reorg Position" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 100%;" />
+        </form>
+    </td>
+<?php } ?>
+</tr>
+</tbody>
+</table>
+
+<br />
+
+<h2><?php echo $TEXT['MODIFY'].'/'.$TEXT['DELETE'].' '.$TEXT['POST']; ?></h2>
+
+<?php
+
+$sSortOrder = 'DESC'; // ASC/DESC
+
+// Loop through existing posts
+    $sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+          . 'WHERE `section_id` = '.$section_id.' '
+          . 'ORDER BY `position`'.$sSortOrder;
+    $oPosts = $database->query($sql);
+    if ($oPosts->numRows() > 0) {
+        $num_posts = $oPosts->numRows();
+?><div class="jsadmin hide"></div>
+    <div class="outer">
+        <table class="news-post w3-table w3-border w3-hoverable w3-stripped table-scroll sortierbar" id="tableData"  >
+            <thead>
+                <tr class="w3-header-blue-wb">
+                    <th class="action"><span>&nbsp;</span></th>
+                    <th class="title sortierbar" style="padding-left: 5px; text-align: left;"><span><?php print $TEXT['POST']; ?></span></th>
+                    <th class="group sortierbar" style=" text-align: left; "><span><?php print $TEXT['GROUP']; ?></span></th>
+                    <th class="status" style="padding-right: 5px; text-align: left; "><span><?php print $TEXT['COMMENTS']; ?></span></th>
+                    <th class="active" style=" text-align: left; " ><span><?php print $TEXT['ACTIVE']; ?></span></th>
+                    <th class="action"><span>&nbsp;</span></th>
+                    <th class="action"><span>&nbsp;</span></th>
+                    <th class="action"><span>&nbsp;</span></th>
+                    <th class="action"><span>&nbsp;</span></th>
+                    <th class="sortierbar vorsortiert-" style="padding-right: 8px; "><span>Pos</span></th>
+                </tr>
+            </thead>
+            <tbody>
+        <?php
+        while($post = $oPosts->fetchRow( MYSQLI_ASSOC )) {
+            $pid = $admin->getIDKEY($post['post_id']);
+            $sid = $admin->getIDKEY($section_id);
+            $iPostId = intval($post['post_id']);
+            if ($post['active'] == 1) {
+                $activ_string = $TEXT['ENABLED'];
+            } else {
+                $activ_string = $TEXT['DISABLED'];
+            }
+
+            ?>
+            <tr class=" sectionrow">
+                <td class="action" style="text-align: center;">
+                    <a href="<?php echo WB_URL; ?>/modules/news/modify_post.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/modify_16.png"  alt="Modify - " />
+                    </a>
+                </td>
+                <td class="title" style="padding-left: 5px; ">
+                    <a href="<?php echo WB_URL; ?>/modules/news/modify_post.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>">
+                        <?php echo ($post['title']); ?>
+                    </a>
+                </td>
+                <td class="group">
+                    <?php
+                    // Get group title
+                    $sqlGroups  = 'SELECT `title`   FROM `'.TABLE_PREFIX.'mod_news_groups`  WHERE `group_id` = \''.$post['group_id'].'\'';
+                    $oGroups = $database->query($sqlGroups);
+                    if($oGroups->numRows() > 0) {
+                        $fetch_title = $oGroups->fetchRow( MYSQLI_ASSOC );
+                        echo ($fetch_title['title']);
+                    } else {
+                        echo $TEXT['NONE'];
+                    }
+                    ?>
+                </td>
+                <td class="status">
+                    <?php
+                    // Get number of comments
+                    $sqlComment = 'SELECT COUNT(*) `iComment` FROM `'.TABLE_PREFIX.'mod_news_comments` WHERE `post_id` = \''.$post['post_id'].'\'';
+                    $iComment = $database->get_one($sqlComment);
+                    echo $iComment;
+                    ?>
+                </td>
+                <td id="id_<?php echo $iPostId; ?>" class="toggle_active_status">
+                    <img id="active_<?php echo $iPostId; ?>" src="<?php echo $sAddonThemeUrl; ?>img/24/status_<?php echo (int)$post['active'];?>.png" alt=""  />
+                </td>
+                <td >
+                <?php
+                $start = $post['published_when'];
+                $end = $post['published_until'];
+                $t = time();
+                $icon = '';
+                if($start<=$t && $end==0)
+                    $icon=THEME_URL.'/images/noclock_16.png';
+                elseif(($start<=$t || $start==0) && $end>=$t)
+                    $icon=THEME_URL.'/images/clock_16.png';
+                else
+                    $icon=THEME_URL.'/images/clock_red_16.png';
+                ?>
+                <a href="<?php echo WB_URL; ?>/modules/news/modify_post.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+                    <img src="<?php echo $icon; ?>" alt="" />
+                </a>
+                </td>
+                <td style="text-align: center;">
+
+                <?php if ((($sSortOrder=='DESC'))&&($post['position'] > 1)&&($post['position'] < $num_posts)) { ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="^" />
+                    </a>
+                <?php } else if (($post['position'] > 1)&&($post['position'] < $num_posts)) { ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_up.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="^" />
+                    </a>
+                <?php } else if ((empty($sSortOrder)||($sSortOrder=='ASC'))&&($post['position'] == $num_posts)){ ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_up.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="^" />
+                    </a>
+                <?php } else if ((($sSortOrder=='DESC'))&&($post['position'] == 1)){ ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="^" />
+                    </a>
+                <?php } ?>
+                </td>
+
+                <td style="text-align: center;">
+                <?php if (($post['position'] > 1)&&($post['position'] < $num_posts)) { ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="v" />
+                    </a>
+                <?php } else if ((empty($sSortOrder)||($sSortOrder=='ASC'))&&($post['position'] == 1)){ ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="^" />
+                    </a>
+                <?php } else if ((($sSortOrder=='DESC'))&&($post['position'] == $num_posts)){ ?>
+                    <a href="<?php echo WB_URL; ?>/modules/news/move_up.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;move_id=<?php echo $iPostId; ?>&amp;position=<?php echo $post['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="^" />
+                    </a>
+                <?php } ?>
+
+                </td>
+                <td style="text-align: center;">
+                    <a href="javascript:confirm_link('<?php echo $TEXT['ARE_YOU_SURE']; ?>','<?php echo WB_URL; ?>/modules/news/delete_post.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                        <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="X" />
+                    </a>
+                </td>
+                <td style="text-align: right;"><?php echo $post['position']; ?></td>
+            </tr>
+            <?php
+        }
+        ?>
+            </tbody>
+        </table>
+    </div>
+    <?php
+} else {
+    echo $TEXT['NONE_FOUND'];
+}
+
+?>
+
+<h2><?php echo $TEXT['MODIFY'].'/'.$TEXT['DELETE'].' '.$TEXT['GROUP']; ?></h2>
+
+<?php
+
+// Loop through existing groups
+$query_groups = $database->query("SELECT * FROM `".TABLE_PREFIX."mod_news_groups` WHERE section_id = '$section_id' ORDER BY position");
+if($query_groups->numRows() > 0) {
+    $num_groups = $query_groups->numRows();
+    ?>
+    <table class="news-group w3-table" id="NewsGroupDataTable" >
+        <colgroup class="action">
+          <col />
+        </colgroup>
+        <colgroup class="title">
+          <col />
+        </colgroup>
+        <colgroup class="group">
+          <col />
+        </colgroup>
+        <colgroup class="status">
+          <col />
+        </colgroup>
+        <colgroup class="active">
+          <col />
+        </colgroup>
+        <colgroup class="action">
+          <col />
+          <col />
+          <col />
+          <col />
+          <col />
+        </colgroup>
+        <thead>
+            <tr class=" w3-header-blue-wb">
+                <th style="padding-left: 5px;">&nbsp;</th>
+                <th style="padding-left: 5px; text-align: left;"><?php print $TEXT['GROUP']; ?></th>
+                <th > </th>
+                <th > </th>
+                <th ><?php print $TEXT['ACTIVE']; ?></th>
+                <th > </th>
+                <th > </th>
+                <th > </th>
+                <th > </th>
+                <th style="padding-right: 4px;">Pos</th>
+            </tr>
+        </thead>
+        <tbody>
+    <?php
+    while($group = $query_groups->fetchRow( MYSQLI_ASSOC )) {
+        $gid = $admin->getIDKEY($group['group_id']);
+        ?>
+        <tr>
+            <td style="padding-left: 5px; text-align: center;">
+                <a href="<?php echo WB_URL; ?>/modules/news/modify_group.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;group_id=<?php echo $gid; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+                    <img src="<?php echo THEME_URL; ?>/images/modify_16.png" alt="Modify - " />
+                </a>
+            </td>
+            <td style="padding-left: 5px;">
+                <a href="<?php echo WB_URL; ?>/modules/news/modify_group.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;group_id=<?php echo $gid; ?>">
+                    <?php echo $group['title']; ?>
+                </a>
+            </td>
+            <td  style="text-align: right;"> </td>
+            <td  style="text-align: right;"> </td>
+            <td  style="text-align: center;">
+                <?php if($group['active'] == 1) { echo $TEXT['YES']; } else { echo $TEXT['NO']; } ?>
+            </td>
+            <td  style="text-align: right;"> </td>
+            <td  style="text-align: center;">
+            <?php if($group['position'] != 1 ) { ?>
+                <a href="<?php echo WB_URL; ?>/modules/news/move_up.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;group_id=<?php echo $gid; ?>&amp;move_id=<?php echo $group['group_id']; ?>&amp;position=<?php echo $group['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_UP']; ?>">
+                    <img src="<?php echo THEME_URL; ?>/images/up_16.png" alt="^" />
+                </a>
+            <?php } ?>
+            </td>
+            <td  style="text-align: center;">
+            <?php if($group['position'] != $num_groups ) { ?>
+                <a href="<?php echo WB_URL; ?>/modules/news/move_down.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;group_id=<?php echo $gid; ?>&amp;move_id=<?php echo $group['group_id']; ?>&amp;position=<?php echo $group['position']; ?>&amp;module=<?php echo $sModulName; ?>" title="<?php echo $TEXT['MOVE_DOWN']; ?>">
+                    <img src="<?php echo THEME_URL; ?>/images/down_16.png" alt="v" />
+                </a>
+            <?php } ?>
+            </td>
+            <td  style="text-align: center;">
+                <a href="javascript:confirm_link('<?php echo $TEXT['ARE_YOU_SURE']; ?>', '<?php echo WB_URL; ?>/modules/news/delete_group.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;group_id=<?php echo $gid; ?>');" title="<?php echo $TEXT['DELETE']; ?>">
+                    <img src="<?php echo THEME_URL; ?>/images/delete_16.png" alt="X" />
+                </a>
+            </td>
+            <td  style="text-align: right;"><?php echo $group['position']; ?></td>
+        </tr>
+        <?php
+    }
+    ?>
+        </tbody>
+    </table>
+    <script src="<?php echo $ModuleUrl;?>templates/default/js/TableSort.js" type="text/javascript"></script>
+
+<?php
+} else {
+    echo $TEXT['NONE_FOUND'];
+}
+    // include the required file for Javascript admin
+    if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php'))
+    {
+//        $js_buttonCell = 6;
+        include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+    }

Property changes on: trunk/modules/news/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/modify_comment.php
===================================================================
--- trunk/modules/news/modify_comment.php	(nonexistent)
+++ trunk/modules/news/modify_comment.php	(revision 2)
@@ -0,0 +1,78 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$comment_id = $admin->checkIDKEY('comment_id', false, 'GET');
+if (!$comment_id) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],  ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+}
+
+// Get header and footer
+$sql  = 'SELECT `post_id`,`title`,`comment` FROM `'.TABLE_PREFIX.'mod_news_comments` '
+      . 'WHERE `comment_id` = \''.$comment_id.'\'';
+$query_content = $database->query($sql);
+$fetch_content = $query_content->fetchRow(MYSQLI_ASSOC);
+?>
+<div id="news-wrapper">
+<h2><?php echo $TEXT['MODIFY'].' '.$TEXT['COMMENT']; ?></h2>
+
+<form name="modify" action="<?php echo WB_URL; ?>/modules/news/save_comment.php" method="post" style="margin: 0;">
+
+<input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+<input type="hidden" name="post_id" value="<?php echo $fetch_content['post_id']; ?>" />
+<input type="hidden" name="comment_id" value="<?php echo $comment_id; ?>" />
+<?php echo $admin->getFTAN(); ?>
+<table class="row_a" cellpadding="2" cellspacing="0" border="0" width="100%">
+<tr>
+    <td width="80"><?php echo $TEXT['TITLE']; ?>:</td>
+    <td>
+        <input type="text" name="title" value="<?php echo (htmlspecialchars($fetch_content['title'])); ?>" style="width: 98%;" maxlength="255" />
+    </td>
+</tr>
+<tr>
+    <td valign="top"><?php echo $TEXT['COMMENT']; ?>:</td>
+    <td>
+        <textarea name="comment" rows="10" cols="1" style="width: 98%; height: 150px;"><?php echo (htmlspecialchars($fetch_content['comment'])); ?></textarea>
+    </td>
+</tr>
+</table>
+
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+<tr>
+    <td align="left">
+        <input name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="width: 100px; margin-top: 5px;" />
+    </td>
+    <td align="right">
+        <input type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="javascript: window.location = '<?php
+            echo WB_URL; ?>/modules/news/modify_post.php?page_id=<?php
+            echo $page_id; ?>&amp;section_id=<?php echo $section_id; ?>&amp;post_id=<?php
+            echo $admin->getIDKEY($fetch_content['post_id']); ?>';" style="width: 100px; margin-top: 5px;" />
+    </td>
+</tr>
+</table>
+</form>
+</div>
+
+<?php
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/modify_comment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/modify_group.php
===================================================================
--- trunk/modules/news/modify_group.php	(nonexistent)
+++ trunk/modules/news/modify_group.php	(revision 2)
@@ -0,0 +1,103 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// suppress to print the header, so no new FTAN will be set
+//$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// show the info banner
+$print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+/* */
+$group_id = intval($admin->checkIDKEY('group_id', false, 'GET'));
+if (!$group_id) {
+   $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Get header and footer
+$sql  = 'SELECT * FROM '.TABLE_PREFIX.'mod_news_groups '
+      . 'WHERE group_id = '.$group_id;
+$query_content = $database->query( $sql );
+
+$fetch_content = $query_content->fetchRow( MYSQLI_ASSOC );
+
+?>
+
+<h2><?php echo $TEXT['ADD'].'/'.$TEXT['MODIFY'].' '.$TEXT['GROUP']; ?></h2>
+
+<form name="modify" action="<?php echo WB_URL; ?>/modules/news/save_group.php" method="post" enctype="multipart/form-data" style="margin: 0;">
+<?php echo $admin->getFTAN(); ?>
+<input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+<input type="hidden" name="group_id" value="<?php echo $group_id; ?>" />
+<table class="row_a" cellpadding="2" cellspacing="0" border="0" width="100%">
+<tr>
+   <td width="80"><?php echo $TEXT['TITLE']; ?>:</td>
+   <td>
+      <input type="text" name="title" value="<?php echo (htmlspecialchars($fetch_content['title'])); ?>" style="width: 98%;" maxlength="255" />
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['IMAGE']; ?>:</td>
+   <?php if(file_exists(WB_PATH.MEDIA_DIRECTORY.'/.news/image'.$group_id.'.jpg')) { ?>
+   <td>
+      <a href="<?php echo WB_URL.MEDIA_DIRECTORY; ?>/.news/image<?php echo $group_id; ?>.jpg" target="_blank">View</a>
+      &nbsp;
+      <input type="checkbox" name="delete_image" id="delete_image" value="true" />
+      <label for="delete_image">Delete</label>
+   </td>
+   <?php } else { ?>
+   <td>
+      <input type="file" name="image" />
+   </td>
+   <?php } ?>
+</tr>
+<tr>
+   <td><?php echo $TEXT['ACTIVE']; ?>:</td>
+   <td>
+      <input type="radio" name="active" id="active_true" value="1" <?php if($fetch_content['active'] == 1) { echo ' checked="checked"'; } ?> />
+      <a href="#" onclick="javascript: document.getElementById('active_true').checked = true;">
+      <?php echo $TEXT['YES']; ?>
+      </a>
+      -
+      <input type="radio" name="active" id="active_false" value="0" <?php if($fetch_content['active'] == 0) { echo ' checked="checked"'; } ?> />
+      <a href="#" onclick="javascript: document.getElementById('active_false').checked = true;">
+      <?php echo $TEXT['NO']; ?>
+      </a>
+   </td>
+</tr>
+</table>
+
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+<tr>
+   <td align="left">
+      <input name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="width: 100px; margin-top: 5px;" />
+   </td>
+   <td align="right">
+      <input type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="javascript: window.location = '<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page_id; ?>';" style="width: 100px; margin-top: 5px;" />
+   </td>
+</tr>
+</table>
+</form>
+
+<?php
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/modify_group.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/modify_post.php
===================================================================
--- trunk/modules/news/modify_post.php	(nonexistent)
+++ trunk/modules/news/modify_post.php	(revision 2)
@@ -0,0 +1,282 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// $admin_header = true;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// show the info banner
+$print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+$post_id = intval($admin->checkIDKEY('post_id', false, 'GET'));
+if (!$post_id) {
+   $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $backlink);
+}
+
+// Get header and footer
+$sql  = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+      . 'WHERE `post_id` = '.$post_id.' '
+      . 'ORDER BY `position` ASC';
+$query_content = $database->query($sql);
+$fetch_content = $query_content->fetchRow(MYSQLI_ASSOC);
+
+if (!defined('WYSIWYG_EDITOR') OR WYSIWYG_EDITOR=="none" OR !file_exists(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include.php')) {
+   function show_wysiwyg_editor($name,$id,$content,$width,$height) {
+      echo '<textarea name="'.$name.'" id="'.$id.'" rows="10" cols="1" style="width: '.$width.'; height: '.$height.';">'.$content.'</textarea>';
+   }
+} else {
+   $id_list=array("short","long");
+   require(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include.php');
+}
+
+// include jscalendar-setup
+$jscal_use_time = true; // whether to use a clock, too
+require_once(WB_PATH."/include/jscalendar/wb-setup.php");
+?>
+<h2><?php echo $TEXT['ADD'].'/'.$TEXT['MODIFY'].' '.$TEXT['POST']; ?></h2>
+<div class="jsadmin jcalendar hide"></div>
+<form name="modify" action="<?php echo WB_URL; ?>/modules/news/save_post.php" method="post" style="margin: 0;">
+<?php echo $admin->getFTAN(); ?>
+<input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+<input type="hidden" name="post_id" value="<?php echo $post_id; ?>" />
+
+<table class="row_a news">
+<tr>
+   <td><?php echo $TEXT['TITLE']; ?>:</td>
+   <td width="80%">
+      <input type="text" name="title" value="<?php echo (htmlspecialchars($fetch_content['title'])); ?>" style="width: 98%;" maxlength="255" />
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['GROUP']; ?>:</td>
+   <td>
+      <select name="group" style="width: 100%;">
+         <option value="0"><?php echo $TEXT['NONE']; ?></option>
+         <?php
+         $sql = 'SELECT `group_id`, `title` FROM `'.TABLE_PREFIX.'mod_news_groups` '
+         .'WHERE `section_id` = '.$section_id.' '
+         .'ORDER BY `position` ASC';
+         $query = $database->query($sql);
+         if($query->numRows() > 0) {
+            // Loop through groups
+            while($group = $query->fetchRow(MYSQLI_ASSOC)) {
+               ?>
+               <option value="<?php echo $group['group_id']; ?>"<?php if($fetch_content['group_id'] == $group['group_id']) { echo ' selected="selected"'; } ?>><?php echo $group['title']; ?></option>
+               <?php
+            }
+         }
+         ?>
+      </select>
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['COMMENTING']; ?>:</td>
+   <td>
+      <select name="commenting" style="width: 100%;">
+         <option value="none"><?php echo $TEXT['DISABLED']; ?></option>
+         <option value="public" <?php if($fetch_content['commenting'] == 'public') { echo ' selected="selected"'; } ?>><?php echo $TEXT['PUBLIC']; ?></option>
+         <option value="private" <?php if($fetch_content['commenting'] == 'private') { echo ' selected="selected"'; } ?>><?php echo $TEXT['PRIVATE']; ?></option>
+      </select>
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['ACTIVE']; ?>:</td>
+   <td>
+      <input type="radio" name="active" id="active_true" value="1" <?php if($fetch_content['active'] == 1) { echo ' checked="checked"'; } ?> />
+      <a href="#" onclick="document.getElementById('active_true').checked = true;">
+      <?php echo $TEXT['YES']; ?>
+      </a>
+      &nbsp;
+      <input type="radio" name="active" id="active_false" value="0" <?php if($fetch_content['active'] == 0) { echo ' checked="checked"'; } ?> />
+      <a href="#" onclick="document.getElementById('active_false').checked = true;">
+      <?php echo $TEXT['NO']; ?>
+      </a>
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['PUBL_START_DATE']; ?>:</td>
+   <td>
+<?php
+if ($fetch_content['published_when']==0) {
+    $iPublishedWhen = date($jscal_format, strtotime((date('Y-m-d H:i')))+TIMEZONE);
+} else {
+    $iPublishedWhen = date($jscal_format, $fetch_content['published_when']+TIMEZONE);
+}
+?>
+   <input type="text" id="publishdate" name="publishdate" value="<?php echo $iPublishedWhen;?>" style="width: 120px;" />
+   <img src="<?php echo THEME_URL ?>/images/clock_16.png" id="publishdate_trigger" style="cursor: pointer;" title="<?php echo $TEXT['CALENDAR']; ?>" alt="<?php echo $TEXT['CALENDAR']; ?>" onmouseover="this.style.background='lightgrey';" onmouseout="this.style.background=''" />
+   <img src="<?php echo THEME_URL ?>/images/clock_del_16.png" style="cursor: pointer;" title="<?php echo $TEXT['DELETE_DATE']; ?>" alt="<?php echo $TEXT['DELETE_DATE']; ?>" onmouseover="this.style.background='lightgrey';" onmouseout="this.style.background=''" onclick="document.modify.publishdate.value=''" />
+   </td>
+</tr>
+<tr>
+   <td><?php echo $TEXT['PUBL_END_DATE']; ?>:</td>
+   <td>
+<?php
+if ($fetch_content['published_until']==0) {
+    $iPublishedUntil = '';
+} else {
+    $iPublishedUntil = date($jscal_format, $fetch_content['published_until']+TIMEZONE);
+}
+?>
+   <input type="text" id="enddate" name="enddate" value="<?php echo $iPublishedUntil;?>" style="width: 120px;" />
+   <img src="<?php echo THEME_URL ?>/images/clock_16.png" id="enddate_trigger" style="cursor: pointer;" title="<?php echo $TEXT['CALENDAR']; ?>" alt="<?php echo $TEXT['CALENDAR']; ?>" onmouseover="this.style.background='lightgrey';" onmouseout="this.style.background=''" />
+   <img src="<?php echo THEME_URL ?>/images/clock_del_16.png" style="cursor: pointer;" title="<?php echo $TEXT['DELETE_DATE']; ?>" alt="<?php echo $TEXT['DELETE_DATE']; ?>" onmouseover="this.style.background='lightgrey';" onmouseout="this.style.background=''" onclick="document.modify.enddate.value=''" />
+   </td>
+</tr>
+</table>
+
+<table class="row_a news">
+<tr>
+   <td valign="top"><?php echo $TEXT['SHORT']; ?>:</td>
+</tr>
+<tr>
+   <td>
+<?php
+      $contentShort = $fetch_content['content_short'];
+      $contentLong = $fetch_content['content_long'];
+      $sFilterApi = WB_PATH.'/modules/output_filter/OutputFilterApi.php';
+      if (is_readable($sFilterApi)) {
+          require_once($sFilterApi);
+          $contentShort = OutputFilterApi('ReplaceSysvar', $contentShort);
+          $contentLong  = OutputFilterApi('ReplaceSysvar', $contentLong);
+      }
+      show_wysiwyg_editor("short","short",htmlspecialchars($contentShort),"100%","200px");
+   ?>
+   </td>
+</tr>
+<tr>
+   <td valign="top"><?php echo $TEXT['LONG']; ?>:</td>
+</tr>
+<tr>
+   <td>
+<?php
+      show_wysiwyg_editor("long","long",htmlspecialchars($contentLong),"100%","650px");
+?>
+   </td>
+</tr>
+</table>
+
+<table class="news">
+<tr>
+   <td align="left">
+      <input name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="width: 100px; margin-top: 5px;" />
+   </td>
+   <td align="right">
+      <input type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="javascript: window.location = '<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page_id; ?>';" style="width: 100px; margin-top: 5px;" />
+   </td>
+</tr>
+</table>
+</form>
+
+<script type="text/javascript">
+   Calendar.setup(
+      {
+         inputField  : "publishdate",
+         ifFormat    : "<?php echo $jscal_ifformat ?>",
+         button      : "publishdate_trigger",
+         firstDay    : <?php echo $jscal_firstday ?>,
+         <?php if(isset($jscal_use_time) && $jscal_use_time==TRUE)
+            { ?>
+            showsTime   : "true",
+            timeFormat  : "24",
+         <?php
+            } ?>
+         date        : "<?php echo $jscal_today ?>",
+         range       : [1970, 2037],
+         step        : 1
+      }
+   );
+   Calendar.setup(
+      {
+         inputField  : "enddate",
+         ifFormat    : "<?php echo $jscal_ifformat ?>",
+         button      : "enddate_trigger",
+         firstDay    : <?php echo $jscal_firstday ?>,
+         <?php if(isset($jscal_use_time) && $jscal_use_time==TRUE)
+            { ?>
+            showsTime   : "true",
+            timeFormat  : "24",
+         <?php
+            } ?>
+         date        : "<?php echo $jscal_today ?>",
+         range       : [1970, 2037],
+         step        : 1
+      }
+   );
+</script>
+
+<br />
+
+<h2><?php echo $TEXT['MODIFY'].'/'.$TEXT['DELETE'].' '.$TEXT['COMMENT']; ?></h2>
+
+<?php
+
+// Loop through existing posts
+$query_comments = $database->query("SELECT * FROM `".TABLE_PREFIX."mod_news_comments` WHERE section_id = '$section_id' AND post_id = '$post_id' ORDER BY commented_when DESC");
+if($query_comments->numRows() > 0) {
+   $row = 'a';
+   $pid = $admin->getIDKEY($post_id);
+   ?>
+   <table class="news">
+<?php
+   while($comment = $query_comments->fetchRow()) {
+      $cid = $admin->getIDKEY($comment['comment_id']);
+      ?>
+      <tr class="row_<?php echo $row; ?>" >
+         <td width="20" style="padding-left: 5px;">
+            <a href="<?php echo WB_URL; ?>/modules/news/modify_comment.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php
+               echo $section_id; ?>&amp;comment_id=<?php echo $cid; ?>" title="<?php echo $TEXT['MODIFY']; ?>">
+               <img src="<?php echo THEME_URL; ?>/images/modify_16.png" border="0" alt="^" />
+            </a>
+         </td>
+         <td>
+            <a href="<?php echo WB_URL; ?>/modules/news/modify_comment.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php
+               echo $section_id; ?>&amp;comment_id=<?php echo $cid; ?>">
+               <?php echo $comment['title']; ?>
+            </a>
+         </td>
+         <td width="20">
+            <a href="javascript: confirm_link('<?php echo $TEXT['ARE_YOU_SURE']; ?>', '<?php
+               echo WB_URL; ?>/modules/news/delete_comment.php?page_id=<?php echo $page_id; ?>&amp;section_id=<?php
+               echo $section_id; ?>&amp;post_id=<?php echo $pid; ?>&amp;comment_id=<?php echo $cid; ?>');" title="<?php
+               echo $TEXT['DELETE']; ?>">
+               <img src="<?php echo THEME_URL; ?>/images/delete_16.png" border="0" alt="X" />
+            </a>
+         </td>
+      </tr>
+      <?php
+      // Alternate row color
+      if($row == 'a') {
+         $row = 'b';
+      } else {
+         $row = 'a';
+      }
+   }
+   ?>
+   </table>
+   <?php
+} else {
+   echo $TEXT['NONE_FOUND'];
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/modify_post.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/modify_settings.php
===================================================================
--- trunk/modules/news/modify_settings.php	(nonexistent)
+++ trunk/modules/news/modify_settings.php	(revision 2)
@@ -0,0 +1,219 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// suppress to print the header, so no new FTAN will be set
+//$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = false;
+// show the info banner
+$print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+if(!$admin->checkFTAN('GET')) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// include core functions of WB 2.7 to edit the optional module CSS files (frontend.css, backend.css)
+@include_once(WB_PATH .'/framework/module.functions.php');
+
+// check if module language file exists for the language set by the user (e.g. DE, EN)
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+
+// Get header and footer
+$sql  = 'SELECT * FROM '.TABLE_PREFIX.'mod_news_settings '
+      . 'WHERE section_id = '.$database->escapeString($section_id);
+$query_content = $database->query( $sql );
+$fetch_content = $query_content->fetchRow( MYSQLI_ASSOC );
+
+// Set raw html <'s and >'s to be replace by friendly html code
+$raw = array('<', '>');
+$friendly = array('&lt;', '&gt;');
+?>
+<?php
+if ($print_info_banner) {
+?>
+    </div><!--end class="block-outer" -->
+<?php } ?>
+<h2><?php echo $MOD_NEWS['SETTINGS']; ?></h2>
+<?php
+// include the button to edit the optional module CSS files (function added with WB 2.7)
+// Note: CSS styles for the button are defined in backend.css (div class="mod_moduledirectory_edit_css")
+// Place this call outside of any <form></form> construct!!!
+?>
+<div class="news">
+<?php
+if(function_exists('edit_module_css')){ edit_module_css('news');}
+?><form name="modify" action="<?php echo WB_URL; ?>/modules/news/save_settings.php" method="post" style="margin: 0;">
+
+   <input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+   <input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+   <?php echo $admin->getFTAN(); ?>
+<div class="news block-outer">
+    <table class="news">
+      <caption class="news-header">
+      <?php echo $HEADING['GENERAL_SETTINGS']; ?>
+      </caption>
+      </tbody>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['HEADER']; ?>:</td>
+         <td class="setting_value">
+            <textarea name="header" rows="10" cols="1" style="width: 98%; height: 80px;"><?php echo ($fetch_content['header']); ?></textarea>
+         </td>
+      </tr>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['POST'].' '.$TEXT['LOOP']; ?>:</td>
+         <td class="setting_value">
+            <textarea name="post_loop" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo ($fetch_content['post_loop']); ?></textarea>
+         </td>
+      </tr>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['FOOTER']; ?>:</td>
+         <td class="setting_value">
+            <textarea name="footer" rows="10" cols="1" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($fetch_content['footer'])); ?></textarea>
+         </td>
+      </tr>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['POST_HEADER']; ?>:</td>
+         <td class="setting_value">
+            <textarea name="post_header" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo str_replace($raw, $friendly, ($fetch_content['post_header'])); ?></textarea>
+         </td>
+      </tr>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['POST_FOOTER']; ?>:</td>
+         <td class="setting_value">
+            <textarea name="post_footer" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo str_replace($raw, $friendly, ($fetch_content['post_footer'])); ?></textarea>
+         </td>
+      </tr>
+      <tr>
+         <td class="setting_name"><?php echo $TEXT['POSTS_PER_PAGE']; ?>:</td>
+         <td class="setting_value">
+            <select name="posts_per_page">
+               <option value="0"><?php echo $TEXT['UNLIMITED']; ?></option>
+               <?php
+               for($i = 1; $i <= 20; $i++) {
+                  if($fetch_content['posts_per_page'] == ($i*5)) { $selected = ' selected="selected"'; } else { $selected = ''; }
+                  echo '<option value="'.($i*5).'"'.$selected.'>'.($i*5).'</option>';
+               }
+               ?>
+            </select>
+         </td>
+      </tr>
+      </tbody>
+    </table>
+    </div>
+    <div class="news block-outer" style="margin-top: 2.225em;">
+     <table class="news file-ext">
+      <caption class="news-header">
+      <?php echo $TEXT['COMMENTS']; ?>
+      </caption>
+        <tbody>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['COMMENTING']; ?>:</td>
+           <td class="setting_value">
+              <select name="commenting">
+                 <option value="none"><?php echo $TEXT['DISABLED']; ?></option>
+                 <option value="public" <?php if($fetch_content['commenting'] == 'public') { echo ' selected="selected"'; } ?>><?php echo $TEXT['PUBLIC']; ?></option>
+                 <option value="private" <?php if($fetch_content['commenting'] == 'private') { echo 'selected="selected"'; } ?>><?php echo $TEXT['PRIVATE']; ?></option>
+              </select>
+           </td>
+        </tr>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['CAPTCHA_VERIFICATION']; ?>:</td>
+           <td>
+              <input type="radio" name="use_captcha" id="use_captcha_true" value="1"<?php if($fetch_content['use_captcha'] == true) { echo ' checked="checked"'; } ?> />
+              <label for="use_captcha_true"><?php echo $TEXT['ENABLED']; ?></label>
+              <input type="radio" name="use_captcha" id="use_captcha_false" value="0"<?php if($fetch_content['use_captcha'] == false) { echo ' checked="checked"'; } ?> />
+              <label for="use_captcha_false"><?php echo $TEXT['DISABLED']; ?></label>
+           </td>
+        </tr>
+        <?php if(extension_loaded('gd') AND function_exists('imageCreateFromJpeg')) { /* Make's sure GD library is installed */ ?>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['RESIZE_IMAGE_TO']; ?>:</td>
+           <td class="setting_value">
+              <select name="resize" >
+                 <option value="0"><?php echo $TEXT['NONE']; ?></option>
+                 <?php
+                 $SIZES['50']  = '50x50px';
+                 $SIZES['75']  = '75x75px';
+                 $SIZES['100'] = '100x100px';
+                 $SIZES['125'] = '125x125px';
+                 $SIZES['150'] = '150x150px';
+                 foreach($SIZES AS $size => $size_name) {
+                    if($fetch_content['resize'] == $size) { $selected = ' selected="selected"'; } else { $selected = ''; }
+                    echo '<option value="'.$size.'"'.$selected.'>'.$size_name.'</option>';
+                 }
+                 ?>
+              </select>
+           </td>
+        </tr>
+        <?php } ?>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['COMMENTS'].' '.$TEXT['HEADER']; ?>:</td>
+           <td class="setting_value">
+              <textarea name="comments_header" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo str_replace($raw, $friendly, ($fetch_content['comments_header'])); ?></textarea>
+           </td>
+        </tr>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['COMMENTS'].' '.$TEXT['LOOP']; ?>:</td>
+           <td class="setting_value">
+              <textarea name="comments_loop" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo str_replace($raw, $friendly, ($fetch_content['comments_loop'])); ?></textarea>
+           </td>
+        </tr>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['COMMENTS'].' '.$TEXT['FOOTER']; ?>:</td>
+           <td class="setting_value">
+              <textarea name="comments_footer" rows="10" cols="1" style="width: 98%; height: 60px;"><?php echo str_replace($raw, $friendly, ($fetch_content['comments_footer'])); ?></textarea>
+           </td>
+        </tr>
+        <tr>
+           <td class="setting_name"><?php echo $TEXT['COMMENTS'].' '.$TEXT['PAGE']; ?>:</td>
+           <td class="setting_value">
+              <textarea name="comments_page" rows="10" cols="1" style="width: 98%; height: 80px;"><?php echo str_replace($raw, $friendly, ($fetch_content['comments_page'])); ?></textarea>
+           </td>
+        </tr>
+        </tbody>
+     </table>
+    </div><!--  -->
+    <table class="news">
+      <tbody>
+      <tr>
+         <td class="left">
+            <input name="save" type="submit" value="<?php echo $TEXT['SAVE']; ?>" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 25%; margin-top: 5px;" />
+         </td>
+         <td class="right">
+            <input type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="window.location = '<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page_id; ?>';" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" style="width: 25%; margin-top: 5px;" />
+         </td>
+      </tr>
+      </tbody>
+    </table>
+</form>
+</div><!--end class="news" -->
+
+<?php
+if ($print_info_banner) { ?>
+    </div><!--end class="block-outer" -->
+<?php
+}
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/modify_settings.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/move_down.php
===================================================================
--- trunk/modules/news/move_down.php	(nonexistent)
+++ trunk/modules/news/move_down.php	(revision 2)
@@ -0,0 +1,53 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+// Get id
+$pid = isset($aRequestVars['post_id']) ?$admin->checkIDKEY('post_id', false, 'GET'):0;
+$gid = isset($aRequestVars['group_id']) ?$admin->checkIDKEY('group_id', false, 'GET'):0;
+if (!$pid) {
+    if (!$gid) {
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $backlink);
+        exit();
+    } else {
+        $id = $gid;
+        $id_field = 'group_id';
+        $table = TABLE_PREFIX.'mod_news_groups';
+    }
+} else {
+    $id = $pid;
+    $id_field = 'post_id';
+    $table = TABLE_PREFIX.'mod_news_posts';
+}
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+
+// Create new order object an reorder
+$order = new order($table, 'position', $id_field, 'section_id');
+if($order->move_down($id)) {
+    $admin->print_success($TEXT['SUCCESS'], $backlink);
+} else {
+    $admin->print_error($TEXT['ERROR'], $backlink);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/move_down.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/move_to.php
===================================================================
--- trunk/modules/news/move_to.php	(nonexistent)
+++ trunk/modules/news/move_to.php	(revision 2)
@@ -0,0 +1,49 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         JsAdmin
+ * @author          WebsiteBaker Project, modified by Swen Uth for Website Baker 2.7
+ * @copyright       (C) 2006, Stepan Riha
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to prevent this file from being accessed directly
+if(defined('WB_PATH') == false) { exit('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+    $aJsonRespond['modules'] = $aRequestVars['module'];
+    $aJsonRespond['success'] = true;
+    $aJsonRespond['modules_dir'] = '/modules/'.$aRequestVars['module'];
+
+// Get id
+    if (isset($aRequestVars['post_id'])){
+        $table = TABLE_PREFIX.'mod_news_posts';
+        $id = (int)$aRequestVars['move_id'];
+        $id_field = 'post_id';
+        $common_field = 'section_id';
+        $sFieldOrderName = 'position';
+        $aJsonRespond['message'] = 'Activity position '.$id.' successfully changed';
+    } else
+    if (isset($aRequestVars['group_id'])){
+        $table = TABLE_PREFIX.'mod_news_groups';
+        $id = (int)$aRequestVars['move_id'];
+        $id_field = 'group_id';
+        $common_field = 'section_id';
+        $sFieldOrderName = 'position';
+        $aJsonRespond['message'] = 'Activity position '.$id.' successfully changed';
+    } else {
+      $aJsonRespond['message'] = 'ajax operation failed';
+      $aJsonRespond['success'] = false;
+      exit (json_encode($aJsonRespond));
+    }
+

Property changes on: trunk/modules/news/move_to.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/move_up.php
===================================================================
--- trunk/modules/news/move_up.php	(nonexistent)
+++ trunk/modules/news/move_up.php	(revision 2)
@@ -0,0 +1,52 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+// Get id
+$pid = isset($aRequestVars['post_id']) ?$admin->checkIDKEY('post_id', false, 'GET'):0;
+$gid = isset($aRequestVars['group_id']) ?$admin->checkIDKEY('group_id', false, 'GET'):0;
+if (!$pid) {
+    if (!$gid) {
+        $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], $backlink);
+        exit();
+    } else {
+        $id = $gid;
+        $id_field = 'group_id';
+        $table = TABLE_PREFIX.'mod_news_groups';
+    }
+} else {
+    $id = $pid;
+    $id_field = 'post_id';
+    $table = TABLE_PREFIX.'mod_news_posts';
+}
+
+// Include the ordering class
+require(WB_PATH.'/framework/class.order.php');
+// Create new order object an reorder
+$order = new order($table, 'position', $id_field, 'section_id');
+if($order->move_up($id)) {
+    $admin->print_success($TEXT['SUCCESS'], $backlink);
+} else {
+    $admin->print_error($TEXT['ERROR'], $backlink);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/move_up.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/reorgPosition.php
===================================================================
--- trunk/modules/news/reorgPosition.php	(nonexistent)
+++ trunk/modules/news/reorgPosition.php	(revision 2)
@@ -0,0 +1,47 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        modules
+ * @package         news
+ * @subpackage      reorgPosition
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+ 
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+require(WB_PATH.'/modules/admin.php');
+$backlink = ADMIN_URL.'/pages/modify.php?page_id='.(int)$page_id;
+if(!$admin->checkFTAN('GET')) {
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+if ( !class_exists('order', false) ) { require(WB_PATH.'/framework/class.order.php'); }
+$news   = new order(TABLE_PREFIX.'mod_news_posts', 'position', 'post_id', 'section_id');
+$news->clean( $section_id );
+
+$groups = new order(TABLE_PREFIX.'mod_news_groups', 'position', 'group_id', 'section_id');
+$groups->clean( $section_id );
+
+$admin->print_success($TEXT['SUCCESS'], $backlink );
+

Property changes on: trunk/modules/news/reorgPosition.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/rss.php
===================================================================
--- trunk/modules/news/rss.php	(nonexistent)
+++ trunk/modules/news/rss.php	(revision 2)
@@ -0,0 +1,105 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Check that GET values have been supplied
+if(isset($_GET['page_id']) && is_numeric($_GET['page_id'])) {
+    $page_id = intval($_GET['page_id']);
+} else {
+    // something is gone wrong, send error header
+    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
+    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
+    if (preg_match('/fcgi/i', php_sapi_name())) {
+        header("Status: 204 No Content"); // RFC7231, Section 6.3.5
+    } else {
+        header("HTTP/1.0 204  No Content");
+    }
+    flush();
+    exit;
+}
+
+if(isset($_GET['group_id']) && is_numeric($_GET['group_id'])) {
+    $group_id = $_GET['group_id'];
+    define('GROUP_ID', $group_id);
+}
+
+// Include WB files
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('frontend')) { require(WB_PATH.'/framework/class.frontend.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) { $wb = new frontend(); }
+$wb->page_id = $page_id;
+$wb->get_page_details();
+$wb->get_website_settings();
+
+//checkout if a charset is defined otherwise use UTF-8
+if(defined('DEFAULT_CHARSET')) {
+    $charset=DEFAULT_CHARSET;
+} else {
+    $charset='utf-8';
+}
+
+// Sending XML header
+header("Content-type: text/xml; charset=$charset" );
+
+// Header info
+// Required by CSS 2.0
+echo '<?xml version="1.0" encoding="'.$charset.'"?>';
+?>
+<rss version="2.0">
+    <channel>
+        <title><![CDATA[<?php echo PAGE_TITLE; ?>]]></title>
+        <link>http://<?php echo $_SERVER['SERVER_NAME']; ?></link>
+        <description><![CDATA[<?php echo PAGE_DESCRIPTION; ?>]]></description>
+<?php
+// Optional header info
+?>
+        <language><?php echo strtolower(DEFAULT_LANGUAGE); ?></language>
+        <copyright><?php $thedate = date('Y'); $websitetitle = WEBSITE_TITLE; echo "Copyright {$thedate}, {$websitetitle}"; ?></copyright>
+        <managingEditor><?php echo SERVER_EMAIL; ?></managingEditor>
+        <webMaster><?php echo SERVER_EMAIL; ?></webMaster>
+        <category><?php echo WEBSITE_TITLE; ?></category>
+        <generator>WebsiteBaker Content Management System</generator>
+<?php
+// Get news items from database
+$time = time();
+//Query
+    $sql='SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+        .'WHERE `page_id`='.(int)$page_id.' '
+        .       (isset($group_id) ? 'AND `group_id`='.(int)$group_id.' ' : '')
+        .       'AND `active`=1 '
+        .       'AND (`published_when`  = 0 OR `published_when` <= '.$time.') '
+        .       'AND (`published_until` = 0 OR `published_until` >= '.$time.') '
+        .'ORDER BY posted_when DESC';
+
+$result = $database->query($sql);
+
+//Generating the news items
+while($item = $result->fetchRow( MYSQLI_ASSOC )){
+    $description = stripslashes($item["content_short"]);
+    $description = OutputFilterApi('WbLink|ReplaceSysvar', $description);
+?>
+    <item>
+        <title><![CDATA[<?php echo stripslashes($item["title"]); ?>]]></title>
+        <description><![CDATA[<?php echo $description; ?>]]></description>
+        <link><?php echo WB_URL.PAGES_DIRECTORY.$item["link"].PAGE_EXTENSION; ?></link>
+        <pubDate><?PHP echo date('r', $item["published_when"]); ?></pubDate>
+        <guid><?php echo WB_URL.PAGES_DIRECTORY.$item["link"].PAGE_EXTENSION; ?></guid>
+    </item>
+<?php } ?>
+    </channel>
+</rss>
\ No newline at end of file

Property changes on: trunk/modules/news/rss.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/save_comment.php
===================================================================
--- trunk/modules/news/save_comment.php	(nonexistent)
+++ trunk/modules/news/save_comment.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin')) { require(WB_PATH.'/framework/class.admin.php');  }
+$requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+$aRequestVars  = (isset(${$requestMethod}) ? ${$requestMethod} : null);
+
+// Get id
+if(!isset($_POST['comment_id']) || !is_numeric($_POST['comment_id']) || !isset($_POST['post_id']) || !is_numeric($_POST['post_id']))
+{
+    header("Location: ".ADMIN_URL."/pages/index.php");
+    exit( 0 );
+}
+else
+{
+    $comment_id = (int)$_POST['comment_id'];
+}
+
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// show the info banner
+// $print_info_banner = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+}
+
+$id = intval($admin->getIDKEY($comment_id));
+
+// Validate all fields
+if($admin->get_post('title') == '' AND $admin->get_post('comment') == '')
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_FILL_IN_ALL'], WB_URL.'/modules/news/modify_comment.php?page_id='.$page_id.'&section_id='.$section_id.'comment_id='.$id);
+}
+else
+{
+    $title = strip_tags($admin->get_post('title'));
+    $comment = strip_tags($admin->get_post('comment'));
+    $post_id = $admin->getIDKEY($admin->get_post('post_id'));
+
+    // do not allow droplets in user input!
+    $title = $admin->StripCodeFromText( $title);
+    $comment = $admin->StripCodeFromText( $comment);
+}
+
+// Update row
+$sql  = 'UPDATE '.TABLE_PREFIX.'mod_news_comments SET '
+      . '`title`=\''.$database->escapeString($title).'\', '
+      . '`comment`=\''.$database->escapeString($comment).'\' '
+      . ' WHERE `comment_id`=\''.$database->escapeString($comment_id).'\'';
+$database->query($sql);
+
+$admin->print_header();
+// Check if there is a db error, otherwise say successful
+if($database->is_error())
+{
+    $admin->print_error($database->get_error(), WB_URL.'/modules/news/modify_comment.php?page_id='.$page_id.'&section_id='.$section_id.'&comment_id='.$id);
+}
+else
+{
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/save_comment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/save_group.php
===================================================================
--- trunk/modules/news/save_group.php	(nonexistent)
+++ trunk/modules/news/save_group.php	(revision 2)
@@ -0,0 +1,139 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// Get id
+//if(!isset($_POST['group_id']) || !is_numeric($_POST['group_id']))
+//{
+//   header("Location: ".ADMIN_URL."/pages/index.php");
+//   exit( 0 );
+//}
+//else
+//{
+//   $group_id = $_POST['group_id'];
+//}
+
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+$group_id = intval(isset(${$requestMethod}['group_id']) 
+                  ? ${$requestMethod}['group_id'] 
+                  : (isset($group_id) ? $group_id : 0)
+           );
+if (!$admin->checkFTAN())
+{
+   $admin->print_header();
+   $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+$admin->print_header();
+
+// Include WB functions file
+require(WB_PATH.'/framework/functions.php');
+
+// Validate all fields
+if($admin->get_post('title') == '')
+{
+   $admin->print_error($MESSAGE['GENERIC_FILL_IN_ALL'], WB_URL.'/modules/news/modify_group.php?page_id='.$page_id.'&section_id='.$section_id.'&group_id='.$admin->getIDKEY($group_id));
+}
+else
+{
+   $title = $admin->StripCodeFromText($admin->get_post('title'));
+   $active = intval($admin->get_post('active'));
+}
+
+// Update row
+$sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_groups` SET '
+      . '`title`=\''.$database->escapeString($title).'\', '
+      . '`active`=\''.$database->escapeString($active).'\' '
+      . 'WHERE `group_id`='.$database->escapeString($group_id);
+$database->query($sql);
+
+// Check if the user uploaded an image or wants to delete one
+if(isset($_FILES['image']['tmp_name']) AND $_FILES['image']['tmp_name'] != '') {
+   // Get real filename and set new filename
+   $filename = $_FILES['image']['name'];
+   $file_image_type = $_FILES['image']['type'];
+   $new_filename = WB_PATH.MEDIA_DIRECTORY.'/.news/image'.$group_id.'.jpg';
+   // Make sure the image is a jpg file
+   $file4=substr($filename, -4, 4);
+
+   switch ($file_image_type) :
+      case 'image/jpeg' :
+      case 'image/pjpeg' :
+      case 'image/png' :
+      case 'image/x-png' :
+      break;
+      default:
+         $admin->print_error($MESSAGE['GENERIC_FILE_TYPE'].' JPG (JPEG) or PNG',ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+      break;
+   endswitch;
+
+/*
+   if(($file4 != '.jpg')and($file4 != '.JPG')and($file4 != '.png')and($file4 != '.PNG') and ($file4 !='jpeg') and ($file4 != 'JPEG'))
+    {
+      $admin->print_error($MESSAGE['GENERIC']['FILE_TYPE'].' JPG (JPEG) or PNG',ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+   } elseif(
+   (($_FILES['image']['type']) != 'image/jpeg' AND mime_content_type($_FILES['image']['tmp_name']) != 'image/jpg')
+   and
+   (($_FILES['image']['type']) != 'image/png' AND mime_content_type($_FILES['image']['tmp_name']) != 'image/png')
+   ){
+      $admin->print_error($MESSAGE['GENERIC']['FILE_TYPE'].' JPG (JPEG) or PNG',ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+   }
+*/
+
+   // Make sure the target directory exists
+   make_dir(WB_PATH.MEDIA_DIRECTORY.'/.news');
+   // Upload image
+   move_uploaded_file($_FILES['image']['tmp_name'], $new_filename);
+   // Check if we need to create a thumb
+   $query_settings = $database->query("SELECT resize FROM ".TABLE_PREFIX."mod_news_settings WHERE section_id = '$section_id'");
+   $fetch_settings = $query_settings->fetchRow();
+   $resize = $fetch_settings['resize'];
+   if($resize != 0)
+    {
+      // Resize the image
+      $thumb_location = WB_PATH.MEDIA_DIRECTORY.'/.news/thumb'.$group_id.'.jpg';
+      if(make_thumb($new_filename, $thumb_location, $resize))
+        {
+         // Delete the actual image and replace with the resized version
+         unlink($new_filename);
+         rename($thumb_location, $new_filename);
+      }
+   }
+}
+if(isset($_POST['delete_image']) AND $_POST['delete_image'] != '')
+{
+   // Try unlinking image
+   if(file_exists(WB_PATH.MEDIA_DIRECTORY.'/.news/image'.$group_id.'.jpg'))
+    {
+      unlink(WB_PATH.MEDIA_DIRECTORY.'/.news/image'.$group_id.'.jpg');
+   }
+}
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+   $admin->print_error($database->get_error(), WB_URL.'/modules/news/modify_group.php?page_id='.$page_id.'&section_id='.$section_id.'&group_id='.$admin->getIDKEY($group_id));
+} else {
+   $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/save_group.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/save_post.php
===================================================================
--- trunk/modules/news/save_post.php	(nonexistent)
+++ trunk/modules/news/save_post.php	(revision 2)
@@ -0,0 +1,179 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+   function createNewsAccessFile($newLink, $oldLink, $page_id, $section_id, $post_id)
+   {
+      global $admin, $MESSAGE;
+      $sPagesPath = WB_PATH.PAGES_DIRECTORY;
+      $sPostsPath = $sPagesPath.'/posts';
+   // create /posts/ - directory if not exists
+      if(!file_exists($sPostsPath)) {
+         if(is_writable($sPagesPath)) {
+            make_dir(WB_PATH.PAGES_DIRECTORY.'/posts/');
+         }else {
+            $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+         }
+      }
+   // check if /posts/ - dir is writable
+      if(!is_writable($sPostsPath.'/')) {
+         $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+      }
+/*
+   // delete old accessfile if link has changed
+    if (($newLink != $oldLink) && (is_writable($sPostsPath.$oldLink.PAGE_EXTENSION))) {
+       if (!unlink($sPostsPath.$oldLink.PAGE_EXTENSION)) {
+          $admin->print_error($MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'].' - '.$oldLink);
+       }
+    }
+*/
+    // delete old accessfile if link has changed
+    if (($newLink != $oldLink) && (is_writable($sPagesPath.$oldLink.PAGE_EXTENSION))) {
+        if (!unlink($sPagesPath.$oldLink.PAGE_EXTENSION)) {
+          $admin->print_error($MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'].' - '.$oldLink);
+        }
+    }
+   // all ok, now create new accessfile
+      $newFile = $sPagesPath.$newLink.PAGE_EXTENSION;
+      // $backSteps = preg_replace('/^'.preg_quote(WB_PATH).'/', '', $sPostsPath);
+      $backSteps = preg_replace('@^'.preg_quote(WB_PATH).'@', '', $sPostsPath);
+      $backSteps = str_repeat( '../', substr_count($backSteps, '/'));
+      $content =
+         '<?php'."\n".
+         '// *** This file is generated by WebsiteBaker Ver.'.WB_VERSION."\n".
+         '// *** Creation date: '.date('c')."\n".
+         '// *** Do not modify this file manually'."\n".
+         '// *** WB will rebuild this file from time to time!!'."\n".
+         '// *************************************************'."\n".
+         "\t".'$page_id      = '.$page_id.';'."\n".
+         "\t".'$section_id   = '.$section_id.';'."\n".
+         "\t".'$post_id      = '.$post_id.';'."\n".
+         "\t".'$post_section = '.$section_id.';'."\n".
+//         "\t".'define(\'POST_SECTION\', '.$section_id.');'."\n".
+//         "\t".'define(\'POST_ID\',      '.$post_id.');'."\n".
+         "\t".'require(\''.$backSteps.'index.php\');'."\n".
+         '// *************************************************'."\n";
+      if( file_put_contents($newFile, $content) !== false ) {
+      // Chmod the file
+         change_mode($newFile);
+      }else {
+         $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'],ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+         // $admin->print_error($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'].': '.$newFile);
+
+      }
+   } // end of function createNewsAccessFile
+/* ************************************************************************** */
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+   require_once(WB_PATH."/include/jscalendar/jscalendar-functions.php");
+// Get post_id
+   if(!isset($_POST['post_id']) OR !is_numeric($_POST['post_id'])) {
+      header("Location: ".ADMIN_URL."/pages/index.php");
+      exit( 0 );
+   }else {
+      $post_id = intval($_POST['post_id']);
+   }
+
+   $admin_header = false;
+   // Tells script to update when this page was last updated
+   $update_when_modified = true;
+   // Include WB admin wrapper script
+   require(WB_PATH.'/modules/admin.php');
+
+   if (!$admin->checkFTAN()) {
+      $admin->print_header();
+      $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'],
+                          ADMIN_URL.'/pages/modify.php?page_id='.$page_id );
+   }
+   $admin->print_header();
+
+// Validate all fields
+   if($admin->get_post('title') == '' AND $admin->get_post('url') == '') {
+        $recallUrl = WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.
+                   '&section_id='.$section_id.'&post_id='.$admin->getIDKEY($post_id);
+      $admin->print_error($MESSAGE['GENERIC_FILL_IN_ALL'], $recallUrl);
+   }else {
+      $title      = $admin->StripCodeFromText($admin->get_post('title'));
+      $short      = $admin->get_post('short');
+      $long       = $admin->get_post('long');
+      $commenting = $database->escapeString($admin->get_post('commenting'));
+      $active     = intval($admin->get_post('active'));
+      $old_link   = $admin->get_post('link');
+      $group_id   = intval($admin->get_post('group'));
+   }
+/*
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $searchfor = '@(<[^>]*=\s*")('.preg_quote($sMediaUrl).')([^">]*".*>)@siU';
+    $short = preg_replace($searchfor, '$1{SYSVAR:MEDIA_REL}$3', $short);
+    $long  = preg_replace($searchfor, '$1{SYSVAR:MEDIA_REL}$3', $long);
+*/
+    $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+    $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $aPatterns = array(
+        '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+        '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+    );
+    $aReplacements = array(
+        '\1'.$sDocumentRootUrl.'/\3',
+        '$1{SYSVAR:MEDIA_REL}$3'
+    );
+    $short = preg_replace($aPatterns, $aReplacements, $short);
+    $long = preg_replace($aPatterns, $aReplacements, $long);
+/*
+// Get page link URL
+    $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` WHERE `page_id`='.(int)$page_id;
+*/
+// Get post link URL 
+$sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'mod_news_posts` WHERE `post_id`='.$post_id;
+$oldLink = $database->get_one($sql);
+
+// Include WB functions file
+    require(WB_PATH.'/framework/functions.php');
+// Work-out what the link should be
+    $newLink = '/posts/'.page_filename($title).PAGE_SPACER.$post_id;
+// create new accessfile
+    createNewsAccessFile($newLink, $oldLink, $page_id, $section_id, $post_id);
+$now = time();
+// get publisedwhen and publisheduntil
+    $publishedwhen = jscalendar_to_timestamp($admin->get_post('publishdate'));
+    if($publishedwhen == '' || $publishedwhen < 1) { $publishedwhen=0; }
+    $publisheduntil = jscalendar_to_timestamp($admin->get_post('enddate'), $publishedwhen);
+    if($publisheduntil == '' || $publisheduntil < 1) { $publisheduntil=0; }
+// Update row
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` SET '
+        . '`group_id`='.(int)$group_id.', '
+        . '`title`=\''.$database->escapeString($title).'\', '
+        . '`link`=\''.$database->escapeString($newLink).'\', '
+        . '`content_short`=\''.$database->escapeString($short).'\', '
+        . '`content_long`=\''.$database->escapeString($long).'\', '
+        . '`commenting`=\''.$database->escapeString($commenting).'\', '
+        . '`active`='.$database->escapeString($active).', '
+        . '`published_when`='.(int)$publishedwhen.', '
+        . '`published_until`='.(int)$publisheduntil.', '
+        . '`posted_when`='.$now.', '
+        . '`posted_by`='.(int)$admin->get_user_id().' '
+        . 'WHERE `post_id`='.$database->escapeString($post_id);
+   $database->query($sql);
+// Check if there is a db error, otherwise say successful
+   if($database->is_error()) {
+      $recallUrl = WB_URL.'/modules/news/modify_post.php?page_id='.$page_id.
+                '&section_id='.$section_id.'&post_id='.$admin->getIDKEY($post_id);
+      $admin->print_error($database->get_error(), $recallUrl);
+   }else {
+      $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+   }
+// Print admin footer
+   $admin->print_footer();

Property changes on: trunk/modules/news/save_post.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/save_settings.php
===================================================================
--- trunk/modules/news/save_settings.php	(nonexistent)
+++ trunk/modules/news/save_settings.php	(revision 2)
@@ -0,0 +1,78 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+// Include WB admin wrapper script
+$update_when_modified = true; // Tells script to update when this page was last updated
+$admin_header = false;
+require(WB_PATH.'/modules/admin.php');
+if (!$admin->checkFTAN())
+{
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+$admin->print_header();
+
+// This code removes any <?php tags and adds slashes
+$friendly = array('&lt;', '&gt;', '?php');
+$raw = array('<', '>', '');
+$header = $admin->StripCodeFromText( $_POST['header'] );
+$post_loop = $admin->StripCodeFromText( $_POST['post_loop']);
+$footer = $admin->StripCodeFromText( $_POST['footer']);
+$post_header = $admin->StripCodeFromText( $_POST['post_header']);
+$post_footer = $admin->StripCodeFromText( $_POST['post_footer']);
+$comments_header = $admin->StripCodeFromText( $_POST['comments_header']);
+$comments_loop = $admin->StripCodeFromText( $_POST['comments_loop']);
+$comments_footer = $admin->StripCodeFromText( $_POST['comments_footer']);
+$comments_page = $admin->StripCodeFromText( $_POST['comments_page']);
+$commenting = $_POST['commenting'];
+$posts_per_page = intval($_POST['posts_per_page']);
+$use_captcha = intval($_POST['use_captcha']);
+if(extension_loaded('gd') AND function_exists('imageCreateFromJpeg')) {
+    $resize = $_POST['resize'];
+} else {
+    $resize = '';
+}
+$sql  = 'UPDATE '.TABLE_PREFIX.'mod_news_settings SET '
+      . '`header`=\''.$database->escapeString($header).'\', '
+      . '`post_loop`=\''.$database->escapeString($post_loop).'\', '
+      . '`footer`=\''.$database->escapeString($footer).'\', '
+      . '`posts_per_page`=\''.$database->escapeString($posts_per_page).'\', '
+      . '`post_header`=\''.$database->escapeString($post_header).'\', '
+      . '`post_footer`=\''.$database->escapeString($post_footer).'\', '
+      . '`comments_header`=\''.$database->escapeString($comments_header).'\', '
+      . '`comments_loop`=\''.$database->escapeString($comments_loop).'\', '
+      . '`comments_footer`=\''.$database->escapeString($comments_footer).'\', '
+      . '`comments_page`=\''.$database->escapeString($comments_page).'\', '
+      . '`commenting`=\''.$database->escapeString($commenting).'\', '
+      . '`resize`=\''.$database->escapeString($resize).'\', '
+      . '`use_captcha`=\''.$database->escapeString($use_captcha).'\' '
+      . 'WHERE `section_id`='.$database->escapeString($section_id).' '
+      . '';
+// Update settings
+$database->query($sql);
+
+
+// Check if there is a db error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+} else {
+    $admin->print_success($TEXT['SUCCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/news/save_settings.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/search.php
===================================================================
--- trunk/modules/news/search.php	(nonexistent)
+++ trunk/modules/news/search.php	(revision 2)
@@ -0,0 +1,139 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+function news_search($func_vars) {
+    extract($func_vars, EXTR_PREFIX_ALL, 'func');
+    static $search_sql1 = FALSE;
+    static $search_sql2 = FALSE;
+    static $search_sql3 = FALSE;
+    if(function_exists('search_make_sql_part')) {
+        if($search_sql1===FALSE)
+            $search_sql1 = search_make_sql_part($func_search_url_array, $func_search_match, array('`title`','`content_short`','`content_long`'));
+        if($search_sql2===FALSE)
+            $search_sql2 = search_make_sql_part($func_search_url_array, $func_search_match, array('`title`','`comment`'));
+        if($search_sql3===FALSE)
+            $search_sql3 = search_make_sql_part($func_search_url_array, $func_search_match, array('g.`title`'));
+    } else {
+        $search_sql1 = $search_sql2 = $search_sql3 = '1=1';
+    }
+    // how many lines of excerpt we want to have at most
+    $max_excerpt_num = $func_default_max_excerpt;
+    // do we want excerpt from comments?
+    $excerpt_from_comments = true; // TODO: make this configurable
+    $divider = ".";
+    $result = false;
+
+  if($func_time_limit>0) {
+    $stop_time = time() + $func_time_limit;
+  }
+
+    // fetch all active news-posts (from active groups) in this section.
+    $t = time();
+    $table_posts = TABLE_PREFIX."mod_news_posts";
+    $table_groups = TABLE_PREFIX."mod_news_groups";
+    $query = $func_database->query("
+        SELECT p.post_id, p.title, p.content_short, p.content_long, p.link, p.posted_when, p.posted_by
+        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
+        WHERE p.section_id='$func_section_id' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
+        AND (published_when = '0' OR published_when <= $t) AND (published_until = 0 OR published_until >= $t)
+        ORDER BY p.post_id DESC
+    ");
+    // now call print_excerpt() for every single post
+    if($query->numRows() > 0) {
+        while($res = $query->fetchRow()) {
+            $text = '';
+            // break out if stop-time is reached
+            if(isset($stop_time) && time()>$stop_time) return($result);
+            // fetch content
+            $postquery = $func_database->query("
+                SELECT title, content_short, content_long
+                FROM $table_posts
+                WHERE post_id='{$res['post_id']}' AND $search_sql1
+            ");
+            if($postquery->numRows() > 0) {
+                if($p_res = $postquery->fetchRow()) {
+                    $text = $p_res['title'].$divider.$p_res['content_short'].$divider.$p_res['content_long'].$divider;
+                }
+            }
+            // fetch comments and add to $text
+            if($excerpt_from_comments) {
+                $table = TABLE_PREFIX."mod_news_comments";
+                $commentquery = $func_database->query("
+                    SELECT title, comment
+                    FROM $table
+                    WHERE post_id='{$res['post_id']}' AND $search_sql2
+                    ORDER BY commented_when ASC
+                ");
+                if($commentquery->numRows() > 0) {
+                    while($c_res = $commentquery->fetchRow()) {
+                        // break out if stop-time is reached
+                        if(isset($stop_time) && time()>$stop_time) return($result);
+                        $text .= $c_res['title'].$divider.$c_res['comment'].$divider;
+                    }
+                }
+            }
+            if($text) {
+                $mod_vars = array(
+                    'page_link' => $res['link'], // use direct link to news-item
+                    'page_link_target' => "",
+                    'page_title' => $func_page_title,
+                    'page_description' => $res['title'], // use news-title as description
+                    'page_modified_when' => $res['posted_when'],
+                    'page_modified_by' => $res['posted_by'],
+                    'text' => $text,
+                    'max_excerpt_num' => $max_excerpt_num
+                );
+                if(print_excerpt2($mod_vars, $func_vars)) {
+                    $result = true;
+                }
+            }
+        }
+    }
+    
+    // now fetch group-titles - ignore those without (active) postings
+    $table_groups = TABLE_PREFIX."mod_news_groups";
+    $table_posts = TABLE_PREFIX."mod_news_posts";
+    $query = $func_database->query("
+        SELECT DISTINCT g.title, g.group_id
+        FROM $table_groups AS g INNER JOIN $table_posts AS p ON g.group_id = p.group_id
+        WHERE g.section_id='$func_section_id' AND g.active = '1' AND p.active = '1' AND $search_sql3
+    ");
+    // now call print_excerpt() for every single group, too
+    if($query->numRows() > 0) {
+        while($res = $query->fetchRow()) {
+            // break out if stop-time is reached
+            if(isset($stop_time) && time()>$stop_time) return($result);
+            $mod_vars = array(
+                'page_link' => $func_page_link,
+                'page_link_target' => "&g=".$res['group_id'],
+                'page_title' => $func_page_title,
+                'page_description' => $func_page_description,
+                'page_modified_when' => $func_page_modified_when,
+                'page_modified_by' => $func_page_modified_by,
+                'text' => $res['title'].$divider,
+                'max_excerpt_num' => $max_excerpt_num
+            );
+            if(print_excerpt2($mod_vars, $func_vars)) {
+                $result = true;
+            }
+        }
+    }
+    return $result;
+}

Property changes on: trunk/modules/news/search.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/submit_comment.php
===================================================================
--- trunk/modules/news/submit_comment.php	(nonexistent)
+++ trunk/modules/news/submit_comment.php	(revision 2)
@@ -0,0 +1,158 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Include config file
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('wb')) { require(WB_PATH.'/framework/class.wb.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof wb)) { $wb = new wb(); }
+
+    $requestMethod = '_'.strtoupper($_SERVER['REQUEST_METHOD']);
+    $aRequestVars  = (isset(${$requestMethod}) ? ${$requestMethod} : null);
+// Get page id
+    $page_id = intval(isset($aRequestVars['page_id'])) ? $aRequestVars['page_id'] : (isset($page_id) ? intval($page_id) : 0);
+// Get post_id
+    $post_id = (intval(isset($aRequestVars['post_id'])) ? $aRequestVars['post_id'] : (isset($post_id) ? intval($post_id) : 0));
+// Get section id if there is one
+    $section_id = intval(isset($aRequestVars['section_id'])) ? $aRequestVars['section_id'] : (isset($section_id) ? intval($section_id) : 0);
+     $_SESSION['message']=null;
+    if (!$wb->checkFTAN())
+    {
+        $_SESSION['message'][] = ($MESSAGE['GENERIC_SECURITY_ACCESS']);
+        header("Location: ".WB_URL."/modules/news/comment.php?post_id=".(int)$aRequestVars['post_id']."&section_id=".(int)$aRequestVars['section_id']."" ) ;
+        exit( 0 );
+    }
+    $position       = (isset($aRequestVars['p']) ? $aRequestVars['p'] : '' );
+    $comment        = (isset($aRequestVars['comment']) ? $aRequestVars['comment'] : '' );
+    $comment_date   = (isset($aRequestVars['comment_'.date('W')]) ? $aRequestVars['comment_'.date('W')] : '' );
+    $sRecallAddress = (isset($aRequestVars['redirect']) ? $aRequestVars['redirect'] : WB_URL );
+    $action = intval(isset($aRequestVars['cancel']) ? true : false );
+// Check if we should show the form or add a comment
+    if (
+        $page_id && $section_id  && $post_id  && !$action
+        && ( ( ENABLED_ASP && $comment_date != '')
+        || ( !ENABLED_ASP && $comment != '' ) ) 
+      ){
+        if(ENABLED_ASP){
+            $comment = $_POST['comment_'.date('W')];
+        } else {
+            $comment = $_POST['comment'];
+        }
+        $comment = strip_tags($comment);
+        $title   = strip_tags($_POST['title']);
+        // do not allow droplets in user input!
+        $title   = $wb->StripCodeFromText($title);
+        $comment = $wb->StripCodeFromText($comment);
+        // Check captcha
+        $sql  = 'SELECT `use_captcha` FROM `'.TABLE_PREFIX.'mod_news_settings` '
+              . 'WHERE `section_id` ='.$section_id;
+        if( $use_captcha = $database->get_one( $sql ) ) {
+            $t=time();
+            // Advanced Spam Protection
+            if(ENABLED_ASP && ( ($_SESSION['session_started']+ASP_SESSION_MIN_AGE > $t)  // session too young
+                OR (!isset($_SESSION['comes_from_view']))// user doesn't come from view.php
+                OR (!isset($_SESSION['comes_from_view_time']) OR $_SESSION['comes_from_view_time'] > $t-ASP_VIEW_MIN_AGE) // user is too fast
+                OR (!isset($_SESSION['submitted_when']) OR !isset($aRequestVars['submitted_when'])) // faked form
+                OR ($_SESSION['submitted_when'] != $aRequestVars['submitted_when']) // faked form
+                OR ($_SESSION['submitted_when'] > $t-ASP_INPUT_MIN_AGE && !isset($_SESSION['captcha_retry_news'])) // user too fast
+                OR ($_SESSION['submitted_when'] < $t-43200) // form older than 12h
+                OR ($aRequestVars['email'] OR $aRequestVars['url'] OR $aRequestVars['homepage'] OR $aRequestVars['comment']) /* honeypot-fields */ ) )
+            {
+                header("Location: ".$sRecallAddress."?p=".$position);
+                exit;
+            }
+            if(ENABLED_ASP)
+            {
+                if(isset($_SESSION['captcha_retry_news']))
+                {
+                  unset($_SESSION['captcha_retry_news']);
+                }
+            }
+            if( $use_captcha )
+            {
+                $search = array('{SERVER_EMAIL}');
+                $replace = array( SERVER_EMAIL,);
+                $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'] = str_replace($search,$replace,$MESSAGE['MOD_FORM_INCORRECT_CAPTCHA']);
+                if(isset($_POST['captcha']) && $_POST['captcha'] != '')
+                {
+                    // Check for a mismatch
+                    if(!isset($_POST['captcha']) OR !isset($_SESSION['captcha']) OR $_POST['captcha'] != $_SESSION['captcha'])
+                    {
+                        $_SESSION['captcha_error'] = $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'];
+                        $_SESSION['comment_title'] = $title;
+                        $_SESSION['comment_body'] = $comment;
+                        header("Location: ".WB_URL.'/modules/news/comment.php?post_id='.$post_id.'&section_id='.$section_id.'&amp;p='.$position );
+                        exit;
+                    }
+                }
+                else
+                {
+                    $_SESSION['captcha_error'] = $MESSAGE['MOD_FORM_INCORRECT_CAPTCHA'];
+                    $_SESSION['comment_title'] = $title;
+                    $_SESSION['comment_body'] = $comment;
+                    header("Location: ".WB_URL.'/modules/news/comment.php?post_id='.$post_id.'&section_id='.$section_id.'&amp;p='.$position );
+                    exit;
+                }
+            }
+        }
+    
+        if(isset($_SESSION['captcha'])) { unset($_SESSION['captcha']); }
+    
+        if(ENABLED_ASP)
+        {
+            unset($_SESSION['comes_from_view']);
+            unset($_SESSION['comes_from_view_time']);
+            unset($_SESSION['submitted_when']);
+        }
+        // Insert the comment into db
+        $commented_when = time();
+        if($wb->is_authenticated() == true)
+        {
+            $commented_by = $wb->get_user_id();
+        }
+        else
+        {
+            $commented_by = 0;
+        }
+        $sql  = 'INSERT INTO `'.TABLE_PREFIX.'mod_news_comments` SET '
+              . '`section_id` = '.intval($section_id).', '
+              . '`page_id` = '.intval($page_id).', '
+              . '`post_id` = '.intval($post_id).', '
+              . '`title` = \''.$database->escapeString($title).'\', '
+              . '`comment` = \''.$database->escapeString($comment).'\', '
+              . '`commented_when` = '.intval($commented_when).', '
+              . '`commented_by` = '.intval($commented_by).' '
+              .'';
+        $query = $database->query( $sql );
+    
+    // Get page link
+        $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'mod_news_posts` WHERE `post_id` = '.(int)$post_id;
+        $query_page = $database->query( $sql );
+        $page = $query_page->fetchRow( MYSQLI_ASSOC );
+        header('Location: '.$wb->page_link($page['link']).'?post_id='.$post_id.'' );
+        exit;
+    }else{
+    if( $post_id && $section_id && !$action )
+    {
+        header("Location: ".WB_URL.'/modules/news/comment.php?post_id='.$post_id.'&section_id='.$section_id );
+        exit( 0 );
+    }
+    else
+    {
+        header("Location: ".$sRecallAddress);
+        exit;
+    }
+}

Property changes on: trunk/modules/news/submit_comment.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/templates/default/css/backend.css
===================================================================
--- trunk/modules/news/templates/default/css/backend.css	(nonexistent)
+++ trunk/modules/news/templates/default/css/backend.css	(revision 2)
@@ -0,0 +1,50 @@
+@import url("scrolltable.css");
+table.news,
+table.news-post,
+table.news-group { border-collapse: collapse; width: 100%; vertical-align: middle;}
+table.news-post thead tr,
+table.news-group thead tr { font-weight: bold; font-size: 0.9525em; height: 3.225em; padding: 0.525em 0; background: #7D9AB6; }
+
+table.news-post thead tr,
+table.news-group thead tr { background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #538199; color: #fff;  }
+
+table.news-post thead tr th,
+table.news-group thead tr th { color: #fff; font-size: 120%; }
+
+table.news-group tbody tr,
+table.news-post tbody tr { background: #e8e8e8; line-height: 1.5255em; padding: 0.325em 0; }
+table.news-post tbody tr:nth-child(odd) { background: #FFFFFF; }
+table.news-post tbody tr:hover { background: #FBFCE0; }
+
+table.news-group tbody tr:nth-child(odd) { background: #FFFFFF; }
+table.news-group tbody tr:hover { background: #FBFCE0; }
+table.news tbody td.setting_name { color: #0d4b6e; font-weight: bold; min-width: 200px; padding-right: 0.525em; text-align: right; width: 20%; vertical-align: top; }
+
+table.news tbody tr { line-height: 2.225em; }
+table.news caption.news-header { margin: 0 0 0.825em; line-height: 2.225em; white-space: normal; }
+table.news caption.news-header { background: #538199 none repeat scroll 0 0; color: #fff; font-size: 1.425em; text-align: left; }
+table.news caption.news-header { padding-left: 1.125em; }
+
+table.news tbody tr td.setting_value select { width: 98.6%; }
+
+
+th.action { width: 4%!important;cursor: pointer; }
+th.title { width: 56%!important;cursor: pointer; }
+th.group { width: 24%!important;cursor: pointer; }
+th.active { width: 4%!important;cursor: pointer;}
+th.status { width: 6%!important;cursor: pointer; }
+
+
+td.action { width: 4%!important; }
+td.title { width: 50%!important; }
+td.group { width: 30%!important; }
+td.active { width: 4%!important;}
+td.status { width: 6%!important; }
+
+tr.sectionrow { width: 100%!important; line-height: 1.25; }
+
+colgroup.action { width: 4%;}
+colgroup.title { width: 56%;}
+colgroup.group { width: 30%;}
+colgroup.active { width: 4%;}
+colgroup.status { width: 6%;}
Index: trunk/modules/news/templates/default/css/scrolltable.css
===================================================================
--- trunk/modules/news/templates/default/css/scrolltable.css	(nonexistent)
+++ trunk/modules/news/templates/default/css/scrolltable.css	(revision 2)
@@ -0,0 +1,96 @@
+/*
+.table-fixed { width: 100%; background-color: #f3f3f3;}
+.table-fixed tbody { height: 200px; overflow-y: auto; width: 100%;}
+.table-fixed thead, .table-fixed tbody, .table-fixed tr, .table-fixed td, .table-fixed th { display: flexbox;}
+.table-fixed tbody td { }
+.table-fixed thead tr th { border-color: #e67e22;}
+*/
+
+table#tableData,
+table#news-ScrollTable {
+    color: #333;
+    font-family: Helvetica, Arial, sans-serif;
+    width: 100%;
+    /* Table reset stuff */
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+tbody.scrolling {
+    max-height: 21.925em;
+    overflow: auto;
+    display: inline-block;
+    width: 98%;
+}
+td.news-Scroll, th.frm-Scroll {
+    border: 0 none;
+    height: 2.255em;
+}
+th.news-Scroll {
+    /* Gradient Background */
+    background: linear-gradient(#7EB7BF 0%, #507279 100%);
+    background: #538199;
+    color: #FFF;
+    font-weight: bold;
+   /* height: 40px;*/
+}
+td.news-Scroll { background: #FFFFFF; text-align: left; }
+/* Zebra Stripe Rows */
+tr.news-Scroll td { background: #FFFFFF; }
+tr.news-Scroll:nth-child(odd) td { background: #e8e8e8; }
+tr.news-Scroll:hover td { background: #FBFCE0; }
+/* First-child blank cells! */
+ tr.news-Scroll td.news-Scroll:first-child, tr.news-Scroll th.news-Scroll:first-child {
+   /* background: none;*/
+    font-size: 0.9525em;
+    text-align: right;
+   padding-right: 5px;
+    width: 100%;
+}
+/* Add border-radius to specific cells! */
+ tr.news-Scroll:first-child th.news-Scroll:nth-child(2) { border-radius: 5px 0 0 0;}
+tr.news-Scroll:first-child th.news-Scroll:last-child { border-radius: 0 5px 0 0;}
+
+thead.news-Scroll { display: table; float: left; width: 100%; }
+
+table#news-ScrollTable { text-align :left; font-size :12px; border :1px ridge #dadada; font-family :verdana; background :transparent; color :#0066ff; }
+table.mod_form,
+table#news-ScrollTable { border-collapse: collapse; width: 100%; }
+table#news-ScrollTable thead  { cursor :pointer; width: 100%; }
+
+table#news-ScrollTable thead tr,
+table#news-ScrollTable tfoot tr { font-weight: bold; font-size: 0.9525em; height: 1.925em; padding: 0.525em 0; background: #7D9AB6; background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #45788D; }
+
+table#news-ScrollTable tbody tr {  }
+table#news-ScrollTable tbody tr { line-height: 1.225em; background: #e8e8e8;  }
+table#news-ScrollTable tbody tr:nth-child(odd) { background: #FFFFFF; }
+table#news-ScrollTable tbody tr:hover { background: #FBFCE0; }
+/*****************************************/
+
+.scrolling-table-container {
+    height: 21.225em;
+    overflow-y: scroll;
+    overflow-x: hidden;
+}
+
+  div.outer
+  {
+    width : 100%;
+    overflow : auto;
+  }
+  table.table-scroll
+  {
+     table-layout:fixed;
+     width: 100%; /* same as containing div */
+  }
+  table.table-scroll th, table.table-scroll td
+  {
+    border: solid 0px #ccc;
+  }
+table.table-scroll thead, table.table-scroll tbody { display: block; }
+
+table.table-scroll tbody {
+    height: 22.225em;       /* Just for the demo          */
+    overflow-y: auto;    /* Trigger vertical scroll    */
+    overflow-x: hidden;  /* Hide the horizontal scroll */
+    width: 100%;
+}
Index: trunk/modules/news/templates/default/img/16/copy_old.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/copy_old.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/edit_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/edit_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/16/help.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/invalid.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/16/invalid.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/ok_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/ok_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/16/trash_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/16/trash_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/RedCross.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/RedCross.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/closebutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/closebutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/copy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/copy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/group_status_0.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/24/group_status_0.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/group_status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/group_status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/group_status_1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/24/group_status_1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/group_status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/group_status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/invalid.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/invalid.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/modify.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/modify.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/rename.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/rename.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/24/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/24/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/copy_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/copy_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/copy_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/copy_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/delete_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/delete_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/delete_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/delete_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/modify_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/modify_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/modify_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/modify_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page add_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page add_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page add_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page add_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page_remove_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page_remove_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/32/page_remove_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/32/page_remove_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/RedCross.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/RedCross.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/closebutton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/closebutton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/copy_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/copy_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/copy_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/copy_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/copy_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/copy_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/copy_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/copy_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/delete_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/delete_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/delete_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/delete_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/delete_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/delete_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/droplet.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/droplet.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/droplet_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/droplet_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/edit_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/edit_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/empty.txt
===================================================================
--- trunk/modules/news/templates/default/img/empty.txt	(nonexistent)
+++ trunk/modules/news/templates/default/img/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/news/templates/default/img/group_status_0.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/group_status_0.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/group_status_1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/group_status_1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/help.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/invalid.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/invalid.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/invalid.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/invalid.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/invalid_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/invalid_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/modify_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/modify_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/modify_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/modify_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/modify_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/modify_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/ok_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/ok_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page add_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page add_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page add_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page add_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page_remove_32.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page_remove_32.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/page_remove_32_brown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/page_remove_32_brown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/rename_24.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/rename_24.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/s-radio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/s-radio.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/settings.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/settings.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/b.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/b.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/background.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/background.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/l.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/l.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/lb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/lb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/lt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/lt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/r.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/r.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/rb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/rb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/rt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/rt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/stemb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/stemb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/stemt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/stemt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/tip_balloon/t.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/modules/news/templates/default/img/tip_balloon/t.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/modules/news/templates/default/img/trash_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/news/templates/default/img/trash_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/news/templates/default/js/TableSort.js
===================================================================
--- trunk/modules/news/templates/default/js/TableSort.js	(nonexistent)
+++ trunk/modules/news/templates/default/js/TableSort.js	(revision 2)
@@ -0,0 +1,277 @@
+// TableSort 8.20
+// Jrgen Berkemeier, 16. 11. 2015
+// www.j-berkemeier.de
+
+( function() {
+
+    "use strict";
+
+    var JB_Table = function(tab) {
+
+        var up = String.fromCharCode(9650);
+        var down = String.fromCharCode(9660);
+        // var up = String.fromCharCode(8593);
+        // var down = String.fromCharCode(8595);
+        // var up = String.fromCharCode(11014);
+        // var down = String.fromCharCode(11015);
+        var no = String.fromCharCode(160,160,160,160); // Idee: 9674 ???
+        var dieses = this;
+        var defsort = 0;
+        var startsort_u = -1,startsort_d = -1;
+        var first = true;
+        var ssort;
+        var tbdy = tab.getElementsByTagName("tbody")[0];
+        var tz = tbdy.rows;
+        var nzeilen = tz.length;
+        if (nzeilen==0) return;
+        var nspalten = tz[0].cells.length;
+        var Titel = tab.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
+//console.info(Titel);
+        var Arr = new Array(nzeilen);
+        var ct = 0;
+        var sdir = new Array(nspalten);
+        var stype = new Array(nspalten);
+        var sortable = new Array(nspalten);
+        for(var i=0;i<nspalten;i++) {
+            stype[i] = "n";
+            sdir[i] = "u";
+            sortable[i] = false;
+        }
+
+        var initTableHead = function(t,nr) {
+            t.style.cursor = "pointer";
+            t.onclick = function() { dieses.sort(nr); };
+            sortsymbol.init(t,no);
+//            t.title = 'Die Tabelle nach "'+elementText(t)+'" sortieren.';
+//            t.title = '';
+            if(t.className.indexOf("vorsortiert-")>-1) {
+                sortsymbol.set(t,down);
+                ssort = nr;
+            }
+            else if(t.className.indexOf("vorsortiert")>-1) {
+                sortsymbol.set(t,up);
+                ssort = nr;
+            }
+            if(t.className.indexOf("sortiere-")>-1) startsort_d=nr;
+            else if(t.className.indexOf("sortiere")>-1) startsort_u=nr;
+            sortable[nr] = true;
+        } // initTableHead
+
+        var sortsymbol = {
+            init: function(t,s) {
+                var sp = t.getElementsByTagName("span");
+                for(var i=0;i<sp.length;i++) {
+                    if(!sp[i].hasChildNodes()) {
+                        t.sym = sp[i].appendChild(document.createTextNode(s));
+                        break;
+                    }
+                }
+                if(typeof(t.sym)=="undefined") t.sym = t.appendChild(document.createTextNode(s));
+            },
+            set: function(t,s) {
+                t.sym.data = s;
+            },
+            get: function(t) {
+                return t.sym.data;
+            }
+        } // sortsymbol
+
+        var VglFkt_s = function(a,b) {
+            var as = a[ssort], bs = b[ssort];
+            var ret=(as>bs)?1:(as<bs)?-1:0;
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { as = a[defsort]; bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort])
+            }
+            return ret;
+        } // VglFkt_s
+
+        var VglFkt_n = function(a,b) {
+            var ret = parseFloat(a[ssort])-parseFloat(b[ssort]);
+            if(!ret && ssort!=defsort) {
+                if (stype[defsort]=="s") { var as = a[defsort],bs = b[defsort]; ret = (as>bs)?1:(as<bs)?-1:0; }
+                else ret = parseFloat(a[defsort])-parseFloat(b[defsort]);
+            }
+            return ret;
+        } // VglFkt_n
+
+        var convert = function(val,s) {
+            var dmy;
+            var trmdat = function() {
+                if(dmy[0]<10) dmy[0] = "0" + dmy[0];
+                if(dmy[1]<10) dmy[1] = "0" + dmy[1];
+                if(dmy[2]<10) dmy[2] = "200" + dmy[2];
+                else if(dmy[2]<20) dmy[2] = "20" + dmy[2];
+                else if(dmy[2]<99) dmy[2] = "19" + dmy[2];
+                else if(dmy[2]>9999) dmy[2] = "9999";
+            }
+            if(val.length==0) val = "0";
+            if(!isNaN(val) && val.search(/[0-9]/)!=-1) return val;
+            var n = val.replace(",",".");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            n = n.replace(/\s|&nbsp;|&#160;|\u00A0/g,"");
+            if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                dmy[5] = val.substring(dp+4,dp+6);
+                for(var i=0;i<6;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<6;i++) if(dmy[i]<10) dmy[i] = "0" + dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]+dmy[5]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+\s+\d+:\d\d\s*$/)) {
+                var dp = val.search(":");
+                dmy = val.substring(0,dp-2).split(".");
+                dmy[3] = val.substring(dp-2,dp);
+                dmy[4] = val.substring(dp+1,dp+3);
+                for(var i=0;i<5;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                for(var i=3;i<5;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[2]+dmy[1]+dmy[0]+"."+dmy[3]+dmy[4]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<3;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]+"."+dmy[2]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+:\d\d\s*$/)) {
+                dmy = val.split(":");
+                for(var i=0;i<2;i++) dmy[i] = parseInt(dmy[i],10);
+                for(var i=0;i<2;i++) if(dmy[i]<10) dmy[i] = "0"+dmy[i];
+                return (""+dmy[0]+dmy[1]).replace(/ /g,"");
+            }
+            if(!val.search(/^\s*\d+\s*\.\s*\d+\s*\.\s*\d+/)) {
+                dmy = val.split(".");
+                for(var i=0;i<3;i++) dmy[i] = parseInt(dmy[i],10);
+                trmdat();
+                return (""+dmy[2]+dmy[1]+dmy[0]).replace(/ /g,"");
+            }
+            stype[s] = "s";
+            return val.toLowerCase().replace(/\u00e4/g,"ae").replace(/\u00f6/g,"oe").replace(/\u00fc/g,"ue").replace(/\u00df/g,"ss");
+        } // convert
+
+        var elementText;
+        if(document.body.textContent)
+            elementText = function(elem) {
+                return elem.textContent;
+            }
+        else
+            elementText = function(elem) {
+                var eT = function(ele) {
+                    var uele = ele.firstChild;
+                    while(uele) {
+                        if(uele.hasChildNodes()) eT(uele);
+                        if(uele.nodeType == 1) {
+                            // if(child.tagName=='INPUT'||child.tagName=='BUTTON')txt+=child.value; //Idee
+                            Text += " ";
+                        }
+                        else if(uele.nodeType == 3) Text += uele.data;
+                        uele = uele.nextSibling;
+                    }
+                }
+                var Text = "";
+                eT(elem);
+                return Text.replace(/\s+/g," ");
+            } // elementText
+
+        this.sort = function(sp) {
+            if(sp<0 || sp>=nspalten) return;
+            if(!sortable[sp]) return;
+            if (first) {
+                for(var z=0;z<nzeilen;z++) {
+                    var zelle = tz[z].getElementsByTagName("td"); // cells;
+                    Arr[z] = new Array(nspalten+1);
+                    Arr[z][nspalten] = tz[z];
+                    for(var s=0;s<nspalten;s++) {
+                        if (zelle[s].getAttribute("data-sort_key"))
+                            var zi = convert(zelle[s].getAttribute("data-sort_key"),s);
+                        else if (zelle[s].getAttribute("sort_key"))
+                            var zi = convert(zelle[s].getAttribute("sort_key"),s);
+                        else
+                            var zi = convert(elementText(zelle[s]),s);
+                        Arr[z][s] = zi ;
+                        // zelle[s].innerHTML += "<br>"+zi; // zum Debuggen
+                    }
+                }
+                first = false;
+            }
+            if(sp==ssort) {
+                Arr.reverse() ;
+                if ( sortsymbol.get(Titel[ssort])==down )
+                    sortsymbol.set(Titel[ssort],up);
+                else
+                    sortsymbol.set(Titel[ssort],down);
+            }
+            else {
+                if ( ssort>=0 && ssort<nspalten ) sortsymbol.set(Titel[ssort],no);
+                    ssort = sp;
+                if(stype[ssort]=="s") Arr.sort(VglFkt_s);
+                else                  Arr.sort(VglFkt_n);
+                if(sdir[ssort]=="u") {
+                    sortsymbol.set(Titel[ssort],up);
+                }
+                else {
+                    Arr.reverse() ;
+                    sortsymbol.set(Titel[ssort],down);
+                }
+            }
+            for(var z=0;z<nzeilen;z++)
+                tbdy.appendChild(Arr[z][nspalten]);
+            if(typeof(JB_aftersort)=="function") JB_aftersort(tab,tbdy,tz,nzeilen,nspalten,ssort);
+        } // sort
+
+//        if(!tab.title.length) tab.title="Ein Klick auf die Spalten\u00fcberschrift sortiert die Tabelle.";
+//console.info(tab);
+        if(!tab.title.length) tab.title="";
+        for(var i=Titel.length-1;i>-1;i--) {
+            var t=Titel[i];
+            if(t.className.indexOf("sortier")>-1) {
+                ct++;
+                initTableHead(t,i);
+                defsort = i ;
+                if(t.className.indexOf("sortierbar-")>-1) sdir[i] = "d";
+            }
+    }
+        if(ct==0) {
+//console.info(Titel);
+            for(var i=0;i<Titel.length;i++)
+                initTableHead(Titel[i],i);
+            defsort = 0;
+        }
+        if(startsort_u>=0) this.sort(startsort_u);
+        if(startsort_d>=0) { this.sort(startsort_d); this.sort(startsort_d); }
+        if(typeof(JB_aftersortinit)=="function") JB_aftersortinit(tab,tbdy,tz,nzeilen,nspalten,-1);
+
+    } // JB_Table
+
+    var JB_initTableSort = function() {
+        if (!document.querySelectorAll) return;
+        var Sort_Table = document.querySelectorAll("table.sortierbar");
+        var JB_Tables = [];
+        for(var i=0;i<Sort_Table.length;i++){ JB_Tables[i] = new JB_Table(Sort_Table[i]);}
+//console.info(JB_Tables);
+
+        var pars = decodeURI(window.location.search.substring(1));
+        if(pars.length) { // jbts=((0,1),(10,0),(3,3),(2,2))   tnr,snr
+            pars = pars.replace(/\s/g,"");
+            pars = pars.match(/jbts=\(?(\(\d+,\d+\),?){1,}\)?/gi);
+            if(pars) {
+                pars = pars[0].substr(pars[0].search("=")+1);
+                pars = pars.replace(/\(\(/g,"(").replace(/\)\)/g,")").replace(/\)\(/g,")|(").replace(/\),\(/g,")|(");
+                pars = pars.split("|");
+                for(var i=0;i<pars.length;i++) {
+                    var p = pars[i].substring(1,pars[i].length-1).split(",");
+                    if(p[0]>-1&&p[0]<JB_Tables.length) JB_Tables[p[0]].sort(p[1]);
+                }
+            }
+        }
+    } // initTableSort
+
+    if(window.addEventListener) window.addEventListener("DOMContentLoaded",JB_initTableSort,false);
+    else if(window.attachEvent) window.attachEvent("onload",JB_initTableSort);
+
+})();
Index: trunk/modules/news/templates/default/js/empty.txt
===================================================================
--- trunk/modules/news/templates/default/js/empty.txt	(nonexistent)
+++ trunk/modules/news/templates/default/js/empty.txt	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ * 
+ */
\ No newline at end of file
Index: trunk/modules/news/templates/default/js/scrollTable.js
===================================================================
--- trunk/modules/news/templates/default/js/scrollTable.js	(nonexistent)
+++ trunk/modules/news/templates/default/js/scrollTable.js	(revision 2)
@@ -0,0 +1,37 @@
+/* http://www.alistapart.com/articles/zebratables/ */
+function removeClassName (elem, className) {
+    elem.className = elem.className.replace(className, "").trim();
+}
+
+function addCSSClass (elem, className) {
+    removeClassName (elem, className);
+    elem.className = (elem.className + " " + className).trim();
+}
+
+String.prototype.trim = function() {
+    return this.replace( /^\s+|\s+$/, "" );
+}
+
+function stripedTable() {
+    return false;
+    if (document.getElementById && document.getElementsByTagName) {  
+        var allTables = document.getElementsByTagName('table');
+        if (!allTables) { return; }
+
+        for (var i = 0; i < allTables.length; i++) {
+            if (allTables[i].className.match(/[\w\s ]*scrollTable[\w\s ]*/)) {
+                var trs = allTables[i].getElementsByTagName("tr");
+                for (var j = 0; j < trs.length; j++) {
+                    removeClassName(trs[j], 'alternateRow');
+                    addCSSClass(trs[j], 'normalRow');
+                }
+                for (var k = 0; k < trs.length; k += 2) {
+                    removeClassName(trs[k], 'normalRow');
+                    addCSSClass(trs[k], 'alternateRow');
+                }
+            }
+        }
+    }
+}
+
+window.onload = function() { stripedTable(); }
Index: trunk/modules/news/uninstall.php
===================================================================
--- trunk/modules/news/uninstall.php	(nonexistent)
+++ trunk/modules/news/uninstall.php	(revision 2)
@@ -0,0 +1,26 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+require_once(WB_PATH.'/framework/functions.php');
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+        rm_full_dir(WB_PATH.PAGES_DIRECTORY.'/posts');
+        rm_full_dir(WB_PATH.MEDIA_DIRECTORY.'/.news');
+    }
+}

Property changes on: trunk/modules/news/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/upgrade.php
===================================================================
--- trunk/modules/news/upgrade.php	(nonexistent)
+++ trunk/modules/news/upgrade.php	(revision 2)
@@ -0,0 +1,188 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+/* **** START UPGRADE ******************************************************* */
+if(!function_exists('mod_news_Upgrade'))
+{
+    function mod_news_Upgrade()
+    {
+        global $database, $msg, $admin, $MESSAGE, $globalStarted,$callingScript;
+        $sPagesPath = WB_PATH.PAGES_DIRECTORY;
+        $sPostsPath = $sPagesPath.'/posts';
+        $msg = array();
+        if (is_writable(WB_PATH.'/temp/cache')) {
+            Translate::getInstance()->clearCache();
+        }
+    // create /posts/ - directory if not exists
+        if(!file_exists($sPostsPath)) {
+            if(is_writable($sPagesPath)) {
+                make_dir(WB_PATH.PAGES_DIRECTORY.'/posts/');
+            }else {
+                if(!$globalStarted){
+                    $msg[] = ($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+                }else {
+                    $msg[] = $MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'].'<br />';
+                    return $msg;
+                }
+            }
+            if (!$globalStarted) {echo 'directory "'.PAGES_DIRECTORY.'/posts/" created.<br />'; }
+        }
+        $aTable = array('mod_news_posts','mod_news_groups','mod_news_comments','mod_news_settings');
+        for($x=0; $x<sizeof($aTable);$x++) {
+            if(($sOldType = $database->getTableEngine(TABLE_PREFIX.$aTable[$x]))) {
+                if(('myisam' != strtolower($sOldType))) {
+                    if(!$database->query('ALTER TABLE `'.TABLE_PREFIX.$aTable[$x].'` Engine = \'MyISAM\' ')) {
+                        $msg[] = $database->get_error();
+                    }
+                }
+            } else {
+                $msg[] = $database->get_error();
+            }
+        }
+    // check if new fields must be added
+        $doImportDate = true;
+        if(!$database->field_exists(TABLE_PREFIX.'mod_news_posts', 'created_when')) {
+            if(!$database->field_add(TABLE_PREFIX.'mod_news_posts', 'created_when',
+                                    'INT NOT NULL DEFAULT \'0\' AFTER `commenting`')) {
+                if (!$globalStarted){
+                    echo $MESSAGE['RECORD_MODIFIED_FAILED'].'<br />';
+                    return $msg;
+                }else {
+                    $admin->print_error($MESSAGE['RECORD_MODIFIED_FAILED']);
+                }
+            }
+            if (!$globalStarted) { echo 'datafield `'.TABLE_PREFIX.'mod_news_posts`.`created_when` added.<br />'; }
+        } else { $doImportDate = false; }
+        if(!$database->field_exists(TABLE_PREFIX.'mod_news_posts', 'created_by')) {
+            if(!$database->field_add(TABLE_PREFIX.'mod_news_posts', 'created_by',
+                                    'INT NOT NULL DEFAULT \'0\' AFTER `created_when`')) {
+                if (!$globalStarted){
+                    echo $MESSAGE['RECORD_MODIFIED_FAILED'].'<br />';
+                    return ;
+                } else {
+                    $admin->print_error($MESSAGE['RECORD_MODIFIED_FAILED']);
+                }
+            }
+            if (!$globalStarted) {echo 'datafield `'.TABLE_PREFIX.'mod_news_posts`.`created_by` added.<br />'; }
+        }
+    // preset new fields `created_by` and `created_when` from existing values
+        if($doImportDate) {
+            $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` '
+                  . 'SET `created_by`=`posted_by`, `created_when`=`posted_when`';
+            $database->query($sql);
+        }
+
+    // now iterate through all existing accessfiles,
+    // write its creation date into database
+        $oDir = new DirectoryIterator($sPostsPath);
+        $count = 0;
+        foreach ($oDir as $fileinfo)
+        {
+            $fileName = $fileinfo->getFilename();
+            if((!$fileinfo->isDot()) &&
+               ($fileName != 'index.php') &&
+               (substr_compare($fileName,PAGE_EXTENSION,(0-strlen(PAGE_EXTENSION)),strlen(PAGE_EXTENSION)) === 0)
+              )
+            {
+            // save creation date from old accessfile
+                if($doImportDate) {
+                    $link = '/posts/'.preg_replace('/'.preg_quote(PAGE_EXTENSION).'$/i', '', $fileinfo->getFilename());
+                    $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` SET '
+                          . '`created_when`='.$fileinfo->getMTime().' '
+                          . 'WHERE `link`=\''.$database->escapeString($link).'\' '
+                          .   'AND `created_when`= 0';
+                    $database->query($sql);
+                }
+            // delete old access file
+                unlink($fileinfo->getPathname());
+                $count++;
+            }
+        }
+        unset($oDir);
+        if ($globalStarted && $count > 0) {
+            $msg[] = 'save date of creation from '.$count.' old accessfiles and delete these files.<br />';
+        }
+// ************************************************
+    // Check the validity of 'create-file-timestamp' and balance against 'posted-timestamp'
+        $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` ';
+        $sql .= 'SET `created_when`=`published_when` ';
+        $sql .= 'WHERE `published_when`<`created_when`';
+        $database->query($sql);
+        $sql  = 'UPDATE `'.TABLE_PREFIX.'mod_news_posts` ';
+        $sql .= 'SET `created_when`=`posted_when` ';
+        $sql .= 'WHERE `published_when`=0 OR `published_when`>`posted_when`';
+        $database->query($sql);
+// ************************************************
+    // rebuild all access-files
+        $count = 0;
+        $backSteps = preg_replace('@^'.preg_quote(WB_PATH).'@', '', $sPostsPath);
+        $backSteps = str_repeat( '../', substr_count($backSteps, '/'));
+        $sql  = 'SELECT `page_id`,`post_id`,`section_id`,`link` ';
+        $sql .= 'FROM `'.TABLE_PREFIX.'mod_news_posts`';
+        $sql .= 'WHERE `link` != \'\'';
+        if( ($resPosts = $database->query($sql)) )
+        {
+            while( $recPost = $resPosts->fetchRow() )
+            {
+                $file = $sPagesPath.$recPost['link'].PAGE_EXTENSION;
+                $content =
+                    '<?php'."\n".
+                    '// *** This file is generated by WebsiteBaker Ver.'.VERSION."\n".
+                    '// *** Creation date: '.date('c')."\n".
+                    '// *** Do not modify this file manually'."\n".
+                    '// *** WB will rebuild this file from time to time!!'."\n".
+                    '// *************************************************'."\n".
+                    "\t".'$page_id    = '.$recPost['page_id'].';'."\n".
+                    "\t".'$section_id = '.$recPost['section_id'].';'."\n".
+                    "\t".'$post_id    = '.$recPost['post_id'].';'."\n".
+                    "\t".'$post_section = '.$recPost['section_id'].';'."\n".
+                    "\t".'require(\''.$backSteps.'index.php\');'."\n".
+                    '// *************************************************'."\n";
+                if( file_put_contents($file, $content) !== false ) {
+                // Chmod the file
+                    change_mode($file);
+                }else {
+                    if(!$globalStarted){
+                        echo $MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE'].'<br />';
+                        return;
+                    } else {
+                        $msg[] = ($MESSAGE['PAGES_CANNOT_CREATE_ACCESS_FILE']);
+                    }
+                }
+                $count++;
+            }
+        }
+        if ($globalStarted) { $msg[] = 'created '.$count.' new accessfiles.'; }
+        return $msg;
+    }
+}
+
+// ------------------------------------
+    $callingScript = $_SERVER["SCRIPT_NAME"];
+    $globalStarted = preg_match('/upgrade\-script\.php$/', $callingScript);
+/*
+    $tmp = 'upgrade-script.php';
+    $globalStarted = substr_compare($callingScript, $tmp,(0-strlen($tmp)),strlen($tmp)) === 0;
+*/
+    $aMsg = mod_news_Upgrade();
+    if (!$globalStarted && sizeof($aMsg)) {print implode("\n", $aMsg)."\n";}
+
+/* **** END UPGRADE ********************************************************* */
\ No newline at end of file

Property changes on: trunk/modules/news/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/news/view.php
===================================================================
--- trunk/modules/news/view.php	(nonexistent)
+++ trunk/modules/news/view.php	(revision 2)
@@ -0,0 +1,637 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         modules_news
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *  if ( $setting_posts_per_page && $setting_posts_per_page + $position <= $i ) { break; }
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+global $post_id, $post_section, $TEXT, $MESSAGE, $MOD_NEWS;
+// load module language file
+$sAddonName = basename(__DIR__);
+require(WB_PATH .'/modules/'.$sAddonName.'/languages/EN.php');
+if(file_exists(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php')) {
+    require(WB_PATH .'/modules/'.$sAddonName.'/languages/'.LANGUAGE .'.php');
+}
+//overwrite php.ini on Apache servers for valid SESSION ID Separator
+if (function_exists('ini_set')) {
+    ini_set('arg_separator.output', '&amp;');
+}
+
+$addBracket = function ()
+{
+    $aList = func_get_args();
+//    return preg_replace('/^(.*)$/', '/\[$1\]/s', $aList);
+    return preg_replace('/^(.*)$/', '[$1]', $aList);
+};
+$modRel = str_replace(WB_PATH, '', __DIR__).'/';
+$ModuleRel = '/modules/'.basename(__DIR__).'/';
+$ModuleUrl = WB_URL.'/modules/'.basename(__DIR__).'/';
+$ModulePath = WB_PATH.'/modules/'.basename(__DIR__).'/';
+$sRecallAddress = WB_URL.PAGES_DIRECTORY.$GLOBALS['wb']->page['link'].PAGE_EXTENSION;
+
+// Get user's username, display name, email, and id - needed for insertion into post info
+$users = array();
+$sql = 'SELECT `user_id`,`username`,`display_name`,`email` FROM `'.TABLE_PREFIX.'users`';
+if (($resUsers = $database->query($sql))) {
+    while ($recUser = $resUsers->fetchRow( MYSQLI_ASSOC )) {
+        $users[$recUser['user_id']] = $recUser;
+    }
+}
+// Get all groups (id, title, active, image)
+$groups = array(
+    0 => array(
+        'group_id'  => 0,
+        'title'     => '',
+        'active'    => true,
+        'image'     => ''
+    )
+);
+
+
+$sql = 'SELECT `group_id`, `title`, `active` FROM `'.TABLE_PREFIX.'mod_news_groups` '
+     . 'WHERE `section_id`='.(int)$section_id.' '
+     . 'ORDER BY `position` ASC';
+if (($query_users = $database->query($sql))) {
+    while (($group = $query_users->fetchRow( MYSQLI_ASSOC ))) {
+        // Insert user info into users array
+        $groups[$group['group_id']] = $group;
+        $sImageUrl = MEDIA_DIRECTORY.'/.news/image'.$group['group_id'].'.jpg';
+        $groups[$group['group_id']]['image'] = (is_readable(WB_PATH.$sImageUrl) ? WB_URL.$sImageUrl : '');
+    }
+}
+    // Check if we should only list posts from a certain group
+    if (isset($_GET['g']) AND is_numeric($_GET['g'])) {
+        $query_extra = 'AND `group_id`='.(int)$_GET['g'].' ';
+    } else {
+        $query_extra = '';
+    }
+    // Get settings
+    $setting_header = $setting_post_loop = $setting_footer = $setting_posts_per_page = '';
+    $sql = 'SELECT `header`, `post_loop`, `footer`, `posts_per_page` '
+         . 'FROM `'.TABLE_PREFIX.'mod_news_settings` '
+         . 'WHERE `section_id`='.(int)$section_id;
+    if (($resSettings = $database->query($sql))) {
+        if (($recSettings = $resSettings->fetchRow(MYSQL_ASSOC))) {
+            foreach ($recSettings as $key=>$val) {
+                ${'setting_'.$key} = $val;
+            }
+        }
+    }
+    // Get total number of posts relatet to now
+// Check if we should show the main page or a post itself
+    $now = $t = time();
+    $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'mod_news_posts` '
+         . 'WHERE `section_id`='.(int)$section_id.' AND `active`=1 '
+         .        'AND `title`!=\'\' '
+         .        'AND (`published_when`=0 OR `published_when`<='.$now.') '
+         .        'AND (`published_until`=0 OR `published_until`>='.$now.') '
+         .        $query_extra;
+    $total_num = intval($database->get_one($sql));
+    if ( $total_num && $setting_posts_per_page ) {
+        $iNumberOfPages = (int)($total_num / $setting_posts_per_page)+($total_num % $setting_posts_per_page ? 1:0 );
+        $position  = intval( isset($_GET['p'] ) ? $_GET['p'] : 0 );
+        $position  = abs( ( $position < $total_num) ? $position : ($iNumberOfPages*$setting_posts_per_page) );
+        // Work-out if we need to add limit code to sql
+        $limit_sql = ' LIMIT '.$position.', '.$setting_posts_per_page;
+    } else {
+        $display_previous_next_links = '';
+        $position = 0;
+        $next_link = '';
+        $next_page_link = '';
+        $previous_link = '';
+        $previous_page_link = '';
+        $out_of = '';
+        $of = '';
+        $limit_sql = '';
+    }
+
+// if(!defined('POST_ID') OR !is_numeric(POST_ID))
+if (!isset($post_id) || !is_numeric($post_id)) {
+/*
+$setting_posts_per_page = 12/5 = 2 5 = 10
+*/
+    // Query posts (for this page)
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+         . 'WHERE `section_id`='.$section_id.' '
+         .        'AND `active`=1 '
+         .        'AND `title`!=\'\' '
+         .        'AND (`published_when`=0 OR `published_when`<='.$now.') '
+         .        'AND (`published_until`=0 OR `published_until`>='.$now.') '
+         .        $query_extra
+         . 'ORDER BY `position` DESC'.$limit_sql;
+    $query_posts = $database->query($sql);
+//    $total_num = $query_posts->numRows();
+    // Create previous and next links
+
+    if ($setting_posts_per_page != 0) {
+        $spaces = str_repeat('&#160;', 25);
+        if ( ($position > 0) && ($position < $total_num) ) {
+            if (isset($_GET['g']) AND is_numeric($_GET['g'])) {
+                $pl_prepend = '<a href="?p='.($position-$setting_posts_per_page).'&amp;g='.$_GET['g'].'">&lt;&lt; ';
+            } else {
+                $pl_prepend = '<a href="?p='.($position-$setting_posts_per_page).'">&lt;&lt; ';
+            }
+            $pl_append = '</a>';
+            $previous_link = $pl_prepend.$TEXT['PREVIOUS'].$pl_append;
+            $previous_page_link = $pl_prepend.$TEXT['PREVIOUS_PAGE'].$pl_append;
+        } else {
+            $previous_link = $spaces;
+            $previous_page_link = $spaces;
+        }
+
+        if ($position + $setting_posts_per_page >= $total_num) {
+            $next_link = $spaces;
+            $next_page_link = $spaces;
+        } else {
+            if (isset($_GET['g']) AND is_numeric($_GET['g'])) {
+                $nl_prepend = '<a href="?p='.($position+$setting_posts_per_page).'&amp;g='.$_GET['g'].'"> ';
+            } else {
+                $nl_prepend = '<a href="?p='.($position+$setting_posts_per_page).'"> ';
+            }
+            $nl_append = ' &gt;&gt;</a>';
+            $next_link = $nl_prepend.$TEXT['NEXT'].$nl_append;
+            $next_page_link = $nl_prepend.$TEXT['NEXT_PAGE'].$nl_append;
+        }
+        if ($position+$setting_posts_per_page > $total_num) {  //
+            $num_of = $total_num;
+        } else {
+            $num_of = $position+$setting_posts_per_page;
+        }
+        if ( ($position >= 0) && ($position < $total_num) ) {
+            $out_of = ($position+1).'-'.$num_of.' '.strtolower($TEXT['OUT_OF']).' '.$total_num;
+            $of = ($position+1).'-'.$num_of.' '.strtolower($TEXT['OF']).' '.$total_num;
+            $display_previous_next_links = $spaces;
+        } else {
+            $display_previous_next_links = 'none';
+        }
+    }
+    if ($total_num=== 0) { // $num_posts
+        $setting_header = '';
+        $setting_post_loop = '';
+        $setting_footer = '';
+        $setting_posts_per_page = '';
+    }
+
+// Print header
+    $aPlaceHolders = $addBracket(
+        'DISPLAY_PREVIOUS_NEXT_LINKS',
+        'NEXT_PAGE_LINK',
+        'NEXT_LINK',
+        'PREVIOUS_PAGE_LINK',
+        'PREVIOUS_LINK',
+        'OUT_OF',
+        'OF'
+    );
+    if ($display_previous_next_links == 'none') {
+        $aReplacements = array(
+            $display_previous_next_links
+        );
+    } else {
+        $aReplacements = array(
+            $display_previous_next_links,
+            $next_page_link,
+            $next_link,
+            $previous_page_link,
+            $previous_link,
+            $out_of,
+            $of
+        );
+    }
+    print (str_replace($aPlaceHolders, $aReplacements, $setting_header));
+    if ($total_num > 0) // $num_posts
+    {
+        $sScriptUrl = $_SERVER['SCRIPT_NAME'];
+        if ($query_extra != '') {
+            echo ('<div class="selected-group-title">'
+                 .'<a href="'.htmlspecialchars(strip_tags($sScriptUrl))
+                 .'">'.PAGE_TITLE.'</a> &gt;&gt; '.$groups[$_GET['g']]['title']
+                 .'</div>'.PHP_EOL
+            );
+        }
+
+        $aPlaceHolders = $addBracket(
+            'PAGE_TITLE',
+            'GROUP_ID',
+            'GROUP_TITLE',
+            'GROUP_IMAGE',
+            'DISPLAY_GROUP',
+            'DISPLAY_IMAGE',
+            'TITLE',
+            'SHORT',
+            'MODI_DATE',
+            'MODI_TIME',
+            'CREATED_DATE',
+            'CREATED_TIME',
+            'PUBLISHED_DATE',
+            'PUBLISHED_TIME',
+            'LINK',
+            'SHOW_READ_MORE',
+            'TEXT_READ_MORE',
+            'USER_ID',
+            'USERNAME',
+            'DISPLAY_NAME',
+            'EMAIL'
+        );
+        $i=0;
+        while (($post = $query_posts->fetchRow( MYSQLI_ASSOC )))
+        {
+            ++$i;
+            if (
+                isset($groups[$post['group_id']]['active']) AND
+                $groups[$post['group_id']]['active'] != false
+            ) { // Make sure parent group is active
+                $uid = $post['posted_by']; // User who last modified the post
+                // Workout date and time of last modified post
+                if ($post['published_when'] === '0') {
+                    $post['published_when'] = time();
+                }
+                if ($post['published_when'] > $post['posted_when']) {
+                    $post_date = date(DATE_FORMAT, $post['published_when']+TIMEZONE);
+                    $post_time = date(TIME_FORMAT, $post['published_when']+TIMEZONE);
+                } else {
+                    $post_date = date(DATE_FORMAT, $post['posted_when']+TIMEZONE);
+                    $post_time = date(TIME_FORMAT, $post['posted_when']+TIMEZONE);
+                }
+                $publ_date      = date(DATE_FORMAT,$post['published_when']+TIMEZONE);
+                $publ_time      = date(TIME_FORMAT,$post['published_when']+TIMEZONE);
+                // Work-out the post link
+                $post_link      = page_link($post['link']);
+                $post_link_path = str_replace(WB_URL, WB_PATH,$post_link);
+                $create_date    = date(DATE_FORMAT, $post['created_when']+TIMEZONE);
+                $create_time    = date(TIME_FORMAT, $post['created_when']+TIMEZONE);
+                if (isset($_GET['p']) AND $position > 0) {
+                    $post_link .= '?p='.$position;
+                }
+                if (isset($_GET['g']) AND is_numeric($_GET['g'])) {
+                    if (isset($_GET['p']) AND $position > 0) {
+                        $post_link .= '&amp;';
+                    } else {
+                        $post_link .= '?';
+                    }
+                    $post_link .= 'g='.$_GET['g'];
+                }
+                // Get group id, title, and image
+                $group_id      = $post['group_id'];
+                $group_title   = $groups[$group_id]['title'];
+                $group_image   = $groups[$group_id]['image'];
+                $display_image = ($group_image == '') ? "none" : "inherit";
+                $display_group = ($group_id == 0) ? 'none' : 'inherit';
+
+                if ($group_image != "") {
+                    $group_image= "<img src='".$group_image."' alt='".$group_title."' />";
+                }
+                // Replace [wblink--PAGE_ID--] with real link
+                $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+                $short = ($post['content_short']);
+                $short = (str_replace('{SYSVAR:MEDIA_REL}', $sMediaUrl, $short));
+                // Replace vars with values
+//                $post_long_len = mb_strlen($post['content_long']);
+//                $bIsEmptyLongContent = (bool)( $post_long_len == 0);
+                $bIsEmptyLongContent = !(bool)mb_strlen(
+                    trim(preg_replace('/^\s*?<(p|div)>(.*)?<\/\s*?\1>$/si', '\2', $post['content_long']))
+                );
+                // set replacements for exchange
+                $aReplacements = array(
+                    PAGE_TITLE,
+                    $group_id,
+                    $group_title,
+                    $group_image,
+                    $display_group,
+                    $display_image,
+                    $post['title'],
+                    $short,
+                    $post_date,
+                    $post_time,
+                    $create_date,
+                    $create_time,
+                    $publ_date,
+                    $publ_time
+                );
+                if (isset($users[$uid]['username']) && $users[$uid]['username'] != '')
+                {
+                    if ($bIsEmptyLongContent) {
+                        $aReplacements[] = '#" onclick="javascript:void(0);return false;" style="cursor:no-drop;';
+                        $aReplacements[] = 'hidden';
+                        $aReplacements[] = '';
+                        $aReplacements[] = $uid;
+                        $aReplacements[] = $users[$uid]['username'];
+                        $aReplacements[] = $users[$uid]['display_name'];
+                        $aReplacements[] = $users[$uid]['email'];
+                    } else {
+                        $aReplacements[] = $post_link;
+                        $aReplacements[] = 'visible';
+                        $aReplacements[] = $MOD_NEWS['TEXT_READ_MORE'];
+                        $aReplacements[] = $uid;
+                        $aReplacements[] = $users[$uid]['username'];
+                        $aReplacements[] = $users[$uid]['display_name'];
+                        $aReplacements[] = $users[$uid]['email'];
+                    }
+                } else {
+                    if ($bIsEmptyLongContent) {
+                        $aReplacements[] = '#" onclick="javascript:void(0);return false;" style="cursor:no-drop;';
+                        $aReplacements[] = 'hidden';
+                    } else {
+                        $aReplacements[] = $post_link;
+                        $aReplacements[] = 'visible';
+                        $aReplacements[] = $MOD_NEWS['TEXT_READ_MORE'];
+                    }
+                }
+                print (str_replace($aPlaceHolders, $aReplacements, $setting_post_loop));
+            }
+//            if ( $setting_posts_per_page == $i ) { break; }
+            if ( $setting_posts_per_page && $setting_posts_per_page + $position <= $i ) { break; }
+        } // end while posts
+    }
+    // Print footer
+    $aPlaceHolders = $addBracket(
+        'DISPLAY_PREVIOUS_NEXT_LINKS',
+        'NEXT_PAGE_LINK',
+        'NEXT_LINK',
+        'PREVIOUS_PAGE_LINK',
+        'PREVIOUS_LINK',
+        'OUT_OF',
+        'OF'
+    );
+    if ($display_previous_next_links == 'none') {
+        $aReplacements = array(
+            $display_previous_next_links
+        );
+    } else {
+        $aReplacements = array(
+            $display_previous_next_links,
+            $next_page_link,
+            $next_link,
+            $previous_page_link,
+            $previous_link,
+            $out_of,
+            $of
+        );
+    }
+    print (str_replace($aPlaceHolders, $aReplacements, $setting_footer));
+
+} elseif(isset($post_id) && is_numeric($post_id)) {
+    if (isset($post_section) && ($post_section == $section_id)) {
+        // Get settings
+        $setting_post_header = $setting_post_footer = $setting_comments_header
+                             = $setting_comments_loop = $setting_comments_footer = '';
+        $sql = 'SELECT `post_header`, `post_footer`, `comments_header`, `comments_loop`, `comments_footer` '
+             . 'FROM `'.TABLE_PREFIX.'mod_news_settings` '
+             . 'WHERE `section_id`='.(int)$section_id;
+        if (($resSettings = $database->query($sql)) ) {
+            if (($recSettings = $resSettings->fetchRow( MYSQLI_ASSOC ))) {
+                foreach ($recSettings as $key=>$val) {
+                    ${'setting_'.$key} = $val;
+                }
+            }
+        }
+        // Get page info
+        $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` '
+             . 'WHERE `page_id`='.PAGE_ID;
+        $query_page = $database->query($sql);
+        if ($query_page->numRows() > 0) {
+            $page = $query_page->fetchRow( MYSQLI_ASSOC );
+            $page_link = page_link($page['link']);
+            if (isset($_GET['p']) AND $position > 0) {
+                $page_link .= '?p='.$_GET['p'];
+            }
+            if (isset($_GET['g']) AND is_numeric($_GET['g'])) {
+                if (isset($_GET['p']) AND $position > 0) {
+                    $page_link .= '&amp;';
+                } else {
+                    $page_link .= '?';
+                }
+                $page_link .= 'g='.$_GET['g'];
+            }
+        } else {
+            exit($MESSAGE['PAGES_NOT_FOUND']);
+        }
+        // Get post info
+        $t = time();
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_news_posts` '
+             . 'WHERE `post_id`='.$post_id.' AND active=1 '
+             .        'AND (`published_when`=0 OR `published_when`<='.$t.') '
+             .        'AND (`published_until`=0 OR `published_until`>='.$t.')';
+        $query_post = $database->query($sql);
+        if ($post = $query_post->fetchRow( MYSQLI_ASSOC )) {
+            if (isset($groups[$post['group_id']]['active'])
+                AND $groups[$post['group_id']]['active'] != false
+            ) { // Make sure parent group is active
+                $uid = $post['posted_by']; // User who last modified the post
+                // Workout date and time of last modified post
+                if ($post['published_when'] === '0') {
+                    $post['published_when'] = time();
+                }
+                if ($post['published_when'] > $post['posted_when']) {
+                    $post_date = date(DATE_FORMAT, $post['published_when']+TIMEZONE);
+                    $post_time = date(TIME_FORMAT, $post['published_when']+TIMEZONE);
+                } else {
+                    $post_date = date(DATE_FORMAT, $post['posted_when']+TIMEZONE);
+                    $post_time = date(TIME_FORMAT, $post['posted_when']+TIMEZONE);
+                }
+                $publ_date      = date(DATE_FORMAT,$post['published_when']+TIMEZONE);
+                $publ_time      = date(TIME_FORMAT,$post['published_when']+TIMEZONE);
+                // Work-out the post link
+                $post_link      = page_link($post['link']);
+                $post_link_path = str_replace(WB_URL, WB_PATH,$post_link);
+                $create_date    = date(DATE_FORMAT, $post['created_when']+TIMEZONE);
+                $create_time    = date(TIME_FORMAT, $post['created_when']+TIMEZONE);
+                // Get group id, title, and image
+                $group_id       = $post['group_id'];
+                $group_title    = $groups[$group_id]['title'];
+                $group_image    = $groups[$group_id]['image'];
+                $display_image  = ($group_image == '') ? "none" : "inherit";
+                $display_group  = ($group_id == 0) ? 'none' : 'inherit';
+                $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+                $post_short = ($post['content_short']);
+                $post_short = (str_replace('{SYSVAR:MEDIA_REL}', $sMediaUrl, $post_short));
+                if ($group_image != "") $group_image= "<img src='".$group_image."' alt='".$group_title."' />";
+
+                $aPlaceHolders = $addBracket(
+                    'PAGE_TITLE',
+                    'GROUP_ID',
+                    'GROUP_TITLE',
+                    'GROUP_IMAGE',
+                    'DISPLAY_GROUP',
+                    'DISPLAY_IMAGE',
+                    'TITLE',
+                    'SHORT',
+                    'BACK',
+                    'TEXT_BACK',
+                    'TEXT_LAST_CHANGED',
+                    'MODI_DATE',
+                    'TEXT_AT',
+                    'MODI_TIME',
+                    'CREATED_DATE',
+                    'CREATED_TIME',
+                    'PUBLISHED_DATE',
+                    'PUBLISHED_TIME',
+                    'TEXT_POSTED_BY',
+                    'TEXT_ON',
+                    'USER_ID',
+                    'USERNAME',
+                    'DISPLAY_NAME',
+                    'EMAIL'
+                );
+                $aReplacements = array(
+                    PAGE_TITLE,
+                    $group_id,
+                    $group_title,
+                    $group_image,
+                    $display_group,
+                    $display_image,
+                    $post['title'],
+                    $post_short,
+                    $page_link,
+                    $MOD_NEWS['TEXT_BACK'],
+                    $MOD_NEWS['TEXT_LAST_CHANGED'],
+                    $post_date,
+                    $MOD_NEWS['TEXT_AT'],
+                    $post_time,
+                    $create_date,
+                    $create_time,
+                    $publ_date,
+                    $publ_time,
+                    $MOD_NEWS['TEXT_POSTED_BY'],
+                    $MOD_NEWS['TEXT_ON']
+                );
+                if (isset($users[$uid]['username']) AND $users[$uid]['username'] != '') {
+                    $aReplacements[] = $uid;
+                    $aReplacements[] = $users[$uid]['username'];
+                    $aReplacements[] = $users[$uid]['display_name'];
+                    $aReplacements[] = $users[$uid]['email'];
+                }
+                $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+                $post_long = ($post['content_long'] != '') ? $post['content_long'] : $post['content_short'];
+                $post_long = (str_replace('{SYSVAR:MEDIA_REL}', $sMediaUrl, $post_long));
+                print (str_replace($aPlaceHolders, $aReplacements, $setting_post_header));
+                print $post_long;
+                print (str_replace($aPlaceHolders, $aReplacements, $setting_post_footer));
+            }
+        } else {
+                $aPlaceHolders = $addBracket(
+                    'BACK',
+                    'TEXT_BACK',
+                    'TEXT_LAST_CHANGED',
+                    'TEXT_AT',
+                    'MODI_DATE',
+                    'MODI_TIME'
+                );
+                $aReplacements = array(
+                    $page_link,
+                    $MOD_NEWS['TEXT_BACK'],
+                    $MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'],
+                    '',
+                    ''
+                );
+                print (str_replace($aPlaceHolders, $aReplacements, $setting_post_footer));
+
+//                $wb->print_error($MESSAGE['FRONTEND_SORRY_NO_ACTIVE_SECTIONS'], $sRecallAddress, false);
+        }
+        // Show comments section if we have to
+        if (($post['commenting'] == 'private' AND isset($wb) AND $wb->is_authenticated() == true)
+            OR $post['commenting'] == 'public'
+        ) {
+            // Print comments header
+            $aPlaceHolders = $addBracket(
+                'ADD_COMMENT_URL',
+                'TEXT_COMMENTS'
+            );
+            $aReplacements = array(
+                WB_URL.'/modules/news/comment.php?post_id='.$post_id.'&amp;section_id='.$section_id,
+                $MOD_NEWS['TEXT_COMMENTS']
+            );
+            print (str_replace($aPlaceHolders, $aReplacements, $setting_comments_header));
+            // Query for comments
+            $iNumberOfComments = 0;
+            $aPlaceHolders = $addBracket(
+                'COMMENT',
+                'TITLE',
+                'TEXT_ON',
+                'DATE',
+                'TEXT_AT',
+                'TIME',
+                'TEXT_BY',
+                'USER_ID',
+                'USERNAME',
+                'DISPLAY_NAME',
+                'EMAIL'
+            );
+            $sql = 'SELECT `title`, `comment`, `commented_when`, `commented_by` '
+                 . 'FROM `'.TABLE_PREFIX.'mod_news_comments` '
+                 . 'WHERE `post_id`='.$post_id.' '
+                 . 'ORDER BY `commented_when` ASC';
+
+            if (($query_comments = $database->query($sql))) {
+                while (($comment = $query_comments->fetchRow( MYSQLI_ASSOC ))) {
+                    $iNumberOfComments++;
+                    // Display Comments without slashes, but with new-line characters
+                    $comment['comment'] = nl2br($wb->strip_slashes($comment['comment']));
+                    $comment['title'] = $wb->strip_slashes($comment['title']);
+                    // Print comments loop
+                    $commented_date = date(DATE_FORMAT, $comment['commented_when']+TIMEZONE);
+                    $commented_time = date(TIME_FORMAT, $comment['commented_when']+TIMEZONE);
+                    $uid = $comment['commented_by'];
+                    $aReplacements = array(
+                        $comment['comment'],
+                        $comment['title'],
+                        $MOD_NEWS['TEXT_ON'],
+                        $commented_date,
+                        $MOD_NEWS['TEXT_AT'],
+                        $commented_time,
+                        $MOD_NEWS['TEXT_BY']
+                    );
+                    if (isset($users[$uid]['username']) AND $users[$uid]['username'] != '') {
+                        $aReplacements[] = $uid;
+                        $aReplacements[] = $users[$uid]['username'];
+                        $aReplacements[] = $users[$uid]['display_name'];
+                        $aReplacements[] = $users[$uid]['email'];
+                    } else {
+                        $aReplacements[] = '0';
+                        $aReplacements[] = strtolower($TEXT['UNKNOWN']);
+                        $aReplacements[] = $TEXT['UNKNOWN'];
+                    }
+                    print (str_replace($aPlaceHolders, $aReplacements, $setting_comments_loop));
+                }
+            }
+            if (! $iNumberOfComments) {
+                // Say no comments found
+                $content = '';
+                $aReplacements = array(
+                    $MOD_NEWS['NO_COMMENT_FOUND']
+                );
+                print (str_replace($aPlaceHolders, $aReplacements, $setting_comments_loop));
+            }
+            // Print comments footer
+            $aPlaceHolders = $addBracket(
+                'ADD_COMMENT_URL',
+                'TEXT_ADD_COMMENT',
+                'TEXT_COMMENTS'
+            );
+            $aReplacements = array(
+                WB_URL.'/modules/news/comment.php?post_id='.$post_id.'&amp;section_id='.$section_id.'&amp;p='.$position,
+                $MOD_NEWS['TEXT_ADD_COMMENT'],
+                $MOD_NEWS['TEXT_COMMENTS']
+            );
+            print (str_replace($aPlaceHolders, $aReplacements, $setting_comments_footer));
+        }
+        if (ENABLED_ASP) {
+            $_SESSION['comes_from_view'] = $post_id;
+            $_SESSION['comes_from_view_time'] = time();
+        }
+    }
+}
+unset($addBracket);
\ No newline at end of file

Property changes on: trunk/modules/news/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/CHANGELOG
===================================================================
--- trunk/modules/output_filter/CHANGELOG	(nonexistent)
+++ trunk/modules/output_filter/CHANGELOG	(revision 2)
@@ -0,0 +1,19 @@
+Change Log
+===============================================================================
+Please note: This change log may not be accurate
+
+$Id: CHANGELOG 65 2017-03-03 21:38:16Z manu $
+
+Legend:
++ = Added
+- = Removed
+# = Bugfix
+! = Update/Change
+===============================================================================
+
+
+17 Dec-2015 Build 0001 Manuela v.d.Decken(DarkViper)
++ Initialize project
+
+end of file
+
Index: trunk/modules/output_filter/OutputFilterApi.php
===================================================================
--- trunk/modules/output_filter/OutputFilterApi.php	(nonexistent)
+++ trunk/modules/output_filter/OutputFilterApi.php	(revision 2)
@@ -0,0 +1,91 @@
+<?php
+/**
+ *  Copyright (C) 2013 Werner v.d. Decken <wkl@isteam.de>
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * OutputFilterApi.php
+ *
+ * @category     Addons
+ * @package      Addons_OutputFilter
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @lastmodified $Date$
+ * @since        File available since 25.12.2013
+ * @description  can apply one ore more filters to $content
+ *      Example: $sContent = OutputFilterApi('WbLink', $sContent);
+ *      or..     $sContent = OutputFilterApi('WbLink|Relurl', $sContent);
+ *      or..     $sContent = OutputFilterApi(array('WbLink', 'RelUrl'), $sContent);
+ */
+/**
+ * OutputFilterApi
+ * @param   string|array $mFilters  list of one or more filters
+ * @param   string $sContent  content to apply filters
+ * @return  string
+ */
+    function OutputFilterApi($mFilters, $sContent)
+    {
+        if (!is_array($mFilters)) {
+            $mFilters = preg_split('/\s*?[,;| +]\s*?/', $mFilters, -1, PREG_SPLIT_NO_EMPTY);
+        }
+        foreach ($mFilters as $sFilter) {
+            $aTmp = preg_split('/\?/', $sFilter, 2, PREG_SPLIT_NO_EMPTY);
+            $sFilterName = $aTmp[0];
+            $sOptions = (isset($aTmp[1])) ? $aTmp[1] : '';
+            if (!preg_match('/^[A-Z][A-Za-z0-9]+$/s', $sFilterName)) { continue; }
+            $sFilterFile = __DIR__.'/filters/'.'filter'.$sFilterName.'.php';
+            $sFilterFunc = 'doFilter'.$sFilterName;
+            if (is_readable($sFilterFile)) {
+                if (!function_exists($sFilterFunc)) {
+                    require($sFilterFile);
+                }
+                $sContent = $sFilterFunc($sContent, $sOptions);
+            }
+        }
+        return $sContent;
+    }
+/* ************************************************************************** */
+/**
+ * function to read the current filter settings
+ * @global object $database
+ * @global object $admin
+ * @param void
+ * @return array contains all settings
+ */
+    function getOutputFilterSettings()
+    {
+        global $database;
+    // set default values
+        $aSettings = array(
+            'at_replacement'  => '(at)',
+            'dot_replacement' => '(dot)'
+        );
+    // request settings from database
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_output_filter`';
+        if (($oRes = $database->query($sql))) {
+            while (($aRec = $oRes->fetchRow(MYSQLI_ASSOC))) {
+                $aSettings[$aRec['name']] = $aRec['value'];
+            }
+        }
+        $aSettings['OutputFilterMode'] = 0;
+        $aSettings['OutputFilterMode'] |= ((int)$aSettings['email_filter'] * pow(2, 0));  // n | 2^0
+        $aSettings['OutputFilterMode'] |= ((int)$aSettings['mailto_filter'] * pow(2, 1)); // n | 2^1
+    // return array with filter settings
+        return $aSettings;
+    }
+/* ************************************************************************** */
+

Property changes on: trunk/modules/output_filter/OutputFilterApi.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/addon.php
===================================================================
--- trunk/modules/output_filter/addon.php	(nonexistent)
+++ trunk/modules/output_filter/addon.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * index.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+    // set the name of the addon
+    $sAddonName = basename(__DIR__);
+    include(dirname(__DIR__).'/SimpleCommandDispatcher.inc');
+
+// end of file
+

Property changes on: trunk/modules/output_filter/addon.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/backend.css
===================================================================
--- trunk/modules/output_filter/backend.css	(nonexistent)
+++ trunk/modules/output_filter/backend.css	(revision 2)
@@ -0,0 +1,2 @@
+/* switch path to default or ownstyle */
+@import url("themes/default/css/backend.css"); 
Index: trunk/modules/output_filter/backend_body.js
===================================================================
--- trunk/modules/output_filter/backend_body.js	(nonexistent)
+++ trunk/modules/output_filter/backend_body.js	(revision 2)
@@ -0,0 +1,52 @@
+/**
+ * 
+ */
+domReady(function() {
+
+
+    function toggle_visibility(id) {
+       var e = document.getElementById(id);
+       if(e.style.display == 'block')
+          e.style.display = 'none';
+       else
+          e.style.display = 'block';
+    }
+
+    function initCheckboxes() {
+        addEvent(document.getElementById('select_all'), 'click', setCheckboxes);
+    }
+    function setCheckboxes() {
+        var cb = document.getElementById( 'cb-filters' ).getElementsByTagName('input');
+console.info(cb);
+        var isChecked = document.getElementById('select_all').checked;
+        for (var i = 0; i < cb.length; i++) {
+            cb[i].checked = isChecked;
+        }
+    }
+
+    function selectSingleElement(IdSuffix, el ) {
+        document.getElementById(el.id + IdSuffix).checked ='checked'; 
+        document.getElementById('select_all').checked =false;
+    }
+
+    function deselectAllElements(IdSuffix, el ) {
+        for ( i = 0;; i++) {
+            if (!(e = document.getElementById('L' + i + IdSuffix))) {
+                break;
+            }
+            e.checked = el.checked;
+        }
+    }
+
+
+
+
+
+    var smtpPort = document.getElementById("wbmailer_smtp_port");
+    if ( smtpPort ){
+        smtpPort.addEventListener("click", function() {
+            toggle_wbmailer_secure( smtpPort );
+        }, false);
+    }
+
+});
Index: trunk/modules/output_filter/cmd/cmdInstall.inc
===================================================================
--- trunk/modules/output_filter/cmd/cmdInstall.inc	(nonexistent)
+++ trunk/modules/output_filter/cmd/cmdInstall.inc	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @copyright       WebsiteBaker Org. e.V.
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+
+    $sTable = TABLE_PREFIX.'mod_output_filter';
+    $i = (!isset($i) ? 1 : $i);
+    $OK   = "<span class=\"ok\">OK</span>";
+    $FAIL = "<span class=\"error\">FAILED</span>";
+    $iErr = false;
+    $msg = array(
+        '<div style="margin:1em auto;font-size:1.1em;">',
+        '<h4>Step '.$i++.': Installing Output Filter Settings</h4>'
+    );
+    if (is_writable($sAddonPath.'/filters/filterShortUrl.php')){
+        unlink($sAddonPath.'/filters/filterShortUrl.php');
+    }
+    // create tables from sql dump file
+    $sInstallStruct = $sAddonPath.'/install-struct.sql';
+    if ( !is_readable($sInstallStruct)) {
+        $msg[] = '<strong>\'missing or not readable file [install-struct.sql]\'</strong> '.$FAIL.'<br />';
+        $iErr = true;
+    } else {
+        $getDefaultSettings = (function() use ( $sAddonName ){
+            $aDefaults = array(
+                'at_replacement'  => '@',
+                'dot_replacement' => '.',
+                'email_filter'    => '1',
+                'mailto_filter'   => '1'
+            );
+            $aFiles = glob(WB_PATH.'/modules/'.$sAddonName.'/filters/*');
+            foreach ( $aFiles  as $sFilterFile) {
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', $sFilterFile);
+                $aDefaults[$key] = '0';
+            }
+          return $aDefaults;
+        });
+        $aDefaults =  $getDefaultSettings();
+
+        // drop old table and create new one
+        if ($database->SqlImport($sInstallStruct, TABLE_PREFIX, false)) {
+            if ($aDefaults) {
+            // restore old settings if there any
+                $sNameValPairs = '';
+                foreach ($aDefaults as $index => $val) {
+                    $sNameValPairs .= ', (\''.$index.'\', \''.$database->escapeString($val).'\')';
+                }
+                $sValues = ltrim($sNameValPairs, ', ');
+                $sql = 'INSERT INTO `'.$sTable.'` (`name`, `value`) '
+                     . 'VALUES '.$sValues;
+                if (!$database->query($sql)) {
+                    $msg[] = '<strong>\'Output Filter install settings\'</strong> '.$FAIL.'<br />';
+                    $iErr = true;
+                } else {
+                    $msg[] = '<strong>\'Output Filter settings successful installed\'</strong> '.$OK.'<br />';
+                }
+            }
+        } else {
+          $msg[] = '<strong>\'installing or not readable file [install-struct.sql]\'</strong> '.$FAIL.'<br />';
+          $iErr = true;
+        }
+        unset($getDefaultSettings);
+    }
+    $msg[] = '</div>';
+//    print implode("\n", $msg)."\n";
+}

Property changes on: trunk/modules/output_filter/cmd/cmdInstall.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/cmd/cmdSave.inc
===================================================================
--- trunk/modules/output_filter/cmd/cmdSave.inc	(nonexistent)
+++ trunk/modules/output_filter/cmd/cmdSave.inc	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ * cmdSave.php
+ *
+ * @category     Addons
+ * @package      
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @description  xyz
+ */
+
+        if ($admin->checkFTAN()) {
+
+    // take over post - arguments
+            $aDatas = array();
+            foreach ( $aDefaultSettings as $key => $value ) {
+                if( in_array( $key, $aAllowedFilters ) ) {
+                    $aDatas[$key]   = (bool)(isset($_POST[$key])
+                                                ? intval($_POST[$key])
+                                                : $aDefaultSettings[$key]);
+                }
+           }
+
+            if( $aFilterSettings['Email'] ) {
+                $aDatas['email_filter']    = (bool)(isset($_POST['email_filter'])
+                                               ? intval($_POST['email_filter'])
+                                               : $aDefaultSettings['email_filter']);
+                $aDatas['mailto_filter']   = (bool)(isset($_POST['mailto_filter'])
+                                               ? intval($_POST['mailto_filter'])
+                                               : $aDefaultSettings['mailto_filter']);
+                $aDatas['at_replacement']  = ( (isset($_POST['at_replacement']) && $_POST['at_replacement'] != '')
+                                               ? trim(strip_tags($_POST['at_replacement']))
+                                               : $aDefaultSettings['at_replacement']);
+                $aDatas['dot_replacement'] = ( (isset($_POST['dot_replacement']) && $_POST['dot_replacement'] != '')
+                                               ? trim(strip_tags($_POST['dot_replacement']))
+                                               : $aDefaultSettings['dot_replacement']);
+            }
+
+            $sNameValPairs = '';
+            foreach ($aDatas as $index => $val) {
+                $sNameValPairs .= ', (\''.$index.'\', \''.$database->escapeString($val).'\')';
+            }
+            $sValues = ltrim($sNameValPairs, ', ');
+            $sql = 'REPLACE INTO `'.TABLE_PREFIX.'mod_output_filter` (`name`, `value`) '
+                 . 'VALUES '.$sValues;
+
+            if ($database->query($sql)) {
+            //anything ok
+                $msgTxt = $MESSAGE['RECORD_MODIFIED_SAVED'];
+                $msgCls = 'msg-box';
+            }else {
+            // database error
+                $msgTxt = $MESSAGE['RECORD_MODIFIED_FAILED'];
+                $msgCls = 'error-box';
+            }
+        } else {
+        // FTAN error
+            $msgTxt = $MESSAGE['GENERIC_SECURITY_ACCESS'];
+            $msgCls = 'error-box';
+        }
+// end of file

Property changes on: trunk/modules/output_filter/cmd/cmdSave.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/cmd/cmdTool.inc
===================================================================
--- trunk/modules/output_filter/cmd/cmdTool.inc	(nonexistent)
+++ trunk/modules/output_filter/cmd/cmdTool.inc	(revision 2)
@@ -0,0 +1,176 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @copyright       WebsiteBaker Org. e.V.
+ * @author          Christian Sommer
+ * @author          Dietmar Wöllbrink
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+        $debugMessage = '';
+        $js_back = ADMIN_URL.'/admintools/tool.php';
+        $ToolUrl = ADMIN_URL.'/admintools/tool.php?tool='.$sAddonName;
+        if( !$admin->get_permission($sAddonName,'module' ) ) {
+            $admin->print_error($MESSAGE['ADMIN_INSUFFICIENT_PRIVELLIGES'], $js_back);
+        }
+
+        $SettingsDenied = array(
+        'at_replacement',
+        'dot_replacement',
+        'email_filter',
+        'mailto_filter',
+        'OutputFilterMode',
+        'WbLink',
+        'ReplaceSysvar',
+        'CssToHead',
+//        'ScriptVars',
+        );
+        if ($database->field_exists( TABLE_PREFIX.'mod_output_filter', 'sys_rel')) {
+            include('cmdUpgrade.inc' );
+        } else {
+        }
+        if (is_readable(dirname(__DIR__).'/info.php')) {require dirname(__DIR__).'/info.php';}
+
+        if (is_readable(dirname(__DIR__).'/OutputFilterApi.php')) {
+            if (!function_exists('getOutputFilterSettings')) {
+                require(dirname(__DIR__).'/OutputFilterApi.php');
+            }
+// read settings from the database to show
+        $aFilterSettings = getOutputFilterSettings();
+// extended defaultSettings for email filter
+        $aEmailDefaults = array();
+        if ($aFilterSettings['Email'] ) {
+            $aEmailSettings = array(  );
+            $aEmailDefaults = array(
+                'at_replacement'  => '@',
+                'dot_replacement' => '.',
+                'email_filter'    => '0',
+                'mailto_filter'   => '0'
+            );
+        } else {
+            $aEmailSettings = array(
+                'at_replacement'  => '@',
+                'dot_replacement' => '.',
+                'email_filter'    => '0',
+                'mailto_filter'   => '0'
+            );
+        }
+        $aDefaultSettings = array_diff_key( $aFilterSettings, $aEmailSettings );
+        // preset settings as default
+        $aFiles = glob(WB_PATH.'/modules/'.$sAddonName.'/filters/*');
+        $getDefaultSettings = (function() use ( $sAddonName, $aDefaultSettings, $aFiles ){
+            foreach ( $aFiles  as $sFilterFile) {
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', $sFilterFile);
+                $aDefaultSettings[$key] = '0';
+            }
+          return $aDefaultSettings;
+        });
+        $aDefaultSettings = array_merge( $getDefaultSettings(), $aEmailDefaults );
+        $aAllowedFilters  = array_keys ( $aDefaultSettings );
+        $aFilterExists    = array_diff ( $aAllowedFilters, $SettingsDenied );
+        // remove not existing filters from table
+        foreach ( $aFilterExists  as $sFilterName) {
+            $sFilterFile = WB_PATH.'/modules/'.$sAddonName.'/filters/filter'.$sFilterName.'.php';
+            if( !file_exists( $sFilterFile ) ) {
+                $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_output_filter`'
+                      . 'WHERE `name` = \''.$sFilterName.'\'';
+                if( $database->query( $sql ) ){
+                    unset($aDefaultSettings[$sFilterName]);
+                }
+            }
+        }
+//        $aAllowedFilters  = array_keys ( $aDefaultSettings );
+// Create new template object
+        $oTpl = new Template( $sAddonThemePath );
+//        $oTpl->debug = true;
+        $oTpl->set_file('page', 'tool.htt');
+        $oTpl->set_block('page', 'main_block', 'main');
+        $oTpl->set_block('main_block', 'headline_block', 'headline');
+        $oTpl->set_var('FTAN', $admin->getFTAN());
+        $oTpl->set_var($TEXT);
+        $oTpl->set_var('ADMIN_URL', $oReg->AcpUrl);
+        $oTpl->set_var('MODULE_NAME', $sAddonName);
+        $msgTxt = '';
+        $msgCls = 'msg-box';
+
+        $msgTxt = $module_description;
+        $msgCls = 'info-box';
+
+        $oTpl->set_var('TOOL_NAME', $toolName);
+        $oTpl->set_var('REQUEST_URI', $_SERVER['REQUEST_URI']);
+        $oTpl->set_var('CANCEL_URL', $oReg->AcpUrl.'admintools/index.php');
+        $oTpl->set_var('TOOL_URL', $oReg->AcpUrl.'admintools/tool.php?tool='.$sAddonName);
+//        $oTpl->set_var($MESSAGE);
+        $oTpl->set_var($MOD_MAIL_FILTER);
+        $oTpl->set_var($HEADING);
+// check if data was submitted
+        if($doSave) {
+    // save changes
+            $oTpl->parse('headline', 'headline_block', true);
+            $oTpl->set_var('TOOL_URL', $oReg->AcpUrl.'admintools/tool.php?tool='.$sAddonName);
+            $oTpl->set_var('CANCEL_URL', $oReg->AcpUrl.'admintools/tool.php?tool='.$sAddonName);
+            include(__DIR__.'/cmdSave.inc');
+            $aFilterSettings = getOutputFilterSettings();
+        } else {
+            $oTpl->set_block('main_block', 'headline_block', '');
+            $oTpl->set_var('CANCEL_URL', $oReg->AcpUrl.'admintools/index.php');
+        }
+        $oTpl->set_block('main_block', 'core_info_block', 'core_info');
+        if( $debugMessage != '') {
+        // write message box if needed
+//            echo '<div class="'.$msgCls.'">'.$msgTxt.'</div>';
+            $oTpl->set_var('CORE_MSGCLS', $msgCls);
+            $oTpl->set_var('CORE_MSGTXT', $print_r);
+            $oTpl->parse('core_info', 'core_info_block', true);
+        } else {
+            $oTpl->set_block('core_info', 'core_info_block', '');
+        }
+        $oTpl->set_block('main_block', 'message_block', 'message');
+        if( $msgTxt != '') {
+        // write message box if needed
+//            echo '<div class="'.$msgCls.'">'.$msgTxt.'</div>';
+            $oTpl->set_var('MSGCLS', $msgCls);
+            $oTpl->set_var('MSGTXT', $msgTxt);
+        }
+        $oTpl->parse('message', 'message_block', true);
+
+        $oTpl->set_var($aFilterSettings);
+        $oTpl->set_block('main_block', 'filter_block', 'filter_list');
+        foreach($aFilterSettings as $sFilterName => $sFilterValue)
+        {
+            if ( in_array( $sFilterName, $SettingsDenied ) ) { continue; }
+            $oTpl->set_var('FVALUE', $sFilterValue);
+            $oTpl->set_var('FNAME', $sFilterName);
+            $oTpl->set_var('FCHECKED', (($sFilterValue=='1') ? ' checked="checked"' : '') );
+            $oTpl->parse('filter_list', 'filter_block', true);
+        }
+// enable/disable extended email filter settings
+        $oTpl->set_block('main_block', 'email-filter_block', 'email-filter');
+        if( $aFilterSettings['Email'] ) {
+            $oTpl->set_var('EMAIL_FILTER_CHECK',  (($aFilterSettings['email_filter']) ? ' checked="checked"' : '') );
+            $oTpl->set_var('MAILTO_FILTER_CHECK', (($aFilterSettings['mailto_filter']) ? ' checked="checked"' : '') );
+            $oTpl->parse('email-filter', 'email-filter_block', true);
+        } else {
+            $oTpl->set_block('main_block', 'email-filter_block', '');
+        }
+        // write out header if needed
+        if(!$admin_header) { $admin->print_header(); }
+    // Parse template objects output
+            $oTpl->parse('main', 'main_block', true);
+            $oTpl->pparse('output', 'page');
+    }

Property changes on: trunk/modules/output_filter/cmd/cmdTool.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/cmd/cmdUninstall.inc
===================================================================
--- trunk/modules/output_filter/cmd/cmdUninstall.inc	(nonexistent)
+++ trunk/modules/output_filter/cmd/cmdUninstall.inc	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          Christian Sommer, WB-Project, Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable( $sAddonPath.'/install-struct.sql')) {
+        $database->SqlImport( $sAddonPath.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/output_filter/cmd/cmdUninstall.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/cmd/cmdUpgrade.inc
===================================================================
--- trunk/modules/output_filter/cmd/cmdUpgrade.inc	(nonexistent)
+++ trunk/modules/output_filter/cmd/cmdUpgrade.inc	(revision 2)
@@ -0,0 +1,140 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @copyright       WebsiteBaker Org. e.V.
+ * @author          Dietmar Wöllbrink
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Must include code to stop this file being access directly
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) { throw new RuntimeException('Illegal access'); }
+/* -------------------------------------------------------- */
+
+    $sTable = TABLE_PREFIX.'mod_output_filter';
+    $i = (!isset($i) ? 1 : $i);
+    $OK   = "<span class=\"ok\">OK</span>";
+    $FAIL = "<span class=\"error\">FAILED</span>";
+    $iErr = false;
+    $aOldSettings = array();
+
+    if (is_writable($sAddonPath.'/filters/filterShortUrl.php')){
+        unlink($sAddonPath.'/filters/filterShortUrl.php');
+    }
+    $globalStarted = preg_match('/upgrade\-script\.php$/', $callingScript);
+    $msg = array(
+        '<div style="margin:1em auto;font-size:1.1em;">',
+        '<h4>Step '.$i++.': Updating Output Filter Settings</h4>'
+    );
+//    print $callingScript.'<br /><br />';
+    $sInstallStruct = $sAddonPath.'/install-struct.sql';
+    if ( !is_readable($sInstallStruct)) {
+        $msg[] = '<strong>\'missing or not readable file [install-struct.sql]\'</strong> '.$FAIL.'<br />';
+        $iErr = true;
+    } else {
+        $aFiles = glob($sAddonPath.'/filters/*');
+        $getDefaultSettings = (function() use ( $database, $sAddonName, $aFiles ){
+            $aDefaults = array(
+                'at_replacement'  => '@',
+                'dot_replacement' => '.',
+                'email_filter'    => '1',
+                'mailto_filter'   => '1'
+            );
+            foreach ( $aFiles  as $sFilterFile) {
+                $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', $sFilterFile);
+                $aDefaults[$key] = '0';
+            }
+          return $aDefaults;
+        });
+        $aDefaults =  $getDefaultSettings();
+//        $aAllowedFilters = array_keys ( $aDefaults );
+        // try to create table if not exists
+        $database->SqlImport($sInstallStruct, TABLE_PREFIX, true );
+        // read settings first
+        $sql = 'SELECT * FROM `'.$sTable.'`';
+        // check if table already upgraded
+        if ( $bOldStructure = $database->field_exists($sTable, 'sys_rel') )
+        {
+            if (($oSettings = $database->query($sql)))
+            {
+              //
+                if (!($aOldSettings = $oSettings->fetchRow(MYSQLI_ASSOC))) {
+                    $msg[] = '<strong>\'Output Filter backup old settings\'</strong> '.$FAIL.'<br />';
+                    $iErr = true;
+                } else {
+                    // add new defaults to old settings without invalide values
+                    $aNewSettings = array_intersect_key( $aOldSettings, $aDefaults );
+                    $aOldSettings = array_replace_recursive( $aDefaults, $aNewSettings );
+                }
+            }
+        } elseif ( $database->field_exists($sTable, 'name') ) {
+              $aOldSettings = $aDefaults;
+              // overwrite standardsettings ($aOldSettings)
+              $sql = 'SELECT * FROM `'.$sTable.'`';
+              if (($oSettings = $database->query($sql))) {
+                while( $aSettings = $oSettings->fetchRow( MYSQLI_ASSOC ) )
+                {
+                    $key = $aSettings['name'];
+                    $aOldSettings[$key] = $aSettings['value'];
+                }
+              }
+          }
+        // delete not existing filter in table
+        $SettingsDenied = array( 'at_replacement', 'dot_replacement', 'email_filter', 'mailto_filter', 'OutputFilterMode' );
+        $aAllowedFilters  = array_keys ( $aOldSettings );
+        $aFilterExists    = array_diff ( $aAllowedFilters, $SettingsDenied );
+        foreach ( $aFilterExists  as $sFilterName) {
+            $sFilterFile = WB_PATH.'/modules/'.$sAddonName.'/filters/filter'.$sFilterName.'.php';
+            if( !file_exists( $sFilterFile ) ) {
+                $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_output_filter`'
+                      . 'WHERE `name` = \''.$sFilterName.'\'';
+                if( $database->query( $sql ) ){
+                    unset($aOldSettings[$sFilterName]);
+                }
+            }
+        }
+        // drop old table and create new one
+        if ($database->SqlImport($sInstallStruct, TABLE_PREFIX, false))
+        {
+            if ($aOldSettings) {
+            // restore old settings if there any
+                $sNameValPairs = '';
+                foreach ($aOldSettings as $index => $val) {
+                    $sNameValPairs .= ', (\''.$index.'\', \''.$database->escapeString($val).'\')';
+                }
+                $sValues = ltrim($sNameValPairs, ', ');
+                $sql = 'REPLACE INTO `'.$sTable.'` (`name`, `value`) '
+                     . 'VALUES '.$sValues;
+                if (!$database->query($sql)) {
+                    $msg[] = '<strong>\'Output Filter restore old settings\'</strong> '.$FAIL.'<br />';
+                    $iErr = true;
+                }
+            }
+            $aFilterToDelete= array ('Canonical');
+            foreach ( $aFilterToDelete  as $sFilterName) {
+                $sFilterFile = WB_PATH.'/modules/'.$sAddonName.'/filters/filter'.$sFilterName.'.php';
+                if (is_writable($sFilterFile)){unlink($sFilterFile);}
+            }
+        } else {
+            $msg[] = '<strong>\'Output Filter recreate table\'</strong> '.$FAIL.'<br />';
+            $iErr = true;
+        }
+        if (!$iErr) {
+            $msg[] = '<strong>\'Output Filter successful updated\'</strong> '.$OK.'<br />';
+        }
+        unset($getDefaultSettings);
+    }
+    $msg[] = '</div>';
+    if (!$globalStarted) {print implode("\n", $msg)."\n";}
+
+

Property changes on: trunk/modules/output_filter/cmd/cmdUpgrade.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filter-routines.php
===================================================================
--- trunk/modules/output_filter/filter-routines.php	(nonexistent)
+++ trunk/modules/output_filter/filter-routines.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          Christian Sommer, WB-Project, Werner v.d. Decken
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* --- this is a wrapper for backward compatibility only --- */
+    $sModuleDir = str_replace('\\', '/', dirname(__FILE__)).'/';
+    if (file_exists($sModuleDir.'index.php')) {
+        require($sModuleDir.'index.php');
+    }

Property changes on: trunk/modules/output_filter/filter-routines.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterCssToHead.php
===================================================================
--- trunk/modules/output_filter/filters/filterCssToHead.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterCssToHead.php	(revision 2)
@@ -0,0 +1,58 @@
+<?php
+/**
+ * OutputFilter 'CssToHead'
+ * @copyright   Manuela v.d.Decken <manuela@isteam.de>
+ * @author      Manuela v.d.Decken <manuela@isteam.de>
+ * @version     161223.3
+ * @param string $content
+ * @return string
+ * @description step1) moves all css definitions from <body> to bottom of the <head> section
+ *              step2) do not move definitions which are already in <head>
+ *              step3) delete all css from <body>
+ */
+    function doFilterCssToHead($sContent) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = \preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {}
+            $aMatches = [];
+            $sPattern = '/^(.*<head[^>]*>)(.*)(<\/head>.*<body[^>]*>)(.*)(<\/body>.*)$/siU';
+            // 1 = .*<head..>
+            // 2 = content of head
+            // 3 = </head> * <body..>
+            // 4 = content of body
+            // 5 = </body>... end of document
+            if (\preg_match($sPattern, $sContent, $aDocumentParts)) {
+                unset($aDocumentParts[0]);
+                $sPattern = '/(\<link[^>]*?"(text\/css|stylesheet)"[^>]*?\/?\>)|'
+                          . '(\<style[^>]*?"text\/css"[^>]*?\>.*?\<\/style\>)|'
+                          . '(\<style[^>]*?\>.*?\<\/style\>)/si';
+                // search for pattern inside the <body>
+                if (\preg_match_all($sPattern, $aDocumentParts[4], $aMatches)) {
+                    // remove duplicates from the matches and save result
+                    $aBodyMatches = $aMatches = \array_unique($aMatches[0]);
+                    // set elements to 'false' which already are in <head>
+                    \array_walk(
+                        $aMatches,
+                        function(&$value, $key) use (&$aDocumentParts) {
+                            if (\preg_match('/'.preg_quote($value, '/').'/siu', $aDocumentParts[2])) {
+                                $value = false;
+                            }
+                        }
+                    );
+                    // remove 'false' matches
+                    $aMatches = \array_filter($aMatches);
+                    if(\sizeof($aMatches) > 0) {
+                        // now attach all matches found in <body> to the <head>
+                        $aDocumentParts[2] .= "\n".\implode("\n", $aMatches)."\n";
+                        // remove the matches from <body>
+                        $aDocumentParts[4] = \str_replace($aBodyMatches, '', $aDocumentParts[4]);
+                    }
+                    //at least rebuild the document
+                    $sContent = \implode("\n", $aDocumentParts);
+                }
+            } else {
+                throw new \Exception('malformed document created');
+            }
+
+        return $sContent;
+    }

Property changes on: trunk/modules/output_filter/filters/filterCssToHead.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterDroplets.php
===================================================================
--- trunk/modules/output_filter/filters/filterDroplets.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterDroplets.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+/**
+ * execute droplets
+ * @copyright       Manuela v.d.Decken <manuela@isteam.de>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @param string $content
+ * @return string
+ */
+    function doFilterDroplets($content)
+    {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            if(file_exists(WB_PATH .'/modules/droplets/droplets.php')) {
+                include_once(WB_PATH .'/modules/droplets/droplets.php');
+                if(function_exists('evalDroplets')) {
+                    $content = evalDroplets($content);
+                }
+            }
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterDroplets.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterEmail.php
===================================================================
--- trunk/modules/output_filter/filters/filterEmail.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterEmail.php	(revision 2)
@@ -0,0 +1,136 @@
+<?php
+/**
+ * protect email addresses (replace '@' and '.' and obfuscate address
+ * @param string $content
+ * @return string
+ */
+    function doFilterEmail($content) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            if (
+                $aFilterSettings['OutputFilterMode'] == 0 &&
+                $aFilterSettings['at_replacement'] == '@' &&
+                $aFilterSettings['dot_replacement'] == '.'
+            ) {
+                return $content;
+            }
+        // test if js-decryption is installed
+            if( preg_match('/<head.*<.*src=\".*\/mdcr.js.*>.*<\/head/siU', $content) ) {
+                $aFilterSettings['OutputFilterMode'] |= pow(2, 2); // n | 2^2
+            }else {
+            // try to insert js-decrypt into <head> if available
+                $script = str_replace('\\', '/',str_replace(WB_PATH,'', dirname(__DIR__)).'/js/mdcr.js');
+                if(is_readable(WB_PATH.$script)) {
+                    $scriptLink = "\t".'<script src="'.WB_URL.$script.'" type="text/javascript"></script>'."\n";
+                    $regex = '/(.*)(<\s*?\/\s*?head\s*>.*)/isU';
+                    $replace = '$1'.$scriptLink.'$2';
+                    $content = preg_replace ($regex, $replace, $content);
+                    $aFilterSettings['OutputFilterMode'] |= pow(2, 2); // n | 2^2
+                }
+            }
+/* *** obfuscate mailto addresses by js:mdcr *** */
+            // work out the defined output filter mode: possible output filter modes: [0], 1, 2, 3, 6, 7
+            // 2^0 * (0.. disable, 1.. enable) filtering of mail addresses in text
+            // 2^1 * (0.. disable, 1.. enable) filtering of mail addresses in mailto links
+            // 2^2 * (0.. disable, 1.. enable) Javascript mailto encryption (only if mailto filtering enabled)
+
+            // first search part to find all mailto email addresses
+//            $pattern = '#(<a[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?)([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})([^"]*?)"([^>]*>)(.*?)</a>';
+// bugfix 20160417
+            $pattern = '#(<a[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?)([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})([^"]*?)"([^>]*>\s*)(.*?)</a>';
+            // second part to find all non mailto email addresses
+            $pattern .= '|(value\s*=\s*"|\')??\b([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})\b#i';
+/*
+(<a[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?)([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})([^"]*?)"([^>]*>)(.*?)</a>|(value\s*=\s*"|\')??\b([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})\b
+        Sub 1:\b(<a.[^<]*href\s*?=\s*?"\s*?mailto\s*?:\s*?)            -->    "<a id="yyy" class="xxx" href = " mailto :" ignoring white spaces
+        Sub 2:([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})            -->    the email address in the mailto: part of the mail link
+        Sub 3:([^"]*?)"                                                --> possible ?Subject&cc... stuff attached to the mail address
+        Sub 4:([^>]*>)                                                --> all class or id statements after the mailto but before closing ..>
+        Sub 5:(.*?)</a>\b                                            --> the mailto text; all characters between >xxxxx</a>
+        Sub 6:|\b([A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4})\b        --> email addresses which may appear in the text (require word boundaries)
+*/
+            // find all email addresses embedded in the content and filter them using a callback function
+            $content = preg_replace_callback(
+                $pattern,
+    /* ************************************************************************** */
+                function ($match) use ($aFilterSettings) {
+                    // check if required arguments are defined
+                    $search = array('@', '.');
+                    $replace = array($aFilterSettings['at_replacement'] ,$aFilterSettings['dot_replacement']);
+                    // check if the match contains the expected number of subpatterns (6|8)
+                    switch (count($match)) {
+                        case 8:
+                        /** OUTPUT FILTER FOR EMAIL ADDRESSES EMBEDDED IN TEXT **/
+                        // 1.. text mails only, 3.. text mails + mailto (no JS), 7 text mails + mailto (JS)
+                            if(!in_array($aFilterSettings['OutputFilterMode'], array(1,3,5,7))){ return $match[0]; }
+                            // do not filter mail addresses included in input tags (<input ... value = "test@mail)
+                            if (strpos($match[6], 'value') !== false) return $match[0]; {
+                            // filtering of non mailto email addresses enabled
+                                return str_replace($search, $replace, $match[0]);
+                            }
+                        break;
+                        case 6:
+                        /** OUTPUT FILTER FOR EMAIL ADDRESSES EMBEDDED IN MAILTO LINKS **/
+                        // 2.. mailto only (no JS), 3.. text mails + mailto (no JS), 6.. mailto only (JS), 7.. all filters active
+                            if(!in_array($aFilterSettings['OutputFilterMode'], array(2,3,6,7))){ return $match[0]; }
+                            // check if last part of the a href link: >xxxx</a> contains a email address we need to filter
+                            $pattern = '#[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}#i';
+                            if(preg_match_all($pattern, $match[5], $matches)) {
+                                foreach($matches as $submatch) {
+                                    foreach($submatch as $value) {
+                                    // replace all . and all @ in email address parts by (dot) and (at) strings
+                                        $match[5] = str_replace($value, str_replace($search, $replace, $value), $match[5]);
+                                    }
+                                }
+                            }
+                            // check if Javascript encryption routine is enabled
+                            if(in_array($aFilterSettings['OutputFilterMode'], array(6,7))) {
+                            /** USE JAVASCRIPT ENCRYPTION FOR MAILTO LINKS **/
+                            // extract possible class and id attribute from ahref link
+                                preg_match('/class\s*?=\s*?("|\')(.*?)\1/ix', $match[0], $class_attr);
+                                $class_attr = empty($class_attr) ? '' : 'class="' . $class_attr[2] . '" ';
+                                preg_match('/id\s*?=\s*?("|\')(.*?)\1/ix', $match[0], $id_attr);
+                                $id_attr = empty($id_attr) ? '' : 'id="' . $id_attr[2] . '" ';
+                            // preprocess mailto link parts for further usage
+                                $search = array('@', '.', '_', '-'); $replace = array('F', 'Z', 'X', 'K');
+                                $email_address = str_replace($search, $replace, strtolower($match[2]));
+                                $email_subject = rawurlencode(html_entity_decode($match[3]));
+                            // create a random encryption key for the Caesar cipher
+                                mt_srand((double)microtime()*1000000);    // (PHP < 4.2.0)
+                                $shift = mt_rand(1, 25);
+                            // encrypt the email using an adapted Caesar cipher
+                                $encrypted_email = "";
+                                for($i = strlen($email_address) -1; $i > -1; $i--) {
+                                    if(preg_match('#[FZXK0-9]#', $email_address[$i], $characters)) {
+                                        $encrypted_email .= $email_address[$i];
+                                    } else {
+                                        $encrypted_email .= chr((ord($email_address[$i]) -97 + $shift) % 26 + 97);
+                                    }
+                                }
+                                $encrypted_email .= chr($shift + 97);
+                            // build the encrypted Javascript mailto link
+                                $mailto_link  = "<a {$class_attr}{$id_attr}href=\"javascript:mdcr('$encrypted_email','$email_subject')\">" .$match[5] ."</a>";
+                                return $mailto_link;
+                            } else {
+                            /** DO NOT USE JAVASCRIPT ENCRYPTION FOR MAILTO LINKS **/
+                            // as minimum protection, replace @ in the mailto part by (at)
+                            // dots are not transformed as this would transform my.name@domain.com into: my(dot)name(at)domain(dot)com
+                            // rebuild the mailto link from the subpatterns (at the missing characters " and </a>")
+                                return $match[1].str_replace('@', $aFilterSettings['at_replacement'],$match[2]).$match[3].'"'.$match[4].$match[5].'</a>';
+                            // if you want to protect both, @ and dots, comment out the line above and remove the comment from the line below
+                            // return $match[1] .str_replace($search, $replace, $match[2]) .$match[3] .'"' .$match[4] .$match[5] .'</a>';
+                            }
+                        break;
+                        default:
+                    // number of subpatterns do not match the requirements ... do nothing
+                            return $match[0];
+                        break;
+                    }
+                },
+    /* ************************************************************************** */
+                $content
+            );
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterEmail.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterFrontendJs.php
===================================================================
--- trunk/modules/output_filter/filters/filterFrontendJs.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterFrontendJs.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+/**
+ *
+ * @param string $content
+ * @return string
+ */
+function doFilterFrontendJs($sContent) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            global $database, $wb;
+            $sql = 'SELECT DISTINCT `module` FROM `'.TABLE_PREFIX.'sections` '
+                 . 'WHERE `page_id` = '.(int)$wb->page['page_id'];
+            if (($oModuleList = $database->query($sql))) {
+                while (($aModules = $oModuleList->fetchRow(MYSQLI_ASSOC)))
+                {
+                    $sFrontendJsFile = '/modules/'.$aModules['module'].'/frontend.js';
+                    if (!is_readable(WB_PATH.$sFrontendJsFile)) {
+                        $sFrontendJsFile = '/modules/'.$aModules['module'].'/js/frontend.js';
+                        if (!is_readable(WB_PATH.$sFrontendJsFile)) {
+                            continue;
+                        }
+                    }
+                    $sPattern = '/<head.*?<script.*?src\s*?=\s*?\"'.preg_quote(WB_URL.$sFrontendJsFile, '/').'\"[^>]*?>.*?<\/head>/si';
+                    if (preg_match($sPattern, $sContent)) {
+                        continue;
+                    }
+                    $sPattern = '/(<head.*<\/script>)(.*?<\/head>)/si';
+                    $sReplacement = '$1'."\n".'<script src="'.WB_URL.$sFrontendJsFile.'" type="text/javascript"></script>'.'$2';
+                    $sContent = preg_replace($sPattern, $sReplacement, $sContent);
+                }
+            }
+        }
+    return $sContent;
+}

Property changes on: trunk/modules/output_filter/filters/filterFrontendJs.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterJquery.php
===================================================================
--- trunk/modules/output_filter/filters/filterJquery.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterJquery.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/**
+ * protect email addresses (replace '@' and '.' and obfuscate address
+ * @param string $content
+ * @return string
+ */
+    function doFilterJquery($content) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            $scriptLink  = '';
+            if( !preg_match('/<head.*<.*src=\".*\/jquery-min.js.*>.*<\/head/siU', $content) ) {
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-min.js" type="text/javascript"></script>'."\n";
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-insert.js" type="text/javascript"></script>'."\n";
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/jquery-include.js" type="text/javascript"></script>'."\n";
+                  $sJqueryThemeRel =  '/modules/jquery/jquery_theme.js';
+                  $scriptLink .=  (is_readable(WB_PATH.$sJqueryThemeRel)
+                      ? "\t".'<script src="'.WB_URL.$sJqueryThemeRel.'" type="text/javascript"></script>'."\n"
+                      : "\t".'<script src="'.WB_URL.'/include/jquery/jquery_theme.js" type="text/javascript"></script>'."\n");
+                  $sJqueryTemplateRel =  '/templates/'.TEMPLATE.'/jquery_frontend.js';
+                  $scriptLink .=  (is_readable(WB_PATH.$sJqueryTemplateRel)
+                      ? "\t".'<script src="'.WB_URL.$sJqueryTemplateRel.'" type="text/javascript"></script>'."\n"
+                      : '');
+                  $regex = '/(.*)(<\s*?\/\s*?head\s*>.*)/isU';
+                  $replace = '$1'.$scriptLink.'$2';
+                  $content = preg_replace ($regex, $replace, $content);
+            }
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterJquery.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterLoadOnFly.php
===================================================================
--- trunk/modules/output_filter/filters/filterLoadOnFly.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterLoadOnFly.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+/**
+ *
+ * @param string $content
+ * @return string
+ */
+    function doFilterLoadOnFly($content) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            $scriptLink  = '';
+            if( !preg_match('/<head.*<.*src=\".*\/domReady.js.*>.*<\/head/siU', $content) ) {
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/domReady.js" type="text/javascript"></script>'."\n";
+            }
+            if( !preg_match('/<head.*<.*src=\".*\/LoadOnFly.js.*>.*<\/head/siU', $content) ) {
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/LoadOnFly.js" type="text/javascript"></script>'."\n";
+            }
+            if ($scriptLink!='') {
+                  $regex = '/(.*)(<\s*?\/\s*?head\s*>.*)/isU';
+                  $replace = '$1'.$scriptLink.'$2';
+                  $content = preg_replace ($regex, $replace, $content);
+            }
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterLoadOnFly.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterOpF.php
===================================================================
--- trunk/modules/output_filter/filters/filterOpF.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterOpF.php	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+/*
+ * make use of Thorn's OutputFilter Dashboard (OpF Dashboard)
+ * @copyright       Manuela v.d.Decken <manuela@isteam.de>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @param string &$content : reference to global $content
+ * @param string $sOptions :
+ * @return void
+ */
+    function doFilterOpF($content, $sOptions)
+    {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+        global $database;
+        $aOptions = array();
+            // Load OutputFilter functions
+            $sOpfFile = WB_PATH.'/modules/outputfilter_dashboard/functions.php';
+            if (is_readable($sOpfFile)) {
+                if (!function_exists('opf_apply_filters')) {
+                    require($sOpfFile);
+                }
+                parse_str($sOptions, $aOptions);
+                $aPresets = array('arg'=>'page', 'module'=>'', 'page_id'=>0, 'section_id'=>0);
+                $aOptions = array_merge($aPresets, $aOptions);
+                // use 'cache' instead of 'nocache' to enable page-cache.
+                // Do not use 'cache' in case you use dynamic contents (e.g. snippets)!
+                if (!isset($GLOBALS['opf_FILTERS'])) {
+                    // initialize filter at first run
+                    opf_controller('init');
+                }
+                $content = opf_controller(
+                    $aOptions['arg'],
+                    $content,
+                    $aOptions['module'],
+                    $aOptions['page_id'],
+                    $aOptions['section_id']
+                );
+            }
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterOpF.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterRelUrl.php
===================================================================
--- trunk/modules/output_filter/filters/filterRelUrl.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterRelUrl.php	(revision 2)
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Convert full qualified, local URLs into relative URLs
+ * @copyright       Manuela v.d.Decken <manuela@isteam.de>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @param string $sContent
+ * @return string
+ */
+    function doFilterRelUrl($sContent) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            $sAppUrl  = rtrim(str_replace('\\', '/', WB_URL), '/').'/';
+            $sAppPath = rtrim(str_replace('\\', '/', WB_PATH), '/').'/';
+            $sAppRel  = preg_replace('/^https?:\/\/[^\/]*(.*)$/is', '$1', $sAppUrl);
+            $sDocRoot = preg_replace('/^(.*?)'.preg_quote($sAppRel, '/').'$/', '$1', $sAppUrl);
+            $sContent = preg_replace_callback(
+                '/((?:href|src|action)\s*=\s*")([^\?\"]+?)/isU',
+                function ($aMatches) use ($sAppUrl, $sAppPath, $sAppRel) {
+                    $aMatches[2] = str_replace('\\', '/', $aMatches[2]);
+                    if ($aMatches[2][0] ='/') { $aMatches[2] = rtrim($sAppUrl, '/').$aMatches[2]; }
+                    $aMatches[2] = preg_replace('/^'.preg_quote($sAppUrl, '/').'/is', '', $aMatches[2]);
+                    $aMatches[2] = preg_replace('/(\.+\/)|(\/+)/', '/', $aMatches[2]);
+                    if (!is_readable($sAppPath.$aMatches[2])) {
+                    // in case of death link show original link
+                        return $aMatches[0];
+                    } else {
+                        return $aMatches[1].$sAppRel.$aMatches[2];
+                    }
+                },
+                $sContent
+            );
+/* Original SP7 Manu Fix */
+            // restore canonical relation links
+            $sContent = preg_replace_callback(
+                '/<link\s[^>]*?\"canonical\"[^>]*?>/isU',
+                function($aMatches) use ($sDocRoot) {
+                    return preg_replace(
+                        '/(href\s*=\s*\")([^\"]*?)/siU',
+                        '\1'.rtrim($sDocRoot, '/').'\2',
+                        $aMatches[0]
+                    );
+                },
+                $sContent
+            );
+        }
+        return $sContent;
+    }

Property changes on: trunk/modules/output_filter/filters/filterRelUrl.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterReplaceSysvar.php
===================================================================
--- trunk/modules/output_filter/filters/filterReplaceSysvar.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterReplaceSysvar.php	(revision 2)
@@ -0,0 +1,41 @@
+<?php
+/**
+ * doFilterReplaceSysvar
+ * @param string to modify
+ * @return string
+ * Convert the {SYSVAR:xxxx} Placeholders into their real value
+ */
+   function doFilterSysvarMedia($sContent) {
+      return doFilterReplaceSysvar($sContent);
+    }
+
+   function doFilterReplaceSysvar($sContent) {
+        $aReg = array (
+            'AppUrl' => WB_URL.'/',
+            'MediaDir' => trim(MEDIA_DIRECTORY, '/').'/',
+            'MEDIA_REL' => WB_URL.'/'.trim(MEDIA_DIRECTORY, '/')
+        );
+        $aSearches = array();
+        $aReplacements = array();
+        // search for all SYSVARs
+        if (preg_match_all('/\{SYSVAR\:([^\}]+)\}/sU', $sContent, $aMatches)) {
+            $aMatches = array_unique($aMatches[1], SORT_STRING);
+            foreach ($aMatches as $sMatch) {
+                $sTmp = '';
+                $aTmp = preg_split('/\./', $sMatch);
+                foreach ($aTmp as $sSysvar) {
+                    if (!isset($aReg[$sSysvar])) {
+                        $sTmp = '';
+                        break;
+                    }
+                    $sTmp .= $aReg[$sSysvar];
+                }
+                if ($sTmp) {
+                    $aSearches[] = '{SYSVAR:'.$sMatch.'}';
+                    $aReplacements[] = $sTmp;
+                }
+            }
+            $sContent = str_replace($aSearches, $aReplacements, $sContent);
+        }
+      return $sContent;
+   }

Property changes on: trunk/modules/output_filter/filters/filterReplaceSysvar.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterScriptVars.php
===================================================================
--- trunk/modules/output_filter/filters/filterScriptVars.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterScriptVars.php	(revision 2)
@@ -0,0 +1,34 @@
+<?php
+/**
+ *
+ * @param string $content
+ * @return string
+ */
+    function doFilterScriptVars($content) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            $scriptLink  = '';
+            if( !preg_match('/<head.*<.*src=\".*\/domReady.js.*>.*<\/head/siU', $content) ) {
+                  $scriptLink .= "\t".'<script src="'.WB_URL.'/include/jquery/domReady.js" type="text/javascript"></script>'."\n";
+            }
+            if (!preg_match('/<head.*<.*var WB_URL.*<\/head/siU', $content) ) {
+                  $scriptLink .= "\t"."<script type=\"text/javascript\">\n"
+                              ."\t\t"."<!--\n"
+                              ."\t\t"."var URL = '".WB_URL."';\n"
+                              ."\t\t"."var WB_URL = '".WB_URL."';\n"
+                              ."\t\t"."var THEME_URL = '".THEME_URL."';\n"
+                              ."\t\t"."var TEMPLATE_DIR = '".TEMPLATE_DIR."';\n"
+                              ."\t\t"."var TEMPLATE = '".TEMPLATE."';\n"
+                              ."\t\t"."var EDITOR = '".WYSIWYG_EDITOR."';\n"
+                              ."\t\t"."-->\n"
+                              ."\t"."</script>\n";
+            }
+            if ($scriptLink!='') {
+                  $regex = '/(.*)(<\s*?\/\s*?head\s*>.*)/isU';
+                  $replace = '$1'.$scriptLink.'$2';
+                  $content = preg_replace ($regex, $replace, $content);
+            }
+        }
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterScriptVars.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterSnippetJs.php
===================================================================
--- trunk/modules/output_filter/filters/filterSnippetJs.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterSnippetJs.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+/**
+ *
+ * @param string $content
+ * @return string
+ */
+function doFilterSnippetJs($sContent) {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {
+            global $database, $wb;
+            $sql = 'SELECT DISTINCT `directory` FROM `'.TABLE_PREFIX.'addons` '
+                 . 'WHERE `function`=\'snippet\'';
+            if (($oSnippetList = $database->query($sql))) {
+                while (($aSnippets = $oSnippetList->fetchRow(MYSQLI_ASSOC)))
+                {
+                    $sFrontendJsFile = '/modules/'.$aSnippets['directory'].'/frontend.js';
+                    if (!is_readable(WB_PATH.$sFrontendJsFile)) {
+                        $sFrontendJsFile = '/modules/'.$aSnippets['directory'].'/js/frontend.js';
+                        if (!is_readable(WB_PATH.$sFrontendJsFile)) {
+                            continue;
+                        }
+                    }
+                    $sPattern = '/<head.*?<script.*?src\s*?=\s*?\"'.preg_quote(WB_URL.$sFrontendJsFile, '/').'\"[^>]*?>.*?<\/head>/si';
+                    if (preg_match($sPattern, $sContent)) {
+                        continue;
+                    }
+                    $sPattern = '/(<head.*<\/script>)(.*?<\/head>)/si';
+                    $sReplacement = '$1'.'<script src="'.WB_URL.$sFrontendJsFile.'" type="text/javascript"></script>'.'$2';
+                    $sContent = preg_replace($sPattern, $sReplacement, $sContent);
+                }
+            }
+        }
+    return $sContent;
+}

Property changes on: trunk/modules/output_filter/filters/filterSnippetJs.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/filters/filterWbLink.php
===================================================================
--- trunk/modules/output_filter/filters/filterWbLink.php	(nonexistent)
+++ trunk/modules/output_filter/filters/filterWbLink.php	(revision 2)
@@ -0,0 +1,51 @@
+<?php
+/*
+ * replace all "[wblink{page_id}]" with real links
+ * @copyright       Manuela v.d.Decken <manuela@isteam.de>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @param string $content : content with tags
+ * @return string content with links
+ */
+    function doFilterWbLink($content)
+    {
+        $aFilterSettings = getOutputFilterSettings();
+        $key = preg_replace('=^.*?filter([^\.\/\\\\]+)(\.[^\.]+)?$=is', '\1', __FILE__);
+        if ($aFilterSettings[$key]) {}
+        global $database;
+            $pattern = '/\[wblink([0-9]+)\]/isU';
+            if (preg_match_all($pattern, $content, $aMatches, PREG_SET_ORDER))
+            {
+                $aSearchReplaceList = array();
+                foreach ($aMatches as $aMatch) {
+                     // collect matches formatted like '[wblink123]' => 123
+                    $aSearchReplaceList[strtolower($aMatch[0])] = $aMatch[1];
+                }
+                // build list of PageIds for SQL query
+                $sPageIdList = implode(',', $aSearchReplaceList); // '123,124,125'
+                // replace all PageIds with '#' (stay on page death link)
+                array_walk($aSearchReplaceList, function(&$value, $index){ $value = '#'; });
+                $sql = 'SELECT `page_id`, `link` FROM `'.TABLE_PREFIX.'pages` '
+                     . 'WHERE `page_id` IN('.$sPageIdList.')';
+                if (($oPages = $database->query($sql))) {
+                    while (($aPage = $oPages->fetchRow(MYSQLI_ASSOC))) {
+                        $aPage['link'] = ($aPage['link']
+                                         ? PAGES_DIRECTORY.$aPage['link'].PAGE_EXTENSION
+                                         : '#');
+                        // collect all search-replace pairs with valid links
+                        if (is_readable(WB_PATH.$aPage['link'])) {
+                            // replace death link with found and valide link
+                            $aSearchReplaceList['[wblink'.$aPage['page_id'].']'] =
+                                WB_URL.$aPage['link'];
+                        }
+                    }
+                }
+                // replace all found [wblink**] tags with their urls
+                $content = str_ireplace(
+                    array_keys($aSearchReplaceList),
+                    $aSearchReplaceList,
+                    $content
+                );
+            }
+
+        return $content;
+    }

Property changes on: trunk/modules/output_filter/filters/filterWbLink.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/index.php
===================================================================
--- trunk/modules/output_filter/index.php	(nonexistent)
+++ trunk/modules/output_filter/index.php	(revision 2)
@@ -0,0 +1,51 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @copyright       Manuela v.d.Decken <manuela@isteam.de>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3-SP4 and higher
+ * @requirements    PHP 5.3.6 and higher
+ *
+ */
+/* ****************************************************************** */
+/**
+ * execute the frontend output filter
+ * @param  string $sContent actual content
+ * @return string modified content
+ */
+    function executeFrontendOutputFilter($sContent)
+    {
+        if (!function_exists('OutputFilterApi')) {
+            include __DIR__.'/OutputFilterApi.php';
+        }
+        return OutputFilterApi(
+            array(
+                'WbLink',
+                'ReplaceSysvar',
+                'CssToHead',
+/* ****************************************************************** */
+/* *** from here insert ordered requests of individual filters    *** */
+/* ***                                                            *** */
+/**/
+                'ScriptVars',
+                'LoadOnFly',
+                'Jquery',
+                'SnippetJs',
+                'FrontendJs',
+                'Droplets',
+                'Email',
+                'OpF',
+/* ***                                                            *** */
+/* *** end of individual filters                                  *** */
+/* ****************************************************************** */
+                'WbLink',
+                'ReplaceSysvar',
+                'RelUrl',
+            ),
+            $sContent
+        );
+    }

Property changes on: trunk/modules/output_filter/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/info.php
===================================================================
--- trunk/modules/output_filter/info.php	(nonexistent)
+++ trunk/modules/output_filter/info.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @copyright       WebsiteBaker Org. e.V.
+ * @author          Christian Sommer
+ * @author          Dietmar Wöllbrink <dietmar.woellbrink@websitebaker.org>
+ * @author          Manuela v.d.Decken <manuela@isteam.de>
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3-SP7 and higher
+ * @requirements    PHP 5.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+$module_directory   = 'output_filter';
+$module_name        = 'Output Filter Frontend v1.1.7';
+$module_function    = 'tool';
+$module_version     = '1.1.7';
+$module_platform    = '2.10.0';
+$module_author      = 'Christian Sommer(doc), Manuela v.d. Decken(DarkViper), Dietmar Wöllbrink(luisehahne)';
+$module_license     = 'GNU General Public License';
+$module_description = 'This Add-On allows to filter the output directly before it is sent to the browser. '
+                    . 'Each individual filter can be activated/deactivated by the ACP.'
+                    . 'To add a new filter simply create a new filter file in \'modules/output_filter/filters\' '
+                    . 'and add it to the \'individual\' section of \'modules/output_filter/index.php\'. '
+                    . '';

Property changes on: trunk/modules/output_filter/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/install-struct.sql
===================================================================
--- trunk/modules/output_filter/install-struct.sql	(nonexistent)
+++ trunk/modules/output_filter/install-struct.sql	(revision 2)
@@ -0,0 +1,24 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 29. Jan 2016 um 19:55
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+--
+-- Datenbank: `dw283-sp3db1`
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_output_filter`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_output_filter`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_output_filter` (
+  `name` varchar(255){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `value` text{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`name`)
+){TABLE_ENGINE=MyISAM};
+

Property changes on: trunk/modules/output_filter/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/install.php
===================================================================
--- trunk/modules/output_filter/install.php	(nonexistent)
+++ trunk/modules/output_filter/install.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * install.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'install';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/output_filter/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/js/LoadOnFly.js
===================================================================
--- trunk/modules/output_filter/js/LoadOnFly.js	(nonexistent)
+++ trunk/modules/output_filter/js/LoadOnFly.js	(revision 2)
@@ -0,0 +1,300 @@
+/**
+ * http://molily.de/js/
+ * Cross browser addEvent function by John Resig
+ * http://ejohn.org/blog/flexible-javascript-events/
+ * some samples
+ *    addEvent( document.getElementById('foo'), 'click', doSomething );
+ *    addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
+ *
+ */
+/**
+ * Cross Browser helper to addEventListener.
+ * http://webintersect.com/articles/72/add-event-listener-to-dynamic-elements
+ *
+ * @param {HTMLElement} obj The Element to attach event to.
+ * @param {string} evt The event that will trigger the binded function.
+ * @param {function(event)} fnc The function to bind to the element.
+ * @return {boolean} true if it was successfuly binded.
+ */
+var addEvent = function (obj, evt, fnc) {
+  // W3C model
+  if (obj.addEventListener) {
+    obj.addEventListener(evt, fnc, false);
+    return true;
+  }
+  // Microsoft model
+   else if (obj.attachEvent) {
+    return obj.attachEvent('on' + evt, fnc);
+  }
+  // Browser don't support W3C or MSFT model, go on with traditional
+   else {
+    evt = 'on' + evt;
+    if (typeof obj[evt] === 'function') {
+      // Object already has a function on traditional
+      // Let's wrap it with our own function inside another function
+      fnc = (function (f1, f2) {
+        return function () {
+          f1.apply(this, arguments);
+          f2.apply(this, arguments);
+        };
+      }) (obj[evt], fnc);
+    }
+    obj[evt] = fnc;
+    return true;
+  }
+  return false;
+};
+/*****************************************************************************/
+/**
+ * sample
+ *   removeEvent( object, eventType, function );
+ *
+ */
+function removeEvent(obj, ev, fn) {
+  if (obj.detachEvent) {
+    obj.detachEvent('on' + ev, obj[ev + fn]);
+    obj[ev + fn] = null;
+  } else
+  obj.removeEventListener(ev, fn, false);
+}
+/*****************************************************************************/
+
+var getBrowser = (function () {
+  var navigatorObj = navigator.appName,
+  userAgentObj = navigator.userAgent,
+  matchVersion;
+  var match = userAgentObj.match(/(opera|opr|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
+  if (match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) {
+    match[2] = matchVersion[1];
+  }
+  //mobile
+
+  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
+    var mobile;
+    return match ? [
+      match[1],
+      match[2],
+      mobile
+    ] : [
+      navigatorObj,
+      navigator.appVersion,
+      mobile
+    ];
+  }
+  // web browser
+
+  return match ? [
+    match[1],
+    match[2]
+  ] : [
+    navigatorObj,
+    navigator.appVersion,
+    '-?'
+  ];
+}) ();
+// forEach method, could be shipped as part of an Object Literal/Module
+var forEach = function (array, callback, scope) {
+  for (var i = 0; i < array.length; i++) {
+    callback.call(scope, i, array[i]); // passes back stuff we need
+  }
+};
+function each(elm, fn) {
+  for (var i = 0, l = elm.length; i < l; i++) {
+    fn.call(elm, elm[i], i);
+  }
+}
+function doSomething(elm) {
+  if ((typeof elm !== 'undefined') || elm) console.log(elm);
+}
+/**
+ *  http://www.axel-hahn.de/blog/2015/01/21/javascript-schnipsel-html-strippen/
+ */
+
+function strip_tags(s) {
+  return s.replace(/<[^>]*>/g, '');
+}
+/**                                                                 
+ *         discuss at: http:phpjs.org/functions/dirname/
+ *               http: kevin.vanzonneveld.net
+ *        original by: Ozh
+ *        improved by: XoraX (http:www.xorax.info)
+ *          example 1: dirname('/etc/passwd');
+ *          returns 1: '/etc'
+ */
+
+var dirname = function (path) {
+  var tmp = path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '');
+  return tmp;
+};
+/**
+ * http://durhamhale.com/blog/javascript-version-of-phps-str-replace-function
+ */
+var str_replace = function (search, replace, string) {
+  return string.split(search).join(replace);
+};
+/**
+ *  trim, rtrim, ltrim
+ *  http://coursesweb.net/javascript/trim-rtrim-ltrim-javascript_cs
+ */
+var trim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g')  : new RegExp('^' + chr + '+|' + chr + '+$', 'g');
+  return str.replace(rgxtrim, '');
+};
+var rtrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('\\s+$')  : new RegExp(chr + '+$');
+  return str.replace(rgxtrim, '');
+};
+var ltrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+')  : new RegExp('^' + chr + '+');
+  return str.replace(rgxtrim, '');
+};
+var confirm_link = function (message, url) { //  class="alert rounded"
+  if (confirm(message)) location.href = url;
+};
+var showMessage = (function (txt, sel) {
+  var result = window.document.getElementById('messages');
+  if (!result) {
+    return false;
+  }
+  var elm = document.createElement('P');
+  elm.setAttribute('class', sel + ' rounded');
+  elm.appendChild(document.createTextNode(txt));
+  result.appendChild(elm);
+});
+/**
+ *  http://www.javascriptkit.com/dhtmltutors/treewalker.shtml
+ *
+ */
+/********************************************************************************************************/
+var LoadOnFly = (function ( nodeName, file ) {
+    'use strict';
+    if( (typeof file === 'undefined') ) {
+      return false;
+    }
+    if ( !document.doctype ) {
+      return false;
+    }
+  /*
+  var nodeDoctype = document.implementation.createDocumentType(
+   'html','',''
+  );
+      document.replaceChild(nodeDoctype, document.doctype);
+  } else {
+      document.insertBefore(nodeDoctype, document.childNodes[0]);
+  }
+*/
+  //    var LoadOnFly  = function (nodeName, url) {
+
+    var jsRegex = /.js$/gi;
+    var cssRegex = /.css$/gi;
+    var scripts = {
+    };
+  // console.info(' 0.' + file );fileExtension = file.replace(/^.*\./, '');
+    var url = file;
+    var urlExt = trim(file.replace(/^.*\./, ''));
+    var NodeList = null;
+    var len = 0;
+    var node = null;
+    var str = 'undefined';
+    var done = false;
+  //console.info( urlExt + ' = 1.) ' + url);
+    if ((typeof url !== 'undefined') && (urlExt === 'js')) {
+  //    console.info(urlExt + ' = 1.) ' + url);
+      scripts[url] = false;
+      switch (nodeName) {
+        case 'body':
+          NodeList = document.body.querySelectorAll('SCRIPT');
+          break;
+        default:
+          NodeList = document.head.querySelectorAll('SCRIPT');
+          break;
+      }
+      if (NodeList) {
+        len = NodeList.length - 1;
+    }
+  //console.info(NodeList);
+  // console.info(' JS ' + url);
+
+    try {
+     var js = document.createElement('SCRIPT');
+      js.setAttribute('type', 'text/javascript'); // optional, if not a html5 node
+      js.setAttribute('src', url); // src setzen
+      js.setAttribute('charset', 'UTF-8');
+//      js.setAttribute("async", true); // HTML5 Asyncron attribute
+      done = false;
+      if (nodeName == 'body') {
+        node = window.document.body.querySelectorAll('SCRIPT') [len];
+        node.parentNode.appendChild( js );
+console.info( js );
+        //              script.parentNode.insertBefore(js,script);
+      } else {
+        node = window.document.head.querySelectorAll('SCRIPT') [len];
+        node.parentNode.appendChild( js );
+      }
+    } catch (e) {
+       str = '<script type=\'text/javascript\' src=\'' + url + '\' charset="UTF-8"><' + '/script>';
+      document.write(str);
+    }
+console.info( node );
+  }
+
+// load css only within head
+if ((typeof url !== 'undefined') && (urlExt === 'css')) {
+    //console.info(urlExt + ' = 2.) ' + url);
+    scripts[url] = false;
+    try {
+        var css = document.createElement('LINK');
+        len = 0;
+        css.setAttribute('type', 'text/css');
+        css.setAttribute('rel', 'stylesheet');
+        css.setAttribute('media', 'all');
+        css.setAttribute('href', url);
+        NodeList = window.document.querySelectorAll('LINK');
+        if (NodeList) {
+          len = NodeList.length - 1;
+        };
+        // insert after last link element if exist otherwise before first script
+        if (len > - 1) {
+          node = window.document.head.querySelectorAll('LINK') [len];
+          // console.info( len );
+        //  console.info(node);
+          //    return false;
+          node.parentNode.insertBefore(css, node.nextSibling);
+          // console.info('CSS ' + url);
+        } else {
+          node = window.document.head.querySelectorAll('SCRIPT') [0];
+          node.parentNode.insertBefore(css, node);
+        }
+    } catch (e) {
+        str = '<link href=\'' + url + '\' media="all" rel="stylesheet" />';
+        document.write(str);
+    }
+}
+// console.info( url );
+//      showMessage(url);
+
+});
+/**
+ * 
+    document.onreadystatechange = function () {
+        if (document.readyState == "interactive") {
+console.info( 'Start readyState.interactive' );
+        }
+    }
+
+    // Alternativ zu load event
+    document.onreadystatechange = function () {
+        if (document.readyState == "complete") {
+console.info( 'Start readyState.complete' );
+        }
+    }
+
+
+window.onload = function() {
+   addEvent(document, "DOMContentLoaded", LoadOnFly);
+console.info( 'Start window.onload' );
+};
+ */
+/*
+undefined
+*/
Index: trunk/modules/output_filter/js/domReady.js
===================================================================
--- trunk/modules/output_filter/js/domReady.js	(nonexistent)
+++ trunk/modules/output_filter/js/domReady.js	(revision 2)
@@ -0,0 +1,147 @@
+// add event cross browser
+function addEvent(elem, event, fn) {
+    if (elem.addEventListener) {
+        elem.addEventListener(event, fn, false);
+    } else {
+        elem.attachEvent("on" + event, function() {
+            // set the this pointer same as addEventListener when fn is called
+            return(fn.call(elem, window.event));   
+        });
+    }
+}
+
+
+var logs = [];
+var eventSet = false;
+var loaded = false;
+function log(str) {
+    
+    if (loaded) {
+        output(str);
+    } else {
+        logs.push(str);
+    }
+
+    function output(str) {
+        var o = document.getElementById("log");
+        var div = document.createElement("div");
+        div.appendChild(document.createTextNode(str));
+        o.appendChild(div);
+    }
+    
+    if (!eventSet) {
+        eventSet = true;
+        addEvent(window, "load", function() {
+            loaded = true;
+            for (var i = 0; i < logs.length; i++) {
+                output(logs[i]);
+            }
+            logs = [];
+        });
+    }    
+}
+
+(function(funcName, baseObj) {
+    // The public function name defaults to window.domReady
+    // but you can pass in your own object and own function name and those will be used
+    // if you want to put them in a different namespace
+    funcName = funcName || "domReady";
+    baseObj = baseObj || window;
+    var readyList = [];
+    var readyFired = false;
+    var readyEventHandlersInstalled = false;
+    
+    // call this when the document is ready
+    // this function protects itself against being called more than once
+    function ready() {
+        if (!readyFired) {
+            // this must be set to true before we start calling callbacks
+            readyFired = true;
+            for (var i = 0; i < readyList.length; i++) {
+                // if a callback here happens to add new ready handlers,
+                // the domReady() function will see that it already fired
+                // and will schedule the callback to run right after
+                // this event loop finishes so all handlers will still execute
+                // in order and no new ones will be added to the readyList
+                // while we are processing the list
+                readyList[i].fn.call(window, readyList[i].ctx);
+            }
+            // allow any closures held by these functions to free
+            readyList = [];
+        }
+    }
+    
+    function readyStateChange() {
+    if ( document.readyState === "complete" ) {
+            ready();
+        }
+    }
+    
+    // This is the one public interface
+    // domReady(fn, context);
+    // the context argument is optional - if present, it will be passed
+    // as an argument to the callback
+    baseObj[funcName] = function(callback, context) {
+        // if ready has already fired, then just schedule the callback
+        // to fire asynchronously, but right away
+        if (readyFired) {
+            setTimeout(function() {callback(context);}, 1);
+            return;
+        } else {
+            // add the function and context to the list
+            readyList.push({fn: callback, ctx: context});
+        }
+        // if document already ready to go, schedule the ready function to run
+        if (document.readyState === "complete") {
+            setTimeout(ready, 1);
+        } else if (!readyEventHandlersInstalled) {
+            // otherwise if we don't have event handlers installed, install them
+            if (document.addEventListener) {
+                // first choice is DOMContentLoaded event
+                document.addEventListener("DOMContentLoaded", ready, false);
+                // backup is window load event
+                window.addEventListener("load", ready, false);
+            } else {
+                // must be IE
+                document.attachEvent("onreadystatechange", readyStateChange);
+                window.attachEvent("onload", ready);
+            }
+            readyEventHandlersInstalled = true;
+        }
+    }
+})("domReady", window);
+
+function confirm_link(message, url) {
+    if(confirm(message)) location.href = url;
+}
+
+
+/**
+ * 
+// test basic functionality
+domReady(function() {
+    document.body.appendChild(document.createTextNode("Hello Text 1"));
+    // test adding new domReady handler from a domReady callback
+    domReady(function() {
+        document.body.appendChild(document.createTextNode(", Hello Text 2"));
+    });
+});
+
+// test finding an ID in the document
+domReady(function() {
+    document.getElementById("test").innerHTML = "Hello ID";
+});
+
+// test calling domReady after window load and
+// domReady has already fired
+addEvent(window, "load", function() {
+    setTimeout(function() {
+    document.body.appendChild(document.createTextNode(", Hello Text 2.5"));
+        
+        domReady(function(arg) {
+            document.body.appendChild(document.createTextNode(arg));
+        }, ", Hello Text 3");
+    }, 1);
+});
+})();
+ */
Index: trunk/modules/output_filter/js/index.php
===================================================================
--- trunk/modules/output_filter/js/index.php	(nonexistent)
+++ trunk/modules/output_filter/js/index.php	(revision 2)
@@ -0,0 +1,20 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+exit();
\ No newline at end of file

Property changes on: trunk/modules/output_filter/js/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/js/mdcr.js
===================================================================
--- trunk/modules/output_filter/js/mdcr.js	(nonexistent)
+++ trunk/modules/output_filter/js/mdcr.js	(revision 2)
@@ -0,0 +1,5 @@
+﻿/**
+ * @version         $Id: mdcr.js 65 2017-03-03 21:38:16Z manu $
+ */
+
+function mdcr(d,c){location.href=sdcr(d,c)}function sdcr(i,k){var h=i.charCodeAt(i.length-1)-97;var n="";var l;var j;for(var m=i.length-2;m>-1;m--){if(i.charCodeAt(m)<97){switch(i.charCodeAt(m)){case 70:j=64;break;case 90:j=46;break;case 88:j=95;break;case 75:j=45;break;default:j=i.charCodeAt(m);break}n+=String.fromCharCode(j)}else{l=(i.charCodeAt(m)-97-h)%26;l+=(l<0||l>25)?+26:0;n+=String.fromCharCode(l+97)}}return"mailto:"+n+k};
\ No newline at end of file
Index: trunk/modules/output_filter/lib/Helpers.php
===================================================================
--- trunk/modules/output_filter/lib/Helpers.php	(nonexistent)
+++ trunk/modules/output_filter/lib/Helpers.php	(revision 2)
@@ -0,0 +1,109 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+class Helpers
+{
+
+    protected $oDb  = null;
+    protected $oReg = null;
+    protected $oApp = null;
+    protected $bSqlStatement = false;
+    protected $sFilterPath = '';
+    protected $aFilters = array();
+    protected $aInsertSql = array();
+    
+    
+    public function __construct(  ){
+        $this->initialize();
+    }
+
+    public function __set($name, $value){
+        throw new InvalidArgumentException('tried to set readonly or nonexisting property [ '.$name.' }!! ');
+    }
+
+    public function __get($name){
+        throw new InvalidArgumentException('tried to get nonexisting property [ '.$name.' }!! ');
+    }
+
+    public function set($name, $value){
+        $this->$name = $value;
+    }
+
+    public function get($name){
+        if(is_array($this->$name)){ 
+        return implode("\n", $this->$name);
+        } else { return $this->$name; }
+    }
+
+    protected function initialize() 
+    {
+        $this->sFilterPath = dirname(__DIR__).'/filters/';
+        $this->aFilters    = $this->buildFilterArray();
+        $this->aInsertSql  = $this->buildFilterArray(true);
+    }
+
+    protected function getFilterInFolder(  ) 
+    {
+        return glob($this->sFilterPath.'*');
+    }
+
+    protected function buildFilterArray( $isSql = false ) {
+        $i=1;
+        $aFiles = $this->getFilterInFolder();
+        $aFilters = array();
+        $aInstallData  = array();
+        $aInstallData[] = 'INSERT INTO `{TABLE_PREFIX}mod_output_filter` (`name`, `value`) VALUES'."\n";
+        foreach ( $aFiles  as $Filter) {
+            $sFileName = basename($Filter);
+            $key = preg_replace("/\.[^.]+$/", "", $sFileName);
+            $aFilters[$key] = true;
+            $sFilter = '(\''.$key.'\', \'1\')';
+            if( $i < sizeof($aFiles) ) { $sFilter .= ', '."\n"; }else{ $sFilter .= ';'; }
+            $i++;
+            $aInstallData[] = $sFilter;
+        
+        }
+        return ( $isSql ? $aInstallData : $aFilters );
+    }
+
+} // end class Helpers
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+
+$oHelpers = new Helpers();
+echo $oHelpers->get( 'sFilterPath' ).'<br />';
+echo $oHelpers->get( 'aInsertSql' ).'<br />';
+/**
+echo $oHelpers;
+ * 
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />'; 
+print_r( $oHelpers ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die(); 
+ */

Property changes on: trunk/modules/output_filter/lib/Helpers.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/lib/example.lib
===================================================================
--- trunk/modules/output_filter/lib/example.lib	(nonexistent)
+++ trunk/modules/output_filter/lib/example.lib	(revision 2)
@@ -0,0 +1,18 @@
+<?php
+// a placeholder file only
+/*
+in this folder you can place library files for your addon.
+some little rules:
+
+naming conventions:
+- use prefix "m_AddonName_FunctionName()"
+- "m_OutputFilter_lib_"
+- use '.lib' as only one extension inside this folder
+coding hints:
+- take care for sideeffects. place functions or classes here only
+- do not declare variables outside of functions/classes
+- do not declare constants outside of classes
+- do not place executable code outside of functions/classes
+
+
+*/

Property changes on: trunk/modules/output_filter/lib/example.lib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/save.php
===================================================================
--- trunk/modules/output_filter/save.php	(nonexistent)
+++ trunk/modules/output_filter/save.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * save.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'save';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/output_filter/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/templates/default/css/frontend.css
===================================================================
--- trunk/modules/output_filter/templates/default/css/frontend.css	(nonexistent)
+++ trunk/modules/output_filter/templates/default/css/frontend.css	(revision 2)
@@ -0,0 +1 @@
+@charset "utf-8"; 
Index: trunk/modules/output_filter/templates/default/view.htt
===================================================================
--- trunk/modules/output_filter/templates/default/view.htt	(nonexistent)
+++ trunk/modules/output_filter/templates/default/view.htt	(revision 2)
@@ -0,0 +1,9 @@
+<!-- BEGIN main_block -->
+
+<!-- available replacements
+    URL
+    HEIGHT
+    NOTICE
+-->
+
+<!-- END main_block -->
Index: trunk/modules/output_filter/templates/default/view.twig
===================================================================
--- trunk/modules/output_filter/templates/default/view.twig	(nonexistent)
+++ trunk/modules/output_filter/templates/default/view.twig	(revision 2)
@@ -0,0 +1,9 @@
+{#
+- available replacements
+    URL
+    HEIGHT
+    NOTICE
+#}
+
+
+{# end of file #}

Property changes on: trunk/modules/output_filter/templates/default/view.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/css/backend.css
===================================================================
--- trunk/modules/output_filter/themes/default/css/backend.css	(nonexistent)
+++ trunk/modules/output_filter/themes/default/css/backend.css	(revision 2)
@@ -0,0 +1,96 @@
+@charset "utf-8";
+#filter_and_tables {
+  width: 90%;
+  margin: auto;
+}
+#selectOutputFilters {
+  width: 49%;
+  float: left;
+}
+#selectFilterContent {
+  width: 49%;
+  float: left;
+  margin-top: 2.525em;
+}
+
+.filter_table_list_container {
+  display: inline-block;
+  max-height: 20.225em;
+  overflow-y: scroll;
+  width: 23.525em;
+
+}
+.filteroptions h3 h3 {
+  border-bottom: 1px solid #999;
+  font-size: 110%;
+}
+input, select {
+  outline: medium none;
+}
+div.filter_table_list_container table {
+  border-collapse: collapse;
+  width: 100%;
+}
+.filter_table_select th {
+  text-align: center;
+  vertical-align: middle;
+}
+.filter_table_select table caption, 
+.filter_table_select table th,
+.filter_table_select table td {
+  margin: 0.1em;
+  padding: 0.3em;
+  text-shadow: 0 1px 0 #fff;
+  vertical-align: top;
+}
+.filter_table_name {
+  font-weight: bold;
+  width: 100%;
+}
+.filter_table_title thead th {
+  border-right: 1px solid #fff;
+}
+.filter_table_title {
+  margin-top: 1.525em;
+  width: 19.525em;
+  font-size: 1.225em;
+  
+}
+.filter_table_title thead tr {
+  background: rgba(0, 0, 0, 0) -moz-linear-gradient(center top , #ffffff, #cccccc) repeat scroll 0 0;
+  color: #000;
+  font-weight: bold;
+  line-height: 1.925em;
+}
+.msg-box {
+  background: #e5ffe6 none repeat scroll 0 0;
+  border: 0.225em solid #009900;
+  color: #336600;
+  margin-bottom: 1em;
+  padding: 0.63em;
+  text-align: center;
+}
+.error-box {
+    background: #ffeeee none repeat scroll 0 0;
+    border: 0.225em solid #884444;
+    color: #440000;
+    margin-bottom: 1em;
+    padding: 0.63em;
+    text-align: center;
+}
+.info-box {
+    background: #FFFFFF none repeat scroll 0 0;
+    border: 0.225em solid #374F68;
+    color: #497698;
+    margin-bottom: 1em;
+    padding: 0.63em;
+    text-align: center;
+}
+.msg-box p, .error-box p {
+    font-size: 120%;
+}
+
+div.filter_table_list_container table.filter_table_select tbody tr { line-height: 1.225em; background: #CCD5DD; }
+div.filter_table_list_container table.filter_table_select tbody tr:nth-child(odd) { background: #FFFFFF; }
+div.filter_table_list_container table.filter_table_select tbody tr:hover { background: #E1F8B3; cursor: default; }
+
Index: trunk/modules/output_filter/themes/default/js/settings.js
===================================================================
--- trunk/modules/output_filter/themes/default/js/settings.js	(nonexistent)
+++ trunk/modules/output_filter/themes/default/js/settings.js	(revision 2)
@@ -0,0 +1,25 @@
+/**/
+function toggle_wbmailer_auth( elm ) {
+        if ( elm.checked == true ) {
+            elm.checked = false;
+            document.getElementById('row_wbmailer_smtp_username').style.display = 'none';
+            document.getElementById('row_wbmailer_smtp_password').style.display = 'none';
+        }
+        else  {
+            elm.checked = true;
+            document.getElementById('row_wbmailer_smtp_username').style.display = 'block';
+            document.getElementById('row_wbmailer_smtp_password').style.display = 'block';
+        }
+console.info(elm);
+}
+
+  domReady(function() {
+
+    var smtpPort = document.getElementById("wbmailer_smtp_port");
+    if ( smtpPort ){
+        smtpPort.addEventListener("click", function() {
+            toggle_wbmailer_secure( smtpPort );
+        }, false);
+    }
+
+});
Index: trunk/modules/output_filter/themes/default/languages/DA.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/DA.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/DA.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING'] = 'Indstillinger: Output-filter';
+$MOD_MAIL_FILTER['HOWTO'] = 'Du kan konfigurere output-filteret med indstillingerne nedenfor.<strong>Tip: </strong>Mailadresser kan krypteres vedhj&Atilde;&brvbar;lp af en  Javascript-funktion. For at g&Atilde;re brug af denne indstilling, skal du tilf&Atilde;je PHP-koden <code style="background:#FFA;color:#900;"><?php register_frontend_modfiles(js);?></code> til <head> sektionnen af  index.php i din template (layout-skabelon). Uden denne &Atilde;&brvbar;ndring vil kun @-tegnet i email-adressen blive erstattet.';
+$MOD_MAIL_FILTER['WARNING']                = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF'] = 'Email grundindstillinger';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with  relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER'] = 'Filtrer emailadresser i tekst';
+$MOD_MAIL_FILTER['MAILTO_FILTER'] = 'Filtrer emailadresser i mailto-links';
+$MOD_MAIL_FILTER['ENABLED'] = 'Aktiveret';
+$MOD_MAIL_FILTER['DISABLED'] = 'Deaktiveret';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF'] = 'Email erstatninger';
+$MOD_MAIL_FILTER['AT_REPLACEMENT'] = 'Erstat "@" med';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT'] = 'Erstat "." med';
+

Property changes on: trunk/modules/output_filter/themes/default/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/DE.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/DE.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/DE.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Deutsche Modulbeschreibung
+$module_description                     = 'Dieses Modul erlaubt die Filterung von Inhalten vor der Anzeige im Frontendbereich. Unterst&uuml;zt die Filterung von Emailadressen in mailto Links und Text.';
+
+// Ueberschriften und Textausgaben
+$MOD_MAIL_FILTER['HEADING']              = 'Optionen: Ausgabe Filterung';
+$MOD_MAIL_FILTER['HOWTO']                = '&Uuml;ber nachfolgende Optionen kann die Ausgabefilterung konfiguriert werden.<b>Tipp: </b>Mailto Links k&ouml;nnen mit einer Javascript Routine verschl&uuml;sselt werden. Um diese Option zu aktivieren muss der PHP Befehl <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(\'js\');?&gt;</code> im &lt;head&gt; Bereich der index.php Ihres Templates eingebunden werden. Ohne diese &Auml;nderungen wird nur das @ Zeichen im mailto: Teil ersetzt.';
+$MOD_MAIL_FILTER['WARNING']              = '';
+
+// Text von Form Elementen
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Filter aktivieren/deaktivieren';
+$MOD_MAIL_FILTER['BASIC_CONF']            = 'Grundeinstellungen';
+$MOD_MAIL_FILTER['SYS_REL']                = 'Frontendausgabe mit relativen Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER']        = 'Filtere E-Mail Adressen im Text';
+$MOD_MAIL_FILTER['MAILTO_FILTER']        = 'Filtere E-Mail Adressen in mailto Links';
+$MOD_MAIL_FILTER['ENABLED']                = 'Aktiviert';
+$MOD_MAIL_FILTER['DISABLED']            = 'Ausgeschaltet';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']    = 'Email Ersetzungen';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']        = 'Ersetze "@" durch';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']        = 'Ersetze "." durch';

Property changes on: trunk/modules/output_filter/themes/default/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/EN.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/EN.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/EN.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING']    = 'Options: Output Filter';
+$MOD_MAIL_FILTER['HOWTO'] = 'You can configure the output filtering with the options below.<b>Tip: </b>Mailto links can be encrypted by a Javascript function. To make use of this option, one needs to add the PHP code <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(\'js\');?&gt;</code> into the &lt;head&gt; section of the index.php of your template. Without this modification, only the @ character in the mailto part will be replaced.';
+$MOD_MAIL_FILTER['WARNING']    = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF'] = 'Basic Email Configuration';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with  relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER'] = 'Filter Email addresses in text';
+$MOD_MAIL_FILTER['MAILTO_FILTER'] = 'Filter Email addresses in mailto links';
+$MOD_MAIL_FILTER['ENABLED']    = 'Enabled';
+$MOD_MAIL_FILTER['DISABLED'] = 'Disabled';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']= 'Email Replacements';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']    = 'Replace "@" by';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']    = 'Replace "." by';

Property changes on: trunk/modules/output_filter/themes/default/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/FR.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/FR.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/FR.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+//Module Description
+$module_description = 'Ce module g&egrave;re le filtrage des donn&eacute;es avant affichage &agrave; l&apos;utilisateur. Permets de filtrer les liens mailto et les adresses emails.';
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING'] = 'Options: Output Filter';
+$MOD_MAIL_FILTER['HOWTO'] = 'Vous pouvez configurer le filtrage des donn&eacute;es avant affichage gr&acirc;ce aux options ci-dessous.<strong>Conseil: </strong>Les liens Mailto peuvent &ecirc;tre crypt&eacute;s &agrave; l&apos;aide d&apos;une fonction Javascript. Pour utiliser cette fonctionnalit&eacute;, vous devez ajouter le code PHP <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(&apos;js&apos;);?&gt;</code> dans la partie &lt;head&gt; de index.php de votre fichier mod&egrave;le. Sans cette modification, seulement le caract&egrave;re @ sera remplac&eacute; dans le champ mailto.';
+$MOD_MAIL_FILTER['WARNING'] = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF'] = 'Configuration de base des Emails';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with  relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER'] = 'Filtrer le texte des Emails';
+$MOD_MAIL_FILTER['MAILTO_FILTER'] = 'Filtrer les liens mailto des Emails';
+$MOD_MAIL_FILTER['ENABLED'] = 'Activ&eacute;';
+$MOD_MAIL_FILTER['DISABLED'] = 'D&eacute;sactiv&eacute;';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']= 'Remplacements';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']    = 'Remplacer "@" par';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']    = 'Remplacer "." par';

Property changes on: trunk/modules/output_filter/themes/default/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/NL.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/NL.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/NL.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING']                = 'Beheersinstellingen: Output Filter';
+$MOD_MAIL_FILTER['HOWTO']                = 'Hier kan je de uitvoer filteren met onderstaande opties.<strong>Tip: </strong>Mailto links kunnen gecodeerd worden door een Javascript functie. Om van deze optie gebruik te kunnen maken moet je de PHP code <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(\'js\');?&gt;</code> in de &lt;head&gt; sectie van het index.php bestand van je template plaatsen. Zonder deze aanpassing zal enkel het @ teken in het mailto deel vervangen worden.';
+$MOD_MAIL_FILTER['WARNING']                = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF']            = 'E-mail Configuratie';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with  relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER']        = 'Filter E-mail adressen in tekst';
+$MOD_MAIL_FILTER['MAILTO_FILTER']        = 'Filter E-mail adressen in mailto links';
+$MOD_MAIL_FILTER['ENABLED']                = 'Aan';
+$MOD_MAIL_FILTER['DISABLED']            = 'Uit';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']    = 'Vervang E-mail tekens';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']        = 'Vervang "@" door';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']        = 'Vervang "." door';

Property changes on: trunk/modules/output_filter/themes/default/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/NO.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/NO.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/NO.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING']    = 'Valg: Filtrering av ut data';
+$MOD_MAIL_FILTER['HOWTO']    = 'Du kan gj&oslash;re innstillinger for utdatafitreringen i valgene nedenfor.<strong>Tips: </strong>Mailto linker kan krypteres av en Javascript funksjon. For &aring; f&aring; benyttet denne funksjonen, m&aring; det legges til f&oslash;lgende PHP kode <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(\'js\');?&gt;</code> inn i &lt;head&gt; seksjonen i index.php p&aring; design malen din. Uten denne modifikasjonen, vil kun @ karakterer i mailto linker bli erstattet.';
+$MOD_MAIL_FILTER['WARNING']    = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF']    = 'Enkel Epost konfigurasjon';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER']    = 'Filtrer Epost adresser i tekst';
+$MOD_MAIL_FILTER['MAILTO_FILTER']    = 'Filtrer Epost adresser i mailto linker';
+$MOD_MAIL_FILTER['ENABLED']    = 'P&aring;sl&aring;tt';
+$MOD_MAIL_FILTER['DISABLED']    = 'Avsl&aring;tt';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']= 'Endringe i Epost adresser';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']    = 'Bytt "@" med';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']    = 'Bytt "." med';

Property changes on: trunk/modules/output_filter/themes/default/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/RU.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/RU.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/RU.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Headings and text outputs
+$MOD_MAIL_FILTER['HEADING']    = '&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080;: Output Filter';
+$MOD_MAIL_FILTER['HOWTO'] = '&#1042;&#1099; &#1084;&#1086;&#1078;&#1077;&#1090;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1080;&#1090;&#1100; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072;&#1094;&#1080;&#1102;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; &#1085;&#1080;&#1078;&#1077;.<p style="line-height:1.5em;"><strong>&#1042;&#1072;&#1078;&#1085;&#1086;: </strong>Mailto &#1089;&#1089;&#1099;&#1083;&#1082;&#1080; &#1084;&#1086;&#1075;&#1091;&#1090; &#1073;&#1099;&#1090;&#1100; &#1089;&#1082;&#1088;&#1099;&#1090;&#1099; &#1086;&#1090; &#1089;&#1087;&#1072;&#1084;&#1077;&#1088;&#1086;&#1074; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; Javascript. &#1063;&#1090;&#1086;&#1073;&#1099; &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1100; &#1101;&#1090;&#1091; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100;, &#1076;&#1086;&#1073;&#1072;&#1074;&#1100;&#1090;&#1077; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1080;&#1081; PHP &#1082;&#1086;&#1076; <code style="background:#FFA;color:#900;">&lt;?php register_frontend_modfiles(\'js\');?&gt;</code> &#1074; &lt;head&gt; &#1089;&#1077;&#1082;&#1094;&#1080;&#1102; index.php &#1092;&#1072;&#1081;&#1083;&#1072; &#1074;&#1072;&#1096;&#1077;&#1075;&#1086; &#1096;&#1072;&#1073;&#1083;&#1086;&#1085;&#1072;. &#1048;&#1085;&#1072;&#1095;&#1077; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1089;&#1080;&#1084;&#1074;&#1086;&#1083; @ &#1073;&#1091;&#1076;&#1077;&#1090; &#1079;&#1072;&#1084;&#1077;&#1085;&#1077;&#1085; &#1074; mailto &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;&#1093;.</p>';
+$MOD_MAIL_FILTER['WARNING']    = '';
+
+// Text and captions of form elements
+$MOD_MAIL_FILTER['SET_ACTIVE']            = 'Activate Filter';
+$MOD_MAIL_FILTER['BASIC_CONF']    = '&#1054;&#1089;&#1085;&#1086;&#1074;&#1085;&#1099;&#1077; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1080; Email';
+$MOD_MAIL_FILTER['SYS_REL'] = 'Frontendoutput with relative Urls';
+$MOD_MAIL_FILTER['opf']        = 'Output filter Dashboard';
+$MOD_MAIL_FILTER['EMAIL_FILTER'] = '&#1057;&#1082;&#1088;&#1099;&#1074;&#1072;&#1090;&#1100; Email &#1072;&#1076;&#1088;&#1077;&#1089;&#1072; &#1074; &#1090;&#1077;&#1082;&#1089;&#1090;&#1077;';
+$MOD_MAIL_FILTER['MAILTO_FILTER'] = '&#1057;&#1082;&#1088;&#1099;&#1074;&#1072;&#1090;&#1100; Email &#1072;&#1076;&#1088;&#1077;&#1089;&#1072; &#1074; mailto &#1089;&#1089;&#1099;&#1083;&#1082;&#1072;&#1093;';
+$MOD_MAIL_FILTER['ENABLED']    = '&#1042;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1086;';
+$MOD_MAIL_FILTER['DISABLED'] = '&#1042;&#1099;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1086;';
+
+$MOD_MAIL_FILTER['REPLACEMENT_CONF']= '&#1047;&#1072;&#1084;&#1077;&#1085;&#1099; &#1074; &#1072;&#1076;&#1088;&#1077;&#1089;&#1072;&#1093; Email';
+$MOD_MAIL_FILTER['AT_REPLACEMENT']    = '&#1047;&#1072;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; "@" &#1085;&#1072;';
+$MOD_MAIL_FILTER['DOT_REPLACEMENT']    = '&#1047;&#1072;&#1084;&#1077;&#1085;&#1103;&#1090;&#1100; "." &#1085;&#1072;';
+

Property changes on: trunk/modules/output_filter/themes/default/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/languages/index.php
===================================================================
--- trunk/modules/output_filter/themes/default/languages/index.php	(nonexistent)
+++ trunk/modules/output_filter/themes/default/languages/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/*
+/**
+ *
+ * @category        modules
+ * @package         output_filter
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+header("Location: ../../../index.php");
+exit();
\ No newline at end of file

Property changes on: trunk/modules/output_filter/themes/default/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/themes/default/tool.htt
===================================================================
--- trunk/modules/output_filter/themes/default/tool.htt	(nonexistent)
+++ trunk/modules/output_filter/themes/default/tool.htt	(revision 2)
@@ -0,0 +1,112 @@
+<!-- BEGIN main_block -->
+
+<!-- BEGIN headline_block -->
+<h4 style="margin: 0; border-bottom: 1px solid #DDD; padding-bottom: 5px;">
+    <a href="{CANCEL_URL}" title="{ADMINISTRATION_TOOLS}">{ADMINISTRATION_TOOLS}</a>
+    »
+    <a href="{ADMINTOOL_LINK}" title="" alt="">{TOOL_NAME}</a>
+</h4>
+<!-- END headline_block -->
+<h2>
+  {HEADING}
+</h2>
+<!-- BEGIN core_info_block -->
+<div class="{CORE_MSGCLS}">{CORE_MSGTXT}</div>
+<!-- END core_info_block -->
+<div id="filter_and_tables" class="filteroptions">
+<p>
+  {HOWTO}
+</p>
+<!-- BEGIN message_block -->
+<div class="{MSGCLS}">{MSGTXT}</div>
+<!-- END message_block -->
+<form name="store_settings" action="{ADMIN_URL}admintools/tool.php?tool={MODULE_NAME}" method="post">
+  <input type="hidden" name="url" value="{PAGE_ID}" />
+  <input type="hidden" name="section_id" value="{SECTION_ID}" />
+  <input type="hidden" name="cmd" value="tool" />
+  <input type="hidden" name="action" value="save" />
+  {FTAN}
+  <div id="selectOutputFilters">
+    <table class="filter_table_title">
+          <thead>
+            <tr>
+              <th class="filter_check_all" style="opacity: 1;">
+              {SET_ACTIVE}
+              </th>
+              <th>
+            <!--  <input type="checkbox" id="table_check_all"> -->
+              </th>
+            </tr>
+          </thead>
+    </table>
+      <div class="filter_table_list_container">
+        <input type="hidden" value="0" name="filter_forced">
+        <table class="filter_table_select">
+
+          <tbody>
+<!-- BEGIN filter_block -->
+            <tr>
+              <td class="filter_table_name">{FNAME}</td>
+              <td>
+                <input type="checkbox" {FCHECKED} value="1" name="{FNAME}" id="cb-{FNAME}">
+              </td>
+            </tr>
+<!-- END filter_block -->
+          </tbody>
+        </table>
+      </div>
+  </div>
+
+  <div id="selectFilterContent">
+<!-- BEGIN email-filter_block -->
+  <table id="email-filter" style="{DISPLAY_EMAIL_SETTINGS}">
+    <tbody>
+      <tr>
+        <td>
+          {AT_REPLACEMENT}:
+        </td>
+        <td>
+          <input type="text" style="width: 160px" value="{at_replacement}" name="at_replacement"/>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          {DOT_REPLACEMENT}:
+        </td>
+        <td>
+          <input type="text" style="width: 160px" value="{dot_replacement}" name="dot_replacement"/>
+        </td>
+      </tr>
+    <tr>
+        <td >{EMAIL_FILTER}:</td>
+        <td>
+            <input type="checkbox" name="email_filter" value="1" {EMAIL_FILTER_CHECK}>
+        </td>
+    </tr>
+    <tr>
+        <td>{MAILTO_FILTER}:</td>
+        <td>
+            <input type="checkbox" name="mailto_filter" value="1" {MAILTO_FILTER_CHECK}>
+        </td>
+    </tr>
+    </tbody>
+  </table>
+<!-- END email-filter_block -->
+  </div>
+
+  <div style="padding-top: 1.525em; clear: both; position: relative;">
+    <table>
+      <tr>
+        <td>
+          <input type="submit" value="{SAVE}" />
+        </td>
+        <td>
+          <input type="button" value="{CANCEL}" onclick="window.location = '{CANCEL_URL}';" />
+        </td>
+      </tr>
+    </table>
+  </div>
+
+</form>
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/modules/output_filter/themes/default/tool.twig
===================================================================
--- trunk/modules/output_filter/themes/default/tool.twig	(nonexistent)
+++ trunk/modules/output_filter/themes/default/tool.twig	(revision 2)
@@ -0,0 +1,42 @@
+{# 
+- available replacements
+    WB_URL
+    THEME_URL
+    THEME_PATH
+    SAVE_URL
+    TEXT_URL
+    CANCEL_URL
+    TEXT_HEIGHT
+    TEXT_SAVE
+    TEXT_CANCEL
+    HEIGHT
+    URL
+    FTAN
+#}
+<form action="{{ SAVE_URL }}" method="post">
+    <input type="hidden" name="page_id" value="{{ PAGE_ID }}" />
+    <input type="hidden" name="section_id" value="{{ SECTION_ID }}" />
+    <input type="hidden" name="cmd" value="save" />
+    {{ FTAN }}
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left" width="50">{{ TEXT_URL }}:</td>
+            <td><input type="text" name="url" value="{{ URL }}" style="width: 100%;" /></td>
+        </tr>
+        <tr>
+            <td align="left" width="50">{TEXT_HEIGHT}:</td>
+            <td><input type="text" name="height" value="{{ HEIGHT }}" maxlength="4" style="width: 100%;" /></td>
+        </tr>
+    </table>
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left"><input type="submit" value="{{ TEXT_SAVE }}" style="width: 200px; margin-top: 5px;" /></td>
+            <td align="right">
+                <input type="button" value="{{ TEXT_CANCEL }}" onclick="javascript: window.location = '{{ CANCEL_URL }}';" style="width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+
+{# end of file #}
+

Property changes on: trunk/modules/output_filter/themes/default/tool.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/tool.php
===================================================================
--- trunk/modules/output_filter/tool.php	(nonexistent)
+++ trunk/modules/output_filter/tool.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * save.php
+ *
+ * @category     Addons
+ * @package      Addons_
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'tool';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/output_filter/tool.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/output_filter/tool_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/modules/output_filter/tool_icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/modules/output_filter/upgrade.php
===================================================================
--- trunk/modules/output_filter/upgrade.php	(nonexistent)
+++ trunk/modules/output_filter/upgrade.php	(revision 2)
@@ -0,0 +1,40 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * upgrade.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $callingScript = $_SERVER["SCRIPT_NAME"];
+    $sCommand = 'upgrade';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/output_filter/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/DOC/LICENCE.txt
===================================================================
--- trunk/modules/show_menu2/DOC/LICENCE.txt	(nonexistent)
+++ trunk/modules/show_menu2/DOC/LICENCE.txt	(revision 2)
@@ -0,0 +1,278 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
Index: trunk/modules/show_menu2/DOC/README.de.txt
===================================================================
--- trunk/modules/show_menu2/DOC/README.de.txt	(nonexistent)
+++ trunk/modules/show_menu2/DOC/README.de.txt	(revision 2)
@@ -0,0 +1,667 @@
+show_menu2, version 4.9
+=======================
+Ist ein Code-Snippet für das CMS Website Baker. Es stellt einen kompletten
+Ersatz für die eingebaute Menüfuntionalität zur Verfügung. Alle, für die
+Erzeugung des Menüs erforderlichen Daten, werden durch eine einzige
+Datenbankabfrage erzeugt. Durch umfangreiche Anpassungsmöglichkeiten des
+erzeugten HTML-Code können alle möglichen Menüarten (Listen, Breadcrumbs,
+Sitemaps, usw.) erzeugt werden.
+
+---
+Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung
+des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte
+eine Email an bjm@wwnw.de.
+---
+
+
+
+INSTALLATION
+============
+1. Die aktuelle Version von http://code.jellycan.com/show_menu2/ herunterladen.
+2. In das Admin-Backend der Website Baker Installation einlogen.
+3. Erweiterungen -> Module aufrufen.
+4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über
+   "Modul deinstallieren" auswählen und deinstallieren.
+5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File
+   auswählen und installieren.
+
+
+
+BENUTZUNG VON SHOW_MENU2
+========================
+Um show_menu2 zu benutzen muss das verwendete Template an den Stellen
+modifiziert werden, an denen das Menü erscheinen soll. Bitte beachten: Wenn alte
+Menüaufrufe ersetzt werden, müssen unbedingt auch die entsprechenden neuen
+Parameter verwendet werden die show_menu2 benötigt.
+
+In den meisten Fällen genügt bereits der Standardaufruf ohne weitere Parameter
+von show_menu2. In diesem Fall werden die Vorgabewerte verwendet, dies erzeugt
+ein Menü das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
+
+    $sMenu = show_menu2();
+
+Bitte beachten: der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-
+Codezeichen eingeschlossen werden (ausser der Aufruf erfolgt bereits innerhalb
+von PHP Code):
+
+    <?php echo show_menu2(); ?>
+
+Dieses Vorgabe Menü erzeugt bereits ein komplettes Menü auf Listenbasis mit
+etlichen Klassen, die eine leichte Formatierung mittels CSS ermöglichen. Es wird
+z.B. die Klasse "menu-current" zu dem <li> tag des aktuellen Menüpunktes
+hinzugefügt. Zusätzlich erhält jeder Menüpunkt der Unterpunkte enthält die
+Klasse "menu-expand". Das erlaubt es sehr differenzierte CSS Regeln für die
+einzelnen Menüpunkte aufzustellen.
+Zum Beispiel:
+
+    li.menu-expand  { font-weight: bold; }
+    li.menu-current { background: red; }
+
+Im Abschnitt "HTML-Ausgabe" findet sich eine detaillierte Beschreibung welche
+Klassen welchem Element zugeordnet werden. Durch die Verwendung von
+verschiedenen Parametern bei dem show_menu2 Funktionsaufruf lassen sich auch
+recht umfangreiche und unterschiedliche Menüstrukturen erzeugen. Um
+beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur
+darzustellen, könnte man folgenden Aufruf verwenden:
+
+    $sMenu = show_menu2(0, SM2_ROOT, SM2_START);
+
+Oder um beispielsweise bis zu zwei Unterebenen der aktuellen Seite anzuzeigen:
+
+    $sMenu = show_menu2(0, SM2_CURR+1, SM2_CURR+2);
+
+Es gibt jede Menge Möglichkeiten, um die unterschiedlichsten Menüstrukturen zu
+erzeugen. Zahlreiche Beispiele dazu findet man auf der Demo-Website: http://
+code.jellycan.com/sm2test/
+
+
+
+HÄUFIGE FRAGEN
+==============
+
+Q:  Ich bin kein Programmierer. Gibt es keine einfachere Dokumentation?
+A:  Nein, denn dies hier ist bereits die einfache Dokumentation.
+
+
+Q:  Wie kann ich ein sogenanntes Drop-Down Menü erstellen?
+A:  Dies hat nichts mit show_menu2 zu tun. Um ein Drop-Down Menü zu erzeugen muß
+    lediglich der CSS-Code des jeweiligen Templates angepaßt werden. Die nötigen
+    Anpassungen findet man z.B. im "allcss2" Template aus dem WB Addon
+    Repository -> http://addons.websitebaker.org/
+
+
+Q:  Warum verschwindet das Menü nachdem ich in einer mehrsprachigen WB-Site die
+    Suchfunktion benutzt habe?
+A:  Im verwendeten Template fehlen die notwendigen Zeilen:
+
+    1.  Im WB Admin Backend: Optionen -> Erweiterte Optionen anzeigen ->
+        Suchoptionen -> Kopfzeile - hier direkt nach dem öffnenden <form> tag
+        folgende Zeile einfügen:
+
+        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
+
+    2.  In der index.php des verwendeten Templates folgende Zeile unmittelbar
+        nach dem öffnenden <form> tag der Suche einfügen:
+
+        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
+
+
+Q:  Mehrsprachig? Das klingt toll. Wie macht man das?
+A:  http://www.websitebaker2.org/de/hilfe/designerhandbuch/mehrsprachige-webseiten.php
+
+
+Q:  Jedesmal wenn eine Seite aufgerufen wird, erzeugt SM2 folgende Warnmeldung:
+    "show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!"
+A:  Der Funktion wurden die falschen Werte oder eine falsche Anzahl an
+    Werten übergeben.
+    Siehe den Abschnitt PARAMETER für die korrekten Flag Werte die dem
+    $aOptions Parameter zu übergeben sind.
+
+
+Q:  How do I use a different class/picture/color/widget for each entry in a menu?
+A:  Use the [page_id] format string in the $aItemOpen string. Create a unique
+    class or id for each menu item, then reference that item in your CSS or Javascript
+    to do whatever you want.
+
+    To add a unique class for each menu item (or similar):
+
+        "<li><a href="[url]" target="[target]" class="[class] p[page_id]">[menu_title]</a>"
+
+        ... creating menu items like ...
+
+        <li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
+
+        Reference this in your CSS like:
+
+        a.p45 { color: red; }
+
+    To add a unique ID for each menu item (or similar):
+
+        "<li><a id="p[page_id]" href="[url]" target="[target]" class="[class]">[menu_title]</a>"
+
+        ... creating menu items like ...
+
+        <li><a id="p45" href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
+
+        Reference this in your CSS like:
+
+        a#p45 { color: red; }
+
+        Note that the ID can only be used if that menu is generated and displayed one time
+        only on the page (because HTML ID's must be unique within a page).
+
+
+FUNKTION
+========
+
+Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
+
+    show_menu2(
+        $aMenu          = 0,
+        $aStart         = SM2_ROOT,
+        $aMaxLevel      = SM2_CURR+1,
+        $aOptions       = SM2_TRIM,
+        $aItemOpen      = '[li][a][menu_title]</a>',
+        $aItemClose     = '</li>',
+        $aMenuOpen      = '[ul]',
+        $aMenuClose     = '</ul>',
+        $aTopItemOpen   = false,
+        $aTopMenuOpen   = false
+        )
+
+Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes
+einzelnen Parameters.
+Jeder Parameter muß absolut korrekt verwendet werden. Folgende Regeln können
+dabei helfen:
+
+    $aMenu = 0 ist in den meisten Anwendungsfällen der beste Wert.
+
+    $aStart muß entweder eine page ID oder ein Wert der mit "SM2_" beginnt sein.
+
+    $aMaxLevel kann nur Werte erhalten, die mit "SM2_" beginnen.
+
+    $aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit
+    "SM2_" beginnen zulässig.
+
+    Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs
+    steuern.
+
+    Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den
+    jeweiligen Vorgabewert zu erhalten.
+
+    Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu
+    erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte
+    Verwendung finden:
+
+        show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
+
+Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
+
+
+HTML-AUSGABE
+============
+Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden.
+Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei
+einzelne Menüpunkte, wenn es erforderlich ist, auch mehrere Klassen erhalten können.
+
+    KLASSE          ZUORDNUNG
+    ------------    -------------------------------------------------------
+    menu-top        Nur der erste Menüpunkt.
+    menu-parent     Jeder Hauptmenüpunkt.
+    menu-current    Nur der Menüpunkt der aktuellen Seite.
+    menu-sibling    Alle "Geschwister" der aktuellen Seite.
+    menu-child      Jedes Untermenü der aktuellen Seite.
+    menu-expand     Jedes Menü das Untermenüs hat.
+    menu-first      Der erste Punkt eines jeden Menüs oder Untermenüs.
+    menu-last       Der letzte Punkt eines jeden Menüs oder Untermenüs.
+
+    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLASS Flag gesetzt
+    ist:
+
+    menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe,
+                    beginnend bei 0, des jeweiligen Menüpunktes steht.
+                    Die oberste Ebene ist also immer menu-0, die nächste
+                    Ebene menu-1 usw.
+    menu-child-N    Jedes Untermenü der aktuellen Seiten, wobei das N für die
+                    RELATIVE Tiefe des Untermenüs, beginnend bei 0, steht.
+
+Beispiel einer HTML-Ausgabe:
+
+<ul class="menu-top menu-0">
+  <li class="menu-0 menu-first">  ... </li>
+  <li class="menu-0 menu-expand menu-parent">  ...
+  <ul class="menu-1">
+    <li class="menu-1 menu-expand menu-first">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-first">  ...
+      <li class="menu-2 menu-last">  ...
+    </ul>
+    </li>
+    <li class="menu-1 menu-expand menu-parent">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-expand menu-current menu-first">  ...      ** CURRENT PAGE **
+      <ul class="menu-3">
+        <li class="menu-3 menu-child menu-child-0 menu-first">  ...
+        <ul class="menu-4">
+          <li class="menu-4 menu-child menu-child-1 menu-first">  ... </li>
+          <li class="menu-4 menu-child menu-child-1 menu-last">  ... </li>
+        </ul>
+        </li>
+        <li class="menu-3 menu-child menu-child-0 menu-last">  ... </li>
+      </ul>
+      </li>
+      <li class="menu-2 menu-sibling menu-last">  ... </li>
+    </ul>
+    </li>
+    <li class="menu-1">  ... </li>
+    <li class="menu-1 menu-expand menu-last">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-first menu-last">  ... </li>
+    </ul>
+    </li>
+  </ul>
+  </li>
+  <li class="menu-0 menu-last">  ... </li>
+</ul>
+
+
+PARAMETER
+=========
+$aMenu
+    Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu
+    verwenden.
+    Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
+    im System verwendeten Menüs zurück.
+
+$aStart
+    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den
+    meisten Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es
+    kann einer der folgenden Werte verwendet werden:
+
+        SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
+                    SM2_ROOT      Beginnt auf der obersten Ebene
+                    SM2_ROOT+1    Beginnt eine Ebene unterhalb der obersten Ebene
+                    SM2_ROOT+2    Beginnt zwei Ebenen unterhalb der obersten Ebene
+
+        SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
+                    SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
+                                  der aktuellen Ebene
+                    SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
+                                  mit allen Unterebenen
+
+        page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
+                    Alle Untermenüs dieser Seite werden angezeigt.
+                    (Die page id kann ermittelt werden, wenn man die Seite im
+                    Admin-Backend editiert, sie steht dann in der Adresszeile des
+                    Browsers: http://SITE/admin/pages/modify.php?page_id=35
+
+$aMaxLevel
+    Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
+    beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier
+    festgelegten Ebene.
+
+        SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
+
+        SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen.
+                     SM2_CURR      Aktuelle Ebene (keine Unterebene)
+                     SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
+
+        SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
+                     Die Ebenen werden unabhängig davon angezeigt,egal
+                     auf welcher Ebene sich die aktuelle Seite befindet.
+                     SM2_START     Eine einzelne Ebene ab der Startebene.
+                     SM2_START+1   Startebene + eine Ebene darunter.
+
+        SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
+                     Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
+                     SM2_MAX       Nur die Startebene (gleiche Wirkung wie SM2_START)
+                     SM2_MAX+1     Die Startebene und eine Ebene darunter.
+
+$aOptions
+    Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
+    einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
+    sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
+
+    GROUP 1
+    -------
+    Aus dieser Gruppe muss stets genau ein Flag angegeben werden. Diese Flags
+    bestimmen auf welche Weise die Geschwisterelemente im Menübaum in der
+    Ausgabe unterdrückt werden.
+
+    SM2_ALL         Zeigt alle Zweige des Menübaums
+                        A-1 -> B-1
+                            -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+                        A-2 -> B-3
+                            -> B-4
+
+    SM2_TRIM        Zeigt alle Geschwistermenüs der Seite im aktuellen Pfad.
+                    Alle Untermenüs von Elemnten die sich nicht im Pfad befinden
+                    werden entfernt.
+                        A-1 -> B-1
+                            -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+                        A-2
+
+    SM2_CRUMB       Zeigt den Breadcrumb Pfad des Menüs an, also den aktuellen
+                    Menüpunkt sowie alle Menüpunkte die dorthin führen.
+                        A-1 -> B-2 -> C-2 (CURRENT)
+
+    SM2_SIBLING     Wie SM2_TRIM, es werden aber nur Geschwistermenüs der aktuellen
+                    Seite angezeigt. Alle anderen Punkte werden unterdrückt.
+                        A-1 -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+
+    GROUP 2
+    -------
+    Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
+
+    SM2_NUMCLASS    Fügt die nummerierten Menüklassen "menu-N" und
+                    "menu-child-N hinzu.
+
+    SM2_ALLINFO     Lädt alle Felder aus der Seitentabelle der Datenbank.
+                    Dies verursacht einen ziemlich hohen Speicherverbauch und sollte
+                    deshalb nur mit Bedacht verwendet werden.
+                    Dadurch werden z.B. die Keywords, die Seitenbeschreibung sowie
+                    all die anderen Informationen verfügbar, die normalerweise nicht
+                    geladen werden.
+                    Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2
+                    für die jeweilige Menü ID verwendet werden, oder in Verbindung
+                    mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
+
+    SM2_NOCACHE     Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
+                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank
+                    gelesen.
+
+    SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
+                    Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders
+                    nützlich beim Debuggen der Menüausgabe.
+
+    SM2_NOBUFFER    Gibt den HTML-Code direkt aus und speichert ihn nicht zwischen.
+
+    SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
+                    Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
+                    Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
+                    kombiniert werden.
+
+    SM2_ESCAPE      Wendet htmlspecialchars auf den Menüstring an.
+                    Dies kann bei älteren Websitebaker Installationen erforderlich
+                    sein um eine valide HTML Ausgabe zu erzeugen.
+
+    SM2_SHOWHIDDEN  Hidden pages are usually hidden all of the time, including
+                    when they are active (i.e. current page or a parent page).
+                    Use private pages for time when you want pages to be
+                    hidden except when active. However for compatibility with
+                    release 4.8, supply this flag to enable hidden pages to
+                    become visible when they are active.
+
+    SM2_XHTML_STRICT	Stellt die XHTML-Kompatibilität der Links sicher indem
+					in per [a] oder [ac] formatierten Links die Targetangabe
+					entfernt und das Argument title="[page_titel]" eingefügt
+					wird. Bei manuell zusammengestellten Links ist der Designer
+					selbst für die XHTML-Konformität zuständig.
+
+	SM2_NO_TITLE	Unterdrückt die Ausgabe des Inhaltes des Title-Attributes
+					bei [a] oder [ac] formatierten links. Im XHTML-Strikt Modus
+                    wird 'title' mit einen &nbsp; ausgegeben.
+
+    Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
+    als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
+    OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
+
+$aItemOpen
+    Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
+    wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
+    Formatstring definiert werden.
+    Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
+    '[li][a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
+    Standardfunktion show_menu() zu gewährleisten.
+    Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den
+    <a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
+    verwenden: '<li>[ac][menu_title]</a>'.
+
+    Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
+    verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER.
+    Wenn hier ein Formatter angegeben wird, werden alle Argumente
+    nach $aItemOpen ignoriert.
+
+$aItemClose
+    Dieser String schließt jeden Menüpunkt ab.
+    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
+    ersetzt!
+    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
+
+$aMenuOpen
+    Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
+    Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
+    werden.
+    Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
+    verwendet.
+
+$aMenuClose
+    Dieser String schließt jedes Menü ab.
+    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
+    ersetzt!
+    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
+
+$aTopItemOpen
+    Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
+    gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
+
+$aTopMenuOpen
+    Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
+    gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
+
+
+
+ERWEITERTE OPTIONEN
+===================
+Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben
+im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten
+Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen
+ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array
+bereitgestellt werden.
+Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als 'flags'
+übergeben werden.
+
+    'flags'     **ZWINGEND ERFORDELICH** Dies sind die Flags die oben im Abschnitt
+                PARAMETER unter $aOptions beschrieben wurden.
+
+    'notrim'    Hiermit wird eine Anzahl von Ebenen festegelegt, die relativ bezogen
+                auf die in $aStart festgelegte Menüebene, immer angezeigt werden. Dies
+                bewirkt, daß für diese Ebenen das SM2_TRIM Flag ignoriert wird.
+
+Um dieses Array zu verwenden, empfiehlt es sich es erst anzulegen und dann den
+$aOptions parameter mit dem angelegten Array zu beliefern:
+
+    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
+    $sMenu = show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
+
+
+
+FORMAT STRINGS
+==============
+Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
+verwendet werden und sollen durch den entsprechenden Text ersetzt werden.
+
+[a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
+[ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
+[li]            <li> tag mit Klasse:   '<li class="[class]">'
+[ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
+[class]         Liste der Klassen für diese Seite
+[menu_title]    Text des Menütitel
+                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
+[menu_icon_0]	die URL zu einer Bilddatei mit normal - Darstellung (ab WB2.8.4)
+[menu_icon_1]	die URL zu einer Bilddatei mit active/hover - Darstellung (ab WB2.8.4)
+[page_title]    text des Seitentitel
+                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
+[page_icon]		die URL zu einer seitenbezogenen Bilddatei (ab WB2.8.4)
+[tooltip]       Tooltip-Text, der normal im title-Attribut der Links ausgegeben wird (ab WB2.8.4)
+[url]           die URL der Seiten für den <a> tag
+[target]        das Seitenziel für den <a> tag
+[page_id]       die Page ID des aktuellen Menüpunktes.
+[parent]        die Page ID des übergeordneten Menüpunktes.
+[level]         die Seitenebene,
+                dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
+[sib]           Anzahl der Geschwister des aktuellen Menüpunktes.
+[sibCount]      Anzahl aller Geschwister in diesem Menü.
+[if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
+
+Folgende tags sind NUR verfügbar, wenn das SM2_ALLINFO Flag gesetzt ist.
+
+[description]   Seitenbeschreibung
+[keywords]      Schlüsselworte der Seite
+
+
+
+BEDINGTE FORMATIERUNG
+=====================
+Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
+
+    [if(A){B}]
+    [if(A){B}else{C}]
+
+    A   Die Bedingung. Details dazu, siehe unten.
+
+    B   Der Ausdruck der verwendet wird, wenn die Bedingung erfüllt ist.
+        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
+        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
+        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
+        Zeichen '}' nicht erlaubt ist).
+
+    C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
+        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
+        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
+        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
+        Zeichen '}' nicht erlaubt ist).
+
+Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
+Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
+mittels || (boolsches oder - OR) oder && (boolsches und - AND) verknüpft werden.
+
+Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten
+Operanden.
+z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
+
+    Linker Operand. Muss eines der folgende Schlüsselworte sein:
+        class       Überprüfung ob diese Klasse existiert. Es sind nur die
+                    "==" and "!=" Operatoren erlaubt. In diesem Fall haben die Operatoren
+                    die Bedeutung von "enthält" bzw. "enthält nicht" an Stelle von
+                    "ist gleich" bzw. "ist nicht gleich"
+        level       Überprüfung der Seitenebene.
+        sib         Überprüfung der Geschwisteranzahl der aktuellen Seite.
+        sibCount    Überprüfung der Geamtanzahl der Geschwister im aktuellen Menü.
+        id          Überprüfung der page id.
+		target		Überprüfung der Target-Angabe
+
+    Operator. Muss einer der folgenden sein:
+        <           Kleiner als
+        <=          Kleiner oder gleich als
+        ==          Gleich
+        !=          Nicht gleich
+        >=          Grössr oder gleich als
+        >           Grösser als
+
+    Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
+                     verwendeten Schlüsselwort ab.
+        class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
+                    spezifiziert sind.
+        level       Überprüfung der Seitenebene gegen folgende Werte:
+                        <number>  die absolute Seitenebene
+                        root      die oberste Seitenebene
+                        granny    die Seitenebene über der übergeordneten Seitenebene
+                        parent    die übergeordnete Seitenebene
+                        current   die aktuelle Seitenebene
+                        child     die untergeornete Seitenebene
+        id          Überprüfung der page id gegen folgende Werte:
+                        <number>  die absolute page id
+                        parent    die übergeordnete page id
+                        current   die aktuelle page id
+        sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
+                    Geschwister in diesem Menü zu überprüfen
+        sibCount    Eine positive Integerzahl
+		target		Ein String, der eine mögliche Targetangabe darstellt
+
+Folgende Beispiele ergeben "wahr" und der Ausdruck {exp} wird ausgeführt, wenn zutrifft:
+
+    [if(class==menu-expand){exp}]   hat ein Untermenü
+    [if(class==menu-first){exp}]    ist der erste Eintrag in einem Menü
+    [if(class!=menu-first){exp}]    ist NICHT der erste Eintrag in einem Menü
+    [if(class==menu-last){exp}]     ist der letzte Eintrag in einem Menü
+    [if(level==0){exp}]             befindet sich auf der obersten Ebene
+    [if(level>0){exp}]              befindet sich NICHT auf der obersten Ebene
+    [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
+    [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
+    [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
+    [if(level>parent){exp}]         ist in einem Geschwistermenü oder dem Untermenü eines
+                                    Geschwistermenüs
+    [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
+	[if(target==_self){exp}]		im Target-Attribut ist der String '_self' enthalten
+
+Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen
+ausgeführt.
+Zum Beispiel wird "foo" immer dann ausgeführt, wenn die if Überprüfung falsch ergibt, also:
+
+    [if(sib==2){exp}else{foo}]      ist NICHT der zweite Eintrag im Menü
+    [if(sibCount>2){exp}else{foo}]  ist NICHT in einem Menü mit mehr als zwei Einträgen
+
+Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
+
+    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere
+    Eintrag im Menü
+
+    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat
+    Untermenüs
+
+Bitte beachten:
+Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
+* es findet keine Überprüfung auf evtl. Schleifen statt (alle Überprüfungen werden immer ausgeführt)
+* Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
+* sowohl || als auch && haben die gleiche Wertigkeit
+
+
+
+FORMATTER
+=========
+Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
+
+Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
+Formatierer von show_menu2 mit einem eigenen zu ersetzen.
+In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
+Die API, die verwendet werden muss, sieht wie folgt aus:
+
+(Anmerkung des Übersetzers: Kommentare sind nicht übersetzt, wer sich so weit vorwagt, sollte
+damit keine Probleme haben ;-)
+
+class SM2_Formatter
+{
+    // called once before any menu is processed to allow object initialization
+    function initialize() { }
+
+    // called to open the menu list
+    function startList($aPage, $aUrl) { }
+
+    // called to open the menu item
+    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
+
+    // called to close the menu item
+    function finishItem() { }
+
+    // called to close the menu list
+    function finishList() { }
+
+    // called once after all menu has been processed to allow object finalization
+    function finalize() { }
+
+    // called once after finalize() if the SM2_NOOUTPUT flag is used
+    function getOutput() { }
+};
Index: trunk/modules/show_menu2/DOC/README.en.txt
===================================================================
--- trunk/modules/show_menu2/DOC/README.en.txt	(nonexistent)
+++ trunk/modules/show_menu2/DOC/README.en.txt	(revision 2)
@@ -0,0 +1,607 @@
+show_menu2, version 4.9
+=======================
+A code snippet for the Website Baker CMS software. It provides a complete
+replacement for the builtin menu functions. All menu data is retrieved using
+a single database query, all types of menu styles (lists, breadcrums, sitemaps)
+can be generated with extensive customisation of the resulting HTML.
+
+
+
+INSTALLATION
+============
+1. Download the latest version from http://code.jellycan.com/show_menu2/
+2. Log into your WebsiteBaker installation
+3. Go to Addons -> Modules
+4. If a previous version of show_menu2 is already installed, select it from
+   the "Uninstall Module" list and choose the "Uninstall" button.
+5. In the "Install Module" section, enter the path to the show_menu2 zip file
+   that you downloaded in step 1, and choose the "Install" button.
+
+
+
+USING SHOW_MENU2
+================
+You need to modify the PHP files of your template to call show_menu2 where you
+wish to have the menu displayed. Remember when you replace calls to the old
+menu functions to use the new parameters that show_menu2 requires.
+
+Often times the default menu generated by show_menu2 is all that you need.
+This menu shows the current page and children of the current page. It is
+generated by just calling show_menu2 with no parameters. For example:
+
+    $sMenu = show_menu2();
+
+Note that the call to show_menu2 is PHP, so you usually need to wrap it in the
+PHP code brackets so that it will execute. Like this:
+
+    <?php echo show_menu2(); ?>
+
+This default menu generates a complete list based menu with many classes that
+allow easy CSS styling. For example, the current menu item will have the
+"menu-current" class added to the <li> tag. Additionally, every menu item with
+a sub-menu will have the "menu-expand" class added to the <li> tag. This allows
+you to create CSS rules to style those menu items differently. For example:
+
+    li.menu-expand  { font-weight: bold; }
+    li.menu-current { background: red; }
+
+See the "Output" section for details of exactly what classes are added to each
+element. More elaborate and different menu structures are able to be created by
+supplying different parameters to the show_menu2 function call. For example,
+to show only menu items from the top level of the menu you use:
+
+    $sMenu = show_menu2(0, SM2_ROOT, SM2_START);
+
+Alternatively, to show up to two levels of the child menus of the current page:
+
+    $sMenu = show_menu2(0, SM2_CURR+1, SM2_CURR+2);
+
+There are many more possible menus that can be generated by show_menu2. See the
+demonstration website at http://code.jellycan.com/sm2test/ for more examples.
+
+
+
+COMMON QUESTIONS
+================
+
+Q:  I'm not a programmer. Do you have simpler documentation?
+A:  Nup. This is it. Go hard. Gambarre.
+
+
+Q:  How do I create a drop-down menu?
+A:  This is unrelated to show_menu2. You need to change the template CSS code
+    to display the menu as a drop-down. Try the "allcss2" template from the WB
+    addon repository. http://addons.websitebaker.org/
+
+
+Q:  Why does the menu disappear after I do a search on my multilingual WB site?
+A:  You're missing some required lines in your template.
+
+    1.  Log into WB administration, and go to Settings -> Show advanced settings
+        -> Search Settings -> Header Code and add the following input field
+        after the <form> open tag:
+
+        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
+
+
+    2.  In the index.php of your template, add the following input field
+        immediately following the search <form> open tag.
+
+        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
+
+
+Q:  Multilingual? That sounds cool. How do I do that?
+A:  http://www.websitebaker2.org/en/help/designer-guide/multilingual-websites.php
+
+
+Q:  SM2 is generating a warning every time the page is accessed:
+    "show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!"
+A:  You are passing the wrong values to the function. Have a closer look at the
+    parameters that you are passing. See the PARAMETERS section below for the
+    correct flag values to pass for the $aOptions parameter.
+
+
+Q:  How do I use a different class/picture/color/widget for each entry in a menu?
+A:  Use the [page_id] format string in the $aItemOpen string. Create a unique
+    class or id for each menu item, then reference that item in your CSS or Javascript
+    to do whatever you want.
+
+    To add a unique class for each menu item (or similar):
+
+        "<li><a href="[url]" target="[target]" class="[class] p[page_id]">[menu_title]</a>"
+
+        ... creating menu items like ...
+
+        <li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
+
+        Reference this in your CSS like:
+
+        a.p45 { color: red; }
+
+    To add a unique ID for each menu item (or similar):
+
+        "<li><a id="p[page_id]" href="[url]" target="[target]" class="[class]">[menu_title]</a>"
+
+        ... creating menu items like ...
+
+        <li><a id="p45" href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
+
+        Reference this in your CSS like:
+
+        a#p45 { color: red; }
+
+        Note that the ID can only be used if that menu is generated and displayed one time
+        only on the page (because HTML ID's must be unique within a page).
+
+
+
+FUNCTION
+========
+
+The complete call signature and default parameter value for show_menu2 is:
+
+    show_menu2(
+        $aMenu          = 0,
+        $aStart         = SM2_ROOT,
+        $aMaxLevel      = SM2_CURR+1,
+        $aOptions       = SM2_TRIM,
+        $aItemOpen      = '[li][a][menu_title]</a>',
+        $aItemClose     = '</li>',
+        $aMenuOpen      = '[ul]',
+        $aMenuClose     = '</ul>',
+        $aTopItemOpen   = false,
+        $aTopMenuOpen   = false
+        )
+
+See the "Parameters" section for detailed descriptions of each parameter.
+Ensure that you use each parameter correctly. Use the following rules:
+
+    $aMenu will be 0 for most people.
+
+    $aStart must be either a page ID or a value starting with "SM2_".
+
+    $aMaxLevel must be only values that start with "SM2_".
+
+    $aOptions must be only values that start with "SM2_" (unless you are
+    in a very small minority of users).
+
+    All other parameters are the HTML tag templates that will be
+    output for menus and menu items.
+
+Note that every parameter from $aItemOpen can be supplied as false to get
+the default value.
+
+
+
+HTML OUTPUT
+===========
+The menu is output differently depending on what parameters have been
+supplied to the function, however in general the following classes are used
+for each menu. Note that items will have multiple classes when relevant.
+
+    CLASS           ATTACHED TO
+    ------------    -------------------------------------------------------
+    menu-top        First menu tag only
+    menu-parent     Every parent menu item of the current page.
+    menu-current    Only the menu item for the current page.
+    menu-sibling    Every sibling of the current page.
+    menu-child      Every sub-menu of the current page.
+    menu-expand     Every menu item with children.
+    menu-first      First item in any menu or sub-menu.
+    menu-last       Last item in any menu or sub-menu.
+
+    The following classes are added only if SM2_NUMCLASS flag has been used.
+
+    menu-N          Every menu item. The N is replaced with the ABSOLUTE
+                    menu depth of the item starting with 0. The root level
+                    menu is always menu-0, the next level is menu-1, etc.
+    menu-child-N    Every sub-menu of the current page, the N is replaced
+                    with the relative depth of the submenu starting at 0.
+
+
+<ul class="menu-top menu-0">
+  <li class="menu-0 menu-first">  ... </li>
+  <li class="menu-0 menu-expand menu-parent">  ...
+  <ul class="menu-1">
+    <li class="menu-1 menu-expand menu-first">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-first">  ...
+      <li class="menu-2 menu-last">  ...
+    </ul>
+    </li>
+    <li class="menu-1 menu-expand menu-parent">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-expand menu-current menu-first">  ...      ** CURRENT PAGE **
+      <ul class="menu-3">
+        <li class="menu-3 menu-child menu-child-0 menu-first">  ...
+        <ul class="menu-4">
+          <li class="menu-4 menu-child menu-child-1 menu-first">  ... </li>
+          <li class="menu-4 menu-child menu-child-1 menu-last">  ... </li>
+        </ul>
+        </li>
+        <li class="menu-3 menu-child menu-child-0 menu-last">  ... </li>
+      </ul>
+      </li>
+      <li class="menu-2 menu-sibling menu-last">  ... </li>
+    </ul>
+    </li>
+    <li class="menu-1">  ... </li>
+    <li class="menu-1 menu-expand menu-last">  ...
+    <ul class="menu-2">
+      <li class="menu-2 menu-first menu-last">  ... </li>
+    </ul>
+    </li>
+  </ul>
+  </li>
+  <li class="menu-0 menu-last">  ... </li>
+</ul>
+
+
+
+PARAMETERS
+==========
+$aMenu
+    Menu number to use. This is useful when you are using multiple menus.
+    Supplying a menu number of 0 will use the default menu for the current
+    page. Supplying SM2_ALLMENU will return all menus in the system.
+
+$aStart
+    Specify where the menu generation should start from. This is most
+    times the parent item of the menu to display. It must be one of the
+    following values:
+        SM2_ROOT+N  Start N levels down from the root. e.g.
+                      SM2_ROOT      Starting at the root menu
+                      SM2_ROOT+1    Start 1 level below the root
+                      SM2_ROOT+2    Start 2 levels below the root
+        SM2_CURR+N  Start N levels down from the current page level. e.g.
+                      SM2_CURR      Starts at the current page level. All
+                                    sibling menus to the current page.
+                      SM2_CURR+1    Starts 1 level down from the current
+                                    page with the children menus.
+        page_id     Display using the specific page as the parent. All
+                    child menus of that page will be displayed. The
+                    page_id can be found by editing the page in WB admin
+                    interface. The page_id is included in the URL like:
+                        http://SITE/admin/pages/modify.php?page_id=35
+
+$aMaxLevel
+    Maximum menu level to display. Menus are displayed from the start
+    level down to this level.
+        SM2_ALL     No limit, all levels are displayed
+        SM2_CURR+N  Always show to the current page + N levels.
+                      SM2_CURR      Current (no children)
+                      SM2_CURR+3    All parents + current + 3 children
+        SM2_START+N Always show from the starting level + N levels. The
+                    levels of menu will always be displayed regardless of
+                    what level the current page is.
+                      SM2_START     Single level of menus from starting level
+                      SM2_START+1   Starting level and 1 level down
+        SM2_MAX+N   Show at most N levels from the starting level. Levels
+                    won't be shown if they are below the current level.
+                      SM2_MAX       Starting level only (same as SM2_START)
+                      SM2_MAX+1     Maximum of starting level and 1 level.
+
+$aOptions
+    Specify flags for different generation options for the menu. The flags
+    may be combined together using bitwise OR (|). For example, to specify
+    both TRIM and PRETTY you should use, (SM2_TRIM | SM2_PRETTY).
+
+    GROUP 1
+    -------
+    Exactly one flag from this group must always be supplied. These flags
+    affect how the siblings in the tree are removed from the output.
+
+    SM2_ALL         Show all branches of the menu tree
+                        A-1 -> B-1
+                            -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+                        A-2 -> B-3
+                            -> B-4
+    SM2_TRIM        Show all sibling menus of pages on the current path.
+                    All sub-menus of elements that are not on the path
+                    are removed.
+                        A-1 -> B-1
+                            -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+                        A-2
+    SM2_CRUMB       Show only the breadcrumb trail, i.e. the current
+                    menu and all of it's ancestor menus.
+                        A-1 -> B-2 -> C-2 (CURRENT)
+    SM2_SIBLING     The same as SM2_TRIM however only sibling menus of
+                    the current page are displayed. All other menus are
+                    trimmed to show only the path.
+                        A-1 -> B-2 -> C-1
+                                   -> C-2 (CURRENT)
+                                          -> D-1
+                                          -> D-2
+                                   -> C-3
+
+    GROUP 2
+    -------
+    All of these flags are optional. Any number of them may be combined.
+
+    SM2_NUMCLASS    Add the numbered menu classes to the menu. If this
+                    flag is supplied, the "menu-N" and "menu-child-N"
+                    classes will be added.
+
+    SM2_ALLINFO     Load all fields from the page table of the database.
+                    This will result in quite a lot of memory being used
+                    and is not recommended, however it will make keywords,
+                    descriptions, and other fields available. This data
+                    is not loaded by default.
+                    NOTE: This flag must be used on the *FIRST* call to
+                    show_menu2 *for this menu ID*, or in combination with
+                    SM2_NOCACHE otherwise it will have no effect.
+
+    SM2_NOCACHE     Do not reuse or store the data read from the database
+                    between calls to show_menu2.
+
+    SM2_PRETTY      Pretty print the menu HTML with spacing and newlines
+                    for debugging purposes.
+
+    SM2_BUFFER      Do not output the menu HTML but instead buffer it
+                    internally and return it as a string from show_menu2.
+
+    SM2_CURRTREE    Exclude all other top level menus from being considered.
+                    Only items in the current menu tree will be output.
+                    This can be combined with any of the Group 1 flags as
+                    necessary.
+
+    SM2_ESCAPE      Call htmlspecialchars on the menu strings. This may be
+                    required with older installations of WB. By escaping the
+                    raw database strings, it permits menus to have HTML
+                    formatting in them that would cause otherwise cause
+                    pages to fail validation.
+
+    SM2_SHOWHIDDEN  Hidden pages are usually hidden all of the time, including
+                    when they are active (i.e. current page or a parent page).
+                    Use private pages for time when you want pages to be
+                    hidden except when active. However for compatibility with
+                    release 4.8, supply this flag to enable hidden pages to
+                    become visible when they are active.
+
+    SM2_XHTML_STRICT	From all links, created by [a] or [ac], the 'target' -
+					attribute will be removed to preserve the XHTML-Compatibility
+
+	SM2_NO_TITLE	Supress the value of the 'title'-attributes on links which
+					are created by [a] or [ac] formatted links.
+
+    This parameter also has an extended mode where an associative array of
+    options is supplied. See the EXTENDED OPTIONS section for details.
+    Most users will NOT need to use this.
+
+$aItemOpen
+    Format string to use for creating each individual menu item entry.
+    A different format string may be used for the very first entry by
+    supplying a different format string for $aTopItemOpen. When set to
+    false, it uses the default of '[li][a][menu_title]</a>' to maintain
+    compatibility with show_menu(). Note however that CSS formatting is
+    often easier if the classes are added to the <a> tag. Use the format
+    string of '<li>[ac][menu_title]</a>' for this style of tag.
+
+    This parameter may also be specified as an instance of a formatting
+    class for the menu. See the section "Formatter" below for details of
+    the API this class must expose. When a formatter is supplied, all
+    arguments after $aItemOpen are ignored.
+
+$aItemClose
+    String used to close each item. Note that this is not a format
+    string and no keywords will be replaced. When set to false, it uses
+    the default of '</li>'.
+
+$aMenuOpen
+    Format string to use for opening a list of menu item entries. A
+    different format string may be used for the very first menu by
+    supplying a different format string for $aTopMenuOpen. When set to
+    false, it uses the default of '[ul]'.
+
+$aMenuClose
+    String used to close each menu. Note that this is not a format
+    string and no keywords will be replaced. When set to false, it uses
+    the default of '</ul>'.
+
+$aTopItemOpen
+    Format string for the first item. When set to false, it uses the same
+    format as $aItemOpen.
+
+$aTopMenuOpen
+    Format string for the first menu. When set to false, it uses the same
+    format as $aMenuOpen.
+
+
+
+EXTENDED OPTIONS
+================
+The $aOptions parameter is a dual mode parameter. For most users, only the
+SM2_* flags will be sufficient. However, to access the extra options, it
+must be supplied as an associative array. Note that the SM2_* flags are
+still required and must be supplied as 'flags'.
+
+    'flags'     **REQUIRED** These are the flags described in PARAMETERS
+                above for the $aOptions parameter.
+
+    'notrim'    Specify a number of levels relative to the menu level of
+                $aStart that will always be displayed. This will cause the
+                SM2_TRIM flag to be ignored for these levels.
+
+To supply one of these options in addition to the flags, the option array
+should be created and passed as the $aOptions parameter:
+
+    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
+    $sMenu = show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
+
+
+
+FORMAT STRINGS
+==============
+The following tags may be included in the format strings for $aItemOpen and
+$aMenuOpen and will be replaced with the appropriate text.
+
+[a]             <a> tag (no class):         '<a href="[url]" target="[target]">'
+[ac]            <a> tag including class:    '<a href="[url]" target="[target]" class="[class]">'
+[li]            <li> tag including class:   '<li class="[class]">'
+[ul]            <ul> tag including class:   '<ul class="[class]">'
+[class]         List of classes for that page
+[menu_title]    Menu title text (HTML entity escaped unless SM2_NOESCAPE flag is used)
+[menu_icon_0]	URL poining to an image for display normal - status (from WB2.8.4)
+[menu_icon_1]	URL poining to an image for display active/hover - status (from WB2.8.4)
+[page_title]    Page title text (HTML entity escaped unless SM2_NOESCAPE flag is used)
+[page_icon]		URL poining to an image relating to the current page (from WB2.8.4)
+[tooltip]       Tooltip caption, normaly shown in title-attribute of links (ab WB2.8.4)
+[url]           Page URL for the <a> tag
+[target]        Page target for the <a> tag
+[page_id]       Page ID of the current menu item
+[parent]        Page ID of the parent menu item
+[level]         Page level, the same number as is used for the "menu-N" CSS tag.
+[sib]           Current menu sibling number
+[sibCount]      Total number of siblings in this menu
+[if]            Conditional test (see section CONDITIONAL FORMATTING)
+
+The following tags are only available when the SM2_ALLINFO flag is used.
+
+[description]   Page description
+[keywords]      Page keywords
+
+
+
+CONDITIONAL FORMATTING
+======================
+The conditional formatting directive takes one of the following forms:
+
+    [if(A){B}]
+    [if(A){B}else{C}]
+
+    A   Conditional test. See below for more details.
+
+    B   Expression emitted when the if-test is true. This may be any string
+        that does NOT include the '}' character. It may include any of the
+        format strings described in the section FORMAT STRINGS with the
+        exception of the conditional test (because '}' is not permitted).
+
+    C   Expression emitted when the if-test is false. This may be any string
+        that does NOT include the '}' character. It may include any of the
+        format strings described in the section FORMAT STRINGS with the
+        exception of the conditional test (because '}' is not permitted).
+
+The conditional test is a combination of one or more boolean tests.
+If more than one test is supplied, it must be combined with other tests
+using either || (boolean OR) or && (boolean AND).
+
+A single test is made up of the left operand, operator and right operand.
+e.g. X == Y where X is the left operand, == is the operator and Y is the
+right operand.
+
+    Left operand. It must be one of the following keywords:
+        class       Test for existence of one of the classes. Only the
+                    "==" and "!=" operators are permitted. In this case
+                    these operators have the meaning of "includes"
+                    instead of "equals".
+        level       Test against the page level.
+        sib         Test against the current page sibling number.
+        sibCount    Test against the number of siblings in the menu.
+        id          Test against the page id.
+		target		Test against the target attribute
+
+    Operator. It must be one of the following:
+        <           Less Than
+        <=          Less Than Equals
+        ==          Equals
+        !=          Not Equal
+        >=          Greater Than Equals
+        >           Greater Than
+
+    Right operand. The type of this operand depends on the keyword used
+    for the left operand:
+        class       One of the "menu-*" class names as listed in the
+                    section "OUTPUT".
+        level       Test the page level against the following values:
+                      <number>  absolute page level
+                      root      the root page level
+                      granny    the grand-parent page level
+                      parent    the parent page level
+                      current   the current page level
+                      child     the child page level
+        id          Test the page id against the following values:
+                      <number>  absolute page id
+                      parent    the parent page id
+                      current   the current page id
+        sib         A positive integer, or "sibCount" to test against
+                    the count of siblings in this menu.
+        sibCount    A positive integer.
+		target		A string, containing a possible target
+
+For example, valid tests are expression "exp" is emitted only when the menu item:
+
+    [if(class==menu-expand){exp}]   has a sub-menu
+    [if(class==menu-first){exp}]    is first item in a menu
+    [if(class!=menu-first){exp}]    is NOT first item in a menu
+    [if(class==menu-last){exp}]     is last item in a menu
+    [if(level==0){exp}]             is at the root
+    [if(level>0){exp}]              is not at the root
+    [if(sib==2){exp}]               is the second item in a menu
+    [if(sibCount>1){exp}]           is in a menu with more than 1 entry
+    [if(sibCount!=2){exp}]          is in a menu which doesn't have exactly
+    [if(level>parent){exp}]         is in a sibling menu or child of a sibling
+    [if(id==parent){exp}]           is the parent of the current page
+	[if(target==_self){exp}]		if value of target-attribute is '_self'
+
+If an else-clause was added, then the expression for the else would be
+emitted in all other cases. For example the expression "foo" is emitted
+whenever the if-test is false, so therefore:
+
+    [if(sib==2){exp}else{foo}]          is NOT the second item in a menu
+    [if(sibCount>2){exp}else{foo}]      is NOT in a menu with more than 2 entries
+
+For multiple tests, the expression "exp" is emitted only when the menu item:
+
+    [if(sib == 1 || sib > 3){exp}]
+        [is the first item] OR [is the 4th or larger item] in the menu
+
+    [if(id == current && class == menu-expand){exp}
+        [is the current item] AND [it has children]
+
+Note that all tests are evaluated in the order listed because:
+ * there is no short-circuit evaluation (all individual tests are always evaluated)
+ * there is no grouping of tests (i.e. no support for parenthesis)
+ * both || and && are considered the same level
+
+
+
+FORMATTER
+=========
+Note: This is an advanced and rarely needed feature!
+
+If you are capable of extensive PHP programming, it is possible to replace the
+predefined menu formatter that show_menu2 is uses with a custom module. See the
+include.php file of show_menu2 for an example of how the menu formatter must be
+written. The API it must use is:
+
+class SM2_Formatter
+{
+    // called once before any menu is processed to allow object initialization
+    function initialize() { }
+
+    // called to open the menu list
+    function startList($aPage, $aUrl) { }
+
+    // called to open the menu item
+    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
+
+    // called to close the menu item
+    function finishItem() { }
+
+    // called to close the menu list
+    function finishList() { }
+
+    // called once after all menu has been processed to allow object finalization
+    function finalize() { }
+
+    // called once after finalize() if the SM2_NOOUTPUT flag is used
+    function getOutput() { }
+};
Index: trunk/modules/show_menu2/FTAN_SUPPORTED
===================================================================
--- trunk/modules/show_menu2/FTAN_SUPPORTED	(nonexistent)
+++ trunk/modules/show_menu2/FTAN_SUPPORTED	(revision 2)
@@ -0,0 +1 @@
+This module supports the FTAN-System
\ No newline at end of file
Index: trunk/modules/show_menu2/LICENCE.txt
===================================================================
--- trunk/modules/show_menu2/LICENCE.txt	(nonexistent)
+++ trunk/modules/show_menu2/LICENCE.txt	(revision 2)
@@ -0,0 +1,278 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
Index: trunk/modules/show_menu2/include.php
===================================================================
--- trunk/modules/show_menu2/include.php	(nonexistent)
+++ trunk/modules/show_menu2/include.php	(revision 2)
@@ -0,0 +1,883 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         show_menu2
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+define('SM2_ROOT',          -1000);
+define('SM2_CURR',          -2000);
+define('SM2_ALLMENU',          -1);
+define('SM2_START',          1000);
+define('SM2_MAX',            2000);
+define('SM2_ALL',          0x0001); // bit 0 (group 1) (Note: also used for max level!)
+define('SM2_TRIM',         0x0002); // bit 1 (group 1)
+define('SM2_CRUMB',        0x0004); // bit 2 (group 1)
+define('SM2_SIBLING',      0x0008); // bit 3 (group 1)
+define('SM2_NUMCLASS',     0x0010); // bit 4
+define('SM2_ALLINFO',      0x0020); // bit 5
+define('SM2_NOCACHE',      0x0040); // bit 6
+define('SM2_PRETTY',       0x0080); // bit 7
+define('SM2_ESCAPE',       0x0100); // bit 8
+define('SM2_NOESCAPE',          0); // NOOP, unnecessary with WB 2.6.7+
+define('SM2_BUFFER',       0x0200); // bit 9
+define('SM2_CURRTREE',     0x0400); // bit 10
+define('SM2_SHOWHIDDEN',   0x0800); // bit 11
+define('SM2_XHTML_STRICT', 0x1000); // bit 12
+define('SM2_NO_TITLE',     0x2000); // bit 13
+
+define('_SM2_GROUP_1',  0x000F); // exactly one flag from group 1 is required
+
+
+// Implement support for page_menu and show_menu using show_menu2. If you remove
+// the comments characters from the beginning of the following include, all menu
+// functions in Website Baker will be implemented using show_menu2. While it is
+// commented out, the original WB functions will be used.
+//include('legacy.php');
+
+// This class is the default menu formatter for sm2. If desired, you can
+// create your own formatter class and pass the object into show_menu2
+// as $aItemFormat.
+define('SM2_CONDITIONAL','if\s*\(([^\)]+)\)\s*{([^}]*)}\s*(?:else\s*{([^}]*)}\s*)?');
+define('SM2_COND_TERM','\s*(\w+)\s*(<|<=|==|=|=>|>|!=)\s*([\w\-]+)\s*');
+class SM2_Formatter
+{
+    public $output;
+    public $flags;
+    public $itemOpen;
+    public $itemClose;
+    public $menuOpen;
+    public $menuClose;
+    public $topItemOpen;
+    public $topMenuOpen;
+
+    public $isFirst;
+    public $page;
+    public $url;
+    public $currSib;
+    public $sibCount;
+    public $currClass;
+    public $prettyLevel;
+
+    public function __construct() {
+
+    }
+
+    // output the data
+    function output($aString) {
+        if ($this->flags & SM2_BUFFER) {
+            $this->output .= $aString;
+        }
+        else {
+            echo $aString;
+        }
+    }
+
+    // set the default values for all of our formatting items
+    function set($aFlags, $aItemOpen, $aItemClose, $aMenuOpen, $aMenuClose, $aTopItemOpen, $aTopMenuOpen) {
+        $this->flags        = $aFlags;
+        $this->itemOpen     = is_string($aItemOpen)    ? $aItemOpen    : '[li][a][menu_title]</a>';
+        $this->itemClose    = is_string($aItemClose)   ? $aItemClose   : '</li>';
+        $this->menuOpen     = is_string($aMenuOpen)    ? $aMenuOpen    : '[ul]';
+        $this->menuClose    = is_string($aMenuClose)   ? $aMenuClose   : '</ul>';
+        $this->topItemOpen  = is_string($aTopItemOpen) ? $aTopItemOpen : $this->itemOpen;
+        $this->topMenuOpen  = is_string($aTopMenuOpen) ? $aTopMenuOpen : $this->menuOpen;
+    }
+
+    // initialize the state of the formatter before anything is output
+    function initialize() {
+        $this->output = '';
+        $this->prettyLevel = 0;
+        if ($this->flags & SM2_PRETTY) {
+            $this->output("\n<!-- show_menu2 -->");
+        }
+    }
+
+    // start a menu
+    function startList(&$aPage, &$aUrl) {
+        $currClass = '';
+        $currItem = $this->menuOpen;
+
+        // use the top level menu open if this is the first menu
+        if ($this->topMenuOpen) {
+            $currItem = $this->topMenuOpen;
+            $currClass .= ' menu-top';
+            $this->topMenuOpen = false;
+        }
+
+        // add the numbered menu class only if requested
+        if (($this->flags & SM2_NUMCLASS) == SM2_NUMCLASS) {
+            $currClass .= ' menu-'.$aPage['level'];
+        }
+
+        $this->prettyLevel += 1;
+
+        // replace all keywords in the output
+        if ($this->flags & SM2_PRETTY) {
+            $this->output("\n".str_repeat(' ',$this->prettyLevel).
+                $this->format($aPage, $aUrl, $currItem, $currClass));
+        }
+        else {
+            $this->output($this->format($aPage, $aUrl, $currItem, $currClass));
+        }
+
+        $this->prettyLevel += 3;
+    }
+
+    // start an item within the menu
+    function startItem(&$aPage, &$aUrl, $aCurrSib, $aSibCount) {
+        // generate our class list
+        $currClass = '';
+        if (($this->flags & SM2_NUMCLASS) == SM2_NUMCLASS) {
+            $currClass .= ' menu-'.$aPage['level'];
+        }
+        if (array_key_exists('sm2_has_child', $aPage) &&
+            !array_key_exists('sm2_is_max_level', $aPage)
+        ) {
+        // if item has child(ren) and is not topmost level
+            $currClass .= ' menu-expand';
+        }
+        if (array_key_exists('sm2_is_curr', $aPage)) {
+            $currClass .= ' menu-current';
+        }
+        elseif (array_key_exists('sm2_is_parent', $aPage)) {
+            // not set if false, so existence = true
+            $currClass .= ' menu-parent';
+        }
+        elseif (array_key_exists('sm2_is_sibling', $aPage)) {
+            // not set if false, so existence = true
+            $currClass .= ' menu-sibling';
+        }
+        elseif (array_key_exists('sm2_child_level',$aPage)) {
+            // not set if not a child
+            $currClass .= ' menu-child';
+            if (($this->flags & SM2_NUMCLASS) == SM2_NUMCLASS) {
+                $currClass .= ' menu-child-'.($aPage['sm2_child_level']-1);
+            }
+        }
+        if ($aCurrSib == 1) {
+            $currClass .= ' menu-first';
+        }
+        if ($aCurrSib == $aSibCount) {
+            $currClass .= ' menu-last';
+        }
+
+        // use the top level item if this is the first item
+        $currItem = $this->itemOpen;
+        if ($this->topItemOpen) {
+            $currItem = $this->topItemOpen;
+            $this->topItemOpen = false;
+        }
+
+        // replace all keywords in the output
+        if ($this->flags & SM2_PRETTY) {
+            $this->output("\n".str_repeat(' ',$this->prettyLevel));
+        }
+        $this->output($this->format($aPage, $aUrl, $currItem, $currClass, $aCurrSib, $aSibCount));
+    }
+
+    // find and replace all keywords, setting the state variables first
+    function format(&$aPage, &$aUrl, &$aCurrItem, &$aCurrClass,
+        $aCurrSib = 0, $aSibCount = 0)
+    {
+        $this->page      = &$aPage;
+        $this->url       = &$aUrl;
+        $this->currClass = trim($aCurrClass);
+        $this->currSib   = $aCurrSib;
+        $this->sibCount  = $aSibCount;
+
+        $item = $this->format2($aCurrItem);
+
+        unset($this->page);
+        unset($this->url);
+        unset($this->currClass);
+
+        return $item;
+    }
+
+    // find and replace all keywords
+    function format2(&$aCurrItem) {
+        if (!is_string($aCurrItem)) return '';
+        return preg_replace_callback(
+            '@\[('.
+                'a|ac|/a|li|/li|ul|/ul|menu_title|menu_icon_0|menu_icon_1|'.
+                'page_title|page_icon|url|target|page_id|tooltip|'.
+                'parent|level|sib|sibCount|class|description|keywords|'.
+                SM2_CONDITIONAL.
+            ')\]@',
+            array($this, 'replace'),
+            $aCurrItem);
+    }
+
+    // replace the keywords
+    function replace($aMatches) {
+        $aMatch = $aMatches[1];
+        $retval = '['.$aMatch.'=UNKNOWN]';
+        $retval_1 = '';
+        switch ($aMatch) {
+        case 'a':
+            $retval_1 = '<a href="'.$this->url.'"';
+        case 'ac':
+            $retval = '<a href="'.$this->url.'" class="'.$this->currClass.'"';
+            $retval = ($retval_1 == '') ? $retval : $retval_1;
+            if(($this->flags & SM2_XHTML_STRICT)) {
+                $retval .= ' title="'.(($this->flags & SM2_NO_TITLE) ? '&nbsp;' : $this->page['tooltip']).'"';
+            }
+            else {
+                $retval .= ' target="'.$this->page['target'].'"';
+                $retval .= ($this->flags & SM2_NO_TITLE) ? '' : ' title="'.$this->page['tooltip'].'"';
+            }
+            $retval .= '>';
+            break;
+        case '/a':
+            $retval = '</a>'; break;
+        case 'li':
+            $retval = '<li class="'.$this->currClass.'">'; break;
+        case '/li':
+            $retval = '</li>'; break;
+        case 'ul':
+            $retval = '<ul class="'.$this->currClass.'">'; break;
+        case '/ul':
+            $retval = '</ul>'; break;
+        case 'url':
+            $retval = $this->url; break;
+        case 'sib':
+            $retval = $this->currSib; break;
+        case 'sibCount':
+            $retval = $this->sibCount; break;
+        case 'class':
+            $retval = $this->currClass; break;
+        default:
+            if (array_key_exists($aMatch, $this->page)) {
+                if ($this->flags & SM2_ESCAPE) {
+                    $retval = htmlspecialchars($this->page[$aMatch], ENT_QUOTES);
+                }
+                else {
+                    $retval = $this->page[$aMatch];
+                }
+            }
+            if (preg_match('/'.SM2_CONDITIONAL.'/', $aMatch, $rgMatches)) {
+                $retval = $this->replaceIf($rgMatches[1], $rgMatches[2], $rgMatches[3]);
+            }
+        }
+        return $retval;
+    }
+
+    // conditional replacement
+    function replaceIf(&$aExpression, &$aIfValue, &$aElseValue) {
+        // evaluate all of the tests in the conditional (we don't do short-circuit
+        // evaluation) and replace the string test with the boolean result
+        $rgTests = preg_split('/(\|\||\&\&)/', $aExpression, -1, PREG_SPLIT_DELIM_CAPTURE);
+        for ($n = 0; $n < count($rgTests); $n += 2) {
+            if (preg_match('/'.SM2_COND_TERM.'/', $rgTests[$n], $rgMatches)) {
+                $rgTests[$n] = $this->ifTest($rgMatches[1], $rgMatches[2], $rgMatches[3]);
+            }
+            else {
+                @SM2_error_logs("show_menu2 error: conditional expression is invalid!");
+                $rgTests[$n] = false;
+            }
+        }
+
+        // combine all test results for a final result
+        $ok = $rgTests[0];
+        for ($n = 1; $n+1 < count($rgTests); $n += 2) {
+            if ($rgTests[$n] == '||') {
+                $ok = $ok || $rgTests[$n+1];
+            }
+            else {
+                $ok = $ok && $rgTests[$n+1];
+            }
+        }
+
+        // return the formatted expression if the test succeeded
+        return $ok ? $this->format2($aIfValue) : $this->format2($aElseValue);
+    }
+
+    // conditional test
+    function ifTest(&$aKey, &$aOperator, &$aValue) {
+        global $wb;
+
+        // find the correct operand
+        $operand = false;
+        switch($aKey) {
+        case 'class':
+            // we need to wrap the class names in spaces so we can test for a unique
+            // class name that will not match prefixes or suffixes. Same must be done
+            // for the value we are testing.
+            $operand = " $this->currClass ";
+            break;
+        case 'target':
+            $operand = $this->page['target'];
+            break;
+        case 'sib':
+            $operand = $this->currSib;
+            if ($aValue == 'sibCount') {
+                $aValue = $this->sibCount;
+            }
+            break;
+        case 'sibCount':
+            $operand = $this->sibCount;
+            break;
+        case 'level':
+            $operand = $this->page['level'];
+            switch ($aValue) {
+            case 'root':    $aValue = 0; break;
+            case 'granny':  $aValue = $wb->page['level']-2; break;
+            case 'parent':  $aValue = $wb->page['level']-1; break;
+            case 'current': $aValue = $wb->page['level'];   break;
+            case 'child':   $aValue = $wb->page['level']+1; break;
+            }
+            if ($aValue < 0) $aValue = 0;
+            break;
+        case 'id':
+            $operand = $this->page['page_id'];
+            switch ($aValue) {
+            case 'parent':  $aValue = $wb->page['parent'];  break;
+            case 'current': $aValue = $wb->page['page_id']; break;
+            }
+            break;
+        default:
+            return '';
+        }
+
+        // do the test
+        $ok = false;
+        switch ($aOperator) {
+        case '<':
+            $ok = ($operand < $aValue);
+            break;
+        case '<=':
+            $ok = ($operand <= $aValue);
+            break;
+        case '=':
+        case '==':
+        case '!=':
+            if ($aKey == 'class') {
+                $ok = strstr($operand, " $aValue ") !== FALSE;
+            }
+            else {
+                $ok = ($operand == $aValue);
+            }
+            if ($aOperator == '!=') {
+                $ok = !$ok;
+            }
+            break;
+        case '>=':
+            $ok = ($operand >= $aValue);
+        case '>':
+            $ok = ($operand > $aValue);
+        }
+
+        return $ok;
+    }
+
+    // finish the current menu item
+    function finishItem() {
+        if ($this->flags & SM2_PRETTY) {
+            $this->output(str_repeat(' ',$this->prettyLevel).$this->itemClose);
+        }
+        else {
+            $this->output($this->itemClose);
+        }
+    }
+
+    // finish the current menu
+    function finishList() {
+        $this->prettyLevel -= 3;
+
+        if ($this->flags & SM2_PRETTY) {
+            $this->output("\n".str_repeat(' ',$this->prettyLevel).$this->menuClose."\n");
+        }
+        else {
+            $this->output($this->menuClose);
+        }
+
+        $this->prettyLevel -= 1;
+    }
+
+    // cleanup the state of the formatter after everything has been output
+    function finalize() {
+        if ($this->flags & SM2_PRETTY) {
+            $this->output("\n");
+        }
+    }
+
+    // return the output
+    function getOutput() {
+        return $this->output;
+    }
+};
+
+function sm2_error_logs($error_str)
+{
+                $log_error = true;
+                if ( ! function_exists('error_log') )
+                        $log_error = false;
+
+                $log_file = @ini_get('error_log');
+                if ( !empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file) )
+                        $log_error = false;
+
+                if ( $log_error )
+                        @error_log($error_str, 0);
+}
+
+function show_menu2(
+    $aMenu          = 0,
+    $aStart         = SM2_ROOT,
+    $aMaxLevel      = -1999, // SM2_CURR+1
+    $aOptions       = SM2_TRIM,
+    $aItemOpen      = false,
+    $aItemClose     = false,
+    $aMenuOpen      = false,
+    $aMenuClose     = false,
+    $aTopItemOpen   = false,
+    $aTopMenuOpen   = false
+    ){
+    global $wb;
+    // extract the flags and set $aOptions to an array
+    $flags = SM2_TRIM;
+    if (is_int($aOptions)) {
+        $flags = $aOptions;
+        $aOptions = array();
+    } elseif (isset($aOptions['flags'])) {
+        $flags = $aOptions['flags'];
+    } else {
+        $flags = SM2_TRIM;
+        $aOptions = array();
+        @sm2_error_logs('show_menu2 error: $aOptions is invalid. No flags supplied!');
+    }
+    if ($flags & 0xF == 0) { $flags |= SM2_TRIM; }
+    // ensure we have our group 1 flag, we don't check for the "exactly 1" part, but
+    // we do ensure that they provide at least one.
+    if (0 == ($flags & _SM2_GROUP_1)) {
+        @sm2_error_logs('show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!');
+        $flags |= SM2_TRIM; // default to TRIM
+    }
+
+    // search page results don't have any of the page data loaded by WB, so we load it
+    // ourselves using the referrer ID as the current page
+    $CURR_PAGE_ID = defined('REFERRER_ID') ? REFERRER_ID : PAGE_ID;
+    if (count($wb->page) == 0 && defined('REFERRER_ID') && REFERRER_ID > 0) {
+        global $database;
+        $sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` WHERE `page_id` = '.REFERRER_ID.'';
+        $result = $database->query($sql);
+        if ($result->numRows() == 1) {
+            $wb->page = $result->fetchRow();
+        }
+        unset($result);
+    }
+
+    // fix up the menu number to default to the menu number
+    // of the current page if no menu has been supplied
+    if ($aMenu == 0) {
+        $aMenu = $wb->page['menu'] == '' ? 1 : $wb->page['menu'];
+    }
+
+    // Set some of the $wb->page[] settings to defaults if not set
+    $pageLevel  = $wb->page['level']  == '' ? 0 : $wb->page['level'];
+    $pageParent = $wb->page['parent'] == '' ? 0 : $wb->page['parent'];
+
+    // adjust the start level and start page ID as necessary to
+    // handle the special values that can be passed in as $aStart
+    $aStartLevel = 0;
+    if ($aStart < SM2_ROOT) {   // SM2_CURR+N
+        if ($aStart == SM2_CURR) {
+            $aStartLevel = $pageLevel;
+            $aStart = $pageParent;
+        }
+        else {
+            $aStartLevel = $pageLevel + $aStart - SM2_CURR;
+            $aStart = $CURR_PAGE_ID;
+        }
+    }
+    elseif ($aStart < 0) {   // SM2_ROOT+N
+        $aStartLevel = $aStart - SM2_ROOT;
+        $aStart = 0;
+    }
+
+    // adjust $aMaxLevel to the level number of the final level that
+    // will be displayed. That is, we display all levels <= aMaxLevel.
+    if ($aMaxLevel == SM2_ALL) {
+        $aMaxLevel = 1000;
+    }
+    elseif ($aMaxLevel < 0) {   // SM2_CURR+N
+        $aMaxLevel += $pageLevel - SM2_CURR;
+    }
+    elseif ($aMaxLevel >= SM2_MAX) { // SM2_MAX+N
+        $aMaxLevel += $aStartLevel - SM2_MAX;
+        if ($aMaxLevel > $pageLevel) {
+            $aMaxLevel = $pageLevel;
+        }
+    }
+    else {  // SM2_START+N
+        $aMaxLevel += $aStartLevel - SM2_START;
+    }
+
+    // we get the menu data once and store it in a global variable. This allows
+    // multiple calls to show_menu2 in a single page with only a single call to
+    // the database. If this variable exists, then we have already retrieved all
+    // of the information and processed it, so we don't need to do it again.
+    if (($flags & SM2_NOCACHE) != 0
+        || !array_key_exists('show_menu2_data', $GLOBALS)
+        || !array_key_exists($aMenu, $GLOBALS['show_menu2_data']))
+    {
+        global $database;
+
+        // create an array of all parents of the current page. As the page_trail
+        // doesn't include the theoretical root element 0, we add it ourselves.
+        $rgCurrParents = explode(",", '0,'.$wb->page['page_trail']);
+        array_pop($rgCurrParents); // remove the current page
+        $rgParent = array();
+
+        // if the caller wants all menus gathered together (e.g. for a sitemap)
+        // then we don't limit our SQL query
+        $menuLimitSql = ' AND `menu`='.$aMenu;
+        if ($aMenu == SM2_ALLMENU) {
+            $menuLimitSql = '';
+        }
+
+        // we only load the description and keywords if we have been told to,
+        // this cuts the memory load for pages that don't use them. Note that if
+        // we haven't been told to load these fields the *FIRST TIME* show_menu2
+        // is called (i.e. where the database is loaded) then the info won't
+        // exist anyhow.
+        $fields  = '`parent`,`page_id`,`menu_title`,`page_title`,`link`,`target`,';
+        $fields .= '`level`,`visibility`,`viewing_groups`';
+        if (version_compare(WB_VERSION, '2.7', '>=')) { // WB 2.7+
+            $fields .= ',`viewing_users`';
+        }
+        if(version_compare(WB_VERSION, '2.8.3', '>=')) {
+            $fields .= ',`menu_icon_0`,`menu_icon_1`,`page_icon`,`tooltip`';
+        }
+        if ($flags & SM2_ALLINFO) {
+            $fields = '*';
+        }
+
+        // we request all matching rows from the database for the menu that we
+        // are about to create it is cheaper for us to get everything we need
+        // from the database once and create the menu from memory then make
+        // multiple calls to the database.
+        $sql  = 'SELECT '.$fields.' FROM `'.TABLE_PREFIX.'pages` ';
+        $sql .= 'WHERE '.$wb->extra_where_sql.' '.$menuLimitSql.' ';
+        $sql .= 'ORDER BY `level` ASC, `position` ASC';
+        $sql = str_replace('hidden', 'IGNOREME', $sql); // we want the hidden pages
+        $oRowset = $database->query($sql);
+        if (is_object($oRowset) && $oRowset->numRows() > 0) {
+            // create an in memory array of the database data based on the item's parent.
+            // The array stores all elements in the correct display order.
+            while ($page = $oRowset->fetchRow(MYSQLI_ASSOC)) {
+                // ignore all pages that the current user is not permitted to view
+                if(version_compare(WB_VERSION, '2.7', '>=')) { // WB >= 2.7
+                    // 1. hidden pages aren't shown unless they are on the current page
+                    if ($page['visibility'] == 'hidden') {
+                        if (($flags & SM2_SHOWHIDDEN)==false) {
+                            // show hidden pages if SHOWHIDDEN flag supplied
+                            $page['sm2_hide'] = true;
+                        }
+                    }
+
+                    // 2. all pages with no active sections (unless it is the top page) are ignored
+                    else if (!$wb->page_is_active($page) && $page['link'] != $wb->default_link && !INTRO_PAGE) {
+                        continue;
+                    }
+
+                    // 3. all pages not visible to this user (unless always visible to registered users) are ignored
+                    else if (!$wb->page_is_visible($page) && $page['visibility'] != 'registered') {
+                        continue;
+                    }
+                }
+                if(isset($page['page_icon']) && $page['page_icon'] != '') {
+                    $page['page_icon'] = WB_URL.$page['page_icon'];
+                }
+                if(isset($page['menu_icon_0']) && $page['menu_icon_0'] != '') {
+                    $page['menu_icon_0'] = WB_URL.$page['menu_icon_0'];
+                }
+                if(isset($page['menu_icon_1']) && $page['menu_icon_1'] != '') {
+                    $page['menu_icon_1'] = WB_URL.$page['menu_icon_1'];
+                }
+
+                if(!isset($page['tooltip'])) { $page['tooltip'] = $page['page_title']; }
+                // ensure that we have an array entry in the table to add this to
+                $idx = $page['parent'];
+                if (!array_key_exists($idx, $rgParent)) {
+                    $rgParent[$idx] = array();
+                }
+
+                // mark our current page as being on the current path
+                if ($page['page_id'] == $CURR_PAGE_ID) {
+                    $page['sm2_is_curr'] = true;
+                    $page['sm2_on_curr_path'] = true;
+                    if ($flags & SM2_SHOWHIDDEN)
+                    {
+                        // show hidden pages if active and SHOWHIDDEN flag supplied
+                        unset($page['sm2_hide']);
+                    }
+                }
+                // mark our current page as being on the maximum level to show
+                if ($page['level'] == $aMaxLevel) {
+                    $page['sm2_is_max_level'] = true;
+                }
+
+                // mark parents of the current page as such
+                if (in_array($page['page_id'], $rgCurrParents)) {
+                    $page['sm2_is_parent'] = true;
+                    $page['sm2_on_curr_path'] = true;
+                    if ($flags & SM2_SHOWHIDDEN)
+                    {
+                        // show hidden pages if active and SHOWHIDDEN flag supplied
+                        unset($page['sm2_hide']); // don't hide a parent page
+                    }
+                }
+
+                // add the entry to the array
+                $rgParent[$idx][] = $page;
+            }
+        }
+        unset($oRowset);
+
+        // mark all elements that are siblings of any element on the current path
+        foreach ($rgCurrParents as $x) {
+            if (array_key_exists($x, $rgParent)) {
+                foreach (array_keys($rgParent[$x]) as $y) {
+                    $mark =& $rgParent[$x][$y];
+                    $mark['sm2_path_sibling'] = true;
+                    unset($mark);
+                }
+            }
+        }
+
+        // mark all elements that have children and are siblings of the current page
+        $parentId = $pageParent;
+        foreach (array_keys($rgParent) as $x) {
+            $childSet =& $rgParent[$x];
+            foreach (array_keys($childSet) as $y) {
+                $mark =& $childSet[$y];
+                if (array_key_exists($mark['page_id'], $rgParent)) {
+                    $mark['sm2_has_child'] = true;
+                }
+                if ($mark['parent'] == $parentId && $mark['page_id'] != $CURR_PAGE_ID) {
+                    $mark['sm2_is_sibling'] = true;
+                }
+                unset($mark);
+            }
+            unset($childSet);
+        }
+
+        // mark all children of the current page. We don't do this when
+        // $CURR_PAGE_ID is 0, as 0 is the parent of everything.
+        // $CURR_PAGE_ID == 0 occurs on special pages like search results
+        // when no referrer is available.s
+        if ($CURR_PAGE_ID != 0) {
+            sm2_mark_children($rgParent, $CURR_PAGE_ID, 1);
+        }
+
+        // store the complete processed menu data as a global. We don't
+        // need to read this from the database anymore regardless of how
+        // many menus are displayed on the same page.
+        if (!array_key_exists('show_menu2_data', $GLOBALS)) {
+            $GLOBALS['show_menu2_data'] = array();
+        }
+        $GLOBALS['show_menu2_data'][$aMenu] =& $rgParent;
+        unset($rgParent);
+    }
+/*
+    // adjust $aMaxLevel to the level number of the final level that
+    // will be displayed. That is, we display all levels <= aMaxLevel.
+    if ($aMaxLevel == SM2_ALL) {
+        $aMaxLevel = 1000;
+    }
+    elseif ($aMaxLevel < 0) {   // SM2_CURR+N
+        $aMaxLevel += $pageLevel - SM2_CURR;
+    }
+    elseif ($aMaxLevel >= SM2_MAX) { // SM2_MAX+N
+        $aMaxLevel += $aStartLevel - SM2_MAX;
+        if ($aMaxLevel > $pageLevel) {
+            $aMaxLevel = $pageLevel;
+        }
+    }
+    else {  // SM2_START+N
+        $aMaxLevel += $aStartLevel - SM2_START;
+    }
+*/
+    // generate the menu
+    $retval = false;
+    if (array_key_exists($aStart, $GLOBALS['show_menu2_data'][$aMenu])) {
+        $formatter = $aItemOpen;
+        if (!is_object($aItemOpen)) {
+            static $sm2formatter;
+            if (!isset($sm2formatter)) {
+                $sm2formatter = new SM2_Formatter();
+            }
+            $formatter = $sm2formatter;
+            $formatter->set($flags, $aItemOpen, $aItemClose,
+                $aMenuOpen, $aMenuClose, $aTopItemOpen, $aTopMenuOpen);
+        }
+
+        // adjust the level until we show everything and ignore the SM2_TRIM flag.
+        // Usually this will be less than the start level to disable it.
+        $showAllLevel = $aStartLevel - 1;
+        if (isset($aOptions['notrim'])) {
+            $showAllLevel = $aStartLevel + $aOptions['notrim'];
+        }
+
+        // display the menu
+        $formatter->initialize();
+        sm2_recurse(
+            $GLOBALS['show_menu2_data'][$aMenu],
+            $aStart,    // parent id to start displaying sub-menus
+            $aStartLevel, $showAllLevel, $aMaxLevel, $flags,
+            $formatter);
+        $formatter->finalize();
+
+
+        // if we are returning something, get the data
+        if (($flags & SM2_BUFFER) != 0) {
+            $retval = $formatter->getOutput();
+        }
+    }
+
+    // clear the data if we aren't caching it
+    if (($flags & SM2_NOCACHE) != 0) {
+        unset($GLOBALS['show_menu2_data'][$aMenu]);
+    }
+
+    return $retval;
+}
+
+function sm2_mark_children(&$rgParent, $aStart, $aChildLevel)
+{
+    if (array_key_exists($aStart, $rgParent)) {
+        foreach (array_keys($rgParent[$aStart]) as $y) {
+            $mark =& $rgParent[$aStart][$y];
+            $mark['sm2_child_level'] = $aChildLevel;
+            $mark['sm2_on_curr_path'] = true;
+            sm2_mark_children($rgParent, $mark['page_id'], $aChildLevel+1);
+        }
+    }
+}
+
+function sm2_recurse(
+    &$rgParent, $aStart,
+    $aStartLevel, $aShowAllLevel, $aMaxLevel, $aFlags,
+    &$aFormatter
+    )
+{
+    global $wb;
+
+    // on entry to this function we know that there are entries for this
+    // parent and all entries for that parent are being displayed. We also
+    // need to check if any of the children need to be displayed too.
+    $isListOpen = false;
+    $currentLevel = $wb->page['level'] == '' ? 0 : $wb->page['level'];
+
+    // get the number of siblings skipping the hidden pages so we can pass
+    // this in and check if the item is first or last
+    $sibCount = 0;
+    foreach ($rgParent[$aStart] as $page) {
+        if (!array_key_exists('sm2_hide', $page)) $sibCount++;
+    }
+
+    $currSib = 0;
+    foreach ($rgParent[$aStart] as $mKey => $page) {
+        // skip all hidden pages
+        if (array_key_exists('sm2_hide', $page)) { // not set if false, so existence = true
+            continue;
+        }
+
+        $currSib++;
+
+        // skip any elements that are lower than the maximum level
+        $pageLevel = $page['level'];
+
+        if ($pageLevel > $aMaxLevel) {
+            continue;
+        }
+
+        // this affects ONLY the top level
+        if ($aStart == 0 && ($aFlags & SM2_CURRTREE)) {
+            if (!array_key_exists('sm2_on_curr_path', $page)) { // not set if false, so existence = true
+                continue;
+            }
+            $sibCount = 1;
+        }
+
+        // trim the tree as appropriate
+        if ($aFlags & SM2_SIBLING) {
+            // parents, and siblings and children of current only
+            if (!array_key_exists('sm2_on_curr_path', $page)      // not set if false, so existence = true
+                && !array_key_exists('sm2_is_sibling', $page)     // not set if false, so existence = true
+                && !array_key_exists('sm2_child_level', $page)) { // not set if false, so existence = true
+                continue;
+            }
+        }
+        else if ($aFlags & SM2_TRIM) {
+            // parents and siblings of parents
+            if ($pageLevel > $aShowAllLevel  // permit all levels to be shown
+                && !array_key_exists('sm2_on_curr_path', $page)    // not set if false, so existence = true
+                && !array_key_exists('sm2_path_sibling', $page)) {  // not set if false, so existence = true
+                continue;
+            }
+        }
+        elseif ($aFlags & SM2_CRUMB) {
+            // parents only
+            if (!array_key_exists('sm2_on_curr_path', $page)    // not set if false, so existence = true
+                || array_key_exists('sm2_child_level', $page)) {  // not set if false, so existence = true
+                continue;
+            }
+        }
+
+        // depth first traverse
+        $nextParent = $page['page_id'];
+
+        // display the current element if we have reached the start level
+        if ($pageLevel >= $aStartLevel) {
+            // massage the link into the correct form
+            if(!INTRO_PAGE && $page['link'] == $wb->default_link) {
+                $url = WB_URL;
+            }
+            else {
+                $url = $wb->page_link($page['link']);
+            }
+
+            // we open the list only when we absolutely need to
+            if (!$isListOpen) {
+                $aFormatter->startList($page, $url);
+                $isListOpen = true;
+            }
+
+            $aFormatter->startItem($page, $url, $currSib, $sibCount);
+        }
+
+        // display children as appropriate
+        if ($pageLevel + 1 <= $aMaxLevel
+            && array_key_exists('sm2_has_child', $page)) {  // not set if false, so existence = true
+            sm2_recurse(
+                $rgParent, $nextParent, // parent id to start displaying sub-menus
+                $aStartLevel, $aShowAllLevel, $aMaxLevel, $aFlags,
+                $aFormatter);
+        }
+
+        // close the current element if appropriate
+        if ($pageLevel >= $aStartLevel) {
+            $aFormatter->finishItem($pageLevel, $page);
+        }
+    }
+
+    // close the list if we opened one
+    if ($isListOpen) {
+        $aFormatter->finishList();
+    }
+}
+

Property changes on: trunk/modules/show_menu2/include.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/index.php
===================================================================
--- trunk/modules/show_menu2/index.php	(nonexistent)
+++ trunk/modules/show_menu2/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        show_menu2
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/show_menu2/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/info.php
===================================================================
--- trunk/modules/show_menu2/info.php	(nonexistent)
+++ trunk/modules/show_menu2/info.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         show_menu2
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker '2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+$module_directory = 'show_menu2';
+$module_name = 'show_menu2 v4.9.11';
+$module_function = 'snippet';
+$module_version = '4.9.11';
+$module_platform = '2.8.3 SP7';
+$module_author = 'Brodie Thiesfield';
+$module_license = 'GNU General Public License';
+$module_description = 'A code snippet for the Website Baker CMS providing a complete replacement for the builtin menu functions. See <a href="http://code.jellycan.com/show_menu2/" target="_blank">http://code.jellycan.com/show_menu2/</a> for details or view the <a href="' .WB_URL .'/modules/show_menu2/README.en.txt" target="_blank">readme</a> file.';
+

Property changes on: trunk/modules/show_menu2/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/install.php
===================================================================
--- trunk/modules/show_menu2/install.php	(nonexistent)
+++ trunk/modules/show_menu2/install.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         show_menu2
+ * @author          Independend-Software-Team
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }

Property changes on: trunk/modules/show_menu2/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/DA.php
===================================================================
--- trunk/modules/show_menu2/languages/DA.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/DA.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE ADDON: SHOW_MENU2
+ -----------------------------------------------------------------------------------------
+*/
+
+// Dansk modulbeskrivelse
+$module_description = 'Dette modul integrerer den udvidede men&uuml;funktion <code>show_menu2()</code> i Website Baker. Der findes detaljeret information p&aring; <a href="http://code.jellycan.com/show_menu2/" target="_blank">http://code.jellycan.com/show_menu2/</a> eller i <a href="{WB_URL}/modules/show_menu2/README.en.txt" target="_blank">readme</a>filen.';
+
+?>

Property changes on: trunk/modules/show_menu2/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/DE.php
===================================================================
--- trunk/modules/show_menu2/languages/DE.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/DE.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+
+ -----------------------------------------------------------------------------------------
+  GERMAN LANGUAGE FILE FOR THE ADDON: SHOW_MENU2
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'Dieses Modul integriert die erweiterte Men&uuml;funktion <code>show_menu2()</code> in Website Baker. Detailierte Informationen gibt es auf <a href="http://code.jellycan.com/show_menu2/" target="_blank">http://code.jellycan.com/show_menu2/</a> oder in der <a href="{WB_URL}/modules/show_menu2/README.de.txt" target="_blank">readme</a> Datei.';
+
+?>

Property changes on: trunk/modules/show_menu2/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/FR.php
===================================================================
--- trunk/modules/show_menu2/languages/FR.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/FR.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: SHOW_MENU2
+ -----------------------------------------------------------------------------------------
+*/
+
+//Module Description
+$module_description = 'Ce module int&egrave;gre la fonction de menu avanc&eacute;e <code> show_menu2 () </ code> dans Website Baker. Une information d&eacute;taill&eacute;e est disponible sur <a href="http://code.jellycan.com/show_menu2/" target="_blank"> http://code.jellycan.com/show_menu2/ </a> ou dans le fichier <a href = "{WB_URL}/modules/show_menu2/README_DE" target = "_blank"> README </a>.';
+
+?>

Property changes on: trunk/modules/show_menu2/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/NL.php
===================================================================
--- trunk/modules/show_menu2/languages/NL.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/NL.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE ADDON: SHOW_MENU2
+ -----------------------------------------------------------------------------------------
+*/
+
+//Module Description
+$module_description = 'Deze module integreert een de geavanceerde menu functie <code> show_menu2 () </ code> in Website Baker. Gedetailleerde informatie is beschikbaar op <a href="http://code.jellycan.com/show_menu2/" target="_blank"> http://code.jellycan.com/show_menu2/ </a> of in de <a href = "{WB_URL}/modules/show_menu2/README_EN" target = "_blank"> README </a>.';
+
+?>

Property changes on: trunk/modules/show_menu2/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/NO.php
===================================================================
--- trunk/modules/show_menu2/languages/NO.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/NO.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+
+ -----------------------------------------------------------------------------------------
+  NORWEGIAN LANGUAGE FILE FOR THE ADDON: SHOW_MENU2
+ -----------------------------------------------------------------------------------------
+*/
+
+// Norwegian Moduledscripton
+$module_description = 'Dette er en kode snutt (snippet) beregnet p&aring; Website Baker CMS og er en fullgod erstatning for den innebygde meny modulen. For n&aelig;rmere beskrivelse se (Kun p&aring; Engelsk) <a href="http://code.jellycan.com/show_menu2/" target="_blank">http://code.jellycan.com/show_menu2/</a> , for mer WB spesifikke detaljer se <a href="' .WB_URL .'/modules/show_menu2/README.en.txt" target="_blank">readme</a> filen.';
+
+?>

Property changes on: trunk/modules/show_menu2/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/languages/index.php
===================================================================
--- trunk/modules/show_menu2/languages/index.php	(nonexistent)
+++ trunk/modules/show_menu2/languages/index.php	(revision 2)
@@ -0,0 +1,25 @@
+<?php
+
+/*
+    show_menu2: show_menu replacement for Website Baker 
+    Copyright (C) 2006-2009, Brodie Thiesfield
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    of the License, or (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+    02110-1301, USA.
+*/
+
+header('Location: ../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/show_menu2/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/legacy.php
===================================================================
--- trunk/modules/show_menu2/legacy.php	(nonexistent)
+++ trunk/modules/show_menu2/legacy.php	(revision 2)
@@ -0,0 +1,193 @@
+<?php
+/**
+ *
+ * @category        module
+ * @package         show_menu2
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.7.0 | 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/*
+    This file provides backward compatibility between show_menu2 and the
+    old functions show_menu() and menu(). Note that it is highly recommended 
+    for you to update your templates to use show_menu2 directly.
+ */    
+
+/* ----------------------------------------------------------------------------
+   show_menu
+   
+ From: http://forum.websitebaker.org/index.php/topic,2251.msg13978.html#msg13978  
+ 
+ * By calling it multiple times, you can have one menu just
+ * showing the root level, one for the sub-pages, and so on
+ * The order of the arguments has been changed compared
+ * to the page_menu() function, so read carefully the list
+ * of arguments!
+ * To just display the standard menu, use
+ * <?php show_menu(); ?> within your template's html code.
+ * You don't normally need anymore than the first four arguments.
+ * Usual calls would be (inside php code!)
+ * show_menu(1,0,-1,false); - displays the complete page tree
+ * show_menu(1,1,1); - show only first sub level
+ * show_menu(1,1,-1); -    show an expanding/collapsing menu tree starting at level 1
+ * Have fun experimenting!
+ *
+ * Full list of arguments:
+ * 1. $menu_number:   With activitated "multiple menu" feature
+ *                  you can choose which menu will be displayed
+ *                  default: 1
+ * 2. $start_level: The depth level of the root of the displayed
+ *               menu tree. Defaults to '0', which is the top level.
+ *                  '1' will show all pages starting from the first sub level.
+ * 3. $recurse:     Gives the maximum number of levels to be displayed. Default
+ *                  is '-1' which means 'all'.
+ * 4. $collapse:    Specifies, whether the menu tree shall be
+ *               expandable/collapsible (if set to 'true')
+ *               or complete (all pages being displayed) if set to 'false'
+ * 5. $item_template: Gives the possibility to specify the html code that is
+ *                  displayed before displaying sub-pages
+ * 6. $item_footer: The html code to appear after sub-pages were displayed.
+ * 7. $menu_header: The html code to appear before the entire menu code and each
+ *               sub tree.
+ * 8. $menu_footer: The html code to appear after the entire menu code and each
+ *               sub tree.
+ * 9. $default_class: The (CSS) class of every menu item except the currently viewed page
+ * 10. $current_class: The class of the currently viewed page
+ * 11. $parent:    (used internally) The page_id of the menu's root node, defaults is '0' (root level)
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+ 
+class SM2_ShowMenuFormatter
+{
+    var $output;
+    var $itemTemplate;
+    var $itemFooter;
+    var $menuHeader;
+    var $menuFooter;
+    var $defaultClass;
+    var $currentClass;
+    
+    function output($aString) {
+        if ($this->flags & SM2_BUFFER) {
+            $this->output .= $aString;
+        }
+        else {
+            echo $aString;
+        }
+    }
+    function initialize() { $this->output = ''; }
+    function startList($aPage, $aUrl) { 
+        echo $this->menuHeader;
+    }
+    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { 
+        // determine the class string to use
+        $thisClass = $this->defaultClass;
+        if ($aPage['page_id'] == PAGE_ID) {
+            $thisClass = $this->currentClass;
+        }
+        
+        // format and display this item
+        $item = str_replace( 
+                array(
+                    '[a]','[/a]','[menu_title]','[page_title]','[url]',
+                    '[target]','[class]'
+                    ),
+                array(
+                    "<a href='$aUrl' target='".$aPage['target']."'>", '</a>',
+                    $aPage['menu_title'], $aPage['page_title'], $aUrl, 
+                    $aPage['target'], $thisClass
+                    ),
+                $this->itemTemplate);
+        echo $item;
+    }
+    function finishItem() { 
+        echo $this->itemFooter;
+    }
+    function finishList() { 
+        echo $this->menuFooter;
+    }
+    function finalize() { }
+    function getOutput() {
+        return $this->output;
+    }
+}
+
+function show_menu(
+    $aMenu          = 1, 
+    $aStartLevel    = 0, 
+    $aRecurse       = -1, 
+    $aCollapse      = true,
+    $aItemTemplate  = '<li><span[class]>[a][menu_title][/a]</span>',
+    $aItemFooter    = '</li>',
+    $aMenuHeader    = '<ul>',
+    $aMenuFooter    = '</ul>',
+    $aDefaultClass  = ' class="menu_default"',
+    $aCurrentClass  = ' class="menu_current"',
+    $aParent        = 0
+    )
+{
+    static $formatter;
+    if (!isset($formatter)) {
+        $formatter = new SM2_ShowMenuFormatter;
+    }
+    
+    $formatter->itemTemplate  = $aItemTemplate;
+    $formatter->itemFooter    = $aItemFooter;  
+    $formatter->menuHeader    = $aMenuHeader;  
+    $formatter->menuFooter    = $aMenuFooter;  
+    $formatter->defaultClass  = $aDefaultClass;
+    $formatter->currentClass  = $aCurrentClass;
+    
+    $start = SM2_ROOT + $aStartLevel;
+    if ($aParent != 0) {
+        $start = $aParent;
+    }
+
+    $maxLevel = 0;
+    if ($aRecurse == 0) {
+        return;
+    }
+    if ($aRecurse < 0) {
+        $maxLevel = SM2_ALL;
+    }
+    else {
+        $maxLevel = SM2_START + $aRecurse - 1;
+    }
+    
+    $flags = $aCollapse ? SM2_TRIM : SM2_ALL;
+    
+    // special case for default case
+    if ($aStartLevel == 0 && $aRecurse == -1 && $aCollapse) {
+        $maxLevel = SM2_CURR + 1;
+    }
+
+    show_menu2($aMenu, $start, $maxLevel, $flags, $formatter);
+}
+
+function page_menu(
+    $aParent = 0, 
+    $menu_number = 1, 
+    $item_template = '<li[class]>[a][menu_title][/a]</li>', 
+    $menu_header = '<ul>', 
+    $menu_footer = '</ul>', 
+    $default_class = ' class="menu_default"', 
+    $current_class = ' class="menu_current"', 
+    $recurse = LEVEL    // page['level']
+    ) 
+{
+    show_menu($menu_number, 0, $recurse+2, true, $item_template, '', 
+        $menu_header, $menu_footer, $default_class, $current_class, $aParent);
+}
+
+?>

Property changes on: trunk/modules/show_menu2/legacy.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/show_menu2/upgrade.php
===================================================================
--- trunk/modules/show_menu2/upgrade.php	(nonexistent)
+++ trunk/modules/show_menu2/upgrade.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         show_menu2
+ * @author          Independend-Software-Team
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+?>

Property changes on: trunk/modules/show_menu2/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/CHANGELOG
===================================================================
--- trunk/modules/wrapper/CHANGELOG	(nonexistent)
+++ trunk/modules/wrapper/CHANGELOG	(revision 2)
@@ -0,0 +1,19 @@
+Change Log
+===============================================================================
+Please note: This change log may not be accurate
+
+$Id: CHANGELOG 65 2017-03-03 21:38:16Z manu $
+
+Legend:
++ = Added
+- = Removed
+# = Bugfix
+! = Update/Change
+===============================================================================
+
+
+17 Dec-2015 Build 0001 Manuela v.d.Decken(DarkViper)
++ Initialize project
+
+end of file
+
Index: trunk/modules/wrapper/add.php
===================================================================
--- trunk/modules/wrapper/add.php	(nonexistent)
+++ trunk/modules/wrapper/add.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * add.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'modify';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/addon.php
===================================================================
--- trunk/modules/wrapper/addon.php	(nonexistent)
+++ trunk/modules/wrapper/addon.php	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * index.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+    // set the name of the addon
+    $sAddonName = basename(__DIR__);
+    if (class_exists('Translate')) {
+        Translate::getInstance ()->enableAddon ('modules\\'.$sAddonName);
+    }
+    include(dirname(__DIR__).'/SimpleCommandDispatcher.inc');
+
+// end of file
+

Property changes on: trunk/modules/wrapper/addon.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdDelete.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdDelete.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdDelete.inc	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdDelete.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+// Delete page from mod_wrapper
+    $sql = 'DELETE FROM `'.TABLE_PREFIX.'mod_wrapper` '
+         . 'WHERE `section_id`='.$database->escapeString($section_id);
+    $database->query($sql);
+
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdDelete.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdInstall.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdInstall.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdInstall.inc	(revision 2)
@@ -0,0 +1,43 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdInstall.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+    $sSqlDumpFile = $sAddonPath.'/install-struct.sql';
+    if (is_readable($sSqlDumpFile)) {
+        // create needet database tables and set default records
+        $database->SqlImport($sSqlDumpFile, TABLE_PREFIX, __FILE__);
+    }
+
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdInstall.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdModify.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdModify.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdModify.inc	(revision 2)
@@ -0,0 +1,82 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdModify.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+    // set default values for a new one or if no matching record found
+    $aInstance = array(
+        'section_id' => $section_id,
+        'page_id'    => $page_id,
+        'url'        => '',
+        'height'     => 400
+    );
+    // Get page content
+    $sql = 'SELECT * FROM `'.TABLE_PREFIX.'mod_'.$sAddonName.'` '
+         . 'WHERE `section_id` = '.$section_id;
+    if (($oInstances = $database->query($sql))) {
+    // try to load an existing record
+        if (($aRecord = $oInstances->fetchRow(MYSQLI_ASSOC))) {
+            $aRecord['url'] = str_replace(
+                                  '{SYSVAR:AppUrl}',
+                                  str_replace('\\', '/', WB_URL).'/',
+                                  $aRecord['url']
+                              );
+            $aInstance = $aRecord;
+        }
+    }
+    $aInstance = array_change_key_case($aInstance, CASE_UPPER);
+    // complete array with replacements
+    $aInstance['WB_URL']      = WB_URL;
+    $aInstance['THEME_URL']   = $sAddonThemeUrl;
+//    $aInstance['CANCEL_URL']  = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'#wb_'.$section_id;
+    $aInstance['SAVE_URL']    = ADMIN_URL.'/pages/save.php';
+    $aInstance['CANCEL_URL']  = ADMIN_URL.'/pages/index.php';
+    $aInstance['TEXT_URL']    = $TEXT['URL'];
+    $aInstance['TEXT_HEIGHT'] = $TEXT['HEIGHT'];
+    $aInstance['TEXT_SAVE']   = $TEXT['SAVE'];
+    $aInstance['TEXT_BACK']   = $TEXT['BACK'];
+    $aInstance['TEXT_CANCEL'] = $TEXT['CANCEL'];
+    $aInstance['FTAN']        = $admin->getFTAN();
+    // create template object
+    $oTpl = new Template($sAddonThemePath);
+    $oTpl->set_file('page', 'modify.htt');
+    $oTpl->set_block('page', 'main_block', 'main');
+    // add array of replacements
+    $oTpl->set_var($aInstance);
+    // Parse template object
+    $oTpl->parse('main', 'main_block', false);
+    $oTpl->pparse('output', 'page');
+
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdModify.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdSave.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdSave.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdSave.inc	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * cmdSave.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+    $bBackLink = isset($_POST['pagetree']);
+
+    // Update the mod_wrapper table with the contents
+    if (isset($_POST['url'])) {
+    // sanitize/validate url
+        // first add the local URL if there is no one
+        $sNewUrl = ltrim(str_replace('\\', '/', $_POST['url']), '/');
+        if (!preg_match('/^https?:\/\/.*$/si', $sNewUrl)) {
+            $sNewUrl = WB_URL.'/'.$sNewUrl;
+        }
+        // validate the URL
+        include_once WB_PATH.'/include/idna_convert/idna_convert.class.php';
+        $oIdn = new idna_convert();
+        $url = $oIdn->encode($sNewUrl);
+        $url = (filter_var($url, FILTER_VALIDATE_URL) === false ? '' : $url);
+        $url = $oIdn->decode($url);
+        unset($oIdn);
+        // replace local host by SYSVAR-Tag
+        $url = preg_replace(
+            '/^'.preg_quote(str_replace('\\', '/', WB_URL).'/', '/').'/si',
+            '{SYSVAR:AppUrl}',
+            ltrim(str_replace('\\', '/', $url), '/')
+        );
+    } else { $url = ''; }
+    // sanitize/validate height
+    $height = (isset($_POST['height']) ? ((intval($_POST['height'])) ?: 400) : 400);
+    // prepare SET part of the SQL-statement
+    $sqlSet = '`'.TABLE_PREFIX.'mod_wrapper` SET '
+            . '`section_id`='.$section_id.', '
+            . '`page_id`='.$page_id.', '
+            . '`url` = \''.$database->escapeString($url).'\', '
+            . '`height` = \''.$database->escapeString($height).'\' ';
+    // search for instance of this module in section
+    $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'mod_wrapper` '
+         . 'WHERE `section_id`='.$section_id;
+    if ($database->get_one($sql)) {
+    // if matching record already exists run UPDATE
+        $sql = 'UPDATE '.$sqlSet.'WHERE `section_id`='.$section_id;
+    } else {
+    // if no matching record exists INSERT new record
+        $sql = 'INSERT INTO '.$sqlSet;
+    }
+    $database->query($sql);
+    // Tells script to update when this page was last updated
+    $update_when_modified = true;
+
+// end of file

Property changes on: trunk/modules/wrapper/cmd/cmdSave.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdUninstall.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdUninstall.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdUninstall.inc	(revision 2)
@@ -0,0 +1,42 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdUninstall.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+    $sSqlDumpFile = $sAddonPath.'/install-struct.sql';
+    if (is_readable($sSqlDumpFile)) {
+        // create needet database tables and set default records
+        $database->SqlImport($sSqlDumpFile, TABLE_PREFIX, __FILE__);
+    }
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdUninstall.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdUpgrade.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdUpgrade.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdUpgrade.inc	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdUpgrade.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+    $sSqlDumpFile = $sAddonPath.'/install-struct.sql';
+    if (is_readable($sSqlDumpFile)) {
+        // upgrade database tables
+        $database->SqlImport($sSqlDumpFile, TABLE_PREFIX, __FILE__);
+    }
+// sanitize mod_wrapper.url
+    $msg = '';
+    $sql = 'SELECT `section_id`, `url` FROM `'.TABLE_PREFIX.'mod_wrapper` '
+         . 'WHERE `url` NOT LIKE \'http%\'';
+    if (($oInstances = $database->query($sql))) {
+        while (($aInstance = $oInstances->fetchRow(MYSQLI_ASSOC))) {
+            // add WB_URL to relative URLs
+            $sNewUrl = WB_URL.'/'.ltrim($aInstance['url'], '\\/');
+            $sql = 'UPDATE `'.TABLE_PREFIX.'mod_wrapper` '
+                 . 'SET `url`=\''.$database->escapeString($sNewUrl).'\' '
+                 . 'WHERE `section_id`='.(int)$aInstance['section_id'];
+            if (!$database->query($sql)) {
+                $msg = $database->get_error();
+                break;
+            }
+        }
+    } else { $msg = $database->get_error(); }
+// replace local host by SYSVAR-Tag in mod_wrapper.url
+    $sql = 'SELECT `section_id`, `url` FROM `'.TABLE_PREFIX.'mod_wrapper`';
+    if (($oInstances = $database->query($sql))) {
+        while (($aInstance = $oInstances->fetchRow(MYSQLI_ASSOC))) {
+            // add WB_URL to relative URLs
+            $sNewUrl = preg_replace(
+                '/^'.preg_quote(str_replace('\\', '/', WB_URL).'/', '/').'/si',
+                '{SYSVAR:AppUrl}',
+                ltrim(str_replace('\\', '/', $aInstance['url']), '/')
+            );
+            $sql = 'UPDATE `'.TABLE_PREFIX.'mod_wrapper` '
+                 . 'SET `url`=\''.$database->escapeString($sNewUrl).'\' '
+                 . 'WHERE `section_id`='.(int)$aInstance['section_id'];
+            if (!$database->query($sql)) {
+                $msg = $database->get_error();
+                break;
+            }
+        }
+    } else { $msg = $database->get_error(); }
+
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdUpgrade.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/cmd/cmdView.inc
===================================================================
--- trunk/modules/wrapper/cmd/cmdView.inc	(nonexistent)
+++ trunk/modules/wrapper/cmd/cmdView.inc	(revision 2)
@@ -0,0 +1,62 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdInstall.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+
+    // get content
+    $sql = 'SELECT `url`, `height` FROM `'.TABLE_PREFIX.'mod_wrapper` '
+         . 'WHERE `section_id` = '.intval($section_id);
+    if (($oInstances = $database->query($sql))) {
+        if (($aInstance = $oInstances->fetchRow(MYSQLI_ASSOC))) {
+            $aInstance['url'] = str_replace('{SYSVAR:AppUrl}', WB_URL.'/', $aInstance['url']);
+            $aTplData = array_change_key_case($aInstance, CASE_UPPER);
+            $aTplData['NOTICE'] = $MOD_WRAPPER['NOTICE'];
+            if (class_exists('Twig_Environment') && is_readable($sAddonTemplatePath.'/view.twig')) {
+                // create twig template object
+                $oTwig = new Twig_Environment(new Twig_Loader_Filesystem($sAddonTemplatePath));
+                echo $oTwig->render('view.twig', $aTplData);
+            } else {
+                // create phplib template object
+                $oTpl = new Template($sAddonTemplatePath);
+                $oTpl->set_file('page', 'view.htt');
+                $oTpl->set_block('page', 'main_block', 'main');
+                $oTpl->set_var($aTplData);
+                // Parse template object
+                $oTpl->parse('main', 'main_block', false);
+                $oTpl->pparse('output', 'page');
+            }
+        }
+    }
+// end of file
+

Property changes on: trunk/modules/wrapper/cmd/cmdView.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/delete.php
===================================================================
--- trunk/modules/wrapper/delete.php	(nonexistent)
+++ trunk/modules/wrapper/delete.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * cmdSave.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'delete';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/index.php
===================================================================
--- trunk/modules/wrapper/index.php	(nonexistent)
+++ trunk/modules/wrapper/index.php	(revision 2)
@@ -0,0 +1,24 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        wrapper-3.0.1a
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once( dirname(dirname(__DIR__)).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+}
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/wrapper/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/info.php
===================================================================
--- trunk/modules/wrapper/info.php	(nonexistent)
+++ trunk/modules/wrapper/info.php	(revision 2)
@@ -0,0 +1,46 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * info.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if (!defined('WB_PATH')) { throw new Exception('Cannot access the addon \"'.basename(__DIR__).'\" directly'); }
+/* -------------------------------------------------------- */
+    $module_directory   = 'wrapper';
+    $module_name        = 'Wrapper v3.0.6';
+    $module_function    = 'page';
+    $module_version     = '3.0.6';
+    $module_platform    = '2.10.0';
+    $module_author      = 'Manuela v.d.Decken <manuela@isteam.de>';
+    $module_license     = 'GNU General Public License';
+    $module_description = 'This module allows you to show third party sites inside an inline frame';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/install-struct.sql
===================================================================
--- trunk/modules/wrapper/install-struct.sql	(nonexistent)
+++ trunk/modules/wrapper/install-struct.sql	(revision 2)
@@ -0,0 +1,31 @@
+-- phpMyAdmin SQL Dump
+-- Erstellungszeit: 17. Dezember 2015 um 12:37
+-- Server Version: 5.1.41
+SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+-- --------------------------------------------------------
+-- Database structure for module 'wrapper'
+--
+-- Replacements: {TABLE_PREFIX}, {TABLE_ENGINE}, {TABLE_COLLATION}
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_wrapper`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_wrapper`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_wrapper` (
+  `section_id` INT NOT NULL DEFAULT '0',
+  `page_id` INT NOT NULL DEFAULT '0',
+  `url` VARCHAR(512){FIELD_COLLATION} NOT NULL DEFAULT '',
+  `height` INT NOT NULL DEFAULT '0',
+  PRIMARY KEY ( `section_id` )
+){TABLE_ENGINE};
+
+-- ALTER TABLE `{TABLE_PREFIX}mod_wrapper` CHANGE `url` `url` VARCHAR(512){FIELD_COLLATION} NOT NULL DEFAULT '';
+
+-- EndOfFile

Property changes on: trunk/modules/wrapper/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/install.php
===================================================================
--- trunk/modules/wrapper/install.php	(nonexistent)
+++ trunk/modules/wrapper/install.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * install.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'install';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/DA.php
===================================================================
--- trunk/modules/wrapper/languages/DA.php	(nonexistent)
+++ trunk/modules/wrapper/languages/DA.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE ADDON: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+
+// Dansk modulbeskrivelse
+$module_description = 'Med dette modul kan du indpakke indhold fra fremmede websider p&Atilde;&yen; dit websted ved hj&Atilde;&brvbar;lp af Inline Frames (iframe)';
+
+// Headings and text outputs
+$MOD_WRAPPER['NOTICE'] = 'Din browser underst&Atilde;tter ikke inline frames.<br />Klik p&Atilde;&yen; linket nedenfor for at bes&Atilde;ge det websted, som det var hensigten at vise her...<br />';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/DE.php
===================================================================
--- trunk/modules/wrapper/languages/DE.php	(nonexistent)
+++ trunk/modules/wrapper/languages/DE.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS MODUL: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'Dieses Modul erlaubt das Einbinden fremder Inhalte auf Ihrer Seite mit Hilfe von Inline Frames (iframe)';
+
+// Ueberschriften und Textausgaben
+$MOD_WRAPPER['NOTICE'] = 'Ihr Browser unterstützt keine Inline Frames.<br />Bitte klicken Sie auf nachfolgenden Link, um den Seiteninhalt der externen Seite zu betrachten ...<br />';
+$MOD_WRAPPER['MISSING__PROTOCOLL'] = 'Fehlendes Netzwerk Protokoll http:// oder https://. Add the local URL ';
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/EN.php
===================================================================
--- trunk/modules/wrapper/languages/EN.php	(nonexistent)
+++ trunk/modules/wrapper/languages/EN.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  ENGLISH LANGUAGE FILE FOR THE ADDON: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_WRAPPER['NOTICE'] = 'Your browser does not support inline frames.<br />Click on the link below to visit the website that was meant to be shown here...<br />';
+$MOD_WRAPPER['MISSING_PROTOCOLL'] = 'If you forgot Network Protocol http:// or https://. i add the local URL ';
+
+// end of file

Property changes on: trunk/modules/wrapper/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/FR.php
===================================================================
--- trunk/modules/wrapper/languages/FR.php	(nonexistent)
+++ trunk/modules/wrapper/languages/FR.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+//Module Description
+$module_description = 'Ce module permet l&apos;int&eacute;gration de contenus externes sur votre page &agrave; l&apos;aide de cadres enlign&eacute; (iframe)';
+
+// Ueberschriften und Textausgaben
+$MOD_WRAPPER['NOTICE'] = 'Votre navigateur ne supporte pas les cadres enlign&eacute;<br />Cliquez sur le lien ci-dessous pour vous rendre au site qui &eacute;tais sens&eacute; tre affich&eacute; ici...<br />';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/NL.php
===================================================================
--- trunk/modules/wrapper/languages/NL.php	(nonexistent)
+++ trunk/modules/wrapper/languages/NL.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DUTCH LANGUAGE FILE FOR THE ADDON: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_WRAPPER['NOTICE']         =    'Uw browser laat geen ondersteuning toe voor inline frames.<br />Klik op de link hieronder om de site te tonen die je eigenlijk wilde zien...<br />';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/NO.php
===================================================================
--- trunk/modules/wrapper/languages/NO.php	(nonexistent)
+++ trunk/modules/wrapper/languages/NO.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+-----------------------------------------------------------------------------------------
+NORSK LANGUAGE FILE FOR THE ADDON: WRAPPER
+-----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_WRAPPER['NOTICE'] =    'Nettleseren din st&oslash;tter ikke &quot;inline frames&quot;.<br />Klikk p&amp;aring; lenken under for &amp;aring; g&amp;aring; til nettsiden som var men &amp;aring; skulle vises i dette vinduet...<br />';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/languages/RU.php
===================================================================
--- trunk/modules/wrapper/languages/RU.php	(nonexistent)
+++ trunk/modules/wrapper/languages/RU.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project http://www.websitebaker.org/
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  RUSSIAN LANGUAGE FILE FOR THE ADDON: WRAPPER
+ -----------------------------------------------------------------------------------------
+*/
+
+// Headings and text outputs
+$MOD_WRAPPER['NOTICE'] = 'Ваш browser не поддерживает inline-фреймы. Нажмите на ссылку ниже, чтобы перейти к импортированному сюда сайту...<br/>';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/lib/Helpers.lib
===================================================================
--- trunk/modules/wrapper/lib/Helpers.lib	(nonexistent)
+++ trunk/modules/wrapper/lib/Helpers.lib	(revision 2)
@@ -0,0 +1,38 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+  class m_mapbaker_lib_Helpers
+{
+
+
+
+}

Property changes on: trunk/modules/wrapper/lib/Helpers.lib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/lib/example.lib
===================================================================
--- trunk/modules/wrapper/lib/example.lib	(nonexistent)
+++ trunk/modules/wrapper/lib/example.lib	(revision 2)
@@ -0,0 +1,17 @@
+<?php
+// a placeholder file only
+/*
+in this folder you can place library files for your addon.
+some little rules:
+
+naming conventions:
+- use prefix "m_AddonName_FunctionName()"
+- use '.lib' as only one extension inside this folder
+coding hints:
+- take care for sideeffects. place functions or classes here only
+- do not declare variables outside of functions/classes
+- do not declare constants outside of classes
+- do not place executable code outside of functions/classes
+
+
+*/

Property changes on: trunk/modules/wrapper/lib/example.lib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/modify.php
===================================================================
--- trunk/modules/wrapper/modify.php	(nonexistent)
+++ trunk/modules/wrapper/modify.php	(revision 2)
@@ -0,0 +1,37 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ * modify.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'modify';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/save.php
===================================================================
--- trunk/modules/wrapper/save.php	(nonexistent)
+++ trunk/modules/wrapper/save.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * save.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'save';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/templates/default/view.htt
===================================================================
--- trunk/modules/wrapper/templates/default/view.htt	(nonexistent)
+++ trunk/modules/wrapper/templates/default/view.htt	(revision 2)
@@ -0,0 +1,14 @@
+<!-- BEGIN main_block -->
+
+<!-- available replacements
+    URL
+    HEIGHT
+    NOTICE
+-->
+
+<iframe src="{URL}" width="100%" height="{HEIGHT}" style="border: none; >
+    {NOTICE}
+    <a href="{URL}" target="_blank">{URL}</a>
+</iframe>
+
+<!-- END main_block -->
Index: trunk/modules/wrapper/templates/default/view.twig
===================================================================
--- trunk/modules/wrapper/templates/default/view.twig	(nonexistent)
+++ trunk/modules/wrapper/templates/default/view.twig	(revision 2)
@@ -0,0 +1,14 @@
+
+{#
+- available replacements
+    URL
+    HEIGHT
+    NOTICE
+#}
+
+<iframe src="{{ URL }}" width="100%" height="{{ HEIGHT }}" frameborder="0" scrolling="auto">
+    {NOTICE}
+    <a href="{{ URL }}" target="_blank">{{ URL }}</a>
+</iframe>
+
+{# end of file #}

Property changes on: trunk/modules/wrapper/templates/default/view.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/themes/default/modify.htt
===================================================================
--- trunk/modules/wrapper/themes/default/modify.htt	(nonexistent)
+++ trunk/modules/wrapper/themes/default/modify.htt	(revision 2)
@@ -0,0 +1,46 @@
+<!-- BEGIN main_block -->
+
+<!-- available replacements
+    WB_URL
+    THEME_URL
+    THEME_PATH
+    SAVE_URL
+    TEXT_URL
+    CANCEL_URL
+    TEXT_HEIGHT
+    TEXT_SAVE
+    TEXT_CANCEL
+    HEIGHT
+    URL
+    FTAN
+-->
+
+<form action="{SAVE_URL}" method="post" class="wrapper" style="margin: auto 3%; width: 100%;">
+    <input type="hidden" name="page_id" value="{PAGE_ID}" />
+    <input type="hidden" name="section_id" value="{SECTION_ID}" />
+    <input type="hidden" name="cmd" value="save" />
+    {FTAN}
+    <table class="wrapper" style="border-collapse: collapse; width: 95%; white-space: nowrap; vertical-align: central;" >
+        <tr style="line-height: 2.9525em; ">
+            <td align="left" width="50">{TEXT_URL}:</td>
+            <td><input type="text" name="url" value="{URL}" style="width: 100%;" /></td>
+        </tr>
+        <tr>
+            <td align="left" width="50">{TEXT_HEIGHT}:</td>
+            <td><input type="text" name="height" value="{HEIGHT}" maxlength="4" style="width: 100%;" /></td>
+        </tr>
+    </table>
+    <table class="wrapper-submit" >
+        <tr>
+            <td align="left">
+                <input type="submit" value="{TEXT_SAVE}" style="width: 100px; margin-top: 5px;" />
+                <input name="pagetree" type="submit" value="{TEXT_SAVE} & {TEXT_BACK}" style="min-width: 100px; margin-top: 5px;" />
+            </td>
+            <td align="right">
+                <input type="submit" value="{TEXT_CANCEL}" formaction="{CANCEL_URL}" style="width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+
+<!-- END main_block -->
Index: trunk/modules/wrapper/themes/default/modify.twig
===================================================================
--- trunk/modules/wrapper/themes/default/modify.twig	(nonexistent)
+++ trunk/modules/wrapper/themes/default/modify.twig	(revision 2)
@@ -0,0 +1,42 @@
+{# 
+- available replacements
+    WB_URL
+    THEME_URL
+    THEME_PATH
+    SAVE_URL
+    TEXT_URL
+    CANCEL_URL
+    TEXT_HEIGHT
+    TEXT_SAVE
+    TEXT_CANCEL
+    HEIGHT
+    URL
+    FTAN
+#}
+<form action="{{ SAVE_URL }}" method="post">
+    <input type="hidden" name="page_id" value="{{ PAGE_ID }}" />
+    <input type="hidden" name="section_id" value="{{ SECTION_ID }}" />
+    <input type="hidden" name="cmd" value="save" />
+    {{ FTAN }}
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left" width="50">{{ TEXT_URL }}:</td>
+            <td><input type="text" name="url" value="{{ URL }}" style="width: 100%;" /></td>
+        </tr>
+        <tr>
+            <td align="left" width="50">{TEXT_HEIGHT}:</td>
+            <td><input type="text" name="height" value="{{ HEIGHT }}" maxlength="4" style="width: 100%;" /></td>
+        </tr>
+    </table>
+    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+        <tr>
+            <td align="left"><input type="submit" value="{{ TEXT_SAVE }}" style="width: 200px; margin-top: 5px;" /></td>
+            <td align="right">
+                <input type="button" value="{{ TEXT_CANCEL }}" onclick="javascript: window.location = '{{ CANCEL_URL }}';" style="width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+
+{# end of file #}
+

Property changes on: trunk/modules/wrapper/themes/default/modify.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/uninstall.php
===================================================================
--- trunk/modules/wrapper/uninstall.php	(nonexistent)
+++ trunk/modules/wrapper/uninstall.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * uninstall.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'uninstall';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/upgrade.php
===================================================================
--- trunk/modules/wrapper/upgrade.php	(nonexistent)
+++ trunk/modules/wrapper/upgrade.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * upgrade.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'upgrade';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wrapper/view.php
===================================================================
--- trunk/modules/wrapper/view.php	(nonexistent)
+++ trunk/modules/wrapper/view.php	(revision 2)
@@ -0,0 +1,39 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * view.php
+ *
+ * @category     Addons
+ * @package      Addons_wrapper
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 2015-12-17
+ * @deprecated   This interface is deprecated since 2015-12-17
+ * @description  xyz
+ */
+
+    // forwarding to the dispatcher
+    $sCommand = 'view';
+    include __DIR__.'/addon.php';
+
+// end of file
+

Property changes on: trunk/modules/wrapper/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/add.php
===================================================================
--- trunk/modules/wysiwyg/add.php	(nonexistent)
+++ trunk/modules/wysiwyg/add.php	(revision 2)
@@ -0,0 +1,30 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+    // Insert an extra row into the database
+    $sql = 'INSERT INTO `'.TABLE_PREFIX.'mod_wysiwyg` '
+         . 'SET `page_id`='.$database->escapeString($page_id).', '
+         .     '`section_id`='.$database->escapeString($section_id).', '
+         .     '`content`=\'\', '
+         .     '`text`=\'\'';
+    $database->query($sql);
+}

Property changes on: trunk/modules/wysiwyg/add.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/delete.php
===================================================================
--- trunk/modules/wysiwyg/delete.php	(nonexistent)
+++ trunk/modules/wysiwyg/delete.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(!defined('WB_PATH')) {
+    require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
+    throw new IllegalFileException();
+} else {
+// Delete record from the database
+    $sql  = 'DELETE FROM `'.TABLE_PREFIX.'mod_wysiwyg` '
+          . 'WHERE `section_id` = '.$database->escapeString($section_id);
+    $database->query($sql);
+}

Property changes on: trunk/modules/wysiwyg/delete.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/index.php
===================================================================
--- trunk/modules/wysiwyg/index.php	(nonexistent)
+++ trunk/modules/wysiwyg/index.php	(revision 2)
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @category       modules
+ * @package        wysiwyg
+ * @authors        WebsiteBaker Project
+ * @copyright      WebsiteBaker Org. e.V.
+ * @link           http://websitebaker.org/
+ * @license        http://www.gnu.org/licenses/gpl.html
+ * @platform       WebsiteBaker 2.8.3
+ * @requirements   PHP 5.3.6 and higher
+ * @version        $Id$
+ * @filesource     $HeadURL$
+ * @lastmodified   $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */

Property changes on: trunk/modules/wysiwyg/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/info.php
===================================================================
--- trunk/modules/wysiwyg/info.php	(nonexistent)
+++ trunk/modules/wysiwyg/info.php	(revision 2)
@@ -0,0 +1,29 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$module_directory = 'wysiwyg';
+$module_name = 'WYSIWYG v3.0.6';
+$module_function = 'page';
+$module_version = '3.0.6';
+$module_platform = '2.8.3 SP6';
+$module_author = 'Ryan Djurovich';
+$module_license = 'GNU General Public License';
+$module_description = 'This module allows you to edit the contents of a page using a graphical editor';

Property changes on: trunk/modules/wysiwyg/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/install-struct.sql
===================================================================
--- trunk/modules/wysiwyg/install-struct.sql	(nonexistent)
+++ trunk/modules/wysiwyg/install-struct.sql	(revision 2)
@@ -0,0 +1,26 @@
+-- phpMyAdmin SQL Dump
+-- version 4.5.3.1
+-- http://www.phpmyadmin.net
+--
+-- Host: localhost
+-- Erstellungszeit: 01. Feb 2016 um 21:09
+-- Server-Version: 5.6.24
+-- PHP-Version: 7.0.1
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+--
+-- Datenbank: `dw283-sp3db1`
+--
+-- --------------------------------------------------------
+--
+-- Tabellenstruktur für Tabelle `mod_wysiwyg`
+--
+DROP TABLE IF EXISTS `{TABLE_PREFIX}mod_wysiwyg`;
+CREATE TABLE IF NOT EXISTS `{TABLE_PREFIX}mod_wysiwyg` (
+  `section_id` int(11) NOT NULL DEFAULT '0',
+  `page_id` int(11) NOT NULL DEFAULT '0',
+  `content` longtext{FIELD_COLLATION} NOT NULL,
+  `text` longtext{FIELD_COLLATION} NOT NULL,
+  PRIMARY KEY (`section_id`)
+){TABLE_ENGINE=MyISAM};
+

Property changes on: trunk/modules/wysiwyg/install-struct.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/install.php
===================================================================
--- trunk/modules/wysiwyg/install.php	(nonexistent)
+++ trunk/modules/wysiwyg/install.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+if(defined('WB_PATH'))
+{
+    // create tables from sql dump file
+    if (is_readable(__DIR__.'/install-struct.sql')) {
+        $database->SqlImport(__DIR__.'/install-struct.sql', TABLE_PREFIX, __FILE__ );
+    }
+}

Property changes on: trunk/modules/wysiwyg/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/DA.php
===================================================================
--- trunk/modules/wysiwyg/languages/DA.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/DA.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DANISH LANGUAGE FILE FOR THE MODULE: WYSIWYG
+ -----------------------------------------------------------------------------------------
+*/
+
+// Dansk modulbeskrivelse
+$module_description = 'Dette modul g&oslash;r det muligt at redigere sideindhold ved hj&aelig;lp af en grafisk editor.';
+
+?>

Property changes on: trunk/modules/wysiwyg/languages/DA.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/DE.php
===================================================================
--- trunk/modules/wysiwyg/languages/DE.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/DE.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  DEUTSCHE SPRACHDATEI FUER DAS MODUL: WYSIWYG
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'Dieses Modul erm&ouml;glicht die Bearbeitung von Seiteninhalten mit Hilfe eines grafischen Editors';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/FR.php
===================================================================
--- trunk/modules/wysiwyg/languages/FR.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/FR.php	(revision 2)
@@ -0,0 +1,31 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  FRENCH LANGUAGE FILE FOR THE ADDON: WYSIWYG
+ -----------------------------------------------------------------------------------------
+*/
+//Module Description
+$module_description = 'Ce module permet de modifier le contenu de la page &agrave; l&apos;aide d&apos;un &eacute;diteur graphique';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/NL.php
===================================================================
--- trunk/modules/wysiwyg/languages/NL.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/NL.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+    DUTCH LANGUAGE MODULE FOR THE MODULE: WYSIWYG
+ -----------------------------------------------------------------------------------------
+*/
+
+// Deutsche Modulbeschreibung
+$module_description = 'Deze module laat je toe om de inhoud van een pagina te bewerken door middel van WYSIWYG';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/NO.php
===================================================================
--- trunk/modules/wysiwyg/languages/NO.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/NO.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ -----------------------------------------------------------------------------------------
+  NORWEGIAN LANGUAGE FILE FOR THE MODULE: WYSIWYG
+ -----------------------------------------------------------------------------------------
+*/
+
+// Norwegian Moduledescription
+$module_description = 'Denne modulen lar deg redigere innholdet p&aring; websidene dine med et grafisk redigerings verkt&oslash;y';
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/RU.php
===================================================================
--- trunk/modules/wysiwyg/languages/RU.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/RU.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Russian translation
+$module_description = '&#1052;&#1086;&#1076;&#1091;&#1083;&#1100; &#1087;&#1086;&#1079;&#1074;&#1086;&#1083;&#1103;&#1077;&#1090; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077; &#1089;&#1090;&#1088;&#1072;&#1085;&#1080;&#1094;&#1099;, &#1080;&#1089;&#1087;&#1086;&#1083;&#1100;&#1079;&#1091;&#1103; &#1074;&#1080;&#1079;&#1091;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;';
+
+?>

Property changes on: trunk/modules/wysiwyg/languages/RU.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/languages/index.php
===================================================================
--- trunk/modules/wysiwyg/languages/index.php	(nonexistent)
+++ trunk/modules/wysiwyg/languages/index.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+header("Location: ../../../index.php");
+
+?>
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/modify.php
===================================================================
--- trunk/modules/wysiwyg/modify.php	(nonexistent)
+++ trunk/modules/wysiwyg/modify.php	(revision 2)
@@ -0,0 +1,80 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+
+// Get page content   htmlspecialchars
+$sql = 'SELECT `content` FROM `'.TABLE_PREFIX.'mod_wysiwyg` WHERE `section_id`='.(int)$section_id;
+if ( ($content = $database->get_one($sql)) ) {
+    $sFilterApi = WB_PATH.'/modules/output_filter/OutputFilterApi.php';
+    if (is_readable($sFilterApi)) {
+        require_once($sFilterApi);
+        $content = OutputFilterApi('ReplaceSysvar', $content);
+    }
+    $content = htmlspecialchars($content);
+} else {
+    $content = '';
+}
+if(mb_detect_encoding($content, 'UTF-8, '.strtoupper(DEFAULT_CHARSET)) === 'UTF-8'){
+  # der String ist in UTF-8 kodiert
+//$content = (utf8_decode($content));
+//$content = (iconv("UTF-8", strtoupper(DEFAULT_CHARSET), $content));
+}
+//  $content = utf8_decode($content);
+if(!isset($wysiwyg_editor_loaded)) {
+    $wysiwyg_editor_loaded=true;
+    if (!defined('WYSIWYG_EDITOR') OR WYSIWYG_EDITOR=="none" OR !file_exists(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include.php')) {
+        function show_wysiwyg_editor($name,$id,$content,$width,$height) {
+            echo '<textarea name="'.$name.'" id="'.$id.'" style="width: '.$width.'; height: '.$height.';">'.$content.'</textarea>';
+        }
+    } else {
+        $id_list = array();
+        $sql  = 'SELECT `section_id` FROM `'.TABLE_PREFIX.'sections` ';
+        $sql .= 'WHERE `page_id`='.(int)$page_id.' AND `module`=\'wysiwyg\'';
+        if (($query_wysiwyg = $database->query($sql))) {
+            while($wysiwyg_section = $query_wysiwyg->fetchRow( MYSQLI_ASSOC )) {
+                $entry='content'.$wysiwyg_section['section_id'];
+                $id_list[] = $entry;
+            }
+            require(WB_PATH.'/modules/'.WYSIWYG_EDITOR.'/include.php');
+        }
+    }
+}
+?>
+<form name="wysiwyg<?php echo $section_id; ?>" action="<?php echo WB_URL; ?>/modules/wysiwyg/save.php" method="post">
+    <input type="hidden" name="page_id" value="<?php echo $page_id; ?>" />
+    <input type="hidden" name="section_id" value="<?php echo $section_id; ?>" />
+<?php
+echo $admin->getFTAN()."\n";
+show_wysiwyg_editor('content'.$section_id,'content'.$section_id,$content,'100%','350', false);
+?>
+    <table  style="padding-bottom: 10px; width: 100%;">
+        <tr>
+            <td style="text-align: left;margin-left: 1em;">
+                <input name="modify" type="submit" value="<?php echo $TEXT['SAVE']; ?>" style="min-width: 100px; margin-top: 5px;" />
+                <input name="pagetree" type="submit" value="<?php echo $TEXT['SAVE'].' &amp; '.$TEXT['BACK']; ?>" style="min-width: 100px; margin-top: 5px;" />
+            </td>
+            <td style="text-align: right;margin-right: 1em;">
+                <input name="cancel" type="button" value="<?php echo $TEXT['CANCEL']; ?>" onclick="window.location = 'index.php';" style="min-width: 100px; margin-top: 5px;" />
+            </td>
+        </tr>
+    </table>
+</form>
+<br />

Property changes on: trunk/modules/wysiwyg/modify.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/save.php
===================================================================
--- trunk/modules/wysiwyg/save.php	(nonexistent)
+++ trunk/modules/wysiwyg/save.php	(revision 2)
@@ -0,0 +1,87 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+*/
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+
+// suppress to print the header, so no new FTAN will be set
+$admin_header = false;
+// Tells script to update when this page was last updated
+$update_when_modified = true;
+// Include WB admin wrapper script
+require(WB_PATH.'/modules/admin.php');
+
+if (!$admin->checkFTAN()) {
+    $admin->print_header();
+    $admin->print_error($MESSAGE['GENERIC_SECURITY_ACCESS'], ADMIN_URL.'/pages/modify.php?page_id='.$page_id);
+}
+// After check print the header
+$admin->print_header();
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+$bBackLink = isset($_POST['pagetree']);
+// Update the mod_wysiwygs table with the contents
+if(isset($_POST['content'.$section_id])) {
+    $content = $_POST['content'.$section_id];
+    if(ini_get('magic_quotes_gpc')==true)
+    {
+        $content = $admin->strip_slashes($_POST['content'.$section_id]);
+    }
+/*
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $searchfor = '@(<[^>]*=\s*")('.preg_quote($sMediaUrl).')([^">]*".*>)@siU';
+    $content = preg_replace($searchfor, '$1{SYSVAR:MEDIA_REL}$3', $content);
+*/
+    $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+    $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $aPatterns = array(
+        '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+        '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+    );
+    $aReplacements = array(
+        '\1'.$sDocumentRootUrl.'/\3',
+        '$1{SYSVAR:MEDIA_REL}$3'
+    );
+    $content = preg_replace($aPatterns, $aReplacements, $content);
+
+    $text = strip_tags($content);
+    $sql = 'UPDATE `'.TABLE_PREFIX.'mod_wysiwyg` SET '
+         . '`content`=\''.$database->escapeString($content).'\', '
+         . '`text`=\''.$database->escapeString($text).'\' '
+         . 'WHERE `section_id`='.(int)$section_id;
+    $database->query($sql);
+}
+$sec_anchor = (defined( 'SEC_ANCHOR' ) && ( SEC_ANCHOR != '' )  ? '#'.SEC_ANCHOR.$section['section_id'] : '' );
+if(defined('EDIT_ONE_SECTION') && EDIT_ONE_SECTION){
+    $edit_page = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.'&wysiwyg='.$section_id;
+} elseif ( $bBackLink ) {
+  $edit_page = ADMIN_URL.'/pages/index.php';
+} else {
+    $edit_page = ADMIN_URL.'/pages/modify.php?page_id='.$page_id.$sec_anchor;
+}
+
+// Check if there is a database error, otherwise say successful
+if($database->is_error()) {
+    $admin->print_error($database->get_error(), $js_back);
+} else {
+    $admin->print_success($MESSAGE['PAGES_SAVED'], $edit_page );
+}
+
+// Print admin footer
+$admin->print_footer();

Property changes on: trunk/modules/wysiwyg/save.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/search.php
===================================================================
--- trunk/modules/wysiwyg/search.php	(nonexistent)
+++ trunk/modules/wysiwyg/search.php	(revision 2)
@@ -0,0 +1,65 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         search
+ * @author          WebsiteBaker Project
+ * @copyright       Ryan Djurovich
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+function wysiwyg_search($func_vars) {
+    extract($func_vars, EXTR_PREFIX_ALL, 'func');
+    static $search_sql = FALSE;
+    if(function_exists('search_make_sql_part')) {
+        if($search_sql===FALSE)
+            $search_sql = search_make_sql_part($func_search_url_array, $func_search_match, array('`content`'));
+    } else {
+        $search_sql = '1=1';
+    }
+    
+    // how many lines of excerpt we want to have at most
+    $max_excerpt_num = $func_default_max_excerpt;
+    $divider = ".";
+    $result = false;
+    
+    // we have to get 'content' instead of 'text', because strip_tags() dosen't remove scripting well.
+    // scripting will be removed later on automatically
+    $table = TABLE_PREFIX."mod_wysiwyg";
+    $query = $func_database->query("
+        SELECT content
+        FROM $table
+        WHERE section_id='$func_section_id'
+    ");
+
+    if($query->numRows() > 0) {
+        if($res = $query->fetchRow()) {
+            $mod_vars = array(
+                'page_link' => $func_page_link,
+                'page_link_target' => "#wb_section_$func_section_id",
+                'page_title' => $func_page_title,
+                'page_description' => $func_page_description,
+                'page_modified_when' => $func_page_modified_when,
+                'page_modified_by' => $func_page_modified_by,
+                'text' => $res['content'].$divider,
+                'max_excerpt_num' => $max_excerpt_num
+            );
+            if(print_excerpt2($mod_vars, $func_vars)) {
+                $result = true;
+            }
+        }
+    }
+    return $result;
+}
+
+?>

Property changes on: trunk/modules/wysiwyg/search.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/upgrade.php
===================================================================
--- trunk/modules/wysiwyg/upgrade.php	(nonexistent)
+++ trunk/modules/wysiwyg/upgrade.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+$msg = '';
+$sTable = TABLE_PREFIX.'mod_wysiwyg';
+if(($sOldType = $database->getTableEngine($sTable))) {
+    if(('myisam' != strtolower($sOldType))) {
+        if(!$database->query('ALTER TABLE `'.$sTable.'` Engine = \'MyISAM\' ')) {
+            $msg = $database->get_error();
+        }
+    }
+} else {
+    $msg .= $database->get_error().'<br />';
+}
+// sanitize URLs inside mod_wysiwyg.content ----------------------------
+    $msg = '';
+    $sRelUrl = preg_replace('/^https?:\/\/[^\/]+(.*)/is', '\1', WB_URL);
+    $sDocumentRootUrl = str_replace($sRelUrl, '', WB_URL);
+    $sMediaUrl = WB_URL.MEDIA_DIRECTORY;
+    $sql = 'SELECT `content`, `section_id` FROM `'.TABLE_PREFIX.'mod_wysiwyg`';
+    if (($oInstances = $database->query($sql))) {
+        while (($aInstance = $oInstances->fetchRow(MYSQLI_ASSOC))) {
+            // add $sDocumentRootUrl to relative URLs
+            $aPatterns = array(
+                '/(<[^>]*?=\s*\")(\/+)([^\"]*?\"[^>]*?)/is',
+                '/(<[^>]*=\s*")('.preg_quote($sMediaUrl, '/').')([^">]*".*>)/siU'
+            );
+            $aReplacements = array(
+                '\1'.$sDocumentRootUrl.'/\3',
+                '$1{SYSVAR:MEDIA_REL}$3'
+            );
+            $aInstance['content'] = preg_replace($aPatterns, $aReplacements, $aInstance['content']);
+            $sql = 'UPDATE `'.TABLE_PREFIX.'mod_wysiwyg` '
+                 . 'SET `content`=\''.$database->escapeString($aInstance['content']).'\' '
+                 . 'WHERE `section_id`='.(int)$aInstance['section_id'];
+            if (!$database->query($sql)) {
+                $msg = $database->get_error();
+                break;
+            }
+        }
+    } else { $msg = $database->get_error(); }
+
+// ---------------------------------------------------------------------
+
+$sql  = 'UPDATE `'.$sTable.'` SET '
+      . '`content` = REPLACE(`content`, \'"'.WB_URL.MEDIA_DIRECTORY.'\', \'"{SYSVAR:MEDIA_REL}\')';
+if (!$database->query($sql)) {
+    $msg .= $database->get_error().'<br />';
+}
+
+// ------------------------------------
\ No newline at end of file

Property changes on: trunk/modules/wysiwyg/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/modules/wysiwyg/view.php
===================================================================
--- trunk/modules/wysiwyg/view.php	(nonexistent)
+++ trunk/modules/wysiwyg/view.php	(revision 2)
@@ -0,0 +1,27 @@
+<?php
+/**
+ *
+ * @category        modules
+ * @package         wysiwyg
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+// Get content
+$content = '';
+$sql = 'SELECT `content` FROM `'.TABLE_PREFIX.'mod_wysiwyg` '
+     . 'WHERE `section_id`='.(int)$section_id;
+if(!($content = $database->get_one($sql)) ) {}
+echo $content;

Property changes on: trunk/modules/wysiwyg/view.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/pages/PLACEHOLDER
===================================================================
--- trunk/pages/PLACEHOLDER	(nonexistent)
+++ trunk/pages/PLACEHOLDER	(revision 2)
@@ -0,0 +1 @@
+/* this file can be removed after installation */
\ No newline at end of file
Index: trunk/search/index.php
===================================================================
--- trunk/search/index.php	(nonexistent)
+++ trunk/search/index.php	(revision 2)
@@ -0,0 +1,60 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         search
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Include the config file
+//require('../config.php');
+if ( !defined( 'WB_PATH' ) ){ require(dirname(__DIR__).'/config.php'); }
+if ( !class_exists('frontend')) { require(WB_PATH.'/framework/class.frontend.php');  }
+// Create new frontend object
+if (!isset($wb) || !($wb instanceof frontend)) { $wb = new frontend(); }
+
+// Required page details
+$page_id = 0;
+$page_id = @$_SESSION['PAGE_ID'] ?: 0;
+$page_description = '';
+$page_keywords = '';
+define('PAGE_ID', 0);
+define('ROOT_PARENT', 0);
+define('PARENT', 0);
+define('LEVEL', 0);
+define('PAGE_TITLE', $TEXT['SEARCH']);
+define('MENU_TITLE', $TEXT['SEARCH']);
+define('MODULE', '');
+define('VISIBILITY', 'public');
+define('PAGE_CONTENT', 'search.php');
+
+// Find out what the search template is
+// $database = new database();
+$query_template = $database->query("SELECT `value` FROM `".TABLE_PREFIX."search` WHERE `name` = 'template' LIMIT 1");
+$fetch_template = $query_template->fetchRow(MYSQLI_ASSOC);
+$template = $fetch_template['value'];
+if($template != '') {
+    define('TEMPLATE', $template);
+}
+unset($template);
+
+//Get the referrer page ID if it exists
+if(isset($_REQUEST['referrer']) && is_numeric($_REQUEST['referrer']) && intval($_REQUEST['referrer']) > 0) {
+    define('REFERRER_ID', intval($_REQUEST['referrer']));
+} else {
+    define('REFERRER_ID', 0);
+}
+
+// Include index (wrapper) file
+require(WB_PATH.'/index.php');
+

Property changes on: trunk/search/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/search/search.php
===================================================================
--- trunk/search/search.php	(nonexistent)
+++ trunk/search/search.php	(revision 2)
@@ -0,0 +1,709 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         search
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Must include code to stop this file being access directly
+if(defined('WB_PATH') == false) { die("Cannot access this file directly"); }
+
+// Check if search is enabled
+if(SHOW_SEARCH != true) {
+    echo $TEXT['SEARCH'].' '.$TEXT['DISABLED'];
+    return;
+}
+
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
+// Get search settings
+$table=TABLE_PREFIX.'search';
+$query = $database->query("SELECT value FROM $table WHERE name = 'header' LIMIT 1");
+$fetch_header = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'footer' LIMIT 1");
+$fetch_footer = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'results_header' LIMIT 1");
+$fetch_results_header = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'results_footer' LIMIT 1");
+$fetch_results_footer = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'results_loop' LIMIT 1");
+$fetch_results_loop = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'no_results' LIMIT 1");
+$fetch_no_results = $query->fetchRow();
+$query = $database->query("SELECT value FROM $table WHERE name = 'module_order' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value']='faqbaker,manual,wysiwyg'; }
+$search_module_order = $res['value'];
+$query = $database->query("SELECT value FROM $table WHERE name = 'max_excerpt' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = '15'; }
+$search_max_excerpt = (int)($res['value']);
+if(!is_numeric($search_max_excerpt)) { $search_max_excerpt = 15; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_show_description' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; }
+if($res['value'] == 'false') { $cfg_show_description = false; } else { $cfg_show_description = true; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_search_description' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; }
+if($res['value'] == 'false') { $cfg_search_description = false; } else { $cfg_search_description = true; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_search_keywords' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; }
+if($res['value'] == 'false') { $cfg_search_keywords = false; } else { $cfg_search_keywords = true; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_enable_old_search' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'true'; }
+if($res['value'] == 'false') { $cfg_enable_old_search = false; } else { $cfg_enable_old_search = true; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'cfg_enable_flush' LIMIT 1");
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = 'false'; }
+if($res['value'] == 'false') { $cfg_enable_flush = false; } else { $cfg_enable_flush = true; }
+$query = $database->query("SELECT value FROM $table WHERE name = 'time_limit' LIMIT 1"); // time-limit per module
+if($query->numRows() > 0) { $res = $query->fetchRow(); } else { $res['value'] = '0'; }
+$search_time_limit = (int)($res['value']);
+if($search_time_limit < 1) $search_time_limit = 0;
+
+// search-module-extension: get helper-functions
+require_once(WB_PATH.'/search/search_modext.php');
+// search-module-extension: Get "search.php" for each module, if present
+// looks in modules/module/ and modules/module_searchext/
+$search_funcs = array();$search_funcs['__before'] = array();$search_funcs['__after'] = array();
+$query = $database->query("SELECT DISTINCT directory FROM ".TABLE_PREFIX."addons WHERE type = 'module' AND directory NOT LIKE '%_searchext'");
+if($query->numRows() > 0) {
+    while($module = $query->fetchRow()) {
+        $file = WB_PATH.'/modules/'.$module['directory'].'/search.php';
+        if(!file_exists($file)) {
+            $file = WB_PATH.'/modules/'.$module['directory'].'_searchext/search.php';
+            if(!file_exists($file)) {
+                $file='';
+            }
+        }
+        if($file!='') {
+            include_once($file);
+            if(function_exists($module['directory']."_search")) {
+                $search_funcs[$module['directory']] = $module['directory']."_search";
+            }
+            if(function_exists($module['directory']."_search_before")) {
+                $search_funcs['__before'][] = $module['directory']."_search_before";
+            }
+            if(function_exists($module['directory']."_search_after")) {
+                $search_funcs['__after'][] = $module['directory']."_search_after";
+            }
+        }
+    }
+}
+
+// Get list of usernames and display names
+$query = $database->query("SELECT user_id,username,display_name FROM ".TABLE_PREFIX."users");
+$users = array('0' => array('display_name' => $TEXT['UNKNOWN'], 'username' => strtolower($TEXT['UNKNOWN'])));
+if($query->numRows() > 0) {
+    while($user = $query->fetchRow()) {
+        $users[$user['user_id']] = array('display_name' => $user['display_name'], 'username' => $user['username']);
+    }
+}
+
+// Get search language, used for special umlaut handling (DE: ß=ss, ...)
+$search_lang = '';
+if(isset($_REQUEST['search_lang'])) {
+    $search_lang = $_REQUEST['search_lang'];
+    if(!preg_match('~^[A-Z]{2}$~', $search_lang))
+        $search_lang = LANGUAGE;
+} else {
+    $search_lang = LANGUAGE;
+}
+
+// Get the path to search into. Normally left blank
+// ATTN: since wb2.7.1 the path is evaluated as SQL: LIKE "/path%" - which will find "/path.php", "/path/info.php", ...; But not "/de/path.php"
+// Add a '%' in front of each path to get SQL: LIKE "%/path%"
+/* possible values:
+ * - a single path: "/en/" - search only pages whose link contains 'path' ("/en/machinery/bender-x09")
+ * - a single path not to search into: "-/help" - search all, exclude /help...
+ * - a bunch of alternative pathes: "/en/,%/machinery/,/docs/" - alternatives paths, seperated by comma
+ * - a bunch of paths to exclude: "-/about,%/info,/jp/,/light" - search all, exclude these.
+ * These different styles can't be mixed.
+ */
+// ATTN: in wb2.7.0 "/en/" matched all links with "/en/" somewhere in the link: "/info/en/intro.php", "/en/info.php", ...
+// since wb2.7.1 "/en/" matches only links _starting_  with "/en/": "/en/intro/info.php"
+// use "%/en/" (or "%/en/, %/info", ...) to get the old behavior
+$search_path_SQL = '';
+$search_path = '';
+if(isset($_REQUEST['search_path'])) {
+    $search_path = addslashes(htmlspecialchars(strip_tags($wb->strip_slashes ($_REQUEST['search_path'])), ENT_QUOTES));
+    if(!preg_match('~^%?[-a-zA-Z0-9_,/ ]+$~', $search_path))
+        $search_path = '';
+    if($search_path != '') {
+        $search_path_SQL = 'AND ( ';
+        $not = '';
+        $op = 'OR';
+        if($search_path[0] == '-') {
+            $not = 'NOT';
+            $op = 'AND';
+            $paths = explode(',', substr($search_path, 1) );
+        } else {
+            $paths = explode(',',$search_path);
+        }
+        $i=0;
+        foreach($paths as $p) {
+            if($i++ > 0) {
+                $search_path_SQL .= ' $op';
+            }
+            $search_path_SQL .= " link $not LIKE '".$p."%'";            
+        }
+        $search_path_SQL .= ' )';
+    }
+}
+
+// use page_languages?
+if(PAGE_LANGUAGES) {
+    $table = TABLE_PREFIX."pages";
+    $search_language_SQL_t = "AND $table.`language` = '".LANGUAGE."'";
+    $search_language_SQL = "AND `language` = '".LANGUAGE."'";
+} else {
+    $search_language_SQL_t = '';
+    $search_language_SQL = '';
+}
+
+// Get the search type
+$match = '';
+if(isset($_REQUEST['match'])) {
+    if($_REQUEST['match']=='any') $match = 'any';
+    elseif($_REQUEST['match']=='all') $match = 'all';
+    elseif($_REQUEST['match']=='exact') $match = 'exact';
+    else $match = 'all';
+} else {
+    $match = 'all';
+}
+
+// Get search string
+$search_normal_string = '';
+$search_entities_string = ''; // for SQL's LIKE
+$search_display_string = ''; // for displaying
+$search_url_string = ''; // for $_GET -- ATTN: unquoted! Will become urldecoded later
+$string = '';
+if(isset($_REQUEST['string'])) {
+    if($match!='exact') { // $string will be cleaned below 
+        $string=str_replace(',', '', $_REQUEST['string']);
+    } else {
+        $string=$_REQUEST['string'];
+    }
+    // redo possible magic quotes
+    $string = $wb->strip_slashes($string);
+    $string = preg_replace('/\s+/', ' ', $string);
+    $string = trim($string);
+    // remove some bad chars
+    $string = str_replace ( array('[[',']]'),'', $string);
+    $string = preg_replace('/(^|\s+)[|.]+(?=\s+|$)/', '', $string);
+    $search_display_string = htmlspecialchars($string);
+    // convert string to utf-8
+    $string = entities_to_umlauts($string, 'UTF-8');
+    $search_url_string = $string;
+    $search_entities_string = addslashes(htmlentities($string, ENT_COMPAT, 'UTF-8'));
+    // mySQL needs four backslashes to match one in LIKE comparisons)
+    $search_entities_string = str_replace('\\\\', '\\\\\\\\', $search_entities_string);
+    $string = preg_quote($string);
+    // quote ' " and /  -we need quoted / for regex
+    $search_normal_string = str_replace(array('\'','"','/'), array('\\\'','\"','\/'), $string);
+}
+// make arrays from the search_..._strings above
+if($match == 'exact')
+    $search_url_array[] = $search_url_string;
+else
+    $search_url_array = explode(' ', $search_url_string);
+$search_normal_array = array();
+$search_entities_array = array();
+if($match == 'exact') {
+    $search_normal_array[]=$search_normal_string;
+    $search_entities_array[]=$search_entities_string;
+} else {
+    $exploded_string = explode(' ', $search_normal_string);
+    // Make sure there is no blank values in the array
+    foreach($exploded_string AS $each_exploded_string) {
+        if($each_exploded_string != '') {
+            $search_normal_array[] = $each_exploded_string;
+        }
+    }
+    $exploded_string = explode(' ', $search_entities_string);
+    // Make sure there is no blank values in the array
+    foreach($exploded_string AS $each_exploded_string) {
+        if($each_exploded_string != '') {
+            $search_entities_array[] = $each_exploded_string;
+        }
+    }
+}
+// make an extra copy of search_normal_array for use in regex
+$search_words = array();
+require_once(WB_PATH.'/search/search_convert.php');
+global $search_table_umlauts_local;
+require_once(WB_PATH.'/search/search_convert_ul.php');
+global $search_table_ul_umlauts;
+foreach($search_normal_array AS $str) {
+    $str = strtr($str, $search_table_umlauts_local);
+    $str = strtr($str, $search_table_ul_umlauts);
+    $search_words[] = $str;
+}
+
+// Work-out what to do (match all words, any words, or do exact match), and do relevant with query settings
+$all_checked = '';
+$any_checked = '';
+$exact_checked = '';
+if ($match == 'any') {
+    $any_checked = ' checked="checked"';
+    $logical_operator = ' OR';
+} elseif($match == 'all') {
+    $all_checked = ' checked="checked"';
+    $logical_operator = ' AND';
+} else {
+    $exact_checked = ' checked="checked"';
+}
+
+// Replace vars in search settings with values
+$vars = array('[SEARCH_STRING]', '[WB_URL]', '[PAGE_EXTENSION]', '[TEXT_RESULTS_FOR]');
+$values = array($search_display_string, WB_URL, PAGE_EXTENSION, $TEXT['RESULTS_FOR']);
+$search_footer = str_replace($vars, $values, ($fetch_footer['value']));
+$search_results_header = str_replace($vars, $values, ($fetch_results_header['value']));
+$search_results_footer = str_replace($vars, $values, ($fetch_results_footer['value']));
+
+// Do extra vars/values replacement
+$vars = array('[SEARCH_STRING]', '[WB_URL]', '[PAGE_EXTENSION]', '[TEXT_SEARCH]', '[TEXT_ALL_WORDS]', '[TEXT_ANY_WORDS]', '[TEXT_EXACT_MATCH]', '[TEXT_MATCH]', '[TEXT_MATCHING]', '[ALL_CHECKED]', '[ANY_CHECKED]', '[EXACT_CHECKED]', '[REFERRER_ID]', '[SEARCH_PATH]');
+$values = array($search_display_string, WB_URL, PAGE_EXTENSION, $TEXT['SEARCH'], $TEXT['ALL_WORDS'], $TEXT['ANY_WORDS'], $TEXT['EXACT_MATCH'], $TEXT['MATCH'], $TEXT['MATCHING'], $all_checked, $any_checked, $exact_checked, REFERRER_ID, $search_path);
+$search_header = str_replace($vars, $values, ($fetch_header['value']));
+$vars = array('[TEXT_NO_RESULTS]');
+$values = array($TEXT['NO_RESULTS']);
+$search_no_results = str_replace($vars, $values, ($fetch_no_results['value']));
+
+/*
+ * Start of output
+ */
+
+// Show search header
+echo $search_header;
+// Show search results_header
+echo $search_results_header;
+
+// Work-out if the user has already entered their details or not
+if($search_normal_string != '') {
+
+    // Get modules
+    $table = TABLE_PREFIX."sections";
+    $get_modules = $database->query("SELECT DISTINCT module FROM $table WHERE module != '' ");
+    $modules = array();
+    if($get_modules->numRows() > 0) {
+        while($module = $get_modules->fetchRow()) {
+            $modules[] = $module['module'];
+        }
+    }
+    // sort module search-order
+    // get the modules from $search_module_order first ...
+    $sorted_modules = array();
+    $m = count($modules);
+    $search_modules = explode(',', $search_module_order);
+    foreach($search_modules AS $item) {
+        $item = trim($item);
+        for($i=0; $i < $m; $i++) {
+            if(isset($modules[$i]) && $modules[$i] == $item) {
+                $sorted_modules[] = $modules[$i];
+                unset($modules[$i]);
+                break;
+            }
+        }
+    }
+    // ... then add the rest
+    foreach($modules AS $item) {
+        $sorted_modules[] = $item;
+    }
+
+
+    // Use the module's search-extensions.
+    // This is somewhat slower than the orginial method.
+    // call $search_funcs['__before'] first
+    $search_func_vars = array(
+        'database' => $database, // database-handle
+        'page_id' => 0,
+        'section_id' => 0,
+        'page_title' => '',
+        'page_menu_title' => '',
+        'page_description' => '',
+        'page_keywords' => '',
+        'page_link' => '',
+        'page_modified_when' => 0,
+        'page_modified_by' => 0,
+        'users' => $users, // array of known user-id/user-name
+        'search_words' => $search_words, // array of strings, prepared for regex
+        'search_match' => $match, // match-type
+        'search_url_array' => $search_url_array, // array of strings from the original search-string. ATTN: strings are not quoted!
+        'search_entities_array' => $search_entities_array, // entities
+        'results_loop_string' => $fetch_results_loop['value'],
+        'default_max_excerpt' => $search_max_excerpt,
+        'time_limit' => $search_time_limit, // time-limit in secs
+        'search_path' => $search_path // see docu
+    );
+    foreach($search_funcs['__before'] as $func) {
+        $uf_res = call_user_func($func, $search_func_vars);
+    }
+    // now call module-based $search_funcs[]
+    $seen_pages = array(); // seen pages per module.
+    $pages_listed = array(); // seen pages.
+    if($search_max_excerpt!=0) { // skip this search if $search_max_excerpt==0
+        foreach($sorted_modules AS $module_name) {
+            $start_time = time();    // get start-time to check time-limit; not very accurate, but ok
+            $seen_pages[$module_name] = array();
+            if(!isset($search_funcs[$module_name])) {
+                continue; // there is no search_func for this module
+            }
+            // get each section for $module_name
+            $table_s = TABLE_PREFIX."sections";    
+            $table_p = TABLE_PREFIX."pages";
+            $sections_query = $database->query("
+                SELECT s.section_id, s.page_id, s.module, s.publ_start, s.publ_end,
+                             p.page_title, p.menu_title, p.link, p.description, p.keywords, p.modified_when, p.modified_by,
+                             p.visibility, p.viewing_groups, p.viewing_users
+                FROM $table_s AS s INNER JOIN $table_p AS p ON s.page_id = p.page_id
+                WHERE s.module = '$module_name' AND p.visibility NOT IN ('none','deleted') AND p.searching = '1' $search_path_SQL $search_language_SQL
+                ORDER BY s.page_id, s.position ASC
+            ");
+            if($sections_query->numRows() > 0) {
+                while($res = $sections_query->fetchRow()) {
+                    // check if time-limit is exceeded for this module
+                    if($search_time_limit > 0 && (time()-$start_time > $search_time_limit)) {
+                        break;
+                    }
+                    // Only show this section if it is not "out of publication-date"
+                    $now = time();
+                    if( !( $now<$res['publ_end'] && ($now>$res['publ_start'] || $res['publ_start']==0) ||
+                        $now>$res['publ_start'] && $res['publ_end']==0) ) {
+                        continue;
+                    }
+                    $search_func_vars = array(
+                        'database' => $database,
+                        'page_id' => $res['page_id'],
+                        'section_id' => $res['section_id'],
+                        'page_title' => $res['page_title'],
+                        'page_menu_title' => $res['menu_title'],
+                        'page_description' => ($cfg_show_description?$res['description']:""),
+                        'page_keywords' => $res['keywords'],
+                        'page_link' => $res['link'],
+                        'page_modified_when' => $res['modified_when'],
+                        'page_modified_by' => $res['modified_by'],
+                        'users' => $users,
+                        'search_words' => $search_words, // needed for preg_match
+                        'search_match' => $match,
+                        'search_url_array' => $search_url_array, // needed for url-string only
+                        'search_entities_array' => $search_entities_array, // entities
+                        'results_loop_string' => $fetch_results_loop['value'],
+                        'default_max_excerpt' => $search_max_excerpt,
+                        'enable_flush' => $cfg_enable_flush,
+                        'time_limit' => $search_time_limit // time-limit in secs
+                    );
+                    // Only show this page if we are allowed to see it
+                    if($admin->page_is_visible($res) == false) {
+                        if($res['visibility'] == 'registered') { // don't show excerpt
+                            $search_func_vars['default_max_excerpt'] = 0;
+                            $search_func_vars['page_description'] = $TEXT['REGISTERED'];
+                        } else { // private
+                            continue;
+                        }
+                    }
+                    $uf_res = call_user_func($search_funcs[$module_name], $search_func_vars);
+                    if($uf_res) {
+                        $pages_listed[$res['page_id']] = true;
+                        $seen_pages[$module_name][$res['page_id']] = true;
+                    } else {
+                        $seen_pages[$module_name][$res['page_id']] = true;
+                    }
+                }
+            }
+        }
+    }
+    // now call $search_funcs['__after']
+    $search_func_vars = array(
+        'database' => $database, // database-handle
+        'page_id' => 0,
+        'section_id' => 0,
+        'page_title' => '',
+        'page_menu_title' => '',
+        'page_description' => '',
+        'page_keywords' => '',
+        'page_link' => '',
+        'page_modified_when' => 0,
+        'page_modified_by' => 0,
+        'users' => $users, // array of known user-id/user-name
+        'search_words' => $search_words, // array of strings, prepared for regex
+        'search_match' => $match, // match-type
+        'search_url_array' => $search_url_array, // array of strings from the original search-string. ATTN: strings are not quoted!
+        'search_entities_array' => $search_entities_array, // entities
+        'results_loop_string' => $fetch_results_loop['value'],
+        'default_max_excerpt' => $search_max_excerpt,
+        'time_limit' => $search_time_limit, // time-limit in secs
+        'search_path' => $search_path // see docu
+    );
+    foreach($search_funcs['__after'] as $func) {
+        $uf_res = call_user_func($func, $search_func_vars);
+    }
+
+
+    // Search page details only, such as description, keywords, etc, but only of unseen pages.
+    $max_excerpt_num = 0; // we don't want excerpt here
+    $divider = ".";
+    $table = TABLE_PREFIX."pages";
+    $query_pages = $database->query("
+        SELECT page_id, page_title, menu_title, link, description, keywords, modified_when, modified_by,
+               visibility, viewing_groups, viewing_users
+        FROM $table
+        WHERE visibility NOT IN ('none','deleted') AND searching = '1' $search_path_SQL $search_language_SQL
+    ");
+    if($query_pages->numRows() > 0) {
+        while($page = $query_pages->fetchRow()) {
+            if (isset($pages_listed[$page['page_id']])) {
+                continue;
+            }
+            $func_vars = array(
+                'database' => $database,
+                'page_id' => $page['page_id'],
+                'page_title' => $page['page_title'],
+                'page_menu_title' => $page['menu_title'],
+                'page_description' => ($cfg_show_description?$page['description']:""),
+                'page_keywords' => $page['keywords'],
+                'page_link' => $page['link'],
+                'page_modified_when' => $page['modified_when'],
+                'page_modified_by' => $page['modified_by'],
+                'users' => $users,
+                'search_words' => $search_words, // needed for preg_match_all
+                'search_match' => $match,
+                'search_url_array' => $search_url_array, // needed for url-string only
+                'search_entities_array' => $search_entities_array, // entities
+                'results_loop_string' => $fetch_results_loop['value'],
+                'default_max_excerpt' => $max_excerpt_num,
+                'enable_flush' => $cfg_enable_flush
+            );
+            // Only show this page if we are allowed to see it
+            if($admin->page_is_visible($page) == false) {
+                if($page['visibility'] != 'registered') {
+                    continue;
+                } else { // page: registered, user: access denied
+                    $func_vars['page_description'] = $TEXT['REGISTERED'];
+                }
+            }
+            if($admin->page_is_active($page) == false) {
+                continue;
+            }
+            $text = $func_vars['page_title'].$divider
+                .$func_vars['page_menu_title'].$divider
+                .($cfg_search_description?$func_vars['page_description']:"").$divider
+                .($cfg_search_keywords?$func_vars['page_keywords']:"").$divider;
+            $mod_vars = array(
+                'page_link' => $func_vars['page_link'],
+                'page_link_target' => "",
+                'page_title' => $func_vars['page_title'],
+                'page_description' => $func_vars['page_description'],
+                'page_modified_when' => $func_vars['page_modified_when'],
+                'page_modified_by' => $func_vars['page_modified_by'],
+                'text' => $text,
+                'max_excerpt_num' => $func_vars['default_max_excerpt']
+            );
+            if(print_excerpt2($mod_vars, $func_vars)) {
+                $pages_listed[$page['page_id']] = true;
+            }
+        }
+    }
+
+    // Now use the old method for pages not displayed by the new method above
+    // in case someone has old modules without search.php.
+
+    // Get modules
+    $table_search = TABLE_PREFIX."search";
+    $table_sections = TABLE_PREFIX."sections";
+    $get_modules = $database->query("
+        SELECT DISTINCT s.value, s.extra
+        FROM $table_search AS s INNER JOIN $table_sections AS sec
+            ON s.value = sec.module
+        WHERE s.name = 'module'
+    ");
+    $modules = array();
+    if($get_modules->numRows() > 0) {
+        while($module = $get_modules->fetchRow()) {
+            $modules[] = $module; // $modules in an array of arrays
+        }
+    }
+    // sort module search-order
+    // get the modules from $search_module_order first ...
+    $sorted_modules = array();
+    $m = count($modules);
+    $search_modules = explode(',', $search_module_order);
+    foreach($search_modules AS $item) {
+        $item = trim($item);
+        for($i=0; $i < $m; $i++) {
+            if(isset($modules[$i]) && $modules[$i]['value'] == $item) {
+                $sorted_modules[] = $modules[$i];
+                unset($modules[$i]);
+                break;
+            }
+        }
+    }
+    // ... then add the rest
+    foreach($modules AS $item) {
+        $sorted_modules[] = $item;
+    }
+
+    if($cfg_enable_old_search) { // this is the old (wb <= 2.6.7) search-function
+        $search_path_SQL = str_replace(' link ', ' '.TABLE_PREFIX.'pages.link ', $search_path_SQL);
+        foreach($sorted_modules AS $module) {
+            if(isset($seen_pages[$module['value']]) && count($seen_pages[$module['value']])>0) // skip modules handled by new search-func
+                continue;
+            $query_start = '';
+            $query_body = '';
+            $query_end = '';
+            $prepared_query = '';
+            // Get module name
+            $module_name = $module['value'];
+            if(!isset($seen_pages[$module_name])) {
+                $seen_pages[$module_name]=array();
+            }
+            // skip module 'code' - it doesn't make sense to search in a code section
+            if($module_name=="code")
+                continue;
+            // Get fields to use for title, link, etc.
+            $fields = unserialize($module['extra']);
+            // Get query start
+            $get_query_start = $database->query("SELECT value FROM ".TABLE_PREFIX."search WHERE name = 'query_start' AND extra = '$module_name' LIMIT 1");
+            if($get_query_start->numRows() > 0) {
+                // Fetch query start
+                $fetch_query_start = $get_query_start->fetchRow();
+                // Prepare query start for execution by replacing {TP} with the TABLE_PREFIX
+                $query_start = str_replace('[TP]', TABLE_PREFIX, ($fetch_query_start['value']));
+            }
+            // Get query end
+            $get_query_end = $database->query("SELECT value FROM ".TABLE_PREFIX."search WHERE name = 'query_end' AND extra = '$module_name' LIMIT 1");
+            if($get_query_end->numRows() > 0) {
+                // Fetch query end
+                $fetch_query_end = $get_query_end->fetchRow();
+                // Set query end
+                $query_end = ($fetch_query_end['value']);
+            }
+            // Get query body
+            $get_query_body = $database->query("SELECT value FROM ".TABLE_PREFIX."search WHERE name = 'query_body' AND extra = '$module_name' LIMIT 1");
+            if($get_query_body->numRows() > 0) {
+                // Fetch query body
+                $fetch_query_body = $get_query_body->fetchRow();
+                // Prepare query body for execution by replacing {STRING} with the correct one
+                $query_body = str_replace(array('[TP]','[O]','[W]'), array(TABLE_PREFIX,'LIKE','%'), ($fetch_query_body['value']));
+                // Loop through query body for each string, then combine with start and end
+                $prepared_query = $query_start." ( ( ( ";
+                $count = 0;
+                foreach($search_normal_array AS $string) {
+                    if($count != 0) {
+                        $prepared_query .= " ) ".$logical_operator." ( ";
+                    }
+                    $prepared_query .= str_replace('[STRING]', $string, $query_body);
+                    $count = $count+1;
+                }
+                $count=0;
+                $prepared_query .= ' ) ) OR ( ( ';
+                foreach($search_entities_array AS $string) {
+                    if($count != 0) {
+                        $prepared_query .= " ) ".$logical_operator." ( ";
+                    }
+                    $prepared_query .= str_replace('[STRING]', $string, $query_body);
+                    $count = $count+1;
+                }
+                $prepared_query .= " ) ) ) ".$query_end;
+                // Execute query
+                $page_query = $database->query($prepared_query." ".$search_path_SQL." ".$search_language_SQL_t);
+                if(!$page_query) continue; // on error, skip the rest of the current loop iteration
+                // Loop through queried items
+                if($page_query->numRows() > 0) {
+                    while($page = $page_query->fetchRow()) {
+                        // Only show this page if it hasn't already been listed
+                        if(isset($seen_pages[$module_name][$page['page_id']]) || isset($pages_listed[$page['page_id']])) {
+                            continue;
+                        }
+                        
+                        // don't list pages with visibility == none|deleted and check if user is allowed to see the page
+                        $p_table = TABLE_PREFIX."pages";
+                        $viewquery = $database->query("
+                            SELECT visibility, viewing_groups, viewing_users
+                            FROM $p_table
+                            WHERE page_id='{$page['page_id']}'
+                        ");
+                        $visibility = 'none'; $viewing_groups="" ; $viewing_users="";
+                        if($viewquery->numRows() > 0) {
+                            if($res = $viewquery->fetchRow()) {
+                                $visibility = $res['visibility'];
+                                $viewing_groups = $res['viewing_groups'];
+                                $viewing_users = $res['viewing_users'];
+                                if($visibility == 'deleted' || $visibility == 'none') {
+                                    continue;
+                                }
+                                if($visibility == 'private') {
+                                    if($admin->page_is_visible(array(
+                                        'page_id'=>$page[$fields['page_id']],
+                                        'visibility' =>$visibility,
+                                        'viewing_groups'=>$viewing_groups,
+                                        'viewing_users'=>$viewing_users
+                                    )) == false) {
+                                        continue;
+                                    }
+                                }
+                                if($admin->page_is_active(array('page_id'=>$page[$fields['page_id']]))==false) {
+                                    continue;
+                                }
+                            }
+                        }
+    
+                        // Get page link
+                        $link = page_link($page['link']);
+                        // Add search string for highlighting
+                        if ($match!='exact') {
+                            $sstring = implode(" ", $search_normal_array);
+                            $link = $link."?searchresult=1&amp;sstring=".urlencode($sstring);
+                        } else {
+                            $sstring = str_replace(" ", "_",$search_normal_array[0]);
+                            $link = $link."?searchresult=2&amp;sstring=".urlencode($sstring);
+                        }
+                        // Set vars to be replaced by values
+                        if(!isset($page['description'])) { $page['description'] = ""; }
+                        if(!isset($page['modified_when'])) { $page['modified_when'] = 0; }
+                        if(!isset($page['modified_by'])) { $page['modified_by'] = 0; }
+                        $vars = array('[LINK]', '[TITLE]', '[DESCRIPTION]', '[USERNAME]','[DISPLAY_NAME]','[DATE]','[TIME]','[TEXT_LAST_UPDATED_BY]','[TEXT_ON]','[EXCERPT]');
+                        if($page['modified_when'] > 0) {
+                            $date = gmdate(DATE_FORMAT, $page['modified_when']+TIMEZONE);
+                            $time = gmdate(TIME_FORMAT, $page['modified_when']+TIMEZONE);
+                        } else {
+                            $date = $TEXT['UNKNOWN'].' '.$TEXT['DATE'];
+                            $time = $TEXT['UNKNOWN'].' '.$TEXT['TIME'];
+                        }
+                        $excerpt="";
+                        if($cfg_show_description == 0) {
+                            $page['description'] = "";
+                        }
+                        $values = array($link, $page['page_title'], $page['description'], $users[$page['modified_by']]['username'], $users[$page['modified_by']]['display_name'], $date, $time, $TEXT['LAST_UPDATED_BY'], strtolower($TEXT['ON']), $excerpt);
+                        // Show loop code with vars replaced by values
+                        echo str_replace($vars, $values, ($fetch_results_loop['value']));
+                        // Say that this page has been listed
+                        $seen_pages[$module_name][$page['page_id']] = true;
+                        $pages_listed[$page['page_id']] = true;
+                    }
+                }
+            }
+        }
+    }
+
+    // Say no items found if we should
+    if(count($pages_listed) == 0) {
+        echo $search_no_results;
+    }
+} else {
+    echo $search_no_results;
+}
+
+// Show search results_footer
+echo $search_results_footer;
+// Show search footer
+echo $search_footer;
+
+?>

Property changes on: trunk/search/search.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/search/search_convert.php
===================================================================
--- trunk/search/search_convert.php	(nonexistent)
+++ trunk/search/search_convert.php	(revision 2)
@@ -0,0 +1,110 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         search
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2011, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/*
+    ATTN: to include your local changes DO NOT alter this file!
+    Instead, create your own local file search_convert_local.php
+    which will stay intact even after upgrading Website Baker.
+
+    --Example search_convert_local.php --------------------------
+    // allows the user to enter Krasic to find Krašić
+    $t["s"]  = array("š","s");
+    $t["S"]  = array("Š","S");
+    $t["c"]  = array("ć","c");
+    $t["C"]  = array("Ć","C");
+    ...
+    --END -------------------------------------------------------
+*/
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+if(!isset($search_lang)) $search_lang = LANGUAGE;
+$t = array();
+
+/*
+    ATTN:
+    This file MUST be UTF-8-encoded
+*/
+// test encoding
+if('á'!="\xc3\xa1") {
+    trigger_error('Wrong encoding for file search_convert.php!', E_USER_NOTICE);
+    return;
+}
+
+// local german settings
+if($search_lang=='DE') { // add special handling for german umlauts (ä==ae, ...)
+    // in german the character 'ß' may be written as 'ss', too. So for each 'ß' look for ('ß' OR 'ss')
+    $t["ß"]  = array("ß" ,"ss"); // german SZ-Ligatur
+    $t["ä"]  = array("ä" ,"ae"); // german ae
+    $t["ö"]  = array("ö" ,"oe"); // german oe
+    $t["ü"]  = array("ü" ,"ue"); // german ue
+    // the search itself is case-insensitiv, but strtr() (which is used to convert the search-string) isn't,
+    // so we have to supply upper-case characters, too!
+    $t["Ä"]  = array("Ä" ,"Ae"); // german Ae
+    $t["Ö"]  = array("Ö" ,"Oe"); // german Oe
+    $t["Ü"]  = array("Ü" ,"Ue"); // german Ue
+    // and for each 'ss' look for ('ß' OR 'ss'), too
+    $t["ss"] = array("ß" ,"ss"); // german SZ-Ligatur
+    $t["ae"] = array("ä" ,"ae"); // german ae
+    $t["oe"] = array("ö" ,"oe"); // german oe
+    $t["ue"] = array("ü" ,"ue"); // german ue
+    $t["Ae"] = array("Ä" ,"Ae"); // german Ae
+    $t["Oe"] = array("Ö" ,"Oe"); // german Oe
+    $t["Ue"] = array("Ü" ,"Ue"); // german Ue
+}
+
+// local Turkish settings
+if($search_lang=='TR') { // add special i/I-handling for Turkish
+    $t["i"] = array("i", "İ");
+    $t["I"] = array("I", "ı");
+}
+
+// include user-supplied file
+if(file_exists(WB_PATH.'/search/search_convert_local.php'))
+    include(WB_PATH.'/search/search_convert_local.php');
+
+// create arrays
+global $search_table_umlauts_local;
+$search_table_umlauts_local = array();
+foreach($t as $o=>$a) {
+    $alt = '';
+    if(empty($o) || empty($a) || !is_array($a)) continue;
+    foreach($a as $c) {
+        if(empty($c)) continue;
+        $alt .= preg_quote($c,'/').'|';
+    }
+    $alt = rtrim($alt, '|');
+    $search_table_umlauts_local[$o] = "($alt)";
+}
+// create array for use with frontent.functions.php (highlighting)
+$string_ul_umlaut = array_keys($search_table_umlauts_local);
+$string_ul_regex = array_values($search_table_umlauts_local);
+
+
+global $search_table_sql_local;
+$search_table_sql_local = array();
+foreach($t as $o=>$a) {
+    if(empty($o) || empty($a) || !is_array($a)) continue;
+    $i = 0;
+    foreach($a as $c) {
+        if(empty($c)) continue;
+        if($o==$c) { $i++; continue; }
+        $search_table_sql_local[$i++][$o] = $c;
+    }
+}
+

Property changes on: trunk/search/search_convert.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/search/search_convert_ul.php
===================================================================
--- trunk/search/search_convert_ul.php	(nonexistent)
+++ trunk/search/search_convert_ul.php	(revision 2)
@@ -0,0 +1,1465 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+/*
+Character Conversion file
+for search-/highlighting-related character-translations
+*/
+
+if(!defined('WB_URL')) {
+    header('Location: ../index.php');
+    exit(0);
+}
+
+//umlauts to '(upper|lower)'
+//as work-around for WB's "missing-SET-NAMES-issue"
+global $search_table_ul_umlauts;
+$search_table_ul_umlauts = array(
+    "\xc2\xb5" => "(\xc2\xb5|\xce\x9c)",
+    "\xc3\x9f" => "(\xc3\x9f|SS|ss)",
+    "\xc3\xa0" => "(\xc3\xa0|\xc3\x80)",
+    "\xc3\xa1" => "(\xc3\xa1|\xc3\x81)",
+    "\xc3\xa2" => "(\xc3\xa2|\xc3\x82)",
+    "\xc3\xa3" => "(\xc3\xa3|\xc3\x83)",
+    "\xc3\xa4" => "(\xc3\xa4|\xc3\x84)",
+    "\xc3\xa5" => "(\xc3\xa5|\xc3\x85|\xe2\x84\xab)",
+    "\xc3\xa6" => "(\xc3\xa6|\xc3\x86)",
+    "\xc3\xa7" => "(\xc3\xa7|\xc3\x87)",
+    "\xc3\xa8" => "(\xc3\xa8|\xc3\x88)",
+    "\xc3\xa9" => "(\xc3\xa9|\xc3\x89)",
+    "\xc3\xaa" => "(\xc3\xaa|\xc3\x8a)",
+    "\xc3\xab" => "(\xc3\xab|\xc3\x8b)",
+    "\xc3\xac" => "(\xc3\xac|\xc3\x8c)",
+    "\xc3\xad" => "(\xc3\xad|\xc3\x8d)",
+    "\xc3\xae" => "(\xc3\xae|\xc3\x8e)",
+    "\xc3\xaf" => "(\xc3\xaf|\xc3\x8f)",
+    "\xc3\xb0" => "(\xc3\xb0|\xc3\x90)",
+    "\xc3\xb1" => "(\xc3\xb1|\xc3\x91)",
+    "\xc3\xb2" => "(\xc3\xb2|\xc3\x92)",
+    "\xc3\xb3" => "(\xc3\xb3|\xc3\x93)",
+    "\xc3\xb4" => "(\xc3\xb4|\xc3\x94)",
+    "\xc3\xb5" => "(\xc3\xb5|\xc3\x95)",
+    "\xc3\xb6" => "(\xc3\xb6|\xc3\x96)",
+    "\xc3\xb8" => "(\xc3\xb8|\xc3\x98)",
+    "\xc3\xb9" => "(\xc3\xb9|\xc3\x99)",
+    "\xc3\xba" => "(\xc3\xba|\xc3\x9a)",
+    "\xc3\xbb" => "(\xc3\xbb|\xc3\x9b)",
+    "\xc3\xbc" => "(\xc3\xbc|\xc3\x9c)",
+    "\xc3\xbd" => "(\xc3\xbd|\xc3\x9d)",
+    "\xc3\xbe" => "(\xc3\xbe|\xc3\x9e)",
+    "\xc3\xbf" => "(\xc3\xbf|\xc5\xb8)",
+    "\xc4\x81" => "(\xc4\x81|\xc4\x80)",
+    "\xc4\x83" => "(\xc4\x83|\xc4\x82)",
+    "\xc4\x85" => "(\xc4\x85|\xc4\x84)",
+    "\xc4\x87" => "(\xc4\x87|\xc4\x86)",
+    "\xc4\x89" => "(\xc4\x89|\xc4\x88)",
+    "\xc4\x8b" => "(\xc4\x8b|\xc4\x8a)",
+    "\xc4\x8d" => "(\xc4\x8d|\xc4\x8c)",
+    "\xc4\x8f" => "(\xc4\x8f|\xc4\x8e)",
+    "\xc4\x91" => "(\xc4\x91|\xc4\x90)",
+    "\xc4\x93" => "(\xc4\x93|\xc4\x92)",
+    "\xc4\x95" => "(\xc4\x95|\xc4\x94)",
+    "\xc4\x97" => "(\xc4\x97|\xc4\x96)",
+    "\xc4\x99" => "(\xc4\x99|\xc4\x98)",
+    "\xc4\x9b" => "(\xc4\x9b|\xc4\x9a)",
+    "\xc4\x9d" => "(\xc4\x9d|\xc4\x9c)",
+    "\xc4\x9f" => "(\xc4\x9f|\xc4\x9e)",
+    "\xc4\xa1" => "(\xc4\xa1|\xc4\xa0)",
+    "\xc4\xa3" => "(\xc4\xa3|\xc4\xa2)",
+    "\xc4\xa5" => "(\xc4\xa5|\xc4\xa4)",
+    "\xc4\xa7" => "(\xc4\xa7|\xc4\xa6)",
+    "\xc4\xa9" => "(\xc4\xa9|\xc4\xa8)",
+    "\xc4\xab" => "(\xc4\xab|\xc4\xaa)",
+    "\xc4\xad" => "(\xc4\xad|\xc4\xac)",
+    "\xc4\xaf" => "(\xc4\xaf|\xc4\xae)",
+    "\xc4\xb1" => "(\xc4\xb1|I)",
+    "\xc4\xb3" => "(\xc4\xb3|\xc4\xb2)",
+    "\xc4\xb5" => "(\xc4\xb5|\xc4\xb4)",
+    "\xc4\xb7" => "(\xc4\xb7|\xc4\xb6)",
+    "\xc4\xba" => "(\xc4\xba|\xc4\xb9)",
+    "\xc4\xbc" => "(\xc4\xbc|\xc4\xbb)",
+    "\xc4\xbe" => "(\xc4\xbe|\xc4\xbd)",
+    "\xc5\x80" => "(\xc5\x80|\xc4\xbf)",
+    "\xc5\x82" => "(\xc5\x82|\xc5\x81)",
+    "\xc5\x84" => "(\xc5\x84|\xc5\x83)",
+    "\xc5\x86" => "(\xc5\x86|\xc5\x85)",
+    "\xc5\x88" => "(\xc5\x88|\xc5\x87)",
+    "\xc5\x8b" => "(\xc5\x8b|\xc5\x8a)",
+    "\xc5\x8d" => "(\xc5\x8d|\xc5\x8c)",
+    "\xc5\x8f" => "(\xc5\x8f|\xc5\x8e)",
+    "\xc5\x91" => "(\xc5\x91|\xc5\x90)",
+    "\xc5\x93" => "(\xc5\x93|\xc5\x92)",
+    "\xc5\x95" => "(\xc5\x95|\xc5\x94)",
+    "\xc5\x97" => "(\xc5\x97|\xc5\x96)",
+    "\xc5\x99" => "(\xc5\x99|\xc5\x98)",
+    "\xc5\x9b" => "(\xc5\x9b|\xc5\x9a)",
+    "\xc5\x9d" => "(\xc5\x9d|\xc5\x9c)",
+    "\xc5\x9f" => "(\xc5\x9f|\xc5\x9e)",
+    "\xc5\xa1" => "(\xc5\xa1|\xc5\xa0)",
+    "\xc5\xa3" => "(\xc5\xa3|\xc5\xa2)",
+    "\xc5\xa5" => "(\xc5\xa5|\xc5\xa4)",
+    "\xc5\xa7" => "(\xc5\xa7|\xc5\xa6)",
+    "\xc5\xa9" => "(\xc5\xa9|\xc5\xa8)",
+    "\xc5\xab" => "(\xc5\xab|\xc5\xaa)",
+    "\xc5\xad" => "(\xc5\xad|\xc5\xac)",
+    "\xc5\xaf" => "(\xc5\xaf|\xc5\xae)",
+    "\xc5\xb1" => "(\xc5\xb1|\xc5\xb0)",
+    "\xc5\xb3" => "(\xc5\xb3|\xc5\xb2)",
+    "\xc5\xb5" => "(\xc5\xb5|\xc5\xb4)",
+    "\xc5\xb7" => "(\xc5\xb7|\xc5\xb6)",
+    "\xc5\xba" => "(\xc5\xba|\xc5\xb9)",
+    "\xc5\xbc" => "(\xc5\xbc|\xc5\xbb)",
+    "\xc5\xbe" => "(\xc5\xbe|\xc5\xbd)",
+    "\xc5\xbf" => "(\xc5\xbf|S)",
+    "\xc6\x83" => "(\xc6\x83|\xc6\x82)",
+    "\xc6\x85" => "(\xc6\x85|\xc6\x84)",
+    "\xc6\x88" => "(\xc6\x88|\xc6\x87)",
+    "\xc6\x8c" => "(\xc6\x8c|\xc6\x8b)",
+    "\xc6\x92" => "(\xc6\x92|\xc6\x91)",
+    "\xc6\x95" => "(\xc6\x95|\xc7\xb6)",
+    "\xc6\x99" => "(\xc6\x99|\xc6\x98)",
+    "\xc6\xa1" => "(\xc6\xa1|\xc6\xa0)",
+    "\xc6\xa3" => "(\xc6\xa3|\xc6\xa2)",
+    "\xc6\xa5" => "(\xc6\xa5|\xc6\xa4)",
+    "\xc6\xa8" => "(\xc6\xa8|\xc6\xa7)",
+    "\xc6\xad" => "(\xc6\xad|\xc6\xac)",
+    "\xc6\xb0" => "(\xc6\xb0|\xc6\xaf)",
+    "\xc6\xb4" => "(\xc6\xb4|\xc6\xb3)",
+    "\xc6\xb6" => "(\xc6\xb6|\xc6\xb5)",
+    "\xc6\xb9" => "(\xc6\xb9|\xc6\xb8)",
+    "\xc6\xbd" => "(\xc6\xbd|\xc6\xbc)",
+    "\xc6\xbf" => "(\xc6\xbf|\xc7\xb7)",
+    "\xc7\x86" => "(\xc7\x86|\xc7\x84|\xc7\x85)",
+    "\xc7\x89" => "(\xc7\x89|\xc7\x87|\xc7\x88)",
+    "\xc7\x8c" => "(\xc7\x8c|\xc7\x8a|\xc7\x8b)",
+    "\xc7\x8e" => "(\xc7\x8e|\xc7\x8d)",
+    "\xc7\x90" => "(\xc7\x90|\xc7\x8f)",
+    "\xc7\x92" => "(\xc7\x92|\xc7\x91)",
+    "\xc7\x94" => "(\xc7\x94|\xc7\x93)",
+    "\xc7\x96" => "(\xc7\x96|\xc7\x95)",
+    "\xc7\x98" => "(\xc7\x98|\xc7\x97)",
+    "\xc7\x9a" => "(\xc7\x9a|\xc7\x99)",
+    "\xc7\x9c" => "(\xc7\x9c|\xc7\x9b)",
+    "\xc7\x9d" => "(\xc7\x9d|\xc6\x8e)",
+    "\xc7\x9f" => "(\xc7\x9f|\xc7\x9e)",
+    "\xc7\xa1" => "(\xc7\xa1|\xc7\xa0)",
+    "\xc7\xa3" => "(\xc7\xa3|\xc7\xa2)",
+    "\xc7\xa5" => "(\xc7\xa5|\xc7\xa4)",
+    "\xc7\xa7" => "(\xc7\xa7|\xc7\xa6)",
+    "\xc7\xa9" => "(\xc7\xa9|\xc7\xa8)",
+    "\xc7\xab" => "(\xc7\xab|\xc7\xaa)",
+    "\xc7\xad" => "(\xc7\xad|\xc7\xac)",
+    "\xc7\xaf" => "(\xc7\xaf|\xc7\xae)",
+    "\xc7\xb2" => "(\xc7\xb2|\xc7\xb1|\xc7\xb3)",
+    "\xc7\xb3" => "(\xc7\xb3|\xc7\xb1|\xc7\xb2)",
+    "\xc7\xb5" => "(\xc7\xb5|\xc7\xb4)",
+    "\xc7\xb9" => "(\xc7\xb9|\xc7\xb8)",
+    "\xc7\xbb" => "(\xc7\xbb|\xc7\xba)",
+    "\xc7\xbd" => "(\xc7\xbd|\xc7\xbc)",
+    "\xc7\xbf" => "(\xc7\xbf|\xc7\xbe)",
+    "\xc8\x81" => "(\xc8\x81|\xc8\x80)",
+    "\xc8\x83" => "(\xc8\x83|\xc8\x82)",
+    "\xc8\x85" => "(\xc8\x85|\xc8\x84)",
+    "\xc8\x87" => "(\xc8\x87|\xc8\x86)",
+    "\xc8\x89" => "(\xc8\x89|\xc8\x88)",
+    "\xc8\x8b" => "(\xc8\x8b|\xc8\x8a)",
+    "\xc8\x8d" => "(\xc8\x8d|\xc8\x8c)",
+    "\xc8\x8f" => "(\xc8\x8f|\xc8\x8e)",
+    "\xc8\x91" => "(\xc8\x91|\xc8\x90)",
+    "\xc8\x93" => "(\xc8\x93|\xc8\x92)",
+    "\xc8\x95" => "(\xc8\x95|\xc8\x94)",
+    "\xc8\x97" => "(\xc8\x97|\xc8\x96)",
+    "\xc8\x99" => "(\xc8\x99|\xc8\x98)",
+    "\xc8\x9b" => "(\xc8\x9b|\xc8\x9a)",
+    "\xc8\x9d" => "(\xc8\x9d|\xc8\x9c)",
+    "\xc8\x9f" => "(\xc8\x9f|\xc8\x9e)",
+    "\xc8\xa3" => "(\xc8\xa3|\xc8\xa2)",
+    "\xc8\xa5" => "(\xc8\xa5|\xc8\xa4)",
+    "\xc8\xa7" => "(\xc8\xa7|\xc8\xa6)",
+    "\xc8\xa9" => "(\xc8\xa9|\xc8\xa8)",
+    "\xc8\xab" => "(\xc8\xab|\xc8\xaa)",
+    "\xc8\xad" => "(\xc8\xad|\xc8\xac)",
+    "\xc8\xaf" => "(\xc8\xaf|\xc8\xae)",
+    "\xc8\xb1" => "(\xc8\xb1|\xc8\xb0)",
+    "\xc8\xb3" => "(\xc8\xb3|\xc8\xb2)",
+    "\xc9\x93" => "(\xc9\x93|\xc6\x81)",
+    "\xc9\x94" => "(\xc9\x94|\xc6\x86)",
+    "\xc9\x96" => "(\xc9\x96|\xc6\x89)",
+    "\xc9\x97" => "(\xc9\x97|\xc6\x8a)",
+    "\xc9\x99" => "(\xc9\x99|\xc6\x8f)",
+    "\xc9\x9b" => "(\xc9\x9b|\xc6\x90)",
+    "\xc9\xa0" => "(\xc9\xa0|\xc6\x93)",
+    "\xc9\xa3" => "(\xc9\xa3|\xc6\x94)",
+    "\xc9\xa8" => "(\xc9\xa8|\xc6\x97)",
+    "\xc9\xa9" => "(\xc9\xa9|\xc6\x96)",
+    "\xc9\xaf" => "(\xc9\xaf|\xc6\x9c)",
+    "\xc9\xb2" => "(\xc9\xb2|\xc6\x9d)",
+    "\xc9\xb5" => "(\xc9\xb5|\xc6\x9f)",
+    "\xca\x80" => "(\xca\x80|\xc6\xa6)",
+    "\xca\x83" => "(\xca\x83|\xc6\xa9)",
+    "\xca\x88" => "(\xca\x88|\xc6\xae)",
+    "\xca\x8a" => "(\xca\x8a|\xc6\xb1)",
+    "\xca\x8b" => "(\xca\x8b|\xc6\xb2)",
+    "\xca\x92" => "(\xca\x92|\xc6\xb7)",
+    "\xcd\x85" => "(\xcd\x85|\xce\x99)",
+    "\xce\xac" => "(\xce\xac|\xce\x86)",
+    "\xce\xad" => "(\xce\xad|\xce\x88)",
+    "\xce\xae" => "(\xce\xae|\xce\x89)",
+    "\xce\xaf" => "(\xce\xaf|\xce\x8a)",
+    "\xce\xb1" => "(\xce\xb1|\xce\x91)",
+    "\xce\xb2" => "(\xce\xb2|\xce\x92)",
+    "\xce\xb3" => "(\xce\xb3|\xce\x93)",
+    "\xce\xb4" => "(\xce\xb4|\xce\x94)",
+    "\xce\xb5" => "(\xce\xb5|\xce\x95)",
+    "\xce\xb6" => "(\xce\xb6|\xce\x96)",
+    "\xce\xb7" => "(\xce\xb7|\xce\x97)",
+    "\xce\xb8" => "(\xce\xb8|\xce\x98|\xcf\xb4)",
+    "\xce\xb9" => "(\xce\xb9|\xce\x99)",
+    "\xce\xba" => "(\xce\xba|\xce\x9a)",
+    "\xce\xbb" => "(\xce\xbb|\xce\x9b)",
+    "\xce\xbc" => "(\xce\xbc|\xce\x9c)",
+    "\xce\xbd" => "(\xce\xbd|\xce\x9d)",
+    "\xce\xbe" => "(\xce\xbe|\xce\x9e)",
+    "\xce\xbf" => "(\xce\xbf|\xce\x9f)",
+    "\xcf\x80" => "(\xcf\x80|\xce\xa0)",
+    "\xcf\x81" => "(\xcf\x81|\xce\xa1)",
+    "\xcf\x82" => "(\xcf\x82|\xce\xa3)",
+    "\xcf\x83" => "(\xcf\x83|\xce\xa3)",
+    "\xcf\x84" => "(\xcf\x84|\xce\xa4)",
+    "\xcf\x85" => "(\xcf\x85|\xce\xa5)",
+    "\xcf\x86" => "(\xcf\x86|\xce\xa6)",
+    "\xcf\x87" => "(\xcf\x87|\xce\xa7)",
+    "\xcf\x88" => "(\xcf\x88|\xce\xa8)",
+    "\xcf\x89" => "(\xcf\x89|\xce\xa9|\xe2\x84\xa6)",
+    "\xcf\x8a" => "(\xcf\x8a|\xce\xaa)",
+    "\xcf\x8b" => "(\xcf\x8b|\xce\xab)",
+    "\xcf\x8c" => "(\xcf\x8c|\xce\x8c)",
+    "\xcf\x8d" => "(\xcf\x8d|\xce\x8e)",
+    "\xcf\x8e" => "(\xcf\x8e|\xce\x8f)",
+    "\xcf\x90" => "(\xcf\x90|\xce\x92)",
+    "\xcf\x91" => "(\xcf\x91|\xce\x98)",
+    "\xcf\x95" => "(\xcf\x95|\xce\xa6)",
+    "\xcf\x96" => "(\xcf\x96|\xce\xa0)",
+    "\xcf\x9b" => "(\xcf\x9b|\xcf\x9a)",
+    "\xcf\x9d" => "(\xcf\x9d|\xcf\x9c)",
+    "\xcf\x9f" => "(\xcf\x9f|\xcf\x9e)",
+    "\xcf\xa1" => "(\xcf\xa1|\xcf\xa0)",
+    "\xcf\xa3" => "(\xcf\xa3|\xcf\xa2)",
+    "\xcf\xa5" => "(\xcf\xa5|\xcf\xa4)",
+    "\xcf\xa7" => "(\xcf\xa7|\xcf\xa6)",
+    "\xcf\xa9" => "(\xcf\xa9|\xcf\xa8)",
+    "\xcf\xab" => "(\xcf\xab|\xcf\xaa)",
+    "\xcf\xad" => "(\xcf\xad|\xcf\xac)",
+    "\xcf\xaf" => "(\xcf\xaf|\xcf\xae)",
+    "\xcf\xb0" => "(\xcf\xb0|\xce\x9a)",
+    "\xcf\xb1" => "(\xcf\xb1|\xce\xa1)",
+    "\xcf\xb2" => "(\xcf\xb2|\xce\xa3)",
+    "\xcf\xb5" => "(\xcf\xb5|\xce\x95)",
+    "\xd0\xb0" => "(\xd0\xb0|\xd0\x90)",
+    "\xd0\xb1" => "(\xd0\xb1|\xd0\x91)",
+    "\xd0\xb2" => "(\xd0\xb2|\xd0\x92)",
+    "\xd0\xb3" => "(\xd0\xb3|\xd0\x93)",
+    "\xd0\xb4" => "(\xd0\xb4|\xd0\x94)",
+    "\xd0\xb5" => "(\xd0\xb5|\xd0\x95)",
+    "\xd0\xb6" => "(\xd0\xb6|\xd0\x96)",
+    "\xd0\xb7" => "(\xd0\xb7|\xd0\x97)",
+    "\xd0\xb8" => "(\xd0\xb8|\xd0\x98)",
+    "\xd0\xb9" => "(\xd0\xb9|\xd0\x99)",
+    "\xd0\xba" => "(\xd0\xba|\xd0\x9a)",
+    "\xd0\xbb" => "(\xd0\xbb|\xd0\x9b)",
+    "\xd0\xbc" => "(\xd0\xbc|\xd0\x9c)",
+    "\xd0\xbd" => "(\xd0\xbd|\xd0\x9d)",
+    "\xd0\xbe" => "(\xd0\xbe|\xd0\x9e)",
+    "\xd0\xbf" => "(\xd0\xbf|\xd0\x9f)",
+    "\xd1\x80" => "(\xd1\x80|\xd0\xa0)",
+    "\xd1\x81" => "(\xd1\x81|\xd0\xa1)",
+    "\xd1\x82" => "(\xd1\x82|\xd0\xa2)",
+    "\xd1\x83" => "(\xd1\x83|\xd0\xa3)",
+    "\xd1\x84" => "(\xd1\x84|\xd0\xa4)",
+    "\xd1\x85" => "(\xd1\x85|\xd0\xa5)",
+    "\xd1\x86" => "(\xd1\x86|\xd0\xa6)",
+    "\xd1\x87" => "(\xd1\x87|\xd0\xa7)",
+    "\xd1\x88" => "(\xd1\x88|\xd0\xa8)",
+    "\xd1\x89" => "(\xd1\x89|\xd0\xa9)",
+    "\xd1\x8a" => "(\xd1\x8a|\xd0\xaa)",
+    "\xd1\x8b" => "(\xd1\x8b|\xd0\xab)",
+    "\xd1\x8c" => "(\xd1\x8c|\xd0\xac)",
+    "\xd1\x8d" => "(\xd1\x8d|\xd0\xad)",
+    "\xd1\x8e" => "(\xd1\x8e|\xd0\xae)",
+    "\xd1\x8f" => "(\xd1\x8f|\xd0\xaf)",
+    "\xd1\x90" => "(\xd1\x90|\xd0\x80)",
+    "\xd1\x91" => "(\xd1\x91|\xd0\x81)",
+    "\xd1\x92" => "(\xd1\x92|\xd0\x82)",
+    "\xd1\x93" => "(\xd1\x93|\xd0\x83)",
+    "\xd1\x94" => "(\xd1\x94|\xd0\x84)",
+    "\xd1\x95" => "(\xd1\x95|\xd0\x85)",
+    "\xd1\x96" => "(\xd1\x96|\xd0\x86)",
+    "\xd1\x97" => "(\xd1\x97|\xd0\x87)",
+    "\xd1\x98" => "(\xd1\x98|\xd0\x88)",
+    "\xd1\x99" => "(\xd1\x99|\xd0\x89)",
+    "\xd1\x9a" => "(\xd1\x9a|\xd0\x8a)",
+    "\xd1\x9b" => "(\xd1\x9b|\xd0\x8b)",
+    "\xd1\x9c" => "(\xd1\x9c|\xd0\x8c)",
+    "\xd1\x9d" => "(\xd1\x9d|\xd0\x8d)",
+    "\xd1\x9e" => "(\xd1\x9e|\xd0\x8e)",
+    "\xd1\x9f" => "(\xd1\x9f|\xd0\x8f)",
+    "\xd1\xa1" => "(\xd1\xa1|\xd1\xa0)",
+    "\xd1\xa3" => "(\xd1\xa3|\xd1\xa2)",
+    "\xd1\xa5" => "(\xd1\xa5|\xd1\xa4)",
+    "\xd1\xa7" => "(\xd1\xa7|\xd1\xa6)",
+    "\xd1\xa9" => "(\xd1\xa9|\xd1\xa8)",
+    "\xd1\xab" => "(\xd1\xab|\xd1\xaa)",
+    "\xd1\xad" => "(\xd1\xad|\xd1\xac)",
+    "\xd1\xaf" => "(\xd1\xaf|\xd1\xae)",
+    "\xd1\xb1" => "(\xd1\xb1|\xd1\xb0)",
+    "\xd1\xb3" => "(\xd1\xb3|\xd1\xb2)",
+    "\xd1\xb5" => "(\xd1\xb5|\xd1\xb4)",
+    "\xd1\xb7" => "(\xd1\xb7|\xd1\xb6)",
+    "\xd1\xb9" => "(\xd1\xb9|\xd1\xb8)",
+    "\xd1\xbb" => "(\xd1\xbb|\xd1\xba)",
+    "\xd1\xbd" => "(\xd1\xbd|\xd1\xbc)",
+    "\xd1\xbf" => "(\xd1\xbf|\xd1\xbe)",
+    "\xd2\x81" => "(\xd2\x81|\xd2\x80)",
+    "\xd2\x8d" => "(\xd2\x8d|\xd2\x8c)",
+    "\xd2\x8f" => "(\xd2\x8f|\xd2\x8e)",
+    "\xd2\x91" => "(\xd2\x91|\xd2\x90)",
+    "\xd2\x93" => "(\xd2\x93|\xd2\x92)",
+    "\xd2\x95" => "(\xd2\x95|\xd2\x94)",
+    "\xd2\x97" => "(\xd2\x97|\xd2\x96)",
+    "\xd2\x99" => "(\xd2\x99|\xd2\x98)",
+    "\xd2\x9b" => "(\xd2\x9b|\xd2\x9a)",
+    "\xd2\x9d" => "(\xd2\x9d|\xd2\x9c)",
+    "\xd2\x9f" => "(\xd2\x9f|\xd2\x9e)",
+    "\xd2\xa1" => "(\xd2\xa1|\xd2\xa0)",
+    "\xd2\xa3" => "(\xd2\xa3|\xd2\xa2)",
+    "\xd2\xa5" => "(\xd2\xa5|\xd2\xa4)",
+    "\xd2\xa7" => "(\xd2\xa7|\xd2\xa6)",
+    "\xd2\xa9" => "(\xd2\xa9|\xd2\xa8)",
+    "\xd2\xab" => "(\xd2\xab|\xd2\xaa)",
+    "\xd2\xad" => "(\xd2\xad|\xd2\xac)",
+    "\xd2\xaf" => "(\xd2\xaf|\xd2\xae)",
+    "\xd2\xb1" => "(\xd2\xb1|\xd2\xb0)",
+    "\xd2\xb3" => "(\xd2\xb3|\xd2\xb2)",
+    "\xd2\xb5" => "(\xd2\xb5|\xd2\xb4)",
+    "\xd2\xb7" => "(\xd2\xb7|\xd2\xb6)",
+    "\xd2\xb9" => "(\xd2\xb9|\xd2\xb8)",
+    "\xd2\xbb" => "(\xd2\xbb|\xd2\xba)",
+    "\xd2\xbd" => "(\xd2\xbd|\xd2\xbc)",
+    "\xd2\xbf" => "(\xd2\xbf|\xd2\xbe)",
+    "\xd3\x82" => "(\xd3\x82|\xd3\x81)",
+    "\xd3\x84" => "(\xd3\x84|\xd3\x83)",
+    "\xd3\x88" => "(\xd3\x88|\xd3\x87)",
+    "\xd3\x8c" => "(\xd3\x8c|\xd3\x8b)",
+    "\xd3\x91" => "(\xd3\x91|\xd3\x90)",
+    "\xd3\x93" => "(\xd3\x93|\xd3\x92)",
+    "\xd3\x95" => "(\xd3\x95|\xd3\x94)",
+    "\xd3\x97" => "(\xd3\x97|\xd3\x96)",
+    "\xd3\x99" => "(\xd3\x99|\xd3\x98)",
+    "\xd3\x9b" => "(\xd3\x9b|\xd3\x9a)",
+    "\xd3\x9d" => "(\xd3\x9d|\xd3\x9c)",
+    "\xd3\x9f" => "(\xd3\x9f|\xd3\x9e)",
+    "\xd3\xa1" => "(\xd3\xa1|\xd3\xa0)",
+    "\xd3\xa3" => "(\xd3\xa3|\xd3\xa2)",
+    "\xd3\xa5" => "(\xd3\xa5|\xd3\xa4)",
+    "\xd3\xa7" => "(\xd3\xa7|\xd3\xa6)",
+    "\xd3\xa9" => "(\xd3\xa9|\xd3\xa8)",
+    "\xd3\xab" => "(\xd3\xab|\xd3\xaa)",
+    "\xd3\xad" => "(\xd3\xad|\xd3\xac)",
+    "\xd3\xaf" => "(\xd3\xaf|\xd3\xae)",
+    "\xd3\xb1" => "(\xd3\xb1|\xd3\xb0)",
+    "\xd3\xb3" => "(\xd3\xb3|\xd3\xb2)",
+    "\xd3\xb5" => "(\xd3\xb5|\xd3\xb4)",
+    "\xd3\xb9" => "(\xd3\xb9|\xd3\xb8)",
+    "\xd5\xa1" => "(\xd5\xa1|\xd4\xb1)",
+    "\xd5\xa2" => "(\xd5\xa2|\xd4\xb2)",
+    "\xd5\xa3" => "(\xd5\xa3|\xd4\xb3)",
+    "\xd5\xa4" => "(\xd5\xa4|\xd4\xb4)",
+    "\xd5\xa5" => "(\xd5\xa5|\xd4\xb5)",
+    "\xd5\xa6" => "(\xd5\xa6|\xd4\xb6)",
+    "\xd5\xa7" => "(\xd5\xa7|\xd4\xb7)",
+    "\xd5\xa8" => "(\xd5\xa8|\xd4\xb8)",
+    "\xd5\xa9" => "(\xd5\xa9|\xd4\xb9)",
+    "\xd5\xaa" => "(\xd5\xaa|\xd4\xba)",
+    "\xd5\xab" => "(\xd5\xab|\xd4\xbb)",
+    "\xd5\xac" => "(\xd5\xac|\xd4\xbc)",
+    "\xd5\xad" => "(\xd5\xad|\xd4\xbd)",
+    "\xd5\xae" => "(\xd5\xae|\xd4\xbe)",
+    "\xd5\xaf" => "(\xd5\xaf|\xd4\xbf)",
+    "\xd5\xb0" => "(\xd5\xb0|\xd5\x80)",
+    "\xd5\xb1" => "(\xd5\xb1|\xd5\x81)",
+    "\xd5\xb2" => "(\xd5\xb2|\xd5\x82)",
+    "\xd5\xb3" => "(\xd5\xb3|\xd5\x83)",
+    "\xd5\xb4" => "(\xd5\xb4|\xd5\x84)",
+    "\xd5\xb5" => "(\xd5\xb5|\xd5\x85)",
+    "\xd5\xb6" => "(\xd5\xb6|\xd5\x86)",
+    "\xd5\xb7" => "(\xd5\xb7|\xd5\x87)",
+    "\xd5\xb8" => "(\xd5\xb8|\xd5\x88)",
+    "\xd5\xb9" => "(\xd5\xb9|\xd5\x89)",
+    "\xd5\xba" => "(\xd5\xba|\xd5\x8a)",
+    "\xd5\xbb" => "(\xd5\xbb|\xd5\x8b)",
+    "\xd5\xbc" => "(\xd5\xbc|\xd5\x8c)",
+    "\xd5\xbd" => "(\xd5\xbd|\xd5\x8d)",
+    "\xd5\xbe" => "(\xd5\xbe|\xd5\x8e)",
+    "\xd5\xbf" => "(\xd5\xbf|\xd5\x8f)",
+    "\xd6\x80" => "(\xd6\x80|\xd5\x90)",
+    "\xd6\x81" => "(\xd6\x81|\xd5\x91)",
+    "\xd6\x82" => "(\xd6\x82|\xd5\x92)",
+    "\xd6\x83" => "(\xd6\x83|\xd5\x93)",
+    "\xd6\x84" => "(\xd6\x84|\xd5\x94)",
+    "\xd6\x85" => "(\xd6\x85|\xd5\x95)",
+    "\xd6\x86" => "(\xd6\x86|\xd5\x96)",
+    "\xe1\xb8\x81" => "(\xe1\xb8\x81|\xe1\xb8\x80)",
+    "\xe1\xb8\x83" => "(\xe1\xb8\x83|\xe1\xb8\x82)",
+    "\xe1\xb8\x85" => "(\xe1\xb8\x85|\xe1\xb8\x84)",
+    "\xe1\xb8\x87" => "(\xe1\xb8\x87|\xe1\xb8\x86)",
+    "\xe1\xb8\x89" => "(\xe1\xb8\x89|\xe1\xb8\x88)",
+    "\xe1\xb8\x8b" => "(\xe1\xb8\x8b|\xe1\xb8\x8a)",
+    "\xe1\xb8\x8d" => "(\xe1\xb8\x8d|\xe1\xb8\x8c)",
+    "\xe1\xb8\x8f" => "(\xe1\xb8\x8f|\xe1\xb8\x8e)",
+    "\xe1\xb8\x91" => "(\xe1\xb8\x91|\xe1\xb8\x90)",
+    "\xe1\xb8\x93" => "(\xe1\xb8\x93|\xe1\xb8\x92)",
+    "\xe1\xb8\x95" => "(\xe1\xb8\x95|\xe1\xb8\x94)",
+    "\xe1\xb8\x97" => "(\xe1\xb8\x97|\xe1\xb8\x96)",
+    "\xe1\xb8\x99" => "(\xe1\xb8\x99|\xe1\xb8\x98)",
+    "\xe1\xb8\x9b" => "(\xe1\xb8\x9b|\xe1\xb8\x9a)",
+    "\xe1\xb8\x9d" => "(\xe1\xb8\x9d|\xe1\xb8\x9c)",
+    "\xe1\xb8\x9f" => "(\xe1\xb8\x9f|\xe1\xb8\x9e)",
+    "\xe1\xb8\xa1" => "(\xe1\xb8\xa1|\xe1\xb8\xa0)",
+    "\xe1\xb8\xa3" => "(\xe1\xb8\xa3|\xe1\xb8\xa2)",
+    "\xe1\xb8\xa5" => "(\xe1\xb8\xa5|\xe1\xb8\xa4)",
+    "\xe1\xb8\xa7" => "(\xe1\xb8\xa7|\xe1\xb8\xa6)",
+    "\xe1\xb8\xa9" => "(\xe1\xb8\xa9|\xe1\xb8\xa8)",
+    "\xe1\xb8\xab" => "(\xe1\xb8\xab|\xe1\xb8\xaa)",
+    "\xe1\xb8\xad" => "(\xe1\xb8\xad|\xe1\xb8\xac)",
+    "\xe1\xb8\xaf" => "(\xe1\xb8\xaf|\xe1\xb8\xae)",
+    "\xe1\xb8\xb1" => "(\xe1\xb8\xb1|\xe1\xb8\xb0)",
+    "\xe1\xb8\xb3" => "(\xe1\xb8\xb3|\xe1\xb8\xb2)",
+    "\xe1\xb8\xb5" => "(\xe1\xb8\xb5|\xe1\xb8\xb4)",
+    "\xe1\xb8\xb7" => "(\xe1\xb8\xb7|\xe1\xb8\xb6)",
+    "\xe1\xb8\xb9" => "(\xe1\xb8\xb9|\xe1\xb8\xb8)",
+    "\xe1\xb8\xbb" => "(\xe1\xb8\xbb|\xe1\xb8\xba)",
+    "\xe1\xb8\xbd" => "(\xe1\xb8\xbd|\xe1\xb8\xbc)",
+    "\xe1\xb8\xbf" => "(\xe1\xb8\xbf|\xe1\xb8\xbe)",
+    "\xe1\xb9\x81" => "(\xe1\xb9\x81|\xe1\xb9\x80)",
+    "\xe1\xb9\x83" => "(\xe1\xb9\x83|\xe1\xb9\x82)",
+    "\xe1\xb9\x85" => "(\xe1\xb9\x85|\xe1\xb9\x84)",
+    "\xe1\xb9\x87" => "(\xe1\xb9\x87|\xe1\xb9\x86)",
+    "\xe1\xb9\x89" => "(\xe1\xb9\x89|\xe1\xb9\x88)",
+    "\xe1\xb9\x8b" => "(\xe1\xb9\x8b|\xe1\xb9\x8a)",
+    "\xe1\xb9\x8d" => "(\xe1\xb9\x8d|\xe1\xb9\x8c)",
+    "\xe1\xb9\x8f" => "(\xe1\xb9\x8f|\xe1\xb9\x8e)",
+    "\xe1\xb9\x91" => "(\xe1\xb9\x91|\xe1\xb9\x90)",
+    "\xe1\xb9\x93" => "(\xe1\xb9\x93|\xe1\xb9\x92)",
+    "\xe1\xb9\x95" => "(\xe1\xb9\x95|\xe1\xb9\x94)",
+    "\xe1\xb9\x97" => "(\xe1\xb9\x97|\xe1\xb9\x96)",
+    "\xe1\xb9\x99" => "(\xe1\xb9\x99|\xe1\xb9\x98)",
+    "\xe1\xb9\x9b" => "(\xe1\xb9\x9b|\xe1\xb9\x9a)",
+    "\xe1\xb9\x9d" => "(\xe1\xb9\x9d|\xe1\xb9\x9c)",
+    "\xe1\xb9\x9f" => "(\xe1\xb9\x9f|\xe1\xb9\x9e)",
+    "\xe1\xb9\xa1" => "(\xe1\xb9\xa1|\xe1\xb9\xa0)",
+    "\xe1\xb9\xa3" => "(\xe1\xb9\xa3|\xe1\xb9\xa2)",
+    "\xe1\xb9\xa5" => "(\xe1\xb9\xa5|\xe1\xb9\xa4)",
+    "\xe1\xb9\xa7" => "(\xe1\xb9\xa7|\xe1\xb9\xa6)",
+    "\xe1\xb9\xa9" => "(\xe1\xb9\xa9|\xe1\xb9\xa8)",
+    "\xe1\xb9\xab" => "(\xe1\xb9\xab|\xe1\xb9\xaa)",
+    "\xe1\xb9\xad" => "(\xe1\xb9\xad|\xe1\xb9\xac)",
+    "\xe1\xb9\xaf" => "(\xe1\xb9\xaf|\xe1\xb9\xae)",
+    "\xe1\xb9\xb1" => "(\xe1\xb9\xb1|\xe1\xb9\xb0)",
+    "\xe1\xb9\xb3" => "(\xe1\xb9\xb3|\xe1\xb9\xb2)",
+    "\xe1\xb9\xb5" => "(\xe1\xb9\xb5|\xe1\xb9\xb4)",
+    "\xe1\xb9\xb7" => "(\xe1\xb9\xb7|\xe1\xb9\xb6)",
+    "\xe1\xb9\xb9" => "(\xe1\xb9\xb9|\xe1\xb9\xb8)",
+    "\xe1\xb9\xbb" => "(\xe1\xb9\xbb|\xe1\xb9\xba)",
+    "\xe1\xb9\xbd" => "(\xe1\xb9\xbd|\xe1\xb9\xbc)",
+    "\xe1\xb9\xbf" => "(\xe1\xb9\xbf|\xe1\xb9\xbe)",
+    "\xe1\xba\x81" => "(\xe1\xba\x81|\xe1\xba\x80)",
+    "\xe1\xba\x83" => "(\xe1\xba\x83|\xe1\xba\x82)",
+    "\xe1\xba\x85" => "(\xe1\xba\x85|\xe1\xba\x84)",
+    "\xe1\xba\x87" => "(\xe1\xba\x87|\xe1\xba\x86)",
+    "\xe1\xba\x89" => "(\xe1\xba\x89|\xe1\xba\x88)",
+    "\xe1\xba\x8b" => "(\xe1\xba\x8b|\xe1\xba\x8a)",
+    "\xe1\xba\x8d" => "(\xe1\xba\x8d|\xe1\xba\x8c)",
+    "\xe1\xba\x8f" => "(\xe1\xba\x8f|\xe1\xba\x8e)",
+    "\xe1\xba\x91" => "(\xe1\xba\x91|\xe1\xba\x90)",
+    "\xe1\xba\x93" => "(\xe1\xba\x93|\xe1\xba\x92)",
+    "\xe1\xba\x95" => "(\xe1\xba\x95|\xe1\xba\x94)",
+    "\xe1\xba\x9b" => "(\xe1\xba\x9b|\xe1\xb9\xa0)",
+    "\xe1\xba\xa1" => "(\xe1\xba\xa1|\xe1\xba\xa0)",
+    "\xe1\xba\xa3" => "(\xe1\xba\xa3|\xe1\xba\xa2)",
+    "\xe1\xba\xa5" => "(\xe1\xba\xa5|\xe1\xba\xa4)",
+    "\xe1\xba\xa7" => "(\xe1\xba\xa7|\xe1\xba\xa6)",
+    "\xe1\xba\xa9" => "(\xe1\xba\xa9|\xe1\xba\xa8)",
+    "\xe1\xba\xab" => "(\xe1\xba\xab|\xe1\xba\xaa)",
+    "\xe1\xba\xad" => "(\xe1\xba\xad|\xe1\xba\xac)",
+    "\xe1\xba\xaf" => "(\xe1\xba\xaf|\xe1\xba\xae)",
+    "\xe1\xba\xb1" => "(\xe1\xba\xb1|\xe1\xba\xb0)",
+    "\xe1\xba\xb3" => "(\xe1\xba\xb3|\xe1\xba\xb2)",
+    "\xe1\xba\xb5" => "(\xe1\xba\xb5|\xe1\xba\xb4)",
+    "\xe1\xba\xb7" => "(\xe1\xba\xb7|\xe1\xba\xb6)",
+    "\xe1\xba\xb9" => "(\xe1\xba\xb9|\xe1\xba\xb8)",
+    "\xe1\xba\xbb" => "(\xe1\xba\xbb|\xe1\xba\xba)",
+    "\xe1\xba\xbd" => "(\xe1\xba\xbd|\xe1\xba\xbc)",
+    "\xe1\xba\xbf" => "(\xe1\xba\xbf|\xe1\xba\xbe)",
+    "\xe1\xbb\x81" => "(\xe1\xbb\x81|\xe1\xbb\x80)",
+    "\xe1\xbb\x83" => "(\xe1\xbb\x83|\xe1\xbb\x82)",
+    "\xe1\xbb\x85" => "(\xe1\xbb\x85|\xe1\xbb\x84)",
+    "\xe1\xbb\x87" => "(\xe1\xbb\x87|\xe1\xbb\x86)",
+    "\xe1\xbb\x89" => "(\xe1\xbb\x89|\xe1\xbb\x88)",
+    "\xe1\xbb\x8b" => "(\xe1\xbb\x8b|\xe1\xbb\x8a)",
+    "\xe1\xbb\x8d" => "(\xe1\xbb\x8d|\xe1\xbb\x8c)",
+    "\xe1\xbb\x8f" => "(\xe1\xbb\x8f|\xe1\xbb\x8e)",
+    "\xe1\xbb\x91" => "(\xe1\xbb\x91|\xe1\xbb\x90)",
+    "\xe1\xbb\x93" => "(\xe1\xbb\x93|\xe1\xbb\x92)",
+    "\xe1\xbb\x95" => "(\xe1\xbb\x95|\xe1\xbb\x94)",
+    "\xe1\xbb\x97" => "(\xe1\xbb\x97|\xe1\xbb\x96)",
+    "\xe1\xbb\x99" => "(\xe1\xbb\x99|\xe1\xbb\x98)",
+    "\xe1\xbb\x9b" => "(\xe1\xbb\x9b|\xe1\xbb\x9a)",
+    "\xe1\xbb\x9d" => "(\xe1\xbb\x9d|\xe1\xbb\x9c)",
+    "\xe1\xbb\x9f" => "(\xe1\xbb\x9f|\xe1\xbb\x9e)",
+    "\xe1\xbb\xa1" => "(\xe1\xbb\xa1|\xe1\xbb\xa0)",
+    "\xe1\xbb\xa3" => "(\xe1\xbb\xa3|\xe1\xbb\xa2)",
+    "\xe1\xbb\xa5" => "(\xe1\xbb\xa5|\xe1\xbb\xa4)",
+    "\xe1\xbb\xa7" => "(\xe1\xbb\xa7|\xe1\xbb\xa6)",
+    "\xe1\xbb\xa9" => "(\xe1\xbb\xa9|\xe1\xbb\xa8)",
+    "\xe1\xbb\xab" => "(\xe1\xbb\xab|\xe1\xbb\xaa)",
+    "\xe1\xbb\xad" => "(\xe1\xbb\xad|\xe1\xbb\xac)",
+    "\xe1\xbb\xaf" => "(\xe1\xbb\xaf|\xe1\xbb\xae)",
+    "\xe1\xbb\xb1" => "(\xe1\xbb\xb1|\xe1\xbb\xb0)",
+    "\xe1\xbb\xb3" => "(\xe1\xbb\xb3|\xe1\xbb\xb2)",
+    "\xe1\xbb\xb5" => "(\xe1\xbb\xb5|\xe1\xbb\xb4)",
+    "\xe1\xbb\xb7" => "(\xe1\xbb\xb7|\xe1\xbb\xb6)",
+    "\xe1\xbb\xb9" => "(\xe1\xbb\xb9|\xe1\xbb\xb8)",
+    "\xe1\xbc\x80" => "(\xe1\xbc\x80|\xe1\xbc\x88)",
+    "\xe1\xbc\x81" => "(\xe1\xbc\x81|\xe1\xbc\x89)",
+    "\xe1\xbc\x82" => "(\xe1\xbc\x82|\xe1\xbc\x8a)",
+    "\xe1\xbc\x83" => "(\xe1\xbc\x83|\xe1\xbc\x8b)",
+    "\xe1\xbc\x84" => "(\xe1\xbc\x84|\xe1\xbc\x8c)",
+    "\xe1\xbc\x85" => "(\xe1\xbc\x85|\xe1\xbc\x8d)",
+    "\xe1\xbc\x86" => "(\xe1\xbc\x86|\xe1\xbc\x8e)",
+    "\xe1\xbc\x87" => "(\xe1\xbc\x87|\xe1\xbc\x8f)",
+    "\xe1\xbc\x90" => "(\xe1\xbc\x90|\xe1\xbc\x98)",
+    "\xe1\xbc\x91" => "(\xe1\xbc\x91|\xe1\xbc\x99)",
+    "\xe1\xbc\x92" => "(\xe1\xbc\x92|\xe1\xbc\x9a)",
+    "\xe1\xbc\x93" => "(\xe1\xbc\x93|\xe1\xbc\x9b)",
+    "\xe1\xbc\x94" => "(\xe1\xbc\x94|\xe1\xbc\x9c)",
+    "\xe1\xbc\x95" => "(\xe1\xbc\x95|\xe1\xbc\x9d)",
+    "\xe1\xbc\xa0" => "(\xe1\xbc\xa0|\xe1\xbc\xa8)",
+    "\xe1\xbc\xa1" => "(\xe1\xbc\xa1|\xe1\xbc\xa9)",
+    "\xe1\xbc\xa2" => "(\xe1\xbc\xa2|\xe1\xbc\xaa)",
+    "\xe1\xbc\xa3" => "(\xe1\xbc\xa3|\xe1\xbc\xab)",
+    "\xe1\xbc\xa4" => "(\xe1\xbc\xa4|\xe1\xbc\xac)",
+    "\xe1\xbc\xa5" => "(\xe1\xbc\xa5|\xe1\xbc\xad)",
+    "\xe1\xbc\xa6" => "(\xe1\xbc\xa6|\xe1\xbc\xae)",
+    "\xe1\xbc\xa7" => "(\xe1\xbc\xa7|\xe1\xbc\xaf)",
+    "\xe1\xbc\xb0" => "(\xe1\xbc\xb0|\xe1\xbc\xb8)",
+    "\xe1\xbc\xb1" => "(\xe1\xbc\xb1|\xe1\xbc\xb9)",
+    "\xe1\xbc\xb2" => "(\xe1\xbc\xb2|\xe1\xbc\xba)",
+    "\xe1\xbc\xb3" => "(\xe1\xbc\xb3|\xe1\xbc\xbb)",
+    "\xe1\xbc\xb4" => "(\xe1\xbc\xb4|\xe1\xbc\xbc)",
+    "\xe1\xbc\xb5" => "(\xe1\xbc\xb5|\xe1\xbc\xbd)",
+    "\xe1\xbc\xb6" => "(\xe1\xbc\xb6|\xe1\xbc\xbe)",
+    "\xe1\xbc\xb7" => "(\xe1\xbc\xb7|\xe1\xbc\xbf)",
+    "\xe1\xbd\x80" => "(\xe1\xbd\x80|\xe1\xbd\x88)",
+    "\xe1\xbd\x81" => "(\xe1\xbd\x81|\xe1\xbd\x89)",
+    "\xe1\xbd\x82" => "(\xe1\xbd\x82|\xe1\xbd\x8a)",
+    "\xe1\xbd\x83" => "(\xe1\xbd\x83|\xe1\xbd\x8b)",
+    "\xe1\xbd\x84" => "(\xe1\xbd\x84|\xe1\xbd\x8c)",
+    "\xe1\xbd\x85" => "(\xe1\xbd\x85|\xe1\xbd\x8d)",
+    "\xe1\xbd\x91" => "(\xe1\xbd\x91|\xe1\xbd\x99)",
+    "\xe1\xbd\x93" => "(\xe1\xbd\x93|\xe1\xbd\x9b)",
+    "\xe1\xbd\x95" => "(\xe1\xbd\x95|\xe1\xbd\x9d)",
+    "\xe1\xbd\x97" => "(\xe1\xbd\x97|\xe1\xbd\x9f)",
+    "\xe1\xbd\xa0" => "(\xe1\xbd\xa0|\xe1\xbd\xa8)",
+    "\xe1\xbd\xa1" => "(\xe1\xbd\xa1|\xe1\xbd\xa9)",
+    "\xe1\xbd\xa2" => "(\xe1\xbd\xa2|\xe1\xbd\xaa)",
+    "\xe1\xbd\xa3" => "(\xe1\xbd\xa3|\xe1\xbd\xab)",
+    "\xe1\xbd\xa4" => "(\xe1\xbd\xa4|\xe1\xbd\xac)",
+    "\xe1\xbd\xa5" => "(\xe1\xbd\xa5|\xe1\xbd\xad)",
+    "\xe1\xbd\xa6" => "(\xe1\xbd\xa6|\xe1\xbd\xae)",
+    "\xe1\xbd\xa7" => "(\xe1\xbd\xa7|\xe1\xbd\xaf)",
+    "\xe1\xbd\xb0" => "(\xe1\xbd\xb0|\xe1\xbe\xba)",
+    "\xe1\xbd\xb1" => "(\xe1\xbd\xb1|\xe1\xbe\xbb)",
+    "\xe1\xbd\xb2" => "(\xe1\xbd\xb2|\xe1\xbf\x88)",
+    "\xe1\xbd\xb3" => "(\xe1\xbd\xb3|\xe1\xbf\x89)",
+    "\xe1\xbd\xb4" => "(\xe1\xbd\xb4|\xe1\xbf\x8a)",
+    "\xe1\xbd\xb5" => "(\xe1\xbd\xb5|\xe1\xbf\x8b)",
+    "\xe1\xbd\xb6" => "(\xe1\xbd\xb6|\xe1\xbf\x9a)",
+    "\xe1\xbd\xb7" => "(\xe1\xbd\xb7|\xe1\xbf\x9b)",
+    "\xe1\xbd\xb8" => "(\xe1\xbd\xb8|\xe1\xbf\xb8)",
+    "\xe1\xbd\xb9" => "(\xe1\xbd\xb9|\xe1\xbf\xb9)",
+    "\xe1\xbd\xba" => "(\xe1\xbd\xba|\xe1\xbf\xaa)",
+    "\xe1\xbd\xbb" => "(\xe1\xbd\xbb|\xe1\xbf\xab)",
+    "\xe1\xbd\xbc" => "(\xe1\xbd\xbc|\xe1\xbf\xba)",
+    "\xe1\xbd\xbd" => "(\xe1\xbd\xbd|\xe1\xbf\xbb)",
+    "\xe1\xbe\x80" => "(\xe1\xbe\x80|\xe1\xbe\x88)",
+    "\xe1\xbe\x81" => "(\xe1\xbe\x81|\xe1\xbe\x89)",
+    "\xe1\xbe\x82" => "(\xe1\xbe\x82|\xe1\xbe\x8a)",
+    "\xe1\xbe\x83" => "(\xe1\xbe\x83|\xe1\xbe\x8b)",
+    "\xe1\xbe\x84" => "(\xe1\xbe\x84|\xe1\xbe\x8c)",
+    "\xe1\xbe\x85" => "(\xe1\xbe\x85|\xe1\xbe\x8d)",
+    "\xe1\xbe\x86" => "(\xe1\xbe\x86|\xe1\xbe\x8e)",
+    "\xe1\xbe\x87" => "(\xe1\xbe\x87|\xe1\xbe\x8f)",
+    "\xe1\xbe\x90" => "(\xe1\xbe\x90|\xe1\xbe\x98)",
+    "\xe1\xbe\x91" => "(\xe1\xbe\x91|\xe1\xbe\x99)",
+    "\xe1\xbe\x92" => "(\xe1\xbe\x92|\xe1\xbe\x9a)",
+    "\xe1\xbe\x93" => "(\xe1\xbe\x93|\xe1\xbe\x9b)",
+    "\xe1\xbe\x94" => "(\xe1\xbe\x94|\xe1\xbe\x9c)",
+    "\xe1\xbe\x95" => "(\xe1\xbe\x95|\xe1\xbe\x9d)",
+    "\xe1\xbe\x96" => "(\xe1\xbe\x96|\xe1\xbe\x9e)",
+    "\xe1\xbe\x97" => "(\xe1\xbe\x97|\xe1\xbe\x9f)",
+    "\xe1\xbe\xa0" => "(\xe1\xbe\xa0|\xe1\xbe\xa8)",
+    "\xe1\xbe\xa1" => "(\xe1\xbe\xa1|\xe1\xbe\xa9)",
+    "\xe1\xbe\xa2" => "(\xe1\xbe\xa2|\xe1\xbe\xaa)",
+    "\xe1\xbe\xa3" => "(\xe1\xbe\xa3|\xe1\xbe\xab)",
+    "\xe1\xbe\xa4" => "(\xe1\xbe\xa4|\xe1\xbe\xac)",
+    "\xe1\xbe\xa5" => "(\xe1\xbe\xa5|\xe1\xbe\xad)",
+    "\xe1\xbe\xa6" => "(\xe1\xbe\xa6|\xe1\xbe\xae)",
+    "\xe1\xbe\xa7" => "(\xe1\xbe\xa7|\xe1\xbe\xaf)",
+    "\xe1\xbe\xb0" => "(\xe1\xbe\xb0|\xe1\xbe\xb8)",
+    "\xe1\xbe\xb1" => "(\xe1\xbe\xb1|\xe1\xbe\xb9)",
+    "\xe1\xbe\xb3" => "(\xe1\xbe\xb3|\xe1\xbe\xbc)",
+    "\xe1\xbe\xbe" => "(\xe1\xbe\xbe|\xce\x99)",
+    "\xe1\xbf\x83" => "(\xe1\xbf\x83|\xe1\xbf\x8c)",
+    "\xe1\xbf\x90" => "(\xe1\xbf\x90|\xe1\xbf\x98)",
+    "\xe1\xbf\x91" => "(\xe1\xbf\x91|\xe1\xbf\x99)",
+    "\xe1\xbf\xa0" => "(\xe1\xbf\xa0|\xe1\xbf\xa8)",
+    "\xe1\xbf\xa1" => "(\xe1\xbf\xa1|\xe1\xbf\xa9)",
+    "\xe1\xbf\xa5" => "(\xe1\xbf\xa5|\xe1\xbf\xac)",
+    "\xe1\xbf\xb3" => "(\xe1\xbf\xb3|\xe1\xbf\xbc)",
+    "\xe2\x85\xb0" => "(\xe2\x85\xb0|\xe2\x85\xa0)",
+    "\xe2\x85\xb1" => "(\xe2\x85\xb1|\xe2\x85\xa1)",
+    "\xe2\x85\xb2" => "(\xe2\x85\xb2|\xe2\x85\xa2)",
+    "\xe2\x85\xb3" => "(\xe2\x85\xb3|\xe2\x85\xa3)",
+    "\xe2\x85\xb4" => "(\xe2\x85\xb4|\xe2\x85\xa4)",
+    "\xe2\x85\xb5" => "(\xe2\x85\xb5|\xe2\x85\xa5)",
+    "\xe2\x85\xb6" => "(\xe2\x85\xb6|\xe2\x85\xa6)",
+    "\xe2\x85\xb7" => "(\xe2\x85\xb7|\xe2\x85\xa7)",
+    "\xe2\x85\xb8" => "(\xe2\x85\xb8|\xe2\x85\xa8)",
+    "\xe2\x85\xb9" => "(\xe2\x85\xb9|\xe2\x85\xa9)",
+    "\xe2\x85\xba" => "(\xe2\x85\xba|\xe2\x85\xaa)",
+    "\xe2\x85\xbb" => "(\xe2\x85\xbb|\xe2\x85\xab)",
+    "\xe2\x85\xbc" => "(\xe2\x85\xbc|\xe2\x85\xac)",
+    "\xe2\x85\xbd" => "(\xe2\x85\xbd|\xe2\x85\xad)",
+    "\xe2\x85\xbe" => "(\xe2\x85\xbe|\xe2\x85\xae)",
+    "\xe2\x85\xbf" => "(\xe2\x85\xbf|\xe2\x85\xaf)",
+    "\xe2\x93\x90" => "(\xe2\x93\x90|\xe2\x92\xb6)",
+    "\xe2\x93\x91" => "(\xe2\x93\x91|\xe2\x92\xb7)",
+    "\xe2\x93\x92" => "(\xe2\x93\x92|\xe2\x92\xb8)",
+    "\xe2\x93\x93" => "(\xe2\x93\x93|\xe2\x92\xb9)",
+    "\xe2\x93\x94" => "(\xe2\x93\x94|\xe2\x92\xba)",
+    "\xe2\x93\x95" => "(\xe2\x93\x95|\xe2\x92\xbb)",
+    "\xe2\x93\x96" => "(\xe2\x93\x96|\xe2\x92\xbc)",
+    "\xe2\x93\x97" => "(\xe2\x93\x97|\xe2\x92\xbd)",
+    "\xe2\x93\x98" => "(\xe2\x93\x98|\xe2\x92\xbe)",
+    "\xe2\x93\x99" => "(\xe2\x93\x99|\xe2\x92\xbf)",
+    "\xe2\x93\x9a" => "(\xe2\x93\x9a|\xe2\x93\x80)",
+    "\xe2\x93\x9b" => "(\xe2\x93\x9b|\xe2\x93\x81)",
+    "\xe2\x93\x9c" => "(\xe2\x93\x9c|\xe2\x93\x82)",
+    "\xe2\x93\x9d" => "(\xe2\x93\x9d|\xe2\x93\x83)",
+    "\xe2\x93\x9e" => "(\xe2\x93\x9e|\xe2\x93\x84)",
+    "\xe2\x93\x9f" => "(\xe2\x93\x9f|\xe2\x93\x85)",
+    "\xe2\x93\xa0" => "(\xe2\x93\xa0|\xe2\x93\x86)",
+    "\xe2\x93\xa1" => "(\xe2\x93\xa1|\xe2\x93\x87)",
+    "\xe2\x93\xa2" => "(\xe2\x93\xa2|\xe2\x93\x88)",
+    "\xe2\x93\xa3" => "(\xe2\x93\xa3|\xe2\x93\x89)",
+    "\xe2\x93\xa4" => "(\xe2\x93\xa4|\xe2\x93\x8a)",
+    "\xe2\x93\xa5" => "(\xe2\x93\xa5|\xe2\x93\x8b)",
+    "\xe2\x93\xa6" => "(\xe2\x93\xa6|\xe2\x93\x8c)",
+    "\xe2\x93\xa7" => "(\xe2\x93\xa7|\xe2\x93\x8d)",
+    "\xe2\x93\xa8" => "(\xe2\x93\xa8|\xe2\x93\x8e)",
+    "\xe2\x93\xa9" => "(\xe2\x93\xa9|\xe2\x93\x8f)",
+    "\xef\xbd\x81" => "(\xef\xbd\x81|\xef\xbc\xa1)",
+    "\xef\xbd\x82" => "(\xef\xbd\x82|\xef\xbc\xa2)",
+    "\xef\xbd\x83" => "(\xef\xbd\x83|\xef\xbc\xa3)",
+    "\xef\xbd\x84" => "(\xef\xbd\x84|\xef\xbc\xa4)",
+    "\xef\xbd\x85" => "(\xef\xbd\x85|\xef\xbc\xa5)",
+    "\xef\xbd\x86" => "(\xef\xbd\x86|\xef\xbc\xa6)",
+    "\xef\xbd\x87" => "(\xef\xbd\x87|\xef\xbc\xa7)",
+    "\xef\xbd\x88" => "(\xef\xbd\x88|\xef\xbc\xa8)",
+    "\xef\xbd\x89" => "(\xef\xbd\x89|\xef\xbc\xa9)",
+    "\xef\xbd\x8a" => "(\xef\xbd\x8a|\xef\xbc\xaa)",
+    "\xef\xbd\x8b" => "(\xef\xbd\x8b|\xef\xbc\xab)",
+    "\xef\xbd\x8c" => "(\xef\xbd\x8c|\xef\xbc\xac)",
+    "\xef\xbd\x8d" => "(\xef\xbd\x8d|\xef\xbc\xad)",
+    "\xef\xbd\x8e" => "(\xef\xbd\x8e|\xef\xbc\xae)",
+    "\xef\xbd\x8f" => "(\xef\xbd\x8f|\xef\xbc\xaf)",
+    "\xef\xbd\x90" => "(\xef\xbd\x90|\xef\xbc\xb0)",
+    "\xef\xbd\x91" => "(\xef\xbd\x91|\xef\xbc\xb1)",
+    "\xef\xbd\x92" => "(\xef\xbd\x92|\xef\xbc\xb2)",
+    "\xef\xbd\x93" => "(\xef\xbd\x93|\xef\xbc\xb3)",
+    "\xef\xbd\x94" => "(\xef\xbd\x94|\xef\xbc\xb4)",
+    "\xef\xbd\x95" => "(\xef\xbd\x95|\xef\xbc\xb5)",
+    "\xef\xbd\x96" => "(\xef\xbd\x96|\xef\xbc\xb6)",
+    "\xef\xbd\x97" => "(\xef\xbd\x97|\xef\xbc\xb7)",
+    "\xef\xbd\x98" => "(\xef\xbd\x98|\xef\xbc\xb8)",
+    "\xef\xbd\x99" => "(\xef\xbd\x99|\xef\xbc\xb9)",
+    "\xef\xbd\x9a" => "(\xef\xbd\x9a|\xef\xbc\xba)",
+    "\xf0\x90\x90\xa8" => "(\xf0\x90\x90\xa8|\xf0\x90\x90\x80)",
+    "\xf0\x90\x90\xa9" => "(\xf0\x90\x90\xa9|\xf0\x90\x90\x81)",
+    "\xf0\x90\x90\xaa" => "(\xf0\x90\x90\xaa|\xf0\x90\x90\x82)",
+    "\xf0\x90\x90\xab" => "(\xf0\x90\x90\xab|\xf0\x90\x90\x83)",
+    "\xf0\x90\x90\xac" => "(\xf0\x90\x90\xac|\xf0\x90\x90\x84)",
+    "\xf0\x90\x90\xad" => "(\xf0\x90\x90\xad|\xf0\x90\x90\x85)",
+    "\xf0\x90\x90\xae" => "(\xf0\x90\x90\xae|\xf0\x90\x90\x86)",
+    "\xf0\x90\x90\xaf" => "(\xf0\x90\x90\xaf|\xf0\x90\x90\x87)",
+    "\xf0\x90\x90\xb0" => "(\xf0\x90\x90\xb0|\xf0\x90\x90\x88)",
+    "\xf0\x90\x90\xb1" => "(\xf0\x90\x90\xb1|\xf0\x90\x90\x89)",
+    "\xf0\x90\x90\xb2" => "(\xf0\x90\x90\xb2|\xf0\x90\x90\x8a)",
+    "\xf0\x90\x90\xb3" => "(\xf0\x90\x90\xb3|\xf0\x90\x90\x8b)",
+    "\xf0\x90\x90\xb4" => "(\xf0\x90\x90\xb4|\xf0\x90\x90\x8c)",
+    "\xf0\x90\x90\xb5" => "(\xf0\x90\x90\xb5|\xf0\x90\x90\x8d)",
+    "\xf0\x90\x90\xb6" => "(\xf0\x90\x90\xb6|\xf0\x90\x90\x8e)",
+    "\xf0\x90\x90\xb7" => "(\xf0\x90\x90\xb7|\xf0\x90\x90\x8f)",
+    "\xf0\x90\x90\xb8" => "(\xf0\x90\x90\xb8|\xf0\x90\x90\x90)",
+    "\xf0\x90\x90\xb9" => "(\xf0\x90\x90\xb9|\xf0\x90\x90\x91)",
+    "\xf0\x90\x90\xba" => "(\xf0\x90\x90\xba|\xf0\x90\x90\x92)",
+    "\xf0\x90\x90\xbb" => "(\xf0\x90\x90\xbb|\xf0\x90\x90\x93)",
+    "\xf0\x90\x90\xbc" => "(\xf0\x90\x90\xbc|\xf0\x90\x90\x94)",
+    "\xf0\x90\x90\xbd" => "(\xf0\x90\x90\xbd|\xf0\x90\x90\x95)",
+    "\xf0\x90\x90\xbe" => "(\xf0\x90\x90\xbe|\xf0\x90\x90\x96)",
+    "\xf0\x90\x90\xbf" => "(\xf0\x90\x90\xbf|\xf0\x90\x90\x97)",
+    "\xf0\x90\x91\x80" => "(\xf0\x90\x91\x80|\xf0\x90\x90\x98)",
+    "\xf0\x90\x91\x81" => "(\xf0\x90\x91\x81|\xf0\x90\x90\x99)",
+    "\xf0\x90\x91\x82" => "(\xf0\x90\x91\x82|\xf0\x90\x90\x9a)",
+    "\xf0\x90\x91\x83" => "(\xf0\x90\x91\x83|\xf0\x90\x90\x9b)",
+    "\xf0\x90\x91\x84" => "(\xf0\x90\x91\x84|\xf0\x90\x90\x9c)",
+    "\xf0\x90\x91\x85" => "(\xf0\x90\x91\x85|\xf0\x90\x90\x9d)",
+    "\xf0\x90\x91\x86" => "(\xf0\x90\x91\x86|\xf0\x90\x90\x9e)",
+    "\xf0\x90\x91\x87" => "(\xf0\x90\x91\x87|\xf0\x90\x90\x9f)",
+    "\xf0\x90\x91\x88" => "(\xf0\x90\x91\x88|\xf0\x90\x90\xa0)",
+    "\xf0\x90\x91\x89" => "(\xf0\x90\x91\x89|\xf0\x90\x90\xa1)",
+    "\xf0\x90\x91\x8a" => "(\xf0\x90\x91\x8a|\xf0\x90\x90\xa2)",
+    "\xf0\x90\x91\x8b" => "(\xf0\x90\x91\x8b|\xf0\x90\x90\xa3)",
+    "\xf0\x90\x91\x8c" => "(\xf0\x90\x91\x8c|\xf0\x90\x90\xa4)",
+    "\xf0\x90\x91\x8d" => "(\xf0\x90\x91\x8d|\xf0\x90\x90\xa5)",
+    "\xc3\x80" => "(\xc3\x80|\xc3\xa0)",
+    "\xc3\x81" => "(\xc3\x81|\xc3\xa1)",
+    "\xc3\x82" => "(\xc3\x82|\xc3\xa2)",
+    "\xc3\x83" => "(\xc3\x83|\xc3\xa3)",
+    "\xc3\x84" => "(\xc3\x84|\xc3\xa4)",
+    "\xc3\x85" => "(\xc3\x85|\xc3\xa5)",
+    "\xc3\x86" => "(\xc3\x86|\xc3\xa6)",
+    "\xc3\x87" => "(\xc3\x87|\xc3\xa7)",
+    "\xc3\x88" => "(\xc3\x88|\xc3\xa8)",
+    "\xc3\x89" => "(\xc3\x89|\xc3\xa9)",
+    "\xc3\x8a" => "(\xc3\x8a|\xc3\xaa)",
+    "\xc3\x8b" => "(\xc3\x8b|\xc3\xab)",
+    "\xc3\x8c" => "(\xc3\x8c|\xc3\xac)",
+    "\xc3\x8d" => "(\xc3\x8d|\xc3\xad)",
+    "\xc3\x8e" => "(\xc3\x8e|\xc3\xae)",
+    "\xc3\x8f" => "(\xc3\x8f|\xc3\xaf)",
+    "\xc3\x90" => "(\xc3\x90|\xc3\xb0)",
+    "\xc3\x91" => "(\xc3\x91|\xc3\xb1)",
+    "\xc3\x92" => "(\xc3\x92|\xc3\xb2)",
+    "\xc3\x93" => "(\xc3\x93|\xc3\xb3)",
+    "\xc3\x94" => "(\xc3\x94|\xc3\xb4)",
+    "\xc3\x95" => "(\xc3\x95|\xc3\xb5)",
+    "\xc3\x96" => "(\xc3\x96|\xc3\xb6)",
+    "\xc3\x98" => "(\xc3\x98|\xc3\xb8)",
+    "\xc3\x99" => "(\xc3\x99|\xc3\xb9)",
+    "\xc3\x9a" => "(\xc3\x9a|\xc3\xba)",
+    "\xc3\x9b" => "(\xc3\x9b|\xc3\xbb)",
+    "\xc3\x9c" => "(\xc3\x9c|\xc3\xbc)",
+    "\xc3\x9d" => "(\xc3\x9d|\xc3\xbd)",
+    "\xc3\x9e" => "(\xc3\x9e|\xc3\xbe)",
+    "\xc4\x80" => "(\xc4\x80|\xc4\x81)",
+    "\xc4\x82" => "(\xc4\x82|\xc4\x83)",
+    "\xc4\x84" => "(\xc4\x84|\xc4\x85)",
+    "\xc4\x86" => "(\xc4\x86|\xc4\x87)",
+    "\xc4\x88" => "(\xc4\x88|\xc4\x89)",
+    "\xc4\x8a" => "(\xc4\x8a|\xc4\x8b)",
+    "\xc4\x8c" => "(\xc4\x8c|\xc4\x8d)",
+    "\xc4\x8e" => "(\xc4\x8e|\xc4\x8f)",
+    "\xc4\x90" => "(\xc4\x90|\xc4\x91)",
+    "\xc4\x92" => "(\xc4\x92|\xc4\x93)",
+    "\xc4\x94" => "(\xc4\x94|\xc4\x95)",
+    "\xc4\x96" => "(\xc4\x96|\xc4\x97)",
+    "\xc4\x98" => "(\xc4\x98|\xc4\x99)",
+    "\xc4\x9a" => "(\xc4\x9a|\xc4\x9b)",
+    "\xc4\x9c" => "(\xc4\x9c|\xc4\x9d)",
+    "\xc4\x9e" => "(\xc4\x9e|\xc4\x9f)",
+    "\xc4\xa0" => "(\xc4\xa0|\xc4\xa1)",
+    "\xc4\xa2" => "(\xc4\xa2|\xc4\xa3)",
+    "\xc4\xa4" => "(\xc4\xa4|\xc4\xa5)",
+    "\xc4\xa6" => "(\xc4\xa6|\xc4\xa7)",
+    "\xc4\xa8" => "(\xc4\xa8|\xc4\xa9)",
+    "\xc4\xaa" => "(\xc4\xaa|\xc4\xab)",
+    "\xc4\xac" => "(\xc4\xac|\xc4\xad)",
+    "\xc4\xae" => "(\xc4\xae|\xc4\xaf)",
+    "\xc4\xb0" => "(\xc4\xb0|i)",
+    "\xc4\xb2" => "(\xc4\xb2|\xc4\xb3)",
+    "\xc4\xb4" => "(\xc4\xb4|\xc4\xb5)",
+    "\xc4\xb6" => "(\xc4\xb6|\xc4\xb7)",
+    "\xc4\xb9" => "(\xc4\xb9|\xc4\xba)",
+    "\xc4\xbb" => "(\xc4\xbb|\xc4\xbc)",
+    "\xc4\xbd" => "(\xc4\xbd|\xc4\xbe)",
+    "\xc4\xbf" => "(\xc4\xbf|\xc5\x80)",
+    "\xc5\x81" => "(\xc5\x81|\xc5\x82)",
+    "\xc5\x83" => "(\xc5\x83|\xc5\x84)",
+    "\xc5\x85" => "(\xc5\x85|\xc5\x86)",
+    "\xc5\x87" => "(\xc5\x87|\xc5\x88)",
+    "\xc5\x8a" => "(\xc5\x8a|\xc5\x8b)",
+    "\xc5\x8c" => "(\xc5\x8c|\xc5\x8d)",
+    "\xc5\x8e" => "(\xc5\x8e|\xc5\x8f)",
+    "\xc5\x90" => "(\xc5\x90|\xc5\x91)",
+    "\xc5\x92" => "(\xc5\x92|\xc5\x93)",
+    "\xc5\x94" => "(\xc5\x94|\xc5\x95)",
+    "\xc5\x96" => "(\xc5\x96|\xc5\x97)",
+    "\xc5\x98" => "(\xc5\x98|\xc5\x99)",
+    "\xc5\x9a" => "(\xc5\x9a|\xc5\x9b)",
+    "\xc5\x9c" => "(\xc5\x9c|\xc5\x9d)",
+    "\xc5\x9e" => "(\xc5\x9e|\xc5\x9f)",
+    "\xc5\xa0" => "(\xc5\xa0|\xc5\xa1)",
+    "\xc5\xa2" => "(\xc5\xa2|\xc5\xa3)",
+    "\xc5\xa4" => "(\xc5\xa4|\xc5\xa5)",
+    "\xc5\xa6" => "(\xc5\xa6|\xc5\xa7)",
+    "\xc5\xa8" => "(\xc5\xa8|\xc5\xa9)",
+    "\xc5\xaa" => "(\xc5\xaa|\xc5\xab)",
+    "\xc5\xac" => "(\xc5\xac|\xc5\xad)",
+    "\xc5\xae" => "(\xc5\xae|\xc5\xaf)",
+    "\xc5\xb0" => "(\xc5\xb0|\xc5\xb1)",
+    "\xc5\xb2" => "(\xc5\xb2|\xc5\xb3)",
+    "\xc5\xb4" => "(\xc5\xb4|\xc5\xb5)",
+    "\xc5\xb6" => "(\xc5\xb6|\xc5\xb7)",
+    "\xc5\xb8" => "(\xc5\xb8|\xc3\xbf)",
+    "\xc5\xb9" => "(\xc5\xb9|\xc5\xba)",
+    "\xc5\xbb" => "(\xc5\xbb|\xc5\xbc)",
+    "\xc5\xbd" => "(\xc5\xbd|\xc5\xbe)",
+    "\xc6\x81" => "(\xc6\x81|\xc9\x93)",
+    "\xc6\x82" => "(\xc6\x82|\xc6\x83)",
+    "\xc6\x84" => "(\xc6\x84|\xc6\x85)",
+    "\xc6\x86" => "(\xc6\x86|\xc9\x94)",
+    "\xc6\x87" => "(\xc6\x87|\xc6\x88)",
+    "\xc6\x89" => "(\xc6\x89|\xc9\x96)",
+    "\xc6\x8a" => "(\xc6\x8a|\xc9\x97)",
+    "\xc6\x8b" => "(\xc6\x8b|\xc6\x8c)",
+    "\xc6\x8e" => "(\xc6\x8e|\xc7\x9d)",
+    "\xc6\x8f" => "(\xc6\x8f|\xc9\x99)",
+    "\xc6\x90" => "(\xc6\x90|\xc9\x9b)",
+    "\xc6\x91" => "(\xc6\x91|\xc6\x92)",
+    "\xc6\x93" => "(\xc6\x93|\xc9\xa0)",
+    "\xc6\x94" => "(\xc6\x94|\xc9\xa3)",
+    "\xc6\x96" => "(\xc6\x96|\xc9\xa9)",
+    "\xc6\x97" => "(\xc6\x97|\xc9\xa8)",
+    "\xc6\x98" => "(\xc6\x98|\xc6\x99)",
+    "\xc6\x9c" => "(\xc6\x9c|\xc9\xaf)",
+    "\xc6\x9d" => "(\xc6\x9d|\xc9\xb2)",
+    "\xc6\x9f" => "(\xc6\x9f|\xc9\xb5)",
+    "\xc6\xa0" => "(\xc6\xa0|\xc6\xa1)",
+    "\xc6\xa2" => "(\xc6\xa2|\xc6\xa3)",
+    "\xc6\xa4" => "(\xc6\xa4|\xc6\xa5)",
+    "\xc6\xa6" => "(\xc6\xa6|\xca\x80)",
+    "\xc6\xa7" => "(\xc6\xa7|\xc6\xa8)",
+    "\xc6\xa9" => "(\xc6\xa9|\xca\x83)",
+    "\xc6\xac" => "(\xc6\xac|\xc6\xad)",
+    "\xc6\xae" => "(\xc6\xae|\xca\x88)",
+    "\xc6\xaf" => "(\xc6\xaf|\xc6\xb0)",
+    "\xc6\xb1" => "(\xc6\xb1|\xca\x8a)",
+    "\xc6\xb2" => "(\xc6\xb2|\xca\x8b)",
+    "\xc6\xb3" => "(\xc6\xb3|\xc6\xb4)",
+    "\xc6\xb5" => "(\xc6\xb5|\xc6\xb6)",
+    "\xc6\xb7" => "(\xc6\xb7|\xca\x92)",
+    "\xc6\xb8" => "(\xc6\xb8|\xc6\xb9)",
+    "\xc6\xbc" => "(\xc6\xbc|\xc6\xbd)",
+    "\xc7\x84" => "(\xc7\x84|\xc7\x86|\xc7\x85)",
+    "\xc7\x85" => "(\xc7\x85|\xc7\x84|\xc7\x86)",
+    "\xc7\x87" => "(\xc7\x87|\xc7\x89|\xc7\x88)",
+    "\xc7\x88" => "(\xc7\x88|\xc7\x87|\xc7\x89)",
+    "\xc7\x8a" => "(\xc7\x8a|\xc7\x8c|\xc7\x8b)",
+    "\xc7\x8b" => "(\xc7\x8b|\xc7\x8a|\xc7\x8c)",
+    "\xc7\x8d" => "(\xc7\x8d|\xc7\x8e)",
+    "\xc7\x8f" => "(\xc7\x8f|\xc7\x90)",
+    "\xc7\x91" => "(\xc7\x91|\xc7\x92)",
+    "\xc7\x93" => "(\xc7\x93|\xc7\x94)",
+    "\xc7\x95" => "(\xc7\x95|\xc7\x96)",
+    "\xc7\x97" => "(\xc7\x97|\xc7\x98)",
+    "\xc7\x99" => "(\xc7\x99|\xc7\x9a)",
+    "\xc7\x9b" => "(\xc7\x9b|\xc7\x9c)",
+    "\xc7\x9e" => "(\xc7\x9e|\xc7\x9f)",
+    "\xc7\xa0" => "(\xc7\xa0|\xc7\xa1)",
+    "\xc7\xa2" => "(\xc7\xa2|\xc7\xa3)",
+    "\xc7\xa4" => "(\xc7\xa4|\xc7\xa5)",
+    "\xc7\xa6" => "(\xc7\xa6|\xc7\xa7)",
+    "\xc7\xa8" => "(\xc7\xa8|\xc7\xa9)",
+    "\xc7\xaa" => "(\xc7\xaa|\xc7\xab)",
+    "\xc7\xac" => "(\xc7\xac|\xc7\xad)",
+    "\xc7\xae" => "(\xc7\xae|\xc7\xaf)",
+    "\xc7\xb1" => "(\xc7\xb1|\xc7\xb3|\xc7\xb2)",
+    "\xc7\xb4" => "(\xc7\xb4|\xc7\xb5)",
+    "\xc7\xb6" => "(\xc7\xb6|\xc6\x95)",
+    "\xc7\xb7" => "(\xc7\xb7|\xc6\xbf)",
+    "\xc7\xb8" => "(\xc7\xb8|\xc7\xb9)",
+    "\xc7\xba" => "(\xc7\xba|\xc7\xbb)",
+    "\xc7\xbc" => "(\xc7\xbc|\xc7\xbd)",
+    "\xc7\xbe" => "(\xc7\xbe|\xc7\xbf)",
+    "\xc8\x80" => "(\xc8\x80|\xc8\x81)",
+    "\xc8\x82" => "(\xc8\x82|\xc8\x83)",
+    "\xc8\x84" => "(\xc8\x84|\xc8\x85)",
+    "\xc8\x86" => "(\xc8\x86|\xc8\x87)",
+    "\xc8\x88" => "(\xc8\x88|\xc8\x89)",
+    "\xc8\x8a" => "(\xc8\x8a|\xc8\x8b)",
+    "\xc8\x8c" => "(\xc8\x8c|\xc8\x8d)",
+    "\xc8\x8e" => "(\xc8\x8e|\xc8\x8f)",
+    "\xc8\x90" => "(\xc8\x90|\xc8\x91)",
+    "\xc8\x92" => "(\xc8\x92|\xc8\x93)",
+    "\xc8\x94" => "(\xc8\x94|\xc8\x95)",
+    "\xc8\x96" => "(\xc8\x96|\xc8\x97)",
+    "\xc8\x98" => "(\xc8\x98|\xc8\x99)",
+    "\xc8\x9a" => "(\xc8\x9a|\xc8\x9b)",
+    "\xc8\x9c" => "(\xc8\x9c|\xc8\x9d)",
+    "\xc8\x9e" => "(\xc8\x9e|\xc8\x9f)",
+    "\xc8\xa2" => "(\xc8\xa2|\xc8\xa3)",
+    "\xc8\xa4" => "(\xc8\xa4|\xc8\xa5)",
+    "\xc8\xa6" => "(\xc8\xa6|\xc8\xa7)",
+    "\xc8\xa8" => "(\xc8\xa8|\xc8\xa9)",
+    "\xc8\xaa" => "(\xc8\xaa|\xc8\xab)",
+    "\xc8\xac" => "(\xc8\xac|\xc8\xad)",
+    "\xc8\xae" => "(\xc8\xae|\xc8\xaf)",
+    "\xc8\xb0" => "(\xc8\xb0|\xc8\xb1)",
+    "\xc8\xb2" => "(\xc8\xb2|\xc8\xb3)",
+    "\xce\x86" => "(\xce\x86|\xce\xac)",
+    "\xce\x88" => "(\xce\x88|\xce\xad)",
+    "\xce\x89" => "(\xce\x89|\xce\xae)",
+    "\xce\x8a" => "(\xce\x8a|\xce\xaf)",
+    "\xce\x8c" => "(\xce\x8c|\xcf\x8c)",
+    "\xce\x8e" => "(\xce\x8e|\xcf\x8d)",
+    "\xce\x8f" => "(\xce\x8f|\xcf\x8e)",
+    "\xce\x91" => "(\xce\x91|\xce\xb1)",
+    "\xce\x92" => "(\xce\x92|\xce\xb2|\xcf\x90)",
+    "\xce\x93" => "(\xce\x93|\xce\xb3)",
+    "\xce\x94" => "(\xce\x94|\xce\xb4)",
+    "\xce\x95" => "(\xce\x95|\xce\xb5|\xcf\xb5)",
+    "\xce\x96" => "(\xce\x96|\xce\xb6)",
+    "\xce\x97" => "(\xce\x97|\xce\xb7)",
+    "\xce\x98" => "(\xce\x98|\xce\xb8|\xcf\x91)",
+    "\xce\x99" => "(\xce\x99|\xce\xb9|\xcd\x85|\xe1\xbe\xbe)",
+    "\xce\x9a" => "(\xce\x9a|\xce\xba|\xcf\xb0)",
+    "\xce\x9b" => "(\xce\x9b|\xce\xbb)",
+    "\xce\x9c" => "(\xce\x9c|\xce\xbc|\xc2\xb5)",
+    "\xce\x9d" => "(\xce\x9d|\xce\xbd)",
+    "\xce\x9e" => "(\xce\x9e|\xce\xbe)",
+    "\xce\x9f" => "(\xce\x9f|\xce\xbf)",
+    "\xce\xa0" => "(\xce\xa0|\xcf\x80|\xcf\x96)",
+    "\xce\xa1" => "(\xce\xa1|\xcf\x81|\xcf\xb1)",
+    "\xce\xa3" => "(\xce\xa3|\xcf\x83|\xcf\x82|\xcf\xb2)",
+    "\xce\xa4" => "(\xce\xa4|\xcf\x84)",
+    "\xce\xa5" => "(\xce\xa5|\xcf\x85)",
+    "\xce\xa6" => "(\xce\xa6|\xcf\x86|\xcf\x95)",
+    "\xce\xa7" => "(\xce\xa7|\xcf\x87)",
+    "\xce\xa8" => "(\xce\xa8|\xcf\x88)",
+    "\xce\xa9" => "(\xce\xa9|\xcf\x89)",
+    "\xce\xaa" => "(\xce\xaa|\xcf\x8a)",
+    "\xce\xab" => "(\xce\xab|\xcf\x8b)",
+    "\xcf\x9a" => "(\xcf\x9a|\xcf\x9b)",
+    "\xcf\x9c" => "(\xcf\x9c|\xcf\x9d)",
+    "\xcf\x9e" => "(\xcf\x9e|\xcf\x9f)",
+    "\xcf\xa0" => "(\xcf\xa0|\xcf\xa1)",
+    "\xcf\xa2" => "(\xcf\xa2|\xcf\xa3)",
+    "\xcf\xa4" => "(\xcf\xa4|\xcf\xa5)",
+    "\xcf\xa6" => "(\xcf\xa6|\xcf\xa7)",
+    "\xcf\xa8" => "(\xcf\xa8|\xcf\xa9)",
+    "\xcf\xaa" => "(\xcf\xaa|\xcf\xab)",
+    "\xcf\xac" => "(\xcf\xac|\xcf\xad)",
+    "\xcf\xae" => "(\xcf\xae|\xcf\xaf)",
+    "\xcf\xb4" => "(\xcf\xb4|\xce\xb8)",
+    "\xd0\x80" => "(\xd0\x80|\xd1\x90)",
+    "\xd0\x81" => "(\xd0\x81|\xd1\x91)",
+    "\xd0\x82" => "(\xd0\x82|\xd1\x92)",
+    "\xd0\x83" => "(\xd0\x83|\xd1\x93)",
+    "\xd0\x84" => "(\xd0\x84|\xd1\x94)",
+    "\xd0\x85" => "(\xd0\x85|\xd1\x95)",
+    "\xd0\x86" => "(\xd0\x86|\xd1\x96)",
+    "\xd0\x87" => "(\xd0\x87|\xd1\x97)",
+    "\xd0\x88" => "(\xd0\x88|\xd1\x98)",
+    "\xd0\x89" => "(\xd0\x89|\xd1\x99)",
+    "\xd0\x8a" => "(\xd0\x8a|\xd1\x9a)",
+    "\xd0\x8b" => "(\xd0\x8b|\xd1\x9b)",
+    "\xd0\x8c" => "(\xd0\x8c|\xd1\x9c)",
+    "\xd0\x8d" => "(\xd0\x8d|\xd1\x9d)",
+    "\xd0\x8e" => "(\xd0\x8e|\xd1\x9e)",
+    "\xd0\x8f" => "(\xd0\x8f|\xd1\x9f)",
+    "\xd0\x90" => "(\xd0\x90|\xd0\xb0)",
+    "\xd0\x91" => "(\xd0\x91|\xd0\xb1)",
+    "\xd0\x92" => "(\xd0\x92|\xd0\xb2)",
+    "\xd0\x93" => "(\xd0\x93|\xd0\xb3)",
+    "\xd0\x94" => "(\xd0\x94|\xd0\xb4)",
+    "\xd0\x95" => "(\xd0\x95|\xd0\xb5)",
+    "\xd0\x96" => "(\xd0\x96|\xd0\xb6)",
+    "\xd0\x97" => "(\xd0\x97|\xd0\xb7)",
+    "\xd0\x98" => "(\xd0\x98|\xd0\xb8)",
+    "\xd0\x99" => "(\xd0\x99|\xd0\xb9)",
+    "\xd0\x9a" => "(\xd0\x9a|\xd0\xba)",
+    "\xd0\x9b" => "(\xd0\x9b|\xd0\xbb)",
+    "\xd0\x9c" => "(\xd0\x9c|\xd0\xbc)",
+    "\xd0\x9d" => "(\xd0\x9d|\xd0\xbd)",
+    "\xd0\x9e" => "(\xd0\x9e|\xd0\xbe)",
+    "\xd0\x9f" => "(\xd0\x9f|\xd0\xbf)",
+    "\xd0\xa0" => "(\xd0\xa0|\xd1\x80)",
+    "\xd0\xa1" => "(\xd0\xa1|\xd1\x81)",
+    "\xd0\xa2" => "(\xd0\xa2|\xd1\x82)",
+    "\xd0\xa3" => "(\xd0\xa3|\xd1\x83)",
+    "\xd0\xa4" => "(\xd0\xa4|\xd1\x84)",
+    "\xd0\xa5" => "(\xd0\xa5|\xd1\x85)",
+    "\xd0\xa6" => "(\xd0\xa6|\xd1\x86)",
+    "\xd0\xa7" => "(\xd0\xa7|\xd1\x87)",
+    "\xd0\xa8" => "(\xd0\xa8|\xd1\x88)",
+    "\xd0\xa9" => "(\xd0\xa9|\xd1\x89)",
+    "\xd0\xaa" => "(\xd0\xaa|\xd1\x8a)",
+    "\xd0\xab" => "(\xd0\xab|\xd1\x8b)",
+    "\xd0\xac" => "(\xd0\xac|\xd1\x8c)",
+    "\xd0\xad" => "(\xd0\xad|\xd1\x8d)",
+    "\xd0\xae" => "(\xd0\xae|\xd1\x8e)",
+    "\xd0\xaf" => "(\xd0\xaf|\xd1\x8f)",
+    "\xd1\xa0" => "(\xd1\xa0|\xd1\xa1)",
+    "\xd1\xa2" => "(\xd1\xa2|\xd1\xa3)",
+    "\xd1\xa4" => "(\xd1\xa4|\xd1\xa5)",
+    "\xd1\xa6" => "(\xd1\xa6|\xd1\xa7)",
+    "\xd1\xa8" => "(\xd1\xa8|\xd1\xa9)",
+    "\xd1\xaa" => "(\xd1\xaa|\xd1\xab)",
+    "\xd1\xac" => "(\xd1\xac|\xd1\xad)",
+    "\xd1\xae" => "(\xd1\xae|\xd1\xaf)",
+    "\xd1\xb0" => "(\xd1\xb0|\xd1\xb1)",
+    "\xd1\xb2" => "(\xd1\xb2|\xd1\xb3)",
+    "\xd1\xb4" => "(\xd1\xb4|\xd1\xb5)",
+    "\xd1\xb6" => "(\xd1\xb6|\xd1\xb7)",
+    "\xd1\xb8" => "(\xd1\xb8|\xd1\xb9)",
+    "\xd1\xba" => "(\xd1\xba|\xd1\xbb)",
+    "\xd1\xbc" => "(\xd1\xbc|\xd1\xbd)",
+    "\xd1\xbe" => "(\xd1\xbe|\xd1\xbf)",
+    "\xd2\x80" => "(\xd2\x80|\xd2\x81)",
+    "\xd2\x8c" => "(\xd2\x8c|\xd2\x8d)",
+    "\xd2\x8e" => "(\xd2\x8e|\xd2\x8f)",
+    "\xd2\x90" => "(\xd2\x90|\xd2\x91)",
+    "\xd2\x92" => "(\xd2\x92|\xd2\x93)",
+    "\xd2\x94" => "(\xd2\x94|\xd2\x95)",
+    "\xd2\x96" => "(\xd2\x96|\xd2\x97)",
+    "\xd2\x98" => "(\xd2\x98|\xd2\x99)",
+    "\xd2\x9a" => "(\xd2\x9a|\xd2\x9b)",
+    "\xd2\x9c" => "(\xd2\x9c|\xd2\x9d)",
+    "\xd2\x9e" => "(\xd2\x9e|\xd2\x9f)",
+    "\xd2\xa0" => "(\xd2\xa0|\xd2\xa1)",
+    "\xd2\xa2" => "(\xd2\xa2|\xd2\xa3)",
+    "\xd2\xa4" => "(\xd2\xa4|\xd2\xa5)",
+    "\xd2\xa6" => "(\xd2\xa6|\xd2\xa7)",
+    "\xd2\xa8" => "(\xd2\xa8|\xd2\xa9)",
+    "\xd2\xaa" => "(\xd2\xaa|\xd2\xab)",
+    "\xd2\xac" => "(\xd2\xac|\xd2\xad)",
+    "\xd2\xae" => "(\xd2\xae|\xd2\xaf)",
+    "\xd2\xb0" => "(\xd2\xb0|\xd2\xb1)",
+    "\xd2\xb2" => "(\xd2\xb2|\xd2\xb3)",
+    "\xd2\xb4" => "(\xd2\xb4|\xd2\xb5)",
+    "\xd2\xb6" => "(\xd2\xb6|\xd2\xb7)",
+    "\xd2\xb8" => "(\xd2\xb8|\xd2\xb9)",
+    "\xd2\xba" => "(\xd2\xba|\xd2\xbb)",
+    "\xd2\xbc" => "(\xd2\xbc|\xd2\xbd)",
+    "\xd2\xbe" => "(\xd2\xbe|\xd2\xbf)",
+    "\xd3\x81" => "(\xd3\x81|\xd3\x82)",
+    "\xd3\x83" => "(\xd3\x83|\xd3\x84)",
+    "\xd3\x87" => "(\xd3\x87|\xd3\x88)",
+    "\xd3\x8b" => "(\xd3\x8b|\xd3\x8c)",
+    "\xd3\x90" => "(\xd3\x90|\xd3\x91)",
+    "\xd3\x92" => "(\xd3\x92|\xd3\x93)",
+    "\xd3\x94" => "(\xd3\x94|\xd3\x95)",
+    "\xd3\x96" => "(\xd3\x96|\xd3\x97)",
+    "\xd3\x98" => "(\xd3\x98|\xd3\x99)",
+    "\xd3\x9a" => "(\xd3\x9a|\xd3\x9b)",
+    "\xd3\x9c" => "(\xd3\x9c|\xd3\x9d)",
+    "\xd3\x9e" => "(\xd3\x9e|\xd3\x9f)",
+    "\xd3\xa0" => "(\xd3\xa0|\xd3\xa1)",
+    "\xd3\xa2" => "(\xd3\xa2|\xd3\xa3)",
+    "\xd3\xa4" => "(\xd3\xa4|\xd3\xa5)",
+    "\xd3\xa6" => "(\xd3\xa6|\xd3\xa7)",
+    "\xd3\xa8" => "(\xd3\xa8|\xd3\xa9)",
+    "\xd3\xaa" => "(\xd3\xaa|\xd3\xab)",
+    "\xd3\xac" => "(\xd3\xac|\xd3\xad)",
+    "\xd3\xae" => "(\xd3\xae|\xd3\xaf)",
+    "\xd3\xb0" => "(\xd3\xb0|\xd3\xb1)",
+    "\xd3\xb2" => "(\xd3\xb2|\xd3\xb3)",
+    "\xd3\xb4" => "(\xd3\xb4|\xd3\xb5)",
+    "\xd3\xb8" => "(\xd3\xb8|\xd3\xb9)",
+    "\xd4\xb1" => "(\xd4\xb1|\xd5\xa1)",
+    "\xd4\xb2" => "(\xd4\xb2|\xd5\xa2)",
+    "\xd4\xb3" => "(\xd4\xb3|\xd5\xa3)",
+    "\xd4\xb4" => "(\xd4\xb4|\xd5\xa4)",
+    "\xd4\xb5" => "(\xd4\xb5|\xd5\xa5)",
+    "\xd4\xb6" => "(\xd4\xb6|\xd5\xa6)",
+    "\xd4\xb7" => "(\xd4\xb7|\xd5\xa7)",
+    "\xd4\xb8" => "(\xd4\xb8|\xd5\xa8)",
+    "\xd4\xb9" => "(\xd4\xb9|\xd5\xa9)",
+    "\xd4\xba" => "(\xd4\xba|\xd5\xaa)",
+    "\xd4\xbb" => "(\xd4\xbb|\xd5\xab)",
+    "\xd4\xbc" => "(\xd4\xbc|\xd5\xac)",
+    "\xd4\xbd" => "(\xd4\xbd|\xd5\xad)",
+    "\xd4\xbe" => "(\xd4\xbe|\xd5\xae)",
+    "\xd4\xbf" => "(\xd4\xbf|\xd5\xaf)",
+    "\xd5\x80" => "(\xd5\x80|\xd5\xb0)",
+    "\xd5\x81" => "(\xd5\x81|\xd5\xb1)",
+    "\xd5\x82" => "(\xd5\x82|\xd5\xb2)",
+    "\xd5\x83" => "(\xd5\x83|\xd5\xb3)",
+    "\xd5\x84" => "(\xd5\x84|\xd5\xb4)",
+    "\xd5\x85" => "(\xd5\x85|\xd5\xb5)",
+    "\xd5\x86" => "(\xd5\x86|\xd5\xb6)",
+    "\xd5\x87" => "(\xd5\x87|\xd5\xb7)",
+    "\xd5\x88" => "(\xd5\x88|\xd5\xb8)",
+    "\xd5\x89" => "(\xd5\x89|\xd5\xb9)",
+    "\xd5\x8a" => "(\xd5\x8a|\xd5\xba)",
+    "\xd5\x8b" => "(\xd5\x8b|\xd5\xbb)",
+    "\xd5\x8c" => "(\xd5\x8c|\xd5\xbc)",
+    "\xd5\x8d" => "(\xd5\x8d|\xd5\xbd)",
+    "\xd5\x8e" => "(\xd5\x8e|\xd5\xbe)",
+    "\xd5\x8f" => "(\xd5\x8f|\xd5\xbf)",
+    "\xd5\x90" => "(\xd5\x90|\xd6\x80)",
+    "\xd5\x91" => "(\xd5\x91|\xd6\x81)",
+    "\xd5\x92" => "(\xd5\x92|\xd6\x82)",
+    "\xd5\x93" => "(\xd5\x93|\xd6\x83)",
+    "\xd5\x94" => "(\xd5\x94|\xd6\x84)",
+    "\xd5\x95" => "(\xd5\x95|\xd6\x85)",
+    "\xd5\x96" => "(\xd5\x96|\xd6\x86)",
+    "\xe1\xb8\x80" => "(\xe1\xb8\x80|\xe1\xb8\x81)",
+    "\xe1\xb8\x82" => "(\xe1\xb8\x82|\xe1\xb8\x83)",
+    "\xe1\xb8\x84" => "(\xe1\xb8\x84|\xe1\xb8\x85)",
+    "\xe1\xb8\x86" => "(\xe1\xb8\x86|\xe1\xb8\x87)",
+    "\xe1\xb8\x88" => "(\xe1\xb8\x88|\xe1\xb8\x89)",
+    "\xe1\xb8\x8a" => "(\xe1\xb8\x8a|\xe1\xb8\x8b)",
+    "\xe1\xb8\x8c" => "(\xe1\xb8\x8c|\xe1\xb8\x8d)",
+    "\xe1\xb8\x8e" => "(\xe1\xb8\x8e|\xe1\xb8\x8f)",
+    "\xe1\xb8\x90" => "(\xe1\xb8\x90|\xe1\xb8\x91)",
+    "\xe1\xb8\x92" => "(\xe1\xb8\x92|\xe1\xb8\x93)",
+    "\xe1\xb8\x94" => "(\xe1\xb8\x94|\xe1\xb8\x95)",
+    "\xe1\xb8\x96" => "(\xe1\xb8\x96|\xe1\xb8\x97)",
+    "\xe1\xb8\x98" => "(\xe1\xb8\x98|\xe1\xb8\x99)",
+    "\xe1\xb8\x9a" => "(\xe1\xb8\x9a|\xe1\xb8\x9b)",
+    "\xe1\xb8\x9c" => "(\xe1\xb8\x9c|\xe1\xb8\x9d)",
+    "\xe1\xb8\x9e" => "(\xe1\xb8\x9e|\xe1\xb8\x9f)",
+    "\xe1\xb8\xa0" => "(\xe1\xb8\xa0|\xe1\xb8\xa1)",
+    "\xe1\xb8\xa2" => "(\xe1\xb8\xa2|\xe1\xb8\xa3)",
+    "\xe1\xb8\xa4" => "(\xe1\xb8\xa4|\xe1\xb8\xa5)",
+    "\xe1\xb8\xa6" => "(\xe1\xb8\xa6|\xe1\xb8\xa7)",
+    "\xe1\xb8\xa8" => "(\xe1\xb8\xa8|\xe1\xb8\xa9)",
+    "\xe1\xb8\xaa" => "(\xe1\xb8\xaa|\xe1\xb8\xab)",
+    "\xe1\xb8\xac" => "(\xe1\xb8\xac|\xe1\xb8\xad)",
+    "\xe1\xb8\xae" => "(\xe1\xb8\xae|\xe1\xb8\xaf)",
+    "\xe1\xb8\xb0" => "(\xe1\xb8\xb0|\xe1\xb8\xb1)",
+    "\xe1\xb8\xb2" => "(\xe1\xb8\xb2|\xe1\xb8\xb3)",
+    "\xe1\xb8\xb4" => "(\xe1\xb8\xb4|\xe1\xb8\xb5)",
+    "\xe1\xb8\xb6" => "(\xe1\xb8\xb6|\xe1\xb8\xb7)",
+    "\xe1\xb8\xb8" => "(\xe1\xb8\xb8|\xe1\xb8\xb9)",
+    "\xe1\xb8\xba" => "(\xe1\xb8\xba|\xe1\xb8\xbb)",
+    "\xe1\xb8\xbc" => "(\xe1\xb8\xbc|\xe1\xb8\xbd)",
+    "\xe1\xb8\xbe" => "(\xe1\xb8\xbe|\xe1\xb8\xbf)",
+    "\xe1\xb9\x80" => "(\xe1\xb9\x80|\xe1\xb9\x81)",
+    "\xe1\xb9\x82" => "(\xe1\xb9\x82|\xe1\xb9\x83)",
+    "\xe1\xb9\x84" => "(\xe1\xb9\x84|\xe1\xb9\x85)",
+    "\xe1\xb9\x86" => "(\xe1\xb9\x86|\xe1\xb9\x87)",
+    "\xe1\xb9\x88" => "(\xe1\xb9\x88|\xe1\xb9\x89)",
+    "\xe1\xb9\x8a" => "(\xe1\xb9\x8a|\xe1\xb9\x8b)",
+    "\xe1\xb9\x8c" => "(\xe1\xb9\x8c|\xe1\xb9\x8d)",
+    "\xe1\xb9\x8e" => "(\xe1\xb9\x8e|\xe1\xb9\x8f)",
+    "\xe1\xb9\x90" => "(\xe1\xb9\x90|\xe1\xb9\x91)",
+    "\xe1\xb9\x92" => "(\xe1\xb9\x92|\xe1\xb9\x93)",
+    "\xe1\xb9\x94" => "(\xe1\xb9\x94|\xe1\xb9\x95)",
+    "\xe1\xb9\x96" => "(\xe1\xb9\x96|\xe1\xb9\x97)",
+    "\xe1\xb9\x98" => "(\xe1\xb9\x98|\xe1\xb9\x99)",
+    "\xe1\xb9\x9a" => "(\xe1\xb9\x9a|\xe1\xb9\x9b)",
+    "\xe1\xb9\x9c" => "(\xe1\xb9\x9c|\xe1\xb9\x9d)",
+    "\xe1\xb9\x9e" => "(\xe1\xb9\x9e|\xe1\xb9\x9f)",
+    "\xe1\xb9\xa0" => "(\xe1\xb9\xa0|\xe1\xb9\xa1|\xe1\xba\x9b)",
+    "\xe1\xb9\xa2" => "(\xe1\xb9\xa2|\xe1\xb9\xa3)",
+    "\xe1\xb9\xa4" => "(\xe1\xb9\xa4|\xe1\xb9\xa5)",
+    "\xe1\xb9\xa6" => "(\xe1\xb9\xa6|\xe1\xb9\xa7)",
+    "\xe1\xb9\xa8" => "(\xe1\xb9\xa8|\xe1\xb9\xa9)",
+    "\xe1\xb9\xaa" => "(\xe1\xb9\xaa|\xe1\xb9\xab)",
+    "\xe1\xb9\xac" => "(\xe1\xb9\xac|\xe1\xb9\xad)",
+    "\xe1\xb9\xae" => "(\xe1\xb9\xae|\xe1\xb9\xaf)",
+    "\xe1\xb9\xb0" => "(\xe1\xb9\xb0|\xe1\xb9\xb1)",
+    "\xe1\xb9\xb2" => "(\xe1\xb9\xb2|\xe1\xb9\xb3)",
+    "\xe1\xb9\xb4" => "(\xe1\xb9\xb4|\xe1\xb9\xb5)",
+    "\xe1\xb9\xb6" => "(\xe1\xb9\xb6|\xe1\xb9\xb7)",
+    "\xe1\xb9\xb8" => "(\xe1\xb9\xb8|\xe1\xb9\xb9)",
+    "\xe1\xb9\xba" => "(\xe1\xb9\xba|\xe1\xb9\xbb)",
+    "\xe1\xb9\xbc" => "(\xe1\xb9\xbc|\xe1\xb9\xbd)",
+    "\xe1\xb9\xbe" => "(\xe1\xb9\xbe|\xe1\xb9\xbf)",
+    "\xe1\xba\x80" => "(\xe1\xba\x80|\xe1\xba\x81)",
+    "\xe1\xba\x82" => "(\xe1\xba\x82|\xe1\xba\x83)",
+    "\xe1\xba\x84" => "(\xe1\xba\x84|\xe1\xba\x85)",
+    "\xe1\xba\x86" => "(\xe1\xba\x86|\xe1\xba\x87)",
+    "\xe1\xba\x88" => "(\xe1\xba\x88|\xe1\xba\x89)",
+    "\xe1\xba\x8a" => "(\xe1\xba\x8a|\xe1\xba\x8b)",
+    "\xe1\xba\x8c" => "(\xe1\xba\x8c|\xe1\xba\x8d)",
+    "\xe1\xba\x8e" => "(\xe1\xba\x8e|\xe1\xba\x8f)",
+    "\xe1\xba\x90" => "(\xe1\xba\x90|\xe1\xba\x91)",
+    "\xe1\xba\x92" => "(\xe1\xba\x92|\xe1\xba\x93)",
+    "\xe1\xba\x94" => "(\xe1\xba\x94|\xe1\xba\x95)",
+    "\xe1\xba\xa0" => "(\xe1\xba\xa0|\xe1\xba\xa1)",
+    "\xe1\xba\xa2" => "(\xe1\xba\xa2|\xe1\xba\xa3)",
+    "\xe1\xba\xa4" => "(\xe1\xba\xa4|\xe1\xba\xa5)",
+    "\xe1\xba\xa6" => "(\xe1\xba\xa6|\xe1\xba\xa7)",
+    "\xe1\xba\xa8" => "(\xe1\xba\xa8|\xe1\xba\xa9)",
+    "\xe1\xba\xaa" => "(\xe1\xba\xaa|\xe1\xba\xab)",
+    "\xe1\xba\xac" => "(\xe1\xba\xac|\xe1\xba\xad)",
+    "\xe1\xba\xae" => "(\xe1\xba\xae|\xe1\xba\xaf)",
+    "\xe1\xba\xb0" => "(\xe1\xba\xb0|\xe1\xba\xb1)",
+    "\xe1\xba\xb2" => "(\xe1\xba\xb2|\xe1\xba\xb3)",
+    "\xe1\xba\xb4" => "(\xe1\xba\xb4|\xe1\xba\xb5)",
+    "\xe1\xba\xb6" => "(\xe1\xba\xb6|\xe1\xba\xb7)",
+    "\xe1\xba\xb8" => "(\xe1\xba\xb8|\xe1\xba\xb9)",
+    "\xe1\xba\xba" => "(\xe1\xba\xba|\xe1\xba\xbb)",
+    "\xe1\xba\xbc" => "(\xe1\xba\xbc|\xe1\xba\xbd)",
+    "\xe1\xba\xbe" => "(\xe1\xba\xbe|\xe1\xba\xbf)",
+    "\xe1\xbb\x80" => "(\xe1\xbb\x80|\xe1\xbb\x81)",
+    "\xe1\xbb\x82" => "(\xe1\xbb\x82|\xe1\xbb\x83)",
+    "\xe1\xbb\x84" => "(\xe1\xbb\x84|\xe1\xbb\x85)",
+    "\xe1\xbb\x86" => "(\xe1\xbb\x86|\xe1\xbb\x87)",
+    "\xe1\xbb\x88" => "(\xe1\xbb\x88|\xe1\xbb\x89)",
+    "\xe1\xbb\x8a" => "(\xe1\xbb\x8a|\xe1\xbb\x8b)",
+    "\xe1\xbb\x8c" => "(\xe1\xbb\x8c|\xe1\xbb\x8d)",
+    "\xe1\xbb\x8e" => "(\xe1\xbb\x8e|\xe1\xbb\x8f)",
+    "\xe1\xbb\x90" => "(\xe1\xbb\x90|\xe1\xbb\x91)",
+    "\xe1\xbb\x92" => "(\xe1\xbb\x92|\xe1\xbb\x93)",
+    "\xe1\xbb\x94" => "(\xe1\xbb\x94|\xe1\xbb\x95)",
+    "\xe1\xbb\x96" => "(\xe1\xbb\x96|\xe1\xbb\x97)",
+    "\xe1\xbb\x98" => "(\xe1\xbb\x98|\xe1\xbb\x99)",
+    "\xe1\xbb\x9a" => "(\xe1\xbb\x9a|\xe1\xbb\x9b)",
+    "\xe1\xbb\x9c" => "(\xe1\xbb\x9c|\xe1\xbb\x9d)",
+    "\xe1\xbb\x9e" => "(\xe1\xbb\x9e|\xe1\xbb\x9f)",
+    "\xe1\xbb\xa0" => "(\xe1\xbb\xa0|\xe1\xbb\xa1)",
+    "\xe1\xbb\xa2" => "(\xe1\xbb\xa2|\xe1\xbb\xa3)",
+    "\xe1\xbb\xa4" => "(\xe1\xbb\xa4|\xe1\xbb\xa5)",
+    "\xe1\xbb\xa6" => "(\xe1\xbb\xa6|\xe1\xbb\xa7)",
+    "\xe1\xbb\xa8" => "(\xe1\xbb\xa8|\xe1\xbb\xa9)",
+    "\xe1\xbb\xaa" => "(\xe1\xbb\xaa|\xe1\xbb\xab)",
+    "\xe1\xbb\xac" => "(\xe1\xbb\xac|\xe1\xbb\xad)",
+    "\xe1\xbb\xae" => "(\xe1\xbb\xae|\xe1\xbb\xaf)",
+    "\xe1\xbb\xb0" => "(\xe1\xbb\xb0|\xe1\xbb\xb1)",
+    "\xe1\xbb\xb2" => "(\xe1\xbb\xb2|\xe1\xbb\xb3)",
+    "\xe1\xbb\xb4" => "(\xe1\xbb\xb4|\xe1\xbb\xb5)",
+    "\xe1\xbb\xb6" => "(\xe1\xbb\xb6|\xe1\xbb\xb7)",
+    "\xe1\xbb\xb8" => "(\xe1\xbb\xb8|\xe1\xbb\xb9)",
+    "\xe1\xbc\x88" => "(\xe1\xbc\x88|\xe1\xbc\x80)",
+    "\xe1\xbc\x89" => "(\xe1\xbc\x89|\xe1\xbc\x81)",
+    "\xe1\xbc\x8a" => "(\xe1\xbc\x8a|\xe1\xbc\x82)",
+    "\xe1\xbc\x8b" => "(\xe1\xbc\x8b|\xe1\xbc\x83)",
+    "\xe1\xbc\x8c" => "(\xe1\xbc\x8c|\xe1\xbc\x84)",
+    "\xe1\xbc\x8d" => "(\xe1\xbc\x8d|\xe1\xbc\x85)",
+    "\xe1\xbc\x8e" => "(\xe1\xbc\x8e|\xe1\xbc\x86)",
+    "\xe1\xbc\x8f" => "(\xe1\xbc\x8f|\xe1\xbc\x87)",
+    "\xe1\xbc\x98" => "(\xe1\xbc\x98|\xe1\xbc\x90)",
+    "\xe1\xbc\x99" => "(\xe1\xbc\x99|\xe1\xbc\x91)",
+    "\xe1\xbc\x9a" => "(\xe1\xbc\x9a|\xe1\xbc\x92)",
+    "\xe1\xbc\x9b" => "(\xe1\xbc\x9b|\xe1\xbc\x93)",
+    "\xe1\xbc\x9c" => "(\xe1\xbc\x9c|\xe1\xbc\x94)",
+    "\xe1\xbc\x9d" => "(\xe1\xbc\x9d|\xe1\xbc\x95)",
+    "\xe1\xbc\xa8" => "(\xe1\xbc\xa8|\xe1\xbc\xa0)",
+    "\xe1\xbc\xa9" => "(\xe1\xbc\xa9|\xe1\xbc\xa1)",
+    "\xe1\xbc\xaa" => "(\xe1\xbc\xaa|\xe1\xbc\xa2)",
+    "\xe1\xbc\xab" => "(\xe1\xbc\xab|\xe1\xbc\xa3)",
+    "\xe1\xbc\xac" => "(\xe1\xbc\xac|\xe1\xbc\xa4)",
+    "\xe1\xbc\xad" => "(\xe1\xbc\xad|\xe1\xbc\xa5)",
+    "\xe1\xbc\xae" => "(\xe1\xbc\xae|\xe1\xbc\xa6)",
+    "\xe1\xbc\xaf" => "(\xe1\xbc\xaf|\xe1\xbc\xa7)",
+    "\xe1\xbc\xb8" => "(\xe1\xbc\xb8|\xe1\xbc\xb0)",
+    "\xe1\xbc\xb9" => "(\xe1\xbc\xb9|\xe1\xbc\xb1)",
+    "\xe1\xbc\xba" => "(\xe1\xbc\xba|\xe1\xbc\xb2)",
+    "\xe1\xbc\xbb" => "(\xe1\xbc\xbb|\xe1\xbc\xb3)",
+    "\xe1\xbc\xbc" => "(\xe1\xbc\xbc|\xe1\xbc\xb4)",
+    "\xe1\xbc\xbd" => "(\xe1\xbc\xbd|\xe1\xbc\xb5)",
+    "\xe1\xbc\xbe" => "(\xe1\xbc\xbe|\xe1\xbc\xb6)",
+    "\xe1\xbc\xbf" => "(\xe1\xbc\xbf|\xe1\xbc\xb7)",
+    "\xe1\xbd\x88" => "(\xe1\xbd\x88|\xe1\xbd\x80)",
+    "\xe1\xbd\x89" => "(\xe1\xbd\x89|\xe1\xbd\x81)",
+    "\xe1\xbd\x8a" => "(\xe1\xbd\x8a|\xe1\xbd\x82)",
+    "\xe1\xbd\x8b" => "(\xe1\xbd\x8b|\xe1\xbd\x83)",
+    "\xe1\xbd\x8c" => "(\xe1\xbd\x8c|\xe1\xbd\x84)",
+    "\xe1\xbd\x8d" => "(\xe1\xbd\x8d|\xe1\xbd\x85)",
+    "\xe1\xbd\x99" => "(\xe1\xbd\x99|\xe1\xbd\x91)",
+    "\xe1\xbd\x9b" => "(\xe1\xbd\x9b|\xe1\xbd\x93)",
+    "\xe1\xbd\x9d" => "(\xe1\xbd\x9d|\xe1\xbd\x95)",
+    "\xe1\xbd\x9f" => "(\xe1\xbd\x9f|\xe1\xbd\x97)",
+    "\xe1\xbd\xa8" => "(\xe1\xbd\xa8|\xe1\xbd\xa0)",
+    "\xe1\xbd\xa9" => "(\xe1\xbd\xa9|\xe1\xbd\xa1)",
+    "\xe1\xbd\xaa" => "(\xe1\xbd\xaa|\xe1\xbd\xa2)",
+    "\xe1\xbd\xab" => "(\xe1\xbd\xab|\xe1\xbd\xa3)",
+    "\xe1\xbd\xac" => "(\xe1\xbd\xac|\xe1\xbd\xa4)",
+    "\xe1\xbd\xad" => "(\xe1\xbd\xad|\xe1\xbd\xa5)",
+    "\xe1\xbd\xae" => "(\xe1\xbd\xae|\xe1\xbd\xa6)",
+    "\xe1\xbd\xaf" => "(\xe1\xbd\xaf|\xe1\xbd\xa7)",
+    "\xe1\xbe\x88" => "(\xe1\xbe\x88|\xe1\xbe\x80)",
+    "\xe1\xbe\x89" => "(\xe1\xbe\x89|\xe1\xbe\x81)",
+    "\xe1\xbe\x8a" => "(\xe1\xbe\x8a|\xe1\xbe\x82)",
+    "\xe1\xbe\x8b" => "(\xe1\xbe\x8b|\xe1\xbe\x83)",
+    "\xe1\xbe\x8c" => "(\xe1\xbe\x8c|\xe1\xbe\x84)",
+    "\xe1\xbe\x8d" => "(\xe1\xbe\x8d|\xe1\xbe\x85)",
+    "\xe1\xbe\x8e" => "(\xe1\xbe\x8e|\xe1\xbe\x86)",
+    "\xe1\xbe\x8f" => "(\xe1\xbe\x8f|\xe1\xbe\x87)",
+    "\xe1\xbe\x98" => "(\xe1\xbe\x98|\xe1\xbe\x90)",
+    "\xe1\xbe\x99" => "(\xe1\xbe\x99|\xe1\xbe\x91)",
+    "\xe1\xbe\x9a" => "(\xe1\xbe\x9a|\xe1\xbe\x92)",
+    "\xe1\xbe\x9b" => "(\xe1\xbe\x9b|\xe1\xbe\x93)",
+    "\xe1\xbe\x9c" => "(\xe1\xbe\x9c|\xe1\xbe\x94)",
+    "\xe1\xbe\x9d" => "(\xe1\xbe\x9d|\xe1\xbe\x95)",
+    "\xe1\xbe\x9e" => "(\xe1\xbe\x9e|\xe1\xbe\x96)",
+    "\xe1\xbe\x9f" => "(\xe1\xbe\x9f|\xe1\xbe\x97)",
+    "\xe1\xbe\xa8" => "(\xe1\xbe\xa8|\xe1\xbe\xa0)",
+    "\xe1\xbe\xa9" => "(\xe1\xbe\xa9|\xe1\xbe\xa1)",
+    "\xe1\xbe\xaa" => "(\xe1\xbe\xaa|\xe1\xbe\xa2)",
+    "\xe1\xbe\xab" => "(\xe1\xbe\xab|\xe1\xbe\xa3)",
+    "\xe1\xbe\xac" => "(\xe1\xbe\xac|\xe1\xbe\xa4)",
+    "\xe1\xbe\xad" => "(\xe1\xbe\xad|\xe1\xbe\xa5)",
+    "\xe1\xbe\xae" => "(\xe1\xbe\xae|\xe1\xbe\xa6)",
+    "\xe1\xbe\xaf" => "(\xe1\xbe\xaf|\xe1\xbe\xa7)",
+    "\xe1\xbe\xb8" => "(\xe1\xbe\xb8|\xe1\xbe\xb0)",
+    "\xe1\xbe\xb9" => "(\xe1\xbe\xb9|\xe1\xbe\xb1)",
+    "\xe1\xbe\xba" => "(\xe1\xbe\xba|\xe1\xbd\xb0)",
+    "\xe1\xbe\xbb" => "(\xe1\xbe\xbb|\xe1\xbd\xb1)",
+    "\xe1\xbe\xbc" => "(\xe1\xbe\xbc|\xe1\xbe\xb3)",
+    "\xe1\xbf\x88" => "(\xe1\xbf\x88|\xe1\xbd\xb2)",
+    "\xe1\xbf\x89" => "(\xe1\xbf\x89|\xe1\xbd\xb3)",
+    "\xe1\xbf\x8a" => "(\xe1\xbf\x8a|\xe1\xbd\xb4)",
+    "\xe1\xbf\x8b" => "(\xe1\xbf\x8b|\xe1\xbd\xb5)",
+    "\xe1\xbf\x8c" => "(\xe1\xbf\x8c|\xe1\xbf\x83)",
+    "\xe1\xbf\x98" => "(\xe1\xbf\x98|\xe1\xbf\x90)",
+    "\xe1\xbf\x99" => "(\xe1\xbf\x99|\xe1\xbf\x91)",
+    "\xe1\xbf\x9a" => "(\xe1\xbf\x9a|\xe1\xbd\xb6)",
+    "\xe1\xbf\x9b" => "(\xe1\xbf\x9b|\xe1\xbd\xb7)",
+    "\xe1\xbf\xa8" => "(\xe1\xbf\xa8|\xe1\xbf\xa0)",
+    "\xe1\xbf\xa9" => "(\xe1\xbf\xa9|\xe1\xbf\xa1)",
+    "\xe1\xbf\xaa" => "(\xe1\xbf\xaa|\xe1\xbd\xba)",
+    "\xe1\xbf\xab" => "(\xe1\xbf\xab|\xe1\xbd\xbb)",
+    "\xe1\xbf\xac" => "(\xe1\xbf\xac|\xe1\xbf\xa5)",
+    "\xe1\xbf\xb8" => "(\xe1\xbf\xb8|\xe1\xbd\xb8)",
+    "\xe1\xbf\xb9" => "(\xe1\xbf\xb9|\xe1\xbd\xb9)",
+    "\xe1\xbf\xba" => "(\xe1\xbf\xba|\xe1\xbd\xbc)",
+    "\xe1\xbf\xbb" => "(\xe1\xbf\xbb|\xe1\xbd\xbd)",
+    "\xe1\xbf\xbc" => "(\xe1\xbf\xbc|\xe1\xbf\xb3)",
+    "\xe2\x84\xa6" => "(\xe2\x84\xa6|\xcf\x89)",
+    "\xe2\x84\xaa" => "(\xe2\x84\xaa|k)",
+    "\xe2\x84\xab" => "(\xe2\x84\xab|\xc3\xa5)",
+    "\xe2\x85\xa0" => "(\xe2\x85\xa0|\xe2\x85\xb0)",
+    "\xe2\x85\xa1" => "(\xe2\x85\xa1|\xe2\x85\xb1)",
+    "\xe2\x85\xa2" => "(\xe2\x85\xa2|\xe2\x85\xb2)",
+    "\xe2\x85\xa3" => "(\xe2\x85\xa3|\xe2\x85\xb3)",
+    "\xe2\x85\xa4" => "(\xe2\x85\xa4|\xe2\x85\xb4)",
+    "\xe2\x85\xa5" => "(\xe2\x85\xa5|\xe2\x85\xb5)",
+    "\xe2\x85\xa6" => "(\xe2\x85\xa6|\xe2\x85\xb6)",
+    "\xe2\x85\xa7" => "(\xe2\x85\xa7|\xe2\x85\xb7)",
+    "\xe2\x85\xa8" => "(\xe2\x85\xa8|\xe2\x85\xb8)",
+    "\xe2\x85\xa9" => "(\xe2\x85\xa9|\xe2\x85\xb9)",
+    "\xe2\x85\xaa" => "(\xe2\x85\xaa|\xe2\x85\xba)",
+    "\xe2\x85\xab" => "(\xe2\x85\xab|\xe2\x85\xbb)",
+    "\xe2\x85\xac" => "(\xe2\x85\xac|\xe2\x85\xbc)",
+    "\xe2\x85\xad" => "(\xe2\x85\xad|\xe2\x85\xbd)",
+    "\xe2\x85\xae" => "(\xe2\x85\xae|\xe2\x85\xbe)",
+    "\xe2\x85\xaf" => "(\xe2\x85\xaf|\xe2\x85\xbf)",
+    "\xe2\x92\xb6" => "(\xe2\x92\xb6|\xe2\x93\x90)",
+    "\xe2\x92\xb7" => "(\xe2\x92\xb7|\xe2\x93\x91)",
+    "\xe2\x92\xb8" => "(\xe2\x92\xb8|\xe2\x93\x92)",
+    "\xe2\x92\xb9" => "(\xe2\x92\xb9|\xe2\x93\x93)",
+    "\xe2\x92\xba" => "(\xe2\x92\xba|\xe2\x93\x94)",
+    "\xe2\x92\xbb" => "(\xe2\x92\xbb|\xe2\x93\x95)",
+    "\xe2\x92\xbc" => "(\xe2\x92\xbc|\xe2\x93\x96)",
+    "\xe2\x92\xbd" => "(\xe2\x92\xbd|\xe2\x93\x97)",
+    "\xe2\x92\xbe" => "(\xe2\x92\xbe|\xe2\x93\x98)",
+    "\xe2\x92\xbf" => "(\xe2\x92\xbf|\xe2\x93\x99)",
+    "\xe2\x93\x80" => "(\xe2\x93\x80|\xe2\x93\x9a)",
+    "\xe2\x93\x81" => "(\xe2\x93\x81|\xe2\x93\x9b)",
+    "\xe2\x93\x82" => "(\xe2\x93\x82|\xe2\x93\x9c)",
+    "\xe2\x93\x83" => "(\xe2\x93\x83|\xe2\x93\x9d)",
+    "\xe2\x93\x84" => "(\xe2\x93\x84|\xe2\x93\x9e)",
+    "\xe2\x93\x85" => "(\xe2\x93\x85|\xe2\x93\x9f)",
+    "\xe2\x93\x86" => "(\xe2\x93\x86|\xe2\x93\xa0)",
+    "\xe2\x93\x87" => "(\xe2\x93\x87|\xe2\x93\xa1)",
+    "\xe2\x93\x88" => "(\xe2\x93\x88|\xe2\x93\xa2)",
+    "\xe2\x93\x89" => "(\xe2\x93\x89|\xe2\x93\xa3)",
+    "\xe2\x93\x8a" => "(\xe2\x93\x8a|\xe2\x93\xa4)",
+    "\xe2\x93\x8b" => "(\xe2\x93\x8b|\xe2\x93\xa5)",
+    "\xe2\x93\x8c" => "(\xe2\x93\x8c|\xe2\x93\xa6)",
+    "\xe2\x93\x8d" => "(\xe2\x93\x8d|\xe2\x93\xa7)",
+    "\xe2\x93\x8e" => "(\xe2\x93\x8e|\xe2\x93\xa8)",
+    "\xe2\x93\x8f" => "(\xe2\x93\x8f|\xe2\x93\xa9)",
+    "\xef\xbc\xa1" => "(\xef\xbc\xa1|\xef\xbd\x81)",
+    "\xef\xbc\xa2" => "(\xef\xbc\xa2|\xef\xbd\x82)",
+    "\xef\xbc\xa3" => "(\xef\xbc\xa3|\xef\xbd\x83)",
+    "\xef\xbc\xa4" => "(\xef\xbc\xa4|\xef\xbd\x84)",
+    "\xef\xbc\xa5" => "(\xef\xbc\xa5|\xef\xbd\x85)",
+    "\xef\xbc\xa6" => "(\xef\xbc\xa6|\xef\xbd\x86)",
+    "\xef\xbc\xa7" => "(\xef\xbc\xa7|\xef\xbd\x87)",
+    "\xef\xbc\xa8" => "(\xef\xbc\xa8|\xef\xbd\x88)",
+    "\xef\xbc\xa9" => "(\xef\xbc\xa9|\xef\xbd\x89)",
+    "\xef\xbc\xaa" => "(\xef\xbc\xaa|\xef\xbd\x8a)",
+    "\xef\xbc\xab" => "(\xef\xbc\xab|\xef\xbd\x8b)",
+    "\xef\xbc\xac" => "(\xef\xbc\xac|\xef\xbd\x8c)",
+    "\xef\xbc\xad" => "(\xef\xbc\xad|\xef\xbd\x8d)",
+    "\xef\xbc\xae" => "(\xef\xbc\xae|\xef\xbd\x8e)",
+    "\xef\xbc\xaf" => "(\xef\xbc\xaf|\xef\xbd\x8f)",
+    "\xef\xbc\xb0" => "(\xef\xbc\xb0|\xef\xbd\x90)",
+    "\xef\xbc\xb1" => "(\xef\xbc\xb1|\xef\xbd\x91)",
+    "\xef\xbc\xb2" => "(\xef\xbc\xb2|\xef\xbd\x92)",
+    "\xef\xbc\xb3" => "(\xef\xbc\xb3|\xef\xbd\x93)",
+    "\xef\xbc\xb4" => "(\xef\xbc\xb4|\xef\xbd\x94)",
+    "\xef\xbc\xb5" => "(\xef\xbc\xb5|\xef\xbd\x95)",
+    "\xef\xbc\xb6" => "(\xef\xbc\xb6|\xef\xbd\x96)",
+    "\xef\xbc\xb7" => "(\xef\xbc\xb7|\xef\xbd\x97)",
+    "\xef\xbc\xb8" => "(\xef\xbc\xb8|\xef\xbd\x98)",
+    "\xef\xbc\xb9" => "(\xef\xbc\xb9|\xef\xbd\x99)",
+    "\xef\xbc\xba" => "(\xef\xbc\xba|\xef\xbd\x9a)",
+    "\xf0\x90\x90\x80" => "(\xf0\x90\x90\x80|\xf0\x90\x90\xa8)",
+    "\xf0\x90\x90\x81" => "(\xf0\x90\x90\x81|\xf0\x90\x90\xa9)",
+    "\xf0\x90\x90\x82" => "(\xf0\x90\x90\x82|\xf0\x90\x90\xaa)",
+    "\xf0\x90\x90\x83" => "(\xf0\x90\x90\x83|\xf0\x90\x90\xab)",
+    "\xf0\x90\x90\x84" => "(\xf0\x90\x90\x84|\xf0\x90\x90\xac)",
+    "\xf0\x90\x90\x85" => "(\xf0\x90\x90\x85|\xf0\x90\x90\xad)",
+    "\xf0\x90\x90\x86" => "(\xf0\x90\x90\x86|\xf0\x90\x90\xae)",
+    "\xf0\x90\x90\x87" => "(\xf0\x90\x90\x87|\xf0\x90\x90\xaf)",
+    "\xf0\x90\x90\x88" => "(\xf0\x90\x90\x88|\xf0\x90\x90\xb0)",
+    "\xf0\x90\x90\x89" => "(\xf0\x90\x90\x89|\xf0\x90\x90\xb1)",
+    "\xf0\x90\x90\x8a" => "(\xf0\x90\x90\x8a|\xf0\x90\x90\xb2)",
+    "\xf0\x90\x90\x8b" => "(\xf0\x90\x90\x8b|\xf0\x90\x90\xb3)",
+    "\xf0\x90\x90\x8c" => "(\xf0\x90\x90\x8c|\xf0\x90\x90\xb4)",
+    "\xf0\x90\x90\x8d" => "(\xf0\x90\x90\x8d|\xf0\x90\x90\xb5)",
+    "\xf0\x90\x90\x8e" => "(\xf0\x90\x90\x8e|\xf0\x90\x90\xb6)",
+    "\xf0\x90\x90\x8f" => "(\xf0\x90\x90\x8f|\xf0\x90\x90\xb7)",
+    "\xf0\x90\x90\x90" => "(\xf0\x90\x90\x90|\xf0\x90\x90\xb8)",
+    "\xf0\x90\x90\x91" => "(\xf0\x90\x90\x91|\xf0\x90\x90\xb9)",
+    "\xf0\x90\x90\x92" => "(\xf0\x90\x90\x92|\xf0\x90\x90\xba)",
+    "\xf0\x90\x90\x93" => "(\xf0\x90\x90\x93|\xf0\x90\x90\xbb)",
+    "\xf0\x90\x90\x94" => "(\xf0\x90\x90\x94|\xf0\x90\x90\xbc)",
+    "\xf0\x90\x90\x95" => "(\xf0\x90\x90\x95|\xf0\x90\x90\xbd)",
+    "\xf0\x90\x90\x96" => "(\xf0\x90\x90\x96|\xf0\x90\x90\xbe)",
+    "\xf0\x90\x90\x97" => "(\xf0\x90\x90\x97|\xf0\x90\x90\xbf)",
+    "\xf0\x90\x90\x98" => "(\xf0\x90\x90\x98|\xf0\x90\x91\x80)",
+    "\xf0\x90\x90\x99" => "(\xf0\x90\x90\x99|\xf0\x90\x91\x81)",
+    "\xf0\x90\x90\x9a" => "(\xf0\x90\x90\x9a|\xf0\x90\x91\x82)",
+    "\xf0\x90\x90\x9b" => "(\xf0\x90\x90\x9b|\xf0\x90\x91\x83)",
+    "\xf0\x90\x90\x9c" => "(\xf0\x90\x90\x9c|\xf0\x90\x91\x84)",
+    "\xf0\x90\x90\x9d" => "(\xf0\x90\x90\x9d|\xf0\x90\x91\x85)",
+    "\xf0\x90\x90\x9e" => "(\xf0\x90\x90\x9e|\xf0\x90\x91\x86)",
+    "\xf0\x90\x90\x9f" => "(\xf0\x90\x90\x9f|\xf0\x90\x91\x87)",
+    "\xf0\x90\x90\xa0" => "(\xf0\x90\x90\xa0|\xf0\x90\x91\x88)",
+    "\xf0\x90\x90\xa1" => "(\xf0\x90\x90\xa1|\xf0\x90\x91\x89)",
+    "\xf0\x90\x90\xa2" => "(\xf0\x90\x90\xa2|\xf0\x90\x91\x8a)",
+    "\xf0\x90\x90\xa3" => "(\xf0\x90\x90\xa3|\xf0\x90\x91\x8b)",
+    "\xf0\x90\x90\xa4" => "(\xf0\x90\x90\xa4|\xf0\x90\x91\x8c)",
+    "\xf0\x90\x90\xa5" => "(\xf0\x90\x90\xa5|\xf0\x90\x91\x8d)"
+);

Property changes on: trunk/search/search_convert_ul.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/search/search_modext.php
===================================================================
--- trunk/search/search_modext.php	(nonexistent)
+++ trunk/search/search_modext.php	(revision 2)
@@ -0,0 +1,469 @@
+<?php
+/**
+ *
+ * @category        frontend
+ * @package         search
+ * @author          WebsiteBaker Project
+ * @copyright       2004-2009, Ryan Djurovich
+ * @copyright       2009-2010, Website Baker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.x
+ * @requirements    PHP 4.3.4 and higher
+ * @version         $Id$
+ * @filesource        $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// make the url-string for highlighting
+function make_url_searchstring($search_match, $search_url_array) {
+    $link = "";
+    if ($search_match != 'exact') {
+        $str = implode(" ", $search_url_array);
+        $link = "?searchresult=1&amp;sstring=".urlencode($str);
+    } else {
+        $str = str_replace(' ', '_', $search_url_array[0]);
+        $link = "?searchresult=2&amp;sstring=".urlencode($str);
+    }
+    return $link;
+}
+
+// make date and time for "last modified by... on ..."-string
+function get_page_modified($page_modified_when) {
+    global $TEXT;
+    if($page_modified_when > 0) {
+        $date = gmdate(DATE_FORMAT, $page_modified_when+TIMEZONE);
+        $time = gmdate(TIME_FORMAT, $page_modified_when+TIMEZONE);
+    } else {
+        $date = $TEXT['UNKNOWN'].' '.$TEXT['DATE'];
+        $time = $TEXT['UNKNOWN'].' '.$TEXT['TIME'];
+    }
+    return array($date, $time);
+}
+
+// make username and displayname for "last modified by... on ..."-string
+function get_page_modified_by($page_modified_by, $users) {
+    global $TEXT;
+    if($page_modified_by>0) {
+        $username = $users[$page_modified_by]['username'];
+        $displayname = $users[$page_modified_by]['display_name'];
+    } else {
+        $username = "";
+        $displayname = $TEXT['UNKNOWN'];
+    }
+    return array($username, $displayname);
+}
+
+// checks if _all_ searchwords matches
+function is_all_matched($text, $search_words) {
+    $all_matched = true;
+    foreach ($search_words AS $word) {
+        if(!preg_match('/'.$word.'/i', $text)) {
+            $all_matched = false;
+            break;
+        }
+    }
+    return $all_matched;
+}
+
+// checks if _any_ of the searchwords matches
+function is_any_matched($text, $search_words) {
+    $any_matched = false;
+    $word = '('.implode('|', $search_words).')';
+    if(preg_match('/'.$word.'/i', $text)) {
+        $any_matched = true;
+    }
+    return $any_matched;
+}
+
+// collects the matches from text in excerpt_array
+function get_excerpts($text, $search_words, $max_excerpt_num) {
+    $excerpt_array = FALSE;
+    $word = '('.implode('|', $search_words).')';
+    // start-sign: .!?; + INVERTED EXCLAMATION MARK - INVERTED QUESTION MARK - DOUBLE EXCLAMATION MARK - INTERROBANG - EXCLAMATION QUESTION MARK - QUESTION EXCLAMATION MARK - DOUBLE QUESTION MARK - HALFWIDTH IDEOGRAPHIC FULL STOP - IDEOGRAPHIC FULL STOP - IDEOGRAPHIC COMMA
+    $p_start=".!?;"."\xC2\xA1"."\xC2\xBF"."\xE2\x80\xBC"."\xE2\x80\xBD"."\xE2\x81\x89"."\xE2\x81\x88"."\xE2\x81\x87"."\xEF\xBD\xA1"."\xE3\x80\x82"."\xE3\x80\x81";
+    // stop-sign: .!?; + DOUBLE EXCLAMATION MARK - INTERROBANG - EXCLAMATION QUESTION MARK - QUESTION EXCLAMATION MARK - DOUBLE QUESTION MARK - HALFWIDTH IDEOGRAPHIC FULL STOP - IDEOGRAPHIC FULL STOP - IDEOGRAPHIC COMMA
+    $p_stop=".!?;"."\xE2\x80\xBC"."\xE2\x80\xBD"."\xE2\x81\x89"."\xE2\x81\x88"."\xE2\x81\x87"."\xEF\xBD\xA1"."\xE3\x80\x82"."\xE3\x80\x81";
+    // jump from match to match, get excerpt, stop if $max_excerpt_num is reached
+    $match_array = $matches = array();
+    $startpos = $wordpos = $endpos = 0; // although preg_match with u-switch handles unicode correctly, the ...pos-variables will count bytes (not chars) 
+    while(preg_match("/$word/i", $text, $match_array, PREG_OFFSET_CAPTURE, $startpos)) {
+        $wordpos = $match_array[0][1];
+        $startpos = ($wordpos-200 < $endpos)?$endpos:$wordpos-200;
+        $endpos = $wordpos+200;
+        // look for better start position
+        if(preg_match_all("/[$p_start]/u", substr($text, $startpos, $wordpos-$startpos), $matches, PREG_OFFSET_CAPTURE))
+            $startpos += $matches[0][count($matches[0])-1][1]; // set startpos at last punctuation before word
+        // look for better end position
+        if(preg_match_all("/[$p_stop]/u", substr($text, $wordpos, $endpos-$wordpos), $matches, PREG_OFFSET_CAPTURE))
+            $endpos = $wordpos+$matches[0][0][1]; // set endpos at first punctuation after word
+        $match = substr($text, $startpos+1, $endpos-$startpos);
+        if(!preg_match('/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\./', $match)) // skip excerpts with email-addresses
+            $excerpt_array[] = trim($match);
+        if(count($excerpt_array)>=$max_excerpt_num) {
+            $excerpt_array = array_unique($excerpt_array);
+            if(count($excerpt_array) >= $max_excerpt_num)
+                break;
+        }
+        // restart at last endpos
+        $startpos = $endpos;
+    }
+    return $excerpt_array;
+}
+
+// makes excerpt_array a string ready to print out
+function prepare_excerpts($excerpt_array, $search_words, $max_excerpt_num) {
+    // excerpts: text before and after a single excerpt, html-tag for markup
+    $EXCERPT_BEFORE =       '...&nbsp;';
+    $EXCERPT_AFTER =        '&nbsp;...<br />';
+    $EXCERPT_MARKUP_START = '<b>';
+    $EXCERPT_MARKUP_END =   '</b>';
+    // remove duplicate matches from $excerpt_array, if any.
+    $excerpt_array = array_unique($excerpt_array);
+    // use the first $max_excerpt_num excerpts only
+    if(count($excerpt_array) > $max_excerpt_num) {
+        $excerpt_array = array_slice($excerpt_array, 0, $max_excerpt_num);
+    }
+    // prepare search-string
+    $string = "(".implode("|", $search_words).")";
+    // we want markup on search-results page,
+    // but we need some 'magic' to prevent <br />, <b>... from being highlighted
+    $excerpt = '';
+    foreach($excerpt_array as $str) {
+        $excerpt .= '#,,#'.preg_replace("/($string)/i","#,,,,#$1#,,,,,#",$str).'#,,,#';
+    }
+    $excerpt = str_replace(array('&','<','>','"','\'',"\xC2\xA0"), array('&amp;','&lt;','&gt;','&quot;','&#039;',' '), $excerpt);
+    $excerpt = str_replace(array('#,,,,#','#,,,,,#'), array($EXCERPT_MARKUP_START,$EXCERPT_MARKUP_END), $excerpt);
+    $excerpt = str_replace(array('#,,#','#,,,#'), array($EXCERPT_BEFORE,$EXCERPT_AFTER), $excerpt);
+    // prepare to write out
+    if(DEFAULT_CHARSET != 'utf-8') {
+        $excerpt = umlauts_to_entities($excerpt, 'UTF-8');
+    }
+    return $excerpt;
+}
+
+// work out what the link-anchor should be
+function make_url_target($page_link_target, $text, $search_words) {
+    // 1. e.g. $page_link_target=="&monthno=5&year=2007" - module-dependent target. Do nothing.
+    // 2. $page_link_target=="#!wb_section_..." - the user wants the section-target, so do nothing.
+    // 3. $page_link_target=="#wb_section_..." - try to find a better target, use the section-target as fallback.
+    // 4. $page_link_target=="" - do nothing
+    if(version_compare(PHP_VERSION, '4.3.3', ">=") && substr($page_link_target,0,12)=='#wb_section_') {
+        $word = '('.implode('|', $search_words).')';
+        preg_match('/'.$word.'/i', $text, $match, PREG_OFFSET_CAPTURE);
+        if($match && is_array($match[0])) {
+            $x=$match[0][1]; // position of first match
+            // is there an anchor nearby?
+            if(preg_match_all('/<\s*(?:a[^>]+?name|[^>]+?id)\s*=\s*"([^"]+)"/i', substr($text,0,$x), $match)) {
+                $page_link_target = '#'.$match[1][count($match[1])-1];
+            }
+        }
+    }
+    elseif(substr($page_link_target,0,13)=='#!wb_section_') {
+        $page_link_target = '#'.substr($page_link_target, 2);
+    }
+    
+    // since wb 2.7.1 the section-anchor is configurable - SEC_ANCHOR holds the anchor name
+    if(substr($page_link_target,0,12)=='#wb_section_') {
+        if(defined('SEC_ANCHOR') && SEC_ANCHOR!='') {
+            $sec_id = substr($page_link_target, 12);
+            $page_link_target = '#'.SEC_ANCHOR.$sec_id;
+        } else { // section-anchors are disabled
+            $page_link_target = '';
+        }
+    }
+    
+    return $page_link_target;
+}
+
+// wrapper for compatibility with old print_excerpt()
+function print_excerpt($page_link, $page_link_target, $page_title, $page_description, $page_modified_when, $page_modified_by, $text, $max_excerpt_num, $func_vars, $pic_link="") {
+    $mod_vars = array(
+        'page_link' => $page_link,
+        'page_link_target' => $page_link_target,
+        'page_title' => $page_title,
+        'page_description' => $page_description,
+        'page_modified_when' => $page_modified_when,
+        'page_modified_by' => $page_modified_by,
+        'text' => $text,
+        'max_excerpt_num' => $max_excerpt_num,
+        'pic_link' => $pic_link
+    );
+    print_excerpt2($mod_vars, $func_vars);
+}
+
+/* These functions can be used in module-supplied search_funcs
+ * -----------------------------------------------------------
+ * print_excerpt2() - the main-function to use in all search_funcs
+ * print_excerpt() - wrapper for compatibility-reason. Use print_excerpt2() instead.
+ * list_files_dirs() - lists all files and dirs below a given directory
+ * clear_filelist() - keeps only wanted or removes unwanted entries in file-list.
+ */
+ 
+// prints the excerpts for one section
+function print_excerpt2($mod_vars, $func_vars) {
+    extract($func_vars, EXTR_PREFIX_ALL, 'func');
+    extract($mod_vars, EXTR_PREFIX_ALL, 'mod');
+    global $TEXT;
+    // check $mod_...vars
+    if(!isset($mod_page_link))          $mod_page_link = $func_page_link;
+    if(!isset($mod_page_link_target))   $mod_page_link_target = "";
+    if(!isset($mod_page_title))         $mod_page_title = $func_page_title;
+    if(!isset($mod_page_description))   $mod_page_description = $func_page_description;
+    if(!isset($mod_page_modified_when)) $mod_page_modified_when = $func_page_modified_when;
+    if(!isset($mod_page_modified_by))   $mod_page_modified_by = $func_page_modified_by;
+    if(!isset($mod_text))               $mod_text = "";
+    if(!isset($mod_max_excerpt_num))    $mod_max_excerpt_num = $func_default_max_excerpt;
+    if(!isset($mod_pic_link))           $mod_pic_link = "";
+    if(!isset($mod_no_highlight))       $mod_no_highlight = false;
+    if(!isset($func_enable_flush))      $func_enable_flush = false; // set this in db: wb_search.cfg_enable_flush [READ THE DOC BEFORE]
+    if(isset($mod_ext_charset)) $mod_ext_charset = strtolower($mod_ext_charset);
+    else $mod_ext_charset = '';
+
+    if($mod_text == "") // nothing to do
+        { return false; }
+
+    if($mod_no_highlight) // no highlighting
+        { $mod_page_link_target = "&amp;nohighlight=1".$mod_page_link_target; }
+    // clean the text:
+    $mod_text = preg_replace('#<(br|dt|/dd|/?(?:h[1-6]|tr|table|p|li|ul|pre|code|div|hr))[^>]*>#i', '.', $mod_text);
+    $mod_text = preg_replace('#<(!--.*--|style.*</style|script.*</script)>#iU', ' ', $mod_text);
+    $mod_text = preg_replace('#\[\[.*?\]\]#', '', $mod_text); //Filter droplets from the page data
+    // strip_tags() is called below
+    if($mod_ext_charset!='') { // data from external database may have a different charset
+        require_once(WB_PATH.'/framework/functions-utf8.php');
+        switch($mod_ext_charset) {
+        case 'latin1':
+        case 'cp1252':
+            $mod_text = charset_to_utf8($mod_text, 'CP1252');
+            break;
+        case 'cp1251':
+            $mod_text = charset_to_utf8($mod_text, 'CP1251');
+            break;
+        case 'latin2':
+            $mod_text = charset_to_utf8($mod_text, 'ISO-8859-2');
+            break;
+        case 'hebrew':
+            $mod_text = charset_to_utf8($mod_text, 'ISO-8859-8');
+            break;
+        case 'greek':
+            $mod_text = charset_to_utf8($mod_text, 'ISO-8859-7');
+            break;
+        case 'latin5':
+            $mod_text = charset_to_utf8($mod_text, 'ISO-8859-9');
+            break;
+        case 'latin7':
+            $mod_text = charset_to_utf8($mod_text, 'ISO-8859-13');
+            break;
+        case 'utf8':
+        default:
+            $mod_text = charset_to_utf8($mod_text, 'UTF-8');
+        }
+    } else {
+        $mod_text = entities_to_umlauts($mod_text, 'UTF-8');
+    }
+    $anchor_text = $mod_text; // make an copy containing html-tags
+    $mod_text = strip_tags($mod_text);
+    $mod_text = str_replace(array('&gt;','&lt;','&amp;','&quot;','&#039;','&apos;','&nbsp;'), array('>','<','&','"','\'','\'',' '), $mod_text);
+    $mod_text = '.'.trim($mod_text).'.';
+    // Do a fast scan over $mod_text first. This may speedup things a lot.
+    if($func_search_match == 'all') {
+        if(!is_all_matched($mod_text, $func_search_words))
+            return false;
+    }
+    elseif(!is_any_matched($mod_text, $func_search_words)) {
+        return false;
+    }
+    // search for an better anchor - this have to be done before strip_tags() (may fail if search-string contains <, &, amp, gt, lt, ...)
+    $anchor =  make_url_target($mod_page_link_target, $anchor_text, $func_search_words);
+    // make the link from $mod_page_link, add anchor
+    $link = "";
+    $link = page_link($mod_page_link);
+    if(strpos($mod_page_link, 'http:')===FALSE)
+        $link .= make_url_searchstring($func_search_match, $func_search_url_array);
+    $link .= $anchor;
+
+    // now get the excerpt
+    $excerpt = "";
+    $excerpt_array = array();
+    if($mod_max_excerpt_num > 0) {
+        if(!$excerpt_array = get_excerpts($mod_text, $func_search_words, $mod_max_excerpt_num)) {
+            return false;
+        }
+        $excerpt = prepare_excerpts($excerpt_array, $func_search_words, $mod_max_excerpt_num);
+    }
+    // handle thumbs - to deactivate this look in the module's search.php: $show_thumb (or maybe in the module's settings-page)
+    if($mod_pic_link != "") {
+        if(isset($mod_special) && $mod_special=='lightbox2_plus')
+            $excerpt = '<table class="excerpt_thumb" width="100%" cellspacing="0" cellpadding="0" border="0"><tbody><tr><td width="110" valign="top">'.$mod_special_piclink.'<img src="'.WB_URL.'/'.MEDIA_DIRECTORY.$mod_pic_link.'" alt="" /></a></td><td>'.$excerpt.'</td></tr></tbody></table>';
+        else
+            $excerpt = '<table class="excerpt_thumb" width="100%" cellspacing="0" cellpadding="0" border="0"><tbody><tr><td width="110" valign="top"><a href="'.$link.'"><img src="'.WB_URL.'/'.MEDIA_DIRECTORY.$mod_pic_link.'" alt="" /></a></td><td>'.$excerpt.'</td></tr></tbody></table>';
+    }
+
+    // print-out the excerpt
+    $vars = array();
+    $values = array();
+    list($date, $time) = get_page_modified($mod_page_modified_when);
+    list($username, $displayname) = get_page_modified_by($mod_page_modified_by, $func_users);
+    $vars = array('[LINK]', '[TITLE]','[PAGE_TITLE]' ,'[MENU_TITLE]' , '[DESCRIPTION]', '[USERNAME]','[DISPLAY_NAME]','[DATE]','[TIME]','[TEXT_LAST_UPDATED_BY]','[TEXT_ON]','[EXCERPT]');
+    $values = array(
+        $link,
+        $mod_page_title,
+        $func_page_title,
+        $func_page_menu_title,
+        $mod_page_description,
+        $username,
+        $displayname,
+        $date,
+        $time,
+        $TEXT['LAST_UPDATED_BY'],
+        $TEXT['ON'],
+        $excerpt
+    );
+    echo str_replace($vars, $values, $func_results_loop_string);
+    if($func_enable_flush) { // ATTN: this will bypass output-filters and may break template-layout or -filters
+        ob_flush();flush();
+    }
+    return true;
+}
+
+// list all files and dirs in $dir (recursive), omits '.', '..', and hidden files/dirs
+// returns an array of two arrays ($files[] and $dirs[]).
+// usage: list($files,$dirs) = list_files_dirs($directory);
+//        $depth: get subdirs (true/false)
+function list_files_dirs($dir, $depth=true, $files=array(), $dirs=array()) {
+    $dh=opendir($dir);
+    while(($file = readdir($dh)) !== false) {
+        if($file{0} == '.' || $file == '..') {
+            continue;
+        }
+        if(is_dir($dir.'/'.$file)) {
+            if($depth) {
+                $dirs[] = $dir.'/'.$file;
+                list($files, $dirs) = list_files_dirs($dir.'/'.$file, $depth, $files, $dirs);
+            }
+        } else {
+            $files[] = $dir.'/'.$file;
+        }
+    }
+    closedir($dh);
+    natcasesort($files);
+    natcasesort($dirs);
+    return(array($files, $dirs));
+}
+
+// keeps only wanted entries in array $files. $str have to be an eregi()-compatible regex
+function clear_filelist($files, $str, $keep=true) {
+    // options: $keep = true  : remove all non-matching entries
+    //          $keep = false : remove all matching entries
+    $c_filelist = array();
+    if($str == '')
+        return $files;
+    foreach($files as $file) {
+        if($keep) {
+            if(preg_match("~$str~i", $file)) {
+                $c_filelist[] = $file;
+            }
+        } else {
+            if(!preg_match("~$str~i", $file)) {
+                $c_filelist[] = $file;
+            }
+        }
+    }
+    return($c_filelist);
+}
+
+function search_make_sql_part($words, $match, $columns) {
+    // $words are utf-8 encoded, will be converted to DEFAULT_CHARSET below
+    if(empty($words) || empty($columns)) return('(1=1)');
+    global $database;
+
+    // check if we can use SQL'S "LIKE"
+    // work-around for WB'S missing-SET-NAMES-problem
+    static $checked = FALSE;
+    if($checked===FALSE) {
+        $checked = TRUE;
+        $lowers = array('utf8'=>"\xc3\xa1", 'iso'=>"\xe1");
+        $uppers = array('utf8'=>"\xc3\x81", 'iso'=>"\xc1");
+        switch(DEFAULT_CHARSET) {
+            case 'utf-8':
+                $lo = $lowers['utf8'];
+                $up = $uppers['utf8'];
+                break;
+            case 'iso-8859-1':
+            case 'iso-8859-2':
+            case 'iso-8859-3':
+            case 'iso-8859-4':
+            case 'iso-8859-5':
+            case 'iso-8859-7':
+            case 'iso-8859-9':
+            case 'iso-8859-10':
+                $lo = $lowers['iso'];
+                $up = $uppers['iso'];
+                break;
+            default:
+                $checked = 'check failed'; // we can't handle arabic,hebrew,thai
+        }
+        if($checked===TRUE && $query = $database->query("SELECT UPPER('$lo')='$up'")) {
+            $res = $query->fetchRow();
+            if($res[0]==0) {
+                $checked = 'check failed';
+            }
+        } else
+            $checked = 'check failed';
+    }
+
+    require_once(WB_PATH.'/framework/functions-utf8.php');
+    global $search_table_sql_local;
+    $altnum = count($search_table_sql_local);
+
+    if($match=='all') $op = 'AND';
+    else $op = ' OR'; // keep the leading space!
+
+    // create sql-template
+    $sql = '';
+    $i = 0;
+    foreach($words as $w) {
+        if(empty($w)) continue;
+        $w_alts = $e_alts = array();
+        if($altnum) {
+            for($x=0;$x<$altnum;$x++)
+                $w_alts[$x] = strtr($w, $search_table_sql_local[$x]);
+        } else {
+            $w_alts[0] = $w;
+        }
+        $w_alts = array_unique($w_alts);
+        foreach($w_alts as $a) {
+            $tmp = htmlentities($a, ENT_COMPAT, 'UTF-8');
+            // if the missing-SET-NAMES-issue appears and $tmp contains non-ascii characters: exit and use the normal (slow) search-function instead
+            if($checked!==TRUE && preg_match('/[\x80-\xFF]/', $tmp)) return('(1=1)'); // missing-SET-NAMES-issue
+            $e_alts[] = $tmp;
+        }
+        $sql .= "";
+        foreach($w_alts as $a)
+            $sql .= "{{COL}} LIKE '%".addslashes(utf8_to_charset($a))."%' OR ";
+        if(isset($e_alts[$i]) && $e_alts[$i]!=$w)
+            $sql .= " {{COL}} LIKE '%".addslashes($e_alts[$i])."%'";
+        else {
+            $sql = substr($sql, 0, strlen($sql)-4);
+            $sql .= '';
+        }
+        $sql .= " $op ";
+        $i++;
+    }
+    $sql = substr($sql, 0, strlen($sql)-5);
+    $sql_template = $sql;
+
+    // create SQL-string from template
+    $sql = '(';
+    foreach($columns as $c) {
+        $sql .= '(';
+        $sql .= str_replace('{{COL}}', $c, $sql_template);
+        $sql .= ")  OR ";
+    }
+    $sql = substr($sql, 0, strlen($sql)-4);
+    $sql .= ')';
+
+    return($sql);
+}

Property changes on: trunk/search/search_modext.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/temp/PLACEHOLDER
===================================================================
--- trunk/temp/PLACEHOLDER	(nonexistent)
+++ trunk/temp/PLACEHOLDER	(revision 2)
@@ -0,0 +1 @@
+/* this file can be removed after installation */
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/Helper.inc
===================================================================
--- trunk/templates/DefaultTemplate/Helper.inc	(nonexistent)
+++ trunk/templates/DefaultTemplate/Helper.inc	(revision 2)
@@ -0,0 +1,182 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * SimpleCommandDispatcher.inc
+ *
+ * @category     Addons
+ * @package      Addons_Dispatcher
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      3.0.1
+ * @lastmodified $Date$
+ * @since        File available since 17.12.2015
+ * @description  xyz
+ */
+
+    if (is_readable(dirname(dirname(__DIR__)).'/modules/SimpleRegister.php')){
+      require dirname(dirname(__DIR__)).'/modules/SimpleRegister.php';
+    } else {
+        throw new Exception('Call of an invalid WebsiteBaker Version ['.WB_VERSION.' '.WB_SP.'] failed!');
+    }
+
+    // detect if system running backend or frontend is already set by SimpleRegister
+//    $oApp = (isset($GLOBALS['admin']) ? $GLOBALS['admin'] : $GLOBALS['wb']);.$sAddonName
+    $bIsBackend = ($oReg->App instanceof admin);
+    // set addon depending path / url
+    $sAddonPath = $oReg->AppPath.'';
+    $sAddonUrl  = $oReg->AppUrl.'';
+    $sAddonRel = '/';
+    // define the theme to use -----------------------------------------------------------
+    if (is_readable($sAddonPath.'themes/default')) {
+    // first set fallback to system default theme
+        $sAddonThemePath = $sAddonPath.'themes/default';
+        $sAddonThemeUrl  = $sAddonUrl.'themes/default';
+    }
+    if (is_readable($sAddonPath.'themes/'.$oReg->DefaultTheme)) {
+    // overload with the selected theme if accessible
+        $sAddonThemePath = $sAddonPath.'themes/'.$oReg->DefaultTheme;
+        $sAddonThemeUrl  = $sAddonUrl.'themes/'.$oReg->DefaultTheme;
+    }
+    // define the template to use --------------------------------------------------------
+    if (is_readable($sAddonPath.'templates/default')) {
+        // first set fallback to system default template
+        $sAddonTemplatePath = $sAddonPath.'templates/default';
+        $sAddonTemplateUrl  = $sAddonUrl.'templates/default';
+    }
+    if (is_readable($sAddonPath.'templates/'.$oReg->DefaultTemplate)) {
+        // try setting to the template of global settings
+        $sAddonTemplatePath = $sAddonPath.'templates/'.$oReg->DefaultTemplate;
+        $sAddonTemplateUrl  = $sAddonUrl.'templates/'.$oReg->DefaultTemplate;
+    }
+    if (!$bIsBackend && is_readable($sAddonPath.'/templates/'.$oReg->Template)) {
+        // try setting to the template of page depending settings
+        $sAddonTemplatePath = $sAddonPath.'templates/'.$oReg->Template;
+        $sAddonTemplateUrl  = $sAddonUrl.'templates/'.$oReg->Template;
+    }
+    // load addon depending language file ------------------------------------------------
+    if (is_readable($sAddonPath.'/languages/EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sAddonPath.'/languages/EN.php';
+    }
+    if (is_readable($sAddonPath.'templates/languages/'.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sAddonPath.'templates/languages/'.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sAddonPath.'templates/languages/'.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sAddonPath.'templates/languages/'.$oReg->Language.'.php';
+    }
+    // load addon Theme/Template depending language file ---------------------------------
+    $sTmp = ($bIsBackend ? $sAddonThemePath : $sAddonTemplatePath).'/languages/';
+    if (is_readable($sTmp.'EN.php')) {
+        // first load fallback to system default language (EN)
+        include $sTmp.'EN.php';
+    }
+    if (is_readable($sTmp.$oReg->DefaultLanguage.'.php')) {
+        // try loading language of global settings
+        include $sTmp.$oReg->DefaultLanguage.'.php';
+    }
+    if (is_readable($sTmp.$oReg->Language.'.php')) {
+        // try loading language of user (backend) or page (frontend) defined settings
+        include $sTmp.$oReg->Language.'.php';
+    }
+    // Simple Command Dispatcher ---------------------------------------------------------
+     // Include the ordering class
+    if (!class_exists('order')) {
+    include $oReg->AppPath.'framework/class.order.php';
+    }
+    if (!class_exists('admin')) {
+        include $oReg->AppPath.'framework/class.admin.php';
+    }
+    if (!class_exists('Translate')) {
+        include $oReg->AppPath.'framework/Translate.php';
+    }
+
+//    Translate::getInstance ()->enableAddon ('modules\\'.$sAddonName);
+    // sanitize command from compatibility file
+
+    $sClassDatabaseFile = dirname(__DIR__).'/framework/SP7Database.php';
+    if (!class_exists('database', false) && is_readable($sClassDatabaseFile)){require $sClassDatabaseFile;}
+    $sCommand = (isset($sCommand) ? strtolower($sCommand) : '');
+    // sanitize/validate request var 'cmd'
+    $sCmd = preg_replace(
+        '/[^a-z\/0-1]/siu',
+        '',
+        (isset($_REQUEST['cmd']) ? strtolower($_REQUEST['cmd']) : '')
+    );
+    // build valid sCommand string
+    if (($sCommand && $sCmd)) {
+        if (!preg_match('/^'.$sCommand.'/si', $sCmd)) {
+            // concate both arguments if needed
+            $sCommand .= '/'.$sCmd;
+        } else {
+            $sCommand = $sCmd;
+        }
+    $sCmd = '';
+    }
+    $sCommand = str_replace( // remove spaces and add prefix 'cmd'
+        ' ', '',
+        ucfirst( // make first char of every word to uppercase
+            str_replace( // change '/' to space
+                '/', ' ',
+                preg_replace( // change leading 'add/' to 'modify/'
+                    '/^add\//s',
+                    'modify/',
+                    trim(($sCommand ?: $sCmd), '/') // remove leading and trailing slashes
+                )
+            )
+        )
+    );
+
+/*--------------------------------------------------------------------------------------------------------*/
+    $unixPath = (function ($string){
+      return str_replace('\\', '/', $string);
+    });
+/*--------------------------------------------------------------------------------------------------------*/
+
+/*
+    // execute command -------------------------------------------------------------------
+    if (is_readable($sAddonPath.'/cmd/'.$sCommand.'.inc') ) {
+        include($sAddonPath.'/cmd/'.$sCommand.'.inc');
+    } else {
+        throw new Exception('call of invalid command ['.$sCommand.'] for [modules/'.$sAddonName.'] failed!');
+    }
+//Template
+    $oTpl = new Template($sAddonPath, 'remove');
+    $oTpl->set_file('head', 'backend.css');
+    $oTpl->set_var('TEMPLATE_URL', ($bIsBackend?$sAddonThemeUrl:$sAddonTemplateUrl).'/css/default.css');
+    include $oTpl->parse('output', 'head');
+*/
+
+
+/*
+    echo $sUploadTemplateFile.'<br />';
+    ob_start();
+    include(is_readable($sUploadTemplateFile)?$sUploadTemplateFile:'');
+    $sUploadTemplate     = ob_get_clean();
+
+    $sUploadTemplateFile = $sAddonThemePath.'/FineUpload/templates/gallery.html';
+    $sUploadTemplate     = '';
+    if (is_readable($sUploadTemplateFile)){
+        $sUploadTemplate = file_get_contents($sUploadTemplateFile);
+    }
+*/
+
+// end of file

Property changes on: trunk/templates/DefaultTemplate/Helper.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/css/CookieNotice.css
===================================================================
--- trunk/templates/DefaultTemplate/css/CookieNotice.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/CookieNotice.css	(revision 2)
@@ -0,0 +1,43 @@
+/*
+    Document   : CookieNotice
+    Created on : 04.07.2015, 14:39:54
+    Author     : Manuela v.d.Decken <manuela@isteam.de>
+    Description:
+        Purpose of the stylesheet follows.
+*/
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    format the cookie notice
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#CookieNotice {
+    box-sizing: border-box;
+    position: fixed;
+    left: 0; top: 0; right: 0; bottom: 0;
+    padding: 15px;
+    background-color: rgba(120, 120, 120, 0.6);
+    display: none;
+    z-index: 9999;
+}
+#CookieNoticeBar {
+    position: relative;
+    top: 30%;
+    background-color: rgba(244,239,195,0.8);
+    text-align: center;
+    color: #777;
+    font-size: 0.9em;
+    padding: 6px 4px;
+    border-radius: 6px;
+    border: solid 1px red;
+}
+#CookieNoticeClose {
+    float:right;
+    background: #ff0000;
+    color: #ffffff;
+    font-weight: bold;
+    width: 1.525em;
+    cursor: pointer;
+    border-radius: 4px;
+}
+#CookieNoticeInfo {}
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
Index: trunk/templates/DefaultTemplate/css/contents.css
===================================================================
--- trunk/templates/DefaultTemplate/css/contents.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/contents.css	(revision 2)
@@ -0,0 +1,133 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+
+body
+{
+    /* Font */
+    font-family: sans-serif, Arial, Verdana, "Trebuchet MS";
+    font-size: 12px;
+
+    /* Text color */
+    color: #333;
+
+    /* Remove the background color to make it transparent */
+    background-color: #fff;
+
+    margin: 20px;
+}
+
+.cke_editable
+{
+    font-size: 13px;
+    line-height: 1.6;
+}
+
+blockquote
+{
+    font-style: italic;
+    font-family: Georgia, Times, "Times New Roman", serif;
+    padding: 2px 0;
+    border-style: solid;
+    border-color: #ccc;
+    border-width: 0;
+}
+
+.cke_contents_ltr blockquote
+{
+    padding-left: 20px;
+    padding-right: 8px;
+    border-left-width: 5px;
+}
+
+.cke_contents_rtl blockquote
+{
+    padding-left: 8px;
+    padding-right: 20px;
+    border-right-width: 5px;
+}
+
+a
+{
+    color: #0782C1;
+}
+
+ol,ul,dl
+{
+    /* IE7: reset rtl list margin. (#7334) */
+    *margin-right: 0px;
+    /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/
+    padding: 0 40px;
+}
+
+h1,h2,h3,h4,h5,h6
+{
+    font-weight: normal;
+    line-height: 1.2;
+}
+
+hr
+{
+    border: 0px;
+    border-top: 1px solid #ccc;
+}
+
+img.right
+{
+    border: 1px solid #ccc;
+    float: right;
+    margin-left: 15px;
+    padding: 5px;
+}
+
+img.left
+{
+    border: 1px solid #ccc;
+    float: left;
+    margin-right: 15px;
+    padding: 5px;
+}
+
+pre
+{
+    white-space: pre-wrap; /* CSS 2.1 */
+    word-wrap: break-word; /* IE7 */
+    -moz-tab-size: 4;
+    tab-size: 4;
+}
+
+.marker
+{
+    background-color: Yellow;
+}
+
+span[lang]
+{
+    font-style: italic;
+}
+
+figure
+{
+    text-align: center;
+    border: solid 1px #ccc;
+    border-radius: 2px;
+    background: rgba(0,0,0,0.05);
+    padding: 10px;
+    margin: 10px 20px;
+    display: inline-block;
+}
+
+figure > figcaption
+{
+    text-align: center;
+    display: block; /* For IE8 */
+}
+
+a > img {
+    padding: 1px;
+    margin: 1px;
+    border: none;
+    outline: 1px solid #0782C1;
+}
+
Index: trunk/templates/DefaultTemplate/css/demo.css
===================================================================
--- trunk/templates/DefaultTemplate/css/demo.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/demo.css	(revision 2)
@@ -0,0 +1,215 @@
+@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700);
+@font-face {
+	font-weight: normal;
+	font-style: normal;
+	font-family: 'codropsicons';
+	src:url('../fonts/codropsicons/codropsicons.eot');
+	src:url('../fonts/codropsicons/codropsicons.eot?#iefix') format('embedded-opentype'),
+		url('../fonts/codropsicons/codropsicons.woff') format('woff'),
+		url('../fonts/codropsicons/codropsicons.ttf') format('truetype'),
+		url('../fonts/codropsicons/codropsicons.svg#codropsicons') format('svg');
+}
+
+body {
+	background: #444;
+	color: #48a770;
+	font-weight: 300;
+	font-family: 'Lato', Calibri, Arial, sans-serif;
+}
+
+a, button {
+	outline: none;
+}
+
+a {
+	text-decoration: none;
+	color: #48a770;
+}
+
+a:hover, a:focus {
+	color: #2c774b;
+	outline: none;
+}
+
+/* Clearfix hack by Nicolas Gallagher: http://nicolasgallagher.com/micro-clearfix-hack/ */
+.clearfix:before,
+.clearfix:after {
+	display: table;
+	content: " ";
+}
+
+.clearfix:after {
+	clear: both;
+}
+
+.codrops-header,
+.codrops-top {
+	font-family: 'Lato', Arial, sans-serif;
+}
+
+.codrops-header {
+	margin: 0 auto 3em;
+	padding: 3em;
+	text-align: center;
+}
+
+.codrops-header h1 {
+	margin: 0;
+	font-weight: 300;
+	font-size: 2.625em;
+	line-height: 1.3;
+}
+
+.codrops-header span {
+	display: block;
+	padding: 0 0 0.6em 0.1em;
+	font-size: 60%;
+	color: #aca89a;
+}
+
+/* To Navigation Style */
+.codrops-top {
+	width: 100%;
+	text-transform: uppercase;
+	font-size: 0.69em;
+	line-height: 2.2;
+	font-weight: 400;
+	background: rgba(255,255,255,0.3);
+}
+
+.codrops-top a {
+	display: inline-block;
+	padding: 0 1em;
+	text-decoration: none;
+	letter-spacing: 0.1em;
+}
+
+.codrops-top a:hover {
+	background: rgba(255,255,255,0.4);
+	color: #333;
+}
+
+.codrops-top span.right {
+	float: right;
+}
+
+.codrops-top span.right a {
+	display: block;
+	float: left;
+}
+
+.codrops-icon:before {
+	margin: 0 4px;
+	text-transform: none;
+	font-weight: normal;
+	font-style: normal;
+	font-variant: normal;
+	font-family: 'codropsicons';
+	line-height: 1;
+	speak: none;
+	-webkit-font-smoothing: antialiased;
+}
+
+.codrops-icon-drop:before {
+	content: "\e001";
+}
+
+.codrops-icon-prev:before {
+	content: "\e004";
+}
+
+.main {
+	max-width: 69em;
+	margin: 0 auto;
+}
+
+.column {
+	float: left;
+	width: 50%;
+	padding: 0 2em;
+	min-height: 300px;
+	position: relative;
+	text-align: right;
+}
+
+.column:nth-child(2) {
+	box-shadow: -1px 0 0 rgba(0,0,0,0.1);
+	text-align: left;
+}
+
+.column p {
+	font-weight: 300;
+	font-size: 2em;
+	padding: 0 0 0.5em;
+	margin: 0;
+	line-height: 1.5;
+}
+
+button {
+	border: none;
+	padding: 0.6em 1.2em;
+	background: #388a5a;
+	color: #fff;
+	font-family: 'Lato', Calibri, Arial, sans-serif;
+	font-size: 1em;
+	letter-spacing: 1px;
+	text-transform: uppercase;
+	cursor: pointer;
+	display: inline-block;
+	margin: 3px 2px;
+	border-radius: 2px;
+}
+
+button:hover {
+	background: #2c774b;
+}
+
+.info {
+	text-align: center;
+	font-size: 1.5em;
+	margin-top: 3em;
+	clear: both;
+	padding: 3em 0;
+	opacity: 0.7;
+	color: #aca89a;
+}
+
+.info a {
+	font-weight: 700;
+	font-size: 0.9em;
+}
+
+@media screen and (max-width: 46.0625em) {
+	.column {
+		width: 100%;
+		min-width: auto;
+		min-height: auto;
+		padding: 2em; 
+		text-align: center;
+	}
+
+	.column p {
+		font-size: 1.5em;
+	}
+
+	.column:nth-child(2) {
+		text-align: center;
+		box-shadow: 0 -1px 0 rgba(0,0,0,0.1);
+	}
+}
+
+@media screen and (max-width: 25em) {
+
+	.codrops-header {
+		font-size: 80%;
+	}
+
+	.codrops-top {
+		font-size: 120%;
+	}
+
+	.codrops-icon span {
+		display: none;
+	}
+
+}
Index: trunk/templates/DefaultTemplate/css/editor.css
===================================================================
--- trunk/templates/DefaultTemplate/css/editor.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/editor.css	(revision 2)
@@ -0,0 +1,63 @@
+/**
+ * $Id: editor.css 65 2017-03-03 21:38:16Z manu $
+ * Website Baker template: allcss
+ * This template is one of four basis templates distributed with Website Baker.
+ * Feel free to modify or build up on this template.
+ *
+ * This file contains all CSS definitions required to display the template
+ * in the Website Baker frontend. 
+ *
+ * LICENSE: GNU General Public License
+ * 
+ * @author     Ryan Djurovich, C. Sommer
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.70
+ * @platform   Website Baker 2.7
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+body {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 1.0525em;
+    text-align: left;
+    color: #000;
+    background-color: #FFF;
+    width: 52em;
+}
+a:link, a:visited, a:active {
+    color: #603;
+    text-decoration: none;
+}
+a:hover {
+    color: #936;
+    text-decoration: none;
+}
+hr {
+    margin: 5px 0px 5px 0px;
+    color: #603;
+    border: 0;
+    border-top: 1px solid #603;
+    height: 1px;
+    width: 55em;
+}
+h1, h2, h3, h4, h5, h6 {
+    color: #595959;
+    text-align: left;
+    margin: 8px 2px 8px 2px;
+}
+ h4, h5, h6 { color: #3D829A; }
+pre { color: #3D829A; }
+form {
+    margin: 0;
+}
+
Index: trunk/templates/DefaultTemplate/css/flexnav.css
===================================================================
--- trunk/templates/DefaultTemplate/css/flexnav.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/flexnav.css	(revision 2)
@@ -0,0 +1,75 @@
+
+.menu-button {
+  background: #a6a6a2 none repeat scroll 0 0;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+  color: #222222;
+  cursor: pointer;
+  display: block;
+  padding: 1em;
+  position: relative;
+}
+
+.menu-button .touch-button {
+  background: transparent none repeat scroll 0 0;
+  display: inline-block;
+  height: 50px;
+  position: absolute;
+  right: 0;
+  text-align: center;
+  top: 0;
+  width: 50px;
+  z-index: 999;
+}
+
+.menu-button .touch-button .navicon {
+  color: #666;
+  font-size: 16px;
+  position: relative;
+  top: 1em;
+}
+
+.flexnav li ul li a {
+  background: #b2b2af none repeat scroll 0 0;
+  display: block;
+}
+
+.flexnav li a {
+  background: #a6a6a2 none repeat scroll 0 0;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+  color: #222222;
+  display: block;
+  overflow: hidden;
+  padding: 0.96em;
+  position: relative;
+  z-index: 2;
+}
+
+.flexnav li ul li {
+  font-size: 100%;
+}
+
+.flexnav li {
+  font-size: 100%;
+}
+.flexnav ul li ul li a {
+  background: #bfbfbc none repeat scroll 0 0;
+}
+
+.flexnav li ul li a {
+  background: #b2b2af none repeat scroll 0 0;
+  display: block;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: trunk/templates/DefaultTemplate/css/font-awesome.css
===================================================================
--- trunk/templates/DefaultTemplate/css/font-awesome.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/font-awesome.css	(revision 2)
@@ -0,0 +1,2199 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('../fonts/fontawesome-webfont.eot?v=4.6.3');
+  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+  font-size: 1.33333333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571429em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14285714em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14285714em;
+  width: 2.14285714em;
+  top: 0.14285714em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714286em;
+}
+.fa-border {
+  padding: .2em .25em .15em;
+  border: solid 0.08em #eee;
+  border-radius: .1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa.fa-pull-left {
+  margin-right: .3em;
+}
+.fa.fa-pull-right {
+  margin-left: .3em;
+}
+/* Deprecated as of 4.4.0 */
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left {
+  margin-right: .3em;
+}
+.fa.pull-right {
+  margin-left: .3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+  animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+  animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scale(-1, 1);
+  -ms-transform: scale(-1, 1);
+  transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scale(1, -1);
+  -ms-transform: scale(1, -1);
+  transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-glass:before {
+  content: "\f000";
+}
+.fa-music:before {
+  content: "\f001";
+}
+.fa-search:before {
+  content: "\f002";
+}
+.fa-envelope-o:before {
+  content: "\f003";
+}
+.fa-heart:before {
+  content: "\f004";
+}
+.fa-star:before {
+  content: "\f005";
+}
+.fa-star-o:before {
+  content: "\f006";
+}
+.fa-user:before {
+  content: "\f007";
+}
+.fa-film:before {
+  content: "\f008";
+}
+.fa-th-large:before {
+  content: "\f009";
+}
+.fa-th:before {
+  content: "\f00a";
+}
+.fa-th-list:before {
+  content: "\f00b";
+}
+.fa-check:before {
+  content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+  content: "\f00d";
+}
+.fa-search-plus:before {
+  content: "\f00e";
+}
+.fa-search-minus:before {
+  content: "\f010";
+}
+.fa-power-off:before {
+  content: "\f011";
+}
+.fa-signal:before {
+  content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+  content: "\f013";
+}
+.fa-trash-o:before {
+  content: "\f014";
+}
+.fa-home:before {
+  content: "\f015";
+}
+.fa-file-o:before {
+  content: "\f016";
+}
+.fa-clock-o:before {
+  content: "\f017";
+}
+.fa-road:before {
+  content: "\f018";
+}
+.fa-download:before {
+  content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+  content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+  content: "\f01b";
+}
+.fa-inbox:before {
+  content: "\f01c";
+}
+.fa-play-circle-o:before {
+  content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+  content: "\f01e";
+}
+.fa-refresh:before {
+  content: "\f021";
+}
+.fa-list-alt:before {
+  content: "\f022";
+}
+.fa-lock:before {
+  content: "\f023";
+}
+.fa-flag:before {
+  content: "\f024";
+}
+.fa-headphones:before {
+  content: "\f025";
+}
+.fa-volume-off:before {
+  content: "\f026";
+}
+.fa-volume-down:before {
+  content: "\f027";
+}
+.fa-volume-up:before {
+  content: "\f028";
+}
+.fa-qrcode:before {
+  content: "\f029";
+}
+.fa-barcode:before {
+  content: "\f02a";
+}
+.fa-tag:before {
+  content: "\f02b";
+}
+.fa-tags:before {
+  content: "\f02c";
+}
+.fa-book:before {
+  content: "\f02d";
+}
+.fa-bookmark:before {
+  content: "\f02e";
+}
+.fa-print:before {
+  content: "\f02f";
+}
+.fa-camera:before {
+  content: "\f030";
+}
+.fa-font:before {
+  content: "\f031";
+}
+.fa-bold:before {
+  content: "\f032";
+}
+.fa-italic:before {
+  content: "\f033";
+}
+.fa-text-height:before {
+  content: "\f034";
+}
+.fa-text-width:before {
+  content: "\f035";
+}
+.fa-align-left:before {
+  content: "\f036";
+}
+.fa-align-center:before {
+  content: "\f037";
+}
+.fa-align-right:before {
+  content: "\f038";
+}
+.fa-align-justify:before {
+  content: "\f039";
+}
+.fa-list:before {
+  content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "\f03b";
+}
+.fa-indent:before {
+  content: "\f03c";
+}
+.fa-video-camera:before {
+  content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+  content: "\f03e";
+}
+.fa-pencil:before {
+  content: "\f040";
+}
+.fa-map-marker:before {
+  content: "\f041";
+}
+.fa-adjust:before {
+  content: "\f042";
+}
+.fa-tint:before {
+  content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "\f044";
+}
+.fa-share-square-o:before {
+  content: "\f045";
+}
+.fa-check-square-o:before {
+  content: "\f046";
+}
+.fa-arrows:before {
+  content: "\f047";
+}
+.fa-step-backward:before {
+  content: "\f048";
+}
+.fa-fast-backward:before {
+  content: "\f049";
+}
+.fa-backward:before {
+  content: "\f04a";
+}
+.fa-play:before {
+  content: "\f04b";
+}
+.fa-pause:before {
+  content: "\f04c";
+}
+.fa-stop:before {
+  content: "\f04d";
+}
+.fa-forward:before {
+  content: "\f04e";
+}
+.fa-fast-forward:before {
+  content: "\f050";
+}
+.fa-step-forward:before {
+  content: "\f051";
+}
+.fa-eject:before {
+  content: "\f052";
+}
+.fa-chevron-left:before {
+  content: "\f053";
+}
+.fa-chevron-right:before {
+  content: "\f054";
+}
+.fa-plus-circle:before {
+  content: "\f055";
+}
+.fa-minus-circle:before {
+  content: "\f056";
+}
+.fa-times-circle:before {
+  content: "\f057";
+}
+.fa-check-circle:before {
+  content: "\f058";
+}
+.fa-question-circle:before {
+  content: "\f059";
+}
+.fa-info-circle:before {
+  content: "\f05a";
+}
+.fa-crosshairs:before {
+  content: "\f05b";
+}
+.fa-times-circle-o:before {
+  content: "\f05c";
+}
+.fa-check-circle-o:before {
+  content: "\f05d";
+}
+.fa-ban:before {
+  content: "\f05e";
+}
+.fa-arrow-left:before {
+  content: "\f060";
+}
+.fa-arrow-right:before {
+  content: "\f061";
+}
+.fa-arrow-up:before {
+  content: "\f062";
+}
+.fa-arrow-down:before {
+  content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "\f064";
+}
+.fa-expand:before {
+  content: "\f065";
+}
+.fa-compress:before {
+  content: "\f066";
+}
+.fa-plus:before {
+  content: "\f067";
+}
+.fa-minus:before {
+  content: "\f068";
+}
+.fa-asterisk:before {
+  content: "\f069";
+}
+.fa-exclamation-circle:before {
+  content: "\f06a";
+}
+.fa-gift:before {
+  content: "\f06b";
+}
+.fa-leaf:before {
+  content: "\f06c";
+}
+.fa-fire:before {
+  content: "\f06d";
+}
+.fa-eye:before {
+  content: "\f06e";
+}
+.fa-eye-slash:before {
+  content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+  content: "\f071";
+}
+.fa-plane:before {
+  content: "\f072";
+}
+.fa-calendar:before {
+  content: "\f073";
+}
+.fa-random:before {
+  content: "\f074";
+}
+.fa-comment:before {
+  content: "\f075";
+}
+.fa-magnet:before {
+  content: "\f076";
+}
+.fa-chevron-up:before {
+  content: "\f077";
+}
+.fa-chevron-down:before {
+  content: "\f078";
+}
+.fa-retweet:before {
+  content: "\f079";
+}
+.fa-shopping-cart:before {
+  content: "\f07a";
+}
+.fa-folder:before {
+  content: "\f07b";
+}
+.fa-folder-open:before {
+  content: "\f07c";
+}
+.fa-arrows-v:before {
+  content: "\f07d";
+}
+.fa-arrows-h:before {
+  content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "\f080";
+}
+.fa-twitter-square:before {
+  content: "\f081";
+}
+.fa-facebook-square:before {
+  content: "\f082";
+}
+.fa-camera-retro:before {
+  content: "\f083";
+}
+.fa-key:before {
+  content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+  content: "\f085";
+}
+.fa-comments:before {
+  content: "\f086";
+}
+.fa-thumbs-o-up:before {
+  content: "\f087";
+}
+.fa-thumbs-o-down:before {
+  content: "\f088";
+}
+.fa-star-half:before {
+  content: "\f089";
+}
+.fa-heart-o:before {
+  content: "\f08a";
+}
+.fa-sign-out:before {
+  content: "\f08b";
+}
+.fa-linkedin-square:before {
+  content: "\f08c";
+}
+.fa-thumb-tack:before {
+  content: "\f08d";
+}
+.fa-external-link:before {
+  content: "\f08e";
+}
+.fa-sign-in:before {
+  content: "\f090";
+}
+.fa-trophy:before {
+  content: "\f091";
+}
+.fa-github-square:before {
+  content: "\f092";
+}
+.fa-upload:before {
+  content: "\f093";
+}
+.fa-lemon-o:before {
+  content: "\f094";
+}
+.fa-phone:before {
+  content: "\f095";
+}
+.fa-square-o:before {
+  content: "\f096";
+}
+.fa-bookmark-o:before {
+  content: "\f097";
+}
+.fa-phone-square:before {
+  content: "\f098";
+}
+.fa-twitter:before {
+  content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "\f09a";
+}
+.fa-github:before {
+  content: "\f09b";
+}
+.fa-unlock:before {
+  content: "\f09c";
+}
+.fa-credit-card:before {
+  content: "\f09d";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "\f09e";
+}
+.fa-hdd-o:before {
+  content: "\f0a0";
+}
+.fa-bullhorn:before {
+  content: "\f0a1";
+}
+.fa-bell:before {
+  content: "\f0f3";
+}
+.fa-certificate:before {
+  content: "\f0a3";
+}
+.fa-hand-o-right:before {
+  content: "\f0a4";
+}
+.fa-hand-o-left:before {
+  content: "\f0a5";
+}
+.fa-hand-o-up:before {
+  content: "\f0a6";
+}
+.fa-hand-o-down:before {
+  content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+  content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+  content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+  content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+  content: "\f0ab";
+}
+.fa-globe:before {
+  content: "\f0ac";
+}
+.fa-wrench:before {
+  content: "\f0ad";
+}
+.fa-tasks:before {
+  content: "\f0ae";
+}
+.fa-filter:before {
+  content: "\f0b0";
+}
+.fa-briefcase:before {
+  content: "\f0b1";
+}
+.fa-arrows-alt:before {
+  content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+  content: "\f0c1";
+}
+.fa-cloud:before {
+  content: "\f0c2";
+}
+.fa-flask:before {
+  content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "\f0c5";
+}
+.fa-paperclip:before {
+  content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+  content: "\f0c7";
+}
+.fa-square:before {
+  content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+  content: "\f0c9";
+}
+.fa-list-ul:before {
+  content: "\f0ca";
+}
+.fa-list-ol:before {
+  content: "\f0cb";
+}
+.fa-strikethrough:before {
+  content: "\f0cc";
+}
+.fa-underline:before {
+  content: "\f0cd";
+}
+.fa-table:before {
+  content: "\f0ce";
+}
+.fa-magic:before {
+  content: "\f0d0";
+}
+.fa-truck:before {
+  content: "\f0d1";
+}
+.fa-pinterest:before {
+  content: "\f0d2";
+}
+.fa-pinterest-square:before {
+  content: "\f0d3";
+}
+.fa-google-plus-square:before {
+  content: "\f0d4";
+}
+.fa-google-plus:before {
+  content: "\f0d5";
+}
+.fa-money:before {
+  content: "\f0d6";
+}
+.fa-caret-down:before {
+  content: "\f0d7";
+}
+.fa-caret-up:before {
+  content: "\f0d8";
+}
+.fa-caret-left:before {
+  content: "\f0d9";
+}
+.fa-caret-right:before {
+  content: "\f0da";
+}
+.fa-columns:before {
+  content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+  content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+  content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+  content: "\f0de";
+}
+.fa-envelope:before {
+  content: "\f0e0";
+}
+.fa-linkedin:before {
+  content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+  content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "\f0e4";
+}
+.fa-comment-o:before {
+  content: "\f0e5";
+}
+.fa-comments-o:before {
+  content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+  content: "\f0e7";
+}
+.fa-sitemap:before {
+  content: "\f0e8";
+}
+.fa-umbrella:before {
+  content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+  content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+  content: "\f0eb";
+}
+.fa-exchange:before {
+  content: "\f0ec";
+}
+.fa-cloud-download:before {
+  content: "\f0ed";
+}
+.fa-cloud-upload:before {
+  content: "\f0ee";
+}
+.fa-user-md:before {
+  content: "\f0f0";
+}
+.fa-stethoscope:before {
+  content: "\f0f1";
+}
+.fa-suitcase:before {
+  content: "\f0f2";
+}
+.fa-bell-o:before {
+  content: "\f0a2";
+}
+.fa-coffee:before {
+  content: "\f0f4";
+}
+.fa-cutlery:before {
+  content: "\f0f5";
+}
+.fa-file-text-o:before {
+  content: "\f0f6";
+}
+.fa-building-o:before {
+  content: "\f0f7";
+}
+.fa-hospital-o:before {
+  content: "\f0f8";
+}
+.fa-ambulance:before {
+  content: "\f0f9";
+}
+.fa-medkit:before {
+  content: "\f0fa";
+}
+.fa-fighter-jet:before {
+  content: "\f0fb";
+}
+.fa-beer:before {
+  content: "\f0fc";
+}
+.fa-h-square:before {
+  content: "\f0fd";
+}
+.fa-plus-square:before {
+  content: "\f0fe";
+}
+.fa-angle-double-left:before {
+  content: "\f100";
+}
+.fa-angle-double-right:before {
+  content: "\f101";
+}
+.fa-angle-double-up:before {
+  content: "\f102";
+}
+.fa-angle-double-down:before {
+  content: "\f103";
+}
+.fa-angle-left:before {
+  content: "\f104";
+}
+.fa-angle-right:before {
+  content: "\f105";
+}
+.fa-angle-up:before {
+  content: "\f106";
+}
+.fa-angle-down:before {
+  content: "\f107";
+}
+.fa-desktop:before {
+  content: "\f108";
+}
+.fa-laptop:before {
+  content: "\f109";
+}
+.fa-tablet:before {
+  content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "\f10b";
+}
+.fa-circle-o:before {
+  content: "\f10c";
+}
+.fa-quote-left:before {
+  content: "\f10d";
+}
+.fa-quote-right:before {
+  content: "\f10e";
+}
+.fa-spinner:before {
+  content: "\f110";
+}
+.fa-circle:before {
+  content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "\f112";
+}
+.fa-github-alt:before {
+  content: "\f113";
+}
+.fa-folder-o:before {
+  content: "\f114";
+}
+.fa-folder-open-o:before {
+  content: "\f115";
+}
+.fa-smile-o:before {
+  content: "\f118";
+}
+.fa-frown-o:before {
+  content: "\f119";
+}
+.fa-meh-o:before {
+  content: "\f11a";
+}
+.fa-gamepad:before {
+  content: "\f11b";
+}
+.fa-keyboard-o:before {
+  content: "\f11c";
+}
+.fa-flag-o:before {
+  content: "\f11d";
+}
+.fa-flag-checkered:before {
+  content: "\f11e";
+}
+.fa-terminal:before {
+  content: "\f120";
+}
+.fa-code:before {
+  content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "\f123";
+}
+.fa-location-arrow:before {
+  content: "\f124";
+}
+.fa-crop:before {
+  content: "\f125";
+}
+.fa-code-fork:before {
+  content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+  content: "\f127";
+}
+.fa-question:before {
+  content: "\f128";
+}
+.fa-info:before {
+  content: "\f129";
+}
+.fa-exclamation:before {
+  content: "\f12a";
+}
+.fa-superscript:before {
+  content: "\f12b";
+}
+.fa-subscript:before {
+  content: "\f12c";
+}
+.fa-eraser:before {
+  content: "\f12d";
+}
+.fa-puzzle-piece:before {
+  content: "\f12e";
+}
+.fa-microphone:before {
+  content: "\f130";
+}
+.fa-microphone-slash:before {
+  content: "\f131";
+}
+.fa-shield:before {
+  content: "\f132";
+}
+.fa-calendar-o:before {
+  content: "\f133";
+}
+.fa-fire-extinguisher:before {
+  content: "\f134";
+}
+.fa-rocket:before {
+  content: "\f135";
+}
+.fa-maxcdn:before {
+  content: "\f136";
+}
+.fa-chevron-circle-left:before {
+  content: "\f137";
+}
+.fa-chevron-circle-right:before {
+  content: "\f138";
+}
+.fa-chevron-circle-up:before {
+  content: "\f139";
+}
+.fa-chevron-circle-down:before {
+  content: "\f13a";
+}
+.fa-html5:before {
+  content: "\f13b";
+}
+.fa-css3:before {
+  content: "\f13c";
+}
+.fa-anchor:before {
+  content: "\f13d";
+}
+.fa-unlock-alt:before {
+  content: "\f13e";
+}
+.fa-bullseye:before {
+  content: "\f140";
+}
+.fa-ellipsis-h:before {
+  content: "\f141";
+}
+.fa-ellipsis-v:before {
+  content: "\f142";
+}
+.fa-rss-square:before {
+  content: "\f143";
+}
+.fa-play-circle:before {
+  content: "\f144";
+}
+.fa-ticket:before {
+  content: "\f145";
+}
+.fa-minus-square:before {
+  content: "\f146";
+}
+.fa-minus-square-o:before {
+  content: "\f147";
+}
+.fa-level-up:before {
+  content: "\f148";
+}
+.fa-level-down:before {
+  content: "\f149";
+}
+.fa-check-square:before {
+  content: "\f14a";
+}
+.fa-pencil-square:before {
+  content: "\f14b";
+}
+.fa-external-link-square:before {
+  content: "\f14c";
+}
+.fa-share-square:before {
+  content: "\f14d";
+}
+.fa-compass:before {
+  content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+  content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+  content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+  content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+  content: "\f153";
+}
+.fa-gbp:before {
+  content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+  content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+  content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+  content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+  content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "\f15a";
+}
+.fa-file:before {
+  content: "\f15b";
+}
+.fa-file-text:before {
+  content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+  content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+  content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+  content: "\f160";
+}
+.fa-sort-amount-desc:before {
+  content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+  content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+  content: "\f163";
+}
+.fa-thumbs-up:before {
+  content: "\f164";
+}
+.fa-thumbs-down:before {
+  content: "\f165";
+}
+.fa-youtube-square:before {
+  content: "\f166";
+}
+.fa-youtube:before {
+  content: "\f167";
+}
+.fa-xing:before {
+  content: "\f168";
+}
+.fa-xing-square:before {
+  content: "\f169";
+}
+.fa-youtube-play:before {
+  content: "\f16a";
+}
+.fa-dropbox:before {
+  content: "\f16b";
+}
+.fa-stack-overflow:before {
+  content: "\f16c";
+}
+.fa-instagram:before {
+  content: "\f16d";
+}
+.fa-flickr:before {
+  content: "\f16e";
+}
+.fa-adn:before {
+  content: "\f170";
+}
+.fa-bitbucket:before {
+  content: "\f171";
+}
+.fa-bitbucket-square:before {
+  content: "\f172";
+}
+.fa-tumblr:before {
+  content: "\f173";
+}
+.fa-tumblr-square:before {
+  content: "\f174";
+}
+.fa-long-arrow-down:before {
+  content: "\f175";
+}
+.fa-long-arrow-up:before {
+  content: "\f176";
+}
+.fa-long-arrow-left:before {
+  content: "\f177";
+}
+.fa-long-arrow-right:before {
+  content: "\f178";
+}
+.fa-apple:before {
+  content: "\f179";
+}
+.fa-windows:before {
+  content: "\f17a";
+}
+.fa-android:before {
+  content: "\f17b";
+}
+.fa-linux:before {
+  content: "\f17c";
+}
+.fa-dribbble:before {
+  content: "\f17d";
+}
+.fa-skype:before {
+  content: "\f17e";
+}
+.fa-foursquare:before {
+  content: "\f180";
+}
+.fa-trello:before {
+  content: "\f181";
+}
+.fa-female:before {
+  content: "\f182";
+}
+.fa-male:before {
+  content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "\f184";
+}
+.fa-sun-o:before {
+  content: "\f185";
+}
+.fa-moon-o:before {
+  content: "\f186";
+}
+.fa-archive:before {
+  content: "\f187";
+}
+.fa-bug:before {
+  content: "\f188";
+}
+.fa-vk:before {
+  content: "\f189";
+}
+.fa-weibo:before {
+  content: "\f18a";
+}
+.fa-renren:before {
+  content: "\f18b";
+}
+.fa-pagelines:before {
+  content: "\f18c";
+}
+.fa-stack-exchange:before {
+  content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+  content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+  content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+  content: "\f191";
+}
+.fa-dot-circle-o:before {
+  content: "\f192";
+}
+.fa-wheelchair:before {
+  content: "\f193";
+}
+.fa-vimeo-square:before {
+  content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+  content: "\f195";
+}
+.fa-plus-square-o:before {
+  content: "\f196";
+}
+.fa-space-shuttle:before {
+  content: "\f197";
+}
+.fa-slack:before {
+  content: "\f198";
+}
+.fa-envelope-square:before {
+  content: "\f199";
+}
+.fa-wordpress:before {
+  content: "\f19a";
+}
+.fa-openid:before {
+  content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+  content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+  content: "\f19d";
+}
+.fa-yahoo:before {
+  content: "\f19e";
+}
+.fa-google:before {
+  content: "\f1a0";
+}
+.fa-reddit:before {
+  content: "\f1a1";
+}
+.fa-reddit-square:before {
+  content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+  content: "\f1a3";
+}
+.fa-stumbleupon:before {
+  content: "\f1a4";
+}
+.fa-delicious:before {
+  content: "\f1a5";
+}
+.fa-digg:before {
+  content: "\f1a6";
+}
+.fa-pied-piper-pp:before {
+  content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+  content: "\f1a8";
+}
+.fa-drupal:before {
+  content: "\f1a9";
+}
+.fa-joomla:before {
+  content: "\f1aa";
+}
+.fa-language:before {
+  content: "\f1ab";
+}
+.fa-fax:before {
+  content: "\f1ac";
+}
+.fa-building:before {
+  content: "\f1ad";
+}
+.fa-child:before {
+  content: "\f1ae";
+}
+.fa-paw:before {
+  content: "\f1b0";
+}
+.fa-spoon:before {
+  content: "\f1b1";
+}
+.fa-cube:before {
+  content: "\f1b2";
+}
+.fa-cubes:before {
+  content: "\f1b3";
+}
+.fa-behance:before {
+  content: "\f1b4";
+}
+.fa-behance-square:before {
+  content: "\f1b5";
+}
+.fa-steam:before {
+  content: "\f1b6";
+}
+.fa-steam-square:before {
+  content: "\f1b7";
+}
+.fa-recycle:before {
+  content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "\f1ba";
+}
+.fa-tree:before {
+  content: "\f1bb";
+}
+.fa-spotify:before {
+  content: "\f1bc";
+}
+.fa-deviantart:before {
+  content: "\f1bd";
+}
+.fa-soundcloud:before {
+  content: "\f1be";
+}
+.fa-database:before {
+  content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+  content: "\f1c1";
+}
+.fa-file-word-o:before {
+  content: "\f1c2";
+}
+.fa-file-excel-o:before {
+  content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+  content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+  content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+  content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+  content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "\f1c8";
+}
+.fa-file-code-o:before {
+  content: "\f1c9";
+}
+.fa-vine:before {
+  content: "\f1ca";
+}
+.fa-codepen:before {
+  content: "\f1cb";
+}
+.fa-jsfiddle:before {
+  content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+  content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+  content: "\f1ce";
+}
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+  content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+  content: "\f1d1";
+}
+.fa-git-square:before {
+  content: "\f1d2";
+}
+.fa-git:before {
+  content: "\f1d3";
+}
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+  content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+  content: "\f1d5";
+}
+.fa-qq:before {
+  content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+  content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+  content: "\f1d9";
+}
+.fa-history:before {
+  content: "\f1da";
+}
+.fa-circle-thin:before {
+  content: "\f1db";
+}
+.fa-header:before {
+  content: "\f1dc";
+}
+.fa-paragraph:before {
+  content: "\f1dd";
+}
+.fa-sliders:before {
+  content: "\f1de";
+}
+.fa-share-alt:before {
+  content: "\f1e0";
+}
+.fa-share-alt-square:before {
+  content: "\f1e1";
+}
+.fa-bomb:before {
+  content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+  content: "\f1e3";
+}
+.fa-tty:before {
+  content: "\f1e4";
+}
+.fa-binoculars:before {
+  content: "\f1e5";
+}
+.fa-plug:before {
+  content: "\f1e6";
+}
+.fa-slideshare:before {
+  content: "\f1e7";
+}
+.fa-twitch:before {
+  content: "\f1e8";
+}
+.fa-yelp:before {
+  content: "\f1e9";
+}
+.fa-newspaper-o:before {
+  content: "\f1ea";
+}
+.fa-wifi:before {
+  content: "\f1eb";
+}
+.fa-calculator:before {
+  content: "\f1ec";
+}
+.fa-paypal:before {
+  content: "\f1ed";
+}
+.fa-google-wallet:before {
+  content: "\f1ee";
+}
+.fa-cc-visa:before {
+  content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+  content: "\f1f1";
+}
+.fa-cc-discover:before {
+  content: "\f1f2";
+}
+.fa-cc-amex:before {
+  content: "\f1f3";
+}
+.fa-cc-paypal:before {
+  content: "\f1f4";
+}
+.fa-cc-stripe:before {
+  content: "\f1f5";
+}
+.fa-bell-slash:before {
+  content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+  content: "\f1f7";
+}
+.fa-trash:before {
+  content: "\f1f8";
+}
+.fa-copyright:before {
+  content: "\f1f9";
+}
+.fa-at:before {
+  content: "\f1fa";
+}
+.fa-eyedropper:before {
+  content: "\f1fb";
+}
+.fa-paint-brush:before {
+  content: "\f1fc";
+}
+.fa-birthday-cake:before {
+  content: "\f1fd";
+}
+.fa-area-chart:before {
+  content: "\f1fe";
+}
+.fa-pie-chart:before {
+  content: "\f200";
+}
+.fa-line-chart:before {
+  content: "\f201";
+}
+.fa-lastfm:before {
+  content: "\f202";
+}
+.fa-lastfm-square:before {
+  content: "\f203";
+}
+.fa-toggle-off:before {
+  content: "\f204";
+}
+.fa-toggle-on:before {
+  content: "\f205";
+}
+.fa-bicycle:before {
+  content: "\f206";
+}
+.fa-bus:before {
+  content: "\f207";
+}
+.fa-ioxhost:before {
+  content: "\f208";
+}
+.fa-angellist:before {
+  content: "\f209";
+}
+.fa-cc:before {
+  content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+  content: "\f20b";
+}
+.fa-meanpath:before {
+  content: "\f20c";
+}
+.fa-buysellads:before {
+  content: "\f20d";
+}
+.fa-connectdevelop:before {
+  content: "\f20e";
+}
+.fa-dashcube:before {
+  content: "\f210";
+}
+.fa-forumbee:before {
+  content: "\f211";
+}
+.fa-leanpub:before {
+  content: "\f212";
+}
+.fa-sellsy:before {
+  content: "\f213";
+}
+.fa-shirtsinbulk:before {
+  content: "\f214";
+}
+.fa-simplybuilt:before {
+  content: "\f215";
+}
+.fa-skyatlas:before {
+  content: "\f216";
+}
+.fa-cart-plus:before {
+  content: "\f217";
+}
+.fa-cart-arrow-down:before {
+  content: "\f218";
+}
+.fa-diamond:before {
+  content: "\f219";
+}
+.fa-ship:before {
+  content: "\f21a";
+}
+.fa-user-secret:before {
+  content: "\f21b";
+}
+.fa-motorcycle:before {
+  content: "\f21c";
+}
+.fa-street-view:before {
+  content: "\f21d";
+}
+.fa-heartbeat:before {
+  content: "\f21e";
+}
+.fa-venus:before {
+  content: "\f221";
+}
+.fa-mars:before {
+  content: "\f222";
+}
+.fa-mercury:before {
+  content: "\f223";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "\f224";
+}
+.fa-transgender-alt:before {
+  content: "\f225";
+}
+.fa-venus-double:before {
+  content: "\f226";
+}
+.fa-mars-double:before {
+  content: "\f227";
+}
+.fa-venus-mars:before {
+  content: "\f228";
+}
+.fa-mars-stroke:before {
+  content: "\f229";
+}
+.fa-mars-stroke-v:before {
+  content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+  content: "\f22b";
+}
+.fa-neuter:before {
+  content: "\f22c";
+}
+.fa-genderless:before {
+  content: "\f22d";
+}
+.fa-facebook-official:before {
+  content: "\f230";
+}
+.fa-pinterest-p:before {
+  content: "\f231";
+}
+.fa-whatsapp:before {
+  content: "\f232";
+}
+.fa-server:before {
+  content: "\f233";
+}
+.fa-user-plus:before {
+  content: "\f234";
+}
+.fa-user-times:before {
+  content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+  content: "\f236";
+}
+.fa-viacoin:before {
+  content: "\f237";
+}
+.fa-train:before {
+  content: "\f238";
+}
+.fa-subway:before {
+  content: "\f239";
+}
+.fa-medium:before {
+  content: "\f23a";
+}
+.fa-yc:before,
+.fa-y-combinator:before {
+  content: "\f23b";
+}
+.fa-optin-monster:before {
+  content: "\f23c";
+}
+.fa-opencart:before {
+  content: "\f23d";
+}
+.fa-expeditedssl:before {
+  content: "\f23e";
+}
+.fa-battery-4:before,
+.fa-battery-full:before {
+  content: "\f240";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "\f241";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "\f242";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "\f243";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "\f244";
+}
+.fa-mouse-pointer:before {
+  content: "\f245";
+}
+.fa-i-cursor:before {
+  content: "\f246";
+}
+.fa-object-group:before {
+  content: "\f247";
+}
+.fa-object-ungroup:before {
+  content: "\f248";
+}
+.fa-sticky-note:before {
+  content: "\f249";
+}
+.fa-sticky-note-o:before {
+  content: "\f24a";
+}
+.fa-cc-jcb:before {
+  content: "\f24b";
+}
+.fa-cc-diners-club:before {
+  content: "\f24c";
+}
+.fa-clone:before {
+  content: "\f24d";
+}
+.fa-balance-scale:before {
+  content: "\f24e";
+}
+.fa-hourglass-o:before {
+  content: "\f250";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "\f251";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "\f252";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "\f253";
+}
+.fa-hourglass:before {
+  content: "\f254";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "\f255";
+}
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+  content: "\f256";
+}
+.fa-hand-scissors-o:before {
+  content: "\f257";
+}
+.fa-hand-lizard-o:before {
+  content: "\f258";
+}
+.fa-hand-spock-o:before {
+  content: "\f259";
+}
+.fa-hand-pointer-o:before {
+  content: "\f25a";
+}
+.fa-hand-peace-o:before {
+  content: "\f25b";
+}
+.fa-trademark:before {
+  content: "\f25c";
+}
+.fa-registered:before {
+  content: "\f25d";
+}
+.fa-creative-commons:before {
+  content: "\f25e";
+}
+.fa-gg:before {
+  content: "\f260";
+}
+.fa-gg-circle:before {
+  content: "\f261";
+}
+.fa-tripadvisor:before {
+  content: "\f262";
+}
+.fa-odnoklassniki:before {
+  content: "\f263";
+}
+.fa-odnoklassniki-square:before {
+  content: "\f264";
+}
+.fa-get-pocket:before {
+  content: "\f265";
+}
+.fa-wikipedia-w:before {
+  content: "\f266";
+}
+.fa-safari:before {
+  content: "\f267";
+}
+.fa-chrome:before {
+  content: "\f268";
+}
+.fa-firefox:before {
+  content: "\f269";
+}
+.fa-opera:before {
+  content: "\f26a";
+}
+.fa-internet-explorer:before {
+  content: "\f26b";
+}
+.fa-tv:before,
+.fa-television:before {
+  content: "\f26c";
+}
+.fa-contao:before {
+  content: "\f26d";
+}
+.fa-500px:before {
+  content: "\f26e";
+}
+.fa-amazon:before {
+  content: "\f270";
+}
+.fa-calendar-plus-o:before {
+  content: "\f271";
+}
+.fa-calendar-minus-o:before {
+  content: "\f272";
+}
+.fa-calendar-times-o:before {
+  content: "\f273";
+}
+.fa-calendar-check-o:before {
+  content: "\f274";
+}
+.fa-industry:before {
+  content: "\f275";
+}
+.fa-map-pin:before {
+  content: "\f276";
+}
+.fa-map-signs:before {
+  content: "\f277";
+}
+.fa-map-o:before {
+  content: "\f278";
+}
+.fa-map:before {
+  content: "\f279";
+}
+.fa-commenting:before {
+  content: "\f27a";
+}
+.fa-commenting-o:before {
+  content: "\f27b";
+}
+.fa-houzz:before {
+  content: "\f27c";
+}
+.fa-vimeo:before {
+  content: "\f27d";
+}
+.fa-black-tie:before {
+  content: "\f27e";
+}
+.fa-fonticons:before {
+  content: "\f280";
+}
+.fa-reddit-alien:before {
+  content: "\f281";
+}
+.fa-edge:before {
+  content: "\f282";
+}
+.fa-credit-card-alt:before {
+  content: "\f283";
+}
+.fa-codiepie:before {
+  content: "\f284";
+}
+.fa-modx:before {
+  content: "\f285";
+}
+.fa-fort-awesome:before {
+  content: "\f286";
+}
+.fa-usb:before {
+  content: "\f287";
+}
+.fa-product-hunt:before {
+  content: "\f288";
+}
+.fa-mixcloud:before {
+  content: "\f289";
+}
+.fa-scribd:before {
+  content: "\f28a";
+}
+.fa-pause-circle:before {
+  content: "\f28b";
+}
+.fa-pause-circle-o:before {
+  content: "\f28c";
+}
+.fa-stop-circle:before {
+  content: "\f28d";
+}
+.fa-stop-circle-o:before {
+  content: "\f28e";
+}
+.fa-shopping-bag:before {
+  content: "\f290";
+}
+.fa-shopping-basket:before {
+  content: "\f291";
+}
+.fa-hashtag:before {
+  content: "\f292";
+}
+.fa-bluetooth:before {
+  content: "\f293";
+}
+.fa-bluetooth-b:before {
+  content: "\f294";
+}
+.fa-percent:before {
+  content: "\f295";
+}
+.fa-gitlab:before {
+  content: "\f296";
+}
+.fa-wpbeginner:before {
+  content: "\f297";
+}
+.fa-wpforms:before {
+  content: "\f298";
+}
+.fa-envira:before {
+  content: "\f299";
+}
+.fa-universal-access:before {
+  content: "\f29a";
+}
+.fa-wheelchair-alt:before {
+  content: "\f29b";
+}
+.fa-question-circle-o:before {
+  content: "\f29c";
+}
+.fa-blind:before {
+  content: "\f29d";
+}
+.fa-audio-description:before {
+  content: "\f29e";
+}
+.fa-volume-control-phone:before {
+  content: "\f2a0";
+}
+.fa-braille:before {
+  content: "\f2a1";
+}
+.fa-assistive-listening-systems:before {
+  content: "\f2a2";
+}
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+  content: "\f2a3";
+}
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+  content: "\f2a4";
+}
+.fa-glide:before {
+  content: "\f2a5";
+}
+.fa-glide-g:before {
+  content: "\f2a6";
+}
+.fa-signing:before,
+.fa-sign-language:before {
+  content: "\f2a7";
+}
+.fa-low-vision:before {
+  content: "\f2a8";
+}
+.fa-viadeo:before {
+  content: "\f2a9";
+}
+.fa-viadeo-square:before {
+  content: "\f2aa";
+}
+.fa-snapchat:before {
+  content: "\f2ab";
+}
+.fa-snapchat-ghost:before {
+  content: "\f2ac";
+}
+.fa-snapchat-square:before {
+  content: "\f2ad";
+}
+.fa-pied-piper:before {
+  content: "\f2ae";
+}
+.fa-first-order:before {
+  content: "\f2b0";
+}
+.fa-yoast:before {
+  content: "\f2b1";
+}
+.fa-themeisle:before {
+  content: "\f2b2";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "\f2b3";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "\f2b4";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
Index: trunk/templates/DefaultTemplate/css/font-awesome.min.css
===================================================================
--- trunk/templates/DefaultTemplate/css/font-awesome.min.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/font-awesome.min.css	(revision 2)
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/css/normalize.css
===================================================================
--- trunk/templates/DefaultTemplate/css/normalize.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/normalize.css	(revision 2)
@@ -0,0 +1,431 @@
+/*! normalize.css 2011-09-22T17:42 UTC - http://github.com/necolas/normalize.css */
+
+/* =============================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/*
+ * Corrects block display not defined in IE6/7/8/9 & FF3
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+    display: block;
+}
+
+/*
+ * Corrects inline-block display not defined in IE6/7/8/9 & FF3
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+    *display: inline;
+    *zoom: 1;
+}
+
+/*
+ * Prevents modern browsers from displaying 'audio' without controls
+ */
+
+audio:not([controls]) {
+    display: none;
+}
+
+/*
+ * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
+ * Known issue: no IE6 support
+ */
+
+[hidden] {
+    display: none;
+}
+
+
+/* =============================================================================
+   Base
+   ========================================================================== */
+
+/*
+ * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
+ *    http://clagnut.com/blog/348/#c790
+ * 2. Keeps page centred in all browsers regardless of content height
+ * 3. Prevents iOS text size adjust after orientation change, without disabling user zoom
+ *    www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
+ */
+
+html {
+    font-size: 100%; /* 1 */
+    overflow-y: scroll; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 3 */
+    -ms-text-size-adjust: 100%; /* 3 */
+}
+
+/*
+ * Addresses margins handled incorrectly in IE6/7
+ */
+
+body {
+    margin: 0;
+}
+
+/* 
+ * Addresses font-family inconsistency between 'textarea' and other form elements.
+ */
+
+body,
+button,
+input,
+select,
+textarea {
+    font-family: sans-serif;
+}
+
+
+/* =============================================================================
+   Links
+   ========================================================================== */
+
+a {
+    color: #00e;
+}
+
+a:visited {
+    color: #551a8b;
+}
+
+/*
+ * Addresses outline displayed oddly in Chrome
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/*
+ * Improves readability when focused and also mouse hovered in all browsers
+ * people.opera.com/patrickl/experiments/keyboard/test
+ */
+
+a:hover,
+a:active {
+    outline: 0;
+}
+
+
+/* =============================================================================
+   Typography
+   ========================================================================== */
+
+/*
+ * Addresses styling not present in IE7/8/9, S5, Chrome
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/*
+ * Addresses style set to 'bolder' in FF3/4, S4/5, Chrome
+*/
+
+b, 
+strong { 
+    font-weight: bold; 
+}
+
+blockquote {
+    margin: 1em 40px;
+}
+
+/*
+ * Addresses styling not present in S5, Chrome
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/*
+ * Addresses styling not present in IE6/7/8/9
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/*
+ * Corrects font family set oddly in IE6, S4/5, Chrome
+ * en.wikipedia.org/wiki/User:Davidgothberg/Test59
+ */
+
+pre,
+code,
+kbd,
+samp {
+    font-family: monospace, serif;
+    _font-family: 'courier new', monospace;
+    font-size: 1em;
+}
+
+/*
+ * Improves readability of pre-formatted text in all browsers
+ */
+
+pre {
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+/*
+ * 1. Addresses CSS quotes not supported in IE6/7
+ * 2. Addresses quote property not supported in S4
+ */
+
+/* 1 */
+
+q {
+    quotes: none;
+}
+
+/* 2 */
+
+q:before,
+q:after {
+    content: '';
+    content: none;
+}
+
+small {
+    font-size: 75%;
+}
+
+/*
+ * Prevents sub and sup affecting line-height in all browsers
+ * gist.github.com/413930
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+
+/* =============================================================================
+   Lists
+   ========================================================================== */
+
+ul,
+ol {
+    margin: 1em 0;
+    padding: 0 0 0 40px;
+}
+
+dd {
+    margin: 0 0 0 40px;
+}
+
+nav ul,
+nav ol {
+    list-style: none;
+    list-style-image: none;
+}
+
+
+/* =============================================================================
+   Embedded content
+   ========================================================================== */
+
+/*
+ * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
+ * 2. Improves image quality when scaled in IE7
+ *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
+ */
+
+img {
+    border: 0; /* 1 */
+    -ms-interpolation-mode: bicubic; /* 2 */
+}
+
+/*
+ * Corrects overflow displayed oddly in IE9 
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+
+/* =============================================================================
+   Figures
+   ========================================================================== */
+
+/*
+ * Addresses margin not present in IE6/7/8/9, S5, O11
+ */
+
+figure {
+    margin: 0;
+}
+
+
+/* =============================================================================
+   Forms
+   ========================================================================== */
+
+/*
+ * Corrects margin displayed oddly in IE6/7
+ */
+
+form {
+    margin: 0;
+}
+
+/*
+ * Define consistent border, margin, and padding
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/*
+ * 1. Corrects color not being inherited in IE6/7/8/9
+ * 2. Corrects alignment displayed oddly in IE6/7
+ */
+
+legend {
+    border: 0; /* 1 */
+    *margin-left: -7px; /* 2 */
+}
+
+/*
+ * 1. Corrects font size not being inherited in all browsers
+ * 2. Addresses margins set differently in IE6/7, FF3/4, S5, Chrome
+ * 3. Improves appearance and consistency in all browsers
+ */
+
+button,
+input,
+select,
+textarea {
+    font-size: 100%; /* 1 */
+    margin: 0; /* 2 */
+    vertical-align: baseline; /* 3 */
+    *vertical-align: middle; /* 3 */
+}
+
+/*
+ * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
+ */
+
+button,
+input {
+    line-height: normal; /* 1 */
+}
+
+/*
+ * 1. Improves usability and consistency of cursor style between image-type 'input' and others
+ * 2. Corrects inability to style clickable 'input' types in iOS
+ * 3. Corrects inner spacing displayed oddly in IE7 without effecting normal text inputs
+ *    Known issue: inner spacing remains in IE6
+ */
+
+button,
+input[type="button"], 
+input[type="reset"], 
+input[type="submit"] {
+    cursor: pointer; /* 1 */
+    -webkit-appearance: button; /* 2 */
+    *overflow: visible;  /* 3 */
+}
+
+/*
+ * 1. Addresses box sizing set to content-box in IE8/9
+ * 2. Addresses excess padding in IE8/9
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/*
+ * 1. Addresses appearance set to searchfield in S5, Chrome
+ * 2. Addresses box sizing set to border-box in S5, Chrome (include -moz to future-proof)
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/*
+ * Corrects inner padding displayed oddly in S5, Chrome on OSX
+ */
+
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/*
+ * Corrects inner padding and border displayed oddly in FF3/4
+ * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/*
+ * 1. Removes default vertical scrollbar in IE6/7/8/9
+ * 2. Improves readability and alignment in all browsers
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+
+/* =============================================================================
+   Tables
+   ========================================================================== */
+
+/* 
+ * Remove most spacing between table cells
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
Index: trunk/templates/DefaultTemplate/css/print.css
===================================================================
--- trunk/templates/DefaultTemplate/css/print.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/print.css	(revision 2)
@@ -0,0 +1,65 @@
+body,td,th {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 16px;
+    color: #000000;
+}
+body {
+    background-color: #FFFFFF;
+    margin: 0px;
+}
+a:link, a:visited, a:active {
+    color: #660033;
+    text-decoration: none;
+}
+a:hover {
+    color: #993366;
+    text-decoration: none;
+}
+hr {
+    margin: 15px 0px 15px 0px;
+    color: #660033;
+    height: 1px;
+    width: 100%;
+}
+h1 {
+    font-size: 15px;
+    color: #993366;
+    margin: 5px 0px 5px 0px;
+}
+form {
+    margin: 0;
+}
+.main {
+    width: 100%;
+    margin: 0;
+    padding: 0;
+}
+header,
+.banner {
+    display: none;
+}
+#lang,
+.search_box {
+    display: none;
+}
+#left-col,
+.teasera,
+.menu {
+    display: none;
+}
+.menu ul, .menu li {
+    display: none;
+}
+.login_table {
+    display: none;
+}
+.content {
+    margin: 0;
+    text-align: justify;
+}
+.footer,
+.powered_by {
+    clear: both;
+    display: none;
+}
+
Index: trunk/templates/DefaultTemplate/css/reset.css
===================================================================
--- trunk/templates/DefaultTemplate/css/reset.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/reset.css	(revision 2)
@@ -0,0 +1,48 @@
+/* http://meyerweb.com/eric/tools/css/reset/ 
+   v2.0 | 20110126
+   License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed, 
+figure, figcaption, footer, header, hgroup, 
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	font-size: 100%;
+	font: inherit;
+	vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure, 
+footer, header, hgroup, menu, nav, section {
+	display: block;
+}
+body {
+	line-height: 1;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: '';
+	content: none;
+}
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/css/responsive.css
===================================================================
--- trunk/templates/DefaultTemplate/css/responsive.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/responsive.css	(revision 2)
@@ -0,0 +1,103 @@
+/** Allgemeine Formatierungen *
+
+body {
+    color: white;
+    font-family: "Arial", sans-serif;
+    font-size: 14px;
+    text-transform: uppercase;
+    margin: 0px;
+}
+ */
+
+/** Formatierung für mobile Ansicht **/
+
+/** Navigation wird als vertikale Liste über die komplette Breite dargestellt **/
+
+nav {
+    display: none;
+}
+
+nav ul {
+     padding: 0px;
+     margin: 0px;
+     width: 100%;
+}
+ 
+nav ul li {
+    list-style: none;
+    padding: 20px 10px;
+    border: 1px solid white;
+    background: #b0d4e3; /* Old browsers */
+    background: -moz-linear-gradient(top, #b0d4e3 0%, #88bacf 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b0d4e3), color-stop(100%,#88bacf)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, #b0d4e3 0%,#88bacf 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #b0d4e3 0%,#88bacf 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, #b0d4e3 0%,#88bacf 100%); /* IE10+ */
+    background: linear-gradient(to bottom, #b0d4e3 0%,#88bacf 100%); /* W3C */
+}
+
+
+/** Anpassungen Checkbox+Label (Button) **/
+
+input#open-menu {
+    display: none;
+}
+
+input[type=checkbox]:checked ~ nav {
+    display: block;
+}
+    
+label.open-menu-label {
+    background: #63b6db; /* Old browsers */
+    background: -moz-linear-gradient(top, #63b6db 0%, #309dcf 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#63b6db), color-stop(100%,#309dcf)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* IE10+ */
+    background: linear-gradient(to bottom, #63b6db 0%,#309dcf 100%); /* W3C */
+    padding: 20px 10px;
+    border: 1px solid white;
+    display: block;
+
+}
+
+
+/** Formatierung für Tablet und Desktopansicht **/
+
+@media only screen and (min-width: 760px) {
+
+    /** Navigation wird als einfarbiger, horizontaler Balken dargestellt **/
+    
+    nav {
+        display: block;
+        text-align: center;
+        padding: 20px;
+        background: #63b6db; /* Old browsers */
+        background: -moz-linear-gradient(top, #63b6db 0%, #309dcf 100%); /* FF3.6+ */
+        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#63b6db), color-stop(100%,#309dcf)); /* Chrome,Safari4+ */
+        background: -webkit-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Chrome10+,Safari5.1+ */
+        background: -o-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Opera 11.10+ */
+        background: -ms-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* IE10+ */
+        background: linear-gradient(to bottom, #63b6db 0%,#309dcf 100%); /* W3C */
+    }
+    
+    nav ul li {
+        display:inline;
+        width: 25%;
+        border: 1px solid white;
+        background: #63b6db; /* Old browsers */
+        background: -moz-linear-gradient(top, #63b6db 0%, #309dcf 100%); /* FF3.6+ */
+        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#63b6db), color-stop(100%,#309dcf)); /* Chrome,Safari4+ */
+        background: -webkit-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Chrome10+,Safari5.1+ */
+        background: -o-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* Opera 11.10+ */
+        background: -ms-linear-gradient(top, #63b6db 0%,#309dcf 100%); /* IE10+ */
+        background: linear-gradient(to bottom, #63b6db 0%,#309dcf 100%); /* W3C */
+    }
+    
+    /** Label wird ausgeblendet **/
+    label.open-menu-label {
+        display: none;
+    }
+}
+
+
Index: trunk/templates/DefaultTemplate/css/screen.css
===================================================================
--- trunk/templates/DefaultTemplate/css/screen.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/screen.css	(revision 2)
@@ -0,0 +1,295 @@
+@charset "utf-8";
+/* Block-Darstellung für HTML5-Elemente im IE8 */
+@import url('normalize.css');
+/*  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome */
+@import url('font-awesome.css');
+/***********************************************/
+* html body * { overflow: visible; }
+* html div{ height: 1em; }
+html { overflow: -moz-scrollbars-vertical; }
+html { color: #404040; font-family: Verdana,"Trebuchet MS",Arial,Helvetica,sans-serif; font-size: 100.1%; font-weight: normal; overflow-x: auto; overflow-y: scroll; }
+* { box-sizing: border-box; }
+*::before, *::after { box-sizing: border-box; }
+body.allcssRes { background-size: cover; margin: 0; -moz-background-size: cover; -webkit-background-size: cover; }
+/***********************************************/
+#allcssRes-wrapper { background-color: #FFFFFF; background-image: url(../images/background.jpg); margin: 0 auto; padding: 0; }
+#allcssRes-wrapper header { background-color: #FFFFFF; /* margin-bottom: 20px;*/ display: none; width: 100%; /* height: 100px;*/ }
+#allcssRes-wrapper .banner { display: none; float: left; font-size: 1.025em; padding-left: 20px; /* width: 530px;*/ text-align: left; }
+#allcssRes-wrapper .banner, #allcssRes-wrapper .search_box { color: #FFF; font-weight: bold; height: 70px; padding: 20px 20px 0 0; text-align: left; }
+#allcssRes-wrapper .banner span { color: #D0D0D0; }
+#allcssRes-wrapper .banner  a { color: #FFF !important; }
+/******************************/
+#allcssRes-wrapper div#langmenu .anchor { margin: 0.125em auto; position: relative; }
+#allcssRes-wrapper div#langmenu { padding: 0 1.5525em; margin: 0.925em; width: 98%; text-align: left;}
+#allcssRes-wrapper div#langmenu img { border: 0; }
+/******************************/
+#allcssRes-wrapper #left-col { float: none; margin: 0.025em 0; }
+#allcssRes-wrapper .main-content { margin: 0.025em auto auto 1%; width: 100%; }
+#allcssRes-wrapper .main-content { padding: 0 1.525em; }
+#allcssRes-wrapper .section { margin: 0.225em auto; overflow: hidden; }
+#allcssRes-wrapper footer { background-color: transparent; clear: both; width: 100%; }
+#allcssRes-wrapper .content { clear: right; padding: 0; }
+#allcssRes-wrapper .footer { background-color: #FFF; clear: both; color: #666; font-size: 0.825em;  }
+body.allcssRes div.powered_by { font-size: 1.125em; padding-top: 2px; text-align: center;position: relative; }
+/******************************/
+#allcssRes-wrapper #content { background-color: transparent; margin-bottom: 20px; width: 99%; }
+#allcssRes-wrapper img { height: auto; max-width: 100%; }
+#allcssRes-wrapper span.title { font-size: 1.325em; color: #FFF !important; float: left; }
+#allcssRes-wrapper h1, .h1 { font-size: 1.525em; }
+#allcssRes-wrapper h2, .h2 { font-size: 1.325em; }
+#allcssRes-wrapper h3, .h3 { font-size: 1.225em;}
+#allcssRes-wrapper li {}
+#allcssRes-wrapper p, .p { font-size: 1.2525em; }
+#allcssRes-wrapper form { position: relative; }
+#allcssRes-wrapper form.account { width: 100%; }
+#allcssRes-wrapper a:link, #allcssRes-wrapper a:visited, #allcssRes-wrapper a:active { color: #1E576D; font-weight: bold; text-decoration: none; }
+#allcssRes-wrapper a:hover { color: #AFABAD; text-decoration: none; }
+/******************************/
+#allcssRes-wrapper .menu { font-size: 101%; margin: 0.9225em 0; font-weight: bold; }
+#allcssRes-wrapper .menu,
+#allcssRes ~ nav .menu ul,
+#allcssRes ~ nav .menu li { width: 100%;  }
+#allcssRes-wrapper .menu ul, #allcssRes-wrapper .menu li { list-style: none; margin: 0;  padding: 0; }
+#allcssRes-wrapper .menu li { line-height: 2.0525; border-bottom: 0.0em dashed; border-top: 0.025em dashed; margin-top: 0.525em; }
+#allcssRes-wrapper .menu ul ul { padding-left: 1.225em; }
+
+#allcssRes-wrapper .menu a:link, #allcssRes-wrapper .menu a:visited, #allcssRes-wrapper .menu a:active, #allcssRes-wrapper .menu a:hover { color: #323232; display: block; padding: 2px; padding-left: 0.325em; }
+#allcssRes-wrapper .menu-default a:link, #allcssRes-wrapper .menu-default a:visited, #allcssRes-wrapper .menu-default a:active {  }
+#allcssRes-wrapper .menu-default a:hover { background: #F9D5A8; color: #5E5C5C; opacity: 0.9; }
+#allcssRes-wrapper .menu-current { background: #D2BA9B; color: #414140 !important; font-weight: normal; }
+
+#allcssRes-wrapper .menu fieldset { margin-bottom: 5px; margin-top: 20px; /* border: 0px solid #D0D0D0;*/ padding-bottom: 3px; text-align: center; }
+#allcssRes-wrapper .menu legend { color: #603; font-weight: bold; text-align: center; text-transform: uppercase; }
+#allcssRes-wrapper .menu fieldset label{ min-width: 6.5em; }
+
+/*******************************************/
+.btn { -moz-user-select: none; border: 1px solid transparent; border-radius: 4px; cursor: pointer; display: inline-block; font-size: 14px; font-weight: normal; line-height: 1.42857; margin-bottom: 0; padding: 6px 12px; vertical-align: middle; white-space: nowrap; }
+.btn-lg, .btn-group-lg > .btn { border-radius: 6px; font-size: 18px; line-height: 1.33333; padding: 10px 16px; }
+.btn-default { border-color: #CCCCCC; color: #333333; background: #DFDFDF; }
+.btn-primary { background-color: #337ab7; border-color: #2e6da4; color: #fff; }
+.btn-danger { border-color: #D43F3A; color: #FFFFFF; background: #D9534F; }
+.btn-success { border-color: #2C8B39; color: #FFFFFF; background: #3ECD31; }
+.hide { display: none; }
+/*******************************************/
+
+.rounded {  }
+.block-inner {
+  margin-bottom: 25px;
+  overflow: hidden;
+  padding: 3px 3px 0;
+}
+.outer-box {
+  margin-bottom: 25px;
+  overflow: hidden;
+  padding: 3px 12px;
+}
+.round-top-left { border-top-left-radius: 0; }
+.round-top-right { border-top-right-radius: 0; }
+
+/*******************************************/
+.login-box {display: none; }
+.login-box { width: 100%; }
+.login-box form { width: 100%; }
+.login-box form fieldset { border: none; }
+.login-box form fieldset p input { width: 100% !important; }
+.login-box ul { font-size: 101%; width: 100%; list-style: none; }
+.login-box ul li { line-height: 1.925em; border-bottom: 1px dashed #333; }
+.login-box ul li a:link { padding: 0.225em 0.125em; color: #4B4A4A !important; }
+.login-box ul li:hover { background: #F9D5A8; }
+/*******************************************/
+table.account tr { line-height: 2.525; }
+
+/** Anpassungen Checkbox+Label (Button) **/
+#allcssRes-wrapper input#open-menu { display: none;}
+#allcssRes-wrapper label.open-menu-label span { font-size: 200%; cursor: pointer; color: #72DC4C; }
+#allcssRes-wrapper input[type=checkbox]:checked + label.open-menu-label span { color: #DD1717; }
+/** Anpassungen Checkbox+Label (Button) **/
+#allcssRes-wrapper label.open-menu-label {
+  background: #63b6db; /* Old browsers */
+  background: -moz-linear-gradient(top, #931921 0%, #571116 100%); /* FF3.6+ */
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#931921), color-stop(100%,#571116)); /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top, #931921 0%,#571116 100%); /* Chrome10+,Safari5.1+ */
+  background: -o-linear-gradient(top, #933919 0%,#571116 100%); /* Opera 11.10+ */
+  background: -ms-linear-gradient(top, #933919 0%,#571116 100%); /* IE10+ */
+  background: linear-gradient(to bottom, #931921 0%,#571116 100%); /* W3C */
+  border: 1px solid white;
+  display:  block;
+  text-align: right;
+  padding: 20px 10px;
+  z-index: 10;
+}
+/** Navigation wird als einfarbiger, horizontaler Balken dargestellt **/
+#allcssRes-wrapper nav {
+  background-color: #FBE1C1;
+  background-color: rgba(248, 218, 183, 1);
+  margin-bottom: 20px; min-width: 27.525%;
+  position: relative;
+  width: 100%;
+  z-index: 20;
+}
+
+/** Formatierung für mobile Ansicht > div ~ nav  **/
+#allcssRes-wrapper nav { display: none; padding: 0; }
+#allcssRes-wrapper input[type=checkbox]:checked + label + div + div > div > nav { display: block; }
+
+/**/
+.onclick-menu-content { position: absolute; z-index: 1; /* use opacity to fake immediate toggle */ opacity: 0; visibility: hidden; transition: visibility 0.5s; }
+/** Formatierung für Tablet und Desktopansicht **/
+@media only screen and (min-width: 320px) {
+    .dummy {}
+/******************************/
+  #allcssRes-wrapper .search_box { padding: 1.525em; vertical-align: middle; }
+}
+
+@media only screen and (min-width:800px){
+    .dummy {}
+/******************************/
+    body.allcssRes {  background-size: cover; margin: 0; -moz-background-size: cover; -webkit-background-size: cover; }
+    #allcssRes-wrapper {
+      background-color: #E3DCBE;
+      background-image: url("../images/background.jpg");
+      margin: 2.225em auto 0;
+      max-width: 68em;
+      padding: 0.225%;
+    }
+    #allcssRes-wrapper header { display: block; }
+    #allcssRes-wrapper .banner { display: block; }
+    #allcssRes-wrapper #left-col { float: left; width: 28%; position: relative; overflow: hidden; padding: 0 0.925em; margin: 0; }
+    #allcssRes-wrapper .banner { margin-left: 1%; width: 63%; }
+    #allcssRes-wrapper .main-content { margin: 0.025em auto auto 28%; width: 72%; }
+    #allcssRes-wrapper .main-content { margin-left: 28%; padding: 0 1.525em; display: table; }
+    #allcssRes-wrapper .search_box { padding-left: 40%; }
+    #allcssRes-wrapper div#langmenu { text-align: left !important; padding-left: 1% !important; position: relative; }
+    .login-box {display: block; }
+
+/******************************/
+    #allcssRes-wrapper h1, .h1 { font-size: 1.4525em; }
+    #allcssRes-wrapper h2, .h2 { font-size: 1.125em; }
+    #allcssRes-wrapper li,
+    #allcssRes-wrapper p, .p { font-size: 1.0525em; }
+    body.allcssRes div#langmenu { padding-left: 1%; }
+    #allcssRes-wrapper .content { clear: right; padding: 4px 10px 14px; }
+/*******************************************/
+    .rounded { border-radius: 0.225em; -khtml-border-radius:0.225em; -moz-border-radius: 0.225em; -webkit-border-radius: 0.225em; }
+    .block-inner {
+      border: 1px solid #DEE5F8;
+      border-radius: 0.525em;
+      box-shadow: 1px 1px 25px #0E4B77;
+      margin-bottom: 25px;
+      overflow: hidden;
+      padding: 3px 3px 0;
+    }
+    .outer-box {
+      border: 1px solid #DEE5F8;
+      border-radius: 0.925em;
+      box-shadow: 1px 1px 3px #4E4E4E;
+      margin-bottom: 25px;
+      overflow: hidden;
+      padding: 3px 12px;
+    }
+.round-top-left { border-top-left-radius: 0.725em; }
+.round-top-right { border-top-right-radius: 0.725em; }
+/******************************/
+    #allcssRes-wrapper .content { clear: right; /* width: 70%;*/ }
+    #allcssRes-wrapper #content { }
+    body.allcssRes div.powered_by {
+      font-size: 1.225em;
+      padding-top: 2px;
+      margin: 2.225em auto;
+      position: relative;
+      text-align: center;
+    }
+
+    #allcssRes-wrapper div#langmenu a.default span img { filter: alpha(opacity=100); -khtml-opacity: 1.0; -moz-opacity: 1.0; opacity: 1.0; }
+    #allcssRes-wrapper div#langmenu a:hover span img,
+    #allcssRes-wrapper div#langmenu a.current span img { background: transparent; filter: alpha(opacity=30); -khtml-opacity: 0.3; -moz-opacity: .3; opacity: .3; }
+    #allcssRes-wrapper div#langmenu { text-align: left !important; width: 98% !important; padding-left: 5%; line-height: 1.625em; }
+/*******************************************/
+
+    #allcssRes-wrapper h1, .h1 { font-size: 1.4525em; text-align: center; }
+    #allcssRes-wrapper h2, .h2 { font-size: 1.125em; text-align: center;  }
+
+/*******************************************/
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#a90329+0,8f0222+44,6d0019+100;Brown+Red+3D */
+.gradient {
+/*  background: #A71A13;*/
+background: #a90329; /* Old browsers */
+/* IE9 SVG, needs conditional override of 'filter' to 'none' */
+background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E5MDMyOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQ0JSIgc3RvcC1jb2xvcj0iIzhmMDIyMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2ZDAwMTkiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+background: -moz-linear-gradient(top, #a90329 0%, #8f0222 44%, #6d0019 100%); /* FF3.6-15 */
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a90329), color-stop(44%,#8f0222), color-stop(100%,#6d0019)); /* Chrome4-9,Safari4-5 */
+background: -webkit-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* Chrome10-25,Safari5.1-6 */
+background: -o-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* Opera 11.10-11.50 */
+background: -ms-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* IE10 preview */
+background: linear-gradient(to bottom, #a90329 0%,#8f0222 44%,#6d0019 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a90329', endColorstr='#6d0019',GradientType=0 ); /* IE6-8 */
+background-attachment: fixed !important;
+}
+.gradient-yellow {
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#facf42+0,f49f02+100 */
+background: #facf42; /* Old browsers */
+/* IE9 SVG, needs conditional override of 'filter' to 'none' */
+background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhY2Y0MiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNDlmMDIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
+background: -moz-linear-gradient(top, #facf42 0%, #f49f02 100%); /* FF3.6-15 */
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#facf42), color-stop(100%,#f49f02)); /* Chrome4-9,Safari4-5 */
+background: -webkit-linear-gradient(top, #facf42 0%,#f49f02 100%); /* Chrome10-25,Safari5.1-6 */
+background: -o-linear-gradient(top, #facf42 0%,#f49f02 100%); /* Opera 11.10-11.50 */
+background: -ms-linear-gradient(top, #facf42 0%,#f49f02 100%); /* IE10 preview */
+background: linear-gradient(to bottom, #facf42 0%,#f49f02 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#facf42', endColorstr='#f49f02',GradientType=0 ); /* IE6-8 */
+background-attachment: fixed !important;
+}
+
+.gradient-diagonal {
+
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#e2e2e2+0,c6c6c6+23,dbdbdb+50,cecece+85,fefefe+100 */
+background: #e2e2e2; /* Old browsers */
+/* IE9 SVG, needs conditional override of 'filter' to 'none' */
+background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMTAwJSIgeDI9IjEwMCUiIHkyPSIwJSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjZTJlMmUyIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMjMlIiBzdG9wLWNvbG9yPSIjYzZjNmM2IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjZGJkYmRiIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iODUlIiBzdG9wLWNvbG9yPSIjY2VjZWNlIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
+background: -moz-linear-gradient(45deg, #e2e2e2 0%, #c6c6c6 23%, #dbdbdb 50%, #cecece 85%, #fefefe 100%); /* FF3.6-15 */
+background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#e2e2e2), color-stop(23%,#c6c6c6), color-stop(50%,#dbdbdb), color-stop(85%,#cecece), color-stop(100%,#fefefe)); /* Chrome4-9,Safari4-5 */
+background: -webkit-linear-gradient(45deg, #e2e2e2 0%,#c6c6c6 23%,#dbdbdb 50%,#cecece 85%,#fefefe 100%); /* Chrome10-25,Safari5.1-6 */
+background: -o-linear-gradient(45deg, #e2e2e2 0%,#c6c6c6 23%,#dbdbdb 50%,#cecece 85%,#fefefe 100%); /* Opera 11.10-11.50 */
+background: -ms-linear-gradient(45deg, #e2e2e2 0%,#c6c6c6 23%,#dbdbdb 50%,#cecece 85%,#fefefe 100%); /* IE10 preview */
+background: linear-gradient(45deg, #e2e2e2 0%,#c6c6c6 23%,#dbdbdb 50%,#cecece 85%,#fefefe 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e2e2', endColorstr='#fefefe',GradientType=1 ); /* IE6-8 fallback on horizontal gradient */
+background-attachment: fixed !important;
+}
+
+.gradient-sweet-home {
+/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#fbe1c1+0,f4c892+28,fbe1c1+51,f4d1a8+76,fbe1c1+99 */
+background: #fbe1c1 fixed; /* Old browsers */
+/* IE9 SVG, needs conditional override of 'filter' to 'none' */
+background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMTAwJSIgeDI9IjEwMCUiIHkyPSIwJSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjZmJlMWMxIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMjglIiBzdG9wLWNvbG9yPSIjZjRjODkyIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNTElIiBzdG9wLWNvbG9yPSIjZmJlMWMxIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNzYlIiBzdG9wLWNvbG9yPSIjZjRkMWE4IiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iOTklIiBzdG9wLWNvbG9yPSIjZmJlMWMxIiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);
+background: -moz-linear-gradient(45deg, #fbe1c1 0%, #f4c892 28%, #fbe1c1 51%, #f4d1a8 76%, #fbe1c1 99%); /* FF3.6-15 */
+background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#fbe1c1), color-stop(28%,#f4c892), color-stop(51%,#fbe1c1), color-stop(76%,#f4d1a8), color-stop(99%,#fbe1c1)); /* Chrome4-9,Safari4-5 */
+background: -webkit-linear-gradient(45deg, #fbe1c1 0%,#f4c892 28%,#fbe1c1 51%,#f4d1a8 76%,#fbe1c1 99%) fixed; /* Chrome10-25,Safari5.1-6 */
+background: -o-linear-gradient(45deg, #fbe1c1 0%,#f4c892 28%,#fbe1c1 51%,#f4d1a8 76%,#fbe1c1 99%) fixed; /* Opera 11.10-11.50 */
+background: -ms-linear-gradient(45deg, #fbe1c1 0%,#f4c892 28%,#fbe1c1 51%,#f4d1a8 76%,#fbe1c1 99%) fixed; /* IE10 preview */
+background: linear-gradient(45deg, #fbe1c1 0%,#f4c892 28%,#fbe1c1 51%,#f4d1a8 76%,#fbe1c1 99%) fixed; /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fbe1c1', endColorstr='#fbe1c1',GradientType=1 ); /* IE6-8 fallback on horizontal gradient */
+background-attachment: fixed !important;
+}
+
+
+
+}
+
+@media only screen and (min-width:800px){
+    .dummy {}
+/******************************/
+  /*  #allcssRes-wrapper + nav,*/
+    #allcssRes-wrapper nav { display: block; }
+    #allcssRes-wrapper label.open-menu-label { display: none; }
+
+    #allcssRes-wrapper nav { display: block; position: relative; }
+    #allcssRes-wrapper nav ul li { display:inline;  }
+
+    /** Label wird ausgeblendet **/
+    #allcssRes-wrapper label.open-menu-label { display: none; }
+    #allcssRes-wrapper .content { padding: 4px 10px 14px 10px; clear: right; /* width: 70%;*/
+    }
+
+
+
+}
Index: trunk/templates/DefaultTemplate/css/theme.css
===================================================================
--- trunk/templates/DefaultTemplate/css/theme.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/theme.css	(revision 2)
@@ -0,0 +1,37 @@
+
+
+body { margin :0 auto; padding :0px; background :#ABBFCE; text-align :left; font-size :0.8525em; }
+body { background-color :#698FAB; background-repeat :repeat-x; }
+body {
+  padding-top: 70px;
+  padding-bottom: 30px;
+}
+
+.theme-dropdown .dropdown-menu {
+  position: static;
+  display: block;
+  margin-bottom: 20px;
+}
+
+.theme-showcase > p > .btn {
+  margin: 5px 0;
+}
+
+.theme-showcase .navbar .container {
+  width: auto;
+}
+hr { margin :1em auto; color :#003366; height :1px; }
+h1 { color :#000000; font-size :1.8em; text-align :center; text-transform :uppercase; }
+h2 { margin :0.5em 0px 0.5em 0px; color :#336699; font-size :1.5em; }
+h2 { font-family :arial,sans-serif; letter-spacing :-1px; margin :0.5em 0; text-align :left; }
+h4 { margin :0; border-bottom :1px solid #dddddd; padding-bottom :5px; }
+
+div.box { width :100%; margin :-10px 0 0 0; font-size :small; text-align :right; }
+.header {  margin :0 auto; }
+.container { margin :0 auto; background :url(images/bgtitle.png) #ffffff; background-repeat :repeat-x; }
+.content { padding :1.6em; margin :0 auto; min-height :300px; vertical-align :top; }
+#content_container { text-align :center;  clear :both; margin :0 auto; }
+.header,
+.container,
+.content,
+#content_container { min-width :90em; width :75%; }
Index: trunk/templates/DefaultTemplate/css/w3-colors-camo.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-colors-camo.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-colors-camo.css	(revision 2)
@@ -0,0 +1,44 @@
+.w3-camo-brown
+{color:#fff;background-color:#594d45}
+
+.w3-camo-red
+{color:#fff;background-color:#79533d}
+
+.w3-camo-olive
+{color:#fff;background-color:#595142}
+
+.w3-camo-field
+{color:#fff;background-color:#745d46}
+
+.w3-camo-earth
+{color:#fff;background-color:#ac7e54}
+
+.w3-camo-sand
+{color:#fff;background-color:#a9947b}
+
+.w3-camo-tan
+{color:#fff;background-color:#b49d80}
+
+.w3-camo-sandstone
+{color:#fff;background-color:#bcab90}
+
+.w3-camo-dark-green
+{color:#fff;background-color:#535640}
+
+.w3-camo-forest
+{color:#fff;background-color:#54504b}
+
+.w3-camo-light-green
+{color:#fff;background-color:#63613e}
+
+.w3-camo-green
+{color:#fff;background-color:#4a5444}
+
+.w3-camo-dark-gray,.w3-camo-dark-grey
+{color:#fff;background-color:#5c5c5b}
+
+.w3-camo-gray,.w3-camo-grey
+{color:#fff;background-color:#9495a5}
+
+.w3-camo-black
+{color:#fff;background-color:#373538}
Index: trunk/templates/DefaultTemplate/css/w3-colors-highway.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-colors-highway.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-colors-highway.css	(revision 2)
@@ -0,0 +1,20 @@
+.w3-highway-brown
+{color:#fff;background-color:#633517}
+
+.w3-highway-red
+{color:#fff;background-color:#a6001a}
+
+.w3-highway-orange
+{color:#fff;background-color:#e06000}
+
+.w3-highway-schoolbus
+{color:#fff;background-color:#ee9600}
+
+w3-highway-yellow
+{color:#fff;background-color:#ffab00}
+
+.w3-highway-green
+{color:#fff;background-color:#004d33}
+
+.w3-highway-blue
+{color:#fff;background-color:#00477e}
Index: trunk/templates/DefaultTemplate/css/w3-colors-safety.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-colors-safety.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-colors-safety.css	(revision 2)
@@ -0,0 +1,17 @@
+.w3-safety-red
+{color:#fff;background-color:#bd1e24}
+
+.w3-safety-orange
+{color:#fff;background-color:#e97600}
+
+.w3-safety-yellow
+{color:#fff;background-color:#f6c700}
+
+.w3-safety-green
+{color:#fff;background-color:#007256}
+
+.w3-safety-blue
+{color:#fff;background-color:#0067a7}
+
+.w3-safety-purple
+{color:#fff;background-color:#964f8e}
Index: trunk/templates/DefaultTemplate/css/w3-colors-signal.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-colors-signal.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-colors-signal.css	(revision 2)
@@ -0,0 +1,29 @@
+.w3-signal-yellow
+{color:#fff;background-color:#f7ba0b}
+
+.w3-signal-orange
+{color:#fff;background-color:#d4652f}
+
+.w3-signal-red
+{color:#fff;background-color:#a02128}
+
+.w3-signal-violet
+{color:#fff;background-color:#904684}
+
+.w3-signal-blue
+{color:#fff;background-color:#154889}
+
+.w3-signal-green
+{color:#fff;background-color:#317f43}
+
+.w3-signal-grey
+{color:#fff;background-color:#9b9b9b}
+
+.w3-signal-brown
+{color:#fff;background-color:#7b5141}
+
+.w3-signal-white
+{color:#000;background-color:#f4f4f4}
+
+.w3-signal-black
+{color:#fff;background-color:#282828}
Index: trunk/templates/DefaultTemplate/css/w3-colors-vivid.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-colors-vivid.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-colors-vivid.css	(revision 2)
@@ -0,0 +1,43 @@
+.w3-vivid-pink
+{color:#fff;background-color:#ffb5bA}
+.w3-vivid-red
+{color:#fff;background-color:#be0032}
+.w3-vivid-orange
+{color:#fff;background-color:#f38400}
+.w3-vivid-yellow
+{color:#fff;background-color:#f3c300}
+.w3-vivid-green
+{color:#fff;background-color:#008856}
+.w3-vivid-blue
+{color:#fff;background-color:#00a1c2}
+.w3-vivid-black
+{color:#fff;background-color:#000}
+.w3-vivid-white
+{color:#000;background-color:#fff}
+
+.w3-vivid-purple
+{color:#fff;background-color:#9a4eae}
+.w3-vivid-purple
+{color:#fff;background-color:#9a4eae}
+.w3-vivid-yellowish-pink
+{color:#fff;background-color:#ffb7a5}
+.w3-vivid-reddish-orange
+{color:#fff;background-color:#e25822}
+.w3-vivid-orange-yellow
+{color:#fff;background-color:#f6a600}
+.w3-vivid-greenish-yellow
+{color:#fff;background-color:#dcd300}
+.w3-vivid-yellow-green
+{color:#fff;background-color:#8db600}
+.w3-vivid-yellowish-green
+{color:#fff;background-color:#27a64c}
+.w3-vivid-bluish-green
+{color:#fff;background-color:#008882}
+.w3-vivid-greenish-blue
+{color:#fff;background-color:#0085a1}
+.w3-vivid-purplish-blue
+{color:#fff;background-color:#30267a}
+.w3-vivid-reddish-purple
+{color:#fff;background-color:#870074}
+.w3-vivid-purplish-red
+{color:#fff;background-color:#ce4676}
Index: trunk/templates/DefaultTemplate/css/w3-theme-blue-grey.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3-theme-blue-grey.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3-theme-blue-grey.css	(revision 2)
@@ -0,0 +1,22 @@
+.w3-theme-l5 {color:#000 !important; background-color:#f5f7f8 !important}
+.w3-theme-l4 {color:#000 !important; background-color:#dfe5e8 !important}
+.w3-theme-l3 {color:#000 !important; background-color:#becbd2 !important}
+.w3-theme-l2 {color:#000 !important; background-color:#9eb1bb !important}
+.w3-theme-l1 {color:#fff !important; background-color:#7d97a5 !important}
+.w3-theme-d1 {color:#fff !important; background-color:#57707d !important}
+.w3-theme-d2 {color:#fff !important; background-color:#4d636f !important}
+.w3-theme-d3 {color:#fff !important; background-color:#435761 !important}
+.w3-theme-d4 {color:#fff !important; background-color:#3a4b53 !important}
+.w3-theme-d5 {color:#fff !important; background-color:#303e45 !important}
+
+.w3-theme-light {color:#000 !important; background-color:#f5f7f8 !important}
+.w3-theme-dark {color:#fff !important; background-color:#303e45 !important}
+.w3-theme-action {color:#fff !important; background-color:#303e45 !important}
+
+.w3-theme {color:#fff !important; background-color:#607d8b !important}
+.w3-text-theme {color:#607d8b !important}
+.w3-border-theme {border-color:#607d8b !important}
+
+.w3-hover-theme:hover {color:#fff !important; background-color:#607d8b !important}
+.w3-hover-text-theme:hover {color:#607d8b !important}
+.w3-hover-border-theme:hover {border-color:#607d8b !important}
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/css/w3.css
===================================================================
--- trunk/templates/DefaultTemplate/css/w3.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/css/w3.css	(revision 2)
@@ -0,0 +1,348 @@
+﻿/* W3.CSS 2.82 by Jan Egil and Borge Refsnes */
+html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
+/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
+html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}
+audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
+audio:not([controls]){display:none;height:0}[hidden],template{display:none}
+a{background-color:transparent;-webkit-text-decoration-skip:objects}
+a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
+dfn{font-style:italic}mark{background:#ff0;color:#000}
+small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}
+img{border-style:none}svg:not(:root){overflow:hidden}
+code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}
+hr{box-sizing:content-box;height:0;overflow:visible}
+button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}
+button,input{overflow:visible}button,select{text-transform:none}
+button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}
+button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0}
+button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText}
+fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
+legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
+[type=checkbox],[type=radio]{padding:0}
+[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
+[type=search]{-webkit-appearance:textfield;outline-offset:-2px}
+[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+::-webkit-input-placeholder{color:inherit;opacity:0.54}
+::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
+/* End extract */
+html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}
+h1,h2,h3,h4,h5,h6,.w3-slim,.w3-wide{font-family:"Segoe UI",Arial,sans-serif}
+h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}
+.w3-serif{font-family:"Times New Roman",Times,serif}
+h1,h2,h3,h4,h5,h6{font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}
+h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}
+hr{border:0;border-top:1px solid #eee;margin:20px 0}
+img{margin-bottom:-5px}a{color:inherit}
+.w3-image{max-width:100%;height:auto}
+.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}
+.w3-table-all{border:1px solid #ccc}
+.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}
+.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
+.w3-table-all tr:nth-child(odd){background-color:#fff}
+.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
+.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}
+.w3-centered tr th,.w3-centered tr td{text-align:center}
+.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
+.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}
+.w3-btn,.w3-btn-block{border:none;display:inline-block;outline:0;padding:6px 16px;vertical-align:middle;overflow:hidden;text-decoration:none!important;color:#fff;background-color:#000;text-align:center;cursor:pointer;white-space:nowrap}
+.w3-btn:hover,.w3-btn-block:hover,.w3-btn-floating:hover,.w3-btn-floating-large:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
+.w3-btn,.w3-btn-floating,.w3-btn-floating-large,.w3-closenav,.w3-opennav{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}   
+.w3-btn-floating,.w3-btn-floating-large{display:inline-block;text-align:center;color:#fff;background-color:#000;position:relative;overflow:hidden;z-index:1;padding:0;border-radius:50%;cursor:pointer;font-size:24px}
+.w3-btn-floating{width:40px;height:40px;line-height:40px}.w3-btn-floating-large{width:56px;height:56px;line-height:56px}
+.w3-disabled,.w3-btn:disabled,.w3-btn-floating:disabled,.w3-btn-floating-large:disabled{cursor:not-allowed;opacity:0.3}
+.w3-btn.w3-disabled *,.w3-btn-block.w3-disabled,.w3-btn-floating.w3-disabled *,.w3-btn:disabled *,.w3-btn-floating:disabled *{pointer-events:none}
+.w3-btn.w3-disabled:hover,.w3-btn-block.w3-disabled:hover,.w3-btn:disabled:hover,.w3-btn-floating.w3-disabled:hover,.w3-btn-floating:disabled:hover,
+.w3-btn-floating-large.w3-disabled:hover,.w3-btn-floating-large:disabled:hover{box-shadow:none}
+.w3-btn-group .w3-btn{float:left}.w3-btn-block{width:100%}
+.w3-btn-bar .w3-btn{box-shadow:none;background-color:inherit;color:inherit;float:left}.w3-btn-bar .w3-btn:hover{background-color:#ccc}
+.w3-badge,.w3-tag,.w3-sign{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}
+.w3-badge{border-radius:50%}
+ul.w3-ul{list-style-type:none;padding:0;margin:0}ul.w3-ul li{padding:6px 2px 6px 16px;border-bottom:1px solid #ddd}ul.w3-ul li:last-child{border-bottom:none}
+.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}
+.w3-navbar{list-style-type:none;margin:0;padding:0;overflow:hidden}
+.w3-navbar li{float:left}.w3-navbar li a,.w3-navitem{display:block;padding:8px 16px}.w3-navbar li a:hover{color:#000;background-color:#ccc}
+.w3-navbar .w3-dropdown-hover,.w3-navbar .w3-dropdown-click{position:static}
+.w3-navbar .w3-dropdown-hover:hover,.w3-navbar .w3-dropdown-hover:first-child,.w3-navbar .w3-dropdown-click:hover{background-color:#ccc;color:#000}
+.w3-navbar a,.w3-topnav a,.w3-sidenav a,.w3-dropdown-content a,.w3-accordion-content a,.w3-dropnav a{text-decoration:none!important}
+.w3-navbar .w3-opennav.w3-right{float:right!important}.w3-topnav{padding:8px 8px}
+.w3-topnav a{padding:0 8px;border-bottom:3px solid transparent;-webkit-transition:border-bottom .3s;transition:border-bottom .3s}
+.w3-topnav a:hover{border-bottom:3px solid #fff}.w3-topnav .w3-dropdown-hover a{border-bottom:0}
+.w3-opennav,.w3-closenav{color:inherit}.w3-opennav:hover,.w3-closenav:hover{cursor:pointer;opacity:0.8}
+.w3-btn,.w3-btn-floating,.w3-dropnav a,.w3-btn-floating-large,.w3-btn-block,.w3-hover-shadow,.w3-hover-opacity,.w3-hover-opacity-off,.w3-hover-sepia,.w3-hover-grayscale,.w3-hover-greyscale,
+.w3-navbar a,.w3-sidenav a,.w3-pagination li a,.w3-hoverable tbody tr,.w3-hoverable li,.w3-accordion-content a,.w3-dropdown-content a,.w3-dropdown-click:hover,.w3-dropdown-hover:hover,.w3-opennav,.w3-closenav,.w3-closebtn,
+.w3-hover-amber,.w3-hover-aqua,.w3-hover-blue,.w3-hover-light-blue,.w3-hover-brown,.w3-hover-cyan,.w3-hover-blue-grey,.w3-hover-green,.w3-hover-light-green,.w3-hover-indigo,.w3-hover-khaki,.w3-hover-lime,.w3-hover-orange,.w3-hover-deep-orange,.w3-hover-pink,
+.w3-hover-purple,.w3-hover-deep-purple,.w3-hover-red,.w3-hover-sand,.w3-hover-teal,.w3-hover-yellow,.w3-hover-white,.w3-hover-black,.w3-hover-grey,.w3-hover-light-grey,.w3-hover-dark-grey,.w3-hover-text-amber,.w3-hover-text-aqua,.w3-hover-text-blue,.w3-hover-text-light-blue,
+.w3-hover-text-brown,.w3-hover-text-cyan,.w3-hover-text-blue-grey,.w3-hover-text-green,.w3-hover-text-light-green,.w3-hover-text-indigo,.w3-hover-text-khaki,.w3-hover-text-lime,.w3-hover-text-orange,.w3-hover-text-deep-orange,.w3-hover-text-pink,.w3-hover-text-purple,
+.w3-hover-text-deep-purple,.w3-hover-text-red,.w3-hover-text-sand,.w3-hover-text-teal,.w3-hover-text-yellow,.w3-hover-text-white,.w3-hover-text-black,.w3-hover-text-grey,.w3-hover-text-light-grey,.w3-hover-text-dark-grey
+{-webkit-transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s;transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s}
+.w3-ripple:active{opacity:0.5}.w3-ripple{-webkit-transition:opacity 0s;transition:opacity 0s}
+.w3-sidenav{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
+.w3-sidenav a{padding:4px 2px 4px 16px}.w3-sidenav a:hover{background-color:#ccc}.w3-sidenav a,.w3-dropnav a{display:block}
+.w3-sidenav .w3-dropdown-hover:hover,.w3-sidenav .w3-dropdown-hover:first-child,.w3-sidenav .w3-dropdown-click:hover,.w3-dropnav a:hover{background-color:#ccc;color:#000}
+.w3-sidenav .w3-dropdown-hover,.w3-sidenav .w3-dropdown-click {width:100%}.w3-sidenav .w3-dropdown-hover .w3-dropdown-content,.w3-sidenav .w3-dropdown-click .w3-dropdown-content{min-width:100%}
+.w3-main,#main{transition:margin-left .4s}
+.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
+.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}.w3-closebtn{text-decoration:none;float:right;font-size:24px;font-weight:bold;color:inherit}
+.w3-closebtn:hover,.w3-closebtn:focus{color:#000;text-decoration:none;cursor:pointer}
+.w3-pagination{display:inline-block;padding:0;margin:0}.w3-pagination li{display:inline}
+.w3-pagination li a{text-decoration:none;color:#000;float:left;padding:8px 16px}
+.w3-pagination li a:hover{background-color:#ccc}
+.w3-input-group,.w3-group{margin-top:24px;margin-bottom:24px}
+.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #808080;width:100%}
+.w3-label{color:#009688}.w3-input:not(:valid)~.w3-validate{color:#f44336}
+.w3-select{padding:9px 0;width:100%;color:#000;border:1px solid transparent;border-bottom:1px solid #009688}
+.w3-select select:focus{color:#000;border:1px solid #009688}.w3-select option[disabled]{color:#009688}
+.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}
+.w3-dropdown-hover:hover .w3-dropdown-content{display:block;z-index:1}
+.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0}
+.w3-dropdown-content a{padding:6px 16px;display:block}
+.w3-dropdown-content a:hover{background-color:#ccc}
+.w3-accordion {width:100%;cursor:pointer}
+.w3-accordion-content{cursor:auto;display:none;position:relative;width:100%;margin:0;padding:0}
+.w3-accordion-content a{padding:6px 16px;display:block}.w3-accordion-content a:hover{background-color:#ccc}
+.w3-progress-container{width:100%;height:1.5em;position:relative;background-color:#f1f1f1}
+.w3-progressbar{background-color:#757575;height:100%;position:absolute;line-height:inherit}
+input[type=checkbox].w3-check,input[type=radio].w3-radio{width:24px;height:24px;position:relative;top:6px}
+input[type=checkbox].w3-check:checked+.w3-validate,input[type=radio].w3-radio:checked+.w3-validate{color:#009688} 
+input[type=checkbox].w3-check:disabled+.w3-validate,input[type=radio].w3-radio:disabled+.w3-validate{color:#aaa}
+.w3-responsive{overflow-x:auto}
+.w3-container:after,.w3-panel:after,.w3-row:after,.w3-row-padding:after,.w3-topnav:after,.w3-clear:after,.w3-btn-group:before,.w3-btn-group:after,.w3-btn-bar:before,.w3-btn-bar:after
+{content:"";display:table;clear:both}
+.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}
+.w3-col.s1{width:8.33333%}
+.w3-col.s2{width:16.66666%}
+.w3-col.s3{width:24.99999%}
+.w3-col.s4{width:33.33333%}
+.w3-col.s5{width:41.66666%}
+.w3-col.s6{width:49.99999%}
+.w3-col.s7{width:58.33333%}
+.w3-col.s8{width:66.66666%}
+.w3-col.s9{width:74.99999%}
+.w3-col.s10{width:83.33333%}
+.w3-col.s11{width:91.66666%}
+.w3-col.s12,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{width:99.99999%}
+@media only screen and (min-width:601px){
+.w3-col.m1{width:8.33333%}
+.w3-col.m2{width:16.66666%}
+.w3-col.m3,.w3-quarter{width:24.99999%}
+.w3-col.m4,.w3-third{width:33.33333%}
+.w3-col.m5{width:41.66666%}
+.w3-col.m6,.w3-half{width:49.99999%}
+.w3-col.m7{width:58.33333%}
+.w3-col.m8,.w3-twothird{width:66.66666%}
+.w3-col.m9,.w3-threequarter{width:74.99999%}
+.w3-col.m10{width:83.33333%}
+.w3-col.m11{width:91.66666%}
+.w3-col.m12{width:99.99999%}}
+@media only screen and (min-width:993px){
+.w3-col.l1{width:8.33333%}
+.w3-col.l2{width:16.66666%}
+.w3-col.l3,.w3-quarter{width:24.99999%}
+.w3-col.l4,.w3-third{width:33.33333%}
+.w3-col.l5{width:41.66666%}
+.w3-col.l6,.w3-half{width:49.99999%}
+.w3-col.l7{width:58.33333%}
+.w3-col.l8,.w3-twothird{width:66.66666%}
+.w3-col.l9,.w3-threequarter{width:74.99999%}
+.w3-col.l10{width:83.33333%}
+.w3-col.l11{width:91.66666%}
+.w3-col.l12{width:99.99999%}}
+.w3-content{max-width:980px;margin:auto}
+.w3-rest{overflow:hidden}
+.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}
+@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}}
+@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
+@media (min-width:993px){.w3-modal-content{width:900px}}
+@media screen and (max-width:600px){.w3-topnav a{display:block}.w3-navbar li:not(.w3-opennav){float:none;width:100%!important}.w3-navbar li.w3-right{float:none!important}}	
+@media screen and (max-width:600px){.w3-topnav .w3-dropdown-hover .w3-dropdown-content,.w3-navbar .w3-dropdown-click .w3-dropdown-content,.w3-navbar .w3-dropdown-hover .w3-dropdown-content{position:relative}}	
+@media screen and (max-width:600px){.w3-topnav,.w3-navbar{text-align:center}}
+@media (max-width:600px){.w3-hide-small{display:none!important}}
+@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}
+@media (min-width:993px){.w3-hide-large{display:none!important}}
+@media screen and (max-width:992px){.w3-sidenav.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}}
+@media screen and (min-width:993px){.w3-sidenav.w3-collapse{display:block!important}}
+.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}
+.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
+.w3-left{float:left!important}.w3-right{float:right!important}
+.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}
+.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}
+.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}
+.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}
+.w3-vertical{word-break:break-all;line-height:1;text-align:center;width:0.6em}
+.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}
+.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}
+.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}
+.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}
+.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
+.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
+.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
+.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-circle{border-radius:50%!important}
+.w3-round-small{border-radius:2px!important}.w3-round,.w3-round-medium{border-radius:4px!important}
+.w3-round-large{border-radius:8px!important}.w3-round-xlarge{border-radius:16px!important}
+.w3-round-xxlarge{border-radius:32px!important}.w3-round-jumbo{border-radius:64px!important}
+.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}
+.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}
+.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}
+.w3-margin{margin:16px!important}.w3-margin-0{margin:0!important}
+.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}
+.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}
+.w3-section{margin-top:16px!important;margin-bottom:16px!important}
+.w3-padding-tiny{padding:2px 4px!important}.w3-padding-small{padding:4px 8px!important}
+.w3-padding-medium,.w3-padding,.w3-form{padding:8px 16px!important}
+.w3-padding-large{padding:12px 24px!important}.w3-padding-xlarge{padding:16px 32px!important}
+.w3-padding-xxlarge{padding:24px 48px!important}.w3-padding-jumbo{padding:32px 64px!important}
+.w3-padding-4{padding-top:4px!important;padding-bottom:4px!important}
+.w3-padding-8{padding-top:8px!important;padding-bottom:8px!important}
+.w3-padding-12{padding-top:12px!important;padding-bottom:12px!important}
+.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}
+.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}
+.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}
+.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}
+.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}
+.w3-padding-128{padding-top:128px!important;padding-bottom:128px!important}
+.w3-padding-0{padding:0!important}
+.w3-padding-top{padding-top:8px!important}.w3-padding-bottom{padding-bottom:8px!important}
+.w3-padding-left{padding-left:16px!important}.w3-padding-right{padding-right:16px!important}
+.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}
+.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}
+.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}
+.w3-spin{animation:w3-spin 2s infinite linear;-webkit-animation:w3-spin 2s infinite linear}
+@-webkit-keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
+@keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
+.w3-container{padding:0.01em 16px}
+.w3-panel{padding:0.01em 16px;margin-top:16px!important;margin-bottom:16px!important}
+.w3-example{background-color:#f1f1f1;padding:0.01em 16px}
+.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}
+.w3-code{line-height:1.4;width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
+.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
+.w3-example,.w3-code{margin:20px 0}.w3-card{border:1px solid #ccc}
+.w3-card-2,.w3-example{box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)!important}
+.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}
+.w3-card-8{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}
+.w3-card-12{box-shadow:0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)!important}
+.w3-card-16{box-shadow:0 16px 24px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)!important}
+.w3-card-24{box-shadow:0 24px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)!important}
+.w3-animate-fading{-webkit-animation:fading 10s infinite;animation:fading 10s infinite}
+@-webkit-keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+.w3-animate-opacity{-webkit-animation:opac 0.8s;animation:opac 0.8s}
+@-webkit-keyframes opac{from{opacity:0} to{opacity:1}}
+@keyframes opac{from{opacity:0} to{opacity:1}}
+.w3-animate-top{position:relative;-webkit-animation:animatetop 0.4s;animation:animatetop 0.4s}
+@-webkit-keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+.w3-animate-left{position:relative;-webkit-animation:animateleft 0.4s;animation:animateleft 0.4s}
+@-webkit-keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+.w3-animate-right{position:relative;-webkit-animation:animateright 0.4s;animation:animateright 0.4s}
+@-webkit-keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+.w3-animate-bottom{position:relative;-webkit-animation:animatebottom 0.4s;animation:animatebottom 0.4s}
+@-webkit-keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0px;opacity:1}}
+@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
+.w3-animate-zoom {-webkit-animation:animatezoom 0.6s;animation:animatezoom 0.6s}
+@-webkit-keyframes animatezoom{from{-webkit-transform:scale(0)} to{-webkit-transform:scale(1)}}
+@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
+.w3-animate-input{-webkit-transition:width 0.4s ease-in-out;transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}
+.w3-opacity,.w3-hover-opacity:hover{opacity:0.60;filter:alpha(opacity=60);-webkit-backface-visibility:hidden}
+.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1;filter:alpha(opacity=100);-webkit-backface-visibility:hidden}
+.w3-opacity-max{opacity:0.25;filter:alpha(opacity=25);-webkit-backface-visibility:hidden}
+.w3-opacity-min{opacity:0.75;filter:alpha(opacity=75);-webkit-backface-visibility:hidden}
+.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{-webkit-filter:grayscale(100%);filter:grayscale(100%)}
+.w3-greyscale,.w3-grayscale{-webkit-filter:grayscale(75%);filter:grayscale(75%)}
+.w3-greyscale-min,.w3-grayscale-min{-webkit-filter:grayscale(50%);filter:grayscale(50%)}
+.w3-sepia{-webkit-filter:sepia(75%);filter:sepia(75%)}
+.w3-sepia-max,.w3-hover-sepia:hover{-webkit-filter:sepia(100%);filter:sepia(100%)}
+.w3-sepia-min{-webkit-filter:sepia(50%);filter:sepia(50%)}
+.w3-text-shadow{text-shadow:1px 1px 0 #444}.w3-text-shadow-white{text-shadow:1px 1px 0 #ddd}
+.w3-transparent{background-color:transparent!important}
+.w3-hover-none:hover{box-shadow:none!important;background-color:transparent!important}
+/* Colors */
+.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}
+.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
+.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
+.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
+.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}
+.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
+.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}
+.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
+.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
+.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
+.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
+.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}
+.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}
+.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
+.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
+.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
+.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
+.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}
+.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
+.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}
+.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
+.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}
+.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}
+.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}
+.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}
+.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}
+.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}
+.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}
+.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}
+.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}
+.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}
+.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}
+.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}
+.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}
+.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}
+.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}
+.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}
+.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}
+.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}
+.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}
+.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}
+.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}
+.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}
+.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}
+.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}
+.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}
+.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}
+.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}
+.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}
+.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}
+.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}
+.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}
+.w3-text-black,.w3-hover-text-black:hover{color:#000!important}
+.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}
+.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}
+.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}
+.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}
+.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}
+.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}
+.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}
+.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}
+.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}
+.w3-border-blue-grey,.w3-hover-blue-grey:hover,.w3-border-blue-gray,.w3-hover-blue-gray:hover{border-color:#607d8b!important}
+.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}
+.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}
+.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}
+.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}
+.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}
+.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}
+.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}
+.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}
+.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}
+.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}
+.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}
+.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}
+.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}
+.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}
+.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}
+.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}
+.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}
+.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}
+.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}
+.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}
+.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/default.ini
===================================================================
--- trunk/templates/DefaultTemplate/default.ini	(nonexistent)
+++ trunk/templates/DefaultTemplate/default.ini	(revision 2)
@@ -0,0 +1,32 @@
+;<?php exit(); ?>
+;###############################################################################
+;###                                                                         ###
+;###   configurable settings for frontend template                           ###
+;###                                                                         ###
+;###############################################################################
+;
+[twig-loader-file]
+; settings for Twig_Loader_Filesystem
+templates_dir        = "templates/"
+default_template     = "index.twig"
+;
+[frontend_register]
+; automatically include optional WB module files (frontend.css, frontend.js)
+head_css         = true
+head_js          = true
+head_jquery      = true
+; automatically include optional WB module file frontend_body.js)
+body_js     = true
+body_jquery = false
+;
+[twig-environment]
+; settings for the Twig_Environment
+autoescape           = false
+cache                = false
+debug                = false
+;
+;cache               = "/var/www/clients/client1/web1/web/temp/Twig/"
+;strict_variables    = true
+;base_template_class = false
+;auto_reload         = false
+;
\ No newline at end of file

Property changes on: trunk/templates/DefaultTemplate/default.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/editor.css
===================================================================
--- trunk/templates/DefaultTemplate/editor.css	(nonexistent)
+++ trunk/templates/DefaultTemplate/editor.css	(revision 2)
@@ -0,0 +1,61 @@
+/**
+ * $Id: editor.css 65 2017-03-03 21:38:16Z manu $
+ * Website Baker template: allcss
+ * This template is one of four basis templates distributed with Website Baker.
+ * Feel free to modify or build up on this template.
+ *
+ * This file contains all CSS definitions required to display the template
+ * in the Website Baker frontend. 
+ *
+ * LICENSE: GNU General Public License
+ * 
+ * @author     Ryan Djurovich, C. Sommer
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.70
+ * @platform   Website Baker 2.7
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+body {
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-size: 12px;
+	text-align: justify;
+	color: #000;
+	background-color: #FFF;
+	width: 580px;
+}
+a:link, a:visited, a:active {
+	color: #603;
+	text-decoration: none;
+}
+a:hover {
+	color: #936;
+	text-decoration: none;
+}
+hr {
+	margin: 5px 0px 5px 0px;
+	color: #603;
+	border: 0;
+	border-top: 1px solid #603;
+	height: 1px;
+	width: 580px;
+}
+h1 {
+	font-size: 16px;
+	color: #993366;
+	text-align: left;
+	margin: 8px 2px 8px 2px;
+}
+form {
+	margin: 0;
+}
Index: trunk/templates/DefaultTemplate/fonts/FontAwesome.otf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/FontAwesome.otf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.eot
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.eot
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.svg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/svg

Property changes on: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.svg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/svg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.woff
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.woff2
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/fontawesome-webfont.woff2
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.eot
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.eot
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.svg.maff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.svg.maff
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.ttf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/fonts/glyphicons-halflings-regular.woff
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/FRICE006_1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/images/FRICE006_1.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/apple-touch-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTemplate/images/apple-touch-icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/background.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/images/background.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTemplate/images/favicon.ico
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/header.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/images/header.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/images/j0160568.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/images/j0160568.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/index.php
===================================================================
--- trunk/templates/DefaultTemplate/index.php	(nonexistent)
+++ trunk/templates/DefaultTemplate/index.php	(revision 2)
@@ -0,0 +1,171 @@
+<?php
+/**
+ * $Id$
+ * Website Baker template: allcss
+ * This template is one of four basis templates distributed with Website Baker.
+ * Feel free to modify or build up on this template.
+ *
+ * This file contains the overall template markup and the Website Baker
+ * template functions to add the contents from the database.
+ *
+ * LICENSE: GNU General Public License
+ *
+ * @author     Ryan Djurovich, C. Sommer
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.70
+ * @platform   Website Baker 2.7
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_URL') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+ob_start();  //fetch MainContent
+page_content(1);
+$page_contentMain = ob_get_clean();
+ob_start();  //fetch original header content
+page_content(2);
+$page_contentTeaser = ob_get_clean();
+ob_start();  //fetch original header content
+page_content(3);
+$page_contentSidebar = ob_get_clean();
+
+$lang    = (defined('LANGUAGE') && LANGUAGE ? LANGUAGE : 'EN');
+$charset = (defined('DEFAULT_CHARSET') ? DEFAULT_CHARSET : 'utf-8');
+// TEMPLATE CODE STARTS BELOW
+?><!DOCTYPE HTML>
+<html lang="<?php echo strtolower((defined('LANGUAGE') && LANGUAGE ? LANGUAGE : 'EN')); ?>">
+<head>
+    <meta charset="<?php echo (defined('DEFAULT_CHARSET') ? DEFAULT_CHARSET : 'utf-8'); ?>" />
+    <title><?php page_title('', '[WEBSITE_TITLE]'); ?></title>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+    <meta name="description" content="<?php page_description(); ?>" />
+    <meta name="keywords" content="<?php page_keywords(); ?>" />
+    <!-- Mobile viewport optimisation -->
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"/>
+    <link rel="stylesheet" type="text/css" href="<?php echo TEMPLATE_DIR; ?>/css/screen.css" media="screen" />
+    <link rel="stylesheet" type="text/css" href="<?php echo TEMPLATE_DIR; ?>/css/CookieNotice.css" media="screen" />
+    <link rel="stylesheet" type="text/css" href="<?php echo TEMPLATE_DIR; ?>/css/print.css" media="print" />
+    <link rel="canonical" href="[wblink<?php echo $page_id;?>]"/>
+    <link rel="shortcut icon" href="<?php echo TEMPLATE_DIR; ?>/images/favicon.ico" type="image/x-icon">
+    <link rel="apple-touch-icon" href="<?php echo TEMPLATE_DIR; ?>/images/apple-touch-icon.png"/>
+    <link rel="alternate" type="application/rss+xml" title="Test RSS-Feed" href="<?php echo WB_URL; ?>/modules/news/rss.php?page_id=12" />
+<?php
+// automatically include optional WB module files (frontend.css)
+    echo register_frontend_modfiles('css', false);
+?>
+<?php
+// automatically include optional WB module files (jquery-min.js, frontend.js)
+    echo register_frontend_modfiles('jquery', false);
+    echo register_frontend_modfiles('js', false);
+?></head>
+<?php if( is_readable( WB_PATH.'/modules/wbCounter/count.php' )) { include ( WB_PATH.'/modules/wbCounter/count.php' ); } ?>
+<body class="allcssRes gradient-sweet-home">
+<div id="allcssRes-wrapper" class="main outer-box ">
+    <header >
+        <div class="banner gradient">
+            <a class="h1" href="<?php echo WB_URL; ?>/" target="_top"><?php page_title('', '[WEBSITE_TITLE]'); ?></a>
+            <span class="h1">| <?php page_title('', '[PAGE_TITLE]'); ?></span>
+        </div>
+    <!-- frontend search -->
+    <div class="search_box gradient round-top-left round-top-right">
+<?php
+        // CODE FOR WEBSITE BAKER FRONTEND SEARCH
+if (SHOW_SEARCH) { ?>
+    <form name="search" action="<?php echo WB_URL; ?>/search/index.php" method="get" >
+        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID') ? REFERRER_ID : PAGE_ID; ?>" />
+        <input type="text" name="string" class="search_string" />
+        <input type="submit" name="wb_search" id="wb_search" value="<?php echo $TEXT['SEARCH']; ?>" class="search_submit" />
+    </form>
+<?php } ?>
+    </div>
+    </header>
+<?php if(trim($page_contentTeaser)!=''){ ?>
+        <div class="teaser">
+          <div class="content">
+          <?php echo $page_contentTeaser; ?>
+          </div><!-- end content -->
+        </div><!-- end teaser -->
+<?php } ?>
+
+    <input type="checkbox" id="open-menu" />
+    <label for="open-menu" class="open-menu-label">
+        <span class="title h4"> <?php page_title('', '[PAGE_TITLE]'); ?></span>
+        <span class="fa fa-bars" aria-hidden="true"> </span>
+    </label>
+    <div id="lang" style="height: 2.925em;">
+<?php $iMultiLang = 0; if (function_exists('language_menu')) { $sMultiLang = language_menu(); $iMultiLang = intval($sMultiLang!='');} ?>
+    </div>
+    <div id="left-col">
+      <div class="content">
+        <!-- main navigation menu -->
+        <nav class="outer-box gradient-sweet-home">
+            <div class="menu" style="font-size: 86%;">
+                <?php
+                echo show_menu2(SM2_ALLMENU, SM2_ROOT+$iMultiLang, SM2_CURR+1, SM2_ALL|SM2_BUFFER|SM2_PRETTY|SM2_NUMCLASS,'<li><span class="menu-default">[ac][menu_title]</a></span>','</li>','<ul>','</ul>');
+                ?>
+            </div>
+        </nav>
+
+<?php if(trim($page_contentSidebar)!=''){ ?>
+      <div class="left-content outer-box gradient-sweet-home">
+            <?php echo $page_contentSidebar; ?>
+      </div>
+<?php } ?>
+<?php if (defined('FRONTEND_LOGIN') && FRONTEND_LOGIN){ ?>
+        <div class="outer-box gradient-sweet-home">
+             [[LoginBox]]
+        </div>
+<?php } ?>
+<?php if (function_exists('wbCounter')){ ?>
+        <div class="outer-box gradient-sweet-home">
+             <?php echo wbCounter();?>
+        </div>
+<?php } ?>
+      </div><!-- end content -->
+    </div><!-- end left-col -->
+
+    <div class="main-content">
+        <?php echo $page_contentMain; ?>
+    </div>
+
+    <footer>
+    <div class="footer">
+        <?php page_footer(); ?>
+    </div>
+    </footer>
+
+</div>
+
+<div class="powered_by">
+    Powered by <a href="http://websitebaker.org" target="_blank">WebsiteBaker</a>
+</div>
+<div id="CookieNotice">
+    <div id="CookieNoticeBar">
+        <span id="CookieNoticeClose">OK</span>
+        <span id="CookieNoticeInfo">This website uses cookies. When you browse on this site, you agree to the use of cookies.</span>
+    </div>
+</div>
+<script src="<?php echo TEMPLATE_DIR; ?>/jquery_frontend.js" type="text/javascript"></script>
+<script src="<?php echo TEMPLATE_DIR; ?>/js/CookieNotice.js" type="text/javascript"></script>
+
+<?php
+// automatically include optional WB module file frontend_body.js)
+//        register_frontend_modfiles_body('jquery');
+        register_frontend_modfiles_body('js');
+?>
+
+</body>
+</html>

Property changes on: trunk/templates/DefaultTemplate/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/info.php
===================================================================
--- trunk/templates/DefaultTemplate/info.php	(nonexistent)
+++ trunk/templates/DefaultTemplate/info.php	(revision 2)
@@ -0,0 +1,52 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * [$filename]
+ *
+ * @category     Addons
+ * @package      template
+ * @subpackage   DefaultTemplate
+ * @copyright    WebsiteBaker Project <board@websitebaker@org>
+ * @author       WebsiteBaker Project <board@i@websitebaker@org>
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker@org>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      1.0.0
+ * @lastmodified $Date$
+ * @since        File available since 2016-07-26
+ * @description
+ */
+
+$template_directory    = 'DefaultTemplate';
+$template_name         = 'WebsiteBaker Default Template v1.0.13';
+$template_version      = '1.0.13';
+$template_platform     = '2.8.3 SP7';
+$template_function     = 'template';
+$template_author       = 'WebsiteBaker Project';
+$template_license      = '<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>';
+$template_description  = 'Default template for Website Baker. This template is designed with one goal in mind: to completely control layout with CSS';
+
+ $block[1]             = 'Main';
+ $block[2]             = 'Teaser';
+ $block[3]             = 'Sidebar';
+
+// Definition of menu elements
+$menu[1]             ='Main-Navigation';
+$menu[2]             ='Foot-Navigation';
+
+
+// end of file

Property changes on: trunk/templates/DefaultTemplate/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/jquery/jquery_theme.js
===================================================================
--- trunk/templates/DefaultTemplate/jquery/jquery_theme.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/jquery/jquery_theme.js	(revision 2)
@@ -0,0 +1 @@
+/**/
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/jquery_frontend.js
===================================================================
--- trunk/templates/DefaultTemplate/jquery_frontend.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/jquery_frontend.js	(revision 2)
@@ -0,0 +1,29 @@
+/*
+jquery_frontend.js
+console.log('jQuery === '+typeof jQuery);
+*/
+if (typeof jQuery !== "undefined"){
+//console.info('jQuery Core Version : ' + jQuery.fn.jquery + ' detected');
+    try {
+        if(jQuery.ui){
+            var version = jQuery.ui ? jQuery.ui.version || "1.5.2" : null;
+console.info('jQuery UI   Version : ' + version);
+        }
+    } catch(err) {
+console.error('(line  13) : ' + err.message);
+    }
+} else {
+//console.info('jQuery not detected : ' );
+}
+
+    function include_file(filename, filetype) {
+        if(!filetype)
+            var filetype = 'js'; //js default filetype
+        var th = document.getElementsByTagName('head')[0];
+        var s  = document.createElement((filetype == "js") ? 'script' : 'link');
+        s.setAttribute('type',(filetype == "js") ? 'text/javascript' : 'text/css');
+        if (filetype == "css")
+            s.setAttribute('rel','stylesheet');
+        s.setAttribute((filetype == "js") ? 'src' : 'href', filename);
+        th.appendChild(s);
+    }
Index: trunk/templates/DefaultTemplate/jquery_theme.js
===================================================================
--- trunk/templates/DefaultTemplate/jquery_theme.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/jquery_theme.js	(revision 2)
@@ -0,0 +1,3 @@
+/*
+jquery_theme.js
+*/
Index: trunk/templates/DefaultTemplate/js/CookieNotice.js
===================================================================
--- trunk/templates/DefaultTemplate/js/CookieNotice.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/CookieNotice.js	(revision 2)
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *//** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * CookieNotice
+ *
+ * @category     Template
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      0.0.1
+ * @lastmodified 19.09.2015
+ * @since        File available since 04.07.2015
+ * @description  switch off the cookie notice for n days
+    (by default after 7 days the cookie will be removed again)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+    function CookieNotice(NoticeAreaId) {
+
+        var CookieLifetime = 7; // lifetime of the cookie in days
+        var thisObject = this;
+        this.Box = document.getElementById(NoticeAreaId);
+
+        this.hideNotice = function(e) {
+            e = e || window.event;
+            var target = e.target || e.srcElement;
+            if (target.id == 'CookieNoticeClose') {
+                thisObject.Box.style.display = 'none';
+                thisObject.setCookie("CookieNoticeVisible", "none", CookieLifetime);
+                if (e.stopPropagation) {
+                    e.stopPropagation();
+                } else {
+                    e.cancelBubble = true;
+                }
+            }
+        };
+
+        this.setCookie = function(cname,cvalue,exdays) {
+            var d = new Date();
+            d.setTime(d.getTime() + (exdays*86400000));
+            var expires = "expires=" + d.toGMTString();
+             document.cookie = cname+"="+cvalue+"; path=/; "+expires;
+        };
+
+        this.getCookie = function(cname) {
+            var name = cname + "=";
+            var ca = document.cookie.split(';');
+            for(var i=0; i<ca.length; i++) {
+                var c = ca[i];
+                while (c.charAt(0)==' ') c = c.substring(1);
+                if (c.indexOf(name) === 0) {
+                    return c.substring(name.length, c.length);
+                }
+            }
+            return "";
+        };
+
+        this.start = function() {
+            var value = thisObject.getCookie('CookieNoticeVisible');
+            if (value != 'none') {
+                thisObject.Box.style.display = 'block';
+            }
+        };
+        this.Box.onclick = thisObject.hideNotice;
+        this.start();
+    }/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    show the cookie notice if needed
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+    var watchNotice = new CookieNotice('CookieNotice');
+//    new CookieNotice('CookieNotice');
+
+
+
+
Index: trunk/templates/DefaultTemplate/js/_wb_ckconfig.js
===================================================================
--- trunk/templates/DefaultTemplate/js/_wb_ckconfig.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/_wb_ckconfig.js	(revision 2)
@@ -0,0 +1,351 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink, Marmot, Luisehahne
+ *  @copyright      Frederico Knabben
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+/*
+* WARNING: Clear the cache of your browser cache after you modify this file!
+* If you don't do this, you may notice that your browser is ignoring all your changes.
+*
+* --------------------------------------------------
+*
+* Note: Some CKEditor configs are set in _yourwb_/modules/ckeditor/include.php
+*
+* Example: "$ckeditor->config['toolbar']" is PHP code in include.php. The very same here in the 
+* wb_ckconfig.js would be: "config.toolbar" inside CKEDITOR.editorConfig = function( config ). 
+*
+* Please read "readme-faq.txt" in the wb_config folder for more information about customizing.
+* 
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+    // Define changes to default configuration here.
+    // For complete reference see:
+    // http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+  // Different Toolbars. Remove, add or move 'SomeButton', with the quotes and following comma 
+    config.toolbar_Full =
+    [
+        { name: 'document',  items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing',   items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'forms',     items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+        { name: 'paragraph',   items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links',       items : [ 'Link','Unlink','Anchor' ] },
+        { name: 'insert',      items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+    ];
+  config.toolbar_WB_Basic = [
+            ['Source','Preview'],['Cut','Copy','Paste','PasteText','PasteFromWord'],['Image','Flash','Table','HorizontalRule'],['Wbdroplets','Wblink','Unlink','Anchor'],['Undo','Redo','-','SelectAll','RemoveFormat'],['Maximize','ShowBlocks','-','Code','About'],'/',
+            ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv']];
+
+    // see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar
+    config.toolbar_WB_Full =
+    [
+        { name: 'document', items : [ 'Source','-','Save','Print','-','DocProps','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Code','-','About' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+         { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton','HiddenField' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'links', items : [ 'Link','Unlink','Anchor','Wbdroplets','Wblink' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }
+
+    ];
+
+    config.toolbar_WB_Default =
+    [
+        { name: 'mode', items : [ 'Source','autoFormat','CommentSelectedRange','UncommentSelectedRange' ] },
+        { name: 'document', items : [ 'Save','wbSave','Print','-','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo','Backup' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links', items : [ 'Wbdroplets','Wblink','Unlink','Anchor' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe','Youtube','oembed', 'slideshow' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Syntaxhighlight','-','About' ] }
+
+    ];
+
+    config.toolbar_Basic = [['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','Code','About']];
+    config.toolbar_WB_Simple = [['Bold','Italic','-','NumberedList','BulletedList','-','Wbdroplets','Wblink','Unlink','-','Scayt','-','Code','About']];
+
+    // The default toolbar. Default: WB_Default
+  config.toolbar = 'WB_Default';
+
+  // The standard color of CKEditor. Can be changed in any hexadecimal color you like. Use the     
+  // UIColor Plugin in your CKEditor to pick the right color.
+    config.uiColor = '#BFD7EB';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.ModulVersiom  = '';
+
+    config.fullPage = false;
+
+    config.format_tags = 'p;div;h1;h2;h3;h4;h5;h6;pre;address';
+
+    config.resize_dir = 'resize_dir';
+
+    config.autoParagraph = true;
+
+    /* The skin to load. It may be the name of the skin folder inside the editor installation path,
+    * or the name and the path separated by a comma. 
+    * Available skins: moono, moonocolor*/
+    config.skin = 'moonocolor';
+
+  // Define all extra CKEditor plugins in _yourwb_/modules/ckeditor/ckeditor/plugins here
+  //config.extraPlugins = 'timestamp';
+    config.extraPlugins  = 'justify,find,flash,colorbutton,colordialog,dialogadvtab,'
+                         + 'div,font,forms,iframe,indentblock,language,bidi,liststyle,pagebreak,save,'
+                         + 'selectall,showblocks,smiley,templates,codemirror,autogrow,'
+                         + 'wblink,wbdroplets,youtube,oembed,backup,wbsave,wbrelation,wbabout';
+
+    config.removePlugins = 'wsc,link,save,newpage,print,shybutton,syntaxhighlight,preview,sourcearea,sourcedialog';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.entities = false;
+
+    config.scayt_autoStartup = false;
+
+    // The standard height and width of CKEditor in pixels.
+    config.height           = '250';
+    config.width            = '900';
+    config.toolbarLocation  = 'top';
+
+    config.autoGrow_minHeight = 250;
+    config.autoGrow_maxHeight = 600;
+    config.autoGrow_bottomSpace = 50;
+    config.autoGrow_onStartup = true;
+
+    // Define possibilities of automatic resizing in pixels. Set config.resize_enabled to false to 
+    // deactivate resizing.
+    config.resize_enabled   = true;
+    config.resize_minWidth  = 500;
+    config.resize_maxWidth  = 1500;
+    config.resize_minHeight = 200;
+    config.resize_maxHeight = 1200;
+    config.resize_dir = 'vertical';
+
+  config.docType           = '<!DOCTYPE html>';
+
+  config.image_previewText = 'WebsiteBaker helps you to create the website you want: A free, easy and secure, flexible and extensible open source content management system (CMS). Create new templates within minutes - powered by (X)HTML, CSS and jQuery. With WebsiteBaker it\'s quite natural your site is W3C-valid, SEO-friendly and accessible - there are no limitations at all. Use droplets - the new and revolutionary way of inserting PHP code - everywhere you want. In addition to that, WebsiteBaker and the community are offering lots of extensions: Just download, install with two clicks and use them. That is not enough? You want more? No problem, build your own modules! The WebsiteBaker API gives many opportunities you can rely on.';
+
+  // Both options are for XHTML 1.0 strict compatibility
+  // config.indentClasses = [ 'indent1', 'indent2', 'indent3', 'indent4' ];
+  // [ Left, Center, Right, Justified ]
+  // config.justifyClasses = [ 'left', 'center', 'right', 'justify' ];
+
+  config.templates_replaceContent =   false;
+
+  config.syntaxhighlight_lang = 'js', 'jscript', 'javascript', 'perl', 'Perl', 'pl', 'php', 'text', 'plain', 'sass', 'scss', 'scala', 'sql', 'xml', 'xhtml', 'xslt', 'html';
+
+  // Explanation: _P: new <p> paragraphs are created; _BR: lines are broken with <br> elements;
+  //              _DIV: new <div> blocks are created.
+  // Sets the behavior for the ENTER key. Default is _P allowed tags: _P | _BR | _DIV
+  config.enterMode = CKEDITOR.ENTER_P;
+
+  // Sets the behavior for the Shift + ENTER keys. allowed tags: _P | _BR | _DIV
+  config.shiftEnterMode = CKEDITOR.ENTER_BR;
+
+  /* Allows to force CKEditor not to localize the editor to the user language. 
+  * Default: Empty (''); Example: ('fr') for French. 
+  * Note: Language configuration is based on the backend language of WebsiteBaker. 
+  * It's defined in include.php
+  * config.language         = ''; */
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+  config.defaultLanguage   = 'en';
+
+    /* Protect PHP code tags (<?...?>) so CKEditor will not break them when switching from Source to WYSIWYG.
+    *  Uncommenting this line doesn't mean the user will not be able to type PHP code in the source.
+    *  This kind of prevention must be done in the server side, so just leave this line as is. */ 
+    config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+
+    //disable ckes Advanced Content Filter (ACF) to avoid wblinks to be filtered?
+    config.allowedContent = true;
+
+    // Simplify the dialog windows.
+//    config.removeDialogTabs = 'image:advanced;link:advanced';
+
+};
+
+CKEDITOR.on( 'instanceReady', function( ev )
+{
+    var writer = ev.editor.dataProcessor.writer;
+    // The character sequence to use for every indentation step.
+    writer.indentationChars = '\t';
+    // The way to close self closing tags, like <br />.
+    writer.selfClosingEnd   = ' />';
+    // The character sequence to be used for line breaks.
+    writer.lineBreakChars   = '\n';
+    // Setting rules for several HTML tags.
+    
+    var dtd = CKEDITOR.dtd;
+    for (var e in CKEDITOR.tools.extend( {}, dtd.$block ))
+    {
+        writer.setRules( e,
+        {
+            // Indicates that this tag causes indentation on line breaks inside of it.
+            indent : false,
+            // Insert a line break before the <h1> tag.
+            breakBeforeOpen : true,
+            // Insert a line break after the <h1> tag.
+            breakAfterOpen : false,
+            // Insert a line break before the </h1> closing tag.
+            breakBeforeClose : false,
+            // Insert a line break after the </h1> closing tag.
+            breakAfterClose : true
+        });
+    };
+    writer.setRules( 'p',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <p> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <p> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </p> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </p> closing tag.
+        breakAfterClose : true
+    });
+    writer.setRules( 'br',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <br /> tag.
+        breakBeforeOpen : false,
+        // Insert a line break after the <br /> tag.
+        breakAfterOpen : true
+    });
+    writer.setRules( 'a',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <a> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <a> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </a> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </a> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'div',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <div> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <div> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </div> closing tag.
+        breakBeforeClose : true,
+        // Insert a line break after the </div> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'img',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <img> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <img> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </img>> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </img> closing tag.
+        breakAfterClose : false
+    });
+
+    ev.editor.dataProcessor.htmlFilter.addRules(
+    {
+        elements:
+        {
+            $: function (element) {
+                // Output dimensions of images as width and height
+                if (element.name == 'img') {
+                    var style = element.attributes.style;
+                    if (style) {
+                        // Get the width from the style.
+                        var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec(style),
+                            width = match && match[1];
+
+                        // Get the height from the style.
+                        match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec(style);
+                        var height = match && match[1];
+console.log( element );
+
+                        if (width) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)width\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.width = width;
+                        }
+
+                        if (height) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)height\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.height = height;
+                        }
+                    }
+                }
+/**
+ * 
+                if (!element.attributes.style)
+                    delete element.attributes.style;
+ */
+
+                return element;
+            }
+        }
+    });
+
+});
+
+CKEDITOR.on( 'dialogDefinition', function( ev )
+    {
+        // Take the dialog name and its definition from the event data.
+        var dialogName = ev.data.name;
+        var dialogDefinition = ev.data.definition;
+
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'image' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var linkTab = dialogDefinition.getContents('Link');
+        }
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'wblink' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var infoTab = dialogDefinition.getContents( 'info' );
+            // Set the default value for the URL field.
+            var urlField = infoTab.get( 'url' );
+            urlField['default'] = 'www.example.com';
+        }
+
+    // Ends self closing tags the HTML4 way, like <br>.
+
+
+    });
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.js
===================================================================
--- trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.js	(revision 2)
@@ -0,0 +1,204 @@
+/*!
+ * Bootstrap without jQuery v0.5.0 for Bootstrap 3
+ * By Daniel Davis under MIT License
+ * https://github.com/tagawa/bootstrap-without-jquery
+ */
+
+(function() {
+    'use strict';
+    
+    /*
+     * Utility functions
+     */
+     
+    // transitionend - source: https://stackoverflow.com/questions/5023514/how-do-i-normalize-css3-transition-functions-across-browsers#answer-9090128
+    function transitionEndEventName() {
+        var i,
+            el = document.createElement('div'),
+            transitions = {
+                'transition':'transitionend',
+                'OTransition':'otransitionend',  // oTransitionEnd in very old Opera
+                'MozTransition':'transitionend',
+                'WebkitTransition':'webkitTransitionEnd'
+            };
+
+        for (i in transitions) {
+            if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) {
+                return transitions[i];
+            }
+        }
+
+        return false;
+    }
+    var transitionend = transitionEndEventName();
+    
+    // Get an event's target element and the element specified by the "data-target" attribute
+    function getTargets(event) {
+        var targets = {};
+        event = event || window.event;
+        targets.evTarget = event.currentTarget || event.srcElement;
+        var dataTarget = targets.evTarget.getAttribute('data-target');
+        targets.dataTarget = (dataTarget) ? document.querySelector(dataTarget) : false;
+        return targets;
+    }
+    
+    // Get the potential max height of an element
+    function getMaxHeight(element) {
+        // Source: http://n12v.com/css-transition-to-from-auto/
+        var prevHeight = element.style.height;
+        element.style.height = 'auto';
+        var maxHeight = getComputedStyle(element).height;
+        element.style.height = prevHeight;
+        element.offsetHeight; // force repaint
+        return maxHeight;
+    }
+    
+    // Fire a specified event
+    // Source: http://youmightnotneedjquery.com/
+    function fireTrigger(element, eventType) {
+        if (document.createEvent) {
+            var event = document.createEvent('HTMLEvents');
+            event.initEvent(eventType, true, false);
+            element.dispatchEvent(event);
+        } else {
+            element.fireEvent('on' + eventType);
+        }
+    }
+
+    
+    /*
+     * Collapse action
+     * 1. Get list of all elements that are collapse triggers
+     * 2. Add click event listener to these elements
+     * 3. When clicked, change target element's class name from "collapse" to "collapsing"
+     * 4. When action (collapse) is complete, change target element's class name from "collapsing" to "collapse in"
+     * 5. Do the reverse, i.e. "collapse in" -> "collapsing" -> "collapse"
+     */
+     
+    // Show a target element
+    function show(element, trigger) {
+        element.classList.remove('collapse');
+        element.classList.add('collapsing');
+        trigger.classList.remove('collapsed');
+        trigger.setAttribute('aria-expanded', true);
+        
+        // Set element's height to its maximum height
+        element.style.height = getMaxHeight(element);
+        
+        // Call the complete() function after the transition has finished
+        if (transitionend) {
+            element.addEventListener(transitionend, function() {
+                complete(element);
+            }, false);
+        } else {
+            // For browsers that don't support transitions (e.g. IE9 and lower);
+            complete(element);
+        }
+    }
+    
+    // Hide a target element
+    function hide(element, trigger) {
+        element.classList.remove('collapse');
+        element.classList.remove('in');
+        element.classList.add('collapsing');
+        trigger.classList.add('collapsed');
+        trigger.setAttribute('aria-expanded', false);
+        
+        // Reset element's height
+        element.style.height = getComputedStyle(element).height;
+        element.offsetHeight; // force repaint
+        element.style.height = '0px';
+    }
+    
+    // Change classes once transition is complete
+    function complete(element) {
+        element.classList.remove('collapsing');
+        element.classList.add('collapse');
+        element.setAttribute('aria-expanded', false);
+        
+        // Check whether the element is unhidden
+        if (element.style.height !== '0px') {
+            element.classList.add('in');
+            element.style.height = 'auto';
+        }
+    }
+
+    // Start the collapse action on the chosen element
+    function doCollapse(event) {
+        event.preventDefault();
+        var targets = getTargets(event);
+        var dataTarget = targets.dataTarget;
+        
+        // Add the "in" class name when elements are unhidden
+        if (dataTarget.classList.contains('in')) {
+            hide(dataTarget, targets.evTarget);
+        } else {
+            show(dataTarget, targets.evTarget);
+        }
+        return false;
+    }
+    
+    // Get all elements that are collapse triggers and add click event listeners
+    var collapsibleList = document.querySelectorAll('[data-toggle=collapse]');
+    for (var i = 0, leni = collapsibleList.length; i < leni; i++) {
+        collapsibleList[i].onclick = doCollapse;
+    }
+    
+    
+    /*
+     * Alert dismiss action
+     * 1. Get list of all elements that are alert dismiss buttons
+     * 2. Add click event listener to these elements
+     * 3. When clicked, find the target or parent element with class name "alert"
+     * 4. Remove that element from the DOM
+     */
+     
+    // Start the collapse action on the chosen element
+    function doDismiss(event) {
+        event.preventDefault();
+        // Get target element from data-target attribute
+        var targets = getTargets(event);
+        var target = targets.dataTarget;
+        
+        if (!target) {
+            // If data-target not specified, get parent or grandparent node with class="alert"
+            var parent = targets.evTarget.parentNode;
+            if (parent.classList.contains('alert')) {
+                target = parent;
+            } else if (parent.parentNode.classList.contains('alert')) {
+                target = parent.parentNode;
+            }
+        }
+        
+        fireTrigger(target, 'close.bs.alert');
+        target.classList.remove('in');
+        
+        function removeElement() {
+            // Remove alert from DOM
+            try {
+                target.parentNode.removeChild(target);
+                fireTrigger(target, 'closed.bs.alert');
+            } catch(e) {
+                window.console.error('Unable to remove alert');
+            }
+        }
+        
+        // Call the complete() function after the transition has finished
+        if (transitionend && target.classList.contains('fade')) {
+            target.addEventListener(transitionend, function() {
+                removeElement();
+            }, false);
+        } else {
+            // For browsers that don't support transitions (e.g. IE9 and lower);
+            removeElement();
+        }
+
+        return false;
+    }
+    
+     // Get all alert dismiss buttons and add click event listeners
+    var dismissList = document.querySelectorAll('[data-dismiss=alert]');
+    for (var j = 0, lenj = dismissList.length; j < lenj; j++) {
+        dismissList[j].onclick = doDismiss;
+    }
+})();
Index: trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.min.js
===================================================================
--- trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.min.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/bootstrap-without-jquery.min.js	(revision 2)
@@ -0,0 +1,7 @@
+/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/
+"document"in self&&!("classList"in document.createElement("_"))&&function(e){"use strict";if("Element"in e){var t="classList",n="prototype",r=e.Element[n],a=Object,i=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},l=function(e,t){this.name=e,this.code=DOMException[e],this.message=t},o=function(e,t){if(""===t)throw new l("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(t))throw new l("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(e,t)},c=function(e){for(var t=i.call(e.getAttribute("class")||""),n=t?t.split(/\s+/):[],r=0,a=n.length;a>r;r++)this.push(n[r]);this._updateClassName=function(){e.setAttribute("class",""+this)}},u=c[n]=[],d=function(){return new c(this)};if(l[n]=Error[n],u.item=function(e){return this[e]||null},u.contains=function(e){return e+="",-1!==o(this,e)},u.add=function(){var e,t=arguments,n=0,r=t.length,a=!1;do e=t[n]+"",-1===o(this,e)&&(this.push(e),a=!0);while(r>++n);a&&this._updateClassName()},u.remove=function(){var e,t=arguments,n=0,r=t.length,a=!1;do{e=t[n]+"";var i=o(this,e);-1!==i&&(this.splice(i,1),a=!0)}while(r>++n);a&&this._updateClassName()},u.toggle=function(e,t){e+="";var n=this.contains(e),r=n?t!==!0&&"remove":t!==!1&&"add";return r&&this[r](e),!n},u.toString=function(){return this.join(" ")},a.defineProperty){var g={get:d,enumerable:!0,configurable:!0};try{a.defineProperty(r,t,g)}catch(h){-2146823252===h.number&&(g.enumerable=!1,a.defineProperty(r,t,g))}}else a[n].__defineGetter__&&r.__defineGetter__(t,d)}}(self)/*!
+ * Bootstrap without jQuery v0.6.1 for Bootstrap 3
+ * By Daniel Davis under MIT License
+ * https://github.com/tagawa/bootstrap-without-jquery
+ */
+function(){"use strict";function e(){var e,t=document.createElement("div"),n={transition:"transitionend",OTransition:"otransitionend",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in n)if(n.hasOwnProperty(e)&&void 0!==t.style[e])return n[e];return!1}function t(e){var t={};e=e||window.event,t.evTarget=e.currentTarget||e.srcElement;var n=t.evTarget.getAttribute("data-target");return t.dataTarget=n?document.querySelector(n):!1,t}function n(e){var t=e.style.height;e.style.height="auto";var n=getComputedStyle(e).height;return e.style.height=t,e.offsetHeight,n}function r(e,t){if(document.createEvent){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!1),e.dispatchEvent(n)}else e.fireEvent("on"+t)}function a(e,t){e.classList.remove("collapse"),e.classList.add("collapsing"),t.classList.remove("collapsed"),t.setAttribute("aria-expanded",!0),e.style.height=n(e),d?e.addEventListener(d,function(){s(e)},!1):s(e)}function i(e,t){e.classList.remove("collapse"),e.classList.remove("in"),e.classList.add("collapsing"),t.classList.add("collapsed"),t.setAttribute("aria-expanded",!1),e.style.height=getComputedStyle(e).height,e.offsetHeight,e.style.height="0px"}function s(e){e.classList.remove("collapsing"),e.classList.add("collapse"),e.setAttribute("aria-expanded",!1),"0px"!==e.style.height&&(e.classList.add("in"),e.style.height="auto")}function l(e){e.preventDefault();var n=t(e),r=n.dataTarget;return r.classList.contains("in")?i(r,n.evTarget):a(r,n.evTarget),!1}function o(e){function n(){try{i.parentNode.removeChild(i),r(i,"closed.bs.alert")}catch(e){window.console.error("Unable to remove alert")}}e.preventDefault();var a=t(e),i=a.dataTarget;if(!i){var s=a.evTarget.parentNode;s.classList.contains("alert")?i=s:s.parentNode.classList.contains("alert")&&(i=s.parentNode)}return r(i,"close.bs.alert"),i.classList.remove("in"),d&&i.classList.contains("fade")?i.addEventListener(d,function(){n()},!1):n(),!1}function c(e){e=e||window.event;var t=e.currentTarget||e.srcElement;return t.parentElement.classList.toggle("open"),!1}function u(e){e=e||window.event;var t=e.currentTarget||e.srcElement;return t.parentElement.classList.remove("open"),e.relatedTarget&&"dropdown"!==e.relatedTarget.getAttribute("data-toggle")&&e.relatedTarget.click(),!1}for(var d=e(),g=document.querySelectorAll("[data-toggle=collapse]"),h=0,f=g.length;f>h;h++)g[h].onclick=l;for(var m=document.querySelectorAll("[data-dismiss=alert]"),v=0,p=m.length;p>v;v++)m[v].onclick=o;for(var y,E=document.querySelectorAll("[data-toggle=dropdown]"),w=0,b=E.length;b>w;w++)y=E[w],y.setAttribute("tabindex","0"),y.onclick=c,y.onblur=u}();
Index: trunk/templates/DefaultTemplate/js/editor.styles.js
===================================================================
--- trunk/templates/DefaultTemplate/js/editor.styles.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/editor.styles.js	(revision 2)
@@ -0,0 +1,87 @@
+﻿/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke
+ *  @copyright      2010-2011 Michael Tenschert, Dietrich Roland Pehlke
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+ 
+// The set of styles for the <b>Styles</b> drop-down list.
+CKEDITOR.stylesSet.add( 'wb', [
+    /* Block Styles */
+
+    // These styles are defined per editor.css in your template and can be found in "Format".
+    /*
+    { name : 'Paragraph'        , element : 'p' },
+    { name : 'Heading 1'        , element : 'h1' },
+    { name : 'Heading 2'        , element : 'h2' },
+    { name : 'Heading 3'        , element : 'h3' },
+    { name : 'Heading 4'        , element : 'h4' },
+    { name : 'Heading 5'        , element : 'h5' },
+    { name : 'Heading 6'        , element : 'h6' },
+    { name : 'Preformatted Text', element : 'pre' },
+    { name : 'Address'            , element : 'address' },
+    */
+
+    { name: 'Blue Title',       element: 'h3',      styles: { 'color': 'Blue' } },
+    { name: 'Red Title',        element: 'h3',      styles: { 'color': 'Red' } },
+
+    /* Inline Styles */
+    { name: 'Marker: Yellow',   element: 'span',    styles: { 'background-color': 'Yellow' } },
+    { name: 'Marker: Green',    element: 'span',    styles: { 'background-color': 'Lime' } },
+
+    // These are core styles available as toolbar buttons. You may opt enabling
+    // some of them in the Styles combo, removing them from the toolbar.
+    /*
+
+    { name : 'Strong'           , element : 'strong', overrides : 'b' },
+    { name : 'Emphasis'         , element : 'em'    , overrides : 'i' },
+    { name : 'Underline'        , element : 'u' },
+    { name : 'Strikethrough'    , element : 'strike' },
+    { name : 'Subscript'        , element : 'sub' },
+    { name : 'Superscript'      , element : 'sup' },
+    */
+
+    { name : 'Big'              , element : 'big' },
+    { name : 'Small'            , element : 'small' },
+    { name : 'Typewriter'       , element : 'tt' },
+
+    { name : 'Computer Code'    , element : 'code' },
+    { name : 'Keyboard Phrase'  , element : 'kbd' },
+    { name : 'Sample Text'      , element : 'samp' },
+    { name : 'Variable'         , element : 'var' },
+
+    { name : 'Deleted Text'     , element : 'del' },
+    { name : 'Inserted Text'    , element : 'ins' },
+
+    { name : 'Cited Work'       , element : 'cite' },
+    { name : 'Inline Quotation' , element : 'q' },
+
+    { name : 'Language: RTL'    , element : 'span', attributes : { 'dir' : 'rtl' } },
+    { name : 'Language: LTR'    , element : 'span', attributes : { 'dir' : 'ltr' } },
+
+    /* Object Styles */
+    {
+        name: 'Image on Left',
+        element: 'img',
+        attributes: {
+            style: 'padding: 5px; margin-right: 5px',
+            border: '2',
+            align: 'left'
+        }
+    },
+    {
+        name : 'Image on Right',
+        element : 'img',
+        attributes :
+        {
+            'style' : 'padding: 5px; margin-left: 5px',
+            'border' : '2',
+            'align' : 'right'
+        }
+    }
+
+] );
Index: trunk/templates/DefaultTemplate/js/editor.templates.js
===================================================================
--- trunk/templates/DefaultTemplate/js/editor.templates.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/editor.templates.js	(revision 2)
@@ -0,0 +1,94 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// Register a templates definition set named "default".
+CKEDITOR.addTemplates( 'default',
+{
+    // The name of sub folder which hold the shortcut preview images of the
+    // templates.
+    imagesPath : CKEDITOR.getUrl( CKEDITOR.plugins.getPath( 'templates' ) + '/templates/images/' ),
+
+    // The templates definitions.
+    templates :
+        [
+            {
+                title: 'Image and Title',
+                image: 'template1.gif',
+                description: 'One main image with a title and text that surround the image.',
+                html:
+                    '<h3>' +
+                        '<img style="margin-right: 10px" height="100" width="100" align="left"/>' +
+                        'Type the title here'+
+                    '</h3>' +
+                    '<p>' +
+                        'Type the text here' +
+                    '</p>'
+            },
+            {
+                title: 'Strange Template',
+                image: 'template2.gif',
+                description: 'A template that defines two colums, each one with a title, and some text.',
+                html:
+                    '<table style="width:100%; border-collapse: collapse;">' +
+                        '<tr>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 1</h3>' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 2</h3>' +
+                            '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' +
+                                'Text 1' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td>' +
+                                'Text 2' +
+                            '</td>' +
+                        '</tr>' +
+                    '</table>' +
+                    '<p>' +
+                        'More text goes here.' +
+                    '</p>'
+            },
+            {
+                title: 'Text and Table',
+                image: 'template3.gif',
+                description: 'A title with some text and a table.',
+                html:
+                    '<div style="width: 80%">' +
+                        '<h3>' +
+                            'Title goes here' +
+                        '</h3>' +
+                        '<table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1">' +
+                            '<caption style="border:solid 1px black">' +
+                                '<strong>Table title</strong>' +
+                            '</caption>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                        '</table>' +
+                        '<p>' +
+                            'Type the text here' +
+                        '</p>' +
+                    '</div>'
+            }
+        ]
+});
Index: trunk/templates/DefaultTemplate/js/ie10-viewport-bug-workaround.js
===================================================================
--- trunk/templates/DefaultTemplate/js/ie10-viewport-bug-workaround.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/ie10-viewport-bug-workaround.js	(revision 2)
@@ -0,0 +1,23 @@
+/*!
+ * IE10 viewport hack for Surface/desktop Windows 8 bug
+ * Copyright 2014 Twitter, Inc.
+ * Licensed under the Creative Commons Attribution 3.0 Unported License. For
+ * details, see http://creativecommons.org/licenses/by/3.0/.
+ */
+
+// See the Getting Started docs for more information:
+// http://getbootstrap.com/getting-started/#support-ie10-width
+
+(function () {
+  'use strict';
+  if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
+    var msViewportStyle = document.createElement('style')
+    msViewportStyle.appendChild(
+      document.createTextNode(
+        '@-ms-viewport{width:auto!important}'
+      )
+    )
+    document.querySelector('head').appendChild(msViewportStyle)
+  }
+})();
+
Index: trunk/templates/DefaultTemplate/js/readme-faq.txt
===================================================================
--- trunk/templates/DefaultTemplate/js/readme-faq.txt	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/readme-faq.txt	(revision 2)
@@ -0,0 +1,108 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Woellbrink
+ *  @copyright      2010-2012 Michael Tenschert, Dietrich Roland Pehlke, Luisehahne
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+################################################
+
+---     WebsiteBaker CKEditor module         ---
+---     FAQ: How to use customization         --- 
+
+################################################
+################################################
+
+
+# Question: #
+
+What files are there to customize CKEditor for WebsiteBaker?
+
+# Answer:   #
+
+All default files in CKEditor modules are in the folder: _yourwbinstallation_/modules/ckeditor/wb_config
+
+There are four different files. Please look inside each file with your FTP-Browser / AddonFileEditor / on your local computer:
+
++ wb_ckconfig.js:         Here are most of the configuration issues defined. 
+                        Toolbar-Configuration, behavior on Enter / Shift+Enter, default language and so on.
+
++ editor.css:             The default look of the WYSIWYG textarea and the preview. 
+                        You can also put an editor.css in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.styles.js:     The default styles you can choose from a dropdown in the CKEditor toolbar. 
+                        You can also put an editor.styles.js in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.templates.js:     The default CKE templates you can choose of a button in CKEditor toolbar. 
+                        Please note: We recommend not to use CKE templates, because the WebsiteBaker template
+                        should define the different blocks and the template. 
+                        
+Furthermore this files and some other configurations (we recommend you shouldn't change unless you really know what you are doing) are stored in:
+_yourwbinstallation_/modules/ckeditor/include.php
+
+
+################################################
+
+
+# Question: #
+
+Why back to the roots and not different folders anymore?
+
+# Answer:   #
+
+All four configuration files (wb_ckconfig.js, editor.css, editor.styles.js, editor.templates.js) are available in 
+_yourwbinstallation_/modules/ckeditor/wb_config
+
+The wb_config is loaded and recognized by the CKEditor module unless you copy the folder "wb_config."!
+
+As an example you have two possibilities to call the configuration files
+    
+    1) copy the wb_config to the folder _yourwbinstallation_/templates and all changes in config files are for all templates
+    2) copy the wb_config  to your _yourdefaulttemplate_: _yourwbinstallation_/templates/_yourdefaulttemplate_ 
+       rename folder wb_config to editor, your changes are only for _yourdefaulttemplate_
+    
+    Change the configfiles with your FTP-Browser / AddonFileEditor / ... 
+
+You should never change the files in _yourwbinstallation_/modules/ckeditor/wb_config, as they are overwritten with any update of CKEditor module and / or WebsiteBaker! 
+You never have any problems when upgrading CKEditor module to another version.
+
+
+################################################
+
+
+# Question: #
+
+How is the workflow of reading CKEditor files?
+
+# Answer:   #
+
+Note: The workflow is defined inside _yourwbinstallation_/modules/ckeditor/include.php
+
+1) is called as first if available, 2) is the next one, and so on.
+
+search order for CKEditor files 
+
+editor.css
+
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor.css
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/css/editor.css
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/editor.css
+    4) _yourwbinstallation_/templates/wb_config/editor.css
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/editor.css
+
+wb_ckconfig.js,editor.styles.js,editor.templates.js    
+    
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/wb_ckconfig.js
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/js/wb_ckconfig.js
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/wb_ckconfig.js
+    4) _yourwbinstallation_/templates/wb_config/wb_ckconfig.js
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/wb_ckconfig.js
+
+etc...    
+    
Index: trunk/templates/DefaultTemplate/js/wb_ckconfig.js
===================================================================
--- trunk/templates/DefaultTemplate/js/wb_ckconfig.js	(nonexistent)
+++ trunk/templates/DefaultTemplate/js/wb_ckconfig.js	(revision 2)
@@ -0,0 +1,365 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink, Marmot, Luisehahne
+ *  @copyright      Frederico Knabben
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+/*
+* WARNING: Clear the cache of your browser cache after you modify this file!
+* If you don't do this, you may notice that your browser is ignoring all your changes.
+*
+* --------------------------------------------------
+*
+* Note: Some CKEditor configs are set in _yourwb_/modules/ckeditor/include.php
+*
+* Example: "$ckeditor->config['toolbar']" is PHP code in include.php. The very same here in the
+* wb_ckconfig.js would be: "config.toolbar" inside CKEDITOR.editorConfig = function( config ).
+*
+* Please read "readme-faq.txt" in the wb_config folder for more information about customizing.
+*
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+    // Define changes to default configuration here.
+    // For complete reference see:
+    // http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+  // Different Toolbars. Remove, add or move 'SomeButton', with the quotes and following comma
+    config.toolbar_Full =
+    [
+        { name: 'document',  items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing',   items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'forms',     items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+        { name: 'paragraph',   items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links',       items : [ 'Link','Unlink','Anchor' ] },
+        { name: 'insert',      items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+    ];
+
+  config.toolbar_WB_Mini = [
+            ['Source','Cut','Copy'],['PasteText','PasteFromWord'],['Undo','Redo','-','RemoveFormat'],['Wbdroplets','Wblink','Unlink','Anchor'],
+            ['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+            ['Styles','Format','Font','FontSize'],['NumberedList','BulletedList','-','Blockquote','CreateDiv'],['About']];
+
+  config.toolbar_WB_Basic = [
+            ['Source','Preview'],['Cut','Copy','Paste','PasteText','PasteFromWord'],['Image','Flash','Table','HorizontalRule'],['Wbdroplets','Wblink','Unlink','Anchor'],['Undo','Redo','-','SelectAll','RemoveFormat'],['Maximize','ShowBlocks','-','Code','About'],'/',
+            ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv']];
+
+    // see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar
+    config.toolbar_WB_Full =
+    [
+        { name: 'document', items : [ 'Source','-','Save','Print','-','DocProps','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Code','-','About' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+         { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton','HiddenField' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'links', items : [ 'Link','Unlink','Anchor','Wbdroplets','Wblink' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }
+
+    ];
+
+    config.toolbar_WB_Default =
+    [
+        { name: 'mode', items : [ 'Source','autoFormat','CommentSelectedRange','UncommentSelectedRange' ] },
+        { name: 'document', items : [ 'Save','wbSave','Print','-','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo','Backup' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links', items : [ 'Wbdroplets','Wblink','Unlink','Anchor' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe','Youtube','oembed', 'slideshow' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','Syntaxhighlight','CreatePlaceholder','-','About' ] }
+
+    ];
+
+    config.toolbar_Basic = [['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','Code','About']];
+    config.toolbar_WB_Simple = [['Bold','Italic','-','NumberedList','BulletedList','-','Wbdroplets','Wblink','Unlink','-','Scayt','-','Code','About']];
+
+    // The default toolbar. Default: WB_Default
+  config.toolbar = 'WB_Default';
+
+  // The standard color of CKEditor. Can be changed in any hexadecimal color you like. Use the
+  // UIColor Plugin in your CKEditor to pick the right color.
+    config.uiColor = '#BFD7EB';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.ModulVersion  = '';
+    config.WBrevision    = '';
+    config.WBversion     = '2.8.3 SP6';
+
+    config.fullPage = false;
+
+    config.format_tags = 'p;div;h1;h2;h3;h4;h5;h6;pre;address';
+
+    config.autoParagraph = true;
+
+    /* The skin to load. It may be the name of the skin folder inside the editor installation path,
+    * or the name and the path separated by a comma.
+    * Available skins: moono, moonocolor*/
+    config.skin = 'moonocolor';
+
+  // Define all extra CKEditor plugins in _yourwb_/modules/ckeditor/ckeditor/plugins here
+  //config.extraPlugins = 'timestamp';
+    config.extraPlugins  = 'justify,find,flash,colorbutton,colordialog,dialogadvtab'
+                         + ',div,font,forms,iframe,indentblock,language,bidi,liststyle,pagebreak,save'
+                         + ',selectall,showblocks,smiley,templates,codemirror,autogrow,filebrowser'
+                         + ',wblink,wbdroplets,youtube,oembed,backup,wbrelation,wbabout';
+
+    config.removePlugins = 'wsc,link,save,newpage,print,shybutton,syntaxhighlight,preview,alphamanager'
+                         + ',sourcearea,sourcedialog,imageresponsive,image2,wbsave,youtube,language,flash,placeholder';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.entities = false;
+
+    config.scayt_autoStartup = false;
+
+    // The standard height and width of CKEditor in pixels.
+    config.height           = '350';
+    config.width            = '100%';
+    config.toolbarLocation  = 'top';
+
+    config.autoGrow_minHeight = 100;
+    config.autoGrow_maxHeight = 350;
+    config.autoGrow_bottomSpace = 50;
+    config.autoGrow_onStartup = false;
+    // Define possibilities of automatic resizing in pixels. Set config.resize_enabled to false to
+    // deactivate resizing.
+    config.resize_enabled   = true;
+    config.resize_minWidth  = 500;
+    config.resize_maxWidth  = 1500;
+    config.resize_minHeight = 100;
+    config.resize_maxHeight = 1678;
+    config.resize_dir = 'both';
+
+  config.docType           = '<!DOCTYPE html>';
+
+  config.image_previewText = 'WebsiteBaker helps you to create the website you want: A free, easy and secure, flexible and extensible open source content management system (CMS). Create new templates within minutes - powered by (X)HTML, CSS and jQuery. With WebsiteBaker it\'s quite natural your site is W3C-valid, SEO-friendly and accessible - there are no limitations at all. Use droplets - the new and revolutionary way of inserting PHP code - everywhere you want. In addition to that, WebsiteBaker and the community are offering lots of extensions: Just download, install with two clicks and use them. That is not enough? You want more? No problem, build your own modules! The WebsiteBaker API gives many opportunities you can rely on.';
+
+  // Both options are for XHTML 1.0 strict compatibility
+  // config.indentClasses = [ 'indent1', 'indent2', 'indent3', 'indent4' ];
+  // [ Left, Center, Right, Justified ]
+  // config.justifyClasses = [ 'left', 'center', 'right', 'justify' ];
+
+  config.templates_replaceContent =   false;
+
+  config.syntaxhighlight_lang = 'js', 'jscript', 'javascript', 'perl', 'Perl', 'pl', 'php', 'text', 'plain', 'sass', 'scss', 'scala', 'sql', 'xml', 'xhtml', 'xslt', 'html';
+
+  // Explanation: _P: new <p> paragraphs are created; _BR: lines are broken with <br> elements;
+  //              _DIV: new <div> blocks are created.
+  // Sets the behavior for the ENTER key. Default is _P allowed tags: _P | _BR | _DIV
+  config.enterMode = CKEDITOR.ENTER_P;
+
+  // Sets the behavior for the Shift + ENTER keys. allowed tags: _P | _BR | _DIV
+  config.shiftEnterMode = CKEDITOR.ENTER_BR;
+
+  /* Allows to force CKEditor not to localize the editor to the user language.
+  * Default: Empty (''); Example: ('fr') for French.
+  * Note: Language configuration is based on the backend language of WebsiteBaker.
+  * It's defined in include.php
+  * config.language         = ''; */
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+  config.defaultLanguage   = 'en';
+
+    /* Protect PHP code tags (<?...?>) so CKEditor will not break them when switching from Source to WYSIWYG.
+    *  Uncommenting this line doesn't mean the user will not be able to type PHP code in the source.
+    *  This kind of prevention must be done in the server side, so just leave this line as is. */
+    config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+//    config.protectedSource.push(/\[\[[\s\S]*?\]\]/g); //  droplets
+//    config.protectedSource.push( /<i[\s\S]*?\>/g ); //allows beginning <i> tag
+//    config.protectedSource.push( /<\/i[\s\S]*?\>/g ); //allows ending </i> tag
+//    config.protectedSource.push( /<span[\s\S]*?\>/g ); //allows beginning <span> tag
+//    config.protectedSource.push( /<\/span[\s\S]*?\>/g ); //allows ending </span> tag
+    //disable ckes Advanced Content Filter (ACF) to avoid wblinks to be filtered?
+    config.allowedContent = true;
+
+    config.jsplus_image_editor_init_tool = 'text';
+
+    // Simplify the dialog windows.
+//    config.removeDialogTabs = 'image:advanced;link:advanced';
+
+    config.filebrowserWindowWidth = '80%';
+    config.filebrowserWindowHeight = '70%';
+
+};
+
+CKEDITOR.on( 'instanceReady', function( ev )
+{
+    var writer = ev.editor.dataProcessor.writer;
+    // The character sequence to use for every indentation step.
+    writer.indentationChars = '\t';
+    // The way to close self closing tags, like <br />.
+    writer.selfClosingEnd   = ' />';
+    // The character sequence to be used for line breaks.
+    writer.lineBreakChars   = '\n';
+    // Setting rules for several HTML tags.
+
+    var dtd = CKEDITOR.dtd;
+    for (var e in CKEDITOR.tools.extend( {}, dtd.$block ))
+    {
+        writer.setRules( e,
+        {
+            // Indicates that this tag causes indentation on line breaks inside of it.
+            indent : false,
+            // Insert a line break before the <h1> tag.
+            breakBeforeOpen : true,
+            // Insert a line break after the <h1> tag.
+            breakAfterOpen : false,
+            // Insert a line break before the </h1> closing tag.
+            breakBeforeClose : false,
+            // Insert a line break after the </h1> closing tag.
+            breakAfterClose : true
+        });
+    };
+    writer.setRules( 'p',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <p> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <p> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </p> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </p> closing tag.
+        breakAfterClose : true
+    });
+    writer.setRules( 'br',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <br /> tag.
+        breakBeforeOpen : false,
+        // Insert a line break after the <br /> tag.
+        breakAfterOpen : true
+    });
+    writer.setRules( 'a',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <a> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <a> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </a> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </a> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'div',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <div> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <div> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </div> closing tag.
+        breakBeforeClose : true,
+        // Insert a line break after the </div> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'img',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <img> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <img> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </img>> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </img> closing tag.
+        breakAfterClose : false
+    });
+/*
+*/
+    ev.editor.dataProcessor.htmlFilter.addRules(
+    {
+        elements:
+        {
+            $: function (element) {
+                // Output dimensions of images as width and height
+                if (element.name == 'img') {
+                    var style = element.attributes.style;
+                    if (style) {
+                        // Get the width from the style.
+                        var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec(style),
+                            width = match && match[1];
+
+                        // Get the height from the style.
+                        match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec(style);
+                        var height = match && match[1];
+console.log( element );
+
+                        if (width) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)width\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.width = width;
+                        }
+
+                        if (height) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)height\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.height = height;
+                        }
+                    }
+                }
+/**
+ *
+                if (!element.attributes.style)
+                    delete element.attributes.style;
+ */
+
+                return element;
+            }
+        }
+    });
+
+});
+
+CKEDITOR.on( 'dialogDefinition', function( ev )
+{
+        // Take the dialog name and its definition from the event data.
+        var editor = ev.editor;
+        var dialogName = ev.data.name;
+        var dialogDefinition = ev.data.definition;
+
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'image' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var linkTab = dialogDefinition.getContents('Link');
+        }
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'wblink' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var infoTab = dialogDefinition.getContents( 'info' );
+            // Set the default value for the URL field.
+            var urlField = infoTab.get( 'url' );
+            urlField['default'] = 'www.example.com';
+        }
+
+    }); // dialogDefinition
Index: trunk/templates/DefaultTemplate/languages/DE.php
===================================================================
--- trunk/templates/DefaultTemplate/languages/DE.php	(nonexistent)
+++ trunk/templates/DefaultTemplate/languages/DE.php	(revision 2)
@@ -0,0 +1,8 @@
+<?php
+
+// This website uses cookies. When you browse on this site, you agree to the use of cookies.
+// Diese Website verwendet Cookies. Wenn Sie auf dieser Seite durchsuchen, stimmen Sie dem Gebrauch von Cookies zu
+
+$TEXT['FORGOTTEN_DETAILS'] = 'Passwort vergessen?';
+$TEXT['ENABLE'] = 'Einschalten';
+$TEXT['DISABLE'] = 'Ausschalten';

Property changes on: trunk/templates/DefaultTemplate/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/languages/EN.php
===================================================================
--- trunk/templates/DefaultTemplate/languages/EN.php	(nonexistent)
+++ trunk/templates/DefaultTemplate/languages/EN.php	(revision 2)
@@ -0,0 +1,8 @@
+<?php
+
+// This website uses cookies. When you browse on this site, you agree to the use of cookies.
+// Diese Website verwendet Cookies. Wenn Sie auf dieser Seite durchsuchen, stimmen Sie dem Gebrauch von Cookies zu
+
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgot Password?';
+$TEXT['ENABLE'] = 'Enable';
+$TEXT['DISABLE'] = 'Disable';

Property changes on: trunk/templates/DefaultTemplate/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/modal_dialog.html
===================================================================
--- trunk/templates/DefaultTemplate/modal_dialog.html	(nonexistent)
+++ trunk/templates/DefaultTemplate/modal_dialog.html	(revision 2)
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML>
+<html lang="de">
+<head>
+  <meta charset="utf-8" />
+  <title>SimpleViewer Gallery</title>
+  <meta name="description" content="tmp" />
+  <meta name="keywords" content="tmp" />
+  <meta name="revisit-after" content="7" />
+	<!-- Mobile viewport optimisation -->
+	<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <!-- stylesheets -->
+  <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" />
+  <!-- Optional Bootstrap Theme -->
+  <link href="css/bootstrap-theme.min.css" rel="stylesheet" type="text/css" />
+  <!-- Documentation extras -->
+<style type="text/css">
+<!--
+#Overlay
+{
+  visibility: hidden;
+  position: absolute;
+  left: 90px;
+  top: 120px;
+  width:200px;
+  height:90px;
+  text-align:center;
+  border: solid;
+  background-color: lightgray;
+}-->
+</style>
+<script type="text/javascript">
+<!--
+function DlgShow(Message)
+{
+  // Change the message.
+  var Msg = document.getElementById("DlgContent");
+  Msg.innerHTML = Message;
+ 
+  // Display the dialog box.
+  var Dlg = document.getElementById("Overlay");
+  Dlg.style.visibility = "visible";
+}
+
+function DlgHide(Result)
+{
+  // Display the result onscreen.
+  var Output = document.getElementById("Result");
+  Output.innerHTML = "You clicked: " + Result;
+ 
+  // Hide the dialog box.
+  var Dlg = document.getElementById("Overlay");
+  Dlg.style.visibility = "hidden";
+}
+-->
+</script>
+</head>
+
+<body>
+
+<div id="Overlay">
+  <div>
+   <p id="DlgContent">Content Goes Here</p>
+   <input id="btnYes"
+       type="button"
+       value="Yes"
+       onclick="DlgHide('Yes')" />
+   <input id="btnNo"
+       type="button"
+       value="No"
+       onclick="DlgHide('No')" />
+  </div>
+</div>
+</body>
+</html> 
\ No newline at end of file
Index: trunk/templates/DefaultTemplate/preview.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/preview.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/preview1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTemplate/preview1.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/templates/index.html.twig
===================================================================
--- trunk/templates/DefaultTemplate/templates/index.html.twig	(nonexistent)
+++ trunk/templates/DefaultTemplate/templates/index.html.twig	(revision 2)
@@ -0,0 +1,165 @@
+{#
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * index.twig
+ *
+ * @category     Templates
+ * @package
+ * @author       M.v.d.Decken <wkl@isteam.de>
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websiteBaker.org>
+ * @copyright    M.v.d.Decken <wkl@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      1.6.8
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        File available since 09.01.2013
+ */
+#}
+<!DOCTYPE HTML>
+<html lang="{{ Reg.Language |lower }}">
+<head>
+    <meta charset="{{ Reg.DefaultCharset }}">
+    <title>{{ sTmpHeaderTitle|trim }}</title>
+    <meta name="description" content="{{ Reg.WebsiteDescription }}" >
+    <meta name="keywords" content="{{ Reg.WebsiteKeywords }}" >
+    <!-- Mobile viewport optimisation -->
+    <meta name="viewport" content="width=device-width; initial-scale=1.0;maximum-scale=1, user-scalable=0;target-densitydpi=device-dpi" >
+    <meta name="generator" content="WebsiteBaker 2.8 CMS; {{ Reg.AppUrl }}">
+
+    <meta name="author" content="WebsiteBaker Org e.V." >
+    <meta name="robots" content="index,follow" >
+    <meta name="revisit-after" content="7 days" >
+
+    <link href="{{ Reg.TemplateUrl }}css/normalize.css" rel="stylesheet" media="screen" >
+    <link href="{{ Reg.TemplateUrl }}css/w3.css" rel="stylesheet" media="screen" >
+    <link href="{{ Reg.TemplateUrl }}css/CookieNotice.css" rel="stylesheet" media="screen" >
+    <link href="{{ Reg.TemplateUrl }}css/print.css" rel="stylesheet" media="print" >
+    <link href="http://addon.websitebaker.org/modules/wb_addview/rss.php?page_id=3" rel="alternate" type="application/rss+xml" title="WebsiteBaker Addons - Last 20 updated addons" >
+    <link href="http://websitebaker.org/modules/news/rss.php?page_id=9" rel="alternate" type="application/rss+xml" title="WebsiteBaker Ankündigungen/Pressemitteilungen" >
+    <link rel="shortcut icon" href="{{ Reg.AppUrl }}favicon.ico"/>
+    {{ register_frontend_css }}
+    <script src="{{ Reg.TemplateUrl }}scripte/domReady.js" charset="UTF-8"></script>
+    <script src="{{ Reg.TemplateUrl }}scripte/LoadOnFly.js" charset="UTF-8"></script>
+    {{ register_frontend_jquery }}
+    {{ register_frontend_js }}
+
+</head>
+
+<body>
+
+
+  <div id="wb-site">
+    <div id="wb-top">
+      <div id="wb-logo">
+        <a href="{{ Reg.AppUrl }}"><img class="img" src="{{ Reg.TemplateUrl }}/img/WB-logo.png" alt="logo" title="WebsiteBaker" ></a>
+      </div>
+      {% if MultiLingual != '' %}
+      <div id="wb-lang">
+        <div id="text_lang">
+        </div>
+        <div id="wb-flag">
+                {{ MultiLingual }}
+              </div>
+            </div>
+            {% endif %}
+            <div id="wb-navi">
+                <div id="navimain" class="shadow round-top">
+                    {{ navimain }}
+            </div>
+            <div id="wb-search">
+
+        </div>
+      </div>
+    </div>
+    <!-- Start wrap -->
+    <div id="wb-wrap" class="shadow-inner">
+      <!-- Start Slider -->
+      {% if PageContent6 != '' %}
+      <div id="slider_container">
+             {{ PageContent6 }}
+      </div>
+      {% endif %}
+      {{ breadcrumb }}
+      <div id="left">
+        <!-- Start Main Block -->
+          [[iEditThisPage]]
+      {% if PageContent5 != '' %}
+        <div id="block2">
+          <div id="text2" class="rounded">
+             {{ PageContent5 }}
+          </div>
+        </div>
+      {% endif %}
+      </div>
+
+      <div id="block1">
+        <div id="text1">
+              {{ PageContent1 }}
+        </div>
+      </div>
+
+      <div id="right">
+        <!-- Start right -->
+      {% if PageContent4 != '' %}
+        <div id="quicklinks">
+            {{ QuickLinkNavi }}
+        </div>
+      {% else %}
+      {% if subnavi2 %}
+        <div id="subnavi" class="round-top">
+          <div class="heading-subnavi">
+            {{ HeadingSubnavi }}
+          </div>
+          <div id="submenu">
+            {{ subnavi }}{{ subnavi2 }}
+          </div>
+        </div>
+      {% endif %}
+     {% endif %}
+      {{ PageContent3 }}
+      </div>
+    </div>
+
+  </div>
+
+  <div id="bg_footer">
+    <div id="footer_inner" class="shadow-inner round-bottom">
+      <div id="navi2">
+        {{ footnavi }}
+      </div>
+    </div>
+
+    <div id="site_footer">
+      <div id="powered_by">
+        {{ Reg.WebsiteHeader }}
+      </div>
+
+      <div id="wb_footer">
+        {{ Reg.WebsiteFooter }}
+      </div>
+    </div>
+  </div>
+
+<script src="{{ Reg.TemplateUrl }}js/CookieNotice.js" charset="UTF-8"></script>
+<script src="{{ Reg.TemplateUrl }}javascript.function.js" ></script>
+    {{ register_frontend_body_jquery }}
+    {{ register_frontend_body_js }}
+</body>
+</html>
\ No newline at end of file

Property changes on: trunk/templates/DefaultTemplate/templates/index.html.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTemplate/uninstall.php
===================================================================
--- trunk/templates/DefaultTemplate/uninstall.php	(nonexistent)
+++ trunk/templates/DefaultTemplate/uninstall.php	(revision 2)
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @category        templates
+ * @package         WB theme
+ * @subpackage      install
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2012, WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+/* -------------------------------------------------------- */
+// Must include code to stop this file being accessed directly
+if(defined('WB_PATH') == false) { die('Illegale file access /'.basename(__DIR__).'/'.basename(__FILE__).''); }
+/* -------------------------------------------------------- */
+

Property changes on: trunk/templates/DefaultTemplate/uninstall.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/LoadErrorlog.php
===================================================================
--- trunk/templates/DefaultTheme/LoadErrorlog.php	(nonexistent)
+++ trunk/templates/DefaultTheme/LoadErrorlog.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+/**
+ * LoadErrorlog.php
+ */
+    $sAppPath = dirname(dirname(__DIR__));
+    if (is_readable($sAppPath.'/config.php')) {require ($sAppPath.'/config.php');}
+    if (!class_exists('admin', false)) {require (WB_PATH.'/framework/class.admin.php');}
+    // An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE.
+    $aRequestVars = $_REQUEST;
+    $sErrorlogFile = WB_PATH.'/var/logs/php_error.log.php';
+    $sErrorlogUrl  = WB_URL .'/var/logs/php_error.log.php';
+    $aJsonRespond['url'] = $sErrorlogUrl;
+    // initialize json_respond array  (will be sent back)
+    $aJsonRespond = array();
+    $aJsonRespond['content'] = array();
+    $aJsonRespond['message'] = 'Load operation failed';
+    $aJsonRespond['success'] = false;
+    $admin = new admin('##skip##', false, false);
+    if ( (int)$admin->get_user_id() != 1){
+        $aJsonRespond['message'] = 'illegal file access';
+        exit(json_encode($aJsonRespond));
+    }
+    if (!($aJsonRespond['content'] = file($sErrorlogFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES|FILE_TEXT))){
+        exit(json_encode($aJsonRespond));
+    }
+    $output = implode('<br />',$aJsonRespond['content']);
+
+    // If the script is still running, set success to true
+    $aJsonRespond['success'] = 'true';
+// and echo the answer as json to the ajax function
+    $output = json_encode ($output, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
+    echo stripslashes($output);
+

Property changes on: trunk/templates/DefaultTheme/LoadErrorlog.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/browse.css
===================================================================
--- trunk/templates/DefaultTheme/browse.css	(nonexistent)
+++ trunk/templates/DefaultTheme/browse.css	(revision 2)
@@ -0,0 +1,6 @@
+body,td,th,input,textarea {font-family:Arial,Helvetica,sans-serif;font-size:12px;}
+body {background-color:#fff;margin:0;}
+hr {margin:0;color:#003366;height:1px;}
+.hide {display:none;}
+a:link, a:visited, a:active {color:#003366;text-decoration:none;}
+a:hover {text-decoration:none;color:#336699;}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/ckeditor_config/editor.css
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/editor.css	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/editor.css	(revision 2)
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+body
+{
+    font-family: Arial, Verdana, sans-serif;
+    font-size: 12px;
+    color: #222;
+    /* Remove the background color to make it transparent */
+    background-color: #fff;
+}
+
+html
+{
+    /* #3658: [IE6] Editor document has horizontal scrollbar on long lines
+    To prevent this misbehavior, we show the scrollbar always */
+    _overflow-y: scroll
+}
+
+img:-moz-broken
+{
+    -moz-force-broken-image-icon : 1;
+    width : 24px;
+    height : 24px;
+}
+img, input, textarea
+{
+    cursor: default;
+}
+
+.indent1 {
+  margin-left: 40px;
+}
+.indent2 {
+  margin-left: 80px;
+}
+.indent3 {
+  margin-left: 120px;
+}
+.indent4 {
+  margin-left: 160px;
+}
+.left {
+  text-align: left;
+}
+.right {
+  text-align: right;
+}
+.center {
+  text-align: center;
+}
+.justify {
+  text-align: justify;
+}
+.ibimage_left {
+  float: left;
+}
+.ibimage_right {
+  float: right;
+}
+.marker-red { color :#cc0000; }
+.marker-blue { color : #000099; }
+.Yellow { color : #ffff33; }
+.Lime { color : #339900; }
+
+td { white-space :normal; }
Index: trunk/templates/DefaultTheme/ckeditor_config/editor.styles.js
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/editor.styles.js	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/editor.styles.js	(revision 2)
@@ -0,0 +1,92 @@
+﻿/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke
+ *  @copyright      2010-2011 Michael Tenschert, Dietrich Roland Pehlke
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+ 
+ CKEDITOR.addStylesSet( 'wb',
+[
+    /* Block Styles */
+
+    // These styles are defined per editor.css in your template and can be found in "Format".
+    /*
+    { name : 'Paragraph'        , element : 'p' },
+    { name : 'Heading 1'        , element : 'h1' },
+    { name : 'Heading 2'        , element : 'h2' },
+    { name : 'Heading 3'        , element : 'h3' },
+    { name : 'Heading 4'        , element : 'h4' },
+    { name : 'Heading 5'        , element : 'h5' },
+    { name : 'Heading 6'        , element : 'h6' },
+    { name : 'Preformatted Text', element : 'pre' },
+    { name : 'Address'            , element : 'address' },
+    */
+
+    { name : 'Blue Title'       , element : 'h3', attributes  : { 'class' : 'marker-blue' } },
+    { name : 'Red Title'        , element : 'h3', attributes  : { 'class' : 'marker-red' } },
+
+    /* Inline Styles */
+
+    // These are core styles available as toolbar buttons. You may opt enabling
+    // some of them in the Styles combo, removing them from the toolbar.
+    /*
+    { name : 'Strong'           , element : 'strong', overrides : 'b' },
+    { name : 'Emphasis'         , element : 'em'    , overrides : 'i' },
+    { name : 'Underline'        , element : 'u' },
+    { name : 'Strikethrough'    , element : 'strike' },
+    { name : 'Subscript'        , element : 'sub' },
+    { name : 'Superscript'      , element : 'sup' },
+    */
+
+    { name : 'Marker: Yellow'   , element : 'span', attributes : { 'class' : 'Yellow' } },
+    { name : 'Marker: Green'    , element : 'span', attributes : { 'class' : 'Lime' } },
+
+    { name : 'Big'              , element : 'big' },
+    { name : 'Small'            , element : 'small' },
+    { name : 'Typewriter'       , element : 'tt' },
+
+    { name : 'Computer Code'    , element : 'code' },
+    { name : 'Keyboard Phrase'  , element : 'kbd' },
+    { name : 'Sample Text'      , element : 'samp' },
+    { name : 'Variable'         , element : 'var' },
+
+    { name : 'Deleted Text'     , element : 'del' },
+    { name : 'Inserted Text'    , element : 'ins' },
+
+    { name : 'Cited Work'       , element : 'cite' },
+    { name : 'Inline Quotation' , element : 'q' },
+
+    { name : 'Language: RTL'    , element : 'span', attributes : { 'dir' : 'rtl' } },
+    { name : 'Language: LTR'    , element : 'span', attributes : { 'dir' : 'ltr' } },
+
+    /* Object Styles */
+    //  This styles are only available when you select the defined objects. E.g. when selecting an image 
+    //  you can control here with the styles dropdown the styling.
+    {
+        name : 'Image on Left',
+        element : 'img',
+        attributes :
+        {
+            'style' : 'padding: 5px; margin-right: 5px',
+            'border' : '2',
+            'align' : 'left'
+        }
+    },
+
+    {
+        name : 'Image on Right',
+        element : 'img',
+        attributes :
+        {
+            'style' : 'padding: 5px; margin-left: 5px',
+            'border' : '2',
+            'align' : 'right'
+        }
+    }
+
+
+]);
\ No newline at end of file
Index: trunk/templates/DefaultTheme/ckeditor_config/editor.templates.js
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/editor.templates.js	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/editor.templates.js	(revision 2)
@@ -0,0 +1,94 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// Register a templates definition set named "default".
+CKEDITOR.addTemplates( 'default',
+{
+    // The name of sub folder which hold the shortcut preview images of the
+    // templates.
+    imagesPath : CKEDITOR.getUrl( CKEDITOR.plugins.getPath( 'templates' ) + '/templates/images/' ),
+
+    // The templates definitions.
+    templates :
+        [
+            {
+                title: 'Image and Title',
+                image: 'template1.gif',
+                description: 'One main image with a title and text that surround the image.',
+                html:
+                    '<h3>' +
+                        '<img style="margin-right: 10px" height="100" width="100" align="left"/>' +
+                        'Type the title here'+
+                    '</h3>' +
+                    '<p>' +
+                        'Type the text here' +
+                    '</p>'
+            },
+            {
+                title: 'Strange Template',
+                image: 'template2.gif',
+                description: 'A template that defines two colums, each one with a title, and some text.',
+                html:
+                    '<table style="width:100%; border-collapse: collapse;">' +
+                        '<tr>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 1</h3>' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td style="width:50%">' +
+                                '<h3>Title 2</h3>' +
+                            '</td>' +
+                        '</tr>' +
+                        '<tr>' +
+                            '<td>' +
+                                'Text 1' +
+                            '</td>' +
+                            '<td></td>' +
+                            '<td>' +
+                                'Text 2' +
+                            '</td>' +
+                        '</tr>' +
+                    '</table>' +
+                    '<p>' +
+                        'More text goes here.' +
+                    '</p>'
+            },
+            {
+                title: 'Text and Table',
+                image: 'template3.gif',
+                description: 'A title with some text and a table.',
+                html:
+                    '<div style="width: 80%">' +
+                        '<h3>' +
+                            'Title goes here' +
+                        '</h3>' +
+                        '<table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1">' +
+                            '<caption style="border:solid 1px black">' +
+                                '<strong>Table title</strong>' +
+                            '</caption>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                            '<tr>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                                '<td>&nbsp;</td>' +
+                            '</tr>' +
+                        '</table>' +
+                        '<p>' +
+                            'Type the text here' +
+                        '</p>' +
+                    '</div>'
+            }
+        ]
+});
Index: trunk/templates/DefaultTheme/ckeditor_config/readme-faq.txt
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/readme-faq.txt	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/readme-faq.txt	(revision 2)
@@ -0,0 +1,108 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Woellbrink
+ *  @copyright      2010-2012 Michael Tenschert, Dietrich Roland Pehlke, Luisehahne
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+################################################
+
+---     WebsiteBaker CKEditor module         ---
+---     FAQ: How to use customization         --- 
+
+################################################
+################################################
+
+
+# Question: #
+
+What files are there to customize CKEditor for WebsiteBaker?
+
+# Answer:   #
+
+All default files in CKEditor modules are in the folder: _yourwbinstallation_/modules/ckeditor/wb_config
+
+There are four different files. Please look inside each file with your FTP-Browser / AddonFileEditor / on your local computer:
+
++ wb_ckconfig.js:         Here are most of the configuration issues defined. 
+                        Toolbar-Configuration, behavior on Enter / Shift+Enter, default language and so on.
+
++ editor.css:             The default look of the WYSIWYG textarea and the preview. 
+                        You can also put an editor.css in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.styles.js:     The default styles you can choose from a dropdown in the CKEditor toolbar. 
+                        You can also put an editor.styles.js in any frontend template, 
+                        it will be loaded automatically for each page instead of the default one.
+
++ editor.templates.js:     The default CKE templates you can choose of a button in CKEditor toolbar. 
+                        Please note: We recommend not to use CKE templates, because the WebsiteBaker template
+                        should define the different blocks and the template. 
+                        
+Furthermore this files and some other configurations (we recommend you shouldn't change unless you really know what you are doing) are stored in:
+_yourwbinstallation_/modules/ckeditor/include.php
+
+
+################################################
+
+
+# Question: #
+
+Why back to the roots and not different folders anymore?
+
+# Answer:   #
+
+All four configuration files (wb_ckconfig.js, editor.css, editor.styles.js, editor.templates.js) are available in 
+_yourwbinstallation_/modules/ckeditor/wb_config
+
+The wb_config is loaded and recognized by the CKEditor module unless you copy the folder "wb_config."!
+
+As an example you have two possibilities to call the configuration files
+    
+    1) copy the wb_config to the folder _yourwbinstallation_/templates and all changes in config files are for all templates
+    2) copy the wb_config  to your _yourdefaulttemplate_: _yourwbinstallation_/templates/_yourdefaulttemplate_ 
+       rename folder wb_config to editor, your changes are only for _yourdefaulttemplate_
+    
+    Change the configfiles with your FTP-Browser / AddonFileEditor / ... 
+
+You should never change the files in _yourwbinstallation_/modules/ckeditor/wb_config, as they are overwritten with any update of CKEditor module and / or WebsiteBaker! 
+You never have any problems when upgrading CKEditor module to another version.
+
+
+################################################
+
+
+# Question: #
+
+How is the workflow of reading CKEditor files?
+
+# Answer:   #
+
+Note: The workflow is defined inside _yourwbinstallation_/modules/ckeditor/include.php
+
+1) is called as first if available, 2) is the next one, and so on.
+
+search order for CKEditor files 
+
+editor.css
+
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor.css
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/css/editor.css
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/editor.css
+    4) _yourwbinstallation_/templates/wb_config/editor.css
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/editor.css
+
+wb_ckconfig.js,editor.styles.js,editor.templates.js    
+    
+    1) _yourwbinstallation_/templates/_yourdefaulttemplate_/wb_ckconfig.js
+    2) _yourwbinstallation_/templates/_yourdefaulttemplate_/js/wb_ckconfig.js
+    3) _yourwbinstallation_/templates/_yourdefaulttemplate_/editor/wb_ckconfig.js
+    4) _yourwbinstallation_/templates/wb_config/wb_ckconfig.js
+    5) _yourwbinstallation_/modules/ckeditor/wb_config/wb_ckconfig.js
+
+etc...    
+    
Index: trunk/templates/DefaultTheme/ckeditor_config/settings_config.js
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/settings_config.js	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/settings_config.js	(revision 2)
@@ -0,0 +1,381 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink, Marmot, Luisehahne
+ *  @copyright      Frederico Knabben
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+/*
+* WARNING: Clear the cache of your browser cache after you modify this file!
+* If you don't do this, you may notice that your browser is ignoring all your changes.
+*
+* --------------------------------------------------
+*
+* Note: Some CKEditor configs are set in _yourwb_/modules/ckeditor/include.php
+*
+* Example: "$ckeditor->config['toolbar']" is PHP code in include.php. The very same here in the
+* wb_ckconfig.js would be: "config.toolbar" inside CKEDITOR.editorConfig = function( config ).
+*
+* Please read "readme-faq.txt" in the wb_config folder for more information about customizing.
+*
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+    // Define changes to default configuration here.
+    // For complete reference see:
+    // http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+  // Different Toolbars. Remove, add or move 'SomeButton', with the quotes and following comma
+    config.toolbar_Full =
+    [
+        { name: 'document',  items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing',   items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'forms',     items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+        { name: 'paragraph',   items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links',       items : [ 'Link','Unlink','Anchor' ] },
+        { name: 'insert',      items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+    ];
+
+  config.toolbar_WB_Mini = [
+            ['Source','Cut','Copy'],['PasteText','PasteFromWord'],['Undo','Redo','-','RemoveFormat'],['Wbdroplets','Wblink','Unlink','Anchor'],['Image'],
+            ['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+            ['Styles','Format','Font','FontSize'],['NumberedList','BulletedList','-','Blockquote','CreateDiv'],['CreatePlaceholder'],['About']];
+
+  config.toolbar_WB_Basic = [
+            ['Source','Preview'],['Cut','Copy','Paste','PasteText','PasteFromWord'],['Image','Flash','Table','HorizontalRule'],['Wbdroplets','Wblink','Unlink','Anchor'],['Undo','Redo','-','SelectAll','RemoveFormat'],['Maximize','ShowBlocks','-','Code','About'],'/',
+            ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv']];
+
+    // see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar
+    config.toolbar_WB_Full =
+    [
+        { name: 'document', items : [ 'Source','-','Save','Print','-','DocProps','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Code','-','About' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+         { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton','HiddenField' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'links', items : [ 'Link','Unlink','Anchor','Wbdroplets','Wblink' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }
+
+    ];
+
+    config.toolbar_WB_Default =
+    [
+        { name: 'mode', items : [ 'Source','autoFormat','CommentSelectedRange','UncommentSelectedRange' ] },
+        { name: 'document', items : [ 'Save','wbSave','Print','-','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo','Backup' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links', items : [ 'Wbdroplets','Wblink','Unlink','Anchor' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe','Youtube','oembed', 'slideshow' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','Syntaxhighlight','CreatePlaceholder','-','About' ] }
+
+    ];
+
+    config.toolbar_Basic = [['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','Code','Image','About']];
+    config.toolbar_WB_Simple = [['Bold','Italic','-','NumberedList','BulletedList','-','Wbdroplets','Wblink','Unlink','-','Scayt','-','Code','About']];
+
+    // The default toolbar. Default: WB_Default
+  config.toolbar = 'WB_Mini';
+
+  // The standard color of CKEditor. Can be changed in any hexadecimal color you like. Use the
+  // UIColor Plugin in your CKEditor to pick the right color.
+    config.uiColor = '#BFD7EB';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.ModulVersion  = '4.6.2';
+    config.WBrevision    = 'r6';
+    config.WBversion     = '2.10';
+
+    config.fullPage = false;
+
+    config.format_tags = 'p;div;h1;h2;h3;h4;h5;h6;pre;address';
+
+    config.autoParagraph = true;
+/*
+    config.sharedSpaces: {
+        top: 'top',
+        bottom: 'bottom'
+    }
+*/
+    /* The skin to load. It may be the name of the skin folder inside the editor installation path,
+    * or the name and the path separated by a comma.
+    * Available skins: moono, moonocolor*/
+    config.skin = 'moonocolor';
+
+  // Define all extra CKEditor plugins in _yourwb_/modules/ckeditor/ckeditor/plugins here
+  //config.extraPlugins = 'timestamp';
+    config.extraPlugins  = 'justify,find,flash,colorbutton,colordialog,dialogadvtab'
+                         + ',div,font,forms,iframe,indentblock,language,bidi,liststyle,pagebreak,save'
+                         + ',selectall,showblocks,smiley,templates,codemirror,autogrow'
+                         + ',wblink,wbdroplets,youtube,oembed,wbrelation,wbabout';
+
+    config.removePlugins = 'wsc,link,save,newpage,print,shybutton,syntaxhighlight,preview,alphamanager,backup'
+                         + ',sourcearea,sourcedialog,imageresponsive,image2,wbsave,youtube,language,flash,placeholder';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.entities = false;
+
+    config.scayt_autoStartup = false;
+
+    // The standard height and width of CKEditor in pixels.
+    config.height           = '270';
+    config.width            = '100%';
+    config.toolbarLocation  = 'top';
+
+    config.autoGrow_minHeight = 200;
+    config.autoGrow_maxHeight = 350;
+    config.autoGrow_bottomSpace = 50;
+    config.autoGrow_onStartup = false;
+    // Define possibilities of automatic resizing in pixels. Set config.resize_enabled to false to
+    // deactivate resizing.
+    config.resize_enabled   = true;
+    config.resize_minWidth  = 500;
+    config.resize_maxWidth  = 1500;
+    config.resize_minHeight = 200;
+    config.resize_maxHeight = 1678;
+    config.resize_dir = 'both';
+
+  config.docType = '<!DOCTYPE html>';
+
+  config.image_previewText = 'WebsiteBaker helps you to create the website you want: A free, easy and secure, flexible and extensible open source content management system (CMS). Create new templates within minutes - powered by (X)HTML, CSS and jQuery. With WebsiteBaker it\'s quite natural your site is W3C-valid, SEO-friendly and accessible - there are no limitations at all. Use droplets - the new and revolutionary way of inserting PHP code - everywhere you want. In addition to that, WebsiteBaker and the community are offering lots of extensions: Just download, install with two clicks and use them. That is not enough? You want more? No problem, build your own modules! The WebsiteBaker API gives many opportunities you can rely on.';
+
+  // Both options are for XHTML 1.0 strict compatibility
+  // config.indentClasses = [ 'indent1', 'indent2', 'indent3', 'indent4' ];
+  // [ Left, Center, Right, Justified ]
+  // config.justifyClasses = [ 'left', 'center', 'right', 'justify' ];
+
+  config.templates_replaceContent =   false;
+
+  config.syntaxhighlight_lang = 'js', 'jscript', 'javascript', 'perl', 'Perl', 'php', 'text', 'plain', 'sass', 'scss', 'sql', 'xml', 'xhtml', 'xslt', 'html';
+
+  // Explanation: _P: new <p> paragraphs are created; _BR: lines are broken with <br> elements;
+  //              _DIV: new <div> blocks are created.
+  // Sets the behavior for the ENTER key. Default is _P allowed tags: _P | _BR | _DIV
+  config.enterMode = CKEDITOR.ENTER_P;
+
+  // Sets the behavior for the Shift + ENTER keys. allowed tags: _P | _BR | _DIV
+  config.shiftEnterMode = CKEDITOR.ENTER_BR;
+
+  /* Allows to force CKEditor not to localize the editor to the user language.
+  * Default: Empty (''); Example: ('fr') for French.
+  * Note: Language configuration is based on the backend language of WebsiteBaker.
+  * It's defined in include.php
+  * config.language         = ''; */
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+  config.defaultLanguage   = 'en';
+
+    /* Protect PHP code tags (<?...?>) so CKEditor will not break them when switching from Source to WYSIWYG.
+    *  Uncommenting this line doesn't mean the user will not be able to type PHP code in the source.
+    *  This kind of prevention must be done in the server side, so just leave this line as is. */
+    config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+
+    //disable ckes Advanced Content Filter (ACF) to avoid wblinks to be filtered?
+    config.allowedContent = true;
+    config.jsplus_image_editor_init_tool = 'text';
+
+    // Simplify the dialog windows.
+//    config.removeDialogTabs = 'image:advanced;link:advanced';
+/*
+connectorPath = basePath+'/filemanager/connectors/php/connector.php';
+config.filebrowserBrowseUrl = basePath+'/filemanager/browser/default/browser.html?Connector='+connectorPath;
+config.filebrowserImageBrowseUrl = '/filemanager/browser/default/browser.html?Type=Image&Connector='+connectorPath;
+config.filebrowserFlashBrowseUrl = '/filemanager/browser/default/browser.html?Type=Flash&Connector='+connectorPath;
+*/
+/*
+    config.alphamanager = {
+        'multiSelect': true,
+        'showRootDir': false,
+        'openLastDir': true,
+        'lang':'de',
+        'dateFormat': 'dd/MM/yyyy HH:mm',
+        'hideCopyright': true,
+        'returnUrlPrefix': ''
+    };
+*/
+
+    config.filebrowserWindowWidth = '80%';
+    config.filebrowserWindowHeight = '70%';
+};
+
+CKEDITOR.on( 'instanceReady', function( ev )
+{
+    var writer = ev.editor.dataProcessor.writer;
+    // The character sequence to use for every indentation step.
+    writer.indentationChars = '\t';
+    // The way to close self closing tags, like <br />.
+    writer.selfClosingEnd   = ' />';
+    // The character sequence to be used for line breaks.
+    writer.lineBreakChars   = '\n';
+    // Setting rules for several HTML tags.
+
+    var dtd = CKEDITOR.dtd;
+    for (var e in CKEDITOR.tools.extend( {}, dtd.$block ))
+    {
+        writer.setRules( e,
+        {
+            // Indicates that this tag causes indentation on line breaks inside of it.
+            indent : false,
+            // Insert a line break before the <h1> tag.
+            breakBeforeOpen : true,
+            // Insert a line break after the <h1> tag.
+            breakAfterOpen : false,
+            // Insert a line break before the </h1> closing tag.
+            breakBeforeClose : false,
+            // Insert a line break after the </h1> closing tag.
+            breakAfterClose : true
+        });
+    };
+    writer.setRules( 'p',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <p> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <p> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </p> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </p> closing tag.
+        breakAfterClose : true
+    });
+    writer.setRules( 'br',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <br /> tag.
+        breakBeforeOpen : false,
+        // Insert a line break after the <br /> tag.
+        breakAfterOpen : true
+    });
+    writer.setRules( 'a',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <a> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <a> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </a> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </a> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'div',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <div> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <div> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </div> closing tag.
+        breakBeforeClose : true,
+        // Insert a line break after the </div> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'img',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <img> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <img> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </img>> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </img> closing tag.
+        breakAfterClose : false
+    });
+/*
+*/
+    ev.editor.dataProcessor.htmlFilter.addRules(
+    {
+        elements:
+        {
+            $: function (element) {
+                // Output dimensions of images as width and height
+                if (element.name == 'img') {
+                    var style = element.attributes.style;
+                    if (style) {
+                        // Get the width from the style.
+                        var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec(style),
+                            width = match && match[1];
+
+                        // Get the height from the style.
+                        match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec(style);
+                        var height = match && match[1];
+//console.log( element );
+
+                        if (width) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)width\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.width = width;
+                        }
+
+                        if (height) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)height\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.height = height;
+                        }
+                    }
+                }
+/**
+ *
+                if (!element.attributes.style)
+                    delete element.attributes.style;
+ */
+
+                return element;
+            }
+        }
+    });
+
+});
+
+CKEDITOR.on( 'dialogDefinition', function( ev )
+{
+        // Take the dialog name and its definition from the event data.
+        var editor = ev.editor;
+        var dialogName = ev.data.name;
+        var dialogDefinition = ev.data.definition;
+
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'image' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var linkTab = dialogDefinition.getContents('Link');
+        }
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'wblink' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var infoTab = dialogDefinition.getContents( 'info' );
+            // Set the default value for the URL field.
+            var urlField = infoTab.get( 'url' );
+            urlField['default'] = 'www.example.com';
+        }
+
+    }); // dialogDefinition
Index: trunk/templates/DefaultTheme/ckeditor_config/wb_ckconfig.js
===================================================================
--- trunk/templates/DefaultTheme/ckeditor_config/wb_ckconfig.js	(nonexistent)
+++ trunk/templates/DefaultTheme/ckeditor_config/wb_ckconfig.js	(revision 2)
@@ -0,0 +1,365 @@
+/**
+ *  @module         ckeditor
+ *  @version        see info.php of this module
+ *  @authors        Michael Tenschert, Dietrich Roland Pehlke, Dietmar Wöllbrink, Marmot, Luisehahne
+ *  @copyright      Frederico Knabben
+ *  @license        GNU General Public License
+ *  @license terms  see info.php of this module
+ *  @platform       see info.php of this module
+ *  @requirements   PHP 5.2.x and higher
+ */
+
+/*
+* WARNING: Clear the cache of your browser cache after you modify this file!
+* If you don't do this, you may notice that your browser is ignoring all your changes.
+*
+* --------------------------------------------------
+*
+* Note: Some CKEditor configs are set in _yourwb_/modules/ckeditor/include.php
+*
+* Example: "$ckeditor->config['toolbar']" is PHP code in include.php. The very same here in the
+* wb_ckconfig.js would be: "config.toolbar" inside CKEDITOR.editorConfig = function( config ).
+*
+* Please read "readme-faq.txt" in the wb_config folder for more information about customizing.
+*
+*/
+
+CKEDITOR.editorConfig = function( config )
+{
+    // Define changes to default configuration here.
+    // For complete reference see:
+    // http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+  // Different Toolbars. Remove, add or move 'SomeButton', with the quotes and following comma
+    config.toolbar_Full =
+    [
+        { name: 'document',  items : [ 'Source','-','Save','NewPage','DocProps','Preview','Print','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing',   items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'forms',     items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat' ] },
+        { name: 'paragraph',   items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links',       items : [ 'Link','Unlink','Anchor' ] },
+        { name: 'insert',      items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','-','About' ] }
+    ];
+
+  config.toolbar_WB_Mini = [
+            ['Source','Cut','Copy'],['PasteText','PasteFromWord'],['Undo','Redo','-','RemoveFormat'],['Wbdroplets','Wblink','Unlink','Anchor'],
+            ['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
+            ['Styles','Format','Font','FontSize'],['NumberedList','BulletedList','-','Blockquote','CreateDiv'],['About']];
+
+  config.toolbar_WB_Basic = [
+            ['Source','Preview'],['Cut','Copy','Paste','PasteText','PasteFromWord'],['Image','Flash','Table','HorizontalRule'],['Wbdroplets','Wblink','Unlink','Anchor'],['Undo','Redo','-','SelectAll','RemoveFormat'],['Maximize','ShowBlocks','-','Code','About'],'/',
+            ['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Bold','Italic','Underline','Strike'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv']];
+
+    // see http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar
+    config.toolbar_WB_Full =
+    [
+        { name: 'document', items : [ 'Source','-','Save','Print','-','DocProps','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools', items : [ 'Maximize', 'ShowBlocks','Code','-','About' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+         { name: 'forms', items : [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton','HiddenField' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'links', items : [ 'Link','Unlink','Anchor','Wbdroplets','Wblink' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe' ] }
+
+    ];
+
+    config.toolbar_WB_Default =
+    [
+        { name: 'mode', items : [ 'Source','autoFormat','CommentSelectedRange','UncommentSelectedRange' ] },
+        { name: 'document', items : [ 'Save','wbSave','Print','-','Preview','NewPage','-','Templates' ] },
+        { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo','Backup' ] },
+        { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt' ] },
+        '/',
+        { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript','Shy','-','RemoveFormat' ] },
+        { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl' ] },
+        { name: 'links', items : [ 'Wbdroplets','Wblink','Unlink','Anchor' ] },
+        { name: 'insert', items : [ 'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe','Youtube','oembed', 'slideshow' ] },
+        '/',
+        { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
+        { name: 'colors', items : [ 'TextColor','BGColor' ] },
+        { name: 'tools',  items : [ 'Maximize', 'ShowBlocks','Syntaxhighlight','CreatePlaceholder','-','About' ] }
+
+    ];
+
+    config.toolbar_Basic = [['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','Code','About']];
+    config.toolbar_WB_Simple = [['Bold','Italic','-','NumberedList','BulletedList','-','Wbdroplets','Wblink','Unlink','-','Scayt','-','Code','About']];
+
+    // The default toolbar. Default: WB_Default
+  config.toolbar = 'WB_Default';
+
+  // The standard color of CKEditor. Can be changed in any hexadecimal color you like. Use the
+  // UIColor Plugin in your CKEditor to pick the right color.
+    config.uiColor = '#BFD7EB';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.ModulVersion  = '';
+    config.WBrevision    = '';
+    config.WBversion     = '2.8.3 SP6';
+
+    config.fullPage = false;
+
+    config.format_tags = 'p;div;h1;h2;h3;h4;h5;h6;pre;address';
+
+    config.autoParagraph = true;
+
+    /* The skin to load. It may be the name of the skin folder inside the editor installation path,
+    * or the name and the path separated by a comma.
+    * Available skins: moono, moonocolor*/
+    config.skin = 'moonocolor';
+
+  // Define all extra CKEditor plugins in _yourwb_/modules/ckeditor/ckeditor/plugins here
+  //config.extraPlugins = 'timestamp';
+    config.extraPlugins  = 'justify,find,flash,colorbutton,colordialog,dialogadvtab'
+                         + ',div,font,forms,iframe,indentblock,language,bidi,liststyle,pagebreak,save'
+                         + ',selectall,showblocks,smiley,templates,codemirror,autogrow,filebrowser'
+                         + ',wblink,wbdroplets,youtube,oembed,backup,wbrelation,wbabout';
+
+    config.removePlugins = 'wsc,link,save,newpage,print,shybutton,syntaxhighlight,preview,alphamanager'
+                         + ',sourcearea,sourcedialog,imageresponsive,image2,wbsave,youtube,language,flash,placeholder';
+
+    config.browserContextMenuOnCtrl = true;
+
+    config.entities = false;
+
+    config.scayt_autoStartup = false;
+
+    // The standard height and width of CKEditor in pixels.
+    config.height           = '250';
+    config.width            = '100%';
+    config.toolbarLocation  = 'top';
+
+    config.autoGrow_minHeight = 200;
+    config.autoGrow_maxHeight = 350;
+    config.autoGrow_bottomSpace = 50;
+    config.autoGrow_onStartup = false;
+    // Define possibilities of automatic resizing in pixels. Set config.resize_enabled to false to
+    // deactivate resizing.
+    config.resize_enabled   = true;
+    config.resize_minWidth  = 500;
+    config.resize_maxWidth  = 1500;
+    config.resize_minHeight = 100;
+    config.resize_maxHeight = 1678;
+    config.resize_dir = 'both';
+
+  config.docType           = '<!DOCTYPE html>';
+
+  config.image_previewText = 'WebsiteBaker helps you to create the website you want: A free, easy and secure, flexible and extensible open source content management system (CMS). Create new templates within minutes - powered by (X)HTML, CSS and jQuery. With WebsiteBaker it\'s quite natural your site is W3C-valid, SEO-friendly and accessible - there are no limitations at all. Use droplets - the new and revolutionary way of inserting PHP code - everywhere you want. In addition to that, WebsiteBaker and the community are offering lots of extensions: Just download, install with two clicks and use them. That is not enough? You want more? No problem, build your own modules! The WebsiteBaker API gives many opportunities you can rely on.';
+
+  // Both options are for XHTML 1.0 strict compatibility
+  // config.indentClasses = [ 'indent1', 'indent2', 'indent3', 'indent4' ];
+  // [ Left, Center, Right, Justified ]
+  // config.justifyClasses = [ 'left', 'center', 'right', 'justify' ];
+
+  config.templates_replaceContent =   false;
+
+  config.syntaxhighlight_lang = 'js', 'jscript', 'javascript', 'perl', 'Perl', 'pl', 'php', 'text', 'plain', 'sass', 'scss', 'scala', 'sql', 'xml', 'xhtml', 'xslt', 'html';
+
+  // Explanation: _P: new <p> paragraphs are created; _BR: lines are broken with <br> elements;
+  //              _DIV: new <div> blocks are created.
+  // Sets the behavior for the ENTER key. Default is _P allowed tags: _P | _BR | _DIV
+  config.enterMode = CKEDITOR.ENTER_P;
+
+  // Sets the behavior for the Shift + ENTER keys. allowed tags: _P | _BR | _DIV
+  config.shiftEnterMode = CKEDITOR.ENTER_BR;
+
+  /* Allows to force CKEditor not to localize the editor to the user language.
+  * Default: Empty (''); Example: ('fr') for French.
+  * Note: Language configuration is based on the backend language of WebsiteBaker.
+  * It's defined in include.php
+  * config.language         = ''; */
+  // The language to be used if config.language is empty and it's not possible to localize the editor to the user language.
+  config.defaultLanguage   = 'en';
+
+    /* Protect PHP code tags (<?...?>) so CKEditor will not break them when switching from Source to WYSIWYG.
+    *  Uncommenting this line doesn't mean the user will not be able to type PHP code in the source.
+    *  This kind of prevention must be done in the server side, so just leave this line as is. */
+    config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+//    config.protectedSource.push(/\[\[[\s\S]*?\]\]/g); //  droplets
+//    config.protectedSource.push( /<i[\s\S]*?\>/g ); //allows beginning <i> tag
+//    config.protectedSource.push( /<\/i[\s\S]*?\>/g ); //allows ending </i> tag
+//    config.protectedSource.push( /<span[\s\S]*?\>/g ); //allows beginning <span> tag
+//    config.protectedSource.push( /<\/span[\s\S]*?\>/g ); //allows ending </span> tag
+    //disable ckes Advanced Content Filter (ACF) to avoid wblinks to be filtered?
+    config.allowedContent = true;
+
+    config.jsplus_image_editor_init_tool = 'text';
+
+    // Simplify the dialog windows.
+//    config.removeDialogTabs = 'image:advanced;link:advanced';
+
+    config.filebrowserWindowWidth = '80%';
+    config.filebrowserWindowHeight = '70%';
+
+};
+
+CKEDITOR.on( 'instanceReady', function( ev )
+{
+    var writer = ev.editor.dataProcessor.writer;
+    // The character sequence to use for every indentation step.
+    writer.indentationChars = '\t';
+    // The way to close self closing tags, like <br />.
+    writer.selfClosingEnd   = ' />';
+    // The character sequence to be used for line breaks.
+    writer.lineBreakChars   = '\n';
+    // Setting rules for several HTML tags.
+
+    var dtd = CKEDITOR.dtd;
+    for (var e in CKEDITOR.tools.extend( {}, dtd.$block ))
+    {
+        writer.setRules( e,
+        {
+            // Indicates that this tag causes indentation on line breaks inside of it.
+            indent : false,
+            // Insert a line break before the <h1> tag.
+            breakBeforeOpen : true,
+            // Insert a line break after the <h1> tag.
+            breakAfterOpen : false,
+            // Insert a line break before the </h1> closing tag.
+            breakBeforeClose : false,
+            // Insert a line break after the </h1> closing tag.
+            breakAfterClose : true
+        });
+    };
+    writer.setRules( 'p',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <p> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <p> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </p> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </p> closing tag.
+        breakAfterClose : true
+    });
+    writer.setRules( 'br',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <br /> tag.
+        breakBeforeOpen : false,
+        // Insert a line break after the <br /> tag.
+        breakAfterOpen : true
+    });
+    writer.setRules( 'a',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <a> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <a> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </a> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </a> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'div',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <div> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <div> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </div> closing tag.
+        breakBeforeClose : true,
+        // Insert a line break after the </div> closing tag.
+        breakAfterClose : false
+    });
+    writer.setRules( 'img',
+    {
+        // Indicates that this tag causes indentation on line breaks inside of it.
+        indent : false,
+        // Insert a line break before the <img> tag.
+        breakBeforeOpen : true,
+        // Insert a line break after the <img> tag.
+        breakAfterOpen : false,
+        // Insert a line break before the </img>> closing tag.
+        breakBeforeClose : false,
+        // Insert a line break after the </img> closing tag.
+        breakAfterClose : false
+    });
+/*
+*/
+    ev.editor.dataProcessor.htmlFilter.addRules(
+    {
+        elements:
+        {
+            $: function (element) {
+                // Output dimensions of images as width and height
+                if (element.name == 'img') {
+                    var style = element.attributes.style;
+                    if (style) {
+                        // Get the width from the style.
+                        var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec(style),
+                            width = match && match[1];
+
+                        // Get the height from the style.
+                        match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec(style);
+                        var height = match && match[1];
+console.log( element );
+
+                        if (width) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)width\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.width = width;
+                        }
+
+                        if (height) {
+                            element.attributes.style = element.attributes.style.replace(/(?:^|\s)height\s*:\s*(\d+)px;?/i, '');
+                            element.attributes.height = height;
+                        }
+                    }
+                }
+/**
+ *
+                if (!element.attributes.style)
+                    delete element.attributes.style;
+ */
+
+                return element;
+            }
+        }
+    });
+
+});
+
+CKEDITOR.on( 'dialogDefinition', function( ev )
+{
+        // Take the dialog name and its definition from the event data.
+        var editor = ev.editor;
+        var dialogName = ev.data.name;
+        var dialogDefinition = ev.data.definition;
+
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'image' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var linkTab = dialogDefinition.getContents('Link');
+        }
+        // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
+        if ( dialogName == 'wblink' )
+        {
+            // Get a reference to the "Link Info" tab.
+            var infoTab = dialogDefinition.getContents( 'info' );
+            // Set the default value for the URL field.
+            var urlField = infoTab.get( 'url' );
+            urlField['default'] = 'www.example.com';
+        }
+
+    }); // dialogDefinition
Index: trunk/templates/DefaultTheme/css/access.css
===================================================================
--- trunk/templates/DefaultTheme/css/access.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/access.css	(revision 2)
@@ -0,0 +1,31 @@
+span.title { display: block; }
+.section { margin-top: 10px; padding: 0px; border: 1px solid #999999; font-size: 1em; width: 100%; height: 95px; background: #FDFDFD; }
+.description { padding: 4px 4px 0 4px; text-align: left; vertical-align: top; }
+.graphic { border: 4px solid #FDFDFD; height: 50px; padding-left: 3px; width: 50px; }
+.graphic img { border: 0px solid #D0D0D0; padding: 4px; vertical-align: middle; background: #FFFFFF; }
+div#username { width: 118%; min-width: 250px; border: 0px groove #6799C4; text-align: left; font-weight: bold; margin: 0; background: #E9E9E9; }
+#language,
+#timezone,
+#date_format,
+#time_format,
+#display_name,
+#username,
+#email,
+#new_password_1,
+#new_password_2,
+#current_password { width: 118%; }
+.setting_value_permissions { width: 50%; min-width: 400px; }
+select > option.user-inactive { color: #990000; }
+.header_title, .setting_value input, .setting_value select, .setting_value textarea, .value_input input, .value_input text, .value_input select, .form_submit, .input_full { width: 100%; }
+form.access table { width: 100%; }
+form.access table tbody tr { line-height: 2.325em; margin: 0.525em 0; }
+/* value_input
+td, th, input, textarea {
+  color: #000000;
+  font-family: Verdana,Arial,Helvetica,sans-serif;
+  font-size: 1em;
+  float: right;
+}
+*/
+form.access table tbody.value_label tr td { padding-right: 0.525em; font-weight: bold; color: #0D4B6E; text-align: right; }
+form.access table tbody tr td.value_input { text-align: left; }
Index: trunk/templates/DefaultTheme/css/addons.css
===================================================================
--- trunk/templates/DefaultTheme/css/addons.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/addons.css	(revision 2)
@@ -0,0 +1,11 @@
+span.title { display :block; }
+.section { margin-top :10px; padding :0px; border :1px solid #999999; font-size :1em; width :100%; background-color :#fdfdfd; height :95px; }
+.addons {}
+.addons td.setting_name {
+  color: #0d4b6e;
+  font-weight: bold;
+  min-width: 200px;
+  padding-right: 0.525em;
+  text-align: right;
+  width: 20%;
+}
Index: trunk/templates/DefaultTheme/css/admintools.css
===================================================================
--- trunk/templates/DefaultTheme/css/admintools.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/admintools.css	(revision 2)
@@ -0,0 +1,29 @@
+span.title { display :block; }
+.section { margin-top :10px; padding :0px; border :1px solid #999999; font-size :1em; width :100%; background-color :#fdfdfd; height : 105px; }
+
+#admintools {  }
+#admintools ul { padding :0;  width :100%; margin: 1.1125em; }
+#admintools li { list-style-type :none; display :inline; float :left; width :47%; margin :0 1%; }
+
+.tool_table td { text-align :left; vertical-align :top; }
+
+input#admintools { margin : auto 0.225em; }
+
+.tool_table ul { margin :0; padding :0; margin-left :20px; margin-bottom :2px; }
+.tool_table li { padding :1px; list-style-type :disc; }
+
+.description span {
+  display: block;
+  /* Fallback for non-webkit */
+  display: -webkit-box;
+  max-width: 100%;
+  height: 4.825em;
+  /* Fallback for non-webkit */
+  margin: 0 auto;
+  line-height: 1.5;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.description a span { height: 30px; }
Index: trunk/templates/DefaultTheme/css/chmod.css
===================================================================
--- trunk/templates/DefaultTheme/css/chmod.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/chmod.css	(revision 2)
@@ -0,0 +1,158 @@
+/**
+ * http://tools.andreknieriem.de/chmod_calculator
+ */
+
+.spacer {
+  clear: both;
+  height: 20px;
+  width: 100%;
+}
+.chmod {
+    background-color: #DCDCDC;
+    display: block;
+    margin: 0.625em 0.525em;
+    min-width: 25.225em;
+}
+.chmodbox {
+width:100% !important;
+max-width: 280px;
+}
+
+.half {
+  padding: 0.125em;
+  width: 30%;
+  min-width: 380px;
+  position: relative;
+}
+*, *::before, *::after {
+  box-sizing: border-box;
+}
+.chmod .boxes {
+  float: left;
+  margin: 0.625em;
+}
+.chmod .labelbox {
+  margin-left: 100px;
+}
+.chmod .labelbox label {
+  margin-left: 20px;
+}
+.chmod .boxes label {
+  display: block;
+  margin: 12px 0;
+  font-weight: bold;
+}
+.chmod .boxes .cb {
+  margin: 2px 0px;
+}
+input[type="checkbox"], input[type="radio"] {
+  box-sizing: border-box;
+  padding: 0;
+}
+input.formInput {
+  border: 1px solid #d3d3d8 !important;
+  margin-bottom: 5px;
+  padding: 7px;
+  width: 300px;
+}
+input {
+  line-height: normal;
+}
+.chmod .labelbox {
+    font-weight: bold;
+    margin-left: 6.225em;
+}
+.clear {
+  clear: both;
+}
+
+#chmodDirCode,
+#chmodDirValue,
+#chmodFileCode,
+#chmodFileValue {
+color: tomato;
+font-size: 1.125em;
+font-weight: bold;
+}
+
+/**
+ * http://www.paulund.co.uk/style-checkboxes-with-css
+ * Checkbox Four
+ */
+/**
+ * Start by hiding the checkboxes
+ */
+input[type=checkbox] {
+    visibility: hidden;
+}
+
+/**
+ * Checkbox Three
+ */
+.checkboxThree {
+    width: 4.275em;
+    height: 1.3625em;
+    background: #333;
+    margin: 1.425em 0.0em;
+    border-radius: 0px;
+    position: relative;
+}
+/**
+ * Create the text for the On position 26ca28
+ */
+.checkboxThree:before {
+    content: 'On';
+    position: absolute;
+    top: -4px;
+    left: 3px;
+    height: 2px;
+    color: #26ca28;
+    font-weight: bold;
+}
+/**
+ * Create the label for the off position
+ */
+.checkboxThree:after {
+    content: 'Off';
+    position: absolute;
+    top: -4px;
+    left: 32px;
+    height: 2px;
+    color: #fff;
+    font-weight: bold;
+}
+/**
+ * Create the pill to click
+ */
+.checkboxThree label {
+    display: block;
+    width: 30px;
+    height: 18px;
+    border-radius: 0px;
+    -webkit-transition: all .5s ease;
+    -moz-transition: all .5s ease;
+    -o-transition: all .5s ease;
+    -ms-transition: all .5s ease;
+    transition: all .5s ease;
+    cursor: pointer;
+    position: absolute;
+    top: -12px;
+    z-index: 1;
+    left: 0px;
+    background: #fff;
+}
+
+/**
+ * Create the checkbox event for the label
+ */
+.checkboxThree input[type=checkbox]:checked + label {
+    left: 2.1125em;
+    background: #26ca28;
+}
+.disabled {
+opacity: 0.5;
+}
+.reformed-form input[type="text"], .reformed-form input[type="password"] {
+  width: 49%;
+  min-width: 140px;
+}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/css/content.css
===================================================================
--- trunk/templates/DefaultTheme/css/content.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/content.css	(revision 2)
@@ -0,0 +1,174 @@
+.header {  margin :0 auto; }
+.container { margin :0 auto; background-repeat :repeat-x; }
+.content { padding :1.6em; margin :0 auto; min-height :300px; vertical-align :top; }
+#content_container { text-align :center;  clear :both; margin :0 auto; }
+.header,
+.container,
+.content,
+#content_container { width :86%; min-width: 66.0em; }
+
+.header { max-width: inherit; margin: auto 0.825em 0.525em 0; width: 98%; border-collapse: collapse; }
+
+.default-theme {
+    padding: 0.025em!important;
+    padding-bottom: 1.925em!important;
+    overflow: hidden;
+    margin-bottom: 1.525em;
+    background: #ffffff;
+}
+.default-content {
+padding: 0.525em 1.925em 1.925em;
+background : none #ffffff;
+}
+/*
+td,th,input,textarea { color :#000000; font-size :1.0em; font-family :Verdana, Arial, Helvetica, sans-serif; }
+textarea { font-size :1em; }
+*/
+img { border :0px; }
+img { vertical-align: middle; }
+form { margin :0; }
+hr { margin :1em auto; color :#144F71; height :1px; }
+h1 { color :#000000; font-size :1.8em; text-align :center; text-transform :uppercase; }
+h2 { margin :0.5em 0px 0.5em 0px; color :#336699; font-size :1.8em; }
+h2 { font-family :arial,sans-serif; letter-spacing :-1px; margin :0.5em 0; text-align :left; }
+h4 { margin :0; border-bottom :1px solid #dddddd; padding-bottom :5px; font-size :1.35em; }
+a h3 { margin :0; font-size :1.1em; padding-bottom :2px; }
+ul, li { margin :0; padding :0; list-style :none; }
+li p { margin :0.5em 0; }
+.w3-navbar li { float: left; }
+
+tr.nowrap { white-space: nowrap; line-height: 2.9525em; vertical-align: bottom; }
+
+a:link, a:visited, a:active { color :#003366; text-decoration :none; }
+a:hover { color :#336699; text-decoration :none; }
+
+.block-outer {padding: 3px 3px 0; border: 1px solid #DEE5F8; border-radius: 5px; margin-bottom: 25px; box-shadow: 1px 1px 5px #666; font-size: 100%;  }
+
+.section-active,
+.section-inactive { padding: 1px 5px;  border-radius: 5px 5px 0 0; margin-bottom: 5px; min-height: 2.525em; }
+.section-active   { background:#DEE5F8; }
+.section-inactive { background:#eeeeee; }
+
+.section-info { margin: 0.525em 0 !important;line-height: 1.429; min-height: 2.525em; display: inline-table; width: 100%;}
+
+.row { display: table-row;}
+.col {display: table-cell; width: 50%;}
+
+.content {background: rgba(0, 0, 0, 0) linear-gradient(#e0e0e0, #ffffff) no-repeat scroll 0 0 / 100% 60px}
+.info { padding :10px; margin-bottom :0.5em; background :#f8f8f8; color :#666666; font-size :91.7%; }
+.note { border :2px #448844 solid; padding :10px; margin :10px auto; background :#eeffee; color :#004400; }
+.note { color :#666666; font-size :10px; }
+.important { border :2px #888844 solid; padding :10px; margin-bottom :1em; background :#ffffee; color :#444400; }
+.warning { border :2px #884444 solid; padding :10px; margin-bottom :1em; background :#ffeeee; color :#440000; }
+
+.row_0 { background-color :transparent; }
+.row_1 { background-color :#ccddee; }
+
+div.box { width :100%; margin :-10px 0 0 0; font-size :small; text-align :right; }
+div.content_box { margin :0em auto; }
+div.content_box form { width :98%; }
+
+#submit,
+#reset { max-width :100px; }
+.description { padding :4px 2px 0 4px; text-align :left; vertical-align :top; }
+.graphic { border :4px solid #fdfdfd; height :50px; padding-left :3px; width :50px; }
+.graphic img { background-color :#ffffff; border : 0px solid #d0d0d0; padding :4px; vertical-align :middle; }
+
+
+.ok, .error { font-weight:bold; }
+.ok { color:green; }
+.error { color:red; }
+.check { color:#555; }
+
+hr { color: #ccc; }
+/*------------------------------------------------*/
+.tooltip[title]{
+    position:relative;
+}
+.cleft { float: left; }
+.tooltip[title]:after{
+    content:attr(title);
+    color:#fff;
+    background:#333;
+    background:rgba(51,51,51,0.75);
+    padding:5px;
+    position:absolute;
+    left:-9999px;
+    opacity:0;
+    bottom:100%;
+    white-space:nowrap;
+    -webkit-transition:0.25s linear opacity;
+}
+.tooltip[title]:hover:after{
+    left:5px;
+    opacity:1;
+}
+
+.btn {
+  -moz-user-select: none;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 0.225em;
+  cursor: pointer;
+  display: inline-block;
+  font-size: 100%;
+  font-weight: normal;
+  line-height: 1.42857;
+  margin: 0;
+  padding: 2px 12px;
+  text-align: center;
+  vertical-align: middle;
+  white-space: nowrap;
+}
+.btn-large { padding: 6px 12px; }
+
+.btn-lg, .btn-group-lg > .btn {
+  border-radius: 6px;
+  line-height: 1.33333;
+  padding: 10px 16px;
+}
+.btn-default {
+  background-color: #DFDFDF;
+  border-color: #ccc;
+  color: #3C3838;
+}
+
+.btn-danger {
+  background-color: #F71B13;
+  border-color: #d43f3a;
+  color: #DEDADA;
+}
+
+.btn-success {
+  background-color: #73C46C;
+  border-color: #2C8B39;
+  color: #3C3838;
+}
+
+.btn:hover {
+  background-color: #D1D1D1;
+  border: 1px solid #3E3E3E;
+  color: #000000;
+}
+#custom-modal-template.btn:hover { border: 1px solid transparent; }
+
+.btn-gradient {
+    background: #c7dfef;
+    background: -moz-linear-gradient(top, rgba(199,223,239,1) 0%, rgba(255,255,255,1) 21%);
+    background: -webkit-linear-gradient(top, rgba(199,223,239,1) 0%,rgba(255,255,255,1) 21%);
+    background: linear-gradient(to bottom, rgba(199,223,239,1) 0%,rgba(255,255,255,1) 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e3eff7', endColorstr='#ffffff',GradientType=0 );
+    border : #255e83 solid 1px;
+    font-family : Verdana, Arial;
+    font-weight : normal;
+}
+
+#delete-error-log { cursor: pointer; }
+.w3-select,
+.w3-input { padding: 2px 4px!important; line-height: 1.825; }
+.w3-select,
+input[type="text"] { height: 1.925em; vertical-align: middle; }
+input[type="checkbox"] { height: 1.225em; width: 1.225em !important; vertical-align: middle; }
+input[type="radio"] {padding: 0;vertical-align: middle;}
+
+
Index: trunk/templates/DefaultTheme/css/core.css
===================================================================
--- trunk/templates/DefaultTheme/css/core.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/core.css	(revision 2)
@@ -0,0 +1,82 @@
+@viewport {
+   width: device-width;
+   min-zoom: 1;
+   max-zoom: 2;
+}
+* html body * { overflow :visible; }
+* html div{ height :1em;  }
+html { overflow: -moz-scrollbars-vertical; }
+html {
+  color: #404040;
+  font-family: Verdana,"Trebuchet MS",Arial,Helvetica,sans-serif;
+  font-size: 100.1%;
+  font-weight: normal;
+  overflow-x: auto;
+  overflow-y: scroll;
+}
+body{ margin :0 auto; padding :0px; background :#a8bccb; text-align :left; font-size :0.8em; }
+body { background-color :#a8bccb; background-repeat :repeat-x; }
+/*
+* {box-sizing: border-box;}
+*::before, *::after {
+  box-sizing: border-box;
+}
+*/
+.rounded { border-radius :10px; -khtml-border-radius :10px; -webkit-border-radius :10px; -moz-border-radius :10px; }
+.bigger { font-size :150%; }
+.strong { font-weight :bold; }
+.msg-box { background :#C6F5C8; border :0.2em #028F02 solid; color :#336600; margin-bottom :1em; padding :0.63em; text-align :center; }
+.error-box { background :#FAD5D5; border :0.2em #982020 solid; color :#440000; margin-bottom :1em; padding :0.63em; text-align :center; }
+.msg-box p,
+.error-box p { font-size :120%; }
+/* FORMS */
+.submit, .cancel { width :100px; margin-top :5px; }
+.form_submit .right { text-align :right; }
+.input_small { width :20px; }
+.input_normal { width :120px; }
+.input_medium { width :150px; }
+.input_wide { width :200px; }
+.input_large { width :300px; }
+div.sub-row {
+  background-color: #eeeeee;
+  margin: 1px auto;
+  overflow: hidden;
+  padding: 0;
+}
+.curved { border :1px solid #666666; }
+.c33,
+div.col_width33 { width :33.333%; }
+.c50, div.col_width50 { width :46%; }
+.c60, div.col_width60 { width :60%; }
+.h65 { min-height :65px; overflow :auto; }
+.h80 { height :80px; line-height :1.3em; }
+.min_h100 { min-height :100px; }
+.c100, div.col_width100 { width :100%; margin :0 auto; }
+.c400, .col_width400 { width :400px; }
+/* */
+div.table {
+  display: table;
+  border-collapse:collapse;
+}
+div.tr {
+  display:table-row;
+}
+div.td {
+  display:table-cell;
+  border:thin solid red;
+  padding:5px;
+}
+
+table.header div.links {
+margin: auto;
+text-align: center;
+}
+table.header div.links ul.links li {
+display: inline;
+line-height: 1.5;
+margin-bottom: 2px;
+padding: 0.455em 0.225em;
+text-align: center;
+vertical-align: middle;
+white-space: nowrap;  }
+
Index: trunk/templates/DefaultTheme/css/customAlert.css
===================================================================
--- trunk/templates/DefaultTheme/css/customAlert.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/customAlert.css	(revision 2)
@@ -0,0 +1,76 @@
+/**
+ * customAlert
+ * Author: Philippe Assis
+ * Doc and repo: https://github.com/PhilippeAssis/custom-alert
+ *
+ * Alert e confirm personalizados.
+ * FF, Chromer, IE(>=9)
+ *
+ *                              ATENÇÂO
+ * window.customAlert e window.customConfirm devem permanecer com esses nomes,
+ * a não ser que você saiba o que esta fazendo.
+ */
+#customAlert-overlay, 
+#customConfirm-overlay { display: none; opacity: 0.5; position: fixed; top: 0px; left: 0px; width: 100vw; height: 100vh; z-index: 99999; background: #000000; }
+#customAlert { background: #FFFFFF; }
+#customAlert button { color: #5E5E5E; background: #BABABA; }
+#customAlert button:hover { color: #E6E6E6; background: #666666; }
+#customConfirm { background: #FFFFFF; }
+
+
+#customConfirm button.cancel,
+#customConfirm button.confirm { font-weight: bold; }
+
+#customConfirm button.confirm { margin-right: 10px; color: #204625; background: #68BB74; }
+#customConfirm button.confirm:hover { color: #DCEFDF; background: #3F8D4B; }
+#customConfirm button.cancel { color: #F8D8D3; background: #E2614B; }
+#customConfirm button.cancel:hover { color: #F8D8D3; background: #B0321C; }
+
+#customAlert,
+#customConfirm { border-radius: 5px; width: 40%; font-size: 1.125em; /*display: none;*/ position: fixed; max-width: 100vw; max-height: 100vh; /*z-index: 1000;*/ top: 5%; margin: auto 30%; padding: 0.125em; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.3); -webkit-transition: opacity 400ms ease-in 0s; -moz-transition: opacity 400ms ease-in 0s; transition: opacity 400ms ease-in 0s; }
+
+#customAlert header,
+#customConfirm header { color: #3E6D86; text-align: left; font-size: 1.125em; font-weight: bold; background: rgba(0, 0, 0, 0) linear-gradient(#fff, #999) repeat scroll 0 0; height: 1.925em; }
+
+#customAlert .body,
+#customConfirm .body { padding: 0; color: #5C5C5C; font-size: 1.125em; background: #FFFFFF; text-align: center; opacity: 1; }
+#customConfirm .body p { font-weight: bold; color: #F00606; }
+
+#customAlert .footer,
+#customConfirm .footer { background: #FFFFFF; text-align: center; margin: 1.925em auto 0; }
+#customAlert button,
+#customConfirm button { min-width: 3.025em; margin-bottom: 5px; padding: 5px; font-size: 0.9em; word-wrap: break-word; }
+#customAlert button:hover,
+#customConfirm button:hover { cursor: pointer; }
+
+#customAlert button.close,
+#customConfirm button.close {
+  background: #215a7a none repeat scroll 0 0;
+  border-radius: 1.925em;
+  box-shadow: 1px 1px 3px #000000;
+  color: #ffffff !important;
+  font-size: 1.225em;
+  font-weight: bold;
+  line-height: 2.025em;
+  position: absolute;
+  right: -12px;
+  text-align: center;
+  text-decoration: none;
+  top: -10px;
+  width: 3.025em;
+}
+#customAlert button.close:hover,
+#customConfirm button.close:hover { background: #FE0606 none repeat scroll 0 0; }
+
+div.droplets h2 {
+  color: #3d6f8a;
+  font-size: 1.125em;
+}
+@media (min-width: 321px) {
+    #customAlert,
+    #customConfirm { top: 20%; }
+}
+@media (max-width: 550px) {
+    #customAlert,
+    #customConfirm { margin-left: -50vw; }
+}
Index: trunk/templates/DefaultTheme/css/dialogBox.css
===================================================================
--- trunk/templates/DefaultTheme/css/dialogBox.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/dialogBox.css	(revision 2)
@@ -0,0 +1,27 @@
+#close { display: none; }
+.modalDialog { position: fixed; font-family: Arial, Helvetica, sans-serif; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.6); z-index: 99999; opacity: 0; -webkit-transition: opacity 400ms ease-in; -moz-transition: opacity 400ms ease-in; transition: opacity 400ms ease-in; pointer-events: none; }
+.modalDialog:target { opacity: 1; pointer-events: auto; }
+.modalDialog > div { width: 60.525em; position: relative; margin: 10% auto; border-radius: 10px; background: -moz-linear-gradient(#fff, #999); background: -webkit-linear-gradient(#fff, #999); background: -o-linear-gradient(#fff, #999); background: #FFFFFF; }
+.close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 3.025em; position: absolute; right: -12px; text-align: center; top: -10px; width: 3.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.close:hover { background: #FF1100; }
+
+.modal-Dialog { background: rgba(0, 0, 0, 0.6) none repeat scroll 0 0; position: fixed; top: 0; right: 0; bottom: 0; left: 0; height: 100%; z-index: 99999; }
+.modal-Dialog { -webkit-transition: opacity 800ms ease-in; -moz-transition: opacity 800ms ease-in; transition: opacity 800ms ease-in; }
+.modal-Dialog > div {
+    -webkit-transition: width 2s, height 2s, background-color 2s, -webkit-transform 2s;
+    transition: width 2s, height 2s, background-color 2s, transform 2s;
+ }
+.modal-Dialog .close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 3.025em; position: absolute; top: 1.125em; right: 0; text-align: center; width: 3.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.modal-Dialog .close:hover { background: #FF1100; }
+
+.modal-Dialog form {  }
+
+.modalDialog form,
+.modalDialog iframe { width: 50.225em; height: 25.525em; border: none; }
+
+footer.modal-label, header.modal-label { background: -moz-linear-gradient(#fff, #999); /*height: 3.525em;*/ padding: 0 0.525em 0.525em; }
+footer.modal-label { padding: 1.525em 0; }
+div.modal-inner { padding: 0.825em 0.525em 0; margin: auto 4%; overflow: hidden; }
+div.modal-inner iframe { border: none; height: 20.225em; }
+[draggable=true] { -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; user-select: none; /* Required to make elements draggable in old WebKit */ -khtml-user-drag: element; -webkit-user-drag: element; }
+[draggable=true] header { cursor: move; }
Index: trunk/templates/DefaultTheme/css/font-awesome.css
===================================================================
--- trunk/templates/DefaultTheme/css/font-awesome.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/font-awesome.css	(revision 2)
@@ -0,0 +1,2199 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+  font-family: 'FontAwesome';
+  src: url('../fonts/fontawesome-webfont.eot?v=4.6.3');
+  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+.fa {
+  display: inline-block;
+  font: normal normal normal 14px/1 FontAwesome;
+  font-size: inherit;
+  text-rendering: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+  font-size: 1.33333333em;
+  line-height: 0.75em;
+  vertical-align: -15%;
+}
+.fa-2x {
+  font-size: 2em;
+}
+.fa-3x {
+  font-size: 3em;
+}
+.fa-4x {
+  font-size: 4em;
+}
+.fa-5x {
+  font-size: 5em;
+}
+.fa-fw {
+  width: 1.28571429em;
+  text-align: center;
+}
+.fa-ul {
+  padding-left: 0;
+  margin-left: 2.14285714em;
+  list-style-type: none;
+}
+.fa-ul > li {
+  position: relative;
+}
+.fa-li {
+  position: absolute;
+  left: -2.14285714em;
+  width: 2.14285714em;
+  top: 0.14285714em;
+  text-align: center;
+}
+.fa-li.fa-lg {
+  left: -1.85714286em;
+}
+.fa-border {
+  padding: .2em .25em .15em;
+  border: solid 0.08em #eee;
+  border-radius: .1em;
+}
+.fa-pull-left {
+  float: left;
+}
+.fa-pull-right {
+  float: right;
+}
+.fa.fa-pull-left {
+  margin-right: .3em;
+}
+.fa.fa-pull-right {
+  margin-left: .3em;
+}
+/* Deprecated as of 4.4.0 */
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.fa.pull-left {
+  margin-right: .3em;
+}
+.fa.pull-right {
+  margin-left: .3em;
+}
+.fa-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+  animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+  animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+.fa-rotate-90 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.fa-rotate-180 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.fa-rotate-270 {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+  -webkit-transform: scale(-1, 1);
+  -ms-transform: scale(-1, 1);
+  transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+  -webkit-transform: scale(1, -1);
+  -ms-transform: scale(1, -1);
+  transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+  filter: none;
+}
+.fa-stack {
+  position: relative;
+  display: inline-block;
+  width: 2em;
+  height: 2em;
+  line-height: 2em;
+  vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+  position: absolute;
+  left: 0;
+  width: 100%;
+  text-align: center;
+}
+.fa-stack-1x {
+  line-height: inherit;
+}
+.fa-stack-2x {
+  font-size: 2em;
+}
+.fa-inverse {
+  color: #fff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-glass:before {
+  content: "\f000";
+}
+.fa-music:before {
+  content: "\f001";
+}
+.fa-search:before {
+  content: "\f002";
+}
+.fa-envelope-o:before {
+  content: "\f003";
+}
+.fa-heart:before {
+  content: "\f004";
+}
+.fa-star:before {
+  content: "\f005";
+}
+.fa-star-o:before {
+  content: "\f006";
+}
+.fa-user:before {
+  content: "\f007";
+}
+.fa-film:before {
+  content: "\f008";
+}
+.fa-th-large:before {
+  content: "\f009";
+}
+.fa-th:before {
+  content: "\f00a";
+}
+.fa-th-list:before {
+  content: "\f00b";
+}
+.fa-check:before {
+  content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+  content: "\f00d";
+}
+.fa-search-plus:before {
+  content: "\f00e";
+}
+.fa-search-minus:before {
+  content: "\f010";
+}
+.fa-power-off:before {
+  content: "\f011";
+}
+.fa-signal:before {
+  content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+  content: "\f013";
+}
+.fa-trash-o:before {
+  content: "\f014";
+}
+.fa-home:before {
+  content: "\f015";
+}
+.fa-file-o:before {
+  content: "\f016";
+}
+.fa-clock-o:before {
+  content: "\f017";
+}
+.fa-road:before {
+  content: "\f018";
+}
+.fa-download:before {
+  content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+  content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+  content: "\f01b";
+}
+.fa-inbox:before {
+  content: "\f01c";
+}
+.fa-play-circle-o:before {
+  content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+  content: "\f01e";
+}
+.fa-refresh:before {
+  content: "\f021";
+}
+.fa-list-alt:before {
+  content: "\f022";
+}
+.fa-lock:before {
+  content: "\f023";
+}
+.fa-flag:before {
+  content: "\f024";
+}
+.fa-headphones:before {
+  content: "\f025";
+}
+.fa-volume-off:before {
+  content: "\f026";
+}
+.fa-volume-down:before {
+  content: "\f027";
+}
+.fa-volume-up:before {
+  content: "\f028";
+}
+.fa-qrcode:before {
+  content: "\f029";
+}
+.fa-barcode:before {
+  content: "\f02a";
+}
+.fa-tag:before {
+  content: "\f02b";
+}
+.fa-tags:before {
+  content: "\f02c";
+}
+.fa-book:before {
+  content: "\f02d";
+}
+.fa-bookmark:before {
+  content: "\f02e";
+}
+.fa-print:before {
+  content: "\f02f";
+}
+.fa-camera:before {
+  content: "\f030";
+}
+.fa-font:before {
+  content: "\f031";
+}
+.fa-bold:before {
+  content: "\f032";
+}
+.fa-italic:before {
+  content: "\f033";
+}
+.fa-text-height:before {
+  content: "\f034";
+}
+.fa-text-width:before {
+  content: "\f035";
+}
+.fa-align-left:before {
+  content: "\f036";
+}
+.fa-align-center:before {
+  content: "\f037";
+}
+.fa-align-right:before {
+  content: "\f038";
+}
+.fa-align-justify:before {
+  content: "\f039";
+}
+.fa-list:before {
+  content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+  content: "\f03b";
+}
+.fa-indent:before {
+  content: "\f03c";
+}
+.fa-video-camera:before {
+  content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+  content: "\f03e";
+}
+.fa-pencil:before {
+  content: "\f040";
+}
+.fa-map-marker:before {
+  content: "\f041";
+}
+.fa-adjust:before {
+  content: "\f042";
+}
+.fa-tint:before {
+  content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+  content: "\f044";
+}
+.fa-share-square-o:before {
+  content: "\f045";
+}
+.fa-check-square-o:before {
+  content: "\f046";
+}
+.fa-arrows:before {
+  content: "\f047";
+}
+.fa-step-backward:before {
+  content: "\f048";
+}
+.fa-fast-backward:before {
+  content: "\f049";
+}
+.fa-backward:before {
+  content: "\f04a";
+}
+.fa-play:before {
+  content: "\f04b";
+}
+.fa-pause:before {
+  content: "\f04c";
+}
+.fa-stop:before {
+  content: "\f04d";
+}
+.fa-forward:before {
+  content: "\f04e";
+}
+.fa-fast-forward:before {
+  content: "\f050";
+}
+.fa-step-forward:before {
+  content: "\f051";
+}
+.fa-eject:before {
+  content: "\f052";
+}
+.fa-chevron-left:before {
+  content: "\f053";
+}
+.fa-chevron-right:before {
+  content: "\f054";
+}
+.fa-plus-circle:before {
+  content: "\f055";
+}
+.fa-minus-circle:before {
+  content: "\f056";
+}
+.fa-times-circle:before {
+  content: "\f057";
+}
+.fa-check-circle:before {
+  content: "\f058";
+}
+.fa-question-circle:before {
+  content: "\f059";
+}
+.fa-info-circle:before {
+  content: "\f05a";
+}
+.fa-crosshairs:before {
+  content: "\f05b";
+}
+.fa-times-circle-o:before {
+  content: "\f05c";
+}
+.fa-check-circle-o:before {
+  content: "\f05d";
+}
+.fa-ban:before {
+  content: "\f05e";
+}
+.fa-arrow-left:before {
+  content: "\f060";
+}
+.fa-arrow-right:before {
+  content: "\f061";
+}
+.fa-arrow-up:before {
+  content: "\f062";
+}
+.fa-arrow-down:before {
+  content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+  content: "\f064";
+}
+.fa-expand:before {
+  content: "\f065";
+}
+.fa-compress:before {
+  content: "\f066";
+}
+.fa-plus:before {
+  content: "\f067";
+}
+.fa-minus:before {
+  content: "\f068";
+}
+.fa-asterisk:before {
+  content: "\f069";
+}
+.fa-exclamation-circle:before {
+  content: "\f06a";
+}
+.fa-gift:before {
+  content: "\f06b";
+}
+.fa-leaf:before {
+  content: "\f06c";
+}
+.fa-fire:before {
+  content: "\f06d";
+}
+.fa-eye:before {
+  content: "\f06e";
+}
+.fa-eye-slash:before {
+  content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+  content: "\f071";
+}
+.fa-plane:before {
+  content: "\f072";
+}
+.fa-calendar:before {
+  content: "\f073";
+}
+.fa-random:before {
+  content: "\f074";
+}
+.fa-comment:before {
+  content: "\f075";
+}
+.fa-magnet:before {
+  content: "\f076";
+}
+.fa-chevron-up:before {
+  content: "\f077";
+}
+.fa-chevron-down:before {
+  content: "\f078";
+}
+.fa-retweet:before {
+  content: "\f079";
+}
+.fa-shopping-cart:before {
+  content: "\f07a";
+}
+.fa-folder:before {
+  content: "\f07b";
+}
+.fa-folder-open:before {
+  content: "\f07c";
+}
+.fa-arrows-v:before {
+  content: "\f07d";
+}
+.fa-arrows-h:before {
+  content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+  content: "\f080";
+}
+.fa-twitter-square:before {
+  content: "\f081";
+}
+.fa-facebook-square:before {
+  content: "\f082";
+}
+.fa-camera-retro:before {
+  content: "\f083";
+}
+.fa-key:before {
+  content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+  content: "\f085";
+}
+.fa-comments:before {
+  content: "\f086";
+}
+.fa-thumbs-o-up:before {
+  content: "\f087";
+}
+.fa-thumbs-o-down:before {
+  content: "\f088";
+}
+.fa-star-half:before {
+  content: "\f089";
+}
+.fa-heart-o:before {
+  content: "\f08a";
+}
+.fa-sign-out:before {
+  content: "\f08b";
+}
+.fa-linkedin-square:before {
+  content: "\f08c";
+}
+.fa-thumb-tack:before {
+  content: "\f08d";
+}
+.fa-external-link:before {
+  content: "\f08e";
+}
+.fa-sign-in:before {
+  content: "\f090";
+}
+.fa-trophy:before {
+  content: "\f091";
+}
+.fa-github-square:before {
+  content: "\f092";
+}
+.fa-upload:before {
+  content: "\f093";
+}
+.fa-lemon-o:before {
+  content: "\f094";
+}
+.fa-phone:before {
+  content: "\f095";
+}
+.fa-square-o:before {
+  content: "\f096";
+}
+.fa-bookmark-o:before {
+  content: "\f097";
+}
+.fa-phone-square:before {
+  content: "\f098";
+}
+.fa-twitter:before {
+  content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+  content: "\f09a";
+}
+.fa-github:before {
+  content: "\f09b";
+}
+.fa-unlock:before {
+  content: "\f09c";
+}
+.fa-credit-card:before {
+  content: "\f09d";
+}
+.fa-feed:before,
+.fa-rss:before {
+  content: "\f09e";
+}
+.fa-hdd-o:before {
+  content: "\f0a0";
+}
+.fa-bullhorn:before {
+  content: "\f0a1";
+}
+.fa-bell:before {
+  content: "\f0f3";
+}
+.fa-certificate:before {
+  content: "\f0a3";
+}
+.fa-hand-o-right:before {
+  content: "\f0a4";
+}
+.fa-hand-o-left:before {
+  content: "\f0a5";
+}
+.fa-hand-o-up:before {
+  content: "\f0a6";
+}
+.fa-hand-o-down:before {
+  content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+  content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+  content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+  content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+  content: "\f0ab";
+}
+.fa-globe:before {
+  content: "\f0ac";
+}
+.fa-wrench:before {
+  content: "\f0ad";
+}
+.fa-tasks:before {
+  content: "\f0ae";
+}
+.fa-filter:before {
+  content: "\f0b0";
+}
+.fa-briefcase:before {
+  content: "\f0b1";
+}
+.fa-arrows-alt:before {
+  content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+  content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+  content: "\f0c1";
+}
+.fa-cloud:before {
+  content: "\f0c2";
+}
+.fa-flask:before {
+  content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+  content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+  content: "\f0c5";
+}
+.fa-paperclip:before {
+  content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+  content: "\f0c7";
+}
+.fa-square:before {
+  content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+  content: "\f0c9";
+}
+.fa-list-ul:before {
+  content: "\f0ca";
+}
+.fa-list-ol:before {
+  content: "\f0cb";
+}
+.fa-strikethrough:before {
+  content: "\f0cc";
+}
+.fa-underline:before {
+  content: "\f0cd";
+}
+.fa-table:before {
+  content: "\f0ce";
+}
+.fa-magic:before {
+  content: "\f0d0";
+}
+.fa-truck:before {
+  content: "\f0d1";
+}
+.fa-pinterest:before {
+  content: "\f0d2";
+}
+.fa-pinterest-square:before {
+  content: "\f0d3";
+}
+.fa-google-plus-square:before {
+  content: "\f0d4";
+}
+.fa-google-plus:before {
+  content: "\f0d5";
+}
+.fa-money:before {
+  content: "\f0d6";
+}
+.fa-caret-down:before {
+  content: "\f0d7";
+}
+.fa-caret-up:before {
+  content: "\f0d8";
+}
+.fa-caret-left:before {
+  content: "\f0d9";
+}
+.fa-caret-right:before {
+  content: "\f0da";
+}
+.fa-columns:before {
+  content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+  content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+  content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+  content: "\f0de";
+}
+.fa-envelope:before {
+  content: "\f0e0";
+}
+.fa-linkedin:before {
+  content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+  content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+  content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+  content: "\f0e4";
+}
+.fa-comment-o:before {
+  content: "\f0e5";
+}
+.fa-comments-o:before {
+  content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+  content: "\f0e7";
+}
+.fa-sitemap:before {
+  content: "\f0e8";
+}
+.fa-umbrella:before {
+  content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+  content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+  content: "\f0eb";
+}
+.fa-exchange:before {
+  content: "\f0ec";
+}
+.fa-cloud-download:before {
+  content: "\f0ed";
+}
+.fa-cloud-upload:before {
+  content: "\f0ee";
+}
+.fa-user-md:before {
+  content: "\f0f0";
+}
+.fa-stethoscope:before {
+  content: "\f0f1";
+}
+.fa-suitcase:before {
+  content: "\f0f2";
+}
+.fa-bell-o:before {
+  content: "\f0a2";
+}
+.fa-coffee:before {
+  content: "\f0f4";
+}
+.fa-cutlery:before {
+  content: "\f0f5";
+}
+.fa-file-text-o:before {
+  content: "\f0f6";
+}
+.fa-building-o:before {
+  content: "\f0f7";
+}
+.fa-hospital-o:before {
+  content: "\f0f8";
+}
+.fa-ambulance:before {
+  content: "\f0f9";
+}
+.fa-medkit:before {
+  content: "\f0fa";
+}
+.fa-fighter-jet:before {
+  content: "\f0fb";
+}
+.fa-beer:before {
+  content: "\f0fc";
+}
+.fa-h-square:before {
+  content: "\f0fd";
+}
+.fa-plus-square:before {
+  content: "\f0fe";
+}
+.fa-angle-double-left:before {
+  content: "\f100";
+}
+.fa-angle-double-right:before {
+  content: "\f101";
+}
+.fa-angle-double-up:before {
+  content: "\f102";
+}
+.fa-angle-double-down:before {
+  content: "\f103";
+}
+.fa-angle-left:before {
+  content: "\f104";
+}
+.fa-angle-right:before {
+  content: "\f105";
+}
+.fa-angle-up:before {
+  content: "\f106";
+}
+.fa-angle-down:before {
+  content: "\f107";
+}
+.fa-desktop:before {
+  content: "\f108";
+}
+.fa-laptop:before {
+  content: "\f109";
+}
+.fa-tablet:before {
+  content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+  content: "\f10b";
+}
+.fa-circle-o:before {
+  content: "\f10c";
+}
+.fa-quote-left:before {
+  content: "\f10d";
+}
+.fa-quote-right:before {
+  content: "\f10e";
+}
+.fa-spinner:before {
+  content: "\f110";
+}
+.fa-circle:before {
+  content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+  content: "\f112";
+}
+.fa-github-alt:before {
+  content: "\f113";
+}
+.fa-folder-o:before {
+  content: "\f114";
+}
+.fa-folder-open-o:before {
+  content: "\f115";
+}
+.fa-smile-o:before {
+  content: "\f118";
+}
+.fa-frown-o:before {
+  content: "\f119";
+}
+.fa-meh-o:before {
+  content: "\f11a";
+}
+.fa-gamepad:before {
+  content: "\f11b";
+}
+.fa-keyboard-o:before {
+  content: "\f11c";
+}
+.fa-flag-o:before {
+  content: "\f11d";
+}
+.fa-flag-checkered:before {
+  content: "\f11e";
+}
+.fa-terminal:before {
+  content: "\f120";
+}
+.fa-code:before {
+  content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+  content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+  content: "\f123";
+}
+.fa-location-arrow:before {
+  content: "\f124";
+}
+.fa-crop:before {
+  content: "\f125";
+}
+.fa-code-fork:before {
+  content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+  content: "\f127";
+}
+.fa-question:before {
+  content: "\f128";
+}
+.fa-info:before {
+  content: "\f129";
+}
+.fa-exclamation:before {
+  content: "\f12a";
+}
+.fa-superscript:before {
+  content: "\f12b";
+}
+.fa-subscript:before {
+  content: "\f12c";
+}
+.fa-eraser:before {
+  content: "\f12d";
+}
+.fa-puzzle-piece:before {
+  content: "\f12e";
+}
+.fa-microphone:before {
+  content: "\f130";
+}
+.fa-microphone-slash:before {
+  content: "\f131";
+}
+.fa-shield:before {
+  content: "\f132";
+}
+.fa-calendar-o:before {
+  content: "\f133";
+}
+.fa-fire-extinguisher:before {
+  content: "\f134";
+}
+.fa-rocket:before {
+  content: "\f135";
+}
+.fa-maxcdn:before {
+  content: "\f136";
+}
+.fa-chevron-circle-left:before {
+  content: "\f137";
+}
+.fa-chevron-circle-right:before {
+  content: "\f138";
+}
+.fa-chevron-circle-up:before {
+  content: "\f139";
+}
+.fa-chevron-circle-down:before {
+  content: "\f13a";
+}
+.fa-html5:before {
+  content: "\f13b";
+}
+.fa-css3:before {
+  content: "\f13c";
+}
+.fa-anchor:before {
+  content: "\f13d";
+}
+.fa-unlock-alt:before {
+  content: "\f13e";
+}
+.fa-bullseye:before {
+  content: "\f140";
+}
+.fa-ellipsis-h:before {
+  content: "\f141";
+}
+.fa-ellipsis-v:before {
+  content: "\f142";
+}
+.fa-rss-square:before {
+  content: "\f143";
+}
+.fa-play-circle:before {
+  content: "\f144";
+}
+.fa-ticket:before {
+  content: "\f145";
+}
+.fa-minus-square:before {
+  content: "\f146";
+}
+.fa-minus-square-o:before {
+  content: "\f147";
+}
+.fa-level-up:before {
+  content: "\f148";
+}
+.fa-level-down:before {
+  content: "\f149";
+}
+.fa-check-square:before {
+  content: "\f14a";
+}
+.fa-pencil-square:before {
+  content: "\f14b";
+}
+.fa-external-link-square:before {
+  content: "\f14c";
+}
+.fa-share-square:before {
+  content: "\f14d";
+}
+.fa-compass:before {
+  content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+  content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+  content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+  content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+  content: "\f153";
+}
+.fa-gbp:before {
+  content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+  content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+  content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+  content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+  content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+  content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+  content: "\f15a";
+}
+.fa-file:before {
+  content: "\f15b";
+}
+.fa-file-text:before {
+  content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+  content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+  content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+  content: "\f160";
+}
+.fa-sort-amount-desc:before {
+  content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+  content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+  content: "\f163";
+}
+.fa-thumbs-up:before {
+  content: "\f164";
+}
+.fa-thumbs-down:before {
+  content: "\f165";
+}
+.fa-youtube-square:before {
+  content: "\f166";
+}
+.fa-youtube:before {
+  content: "\f167";
+}
+.fa-xing:before {
+  content: "\f168";
+}
+.fa-xing-square:before {
+  content: "\f169";
+}
+.fa-youtube-play:before {
+  content: "\f16a";
+}
+.fa-dropbox:before {
+  content: "\f16b";
+}
+.fa-stack-overflow:before {
+  content: "\f16c";
+}
+.fa-instagram:before {
+  content: "\f16d";
+}
+.fa-flickr:before {
+  content: "\f16e";
+}
+.fa-adn:before {
+  content: "\f170";
+}
+.fa-bitbucket:before {
+  content: "\f171";
+}
+.fa-bitbucket-square:before {
+  content: "\f172";
+}
+.fa-tumblr:before {
+  content: "\f173";
+}
+.fa-tumblr-square:before {
+  content: "\f174";
+}
+.fa-long-arrow-down:before {
+  content: "\f175";
+}
+.fa-long-arrow-up:before {
+  content: "\f176";
+}
+.fa-long-arrow-left:before {
+  content: "\f177";
+}
+.fa-long-arrow-right:before {
+  content: "\f178";
+}
+.fa-apple:before {
+  content: "\f179";
+}
+.fa-windows:before {
+  content: "\f17a";
+}
+.fa-android:before {
+  content: "\f17b";
+}
+.fa-linux:before {
+  content: "\f17c";
+}
+.fa-dribbble:before {
+  content: "\f17d";
+}
+.fa-skype:before {
+  content: "\f17e";
+}
+.fa-foursquare:before {
+  content: "\f180";
+}
+.fa-trello:before {
+  content: "\f181";
+}
+.fa-female:before {
+  content: "\f182";
+}
+.fa-male:before {
+  content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+  content: "\f184";
+}
+.fa-sun-o:before {
+  content: "\f185";
+}
+.fa-moon-o:before {
+  content: "\f186";
+}
+.fa-archive:before {
+  content: "\f187";
+}
+.fa-bug:before {
+  content: "\f188";
+}
+.fa-vk:before {
+  content: "\f189";
+}
+.fa-weibo:before {
+  content: "\f18a";
+}
+.fa-renren:before {
+  content: "\f18b";
+}
+.fa-pagelines:before {
+  content: "\f18c";
+}
+.fa-stack-exchange:before {
+  content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+  content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+  content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+  content: "\f191";
+}
+.fa-dot-circle-o:before {
+  content: "\f192";
+}
+.fa-wheelchair:before {
+  content: "\f193";
+}
+.fa-vimeo-square:before {
+  content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+  content: "\f195";
+}
+.fa-plus-square-o:before {
+  content: "\f196";
+}
+.fa-space-shuttle:before {
+  content: "\f197";
+}
+.fa-slack:before {
+  content: "\f198";
+}
+.fa-envelope-square:before {
+  content: "\f199";
+}
+.fa-wordpress:before {
+  content: "\f19a";
+}
+.fa-openid:before {
+  content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+  content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+  content: "\f19d";
+}
+.fa-yahoo:before {
+  content: "\f19e";
+}
+.fa-google:before {
+  content: "\f1a0";
+}
+.fa-reddit:before {
+  content: "\f1a1";
+}
+.fa-reddit-square:before {
+  content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+  content: "\f1a3";
+}
+.fa-stumbleupon:before {
+  content: "\f1a4";
+}
+.fa-delicious:before {
+  content: "\f1a5";
+}
+.fa-digg:before {
+  content: "\f1a6";
+}
+.fa-pied-piper-pp:before {
+  content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+  content: "\f1a8";
+}
+.fa-drupal:before {
+  content: "\f1a9";
+}
+.fa-joomla:before {
+  content: "\f1aa";
+}
+.fa-language:before {
+  content: "\f1ab";
+}
+.fa-fax:before {
+  content: "\f1ac";
+}
+.fa-building:before {
+  content: "\f1ad";
+}
+.fa-child:before {
+  content: "\f1ae";
+}
+.fa-paw:before {
+  content: "\f1b0";
+}
+.fa-spoon:before {
+  content: "\f1b1";
+}
+.fa-cube:before {
+  content: "\f1b2";
+}
+.fa-cubes:before {
+  content: "\f1b3";
+}
+.fa-behance:before {
+  content: "\f1b4";
+}
+.fa-behance-square:before {
+  content: "\f1b5";
+}
+.fa-steam:before {
+  content: "\f1b6";
+}
+.fa-steam-square:before {
+  content: "\f1b7";
+}
+.fa-recycle:before {
+  content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+  content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+  content: "\f1ba";
+}
+.fa-tree:before {
+  content: "\f1bb";
+}
+.fa-spotify:before {
+  content: "\f1bc";
+}
+.fa-deviantart:before {
+  content: "\f1bd";
+}
+.fa-soundcloud:before {
+  content: "\f1be";
+}
+.fa-database:before {
+  content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+  content: "\f1c1";
+}
+.fa-file-word-o:before {
+  content: "\f1c2";
+}
+.fa-file-excel-o:before {
+  content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+  content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+  content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+  content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+  content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+  content: "\f1c8";
+}
+.fa-file-code-o:before {
+  content: "\f1c9";
+}
+.fa-vine:before {
+  content: "\f1ca";
+}
+.fa-codepen:before {
+  content: "\f1cb";
+}
+.fa-jsfiddle:before {
+  content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+  content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+  content: "\f1ce";
+}
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+  content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+  content: "\f1d1";
+}
+.fa-git-square:before {
+  content: "\f1d2";
+}
+.fa-git:before {
+  content: "\f1d3";
+}
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+  content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+  content: "\f1d5";
+}
+.fa-qq:before {
+  content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+  content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+  content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+  content: "\f1d9";
+}
+.fa-history:before {
+  content: "\f1da";
+}
+.fa-circle-thin:before {
+  content: "\f1db";
+}
+.fa-header:before {
+  content: "\f1dc";
+}
+.fa-paragraph:before {
+  content: "\f1dd";
+}
+.fa-sliders:before {
+  content: "\f1de";
+}
+.fa-share-alt:before {
+  content: "\f1e0";
+}
+.fa-share-alt-square:before {
+  content: "\f1e1";
+}
+.fa-bomb:before {
+  content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+  content: "\f1e3";
+}
+.fa-tty:before {
+  content: "\f1e4";
+}
+.fa-binoculars:before {
+  content: "\f1e5";
+}
+.fa-plug:before {
+  content: "\f1e6";
+}
+.fa-slideshare:before {
+  content: "\f1e7";
+}
+.fa-twitch:before {
+  content: "\f1e8";
+}
+.fa-yelp:before {
+  content: "\f1e9";
+}
+.fa-newspaper-o:before {
+  content: "\f1ea";
+}
+.fa-wifi:before {
+  content: "\f1eb";
+}
+.fa-calculator:before {
+  content: "\f1ec";
+}
+.fa-paypal:before {
+  content: "\f1ed";
+}
+.fa-google-wallet:before {
+  content: "\f1ee";
+}
+.fa-cc-visa:before {
+  content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+  content: "\f1f1";
+}
+.fa-cc-discover:before {
+  content: "\f1f2";
+}
+.fa-cc-amex:before {
+  content: "\f1f3";
+}
+.fa-cc-paypal:before {
+  content: "\f1f4";
+}
+.fa-cc-stripe:before {
+  content: "\f1f5";
+}
+.fa-bell-slash:before {
+  content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+  content: "\f1f7";
+}
+.fa-trash:before {
+  content: "\f1f8";
+}
+.fa-copyright:before {
+  content: "\f1f9";
+}
+.fa-at:before {
+  content: "\f1fa";
+}
+.fa-eyedropper:before {
+  content: "\f1fb";
+}
+.fa-paint-brush:before {
+  content: "\f1fc";
+}
+.fa-birthday-cake:before {
+  content: "\f1fd";
+}
+.fa-area-chart:before {
+  content: "\f1fe";
+}
+.fa-pie-chart:before {
+  content: "\f200";
+}
+.fa-line-chart:before {
+  content: "\f201";
+}
+.fa-lastfm:before {
+  content: "\f202";
+}
+.fa-lastfm-square:before {
+  content: "\f203";
+}
+.fa-toggle-off:before {
+  content: "\f204";
+}
+.fa-toggle-on:before {
+  content: "\f205";
+}
+.fa-bicycle:before {
+  content: "\f206";
+}
+.fa-bus:before {
+  content: "\f207";
+}
+.fa-ioxhost:before {
+  content: "\f208";
+}
+.fa-angellist:before {
+  content: "\f209";
+}
+.fa-cc:before {
+  content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+  content: "\f20b";
+}
+.fa-meanpath:before {
+  content: "\f20c";
+}
+.fa-buysellads:before {
+  content: "\f20d";
+}
+.fa-connectdevelop:before {
+  content: "\f20e";
+}
+.fa-dashcube:before {
+  content: "\f210";
+}
+.fa-forumbee:before {
+  content: "\f211";
+}
+.fa-leanpub:before {
+  content: "\f212";
+}
+.fa-sellsy:before {
+  content: "\f213";
+}
+.fa-shirtsinbulk:before {
+  content: "\f214";
+}
+.fa-simplybuilt:before {
+  content: "\f215";
+}
+.fa-skyatlas:before {
+  content: "\f216";
+}
+.fa-cart-plus:before {
+  content: "\f217";
+}
+.fa-cart-arrow-down:before {
+  content: "\f218";
+}
+.fa-diamond:before {
+  content: "\f219";
+}
+.fa-ship:before {
+  content: "\f21a";
+}
+.fa-user-secret:before {
+  content: "\f21b";
+}
+.fa-motorcycle:before {
+  content: "\f21c";
+}
+.fa-street-view:before {
+  content: "\f21d";
+}
+.fa-heartbeat:before {
+  content: "\f21e";
+}
+.fa-venus:before {
+  content: "\f221";
+}
+.fa-mars:before {
+  content: "\f222";
+}
+.fa-mercury:before {
+  content: "\f223";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+  content: "\f224";
+}
+.fa-transgender-alt:before {
+  content: "\f225";
+}
+.fa-venus-double:before {
+  content: "\f226";
+}
+.fa-mars-double:before {
+  content: "\f227";
+}
+.fa-venus-mars:before {
+  content: "\f228";
+}
+.fa-mars-stroke:before {
+  content: "\f229";
+}
+.fa-mars-stroke-v:before {
+  content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+  content: "\f22b";
+}
+.fa-neuter:before {
+  content: "\f22c";
+}
+.fa-genderless:before {
+  content: "\f22d";
+}
+.fa-facebook-official:before {
+  content: "\f230";
+}
+.fa-pinterest-p:before {
+  content: "\f231";
+}
+.fa-whatsapp:before {
+  content: "\f232";
+}
+.fa-server:before {
+  content: "\f233";
+}
+.fa-user-plus:before {
+  content: "\f234";
+}
+.fa-user-times:before {
+  content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+  content: "\f236";
+}
+.fa-viacoin:before {
+  content: "\f237";
+}
+.fa-train:before {
+  content: "\f238";
+}
+.fa-subway:before {
+  content: "\f239";
+}
+.fa-medium:before {
+  content: "\f23a";
+}
+.fa-yc:before,
+.fa-y-combinator:before {
+  content: "\f23b";
+}
+.fa-optin-monster:before {
+  content: "\f23c";
+}
+.fa-opencart:before {
+  content: "\f23d";
+}
+.fa-expeditedssl:before {
+  content: "\f23e";
+}
+.fa-battery-4:before,
+.fa-battery-full:before {
+  content: "\f240";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+  content: "\f241";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+  content: "\f242";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+  content: "\f243";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+  content: "\f244";
+}
+.fa-mouse-pointer:before {
+  content: "\f245";
+}
+.fa-i-cursor:before {
+  content: "\f246";
+}
+.fa-object-group:before {
+  content: "\f247";
+}
+.fa-object-ungroup:before {
+  content: "\f248";
+}
+.fa-sticky-note:before {
+  content: "\f249";
+}
+.fa-sticky-note-o:before {
+  content: "\f24a";
+}
+.fa-cc-jcb:before {
+  content: "\f24b";
+}
+.fa-cc-diners-club:before {
+  content: "\f24c";
+}
+.fa-clone:before {
+  content: "\f24d";
+}
+.fa-balance-scale:before {
+  content: "\f24e";
+}
+.fa-hourglass-o:before {
+  content: "\f250";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+  content: "\f251";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+  content: "\f252";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+  content: "\f253";
+}
+.fa-hourglass:before {
+  content: "\f254";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+  content: "\f255";
+}
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+  content: "\f256";
+}
+.fa-hand-scissors-o:before {
+  content: "\f257";
+}
+.fa-hand-lizard-o:before {
+  content: "\f258";
+}
+.fa-hand-spock-o:before {
+  content: "\f259";
+}
+.fa-hand-pointer-o:before {
+  content: "\f25a";
+}
+.fa-hand-peace-o:before {
+  content: "\f25b";
+}
+.fa-trademark:before {
+  content: "\f25c";
+}
+.fa-registered:before {
+  content: "\f25d";
+}
+.fa-creative-commons:before {
+  content: "\f25e";
+}
+.fa-gg:before {
+  content: "\f260";
+}
+.fa-gg-circle:before {
+  content: "\f261";
+}
+.fa-tripadvisor:before {
+  content: "\f262";
+}
+.fa-odnoklassniki:before {
+  content: "\f263";
+}
+.fa-odnoklassniki-square:before {
+  content: "\f264";
+}
+.fa-get-pocket:before {
+  content: "\f265";
+}
+.fa-wikipedia-w:before {
+  content: "\f266";
+}
+.fa-safari:before {
+  content: "\f267";
+}
+.fa-chrome:before {
+  content: "\f268";
+}
+.fa-firefox:before {
+  content: "\f269";
+}
+.fa-opera:before {
+  content: "\f26a";
+}
+.fa-internet-explorer:before {
+  content: "\f26b";
+}
+.fa-tv:before,
+.fa-television:before {
+  content: "\f26c";
+}
+.fa-contao:before {
+  content: "\f26d";
+}
+.fa-500px:before {
+  content: "\f26e";
+}
+.fa-amazon:before {
+  content: "\f270";
+}
+.fa-calendar-plus-o:before {
+  content: "\f271";
+}
+.fa-calendar-minus-o:before {
+  content: "\f272";
+}
+.fa-calendar-times-o:before {
+  content: "\f273";
+}
+.fa-calendar-check-o:before {
+  content: "\f274";
+}
+.fa-industry:before {
+  content: "\f275";
+}
+.fa-map-pin:before {
+  content: "\f276";
+}
+.fa-map-signs:before {
+  content: "\f277";
+}
+.fa-map-o:before {
+  content: "\f278";
+}
+.fa-map:before {
+  content: "\f279";
+}
+.fa-commenting:before {
+  content: "\f27a";
+}
+.fa-commenting-o:before {
+  content: "\f27b";
+}
+.fa-houzz:before {
+  content: "\f27c";
+}
+.fa-vimeo:before {
+  content: "\f27d";
+}
+.fa-black-tie:before {
+  content: "\f27e";
+}
+.fa-fonticons:before {
+  content: "\f280";
+}
+.fa-reddit-alien:before {
+  content: "\f281";
+}
+.fa-edge:before {
+  content: "\f282";
+}
+.fa-credit-card-alt:before {
+  content: "\f283";
+}
+.fa-codiepie:before {
+  content: "\f284";
+}
+.fa-modx:before {
+  content: "\f285";
+}
+.fa-fort-awesome:before {
+  content: "\f286";
+}
+.fa-usb:before {
+  content: "\f287";
+}
+.fa-product-hunt:before {
+  content: "\f288";
+}
+.fa-mixcloud:before {
+  content: "\f289";
+}
+.fa-scribd:before {
+  content: "\f28a";
+}
+.fa-pause-circle:before {
+  content: "\f28b";
+}
+.fa-pause-circle-o:before {
+  content: "\f28c";
+}
+.fa-stop-circle:before {
+  content: "\f28d";
+}
+.fa-stop-circle-o:before {
+  content: "\f28e";
+}
+.fa-shopping-bag:before {
+  content: "\f290";
+}
+.fa-shopping-basket:before {
+  content: "\f291";
+}
+.fa-hashtag:before {
+  content: "\f292";
+}
+.fa-bluetooth:before {
+  content: "\f293";
+}
+.fa-bluetooth-b:before {
+  content: "\f294";
+}
+.fa-percent:before {
+  content: "\f295";
+}
+.fa-gitlab:before {
+  content: "\f296";
+}
+.fa-wpbeginner:before {
+  content: "\f297";
+}
+.fa-wpforms:before {
+  content: "\f298";
+}
+.fa-envira:before {
+  content: "\f299";
+}
+.fa-universal-access:before {
+  content: "\f29a";
+}
+.fa-wheelchair-alt:before {
+  content: "\f29b";
+}
+.fa-question-circle-o:before {
+  content: "\f29c";
+}
+.fa-blind:before {
+  content: "\f29d";
+}
+.fa-audio-description:before {
+  content: "\f29e";
+}
+.fa-volume-control-phone:before {
+  content: "\f2a0";
+}
+.fa-braille:before {
+  content: "\f2a1";
+}
+.fa-assistive-listening-systems:before {
+  content: "\f2a2";
+}
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+  content: "\f2a3";
+}
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+  content: "\f2a4";
+}
+.fa-glide:before {
+  content: "\f2a5";
+}
+.fa-glide-g:before {
+  content: "\f2a6";
+}
+.fa-signing:before,
+.fa-sign-language:before {
+  content: "\f2a7";
+}
+.fa-low-vision:before {
+  content: "\f2a8";
+}
+.fa-viadeo:before {
+  content: "\f2a9";
+}
+.fa-viadeo-square:before {
+  content: "\f2aa";
+}
+.fa-snapchat:before {
+  content: "\f2ab";
+}
+.fa-snapchat-ghost:before {
+  content: "\f2ac";
+}
+.fa-snapchat-square:before {
+  content: "\f2ad";
+}
+.fa-pied-piper:before {
+  content: "\f2ae";
+}
+.fa-first-order:before {
+  content: "\f2b0";
+}
+.fa-yoast:before {
+  content: "\f2b1";
+}
+.fa-themeisle:before {
+  content: "\f2b2";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+  content: "\f2b3";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+  content: "\f2b4";
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
Index: trunk/templates/DefaultTheme/css/global.css
===================================================================
--- trunk/templates/DefaultTheme/css/global.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/global.css	(revision 2)
@@ -0,0 +1,9 @@
+table.default { border-collapse: collapse; table-layout: fixed; width: 100%; white-space: nowrap; }
+/* table thead thead */
+table.default thead tr { background: linear-gradient(#7EB7BF 0%, #507279 100%); background: #538199; color: #fff; }
+/* table tbody rows */
+table.default tbody tr { background: #fff; }
+table.default:nth-child(odd) tbody tr { background: #e8e8e8; }
+table.default tbody tr:hover { background: #FBFCE0; cursor: default; }
+
+li.default:nth-child(odd) > table.default { background: #e8e8e8; }
Index: trunk/templates/DefaultTheme/css/login.css
===================================================================
--- trunk/templates/DefaultTheme/css/login.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/login.css	(revision 2)
@@ -0,0 +1,88 @@
+* html body * { overflow :visible; }
+* html div{ height :1em;  }
+html { overflow: -moz-scrollbars-vertical; }
+html {
+  color: #404040;
+  font-family: Verdana,"Trebuchet MS",Arial,Helvetica,sans-serif;
+  font-size: 100.1%;
+  font-weight: normal;
+  overflow-x: auto;
+  overflow-y: scroll;
+}
+
+body { background-color :#464849; background-repeat :repeat-x; }
+body{ margin :0 auto; padding :0px; background :#a8bccb; text-align :left; font-size :0.8em; }
+.parallax {
+    /* The image used */
+    background-image: url("../title_images/EN_templateSystem.jpg");
+    /* Set a specific height */
+    height: 500px;
+    /* Create the parallax scrolling effect */
+    background-attachment: fixed;
+    background-position: center;
+    background-repeat: no-repeat;
+    background-size: cover;
+}
+.w3-bold { font-weight: bold; }
+.w3-wrap { width: 50%;  padding-top: 4.525em; min-width: 20.225em;}
+
+form {
+    border: 0px solid #f1f1f1;
+}
+
+input[type=text], input[type=password] {
+    width: 100%;
+    padding: 8px 10px;
+    margin: 8px 0;
+    display: inline-block;
+    border-bottom: 1px solid #ccc;
+    box-sizing: border-box;
+}
+
+button {
+    background-color: #4CAF50;
+    color: white;
+    padding: 14px 20px;
+    margin: 8px 0;
+    border: none;
+    cursor: pointer;
+    width: 100%;
+}
+
+.cancelbtn {
+    width: auto;
+    padding: 10px 18px;
+    background-color: #f44336;
+}
+
+.imgcontainer {
+    text-align: center;
+    margin: 1.25em 0 12px 0;
+}
+
+img.avatar {
+    width: 40%;
+    border-radius: 50%;
+}
+
+.container {
+    padding: 1.025em;
+}
+
+span.psw {
+    float: right;
+    padding-top: 1.025em;
+}
+
+/* Change styles for span and cancel button on extra small screens */
+@media screen and (max-width: 300px) {
+    span.psw {
+       display: block;
+       float: none;
+    }
+    .w3-wrap { width: 100%;  padding: 0em}
+
+    .cancelbtn {
+       width: 100%;
+    }
+}
Index: trunk/templates/DefaultTheme/css/media.css
===================================================================
--- trunk/templates/DefaultTheme/css/media.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/media.css	(revision 2)
@@ -0,0 +1,3 @@
+/**
+ *
+ */
\ No newline at end of file
Index: trunk/templates/DefaultTheme/css/modalbox.css
===================================================================
--- trunk/templates/DefaultTheme/css/modalbox.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/modalbox.css	(revision 2)
@@ -0,0 +1,177 @@
+
+
+.modal {
+  bottom: 0;
+  display: none;
+  left: 0;
+  outline: 0 none;
+  overflow: hidden;
+  position: fixed;
+  right: 0;
+  top: 0;
+  background: rgba(0, 0, 0, 0.6) none repeat scroll 0 0;
+  z-index: 1050;
+}
+/*
+*/
+.modal-body iframe { min-height: 280px; }
+.modal-body {  width:100%; height:100%; }
+.modal-body iframe {  width:100%; height:100%; border:0;overflow:hidden }
+
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: hidden;
+}
+.modal.in .modal-dialog {
+  transform: translate(0px, 0px);
+}
+
+.modal-dialog {
+  margin: 30px auto;
+  width: 600px;
+}
+.modal-dialog {
+  margin: 10px;
+  position: relative;
+  width: auto;
+}
+.modal-title {
+  line-height: 1.42857;
+  margin: 0;
+  height: 2.525em;
+  vertical-align: middle;
+  background: rgba(0, 0, 0, 0) linear-gradient(#CCE2EE, #1B4760 ) repeat scroll 0 0;
+}
+h4.modal-title {
+  font-size :1.5em;
+  color: #24515F;
+  margin: 0.225em 0;
+  padding: 0.225em 1.125em;
+}
+/*
+*/
+.modal-content {
+  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+  background-color: #EEEDED;
+}
+.modal-content {
+  border-radius: 6px;
+  background-clip: padding-box;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  outline: 0 none;
+  white-space: nowrap;
+}
+.modal-footer {
+  border-top: 1px solid #e5e5e5;
+  padding: 0.625em 1.925em;
+  text-align: right;
+  background: rgba(0, 0, 0, 0) linear-gradient(#1B4760 , #CCE2EE) repeat scroll 0 0;
+}
+#customAlert-overlay,
+#customConfirm-overlay { display: none; opacity: 0.5; position: fixed; top: 0px; left: 0px; width: 100vw; height: 100vh; z-index: 99999; background: #000000; }
+
+.close { font-size: 1.225em; background: #215A7A; color: #FFFFFF !important; line-height: 2.025em; position: absolute; right: -12px; text-align: center; top: -10px; width: 2.025em; text-decoration: none; font-weight: bold; -webkit-border-radius: 1.925em; -moz-border-radius: 1.925em; border-radius: 1.925em; -moz-box-shadow: 1px 1px 3px #000000; -webkit-box-shadow: 1px 1px 3px #000000; box-shadow: 1px 1px 3px #000000; }
+.close:hover { background: #FF1100; }
+.noborder {
+-webkit-border-radius: 0em;
+-moz-border-radius: 0em;
+border-radius: 0em;
+}
+/*-------------------------------------------------------------------------------------*/
+#delete-error-log { }
+/* The Modal (background) */
+.info-modal {
+    display: none; /* Hidden by default */
+    position: fixed; /* Stay in place */
+    z-index: 1; /* Sit on top */
+    padding-top: 50px; /* Location of the box */
+    left: 0;
+    top: 0;
+    width: 100%; /* Full width */
+    height: 100%; /* Full height */
+    overflow: auto; /* Enable scroll if needed */
+    background-color: rgb(0,0,0); /* Fallback color */
+    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
+}
+
+/* Modal Content */
+.info-modal-content {
+    position: relative;
+    background-color: #fefefe;
+    margin: 2% auto;
+    padding: 0;
+    border: 1px solid #888;
+    width: 70%;
+   /* max-height: 40.225em;*/
+    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
+    -webkit-animation-name: animatetop;
+    -webkit-animation-duration: 0.4s;
+    animation-name: animatetop;
+    animation-duration: 0.4s
+}
+
+/* Add Animation */
+@-webkit-keyframes animatetop {
+    from {top:-300px; opacity:0}
+    to {top:0; opacity:1}
+}
+
+@keyframes animatetop {
+    from {top:-300px; opacity:0}
+    to {top:0; opacity:1}
+}
+
+/* The Close Button */
+.close {
+    color: white;
+    float: right;
+    font-size: 28px;
+    font-weight: bold;
+    border: 0 none;
+}
+
+#delete_php_error-log,
+.close:hover,
+.close:focus {
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+}
+.info-modal-footer,
+.info-modal-header {
+  line-height: 4.5;
+  padding: 0 1.225em;
+  background-color: #5C9AB8;
+  color: #ffffff;
+}
+
+.info-modal-header {line-height: 2.295;}
+
+
+.info-modal-body {
+  padding: 2px 16px;
+  border: 1px solid #4B7F98;
+-webkit-box-shadow: inset 2px 2px 4px -4px rgba(44,95,115,1);
+-moz-box-shadow: inset 2px 2px 4px -4px rgba(44,95,115,1);
+box-shadow: inset 2px 2px 4px -4px rgba(44,95,115,1);
+
+}
+
+.info-modal-body iframe { width: 100%; height: 20.225em; border: 0 none; }
+.gradient-top { background: rgba(0, 0, 0, 0) linear-gradient(#175476, #ffffff) repeat scroll 0 0; }
+.gradient-bottom { background: rgba(0, 0, 0, 0) linear-gradient(#ffffff, #175476) repeat scroll 0 0; }
+
+.info-modal-header { background: #538199 none repeat scroll 0 0; padding-top: 0.1225em; }
+.info-modal-footer { background: #538199 none repeat scroll 0 0; }
+.info-modal-header h2 { color: #EEEEEE; font-weight: normal; }
+/*-------------------------------------------------------------------------------------*/
+
+#info-modal-body {
+ max-height: 20.625em;
+ min-height: 10.625em;
+ margin: 0;
+ padding: 0.525em 1.525em;
+ overflow: scroll;
+ /*width: 100%;*/
+ }
+
Index: trunk/templates/DefaultTheme/css/nav.css
===================================================================
--- trunk/templates/DefaultTheme/css/nav.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/nav.css	(revision 2)
@@ -0,0 +1,78 @@
+
+#main-container .menu {
+    font-size: 1.025em;
+}
+#main-container .menu ul, #main-container .menu li {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+    margin-bottom: 5px;
+}
+#main-container .menu ul ul {
+    padding-left: 10px;
+}
+#main-container .menu a:link, #main-container .menu a:visited, #main-container .menu a:active,
+#main-container .menu a:hover {
+    display: block;
+    padding: 6px;
+    text-decoration: none;
+}
+#main-container .menu-default a:link, #main-container .menu-default a:visited,
+#main-container .menu-default a:active {
+    border-bottom: 1px dashed #999;
+}
+#main-container .menu-default a:hover {
+    border-bottom: 0px dashed #333;
+    background: #BEBFBF;
+    color: #306082;
+}
+
+#main-container .menu-current  {
+    border-bottom: 1px dashed #999;
+    font-weight:bold;
+    background: #355D84;
+    color: #FFF;
+}
+
+#main-container .menu fieldset {
+   /* border: 0px solid #D0D0D0;*/
+    margin-top: 20px;
+    margin-bottom: 5px;
+    text-align: center;
+    padding-bottom: 3px;
+}
+
+#main-container .menu legend {
+    color: #603;
+    text-transform: uppercase;
+    font-weight: bold;
+    text-align: center;
+}
+#main-container .menu fieldset label{
+  min-width: 6.5em;
+}
+#main-container .menu input {
+    text-transform: uppercase;
+    font-size: 0.625em;
+    margin: 5px 0px 1px 0px;
+    width: 100px;
+}
+
+#main-container .content {
+    padding: 4px 10px 14px 10px;
+    clear: right;
+}
+#main-container .footer {
+    background-color: #FFF;
+    clear: both;
+    height: 20px;
+    font-size: 0.825em;
+    color: #666;
+    text-align: center;
+    line-height: 18px;
+}
+ .powered_by {
+    text-align: center;
+    font-size: 0.625em;
+    padding-top: 2px;
+}
Index: trunk/templates/DefaultTheme/css/navigation.css
===================================================================
--- trunk/templates/DefaultTheme/css/navigation.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/navigation.css	(revision 2)
@@ -0,0 +1,11 @@
+
+.menu { margin :0; padding : 0.525em ; background : none #215A7A; background-repeat :repeat-x; overflow: hidden; white-space: nowrap; }
+.menu li { padding-right : 0.1225em; list-style-type :none; display :inline; }
+.menu a, .menu a:link, .menu a:active, .menu a:visited { border-bottom :0; padding : 0.425em 1.225em; color :#ffffff; }
+.current a, .current a:link, .current a:active, .current a:visited { background : none #217DA1; background-repeat :repeat-x; color :#ffffff; }
+.current a:hover,
+.menu a:hover { color :#fff; background : none #217DA1; background-repeat :repeat-x; text-decoration :none; }
+
+.menu li,.current a,.menu a, .menu a:link, .menu a:active, .menu a:visited, .menu a:hover  {
+ border-radius: 0.325em;
+}
Index: trunk/templates/DefaultTheme/css/normalize.css
===================================================================
--- trunk/templates/DefaultTheme/css/normalize.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/normalize.css	(revision 2)
@@ -0,0 +1,431 @@
+/*! normalize.css 2011-09-22T17:42 UTC - http://github.com/necolas/normalize.css */
+
+/* =============================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/*
+ * Corrects block display not defined in IE6/7/8/9 & FF3
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+    display: block;
+}
+
+/*
+ * Corrects inline-block display not defined in IE6/7/8/9 & FF3
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+    *display: inline;
+    *zoom: 1;
+}
+
+/*
+ * Prevents modern browsers from displaying 'audio' without controls
+ */
+
+audio:not([controls]) {
+    display: none;
+}
+
+/*
+ * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
+ * Known issue: no IE6 support
+ */
+
+[hidden] {
+    display: none;
+}
+
+
+/* =============================================================================
+   Base
+   ========================================================================== */
+
+/*
+ * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
+ *    http://clagnut.com/blog/348/#c790
+ * 2. Keeps page centred in all browsers regardless of content height
+ * 3. Prevents iOS text size adjust after orientation change, without disabling user zoom
+ *    www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
+ */
+
+html {
+    font-size: 100%; /* 1 */
+    overflow-y: scroll; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 3 */
+    -ms-text-size-adjust: 100%; /* 3 */
+}
+
+/*
+ * Addresses margins handled incorrectly in IE6/7
+ */
+
+body {
+    margin: 0;
+}
+
+/* 
+ * Addresses font-family inconsistency between 'textarea' and other form elements.
+ */
+
+body,
+button,
+input,
+select,
+textarea {
+    font-family: sans-serif;
+}
+
+
+/* =============================================================================
+   Links
+   ========================================================================== */
+
+a {
+    color: #00e;
+}
+
+a:visited {
+    color: #551a8b;
+}
+
+/*
+ * Addresses outline displayed oddly in Chrome
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/*
+ * Improves readability when focused and also mouse hovered in all browsers
+ * people.opera.com/patrickl/experiments/keyboard/test
+ */
+
+a:hover,
+a:active {
+    outline: 0;
+}
+
+
+/* =============================================================================
+   Typography
+   ========================================================================== */
+
+/*
+ * Addresses styling not present in IE7/8/9, S5, Chrome
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/*
+ * Addresses style set to 'bolder' in FF3/4, S4/5, Chrome
+*/
+
+b, 
+strong { 
+    font-weight: bold; 
+}
+
+blockquote {
+    margin: 1em 40px;
+}
+
+/*
+ * Addresses styling not present in S5, Chrome
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/*
+ * Addresses styling not present in IE6/7/8/9
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/*
+ * Corrects font family set oddly in IE6, S4/5, Chrome
+ * en.wikipedia.org/wiki/User:Davidgothberg/Test59
+ */
+
+pre,
+code,
+kbd,
+samp {
+    font-family: monospace, serif;
+    _font-family: 'courier new', monospace;
+    font-size: 1em;
+}
+
+/*
+ * Improves readability of pre-formatted text in all browsers
+ */
+
+pre {
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+/*
+ * 1. Addresses CSS quotes not supported in IE6/7
+ * 2. Addresses quote property not supported in S4
+ */
+
+/* 1 */
+
+q {
+    quotes: none;
+}
+
+/* 2 */
+
+q:before,
+q:after {
+    content: '';
+    content: none;
+}
+
+small {
+    font-size: 75%;
+}
+
+/*
+ * Prevents sub and sup affecting line-height in all browsers
+ * gist.github.com/413930
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+
+/* =============================================================================
+   Lists
+   ========================================================================== */
+
+ul,
+ol {
+    margin: 1em 0;
+    padding: 0 0 0 40px;
+}
+
+dd {
+    margin: 0 0 0 40px;
+}
+
+nav ul,
+nav ol {
+    list-style: none;
+    list-style-image: none;
+}
+
+
+/* =============================================================================
+   Embedded content
+   ========================================================================== */
+
+/*
+ * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
+ * 2. Improves image quality when scaled in IE7
+ *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
+ */
+
+img {
+    border: 0; /* 1 */
+    -ms-interpolation-mode: bicubic; /* 2 */
+}
+
+/*
+ * Corrects overflow displayed oddly in IE9 
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+
+/* =============================================================================
+   Figures
+   ========================================================================== */
+
+/*
+ * Addresses margin not present in IE6/7/8/9, S5, O11
+ */
+
+figure {
+    margin: 0;
+}
+
+
+/* =============================================================================
+   Forms
+   ========================================================================== */
+
+/*
+ * Corrects margin displayed oddly in IE6/7
+ */
+
+form {
+    margin: 0;
+}
+
+/*
+ * Define consistent border, margin, and padding
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/*
+ * 1. Corrects color not being inherited in IE6/7/8/9
+ * 2. Corrects alignment displayed oddly in IE6/7
+ */
+
+legend {
+    border: 0; /* 1 */
+    *margin-left: -7px; /* 2 */
+}
+
+/*
+ * 1. Corrects font size not being inherited in all browsers
+ * 2. Addresses margins set differently in IE6/7, FF3/4, S5, Chrome
+ * 3. Improves appearance and consistency in all browsers
+ */
+
+button,
+input,
+select,
+textarea {
+    font-size: 100%; /* 1 */
+    margin: 0; /* 2 */
+    vertical-align: baseline; /* 3 */
+    *vertical-align: middle; /* 3 */
+}
+
+/*
+ * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
+ */
+
+button,
+input {
+    line-height: normal; /* 1 */
+}
+
+/*
+ * 1. Improves usability and consistency of cursor style between image-type 'input' and others
+ * 2. Corrects inability to style clickable 'input' types in iOS
+ * 3. Corrects inner spacing displayed oddly in IE7 without effecting normal text inputs
+ *    Known issue: inner spacing remains in IE6
+ */
+
+button,
+input[type="button"], 
+input[type="reset"], 
+input[type="submit"] {
+    cursor: pointer; /* 1 */
+    -webkit-appearance: button; /* 2 */
+    *overflow: visible;  /* 3 */
+}
+
+/*
+ * 1. Addresses box sizing set to content-box in IE8/9
+ * 2. Addresses excess padding in IE8/9
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/*
+ * 1. Addresses appearance set to searchfield in S5, Chrome
+ * 2. Addresses box sizing set to border-box in S5, Chrome (include -moz to future-proof)
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/*
+ * Corrects inner padding displayed oddly in S5, Chrome on OSX
+ */
+
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/*
+ * Corrects inner padding and border displayed oddly in FF3/4
+ * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/*
+ * 1. Removes default vertical scrollbar in IE6/7/8/9
+ * 2. Improves readability and alignment in all browsers
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+
+/* =============================================================================
+   Tables
+   ========================================================================== */
+
+/* 
+ * Remove most spacing between table cells
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
Index: trunk/templates/DefaultTheme/css/pages.css
===================================================================
--- trunk/templates/DefaultTheme/css/pages.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/pages.css	(revision 2)
@@ -0,0 +1,89 @@
+div.pages_list { width: 100%; font-size: 0.7em; }
+table.pages_list,
+table.pages_view,
+table.pages_section { width: 100%; margin: 0 auto; border: 0; border-spacing: 0px; line-height: 1.8; border-collapse: collapse; background: transparent; }
+table.pages_list { font-size: 1.425em; }
+table.pages_view { font-size: 1.425em; }
+table.pages_section { font-size: 1.125em; }
+table.pages_list thead tr,
+table.pages_section thead tr { background: #538199; color: #FFFFFF; line-height: 1.925em; }
+table.header_list_page_title,.list_page_title { text-align: left; width: 40%; color: #287486; }
+table.pages_list thead th:first-child,
+table.pages_list tbody td:first-child { padding: 0 0.2525em; text-align: left; }
+table.pages_list thead th:first-child { width: 35.525em; min-width: 35.525em; }
+table.pages_list tbody td:nth-child(2) { text-align: left; }
+table.pages_list tbody td:nth-child(3) { padding-bottom: 0.3525em; }
+table.pages_list tbody td:last-child { padding: 0 0.4525em; text-align: left; }
+table.pages_list tbody td div { margin: 0.4525em auto; padding: 0.3525em 0; height: 1.625em; }
+table.pages_list tbody tr:nth-child(even) { background: #C9DDE2; }
+table.pages_list tbody tr:hover { background: #FBFCE0; }
+table.pages_view tbody td a span.modify_link { padding-top: 0.525em; display: inline; color: #1D7EA4; font-weight: normal; }
+table.pages_list li table.pages_view { line-height: 1.925em; white-space: nowrap; }
+table.pages_list > li:nth-child(even) { background: #99C1CA; }
+table.pages_list li table.pages_view:hover { background: #FBFCE0; }
+.header_list_block { width: 180px; text-align: left; }
+.header_list_page_id { width: 2.125em; padding-right: 1.125em; text-align: right; }
+.list_actions { width: 1.725em; text-align: center; }
+.header_list_actions { width: 175px; text-align: left; }
+.sections_header { width: 100%; margin-bottom: 10px; border: none; height: 50px; background: #F0F0F0; }
+.sections_header td { padding: 5px; }
+.list_menu_title { width: auto; }
+.sections_list { padding-left: 10px; font-weight: bold; }
+.value_page_code { width: 240px; color: #006400; font-weight: 400; }
+
+table.pages_section tbody tr { line-height: 1.925; white-space: nowrap; }
+table.pages_section tbody td:first-child { padding: 0 0.2525em; text-align: left; }
+table.pages_section tbody tr.sectionrow:nth-child(even) { background: #DBF0F0; }
+table.pages_section tbody td:last-child { padding: 0 0.4525em; }
+table.pages_section tbody td.modify_link { padding-top: 0.525em; display: inline; vertical-align: middle; color: #1D7EA4; font-weight: bold; }
+table.pages_section tbody tr.sectionrow:hover { background: #FBFCE0; }
+
+img.page_list_rights { border: none; margin-right: 5px; float: left; margin-top: 2px; margin-bottom: 2px; }
+.form_submit .left, .header_list_menu_title, .list_menu_title, .header_list_type { text-align: left; padding: 0 0.525em; }
+.content input { font-size: 0.825em; }
+.list_section_id, .list_page_id, .header_list_section_id { width: 3.3525em; text-align: right; padding: 0 0.525em; }
+.list_page_code, .list_page_language { width: 240px; }
+.header_title, .sections_list table, .setting_value input, .setting_value select, .setting_value textarea, .value_input input, .value_input text, .value_input select, .form_submit, .input_full { width: 100%; }
+.header_list_pubdate_start, .header_list_pubdate_end, .list_pubdate_start, .list_pubdate_end { width: 200px; text-align: left; white-space: nowrap; }
+.pages_tree { overflow: hidden; padding: 0.925em; }
+.pages_tree table.pages_add td:first-child { color: #0D4B6E; text-align: right; font-weight: bold; padding-right: 0.525em; }
+li:nth-child(odd) > table.pages_view { background: #E8E8E8; }
+/*
+table.pages_view li:nth-child(odd) { background: #99C1CA; }
+.pages_list .icon_col td img { border-style :none; float :left; padding-right :7px; display :block; }
+.pages_list ul { margin :0; padding :0px; font-weight :normal; }
+.pages_list ul li { margin :2px 0; padding :0px; list-style-type :none; }
+.page_list_show li { display :block; }
+*/
+.pages_list table td, table.pages_view td { padding: 3px; }
+.header_list_sections_actions { width: 30px; text-align: left; }
+table.header-info { border-collapse: separate; margin-bottom: 10px; width: 100%; }
+.header-modify-page { float: left; width: 22.225em; }
+.header-page_id { float: left; width: 2.225em; white-space: nowrap; padding-top: 1.225em; }
+.header-current-page { float: right; text-align: right; width: 50%; }
+/*
+.list_page_title,
+.header_list_page_title { display: none; }
+*/
+/* pages_settings */
+div table.pages-settings { width: 100%; white-space: nowrap; border-collapse: collapse; table-layout: fixed; }
+
+.pages-settings,
+.pages-settings tr { line-height: 2.5525em; }
+div table.table.pages-settings tr.submit { line-height: 3.2525em; }
+div table.table.pages-settings thead tr th:first-child,
+div table.table.pages-settings tbody tr td:first-child { width: 49%; padding-right: 0.8525em; text-align: right;  }
+div table.table.pages-settings thead tr th:nth-child(2),
+div table.table.pages-settings tbody tr td:nth-child(2) { width: 100%; padding-right: 0.8525em;  }
+
+div table.access li { line-height: 1.8525em; }
+div table.table.pages-settings tbody tr td label,
+div table.access.pages-settings tbody tr td label.access { color: #1C517A; font-weight: bold; }
+div table.pages-settings tbody tr { line-height: 2.525; }
+div table.pages-settings tbody tr td span {  }
+tr.border { margin: 1.8525em 0; border-top: #C3C3C3 solid 2px; border-bottom: #C3C3C3 solid 2px; line-height: 3.525em !important; }
+
+div table.access li input[type="text"] { height: 1.925em; vertical-align: top; }
+div table.access li input[type="checkbox"] { height: 1.225em; width: 1.225em !important; vertical-align: top; }
+div table.access li input[type="radio"] {padding: 0;vertical-align: top;}
+
Index: trunk/templates/DefaultTheme/css/preferences.css
===================================================================
--- trunk/templates/DefaultTheme/css/preferences.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/preferences.css	(revision 2)
@@ -0,0 +1,18 @@
+#language, #timezone, #date_format, #time_format {
+  width: 100%;
+}
+
+#display_name, #username, #email, #new_password_1, #new_password_2, #current_password {
+  width: 99%;
+}
+
+#display_name, #username, #email, #new_password_1, #new_password_2, #current_password {
+  min-width: 250px;
+}
+form#preferences_save div div label {
+  float: right;
+  padding-right: 0.525em;
+  font-weight: bold;
+  color: #0D4B6E;
+}
+form#preferences_save div#username { width :100%; background-color :#e9e9e9; min-width : 250px; border :0px groove #6799c4; text-align :left; font-weight :bold; margin :0; line-height: 1.1; }
Index: trunk/templates/DefaultTheme/css/prism.css
===================================================================
--- trunk/templates/DefaultTheme/css/prism.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/prism.css	(revision 2)
@@ -0,0 +1,3 @@
+ /* prism okaidia | ocodia */
+
+code[class*=language-],pre[class*=language-]{color:#f8f8f2;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#859DB5}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/css/settings.css
===================================================================
--- trunk/templates/DefaultTheme/css/settings.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/settings.css	(revision 2)
@@ -0,0 +1,105 @@
+/**
+ *
+ */
+@import url( "chmod.css");
+.settings_table { width: 100%;}
+div.settings_table {
+  margin: 0 auto;
+  width: 90%;
+}
+.settings_table td { text-align :left; vertical-align :top; }
+.settings_table td.setting_value { width :80%; }
+.settings_table td.setting_value textarea { height : 8.225em; }
+.settings_table td.setting_name {
+  width :22%;
+  min-width :231px;
+  max-width :231px;
+  color: #0d4b6e;
+  text-align: right;
+  font-weight: bold;
+  padding-right: 0.525em;
+  }
+
+#file_mode input, #dir_mode input { color: #205979; }
+
+.header_title, .setting_value input, .setting_value select, .setting_value textarea, .value_input input, .value_input text, .value_input select, .form_submit, .input_full {
+  width: 100%;
+}
+.settings_table tr {
+  white-space: normal;
+  line-height: 2.125em;
+}
+
+h4, .warning { margin :0 auto; }
+div.mbox { margin :0 auto; }
+
+div.mbox select,
+div.mbox textarea,
+div.mbox input { display :block; float :left; }
+
+div.mbox label {
+color: #0d4b6e;
+font-weight: bold;
+min-width: 200px;
+padding-right: 0.525em;
+text-align: right;
+width: 20%;
+padding-right :5px;
+ display :block;
+}
+
+.settings_table p.note {
+  line-height: 1.4em; margin: auto; font-size: 1.025em;
+}
+
+.setting_value_permissions dl {
+ /* min-width: 60.225em!important ;*/
+}
+form.settings_table label.setting_name {
+  clear: left;
+  color: #333333;
+  display: block;
+  float: left;
+  font-size: 1.025em;
+  font-weight: bold;
+  margin: 3px auto;
+  min-height: 1.9em;
+  padding-right: 5px;
+  vertical-align: top;
+  width: 30.115em;
+}
+
+form#Settings {
+}
+
+form#Settings fieldset legend h2 {
+font-size:1.255em;
+}
+
+form#Settings dd {
+margin-left:0.525em;
+}
+
+form#Settings dd select {
+font-size:inherit;
+min-width:21.125em;
+}
+
+form#Settings dd textarea {
+overflow:auto;
+width:100%;
+}
+.reformed-form dl {
+  margin: auto;
+}
+.chmod h4 {
+  font-size: 1.225em;
+  background: #215a7a;
+  line-height: 1.925em;
+  padding-left: 0.525em;
+  color: #fff;
+}
+.inline-columns > div {
+  float: left;
+  width: 50%;
+}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/css/start.css
===================================================================
--- trunk/templates/DefaultTheme/css/start.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/start.css	(revision 2)
@@ -0,0 +1,5 @@
+span.title { display :block; }
+.section { margin-top :10px; padding :0px; border :1px solid #999999; font-size :1em; width :100%; background-color :#fdfdfd; height :95px; }
+div#start-block { margin : auto 1%; }
+div#start-block ul { padding : 0;  width :100%; margin: 1.525em;}
+div#start-block li { list-style-type :none; display :inline; float :left; width :47%; margin :0 1%; }
Index: trunk/templates/DefaultTheme/css/sweetalert.css
===================================================================
--- trunk/templates/DefaultTheme/css/sweetalert.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/sweetalert.css	(revision 2)
@@ -0,0 +1,932 @@
+body.stop-scrolling {
+  height: 100%;
+  overflow: hidden; }
+
+.sweet-overlay {
+  background-color: black;
+  /* IE8 */
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+  /* IE8 */
+  background-color: rgba(0, 0, 0, 0.4);
+  position: fixed;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: none;
+  z-index: 10000; }
+
+.sweet-alert {
+  background-color: white;
+  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  width: 478px;
+  padding: 17px;
+  border-radius: 5px;
+  text-align: center;
+  position: fixed;
+  left: 50%;
+  top: 50%;
+  margin-left: -256px;
+  margin-top: -200px;
+  overflow: hidden;
+  display: none;
+  z-index: 99999; }
+  @media all and (max-width: 540px) {
+    .sweet-alert {
+      width: auto;
+      margin-left: 0;
+      margin-right: 0;
+      left: 15px;
+      right: 15px; } }
+  .sweet-alert h2 {
+    color: #575757;
+    font-size: 30px;
+    text-align: center;
+    font-weight: 600;
+    text-transform: none;
+    position: relative;
+    margin: 25px 0;
+    padding: 0;
+    line-height: 40px;
+    display: block; }
+  .sweet-alert p {
+    color: #797979;
+    font-size: 16px;
+    text-align: center;
+    font-weight: 300;
+    position: relative;
+    text-align: inherit;
+    float: none;
+    margin: 0;
+    padding: 0;
+    line-height: normal; }
+  .sweet-alert fieldset {
+    border: none;
+    position: relative; }
+  .sweet-alert .sa-error-container {
+    background-color: #f1f1f1;
+    margin-left: -17px;
+    margin-right: -17px;
+    overflow: hidden;
+    padding: 0 10px;
+    max-height: 0;
+    webkit-transition: padding 0.15s, max-height 0.15s;
+    transition: padding 0.15s, max-height 0.15s; }
+    .sweet-alert .sa-error-container.show {
+      padding: 10px 0;
+      max-height: 100px;
+      webkit-transition: padding 0.2s, max-height 0.2s;
+      transition: padding 0.25s, max-height 0.25s; }
+    .sweet-alert .sa-error-container .icon {
+      display: inline-block;
+      width: 24px;
+      height: 24px;
+      border-radius: 50%;
+      background-color: #ea7d7d;
+      color: white;
+      line-height: 24px;
+      text-align: center;
+      margin-right: 3px; }
+    .sweet-alert .sa-error-container p {
+      display: inline-block; }
+  .sweet-alert .sa-input-error {
+    position: absolute;
+    top: 29px;
+    right: 26px;
+    width: 20px;
+    height: 20px;
+    opacity: 0;
+    -webkit-transform: scale(0.5);
+    transform: scale(0.5);
+    -webkit-transform-origin: 50% 50%;
+    transform-origin: 50% 50%;
+    -webkit-transition: all 0.1s;
+    transition: all 0.1s; }
+    .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {
+      content: "";
+      width: 20px;
+      height: 6px;
+      background-color: #f06e57;
+      border-radius: 3px;
+      position: absolute;
+      top: 50%;
+      margin-top: -4px;
+      left: 50%;
+      margin-left: -9px; }
+    .sweet-alert .sa-input-error::before {
+      -webkit-transform: rotate(-45deg);
+      transform: rotate(-45deg); }
+    .sweet-alert .sa-input-error::after {
+      -webkit-transform: rotate(45deg);
+      transform: rotate(45deg); }
+    .sweet-alert .sa-input-error.show {
+      opacity: 1;
+      -webkit-transform: scale(1);
+      transform: scale(1); }
+  .sweet-alert input {
+    width: 100%;
+    box-sizing: border-box;
+    border-radius: 3px;
+    border: 1px solid #d7d7d7;
+    height: 43px;
+    margin-top: 10px;
+    margin-bottom: 17px;
+    font-size: 18px;
+    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);
+    padding: 0 12px;
+    display: none;
+    -webkit-transition: all 0.3s;
+    transition: all 0.3s; }
+    .sweet-alert input:focus {
+      outline: none;
+      box-shadow: 0px 0px 3px #c4e6f5;
+      border: 1px solid #b4dbed; }
+      .sweet-alert input:focus::-moz-placeholder {
+        transition: opacity 0.3s 0.03s ease;
+        opacity: 0.5; }
+      .sweet-alert input:focus:-ms-input-placeholder {
+        transition: opacity 0.3s 0.03s ease;
+        opacity: 0.5; }
+      .sweet-alert input:focus::-webkit-input-placeholder {
+        transition: opacity 0.3s 0.03s ease;
+        opacity: 0.5; }
+    .sweet-alert input::-moz-placeholder {
+      color: #bdbdbd; }
+    .sweet-alert input:-ms-input-placeholder {
+      color: #bdbdbd; }
+    .sweet-alert input::-webkit-input-placeholder {
+      color: #bdbdbd; }
+  .sweet-alert.show-input input {
+    display: block; }
+  .sweet-alert .sa-confirm-button-container {
+    display: inline-block;
+    position: relative; }
+  .sweet-alert .la-ball-fall {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    margin-left: -27px;
+    margin-top: 4px;
+    opacity: 0;
+    visibility: hidden; }
+  .sweet-alert button {
+    background-color: #8CD4F5;
+    color: white;
+    border: none;
+    box-shadow: none;
+    font-size: 17px;
+    font-weight: 500;
+    -webkit-border-radius: 4px;
+    border-radius: 5px;
+    padding: 10px 32px;
+    margin: 26px 5px 0 5px;
+    cursor: pointer; }
+    .sweet-alert button:focus {
+      outline: none;
+      box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }
+    .sweet-alert button:hover {
+      background-color: #7ecff4; }
+    .sweet-alert button:active {
+      background-color: #5dc2f1; }
+    .sweet-alert button.cancel {
+      background-color: #C1C1C1; }
+      .sweet-alert button.cancel:hover {
+        background-color: #b9b9b9; }
+      .sweet-alert button.cancel:active {
+        background-color: #a8a8a8; }
+      .sweet-alert button.cancel:focus {
+        box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }
+    .sweet-alert button[disabled] {
+      opacity: .6;
+      cursor: default; }
+    .sweet-alert button.confirm[disabled] {
+      color: transparent; }
+      .sweet-alert button.confirm[disabled] ~ .la-ball-fall {
+        opacity: 1;
+        visibility: visible;
+        transition-delay: 0s; }
+    .sweet-alert button::-moz-focus-inner {
+      border: 0; }
+  .sweet-alert[data-has-cancel-button=false] button {
+    box-shadow: none !important; }
+  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {
+    padding-bottom: 40px; }
+  .sweet-alert .sa-icon {
+    width: 80px;
+    height: 80px;
+    border: 4px solid gray;
+    -webkit-border-radius: 40px;
+    border-radius: 40px;
+    border-radius: 50%;
+    margin: 20px auto;
+    padding: 0;
+    position: relative;
+    box-sizing: content-box; }
+    .sweet-alert .sa-icon.sa-error {
+      border-color: #F27474; }
+      .sweet-alert .sa-icon.sa-error .sa-x-mark {
+        position: relative;
+        display: block; }
+      .sweet-alert .sa-icon.sa-error .sa-line {
+        position: absolute;
+        height: 5px;
+        width: 47px;
+        background-color: #F27474;
+        display: block;
+        top: 37px;
+        border-radius: 2px; }
+        .sweet-alert .sa-icon.sa-error .sa-line.sa-left {
+          -webkit-transform: rotate(45deg);
+          transform: rotate(45deg);
+          left: 17px; }
+        .sweet-alert .sa-icon.sa-error .sa-line.sa-right {
+          -webkit-transform: rotate(-45deg);
+          transform: rotate(-45deg);
+          right: 16px; }
+    .sweet-alert .sa-icon.sa-warning {
+      border-color: #F8BB86; }
+      .sweet-alert .sa-icon.sa-warning .sa-body {
+        position: absolute;
+        width: 5px;
+        height: 47px;
+        left: 50%;
+        top: 10px;
+        -webkit-border-radius: 2px;
+        border-radius: 2px;
+        margin-left: -2px;
+        background-color: #F8BB86; }
+      .sweet-alert .sa-icon.sa-warning .sa-dot {
+        position: absolute;
+        width: 7px;
+        height: 7px;
+        -webkit-border-radius: 50%;
+        border-radius: 50%;
+        margin-left: -3px;
+        left: 50%;
+        bottom: 10px;
+        background-color: #F8BB86; }
+    .sweet-alert .sa-icon.sa-info {
+      border-color: #C9DAE1; }
+      .sweet-alert .sa-icon.sa-info::before {
+        content: "";
+        position: absolute;
+        width: 5px;
+        height: 29px;
+        left: 50%;
+        bottom: 17px;
+        border-radius: 2px;
+        margin-left: -2px;
+        background-color: #C9DAE1; }
+      .sweet-alert .sa-icon.sa-info::after {
+        content: "";
+        position: absolute;
+        width: 7px;
+        height: 7px;
+        border-radius: 50%;
+        margin-left: -3px;
+        top: 19px;
+        background-color: #C9DAE1; }
+    .sweet-alert .sa-icon.sa-success {
+      border-color: #A5DC86; }
+      .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {
+        content: '';
+        -webkit-border-radius: 40px;
+        border-radius: 40px;
+        border-radius: 50%;
+        position: absolute;
+        width: 60px;
+        height: 120px;
+        background: white;
+        -webkit-transform: rotate(45deg);
+        transform: rotate(45deg); }
+      .sweet-alert .sa-icon.sa-success::before {
+        -webkit-border-radius: 120px 0 0 120px;
+        border-radius: 120px 0 0 120px;
+        top: -7px;
+        left: -33px;
+        -webkit-transform: rotate(-45deg);
+        transform: rotate(-45deg);
+        -webkit-transform-origin: 60px 60px;
+        transform-origin: 60px 60px; }
+      .sweet-alert .sa-icon.sa-success::after {
+        -webkit-border-radius: 0 120px 120px 0;
+        border-radius: 0 120px 120px 0;
+        top: -11px;
+        left: 30px;
+        -webkit-transform: rotate(-45deg);
+        transform: rotate(-45deg);
+        -webkit-transform-origin: 0px 60px;
+        transform-origin: 0px 60px; }
+      .sweet-alert .sa-icon.sa-success .sa-placeholder {
+        width: 80px;
+        height: 80px;
+        border: 4px solid rgba(165, 220, 134, 0.2);
+        -webkit-border-radius: 40px;
+        border-radius: 40px;
+        border-radius: 50%;
+        box-sizing: content-box;
+        position: absolute;
+        left: -4px;
+        top: -4px;
+        z-index: 2; }
+      .sweet-alert .sa-icon.sa-success .sa-fix {
+        width: 5px;
+        height: 90px;
+        background-color: white;
+        position: absolute;
+        left: 28px;
+        top: 8px;
+        z-index: 1;
+        -webkit-transform: rotate(-45deg);
+        transform: rotate(-45deg); }
+      .sweet-alert .sa-icon.sa-success .sa-line {
+        height: 5px;
+        background-color: #A5DC86;
+        display: block;
+        border-radius: 2px;
+        position: absolute;
+        z-index: 2; }
+        .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
+          width: 25px;
+          left: 14px;
+          top: 46px;
+          -webkit-transform: rotate(45deg);
+          transform: rotate(45deg); }
+        .sweet-alert .sa-icon.sa-success .sa-line.sa-long {
+          width: 47px;
+          right: 8px;
+          top: 38px;
+          -webkit-transform: rotate(-45deg);
+          transform: rotate(-45deg); }
+    .sweet-alert .sa-icon.sa-custom {
+      background-size: contain;
+      border-radius: 0;
+      border: none;
+      background-position: center center;
+      background-repeat: no-repeat; }
+
+/*
+ * Animations
+ */
+@-webkit-keyframes showSweetAlert {
+  0% {
+    transform: scale(0.7);
+    -webkit-transform: scale(0.7); }
+  45% {
+    transform: scale(1.05);
+    -webkit-transform: scale(1.05); }
+  80% {
+    transform: scale(0.95);
+    -webkit-transform: scale(0.95); }
+  100% {
+    transform: scale(1);
+    -webkit-transform: scale(1); } }
+
+@keyframes showSweetAlert {
+  0% {
+    transform: scale(0.7);
+    -webkit-transform: scale(0.7); }
+  45% {
+    transform: scale(1.05);
+    -webkit-transform: scale(1.05); }
+  80% {
+    transform: scale(0.95);
+    -webkit-transform: scale(0.95); }
+  100% {
+    transform: scale(1);
+    -webkit-transform: scale(1); } }
+
+@-webkit-keyframes hideSweetAlert {
+  0% {
+    transform: scale(1);
+    -webkit-transform: scale(1); }
+  100% {
+    transform: scale(0.5);
+    -webkit-transform: scale(0.5); } }
+
+@keyframes hideSweetAlert {
+  0% {
+    transform: scale(1);
+    -webkit-transform: scale(1); }
+  100% {
+    transform: scale(0.5);
+    -webkit-transform: scale(0.5); } }
+
+@-webkit-keyframes slideFromTop {
+  0% {
+    top: 0%; }
+  100% {
+    top: 50%; } }
+
+@keyframes slideFromTop {
+  0% {
+    top: 0%; }
+  100% {
+    top: 50%; } }
+
+@-webkit-keyframes slideToTop {
+  0% {
+    top: 50%; }
+  100% {
+    top: 0%; } }
+
+@keyframes slideToTop {
+  0% {
+    top: 50%; }
+  100% {
+    top: 0%; } }
+
+@-webkit-keyframes slideFromBottom {
+  0% {
+    top: 70%; }
+  100% {
+    top: 50%; } }
+
+@keyframes slideFromBottom {
+  0% {
+    top: 70%; }
+  100% {
+    top: 50%; } }
+
+@-webkit-keyframes slideToBottom {
+  0% {
+    top: 50%; }
+  100% {
+    top: 70%; } }
+
+@keyframes slideToBottom {
+  0% {
+    top: 50%; }
+  100% {
+    top: 70%; } }
+
+.showSweetAlert[data-animation=pop] {
+  -webkit-animation: showSweetAlert 0.3s;
+  animation: showSweetAlert 0.3s; }
+
+.showSweetAlert[data-animation=none] {
+  -webkit-animation: none;
+  animation: none; }
+
+.showSweetAlert[data-animation=slide-from-top] {
+  -webkit-animation: slideFromTop 0.3s;
+  animation: slideFromTop 0.3s; }
+
+.showSweetAlert[data-animation=slide-from-bottom] {
+  -webkit-animation: slideFromBottom 0.3s;
+  animation: slideFromBottom 0.3s; }
+
+.hideSweetAlert[data-animation=pop] {
+  -webkit-animation: hideSweetAlert 0.2s;
+  animation: hideSweetAlert 0.2s; }
+
+.hideSweetAlert[data-animation=none] {
+  -webkit-animation: none;
+  animation: none; }
+
+.hideSweetAlert[data-animation=slide-from-top] {
+  -webkit-animation: slideToTop 0.4s;
+  animation: slideToTop 0.4s; }
+
+.hideSweetAlert[data-animation=slide-from-bottom] {
+  -webkit-animation: slideToBottom 0.3s;
+  animation: slideToBottom 0.3s; }
+
+@-webkit-keyframes animateSuccessTip {
+  0% {
+    width: 0;
+    left: 1px;
+    top: 19px; }
+  54% {
+    width: 0;
+    left: 1px;
+    top: 19px; }
+  70% {
+    width: 50px;
+    left: -8px;
+    top: 37px; }
+  84% {
+    width: 17px;
+    left: 21px;
+    top: 48px; }
+  100% {
+    width: 25px;
+    left: 14px;
+    top: 45px; } }
+
+@keyframes animateSuccessTip {
+  0% {
+    width: 0;
+    left: 1px;
+    top: 19px; }
+  54% {
+    width: 0;
+    left: 1px;
+    top: 19px; }
+  70% {
+    width: 50px;
+    left: -8px;
+    top: 37px; }
+  84% {
+    width: 17px;
+    left: 21px;
+    top: 48px; }
+  100% {
+    width: 25px;
+    left: 14px;
+    top: 45px; } }
+
+@-webkit-keyframes animateSuccessLong {
+  0% {
+    width: 0;
+    right: 46px;
+    top: 54px; }
+  65% {
+    width: 0;
+    right: 46px;
+    top: 54px; }
+  84% {
+    width: 55px;
+    right: 0px;
+    top: 35px; }
+  100% {
+    width: 47px;
+    right: 8px;
+    top: 38px; } }
+
+@keyframes animateSuccessLong {
+  0% {
+    width: 0;
+    right: 46px;
+    top: 54px; }
+  65% {
+    width: 0;
+    right: 46px;
+    top: 54px; }
+  84% {
+    width: 55px;
+    right: 0px;
+    top: 35px; }
+  100% {
+    width: 47px;
+    right: 8px;
+    top: 38px; } }
+
+@-webkit-keyframes rotatePlaceholder {
+  0% {
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg); }
+  5% {
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg); }
+  12% {
+    transform: rotate(-405deg);
+    -webkit-transform: rotate(-405deg); }
+  100% {
+    transform: rotate(-405deg);
+    -webkit-transform: rotate(-405deg); } }
+
+@keyframes rotatePlaceholder {
+  0% {
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg); }
+  5% {
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg); }
+  12% {
+    transform: rotate(-405deg);
+    -webkit-transform: rotate(-405deg); }
+  100% {
+    transform: rotate(-405deg);
+    -webkit-transform: rotate(-405deg); } }
+
+.animateSuccessTip {
+  -webkit-animation: animateSuccessTip 0.75s;
+  animation: animateSuccessTip 0.75s; }
+
+.animateSuccessLong {
+  -webkit-animation: animateSuccessLong 0.75s;
+  animation: animateSuccessLong 0.75s; }
+
+.sa-icon.sa-success.animate::after {
+  -webkit-animation: rotatePlaceholder 4.25s ease-in;
+  animation: rotatePlaceholder 4.25s ease-in; }
+
+@-webkit-keyframes animateErrorIcon {
+  0% {
+    transform: rotateX(100deg);
+    -webkit-transform: rotateX(100deg);
+    opacity: 0; }
+  100% {
+    transform: rotateX(0deg);
+    -webkit-transform: rotateX(0deg);
+    opacity: 1; } }
+
+@keyframes animateErrorIcon {
+  0% {
+    transform: rotateX(100deg);
+    -webkit-transform: rotateX(100deg);
+    opacity: 0; }
+  100% {
+    transform: rotateX(0deg);
+    -webkit-transform: rotateX(0deg);
+    opacity: 1; } }
+
+.animateErrorIcon {
+  -webkit-animation: animateErrorIcon 0.5s;
+  animation: animateErrorIcon 0.5s; }
+
+@-webkit-keyframes animateXMark {
+  0% {
+    transform: scale(0.4);
+    -webkit-transform: scale(0.4);
+    margin-top: 26px;
+    opacity: 0; }
+  50% {
+    transform: scale(0.4);
+    -webkit-transform: scale(0.4);
+    margin-top: 26px;
+    opacity: 0; }
+  80% {
+    transform: scale(1.15);
+    -webkit-transform: scale(1.15);
+    margin-top: -6px; }
+  100% {
+    transform: scale(1);
+    -webkit-transform: scale(1);
+    margin-top: 0;
+    opacity: 1; } }
+
+@keyframes animateXMark {
+  0% {
+    transform: scale(0.4);
+    -webkit-transform: scale(0.4);
+    margin-top: 26px;
+    opacity: 0; }
+  50% {
+    transform: scale(0.4);
+    -webkit-transform: scale(0.4);
+    margin-top: 26px;
+    opacity: 0; }
+  80% {
+    transform: scale(1.15);
+    -webkit-transform: scale(1.15);
+    margin-top: -6px; }
+  100% {
+    transform: scale(1);
+    -webkit-transform: scale(1);
+    margin-top: 0;
+    opacity: 1; } }
+
+.animateXMark {
+  -webkit-animation: animateXMark 0.5s;
+  animation: animateXMark 0.5s; }
+
+@-webkit-keyframes pulseWarning {
+  0% {
+    border-color: #F8D486; }
+  100% {
+    border-color: #F8BB86; } }
+
+@keyframes pulseWarning {
+  0% {
+    border-color: #F8D486; }
+  100% {
+    border-color: #F8BB86; } }
+
+.pulseWarning {
+  -webkit-animation: pulseWarning 0.75s infinite alternate;
+  animation: pulseWarning 0.75s infinite alternate; }
+
+@-webkit-keyframes pulseWarningIns {
+  0% {
+    background-color: #F8D486; }
+  100% {
+    background-color: #F8BB86; } }
+
+@keyframes pulseWarningIns {
+  0% {
+    background-color: #F8D486; }
+  100% {
+    background-color: #F8BB86; } }
+
+.pulseWarningIns {
+  -webkit-animation: pulseWarningIns 0.75s infinite alternate;
+  animation: pulseWarningIns 0.75s infinite alternate; }
+
+@-webkit-keyframes rotate-loading {
+  0% {
+    transform: rotate(0deg); }
+  100% {
+    transform: rotate(360deg); } }
+
+@keyframes rotate-loading {
+  0% {
+    transform: rotate(0deg); }
+  100% {
+    transform: rotate(360deg); } }
+
+/* Internet Explorer 9 has some special quirks that are fixed here */
+/* The icons are not animated. */
+/* This file is automatically merged into sweet-alert.min.js through Gulp */
+/* Error icon */
+.sweet-alert .sa-icon.sa-error .sa-line.sa-left {
+  -ms-transform: rotate(45deg) \9; }
+
+.sweet-alert .sa-icon.sa-error .sa-line.sa-right {
+  -ms-transform: rotate(-45deg) \9; }
+
+/* Success icon */
+.sweet-alert .sa-icon.sa-success {
+  border-color: transparent\9; }
+
+.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
+  -ms-transform: rotate(45deg) \9; }
+
+.sweet-alert .sa-icon.sa-success .sa-line.sa-long {
+  -ms-transform: rotate(-45deg) \9; }
+
+/*!
+ * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)
+ * Copyright 2015 Daniel Cardoso <@DanielCardoso>
+ * Licensed under MIT
+ */
+.la-ball-fall,
+.la-ball-fall > div {
+  position: relative;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box; }
+
+.la-ball-fall {
+  display: block;
+  font-size: 0;
+  color: #fff; }
+
+.la-ball-fall.la-dark {
+  color: #333; }
+
+.la-ball-fall > div {
+  display: inline-block;
+  float: none;
+  background-color: currentColor;
+  border: 0 solid currentColor; }
+
+.la-ball-fall {
+  width: 54px;
+  height: 18px; }
+
+.la-ball-fall > div {
+  width: 10px;
+  height: 10px;
+  margin: 4px;
+  border-radius: 100%;
+  opacity: 0;
+  -webkit-animation: ball-fall 1s ease-in-out infinite;
+  -moz-animation: ball-fall 1s ease-in-out infinite;
+  -o-animation: ball-fall 1s ease-in-out infinite;
+  animation: ball-fall 1s ease-in-out infinite; }
+
+.la-ball-fall > div:nth-child(1) {
+  -webkit-animation-delay: -200ms;
+  -moz-animation-delay: -200ms;
+  -o-animation-delay: -200ms;
+  animation-delay: -200ms; }
+
+.la-ball-fall > div:nth-child(2) {
+  -webkit-animation-delay: -100ms;
+  -moz-animation-delay: -100ms;
+  -o-animation-delay: -100ms;
+  animation-delay: -100ms; }
+
+.la-ball-fall > div:nth-child(3) {
+  -webkit-animation-delay: 0ms;
+  -moz-animation-delay: 0ms;
+  -o-animation-delay: 0ms;
+  animation-delay: 0ms; }
+
+.la-ball-fall.la-sm {
+  width: 26px;
+  height: 8px; }
+
+.la-ball-fall.la-sm > div {
+  width: 4px;
+  height: 4px;
+  margin: 2px; }
+
+.la-ball-fall.la-2x {
+  width: 108px;
+  height: 36px; }
+
+.la-ball-fall.la-2x > div {
+  width: 20px;
+  height: 20px;
+  margin: 8px; }
+
+.la-ball-fall.la-3x {
+  width: 162px;
+  height: 54px; }
+
+.la-ball-fall.la-3x > div {
+  width: 30px;
+  height: 30px;
+  margin: 12px; }
+
+/*
+ * Animation
+ */
+@-webkit-keyframes ball-fall {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-145%);
+    transform: translateY(-145%); }
+  10% {
+    opacity: .5; }
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0); }
+  80% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    transform: translateY(0); }
+  90% {
+    opacity: .5; }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(145%);
+    transform: translateY(145%); } }
+
+@-moz-keyframes ball-fall {
+  0% {
+    opacity: 0;
+    -moz-transform: translateY(-145%);
+    transform: translateY(-145%); }
+  10% {
+    opacity: .5; }
+  20% {
+    opacity: 1;
+    -moz-transform: translateY(0);
+    transform: translateY(0); }
+  80% {
+    opacity: 1;
+    -moz-transform: translateY(0);
+    transform: translateY(0); }
+  90% {
+    opacity: .5; }
+  100% {
+    opacity: 0;
+    -moz-transform: translateY(145%);
+    transform: translateY(145%); } }
+
+@-o-keyframes ball-fall {
+  0% {
+    opacity: 0;
+    -o-transform: translateY(-145%);
+    transform: translateY(-145%); }
+  10% {
+    opacity: .5; }
+  20% {
+    opacity: 1;
+    -o-transform: translateY(0);
+    transform: translateY(0); }
+  80% {
+    opacity: 1;
+    -o-transform: translateY(0);
+    transform: translateY(0); }
+  90% {
+    opacity: .5; }
+  100% {
+    opacity: 0;
+    -o-transform: translateY(145%);
+    transform: translateY(145%); } }
+
+@keyframes ball-fall {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-145%);
+    -moz-transform: translateY(-145%);
+    -o-transform: translateY(-145%);
+    transform: translateY(-145%); }
+  10% {
+    opacity: .5; }
+  20% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -o-transform: translateY(0);
+    transform: translateY(0); }
+  80% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+    -moz-transform: translateY(0);
+    -o-transform: translateY(0);
+    transform: translateY(0); }
+  90% {
+    opacity: .5; }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(145%);
+    -moz-transform: translateY(145%);
+    -o-transform: translateY(145%);
+    transform: translateY(145%); } }
Index: trunk/templates/DefaultTheme/css/theme.css
===================================================================
--- trunk/templates/DefaultTheme/css/theme.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/theme.css	(revision 2)
@@ -0,0 +1,89 @@
+@import url('core.css');
+@import url('content.css');
+@import url('navigation.css');
+
+label { cursor :pointer; }
+input:focus, input:active, select:focus, textarea:focus { background :#f1f8fd; }
+iframe { border :1px solid #35373a; }
+.title {
+   text-align :left;
+   padding :4px 5px 0px 3px;
+   font-weight :bold;
+   font-size :14px;
+   margin-bottom :5px;
+}
+
+select option.disabled { color :#aaaaaa; }
+.jsadmin_drag img { padding :3px 0; margin-top :0px; vertical-align :top; cursor :pointer; }
+
+.save, .reset, .input_narrow { min-width :10%; }
+#hide2, .hide, .page_list { display :none; }
+.right{ text-align :right; }
+.left{ text-align :left; }
+/* set div layers in dead tables */
+.subcolumns { width :100%; overflow :hidden; margin :10px 0; }
+.subcolumns_oldgecko { width :100%; float :left; margin :10px 0; }
+.c10l, .c20l, .c25l, .c33l, .c40l, .c38l, .c50l, .c60l, .c62l, .c66l, .c75l, .c80l { float :left; }
+.c10r, .c20r, .c25r, .c33r, .c40r, .c38r, .c50r, .c60r, .c66r, .c62r, .c75r, .c80r { float :right; margin-left :-5px; }
+  .c10l, .c10r { width :10%; }
+  .c20l, .c20r { width :20%; line-height :2em; }
+  .c40l, .c40r { width :40%; }
+  .c60l, .c60r { width :60%; line-height : 2.125em; }
+  .c25l, .c25r { width :28%; }
+  .c33l, .c33r { width :33.333%; }
+  .c50l, .c50r { width :50%; }
+  .c66l, .c66r { width :66.666%; }
+  .c38l, .c38r { width :38.2%; }
+  .c62l, .c62r { width :61.8%; }
+  .subc { padding :0 0.5em; }
+  .subcl { padding :0 1em 0 0; }
+  .subcr { padding :0 0 0 1em; }
+.c80l, .c80r, .c90l, .c90r { width :80%; }
+.c75l, .c75r, .c80l, .c80r { width :75%; }
+input.submitBtn { height: 2.125em; }
+.save_section { margin : 1.925em auto; height: 2.125em;}
+#section-info { margin : 1.5em 0;line-height: 1.429; }
+
+button.status { cursor :pointer; border-radius :5px; -khtml-border-radius :5px; -webkit-border-radius :5px; -moz-border-radius :5px; }
+.button { font-weight: bold; cursor :pointer; background: #C9C9C9; padding: 0.425em 0.8525em; border-radius :4px; -khtml-border-radius :4px; -webkit-border-radius :4px; -moz-border-radius :4px; }
+
+button[type="button"]:hover,
+input[type="reset"]:hover,
+input[type="submit"]:hover,
+input[type="button"]:hover { cursor: pointer;}
+
+button.href {
+  background: transparent;
+  border: none;
+  cursor: pointer;
+}
+button.href:hover {
+color: #166F82;
+}
+
+input[type="checkbox"] + label,
+input[type="checkbox"] + td label {
+  font-weight: normal;
+  padding: 0 1.325em 0 0.825em;
+  vertical-align: middle;
+}
+
+input[type="checkbox"], input[type="radio"] {
+  height: 16px!important;
+  top: 3px;
+  width: 16px!important;
+}
+
+
+input[type="checkbox"]:checked { }
+input[type="checkbox"]:checked + label,
+input[type="checkbox"]:checked + td label {
+  color: #2D8C0A;
+  font-weight: bold;
+  vertical-align: middle;
+  padding: 0 0.825em 0 0.825em;
+
+}
+.mod-pre { overflow: auto; width: 98%; }
+
+
Index: trunk/templates/DefaultTheme/css/w3-colors-camo.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-camo.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-camo.css	(revision 2)
@@ -0,0 +1,44 @@
+.w3-camo-brown
+{color:#fff;background-color:#594d45}
+
+.w3-camo-red
+{color:#fff;background-color:#79533d}
+
+.w3-camo-olive
+{color:#fff;background-color:#595142}
+
+.w3-camo-field
+{color:#fff;background-color:#745d46}
+
+.w3-camo-earth
+{color:#fff;background-color:#ac7e54}
+
+.w3-camo-sand
+{color:#fff;background-color:#a9947b}
+
+.w3-camo-tan
+{color:#fff;background-color:#b49d80}
+
+.w3-camo-sandstone
+{color:#fff;background-color:#bcab90}
+
+.w3-camo-dark-green
+{color:#fff;background-color:#535640}
+
+.w3-camo-forest
+{color:#fff;background-color:#54504b}
+
+.w3-camo-light-green
+{color:#fff;background-color:#63613e}
+
+.w3-camo-green
+{color:#fff;background-color:#4a5444}
+
+.w3-camo-dark-gray,.w3-camo-dark-grey
+{color:#fff;background-color:#5c5c5b}
+
+.w3-camo-gray,.w3-camo-grey
+{color:#fff;background-color:#9495a5}
+
+.w3-camo-black
+{color:#fff;background-color:#373538}
Index: trunk/templates/DefaultTheme/css/w3-colors-food.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-food.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-food.css	(revision 2)
@@ -0,0 +1,74 @@
+.w3-food-apple
+{color:#000;background-color:#76cd26}
+.w3-food-aspargus
+{color:#fff;background-color:#77ab56}
+.w3-food-apricot
+{color:#fff;background-color:#ffb16d}
+.w3-food-aubergine
+{color:#fff;background-color:#3d0734}
+.w3-food-avocado
+{color:#fff;background-color:#87a922}
+.w3-food-banana
+{color:#000;background-color:#fafe4b}
+.w3-food-butter
+{color:#000;background-color:#ffff81}
+.w3-food-blueberry
+{color:#fff;background-color:#464196}
+.w3-food-cherry
+{color:#fff;background-color:#cf0234}
+.w3-food-chocolate
+{color:#fff;background-color:#411900}
+.w3-food-cranberry
+{color:#fff;background-color:#9e003a}
+.w3-food-coffee
+{color:#fff;background-color:#a6814c}
+.w3-food-egg
+{color:#000;background-color:#fffcc4}
+.w3-food-grape
+{color:#fff;background-color:#6c3461}
+.w3-food-kiwi
+{color:#000;background-color:#8ee53f}
+.w3-food-lemon
+{color:#000;background-color:#fdff52}
+.w3-food-lime
+{color:#000;background-color:#bffe28}
+.w3-food-mango
+{color:#fff;background-color:#ffa62b}
+.w3-food-mushroom
+{color:#fff;background-color:#ba9e88}
+.w3-food-mustard
+{color:#fff;background-color:#ceb301}
+.w3-food-mint
+{color:#000;background-color:#c0fa8b}
+.w3-food-olive
+{color:#fff;background-color:#6e750e}
+.w3-food-orange
+{color:#fff;background-color:#f97306}
+.w3-food-pea
+{color:#fff;background-color:#a4bf20}
+.w3-food-peach
+{color:#fff;background-color:#ffb07c}
+.w3-food-pear
+{color:#000;background-color:#cbf85f}
+.w3-food-pistachio
+{color:#000;background-color:#c0fa8b}
+.w3-food-plum
+{color:#fff;background-color:#3f012c}
+.w3-food-raspberry
+{color:#fff;background-color:#b00149}
+.w3-food-saffron
+{color:#fff;background-color:#feb209}
+.w3-food-salmon
+{color:#fff;background-color:#ff796c}
+.w3-food-spearmint
+{color:#000;background-color:#1ef876}
+.w3-food-squash
+{color:#fff;background-color:#f2ab15}
+.w3-food-strawberry
+{color:#fff;background-color:#fb2943}
+.w3-food-tomato
+{color:#fff;background-color:#ec2d01}
+.w3-food-wheat
+{color:#000;background-color:#fbdd7e}
+.w3-food-wine
+{color:#fff;background-color:#80013f}
Index: trunk/templates/DefaultTheme/css/w3-colors-highway.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-highway.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-highway.css	(revision 2)
@@ -0,0 +1,20 @@
+.w3-highway-brown
+{color:#fff;background-color:#633517}
+
+.w3-highway-red
+{color:#fff;background-color:#a6001a}
+
+.w3-highway-orange
+{color:#fff;background-color:#e06000}
+
+.w3-highway-schoolbus
+{color:#fff;background-color:#ee9600}
+
+.w3-highway-yellow
+{color:#fff;background-color:#ffab00}
+
+.w3-highway-green
+{color:#fff;background-color:#004d33}
+
+.w3-highway-blue
+{color:#fff;background-color:#00477e}
Index: trunk/templates/DefaultTheme/css/w3-colors-safety.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-safety.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-safety.css	(revision 2)
@@ -0,0 +1,17 @@
+.w3-safety-red
+{color:#fff;background-color:#bd1e24}
+
+.w3-safety-orange
+{color:#fff;background-color:#e97600}
+
+.w3-safety-yellow
+{color:#fff;background-color:#f6c700}
+
+.w3-safety-green
+{color:#fff;background-color:#007256}
+
+.w3-safety-blue
+{color:#fff;background-color:#0067a7}
+
+.w3-safety-purple
+{color:#fff;background-color:#964f8e}
Index: trunk/templates/DefaultTheme/css/w3-colors-signal.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-signal.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-signal.css	(revision 2)
@@ -0,0 +1,29 @@
+.w3-signal-yellow
+{color:#fff;background-color:#f7ba0b}
+
+.w3-signal-orange
+{color:#fff;background-color:#d4652f}
+
+.w3-signal-red
+{color:#fff;background-color:#a02128}
+
+.w3-signal-violet
+{color:#fff;background-color:#904684}
+
+.w3-signal-blue
+{color:#fff;background-color:#154889}
+
+.w3-signal-green
+{color:#fff;background-color:#317f43}
+
+.w3-signal-grey
+{color:#fff;background-color:#9b9b9b}
+
+.w3-signal-brown
+{color:#fff;background-color:#7b5141}
+
+.w3-signal-white
+{color:#000;background-color:#f4f4f4}
+
+.w3-signal-black
+{color:#fff;background-color:#282828}
Index: trunk/templates/DefaultTheme/css/w3-colors-vivid.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3-colors-vivid.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3-colors-vivid.css	(revision 2)
@@ -0,0 +1,43 @@
+.w3-vivid-pink
+{color:#fff;background-color:#ffb5bA}
+.w3-vivid-red
+{color:#fff;background-color:#be0032}
+.w3-vivid-orange
+{color:#fff;background-color:#f38400}
+.w3-vivid-yellow
+{color:#fff;background-color:#f3c300}
+.w3-vivid-green
+{color:#fff;background-color:#008856}
+.w3-vivid-blue
+{color:#fff;background-color:#00a1c2}
+.w3-vivid-black
+{color:#fff;background-color:#000}
+.w3-vivid-white
+{color:#000;background-color:#fff}
+
+.w3-vivid-purple
+{color:#fff;background-color:#9a4eae}
+.w3-vivid-purple
+{color:#fff;background-color:#9a4eae}
+.w3-vivid-yellowish-pink
+{color:#fff;background-color:#ffb7a5}
+.w3-vivid-reddish-orange
+{color:#fff;background-color:#e25822}
+.w3-vivid-orange-yellow
+{color:#fff;background-color:#f6a600}
+.w3-vivid-greenish-yellow
+{color:#fff;background-color:#dcd300}
+.w3-vivid-yellow-green
+{color:#fff;background-color:#8db600}
+.w3-vivid-yellowish-green
+{color:#fff;background-color:#27a64c}
+.w3-vivid-bluish-green
+{color:#fff;background-color:#008882}
+.w3-vivid-greenish-blue
+{color:#fff;background-color:#0085a1}
+.w3-vivid-purplish-blue
+{color:#fff;background-color:#30267a}
+.w3-vivid-reddish-purple
+{color:#fff;background-color:#870074}
+.w3-vivid-purplish-red
+{color:#fff;background-color:#ce4676}
Index: trunk/templates/DefaultTheme/css/w3.css
===================================================================
--- trunk/templates/DefaultTheme/css/w3.css	(nonexistent)
+++ trunk/templates/DefaultTheme/css/w3.css	(revision 2)
@@ -0,0 +1,361 @@
+﻿/* W3.CSS 2.82 by Jan Egil and Borge Refsnes */
+html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
+/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
+html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}
+audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
+audio:not([controls]){display:none;height:0}[hidden],template{display:none}
+a{background-color:transparent;-webkit-text-decoration-skip:objects}
+a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
+dfn{font-style:italic}mark{background:#ff0;color:#000}
+small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}
+img{border-style:none}svg:not(:root){overflow:hidden}
+code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}
+hr{box-sizing:content-box;height:0;overflow:visible}
+button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}
+button,input{overflow:visible}button,select{text-transform:none}
+button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}
+button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0}
+button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText}
+fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
+legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
+[type=checkbox],[type=radio]{padding:0}
+[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
+[type=search]{-webkit-appearance:textfield;outline-offset:-2px}
+[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+::-webkit-input-placeholder{color:inherit;opacity:0.54}
+::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
+/* End extract
+html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}
+*/
+h1,h2,h3,h4,h5,h6,.w3-slim,.w3-wide{font-family:"Segoe UI",Arial,sans-serif}
+h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}
+.w3-serif{font-family:"Times New Roman",Times,serif}
+h1,h2,h3,h4,h5,h6{font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}
+h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}
+hr{border:0;border-top:1px solid #eee;margin:20px 0}
+img{margin-bottom:-5px}a{color:inherit}
+.w3-image{max-width:100%;height:auto}
+.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}
+.w3-table-all{border:1px solid #ccc}
+.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}
+.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
+.w3-table-all tr:nth-child(odd){background-color:#fff}
+.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
+.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}
+.w3-centered tr th,.w3-centered tr td{text-align:center}
+.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
+.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}
+.w3-btn,.w3-btn-block{border:none;display:inline-block;outline:0;padding:6px 16px;vertical-align:middle;overflow:hidden;text-decoration:none!important;color:#fff;background-color:#000;text-align:center;cursor:pointer;white-space:nowrap}
+.w3-btn:hover,.w3-btn-block:hover,.w3-btn-floating:hover,.w3-btn-floating-large:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
+.w3-btn,.w3-btn-floating,.w3-btn-floating-large,.w3-closenav,.w3-opennav{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+.w3-btn-floating,.w3-btn-floating-large{display:inline-block;text-align:center;color:#fff;background-color:#000;position:relative;overflow:hidden;z-index:1;padding:0;border-radius:50%;cursor:pointer;font-size:24px}
+.w3-btn-floating{width:40px;height:40px;line-height:40px}.w3-btn-floating-large{width:56px;height:56px;line-height:56px}
+.w3-disabled,.w3-btn:disabled,.w3-btn-floating:disabled,.w3-btn-floating-large:disabled{cursor:not-allowed;opacity:0.3}
+.w3-disabled {padding:4px}
+.w3-btn.w3-disabled *,.w3-btn-block.w3-disabled,.w3-btn-floating.w3-disabled *,.w3-btn:disabled *,.w3-btn-floating:disabled *{pointer-events:none}
+.w3-btn.w3-disabled:hover,.w3-btn-block.w3-disabled:hover,.w3-btn:disabled:hover,.w3-btn-floating.w3-disabled:hover,.w3-btn-floating:disabled:hover,
+.w3-btn-floating-large.w3-disabled:hover,.w3-btn-floating-large:disabled:hover{box-shadow:none}
+.w3-btn-group .w3-btn{float:left}.w3-btn-block{width:100%}
+.w3-btn-bar .w3-btn{box-shadow:none;background-color:inherit;color:inherit;float:left}.w3-btn-bar .w3-btn:hover{background-color:#ccc}
+.w3-badge,.w3-tag,.w3-sign{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}
+.w3-badge{border-radius:50%}
+ul.w3-ul{list-style-type:none;padding:0;margin:0}ul.w3-ul li{padding:6px 2px 6px 16px;border-bottom:1px solid #ddd}ul.w3-ul li:last-child{border-bottom:none}
+.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}
+.w3-navbar{list-style-type:none;margin:0;padding:0;overflow:hidden}
+.w3-navbar li{float:left}.w3-navbar li a,.w3-navitem{display:block;padding:8px 16px}.w3-navbar li a:hover{color:#000;background-color:#ccc}
+.w3-navbar .w3-dropdown-hover,.w3-navbar .w3-dropdown-click{position:static}
+.w3-navbar .w3-dropdown-hover:hover,.w3-navbar .w3-dropdown-hover:first-child,.w3-navbar .w3-dropdown-click:hover{background-color:#ccc;color:#000}
+.w3-navbar a,.w3-topnav a,.w3-sidenav a,.w3-dropdown-content a,.w3-accordion-content a,.w3-dropnav a{text-decoration:none!important}
+.w3-navbar .w3-opennav.w3-right{float:right!important}.w3-topnav{padding:8px 8px}
+.w3-topnav a{padding:0 8px;border-bottom:3px solid transparent;-webkit-transition:border-bottom .3s;transition:border-bottom .3s}
+.w3-topnav a:hover{border-bottom:3px solid #fff}.w3-topnav .w3-dropdown-hover a{border-bottom:0}
+.w3-opennav,.w3-closenav{color:inherit}.w3-opennav:hover,.w3-closenav:hover{cursor:pointer;opacity:0.8}
+.w3-btn,.w3-btn-floating,.w3-dropnav a,.w3-btn-floating-large,.w3-btn-block,.w3-hover-shadow,.w3-hover-opacity,.w3-hover-opacity-off,.w3-hover-sepia,.w3-hover-grayscale,.w3-hover-greyscale,
+.w3-navbar a,.w3-sidenav a,.w3-pagination li a,.w3-hoverable tbody tr,.w3-hoverable li,.w3-accordion-content a,.w3-dropdown-content a,.w3-dropdown-click:hover,.w3-dropdown-hover:hover,.w3-opennav,.w3-closenav,.w3-closebtn,
+.w3-hover-amber,.w3-hover-aqua,.w3-hover-blue,.w3-hover-light-blue,.w3-hover-brown,.w3-hover-cyan,.w3-hover-blue-grey,.w3-hover-green,.w3-hover-light-green,.w3-hover-indigo,.w3-hover-khaki,.w3-hover-lime,.w3-hover-orange,.w3-hover-deep-orange,.w3-hover-pink,
+.w3-hover-purple,.w3-hover-deep-purple,.w3-hover-red,.w3-hover-sand,.w3-hover-teal,.w3-hover-yellow,.w3-hover-white,.w3-hover-black,.w3-hover-grey,.w3-hover-light-grey,.w3-hover-dark-grey,.w3-hover-text-amber,.w3-hover-text-aqua,.w3-hover-text-blue,.w3-hover-text-light-blue,
+.w3-hover-text-brown,.w3-hover-text-cyan,.w3-hover-text-blue-grey,.w3-hover-text-green,.w3-hover-text-light-green,.w3-hover-text-indigo,.w3-hover-text-khaki,.w3-hover-text-lime,.w3-hover-text-orange,.w3-hover-text-deep-orange,.w3-hover-text-pink,.w3-hover-text-purple,
+.w3-hover-text-deep-purple,.w3-hover-text-red,.w3-hover-text-sand,.w3-hover-text-teal,.w3-hover-text-yellow,.w3-hover-text-white,.w3-hover-text-black,.w3-hover-text-grey,.w3-hover-text-light-grey,.w3-hover-text-dark-grey
+{-webkit-transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s;transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s}
+.w3-ripple:active{opacity:0.5}.w3-ripple{-webkit-transition:opacity 0s;transition:opacity 0s}
+.w3-sidenav{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
+.w3-sidenav a{padding:4px 2px 4px 16px}.w3-sidenav a:hover{background-color:#ccc}.w3-sidenav a,.w3-dropnav a{display:block}
+.w3-sidenav .w3-dropdown-hover:hover,.w3-sidenav .w3-dropdown-hover:first-child,.w3-sidenav .w3-dropdown-click:hover,.w3-dropnav a:hover{background-color:#ccc;color:#000}
+.w3-sidenav .w3-dropdown-hover,.w3-sidenav .w3-dropdown-click {width:100%}.w3-sidenav .w3-dropdown-hover .w3-dropdown-content,.w3-sidenav .w3-dropdown-click .w3-dropdown-content{min-width:100%}
+.w3-main,#main{transition:margin-left .4s}
+.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
+.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}.w3-closebtn{text-decoration:none;float:right;font-size:24px;font-weight:bold;color:inherit}
+.w3-closebtn:hover,.w3-closebtn:focus{color:#000;text-decoration:none;cursor:pointer}
+.w3-pagination{display:inline-block;padding:0;margin:0}.w3-pagination li{display:inline}
+.w3-pagination li a{text-decoration:none;color:#000;float:left;padding:8px 16px}
+.w3-pagination li a:hover{background-color:#ccc}
+.w3-input-group,.w3-group{margin-top:24px;margin-bottom:24px}
+.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #808080;width:100%}
+.w3-label{color:#009688}.w3-input:not(:valid)~.w3-validate{color:#f44336}
+.w3-select{padding:9px 0;width:100%;color:#000;border:1px solid transparent;border-bottom:1px solid #009688}
+.w3-select select:focus{color:#000;border:1px solid #009688}.w3-select option[disabled]{color:#009688}
+.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}
+.w3-dropdown-hover:hover .w3-dropdown-content{display:block;z-index:1}
+.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0}
+.w3-dropdown-content a{padding:6px 16px;display:block}
+.w3-dropdown-content a:hover{background-color:#ccc}
+.w3-accordion {width:100%;cursor:pointer}
+.w3-accordion-content{cursor:auto;display:none;position:relative;width:100%;margin:0;padding:0}
+.w3-accordion-content a{padding:6px 16px;display:block}.w3-accordion-content a:hover{background-color:#ccc}
+.w3-progress-container{width:100%;height:1.5em;position:relative;background-color:#f1f1f1}
+.w3-progressbar{background-color:#757575;height:100%;position:absolute;line-height:inherit}
+input[type=checkbox].w3-check,input[type=radio].w3-radio{width:24px;height:24px;position:relative;top:6px}
+input[type=checkbox].w3-check:checked+.w3-validate,input[type=radio].w3-radio:checked+.w3-validate{color:#009688}
+input[type=checkbox].w3-check:disabled+.w3-validate,input[type=radio].w3-radio:disabled+.w3-validate{color:#aaa}
+.w3-responsive{overflow-x:auto}
+.w3-container:after,.w3-panel:after,.w3-row:after,.w3-row-padding:after,.w3-topnav:after,.w3-clear:after,.w3-btn-group:before,.w3-btn-group:after,.w3-btn-bar:before,.w3-btn-bar:after{content:"";display:table;clear:both}
+.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}
+.w3-col.s1{width:8.33333%}
+.w3-col.s2{width:16.66666%}
+.w3-col.s3{width:24.99999%}
+.w3-col.s4{width:33.33333%}
+.w3-col.s5{width:41.66666%}
+.w3-col.s6{width:49.99999%}
+.w3-col.s7{width:58.33333%}
+.w3-col.s8{width:66.66666%}
+.w3-col.s9{width:74.99999%}
+.w3-col.s10{width:83.33333%}
+.w3-col.s11{width:91.66666%}
+.w3-col.s12,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{width:99.99999%}
+@media only screen and (min-width:601px){
+.w3-col.m1{width:8.33333%}
+.w3-col.m2{width:16.66666%}
+.w3-col.m3,.w3-quarter{width:24.99999%}
+.w3-col.m4,.w3-third{width:33.33333%}
+.w3-col.m5{width:41.66666%}
+.w3-col.m6,.w3-half{width:49.99999%}
+.w3-col.m7{width:58.33333%}
+.w3-col.m8,.w3-twothird{width:66.66666%}
+.w3-col.m9,.w3-threequarter{width:74.99999%}
+.w3-col.m10{width:83.33333%}
+.w3-col.m11{width:91.66666%}
+.w3-col.m12{width:99.99999%}}
+@media only screen and (min-width:993px){
+.w3-col.l1{width:8.33333%}
+.w3-col.l2{width:16.66666%}
+.w3-col.l3,.w3-quarter{width:24.99999%}
+.w3-col.l4,.w3-third{width:33.33333%}
+.w3-col.l5{width:41.66666%}
+.w3-col.l6,.w3-half{width:49.99999%}
+.w3-col.l7{width:58.33333%}
+.w3-col.l8,.w3-twothird{width:66.66666%}
+.w3-col.l9,.w3-threequarter{width:74.99999%}
+.w3-col.l10{width:83.33333%}
+.w3-col.l11{width:91.66666%}
+.w3-col.l12{width:99.99999%}}
+.w3-content{max-width:980px;margin:auto}
+.w3-rest{overflow:hidden}
+.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}
+@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}}
+@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
+@media (min-width:993px){.w3-modal-content{width:900px}}
+@media screen and (max-width:600px){.w3-topnav a{display:block}.w3-navbar li:not(.w3-opennav){float:none;width:100%!important}.w3-navbar li.w3-right{float:none!important}}
+@media screen and (max-width:600px){.w3-topnav .w3-dropdown-hover .w3-dropdown-content,.w3-navbar .w3-dropdown-click .w3-dropdown-content,.w3-navbar .w3-dropdown-hover .w3-dropdown-content{position:relative}}
+@media screen and (max-width:600px){.w3-topnav,.w3-navbar{text-align:center}}
+@media (max-width:600px){.w3-hide-small{display:none!important}}
+@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}
+@media (min-width:993px){.w3-hide-large{display:none!important}}
+@media screen and (max-width:992px){.w3-sidenav.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}}
+@media screen and (min-width:993px){.w3-sidenav.w3-collapse{display:block!important}}
+.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}
+.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
+.w3-left{float:left!important}.w3-right{float:right!important}
+.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}
+.w3-medium{font-size:12px!important}.w3-large{font-size:18px!important}
+.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}
+.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}
+.w3-vertical{word-break:break-all;line-height:1;text-align:center;width:0.6em}
+.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}
+.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}
+.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}
+.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}
+.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
+.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
+.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
+.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-circle{border-radius:50%!important}
+.w3-round-small{border-radius:2px!important}.w3-round,.w3-round-medium{border-radius:4px!important}
+.w3-round-large{border-radius:8px!important}.w3-round-xlarge{border-radius:16px!important}
+.w3-round-xxlarge{border-radius:32px!important}.w3-round-jumbo{border-radius:64px!important}
+.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}
+.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}
+.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}
+.w3-margin{margin:16px!important}.w3-margin-0{margin:0!important}
+.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}
+.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}
+.w3-section{margin-top:16px!important;margin-bottom:16px!important}
+.w3-padding-tiny{padding:2px 4px!important}.w3-padding-small{padding:4px 8px!important}
+.w3-padding-medium,.w3-padding,.w3-form{padding:8px 16px!important}
+.w3-padding-large{padding:12px 24px!important}.w3-padding-xlarge{padding:16px 32px!important}
+.w3-padding-xxlarge{padding:24px 48px!important}.w3-padding-jumbo{padding:32px 64px!important}
+.w3-padding-4{padding-top:4px!important;padding-bottom:4px!important}
+.w3-padding-8{padding-top:8px!important;padding-bottom:8px!important}
+.w3-padding-12{padding-top:12px!important;padding-bottom:12px!important}
+.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}
+.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}
+.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}
+.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}
+.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}
+.w3-padding-128{padding-top:128px!important;padding-bottom:128px!important}
+.w3-padding-0{padding:0!important}
+.w3-padding-top{padding-top:8px!important}.w3-padding-bottom{padding-bottom:8px!important}
+.w3-padding-left{padding-left:16px!important}.w3-padding-right{padding-right:16px!important}
+.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}
+.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}
+.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}
+.w3-spin{animation:w3-spin 2s infinite linear;-webkit-animation:w3-spin 2s infinite linear}
+@-webkit-keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
+@keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
+.w3-container{padding:0.01em 16px}
+.w3-panel{padding:0.01em 16px;margin-top:16px!important;margin-bottom:16px!important}
+.w3-example{background-color:#f1f1f1;padding:0.01em 16px}
+.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}
+.w3-code{line-height:1.4;width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
+.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
+.w3-example,.w3-code{margin:20px 0}.w3-card{border:1px solid #ccc}
+.w3-card-2,.w3-example{box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)!important}
+.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}
+.w3-card-8{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}
+.w3-card-12{box-shadow:0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)!important}
+.w3-card-16{box-shadow:0 16px 24px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)!important}
+.w3-card-24{box-shadow:0 24px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)!important}
+.w3-animate-fading{-webkit-animation:fading 10s infinite;animation:fading 10s infinite}
+@-webkit-keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+.w3-animate-opacity{-webkit-animation:opac 0.8s;animation:opac 0.8s}
+@-webkit-keyframes opac{from{opacity:0} to{opacity:1}}
+@keyframes opac{from{opacity:0} to{opacity:1}}
+.w3-animate-top{position:relative;-webkit-animation:animatetop 0.4s;animation:animatetop 0.4s}
+@-webkit-keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+.w3-animate-left{position:relative;-webkit-animation:animateleft 0.4s;animation:animateleft 0.4s}
+@-webkit-keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+.w3-animate-right{position:relative;-webkit-animation:animateright 0.4s;animation:animateright 0.4s}
+@-webkit-keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+.w3-animate-bottom{position:relative;-webkit-animation:animatebottom 0.4s;animation:animatebottom 0.4s}
+@-webkit-keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0px;opacity:1}}
+@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
+.w3-animate-zoom {-webkit-animation:animatezoom 0.6s;animation:animatezoom 0.6s}
+@-webkit-keyframes animatezoom{from{-webkit-transform:scale(0)} to{-webkit-transform:scale(1)}}
+@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
+.w3-animate-input{-webkit-transition:width 0.4s ease-in-out;transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}
+.w3-opacity,.w3-hover-opacity:hover{opacity:0.60;filter:alpha(opacity=60);-webkit-backface-visibility:hidden}
+.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1;filter:alpha(opacity=100);-webkit-backface-visibility:hidden}
+.w3-opacity-max{opacity:0.25;filter:alpha(opacity=25);-webkit-backface-visibility:hidden}
+.w3-opacity-min{opacity:0.75;filter:alpha(opacity=75);-webkit-backface-visibility:hidden}
+.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{-webkit-filter:grayscale(100%);filter:grayscale(100%)}
+.w3-greyscale,.w3-grayscale{-webkit-filter:grayscale(75%);filter:grayscale(75%)}
+.w3-greyscale-min,.w3-grayscale-min{-webkit-filter:grayscale(50%);filter:grayscale(50%)}
+.w3-sepia{-webkit-filter:sepia(75%);filter:sepia(75%)}
+.w3-sepia-max,.w3-hover-sepia:hover{-webkit-filter:sepia(100%);filter:sepia(100%)}
+.w3-sepia-min{-webkit-filter:sepia(50%);filter:sepia(50%)}
+.w3-text-shadow{text-shadow:1px 1px 0 #444}.w3-text-shadow-white{text-shadow:1px 1px 0 #ddd}
+.w3-transparent{background-color:transparent!important}
+.w3-hover-none:hover{box-shadow:none!important;background-color:transparent!important}
+/* Colors */
+.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}
+.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
+.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
+.w3-blue-wb,.w3-hover-blue-wb:hover{color:#fff!important;background-color:#215A7A!important}
+.w3-header-blue-wb,.w3-header-hover-blue-wb:hover{color:#fff!important;background-color:#215a7a!important}
+.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
+.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}
+.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
+.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}
+.w3-blue-grey-wb,.w3-hover-blue-grey-wb:hover,.w3-blue-gray-wb,.w3-hover-blue-gray-wb:hover{color:#fff!important;background-color:#607d8b!important}
+.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
+.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
+.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
+.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
+.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}
+.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}
+.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
+.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
+.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
+.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
+.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}
+.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
+.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}
+.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
+.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}
+.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}
+.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}
+.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}
+.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}
+.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}
+.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}
+.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}
+.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}
+.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}
+.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}
+.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}
+.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}
+.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}
+.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}
+.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}
+.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}
+.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}
+.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}
+.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}
+.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}
+.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}
+.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}
+.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}
+.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}
+.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}
+.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}
+.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}
+.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}
+.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}
+.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}
+.w3-text-black,.w3-hover-text-black:hover{color:#000!important}
+.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}
+.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}
+.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}
+.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}
+.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}
+.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}
+.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}
+.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}
+.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}
+.w3-border-blue-grey,.w3-hover-blue-grey:hover,.w3-border-blue-gray,.w3-hover-blue-gray:hover{border-color:#607d8b!important}
+.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}
+.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}
+.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}
+.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}
+.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}
+.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}
+.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}
+.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}
+.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}
+.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}
+.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}
+.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}
+.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}
+.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}
+.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}
+.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}
+.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}
+.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}
+.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}
+.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}
+.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}
+.w3-form-control, select, textarea, .textarea, input:not([type]), input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"] {
+  -moz-border-bottom-colors: none;
+  -moz-border-left-colors: none;
+  -moz-border-right-colors: none;
+  -moz-border-top-colors: none;
+  background: #ededed none repeat scroll 0 0;
+  max-width: 100%;
+  transition: all 0.2s linear 0s;
+}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/delete_errorlog.php
===================================================================
--- trunk/templates/DefaultTheme/delete_errorlog.php	(nonexistent)
+++ trunk/templates/DefaultTheme/delete_errorlog.php	(revision 2)
@@ -0,0 +1,57 @@
+<?php
+
+    $sAppPath = dirname(dirname(__DIR__));
+    if (is_readable($sAppPath.'/config.php')) {require ($sAppPath.'/config.php');}
+    if (!class_exists('admin', false)) {require (WB_PATH.'/framework/class.admin.php');}
+    if (!function_exists('rm_full_dir')){require (WB_PATH.'/framework/functions.php');}
+    // An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE.
+    $aRequestVars = $_REQUEST;
+    $sErrorlogFile = WB_PATH.'/var/logs/php_error.log.php';
+    $sErrorlogUrl  = WB_URL .'/var/logs/php_error.log.php';
+    $aJsonRespond['url'] = $sErrorlogUrl;
+    // initialize json_respond array  (will be sent back)
+    $aJsonRespond = array();
+    $aJsonRespond['content'] = '';
+    $aJsonRespond['message'] = 'Load operation failed';
+    $aJsonRespond['success'] = false;
+    $admin = new admin('##skip##', false, false);
+    if ( (int)$admin->get_user_id() != 1){   #
+        $aJsonRespond['message'] = 'illegal file access';
+        exit(json_encode($aJsonRespond));
+    }
+    if(!isset($aRequestVars['action']) )
+    {
+        $aJsonRespond['message'] = '"action" was not set';
+        exit(json_encode($aJsonRespond));
+    } elseif ($aRequestVars['action']=='show') {
+          $aJsonRespond['content'] = file_get_contents($sErrorlogFile);
+    } else {
+        if (is_writeable($sErrorLogFile)) {
+          if (!rm_full_dir($sErrorLogFile, true)){
+              $aJsonRespond['message'] = "can't delete from folder";
+              exit(json_encode($aJsonRespond));
+          }
+          if (!file_exists($sErrorLogFile)) {
+              $sTmp = '<?php die(\'illegal file access\'); ?>'
+                    . 'created: ['.date('c').']'.PHP_EOL;
+              if (false === file_put_contents($sErrorLogFile, $sTmp, FILE_APPEND)) {
+                  throw new Exception('unable to create logfile \'/var/logs/php_error.log.php\'');
+              }
+          }
+          if (!is_writeable($sErrorLogFile)) {
+              throw new Exception('not writeable logfile \'/var/logs/php_error.log.php\'');
+          }
+          $aJsonRespond['message'] = 'New php_error.log successfully created';
+          $aJsonRespond['content'] = file_get_contents($sErrorlogFile);
+        }
+
+/*
+          if (!file_exists($sErrorLogFile)) {
+              file_put_contents($sErrorLogFile, 'created: ['.date('c').']'.PHP_EOL, FILE_APPEND);
+          }
+*/
+    }
+// If the script is still running, set success to true
+$aJsonRespond['success'] = 'true';
+// and echo the answer as json to the ajax function
+echo json_encode($aJsonRespond);

Property changes on: trunk/templates/DefaultTheme/delete_errorlog.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/fancybox.css
===================================================================
--- trunk/templates/DefaultTheme/fancybox.css	(nonexistent)
+++ trunk/templates/DefaultTheme/fancybox.css	(revision 2)
@@ -0,0 +1,92 @@
+div#fancy_overlay {
+	position:absolute;
+	top: 0;
+	left: 0;
+	z-index: 90;
+	width: 100%;
+	background-color: #333;
+}
+
+div#fancy_loading {
+	position: absolute;
+	height: 40px;
+	width: 40px;
+	cursor: pointer;
+	display: none;
+	overflow: hidden;
+	background: transparent;
+	z-index: 100;
+}
+
+div#fancy_loading div {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 40px;
+	height: 480px;
+	background: transparent url(images/fancy_progress.png) no-repeat;
+}
+
+div#fancy_close {
+/*
+	position: absolute;
+	top: -12px;
+	right: -12px;
+	height: 30px;
+	width: 30px;
+	background: transparent url(fancy_closebox.png) ;
+	cursor: pointer;
+	z-index: 100;
+	display: none;
+*/
+}
+
+div#fancy_content {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	padding: 0; 
+	margin: 0;
+	z-index: 96;
+}
+
+#fancy_frame {
+	position: relative;
+	width: 100%;
+	height: 100%;
+	display: none;
+}
+
+img#fancy_img {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	border:0; 
+	padding: 0; 
+	margin: 0;
+	z-index: 92;
+}
+
+div#fancy_outer {
+	position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 90;
+    padding: 18px 18px 58px 18px;
+    margin: 0;
+    overflow: hidden;
+    background: transparent;
+    display: none;
+}
+
+div#fancy_inner {
+	position: relative;
+	width:100%;
+	height:100%;
+	border: 1px solid #444;
+	background: #FFF;
+}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/icons/access.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/access.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/addons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/addons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/admintools.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/admintools.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/backend.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/backend.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/designerguide.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/designerguide.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/dot.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/icons/dot.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/features.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/features.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/groups.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/groups.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/info_50.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/info_50.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/languages.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/languages.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/media.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/media.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/modules.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/modules.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/pages.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/pages.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/preferences.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/preferences.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/presspage.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/presspage.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/settings.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/settings.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/snippets.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/snippets.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/teamblog.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/teamblog.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/templates.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/templates.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/tutorial.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/tutorial.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/userguide.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/userguide.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/users.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/users.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/icons/view.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/icons/view.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/1x1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/1x1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/Close_Box_Red.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/Close_Box_Red.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/Image3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/Image3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/_dl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/_dl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/apple-touch-icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/apple-touch-icon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/background.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/background.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/bgtitle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/bgtitle.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/blank_16.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/blank_16.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/bookmarks/facebook.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/bookmarks/facebook.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/bookmarks/twitter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/bookmarks/twitter.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/calendar_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/calendar_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/clock_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/clock_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/clock_del_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/clock_del_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/clock_red_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/clock_red_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/delete_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/delete_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/deleted_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/deleted_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/dl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/dl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/dot.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/dot.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/down_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/down_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/edit_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/edit_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/fancy_progress.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/fancy_progress.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTheme/images/favicon.ico
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/file.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/file.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/aif.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/aif.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/asf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/asf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/avi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/avi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/blank_16.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/files/blank_16.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/blank_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/blank_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/cda.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/cda.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/css.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/css.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/csv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/csv.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/doc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/doc.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/fh.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/fh.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/fh10.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/fh10.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/fla.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/fla.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/gif.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/gif.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/gz.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/gz.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/html.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/html.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/index.php
===================================================================
--- trunk/templates/DefaultTheme/images/files/index.php	(nonexistent)
+++ trunk/templates/DefaultTheme/images/files/index.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ * $Id$
+ * Website Baker theme: wb_theme
+ * This theme is the default WB backend Theme
+ * Feel free to modify or build up on this template.
+ *
+ * This file prevents directory listing.
+ *
+ * LICENSE: GNU General Public License
+ * 
+ * @author     Johannes Tassilo Gruber
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.80
+ * @platform   Website Baker 2.8
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+// prevent directory listing
+header('Location: ../../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/templates/DefaultTheme/images/files/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/jpeg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/jpeg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/jpg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/jpg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/mp3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/mp3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/mpg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/mpg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/ogg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/ogg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/pdf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/pdf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/php.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/php.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/png.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/png.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/ppt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/ppt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/rar.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/rar.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/swf.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/swf.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/tgz.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/tgz.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/tif.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/tif.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/tiff.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/tiff.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/txt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/txt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/unknown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/unknown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/vcd.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/vcd.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/wav.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/wav.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/wmv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/wmv.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/xls.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/xls.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/files/zip.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/files/zip.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/ca.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/ca.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/cs.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/cs.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/da.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/da.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/de.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/de.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/en.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/en.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/es.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/es.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/et.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/et.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/fi.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/fi.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/fr.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/fr.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/hr.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/hr.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/hu.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/hu.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/index.php
===================================================================
--- trunk/templates/DefaultTheme/images/flags/index.php	(nonexistent)
+++ trunk/templates/DefaultTheme/images/flags/index.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ * $Id$
+ * Website Baker theme: wb_theme
+ * This theme is the default WB backend Theme
+ * Feel free to modify or build up on this template.
+ *
+ * This file prevents directory listing.
+ *
+ * LICENSE: GNU General Public License
+ * 
+ * @author     Johannes Tassilo Gruber
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.80
+ * @platform   Website Baker 2.8
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+// prevent directory listing
+header('Location: ../../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/templates/DefaultTheme/images/flags/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/it.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/it.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/lv.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/lv.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/nl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/nl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/no.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/no.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/none.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/none.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/pl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/pl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/pt.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/pt.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/ru.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/ru.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/se.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/se.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/sk.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/sk.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/flags/tr.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/flags/tr.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/folder_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/folder_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/fonts.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/fonts.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/help.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/help.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/help_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/help_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/hidden_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/hidden_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/home.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/home.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/image.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/image.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/info.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/info.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/kalzium.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/kalzium.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/keys_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/keys_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/kontact.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/kontact.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/lock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/login.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/login.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/logo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/menu.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/menu.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/menuo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/menuo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/minus_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/minus_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/modify_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/modify_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/newfolder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/newfolder.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/news_subscribe.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/news_subscribe.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/noclock_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/noclock_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/none_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/none_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/pic_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/pic_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/pic_exist_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/pic_exist_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/plus_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/plus_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/private_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/private_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/reload_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/reload_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/remove_.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/remove_.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/remove_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/remove_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/remove_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/remove_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/resize_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/resize_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/restore_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/restore_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/sections_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/sections_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/siteadd.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/siteadd.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/status_0.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/status_0.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/status_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/status_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/system.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/system.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/tab_duplicate.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/tab_duplicate.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/tabl.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTheme/images/tabl.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/tabr.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTheme/images/tabr.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/thumbs-up.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg

Property changes on: trunk/templates/DefaultTheme/images/thumbs-up.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/jpeg
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/thumbs-up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/thumbs-up.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/thumbs-up.psd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/templates/DefaultTheme/images/thumbs-up.psd
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/undo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/undo.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/unlock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/unlock.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/unzip.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/gif

Property changes on: trunk/templates/DefaultTheme/images/unzip.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/up_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/up_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/up_folder_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/up_folder_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/user.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/user.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/user_delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/user_delete.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/user_red.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/user_red.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/view.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/view.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/view_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/view_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/visible_16.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/visible_16.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/images/visible_16_1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: trunk/templates/DefaultTheme/images/visible_16_1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Index: trunk/templates/DefaultTheme/info.php
===================================================================
--- trunk/templates/DefaultTheme/info.php	(nonexistent)
+++ trunk/templates/DefaultTheme/info.php	(revision 2)
@@ -0,0 +1,69 @@
+<?php
+/**
+ * $Id$
+ * Website Baker theme: wb_theme
+ * This theme is the default WB backend Theme
+ * Feel free to modify or build up on this template.
+ *
+ * This file defines the template variables required by Website Baker.
+ *
+ * LICENSE: GNU General Public License
+ *
+ * @author     Johannes Tassilo Gruber
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.80
+ * @platform   Website Baker 2.8
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * [$filename]
+ *
+ * @category     Addons
+ * @package      theme
+ * @subpackage   DefaultTheme
+ * @copyright    WebsiteBaker Project <board@websitebaker@org>
+ * @author       WebsiteBaker Project <board@i@websitebaker@org>
+ * @author       Dietmar Wöllbrink <dietmar.woellbrink@websitebaker@org>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      1.0.0
+ * @lastmodified $Date$
+ * @since        File available since 2016-07-26
+ * @description
+ */
+
+$template_directory     = 'DefaultTheme';
+$template_name          = 'WebsiteBaker Default Theme v1.2.20';
+$template_version       = '1.2.20';
+$template_platform      = '2.10.0';
+$template_function      = 'theme';
+$template_author        = 'Johannes Tassilo Gruber, WebsiteBaker Project';
+$template_license       = '<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>';
+$template_description   = 'Default backend theme for Website Baker 2.10.0';
+
+// end of file

Property changes on: trunk/templates/DefaultTheme/info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/install.php
===================================================================
--- trunk/templates/DefaultTheme/install.php	(nonexistent)
+++ trunk/templates/DefaultTheme/install.php	(revision 2)
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @category        templates
+ * @package         WB theme
+ * @subpackage      install
+ * @author          WebsiteBaker Project
+ * @copyright       2009-2012, WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// prevent this file from being accessed directly
+if(defined('WB_PATH') == false)
+{
+    die('<head><title>Access denied</title></head><body><h2 style="color:red;margin:3em auto;text-align:center;">Cannot access this file directly</h2></body></html>');
+}

Property changes on: trunk/templates/DefaultTheme/install.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/js/DomReady.js
===================================================================
--- trunk/templates/DefaultTheme/js/DomReady.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/DomReady.js	(revision 2)
@@ -0,0 +1,147 @@
+// add event cross browser
+function addEvent(elem, event, fn) {
+    if (elem.addEventListener) {
+        elem.addEventListener(event, fn, false);
+    } else {
+        elem.attachEvent("on" + event, function() {
+            // set the this pointer same as addEventListener when fn is called
+            return(fn.call(elem, window.event));   
+        });
+    }
+}
+
+
+var logs = [];
+var eventSet = false;
+var loaded = false;
+function log(str) {
+    
+    if (loaded) {
+        output(str);
+    } else {
+        logs.push(str);
+    }
+
+    function output(str) {
+        var o = document.getElementById("log");
+        var div = document.createElement("div");
+        div.appendChild(document.createTextNode(str));
+        o.appendChild(div);
+    }
+    
+    if (!eventSet) {
+        eventSet = true;
+        addEvent(window, "load", function() {
+            loaded = true;
+            for (var i = 0; i < logs.length; i++) {
+                output(logs[i]);
+            }
+            logs = [];
+        });
+    }    
+}
+
+(function(funcName, baseObj) {
+    // The public function name defaults to window.domReady
+    // but you can pass in your own object and own function name and those will be used
+    // if you want to put them in a different namespace
+    funcName = funcName || "domReady";
+    baseObj = baseObj || window;
+    var readyList = [];
+    var readyFired = false;
+    var readyEventHandlersInstalled = false;
+    
+    // call this when the document is ready
+    // this function protects itself against being called more than once
+    function ready() {
+        if (!readyFired) {
+            // this must be set to true before we start calling callbacks
+            readyFired = true;
+            for (var i = 0; i < readyList.length; i++) {
+                // if a callback here happens to add new ready handlers,
+                // the domReady() function will see that it already fired
+                // and will schedule the callback to run right after
+                // this event loop finishes so all handlers will still execute
+                // in order and no new ones will be added to the readyList
+                // while we are processing the list
+                readyList[i].fn.call(window, readyList[i].ctx);
+            }
+            // allow any closures held by these functions to free
+            readyList = [];
+        }
+    }
+    
+    function readyStateChange() {
+    if ( document.readyState === "complete" ) {
+            ready();
+        }
+    }
+    
+    // This is the one public interface
+    // domReady(fn, context);
+    // the context argument is optional - if present, it will be passed
+    // as an argument to the callback
+    baseObj[funcName] = function(callback, context) {
+        // if ready has already fired, then just schedule the callback
+        // to fire asynchronously, but right away
+        if (readyFired) {
+            setTimeout(function() {callback(context);}, 1);
+            return;
+        } else {
+            // add the function and context to the list
+            readyList.push({fn: callback, ctx: context});
+        }
+        // if document already ready to go, schedule the ready function to run
+        if (document.readyState === "complete") {
+            setTimeout(ready, 1);
+        } else if (!readyEventHandlersInstalled) {
+            // otherwise if we don't have event handlers installed, install them
+            if (document.addEventListener) {
+                // first choice is DOMContentLoaded event
+                document.addEventListener("DOMContentLoaded", ready, false);
+                // backup is window load event
+                window.addEventListener("load", ready, false);
+            } else {
+                // must be IE
+                document.attachEvent("onreadystatechange", readyStateChange);
+                window.attachEvent("onload", ready);
+            }
+            readyEventHandlersInstalled = true;
+        }
+    }
+})("domReady", window);
+
+function confirm_link(message, url) {
+    if(confirm(message)) location.href = url;
+}
+
+
+/**
+ * 
+// test basic functionality
+domReady(function() {
+    document.body.appendChild(document.createTextNode("Hello Text 1"));
+    // test adding new domReady handler from a domReady callback
+    domReady(function() {
+        document.body.appendChild(document.createTextNode(", Hello Text 2"));
+    });
+});
+
+// test finding an ID in the document
+domReady(function() {
+    document.getElementById("test").innerHTML = "Hello ID";
+});
+
+// test calling domReady after window load and
+// domReady has already fired
+addEvent(window, "load", function() {
+    setTimeout(function() {
+    document.body.appendChild(document.createTextNode(", Hello Text 2.5"));
+        
+        domReady(function(arg) {
+            document.body.appendChild(document.createTextNode(arg));
+        }, ", Hello Text 3");
+    }, 1);
+});
+})();
+ */
Index: trunk/templates/DefaultTheme/js/LoadOnFly.js
===================================================================
--- trunk/templates/DefaultTheme/js/LoadOnFly.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/LoadOnFly.js	(revision 2)
@@ -0,0 +1,299 @@
+/**
+ * http://molily.de/js/
+ * Cross browser addEvent function by John Resig
+ * http://ejohn.org/blog/flexible-javascript-events/
+ * some samples
+ *    addEvent( document.getElementById('foo'), 'click', doSomething );
+ *    addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
+ *
+ */
+/**
+ * Cross Browser helper to addEventListener.
+ * http://webintersect.com/articles/72/add-event-listener-to-dynamic-elements
+ *
+ * @param {HTMLElement} obj The Element to attach event to.
+ * @param {string} evt The event that will trigger the binded function.
+ * @param {function(event)} fnc The function to bind to the element.
+ * @return {boolean} true if it was successfuly binded.
+ */
+var addEvent = function (obj, evt, fnc) {
+  // W3C model
+  if (obj.addEventListener) {
+    obj.addEventListener(evt, fnc, false);
+    return true;
+  }
+  // Microsoft model
+   else if (obj.attachEvent) {
+    return obj.attachEvent('on' + evt, fnc);
+  }
+  // Browser don't support W3C or MSFT model, go on with traditional
+   else {
+    evt = 'on' + evt;
+    if (typeof obj[evt] === 'function') {
+      // Object already has a function on traditional
+      // Let's wrap it with our own function inside another function
+      fnc = (function (f1, f2) {
+        return function () {
+          f1.apply(this, arguments);
+          f2.apply(this, arguments);
+        }
+      }) (obj[evt], fnc);
+    }
+    obj[evt] = fnc;
+    return true;
+  }
+  return false;
+};
+/*****************************************************************************/
+/**
+ * sample
+ *   removeEvent( object, eventType, function );
+ *
+ */
+function removeEvent(obj, ev, fn) {
+  if (obj.detachEvent) {
+    obj.detachEvent('on' + ev, obj[ev + fn]);
+    obj[ev + fn] = null;
+  } else
+  obj.removeEventListener(ev, fn, false);
+}
+/*****************************************************************************/
+
+var getBrowser = (function () {
+  var navigatorObj = navigator.appName,
+  userAgentObj = navigator.userAgent,
+  matchVersion;
+  var match = userAgentObj.match(/(opera|opr|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
+  if (match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) {
+    match[2] = matchVersion[1];
+  }
+  //mobile
+
+  if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
+    return match ? [
+      match[1],
+      match[2],
+      mobile
+    ] : [
+      navigatorObj,
+      navigator.appVersion,
+      mobile
+    ];
+  }
+  // web browser
+
+  return match ? [
+    match[1],
+    match[2]
+  ] : [
+    navigatorObj,
+    navigator.appVersion,
+    '-?'
+  ];
+}) ();
+// forEach method, could be shipped as part of an Object Literal/Module
+var forEach = function (array, callback, scope) {
+  for (var i = 0; i < array.length; i++) {
+    callback.call(scope, i, array[i]); // passes back stuff we need
+  }
+};
+function each(elm, fn) {
+  for (var i = 0, l = elm.length; i < l; i++) {
+    fn.call(elm, elm[i], i);
+  }
+}
+function doSomething(elm) {
+  if ((typeof elm !== 'undefined') || elm) console.log(elm);
+}
+/**
+ *  http://www.axel-hahn.de/blog/2015/01/21/javascript-schnipsel-html-strippen/
+ */
+
+function strip_tags(s) {
+  return s.replace(/<[^>]*>/g, '');
+}
+/**                                                                 
+ *         discuss at: http:phpjs.org/functions/dirname/
+ *               http: kevin.vanzonneveld.net
+ *        original by: Ozh
+ *        improved by: XoraX (http:www.xorax.info)
+ *          example 1: dirname('/etc/passwd');
+ *          returns 1: '/etc'
+ */
+
+var dirname = function (path) {
+  var tmp = path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '');
+  return tmp;
+};
+/**
+ * http://durhamhale.com/blog/javascript-version-of-phps-str-replace-function
+ */
+var str_replace = function (search, replace, string) {
+  return string.split(search).join(replace);
+};
+/**
+ *  trim, rtrim, ltrim
+ *  http://coursesweb.net/javascript/trim-rtrim-ltrim-javascript_cs
+ */
+var trim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+|\\s+$', 'g')  : new RegExp('^' + chr + '+|' + chr + '+$', 'g');
+  return str.replace(rgxtrim, '');
+};
+var rtrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('\\s+$')  : new RegExp(chr + '+$');
+  return str.replace(rgxtrim, '');
+};
+var ltrim = function (str, chr) {
+  var rgxtrim = (!chr) ? new RegExp('^\\s+')  : new RegExp('^' + chr + '+');
+  return str.replace(rgxtrim, '');
+};
+var confirm_link = function (message, url) { //  class="alert rounded"
+  if (confirm(message)) location.href = url;
+};
+var showMessage = (function (txt, sel) {
+  var result = window.document.getElementById('messages');
+  if (!result) {
+    return false;
+  }
+  var elm = document.createElement('P');
+  elm.setAttribute('class', sel + ' rounded');
+  elm.appendChild(document.createTextNode(txt));
+  result.appendChild(elm);
+});
+/**
+ *  http://www.javascriptkit.com/dhtmltutors/treewalker.shtml
+ *
+ */
+/********************************************************************************************************/
+var LoadOnFly = (function (nodeName, file) {
+  'use strict';
+  if (typeof file === 'undefined') {
+    return false;
+  }
+//  console.info(document.doctype);
+  if (!document.doctype) {
+    return false;
+  }
+  /*
+  var nodeDoctype = document.implementation.createDocumentType(
+   'html','',''
+  );
+      document.replaceChild(nodeDoctype, document.doctype);
+  } else {
+      document.insertBefore(nodeDoctype, document.childNodes[0]);
+  }
+*/
+  //    var LoadOnFly  = function (nodeName, url) {
+
+  var jsRegex = /.js$/gi;
+  var cssRegex = /.css$/gi;
+  var scripts = {
+  };
+  // console.info(' 0.' + file );fileExtension = file.replace(/^.*\./, '');
+  var url = file;
+  var urlExt = trim(file.replace(/^.*\./, ''));
+  var NodeList = null;
+  var len = 0;
+  var node = null;
+  var str = 'undefined';
+  var done = false;
+  //console.info( urlExt + ' = 1.) ' + url);
+  if ((typeof url !== 'undefined') && (urlExt === 'js')) {
+//    console.info(urlExt + ' = 1.) ' + url);
+    scripts[url] = false;
+    switch (nodeName) {
+      case 'body':
+        NodeList = document.body.querySelectorAll('SCRIPT');
+        break;
+      default:
+        NodeList = document.head.querySelectorAll('SCRIPT');
+        break;
+    }
+    if (NodeList) {
+      len = NodeList.length - 1;
+  }
+  //console.info(NodeList);
+  // console.info(' JS ' + url);
+
+  try {
+    var js = document.createElement('SCRIPT');
+    js.setAttribute('type', 'text/javascript'); // optional, if not a html5 node
+    js.setAttribute('src', url); // src setzen
+    js.setAttribute('charset', 'UTF-8');
+    //          js.setAttribute("async", true); // HTML5 Asyncron attribute
+    done = false;
+    if (nodeName == 'body') {
+      node = window.document.body.querySelectorAll('SCRIPT') [len];
+      node.parentNode.appendChild(js);
+      //              script.parentNode.insertBefore(js,script);
+    } else {
+      node = window.document.head.querySelectorAll('SCRIPT') [len];
+      node.parentNode.appendChild(js);
+    }
+} catch (e) {
+  var str = '<script type=\'text/javascript\' src=\'' + url + '\' charset="UTF-8"><' + '/script>';
+  document.write(str);
+}
+}
+// load css only within head
+
+if ((typeof url !== 'undefined') && (urlExt === 'css')) {
+//console.info(urlExt + ' = 2.) ' + url);
+scripts[url] = false;
+try {
+var css = document.createElement('link'),
+len = 0;
+css.setAttribute('type', 'text/css');
+css.setAttribute('rel', 'stylesheet');
+css.setAttribute('media', 'all');
+css.setAttribute('href', url);
+NodeList = window.document.querySelectorAll('LINK');
+if (NodeList) {
+  len = NodeList.length - 1;
+}
+//console.info(NodeList);
+// insert after last link element if exist otherwise before first script
+if (len > - 1) {
+  node = window.document.head.querySelectorAll('LINK') [len];
+  // console.info( len );
+//  console.info(node);
+  //    return false;
+  node.parentNode.insertBefore(css, node.nextSibling);
+  // console.info('CSS ' + url);
+} else {
+  node = window.document.head.querySelectorAll('SCRIPT') [0];
+  node.parentNode.insertBefore(css, node);
+}
+} catch (e) {
+str = '<link href=\'' + url + '\' media="all" rel="stylesheet" />';
+document.write(str);
+}
+}
+// console.info( url );
+//      showMessage(url);
+
+});
+/**
+ * 
+    document.onreadystatechange = function () {
+        if (document.readyState == "interactive") {
+console.info( 'Start readyState.interactive' );
+        }
+    }
+
+    // Alternativ zu load event
+    document.onreadystatechange = function () {
+        if (document.readyState == "complete") {
+console.info( 'Start readyState.complete' );
+        }
+    }
+
+
+window.onload = function() {
+   addEvent(document, "DOMContentLoaded", LoadOnFly);
+console.info( 'Start window.onload' );
+};
+ */
+/*
+undefined
+*/
Index: trunk/templates/DefaultTheme/js/chmod.js
===================================================================
--- trunk/templates/DefaultTheme/js/chmod.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/chmod.js	(revision 2)
@@ -0,0 +1,151 @@
+
+domReady(function() {
+
+/*
+Jeroen's Chmod Calculator- By Jeroen Vermeulen of Alphamega Hosting <jeroen@alphamegahosting.com>
+Visit http://www.javascriptkit.com for this script and more
+This notice must stay intact
+modified by Dietmar Wllbrink for WebsiteBaker CMS
+*/
+
+    function octalFilechange(  ) {
+console.error(document.Settings.chmodFile);
+        if (document.Settings.chmodFile==='undefined'){return false;}
+        var val = document.Settings.chmodFile.value;
+        var userbin = parseInt(val.charAt(1)).toString(2);
+        while (userbin.length<3) { userbin="0"+userbin; };
+//console.info( userbin );
+        var groupbin = parseInt(val.charAt(2)).toString(2);
+        while (groupbin.length<3) { groupbin="0"+groupbin; };
+//console.info( groupbin );
+        var otherbin = parseInt(val.charAt(3)).toString(2);
+        while (otherbin.length<3) { otherbin="0"+otherbin; };
+
+        document.Settings.file_u_r.checked = parseInt(userbin.charAt(0));
+        document.Settings.file_u_w.checked = parseInt(userbin.charAt(1));
+        document.Settings.file_u_e.checked = parseInt(userbin.charAt(2));
+
+        document.Settings.file_g_r.checked = parseInt(groupbin.charAt(0));
+        document.Settings.file_g_w.checked = parseInt(groupbin.charAt(1));
+        document.Settings.file_g_e.checked = parseInt(groupbin.charAt(2));
+
+        document.Settings.file_o_r.checked = parseInt(otherbin.charAt(0));
+        document.Settings.file_o_w.checked = parseInt(otherbin.charAt(1));
+        document.Settings.file_o_e.checked = parseInt(otherbin.charAt(2));
+console.info('file : ' + userbin+' '+groupbin+' '+otherbin );
+        calcFilechmod(1);
+    }
+
+    function octalDirchange(  ) {
+        if (document.Settings.chmodDir==='undefined'){return false;}
+        var val = document.Settings.chmodDir.value;
+
+        var userbin = parseInt(val.charAt(1)).toString(2);
+        while (userbin.length<3) { userbin="0"+userbin; };
+//console.info( userbin );
+        var groupbin = parseInt(val.charAt(2)).toString(2);
+        while (groupbin.length<3) { groupbin="0"+groupbin; };
+//console.info( groupbin );
+        var otherbin = parseInt(val.charAt(3)).toString(2);
+        while (otherbin.length<3) { otherbin="0"+otherbin; };
+
+        document.Settings.dir_u_r.checked = parseInt(userbin.charAt(0));
+        document.Settings.dir_u_w.checked = parseInt(userbin.charAt(1));
+        document.Settings.dir_u_e.checked = parseInt(userbin.charAt(2));
+
+        document.Settings.dir_g_r.checked = parseInt(groupbin.charAt(0));
+        document.Settings.dir_g_w.checked = parseInt(groupbin.charAt(1));
+        document.Settings.dir_g_e.checked = parseInt(groupbin.charAt(2));
+
+        document.Settings.dir_o_r.checked = parseInt(otherbin.charAt(0));
+        document.Settings.dir_o_w.checked = parseInt(otherbin.charAt(1));
+        document.Settings.dir_o_e.checked = parseInt(otherbin.charAt(2));
+console.info('dir  : ' + userbin+' '+groupbin+' '+otherbin );
+        calcDirchmod(1);
+    }
+
+    function calcFilechmod(noTotals) {
+      var users  = new Array("file_u_", "file_g_", "file_o_");
+      calc_chmod( users, noTotals, 'chmodFile' );
+    }
+    function calcDirchmod(noTotals) {
+      var users  = new Array("dir_u_", "dir_g_", "dir_o_");
+      calc_chmod( users, noTotals, 'chmodDir' );
+    }
+
+    function calc_chmod( users, noTotals, Mode ) {
+
+      var totals = new Array("","","");
+      var syms   = new Array("","","");
+
+        for (var i=0; i<users.length; i++) {
+          var user=users[i];
+            var field1 = user + "r";
+            var field2 = user + "w";
+            var field4 = user + "e";
+            //var total = "t_" + user;
+            var symbolic = "sym_" + user;
+            var number = 0;
+            var sym_string = "";
+
+            if (document.Settings[field1].checked == true) { number += 4; }
+            if (document.Settings[field2].checked == true) { number += 2; }
+            if (document.Settings[field4].checked == true) { number += 1; }
+
+            if (document.Settings[field1].checked == true) {
+                sym_string += "r";
+            } else {
+                sym_string += "-";
+            }
+            if (document.Settings[field2].checked == true) {
+                sym_string += "w";
+            } else {
+                sym_string += "-";
+            }
+            if (document.Settings[field4].checked == true) {
+                sym_string += "x";
+            } else {
+                sym_string += "-";
+            }
+            //if (number == 0) { number = ""; }
+          //document.Settings[total].value =
+            totals[i] = totals[i]+number;
+            syms[i] =  syms[i]+sym_string;
+      };
+       if ( Mode === 'chmodDir' ) {
+          if (!noTotals) {document.Settings.chmodDir.value = totals[0] + totals[1] + totals[2];}
+          document.Settings.sym_chmodDir.value = "" + syms[0] + syms[1] + syms[2];
+console.info(totals[0] + totals[1] + totals[2]);
+console.info("" + syms[0] + syms[1] + syms[2]);
+       }
+       if ( Mode === 'chmodFile' ) {
+          if (!noTotals) {document.Settings.chmodFile.value = totals[0] + totals[1] + totals[2];}
+          document.Settings.sym_chmodFile.value = "" + syms[0] + syms[1] + syms[2];
+console.info("" + syms[0] + syms[1] + syms[2]);
+       }
+    }
+
+    function addEvent ( elm ) {
+        if ( elm ){
+//console.info( elm );
+            elm.addEventListener("click", function() {
+                calcFilechmod();
+                calcDirchmod();
+            }, false);
+        }
+    }
+
+    window.onload = function () {
+        var types  = new Array( "file_u_", "file_g_", "file_o_", "dir_u_", "dir_g_", "dir_o_" ),
+            action = new Array( "r", "w", "e" );
+        for (i=0; i < types.length ; i++ ) {
+            addEvent( document.getElementById( types[i]+'r' ) );
+            addEvent( document.getElementById( types[i]+'w' ) );
+            addEvent( document.getElementById( types[i]+'e' ) );
+        }
+        octalFilechange();
+        octalDirchange();
+    }
+
+
+});
Index: trunk/templates/DefaultTheme/js/filesize.js
===================================================================
--- trunk/templates/DefaultTheme/js/filesize.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/filesize.js	(revision 2)
@@ -0,0 +1,140 @@
+"use strict";
+
+/**
+ * filesize
+ *
+ * @copyright 2016 Jason Mulligan <jason.mulligan@avoidwork.com>
+ * @license BSD-3-Clause
+ * @version 3.2.1
+ */
+(function (global) {
+	var b = /^(b|B)$/;
+	var symbol = {
+		bits: ["b", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb"],
+		bytes: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
+	};
+
+	/**
+  * filesize
+  *
+  * @method filesize
+  * @param  {Mixed}   arg        String, Int or Float to transform
+  * @param  {Object}  descriptor [Optional] Flags
+  * @return {String}             Readable file size String
+  */
+	function filesize(arg) {
+		var descriptor = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+		var result = [],
+		    val = 0,
+		    e = undefined,
+		    base = undefined,
+		    bits = undefined,
+		    ceil = undefined,
+		    neg = undefined,
+		    num = undefined,
+		    output = undefined,
+		    round = undefined,
+		    unix = undefined,
+		    spacer = undefined,
+		    symbols = undefined;
+
+		if (isNaN(arg)) {
+			throw new Error("Invalid arguments");
+		}
+
+		bits = descriptor.bits === true;
+		unix = descriptor.unix === true;
+		base = descriptor.base || 2;
+		round = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2;
+		spacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? "" : " ";
+		symbols = descriptor.symbols || descriptor.suffixes || {};
+		output = descriptor.output || "string";
+		e = descriptor.exponent !== undefined ? descriptor.exponent : -1;
+		num = Number(arg);
+		neg = num < 0;
+		ceil = base > 2 ? 1000 : 1024;
+
+		// Flipping a negative number to determine the size
+		if (neg) {
+			num = -num;
+		}
+
+		// Zero is now a special case because bytes divide by 1
+		if (num === 0) {
+			result[0] = 0;
+			result[1] = unix ? "" : !bits ? "B" : "b";
+		} else {
+			// Determining the exponent
+			if (e === -1 || isNaN(e)) {
+				e = Math.floor(Math.log(num) / Math.log(ceil));
+
+				if (e < 0) {
+					e = 0;
+				}
+			}
+
+			// Exceeding supported length, time to reduce & multiply
+			if (e > 8) {
+				e = 8;
+			}
+
+			val = base === 2 ? num / Math.pow(2, e * 10) : num / Math.pow(1000, e);
+
+			if (bits) {
+				val = val * 8;
+
+				if (val > ceil && e < 8) {
+					val = val / ceil;
+					e++;
+				}
+			}
+
+			result[0] = Number(val.toFixed(e > 0 ? round : 0));
+			result[1] = base === 10 && e === 1 ? bits ? "kb" : "kB" : symbol[bits ? "bits" : "bytes"][e];
+
+			if (unix) {
+				result[1] = result[1].charAt(0);
+
+				if (b.test(result[1])) {
+					result[0] = Math.floor(result[0]);
+					result[1] = "";
+				}
+			}
+		}
+
+		// Decorating a 'diff'
+		if (neg) {
+			result[0] = -result[0];
+		}
+
+		// Applying custom suffix
+		result[1] = symbols[result[1]] || result[1];
+
+		// Returning Array, Object, or String (default)
+		if (output === "array") {
+			return result;
+		}
+
+		if (output === "exponent") {
+			return e;
+		}
+
+		if (output === "object") {
+			return { value: result[0], suffix: result[1], symbol: result[1] };
+		}
+
+		return result.join(spacer);
+	}
+
+	// CommonJS, AMD, script tag
+	if (typeof exports !== "undefined") {
+		module.exports = filesize;
+	} else if (typeof define === "function" && define.amd) {
+		define(function () {
+			return filesize;
+		});
+	} else {
+		global.filesize = filesize;
+	}
+})(typeof window !== "undefined" ? window : global);
Index: trunk/templates/DefaultTheme/js/filesize.min.js
===================================================================
--- trunk/templates/DefaultTheme/js/filesize.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/filesize.min.js	(revision 2)
@@ -0,0 +1,6 @@
+/*
+ 2016 
+ @version 3.2.1
+ */
+"use strict";!function(a){function b(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],e=[],f=0,g=void 0,h=void 0,i=void 0,j=void 0,k=void 0,l=void 0,m=void 0,n=void 0,o=void 0,p=void 0,q=void 0;if(isNaN(a))throw new Error("Invalid arguments");return i=b.bits===!0,o=b.unix===!0,h=b.base||2,n=void 0!==b.round?b.round:o?1:2,p=void 0!==b.spacer?b.spacer:o?"":" ",q=b.symbols||b.suffixes||{},m=b.output||"string",g=void 0!==b.exponent?b.exponent:-1,l=Number(a),k=0>l,j=h>2?1e3:1024,k&&(l=-l),0===l?(e[0]=0,e[1]=o?"":i?"b":"B"):((-1===g||isNaN(g))&&(g=Math.floor(Math.log(l)/Math.log(j)),0>g&&(g=0)),g>8&&(g=8),f=2===h?l/Math.pow(2,10*g):l/Math.pow(1e3,g),i&&(f=8*f,f>j&&8>g&&(f/=j,g++)),e[0]=Number(f.toFixed(g>0?n:0)),e[1]=10===h&&1===g?i?"kb":"kB":d[i?"bits":"bytes"][g],o&&(e[1]=e[1].charAt(0),c.test(e[1])&&(e[0]=Math.floor(e[0]),e[1]=""))),k&&(e[0]=-e[0]),e[1]=q[e[1]]||e[1],"array"===m?e:"exponent"===m?g:"object"===m?{value:e[0],suffix:e[1],symbol:e[1]}:e.join(p)}var c=/^(b|B)$/,d={bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]};"undefined"!=typeof exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):a.filesize=b}("undefined"!=typeof window?window:global);
+//# sourceMappingURL=filesize.min.js.map
\ No newline at end of file
Index: trunk/templates/DefaultTheme/js/insertScript.js
===================================================================
--- trunk/templates/DefaultTheme/js/insertScript.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/insertScript.js	(revision 2)
@@ -0,0 +1,21 @@
+// loadScript - Loads a single Javascript file into the browser
+// Arguments:
+//    url - the address of the script file
+//    callback - called when the script has been loaded
+var loadScript = (function(url, callback) {
+   if (callback == null) { callback = function() {}; }
+//   var head = document.getElementsByTagName("head")[0];
+   var body = document.getElementsByTagName("body")[0];
+   var script = document.createElement("script");
+
+   script.type = "text/javascript";
+   script.addEventListener("load", function() {
+      script.onLoad = null;
+      callback(script);
+   });
+   script.onLoad = function () {};
+   script.src = url;
+//   head.appendChild(script);
+   body.appendChild(script);
+});
+
Index: trunk/templates/DefaultTheme/js/jquery-plugins.js
===================================================================
--- trunk/templates/DefaultTheme/js/jquery-plugins.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/jquery-plugins.js	(revision 2)
@@ -0,0 +1,127 @@
+    function include_file(filename, filetype) {
+        if(!filetype)
+            var filetype = 'js'; //js default filetype
+        var th = document.getElementsByTagName('head')[0];
+        var s  = document.createElement((filetype == "js") ? 'script' : 'link');
+        s.setAttribute('type',(filetype == "js") ? 'text/javascript' : 'text/css');
+        if (filetype == "css")
+            s.setAttribute('rel','stylesheet');
+        s.setAttribute((filetype == "js") ? 'src' : 'href', filename);
+        th.appendChild(s);
+    }
+
+    function redirect_to_page (url, timer) {
+        if (timer < 0 ) {
+            self.location.replace (url);
+        } else {
+            setTimeout('self.location.href="'+url+'"', timer);
+        }
+    }
+
+function replaceAllBackSlash(targetStr){
+      var index=targetStr.indexOf("\\");
+      while(index >= 0){
+          targetStr=targetStr.replace("\\","");
+          index=targetStr.indexOf("\\");
+      }
+      return targetStr;
+  }
+
+    function loadErrorFile() {
+        var errorModal = $('#errorModal');
+//console.info(errorModal);
+        $('#ErrorIFrameBox').load( (THEME_URL+"/LoadErrorlog.php") )
+    }
+
+    function delete_error_log(ev){
+        var errorModal = $('#errorModal');
+        var iframe = $('#ErrorIFrameBox');
+        var action = '0';
+        var img = $('#deleteImg');
+//console.info(iframe);
+//console.info(img);
+        if( img.attr("src") == THEME_URL+"images/remove_0.png") {
+            var action = "show";
+            var src = THEME_URL+"images/remove_1.png";
+        } else {
+            var action = "0";
+            var src = THEME_URL+"images/remove_0.png";
+        }
+       $.ajax({
+            url: THEME_URL+"/delete_errorlog.php",
+            type: "POST",
+            data: 'action='+action,
+            dataType: 'json',
+            success: function(data) {
+                if(data.success == "true") {
+                    $('#ErrorIFrameBox').empty();
+                    $('#ErrorIFrameBox').load(THEME_URL+"/LoadErrorlog.php")
+                    src = THEME_URL+'/images/remove_0.png'
+                    img.attr("src", src);
+                    img.attr("title", data.message);
+                } else {
+                    alert(data.message);
+                }
+            },
+            complete: function() {}
+        });
+    }
+/*
+*/
+    domReady(function(){
+
+//        var matches = document.querySelectorAll(".jcalendar");
+        if( document.querySelectorAll(".jcalendar").length > 0 ) {
+            var JCalendarCss = WB_URL+"/include/jscalendar/calendar-system.css";
+            if (typeof LoadOnFly ==='undefined'){
+              $.insert(JCalendarCss);
+            } else {
+              LoadOnFly('head', JCalendarCss);
+            }
+        }
+
+        if( document.querySelectorAll(".jsadmin").length > 0 ) {
+            var JsAdminCss = WB_URL+"/modules/jsadmin/backend.css";
+            if (typeof LoadOnFly ==='undefined'){
+              $.insert(JsAdminCss);
+            } else {
+              LoadOnFly('head', JsAdminCss);
+            }
+        }
+
+        elm = document.getElementsByTagName('form');
+//console.info(elm);
+          for (i=0; elm[i]; i++) {
+            if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+                elm[i].setAttribute('autocomplete', 'off');
+            }
+            if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+                elm[i].setAttribute('accept-charset', 'utf-8');
+            }
+          }
+/*
+*/
+        var errorlog = document.getElementById('delete_php_error-log');
+            errorlog.addEventListener('click', delete_error_log);
+
+/**
+ *
+var frm = document.getElementsByName("preferences_save");
+console.info(frm);
+   frm.reset();  // Reset
+
+   //Add external link class to external links -
+   $('a[href^="http://"]').filter(function() {
+      //Compare the anchor tag's host name with location's host name
+       return this.hostname && this.hostname !== location.hostname;
+     }).addClass("external").attr("target", "_blank");
+
+   //* Add internal link class to external links -
+   $('a[href^="http://"]').filter(function() {
+      //Compare the anchor tag's host name with location's host name
+       return this.hostname && this.hostname == location.hostname;
+     }).addClass("internal");
+   $('form').attr('autocomplete', 'off');
+ */
+
+    });
Index: trunk/templates/DefaultTheme/js/setting.js
===================================================================
--- trunk/templates/DefaultTheme/js/setting.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/setting.js	(revision 2)
@@ -0,0 +1,105 @@
+function change_os(type) {
+    if(type === 'linux') {
+        document.getElementById('file_perms_box1').style.display = 'block';
+console.info(type);
+        document.getElementById('file_perms_box2').style.display = 'block';
+        document.getElementById('file_perms_box3').style.display = 'block';
+    } else if(type === 'windows') {
+        document.getElementById('file_perms_box1').style.display = 'none';
+console.info(type);
+        document.getElementById('file_perms_box2').style.display = 'none';
+        document.getElementById('file_perms_box3').style.display = 'none';
+    }
+}
+
+function change_wbmailer(type) {
+    if(type === 'smtp') {
+        document.getElementById('row_wbmailer_smtp_settings').style.display = '';
+        document.getElementById('row_wbmailer_smtp_host').style.display = '';
+        document.getElementById('row_wbmailer_smtp_port').style.display = '';
+        document.getElementById('row_wbmailer_smtp_secure').style.display = '';
+        document.getElementById('row_wbmailer_smtp_auth_mode').style.display = '';
+        document.getElementById('row_wbmailer_smtp_username').style.display = '';
+        document.getElementById('row_wbmailer_smtp_password').style.display = '';
+    } else if(type === 'phpmail') {
+        document.getElementById('row_wbmailer_smtp_settings').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_host').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_port').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_secure').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_auth_mode').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_username').style.display = 'none';
+        document.getElementById('row_wbmailer_smtp_password').style.display = 'none';
+    }
+}
+/*  */
+function toggle_wbmailer_auth( elm ) {
+        if ( elm.checked == true ) {
+            elm.checked = false;
+            document.getElementById('row_wbmailer_smtp_username').style.display = 'none';
+            document.getElementById('row_wbmailer_smtp_password').style.display = 'none';
+        }
+        else  {
+            elm.checked = true;
+            document.getElementById('row_wbmailer_smtp_username').style.display = 'block';
+            document.getElementById('row_wbmailer_smtp_password').style.display = 'block';
+        }
+console.info(elm);
+}
+
+function toggle_wbmailer_secure( elm ) {
+        if ( elm.value === '465' ) {
+            document.getElementById('wbmailer_smtp_secure').value = 'SSL';
+console.info(elm);
+        }
+        else  {
+//            document.getElementById('wbmailer_smtp_secure').value = 'block';
+        }
+}
+
+domReady(function() {
+
+    var system_linux = document.getElementById("operating_system_linux");
+    if ( system_linux ){
+        system_linux.addEventListener("click", function() {
+            change_os( 'linux' );
+        }, false);
+    }
+
+    var system_windows = document.getElementById("operating_system_windows");
+    if ( system_windows ){
+        system_windows.addEventListener("click", function() {
+            change_os( 'windows' );
+        }, false);
+    }
+
+    var phpmail = document.getElementById("wbmailer_routine_phpmail");
+    if ( phpmail ){
+        phpmail.addEventListener("click", function() {
+            change_wbmailer( 'phpmail' );
+        }, false);
+    }
+
+    var smtp = document.getElementById("wbmailer_routine_smtp");
+    if ( smtp ){
+        smtp.addEventListener("click", function() {
+            change_wbmailer( 'smtp' );
+        }, false);
+    }
+
+    var smtpAuth = document.getElementById("wbmailer_smtp_auth");
+    if ( smtpAuth ){
+        smtpAuth.addEventListener("click", function() {
+            toggle_wbmailer_auth( smtpAuth );
+        }, false);
+    }
+
+    var smtpPort = document.getElementById("wbmailer_smtp_port");
+    if ( smtpPort ){
+        smtpPort.addEventListener("change", function() {
+            toggle_wbmailer_secure( smtpPort );
+        }, false);
+    }
+
+});
+
+
Index: trunk/templates/DefaultTheme/js/sweetalert-dev.js
===================================================================
--- trunk/templates/DefaultTheme/js/sweetalert-dev.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/sweetalert-dev.js	(revision 2)
@@ -0,0 +1,1285 @@
+;(function(window, document, undefined) {
+  "use strict";
+  
+  (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+'use strict';
+
+var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; };
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+// SweetAlert
+// 2014-2015 (c) - Tristan Edwards
+// github.com/t4t5/sweetalert
+
+/*
+ * jQuery-like functions for manipulating the DOM
+ */
+
+var _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation = require('./modules/handle-dom');
+
+/*
+ * Handy utilities
+ */
+
+var _extend$hexToRgb$isIE8$logStr$colorLuminance = require('./modules/utils');
+
+/*
+ *  Handle sweetAlert's DOM elements
+ */
+
+var _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition = require('./modules/handle-swal-dom');
+
+// Handle button events and keyboard events
+
+var _handleButton$handleConfirm$handleCancel = require('./modules/handle-click');
+
+var _handleKeyDown = require('./modules/handle-key');
+
+var _handleKeyDown2 = _interopRequireWildcard(_handleKeyDown);
+
+// Default values
+
+var _defaultParams = require('./modules/default-params');
+
+var _defaultParams2 = _interopRequireWildcard(_defaultParams);
+
+var _setParameters = require('./modules/set-params');
+
+var _setParameters2 = _interopRequireWildcard(_setParameters);
+
+/*
+ * Remember state in cases where opening and handling a modal will fiddle with it.
+ * (We also use window.previousActiveElement as a global variable)
+ */
+var previousWindowKeyDown;
+var lastFocusedButton;
+
+/*
+ * Global sweetAlert function
+ * (this is what the user calls)
+ */
+var sweetAlert, swal;
+
+exports['default'] = sweetAlert = swal = function () {
+  var customizations = arguments[0];
+
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.addClass(document.body, 'stop-scrolling');
+  _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.resetInput();
+
+  /*
+   * Use argument if defined or default value from params object otherwise.
+   * Supports the case where a default value is boolean true and should be
+   * overridden by a corresponding explicit argument which is boolean false.
+   */
+  function argumentOrDefault(key) {
+    var args = customizations;
+    return args[key] === undefined ? _defaultParams2['default'][key] : args[key];
+  }
+
+  if (customizations === undefined) {
+    _extend$hexToRgb$isIE8$logStr$colorLuminance.logStr('SweetAlert expects at least 1 attribute!');
+    return false;
+  }
+
+  var params = _extend$hexToRgb$isIE8$logStr$colorLuminance.extend({}, _defaultParams2['default']);
+
+  switch (typeof customizations) {
+
+    // Ex: swal("Hello", "Just testing", "info");
+    case 'string':
+      params.title = customizations;
+      params.text = arguments[1] || '';
+      params.type = arguments[2] || '';
+      break;
+
+    // Ex: swal({ title:"Hello", text: "Just testing", type: "info" });
+    case 'object':
+      if (customizations.title === undefined) {
+        _extend$hexToRgb$isIE8$logStr$colorLuminance.logStr('Missing "title" argument!');
+        return false;
+      }
+
+      params.title = customizations.title;
+
+      for (var customName in _defaultParams2['default']) {
+        params[customName] = argumentOrDefault(customName);
+      }
+
+      // Show "Confirm" instead of "OK" if cancel button is visible
+      params.confirmButtonText = params.showCancelButton ? 'Confirm' : _defaultParams2['default'].confirmButtonText;
+      params.confirmButtonText = argumentOrDefault('confirmButtonText');
+
+      // Callback function when clicking on "OK"/"Cancel"
+      params.doneFunction = arguments[1] || null;
+
+      break;
+
+    default:
+      _extend$hexToRgb$isIE8$logStr$colorLuminance.logStr('Unexpected type of argument! Expected "string" or "object", got ' + typeof customizations);
+      return false;
+
+  }
+
+  _setParameters2['default'](params);
+  _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.fixVerticalPosition();
+  _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.openModal(arguments[1]);
+
+  // Modal interactions
+  var modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+
+  /*
+   * Make sure all modal buttons respond to all events
+   */
+  var $buttons = modal.querySelectorAll('button');
+  var buttonEvents = ['onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'onfocus'];
+  var onButtonEvent = function onButtonEvent(e) {
+    return _handleButton$handleConfirm$handleCancel.handleButton(e, params, modal);
+  };
+
+  for (var btnIndex = 0; btnIndex < $buttons.length; btnIndex++) {
+    for (var evtIndex = 0; evtIndex < buttonEvents.length; evtIndex++) {
+      var btnEvt = buttonEvents[evtIndex];
+      $buttons[btnIndex][btnEvt] = onButtonEvent;
+    }
+  }
+
+  // Clicking outside the modal dismisses it (if allowed by user)
+  _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getOverlay().onclick = onButtonEvent;
+
+  previousWindowKeyDown = window.onkeydown;
+
+  var onKeyEvent = function onKeyEvent(e) {
+    return _handleKeyDown2['default'](e, params, modal);
+  };
+  window.onkeydown = onKeyEvent;
+
+  window.onfocus = function () {
+    // When the user has focused away and focused back from the whole window.
+    setTimeout(function () {
+      // Put in a timeout to jump out of the event sequence.
+      // Calling focus() in the event sequence confuses things.
+      if (lastFocusedButton !== undefined) {
+        lastFocusedButton.focus();
+        lastFocusedButton = undefined;
+      }
+    }, 0);
+  };
+
+  // Show alert with enabled buttons always
+  swal.enableButtons();
+};
+
+/*
+ * Set default params for each popup
+ * @param {Object} userParams
+ */
+sweetAlert.setDefaults = swal.setDefaults = function (userParams) {
+  if (!userParams) {
+    throw new Error('userParams is required');
+  }
+  if (typeof userParams !== 'object') {
+    throw new Error('userParams has to be a object');
+  }
+
+  _extend$hexToRgb$isIE8$logStr$colorLuminance.extend(_defaultParams2['default'], userParams);
+};
+
+/*
+ * Animation when closing modal
+ */
+sweetAlert.close = swal.close = function () {
+  var modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.fadeOut(_sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getOverlay(), 5);
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.fadeOut(modal, 5);
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass(modal, 'showSweetAlert');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.addClass(modal, 'hideSweetAlert');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass(modal, 'visible');
+
+  /*
+   * Reset icon animations
+   */
+  var $successIcon = modal.querySelector('.sa-icon.sa-success');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($successIcon, 'animate');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($successIcon.querySelector('.sa-tip'), 'animateSuccessTip');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($successIcon.querySelector('.sa-long'), 'animateSuccessLong');
+
+  var $errorIcon = modal.querySelector('.sa-icon.sa-error');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($errorIcon, 'animateErrorIcon');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($errorIcon.querySelector('.sa-x-mark'), 'animateXMark');
+
+  var $warningIcon = modal.querySelector('.sa-icon.sa-warning');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($warningIcon, 'pulseWarning');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($warningIcon.querySelector('.sa-body'), 'pulseWarningIns');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($warningIcon.querySelector('.sa-dot'), 'pulseWarningIns');
+
+  // Reset custom class (delay so that UI changes aren't visible)
+  setTimeout(function () {
+    var customClass = modal.getAttribute('data-custom-class');
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass(modal, customClass);
+  }, 300);
+
+  // Make page scrollable again
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass(document.body, 'stop-scrolling');
+
+  // Reset the page to its previous state
+  window.onkeydown = previousWindowKeyDown;
+  if (window.previousActiveElement) {
+    window.previousActiveElement.focus();
+  }
+  lastFocusedButton = undefined;
+  clearTimeout(modal.timeout);
+
+  return true;
+};
+
+/*
+ * Validation of the input field is done by user
+ * If something is wrong => call showInputError with errorMessage
+ */
+sweetAlert.showInputError = swal.showInputError = function (errorMessage) {
+  var modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+
+  var $errorIcon = modal.querySelector('.sa-input-error');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.addClass($errorIcon, 'show');
+
+  var $errorContainer = modal.querySelector('.sa-error-container');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.addClass($errorContainer, 'show');
+
+  $errorContainer.querySelector('p').innerHTML = errorMessage;
+
+  setTimeout(function () {
+    sweetAlert.enableButtons();
+  }, 1);
+
+  modal.querySelector('input').focus();
+};
+
+/*
+ * Reset input error DOM elements
+ */
+sweetAlert.resetInputError = swal.resetInputError = function (event) {
+  // If press enter => ignore
+  if (event && event.keyCode === 13) {
+    return false;
+  }
+
+  var $modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+
+  var $errorIcon = $modal.querySelector('.sa-input-error');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($errorIcon, 'show');
+
+  var $errorContainer = $modal.querySelector('.sa-error-container');
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide$isDescendant$getTopMargin$fadeIn$fadeOut$fireClick$stopEventPropagation.removeClass($errorContainer, 'show');
+};
+
+/*
+ * Disable confirm and cancel buttons
+ */
+sweetAlert.disableButtons = swal.disableButtons = function (event) {
+  var modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+  var $confirmButton = modal.querySelector('button.confirm');
+  var $cancelButton = modal.querySelector('button.cancel');
+  $confirmButton.disabled = true;
+  $cancelButton.disabled = true;
+};
+
+/*
+ * Enable confirm and cancel buttons
+ */
+sweetAlert.enableButtons = swal.enableButtons = function (event) {
+  var modal = _sweetAlertInitialize$getModal$getOverlay$getInput$setFocusStyle$openModal$resetInput$fixVerticalPosition.getModal();
+  var $confirmButton = modal.querySelector('button.confirm');
+  var $cancelButton = modal.querySelector('button.cancel');
+  $confirmButton.disabled = false;
+  $cancelButton.disabled = false;
+};
+
+if (typeof window !== 'undefined') {
+  // The 'handle-click' module requires
+  // that 'sweetAlert' was set as global.
+  window.sweetAlert = window.swal = sweetAlert;
+} else {
+  _extend$hexToRgb$isIE8$logStr$colorLuminance.logStr('SweetAlert is a frontend module!');
+}
+module.exports = exports['default'];
+
+},{"./modules/default-params":2,"./modules/handle-click":3,"./modules/handle-dom":4,"./modules/handle-key":5,"./modules/handle-swal-dom":6,"./modules/set-params":8,"./modules/utils":9}],2:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+var defaultParams = {
+  title: '',
+  text: '',
+  type: null,
+  allowOutsideClick: false,
+  showConfirmButton: true,
+  showCancelButton: false,
+  closeOnConfirm: true,
+  closeOnCancel: true,
+  confirmButtonText: 'OK',
+  confirmButtonColor: '#8CD4F5',
+  cancelButtonText: 'Cancel',
+  imageUrl: null,
+  imageSize: null,
+  timer: null,
+  customClass: '',
+  html: false,
+  animation: true,
+  allowEscapeKey: true,
+  inputType: 'text',
+  inputPlaceholder: '',
+  inputValue: '',
+  showLoaderOnConfirm: false
+};
+
+exports['default'] = defaultParams;
+module.exports = exports['default'];
+
+},{}],3:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+
+var _colorLuminance = require('./utils');
+
+var _getModal = require('./handle-swal-dom');
+
+var _hasClass$isDescendant = require('./handle-dom');
+
+/*
+ * User clicked on "Confirm"/"OK" or "Cancel"
+ */
+var handleButton = function handleButton(event, params, modal) {
+  var e = event || window.event;
+  var target = e.target || e.srcElement;
+
+  var targetedConfirm = target.className.indexOf('confirm') !== -1;
+  var targetedOverlay = target.className.indexOf('sweet-overlay') !== -1;
+  var modalIsVisible = _hasClass$isDescendant.hasClass(modal, 'visible');
+  var doneFunctionExists = params.doneFunction && modal.getAttribute('data-has-done-function') === 'true';
+
+  // Since the user can change the background-color of the confirm button programmatically,
+  // we must calculate what the color should be on hover/active
+  var normalColor, hoverColor, activeColor;
+  if (targetedConfirm && params.confirmButtonColor) {
+    normalColor = params.confirmButtonColor;
+    hoverColor = _colorLuminance.colorLuminance(normalColor, -0.04);
+    activeColor = _colorLuminance.colorLuminance(normalColor, -0.14);
+  }
+
+  function shouldSetConfirmButtonColor(color) {
+    if (targetedConfirm && params.confirmButtonColor) {
+      target.style.backgroundColor = color;
+    }
+  }
+
+  switch (e.type) {
+    case 'mouseover':
+      shouldSetConfirmButtonColor(hoverColor);
+      break;
+
+    case 'mouseout':
+      shouldSetConfirmButtonColor(normalColor);
+      break;
+
+    case 'mousedown':
+      shouldSetConfirmButtonColor(activeColor);
+      break;
+
+    case 'mouseup':
+      shouldSetConfirmButtonColor(hoverColor);
+      break;
+
+    case 'focus':
+      var $confirmButton = modal.querySelector('button.confirm');
+      var $cancelButton = modal.querySelector('button.cancel');
+
+      if (targetedConfirm) {
+        $cancelButton.style.boxShadow = 'none';
+      } else {
+        $confirmButton.style.boxShadow = 'none';
+      }
+      break;
+
+    case 'click':
+      var clickedOnModal = modal === target;
+      var clickedOnModalChild = _hasClass$isDescendant.isDescendant(modal, target);
+
+      // Ignore click outside if allowOutsideClick is false
+      if (!clickedOnModal && !clickedOnModalChild && modalIsVisible && !params.allowOutsideClick) {
+        break;
+      }
+
+      if (targetedConfirm && doneFunctionExists && modalIsVisible) {
+        handleConfirm(modal, params);
+      } else if (doneFunctionExists && modalIsVisible || targetedOverlay) {
+        handleCancel(modal, params);
+      } else if (_hasClass$isDescendant.isDescendant(modal, target) && target.tagName === 'BUTTON') {
+        sweetAlert.close();
+      }
+      break;
+  }
+};
+
+/*
+ *  User clicked on "Confirm"/"OK"
+ */
+var handleConfirm = function handleConfirm(modal, params) {
+  var callbackValue = true;
+
+  if (_hasClass$isDescendant.hasClass(modal, 'show-input')) {
+    callbackValue = modal.querySelector('input').value;
+
+    if (!callbackValue) {
+      callbackValue = '';
+    }
+  }
+
+  params.doneFunction(callbackValue);
+
+  if (params.closeOnConfirm) {
+    sweetAlert.close();
+  }
+  // Disable cancel and confirm button if the parameter is true
+  if (params.showLoaderOnConfirm) {
+    sweetAlert.disableButtons();
+  }
+};
+
+/*
+ *  User clicked on "Cancel"
+ */
+var handleCancel = function handleCancel(modal, params) {
+  // Check if callback function expects a parameter (to track cancel actions)
+  var functionAsStr = String(params.doneFunction).replace(/\s/g, '');
+  var functionHandlesCancel = functionAsStr.substring(0, 9) === 'function(' && functionAsStr.substring(9, 10) !== ')';
+
+  if (functionHandlesCancel) {
+    params.doneFunction(false);
+  }
+
+  if (params.closeOnCancel) {
+    sweetAlert.close();
+  }
+};
+
+exports['default'] = {
+  handleButton: handleButton,
+  handleConfirm: handleConfirm,
+  handleCancel: handleCancel
+};
+module.exports = exports['default'];
+
+},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],4:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+var hasClass = function hasClass(elem, className) {
+  return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
+};
+
+var addClass = function addClass(elem, className) {
+  if (!hasClass(elem, className)) {
+    elem.className += ' ' + className;
+  }
+};
+
+var removeClass = function removeClass(elem, className) {
+  var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, ' ') + ' ';
+  if (hasClass(elem, className)) {
+    while (newClass.indexOf(' ' + className + ' ') >= 0) {
+      newClass = newClass.replace(' ' + className + ' ', ' ');
+    }
+    elem.className = newClass.replace(/^\s+|\s+$/g, '');
+  }
+};
+
+var escapeHtml = function escapeHtml(str) {
+  var div = document.createElement('div');
+  div.appendChild(document.createTextNode(str));
+  return div.innerHTML;
+};
+
+var _show = function _show(elem) {
+  elem.style.opacity = '';
+  elem.style.display = 'block';
+};
+
+var show = function show(elems) {
+  if (elems && !elems.length) {
+    return _show(elems);
+  }
+  for (var i = 0; i < elems.length; ++i) {
+    _show(elems[i]);
+  }
+};
+
+var _hide = function _hide(elem) {
+  elem.style.opacity = '';
+  elem.style.display = 'none';
+};
+
+var hide = function hide(elems) {
+  if (elems && !elems.length) {
+    return _hide(elems);
+  }
+  for (var i = 0; i < elems.length; ++i) {
+    _hide(elems[i]);
+  }
+};
+
+var isDescendant = function isDescendant(parent, child) {
+  var node = child.parentNode;
+  while (node !== null) {
+    if (node === parent) {
+      return true;
+    }
+    node = node.parentNode;
+  }
+  return false;
+};
+
+var getTopMargin = function getTopMargin(elem) {
+  elem.style.left = '-9999px';
+  elem.style.display = 'block';
+
+  var height = elem.clientHeight,
+      padding;
+  if (typeof getComputedStyle !== 'undefined') {
+    // IE 8
+    padding = parseInt(getComputedStyle(elem).getPropertyValue('padding-top'), 10);
+  } else {
+    padding = parseInt(elem.currentStyle.padding);
+  }
+
+  elem.style.left = '';
+  elem.style.display = 'none';
+  return '-' + parseInt((height + padding) / 2) + 'px';
+};
+
+var fadeIn = function fadeIn(elem, interval) {
+  if (+elem.style.opacity < 1) {
+    interval = interval || 16;
+    elem.style.opacity = 0;
+    elem.style.display = 'block';
+    var last = +new Date();
+    var tick = (function (_tick) {
+      function tick() {
+        return _tick.apply(this, arguments);
+      }
+
+      tick.toString = function () {
+        return _tick.toString();
+      };
+
+      return tick;
+    })(function () {
+      elem.style.opacity = +elem.style.opacity + (new Date() - last) / 100;
+      last = +new Date();
+
+      if (+elem.style.opacity < 1) {
+        setTimeout(tick, interval);
+      }
+    });
+    tick();
+  }
+  elem.style.display = 'block'; //fallback IE8
+};
+
+var fadeOut = function fadeOut(elem, interval) {
+  interval = interval || 16;
+  elem.style.opacity = 1;
+  var last = +new Date();
+  var tick = (function (_tick2) {
+    function tick() {
+      return _tick2.apply(this, arguments);
+    }
+
+    tick.toString = function () {
+      return _tick2.toString();
+    };
+
+    return tick;
+  })(function () {
+    elem.style.opacity = +elem.style.opacity - (new Date() - last) / 100;
+    last = +new Date();
+
+    if (+elem.style.opacity > 0) {
+      setTimeout(tick, interval);
+    } else {
+      elem.style.display = 'none';
+    }
+  });
+  tick();
+};
+
+var fireClick = function fireClick(node) {
+  // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/
+  // Then fixed for today's Chrome browser.
+  if (typeof MouseEvent === 'function') {
+    // Up-to-date approach
+    var mevt = new MouseEvent('click', {
+      view: window,
+      bubbles: false,
+      cancelable: true
+    });
+    node.dispatchEvent(mevt);
+  } else if (document.createEvent) {
+    // Fallback
+    var evt = document.createEvent('MouseEvents');
+    evt.initEvent('click', false, false);
+    node.dispatchEvent(evt);
+  } else if (document.createEventObject) {
+    node.fireEvent('onclick');
+  } else if (typeof node.onclick === 'function') {
+    node.onclick();
+  }
+};
+
+var stopEventPropagation = function stopEventPropagation(e) {
+  // In particular, make sure the space bar doesn't scroll the main window.
+  if (typeof e.stopPropagation === 'function') {
+    e.stopPropagation();
+    e.preventDefault();
+  } else if (window.event && window.event.hasOwnProperty('cancelBubble')) {
+    window.event.cancelBubble = true;
+  }
+};
+
+exports.hasClass = hasClass;
+exports.addClass = addClass;
+exports.removeClass = removeClass;
+exports.escapeHtml = escapeHtml;
+exports._show = _show;
+exports.show = show;
+exports._hide = _hide;
+exports.hide = hide;
+exports.isDescendant = isDescendant;
+exports.getTopMargin = getTopMargin;
+exports.fadeIn = fadeIn;
+exports.fadeOut = fadeOut;
+exports.fireClick = fireClick;
+exports.stopEventPropagation = stopEventPropagation;
+
+},{}],5:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+
+var _stopEventPropagation$fireClick = require('./handle-dom');
+
+var _setFocusStyle = require('./handle-swal-dom');
+
+var handleKeyDown = function handleKeyDown(event, params, modal) {
+  var e = event || window.event;
+  var keyCode = e.keyCode || e.which;
+
+  var $okButton = modal.querySelector('button.confirm');
+  var $cancelButton = modal.querySelector('button.cancel');
+  var $modalButtons = modal.querySelectorAll('button[tabindex]');
+
+  if ([9, 13, 32, 27].indexOf(keyCode) === -1) {
+    // Don't do work on keys we don't care about.
+    return;
+  }
+
+  var $targetElement = e.target || e.srcElement;
+
+  var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.
+  for (var i = 0; i < $modalButtons.length; i++) {
+    if ($targetElement === $modalButtons[i]) {
+      btnIndex = i;
+      break;
+    }
+  }
+
+  if (keyCode === 9) {
+    // TAB
+    if (btnIndex === -1) {
+      // No button focused. Jump to the confirm button.
+      $targetElement = $okButton;
+    } else {
+      // Cycle to the next button
+      if (btnIndex === $modalButtons.length - 1) {
+        $targetElement = $modalButtons[0];
+      } else {
+        $targetElement = $modalButtons[btnIndex + 1];
+      }
+    }
+
+    _stopEventPropagation$fireClick.stopEventPropagation(e);
+    $targetElement.focus();
+
+    if (params.confirmButtonColor) {
+      _setFocusStyle.setFocusStyle($targetElement, params.confirmButtonColor);
+    }
+  } else {
+    if (keyCode === 13) {
+      if ($targetElement.tagName === 'INPUT') {
+        $targetElement = $okButton;
+        $okButton.focus();
+      }
+
+      if (btnIndex === -1) {
+        // ENTER/SPACE clicked outside of a button.
+        $targetElement = $okButton;
+      } else {
+        // Do nothing - let the browser handle it.
+        $targetElement = undefined;
+      }
+    } else if (keyCode === 27 && params.allowEscapeKey === true) {
+      $targetElement = $cancelButton;
+      _stopEventPropagation$fireClick.fireClick($targetElement, e);
+    } else {
+      // Fallback - let the browser handle it.
+      $targetElement = undefined;
+    }
+  }
+};
+
+exports['default'] = handleKeyDown;
+module.exports = exports['default'];
+
+},{"./handle-dom":4,"./handle-swal-dom":6}],6:[function(require,module,exports){
+'use strict';
+
+var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; };
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+
+var _hexToRgb = require('./utils');
+
+var _removeClass$getTopMargin$fadeIn$show$addClass = require('./handle-dom');
+
+var _defaultParams = require('./default-params');
+
+var _defaultParams2 = _interopRequireWildcard(_defaultParams);
+
+/*
+ * Add modal + overlay to DOM
+ */
+
+var _injectedHTML = require('./injected-html');
+
+var _injectedHTML2 = _interopRequireWildcard(_injectedHTML);
+
+var modalClass = '.sweet-alert';
+var overlayClass = '.sweet-overlay';
+
+var sweetAlertInitialize = function sweetAlertInitialize() {
+  var sweetWrap = document.createElement('div');
+  sweetWrap.innerHTML = _injectedHTML2['default'];
+
+  // Append elements to body
+  while (sweetWrap.firstChild) {
+    document.body.appendChild(sweetWrap.firstChild);
+  }
+};
+
+/*
+ * Get DOM element of modal
+ */
+var getModal = (function (_getModal) {
+  function getModal() {
+    return _getModal.apply(this, arguments);
+  }
+
+  getModal.toString = function () {
+    return _getModal.toString();
+  };
+
+  return getModal;
+})(function () {
+  var $modal = document.querySelector(modalClass);
+
+  if (!$modal) {
+    sweetAlertInitialize();
+    $modal = getModal();
+  }
+
+  return $modal;
+});
+
+/*
+ * Get DOM element of input (in modal)
+ */
+var getInput = function getInput() {
+  var $modal = getModal();
+  if ($modal) {
+    return $modal.querySelector('input');
+  }
+};
+
+/*
+ * Get DOM element of overlay
+ */
+var getOverlay = function getOverlay() {
+  return document.querySelector(overlayClass);
+};
+
+/*
+ * Add box-shadow style to button (depending on its chosen bg-color)
+ */
+var setFocusStyle = function setFocusStyle($button, bgColor) {
+  var rgbColor = _hexToRgb.hexToRgb(bgColor);
+  $button.style.boxShadow = '0 0 2px rgba(' + rgbColor + ', 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)';
+};
+
+/*
+ * Animation when opening modal
+ */
+var openModal = function openModal(callback) {
+  var $modal = getModal();
+  _removeClass$getTopMargin$fadeIn$show$addClass.fadeIn(getOverlay(), 10);
+  _removeClass$getTopMargin$fadeIn$show$addClass.show($modal);
+  _removeClass$getTopMargin$fadeIn$show$addClass.addClass($modal, 'showSweetAlert');
+  _removeClass$getTopMargin$fadeIn$show$addClass.removeClass($modal, 'hideSweetAlert');
+
+  window.previousActiveElement = document.activeElement;
+  var $okButton = $modal.querySelector('button.confirm');
+  $okButton.focus();
+
+  setTimeout(function () {
+    _removeClass$getTopMargin$fadeIn$show$addClass.addClass($modal, 'visible');
+  }, 500);
+
+  var timer = $modal.getAttribute('data-timer');
+
+  if (timer !== 'null' && timer !== '') {
+    var timerCallback = callback;
+    $modal.timeout = setTimeout(function () {
+      var doneFunctionExists = (timerCallback || null) && $modal.getAttribute('data-has-done-function') === 'true';
+      if (doneFunctionExists) {
+        timerCallback(null);
+      } else {
+        sweetAlert.close();
+      }
+    }, timer);
+  }
+};
+
+/*
+ * Reset the styling of the input
+ * (for example if errors have been shown)
+ */
+var resetInput = function resetInput() {
+  var $modal = getModal();
+  var $input = getInput();
+
+  _removeClass$getTopMargin$fadeIn$show$addClass.removeClass($modal, 'show-input');
+  $input.value = _defaultParams2['default'].inputValue;
+  $input.setAttribute('type', _defaultParams2['default'].inputType);
+  $input.setAttribute('placeholder', _defaultParams2['default'].inputPlaceholder);
+
+  resetInputError();
+};
+
+var resetInputError = function resetInputError(event) {
+  // If press enter => ignore
+  if (event && event.keyCode === 13) {
+    return false;
+  }
+
+  var $modal = getModal();
+
+  var $errorIcon = $modal.querySelector('.sa-input-error');
+  _removeClass$getTopMargin$fadeIn$show$addClass.removeClass($errorIcon, 'show');
+
+  var $errorContainer = $modal.querySelector('.sa-error-container');
+  _removeClass$getTopMargin$fadeIn$show$addClass.removeClass($errorContainer, 'show');
+};
+
+/*
+ * Set "margin-top"-property on modal based on its computed height
+ */
+var fixVerticalPosition = function fixVerticalPosition() {
+  var $modal = getModal();
+  $modal.style.marginTop = _removeClass$getTopMargin$fadeIn$show$addClass.getTopMargin(getModal());
+};
+
+exports.sweetAlertInitialize = sweetAlertInitialize;
+exports.getModal = getModal;
+exports.getOverlay = getOverlay;
+exports.getInput = getInput;
+exports.setFocusStyle = setFocusStyle;
+exports.openModal = openModal;
+exports.resetInput = resetInput;
+exports.resetInputError = resetInputError;
+exports.fixVerticalPosition = fixVerticalPosition;
+
+},{"./default-params":2,"./handle-dom":4,"./injected-html":7,"./utils":9}],7:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var injectedHTML =
+
+// Dark overlay
+"<div class=\"sweet-overlay\" tabIndex=\"-1\"></div>" +
+
+// Modal
+"<div class=\"sweet-alert\">" +
+
+// Error icon
+"<div class=\"sa-icon sa-error\">\n      <span class=\"sa-x-mark\">\n        <span class=\"sa-line sa-left\"></span>\n        <span class=\"sa-line sa-right\"></span>\n      </span>\n    </div>" +
+
+// Warning icon
+"<div class=\"sa-icon sa-warning\">\n      <span class=\"sa-body\"></span>\n      <span class=\"sa-dot\"></span>\n    </div>" +
+
+// Info icon
+"<div class=\"sa-icon sa-info\"></div>" +
+
+// Success icon
+"<div class=\"sa-icon sa-success\">\n      <span class=\"sa-line sa-tip\"></span>\n      <span class=\"sa-line sa-long\"></span>\n\n      <div class=\"sa-placeholder\"></div>\n      <div class=\"sa-fix\"></div>\n    </div>" + "<div class=\"sa-icon sa-custom\"></div>" +
+
+// Title, text and input
+"<h2>Title</h2>\n    <p>Text</p>\n    <fieldset>\n      <input type=\"text\" tabIndex=\"3\" />\n      <div class=\"sa-input-error\"></div>\n    </fieldset>" +
+
+// Input errors
+"<div class=\"sa-error-container\">\n      <div class=\"icon\">!</div>\n      <p>Not valid!</p>\n    </div>" +
+
+// Cancel and confirm buttons
+"<div class=\"sa-button-container\">\n      <button class=\"cancel\" tabIndex=\"2\">Cancel</button>\n      <div class=\"sa-confirm-button-container\">\n        <button class=\"confirm\" tabIndex=\"1\">OK</button>" +
+
+// Loading animation
+"<div class=\"la-ball-fall\">\n          <div></div>\n          <div></div>\n          <div></div>\n        </div>\n      </div>\n    </div>" +
+
+// End of modal
+"</div>";
+
+exports["default"] = injectedHTML;
+module.exports = exports["default"];
+
+},{}],8:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+
+var _isIE8 = require('./utils');
+
+var _getModal$getInput$setFocusStyle = require('./handle-swal-dom');
+
+var _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide = require('./handle-dom');
+
+var alertTypes = ['error', 'warning', 'info', 'success', 'input', 'prompt'];
+
+/*
+ * Set type, text and actions on modal
+ */
+var setParameters = function setParameters(params) {
+  var modal = _getModal$getInput$setFocusStyle.getModal();
+
+  var $title = modal.querySelector('h2');
+  var $text = modal.querySelector('p');
+  var $cancelBtn = modal.querySelector('button.cancel');
+  var $confirmBtn = modal.querySelector('button.confirm');
+
+  /*
+   * Title
+   */
+  $title.innerHTML = params.html ? params.title : _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.escapeHtml(params.title).split('\n').join('<br>');
+
+  /*
+   * Text
+   */
+  $text.innerHTML = params.html ? params.text : _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.escapeHtml(params.text || '').split('\n').join('<br>');
+  if (params.text) _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.show($text);
+
+  /*
+   * Custom class
+   */
+  if (params.customClass) {
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass(modal, params.customClass);
+    modal.setAttribute('data-custom-class', params.customClass);
+  } else {
+    // Find previously set classes and remove them
+    var customClass = modal.getAttribute('data-custom-class');
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.removeClass(modal, customClass);
+    modal.setAttribute('data-custom-class', '');
+  }
+
+  /*
+   * Icon
+   */
+  _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.hide(modal.querySelectorAll('.sa-icon'));
+
+  if (params.type && !_isIE8.isIE8()) {
+    var _ret = (function () {
+
+      var validType = false;
+
+      for (var i = 0; i < alertTypes.length; i++) {
+        if (params.type === alertTypes[i]) {
+          validType = true;
+          break;
+        }
+      }
+
+      if (!validType) {
+        logStr('Unknown alert type: ' + params.type);
+        return {
+          v: false
+        };
+      }
+
+      var typesWithIcons = ['success', 'error', 'warning', 'info'];
+      var $icon = undefined;
+
+      if (typesWithIcons.indexOf(params.type) !== -1) {
+        $icon = modal.querySelector('.sa-icon.' + 'sa-' + params.type);
+        _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.show($icon);
+      }
+
+      var $input = _getModal$getInput$setFocusStyle.getInput();
+
+      // Animate icon
+      switch (params.type) {
+
+        case 'success':
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon, 'animate');
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon.querySelector('.sa-tip'), 'animateSuccessTip');
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon.querySelector('.sa-long'), 'animateSuccessLong');
+          break;
+
+        case 'error':
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon, 'animateErrorIcon');
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon.querySelector('.sa-x-mark'), 'animateXMark');
+          break;
+
+        case 'warning':
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon, 'pulseWarning');
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon.querySelector('.sa-body'), 'pulseWarningIns');
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass($icon.querySelector('.sa-dot'), 'pulseWarningIns');
+          break;
+
+        case 'input':
+        case 'prompt':
+          $input.setAttribute('type', params.inputType);
+          $input.value = params.inputValue;
+          $input.setAttribute('placeholder', params.inputPlaceholder);
+          _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.addClass(modal, 'show-input');
+          setTimeout(function () {
+            $input.focus();
+            $input.addEventListener('keyup', swal.resetInputError);
+          }, 400);
+          break;
+      }
+    })();
+
+    if (typeof _ret === 'object') {
+      return _ret.v;
+    }
+  }
+
+  /*
+   * Custom image
+   */
+  if (params.imageUrl) {
+    var $customIcon = modal.querySelector('.sa-icon.sa-custom');
+
+    $customIcon.style.backgroundImage = 'url(' + params.imageUrl + ')';
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.show($customIcon);
+
+    var _imgWidth = 80;
+    var _imgHeight = 80;
+
+    if (params.imageSize) {
+      var dimensions = params.imageSize.toString().split('x');
+      var imgWidth = dimensions[0];
+      var imgHeight = dimensions[1];
+
+      if (!imgWidth || !imgHeight) {
+        logStr('Parameter imageSize expects value with format WIDTHxHEIGHT, got ' + params.imageSize);
+      } else {
+        _imgWidth = imgWidth;
+        _imgHeight = imgHeight;
+      }
+    }
+
+    $customIcon.setAttribute('style', $customIcon.getAttribute('style') + 'width:' + _imgWidth + 'px; height:' + _imgHeight + 'px');
+  }
+
+  /*
+   * Show cancel button?
+   */
+  modal.setAttribute('data-has-cancel-button', params.showCancelButton);
+  if (params.showCancelButton) {
+    $cancelBtn.style.display = 'inline-block';
+  } else {
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.hide($cancelBtn);
+  }
+
+  /*
+   * Show confirm button?
+   */
+  modal.setAttribute('data-has-confirm-button', params.showConfirmButton);
+  if (params.showConfirmButton) {
+    $confirmBtn.style.display = 'inline-block';
+  } else {
+    _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.hide($confirmBtn);
+  }
+
+  /*
+   * Custom text on cancel/confirm buttons
+   */
+  if (params.cancelButtonText) {
+    $cancelBtn.innerHTML = _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.escapeHtml(params.cancelButtonText);
+  }
+  if (params.confirmButtonText) {
+    $confirmBtn.innerHTML = _hasClass$addClass$removeClass$escapeHtml$_show$show$_hide$hide.escapeHtml(params.confirmButtonText);
+  }
+
+  /*
+   * Custom color on confirm button
+   */
+  if (params.confirmButtonColor) {
+    // Set confirm button to selected background color
+    $confirmBtn.style.backgroundColor = params.confirmButtonColor;
+
+    // Set the confirm button color to the loading ring
+    $confirmBtn.style.borderLeftColor = params.confirmLoadingButtonColor;
+    $confirmBtn.style.borderRightColor = params.confirmLoadingButtonColor;
+
+    // Set box-shadow to default focused button
+    _getModal$getInput$setFocusStyle.setFocusStyle($confirmBtn, params.confirmButtonColor);
+  }
+
+  /*
+   * Allow outside click
+   */
+  modal.setAttribute('data-allow-outside-click', params.allowOutsideClick);
+
+  /*
+   * Callback function
+   */
+  var hasDoneFunction = params.doneFunction ? true : false;
+  modal.setAttribute('data-has-done-function', hasDoneFunction);
+
+  /*
+   * Animation
+   */
+  if (!params.animation) {
+    modal.setAttribute('data-animation', 'none');
+  } else if (typeof params.animation === 'string') {
+    modal.setAttribute('data-animation', params.animation); // Custom animation
+  } else {
+    modal.setAttribute('data-animation', 'pop');
+  }
+
+  /*
+   * Timer
+   */
+  modal.setAttribute('data-timer', params.timer);
+};
+
+exports['default'] = setParameters;
+module.exports = exports['default'];
+
+},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],9:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+  value: true
+});
+/*
+ * Allow user to pass their own params
+ */
+var extend = function extend(a, b) {
+  for (var key in b) {
+    if (b.hasOwnProperty(key)) {
+      a[key] = b[key];
+    }
+  }
+  return a;
+};
+
+/*
+ * Convert HEX codes to RGB values (#000000 -> rgb(0,0,0))
+ */
+var hexToRgb = function hexToRgb(hex) {
+  var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+  return result ? parseInt(result[1], 16) + ', ' + parseInt(result[2], 16) + ', ' + parseInt(result[3], 16) : null;
+};
+
+/*
+ * Check if the user is using Internet Explorer 8 (for fallbacks)
+ */
+var isIE8 = function isIE8() {
+  return window.attachEvent && !window.addEventListener;
+};
+
+/*
+ * IE compatible logging for developers
+ */
+var logStr = function logStr(string) {
+  if (window.console) {
+    // IE...
+    window.console.log('SweetAlert: ' + string);
+  }
+};
+
+/*
+ * Set hover, active and focus-states for buttons 
+ * (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
+ */
+var colorLuminance = function colorLuminance(hex, lum) {
+  // Validate hex string
+  hex = String(hex).replace(/[^0-9a-f]/gi, '');
+  if (hex.length < 6) {
+    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
+  }
+  lum = lum || 0;
+
+  // Convert to decimal and change luminosity
+  var rgb = '#';
+  var c;
+  var i;
+
+  for (i = 0; i < 3; i++) {
+    c = parseInt(hex.substr(i * 2, 2), 16);
+    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
+    rgb += ('00' + c).substr(c.length);
+  }
+
+  return rgb;
+};
+
+exports.extend = extend;
+exports.hexToRgb = hexToRgb;
+exports.isIE8 = isIE8;
+exports.logStr = logStr;
+exports.colorLuminance = colorLuminance;
+
+},{}]},{},[1])
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvVHJpc3Rhbi9kZXYvU3dlZXRBbGVydC9kZXYvc3dlZXRhbGVydC5lczYuanMiLCIvVXNlcnMvVHJpc3Rhbi9kZXYvU3dlZXRBbGVydC9kZXYvbW9kdWxlcy9kZWZhdWx0LXBhcmFtcy5qcyIsIi9Vc2Vycy9UcmlzdGFuL2Rldi9Td2VldEFsZXJ0L2Rldi9tb2R1bGVzL2hhbmRsZS1jbGljay5qcyIsIi9Vc2Vycy9UcmlzdGFuL2Rldi9Td2VldEFsZXJ0L2Rldi9tb2R1bGVzL2hhbmRsZS1kb20uanMiLCIvVXNlcnMvVHJpc3Rhbi9kZXYvU3dlZXRBbGVydC9kZXYvbW9kdWxlcy9oYW5kbGUta2V5LmpzIiwiL1VzZXJzL1RyaXN0YW4vZGV2L1N3ZWV0QWxlcnQvZGV2L21vZHVsZXMvaGFuZGxlLXN3YWwtZG9tLmpzIiwiL1VzZXJzL1RyaXN0YW4vZGV2L1N3ZWV0QWxlcnQvZGV2L21vZHVsZXMvaW5qZWN0ZWQtaHRtbC5qcyIsIi9Vc2Vycy9UcmlzdGFuL2Rldi9Td2VldEFsZXJ0L2Rldi9tb2R1bGVzL3NldC1wYXJhbXMuanMiLCIvVXNlcnMvVHJpc3Rhbi9kZXYvU3dlZXRBbGVydC9kZXYvbW9kdWxlcy91dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztzSkNnQk8sc0JBQXNCOzs7Ozs7MkRBV3RCLGlCQUFpQjs7Ozs7O3dIQWNqQiwyQkFBMkI7Ozs7dURBSXdCLHdCQUF3Qjs7NkJBQ3hELHNCQUFzQjs7Ozs7OzZCQUl0QiwwQkFBMEI7Ozs7NkJBQzFCLHNCQUFzQjs7Ozs7Ozs7QUFNaEQsSUFBSSxxQkFBcUIsQ0FBQztBQUMxQixJQUFJLGlCQUFpQixDQUFDOzs7Ozs7QUFPdEIsSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDOztxQkFFTixVQUFVLEdBQUcsSUFBSSxHQUFHLFlBQVc7QUFDNUMsTUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVsQywwSUE5RFUsUUFBUSxDQThEVCxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUMsNEdBaENBLFVBQVUsRUFnQ0UsQ0FBQzs7Ozs7OztBQU9iLFdBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO0FBQzlCLFFBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQztBQUMxQixXQUFPLEFBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsR0FBSywyQkFBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEU7O0FBRUQsTUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO0FBQ2hDLGlEQTNERixNQUFNLENBMkRHLDBDQUEwQyxDQUFDLENBQUM7QUFDbkQsV0FBTyxLQUFLLENBQUM7R0FDZDs7QUFFRCxNQUFJLE1BQU0sR0FBRyw2Q0FsRWIsTUFBTSxDQWtFYyxFQUFFLDZCQUFnQixDQUFDOztBQUV2QyxVQUFRLE9BQU8sY0FBYzs7O0FBRzNCLFNBQUssUUFBUTtBQUNYLFlBQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO0FBQzlCLFlBQU0sQ0FBQyxJQUFJLEdBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxZQUFNLENBQUMsSUFBSSxHQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsWUFBTTs7QUFBQTtBQUdSLFNBQUssUUFBUTtBQUNYLFVBQUksY0FBYyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDdEMscURBN0VOLE1BQU0sQ0E2RU8sMkJBQTJCLENBQUMsQ0FBQztBQUNwQyxlQUFPLEtBQUssQ0FBQztPQUNkOztBQUVELFlBQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQzs7QUFFcEMsV0FBSyxJQUFJLFVBQVUsZ0NBQW1CO0FBQ3BDLGNBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztPQUNwRDs7O0FBR0QsWUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLEdBQUcsMkJBQWMsaUJBQWlCLENBQUM7QUFDakcsWUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUM7OztBQUdsRSxZQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7O0FBRTNDLFlBQU07O0FBQUEsQUFFUjtBQUNFLG1EQWpHSixNQUFNLENBaUdLLGtFQUFrRSxHQUFHLE9BQU8sY0FBYyxDQUFDLENBQUM7QUFDbkcsYUFBTyxLQUFLLENBQUM7O0FBQUEsR0FFaEI7O0FBRUQsNkJBQWMsTUFBTSxDQUFDLENBQUM7QUFDdEIsNEdBeEZBLG1CQUFtQixFQXdGRSxDQUFDO0FBQ3RCLDRHQTNGQSxTQUFTLENBMkZDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHeEIsTUFBSSxLQUFLLEdBQUcsMEdBbEdaLFFBQVEsRUFrR2MsQ0FBQzs7Ozs7QUFNdkIsTUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELE1BQUksWUFBWSxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRyxNQUFJLGFBQWEsR0FBRyx1QkFBQyxDQUFDO1dBQUsseUNBL0ZwQixZQUFZLENBK0ZxQixDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztHQUFBLENBQUM7O0FBRTFELE9BQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQzdELFNBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2pFLFVBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxjQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDO0tBQzVDO0dBQ0Y7OztBQUdELDRHQW5IQSxVQUFVLEVBbUhFLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQzs7QUFFckMsdUJBQXFCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQzs7QUFFekMsTUFBSSxVQUFVLEdBQUcsb0JBQUMsQ0FBQztXQUFLLDJCQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0dBQUEsQ0FBQztBQUN4RCxRQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQzs7QUFFOUIsUUFBTSxDQUFDLE9BQU8sR0FBRyxZQUFZOztBQUUzQixjQUFVLENBQUMsWUFBWTs7O0FBR3JCLFVBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO0FBQ25DLHlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLHlCQUFpQixHQUFHLFNBQVMsQ0FBQztPQUMvQjtLQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDUCxDQUFDOzs7QUFHRixNQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Q0FDdEI7Ozs7OztBQVFELFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFTLFVBQVUsRUFBRTtBQUMvRCxNQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsVUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0dBQzNDO0FBQ0QsTUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7QUFDbEMsVUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0dBQ2xEOztBQUVELCtDQXJLQSxNQUFNLDZCQXFLZ0IsVUFBVSxDQUFDLENBQUM7Q0FDbkMsQ0FBQzs7Ozs7QUFNRixVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBVztBQUN6QyxNQUFJLEtBQUssR0FBRywwR0FqS1osUUFBUSxFQWlLYyxDQUFDOztBQUV2QiwwSUF4TFEsT0FBTyxDQXdMUCwwR0FsS1IsVUFBVSxFQWtLVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLDBJQXpMUSxPQUFPLENBeUxQLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQiwwSUEvTG9CLFdBQVcsQ0ErTG5CLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JDLDBJQWhNVSxRQUFRLENBZ01ULEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xDLDBJQWpNb0IsV0FBVyxDQWlNbkIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDOzs7OztBQUs5QixNQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDOUQsMElBdk1vQixXQUFXLENBdU1uQixZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckMsMElBeE1vQixXQUFXLENBd01uQixZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDeEUsMElBek1vQixXQUFXLENBeU1uQixZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7O0FBRTFFLE1BQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCwwSUE1TW9CLFdBQVcsQ0E0TW5CLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVDLDBJQTdNb0IsV0FBVyxDQTZNbkIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQzs7QUFFcEUsTUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQzlELDBJQWhOb0IsV0FBVyxDQWdObkIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzFDLDBJQWpOb0IsV0FBVyxDQWlObkIsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3ZFLDBJQWxOb0IsV0FBVyxDQWtObkIsWUFBWSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOzs7QUFHdEUsWUFBVSxDQUFDLFlBQVc7QUFDcEIsUUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzFELDRJQXZOa0IsV0FBVyxDQXVOakIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0dBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUM7OztBQUdSLDBJQTNOb0IsV0FBVyxDQTJObkIsUUFBUSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDOzs7QUFHN0MsUUFBTSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQztBQUN6QyxNQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtBQUNoQyxVQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7R0FDdEM7QUFDRCxtQkFBaUIsR0FBRyxTQUFTLENBQUM7QUFDOUIsY0FBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFNUIsU0FBTyxJQUFJLENBQUM7Q0FDYixDQUFDOzs7Ozs7QUFPRixVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBUyxZQUFZLEVBQUU7QUFDdkUsTUFBSSxLQUFLLEdBQUcsMEdBcE5aLFFBQVEsRUFvTmMsQ0FBQzs7QUFFdkIsTUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hELDBJQWpQVSxRQUFRLENBaVBULFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFN0IsTUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2pFLDBJQXBQVSxRQUFRLENBb1BULGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFbEMsaUJBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQzs7QUFFNUQsWUFBVSxDQUFDLFlBQVc7QUFDcEIsY0FBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO0dBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRU4sT0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUN0QyxDQUFDOzs7OztBQU1GLFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFTLEtBQUssRUFBRTs7QUFFbEUsTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDakMsV0FBTyxLQUFLLENBQUM7R0FDZDs7QUFFRCxNQUFJLE1BQU0sR0FBRywwR0EvT2IsUUFBUSxFQStPZSxDQUFDOztBQUV4QixNQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsMElBNVFvQixXQUFXLENBNFFuQixVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7O0FBRWhDLE1BQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNsRSwwSUEvUW9CLFdBQVcsQ0ErUW5CLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUN0QyxDQUFDOzs7OztBQUtGLFVBQVUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUNoRSxNQUFJLEtBQUssR0FBRywwR0E1UFosUUFBUSxFQTRQYyxDQUFDO0FBQ3ZCLE1BQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxNQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMvQixlQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUMvQixDQUFDOzs7OztBQUtGLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUM5RCxNQUFJLEtBQUssR0FBRywwR0F2UVosUUFBUSxFQXVRYyxDQUFDO0FBQ3ZCLE1BQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxNQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFjLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNoQyxlQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUNoQyxDQUFDOztBQUVGLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFOzs7QUFHakMsUUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztDQUM5QyxNQUFNO0FBQ0wsK0NBNVJBLE1BQU0sQ0E0UkMsa0NBQWtDLENBQUMsQ0FBQztDQUM1Qzs7Ozs7Ozs7O0FDdFRELElBQUksYUFBYSxHQUFHO0FBQ2xCLE9BQUssRUFBRSxFQUFFO0FBQ1QsTUFBSSxFQUFFLEVBQUU7QUFDUixNQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFpQixFQUFFLEtBQUs7QUFDeEIsbUJBQWlCLEVBQUUsSUFBSTtBQUN2QixrQkFBZ0IsRUFBRSxLQUFLO0FBQ3ZCLGdCQUFjLEVBQUUsSUFBSTtBQUNwQixlQUFhLEVBQUUsSUFBSTtBQUNuQixtQkFBaUIsRUFBRSxJQUFJO0FBQ3ZCLG9CQUFrQixFQUFFLFNBQVM7QUFDN0Isa0JBQWdCLEVBQUUsUUFBUTtBQUMxQixVQUFRLEVBQUUsSUFBSTtBQUNkLFdBQVMsRUFBRSxJQUFJO0FBQ2YsT0FBSyxFQUFFLElBQUk7QUFDWCxhQUFXLEVBQUUsRUFBRTtBQUNmLE1BQUksRUFBRSxLQUFLO0FBQ1gsV0FBUyxFQUFFLElBQUk7QUFDZixnQkFBYyxFQUFFLElBQUk7QUFDcEIsV0FBUyxFQUFFLE1BQU07QUFDakIsa0JBQWdCLEVBQUUsRUFBRTtBQUNwQixZQUFVLEVBQUUsRUFBRTtBQUNkLHFCQUFtQixFQUFFLEtBQUs7Q0FDM0IsQ0FBQzs7cUJBRWEsYUFBYTs7Ozs7Ozs7Ozs4QkN6QkcsU0FBUzs7d0JBQ2YsbUJBQW1COztxQ0FDTCxjQUFjOzs7OztBQU1yRCxJQUFJLFlBQVksR0FBRyxzQkFBUyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUNoRCxNQUFJLENBQUMsR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM5QixNQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUM7O0FBRXRDLE1BQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLE1BQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE1BQUksY0FBYyxHQUFJLHVCQVpmLFFBQVEsQ0FZZ0IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELE1BQUksa0JBQWtCLEdBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLEtBQUssTUFBTSxBQUFDLENBQUM7Ozs7QUFJMUcsTUFBSSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztBQUN6QyxNQUFJLGVBQWUsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUU7QUFDaEQsZUFBVyxHQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztBQUN6QyxjQUFVLEdBQUssZ0JBdEJWLGNBQWMsQ0FzQlcsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsZUFBVyxHQUFJLGdCQXZCVixjQUFjLENBdUJXLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ25EOztBQUVELFdBQVMsMkJBQTJCLENBQUMsS0FBSyxFQUFFO0FBQzFDLFFBQUksZUFBZSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtBQUNoRCxZQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDdEM7R0FDRjs7QUFFRCxVQUFRLENBQUMsQ0FBQyxJQUFJO0FBQ1osU0FBSyxXQUFXO0FBQ2QsaUNBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEMsWUFBTTs7QUFBQSxBQUVSLFNBQUssVUFBVTtBQUNiLGlDQUEyQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDLFlBQU07O0FBQUEsQUFFUixTQUFLLFdBQVc7QUFDZCxpQ0FBMkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QyxZQUFNOztBQUFBLEFBRVIsU0FBSyxTQUFTO0FBQ1osaUNBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEMsWUFBTTs7QUFBQSxBQUVSLFNBQUssT0FBTztBQUNWLFVBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxVQUFJLGFBQWEsR0FBSSxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUUxRCxVQUFJLGVBQWUsRUFBRTtBQUNuQixxQkFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO09BQ3hDLE1BQU07QUFDTCxzQkFBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO09BQ3pDO0FBQ0QsWUFBTTs7QUFBQSxBQUVSLFNBQUssT0FBTztBQUNWLFVBQUksY0FBYyxHQUFJLEtBQUssS0FBSyxNQUFNLEFBQUMsQ0FBQztBQUN4QyxVQUFJLG1CQUFtQixHQUFHLHVCQTVEYixZQUFZLENBNERjLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7O0FBR3RELFVBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7QUFDMUYsY0FBTTtPQUNQOztBQUVELFVBQUksZUFBZSxJQUFJLGtCQUFrQixJQUFJLGNBQWMsRUFBRTtBQUMzRCxxQkFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM5QixNQUFNLElBQUksa0JBQWtCLElBQUksY0FBYyxJQUFJLGVBQWUsRUFBRTtBQUNsRSxvQkFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztPQUM3QixNQUFNLElBQUksdUJBdkVFLFlBQVksQ0F1RUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQ3JFLGtCQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7T0FDcEI7QUFDRCxZQUFNO0FBQUEsR0FDVDtDQUNGLENBQUM7Ozs7O0FBS0YsSUFBSSxhQUFhLEdBQUcsdUJBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUMxQyxNQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7O0FBRXpCLE1BQUksdUJBcEZHLFFBQVEsQ0FvRkYsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ2pDLGlCQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7O0FBRW5ELFFBQUksQ0FBQyxhQUFhLEVBQUU7QUFDbEIsbUJBQWEsR0FBRyxFQUFFLENBQUM7S0FDcEI7R0FDRjs7QUFFRCxRQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUVuQyxNQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDekIsY0FBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0dBQ3BCOztBQUVELE1BQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO0FBQzlCLGNBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztHQUM3QjtDQUNGLENBQUM7Ozs7O0FBS0YsSUFBSSxZQUFZLEdBQUcsc0JBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRTs7QUFFekMsTUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE1BQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssV0FBVyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQzs7QUFFcEgsTUFBSSxxQkFBcUIsRUFBRTtBQUN6QixVQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQzVCOztBQUVELE1BQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtBQUN4QixjQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7R0FDcEI7Q0FDRixDQUFDOztxQkFHYTtBQUNiLGNBQVksRUFBWixZQUFZO0FBQ1osZUFBYSxFQUFiLGFBQWE7QUFDYixjQUFZLEVBQVosWUFBWTtDQUNiOzs7Ozs7Ozs7QUMvSEQsSUFBSSxRQUFRLEdBQUcsa0JBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUN2QyxTQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzNFLENBQUM7O0FBRUYsSUFBSSxRQUFRLEdBQUcsa0JBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUN2QyxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtBQUM5QixRQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUM7R0FDbkM7Q0FDRixDQUFDOztBQUVGLElBQUksV0FBVyxHQUFHLHFCQUFTLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDMUMsTUFBSSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEUsTUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQzdCLFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRCxjQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN6RDtBQUNELFFBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDckQ7Q0FDRixDQUFDOztBQUVGLElBQUksVUFBVSxHQUFHLG9CQUFTLEdBQUcsRUFBRTtBQUM3QixNQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLEtBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFNBQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztDQUN0QixDQUFDOztBQUVGLElBQUksS0FBSyxHQUFHLGVBQVMsSUFBSSxFQUFFO0FBQ3pCLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Q0FDOUIsQ0FBQzs7QUFFRixJQUFJLElBQUksR0FBRyxjQUFTLEtBQUssRUFBRTtBQUN6QixNQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDckI7QUFDRCxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQyxTQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDakI7Q0FDRixDQUFDOztBQUVGLElBQUksS0FBSyxHQUFHLGVBQVMsSUFBSSxFQUFFO0FBQ3pCLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDN0IsQ0FBQzs7QUFFRixJQUFJLElBQUksR0FBRyxjQUFTLEtBQUssRUFBRTtBQUN6QixNQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDckI7QUFDRCxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQyxTQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDakI7Q0FDRixDQUFDOztBQUVGLElBQUksWUFBWSxHQUFHLHNCQUFTLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDekMsTUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUM1QixTQUFPLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDcEIsUUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ25CLGFBQU8sSUFBSSxDQUFDO0tBQ2I7QUFDRCxRQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztHQUN4QjtBQUNELFNBQU8sS0FBSyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixJQUFJLFlBQVksR0FBRyxzQkFBUyxJQUFJLEVBQUU7QUFDaEMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzVCLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFFN0IsTUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVk7TUFDMUIsT0FBTyxDQUFDO0FBQ1osTUFBSSxPQUFPLGdCQUFnQixLQUFLLFdBQVcsRUFBRTs7QUFDM0MsV0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNoRixNQUFNO0FBQ0wsV0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQy9DOztBQUVELE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDNUIsU0FBUSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQSxHQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBRTtDQUN4RCxDQUFDOztBQUVGLElBQUksTUFBTSxHQUFHLGdCQUFTLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsTUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRTtBQUMzQixZQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMxQixRQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzdCLFFBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN2QixRQUFJLElBQUk7Ozs7Ozs7Ozs7T0FBRyxZQUFXO0FBQ3BCLFVBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQSxHQUFJLEdBQUcsQ0FBQztBQUNyRSxVQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOztBQUVuQixVQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLGtCQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO09BQzVCO0tBQ0YsQ0FBQSxDQUFDO0FBQ0YsUUFBSSxFQUFFLENBQUM7R0FDUjtBQUNELE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUM5QixDQUFDOztBQUVGLElBQUksT0FBTyxHQUFHLGlCQUFTLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDckMsVUFBUSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDMUIsTUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN2QixNQUFJLElBQUk7Ozs7Ozs7Ozs7S0FBRyxZQUFXO0FBQ3BCLFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQSxHQUFJLEdBQUcsQ0FBQztBQUNyRSxRQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOztBQUVuQixRQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLGdCQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7S0FDN0I7R0FDRixDQUFBLENBQUM7QUFDRixNQUFJLEVBQUUsQ0FBQztDQUNSLENBQUM7O0FBRUYsSUFBSSxTQUFTLEdBQUcsbUJBQVMsSUFBSSxFQUFFOzs7QUFHN0IsTUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUU7O0FBRXBDLFFBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRTtBQUNqQyxVQUFJLEVBQUUsTUFBTTtBQUNaLGFBQU8sRUFBRSxLQUFLO0FBQ2QsZ0JBQVUsRUFBRSxJQUFJO0tBQ2pCLENBQUMsQ0FBQztBQUNILFFBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDMUIsTUFBTSxJQUFLLFFBQVEsQ0FBQyxXQUFXLEVBQUc7O0FBRWpDLFFBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDOUMsT0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDekIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtBQUNyQyxRQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFFO0dBQzVCLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFHO0FBQzlDLFFBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztHQUNoQjtDQUNGLENBQUM7O0FBRUYsSUFBSSxvQkFBb0IsR0FBRyw4QkFBUyxDQUFDLEVBQUU7O0FBRXJDLE1BQUksT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRTtBQUMzQyxLQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDcEIsS0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0dBQ3BCLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3RFLFVBQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztHQUNsQztDQUNGLENBQUM7O1FBR0EsUUFBUSxHQUFSLFFBQVE7UUFBRSxRQUFRLEdBQVIsUUFBUTtRQUFFLFdBQVcsR0FBWCxXQUFXO1FBQy9CLFVBQVUsR0FBVixVQUFVO1FBQ1YsS0FBSyxHQUFMLEtBQUs7UUFBRSxJQUFJLEdBQUosSUFBSTtRQUFFLEtBQUssR0FBTCxLQUFLO1FBQUUsSUFBSSxHQUFKLElBQUk7UUFDeEIsWUFBWSxHQUFaLFlBQVk7UUFDWixZQUFZLEdBQVosWUFBWTtRQUNaLE1BQU0sR0FBTixNQUFNO1FBQUUsT0FBTyxHQUFQLE9BQU87UUFDZixTQUFTLEdBQVQsU0FBUztRQUNULG9CQUFvQixHQUFwQixvQkFBb0I7Ozs7Ozs7Ozs4Q0MvSjBCLGNBQWM7OzZCQUNoQyxtQkFBbUI7O0FBR2pELElBQUksYUFBYSxHQUFHLHVCQUFTLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2pELE1BQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzlCLE1BQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQzs7QUFFbkMsTUFBSSxTQUFTLEdBQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFELE1BQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDekQsTUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7O0FBRy9ELE1BQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7O0FBRTNDLFdBQU87R0FDUjs7QUFFRCxNQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUM7O0FBRTlDLE1BQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLFFBQUksY0FBYyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN2QyxjQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsWUFBTTtLQUNQO0dBQ0Y7O0FBRUQsTUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFOztBQUVqQixRQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTs7QUFFbkIsb0JBQWMsR0FBRyxTQUFTLENBQUM7S0FDNUIsTUFBTTs7QUFFTCxVQUFJLFFBQVEsS0FBSyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QyxzQkFBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNuQyxNQUFNO0FBQ0wsc0JBQWMsR0FBRyxhQUFhLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO09BQzlDO0tBQ0Y7O0FBRUQsb0NBMUNLLG9CQUFvQixDQTBDSixDQUFDLENBQUMsQ0FBQztBQUN4QixrQkFBYyxDQUFDLEtBQUssRUFBRSxDQUFDOztBQUV2QixRQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtBQUM3QixxQkE3Q0csYUFBYSxDQTZDRixjQUFjLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDMUQ7R0FDRixNQUFNO0FBQ0wsUUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQ2xCLFVBQUksY0FBYyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7QUFDdEMsc0JBQWMsR0FBRyxTQUFTLENBQUM7QUFDM0IsaUJBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztPQUNuQjs7QUFFRCxVQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTs7QUFFbkIsc0JBQWMsR0FBRyxTQUFTLENBQUM7T0FDNUIsTUFBTTs7QUFFTCxzQkFBYyxHQUFHLFNBQVMsQ0FBQztPQUM1QjtLQUNGLE1BQU0sSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO0FBQzNELG9CQUFjLEdBQUcsYUFBYSxDQUFDO0FBQy9CLHNDQWhFeUIsU0FBUyxDQWdFeEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzlCLE1BQU07O0FBRUwsb0JBQWMsR0FBRyxTQUFTLENBQUM7S0FDNUI7R0FDRjtDQUNGLENBQUM7O3FCQUVhLGFBQWE7Ozs7Ozs7Ozs7Ozt3QkN4RUgsU0FBUzs7NkRBQ2dDLGNBQWM7OzZCQUN0RCxrQkFBa0I7Ozs7Ozs7OzRCQVFuQixpQkFBaUI7Ozs7QUFOMUMsSUFBSSxVQUFVLEdBQUssY0FBYyxDQUFDO0FBQ2xDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDOztBQU9wQyxJQUFJLG9CQUFvQixHQUFHLGdDQUFXO0FBQ3BDLE1BQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsV0FBUyxDQUFDLFNBQVMsNEJBQWUsQ0FBQzs7O0FBR25DLFNBQU8sU0FBUyxDQUFDLFVBQVUsRUFBRTtBQUMzQixZQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7R0FDakQ7Q0FDRixDQUFDOzs7OztBQUtGLElBQUksUUFBUTs7Ozs7Ozs7OztHQUFHLFlBQVc7QUFDeEIsTUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFaEQsTUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNYLHdCQUFvQixFQUFFLENBQUM7QUFDdkIsVUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO0dBQ3JCOztBQUVELFNBQU8sTUFBTSxDQUFDO0NBQ2YsQ0FBQSxDQUFDOzs7OztBQUtGLElBQUksUUFBUSxHQUFHLG9CQUFXO0FBQ3hCLE1BQUksTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLE1BQUksTUFBTSxFQUFFO0FBQ1YsV0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ3RDO0NBQ0YsQ0FBQzs7Ozs7QUFLRixJQUFJLFVBQVUsR0FBRyxzQkFBVztBQUMxQixTQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDN0MsQ0FBQzs7Ozs7QUFLRixJQUFJLGFBQWEsR0FBRyx1QkFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQzdDLE1BQUksUUFBUSxHQUFHLFVBekRSLFFBQVEsQ0F5RFMsT0FBTyxDQUFDLENBQUM7QUFDakMsU0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBZSxHQUFHLFFBQVEsR0FBRyw2Q0FBNkMsQ0FBQztDQUN0RyxDQUFDOzs7OztBQUtGLElBQUksU0FBUyxHQUFHLG1CQUFTLFFBQVEsRUFBRTtBQUNqQyxNQUFJLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztBQUN4QixpREFqRWtDLE1BQU0sQ0FpRWpDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLGlEQWxFMEMsSUFBSSxDQWtFekMsTUFBTSxDQUFDLENBQUM7QUFDYixpREFuRWdELFFBQVEsQ0FtRS9DLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25DLGlEQXBFTyxXQUFXLENBb0VOLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDOztBQUV0QyxRQUFNLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztBQUN0RCxNQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkQsV0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDOztBQUVsQixZQUFVLENBQUMsWUFBWTtBQUNyQixtREEzRThDLFFBQVEsQ0EyRTdDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztHQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDOztBQUVSLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7O0FBRTlDLE1BQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO0FBQ3BDLFFBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQztBQUM3QixVQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFXO0FBQ3JDLFVBQUksa0JBQWtCLEdBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFBLElBQUssTUFBTSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLE1BQU0sQUFBQyxDQUFDO0FBQy9HLFVBQUksa0JBQWtCLEVBQUU7QUFDdEIscUJBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNyQixNQUNJO0FBQ0gsa0JBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztPQUNwQjtLQUNGLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDWDtDQUNGLENBQUM7Ozs7OztBQU1GLElBQUksVUFBVSxHQUFHLHNCQUFXO0FBQzFCLE1BQUksTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLE1BQUksTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDOztBQUV4QixpREF0R08sV0FBVyxDQXNHTixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbEMsUUFBTSxDQUFDLEtBQUssR0FBRywyQkFBYyxVQUFVLENBQUM7QUFDeEMsUUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsMkJBQWMsU0FBUyxDQUFDLENBQUM7QUFDckQsUUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsMkJBQWMsZ0JBQWdCLENBQUMsQ0FBQzs7QUFFbkUsaUJBQWUsRUFBRSxDQUFDO0NBQ25CLENBQUM7O0FBR0YsSUFBSSxlQUFlLEdBQUcseUJBQVMsS0FBSyxFQUFFOztBQUVwQyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUNqQyxXQUFPLEtBQUssQ0FBQztHQUNkOztBQUVELE1BQUksTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDOztBQUV4QixNQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsaURBeEhPLFdBQVcsQ0F3SE4sVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztBQUVoQyxNQUFJLGVBQWUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDbEUsaURBM0hPLFdBQVcsQ0EySE4sZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ3RDLENBQUM7Ozs7O0FBTUYsSUFBSSxtQkFBbUIsR0FBRywrQkFBVztBQUNuQyxNQUFJLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztBQUN4QixRQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRywrQ0FwSUwsWUFBWSxDQW9JTSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0NBQ25ELENBQUM7O1FBSUEsb0JBQW9CLEdBQXBCLG9CQUFvQjtRQUNwQixRQUFRLEdBQVIsUUFBUTtRQUNSLFVBQVUsR0FBVixVQUFVO1FBQ1YsUUFBUSxHQUFSLFFBQVE7UUFDUixhQUFhLEdBQWIsYUFBYTtRQUNiLFNBQVMsR0FBVCxTQUFTO1FBQ1QsVUFBVSxHQUFWLFVBQVU7UUFDVixlQUFlLEdBQWYsZUFBZTtRQUNmLG1CQUFtQixHQUFuQixtQkFBbUI7Ozs7Ozs7O0FDbEpyQixJQUFJLFlBQVk7OztBQUdkOzs7NkJBRzJCOzs7a01BUWxCOzs7NkhBTUE7Ozt1Q0FHOEI7OzsrTkFTOUIsNENBRWdDOzs7NEpBUTNCOzs7NEdBTUw7OztxTkFNOEM7Ozs2SUFTOUM7OztRQUdELENBQUM7O3FCQUVJLFlBQVk7Ozs7Ozs7Ozs7cUJDaEVwQixTQUFTOzsrQ0FNVCxtQkFBbUI7OzhFQU1uQixjQUFjOztBQWhCckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDOzs7OztBQXNCNUUsSUFBSSxhQUFhLEdBQUcsdUJBQVMsTUFBTSxFQUFFO0FBQ25DLE1BQUksS0FBSyxHQUFHLGlDQWhCWixRQUFRLEVBZ0JjLENBQUM7O0FBRXZCLE1BQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsTUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3RELE1BQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7Ozs7QUFLeEQsUUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZ0VBbkJoRCxVQUFVLENBbUJpRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Ozs7QUFLbEcsT0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsZ0VBeEI5QyxVQUFVLENBd0IrQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckcsTUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLGdFQXhCVixJQUFJLENBd0JXLEtBQUssQ0FBQyxDQUFDOzs7OztBQUs3QixNQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7QUFDdEIsb0VBaENRLFFBQVEsQ0FnQ1AsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwQyxTQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztHQUM3RCxNQUFNOztBQUVMLFFBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCxvRUFyQ2tCLFdBQVcsQ0FxQ2pCLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoQyxTQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQzdDOzs7OztBQUtELGtFQTFDb0IsSUFBSSxDQTBDbkIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7O0FBRXpDLE1BQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BeERwQixLQUFLLEVBd0RzQixFQUFFOzs7QUFFM0IsVUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDOztBQUV0QixXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxZQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2pDLG1CQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGdCQUFNO1NBQ1A7T0FDRjs7QUFFRCxVQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2QsY0FBTSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QzthQUFPLEtBQUs7VUFBQztPQUNkOztBQUVELFVBQUksY0FBYyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0QsVUFBSSxLQUFLLFlBQUEsQ0FBQzs7QUFFVixVQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzlDLGFBQUssR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9ELHdFQWpFRyxJQUFJLENBaUVGLEtBQUssQ0FBQyxDQUFDO09BQ2I7O0FBRUQsVUFBSSxNQUFNLEdBQUcsaUNBM0VmLFFBQVEsRUEyRWlCLENBQUM7OztBQUd4QixjQUFRLE1BQU0sQ0FBQyxJQUFJOztBQUVqQixhQUFLLFNBQVM7QUFDWiwwRUE1RUksUUFBUSxDQTRFSCxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0IsMEVBN0VJLFFBQVEsQ0E2RUgsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzlELDBFQTlFSSxRQUFRLENBOEVILEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUNoRSxnQkFBTTs7QUFBQSxBQUVSLGFBQUssT0FBTztBQUNWLDBFQWxGSSxRQUFRLENBa0ZILEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BDLDBFQW5GSSxRQUFRLENBbUZILEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDNUQsZ0JBQU07O0FBQUEsQUFFUixhQUFLLFNBQVM7QUFDWiwwRUF2RkksUUFBUSxDQXVGSCxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDaEMsMEVBeEZJLFFBQVEsQ0F3RkgsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdELDBFQXpGSSxRQUFRLENBeUZILEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUM1RCxnQkFBTTs7QUFBQSxBQUVSLGFBQUssT0FBTyxDQUFDO0FBQ2IsYUFBSyxRQUFRO0FBQ1gsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxnQkFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ2pDLGdCQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1RCwwRUFqR0ksUUFBUSxDQWlHSCxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDOUIsb0JBQVUsQ0FBQyxZQUFZO0FBQ3JCLGtCQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixrQkFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7V0FDeEQsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNSLGdCQUFNO0FBQUEsT0FDVDs7Ozs7O0dBQ0Y7Ozs7O0FBS0QsTUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ25CLFFBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQzs7QUFFNUQsZUFBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ25FLG9FQS9HSyxJQUFJLENBK0dKLFdBQVcsQ0FBQyxDQUFDOztBQUVsQixRQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDOztBQUVwQixRQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDcEIsVUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQsVUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFVBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFOUIsVUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUMzQixjQUFNLENBQUMsa0VBQWtFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQy9GLE1BQU07QUFDTCxpQkFBUyxHQUFHLFFBQVEsQ0FBQztBQUNyQixrQkFBVSxHQUFHLFNBQVMsQ0FBQztPQUN4QjtLQUNGOztBQUVELGVBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxhQUFhLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO0dBQ2pJOzs7OztBQUtELE9BQUssQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdEUsTUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7QUFDM0IsY0FBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO0dBQzNDLE1BQU07QUFDTCxvRUEzSWtCLElBQUksQ0EySWpCLFVBQVUsQ0FBQyxDQUFDO0dBQ2xCOzs7OztBQUtELE9BQUssQ0FBQyxZQUFZLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEUsTUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUU7QUFDNUIsZUFBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO0dBQzVDLE1BQU07QUFDTCxvRUFySmtCLElBQUksQ0FxSmpCLFdBQVcsQ0FBQyxDQUFDO0dBQ25COzs7OztBQUtELE1BQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO0FBQzNCLGNBQVUsQ0FBQyxTQUFTLEdBQUcsZ0VBN0p6QixVQUFVLENBNkowQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztHQUM1RDtBQUNELE1BQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO0FBQzVCLGVBQVcsQ0FBQyxTQUFTLEdBQUcsZ0VBaEsxQixVQUFVLENBZ0syQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztHQUM5RDs7Ozs7QUFLRCxNQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTs7QUFFN0IsZUFBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDOzs7QUFHOUQsZUFBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDO0FBQ3JFLGVBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDOzs7QUFHdEUscUNBcExGLGFBQWEsQ0FvTEcsV0FBVyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0dBQ3ZEOzs7OztBQUtELE9BQUssQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Ozs7O0FBS3pFLE1BQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6RCxPQUFLLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDOzs7OztBQUs5RCxNQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtBQUNyQixTQUFLLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0dBQzlDLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQy9DLFNBQUssQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0dBQ3hELE1BQU07QUFDTCxTQUFLLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzdDOzs7OztBQUtELE9BQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNoRCxDQUFDOztxQkFFYSxhQUFhOzs7Ozs7Ozs7Ozs7QUN6TjVCLElBQUksTUFBTSxHQUFHLGdCQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUIsT0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDakIsUUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3pCLE9BQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7R0FDRjtBQUNELFNBQU8sQ0FBQyxDQUFDO0NBQ1YsQ0FBQzs7Ozs7QUFLRixJQUFJLFFBQVEsR0FBRyxrQkFBUyxHQUFHLEVBQUU7QUFDM0IsTUFBSSxNQUFNLEdBQUcsMkNBQTJDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBQ2xILENBQUM7Ozs7O0FBS0YsSUFBSSxLQUFLLEdBQUcsaUJBQVc7QUFDckIsU0FBUSxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFFO0NBQ3pELENBQUM7Ozs7O0FBS0YsSUFBSSxNQUFNLEdBQUcsZ0JBQVMsTUFBTSxFQUFFO0FBQzVCLE1BQUksTUFBTSxDQUFDLE9BQU8sRUFBRTs7QUFFbEIsVUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0dBQzdDO0NBQ0YsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxjQUFjLEdBQUcsd0JBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTs7QUFFdEMsS0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLE1BQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbEIsT0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQzNEO0FBQ0QsS0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7OztBQUdmLE1BQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNkLE1BQUksQ0FBQyxDQUFDO0FBQ04sTUFBSSxDQUFDLENBQUM7O0FBRU4sT0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEIsS0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkMsS0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLE9BQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUEsQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ3BDOztBQUVELFNBQU8sR0FBRyxDQUFDO0NBQ1osQ0FBQzs7UUFJQSxNQUFNLEdBQU4sTUFBTTtRQUNOLFFBQVEsR0FBUixRQUFRO1FBQ1IsS0FBSyxHQUFMLEtBQUs7UUFDTCxNQUFNLEdBQU4sTUFBTTtRQUNOLGNBQWMsR0FBZCxjQUFjIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIFN3ZWV0QWxlcnRcbi8vIDIwMTQtMjAxNSAoYykgLSBUcmlzdGFuIEVkd2FyZHNcbi8vIGdpdGh1Yi5jb20vdDR0NS9zd2VldGFsZXJ0XG5cbi8qXG4gKiBqUXVlcnktbGlrZSBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGUgRE9NXG4gKi9cbmltcG9ydCB7XG4gIGhhc0NsYXNzLCBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MsXG4gIGVzY2FwZUh0bWwsXG4gIF9zaG93LCBzaG93LCBfaGlkZSwgaGlkZSxcbiAgaXNEZXNjZW5kYW50LFxuICBnZXRUb3BNYXJnaW4sXG4gIGZhZGVJbiwgZmFkZU91dCxcbiAgZmlyZUNsaWNrLFxuICBzdG9wRXZlbnRQcm9wYWdhdGlvblxufSBmcm9tICcuL21vZHVsZXMvaGFuZGxlLWRvbSc7XG5cbi8qXG4gKiBIYW5keSB1dGlsaXRpZXNcbiAqL1xuaW1wb3J0IHtcbiAgZXh0ZW5kLFxuICBoZXhUb1JnYixcbiAgaXNJRTgsXG4gIGxvZ1N0cixcbiAgY29sb3JMdW1pbmFuY2Vcbn0gZnJvbSAnLi9tb2R1bGVzL3V0aWxzJztcblxuLypcbiAqICBIYW5kbGUgc3dlZXRBbGVydCdzIERPTSBlbGVtZW50c1xuICovXG5pbXBvcnQge1xuICBzd2VldEFsZXJ0SW5pdGlhbGl6ZSxcbiAgZ2V0TW9kYWwsXG4gIGdldE92ZXJsYXksXG4gIGdldElucHV0LFxuICBzZXRGb2N1c1N0eWxlLFxuICBvcGVuTW9kYWwsXG4gIHJlc2V0SW5wdXQsXG4gIGZpeFZlcnRpY2FsUG9zaXRpb25cbn0gZnJvbSAnLi9tb2R1bGVzL2hhbmRsZS1zd2FsLWRvbSc7XG5cblxuLy8gSGFuZGxlIGJ1dHRvbiBldmVudHMgYW5kIGtleWJvYXJkIGV2ZW50c1xuaW1wb3J0IHsgaGFuZGxlQnV0dG9uLCBoYW5kbGVDb25maXJtLCBoYW5kbGVDYW5jZWwgfSBmcm9tICcuL21vZHVsZXMvaGFuZGxlLWNsaWNrJztcbmltcG9ydCBoYW5kbGVLZXlEb3duIGZyb20gJy4vbW9kdWxlcy9oYW5kbGUta2V5JztcblxuXG4vLyBEZWZhdWx0IHZhbHVlc1xuaW1wb3J0IGRlZmF1bHRQYXJhbXMgZnJvbSAnLi9tb2R1bGVzL2RlZmF1bHQtcGFyYW1zJztcbmltcG9ydCBzZXRQYXJhbWV0ZXJzIGZyb20gJy4vbW9kdWxlcy9zZXQtcGFyYW1zJztcblxuLypcbiAqIFJlbWVtYmVyIHN0YXRlIGluIGNhc2VzIHdoZXJlIG9wZW5pbmcgYW5kIGhhbmRsaW5nIGEgbW9kYWwgd2lsbCBmaWRkbGUgd2l0aCBpdC5cbiAqIChXZSBhbHNvIHVzZSB3aW5kb3cucHJldmlvdXNBY3RpdmVFbGVtZW50IGFzIGEgZ2xvYmFsIHZhcmlhYmxlKVxuICovXG52YXIgcHJldmlvdXNXaW5kb3dLZXlEb3duO1xudmFyIGxhc3RGb2N1c2VkQnV0dG9uO1xuXG5cbi8qXG4gKiBHbG9iYWwgc3dlZXRBbGVydCBmdW5jdGlvblxuICogKHRoaXMgaXMgd2hhdCB0aGUgdXNlciBjYWxscylcbiAqL1xudmFyIHN3ZWV0QWxlcnQsIHN3YWw7XG5cbmV4cG9ydCBkZWZhdWx0IHN3ZWV0QWxlcnQgPSBzd2FsID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjdXN0b21pemF0aW9ucyA9IGFyZ3VtZW50c1swXTtcblxuICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnc3RvcC1zY3JvbGxpbmcnKTtcbiAgcmVzZXRJbnB1dCgpO1xuXG4gIC8qXG4gICAqIFVzZSBhcmd1bWVudCBpZiBkZWZpbmVkIG9yIGRlZmF1bHQgdmFsdWUgZnJvbSBwYXJhbXMgb2JqZWN0IG90aGVyd2lzZS5cbiAgICogU3VwcG9ydHMgdGhlIGNhc2Ugd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGJvb2xlYW4gdHJ1ZSBhbmQgc2hvdWxkIGJlXG4gICAqIG92ZXJyaWRkZW4gYnkgYSBjb3JyZXNwb25kaW5nIGV4cGxpY2l0IGFyZ3VtZW50IHdoaWNoIGlzIGJvb2xlYW4gZmFsc2UuXG4gICAqL1xuICBmdW5jdGlvbiBhcmd1bWVudE9yRGVmYXVsdChrZXkpIHtcbiAgICB2YXIgYXJncyA9IGN1c3RvbWl6YXRpb25zO1xuICAgIHJldHVybiAoYXJnc1trZXldID09PSB1bmRlZmluZWQpID8gIGRlZmF1bHRQYXJhbXNba2V5XSA6IGFyZ3Nba2V5XTtcbiAgfVxuXG4gIGlmIChjdXN0b21pemF0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9nU3RyKCdTd2VldEFsZXJ0IGV4cGVjdHMgYXQgbGVhc3QgMSBhdHRyaWJ1dGUhJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdFBhcmFtcyk7XG5cbiAgc3dpdGNoICh0eXBlb2YgY3VzdG9taXphdGlvbnMpIHtcblxuICAgIC8vIEV4OiBzd2FsKFwiSGVsbG9cIiwgXCJKdXN0IHRlc3RpbmdcIiwgXCJpbmZvXCIpO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBwYXJhbXMudGl0bGUgPSBjdXN0b21pemF0aW9ucztcbiAgICAgIHBhcmFtcy50ZXh0ICA9IGFyZ3VtZW50c1sxXSB8fCAnJztcbiAgICAgIHBhcmFtcy50eXBlICA9IGFyZ3VtZW50c1syXSB8fCAnJztcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gRXg6IHN3YWwoeyB0aXRsZTpcIkhlbGxvXCIsIHRleHQ6IFwiSnVzdCB0ZXN0aW5nXCIsIHR5cGU6IFwiaW5mb1wiIH0pO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoY3VzdG9taXphdGlvbnMudGl0bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb2dTdHIoJ01pc3NpbmcgXCJ0aXRsZVwiIGFyZ3VtZW50IScpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHBhcmFtcy50aXRsZSA9IGN1c3RvbWl6YXRpb25zLnRpdGxlO1xuXG4gICAgICBmb3IgKGxldCBjdXN0b21OYW1lIGluIGRlZmF1bHRQYXJhbXMpIHtcbiAgICAgICAgcGFyYW1zW2N1c3RvbU5hbWVdID0gYXJndW1lbnRPckRlZmF1bHQoY3VzdG9tTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgXCJDb25maXJtXCIgaW5zdGVhZCBvZiBcIk9LXCIgaWYgY2FuY2VsIGJ1dHRvbiBpcyB2aXNpYmxlXG4gICAgICBwYXJhbXMuY29uZmlybUJ1dHRvblRleHQgPSBwYXJhbXMuc2hvd0NhbmNlbEJ1dHRvbiA/ICdDb25maXJtJyA6IGRlZmF1bHRQYXJhbXMuY29uZmlybUJ1dHRvblRleHQ7XG4gICAgICBwYXJhbXMuY29uZmlybUJ1dHRvblRleHQgPSBhcmd1bWVudE9yRGVmYXVsdCgnY29uZmlybUJ1dHRvblRleHQnKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBjbGlja2luZyBvbiBcIk9LXCIvXCJDYW5jZWxcIlxuICAgICAgcGFyYW1zLmRvbmVGdW5jdGlvbiA9IGFyZ3VtZW50c1sxXSB8fCBudWxsO1xuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsb2dTdHIoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCEgRXhwZWN0ZWQgXCJzdHJpbmdcIiBvciBcIm9iamVjdFwiLCBnb3QgJyArIHR5cGVvZiBjdXN0b21pemF0aW9ucyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgfVxuXG4gIHNldFBhcmFtZXRlcnMocGFyYW1zKTtcbiAgZml4VmVydGljYWxQb3NpdGlvbigpO1xuICBvcGVuTW9kYWwoYXJndW1lbnRzWzFdKTtcblxuICAvLyBNb2RhbCBpbnRlcmFjdGlvbnNcbiAgdmFyIG1vZGFsID0gZ2V0TW9kYWwoKTtcblxuXG4gIC8qXG4gICAqIE1ha2Ugc3VyZSBhbGwgbW9kYWwgYnV0dG9ucyByZXNwb25kIHRvIGFsbCBldmVudHNcbiAgICovXG4gIHZhciAkYnV0dG9ucyA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICB2YXIgYnV0dG9uRXZlbnRzID0gWydvbmNsaWNrJywgJ29ubW91c2VvdmVyJywgJ29ubW91c2VvdXQnLCAnb25tb3VzZWRvd24nLCAnb25tb3VzZXVwJywgJ29uZm9jdXMnXTtcbiAgdmFyIG9uQnV0dG9uRXZlbnQgPSAoZSkgPT4gaGFuZGxlQnV0dG9uKGUsIHBhcmFtcywgbW9kYWwpO1xuXG4gIGZvciAobGV0IGJ0bkluZGV4ID0gMDsgYnRuSW5kZXggPCAkYnV0dG9ucy5sZW5ndGg7IGJ0bkluZGV4KyspIHtcbiAgICBmb3IgKGxldCBldnRJbmRleCA9IDA7IGV2dEluZGV4IDwgYnV0dG9uRXZlbnRzLmxlbmd0aDsgZXZ0SW5kZXgrKykge1xuICAgICAgbGV0IGJ0bkV2dCA9IGJ1dHRvbkV2ZW50c1tldnRJbmRleF07XG4gICAgICAkYnV0dG9uc1tidG5JbmRleF1bYnRuRXZ0XSA9IG9uQnV0dG9uRXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xpY2tpbmcgb3V0c2lkZSB0aGUgbW9kYWwgZGlzbWlzc2VzIGl0IChpZiBhbGxvd2VkIGJ5IHVzZXIpXG4gIGdldE92ZXJsYXkoKS5vbmNsaWNrID0gb25CdXR0b25FdmVudDtcblxuICBwcmV2aW91c1dpbmRvd0tleURvd24gPSB3aW5kb3cub25rZXlkb3duO1xuXG4gIHZhciBvbktleUV2ZW50ID0gKGUpID0+IGhhbmRsZUtleURvd24oZSwgcGFyYW1zLCBtb2RhbCk7XG4gIHdpbmRvdy5vbmtleWRvd24gPSBvbktleUV2ZW50O1xuXG4gIHdpbmRvdy5vbmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdoZW4gdGhlIHVzZXIgaGFzIGZvY3VzZWQgYXdheSBhbmQgZm9jdXNlZCBiYWNrIGZyb20gdGhlIHdob2xlIHdpbmRvdy5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFB1dCBpbiBhIHRpbWVvdXQgdG8ganVtcCBvdXQgb2YgdGhlIGV2ZW50IHNlcXVlbmNlLlxuICAgICAgLy8gQ2FsbGluZyBmb2N1cygpIGluIHRoZSBldmVudCBzZXF1ZW5jZSBjb25mdXNlcyB0aGluZ3MuXG4gICAgICBpZiAobGFzdEZvY3VzZWRCdXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsYXN0Rm9jdXNlZEJ1dHRvbi5mb2N1cygpO1xuICAgICAgICBsYXN0Rm9jdXNlZEJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfTtcbiAgXG4gIC8vIFNob3cgYWxlcnQgd2l0aCBlbmFibGVkIGJ1dHRvbnMgYWx3YXlzXG4gIHN3YWwuZW5hYmxlQnV0dG9ucygpO1xufTtcblxuXG5cbi8qXG4gKiBTZXQgZGVmYXVsdCBwYXJhbXMgZm9yIGVhY2ggcG9wdXBcbiAqIEBwYXJhbSB7T2JqZWN0fSB1c2VyUGFyYW1zXG4gKi9cbnN3ZWV0QWxlcnQuc2V0RGVmYXVsdHMgPSBzd2FsLnNldERlZmF1bHRzID0gZnVuY3Rpb24odXNlclBhcmFtcykge1xuICBpZiAoIXVzZXJQYXJhbXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXJQYXJhbXMgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAodHlwZW9mIHVzZXJQYXJhbXMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyUGFyYW1zIGhhcyB0byBiZSBhIG9iamVjdCcpO1xuICB9XG5cbiAgZXh0ZW5kKGRlZmF1bHRQYXJhbXMsIHVzZXJQYXJhbXMpO1xufTtcblxuXG4vKlxuICogQW5pbWF0aW9uIHdoZW4gY2xvc2luZyBtb2RhbFxuICovXG5zd2VldEFsZXJ0LmNsb3NlID0gc3dhbC5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbW9kYWwgPSBnZXRNb2RhbCgpO1xuXG4gIGZhZGVPdXQoZ2V0T3ZlcmxheSgpLCA1KTtcbiAgZmFkZU91dChtb2RhbCwgNSk7XG4gIHJlbW92ZUNsYXNzKG1vZGFsLCAnc2hvd1N3ZWV0QWxlcnQnKTtcbiAgYWRkQ2xhc3MobW9kYWwsICdoaWRlU3dlZXRBbGVydCcpO1xuICByZW1vdmVDbGFzcyhtb2RhbCwgJ3Zpc2libGUnKTtcblxuICAvKlxuICAgKiBSZXNldCBpY29uIGFuaW1hdGlvbnNcbiAgICovXG4gIHZhciAkc3VjY2Vzc0ljb24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtaWNvbi5zYS1zdWNjZXNzJyk7XG4gIHJlbW92ZUNsYXNzKCRzdWNjZXNzSWNvbiwgJ2FuaW1hdGUnKTtcbiAgcmVtb3ZlQ2xhc3MoJHN1Y2Nlc3NJY29uLnF1ZXJ5U2VsZWN0b3IoJy5zYS10aXAnKSwgJ2FuaW1hdGVTdWNjZXNzVGlwJyk7XG4gIHJlbW92ZUNsYXNzKCRzdWNjZXNzSWNvbi5xdWVyeVNlbGVjdG9yKCcuc2EtbG9uZycpLCAnYW5pbWF0ZVN1Y2Nlc3NMb25nJyk7XG5cbiAgdmFyICRlcnJvckljb24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtaWNvbi5zYS1lcnJvcicpO1xuICByZW1vdmVDbGFzcygkZXJyb3JJY29uLCAnYW5pbWF0ZUVycm9ySWNvbicpO1xuICByZW1vdmVDbGFzcygkZXJyb3JJY29uLnF1ZXJ5U2VsZWN0b3IoJy5zYS14LW1hcmsnKSwgJ2FuaW1hdGVYTWFyaycpO1xuXG4gIHZhciAkd2FybmluZ0ljb24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtaWNvbi5zYS13YXJuaW5nJyk7XG4gIHJlbW92ZUNsYXNzKCR3YXJuaW5nSWNvbiwgJ3B1bHNlV2FybmluZycpO1xuICByZW1vdmVDbGFzcygkd2FybmluZ0ljb24ucXVlcnlTZWxlY3RvcignLnNhLWJvZHknKSwgJ3B1bHNlV2FybmluZ0lucycpO1xuICByZW1vdmVDbGFzcygkd2FybmluZ0ljb24ucXVlcnlTZWxlY3RvcignLnNhLWRvdCcpLCAncHVsc2VXYXJuaW5nSW5zJyk7XG5cbiAgLy8gUmVzZXQgY3VzdG9tIGNsYXNzIChkZWxheSBzbyB0aGF0IFVJIGNoYW5nZXMgYXJlbid0IHZpc2libGUpXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGN1c3RvbUNsYXNzID0gbW9kYWwuZ2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbS1jbGFzcycpO1xuICAgIHJlbW92ZUNsYXNzKG1vZGFsLCBjdXN0b21DbGFzcyk7XG4gIH0sIDMwMCk7XG5cbiAgLy8gTWFrZSBwYWdlIHNjcm9sbGFibGUgYWdhaW5cbiAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ3N0b3Atc2Nyb2xsaW5nJyk7XG5cbiAgLy8gUmVzZXQgdGhlIHBhZ2UgdG8gaXRzIHByZXZpb3VzIHN0YXRlXG4gIHdpbmRvdy5vbmtleWRvd24gPSBwcmV2aW91c1dpbmRvd0tleURvd247XG4gIGlmICh3aW5kb3cucHJldmlvdXNBY3RpdmVFbGVtZW50KSB7XG4gICAgd2luZG93LnByZXZpb3VzQWN0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG4gIGxhc3RGb2N1c2VkQnV0dG9uID0gdW5kZWZpbmVkO1xuICBjbGVhclRpbWVvdXQobW9kYWwudGltZW91dCk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8qXG4gKiBWYWxpZGF0aW9uIG9mIHRoZSBpbnB1dCBmaWVsZCBpcyBkb25lIGJ5IHVzZXJcbiAqIElmIHNvbWV0aGluZyBpcyB3cm9uZyA9PiBjYWxsIHNob3dJbnB1dEVycm9yIHdpdGggZXJyb3JNZXNzYWdlXG4gKi9cbnN3ZWV0QWxlcnQuc2hvd0lucHV0RXJyb3IgPSBzd2FsLnNob3dJbnB1dEVycm9yID0gZnVuY3Rpb24oZXJyb3JNZXNzYWdlKSB7XG4gIHZhciBtb2RhbCA9IGdldE1vZGFsKCk7XG5cbiAgdmFyICRlcnJvckljb24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtaW5wdXQtZXJyb3InKTtcbiAgYWRkQ2xhc3MoJGVycm9ySWNvbiwgJ3Nob3cnKTtcblxuICB2YXIgJGVycm9yQ29udGFpbmVyID0gbW9kYWwucXVlcnlTZWxlY3RvcignLnNhLWVycm9yLWNvbnRhaW5lcicpO1xuICBhZGRDbGFzcygkZXJyb3JDb250YWluZXIsICdzaG93Jyk7XG5cbiAgJGVycm9yQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3AnKS5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2U7XG5cbiAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBzd2VldEFsZXJ0LmVuYWJsZUJ1dHRvbnMoKTtcbiAgfSwgMSk7XG5cbiAgbW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpO1xufTtcblxuXG4vKlxuICogUmVzZXQgaW5wdXQgZXJyb3IgRE9NIGVsZW1lbnRzXG4gKi9cbnN3ZWV0QWxlcnQucmVzZXRJbnB1dEVycm9yID0gc3dhbC5yZXNldElucHV0RXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xuICAvLyBJZiBwcmVzcyBlbnRlciA9PiBpZ25vcmVcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyICRtb2RhbCA9IGdldE1vZGFsKCk7XG5cbiAgdmFyICRlcnJvckljb24gPSAkbW9kYWwucXVlcnlTZWxlY3RvcignLnNhLWlucHV0LWVycm9yJyk7XG4gIHJlbW92ZUNsYXNzKCRlcnJvckljb24sICdzaG93Jyk7XG5cbiAgdmFyICRlcnJvckNvbnRhaW5lciA9ICRtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtZXJyb3ItY29udGFpbmVyJyk7XG4gIHJlbW92ZUNsYXNzKCRlcnJvckNvbnRhaW5lciwgJ3Nob3cnKTtcbn07XG5cbi8qXG4gKiBEaXNhYmxlIGNvbmZpcm0gYW5kIGNhbmNlbCBidXR0b25zXG4gKi9cbnN3ZWV0QWxlcnQuZGlzYWJsZUJ1dHRvbnMgPSBzd2FsLmRpc2FibGVCdXR0b25zID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdmFyIG1vZGFsID0gZ2V0TW9kYWwoKTtcbiAgdmFyICRjb25maXJtQnV0dG9uID0gbW9kYWwucXVlcnlTZWxlY3RvcignYnV0dG9uLmNvbmZpcm0nKTtcbiAgdmFyICRjYW5jZWxCdXR0b24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCdidXR0b24uY2FuY2VsJyk7XG4gICRjb25maXJtQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgJGNhbmNlbEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG59O1xuXG4vKlxuICogRW5hYmxlIGNvbmZpcm0gYW5kIGNhbmNlbCBidXR0b25zXG4gKi9cbnN3ZWV0QWxlcnQuZW5hYmxlQnV0dG9ucyA9IHN3YWwuZW5hYmxlQnV0dG9ucyA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHZhciBtb2RhbCA9IGdldE1vZGFsKCk7XG4gIHZhciAkY29uZmlybUJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb25maXJtJyk7XG4gIHZhciAkY2FuY2VsQnV0dG9uID0gbW9kYWwucXVlcnlTZWxlY3RvcignYnV0dG9uLmNhbmNlbCcpO1xuICAkY29uZmlybUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAkY2FuY2VsQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG59O1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gVGhlICdoYW5kbGUtY2xpY2snIG1vZHVsZSByZXF1aXJlc1xuICAvLyB0aGF0ICdzd2VldEFsZXJ0JyB3YXMgc2V0IGFzIGdsb2JhbC5cbiAgd2luZG93LnN3ZWV0QWxlcnQgPSB3aW5kb3cuc3dhbCA9IHN3ZWV0QWxlcnQ7XG59IGVsc2Uge1xuICBsb2dTdHIoJ1N3ZWV0QWxlcnQgaXMgYSBmcm9udGVuZCBtb2R1bGUhJyk7XG59XG4iLCJ2YXIgZGVmYXVsdFBhcmFtcyA9IHtcbiAgdGl0bGU6ICcnLFxuICB0ZXh0OiAnJyxcbiAgdHlwZTogbnVsbCxcbiAgYWxsb3dPdXRzaWRlQ2xpY2s6IGZhbHNlLFxuICBzaG93Q29uZmlybUJ1dHRvbjogdHJ1ZSxcbiAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXG4gIGNsb3NlT25Db25maXJtOiB0cnVlLFxuICBjbG9zZU9uQ2FuY2VsOiB0cnVlLFxuICBjb25maXJtQnV0dG9uVGV4dDogJ09LJyxcbiAgY29uZmlybUJ1dHRvbkNvbG9yOiAnIzhDRDRGNScsXG4gIGNhbmNlbEJ1dHRvblRleHQ6ICdDYW5jZWwnLFxuICBpbWFnZVVybDogbnVsbCxcbiAgaW1hZ2VTaXplOiBudWxsLFxuICB0aW1lcjogbnVsbCxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBodG1sOiBmYWxzZSxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhbGxvd0VzY2FwZUtleTogdHJ1ZSxcbiAgaW5wdXRUeXBlOiAndGV4dCcsXG4gIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICBpbnB1dFZhbHVlOiAnJyxcbiAgc2hvd0xvYWRlck9uQ29uZmlybTogZmFsc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRQYXJhbXM7XG4iLCJpbXBvcnQgeyBjb2xvckx1bWluYW5jZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TW9kYWwgfSBmcm9tICcuL2hhbmRsZS1zd2FsLWRvbSc7XG5pbXBvcnQgeyBoYXNDbGFzcywgaXNEZXNjZW5kYW50IH0gZnJvbSAnLi9oYW5kbGUtZG9tJztcblxuXG4vKlxuICogVXNlciBjbGlja2VkIG9uIFwiQ29uZmlybVwiL1wiT0tcIiBvciBcIkNhbmNlbFwiXG4gKi9cbnZhciBoYW5kbGVCdXR0b24gPSBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBtb2RhbCkge1xuICB2YXIgZSA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDtcbiAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcblxuICB2YXIgdGFyZ2V0ZWRDb25maXJtID0gdGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdjb25maXJtJykgIT09IC0xO1xuICB2YXIgdGFyZ2V0ZWRPdmVybGF5ID0gdGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdzd2VldC1vdmVybGF5JykgIT09IC0xO1xuICB2YXIgbW9kYWxJc1Zpc2libGUgID0gaGFzQ2xhc3MobW9kYWwsICd2aXNpYmxlJyk7XG4gIHZhciBkb25lRnVuY3Rpb25FeGlzdHMgPSAocGFyYW1zLmRvbmVGdW5jdGlvbiAmJiBtb2RhbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGFzLWRvbmUtZnVuY3Rpb24nKSA9PT0gJ3RydWUnKTtcblxuICAvLyBTaW5jZSB0aGUgdXNlciBjYW4gY2hhbmdlIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIG9mIHRoZSBjb25maXJtIGJ1dHRvbiBwcm9ncmFtbWF0aWNhbGx5LFxuICAvLyB3ZSBtdXN0IGNhbGN1bGF0ZSB3aGF0IHRoZSBjb2xvciBzaG91bGQgYmUgb24gaG92ZXIvYWN0aXZlXG4gIHZhciBub3JtYWxDb2xvciwgaG92ZXJDb2xvciwgYWN0aXZlQ29sb3I7XG4gIGlmICh0YXJnZXRlZENvbmZpcm0gJiYgcGFyYW1zLmNvbmZpcm1CdXR0b25Db2xvcikge1xuICAgIG5vcm1hbENvbG9yICA9IHBhcmFtcy5jb25maXJtQnV0dG9uQ29sb3I7XG4gICAgaG92ZXJDb2xvciAgID0gY29sb3JMdW1pbmFuY2Uobm9ybWFsQ29sb3IsIC0wLjA0KTtcbiAgICBhY3RpdmVDb2xvciAgPSBjb2xvckx1bWluYW5jZShub3JtYWxDb2xvciwgLTAuMTQpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU2V0Q29uZmlybUJ1dHRvbkNvbG9yKGNvbG9yKSB7XG4gICAgaWYgKHRhcmdldGVkQ29uZmlybSAmJiBwYXJhbXMuY29uZmlybUJ1dHRvbkNvbG9yKSB7XG4gICAgICB0YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgc2hvdWxkU2V0Q29uZmlybUJ1dHRvbkNvbG9yKGhvdmVyQ29sb3IpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBzaG91bGRTZXRDb25maXJtQnV0dG9uQ29sb3Iobm9ybWFsQ29sb3IpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgc2hvdWxkU2V0Q29uZmlybUJ1dHRvbkNvbG9yKGFjdGl2ZUNvbG9yKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgICBzaG91bGRTZXRDb25maXJtQnV0dG9uQ29sb3IoaG92ZXJDb2xvcik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgIGxldCAkY29uZmlybUJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb25maXJtJyk7XG4gICAgICBsZXQgJGNhbmNlbEJ1dHRvbiAgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCdidXR0b24uY2FuY2VsJyk7XG5cbiAgICAgIGlmICh0YXJnZXRlZENvbmZpcm0pIHtcbiAgICAgICAgJGNhbmNlbEJ1dHRvbi5zdHlsZS5ib3hTaGFkb3cgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkY29uZmlybUJ1dHRvbi5zdHlsZS5ib3hTaGFkb3cgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIGxldCBjbGlja2VkT25Nb2RhbCA9IChtb2RhbCA9PT0gdGFyZ2V0KTtcbiAgICAgIGxldCBjbGlja2VkT25Nb2RhbENoaWxkID0gaXNEZXNjZW5kYW50KG1vZGFsLCB0YXJnZXQpO1xuXG4gICAgICAvLyBJZ25vcmUgY2xpY2sgb3V0c2lkZSBpZiBhbGxvd091dHNpZGVDbGljayBpcyBmYWxzZVxuICAgICAgaWYgKCFjbGlja2VkT25Nb2RhbCAmJiAhY2xpY2tlZE9uTW9kYWxDaGlsZCAmJiBtb2RhbElzVmlzaWJsZSAmJiAhcGFyYW1zLmFsbG93T3V0c2lkZUNsaWNrKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0ZWRDb25maXJtICYmIGRvbmVGdW5jdGlvbkV4aXN0cyAmJiBtb2RhbElzVmlzaWJsZSkge1xuICAgICAgICBoYW5kbGVDb25maXJtKG1vZGFsLCBwYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChkb25lRnVuY3Rpb25FeGlzdHMgJiYgbW9kYWxJc1Zpc2libGUgfHwgdGFyZ2V0ZWRPdmVybGF5KSB7XG4gICAgICAgIGhhbmRsZUNhbmNlbChtb2RhbCwgcGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZXNjZW5kYW50KG1vZGFsLCB0YXJnZXQpICYmIHRhcmdldC50YWdOYW1lID09PSAnQlVUVE9OJykge1xuICAgICAgICBzd2VldEFsZXJ0LmNsb3NlKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuLypcbiAqICBVc2VyIGNsaWNrZWQgb24gXCJDb25maXJtXCIvXCJPS1wiXG4gKi9cbnZhciBoYW5kbGVDb25maXJtID0gZnVuY3Rpb24obW9kYWwsIHBhcmFtcykge1xuICB2YXIgY2FsbGJhY2tWYWx1ZSA9IHRydWU7XG5cbiAgaWYgKGhhc0NsYXNzKG1vZGFsLCAnc2hvdy1pbnB1dCcpKSB7XG4gICAgY2FsbGJhY2tWYWx1ZSA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWU7XG5cbiAgICBpZiAoIWNhbGxiYWNrVmFsdWUpIHtcbiAgICAgIGNhbGxiYWNrVmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBwYXJhbXMuZG9uZUZ1bmN0aW9uKGNhbGxiYWNrVmFsdWUpO1xuXG4gIGlmIChwYXJhbXMuY2xvc2VPbkNvbmZpcm0pIHtcbiAgICBzd2VldEFsZXJ0LmNsb3NlKCk7XG4gIH1cbiAgLy8gRGlzYWJsZSBjYW5jZWwgYW5kIGNvbmZpcm0gYnV0dG9uIGlmIHRoZSBwYXJhbWV0ZXIgaXMgdHJ1ZVxuICBpZiAocGFyYW1zLnNob3dMb2FkZXJPbkNvbmZpcm0pIHtcbiAgICBzd2VldEFsZXJ0LmRpc2FibGVCdXR0b25zKCk7XG4gIH1cbn07XG5cbi8qXG4gKiAgVXNlciBjbGlja2VkIG9uIFwiQ2FuY2VsXCJcbiAqL1xudmFyIGhhbmRsZUNhbmNlbCA9IGZ1bmN0aW9uKG1vZGFsLCBwYXJhbXMpIHtcbiAgLy8gQ2hlY2sgaWYgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0cyBhIHBhcmFtZXRlciAodG8gdHJhY2sgY2FuY2VsIGFjdGlvbnMpXG4gIHZhciBmdW5jdGlvbkFzU3RyID0gU3RyaW5nKHBhcmFtcy5kb25lRnVuY3Rpb24pLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gIHZhciBmdW5jdGlvbkhhbmRsZXNDYW5jZWwgPSBmdW5jdGlvbkFzU3RyLnN1YnN0cmluZygwLCA5KSA9PT0gJ2Z1bmN0aW9uKCcgJiYgZnVuY3Rpb25Bc1N0ci5zdWJzdHJpbmcoOSwgMTApICE9PSAnKSc7XG5cbiAgaWYgKGZ1bmN0aW9uSGFuZGxlc0NhbmNlbCkge1xuICAgIHBhcmFtcy5kb25lRnVuY3Rpb24oZmFsc2UpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jbG9zZU9uQ2FuY2VsKSB7XG4gICAgc3dlZXRBbGVydC5jbG9zZSgpO1xuICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlQnV0dG9uLFxuICBoYW5kbGVDb25maXJtLFxuICBoYW5kbGVDYW5jZWxcbn07XG4iLCJ2YXIgaGFzQ2xhc3MgPSBmdW5jdGlvbihlbGVtLCBjbGFzc05hbWUpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoJyAnICsgY2xhc3NOYW1lICsgJyAnKS50ZXN0KCcgJyArIGVsZW0uY2xhc3NOYW1lICsgJyAnKTtcbn07XG5cbnZhciBhZGRDbGFzcyA9IGZ1bmN0aW9uKGVsZW0sIGNsYXNzTmFtZSkge1xuICBpZiAoIWhhc0NsYXNzKGVsZW0sIGNsYXNzTmFtZSkpIHtcbiAgICBlbGVtLmNsYXNzTmFtZSArPSAnICcgKyBjbGFzc05hbWU7XG4gIH1cbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsZW0sIGNsYXNzTmFtZSkge1xuICB2YXIgbmV3Q2xhc3MgPSAnICcgKyBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC9bXFx0XFxyXFxuXS9nLCAnICcpICsgJyAnO1xuICBpZiAoaGFzQ2xhc3MoZWxlbSwgY2xhc3NOYW1lKSkge1xuICAgIHdoaWxlIChuZXdDbGFzcy5pbmRleE9mKCcgJyArIGNsYXNzTmFtZSArICcgJykgPj0gMCkge1xuICAgICAgbmV3Q2xhc3MgPSBuZXdDbGFzcy5yZXBsYWNlKCcgJyArIGNsYXNzTmFtZSArICcgJywgJyAnKTtcbiAgICB9XG4gICAgZWxlbS5jbGFzc05hbWUgPSBuZXdDbGFzcy5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG4gIH1cbn07XG5cbnZhciBlc2NhcGVIdG1sID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpO1xuICByZXR1cm4gZGl2LmlubmVySFRNTDtcbn07XG5cbnZhciBfc2hvdyA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gIGVsZW0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG59O1xuXG52YXIgc2hvdyA9IGZ1bmN0aW9uKGVsZW1zKSB7XG4gIGlmIChlbGVtcyAmJiAhZWxlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9zaG93KGVsZW1zKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgX3Nob3coZWxlbXNbaV0pO1xuICB9XG59O1xuXG52YXIgX2hpZGUgPSBmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uc3R5bGUub3BhY2l0eSA9ICcnO1xuICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG59O1xuXG52YXIgaGlkZSA9IGZ1bmN0aW9uKGVsZW1zKSB7XG4gIGlmIChlbGVtcyAmJiAhZWxlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9oaWRlKGVsZW1zKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgX2hpZGUoZWxlbXNbaV0pO1xuICB9XG59O1xuXG52YXIgaXNEZXNjZW5kYW50ID0gZnVuY3Rpb24ocGFyZW50LCBjaGlsZCkge1xuICB2YXIgbm9kZSA9IGNoaWxkLnBhcmVudE5vZGU7XG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIGdldFRvcE1hcmdpbiA9IGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xuICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gIHZhciBoZWlnaHQgPSBlbGVtLmNsaWVudEhlaWdodCxcbiAgICAgIHBhZGRpbmc7XG4gIGlmICh0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBJRSA4XG4gICAgcGFkZGluZyA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbSkuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSwgMTApO1xuICB9IGVsc2Uge1xuICAgIHBhZGRpbmcgPSBwYXJzZUludChlbGVtLmN1cnJlbnRTdHlsZS5wYWRkaW5nKTtcbiAgfVxuXG4gIGVsZW0uc3R5bGUubGVmdCA9ICcnO1xuICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJldHVybiAoJy0nICsgcGFyc2VJbnQoKGhlaWdodCArIHBhZGRpbmcpIC8gMikgKyAncHgnKTtcbn07XG5cbnZhciBmYWRlSW4gPSBmdW5jdGlvbihlbGVtLCBpbnRlcnZhbCkge1xuICBpZiAoK2VsZW0uc3R5bGUub3BhY2l0eSA8IDEpIHtcbiAgICBpbnRlcnZhbCA9IGludGVydmFsIHx8IDE2O1xuICAgIGVsZW0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB2YXIgbGFzdCA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciB0aWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBlbGVtLnN0eWxlLm9wYWNpdHkgPSArZWxlbS5zdHlsZS5vcGFjaXR5ICsgKG5ldyBEYXRlKCkgLSBsYXN0KSAvIDEwMDtcbiAgICAgIGxhc3QgPSArbmV3IERhdGUoKTtcblxuICAgICAgaWYgKCtlbGVtLnN0eWxlLm9wYWNpdHkgPCAxKSB7XG4gICAgICAgIHNldFRpbWVvdXQodGljaywgaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGljaygpO1xuICB9XG4gIGVsZW0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IC8vZmFsbGJhY2sgSUU4XG59O1xuXG52YXIgZmFkZU91dCA9IGZ1bmN0aW9uKGVsZW0sIGludGVydmFsKSB7XG4gIGludGVydmFsID0gaW50ZXJ2YWwgfHwgMTY7XG4gIGVsZW0uc3R5bGUub3BhY2l0eSA9IDE7XG4gIHZhciBsYXN0ID0gK25ldyBEYXRlKCk7XG4gIHZhciB0aWNrID0gZnVuY3Rpb24oKSB7XG4gICAgZWxlbS5zdHlsZS5vcGFjaXR5ID0gK2VsZW0uc3R5bGUub3BhY2l0eSAtIChuZXcgRGF0ZSgpIC0gbGFzdCkgLyAxMDA7XG4gICAgbGFzdCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKCtlbGVtLnN0eWxlLm9wYWNpdHkgPiAwKSB7XG4gICAgICBzZXRUaW1lb3V0KHRpY2ssIGludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfTtcbiAgdGljaygpO1xufTtcblxudmFyIGZpcmVDbGljayA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgLy8gVGFrZW4gZnJvbSBodHRwOi8vd3d3Lm5vbm9idHJ1c2l2ZS5jb20vMjAxMS8xMS8yOS9wcm9ncmFtYXRpY2FsbHktZmlyZS1jcm9zc2Jyb3dzZXItY2xpY2stZXZlbnQtd2l0aC1qYXZhc2NyaXB0L1xuICAvLyBUaGVuIGZpeGVkIGZvciB0b2RheSdzIENocm9tZSBicm93c2VyLlxuICBpZiAodHlwZW9mIE1vdXNlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVcC10by1kYXRlIGFwcHJvYWNoXG4gICAgdmFyIG1ldnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICB2aWV3OiB3aW5kb3csXG4gICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KTtcbiAgICBub2RlLmRpc3BhdGNoRXZlbnQobWV2dCk7XG4gIH0gZWxzZSBpZiAoIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICkge1xuICAgIC8vIEZhbGxiYWNrXG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuICAgIGV2dC5pbml0RXZlbnQoJ2NsaWNrJywgZmFsc2UsIGZhbHNlKTtcbiAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfSBlbHNlIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCkge1xuICAgIG5vZGUuZmlyZUV2ZW50KCdvbmNsaWNrJykgO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlLm9uY2xpY2sgPT09ICdmdW5jdGlvbicgKSB7XG4gICAgbm9kZS5vbmNsaWNrKCk7XG4gIH1cbn07XG5cbnZhciBzdG9wRXZlbnRQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgLy8gSW4gcGFydGljdWxhciwgbWFrZSBzdXJlIHRoZSBzcGFjZSBiYXIgZG9lc24ndCBzY3JvbGwgdGhlIG1haW4gd2luZG93LlxuICBpZiAodHlwZW9mIGUuc3RvcFByb3BhZ2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0gZWxzZSBpZiAod2luZG93LmV2ZW50ICYmIHdpbmRvdy5ldmVudC5oYXNPd25Qcm9wZXJ0eSgnY2FuY2VsQnViYmxlJykpIHtcbiAgICB3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgfVxufTtcblxuZXhwb3J0IHsgXG4gIGhhc0NsYXNzLCBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MsIFxuICBlc2NhcGVIdG1sLCBcbiAgX3Nob3csIHNob3csIF9oaWRlLCBoaWRlLCBcbiAgaXNEZXNjZW5kYW50LCBcbiAgZ2V0VG9wTWFyZ2luLFxuICBmYWRlSW4sIGZhZGVPdXQsXG4gIGZpcmVDbGljayxcbiAgc3RvcEV2ZW50UHJvcGFnYXRpb25cbn07XG4iLCJpbXBvcnQgeyBzdG9wRXZlbnRQcm9wYWdhdGlvbiwgZmlyZUNsaWNrIH0gZnJvbSAnLi9oYW5kbGUtZG9tJztcbmltcG9ydCB7IHNldEZvY3VzU3R5bGUgfSBmcm9tICcuL2hhbmRsZS1zd2FsLWRvbSc7XG5cblxudmFyIGhhbmRsZUtleURvd24gPSBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBtb2RhbCkge1xuICB2YXIgZSA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDtcbiAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcblxuICB2YXIgJG9rQnV0dG9uICAgICA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb25maXJtJyk7XG4gIHZhciAkY2FuY2VsQnV0dG9uID0gbW9kYWwucXVlcnlTZWxlY3RvcignYnV0dG9uLmNhbmNlbCcpO1xuICB2YXIgJG1vZGFsQnV0dG9ucyA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvblt0YWJpbmRleF0nKTtcblxuXG4gIGlmIChbOSwgMTMsIDMyLCAyN10uaW5kZXhPZihrZXlDb2RlKSA9PT0gLTEpIHtcbiAgICAvLyBEb24ndCBkbyB3b3JrIG9uIGtleXMgd2UgZG9uJ3QgY2FyZSBhYm91dC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgJHRhcmdldEVsZW1lbnQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG5cbiAgdmFyIGJ0bkluZGV4ID0gLTE7IC8vIEZpbmQgdGhlIGJ1dHRvbiAtIG5vdGUsIHRoaXMgaXMgYSBub2RlbGlzdCwgbm90IGFuIGFycmF5LlxuICBmb3IgKHZhciBpID0gMDsgaSA8ICRtb2RhbEJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoJHRhcmdldEVsZW1lbnQgPT09ICRtb2RhbEJ1dHRvbnNbaV0pIHtcbiAgICAgIGJ0bkluZGV4ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChrZXlDb2RlID09PSA5KSB7XG4gICAgLy8gVEFCXG4gICAgaWYgKGJ0bkluZGV4ID09PSAtMSkge1xuICAgICAgLy8gTm8gYnV0dG9uIGZvY3VzZWQuIEp1bXAgdG8gdGhlIGNvbmZpcm0gYnV0dG9uLlxuICAgICAgJHRhcmdldEVsZW1lbnQgPSAkb2tCdXR0b247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN5Y2xlIHRvIHRoZSBuZXh0IGJ1dHRvblxuICAgICAgaWYgKGJ0bkluZGV4ID09PSAkbW9kYWxCdXR0b25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgJHRhcmdldEVsZW1lbnQgPSAkbW9kYWxCdXR0b25zWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHRhcmdldEVsZW1lbnQgPSAkbW9kYWxCdXR0b25zW2J0bkluZGV4ICsgMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RvcEV2ZW50UHJvcGFnYXRpb24oZSk7XG4gICAgJHRhcmdldEVsZW1lbnQuZm9jdXMoKTtcblxuICAgIGlmIChwYXJhbXMuY29uZmlybUJ1dHRvbkNvbG9yKSB7XG4gICAgICBzZXRGb2N1c1N0eWxlKCR0YXJnZXRFbGVtZW50LCBwYXJhbXMuY29uZmlybUJ1dHRvbkNvbG9yKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBpZiAoJHRhcmdldEVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgICAkdGFyZ2V0RWxlbWVudCA9ICRva0J1dHRvbjtcbiAgICAgICAgJG9rQnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChidG5JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8gRU5URVIvU1BBQ0UgY2xpY2tlZCBvdXRzaWRlIG9mIGEgYnV0dG9uLlxuICAgICAgICAkdGFyZ2V0RWxlbWVudCA9ICRva0J1dHRvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgLSBsZXQgdGhlIGJyb3dzZXIgaGFuZGxlIGl0LlxuICAgICAgICAkdGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IDI3ICYmIHBhcmFtcy5hbGxvd0VzY2FwZUtleSA9PT0gdHJ1ZSkge1xuICAgICAgJHRhcmdldEVsZW1lbnQgPSAkY2FuY2VsQnV0dG9uO1xuICAgICAgZmlyZUNsaWNrKCR0YXJnZXRFbGVtZW50LCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgLSBsZXQgdGhlIGJyb3dzZXIgaGFuZGxlIGl0LlxuICAgICAgJHRhcmdldEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVLZXlEb3duO1xuIiwiaW1wb3J0IHsgaGV4VG9SZ2IgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHJlbW92ZUNsYXNzLCBnZXRUb3BNYXJnaW4sIGZhZGVJbiwgc2hvdywgYWRkQ2xhc3MgfSBmcm9tICcuL2hhbmRsZS1kb20nO1xuaW1wb3J0IGRlZmF1bHRQYXJhbXMgZnJvbSAnLi9kZWZhdWx0LXBhcmFtcyc7XG5cbnZhciBtb2RhbENsYXNzICAgPSAnLnN3ZWV0LWFsZXJ0JztcbnZhciBvdmVybGF5Q2xhc3MgPSAnLnN3ZWV0LW92ZXJsYXknO1xuXG4vKlxuICogQWRkIG1vZGFsICsgb3ZlcmxheSB0byBET01cbiAqL1xuaW1wb3J0IGluamVjdGVkSFRNTCBmcm9tICcuL2luamVjdGVkLWh0bWwnO1xuXG52YXIgc3dlZXRBbGVydEluaXRpYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN3ZWV0V3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBzd2VldFdyYXAuaW5uZXJIVE1MID0gaW5qZWN0ZWRIVE1MO1xuXG4gIC8vIEFwcGVuZCBlbGVtZW50cyB0byBib2R5XG4gIHdoaWxlIChzd2VldFdyYXAuZmlyc3RDaGlsZCkge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3dlZXRXcmFwLmZpcnN0Q2hpbGQpO1xuICB9XG59O1xuXG4vKlxuICogR2V0IERPTSBlbGVtZW50IG9mIG1vZGFsXG4gKi9cbnZhciBnZXRNb2RhbCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgJG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihtb2RhbENsYXNzKTtcblxuICBpZiAoISRtb2RhbCkge1xuICAgIHN3ZWV0QWxlcnRJbml0aWFsaXplKCk7XG4gICAgJG1vZGFsID0gZ2V0TW9kYWwoKTtcbiAgfVxuXG4gIHJldHVybiAkbW9kYWw7XG59O1xuXG4vKlxuICogR2V0IERPTSBlbGVtZW50IG9mIGlucHV0IChpbiBtb2RhbClcbiAqL1xudmFyIGdldElucHV0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciAkbW9kYWwgPSBnZXRNb2RhbCgpO1xuICBpZiAoJG1vZGFsKSB7XG4gICAgcmV0dXJuICRtb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICB9XG59O1xuXG4vKlxuICogR2V0IERPTSBlbGVtZW50IG9mIG92ZXJsYXlcbiAqL1xudmFyIGdldE92ZXJsYXkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3ZlcmxheUNsYXNzKTtcbn07XG5cbi8qXG4gKiBBZGQgYm94LXNoYWRvdyBzdHlsZSB0byBidXR0b24gKGRlcGVuZGluZyBvbiBpdHMgY2hvc2VuIGJnLWNvbG9yKVxuICovXG52YXIgc2V0Rm9jdXNTdHlsZSA9IGZ1bmN0aW9uKCRidXR0b24sIGJnQ29sb3IpIHtcbiAgdmFyIHJnYkNvbG9yID0gaGV4VG9SZ2IoYmdDb2xvcik7XG4gICRidXR0b24uc3R5bGUuYm94U2hhZG93ID0gJzAgMCAycHggcmdiYSgnICsgcmdiQ29sb3IgKyAnLCAwLjgpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KSc7XG59O1xuXG4vKlxuICogQW5pbWF0aW9uIHdoZW4gb3BlbmluZyBtb2RhbFxuICovXG52YXIgb3Blbk1vZGFsID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyICRtb2RhbCA9IGdldE1vZGFsKCk7XG4gIGZhZGVJbihnZXRPdmVybGF5KCksIDEwKTtcbiAgc2hvdygkbW9kYWwpO1xuICBhZGRDbGFzcygkbW9kYWwsICdzaG93U3dlZXRBbGVydCcpO1xuICByZW1vdmVDbGFzcygkbW9kYWwsICdoaWRlU3dlZXRBbGVydCcpO1xuXG4gIHdpbmRvdy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB2YXIgJG9rQnV0dG9uID0gJG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb25maXJtJyk7XG4gICRva0J1dHRvbi5mb2N1cygpO1xuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGFkZENsYXNzKCRtb2RhbCwgJ3Zpc2libGUnKTtcbiAgfSwgNTAwKTtcblxuICB2YXIgdGltZXIgPSAkbW9kYWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRpbWVyJyk7XG5cbiAgaWYgKHRpbWVyICE9PSAnbnVsbCcgJiYgdGltZXIgIT09ICcnKSB7XG4gICAgdmFyIHRpbWVyQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAkbW9kYWwudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZG9uZUZ1bmN0aW9uRXhpc3RzID0gKCh0aW1lckNhbGxiYWNrIHx8IG51bGwpICYmICRtb2RhbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGFzLWRvbmUtZnVuY3Rpb24nKSA9PT0gJ3RydWUnKTtcbiAgICAgIGlmIChkb25lRnVuY3Rpb25FeGlzdHMpIHsgXG4gICAgICAgIHRpbWVyQ2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3dlZXRBbGVydC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVyKTtcbiAgfVxufTtcblxuLypcbiAqIFJlc2V0IHRoZSBzdHlsaW5nIG9mIHRoZSBpbnB1dFxuICogKGZvciBleGFtcGxlIGlmIGVycm9ycyBoYXZlIGJlZW4gc2hvd24pXG4gKi9cbnZhciByZXNldElucHV0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciAkbW9kYWwgPSBnZXRNb2RhbCgpO1xuICB2YXIgJGlucHV0ID0gZ2V0SW5wdXQoKTtcblxuICByZW1vdmVDbGFzcygkbW9kYWwsICdzaG93LWlucHV0Jyk7XG4gICRpbnB1dC52YWx1ZSA9IGRlZmF1bHRQYXJhbXMuaW5wdXRWYWx1ZTtcbiAgJGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsIGRlZmF1bHRQYXJhbXMuaW5wdXRUeXBlKTtcbiAgJGlucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCBkZWZhdWx0UGFyYW1zLmlucHV0UGxhY2Vob2xkZXIpO1xuXG4gIHJlc2V0SW5wdXRFcnJvcigpO1xufTtcblxuXG52YXIgcmVzZXRJbnB1dEVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgLy8gSWYgcHJlc3MgZW50ZXIgPT4gaWdub3JlXG4gIGlmIChldmVudCAmJiBldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciAkbW9kYWwgPSBnZXRNb2RhbCgpO1xuXG4gIHZhciAkZXJyb3JJY29uID0gJG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5zYS1pbnB1dC1lcnJvcicpO1xuICByZW1vdmVDbGFzcygkZXJyb3JJY29uLCAnc2hvdycpO1xuXG4gIHZhciAkZXJyb3JDb250YWluZXIgPSAkbW9kYWwucXVlcnlTZWxlY3RvcignLnNhLWVycm9yLWNvbnRhaW5lcicpO1xuICByZW1vdmVDbGFzcygkZXJyb3JDb250YWluZXIsICdzaG93Jyk7XG59O1xuXG5cbi8qXG4gKiBTZXQgXCJtYXJnaW4tdG9wXCItcHJvcGVydHkgb24gbW9kYWwgYmFzZWQgb24gaXRzIGNvbXB1dGVkIGhlaWdodFxuICovXG52YXIgZml4VmVydGljYWxQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgJG1vZGFsID0gZ2V0TW9kYWwoKTtcbiAgJG1vZGFsLnN0eWxlLm1hcmdpblRvcCA9IGdldFRvcE1hcmdpbihnZXRNb2RhbCgpKTtcbn07XG5cblxuZXhwb3J0IHsgXG4gIHN3ZWV0QWxlcnRJbml0aWFsaXplLFxuICBnZXRNb2RhbCxcbiAgZ2V0T3ZlcmxheSxcbiAgZ2V0SW5wdXQsXG4gIHNldEZvY3VzU3R5bGUsXG4gIG9wZW5Nb2RhbCxcbiAgcmVzZXRJbnB1dCxcbiAgcmVzZXRJbnB1dEVycm9yLFxuICBmaXhWZXJ0aWNhbFBvc2l0aW9uXG59O1xuIiwidmFyIGluamVjdGVkSFRNTCA9IFxuXG4gIC8vIERhcmsgb3ZlcmxheVxuICBgPGRpdiBjbGFzcz1cInN3ZWV0LW92ZXJsYXlcIiB0YWJJbmRleD1cIi0xXCI+PC9kaXY+YCArXG5cbiAgLy8gTW9kYWxcbiAgYDxkaXYgY2xhc3M9XCJzd2VldC1hbGVydFwiPmAgK1xuXG4gICAgLy8gRXJyb3IgaWNvblxuICAgIGA8ZGl2IGNsYXNzPVwic2EtaWNvbiBzYS1lcnJvclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzYS14LW1hcmtcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYS1saW5lIHNhLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2EtbGluZSBzYS1yaWdodFwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5gICtcblxuICAgIC8vIFdhcm5pbmcgaWNvblxuICAgIGA8ZGl2IGNsYXNzPVwic2EtaWNvbiBzYS13YXJuaW5nXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInNhLWJvZHlcIj48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInNhLWRvdFwiPjwvc3Bhbj5cbiAgICA8L2Rpdj5gICtcblxuICAgIC8vIEluZm8gaWNvblxuICAgIGA8ZGl2IGNsYXNzPVwic2EtaWNvbiBzYS1pbmZvXCI+PC9kaXY+YCArXG5cbiAgICAvLyBTdWNjZXNzIGljb25cbiAgICBgPGRpdiBjbGFzcz1cInNhLWljb24gc2Etc3VjY2Vzc1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzYS1saW5lIHNhLXRpcFwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2EtbGluZSBzYS1sb25nXCI+PC9zcGFuPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2EtcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYS1maXhcIj48L2Rpdj5cbiAgICA8L2Rpdj5gICtcblxuICAgIGA8ZGl2IGNsYXNzPVwic2EtaWNvbiBzYS1jdXN0b21cIj48L2Rpdj5gICtcblxuICAgIC8vIFRpdGxlLCB0ZXh0IGFuZCBpbnB1dFxuICAgIGA8aDI+VGl0bGU8L2gyPlxuICAgIDxwPlRleHQ8L3A+XG4gICAgPGZpZWxkc2V0PlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdGFiSW5kZXg9XCIzXCIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYS1pbnB1dC1lcnJvclwiPjwvZGl2PlxuICAgIDwvZmllbGRzZXQ+YCArXG5cbiAgICAvLyBJbnB1dCBlcnJvcnNcbiAgICBgPGRpdiBjbGFzcz1cInNhLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb25cIj4hPC9kaXY+XG4gICAgICA8cD5Ob3QgdmFsaWQhPC9wPlxuICAgIDwvZGl2PmAgK1xuXG4gICAgLy8gQ2FuY2VsIGFuZCBjb25maXJtIGJ1dHRvbnNcbiAgICBgPGRpdiBjbGFzcz1cInNhLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxcIiB0YWJJbmRleD1cIjJcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYS1jb25maXJtLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZpcm1cIiB0YWJJbmRleD1cIjFcIj5PSzwvYnV0dG9uPmAgKyBcblxuICAgICAgICAvLyBMb2FkaW5nIGFuaW1hdGlvblxuICAgICAgICBgPGRpdiBjbGFzcz1cImxhLWJhbGwtZmFsbFwiPlxuICAgICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmAgK1xuXG4gIC8vIEVuZCBvZiBtb2RhbFxuICBgPC9kaXY+YDtcblxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0ZWRIVE1MO1xuIiwidmFyIGFsZXJ0VHlwZXMgPSBbJ2Vycm9yJywgJ3dhcm5pbmcnLCAnaW5mbycsICdzdWNjZXNzJywgJ2lucHV0JywgJ3Byb21wdCddO1xuXG5pbXBvcnQge1xuICBpc0lFOFxufSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgZ2V0TW9kYWwsXG4gIGdldElucHV0LFxuICBzZXRGb2N1c1N0eWxlXG59IGZyb20gJy4vaGFuZGxlLXN3YWwtZG9tJztcblxuaW1wb3J0IHtcbiAgaGFzQ2xhc3MsIGFkZENsYXNzLCByZW1vdmVDbGFzcyxcbiAgZXNjYXBlSHRtbCxcbiAgX3Nob3csIHNob3csIF9oaWRlLCBoaWRlXG59IGZyb20gJy4vaGFuZGxlLWRvbSc7XG5cblxuLypcbiAqIFNldCB0eXBlLCB0ZXh0IGFuZCBhY3Rpb25zIG9uIG1vZGFsXG4gKi9cbnZhciBzZXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24ocGFyYW1zKSB7XG4gIHZhciBtb2RhbCA9IGdldE1vZGFsKCk7XG5cbiAgdmFyICR0aXRsZSA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2gyJyk7XG4gIHZhciAkdGV4dCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcbiAgdmFyICRjYW5jZWxCdG4gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCdidXR0b24uY2FuY2VsJyk7XG4gIHZhciAkY29uZmlybUJ0biA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb25maXJtJyk7XG5cbiAgLypcbiAgICogVGl0bGVcbiAgICovXG4gICR0aXRsZS5pbm5lckhUTUwgPSBwYXJhbXMuaHRtbCA/IHBhcmFtcy50aXRsZSA6IGVzY2FwZUh0bWwocGFyYW1zLnRpdGxlKS5zcGxpdCgnXFxuJykuam9pbignPGJyPicpO1xuXG4gIC8qXG4gICAqIFRleHRcbiAgICovXG4gICR0ZXh0LmlubmVySFRNTCA9IHBhcmFtcy5odG1sID8gcGFyYW1zLnRleHQgOiBlc2NhcGVIdG1sKHBhcmFtcy50ZXh0IHx8ICcnKS5zcGxpdCgnXFxuJykuam9pbignPGJyPicpO1xuICBpZiAocGFyYW1zLnRleHQpIHNob3coJHRleHQpO1xuXG4gIC8qXG4gICAqIEN1c3RvbSBjbGFzc1xuICAgKi9cbiAgaWYgKHBhcmFtcy5jdXN0b21DbGFzcykge1xuICAgIGFkZENsYXNzKG1vZGFsLCBwYXJhbXMuY3VzdG9tQ2xhc3MpO1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tY2xhc3MnLCBwYXJhbXMuY3VzdG9tQ2xhc3MpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZpbmQgcHJldmlvdXNseSBzZXQgY2xhc3NlcyBhbmQgcmVtb3ZlIHRoZW1cbiAgICBsZXQgY3VzdG9tQ2xhc3MgPSBtb2RhbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLWNsYXNzJyk7XG4gICAgcmVtb3ZlQ2xhc3MobW9kYWwsIGN1c3RvbUNsYXNzKTtcbiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLWNsYXNzJywgJycpO1xuICB9XG5cbiAgLypcbiAgICogSWNvblxuICAgKi9cbiAgaGlkZShtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKCcuc2EtaWNvbicpKTtcblxuICBpZiAocGFyYW1zLnR5cGUgJiYgIWlzSUU4KCkpIHtcblxuICAgIGxldCB2YWxpZFR5cGUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxlcnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSBhbGVydFR5cGVzW2ldKSB7XG4gICAgICAgIHZhbGlkVHlwZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsaWRUeXBlKSB7XG4gICAgICBsb2dTdHIoJ1Vua25vd24gYWxlcnQgdHlwZTogJyArIHBhcmFtcy50eXBlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgdHlwZXNXaXRoSWNvbnMgPSBbJ3N1Y2Nlc3MnLCAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJ107XG4gICAgbGV0ICRpY29uO1xuXG4gICAgaWYgKHR5cGVzV2l0aEljb25zLmluZGV4T2YocGFyYW1zLnR5cGUpICE9PSAtMSkge1xuICAgICAgJGljb24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuc2EtaWNvbi4nICsgJ3NhLScgKyBwYXJhbXMudHlwZSk7XG4gICAgICBzaG93KCRpY29uKTtcbiAgICB9XG5cbiAgICBsZXQgJGlucHV0ID0gZ2V0SW5wdXQoKTtcblxuICAgIC8vIEFuaW1hdGUgaWNvblxuICAgIHN3aXRjaCAocGFyYW1zLnR5cGUpIHtcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIGFkZENsYXNzKCRpY29uLCAnYW5pbWF0ZScpO1xuICAgICAgICBhZGRDbGFzcygkaWNvbi5xdWVyeVNlbGVjdG9yKCcuc2EtdGlwJyksICdhbmltYXRlU3VjY2Vzc1RpcCcpO1xuICAgICAgICBhZGRDbGFzcygkaWNvbi5xdWVyeVNlbGVjdG9yKCcuc2EtbG9uZycpLCAnYW5pbWF0ZVN1Y2Nlc3NMb25nJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGFkZENsYXNzKCRpY29uLCAnYW5pbWF0ZUVycm9ySWNvbicpO1xuICAgICAgICBhZGRDbGFzcygkaWNvbi5xdWVyeVNlbGVjdG9yKCcuc2EteC1tYXJrJyksICdhbmltYXRlWE1hcmsnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBhZGRDbGFzcygkaWNvbiwgJ3B1bHNlV2FybmluZycpO1xuICAgICAgICBhZGRDbGFzcygkaWNvbi5xdWVyeVNlbGVjdG9yKCcuc2EtYm9keScpLCAncHVsc2VXYXJuaW5nSW5zJyk7XG4gICAgICAgIGFkZENsYXNzKCRpY29uLnF1ZXJ5U2VsZWN0b3IoJy5zYS1kb3QnKSwgJ3B1bHNlV2FybmluZ0lucycpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgY2FzZSAncHJvbXB0JzpcbiAgICAgICAgJGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsIHBhcmFtcy5pbnB1dFR5cGUpO1xuICAgICAgICAkaW5wdXQudmFsdWUgPSBwYXJhbXMuaW5wdXRWYWx1ZTtcbiAgICAgICAgJGlucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCBwYXJhbXMuaW5wdXRQbGFjZWhvbGRlcik7XG4gICAgICAgIGFkZENsYXNzKG1vZGFsLCAnc2hvdy1pbnB1dCcpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAkaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBzd2FsLnJlc2V0SW5wdXRFcnJvcik7XG4gICAgICAgIH0sIDQwMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIEN1c3RvbSBpbWFnZVxuICAgKi9cbiAgaWYgKHBhcmFtcy5pbWFnZVVybCkge1xuICAgIGxldCAkY3VzdG9tSWNvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5zYS1pY29uLnNhLWN1c3RvbScpO1xuXG4gICAgJGN1c3RvbUljb24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gJ3VybCgnICsgcGFyYW1zLmltYWdlVXJsICsgJyknO1xuICAgIHNob3coJGN1c3RvbUljb24pO1xuXG4gICAgbGV0IF9pbWdXaWR0aCA9IDgwO1xuICAgIGxldCBfaW1nSGVpZ2h0ID0gODA7XG5cbiAgICBpZiAocGFyYW1zLmltYWdlU2l6ZSkge1xuICAgICAgbGV0IGRpbWVuc2lvbnMgPSBwYXJhbXMuaW1hZ2VTaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKTtcbiAgICAgIGxldCBpbWdXaWR0aCA9IGRpbWVuc2lvbnNbMF07XG4gICAgICBsZXQgaW1nSGVpZ2h0ID0gZGltZW5zaW9uc1sxXTtcblxuICAgICAgaWYgKCFpbWdXaWR0aCB8fCAhaW1nSGVpZ2h0KSB7XG4gICAgICAgIGxvZ1N0cignUGFyYW1ldGVyIGltYWdlU2l6ZSBleHBlY3RzIHZhbHVlIHdpdGggZm9ybWF0IFdJRFRIeEhFSUdIVCwgZ290ICcgKyBwYXJhbXMuaW1hZ2VTaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pbWdXaWR0aCA9IGltZ1dpZHRoO1xuICAgICAgICBfaW1nSGVpZ2h0ID0gaW1nSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgICRjdXN0b21JY29uLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAkY3VzdG9tSWNvbi5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgKyAnd2lkdGg6JyArIF9pbWdXaWR0aCArICdweDsgaGVpZ2h0OicgKyBfaW1nSGVpZ2h0ICsgJ3B4Jyk7XG4gIH1cblxuICAvKlxuICAgKiBTaG93IGNhbmNlbCBidXR0b24/XG4gICAqL1xuICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGFzLWNhbmNlbC1idXR0b24nLCBwYXJhbXMuc2hvd0NhbmNlbEJ1dHRvbik7XG4gIGlmIChwYXJhbXMuc2hvd0NhbmNlbEJ1dHRvbikge1xuICAgICRjYW5jZWxCdG4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoJGNhbmNlbEJ0bik7XG4gIH1cblxuICAvKlxuICAgKiBTaG93IGNvbmZpcm0gYnV0dG9uP1xuICAgKi9cbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWhhcy1jb25maXJtLWJ1dHRvbicsIHBhcmFtcy5zaG93Q29uZmlybUJ1dHRvbik7XG4gIGlmIChwYXJhbXMuc2hvd0NvbmZpcm1CdXR0b24pIHtcbiAgICAkY29uZmlybUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gIH0gZWxzZSB7XG4gICAgaGlkZSgkY29uZmlybUJ0bik7XG4gIH1cblxuICAvKlxuICAgKiBDdXN0b20gdGV4dCBvbiBjYW5jZWwvY29uZmlybSBidXR0b25zXG4gICAqL1xuICBpZiAocGFyYW1zLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAkY2FuY2VsQnRuLmlubmVySFRNTCA9IGVzY2FwZUh0bWwocGFyYW1zLmNhbmNlbEJ1dHRvblRleHQpO1xuICB9XG4gIGlmIChwYXJhbXMuY29uZmlybUJ1dHRvblRleHQpIHtcbiAgICAkY29uZmlybUJ0bi5pbm5lckhUTUwgPSBlc2NhcGVIdG1sKHBhcmFtcy5jb25maXJtQnV0dG9uVGV4dCk7XG4gIH1cblxuICAvKlxuICAgKiBDdXN0b20gY29sb3Igb24gY29uZmlybSBidXR0b25cbiAgICovXG4gIGlmIChwYXJhbXMuY29uZmlybUJ1dHRvbkNvbG9yKSB7XG4gICAgLy8gU2V0IGNvbmZpcm0gYnV0dG9uIHRvIHNlbGVjdGVkIGJhY2tncm91bmQgY29sb3JcbiAgICAkY29uZmlybUJ0bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBwYXJhbXMuY29uZmlybUJ1dHRvbkNvbG9yO1xuXG4gICAgLy8gU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBjb2xvciB0byB0aGUgbG9hZGluZyByaW5nXG4gICAgJGNvbmZpcm1CdG4uc3R5bGUuYm9yZGVyTGVmdENvbG9yID0gcGFyYW1zLmNvbmZpcm1Mb2FkaW5nQnV0dG9uQ29sb3I7XG4gICAgJGNvbmZpcm1CdG4uc3R5bGUuYm9yZGVyUmlnaHRDb2xvciA9IHBhcmFtcy5jb25maXJtTG9hZGluZ0J1dHRvbkNvbG9yO1xuXG4gICAgLy8gU2V0IGJveC1zaGFkb3cgdG8gZGVmYXVsdCBmb2N1c2VkIGJ1dHRvblxuICAgIHNldEZvY3VzU3R5bGUoJGNvbmZpcm1CdG4sIHBhcmFtcy5jb25maXJtQnV0dG9uQ29sb3IpO1xuICB9XG5cbiAgLypcbiAgICogQWxsb3cgb3V0c2lkZSBjbGlja1xuICAgKi9cbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWFsbG93LW91dHNpZGUtY2xpY2snLCBwYXJhbXMuYWxsb3dPdXRzaWRlQ2xpY2spO1xuXG4gIC8qXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uXG4gICAqL1xuICB2YXIgaGFzRG9uZUZ1bmN0aW9uID0gcGFyYW1zLmRvbmVGdW5jdGlvbiA/IHRydWUgOiBmYWxzZTtcbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWhhcy1kb25lLWZ1bmN0aW9uJywgaGFzRG9uZUZ1bmN0aW9uKTtcblxuICAvKlxuICAgKiBBbmltYXRpb25cbiAgICovXG4gIGlmICghcGFyYW1zLmFuaW1hdGlvbikge1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnZGF0YS1hbmltYXRpb24nLCAnbm9uZScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbXMuYW5pbWF0aW9uID09PSAnc3RyaW5nJykge1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnZGF0YS1hbmltYXRpb24nLCBwYXJhbXMuYW5pbWF0aW9uKTsgLy8gQ3VzdG9tIGFuaW1hdGlvblxuICB9IGVsc2Uge1xuICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnZGF0YS1hbmltYXRpb24nLCAncG9wJyk7XG4gIH1cblxuICAvKlxuICAgKiBUaW1lclxuICAgKi9cbiAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLXRpbWVyJywgcGFyYW1zLnRpbWVyKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNldFBhcmFtZXRlcnM7XG4iLCIvKlxuICogQWxsb3cgdXNlciB0byBwYXNzIHRoZWlyIG93biBwYXJhbXNcbiAqL1xudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufTtcblxuLypcbiAqIENvbnZlcnQgSEVYIGNvZGVzIHRvIFJHQiB2YWx1ZXMgKCMwMDAwMDAgLT4gcmdiKDAsMCwwKSlcbiAqL1xudmFyIGhleFRvUmdiID0gZnVuY3Rpb24oaGV4KSB7XG4gIHZhciByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcbiAgcmV0dXJuIHJlc3VsdCA/IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpICsgJywgJyArIHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpICsgJywgJyArIHBhcnNlSW50KHJlc3VsdFszXSwgMTYpIDogbnVsbDtcbn07XG5cbi8qXG4gKiBDaGVjayBpZiB0aGUgdXNlciBpcyB1c2luZyBJbnRlcm5ldCBFeHBsb3JlciA4IChmb3IgZmFsbGJhY2tzKVxuICovXG52YXIgaXNJRTggPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKTtcbn07XG5cbi8qXG4gKiBJRSBjb21wYXRpYmxlIGxvZ2dpbmcgZm9yIGRldmVsb3BlcnNcbiAqL1xudmFyIGxvZ1N0ciA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBpZiAod2luZG93LmNvbnNvbGUpIHtcbiAgICAvLyBJRS4uLlxuICAgIHdpbmRvdy5jb25zb2xlLmxvZygnU3dlZXRBbGVydDogJyArIHN0cmluZyk7XG4gIH1cbn07XG5cbi8qXG4gKiBTZXQgaG92ZXIsIGFjdGl2ZSBhbmQgZm9jdXMtc3RhdGVzIGZvciBidXR0b25zIFxuICogKHNvdXJjZTogaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2phdmFzY3JpcHQtZ2VuZXJhdGUtbGlnaHRlci1kYXJrZXItY29sb3IpXG4gKi9cbnZhciBjb2xvckx1bWluYW5jZSA9IGZ1bmN0aW9uKGhleCwgbHVtKSB7XG4gIC8vIFZhbGlkYXRlIGhleCBzdHJpbmdcbiAgaGV4ID0gU3RyaW5nKGhleCkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XG4gIGlmIChoZXgubGVuZ3RoIDwgNikge1xuICAgIGhleCA9IGhleFswXSArIGhleFswXSArIGhleFsxXSArIGhleFsxXSArIGhleFsyXSArIGhleFsyXTtcbiAgfVxuICBsdW0gPSBsdW0gfHwgMDtcblxuICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgYW5kIGNoYW5nZSBsdW1pbm9zaXR5XG4gIHZhciByZ2IgPSAnIyc7XG4gIHZhciBjO1xuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgYyA9IHBhcnNlSW50KGhleC5zdWJzdHIoaSAqIDIsIDIpLCAxNik7XG4gICAgYyA9IE1hdGgucm91bmQoTWF0aC5taW4oTWF0aC5tYXgoMCwgYyArIGMgKiBsdW0pLCAyNTUpKS50b1N0cmluZygxNik7XG4gICAgcmdiICs9ICgnMDAnICsgYykuc3Vic3RyKGMubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiByZ2I7XG59O1xuXG5cbmV4cG9ydCB7XG4gIGV4dGVuZCxcbiAgaGV4VG9SZ2IsXG4gIGlzSUU4LFxuICBsb2dTdHIsXG4gIGNvbG9yTHVtaW5hbmNlXG59O1xuIl19
+
+  
+  /*
+   * Use SweetAlert with RequireJS
+   */
+  
+  if (typeof define === 'function' && define.amd) {
+    define(function () {
+      return sweetAlert;
+    });
+  } else if (typeof module !== 'undefined' && module.exports) {
+    module.exports = sweetAlert;
+  }
+
+})(window, document);
\ No newline at end of file
Index: trunk/templates/DefaultTheme/js/toggle_zip.js
===================================================================
--- trunk/templates/DefaultTheme/js/toggle_zip.js	(nonexistent)
+++ trunk/templates/DefaultTheme/js/toggle_zip.js	(revision 2)
@@ -0,0 +1,14 @@
+function toggle() {
+    var check = document.getElementById("file2");
+    if (check.style.visibility == "visible") {
+        for (i=2; i<=10; i++) {
+            document.getElementById("file" + i).style.visibility = "hidden";
+        }
+        document.getElementById("delzip").style.display = "inline";
+    } else {
+        for (i=2; i<=10; i++) {
+            document.getElementById("file" + i).style.visibility = "visible";
+        }
+        document.getElementById("delzip").style.display = "none";
+    }
+}
Index: trunk/templates/DefaultTheme/languages/DE.php
===================================================================
--- trunk/templates/DefaultTheme/languages/DE.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/DE.php	(revision 2)
@@ -0,0 +1,36 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+//Modul Description
+$template_description     = 'Das Standard-Backend-Theme von Websitebaker 2.8.3 SP7';
+
+//Texts
+$TEXT['ADMIN_ONLY'] = 'diese Optionen nur Administratoren zugänglich machen';
+$TEXT['NO_SHOW_THUMBS'] = 'Vorschaubilder verstecken';
+$TEXT['TEXT_HEADER'] = 'Maximale Bildergröße für Ordner festlegen</b><br><small><i>(Änderung nur beim Hochladen)</i></small>';
+$TEXT['FORGOTTEN_DETAILS'] = 'Passwort vergessen?';
+$TEXT['ENABLE'] = 'Einschalten';
+$TEXT['DISABLE'] = 'Ausschalten';
+$MESSAGE['GENERIC_WEBSITE_LOCKED'] = 'Diese Seite ist für Wartungsarbeiten vorübergehend geschlossen';

Property changes on: trunk/templates/DefaultTheme/languages/DE.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/languages/EN.php
===================================================================
--- trunk/templates/DefaultTheme/languages/EN.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/EN.php	(revision 2)
@@ -0,0 +1,35 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+//Modul Description
+$template_description     = 'Default backend theme for Website Baker 2.8.';
+
+//Texts
+$TEXT['ADMIN_ONLY'] = 'Settings for administrator only';
+$TEXT['NO_SHOW_THUMBS'] = 'Hide thumbnails';
+$TEXT['TEXT_HEADER'] = 'Set maximum imagesize for a folder</b><br><small><i>(resizing on new uploads only)</i></small>';
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgot Password?';
+$TEXT['ENABLE'] = 'Enable';
+$TEXT['DISABLE'] = 'Disable';

Property changes on: trunk/templates/DefaultTheme/languages/EN.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/languages/FR.php
===================================================================
--- trunk/templates/DefaultTheme/languages/FR.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/FR.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+//Modul Description
+$template_description     = 'Default backend theme for Website Baker 2.8.';
+
+//Texts
+$TEXT['ADMIN_ONLY'] = 'Seul l&apos;administrateur peut modifier ces r&eacute;glages';
+$TEXT['NO_SHOW_THUMBS'] = 'Cacher les vignettes';
+$TEXT['TEXT_HEADER'] = 'D&eacute;finir la taille des images par dossier</b><br><small><i>(Redimensionnement seulement lors d&apos;un nouvel upload)</i></small>';
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgot Password?';

Property changes on: trunk/templates/DefaultTheme/languages/FR.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/languages/NL.php
===================================================================
--- trunk/templates/DefaultTheme/languages/NL.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/NL.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+//Modul Description
+$template_description     = 'Geavanceerde admin-template voor Website Baker 2.8.';
+
+//Texts
+$TEXT['ADMIN_ONLY'] = 'Instellingen alleen beschikbaar voor administrator';
+$TEXT['NO_SHOW_THUMBS'] = 'Thumbnails niet weergeven';
+$TEXT['TEXT_HEADER'] = 'Stel de maximale grootte voor \'resized\' afbeeldingen in per folder</b><br><small><i>(NB: werkt alleen bij nieuwe uploads)</i></small>';
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgot Password?';

Property changes on: trunk/templates/DefaultTheme/languages/NL.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/languages/NO.php
===================================================================
--- trunk/templates/DefaultTheme/languages/NO.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/NO.php	(revision 2)
@@ -0,0 +1,33 @@
+<?php
+
+// $Id$
+
+/*
+
+ Website Baker Project <http://www.websitebaker.org/>
+ Copyright (C) 2004-2009, Ryan Djurovich
+
+ Website Baker is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Website Baker 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Website Baker; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+*/
+
+//Modul Description
+$template_description     = 'Standard design mal for Admin sidene i Website Baker 2.8.';
+
+//Texts
+$TEXT['ADMIN_ONLY'] = 'Settings for administrator only';
+$TEXT['NO_SHOW_THUMBS'] = 'Hide thumbnails';
+$TEXT['TEXT_HEADER'] = 'Set maximum imagesize for a folder</b><br><small><i>(resizing on new uploads only)</i></small>';
+$TEXT['FORGOTTEN_DETAILS'] = 'Forgot Password?';

Property changes on: trunk/templates/DefaultTheme/languages/NO.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/languages/index.php
===================================================================
--- trunk/templates/DefaultTheme/languages/index.php	(nonexistent)
+++ trunk/templates/DefaultTheme/languages/index.php	(revision 2)
@@ -0,0 +1,32 @@
+<?php
+/**
+ * $Id$
+ * Website Baker theme: wb_theme
+ * This theme is the default WB backend Theme
+ * Feel free to modify or build up on this template.
+ *
+ * This file prevents directory listing.
+ *
+ * LICENSE: GNU General Public License
+ * 
+ * @author     Johannes Tassilo Gruber
+ * @copyright  GNU General Public License
+ * @license    http://www.gnu.org/licenses/gpl.html
+ * @version    2.80
+ * @platform   Website Baker 2.8
+ *
+ * Website Baker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Website Baker 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 General Public License for more details.
+*/
+
+// prevent directory listing
+header('Location: ../../../index.php');
+
+?>
\ No newline at end of file

Property changes on: trunk/templates/DefaultTheme/languages/index.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/lib/affix-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/affix-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/affix-native.js	(revision 2)
@@ -0,0 +1,170 @@
+// Native Javascript for Bootstrap 3 | Affix
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Affix = factory();
+  }
+
+})(function(){
+
+  //AFFIX DEFINITION
+  var Affix = function(element,options) {
+    options = options || {};
+    
+    this.element = typeof element === 'object' ? element : document.querySelector(element);
+    this.options = {};
+    this.options.target = options.target ? ((typeof(options.target) === 'object') ? options.target : document.querySelector(options.target)) : null; // target is an object
+    this.options.offsetTop = options.offsetTop && options.offsetTop ? ( options.offsetTop === 'function' ? options.offsetTop() : parseInt(options.offsetTop,0) ) : 0; // offset option is an integer number or function to determine that number
+    this.options.offsetBottom = options.offsetBottom && options.offsetBottom ? ( options.offsetBottom === 'function' ? options.offsetBottom() : parseInt(options.offsetBottom,0) ) : null;
+
+    if (this.element && (this.options.target || this.options.offsetTop || this.options.offsetBottom ) ) { this.init(); }
+  }
+
+  //AFFIX METHODS
+  Affix.prototype = {
+    init: function () {
+      this.affixed = false;
+      this.affixedBottom = false;
+      this.getPinOffsetTop = 0;
+      this.getPinOffsetBottom = null;
+
+      //actions
+      this.checkPosition();
+      this.updateAffix();
+      this.scrollEvent();
+      this.resizeEvent()
+    },
+    processOffsetTop: function () {
+      if ( this.options.target !== null ) {
+        return this.targetRect().top + this.scrollOffset();
+      } else if ( this.options.offsetTop !== null ) {
+        return this.options.offsetTop
+      }
+    },
+    processOffsetBottom: function () {
+      if ( this.options.offsetBottom !== null ) {
+        var maxScroll = this.getMaxScroll();
+        return maxScroll - this.elementHeight() - this.options.offsetBottom
+      }
+    },
+    offsetTop: function () {
+      return this.processOffsetTop()
+    },
+    offsetBottom: function () {
+      return this.processOffsetBottom()
+    },
+    checkPosition: function () {
+      this.getPinOffsetTop = this.offsetTop
+      this.getPinOffsetBottom = this.offsetBottom
+    },
+    scrollOffset: function () {
+      return window.pageYOffset || document.documentElement.scrollTop
+    },
+    pinTop: function () {
+      if ( !/affix/.test(this.element.className) ) {
+        this.element.className += ' affix';
+        this.affixed = true
+      }
+    },
+    unPinTop: function () {
+      if ( /affix/.test(this.element.className) ) {
+        this.element.className = this.element.className.replace(' affix','');
+        this.affixed = false
+      }
+    },
+    pinBottom: function () {
+      if ( !/'affix-bottom'/.test(this.element.className) ) {
+        this.element.className += ' affix-bottom';
+        this.affixedBottom = true
+      }
+    },
+    unPinBottom: function () {
+      if ( /'affix-bottom'/.test(this.element.className) ) { 
+        this.element.className = this.element.className.replace(' affix-bottom','');
+        this.affixedBottom = false
+      }
+    },
+    updatePin: function () {
+      if (this.affixed === false && (parseInt(this.offsetTop(),0) - parseInt(this.scrollOffset(),0) < 0)) {
+        this.pinTop();
+      } else if (this.affixed === true && (parseInt(this.scrollOffset(),0) <= parseInt(this.getPinOffsetTop(),0) )) {
+        this.unPinTop()
+      }
+
+      if (this.affixedBottom === false && (parseInt(this.offsetBottom(),0) - parseInt(this.scrollOffset(),0) < 0)) {
+        this.pinBottom();
+      } else if (this.affixedBottom === true && (parseInt(this.scrollOffset(),0) <= parseInt(this.getPinOffsetBottom(),0) )) {
+        this.unPinBottom()
+      }
+    },
+
+    updateAffix : function () { // Unpin and check position again
+      this.unPinTop();
+      this.unPinBottom();
+      this.checkPosition()
+
+      this.updatePin() // If any case update values again
+    },
+
+    elementHeight : function(){
+      return this.element.offsetHeight
+    },
+
+    targetRect : function(){
+      return this.options.target.getBoundingClientRect()
+    },
+
+    getMaxScroll : function(){
+      return Math.max( document.body.scrollHeight, document.body.offsetHeight, 
+        document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight )
+    },
+
+    scrollEvent : function(){
+      var self = this;
+      window.addEventListener('scroll', function() {
+        self.updatePin()
+      }, false);
+
+    },
+    resizeEvent : function(){
+      var self = this, 
+        isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false, 
+        dl = (isIE && isIE < 10) ? 500 : 50;
+      window.addEventListener('resize', function () {
+        setTimeout(function(){
+          self.updateAffix()
+        },dl);
+      }, false);
+
+    }
+  };
+
+  // AFFIX DATA API
+  // =================
+  var Affixes = document.querySelectorAll('[data-spy="affix"]'), i = 0, afl = Affixes.length;
+  for (i;i<afl;i++) {
+    var item = Affixes[i], options = {};
+      options.offsetTop    = item.getAttribute('data-offset-top');
+      options.offsetBottom  = item.getAttribute('data-offset-bottom');
+      options.target      = item.getAttribute('data-target');
+
+    if ( item && (options.offsetTop !== null || options.offsetBottom !== null || options.target !== null) ) { //don't do anything unless we have something valid to pin
+      new Affix(item, options);
+    }
+  }
+
+  return Affix;
+});
Index: trunk/templates/DefaultTheme/lib/alert-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/alert-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/alert-native.js	(revision 2)
@@ -0,0 +1,69 @@
+// Native Javascript for Bootstrap 3 | Alert
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Alert = factory();
+  }
+
+})(function(root){
+
+  // ALERT DEFINITION
+  // ===================
+  var Alert = function( element ) {
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.alert = null;
+    this.duration = 150; // default alert transition duration
+    this.init();
+  }
+
+  // ALERT METHODS
+  // ================
+  Alert.prototype = {
+
+    init : function() {
+      this.actions();
+      document.addEventListener('click', this.close, false); //delegate to all alerts, including those inserted later into the DOM
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.close = function(e) {
+        var target = e.target;
+        self.btn = target.getAttribute('data-dismiss') === 'alert' && target.className === 'close' ? target : target.parentNode;
+        self.alert = self.btn.parentNode;
+
+        if ( self.alert !== null && self.btn.getAttribute('data-dismiss') === 'alert' && /in/.test(self.alert.className) ) {
+          self.alert.className = self.alert.className.replace(' in','');
+          setTimeout(function() {
+            self.alert && self.alert.parentNode.removeChild(self.alert);
+          }, self.duration);
+        }
+
+      }
+    }
+    }
+
+  // ALERT DATA API
+  // =================
+    var Alerts = document.querySelectorAll('[data-dismiss="alert"]'), i = 0, all = Alerts.length;
+  for (i;i<all;i++) {
+    new Alert(Alerts[i]);
+  }
+
+  return Alert;
+
+});
Index: trunk/templates/DefaultTheme/lib/button-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/button-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/button-native.js	(revision 2)
@@ -0,0 +1,155 @@
+// Native Javascript for Bootstrap 3 | Button
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Button = factory();
+  }
+
+})(function(){
+
+  // BUTTON DEFINITION
+  // ===================
+  var Button = function( element, option ) {
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.option = typeof option === 'string' ? option : null;
+
+    this.init();
+  };
+
+  // BUTTON METHODS
+  // ================
+  Button.prototype = {
+
+    init : function() {
+      var self = this;
+      this.actions();
+
+      if ( /btn/.test(this.btn.className) ) {
+        if ( this.option && this.option !== 'reset' ) {
+
+          this.state = this.btn.getAttribute('data-'+this.option+'-text') || null;
+
+          !this.btn.getAttribute('data-original-text') && this.btn.setAttribute('data-original-text',self.btn.innerHTML.replace(/^\s+|\s+$/g, ''));
+          this.setState();
+
+        } else if ( this.option === 'reset' ) {
+          this.reset();
+        }
+      }
+
+      if ( /btn-group/.test(this.btn.className) ) {
+        this.btn.addEventListener('click', this.toggle, false);
+      }
+    },
+
+    actions : function() {
+      var self = this,
+        changeEvent = (('CustomEvent' in window) && window.dispatchEvent) 
+          ? new CustomEvent('bs.button.change') : null; // The custom event that will be triggered on demand
+
+      // assign event to a trigger function
+      function triggerChange(t) { if (changeEvent) { t.dispatchEvent(changeEvent); } }
+
+      this.setState = function() {
+        if ( this.option === 'loading' ) {
+          this.addClass(this.btn,'disabled');          
+          this.btn.setAttribute('disabled','disabled');
+        }
+        this.btn.innerHTML = this.state;
+      },
+
+      this.reset = function() {
+        if ( /disabled/.test(self.btn.className) || self.btn.getAttribute('disabled') === 'disabled' ) {
+          this.removeClass(this.btn,'disabled');  
+          self.btn.removeAttribute('disabled');
+        }
+        self.btn.innerHTML = self.btn.getAttribute('data-original-text');
+      },
+
+      this.toggle = function(e) {
+        var parent = e.target.parentNode,
+          label = e.target.tagName === 'LABEL' ? e.target : parent.tagName === 'LABEL' ? parent : null; // the .btn label
+        
+        if ( !label ) return; //react if a label or its immediate child is clicked
+        
+        var target = this, //e.currentTarget || e.srcElement; // the button group, the target of the handler function
+          labels = target.querySelectorAll('.btn'), ll = labels.length, i = 0, // all the button group buttons
+          input = label.getElementsByTagName('INPUT')[0];
+          
+        if ( !input ) return; //return if no input found
+
+        //manage the dom manipulation
+        if ( input.type === 'checkbox' ) { //checkboxes          
+          if ( !input.checked ) {
+            self.addClass(label,'active');
+            input.getAttribute('checked');          
+            input.setAttribute('checked','checked');
+            input.checked = true;
+          } else {
+            self.removeClass(label,'active');
+            input.getAttribute('checked');            
+            input.removeAttribute('checked');
+            input.checked = false;
+          }
+          triggerChange(input); //trigger the change for the input
+          triggerChange(self.btn); //trigger the change for the btn-group
+        }
+
+        if ( input.type === 'radio' ) { // radio buttons
+          if ( !input.checked ) { // don't trigger if already active
+            self.addClass(label,'active');
+            input.setAttribute('checked','checked');
+            input.checked = true;
+            triggerChange(self.btn);     
+            triggerChange(input); //trigger the change
+            
+            for (i;i<ll;i++) {
+              var l = labels[i];
+              if ( l !== label && /active/.test(l.className) )  {
+                var inp = l.getElementsByTagName('INPUT')[0];
+                self.removeClass(l,'active');
+                inp.removeAttribute('checked');
+                inp.checked = false;
+                triggerChange(inp); // trigger the change                
+              }        
+            }
+          }                
+        }
+      },
+      this.addClass = function(el,c) { // where modern browsers fail, use classList  
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; el.offsetWidth; }
+      },
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); el.offsetWidth; }
+      }
+    }
+  }
+
+  // BUTTON DATA API
+  // =================
+  var Buttons = document.querySelectorAll('[data-toggle=button]'), i = 0, btl = Buttons.length;
+  for (i;i<btl;i++) {
+    new Button(Buttons[i]);
+  }
+  
+  var ButtonGroups = document.querySelectorAll('[data-toggle=buttons]'), j = 0, bgl = ButtonGroups.length;
+  for (j;j<bgl;j++) {
+    new Button(ButtonGroups[j]);
+  }
+
+  return Button;
+
+});
Index: trunk/templates/DefaultTheme/lib/carousel-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/carousel-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/carousel-native.js	(revision 2)
@@ -0,0 +1,289 @@
+// Native Javascript for Bootstrap 3 | Carousel
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Carousel = factory();
+  }
+
+})(function(){
+
+  // CAROUSEL DEFINITION
+  // ===================
+  var Carousel = function( element, options ) {
+    options = options || {};
+
+    this.carousel = (typeof element === 'object') ? element : document.querySelector( element );
+    this.options = {}; //replace extend
+    this.options.keyboard = options.keyboard === 'true' ? true : false;
+    this.options.pause = options.pause ? options.pause : 'hover'; // false / hover
+
+    // bootstrap carousel default transition duration / option
+    this.duration = 600;
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false; 
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+
+    var items = this.carousel.querySelectorAll('.item'), il=items.length; //this is an object
+    this.controls = this.carousel.querySelectorAll('.carousel-control');
+    this.prev = this.controls[0];
+    this.next = this.controls[1];
+    this.slides = []; for (var i = 0; i < il; i++) { this.slides.push(items[i]); } // this is an array
+    this.indicator = this.carousel.querySelector( ".carousel-indicators" ); // object
+    this.indicators = this.carousel.querySelectorAll( ".carousel-indicators li" ); // object
+    this.total    = this.slides.length;
+    this.timer    = null;
+    this.direction  = null;
+    this.index    = 0;
+
+    if (options.interval === 'false' ) {
+      this.options.interval = false;
+    } else {
+      this.options.interval = parseInt(options.interval) || 5000;
+    }
+
+    this.init();
+  };
+
+  // CAROUSEL METHODS
+  // ================
+  Carousel.prototype = {
+    init: function() {
+      if ( this.options.interval !== false ){
+        this.cycle();
+      }
+
+      if ( this.options && this.options.pause === 'hover' && this.options.interval !== false ) {
+        this.pause();
+      }
+      this.actions();
+      this._addEventListeners();
+    },
+    cycle: function(e) {
+      var self = this;
+
+      self.direction = 'left';
+      self.timer = setInterval(function() {
+        self.index++;
+        if( self.index == self.slides.length ) {
+          self.index = 0;
+        }
+        self._slideTo( self.index, e );
+
+      }, self.options.interval);
+    },
+    pause: function() {
+      var self = this;
+      var pauseHandler = function () {
+        if ( self.options.interval !==false && !/paused/.test(self.carousel.className) ) {
+          self.carousel.className += ' paused';
+          clearInterval( self.timer );
+          self.timer = null;
+        }
+      };
+      var resumeHandler = function() {
+        if ( self.options.interval !==false && /paused/.test(self.carousel.className) ) {
+          self.cycle();
+          self.carousel.className = self.carousel.className.replace(' paused','');
+        }
+      };
+      self.carousel.addEventListener( "mouseenter", pauseHandler, false);
+      self.carousel.addEventListener( "mouseleave", resumeHandler, false);
+      self.carousel.addEventListener( "touchstart", pauseHandler, false);
+      self.carousel.addEventListener( "touchend", resumeHandler, false);
+    },
+    _slideTo: function( next, e ) {
+      var self = this;
+      var active = self._getActiveIndex(); // the current active
+      //determine type
+      var direction = self.direction;
+      var dr = direction === 'left' ? 'next' : 'prev';
+      var slid = null, slide=null;
+      
+      //register events
+      if (('CustomEvent' in window) && window.dispatchEvent) {
+        slid =  new CustomEvent("slid.bs.carousel");
+        slide = new CustomEvent("slide.bs.carousel");
+      }
+      if (slid) { self.carousel.dispatchEvent(slid); } //here we go with the slid
+
+      self._removeEventListeners();
+      clearInterval(self.timer);
+      self.timer = null;
+      self._curentPage( self.indicators[next] );
+
+      if ( /slide/.test(this.carousel.className) && !(this.isIE && this.isIE < 10) ) {
+        self.slides[next].className += (' '+dr);
+        self.slides[next].offsetWidth;
+        self.slides[next].className += (' '+direction);
+        self.slides[active].className += (' '+direction);
+
+        setTimeout(function() { //we're gonna fake waiting for the animation to finish, cleaner and better
+          self._addEventListeners();
+
+          self.slides[next].className += ' active';
+          self.slides[active].className = self.slides[active].className.replace(' active','');
+
+          self.slides[next].className = self.slides[next].className.replace(' '+dr,'');
+          self.slides[next].className = self.slides[next].className.replace(' '+direction,'');
+          self.slides[active].className = self.slides[active].className.replace(' '+direction,'');
+
+          if ( self.options.interval !== false && !/paused/.test(self.carousel.className) ){
+            clearInterval(self.timer); self.cycle();
+          }
+          if (slide) { self.carousel.dispatchEvent(slide); } //here we go with the slide
+        }, self.options.duration + 100 );
+      } else {
+        self.slides[next].className += ' active';
+        self.slides[next].offsetWidth;
+        self.slides[active].className = self.slides[active].className.replace(' active','');
+        setTimeout(function() {
+          self._addEventListeners();
+          if ( self.options.interval !== false && !/paused/.test(self.carousel.className) ){
+            clearInterval(self.timer); self.cycle();
+          }
+          if (slide) { self.carousel.dispatchEvent(slide); } //here we go with the slide
+        }, self.options.duration + 100 );
+      }
+    },
+    _addEventListeners : function () {
+      var self = this;
+
+      self.next && self.next.addEventListener( "click", self.controlsHandler, false);
+      self.prev && self.prev.addEventListener( "click", self.controlsHandler, false);
+
+      self.indicator && self.indicator.addEventListener( "click", self.indicatorHandler, false);
+
+      if (self.options.keyboard === true) {
+        window.addEventListener('keydown', self.keyHandler, false);
+      }
+    },
+    _removeEventListeners : function () { // prevent mouse bubbles while animating
+      var self = this;
+
+      self.next && self.next.removeEventListener( "click", self.controlsHandler, false);
+      self.prev && self.prev.removeEventListener( "click", self.controlsHandler, false);
+
+      self.indicator && self.indicator.removeEventListener( "click", self.indicatorHandler, false);
+
+      if (self.options.keyboard === true) {
+        window.removeEventListener('keydown', self.keyHandler, false);
+      }
+    },
+    _getActiveIndex : function () {
+      return this.slides.indexOf(this.carousel.querySelector('.item.active'))
+    },
+    _curentPage: function( p ) {
+      for( var i = 0; i < this.indicators.length; ++i ) {
+        var a = this.indicators[i];
+        a.className = "";
+      }
+      if (p) p.className = "active";
+    },
+    actions: function() {
+      var self = this;
+      self.indicatorHandler = function(e) {
+        e.preventDefault();
+        var target = e.target;
+        var active = self._getActiveIndex(); // the current active
+
+        if ( target && !/active/.test(target.className) && target.getAttribute('data-slide-to') ) {
+          var n = parseInt( target.getAttribute('data-slide-to'), 10 );
+
+          self.index = n;
+
+          if( self.index == 0 ) {
+            self.index = 0;
+          } else if ( self.index == self.total - 1 ) {
+            self.index = self.total - 1;
+          }
+
+           //determine direction first
+          if  ( (active < self.index ) || (active === self.total - 1 && self.index === 0 ) ) {
+            self.direction = 'left'; // next
+          } else if  ( (active > self.index) || (active === 0 && self.index === self.total -1 ) ) {
+            self.direction = 'right'; // prev
+          }
+        } else { return false; }
+
+        self._slideTo( self.index, e ); //Do the slide
+
+      },
+
+      self.controlsHandler = function (e) {
+        var target = e.currentTarget || e.srcElement;
+        e.preventDefault();
+
+        if ( target === self.next ) {
+          self.index++;
+          self.direction = 'left'; //set direction first
+
+          if( self.index == self.total - 1 ) {
+            self.index = self.total - 1;
+          } else if ( self.index == self.total ){
+            self.index = 0
+          }
+        } else if ( target === self.prev ) {
+          self.index--;
+          self.direction = 'right'; //set direction first
+
+          if( self.index == 0 ) {
+            self.index = 0;
+          } else if ( self.index < 0 ){
+            self.index = self.total - 1
+          }
+        }
+
+        self._slideTo( self.index, e ); //Do the slide
+      }
+
+      self.keyHandler = function (e) {
+
+        switch (e.which) {
+          case 39:
+            e.preventDefault();
+            self.index++;
+            self.direction = 'left';
+            if( self.index == self.total - 1 ) { self.index = self.total - 1; } else
+            if ( self.index == self.total ){ self.index = 0 }
+            break;
+          case 37:
+            e.preventDefault();
+            self.index--;
+            self.direction = 'right';
+            if( self.index == 0 ) { self.index = 0; } else
+            if ( self.index < 0 ){ self.index = self.total - 1 }
+            break;
+          default: return;
+        }
+        self._slideTo( self.index, e ); //Do the slide
+      }
+    }
+  }
+
+  // CAROUSEL DATA API
+  // =================
+  var Carousels = document.querySelectorAll('[data-ride="carousel"]'), i = 0, crl = Carousels.length;
+  for (i;i<crl;i++) {
+    var c = Carousels[i], options = {};
+    options.interval = c.getAttribute('data-interval') && c.getAttribute('data-interval');
+    options.pause = c.getAttribute('data-pause') && c.getAttribute('data-pause') || 'hover';
+    options.keyboard = c.getAttribute('data-keyboard') && c.getAttribute('data-keyboard') || false;
+    options.duration = c.getAttribute('data-duration') && c.getAttribute('data-duration') || false;
+    new Carousel(c, options)
+  }
+
+  return Carousel;
+
+});
Index: trunk/templates/DefaultTheme/lib/clearTranslateCache.php
===================================================================
--- trunk/templates/DefaultTheme/lib/clearTranslateCache.php	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/clearTranslateCache.php	(revision 2)
@@ -0,0 +1,55 @@
+<?php
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category        core
+ * @package         test
+ * @subpackage      test
+ * @author          Dietmar Wöllbrink
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.4 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+// Create new admin object and print admin header
+if (!defined('WB_PATH')){require( (dirname(dirname(dirname(__DIR__)))).'/config.php' );}
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+//$admin = new admin('##skip##', false, false);
+$admin = new admin('Pages', 'pages_settings',false);
+// initialize json_respond array  (will be sent back)
+$aJsonRespond = array();
+$aJsonRespond['message'] = 'Ajax operation failed';
+$aJsonRespond['success'] = FALSE;
+//if (!$admin->is_authenticated()){exit(json_encode($aJsonRespond));}
+if (!$admin->is_authenticated() || !$admin->ami_group_member('1')){exit(json_encode($aJsonRespond));}
+
+if (is_writable(WB_PATH.'/temp/cache')) {
+    Translate::getInstance()->clearCache();
+}
+/*
+unset($aJsonRespond['message']);
+*/
+$aJsonRespond['message'] = 'Translate Cache was cleared';
+// If the script is still running, set success to true
+$aJsonRespond['success'] = true;
+// and echo the json_respond to the ajax function
+exit(json_encode($aJsonRespond));

Property changes on: trunk/templates/DefaultTheme/lib/clearTranslateCache.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/lib/collapse-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/collapse-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/collapse-native.js	(revision 2)
@@ -0,0 +1,187 @@
+// Native Javascript for Bootstrap 3 | Collapse
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Collapse = factory();
+  }
+
+})(function(){
+
+  // COLLAPSE DEFINITION
+  // ===================
+  var Collapse = function( element, options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.accordion = null;
+    this.collapse = null;
+    this.duration = 300; // default collapse transition duration
+    this.options = {};
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+    this.init();
+  };
+
+  // COLLAPSE METHODS
+  // ================
+  Collapse.prototype = {
+
+    init : function() {
+      this.actions();
+      this.addEvent();
+    },
+
+    actions : function() {
+      var self = this;
+      var getOuterHeight = function (el) {
+        var s = el && el.currentStyle || window.getComputedStyle(el), // the getComputedStyle polyfill would do this for us, but we want to make sure it does
+          btp = s.borderTopWidth || 0,
+          mtp = /px/.test(s.marginTop)  ? Math.round(s.marginTop.replace('px',''))    : 0,
+          mbp = /px/.test(s.marginBottom)  ? Math.round(s.marginBottom.replace('px',''))  : 0,
+          mte = /em/.test(s.marginTop)  ? Math.round(s.marginTop.replace('em','')    * parseInt(s.fontSize)) : 0,
+          mbe = /em/.test(s.marginBottom)  ? Math.round(s.marginBottom.replace('em','')  * parseInt(s.fontSize)) : 0;
+
+        return el.clientHeight + parseInt( btp ) + parseInt( mtp ) + parseInt( mbp ) + parseInt( mte ) + parseInt( mbe ); //we need an accurate margin value
+      };
+
+      this.toggle = function(e) {
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+
+        if (!/\bin/.test(self.collapse.className)) {
+          self.open(e);
+        } else {
+          self.close(e);
+        }
+      },
+      this.close = function(e) {
+        e.preventDefault();
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+        self._close(self.collapse);
+        self.removeClass(self.btn,'collapsed');
+      },
+      this.open = function(e) {
+        e.preventDefault();
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+        self.accordion = self.btn.getAttribute('data-parent') && self.getClosest(self.btn, self.btn.getAttribute('data-parent'));
+
+        self._open(self.collapse);
+        self.addClass(self.btn,'collapsed');
+
+        if ( self.accordion !== null ) {
+          var active = self.accordion.querySelectorAll('.collapse.in'), al = active.length, i = 0;
+          for (i;i<al;i++) {
+            if ( active[i] !== self.collapse) self._close(active[i]);
+          }
+        }
+      },
+      this._open = function(c) {
+        self.removeEvent();
+        self.addClass(c,'in');
+        c.setAttribute('aria-expanded','true');
+        self.addClass(c,'collapsing');
+        setTimeout(function() {
+          var h = self.getMaxHeight(c);
+          c.style.height = h + 'px';                    
+          c.style.overflowY = 'hidden';
+        }, 0);  
+        setTimeout(function() {
+          c.style.height = ''; 
+          c.style.overflowY = '';
+          self.removeClass(c,'collapsing');
+          self.addEvent();
+        }, self.options.duration);
+      },
+      this._close = function(c) {
+        self.removeEvent();
+        c.setAttribute('aria-expanded','false');        
+        c.style.height = self.getMaxHeight(c) + 'px';        
+        setTimeout(function() {
+          c.style.height = '0px';    
+          c.style.overflowY = 'hidden';
+          self.addClass(c,'collapsing');
+        }, 0);
+        
+        setTimeout(function() {
+          self.removeClass(c,'collapsing');
+          self.removeClass(c,'in'); 
+          c.style.overflowY = '';
+          c.style.height = '';          
+          self.addEvent();
+        }, self.options.duration);
+      },
+      this.getMaxHeight = function(l) { // get collapse trueHeight and border
+        var h = 0;
+        for (var k = 0, ll = l.children.length; k < ll; k++) {
+          h += getOuterHeight(l.children[k]);
+        }
+        return h;
+      },
+      this.removeEvent = function() {
+        this.btn.removeEventListener('click', this.toggle, false);
+      },
+      this.addEvent = function() {
+        this.btn.addEventListener('click', this.toggle, false);
+      },
+      this.getTarget = function(e) {
+        var t = e.currentTarget || e.srcElement,
+          h = t.href && t.getAttribute('href').replace('#',''),
+          d = t.getAttribute('data-target') && ( t.getAttribute('data-target') ),
+          id = h || ( d && /#/.test(d)) && d.replace('#',''),
+          cl = (d && d.charAt(0) === '.') && d, //the navbar collapse trigger targets a class
+          c = id && document.getElementById(id) || cl && document.querySelector(cl);
+
+        return {
+          btn : t,
+          collapse : c
+        };
+      },
+
+      this.getClosest = function (el, s) { //el is the element and s the selector of the closest item to find
+      // source http://gomakethings.com/climbing-up-and-down-the-dom-tree-with-vanilla-javascript/
+        var f = s.charAt(0);
+        for ( ; el && el !== document; el = el.parentNode ) {// Get closest match
+          if ( f === '.' ) {// If selector is a class
+            if ( document.querySelector(s) !== undefined ) { return el; }
+          }
+          if ( f === '#' ) { // If selector is an ID
+            if ( el.id === s.substr(1) ) { return el; }
+          }
+        }
+        return false;
+      };
+      this.addClass = function(el,c) {  
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      };
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+      };
+    }
+  };
+
+  // COLLAPSE DATA API
+  // =================
+  var Collapses = document.querySelectorAll('[data-toggle="collapse"]'), i = 0, cll = Collapses.length;
+  for (i;i<cll;i++) {
+    var item = Collapses[i], options = {};
+    options.duration = item.getAttribute('data-duration');
+    new Collapse(item,options);
+  }
+
+  return Collapse;
+
+});
Index: trunk/templates/DefaultTheme/lib/dropdown-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/dropdown-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/dropdown-native.js	(revision 2)
@@ -0,0 +1,86 @@
+// Native Javascript for Bootstrap 3 | Dropdown
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Dropdown = factory();
+  }
+
+})(function(root){
+
+  // DROPDOWN DEFINITION
+  // ===================
+  var Dropdown = function( element) {
+    this.menu = typeof element === 'object' ? element : document.querySelector(element);
+    this.init();
+  }
+
+  // DROPDOWN METHODS
+  // ================
+  Dropdown.prototype = {
+
+    init : function() {
+      this.actions();
+      this.menu.setAttribute('tabindex', '0'); // Fix onblur on Chrome | Safari
+      document.addEventListener('click', this.handle, false);
+    },
+
+    actions : function() {
+      var self = this;
+      
+      this.handle = function(e) { // fix some Safari bug with <button>
+        var target = e.target || e.currentTarget, 
+            children = [], c = self.menu.parentNode.getElementsByTagName('*');
+        for ( var i=0, l = c.length||0; i<l; i++) { l && children.push(c[i]); }
+
+        if ( target === self.menu || target.parentNode === self.menu ) { 
+          self.toggle(e); 
+        }  else if ( children && children.indexOf(target) > -1  ) {
+          return;
+        } else { self.close(); }
+        /\#$/g.test(target.href) && e.preventDefault();
+      }
+      
+      this.toggle = function(e) {
+        if (/open/.test(this.menu.parentNode.className)) {
+          this.close();
+          document.removeEventListener('keydown', this.key, false);
+        } else {
+          this.menu.parentNode.className += ' open';
+          this.menu.setAttribute('aria-expanded',true);
+          document.addEventListener('keydown', this.key, false);
+        }
+      }
+      
+      this.key = function(e) {
+        if (e.which == 27) {self.close();}
+      }
+      
+      this.close = function() {
+        self.menu.parentNode.className = self.menu.parentNode.className.replace(' open','');
+        self.menu.setAttribute('aria-expanded',false);
+      }
+    }
+  }
+
+  // DROPDOWN DATA API
+  // =================
+  var Dropdowns = document.querySelectorAll('[data-toggle=dropdown]'), i = 0, ddl = Dropdowns.length;
+  for (i;i<ddl;i++) {
+    new Dropdown(Dropdowns[i]);
+  }
+
+  return Dropdown;
+});
Index: trunk/templates/DefaultTheme/lib/min/affix-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/affix-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/affix-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Affix=a()}})(function(){var a=function(g,h){h=h||{};this.element=typeof g==="object"?g:document.querySelector(g);this.options={};this.options.target=h.target?((typeof(h.target)==="object")?h.target:document.querySelector(h.target)):null;this.options.offsetTop=h.offsetTop&&h.offsetTop?(h.offsetTop==="function"?h.offsetTop():parseInt(h.offsetTop,0)):0;this.options.offsetBottom=h.offsetBottom&&h.offsetBottom?(h.offsetBottom==="function"?h.offsetBottom():parseInt(h.offsetBottom,0)):null;if(this.element&&(this.options.target||this.options.offsetTop||this.options.offsetBottom)){this.init()}};a.prototype={init:function(){this.affixed=false;this.affixedBottom=false;this.getPinOffsetTop=0;this.getPinOffsetBottom=null;this.checkPosition();this.updateAffix();this.scrollEvent();this.resizeEvent()},processOffsetTop:function(){if(this.options.target!==null){return this.targetRect().top+this.scrollOffset()}else{if(this.options.offsetTop!==null){return this.options.offsetTop}}},processOffsetBottom:function(){if(this.options.offsetBottom!==null){var g=this.getMaxScroll();return g-this.elementHeight()-this.options.offsetBottom}},offsetTop:function(){return this.processOffsetTop()},offsetBottom:function(){return this.processOffsetBottom()},checkPosition:function(){this.getPinOffsetTop=this.offsetTop;this.getPinOffsetBottom=this.offsetBottom},scrollOffset:function(){return window.pageYOffset||document.documentElement.scrollTop},pinTop:function(){if(!/affix/.test(this.element.className)){this.element.className+=" affix";this.affixed=true}},unPinTop:function(){if(/affix/.test(this.element.className)){this.element.className=this.element.className.replace(" affix","");this.affixed=false}},pinBottom:function(){if(!/'affix-bottom'/.test(this.element.className)){this.element.className+=" affix-bottom";this.affixedBottom=true}},unPinBottom:function(){if(/'affix-bottom'/.test(this.element.className)){this.element.className=this.element.className.replace(" affix-bottom","");this.affixedBottom=false}},updatePin:function(){if(this.affixed===false&&(parseInt(this.offsetTop(),0)-parseInt(this.scrollOffset(),0)<0)){this.pinTop()}else{if(this.affixed===true&&(parseInt(this.scrollOffset(),0)<=parseInt(this.getPinOffsetTop(),0))){this.unPinTop()}}if(this.affixedBottom===false&&(parseInt(this.offsetBottom(),0)-parseInt(this.scrollOffset(),0)<0)){this.pinBottom()}else{if(this.affixedBottom===true&&(parseInt(this.scrollOffset(),0)<=parseInt(this.getPinOffsetBottom(),0))){this.unPinBottom()}}},updateAffix:function(){this.unPinTop();this.unPinBottom();this.checkPosition();this.updatePin()},elementHeight:function(){return this.element.offsetHeight},targetRect:function(){return this.options.target.getBoundingClientRect()},getMaxScroll:function(){return Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)},scrollEvent:function(){var g=this;window.addEventListener("scroll",function(){g.updatePin()},false)},resizeEvent:function(){var i=this,h=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false,g=(h&&h<10)?500:50;window.addEventListener("resize",function(){setTimeout(function(){i.updateAffix()},g)},false)}};var b=document.querySelectorAll('[data-spy="affix"]'),d=0,c=b.length;for(d;d<c;d++){var e=b[d],f={};f.offsetTop=e.getAttribute("data-offset-top");f.offsetBottom=e.getAttribute("data-offset-bottom");f.target=e.getAttribute("data-target");if(e&&(f.offsetTop!==null||f.offsetBottom!==null||f.target!==null)){new a(e,f)}}return a});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/alert-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/alert-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/alert-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Alert=a()}})(function(e){var a=function(f){this.btn=typeof f==="object"?f:document.querySelector(f);this.alert=null;this.duration=150;this.init()};a.prototype={init:function(){this.actions();document.addEventListener("click",this.close,false)},actions:function(){var f=this;this.close=function(g){var h=g.target;f.btn=h.getAttribute("data-dismiss")==="alert"&&h.className==="close"?h:h.parentNode;f.alert=f.btn.parentNode;if(f.alert!==null&&f.btn.getAttribute("data-dismiss")==="alert"&&/in/.test(f.alert.className)){f.alert.className=f.alert.className.replace(" in","");setTimeout(function(){f.alert&&f.alert.parentNode.removeChild(f.alert)},f.duration)}}}};var b=document.querySelectorAll('[data-dismiss="alert"]'),d=0,c=b.length;for(d;d<c;d++){new a(b[d])}return a});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/button-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/button-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/button-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Button=a()}})(function(){var c=function(h,i){this.btn=typeof h==="object"?h:document.querySelector(h);this.option=typeof i==="string"?i:null;this.init()};c.prototype={init:function(){var h=this;this.actions();if(/btn/.test(this.btn.className)){if(this.option&&this.option!=="reset"){this.state=this.btn.getAttribute("data-"+this.option+"-text")||null;!this.btn.getAttribute("data-original-text")&&this.btn.setAttribute("data-original-text",h.btn.innerHTML.replace(/^\s+|\s+$/g,""));this.setState()}else{if(this.option==="reset"){this.reset()}}}if(/btn-group/.test(this.btn.className)){this.btn.addEventListener("click",this.toggle,false)}},actions:function(){var i=this,h=(("CustomEvent" in window)&&window.dispatchEvent)?new CustomEvent("bs.button.change"):null;function j(k){if(h){k.dispatchEvent(h)}}this.setState=function(){if(this.option==="loading"){this.addClass(this.btn,"disabled");this.btn.setAttribute("disabled","disabled")}this.btn.innerHTML=this.state},this.reset=function(){if(/disabled/.test(i.btn.className)||i.btn.getAttribute("disabled")==="disabled"){this.removeClass(this.btn,"disabled");i.btn.removeAttribute("disabled")}i.btn.innerHTML=i.btn.getAttribute("data-original-text")},this.toggle=function(k){var t=k.target.parentNode,q=k.target.tagName==="LABEL"?k.target:t.tagName==="LABEL"?t:null;if(!q){return}var u=this,r=u.querySelectorAll(".btn"),s=r.length,m=0,o=q.getElementsByTagName("INPUT")[0];if(!o){return}if(o.type==="checkbox"){if(!o.checked){i.addClass(q,"active");o.getAttribute("checked");o.setAttribute("checked","checked");o.checked=true}else{i.removeClass(q,"active");o.getAttribute("checked");o.removeAttribute("checked");o.checked=false}j(o);j(i.btn)}if(o.type==="radio"){if(!o.checked){i.addClass(q,"active");o.setAttribute("checked","checked");o.checked=true;j(i.btn);j(o);for(m;m<s;m++){var p=r[m];if(p!==q&&/active/.test(p.className)){var n=p.getElementsByTagName("INPUT")[0];i.removeClass(p,"active");n.removeAttribute("checked");n.checked=false;j(n)}}}}},this.addClass=function(l,k){if(l.classList){l.classList.add(k)}else{l.className+=" "+k;l.offsetWidth}},this.removeClass=function(l,k){if(l.classList){l.classList.remove(k)}else{l.className=l.className.replace(k,"").replace(/^\s+|\s+$/g,"");l.offsetWidth}}}};var e=document.querySelectorAll("[data-toggle=button]"),f=0,b=e.length;for(f;f<b;f++){new c(e[f])}var d=document.querySelectorAll("[data-toggle=buttons]"),g=0,a=d.length;for(g;g<a;g++){new c(d[g])}return c});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/carousel-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/carousel-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/carousel-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Carousel=a()}})(function(){var b=function(c,l){l=l||{};this.carousel=(typeof c==="object")?c:document.querySelector(c);this.options={};this.options.keyboard=l.keyboard==="true"?true:false;this.options.pause=l.pause?l.pause:"hover";this.duration=600;this.isIE=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false;this.options.duration=(this.isIE&&this.isIE<10)?0:(l.duration||this.duration);var k=this.carousel.querySelectorAll(".item"),j=k.length;this.controls=this.carousel.querySelectorAll(".carousel-control");this.prev=this.controls[0];this.next=this.controls[1];this.slides=[];for(var h=0;h<j;h++){this.slides.push(k[h])}this.indicator=this.carousel.querySelector(".carousel-indicators");this.indicators=this.carousel.querySelectorAll(".carousel-indicators li");this.total=this.slides.length;this.timer=null;this.direction=null;this.index=0;if(l.interval==="false"){this.options.interval=false}else{this.options.interval=parseInt(l.interval)||5000}this.init()};b.prototype={init:function(){if(this.options.interval!==false){this.cycle()}if(this.options&&this.options.pause==="hover"&&this.options.interval!==false){this.pause()}this.actions();this._addEventListeners()},cycle:function(c){var h=this;h.direction="left";h.timer=setInterval(function(){h.index++;if(h.index==h.slides.length){h.index=0}h._slideTo(h.index,c)},h.options.interval)},pause:function(){var i=this;var c=function(){if(i.options.interval!==false&&!/paused/.test(i.carousel.className)){i.carousel.className+=" paused";clearInterval(i.timer);i.timer=null}};var h=function(){if(i.options.interval!==false&&/paused/.test(i.carousel.className)){i.cycle();i.carousel.className=i.carousel.className.replace(" paused","")}};i.carousel.addEventListener("mouseenter",c,false);i.carousel.addEventListener("mouseleave",h,false);i.carousel.addEventListener("touchstart",c,false);i.carousel.addEventListener("touchend",h,false)},_slideTo:function(k,j){var l=this;var c=l._getActiveIndex();var h=l.direction;var i=h==="left"?"next":"prev";var m=null,n=null;if(("CustomEvent" in window)&&window.dispatchEvent){m=new CustomEvent("slid.bs.carousel");n=new CustomEvent("slide.bs.carousel")}if(m){l.carousel.dispatchEvent(m)}l._removeEventListeners();clearInterval(l.timer);l.timer=null;l._curentPage(l.indicators[k]);if(/slide/.test(this.carousel.className)&&!(this.isIE&&this.isIE<10)){l.slides[k].className+=(" "+i);l.slides[k].offsetWidth;l.slides[k].className+=(" "+h);l.slides[c].className+=(" "+h);setTimeout(function(){l._addEventListeners();l.slides[k].className+=" active";l.slides[c].className=l.slides[c].className.replace(" active","");l.slides[k].className=l.slides[k].className.replace(" "+i,"");l.slides[k].className=l.slides[k].className.replace(" "+h,"");l.slides[c].className=l.slides[c].className.replace(" "+h,"");if(l.options.interval!==false&&!/paused/.test(l.carousel.className)){clearInterval(l.timer);l.cycle()}if(n){l.carousel.dispatchEvent(n)}},l.options.duration+100)}else{l.slides[k].className+=" active";l.slides[k].offsetWidth;l.slides[c].className=l.slides[c].className.replace(" active","");setTimeout(function(){l._addEventListeners();if(l.options.interval!==false&&!/paused/.test(l.carousel.className)){clearInterval(l.timer);l.cycle()}if(n){l.carousel.dispatchEvent(n)}},l.options.duration+100)}},_addEventListeners:function(){var c=this;c.next&&c.next.addEventListener("click",c.controlsHandler,false);c.prev&&c.prev.addEventListener("click",c.controlsHandler,false);c.indicator&&c.indicator.addEventListener("click",c.indicatorHandler,false);if(c.options.keyboard===true){window.addEventListener("keydown",c.keyHandler,false)}},_removeEventListeners:function(){var c=this;c.next&&c.next.removeEventListener("click",c.controlsHandler,false);c.prev&&c.prev.removeEventListener("click",c.controlsHandler,false);c.indicator&&c.indicator.removeEventListener("click",c.indicatorHandler,false);if(c.options.keyboard===true){window.removeEventListener("keydown",c.keyHandler,false)}},_getActiveIndex:function(){return this.slides.indexOf(this.carousel.querySelector(".item.active"))},_curentPage:function(j){for(var h=0;h<this.indicators.length;++h){var c=this.indicators[h];c.className=""}if(j){j.className="active"}},actions:function(){var c=this;c.indicatorHandler=function(i){i.preventDefault();var k=i.target;var h=c._getActiveIndex();if(k&&!/active/.test(k.className)&&k.getAttribute("data-slide-to")){var j=parseInt(k.getAttribute("data-slide-to"),10);c.index=j;if(c.index==0){c.index=0}else{if(c.index==c.total-1){c.index=c.total-1}}if((h<c.index)||(h===c.total-1&&c.index===0)){c.direction="left"}else{if((h>c.index)||(h===0&&c.index===c.total-1)){c.direction="right"}}}else{return false}c._slideTo(c.index,i)},c.controlsHandler=function(h){var i=h.currentTarget||h.srcElement;h.preventDefault();if(i===c.next){c.index++;c.direction="left";if(c.index==c.total-1){c.index=c.total-1}else{if(c.index==c.total){c.index=0}}}else{if(i===c.prev){c.index--;c.direction="right";if(c.index==0){c.index=0}else{if(c.index<0){c.index=c.total-1}}}}c._slideTo(c.index,h)};c.keyHandler=function(h){switch(h.which){case 39:h.preventDefault();c.index++;c.direction="left";if(c.index==c.total-1){c.index=c.total-1}else{if(c.index==c.total){c.index=0}}break;case 37:h.preventDefault();c.index--;c.direction="right";if(c.index==0){c.index=0}else{if(c.index<0){c.index=c.total-1}}break;default:return}c._slideTo(c.index,h)}}};var d=document.querySelectorAll('[data-ride="carousel"]'),f=0,e=d.length;for(f;f<e;f++){var a=d[f],g={};g.interval=a.getAttribute("data-interval")&&a.getAttribute("data-interval");g.pause=a.getAttribute("data-pause")&&a.getAttribute("data-pause")||"hover";g.keyboard=a.getAttribute("data-keyboard")&&a.getAttribute("data-keyboard")||false;g.duration=a.getAttribute("data-duration")&&a.getAttribute("data-duration")||false;new b(a,g)}return b});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/collapse-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/collapse-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/collapse-native.min.js	(revision 2)
@@ -0,0 +1 @@
+!function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Collapse=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.btn="object"==typeof t?t:document.querySelector(t),this.accordion=null,this.collapse=null,this.duration=300,this.options={},this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration,this.init()};t.prototype={init:function(){this.actions(),this.addEvent()},actions:function(){var t=this,e=function(t){var e=t&&t.currentStyle||window.getComputedStyle(t),n=e.borderTopWidth||0,o=/px/.test(e.marginTop)?Math.round(e.marginTop.replace("px","")):0,s=/px/.test(e.marginBottom)?Math.round(e.marginBottom.replace("px","")):0,a=/em/.test(e.marginTop)?Math.round(e.marginTop.replace("em","")*parseInt(e.fontSize)):0,i=/em/.test(e.marginBottom)?Math.round(e.marginBottom.replace("em","")*parseInt(e.fontSize)):0;return t.clientHeight+parseInt(n)+parseInt(o)+parseInt(s)+parseInt(a)+parseInt(i)};this.toggle=function(e){t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,/in/.test(t.collapse.className)?t.close(e):t.open(e)},this.close=function(e){e.preventDefault(),t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,t._close(t.collapse),t.removeClass(t.btn,"collapsed")},this.open=function(e){if(e.preventDefault(),t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,t.accordion=t.btn.getAttribute("data-parent")&&t.getClosest(t.btn,t.btn.getAttribute("data-parent")),t._open(t.collapse),t.addClass(t.btn,"collapsed"),null!==t.accordion){var n=t.accordion.querySelectorAll(".collapse.in"),o=n.length,s=0;for(s;o>s;s++)n[s]!==t.collapse&&t._close(n[s])}},this._open=function(e){t.removeEvent(),t.addClass(e,"in"),e.setAttribute("aria-expanded","true"),t.addClass(e,"collapsing"),setTimeout(function(){var n=t.getMaxHeight(e);e.style.height=n+"px",e.style.overflowY="hidden"},0),setTimeout(function(){e.style.height="",e.style.overflowY="",t.removeClass(e,"collapsing"),t.addEvent()},t.options.duration)},this._close=function(e){t.removeEvent(),e.setAttribute("aria-expanded","false"),e.style.height=t.getMaxHeight(e)+"px",setTimeout(function(){e.style.height="0px",e.style.overflowY="hidden",t.addClass(e,"collapsing")},0),setTimeout(function(){t.removeClass(e,"collapsing"),t.removeClass(e,"in"),e.style.overflowY="",e.style.height="",t.addEvent()},t.options.duration)},this.getMaxHeight=function(t){for(var n=0,o=0,s=t.children.length;s>o;o++)n+=e(t.children[o]);return n},this.removeEvent=function(){this.btn.removeEventListener("click",this.toggle,!1)},this.addEvent=function(){this.btn.addEventListener("click",this.toggle,!1)},this.getTarget=function(t){var e=t.currentTarget||t.srcElement,n=e.href&&e.getAttribute("href").replace("#",""),o=e.getAttribute("data-target")&&e.getAttribute("data-target"),s=n||o&&/#/.test(o)&&o.replace("#",""),a=o&&"."===o.charAt(0)&&o,i=s&&document.getElementById(s)||a&&document.querySelector(a);return{btn:e,collapse:i}},this.getClosest=function(t,e){for(var n=e.charAt(0);t&&t!==document;t=t.parentNode){if("."===n&&void 0!==document.querySelector(e))return t;if("#"===n&&t.id===e.substr(1))return t}return!1},this.addClass=function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},this.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}}};var e=document.querySelectorAll('[data-toggle="collapse"]'),n=0,o=e.length;for(n;o>n;n++){var s=e[n],a={};a.duration=s.getAttribute("data-duration"),new t(s,a)}return t});
Index: trunk/templates/DefaultTheme/lib/min/dropdown-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/dropdown-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/dropdown-native.min.js	(revision 2)
@@ -0,0 +1 @@
+!function(e){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=e():module.exports=e:window.Dropdown=e()}(function(e){var t=function(e){this.menu="object"==typeof e?e:document.querySelector(e),this.init()};t.prototype={init:function(){this.actions(),this.menu.setAttribute("tabindex","0"),document.addEventListener("click",this.handle,!1)},actions:function(){var e=this;this.handle=function(t){for(var n=t.target||t.currentTarget,o=[],i=e.menu.parentNode.getElementsByTagName("*"),s=0,r=i.length||0;r>s;s++)r&&o.push(i[s]);if(n===e.menu||n.parentNode===e.menu)e.toggle(t);else{if(o&&o.indexOf(n)>-1)return;e.close()}/\#$/g.test(n.href)&&t.preventDefault()},this.toggle=function(e){/open/.test(this.menu.parentNode.className)?(this.close(),document.removeEventListener("keydown",this.key,!1)):(this.menu.parentNode.className+=" open",this.menu.setAttribute("aria-expanded",!0),document.addEventListener("keydown",this.key,!1))},this.key=function(t){27==t.which&&e.close()},this.close=function(){e.menu.parentNode.className=e.menu.parentNode.className.replace(" open",""),e.menu.setAttribute("aria-expanded",!1)}}};var n=document.querySelectorAll("[data-toggle=dropdown]"),o=0,i=n.length;for(o;i>o;o++)new t(n[o]);return t});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/modal-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/modal-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/modal-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿!function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Modal=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.modal="object"==typeof t?t:document.querySelector(t),this.options={},this.options.backdrop="false"===e.backdrop?!1:!0,this.options.keyboard="false"===e.keyboard?!1:!0,this.options.content=e.content,this.duration=e.duration||300,this.options.duration=this.isIE&&this.isIE<10?0:this.duration,this.scrollbarWidth=0,this.dialog=this.modal.querySelector(".modal-dialog"),this.timer=0,this.init()},e=function(){var t=document.documentElement.getBoundingClientRect(),e=window.innerWidth||t.right-Math.abs(t.left);return e};t.prototype={init:function(){this.actions(),this.trigger(),this.options.content&&void 0!==this.options.content&&this.content(this.options.content)},actions:function(){var t=this;this.open=function(){this._open()},this.close=function(){this._close()},this._open=function(){var e=document.querySelector(".modal.in");e&&(clearTimeout(e.getAttribute("data-timer")),this.removeClass(e,"in"),setTimeout(function(){e.setAttribute("aria-hidden",!0),e.style.display=""},t.options.duration/2)),this.options.backdrop?this.createOverlay():this.overlay=null,this.overlay&&setTimeout(function(){t.addClass(t.overlay,"in")},0),clearTimeout(t.modal.getAttribute("data-timer")),this.timer=setTimeout(function(){t.modal.style.display="block",t.checkScrollbar(),t.adjustDialog(),t.setScrollbar(),t.resize(),t.dismiss(),t.keydown(),t.addClass(document.body,"modal-open"),t.addClass(t.modal,"in"),t.modal.setAttribute("aria-hidden",!1)},t.options.duration/2),this.modal.setAttribute("data-timer",t.timer)},this._close=function(){this.overlay&&this.removeClass(this.overlay,"in"),this.removeClass(this.modal,"in"),this.modal.setAttribute("aria-hidden",!0),clearTimeout(t.modal.getAttribute("data-timer")),this.timer=setTimeout(function(){t.removeClass(document.body,"modal-open"),t.resize(),t.resetAdjustments(),t.resetScrollbar(),t.dismiss(),t.keydown(),t.modal.style.display=""},t.options.duration/2),this.modal.setAttribute("data-timer",t.timer),setTimeout(function(){document.querySelector(".modal.in")||t.removeOverlay()},t.options.duration)},this.content=function(t){return this.modal.querySelector(".modal-content").innerHTML=t},this.createOverlay=function(){var t=document.createElement("div"),e=document.querySelector(".modal-backdrop");t.setAttribute("class","modal-backdrop fade"),e?this.overlay=e:(this.overlay=t,document.body.appendChild(t))},this.removeOverlay=function(){var t=document.querySelector(".modal-backdrop");null!==t&&void 0!==t&&document.body.removeChild(t)},this.keydown=function(){function e(e){t.options.keyboard&&27==e.which&&t.close()}/in/.test(this.modal.className)?document.removeEventListener("keydown",e,!1):document.addEventListener("keydown",e,!1)},this.trigger=function(){var e=document.querySelectorAll('[data-toggle="modal"]'),i=e.length,o=0;for(o;i>o;o++)e[o].addEventListener("click",function(e){var i=e.target,o=i.getAttribute("data-target")&&i.getAttribute("data-target").replace("#","")||i.getAttribute("href")&&i.getAttribute("href").replace("#","");document.getElementById(o)===t.modal&&t.open()})},this._resize=function(){var t=this.overlay||document.querySelector(".modal-backdrop"),e={w:document.documentElement.clientWidth+"px",h:document.documentElement.clientHeight+"px"};null!==t&&/in/.test(t.className)&&(t.style.height=e.h,t.style.width=e.w)},this.oneResize=function(){function e(){t._resize(),t.handleUpdate(),window.removeEventListener("resize",e,!1)}window.addEventListener("resize",e,!1)},this.resize=function(){/in/.test(this.modal.className)?window.removeEventListener("resize",this.oneResize,!1):window.addEventListener("resize",this.oneResize,!1)},this.dismiss=function(){function e(e){("modal"===e.target.parentNode.getAttribute("data-dismiss")||"modal"===e.target.getAttribute("data-dismiss")||e.target===t.modal)&&(e.preventDefault(),t.close())}/in/.test(this.modal.className)?this.modal.removeEventListener("click",e,!1):this.modal.addEventListener("click",e,!1)},this.handleUpdate=function(){this.adjustDialog()},this.adjustDialog=function(){this.modal.style.paddingLeft=!this.bodyIsOverflowing&&this.modalIsOverflowing?this.scrollbarWidth+"px":"",this.modal.style.paddingRight=this.bodyIsOverflowing&&!this.modalIsOverflowing?this.scrollbarWidth+"px":""},this.resetAdjustments=function(){this.modal.style.paddingLeft="",this.modal.style.paddingRight=""},this.checkScrollbar=function(){this.bodyIsOverflowing=document.body.clientWidth<e(),this.modalIsOverflowing=this.modal.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},this.setScrollbar=function(){var t=window.getComputedStyle(document.body),e=parseInt(t.paddingRight,10);this.bodyIsOverflowing&&(document.body.style.paddingRight=e+this.scrollbarWidth+"px")},this.resetScrollbar=function(){document.body.style.paddingRight=""},this.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),e},this.addClass=function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},this.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}}};var i=document.querySelectorAll(".modal"),o=i.length,s=0;for(s;o>s;s++){var n=i[s],a={};a.keyboard=n.getAttribute("data-keyboard"),a.backdrop=n.getAttribute("data-backdrop"),a.duration=n.getAttribute("data-duration"),new t(n,a)}return t});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/popover-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/popover-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/popover-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Popover=a()}})(function(){var d=function(g,h){h=h||{};this.isIE=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false;this.link=typeof g==="object"?g:document.querySelector(g);this.title=this.link.getAttribute("data-title")||null;this.content=this.link.getAttribute("data-content")||null;this.popover=null;this.options={};this.options.template=h.template?h.template:null;this.options.trigger=h.trigger?h.trigger:"hover";this.options.animation=h.animation&&h.animation!=="true"?h.animation:"true";this.options.placement=h.placement?h.placement:"top";this.options.delay=parseInt(h.delay)||100;this.options.dismiss=h.dismiss&&h.dismiss==="true"?true:false;this.duration=150;this.options.duration=(this.isIE&&this.isIE<10)?0:(h.duration||this.duration);this.options.container=document.body;if(this.content||this.options.template){this.init()}this.timer=0;this.rect=null};d.prototype={init:function(){this.actions();var g=("onmouseleave" in this.link)?["mouseenter","mouseleave"]:["mouseover","mouseout"];if(this.options.trigger==="hover"){this.link.addEventListener(g[0],this.open,false);if(!this.options.dismiss){this.link.addEventListener(g[1],this.close,false)}}else{if(this.options.trigger==="click"){this.link.addEventListener("click",this.toggle,false);if(!this.options.dismiss){this.link.addEventListener("blur",this.close,false)}}else{if(this.options.trigger==="focus"){this.link.addEventListener("focus",this.toggle,false);if(!this.options.dismiss){this.link.addEventListener("blur",this.close,false)}}}}if(this.options.dismiss){document.addEventListener("click",this.dismiss,false)}if(!(this.isIE&&this.isIE<9)){window.addEventListener("resize",this.close,false)}},actions:function(){var g=this;this.toggle=function(h){if(g.popover===null){g.open()}else{g.close()}},this.open=function(h){clearTimeout(g.link.getAttribute("data-timer"));g.timer=setTimeout(function(){if(g.popover===null){g.createPopover();g.stylePopover();g.updatePopover()}},g.options.duration);g.link.setAttribute("data-timer",g.timer)},this.dismiss=function(h){if(g.popover&&h.target===g.popover.querySelector(".close")){g.close()}},this.close=function(h){clearTimeout(g.link.getAttribute("data-timer"));g.timer=setTimeout(function(){if(g.popover&&g.popover!==null&&/in/.test(g.popover.className)){g.popover.className=g.popover.className.replace(" in","");setTimeout(function(){g.removePopover()},g.options.duration)}},g.options.delay+g.options.duration);g.link.setAttribute("data-timer",g.timer)},this.removePopover=function(){this.popover&&this.options.container.removeChild(this.popover);this.popover=null;this.timer=null},this.createPopover=function(){this.popover=document.createElement("div");if(this.content!==null&&this.options.template===null){this.popover.setAttribute("role","tooltip");var h=document.createElement("div");h.setAttribute("class","arrow");if(this.title!==null){var j=document.createElement("h3");j.setAttribute("class","popover-title");if(this.options.dismiss){j.innerHTML=this.title+'<button type="button" class="close">×</button>'}else{j.innerHTML=this.title}this.popover.appendChild(j)}var i=document.createElement("div");i.setAttribute("class","popover-content");this.popover.appendChild(h);this.popover.appendChild(i);if(this.options.dismiss&&this.title===null){i.innerHTML=this.content+'<button type="button" class="close">×</button>'}else{i.innerHTML=this.content}}else{var k=document.createElement("div");k.innerHTML=this.options.template;this.popover.innerHTML=k.firstChild.innerHTML}this.options.container.appendChild(this.popover);this.popover.style.display="block"},this.stylePopover=function(l){this.rect=this.getRect();var k=l||this.options.placement;var h=this.options.animation==="true"?"fade":"";this.popover.setAttribute("class","popover "+k+" "+h);var i={w:this.link.offsetWidth,h:this.link.offsetHeight};var j=this.popoverDimensions(this.popover);var o={w:j.w,h:j.h};var n=this.getScroll().y;var m=this.getScroll().x;if(/top/.test(k)){this.popover.style.top=this.rect.top+n-o.h+"px";this.popover.style.left=this.rect.left+m-o.w/2+i.w/2+"px"}else{if(/bottom/.test(k)){this.popover.style.top=this.rect.top+n+i.h+"px";this.popover.style.left=this.rect.left+m-o.w/2+i.w/2+"px"}else{if(/left/.test(k)){this.popover.style.top=this.rect.top+n-o.h/2+i.h/2+"px";this.popover.style.left=this.rect.left+m-o.w+"px"}else{if(/right/.test(k)){this.popover.style.top=this.rect.top+n-o.h/2+i.h/2+"px";this.popover.style.left=this.rect.left+m+i.w+"px"}}}}},this.updatePopover=function(){var h=null;if(!g.isElementInViewport(g.popover)){h=g.updatePlacement()}else{h=g.options.placement}g.stylePopover(h);g.popover.className+=" in"},this.updatePlacement=function(){var h=this.options.placement;if(/top/.test(h)){return"bottom"}else{if(/bottom/.test(h)){return"top"}else{if(/left/.test(h)){return"right"}else{if(/right/.test(h)){return"left"}}}}},this.getRect=function(){return this.link.getBoundingClientRect()},this.getScroll=function(){return{y:window.pageYOffset||document.documentElement.scrollTop,x:window.pageXOffset||document.documentElement.scrollLeft}},this.popoverDimensions=function(h){return{w:h.offsetWidth,h:h.offsetHeight}},this.isElementInViewport=function(i){var h=i.getBoundingClientRect();return(h.top>=0&&h.left>=0&&h.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&h.right<=(window.innerWidth||document.documentElement.clientWidth))}}};var e=document.querySelectorAll("[data-toggle=popover]"),a=0,f=e.length;for(a;a<f;a++){var b=e[a],c={};c.trigger=b.getAttribute("data-trigger");c.animation=b.getAttribute("data-animation");c.duration=b.getAttribute("data-duration");c.placement=b.getAttribute("data-placement");c.dismiss=b.getAttribute("data-dismiss");c.delay=b.getAttribute("data-delay");new d(b,c)}return d});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/scrollspy-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/scrollspy-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/scrollspy-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.ScrollSpy=a()}})(function(){var h=function(i,j,n){n=n||{};this.element=typeof i==="object"?i:document.querySelector(i);this.options={};this.isIE=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false;this.options.target=n.target?(typeof n.target==="object"?n.target:document.querySelector(n.target)):null;this.items=this.options.target&&this.options.target.getElementsByTagName("A");this.item=j;this.parent=this.item.parentNode;this.parentParent=this.parent.parentNode.parentNode;this.tg=this.item.href&&document.getElementById(this.item.getAttribute("href").replace("#",""));this.active=false;this.topEdge=0;this.bottomEdge=0;if(this.element.offsetHeight<this.element.scrollHeight){this.scrollTarget=this.element}else{this.scrollTarget=window}if(this.options.target){this.init()}};h.prototype={init:function(){if(this.item.getAttribute("href")&&this.item.getAttribute("href").indexOf("#")>-1){this.checkEdges();this.refresh();this.scrollEvent();if(!(this.isIE&&this.isIE<9)){this.resizeEvent()}}},topLimit:function(){if(this.scrollTarget===window){return this.tg.getBoundingClientRect().top+this.scrollOffset()-5}else{return this.tg.offsetTop}},bottomLimit:function(){return this.topLimit()+this.tg.clientHeight},checkEdges:function(){this.topEdge=this.topLimit();this.bottomEdge=this.bottomLimit()},scrollOffset:function(){if(this.scrollTarget===window){return window.pageYOffset||document.documentElement.scrollTop}else{return this.element.scrollTop}},activate:function(){if(this.parent&&this.parent.tagName==="LI"&&!/active/.test(this.parent.className)){this.addClass(this.parent,"active");if(this.parentParent&&this.parentParent.tagName==="LI"&&/dropdown/.test(this.parentParent.className)&&!/active/.test(this.parentParent.className)){this.addClass(this.parentParent,"active")}this.active=true}},deactivate:function(){if(this.parent&&this.parent.tagName==="LI"&&/active/.test(this.parent.className)){this.removeClass(this.parent,"active");if(this.parentParent&&this.parentParent.tagName==="LI"&&/dropdown/.test(this.parentParent.className)&&/active/.test(this.parentParent.className)){this.removeClass(this.parentParent,"active")}this.active=false}},toggle:function(){if(this.active===false&&(this.bottomEdge>this.scrollOffset()&&this.scrollOffset()>=this.topEdge)){this.activate()}else{if(this.active===true&&(this.bottomEdge<=this.scrollOffset()&&this.scrollOffset()<this.topEdge)){this.deactivate()}}},refresh:function(){this.deactivate();this.checkEdges();this.toggle()},scrollEvent:function(){var j=this;this.scrollTarget.addEventListener("scroll",i,false);function i(){j.refresh()}},resizeEvent:function(){var j=this;window.addEventListener("resize",i,false);function i(){j.refresh()}},scrollHeight:function(){if(this.scrollTarget===window){return Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)}else{return this.element.scrollHeight}},addClass:function(j,i){if(j.classList){j.classList.add(i)}else{j.className+=" "+i}},removeClass:function(j,i){if(j.classList){j.classList.remove(i)}else{j.className=j.className.replace(i,"").replace(/^\s+|\s+$/g,"")}}};var k=document.querySelectorAll('[data-spy="scroll"]'),a=0,m=k.length;for(a;a<m;a++){var l=k[a],g={};g.target=l.getAttribute("data-target")||null;if(g.target!==null){var f=g.target==="object"?g.target:document.querySelector(g.target),d=f.querySelectorAll("a"),e=0,b=d.length;for(e;e<b;e++){var c=d[e];if(c.href&&c.getAttribute("href")!=="#"){new h(l,c,g)}}}}return h});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/tab-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/tab-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/tab-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Tab=a()}})(function(){var d=function(g,h){h=h||{};this.isIE=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false;this.tab=typeof g==="object"?g:document.querySelector(g);this.tabs=this.tab.parentNode.parentNode;this.dropdown=this.tabs.querySelector(".dropdown");if(/dropdown-menu/.test(this.tabs.className)){this.dropdown=this.tabs.parentNode;this.tabs=this.tabs.parentNode.parentNode}this.options=h;this.duration=150;this.options.duration=(this.isIE&&this.isIE<10)?0:(h.duration||this.duration);this.init()};d.prototype={init:function(){this.actions();this.tab.addEventListener("click",this.action,false)},actions:function(){var g=this;this.action=function(j){j=j||window.e;j.preventDefault();var l=j.target;var m=document.getElementById(l.getAttribute("href").replace("#",""));var k=new RegExp("(?:^|\\s)dropdown-menu(?!\\S)");var i=g.getActiveTab();var h=g.getActiveContent();if(!/active/.test(l.parentNode.className)){g.removeClass(i,"active");g.addClass(l.parentNode,"active");if(g.dropdown){if(!(k.test(g.tab.parentNode.parentNode.className))){if(/active/.test(g.dropdown.className)){g.removeClass(g.dropdown,"active")}}else{if(!/active/.test(g.dropdown.className)){g.addClass(g.dropdown,"active")}}}g.removeClass(h,"in");setTimeout(function(){g.removeClass(h,"active");g.addClass(m,"active")},g.options.duration);setTimeout(function(){g.addClass(m,"in")},g.options.duration*2)}},this.addClass=function(i,h){if(i.classList){i.classList.add(h)}else{i.className+=" "+h}},this.removeClass=function(i,h){if(i.classList){i.classList.remove(h)}else{i.className=i.className.replace(h,"").replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},this.getActiveTab=function(){var h=this.tabs.querySelectorAll(".active");if(h.length===1&&!/dropdown/.test(h[0].className)){return h[0]}else{if(h.length>1){return h[h.length-1]}}},this.getActiveContent=function(){var h=this.getActiveTab().getElementsByTagName("A")[0].getAttribute("href").replace("#","");return h&&document.getElementById(h)}}};var e=document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"),f=e.length,a=0;for(a;a<f;a++){var c=e[a],b={};b.duration=c.getAttribute("data-duration")&&c.getAttribute("data-duration")||false;new d(c,b)}return d});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/min/tooltip-native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/min/tooltip-native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/min/tooltip-native.min.js	(revision 2)
@@ -0,0 +1 @@
+﻿(function(a){if(typeof module!=="undefined"&&typeof exports=="object"){if(typeof window!="undefined"){module.exports=a()}else{module.exports=a}}else{window.Tooltip=a()}})(function(d){var e=function(h,i){i=i||{};this.link=typeof h==="object"?h:document.querySelector(h);this.title=this.link.getAttribute("title")||this.link.getAttribute("data-original-title");this.tooltip=null;this.options={};this.options.animation=i.animation&&i.animation!=="fade"?i.animation:"fade";this.options.placement=i.placement?i.placement:"top";this.options.delay=parseInt(i.delay)||100;this.isIE=(new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)!=null)?parseFloat(RegExp.$1):false;this.duration=150;this.options.duration=this.isIE&&this.isIE<10?0:(i.duration||this.duration);this.options.container=i.container||document.body;if(this.title){this.init()}this.timer=0};e.prototype={init:function(){this.actions();this.rect=null;var h=("onmouseleave" in this.link)?["mouseenter","mouseleave"]:["mouseover","mouseout"];this.link.addEventListener(h[0],this.open,false);this.link.addEventListener(h[1],this.close,false);this.link.setAttribute("data-original-title",this.title);this.link.removeAttribute("title")},actions:function(){var h=this;this.open=function(i){clearTimeout(h.link.getAttribute("data-timer"));h.timer=setTimeout(function(){if(h.tooltip===null){h.createToolTip();h.styleTooltip();h.updateTooltip()}},h.options.duration);h.link.setAttribute("data-timer",h.timer)},this.close=function(i){clearTimeout(h.link.getAttribute("data-timer"));h.timer=setTimeout(function(){if(h.tooltip&&h.tooltip!==null){h.tooltip.className=h.tooltip.className.replace(" in","");setTimeout(function(){h.removeToolTip()},h.options.duration)}},h.options.delay+h.options.duration);h.link.setAttribute("data-timer",h.timer)},this.removeToolTip=function(){this.tooltip&&this.options.container.removeChild(this.tooltip);this.tooltip=null},this.createToolTip=function(){this.tooltip=document.createElement("div");this.tooltip.setAttribute("role","tooltip");var i=document.createElement("div");i.setAttribute("class","tooltip-arrow");var j=document.createElement("div");j.setAttribute("class","tooltip-inner");this.tooltip.appendChild(i);this.tooltip.appendChild(j);j.innerHTML=this.title;this.options.container.appendChild(this.tooltip)},this.styleTooltip=function(k){this.rect=this.getRect();var j=k||this.options.placement;this.tooltip.setAttribute("class","tooltip "+j+" "+this.options.animation);var i={w:this.link.offsetWidth,h:this.link.offsetHeight};var n=this.tooltipDimensions(this.tooltip);var o={w:n.w,h:n.h};var m=this.getScroll().y;var l=this.getScroll().x;if(/top/.test(j)){this.tooltip.style.top=this.rect.top+m-o.h+"px";this.tooltip.style.left=this.rect.left+l-o.w/2+i.w/2+"px"}else{if(/bottom/.test(j)){this.tooltip.style.top=this.rect.top+m+i.h+"px";this.tooltip.style.left=this.rect.left+l-o.w/2+i.w/2+"px"}else{if(/left/.test(j)){this.tooltip.style.top=this.rect.top+m-o.h/2+i.h/2+"px";this.tooltip.style.left=this.rect.left+l-o.w+"px"}else{if(/right/.test(j)){this.tooltip.style.top=this.rect.top+m-o.h/2+i.h/2+"px";this.tooltip.style.left=this.rect.left+l+i.w+"px"}}}}},this.updateTooltip=function(){var i=null;if(!this.isElementInViewport(this.tooltip)){i=this.updatePlacement()}else{i=this.options.placement}this.styleTooltip(i);this.tooltip.className+=" in"},this.updatePlacement=function(){var i=this.options.placement;if(/top/.test(i)){return"bottom"}else{if(/bottom/.test(i)){return"top"}else{if(/left/.test(i)){return"right"}else{if(/right/.test(i)){return"left"}}}}},this.getRect=function(){return this.link.getBoundingClientRect()},this.getScroll=function(){return{y:window.pageYOffset||document.documentElement.scrollTop,x:window.pageXOffset||document.documentElement.scrollLeft}},this.tooltipDimensions=function(i){return{w:i.offsetWidth,h:i.offsetHeight}},this.isElementInViewport=function(j){var i=j.getBoundingClientRect();return(i.top>=0&&i.left>=0&&i.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&i.right<=(window.innerWidth||document.documentElement.clientWidth))}}};var f=document.querySelectorAll("[data-toggle=tooltip]"),a=0,g=f.length;for(a;a<g;a++){var b=f[a],c={};c.animation=b.getAttribute("data-animation");c.placement=b.getAttribute("data-placement");c.duration=b.getAttribute("data-duration");c.delay=b.getAttribute("data-delay");new e(b,c)}return e});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/minifill.js
===================================================================
--- trunk/templates/DefaultTheme/lib/minifill.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/minifill.js	(revision 2)
@@ -0,0 +1,348 @@
+// Document
+// HTMLDocument is an extension of Document.  If the browser has HTMLDocument but not Document, the former will suffice as an alias for the latter.
+if (!this.Document){this.Document = this.HTMLDocument; }
+
+// Element
+if (!window.HTMLElement) { window.HTMLElement = window.Element; }
+
+// Window
+(function(global) {
+    if (global.constructor) {
+        global.Window = global.constructor;
+    } else {
+        (global.Window = global.constructor = new Function('return function Window() {}')()).prototype = this;
+    }
+}(this));
+
+// Date.now
+if(!Date.now){ Date.now = function now() { return new Date().getTime(); }; }
+
+// performance.now
+(function(){
+    if ("performance" in window == false) {    window.performance = {}; }
+
+    if ("now" in window.performance == false){
+        var nowOffset = Date.now();
+
+        window.performance.now = function now(){
+            return Date.now() - nowOffset;
+        }
+    }
+})();
+
+
+// Array.prototype.indexOf
+if (!Array.prototype.indexOf) {
+    Array.prototype.indexOf = function indexOf(searchElement) {
+        if (this === undefined || this === null) {
+            throw new TypeError(this + 'is not an object');
+        }
+
+        var    arraylike = this instanceof String ? this.split('') : this,
+            length = Math.max(Math.min(arraylike.length, 9007199254740991), 0) || 0,
+            index = Number(arguments[1]) || 0;
+
+        index = (index < 0 ? Math.max(length + index, 0) : index) - 1;
+
+        while (++index < length) {
+            if (index in arraylike && arraylike[index] === searchElement) {
+                return index;
+            }
+        }
+
+        return -1;
+    };
+}
+
+// getComputedStyle
+if (!('getComputedStyle' in window)) {
+    (function(){
+        function getComputedStylePixel(element, property, fontSize) {
+
+            // Internet Explorer sometimes struggles to read currentStyle until the element's document is accessed.
+            var value = element.document && element.currentStyle[property].match(/([\d\.]+)(%|cm|em|in|mm|pc|pt|)/) || [0, 0, ''],
+                size = value[1],
+                suffix = value[2],
+                rootSize;
+
+            fontSize = !fontSize ? fontSize : /%|em/.test(suffix) && element.parentElement ? getComputedStylePixel(element.parentElement, 'fontSize', null) : 16;
+            rootSize = property == 'fontSize' ? fontSize : /width/i.test(property) ? element.clientWidth : element.clientHeight;
+
+            return suffix == '%' ? size / 100 * rootSize :
+                suffix == 'cm' ? size * 0.3937 * 96 :
+                suffix == 'em' ? size * fontSize :
+                suffix == 'in' ? size * 96 :
+                suffix == 'mm' ? size * 0.3937 * 96 / 10 :
+                suffix == 'pc' ? size * 12 * 96 / 72 :
+                suffix == 'pt' ? size * 96 / 72 :
+                size;
+        }
+
+        function setShortStyleProperty(style, property) {
+            var    borderSuffix = property == 'border' ? 'Width' : '',
+                t = property + 'Top' + borderSuffix,
+                r = property + 'Right' + borderSuffix,
+                b = property + 'Bottom' + borderSuffix,
+                l = property + 'Left' + borderSuffix;
+
+            style[property] = (style[t] == style[r] && style[t] == style[b] && style[t] == style[l] ? [ style[t] ] :
+                            style[t] == style[b] && style[l] == style[r] ? [ style[t], style[r] ] :
+                            style[l] == style[r] ? [ style[t], style[r], style[b] ] :
+                            [ style[t], style[r], style[b], style[l] ]).join(' ');
+        }
+
+        // <CSSStyleDeclaration>
+        function CSSStyleDeclaration(element) {
+            var style = this,
+            currentStyle = element.currentStyle,
+            fontSize = getComputedStylePixel(element, 'fontSize'),
+            unCamelCase = function (match) {
+                return '-' + match.toLowerCase();
+            },
+            property;
+
+            for (property in currentStyle) {
+                Array.prototype.push.call(style, property == 'styleFloat' ? 'float' : property.replace(/[A-Z]/, unCamelCase));
+
+                if (property == 'width') {
+                    style[property] = element.offsetWidth + 'px';
+                } else if (property == 'height') {
+                    style[property] = element.offsetHeight + 'px';
+                } else if (property == 'styleFloat') {
+                    style.float = currentStyle[property];
+                } else if (/margin.|padding.|border.+W/.test(property) && style[property] != 'auto') {
+                    style[property] = Math.round(getComputedStylePixel(element, property, fontSize)) + 'px';
+                } else if (/^outline/.test(property)) {
+                    // errors on checking outline
+                    try {
+                        style[property] = currentStyle[property];
+                    } catch (error) {
+                        style.outlineColor = currentStyle.color;
+                        style.outlineStyle = style.outlineStyle || 'none';
+                        style.outlineWidth = style.outlineWidth || '0px';
+                        style.outline = [style.outlineColor, style.outlineWidth, style.outlineStyle].join(' ');
+                    }
+                } else {
+                    style[property] = currentStyle[property];
+                }
+            }
+
+            setShortStyleProperty(style, 'margin');
+            setShortStyleProperty(style, 'padding');
+            setShortStyleProperty(style, 'border');
+
+            style.fontSize = Math.round(fontSize) + 'px';
+        }
+
+        CSSStyleDeclaration.prototype = {
+            constructor: CSSStyleDeclaration,
+            // <CSSStyleDeclaration>.getPropertyPriority
+            getPropertyPriority: function () {
+                throw new Error('NotSupportedError: DOM Exception 9');
+            },
+            // <CSSStyleDeclaration>.getPropertyValue
+            getPropertyValue: function (property) {
+                return this[property.replace(/-\w/g, function (match) {
+                    return match[1].toUpperCase();
+                })];
+            },
+            // <CSSStyleDeclaration>.item
+            item: function (index) {
+                return this[index];
+            },
+            // <CSSStyleDeclaration>.removeProperty
+            removeProperty: function () {
+                throw new Error('NoModificationAllowedError: DOM Exception 7');
+            },
+            // <CSSStyleDeclaration>.setProperty
+            setProperty: function () {
+                throw new Error('NoModificationAllowedError: DOM Exception 7');
+            },
+            // <CSSStyleDeclaration>.getPropertyCSSValue
+            getPropertyCSSValue: function () {
+                throw new Error('NotSupportedError: DOM Exception 9');
+            }
+        };
+
+        // <Global>.getComputedStyle
+        window.getComputedStyle = function getComputedStyle(element) {
+            return new CSSStyleDeclaration(element);
+        };
+    })();
+}
+
+// Event
+if (!window.Event||!Window.prototype.Event) {
+    (function (){
+        window.Event = Window.prototype.Event = Document.prototype.Event = Element.prototype.Event = function Event(type, eventInitDict) {
+            if (!type) { throw new Error('Not enough arguments'); }
+            var event,
+                bubbles = eventInitDict && eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false,
+                cancelable = eventInitDict && eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;
+            if ( 'createEvent' in document ) {
+                event = document.createEvent('Event');
+                event.initEvent(type, bubbles, cancelable);
+            } else {
+                event = document.createEventObject();
+                event.type = type;
+                event.bubbles = bubbles;
+                event.cancelable = cancelable;
+            }
+            return event;
+        };
+    })();
+}
+
+// CustomEvent
+if (!('CustomEvent' in window) || !('CustomEvent' in Window.prototype)) {
+    (function(){
+        window.CustomEvent = Window.prototype.CustomEvent = Document.prototype.CustomEvent = Element.prototype.CustomEvent = function CustomEvent(type, eventInitDict) {
+            if (!type) {
+                throw Error('TypeError: Failed to construct "CustomEvent": An event name must be provided.');
+            }
+            var event = new Event(type, eventInitDict);
+            event.detail = eventInitDict && eventInitDict.detail || null;
+            return event;
+        };
+
+    })()
+}
+
+// addEventListener
+if (!window.addEventListener||!Window.prototype.addEventListener) {
+    (function (){
+        window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function addEventListener() {
+            var    element = this,
+                type = arguments[0],
+                listener = arguments[1];
+
+            if (!element._events) {    element._events = {}; }
+
+            if (!element._events[type]) {
+                element._events[type] = function (event) {
+                    var    list = element._events[event.type].list,
+                        events = list.slice(),
+                        index = -1,
+                        length = events.length,
+                        eventElement;
+
+                    event.preventDefault = function preventDefault() {
+                        if (event.cancelable !== false) {
+                            event.returnValue = false;
+                        }
+                    };
+
+                    event.stopPropagation = function stopPropagation() {
+                        event.cancelBubble = true;
+                    };
+
+                    event.stopImmediatePropagation = function stopImmediatePropagation() {
+                        event.cancelBubble = true;
+                        event.cancelImmediate = true;
+                    };
+
+                    event.currentTarget = element;
+                    event.relatedTarget = event.fromElement || null;
+                    event.target = event.target || event.srcElement || element;
+                    event.timeStamp = new Date().getTime();
+
+                    if (event.clientX) {
+                        event.pageX = event.clientX + document.documentElement.scrollLeft;
+                        event.pageY = event.clientY + document.documentElement.scrollTop;
+                    }
+
+                    while (++index < length && !event.cancelImmediate) {
+                        if (index in events) {
+                            eventElement = events[index];
+
+                            if (list.indexOf(eventElement) !== -1 && typeof eventElement === 'function') {
+                                eventElement.call(element, event);
+                            }
+                        }
+                    }
+                };
+
+                element._events[type].list = [];
+
+                if (element.attachEvent) {
+                    element.attachEvent('on' + type, element._events[type]);
+                }
+            }
+
+            element._events[type].list.push(listener);
+        };
+
+        window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function removeEventListener() {
+            var    element = this,
+                type = arguments[0],
+                listener = arguments[1],
+                index;
+
+            if (element._events && element._events[type] && element._events[type].list) {
+                index = element._events[type].list.indexOf(listener);
+
+                if (index !== -1) {
+                    element._events[type].list.splice(index, 1);
+
+                    if (!element._events[type].list.length) {
+                        if (element.detachEvent) {
+                            element.detachEvent('on' + type, element._events[type]);
+                        }
+                        delete element._events[type];
+                    }
+                }
+            }
+        };
+    })();
+}
+
+// Event dispatcher    / trigger
+if (!window.dispatchEvent||!Window.prototype.dispatchEvent||!Document.prototype.dispatchEvent||!Element.prototype.dispatchEvent) {
+    (function(){
+        window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function dispatchEvent(event) {
+            if (!arguments.length) {
+                throw new Error('Not enough arguments');
+            }
+
+            if (!event || typeof event.type !== 'string') {
+                throw new Error('DOM Events Exception 0');
+            }
+
+            var element = this, type = event.type;
+
+            try {
+                if (!event.bubbles) {
+                    event.cancelBubble = true;
+
+                    var cancelBubbleEvent = function (event) {
+                        event.cancelBubble = true;
+
+                        (element || window).detachEvent('on' + type, cancelBubbleEvent);
+                    };
+
+                    this.attachEvent('on' + type, cancelBubbleEvent);
+                }
+
+                this.fireEvent('on' + type, event);
+            } catch (error) {
+                event.target = element;
+
+                do {
+                    event.currentTarget = element;
+
+                    if ('_events' in element && typeof element._events[type] === 'function') {
+                        element._events[type].call(element, event);
+                    }
+
+                    if (typeof element['on' + type] === 'function') {
+                        element['on' + type].call(element, event);
+                    }
+
+                    element = element.nodeType === 9 ? element.parentWindow : element.parentNode;
+                } while (element && !event.cancelBubble);
+            }
+
+            return true;
+        };
+    })();
+}
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/modal-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/modal-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/modal-native.js	(revision 2)
@@ -0,0 +1,295 @@
+// Native Javascript for Bootstrap 3 | Modal
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Modal = factory();
+  }
+
+})(function(){
+  
+  //MODAL DEFINITION
+  var Modal = function(element, options) { // element is the trigger button / options.target is the modal
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false; 
+    this.modal = typeof element === 'object' ? element : document.querySelector(element);
+    this.options = {};
+    this.options.backdrop = options.backdrop === 'false' ? false : true;
+    this.options.keyboard = options.keyboard === 'false' ? false : true;
+    this.options.content = options.content;
+    this.duration = options.duration || 300; // the default modal fade duration option
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : this.duration;
+
+    this.scrollbarWidth    = 0;
+    this.dialog = this.modal.querySelector('.modal-dialog');
+    this.timer = 0;
+
+    this.init();
+  };
+  
+  var getWindowWidth = function() {
+    var htmlRect = document.documentElement.getBoundingClientRect(), 
+      fullWindowWidth = window.innerWidth || (htmlRect.right - Math.abs(htmlRect.left));
+    return fullWindowWidth;
+  };
+  Modal.prototype = {
+    
+    init : function() {      
+        
+      this.actions();
+      this.trigger();  
+      if ( this.options.content && this.options.content !== undefined ) {        
+        this.content( this.options.content );
+      }
+    },
+    
+    actions : function() {
+      var self = this;
+      this.open = function() {
+        this._open();
+      },
+    
+      this.close = function() {
+        this._close();
+      },
+    
+      this._open = function() {
+        var currentOpen = document.querySelector('.modal.in');
+        if (currentOpen){
+            clearTimeout(currentOpen.getAttribute('data-timer'));
+            this.removeClass(currentOpen,'in');
+            setTimeout( function() {
+              currentOpen.setAttribute('aria-hidden', true);
+              currentOpen.style.display = '';
+            }, self.options.duration/2);
+        }
+            
+        if ( this.options.backdrop ) {
+          this.createOverlay();
+        } else { this.overlay = null }
+        
+        if ( this.overlay ) {
+          setTimeout( function() {                                
+            self.addClass(self.overlay,'in');
+          }, 0);            
+        }
+                
+        clearTimeout(self.modal.getAttribute('data-timer'));
+        this.timer = setTimeout( function() {
+          self.modal.style.display = 'block';
+          
+          self.checkScrollbar();
+          self.adjustDialog();
+          self.setScrollbar();
+          
+          self.resize();
+          self.dismiss();
+          self.keydown();      
+          
+          self.addClass(document.body,'modal-open');
+          self.addClass(self.modal,'in');
+          self.modal.setAttribute('aria-hidden', false);
+        }, self.options.duration/2);
+        this.modal.setAttribute('data-timer',self.timer);
+      },
+    
+      this._close = function() {
+
+        if ( this.overlay ) {          
+          this.removeClass(this.overlay,'in');
+        }      
+        this.removeClass(this.modal,'in');
+        this.modal.setAttribute('aria-hidden', true);
+                
+        clearTimeout(self.modal.getAttribute('data-timer'));
+        this.timer = setTimeout( function() {
+          self.removeClass(document.body,'modal-open');
+          self.resize();
+          self.resetAdjustments();
+          self.resetScrollbar();
+          
+          self.dismiss();
+          self.keydown();
+          self.modal.style.display = '';
+        }, self.options.duration/2);
+        this.modal.setAttribute('data-timer',self.timer);
+        
+        setTimeout( function() {
+          if (!document.querySelector('.modal.in')) {  self.removeOverlay(); }
+        }, self.options.duration);
+      },
+    
+      this.content = function( content ) {
+        return this.modal.querySelector('.modal-content').innerHTML = content;
+      },
+    
+      this.createOverlay = function() {
+        var backdrop = document.createElement('div'), overlay = document.querySelector('.modal-backdrop');
+        backdrop.setAttribute('class','modal-backdrop fade');
+    
+        if ( overlay ) {
+          this.overlay = overlay;
+        } else {
+          this.overlay = backdrop;
+          document.body.appendChild(backdrop);
+        }
+      },
+    
+      this.removeOverlay = function() {
+        var overlay = document.querySelector('.modal-backdrop');
+        if ( overlay !== null && overlay !== undefined ) {
+          document.body.removeChild(overlay)
+        }
+      },
+    
+      this.keydown = function() {
+        function keyHandler(e) {
+          if (self.options.keyboard && e.which == 27) {
+            self.close();
+          }          
+        }
+        if (!/in/.test(this.modal.className)) {
+          document.addEventListener('keydown', keyHandler, false);
+        } else {
+          document.removeEventListener('keydown', keyHandler, false);
+        }  
+      },
+    
+      this.trigger = function() {
+        var triggers = document.querySelectorAll('[data-toggle="modal"]'), tgl = triggers.length, i = 0;
+        for ( i;i<tgl;i++ ) {
+          triggers[i].addEventListener('click', function(e) {
+            var b = e.target,
+            s = b.getAttribute('data-target') && b.getAttribute('data-target').replace('#','')
+            || b.getAttribute('href') && b.getAttribute('href').replace('#','');
+            if ( document.getElementById( s ) === self.modal ) {
+              self.open()
+            }
+          })
+        }
+      },
+    
+      this._resize = function() {
+        var overlay = this.overlay||document.querySelector('.modal-backdrop'),
+          dim = { w: document.documentElement.clientWidth + 'px', h: document.documentElement.clientHeight + 'px' };
+        // setTimeout(function() {
+          if ( overlay !== null && /in/.test(overlay.className) ) {
+            overlay.style.height = dim.h; overlay.style.width = dim.w;
+          }
+        // }, self.options.duration/2)
+      },
+      
+      this.oneResize = function() {
+        function oneResize() {
+          self._resize();
+          self.handleUpdate();
+          window.removeEventListener('resize', oneResize, false);
+        }
+        window.addEventListener('resize', oneResize, false);      
+      },
+    
+      this.resize = function() {
+        function resizeHandler() {
+          // setTimeout(function() {
+            self._resize();
+            self.handleUpdate();
+            // console.log('offresize')
+          // }, 100)
+        }      
+
+        if (!/in/.test(this.modal.className)) {
+          window.addEventListener('resize', this.oneResize, false);
+        } else {
+          window.removeEventListener('resize', this.oneResize, false);
+        }
+          
+      },
+    
+      this.dismiss = function() {
+        function dismissHandler(e) {
+          if ( e.target.parentNode.getAttribute('data-dismiss') === 'modal' || e.target.getAttribute('data-dismiss') === 'modal' || e.target === self.modal ) {
+            e.preventDefault(); self.close()
+          }
+        }          
+        if (!/in/.test(this.modal.className)) {
+          this.modal.addEventListener('click', dismissHandler, false);
+        } else {
+          this.modal.removeEventListener('click', dismissHandler, false);
+        }  
+      },
+    
+      // these following methods are used to handle overflowing modals
+      
+      this.handleUpdate = function () {
+        this.adjustDialog(); 
+      },
+      
+      this.adjustDialog = function () {
+        this.modal.style.paddingLeft = !this.bodyIsOverflowing && this.modalIsOverflowing ? this.scrollbarWidth + 'px' : '';
+        this.modal.style.paddingRight = this.bodyIsOverflowing && !this.modalIsOverflowing ? this.scrollbarWidth + 'px' : '';
+      },
+      
+      this.resetAdjustments = function () {
+        this.modal.style.paddingLeft = '';
+        this.modal.style.paddingRight = '';
+      },
+      
+      this.checkScrollbar = function () {  
+        this.bodyIsOverflowing = document.body.clientWidth < getWindowWidth();
+        this.modalIsOverflowing = this.modal.scrollHeight > document.documentElement.clientHeight;
+        this.scrollbarWidth = this.measureScrollbar();
+      },
+      
+      this.setScrollbar = function () {
+        var bodyStyle = window.getComputedStyle(document.body), bodyPad = parseInt((bodyStyle.paddingRight), 10);
+        if (this.bodyIsOverflowing) { document.body.style.paddingRight = (bodyPad + this.scrollbarWidth) + 'px'; }
+      },
+      
+      this.resetScrollbar = function () {
+        document.body.style.paddingRight = '';
+      },
+      
+      this.measureScrollbar = function () { // thx walsh
+        var scrollDiv = document.createElement('div');
+        scrollDiv.className = 'modal-scrollbar-measure';
+        document.body.appendChild(scrollDiv);
+        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+        document.body.removeChild(scrollDiv);
+        return scrollbarWidth;
+      },
+      
+      this.addClass = function(el,c) {  
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      },
+      
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+      }
+    }
+  };  
+  
+  // DATA API
+  var Modals = document.querySelectorAll('.modal'), mdl = Modals.length, i = 0;
+  for ( i;i<mdl;i++ ) {
+    var modal = Modals[i], options = {};
+    options.keyboard = modal.getAttribute('data-keyboard');
+    options.backdrop = modal.getAttribute('data-backdrop');
+    options.duration = modal.getAttribute('data-duration');
+    new Modal(modal,options)
+  }
+
+  return Modal;
+
+});
Index: trunk/templates/DefaultTheme/lib/native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/native.js	(revision 2)
@@ -0,0 +1,2031 @@
+// Native Javascript for Bootstrap 3
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Affix = factory();
+  }
+
+})(function(){
+
+  //AFFIX DEFINITION
+  var Affix = function(element,options) {
+    options = options || {};
+
+    this.element = typeof element === 'object' ? element : document.querySelector(element);
+    this.options = {};
+    this.options.target = options.target ? ((typeof(options.target) === 'object') ? options.target : document.querySelector(options.target)) : null; // target is an object
+    this.options.offsetTop = options.offsetTop && options.offsetTop ? ( options.offsetTop === 'function' ? options.offsetTop() : parseInt(options.offsetTop,0) ) : 0; // offset option is an integer number or function to determine that number
+    this.options.offsetBottom = options.offsetBottom && options.offsetBottom ? ( options.offsetBottom === 'function' ? options.offsetBottom() : parseInt(options.offsetBottom,0) ) : null;
+
+    if (this.element && (this.options.target || this.options.offsetTop || this.options.offsetBottom ) ) { this.init(); }
+  }
+
+  //AFFIX METHODS
+  Affix.prototype = {
+    init: function () {
+      this.affixed = false;
+      this.affixedBottom = false;
+      this.getPinOffsetTop = 0;
+      this.getPinOffsetBottom = null;
+
+      //actions
+      this.checkPosition();
+      this.updateAffix();
+      this.scrollEvent();
+      this.resizeEvent()
+    },
+    processOffsetTop: function () {
+      if ( this.options.target !== null ) {
+        return this.targetRect().top + this.scrollOffset();
+      } else if ( this.options.offsetTop !== null ) {
+        return this.options.offsetTop
+      }
+    },
+    processOffsetBottom: function () {
+      if ( this.options.offsetBottom !== null ) {
+        var maxScroll = this.getMaxScroll();
+        return maxScroll - this.elementHeight() - this.options.offsetBottom
+      }
+    },
+    offsetTop: function () {
+      return this.processOffsetTop()
+    },
+    offsetBottom: function () {
+      return this.processOffsetBottom()
+    },
+    checkPosition: function () {
+      this.getPinOffsetTop = this.offsetTop
+      this.getPinOffsetBottom = this.offsetBottom
+    },
+    scrollOffset: function () {
+      return window.pageYOffset || document.documentElement.scrollTop
+    },
+    pinTop: function () {
+      if ( !/affix/.test(this.element.className) ) {
+        this.element.className += ' affix';
+        this.affixed = true
+      }
+    },
+    unPinTop: function () {
+      if ( /affix/.test(this.element.className) ) {
+        this.element.className = this.element.className.replace(' affix','');
+        this.affixed = false
+      }
+    },
+    pinBottom: function () {
+      if ( !/'affix-bottom'/.test(this.element.className) ) {
+        this.element.className += ' affix-bottom';
+        this.affixedBottom = true
+      }
+    },
+    unPinBottom: function () {
+      if ( /'affix-bottom'/.test(this.element.className) ) {
+        this.element.className = this.element.className.replace(' affix-bottom','');
+        this.affixedBottom = false
+      }
+    },
+    updatePin: function () {
+      if (this.affixed === false && (parseInt(this.offsetTop(),0) - parseInt(this.scrollOffset(),0) < 0)) {
+        this.pinTop();
+      } else if (this.affixed === true && (parseInt(this.scrollOffset(),0) <= parseInt(this.getPinOffsetTop(),0) )) {
+        this.unPinTop()
+      }
+
+      if (this.affixedBottom === false && (parseInt(this.offsetBottom(),0) - parseInt(this.scrollOffset(),0) < 0)) {
+        this.pinBottom();
+      } else if (this.affixedBottom === true && (parseInt(this.scrollOffset(),0) <= parseInt(this.getPinOffsetBottom(),0) )) {
+        this.unPinBottom()
+      }
+    },
+
+    updateAffix : function () { // Unpin and check position again
+      this.unPinTop();
+      this.unPinBottom();
+      this.checkPosition()
+
+      this.updatePin() // If any case update values again
+    },
+
+    elementHeight : function(){
+      return this.element.offsetHeight
+    },
+
+    targetRect : function(){
+      return this.options.target.getBoundingClientRect()
+    },
+
+    getMaxScroll : function(){
+      return Math.max( document.body.scrollHeight, document.body.offsetHeight,
+        document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight )
+    },
+
+    scrollEvent : function(){
+      var self = this;
+      window.addEventListener('scroll', function() {
+        self.updatePin()
+      }, false);
+
+    },
+    resizeEvent : function(){
+      var self = this,
+        isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false,
+        dl = (isIE && isIE < 10) ? 500 : 50;
+      window.addEventListener('resize', function () {
+        setTimeout(function(){
+          self.updateAffix()
+        },dl);
+      }, false);
+
+    }
+  };
+
+  // AFFIX DATA API
+  // =================
+  var Affixes = document.querySelectorAll('[data-spy="affix"]'), i = 0, afl = Affixes.length;
+  for (i;i<afl;i++) {
+    var item = Affixes[i], options = {};
+      options.offsetTop    = item.getAttribute('data-offset-top');
+      options.offsetBottom  = item.getAttribute('data-offset-bottom');
+      options.target      = item.getAttribute('data-target');
+
+    if ( item && (options.offsetTop !== null || options.offsetBottom !== null || options.target !== null) ) { //don't do anything unless we have something valid to pin
+      new Affix(item, options);
+    }
+  }
+
+  return Affix;
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Alert = factory();
+  }
+
+})(function(root){
+
+  // ALERT DEFINITION
+  // ===================
+  var Alert = function( element ) {
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.alert = null;
+    this.duration = 150; // default alert transition duration
+    this.init();
+  }
+
+  // ALERT METHODS
+  // ================
+  Alert.prototype = {
+
+    init : function() {
+      this.actions();
+      document.addEventListener('click', this.close, false); //delegate to all alerts, including those inserted later into the DOM
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.close = function(e) {
+        var target = e.target;
+        self.btn = target.getAttribute('data-dismiss') === 'alert' && target.className === 'close' ? target : target.parentNode;
+        self.alert = self.btn.parentNode;
+
+        if ( self.alert !== null && self.btn.getAttribute('data-dismiss') === 'alert' && /in/.test(self.alert.className) ) {
+          self.alert.className = self.alert.className.replace(' in','');
+          setTimeout(function() {
+            self.alert && self.alert.parentNode.removeChild(self.alert);
+          }, self.duration);
+        }
+
+      }
+    }
+    }
+
+  // ALERT DATA API
+  // =================
+    var Alerts = document.querySelectorAll('[data-dismiss="alert"]'), i = 0, all = Alerts.length;
+  for (i;i<all;i++) {
+    new Alert(Alerts[i]);
+  }
+
+  return Alert;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Button = factory();
+  }
+
+})(function(){
+
+  // BUTTON DEFINITION
+  // ===================
+  var Button = function( element, option ) {
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.option = typeof option === 'string' ? option : null;
+
+    this.init();
+  };
+
+  // BUTTON METHODS
+  // ================
+  Button.prototype = {
+
+    init : function() {
+      var self = this;
+      this.actions();
+
+      if ( /btn/.test(this.btn.className) ) {
+        if ( this.option && this.option !== 'reset' ) {
+
+          this.state = this.btn.getAttribute('data-'+this.option+'-text') || null;
+
+          !this.btn.getAttribute('data-original-text') && this.btn.setAttribute('data-original-text',self.btn.innerHTML.replace(/^\s+|\s+$/g, ''));
+          this.setState();
+
+        } else if ( this.option === 'reset' ) {
+          this.reset();
+        }
+      }
+
+      if ( /btn-group/.test(this.btn.className) ) {
+        this.btn.addEventListener('click', this.toggle, false);
+      }
+    },
+
+    actions : function() {
+      var self = this,
+        changeEvent = (('CustomEvent' in window) && window.dispatchEvent)
+          ? new CustomEvent('bs.button.change') : null; // The custom event that will be triggered on demand
+
+      // assign event to a trigger function
+      function triggerChange(t) { if (changeEvent) { t.dispatchEvent(changeEvent); } }
+
+      this.setState = function() {
+        if ( this.option === 'loading' ) {
+          this.addClass(this.btn,'disabled');
+          this.btn.setAttribute('disabled','disabled');
+        }
+        this.btn.innerHTML = this.state;
+      },
+
+      this.reset = function() {
+        if ( /disabled/.test(self.btn.className) || self.btn.getAttribute('disabled') === 'disabled' ) {
+          this.removeClass(this.btn,'disabled');
+          self.btn.removeAttribute('disabled');
+        }
+        self.btn.innerHTML = self.btn.getAttribute('data-original-text');
+      },
+
+      this.toggle = function(e) {
+        var parent = e.target.parentNode,
+          label = e.target.tagName === 'LABEL' ? e.target : parent.tagName === 'LABEL' ? parent : null; // the .btn label
+
+        if ( !label ) return; //react if a label or its immediate child is clicked
+
+        var target = this, //e.currentTarget || e.srcElement; // the button group, the target of the handler function
+          labels = target.querySelectorAll('.btn'), ll = labels.length, i = 0, // all the button group buttons
+          input = label.getElementsByTagName('INPUT')[0];
+
+        if ( !input ) return; //return if no input found
+
+        //manage the dom manipulation
+        if ( input.type === 'checkbox' ) { //checkboxes
+          if ( !input.checked ) {
+            self.addClass(label,'active');
+            input.getAttribute('checked');
+            input.setAttribute('checked','checked');
+            input.checked = true;
+          } else {
+            self.removeClass(label,'active');
+            input.getAttribute('checked');
+            input.removeAttribute('checked');
+            input.checked = false;
+          }
+          triggerChange(input); //trigger the change for the input
+          triggerChange(self.btn); //trigger the change for the btn-group
+        }
+
+        if ( input.type === 'radio' ) { // radio buttons
+          if ( !input.checked ) { // don't trigger if already active
+            self.addClass(label,'active');
+            input.setAttribute('checked','checked');
+            input.checked = true;
+            triggerChange(self.btn);
+            triggerChange(input); //trigger the change
+
+            for (i;i<ll;i++) {
+              var l = labels[i];
+              if ( l !== label && /active/.test(l.className) )  {
+                var inp = l.getElementsByTagName('INPUT')[0];
+                self.removeClass(l,'active');
+                inp.removeAttribute('checked');
+                inp.checked = false;
+                triggerChange(inp); // trigger the change
+              }
+            }
+          }
+        }
+      },
+      this.addClass = function(el,c) { // where modern browsers fail, use classList
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; el.offsetWidth; }
+      },
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); el.offsetWidth; }
+      }
+    }
+    }
+
+  // BUTTON DATA API
+  // =================
+    var Buttons = document.querySelectorAll('[data-toggle=button]'), i = 0, btl = Buttons.length;
+  for (i;i<btl;i++) {
+    new Button(Buttons[i]);
+  }
+
+  var ButtonGroups = document.querySelectorAll('[data-toggle=buttons]'), j = 0, bgl = ButtonGroups.length;
+  for (j;j<bgl;j++) {
+    new Button(ButtonGroups[j]);
+  }
+
+  return Button;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Carousel = factory();
+  }
+
+})(function(){
+
+  // CAROUSEL DEFINITION
+  // ===================
+  var Carousel = function( element, options ) {
+    options = options || {};
+
+    this.carousel = (typeof element === 'object') ? element : document.querySelector( element );
+    this.options = {}; //replace extend
+    this.options.keyboard = options.keyboard === 'true' ? true : false;
+    this.options.pause = options.pause ? options.pause : 'hover'; // false / hover
+
+    // bootstrap carousel default transition duration / option
+    this.duration = 600;
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+
+    var items = this.carousel.querySelectorAll('.item'), il=items.length; //this is an object
+    this.controls = this.carousel.querySelectorAll('.carousel-control');
+    this.prev = this.controls[0];
+    this.next = this.controls[1];
+    this.slides = []; for (var i = 0; i < il; i++) { this.slides.push(items[i]); } // this is an array
+    this.indicator = this.carousel.querySelector( ".carousel-indicators" ); // object
+    this.indicators = this.carousel.querySelectorAll( ".carousel-indicators li" ); // object
+    this.total    = this.slides.length;
+    this.timer    = null;
+    this.direction  = null;
+    this.index    = 0;
+
+    if (options.interval === 'false' ) {
+      this.options.interval = false;
+    } else {
+      this.options.interval = parseInt(options.interval) || 5000;
+    }
+
+    this.init();
+  };
+
+  // CAROUSEL METHODS
+  // ================
+  Carousel.prototype = {
+    init: function() {
+      if ( this.options.interval !== false ){
+        this.cycle();
+      }
+
+      if ( this.options && this.options.pause === 'hover' && this.options.interval !== false ) {
+        this.pause();
+      }
+      this.actions();
+      this._addEventListeners();
+    },
+    cycle: function(e) {
+      var self = this;
+
+      self.direction = 'left';
+      self.timer = setInterval(function() {
+        self.index++;
+        if( self.index == self.slides.length ) {
+          self.index = 0;
+        }
+        self._slideTo( self.index, e );
+
+      }, self.options.interval);
+    },
+    pause: function() {
+      var self = this;
+      var pauseHandler = function () {
+        if ( self.options.interval !==false && !/paused/.test(self.carousel.className) ) {
+          self.carousel.className += ' paused';
+          clearInterval( self.timer );
+          self.timer = null;
+        }
+      };
+      var resumeHandler = function() {
+        if ( self.options.interval !==false && /paused/.test(self.carousel.className) ) {
+          self.cycle();
+          self.carousel.className = self.carousel.className.replace(' paused','');
+        }
+      };
+      self.carousel.addEventListener( "mouseenter", pauseHandler, false);
+      self.carousel.addEventListener( "mouseleave", resumeHandler, false);
+      self.carousel.addEventListener( "touchstart", pauseHandler, false);
+      self.carousel.addEventListener( "touchend", resumeHandler, false);
+    },
+    _slideTo: function( next, e ) {
+      var self = this;
+      var active = self._getActiveIndex(); // the current active
+      //determine type
+      var direction = self.direction;
+      var dr = direction === 'left' ? 'next' : 'prev';
+      var slid = null, slide=null;
+
+      //register events
+      if (('CustomEvent' in window) && window.dispatchEvent) {
+        slid =  new CustomEvent("slid.bs.carousel");
+        slide = new CustomEvent("slide.bs.carousel");
+      }
+      if (slid) { self.carousel.dispatchEvent(slid); } //here we go with the slid
+
+      self._removeEventListeners();
+      clearInterval(self.timer);
+      self.timer = null;
+      self._curentPage( self.indicators[next] );
+
+      if ( /slide/.test(this.carousel.className) && !(this.isIE && this.isIE < 10) ) {
+        self.slides[next].className += (' '+dr);
+        self.slides[next].offsetWidth;
+        self.slides[next].className += (' '+direction);
+        self.slides[active].className += (' '+direction);
+
+        setTimeout(function() { //we're gonna fake waiting for the animation to finish, cleaner and better
+          self._addEventListeners();
+
+          self.slides[next].className += ' active';
+          self.slides[active].className = self.slides[active].className.replace(' active','');
+
+          self.slides[next].className = self.slides[next].className.replace(' '+dr,'');
+          self.slides[next].className = self.slides[next].className.replace(' '+direction,'');
+          self.slides[active].className = self.slides[active].className.replace(' '+direction,'');
+
+          if ( self.options.interval !== false && !/paused/.test(self.carousel.className) ){
+            clearInterval(self.timer); self.cycle();
+          }
+          if (slide) { self.carousel.dispatchEvent(slide); } //here we go with the slide
+        }, self.options.duration + 100 );
+      } else {
+        self.slides[next].className += ' active';
+        self.slides[next].offsetWidth;
+        self.slides[active].className = self.slides[active].className.replace(' active','');
+        setTimeout(function() {
+          self._addEventListeners();
+          if ( self.options.interval !== false && !/paused/.test(self.carousel.className) ){
+            clearInterval(self.timer); self.cycle();
+          }
+          if (slide) { self.carousel.dispatchEvent(slide); } //here we go with the slide
+        }, self.options.duration + 100 );
+      }
+    },
+    _addEventListeners : function () {
+      var self = this;
+
+      self.next && self.next.addEventListener( "click", self.controlsHandler, false);
+      self.prev && self.prev.addEventListener( "click", self.controlsHandler, false);
+
+      self.indicator && self.indicator.addEventListener( "click", self.indicatorHandler, false);
+
+      if (self.options.keyboard === true) {
+        window.addEventListener('keydown', self.keyHandler, false);
+      }
+    },
+    _removeEventListeners : function () { // prevent mouse bubbles while animating
+      var self = this;
+
+      self.next && self.next.removeEventListener( "click", self.controlsHandler, false);
+      self.prev && self.prev.removeEventListener( "click", self.controlsHandler, false);
+
+      self.indicator && self.indicator.removeEventListener( "click", self.indicatorHandler, false);
+
+      if (self.options.keyboard === true) {
+        window.removeEventListener('keydown', self.keyHandler, false);
+      }
+    },
+    _getActiveIndex : function () {
+      return this.slides.indexOf(this.carousel.querySelector('.item.active'))
+    },
+    _curentPage: function( p ) {
+      for( var i = 0; i < this.indicators.length; ++i ) {
+        var a = this.indicators[i];
+        a.className = "";
+      }
+      if (p) p.className = "active";
+    },
+    actions: function() {
+      var self = this;
+      self.indicatorHandler = function(e) {
+        e.preventDefault();
+        var target = e.target;
+        var active = self._getActiveIndex(); // the current active
+
+        if ( target && !/active/.test(target.className) && target.getAttribute('data-slide-to') ) {
+          var n = parseInt( target.getAttribute('data-slide-to'), 10 );
+
+          self.index = n;
+
+          if( self.index == 0 ) {
+            self.index = 0;
+          } else if ( self.index == self.total - 1 ) {
+            self.index = self.total - 1;
+          }
+
+           //determine direction first
+          if  ( (active < self.index ) || (active === self.total - 1 && self.index === 0 ) ) {
+            self.direction = 'left'; // next
+          } else if  ( (active > self.index) || (active === 0 && self.index === self.total -1 ) ) {
+            self.direction = 'right'; // prev
+          }
+        } else { return false; }
+
+        self._slideTo( self.index, e ); //Do the slide
+
+      },
+
+      self.controlsHandler = function (e) {
+        var target = e.currentTarget || e.srcElement;
+        e.preventDefault();
+
+        if ( target === self.next ) {
+          self.index++;
+          self.direction = 'left'; //set direction first
+
+          if( self.index == self.total - 1 ) {
+            self.index = self.total - 1;
+          } else if ( self.index == self.total ){
+            self.index = 0
+          }
+        } else if ( target === self.prev ) {
+          self.index--;
+          self.direction = 'right'; //set direction first
+
+          if( self.index == 0 ) {
+            self.index = 0;
+          } else if ( self.index < 0 ){
+            self.index = self.total - 1
+          }
+        }
+
+        self._slideTo( self.index, e ); //Do the slide
+      }
+
+      self.keyHandler = function (e) {
+
+        switch (e.which) {
+          case 39:
+            e.preventDefault();
+            self.index++;
+            self.direction = 'left';
+            if( self.index == self.total - 1 ) { self.index = self.total - 1; } else
+            if ( self.index == self.total ){ self.index = 0 }
+            break;
+          case 37:
+            e.preventDefault();
+            self.index--;
+            self.direction = 'right';
+            if( self.index == 0 ) { self.index = 0; } else
+            if ( self.index < 0 ){ self.index = self.total - 1 }
+            break;
+          default: return;
+        }
+        self._slideTo( self.index, e ); //Do the slide
+      }
+    }
+  }
+
+  // CAROUSEL DATA API
+  // =================
+  var Carousels = document.querySelectorAll('[data-ride="carousel"]'), i = 0, crl = Carousels.length;
+  for (i;i<crl;i++) {
+    var c = Carousels[i], options = {};
+    options.interval = c.getAttribute('data-interval') && c.getAttribute('data-interval');
+    options.pause = c.getAttribute('data-pause') && c.getAttribute('data-pause') || 'hover';
+    options.keyboard = c.getAttribute('data-keyboard') && c.getAttribute('data-keyboard') || false;
+    options.duration = c.getAttribute('data-duration') && c.getAttribute('data-duration') || false;
+    new Carousel(c, options)
+  }
+
+  return Carousel;
+
+});
+
+
+// Native Javascript for Bootstrap 3 | Collapse
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Collapse = factory();
+  }
+
+})(function(){
+
+  // COLLAPSE DEFINITION
+  // ===================
+  var Collapse = function( element, options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.btn = typeof element === 'object' ? element : document.querySelector(element);
+    this.accordion = null;
+    this.collapse = null;
+    this.duration = 300; // default collapse transition duration
+    this.options = {};
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+    this.init();
+  };
+
+  // COLLAPSE METHODS
+  // ================
+  Collapse.prototype = {
+
+    init : function() {
+      this.actions();
+      this.addEvent();
+    },
+
+    actions : function() {
+      var self = this;
+      var getOuterHeight = function (el) {
+        var s = el && el.currentStyle || window.getComputedStyle(el), // the getComputedStyle polyfill would do this for us, but we want to make sure it does
+          btp = s.borderTopWidth || 0,
+          mtp = /px/.test(s.marginTop)  ? Math.round(s.marginTop.replace('px',''))    : 0,
+          mbp = /px/.test(s.marginBottom)  ? Math.round(s.marginBottom.replace('px',''))  : 0,
+          mte = /em/.test(s.marginTop)  ? Math.round(s.marginTop.replace('em','')    * parseInt(s.fontSize)) : 0,
+          mbe = /em/.test(s.marginBottom)  ? Math.round(s.marginBottom.replace('em','')  * parseInt(s.fontSize)) : 0;
+
+        return el.clientHeight + parseInt( btp ) + parseInt( mtp ) + parseInt( mbp ) + parseInt( mte ) + parseInt( mbe ); //we need an accurate margin value
+      };
+
+      this.toggle = function(e) {
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+
+        if (!/\bin/.test(self.collapse.className)) {
+          self.open(e);
+        } else {
+          self.close(e);
+        }
+      },
+      this.close = function(e) {
+        e.preventDefault();
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+        self._close(self.collapse);
+        self.removeClass(self.btn,'collapsed');
+      },
+      this.open = function(e) {
+        e.preventDefault();
+        self.btn = self.getTarget(e).btn;
+        self.collapse = self.getTarget(e).collapse;
+        self.accordion = self.btn.getAttribute('data-parent') && self.getClosest(self.btn, self.btn.getAttribute('data-parent'));
+
+        self._open(self.collapse);
+        self.addClass(self.btn,'collapsed');
+
+        if ( self.accordion !== null ) {
+          var active = self.accordion.querySelectorAll('.collapse.in'), al = active.length, i = 0;
+          for (i;i<al;i++) {
+            if ( active[i] !== self.collapse) self._close(active[i]);
+          }
+        }
+      },
+      this._open = function(c) {
+        self.removeEvent();
+        self.addClass(c,'in');
+        c.setAttribute('aria-expanded','true');
+        self.addClass(c,'collapsing');
+        setTimeout(function() {
+          var h = self.getMaxHeight(c);
+          c.style.height = h + 'px';
+          c.style.overflowY = 'hidden';
+        }, 0);
+        setTimeout(function() {
+          c.style.height = '';
+          c.style.overflowY = '';
+          self.removeClass(c,'collapsing');
+          self.addEvent();
+        }, self.options.duration);
+      },
+      this._close = function(c) {
+        self.removeEvent();
+        c.setAttribute('aria-expanded','false');
+        c.style.height = self.getMaxHeight(c) + 'px';
+        setTimeout(function() {
+          c.style.height = '0px';
+          c.style.overflowY = 'hidden';
+          self.addClass(c,'collapsing');
+        }, 0);
+
+        setTimeout(function() {
+          self.removeClass(c,'collapsing');
+          self.removeClass(c,'in');
+          c.style.overflowY = '';
+          c.style.height = '';
+          self.addEvent();
+        }, self.options.duration);
+      },
+      this.getMaxHeight = function(l) { // get collapse trueHeight and border
+        var h = 0;
+        for (var k = 0, ll = l.children.length; k < ll; k++) {
+          h += getOuterHeight(l.children[k]);
+        }
+        return h;
+      },
+      this.removeEvent = function() {
+        this.btn.removeEventListener('click', this.toggle, false);
+      },
+      this.addEvent = function() {
+        this.btn.addEventListener('click', this.toggle, false);
+      },
+      this.getTarget = function(e) {
+        var t = e.currentTarget || e.srcElement,
+          h = t.href && t.getAttribute('href').replace('#',''),
+          d = t.getAttribute('data-target') && ( t.getAttribute('data-target') ),
+          id = h || ( d && /#/.test(d)) && d.replace('#',''),
+          cl = (d && d.charAt(0) === '.') && d, //the navbar collapse trigger targets a class
+          c = id && document.getElementById(id) || cl && document.querySelector(cl);
+
+        return {
+          btn : t,
+          collapse : c
+        };
+      },
+
+      this.getClosest = function (el, s) { //el is the element and s the selector of the closest item to find
+      // source http://gomakethings.com/climbing-up-and-down-the-dom-tree-with-vanilla-javascript/
+        var f = s.charAt(0);
+        for ( ; el && el !== document; el = el.parentNode ) {// Get closest match
+          if ( f === '.' ) {// If selector is a class
+            if ( document.querySelector(s) !== undefined ) { return el; }
+          }
+          if ( f === '#' ) { // If selector is an ID
+            if ( el.id === s.substr(1) ) { return el; }
+          }
+        }
+        return false;
+      };
+      this.addClass = function(el,c) {
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      };
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+      };
+    }
+  };
+
+  // COLLAPSE DATA API
+  // =================
+  var Collapses = document.querySelectorAll('[data-toggle="collapse"]'), i = 0, cll = Collapses.length;
+  for (i;i<cll;i++) {
+    var item = Collapses[i], options = {};
+    options.duration = item.getAttribute('data-duration');
+    new Collapse(item,options);
+  }
+
+  return Collapse;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Dropdown = factory();
+  }
+
+})(function(root){
+
+  // DROPDOWN DEFINITION
+  // ===================
+  var Dropdown = function( element) {
+    this.menu = typeof element === 'object' ? element : document.querySelector(element);
+    this.init();
+  }
+
+  // DROPDOWN METHODS
+  // ================
+  Dropdown.prototype = {
+
+    init : function() {
+      this.actions();
+      this.menu.setAttribute('tabindex', '0'); // Fix onblur on Chrome | Safari
+      document.addEventListener('click', this.handle, false);
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.handle = function(e) { // fix some Safari bug with <button>
+        var target = e.target || e.currentTarget,
+            children = [], c = self.menu.parentNode.getElementsByTagName('*');
+        for ( var i=0, l = c.length||0; i<l; i++) { l && children.push(c[i]); }
+
+        if ( target === self.menu || target.parentNode === self.menu ) {
+          self.toggle(e);
+        }  else if ( children && children.indexOf(target) > -1  ) {
+          return;
+        } else { self.close(); }
+        /\#$/g.test(target.href) && e.preventDefault();
+      }
+
+      this.toggle = function(e) {
+        if (/open/.test(this.menu.parentNode.className)) {
+          this.close();
+          document.removeEventListener('keydown', this.key, false);
+        } else {
+          this.menu.parentNode.className += ' open';
+          this.menu.setAttribute('aria-expanded',true);
+          document.addEventListener('keydown', this.key, false);
+        }
+      }
+
+      this.key = function(e) {
+        if (e.which == 27) {self.close();}
+      }
+
+      this.close = function() {
+        self.menu.parentNode.className = self.menu.parentNode.className.replace(' open','');
+        self.menu.setAttribute('aria-expanded',false);
+      }
+    }
+  }
+
+  // DROPDOWN DATA API
+  // =================
+  var Dropdowns = document.querySelectorAll('[data-toggle=dropdown]'), i = 0, ddl = Dropdowns.length;
+  for (i;i<ddl;i++) {
+    new Dropdown(Dropdowns[i]);
+  }
+
+  return Dropdown;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Modal = factory();
+  }
+
+})(function(){
+
+  //MODAL DEFINITION
+  var Modal = function(element, options) { // element is the trigger button / options.target is the modal
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.modal = typeof element === 'object' ? element : document.querySelector(element);
+    this.options = {};
+    this.options.backdrop = options.backdrop === 'false' ? false : true;
+    this.options.keyboard = options.keyboard === 'false' ? false : true;
+    this.options.content = options.content;
+    this.duration = options.duration || 300; // the default modal fade duration option
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : this.duration;
+
+    this.scrollbarWidth    = 0;
+    this.dialog = this.modal.querySelector('.modal-dialog');
+    this.timer = 0;
+
+    this.init();
+  };
+
+  var getWindowWidth = function() {
+    var htmlRect = document.documentElement.getBoundingClientRect(),
+      fullWindowWidth = window.innerWidth || (htmlRect.right - Math.abs(htmlRect.left));
+    return fullWindowWidth;
+  };
+  Modal.prototype = {
+
+    init : function() {
+
+      this.actions();
+      this.trigger();
+      if ( this.options.content && this.options.content !== undefined ) {
+        this.content( this.options.content );
+      }
+    },
+
+    actions : function() {
+      var self = this;
+      this.open = function() {
+        this._open();
+      },
+
+      this.close = function() {
+        this._close();
+      },
+
+      this._open = function() {
+        var currentOpen = document.querySelector('.modal.in');
+        if (currentOpen){
+            clearTimeout(currentOpen.getAttribute('data-timer'));
+            this.removeClass(currentOpen,'in');
+            setTimeout( function() {
+              currentOpen.setAttribute('aria-hidden', true);
+              currentOpen.style.display = '';
+            }, self.options.duration/2);
+        }
+
+        if ( this.options.backdrop ) {
+          this.createOverlay();
+        } else { this.overlay = null }
+
+        if ( this.overlay ) {
+          setTimeout( function() {
+            self.addClass(self.overlay,'in');
+          }, 0);
+        }
+
+        clearTimeout(self.modal.getAttribute('data-timer'));
+        this.timer = setTimeout( function() {
+          self.modal.style.display = 'block';
+
+          self.checkScrollbar();
+          self.adjustDialog();
+          self.setScrollbar();
+
+          self.resize();
+          self.dismiss();
+          self.keydown();
+
+          self.addClass(document.body,'modal-open');
+          self.addClass(self.modal,'in');
+          self.modal.setAttribute('aria-hidden', false);
+        }, self.options.duration/2);
+        this.modal.setAttribute('data-timer',self.timer);
+      },
+
+      this._close = function() {
+
+        if ( this.overlay ) {
+          this.removeClass(this.overlay,'in');
+        }
+        this.removeClass(this.modal,'in');
+        this.modal.setAttribute('aria-hidden', true);
+
+        clearTimeout(self.modal.getAttribute('data-timer'));
+        this.timer = setTimeout( function() {
+          self.removeClass(document.body,'modal-open');
+          self.resize();
+          self.resetAdjustments();
+          self.resetScrollbar();
+
+          self.dismiss();
+          self.keydown();
+          self.modal.style.display = '';
+        }, self.options.duration/2);
+        this.modal.setAttribute('data-timer',self.timer);
+
+        setTimeout( function() {
+          if (!document.querySelector('.modal.in')) {  self.removeOverlay(); }
+        }, self.options.duration);
+      },
+
+      this.content = function( content ) {
+        return this.modal.querySelector('.modal-content').innerHTML = content;
+      },
+
+      this.createOverlay = function() {
+        var backdrop = document.createElement('div'), overlay = document.querySelector('.modal-backdrop');
+        backdrop.setAttribute('class','modal-backdrop fade');
+
+        if ( overlay ) {
+          this.overlay = overlay;
+        } else {
+          this.overlay = backdrop;
+          document.body.appendChild(backdrop);
+        }
+      },
+
+      this.removeOverlay = function() {
+        var overlay = document.querySelector('.modal-backdrop');
+        if ( overlay !== null && overlay !== undefined ) {
+          document.body.removeChild(overlay)
+        }
+      },
+
+      this.keydown = function() {
+        function keyHandler(e) {
+          if (self.options.keyboard && e.which == 27) {
+            self.close();
+          }
+        }
+        if (!/in/.test(this.modal.className)) {
+          document.addEventListener('keydown', keyHandler, false);
+        } else {
+          document.removeEventListener('keydown', keyHandler, false);
+        }
+      },
+
+      this.trigger = function() {
+        var triggers = document.querySelectorAll('[data-toggle="modal"]'), tgl = triggers.length, i = 0;
+        for ( i;i<tgl;i++ ) {
+          triggers[i].addEventListener('click', function(e) {
+            var b = e.target,
+            s = b.getAttribute('data-target') && b.getAttribute('data-target').replace('#','')
+            || b.getAttribute('href') && b.getAttribute('href').replace('#','');
+            if ( document.getElementById( s ) === self.modal ) {
+              self.open()
+            }
+          })
+        }
+      },
+
+      this._resize = function() {
+        var overlay = this.overlay||document.querySelector('.modal-backdrop'),
+          dim = { w: document.documentElement.clientWidth + 'px', h: document.documentElement.clientHeight + 'px' };
+        // setTimeout(function() {
+          if ( overlay !== null && /in/.test(overlay.className) ) {
+            overlay.style.height = dim.h; overlay.style.width = dim.w;
+          }
+        // }, self.options.duration/2)
+      },
+
+      this.oneResize = function() {
+        function oneResize() {
+          self._resize();
+          self.handleUpdate();
+          window.removeEventListener('resize', oneResize, false);
+        }
+        window.addEventListener('resize', oneResize, false);
+      },
+
+      this.resize = function() {
+        function resizeHandler() {
+          // setTimeout(function() {
+            self._resize();
+            self.handleUpdate();
+            // console.log('offresize')
+          // }, 100)
+        }
+
+        if (!/in/.test(this.modal.className)) {
+          window.addEventListener('resize', this.oneResize, false);
+        } else {
+          window.removeEventListener('resize', this.oneResize, false);
+        }
+
+      },
+
+      this.dismiss = function() {
+        function dismissHandler(e) {
+          if ( e.target.parentNode.getAttribute('data-dismiss') === 'modal' || e.target.getAttribute('data-dismiss') === 'modal' || e.target === self.modal ) {
+            e.preventDefault(); self.close()
+          }
+        }
+        if (!/in/.test(this.modal.className)) {
+          this.modal.addEventListener('click', dismissHandler, false);
+        } else {
+          this.modal.removeEventListener('click', dismissHandler, false);
+        }
+      },
+
+      // these following methods are used to handle overflowing modals
+
+      this.handleUpdate = function () {
+        this.adjustDialog();
+      },
+
+      this.adjustDialog = function () {
+        this.modal.style.paddingLeft = !this.bodyIsOverflowing && this.modalIsOverflowing ? this.scrollbarWidth + 'px' : '';
+        this.modal.style.paddingRight = this.bodyIsOverflowing && !this.modalIsOverflowing ? this.scrollbarWidth + 'px' : '';
+      },
+
+      this.resetAdjustments = function () {
+        this.modal.style.paddingLeft = '';
+        this.modal.style.paddingRight = '';
+      },
+
+      this.checkScrollbar = function () {
+        this.bodyIsOverflowing = document.body.clientWidth < getWindowWidth();
+        this.modalIsOverflowing = this.modal.scrollHeight > document.documentElement.clientHeight;
+        this.scrollbarWidth = this.measureScrollbar();
+      },
+
+      this.setScrollbar = function () {
+        var bodyStyle = window.getComputedStyle(document.body), bodyPad = parseInt((bodyStyle.paddingRight), 10);
+        if (this.bodyIsOverflowing) { document.body.style.paddingRight = (bodyPad + this.scrollbarWidth) + 'px'; }
+        document.body.style.paddingRight = '';
+      },
+
+      this.resetScrollbar = function () {
+        document.body.style.paddingRight = '';
+      },
+
+      this.measureScrollbar = function () { // thx walsh
+        var scrollDiv = document.createElement('div');
+        scrollDiv.className = 'modal-scrollbar-measure';
+        document.body.appendChild(scrollDiv);
+        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+        document.body.removeChild(scrollDiv);
+        return scrollbarWidth;
+      },
+
+      this.addClass = function(el,c) {
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      },
+
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+      }
+    }
+  };
+
+  // DATA API
+  var Modals = document.querySelectorAll('.modal'), mdl = Modals.length, i = 0;
+  for ( i;i<mdl;i++ ) {
+    var modal = Modals[i], options = {};
+    options.keyboard = modal.getAttribute('data-keyboard');
+    options.backdrop = modal.getAttribute('data-backdrop');
+    options.duration = modal.getAttribute('data-duration');
+    new Modal(modal,options)
+  }
+
+  return Modal;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Popover = factory();
+  }
+
+})(function(){
+
+  // POPOVER DEFINITION
+  // ===================
+  var Popover = function( element,options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.link = typeof element === 'object' ? element : document.querySelector(element);
+    this.title = this.link.getAttribute('data-title') || null;
+    this.content = this.link.getAttribute('data-content') || null;
+    this.popover = null;
+    this.options = {};
+    this.options.template = options.template ? options.template : null;
+    this.options.trigger = options.trigger ? options.trigger : 'hover';
+    this.options.animation = options.animation && options.animation !== 'true' ? options.animation : 'true';
+    this.options.placement = options.placement ? options.placement : 'top';
+    this.options.delay = parseInt(options.delay) || 100;
+    this.options.dismiss = options.dismiss && options.dismiss === 'true' ? true : false;
+    this.duration = 150;
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+    this.options.container = document.body;
+    if ( this.content || this.options.template ) this.init();
+    this.timer = 0 // the link own event timer
+    this.rect = null;
+  }
+
+  // POPOVER METHODS
+  // ================
+  Popover.prototype = {
+
+    init : function() {
+      this.actions();
+      var events = ('onmouseleave' in this.link) ? [ 'mouseenter', 'mouseleave'] : [ 'mouseover', 'mouseout' ];
+      if (this.options.trigger === 'hover') {
+        this.link.addEventListener(events[0], this.open, false);
+        if (!this.options.dismiss) { this.link.addEventListener(events[1], this.close, false); }
+      } else if (this.options.trigger === 'click') {
+        this.link.addEventListener('click', this.toggle, false);
+        if (!this.options.dismiss) { this.link.addEventListener('blur', this.close, false); }
+      } else if (this.options.trigger === 'focus') {
+        this.link.addEventListener('focus', this.toggle, false);
+        if (!this.options.dismiss) { this.link.addEventListener('blur', this.close, false);  }
+      }
+
+      if (this.options.dismiss) {  document.addEventListener('click', this.dismiss, false); }
+
+      if (!(this.isIE && this.isIE < 9) ) { // dismiss on window resize
+        window.addEventListener('resize', this.close, false );
+      }
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.toggle = function(e) {
+        if (self.popover === null) {
+          self.open()
+        } else {
+          self.close()
+        }
+      },
+      this.open = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.popover === null) {
+            self.createPopover();
+            self.stylePopover();
+            self.updatePopover()
+          }
+        }, self.options.duration );
+        self.link.setAttribute('data-timer',self.timer);
+      },
+      this.dismiss = function(e) {
+        if (self.popover && e.target === self.popover.querySelector('.close')) {
+          self.close();
+        }
+      },
+      this.close = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.popover && self.popover !== null && /in/.test(self.popover.className)) {
+            self.popover.className = self.popover.className.replace(' in','');
+            setTimeout(function() {
+              self.removePopover(); // for performance/testing reasons we can keep the popovers if we want
+            }, self.options.duration);
+          }
+
+        }, self.options.delay + self.options.duration);
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      //remove the popover
+      this.removePopover = function() {
+        this.popover && this.options.container.removeChild(this.popover);
+        this.popover = null;
+        this.timer = null
+      },
+
+      this.createPopover = function() {
+        this.popover = document.createElement('div');
+
+        if ( this.content !== null && this.options.template === null ) { //create the popover from data attributes
+
+          this.popover.setAttribute('role','tooltip');
+
+          var popoverArrow = document.createElement('div');
+          popoverArrow.setAttribute('class','arrow');
+
+          if (this.title !== null) {
+            var popoverTitle = document.createElement('h3');
+            popoverTitle.setAttribute('class','popover-title');
+
+            if (this.options.dismiss) {
+              popoverTitle.innerHTML = this.title + '<button type="button" class="close">×</button>';
+            } else {
+              popoverTitle.innerHTML = this.title;
+            }
+            this.popover.appendChild(popoverTitle);
+          }
+
+          var popoverContent = document.createElement('div');
+          popoverContent.setAttribute('class','popover-content');
+
+          this.popover.appendChild(popoverArrow);
+          this.popover.appendChild(popoverContent);
+
+          //set popover content
+          if (this.options.dismiss && this.title === null) {
+            popoverContent.innerHTML = this.content + '<button type="button" class="close">×</button>';
+          } else {
+            popoverContent.innerHTML = this.content;
+          }
+
+        } else {  // or create the popover from template
+          var template = document.createElement('div');
+          template.innerHTML = this.options.template;
+          this.popover.innerHTML = template.firstChild.innerHTML;
+        }
+
+        //append to the container
+        this.options.container.appendChild(this.popover);
+        this.popover.style.display = 'block';
+      },
+
+      this.stylePopover = function(pos) {
+        this.rect = this.getRect();
+        var placement = pos || this.options.placement;
+        var animation = this.options.animation === 'true' ? 'fade' : '';
+        this.popover.setAttribute('class','popover '+placement+' '+animation);
+
+        var linkDim = { w: this.link.offsetWidth, h: this.link.offsetHeight }; //link real dimensions
+
+        // all popover dimensions
+        var pd = this.popoverDimensions(this.popover);
+        var toolDim = { w : pd.w, h: pd.h }; //popover real dimensions
+
+
+        //window vertical and horizontal scroll
+
+        var scrollYOffset = this.getScroll().y;
+        var scrollXOffset =  this.getScroll().x;
+
+        //apply styling
+        if ( /top/.test(placement) ) { //TOP
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px'
+
+        } else if ( /bottom/.test(placement) ) { //BOTTOM
+          this.popover.style.top = this.rect.top + scrollYOffset + linkDim.h + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px';
+
+        } else if ( /left/.test(placement) ) { //LEFT
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w + 'px';
+
+        } else if ( /right/.test(placement) ) { //RIGHT
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset + linkDim.w + 'px';
+        }
+      },
+
+      this.updatePopover = function() {
+        var placement = null;
+        if ( !self.isElementInViewport(self.popover) ) {
+          placement = self.updatePlacement();
+        } else {
+          placement = self.options.placement;
+        }
+
+        self.stylePopover(placement);
+
+        self.popover.className += ' in';
+      },
+      this.updatePlacement = function() {
+        var pos = this.options.placement;
+        if ( /top/.test(pos) ) { //TOP
+          return 'bottom';
+        } else if ( /bottom/.test(pos) ) { //BOTTOM
+          return 'top';
+        } else if ( /left/.test(pos) ) { //LEFT
+          return 'right';
+        } else if ( /right/.test(pos) ) { //RIGHT
+          return 'left';
+        }
+      },
+      this.getRect = function() {
+        return this.link.getBoundingClientRect()
+      },
+      this.getScroll = function() {
+        return {
+          y : window.pageYOffset || document.documentElement.scrollTop,
+          x : window.pageXOffset || document.documentElement.scrollLeft
+        }
+      },
+      this.popoverDimensions  = function(p) {//check popover width and height
+        return {
+          w : p.offsetWidth,
+          h : p.offsetHeight
+        }
+      },
+      this.isElementInViewport = function(t) { // check if this.popover is in viewport
+        var r = t.getBoundingClientRect();
+        return (
+          r.top >= 0 &&
+          r.left >= 0 &&
+          r.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
+          r.right <= (window.innerWidth || document.documentElement.clientWidth)
+        )
+      }
+    }
+    }
+
+  // POPOVER DATA API
+  // =================
+    var Popovers = document.querySelectorAll('[data-toggle=popover]'), i = 0, ppl = Popovers.length;
+  for (i;i<ppl;i++){
+    var item = Popovers[i], options = {};
+    options.trigger = item.getAttribute('data-trigger'); // click / hover / focus
+    options.animation = item.getAttribute('data-animation'); // true / false
+    options.duration = item.getAttribute('data-duration');
+    options.placement = item.getAttribute('data-placement');
+    options.dismiss = item.getAttribute('data-dismiss');
+    options.delay = item.getAttribute('data-delay');
+    new Popover(item,options);
+  }
+
+  return Popover;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.ScrollSpy = factory();
+  }
+
+})(function(){
+
+  //SCROLLSPY DEFINITION
+  var ScrollSpy = function(element,item,options) {
+    options = options || {};
+
+    //this is the container element we spy it's elements on
+    this.element = typeof element === 'object' ? element : document.querySelector(element);
+
+    this.options = {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    // this is the UL menu component our scrollSpy object will target, configure and required by the container element
+    this.options.target = options.target ? (typeof options.target === 'object' ? options.target : document.querySelector(options.target)) : null;
+
+    //we need to determine the index of each menu item
+    this.items = this.options.target && this.options.target.getElementsByTagName('A');
+
+    this.item = item;
+    // the parent LI element
+    this.parent = this.item.parentNode;
+
+    // the upper level LI ^ UL ^ LI, this is required for dropdown menus
+    this.parentParent = this.parent.parentNode.parentNode;
+
+    this.tg = this.item.href && document.getElementById(this.item.getAttribute('href').replace('#',''));
+    this.active = false;
+    this.topEdge = 0;
+    this.bottomEdge = 0;
+
+    //determine which is the real scrollTarget
+    if ( this.element.offsetHeight < this.element.scrollHeight ) { // or this.scrollHeight()
+      this.scrollTarget = this.element;
+    } else {
+      this.scrollTarget = window;
+    }
+
+    if ( this.options.target ) {
+      this.init();
+    }
+  };
+
+  //SCROLLSPY METHODS
+  ScrollSpy.prototype = {
+    init: function () {
+      if ( this.item.getAttribute('href') && this.item.getAttribute('href').indexOf('#') > -1 ) {
+        //actions
+        this.checkEdges();
+        this.refresh()
+        this.scrollEvent();
+        if (!(this.isIE && this.isIE < 9)) { this.resizeEvent(); }
+      }
+    },
+    topLimit: function () { // the target offset
+      if ( this.scrollTarget === window ) {
+        return this.tg.getBoundingClientRect().top + this.scrollOffset() - 5
+      } else {
+        return this.tg.offsetTop;
+      }
+
+    },
+    bottomLimit: function () {
+      return this.topLimit() + this.tg.clientHeight
+    },
+    checkEdges: function () {
+      this.topEdge = this.topLimit();
+      this.bottomEdge = this.bottomLimit()
+    },
+    scrollOffset: function () {
+      if ( this.scrollTarget === window ) {
+        return window.pageYOffset || document.documentElement.scrollTop
+      } else {
+        return this.element.scrollTop
+      }
+    },
+    activate: function () {
+      if ( this.parent && this.parent.tagName === 'LI' && !/active/.test(this.parent.className) ) {
+        this.addClass(this.parent,'active');
+        if ( this.parentParent && this.parentParent.tagName === 'LI' // activate the dropdown as well
+          && /dropdown/.test(this.parentParent.className)
+          && !/active/.test(this.parentParent.className) ) { this.addClass(this.parentParent,'active'); }
+        this.active = true
+      }
+    },
+    deactivate: function () {
+      if ( this.parent && this.parent.tagName === 'LI' && /active/.test(this.parent.className) ) {
+        this.removeClass(this.parent,'active');
+        if ( this.parentParent && this.parentParent.tagName === 'LI' // deactivate the dropdown as well
+          && /dropdown/.test(this.parentParent.className)
+          && /active/.test(this.parentParent.className) ) { this.removeClass(this.parentParent,'active'); }
+        this.active = false
+      }
+    },
+    toggle: function () {
+      if ( this.active === false
+        && ( this.bottomEdge > this.scrollOffset() && this.scrollOffset() >= this.topEdge )) { //regular use, scroll just entered the element's topLimit or bottomLimit
+          this.activate();
+      } else if (this.active === true && (this.bottomEdge <= this.scrollOffset() && this.scrollOffset() < this.topEdge )) {
+        this.deactivate()
+      }
+    },
+    refresh : function () { // check edges again
+      this.deactivate();
+      this.checkEdges();
+
+      this.toggle() // If any case update values again
+    },
+    scrollEvent : function(){
+      var self = this;
+      this.scrollTarget.addEventListener('scroll', onSpyScroll, false);
+      function onSpyScroll() {
+        self.refresh();
+      }
+    },
+    resizeEvent : function(){
+      var self = this;
+      window.addEventListener('resize', onSpyResize, false);
+      function onSpyResize() {
+        self.refresh()
+      }
+    },
+    scrollHeight : function() {
+      if ( this.scrollTarget === window ) {
+        return Math.max( document.body.scrollHeight, document.body.offsetHeight,
+          document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight );
+      } else {
+        return this.element.scrollHeight
+      }
+    },
+    addClass : function(el,c) {
+      if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+    },
+    removeClass : function(el,c) {
+      if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+    }
+  };
+
+
+  //SCROLLSPY API
+  //=============
+  var scrollSpyes = document.querySelectorAll('[data-spy="scroll"]'), i = 0, ssl = scrollSpyes.length; // mostly is the document.body or a large container with many elements having id="not-null-id"
+  for (i;i<ssl;i++) {
+    var spy = scrollSpyes[i], options = {};
+    options.target = spy.getAttribute('data-target') || null;  // this must be a .nav component with id="not-null"
+    if ( options.target !== null ) {
+      var menu = options.target === 'object' ?  options.target : document.querySelector(options.target),
+        items = menu.querySelectorAll('a'), j = 0, il = items.length;
+      for (j;j<il;j++) {
+        var item = items[j];
+        if ( item.href && item.getAttribute('href') !== '#' )
+        new ScrollSpy(spy, item, options);
+      }
+    }
+  }
+
+  return ScrollSpy;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Tab = factory();
+  }
+
+})(function(){
+
+  // TAB DEFINITION
+  // ===================
+  var Tab = function( element,options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.tab = typeof element === 'object' ? element : document.querySelector(element);
+    this.tabs = this.tab.parentNode.parentNode;
+    this.dropdown = this.tabs.querySelector('.dropdown');
+    if ( /dropdown-menu/.test(this.tabs.className) ) {
+      this.dropdown = this.tabs.parentNode;
+      this.tabs = this.tabs.parentNode.parentNode;
+    }
+    this.options = options;
+
+    // default tab transition duration
+    this.duration = 150;
+    this.options.duration = (this.isIE && this.isIE < 10)  ? 0 : (options.duration || this.duration);
+    this.init();
+  }
+
+  // TAB METHODS
+  // ================
+  Tab.prototype = {
+
+    init : function() {
+      this.actions();
+      this.tab.addEventListener('click', this.action, false);
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.action = function(e) {
+        e = e || window.e; e.preventDefault();
+        var next = e.target; //the tab we clicked is now the next tab
+        var nextContent = document.getElementById(next.getAttribute('href').replace('#','')); //this is the actual object, the next tab content to activate
+        var isDropDown = new RegExp('(?:^|\\s)'+ 'dropdown-menu' +'(?!\\S)');
+
+        // get current active tab and content
+        var activeTab = self.getActiveTab();
+        var activeContent = self.getActiveContent();
+
+        if ( !/active/.test(next.parentNode.className) ) {
+          // toggle "active" class name
+          self.removeClass(activeTab,'active');
+          self.addClass(next.parentNode,'active');
+
+          // handle dropdown menu "active" class name
+          if ( self.dropdown ) {
+            if ( !(isDropDown.test(self.tab.parentNode.parentNode.className)) ) {
+              if (/active/.test(self.dropdown.className)) self.removeClass(self.dropdown,'active');
+            } else {
+              if (!/active/.test(self.dropdown.className)) self.addClass(self.dropdown,'active');
+            }
+          }
+
+          //1. hide current active content first
+          self.removeClass(activeContent,'in');
+
+          setTimeout(function() { // console.log(self)
+            //2. toggle current active content from view
+            self.removeClass(activeContent,'active');
+            self.addClass(nextContent,'active');
+          }, self.options.duration);
+          setTimeout(function() {
+            //3. show next active content
+            self.addClass(nextContent,'in');
+          }, self.options.duration*2);
+        }
+      },
+      this.addClass = function(el,c) {
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      },
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,''); }
+      },
+      this.getActiveTab = function() {
+        var activeTabs = this.tabs.querySelectorAll('.active');
+        if ( activeTabs.length === 1 && !/dropdown/.test(activeTabs[0].className) ) {
+          return activeTabs[0]
+        } else if ( activeTabs.length > 1 ) {
+          return activeTabs[activeTabs.length-1]
+        }
+      },
+      this.getActiveContent = function() {
+        var a = this.getActiveTab().getElementsByTagName('A')[0].getAttribute('href').replace('#','');
+        return a && document.getElementById(a)
+      }
+    }
+  }
+
+
+  // TAB DATA API
+  // =================
+    var Tabs = document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"), tbl = Tabs.length, i=0;
+  for ( i;i<tbl;i++ ) {
+    var tab = Tabs[i], options = {};
+    options.duration = tab.getAttribute('data-duration') && tab.getAttribute('data-duration') || false;
+    new Tab(tab,options);
+  }
+
+  return Tab;
+
+});
+
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Tooltip = factory();
+  }
+
+})(function(root){
+
+  // TOOLTIP DEFINITION
+  // ===================
+  var Tooltip = function( element,options ) {
+    options = options || {};
+
+    this.link = typeof element === 'object' ? element : document.querySelector(element);
+    this.title = this.link.getAttribute('title') || this.link.getAttribute('data-original-title');
+    this.tooltip = null;
+    this.options = {};
+    this.options.animation = options.animation && options.animation !== 'fade' ? options.animation : 'fade';
+    this.options.placement = options.placement ? options.placement : 'top';
+    this.options.delay = parseInt(options.delay) || 100;
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.duration = 150;
+    this.options.duration = this.isIE && this.isIE < 10 ? 0 : (options.duration || this.duration);
+    this.options.container = options.container || document.body;
+    if ( this.title ) this.init();
+    this.timer = 0 // the link own event timer
+  }
+
+  // TOOLTIP METHODS
+  // ================
+  Tooltip.prototype = {
+
+    init : function() {
+      this.actions();
+      this.rect = null;
+      var events = ('onmouseleave' in this.link) ? [ 'mouseenter', 'mouseleave'] : [ 'mouseover', 'mouseout' ];
+      this.link.addEventListener(events[0], this.open, false);
+      this.link.addEventListener(events[1], this.close, false);
+
+      //remove title from link
+      this.link.setAttribute('data-original-title',this.title);
+      this.link.removeAttribute('title');
+
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.open = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.tooltip === null) {
+            self.createToolTip();
+            self.styleTooltip();
+            self.updateTooltip()
+          }
+        }, self.options.duration );
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      this.close = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.tooltip && self.tooltip !== null) {
+            self.tooltip.className = self.tooltip.className.replace(' in','');
+            setTimeout(function() {
+              self.removeToolTip(); // for performance/testing reasons we can keep the tooltips if we want
+            }, self.options.duration);
+          }
+
+        }, self.options.delay + self.options.duration);
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      //remove the tooltip
+      this.removeToolTip = function() {
+        this.tooltip && this.options.container.removeChild(this.tooltip);
+        this.tooltip = null;
+      },
+
+      //create the tooltip structure
+      this.createToolTip = function() {
+        this.tooltip = document.createElement('div');
+        this.tooltip.setAttribute('role','tooltip');
+
+        var tooltipArrow = document.createElement('div');
+        tooltipArrow.setAttribute('class','tooltip-arrow');
+        var tooltipInner = document.createElement('div');
+        tooltipInner.setAttribute('class','tooltip-inner');
+
+        this.tooltip.appendChild(tooltipArrow);
+        this.tooltip.appendChild(tooltipInner);
+
+        //set tooltip content
+        tooltipInner.innerHTML = this.title;
+
+        //append to the container
+        this.options.container.appendChild(this.tooltip);
+      },
+
+      this.styleTooltip = function(pos) {
+        this.rect = this.getRect();
+        var placement = pos || this.options.placement;
+        this.tooltip.setAttribute('class','tooltip '+placement+' '+this.options.animation);
+
+        var linkDim = { w: this.link.offsetWidth, h: this.link.offsetHeight }; //link real dimensions
+
+        // all tooltip dimensions
+        var td = this.tooltipDimensions(this.tooltip);
+        var toolDim = { w : td.w, h: td.h }; //tooltip real dimensions
+
+        //window vertical and horizontal scroll
+        var scrollYOffset = this.getScroll().y;
+        var scrollXOffset =  this.getScroll().x;
+
+        //apply styling
+        if ( /top/.test(placement) ) { //TOP
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px'
+
+        } else if ( /bottom/.test(placement) ) { //BOTTOM
+          this.tooltip.style.top = this.rect.top + scrollYOffset + linkDim.h + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px';
+
+        } else if ( /left/.test(placement) ) { //LEFT
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w + 'px';
+
+        } else if ( /right/.test(placement) ) { //RIGHT
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset + linkDim.w + 'px';
+        }
+      },
+
+      this.updateTooltip = function() {
+        var placement = null;
+        if ( !this.isElementInViewport(this.tooltip) ) {
+          placement = this.updatePlacement();
+        } else {
+          placement = this.options.placement;
+        }
+
+        this.styleTooltip(placement);
+        this.tooltip.className += ' in';
+      },
+      this.updatePlacement = function() {
+        var pos = this.options.placement;
+        if ( /top/.test(pos) ) { //TOP
+          return 'bottom';
+        } else if ( /bottom/.test(pos) ) { //BOTTOM
+          return 'top';
+        } else if ( /left/.test(pos) ) { //LEFT
+          return 'right';
+        } else if ( /right/.test(pos) ) { //RIGHT
+          return 'left';
+        }
+      },
+      this.getRect = function() {
+        return this.link.getBoundingClientRect()
+      },
+      this.getScroll = function() {
+        return {
+          y : window.pageYOffset || document.documentElement.scrollTop,
+          x : window.pageXOffset || document.documentElement.scrollLeft
+        }
+      },
+      this.tooltipDimensions  = function(t) {//check tooltip width and height
+        return {
+          w : t.offsetWidth,
+          h : t.offsetHeight
+        }
+      },
+      this.isElementInViewport = function(t) { // check if this.tooltip is in viewport
+        var r = t.getBoundingClientRect();
+        return (
+          r.top >= 0 &&
+          r.left >= 0 &&
+          r.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
+          r.right <= (window.innerWidth || document.documentElement.clientWidth)
+        )
+      }
+    }
+  }
+
+  // TOOLTIP DATA API
+  // =================
+  var Tooltips = document.querySelectorAll('[data-toggle=tooltip]'), i = 0, tpl = Tooltips.length;
+  for (i;i<tpl;i++){
+    var item = Tooltips[i], options = {};
+    options.animation = item.getAttribute('data-animation');
+    options.placement = item.getAttribute('data-placement');
+    options.duration = item.getAttribute('data-duration');
+    options.delay = item.getAttribute('data-delay');
+    new Tooltip(item,options);
+  }
+
+  return Tooltip;
+
+});
Index: trunk/templates/DefaultTheme/lib/native.min.js
===================================================================
--- trunk/templates/DefaultTheme/lib/native.min.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/native.min.js	(revision 2)
@@ -0,0 +1,3 @@
+// Native Javascript for Bootstrap 3 | by dnp_theme
+!function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Affix=t()}(function(){var t=function(t,e){e=e||{},this.element="object"==typeof t?t:document.querySelector(t),this.options={},this.options.target=e.target?"object"==typeof e.target?e.target:document.querySelector(e.target):null,this.options.offsetTop=e.offsetTop&&e.offsetTop?"function"===e.offsetTop?e.offsetTop():parseInt(e.offsetTop,0):0,this.options.offsetBottom=e.offsetBottom&&e.offsetBottom?"function"===e.offsetBottom?e.offsetBottom():parseInt(e.offsetBottom,0):null,this.element&&(this.options.target||this.options.offsetTop||this.options.offsetBottom)&&this.init()};t.prototype={init:function(){this.affixed=!1,this.affixedBottom=!1,this.getPinOffsetTop=0,this.getPinOffsetBottom=null,this.checkPosition(),this.updateAffix(),this.scrollEvent(),this.resizeEvent()},processOffsetTop:function(){return null!==this.options.target?this.targetRect().top+this.scrollOffset():null!==this.options.offsetTop?this.options.offsetTop:void 0},processOffsetBottom:function(){if(null!==this.options.offsetBottom){var t=this.getMaxScroll();return t-this.elementHeight()-this.options.offsetBottom}},offsetTop:function(){return this.processOffsetTop()},offsetBottom:function(){return this.processOffsetBottom()},checkPosition:function(){this.getPinOffsetTop=this.offsetTop,this.getPinOffsetBottom=this.offsetBottom},scrollOffset:function(){return window.pageYOffset||document.documentElement.scrollTop},pinTop:function(){/affix/.test(this.element.className)||(this.element.className+=" affix",this.affixed=!0)},unPinTop:function(){/affix/.test(this.element.className)&&(this.element.className=this.element.className.replace(" affix",""),this.affixed=!1)},pinBottom:function(){/'affix-bottom'/.test(this.element.className)||(this.element.className+=" affix-bottom",this.affixedBottom=!0)},unPinBottom:function(){/'affix-bottom'/.test(this.element.className)&&(this.element.className=this.element.className.replace(" affix-bottom",""),this.affixedBottom=!1)},updatePin:function(){this.affixed===!1&&parseInt(this.offsetTop(),0)-parseInt(this.scrollOffset(),0)<0?this.pinTop():this.affixed===!0&&parseInt(this.scrollOffset(),0)<=parseInt(this.getPinOffsetTop(),0)&&this.unPinTop(),this.affixedBottom===!1&&parseInt(this.offsetBottom(),0)-parseInt(this.scrollOffset(),0)<0?this.pinBottom():this.affixedBottom===!0&&parseInt(this.scrollOffset(),0)<=parseInt(this.getPinOffsetBottom(),0)&&this.unPinBottom()},updateAffix:function(){this.unPinTop(),this.unPinBottom(),this.checkPosition(),this.updatePin()},elementHeight:function(){return this.element.offsetHeight},targetRect:function(){return this.options.target.getBoundingClientRect()},getMaxScroll:function(){return Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)},scrollEvent:function(){var t=this;window.addEventListener("scroll",function(){t.updatePin()},!1)},resizeEvent:function(){var t=this,e=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,i=e&&10>e?500:50;window.addEventListener("resize",function(){setTimeout(function(){t.updateAffix()},i)},!1)}};var e=document.querySelectorAll('[data-spy="affix"]'),i=0,o=e.length;for(i;o>i;i++){var s=e[i],n={};n.offsetTop=s.getAttribute("data-offset-top"),n.offsetBottom=s.getAttribute("data-offset-bottom"),n.target=s.getAttribute("data-target"),!s||null===n.offsetTop&&null===n.offsetBottom&&null===n.target||new t(s,n)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Alert=t()}(function(t){var e=function(t){this.btn="object"==typeof t?t:document.querySelector(t),this.alert=null,this.duration=150,this.init()};e.prototype={init:function(){this.actions(),document.addEventListener("click",this.close,!1)},actions:function(){var t=this;this.close=function(e){var i=e.target;t.btn="alert"===i.getAttribute("data-dismiss")&&"close"===i.className?i:i.parentNode,t.alert=t.btn.parentNode,null!==t.alert&&"alert"===t.btn.getAttribute("data-dismiss")&&/in/.test(t.alert.className)&&(t.alert.className=t.alert.className.replace(" in",""),setTimeout(function(){t.alert&&t.alert.parentNode.removeChild(t.alert)},t.duration))}}};var i=document.querySelectorAll('[data-dismiss="alert"]'),o=0,s=i.length;for(o;s>o;o++)new e(i[o]);return e}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Button=t()}(function(){var t=function(t,e){this.btn="object"==typeof t?t:document.querySelector(t),this.option="string"==typeof e?e:null,this.init()};t.prototype={init:function(){var t=this;this.actions(),/btn/.test(this.btn.className)&&(this.option&&"reset"!==this.option?(this.state=this.btn.getAttribute("data-"+this.option+"-text")||null,!this.btn.getAttribute("data-original-text")&&this.btn.setAttribute("data-original-text",t.btn.innerHTML.replace(/^\s+|\s+$/g,"")),this.setState()):"reset"===this.option&&this.reset()),/btn-group/.test(this.btn.className)&&this.btn.addEventListener("click",this.toggle,!1)},actions:function(){function t(t){i&&t.dispatchEvent(i)}var e=this,i="CustomEvent"in window&&window.dispatchEvent?new CustomEvent("bs.button.change"):null;this.setState=function(){"loading"===this.option&&(this.addClass(this.btn,"disabled"),this.btn.setAttribute("disabled","disabled")),this.btn.innerHTML=this.state},this.reset=function(){(/disabled/.test(e.btn.className)||"disabled"===e.btn.getAttribute("disabled"))&&(this.removeClass(this.btn,"disabled"),e.btn.removeAttribute("disabled")),e.btn.innerHTML=e.btn.getAttribute("data-original-text")},this.toggle=function(i){var o=i.target.parentNode,s="LABEL"===i.target.tagName?i.target:"LABEL"===o.tagName?o:null;if(s){var n=this,a=n.querySelectorAll(".btn"),r=a.length,l=0,c=s.getElementsByTagName("INPUT")[0];if(c&&("checkbox"===c.type&&(c.checked?(e.removeClass(s,"active"),c.getAttribute("checked"),c.removeAttribute("checked"),c.checked=!1):(e.addClass(s,"active"),c.getAttribute("checked"),c.setAttribute("checked","checked"),c.checked=!0),t(c),t(e.btn)),"radio"===c.type&&!c.checked))for(e.addClass(s,"active"),c.setAttribute("checked","checked"),c.checked=!0,t(e.btn),t(c),l;r>l;l++){var d=a[l];if(d!==s&&/active/.test(d.className)){var u=d.getElementsByTagName("INPUT")[0];e.removeClass(d,"active"),u.removeAttribute("checked"),u.checked=!1,t(u)}}}},this.addClass=function(t,e){t.classList?t.classList.add(e):(t.className+=" "+e,t.offsetWidth)},this.removeClass=function(t,e){t.classList?t.classList.remove(e):(t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,""),t.offsetWidth)}}};var e=document.querySelectorAll("[data-toggle=button]"),i=0,o=e.length;for(i;o>i;i++)new t(e[i]);var s=document.querySelectorAll("[data-toggle=buttons]"),n=0,a=s.length;for(n;a>n;n++)new t(s[n]);return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Carousel=t()}(function(){var t=function(t,e){e=e||{},this.carousel="object"==typeof t?t:document.querySelector(t),this.options={},this.options.keyboard="true"===e.keyboard?!0:!1,this.options.pause=e.pause?e.pause:"hover",this.duration=600,this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration;var i=this.carousel.querySelectorAll(".item"),o=i.length;this.controls=this.carousel.querySelectorAll(".carousel-control"),this.prev=this.controls[0],this.next=this.controls[1],this.slides=[];for(var s=0;o>s;s++)this.slides.push(i[s]);this.indicator=this.carousel.querySelector(".carousel-indicators"),this.indicators=this.carousel.querySelectorAll(".carousel-indicators li"),this.total=this.slides.length,this.timer=null,this.direction=null,this.index=0,"false"===e.interval?this.options.interval=!1:this.options.interval=parseInt(e.interval)||5e3,this.init()};t.prototype={init:function(){this.options.interval!==!1&&this.cycle(),this.options&&"hover"===this.options.pause&&this.options.interval!==!1&&this.pause(),this.actions(),this._addEventListeners()},cycle:function(t){var e=this;e.direction="left",e.timer=setInterval(function(){e.index++,e.index==e.slides.length&&(e.index=0),e._slideTo(e.index,t)},e.options.interval)},pause:function(){var t=this,e=function(){t.options.interval===!1||/paused/.test(t.carousel.className)||(t.carousel.className+=" paused",clearInterval(t.timer),t.timer=null)},i=function(){t.options.interval!==!1&&/paused/.test(t.carousel.className)&&(t.cycle(),t.carousel.className=t.carousel.className.replace(" paused",""))};t.carousel.addEventListener("mouseenter",e,!1),t.carousel.addEventListener("mouseleave",i,!1),t.carousel.addEventListener("touchstart",e,!1),t.carousel.addEventListener("touchend",i,!1)},_slideTo:function(t,e){var i=this,o=i._getActiveIndex(),s=i.direction,n="left"===s?"next":"prev",a=null,r=null;"CustomEvent"in window&&window.dispatchEvent&&(a=new CustomEvent("slid.bs.carousel"),r=new CustomEvent("slide.bs.carousel")),a&&i.carousel.dispatchEvent(a),i._removeEventListeners(),clearInterval(i.timer),i.timer=null,i._curentPage(i.indicators[t]),!/slide/.test(this.carousel.className)||this.isIE&&this.isIE<10?(i.slides[t].className+=" active",i.slides[t].offsetWidth,i.slides[o].className=i.slides[o].className.replace(" active",""),setTimeout(function(){i._addEventListeners(),i.options.interval===!1||/paused/.test(i.carousel.className)||(clearInterval(i.timer),i.cycle()),r&&i.carousel.dispatchEvent(r)},i.options.duration+100)):(i.slides[t].className+=" "+n,i.slides[t].offsetWidth,i.slides[t].className+=" "+s,i.slides[o].className+=" "+s,setTimeout(function(){i._addEventListeners(),i.slides[t].className+=" active",i.slides[o].className=i.slides[o].className.replace(" active",""),i.slides[t].className=i.slides[t].className.replace(" "+n,""),i.slides[t].className=i.slides[t].className.replace(" "+s,""),i.slides[o].className=i.slides[o].className.replace(" "+s,""),i.options.interval===!1||/paused/.test(i.carousel.className)||(clearInterval(i.timer),i.cycle()),r&&i.carousel.dispatchEvent(r)},i.options.duration+100))},_addEventListeners:function(){var t=this;t.next&&t.next.addEventListener("click",t.controlsHandler,!1),t.prev&&t.prev.addEventListener("click",t.controlsHandler,!1),t.indicator&&t.indicator.addEventListener("click",t.indicatorHandler,!1),t.options.keyboard===!0&&window.addEventListener("keydown",t.keyHandler,!1)},_removeEventListeners:function(){var t=this;t.next&&t.next.removeEventListener("click",t.controlsHandler,!1),t.prev&&t.prev.removeEventListener("click",t.controlsHandler,!1),t.indicator&&t.indicator.removeEventListener("click",t.indicatorHandler,!1),t.options.keyboard===!0&&window.removeEventListener("keydown",t.keyHandler,!1)},_getActiveIndex:function(){return this.slides.indexOf(this.carousel.querySelector(".item.active"))},_curentPage:function(t){for(var e=0;e<this.indicators.length;++e){var i=this.indicators[e];i.className=""}t&&(t.className="active")},actions:function(){var t=this;t.indicatorHandler=function(e){e.preventDefault();var i=e.target,o=t._getActiveIndex();if(!i||/active/.test(i.className)||!i.getAttribute("data-slide-to"))return!1;var s=parseInt(i.getAttribute("data-slide-to"),10);t.index=s,0==t.index?t.index=0:t.index==t.total-1&&(t.index=t.total-1),o<t.index||o===t.total-1&&0===t.index?t.direction="left":(o>t.index||0===o&&t.index===t.total-1)&&(t.direction="right"),t._slideTo(t.index,e)},t.controlsHandler=function(e){var i=e.currentTarget||e.srcElement;e.preventDefault(),i===t.next?(t.index++,t.direction="left",t.index==t.total-1?t.index=t.total-1:t.index==t.total&&(t.index=0)):i===t.prev&&(t.index--,t.direction="right",0==t.index?t.index=0:t.index<0&&(t.index=t.total-1)),t._slideTo(t.index,e)},t.keyHandler=function(e){switch(e.which){case 39:e.preventDefault(),t.index++,t.direction="left",t.index==t.total-1?t.index=t.total-1:t.index==t.total&&(t.index=0);break;case 37:e.preventDefault(),t.index--,t.direction="right",0==t.index?t.index=0:t.index<0&&(t.index=t.total-1);break;default:return}t._slideTo(t.index,e)}}};var e=document.querySelectorAll('[data-ride="carousel"]'),i=0,o=e.length;for(i;o>i;i++){var s=e[i],n={};n.interval=s.getAttribute("data-interval")&&s.getAttribute("data-interval"),n.pause=s.getAttribute("data-pause")&&s.getAttribute("data-pause")||"hover",n.keyboard=s.getAttribute("data-keyboard")&&s.getAttribute("data-keyboard")||!1,n.duration=s.getAttribute("data-duration")&&s.getAttribute("data-duration")||!1,new t(s,n)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Collapse=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.btn="object"==typeof t?t:document.querySelector(t),this.accordion=null,this.collapse=null,this.duration=300,this.options={},this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration,this.init()};t.prototype={init:function(){this.actions(),this.addEvent()},actions:function(){var t=this,e=function(t){var e=t&&t.currentStyle||window.getComputedStyle(t),i=e.borderTopWidth||0,o=/px/.test(e.marginTop)?Math.round(e.marginTop.replace("px","")):0,s=/px/.test(e.marginBottom)?Math.round(e.marginBottom.replace("px","")):0,n=/em/.test(e.marginTop)?Math.round(e.marginTop.replace("em","")*parseInt(e.fontSize)):0,a=/em/.test(e.marginBottom)?Math.round(e.marginBottom.replace("em","")*parseInt(e.fontSize)):0;return t.clientHeight+parseInt(i)+parseInt(o)+parseInt(s)+parseInt(n)+parseInt(a)};this.toggle=function(e){t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,/\bin/.test(t.collapse.className)?t.close(e):t.open(e)},this.close=function(e){e.preventDefault(),t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,t._close(t.collapse),t.removeClass(t.btn,"collapsed")},this.open=function(e){if(e.preventDefault(),t.btn=t.getTarget(e).btn,t.collapse=t.getTarget(e).collapse,t.accordion=t.btn.getAttribute("data-parent")&&t.getClosest(t.btn,t.btn.getAttribute("data-parent")),t._open(t.collapse),t.addClass(t.btn,"collapsed"),null!==t.accordion){var i=t.accordion.querySelectorAll(".collapse.in"),o=i.length,s=0;for(s;o>s;s++)i[s]!==t.collapse&&t._close(i[s])}},this._open=function(e){t.removeEvent(),t.addClass(e,"in"),e.setAttribute("aria-expanded","true"),t.addClass(e,"collapsing"),setTimeout(function(){var i=t.getMaxHeight(e);e.style.height=i+"px",e.style.overflowY="hidden"},0),setTimeout(function(){e.style.height="",e.style.overflowY="",t.removeClass(e,"collapsing"),t.addEvent()},t.options.duration)},this._close=function(e){t.removeEvent(),e.setAttribute("aria-expanded","false"),e.style.height=t.getMaxHeight(e)+"px",setTimeout(function(){e.style.height="0px",e.style.overflowY="hidden",t.addClass(e,"collapsing")},0),setTimeout(function(){t.removeClass(e,"collapsing"),t.removeClass(e,"in"),e.style.overflowY="",e.style.height="",t.addEvent()},t.options.duration)},this.getMaxHeight=function(t){for(var i=0,o=0,s=t.children.length;s>o;o++)i+=e(t.children[o]);return i},this.removeEvent=function(){this.btn.removeEventListener("click",this.toggle,!1)},this.addEvent=function(){this.btn.addEventListener("click",this.toggle,!1)},this.getTarget=function(t){var e=t.currentTarget||t.srcElement,i=e.href&&e.getAttribute("href").replace("#",""),o=e.getAttribute("data-target")&&e.getAttribute("data-target"),s=i||o&&/#/.test(o)&&o.replace("#",""),n=o&&"."===o.charAt(0)&&o,a=s&&document.getElementById(s)||n&&document.querySelector(n);return{btn:e,collapse:a}},this.getClosest=function(t,e){for(var i=e.charAt(0);t&&t!==document;t=t.parentNode){if("."===i&&void 0!==document.querySelector(e))return t;if("#"===i&&t.id===e.substr(1))return t}return!1},this.addClass=function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},this.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}}};var e=document.querySelectorAll('[data-toggle="collapse"]'),i=0,o=e.length;for(i;o>i;i++){var s=e[i],n={};n.duration=s.getAttribute("data-duration"),new t(s,n)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Dropdown=t()}(function(t){var e=function(t){this.menu="object"==typeof t?t:document.querySelector(t),this.init()};e.prototype={init:function(){this.actions(),this.menu.setAttribute("tabindex","0"),document.addEventListener("click",this.handle,!1)},actions:function(){var t=this;this.handle=function(e){for(var i=e.target||e.currentTarget,o=[],s=t.menu.parentNode.getElementsByTagName("*"),n=0,a=s.length||0;a>n;n++)a&&o.push(s[n]);if(i===t.menu||i.parentNode===t.menu)t.toggle(e);else{if(o&&o.indexOf(i)>-1)return;t.close()}/\#$/g.test(i.href)&&e.preventDefault()},this.toggle=function(t){/open/.test(this.menu.parentNode.className)?(this.close(),document.removeEventListener("keydown",this.key,!1)):(this.menu.parentNode.className+=" open",this.menu.setAttribute("aria-expanded",!0),document.addEventListener("keydown",this.key,!1))},this.key=function(e){27==e.which&&t.close()},this.close=function(){t.menu.parentNode.className=t.menu.parentNode.className.replace(" open",""),t.menu.setAttribute("aria-expanded",!1)}}};var i=document.querySelectorAll("[data-toggle=dropdown]"),o=0,s=i.length;for(o;s>o;o++)new e(i[o]);return e}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Modal=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.modal="object"==typeof t?t:document.querySelector(t),this.options={},this.options.backdrop="false"===e.backdrop?!1:!0,this.options.keyboard="false"===e.keyboard?!1:!0,this.options.content=e.content,this.duration=e.duration||300,this.options.duration=this.isIE&&this.isIE<10?0:this.duration,this.scrollbarWidth=0,this.dialog=this.modal.querySelector(".modal-dialog"),this.timer=0,this.init()},e=function(){var t=document.documentElement.getBoundingClientRect(),e=window.innerWidth||t.right-Math.abs(t.left);return e};t.prototype={init:function(){this.actions(),this.trigger(),this.options.content&&void 0!==this.options.content&&this.content(this.options.content)},actions:function(){var t=this;this.open=function(){this._open()},this.close=function(){this._close()},this._open=function(){var e=document.querySelector(".modal.in");e&&(clearTimeout(e.getAttribute("data-timer")),this.removeClass(e,"in"),setTimeout(function(){e.setAttribute("aria-hidden",!0),e.style.display=""},t.options.duration/2)),this.options.backdrop?this.createOverlay():this.overlay=null,this.overlay&&setTimeout(function(){t.addClass(t.overlay,"in")},0),clearTimeout(t.modal.getAttribute("data-timer")),this.timer=setTimeout(function(){t.modal.style.display="block",t.checkScrollbar(),t.adjustDialog(),t.setScrollbar(),t.resize(),t.dismiss(),t.keydown(),t.addClass(document.body,"modal-open"),t.addClass(t.modal,"in"),t.modal.setAttribute("aria-hidden",!1)},t.options.duration/2),this.modal.setAttribute("data-timer",t.timer)},this._close=function(){this.overlay&&this.removeClass(this.overlay,"in"),this.removeClass(this.modal,"in"),this.modal.setAttribute("aria-hidden",!0),clearTimeout(t.modal.getAttribute("data-timer")),this.timer=setTimeout(function(){t.removeClass(document.body,"modal-open"),t.resize(),t.resetAdjustments(),t.resetScrollbar(),t.dismiss(),t.keydown(),t.modal.style.display=""},t.options.duration/2),this.modal.setAttribute("data-timer",t.timer),setTimeout(function(){document.querySelector(".modal.in")||t.removeOverlay()},t.options.duration)},this.content=function(t){return this.modal.querySelector(".modal-content").innerHTML=t},this.createOverlay=function(){var t=document.createElement("div"),e=document.querySelector(".modal-backdrop");t.setAttribute("class","modal-backdrop fade"),e?this.overlay=e:(this.overlay=t,document.body.appendChild(t))},this.removeOverlay=function(){var t=document.querySelector(".modal-backdrop");null!==t&&void 0!==t&&document.body.removeChild(t)},this.keydown=function(){function e(e){t.options.keyboard&&27==e.which&&t.close()}/in/.test(this.modal.className)?document.removeEventListener("keydown",e,!1):document.addEventListener("keydown",e,!1)},this.trigger=function(){var e=document.querySelectorAll('[data-toggle="modal"]'),i=e.length,o=0;for(o;i>o;o++)e[o].addEventListener("click",function(e){var i=e.target,o=i.getAttribute("data-target")&&i.getAttribute("data-target").replace("#","")||i.getAttribute("href")&&i.getAttribute("href").replace("#","");document.getElementById(o)===t.modal&&t.open()})},this._resize=function(){var t=this.overlay||document.querySelector(".modal-backdrop"),e={w:document.documentElement.clientWidth+"px",h:document.documentElement.clientHeight+"px"};null!==t&&/in/.test(t.className)&&(t.style.height=e.h,t.style.width=e.w)},this.oneResize=function(){function e(){t._resize(),t.handleUpdate(),window.removeEventListener("resize",e,!1)}window.addEventListener("resize",e,!1)},this.resize=function(){/in/.test(this.modal.className)?window.removeEventListener("resize",this.oneResize,!1):window.addEventListener("resize",this.oneResize,!1)},this.dismiss=function(){function e(e){("modal"===e.target.parentNode.getAttribute("data-dismiss")||"modal"===e.target.getAttribute("data-dismiss")||e.target===t.modal)&&(e.preventDefault(),t.close())}/in/.test(this.modal.className)?this.modal.removeEventListener("click",e,!1):this.modal.addEventListener("click",e,!1)},this.handleUpdate=function(){this.adjustDialog()},this.adjustDialog=function(){this.modal.style.paddingLeft=!this.bodyIsOverflowing&&this.modalIsOverflowing?this.scrollbarWidth+"px":"",this.modal.style.paddingRight=this.bodyIsOverflowing&&!this.modalIsOverflowing?this.scrollbarWidth+"px":""},this.resetAdjustments=function(){this.modal.style.paddingLeft="",this.modal.style.paddingRight=""},this.checkScrollbar=function(){this.bodyIsOverflowing=document.body.clientWidth<e(),this.modalIsOverflowing=this.modal.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},this.setScrollbar=function(){var t=window.getComputedStyle(document.body),e=parseInt(t.paddingRight,10);this.bodyIsOverflowing&&(document.body.style.paddingRight=e+this.scrollbarWidth+"px")},this.resetScrollbar=function(){document.body.style.paddingRight=""},this.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),e},this.addClass=function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},this.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}}};var i=document.querySelectorAll(".modal"),o=i.length,s=0;for(s;o>s;s++){var n=i[s],a={};a.keyboard=n.getAttribute("data-keyboard"),a.backdrop=n.getAttribute("data-backdrop"),a.duration=n.getAttribute("data-duration"),new t(n,a)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Popover=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.link="object"==typeof t?t:document.querySelector(t),this.title=this.link.getAttribute("data-title")||null,this.content=this.link.getAttribute("data-content")||null,this.popover=null,this.options={},this.options.template=e.template?e.template:null,this.options.trigger=e.trigger?e.trigger:"hover",this.options.animation=e.animation&&"true"!==e.animation?e.animation:"true",this.options.placement=e.placement?e.placement:"top",this.options.delay=parseInt(e.delay)||100,this.options.dismiss=e.dismiss&&"true"===e.dismiss?!0:!1,this.duration=150,this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration,this.options.container=document.body,(this.content||this.options.template)&&this.init(),this.timer=0,this.rect=null};t.prototype={init:function(){this.actions();var t="onmouseleave"in this.link?["mouseenter","mouseleave"]:["mouseover","mouseout"];"hover"===this.options.trigger?(this.link.addEventListener(t[0],this.open,!1),this.options.dismiss||this.link.addEventListener(t[1],this.close,!1)):"click"===this.options.trigger?(this.link.addEventListener("click",this.toggle,!1),this.options.dismiss||this.link.addEventListener("blur",this.close,!1)):"focus"===this.options.trigger&&(this.link.addEventListener("focus",this.toggle,!1),this.options.dismiss||this.link.addEventListener("blur",this.close,!1)),this.options.dismiss&&document.addEventListener("click",this.dismiss,!1),this.isIE&&this.isIE<9||window.addEventListener("resize",this.close,!1)},actions:function(){var t=this;this.toggle=function(e){null===t.popover?t.open():t.close()},this.open=function(e){clearTimeout(t.link.getAttribute("data-timer")),t.timer=setTimeout(function(){null===t.popover&&(t.createPopover(),t.stylePopover(),t.updatePopover())},t.options.duration),t.link.setAttribute("data-timer",t.timer)},this.dismiss=function(e){t.popover&&e.target===t.popover.querySelector(".close")&&t.close()},this.close=function(e){clearTimeout(t.link.getAttribute("data-timer")),t.timer=setTimeout(function(){t.popover&&null!==t.popover&&/in/.test(t.popover.className)&&(t.popover.className=t.popover.className.replace(" in",""),setTimeout(function(){t.removePopover()},t.options.duration))},t.options.delay+t.options.duration),t.link.setAttribute("data-timer",t.timer)},this.removePopover=function(){this.popover&&this.options.container.removeChild(this.popover),this.popover=null,this.timer=null},this.createPopover=function(){if(this.popover=document.createElement("div"),null!==this.content&&null===this.options.template){this.popover.setAttribute("role","tooltip");var t=document.createElement("div");if(t.setAttribute("class","arrow"),null!==this.title){var e=document.createElement("h3");e.setAttribute("class","popover-title"),this.options.dismiss?e.innerHTML=this.title+'<button type="button" class="close">×</button>':e.innerHTML=this.title,this.popover.appendChild(e)}var i=document.createElement("div");i.setAttribute("class","popover-content"),this.popover.appendChild(t),this.popover.appendChild(i),this.options.dismiss&&null===this.title?i.innerHTML=this.content+'<button type="button" class="close">×</button>':i.innerHTML=this.content}else{var o=document.createElement("div");o.innerHTML=this.options.template,this.popover.innerHTML=o.firstChild.innerHTML}this.options.container.appendChild(this.popover),this.popover.style.display="block"},this.stylePopover=function(t){this.rect=this.getRect();var e=t||this.options.placement,i="true"===this.options.animation?"fade":"";this.popover.setAttribute("class","popover "+e+" "+i);var o={w:this.link.offsetWidth,h:this.link.offsetHeight},s=this.popoverDimensions(this.popover),n={w:s.w,h:s.h},a=this.getScroll().y,r=this.getScroll().x;/top/.test(e)?(this.popover.style.top=this.rect.top+a-n.h+"px",this.popover.style.left=this.rect.left+r-n.w/2+o.w/2+"px"):/bottom/.test(e)?(this.popover.style.top=this.rect.top+a+o.h+"px",this.popover.style.left=this.rect.left+r-n.w/2+o.w/2+"px"):/left/.test(e)?(this.popover.style.top=this.rect.top+a-n.h/2+o.h/2+"px",this.popover.style.left=this.rect.left+r-n.w+"px"):/right/.test(e)&&(this.popover.style.top=this.rect.top+a-n.h/2+o.h/2+"px",this.popover.style.left=this.rect.left+r+o.w+"px")},this.updatePopover=function(){var e=null;e=t.isElementInViewport(t.popover)?t.options.placement:t.updatePlacement(),t.stylePopover(e),t.popover.className+=" in"},this.updatePlacement=function(){var t=this.options.placement;return/top/.test(t)?"bottom":/bottom/.test(t)?"top":/left/.test(t)?"right":/right/.test(t)?"left":void 0},this.getRect=function(){return this.link.getBoundingClientRect()},this.getScroll=function(){return{y:window.pageYOffset||document.documentElement.scrollTop,x:window.pageXOffset||document.documentElement.scrollLeft}},this.popoverDimensions=function(t){return{w:t.offsetWidth,h:t.offsetHeight}},this.isElementInViewport=function(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}}};var e=document.querySelectorAll("[data-toggle=popover]"),i=0,o=e.length;for(i;o>i;i++){var s=e[i],n={};n.trigger=s.getAttribute("data-trigger"),n.animation=s.getAttribute("data-animation"),n.duration=s.getAttribute("data-duration"),n.placement=s.getAttribute("data-placement"),n.dismiss=s.getAttribute("data-dismiss"),n.delay=s.getAttribute("data-delay"),new t(s,n)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.ScrollSpy=t()}(function(){var t=function(t,e,i){i=i||{},this.element="object"==typeof t?t:document.querySelector(t),this.options={},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.options.target=i.target?"object"==typeof i.target?i.target:document.querySelector(i.target):null,this.items=this.options.target&&this.options.target.getElementsByTagName("A"),this.item=e,this.parent=this.item.parentNode,this.parentParent=this.parent.parentNode.parentNode,this.tg=this.item.href&&document.getElementById(this.item.getAttribute("href").replace("#","")),this.active=!1,this.topEdge=0,this.bottomEdge=0,this.element.offsetHeight<this.element.scrollHeight?this.scrollTarget=this.element:this.scrollTarget=window,this.options.target&&this.init()};t.prototype={init:function(){this.item.getAttribute("href")&&this.item.getAttribute("href").indexOf("#")>-1&&(this.checkEdges(),this.refresh(),this.scrollEvent(),this.isIE&&this.isIE<9||this.resizeEvent())},topLimit:function(){return this.scrollTarget===window?this.tg.getBoundingClientRect().top+this.scrollOffset()-5:this.tg.offsetTop},bottomLimit:function(){return this.topLimit()+this.tg.clientHeight},checkEdges:function(){this.topEdge=this.topLimit(),this.bottomEdge=this.bottomLimit()},scrollOffset:function(){return this.scrollTarget===window?window.pageYOffset||document.documentElement.scrollTop:this.element.scrollTop},activate:function(){this.parent&&"LI"===this.parent.tagName&&!/active/.test(this.parent.className)&&(this.addClass(this.parent,"active"),this.parentParent&&"LI"===this.parentParent.tagName&&/dropdown/.test(this.parentParent.className)&&!/active/.test(this.parentParent.className)&&this.addClass(this.parentParent,"active"),this.active=!0)},deactivate:function(){this.parent&&"LI"===this.parent.tagName&&/active/.test(this.parent.className)&&(this.removeClass(this.parent,"active"),this.parentParent&&"LI"===this.parentParent.tagName&&/dropdown/.test(this.parentParent.className)&&/active/.test(this.parentParent.className)&&this.removeClass(this.parentParent,"active"),this.active=!1)},toggle:function(){this.active===!1&&this.bottomEdge>this.scrollOffset()&&this.scrollOffset()>=this.topEdge?this.activate():this.active===!0&&this.bottomEdge<=this.scrollOffset()&&this.scrollOffset()<this.topEdge&&this.deactivate()},refresh:function(){this.deactivate(),this.checkEdges(),this.toggle()},scrollEvent:function(){function t(){e.refresh()}var e=this;this.scrollTarget.addEventListener("scroll",t,!1)},resizeEvent:function(){function t(){e.refresh()}var e=this;window.addEventListener("resize",t,!1)},scrollHeight:function(){return this.scrollTarget===window?Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight):this.element.scrollHeight;
+},addClass:function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},removeClass:function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}};var e=document.querySelectorAll('[data-spy="scroll"]'),i=0,o=e.length;for(i;o>i;i++){var s=e[i],n={};if(n.target=s.getAttribute("data-target")||null,null!==n.target){var a="object"===n.target?n.target:document.querySelector(n.target),r=a.querySelectorAll("a"),l=0,c=r.length;for(l;c>l;l++){var d=r[l];d.href&&"#"!==d.getAttribute("href")&&new t(s,d,n)}}}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Tab=t()}(function(){var t=function(t,e){e=e||{},this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.tab="object"==typeof t?t:document.querySelector(t),this.tabs=this.tab.parentNode.parentNode,this.dropdown=this.tabs.querySelector(".dropdown"),/dropdown-menu/.test(this.tabs.className)&&(this.dropdown=this.tabs.parentNode,this.tabs=this.tabs.parentNode.parentNode),this.options=e,this.duration=150,this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration,this.init()};t.prototype={init:function(){this.actions(),this.tab.addEventListener("click",this.action,!1)},actions:function(){var t=this;this.action=function(e){e=e||window.e,e.preventDefault();var i=e.target,o=document.getElementById(i.getAttribute("href").replace("#","")),s=new RegExp("(?:^|\\s)dropdown-menu(?!\\S)"),n=t.getActiveTab(),a=t.getActiveContent();/active/.test(i.parentNode.className)||(t.removeClass(n,"active"),t.addClass(i.parentNode,"active"),t.dropdown&&(s.test(t.tab.parentNode.parentNode.className)?/active/.test(t.dropdown.className)||t.addClass(t.dropdown,"active"):/active/.test(t.dropdown.className)&&t.removeClass(t.dropdown,"active")),t.removeClass(a,"in"),setTimeout(function(){t.removeClass(a,"active"),t.addClass(o,"active")},t.options.duration),setTimeout(function(){t.addClass(o,"in")},2*t.options.duration))},this.addClass=function(t,e){t.classList?t.classList.add(e):t.className+=" "+e},this.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"").replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},this.getActiveTab=function(){var t=this.tabs.querySelectorAll(".active");return 1!==t.length||/dropdown/.test(t[0].className)?t.length>1?t[t.length-1]:void 0:t[0]},this.getActiveContent=function(){var t=this.getActiveTab().getElementsByTagName("A")[0].getAttribute("href").replace("#","");return t&&document.getElementById(t)}}};var e=document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"),i=e.length,o=0;for(o;i>o;o++){var s=e[o],n={};n.duration=s.getAttribute("data-duration")&&s.getAttribute("data-duration")||!1,new t(s,n)}return t}),function(t){"undefined"!=typeof module&&"object"==typeof exports?"undefined"!=typeof window?module.exports=t():module.exports=t:window.Tooltip=t()}(function(t){var e=function(t,e){e=e||{},this.link="object"==typeof t?t:document.querySelector(t),this.title=this.link.getAttribute("title")||this.link.getAttribute("data-original-title"),this.tooltip=null,this.options={},this.options.animation=e.animation&&"fade"!==e.animation?e.animation:"fade",this.options.placement=e.placement?e.placement:"top",this.options.delay=parseInt(e.delay)||100,this.isIE=null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent)?parseFloat(RegExp.$1):!1,this.duration=150,this.options.duration=this.isIE&&this.isIE<10?0:e.duration||this.duration,this.options.container=e.container||document.body,this.title&&this.init(),this.timer=0};e.prototype={init:function(){this.actions(),this.rect=null;var t="onmouseleave"in this.link?["mouseenter","mouseleave"]:["mouseover","mouseout"];this.link.addEventListener(t[0],this.open,!1),this.link.addEventListener(t[1],this.close,!1),this.link.setAttribute("data-original-title",this.title),this.link.removeAttribute("title")},actions:function(){var t=this;this.open=function(e){clearTimeout(t.link.getAttribute("data-timer")),t.timer=setTimeout(function(){null===t.tooltip&&(t.createToolTip(),t.styleTooltip(),t.updateTooltip())},t.options.duration),t.link.setAttribute("data-timer",t.timer)},this.close=function(e){clearTimeout(t.link.getAttribute("data-timer")),t.timer=setTimeout(function(){t.tooltip&&null!==t.tooltip&&(t.tooltip.className=t.tooltip.className.replace(" in",""),setTimeout(function(){t.removeToolTip()},t.options.duration))},t.options.delay+t.options.duration),t.link.setAttribute("data-timer",t.timer)},this.removeToolTip=function(){this.tooltip&&this.options.container.removeChild(this.tooltip),this.tooltip=null},this.createToolTip=function(){this.tooltip=document.createElement("div"),this.tooltip.setAttribute("role","tooltip");var t=document.createElement("div");t.setAttribute("class","tooltip-arrow");var e=document.createElement("div");e.setAttribute("class","tooltip-inner"),this.tooltip.appendChild(t),this.tooltip.appendChild(e),e.innerHTML=this.title,this.options.container.appendChild(this.tooltip)},this.styleTooltip=function(t){this.rect=this.getRect();var e=t||this.options.placement;this.tooltip.setAttribute("class","tooltip "+e+" "+this.options.animation);var i={w:this.link.offsetWidth,h:this.link.offsetHeight},o=this.tooltipDimensions(this.tooltip),s={w:o.w,h:o.h},n=this.getScroll().y,a=this.getScroll().x;/top/.test(e)?(this.tooltip.style.top=this.rect.top+n-s.h+"px",this.tooltip.style.left=this.rect.left+a-s.w/2+i.w/2+"px"):/bottom/.test(e)?(this.tooltip.style.top=this.rect.top+n+i.h+"px",this.tooltip.style.left=this.rect.left+a-s.w/2+i.w/2+"px"):/left/.test(e)?(this.tooltip.style.top=this.rect.top+n-s.h/2+i.h/2+"px",this.tooltip.style.left=this.rect.left+a-s.w+"px"):/right/.test(e)&&(this.tooltip.style.top=this.rect.top+n-s.h/2+i.h/2+"px",this.tooltip.style.left=this.rect.left+a+i.w+"px")},this.updateTooltip=function(){var t=null;t=this.isElementInViewport(this.tooltip)?this.options.placement:this.updatePlacement(),this.styleTooltip(t),this.tooltip.className+=" in"},this.updatePlacement=function(){var t=this.options.placement;return/top/.test(t)?"bottom":/bottom/.test(t)?"top":/left/.test(t)?"right":/right/.test(t)?"left":void 0},this.getRect=function(){return this.link.getBoundingClientRect()},this.getScroll=function(){return{y:window.pageYOffset||document.documentElement.scrollTop,x:window.pageXOffset||document.documentElement.scrollLeft}},this.tooltipDimensions=function(t){return{w:t.offsetWidth,h:t.offsetHeight}},this.isElementInViewport=function(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}}};var i=document.querySelectorAll("[data-toggle=tooltip]"),o=0,s=i.length;for(o;s>o;o++){var n=i[o],a={};a.animation=n.getAttribute("data-animation"),a.placement=n.getAttribute("data-placement"),a.duration=n.getAttribute("data-duration"),a.delay=n.getAttribute("data-delay"),new e(n,a)}return e});
\ No newline at end of file
Index: trunk/templates/DefaultTheme/lib/popover-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/popover-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/popover-native.js	(revision 2)
@@ -0,0 +1,270 @@
+// Native Javascript for Bootstrap 3 | Popover
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Popover = factory();
+  }
+
+})(function(){
+
+  // POPOVER DEFINITION
+  // ===================
+  var Popover = function( element,options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false; 
+    this.link = typeof element === 'object' ? element : document.querySelector(element);
+    this.title = this.link.getAttribute('data-title') || null;
+    this.content = this.link.getAttribute('data-content') || null;
+    this.popover = null;
+    this.options = {};
+    this.options.template = options.template ? options.template : null;
+    this.options.trigger = options.trigger ? options.trigger : 'hover';
+    this.options.animation = options.animation && options.animation !== 'true' ? options.animation : 'true';
+    this.options.placement = options.placement ? options.placement : 'top';
+    this.options.delay = parseInt(options.delay) || 100;
+    this.options.dismiss = options.dismiss && options.dismiss === 'true' ? true : false;    
+    this.duration = 150;
+    this.options.duration = (this.isIE && this.isIE < 10) ? 0 : (options.duration || this.duration);
+    this.options.container = document.body;
+    if ( this.content || this.options.template ) this.init();
+    this.timer = 0 // the link own event timer
+    this.rect = null;
+  }
+
+  // POPOVER METHODS
+  // ================
+  Popover.prototype = {
+
+    init : function() {
+      this.actions();
+      var events = ('onmouseleave' in this.link) ? [ 'mouseenter', 'mouseleave'] : [ 'mouseover', 'mouseout' ];
+
+      if (this.options.trigger === 'hover') {
+        this.link.addEventListener(events[0], this.open, false);
+        if (!this.options.dismiss) { this.link.addEventListener(events[1], this.close, false); }
+      } else if (this.options.trigger === 'click') {
+        this.link.addEventListener('click', this.toggle, false);
+        if (!this.options.dismiss) { this.link.addEventListener('blur', this.close, false); }
+      } else if (this.options.trigger === 'focus') {
+        this.link.addEventListener('focus', this.toggle, false);
+        if (!this.options.dismiss) { this.link.addEventListener('blur', this.close, false);  }
+      }
+      
+      if (this.options.dismiss) {  document.addEventListener('click', this.dismiss, false); }
+        
+      if (!(this.isIE && this.isIE < 9) ) { // dismiss on window resize 
+        window.addEventListener('resize', this.close, false ); 
+      } 
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.toggle = function(e) {
+        if (self.popover === null) {
+          self.open()
+        } else {
+          self.close()
+        }
+      },
+      this.open = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.popover === null) {
+            self.createPopover();
+            self.stylePopover();
+            self.updatePopover()
+          }
+        }, self.options.duration );
+        self.link.setAttribute('data-timer',self.timer);
+      },
+      this.dismiss = function(e) {
+        if (self.popover && e.target === self.popover.querySelector('.close')) {          
+          self.close();
+        }
+      },
+      this.close = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.popover && self.popover !== null && /in/.test(self.popover.className)) {
+            self.popover.className = self.popover.className.replace(' in','');
+            setTimeout(function() {
+              self.removePopover(); // for performance/testing reasons we can keep the popovers if we want
+            }, self.options.duration);
+          }
+
+        }, self.options.delay + self.options.duration);
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      //remove the popover
+      this.removePopover = function() {
+        this.popover && this.options.container.removeChild(this.popover);
+        this.popover = null;
+        this.timer = null
+      },
+
+      this.createPopover = function() {
+        this.popover = document.createElement('div');
+
+        if ( this.content !== null && this.options.template === null ) { //create the popover from data attributes
+
+          this.popover.setAttribute('role','tooltip');
+
+          var popoverArrow = document.createElement('div');
+          popoverArrow.setAttribute('class','arrow');
+
+          if (this.title !== null) {
+            var popoverTitle = document.createElement('h3');
+            popoverTitle.setAttribute('class','popover-title');
+            
+            if (this.options.dismiss) {
+              popoverTitle.innerHTML = this.title + '<button type="button" class="close">×</button>';
+            } else {
+              popoverTitle.innerHTML = this.title;
+            }
+            this.popover.appendChild(popoverTitle);
+          }
+
+          var popoverContent = document.createElement('div');
+          popoverContent.setAttribute('class','popover-content');
+
+          this.popover.appendChild(popoverArrow);
+          this.popover.appendChild(popoverContent);
+
+          //set popover content
+          if (this.options.dismiss && this.title === null) {
+            popoverContent.innerHTML = this.content + '<button type="button" class="close">×</button>';
+          } else {
+            popoverContent.innerHTML = this.content;
+          }
+
+        } else {  // or create the popover from template
+          var template = document.createElement('div');
+          template.innerHTML = this.options.template;
+          this.popover.innerHTML = template.firstChild.innerHTML;
+        }
+
+        //append to the container
+        this.options.container.appendChild(this.popover);
+        this.popover.style.display = 'block';
+      },
+
+      this.stylePopover = function(pos) {
+        this.rect = this.getRect();
+        var placement = pos || this.options.placement;
+        var animation = this.options.animation === 'true' ? 'fade' : '';
+        this.popover.setAttribute('class','popover '+placement+' '+animation);
+
+        var linkDim = { w: this.link.offsetWidth, h: this.link.offsetHeight }; //link real dimensions
+
+        // all popover dimensions
+        var pd = this.popoverDimensions(this.popover);
+        var toolDim = { w : pd.w, h: pd.h }; //popover real dimensions
+
+
+        //window vertical and horizontal scroll
+
+        var scrollYOffset = this.getScroll().y;
+        var scrollXOffset =  this.getScroll().x;
+
+        //apply styling
+        if ( /top/.test(placement) ) { //TOP
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px'
+
+        } else if ( /bottom/.test(placement) ) { //BOTTOM
+          this.popover.style.top = this.rect.top + scrollYOffset + linkDim.h + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px';
+
+        } else if ( /left/.test(placement) ) { //LEFT
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset - toolDim.w + 'px';
+
+        } else if ( /right/.test(placement) ) { //RIGHT
+          this.popover.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.popover.style.left = this.rect.left + scrollXOffset + linkDim.w + 'px';
+        }
+      },
+
+      this.updatePopover = function() {
+        var placement = null;
+        if ( !self.isElementInViewport(self.popover) ) {
+          placement = self.updatePlacement();
+        } else {
+          placement = self.options.placement;
+        }
+
+        self.stylePopover(placement);
+
+        self.popover.className += ' in';
+      },
+      this.updatePlacement = function() {
+        var pos = this.options.placement;
+        if ( /top/.test(pos) ) { //TOP
+          return 'bottom';
+        } else if ( /bottom/.test(pos) ) { //BOTTOM
+          return 'top';
+        } else if ( /left/.test(pos) ) { //LEFT
+          return 'right';
+        } else if ( /right/.test(pos) ) { //RIGHT
+          return 'left';
+        }
+      },
+      this.getRect = function() {
+        return this.link.getBoundingClientRect()
+      },
+      this.getScroll = function() {
+        return {
+          y : window.pageYOffset || document.documentElement.scrollTop,
+          x : window.pageXOffset || document.documentElement.scrollLeft
+        }
+      },
+      this.popoverDimensions  = function(p) {//check popover width and height
+        return {
+          w : p.offsetWidth,
+          h : p.offsetHeight
+        }
+      },
+      this.isElementInViewport = function(t) { // check if this.popover is in viewport
+        var r = t.getBoundingClientRect();
+        return (
+          r.top >= 0 &&
+          r.left >= 0 &&
+          r.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
+          r.right <= (window.innerWidth || document.documentElement.clientWidth)
+        )
+      }
+    }
+    }
+
+  // POPOVER DATA API
+  // =================
+  var Popovers = document.querySelectorAll('[data-toggle=popover]'), i = 0, ppl = Popovers.length;
+  for (i;i<ppl;i++){  
+    var item = Popovers[i], options = {};
+    options.trigger = item.getAttribute('data-trigger'); // click / hover / focus
+    options.animation = item.getAttribute('data-animation'); // true / false
+    options.duration = item.getAttribute('data-duration');
+    options.placement = item.getAttribute('data-placement');
+    options.dismiss = item.getAttribute('data-dismiss');
+    options.delay = item.getAttribute('data-delay');
+    new Popover(item,options);
+  }
+
+  return Popover;
+
+});
Index: trunk/templates/DefaultTheme/lib/prism.js
===================================================================
--- trunk/templates/DefaultTheme/lib/prism.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/prism.js	(revision 2)
@@ -0,0 +1,6 @@
+/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=_self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var a={};for(var r in e)e.hasOwnProperty(r)&&(a[r]=t.util.clone(e[r]));return a;case"Array":return e.map&&e.map(function(e){return t.util.clone(e)})}return e}},languages:{extend:function(e,n){var a=t.util.clone(t.languages[e]);for(var r in n)a[r]=n[r];return a},insertBefore:function(e,n,a,r){r=r||t.languages;var l=r[e];if(2==arguments.length){a=arguments[1];for(var i in a)a.hasOwnProperty(i)&&(l[i]=a[i]);return l}var o={};for(var s in l)if(l.hasOwnProperty(s)){if(s==n)for(var i in a)a.hasOwnProperty(i)&&(o[i]=a[i]);o[s]=l[s]}return t.languages.DFS(t.languages,function(t,n){n===r[e]&&t!=e&&(this[t]=o)}),r[e]=o},DFS:function(e,n,a){for(var r in e)e.hasOwnProperty(r)&&(n.call(e,r,e[r],a||r),"Object"===t.util.type(e[r])?t.languages.DFS(e[r],n):"Array"===t.util.type(e[r])&&t.languages.DFS(e[r],n,r))}},plugins:{},highlightAll:function(e,n){for(var a,r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),l=0;a=r[l++];)t.highlightElement(a,e===!0,n)},highlightElement:function(n,a,r){for(var l,i,o=n;o&&!e.test(o.className);)o=o.parentNode;o&&(l=(o.className.match(e)||[,""])[1],i=t.languages[l]),n.className=n.className.replace(e,"").replace(/\s+/g," ")+" language-"+l,o=n.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+l);var s=n.textContent,u={element:n,language:l,grammar:i,code:s};if(!s||!i)return t.hooks.run("complete",u),void 0;if(t.hooks.run("before-highlight",u),a&&_self.Worker){var g=new Worker(t.filename);g.onmessage=function(e){u.highlightedCode=e.data,t.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(u.element),t.hooks.run("after-highlight",u),t.hooks.run("complete",u)},g.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else u.highlightedCode=t.highlight(u.code,u.grammar,u.language),t.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(n),t.hooks.run("after-highlight",u),t.hooks.run("complete",u)},highlight:function(e,a,r){var l=t.tokenize(e,a);return n.stringify(t.util.encode(l),r)},tokenize:function(e,n){var a=t.Token,r=[e],l=n.rest;if(l){for(var i in l)n[i]=l[i];delete n.rest}e:for(var i in n)if(n.hasOwnProperty(i)&&n[i]){var o=n[i];o="Array"===t.util.type(o)?o:[o];for(var s=0;s<o.length;++s){var u=o[s],g=u.inside,c=!!u.lookbehind,f=0,h=u.alias;u=u.pattern||u;for(var p=0;p<r.length;p++){var d=r[p];if(r.length>e.length)break e;if(!(d instanceof a)){u.lastIndex=0;var m=u.exec(d);if(m){c&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,k=y+v,b=d.slice(0,y+1),w=d.slice(k+1),P=[p,1];b&&P.push(b);var A=new a(i,g?t.tokenize(m,g):m,h);P.push(A),w&&P.push(w),Array.prototype.splice.apply(r,P)}}}}}return r},hooks:{all:{},add:function(e,n){var a=t.hooks.all;a[e]=a[e]||[],a[e].push(n)},run:function(e,n){var a=t.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(n)}}},n=t.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(n.stringify=function(e,a,r){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return n.stringify(t,a,e)}).join("");var l={type:e.type,content:n.stringify(e.content,a,r),tag:"span",classes:["token",e.type],attributes:{},language:a,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}t.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+"</"+l.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var n=JSON.parse(e.data),a=n.language,r=n.code,l=n.immediateClose;_self.postMessage(t.highlight(r,t.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var a=document.getElementsByTagName("script");return a=a[a.length-1],a&&(t.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
+Prism.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup;
+Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));
+Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};
+Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),Prism.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript;
Index: trunk/templates/DefaultTheme/lib/rebuildAccessFiles.php
===================================================================
--- trunk/templates/DefaultTheme/lib/rebuildAccessFiles.php	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/rebuildAccessFiles.php	(revision 2)
@@ -0,0 +1,143 @@
+<?php
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * @category     template
+ * @package      template_DefaultTheme
+ * @copyright    Manuela v.d.Decken <manuela@isteam.de>
+ * @author       Manuela v.d.Decken <manuela@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html
+ * @revision     $Revision$
+ * @lastmodified $Date$
+ * @since        File available since 25.02.2017
+ * @deprecated   no / since 0000/00/00
+ * @description
+ */
+// -----------------------------------------------------------------------------
+
+/**
+ * delete directory tree
+ * @param string $sBasedir  the absolute path including a trailing slash
+ * @param bool   $bRemoveBasedir  (default) true = remove base directory || false = preserve it
+ * @throws Exception
+ * @descripion deletes a tree recursively from given basedir
+ */
+    function rebuildAccessFiles_delTree($sBasedir, $bRemoveBasedir = true)
+    {
+        $aSubDirs = glob($sBasedir.'*', GLOB_MARK|GLOB_ONLYDIR);
+        foreach ($aSubDirs as $sSubDir) {
+            rebuildAccessFiles_delTree($sSubDir, true);
+        }
+        array_map(
+            function ($sFile) {
+                if (!@unlink($sFile)) { throw new Exception('delTree: Unable to delete file'); }
+            },
+            glob($sBasedir.'*')
+        );
+        if ($bRemoveBasedir) {
+            if (!rmdir($sBasedir)) { throw new Exception('delTree: Unable to remove directory'); }
+        }
+    }
+// -----------------------------------------------------------------------------
+/**
+ * check if file is an access file
+ * @param string $sFileName
+ * @return bool
+ * @throws Exception
+ */
+    function rebuildAccessFiles_isAccessFile($sFileName)
+    {
+        $bRetval = false;
+        if (file_exists($sFileName)) {
+            if (!is_readable($sFileName)) { throw new Exception('invalid filename ['.basename($sFileName).']'); }
+            if (($sFile = file_get_contents($sFileName)) !== false) {
+            // test content of this file
+                $sPattern = '/^\s*?<\?php.*?\$i?page_?id\s*=\s*[0-9]+;.*?(?:require|include)'
+                          . '(?:_once)?\s*\(\s*\'.*?index\.php\'\s?\);/siU';
+                $bRetval = (bool) preg_match($sPattern, $sFile);
+                unset($sFile);
+            }
+        }
+        return $bRetval;
+    }
+// -----------------------------------------------------------------------------
+// direct access code
+// -----------------------------------------------------------------------------
+    if (!defined('WB_PATH')) { require (dirname(dirname(dirname(__DIR__)))).'/config.php'; }
+    $aJsonRespond = [];
+    try {
+    // check autentification
+        if (!class_exists('admin', false)) { require(WB_PATH.'/framework/class.admin.php'); }
+        $admin = new admin('Pages', 'pages_settings',false);
+        if (!$admin->is_authenticated() || $admin->get_user_id() != 1) {
+            throw new Exception('Access denied');
+        }
+        $iFilesCreated = 0;
+    // Find all active Level 0 pages and delete the files and possible related directories
+        $sql = 'SELECT `link` FROM `'.TABLE_PREFIX.'pages` WHERE `level`= 0';
+        if (($oPages = $database->query($sql))) {
+            while (($aPage = $oPages->fetchRow(MYSQLI_ASSOC))) {
+            // santize path
+                $sAccessDir = str_replace('\\', '/', WB_PATH.PAGES_DIRECTORY.$aPage['link']);
+                $sAccessFile = $sAccessDir.PAGE_EXTENSION;
+            // test if file is really an access file
+                if (rebuildAccessFiles_isAccessFile($sAccessFile)) {
+                // delete the subdir and it's content if exists
+                    if (file_exists($sAccessDir.'/')) { rebuildAccessFiles_delTree($sAccessDir.'/'); }
+                // delete the current accessfile
+                    if (!@unlink($sAccessFile)) { throw new Exception('Unable to delete file'); }
+                }
+            }
+        }
+    // get all pages from database
+        $sql = 'SELECT `page_id`, `link`, `level` FROM `'.TABLE_PREFIX.'pages` '
+             . 'ORDER BY `link`';
+        if (!($oPages = $database->query($sql))) { throw new Exception('Database access failed'); }
+        while (($aPage = $oPages->fetchRow(MYSQLI_ASSOC))) {
+            $sFilePath = WB_PATH.PAGES_DIRECTORY.$aPage['link'].PAGE_EXTENSION;
+            $sDirPath = dirname($sFilePath).'/';
+            if (!is_dir($sDirPath)) {
+                // create missing directory
+                if (!mkdir($sDirPath)) { throw new Exception('Unable to create new directory'); }
+                if (OPERATING_SYSTEM == 'linux') { chmod($sDirPath, OCTAL_DIR_MODE); }
+            }
+            $iRepeats = preg_match_all('/\//', PAGES_DIRECTORY) + $aPage['level'];
+            $sIndexLocation = str_repeat('../', $iRepeats);
+            $sContent =
+                '<?php'."\n".
+                '// *** This file is generated by WebsiteBaker Ver.'.VERSION."\n".
+                '// *** Creation date: '.date('c')."\n".
+                '// *** Do not modify this file manually'."\n".
+                '// *** WB will rebuild this file from time to time!!'."\n".
+                '// *************************************************'."\n".
+                "\t".'$page_id    = '.$aPage['page_id'].';'."\n".
+                "\t".'require(\''.$sIndexLocation.'index.php\');'."\n".
+                '// *************************************************'."\n";
+            if (file_put_contents($sFilePath, $sContent) === false) {
+                throw new Exception('Unable to write new file');
+            }
+            if (OPERATING_SYSTEM == 'linux') { chmod($sFilePath, OCTAL_FILE_MODE); }
+            $iFilesCreated++;
+        }
+        $aJsonRespond['message'] = 'Rebuild done:: '.$iFilesCreated.' access files created';
+        $aJsonRespond['success'] = true;
+    } catch (Exception $e) {
+        $aJsonRespond['message'] = 'Rebuild failed:: '.$e->getMessage().'!';
+        $aJsonRespond['success'] = false;
+    }
+    // echo the json_respond to the ajax function
+    exit(json_encode($aJsonRespond));

Property changes on: trunk/templates/DefaultTheme/lib/rebuildAccessFiles.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/lib/scrollspy-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/scrollspy-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/scrollspy-native.js	(revision 2)
@@ -0,0 +1,177 @@
+// Native Javascript for Bootstrap 3 | ScrollSpy
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.ScrollSpy = factory();
+  }
+
+})(function(){
+
+  //SCROLLSPY DEFINITION
+  var ScrollSpy = function(element,item,options) {
+    options = options || {};
+    
+    //this is the container element we spy it's elements on
+    this.element = typeof element === 'object' ? element : document.querySelector(element);
+
+    this.options = {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    // this is the UL menu component our scrollSpy object will target, configure and required by the container element
+    this.options.target = options.target ? (typeof options.target === 'object' ? options.target : document.querySelector(options.target)) : null;
+
+    //we need to determine the index of each menu item
+    this.items = this.options.target && this.options.target.getElementsByTagName('A');
+
+    this.item = item;
+    // the parent LI element
+    this.parent = this.item.parentNode;
+
+    // the upper level LI ^ UL ^ LI, this is required for dropdown menus
+    this.parentParent = this.parent.parentNode.parentNode;
+
+    this.tg = this.item.href && document.getElementById(this.item.getAttribute('href').replace('#',''));
+    this.active = false;
+    this.topEdge = 0;
+    this.bottomEdge = 0;
+
+    //determine which is the real scrollTarget
+    if ( this.element.offsetHeight < this.element.scrollHeight ) { // or this.scrollHeight()
+      this.scrollTarget = this.element;
+    } else {
+      this.scrollTarget = window;
+    }
+
+    if ( this.options.target ) {
+      this.init();
+    }
+  };
+
+  //SCROLLSPY METHODS
+  ScrollSpy.prototype = {
+    init: function () {
+      if ( this.item.getAttribute('href') && this.item.getAttribute('href').indexOf('#') > -1 ) {
+        //actions
+        this.checkEdges();
+        this.refresh()
+        this.scrollEvent();
+        if (!(this.isIE && this.isIE < 9)) { this.resizeEvent(); }
+      }
+    },
+    topLimit: function () { // the target offset
+      if ( this.scrollTarget === window ) {
+        return this.tg.getBoundingClientRect().top + this.scrollOffset() - 5
+      } else {
+        return this.tg.offsetTop;
+      }
+
+    },
+    bottomLimit: function () {
+      return this.topLimit() + this.tg.clientHeight
+    },
+    checkEdges: function () {
+      this.topEdge = this.topLimit();
+      this.bottomEdge = this.bottomLimit()
+    },
+    scrollOffset: function () {
+      if ( this.scrollTarget === window ) {
+        return window.pageYOffset || document.documentElement.scrollTop
+      } else {
+        return this.element.scrollTop
+      }
+    },
+    activate: function () {
+      if ( this.parent && this.parent.tagName === 'LI' && !/active/.test(this.parent.className) ) {
+        this.addClass(this.parent,'active');
+        if ( this.parentParent && this.parentParent.tagName === 'LI' // activate the dropdown as well
+          && /dropdown/.test(this.parentParent.className)
+          && !/active/.test(this.parentParent.className) ) { this.addClass(this.parentParent,'active'); }
+        this.active = true
+      }
+    },
+    deactivate: function () {
+      if ( this.parent && this.parent.tagName === 'LI' && /active/.test(this.parent.className) ) {
+        this.removeClass(this.parent,'active');
+        if ( this.parentParent && this.parentParent.tagName === 'LI' // deactivate the dropdown as well
+          && /dropdown/.test(this.parentParent.className)
+          && /active/.test(this.parentParent.className) ) { this.removeClass(this.parentParent,'active'); }
+        this.active = false
+      }
+    },
+    toggle: function () {
+      if ( this.active === false
+        && ( this.bottomEdge > this.scrollOffset() && this.scrollOffset() >= this.topEdge )) { //regular use, scroll just entered the element's topLimit or bottomLimit
+          this.activate();
+      } else if (this.active === true && (this.bottomEdge <= this.scrollOffset() && this.scrollOffset() < this.topEdge )) {
+        this.deactivate()
+      }
+    },
+    refresh : function () { // check edges again
+      this.deactivate();
+      this.checkEdges();
+
+      this.toggle() // If any case update values again
+    },
+    scrollEvent : function(){
+      var self = this;
+      this.scrollTarget.addEventListener('scroll', onSpyScroll, false);
+      function onSpyScroll() {
+        self.refresh();
+      }
+    },
+    resizeEvent : function(){
+      var self = this;
+      window.addEventListener('resize', onSpyResize, false);
+      function onSpyResize() {
+        self.refresh()
+      }
+    },
+    scrollHeight : function() {
+      if ( this.scrollTarget === window ) {
+        return Math.max( document.body.scrollHeight, document.body.offsetHeight, 
+          document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight );
+      } else {
+        return this.element.scrollHeight
+      }
+    },
+    addClass : function(el,c) {  
+      if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+    },
+    removeClass : function(el,c) {
+      if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^\s+|\s+$/g,''); }
+    }  
+  };
+
+
+  //SCROLLSPY API
+  //=============
+  var scrollSpyes = document.querySelectorAll('[data-spy="scroll"]'), i = 0, ssl = scrollSpyes.length; // mostly is the document.body or a large container with many elements having id="not-null-id"
+  for (i;i<ssl;i++) {
+    var spy = scrollSpyes[i], options = {};
+    options.target = spy.getAttribute('data-target') || null;  // this must be a .nav component with id="not-null"  
+    if ( options.target !== null ) {
+      var menu = options.target === 'object' ?  options.target : document.querySelector(options.target),
+        items = menu.querySelectorAll('a'), j = 0, il = items.length;
+      for (j;j<il;j++) {
+        var item = items[j];
+        if ( item.href && item.getAttribute('href') !== '#' )
+        new ScrollSpy(spy, item, options);
+      }
+    }
+  }
+
+  return ScrollSpy;
+
+});
Index: trunk/templates/DefaultTheme/lib/tab-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/tab-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/tab-native.js	(revision 2)
@@ -0,0 +1,126 @@
+// Native Javascript for Bootstrap 3 | Tab
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Tab = factory();
+  }
+
+})(function(){
+
+  // TAB DEFINITION
+  // ===================
+  var Tab = function( element,options ) {
+    options = options || {};
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false; 
+    this.tab = typeof element === 'object' ? element : document.querySelector(element);
+    this.tabs = this.tab.parentNode.parentNode;
+    this.dropdown = this.tabs.querySelector('.dropdown');
+    if ( /dropdown-menu/.test(this.tabs.className) ) {
+      this.dropdown = this.tabs.parentNode;
+      this.tabs = this.tabs.parentNode.parentNode;
+    }
+    this.options = options;
+
+    // default tab transition duration
+    this.duration = 150;
+    this.options.duration = (this.isIE && this.isIE < 10)  ? 0 : (options.duration || this.duration);
+    this.init();
+  }
+
+  // TAB METHODS
+  // ================
+  Tab.prototype = {
+
+    init : function() {
+      this.actions();
+      this.tab.addEventListener('click', this.action, false);
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.action = function(e) {
+        e = e || window.e; e.preventDefault();
+        var next = e.target; //the tab we clicked is now the next tab
+        var nextContent = document.getElementById(next.getAttribute('href').replace('#','')); //this is the actual object, the next tab content to activate
+        var isDropDown = new RegExp('(?:^|\\s)'+ 'dropdown-menu' +'(?!\\S)');
+        
+        // get current active tab and content
+        var activeTab = self.getActiveTab();
+        var activeContent = self.getActiveContent();
+
+        if ( !/active/.test(next.parentNode.className) ) {
+          // toggle "active" class name
+          self.removeClass(activeTab,'active');
+          self.addClass(next.parentNode,'active');    
+  
+          // handle dropdown menu "active" class name    
+          if ( self.dropdown ) {
+            if ( !(isDropDown.test(self.tab.parentNode.parentNode.className)) ) {
+              if (/active/.test(self.dropdown.className)) self.removeClass(self.dropdown,'active');
+            } else {
+              if (!/active/.test(self.dropdown.className)) self.addClass(self.dropdown,'active');
+            }
+          }
+  
+          //1. hide current active content first
+          self.removeClass(activeContent,'in');
+          
+          setTimeout(function() { // console.log(self)
+            //2. toggle current active content from view
+            self.removeClass(activeContent,'active');
+            self.addClass(nextContent,'active');
+          }, self.options.duration);
+          setTimeout(function() {
+            //3. show next active content
+            self.addClass(nextContent,'in');
+          }, self.options.duration*2);
+        }
+      },
+      this.addClass = function(el,c) {
+        if (el.classList) { el.classList.add(c); } else { el.className += ' '+c; }
+      },
+      this.removeClass = function(el,c) {
+        if (el.classList) { el.classList.remove(c); } else { el.className = el.className.replace(c,'').replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,''); }
+      },
+      this.getActiveTab = function() {
+        var activeTabs = this.tabs.querySelectorAll('.active');
+        if ( activeTabs.length === 1 && !/dropdown/.test(activeTabs[0].className) ) {
+          return activeTabs[0]
+        } else if ( activeTabs.length > 1 ) {
+          return activeTabs[activeTabs.length-1]
+        }
+      },
+      this.getActiveContent = function() {
+        var a = this.getActiveTab().getElementsByTagName('A')[0].getAttribute('href').replace('#','');
+        return a && document.getElementById(a)
+      }
+    }
+  }
+
+
+  // TAB DATA API
+  // =================
+  var Tabs = document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"), tbl = Tabs.length, i=0;
+  for ( i;i<tbl;i++ ) {
+    var tab = Tabs[i], options = {};
+    options.duration = tab.getAttribute('data-duration') && tab.getAttribute('data-duration') || false;
+    new Tab(tab,options);
+  }
+
+  return Tab;
+
+});
Index: trunk/templates/DefaultTheme/lib/tooltip-native.js
===================================================================
--- trunk/templates/DefaultTheme/lib/tooltip-native.js	(nonexistent)
+++ trunk/templates/DefaultTheme/lib/tooltip-native.js	(revision 2)
@@ -0,0 +1,213 @@
+// Native Javascript for Bootstrap 3 | Tooltip
+// by dnp_theme
+
+(function(factory){
+
+  // CommonJS/RequireJS and "native" compatibility
+  if(typeof module !== "undefined" && typeof exports == "object") {
+    // A commonJS/RequireJS environment
+    if(typeof window != "undefined") {
+      // Window and document exist, so return the factory's return value.
+      module.exports = factory();
+    } else {
+      // Let the user give the factory a Window and Document.
+      module.exports = factory;
+    }
+  } else {
+    // Assume a traditional browser.
+    window.Tooltip = factory();
+  }
+
+})(function(root){
+
+  // TOOLTIP DEFINITION
+  // ===================
+  var Tooltip = function( element,options ) {
+    options = options || {};
+    
+    this.link = typeof element === 'object' ? element : document.querySelector(element);
+    this.title = this.link.getAttribute('title') || this.link.getAttribute('data-original-title');
+    this.tooltip = null;
+    this.options = {};
+    this.options.animation = options.animation && options.animation !== 'fade' ? options.animation : 'fade';
+    this.options.placement = options.placement ? options.placement : 'top';
+    this.options.delay = parseInt(options.delay) || 100;
+    this.isIE = (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) ? parseFloat( RegExp.$1 ) : false;
+    this.duration = 150;
+    this.options.duration = this.isIE && this.isIE < 10 ? 0 : (options.duration || this.duration);
+    this.options.container = options.container || document.body;
+    if ( this.title ) this.init();
+    this.timer = 0 // the link own event timer
+  }
+
+  // TOOLTIP METHODS
+  // ================
+  Tooltip.prototype = {
+
+    init : function() {
+      this.actions();
+      this.rect = null;
+      var events = ('onmouseleave' in this.link) ? [ 'mouseenter', 'mouseleave'] : [ 'mouseover', 'mouseout' ];
+      this.link.addEventListener(events[0], this.open, false);
+      this.link.addEventListener(events[1], this.close, false);
+      
+      //remove title from link
+      this.link.setAttribute('data-original-title',this.title);
+      this.link.removeAttribute('title');
+
+    },
+
+    actions : function() {
+      var self = this;
+
+      this.open = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.tooltip === null) {
+            self.createToolTip();
+            self.styleTooltip();
+            self.updateTooltip()
+          }
+        }, self.options.duration );
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      this.close = function(e) {
+        clearTimeout(self.link.getAttribute('data-timer'));
+        self.timer = setTimeout( function() {
+          if (self.tooltip && self.tooltip !== null) {
+            self.tooltip.className = self.tooltip.className.replace(' in','');
+            setTimeout(function() {
+              self.removeToolTip(); // for performance/testing reasons we can keep the tooltips if we want
+            }, self.options.duration);
+          }
+
+        }, self.options.delay + self.options.duration);
+        self.link.setAttribute('data-timer',self.timer);
+      },
+
+      //remove the tooltip
+      this.removeToolTip = function() {
+        this.tooltip && this.options.container.removeChild(this.tooltip);
+        this.tooltip = null;
+      },
+
+      //create the tooltip structure
+      this.createToolTip = function() {
+        this.tooltip = document.createElement('div');
+        this.tooltip.setAttribute('role','tooltip');
+
+        var tooltipArrow = document.createElement('div');
+        tooltipArrow.setAttribute('class','tooltip-arrow');
+        var tooltipInner = document.createElement('div');
+        tooltipInner.setAttribute('class','tooltip-inner');
+
+        this.tooltip.appendChild(tooltipArrow);
+        this.tooltip.appendChild(tooltipInner);
+
+        //set tooltip content
+        tooltipInner.innerHTML = this.title;
+
+        //append to the container
+        this.options.container.appendChild(this.tooltip);
+      },
+
+      this.styleTooltip = function(pos) {
+        this.rect = this.getRect();
+        var placement = pos || this.options.placement;
+        this.tooltip.setAttribute('class','tooltip '+placement+' '+this.options.animation);
+
+        var linkDim = { w: this.link.offsetWidth, h: this.link.offsetHeight }; //link real dimensions
+
+        // all tooltip dimensions
+        var td = this.tooltipDimensions(this.tooltip);
+        var toolDim = { w : td.w, h: td.h }; //tooltip real dimensions
+
+        //window vertical and horizontal scroll
+        var scrollYOffset = this.getScroll().y;
+        var scrollXOffset =  this.getScroll().x;
+
+        //apply styling
+        if ( /top/.test(placement) ) { //TOP
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px'
+
+        } else if ( /bottom/.test(placement) ) { //BOTTOM
+          this.tooltip.style.top = this.rect.top + scrollYOffset + linkDim.h + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w/2 + linkDim.w/2 + 'px';
+
+        } else if ( /left/.test(placement) ) { //LEFT
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset - toolDim.w + 'px';
+
+        } else if ( /right/.test(placement) ) { //RIGHT
+          this.tooltip.style.top = this.rect.top + scrollYOffset - toolDim.h/2 + linkDim.h/2 + 'px';
+          this.tooltip.style.left = this.rect.left + scrollXOffset + linkDim.w + 'px';
+        }
+      },
+
+      this.updateTooltip = function() {
+        var placement = null;
+        if ( !this.isElementInViewport(this.tooltip) ) {
+          placement = this.updatePlacement();
+        } else {
+          placement = this.options.placement;
+        }
+
+        this.styleTooltip(placement);
+        this.tooltip.className += ' in';
+      },
+      this.updatePlacement = function() {
+        var pos = this.options.placement;
+        if ( /top/.test(pos) ) { //TOP
+          return 'bottom';
+        } else if ( /bottom/.test(pos) ) { //BOTTOM
+          return 'top';
+        } else if ( /left/.test(pos) ) { //LEFT
+          return 'right';
+        } else if ( /right/.test(pos) ) { //RIGHT
+          return 'left';
+        }
+      },
+      this.getRect = function() {
+        return this.link.getBoundingClientRect()
+      },
+      this.getScroll = function() {
+        return {
+          y : window.pageYOffset || document.documentElement.scrollTop,
+          x : window.pageXOffset || document.documentElement.scrollLeft
+        }
+      },
+      this.tooltipDimensions  = function(t) {//check tooltip width and height
+        return {
+          w : t.offsetWidth,
+          h : t.offsetHeight
+        }
+      },
+      this.isElementInViewport = function(t) { // check if this.tooltip is in viewport
+        var r = t.getBoundingClientRect();
+        return (
+          r.top >= 0 &&
+          r.left >= 0 &&
+          r.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
+          r.right <= (window.innerWidth || document.documentElement.clientWidth)
+        )
+      }
+    }
+    }
+
+  // TOOLTIP DATA API
+  // =================
+  var Tooltips = document.querySelectorAll('[data-toggle=tooltip]'), i = 0, tpl = Tooltips.length;
+  for (i;i<tpl;i++){  
+    var item = Tooltips[i], options = {};
+    options.animation = item.getAttribute('data-animation');
+    options.placement = item.getAttribute('data-placement');
+    options.duration = item.getAttribute('data-duration');
+    options.delay = item.getAttribute('data-delay');
+    new Tooltip(item,options);
+  }
+
+  return Tooltip;
+
+});
Index: trunk/templates/DefaultTheme/media.css
===================================================================
--- trunk/templates/DefaultTheme/media.css	(nonexistent)
+++ trunk/templates/DefaultTheme/media.css	(revision 2)
@@ -0,0 +1,51 @@
+body,td,th,input,textarea {
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-size: 12px;
+	color: #000000;
+}
+body {
+	background-color: #FFFFFF;
+	margin: 0px;
+}
+hr {
+	margin: 0px;
+	color: #003366;
+	height: 1px;
+}
+a:link, a:visited, a:active {
+	color: #003366;
+	text-decoration: none;
+}
+a:hover {
+	text-decoration: none;
+	color: #336699;
+}
+input:focus, select:focus, textarea:focus {
+	background: #F1F8FD;
+}
+.content {
+	width: 100%;
+	height: 100px;
+}
+.rename {
+    background: #fff url(images/bgtitle.png) ;
+    background-repeat:repeat-x;
+	padding: 20px;
+}
+.hide {
+	display: none;
+}
+
+table.browse_header {
+	background-color: #EEE; 
+	border-bottom: 1px solid #35373a;
+}
+
+th.headline {
+	font-weight: normal;
+	font-size: 10px;
+	border-bottom: 1px solid #35373a;
+}
+
+
+
Index: trunk/templates/DefaultTheme/nav.css
===================================================================
--- trunk/templates/DefaultTheme/nav.css	(nonexistent)
+++ trunk/templates/DefaultTheme/nav.css	(revision 2)
@@ -0,0 +1,37 @@
+.FXgradOrange,
+.removeButton,
+.sf-menu li.current,
+.sf-menu li.sfHover,
+.sf-menu li:hover,
+.gridView div.priceBox:hover,
+.gridView div.titleBox:hover,
+.featuredList a:hover,
+.featuredList li.articleImage:hover + li.articleTitle >a,
+#footer .list a:hover,
+#currencies a:hover,
+#languages a:hover,
+.flyoutMenu a:hover,
+.submitButton:hover,
+.basketFlyout li a:hover,
+.dropDown ul a:hover,
+div.anythingSlider span.arrow:hover,
+.thumbNav a:hover,
+.itemSlider .prevItem:hover span.slideBg,
+.itemSlider .nextItem:hover span.slideBg,
+a.viewAllHover,
+.itemSlider li a.viewAllHover,
+.specBoxTitles a.title:hover,
+.actionLinks li:hover {
+background:#e2e2e2 none repeat scroll 0 0;
+}
+
+#navigation > li > a {
+  font-size: 13px;
+  font-weight: 700;
+  line-height: 16px;
+  text-transform: uppercase;
+}
+
+
+
+
Index: trunk/templates/DefaultTheme/templates/SectionInfoLine.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/SectionInfoLine.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/SectionInfoLine.htt	(revision 2)
@@ -0,0 +1,22 @@
+<!--
+ @version         $Id: SectionInfoLine.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div style="position: relative;" class="section-{aTarget.SectionInfoLine}">
+<form name="form_properties" action="{aTarget.sectionUrl}sections_save.php" method="post">
+  <input type="hidden" name="section_id" value="{aTarget.SectionId}" />
+  <input type="hidden" name="page_id" value="{aTarget.pageId}" />
+  <input type="hidden" name="inputSection" value="1" />
+  <a id="{aTarget.SectionIdPrefix}" ></a>
+  <div class="section-info ">
+  <b>Block:</b> {aTarget.BlockName} ( {aTarget.sectionBlock} ) <b>Modul:</b> {aTarget.sectionModule} <b>ID:</b> {aTarget.SectionId}
+<!-- BEGIN section_block -->
+   <b style="margin-left: 1.225em;">Title:</b>
+   <input type="text" name="title_{aTarget.SectionId}" value="{aTarget.title}" style="width: 30%; margin-left: 1.225em;" class="" />
+      {aTarget.FTAN}
+      <input type="submit" name="save" value="{lang.TEXT_SUBMIT}" class="section_{aTarget.SectionId} submit btn btn-default" />
+<!-- END section_block -->
+  </div>
+</form>
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/addons.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/addons.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/addons.htt	(revision 2)
@@ -0,0 +1,100 @@
+<!--
+ @version         $Id: addons.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div id="addons">
+    <div  class="title-line">
+    <table style="margin-bottom: 10px; width: 100%;">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2>{ADDONS_OVERVIEW}</h2></td>
+                <td style="float: right; line-height: 3.225em;"><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_ADVANCED}">{TEXT_ADVANCED}</a></td>
+            </tr>
+        </tbody>
+    </table>
+</div>
+
+    <ul>
+        <li>{ADDONS_LIST}</li>
+        <li>
+    <!-- BEGIN modules_block -->
+            <table class="section" style="{DISPLAY_MODULES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+                  <a href="{ADMIN_URL}/modules/index.php"> <img src="{THEME_URL}/icons/modules.png" alt="{MODULES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/modules/index.php"><span class="title">{MODULES}</span></a>
+                    {MODULES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END modules_block -->
+        </li>
+        <li>
+    <!-- BEGIN templates_block -->
+            <table class="section" style="{DISPLAY_MODULES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+                  <a href="{ADMIN_URL}/templates/index.php"> <img src="{THEME_URL}/icons/templates.png" alt="{TEMPLATES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/templates/index.php"><span class="title">{TEMPLATES}</span></a>
+                    {TEMPLATES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END templates_block -->
+        </li>
+        <li>
+    <!-- BEGIN languages_block -->
+            <table class="section" style="{DISPLAY_LANGUAGES};">
+            <tbody>
+            <tr>
+                <td class="graphic" >
+                  <a href="{ADMIN_URL}/languages/index.php"> <img src="{THEME_URL}/icons/languages.png" alt="{LANGUAGES}" /> </a>
+                </td>
+                <td class="description">
+                    <a href="{ADMIN_URL}/languages/index.php"><span class="title">{LANGUAGES}</span></a>
+                    {LANGUAGES_OVERVIEW}
+                </td>
+            </tr>
+            </tbody>
+            </table>
+    <!-- END languages_block -->
+        </li>
+    </ul>
+<!-- BEGIN reload_block -->
+    <table class="section" {DISPLAY_RELOAD} >
+        <tbody>
+        <tr>
+            <td class="graphic" ><img src="{THEME_URL}/icons/admintools.png" alt="{TXT_ADMIN_SETTINGS}" /> </td>
+            <td class="description"><span class="title">{TXT_ADMIN_SETTINGS}</span>
+                <form action="{RELOAD_URL}" method="post">
+                {FTAN}
+                    {MESSAGE_RELOAD_ADDONS}
+                    <br style="margin-bottom: 0.5em" />
+
+                    <input {DISPLAY_MODULES} type="checkbox" name="reload_modules" id="reload_modules" value="true" />
+                    <label {DISPLAY_MODULES} for="reload_modules">{MODULES}</label>
+
+                    <input {DISPLAY_TEMPLATES} type="checkbox" name="reload_templates" id="reload_templates" value="true" />
+                    <label {DISPLAY_TEMPLATES} for="reload_templates">{TEMPLATES}</label>
+
+                    <input {DISPLAY_LANGUAGES} type="checkbox" name="reload_languages" id="reload_languages" value="true" />
+                    <label {DISPLAY_LANGUAGES} for="reload_languages">{LANGUAGES}</label>
+
+                    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="submit" value="{TEXT_RELOAD}" />
+                </form>
+            </td>
+        </tr>
+        </tbody>
+    </table>
+<!-- END reload_block -->
+
+</div>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/admintools.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/admintools.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/admintools.htt	(revision 2)
@@ -0,0 +1,27 @@
+<!--
+ @version         $Id: admintools.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<h2>{HEADING_ADMINISTRATION_TOOLS} </h2>
+<div id="admintools">
+    <ul>
+    <!-- BEGIN tool_list_block -->
+    <li>
+        <table class="section" >
+        <tbody>
+        <tr>
+            <td class="graphic" >
+                <a class= "title" href="{ADMIN_URL}/admintools/tool.php?tool={TOOL_DIR}"><img src="{TOOL_ICON}" alt="{TOOL_NAME}" /></a>
+            </td>
+            <td class="description">
+                <a href="{ADMIN_URL}/admintools/tool.php?tool={TOOL_DIR}"><span class="title">{TOOL_NAME}</span></a><span>{TOOL_DESCRIPTION}</span>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </li>
+    <!-- END tool_list_block -->
+    </ul>
+    {TOOL_LIST}
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/call_dialog.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/call_dialog.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/call_dialog.htt	(revision 2)
@@ -0,0 +1,33 @@
+<!--
+ @version         $Id: call_dialog.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div id="openModal" class="modal-Dialog" draggable="true">
+    <div>
+        <span id="customConfirm" style="display: block;">
+            <button class="close" name="cancel" type="button" onclick="window.location='{ADMIN_URL}';">X</button>
+            <header class="modal-label"><h2>{TITLE_INFO}</h2></header>
+            <div class="modal-inner">
+                <iframe  src="{INFO_URL}" style="width: 100%;"></iframe>
+                <div class="footer">
+                    <button name="cancel btn btn-danger" class="cancel" type="button" onclick="window.location='{ADMIN_URL}';">{CANCEL}</button>
+                </div>
+            </div>
+            <footer class="modal-label">
+<!--
+            <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+            <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+-->
+            </footer>
+        </span>
+    </div>
+</div>
+<script >
+<!--
+domReady(function() {
+    LoadOnFly('head', "{sAddonThemeUrl}/css/dialogBox.css");
+    LoadOnFly('head', "{sAddonThemeUrl}/css/customAlert.css");
+});
+-->
+</script>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/error.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/error.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/error.htt	(revision 2)
@@ -0,0 +1,9 @@
+<!--
+ @version         $Id: error.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div class="error-box rounded" style="margin: 1.225em auto;">
+    <p>{MESSAGE}</p>
+<input type="button" class="btn btn-default" name="submit" value="{BACK}" onclick="window.location = '{LINK}';" />
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/footer.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/footer.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/footer.htt	(revision 2)
@@ -0,0 +1,106 @@
+<!--
+ @version         $Id: footer.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN footer_block -->
+            </div>
+        </div>
+    </div>
+
+<table style="padding: 10px 0px 10px 0px; width: 100%;">
+<tr>
+    <td style="font-size: 12px; text-align:center;">
+      <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+      <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+      <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+      <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+    </td>
+</tr>
+</table>
+
+<script src="{THEME_URL}/js/jquery-plugins.js" type="text/javascript"></script>
+<!-- highlighter -->
+<script type="text/javascript" src="{THEME_URL}/lib/prism.js" ></script>
+<script type="text/javascript" src="{THEME_URL}/lib/native.js"></script>
+<script type="text/javascript">
+  var w = window.innerWidth;
+  var h = window.innerHeight;
+  function autoResize(i) {
+   var iframeHeight=
+   (i).contentWindow.document.body.scrollHeight;
+   (i).height=iframeHeight+20;
+  }
+// we need a blank modal to fill up
+  var modalFrame = document.getElementById('myModal');
+//console.info(modalFrame);
+// we grab the button trigger by it's ID
+  var infoModal = document.getElementById('custom-modal-template');
+      infoModal.addEventListener('click', function() {
+  modalFrame.style.display = "block";
+//template content for modal example 2, should work for the third button as well
+  modal2 = new Modal(modalFrame, {
+      content:
+      '<span id="customConfirm" style="display: block;">'
+      +'<div class="modal-header" style="background-color: #bbb; box-shadow: 0px 1px 15px #999 inset; color: #fff; width: 100%; color: #fff; ">'
+      +'<button type="button" class="close" data-dismiss="modal" aria-label="close btn btn-danger"><span aria-hidden="true">X</span></button>'
+      +'<h4 class="modal-title" id="gridModalLabel">WebsiteBaker Systeminfo</h4>'
+      +'</div>'
+      +'<div class="modal-body">'
+      + '<iframe src="{THEME_URL}/wb_info.php" onload="autoResize(this)" height="100%" width="100"></iframe>'
+      +'</div>'
+      +'<div class="modal-footer">'
+      +'<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>'
+      +'</div>'
+      +'</span>'});
+console.log(modalFrame);
+// Get the <span> element that closes the modal
+var closerBox = document.getElementById('myModal');
+var span = document.getElementsByClassName("close")[0];
+
+// When the user clicks on <close button> (x), close the modal
+closerBox.onclick = function() {
+    modalFrame.style.display = "none";
+}
+// When the user clicks on <span> (x), close the modal
+span.onclick = function() {
+    modalError.style.display = "none";
+}
+
+});
+/*-----------------------------------------------------------------------*/
+</script>
+<script type="text/javascript">
+// Get the error modal
+var modalError = document.getElementById('errorModal');
+//console.info(modalError);
+
+// Get the button that opens the modal
+var btnError = document.getElementById("delete-error-log");
+// When the user clicks the button, open the modal
+btnError.onclick = function() {
+    modalError.style.display = "block";
+    loadErrorFile();
+}
+// Get the <span> element that closes the modal
+var closeErrorBox = document.getElementById('closeErrorBox');
+var span = document.getElementsByClassName("close")[0];
+
+// When the user clicks on <close button> (x), close the modal
+closeErrorBox.onclick = function() {
+    modalError.style.display = "none";
+}
+// When the user clicks on <span> (x), close the modal
+span.onclick = function() {
+    modalError.style.display = "none";
+}
+// When the user clicks anywhere outside of the modal, close it
+window.onclick = function(event) {
+    if (event.target === modalError) {
+        modalError.style.display = "none";
+    }
+}
+</script>
+
+{BACKEND_BODY_MODULE_JS}
+</body>
+</html>
+<!-- END footer_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/groups.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/groups.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/groups.htt	(revision 2)
@@ -0,0 +1,31 @@
+<!--
+ @version         $Id: groups.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<form name="groups" action="groups.php" method="post">
+ {FTAN}
+    <table style="margin-bottom:10px; width: 100%; border-collapse: collapse; white-space-collapsing: collapse; ">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2 class="page_titel">{HEADING_MODIFY_DELETE_GROUP}</h2></td>
+                <td style="float: right; line-height: 3.225em;" >
+                <!-- BEGIN manage_users_block -->
+                    <span><a class="btn btn-default btn-large w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" href="{ADMIN_URL}/users/index.php">{TEXT_MANAGE_USERS}</a></span>
+                <!-- END manage_users_block -->
+                </td>
+             </tr>
+        </tbody>
+    </table>
+    <button type="button" name="status" title="{TEXT_GROUPS}" style="width: 1.825em; " value="{USER_STATUS}"  class="status {DISPLAY_MODIFY}" >&nbsp;</button>
+    <select name="group_id" style="width: 41.855em;">
+        <!-- BEGIN list_block -->
+        <option value="{VALUE}">
+        {NAME}
+        </option>
+        <!-- END list_block -->
+    </select>
+    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4 {DISPLAY_MODIFY}" type="submit" name="modify" value="{TEXT_MODIFY}" />
+    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4 {DISPLAY_DELETE}" type="submit" name="delete" value="{TEXT_DELETE}" onclick="return confirm('{CONFIRM_DELETE}');" >
+</form>
+<h2 style="margin-top: 1.825em;" class="{DISPLAY_ADD}">&nbsp;{HEADING_ADD_GROUP}</h2>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/groups_form.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/groups_form.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/groups_form.htt	(revision 2)
@@ -0,0 +1,406 @@
+<!--
+ @version         $Id: groups_form.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<form name="group_add" action="{ACTION_URL}" method="post" class="{DISPLAY_ADD}">
+    <input type="hidden" name="advanced" value="{ADVANCED_VALUE}" />
+    <input type="hidden" name="group_id" value="{GROUP_ID}" />
+    {FTAN}
+    <h2 style="{DISPLAY_EXTRA}">&nbsp;{HEADING_MODIFY_GROUP}</h2>
+    <div class="block-outer" style="padding: 0.825em;">
+        <div class="access-wrapper" style="width: 100%; margin: auto 2.225em;" >
+                <div>{DEBUG_MSG}</div>
+                <table style="margin-bottom:10px; width: 43.5%; border-collapse: collapse; white-space-collapsing: collapse; ">
+                <tr>
+                    <td style=" text-align: right; padding-right: 0.825em;"><h5 >{TEXT_NAME}:</h5></td>
+                    <td>
+                        <input type="text" name="group_name" maxlength="255" value="{GROUP_NAME}" style="width:98%" />
+                    </td>
+                </tr>
+                </table>
+    <!-- BEGIN groups_basic_block -->
+                <input type="hidden" name="advanced_extended" value="0" />
+                <table class="groups_basic" style="{DISPLAY_BASIC} width: 100%; ">
+                    <caption style="text-align: left;">
+                        <div class="w3-container">
+                            <ul class="w3-navbar">
+                                <li class="w3-quarter"><b style="font-size: 1.225em; float: left; color: #6E6E6E;">{TEXT_SYSTEM_PERMISSIONS}</b></li>
+                                <li class="w3-quarter"><button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="reset_system" value="1">{TEXT_RESET}</button></li>
+                            </ul>
+                        </div>
+                    </caption>
+                    <thead>
+                    <tr>
+                        <th style="width: 5.525em;"></th>
+                        <th style="width: 8.225em;"></th>
+                        <th style="width: 8.225em;"></th>
+                        <th style="width: 8.225em;"></th>
+                        <th style="width: 8.225em;"></th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                        <tr>
+                            <td >&nbsp;</td>
+                            <td>
+                                <input type="checkbox" name="pages_view" id="pages_view" value="1" {pages_checked} />
+                                <label class="w3-validate" for="pages_view">{SECTION_PAGES}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="media_view" id="media_view" value="1" {media_checked} />
+                                <label class="w3-validate" for="media_view">{SECTION_MEDIA}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="modules_view" id="modules_view" value="1" {modules_checked} />
+                                <label class="w3-validate" for="modules_view">{SECTION_MODULES}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="templates_view" id="templates_view" value="1" {templates_checked} />
+                                <label class="w3-validate" for="templates_view">{SECTION_TEMPLATES}</label>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td >&nbsp;</td>
+                            <td>
+                                <input type="checkbox" name="languages_view" id="languages_view" value="1" {languages_checked} />
+                                <label class="w3-validate" for="languages_view">{SECTION_LANGUAGES}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="settings_basic" id="settings_basic" value="1" {settings_checked} />
+                                <label for="settings_basic">{SECTION_SETTINGS}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="users_view" id="users_view" value="1" {users_checked} />
+                                <label class="wb-validate" for="users_view">{SECTION_USERS}</label>
+                            </td>
+                            <td>
+                                <input type="checkbox" name="groups_view" id="groups_view" value="1" {groups_checked} />
+                                <label class="w3-validate" for="groups_view">{SECTION_GROUPS}</label>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td >&nbsp;</td>
+                            <td colspan="4">
+                                <input type="checkbox" name="admintools" id="admintools" value="1" {admintools_checked} />
+                                <label for="admintools">{SECTION_ADMINTOOLS}</label>
+                            </td>
+                        </tr>
+                    </tbody>
+              </table>
+    <!-- END groups_basic_block -->
+    <!-- BEGIN groups_extended_block -->
+              <input type="hidden" name="advanced_extended" value="1" />
+              <table class="groups_adv" style="width: 100%; border-collapse: collapse;">
+                  <caption style="text-align: left;">
+                    <div class="w3-container">
+                        <ul class="w3-navbar">
+                        <li class="w3-quarter"><b style="font-size: 1.225em;  color: #6E6E6E;">{TEXT_SYSTEM_PERMISSIONS}</b></li>
+                        <li class="w3-quarter"><button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="reset_system" value="1">{TEXT_RESET}</button></li>
+                        </ul>
+                    </div>
+                  </caption>
+                  <thead>
+                      <tr>
+                          <th style="width: 9.225em;"></th>
+                          <th style="width: 8.225em;"></th>
+                          <th style="width: 0.225em;"></th>
+                          <th style="width: 8.225em;"></th>
+                          <th style="width: 0.225em;"></th>
+                          <th style="width: 8.225em;"></th>
+                          <th style="width: 0.225em;"></th>
+                          <th style="width: 8.225em;"></th>
+                          <th style="width: 0.225em;"></th>
+                          <th style="width: 8.225em;"></th>
+                          <th style="width: 0.225em;"></th>
+                      </tr>
+                  </thead>
+                  <tbody>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_PAGES}</span></td>
+                      </tr>
+                      <tr>
+                          <td>&nbsp;</td>
+                          <td><input name="pages_view" id="pages_view" type="checkbox" value="1" {pages_view_checked} />
+                          <label class="w3-validate" for="pages_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="pages_add" id="pages_add" type="checkbox" value="1" {pages_add_checked} />
+                          <label class="w3-validate" for="pages_add">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="pages_add_l0" id="pages_add_l0" type="checkbox" value="1" {pages_add_l0_checked} />
+                          <label class="w3-validate" for="pages_add_l0">{TEXT_LEVEL} 0</label></td>
+                          <td ></td>
+                          <td><input name="pages_settings" id="pages_settings" type="checkbox" value="1" {pages_settings_checked} />
+                          <label class="w3-validate" for="pages_settings">{TEXT_MODIFY_SETTINGS}</label></td>
+                          <td></td>
+                          <td><input name="pages_modify" id="pages_modify" type="checkbox" value="1" {pages_modify_checked} />
+                          <label class="w3-validate" for="pages_modify">{TEXT_MODIFY_CONTENT}</label></td>
+                          <td></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="pages_intro" id="pages_intro" type="checkbox" value="1" {pages_intro_checked} />
+                          <label class="w3-validate" for="pages_intro">{HEADING_MODIFY_INTRO_PAGE}</label></td>
+                          <td></td>
+                          <td><input name="pages_delete" id="pages_delete" type="checkbox" value="1" {pages_delete_checked} />
+                          <label class="w3-validate" for="pages_delete">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="6">&nbsp;</td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_MEDIA}</span></td>
+                      </tr>
+                      <tr>
+                          <td>&nbsp;</td>
+                          <td><input name="media_view" id="media_view" type="checkbox" value="1" {media_view_checked} />
+                          <label class="w3-validate" for="media_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="media_upload" id="media_upload" type="checkbox" value="1" {media_upload_checked} />
+                          <label class="w3-validate" for="media_upload">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="media_rename" id="media_rename" type="checkbox" value="1" {media_rename_checked} />
+                          <label class="w3-validate" for="media_rename">{TEXT_RENAME}</label></td>
+                          <td></td>
+                          <td><input name="media_create" id="media_create" type="checkbox" value="1" {media_create_checked} />
+                          <label class="w3-validate" for="media_create">{TEXT_CREATE_FOLDER}</label></td>
+                          <td></td>
+                          <td><input name="media_delete" id="media_delete" type="checkbox" value="1" {media_delete_checked} />
+                          <label class="w3-validate" for="media_delete">{TEXT_DELETE}</label></td>
+                          <td></td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td>&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_MODULES}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="modules_view" id="modules_view" type="checkbox" value="1" {modules_view_checked} /><label class="w3-validate" for="modules_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="modules_install" id="modules_install" type="checkbox" value="1" {modules_install_checked} /><label class="w3-validate" for="modules_install">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="modules_uninstall" id="modules_uninstall" type="checkbox" value="1" {modules_uninstall_checked} /><label class="w3-validate" for="modules_uninstall">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="4">&nbsp;</td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_TEMPLATES}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="templates_view" id="templates_view" type="checkbox" value="1" {templates_view_checked} /><label class="w3-validate" for="templates_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="templates_install" id="templates_install" type="checkbox" value="1" {templates_install_checked} /><label class="w3-validate" for="templates_install">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="templates_uninstall" id="templates_uninstall" type="checkbox" value="1" {templates_uninstall_checked} /><label class="w3-validate" for="templates_uninstall">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="4">&nbsp;</td>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_LANGUAGES}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td>
+                          <input name="languages_view" id="languages_view" type="checkbox" value="1" {languages_view_checked} />
+                          <label class="w3-validate" for="languages_view">{TEXT_VIEW}</label>
+                          </td>
+                          <td></td>
+                          <td><input name="languages_install" id="languages_install" type="checkbox" value="1" {languages_install_checked} /><label class="w3-validate" for="languages_install">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="languages_uninstall" id="languages_uninstall" type="checkbox" value="1" {languages_uninstall_checked} /><label class="w3-validate" for="languages_uninstall">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="4">&nbsp;</td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_SETTINGS}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="settings_basic" id="settings_basic" type="checkbox" value="1" {settings_basic_checked} /><label class="w3-validate" for="settings_basic">{TEXT_BASIC}</label></td>
+                          <td></td>
+                          <td><input name="settings_advanced" id="settings_advanced" type="checkbox" value="1" {settings_advanced_checked} /><label class="w3-validate" for="settings_advanced">{TEXT_ADVANCED}</label></td>
+                          <td></td>
+                          <td colspan="6">&nbsp;</td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em;  color: #247391;">{SECTION_ADMINTOOLS}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="admintools" id="admintools_settings" type="checkbox" value="1" {admintools_checked} />
+                          <label class="w3-validate" for="admintools_settings">{TEXT_MODIFY_SETTINGS}</label></td>
+                          <td></td>
+                          <td colspan="8">&nbsp;</td>
+                      </tr>
+                      <tr style="line-height: 2.925em;">
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_USERS}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="users_view" id="users_view" type="checkbox" value="1" {users_view_checked} />
+                          <label class="w3-validate" for="users_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="users_add" id="users_add" type="checkbox" value="1" {users_add_checked} /><label class="w3-validate" for="users_add">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="users_modify" id="users_modify" type="checkbox" value="1" {users_modify_checked} /><label class="w3-validate" for="users_modify">{TEXT_MODIFY}</label></td>
+                          <td></td>
+                          <td><input name="users_delete" id="users_delete" type="checkbox" value="1" {users_delete_checked} /><label class="w3-validate" for="users_delete">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="2">&nbsp;</td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td colspan="10"><span style="font-size: 1.325em; color: #247391;">{SECTION_GROUPS}</span></td>
+                      </tr>
+                      <tr>
+                          <td >&nbsp;</td>
+                          <td><input name="groups_view" id="groups_view" type="checkbox" value="1" {groups_view_checked} />
+                          <label class="w3-validate" for="groups_view">{TEXT_VIEW}</label></td>
+                          <td></td>
+                          <td><input name="groups_add" id="groups_add" type="checkbox" value="1" {groups_add_checked} /><label class="w3-validate" for="groups_add">{TEXT_ADD}</label></td>
+                          <td></td>
+                          <td><input name="groups_modify" id="groups_modify" type="checkbox" value="1" {groups_modify_checked} /><label class="w3-validate" for="groups_modify">{TEXT_MODIFY}</label></td>
+                          <td></td>
+                          <td><input name="groups_delete" id="groups_delete" type="checkbox" value="1" {groups_delete_checked} /><label class="w3-validate" for="groups_delete">{TEXT_DELETE}</label></td>
+                          <td></td>
+                          <td colspan="2">&nbsp;</td>
+                      </tr>
+                      <tr style="width:100%; line-height: ;: 1.225em auto;">
+                          <td colspan="11">&nbsp;</td>
+                      </tr>
+                  </tbody>
+              </table>
+              <table style="padding-top: 15px; padding-bottom: 5px;width: 100%; border-collapse: collapse;">
+                  <tbody>
+                      <tr style="width:100%; line-height: 1.225em;">
+                          <td colspan="3">&nbsp;</td>
+                      </tr>
+                      <tr style="text-align:center;width:100%;">
+                          <td style="text-align:right; padding: 15px;">
+                              <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="save" value="{SUBMIT_TITLE}" />
+                          </td>
+                          <td style="text-align:left;">
+                              <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="reset" name="reset" value="{TEXT_RESET}" />
+                          </td>
+                          <td>
+                              <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="cancel" value="{TEXT_CANCEL}" />
+                          </td>
+                      </tr>
+                      <tr style="width:100%; line-height: ;: 1.225em auto;">
+                          <td colspan="3">&nbsp;</td>
+                      </tr>
+                  </tbody>
+              </table>
+    <!-- END groups_extended_block -->
+        </div>
+    </div>
+<div class="block-outer" style="padding: 0.825em;">
+    <div class="access-wrapper" style="width: 100%; margin: auto 2.225em;" >
+        <table style="width: 40%; padding-top: 15px; padding-bottom: 5px; border-collapse: collapse; float: left;">
+            <tbody>
+                <tr>
+                    <td colspan="2">
+                      <div class="w3-container">
+                      <ul class="w3-navbar">
+                      <li class="w3-half"><b style="font-size: 1.225em; color: #6E6E6E;">{SECTION_MODULES}:</b></li>
+                      <li class="w3-quarter"><button  class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="reset_modules" value="1">{TEXT_RESET}</button></li>
+                      </ul>
+                      </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td style=" padding-left: 11.225em;">&nbsp;</td>
+                    <td>
+                        <ul style="margin: 0; padding: 0; list-style: none; line-height: 1.9;">
+                            <!-- BEGIN module_list_block -->
+                                <!-- BEGIN module_group_block -->
+                                <li class="group-title">
+                                    <span style="font-size: 1.225em; color: #247391;">{OPTGROUP}</span>
+                                </li>
+                                <!-- END module_group_block -->
+                                <li>
+                                    <input type="checkbox" name="module_permissions[]" id="m_{VALUE}" value="{VALUE}" {CHECKED} />
+                                    <label for="m_{VALUE}">{NAME}</label>
+                                </li>
+                            <!-- END module_list_block -->
+                        </ul>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+
+        <table style="padding-top: 15px; padding-bottom: 5px; width: 50%; border-collapse: collapse;float: right;">
+            <tbody>
+                <tr>
+                    <td colspan="2">
+                      <div class="w3-container">
+                      <ul class="w3-navbar">
+                      <li class="w3-half"><b style="font-size: 1.225em; color: #6E6E6E;">{SECTION_TEMPLATES}:</b></li>
+                      <li class="w3-quarter"><button  class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="reset_templates" value="1">{TEXT_RESET}</button></li>
+                      </ul>
+                     </div>
+                    </td>
+                </tr>
+                <tr>
+                    <td style=" padding-left: 11.225em;">&nbsp;</td>
+                    <td>
+                        <ul style="margin: 0; padding: 0; list-style: none; line-height: 1.9;">
+                            <!-- BEGIN template_list_block -->
+                                <!-- BEGIN template_group_block -->
+                                <li class="group-title">
+                                    <span style="font-size: 1.225em; color: #247391;">{OPTGROUP}</span>
+                                </li>
+                                <!-- END template_group_block -->
+                            <li>
+                                <input type="checkbox" name="template_permissions[]" id="t_{VALUE}" value="{VALUE}" {CHECKED} />
+                                <label for="t_{VALUE}">{NAME}</label>
+                            </li>
+                            <!-- END template_list_block -->
+                        </ul>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+        <table style="padding-top: 15px; padding-bottom: 5px;width: 100%; border-collapse: collapse;">
+            <tbody>
+                <tr style="width:100%; line-height: ;: 1.225em auto;">
+                    <td colspan="3">&nbsp;</td>
+                </tr>
+                <tr style="text-align:center;width:100%;">
+                    <td  style="text-align:right; padding: 15px;">
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="save" value="{SUBMIT_TITLE}" />
+                    </td>
+                    <td style="text-align:left;">
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="reset" name="reset" value="{TEXT_RESET}" />
+                    </td>
+                    <td>
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="cancel" value="{TEXT_CANCEL}" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+</form>
+<!--  -->
+    <table style="width: 100%; border-collapse: collapse;" >
+    <tr style="text-align:center;width:100%; margin: 1.225em auto;">
+        <td >&nbsp;</td>
+    </tr>
+    <tr>
+        <td style="text-align:left;">
+          <form name="advanced" action="{ADVANCED_LINK}" method="post">
+              <input type="hidden" name="group_id" value="{GROUP_ID}" />
+              <input type="hidden" name="action" value="modify" />
+              {FTAN}
+              <button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="advanced" onclick="window.location = '{ADVANCED_LINK}';" value="{ADVANCED_VALUE}" >{ADVANCED_BUTTON}</button>
+              </form>
+        </td>
+    </tr>
+    </table>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/header.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/header.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/header.htt	(revision 2)
@@ -0,0 +1,136 @@
+<!-- BEGIN header_block -->
+<!DOCTYPE HTML>
+<html lang="{LANGUAGE}">
+<!--
+ @version         $Id: header.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<meta charset="utf-8" />
+<title>{WEBSITE_TITLE} &raquo; {TEXT_ADMINISTRATION} - {SECTION_NAME}</title>
+<meta name="description" content="{TEXT_ADMINISTRATION}" />
+<meta name="keywords" content="{TEXT_ADMINISTRATION}" />
+<meta name="author" content="WebsiteBaker Org e.V." />
+<!-- Mobile viewport optimisation -->
+<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=2" />
+
+  <!-- Custom styles for this template -->
+<link href="{THEME_URL}/css/w3.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/theme.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/{STYLE}.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/modalbox.css" rel="stylesheet" type="text/css" />
+    <!-- Synthax highlighter -->
+<link href="{THEME_URL}/css/prism.css" rel="stylesheet"/>
+<link rel="shortcut icon" href="{THEME_URL}/images/favicon.ico" type="image/x-icon">
+<link rel="apple-touch-icon" href="{THEME_URL}/images/apple-touch-icon.png"/>
+
+{BACKEND_MODULE_CSS}
+<script type="text/javascript">
+var WB_URL = '{WB_URL}';
+var THEME_URL = '{THEME_URL}';
+var TEMPLATE = '{TEMPLATE}';
+var ADMIN_URL = '{ADMIN_URL}';
+var EDITOR = '{EDITOR}';
+</script>
+<!--[if IE]>
+    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+  <![endif]-->
+  <!-- The automated browser upgrade service provided by Financial Times.
+    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=default,getComputedStyle|gated"></script> -->
+  <!-- Just use it for all browsers on production websites.    -->
+
+<script src="{THEME_URL}/lib/minifill.js"> </script>
+<!--[if IE]>
+    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+<![endif]-->
+
+<script src="{WB_URL}/include/jquery/domReady.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/LoadOnFly.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-min.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-insert.js" type="text/javascript"></script>
+<script src="{WB_URL}/include/jquery/jquery-include.js" type="text/javascript"></script>
+<!--[if lt IE 7]><script type="text/javascript" src="{WB_URL}/include/jquery/plugins/jquery-pngFix.js"></script><![endif]-->
+<script type="text/javascript">
+  function confirm_link(message, url) {
+    if(confirm(message)) window.location.href = url;
+  }
+</script>
+{BACKEND_MODULE_JS}
+</head>
+<body>
+<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
+<div class="container" style="padding: 0.125em 0 0.825em;">
+    <div id="myModal" class="modal fader" tabindex="-1">
+      <div class="modal-dialog w3-animate-zoom" style="margin: auto 35%; top: 4.225em; " draggable="true">
+        <div class="modal-content block-outer"></div>
+      </div>
+    </div>
+<!-- The error Modal -->
+    <div id="errorModal" class="modal fader" tabindex="-1" >
+        <!-- Modal content -->
+        <div class="info-modal-content block-outer">
+          <div class="info-modal-header">
+            <button class="close" style="right: 3px;">X</button>
+            <h2 style="margin: 0;">php_error.log</h2>
+          </div>
+          <div id="info-modal-body">
+            <div id="ErrorIFrameBox" style="white-space: nowrap;">{ERROR_MSG}</div>
+          </div>
+          <div class="info-modal-footer" >
+            <button id="delete_php_error-log" class="btn btn-gradient ">Delete php_error.log</button>
+            <button type="button" id="closeErrorBox" data-dismiss="modal" class="btn btn-danger" style="float: right; padding: 2px 10px; margin-top: 1.025em;" >Close</button>
+          </div>
+        </div>
+    </div>
+<!-- The error Modal -->
+    <div class="w3-container" style="padding: 0.125em;">
+        <div class="w3-row tbody">
+                <div class="w3-col s4 ">
+                    <a href="{ADMIN_URL}" title="{TITLE_START}" style="padding: 2.125em 0;">
+                    <img src="{WB_URL}/templates/{TEMPLATE_DIR}/images/logo.png"  alt="Logo" />
+                    </a>
+                </div>
+                <div  class="w3-col s4 w3-panel" style="padding-top: 16px; white-space: nowrap;">
+                        <div class="w3-bar w3-center" >
+                           <a class="w3-bar-item " href="{ADMIN_URL}" title="{TITLE_START}"><img src="{THEME_URL}/images/home.png" alt="{TITLE_START}" /></a>
+                           <a class="w3-bar-item postlink" href="{URL_VIEW}" target="_blank" rel="noopener" title="{TITLE_VIEW}"><img src="{THEME_URL}/images/view.png" alt="{WB_URL}" /></a>
+                           <a class="w3-bar-item postlink" href="{URL_HELP}" target="_blank" rel="noopener" title="{TITLE_HELP}"><img src="{THEME_URL}/images/help.png" alt="{TITLE_HELP}" /></a>
+                        <!-- BEGIN maintenance_block -->
+                            <a href="{MAINTAINANCE_URL}" title="{MAINTENANCE_MODE}"><img src="{MAINTENANCE_ICON}" alt="{MAINTENANCE_MODE}" title="{MAINTENANCE_MODE}" /></a>
+                        <!-- END maintenance_block -->
+          <!-- javascript:delete_error_log('delete'); -->
+                        <!-- BEGIN button_info_block -->
+                           <span class="w3-bar-item " id="delete-error-log" title="Error log Filesize {ERROR_SIZE}"><img id="deleteImg" src="{THEME_URL}/images/remove_{POST}.png" alt="delete error log" /></span>
+                          <!-- the modal can be triggered via a button with data-target="#myModal" attribute (example 2) -->
+                           <button class="w3-bar-item w3-border-0 btn btn-lg" id="custom-modal-template" type="button" data-toggle="modal" title="{TITLE_INFO}" style="background: transparent; padding: 0;" data-target="#myModal"><img src="{THEME_URL}/images/info.png" alt="{TITLE_INFO}" /></button>
+                        <!-- END button_info_block -->
+                           <a class="w3-bar-item " href="{ADMIN_URL}/logout" title="{TITLE_LOGOUT}"><img src="{THEME_URL}/images/dl.png" alt="{TITLE_LOGOUT}" /></a>
+                        </div>
+                </div>
+                <div  class="w3-col s4 w3-right-align" style="padding-top: 16px;">
+                  <!-- BEGIN infoBlockBasis -->
+                  <ul class="w3-ul " style="padding: 8px 0 0;">
+                      <li class="w3-border-0 w3-padding-0">WB-Version</li>
+                      <li class="w3-border-0 w3-padding-0"> {VERSION} {SP}</li>
+                      <li class="w3-border-0 w3-padding-0">{SERVER_ADDR1}&nbsp;</li>
+                  </ul>
+                  <!-- END infoBlockBasis -->
+                  <!-- BEGIN infoBlockExented -->
+                  <ul class="w3-ul" style="padding: 8px 0 0;">
+                      <li class="w3-border-0 w3-padding-0">WB-Version</li>
+                      <li class="w3-border-0 w3-padding-0">{VERSION} {SP}</li>
+                      <li class="w3-border-0 w3-padding-0">PHP{PHP_VERSION}</li>
+                  </ul>
+                  <!-- END infoBlockExented -->
+                </div>
+            </div>
+        </div>
+        <div class="default-theme block-outer">
+            <div class="menu">
+                <ul class="menu">
+                    <!-- BEGIN linkBlock -->
+                    <li class="{CLASS}"><a href="{LINK}" target="{TARGET}">{TITLE}</a></li>
+                    <!-- END linkBlock -->
+                </ul>
+            </div>
+            <div class="default-content">
+<!-- END header_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/languages.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/languages.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/languages.htt	(revision 2)
@@ -0,0 +1,102 @@
+<!--
+ @version         $Id: languages.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div class="title-line">
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: left;">{CHANGE_TEMPLATE_NOTICE}</td>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_template_block -->
+                <span><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_TEMPLATES}">{MENU_TEMPLATES}</a> </span>
+                -
+    <!-- END addon_template_block -->
+    <!-- BEGIN addon_module_block -->
+                <span><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_MODULES}">{MENU_MODULES}</a> </span>
+                -
+    <!-- END addon_module_block -->
+    <!-- BEGIN addon_language_block -->
+                <span class="btn btn-default btn-large w3-blue-wb w3-disabled" style="min-width: 8.525em;">{URL_ADVANCED}</span>
+    <!-- END addon_language_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+</div>
+
+<div class="block-outer">
+<!-- BEGIN language_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+{FTAN}
+    <h2>{HEADING_INSTALL_LANGUAGE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td style="line-height: 3.525em;">
+                <input type="file" name="userfile" size="97" />
+                <script type="text/javascript">
+                document.install.userfile.focus();
+                </script>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_INSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_install_block -->
+
+<!-- BEGIN language_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+    <h2>{HEADING_UNINSTALL_LANGUAGE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select class="w3-border" name="code" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN language_uninstall_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END language_uninstall_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_UNINSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_uninstall_block -->
+
+<!-- BEGIN language_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+    <h2>{HEADING_LANGUAGE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select class="w3-border" name="code" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN language_detail_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END language_detail_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END language_detail_block -->
+</div>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/languages_details.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/languages_details.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/languages_details.htt	(revision 2)
@@ -0,0 +1,39 @@
+<!--
+ @version         $Id: languages_details.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_LANGUAGE_DETAILS}</h2>
+
+<div class="block-outer">
+<table class="addons language">
+  <tbody>
+    <tr>
+        <td class="setting_name">{TEXT_NAME}:</td>
+        <td>{NAME}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_CODE}:</td>
+        <td>{CODE}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_AUTHOR}:</td>
+        <td>{AUTHOR}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_VERSION}:</td>
+        <td>{VERSION}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_DESIGNED_FOR}:</td>
+        <td>Website Baker {DESIGNED_FOR}</td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+<br />
+
+<button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/login.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/login.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/login.htt	(revision 2)
@@ -0,0 +1,83 @@
+<!-- BEGIN mainBlock -->
+<!DOCTYPE html>
+<html lang="{LANGUAGE}">
+<!--
+ @version         $Id: login.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+    <!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->
+<title>{SECTION_NAME} - {WEBSITE_TITLE}</title>
+<meta http-equiv="content-type" content="text/html; charset={CHARSET}" />
+<meta name="description" content="{TEXT_LOGIN} - {WB_URL}" />
+<meta name="keywords" content="{TEXT_LOGIN}" />
+<link href="{THEME_URL}/css/w3.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/login.css" rel="stylesheet" type="text/css" />
+</head>
+<body >
+
+<div class="w3-row w3-section">
+    <div class="w3-col l4 m2 w3-content" >&nbsp;</div>
+    <div class="w3-col l6 m8 s12 w3-content" style="max-width: 580px;">
+        <img class="w3-image w3-padding-bottom " src="{THEME_URL}/images/logo.png" alt="WebsiteBaker Logo" >
+        <div class=" w3-content" >
+            <header class="w3-container w3-blue-wb w3-theme-d4">
+                <div class="w3-content">
+                <h4 class=" w3-text w3-text-white w3-border-0 w3-medium" >{SECTION_LOGIN} - {WEBSITE_TITLE}</h4>
+                </div>
+            </header>
+
+            <form name="login" action="{ACTION_URL}" method="post" class="w3-form w3-white">
+                <input type="hidden" name="url" value="{URL}" />
+                <input type="hidden" name="username_fieldname" value="{USERNAME_FIELDNAME}" />
+                <input type="hidden" name="password_fieldname" value="{PASSWORD_FIELDNAME}" />
+                <article class=" w3-row">
+                    <h6 class="w3-center w3-small">{MESSAGE}</h6>
+                    <div class="w3-row">
+                        <label class="w3-col l3 w3-padding-top w3-text-indigo w3-medium ">{TEXT_USERNAME}</label>
+                        <input class="w3-col l9 w3-input" type="text" placeholder="Enter Username" name="{USERNAME_FIELDNAME}" value="" required>
+                    </div>
+                    <div class="w3-row">
+                        <label class="w3-col l3 w3-padding-top w3-text-indigo w3-medium ">{TEXT_PASSWORD}</label>
+                        <input class="w3-col l9 w3-input" type="password" placeholder="Enter Password" name="{PASSWORD_FIELDNAME}" required>
+                    </div>
+                </article>
+                <footer class="container" style="background-color:#f1f1f1">
+                    <div class="w3-row">
+                        <div class="w3-col m5"><button class="btn btn-default w3-padding-4 w3-blue-wb w3-header-hover-blue-wb w3-round" type="submit" name="submit" >{TEXT_LOGIN}</button></div>
+                        <div class="w3-col m2">&nbsp;</div>
+                        <div class="w3-col m5"><button class="btn btn-default w3-padding-4 w3-blue-wb w3-hover-red w3-round" type="reset" >{TEXT_RESET}</button></div>
+                    </div>
+                    <ul class="w3-navbar w3-navitem w3-center w3-text-indigo" style="white-space: nowrap;">
+                        <li class="w3-col m6 w3-text w3-border-bar"><a class="w3-hover-text-purple " href="{FORGOTTEN_DETAILS_APP}">{TEXT_FORGOTTEN_DETAILS}</a></li>
+                        <li class="w3-col m6 w3-text w3-border-bar"><a class="w3-hover-text-purple " target="_blank" href="{WB_URL}/">{TEXT_HOME}</a></li>
+                    </ul>
+                </footer>
+            </form>
+        </div>
+        <footer class="w3-text-grey w3-text w3-center" style="font-size:1.025em;margin: 1.025em 0;">
+          <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+          <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+          <a  style="white-space: nowrap;" href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+          <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+        </footer>
+    </div>
+    <div class=" w3-container w3-quarter w3-margin-bottom" ></div>
+</div>
+
+<script type="text/javascript">
+<!--
+    elm = document.getElementsByTagName('form');
+    console.info(elm);
+      for (i=0; elm[i]; i++) {
+        if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+            elm[i].setAttribute('autocomplete', 'off');
+        }
+        if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+            elm[i].setAttribute('accept-charset', 'utf-8');
+        }
+      }
+-->
+</script>
+</body>
+</html>
+<!-- END mainBlock -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/login_forgot.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/login_forgot.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/login_forgot.htt	(revision 2)
@@ -0,0 +1,80 @@
+<!-- BEGIN main_block -->
+<!DOCTYPE html>
+<html lang="{LANGUAGE}">
+<!--
+ @version         $Id: login_forgot.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>{SECTION_FORGOT}</title>
+<meta http-equiv="content-type" content="text/html; charset={CHARSET}" />
+<meta name="description" content="{SECTION_FORGOT}" />
+<meta name="keywords" content="{SECTION_FORGOT}" />
+<link href="{THEME_URL}/css/w3.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/login.css" rel="stylesheet" type="text/css" />
+</head>
+<body onload="document.forgot_pass.email.focus();">
+
+<div class="w3-row w3-section">
+    <div class="w3-col l4 m2 w3-content" >&nbsp;</div>
+    <div class="w3-col l6 m8 s12 w3-content" style="max-width: 580px;">
+        <img class="w3-image w3-padding-bottom " src="{THEME_URL}/images/logo.png" alt="WebsiteBaker Logo" >
+        <div class=" w3-content" >
+            <header class="w3-container w3-blue-wb w3-row w3-theme-d4">
+                <div class="w3-content">
+                <h4 class=" w3-text w3-text-white w3-border-0 w3-medium">{SECTION_FORGOT} - {WB_URL}</h4>
+                </div>
+            </header>
+
+            <form name="login" action="{ACTION_URL}" method="post" class="w3-form w3-white">
+                <input type="hidden" name="url" value="{URL}" />
+
+                <article class="container w3-col">
+                  <h6 class="w3-center w3-small">{MESSAGE}</h6>
+                  <label class="w3-text-indigo w3-large">{TEXT_EMAIL}</label>
+                  <input class="w3-input" type="text" placeholder="Enter E-Mail" name="email" value="" required>
+                </article>
+                <div class=" w3-col">&nbsp;</div>
+                <footer class="container" style="background-color:#f1f1f1">
+                    <div class="w3-row">
+                      <div class="w3-col m5"><button class="btn btn-default w3-padding-4 w3-hover-green w3-blue-wb w3-round" type="submit" name="submit" >{TEXT_SEND_DETAILS}</button></div>
+                      <div class="w3-col m2">&nbsp;</div>
+                      <div class="w3-col m5"><button class="btn btn-default w3-padding-4 w3-hover-green w3-blue-wb w3-round" type="reset" >{TEXT_RESET}</button></div>
+                  </div>
+                  <ul class="w3-navbar w3-navitem w3-center w3-small w3-text-indigo">
+                      <li class="w3-col m6 w3-text w3-border"><a href="{LOGIN_URL}">{TEXT_NEED_TO_LOGIN}</a></li>
+                      <li class="w3-col m6 w3-text w3-border"><a target="_blank" href="{WB_URL}/">{TEXT_HOME}</a></li>
+                  </ul>
+                </footer>
+
+            </form>
+        </div>
+
+        <footer class="w3-text-grey w3-text w3-center w3-small" style=" margin: 1.025em 0;">
+          <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+          <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+          <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+          <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+        </footer>
+    </div>
+    <div class=" w3-container w3-quarter w3-margin-bottom" ></div>
+</div>
+
+
+
+<script type="text/javascript">
+<!--
+    elm = document.getElementsByTagName('form');
+    console.info(elm);
+      for (i=0; elm[i]; i++) {
+        if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+            elm[i].setAttribute('autocomplete', 'off');
+        }
+        if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+            elm[i].setAttribute('accept-charset', 'utf-8');
+        }
+      }
+-->
+</script>
+</body>
+</html>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/maintenance.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/maintenance.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/maintenance.htt	(revision 2)
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<!-- BEGIN mainBlock -->
+<html lang="{LANGUAGE}">
+<!--
+ @version         $Id: maintenance.htt 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>{PAGE_TITLE}</title>
+<meta http-equiv="content-type" content="text/html; charset={CHARSET}" />
+<meta name="description" content="{TEXT_LOGIN}" />
+<meta name="keywords" content="{TEXT_LOGIN}" />
+<link href="{THEME_URL}/css/w3.css" rel="stylesheet" type="text/css" />
+<link href="{THEME_URL}/css/login.css" rel="stylesheet" type="text/css" />
+</head>
+<body >
+
+<div class="w3-padding-128 w3-section" style="margin: 64px auto">
+    <div class=" w3-container w3-quarter w3-margin-bottom" ></div>
+    <div class=" w3-container w3-half w3-margin-bottom " >
+        <div class=" w3-container w3-margin-bottom " >
+            <header class="w3-container w3-blue w3-row w3-theme-d4">
+                <ul class="w3-col w3-navbar">
+                <li class="imgcontainer w3-col s5 w3-hide-small" >
+                    <img class="w3-image " src="{THEME_URL}/images/logo.png" alt="WebsiteBaker Logo" >
+                </li>
+                <li class="s7">
+                <span class=" w3-text w3-text-white w3-border-0">OFF-LINE - {WB_URL}</span>
+                </li>
+                </ul>
+            </header>
+            <article class="w3-container w3-col w3-white">
+              <h5>{LEER}</h5>
+              <div class="w3-container w3-center">
+                  <h4>{PAGE_TITLE}</h4>
+                  <img src="{THEME_URL}/images/{PAGE_ICON}.png" alt="{PAGE_TITLE}" /><br />
+                  <h3>{CHECK_BACK}</h3>
+              </div>
+            </article>
+        </div>
+
+        <footer class="w3-text-white w3-text w3-center" style="font-size:1.025em;margin: 1.025em 0;">
+          <!-- Please note: the below reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+          <a href="http://websitebaker.org/" title="external">WebsiteBaker</a> is released under the
+          <a href="http://www.gnu.org/licenses/gpl.html" title="WebsiteBaker is released under the GNU General Public License">GNU General Public License</a>
+          <!-- Please note: the above reference to the GNU GPL should not be removed, as it provides a link for users to read about warranty, etc. -->
+        </footer>
+    </div>
+    <div class=" w3-container w3-quarter w3-margin-bottom" ></div>
+</div>
+
+<script type="text/javascript">
+<!--
+    elm = document.getElementsByTagName('form');
+    console.info(elm);
+      for (i=0; elm[i]; i++) {
+        if ( (elm[i].className.indexOf('autocomplete') == -1) ) {
+            elm[i].setAttribute('autocomplete', 'off');
+        }
+        if ( (elm[i].className.indexOf('accept-charset') == -1) ) {
+            elm[i].setAttribute('accept-charset', 'utf-8');
+        }
+      }
+-->
+</script>
+</body>
+</html>
+<!-- END mainBlock -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/media.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/media.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/media.htt	(revision 2)
@@ -0,0 +1,138 @@
+<!--
+ @version         $Id: media.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<script src="{THEME_URL}/js/toggle_zip.js" type="text/javascript"></script>
+
+<table  style="width:100%;">
+    <tbody>
+  <tr>
+    <td style="width: 40%;" >
+    <h2>{HEADING_UPLOAD_FILES}</h2>
+      <form name="upload" action="upload.php" method="post" enctype="multipart/form-data" class="{DISPLAY_UPLOAD}">
+        {FTAN}
+        <table class="w3-table">
+            <tbody>
+          <tr>
+            <td>{TEXT_TARGET_FOLDER}:<br />
+              <select class="w3-border" name="target" id="target" style="width:100%;"
+           onchange="browse.location.href='browse.php?dir=' +
+               document.upload.target.value.substr(6,100);
+           document.create.target.value = document.upload.target.value;">
+                <option value="{MEDIA_DIRECTORY}{HOME_DIRECTORY}" selected="selected">{MEDIA_DIRECTORY}{HOME_DIRECTORY}</option>
+                <!-- BEGIN dir_list_block -->
+                <option value="{NAME}">{NAME}</option>
+                <!-- END dir_list_block -->
+              </select>
+            </td>
+          </tr>
+            </tbody>
+        </table>
+        <table class="w3-table">
+            <tbody>
+          <tr>
+              <td >
+                <input type="checkbox" name="unzip" id="unzip"  onclick="toggle();" />
+                <label for="unzip">{TEXT_UNZIP_FILE}</label>
+                <span id="delzip" style="display: none;"><br />
+                <input type="checkbox" name="delzip" id="deletezip" />
+                <label for="deletezip">{TEXT_DELETE_ZIP}</label></span>
+            </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file1" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file2" id="file2" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file3" id="file3" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file4" id="file4" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file5" id="file5" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file6" id="file6" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file7" id="file7" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file8" id="file8" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file9" id="file9" style="visibility: visible;" /> </td>
+          </tr>
+          <tr>
+            <td style=" float: left;"><input type="file" size="33" name="file10" id="file10" style="visibility: visible;" /> </td>
+          </tr>
+            </tbody>
+        </table>
+
+        <table class="w3-table">
+            <tbody>
+          <tr>
+            <td><input type="checkbox" name="overwrite" id="overwrite" value="yes" />
+              <label for="overwrite">{TEXT_OVERWRITE_EXISTING} {TEXT_FILES}</label><br />
+              <input class="btn btn-default w3-input" type="submit" name="submit" value="{TEXT_UPLOAD_FILES}"  />
+            </td>
+          </tr>
+            </tbody>
+        </table>
+      </form>
+<!--
+If you want to HIDE the option of creating folders in the Media-folder (for your clients, for example),
+please set the class below to "hide", else to "show".
+-->
+      <div class="show">
+      <br /><br />
+        <form name="create" action="create.php" method="post" class="{DISPLAY_CREATE}">
+        {FTAN}
+          <h2>{HEADING_CREATE_FOLDER}</h2>
+          <table  class="w3-table">
+            <tbody>
+            <tr>
+              <td>{TEXT_NAME}:<br />
+              <input class="w3-border w3-input" type="text" name="name"  /></td>
+            </tr>
+          </table>
+          <table  class="w3-table">
+            <tr>
+              <td>{TEXT_TARGET_FOLDER}:<br />
+                <select class="w3-border" name="target" style="width: 100%;">
+                  <option value="{MEDIA_DIRECTORY}{HOME_DIRECTORY}" selected="selected">{MEDIA_DIRECTORY}{HOME_DIRECTORY}</option>
+                  <!-- BEGIN dir_list_block -->
+                  <option value="{NAME}">{NAME} </option>
+                  <!-- END dir_list_block -->
+                </select>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+          <table class="w3-table">
+            <tbody>
+            <tr>
+              <td><input class="btn btn-default w3-input" type="submit" name="submit" value="{TEXT_CREATE_FOLDER}"  />
+              </td>
+            </tr>
+            </tbody>
+          </table>
+        </form>
+      </div>
+      <!-- END main_block -->
+    </td>
+    <td >&nbsp;</td>
+    <td class="media_right" style="width: 100%; float: right;">
+    <h2 style="padding-left:3px;">{HEADING_BROWSE_MEDIA}</h2>
+    <span class="{DISPLAY_SETTINGS}" style="margin-bottom:2px;">{OPTIONS}:&nbsp;
+    <a class="{DISPLAY_SETTINGS}" href="setparameter.php" target="browse">{CHANGE_SETTINGS}</a>&nbsp;&nbsp;|&nbsp;
+    <a href="browse.php?dir={CURRENT_DIR}" target="browse">{TEXT_RELOAD}</a>
+    </span>
+    <iframe name="browse" height="550" src="browse.php" style=" width: 99%; border:1px solid #333;"></iframe>
+    </td>
+  </tr>
+    </tbody>
+</table>
Index: trunk/templates/DefaultTheme/templates/modules.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/modules.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/modules.htt	(revision 2)
@@ -0,0 +1,184 @@
+<!--
+ @version         $Id: modules.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div class="title-line">
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_template_block -->
+                <span><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_TEMPLATES}">{MENU_TEMPLATES}</a> </span>
+                -
+    <!-- END addon_template_block -->
+    <!-- BEGIN addon_language_block -->
+                <span ><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_LANGUAGES}">{MENU_LANGUAGES}</a></span>
+                -
+    <!-- END addon_language_block -->
+    <!-- BEGIN addon_module_block -->
+                <span ><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_ADVANCED}">{TEXT_ADVANCED}</a></span>
+    <!-- END addon_module_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+</div>
+
+<div class="block-outer">
+<!-- BEGIN module_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+    {FTAN}
+    <h2>{HEADING_INSTALL_MODULE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td >
+                <input type="file" name="userfile" size="97" />
+                <script type="text/javascript">
+                document.install.userfile.focus();
+                </script><br />
+                <input type="checkbox" name="overwrite" value="false" checked="checked" />
+                <span>{OVERWRITE_NEWER_FILES}</span>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_INSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_install_block -->
+
+<!-- BEGIN module_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+    <h2>{HEADING_UNINSTALL_MODULE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select name="file" class="w3-border" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN module_uninstall_select_block -->
+                    <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                  <!-- END module_uninstall_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_UNINSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_uninstall_block -->
+
+<!-- BEGIN module_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+    <h2>{HEADING_MODULE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+              <td>
+                <select class="w3-border" name="file" style="width: 75%;">
+                <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                <!-- BEGIN module_detail_select_block -->
+                    <option value="{VALUE}">{NAME}</option>
+                  <!-- END module_detail_select_block -->
+                </select>
+              </td>
+              <td style="width: 10%;">
+                <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+              </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END module_detail_block -->
+</div>
+<!-- BEGIN module_advanced_block -->
+<div class="block-outer">
+        <h2>{HEADING_INVOKE_MODULE_FILES}</h2>
+    <div class="w3-panel w3-leftbar w3-sand {DISPLAY_MANUAL_INSTALL}" style="margin-bottom: 1.525em;">
+        <p>{TEXT_MANUAL_INSTALLATION}</p>
+    </div>
+    <!-- BEGIN manuell_install_block -->
+        <form name="manual_install" action="manual_install.php" method="post" class="w3-section {INSTALL_VISIBLE}" >
+            <input type="hidden" name="action" value="install" />
+            {FTAN}
+            <div class="w3-row w3-container w3-small w3-bold w3-text-indigo">
+                <div class="w3-content w3-quarter" style="float: left; width: 25%;">
+                <span>{TEXT_FILE}: "install.php"</span>
+                </div>
+                <div class="w3-content w3-threequarter">
+                    <select class="w3-btn w3-light-gray w3-border w3-col m6" name="file" style="text-align: left;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN manuell_install_select_block -->
+                    <option value="{INSTALL_VALUE}">{INSTALL_NAME}</option>
+                    <!-- END manuell_install_select_block -->
+                    </select>
+                    <button type="submit" name="submit" value="" class="w3-btn w3-blue-wb w3-hover-green" >{TEXT_EXECUTE}</button>
+                </div>
+           </div>
+
+        </form>
+    <!-- END manuell_install_block -->
+
+    <!-- BEGIN manuell_upgrade_block -->
+
+        <form name="manual_upgrade" action="manual_install.php" method="post" class="w3-section {UPGRADE_VISIBLE}">
+            <input type="hidden" name="action" value="upgrade" />
+            {FTAN}
+
+            <div class="w3-row w3-container w3-small w3-bold w3-text-indigo">
+                <div class="w3-content w3-quarter" style="float: left; width: 25%;">
+                <span>{TEXT_FILE}: "upgrade.php"</span>
+                </div>
+                <div class="w3-content w3-threequarter">
+                    <select class="w3-btn w3-light-gray w3-border w3-col m6" name="file" style="text-align: left;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN manuell_upgrade_select_block -->
+                    <option value="{UPGRADE_VALUE}">{UPGRADE_NAME}</option>
+                    <!-- END manuell_upgrade_select_block -->
+                    </select>
+                    <button type="submit" name="submit" value="{" class="w3-btn w3-blue-wb w3-hover-green" >{TEXT_EXECUTE}</button>
+                </div>
+           </div>
+
+        </form>
+    <!-- END manuell_upgrade_block -->
+
+    <!-- BEGIN manuell_uninstall_block -->
+        <form name="manual_uninstall" action="manual_install.php" method="post" class="w3-section {UNINSTALL_VISIBLE}">
+            <input type="hidden" name="action" value="uninstall" />
+            {FTAN}
+
+            <div class="w3-row w3-container w3-small w3-bold w3-text-indigo">
+                <div class="w3-content w3-quarter" style="float: left; width: 25%;">
+                <span>{TEXT_FILE}: "uninstall.php"</span>
+                </div>
+                <div class="w3-content w3-threequarter">
+                    <select class="w3-btn w3-light-gray w3-border w3-col m6" name="file" style="text-align: left;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN manuell_uninstall_select_block -->
+                    <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                    <!-- END manuell_uninstall_select_block -->
+                    </select>
+                    <button type="submit" name="submit" value="" class="w3-btn w3-blue-wb w3-hover-green" >{TEXT_EXECUTE}</button>
+                </div>
+           </div>
+
+        </form>
+    <!-- END manuell_uninstall_block -->
+</div>
+
+<div style="width: 100%; ">
+    <div class="w3-panel w3-pale-red w3-leftbar w3-border-red" style="min-height: 4.225em; width: 100%;" ><p>{TEXT_MANUAL_INSTALLATION_WARNING}</p></div>
+</div>
+<!-- END module_advanced_block -->
+
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/modules_details.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/modules_details.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/modules_details.htt	(revision 2)
@@ -0,0 +1,42 @@
+<!--
+ @version         $Id: modules_details.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_MODULE_DETAILS}</h2>
+<div class="block-outer">
+<table class="addons module">
+  <tbody>
+    <tr>
+        <td class="setting_name">{TEXT_NAME}:</td>
+        <td>{NAME}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_TYPE}:</td>
+        <td>{TYPE}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_AUTHOR}:</td>
+        <td>{AUTHOR}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_VERSION}:</td>
+        <td>{VERSION}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_DESIGNED_FOR}:</td>
+        <td>Website Baker {DESIGNED_FOR}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_DESCRIPTION}:</td>
+        <td style="text-align: justify;">{DESCRIPTION}</td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+<br />
+
+<button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/pages.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/pages.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/pages.htt	(revision 2)
@@ -0,0 +1,112 @@
+<!--
+ @version         $Id: pages.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<!-- BEGIN add_block -->
+<h2>{HEADING_ADD_PAGE}</h2>
+<div class="{DISPLAY_ADD} block-outer" style="float: left; width: 100%; padding-top: 1.925em;">
+<form name="add" action="add.php" method="post">
+{FTAN}
+    <table style="border-collapse: separate; width: 40%; float: left;" class="pages_add" >
+        <tbody>
+            <tr style="margin: 0.525em 0;">
+              <td  style="width: 13.525em;">{TEXT_TITLE}:</td>
+              <td  style="width: 20.525em;"><input type="text" name="title" style="width: 20.525em;" /></td>
+            </tr>
+            <tr>
+              <td >{TEXT_TYPE}:</td>
+              <td >
+                  <select name="type" style="width: 20.525em;">
+                      <!-- BEGIN module_list_block -->
+                          <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                      <!-- END module_list_block -->
+                  </select>
+              </td>
+            </tr>
+            <tr>
+              <td >{TEXT_PARENT}:</td>
+              <td >
+                  <select  name="parent" style="width: 20.525em;" onchange="return disabled_hack_for_ie(this);">
+                      <!-- BEGIN page_list_block2 -->
+                      <option value="{ID}"{DISABLED} style="background: {FLAG_ROOT_ICON} no-repeat center left; padding-left: 20px;">{TITLE}</option>
+                      <!-- END page_list_block2 -->
+                  </select>
+              </td>
+            </tr>
+            <tr>
+              <td >{TEXT_VISIBILITY}:</td>
+              <td >
+                  <select name="visibility" onchange="javascript: toggle_viewers();" style="width: 20.525em;">
+                      <option value="public"{SELECTED}>{TEXT_PUBLIC}</option>
+                      <option value="private">{TEXT_PRIVATE}</option>
+                      <option value="registered">{TEXT_REGISTERED}</option>
+                      <option value="hidden">{TEXT_HIDDEN}</option>
+                      <option value="none">{TEXT_NONE}</option>
+                  </select>
+              </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td>&nbsp;</td>
+            </tr>
+            <tr class="w3-small">
+              <td >&nbsp;</td>
+              <td >
+                  <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="submit" value="{TEXT_ADD}" style="min-width: 7.525em; padding: 0 0.9525em;" />
+                  <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="reset" name="reset" value="{TEXT_RESET}" style="min-width: 7.525em; padding: 0 0.9525em;" />
+              </td>
+            </tr>
+            <tr>
+              <td>&nbsp;</td>
+              <td>&nbsp;</td>
+            </tr>
+        </tbody>
+    </table>
+    <table style="border-collapse: separate; width: 58%; padding-left: 1.225em;" class="pages_groups" >
+        <tbody>
+            <tr>
+              <td style=" width: 55%; vertical-align: top;">{TEXT_ADMINISTRATORS}:
+                  <ul style="list-style-type: none; margin: 0; padding: 0;">
+                      <!-- BEGIN group_list_block -->
+                      <li>
+                      <input type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                      <label for="admin_group_{TOGGLE}">{NAME}</label>
+                      </li>
+                      <!-- END group_list_block -->
+                  </ul>
+              </td>
+              <td style=" vertical-align: top;">
+                  <div id="viewers" style="display: none;">{TEXT_REGISTERED_VIEWERS}:
+                      <ul style="list-style-type: none; margin: 0; padding: 0;">
+                          <!-- BEGIN group_list_block2 -->
+                          <li>
+                          <input type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                          <label for="viewing_group_{TOGGLE}">{NAME}</label>
+                          </li>
+                          <!-- END group_list_block2 -->
+                      </ul>
+                  </div>
+              </td>
+            </tr>
+        </tbody>
+    </table>
+</form>
+</div>
+<!-- END add_block -->
+
+<!-- BEGIN intro_block -->
+<div class="{DISPLAY_INTRO}" style="padding-top: 10px;">
+<br />
+<h2>{HEADING_MODIFY_INTRO_PAGE}</h2>
+<a href="intro.php">{INTRO_LINK}</a>
+</div>
+<!-- END intro_block -->
+</div> <!-- end div of pages_tree -->
+
+<!-- Addition for remembering expanded state of pages -->
+<script type="text/javascript">
+var THEME_URL = '{THEME_URL}';
+var WB_URL = '{WB_URL}';
+</script>
+<script src="{ADMIN_URL}/pages/page_index.js" type="text/javascript"></script>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/pages_sections.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/pages_sections.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/pages_sections.htt	(revision 2)
@@ -0,0 +1,143 @@
+<!--
+ @version         $Id: pages_sections.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<table class="header-info">
+    <tbody>
+        <tr >
+           <td class="header-modify-page" ><h2>{HEADING_MODIFY_PAGE}</h2></td>
+           <td class="header-page_id" style="">ID: {PAGE_ID}</td>
+           <td class="header-current-page">{TEXT_CURRENT_PAGE}:<b>{PAGE_TITLE}</b>
+        <!-- BEGIN show_settings_block -->
+              <span style="{DISPLAY_MANAGE_MODIFY}">-</span>
+              <a href="{ADMIN_URL}/pages/settings.php?page_id={PAGE_IDKEY}">{TEXT_CHANGE_SETTINGS}</a>
+        <!-- END show_settings_block -->
+        <!-- BEGIN show_modify_block -->
+              -
+              <a href="{ADMIN_URL}/pages/modify.php?page_id={PAGE_IDKEY}" style="{}">{HEADING_MODIFY_PAGE}</a>
+        <!-- END show_modify_block -->
+              <span style="color:#999;" class="{CLASS_DISPLAY_MODIFIED}"><br />
+              {LAST_MODIFIED} {MODIFIED_BY}, {MODIFIED_WHEN}
+              </span>
+           </td>
+        </tr>
+    </tbody>
+</table>
+<form name="section_properties" action="{ADMIN_URL}/pages/sections_save.php?page_id={PAGE_IDKEY}" method="post">
+{FTAN}
+    <div class="jsadmin jcalendar hide"></div>
+    <div class="block-outer">
+        <table class="img_noborder pages_section" >
+            <thead>
+                <tr class="sections_list">
+                    <th class="header_list_type" style="width: 40%;">{TEXT_TYPE}</th>
+                    <th class="header_list_block"><span {STYLE_DISPLAY_SECTION_BLOCK}>{TEXT_BLOCK}&nbsp;</span></th>
+                    <th colspan="3" class="header_list_pubdate_start">{TEXT_PUBL_START_DATE}</th>
+                    <th colspan="3" class="header_list_pubdate_end">{TEXT_PUBL_END_DATE}</th>
+                    <th colspan="3" class="header_list_sections_actions" >{TEXT_ACTIONS}</th>
+                    <th class="header_list_section_id">ID</th>
+                    <th >&nbsp;</th>
+                </tr>
+            </thead>
+            <tbody>
+    <!-- BEGIN show_section_block -->
+                <tr class="sectionrow" title="{SEC_TAG_TITLE}" style="vertical-align: middle; line-height: 1.225;">
+                    <td style="display:none; float: right;">
+                      <input type="hidden" name="page_id" value="{PAGE_IDKEY}"  />
+                      <input type="hidden" name="section_id" value="{VAR_SECTION_ID}"  />
+                      {VAR_SECTION_ID}
+                    </td>
+                    <td class="modify_link">{LINK_MODIFY_URL_VAR_MODUL_NAME}
+                <!-- BEGIN section_title_block -->
+                    <span class="sec_title" title="{SEC_TAG_TITLE}" style="font-weight: normal;">[ {SECTION_TITLE} ]</span>
+                  <!-- END section_title_block -->
+                    </td>
+
+                    <td class="{INPUT_ATTRIBUTE}"><span {STYLE_DISPLAY_SECTION_BLOCK}>
+                        <select class="input_normal w3-border" name="block{VAR_SECTION_ID}" style="width: 100%;">
+                        {SET_NONE_DISPLAY_OPTION}
+                        <!-- BEGIN section_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END section_list_block -->
+                        </select></span>&nbsp;
+                    </td>
+
+                    <td class="list_pubdate_start">
+                        <input class="w3-input w3-border" style="height: 1.665em;" type="text" id="start_date{VAR_SECTION_ID}" name="start_date{VAR_SECTION_ID}" value="{VALUE_PUBL_START}" />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/calendar_16.png" id="trigger_start{VAR_SECTION_ID}" style="cursor:pointer;" title="{TEXT_CALENDAR}" alt="{TEXT_CALENDAR}"  />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.start_date{VAR_SECTION_ID}.value=''" />
+                    </td>
+                    <td class="list_pubdate_end">
+                        <input class="w3-input w3-border" style="height: 1.665em;" type="text" id="end_date{VAR_SECTION_ID}" name="end_date{VAR_SECTION_ID}" value="{VALUE_PUBL_END}" />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/calendar_16.png" id="trigger_stop{VAR_SECTION_ID}" alt="{TEXT_CALENDAR}" style="cursor: pointer;" title="{TEXT_CALENDAR}"  />
+                    </td>
+                    <td>
+                        <img src="{THEME_URL}/images/{CLOCK_DEL_16_PNG}" style="cursor:pointer;" alt="{TEXT_DELETE_DATE}" title="{TEXT_DELETE_DATE}" onclick="document.section_properties.end_date{VAR_SECTION_ID}.value=''" />
+                    </td>
+                    <td>{VAR_MOVE_UP_URL}</td>
+                    <td>{VAR_MOVE_DOWN_URL}</td>
+
+                    <td>
+          <!-- BEGIN can_delete_block -->
+                        <a href="#" onclick="javascript: confirm_link('{TEXT_ARE_YOU_SURE}', '{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}&amp;section_id={VAR_SECTION_IDKEY}');">
+                        <img src="{THEME_URL}/images/{DELETE_16_PNG}" alt="{TEXT_DELETE}" />
+                        </a>
+          <!-- END can_delete_block -->
+                    </td>
+                    <td class="list_section_id">{VAR_SECTION_ID}</td>
+                    <!--
+                    <td {DISPLAY_DEBUG}>{POSITION}</td>
+                    -->
+                </tr>
+    <!-- END show_section_block -->
+            </tbody>
+        </table>
+    </div>
+    <div>
+        <label style="float: left;" ></label>
+        <input type="submit" name="save" value="{TEXT_SAVE}" class="btn btn-default  w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+    </div>
+</form>
+
+<h2>{TEXT_ADD_SECTION}</h2>
+<form name="add" action="{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}" method="post">
+    <input type="hidden" name="page_id" value="{PAGE_IDKEY}"  />
+    {FTAN}
+    <table>
+        <tbody>
+            <tr>
+                <td style="width: 40%;">
+                    <select name="module" class="w3-btn w3-light-gray w3-border w3-col m6 w3-left-align">
+                    <!-- BEGIN module_block -->
+                     <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                     <!-- END module_block -->
+                    </select>
+                    &nbsp;&nbsp;
+                    <input class="btn btn-default w3-blue-wb w3-hover-green w3-medium" type="submit" name="submit" value="{TEXT_ADD}"  />
+                 </td>
+            </tr>
+        </tbody>
+   </table>
+</form>
+    <!-- BEGIN calendar_block -->
+    <script type="text/javascript" >
+         var section_id = '{VAR_SECTION_ID}';
+         var start_date = '{start_date}';
+         var end_date = '{end_date}';
+         var trigger_start = '{trigger_start}';
+         var trigger_end = '{trigger_end}';
+         var jscal_today = '{jscal_today}';
+         var jscal_ifformat = '{jscal_ifformat}';
+         var jscal_firstday = {jscal_firstday};
+         var showsTime = {showsTime};
+         var timeFormat = {timeFormat};
+    </script>
+    <script type="text/javascript" src="{ADMIN_URL}/pages/page_calendar.js" ></script>
+    <!-- END calendar_block -->
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/pages_settings.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/pages_settings.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/pages_settings.htt	(revision 2)
@@ -0,0 +1,258 @@
+<!--
+ @version         $Id: pages_settings.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<!--
+ *   template
+ *   visibility
+ *   language
+ *   searching
+ *   admin_groups
+ *   admin_users
+ *   viewing_groups
+ *   viewing_users
+ -->
+<table class="header-info">
+    <tbody>
+        <tr >
+           <td class="header-modify-page" ><h2>{HEADING_MODIFY_PAGE}</h2></td>
+           <td class="header-page_id" style="">ID: {PAGE_ID}</td>
+           <td class="header-current-page">{TEXT_CURRENT_PAGE}:<b>{PAGE_TITLE}</b>
+        <!-- BEGIN show_section_block -->
+              <span >-</span>
+              <a href="{ADMIN_URL}/pages/sections.php?page_id={PAGE_IDKEY}">{TEXT_MANAGE_SECTIONS}</a>
+        <!-- END show_section_block -->
+        <!-- BEGIN show_modify_block -->
+              -
+              <a href="{ADMIN_URL}/pages/modify.php?page_id={PAGE_IDKEY}" style="{}">{HEADING_MODIFY_PAGE}</a>
+        <!-- END show_modify_block -->
+              <span style="color:#999;" class="{CLASS_DISPLAY_MODIFIED}"><br />
+              {LAST_MODIFIED} {MODIFIED_BY}, {MODIFIED_WHEN}
+              </span>
+           </td>
+        </tr>
+    </tbody>
+</table>
+
+        <!-- BEGIN show_settings_block -->
+        <!-- END show_settings_block -->
+<form name="settings" action="settings2.php" method="post">
+{FTAN}
+    <input type="hidden" name="page_id" value="{PAGE_ID}" />
+    <div class="block-outer col" style="width: 48%; min-width: 30.225em; float: left;padding: 0.825em;min-height: 43.00225em;">
+        <table class="table pages-settings" >
+            <thead>
+                <tr>
+                    <th></th>
+                    <th></th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>
+                        <label>{TEXT_PAGE_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input class="w3-border" type="text" name="page_title" value="{PAGE_TITLE}" style="width: 99%;" />
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_MENU_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input class="w3-border" type="text" name="menu_title" value="{MENU_TITLE}" style="width: 99%;" />
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label id="parent">{TEXT_PARENT}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <select class="w3-border" name="parent" style="width: 100%;" onchange="return disabled_hack_for_ie(this);">
+                            <!-- BEGIN page_list_block2 -->
+                            <option value="{ID}"{SELECTED} style="background: {FLAG_ROOT_ICON} no-repeat center left; padding-left: 20px;">{TITLE}</option>
+                            <!-- END page_list_block2 -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_SEO_TITLE}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <input class="w3-border" type="text" id="seo_title" name="seo_title" value="{SEO_TITLE}" style="width: 99%;"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_DESCRIPTION}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <textarea class="w3-border" name="description" rows="3" cols="1" style="width: 99%; ">{DESCRIPTION}</textarea>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_KEYWORDS}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <textarea class="w3-border" name="keywords" rows="3" cols="1" style="width: 99%; ">{KEYWORDS}</textarea>
+                    </td>
+                </tr>
+                <tr class="border">
+                    <td>
+                        <label for="visibilities">{TEXT_VISIBILITY}</label>
+                        <input id="visibilities" name="inherit[]" type="checkbox" value="visibility" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select class="w3-border" name="visibility" onchange="javascript: toggle_viewers();" style="width: 100%;">
+                            <option value="public"{PUBLIC_SELECTED}>{TEXT_PUBLIC}</option>
+                            <option value="private"{PRIVATE_SELECTED}>{TEXT_PRIVATE}</option>
+                            <option value="registered"{REGISTERED_SELECTED}>{TEXT_REGISTERED}</option>
+                            <option value="hidden"{HIDDEN_SELECTED}>{TEXT_HIDDEN}</option>
+                            <option value="none"{NO_VIS_SELECTED}>{TEXT_NONE}</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label>{TEXT_TARGET}</label>
+                        <span></span>
+                    </td>
+                    <td>
+                        <select class="w3-border" name="target" style="width: 100%;" ><!--  value="{TARGET}" -->
+                            <option value="_blank"{BLANK_SELECTED}>{TEXT_NEW_WINDOW}</option>
+                            <option value="_self"{SELF_SELECTED}>{TEXT_SAME_WINDOW}</option>
+                            <option value="_top"{TOP_SELECTED}>{TEXT_TOP_FRAME}</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <label for="template">{TEXT_TEMPLATE}</label>
+                        <input id="template" name="inherit[]" type="checkbox" value="template" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select class="w3-border" name="template" style="width: 100%;">
+                            <option value="">{TEXT_SYSTEM_DEFAULT}</option>
+                            <option value="">----------------------</option>
+                            <!-- BEGIN template_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                            <!-- END template_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr style="{DISPLAY_MENU_LIST}">
+                    <td>
+                        <label for="menu">{TEXT_MENU}</label>
+                        <input id="menu" name="inherit[]" type="checkbox" value="menu" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select class="w3-border" name="menu" style="width: 100%;">
+                            <!-- BEGIN menu_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                            <!-- END menu_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr style="{DISPLAY_LANGUAGE_LIST}">
+                    <td >
+                        <label for="language">{TEXT_LANGUAGE}</label>
+                        <input id="language" name="inherit[]" type="checkbox" value="language" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td >
+                        <select class="w3-border" name="language" style="width: 100%;">
+                            <!-- BEGIN language_list_block -->
+                            <option value="{VALUE}"{SELECTED} style="background: {FLAG_LANG_ICONS} no-repeat center left; padding-left: 20px;">{NAME}</option>
+                            <!-- END language_list_block -->
+                        </select>
+                    </td>
+                </tr>
+            <!-- insert page_code 20090904-->
+                <tr{DISPLAY_CODE_PAGE_LIST}>
+                    <td >
+                        <label title="{TEXT_LANGUAGE} {TEXT_PAGE_REORG}">{TEXT_PAGE_CODE}</label>
+                        <span></span>
+                    </td>
+                    <td class="list_page_code">
+                        <select name="page_code" class="w3-border value_page_code" style="width: 100%;">
+                            <!-- BEGIN page_code_list_block -->
+                            <option value="{VALUE}"{SELECTED} style="background: {FLAG_CODE_ICON} no-repeat center left; padding-left: 20px;">&nbsp;{PAGE_VALUE}</option>
+                            <!-- END page_code_list_block -->
+                        </select>
+                    </td>
+                </tr>
+            <!-- page code -->
+                <tr>
+                    <td>
+                        <label for="searching">{TEXT_SEARCHING}</label>
+                        <input id="searching" name="inherit[]" type="checkbox" value="searching" {DISPLAY_ADVANCED} />
+                    </td>
+                    <td>
+                        <select class="w3-border" name="searching" style="width: 100%;">
+                            <option value="1">{TEXT_ENABLED}</option>
+                            <option value="0"{SEARCHING_DISABLED}>{TEXT_DISABLED}</option>
+                        </select>
+                    </td>
+                </tr>
+<!--
+                <tr>
+                    <td>Inherit Settings:</td>
+                    <td><input name="inherit" type="checkbox" value="all"></td>
+                </tr>
+-->
+                <tr class="w3-small">
+                    <td >
+                        <input type="submit" name="submit" value="{TEXT_SAVE} {SECTION_SETTINGS}" class="btn btn-default w3-blue-wb w3-hover-green"  />
+                    </td>
+                    <td class="w3-small">
+                        <input type="submit" name="pagetree" value="{TEXT_SAVE} &amp; {TEXT_BACK}" class="btn btn-default w3-blue-wb w3-hover-green"  />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="btn btn-default w3-blue-wb w3-hover-green" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+
+    <div class="block-outer col" style="width: 45%; float: left; min-width: 30.225em; min-height: 47.425em; margin-left: 3.225em;">
+        <table class="access pages-settings"  style="width: 100%;">
+            <tbody>
+            <tr>
+            <td style="padding-left: 0.925em; padding-top: 0.525em; width: 48%;">
+                <label class="access" id="admin_groups">{TEXT_ADMINISTRATORS}</label>
+                <ul style="list-style-type: none; margin: 0; padding: 0;">
+                    <!-- BEGIN group_list_block -->
+                    <li>
+                    <input class="w3-check" type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                    <label class="w3-validate" for="admin_group_{ID}">{NAME}</label>
+                    </li>
+                    <!-- END group_list_block -->
+                </ul>
+            </td>
+            <td style="padding-left: 0.925em; padding-top: 0.525em; border-left: solid .0125em #ccc; width: 49%;">
+                <div id="allowed_viewers" style="{DISPLAY_VIEWERS}">
+                    <label class="access" id="viewing_groups">{TEXT_ALLOWED_VIEWERS}</label>
+                    <ul style="list-style-type:none;margin:0;padding:0;">
+                        <!-- BEGIN group_list_block2 -->
+                        <li>
+                        <input class="w3-check" type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+                        <label class="w3-validate" for="viewing_group_{ID}">{NAME}</label>
+                        </li>
+                        <!-- END group_list_block2 -->
+                    </ul>
+                </div>
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </div>
+</form>
+<script src="{ADMIN_URL}/pages/page_settings.js" type="text/javascript"></script>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/preferences.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/preferences.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/preferences.htt	(revision 2)
@@ -0,0 +1,123 @@
+<!--
+ @version         $Id: preferences.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<h2>{HEADING_MY_SETTINGS}</h2>
+<div class="block-outer" style="padding: 0.825em;">
+<div class="content_box">
+    <form name="{FORM_NAME}" id="{FORM_NAME}" action="{ACTION_URL}" method="post">
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_USERNAME}:</label><br />
+                </div>
+                <div class="c60l btn-info" style="line-height: 1;">
+                    <div class="w3-disabled w3-border" id="username" name="username">{USERNAME}</div><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_DISPLAY_NAME}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input class="w3-border" type="text" id="display_name" name="display_name" value="{DISPLAY_NAME}" autocomplete="off" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_LANGUAGE}:</label><br />
+                </div>
+                <div class="c60l">
+                <select class="w3-border" name="language" id="language">
+                    <!-- BEGIN language_list_block -->
+                        <option value="{CODE}"{SELECTED} style="background: url({FLAG}.png) no-repeat center left; padding-left: 20px;">{NAME} ({CODE})</option>
+                    <!-- END language_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_TIMEZONE}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select class="w3-border" name="timezone" id="timezone">
+                        <!-- BEGIN timezone_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END timezone_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_DATE_FORMAT}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select class="w3-border" name="date_format" id="date_format">
+                        <!-- BEGIN date_format_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END date_format_list_block -->
+                    </select>
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_TIME_FORMAT}:</label><br />
+                </div>
+                <div class="c60l">
+                    <select class="w3-border" name="time_format" id="time_format">
+                        <!-- BEGIN time_format_list_block -->
+                            <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                        <!-- END time_format_list_block -->
+                    </select>
+                </div>
+            </div>
+
+            <hr />
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_EMAIL}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input class="w3-border" type="text" id="email" name="email" value="{EMAIL}" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_NEW_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input class="w3-border" type="password" id="new_password_1" name="new_password_1" value="{EMPTY_STRING}" autocomplete="off" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_RETYPE_NEW_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input class="w3-border" type="password" id="new_password_2" name="new_password_2" value="{EMPTY_STRING}" autocomplete="off" /><br />
+                </div>
+            </div>
+            <div class="subcolumns">
+                <div class="c25l">
+                    <label>{TEXT_NEED_CURRENT_PASSWORD}:</label><br />
+                </div>
+                <div class="c60l">
+                    <input class="w3-border" type="password" id="current_password" name="current_password" value="{EMPTY_STRING}" autocomplete="off" /><br />
+                </div>
+            </div>
+            <div class="subcolumns save_section">
+                <div class="c60l">
+                    <input type="submit" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" id="submitBtn" name="submit" value="{TEXT_SAVE}" />
+                    <input type="reset" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" id="resetBtn" name="reset" value="{TEXT_RESET}" />
+                </div>
+                <div class="c25l">&nbsp;</div>
+            </div>
+        {FTAN}
+    </form>
+</div>
+</div>
+<script>
+window.onload = function(){
+ document.getElementById("new_password_1").value = "";
+}
+</script>
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/settings.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/settings.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/settings.htt	(revision 2)
@@ -0,0 +1,837 @@
+<!--
+ @version         $Id: settings.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+    <script src="{WB_URL}/modules/{WYSIWYG_EDITOR}/ckeditor/ckeditor.js"></script>
+    <script>
+        var editor = [], html;
+        function createEditor(elm) {
+            if ( editor[elm] ){return;}
+            html = document.getElementById( 'website_'+elm ).value;
+//console.log(html);
+            // Create a new editor instance inside the  element,
+            // setting its value to html.
+            editor[elm] = CKEDITOR.replace( 'website_'+elm,
+                              {
+                                customConfig: '{THEME_URL}/ckeditor_config/settings_config.js'
+                              }
+                          );
+
+            // Update button states.
+            document.getElementById( 'remove_'+elm ).style.width = '25%';
+            document.getElementById( 'remove_'+elm ).style.display = 'inline';
+            document.getElementById( 'create_'+elm ).style.display = 'none';
+            // Show  with "Edited Content".
+            document.getElementById( 'website_'+elm ).style.display = 'none';
+        }
+
+        function removeEditor(elm) {
+            if ( !editor[elm] ){return;}
+            // Retrieve the editor content. In an Ajax application this data would be
+            // sent to the server or used in any other way.
+            // Retrieve the editor content. In an Ajax application this data would be
+            // sent to the server or used in any other way.
+            html = editor[elm].getData();
+            // Update  with "Edited Content".
+            document.getElementById( 'website_'+elm ).innerHTML = html;
+            // Show  with "Edited Content".
+            document.getElementById( 'website_'+elm ).style.display = 'block';
+            // Update button states.
+            document.getElementById( 'remove_'+elm ).style.display = 'none';
+            document.getElementById( 'create_'+elm ).style.display = 'inline';
+
+            // Destroy the editor.
+            editor[elm].destroy();
+            editor[elm] = null;
+        }
+    </script>
+
+<div class="Settings" >
+    <form name="Settings" id="Settings" action="save.php" method="post">
+        <input type="hidden" name="advanced" value="{ADVANCED_VALUE}" />
+        {FTAN}
+        <div class="block-outer" style="padding: 0.825em;">
+            <table class="settings_table">
+                <tbody class="value_label">
+                <tr>
+                    <td colspan="3"><h2>{HEADING_GENERAL_SETTINGS}</h2></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_TITLE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="text" name="website_title" value="{WEBSITE_TITLE}" />
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_DESCRIPTION}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="website_description" cols="50" rows="3">{WEBSITE_DESCRIPTION}</textarea>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_KEYWORDS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="website_keywords" cols="50" rows="3" >{WEBSITE_KEYWORDS}</textarea>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_HEADER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" id="website_header" name="website_header" cols="80" rows="8">{WEBSITE_HEADER}</textarea>
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="createEditor('header');" value="Editor {TEXT_ENABLE}" id="create_header" type="button" style="width: 25%;">
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="removeEditor('header');" value="Editor {TEXT_DISABLE}" id="remove_header" style="display:none; width: 25%;" type="button" >
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_FOOTER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" id="website_footer" name="website_footer" cols="80" rows="5">{WEBSITE_FOOTER}</textarea>
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="createEditor('footer');" value="Editor {TEXT_ENABLE}" id="create_footer" type="button" style="width: 25%;">
+                        <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="removeEditor('footer');" value="Editor {TEXT_DISABLE}" id="remove_footer" style="display:none; width: 25%;" type="button" >
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WEBSITE_SIGNATURE}:</td>
+                    <td class="setting_value" colspan="2">
+                <!-- BEGIN show_website_signature_block -->
+                            <textarea class="w3-border" id="website_signature" name="website_signature" cols="50" rows="5">{WEBSITE_SIGNATURE}</textarea>
+                <!-- END show_website_signature_block -->
+                         {EDITOR_WEBSITE_SIGNATURE}
+                    </td>
+                </tr>
+                <!-- BEGIN show_page_level_limit_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_PAGE_LEVEL_LIMIT}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="page_level_limit">
+                        <!-- BEGIN page_level_limit_list_block -->
+                            <option value="{NUMBER}"{SELECTED}>{NUMBER}</option>
+                        <!-- END page_level_limit_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- END show_page_level_limit_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_PAGE_TRASH}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="page_trash" id="page_trash_inline" style="width: 14px; height: 14px;" value="inline"{PAGE_TRASH_INLINE} />
+                        <label for="page_trash_inline">{TEXT_ENABLED}</label>
+                        <input type="radio" name="page_trash" id="page_trash_disabled" style="width: 14px; height: 14px;" value="disabled"{PAGE_TRASH_DISABLED} />
+                        <label for="page_trash_disabled">{TEXT_DISABLED}</label>
+                        <div style="margin: 0; padding: 0;{DISPLAY_PAGE_TRASH_SEPARATE}">
+                            <input type="radio" name="page_trash" id="page_trash_separate" style="width: 14px; height: 14px;" value="separate"{PAGE_TRASH_SEPARATE} />
+                            <label for="page_trash_separate">{TEXT_SEPARATE}</label>
+                        </div>
+                    </td>
+                </tr>
+                <!-- BEGIN show_checkbox_1_block -->
+                <tr{DISPLAY_ADVANCED}>
+                        <td class="setting_name">{TEXT_PAGE_LANGUAGES}:</td>
+                        <td class="setting_value" colspan="2">
+                                <input type="radio" name="page_languages" id="page_languages_true" style="width: 14px; height: 14px;" value="true"{PAGE_LANGUAGES_ENABLED} />
+                                <label for="page_languages_true">{TEXT_ENABLED}</label>
+                                <input type="radio" name="page_languages" id="page_languages_false" style="width: 14px; height: 14px;" value="false"{PAGE_LANGUAGES_DISABLED} />
+                                <label for="page_languages_false">{TEXT_DISABLED}</label>
+                        </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_MULTIPLE_MENUS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="multiple_menus" id="multiple_menus_true" style="width: 14px; height: 14px;" value="true"{MULTIPLE_MENUS_ENABLED} />
+                        <label for="multiple_menus_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="multiple_menus" id="multiple_menus_false" style="width: 14px; height: 14px;" value="false"{MULTIPLE_MENUS_DISABLED} />
+                        <label for="multiple_menus_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- END show_checkbox_1_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_HOME_FOLDERS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="home_folders" id="home_folders_true" style="width: 14px; height: 14px;" value="true"{HOME_FOLDERS_ENABLED} />
+                        <label for="home_folders_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="home_folders" id="home_folders_false" style="width: 14px; height: 14px;" value="false"{HOME_FOLDERS_DISABLED} />
+                        <label for="home_folders_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- BEGIN show_checkbox_2_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_MANAGE_SECTIONS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="manage_sections" id="manage_sections_true" style="width: 14px; height: 14px;" value="true"{MANAGE_SECTIONS_ENABLED} />
+                        <label for="manage_sections_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="manage_sections" id="manage_sections_false" style="width: 14px; height: 14px;" value="false"{MANAGE_SECTIONS_DISABLED} />
+                        <label for="manage_sections_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_SECTION_BLOCKS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="section_blocks" id="section_blocks_true" style="width: 14px; height: 14px;" value="true"{SECTION_BLOCKS_ENABLED} />
+                        <label for="section_blocks_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="section_blocks" id="section_blocks_false" style="width: 14px; height: 14px;" value="false"{SECTION_BLOCKS_DISABLED} />
+                        <label for="section_blocks_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- END show_checkbox_2_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_INTRO_PAGE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="intro_page" id="intro_page_true" style="width: 14px; height: 14px;" value="true"{INTRO_PAGE_ENABLED} />
+                        <label for="intro_page_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="intro_page" id="intro_page_false" style="width: 14px; height: 14px;" value="false"{INTRO_PAGE_DISABLED} />
+                        <label for="intro_page_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- BEGIN show_checkbox_3_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_HOMEPAGE_REDIRECTION}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="homepage_redirection" id="homepage_redirection_true" style="width: 14px; height: 14px;" value="true"{HOMEPAGE_REDIRECTION_ENABLED} />
+                        <label for="homepage_redirection_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="homepage_redirection" id="homepage_redirection_false" style="width: 14px; height: 14px;" value="false"{HOMEPAGE_REDIRECTION_DISABLED} />
+                        <label for="homepage_redirection_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_SMART_LOGIN}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="smart_login" id="smart_login_true" style="width: 14px; height: 14px;" value="true"{SMART_LOGIN_ENABLED} />
+                        <label for="smart_login_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="smart_login" id="smart_login_false" style="width: 14px; height: 14px;" value="false"{SMART_LOGIN_DISABLED} />
+                        <label for="smart_login_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- END show_checkbox_3_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_LOGIN}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="frontend_login" id="frontend_login_true" style="width: 14px; height: 14px;" value="true"{PRIVATE_ENABLED} />
+                        <label for="frontend_login_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="frontend_login" id="frontend_login_false" style="width: 14px; height: 14px;" value="false"{PRIVATE_DISABLED} />
+                        <label for="frontend_login_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <!-- BEGIN show_redirect_timer_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_REDIRECT_AFTER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="text" name="redirect_timer" value="{REDIRECT_TIMER}" style="width:50%;" />
+                        <label>&nbsp;&nbsp;( <strong>-1</strong> = {TEXT_DISABLED}, <strong>0 -10000</strong> )</label><br />
+                    </td>
+                </tr>
+                <!-- END show_redirect_timer_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_SIGNUP}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="frontend_signup">
+                            <option value="false">{TEXT_DISABLED}</option>
+                            <!-- BEGIN group_list_block -->
+                                <option value="{ID}" {SELECTED}>{NAME}</option>
+                            <!-- END group_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- BEGIN show_php_error_level_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_PHP_ERROR_LEVEL}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="er_level">
+                            <option value="">{TEXT_PLEASE_SELECT}...</option>
+                            <!-- BEGIN error_reporting_list_block -->
+                                <option value="{VALUE}"{SELECTED}>{NAME}</option>
+                            <!-- END error_reporting_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- END show_php_error_level_block -->
+                <!-- BEGIN show_wysiwyg_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_WYSIWYG_STYLE}:</td>
+                    <td class="setting_value" colspan="2"><input type="text" name="wysiwyg_style" value="{WYSIWYG_STYLE}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_WYSIWYG_EDITOR}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="wysiwyg_editor">
+                        <!-- BEGIN wysiwyg_list_block -->
+                            <option value="{FILE}"{SELECTED}>{NAME}</option>
+                        <!-- END wysiwyg_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- END show_wysiwyg_block -->
+                <tr>
+                    <td class="setting_name">&nbsp;</td>
+                    <td class="setting_value_permissions">
+                        <input type="submit" name="submit" value="{TEXT_SAVE}" class="save btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="reset btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                    </td>
+                    <td class="setting_value_permissions" style="text-align: right;">
+                        <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON} btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4">{ADVANCED_BUTTON}</button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class="block-outer" style="padding: 0.825em;">
+            <table class="settings_table">
+                <tbody class="value_label">
+                <tr>
+                    <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_DEFAULT_SETTINGS}</h2></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_LANGUAGE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_language">
+                            <!-- BEGIN language_list_block -->
+                            <option value="{CODE}"{SELECTED} style="background: url({FLAG}.png) no-repeat center left; padding-left: 20px;">{NAME} ({CODE})</option>
+                            <!-- END language_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- BEGIN show_charset_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_CHARSET}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_charset">
+                                <option value="">{TEXT_PLEASE_SELECT}...</option>
+                            <!-- BEGIN charset_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                            <!-- END charset_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- END show_charset_block -->
+                <tr>
+                    <td class="setting_name">{TEXT_TIMEZONE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_timezone">
+                            <option value="0">{TEXT_PLEASE_SELECT}...</option>
+                            <!-- BEGIN timezone_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                            <!-- END timezone_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_DATE_FORMAT}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_date_format">
+                            <option value="M d Y">{TEXT_PLEASE_SELECT}...</option>
+                            <!-- BEGIN date_format_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                            <!-- END date_format_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_TIME_FORMAT}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_time_format">
+                            <option value="g:i A">{TEXT_PLEASE_SELECT}...</option>
+                            <!-- BEGIN time_format_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{NAME}</option>
+                            <!-- END time_format_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_TEMPLATE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_template">
+                        <!-- BEGIN template_list_block -->
+                            <option value="{FILE}"{SELECTED}>{NAME}</option>
+                        <!-- END template_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_THEME}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="default_theme">
+                        <!-- BEGIN theme_list_block -->
+                            <option value="{FILE}"{SELECTED}>{NAME}</option>
+                        <!-- END theme_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">&nbsp;</td>
+                    <td class="setting_value_permissions">
+                        <input type="submit" name="submit" value="{TEXT_SAVE}" class="save btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="reset btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                    </td>
+                    <td class="setting_value_permissions" style="text-align: right;">
+                        <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON} btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4">{ADVANCED_BUTTON}</button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class="block-outer" style="padding: 0.825em;">
+            <table class="settings_table">
+                <tbody class="value_label">
+                <tr>
+                    <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_SEARCH_SETTINGS}</h2></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_VISIBILITY}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="search">
+                            <option value="public">{TEXT_PUBLIC}</option>
+                            <option value="private" {PRIVATE_SEARCH}>{TEXT_PRIVATE}</option>
+                            <option value="registered" {REGISTERED_SEARCH}>{TEXT_REGISTERED}</option>
+                            <option value="none" {NONE_SEARCH}>{TEXT_NONE}</option>
+                        </select>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_TEMPLATE}:</td>
+                    <td class="setting_value" colspan="2">
+                        <select class="w3-border" name="search_template">
+                        <!-- BEGIN search_template_list_block -->
+                            <option value="{FILE}"{SELECTED}>{NAME}</option>
+                        <!-- END search_template_list_block -->
+                        </select>
+                    </td>
+                </tr>
+                <!-- BEGIN show_search_block -->
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_HEADER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="search_header" style="height: 100px;" cols="50" rows="3">{SEARCH_HEADER}</textarea>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_RESULTS_HEADER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="search_results_header" cols="50" rows="3">{SEARCH_RESULTS_HEADER}</textarea>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_RESULTS_LOOP}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="search_results_loop" cols="50" rows="3">{SEARCH_RESULTS_LOOP}</textarea>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_RESULTS_FOOTER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="search_results_footer" cols="50" rows="3">{SEARCH_RESULTS_FOOTER}</textarea>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_NO_RESULTS}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="text" name="search_no_results" value="{SEARCH_NO_RESULTS}" />
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_FOOTER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <textarea class="w3-border" name="search_footer" cols="50" rows="3">{SEARCH_FOOTER}</textarea>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_MODULE_ORDER}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="text" name="search_module_order" value="{SEARCH_MODULE_ORDER}" />
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_MAX_EXCERPT}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="text" name="search_max_excerpt" value="{SEARCH_MAX_EXCERPT}" />
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_TIME_LIMIT}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="text" name="search_time_limit" value="{SEARCH_TIME_LIMIT}" />
+                    </td>
+                </tr>
+                <!-- END show_search_block -->
+                <!-- BEGIN show_access_block -->
+                <tr>
+                    <td class="setting_name">&nbsp;</td>
+                    <td class="setting_value_permissions">
+                        <input type="submit" name="submit" value="{TEXT_SAVE}" class="save btn btn-default btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="reset btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                    </td>
+                    <td class="setting_value_permissions" style="text-align: right;">
+                        <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON} btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4">{ADVANCED_BUTTON}</button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class="block-outer" style="padding: 0.825em;">
+            <table class="settings_table" >
+                <tbody class="value_label">
+                <tr>
+                    <td colspan="3" style="padding-top: 10px;"><h2>{HEADING_SERVER_SETTINGS}</h2></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">Debug Mode:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="debug" id="debug_true" style="width: 14px; height: 14px;" value="true"{DEBUG_ENABLED} />
+                        <label for="debug_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="debug" id="debug_false" style="width: 14px; height: 14px;" value="false"{DEBUG_DISABLED} />
+                        <label for="debug_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">Token_Fingerprint:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="sec_token_fingerprint" id="sec_token_fingerprint_true" style="width: 14px; height: 14px;" value="true"{FINGERPRINT_ENABLED} />
+                        <label for="sec_token_fingerprint_true">{TEXT_ENABLED}</label>
+                        <input type="radio" name="sec_token_fingerprint" id="sec_token_fingerprint_false" style="width: 14px; height: 14px;" value="false"{FINGERPRINT_DISABLED} />
+                        <label for="sec_token_fingerprint_false">{TEXT_DISABLED}</label>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">Token_Netmask4:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" style="width: 10%;" type="text" name="sec_token_netmask4" value="{SEC_TOKEN_NETMASK4}" /> <span> (0-32 // 0 = off  default = 24) </span>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">Token_Netmask6:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" style="width: 10%;" type="text" name="sec_token_netmask6" value="{SEC_TOKEN_NETMASK6}" /> <span> (0-128 // 0 = off  default = 64) </span>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">Token_Life_Time:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" style="width: 10%;" type="text" name="sec_token_life_time" value="{value}" /> <span>  ( 30min | 45min | 60min[default] | 120min ) </span>
+                </tr>
+                <tr>
+                <td colspan="3"></td>
+                </tr>
+
+                <tr>
+                    <td class="setting_name">{TEXT_SERVER_OPERATING_SYSTEM}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="operating_system" id="operating_system_linux"  style="width: 14px; height: 14px;" value="linux"{LINUX_SELECTED} />
+                        <label for="operating_system_linux" >{TEXT_LINUX_UNIX_BASED}</label>
+                        <input type="radio" name="operating_system" id="operating_system_windows"  style="width: 14px; height: 14px;" value="windows"{WINDOWS_SELECTED} />
+                        <label for="operating_system_windows" >{TEXT_WINDOWS}</label>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name"><div id="{BASIC_FILE_PERMS_ID}1" style="margin: 0; padding: 0;">&nbsp;</div></td>
+                    <td class="setting_value" colspan="2" >
+                        <div id="{BASIC_FILE_PERMS_ID}2" style="margin: 0; padding: 0;">
+                            <input type="checkbox" name="world_writeable" id="world_writeable" style="width: 14px; height: 14px;" value="true"{WORLD_WRITEABLE_SELECTED} />
+                            <label for="world_writeable">
+                                {TEXT_WORLD_WRITEABLE_FILE_PERMISSIONS} (777)
+                            </label>
+                            <span class="warning">({WORLD_WRITEABLE_WARNING})</span>
+                        </div>
+                        <div id="{BASIC_FILE_PERMS_ID}3" style="margin: 0; padding: 0;"></div>
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED} style="line-height: 1.925em;">
+                    <td class="setting_name"><div id="{ADVANCED_FILE_PERMS_ID}1" style="margin: 0; padding: 0;">{TEXT_FILESYSTEM_PERMISSIONS}:</div></td>
+                    <td class="setting_value_permissions" id="file_mode" colspan="2">
+                      <div class="w3-content ">
+                        <dl class="ui-helper-clearfix" id="{ADVANCED_FILE_PERMS_ID}2" {DISPLAY_CHMOD}>
+                            <dt></dt>
+                            <dd class="setting_value">
+                            <div class="w3-col m5 chmod chmodbox block-outer" style="white-space: nowrap; float: left;">
+                            <h4 >{TEXT_FILES}</h4>
+                                <div >
+                                    <div class="spacer"></div>
+                                    <div class="labelbox">
+                                        <label>{TEXT_USER}</label>
+                                        <label>{TEXT_GROUP}</label>
+                                        <label>{TEXT_OTHERS}</label>
+                                    </div>
+                                    <div class="boxes">
+                                        <label>{TEXT_READ}:</label>
+                                        <label>{TEXT_WRITE}:</label>
+                                        <label>{TEXT_EXECUTE}:</label>
+                                    </div>
+                                    <div id="file-user" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_u_r" id="file_u_r" class="cb" {FILE_U_R_CHECKED}>
+                                            <label for="file_u_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_u_w" id="file_u_w" class="cb"{FILE_U_W_CHECKED}>
+                                            <label for="file_u_w"></label>
+                                        </div>
+                                        <div class="checkboxThree disabled">
+                                            <input type="checkbox" value="true" name="file_u_e" id="file_u_e" disabled="disabled" class="cb"{FILE_U_E_CHECKED}>
+                                            <label for="file_u_e"></label>
+                                        </div>
+                                    </div>
+                                    <div id="file-group" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_g_r" id="file_g_r" class="cb"{FILE_G_R_CHECKED}>
+                                            <label for="file_g_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_g_w" id="file_g_w" class="cb"{FILE_G_W_CHECKED}>
+                                            <label for="file_g_w"></label>
+                                         </div>
+                                        <div class="checkboxThree disabled">
+                                             <input type="checkbox" value="true" name="file_g_e" id="file_g_e" disabled="disabled" class="cb"{FILE_G_E_CHECKED}>
+                                             <label for="file_g_e"></label>
+                                         </div>
+                                    </div>
+                                    <div id="file-other" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_o_r" id="file_o_r" class="cb"{FILE_O_R_CHECKED}>
+                                            <label for="file_o_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="file_o_w" id="file_o_w" class="cb"{FILE_O_W_CHECKED}>
+                                            <label for="file_o_w"></label>
+                                        </div>
+                                        <div class="checkboxThree disabled">
+                                            <input type="checkbox" value="true" name="file_o_e" id="file_o_e"  disabled="disabled" class="cb"{FILE_O_E_CHECKED}>
+                                            <label for="file_o_e"></label>
+                                        </div>
+                                    </div>
+                                    <div class="clear reformed-form">
+                                        <h4>chmod Value:</h4>
+                                        <input type="text" readonly="" value="{STRING_FILE_MODE}" name="chmodFile" id="chmodFileValue" class="formInput">
+                                        <input type="text" readonly="" value="---------" name="sym_chmodFile" id="chmodFileCode" class="formInput">
+                                    </div>
+                                </div>
+                              </div>
+
+                            <div class="w3-col m5 chmod chmodbox block-outer" id="{ADVANCED_FILE_PERMS_ID}3" style="white-space: nowrap;float: left;">
+                            <h4 >{TEXT_DIRECTORIES}</h4>
+                                <div >
+                                    <div class="spacer"></div>
+                                    <div class="labelbox">
+                                        <label>{TEXT_USER}</label>
+                                        <label>{TEXT_GROUP}</label>
+                                        <label>{TEXT_OTHERS}</label>
+                                    </div>
+                                    <div class="boxes">
+                                        <label>{TEXT_READ}:</label>
+                                        <label>{TEXT_WRITE}:</label>
+                                        <label>{TEXT_EXECUTE}:</label>
+                                    </div>
+                                    <div id="dir-user" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_u_r" id="dir_u_r" class="cb" {DIR_U_R_CHECKED}>
+                                            <label for="dir_u_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_u_w" id="dir_u_w" class="cb"{DIR_U_W_CHECKED}>
+                                            <label for="dir_u_w"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_u_e" id="dir_u_e" class="cb"{DIR_U_E_CHECKED}>
+                                            <label for="dir_u_e"></label>
+                                        </div>
+                                    </div>
+                                    <div id="dir-group" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_g_r" id="dir_g_r" class="cb"{DIR_G_R_CHECKED}>
+                                            <label for="dir_g_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_g_w" id="dir_g_w" class="cb"{DIR_G_W_CHECKED}>
+                                            <label for="dir_g_w"></label>
+                                         </div>
+                                        <div class="checkboxThree">
+                                             <input type="checkbox" value="true" name="dir_g_e" id="dir_g_e" class="cb"{DIR_G_E_CHECKED}>
+                                             <label for="dir_g_e"></label>
+                                         </div>
+                                    </div>
+                                    <div id="dir-other" class="boxes">
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_o_r" id="dir_o_r" class="cb"{DIR_O_R_CHECKED}>
+                                            <label for="dir_o_r"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_o_w" id="dir_o_w" class="cb"{DIR_O_W_CHECKED}>
+                                            <label for="dir_o_w"></label>
+                                        </div>
+                                        <div class="checkboxThree">
+                                            <input type="checkbox" value="true" name="dir_o_e" id="dir_o_e" class="cb"{DIR_O_E_CHECKED}>
+                                            <label for="dir_o_e"></label>
+                                        </div>
+                                    </div>
+                                    <div class="clear reformed-form">
+                                        <h4>chmod Value:</h4>
+                                        <input type="text" readonly="" value="{STRING_DIR_MODE}" name="chmodDir" id="chmodDirValue" class="formInput">
+                                        <input type="text" readonly="" value="---------" name="sym_chmodDir" id="chmodDirCode" class="formInput">
+                                    </div>
+                                </div>
+                            </div>
+                            </dd>
+                        </dl>
+                      </div>
+                    </td>
+                </tr>
+
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_PAGES_DIRECTORY}:</td>
+                    <td class="setting_value" colspan="2">
+                <!-- BEGIN input_pages_directory_block -->
+                    <input type="text" name="pages_directory" value="{PAGES_DIRECTORY}" />
+                <!-- END input_pages_directory_block -->
+                <!-- BEGIN show_pages_directory_block -->
+                    <button type="button" style="width: 100%; text-align: left; padding: 0; cursor: text; " class="btn" >{PAGES_DIRECTORY}</button>
+                <!-- END show_pages_directory_block -->
+                    </td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_MEDIA_DIRECTORY}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="media_directory" value="{MEDIA_DIRECTORY}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_PAGE_EXTENSION}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="page_extension" value="{PAGE_EXTENSION}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_PAGE_SPACER}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="page_spacer" value="{PAGE_SPACER}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_RENAME_FILES_ON_UPLOAD}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="rename_files_on_upload" value="{RENAME_FILES_ON_UPLOAD}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_SESSION_IDENTIFIER}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="app_name" value="{APP_NAME}" /></td>
+                </tr>
+                <tr{DISPLAY_ADVANCED}>
+                    <td class="setting_name">{TEXT_SEC_ANCHOR}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" name="sec_anchor" value="{SEC_ANCHOR}" /></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">&nbsp;</td>
+                    <td class="setting_value_permissions">
+                        <input type="submit" name="submit" value="{TEXT_SAVE}" class="save btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="reset btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                    </td>
+                    <td class="setting_value_permissions" style="text-align: right; white-space: nowrap;">
+                        <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON} btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4">{ADVANCED_BUTTON}</button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+        <div class="block-outer" style="padding: 0.825em;">
+            <table class="settings_table" >
+                <tbody class="value_label">
+                <!-- BASIC MAILER SETTINGS -->
+                <!-- https://de.ssl-tools.net/mailservers -->
+                <tr>
+                    <td colspan="3" style="padding-top: 10px;">
+                        <h2>{HEADING_WBMAILER_SETTINGS}</h2>
+                        <div class="w3-panel w3-pale-green w3-leftbar w3-border-green" style="min-height: 4.225em; width: 100%;" ><p>{TEXT_WBMAILER_DEFAULT_SETTINGS_NOTICE}</p></div>
+                    </td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WBMAILER_DEFAULT_SENDER_MAIL}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" style="width: 250px" name="server_email" value="{SERVER_EMAIL}" /></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WBMAILER_DEFAULT_SENDER_NAME}:</td>
+                    <td class="setting_value" colspan="2"><input class="w3-border" type="text" style="width: 250px" name="wbmailer_default_sendername" value="{WBMAILER_DEFAULT_SENDERNAME}" /></td>
+                </tr>
+                <tr>
+                    <td class="setting_name">{TEXT_WBMAILER_FUNCTION}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input type="radio" name="wbmailer_routine" id="wbmailer_routine_phpmail" style="width: 14px; " value="phpmail"{PHPMAIL_SELECTED} />
+                        <label for="wbmailer_routine_phpmail" >{TEXT_WBMAILER_PHP}</label>
+                        <input type="radio" name="wbmailer_routine" id="wbmailer_routine_smtp" style="width: 14px; " value="smtp"{SMTPMAIL_SELECTED} />
+                        <label for="wbmailer_routine_smtp" >{TEXT_WBMAILER_SMTP}</label>
+                    </td>
+                </tr>
+                <!-- MORE ADVANCED SMTP MAILER SETTINGS -->
+                <tr id="row_wbmailer_smtp_settings"{SMTP_VISIBILITY}>
+                    <td colspan="3" style="padding-top: 10px;">
+                        <div class="w3-panel w3-pale-green w3-leftbar w3-border-green" style="min-height: 4.225em; width: 100%;" ><p>{TEXT_WBMAILER_NOTICE}</p></div>
+                    </td>
+                </tr>
+                <tr id="row_wbmailer_smtp_host"{SMTP_VISIBILITY}>
+                    <td class="setting_name">{TEXT_WBMAILER_SMTP_HOST}:</td>
+                    <td class="setting_value" colspan="2">
+                    <input class="w3-border" type="text" style="width: 250px" name="wbmailer_smtp_host" value="{WBMAILER_SMTP_HOST}" />
+                    </td>
+                </tr>
+
+                <tr id="row_wbmailer_smtp_port"{SMTP_VISIBILITY}>
+                    <td class="setting_name">Smtp Port:</td>
+                    <td class="setting_value" >
+                        <select class="w3-border" name="wbmailer_smtp_port" id="wbmailer_smtp_port" style="width: 255px;">
+                            <option value="25">{TEXT_PLEASE_SELECT}</option>
+                            <!-- BEGIN smtp_port_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{PNAME}</option>
+                            <!-- END smtp_port_list_block -->
+                        </select>
+                    </td>
+                    <td></td>
+                </tr>
+                <!--  -->
+                <tr id="row_wbmailer_smtp_auth_mode"{SMTP_VISIBILITY}>
+                    <td class="setting_name">{TEXT_WBMAILER_SMTP_AUTH}:</td>
+                    <td class="setting_value" colspan="2">
+                        <input class="w3-border" type="checkbox" disabled="disabled" name="wbmailer_smtp_auth" id="wbmailer_smtp_auth" value="1" {SMTP_AUTH_SELECTED} style="width: 14px; " />
+                        <label for="wbmailer_smtp_auth">({TEXT_WBMAILER_SMTP_AUTH_NOTICE})</label>
+                    </td>
+                </tr>
+
+                <tr id="row_wbmailer_smtp_secure"{SMTP_VISIBILITY}>
+                    <td class="setting_name">Smtp Secure:</td>
+                    <td class="setting_value" >
+                        <select class="w3-border" name="wbmailer_smtp_secure" id="wbmailer_smtp_secure" style="width: 255px;">
+                            <option value="">{TEXT_PLEASE_SELECT}</option>
+                            <!-- BEGIN smtp_secure_list_block -->
+                                <option value="{VALUE}" {SELECTED}>{SNAME}</option>
+                            <!-- END smtp_secure_list_block -->
+                        </select>
+                    </td>
+                    <td></td>
+                </tr>
+
+                <tr id="row_wbmailer_smtp_username"{SMTP_VISIBILITY}>
+                    <td class="setting_name">{TEXT_WBMAILER_SMTP_USERNAME}:</td>
+                    <td class="setting_value" colspan="2">
+                    <input class="w3-border" type="text" style="width: 250px" name="wbmailer_smtp_username" value="{WBMAILER_SMTP_USERNAME}" />
+                    </td>
+                </tr>
+                <tr id="row_wbmailer_smtp_password"{SMTP_VISIBILITY}>
+                    <td class="setting_name">{TEXT_WBMAILER_SMTP_PASSWORD}:</td>
+                    <td class="setting_value" colspan="2">
+                    <input class="w3-border" type="password" style="width: 250px" name="wbmailer_smtp_password" value="{WBMAILER_SMTP_PASSWORD}" />
+                    </td>
+                </tr>
+                <!-- END show_access_block -->
+                <tr>
+                    <td class="setting_name">&nbsp;</td>
+                    <td class="setting_value_permissions">
+                        <input type="submit" name="submit" value="{TEXT_SAVE}" class="save btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                        <input type="reset" name="reset" value="{TEXT_RESET}" class="reset btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" />
+                    </td>
+                    <td class="setting_value_permissions" style="text-align: right; white-space: nowrap;">
+                        <button type="button" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" class="{DISPLAY_ADVANCED_BUTTON} btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4">{ADVANCED_BUTTON}</button>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </div>
+    </form>
+</div>
+<hr />
+<div style="width: 100%; ">
+    <div class="w3-panel w3-pale-red w3-leftbar w3-border-red" style="min-height: 4.225em; width: 100%;" ><p>{MODE_SWITCH_WARNING}</p></div>
+    <button type="button" class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4 {DISPLAY_ADVANCED_BUTTON}" title="{MODE_SWITCH_WARNING}" onclick="window.location = '{ADVANCED_LINK}'; return false;" >{ADVANCED_BUTTON}</button>
+</div>
+<!-- BEGIN show_chmod_js_block -->
+<script src="{THEME_URL}/js/chmod.js" ></script>
+<!-- END show_chmod_js_block -->
+<!-- BEGIN show_setting_js_block -->
+<script src="{THEME_URL}/js/setting.js" ></script>
+<!-- END show_setting_js_block -->
+<!-- END main_block -->
Index: trunk/templates/DefaultTheme/templates/success.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/success.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/success.htt	(revision 2)
@@ -0,0 +1,14 @@
+<!--
+ @version         $Id: success.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div class="msg-box rounded" style="margin: 1.225em auto;">
+    <p>{MESSAGE}</p>
+<!-- BEGIN show_redirect_block -->
+ <script type="text/javascript">
+  setTimeout("location.href='{REDIRECT}'", {REDIRECT_TIMER});
+ </script>
+<!-- END show_redirect_block -->
+<input type="button" name="submit" class="btn btn-default" value="{BACK}" onclick="window.location = '{REDIRECT}';" />
+</div>
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/sysInfo.twig
===================================================================
--- trunk/templates/DefaultTheme/templates/sysInfo.twig	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/sysInfo.twig	(revision 2)
@@ -0,0 +1,180 @@
+{#
+ @version         $Id$
+#}
+<!-- BEGIN mainBlock -->
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8" />
+<link rel="stylesheet" href="{{ THEME_URL }}css/theme.css" />
+<link rel="stylesheet"
+      href="{{ THEME_URL }}css/sweetalert.css"
+      id="alertifyCSS" />
+<script src="{{ WB_URL }}include/jquery/jquery-min.js" type="text/javascript"></script>
+<script src="{{ THEME_URL }}js/sweetalert-dev.js" type="text/javascript"></script>
+
+  <head>
+<style type="text/css">
+<!--
+body { background: #EAEAEA; }
+.group {
+  background: #f3f3f3 none repeat scroll 0 0;
+  border: 1px solid #999;
+  border-radius: 4px;
+  box-shadow: 2px 2px 5px #ccc;
+  margin-bottom: 1em;
+  padding-bottom: 1em;
+}
+.group ul { padding-left: 0.825em; margin-bottom: 0.825em; }
+.group h2 {
+  background-color: #5C9AB8;
+  box-shadow: 1px 1px 15px #999 inset;
+  color: #fff;
+  font-size: 1.6em;
+  font-weight: normal;
+  margin-top: 0;
+  padding: 0.1em 0.3em;
+  text-shadow: 0 1px 0 #777;
+}
+.icon {
+  background-image: url("{{ THEME_URL }}images/help_16.png") !important;
+  background-position: left top !important;
+  background-repeat: no-repeat !important;
+  height: 16px;
+  margin: 0 0 0 0.3em;
+  padding: 0 !important;
+  width: 16px;
+}
+a img {
+  border: 0 none;
+}
+img, button { vertical-align: middle; padding: 0; }
+.btn-link { background: transparent; border: none; cursor: pointer; color: #676767; font-weight: bold; }
+.btn-link:hover { color: #0A6383; }
+
+-->
+</style>
+  </head>
+  <body>
+    <div class="sysinfo-box" style="margin: 1.125em auto; width: 100%;">
+
+      <div class="group">
+        <h2>
+          Webserver
+        </h2>
+        <ul>
+          <li id="li_web_server_software">
+            Webserver Software: {{ getOsVersion }}
+          </li>
+          <li id="li_used_php_extension">
+            PHP-Erweiterung: mysqli
+            <a target="documentation" href="https://secure.php.net/manual/de/book.mysqli.php"><img class="icon ic_b_help" alt="Dokumentation" title="Dokumentation" src="{{ THEME_URL }}/images/dot.gif"></a>
+            curl
+            <a target="documentation" href="https://secure.php.net/manual/de/book.curl.php"><img class="icon ic_b_help" alt="Dokumentation" title="Dokumentation" src="{{ THEME_URL }}/images/dot.gif"></a>
+            mbstring
+            <a target="documentation" href="https://secure.php.net/manual/de/book.mbstring.php"><img class="icon ic_b_help" alt="Dokumentation" title="Dokumentation" src="{{ THEME_URL }}/images/dot.gif"></a>
+          </li>
+          <li id="li_used_wb_version">
+            PHP-Version: {{ php_version }}
+          </li>
+          <li id="li_used_php_version">
+            WebsiteBaker-Version: {{ WbVersion }}
+          </li>
+        </ul>
+      </div>
+
+      <div class="group">
+        <h2>Webspace writable folders</h2>
+          {% if aWritablePaths %}
+            <ul>
+                  {% for nane, writable in aWritablePaths %}
+                      <li style="color: {% if writable %}#207D12{% else %}#F63513{% endif %};">{{ nane }}</li>
+                  {% else %}
+                      <li><em>no path found</em></li>
+                  {% endfor %}
+            </ul>
+              {% endif %}
+      </div>
+
+      <div class="group">
+        <h2>
+          Maintenances Tools
+        </h2>
+        <form method="post">
+          <ul>
+            <li><button class="btn-link" formaction="{{ THEME_URL }}lib/rebuildAccessFiles.php" formmethod="post" >Rebuild Access Files</button></li>
+            <li><button class="btn-link" formaction="{{ THEME_URL }}lib/clearTranslateCache.php" formmethod="post">Clear Translate Cache</button></li>
+            <li><a class="btn-link" href="{{ WB_URL }}upgrade-script.php" target="_parent" >Upgrade WebsiteBaker</a></li>
+          </ul>
+        </form>
+
+      <div class="group">
+        <h2>
+          Datenbank-Server/Client
+        </h2>
+        <ul>
+          <li id="li_server_info">
+            Server: {{ server.host_info }}
+          </li>
+          <li id="li_server_version">
+            Server-Version: {{ getSqlServer }}
+          </li>
+          <li id="li_mysql_proto">
+            Protokoll-Version: {{ server.protocol_version }}
+          </li>
+          <li id="li_mysql_client_version">
+            Datenbank-Client Version: {{ client_info }}
+          </li>
+          <li id="li_mysql_client_encoding">
+            Datenbank-Client encoding: {{ client_encoding }}
+          </li>
+        </ul>
+      </div>
+
+    </div>
+
+<script type="text/javascript">
+<!--
+$("button").click(function(event) {
+    // Prevent the actual sending
+    event.preventDefault();
+    // Specify the sending form and the metadata
+    var form = $(this); // This pointer $ (this) or $ ( 'form'), if the ID form exists in the HTML ;)
+console.info(form);
+    var action = form.attr("formaction"), // attr () can either read the current contents of the specified attribute, or set a new value if a second parameter is given
+        method = form.attr("formmethod"),
+        data   = form.serialize(); // Builds the data to a string after the pattern firstname = max & lastname = Müller & alter = 42. . .
+        sDataString = '?go';
+    // The actual AJAX call
+    $.ajax({
+        url : action,
+        type : method,
+        dataType: 'json',
+        data: sDataString,
+        success: function(json_respond) {
+            if(json_respond.success === true) {
+//              swal(json_respond.message, '', "success");
+                swal({
+                  title: data,
+                  text: '<h3>'+json_respond.message+'</h3>',
+                  confirmButtonColor: "#3A6FB9",
+                  animation: "slide-from-top",
+                  closeOnConfirm: true,
+                  closeOnCancel: false,
+                  imageUrl: "{{ THEME_URL }}images/thumbs-up.jpg",
+                  html: true
+                },
+                function(isConfirm){
+                  // do nothing
+                });
+            } else {
+              swal(json_respond.message, '', "warning");
+            }
+        }
+    });
+});
+-->
+</script>
+  </body>
+
+</html>
+<!-- END mainBlock -->
\ No newline at end of file

Property changes on: trunk/templates/DefaultTheme/templates/sysInfo.twig
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/templates/templates.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/templates.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/templates.htt	(revision 2)
@@ -0,0 +1,103 @@
+<!--
+ @version         $Id: templates.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<div class="title-line">
+<table  style="margin-bottom:10px; width: 100%;">
+    <tbody>
+        <tr>
+            <td style="float: left;"></td>
+            <td style="float: right; line-height: 3.225em;">
+    <!-- BEGIN addon_module_block -->
+                <span ><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_MODULES}">{MENU_MODULES}</a></span>
+                -
+    <!-- END addon_module_block -->
+    <!-- BEGIN addon_language_block -->
+                <span ><a class="btn btn-default btn-large w3-blue-wb w3-hover-green" href="{URL_LANGUAGES}">{MENU_LANGUAGES}</a></span>
+                -
+    <!-- END addon_language_block -->
+    <!-- BEGIN addon_template_block -->
+                <span class="btn btn-default btn-large w3-blue-wb w3-disabled" style="min-width: 8.525em;">{URL_ADVANCED}</span>
+    <!-- END addon_template_block -->
+            </td>
+         </tr>
+    </tbody>
+</table>
+</div>
+
+<div class="block-outer">
+<!-- BEGIN template_install_block -->
+<form name="install" enctype="multipart/form-data" action="install.php" method="post" class="{DISPLAY_INSTALL}">
+{FTAN}
+<h2>{HEADING_INSTALL_TEMPLATE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td style="line-height: 3.525em;">
+                    <input type="file" name="userfile" size="82" />
+                    <script type="text/javascript">
+                    document.install.userfile.focus();
+                    </script>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_INSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_install_block -->
+
+<!-- BEGIN template_uninstall_block -->
+<form name="uninstall" action="uninstall.php" method="post" class="{DISPLAY_UNINSTALL}">
+{FTAN}
+<h2>{HEADING_UNINSTALL_TEMPLATE}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td>
+                    <select class="w3-border" name="file" style="width: 75%;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN template_uninstall_select_block -->
+                        <option value="{UNINSTALL_VALUE}">{UNINSTALL_NAME}</option>
+                    <!-- END template_uninstall_select_block -->
+                    </select>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_UNINSTALL}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_uninstall_block -->
+
+<!-- BEGIN template_detail_block -->
+<form name="details" action="details.php" method="post" class="{DISPLAY_LIST}">
+{FTAN}
+<h2>{HEADING_TEMPLATE_DETAILS}</h2>
+    <table style="width: 100%;">
+        <tbody>
+            <tr>
+                <td>
+                    <select class="w3-border" name="file" style="width: 75%;">
+                    <option value="" selected="selected">{TEXT_PLEASE_SELECT}...</option>
+                    <!-- BEGIN template_detail_select_block -->
+                        <option value="{DETAIL_VALUE}">{DETAIL_NAME}</option>
+                    <!-- END template_detail_select_block -->
+                    </select>
+                </td>
+                <td style="width: 10%;">
+                    <input type="submit" name="submit" value="{TEXT_VIEW_DETAILS}" class="btn btn-default w3-blue-wb w3-hover-green" style="min-width: 8.525em;" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    <br />
+</form>
+<!-- END template_detail_block -->
+</div>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/templates_details.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/templates_details.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/templates_details.htt	(revision 2)
@@ -0,0 +1,38 @@
+<!--
+ @version         $Id: templates_details.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+
+<h2>{HEADING_TEMPLATE_DETAILS}</h2>
+<div class="block-outer">
+<table class="addons template">
+  <tbody>
+    <tr>
+        <td class="setting_name">{TEXT_NAME}:</td>
+        <td>{NAME}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_AUTHOR}:</td>
+        <td>{AUTHOR}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_VERSION}:</td>
+        <td>{VERSION}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_DESIGNED_FOR}:</td>
+        <td>Website Baker {DESIGNED_FOR}</td>
+    </tr>
+    <tr>
+        <td class="setting_name">{TEXT_DESCRIPTION}:</td>
+        <td style="text-align: justify;">{DESCRIPTION}</td>
+    </tr>
+  </tbody>
+</table>
+</div>
+
+<br />
+
+<button class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" onclick="window.location = 'index.php';">{TEXT_BACK}</button>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/users.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/users.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/users.htt	(revision 2)
@@ -0,0 +1,31 @@
+<!--
+ @version         $Id: $
+-->
+<!-- BEGIN main_block -->
+<form name="users" action="{ADMIN_URL}/users/users.php" method="post">
+    <input type="hidden" name="userstatus" value="{USER_STATUS}" />
+    {FTAN}
+    <table style="margin-bottom:10px; width: 100%; border-collapse: collapse; white-space-collapsing: collapse; ">
+        <tbody>
+            <tr >
+                <td style="float: left;"><h2 class="page_titel">{HEADING_MODIFY_DELETE_USER}</h2></td>
+                <td style="float: right; line-height: 3.225em;">
+                <!-- BEGIN manage_groups_block -->
+                    <span><a class="btn btn-default btn-large w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" href="{ADMIN_URL}/groups/index.php">{TEXT_MANAGE_GROUPS}</a></span>
+                <!-- END manage_groups_block -->
+                </td>
+             </tr>
+        </tbody>
+    </table>
+    <button type="button" name="status" title="{TEXT_USERS}" style="width: 1.825em; background: {STATUS_ICON} no-repeat center" value="{USER_STATUS}" onclick="window.location = 'index.php?status={USER_STATUS}';" class="status {DISPLAY_MODIFY}" >&nbsp;</button>
+    <select name="user_id" style="width: 41.855em;">
+<!-- BEGIN list_block -->
+        <option value="{VALUE}" {STATUS}>{NAME}</option>
+<!-- END list_block -->
+    </select>
+    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4 {DISPLAY_MODIFY}" type="submit" name="modify" value="{TEXT_MODIFY}" />
+    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4 {DISPLAY_DELETE}" type="submit" name="delete" value="{TEXT_DELETE}" onclick="return confirm('{CONFIRM_DELETE}');" />
+</form>
+<h2 style="margin-top: 1.825em;" class="{DISPLAY_ADD}">{HEADING_ADD_USER}</h2>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/users_form.htt
===================================================================
--- trunk/templates/DefaultTheme/templates/users_form.htt	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/users_form.htt	(revision 2)
@@ -0,0 +1,171 @@
+<!--
+ @version         $Id: users_form.htt 76 2017-03-10 14:44:36Z Luisehahne $
+-->
+<!-- BEGIN main_block -->
+<form name="user" action="{ACTION_URL}" method="post" class="{DISPLAY_ADD} access" style="margin: auto; width: 100%;" >
+    <input type="hidden" name="user_id" value="{USER_ID}" />
+    <input type="hidden" name="username_fieldname" value="{USERNAME_FIELDNAME}" />
+    {FTAN}
+    <h2 style="{DISPLAY_EXTRA}">{HEADING_MODIFY_USER}&nbsp;</h2>
+    <div class="block-outer" style="padding: 0.825em;">
+    <table style=" border-collapse: collapse; border-spacing: 0; width: 100%;" >
+        <thead class="value_label">
+        <tr>
+        <th></th>
+        <th style=" width: 70%;"></th>
+        </tr>
+        </thead>
+        <tbody class="value_label">
+            <tr>
+                <td>{TEXT_USERNAME}:</td>
+                <td class="value_input">
+            <!-- BEGIN user_add_block -->
+                    <input type="text" name="{USERNAME_FIELDNAME}" maxlength="30" value="{USERNAME}" style="width: 52%;" />
+            <!-- END user_add_block -->
+            <!-- BEGIN user_display_block -->
+                    <div id="username" style="width: 52%;" >{USERNAME}</div>
+            <!-- END user_display_block -->
+                </td>
+
+            </tr>
+            <tr class="ui-helper-clearfix">
+                <td class="setting_name">
+                    <label for="pwLen" >Passwordlength:</label>
+                </td>
+                <td class="value_input">
+                  <input type="text" onchange="onChange(this);" id="pwLen" value="8" name="length" style="width: 15%;" />
+                </td>
+            </tr>
+
+            <tr>
+                <td>{TEXT_PASSWORD}:</td>
+                <td class="value_input">
+                    <input type="text" id="password" name="password" maxlength="30" value="" style="width: 52%;" />
+                    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="button" value="generate" onclick="onClick(this);" style="width: 15%;" />
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_RETYPE_PASSWORD}:</td>
+                <td class="value_input">
+                    <input type="password" id="password2" name="password2" maxlength="30" value="" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr style="{DISPLAY_EXTRA}">
+                <td>&nbsp;</td>
+                <td >
+                  <div class="w3-panel w3-pale-red w3-leftbar w3-border-red  w3-left-align" style="min-height: 4.225em; width: 100%; text-align: left;" >
+                      <p>{CHANGING_PASSWORD}</p>
+                  </div>
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_DISPLAY_NAME}:</td>
+                <td class="value_input">
+                    <input type="text" name="display_name" maxlength="255" value="{DISPLAY_NAME}" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_EMAIL}:</td>
+                <td class="value_input">
+                    <input type="text" name="email" maxlength="255" value="{EMAIL}" style="width: 52%;" />
+                </td>
+            </tr>
+            <tr style="{DISPLAY_HOME_FOLDERS}">
+                <td>{TEXT_HOME_FOLDER}:</td>
+                <td class="value_input">
+                    <select name="home_folder" style="width: 53%;" >
+                        <option value="">{TEXT_NONE}</option>
+                        <!-- BEGIN folder_list_block -->
+                        <option value="{FOLDER}"{SELECTED}>{NAME}</option>
+                        <!-- END folder_list_block -->
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>{TEXT_GROUP}:</td>
+                <td class="value_input">
+                    <select name="groups[]" multiple="multiple" size="5" style="width: 53%;" >
+                    <!-- BEGIN group_list_block -->
+                        <option value="{ID}" {SELECTED}>{NAME}</option>
+                    <!-- END group_list_block -->
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td style="text-align: left;">
+                    <input type="radio" name="active[]" id="active" value="1" {ACTIVE_CHECKED} />
+                    <label for="active">{TEXT_ACTIVE}</label>
+                    <input type="radio" name="active[]" id="disabled" value="0" {DISABLED_CHECKED} />
+                    <label for="disabled">{TEXT_DISABLED}</label>
+                </td>
+            </tr>
+            <tr>
+                <td>&nbsp;</td>
+                <td style="text-align: left;">
+                    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="submit" name="submit" value="{SUBMIT_TITLE}" />
+                    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="reset" name="reset" value="{TEXT_RESET}" />
+                    <input class="btn btn-default w3-blue-wb w3-round-small w3-hover-green w3-medium w3-padding-4" type="button" onclick="javascript: window.location = 'index.php';" value="{TEXT_CANCEL}">
+                </td>
+            </tr>
+        </tbody>
+    </table>
+    </div>
+</form>
+<script type="text/javascript">
+    function toggle_radio(radio_on, radio_off) {
+       document.getElementById(radio_on).checked = true;
+       document.getElementById(radio_off).checked = true;
+    }
+</script>
+<script src="{ADMIN_URL}/users/PasswordGenerator.js"></script>
+<script>
+    var _options = _options || window._options || { };
+            _options.length = 8;
+            _options.lowercase = true;
+            _options.uppercase = true;
+            _options.numbers = true;
+            _options.special_character = true;
+            _options.brackets = true;
+            _options.minus = true;
+            _options.underscore = true;
+            _options.space = true;
+/*
+    passwort.set({
+        length: 50,
+        lowercase: false,
+        uppercase: false,
+        numbers: false,
+        special_character: true,
+        brackets: false,
+        minus: false,
+        underscore: false,
+        space: false
+    });
+ */
+
+    _options.el   = document.querySelector('#password');
+    _options.el2  = document.querySelector('#password2');
+    var passwort  = new PasswordGenerator(_options);
+console.info( _options.el );
+console.info( _options.el2 );
+console.info( passwort.get() );
+//    passwort.render();
+    //set option with onChange event
+    function onChange(e) {
+        var obj = {};
+        if(e.name == 'length') {
+            obj[e.name] = parseInt(e.value);
+        } else {
+            obj[e.name] = e.checked ? true : false;
+        }
+        passwort.set(obj);
+        passwort.render();
+    }
+    function onClick(e){
+        passwort.render();
+        return false;
+    }
+</script>
+
+<!-- END main_block -->
\ No newline at end of file
Index: trunk/templates/DefaultTheme/templates/warning.html
===================================================================
--- trunk/templates/DefaultTheme/templates/warning.html	(nonexistent)
+++ trunk/templates/DefaultTheme/templates/warning.html	(revision 2)
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<!--
+ @version         $Id: warning.html 77 2017-03-12 02:46:29Z Luisehahne $
+-->
+<head>
+<title>Maximum Invalid Login Attemps Exceeded</title>
+<style type="text/css"><!--
+body,td,th {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    color: #000000;
+}
+body {
+    margin: 0px;
+  background: #A8BCCB url(../images/background.png) ;
+  background-repeat:repeat-x;
+}
+a:link, a:visited, a:active {
+    color: #003366;
+    text-decoration: none;
+}
+a:hover {
+    text-decoration: underline;
+    color: #336699;
+}
+h1 {
+    text-align: center;
+    font-size: 18px;
+    margin-top: 0;
+    color: #000;
+    text-transform: uppercase;
+}
+hr {
+    height: 1px;
+    color: #336699;
+    background-color: #336699;
+    border: 0;
+}
+div#message {
+    margin: 0 auto;
+    height: 80px;
+    padding: 0;
+    text-align: center;
+}
+--></style></head>
+<body>
+
+<div id='message'>
+    <h1>Excessive Invalid Logins</h1>
+    You have attempted to login too many times
+</div>
+
+</body>
+</html>
\ No newline at end of file
Index: trunk/templates/DefaultTheme/theme.css
===================================================================
--- trunk/templates/DefaultTheme/theme.css	(nonexistent)
+++ trunk/templates/DefaultTheme/theme.css	(revision 2)
@@ -0,0 +1,220 @@
+* html body * { overflow :visible; }
+* html div{ height :1em;  }
+html { overflow: -moz-scrollbars-vertical; }
+html {
+  color: #404040;
+  font-family: Verdana,"Trebuchet MS",Arial,Helvetica,sans-serif;
+  font-size: 100.1%;
+  font-weight: normal;
+  overflow-x: auto;
+  overflow-y: scroll;
+}
+body{ margin :0 auto; padding :0px; background :#a8bccb; text-align :left; font-size :0.8em; }
+body { background-color :#a8bccb; background-repeat :repeat-x; }
+td,th,input,textarea { color :#000000; font-size :1.0em; font-family :Verdana, Arial, Helvetica, sans-serif; }
+textarea { font-size :1em; }
+img { border :0px; }
+form { margin :0; }
+hr { margin :1em auto; color :#003366; height :1px; }
+h1 { color :#000000; font-size :1.8em; text-align :center; text-transform :uppercase; }
+h2 { margin :0.5em 0px 0.5em 0px; color :#336699; font-size :1.5em; }
+h2 { font-family :arial,sans-serif; letter-spacing :-1px; margin :0.5em 0; text-align :left; }
+h4 { margin :0; border-bottom :1px solid #dddddd; padding-bottom :5px; }
+
+a h3 { margin :0; font-size :1.1em; padding-bottom :2px; }
+li p { margin :0.5em 0; }
+a:link, a:visited, a:active { color :#003366; text-decoration :none; }
+a:hover { color :#336699; text-decoration :none; }
+ul, li { margin :0; padding :0; list-style :none; }
+.menu { margin :0; padding :0; padding-top :8px; padding-bottom :10px; padding-left :8px; background : none #215A7A; background-repeat :repeat-x; }
+.menu li { padding-right :1px; list-style-type :none; display :inline; }
+.menu a, .menu a:link, .menu a:active, .menu a:visited { border-bottom :0; padding : 0.525em 0.925em; color :#ffffff; }
+.menu a:hover { color :#ffffff; background : url(images/menuo.png) #ffffff; background-repeat :repeat-x; text-decoration :none; }
+.current a, .current a:link, .current a:active, .current a:visited { background : url(images/menuo.png) #ffffff; background-repeat :repeat-x; color :#ffffff; }
+
+label { cursor :pointer; }
+input:focus, input:active, select:focus, textarea:focus { background :#f1f8fd; }
+iframe { border :1px solid #35373a; }
+div.box { width :100%; margin :-10px 0 0 0; font-size :small; text-align :right; }
+.header {  margin :0 auto; }
+.container { margin :0 auto; background :url(images/bgtitle.png) #ffffff; background-repeat :repeat-x; }
+.content { padding :1.6em; margin :0 auto; min-height :300px; vertical-align :top; }
+#content_container { text-align :center;  clear :both; margin :0 auto; }
+.header,
+.container,
+.content,
+#content_container { min-width :60em; width :70%; min-width: 76.225em; }
+#admintools { margin : auto 1%; }
+input#admintools { margin : auto 0.225em; }
+#admintools ul { padding :0;  width :100%; }
+#admintools li { list-style-type :none; display :inline; float :left; width :47%; margin :0 1%; }
+.description { padding :4px 4px 0 4px; text-align :left; vertical-align :top; }
+.graphic { border :4px solid #fdfdfd; height :50px; padding-left :3px; width :50px; }
+.graphic img { background-color :#ffffff; border :1px solid #d0d0d0; padding :4px; vertical-align :middle; }
+
+.note { color :#666666; font-size :10px; }
+div .pages_list { width :100%; font-size :0.7em; }
+.pages_list .icon_col td img { border-style :none; float :left; padding-right :7px; display :block; }
+.pages_list table { width :100%; margin :0 auto; background-color :#dcdcdc; }
+.pages_list ul { margin :0; padding :0px; font-weight :normal; }
+.pages_list ul li { margin :2px 0; padding :0px; list-style-type :none; }
+.page_list_show li { display :block; }
+img.page_list_rights { border :none; margin-right :5px; float :left; margin-top :2px; margin-bottom :2px; }
+.content input { font-size :12px; }
+.section { margin-top :10px; padding :0px; border :1px solid #999999; font-size :1em; width :100%; background-color :#fdfdfd; height :95px; }
+.sections_header { width :100%; margin-bottom :10px; border :none; background-color :#f0f0f0; height :50px; }
+.sections_header td { padding :5px; }
+.setting_name { width :20%; min-width :200px;  }
+.setting_value { width :80%; }
+.setting_value_permissions { width :50%; min-width :400px; }
+.setting_value textarea { height :50px; }
+.title {
+   text-align :left;
+   padding :4px 5px 0px 3px;
+   font-weight :bold;
+   font-size :14px;
+   margin-bottom :5px;
+}
+span.title { display :block; }
+.tool_table ul { margin :0; padding :0; margin-left :20px; margin-bottom :2px; }
+.tool_table li { padding :1px; list-style-type :disc; }
+/* CSS STYLES FOR THE PAGES SECTION */
+table.pages_view { width :100%; margin :0 auto; border :0; background-color :#ecf3f7; border-spacing :0px; }
+table.pages_view tr:hover { background-color :#f1f8dd; }
+/* FORMS */
+.submit, .cancel { width :100px; margin-top :5px; }
+.form_submit .right { text-align :right; }
+.input_small { width :20px; }
+.input_normal { width :120px; }
+.input_medium { width :150px; }
+.input_wide { width :200px; }
+.input_large { width :300px; }
+select option.disabled { color :#aaaaaa; }
+.jsadmin_drag img { padding :3px 0; margin-top :1px; vertical-align :top; cursor :pointer; }
+.modify_link { padding-top :4px; display :inline; vertical-align :middle; }
+.header_list_page_id { width :30px; padding-right :15px; text-align :right; }
+.header_list_actions { width :175px; text-align :left; }
+.list_actions { width :20px; text-align :left; }
+.sections_list { padding-left :10px; font-weight :bold; }
+.header_list_block { width :180px; text-align :left; }
+.header_list_sections_actions { width :30px; text-align :left; }
+.value_page_code { width :240px; color :#006400; font-weight :400; }
+/* Ende */
+.pages_list table td, table.pages_view td { padding :3px; }
+.save, .reset, .input_narrow { width :100px; }
+.settings_table td, .tool_table td { text-align :left; vertical-align :top; }
+#file_mode input, #dir_mode input { width :12px; height :12px; }
+#hide2, .hide, .page_list { display :none; }
+.header_list_page_title, .list_page_title { width :300px; text-align :left; }
+.list_section_id, .list_page_id, .header_list_section_id { width :2em; text-align :right; }
+.list_page_code, .list_page_language { width :240px; }
+.form_submit .left, .header_list_menu_title, .list_menu_title, .header_list_type { text-align :left; }
+.header_title, .sections_list table, .setting_value input, .setting_value select, .setting_value textarea, .value_input input, .value_input text, .value_input select, .form_submit, .input_full { width :100%; }
+.header_list_pubdate_start, .header_list_pubdate_end, .list_pubdate_start, .list_pubdate_end { width :200px; text-align :left; white-space: nowrap; }
+.right{ text-align :right; }
+.left{ text-align :left; }
+/* set div layers in dead tables */
+.subcolumns { width :100%; overflow :hidden; margin :10px 0; }
+.subcolumns_oldgecko { width :100%; float :left; margin :10px 0; }
+.c10l, .c20l, .c25l, .c33l, .c40l, .c38l, .c50l, .c60l, .c62l, .c66l, .c75l, .c80l { float :left; }
+.c10r, .c20r, .c25r, .c33r, .c40r, .c38r, .c50r, .c60r, .c66r, .c62r, .c75r, .c80r { float :right; margin-left :-5px; }
+  .c10l, .c10r { width :10%; }
+  .c20l, .c20r { width :20%; line-height :2em; }
+  .c40l, .c40r { width :40%; }
+  .c60l, .c60r { width :60%; height :21px; }
+  .c25l, .c25r { width :28%; }
+  .c33l, .c33r { width :33.333%; }
+  .c50l, .c50r { width :50%; }
+  .c66l, .c66r { width :66.666%; }
+  .c38l, .c38r { width :38.2%; }
+  .c62l, .c62r { width :61.8%; }
+  .subc { padding :0 0.5em; }
+  .subcl { padding :0 1em 0 0; }
+  .subcr { padding :0 0 0 1em; }
+.c80l, .c80r, .c90l, .c90r { width :80%; }
+.c75l, .c75r, .c80l, .c80r { width :75%; }
+.info { padding :10px; margin-bottom :0.5em; background :#f8f8f8; color :#666666; font-size :91.7%; }
+.note { border :2px #448844 solid; padding :10px; margin :10px auto; background :#eeffee; color :#004400; }
+.important { border :2px #888844 solid; padding :10px; margin-bottom :1em; background :#ffffee; color :#444400; }
+.warning { border :2px #884444 solid; padding :10px; margin-bottom :1em; background :#ffeeee; color :#440000; }
+.row_0 { background-color :transparent; }
+.row_1 { background-color :#ccddee; }
+div.content_box { margin :0em auto; }
+div.content_box form { width :98%; }
+#language,
+#timezone,
+#date_format,
+#time_format { min-width :250px; }
+#display_name,
+#username,
+#email,
+#new_password_1,
+#new_password_2,
+#current_password { min-width :250px; }
+#submit,
+#reset { max-width :100px; }
+ div#username { width :118%; background-color :#e9e9e9; min-width :250px; border :0px groove #6799c4; text-align :left; font-weight :bold; margin :0; }
+.save_section { margin :20px auto 5px auto; }
+#language,
+#timezone,
+#date_format,
+#time_format,
+#display_name,
+#username,
+#email,
+#new_password_1,
+#new_password_2,
+#current_password { width :118%; }
+.section-info { margin :1.5em 0; }
+.rounded { border-radius :10px; -khtml-border-radius :10px; -webkit-border-radius :10px; -moz-border-radius :10px; }
+.bigger { font-size :150%; }
+.strong { font-weight :bold; }
+.msg-box { background :#e5ffe6; border :0.2em #009900 solid; color :#336600; margin-bottom :1em; padding :0.63em; text-align :center; }
+.error-box { background :#ffeeee; border :0.2em #884444 solid; color :#440000; margin-bottom :1em; padding :0.63em; text-align :center; }
+.msg-box p,
+.error-box p { font-size :120%; }
+select > option.user-inactive { color :#990000; }
+button.status { cursor :pointer; border-radius :5px; -khtml-border-radius :5px; -webkit-border-radius :5px; -moz-border-radius :5px; }
+.button { font-weight: bold; cursor :pointer; background: #C9C9C9; padding: 0.425em 0.8525em; border-radius :4px; -khtml-border-radius :4px; -webkit-border-radius :4px; -moz-border-radius :4px; }
+/*
+.outer { padding: 5px; border: 2px solid #7DA2C2; border-radius: 5px; margin-bottom: 1.8525em; }
+.section-active { padding:1px 5px; background:#C5DBEE; border-radius: 5px 5px 0 0; margin-bottom:5px; }
+.section-inactive { padding:1px 5px; background:#D8D8D8; border-radius: 5px 5px 0 0; margin-bottom:5px; }
+*/
+.block-outer {padding: 3px 3px 0; border: 1px solid #DEE5F8; border-radius: 5px; margin-bottom: 25px; box-shadow: 1px 1px 5px #666; }
+.section-active { padding:1px 5px; background:#DEE5F8; border-radius: 5px 5px 0 0; margin-bottom:5px; }
+.section-inactive { padding:1px 5px; background:#eee; border-radius: 5px 5px 0 0; margin-bottom:5px; }
+
+.content {background: rgba(0, 0, 0, 0) linear-gradient(#e0e0e0, #ffffff) no-repeat scroll 0 0 / 100% 60px}
+
+button[type="button"]:hover,
+input[type="reset"]:hover,
+input[type="submit"]:hover,
+input[type="button"]:hover { cursor: pointer;}
+
+form.access table tbody tr { margin: 0.525em 0; line-height: 2.325em; }
+button.href {
+  background: transparent;
+  border: none;
+  cursor: pointer;
+}
+button.href:hover {
+color: #166F82;
+}
+
+input[type="checkbox"] + label,
+input[type="checkbox"] + td label {
+  font-weight: normal;
+  padding-bottom: 0.425em;
+  vertical-align: middle;
+}
+
+input[type="checkbox"]:checked { }
+input[type="checkbox"]:checked + label,
+input[type="checkbox"]:checked + td label {
+  color: #2D8C0A;
+  font-weight: bold;
+  padding-bottom: 0.425em;
+  vertical-align: middle;
+}
+
Index: trunk/templates/DefaultTheme/upgrade.php
===================================================================
--- trunk/templates/DefaultTheme/upgrade.php	(nonexistent)
+++ trunk/templates/DefaultTheme/upgrade.php	(revision 2)
@@ -0,0 +1,28 @@
+<?php
+/**
+ *
+ * @category        templates
+ * @package         themes
+ * @subpackage      DefaultTheme
+ * @subpackage      install
+ * @author          WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://websitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3 SP7
+ * @requirements    PHP 5.2.2 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ * @created
+ *
+ */
+
+/* -------------------------------------------------------- */
+// Must include code to prevent this file from being accessed directly
+if(defined('WB_PATH') == false) { die('Cannot access '.basename(__DIR__).'/'.basename(__FILE__).' directly'); }
+/* -------------------------------------------------------- */
+
+        if (is_writable(WB_PATH.'/temp/cache')) {
+            Translate::getInstance()->clearCache();
+        }

Property changes on: trunk/templates/DefaultTheme/upgrade.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/templates/DefaultTheme/wb_info.php
===================================================================
--- trunk/templates/DefaultTheme/wb_info.php	(nonexistent)
+++ trunk/templates/DefaultTheme/wb_info.php	(revision 2)
@@ -0,0 +1,94 @@
+<?php
+/**
+ *
+ * @category        admin
+ * @package         login
+ * @author          Ryan Djurovich, WebsiteBaker Project
+ * @copyright       WebsiteBaker Org. e.V.
+ * @link            http://www.websitebaker2.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+
+if ( !defined( 'WB_PATH' ) ){ require( dirname(dirname((__DIR__))).'/config.php' ); }
+if ( !class_exists('admin', false) ) { require(WB_PATH.'/framework/class.admin.php'); }
+if ( !class_exists('SysInfo', false) ) { require(WB_PATH.'/framework/SysInfo.php'); }
+
+$admin = new admin('##skip##','start', false, false);
+if (!$admin->is_authenticated() || !$admin->ami_group_member('1')){
+    throw new RuntimeException('Illegal file access!');
+}
+if (!class_exists('Twig_Autoloader')) {
+    $msg = 'This modul requires TWIG. please download from <a href="http://wiki.'
+         . 'websitebaker.org/doku.php/en/downloads" target="_blank" ><b>wiki.wb</a></b>...';
+    throw new RuntimeException($msg);
+} else {
+    $aWritablePaths = array(
+        'languages',
+        'media',
+        'modules',
+        'pages',
+        'temp',
+        'templates',
+        'var',
+        );
+    $oInfo = new SysInfo();
+    if (is_readable(WB_PATH.'/modules/SimpleRegister.php')){
+      require WB_PATH.'/modules/SimpleRegister.php';
+    }
+
+    if(is_object($oReg->Db->DbHandle)) {
+        $title = "MySQLi Info";
+        $server_info          = mysqli_get_server_info($oReg->Db->DbHandle);
+        $host_info            = mysqli_get_host_info($oReg->Db->DbHandle);
+        $proto_info           = mysqli_get_proto_info($oReg->Db->DbHandle);
+        $client_info          = mysqli_get_client_info($oReg->Db->DbHandle);
+        $client_encoding      = mysqli_character_set_name($oReg->Db->DbHandle);
+        $status = explode('  ', mysqli_stat($oReg->Db->DbHandle));
+    }
+// Create new template object with phplib
+    $aTwigData = array(
+        'WB_URL' => $oReg->AppUrl,
+        'THEME_URL' => $oReg->ThemeUrl,
+        'INFO_URL' =>  $oReg->AcpUrl.'start/wb_info.php',
+        'sAddonThemeUrl' => THEME_URL.'',
+        'getInterface' => $oInfo->getInterface(),
+        'isCgi' => $oInfo->isCgi(),
+        'WbVersion' => $oInfo->getWbVersion(),
+        'getOsVersion' => $oInfo->getOsVersion(true),
+        'aWritablePaths' => $oInfo->checkFolders($aWritablePaths),
+        'getSqlServer' => $oInfo->getSqlServer(),
+        'client_encoding' => $client_encoding,
+        'php_version' => PHP_VERSION,
+        'oReg' => $oReg,
+        'server' => $oReg->Db->db_handle,
+        'client_info' => $client_info,
+        'server_info' => $server_info,
+    );
+    $aTwigloader = array('header'=> 'header.twig',
+                         'content' => 'content.twig',
+                         'sysinfo' => 'sysInfo.twig',
+                         'footer'  => 'footer.twig'
+               );
+    if (is_readable($oReg->ThemePath.'templates/'.$aTwigloader['sysinfo'])){
+        $loader = new Twig_Loader_Filesystem($oReg->ThemePath . 'templates');
+        $Twig = new Twig_Environment(
+            $loader, array(
+            'autoescape'       => false,
+            'cache'            => false,
+            'strict_variables' => false,
+            'debug'            => false,
+            ));
+/*-- finalize the page -----------------------------------------------------------------*/
+        echo $Output = $Twig->Render($aTwigloader['sysinfo'], $aTwigData);//
+    } else {
+    print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+    print_r( $aTwigloader['sysinfo'] ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+    }
+}
+

Property changes on: trunk/templates/DefaultTheme/wb_info.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/upgrade-script.php
===================================================================
--- trunk/upgrade-script.php	(nonexistent)
+++ trunk/upgrade-script.php	(revision 2)
@@ -0,0 +1,1258 @@
+<?php
+/**
+ *
+ * @category        backend
+ * @package         installation
+ * @author          WebsiteBaker Project
+ * @copyright       Website Baker Org. e.V.
+ * @link            http://wwebsitebaker.org/
+ * @license         http://www.gnu.org/licenses/gpl.html
+ * @platform        WebsiteBaker 2.8.3
+ * @requirements    PHP 5.3.6 and higher
+ * @version         $Id$
+ * @filesource      $HeadURL$
+ * @lastmodified    $Date$
+ *
+ */
+// Stop execution if PHP version is too old
+// PHP less then 5.6.0 is prohibited ---
+if (version_compare(PHP_VERSION, '5.6.0', '<')) {
+    $sMsg = '<p style="color: #ff0000;">WebsiteBaker is not able to run with PHP-Version less then 5.6.0!!<br />'
+          . 'Please change your PHP-Version to any kind from 5.6.0 and up!<br />'
+          . 'If you have problems to solve that, ask your hosting provider for it.<br  />'
+          . 'The very best solution is the use of PHP-7.0 and up</p>';
+    die($sMsg);
+}
+/* ************************************************************************** */
+function sanitizeConfigFile($sConfigFile)
+{
+    $sFileMarker = '*** auto generated config file for '.getNewVersionString();
+// check if config is writeable
+    if (!is_readable($sConfigFile)) {
+        throw new RuntimeException('sorry, '.basename($sConfigFile).' is not readable or does not exists!');
+    }
+    $sCfgContent = file_get_contents($sConfigFile);
+// check if config is created by WB
+    if (!preg_match('/'.preg_quote($sFileMarker, '/').'/siU', $sCfgContent)) {
+        if (!is_writeable($sConfigFile)) {
+            $sMsg = 'The file ['.basename($sConfigFile).'] is not writeable and can not be corrected!'."\n"
+                  . 'Please grant neccessary rights to the file and restart this program!';
+            throw new RuntimeException($sMsg);
+        }
+        // clean from includes
+        $sPattern = '/\n[^;]*(require|include).*framework\/initialize\.php.*$/siU';
+        $sCfgContent = preg_replace($sPattern, "\n",$sCfgContent);
+        // create temporary file
+        $sTmpFilename = tempnam(__DIR__.'/temp', '~config');
+        // fill it with old content
+        file_put_contents($sTmpFilename, $sCfgContent);
+        // include this file
+        include $sTmpFilename;
+        // it can be deleted now
+        unlink($sTmpFilename);
+        // collect and check available data
+        $aValues = ['ADMIN_DIRECTORY' => ''];
+        if (!defined('ADMIN_DIRECTORY')) {
+            if (defined('ADMIN_URL')) {
+                $aValues['ADMIN_DIRECTORY'] = trim(str_replace(str_replace('\\', '/', WB_URL), '', str_replace('\\', '/', ADMIN_URL)), '/');
+            }
+        } else { $aValues['ADMIN_DIRECTORY'] = ADMIN_DIRECTORY; }
+        $aValues['WB_URL']       = defined('WB_URL')       ? WB_URL       : '';
+        $aValues['DB_TYPE']      = defined('DB_TYPE')      ? DB_TYPE      : 'mysqli';
+        $aValues['DB_HOST']      = defined('DB_HOST')      ? DB_HOST      : '';
+        $aValues['DB_PORT']      = defined('DB_PORT')      ? DB_PORT      : '3306';
+        $aValues['DB_NAME']      = defined('DB_NAME')      ? DB_NAME      : '';
+        $aValues['DB_USERNAME']  = defined('DB_USERNAME')  ? DB_USERNAME  : '';
+        $aValues['DB_PASSWORD']  = defined('DB_PASSWORD')  ? DB_PASSWORD  : '';
+        $aValues['DB_CHARSET']   = ((defined('DB_CHARSET') && trim(DB_CHARSET) != '') ? DB_CHARSET : 'utf8');
+        $aValues['TABLE_PREFIX'] = defined('TABLE_PREFIX') ? TABLE_PREFIX : 'wb_';
+        // build the new config content
+        $sConfigContent
+            = '<?php'."\n"
+            . '/*'."\n"
+            . ' '.$sFileMarker."\n"
+            . ' ****[WebsiteBaker]****'."\n"
+            . ' *** created at '.date('Y-m-d h:i:s e')."\n"
+            . ' */'."\n"
+            . '// define(\'DEBUG\', false);'."\n"
+            . 'define(\'DB_TYPE\',         \''.$aValues['DB_TYPE'].'\');'."\n"
+            . 'define(\'DB_HOST\',         \''.$aValues['DB_HOST'].'\');'."\n"
+            . 'define(\'DB_PORT\',         \''.$aValues['DB_PORT'].'\');'."\n"
+            . 'define(\'DB_NAME\',         \''.$aValues['DB_NAME'].'\');'."\n"
+            . 'define(\'DB_USERNAME\',     \''.$aValues['DB_USERNAME'].'\');'."\n"
+            . 'define(\'DB_PASSWORD\',     \''.$aValues['DB_PASSWORD'].'\');'."\n"
+            . 'define(\'DB_CHARSET\',      \''.$aValues['DB_CHARSET'].'\');'."\n"
+            . 'define(\'TABLE_PREFIX\',    \''.$aValues['TABLE_PREFIX'].'\');'."\n"
+            . "\n"
+            . 'define(\'WB_URL\',          \''.$aValues['WB_URL'].'\'); '
+            . '// no trailing slash or backslash!!'."\n"
+            . 'define(\'ADMIN_DIRECTORY\', \''.$aValues['ADMIN_DIRECTORY'].'\'); '
+            . '// no leading/trailing slash or backslash!! A simple directory name only!!'."\n"
+            . "\n"
+            . 'require_once __DIR__.\'/framework/initialize.php\';'."\n"
+            . '// --- end of file ----------------------------------'."\n"
+        ;
+        if (false === file_put_contents($sConfigFile, $sConfigContent)) {
+            $sMsg = 'Write file ['.basename($sConfigFile).'] failed!'."\n"
+                  . 'Please create the file manualy. You ca find an example at '
+                  . '<a href="http://wiki.websitebaker.org/" title="WB-wiki">WebsiteBaker Wiki</a>';
+            throw new RuntimeException($sMsg);
+        }
+        $sMsg = 'Update file ['.basename($sConfigFile).'] successful done!';
+        throw new RuntimeException($sMsg);
+    }
+}
+/* ************************************************************************** */
+function getOldVersionString()
+{
+    $sRetval = '';
+    $sConfigFile = file_get_contents(__DIR__.'/config.php');
+    $sPattern = '=(\ \*\*\*[^\*]*?WebsiteBaker.*? )(?:[0-9][^ \n]*?)$=ism';
+    if (preg_match($sPattern, $sConfigFile, $aMatches)) {
+        $sRetval = $aMatches[0];
+    }
+    return $sRetval;
+}
+/* ************************************************************************** */
+function getNewVersionString()
+{
+    $sAdminDirectory = searchAdminDir();
+    $sVersionFile = file_get_contents(__DIR__.'/'.$sAdminDirectory.'/interface/version.php');
+    $sPattern = '=define\s*\(\'VERSION\'\,\s*\'([^\']*)\'=is';
+    $sRetval = ((preg_match($sPattern, $sVersionFile, $aMatches)) ? $aMatches[1] : '???');
+    return $sRetval;
+}
+/* ************************************************************************** */
+function updateConfigPhP($sConfigFile, $sOldVersionString)
+{
+    $sNewVersion = getNewVersionString();
+    $sql = 'SELECT `value` FROM `'.TABLE_PREFIX.'settings` '
+         . 'WHERE `name`=\'wb_version\'';
+    $sOldVersion = $GLOBALS['database']->get_one($sql);
+    if ($sNewVersion != $sOldVersion) {
+    // new upgrade detected
+        $sVersionString = ' *** WebsiteBaker upgrade from '.$sOldVersion.' to '.$sNewVersion;
+    } else {
+    // modify old string if needed
+        $sVersionString = ($sOldVersionString ?: ' *** WebsiteBaker '.$sNewVersion);
+    }
+    $sCfgContent = file_get_contents($sConfigFile);
+
+    file_put_contents($sConfigFile, str_replace(' ****[WebsiteBaker]****', $sVersionString, $sCfgContent));
+    $sVersionString = sprintf($sVersionString, $sNewVersion);
+}
+/* ************************************************************************** */
+function searchAdminDir()
+{
+    $sBaseDir = __DIR__.'/*';
+    $sAdminFolder = false;
+    foreach (glob($sBaseDir, GLOB_MARK|GLOB_ONLYDIR) as $sFolder) {
+        $sFolder = str_replace('\\', '/', $sFolder);
+        if (
+            file_exists($sFolder.'access/') &&
+            file_exists($sFolder.'interface/') &&
+            file_exists($sFolder.'groups/')
+        ) {
+            $sAdminFolder = trim(basename($sFolder), '/');
+            break;
+        }
+    }
+    if (!$sAdminFolder) {
+        throw new RuntimeException('sorry, '.basename($sConfigFile).' is not readable or does not exists!');
+    }
+    return $sAdminFolder;
+}
+
+/* ************************************************************************** */
+/* *** start script ********************************************************* */
+/* ************************************************************************** */
+
+$sOldVersionString = getOldVersionString();
+// exception handling
+try {
+    sanitizeConfigFile(__DIR__.'/config.php');
+} catch(Exception $e) {
+    $sProtokol   = ((!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ) ? 'http' : 'https') . '://';
+    $sSriptname = trim(isset($_SERVER['SCRIPT_URI'])
+                   ? $_SERVER['SCRIPT_URI'].'?'.$_SERVER['QUERY_STRING']
+                   : (isset($_SERVER['REQUEST_URI'])
+                     ? $_SERVER['REQUEST_URI']
+                     : $_SERVER['SCRIPT_NAME']),'/');
+    $sReloadLink = $sProtokol.$_SERVER['HTTP_HOST'].($_SERVER['SERVER_PORT'] == 80 ? '' : $_SERVER['SERVER_PORT'].':').'/'.$sSriptname;
+    $aTmp = explode('?', $sReloadLink, 2);
+    $sReloadLink = $aTmp[0].'?ts='.dechex(time());
+    $sOutput
+        = '<!DOCTYPE html><html lang="en-US"><head>'
+        . '<meta name="viewport" content="width=device-width, initial-scale=1.0">'
+        . '<meta charset="UTF-8"><meta name="robots" content="noindex,nofollow">'
+        . '<meta http-equiv="expires" content="0">'
+        . '<title>System Message</title></head>'
+        . '<body><h1>WebsiteBaker - System Message</h1><hr>'
+        . '<p>'.nl2br($e->getMessage(), false).'</p>'
+        . '<form><button style="margin: 5px 50px;" type="submit" formmethod="get" formaction="'.$sReloadLink.'">'
+        . 'Restart Programm<br>(or press F5)</button></form>'
+        . '<hr></body></html>';
+    echo $sOutput;
+    flush();
+    die;
+}
+/* ************************************************************************** */
+// include the new config and initialize
+if (!defined('WB_URL')) { require_once(__DIR__.'/config.php'); }
+
+updateConfigPhP(__DIR__.'/config.php', $sOldVersionString);
+
+if (!function_exists('make_dir'))  {require(__DIR__.'/framework/functions.php');}
+if (!class_exists('admin', false)) {require(__DIR__.'/framework/class.admin.php');}
+$admin = new admin('Addons', 'modules', false, false);
+
+/* display a status message on the screen **************************************
+ * @param string $message: the message to show
+ * @param string $class:   kind of message as a css-class
+ * @param string $element: witch HTML-tag use to cover the message
+ * @return void
+ */
+    function status_msg($message, $class='check', $element='p')
+    {
+        // returns a status message
+        $msg  = '<'.$element.' class="'.$class.'" style="padding: 0 0 2.00em 0.825em; ">';
+    #    $msg .= '<h4>'.strtoupper(strtok($class, ' ')).'</h4>';
+        $msg .= $message.'</'.$element.'>';
+        echo '<div class="message">'.$msg.'</div>';
+    }
+
+    if (is_readable(WB_PATH.'/install/ModuleWhiteList')){
+        $aModuleWhiteList = file(WB_PATH.'/install/ModuleWhiteList', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
+    } else {
+        $aModuleWhiteList =
+              array (
+                    'captcha_control',
+                    'ckeditor',
+                    'code',
+                    'droplets',
+                    'form',
+                    'jsadmin',
+                    'menu_link',
+                    'mod_multilingual',
+                    'news',
+                    'output_filter',
+                    'show_menu2',
+                    'wrapper',
+                    'wysiwyg'
+            );
+    }
+
+$aDefaultSettings = array (
+    'app_name' => 'wb-1281',
+    'confirmed_registration' => '0',
+    'debug' => 'false',
+    'default_charset' => 'utf-8',
+    'default_date_format' => 'M d Y',
+    'default_language' => 'en',
+    'default_template' => 'DefaultTemplate',
+    'default_theme' => 'DefaultTheme',
+    'default_time_format' => 'g:i A',
+    'default_timezone' => '',
+    'er_level' => '',
+    'frontend_login' => 'false',
+    'frontend_signup' => 'false',
+    'home_folders' => 'true',
+    'homepage_redirection' => 'false',
+    'intro_page' => 'false',
+    'manage_sections' => 'true',
+    'media_directory' => '/media',
+    'mediasettings' => '',
+    'multiple_menus' => 'true',
+    'operating_system' => 'linux',
+    'page_extension' => '.php',
+    'page_icon_dir' => '/templates/*/title_images',
+    'page_languages' => 'true',
+    'page_level_limit' => '4',
+    'page_spacer' => '-',
+    'page_trash' => 'inline',
+    'pages_directory' => '/pages',
+    'redirect_timer' => '1000',
+    'rename_files_on_upload' => 'ph.*?,cgi,pl,pm,exe,com,bat,pif,cmd,src,asp,aspx,js',
+    'search' => 'public',
+    'sec_anchor' => 'Sec',
+    'sec_token_fingerprint' => 'true',
+    'sec_token_netmask4' => '24',
+    'sec_token_netmask6' => '64',
+    'sec_token_life_time' => '1800',
+    'section_blocks' => 'true',
+    'server_email' => 'info@example.com',
+    'smart_login' => 'true',
+    'string_dir_mode' => '0755',
+    'string_file_mode' => '0644',
+    'system_locked' => '0',
+    'warn_page_leave' => '1',
+    'wb_revision' => '',
+    'wb_sp' => '',
+    'wb_version' => '',
+    'wbmailer_default_sendername' => 'WB Mailer',
+    'wbmailer_routine' => 'phpmail',
+    'wbmailer_smtp_auth' => '',
+    'wbmailer_smtp_host' => 'localhost',
+    'wbmailer_smtp_password' => '',
+    'wbmailer_smtp_port' => '25',
+    'wbmailer_smtp_secure' => 'TLS',
+    'wbmailer_smtp_username' => '',
+    'website_description' => '',
+    'website_footer' => '',
+    'website_header' => '',
+    'website_keywords' => '',
+    'website_signature' => '',
+    'website_title' => '',
+    'wysiwyg_editor' => 'ckeditor',
+    'wysiwyg_style' => 'font-family: Verdana => Arial => Helvetica => sans-serif; font-size: 12px;',
+);
+
+// database tables including in WB package
+$table_list = array ('settings','groups','addons','pages','sections','search','users');
+
+$OK               = ' <span class="ok">OK</span> ';
+$FAIL             = ' <span class="error">FAILED</span> ';
+$DEFAULT_THEME    = 'DefaultTheme';
+$DEFAULT_TEMPLATE = (@DEFAULT_TEMPLATE?:'DefaultTemplate');
+if (@DEFAULT_THEME != $DEFAULT_THEME) {
+  db_update_key_value('settings', 'default_theme', $DEFAULT_THEME);
+  exit();
+}
+$sScriptUrl = $_SERVER['SCRIPT_NAME'];
+$sThemeUrl = WB_URL.'/templates/'.(is_readable(WB_URL.'/templates/'.$DEFAULT_THEME) ? $DEFAULT_THEME:'DefaultTheme');
+$stepID = 0;
+$dirRemove = array(
+            '[INCLUDE]lightbox/',
+            '[MODULES]SecureFormSwitcher/',
+            '[MODULES]fckeditor/',
+            '[INSTALL]sources/'
+/*
+            '[TEMPLATE]allcss/',
+            '[TEMPLATE]blank/',
+            '[TEMPLATE]round/',
+            '[TEMPLATE]simple/',
+*/
+         );
+
+$filesRemove = array(
+            '[ROOT]SP5_UPGRADE_DE',
+            '[ROOT]SP5_UPGRADE_EN',
+            '[ROOT]SP6_UPGRADE_EN',
+            '[ROOT]SP7_UPGRADE_EN',
+            '[ROOT]README-FIX',
+            '[ROOT]/var/logs/php_error.log',
+
+            '[DOCU]SP7_UPGRADE_EN',
+            '[DOCU]README-FIX',
+
+            '[ACCOUNT]template.html',
+
+            '[ADMIN]preferences/details.php',
+            '[ADMIN]preferences/email.php',
+            '[ADMIN]preferences/password.php',
+            '[ADMIN]settings/setting.js',
+            '[ADMIN]settings/array.php',
+
+            '[FRAMEWORK]class.login.php',
+            '[FRAMEWORK]SecureForm.mtab.php',
+            '[FRAMEWORK]SecureForm.php',
+            '[FRAMEWORK]class.wbmailer.php.new',
+
+            '[INCLUDE]idna_convert\ReadMe.txt',
+            '[INCLUDE]idna_convert\LICENCE',
+            '[INCLUDE]idna_convert\example.php',
+
+            '[INSTALL]install_struct.sql',
+            '[INSTALL]install_data.sql',
+/*  */
+            '[MODULES]ckeditor/ckeditor/plugins/plugin.js',
+
+            '[MODULES]captcha_control/uninstall.php',
+            '[MODULES]jsadmin/uninstall.php',
+            '[MODULES]menu_link/uninstall.php',
+            '[MODULES]output_filter/uninstall.php',
+            '[MODULES]output_filter/filters/canonical.php',
+            '[MODULES]output_filter/filters/filterScript.php',
+            '[MODULES]output_filter/filters/filterSysvarMedia.php',
+            '[MODULES]show_menu2/uninstall.php',
+            '[MODULES]wysiwyg/uninstall.php',
+
+            '[MODULES]droplets/add_droplet.php',
+            '[MODULES]droplets/backup_droplets.php',
+            '[MODULES]droplets/delete_droplet.php',
+            '[MODULES]droplets/modify_droplet.php',
+            '[MODULES]droplets/save_droplet.php',
+            '[MODULES]droplets/languages/DA.php',
+
+            '[MODULES]form/save_field.php',
+
+            '[TEMPLATE]wb_theme/uninstall.php',
+            '[TEMPLATE]wb_theme/templates/access.htt',
+            '[TEMPLATE]wb_theme/templates/addons.htt',
+            '[TEMPLATE]wb_theme/templates/admintools.htt',
+            '[TEMPLATE]wb_theme/templates/error.htt',
+            '[TEMPLATE]wb_theme/templates/groups.htt',
+            '[TEMPLATE]wb_theme/templates/groups_form.htt',
+            '[TEMPLATE]wb_theme/templates/languages.htt',
+            '[TEMPLATE]wb_theme/templates/languages_details.htt',
+            '[TEMPLATE]wb_theme/templates/media.htt',
+            '[TEMPLATE]wb_theme/templates/media_browse.htt',
+            '[TEMPLATE]wb_theme/templates/media_rename.htt',
+            '[TEMPLATE]wb_theme/templates/modules.htt',
+            '[TEMPLATE]wb_theme/templates/modules_details.htt',
+            '[TEMPLATE]wb_theme/templates/pages.htt',
+            '[TEMPLATE]wb_theme/templates/pages_modify.htt',
+            '[TEMPLATE]wb_theme/templates/pages_sections.htt',
+            '[TEMPLATE]wb_theme/templates/pages_settings.htt',
+            '[TEMPLATE]wb_theme/templates/preferences.htt',
+            '[TEMPLATE]wb_theme/templates/setparameter.htt',
+//            '[TEMPLATE]wb_theme/templates/settings.htt', SP7 replace this
+            '[TEMPLATE]wb_theme/templates/start.htt',
+            '[TEMPLATE]wb_theme/templates/success.htt',
+            '[TEMPLATE]wb_theme/templates/templates.htt',
+            '[TEMPLATE]wb_theme/templates/templates_details.htt',
+            '[TEMPLATE]wb_theme/templates/users.htt',
+            '[TEMPLATE]wb_theme/templates/users_form.htt',
+            '[ACCOUNT]preferences_form.php.old',
+            '[ADMIN]themes/templates/admintools.htt.old',
+            '[INCLUDE]pclzip/Constants.php.old',
+            '[INCLUDE]pclzip/pclzip.lib.php.old',
+            '[LANGUAGES]NL.zip',
+            '[MODULES]droplets/data/archiv/Droplet_ShortUrl_20170111_155201.zip',
+            '[MODULES]droplets/themes/default/css/backend.css.org',
+            '[MODULES]form/backend.css.new',
+            '[MODULES]form/frontend.css.new',
+            '[MODULES]show_menu2/README.de.txt',
+            '[MODULES]show_menu2/README.en.txt',
+            '[MODULES]wrapper/languages/DE.info',
+            '[TEMPLATE]DefaultTemplate/PLACEHOLDER',
+            '[TEMPLATE]DefaultTheme/PLACEHOLDER',
+         );
+
+// analyze/check database tables
+function mysqlCheckTables( $dbName )
+{
+    global $database, $table_list,$FAIL;
+    $table_prefix = TABLE_PREFIX;
+
+    $sql = 'SHOW TABLES FROM `'.$dbName.'`';
+    $result = $database->query($sql);
+
+    $data = array();
+    $retVal = array();
+    $x = 0;
+
+//    while( ( $row = @mysqli_fetch_array( $result, MYSQLI_NUM ) ) == true )
+    while (( $row = $result->fetchRow(MYSQLI_NUM)) == true)
+    {
+                $sql = "CHECK TABLE `" . $row[0].'`';
+                $analyze = $database->query($sql);
+                if( $analyze ) {
+                    $rowFetch = $analyze->fetchRow(MYSQLI_ASSOC);
+                    $data[$x]['Op'] = $rowFetch["Op"];
+                    $data[$x]['Msg_type'] = $rowFetch["Msg_type"];
+                    $msgColor = '<span class="error">';
+                    $data[$x]['Table'] = $row[0];
+                    $retVal[] = $row[0];
+                   // print  " ";
+                    $msgColor = ($rowFetch["Msg_text"] == 'OK') ? '<span class="ok">' : '<span class="error">';
+                    $data[$x]['Msg_text'] = $msgColor.$rowFetch["Msg_text"].'</span>';
+                   // print  "";
+                    $x++;
+                 } else {
+                    echo '<br /><b>'.$sql.'</b>'.$FAIL.'<br />';
+                }
+   }
+    return $retVal; //$data;
+}
+
+// check existings tables for upgrade or install
+function check_wb_tables()
+{
+    global $database,$table_list;
+
+ // if prefix inludes '_' or '%'
+ $search_for = addcslashes ( TABLE_PREFIX, '%_' );
+ $get_result = $database->query( 'SHOW TABLES LIKE "'.$search_for.'%"');
+
+        // $get_result = $database->query( "SHOW TABLES FROM ".DB_NAME);
+        $all_tables = array();
+        if($get_result->numRows() > 0)
+        {
+            while ($data = $get_result->fetchRow())
+            {
+                $tmp = str_replace(TABLE_PREFIX, '', $data[0]);
+                if(in_array($tmp,$table_list))
+                {
+                    $all_tables[] = $tmp;
+                }
+            }
+        }
+     return $all_tables;
+}
+
+// check existing tables
+$all_tables = check_wb_tables();
+
+?><!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8" />
+<title>Upgrade script</title>
+<style type="text/css">
+html { overflow: -moz-scrollbars-vertical; /* Force firefox to always show room for a vertical scrollbar */ }
+
+body {
+    margin:0;
+    padding:0;
+    border:0;
+    background: #EBF7FC;
+    color:#000;
+    font-family: 'Trebuchet MS', Verdana, Arial, Helvetica, Sans-Serif;
+    font-size: small;
+    height:101%;
+}
+
+#container {
+    width:85%;
+    background: #A8BCCB url("<?php echo $sThemeUrl;?>/images/background.png") repeat-x;
+    border:1px solid #000;
+    color:#000;
+    margin:2em auto;
+    padding:0 15px;
+    min-height: 500px;
+    text-align:left;
+}
+
+p { line-height:1.5em; }
+
+form {
+    display: inline-block;
+    line-height: 20px;
+    vertical-align: baseline;
+}
+input[type="submit"].restart {
+    background-color: #FFDBDB;
+    font-weight: bold;
+}
+
+h1,h2,h3,h4,h5,h6 {
+    font-family: Verdana, Arial, Helvetica, sans-serif;
+    color: #369;
+    margin-top: 1.0em;
+    margin-bottom: 0.1em;
+}
+
+h1 { font-size:150%; }
+h2 { font-size: 130%; border-bottom: 1px #CCC solid; }
+h3 { font-size: 120%; }
+
+.ok, .error { font-weight:bold; }
+.ok { color:green; }
+.error { color: red; }
+.check { color:#555; }
+.content { margin-left: 1.925em; }
+.warning {
+    width: 98%;
+    background:#FCDADA;
+    padding:0.2em;
+    margin-top:0.5em;
+    border: 1px solid black;
+}
+.error p { color: #369; }
+
+.info {
+    width: 98%;
+    background:#C3E3C3;
+    padding:0.2em;
+    margin-top:0.5em;
+    border: 1px solid black;
+}
+.message { padding: 0; }
+
+</style>
+</head>
+<body>
+<div id="container">
+<img src="<?php echo $sThemeUrl;?>/images/logo.png" alt="WebsiteBaker Project" />
+<h1>WebsiteBaker Upgrade</h1>
+<?php
+    if( version_compare( WB_VERSION, '2.7', '<' )) {
+        status_msg('It is not possible to upgrade from WebsiteBaker Versions before 2.7.<br />For upgrading to version '.VERSION.' you must upgrade first to v.2.8 at least!!!', 'warning', 'div');
+        echo '<br />';
+        echo "
+        </body>
+        </html>
+        ";
+        exit();
+    }
+
+$oldVersionOutput  = trim(''.WB_VERSION.'+'.( defined('WB_SP') ? WB_SP : ''), '+').' (r'.WB_REVISION.')';
+$newVersionOutput  = trim(''.VERSION.'+'.( defined('SP') ? SP : ''), '+').' (r'.REVISION.')';
+$oldVersion  = trim(''.WB_VERSION.'+'.WB_REVISION.'+'.( defined('WB_SP') ? WB_SP : ''), '+');
+$newVersion  = trim(''.VERSION.'+'.REVISION.'+'.( defined('SP') ? SP : ''), '+');
+if ( WB_VERSION != '2.8.4'){
+    if (version_compare($oldVersion, $newVersion, '>') === true) {
+        status_msg('It is not possible to upgrade from WebsiteBaker Versions '.WB_VERSION.'!<br />For upgrading to version '.$newVersionOutput.' you have to upgrade first to v.2.8.3 at least!!!', 'warning', 'div');
+        echo '<br />';
+        echo "
+        </body>
+        </html>
+        ";
+        exit();
+    }
+}
+if($admin->get_user_id()!=1){
+  status_msg('<br /><h3>WebsiteBaker upgrading is not possible!<br />Before upgrading '
+            .'to Revision '.REVISION.' you have to login as System-Administrator!</h3>',
+            'warning', 'div');
+  echo '<br /><br />';
+// delete remember key of current user from database
+  //if (isset($_SESSION['USER_ID']) && isset($database)) {
+  //     $table = TABLE_PREFIX . 'users';
+  //     $sql = "UPDATE `$table` SET `remember_key` = '' WHERE `user_id` = '" . (int) $_SESSION['USER_ID'] . "'";
+  //     $database->doQuery($sql);
+  //}
+// delete remember key cookie if set
+  if (isset($_COOKIE['REMEMBER_KEY']) && !headers_sent() ) {
+    setcookie('REMEMBER_KEY', '', time() - 3600, '/');
+  }
+  // delete most critical session variables manually
+  $_SESSION['USER_ID'] = null;
+  $_SESSION['GROUP_ID'] = null;
+  $_SESSION['GROUPS_ID'] = null;
+  $_SESSION['USERNAME'] = null;
+  $_SESSION['PAGE_PERMISSIONS'] = null;
+  $_SESSION['SYSTEM_PERMISSIONS'] = null;
+  // overwrite session array
+  $_SESSION = array();
+  // delete session cookie if set
+  if (isset($_COOKIE[session_name()]) && !headers_sent()) {
+    setcookie(session_name(), '', time() - 42000, '/');
+  }
+  // delete the session itself
+  session_destroy();
+  status_msg('<br /><h3>You have to login as System-Adminstrator start '
+            .'upgrade-script.php again!</h3>',
+             'info', 'div');
+  echo '<br /><br />';
+  if(defined('ADMIN_URL')) {
+    echo '<form action="'.ADMIN_URL.'/index.php" method="post">'
+        .'&nbsp;<input name="backend_send" type="submit" value="Kick me to the Login" />'
+        .'</form>';
+  }
+  echo '<br /><br /></div>'
+      .'</div>'
+      .'</div>'
+      .'</body>'
+      .'</html>';
+  exit();
+}
+
+?>
+<p>This script upgrades an existing WebsiteBaker <strong> <?php echo $oldVersionOutput; ?></strong> installation to the <strong> <?php echo $newVersionOutput ?> </strong>.<br />The upgrade script alters the existing WB database to reflect the changes introduced with WB 2.8.x</p>
+
+<?php
+/**
+ * Check if disclaimer was accepted
+ */
+if (!(isset($_POST['backup_confirmed']) && $_POST['backup_confirmed'] == 'confirmed')) { ?>
+<h2>Step 1: Backup your files</h2>
+<p>It is highly recommended to <strong>create a manual backup</strong> of the entire <strong>/pages folder</strong> and the <strong>MySQL database</strong> before proceeding.<br /><strong class="error">Note: </strong>The upgrade script alters some settings of your existing database!!! You need to confirm the disclaimer before proceeding.</p>
+
+<form name="send" action="<?php echo $sScriptUrl;?>" method="post">
+    <textarea cols="80" rows="5">DISCLAIMER: The WebsiteBaker upgrade script 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. One needs to confirm that a manual backup of the /pages folder (including all files and subfolders contained in it) and backup of the entire WebsiteBaker MySQL database was created before you can proceed.</textarea>
+    <br /><br /><input name="backup_confirmed" type="checkbox" value="confirmed" />&nbsp;I confirm that a manual backup of the /pages folder and the MySQL database was created.
+    <br /><br /><input name="send" type="submit" value="Start upgrade script" />
+    </form>
+    <br />
+<?php
+    status_msg('<h4>You need to confirm that you have created a manual backup of the /pages directory and the MySQL database before you can proceed.</h4>', 'warning', 'div');
+    echo '<br />';
+    echo "</div>
+    </body>
+    </html>
+    ";
+    exit();
+}
+
+// function to add a var/value-pair into settings-table
+function db_add_key_value($key, $value) {
+    global $database, $OK, $FAIL;
+    $table = TABLE_PREFIX.'settings';
+    $query = $database->query("SELECT value FROM $table WHERE name = '$key' ");
+    if($query->numRows() > 0) {
+        echo "$key: already exists. $OK.<br />";
+        return true;
+    } else {
+        $database->query("INSERT INTO $table (name,value) VALUES ('$key', '$value')");
+        echo ($database->is_error() ? $database->get_error().'<br />' : '');
+        $query = $database->query("SELECT value FROM $table WHERE name = '$key' ");
+        if($query->numRows() > 0) {
+            echo "$key: $OK.<br />";
+            return true;
+        } else {
+            echo "$key: $FAIL!<br />";
+            return false;
+        }
+    }
+}
+
+// function to add a new field into a table
+function db_add_field($table, $field, $desc) {
+    global $database, $OK, $FAIL;
+    $table = TABLE_PREFIX.$table;
+    $query = $database->query("DESCRIBE $table '$field'");
+    if($query->numRows() == 0) { // add field
+        $query = $database->query("ALTER TABLE $table ADD $field $desc");
+        echo ($database->is_error() ? $database->get_error().'<br />' : '');
+        $query = $database->query("DESCRIBE $table '$field'");
+        echo ($database->is_error() ? $database->get_error().'<br />' : '');
+        if($query->numRows() > 0) {
+            echo "'$field' added. $OK.<br />";
+        } else {
+            echo "adding '$field' $FAIL!<br />";
+        }
+    } else {
+        echo "'$field' already exists. $OK.<br />";
+    }
+}
+/**
+ *
+ * @param object $oDb  current database object
+ * @param string $sTablePrefix the valid TABLE_PREFIX
+ * @return an error message or emty string on ok
+ */
+    function MigrateSettingsTable($oDb, $sTablePrefix, $aDefaults)
+    {
+        $sRetval = '';
+        $aSettings = [];
+        $aOldSettings = [];
+        $sql = 'SELECT * FROM `'.$sTablePrefix.'settings`';
+        if (($oSettings = $oDb->query($sql))) {
+            // backup all entries and remove duplicate entries
+            while (($aEntry = $oSettings->fetchArray(MYSQLI_ASSOC))) {
+                $aOldSettings[$aEntry ['name']] = $aEntry ['value'];
+            }
+            $aSettings = array_merge($aDefaults, $aOldSettings);
+            // drop the old table
+            $sql = 'DROP TABLE IF EXISTS `'.$sTablePrefix.'settings`';
+            if (!($oDb->query($sql))) { $sRetval = 'unable to delete old table `settings`'; goto end;}
+            // recreate the table with correctet structure
+            $sql = 'CREATE TABLE IF NOT EXISTS `'.$sTablePrefix.'settings` ('
+                 .     '`name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT \'\', '
+                 .     '`value` text COLLATE utf8_unicode_ci NOT NULL, '
+                 .     'PRIMARY KEY (`name`)'
+                 . ')ENGINE=MyIsam DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci';
+            if (!($oDb->query($sql))) { $sRetval = 'unable to recreate table `settings`'; goto end; }
+            // insert backed up entries into the new table
+            foreach ($aSettings as $sName => $sValue) {
+                $sql = 'INSERT INTO  `'.$sTablePrefix.'settings`'
+                     . 'SET `name`=\''.$oDb->escapeString($sName).'\', '
+                     .     '`value`=\''.$oDb->escapeString($sValue).'\'';
+                if (!($oDb->query($sql))) { $sRetval = 'unable to insert values into new table `settings`'; goto end;}
+                @define($sName, $sValue);
+            }
+        } else {
+            $sRetval = 'unable to read old table `settings`';
+        }
+end:
+        return $sRetval;
+    }
+
+// check again all tables, to get a new array
+ if(sizeof($all_tables) < sizeof($table_list)) { $all_tables = check_wb_tables(); }
+/**********************************************************
+ *  - check tables comin with WebsiteBaker
+ */
+    $check_text = 'total ';
+    // $check_tables = mysqlCheckTables( DB_NAME ) ;
+    if(sizeof($all_tables) == sizeof($table_list))
+    {
+        echo ('<h2>Step '.(++$stepID).' Your database '.DB_NAME.' has '.sizeof($all_tables).' '.$check_text.' tables from '.sizeof($table_list).' included in package '.$OK.'</h2>');
+    }
+    else
+    {
+        status_msg('can\'t run Upgrade, missing tables', 'warning', 'div');
+        echo '<h4>Missing required tables. You can install them in backend->addons->modules->advanced. Then again run upgrade-script.php</h4>';
+        $result = array_diff ( $table_list, $all_tables );
+        echo '<h4 class="warning"><br />';
+        while ( list ( $key, $val ) = each ( $result ) )
+        {
+            echo TABLE_PREFIX.$val.' '.$FAIL.'<br>';
+        }
+        echo '<br /></h4>';
+        echo '<br /><form action="'. $sScriptUrl .'">';
+        echo '<input type="submit" value="kick me back" style="float:left;" />';
+        echo '</form>';
+        if(defined('ADMIN_URL'))
+        {
+            echo '<form action="'.ADMIN_URL.'" target="_self">';
+            echo '&nbsp;<input type="submit" value="kick me to the Backend" />';
+            echo '</form>';
+        }
+        echo "<br /><br /></div>
+        </body>
+        </html>
+        ";
+        exit();
+    }
+echo '<h2>Step '.(++$stepID).' : clear Translate cache if exists</h2>';
+//**********************************************************
+if (is_writable(WB_PATH.'/temp/cache')) {
+    Translate::getInstance()->clearCache();
+}
+
+if (defined('DEBUG') && DEBUG){
+    echo '<h2>Step '.(++$stepID).' : Adding/Updating settings table</h2>';
+    echo "<br />Set DEBUG Modus to false in settings table<br />";
+    db_update_key_value('settings', 'debug', 'false');
+    $msg = '<p> The upgrade-script has be run properly, therefore the property Debug was set to the value false.</p><p>Please restart the upgrade-script!</p>';
+    status_msg($msg, 'error warning', 'div');
+    echo '<p style="font-size:120%;"><strong>WARNING: The upgrade script failed ...</strong></p>';
+    echo '<form action="'.$sScriptUrl.'">';
+    echo '&nbsp;<input name="send" type="submit" value="Restart upgrade script" />';
+    echo '</form>';
+    echo '<br /><br /></div></body></html>';
+    exit;
+
+}
+
+/**********************************************************/
+
+echo '<h2>Step '.(++$stepID).' : Adding/Updating database tables</h2>';
+/**********************************************************
+ *  - Upgrade Core Tables
+echo "<br />Upgrade Core Tables <br />"; $mysqli->error_list
+$sql = 'ALTER TABLE `'.TABLE_PREFIX.'addons` ADD UNIQUE `ident` ( `directory` )';
+ */
+// try to upgrade table if not exists
+$sInstallStruct = WB_PATH.'/install/install-struct.sql';
+if (is_readable($sInstallStruct))
+{
+    if (!$database->SqlImport($sInstallStruct, TABLE_PREFIX, true )){
+        echo '<div class="content">';
+        echo $database->get_error(). $FAIL.'(Index already exists)<br />';
+        echo '</div>';
+    } else {
+        echo '<div class="content">';
+        echo 'Upgrade Core Tables '. $OK.'<br />';
+        echo '</div>';
+        echo '<h2>Step '.(++$stepID).' Clear default title value in sections table</h2>';
+        echo '<div class="content">';
+        $sDescription = 'UPDATE `'.TABLE_PREFIX.'sections` SET `title` = REPLACE(`title`,\'Section-ID 0\',\'\') WHERE `title` LIKE \'%Section-ID%\'';
+        if (!$database->query($sDescription)){
+          echo 'Upgrading sections Table (empty title field) '. $FAIL.'<br />';
+        } else {
+          echo 'Upgrade sections Table '. $OK.'<br />';
+        }
+        echo '</div>';
+    }
+} else {
+
+    if (!is_readable(WB_PATH.'/install')) {
+    $msg = '<p>\'Missing or not readable install folder\' '.$FAIL.'</p>';
+    } else {
+    $msg = '<p>\'Missing or not readable file [install-struct.sql]\'</p> '.$FAIL.'';
+    }
+/*
+            $sWbPath = str_replace('\\', '/', WB_PATH );
+            array_walk($aMsg, function(&$sMsg) use ($sWbPath) { $sMsg = str_replace($sWbPath, '', $sMsg); });
+            $msg = implode('<br />', $aMsg).'<br />';
+*/
+    $msg = $msg.'<p>Check if the install folder exist.<br />Please upload install folder
+            using FTP and restart upgrade-script!</p>';
+    status_msg($msg, 'error warning', 'div');
+    echo '<p style="font-size:120%;">>WARNING: The upgrade script failed ...</p>';
+    echo '<form action="'.$sScriptUrl.'">';
+    echo '&nbsp;<input name="send" type="submit" value="Restart upgrade script" />';
+    echo '</form>';
+    echo '<br /><br /></div></body></html>';
+    exit;
+}
+
+// --- modify table `settings` -----------------------------------------------------------
+    echo '<h2>Step '.(++$stepID).' : Modify PRIMARY KEY in settings table and add missing entries</h2>';
+    echo '<div class="content">';
+    $msg = MigrateSettingsTable($database, TABLE_PREFIX, $aDefaultSettings);
+    echo ($msg!=''?$msg.' '.$FAIL:'Modify settings table '.$OK).'<br />';
+    echo '</div>';
+
+    echo '<h2>Step '.(++$stepID).' : Updating default_theme/default_template in settings table</h2>';
+/**********************************************************
+ *  - Adding field default_theme to settings table
+ */
+    echo '<div class="content">';
+    echo "Adding default_theme to settings table<br />";
+    db_update_key_value('settings', 'default_theme', $DEFAULT_THEME);
+    echo "Adding default_template to settings table<br />";
+    db_update_key_value('settings', 'default_template', $DEFAULT_TEMPLATE);
+    echo '</div>';
+
+#echo '<h2>Step '.(++$stepID).' : checking database entries</h2>';
+    $check_tables = mysqlCheckTables( DB_NAME ) ;
+
+/**********************************************************
+ *  - install droplets
+echo '<h2>Step '.(++$stepID).' : checking table droplets</h2>';
+    echo '<div class="content">';
+    $drops = (!in_array ( TABLE_PREFIX."mod_droplets", $check_tables)) ? "Install droplets" : "Upgrade droplets";
+    echo '<b>'.$drops.'</b><br />';
+     $file_name = (!in_array ( TABLE_PREFIX."mod_droplets", $check_tables) ? "install.php" : "upgrade.php");
+     require_once (WB_PATH."/modules/droplets/".$file_name);
+    echo '</div>';
+ */
+
+/**********************************************************
+ *  - Adding field sec_anchor to settings table
+ */
+    echo '<h2>Step '.(++$stepID).' : Adding/Updating settings table</h2>';
+    echo '<div class="content">';
+    echo "<br />Adding string_dir_mode and string_file_mode to settings table<br />";
+    $cfg = array(
+        'confirmed_registration' => (defined('CONFIRMED_REGISTRATION')?CONFIRMED_REGISTRATION:'0'),
+        'groups_updated' => (defined('GROUPS_UPDATED')?GROUPS_UPDATED:''),
+        'page_icon_dir' => (defined('PAGE_ICON_DIR')?PAGE_ICON_DIR:'/templates/*/title_images'),
+        'system_locked' => (defined('SYSTEM_LOCKED')?SYSTEM_LOCKED:'0'),
+        'string_dir_mode' => (defined('STRING_DIR_MODE')?STRING_DIR_MODE:'0755'),
+        'string_file_mode' => (defined('STRING_FILE_MODE')?STRING_FILE_MODE:'0644')
+    );
+    foreach($cfg as $key=>$value) {
+        db_add_key_value($key, $value);
+    }
+
+/**********************************************************
+ *  - Adding field sec_anchor to settings table
+ */
+    echo '<h2>Step '.(++$stepID).' : Adding/Updating settings table</h2>';
+    echo '<div class="content">';
+    echo "<br />Adding sec_anchor and website_signature to settings table<br />";
+    $cfg = array(
+        'sec_anchor' => (defined('SEC_ANCHOR')?SEC_ANCHOR:'wb_'),
+        'website_signature' => (defined('WEBSITE_SIGNATURE')?WEBSITE_SIGNATURE:'')
+    );
+    foreach($cfg as $key=>$value) {
+        db_add_key_value($key, $value);
+    }
+
+/**********************************************************
+ *  - Adding redirect timer to settings table
+ */
+echo "<br />Adding redirect timer to settings table<br />";
+$cfg = array(
+    'redirect_timer' => (defined('REDIRECT_TIMER')?REDIRECT_TIMER:'1500')
+);
+foreach($cfg as $key=>$value) {
+    db_add_key_value($key, $value);
+}
+
+/**********************************************************
+ *  - Adding rename_files_on_upload to settings table
+ */
+echo "<br />Updating rename_files_on_upload to settings table<br />";
+$cfg = array(
+    'rename_files_on_upload' => (defined(RENAME_FILES_ON_UPLOAD)?RENAME_FILES_ON_UPLOAD:'ph.*?,cgi,pl,pm,exe,com,bat,pif,cmd,src,asp,aspx,js')
+);
+db_add_key_value( 'rename_files_on_upload', $cfg['rename_files_on_upload']);
+
+/**********************************************************
+ *  - Adding mediasettings to settings table
+ */
+echo "<br />Adding mediasettings and debug to settings table<br />";
+
+$cfg = array(
+    'debug' => (defined('DEBUG')?DEBUG:'false'),
+    'mediasettings' => (defined('MEDIASETTINGS') ?MEDIASETTINGS:''),
+);
+
+foreach($cfg as $key=>$value) {
+    db_add_key_value($key, $value);
+}
+
+/**********************************************************
+ *  - Set wysiwyg_editor to settings table
+ */
+echo "<br />Set wysiwyg_editor to ckeditor<br />";
+    db_update_key_value('settings', 'wysiwyg_editor', 'ckeditor');
+
+/**********************************************************
+ *  - Adding fingerprint_with_ip_octets to settings table
+ */
+echo "<br />Adding fingerprint_with_ip_octets to settings table<br />";
+$cfg = array(
+    'sec_token_fingerprint' => (defined('SEC_TOKEN_FINGERPRINT') ?SEC_TOKEN_FINGERPRINT:'true'),
+    'sec_token_netmask4'    => (defined('SEC_TOKEN_NETMASK4') ?SEC_TOKEN_NETMASK4:'24'),
+    'sec_token_netmask6'    => (defined('SEC_TOKEN_NETMASK6') ?SEC_TOKEN_NETMASK6:'64'),
+    'sec_token_life_time'   => (defined('SEC_TOKEN_LIFE_TIME') ?SEC_TOKEN_LIFE_TIME:'180'),
+    'wbmailer_smtp_port'    => (defined('WBMAILER_SMTP_PORT') ?WBMAILER_SMTP_PORT:'25'),
+    'wbmailer_smtp_secure'  => (defined('WBMAILER_SMTP_SECURE') ?WBMAILER_SMTP_SECURE:'TLS')
+);
+foreach($cfg as $key=>$value) {
+    db_add_key_value($key, $value);
+}
+
+/**********************************************************
+ *  - Add field "redirect_type" to table "mod_menu_link"
+ */
+echo "<br />Adding field redirect_type to mod_menu_link table<br />";
+db_add_field('mod_menu_link', 'redirect_type', "INT NOT NULL DEFAULT '301' AFTER `target_page_id`");
+echo '</div>';
+
+/**********************************************************
+ *  - Update search no results database filed to create
+ *  valid XHTML if search is empty
+ */
+if (version_compare(WB_VERSION, '2.8', '<'))
+{
+    echo "<br />Updating database field `no_results` of search table: ";
+    $search_no_results = addslashes('<tr><td><p>[TEXT_NO_RESULTS]</p></td></tr>');
+    $sql  = 'UPDATE `'.TABLE_PREFIX.'search` ';
+    $sql .= 'SET `value`=\''.$search_no_results.'\' ';
+    $sql .= 'WHERE `name`=\'no_results\'';
+    echo ($database->query($sql)) ? ' $OK<br />' : ' $FAIL<br />';
+}
+/* *****************************************************************************
+ * - check for deprecated / never needed files
+ */
+    if(sizeof($filesRemove)) {
+        echo '<h2>Step '.(++$stepID).': Remove deprecated and old files</h2>';
+    }
+    $searches = array(
+        '[ROOT]',
+        '[ACCOUNT]',
+        '[ADMIN]',
+        '[INCLUDE]',
+        '[INSTALL]',
+        '[FRAMEWORK]',
+        '[MEDIA]',
+        '[MODULES]',
+        '[PAGES]',
+        '[TEMP]',
+        '[TEMPLATE]',
+        '[DOCU]'
+    );
+    $replacements = array(
+        '/',
+        '/account/',
+        '/'.substr(ADMIN_PATH, strlen(WB_PATH)+1).'/',
+        '/include/',
+        '/install/',
+        '/framework/',
+        MEDIA_DIRECTORY.'/',
+        '/modules/',
+        PAGES_DIRECTORY.'/',
+        '/temp/',
+        '/templates/',
+        '/DOCU/'
+    );
+
+        $aMsg = array();
+        array_walk(
+            $filesRemove,
+            function (&$sFile) use($searches, $replacements) {
+                $sFile = str_replace( '\\', '/', WB_PATH.str_replace($searches, $replacements, $sFile) );
+            }
+        );
+       foreach ( $filesRemove as $sFileToDelete ) {
+            if (false !== ($aExistingFiles = glob(dirname($sFileToDelete).'/*', GLOB_MARK)) ) {
+                if ( in_array($sFileToDelete, $aExistingFiles) ) {
+                    if ( is_writable($sFileToDelete) && unlink($sFileToDelete) ) {
+                        print '<strong>Remove  '.$sFileToDelete.'</strong>'." $OK<br />";
+                    } else {
+                        $aMsg[] = $sFileToDelete;
+                    }
+                }
+            }
+        }
+        unset($aExistingFiles);
+        if( sizeof($aMsg) )
+        {
+            $sWbPath = str_replace('\\', '/', WB_PATH );
+            array_walk($aMsg, function(&$sMsg) use ($sWbPath) { $sMsg = str_replace($sWbPath, '', $sMsg); });
+            $msg = implode('<br />', $aMsg).'<br />';
+            $msg = '<br /><br />Following files are deprecated, outdated or a security risk and
+                    can not be removed automatically.<br /><br />Please delete them
+                    using FTP and restart upgrade-script!<br /><br />'.$msg.'<br />';
+            status_msg($msg, 'error warning', 'div');
+            echo '<p style="font-size:120%;"><strong>WARNING: The upgrade script failed ...</strong></p>';
+            echo '<form action="'.$sScriptUrl.'">';
+            echo '&nbsp;<input name="send" type="submit" value="Restart upgrade script" />';
+            echo '</form>';
+            echo '<br /><br /></div></body></html>';
+            exit;
+        }
+
+
+/**********************************************************
+ * - check for deprecated / never needed folder
+ */
+    if(sizeof($dirRemove)) {
+        echo '<h2>Step  '.(++$stepID).': Remove deprecated and old folders</h2>';
+        $searches = array(
+            '[ADMIN]',
+            '[INCLUDE]',
+            '[MEDIA]',
+            '[MODULES]',
+            '[PAGES]',
+            '[TEMPLATE]',
+            '[INSTALL]'
+        );
+        $replacements = array(
+            '/'.substr(ADMIN_PATH, strlen(WB_PATH)+1).'/',
+            '/include/',
+            MEDIA_DIRECTORY.'/',
+            '/modules/',
+            PAGES_DIRECTORY.'/',
+            '/templates/',
+            '/install/'
+        );
+        $msg = '';
+        foreach( $dirRemove as $dir ) {
+            $dir = str_replace($searches, $replacements, $dir);
+            $dir = WB_PATH.'/'.$dir;
+            if( is_dir( $dir )) {
+            // try to delete dir
+                if(!rm_full_dir($dir)) {
+                // save in err-list, if failed
+                    $msg .= $dir.'<br />';
+                } else {
+                        print '<strong>Remove  '.$dir.'</strong>'." $OK<br />";
+                }
+            }
+        }
+        if($msg != '') {
+            $msg = '<br /><br />Following files are deprecated, outdated or a security risk and
+                    can not be removed automatically.<br /><br />Please delete them
+                    using FTP and restart upgrade-script!<br /><br />'.$msg.'<br />';
+            status_msg($msg, 'error warning', 'div');
+            echo '<p style="font-size:120%;"><strong>WARNING: The upgrade script failed ...</strong></p>';
+            echo '<form action="'.$sScriptUrl.'">';
+            echo '&nbsp;<input name="send" type="submit" value="Restart upgrade script" />';
+            echo '</form>';
+            echo '<br /><br /></div></body></html>';
+            exit;
+        }
+    }
+
+/**********************************************************
+ * upgrade modules if newer version is available
+    $aModuleList = array_intersect($aModuleDirList, $aModuleWhiteList);
+print '<pre  class="mod-pre rounded">function <span>'.__FUNCTION__.'( '.''.' );</span>  filename: <span>'.basename(__FILE__).'</span>  line: '.__LINE__.' -> <br />';
+print_r( in_array($sModulName, $aModuleWhiteList).'O) '.$sModulName.'=='.$aModuleWhiteList[$sModulName] ); print '</pre>'; flush (); //  ob_flush();;sleep(10); die();
+ */
+
+    echo '<h2>Step '.(++$stepID).' : Checking all addons with a newer version (upgrade)</h2>';
+    echo '<div class="content">';
+    $aModuleDirList = glob(WB_PATH.'/modules/*', GLOB_ONLYDIR|GLOB_ONLYDIR );
+    $i = $upgradeID = 0;
+#    $aModuleWhiteList = array_flip($aModuleWhiteList);
+    foreach($aModuleDirList as $sModul)
+    {
+        $sModulName = basename($sModul);
+        $i++;
+        if (in_array($sModulName, $aModuleWhiteList) && file_exists($sModul.'/upgrade.php'))
+        {
+            $currModulVersion = get_modul_version ($sModulName, false);
+            $newModulVersion =  get_modul_version ($sModulName, true);
+            if((version_compare($currModulVersion, $newModulVersion, '<' ) )) {
+                require($sModul.'/upgrade.php');
+                load_module($sModul);
+                echo '<h5> '.sprintf("[%2s]", (++$upgradeID)).' : Upgrade module \''.$sModulName.'\' from version '.$currModulVersion.' to version'.$newModulVersion.'</h5>';
+            } else {
+                echo '<h5 style="color: #16702B"> '.sprintf("[%2s]", (++$upgradeID)).' : Module \''.$sModulName.'\' - Your current version is '.$currModulVersion.'</h5>';
+            }
+        } else {
+            echo '<h5 style="color: #C26106"> '.sprintf("[%2s]", (++$upgradeID)).' : Unchecked Module \''.$sModulName.'\' is not registered in /install/ModuleWhiteList</h5>';
+
+        }
+    }
+    echo '</div>';
+/**********************************************************
+ *  - Reload all addons
+ */
+
+    echo '<h2>Step '.(++$stepID).' : Reload all addons database entry (no upgrade)</h2>';
+    echo '<div class="content">';
+    echo '<br />Modules will be reloaded<br />';
+/*
+*/
+    ////delete modules
+    $sql = 'DELETE FROM `'.TABLE_PREFIX.'addons` '
+         . 'WHERE `type` = \'module\'';
+    $database->query($sql);
+    // Load all modules
+    if( ($handle = opendir(WB_PATH.'/modules/')) ) {
+        while(false !== ($file = readdir($handle))) {
+            if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'admin.php' AND $file != 'index.php') {
+                load_module(WB_PATH.'/modules/'.$file );
+               //     upgrade_module($file, true);
+            }
+        }
+        closedir($handle);
+    }
+    ////delete templates
+    //$database->query("DELETE FROM ".TABLE_PREFIX."addons WHERE type = 'template'");
+    // Load all templates
+    if( ($handle = opendir(WB_PATH.'/templates/')) ) {
+        while(false !== ($file = readdir($handle))) {
+            if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'index.php') {
+                load_template(WB_PATH.'/templates/'.$file);
+            }
+        }
+        closedir($handle);
+    }
+    echo '<br />Templates reloaded<br />';
+
+    ////delete languages
+    //$database->query("DELETE FROM ".TABLE_PREFIX."addons WHERE type = 'language'");
+    // Load all languages
+    if( ($handle = opendir(WB_PATH.'/languages/')) ) {
+        while(false !== ($file = readdir($handle))) {
+            if($file != '' AND substr($file, 0, 1) != '.' AND $file != 'index.php') {
+                load_language(WB_PATH.'/languages/'.$file);
+            }
+        }
+        closedir($handle);
+    }
+    echo '<br />Languages reloaded<br />';
+
+/**********************************************************
+ *  - End of upgrade script
+ */
+
+// require(WB_PATH.'/framework/initialize.php');
+
+    if(!defined('DEFAULT_THEME')) { define('DEFAULT_THEME', $DEFAULT_THEME); }
+    if(!defined('THEME_PATH')) { define('THEME_PATH', WB_PATH.'/templates/'.DEFAULT_THEME);}
+    if(!defined('THEME_URL')) { define('THEME_URL', WB_URL.'/templates/'.DEFAULT_THEME);}
+
+    if(!defined('DEFAULT_TEMPLATE')) { define('DEFAULT_TEMPLATE', $DEFAULT_TEMPLATE); }
+    if(!defined('TEMPLATE_PATH')) { define('TEMPLATE_PATH', WB_PATH.'/templates/'.DEFAULT_TEMPLATE);}
+    if(!defined('TEMPLATE_DIR')) { define('TEMPLATE_DIR', WB_URL.'/templates/'.DEFAULT_TEMPLATE);}
+/**********************************************************
+ *  - Set Version to new Version
+ */
+    echo '<br />Reload all addons database entry (no upgrade)<br />';
+    echo '</div>';
+    echo '<h2>Step '.(++$stepID).' : Update WebsiteBaker version number to '.VERSION.' '.SP.' '.' Revision ['.REVISION.'] </h2>';
+    // echo ($database->query("UPDATE `".TABLE_PREFIX."settings` SET `value`='".VERSION."' WHERE `name` = 'wb_version'")) ? " $OK<br />" : " $FAIL<br />";
+    db_update_key_value('settings', 'wb_version', VERSION);
+    db_update_key_value('settings', 'wb_revision', REVISION);
+    db_update_key_value('settings', 'wb_sp', SP);
+
+    status_msg('<h2>Congratulations: The upgrade script is finished ...</h2>', 'info', 'div');
+
+    // show buttons to go to the backend or frontend
+    echo '<br />';
+    if(defined('WB_URL')) {
+        echo '<form action="'.WB_URL.'/">';
+        echo '&nbsp;<input type="submit" value="kick me to the Frontend" />';
+        echo '</form>';
+    }
+    if(defined('ADMIN_URL')) {
+        echo '<form action="'.ADMIN_URL.'/">';
+        echo '&nbsp;<input type="submit" value="kick me to the Backend" />';
+        echo '</form>';
+    }
+
+    echo '<br /><br /></div></body></html>';

Property changes on: trunk/upgrade-script.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Index: trunk/var/logs/PLACEHOLDER
===================================================================
--- trunk/var/logs/PLACEHOLDER	(nonexistent)
+++ trunk/var/logs/PLACEHOLDER	(revision 2)
@@ -0,0 +1 @@
+/* this file can be removed after installation */
\ No newline at end of file
